ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IDFkMzlhNmQuLmRjYTZhYmMgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtMTY3Nyw3ICsxNjc3LDcgQEAKIEQ6IEFzc29ydGVkIFZJQSB4ODYgc3VwcG9ydC4KIEQ6IDIuNSBBR1BHQVJUIG92ZXJoYXVsLgogRDogQ1BVRlJFUSBtYWludGVuYW5jZS4KLUQ6IEZlZG9yYSBrZXJuZWwgbWFpbnRhaW5lbmNlLgorRDogRmVkb3JhIGtlcm5lbCBtYWludGVuYW5jZS4KIEQ6IE1pc2MvT3RoZXIuCiBTOiAzMTQgTGl0dGxldG9uIFJkLCBXZXN0Zm9yZCwgTUEgMDE4ODYsIFVTQQogCkBAIC0zMjExLDcgKzMyMTEsNyBAQAogRToganNpbW1vbnNAaW5mcmFkZWFkLm9yZwogRToganNpbW1vbnNAdXNlcnMuc2YubmV0IAogRDogRnJhbWUgYnVmZmVyIGRldmljZSBtYWludGFpbmVyCi1EOiBpbnB1dCBsYXllciBkZXZlbG9wZW1lbnQgCitEOiBpbnB1dCBsYXllciBkZXZlbG9wbWVudAogRDogdHR5L2NvbnNvbGUgbGF5ZXIKIEQ6IHZhcmlvdXMgbWlwc2VsIGRldmljZXMgCiBTOiAxMTUgQ2FybWVsIEF2ZW51ZSAKQEAgLTMyOTAsNyArMzI5MCw3IEBACiBOOiBNYW5mcmVkIFNwcmF1bAogRTogbWFuZnJlZEBjb2xvcmZ1bGxpZmUuY29tCiBXOiBodHRwOi8vd3d3LmNvbG9yZnVsbGlmZS5jb20vfm1hbmZyZWQKLUQ6IExvdHMgb2YgdGlueSBoYWNrcy4gTGFyZ2VyIGltcHJvdm1lbnRzIHRvIFN5c1YgSVBDIG1zZywKK0Q6IExvdHMgb2YgdGlueSBoYWNrcy4gTGFyZ2VyIGltcHJvdmVtZW50cyB0byBTeXNWIElQQyBtc2csCiBEOiBzbGFiLCBwaXBlLCBzZWxlY3QuCiBTOiA3MTcwMSBTY2h3aWViZXJkaW5nZW4KIFM6IEdlcm1hbnkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWNzcyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWNzcwppbmRleCBiNTg1ZWMyLi4yOTc5YzQwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1jc3MKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtY3NzCkBAIC0yOSw3ICsyOSw3IEBACiAJCWxpbnV4LXMzOTBAdmdlci5rZXJuZWwub3JnCiBEZXNjcmlwdGlvbjoJQ29udGFpbnMgdGhlIFBJTS9QQU0vUE9NIHZhbHVlcywgYXMgcmVwb3J0ZWQgYnkgdGhlCiAJCWNoYW5uZWwgc3Vic3lzdGVtIHdoZW4gbGFzdCBxdWVyaWVkIGJ5IHRoZSBjb21tb24gSS9PCi0JCWxheWVyICh0aGlzIGltcGxpZXMgdGhhdCB0aGlzIGF0dHJpYnV0ZSBpcyBub3QgbmVjY2Vzc2FyaWx5CisJCWxheWVyICh0aGlzIGltcGxpZXMgdGhhdCB0aGlzIGF0dHJpYnV0ZSBpcyBub3QgbmVjZXNzYXJpbHkKIAkJaW4gc3luYyB3aXRoIHRoZSB2YWx1ZXMgY3VycmVudCBpbiB0aGUgY2hhbm5lbCBzdWJzeXN0ZW0pLgogCQlOb3RlOiBUaGlzIGlzIGFuIEkvTy1zdWJjaGFubmVsIHNwZWNpZmljIGF0dHJpYnV0ZS4KIFVzZXJzOgkJczM5MC10b29scywgSEFMCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWxlZCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkCmluZGV4IGVkZmY2NjMuLjM2NDZlYzggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbGVkCkBAIC0zMyw1ICszMyw1IEBACiBEZXNjcmlwdGlvbjoKIAkJSW52ZXJ0IHRoZSBMRUQgb24vb2ZmIHN0YXRlLiBUaGlzIHBhcmFtZXRlciBpcyBzcGVjaWZpYyB0bwogCQlncGlvIGFuZCBiYWNrbGlnaHQgdHJpZ2dlcnMuIEluIGNhc2Ugb2YgdGhlIGJhY2tsaWdodCB0cmlnZ2VyLAotCQlpdCBpcyB1c2VmdWxsIHdoZW4gZHJpdmluZyBhIExFRCB3aGljaCBpcyBpbnRlbmRlZCB0byBpbmRpY2F0ZQorCQlpdCBpcyB1c2VmdWwgd2hlbiBkcml2aW5nIGEgTEVEIHdoaWNoIGlzIGludGVuZGVkIHRvIGluZGljYXRlCiAJCWEgZGV2aWNlIGluIGEgc3RhbmRieSBsaWtlIHN0YXRlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9kdmJwcm9wZXJ0eS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2R2YnByb3BlcnR5LnhtbAppbmRleCA1ZjU3YzdjLi45N2YzOTdlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2R2YnByb3BlcnR5LnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2R2YnByb3BlcnR5LnhtbApAQCAtNDAsNyArNDAsNyBAQAogCiAJCQk8cGFyYT5DZW50cmFsIGZyZXF1ZW5jeSBvZiB0aGUgY2hhbm5lbC48L3BhcmE+CiAKLQkJCTxwYXJhPkZvciBJU0RCLVQgdGhlIGNoYW5uZWxzIGFyZSB1c2FsbHkgdHJhbnNtaXR0ZWQgd2l0aCBhbiBvZmZzZXQgb2YgMTQza0h6LiBFLmcuIGEKKwkJCTxwYXJhPkZvciBJU0RCLVQgdGhlIGNoYW5uZWxzIGFyZSB1c3VhbGx5IHRyYW5zbWl0dGVkIHdpdGggYW4gb2Zmc2V0IG9mIDE0M2tIei4gRS5nLiBhCiAJCQkJdmFsaWQgZnJlcXVuY3kgY291bGQgYmUgNDc0MTQzIGtIei4gVGhlIHN0ZXBwaW5nIGlzIGJvdW5kIHRvIHRoZSBiYW5kd2lkdGggb2YKIAkJCQl0aGUgY2hhbm5lbCB3aGljaCBpcyA2TUh6LjwvcGFyYT4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9mcm9udGVuZC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2Zyb250ZW5kLnhtbAppbmRleCA3OGQ3NTZkLi42MGM2OTc2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2Zyb250ZW5kLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2Zyb250ZW5kLnhtbApAQCAtMTM5LDcgKzEzOSw3IEBACiA8c2VjdGlvbiBpZD0iZnJvbnRlbmRfc2VjX3RvbmUiPgogPHRpdGxlPlNFQyBjb250aW51b3VzIHRvbmU8L3RpdGxlPgogCi08cGFyYT5UaGUgY29udGlub3VzIDIyS0h6IHRvbmUgaXMgdXN1YWxseSB1c2VkIHdpdGggbm9uLURpU0VxQyBjYXBhYmxlIExOQnMgdG8gc3dpdGNoIHRoZQorPHBhcmE+VGhlIGNvbnRpbnVvdXMgMjJLSHogdG9uZSBpcyB1c3VhbGx5IHVzZWQgd2l0aCBub24tRGlTRXFDIGNhcGFibGUgTE5CcyB0byBzd2l0Y2ggdGhlCiBoaWdoL2xvdyBiYW5kIG9mIGEgZHVhbC1iYW5kIExOQi4gV2hlbiB1c2luZyBEaVNFcUMgZXB1aXBtZW50IHRoaXMgdm9sdGFnZSBoYXMgdG8KIGJlIHN3aXRjaGVkIGNvbnNpc3RlbnRseSB0byB0aGUgRGlTRXFDIGNvbW1hbmRzIGFzIGRlc2NyaWJlZCBpbiB0aGUgRGlTRXFDCiBzcGVjLjwvcGFyYT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtbG9ja2luZy50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1sb2NraW5nLnRtcGwKaW5kZXggZjY2ZjRkZi4uNjdlN2FiNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1sb2NraW5nLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1sb2NraW5nLnRtcGwKQEAgLTE3NjMsNyArMTc2Myw3IEBACiBUaGVyZSBpcyBhIGZ1cnRodXIgb3B0aW1pemF0aW9uIHBvc3NpYmxlIGhlcmU6IHJlbWVtYmVyIG91ciBvcmlnaW5hbAogY2FjaGUgY29kZSwgd2hlcmUgdGhlcmUgd2VyZSBubyByZWZlcmVuY2UgY291bnRzIGFuZCB0aGUgY2FsbGVyIHNpbXBseQogaGVsZCB0aGUgbG9jayB3aGVuZXZlciB1c2luZyB0aGUgb2JqZWN0PyAgVGhpcyBpcyBzdGlsbCBwb3NzaWJsZTogaWYKLXlvdSBob2xkIHRoZSBsb2NrLCBub29uZSBjYW4gZGVsZXRlIHRoZSBvYmplY3QsIHNvIHlvdSBkb24ndCBuZWVkIHRvCit5b3UgaG9sZCB0aGUgbG9jaywgbm8gb25lIGNhbiBkZWxldGUgdGhlIG9iamVjdCwgc28geW91IGRvbid0IG5lZWQgdG8KIGdldCBhbmQgcHV0IHRoZSByZWZlcmVuY2UgY291bnQuCiA8L3BhcmE+CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9saWJhdGEudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9saWJhdGEudG1wbAppbmRleCA4YzU0MTFjLi5jZGQxYmI5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbGliYXRhLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2xpYmF0YS50bXBsCkBAIC0xMDMyLDcgKzEwMzIsNyBAQAogCSAgIDxsaXN0aXRlbT4KIAkgICA8cGFyYT4KIAkgICBUaGlzIGlzIGluZGljYXRlZCBieSBJQ1JDIGJpdCBpbiB0aGUgRVJST1IgcmVnaXN0ZXIgYW5kCi0JICAgbWVhbnMgdGhhdCBjb3JydXB0aW9uIG9jY3VycmVkIGR1cmluZyBkYXRhIHRyYW5zZmVyLiAgVXB0bworCSAgIG1lYW5zIHRoYXQgY29ycnVwdGlvbiBvY2N1cnJlZCBkdXJpbmcgZGF0YSB0cmFuc2Zlci4gIFVwIHRvCiAJICAgQVRBL0FUQVBJLTcsIHRoZSBzdGFuZGFyZCBzcGVjaWZpZXMgdGhhdCB0aGlzIGJpdCBpcyBvbmx5CiAJICAgYXBwbGljYWJsZSB0byBVRE1BIHRyYW5zZmVycyBidXQgQVRBL0FUQVBJLTggZHJhZnQgcmV2aXNpb24KIAkgICAxZiBzYXlzIHRoYXQgdGhlIGJpdCBtYXkgYmUgYXBwbGljYWJsZSB0byBtdWx0aXdvcmQgRE1BIGFuZApAQCAtMTA0NSwxMCArMTA0NSwxMCBAQAogCSAgIDx0ZXJtPkFCUlQgZXJyb3IgZHVyaW5nIGRhdGEgdHJhbnNmZXIgb3Igb24gY29tcGxldGlvbjwvdGVybT4KIAkgICA8bGlzdGl0ZW0+CiAJICAgPHBhcmE+Ci0JICAgVXB0byBBVEEvQVRBUEktNywgdGhlIHN0YW5kYXJkIHNwZWNpZmllcyB0aGF0IEFCUlQgY291bGQgYmUKKwkgICBVcCB0byBBVEEvQVRBUEktNywgdGhlIHN0YW5kYXJkIHNwZWNpZmllcyB0aGF0IEFCUlQgY291bGQgYmUKIAkgICBzZXQgb24gSUNSQyBlcnJvcnMgYW5kIG9uIGNhc2VzIHdoZXJlIGEgZGV2aWNlIGlzIG5vdCBhYmxlCiAJICAgdG8gY29tcGxldGUgYSBjb21tYW5kLiAgQ29tYmluZWQgd2l0aCB0aGUgZmFjdCB0aGF0IE1XRE1BCi0JICAgYW5kIFBJTyB0cmFuc2ZlciBlcnJvcnMgYXJlbid0IGFsbG93ZWQgdG8gdXNlIElDUkMgYml0IHVwdG8KKwkgICBhbmQgUElPIHRyYW5zZmVyIGVycm9ycyBhcmVuJ3QgYWxsb3dlZCB0byB1c2UgSUNSQyBiaXQgdXAgdG8KIAkgICBBVEEvQVRBUEktNywgaXQgc2VlbXMgdG8gaW1wbHkgdGhhdCBBQlJUIGJpdCBhbG9uZSBjb3VsZAogCSAgIGluZGljYXRlIHRyYW5mZXIgZXJyb3JzLgogCSAgIDwvcGFyYT4KQEAgLTExMjIsNyArMTEyMiw3IEBACiAJPHBhcmE+CiAJRGVwZW5kaW5nIG9uIGNvbW1hbmRzLCBub3QgYWxsIFNUQVRVUy9FUlJPUiBiaXRzIGFyZQogCWFwcGxpY2FibGUuICBUaGVzZSBub24tYXBwbGljYWJsZSBiaXRzIGFyZSBtYXJrZWQgd2l0aAotCSZxdW90O25hJnF1b3Q7IGluIHRoZSBvdXRwdXQgZGVzY3JpcHRpb25zIGJ1dCB1cHRvIEFUQS9BVEFQSS03CisJJnF1b3Q7bmEmcXVvdDsgaW4gdGhlIG91dHB1dCBkZXNjcmlwdGlvbnMgYnV0IHVwIHRvIEFUQS9BVEFQSS03CiAJbm8gZGVmaW5pdGlvbiBvZiAmcXVvdDtuYSZxdW90OyBjYW4gYmUgZm91bmQuICBIb3dldmVyLAogCUFUQS9BVEFQSS04IGRyYWZ0IHJldmlzaW9uIDFmIGRlc2NyaWJlcyAmcXVvdDtOL0EmcXVvdDsgYXMKIAlmb2xsb3dzLgpAQCAtMTUwNyw3ICsxNTA3LDcgQEAKIAogCTxsaXN0aXRlbT4KIAk8cGFyYT4KLQlDSFMgc2V0IHVwIHdpdGggSU5JVElBTElaRSBERVZJQ0UgUEFSQU1FVEVSUyAoc2VsZG9tbHkgdXNlZCkKKwlDSFMgc2V0IHVwIHdpdGggSU5JVElBTElaRSBERVZJQ0UgUEFSQU1FVEVSUyAoc2VsZG9tIHVzZWQpCiAJPC9wYXJhPgogCTwvbGlzdGl0ZW0+CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS1lbnRpdGllcy50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhLWVudGl0aWVzLnRtcGwKaW5kZXggNWQyNTljNi4uZmVhNjNiNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhLWVudGl0aWVzLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhLWVudGl0aWVzLnRtcGwKQEAgLTI5NCw2ICsyOTQsNyBAQAogPCFFTlRJVFkgc3ViLXNyZ2diMTAgU1lTVEVNICJ2NGwvcGl4Zm10LXNyZ2diMTAueG1sIj4KIDwhRU5USVRZIHN1Yi1zcmdnYjggU1lTVEVNICJ2NGwvcGl4Zm10LXNyZ2diOC54bWwiPgogPCFFTlRJVFkgc3ViLXkxMCBTWVNURU0gInY0bC9waXhmbXQteTEwLnhtbCI+Cis8IUVOVElUWSBzdWIteTEyIFNZU1RFTSAidjRsL3BpeGZtdC15MTIueG1sIj4KIDwhRU5USVRZIHN1Yi1waXhmbXQgU1lTVEVNICJ2NGwvcGl4Zm10LnhtbCI+CiA8IUVOVElUWSBzdWItY3JvcGNhcCBTWVNURU0gInY0bC92aWRpb2MtY3JvcGNhcC54bWwiPgogPCFFTlRJVFkgc3ViLWRiZy1nLXJlZ2lzdGVyIFNZU1RFTSAidjRsL3ZpZGlvYy1kYmctZy1yZWdpc3Rlci54bWwiPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL210ZG5hbmQudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tdGRuYW5kLnRtcGwKaW5kZXggNjIwZWIzZi4uNmYyNDJkNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL210ZG5hbmQudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbXRkbmFuZC50bXBsCkBAIC00ODUsNyArNDg1LDcgQEAKIAkJCQlSZWVkLVNvbG9tb24gbGlicmFyeS4KIAkJCTwvcGFyYT4KIAkJCTxwYXJhPgotCQkJCVRoZSBFQ0MgYnl0ZXMgbXVzdCBiZSBwbGFjZWQgaW1taWRpYXRlbHkgYWZ0ZXIgdGhlIGRhdGEKKwkJCQlUaGUgRUNDIGJ5dGVzIG11c3QgYmUgcGxhY2VkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBkYXRhCiAJCQkJYnl0ZXMgaW4gb3JkZXIgdG8gbWFrZSB0aGUgc3luZHJvbWUgZ2VuZXJhdG9yIHdvcmsuIFRoaXMKIAkJCQlpcyBjb250cmFyeSB0byB0aGUgdXN1YWwgbGF5b3V0IHVzZWQgYnkgc29mdHdhcmUgRUNDLiBUaGUKIAkJCQlzZXBhcmF0aW9uIG9mIGRhdGEgYW5kIG91dCBvZiBiYW5kIGFyZWEgaXMgbm90IGxvbmdlcgpAQCAtNjI5LDcgKzYyOSw3IEBACiAJCQkJaG9sZHMgdGhlIGJhZCBibG9jayB0YWJsZS4gU3RvcmUgYSBwb2ludGVyIHRvIHRoZSBwYXR0ZXJuICAKIAkJCQlpbiB0aGUgcGF0dGVybiBmaWVsZC4gRnVydGhlciB0aGUgbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuIGhhcyB0byBiZSAKIAkJCQlzdG9yZWQgaW4gbGVuIGFuZCB0aGUgb2Zmc2V0IGluIHRoZSBzcGFyZSBhcmVhIG11c3QgYmUgZ2l2ZW4KLQkJCQlpbiB0aGUgb2ZmcyBtZW1iZXIgb2YgdGhlIG5hbmRfYmJ0X2Rlc2NyIHN0dWN0dXJlLiBGb3IgbWlycm9yZWQKKwkJCQlpbiB0aGUgb2ZmcyBtZW1iZXIgb2YgdGhlIG5hbmRfYmJ0X2Rlc2NyIHN0cnVjdHVyZS4gRm9yIG1pcnJvcmVkCiAJCQkJYmFkIGJsb2NrIHRhYmxlcyBkaWZmZXJlbnQgcGF0dGVybnMgYXJlIG1hbmRhdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KIAkJCQk8bGlzdGl0ZW0+PHBhcmE+VGFibGUgY3JlYXRpb248L3BhcmE+CiAJCQkJPHBhcmE+U2V0IHRoZSBvcHRpb24gTkFORF9CQlRfQ1JFQVRFIHRvIGVuYWJsZSB0aGUgdGFibGUgY3JlYXRpb24KQEAgLTY0OCw3ICs2NDgsNyBAQAogCQkJCTxsaXN0aXRlbT48cGFyYT5UYWJsZSB2ZXJzaW9uIGNvbnRyb2w8L3BhcmE+CiAJCQkJPHBhcmE+U2V0IHRoZSBvcHRpb24gTkFORF9CQlRfVkVSU0lPTiB0byBlbmFibGUgdGhlIHRhYmxlIHZlcnNpb24gY29udHJvbC4KIAkJCQlJdCdzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBlbmFibGUgdGhpcyBmb3IgbWlycm9yZWQgdGFibGVzIHdpdGggd3JpdGUKLQkJCQlzdXBwb3J0LiBJdCBtYWtlcyBzdXJlIHRoYXQgdGhlIHJpc2sgb2YgbG9vc2luZyB0aGUgYmFkIGJsb2NrCisJCQkJc3VwcG9ydC4gSXQgbWFrZXMgc3VyZSB0aGF0IHRoZSByaXNrIG9mIGxvc2luZyB0aGUgYmFkIGJsb2NrCiAJCQkJdGFibGUgaW5mb3JtYXRpb24gaXMgcmVkdWNlZCB0byB0aGUgbG9zcyBvZiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCiAJCQkJb25lIHdvcm4gb3V0IGJsb2NrIHdoaWNoIHNob3VsZCBiZSBtYXJrZWQgYmFkLiBUaGUgdmVyc2lvbiBpcyBzdG9yZWQgaW4KIAkJCQk0IGNvbnNlY3V0aXZlIGJ5dGVzIGluIHRoZSBzcGFyZSBhcmVhIG9mIHRoZSBkZXZpY2UuIFRoZSBwb3NpdGlvbiBvZgpAQCAtMTA2MCwxOSArMTA2MCwxOSBAQAogPHJvdz4KIDxlbnRyeT4weDNEPC9lbnRyeT4KIDxlbnRyeT5FQ0MgYnl0ZSAyMTwvZW50cnk+Ci08ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMCBvZiB0aGUgZWlndGggMjU2IEJ5dGVzIG9mIGRhdGEKKzxlbnRyeT5FcnJvciBjb3JyZWN0aW9uIGNvZGUgYnl0ZSAwIG9mIHRoZSBlaWdodGggMjU2IEJ5dGVzIG9mIGRhdGEKIGluIHRoaXMgcGFnZTwvZW50cnk+CiA8L3Jvdz4KIDxyb3c+CiA8ZW50cnk+MHgzRTwvZW50cnk+CiA8ZW50cnk+RUNDIGJ5dGUgMjI8L2VudHJ5PgotPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDEgb2YgdGhlIGVpZ3RoIDI1NiBCeXRlcyBvZiBkYXRhCis8ZW50cnk+RXJyb3IgY29ycmVjdGlvbiBjb2RlIGJ5dGUgMSBvZiB0aGUgZWlnaHRoIDI1NiBCeXRlcyBvZiBkYXRhCiBpbiB0aGlzIHBhZ2U8L2VudHJ5PgogPC9yb3c+CiA8cm93PgogPGVudHJ5PjB4M0Y8L2VudHJ5PgogPGVudHJ5PkVDQyBieXRlIDIzPC9lbnRyeT4KLTxlbnRyeT5FcnJvciBjb3JyZWN0aW9uIGNvZGUgYnl0ZSAyIG9mIHRoZSBlaWd0aCAyNTYgQnl0ZXMgb2YgZGF0YQorPGVudHJ5PkVycm9yIGNvcnJlY3Rpb24gY29kZSBieXRlIDIgb2YgdGhlIGVpZ2h0aCAyNTYgQnl0ZXMgb2YgZGF0YQogaW4gdGhpcyBwYWdlPC9lbnRyeT4KIDwvcm93PgogPC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svcmVndWxhdG9yLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svcmVndWxhdG9yLnRtcGwKaW5kZXggNTNmNGY4ZC4uMzQ2ZTU1MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3JlZ3VsYXRvci50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9yZWd1bGF0b3IudG1wbApAQCAtMjY3LDggKzI2Nyw4IEBACiAgICAgIDxzZWN0MSBpZD0ibWFjaGluZS1jb25zdHJhaW50Ij4KICAgICAgICA8dGl0bGU+Q29uc3RyYWludHM8L3RpdGxlPgogICAgICAgIDxwYXJhPgotCSBBcyB3ZWxsIGFzIGRlZmluaW5pbmcgdGhlIGNvbm5lY3Rpb25zIHRoZSBtYWNoaW5lIGludGVyZmFjZQotCSBhbHNvIHByb3ZpZGVzIGNvbnN0cmFpbnRzIGRlZmluaW5pbmcgdGhlIG9wZXJhdGlvbnMgdGhhdAorCSBBcyB3ZWxsIGFzIGRlZmluaW5nIHRoZSBjb25uZWN0aW9ucyB0aGUgbWFjaGluZSBpbnRlcmZhY2UKKwkgYWxzbyBwcm92aWRlcyBjb25zdHJhaW50cyBkZWZpbmluZyB0aGUgb3BlcmF0aW9ucyB0aGF0CiAJIGNsaWVudHMgYXJlIGFsbG93ZWQgdG8gcGVyZm9ybSBhbmQgdGhlIHBhcmFtZXRlcnMgdGhhdCBtYXkgYmUKIAkgc2V0LiAgVGhpcyBpcyByZXF1aXJlZCBzaW5jZSBnZW5lcmFsbHkgcmVndWxhdG9yIGRldmljZXMgd2lsbAogCSBvZmZlciBtb3JlIGZsZXhpYmlsaXR5IHRoYW4gaXQgaXMgc2FmZSB0byB1c2Ugb24gYSBnaXZlbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Vpby1ob3d0by50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Vpby1ob3d0by50bXBsCmluZGV4IGI0NjY1YjkuLjdjNGI1MTRkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdWlvLWhvd3RvLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Vpby1ob3d0by50bXBsCkBAIC03OTcsNyArNzk3LDcgQEAKIAlwZXJmb3JtIHNvbWUgaW5pdGlhbGl6YXRpb24uIEFmdGVyIHRoYXQsIHlvdXIgaGFyZHdhcmUKIAlzdGFydHMgd29ya2luZyBhbmQgd2lsbCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgYXMgc29vbgogCWFzIGl0J3MgZmluaXNoZWQsIGhhcyBzb21lIGRhdGEgYXZhaWxhYmxlLCBvciBuZWVkcyB5b3VyCi0JYXR0ZW50aW9uIGJlY2F1c2UgYW4gZXJyb3Igb2NjdXJlZC4KKwlhdHRlbnRpb24gYmVjYXVzZSBhbiBlcnJvciBvY2N1cnJlZC4KIAk8L3BhcmE+CiAJPHBhcmE+CiAJPGZpbGVuYW1lPi9kZXYvdWlvWDwvZmlsZW5hbWU+IGlzIGEgcmVhZC1vbmx5IGZpbGUuIEEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay91c2IudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay91c2IudG1wbAppbmRleCBhZjI5MzYwLi44ZDU3YzE4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdXNiLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3VzYi50bXBsCkBAIC02OTAsNyArNjkwLDcgQEAKIAkJICAgIDwvcGFyYT48cGFyYT4KIAkJICAgIFRoaXMgcmVxdWVzdCBsZXRzIGtlcm5lbCBkcml2ZXJzIHRhbGsgdG8gdXNlciBtb2RlIGNvZGUKIAkJICAgIHRocm91Z2ggZmlsZXN5c3RlbSBvcGVyYXRpb25zIGV2ZW4gd2hlbiB0aGV5IGRvbid0IGNyZWF0ZQotCQkgICAgYSBjaGFyYWN0b3Igb3IgYmxvY2sgc3BlY2lhbCBkZXZpY2UuCisJCSAgICBhIGNoYXJhY3RlciBvciBibG9jayBzcGVjaWFsIGRldmljZS4KIAkJICAgIEl0J3MgYWxzbyBiZWVuIHVzZWQgdG8gZG8gdGhpbmdzIGxpa2UgYXNrIGRldmljZXMgd2hhdAogCQkgICAgZGV2aWNlIHNwZWNpYWwgZmlsZSBzaG91bGQgYmUgdXNlZC4KIAkJICAgIFR3byBwcmUtZGVmaW5lZCBpb2N0bHMgYXJlIHVzZWQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY29tbW9uLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY29tbW9uLnhtbAppbmRleCBkYmFiNzljLi45MDI4NzIxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NvbW1vbi54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9jb21tb24ueG1sCkBAIC0xMDAsNyArMTAwLDcgQEAKIAogICAgICAgPHBhcmE+QnkgY29udmVudGlvbiBzeXN0ZW0gYWRtaW5pc3RyYXRvcnMgY3JlYXRlIHZhcmlvdXMKIGNoYXJhY3RlciBkZXZpY2Ugc3BlY2lhbCBmaWxlcyB3aXRoIHRoZXNlIG1ham9yIGFuZCBtaW5vciBudW1iZXJzIGluCi10aGUgPGZpbGVuYW1lPi9kZXY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuIFRoZSBuYW1lcyByZWNvbWVuZGVkIGZvciB0aGUKK3RoZSA8ZmlsZW5hbWU+L2RldjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4gVGhlIG5hbWVzIHJlY29tbWVuZGVkIGZvciB0aGUKIGRpZmZlcmVudCBWNEwyIGRldmljZSB0eXBlcyBhcmUgbGlzdGVkIGluIDx4cmVmIGxpbmtlbmQ9ImRldmljZXMiIC8+LgogPC9wYXJhPgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NvbnRyb2xzLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY29udHJvbHMueG1sCmluZGV4IDJmYWUzZTguLmE5MjBlZTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY29udHJvbHMueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY29udHJvbHMueG1sCkBAIC0xMjQzLDcgKzEyNDMsNyBAQAogCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+TXV0ZXMgdGhlIGF1ZGlvIHdoZW4KIGNhcHR1cmluZy4gVGhpcyBpcyBub3QgZG9uZSBieSBtdXRpbmcgYXVkaW8gaGFyZHdhcmUsIHdoaWNoIGNhbiBzdGlsbAogcHJvZHVjZSBhIHNsaWdodCBoaXNzLCBidXQgaW4gdGhlIGVuY29kZXIgaXRzZWxmLCBndWFyYW50ZWVpbmcgYSBmaXhlZAotYW5kIHJlcHJvZHVjYWJsZSBhdWRpbyBiaXRzdHJlYW0uIDAgPSB1bm11dGVkLCAxID0gbXV0ZWQuPC9lbnRyeT4KK2FuZCByZXByb2R1Y2libGUgYXVkaW8gYml0c3RyZWFtLiAwID0gdW5tdXRlZCwgMSA9IG11dGVkLjwvZW50cnk+CiAJICAgICAgPC9yb3c+CiAJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KIAkgICAgICA8cm93IGlkPSJ2NGwyLW1wZWctdmlkZW8tZW5jb2RpbmciPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtc3ViZGV2LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LXN1YmRldi54bWwKaW5kZXggMjFjYWZmNi4uMDVjOGZlZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtc3ViZGV2LnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1zdWJkZXYueG1sCkBAIC05MCw3ICs5MCw3IEBACiAgICAgcHJvY2Vzc2luZyBoYXJkd2FyZS48L3BhcmE+CiAKICAgICA8ZmlndXJlIGlkPSJwaXBlbGluZS1zY2FsaW5nIj4KLSAgICAgIDx0aXRsZT5JbWFnZSBGb3JtYXQgTmVnb3RhdGlvbiBvbiBQaXBlbGluZXM8L3RpdGxlPgorICAgICAgPHRpdGxlPkltYWdlIEZvcm1hdCBOZWdvdGlhdGlvbiBvbiBQaXBlbGluZXM8L3RpdGxlPgogICAgICAgPG1lZGlhb2JqZWN0PgogCTxpbWFnZW9iamVjdD4KIAkgIDxpbWFnZWRhdGEgZmlsZXJlZj0icGlwZWxpbmUucGRmIiBmb3JtYXQ9IlBTIiAvPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9saWJ2NGwueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9saWJ2NGwueG1sCmluZGV4IGMxNGZjM2QuLjNjYjEwZWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvbGlidjRsLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2xpYnY0bC54bWwKQEAgLTE0MCw3ICsxNDAsNyBAQAogCQkJPHBhcmE+aW50IHY0bDJfZ2V0X2NvbnRyb2woaW50IGZkLCBpbnQgY2lkKSAtCiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSBvZiAwIC0gNjU1MzUsIHNjYWxlZCB0byBmcm9tIHRoZSBhY3R1YWwgcmFuZ2UKIG9mIHRoZSBnaXZlbiB2NGwgY29udHJvbCBpZC4gd2hlbiB0aGUgY2lkIGRvZXMgbm90IGV4aXN0LCBjb3VsZCBub3QgYmUKLWFjY2Vzc2VkIGZvciBzb21lIHJlYXNvbiwgb3Igc29tZSBlcnJvciBvY2N1cmVkIDAgaXMgcmV0dXJuZWQuCithY2Nlc3NlZCBmb3Igc29tZSByZWFzb24sIG9yIHNvbWUgZXJyb3Igb2NjdXJyZWQgMCBpcyByZXR1cm5lZC4KIDwvcGFyYT48L2xpc3RpdGVtPgogPC9pdGVtaXplZGxpc3Q+CiAJCTwvc2VjdGlvbj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvbWVkaWEtaW9jLXNldHVwLWxpbmsueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9tZWRpYS1pb2Mtc2V0dXAtbGluay54bWwKaW5kZXggMjMzMWU3Ni4uY2VjOTdhZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9tZWRpYS1pb2Mtc2V0dXAtbGluay54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9tZWRpYS1pb2Mtc2V0dXAtbGluay54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICAgIDx2YXJsaXN0ZW50cnk+CiAJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgogCTxsaXN0aXRlbT4KLQkgIDxwYXJhPk1FRElBX0lPQ19FTlVNX0xJTktTPC9wYXJhPgorCSAgPHBhcmE+TUVESUFfSU9DX1NFVFVQX0xJTks8L3BhcmE+CiAJPC9saXN0aXRlbT4KICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgPHZhcmxpc3RlbnRyeT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXkxMi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC15MTIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNDE3YjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC15MTIueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzxyZWZlbnRyeSBpZD0iVjRMMi1QSVgtRk1ULVkxMiI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPlY0TDJfUElYX0ZNVF9ZMTIgKCdZMTIgJyk8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1kxMjwvY29uc3RhbnQ+PC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPkdyZXktc2NhbGUgaW1hZ2U8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UaGlzIGlzIGEgZ3JleS1zY2FsZSBpbWFnZSB3aXRoIGEgZGVwdGggb2YgMTIgYml0cyBwZXIgcGl4ZWwuIFBpeGVscworYXJlIHN0b3JlZCBpbiAxNi1iaXQgd29yZHMgd2l0aCB1bnVzZWQgaGlnaCBiaXRzIHBhZGRlZCB3aXRoIDAuIFRoZSBsZWFzdAorc2lnbmlmaWNhbnQgYnl0ZSBpcyBzdG9yZWQgYXQgbG93ZXIgbWVtb3J5IGFkZHJlc3NlcyAobGl0dGxlLWVuZGlhbikuPC9wYXJhPgorCisgICAgPGV4YW1wbGU+CisgICAgICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZMTI8L2NvbnN0YW50PiA0ICZ0aW1lczsgNAorcGl4ZWwgaW1hZ2U8L3RpdGxlPgorCisgICAgICA8Zm9ybWFscGFyYT4KKwk8dGl0bGU+Qnl0ZSBPcmRlci48L3RpdGxlPgorCTxwYXJhPkVhY2ggY2VsbCBpcyBvbmUgYnl0ZS4KKwkgIDxpbmZvcm1hbHRhYmxlIGZyYW1lPSJub25lIj4KKwkgICAgPHRncm91cCBjb2xzPSI5IiBhbGlnbj0iY2VudGVyIj4KKwkgICAgICA8Y29sc3BlYyBhbGlnbj0ibGVmdCIgY29sd2lkdGg9IjIqIiAvPgorCSAgICAgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCTxyb3c+CisJCSAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzA6PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAwbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAwaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMWxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMWhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDJsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDJoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAzbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAzaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCTwvcm93PgorCQk8cm93PgorCQkgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDs4OjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMGxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMGhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTFsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTFoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEybG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEyaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4xM2xvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4xM2hpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQk8L3Jvdz4KKwkJPHJvdz4KKwkJICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTY6PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIwbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIwaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMWxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMWhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjJsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjJoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIzbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIzaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCTwvcm93PgorCQk8cm93PgorCQkgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsyNDo8L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzBsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzBoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMxbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMxaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMmxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMmhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzNsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzNoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJPC9yb3c+CisJICAgICAgPC90Ym9keT4KKwkgICAgPC90Z3JvdXA+CisJICA8L2luZm9ybWFsdGFibGU+CisJPC9wYXJhPgorICAgICAgPC9mb3JtYWxwYXJhPgorICAgIDwvZXhhbXBsZT4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC54bWwKaW5kZXggYzZmZGNiYi4uNDBhZjRiZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LnhtbApAQCAtNjk2LDYgKzY5Niw3IEBACiAgICAgJnN1Yi1wYWNrZWQteXV2OwogICAgICZzdWItZ3JleTsKICAgICAmc3ViLXkxMDsKKyAgICAmc3ViLXkxMjsKICAgICAmc3ViLXkxNjsKICAgICAmc3ViLXl1eXY7CiAgICAgJnN1Yi11eXZ5OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9yZW1vdGVfY29udHJvbGxlcnMueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9yZW1vdGVfY29udHJvbGxlcnMueG1sCmluZGV4IDNjM2I2NjcuLjE2MGU0NjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcmVtb3RlX2NvbnRyb2xsZXJzLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3JlbW90ZV9jb250cm9sbGVycy54bWwKQEAgLTEzMyw3ICsxMzMsNyBAQAogPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9MRUZUPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5MZWZ0IGtleTwvZW50cnk+PGVudHJ5PkxFRlQ8L2VudHJ5Pjwvcm93PgogPHJvdz48ZW50cnk+PGNvbnN0YW50PktFWV9SSUdIVDwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+UmlnaHQga2V5PC9lbnRyeT48ZW50cnk+UklHSFQ8L2VudHJ5Pjwvcm93PgogCi08cm93PjxlbnRyeT48ZW1waGFzaXMgcm9sZT0iYm9sZCI+TWlzY2VsYW5lb3VzIGtleXM8L2VtcGhhc2lzPjwvZW50cnk+PC9yb3c+Cis8cm93PjxlbnRyeT48ZW1waGFzaXMgcm9sZT0iYm9sZCI+TWlzY2VsbGFuZW91cyBrZXlzPC9lbXBoYXNpcz48L2VudHJ5Pjwvcm93PgogCiA8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0RPVDwvY29uc3RhbnQ+PC9lbnRyeT48ZW50cnk+UmV0dXJuIGEgZG90PC9lbnRyeT48ZW50cnk+LjwvZW50cnk+PC9yb3c+CiA8cm93PjxlbnRyeT48Y29uc3RhbnQ+S0VZX0ZOPC9jb25zdGFudD48L2VudHJ5PjxlbnRyeT5TZWxlY3QgYSBmdW5jdGlvbjwvZW50cnk+PGVudHJ5PkZVTkNUSU9OPC9lbnRyeT48L3Jvdz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvc3ViZGV2LWZvcm1hdHMueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9zdWJkZXYtZm9ybWF0cy54bWwKaW5kZXggNzA0MTEyNy4uZDdjY2QyNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9zdWJkZXYtZm9ybWF0cy54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9zdWJkZXYtZm9ybWF0cy54bWwKQEAgLTQ1Niw2ICs0NTYsMjMgQEAKIAkgICAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CiAJICAgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgogCSAgICA8L3Jvdz4KKwkgICAgPHJvdyBpZD0iVjRMMi1NQlVTLUZNVC1TR0JSRzgtMVg4Ij4KKwkgICAgICA8ZW50cnk+VjRMMl9NQlVTX0ZNVF9TR0JSRzhfMVg4PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+MHgzMDEzPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+LTwvZW50cnk+CisJICAgICAgPGVudHJ5Pi08L2VudHJ5PgorCSAgICAgIDxlbnRyeT4tPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+LTwvZW50cnk+CisJICAgICAgPGVudHJ5Pmc8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT5nPHN1YnNjcmlwdD42PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPC9yb3c+CiAJICAgIDxyb3cgaWQ9IlY0TDItTUJVUy1GTVQtU0dSQkc4LTFYOCI+CiAJICAgICAgPGVudHJ5PlY0TDJfTUJVU19GTVRfU0dSQkc4XzFYODwvZW50cnk+CiAJICAgICAgPGVudHJ5PjB4MzAwMjwvZW50cnk+CkBAIC00NzMsNiArNDkwLDIzIEBACiAJICAgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgogCSAgICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KIAkgICAgPC9yb3c+CisJICAgIDxyb3cgaWQ9IlY0TDItTUJVUy1GTVQtU1JHR0I4LTFYOCI+CisJICAgICAgPGVudHJ5PlY0TDJfTUJVU19GTVRfU1JHR0I4XzFYODwvZW50cnk+CisJICAgICAgPGVudHJ5PjB4MzAxNDwvZW50cnk+CisJICAgICAgPGVudHJ5PjwvZW50cnk+CisJICAgICAgPGVudHJ5Pi08L2VudHJ5PgorCSAgICAgIDxlbnRyeT4tPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+LTwvZW50cnk+CisJICAgICAgPGVudHJ5Pi08L2VudHJ5PgorCSAgICAgIDxlbnRyeT5yPHN1YnNjcmlwdD43PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT5yPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDwvcm93PgogCSAgICA8cm93IGlkPSJWNEwyLU1CVVMtRk1ULVNCR0dSMTAtRFBDTTgtMVg4Ij4KIAkgICAgICA8ZW50cnk+VjRMMl9NQlVTX0ZNVF9TQkdHUjEwX0RQQ004XzFYODwvZW50cnk+CiAJICAgICAgPGVudHJ5PjB4MzAwYjwvZW50cnk+CkBAIC0yMTU5LDYgKzIxOTMsMzEgQEAKIAkgICAgICA8ZW50cnk+dTxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CiAJICAgICAgPGVudHJ5PnU8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgogCSAgICA8L3Jvdz4KKwkgICAgPHJvdyBpZD0iVjRMMi1NQlVTLUZNVC1ZMTItMVgxMiI+CisJICAgICAgPGVudHJ5PlY0TDJfTUJVU19GTVRfWTEyXzFYMTI8L2VudHJ5PgorCSAgICAgIDxlbnRyeT4weDIwMTM8L2VudHJ5PgorCSAgICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICAgIDxlbnRyeT4tPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+LTwvZW50cnk+CisJICAgICAgPGVudHJ5Pi08L2VudHJ5PgorCSAgICAgIDxlbnRyeT4tPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+LTwvZW50cnk+CisJICAgICAgPGVudHJ5Pi08L2VudHJ5PgorCSAgICAgIDxlbnRyeT4tPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+LTwvZW50cnk+CisJICAgICAgPGVudHJ5Pnk8c3Vic2NyaXB0PjExPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+eTxzdWJzY3JpcHQ+MTA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT55PHN1YnNjcmlwdD45PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+eTxzdWJzY3JpcHQ+ODwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5Pnk8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT55PHN1YnNjcmlwdD42PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+eTxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5Pnk8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT55PHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+eTxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5Pnk8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT55PHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPC9yb3c+CiAJICAgIDxyb3cgaWQ9IlY0TDItTUJVUy1GTVQtVVlWWTgtMVgxNiI+CiAJICAgICAgPGVudHJ5PlY0TDJfTUJVU19GTVRfVVlWWThfMVgxNjwvZW50cnk+CiAJICAgICAgPGVudHJ5PjB4MjAwZjwvZW50cnk+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbAppbmRleCAwYmExNDlkLi41OGNlZDIzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKQEAgLTQ3ODQsNyArNDc4NCw3IEBACiAgICAgICAgIEZNIHJlZ2lzdGVycyBjYW4gYmUgZGlyZWN0bHkgYWNjZXNzZWQgdGhyb3VnaCB0aGUgZGlyZWN0LUZNIEFQSSwKICAgICAgIGRlZmluZWQgaW4gPGZpbGVuYW1lPiZsdDtzb3VuZC9hc291bmRfZm0uaCZndDs8L2ZpbGVuYW1lPi4gSW4KICAgICAgIEFMU0EgbmF0aXZlIG1vZGUsIEZNIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQgdGhyb3VnaAotICAgICAgdGhlIEhhcmR3YXJlLURlcGVuZGFudCBEZXZpY2UgZGlyZWN0LUZNIGV4dGVuc2lvbiBBUEksIHdoZXJlYXMgaW4KKyAgICAgIHRoZSBIYXJkd2FyZS1EZXBlbmRlbnQgRGV2aWNlIGRpcmVjdC1GTSBleHRlbnNpb24gQVBJLCB3aGVyZWFzIGluCiAgICAgICBPU1MgY29tcGF0aWJsZSBtb2RlLCBGTSByZWdpc3RlcnMgY2FuIGJlIGFjY2Vzc2VkIHdpdGggdGhlIE9TUwogICAgICAgZGlyZWN0LUZNIGNvbXBhdGlibGUgQVBJIGluIDxmaWxlbmFtZT4vZGV2L2RtZm1YPC9maWxlbmFtZT4gZGV2aWNlLiAKICAgICAgIDwvcGFyYT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUENJL01TSS1IT1dUTy50eHQgYi9Eb2N1bWVudGF0aW9uL1BDSS9NU0ktSE9XVE8udHh0CmluZGV4IGRjZjdhY2MuLjNmNWUwYjAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUENJL01TSS1IT1dUTy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9QQ0kvTVNJLUhPV1RPLnR4dApAQCAtMjUzLDggKzI1Myw4IEBACiBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvKS4gIEluIGFkZGl0aW9uLCB0aGUgTVNJIGludGVycnVwdCB2ZWN0b3JzIG11c3QKIGJlIGFsbG9jYXRlZCBjb25zZWN1dGl2ZWx5LCBzbyB0aGUgc3lzdGVtIG1heSBub3QgYmUgYWJsZSB0byBhbGxvY2F0ZQogYXMgbWFueSB2ZWN0b3JzIGZvciBNU0kgYXMgaXQgY291bGQgZm9yIE1TSS1YLiAgT24gc29tZSBwbGF0Zm9ybXMsIE1TSQotaW50ZXJydXB0cyBtdXN0IGFsbCBiZSB0YXJnZXR0ZWQgYXQgdGhlIHNhbWUgc2V0IG9mIENQVXMgd2hlcmVhcyBNU0ktWAotaW50ZXJydXB0cyBjYW4gYWxsIGJlIHRhcmdldHRlZCBhdCBkaWZmZXJlbnQgQ1BVcy4KK2ludGVycnVwdHMgbXVzdCBhbGwgYmUgdGFyZ2V0ZWQgYXQgdGhlIHNhbWUgc2V0IG9mIENQVXMgd2hlcmVhcyBNU0ktWAoraW50ZXJydXB0cyBjYW4gYWxsIGJlIHRhcmdldGVkIGF0IGRpZmZlcmVudCBDUFVzLgogCiA0LjUuMiBTcGlubG9ja3MKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TZWN1cml0eUJ1Z3MgYi9Eb2N1bWVudGF0aW9uL1NlY3VyaXR5QnVncwppbmRleCAyNmMzYjM2Li5hNjYwZDQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1NlY3VyaXR5QnVncworKysgYi9Eb2N1bWVudGF0aW9uL1NlY3VyaXR5QnVncwpAQCAtMjgsNyArMjgsNyBAQAogQSBkaXNjbG9zdXJlIGRhdGUgaXMgbmVnb3RpYXRlZCBieSB0aGUgc2VjdXJpdHkgdGVhbSB3b3JraW5nIHdpdGggdGhlCiBidWcgc3VibWl0dGVyIGFzIHdlbGwgYXMgdmVuZG9ycy4gIEhvd2V2ZXIsIHRoZSBrZXJuZWwgc2VjdXJpdHkgdGVhbQogaG9sZHMgdGhlIGZpbmFsIHNheSB3aGVuIHNldHRpbmcgYSBkaXNjbG9zdXJlIGRhdGUuICBUaGUgdGltZWZyYW1lIGZvcgotZGlzY2xvc3VyZSBpcyBmcm9tIGltbWVkaWF0ZSAoZXNwLiBpZiBpdCdzIGFscmVhZHkgcHVibGljYWxseSBrbm93bikKK2Rpc2Nsb3N1cmUgaXMgZnJvbSBpbW1lZGlhdGUgKGVzcC4gaWYgaXQncyBhbHJlYWR5IHB1YmxpY2x5IGtub3duKQogdG8gYSBmZXcgd2Vla3MuICBBcyBhIGJhc2ljIGRlZmF1bHQgcG9saWN5LCB3ZSBleHBlY3QgcmVwb3J0IGRhdGUgdG8KIGRpc2Nsb3N1cmUgZGF0ZSB0byBiZSBvbiB0aGUgb3JkZXIgb2YgNyBkYXlzLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdEcml2ZXJzIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nRHJpdmVycwppbmRleCAzOGQyYWFiLi4zMTliYWE4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdEcml2ZXJzCisrKyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ0RyaXZlcnMKQEAgLTEwMSw3ICsxMDEsNyBAQAogCQljb21wbGV0ZSBvdmVydmlldyBvZiB0aGUgcG93ZXIgbWFuYWdlbWVudCBpc3N1ZXMgcmVsYXRlZCB0bwogCQlkcml2ZXJzIHNlZSBEb2N1bWVudGF0aW9uL3Bvd2VyL2RldmljZXMudHh0IC4KIAotQ29udHJvbDoJSW4gZ2VuZXJhbCBpZiB0aGVyZSBpcyBhY3RpdmUgbWFpbnRhaW5hbmNlIG9mIGEgZHJpdmVyIGJ5CitDb250cm9sOglJbiBnZW5lcmFsIGlmIHRoZXJlIGlzIGFjdGl2ZSBtYWludGVuYW5jZSBvZiBhIGRyaXZlciBieQogCQl0aGUgYXV0aG9yIHRoZW4gcGF0Y2hlcyB3aWxsIGJlIHJlZGlyZWN0ZWQgdG8gdGhlbSB1bmxlc3MKIAkJdGhleSBhcmUgdG90YWxseSBvYnZpb3VzIGFuZCB3aXRob3V0IG5lZWQgb2YgY2hlY2tpbmcuCiAJCUlmIHlvdSB3YW50IHRvIGJlIHRoZSBjb250YWN0IGFuZCB1cGRhdGUgcG9pbnQgZm9yIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKaW5kZXggNjg5ZTIzNy4uZTQzOWNkMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcworKysgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCkBAIC03MjksNyArNzI5LDcgQEAKICAgPGh0dHA6Ly9sa21sLm9yZy9sa21sLzIwMDUvNC83LzE4Mz4KIAogQW5kaSBLbGVlbiwgIk9uIHN1Ym1pdHRpbmcga2VybmVsIHBhdGNoZXMiCi0gIFNvbWUgc3RyYXRlZ2llcyB0byBnZXQgZGlmZmljdWx0IG9yIGNvbnRyb3ZlcnNhbCBjaGFuZ2VzIGluLgorICBTb21lIHN0cmF0ZWdpZXMgdG8gZ2V0IGRpZmZpY3VsdCBvciBjb250cm92ZXJzaWFsIGNoYW5nZXMgaW4uCiAgIGh0dHA6Ly9oYWxvYmF0ZXMuZGUvb24tc3VibWl0dGluZy1wYXRjaGVzLnBkZgogCiAtLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vSVhQNHh4IGIvRG9jdW1lbnRhdGlvbi9hcm0vSVhQNHh4CmluZGV4IDEzM2M1ZmEuLjdiOTM1MWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYXJtL0lYUDR4eAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9JWFA0eHgKQEAgLTM2LDcgKzM2LDcgQEAKIC0gVGltZXJzICh3YXRjaGRvZywgT1MpCiAKIFRoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBvZiB0aGUgY2hpcHMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgTGludXggYW5kCi1yZXF1aXJlIHRoZSB1c2Ugb2YgSW50ZWwncyBwcm9waWV0YXJ5IENTUiBzb2Z0YXJlOgorcmVxdWlyZSB0aGUgdXNlIG9mIEludGVsJ3MgcHJvcHJpZXRhcnkgQ1NSIHNvZnRhcmU6CiAKIC0gVVNCIGRldmljZSBpbnRlcmZhY2UKIC0gTmV0d29yayBpbnRlcmZhY2VzIChIU1MsIFV0b3BpYSwgTlBFcywgZXRjKQpAQCAtNDcsNyArNDcsNyBAQAogCiAgICBodHRwOi8vZGV2ZWxvcGVyLmludGVsLmNvbS9kZXNpZ24vbmV0d29yay9wcm9kdWN0cy9ucGZhbWlseS9peHA0MjUuaHRtICAgIAogCi1ETyBOT1QgUE9TVCBRVUVTVElPTlMgVE8gVEhFIExJTlVYIE1BSUxJTkcgTElTVFMgUkVHQVJESU5HIFRIRSBQUk9QSUVUQVJZCitETyBOT1QgUE9TVCBRVUVTVElPTlMgVE8gVEhFIExJTlVYIE1BSUxJTkcgTElTVFMgUkVHQVJESU5HIFRIRSBQUk9QUklFVEFSWQogU09GVFdBUkUuCiAKIFRoZXJlIGFyZSBzZXZlcmFsIHdlYnNpdGVzIHRoYXQgcHJvdmlkZSBkaXJlY3Rpb25zL3BvaW50ZXJzIG9uIHVzaW5nCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvU3VzcGVuZC50eHQgYi9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvU3VzcGVuZC50eHQKaW5kZXggN2VkZDBlMi4uMWNhNjNiMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL1N1c3BlbmQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9TdXNwZW5kLnR4dApAQCAtMTE2LDcgKzExNiw3IEBACiAgICAgQWxsb3dzIHRoZSBlbnRpcmUgbWVtb3J5IHRvIGJlIGNoZWNrc3VtbWVkIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlCiAgICAgc3VzcGVuZCB0byBzZWUgaWYgdGhlcmUgaGFzIGJlZW4gYW55IGNvcnJ1cHRpb24gb2YgdGhlIGNvbnRlbnRzLgogCi0gICAgTm90ZSwgdGhlIHRpbWUgdG8gY2FsY3VsYXRlIHRoZSBDUkMgaXMgZGVwZW5kYW50IG9uIHRoZSBDUFUgc3BlZWQKKyAgICBOb3RlLCB0aGUgdGltZSB0byBjYWxjdWxhdGUgdGhlIENSQyBpcyBkZXBlbmRlbnQgb24gdGhlIENQVSBzcGVlZAogICAgIGFuZCB0aGUgc2l6ZSBvZiBtZW1vcnkuIEZvciBhbiA2NE1ieXRlIFJBTSBhcmVhIG9uIGFuIDIwME1IegogICAgIFMzQzI0MTAsIHRoaXMgY2FuIHRha2UgYXBwcm94aW1hdGVseSA0IHNlY29uZHMgdG8gY29tcGxldGUuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmcvR1BJTy50eHQgYi9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nL0dQSU8udHh0CmluZGV4IDA1ODUwYzYuLjUxM2YyNTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmcvR1BJTy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy9HUElPLnR4dApAQCAtNSw3ICs1LDcgQEAKIC0tLS0tLS0tLS0tLQogCiBUaGlzIG91dGxpbmVzIHRoZSBTYW1zdW5nIEdQSU8gaW1wbGVtZW50YXRpb24gYW5kIHRoZSBhcmNoaXRlY3R1cmUKLXNwZWNmaWMgY2FsbHMgcHJvdmlkZWQgYWxvbmdpc2RlIHRoZSBkcml2ZXJzL2dwaW8gY29yZS4KK3NwZWNpZmljIGNhbGxzIHByb3ZpZGVkIGFsb25naXNkZSB0aGUgZHJpdmVycy9ncGlvIGNvcmUuCiAKIAogUzNDMjRYWCAoTGVnYWN5KQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW9kb2MudHh0IGIvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW9kb2MudHh0CmluZGV4IDJhN2IzOGMuLmM2ZDg0Y2YgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYmxvY2svYmlvZG9jLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb2RvYy50eHQKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogZW50cmllcyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgZG1hIGFkZHJlc3MgbWFwcGluZ3MgZmlsbGVkIGluIGF0IHRoZQogYXBwcm9wcmlhdGUgdGltZS4gQXMgYW4gb3B0aW1pemF0aW9uLCBjb250aWd1b3VzIHBoeXNpY2FsIHBhZ2VzIGNhbiBiZQogY292ZXJlZCBieSBhIHNpbmdsZSBlbnRyeSB3aGVyZSA8cGFnZT4gcmVmZXJzIHRvIHRoZSBmaXJzdCBwYWdlIGFuZCA8bGVuPgotY292ZXJzIHRoZSByYW5nZSBvZiBwYWdlcyAodXB0byAxNiBjb250aWd1b3VzIHBhZ2VzIGNvdWxkIGJlIGNvdmVyZWQgdGhpcworY292ZXJzIHRoZSByYW5nZSBvZiBwYWdlcyAodXAgdG8gMTYgY29udGlndW91cyBwYWdlcyBjb3VsZCBiZSBjb3ZlcmVkIHRoaXMKIHdheSkuIFRoZXJlIGlzIGEgaGVscGVyIHJvdXRpbmUgKGJsa19ycV9tYXBfc2cpIHdoaWNoIGRyaXZlcnMgY2FuIHVzZSB0byBidWlsZAogdGhlIHNnIGxpc3QuCiAKQEAgLTU2NSw3ICs1NjUsNyBAQAogCS4KIAlpbnQgdGFnOwkvKiBjb21tYW5kIHRhZyBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCAqLwogCXZvaWQgKnNwZWNpYWw7ICAvKiBzYW1lIGFzIGJlZm9yZSAqLwotCWNoYXIgKmJ1ZmZlcjsgICAvKiB2YWxpZCBvbmx5IGZvciBsb3cgbWVtb3J5IGJ1ZmZlcnMgdXB0bworCWNoYXIgKmJ1ZmZlcjsgICAvKiB2YWxpZCBvbmx5IGZvciBsb3cgbWVtb3J5IGJ1ZmZlcnMgdXAgdG8KIAkJCSBjdXJyZW50X25yX3NlY3RvcnMgKi8KIAkuCiAJLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL21lbW9yeS50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvbWVtb3J5LnR4dAppbmRleCBiNmVkNjFjLi43YzE2MzQ3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvbWVtb3J5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvbWVtb3J5LnR4dApAQCAtNTIsOCArNTIsMTAgQEAKICB0YXNrcwkJCQkgIyBhdHRhY2ggYSB0YXNrKHRocmVhZCkgYW5kIHNob3cgbGlzdCBvZiB0aHJlYWRzCiAgY2dyb3VwLnByb2NzCQkJICMgc2hvdyBsaXN0IG9mIHByb2Nlc3NlcwogIGNncm91cC5ldmVudF9jb250cm9sCQkgIyBhbiBpbnRlcmZhY2UgZm9yIGV2ZW50X2ZkKCkKLSBtZW1vcnkudXNhZ2VfaW5fYnl0ZXMJCSAjIHNob3cgY3VycmVudCBtZW1vcnkoUlNTK0NhY2hlKSB1c2FnZS4KLSBtZW1vcnkubWVtc3cudXNhZ2VfaW5fYnl0ZXMJICMgc2hvdyBjdXJyZW50IG1lbW9yeStTd2FwIHVzYWdlCisgbWVtb3J5LnVzYWdlX2luX2J5dGVzCQkgIyBzaG93IGN1cnJlbnQgcmVzX2NvdW50ZXIgdXNhZ2UgZm9yIG1lbW9yeQorCQkJCSAoU2VlIDUuNSBmb3IgZGV0YWlscykKKyBtZW1vcnkubWVtc3cudXNhZ2VfaW5fYnl0ZXMJICMgc2hvdyBjdXJyZW50IHJlc19jb3VudGVyIHVzYWdlIGZvciBtZW1vcnkrU3dhcAorCQkJCSAoU2VlIDUuNSBmb3IgZGV0YWlscykKICBtZW1vcnkubGltaXRfaW5fYnl0ZXMJCSAjIHNldC9zaG93IGxpbWl0IG9mIG1lbW9yeSB1c2FnZQogIG1lbW9yeS5tZW1zdy5saW1pdF9pbl9ieXRlcwkgIyBzZXQvc2hvdyBsaW1pdCBvZiBtZW1vcnkrU3dhcCB1c2FnZQogIG1lbW9yeS5mYWlsY250CQkJICMgc2hvdyB0aGUgbnVtYmVyIG9mIG1lbW9yeSB1c2FnZSBoaXRzIGxpbWl0cwpAQCAtNDUzLDYgKzQ1NSwxNSBAQAogWW91IGNhbiByZXNldCBmYWlsY250IGJ5IHdyaXRpbmcgMCB0byBmYWlsY250IGZpbGUuCiAjIGVjaG8gMCA+IC4uLi9tZW1vcnkuZmFpbGNudAogCis1LjUgdXNhZ2VfaW5fYnl0ZXMKKworRm9yIGVmZmljaWVuY3ksIGFzIG90aGVyIGtlcm5lbCBjb21wb25lbnRzLCBtZW1vcnkgY2dyb3VwIHVzZXMgc29tZSBvcHRpbWl6YXRpb24KK3RvIGF2b2lkIHVubmVjZXNzYXJ5IGNhY2hlbGluZSBmYWxzZSBzaGFyaW5nLiB1c2FnZV9pbl9ieXRlcyBpcyBhZmZlY3RlZCBieSB0aGUKK21ldGhvZCBhbmQgZG9lc24ndCBzaG93ICdleGFjdCcgdmFsdWUgb2YgbWVtb3J5KGFuZCBzd2FwKSB1c2FnZSwgaXQncyBhbiBmdXp6Cit2YWx1ZSBmb3IgZWZmaWNpZW50IGFjY2Vzcy4gKE9mIGNvdXJzZSwgd2hlbiBuZWNlc3NhcnksIGl0J3Mgc3luY2hyb25pemVkLikKK0lmIHlvdSB3YW50IHRvIGtub3cgbW9yZSBleGFjdCBtZW1vcnkgdXNhZ2UsIHlvdSBzaG91bGQgdXNlIFJTUytDQUNIRSgrU1dBUCkKK3ZhbHVlIGluIG1lbW9yeS5zdGF0KHNlZSA1LjIpLgorCiA2LiBIaWVyYXJjaHkgc3VwcG9ydAogCiBUaGUgbWVtb3J5IGNvbnRyb2xsZXIgc3VwcG9ydHMgYSBkZWVwIGhpZXJhcmNoeSBhbmQgaGllcmFyY2hpY2FsIGFjY291bnRpbmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdS1ob3RwbHVnLnR4dCBiL0RvY3VtZW50YXRpb24vY3B1LWhvdHBsdWcudHh0CmluZGV4IDQ1ZDVhMjEuLmEyMGJmZDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY3B1LWhvdHBsdWcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY3B1LWhvdHBsdWcudHh0CkBAIC0xOTYsNyArMTk2LDcgQEAKIAkjVG8gZGlzcGxheSB0aGUgY3VycmVudCBjcHUgc3RhdGUuCiAJI2NhdCAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVYL29ubGluZQogCi1ROiBXaHkgY2FudCBpIHJlbW92ZSBDUFUwIG9uIHNvbWUgc3lzdGVtcz8KK1E6IFdoeSBjYW4ndCBpIHJlbW92ZSBDUFUwIG9uIHNvbWUgc3lzdGVtcz8KIEE6IFNvbWUgYXJjaGl0ZWN0dXJlcyBtYXkgaGF2ZSBzb21lIHNwZWNpYWwgZGVwZW5kZW5jeSBvbiBhIGNlcnRhaW4gQ1BVLgogCiBGb3IgZS5nIGluIElBNjQgcGxhdGZvcm1zIHdlIGhhdmUgYWJpbGl0eSB0byBzZW50IHBsYXRmb3JtIGludGVycnVwdHMgdG8gdGhlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RlbGxfcmJ1LnR4dCBiL0RvY3VtZW50YXRpb24vZGVsbF9yYnUudHh0CmluZGV4IDE1MTc0OTguLmQyNjJlMjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGVsbF9yYnUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGVsbF9yYnUudHh0CkBAIC02Miw3ICs2Miw3IEBACiBmaWxlLgogVGhpcyBmaWxlIGlzIHRoZW4gY29waWVkIHRvIC9zeXMvY2xhc3MvZmlybXdhcmUvZGVsbF9yYnUvZGF0YS4KIE9uY2UgdGhpcyBmaWxlIGdldHMgdG8gdGhlIGRyaXZlciwgdGhlIGRyaXZlciBleHRyYWN0cyBwYWNrZXRfc2l6ZSBkYXRhIGZyb20KLXRoZSBmaWxlIGFuZCBzcHJlYWRzIGl0IGFjY3Jvc3MgdGhlIHBoeXNpY2FsIG1lbW9yeSBpbiBjb250aWd1b3VzIHBhY2tldF9zaXplZAordGhlIGZpbGUgYW5kIHNwcmVhZHMgaXQgYWNyb3NzIHRoZSBwaHlzaWNhbCBtZW1vcnkgaW4gY29udGlndW91cyBwYWNrZXRfc2l6ZWQKIHNwYWNlLgogVGhpcyBtZXRob2QgbWFrZXMgc3VyZSB0aGF0IGFsbCB0aGUgcGFja2V0cyBnZXQgdG8gdGhlIGRyaXZlciBpbiBhIHNpbmdsZSBvcGVyYXRpb24uCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9kbS1zZXJ2aWNlLXRpbWUudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL2RtLXNlcnZpY2UtdGltZS50eHQKaW5kZXggN2QwMDY2OC4uZmIxZDRhMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL2RtLXNlcnZpY2UtdGltZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL2RtLXNlcnZpY2UtdGltZS50eHQKQEAgLTM3LDcgKzM3LDcgQEAKID09PT09PT09PQogCiBkbS1zZXJ2aWNlLXRpbWUgYWRkcyB0aGUgSS9PIHNpemUgdG8gJ2luLWZsaWdodC1zaXplJyB3aGVuIHRoZSBJL08gaXMKLWRpc3BhdGNoZWQgYW5kIHN1YnN0cmFjdHMgd2hlbiBjb21wbGV0ZWQuCitkaXNwYXRjaGVkIGFuZCBzdWJ0cmFjdHMgd2hlbiBjb21wbGV0ZWQuCiBCYXNpY2FsbHksIGRtLXNlcnZpY2UtdGltZSBzZWxlY3RzIGEgcGF0aCBoYXZpbmcgbWluaW11bSBzZXJ2aWNlIHRpbWUKIHdoaWNoIGlzIGNhbGN1bGF0ZWQgYnk6CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9mYi9zbTUwMWZiLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9mYi9zbTUwMWZiLnR4dAppbmRleCA3ZDMxOWZiLi45ZDlmMDA5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZmIvc201MDFmYi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2ZiL3NtNTAxZmIudHh0CkBAIC0xOCw5ICsxOCw5IEBACiAtIGVkaWQgOiB2ZXJiYXRpbSBFRElEIGRhdGEgYmxvY2sgZGVzY3JpYmluZyBhdHRhY2hlZCBkaXNwbGF5LgogICBEYXRhIGZyb20gdGhlIGRldGFpbGVkIHRpbWluZyBkZXNjcmlwdG9yIHdpbGwgYmUgdXNlZCB0bwogICBwcm9ncmFtIHRoZSBkaXNwbGF5IGNvbnRyb2xsZXIuCi0tIGxpdHRsZS1lbmRpYW46IGF2YWlsaWFibGUgb24gYmlnIGVuZGlhbiBzeXN0ZW1zLCB0bworLSBsaXR0bGUtZW5kaWFuOiBhdmFpbGFibGUgb24gYmlnIGVuZGlhbiBzeXN0ZW1zLCB0bwogICBzZXQgZGlmZmVyZW50IGZvcmVpZ24gZW5kaWFuLgotLSBiaWctZW5kaWFuOiBhdmFpbGlhYmxlIG9uIGxpdHRsZSBlbmRpYW4gc3lzdGVtcywgdG8KKy0gYmlnLWVuZGlhbjogYXZhaWxhYmxlIG9uIGxpdHRsZSBlbmRpYW4gc3lzdGVtcywgdG8KICAgc2V0IGRpZmZlcmVudCBmb3JlaWduIGVuZGlhbi4KIAogRXhhbXBsZSBmb3IgTVBDNTIwMDoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvZnNsLXVwbS1uYW5kLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvZnNsLXVwbS1uYW5kLnR4dAppbmRleCBhNDhiMmNhLi4wMGYxZjU0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL2ZzbC11cG0tbmFuZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL210ZC9mc2wtdXBtLW5hbmQudHh0CkBAIC0xNSw3ICsxNSw3IEBACiAtIGdwaW9zIDogbWF5IHNwZWNpZnkgb3B0aW9uYWwgR1BJT3MgY29ubmVjdGVkIHRvIHRoZSBSZWFkeS1Ob3QtQnVzeSBwaW5zCiAJKFIvQiMpLiBGb3IgbXVsdGktY2hpcCBkZXZpY2VzLCAibiIgR1BJTyBkZWZpbml0aW9ucyBhcmUgcmVxdWlyZWQKIAlhY2NvcmRpbmcgdG8gdGhlIG51bWJlciBvZiBjaGlwcy4KLS0gY2hpcC1kZWxheSA6IGNoaXAgZGVwZW5kZW50IGRlbGF5IGZvciB0cmFuc2ZlcmluZyBkYXRhIGZyb20gYXJyYXkgdG8KKy0gY2hpcC1kZWxheSA6IGNoaXAgZGVwZW5kZW50IGRlbGF5IGZvciB0cmFuc2ZlcnJpbmcgZGF0YSBmcm9tIGFycmF5IHRvCiAJcmVhZCByZWdpc3RlcnMgKHRSKS4gUmVxdWlyZWQgaWYgcHJvcGVydHkgImdwaW9zIiBpcyBub3QgdXNlZAogCShSL0IjIHBpbnMgbm90IGNvbm5lY3RlZCkuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvY2FuL3NqYTEwMDAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9jYW4vc2phMTAwMC50eHQKaW5kZXggZDZkMjA5ZC4uYzJkYmNlYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9jYW4vc2phMTAwMC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9jYW4vc2phMTAwMC50eHQKQEAgLTM5LDcgKzM5LDcgQEAKIAogLSBueHAsbm8tY29tcGFyYXRvci1ieXBhc3MgOiBBbGxvd3MgdG8gZGlzYWJsZSB0aGUgQ0FOIGlucHV0IGNvbXBlcmF0b3IuCiAKLUZvciBmdXRoZXIgaW5mb3JtYXRpb24sIHBsZWFzZSBoYXZlIGEgbG9vayB0byB0aGUgU0pBMTAwMCBkYXRhIHNoZWV0LgorRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24sIHBsZWFzZSBoYXZlIGEgbG9vayB0byB0aGUgU0pBMTAwMCBkYXRhIHNoZWV0LgogCiBFeGFtcGxlczoKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21waWMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21waWMudHh0CmluZGV4IDhhYTEwZjQuLjRmNjE0NTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tcGljLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbXBpYy50eHQKQEAgLTE5OSw3ICsxOTksNyBAQAogCiBFWEFNUExFIDUKIAkvKgotCSAqIERlZmluaXRpb24gb2YgYW4gZXJyb3IgaW50ZXJydXB0IChpbnRlcnVwdCB0eXBlIDEpLgorCSAqIERlZmluaXRpb24gb2YgYW4gZXJyb3IgaW50ZXJydXB0IChpbnRlcnJ1cHQgdHlwZSAxKS4KIAkgKiBTb0MgaW50ZXJydXB0IG51bWJlciBpcyAxNiBhbmQgdGhlIHNwZWNpZmljIGVycm9yCiAgICAgICAgICAqIGludGVycnVwdCBiaXQgaW4gdGhlIGVycm9yIGludGVycnVwdCBzdW1tYXJ5IHJlZ2lzdGVyCiAJICogaXMgMjMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R2Yi9SRUFETUUuZHZiLXVzYiBiL0RvY3VtZW50YXRpb24vZHZiL1JFQURNRS5kdmItdXNiCmluZGV4IGM4MjM4ZTQuLmM0ZDk2M2EgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZHZiL1JFQURNRS5kdmItdXNiCisrKyBiL0RvY3VtZW50YXRpb24vZHZiL1JFQURNRS5kdmItdXNiCkBAIC0xMzgsNyArMTM4LDcgQEAKIGluIHRoZSBkZXZpY2UpLgogCiBJZiB5b3Ugd2FudCB0byBlbmFibGUgZGVidWcgb3V0cHV0LCB5b3UgaGF2ZSB0byBsb2FkIHRoZSBkcml2ZXIgbWFudWFsbHkgYW5kCi1mcm9tIHdpdGhpbmcgdGhlIGR2Yi1rZXJuZWwgY3ZzIHJlcG9zaXRvcnkuCitmcm9tIHdpdGhpbiB0aGUgZHZiLWtlcm5lbCBjdnMgcmVwb3NpdG9yeS4KIAogZmlyc3QgaGF2ZSBhIGxvb2ssIHdoaWNoIGRlYnVnIGxldmVsIGFyZSBhdmFpbGFibGU6CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHZiL2NpLnR4dCBiL0RvY3VtZW50YXRpb24vZHZiL2NpLnR4dAppbmRleCA0YTBjMmI1Li42YzNiZGE1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2R2Yi9jaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kdmIvY2kudHh0CkBAIC00Nyw3ICs0Nyw3IEBACiAKICogQ0kgbW9kdWxlcyB0aGF0IGFyZSBzdXBwb3J0ZWQKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci1UaGUgQ0kgbW9kdWxlIHN1cHBvcnQgaXMgbGFyZ2VseSBkZXBlbmRhbnQgdXBvbiB0aGUgZmlybXdhcmUgb24gdGhlIGNhcmRzCitUaGUgQ0kgbW9kdWxlIHN1cHBvcnQgaXMgbGFyZ2VseSBkZXBlbmRlbnQgdXBvbiB0aGUgZmlybXdhcmUgb24gdGhlIGNhcmRzCiBTb21lIGNhcmRzIGRvIHN1cHBvcnQgYWxtb3N0IGFsbCBvZiB0aGUgYXZhaWxhYmxlIENJIG1vZHVsZXMuIFRoZXJlIGlzCiBub3RoaW5nIG11Y2ggdGhhdCBjYW4gYmUgZG9uZSBpbiBvcmRlciB0byBtYWtlIGFkZGl0aW9uYWwgQ0kgbW9kdWxlcwogd29ya2luZyB3aXRoIHRoZXNlIGNhcmRzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvZmFxLnR4dCBiL0RvY3VtZW50YXRpb24vZHZiL2ZhcS50eHQKaW5kZXggMTIxODMyZS4uOTdiMTM3MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kdmIvZmFxLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2R2Yi9mYXEudHh0CkBAIC0xMDYsNyArMTA2LDcgQEAKIDUuIFRoZSBkdmJfbmV0IGRldmljZSBkb2Vzbid0IGdpdmUgbWUgYW55IHBhY2tldHMgYXQgYWxsCiAKIAlSdW4gdGNwZHVtcCBvbiB0aGUgZHZiMF8wIGludGVyZmFjZS4gVGhpcyBzZXRzIHRoZSBpbnRlcmZhY2UKLQlpbnRvIHByb21pc2NvdXMgbW9kZSBzbyBpdCBhY2NlcHRzIGFueSBwYWNrZXRzIGZyb20gdGhlIFBJRAorCWludG8gcHJvbWlzY3VvdXMgbW9kZSBzbyBpdCBhY2NlcHRzIGFueSBwYWNrZXRzIGZyb20gdGhlIFBJRAogCXlvdSBoYXZlIGNvbmZpZ3VyZWQgd2l0aCB0aGUgZHZibmV0IHV0aWxpdHkuIENoZWNrIGlmIHRoZXJlCiAJYXJlIGFueSBwYWNrZXRzIHdpdGggdGhlIElQIGFkZHIgYW5kIE1BQyBhZGRyIHlvdSBoYXZlCiAJY29uZmlndXJlZCB3aXRoIGlmY29uZmlnLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9lZGFjLnR4dCBiL0RvY3VtZW50YXRpb24vZWRhYy50eHQKaW5kZXggY2NjMDdjMi4uMjQ5ODIyYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9lZGFjLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2VkYWMudHh0CkBAIC03NDEsNyArNzQxLDcgQEAKICAgIEFzIEVEQUMgQVBJIG1hcHMgdGhlIG1pbmltdW0gdW5pdHkgaXMgY3Nyb3dzLCB0aGUgZHJpdmVyIHNlcXVlbmNpYWxseQogICAgbWFwcyBjaGFubmVsL2RpbW0gaW50byBkaWZmZXJlbnQgY3Nyb3dzLgogCi0gICBGb3IgZXhhbXBsZSwgc3Vwb3NpbmcgdGhlIGZvbGxvd2luZyBsYXlvdXQ6CisgICBGb3IgZXhhbXBsZSwgc3VwcG9zaW5nIHRoZSBmb2xsb3dpbmcgbGF5b3V0OgogCUNoMCBwaHkgcmQwLCB3cjAgKDB4MDYzZjQwMzEpOiAyIHJhbmtzLCBVRElNTXMKIAkgIGRpbW0gMCAxMDI0IE1iIG9mZnNldDogMCwgYmFuazogOCwgcmFuazogMSwgcm93OiAweDQwMDAsIGNvbDogMHg0MDAKIAkgIGRpbW0gMSAxMDI0IE1iIG9mZnNldDogNCwgYmFuazogOCwgcmFuazogMSwgcm93OiAweDQwMDAsIGNvbDogMHg0MDAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZWlzYS50eHQgYi9Eb2N1bWVudGF0aW9uL2Vpc2EudHh0CmluZGV4IGYyOTdmYzEuLjM4Y2YwYzcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZWlzYS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9laXNhLnR4dApAQCAtODQsNyArODQsNyBAQAogCiBpZF90YWJsZQk6IGFuIGFycmF5IG9mIE5VTEwgdGVybWluYXRlZCBFSVNBIGlkIHN0cmluZ3MsCiAJCSAgZm9sbG93ZWQgYnkgYW4gZW1wdHkgc3RyaW5nLiBFYWNoIHN0cmluZyBjYW4KLQkJICBvcHRpb25hbGx5IGJlIHBhaXJlZCB3aXRoIGEgZHJpdmVyLWRlcGVuZGFudCB2YWx1ZQorCQkgIG9wdGlvbmFsbHkgYmUgcGFpcmVkIHdpdGggYSBkcml2ZXItZGVwZW5kZW50IHZhbHVlCiAJCSAgKGRyaXZlcl9kYXRhKS4KIAogZHJpdmVyCQk6IGEgZ2VuZXJpYyBkcml2ZXIsIHN1Y2ggYXMgZGVzY3JpYmVkIGluCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL3ZpYWZiLnR4dCBiL0RvY3VtZW50YXRpb24vZmIvdmlhZmIudHh0CmluZGV4IDFhMmU4YWEuLjQ0NGUzNGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmIvdmlhZmIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmIvdmlhZmIudHh0CkBAIC0yMDQsNyArMjA0LDcgQEAKIAogICAgIHN1cHBvcnRlZF9vdXRwdXRfZGV2aWNlcwogCi0gICAgICAgIFRoaXMgcmVhZC1vbmx5IGZpbGUgY29udGFpbnMgYSBmdWxsICcsJyBzZXBlcmF0ZWQgbGlzdCBjb250YWluaW5nIGFsbAorICAgICAgICBUaGlzIHJlYWQtb25seSBmaWxlIGNvbnRhaW5zIGEgZnVsbCAnLCcgc2VwYXJhdGVkIGxpc3QgY29udGFpbmluZyBhbGwKICAgICAgICAgb3V0cHV0IGRldmljZXMgdGhhdCBjb3VsZCBiZSBhdmFpbGFibGUgb24geW91ciBwbGF0Zm9ybS4gSXQgaXMgbGlrZWx5CiAgICAgICAgIHRoYXQgbm90IGFsbCBvZiB0aG9zZSBoYXZlIGEgY29ubmVjdG9yIG9uIHlvdXIgaGFyZHdhcmUgYnV0IGl0IHNob3VsZAogICAgICAgICBwcm92aWRlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIHRob3NlIG5hbWVzIG1hdGNoCkBAIC0yMjUsNyArMjI1LDcgQEAKICAgICAgICAgVGhpcyBjYW4gaGFwcGVuIGZvciBleGFtcGxlIGlmIG9ubHkgb25lICh0aGUgb3RoZXIpIGlnYSBpcyB1c2VkLgogICAgICAgICBXcml0aW5nIHRvIHRoZXNlIGZpbGVzIGFsbG93cyBhZGp1c3RpbmcgdGhlIG91dHB1dCBkZXZpY2VzIGR1cmluZwogICAgICAgICBydW50aW1lLiBPbmUgY2FuIGFkZCBuZXcgZGV2aWNlcywgcmVtb3ZlIGV4aXN0aW5nIG9uZXMgb3Igc3dpdGNoCi0gICAgICAgIGJldHdlZW4gaWdhcy4gRXNzZW50aWFsbHkgeW91IGNhbiB3cml0ZSBhICcsJyBzZXBlcmF0ZWQgbGlzdCBvZiBkZXZpY2UKKyAgICAgICAgYmV0d2VlbiBpZ2FzLiBFc3NlbnRpYWxseSB5b3UgY2FuIHdyaXRlIGEgJywnIHNlcGFyYXRlZCBsaXN0IG9mIGRldmljZQogICAgICAgICBuYW1lcyAob3IgYSBzaW5nbGUgb25lKSBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgdGhlIG91dHB1dCB0byB0aG9zZQogICAgICAgICBmaWxlcy4gWW91IGNhbiBhZGQgYSAnKycgb3IgJy0nIGFzIGEgcHJlZml4IGFsbG93aW5nIHNpbXBsZSBhZGRpdGlvbgogICAgICAgICBhbmQgcmVtb3ZhbCBvZiBkZXZpY2VzLiBTbyBhIHByZWZpeCAnKycgYWRkcyB0aGUgZGV2aWNlcyBmcm9tIHlvdXIgbGlzdApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CmluZGV4IDI3NGIzMmQuLjQ5MmU4MWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTM4NywyNiArMzg3LDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OglTdXBwb3J0IGZvciBsY2Rfc3dpdGNoIGFuZCBkaXNwbGF5X2dldCBpbiBhc3VzLWxhcHRvcCBkcml2ZXIKLVdoZW46CU1hcmNoIDIwMTAKLVdoeToJVGhlc2UgdHdvIGZlYXR1cmVzIHVzZSBub24tc3RhbmRhcmQgaW50ZXJmYWNlcy4gVGhlcmUgYXJlIHRoZQotCW9ubHkgZmVhdHVyZXMgdGhhdCByZWFsbHkgbmVlZCBtdWx0aXBsZSBwYXRoIHRvIGd1ZXNzIHdoYXQncwotCXRoZSByaWdodCBtZXRob2QgbmFtZSBvbiBhIHNwZWNpZmljIGxhcHRvcC4KLQotCVJlbW92aW5nIHRoZW0gd2lsbCBhbGxvdyB0byByZW1vdmUgYSBsb3Qgb2YgY29kZSBhbiBzaWduaWZpY2FudGx5Ci0JY2xlYW4gdGhlIGRyaXZlcnMuCi0KLQlUaGlzIHdpbGwgYWZmZWN0IHRoZSBiYWNrbGlnaHQgY29kZSB3aGljaCB3b24ndCBiZSBhYmxlIHRvIGtub3cKLQlpZiB0aGUgYmFja2xpZ2h0IGlzIG9uIG9yIG9mZi4gVGhlIHBsYXRmb3JtIGRpc3BsYXkgZmlsZSB3aWxsIGFsc28gYmUKLQl3cml0ZSBvbmx5IChsaWtlIHRoZSBvbmUgaW4gZWVlcGMtbGFwdG9wKS4KLQotCVRoaXMgc2hvdWxkJ250IGFmZmVjdCBhIGxvdCBvZiB1c2VyIGJlY2F1c2UgdGhleSB1c3VhbGx5IGtub3cKLQl3aGVuIHRoZWlyIGRpc3BsYXkgaXMgb24gb3Igb2ZmLgotCi1XaG86CUNvcmVudGluIENoYXJ5IDxjb3JlbnRpbi5jaGFyeUBnbWFpbC5jb20+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogV2hhdDoJc3lzZnMtY2xhc3MtcmZraWxsIHN0YXRlIGZpbGUKIFdoZW46CUZlYiAyMDE0CiBGaWxlczoJbmV0L3Jma2lsbC9jb3JlLmMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYXV0b2ZzNC1tb3VudC1jb250cm9sLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYXV0b2ZzNC1tb3VudC1jb250cm9sLnR4dAppbmRleCA1MTk4NmJmLi40Yzk1OTM1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2F1dG9mczQtbW91bnQtY29udHJvbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hdXRvZnM0LW1vdW50LWNvbnRyb2wudHh0CkBAIC0zMDksNyArMzA5LDcgQEAKIEFVVE9GU19ERVZfSU9DVExfVElNRU9VVF9DTUQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotU2V0IHRoZSBleHBpcmUgdGltZW91dCBmb3IgbW91bnRzIHdpdGhpbmcgYW4gYXV0b2ZzIG1vdW50IHBvaW50LgorU2V0IHRoZSBleHBpcmUgdGltZW91dCBmb3IgbW91bnRzIHdpdGhpbiBhbiBhdXRvZnMgbW91bnQgcG9pbnQuCiAKIFRoZSBjYWxsIHJlcXVpcmVzIGFuIGluaXRpYWxpemVkIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsIHdpdGggdGhlCiBpb2N0bGZkIGZpZWxkIHNldCB0byB0aGUgZGVzY3JpcHRvciBvYnRhaW5lZCBmcm9tIHRoZSBvcGVuIGNhbGwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0CmluZGV4IDE5MDJjNTcuLmExNjdhYjggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0CkBAIC05NSw3ICs5NSw3IEBACiB0aGUgdHJlZS4gIFRoZSBuZXRmcyBjYW4gZXZlbiBtaXggaW5kaWNlcyBhbmQgZGF0YSBmaWxlcyBhdCB0aGUgc2FtZSBsZXZlbCwgYnV0CiBpdCdzIG5vdCByZWNvbW1lbmRlZC4KIAotRWFjaCBpbmRleCBlbnRyeSBjb25zaXN0cyBvZiBhIGtleSBvZiBpbmRldGVybWluYXRlIGxlbmd0aCBwbHVzIHNvbWUgYXV4aWxsaWFyeQorRWFjaCBpbmRleCBlbnRyeSBjb25zaXN0cyBvZiBhIGtleSBvZiBpbmRldGVybWluYXRlIGxlbmd0aCBwbHVzIHNvbWUgYXV4aWxpYXJ5CiBkYXRhLCBhbHNvIG9mIGluZGV0ZXJtaW5hdGUgbGVuZ3RoLgogCiBUaGVyZSBhcmUgc29tZSBsaW1pdHMgb24gaW5kaWNlczoKQEAgLTIwMywyMyArMjAzLDIzIEBACiAKICAgICAgSWYgdGhlIGZ1bmN0aW9uIGlzIGFic2VudCwgYSBmaWxlIHNpemUgb2YgMCBpcyBhc3N1bWVkLgogCi0gKDYpIEEgZnVuY3Rpb24gdG8gcmV0cmlldmUgYXV4aWxsaWFyeSBkYXRhIGZyb20gdGhlIG5ldGZzIFtvcHRpb25hbF0uCisgKDYpIEEgZnVuY3Rpb24gdG8gcmV0cmlldmUgYXV4aWxpYXJ5IGRhdGEgZnJvbSB0aGUgbmV0ZnMgW29wdGlvbmFsXS4KIAogICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIG5ldGZzIGRhdGEgdGhhdCB3YXMgcGFzc2VkIHRvIHRoZQotICAgICBjb29raWUgYWNxdWlzaXRpb24gZnVuY3Rpb24gYW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhdXhpbGxpYXJ5IGRhdGEgdGhhdAotICAgICBpdCBtYXkgcHJvdmlkZS4gIEl0IHNob3VsZCB3cml0ZSB0aGUgYXV4aWxsaWFyeSBkYXRhIGludG8gdGhlIGdpdmVuIGJ1ZmZlcgorICAgICBjb29raWUgYWNxdWlzaXRpb24gZnVuY3Rpb24gYW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhdXhpbGlhcnkgZGF0YSB0aGF0CisgICAgIGl0IG1heSBwcm92aWRlLiAgSXQgc2hvdWxkIHdyaXRlIHRoZSBhdXhpbGlhcnkgZGF0YSBpbnRvIHRoZSBnaXZlbiBidWZmZXIKICAgICAgYW5kIHJldHVybiB0aGUgcXVhbnRpdHkgaXQgd3JvdGUuCiAKLSAgICAgSWYgdGhpcyBmdW5jdGlvbiBpcyBhYnNlbnQsIHRoZSBhdXhpbGxpYXJ5IGRhdGEgbGVuZ3RoIHdpbGwgYmUgc2V0IHRvIDAuCisgICAgIElmIHRoaXMgZnVuY3Rpb24gaXMgYWJzZW50LCB0aGUgYXV4aWxpYXJ5IGRhdGEgbGVuZ3RoIHdpbGwgYmUgc2V0IHRvIDAuCiAKLSAgICAgVGhlIGxlbmd0aCBvZiB0aGUgYXV4aWxsaWFyeSBkYXRhIGJ1ZmZlciBtYXkgYmUgZGVwZW5kZW50IG9uIHRoZSBrZXkKKyAgICAgVGhlIGxlbmd0aCBvZiB0aGUgYXV4aWxpYXJ5IGRhdGEgYnVmZmVyIG1heSBiZSBkZXBlbmRlbnQgb24gdGhlIGtleQogICAgICBsZW5ndGguICBBIG5ldGZzIG11c3RuJ3QgcmVseSBvbiBiZWluZyBhYmxlIHRvIHByb3ZpZGUgbW9yZSB0aGFuIDQwMCBieXRlcwogICAgICBmb3IgYm90aC4KIAotICg3KSBBIGZ1bmN0aW9uIHRvIGNoZWNrIHRoZSBhdXhpbGxpYXJ5IGRhdGEgW29wdGlvbmFsXS4KKyAoNykgQSBmdW5jdGlvbiB0byBjaGVjayB0aGUgYXV4aWxpYXJ5IGRhdGEgW29wdGlvbmFsXS4KIAogICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHRvIGNoZWNrIHRoYXQgYSBtYXRjaCBmb3VuZCBpbiB0aGUgY2FjaGUgZm9yCi0gICAgIHRoaXMgb2JqZWN0IGlzIHZhbGlkLiAgRm9yIGluc3RhbmNlIHdpdGggQUZTIGl0IGNvdWxkIGNoZWNrIHRoZSBhdXhpbGxpYXJ5CisgICAgIHRoaXMgb2JqZWN0IGlzIHZhbGlkLiAgRm9yIGluc3RhbmNlIHdpdGggQUZTIGl0IGNvdWxkIGNoZWNrIHRoZSBhdXhpbGlhcnkKICAgICAgZGF0YSBhZ2FpbnN0IHRoZSBkYXRhIHZlcnNpb24gbnVtYmVyIHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIgdG8gZGV0ZXJtaW5lCiAgICAgIHdoZXRoZXIgdGhlIGluZGV4IGVudHJ5IGluIGEgY2FjaGUgaXMgc3RpbGwgdmFsaWQuCiAKQEAgLTIzMiw3ICsyMzIsNyBAQAogCSgqKSBGU0NBQ0hFX0NIRUNLQVVYX05FRURTX1VQREFURQktIHRoZSBlbnRyeSByZXF1aXJlcyB1cGRhdGUKIAkoKikgRlNDQUNIRV9DSEVDS0FVWF9PQlNPTEVURQkJLSB0aGUgZW50cnkgc2hvdWxkIGJlIGRlbGV0ZWQKIAotICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBhbHNvIGJlIHVzZWQgdG8gZXh0cmFjdCBkYXRhIGZyb20gdGhlIGF1eGlsbGlhcnkgZGF0YSBpbgorICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBhbHNvIGJlIHVzZWQgdG8gZXh0cmFjdCBkYXRhIGZyb20gdGhlIGF1eGlsaWFyeSBkYXRhIGluCiAgICAgIHRoZSBjYWNoZSBhbmQgY29weSBpdCBpbnRvIHRoZSBuZXRmcydzIHN0cnVjdHVyZXMuCiAKICAoOCkgQSBwYWlyIG9mIGZ1bmN0aW9ucyB0byBtYW5hZ2UgY29udGV4dHMgZm9yIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NvbmZpZ2ZzL2NvbmZpZ2ZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY29uZmlnZnMvY29uZmlnZnMudHh0CmluZGV4IGZhYmNiMGUuLmRkNTdiYjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY29uZmlnZnMvY29uZmlnZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY29uZmlnZnMvY29uZmlnZnMudHh0CkBAIC00MDksNyArNDA5LDcgQEAKIHJtZGlyKDIpLiAgVGhleSBhbHNvIGFyZSBub3QgY29uc2lkZXJlZCB3aGVuIHJtZGlyKDIpIG9uIHRoZSBwYXJlbnQKIGdyb3VwIGlzIGNoZWNraW5nIGZvciBjaGlsZHJlbi4KIAotW0RlcGVuZGFudCBTdWJzeXN0ZW1zXQorW0RlcGVuZGVudCBTdWJzeXN0ZW1zXQogCiBTb21ldGltZXMgb3RoZXIgZHJpdmVycyBkZXBlbmQgb24gcGFydGljdWxhciBjb25maWdmcyBpdGVtcy4gIEZvcgogZXhhbXBsZSwgb2NmczIgbW91bnRzIGRlcGVuZCBvbiBhIGhlYXJ0YmVhdCByZWdpb24gaXRlbS4gIElmIHRoYXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0CmluZGV4IDZiMDUwNDYuLmM3OWVjNTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0LnR4dApAQCAtOTcsNyArOTcsNyBAQAogKiBJbm9kZSBhbGxvY2F0aW9uIHVzaW5nIGxhcmdlIHZpcnR1YWwgYmxvY2sgZ3JvdXBzIHZpYSBmbGV4X2JnCiAqIGRlbGF5ZWQgYWxsb2NhdGlvbgogKiBsYXJnZSBibG9jayAodXAgdG8gcGFnZXNpemUpIHN1cHBvcnQKLSogZWZmaWNlbnQgbmV3IG9yZGVyZWQgbW9kZSBpbiBKQkQyIGFuZCBleHQ0KGF2b2lkIHVzaW5nIGJ1ZmZlciBoZWFkIHRvIGZvcmNlCisqIGVmZmljaWVudCBuZXcgb3JkZXJlZCBtb2RlIGluIEpCRDIgYW5kIGV4dDQoYXZvaWQgdXNpbmcgYnVmZmVyIGhlYWQgdG8gZm9yY2UKICAgdGhlIG9yZGVyaW5nKQogCiBbMV0gRmlsZXN5c3RlbXMgd2l0aCBhIGJsb2NrIHNpemUgb2YgMWsgbWF5IHNlZSBhIGxpbWl0IGltcG9zZWQgYnkgdGhlCkBAIC0xMDYsNyArMTA2LDcgQEAKIDIuMiBDYW5kaWRhdGUgZmVhdHVyZXMgZm9yIGZ1dHVyZSBpbmNsdXNpb24KIAogKiBPbmxpbmUgZGVmcmFnIChwYXRjaGVzIGF2YWlsYWJsZSBidXQgbm90IHdlbGwgdGVzdGVkKQotKiByZWR1Y2VkIG1rZTJmcyB0aW1lIHZpYSBsYXp5IGl0YWJsZSBpbml0aWFsaXphdGlvbiBpbiBjb25qdWN0aW9uIHdpdGgKKyogcmVkdWNlZCBta2UyZnMgdGltZSB2aWEgbGF6eSBpdGFibGUgaW5pdGlhbGl6YXRpb24gaW4gY29uanVuY3Rpb24gd2l0aAogICB0aGUgdW5pbml0X2JnIGZlYXR1cmUgKGNhcGFiaWxpdHkgdG8gZG8gdGhpcyBpcyBhdmFpbGFibGUgaW4gZTJmc3Byb2dzCiAgIGJ1dCBhIGtlcm5lbCB0aHJlYWQgdG8gZG8gbGF6eSB6ZXJvaW5nIG9mIHVudXNlZCBpbm9kZSB0YWJsZSBibG9ja3MKICAgYWZ0ZXIgZmlsZXN5c3RlbSBpcyBmaXJzdCBtb3VudGVkIGlzIHJlcXVpcmVkIGZvciBzYWZldHkpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2dmczItdWV2ZW50cy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2dmczItdWV2ZW50cy50eHQKaW5kZXggZmQ5NjZkYy4uZDgxODg5NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9nZnMyLXVldmVudHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZ2ZzMi11ZXZlbnRzLnR4dApAQCAtNjIsNyArNjIsNyBAQAogCiBUaGUgUkVNT1ZFIHVldmVudCBpcyBnZW5lcmF0ZWQgYXQgdGhlIGVuZCBvZiBhbiB1bnN1Y2Nlc3NmdWwgbW91bnQKIG9yIGF0IHRoZSBlbmQgb2YgYSB1bW91bnQgb2YgdGhlIGZpbGVzeXN0ZW0uIEFsbCBSRU1PVkUgdWV2ZW50cyB3aWxsCi1oYXZlIGJlZW4gcHJlY2VlZGVkIGJ5IGF0IGxlYXN0IGFuIEFERCB1ZXZlbnQgZm9yIHRoZSBzYW1lIGZpbGV5c3RlbSwKK2hhdmUgYmVlbiBwcmVjZWRlZCBieSBhdCBsZWFzdCBhbiBBREQgdWV2ZW50IGZvciB0aGUgc2FtZSBmaWxleXN0ZW0sCiBhbmQgdW5saWtlIHRoZSBvdGhlciB1ZXZlbnRzIGlzIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBrZXJuZWwncwoga29iamVjdCBzdWJzeXN0ZW0uCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZ2ZzMi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2dmczIudHh0CmluZGV4IDBiNTljMDIuLjRjZGE5MjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZ2ZzMi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9nZnMyLnR4dApAQCAtMTEsNyArMTEsNyBAQAogZmVhdHVyZXMgb2YgR0ZTIGlzIHBlcmZlY3QgY29uc2lzdGVuY3kgLS0gY2hhbmdlcyBtYWRlIHRvIHRoZSBmaWxlIHN5c3RlbQogb24gb25lIG1hY2hpbmUgc2hvdyB1cCBpbW1lZGlhdGVseSBvbiBhbGwgb3RoZXIgbWFjaGluZXMgaW4gdGhlIGNsdXN0ZXIuCiAKLUdGUyB1c2VzIGludGVyY2hhbmdhYmxlIGludGVyLW5vZGUgbG9ja2luZyBtZWNoYW5pc21zLCB0aGUgY3VycmVudGx5CitHRlMgdXNlcyBpbnRlcmNoYW5nZWFibGUgaW50ZXItbm9kZSBsb2NraW5nIG1lY2hhbmlzbXMsIHRoZSBjdXJyZW50bHkKIHN1cHBvcnRlZCBtZWNoYW5pc21zIGFyZToKIAogICBsb2NrX25vbG9jayAtLSBhbGxvd3MgZ2ZzIHRvIGJlIHVzZWQgYXMgYSBsb2NhbCBmaWxlIHN5c3RlbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9udGZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbnRmcy50eHQKaW5kZXggOTMzYmM2Ni4uNzkxYWY4ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9udGZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL250ZnMudHh0CkBAIC0zNTAsNyArMzUwLDcgQEAKIGFscmVhZHkgaW4gc3luYyB3aGljaCB3aWxsIGJlIHRoZSBjYXNlIG9uIGEgY2xlYW4gc2h1dGRvd24gb2YgV2luZG93cy4gIElmIHRoZQogbWlycm9ycyBhcmUgbm90IGNsZWFuLCB5b3UgY2FuIHNwZWNpZnkgdGhlICJzeW5jIiBvcHRpb24gaW5zdGVhZCBvZiAibm9zeW5jIgogYW5kIHRoZSBEZXZpY2UtTWFwcGVyIGRyaXZlciB3aWxsIHRoZW4gY29weSB0aGUgZW50aXJldHkgb2YgdGhlICJTb3VyY2UgRGV2aWNlIgotdG8gdGhlICJUYXJnZXQgRGV2aWNlIiBvciBpZiB5b3Ugc3BlY2lmaWVkIG11bHRpcGxlZCB0YXJnZXQgZGV2aWNlcyB0byBhbGwgb2YKK3RvIHRoZSAiVGFyZ2V0IERldmljZSIgb3IgaWYgeW91IHNwZWNpZmllZCBtdWx0aXBsZSB0YXJnZXQgZGV2aWNlcyB0byBhbGwgb2YKIHRoZW0uCiAKIE9uY2UgeW91IGhhdmUgeW91ciB0YWJsZSwgc2F2ZSBpdCBpbiBhIGZpbGUgc29tZXdoZXJlIChlLmcuIC9ldGMvbnRmc3ZvbHVtZTEpLApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9vY2ZzMi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL29jZnMyLnR4dAppbmRleCA1MzkzZTY2Li45ZWQ5MjBhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL29jZnMyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL29jZnMyLnR4dApAQCAtODAsNyArODAsNyBAQAogbm91c2VyX3hhdHRyCQlEaXNhYmxlcyBFeHRlbmRlZCBVc2VyIEF0dHJpYnV0ZXMuCiBhY2wJCQlFbmFibGVzIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIHN1cHBvcnQuCiBub2FjbAkJKCopCURpc2FibGVzIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIHN1cHBvcnQuCi1yZXN2X2xldmVsPTIJKCopCVNldCBob3cgYWdyZXNzaXZlIGFsbG9jYXRpb24gcmVzZXJ2YXRpb25zIHdpbGwgYmUuCityZXN2X2xldmVsPTIJKCopCVNldCBob3cgYWdncmVzc2l2ZSBhbGxvY2F0aW9uIHJlc2VydmF0aW9ucyB3aWxsIGJlLgogCQkJVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDAgKHJlc2VydmF0aW9ucyBvZmYpIHRvIDgKIAkJCShtYXhpbXVtIHNwYWNlIGZvciByZXNlcnZhdGlvbnMpLgogZGlyX3Jlc3ZfbGV2ZWw9CSgqKQlCeSBkZWZhdWx0LCBkaXJlY3RvcnkgcmVzZXJ2YXRpb25zIHdpbGwgc2NhbGUgd2l0aCBmaWxlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BhdGgtbG9va3VwLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcGF0aC1sb29rdXAudHh0CmluZGV4IGViNTljOGIuLjM1NzE2NjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcGF0aC1sb29rdXAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcGF0aC1sb29rdXAudHh0CkBAIC00Miw3ICs0Miw3IEBACiBBIG5hbWUgc3RyaW5nIHNwZWNpZmllcyBhIHN0YXJ0IChyb290IGRpcmVjdG9yeSwgY3dkLCBmZC1yZWxhdGl2ZSkgYW5kIGEKIHNlcXVlbmNlIG9mIGVsZW1lbnRzIChkaXJlY3RvcnkgZW50cnkgbmFtZXMpLCB3aGljaCB0b2dldGhlciByZWZlciB0byBhIHBhdGggaW4KIHRoZSBuYW1lc3BhY2UuIEEgcGF0aCBpcyByZXByZXNlbnRlZCBhcyBhIChkZW50cnksIHZmc21vdW50KSB0dXBsZS4gVGhlIG5hbWUKLWVsZW1lbnRzIGFyZSBzdWItc3RyaW5ncywgc2VwZXJhdGVkIGJ5ICcvJy4KK2VsZW1lbnRzIGFyZSBzdWItc3RyaW5ncywgc2VwYXJhdGVkIGJ5ICcvJy4KIAogTmFtZSBsb29rdXBzIHdpbGwgd2FudCB0byBmaW5kIGEgcGFydGljdWxhciBwYXRoIHRoYXQgYSBuYW1lIHN0cmluZyByZWZlcnMgdG8KICh1c3VhbGx5IHRoZSBmaW5hbCBlbGVtZW50LCBvciBwYXJlbnQgb2YgZmluYWwgZWxlbWVudCkuIFRoaXMgaXMgZG9uZSBieSB0YWtpbmcKQEAgLTM1NCw3ICszNTQsNyBAQAogCiBXaGF0IHRoaXMgc2hvd3MgaXMgdGhhdCBmYWlsZWQgcmN1LXdhbGsgbG9va3VwcywgaWUuIG9uZXMgdGhhdCBhcmUgcmVzdGFydGVkCiBlbnRpcmVseSB3aXRoIHJlZi13YWxrLCBhcmUgcXVpdGUgcmFyZS4gRXZlbiB0aGUgInZmc3Rlc3QiIGNhc2Ugd2hpY2gKLXNwZWNpZmljYWxseSBoYXMgY29uY3VycmVudCByZW5hbWVzL21rZGlyL3JtZGlyLyBjcmVhdC91bmxpbmsvZXRjIHRvIGV4Y2VyY2lzZQorc3BlY2lmaWNhbGx5IGhhcyBjb25jdXJyZW50IHJlbmFtZXMvbWtkaXIvcm1kaXIvIGNyZWF0L3VubGluay9ldGMgdG8gZXhlcmNpc2UKIHN1Y2ggcmFjZXMgaXMgbm90IHNob3dpbmcgYSBodWdlIGFtb3VudCBvZiByZXN0YXJ0cy4KIAogRHJvcHBpbmcgZnJvbSByY3Utd2FsayB0byByZWYtd2FsayBtZWFuIHRoYXQgd2UgaGF2ZSBlbmNvdW50ZXJlZCBhIGRlbnRyeSB3aGVyZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb2htZWxmcy9uZXR3b3JrX3Byb3RvY29sLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9obWVsZnMvbmV0d29ya19wcm90b2NvbC50eHQKaW5kZXggNDBlYTZjMi4uNjVlMDNkZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb2htZWxmcy9uZXR3b3JrX3Byb3RvY29sLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvaG1lbGZzL25ldHdvcmtfcHJvdG9jb2wudHh0CkBAIC0yMCw3ICsyMCw3IEBACiBzbyBvbmUgY2FuIGV4dGVuZCBwcm90b2NvbCBhcyBuZWVkZWQgd2l0aG91dCBicmVha2luZyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIGxvbmcKIGFzIG9sZCBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLiBBbGwgc3RyaW5nIGxlbmd0aHMgaW5jbHVkZSB0YWlsIDAgYnl0ZS4KIAotQWxsIGNvbW1hbnMgYXJlIHRyYW5zZmVyZWQgb3ZlciB0aGUgbmV0d29yayBpbiBiaWctZW5kaWFuLiBDUFUgZW5kaWFuZXNzIGlzIHVzZWQgYXQgdGhlIGVuZCBwZWVycy4KK0FsbCBjb21tYW5kcyBhcmUgdHJhbnNmZXJyZWQgb3ZlciB0aGUgbmV0d29yayBpbiBiaWctZW5kaWFuLiBDUFUgZW5kaWFuZXNzIGlzIHVzZWQgYXQgdGhlIGVuZCBwZWVycy4KIAogQGNtZCAtIGNvbW1hbmQgbnVtYmVyLCB3aGljaCBzcGVjaWZpZXMgY29tbWFuZCB0byBiZSBwcm9jZXNzZWQuIEZvbGxvd2luZwogCWNvbW1hbmRzIGFyZSB1c2VkIGN1cnJlbnRseToKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CmluZGV4IDIzY2FlNjUuLmIwYjgxNGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dApAQCAtNTQzLDcgKzU0Myw3IEBACiAgIHRoZWlyIHN0YXRpc3RpY3MgYXJlIHVzZWQgYnkga2VybmVsIGRldmVsb3BlcnMgYW5kIGludGVyZXN0ZWQgdXNlcnMgdG8KICAgZGV0ZXJtaW5lIHRoZSBvY2N1cnJlbmNlIG9mIGludGVycnVwdHMgb2YgdGhlIGdpdmVuIHR5cGUuCiAKLVRoZSBhYm92ZSBJUlEgdmVjdG9ycyBhcmUgZGlzcGxheWVkIG9ubHkgd2hlbiByZWxldmVudC4gIEZvciBleGFtcGxlLAorVGhlIGFib3ZlIElSUSB2ZWN0b3JzIGFyZSBkaXNwbGF5ZWQgb25seSB3aGVuIHJlbGV2YW50LiAgRm9yIGV4YW1wbGUsCiB0aGUgdGhyZXNob2xkIHZlY3RvciBkb2VzIG5vdCBleGlzdCBvbiB4ODZfNjQgcGxhdGZvcm1zLiAgT3RoZXJzIGFyZQogc3VwcHJlc3NlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgYSB1bmlwcm9jZXNzb3IuICBBcyBvZiB0aGlzIHdyaXRpbmcsIG9ubHkKIGkzODYgYW5kIHg4Nl82NCBwbGF0Zm9ybXMgc3VwcG9ydCB0aGUgbmV3IElSUSB2ZWN0b3IgZGlzcGxheXMuCkBAIC0xMjAyLDcgKzEyMDIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICBXID0gY2FuIGRvIHdyaXRlIG9wZXJhdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgVSA9IGNhbiBkbyB1bmJsYW5rCiAgIGZsYWdzICAgICAgICAgICAgICAgIEUgPSBpdCBpcyBlbmFibGVkCi0gICAgICAgICAgICAgICAgICAgICAgIEMgPSBpdCBpcyBwcmVmZXJlZCBjb25zb2xlCisgICAgICAgICAgICAgICAgICAgICAgIEMgPSBpdCBpcyBwcmVmZXJyZWQgY29uc29sZQogICAgICAgICAgICAgICAgICAgICAgICBCID0gaXQgaXMgcHJpbWFyeSBib290IGNvbnNvbGUKICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGl0IGlzIHVzZWQgZm9yIHByaW50ayBidWZmZXIKICAgICAgICAgICAgICAgICAgICAgICAgYiA9IGl0IGlzIG5vdCBhIFRUWSBidXQgYSBCcmFpbGxlIGRldmljZQpAQCAtMTMzMSw3ICsxMzMxLDcgQEAKIERvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dC4KIAogQ2F2ZWF0OiB3aGVuIGEgcGFyZW50IHRhc2sgaXMgc2VsZWN0ZWQsIHRoZSBvb20ga2lsbGVyIHdpbGwgc2FjcmlmaWNlIGFueSBmaXJzdAotZ2VuZXJhdGlvbiBjaGlsZHJlbiB3aXRoIHNlcGVyYXRlIGFkZHJlc3Mgc3BhY2VzIGluc3RlYWQsIGlmIHBvc3NpYmxlLiAgVGhpcworZ2VuZXJhdGlvbiBjaGlsZHJlbiB3aXRoIHNlcGFyYXRlIGFkZHJlc3Mgc3BhY2VzIGluc3RlYWQsIGlmIHBvc3NpYmxlLiAgVGhpcwogYXZvaWRzIHNlcnZlcnMgYW5kIGltcG9ydGFudCBzeXN0ZW0gZGFlbW9ucyBmcm9tIGJlaW5nIGtpbGxlZCBhbmQgbG9zZXMgdGhlCiBtaW5pbWFsIGFtb3VudCBvZiB3b3JrLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3NxdWFzaGZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3F1YXNoZnMudHh0CmluZGV4IDJkNzhmMTkuLmQ0ZDQxNDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3F1YXNoZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3F1YXNoZnMudHh0CkBAIC0yMTksNyArMjE5LDcgQEAKIHJlZmVyZW5jZSB0byB3aGVyZSB0aGUgYWN0dWFsIHZhbHVlIGlzIHN0b3JlZCkuICBUaGlzIGFsbG93cyBsYXJnZSB2YWx1ZXMKIHRvIGJlIHN0b3JlZCBvdXQgb2YgbGluZSBpbXByb3Zpbmcgc2Nhbm5pbmcgYW5kIGxvb2t1cCBwZXJmb3JtYW5jZSBhbmQgaXQKIGFsc28gYWxsb3dzIHZhbHVlcyB0byBiZSBkZS1kdXBsaWNhdGVkLCB0aGUgdmFsdWUgYmVpbmcgc3RvcmVkIG9uY2UsIGFuZAotYWxsIG90aGVyIG9jY3VyZW5jZXMgaG9sZGluZyBhbiBvdXQgb2YgbGluZSByZWZlcmVuY2UgdG8gdGhhdCB2YWx1ZS4KK2FsbCBvdGhlciBvY2N1cnJlbmNlcyBob2xkaW5nIGFuIG91dCBvZiBsaW5lIHJlZmVyZW5jZSB0byB0aGF0IHZhbHVlLgogCiBUaGUgeGF0dHIgbGlzdHMgYXJlIHBhY2tlZCBpbnRvIGNvbXByZXNzZWQgOEsgbWV0YWRhdGEgYmxvY2tzLgogVG8gcmVkdWNlIG92ZXJoZWFkIGluIGlub2RlcywgcmF0aGVyIHRoYW4gc3RvcmluZyB0aGUgb24tZGlzawpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLnR4dAppbmRleCBmODA2ZTUwLi41OTdmNzI4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLnR4dApAQCAtNjIsNyArNjIsNyBAQAogCiBNaXhpbmcgdHlwZXMsIGV4cHJlc3NpbmcgbXVsdGlwbGUgbGluZXMgb2YgZGF0YSwgYW5kIGRvaW5nIGZhbmN5CiBmb3JtYXR0aW5nIG9mIGRhdGEgaXMgaGVhdmlseSBmcm93bmVkIHVwb24uIERvaW5nIHRoZXNlIHRoaW5ncyBtYXkgZ2V0Ci15b3UgcHVibGljYWxseSBodW1pbGlhdGVkIGFuZCB5b3VyIGNvZGUgcmV3cml0dGVuIHdpdGhvdXQgbm90aWNlLiAKK3lvdSBwdWJsaWNseSBodW1pbGlhdGVkIGFuZCB5b3VyIGNvZGUgcmV3cml0dGVuIHdpdGhvdXQgbm90aWNlLiAKIAogCiBBbiBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBpcyBzaW1wbHk6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy50eHQKaW5kZXggODA4MTVlZC4uMjFhN2RjNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnR4dApAQCAtOTcsNyArOTcsNyBAQAogVGhlIHBhc3NlZCBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBkZXNjcmliZXMgeW91ciBmaWxlc3lzdGVtLiBXaGVuIGEKIHJlcXVlc3QgaXMgbWFkZSB0byBtb3VudCBhIGZpbGVzeXN0ZW0gb250byBhIGRpcmVjdG9yeSBpbiB5b3VyIG5hbWVzcGFjZSwKIHRoZSBWRlMgd2lsbCBjYWxsIHRoZSBhcHByb3ByaWF0ZSBtb3VudCgpIG1ldGhvZCBmb3IgdGhlIHNwZWNpZmljCi1maWxlc3lzdGVtLiAgTmV3IHZmc21vdW50IHJlZmVyaW5nIHRvIHRoZSB0cmVlIHJldHVybmVkIGJ5IC0+bW91bnQoKQorZmlsZXN5c3RlbS4gIE5ldyB2ZnNtb3VudCByZWZlcnJpbmcgdG8gdGhlIHRyZWUgcmV0dXJuZWQgYnkgLT5tb3VudCgpCiB3aWxsIGJlIGF0dGFjaGVkIHRvIHRoZSBtb3VudHBvaW50LCBzbyB0aGF0IHdoZW4gcGF0aG5hbWUgcmVzb2x1dGlvbgogcmVhY2hlcyB0aGUgbW91bnRwb2ludCBpdCB3aWxsIGp1bXAgaW50byB0aGUgcm9vdCBvZiB0aGF0IHZmc21vdW50LgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy1kZWxheWVkLWxvZ2dpbmctZGVzaWduLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzLWRlbGF5ZWQtbG9nZ2luZy1kZXNpZ24udHh0CmluZGV4IDUyODJlM2UuLjJjZTM2NDMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzLWRlbGF5ZWQtbG9nZ2luZy1kZXNpZ24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzLWRlbGF5ZWQtbG9nZ2luZy1kZXNpZ24udHh0CkBAIC00Miw3ICs0Miw3IEBACiBUaGlzIHJlbG9nZ2luZyB0ZWNobmlxdWUgYWxzbyBhbGxvd3Mgb2JqZWN0cyB0byBiZSBtb3ZlZCBmb3J3YXJkIGluIHRoZSBsb2cgc28KIHRoYXQgYW4gb2JqZWN0IGJlaW5nIHJlbG9nZ2VkIGRvZXMgbm90IHByZXZlbnQgdGhlIHRhaWwgb2YgdGhlIGxvZyBmcm9tIGV2ZXIKIG1vdmluZyBmb3J3YXJkLiAgVGhpcyBjYW4gYmUgc2VlbiBpbiB0aGUgdGFibGUgYWJvdmUgYnkgdGhlIGNoYW5naW5nCi0oaW5jcmVhc2luZykgTFNOIG9mIGVhY2ggc3Vic3F1ZW50IHRyYW5zYWN0aW9uIC0gdGhlIExTTiBpcyBlZmZlY3RpdmVseSBhCisoaW5jcmVhc2luZykgTFNOIG9mIGVhY2ggc3Vic2VxdWVudCB0cmFuc2FjdGlvbiAtIHRoZSBMU04gaXMgZWZmZWN0aXZlbHkgYQogZGlyZWN0IGVuY29kaW5nIG9mIHRoZSBsb2NhdGlvbiBpbiB0aGUgbG9nIG9mIHRoZSB0cmFuc2FjdGlvbi4KIAogVGhpcyByZWxvZ2dpbmcgaXMgYWxzbyB1c2VkIHRvIGltcGxlbWVudCBsb25nLXJ1bm5pbmcsIG11bHRpcGxlLWNvbW1pdApAQCAtMzM4LDcgKzMzOCw3IEBACiBpbnRvIHRoZSBuZXcgQ0lMLCB0aGVuIGNoZWNrcG9pbnQgdHJhbnNhY3Rpb24gY29tbWl0IGNvZGUgY2Fubm90IHVzZSBsb2cgaXRlbXMKIHRvIHN0b3JlIHRoZSBsaXN0IG9mIGxvZyB2ZWN0b3JzIHRoYXQgbmVlZCB0byBiZSB3cml0dGVuIGludG8gdGhlIHRyYW5zYWN0aW9uLgogSGVuY2UgbG9nIHZlY3RvcnMgbmVlZCB0byBiZSBhYmxlIHRvIGJlIGNoYWluZWQgdG9nZXRoZXIgdG8gYWxsb3cgdGhlbSB0byBiZQotZGV0YXRjaGVkIGZyb20gdGhlIGxvZyBpdGVtcy4gVGhhdCBpcywgd2hlbiB0aGUgQ0lMIGlzIGZsdXNoZWQgdGhlIG1lbW9yeQorZGV0YWNoZWQgZnJvbSB0aGUgbG9nIGl0ZW1zLiBUaGF0IGlzLCB3aGVuIHRoZSBDSUwgaXMgZmx1c2hlZCB0aGUgbWVtb3J5CiBidWZmZXIgYW5kIGxvZyB2ZWN0b3IgYXR0YWNoZWQgdG8gZWFjaCBsb2cgaXRlbSBuZWVkcyB0byBiZSBhdHRhY2hlZCB0byB0aGUKIGNoZWNrcG9pbnQgY29udGV4dCBzbyB0aGF0IHRoZSBsb2cgaXRlbSBjYW4gYmUgcmVsZWFzZWQuIEluIGRpYWdyYW1tYXRpYyBmb3JtLAogdGhlIENJTCB3b3VsZCBsb29rIGxpa2UgdGhpcyBiZWZvcmUgdGhlIGZsdXNoOgpAQCAtNTc3LDcgKzU3Nyw3IEBACiBwZW5kaW5nIHRyYW5zYWN0aW9ucy4gVGh1cyB0aGUgcGlubmluZyBhbmQgdW5waW5uaW5nIG9mIGEgbG9nIGl0ZW0gaXMgc3ltbWV0cmljCiBhcyB0aGVyZSBpcyBhIDE6MSByZWxhdGlvbnNoaXAgd2l0aCB0cmFuc2FjdGlvbiBjb21taXQgYW5kIGxvZyBpdGVtIGNvbXBsZXRpb24uCiAKLUZvciBkZWxheWVkIGxvZ2dpbmcsIGhvd2V2ZXIsIHdlIGhhdmUgYW4gYXNzeW1ldHJpYyB0cmFuc2FjdGlvbiBjb21taXQgdG8KK0ZvciBkZWxheWVkIGxvZ2dpbmcsIGhvd2V2ZXIsIHdlIGhhdmUgYW4gYXN5bW1ldHJpYyB0cmFuc2FjdGlvbiBjb21taXQgdG8KIGNvbXBsZXRpb24gcmVsYXRpb25zaGlwLiBFdmVyeSB0aW1lIGFuIG9iamVjdCBpcyByZWxvZ2dlZCBpbiB0aGUgQ0lMIGl0IGdvZXMKIHRocm91Z2ggdGhlIGNvbW1pdCBwcm9jZXNzIHdpdGhvdXQgYSBjb3JyZXNwb25kaW5nIGNvbXBsZXRpb24gYmVpbmcgcmVnaXN0ZXJlZC4KIFRoYXQgaXMsIHdlIG5vdyBoYXZlIGEgbWFueS10by1vbmUgcmVsYXRpb25zaGlwIGJldHdlZW4gdHJhbnNhY3Rpb24gY29tbWl0IGFuZApAQCAtNzgwLDcgKzc4MCw3IEBACiBGcm9tIHRoaXMsIGl0IGNhbiBiZSBzZWVuIHRoYXQgdGhlIG9ubHkgbGlmZSBjeWNsZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB0d28KIGxvZ2dpbmcgbWV0aG9kcyBhcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgbGlmZSBjeWNsZSAtIHRoZXkgc3RpbGwgaGF2ZSB0aGUgc2FtZQogYmVnaW5uaW5nIGFuZCBlbmQgYW5kIGV4ZWN1dGlvbiBjb25zdHJhaW50cy4gVGhlIG9ubHkgZGlmZmVyZW5jZXMgYXJlIGluIHRoZQotY29tbWl0aW5nIG9mIHRoZSBsb2cgaXRlbXMgdG8gdGhlIGxvZyBpdHNlbGYgYW5kIHRoZSBjb21wbGV0aW9uIHByb2Nlc3NpbmcuCitjb21taXR0aW5nIG9mIHRoZSBsb2cgaXRlbXMgdG8gdGhlIGxvZyBpdHNlbGYgYW5kIHRoZSBjb21wbGV0aW9uIHByb2Nlc3NpbmcuCiBIZW5jZSBkZWxheWVkIGxvZ2dpbmcgc2hvdWxkIG5vdCBpbnRyb2R1Y2UgYW55IGNvbnN0cmFpbnRzIG9uIGxvZyBpdGVtCiBiZWhhdmlvdXIsIGFsbG9jYXRpb24gb3IgZnJlZWluZyB0aGF0IGRvbid0IGFscmVhZHkgZXhpc3QuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmxleGlibGUtYXJyYXlzLnR4dCBiL0RvY3VtZW50YXRpb24vZmxleGlibGUtYXJyYXlzLnR4dAppbmRleCBjYjhhM2EwLi5kZjkwNGFlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZsZXhpYmxlLWFycmF5cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mbGV4aWJsZS1hcnJheXMudHh0CkBAIC02NiwxMCArNjYsMTAgQEAKIGVudGVyaW5nIGF0b21pYyBjb250ZXh0LCB1c2luZzoKIAogICAgIGludCBmbGV4X2FycmF5X3ByZWFsbG9jKHN0cnVjdCBmbGV4X2FycmF5ICphcnJheSwgdW5zaWduZWQgaW50IHN0YXJ0LAotCQkJICAgIHVuc2lnbmVkIGludCBlbmQsIGdmcF90IGZsYWdzKTsKKwkJCSAgICB1bnNpZ25lZCBpbnQgbnJfZWxlbWVudHMsIGdmcF90IGZsYWdzKTsKIAogVGhpcyBmdW5jdGlvbiB3aWxsIGVuc3VyZSB0aGF0IG1lbW9yeSBmb3IgdGhlIGVsZW1lbnRzIGluZGV4ZWQgaW4gdGhlIHJhbmdlCi1kZWZpbmVkIGJ5IHN0YXJ0IGFuZCBlbmQgaGFzIGJlZW4gYWxsb2NhdGVkLiAgVGhlcmVhZnRlciwgYQorZGVmaW5lZCBieSBzdGFydCBhbmQgbnJfZWxlbWVudHMgaGFzIGJlZW4gYWxsb2NhdGVkLiAgVGhlcmVhZnRlciwgYQogZmxleF9hcnJheV9wdXQoKSBjYWxsIG9uIGFuIGVsZW1lbnQgaW4gdGhhdCByYW5nZSBpcyBndWFyYW50ZWVkIG5vdCB0bwogYmxvY2suCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vYWJpdHVndXJ1IGIvRG9jdW1lbnRhdGlvbi9od21vbi9hYml0dWd1cnUKaW5kZXggNWViM2I5ZC4uOTE1ZjMyMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9hYml0dWd1cnUKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9hYml0dWd1cnUKQEAgLTc4LDcgKzc4LDcgQEAKIAogVGhlIGZpcnN0IGFuZCBzZWNvbmQgcmV2aXNpb24gb2YgdGhlIHVHdXJ1IGNoaXAgaW4gcmVhbGl0eSBpcyBhIFdpbmJvbmQKIFc4M0w5NTBEIGluIGRpc2d1aXNlIChkZXNwaXRlIEFiaXQgY2xhaW1pbmcgaXQgaXMgImEgbmV3IG1pY3JvcHJvY2Vzc29yCi1kZXNpZ25lZCBieSB0aGUgQUJJVCBFbmdpbmVlcnMiKS4gVW5mb3J0dW5hdGx5IHRoaXMgZG9lc24ndCBoZWxwIHNpbmNlIHRoZQorZGVzaWduZWQgYnkgdGhlIEFCSVQgRW5naW5lZXJzIikuIFVuZm9ydHVuYXRlbHkgdGhpcyBkb2Vzbid0IGhlbHAgc2luY2UgdGhlCiBXODNMOTUwRCBpcyBhIGdlbmVyaWMgbWljcm9jb250cm9sbGVyIHdpdGggYSBjdXN0b20gQWJpdCBhcHBsaWNhdGlvbiBydW5uaW5nCiBvbiBpdC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9hYml0dWd1cnUtZGF0YXNoZWV0IGIvRG9jdW1lbnRhdGlvbi9od21vbi9hYml0dWd1cnUtZGF0YXNoZWV0CmluZGV4IGQ5MjUxZWYuLjhkMmJlOGEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vYWJpdHVndXJ1LWRhdGFzaGVldAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2FiaXR1Z3VydS1kYXRhc2hlZXQKQEAgLTUsOSArNSw5IEBACiBkYXRhc2hlZXQgZnJvbSBBYml0LiBUaGUgZGF0YSBJIGhhdmUgZ290IG9uIHVHdXJ1IGhhdmUgSSBhc3NlbWJsZWQgdGhyb3VnaAogbXkgd2VhayBrbm93bGVkZ2UgaW4gImJhY2t3YXJkcyBlbmdpbmVlcmluZyIuCiBBbmQganVzdCBmb3IgdGhlIHJlY29yZCwgeW91IG1heSBoYXZlIG5vdGljZWQgdUd1cnUgaXNuJ3QgYSBjaGlwIGRldmVsb3BlZCBieQotQWJpdCwgYXMgdGhleSBjbGFpbSBpdCB0byBiZS4gSXQncyByZWFseSBqdXN0IGFuIG1pY3JvcHJvY2Vzc29yICh1QykgY3JlYXRlZCBieQorQWJpdCwgYXMgdGhleSBjbGFpbSBpdCB0byBiZS4gSXQncyByZWFsbHkganVzdCBhbiBtaWNyb3Byb2Nlc3NvciAodUMpIGNyZWF0ZWQgYnkKIFdpbmJvbmQgKFc4M0w5NTBEKS4gQW5kIG5vLCByZWFkaW5nIHRoZSBtYW51YWwgZm9yIHRoaXMgc3BlY2lmaWMgdUMgb3IKLW1haWxpbmcgIFdpbmRib25kIGZvciBoZWxwIHdvbid0IGdpdmUgYW55IHVzZWZ1bGwgZGF0YSBhYm91dCB1R3VydSwgYXMgaXQgaXMKK21haWxpbmcgIFdpbmRib25kIGZvciBoZWxwIHdvbid0IGdpdmUgYW55IHVzZWZ1bCBkYXRhIGFib3V0IHVHdXJ1LCBhcyBpdCBpcwogdGhlIHByb2dyYW0gaW5zaWRlIHRoZSB1QyB0aGF0IGlzIHJlc3BvbmRpbmcgdG8gY2FsbHMuCiAKIE9sbGUgU2FuZGJlcmcgPG9sbGVidWxsQGdtYWlsLmNvbT4sIDIwMDUtMDUtMjUKQEAgLTQxLDcgKzQxLDcgQEAKIAogQWZ0ZXIgd2lkZXIgdGVzdGluZyBvZiB0aGUgTGludXgga2VybmVsIGRyaXZlciBzb21lIHZhcmlhbnRzIG9mIHRoZSB1R3VydSBoYXZlCiB0dXJuZWQgdXAgd2hpY2ggd2lsbCBob2xkIDB4MDAgaW5zdGVhZCBvZiAweEFDIGF0IHRoZSBDTUQgcG9ydCwgdGh1cyB3ZSBhbHNvCi1oYXZlIHRvIHRlc3QgQ01EIGZvciB0d28gZGlmZmVyZW50IHZhbHVlcy4gT24gdGhlc2UgdUd1cnUncyBEQVRBIHdpbGwgaW5pdGFsbHkKK2hhdmUgdG8gdGVzdCBDTUQgZm9yIHR3byBkaWZmZXJlbnQgdmFsdWVzLiBPbiB0aGVzZSB1R3VydSdzIERBVEEgd2lsbCBpbml0aWFsbHkKIGhvbGQgMHgwOSBhbmQgd2lsbCBvbmx5IGhvbGQgMHgwOCBhZnRlciByZWFkaW5nIENNRCBmaXJzdCwgc28gQ01EIG11c3QgYmUgcmVhZAogZmlyc3QhCiAKQEAgLTMwOCw1ICszMDgsNSBAQAogcmVzdWx0ZWQgaW4gYSBfcGVybWFuZW50XyByZXByb2dyYW1taW5nIG9mIHRoZSB2b2x0YWdlcywgbHVja2lseSBJIGhhZCB0aGUKIHNlbnNvcnMgcGFydCBjb25maWd1cmVkIHNvIHRoYXQgaXQgd291bGQgc2h1dGRvd24gbXkgc3lzdGVtIG9uIGFueSBvdXQgb2Ygc3BlYwogdm9sdGFnZXMgd2hpY2ggcHJvcHJhYmx5IHNhZmVkIG15IGNvbXB1dGVyIChhZnRlciBhIHJlYm9vdCBJIG1hbmFnZWQgdG8KLWltbWVkaWF0bHkgZW50ZXIgdGhlIGJpb3MgYW5kIHJlbG9hZCB0aGUgZGVmYXVsdHMpLiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQKK2ltbWVkaWF0ZWx5IGVudGVyIHRoZSBiaW9zIGFuZCByZWxvYWQgdGhlIGRlZmF1bHRzKS4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0CiB0aGUgcmVhZC93cml0ZSBjeWNsZSBmb3IgdGhlIG5vbiBzZW5zb3IgcGFydCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgc2Vuc29yIHBhcnQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2FiaXR1Z3VydTMgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2FiaXR1Z3VydTMKaW5kZXggZmE1OThhYS4uYTZjY2ZlNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9hYml0dWd1cnUzCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vYWJpdHVndXJ1MwpAQCAtNDcsNyArNDcsNyBAQAogdGhlIEFiaXQgdUd1cnUgY2hpcCwgZm91bmQgb24gcmVjZW50IEFiaXQgdUd1cnUgZmVhdHVyaW5nIG1vdGhlcmJvYXJkcy4KIAogVGhlIDNyZCByZXZpc2lvbiBvZiB0aGUgdUd1cnUgY2hpcCBpbiByZWFsaXR5IGlzIGEgV2luYm9uZCBXODNMOTUxRy4KLVVuZm9ydHVuYXRseSB0aGlzIGRvZXNuJ3QgaGVscCBzaW5jZSB0aGUgVzgzTDk1MUcgaXMgYSBnZW5lcmljIG1pY3JvY29udHJvbGxlcgorVW5mb3J0dW5hdGVseSB0aGlzIGRvZXNuJ3QgaGVscCBzaW5jZSB0aGUgVzgzTDk1MUcgaXMgYSBnZW5lcmljIG1pY3JvY29udHJvbGxlcgogd2l0aCBhIGN1c3RvbSBBYml0IGFwcGxpY2F0aW9uIHJ1bm5pbmcgb24gaXQuCiAKIERlc3BpdGUgQWJpdCBub3QgcmVsZWFzaW5nIGFueSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIHVHdXJ1IHJldmlzaW9uIDMsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2FkbTEwMjEgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2FkbTEwMjEKaW5kZXggMDNkMDJiZi4uMDJhZDk2YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9hZG0xMDIxCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vYWRtMTAyMQpAQCAtMTQsMTAgKzE0LDYgQEAKICAgICBQcmVmaXg6ICdnbDUyM3NtJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHgxOCAtIDB4MWEsIDB4MjkgLSAweDJiLCAweDRjIC0gMHg0ZQogICAgIERhdGFzaGVldDoKLSAgKiBJbnRlbCBYZW9uIFByb2Nlc3NvcgotICAgIFByZWZpeDogLSBhbnkgb3RoZXIgLSBtYXkgcmVxdWlyZSAnZm9yY2VfYWRtMTAyMScgcGFyYW1ldGVyCi0gICAgQWRkcmVzc2VzIHNjYW5uZWQ6IG5vbmUKLSAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCBJbnRlbCB3ZWJzaXRlCiAgICogTWF4aW0gTUFYMTYxNwogICAgIFByZWZpeDogJ21heDE2MTcnCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDE4IC0gMHgxYSwgMHgyOSAtIDB4MmIsIDB4NGMgLSAweDRlCkBAIC05MSwyMSArODcsMjcgQEAKIEFETTEwMjEtY2xvbmVzIGRvIGZhc3RlciBtZWFzdXJlbWVudHMsIGJ1dCB0aGVyZSBpcyByZWFsbHkgbm8gZ29vZCByZWFzb24KIGZvciB0aGF0LgogCi1YZW9uIHN1cHBvcnQKLS0tLS0tLS0tLS0tLQogCi1Tb21lIFhlb24gcHJvY2Vzc29ycyBoYXZlIHJlYWwgbWF4MTYxNywgYWRtMTAyMSwgb3IgY29tcGF0aWJsZSBjaGlwcwotd2l0aGluIHRoZW0sIHdpdGggdHdvIHRlbXBlcmF0dXJlIHNlbnNvcnMuCitOZXRidXJzdC1iYXNlZCBYZW9uIHN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1PdGhlciBYZW9ucyBoYXZlIGNoaXBzIHdpdGggb25seSBvbmUgc2Vuc29yLgorU29tZSBYZW9uIHByb2Nlc3NvcnMgYmFzZWQgb24gdGhlIE5ldGJ1cnN0IChlYXJseSBQZW50aXVtIDQsIGZyb20gMjAwMSB0bworMjAwMykgbWljcm9hcmNoaXRlY3R1cmUgaGFkIHJlYWwgTUFYMTYxNywgQURNMTAyMSwgb3IgY29tcGF0aWJsZSBjaGlwcword2l0aGluIHRoZW0sIHdpdGggdHdvIHRlbXBlcmF0dXJlIHNlbnNvcnMuIE90aGVyIFhlb24gcHJvY2Vzc29ycyBvZiB0aGlzCitlcmEgKHdpdGggNDAwIE1IeiBGU0IpIGhhZCBjaGlwcyB3aXRoIG9ubHkgb25lIHRlbXBlcmF0dXJlIHNlbnNvci4KIAotSWYgeW91IGhhdmUgYSBYZW9uLCBhbmQgdGhlIGFkbTEwMjEgbW9kdWxlIGxvYWRzLCBhbmQgYm90aCB0ZW1wZXJhdHVyZXMKLWFwcGVhciB2YWxpZCwgdGhlbiB0aGluZ3MgYXJlIGdvb2QuCitJZiB5b3UgaGF2ZSBzdWNoIGFuIG9sZCBYZW9uLCBhbmQgeW91IGdldCB0d28gdmFsaWQgdGVtcGVyYXR1cmVzIHdoZW4KK2xvYWRpbmcgdGhlIGFkbTEwMjEgbW9kdWxlLCB0aGVuIHRoaW5ncyBhcmUgZ29vZC4KIAotSWYgdGhlIGFkbTEwMjEgbW9kdWxlIGRvZXNuJ3QgbG9hZCwgeW91IHNob3VsZCB0cnkgdGhpczoKLQltb2Rwcm9iZSBhZG0xMDIxIGZvcmNlX2FkbTEwMjE9QlVTLEFERFJFU1MKLQlBRERSRVNTIGNhbiBvbmx5IGJlIDB4MTgsIDB4MWEsIDB4MjksIDB4MmIsIDB4NGMsIG9yIDB4NGUuCitJZiBub3RoaW5nIGhhcHBlbnMgd2hlbiBsb2FkaW5nIHRoZSBhZG0xMDIxIG1vZHVsZSwgYW5kIHlvdSBhcmUgY2VydGFpbgordGhhdCB5b3VyIHNwZWNpZmljIFhlb24gcHJvY2Vzc29yIG1vZGVsIGluY2x1ZGVzIGNvbXBhdGlibGUgc2Vuc29ycywgeW91Cit3aWxsIGhhdmUgdG8gZXhwbGljaXRseSBpbnN0YW50aWF0ZSB0aGUgc2Vuc29yIGNoaXBzIGZyb20gdXNlci1zcGFjZS4gU2VlCittZXRob2QgNCBpbiBEb2N1bWVudGF0aW9uL2kyYy9pbnN0YW50aWF0aW5nLWRldmljZXMuIFBvc3NpYmxlIHNsYXZlCithZGRyZXNzZXMgYXJlIDB4MTgsIDB4MWEsIDB4MjksIDB4MmIsIDB4NGMsIG9yIDB4NGUuIEl0IGlzIGxpa2VseSB0aGF0Citvbmx5IHRlbXAyIHdpbGwgYmUgY29ycmVjdCBhbmQgdGVtcDEgd2lsbCBoYXZlIHRvIGJlIGlnbm9yZWQuCiAKLUlmIHlvdSBoYXZlIGR1YWwgWGVvbnMgeW91IG1heSBoYXZlIGFwcGVhciB0byBoYXZlIHR3byBzZXBhcmF0ZQotYWRtMTAyMS1jb21wYXRpYmxlIGNoaXBzLCBvciB0d28gc2luZ2xlLXRlbXBlcmF0dXJlIHNlbnNvcnMsIGF0IGRpc3RpbmN0Ci1hZGRyZXNzZXMuCitQcmV2aW91cyBnZW5lcmF0aW9ucyBvZiB0aGUgWGVvbiBwcm9jZXNzb3IgKGJhc2VkIG9uIFBlbnRpdW0gSUkvSUlJKQorZGlkbid0IGhhdmUgdGhlc2Ugc2Vuc29ycy4gTmV4dCBnZW5lcmF0aW9ucyBvZiBYZW9uIHByb2Nlc3NvcnMgKDUzMyBNSHoKK0ZTQiBhbmQgZmFzdGVyKSBsb3N0IHRoZW0sIHVudGlsIHRoZSBDb3JlLWJhc2VkIGdlbmVyYXRpb24gd2hpY2gKK2ludHJvZHVjZWQgaW50ZWdyYXRlZCBkaWdpdGFsIHRoZXJtYWwgc2Vuc29ycy4gVGhlc2UgYXJlIHN1cHBvcnRlZCBieQordGhlIGNvcmV0ZW1wIGRyaXZlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbG05MCBiL0RvY3VtZW50YXRpb24vaHdtb24vbG05MAppbmRleCBmYTQ3NWMwLi5mM2VmZDE4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTAKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTkwCkBAIC0zMiw2ICszMiwxNiBAQAogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0YyBhbmQgMHg0ZAogICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBPTiBTZW1pY29uZHVjdG9yIHdlYnNpdGUKICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cub25zZW1pLmNvbS9Qb3dlclNvbHV0aW9ucy9wcm9kdWN0LmRvP2lkPUFEVDc0NjEKKyAgKiBBbmFsb2cgRGV2aWNlcyBBRFQ3NDYxQQorICAgIFByZWZpeDogJ2FkdDc0NjFhJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0YyBhbmQgMHg0ZAorICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBPTiBTZW1pY29uZHVjdG9yIHdlYnNpdGUKKyAgICAgICAgICAgICAgIGh0dHA6Ly93d3cub25zZW1pLmNvbS9Qb3dlclNvbHV0aW9ucy9wcm9kdWN0LmRvP2lkPUFEVDc0NjFBCisgICogT04gU2VtaWNvbmR1Y3RvciBOQ1QxMDA4CisgICAgUHJlZml4OiAnbmN0MTAwOCcKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGMgYW5kIDB4NGQKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgT04gU2VtaWNvbmR1Y3RvciB3ZWJzaXRlCisgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm9uc2VtaS5jb20vUG93ZXJTb2x1dGlvbnMvcHJvZHVjdC5kbz9pZD1OQ1QxMDA4CiAgICogTWF4aW0gTUFYNjY0NgogICAgIFByZWZpeDogJ21heDY2NDYnCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRkCkBAIC0xNDksNyArMTU5LDcgQEAKICAgKiBBTEVSVCBpcyB0cmlnZ2VyZWQgYnkgb3BlbiByZW1vdGUgc2Vuc29yLgogICAqIFNNQnVzIFBFQyBzdXBwb3J0IGZvciBXcml0ZSBCeXRlIGFuZCBSZWNlaXZlIEJ5dGUgdHJhbnNhY3Rpb25zLgogCi1BRFQ3NDYxOgorQURUNzQ2MSwgQURUNzQ2MUEsIE5DVDEwMDg6CiAgICogRXh0ZW5kZWQgdGVtcGVyYXR1cmUgcmFuZ2UgKGJyZWFrcyBjb21wYXRpYmlsaXR5KQogICAqIExvd2VyIHJlc29sdXRpb24gZm9yIHJlbW90ZSB0ZW1wZXJhdHVyZQogCkBAIC0xOTUsOSArMjA1LDkgQEAKIE9ubHkgdGhlIGxvY2FsIGh5c3RlcmVzaXMgY2FuIGJlIHNldCBmcm9tIHVzZXItc3BhY2UsIGFuZCB0aGUgc2FtZSBkZWx0YQogYXBwbGllcyB0byB0aGUgcmVtb3RlIGh5c3RlcmVzaXMuCiAKLVRoZSBsbTkwIGRyaXZlciB3aWxsIG5vdCB1cGRhdGUgaXRzIHZhbHVlcyBtb3JlIGZyZXF1ZW50bHkgdGhhbiBldmVyeQotb3RoZXIgc2Vjb25kOyByZWFkaW5nIHRoZW0gbW9yZSBvZnRlbiB3aWxsIGRvIG5vIGhhcm0sIGJ1dCB3aWxsIHJldHVybgotJ29sZCcgdmFsdWVzLgorVGhlIGxtOTAgZHJpdmVyIHdpbGwgbm90IHVwZGF0ZSBpdHMgdmFsdWVzIG1vcmUgZnJlcXVlbnRseSB0aGFuIGNvbmZpZ3VyZWQgd2l0aAordGhlIHVwZGF0ZV9pbnRlcnZhbCBhdHRyaWJ1dGU7IHJlYWRpbmcgdGhlbSBtb3JlIG9mdGVuIHdpbGwgZG8gbm8gaGFybSwgYnV0IHdpbGwKK3JldHVybiAnb2xkJyB2YWx1ZXMuCiAKIFNNQnVzIEFsZXJ0IFN1cHBvcnQKIC0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIwNSwxMSArMjE1LDEyIEBACiBUaGlzIGRyaXZlciBoYXMgYmFzaWMgc3VwcG9ydCBmb3IgU01CdXMgYWxlcnQuIFdoZW4gYW4gYWxlcnQgaXMgcmVjZWl2ZWQsCiB0aGUgc3RhdHVzIHJlZ2lzdGVyIGlzIHJlYWQgYW5kIHRoZSBmYXVsdHkgdGVtcGVyYXR1cmUgY2hhbm5lbCBpcyBsb2dnZWQuCiAKLVRoZSBBbmFsb2cgRGV2aWNlcyBjaGlwcyAoQURNMTAzMiBhbmQgQURUNzQ2MSkgZG8gbm90IGltcGxlbWVudCB0aGUgU01CdXMKLWFsZXJ0IHByb3RvY29sIHByb3Blcmx5IHNvIGFkZGl0aW9uYWwgY2FyZSBpcyBuZWVkZWQ6IHRoZSBBTEVSVCBvdXRwdXQgaXMKLWRpc2FibGVkIHdoZW4gYW4gYWxlcnQgaXMgcmVjZWl2ZWQsIGFuZCBpcyByZS1lbmFibGVkIG9ubHkgd2hlbiB0aGUgYWxhcm0KLWlzIGdvbmUuIE90aGVyd2lzZSB0aGUgY2hpcCB3b3VsZCBibG9jayBhbGVydHMgZnJvbSBvdGhlciBjaGlwcyBpbiB0aGUgYnVzCi1hcyBsb25nIGFzIHRoZSBhbGFybSBpcyBhY3RpdmUuCitUaGUgQW5hbG9nIERldmljZXMgY2hpcHMgKEFETTEwMzIsIEFEVDc0NjEgYW5kIEFEVDc0NjFBKSBhbmQgT04KK1NlbWljb25kdWN0b3IgY2hpcHMgKE5DVDEwMDgpIGRvIG5vdCBpbXBsZW1lbnQgdGhlIFNNQnVzIGFsZXJ0IHByb3RvY29sCitwcm9wZXJseSBzbyBhZGRpdGlvbmFsIGNhcmUgaXMgbmVlZGVkOiB0aGUgQUxFUlQgb3V0cHV0IGlzIGRpc2FibGVkIHdoZW4KK2FuIGFsZXJ0IGlzIHJlY2VpdmVkLCBhbmQgaXMgcmUtZW5hYmxlZCBvbmx5IHdoZW4gdGhlIGFsYXJtIGlzIGdvbmUuCitPdGhlcndpc2UgdGhlIGNoaXAgd291bGQgYmxvY2sgYWxlcnRzIGZyb20gb3RoZXIgY2hpcHMgaW4gdGhlIGJ1cyBhcyBsb25nCithcyB0aGUgYWxhcm0gaXMgYWN0aXZlLgogCiBQRUMgU3VwcG9ydAogLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbWF4MTYwNjQgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL21heDE2MDY0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNzI4OTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL21heDE2MDY0CkBAIC0wLDAgKzEsNjIgQEAKK0tlcm5lbCBkcml2ZXIgbWF4MTYwNjQKKz09PT09PT09PT09PT09PT09PT09PT0KKworU3VwcG9ydGVkIGNoaXBzOgorICAqIE1heGltIE1BWDE2MDY0CisgICAgUHJlZml4OiAnbWF4MTYwNjQnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IC0KKyAgICBEYXRhc2hlZXQ6IGh0dHA6Ly9kYXRhc2hlZXRzLm1heGltLWljLmNvbS9lbi9kcy9NQVgxNjA2NC5wZGYKKworQXV0aG9yOiBHdWVudGVyIFJvZWNrIDxndWVudGVyLnJvZWNrQGVyaWNzc29uLmNvbT4KKworCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgc3VwcG9ydHMgaGFyZHdhcmUgbW9udG9yaW5nIGZvciBNYXhpbSBNQVgxNjA2NCBRdWFkIFBvd2VyLVN1cHBseQorQ29udHJvbGxlciB3aXRoIEFjdGl2ZS1Wb2x0YWdlIE91dHB1dCBDb250cm9sIGFuZCBQTUJ1cyBJbnRlcmZhY2UuCisKK1RoZSBkcml2ZXIgaXMgYSBjbGllbnQgZHJpdmVyIHRvIHRoZSBjb3JlIFBNQnVzIGRyaXZlci4KK1BsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9od21vbi9wbWJ1cyBmb3IgZGV0YWlscyBvbiBQTUJ1cyBjbGllbnQgZHJpdmVycy4KKworCitVc2FnZSBOb3RlcworLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgZG9lcyBub3QgYXV0by1kZXRlY3QgZGV2aWNlcy4gWW91IHdpbGwgaGF2ZSB0byBpbnN0YW50aWF0ZSB0aGUKK2RldmljZXMgZXhwbGljaXRseS4gUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2kyYy9pbnN0YW50aWF0aW5nLWRldmljZXMgZm9yCitkZXRhaWxzLgorCisKK1BsYXRmb3JtIGRhdGEgc3VwcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkcml2ZXIgc3VwcG9ydHMgc3RhbmRhcmQgUE1CdXMgZHJpdmVyIHBsYXRmb3JtIGRhdGEuCisKKworU3lzZnMgZW50cmllcworLS0tLS0tLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIHN1cHBvcnRlZC4gTGltaXRzIGFyZSByZWFkLXdyaXRlOyBhbGwgb3RoZXIKK2F0dHJpYnV0ZXMgYXJlIHJlYWQtb25seS4KKworaW5bMS00XV9sYWJlbAkJInZvdXRbMS00XSIKK2luWzEtNF1faW5wdXQJCU1lYXN1cmVkIHZvbHRhZ2UuIEZyb20gUkVBRF9WT1VUIHJlZ2lzdGVyLgoraW5bMS00XV9taW4JCU1pbnVtdW0gVm9sdGFnZS4gRnJvbSBWT1VUX1VWX1dBUk5fTElNSVQgcmVnaXN0ZXIuCitpblsxLTRdX21heAkJTWF4aW11bSB2b2x0YWdlLiBGcm9tIFZPVVRfT1ZfV0FSTl9MSU1JVCByZWdpc3Rlci4KK2luWzEtNF1fbGNyaXQJCUNyaXRpY2FsIG1pbnVtdW0gVm9sdGFnZS4gVk9VVF9VVl9GQVVMVF9MSU1JVCByZWdpc3Rlci4KK2luWzEtNF1fY3JpdAkJQ3JpdGljYWwgbWF4aW11bSB2b2x0YWdlLiBGcm9tIFZPVVRfT1ZfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCitpblsxLTRdX21pbl9hbGFybQlWb2x0YWdlIGxvdyBhbGFybS4gRnJvbSBWT0xUQUdFX1VWX1dBUk5JTkcgc3RhdHVzLgoraW5bMS00XV9tYXhfYWxhcm0JVm9sdGFnZSBoaWdoIGFsYXJtLiBGcm9tIFZPTFRBR0VfT1ZfV0FSTklORyBzdGF0dXMuCitpblsxLTRdX2xjcml0X2FsYXJtCVZvbHRhZ2UgY3JpdGljYWwgbG93IGFsYXJtLiBGcm9tIFZPTFRBR0VfVVZfRkFVTFQgc3RhdHVzLgoraW5bMS00XV9jcml0X2FsYXJtCVZvbHRhZ2UgY3JpdGljYWwgaGlnaCBhbGFybS4gRnJvbSBWT0xUQUdFX09WX0ZBVUxUIHN0YXR1cy4KKwordGVtcDFfaW5wdXQJCU1lYXN1cmVkIHRlbXBlcmF0dXJlLiBGcm9tIFJFQURfVEVNUEVSQVRVUkVfMSByZWdpc3Rlci4KK3RlbXAxX21heAkJTWF4aW11bSB0ZW1wZXJhdHVyZS4gRnJvbSBPVF9XQVJOX0xJTUlUIHJlZ2lzdGVyLgordGVtcDFfY3JpdAkJQ3JpdGljYWwgaGlnaCB0ZW1wZXJhdHVyZS4gRnJvbSBPVF9GQVVMVF9MSU1JVCByZWdpc3Rlci4KK3RlbXAxX21heF9hbGFybQkJQ2hpcCB0ZW1wZXJhdHVyZSBoaWdoIGFsYXJtLiBTZXQgYnkgY29tcGFyaW5nCisJCQlSRUFEX1RFTVBFUkFUVVJFXzEgd2l0aCBPVF9XQVJOX0xJTUlUIGlmIFRFTVBfT1RfV0FSTklORworCQkJc3RhdHVzIGlzIHNldC4KK3RlbXAxX2NyaXRfYWxhcm0JQ2hpcCB0ZW1wZXJhdHVyZSBjcml0aWNhbCBoaWdoIGFsYXJtLiBTZXQgYnkgY29tcGFyaW5nCisJCQlSRUFEX1RFTVBFUkFUVVJFXzEgd2l0aCBPVF9GQVVMVF9MSU1JVCBpZiBURU1QX09UX0ZBVUxUCisJCQlzdGF0dXMgaXMgc2V0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9tYXgzNDQ0MCBiL0RvY3VtZW50YXRpb24vaHdtb24vbWF4MzQ0NDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM1MjVkZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vbWF4MzQ0NDAKQEAgLTAsMCArMSw3OSBAQAorS2VybmVsIGRyaXZlciBtYXgzNDQ0MAorPT09PT09PT09PT09PT09PT09PT09PQorCitTdXBwb3J0ZWQgY2hpcHM6CisgICogTWF4aW0gTUFYMzQ0NDAKKyAgICBQcmVmaXhlczogJ21heDM0NDQwJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiAtCisgICAgRGF0YXNoZWV0OiBodHRwOi8vZGF0YXNoZWV0cy5tYXhpbS1pYy5jb20vZW4vZHMvTUFYMzQ0NDAucGRmCisgICogTWF4aW0gTUFYMzQ0NDEKKyAgICBQTUJ1cyA1LUNoYW5uZWwgUG93ZXItU3VwcGx5IE1hbmFnZXIgYW5kIEludGVsbGlnZW50IEZhbiBDb250cm9sbGVyCisgICAgUHJlZml4ZXM6ICdtYXgzNDQ0MScKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogLQorICAgIERhdGFzaGVldDogaHR0cDovL2RhdGFzaGVldHMubWF4aW0taWMuY29tL2VuL2RzL01BWDM0NDQxLnBkZgorCitBdXRob3I6IEd1ZW50ZXIgUm9lY2sgPGd1ZW50ZXIucm9lY2tAZXJpY3Nzb24uY29tPgorCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBzdXBwb3J0cyBoYXJkd2FyZSBtb250b3JpbmcgZm9yIE1heGltIE1BWDM0NDQwIFBNQnVzIDYtQ2hhbm5lbAorUG93ZXItU3VwcGx5IE1hbmFnZXIgYW5kIE1BWDM0NDQxIFBNQnVzIDUtQ2hhbm5lbCBQb3dlci1TdXBwbHkgTWFuYWdlcgorYW5kIEludGVsbGlnZW50IEZhbiBDb250cm9sbGVyLgorCitUaGUgZHJpdmVyIGlzIGEgY2xpZW50IGRyaXZlciB0byB0aGUgY29yZSBQTUJ1cyBkcml2ZXIuIFBsZWFzZSBzZWUKK0RvY3VtZW50YXRpb24vaHdtb24vcG1idXMgZm9yIGRldGFpbHMgb24gUE1CdXMgY2xpZW50IGRyaXZlcnMuCisKKworVXNhZ2UgTm90ZXMKKy0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGRvZXMgbm90IGF1dG8tZGV0ZWN0IGRldmljZXMuIFlvdSB3aWxsIGhhdmUgdG8gaW5zdGFudGlhdGUgdGhlCitkZXZpY2VzIGV4cGxpY2l0bHkuIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pMmMvaW5zdGFudGlhdGluZy1kZXZpY2VzIGZvcgorZGV0YWlscy4KKworCitQbGF0Zm9ybSBkYXRhIHN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZHJpdmVyIHN1cHBvcnRzIHN0YW5kYXJkIFBNQnVzIGRyaXZlciBwbGF0Zm9ybSBkYXRhLgorCisKK1N5c2ZzIGVudHJpZXMKKy0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSBzdXBwb3J0ZWQuIExpbWl0cyBhcmUgcmVhZC13cml0ZTsgYWxsIG90aGVyCithdHRyaWJ1dGVzIGFyZSByZWFkLW9ubHkuCisKK2luWzEtNl1fbGFiZWwJCSJ2b3V0WzEtNl0iLgoraW5bMS02XV9pbnB1dAkJTWVhc3VyZWQgdm9sdGFnZS4gRnJvbSBSRUFEX1ZPVVQgcmVnaXN0ZXIuCitpblsxLTZdX21pbgkJTWludW11bSBWb2x0YWdlLiBGcm9tIFZPVVRfVVZfV0FSTl9MSU1JVCByZWdpc3Rlci4KK2luWzEtNl1fbWF4CQlNYXhpbXVtIHZvbHRhZ2UuIEZyb20gVk9VVF9PVl9XQVJOX0xJTUlUIHJlZ2lzdGVyLgoraW5bMS02XV9sY3JpdAkJQ3JpdGljYWwgbWludW11bSBWb2x0YWdlLiBWT1VUX1VWX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgoraW5bMS02XV9jcml0CQlDcml0aWNhbCBtYXhpbXVtIHZvbHRhZ2UuIEZyb20gVk9VVF9PVl9GQVVMVF9MSU1JVCByZWdpc3Rlci4KK2luWzEtNl1fbWluX2FsYXJtCVZvbHRhZ2UgbG93IGFsYXJtLiBGcm9tIFZPTFRBR0VfVVZfV0FSTklORyBzdGF0dXMuCitpblsxLTZdX21heF9hbGFybQlWb2x0YWdlIGhpZ2ggYWxhcm0uIEZyb20gVk9MVEFHRV9PVl9XQVJOSU5HIHN0YXR1cy4KK2luWzEtNl1fbGNyaXRfYWxhcm0JVm9sdGFnZSBjcml0aWNhbCBsb3cgYWxhcm0uIEZyb20gVk9MVEFHRV9VVl9GQVVMVCBzdGF0dXMuCitpblsxLTZdX2NyaXRfYWxhcm0JVm9sdGFnZSBjcml0aWNhbCBoaWdoIGFsYXJtLiBGcm9tIFZPTFRBR0VfT1ZfRkFVTFQgc3RhdHVzLgorCitjdXJyWzEtNl1fbGFiZWwJCSJpb3V0WzEtNl0iLgorY3VyclsxLTZdX2lucHV0CQlNZWFzdXJlZCBjdXJyZW50LiBGcm9tIFJFQURfSU9VVCByZWdpc3Rlci4KK2N1cnJbMS02XV9tYXgJCU1heGltdW0gY3VycmVudC4gRnJvbSBJT1VUX09DX1dBUk5fTElNSVQgcmVnaXN0ZXIuCitjdXJyWzEtNl1fY3JpdAkJQ3JpdGljYWwgbWF4aW11bSBjdXJyZW50LiBGcm9tIElPVVRfT0NfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCitjdXJyWzEtNl1fbWF4X2FsYXJtCUN1cnJlbnQgaGlnaCBhbGFybS4gRnJvbSBJT1VUX09DX1dBUk5JTkcgc3RhdHVzLgorY3VyclsxLTZdX2NyaXRfYWxhcm0JQ3VycmVudCBjcml0aWNhbCBoaWdoIGFsYXJtLiBGcm9tIElPVVRfT0NfRkFVTFQgc3RhdHVzLgorCisJCQlpbjYgYW5kIGN1cnI2IGF0dHJpYnV0ZXMgb25seSBleGlzdCBmb3IgTUFYMzQ0NDAuCisKK3RlbXBbMS04XV9pbnB1dAkJTWVhc3VyZWQgdGVtcGVyYXR1cmVzLiBGcm9tIFJFQURfVEVNUEVSQVRVUkVfMSByZWdpc3Rlci4KKwkJCXRlbXAxIGlzIHRoZSBjaGlwJ3MgaW50ZXJuYWwgdGVtcGVyYXR1cmUuIHRlbXAyLi50ZW1wNQorCQkJYXJlIHJlbW90ZSBJMkMgdGVtcGVyYXR1cmUgc2Vuc29ycy4gRm9yIE1BWDM0NDQxLCB0ZW1wNgorCQkJaXMgYSByZW1vdGUgdGhlcm1hbC1kaW9kZSBzZW5zb3IuIEZvciBNQVgzNDQ0MCwgdGVtcDYuLjgKKwkJCWFyZSByZW1vdGUgSTJDIHRlbXBlcmF0dXJlIHNlbnNvcnMuCit0ZW1wWzEtOF1fbWF4CQlNYXhpbXVtIHRlbXBlcmF0dXJlLiBGcm9tIE9UX1dBUk5fTElNSVQgcmVnaXN0ZXIuCit0ZW1wWzEtOF1fY3JpdAkJQ3JpdGljYWwgaGlnaCB0ZW1wZXJhdHVyZS4gRnJvbSBPVF9GQVVMVF9MSU1JVCByZWdpc3Rlci4KK3RlbXBbMS04XV9tYXhfYWxhcm0JVGVtcGVyYXR1cmUgaGlnaCBhbGFybS4KK3RlbXBbMS04XV9jcml0X2FsYXJtCVRlbXBlcmF0dXJlIGNyaXRpY2FsIGhpZ2ggYWxhcm0uCisKKwkJCXRlbXA3IGFuZCB0ZW1wOCBhdHRyaWJ1dGVzIG9ubHkgZXhpc3QgZm9yIE1BWDM0NDQwLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9tYXg4Njg4IGIvRG9jdW1lbnRhdGlvbi9od21vbi9tYXg4Njg4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZGQzYTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL21heDg2ODgKQEAgLTAsMCArMSw2OSBAQAorS2VybmVsIGRyaXZlciBtYXg4Njg4Cis9PT09PT09PT09PT09PT09PT09PT0KKworU3VwcG9ydGVkIGNoaXBzOgorICAqIE1heGltIE1BWDg2ODgKKyAgICBQcmVmaXg6ICdtYXg4Njg4JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiAtCisgICAgRGF0YXNoZWV0OiBodHRwOi8vZGF0YXNoZWV0cy5tYXhpbS1pYy5jb20vZW4vZHMvTUFYODY4OC5wZGYKKworQXV0aG9yOiBHdWVudGVyIFJvZWNrIDxndWVudGVyLnJvZWNrQGVyaWNzc29uLmNvbT4KKworCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgc3VwcG9ydHMgaGFyZHdhcmUgbW9udG9yaW5nIGZvciBNYXhpbSBNQVg4Njg4IERpZ2l0YWwgUG93ZXItU3VwcGx5CitDb250cm9sbGVyL01vbml0b3Igd2l0aCBQTUJ1cyBJbnRlcmZhY2UuCisKK1RoZSBkcml2ZXIgaXMgYSBjbGllbnQgZHJpdmVyIHRvIHRoZSBjb3JlIFBNQnVzIGRyaXZlci4gUGxlYXNlIHNlZQorRG9jdW1lbnRhdGlvbi9od21vbi9wbWJ1cyBmb3IgZGV0YWlscyBvbiBQTUJ1cyBjbGllbnQgZHJpdmVycy4KKworCitVc2FnZSBOb3RlcworLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgZG9lcyBub3QgYXV0by1kZXRlY3QgZGV2aWNlcy4gWW91IHdpbGwgaGF2ZSB0byBpbnN0YW50aWF0ZSB0aGUKK2RldmljZXMgZXhwbGljaXRseS4gUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2kyYy9pbnN0YW50aWF0aW5nLWRldmljZXMgZm9yCitkZXRhaWxzLgorCisKK1BsYXRmb3JtIGRhdGEgc3VwcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkcml2ZXIgc3VwcG9ydHMgc3RhbmRhcmQgUE1CdXMgZHJpdmVyIHBsYXRmb3JtIGRhdGEuCisKKworU3lzZnMgZW50cmllcworLS0tLS0tLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIHN1cHBvcnRlZC4gTGltaXRzIGFyZSByZWFkLXdyaXRlOyBhbGwgb3RoZXIKK2F0dHJpYnV0ZXMgYXJlIHJlYWQtb25seS4KKworaW4xX2xhYmVsCQkidm91dDEiCitpbjFfaW5wdXQJCU1lYXN1cmVkIHZvbHRhZ2UuIEZyb20gUkVBRF9WT1VUIHJlZ2lzdGVyLgoraW4xX21pbgkJCU1pbnVtdW0gVm9sdGFnZS4gRnJvbSBWT1VUX1VWX1dBUk5fTElNSVQgcmVnaXN0ZXIuCitpbjFfbWF4CQkJTWF4aW11bSB2b2x0YWdlLiBGcm9tIFZPVVRfT1ZfV0FSTl9MSU1JVCByZWdpc3Rlci4KK2luMV9sY3JpdAkJQ3JpdGljYWwgbWludW11bSBWb2x0YWdlLiBWT1VUX1VWX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgoraW4xX2NyaXQJCUNyaXRpY2FsIG1heGltdW0gdm9sdGFnZS4gRnJvbSBWT1VUX09WX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgoraW4xX21pbl9hbGFybQkJVm9sdGFnZSBsb3cgYWxhcm0uIEZyb20gVk9MVEFHRV9VVl9XQVJOSU5HIHN0YXR1cy4KK2luMV9tYXhfYWxhcm0JCVZvbHRhZ2UgaGlnaCBhbGFybS4gRnJvbSBWT0xUQUdFX09WX1dBUk5JTkcgc3RhdHVzLgoraW4xX2xjcml0X2FsYXJtCQlWb2x0YWdlIGNyaXRpY2FsIGxvdyBhbGFybS4gRnJvbSBWT0xUQUdFX1VWX0ZBVUxUIHN0YXR1cy4KK2luMV9jcml0X2FsYXJtCQlWb2x0YWdlIGNyaXRpY2FsIGhpZ2ggYWxhcm0uIEZyb20gVk9MVEFHRV9PVl9GQVVMVCBzdGF0dXMuCisKK2N1cnIxX2xhYmVsCQkiaW91dDEiCitjdXJyMV9pbnB1dAkJTWVhc3VyZWQgY3VycmVudC4gRnJvbSBSRUFEX0lPVVQgcmVnaXN0ZXIuCitjdXJyMV9tYXgJCU1heGltdW0gY3VycmVudC4gRnJvbSBJT1VUX09DX1dBUk5fTElNSVQgcmVnaXN0ZXIuCitjdXJyMV9jcml0CQlDcml0aWNhbCBtYXhpbXVtIGN1cnJlbnQuIEZyb20gSU9VVF9PQ19GQVVMVF9MSU1JVCByZWdpc3Rlci4KK2N1cnIxX21heF9hbGFybQkJQ3VycmVudCBoaWdoIGFsYXJtLiBGcm9tIElPVVRfT0NfV0FSTl9MSU1JVCByZWdpc3Rlci4KK2N1cnIxX2NyaXRfYWxhcm0JQ3VycmVudCBjcml0aWNhbCBoaWdoIGFsYXJtLiBGcm9tIElPVVRfT0NfRkFVTFQgc3RhdHVzLgorCit0ZW1wMV9pbnB1dAkJTWVhc3VyZWQgdGVtcGVyYXR1cmUuIEZyb20gUkVBRF9URU1QRVJBVFVSRV8xIHJlZ2lzdGVyLgordGVtcDFfbWF4CQlNYXhpbXVtIHRlbXBlcmF0dXJlLiBGcm9tIE9UX1dBUk5fTElNSVQgcmVnaXN0ZXIuCit0ZW1wMV9jcml0CQlDcml0aWNhbCBoaWdoIHRlbXBlcmF0dXJlLiBGcm9tIE9UX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgordGVtcDFfbWF4X2FsYXJtCQlDaGlwIHRlbXBlcmF0dXJlIGhpZ2ggYWxhcm0uIFNldCBieSBjb21wYXJpbmcKKwkJCVJFQURfVEVNUEVSQVRVUkVfMSB3aXRoIE9UX1dBUk5fTElNSVQgaWYgVEVNUF9PVF9XQVJOSU5HCisJCQlzdGF0dXMgaXMgc2V0LgordGVtcDFfY3JpdF9hbGFybQlDaGlwIHRlbXBlcmF0dXJlIGNyaXRpY2FsIGhpZ2ggYWxhcm0uIFNldCBieSBjb21wYXJpbmcKKwkJCVJFQURfVEVNUEVSQVRVUkVfMSB3aXRoIE9UX0ZBVUxUX0xJTUlUIGlmIFRFTVBfT1RfRkFVTFQKKwkJCXN0YXR1cyBpcyBzZXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3BtYnVzIGIvRG9jdW1lbnRhdGlvbi9od21vbi9wbWJ1cwppbmRleCBmMmQ0MmU4Li41ZTQ2MmZjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3BtYnVzCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vcG1idXMKQEAgLTEzLDI2ICsxMyw2IEBACiAgICAgUHJlZml4OiAnbHRjMjk3OCcKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogLQogICAgIERhdGFzaGVldDogaHR0cDovL2Nkcy5saW5lYXIuY29tL2RvY3MvRGF0YXNoZWV0LzI5NzhmYS5wZGYKLSAgKiBNYXhpbSBNQVgxNjA2NAotICAgIFF1YWQgUG93ZXItU3VwcGx5IENvbnRyb2xsZXIKLSAgICBQcmVmaXg6ICdtYXgxNjA2NCcKLSAgICBBZGRyZXNzZXMgc2Nhbm5lZDogLQotICAgIERhdGFzaGVldDogaHR0cDovL2RhdGFzaGVldHMubWF4aW0taWMuY29tL2VuL2RzL01BWDE2MDY0LnBkZgotICAqIE1heGltIE1BWDM0NDQwCi0gICAgUE1CdXMgNi1DaGFubmVsIFBvd2VyLVN1cHBseSBNYW5hZ2VyCi0gICAgUHJlZml4ZXM6ICdtYXgzNDQ0MCcKLSAgICBBZGRyZXNzZXMgc2Nhbm5lZDogLQotICAgIERhdGFzaGVldDogaHR0cDovL2RhdGFzaGVldHMubWF4aW0taWMuY29tL2VuL2RzL01BWDM0NDQwLnBkZgotICAqIE1heGltIE1BWDM0NDQxCi0gICAgUE1CdXMgNS1DaGFubmVsIFBvd2VyLVN1cHBseSBNYW5hZ2VyIGFuZCBJbnRlbGxpZ2VudCBGYW4gQ29udHJvbGxlcgotICAgIFByZWZpeGVzOiAnbWF4MzQ0NDEnCi0gICAgQWRkcmVzc2VzIHNjYW5uZWQ6IC0KLSAgICBEYXRhc2hlZXQ6IGh0dHA6Ly9kYXRhc2hlZXRzLm1heGltLWljLmNvbS9lbi9kcy9NQVgzNDQ0MS5wZGYKLSAgKiBNYXhpbSBNQVg4Njg4Ci0gICAgRGlnaXRhbCBQb3dlci1TdXBwbHkgQ29udHJvbGxlci9Nb25pdG9yCi0gICAgUHJlZml4OiAnbWF4ODY4OCcKLSAgICBBZGRyZXNzZXMgc2Nhbm5lZDogLQotICAgIERhdGFzaGVldDogaHR0cDovL2RhdGFzaGVldHMubWF4aW0taWMuY29tL2VuL2RzL01BWDg2ODgucGRmCiAgICogR2VuZXJpYyBQTUJ1cyBkZXZpY2VzCiAgICAgUHJlZml4OiAncG1idXMnCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IC0KQEAgLTE1MCwxMSArMTMwLDExIEBACiBhdHRyaWJ1dGVzIGFyZSByZWFkLW9ubHkuCiAKIGluWF9pbnB1dAkJTWVhc3VyZWQgdm9sdGFnZS4gRnJvbSBSRUFEX1ZJTiBvciBSRUFEX1ZPVVQgcmVnaXN0ZXIuCi1pblhfbWluCQkJTWludW11bSBWb2x0YWdlLgoraW5YX21pbgkJCU1pbmltdW0gVm9sdGFnZS4KIAkJCUZyb20gVklOX1VWX1dBUk5fTElNSVQgb3IgVk9VVF9VVl9XQVJOX0xJTUlUIHJlZ2lzdGVyLgogaW5YX21heAkJCU1heGltdW0gdm9sdGFnZS4KIAkJCUZyb20gVklOX09WX1dBUk5fTElNSVQgb3IgVk9VVF9PVl9XQVJOX0xJTUlUIHJlZ2lzdGVyLgotaW5YX2xjcml0CQlDcml0aWNhbCBtaW51bXVtIFZvbHRhZ2UuCitpblhfbGNyaXQJCUNyaXRpY2FsIG1pbmltdW0gVm9sdGFnZS4KIAkJCUZyb20gVklOX1VWX0ZBVUxUX0xJTUlUIG9yIFZPVVRfVVZfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCiBpblhfY3JpdAkJQ3JpdGljYWwgbWF4aW11bSB2b2x0YWdlLgogCQkJRnJvbSBWSU5fT1ZfRkFVTFRfTElNSVQgb3IgVk9VVF9PVl9GQVVMVF9MSU1JVCByZWdpc3Rlci4KQEAgLTE2OSwxNyArMTQ5LDE5IEBACiBjdXJyWF9pbnB1dAkJTWVhc3VyZWQgY3VycmVudC4gRnJvbSBSRUFEX0lJTiBvciBSRUFEX0lPVVQgcmVnaXN0ZXIuCiBjdXJyWF9tYXgJCU1heGltdW0gY3VycmVudC4KIAkJCUZyb20gSUlOX09DX1dBUk5fTElNSVQgb3IgSU9VVF9PQ19XQVJOX0xJTUlUIHJlZ2lzdGVyLgotY3VyclhfbGNyaXQJCUNyaXRpY2FsIG1pbnVtdW0gb3V0cHV0IGN1cnJlbnQuCitjdXJyWF9sY3JpdAkJQ3JpdGljYWwgbWluaW11bSBvdXRwdXQgY3VycmVudC4KIAkJCUZyb20gSU9VVF9VQ19GQVVMVF9MSU1JVCByZWdpc3Rlci4KIGN1cnJYX2NyaXQJCUNyaXRpY2FsIG1heGltdW0gY3VycmVudC4KIAkJCUZyb20gSUlOX09DX0ZBVUxUX0xJTUlUIG9yIElPVVRfT0NfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCiBjdXJyWF9hbGFybQkJQ3VycmVudCBoaWdoIGFsYXJtLgogCQkJRnJvbSBJSU5fT0NfV0FSTklORyBvciBJT1VUX09DX1dBUk5JTkcgc3RhdHVzLgorY3VyclhfbWF4X2FsYXJtCQlDdXJyZW50IGhpZ2ggYWxhcm0uCisJCQlGcm9tIElJTl9PQ19XQVJOX0xJTUlUIG9yIElPVVRfT0NfV0FSTl9MSU1JVCBzdGF0dXMuCiBjdXJyWF9sY3JpdF9hbGFybQlPdXRwdXQgY3VycmVudCBjcml0aWNhbCBsb3cgYWxhcm0uCiAJCQlGcm9tIElPVVRfVUNfRkFVTFQgc3RhdHVzLgogY3VyclhfY3JpdF9hbGFybQlDdXJyZW50IGNyaXRpY2FsIGhpZ2ggYWxhcm0uCiAJCQlGcm9tIElJTl9PQ19GQVVMVCBvciBJT1VUX09DX0ZBVUxUIHN0YXR1cy4KLWN1cnJYX2xhYmVsCQkiaWluIiBvciAidmluWSIKK2N1cnJYX2xhYmVsCQkiaWluIiBvciAiaW91dFkiCiAKIHBvd2VyWF9pbnB1dAkJTWVhc3VyZWQgcG93ZXIuIEZyb20gUkVBRF9QSU4gb3IgUkVBRF9QT1VUIHJlZ2lzdGVyLgogcG93ZXJYX2NhcAkJT3V0cHV0IHBvd2VyIGNhcC4gRnJvbSBQT1VUX01BWCByZWdpc3Rlci4KQEAgLTE5MywxMyArMTc1LDEzIEBACiAJCQlGcm9tIFBPVVRfT1BfRkFVTFQgc3RhdHVzLgogcG93ZXJYX2xhYmVsCQkicGluIiBvciAicG91dFkiCiAKLXRlbXBYX2lucHV0CQlNZWFzdXJlZCB0ZW1wZXJlcmF0dXJlLgordGVtcFhfaW5wdXQJCU1lYXN1cmVkIHRlbXBlcmF0dXJlLgogCQkJRnJvbSBSRUFEX1RFTVBFUkFUVVJFX1ggcmVnaXN0ZXIuCi10ZW1wWF9taW4JCU1pbWltdW0gdGVtcGVyZXJhdHVyZS4gRnJvbSBVVF9XQVJOX0xJTUlUIHJlZ2lzdGVyLgotdGVtcFhfbWF4CQlNYXhpbXVtIHRlbXBlcmVyYXR1cmUuIEZyb20gT1RfV0FSTl9MSU1JVCByZWdpc3Rlci4KLXRlbXBYX2xjcml0CQlDcml0aWNhbCBsb3cgdGVtcGVyZXJhdHVyZS4KK3RlbXBYX21pbgkJTWltaW11bSB0ZW1wZXJhdHVyZS4gRnJvbSBVVF9XQVJOX0xJTUlUIHJlZ2lzdGVyLgordGVtcFhfbWF4CQlNYXhpbXVtIHRlbXBlcmF0dXJlLiBGcm9tIE9UX1dBUk5fTElNSVQgcmVnaXN0ZXIuCit0ZW1wWF9sY3JpdAkJQ3JpdGljYWwgbG93IHRlbXBlcmF0dXJlLgogCQkJRnJvbSBVVF9GQVVMVF9MSU1JVCByZWdpc3Rlci4KLXRlbXBYX2NyaXQJCUNyaXRpY2FsIGhpZ2ggdGVtcGVyZXJhdHVyZS4KK3RlbXBYX2NyaXQJCUNyaXRpY2FsIGhpZ2ggdGVtcGVyYXR1cmUuCiAJCQlGcm9tIE9UX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgogdGVtcFhfbWluX2FsYXJtCQlDaGlwIHRlbXBlcmF0dXJlIGxvdyBhbGFybS4gU2V0IGJ5IGNvbXBhcmluZwogCQkJUkVBRF9URU1QRVJBVFVSRV9YIHdpdGggVVRfV0FSTl9MSU1JVCBpZgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9zbW02NjUgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3NtbTY2NQppbmRleCAzODIwZmM5Li41OWUzMTYxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3NtbTY2NQorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3NtbTY2NQpAQCAtMTUwLDggKzE1MCw4IEBACiBpbjlfY3JpdF9hbGFybQkJQUlOMSBjcml0aWNhbCBhbGFybQogaW4xMF9jcml0X2FsYXJtCQlBSU4yIGNyaXRpY2FsIGFsYXJtCiAKLXRlbXAxX2lucHV0CQlDaGlwIHRlbXBlcmVyYXR1cmUKLXRlbXAxX21pbgkJTWltaW11bSBjaGlwIHRlbXBlcmVyYXR1cmUKLXRlbXAxX21heAkJTWF4aW11bSBjaGlwIHRlbXBlcmVyYXR1cmUKLXRlbXAxX2NyaXQJCUNyaXRpY2FsIGNoaXAgdGVtcGVyZXJhdHVyZQordGVtcDFfaW5wdXQJCUNoaXAgdGVtcGVyYXR1cmUKK3RlbXAxX21pbgkJTWltaW11bSBjaGlwIHRlbXBlcmF0dXJlCit0ZW1wMV9tYXgJCU1heGltdW0gY2hpcCB0ZW1wZXJhdHVyZQordGVtcDFfY3JpdAkJQ3JpdGljYWwgY2hpcCB0ZW1wZXJhdHVyZQogdGVtcDFfY3JpdF9hbGFybQlUZW1wZXJhdHVyZSBjcml0aWNhbCBhbGFybQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9zdWJtaXR0aW5nLXBhdGNoZXMgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3N1Ym1pdHRpbmctcGF0Y2hlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmY0MmU4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9zdWJtaXR0aW5nLXBhdGNoZXMKQEAgLTAsMCArMSwxMDkgQEAKKwlIb3cgdG8gR2V0IFlvdXIgUGF0Y2ggQWNjZXB0ZWQgSW50byB0aGUgSHdtb24gU3Vic3lzdGVtCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHRleHQgaXMgaXMgYSBjb2xsZWN0aW9uIG9mIHN1Z2dlc3Rpb25zIGZvciBwZW9wbGUgd3JpdGluZyBwYXRjaGVzIG9yCitkcml2ZXJzIGZvciB0aGUgaHdtb24gc3Vic3lzdGVtLiBGb2xsb3dpbmcgdGhlc2Ugc3VnZ2VzdGlvbnMgd2lsbCBncmVhdGx5CitpbmNyZWFzZSB0aGUgY2hhbmNlcyBvZiB5b3VyIGNoYW5nZSBiZWluZyBhY2NlcHRlZC4KKworCisxLiBHZW5lcmFsCistLS0tLS0tLS0tCisKKyogSXQgc2hvdWxkIGJlIHVubmVjZXNzYXJ5IHRvIG1lbnRpb24sIGJ1dCBwbGVhc2UgcmVhZCBhbmQgZm9sbG93CisgICAgRG9jdW1lbnRhdGlvbi9TdWJtaXRDaGVja2xpc3QKKyAgICBEb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdEcml2ZXJzCisgICAgRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcworICAgIERvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUKKworKiBJZiB5b3VyIHBhdGNoIGdlbmVyYXRlcyBjaGVja3BhdGNoIHdhcm5pbmdzLCBwbGVhc2UgcmVmcmFpbiBmcm9tIGV4cGxhbmF0aW9ucworICBzdWNoIGFzICJJIGRvbid0IGxpa2UgdGhhdCBjb2Rpbmcgc3R5bGUiLiBLZWVwIGluIG1pbmQgdGhhdCBlYWNoIHVubmVjZXNzYXJ5CisgIHdhcm5pbmcgaGVscHMgaGlkaW5nIGEgcmVhbCBwcm9ibGVtLiBJZiB5b3UgZG9uJ3QgbGlrZSB0aGUga2VybmVsIGNvZGluZworICBzdHlsZSwgZG9uJ3Qgd3JpdGUga2VybmVsIGRyaXZlcnMuCisKKyogUGxlYXNlIHRlc3QgeW91ciBwYXRjaCB0aG9yb3VnaGx5LiBXZSBhcmUgbm90IHlvdXIgdGVzdCBncm91cC4KKyAgU29tZXRpbWVzIGEgcGF0Y2ggY2FuIG5vdCBvciBub3QgY29tcGxldGVseSBiZSB0ZXN0ZWQgYmVjYXVzZSBvZiBtaXNzaW5nCisgIGhhcmR3YXJlLiBJbiBzdWNoIGNhc2VzLCB5b3Ugc2hvdWxkIHRlc3QtYnVpbGQgdGhlIGNvZGUgb24gYXQgbGVhc3Qgb25lCisgIGFyY2hpdGVjdHVyZS4gSWYgcnVuLXRpbWUgdGVzdGluZyB3YXMgbm90IGFjaGlldmVkLCBpdCBzaG91bGQgYmUgd3JpdHRlbgorICBleHBsaWNpdGx5IGJlbG93IHRoZSBwYXRjaCBoZWFkZXIuCisKKyogSWYgeW91ciBwYXRjaCAob3IgdGhlIGRyaXZlcikgaXMgYWZmZWN0ZWQgYnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHN1Y2ggYXMKKyAgQ09ORklHX1NNUCBvciBDT05GSUdfSE9UUExVRywgbWFrZSBzdXJlIGl0IGNvbXBpbGVzIGZvciBhbGwgY29uZmlndXJhdGlvbgorICB2YXJpYW50cy4KKworCisyLiBBZGRpbmcgZnVuY3Rpb25hbGl0eSB0byBleGlzdGluZyBkcml2ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogTWFrZSBzdXJlIHRoZSBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vaHdtb24vPGRyaXZlcl9uYW1lPiBpcyB1cCB0bworICBkYXRlLgorCisqIE1ha2Ugc3VyZSB0aGUgaW5mb3JtYXRpb24gaW4gS2NvbmZpZyBpcyB1cCB0byBkYXRlLgorCisqIElmIHRoZSBhZGRlZCBmdW5jdGlvbmFsaXR5IHJlcXVpcmVzIHNvbWUgY2xlYW51cCBvciBzdHJ1Y3R1cmFsIGNoYW5nZXMsIHNwbGl0CisgIHlvdXIgcGF0Y2ggaW50byBhIGNsZWFudXAgcGFydCBhbmQgdGhlIGFjdHVhbCBhZGRpdGlvbi4gVGhpcyBtYWtlcyBpdCBlYXNpZXIKKyAgdG8gcmV2aWV3IHlvdXIgY2hhbmdlcywgYW5kIHRvIGJpc2VjdCBhbnkgcmVzdWx0aW5nIHByb2JsZW1zLgorCisqIE5ldmVyIG1peCBidWcgZml4ZXMsIGNsZWFudXAsIGFuZCBmdW5jdGlvbmFsIGVuaGFuY2VtZW50cyBpbiBhIHNpbmdsZSBwYXRjaC4KKworCiszLiBOZXcgZHJpdmVycworLS0tLS0tLS0tLS0tLS0KKworKiBSdW5uaW5nIHlvdXIgcGF0Y2ggb3IgZHJpdmVyIGZpbGUocykgdGhyb3VnaCBjaGVja3BhdGNoIGRvZXMgbm90IG1lYW4gaXRzCisgIGZvcm1hdHRpbmcgaXMgY2xlYW4uIElmIHVuc3VyZSBhYm91dCBmb3JtYXR0aW5nIGluIHlvdXIgbmV3IGRyaXZlciwgcnVuIGl0CisgIHRocm91Z2ggTGluZGVudC4gTGluZGVudCBpcyBub3QgcGVyZmVjdCwgYW5kIHlvdSBtYXkgaGF2ZSB0byBkbyBzb21lIG1pbm9yCisgIGNsZWFudXAsIGJ1dCBpdCBpcyBhIGdvb2Qgc3RhcnQuCisKKyogQ29uc2lkZXIgYWRkaW5nIHlvdXJzZWxmIHRvIE1BSU5UQUlORVJTLgorCisqIERvY3VtZW50IHRoZSBkcml2ZXIgaW4gRG9jdW1lbnRhdGlvbi9od21vbi88ZHJpdmVyX25hbWU+LgorCisqIEFkZCB0aGUgZHJpdmVyIHRvIEtjb25maWcgYW5kIE1ha2VmaWxlIGluIGFscGhhYmV0aWNhbCBvcmRlci4KKworKiBNYWtlIHN1cmUgdGhhdCBhbGwgZGVwZW5kZW5jaWVzIGFyZSBsaXN0ZWQgaW4gS2NvbmZpZy4gRm9yIG5ldyBkcml2ZXJzLCBpdAorICBpcyBtb3N0IGxpa2VseSBwcnVkZW50IHRvIGFkZCBhIGRlcGVuZGVuY3kgb24gRVhQRVJJTUVOVEFMLgorCisqIEF2b2lkIGZvcndhcmQgZGVjbGFyYXRpb25zIGlmIHlvdSBjYW4uIFJlYXJyYW5nZSB0aGUgY29kZSBpZiBuZWNlc3NhcnkuCisKKyogQXZvaWQgY2FsY3VsYXRpb25zIGluIG1hY3JvcyBhbmQgbWFjcm8tZ2VuZXJhdGVkIGZ1bmN0aW9ucy4gV2hpbGUgc3VjaCBtYWNyb3MKKyAgbWF5IHNhdmUgYSBsaW5lIG9yIHNvIGluIHRoZSBzb3VyY2UsIGl0IG9iZnVzY2F0ZXMgdGhlIGNvZGUgYW5kIG1ha2VzIGNvZGUKKyAgcmV2aWV3IG1vcmUgZGlmZmljdWx0LiBJdCBtYXkgYWxzbyByZXN1bHQgaW4gY29kZSB3aGljaCBpcyBtb3JlIGNvbXBsaWNhdGVkCisgIHRoYW4gbmVjZXNzYXJ5LiBVc2UgaW5saW5lIGZ1bmN0aW9ucyBvciBqdXN0IHJlZ3VsYXIgZnVuY3Rpb25zIGluc3RlYWQuCisKKyogSWYgdGhlIGRyaXZlciBoYXMgYSBkZXRlY3QgZnVuY3Rpb24sIG1ha2Ugc3VyZSBpdCBpcyBzaWxlbnQuIERlYnVnIG1lc3NhZ2VzCisgIGFuZCBtZXNzYWdlcyBwcmludGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBkZXRlY3Rpb24gYXJlIGFjY2VwdGFibGUsIGJ1dCBpdAorICBtdXN0IG5vdCBwcmludCBtZXNzYWdlcyBzdWNoIGFzICJDaGlwIFhYWCBub3QgZm91bmQvc3VwcG9ydGVkIi4KKworICBLZWVwIGluIG1pbmQgdGhhdCB0aGUgZGV0ZWN0IGZ1bmN0aW9uIHdpbGwgcnVuIGZvciBhbGwgZHJpdmVycyBzdXBwb3J0aW5nIGFuCisgIGFkZHJlc3MgaWYgYSBjaGlwIGlzIGRldGVjdGVkIG9uIHRoYXQgYWRkcmVzcy4gVW5uZWNlc3NhcnkgbWVzc2FnZXMgd2lsbCBqdXN0CisgIHBvbGx1dGUgdGhlIGtlcm5lbCBsb2cgYW5kIG5vdCBwcm92aWRlIGFueSB2YWx1ZS4KKworKiBQcm92aWRlIGEgZGV0ZWN0IGZ1bmN0aW9uIGlmIGFuZCBvbmx5IGlmIGEgY2hpcCBjYW4gYmUgZGV0ZWN0ZWQgcmVsaWFibHkuCisKKyogQXZvaWQgd3JpdGluZyB0byBjaGlwIHJlZ2lzdGVycyBpbiB0aGUgZGV0ZWN0IGZ1bmN0aW9uLiBJZiB5b3UgaGF2ZSB0byB3cml0ZSwKKyAgb25seSBkbyBpdCBhZnRlciB5b3UgaGF2ZSBhbHJlYWR5IGdhdGhlcmVkIGVub3VnaCBkYXRhIHRvIGJlIGNlcnRhaW4gdGhhdCB0aGUKKyAgZGV0ZWN0aW9uIGlzIGdvaW5nIHRvIGJlIHN1Y2Nlc3NmdWwuCisKKyAgS2VlcCBpbiBtaW5kIHRoYXQgdGhlIGNoaXAgbWlnaHQgbm90IGJlIHdoYXQgeW91ciBkcml2ZXIgYmVsaWV2ZXMgaXQgaXMsIGFuZAorICB3cml0aW5nIHRvIGl0IG1pZ2h0IGNhdXNlIGEgYmFkIG1pc2NvbmZpZ3VyYXRpb24uCisKKyogTWFrZSBzdXJlIHRoZXJlIGFyZSBubyByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIHByb2JlIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksCisgIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZSB5b3VyIGNoaXAgZmlyc3QsIHRoZW4gY3JlYXRlIHN5c2ZzIGVudHJpZXMgYW5kIHJlZ2lzdGVyCisgIHdpdGggdGhlIGh3bW9uIHN1YnN5c3RlbS4KKworKiBEbyBub3QgcHJvdmlkZSBzdXBwb3J0IGZvciBkZXByZWNhdGVkIHN5c2ZzIGF0dHJpYnV0ZXMuCisKKyogRG8gbm90IGNyZWF0ZSBub24tc3RhbmRhcmQgYXR0cmlidXRlcyB1bmxlc3MgcmVhbGx5IG5lZWRlZC4gSWYgeW91IGhhdmUgdG8gdXNlCisgIG5vbi1zdGFuZGFyZCBhdHRyaWJ1dGVzLCBvciB5b3UgYmVsaWV2ZSB5b3UgZG8sIGRpc2N1c3MgaXQgb24gdGhlIG1haWxpbmcgbGlzdAorICBmaXJzdC4gRWl0aGVyIGNhc2UsIHByb3ZpZGUgYSBkZXRhaWxlZCBleHBsYW5hdGlvbiB3aHkgeW91IG5lZWQgdGhlCisgIG5vbi1zdGFuZGFyZCBhdHRyaWJ1dGUocykuCisgIFN0YW5kYXJkIGF0dHJpYnV0ZXMgYXJlIHNwZWNpZmllZCBpbiBEb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZS4KKworKiBXaGVuIGRlY2lkaW5nIHdoaWNoIHN5c2ZzIGF0dHJpYnV0ZXMgdG8gc3VwcG9ydCwgbG9vayBhdCB0aGUgY2hpcCdzCisgIGNhcGFiaWxpdGllcy4gV2hpbGUgd2UgZG8gbm90IGV4cGVjdCB5b3VyIGRyaXZlciB0byBzdXBwb3J0IGV2ZXJ5dGhpbmcgdGhlCisgIGNoaXAgbWF5IG9mZmVyLCBpdCBzaG91bGQgYXQgbGVhc3Qgc3VwcG9ydCBhbGwgbGltaXRzIGFuZCBhbGFybXMuCisKKyogTGFzdCBidXQgbm90IGxlYXN0LCBwbGVhc2UgY2hlY2sgaWYgYSBkcml2ZXIgZm9yIHlvdXIgY2hpcCBhbHJlYWR5IGV4aXN0cworICBiZWZvcmUgc3RhcnRpbmcgdG8gd3JpdGUgYSBuZXcgZHJpdmVyLiBFc3BlY2lhbGx5IGZvciB0ZW1wZXJhdHVyZSBzZW5zb3JzLAorICBuZXcgY2hpcHMgYXJlIG9mdGVuIHZhcmlhbnRzIG9mIHByZXZpb3VzbHkgcmVsZWFzZWQgY2hpcHMuIEluIHNvbWUgY2FzZXMsCisgIGEgcHJlc3VtYWJseSBuZXcgY2hpcCBtYXkgc2ltcGx5IGhhdmUgYmVlbiByZWxhYmVsZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZSBiL0RvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJmYWNlCmluZGV4IDgzYTY5ODcuLjhmNjNjMjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJmYWNlCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJmYWNlCkBAIC01NzksNyArNTc5LDcgQEAKIGZhblsxLSpdX2ZhdWx0CiB0ZW1wWzEtKl1fZmF1bHQKIAkJSW5wdXQgZmF1bHQgY29uZGl0aW9uCi0JCTA6IG5vIGZhdWx0IG9jY3VyZWQKKwkJMDogbm8gZmF1bHQgb2NjdXJyZWQKIAkJMTogZmF1bHQgY29uZGl0aW9uCiAJCVJPCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzgxZCBiL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzgxZAppbmRleCBlY2JjMWU0Li4xMjliMGEzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc4MWQKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3ODFkCkBAIC00MDMsNyArNDAzLDcgQEAKIAogMHg4MCAtIHNlZW1zIHRvIHR1cm4gZmFucyBvZmYgYWZ0ZXIgc29tZSB0aW1lKDEtMiBtaW51dGVzKS4uLiBtaWdodCBiZQogc29tZSBmb3JtIG9mIGF1dG8tZmFuLWNvbnRyb2wgYmFzZWQgb24gdGVtcD8gaG1tIChRZmFuPyB0aGlzIG1vYm8gaXMgYW4KLW9sZCBBU1VTLCBpdCBpc24ndCBtYXJrZXRlZCBhcyBRZmFuLiBNYXliZSBzb21lIGJldGEgcHJlLWF0dGVtcCBhdCBRZmFuCitvbGQgQVNVUywgaXQgaXNuJ3QgbWFya2V0ZWQgYXMgUWZhbi4gTWF5YmUgc29tZSBiZXRhIHByZS1hdHRlbXB0IGF0IFFmYW4KIHRoYXQgd2FzIGRyb3BwZWQgYXQgdGhlIEJJT1MpCiAweDgxIC0gb2ZmCiAweDgyIC0gc2xpZ2h0bHkgIm9uLW5lciIgdGhhbiBvZmYsIGJ1dCBteSBmYW5zIGRvIG5vdCBnZXQgdG8gbW92ZS4gSSBjYW4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzkxZCBiL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzkxZAppbmRleCA1NjYzZTQ5Li45MDM4N2MzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc5MWQKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3OTFkCkBAIC05Myw3ICs5Myw3IEBACiBtZXRob2Qgb2YgYSBzaW5nbGUgc3lzZnMgYmVlcF9tYXNrIGZpbGUgdG8gYSBuZXdlciBtZXRob2QgdXNpbmcgbXVsdGlwbGUKICpfYmVlcCBmaWxlcyBhcyBkZXNjcmliZWQgaW4gLi4uL0RvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJmYWNlLgogCi1BIHNpbWlsYXIgY2hhbmdlIGhhcyBvY2N1cmVkIGZvciB0aGUgYml0bWFwIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFsYXJtcy4gVGhlCitBIHNpbWlsYXIgY2hhbmdlIGhhcyBvY2N1cnJlZCBmb3IgdGhlIGJpdG1hcCBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbGFybXMuIFRoZQogb3JpZ2luYWwgbGVnYWN5IG1ldGhvZCB1c2VkIGEgc2luZ2xlIHN5c2ZzIGFsYXJtcyBmaWxlIGNvbnRhaW5pbmcgYSBiaXRtYXAKIG9mIHRyaWdnZXJlZCBhbGFybXMuIFRoZSBuZXdlciBtZXRob2QgdXNlcyBtdWx0aXBsZSBzeXNmcyAqX2FsYXJtIGZpbGVzCiAoYWdhaW4gZm9sbG93aW5nIHRoZSBwYXR0ZXJuIGRlc2NyaWJlZCBpbiBzeXNmcy1pbnRlcmZhY2UpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LWxpZ2h0IGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LWxpZ2h0CmluZGV4IGJkYzljYmIuLmMyMmVlMDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQKQEAgLTQsNyArNCw3IEBACiAKIFRoaXMgZHJpdmVyIGlzIGEgbGlnaHQgdmVyc2lvbiBvZiBpMmMtcGFycG9ydC4gSXQgZG9lc24ndCBkZXBlbmQgICAgICAgIAogb24gdGhlIHBhcnBvcnQgZHJpdmVyLCBhbmQgdXNlcyBkaXJlY3QgSS9PIGFjY2VzcyBpbnN0ZWFkLiBUaGlzIG1pZ2h0IGJlCi1wcmVmZXJlZCBvbiBlbWJlZGRlZCBzeXN0ZW1zIHdoZXJlIHdhc3RpbmcgbWVtb3J5IGZvciB0aGUgY2xlYW4gYnV0IGhlYXZ5CitwcmVmZXJyZWQgb24gZW1iZWRkZWQgc3lzdGVtcyB3aGVyZSB3YXN0aW5nIG1lbW9yeSBmb3IgdGhlIGNsZWFuIGJ1dCBoZWF2eQogcGFycG9ydCBoYW5kbGluZyBpcyBub3QgYW4gb3B0aW9uLiBUaGUgZHJhd2JhY2sgaXMgYSByZWR1Y2VkIHBvcnRhYmlsaXR5CiBhbmQgdGhlIGltcG9zc2liaWxpdHkgdG8gZGFpc3ktY2hhaW4gb3RoZXIgcGFyYWxsZWwgcG9ydCBkZXZpY2VzLiAgICAgICAgICAgICAgICAgCiAgIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1zaXM5NnggYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXNpczk2eAppbmRleCA3MGU2YTBjLi4wYjk3OWYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXNpczk2eAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXNpczk2eApAQCAtMzUsNyArMzUsNyBAQAogCiAoa2VybmVsIHZlcnNpb25zIGxhdGVyIHRoYW4gMi40LjE4IG1heSBmaWxsIGluIHRoZSAiVW5rbm93biJzKQogCi1JZiB5b3UgY2FudCBzZWUgaXQgcGxlYXNlIGxvb2sgb24gcXVpcmtfc2lzXzk2eF9zbWJ1cworSWYgeW91IGNhbid0IHNlZSBpdCBwbGVhc2UgbG9vayBvbiBxdWlya19zaXNfOTZ4X3NtYnVzCiAoZHJpdmVycy9wY2kvcXVpcmtzLmMpIChhbHNvIGlmIHNvdXRoYnJpZGdlIGRldGVjdGlvbiBmYWlscykKIAogSSBzdXNwZWN0IHRoYXQgdGhpcyBkcml2ZXIgY291bGQgYmUgbWFkZSB0byB3b3JrIGZvciB0aGUgZm9sbG93aW5nIFNpUwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy10YW9zLWV2bSBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtdGFvcy1ldm0KaW5kZXggOTE0NmUzMy4uNjNmNjJiYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy10YW9zLWV2bQorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXRhb3MtZXZtCkBAIC0xMyw3ICsxMyw3IEBACiAKICogVEFPUyBUU0wyNTUwIEVWTQogCi1Gb3IgYWRkdGlvbmFsIGluZm9ybWF0aW9uIG9uIFRBT1MgcHJvZHVjdHMsIHBsZWFzZSBzZWUKK0ZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIFRBT1MgcHJvZHVjdHMsIHBsZWFzZSBzZWUKICAgaHR0cDovL3d3dy50YW9zaW5jLmNvbS8KIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyby9SRUFETUUgYi9Eb2N1bWVudGF0aW9uL2kyby9SRUFETUUKaW5kZXggMGViZjU4Yy4uZWU5MWUyNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMm8vUkVBRE1FCisrKyBiL0RvY3VtZW50YXRpb24vaTJvL1JFQURNRQpAQCAtNTMsNyArNTMsNyBAQAogQm94SGlsbCBDb3Jwb3JhdGlvbgogCUxvYW4gb2YgaW5pdGlhbCBGaWJyZUNoYW5uZWwgZGlzayBhcnJheSB1c2VkIGZvciBkZXZlbG9wbWVudCB3b3JrLgogCi1FdXJvcGVhbiBDb21pc3Npb24KK0V1cm9wZWFuIENvbW1pc3Npb24KIAlGdW5kaW5nIHRoZSB3b3JrIGRvbmUgYnkgdGhlIFVuaXZlcnNpdHkgb2YgSGVsc2lua2kKIAogU3lzS29ubmVjdApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pYTY0L2FsaWFzaW5nLXRlc3QuYyBiL0RvY3VtZW50YXRpb24vaWE2NC9hbGlhc2luZy10ZXN0LmMKaW5kZXggM2RmYjc2Yy4uNWNhYTJhZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pYTY0L2FsaWFzaW5nLXRlc3QuYworKysgYi9Eb2N1bWVudGF0aW9uL2lhNjQvYWxpYXNpbmctdGVzdC5jCkBAIC0xNzcsNyArMTc3LDcgQEAKIAogCQkJLyoKIAkJCSAqIEl0J3MgT0sgaWYgdGhlIFJPTSBpcyB1bnJlYWRhYmxlLiAgTWF5YmUgdGhlcmUKLQkJCSAqIGlzIG5vIFJPTSwgb3Igc29tZSBvdGhlciBlcnJvciBvY3VycmVkLiAgVGhlCisJCQkgKiBpcyBubyBST00sIG9yIHNvbWUgb3RoZXIgZXJyb3Igb2NjdXJyZWQuICBUaGUKIAkJCSAqIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IG5vIE1DQSBoYXBwZW5lZC4KIAkJCSAqLwogCQkJaWYgKHJjID4gMCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvZXZlbnQtY29kZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9ldmVudC1jb2Rlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNmY2IwNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvZXZlbnQtY29kZXMudHh0CkBAIC0wLDAgKzEsMjYyIEBACitUaGUgaW5wdXQgcHJvdG9jb2wgdXNlcyBhIG1hcCBvZiB0eXBlcyBhbmQgY29kZXMgdG8gZXhwcmVzcyBpbnB1dCBkZXZpY2UgdmFsdWVzCit0byB1c2Vyc3BhY2UuIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSB0eXBlcyBhbmQgY29kZXMgYW5kIGhvdyBhbmQgd2hlbiB0aGV5CittYXkgYmUgdXNlZC4KKworQSBzaW5nbGUgaGFyZHdhcmUgZXZlbnQgZ2VuZXJhdGVzIG11bHRpcGxlIGlucHV0IGV2ZW50cy4gRWFjaCBpbnB1dCBldmVudAorY29udGFpbnMgdGhlIG5ldyB2YWx1ZSBvZiBhIHNpbmdsZSBkYXRhIGl0ZW0uIEEgc3BlY2lhbCBldmVudCB0eXBlLCBFVl9TWU4sIGlzCit1c2VkIHRvIHNlcGFyYXRlIGlucHV0IGV2ZW50cyBpbnRvIHBhY2tldHMgb2YgaW5wdXQgZGF0YSBjaGFuZ2VzIG9jY3VycmluZyBhdAordGhlIHNhbWUgbW9tZW50IGluIHRpbWUuIEluIHRoZSBmb2xsb3dpbmcsIHRoZSB0ZXJtICJldmVudCIgcmVmZXJzIHRvIGEgc2luZ2xlCitpbnB1dCBldmVudCBlbmNvbXBhc3NpbmcgYSB0eXBlLCBjb2RlLCBhbmQgdmFsdWUuCisKK1RoZSBpbnB1dCBwcm90b2NvbCBpcyBhIHN0YXRlZnVsIHByb3RvY29sLiBFdmVudHMgYXJlIGVtaXR0ZWQgb25seSB3aGVuIHZhbHVlcworb2YgZXZlbnQgY29kZXMgaGF2ZSBjaGFuZ2VkLiBIb3dldmVyLCB0aGUgc3RhdGUgaXMgbWFpbnRhaW5lZCB3aXRoaW4gdGhlIExpbnV4CitpbnB1dCBzdWJzeXN0ZW07IGRyaXZlcnMgZG8gbm90IG5lZWQgdG8gbWFpbnRhaW4gdGhlIHN0YXRlIGFuZCBtYXkgYXR0ZW1wdCB0bworZW1pdCB1bmNoYW5nZWQgdmFsdWVzIHdpdGhvdXQgaGFybS4gVXNlcnNwYWNlIG1heSBvYnRhaW4gdGhlIGN1cnJlbnQgc3RhdGUgb2YKK2V2ZW50IGNvZGUgdmFsdWVzIHVzaW5nIHRoZSBFVklPQ0cqIGlvY3RscyBkZWZpbmVkIGluIGxpbnV4L2lucHV0LmguIFRoZSBldmVudAorcmVwb3J0cyBzdXBwb3J0ZWQgYnkgYSBkZXZpY2UgYXJlIGFsc28gcHJvdmlkZWQgYnkgc3lzZnMgaW4KK2NsYXNzL2lucHV0L2V2ZW50Ki9kZXZpY2UvY2FwYWJpbGl0aWVzLywgYW5kIHRoZSBwcm9wZXJ0aWVzIG9mIGEgZGV2aWNlIGFyZQorcHJvdmlkZWQgaW4gY2xhc3MvaW5wdXQvZXZlbnQqL2RldmljZS9wcm9wZXJ0aWVzLgorCitUeXBlczoKKz09PT09PT09PT0KK1R5cGVzIGFyZSBncm91cGluZ3Mgb2YgY29kZXMgdW5kZXIgYSBsb2dpY2FsIGlucHV0IGNvbnN0cnVjdC4gRWFjaCB0eXBlIGhhcyBhCitzZXQgb2YgYXBwbGljYWJsZSBjb2RlcyB0byBiZSB1c2VkIGluIGdlbmVyYXRpbmcgZXZlbnRzLiBTZWUgdGhlIENvZGVzIHNlY3Rpb24KK2ZvciBkZXRhaWxzIG9uIHZhbGlkIGNvZGVzIGZvciBlYWNoIHR5cGUuCisKKyogRVZfU1lOOgorICAtIFVzZWQgYXMgbWFya2VycyB0byBzZXBhcmF0ZSBldmVudHMuIEV2ZW50cyBtYXkgYmUgc2VwYXJhdGVkIGluIHRpbWUgb3IgaW4KKyAgICBzcGFjZSwgc3VjaCBhcyB3aXRoIHRoZSBtdWx0aXRvdWNoIHByb3RvY29sLgorCisqIEVWX0tFWToKKyAgLSBVc2VkIHRvIGRlc2NyaWJlIHN0YXRlIGNoYW5nZXMgb2Yga2V5Ym9hcmRzLCBidXR0b25zLCBvciBvdGhlciBrZXktbGlrZQorICAgIGRldmljZXMuCisKKyogRVZfUkVMOgorICAtIFVzZWQgdG8gZGVzY3JpYmUgcmVsYXRpdmUgYXhpcyB2YWx1ZSBjaGFuZ2VzLCBlLmcuIG1vdmluZyB0aGUgbW91c2UgNSB1bml0cworICAgIHRvIHRoZSBsZWZ0LgorCisqIEVWX0FCUzoKKyAgLSBVc2VkIHRvIGRlc2NyaWJlIGFic29sdXRlIGF4aXMgdmFsdWUgY2hhbmdlcywgZS5nLiBkZXNjcmliaW5nIHRoZQorICAgIGNvb3JkaW5hdGVzIG9mIGEgdG91Y2ggb24gYSB0b3VjaHNjcmVlbi4KKworKiBFVl9NU0M6CisgIC0gVXNlZCB0byBkZXNjcmliZSBtaXNjZWxsYW5lb3VzIGlucHV0IGRhdGEgdGhhdCBkbyBub3QgZml0IGludG8gb3RoZXIgdHlwZXMuCisKKyogRVZfU1c6CisgIC0gVXNlZCB0byBkZXNjcmliZSBiaW5hcnkgc3RhdGUgaW5wdXQgc3dpdGNoZXMuCisKKyogRVZfTEVEOgorICAtIFVzZWQgdG8gdHVybiBMRURzIG9uIGRldmljZXMgb24gYW5kIG9mZi4KKworKiBFVl9TTkQ6CisgIC0gVXNlZCB0byBvdXRwdXQgc291bmQgdG8gZGV2aWNlcy4KKworKiBFVl9SRVA6CisgIC0gVXNlZCBmb3IgYXV0b3JlcGVhdGluZyBkZXZpY2VzLgorCisqIEVWX0ZGOgorICAtIFVzZWQgdG8gc2VuZCBmb3JjZSBmZWVkYmFjayBjb21tYW5kcyB0byBhbiBpbnB1dCBkZXZpY2UuCisKKyogRVZfUFdSOgorICAtIEEgc3BlY2lhbCB0eXBlIGZvciBwb3dlciBidXR0b24gYW5kIHN3aXRjaCBpbnB1dC4KKworKiBFVl9GRl9TVEFUVVM6CisgIC0gVXNlZCB0byByZWNlaXZlIGZvcmNlIGZlZWRiYWNrIGRldmljZSBzdGF0dXMuCisKK0NvZGVzOgorPT09PT09PT09PQorQ29kZXMgZGVmaW5lIHRoZSBwcmVjaXNlIHR5cGUgb2YgZXZlbnQuCisKK0VWX1NZTjoKKy0tLS0tLS0tLS0KK0VWX1NZTiBldmVudCB2YWx1ZXMgYXJlIHVuZGVmaW5lZC4gVGhlaXIgdXNhZ2UgaXMgZGVmaW5lZCBvbmx5IGJ5IHdoZW4gdGhleSBhcmUKK3NlbnQgaW4gdGhlIGV2ZGV2IGV2ZW50IHN0cmVhbS4KKworKiBTWU5fUkVQT1JUOgorICAtIFVzZWQgdG8gc3luY2hyb25pemUgYW5kIHNlcGFyYXRlIGV2ZW50cyBpbnRvIHBhY2tldHMgb2YgaW5wdXQgZGF0YSBjaGFuZ2VzCisgICAgb2NjdXJyaW5nIGF0IHRoZSBzYW1lIG1vbWVudCBpbiB0aW1lLiBGb3IgZXhhbXBsZSwgbW90aW9uIG9mIGEgbW91c2UgbWF5IHNldAorICAgIHRoZSBSRUxfWCBhbmQgUkVMX1kgdmFsdWVzIGZvciBvbmUgbW90aW9uLCB0aGVuIGVtaXQgYSBTWU5fUkVQT1JULiBUaGUgbmV4dAorICAgIG1vdGlvbiB3aWxsIGVtaXQgbW9yZSBSRUxfWCBhbmQgUkVMX1kgdmFsdWVzIGFuZCBzZW5kIGFub3RoZXIgU1lOX1JFUE9SVC4KKworKiBTWU5fQ09ORklHOgorICAtIFRCRAorCisqIFNZTl9NVF9SRVBPUlQ6CisgIC0gVXNlZCB0byBzeW5jaHJvbml6ZSBhbmQgc2VwYXJhdGUgdG91Y2ggZXZlbnRzLiBTZWUgdGhlCisgICAgbXVsdGktdG91Y2gtcHJvdG9jb2wudHh0IGRvY3VtZW50IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisqIFNZTl9EUk9QUEVEOgorICAtIFVzZWQgdG8gaW5kaWNhdGUgYnVmZmVyIG92ZXJydW4gaW4gdGhlIGV2ZGV2IGNsaWVudCdzIGV2ZW50IHF1ZXVlLgorICAgIENsaWVudCBzaG91bGQgaWdub3JlIGFsbCBldmVudHMgdXAgdG8gYW5kIGluY2x1ZGluZyBuZXh0IFNZTl9SRVBPUlQKKyAgICBldmVudCBhbmQgcXVlcnkgdGhlIGRldmljZSAodXNpbmcgRVZJT0NHKiBpb2N0bHMpIHRvIG9idGFpbiBpdHMKKyAgICBjdXJyZW50IHN0YXRlLgorCitFVl9LRVk6CistLS0tLS0tLS0tCitFVl9LRVkgZXZlbnRzIHRha2UgdGhlIGZvcm0gS0VZXzxuYW1lPiBvciBCVE5fPG5hbWU+LiBGb3IgZXhhbXBsZSwgS0VZX0EgaXMgdXNlZAordG8gcmVwcmVzZW50IHRoZSAnQScga2V5IG9uIGEga2V5Ym9hcmQuIFdoZW4gYSBrZXkgaXMgZGVwcmVzc2VkLCBhbiBldmVudCB3aXRoCit0aGUga2V5J3MgY29kZSBpcyBlbWl0dGVkIHdpdGggdmFsdWUgMS4gV2hlbiB0aGUga2V5IGlzIHJlbGVhc2VkLCBhbiBldmVudCBpcworZW1pdHRlZCB3aXRoIHZhbHVlIDAuIFNvbWUgaGFyZHdhcmUgc2VuZCBldmVudHMgd2hlbiBhIGtleSBpcyByZXBlYXRlZC4gVGhlc2UKK2V2ZW50cyBoYXZlIGEgdmFsdWUgb2YgMi4gSW4gZ2VuZXJhbCwgS0VZXzxuYW1lPiBpcyB1c2VkIGZvciBrZXlib2FyZCBrZXlzLCBhbmQKK0JUTl88bmFtZT4gaXMgdXNlZCBmb3Igb3RoZXIgdHlwZXMgb2YgbW9tZW50YXJ5IHN3aXRjaCBldmVudHMuCisKK0EgZmV3IEVWX0tFWSBjb2RlcyBoYXZlIHNwZWNpYWwgbWVhbmluZ3M6CisKKyogQlROX1RPT0xfPG5hbWU+OgorICAtIFRoZXNlIGNvZGVzIGFyZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggaW5wdXQgdHJhY2twYWRzLCB0YWJsZXRzLCBhbmQKKyAgICB0b3VjaHNjcmVlbnMuIFRoZXNlIGRldmljZXMgbWF5IGJlIHVzZWQgd2l0aCBmaW5nZXJzLCBwZW5zLCBvciBvdGhlciB0b29scy4KKyAgICBXaGVuIGFuIGV2ZW50IG9jY3VycyBhbmQgYSB0b29sIGlzIHVzZWQsIHRoZSBjb3JyZXNwb25kaW5nIEJUTl9UT09MXzxuYW1lPgorICAgIGNvZGUgc2hvdWxkIGJlIHNldCB0byBhIHZhbHVlIG9mIDEuIFdoZW4gdGhlIHRvb2wgaXMgbm8gbG9uZ2VyIGludGVyYWN0aW5nCisgICAgd2l0aCB0aGUgaW5wdXQgZGV2aWNlLCB0aGUgQlROX1RPT0xfPG5hbWU+IGNvZGUgc2hvdWxkIGJlIHJlc2V0IHRvIDAuIEFsbAorICAgIHRyYWNrcGFkcywgdGFibGV0cywgYW5kIHRvdWNoc2NyZWVucyBzaG91bGQgdXNlIGF0IGxlYXN0IG9uZSBCVE5fVE9PTF88bmFtZT4KKyAgICBjb2RlIHdoZW4gZXZlbnRzIGFyZSBnZW5lcmF0ZWQuCisKKyogQlROX1RPVUNIOgorICAgIEJUTl9UT1VDSCBpcyB1c2VkIGZvciB0b3VjaCBjb250YWN0LiBXaGlsZSBhbiBpbnB1dCB0b29sIGlzIGRldGVybWluZWQgdG8gYmUKKyAgICB3aXRoaW4gbWVhbmluZ2Z1bCBwaHlzaWNhbCBjb250YWN0LCB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSBtdXN0IGJlIHNldAorICAgIHRvIDEuIE1lYW5pbmdmdWwgcGh5c2ljYWwgY29udGFjdCBtYXkgbWVhbiBhbnkgY29udGFjdCwgb3IgaXQgbWF5IG1lYW4KKyAgICBjb250YWN0IGNvbmRpdGlvbmVkIGJ5IGFuIGltcGxlbWVudGF0aW9uIGRlZmluZWQgcHJvcGVydHkuIEZvciBleGFtcGxlLCBhCisgICAgdG91Y2hwYWQgbWF5IHNldCB0aGUgdmFsdWUgdG8gMSBvbmx5IHdoZW4gdGhlIHRvdWNoIHByZXNzdXJlIHJpc2VzIGFib3ZlIGEKKyAgICBjZXJ0YWluIHZhbHVlLiBCVE5fVE9VQ0ggbWF5IGJlIGNvbWJpbmVkIHdpdGggQlROX1RPT0xfPG5hbWU+IGNvZGVzLiBGb3IKKyAgICBleGFtcGxlLCBhIHBlbiB0YWJsZXQgbWF5IHNldCBCVE5fVE9PTF9QRU4gdG8gMSBhbmQgQlROX1RPVUNIIHRvIDAgd2hpbGUgdGhlCisgICAgcGVuIGlzIGhvdmVyaW5nIG92ZXIgYnV0IG5vdCB0b3VjaGluZyB0aGUgdGFibGV0IHN1cmZhY2UuCisKK05vdGU6IEZvciBhcHByb3ByaWF0ZSBmdW5jdGlvbiBvZiB0aGUgbGVnYWN5IG1vdXNlZGV2IGVtdWxhdGlvbiBkcml2ZXIsCitCVE5fVE9VQ0ggbXVzdCBiZSB0aGUgZmlyc3QgZXZkZXYgY29kZSBlbWl0dGVkIGluIGEgc3luY2hyb25pemF0aW9uIGZyYW1lLgorCitOb3RlOiBIaXN0b3JpY2FsbHkgYSB0b3VjaCBkZXZpY2Ugd2l0aCBCVE5fVE9PTF9GSU5HRVIgYW5kIEJUTl9UT1VDSCB3YXMKK2ludGVycHJldGVkIGFzIGEgdG91Y2hwYWQgYnkgdXNlcnNwYWNlLCB3aGlsZSBhIHNpbWlsYXIgZGV2aWNlIHdpdGhvdXQKK0JUTl9UT09MX0ZJTkdFUiB3YXMgaW50ZXJwcmV0ZWQgYXMgYSB0b3VjaHNjcmVlbi4gRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5Cit3aXRoIGN1cnJlbnQgdXNlcnNwYWNlIGl0IGlzIHJlY29tbWVuZGVkIHRvIGZvbGxvdyB0aGlzIGRpc3RpbmN0aW9uLiBJbiB0aGUKK2Z1dHVyZSwgdGhpcyBkaXN0aW5jdGlvbiB3aWxsIGJlIGRlcHJlY2F0ZWQgYW5kIHRoZSBkZXZpY2UgcHJvcGVydGllcyBpb2N0bAorRVZJT0NHUFJPUCwgZGVmaW5lZCBpbiBsaW51eC9pbnB1dC5oLCB3aWxsIGJlIHVzZWQgdG8gY29udmV5IHRoZSBkZXZpY2UgdHlwZS4KKworKiBCVE5fVE9PTF9GSU5HRVIsIEJUTl9UT09MX0RPVUJMRVRBUCwgQlROX1RPT0xfVFJJUExFVEFQLCBCVE5fVE9PTF9RVUFEVEFQOgorICAtIFRoZXNlIGNvZGVzIGRlbm90ZSBvbmUsIHR3bywgdGhyZWUsIGFuZCBmb3VyIGZpbmdlciBpbnRlcmFjdGlvbiBvbiBhCisgICAgdHJhY2twYWQgb3IgdG91Y2hzY3JlZW4uIEZvciBleGFtcGxlLCBpZiB0aGUgdXNlciB1c2VzIHR3byBmaW5nZXJzIGFuZCBtb3ZlcworICAgIHRoZW0gb24gdGhlIHRvdWNocGFkIGluIGFuIGVmZm9ydCB0byBzY3JvbGwgY29udGVudCBvbiBzY3JlZW4sCisgICAgQlROX1RPT0xfRE9VQkxFVEFQIHNob3VsZCBiZSBzZXQgdG8gdmFsdWUgMSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBtb3Rpb24uCisgICAgTm90ZSB0aGF0IGFsbCBCVE5fVE9PTF88bmFtZT4gY29kZXMgYW5kIHRoZSBCVE5fVE9VQ0ggY29kZSBhcmUgb3J0aG9nb25hbCBpbgorICAgIHB1cnBvc2UuIEEgdHJhY2twYWQgZXZlbnQgZ2VuZXJhdGVkIGJ5IGZpbmdlciB0b3VjaGVzIHNob3VsZCBnZW5lcmF0ZSBldmVudHMKKyAgICBmb3Igb25lIGNvZGUgZnJvbSBlYWNoIGdyb3VwLiBBdCBtb3N0IG9ubHkgb25lIG9mIHRoZXNlIEJUTl9UT09MXzxuYW1lPgorICAgIGNvZGVzIHNob3VsZCBoYXZlIGEgdmFsdWUgb2YgMSBkdXJpbmcgYW55IHN5bmNocm9uaXphdGlvbiBmcmFtZS4KKworTm90ZTogSGlzdG9yaWNhbGx5IHNvbWUgZHJpdmVycyBlbWl0dGVkIG11bHRpcGxlIG9mIHRoZSBmaW5nZXIgY291bnQgY29kZXMgd2l0aAorYSB2YWx1ZSBvZiAxIGluIHRoZSBzYW1lIHN5bmNocm9uaXphdGlvbiBmcmFtZS4gVGhpcyB1c2FnZSBpcyBkZXByZWNhdGVkLgorCitOb3RlOiBJbiBtdWx0aXRvdWNoIGRyaXZlcnMsIHRoZSBpbnB1dF9tdF9yZXBvcnRfZmluZ2VyX2NvdW50KCkgZnVuY3Rpb24gc2hvdWxkCitiZSB1c2VkIHRvIGVtaXQgdGhlc2UgY29kZXMuIFBsZWFzZSBzZWUgbXVsdGktdG91Y2gtcHJvdG9jb2wudHh0IGZvciBkZXRhaWxzLgorCitFVl9SRUw6CistLS0tLS0tLS0tCitFVl9SRUwgZXZlbnRzIGRlc2NyaWJlIHJlbGF0aXZlIGNoYW5nZXMgaW4gYSBwcm9wZXJ0eS4gRm9yIGV4YW1wbGUsIGEgbW91c2UgbWF5Cittb3ZlIHRvIHRoZSBsZWZ0IGJ5IGEgY2VydGFpbiBudW1iZXIgb2YgdW5pdHMsIGJ1dCBpdHMgYWJzb2x1dGUgcG9zaXRpb24gaW4KK3NwYWNlIGlzIHVua25vd24uIElmIHRoZSBhYnNvbHV0ZSBwb3NpdGlvbiBpcyBrbm93biwgRVZfQUJTIGNvZGVzIHNob3VsZCBiZSB1c2VkCitpbnN0ZWFkIG9mIEVWX1JFTCBjb2Rlcy4KKworQSBmZXcgRVZfUkVMIGNvZGVzIGhhdmUgc3BlY2lhbCBtZWFuaW5nczoKKworKiBSRUxfV0hFRUwsIFJFTF9IV0hFRUw6CisgIC0gVGhlc2UgY29kZXMgYXJlIHVzZWQgZm9yIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIHNjcm9sbCB3aGVlbHMsCisgICAgcmVzcGVjdGl2ZWx5LgorCitFVl9BQlM6CistLS0tLS0tLS0tCitFVl9BQlMgZXZlbnRzIGRlc2NyaWJlIGFic29sdXRlIGNoYW5nZXMgaW4gYSBwcm9wZXJ0eS4gRm9yIGV4YW1wbGUsIGEgdG91Y2hwYWQKK21heSBlbWl0IGNvb3JkaW5hdGVzIGZvciBhIHRvdWNoIGxvY2F0aW9uLgorCitBIGZldyBFVl9BQlMgY29kZXMgaGF2ZSBzcGVjaWFsIG1lYW5pbmdzOgorCisqIEFCU19ESVNUQU5DRToKKyAgLSBVc2VkIHRvIGRlc2NyaWJlIHRoZSBkaXN0YW5jZSBvZiBhIHRvb2wgZnJvbSBhbiBpbnRlcmFjdGlvbiBzdXJmYWNlLiBUaGlzCisgICAgZXZlbnQgc2hvdWxkIG9ubHkgYmUgZW1pdHRlZCB3aGlsZSB0aGUgdG9vbCBpcyBob3ZlcmluZywgbWVhbmluZyBpbiBjbG9zZQorICAgIHByb3hpbWl0eSBvZiB0aGUgZGV2aWNlIGFuZCB3aGlsZSB0aGUgdmFsdWUgb2YgdGhlIEJUTl9UT1VDSCBjb2RlIGlzIDAuIElmCisgICAgdGhlIGlucHV0IGRldmljZSBtYXkgYmUgdXNlZCBmcmVlbHkgaW4gdGhyZWUgZGltZW5zaW9ucywgY29uc2lkZXIgQUJTX1oKKyAgICBpbnN0ZWFkLgorCisqIEFCU19NVF88bmFtZT46CisgIC0gVXNlZCB0byBkZXNjcmliZSBtdWx0aXRvdWNoIGlucHV0IGV2ZW50cy4gUGxlYXNlIHNlZQorICAgIG11bHRpLXRvdWNoLXByb3RvY29sLnR4dCBmb3IgZGV0YWlscy4KKworRVZfU1c6CistLS0tLS0tLS0tCitFVl9TVyBldmVudHMgZGVzY3JpYmUgc3RhdGVmdWwgYmluYXJ5IHN3aXRjaGVzLiBGb3IgZXhhbXBsZSwgdGhlIFNXX0xJRCBjb2RlIGlzCit1c2VkIHRvIGRlbm90ZSB3aGVuIGEgbGFwdG9wIGxpZCBpcyBjbG9zZWQuCisKK1Vwb24gYmluZGluZyB0byBhIGRldmljZSBvciByZXN1bWluZyBmcm9tIHN1c3BlbmQsIGEgZHJpdmVyIG11c3QgcmVwb3J0Cit0aGUgY3VycmVudCBzd2l0Y2ggc3RhdGUuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBkZXZpY2UsIGtlcm5lbCwgYW5kIHVzZXJzcGFjZQorc3RhdGUgaXMgaW4gc3luYy4KKworVXBvbiByZXN1bWUsIGlmIHRoZSBzd2l0Y2ggc3RhdGUgaXMgdGhlIHNhbWUgYXMgYmVmb3JlIHN1c3BlbmQsIHRoZW4gdGhlIGlucHV0CitzdWJzeXN0ZW0gd2lsbCBmaWx0ZXIgb3V0IHRoZSBkdXBsaWNhdGUgc3dpdGNoIHN0YXRlIHJlcG9ydHMuIFRoZSBkcml2ZXIgZG9lcworbm90IG5lZWQgdG8ga2VlcCB0aGUgc3RhdGUgb2YgdGhlIHN3aXRjaCBhdCBhbnkgdGltZS4KKworRVZfTVNDOgorLS0tLS0tLS0tLQorRVZfTVNDIGV2ZW50cyBhcmUgdXNlZCBmb3IgaW5wdXQgYW5kIG91dHB1dCBldmVudHMgdGhhdCBkbyBub3QgZmFsbCB1bmRlciBvdGhlcgorY2F0ZWdvcmllcy4KKworRVZfTEVEOgorLS0tLS0tLS0tLQorRVZfTEVEIGV2ZW50cyBhcmUgdXNlZCBmb3IgaW5wdXQgYW5kIG91dHB1dCB0byBzZXQgYW5kIHF1ZXJ5IHRoZSBzdGF0ZSBvZgordmFyaW91cyBMRURzIG9uIGRldmljZXMuCisKK0VWX1JFUDoKKy0tLS0tLS0tLS0KK0VWX1JFUCBldmVudHMgYXJlIHVzZWQgZm9yIHNwZWNpZnlpbmcgYXV0b3JlcGVhdGluZyBldmVudHMuCisKK0VWX1NORDoKKy0tLS0tLS0tLS0KK0VWX1NORCBldmVudHMgYXJlIHVzZWQgZm9yIHNlbmRpbmcgc291bmQgY29tbWFuZHMgdG8gc2ltcGxlIHNvdW5kIG91dHB1dAorZGV2aWNlcy4KKworRVZfRkY6CistLS0tLS0tLS0tCitFVl9GRiBldmVudHMgYXJlIHVzZWQgdG8gaW5pdGlhbGl6ZSBhIGZvcmNlIGZlZWRiYWNrIGNhcGFibGUgZGV2aWNlIGFuZCB0byBjYXVzZQorc3VjaCBkZXZpY2UgdG8gZmVlZGJhY2suCisKK0VWX1BXUjoKKy0tLS0tLS0tLS0KK0VWX1BXUiBldmVudHMgYXJlIGEgc3BlY2lhbCB0eXBlIG9mIGV2ZW50IHVzZWQgc3BlY2lmaWNhbGx5IGZvciBwb3dlcgorbWFuZ2VtZW50LiBJdHMgdXNhZ2UgaXMgbm90IHdlbGwgZGVmaW5lZC4gVG8gYmUgYWRkcmVzc2VkIGxhdGVyLgorCitHdWlkZWxpbmVzOgorPT09PT09PT09PQorVGhlIGd1aWRlbGluZXMgYmVsb3cgZW5zdXJlIHByb3BlciBzaW5nbGUtdG91Y2ggYW5kIG11bHRpLWZpbmdlciBmdW5jdGlvbmFsaXR5LgorRm9yIG11bHRpLXRvdWNoIGZ1bmN0aW9uYWxpdHksIHNlZSB0aGUgbXVsdGktdG91Y2gtcHJvdG9jb2wudHh0IGRvY3VtZW50IGZvcgorbW9yZSBpbmZvcm1hdGlvbi4KKworTWljZToKKy0tLS0tLS0tLS0KK1JFTF97WCxZfSBtdXN0IGJlIHJlcG9ydGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzLiBCVE5fTEVGVCBtdXN0IGJlIHVzZWQgdG8gcmVwb3J0Cit0aGUgcHJpbWFyeSBidXR0b24gcHJlc3MuIEJUTl97TUlERExFLFJJR0hULDQsNSxldGMufSBzaG91bGQgYmUgdXNlZCB0byByZXBvcnQKK2Z1cnRoZXIgYnV0dG9ucyBvZiB0aGUgZGV2aWNlLiBSRUxfV0hFRUwgYW5kIFJFTF9IV0hFRUwgc2hvdWxkIGJlIHVzZWQgdG8gcmVwb3J0CitzY3JvbGwgd2hlZWwgZXZlbnRzIHdoZXJlIGF2YWlsYWJsZS4KKworVG91Y2hzY3JlZW5zOgorLS0tLS0tLS0tLQorQUJTX3tYLFl9IG11c3QgYmUgcmVwb3J0ZWQgd2l0aCB0aGUgbG9jYXRpb24gb2YgdGhlIHRvdWNoLiBCVE5fVE9VQ0ggbXVzdCBiZQordXNlZCB0byByZXBvcnQgd2hlbiBhIHRvdWNoIGlzIGFjdGl2ZSBvbiB0aGUgc2NyZWVuLgorQlROX3tNT1VTRSxMRUZULE1JRERMRSxSSUdIVH0gbXVzdCBub3QgYmUgcmVwb3J0ZWQgYXMgdGhlIHJlc3VsdCBvZiB0b3VjaAorY29udGFjdC4gQlROX1RPT0xfPG5hbWU+IGV2ZW50cyBzaG91bGQgYmUgcmVwb3J0ZWQgd2hlcmUgcG9zc2libGUuCisKK1RyYWNrcGFkczoKKy0tLS0tLS0tLS0KK0xlZ2FjeSB0cmFja3BhZHMgdGhhdCBvbmx5IHByb3ZpZGUgcmVsYXRpdmUgcG9zaXRpb24gaW5mb3JtYXRpb24gbXVzdCByZXBvcnQKK2V2ZW50cyBsaWtlIG1pY2UgZGVzY3JpYmVkIGFib3ZlLgorCitUcmFja3BhZHMgdGhhdCBwcm92aWRlIGFic29sdXRlIHRvdWNoIHBvc2l0aW9uIG11c3QgcmVwb3J0IEFCU197WCxZfSBmb3IgdGhlCitsb2NhdGlvbiBvZiB0aGUgdG91Y2guIEJUTl9UT1VDSCBzaG91bGQgYmUgdXNlZCB0byByZXBvcnQgd2hlbiBhIHRvdWNoIGlzIGFjdGl2ZQorb24gdGhlIHRyYWNrcGFkLiBXaGVyZSBtdWx0aS1maW5nZXIgc3VwcG9ydCBpcyBhdmFpbGFibGUsIEJUTl9UT09MXzxuYW1lPiBzaG91bGQKK2JlIHVzZWQgdG8gcmVwb3J0IHRoZSBudW1iZXIgb2YgdG91Y2hlcyBhY3RpdmUgb24gdGhlIHRyYWNrcGFkLgorCitUYWJsZXRzOgorLS0tLS0tLS0tLQorQlROX1RPT0xfPG5hbWU+IGV2ZW50cyBtdXN0IGJlIHJlcG9ydGVkIHdoZW4gYSBzdHlsdXMgb3Igb3RoZXIgdG9vbCBpcyBhY3RpdmUgb24KK3RoZSB0YWJsZXQuIEFCU197WCxZfSBtdXN0IGJlIHJlcG9ydGVkIHdpdGggdGhlIGxvY2F0aW9uIG9mIHRoZSB0b29sLiBCVE5fVE9VQ0gKK3Nob3VsZCBiZSB1c2VkIHRvIHJlcG9ydCB3aGVuIHRoZSB0b29sIGlzIGluIGNvbnRhY3Qgd2l0aCB0aGUgdGFibGV0LgorQlROX3tTVFlMVVMsU1RZTFVTMn0gc2hvdWxkIGJlIHVzZWQgdG8gcmVwb3J0IGJ1dHRvbnMgb24gdGhlIHRvb2wgaXRzZWxmLiBBbnkKK2J1dHRvbiBtYXkgYmUgdXNlZCBmb3IgYnV0dG9ucyBvbiB0aGUgdGFibGV0IGV4Y2VwdCBCVE5fe01PVVNFLExFRlR9LgorQlROX3swLDEsMixldGN9IGFyZSBnb29kIGdlbmVyaWMgY29kZXMgZm9yIHVubGFiZWxlZCBidXR0b25zLiBEbyBub3QgdXNlCittZWFuaW5nZnVsIGJ1dHRvbnMsIGxpa2UgQlROX0ZPUldBUkQsIHVubGVzcyB0aGUgYnV0dG9uIGlzIGxhYmVsZWQgZm9yIHRoYXQKK3B1cnBvc2Ugb24gdGhlIGRldmljZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvam95c3RpY2stcGFycG9ydC50eHQgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2pveXN0aWNrLXBhcnBvcnQudHh0CmluZGV4IDFjODU2ZjMuLjU2ODcwYzcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW5wdXQvam95c3RpY2stcGFycG9ydC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9qb3lzdGljay1wYXJwb3J0LnR4dApAQCAtMjcyLDcgKzI3Miw3IEBACiAKICAgQWxzbywgdGhlIGNvbm5lY3Rpb24gaXMgYSBiaXQgbW9yZSBjb21wbGV4LiBZb3UnbGwgbmVlZCBhIGJ1bmNoIG9mIGRpb2RlcywKIGFuZCBvbmUgcHVsbHVwIHJlc2lzdG9yLiBGaXJzdCwgeW91IGNvbm5lY3QgdGhlIERpcmVjdGlvbnMgYW5kIHRoZSBidXR0b24KLXRoZSBzYW1lIGFzIGZvciBkYjksIGhvd2V2ZXIgd2l0aCB0aGUgZGlvZGVzIGluYmV0d2Vlbi4KK3RoZSBzYW1lIGFzIGZvciBkYjksIGhvd2V2ZXIgd2l0aCB0aGUgZGlvZGVzIGJldHdlZW4uCiAKIAkgICAgRGlvZGVzCiAocGluIDIpIC0tLS0tfDx8LS0tLT4gVXAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvcm90YXJ5LWVuY29kZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9yb3RhcnktZW5jb2Rlci50eHQKaW5kZXggOGI0MTI5ZC4uOTQzZThmNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9yb3RhcnktZW5jb2Rlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9yb3RhcnktZW5jb2Rlci50eHQKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogZCkgRmFsbGluZyBlZGdlIG9uIGNoYW5uZWwgQiwgY2hhbm5lbCBBIGluIGxvdyBzdGF0ZQogCVBhcmtpbmcgcG9zaXRpb24uIElmIHRoZSBlbmNvZGVyIGVudGVycyB0aGlzIHN0YXRlLCBhIGZ1bGwgdHJhbnNpdGlvbgotCXNob3VsZCBoYXZlIGhhcHBlbmQsIHVubGVzcyBpdCBmbGlwcGVkIGJhY2sgb24gaGFsZiB0aGUgd2F5LiBUaGUKKwlzaG91bGQgaGF2ZSBoYXBwZW5lZCwgdW5sZXNzIGl0IGZsaXBwZWQgYmFjayBvbiBoYWxmIHRoZSB3YXkuIFRoZQogCSdhcm1lZCcgc3RhdGUgdGVsbHMgdXMgYWJvdXQgdGhhdC4KIAogMi4gUGxhdGZvcm0gcmVxdWlyZW1lbnRzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lucHV0L3dhbGtlcmEwNzAxLnR4dCBiL0RvY3VtZW50YXRpb24vaW5wdXQvd2Fsa2VyYTA3MDEudHh0CmluZGV4IDhmNDI4OWUuLjU2MTM4NWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW5wdXQvd2Fsa2VyYTA3MDEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvd2Fsa2VyYTA3MDEudHh0CkBAIC03Nyw3ICs3Nyw3IEBACiAKIDI0IGJpbitvY3QgdmFsdWVzICsgMSBiaW4gdmFsdWUgPSAyNCo0KzEgYml0cyAgPSA5NyBiaXRzCiAKLShXYXJuaW5nLCBwdWxzZXMgb24gQUNLIGFyIGludmVydGVkIGJ5IHRyYW5zaXN0b3IsIGlycSBpcyByaXNlZCB1cCBvbiBzeW5jCisoV2FybmluZywgcHVsc2VzIG9uIEFDSyBhcmUgaW52ZXJ0ZWQgYnkgdHJhbnNpc3RvciwgaXJxIGlzIHJhaXNlZCB1cCBvbiBzeW5jCiB0byBiaW4gY2hhbmdlIG9yIG9jdGFsIHZhbHVlIHRvIGJpbiBjaGFuZ2UpLgogCiBCaW5hcnkgZGF0YSByZXByZXNlbnRhdGlvbnM6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lycWZsYWdzLXRyYWNpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9pcnFmbGFncy10cmFjaW5nLnR4dAppbmRleCA2YTQ0NDg3Li42N2FhNzFlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lycWZsYWdzLXRyYWNpbmcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaXJxZmxhZ3MtdHJhY2luZy50eHQKQEAgLTUzLDUgKzUzLDUgQEAKIHR1cm4gaXRzZWxmIG9mZi4gSS5lLiB0aGUgbG9jayB2YWxpZGF0b3Igd2lsbCBzdGlsbCBiZSByZWxpYWJsZS4gVGhlcmUKIHNob3VsZCBiZSBubyBjcmFzaGVzIGR1ZSB0byBpcnEtdHJhY2luZyBidWdzLiAoZXhjZXB0IGlmIHRoZSBhc3NlbWJseQogY2hhbmdlcyBicmVhayBvdGhlciBjb2RlIGJ5IG1vZGlmeWluZyBjb25kaXRpb25zIG9yIHJlZ2lzdGVycyB0aGF0Ci1zaG91bGRudCBiZSkKK3Nob3VsZG4ndCBiZSkKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pc2RuL0lOVEVSRkFDRS5DQVBJIGIvRG9jdW1lbnRhdGlvbi9pc2RuL0lOVEVSRkFDRS5DQVBJCmluZGV4IDMwOWViNWUuLjE2ODhiNWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaXNkbi9JTlRFUkZBQ0UuQ0FQSQorKysgYi9Eb2N1bWVudGF0aW9uL2lzZG4vSU5URVJGQUNFLkNBUEkKQEAgLTI0MCw3ICsyNDAsNyBAQAogbWVzc2FnZXMgYmV0d2VlbiB0aGVpciB0cmFuc3BvcnQgZW5jb2RpbmcgZGVzY3JpYmVkIGluIHRoZSBDQVBJIDIuMCBzdGFuZGFyZAogYW5kIHRoZWlyIF9jbXNnIHN0cnVjdHVyZSByZXByZXNlbnRhdGlvbi4gTm90ZSB0aGF0IGNhcGlfY21zZzJtZXNzYWdlKCkgZG9lcwogbm90IGtub3cgb3IgY2hlY2sgdGhlIHNpemUgb2YgaXRzIGRlc3RpbmF0aW9uIGJ1ZmZlci4gVGhlIGNhbGxlciBtdXN0IG1ha2UKLXN1cmUgaXQgaXMgYmlnIGVub3VnaCB0byBhY2NvbW9kYXRlIHRoZSByZXN1bHRpbmcgQ0FQSSBtZXNzYWdlLgorc3VyZSBpdCBpcyBiaWcgZW5vdWdoIHRvIGFjY29tbW9kYXRlIHRoZSByZXN1bHRpbmcgQ0FQSSBtZXNzYWdlLgogCiAKIDUuIExvd2VyIExheWVyIEludGVyZmFjZSBGdW5jdGlvbnMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2J1aWxkL2tidWlsZC50eHQgYi9Eb2N1bWVudGF0aW9uL2tidWlsZC9rYnVpbGQudHh0CmluZGV4IGYxNDMxZDAuLjdjMmE4OWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2J1aWxkL2tidWlsZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rYnVpbGQva2J1aWxkLnR4dApAQCAtMjYsMTEgKzI2LDExIEBACiAKIEFGTEFHU19NT0RVTEUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BZGR0aW9uYWwgbW9kdWxlIHNwZWNpZmljIG9wdGlvbnMgdG8gdXNlIGZvciAkKEFTKS4KK0FkZGl0aW9uYWwgbW9kdWxlIHNwZWNpZmljIG9wdGlvbnMgdG8gdXNlIGZvciAkKEFTKS4KIAogQUZMQUdTX0tFUk5FTAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFkZHRpb25hbCBvcHRpb25zIGZvciAkKEFTKSB3aGVuIHVzZWQgZm9yIGFzc2VtYmxlcgorQWRkaXRpb25hbCBvcHRpb25zIGZvciAkKEFTKSB3aGVuIHVzZWQgZm9yIGFzc2VtYmxlcgogY29kZSBmb3IgY29kZSB0aGF0IGlzIGNvbXBpbGVkIGFzIGJ1aWx0LWluLgogCiBLQ0ZMQUdTCkBAIC0zOSwxMiArMzksMTIgQEAKIAogQ0ZMQUdTX0tFUk5FTAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFkZHRpb25hbCBvcHRpb25zIGZvciAkKENDKSB3aGVuIHVzZWQgdG8gY29tcGlsZQorQWRkaXRpb25hbCBvcHRpb25zIGZvciAkKENDKSB3aGVuIHVzZWQgdG8gY29tcGlsZQogY29kZSB0aGF0IGlzIGNvbXBpbGVkIGFzIGJ1aWx0LWluLgogCiBDRkxBR1NfTU9EVUxFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQWRkdGlvbmFsIG1vZHVsZSBzcGVjaWZpYyBvcHRpb25zIHRvIHVzZSBmb3IgJChDQykuCitBZGRpdGlvbmFsIG1vZHVsZSBzcGVjaWZpYyBvcHRpb25zIHRvIHVzZSBmb3IgJChDQykuCiAKIExERkxBR1NfTU9EVUxFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCBkMmI1MTUwLi5jYzg1YTkyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtNjk5LDcgKzY5OSw3IEBACiAJZWtnZGJvYz0JW1g4NixLR0RCXSBBbGxvdyBlYXJseSBrZXJuZWwgY29uc29sZSBkZWJ1Z2dpbmcKIAkJCWVrZ2Rib2M9a2JkCiAKLQkJCVRoaXMgaXMgZGVzZ2luZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCisJCQlUaGlzIGlzIGRlc2lnbmVkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aAogCQkJdGhlIGJvb3QgYXJndW1lbnQ6IGVhcmx5cHJpbnRrPXZnYQogCiAJZWRkPQkJW0VERF0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va3ZtL21tdS50eHQgYi9Eb2N1bWVudGF0aW9uL2t2bS9tbXUudHh0CmluZGV4IDE0MmNjNTEuLmY0NmFhNTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va3ZtL21tdS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rdm0vbW11LnR4dApAQCAtMjMsNyArMjMsNyBAQAogICAgICAgICAgICAgICAgYW5kIGZyYW1lYnVmZmVyLWJhc2VkIGRpc3BsYXlzCiAtIGZvb3RwcmludDogICBrZWVwIHRoZSBhbW91bnQgb2YgcGlubmVkIGtlcm5lbCBtZW1vcnkgbG93IChtb3N0IG1lbW9yeQogICAgICAgICAgICAgICAgc2hvdWxkIGJlIHNocmlua2FibGUpCi0tIHJlbGlhYmxpdHk6ICBhdm9pZCBtdWx0aXBhZ2Ugb3IgR0ZQX0FUT01JQyBhbGxvY2F0aW9ucworLSByZWxpYWJpbGl0eTogIGF2b2lkIG11bHRpcGFnZSBvciBHRlBfQVRPTUlDIGFsbG9jYXRpb25zCiAKIEFjcm9ueW1zCiA9PT09PT09PQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rdm0vcHBjLXB2LnR4dCBiL0RvY3VtZW50YXRpb24va3ZtL3BwYy1wdi50eHQKaW5kZXggYTdmMjI0NC4uM2FiOTY5YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rdm0vcHBjLXB2LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2t2bS9wcGMtcHYudHh0CkBAIC0xMzYsNyArMTM2LDcgQEAKID09PT09PT09PT09PT09PT09PT09CiAKIFRoZSAibGQiIGFuZCAic3RkIiBpbnN0cnVjdGlvbnMgYXJlIHRyYW5zb3JtZWQgdG8gImx3eiIgYW5kICJzdHciIGluc3RydWN0aW9ucwotcmVzcGVjdGl2ZWx5IG9uIDMyIGJpdCBzeXN0ZW1zIHdpdGggYW4gYWRkZWQgb2Zmc2V0IG9mIDQgdG8gYWNjb21vZGF0ZSBmb3IgYmlnCityZXNwZWN0aXZlbHkgb24gMzIgYml0IHN5c3RlbXMgd2l0aCBhbiBhZGRlZCBvZmZzZXQgb2YgNCB0byBhY2NvbW1vZGF0ZSBmb3IgYmlnCiBlbmRpYW5uZXNzLgogCiBUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiBtYXBwaW5nIHRoZSBMaW51eCBrZXJuZWwgcGVyZm9ybXMgd2hlbiBydW5uaW5nIGFzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2t2bS90aW1la2VlcGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL2t2bS90aW1la2VlcGluZy50eHQKaW5kZXggMGM1MDMzYS4uZGY4OTQ2MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rdm0vdGltZWtlZXBpbmcudHh0CisrKyBiL0RvY3VtZW50YXRpb24va3ZtL3RpbWVrZWVwaW5nLnR4dApAQCAtODEsNyArODEsNyBAQAogIHdoZW4gdGhlIGdhdGUgaXMgaGlnaCAoYWx3YXlzIHRydWUgZm9yIHRpbWVycyAwIGFuZCAxKS4gIFdoZW4gdGhlIGNvdW50CiAgcmVhY2hlcyB6ZXJvLCB0aGUgb3V0cHV0IGdvZXMgaGlnaC4KIAotTW9kZSAxOiBUcmlnZ2VyZWQgT25lLXNob3QuICBUaGUgb3V0cHV0IGlzIGludGlhbGx5IHNldCBoaWdoLiAgV2hlbiB0aGUgZ2F0ZQorTW9kZSAxOiBUcmlnZ2VyZWQgT25lLXNob3QuICBUaGUgb3V0cHV0IGlzIGluaXRpYWxseSBzZXQgaGlnaC4gIFdoZW4gdGhlIGdhdGUKICBsaW5lIGlzIHNldCBoaWdoLCBhIGNvdW50ZG93biBpcyBpbml0aWF0ZWQgKHdoaWNoIGRvZXMgbm90IHN0b3AgaWYgdGhlIGdhdGUgaXMKICBsb3dlcmVkKSwgZHVyaW5nIHdoaWNoIHRoZSBvdXRwdXQgaXMgc2V0IGxvdy4gIFdoZW4gdGhlIGNvdW50IHJlYWNoZXMgemVybywKICB0aGUgb3V0cHV0IGdvZXMgaGlnaC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWQudHh0IGIvRG9jdW1lbnRhdGlvbi9tZC50eHQKaW5kZXggYTgxYzdiNC4uMjM2NmIxYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9tZC50eHQKQEAgLTU1Miw2ICs1NTIsMTYgQEAKICAgICAgd2l0aGluIHRoZSBhcnJheSB3aGVyZSBJTyB3aWxsIGJlIGJsb2NrZWQuICBUaGlzIGlzIGN1cnJlbnRseQogICAgICBvbmx5IHN1cHBvcnRlZCBmb3IgcmFpZDQvNS82LgogCisgICBzeW5jX21pbgorICAgc3luY19tYXgKKyAgICAgVGhlIHR3byB2YWx1ZXMsIGdpdmVuIGFzIG51bWJlcnMgb2Ygc2VjdG9ycywgaW5kaWNhdGUgYSByYW5nZQorICAgICB3aXRoaW5nIHRoZSBhcnJheSB3aGVyZSAnY2hlY2snLydyZXBhaXInIHdpbGwgb3BlcmF0ZS4gTXVzdCBiZQorICAgICBhIG11bHRpcGxlIG9mIGNodW5rX3NpemUuIFdoZW4gaXQgcmVhY2hlcyAic3luY19tYXgiIGl0IHdpbGwKKyAgICAgcGF1c2UsIHJhdGhlciB0aGFuIGNvbXBsZXRlLgorICAgICBZb3UgY2FuIHVzZSAnc2VsZWN0JyBvciAncG9sbCcgb24gInN5bmNfY29tcGxldGVkIiB0byB3YWl0IGZvcgorICAgICB0aGF0IG51bWJlciB0byByZWFjaCBzeW5jX21heC4gIFRoZW4geW91IGNhbiBlaXRoZXIgaW5jcmVhc2UKKyAgICAgInN5bmNfbWF4Iiwgb3IgY2FuIHdyaXRlICdpZGxlJyB0byAic3luY19hY3Rpb24iLgorCiAKIEVhY2ggYWN0aXZlIG1kIGRldmljZSBtYXkgYWxzbyBoYXZlIGF0dHJpYnV0ZXMgc3BlY2lmaWMgdG8gdGhlCiBwZXJzb25hbGl0eSBtb2R1bGUgdGhhdCBtYW5hZ2VzIGl0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZWRpYS1mcmFtZXdvcmsudHh0IGIvRG9jdW1lbnRhdGlvbi9tZWRpYS1mcmFtZXdvcmsudHh0CmluZGV4IGZkNDhhZGQuLjc2YTIwODcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWVkaWEtZnJhbWV3b3JrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL21lZGlhLWZyYW1ld29yay50eHQKQEAgLTE5NCw3ICsxOTQsNyBAQAogCiBMaW5rcyBhcmUgcmVwcmVzZW50ZWQgYnkgYSBzdHJ1Y3QgbWVkaWFfbGluayBpbnN0YW5jZSwgZGVmaW5lZCBpbgogaW5jbHVkZS9tZWRpYS9tZWRpYS1lbnRpdHkuaC4gRWFjaCBlbnRpdHkgc3RvcmVzIGFsbCBsaW5rcyBvcmlnaW5hdGluZyBhdCBvcgotdGFyZ2V0dGluZyBhbnkgb2YgaXRzIHBhZHMgaW4gYSBsaW5rcyBhcnJheS4gQSBnaXZlbiBsaW5rIGlzIHRodXMgc3RvcmVkCit0YXJnZXRpbmcgYW55IG9mIGl0cyBwYWRzIGluIGEgbGlua3MgYXJyYXkuIEEgZ2l2ZW4gbGluayBpcyB0aHVzIHN0b3JlZAogdHdpY2UsIG9uY2UgaW4gdGhlIHNvdXJjZSBlbnRpdHkgYW5kIG9uY2UgaW4gdGhlIHRhcmdldCBlbnRpdHkuIFRoZSBhcnJheSBpcwogcHJlLWFsbG9jYXRlZCBhbmQgZ3Jvd3MgZHluYW1pY2FsbHkgYXMgbmVlZGVkLgogCkBAIC0zNDgsNiArMzQ4LDYgQEAKIHdpdGggdGhlIE1FRElBX0xOS19GTF9EWU5BTUlDIGZsYWcuCiAKIElmIG90aGVyIG9wZXJhdGlvbnMgbmVlZCB0byBiZSBkaXNhbGxvd2VkIG9uIHN0cmVhbWluZyBlbnRpdGllcyAoc3VjaCBhcwotY2hhbmdpbmcgZW50aXRpZXMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzKSBkcml2ZXJzIGNhbiBleHBsaWN0bHkgY2hlY2sgdGhlCitjaGFuZ2luZyBlbnRpdGllcyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMpIGRyaXZlcnMgY2FuIGV4cGxpY2l0bHkgY2hlY2sgdGhlCiBtZWRpYV9lbnRpdHkgc3RyZWFtX2NvdW50IGZpZWxkIHRvIGZpbmQgb3V0IGlmIGFuIGVudGl0eSBpcyBzdHJlYW1pbmcuIFRoaXMKIG9wZXJhdGlvbiBtdXN0IGJlIGRvbmUgd2l0aCB0aGUgbWVkaWFfZGV2aWNlIGdyYXBoX211dGV4IGhlbGQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21pcHMvQVUxeHh4X0lERS5SRUFETUUgYi9Eb2N1bWVudGF0aW9uL21pcHMvQVUxeHh4X0lERS5SRUFETUUKaW5kZXggOGFjZTM1ZS4uY2M4ODdlYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9taXBzL0FVMXh4eF9JREUuUkVBRE1FCisrKyBiL0RvY3VtZW50YXRpb24vbWlwcy9BVTF4eHhfSURFLlJFQURNRQpAQCAtMzksMTMgKzM5LDEzIEBACiAgICAgICBJbnRlcmZhY2UgYW5kIExpbnV4IERldmljZSBEcml2ZXIiIEFwcGxpY2F0aW9uIE5vdGUuCiAKIAotRklMRVMsIENPTkZJR1MgQU5EIENPTVBBVEFCSUxJVFkKK0ZJTEVTLCBDT05GSUdTIEFORCBDT01QQVRJQklMSVRZCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUd28gZmlsZXMgYXJlIGludHJvZHVjZWQ6CiAKICAgYSkgJ2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTF4eHhfaWRlLmgnCi0gICAgIGNvbnRhaW5lcyA6IHN0cnVjdCBfYXVpZGVfaHdpZgorICAgICBjb250YWlucyA6IHN0cnVjdCBfYXVpZGVfaHdpZgogICAgICAgICAgICAgICAgICB0aW1pbmcgcGFyYW1ldGVycyBmb3IgUElPIG1vZGUgMC8xLzIvMy80CiAgICAgICAgICAgICAgICAgIHRpbWluZyBwYXJhbWV0ZXJzIGZvciBNV0RNQSAwLzEvMgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9pY3M5MzJzNDAxIGIvRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvaWNzOTMyczQwMQppbmRleCAwN2E3MzlmLi5iZGFjNjdmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9pY3M5MzJzNDAxCisrKyBiL0RvY3VtZW50YXRpb24vbWlzYy1kZXZpY2VzL2ljczkzMnM0MDEKQEAgLTUsNyArNSw3IEBACiAgICogSURUIElDUzkzMlM0MDEKICAgICBQcmVmaXg6ICdpY3M5MzJzNDAxJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg2OQotICAgIERhdGFzaGVldDogUHVibGljYWxseSBhdmFpbGFibGUgYXQgdGhlIElEVCB3ZWJzaXRlCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIElEVCB3ZWJzaXRlCiAKIEF1dGhvcjogRGFycmljayBKLiBXb25nCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8zYzM1OS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvM2MzNTkudHh0CmluZGV4IDRhZjgwNzEuLmRhZGZlODEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8zYzM1OS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzNjMzU5LnR4dApAQCAtNDUsNyArNDUsNyBAQAogCiBWYXJpYWJsZSBNVFUgc2l6ZToKIAotVGhlIGRyaXZlciBjYW4gaGFuZGxlIGEgTVRVIHNpemUgdXB0byBlaXRoZXIgNDUwMCBvciAxODAwMCBkZXBlbmRpbmcgdXBvbiAKK1RoZSBkcml2ZXIgY2FuIGhhbmRsZSBhIE1UVSBzaXplIHVwIHRvIGVpdGhlciA0NTAwIG9yIDE4MDAwIGRlcGVuZGluZyB1cG9uIAogcmluZyBzcGVlZC4gIFRoZSBkcml2ZXIgYWxzbyBjaGFuZ2VzIHRoZSBzaXplIG9mIHRoZSByZWNlaXZlIGJ1ZmZlcnMgYXMgcGFydAogb2YgdGhlIG10dSByZS1zaXppbmcsIHNvIGlmIHlvdSBzZXQgbXR1ID0gMTgwMDAsIHlvdSB3aWxsIG5lZWQgdG8gYmUgYWJsZQogdG8gYWxsb2NhdGUgMTYgKiAoc2tfYnVmZiB3aXRoIDE4MDAwIGJ1ZmZlciBzaXplKSBjYWxsIGl0IDE4NTAwIGJ5dGVzIHBlciByaW5nIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5pcHcyMjAwIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5pcHcyMjAwCmluZGV4IDYxNmE4ZTUuLmI3NjU4YmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9SRUFETUUuaXB3MjIwMAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUkVBRE1FLmlwdzIyMDAKQEAgLTI1Niw3ICsyNTYsNyBAQAogCiBXaGVyZSAkVkFMVUUgd291bGQgYmUgYSBudW1iZXIgaW4gdGhlIGNhc2Ugb2YgdGhpcyBzeXNmcyBlbnRyeS4gIFRoZSAKIGlucHV0IHRvIHN5c2ZzIGZpbGVzIGRvZXMgbm90IGhhdmUgdG8gYmUgYSBudW1iZXIuICBGb3IgZXhhbXBsZSwgdGhlIAotZmlybXdhcmUgbG9hZGVyIHVzZWQgYnkgaG90cGx1ZyB1dGlsaXplcyBzeXNmcyBlbnRyaWVzIGZvciB0cmFuc2ZlcmluZyAKK2Zpcm13YXJlIGxvYWRlciB1c2VkIGJ5IGhvdHBsdWcgdXRpbGl6ZXMgc3lzZnMgZW50cmllcyBmb3IgdHJhbnNmZXJyaW5nIAogdGhlIGZpcm13YXJlIGltYWdlIGZyb20gdXNlciBzcGFjZSBpbnRvIHRoZSBkcml2ZXIuCiAKIFRoZSBJbnRlbChSKSBQUk8vV2lyZWxlc3MgMjkxNUFCRyBEcml2ZXIgZm9yIExpbnV4IGV4cG9zZXMgc3lzZnMgZW50cmllcyAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dAppbmRleCBiMzZlNzQxLi5lMjcyMDJiYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dApAQCAtMzY4LDcgKzM2OCw3IEBACiAJCWdyYXR1aXRvdXMgQVJQIGlzIGxvc3QsIGNvbW11bmljYXRpb24gbWF5IGJlCiAJCWRpc3J1cHRlZC4KIAotCQlXaGVuIHRoaXMgcG9saWN5IGlzIHVzZWQgaW4gY29uanVjdGlvbiB3aXRoIHRoZSBtaWkKKwkJV2hlbiB0aGlzIHBvbGljeSBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIG1paQogCQltb25pdG9yLCBkZXZpY2VzIHdoaWNoIGFzc2VydCBsaW5rIHVwIHByaW9yIHRvIGJlaW5nCiAJCWFibGUgdG8gYWN0dWFsbHkgdHJhbnNtaXQgYW5kIHJlY2VpdmUgYXJlIHBhcnRpY3VsYXJseQogCQlzdXNjZXB0aWJsZSB0byBsb3NzIG9mIHRoZSBncmF0dWl0b3VzIEFSUCwgYW5kIGFuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY2FpZi9MaW51eC1DQUlGLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYWlmL0xpbnV4LUNBSUYudHh0CmluZGV4IDdmZTdhOWEuLmU1MmZkNjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYWlmL0xpbnV4LUNBSUYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYWlmL0xpbnV4LUNBSUYudHh0CkBAIC0xMzYsNyArMTM2LDcgQEAKICAgICAgIC0gQ0ZNVVggQ0FJRiBNdXggbGF5ZXIuIEhhbmRsZXMgbXVsdGlwbGV4aW5nIGJldHdlZW4gbXVsdGlwbGUKIAlwaHlzaWNhbCBiZWFyZXJzIGFuZCBtdWx0aXBsZSBjaGFubmVscyBzdWNoIGFzIFZFSSwgRGF0YWdyYW0sIGV0Yy4KIAlUaGUgTVVYIGtlZXBzIHRyYWNrIG9mIHRoZSBleGlzdGluZyBDQUlGIENoYW5uZWxzIGFuZAotCVBoeXNpY2FsIEluc3RhbmNlcyBhbmQgc2VsZWN0cyB0aGUgYXByb3ByaWF0ZSBpbnN0YW5jZSBiYXNlZAorCVBoeXNpY2FsIEluc3RhbmNlcyBhbmQgc2VsZWN0cyB0aGUgYXBwcm9wcmlhdGUgaW5zdGFuY2UgYmFzZWQKIAlvbiBDaGFubmVsLUlkIGFuZCBQaHlzaWNhbC1JRC4KIAogICAgICAgLSBDRkZSTUwgQ0FJRiBGcmFtaW5nIGxheWVyLiBIYW5kbGVzIEZyYW1pbmcgaS5lLiBGcmFtZSBsZW5ndGgKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYWlmL3NwaV9wb3J0aW5nLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYWlmL3NwaV9wb3J0aW5nLnR4dAppbmRleCAwY2I4Y2I5Li45ZWZkMDY4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY2FpZi9zcGlfcG9ydGluZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2NhaWYvc3BpX3BvcnRpbmcudHh0CkBAIC0xNTAsNyArMTUwLDcgQEAKIHZvaWQgc3NwaV9zaWdfeGZlcihib29sIHhmZXIsIHN0cnVjdCBjZnNwaV9kZXYgKmRldikKIHsKIAkvKiBJZiB4ZmVyIGlzIHRydWUgdGhlbiB5b3Ugc2hvdWxkIGFzc2VydCB0aGUgU1BJX0lOVCB0byBpbmRpY2F0ZSB0bwotCSAqIHRoZSBtYXN0ZXIgdGhhdCB5b3UgYXJlIHJlYWR5IHRvIHJlY2lldmUgdGhlIGRhdGEgZnJvbSB0aGUgbWFzdGVyCisJICogdGhlIG1hc3RlciB0aGF0IHlvdSBhcmUgcmVhZHkgdG8gcmVjZWl2ZSB0aGUgZGF0YSBmcm9tIHRoZSBtYXN0ZXIKIAkgKiBTUEkuIElmIHhmZXIgaXMgZmFsc2UgdGhlbiB5b3Ugc2hvdWxkIGRlLWFzc2VydCBTUElfSU5UIHRvIGluZGljYXRlCiAJICogdGhhdCB0aGUgdHJhbnNmZXIgaXMgZG9uZS4KIAkgKi8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYW4udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Nhbi50eHQKaW5kZXggNWIwNGI2Ny4uNTZjYTNiNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Nhbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Nhbi50eHQKQEAgLTI0MCw3ICsyNDAsNyBAQAogICB0aGUgdXNlciBhcHBsaWNhdGlvbiB1c2luZyB0aGUgY29tbW9uIENBTiBmaWx0ZXIgbWVjaGFuaXNtcy4gSW5zaWRlCiAgIHRoaXMgZmlsdGVyIGRlZmluaXRpb24gdGhlIChpbnRlcmVzdGVkKSB0eXBlIG9mIGVycm9ycyBtYXkgYmUKICAgc2VsZWN0ZWQuIFRoZSByZWNlcHRpb24gb2YgZXJyb3IgZnJhbWVzIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCi0gIFRoZSBmb3JtYXQgb2YgdGhlIENBTiBlcnJvciBmcmFtZSBpcyBicmllZmx5IGRlY3JpYmVkIGluIHRoZSBMaW51eAorICBUaGUgZm9ybWF0IG9mIHRoZSBDQU4gZXJyb3IgZnJhbWUgaXMgYnJpZWZseSBkZXNjcmliZWQgaW4gdGhlIExpbnV4CiAgIGhlYWRlciBmaWxlICJpbmNsdWRlL2xpbnV4L2Nhbi9lcnJvci5oIi4KIAogNC4gSG93IHRvIHVzZSBTb2NrZXQgQ0FOCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaWVlZTgwMjE1NC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaWVlZTgwMjE1NC50eHQKaW5kZXggMjNjOTk1ZS4uZjQxZWEyNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2llZWU4MDIxNTQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pZWVlODAyMTU0LnR4dApAQCAtOSw3ICs5LDcgQEAKIG9mIElFRUUgODAyLjE1LjQgLyBaaWdCZWUgLyA2TG9XUEFOIHByb3RvY29scy4gSUVFRSA4MDIuMTUuNCBpcyBhIHN0YWNrCiBvZiBwcm90b2NvbHMgZm9yIG9yZ2FuaXppbmcgTG93LVJhdGUgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3Jrcy4KIAotQ3VycmVudGx5IG9ubHkgSUVFRSA4MDIuMTUuNCBsYXllciBpcyBpbXBsZW1lbnRlZC4gV2UgaGF2ZSBjaG9vc2VuCitDdXJyZW50bHkgb25seSBJRUVFIDgwMi4xNS40IGxheWVyIGlzIGltcGxlbWVudGVkLiBXZSBoYXZlIGNob3NlbgogdG8gdXNlIHBsYWluIEJlcmtlbGV5IHNvY2tldCBBUEksIHRoZSBnZW5lcmljIExpbnV4IG5ldHdvcmtpbmcgc3RhY2sKIHRvIHRyYW5zZmVyIElFRUUgODAyLjE1LjQgbWVzc2FnZXMgYW5kIGEgc3BlY2lhbCBwcm90b2NvbCBvdmVyIGdlbmV0bGluawogZm9yIGNvbmZpZ3VyYXRpb24vbWFuYWdlbWVudApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29seW1waWMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29seW1waWMudHh0CmluZGV4IGM2NWE5NDAuLmI5NWI1YmYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9vbHltcGljLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2x5bXBpYy50eHQKQEAgLTY1LDcgKzY1LDcgQEAKIAogVmFyaWFibGUgTVRVIHNpemU6CiAKLVRoZSBkcml2ZXIgY2FuIGhhbmRsZSBhIE1UVSBzaXplIHVwdG8gZWl0aGVyIDQ1MDAgb3IgMTgwMDAgZGVwZW5kaW5nIHVwb24gCitUaGUgZHJpdmVyIGNhbiBoYW5kbGUgYSBNVFUgc2l6ZSB1cCB0byBlaXRoZXIgNDUwMCBvciAxODAwMCBkZXBlbmRpbmcgdXBvbiAKIHJpbmcgc3BlZWQuICBUaGUgZHJpdmVyIGFsc28gY2hhbmdlcyB0aGUgc2l6ZSBvZiB0aGUgcmVjZWl2ZSBidWZmZXJzIGFzIHBhcnQKIG9mIHRoZSBtdHUgcmUtc2l6aW5nLCBzbyBpZiB5b3Ugc2V0IG10dSA9IDE4MDAwLCB5b3Ugd2lsbCBuZWVkIHRvIGJlIGFibGUKIHRvIGFsbG9jYXRlIDE2ICogKHNrX2J1ZmYgd2l0aCAxODAwMCBidWZmZXIgc2l6ZSkgY2FsbCBpdCAxODUwMCBieXRlcyBwZXIgcmluZyAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wYWNrZXRfbW1hcC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGFja2V0X21tYXAudHh0CmluZGV4IDA3Mzg5NGQuLjRhY2VhNjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wYWNrZXRfbW1hcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BhY2tldF9tbWFwLnR4dApAQCAtMjIzLDcgKzIyMyw3IEBACiAKIEEgZnJhbWUgY2FuIGJlIG9mIGFueSBzaXplIHdpdGggdGhlIG9ubHkgY29uZGl0aW9uIGl0IGNhbiBmaXQgaW4gYSBibG9jay4gQSBibG9jawogY2FuIG9ubHkgaG9sZCBhbiBpbnRlZ2VyIG51bWJlciBvZiBmcmFtZXMsIG9yIGluIG90aGVyIHdvcmRzLCBhIGZyYW1lIGNhbm5vdCAKLWJlIHNwYXduZWQgYWNjcm9zcyB0d28gYmxvY2tzLCBzbyB0aGVyZSBhcmUgc29tZSBkZXRhaWxzIHlvdSBoYXZlIHRvIHRha2UgaW50byAKK2JlIHNwYXduZWQgYWNyb3NzIHR3byBibG9ja3MsIHNvIHRoZXJlIGFyZSBzb21lIGRldGFpbHMgeW91IGhhdmUgdG8gdGFrZSBpbnRvIAogYWNjb3VudCB3aGVuIGNob29zaW5nIHRoZSBmcmFtZV9zaXplLiBTZWUgIk1hcHBpbmcgYW5kIHVzZSBvZiB0aGUgY2lyY3VsYXIgCiBidWZmZXIgKHJpbmcpIi4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3MyaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3MyaW8udHh0CmluZGV4IDlkNGUwZjQuLjRiZTBjMDMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zMmlvLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvczJpby50eHQKQEAgLTM3LDcgKzM3LDcgQEAKIFRoZSBjb3JyZXNwb25kaW5nIGFkYXB0ZXIncyBMRUQgd2lsbCBibGluayBtdWx0aXBsZSB0aW1lcy4KIAogMy4JRmVhdHVyZXMgc3VwcG9ydGVkOgotYS4gSnVtYm8gZnJhbWVzLiBYZnJhbWUgSS9JSSBzdXBwb3J0cyBNVFUgdXB0byA5NjAwIGJ5dGVzLAorYS4gSnVtYm8gZnJhbWVzLiBYZnJhbWUgSS9JSSBzdXBwb3J0cyBNVFUgdXAgdG8gOTYwMCBieXRlcywKIG1vZGlmaWFibGUgdXNpbmcgaWZjb25maWcgY29tbWFuZC4KIAogYi4gT2ZmbG9hZHMuIFN1cHBvcnRzIGNoZWNrc3VtIG9mZmxvYWQoVENQL1VEUC9JUCkgb24gdHJhbnNtaXQKQEAgLTQ5LDcgKzQ5LDcgQEAKIElCTSB4U2VyaWVzKS4KIAogZC4gTVNJL01TSS1YLiBDYW4gYmUgZW5hYmxlZCBvbiBwbGF0Zm9ybXMgd2hpY2ggc3VwcG9ydCB0aGlzIGZlYXR1cmUKLShJQTY0LCBYZW9uKSByZXN1bHRpbmcgaW4gbm90aWNlYWJsZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCh1cHRvIDclCisoSUE2NCwgWGVvbikgcmVzdWx0aW5nIGluIG5vdGljZWFibGUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQodXAgdG8gNyUKIG9uIGNlcnRhaW4gcGxhdGZvcm1zKS4KIAogZS4gU3RhdGlzdGljcy4gQ29tcHJlaGVuc2l2ZSBNQUMtbGV2ZWwgYW5kIHNvZnR3YXJlIHN0YXRpc3RpY3MgZGlzcGxheWVkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGMtYWN0aW9ucy1lbnYtcnVsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RjLWFjdGlvbnMtZW52LXJ1bGVzLnR4dAppbmRleCBkY2FkZjZmLi43MGQ2Y2Y2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGMtYWN0aW9ucy1lbnYtcnVsZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90Yy1hY3Rpb25zLWVudi1ydWxlcy50eHQKQEAgLTEsNSArMSw1IEBACiAKLVRoZSAiZW52aXJvbWVudGFsIiBydWxlcyBmb3IgYXV0aG9ycyBvZiBhbnkgbmV3IHRjIGFjdGlvbnMgYXJlOgorVGhlICJlbnZpcm9ubWVudGFsIiBydWxlcyBmb3IgYXV0aG9ycyBvZiBhbnkgbmV3IHRjIGFjdGlvbnMgYXJlOgogCiAxKSBJZiB5b3Ugc3RlYWxldGggb3IgYm9ycm93ZXRoIGFueSBwYWNrZXQgdGhvdSBzaGFsdCBiZSBicmFuY2hpbmcKIGZyb20gdGhlIHJpZ2h0ZW91cyBwYXRoIGFuZCB0aG91IHNoYWx0IGNsb25ldGguCkBAIC0yMCw3ICsyMCw3IEBACiAzKSBEcm9wcGluZyBwYWNrZXRzIHlvdSBkb24ndCBvd24gaXMgYSBuby1uby4gWW91IHNpbXBseSByZXR1cm4KIFRDX0FDVF9TSE9UIHRvIHRoZSBjYWxsZXIgYW5kIHRoZXkgd2lsbCBkcm9wIGl0LgogCi1UaGUgImVudmlyb21lbnRhbCIgcnVsZXMgZm9yIGNhbGxlcnMgb2YgYWN0aW9ucyAocWRpc2NzIGV0YykgYXJlOgorVGhlICJlbnZpcm9ubWVudGFsIiBydWxlcyBmb3IgY2FsbGVycyBvZiBhY3Rpb25zIChxZGlzY3MgZXRjKSBhcmU6CiAKICopIFRob3UgYXJ0IHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIGFueXRoaW5nIHJldHVybmVkIGFzIGJlaW5nCiBUQ19BQ1RfU0hPVC9TVE9MRU4vUVVFVUVELiBJZiBub25lIG9mIFRDX0FDVF9TSE9UL1NUT0xFTi9RVUVVRUQgaXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvZGV2aWNlcy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL2RldmljZXMudHh0CmluZGV4IGYwMjNiYTYuLjE5NzFiY2YgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvZGV2aWNlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9kZXZpY2VzLnR4dApAQCAtMzY3LDcgKzM2Nyw3IEBACiBzdXNwZW5kIG1ldGhvZHMgd2VyZSBjYWxsZWQsIGZvciBleGFtcGxlIGJ5IGNvbXBsZXRlIHJlaW5pdGlhbGl6YXRpb24uCiBUaGlzIG1heSBiZSB0aGUgaGFyZGVzdCBwYXJ0LCBhbmQgdGhlIG9uZSBtb3N0IHByb3RlY3RlZCBieSBOREEnZCBkb2N1bWVudHMKIGFuZCBjaGlwIGVycmF0YS4gIEl0J3Mgc2ltcGxlc3QgaWYgdGhlIGhhcmR3YXJlIHN0YXRlIGhhc24ndCBjaGFuZ2VkIHNpbmNlCi10aGUgc3VzcGVuZCB3YXMgY2FycmllZCBvdXQsIGJ1dCB0aGF0IGNhbid0IGJlIGd1YXJhbnRlZWQgKGluIGZhY3QsIGl0IHVzdXNhbGx5Cit0aGUgc3VzcGVuZCB3YXMgY2FycmllZCBvdXQsIGJ1dCB0aGF0IGNhbid0IGJlIGd1YXJhbnRlZWQgKGluIGZhY3QsIGl0IHVzdWFsbHkKIGlzIG5vdCB0aGUgY2FzZSkuCiAKIERyaXZlcnMgbXVzdCBhbHNvIGJlIHByZXBhcmVkIHRvIG5vdGljZSB0aGF0IHRoZSBkZXZpY2UgaGFzIGJlZW4gcmVtb3ZlZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9ub3RpZmllcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9ub3RpZmllcnMudHh0CmluZGV4IGFlMWI3ZWMuLmNmOTgwNzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvbm90aWZpZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL25vdGlmaWVycy50eHQKQEAgLTI0LDcgKzI0LDcgQEAKIAkJCWJlIGZyb3plbiBpbW1lZGlhdGVseS4KIAogUE1fUE9TVF9ISUJFUk5BVElPTglUaGUgc3lzdGVtIG1lbW9yeSBzdGF0ZSBoYXMgYmVlbiByZXN0b3JlZCBmcm9tIGEKLQkJCWhpYmVybmF0aW9uIGltYWdlIG9yIGFuIGVycm9yIG9jY3VyZWQgZHVyaW5nIHRoZQorCQkJaGliZXJuYXRpb24gaW1hZ2Ugb3IgYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRoZQogCQkJaGliZXJuYXRpb24uICBEZXZpY2UgZHJpdmVycycgLnJlc3VtZSgpIGNhbGxiYWNrcyBoYXZlCiAJCQliZWVuIGV4ZWN1dGVkIGFuZCB0YXNrcyBoYXZlIGJlZW4gdGhhd2VkLgogCkBAIC0zOCw3ICszOCw3IEBACiAKIFBNX1NVU1BFTkRfUFJFUEFSRQlUaGUgc3lzdGVtIGlzIHByZXBhcmluZyBmb3IgYSBzdXNwZW5kLgogCi1QTV9QT1NUX1NVU1BFTkQJCVRoZSBzeXN0ZW0gaGFzIGp1c3QgcmVzdW1lZCBvciBhbiBlcnJvciBvY2N1cmVkIGR1cmluZworUE1fUE9TVF9TVVNQRU5ECQlUaGUgc3lzdGVtIGhhcyBqdXN0IHJlc3VtZWQgb3IgYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nCiAJCQl0aGUgc3VzcGVuZC4JRGV2aWNlIGRyaXZlcnMnIC5yZXN1bWUoKSBjYWxsYmFja3MgaGF2ZQogCQkJYmVlbiBleGVjdXRlZCBhbmQgdGFza3MgaGF2ZSBiZWVuIHRoYXdlZC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9vcHAudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9vcHAudHh0CmluZGV4IGNkNDQ1NTguLjVhZTcwYTEyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL29wcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9vcHAudHh0CkBAIC0xNzgsNyArMTc4LDcgQEAKIAkJaWYgKCFJU19FUlIob3BwKSkKIAkJCXNvY19zd2l0Y2hfdG9fZnJlcV92b2x0YWdlKGZyZXEpOwogCQllbHNlCi0JCQkvKiBkbyBzb21ldGhpbmcgd2hlbiB3ZSBjYW50IHNhdGlzZnkgdGhlIHJlcSAqLworCQkJLyogZG8gc29tZXRoaW5nIHdoZW4gd2UgY2FuJ3Qgc2F0aXNmeSB0aGUgcmVxICovCiAJCS8qIGRvIG90aGVyIHN0dWZmICovCiAJIH0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9zd3N1c3AudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9zd3N1c3AudHh0CmluZGV4IGVhNzE4ODkuLmFjMTkwY2YgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvc3dzdXNwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3N3c3VzcC50eHQKQEAgLTE5Miw3ICsxOTIsNyBAQAogZGlzdGluY3Rpb25zIGJldHdlZW4gU1VTUEVORCBhbmQgRlJFRVpFLgogCiBBOiBEb2luZyBTVVNQRU5EIHdoZW4geW91IGFyZSBhc2tlZCB0byBkbyBGUkVFWkUgaXMgYWx3YXlzIGNvcnJlY3QsCi1idXQgaXQgbWF5IGJlIHVubmVjY2Vzc2FyaWx5IHNsb3cuIElmIHlvdSB3YW50IHlvdXIgZHJpdmVyIHRvIHN0YXkgc2ltcGxlLAorYnV0IGl0IG1heSBiZSB1bm5lY2Vzc2FyaWx5IHNsb3cuIElmIHlvdSB3YW50IHlvdXIgZHJpdmVyIHRvIHN0YXkgc2ltcGxlLAogc2xvd25lc3MgbWF5IG5vdCBtYXR0ZXIgdG8geW91LiBJdCBjYW4gYWx3YXlzIGJlIGZpeGVkIGxhdGVyLgogCiBGb3IgZGV2aWNlcyBsaWtlIGRpc2sgaXQgZG9lcyBtYXR0ZXIsIHlvdSBkbyBub3Qgd2FudCB0byBzcGluZG93biBmb3IKQEAgLTIzNyw3ICsyMzcsNyBAQAogCiAgICAgICBydW5uaW5nIHN5c3RlbSwgdXNlciBhc2tzIGZvciBzdXNwZW5kLXRvLWRpc2sKIAotICAgICAgdXNlciBwcm9jZXNzZXMgYXJlIHN0b3BwZWQgKGluIGNvbW1vbiBjYXNlIHRoZXJlIGFyZSBub25lLCBidXQgd2l0aCByZXN1bWUtZnJvbS1pbml0cmQsIG5vb25lIGtub3dzKQorICAgICAgdXNlciBwcm9jZXNzZXMgYXJlIHN0b3BwZWQgKGluIGNvbW1vbiBjYXNlIHRoZXJlIGFyZSBub25lLCBidXQgd2l0aCByZXN1bWUtZnJvbS1pbml0cmQsIG5vIG9uZSBrbm93cykKIAogICAgICAgcmVhZCBpbWFnZSBmcm9tIGRpc2sKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci91c2VybGFuZC1zd3N1c3AudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci91c2VybGFuZC1zd3N1c3AudHh0CmluZGV4IDgxNjgwZjkuLjExMDFiZWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvdXNlcmxhbmQtc3dzdXNwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3VzZXJsYW5kLXN3c3VzcC50eHQKQEAgLTk4LDcgKzk4LDcgQEAKIFRoZSBkZXZpY2UncyByZWFkKCkgb3BlcmF0aW9uIGNhbiBiZSB1c2VkIHRvIHRyYW5zZmVyIHRoZSBzbmFwc2hvdCBpbWFnZSBmcm9tCiB0aGUga2VybmVsLiAgSXQgaGFzIHRoZSBmb2xsb3dpbmcgbGltaXRhdGlvbnM6CiAtIHlvdSBjYW5ub3QgcmVhZCgpIG1vcmUgdGhhbiBvbmUgdmlydHVhbCBtZW1vcnkgcGFnZSBhdCBhIHRpbWUKLS0gcmVhZCgpcyBhY2Nyb3NzIHBhZ2UgYm91bmRhcmllcyBhcmUgaW1wb3NzaWJsZSAoaWUuIGlmIHlwdSByZWFkKCkgMS8yIG9mCistIHJlYWQoKXMgYWNyb3NzIHBhZ2UgYm91bmRhcmllcyBhcmUgaW1wb3NzaWJsZSAoaWUuIGlmIHlwdSByZWFkKCkgMS8yIG9mCiAJYSBwYWdlIGluIHRoZSBwcmV2aW91cyBjYWxsLCB5b3Ugd2lsbCBvbmx5IGJlIGFibGUgdG8gcmVhZCgpCiAJX2F0XyBfbW9zdF8gMS8yIG9mIHRoZSBwYWdlIGluIHRoZSBuZXh0IGNhbGwpCiAKQEAgLTEzNyw3ICsxMzcsNyBAQAogbWVhbnMsIHN1Y2ggYXMgY2hlY2tzdW1zLCB0byBlbnN1cmUgdGhlIGludGVncml0eSBvZiB0aGUgc25hcHNob3QgaW1hZ2UuCiAKIFRoZSBzdXNwZW5kaW5nIGFuZCByZXN1bWluZyB1dGlsaXRpZXMgTVVTVCBsb2NrIHRoZW1zZWx2ZXMgaW4gbWVtb3J5LAotcHJlZmVycmFibHkgdXNpbmcgbWxvY2thbGwoKSwgYmVmb3JlIGNhbGxpbmcgU05BUFNIT1RfRlJFRVpFLgorcHJlZmVyYWJseSB1c2luZyBtbG9ja2FsbCgpLCBiZWZvcmUgY2FsbGluZyBTTkFQU0hPVF9GUkVFWkUuCiAKIFRoZSBzdXNwZW5kaW5nIHV0aWxpdHkgTVVTVCBjaGVjayB0aGUgdmFsdWUgc3RvcmVkIGJ5IFNOQVBTSE9UX0NSRUFURV9JTUFHRQogaW4gdGhlIG1lbW9yeSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5IHRoZSBsYXN0IGFyZ3VtZW50IG9mIGlvY3RsKCkgYW5kIHByb2NlZWQKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCShhKQlUaGUgc3VzcGVuZGluZyB1dGlsaXR5IE1VU1QgTk9UIGNsb3NlIHRoZSBzbmFwc2hvdCBkZXZpY2UKIAkJX3VubGVzc18gdGhlIHdob2xlIHN1c3BlbmQgcHJvY2VkdXJlIGlzIHRvIGJlIGNhbmNlbGxlZCwgaW4KIAkJd2hpY2ggY2FzZSwgaWYgdGhlIHNuYXBzaG90IGltYWdlIGhhcyBhbHJlYWR5IGJlZW4gc2F2ZWQsIHRoZQotCQlzdXNwZW5kaW5nIHV0aWxpdHkgU0hPVUxEIGRlc3Ryb3kgaXQsIHByZWZlcnJhYmx5IGJ5IHphcHBpbmcKKwkJc3VzcGVuZGluZyB1dGlsaXR5IFNIT1VMRCBkZXN0cm95IGl0LCBwcmVmZXJhYmx5IGJ5IHphcHBpbmcKIAkJaXRzIGhlYWRlci4gIElmIHRoZSBzdXNwZW5kIGlzIG5vdCB0byBiZSBjYW5jZWxsZWQsIHRoZQogCQlzeXN0ZW0gTVVTVCBiZSBwb3dlcmVkIG9mZiBvciByZWJvb3RlZCBhZnRlciB0aGUgc25hcHNob3QKIAkJaW1hZ2UgaGFzIGJlZW4gc2F2ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvaHZjcy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvaHZjcy50eHQKaW5kZXggNmQ4YmUzNC4uYTczMGNhNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2h2Y3MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9odmNzLnR4dApAQCAtNTI4LDcgKzUyOCw3IEBACiBvcmRlciB0aGFuIGhvdyB0aGV5IHdvdWxkIGJlIGV4cG9zZWQgb24gbW9kdWxlIGxvYWQuICBSZWJvb3Rpbmcgb3IKIHJlbG9hZGluZyB0aGUgbW9kdWxlIGFmdGVyIGR5bmFtaWMgYWRkaXRpb24gbWF5IHJlc3VsdCBpbiB0aGUgL2Rldi9odmNzKgogYW5kIHZ0eS1zZXJ2ZXIgY291cGxpbmcgY2hhbmdpbmcgaWYgYSB2dHktc2VydmVyIGFkYXB0ZXIgd2FzIGFkZGVkIGluIGEKLXNsb3QgaW5iZXR3ZWVuIHR3byBvdGhlciB2dHktc2VydmVyIGFkYXB0ZXJzLiAgUmVmZXIgdG8gdGhlIHNlY3Rpb24gYWJvdmUKK3Nsb3QgYmV0d2VlbiB0d28gb3RoZXIgdnR5LXNlcnZlciBhZGFwdGVycy4gIFJlZmVyIHRvIHRoZSBzZWN0aW9uIGFib3ZlCiBvbiBob3cgdG8gZGV0ZXJtaW5lIHdoaWNoIHZ0eS1zZXJ2ZXIgZ29lcyB3aXRoIHdoaWNoIC9kZXYvaHZjcyogbm9kZS4KIEhpbnQ7IGxvb2sgYXQgdGhlIHN5c2ZzICJpbmRleCIgYXR0cmlidXRlIGZvciB0aGUgdnR5LXNlcnZlci4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5scGZjIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5scGZjCmluZGV4IDVlODM3NjkuLmM1NmVjOTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubHBmYworKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLmxwZmMKQEAgLTM1Miw3ICszNTIsNyBAQAogCSAgbHBmY19zY3NpcG9ydC5jCiAJKiBJbiByZW1vdGUgcG9ydCBjaGFuZ2VzOiBubyBsb25nZXIgbnVsbGluZyB0YXJnZXQtPnBub2RlIHdoZW4KIAkgIHJlbW92aW5nIGZyb20gbWFwcGVkIGxpc3QuIFBub2RlIGdldCBudWxsZWQgd2hlbiB0aGUgbm9kZSBpcwotCSAgZnJlZWQgKGFmdGVyIG5vZGV2IHRtbykuIFRoaXMgYnVnIHdhcyBjYXVzaW5nIGkvbyByZWNpZXZlZCBpbgorCSAgZnJlZWQgKGFmdGVyIG5vZGV2IHRtbykuIFRoaXMgYnVnIHdhcyBjYXVzaW5nIGkvbyByZWNlaXZlZCBpbgogCSAgdGhlIHNtYWxsIHdpbmRvdyB3aGlsZSB0aGUgZGV2aWNlIHdhcyBibG9ja2VkIHRvIGJlIGVycm9yZWQgdy8KIAkgIGRpZF9ub19jb25uZWN0LiBXaXRoIHRoZSBmaXgsIGl0IHJldHVybnMgaG9zdF9idXN5CiAJICAocGVyIHRoZSBwcmUtcmVtb3RlIHBvcnQgY2hhbmdlcykuCkBAIC01MzAsNyArNTMwLDcgQEAKIAkgIGNvaGVyZW50IG1hcHBpbmdzLiAgTm90ZTogVGhlcmUgYXJlIG1vcmUgY29uc2lzdGVudCBtYXBwaW5ncwogCSAgdGhhdCBhcmUgdXNpbmcgcGNpX2RtYV9zeW5jIGNhbGxzLiBQcm9iYWJseSB0aGVzZSBzaG91bGQgYmUKIAkgIHJlbW92ZWQgYXMgd2VsbC4KLQkqIE1vZGlmaWVkIGxwZmNfZnJlZV9zY3NpX2J1ZiB0byBhY2NvbW9kYXRlIGFsbCB0aHJlZSBzY3NpX2J1ZgorCSogTW9kaWZpZWQgbHBmY19mcmVlX3Njc2lfYnVmIHRvIGFjY29tbW9kYXRlIGFsbCB0aHJlZSBzY3NpX2J1ZgogCSAgZnJlZSB0eXBlcyB0byBhbGxldmlhdGUgbWlzY2VsbGFuZW91cyBwYW5pY3Mgd2l0aCBjYWJsZSBwdWxsCiAJICB0ZXN0aW5nLgogCSogU2V0IGhvdHBsdWcgdG8gZGVmYXVsdCAwIGFuZCBscGZjX3RhcmdldF9yZW1vdmUgdG8gbm90IHJlbW92ZQpAQCAtNTgzLDcgKzU4Myw3IEBACiAJICBpbmNsdWRlZCBtb3JlIHRoYW4gb25jZS4KIAkqIFJlcGxhY2VkICJzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJICBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpIiB3aXRoICJtc2xlZXAodGltZW91dCkiLgotCSogRml4bm9kZSB3YXMgbG9vc2luZyBzdGFyZ2V0IHdoZW4gcmVkaXNjb3ZlcmVkLiBXZSBzYXcgbWVzc2FnZXMKKwkqIEZpeG5vZGUgd2FzIGxvc2luZyBzdGFyZ2V0IHdoZW4gcmVkaXNjb3ZlcmVkLiBXZSBzYXcgbWVzc2FnZXMKIAkgIGxpa2U6IGxwZmMgMDAwMDowNDowMi4wOiAwOjAyNjMgQ2Fubm90IGJsb2NrIHNjc2kgdGFyZ2V0IGFzIGEKIAkgIHJlc3VsdC4gIE1vdmVkIHN0YXJnZXQgZmllbGQgaW50byBzdHJ1Y3QgbHBmY190YXJnZXQgd2hpY2ggaXMKIAkgIHJlZmVyZW5jZWQgZnJvbSB0aGUgbm9kZS4KQEAgLTYwNCw3ICs2MDQsNyBAQAogCSogTWFrZSAzIGZ1bmN0aW9ucyBzdGF0aWM6IGxwZmNfZ2V0X2hiYV9zeW1fbm9kZV9uYW1lLAogCSAgbHBmY19pbnRyX3ByZXAgYW5kIGxwZmNfc2V0dXBfc2xpbV9hY2Nlc3MuICBNb3ZlIGxwZmNfaW50cl9wcmVwCiAJICBhbmQgbHBmY19zZXR1cF9zbGltX2FjY2VzcyBzbyB0aGV5J3JlIGRlZmluZWQgYmVmb3JlIGJlaW5nIHVzZWQuCi0JKiBSZW1vdmUgYW4gdW5lY2Vzc2FyeSBsaXN0X2RlbCgpIGluIGxwZmNfaGJhZGlzYy5jLgorCSogUmVtb3ZlIGFuIHVubmVjZXNzYXJ5IGxpc3RfZGVsKCkgaW4gbHBmY19oYmFkaXNjLmMuCiAJKiBTZXQgbmxwX3N0YXRlIGJlZm9yZSBjYWxsaW5nIGxwZmNfbmxwX2xpc3QoKSBzaW5jZSB0aGlzIHdpbGwKIAkgIHBvdGVudGlhbGx5IGNhbGwgZmNfdGFyZ2V0X3VuYmxvY2sgd2hpY2ggbWF5IGNhdXNlIGEgcmFjZSBpbgogCSAgcXVldWVjb21tYW5kIGJ5IHJlbGVhc2luZyBob3N0X2xvY2suCkBAIC03NTMsNyArNzUzLDcgQEAKIAkqIENoYW5nZWQgdmVyc2lvbiBudW1iZXIgdG8gOC4wLjEyCiAJKiBSZW1vdmVkIHVzZWQgI2RlZmluZXM6IERFRkFVTFRfUENJX0xBVEVOQ1lfQ0xPQ0tTIGFuZAogCSAgUENJX0xBVEVOQ1lfVkFMVUUgZnJvbSBscGZjX2h3LmguCi0JKiBDaGFuZ2VzIHRvIGFjY29tb2RhdGUgcm5pZC4KKwkqIENoYW5nZXMgdG8gYWNjb21tb2RhdGUgcm5pZC4KIAkqIEZpeCBSU0NOIGhhbmRsaW5nIHNvIFJTQ04gTlMgcXVlcmllcyBvbmx5IGVmZmVjdCBOUG9ydHMgZm91bmQgaW4KIAkgIFJTQ04gZGF0YS4KIAkqIElmIHdlIHJjdiBhIHBsb2dpIG9uIGEgTlBvcnQgcXVldWVkIHVwIGZvciBkaXNjb3ZlcnksIGNsZWFyIHRoZQpAQCAtODEzLDcgKzgxMyw3IEBACiAJICBjb3VudGVyIGluc3RlYWQsIGJyZF9ubyBpc24ndCByZXVzZWQgYW55bW9yZS4gIEFsc28gc29tZSB0aW55CiAJICB3aGl0ZXNwYWNlIGNsZWFudXBzIGluIHN1cnJvdW5kaW5nIGNvZGUuCiAJKiBSZW9yZGVyIGZ1bmN0aW9ucyBpbiBscGZjX2Vscy5jIHRvIHJlbW92ZSBuZWVkIGZvciBwcm90b3R5cGVzLgotCSogUmVtb3ZlZCB1bnNlZCBwcm90b3R5cGVzIGZyb20gbHBmY19jcnRuLmggLQorCSogUmVtb3ZlZCB1bnVzZWQgcHJvdG90eXBlcyBmcm9tIGxwZmNfY3J0bi5oIC0KIAkgIGxwZmNfaXBfdGltZW91dF9oYW5kbGVyLCBscGZjX3JlYWRfcGNpIGFuZCBscGZjX3Jldm9rZS4KIAkqIFJlbW92ZWQgc29tZSB1bnVzZWQgcHJvdG90eXBlcyBmcm9tIGxwZmNfY3J0bi5oIC0KIAkgIGxwZmNfc2NzaV9oYmFfcmVzZXQsIGxwZmNfc2NzaV9pc3N1ZV9pbnFzbiwKQEAgLTg2Myw3ICs4NjMsNyBAQAogCSogTWluaW1hbCBzdXBwb3J0IGZvciBTQ1NJIGZsYXQgc3BhY2UgYWRkcmVzc2luZy92b2x1bWUgc2V0CiAJICBhZGRyZXNzaW5nLiAgVXNlIDE2IGJpdHMgb2YgTFVOIGFkZHJlc3Mgc28gdGhhdCBmbGF0CiAJICBhZGRyZXNzaW5nL1ZTQSB3aWxsIHdvcmsuCi0JKiBDaGFuZ2VkIDIgb2NjdXJlbmNlcyBvZiBpZiggMSAhPSBmKHgpKSB0byBpZihmKHgpICE9IDEpCisJKiBDaGFuZ2VkIDIgb2NjdXJyZW5jZXMgb2YgaWYoIDEgIT0gZih4KSkgdG8gaWYoZih4KSAhPSAxKQogCSogRHJvcCBpbmNsdWRlIG9mIGxwZmNfY2ZncGFybS5oLgogCSogUmVkdWNlIHN0YWNrIHVzYWdlIG9mIGxwZmNfZmRtaV9jbWQgaW4gbHBmY19jdC5jLgogCSogQWRkIG1pbmltdW0gcmFuZ2UgY2hlY2tpbmcgcHJvcGVydHkgdG8gL3N5cyB3cml0ZS9zdG9yZQpAQCAtMTQ0OSw3ICsxNDQ5LDcgQEAKIAkqIFJlbW92ZWQgbHBmY19lbHNfY2hrX2xhdHQgZnJvbSB0aGUgbHBmY19jb25maWdfcG9zdCBmdW5jdGlvbi4KIAkgIGxwZmNfZWxzX2Noa19sYXR0IHdpbGwgZW5hYmxlIHRoZSBsaW5rIGV2ZW50IGludGVycnVwdHMgd2hlbgogCSAgZmxvZ2kgaXMgcGVuZGluZyB3aGljaCBjYXVzZXMgdHdvIGRpc2NvdmVyeSBzdGF0ZSBtYWNoaW5lcwotCSAgcnVubmluZyBwYXJhbGxlbHkuCisJICBydW5uaW5nIHBhcmFsbGVsbHkuCiAJKiBBZGQgcGNpX2Rpc2FibGVfZGV2aWNlIHRvIHVubG9hZCBwYXRoLgogCSogTW92ZSBscGZjX3NsZWVwX2V2ZW50IGZyb20gbHBmY19mY3AuYyB0byBscGZjX3V0aWxfaW9jdGwuYwogCSogQ2FsbCBkbWFfbWFwX3NpbmdsZSgpICYgcGNpX21hcF9zaW5nbGUoKSBkaXJlY3RseSBpbnN0ZWFkIG9mIHZpYQpAQCAtMTU5MCw3ICsxNTkwLDcgQEAKIAkgIEVMWF9XUklURV9IUyBFTFhfV1JJVEVfSEEgRUxYX1dSSVRFX0NBIEVMWF9SRUFEX0hDCiAJICBFTFhfUkVBRF9IUyBFTFhfUkVBRF9IQSBFTFhfUkVBRF9DQSBFTFhfUkVBRF9NQiBFTFhfUkVTRVQKIAkgIEVMWF9SRUFEX0hCQSBFTFhfSU5TVEFOQ0UgRUxYX0xJUC4gIEFsc28gaW50cm9kdWNlZAotCSAgYXR0cmlidXRlICJzZXQiIHRvIGJlIHVzZWQgaW4gY29uanVjdGlvbiB3aXRoIHRoZSBhYm92ZQorCSAgYXR0cmlidXRlICJzZXQiIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgYWJvdmUKIAkgIGF0dHJpYnV0ZXMuCiAJKiBSZW1vdmVkIERMSU5LLCBlbnF1ZSBhbmQgZGVxdWUgZGVjbGFyYXRpb25zIG5vdyB0aGF0IGNsb2NrCiAJICBkb2Vzbid0IHVzZSB0aGVtIGFueW1vcmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkCmluZGV4IDVlMDdkMzIuLmQyMDUyZmQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZApAQCAtMTY4LDcgKzE2OCw3IEBACiAKIDEuCVNvcnRlZCBvdXQgUENJIElEcyB0byByZW1vdmUgbWVnYXJhaWQgc3VwcG9ydCBvdmVybGFwcy4KIAlCYXNlZCBvbiB0aGUgcGF0Y2ggZnJvbSBEYW5pZWwsIHNvcnRlZCBvdXQgUENJIElEcyBhbG9uZyB3aXRoCi0JY2hhcmFjdG9yIG5vZGUgbmFtZSBjaGFuZ2UgZnJvbSAnbWVnYWRldicgdG8gJ21lZ2FkZXZfbGVnYWN5JyB0byBhdm9pZAorCWNoYXJhY3RlciBub2RlIG5hbWUgY2hhbmdlIGZyb20gJ21lZ2FkZXYnIHRvICdtZWdhZGV2X2xlZ2FjeScgdG8gYXZvaWQKIAljb25mbGljdC4KIAktLS0KIAlIb3BlZnVsbHkgd2UnbGwgYmUgZ2V0dGluZyB0aGUgYnVpbGQgcmVzdHJpY3Rpb24gemFwcGVkIG11Y2ggc29vbmVyLCAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubmNyNTNjOHh4IGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5uY3I1M2M4eHgKaW5kZXggOGIyNzhjMS4uOTI4OGUzZDggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubmNyNTNjOHh4CisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubmNyNTNjOHh4CkBAIC0yMDAsNyArMjAwLDcgQEAKIAkgIEJ5IGRlZmF1bHQgdGhlIGRyaXZlciB1c2VzIGJvdGggSVJRRl9TSEFSRUQgYW5kIElSUUZfRElTQUJMRUQuCiAJICBPcHRpb24gJ25jcjUzYzh4eD1pcnFtOjB4MjAnIG1heSBiZSB1c2VkIHdoZW4gYW4gSVJRIGlzIHNoYXJlZCBieSAKIAkgIGEgNTNDOFhYIGFkYXB0ZXIgYW5kIGEgbmV0d29yayBib2FyZC4KLQktIFRpbnkgbWlzcGVsbGluZyBmaXhlZCAoQUJPUlQgaW5zdGVhZCBvZiBBQlJUKS4gV2FzIGZvcnR1bmF0ZWx5IAorCS0gVGlueSBtaXNzcGVsbGluZyBmaXhlZCAoQUJPUlQgaW5zdGVhZCBvZiBBQlJUKS4gV2FzIGZvcnR1bmF0ZWx5IAogCSAgaGFybWxlc3MuCiAJLSBOZWdvdGlhdGUgU1lOQyBkYXRhIHRyYW5zZmVycyB3aXRoIENDUyBkZXZpY2VzLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLnN5bTUzYzh4eCBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cuc3ltNTNjOHh4CmluZGV4IDAyZmZiYzEuLmMxOTMzNzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cuc3ltNTNjOHh4CisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cuc3ltNTNjOHh4CkBAIC00NTcsNyArNDU3LDcgQEAKIFNhdCBEZWMgMTkgIDIxOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCiAJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjAKIAktIERlZmluZSBzb21lIG5ldyBJTyByZWdpc3RlcnMgZm9yIHRoZSA4OTYgKGlzdGF0MSwgbWJveDAsIG1ib3gxKQotCS0gUmV2YW1wIHNsaWdobHkgdGhlIFN5bWJpb3MgTlZSQU0gbGF5LW91dCBiYXNlZCBvbiB0aGUgZXhjZXJwdCBvZiAKKwktIFJldmFtcCBzbGlnaHRseSB0aGUgU3ltYmlvcyBOVlJBTSBsYXktb3V0IGJhc2VkIG9uIHRoZSBleGNlcnB0IG9mIAogCSAgdGhlIGhlYWRlciBmaWxlIEkgcmVjZWl2ZWQgZnJvbSBTeW1iaW9zLgogCS0gQ2hlY2sgdGhlIFBDSSBidXMgbnVtYmVyIGZvciB0aGUgYm9vdCBvcmRlciAoVXNpbmcgYSBmYXN0IAogCSAgUENJIGNvbnRyb2xsZXIgYmVoaW5nIGEgUENJLVBDSSBicmlkZ2Ugc2VlbXMgc3ViLW9wdGltYWwpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL2FoYTE1MngudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL2FoYTE1MngudHh0CmluZGV4IDI5Y2U2ZDguLjk0ODQ4NzMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9haGExNTJ4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvYWhhMTUyeC50eHQKQEAgLTEyNCw3ICsxMjQsNyBAQAogdGhlIHJpZ2h0IGdlb21ldHJ5IHRvIGJlIGFibGUgdG8gaW50ZXJwcmV0IGl0LgogCiBNb3Jlb3ZlciB0aGVyZSBhcmUgY2VydGFpbiBsaW1pdGF0aW9ucyB0byB0aGUgQy9IL1MgYWRkcmVzc2luZyBzY2hlbWUsCi1uYW1lbHkgdGhlIGFkZHJlc3Mgc3BhY2UgaXMgbGltaXRlZCB0byB1cHRvIDI1NSBoZWFkcywgdXB0byA2MyBzZWN0b3JzCituYW1lbHkgdGhlIGFkZHJlc3Mgc3BhY2UgaXMgbGltaXRlZCB0byB1cCB0byAyNTUgaGVhZHMsIHVwIHRvIDYzIHNlY3RvcnMKIGFuZCBhIG1heGltdW0gb2YgMTAyMyBjeWxpbmRlcnMuCiAKIFRoZSBBSEEtMTUyMiBCSU9TIGNhbGN1bGF0ZXMgdGhlIGdlb21ldHJ5IGJ5IGZpeGluZyB0aGUgbnVtYmVyIG9mIGhlYWRzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvYWljNzl4eC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvYWljNzl4eC50eHQKaW5kZXggMTZlMDU0Yy4uNjRhYzcwOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL2FpYzc5eHgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9haWM3OXh4LnR4dApAQCAtMjY3LDcgKzI2Nyw3IEBACiAgICAgICAgICAgICAgIE9wdGlvbjogdGFnX2luZm86e3t2YWx1ZVssdmFsdWUuLi5dfVsse3ZhbHVlWyx2YWx1ZS4uLl19Li4uXX0KICAgICAgICAgICBEZWZpbml0aW9uOiBTZXQgdGhlIHBlci10YXJnZXQgdGFnZ2VkIHF1ZXVlIGRlcHRoIG9uIGEKICAgICAgICAgICAgICAgICAgICAgICBwZXIgY29udHJvbGxlciBiYXNpcy4gIEJvdGggY29udHJvbGxlcnMgYW5kIHRhcmdldHMKLSAgICAgICAgICAgICAgICAgICAgICBtYXkgYmUgb21taXR0ZWQgaW5kaWNhdGluZyB0aGF0IHRoZXkgc2hvdWxkIHJldGFpbgorICAgICAgICAgICAgICAgICAgICAgIG1heSBiZSBvbWl0dGVkIGluZGljYXRpbmcgdGhhdCB0aGV5IHNob3VsZCByZXRhaW4KICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCB0YWcgZGVwdGguCiAgICAgICAgICAgICBFeGFtcGxlczogdGFnX2luZm86e3sxNiwzMiwzMiw2NCw4LDgsLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyfQogICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAwCkBAIC0yOTEsNyArMjkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmRfc3RybV9iaXRtYXNrIGlzIGEgMTYgYml0IGhleCB2YWx1ZSBpbiB3aGljaAogICAgICAgICAgICAgICAgICAgICAgIGVhY2ggYml0IHJlcHJlc2VudHMgYSB0YXJnZXQuICBTZXR0aW5nIHRoZSB0YXJnZXQncwogICAgICAgICAgICAgICAgICAgICAgIGJpdCB0byAnMScgZW5hYmxlcyByZWFkIHN0cmVhbWluZyBmb3IgdGhhdAotICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC4gIENvbnRyb2xsZXJzIG1heSBiZSBvbW1pdHRlZCBpbmRpY2F0aW5nIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuICBDb250cm9sbGVycyBtYXkgYmUgb21pdHRlZCBpbmRpY2F0aW5nIHRoYXQKICAgICAgICAgICAgICAgICAgICAgICB0aGV5IHNob3VsZCByZXRhaW4gdGhlIGRlZmF1bHQgcmVhZCBzdHJlYW1pbmcgc2V0dGluZy4KICAgICAgICAgICAgICBFeGFtcGxlOiByZF9zdHJtOnsweDAwNDF9CiAgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVyIDAKQEAgLTMxMyw3ICszMTMsNyBAQAogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgT3B0aW9uOiBkdjoge3ZhbHVlWyx2YWx1ZS4uLl19CiAgICAgICAgICAgRGVmaW5pdGlvbjogU2V0IERvbWFpbiBWYWxpZGF0aW9uIFBvbGljeSBvbiBhIHBlci1jb250cm9sbGVyIGJhc2lzLgotICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJzIG1heSBiZSBvbW1pdHRlZCBpbmRpY2F0aW5nIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVycyBtYXkgYmUgb21pdHRlZCBpbmRpY2F0aW5nIHRoYXQKICAgICAgICAgICAgICAgICAgICAgICB0aGV5IHNob3VsZCByZXRhaW4gdGhlIGRlZmF1bHQgcmVhZCBzdHJlYW1pbmcgc2V0dGluZy4KICAgICAgICAgICAgICBFeGFtcGxlOiBkdjp7LTEsMCwsMSwxLDB9CiAgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVyIDAgbGVhdmUgRFYgYXQgaXRzIGRlZmF1bHQgc2V0dGluZy4KQEAgLTM0MCw3ICszNDAsNyBAQAogICAgICAgICAgICAgICBPcHRpb246IHByZWNvbXA6IHt2YWx1ZVssdmFsdWUuLi5dfQogICAgICAgICAgIERlZmluaXRpb246IFNldCBJTyBDZWxsIHByZWNvbXBlbnNhdGlvbiB2YWx1ZSBvbiBhIHBlci1jb250cm9sbGVyCiAgICAgICAgICAgICAgICAgICAgICAgYmFzaXMuCi0gICAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlcnMgbWF5IGJlIG9tbWl0dGVkIGluZGljYXRpbmcgdGhhdAorICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJzIG1heSBiZSBvbWl0dGVkIGluZGljYXRpbmcgdGhhdAogICAgICAgICAgICAgICAgICAgICAgIHRoZXkgc2hvdWxkIHJldGFpbiB0aGUgZGVmYXVsdCBwcmVjb21wZW5zYXRpb24gc2V0dGluZy4KICAgICAgICAgICAgICBFeGFtcGxlOiBwcmVjb21wOnsweDF9CiAgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVyIDAgc2V0IHByZWNvbXBlbnNhdGlvbiB0byAxLgpAQCAtMzUzLDcgKzM1Myw3IEBACiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICBPcHRpb246IHNsZXdyYXRlOiB7dmFsdWVbLHZhbHVlLi4uXX0KICAgICAgICAgICBEZWZpbml0aW9uOiBTZXQgSU8gQ2VsbCBzbGV3IHJhdGUgb24gYSBwZXItY29udHJvbGxlciBiYXNpcy4KLSAgICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVycyBtYXkgYmUgb21taXR0ZWQgaW5kaWNhdGluZyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlcnMgbWF5IGJlIG9taXR0ZWQgaW5kaWNhdGluZyB0aGF0CiAgICAgICAgICAgICAgICAgICAgICAgdGhleSBzaG91bGQgcmV0YWluIHRoZSBkZWZhdWx0IHNsZXcgcmF0ZSBzZXR0aW5nLgogICAgICAgICAgICAgIEV4YW1wbGU6IHNsZXdyYXRlOnsweDF9CiAgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVyIDAgc2V0IHNsZXcgcmF0ZSB0byAxLgpAQCAtMzY2LDcgKzM2Niw3IEBACiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICBPcHRpb246IGFtcGxpdHVkZToge3ZhbHVlWyx2YWx1ZS4uLl19CiAgICAgICAgICAgRGVmaW5pdGlvbjogU2V0IElPIENlbGwgc2lnbmFsIGFtcGxpdHVkZSBvbiBhIHBlci1jb250cm9sbGVyIGJhc2lzLgotICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJzIG1heSBiZSBvbW1pdHRlZCBpbmRpY2F0aW5nIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVycyBtYXkgYmUgb21pdHRlZCBpbmRpY2F0aW5nIHRoYXQKICAgICAgICAgICAgICAgICAgICAgICB0aGV5IHNob3VsZCByZXRhaW4gdGhlIGRlZmF1bHQgcmVhZCBzdHJlYW1pbmcgc2V0dGluZy4KICAgICAgICAgICAgICBFeGFtcGxlOiBhbXBsaXR1ZGU6ezB4MX0KICAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMCBzZXQgYW1wbGl0dWRlIHRvIDEuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvaWJtbWNhLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9pYm1tY2EudHh0CmluZGV4IDQ1ZDYxYWQuLmFjNDFhOWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9pYm1tY2EudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9pYm1tY2EudHh0CkBAIC0zMDMsNyArMzAzLDcgQEAKICAgIChzY2IpIGFuZCBjYWxscyBhIGxvY2FsIGZ1bmN0aW9uIGlzc3VlX2NtZCgpLCB3aGljaCB3cml0ZXMgYSBzY2IgCiAgICBjb21tYW5kIGludG8gc3Vic3lzdGVtIEkvTyBwb3J0cy4gT25jZSB0aGUgc2NiIGNvbW1hbmQgaXMgY2FycmllZCBvdXQsIAogICAgdGhlIGludGVycnVwdF9oYW5kbGVyKCkgaXMgaW52b2tlZC4gSWYgYSBkZXZpY2UgaXMgZGV0ZXJtaW5lZCB0byBiZSAKLSAgIGV4aXN0YW50IGFuZCBpdCBoYXMgbm90IGFzc2lnbmVkIGFueSBsZG4sIGl0IGdldHMgb25lIGR5bmFtaWNhbGx5LgorICAgZXhpc3RlbnQgYW5kIGl0IGhhcyBub3QgYXNzaWduZWQgYW55IGxkbiwgaXQgZ2V0cyBvbmUgZHluYW1pY2FsbHkuCiAgICBGb3IgdGhpcywgdGhlIHdob2xlIHN0dWZmIGlzIGRvbmUgaW4gaWJtbWNhX3F1ZXVlY29tbWFuZCgpLgogCiAgICAyLjYgQWJvcnQgJiBSZXNldCBDb21tYW5kcwpAQCAtNzQxLDcgKzc0MSw3IEBACiAgICAgICBzb21lIGVycm9yIGFwcGVhcmVkLCBlbHNlIGl0IGlzIHVuZGVmaW5lZC4gTm93LCB0aGlzIGlzIGZpeGVkLiBCZWZvcmUKICAgICAgIGFueSBTQ0IgY29tbWFuZCBnZXRzIHF1ZXVlZCwgdGhlIHRzYi5kZXZfc3RhdHVzIGlzIHNldCB0byAwLCBzbyB0aGUgCiAgICAgICBjbWQtPnJlc3VsdCB3b24ndCBzY3JldyB1cCBMaW51eCBoaWdoZXIgbGV2ZWwgZHJpdmVycy4KLSAgIDIpIFRoZSByZXNldC1mdW5jdGlvbiBoYXMgc2xpZ2h0bHkgaW1wcm92ZWQuIFRoaXMgaXMgc3RpbGwgcGxhbmVkIGZvciAKKyAgIDIpIFRoZSByZXNldC1mdW5jdGlvbiBoYXMgc2xpZ2h0bHkgaW1wcm92ZWQuIFRoaXMgaXMgc3RpbGwgcGxhbm5lZCBmb3IgCiAgICAgICBhYm9ydC4gRHVyaW5nIHRoZSBhYm9ydCBhbmQgdGhlIHJlc2V0IGZ1bmN0aW9uLCBubyBpbnRlcnJ1cHRzIGFyZSAKICAgICAgIGFsbG93ZWQuIFRoaXMgaXMgaG93ZXZlciBxdWl0ZSBoYXJkIHRvIGNvcGUgd2l0aCwgc28gdGhlIElOVC1zdGF0dXMKICAgICAgIHJlZ2lzdGVyIGlzIHJlYWQuIFdoZW4gdGhlIGludGVycnVwdCBnZXRzIHF1ZXVlZCwgb25lIGNhbiBmaW5kIGl0cwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2ktY2hhbmdlci50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaS1jaGFuZ2VyLnR4dAppbmRleCAwMzIzOTliLi5hZGUwNDZlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaS1jaGFuZ2VyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaS1jaGFuZ2VyLnR4dApAQCAtMTAyLDcgKzEwMiw3IEBACiAKIElmIHlvdSBpbnNtb2QgdGhlIGRyaXZlciB3aXRoICJpbnNtb2QgZGVidWc9MSIsIGl0IHdpbGwgYmUgdmVyYm9zZSBhbmQKIHByaW50cyBhIGxvdCBvZiBzdHVmZiB0byB0aGUgc3lzbG9nLiAgQ29tcGlsaW5nIHRoZSBrZXJuZWwgd2l0aAotQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkgaW1wcm92ZXMgdGhlIHF1YWxpdHkgb2YgdGhlIGVycm9yIG1lc3NhZ2VzIGFsb3QKK0NPTkZJR19TQ1NJX0NPTlNUQU5UUz15IGltcHJvdmVzIHRoZSBxdWFsaXR5IG9mIHRoZSBlcnJvciBtZXNzYWdlcyBhIGxvdAogYmVjYXVzZSB0aGUga2VybmVsIHdpbGwgdHJhbnNsYXRlIHRoZSBlcnJvciBjb2RlcyBpbnRvIGh1bWFuLXJlYWRhYmxlCiBzdHJpbmdzIHRoZW4uCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX2VoLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX2VoLnR4dAppbmRleCA3YWNiZWJiLi42ZmYxNmI2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9laC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfZWgudHh0CkBAIC0yOTAsNyArMjkwLDcgQEAKIAlTQ1NJIHRyYW5zcG9ydHMvTExERHMgYXV0b21hdGljYWxseSBhY3F1aXJlIHNlbnNlIGRhdGEgb24KIAljb21tYW5kIGZhaWx1cmVzIChhdXRvc2Vuc2UpLiAgQXV0b3NlbnNlIGlzIHJlY29tbWVuZGVkIGZvcgogCXBlcmZvcm1hbmNlIHJlYXNvbnMgYW5kIGFzIHNlbnNlIGluZm9ybWF0aW9uIGNvdWxkIGdldCBvdXQgb2YKLQlzeW5jIGluYmV0d2VlbiBvY2N1cnJlbmNlIG9mIENIRUNLIENPTkRJVElPTiBhbmQgdGhpcyBhY3Rpb24uCisJc3luYyBiZXR3ZWVuIG9jY3VycmVuY2Ugb2YgQ0hFQ0sgQ09ORElUSU9OIGFuZCB0aGlzIGFjdGlvbi4KIAogCU5vdGUgdGhhdCBpZiBhdXRvc2Vuc2UgaXMgbm90IHN1cHBvcnRlZCwgc2NtZC0+c2Vuc2VfYnVmZmVyCiAJY29udGFpbnMgaW52YWxpZCBzZW5zZSBkYXRhIHdoZW4gZXJyb3ItY29tcGxldGluZyB0aGUgc2NtZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfZmNfdHJhbnNwb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX2ZjX3RyYW5zcG9ydC50eHQKaW5kZXggZTAwMTkyZC4uZjc5MjgyZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfZmNfdHJhbnNwb3J0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaV9mY190cmFuc3BvcnQudHh0CkBAIC0yOTEsNyArMjkxLDcgQEAKIFZwb3J0IHN1cHBvcnQgYnkgTExERDoKIAogICBUaGUgTExERCBpbmRpY2F0ZXMgc3VwcG9ydCBmb3IgdnBvcnRzIGJ5IHN1cHBseWluZyBhIHZwb3J0X2NyZWF0ZSgpCi0gIGZ1bmN0aW9uIGluIHRoZSB0cmFuc3BvcnQgdGVtcGxhdGUuICBUaGUgcHJlc2Vuc2Ugb2YgdGhpcyBmdW5jdGlvbiB3aWxsCisgIGZ1bmN0aW9uIGluIHRoZSB0cmFuc3BvcnQgdGVtcGxhdGUuICBUaGUgcHJlc2VuY2Ugb2YgdGhpcyBmdW5jdGlvbiB3aWxsCiAgIGNhdXNlIHRoZSBjcmVhdGlvbiBvZiB0aGUgbmV3IGF0dHJpYnV0ZXMgb24gdGhlIGZjX2hvc3QuICBBcyBwYXJ0IG9mCiAgIHRoZSBwaHlzaWNhbCBwb3J0IGNvbXBsZXRpbmcgaXRzIGluaXRpYWxpemF0aW9uIHJlbGF0aXZlIHRvIHRoZQogICB0cmFuc3BvcnQsIGl0IHNob3VsZCBzZXQgdGhlIG1heF9ucGl2X3Zwb3J0cyBhdHRyaWJ1dGUgdG8gaW5kaWNhdGUgdGhlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NlcmlhbC9tb3hhLXNtYXJ0aW8gYi9Eb2N1bWVudGF0aW9uL3NlcmlhbC9tb3hhLXNtYXJ0aW8KaW5kZXggZDEwNDQzOS4uNWQyYTMzYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zZXJpYWwvbW94YS1zbWFydGlvCisrKyBiL0RvY3VtZW50YXRpb24vc2VyaWFsL21veGEtc21hcnRpbwpAQCAtNDczLDcgKzQ3Myw3IEBACiAgICBzcGRfbm9ybWFsCSAgVXNlICAzOC40a2IgIHdoZW4gIHRoZSBhcHBsaWNhdGlvbiByZXF1ZXN0cyAzOC40a2IuCiAgICBzcGRfY3VzdAkgIFVzZSAgdGhlIGN1c3RvbSBkaXZpc29yIHRvIHNldCB0aGUgc3BlZWQgd2hlbiAgdGhlCiAJCSAgYXBwbGljYXRpb24gcmVxdWVzdHMgMzguNGtiLgotICAgZGl2aXNvcgkgIFRoaXMgb3B0aW9uIHNldCB0aGUgY3VzdG9tIGRpdmlzb24uCisgICBkaXZpc29yCSAgVGhpcyBvcHRpb24gc2V0IHRoZSBjdXN0b20gZGl2aXNpb24uCiAgICBiYXVkX2Jhc2UJICBUaGlzIG9wdGlvbiBzZXQgdGhlIGJhc2UgYmF1ZCByYXRlLgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zZXJpYWwvbl9nc20udHh0IGIvRG9jdW1lbnRhdGlvbi9zZXJpYWwvbl9nc20udHh0CmluZGV4IDM5N2Y0MWEuLmE1ZDkxMTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2VyaWFsL25fZ3NtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NlcmlhbC9uX2dzbS50eHQKQEAgLTM0LDcgKzM0LDcgQEAKIAkvKiBjb25maWd1cmUgdGhlIHNlcmlhbCBwb3J0IDogc3BlZWQsIGZsb3cgY29udHJvbCAuLi4gKi8KIAogCS8qIHNlbmQgdGhlIEFUIGNvbW1hbmRzIHRvIHN3aXRjaCB0aGUgbW9kZW0gdG8gQ01VWCBtb2RlCi0JICAgYW5kIGNoZWNrIHRoYXQgaXQncyBzdWNjZXNmdWwgKHNob3VsZCByZXR1cm4gT0spICovCisJICAgYW5kIGNoZWNrIHRoYXQgaXQncyBzdWNjZXNzZnVsIChzaG91bGQgcmV0dXJuIE9LKSAqLwogCXdyaXRlKGZkLCAiQVQrQ01VWD0wXHIiLCAxMCk7CiAKIAkvKiBleHBlcmllbmNlIHNob3dlZCB0aGF0IHNvbWUgbW9kZW1zIG5lZWQgc29tZSB0aW1lIGJlZm9yZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dAppbmRleCAxODFiYTViLi45ODIyYWZiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dApAQCAtMzIyLDcgKzMyMiw3IEBACiAgICAgInBvcnQiIG5lZWRzIHRvIG1hdGNoIHRoZSBCQVNFIEFERFJFU1MganVtcGVyIG9uIHRoZSBjYXJkICgweDIyMCBvciAweDI0MCkKICAgICBvciB0aGUgdmFsdWUgc3RvcmVkIGluIHRoZSBjYXJkJ3MgRUVQUk9NIGZvciBjYXJkcyB0aGF0IGhhdmUgYW4gRUVQUk9NIGFuZAogICAgIHRoZWlyICJDT05GSUcgTU9ERSIganVtcGVyIHNldCB0byAiRUVQUk9NIFNFVFRJTkciLiBUaGUgb3RoZXIgdmFsdWVzIGNhbgotICAgIGJlIGNob29zZW4gZnJlZWx5IGZyb20gdGhlIG9wdGlvbnMgZW51bWVyYXRlZCBhYm92ZS4KKyAgICBiZSBjaG9zZW4gZnJlZWx5IGZyb20gdGhlIG9wdGlvbnMgZW51bWVyYXRlZCBhYm92ZS4KIAogICAgIElmIGRtYTIgaXMgc3BlY2lmaWVkIGFuZCBkaWZmZXJlbnQgZnJvbSBkbWExLCB0aGUgY2FyZCB3aWxsIG9wZXJhdGUgaW4KICAgICBmdWxsLWR1cGxleCBtb2RlLiBXaGVuIGRtYTE9Mywgb25seSBkbWEyPTAgaXMgdmFsaWQgYW5kIHRoZSBvbmx5IHdheSB0bwpAQCAtMzU2LDcgKzM1Niw3IEBACiAgICAgInBvcnQiIG5lZWRzIHRvIG1hdGNoIHRoZSBCQVNFIEFERFJFU1MganVtcGVyIG9uIHRoZSBjYXJkICgweDIyMCBvciAweDI0MCkKICAgICBvciB0aGUgdmFsdWUgc3RvcmVkIGluIHRoZSBjYXJkJ3MgRUVQUk9NIGZvciBjYXJkcyB0aGF0IGhhdmUgYW4gRUVQUk9NIGFuZAogICAgIHRoZWlyICJDT05GSUcgTU9ERSIganVtcGVyIHNldCB0byAiRUVQUk9NIFNFVFRJTkciLiBUaGUgb3RoZXIgdmFsdWVzIGNhbgotICAgIGJlIGNob29zZW4gZnJlZWx5IGZyb20gdGhlIG9wdGlvbnMgZW51bWVyYXRlZCBhYm92ZS4KKyAgICBiZSBjaG9zZW4gZnJlZWx5IGZyb20gdGhlIG9wdGlvbnMgZW51bWVyYXRlZCBhYm92ZS4KIAogICAgIElmIGRtYTIgaXMgc3BlY2lmaWVkIGFuZCBkaWZmZXJlbnQgZnJvbSBkbWExLCB0aGUgY2FyZCB3aWxsIG9wZXJhdGUgaW4KICAgICBmdWxsLWR1cGxleCBtb2RlLiBXaGVuIGRtYTE9Mywgb25seSBkbWEyPTAgaXMgdmFsaWQgYW5kIHRoZSBvbmx5IHdheSB0bwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL1NCLUxpdmUtbWl4ZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL1NCLUxpdmUtbWl4ZXIudHh0CmluZGV4IGY1NjM5ZDQuLmY0YjU5ODggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9TQi1MaXZlLW1peGVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvU0ItTGl2ZS1taXhlci50eHQKQEAgLTg3LDE0ICs4NywxNCBAQAogVGhlIHJlc3VsdCBpcyBmb3J3YXJkZWQgdG8gdGhlIEFEQyBjYXB0dXJlIEZJRk8gKHRodXMgdG8gdGhlIHN0YW5kYXJkIGNhcHR1cmUKIFBDTSBkZXZpY2UpLgogCi1uYW1lPSdNdXNpYyBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKK25hbWU9J1N5bnRoIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAogCiBUaGlzIGNvbnRyb2wgaXMgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmb3IgbGVmdCBhbmQgcmlnaHQgTUlESSBGWC1idXMKIGFjY3VtdWxhdG9ycy4gQUxTQSB1c2VzIGFjY3VtdWxhdG9ycyA0IGFuZCA1IGZvciBsZWZ0IGFuZCByaWdodCBNSURJIHNhbXBsZXMuCiBUaGUgcmVzdWx0IHNhbXBsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgZnJvbnQgREFDIFBDTSBzbG90cyBvZiB0aGUgQUM5NyBjb2RlYy4KIAotbmFtZT0nTXVzaWMgQ2FwdHVyZSBWb2x1bWUnLGluZGV4PTAKLW5hbWU9J011c2ljIENhcHR1cmUgU3dpdGNoJyxpbmRleD0wCituYW1lPSdTeW50aCBDYXB0dXJlIFZvbHVtZScsaW5kZXg9MAorbmFtZT0nU3ludGggQ2FwdHVyZSBTd2l0Y2gnLGluZGV4PTAKIAogVGhlc2UgY29udHJvbHMgYXJlIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IE1JREkgRlgtYnVzCiBhY2N1bXVsYXRvci4gQUxTQSB1c2VzIGFjY3VtdWxhdG9ycyA0IGFuZCA1IGZvciBsZWZ0IGFuZCByaWdodCBQQ00uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9SRUFETUUuT1NTIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvUkVBRE1FLk9TUwppbmRleCBjNjE1ZGViLi40YmUyNTk0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9SRUFETUUuT1NTCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL1JFQURNRS5PU1MKQEAgLTEzNTIsNyArMTM1Miw3IEBACiBUaGUgUENNMjAgY29udGFpbnMgYSByYWRpbyB0dW5lciwgd2hpY2ggaXMgYWxzbyBjb250cm9sbGVkIGJ5CiBBQ0kuIFRoaXMgcmFkaW8gdHVuZXIgaXMgc3VwcG9ydGVkIGJ5IHRoZSBBQ0kgZHJpdmVyIHRvZ2V0aGVyIHdpdGggdGhlCiBtaXJvcGNtMjAubyBtb2R1bGUuIEFsc28gdGhlIDctYmFuZCBlcXVhbGl6ZXIgaXMgaW50ZWdyYXRlZAotKGxpbWl0ZWQgYnkgdGhlIE9TUy1kZXNpZ24pLiBEZXZlbG9wZW1lbnQgaGFzIHN0YXJ0ZWQgYW5kIG1heWJlCisobGltaXRlZCBieSB0aGUgT1NTLWRlc2lnbikuIERldmVsb3BtZW50IGhhcyBzdGFydGVkIGFuZCBtYXliZQogZmluaXNoZWQgZm9yIHRoZSBSRFMgZGVjb2RlciBvbiB0aGlzIGNhcmQsIHRvby4gWW91IHdpbGwgYmUgYWJsZSB0bwogcmVhZCBSYWRpb1RleHQsIHRoZSBQcm9ncmFtbWUgU2VydmljZSBuYW1lLCBQcm9ncmFtbWUgVFlwZSBhbmQKIG90aGVycy4gRXZlbiB0aGUgdjRsIHJhZGlvIG1vZHVsZSBiZW5lZml0cyBmcm9tIGl0IHdpdGggYSByZWZpbmVkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NwaS9weGEyeHggYi9Eb2N1bWVudGF0aW9uL3NwaS9weGEyeHgKaW5kZXggNjhhNGZlMy4uNDkzZGFkYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zcGkvcHhhMnh4CisrKyBiL0RvY3VtZW50YXRpb24vc3BpL3B4YTJ4eApAQCAtMTQzLDcgKzE0Myw3IEBACiBOT1RFOiB0aGUgU1BJIGRyaXZlciBjYW5ub3QgY29udHJvbCB0aGUgY2hpcCBzZWxlY3QgaWYgU1NQRlJNIGlzIHVzZWQsIHNvIHRoZQogY2hpcHNlbGVjdCBpcyBkcm9wcGVkIGFmdGVyIGVhY2ggc3BpX3RyYW5zZmVyLiAgTW9zdCBkZXZpY2VzIG5lZWQgY2hpcCBzZWxlY3QKIGFzc2VydGVkIGFyb3VuZCB0aGUgY29tcGxldGUgbWVzc2FnZS4gIFVzZSBTU1BGUk0gYXMgYSBHUElPICh0aHJvdWdoIGNzX2NvbnRyb2wpCi10byBhY2NvbW9kYXRlIHRoZXNlIGNoaXBzLgordG8gYWNjb21tb2RhdGUgdGhlc2UgY2hpcHMuCiAKIAogTlNTUCBTTEFWRSBTQU1QTEUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3BpL3NwaS1sbTcwbGxwIGIvRG9jdW1lbnRhdGlvbi9zcGkvc3BpLWxtNzBsbHAKaW5kZXggMzRhOWNmZC4uNDYzZjZkMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zcGkvc3BpLWxtNzBsbHAKKysrIGIvRG9jdW1lbnRhdGlvbi9zcGkvc3BpLWxtNzBsbHAKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogTm90ZSB0aGF0IHNpbmNlIHRoZSBMTTcwIHVzZXMgYSAiMy13aXJlIiB2YXJpYW50IG9mIFNQSSwgdGhlIFNJL1NPIHBpbgogaXMgY29ubmVjdGVkIHRvIGJvdGggcGluIEQ3IChhcyBNYXN0ZXIgT3V0KSBhbmQgU2VsZWN0IChhcyBNYXN0ZXIgSW4pCi11c2luZyBhbiBhcnJhbmdtZW50IHRoYXQgbGV0cyBlaXRoZXIgdGhlIHBhcnBvcnQgb3IgdGhlIExNNzAgcHVsbCB0aGUKK3VzaW5nIGFuIGFycmFuZ2VtZW50IHRoYXQgbGV0cyBlaXRoZXIgdGhlIHBhcnBvcnQgb3IgdGhlIExNNzAgcHVsbCB0aGUKIHBpbiBsb3cuICBUaGlzIGNhbid0IGJlIHNoYXJlZCB3aXRoIHRydWUgU1BJIGRldmljZXMsIGJ1dCBvdGhlciAzLXdpcmUKIGRldmljZXMgbWlnaHQgc2hhcmUgdGhlIHNhbWUgU0kvU08gcGluLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlbGVwaG9ueS9peGoudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWxlcGhvbnkvaXhqLnR4dAppbmRleCA0ZmIzMTRkLi5kYjk0ZmI2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlbGVwaG9ueS9peGoudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVsZXBob255L2l4ai50eHQKQEAgLTUxLDcgKzUxLDcgQEAKIFNwZWNpZmljYWxseSwgdmVyeSBvbGQgSW50ZXJuZXQgUGhvbmVKQUNLIGNhcmRzIGhhdmUgbm9uLXN0YW5kYXJkCiBHLjcyMy4xIGNvZGVjcyAoZHVlIHRvIHRoZSBlYXJseSBuYXR1cmUgb2YgdGhlIERTUHMgaW4gdGhvc2UgZGF5cykuCiBUaGUgYXV0by1jb252ZXJzaW9uIGNvZGUgdG8gYnJpbmcgdGhvc2UgY2FyZHMgaW50byBjb21wbGlhbmNlIHdpdGgKLXRvZGF5cyBzdGFuZGFyZHMgaXMgYXZhaWxhYmxlIGFzIGEgYmluYXJ5IG9ubHkgbW9kdWxlIHRvIHRob3NlIHBlb3BsZQordG9kYXkncyBzdGFuZGFyZHMgaXMgYXZhaWxhYmxlIGFzIGEgYmluYXJ5IG9ubHkgbW9kdWxlIHRvIHRob3NlIHBlb3BsZQogbmVlZGluZyBpdC4gIElmIHlvdSBib3VnaHQgeW91ciBjYXJkIGFmdGVyIDE5OTcgb3Igc28sIHlvdSBhcmUgT0sgLQogaXQncyBvbmx5IHRoZSB2ZXJ5IG9sZCBjYXJkcyB0aGF0IGFyZSBhZmZlY3RlZC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9yaW5nLWJ1ZmZlci1kZXNpZ24udHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZS9yaW5nLWJ1ZmZlci1kZXNpZ24udHh0CmluZGV4IGQyOTlmZjMuLjdkMzUwYjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHJhY2UvcmluZy1idWZmZXItZGVzaWduLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL3JpbmctYnVmZmVyLWRlc2lnbi50eHQKQEAgLTIzNyw3ICsyMzcsNyBAQAogICAgICAgfHdyaXR0ZW4gIHwKICAgICAgICstLS0tLS0tLS0rCiAgICAgICB8d3JpdHRlbiAgfAotICAgICAgKy0tLS0tLS0tLSsgIDwtLS0gbmV4dCBwb3NpdG9uIGZvciB3cml0ZSAoY3VycmVudCBjb21taXQpCisgICAgICArLS0tLS0tLS0tKyAgPC0tLSBuZXh0IHBvc2l0aW9uIGZvciB3cml0ZSAoY3VycmVudCBjb21taXQpCiAgICAgICB8IGVtcHR5ICAgfAogICAgICAgKy0tLS0tLS0tLSsKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUucHZydXNiMiBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLnB2cnVzYjIKaW5kZXggYTc0NzIwMC4uMjEzN2I1OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUucHZydXNiMgorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5wdnJ1c2IyCkBAIC0xNzIsNyArMTcyLDcgQEAKICAgICB0byBwcm92aWRlIGEgc3RyZWFtaW5nIEFQSSB1c2FibGUgYnkgYSByZWFkKCkgc3lzdGVtIGNhbGwgc3R5bGUgb2YKICAgICBJL08uICBSaWdodCBub3cgdGhpcyBpcyB0aGUgb25seSBsYXllciBvbiB0b3Agb2YgcHZydXNiMi1pby5bY2hdLAogICAgIGhvd2V2ZXIgdGhlIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJlIGhlcmUgd2FzIGludGVuZGVkIHRvIGFsbG93IGZvcgotICAgIG90aGVyIHN0eWxlcyBvZiBJL08gdG8gYmUgaW1wbGVtZW50ZWQgd2l0aCBhZGRpdG9uYWwgbW9kdWxlcywgbGlrZQorICAgIG90aGVyIHN0eWxlcyBvZiBJL08gdG8gYmUgaW1wbGVtZW50ZWQgd2l0aCBhZGRpdGlvbmFsIG1vZHVsZXMsIGxpa2UKICAgICBtbWFwKCknZWQgYnVmZmVycyBvciBzb21ldGhpbmcgZXZlbiBtb3JlIGV4b3RpYy4KIAogICBwdnJ1c2IyLW1haW4uYyAtIFRoaXMgaXMgdGhlIHRvcCBsZXZlbCBvZiB0aGUgZHJpdmVyLiAgTW9kdWxlIGxldmVsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUkVBRE1FIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1JFQURNRQppbmRleCAzYTM2N2NkLi43Y2JmNGZiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUkVBRE1FCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9SRUFETUUKQEAgLTcwLDcgKzcwLDcgQEAKIGluc3RlYWQgb2YgbWFpbGluZyBtZSBkaXJlY3RseS4gIFRoZSBjaGFuY2UgdGhhdCBzb21lb25lIHdpdGggdGhlCiBzYW1lIGNhcmQgbGlzdGVucyB0aGVyZSBpcyBtdWNoIGhpZ2hlci4uLgogCi1Gb3IgcHJvYmxlbXMgd2l0aCBzb3VuZDogIFRoZXJlIGFyZSBhbG90IG9mIGRpZmZlcmVudCBzeXN0ZW1zIHVzZWQKK0ZvciBwcm9ibGVtcyB3aXRoIHNvdW5kOiAgVGhlcmUgYXJlIGEgbG90IG9mIGRpZmZlcmVudCBzeXN0ZW1zIHVzZWQKIGZvciBUViBzb3VuZCBhbGwgb3ZlciB0aGUgd29ybGQuICBBbmQgdGhlcmUgYXJlIGFsc28gZGlmZmVyZW50IGNoaXBzCiB3aGljaCBkZWNvZGUgdGhlIGF1ZGlvIHNpZ25hbC4gIFJlcG9ydHMgYWJvdXQgc291bmQgcHJvYmxlbXMgKCJzdGVyZW8KIGRvZXMnbnQgd29yayIpIGFyZSBwcmV0dHkgdXNlbGVzcyB1bmxlc3MgeW91IGluY2x1ZGUgc29tZSBkZXRhaWxzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUkVBRE1FLmZyZWV6ZSBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9SRUFETUUuZnJlZXplCmluZGV4IDQyNTlkY2MuLjVlZGRmYTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9SRUFETUUuZnJlZXplCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9SRUFETUUuZnJlZXplCkBAIC0zMyw3ICszMyw3IEBACiAKIEkndmUgc2VlbiByZXBvcnRzIHRoYXQgYnR0diAwLjcueCBjcmFzaGVzIHdoZXJlYXMgMC44Lnggd29ya3Mgcm9jayBzb2xpZAogZm9yIHNvbWUgcGVvcGxlLiAgVGh1cyBwcm9iYWJseSBhIHNtYWxsIGJ1Z2xldCBsZWZ0IHNvbWV3aGVyZSBpbiBidHR2Ci0wLjcueC4gIEkgaGF2ZSBubyBpZGVhIHdoZXJlIGV4YWN0bHksIGl0IHdvcmtzIHN0YWJsZSBmb3IgbWUgYW5kIGFsb3Qgb2YKKzAuNy54LiAgSSBoYXZlIG5vIGlkZWEgd2hlcmUgZXhhY3RseSwgaXQgd29ya3Mgc3RhYmxlIGZvciBtZSBhbmQgYSBsb3Qgb2YKIG90aGVyIHBlb3BsZS4gIEJ1dCBpbiBjYXNlIHlvdSBoYXZlIHByb2JsZW1zIHdpdGggdGhlIDAuNy54IHZlcnNpb25zIHlvdQogY2FuIGdpdmUgMC44LnggYSB0cnkgLi4uCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9Tb3VuZC1GQVEgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvU291bmQtRkFRCmluZGV4IGJjNWU0MWQuLjM5NWY2YzYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9Tb3VuZC1GQVEKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1NvdW5kLUZBUQpAQCAtMiw3ICsyLDcgQEAKIGJ0dHYgYW5kIHNvdW5kIG1pbmkgaG93dG8KID09PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhlcmUgYXJlIGFsb3Qgb2YgZGlmZmVyZW50IGJ0ODQ4Lzg0OS84NzgvODc5IGJhc2VkIGJvYXJkcyBhdmFpbGFibGUuCitUaGVyZSBhcmUgYSBsb3Qgb2YgZGlmZmVyZW50IGJ0ODQ4Lzg0OS84NzgvODc5IGJhc2VkIGJvYXJkcyBhdmFpbGFibGUuCiBNYWtpbmcgdmlkZW8gd29yayBvZnRlbiBpcyBub3QgYSBiaWcgZGVhbCwgYmVjYXVzZSB0aGlzIGlzIGhhbmRsZWQKIGNvbXBsZXRlbHkgYnkgdGhlIGJ0OHh4IGNoaXAsIHdoaWNoIGlzIGNvbW1vbiBvbiBhbGwgYm9hcmRzLiAgQnV0CiBzb3VuZCBpcyBoYW5kbGVkIGluIHNsaWdodGx5IGRpZmZlcmVudCB3YXlzIG9uIGVhY2ggYm9hcmQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3B4YV9jYW1lcmEudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9weGFfY2FtZXJhLnR4dAppbmRleCA0ZjZkMGNhLi41MWVkMTU3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3B4YV9jYW1lcmEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvcHhhX2NhbWVyYS50eHQKQEAgLTg0LDEyICs4NCwxMiBAQAogICAgICAgIHRyYW5zZmVyIGlzIG5vdCBzdGFydGVkLiBPbiAiRW5kIE9mIEZyYW1lIiBpbnRlcnJ1cHQsIHRoZSBpcnEgaGFuZGxlcgogICAgICAgIHN0YXJ0cyB0aGUgRE1BIGNoYWluLgogICAgICAtIGNhcHR1cmUgb2Ygb25lIHZpZGVvYnVmZmVyCi0gICAgICAgVGhlIERNQSBjaGFpbiBzdGFydHMgdHJhbnNmZXJpbmcgZGF0YSBpbnRvIHZpZGVvYnVmZmVyIFJBTSBwYWdlcy4KLSAgICAgICBXaGVuIGFsbCBwYWdlcyBhcmUgdHJhbnNmZXJlZCwgdGhlIERNQSBpcnEgaXMgcmFpc2VkIG9uICJFTkRJTlRSIiBzdGF0dXMKKyAgICAgICBUaGUgRE1BIGNoYWluIHN0YXJ0cyB0cmFuc2ZlcnJpbmcgZGF0YSBpbnRvIHZpZGVvYnVmZmVyIFJBTSBwYWdlcy4KKyAgICAgICBXaGVuIGFsbCBwYWdlcyBhcmUgdHJhbnNmZXJyZWQsIHRoZSBETUEgaXJxIGlzIHJhaXNlZCBvbiAiRU5ESU5UUiIgc3RhdHVzCiAgICAgIC0gZmluaXNoaW5nIG9uZSB2aWRlb2J1ZmZlcgogICAgICAgIFRoZSBETUEgaXJxIGhhbmRsZXIgbWFya3MgdGhlIHZpZGVvYnVmZmVyIGFzICJkb25lIiwgYW5kIHJlbW92ZXMgaXQgZnJvbQogICAgICAgIHRoZSBhY3RpdmUgcnVubmluZyBxdWV1ZQotICAgICAgIE1lYW53aGlsZSwgdGhlIG5leHQgdmlkZW9idWZmZXIgKGlmIHRoZXJlIGlzIG9uZSksIGlzIHRyYW5zZmVyZWQgYnkgRE1BCisgICAgICAgTWVhbndoaWxlLCB0aGUgbmV4dCB2aWRlb2J1ZmZlciAoaWYgdGhlcmUgaXMgb25lKSwgaXMgdHJhbnNmZXJyZWQgYnkgRE1BCiAgICAgIC0gZmluaXNoaW5nIHRoZSBsYXN0IHZpZGVvYnVmZmVyCiAgICAgICAgT24gdGhlIERNQSBpcnEgb2YgdGhlIGxhc3QgdmlkZW9idWZmZXIsIHRoZSBRQ0kgaXMgc3RvcHBlZC4KIApAQCAtMTAxLDcgKzEwMSw3IEBACiAKICAgICAgVGhpcyBzdHJ1Y3R1cmUgaXMgcG9pbnRlZCBieSBkbWEtPnNnX2NwdS4KICAgICAgVGhlIGRlc2NyaXB0b3JzIGFyZSB1c2VkIGFzIGZvbGxvd3MgOgotICAgICAgLSBkZXNjLXNnW2ldOiBpLXRoIGRlc2NyaXB0b3IsIHRyYW5zZmVyaW5nIHRoZSBpLXRoIHNnCisgICAgICAtIGRlc2Mtc2dbaV06IGktdGggZGVzY3JpcHRvciwgdHJhbnNmZXJyaW5nIHRoZSBpLXRoIHNnCiAgICAgICAgIGVsZW1lbnQgdG8gdGhlIHZpZGVvIGJ1ZmZlciBzY2F0dGVyIGdhdGhlcgogICAgICAgLSBmaW5pc2hlcjogaGFzIGRkYWRyPURBRERSX1NUT1AsIGRjbWQ9RU5ESVJRRU4KICAgICAgIC0gbGlua2VyOiBoYXMgZGRhZHI9IGRlc2Mtc2dbMF0gb2YgbmV4dCB2aWRlbyBidWZmZXIsIGRjbWQ9MApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zaF9tb2JpbGVfY2V1X2NhbWVyYS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NoX21vYmlsZV9jZXVfY2FtZXJhLnR4dAppbmRleCBjYjQ3ZTcyLi4xZTk2Y2U2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NoX21vYmlsZV9jZXVfY2FtZXJhLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NoX21vYmlsZV9jZXVfY2FtZXJhLnR4dApAQCAtMzcsNyArMzcsNyBAQAogLTEnLQogCiBJbiB0aGUgYWJvdmUgY2hhcnQgbWludXNlcyBhbmQgc2xhc2hlcyByZXByZXNlbnQgInJlYWwiIGRhdGEgYW1vdW50cywgcG9pbnRzIGFuZAotYWNjZW50cyByZXByZXNlbnQgInVzZWZ1bCIgZGF0YSwgYmFzaWNhbGx5LCBDRVUgc2NhbGVkIGFtZCBjcm9wcGVkIG91dHB1dCwKK2FjY2VudHMgcmVwcmVzZW50ICJ1c2VmdWwiIGRhdGEsIGJhc2ljYWxseSwgQ0VVIHNjYWxlZCBhbmQgY3JvcHBlZCBvdXRwdXQsCiBtYXBwZWQgYmFjayBvbnRvIHRoZSBjbGllbnQncyBzb3VyY2UgcGxhbmUuCiAKIFN1Y2ggYSBjb25maWd1cmF0aW9uIGNhbiBiZSBwcm9kdWNlZCBieSB1c2VyIHJlcXVlc3RzOgpAQCAtNjUsNyArNjUsNyBAQAogCiAxLiBDYWxjdWxhdGUgY3VycmVudCBzZW5zb3Igc2NhbGVzOgogCi0Jc2NhbGVfcyA9ICgoMycpIC0gKDMpKSAvICgoMicpIC0gKDIpKQorCXNjYWxlX3MgPSAoKDInKSAtICgyKSkgLyAoKDMnKSAtICgzKSkKIAogMi4gQ2FsY3VsYXRlICJlZmZlY3RpdmUiIGlucHV0IGNyb3AgKHNlbnNvciBzdWJ3aW5kb3cpIC0gQ0VVIGNyb3Agc2NhbGVkIGJhY2sgYXQKIGN1cnJlbnQgc2Vuc29yIHNjYWxlcyBvbnRvIGlucHV0IHdpbmRvdyAtIHRoaXMgaXMgdXNlciBTX0NST1A6CkBAIC04MCw3ICs4MCw3IEBACiA0LiBDYWxjdWxhdGUgc2Vuc29yIG91dHB1dCB3aW5kb3cgYnkgYXBwbHlpbmcgY29tYmluZWQgc2NhbGVzIHRvIHJlYWwgaW5wdXQKIHdpbmRvdzoKIAotCXdpZHRoX3Nfb3V0ID0gKCgyJykgLSAoMikpIC8gc2NhbGVfY29tYgorCXdpZHRoX3Nfb3V0ID0gKCg3JykgLSAoNykpID0gKCgyJykgLSAoMikpIC8gc2NhbGVfY29tYgogCiA1LiBBcHBseSBpdGVyYXRpdmUgc2Vuc29yIFNfRk1UIGZvciBzZW5zb3Igb3V0cHV0IHdpbmRvdy4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dAppbmRleCAzYjE1NjA4Li5jZjIxZjdhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dApAQCAtMzQzLDcgKzM0Myw3IEBACiAJZXJyID0gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIodjRsMl9kZXYsIDAsIGNvcmUsIGdfY2hpcF9pZGVudCwgJmNoaXApOwogCiBBbnkgZXJyb3IgZXhjZXB0IC1FTk9JT0NUTENNRCB3aWxsIGV4aXQgdGhlIGxvb3Agd2l0aCB0aGF0IGVycm9yLiBJZiBubwotZXJyb3JzIChleGNlcHQgLUVOT0lPQ1RMQ01EKSBvY2N1cmVkLCB0aGVuIDAgaXMgcmV0dXJuZWQuCitlcnJvcnMgKGV4Y2VwdCAtRU5PSU9DVExDTUQpIG9jY3VycmVkLCB0aGVuIDAgaXMgcmV0dXJuZWQuCiAKIFRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYm90aCBjYWxscyBpcyBhIGdyb3VwIElELiBJZiAwLCB0aGVuIGFsbCBzdWJkZXZzIGFyZQogY2FsbGVkLiBJZiBub24temVybywgdGhlbiBvbmx5IHRob3NlIHdob3NlIGdyb3VwIElEIG1hdGNoIHRoYXQgdmFsdWUgd2lsbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9hY3RpdmVfbW0udHh0IGIvRG9jdW1lbnRhdGlvbi92bS9hY3RpdmVfbW0udHh0CmluZGV4IDRlZTFmNjQuLmRiZjQ1ODEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vYWN0aXZlX21tLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL2FjdGl2ZV9tbS50eHQKQEAgLTc0LDcgKzc0LDcgQEAKIGFuZCB0aGluZ3MgbGlrZSB0aGF0KS4KIAogQW55d2F5LCBJIHB1dCBhIHByZS1wYXRjaC0yLjMuMTMtMSBvbiBmdHAua2VybmVsLm9yZyBqdXN0IGEgbW9tZW50IGFnbywKLWJlY2F1c2UgaXQgc2xpZ2h0bHkgY2hhbmdlcyB0aGUgaW50ZXJmYWNlcyB0byBhY2NvbW9kYXRlIHRoZSBhbHBoYSAod2hvCitiZWNhdXNlIGl0IHNsaWdodGx5IGNoYW5nZXMgdGhlIGludGVyZmFjZXMgdG8gYWNjb21tb2RhdGUgdGhlIGFscGhhICh3aG8KIHdvdWxkIGhhdmUgdGhvdWdodCBpdCwgYnV0IHRoZSBhbHBoYSBhY3R1YWxseSBlbmRzIHVwIGhhdmluZyBvbmUgb2YgdGhlCiB1Z2xpZXN0IGNvbnRleHQgc3dpdGNoIGNvZGVzIC0gdW5saWtlIHRoZSBvdGhlciBhcmNoaXRlY3R1cmVzIHdoZXJlIHRoZSBNTQogYW5kIHJlZ2lzdGVyIHN0YXRlIGlzIHNlcGFyYXRlLCB0aGUgYWxwaGEgUEFMY29kZSBqb2lucyB0aGUgdHdvLCBhbmQgeW91CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL2h1Z2V0bGJwYWdlLnR4dCBiL0RvY3VtZW50YXRpb24vdm0vaHVnZXRsYnBhZ2UudHh0CmluZGV4IDQ1NzYzNGMuLmY4NTUxYjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vaHVnZXRsYnBhZ2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdm0vaHVnZXRsYnBhZ2UudHh0CkBAIC03Miw3ICs3Miw3IEBACiBhbGxvY2F0aW5nIGh1Z2UgcGFnZXMgYXMgbWVtb3J5IGhhcyBub3QgeWV0IGJlY29tZSBmcmFnbWVudGVkLgogCiBTb21lIHBsYXRmb3JtcyBzdXBwb3J0IG11bHRpcGxlIGh1Z2UgcGFnZSBzaXplcy4gIFRvIGFsbG9jYXRlIGh1Z2UgcGFnZXMKLW9mIGEgc3BlY2lmaWMgc2l6ZSwgb25lIG11c3QgcHJlY2VlZCB0aGUgaHVnZSBwYWdlcyBib290IGNvbW1hbmQgcGFyYW1ldGVycworb2YgYSBzcGVjaWZpYyBzaXplLCBvbmUgbXVzdCBwcmVjZWRlIHRoZSBodWdlIHBhZ2VzIGJvb3QgY29tbWFuZCBwYXJhbWV0ZXJzCiB3aXRoIGEgaHVnZSBwYWdlIHNpemUgc2VsZWN0aW9uIHBhcmFtZXRlciAiaHVnZXBhZ2Vzej08c2l6ZT4iLiAgPHNpemU+IG11c3QKIGJlIHNwZWNpZmllZCBpbiBieXRlcyB3aXRoIG9wdGlvbmFsIHNjYWxlIHN1ZmZpeCBba0ttTWdHXS4gIFRoZSBkZWZhdWx0IGh1Z2UKIHBhZ2Ugc2l6ZSBtYXkgYmUgc2VsZWN0ZWQgd2l0aCB0aGUgImRlZmF1bHRfaHVnZXBhZ2Vzej08c2l6ZT4iIGJvb3QgcGFyYW1ldGVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9vdmVyY29tbWl0LWFjY291bnRpbmcgYi9Eb2N1bWVudGF0aW9uL3ZtL292ZXJjb21taXQtYWNjb3VudGluZwppbmRleCAyMWM3YjFmLi43MDZkN2VkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZtL292ZXJjb21taXQtYWNjb3VudGluZworKysgYi9Eb2N1bWVudGF0aW9uL3ZtL292ZXJjb21taXQtYWNjb3VudGluZwpAQCAtNCw3ICs0LDcgQEAKIAkJYWRkcmVzcyBzcGFjZSBhcmUgcmVmdXNlZC4gVXNlZCBmb3IgYSB0eXBpY2FsIHN5c3RlbS4gSXQKIAkJZW5zdXJlcyBhIHNlcmlvdXNseSB3aWxkIGFsbG9jYXRpb24gZmFpbHMgd2hpbGUgYWxsb3dpbmcKIAkJb3ZlcmNvbW1pdCB0byByZWR1Y2Ugc3dhcCB1c2FnZS4gIHJvb3QgaXMgYWxsb3dlZCB0byAKLQkJYWxsb2NhdGUgc2xpZ2hseSBtb3JlIG1lbW9yeSBpbiB0aGlzIG1vZGUuIFRoaXMgaXMgdGhlIAorCQlhbGxvY2F0ZSBzbGlnaHRseSBtb3JlIG1lbW9yeSBpbiB0aGlzIG1vZGUuIFRoaXMgaXMgdGhlIAogCQlkZWZhdWx0LgogCiAxCS0JQWx3YXlzIG92ZXJjb21taXQuIEFwcHJvcHJpYXRlIGZvciBzb21lIHNjaWVudGlmaWMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdzEvc2xhdmVzL3cxX2RzMjQyMyBiL0RvY3VtZW50YXRpb24vdzEvc2xhdmVzL3cxX2RzMjQyMwppbmRleCA5MGE2NWQyLi4zZjk4YjUwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3cxL3NsYXZlcy93MV9kczI0MjMKKysrIGIvRG9jdW1lbnRhdGlvbi93MS9zbGF2ZXMvdzFfZHMyNDIzCkBAIC0yMSw4ICsyMSw4IEBACiAKIEVhY2ggbGluZXMgd2lsbCBjb250YWluIHRoZSB2YWx1ZXMgb2YgNDIgYnl0ZXMgcmVhZCBmcm9tIHRoZSBjb3VudGVyIGFuZAogbWVtb3J5IHBhZ2UgYWxvbmcgdGhlIGNyYz1ZRVMgb3IgTk8gZm9yIGluZGljYXRpbmcgd2hldGhlciB0aGUgcmVhZCBvcGVyYXRpb24KLXdhcyBzdWNjZXNzZnVsbCBhbmQgQ1JDIG1hdGNoZWQuCi1JZiB0aGUgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsbCwgdGhlcmUgaXMgYWxzbyBpbiB0aGUgZW5kIG9mIGVhY2ggbGluZQord2FzIHN1Y2Nlc3NmdWwgYW5kIENSQyBtYXRjaGVkLgorSWYgdGhlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bCwgdGhlcmUgaXMgYWxzbyBpbiB0aGUgZW5kIG9mIGVhY2ggbGluZQogYSBjb3VudGVyIHZhbHVlIGV4cHJlc3NlZCBhcyBhbiBpbnRlZ2VyIGFmdGVyIGM9CiAKIE1lYW5pbmcgb2YgNDIgYnl0ZXMgcmVwcmVzZW50ZWQgaXMgZm9sbG93aW5nOgpAQCAtMzQsNyArMzQsNyBAQAogIC0gY3JjPVlFUy9OTyBpbmRpY2F0aW5nIHdoZXRoZXIgcmVhZCB3YXMgb2sgYW5kIGNyYyBtYXRjaGVkCiAgLSBjPTxpbnQ+IGN1cnJlbnQgY291bnRlciB2YWx1ZQogCi1leGFtcGxlIGZyb20gdGhlIHN1Y2Nlc3NmdWxsIHJlYWQ6CitleGFtcGxlIGZyb20gdGhlIHN1Y2Nlc3NmdWwgcmVhZDoKIDAwIDAyIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDZkIDM4IDAwIGZmIGZmIDAwIDAwIGZlIGZmIDAwIDAwIGZmIGZmIDAwIDAwIGZmIGZmIDAwIDAwIGZmIGZmIDAwIDAwIGZmIGZmIDAwIDAwIGZmIGZmIDAwIDAwIGZmIGZmIGNyYz1ZRVMgYz0yCiAwMCAwMiAwMCAwMCAwMCAwMCAwMCAwMCAwMCBlMCAxZiAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiAwMCAwMCBmZiBmZiBjcmM9WUVTIGM9MgogMDAgMjkgYzYgNWQgMTggMDAgMDAgMDAgMDAgMDQgMzcgMDAgZmYgZmYgMDAgMDAgZmYgZmYgMDAgMDAgZmYgZmYgMDAgMDAgZmYgZmYgMDAgMDAgZmYgZmYgMDAgMDAgZmYgZmYgMDAgMDAgZmYgZmYgMDAgMDAgZmYgZmYgY3JjPVlFUyBjPTQwODc5ODc2MQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi93MS93MS5uZXRsaW5rIGIvRG9jdW1lbnRhdGlvbi93MS93MS5uZXRsaW5rCmluZGV4IDgwNDQ0NWYuLmY1OWEzMTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdzEvdzEubmV0bGluaworKysgYi9Eb2N1bWVudGF0aW9uL3cxL3cxLm5ldGxpbmsKQEAgLTgxLDcgKzgxLDcgQEAKIGZvcm1hdDoKIAogCWNuX21zZyAoQ05fVzFfSURYLkNOX1cxX1ZBTCBhcyBpZCwgbGVuIGlzIGVxdWFsIHRvIHNpemVvZihzdHJ1Y3QKLQl3MV9uZXRsaW5rX21zZykgcGx1cyBudW1iZXIgb2YgbWFzdGVycyBtdWx0aXBsZWQgYnkgNCkKKwl3MV9uZXRsaW5rX21zZykgcGx1cyBudW1iZXIgb2YgbWFzdGVycyBtdWx0aXBsaWVkIGJ5IDQpCiAJdzFfbmV0bGlua19tc2cgKHR5cGU6IFcxX0xJU1RfTUFTVEVSUywgbGVuIGlzIGVxdWFsIHRvCiAJCW51bWJlciBvZiBtYXN0ZXJzIG11bHRpcGxpZWQgYnkgNCAodTMyIHNpemUpKQogCWlkMCAuLi4gaWROCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3dhdGNoZG9nL2hwd2R0LnR4dCBiL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvaHB3ZHQudHh0CmluZGV4IDljMjRkNWYuLjk0ODgwNzggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvaHB3ZHQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vd2F0Y2hkb2cvaHB3ZHQudHh0CkBAIC04LDcgKzgsNyBAQAogIFRoZSBIUCBpTE8yIE5NSSBXYXRjaGRvZyBkcml2ZXIgaXMgYSBrZXJuZWwgbW9kdWxlIHRoYXQgcHJvdmlkZXMgYmFzaWMKICB3YXRjaGRvZyBmdW5jdGlvbmFsaXR5IGFuZCB0aGUgYWRkZWQgYmVuZWZpdCBvZiBOTUkgc291cmNpbmcuIEJvdGggdGhlCiAgd2F0Y2hkb2cgZnVuY3Rpb25hbGl0eSBhbmQgdGhlIE5NSSBzb3VyY2luZyBjYXBhYmlsaXR5IG5lZWQgdG8gYmUgZW5hYmxlZAotIGJ5IHRoZSB1c2VyLiBSZW1lbWJlciB0aGF0IHRoZSB0d28gbW9kZXMgYXJlIG5vdCBkZXBlbmRhbnQgb24gb25lIGFub3RoZXIuCisgYnkgdGhlIHVzZXIuIFJlbWVtYmVyIHRoYXQgdGhlIHR3byBtb2RlcyBhcmUgbm90IGRlcGVuZGVudCBvbiBvbmUgYW5vdGhlci4KICBBIHVzZXIgY2FuIGhhdmUgdGhlIE5NSSBzb3VyY2luZyB3aXRob3V0IHRoZSB3YXRjaGRvZyB0aW1lciBhbmQgdmljZS12ZXJzYS4KIAogIFdhdGNoZG9nIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBsaWtlIGFueSBvdGhlciBjb21tb24gd2F0Y2hkb2cgZHJpdmVyLiBUaGF0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3dvcmtxdWV1ZS50eHQgYi9Eb2N1bWVudGF0aW9uL3dvcmtxdWV1ZS50eHQKaW5kZXggMDFjNTEzZi4uYTBiNTc3ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi93b3JrcXVldWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vd29ya3F1ZXVlLnR4dApAQCAtMTIsNiArMTIsNyBAQAogNC4gQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlIChBUEkpCiA1LiBFeGFtcGxlIEV4ZWN1dGlvbiBTY2VuYXJpb3MKIDYuIEd1aWRlbGluZXMKKzcuIERlYnVnZ2luZwogCiAKIDEuIEludHJvZHVjdGlvbgpAQCAtMzc5LDMgKzM4MCw0MiBAQAogKiBVbmxlc3Mgd29yayBpdGVtcyBhcmUgZXhwZWN0ZWQgdG8gY29uc3VtZSBhIGh1Z2UgYW1vdW50IG9mIENQVQogICBjeWNsZXMsIHVzaW5nIGEgYm91bmQgd3EgaXMgdXN1YWxseSBiZW5lZmljaWFsIGR1ZSB0byB0aGUgaW5jcmVhc2VkCiAgIGxldmVsIG9mIGxvY2FsaXR5IGluIHdxIG9wZXJhdGlvbnMgYW5kIHdvcmsgaXRlbSBleGVjdXRpb24uCisKKworNy4gRGVidWdnaW5nCisKK0JlY2F1c2UgdGhlIHdvcmsgZnVuY3Rpb25zIGFyZSBleGVjdXRlZCBieSBnZW5lcmljIHdvcmtlciB0aHJlYWRzCit0aGVyZSBhcmUgYSBmZXcgdHJpY2tzIG5lZWRlZCB0byBzaGVkIHNvbWUgbGlnaHQgb24gbWlzYmVoYXZpbmcKK3dvcmtxdWV1ZSB1c2Vycy4KKworV29ya2VyIHRocmVhZHMgc2hvdyB1cCBpbiB0aGUgcHJvY2VzcyBsaXN0IGFzOgorCityb290ICAgICAgNTY3MSAgMC4wICAwLjAgICAgICAwICAgICAwID8gICAgICAgIFMgICAgMTI6MDcgICAwOjAwIFtrd29ya2VyLzA6MV0KK3Jvb3QgICAgICA1NjcyICAwLjAgIDAuMCAgICAgIDAgICAgIDAgPyAgICAgICAgUyAgICAxMjowNyAgIDA6MDAgW2t3b3JrZXIvMToyXQorcm9vdCAgICAgIDU2NzMgIDAuMCAgMC4wICAgICAgMCAgICAgMCA/ICAgICAgICBTICAgIDEyOjEyICAgMDowMCBba3dvcmtlci8wOjBdCityb290ICAgICAgNTY3NCAgMC4wICAwLjAgICAgICAwICAgICAwID8gICAgICAgIFMgICAgMTI6MTMgICAwOjAwIFtrd29ya2VyLzE6MF0KKworSWYga3dvcmtlcnMgYXJlIGdvaW5nIGNyYXp5ICh1c2luZyB0b28gbXVjaCBjcHUpLCB0aGVyZSBhcmUgdHdvIHR5cGVzCitvZiBwb3NzaWJsZSBwcm9ibGVtczoKKworCTEuIFNvbWV0aGluZyBiZWVpbmcgc2NoZWR1bGVkIGluIHJhcGlkIHN1Y2Nlc3Npb24KKwkyLiBBIHNpbmdsZSB3b3JrIGl0ZW0gdGhhdCBjb25zdW1lcyBsb3RzIG9mIGNwdSBjeWNsZXMKKworVGhlIGZpcnN0IG9uZSBjYW4gYmUgdHJhY2tlZCB1c2luZyB0cmFjaW5nOgorCisJJCBlY2hvIHdvcmtxdWV1ZTp3b3JrcXVldWVfcXVldWVfd29yayA+IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvc2V0X2V2ZW50CisJJCBjYXQgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjZV9waXBlID4gb3V0LnR4dAorCSh3YWl0IGEgZmV3IHNlY3MpCisJXkMKKworSWYgc29tZXRoaW5nIGlzIGJ1c3kgbG9vcGluZyBvbiB3b3JrIHF1ZXVlaW5nLCBpdCB3b3VsZCBiZSBkb21pbmF0aW5nCit0aGUgb3V0cHV0IGFuZCB0aGUgb2ZmZW5kZXIgY2FuIGJlIGRldGVybWluZWQgd2l0aCB0aGUgd29yayBpdGVtCitmdW5jdGlvbi4KKworRm9yIHRoZSBzZWNvbmQgdHlwZSBvZiBwcm9ibGVtcyBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8ganVzdCBjaGVjawordGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBvZmZlbmRpbmcgd29ya2VyIHRocmVhZC4KKworCSQgY2F0IC9wcm9jL1RIRV9PRkZFTkRJTkdfS1dPUktFUi9zdGFjaworCitUaGUgd29yayBpdGVtJ3MgZnVuY3Rpb24gc2hvdWxkIGJlIHRyaXZpYWxseSB2aXNpYmxlIGluIHRoZSBzdGFjawordHJhY2UuCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDZiNGI5Y2QuLjY5ZjE5ZjEgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0xNTEsNiArMTUxLDcgQEAKIEY6CWRyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMKIAogODE2OSAxMC8xMDAvMTAwMCBHSUdBQklUIEVUSEVSTkVUIERSSVZFUgorTToJUmVhbHRlayBsaW51eCBuaWMgbWFpbnRhaW5lcnMgPG5pY19zd3NkQHJlYWx0ZWsuY29tPgogTToJRnJhbmNvaXMgUm9taWV1IDxyb21pZXVAZnIuem9yZWlsLmNvbT4KIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKQEAgLTE4NCwxMCArMTg1LDkgQEAKIEY6CWZzLzlwLwogCiBBMjIzMiBTRVJJQUwgQk9BUkQgRFJJVkVSCi1NOglFbnZlciBIYWFzZSA8QTIyMzJAZ214Lm5ldD4KIEw6CWxpbnV4LW02OGtAbGlzdHMubGludXgtbTY4ay5vcmcKLVM6CU1haW50YWluZWQKLUY6CWRyaXZlcnMvY2hhci9zZXJfYTIyMzIqCitTOglPcnBoYW4KK0Y6CWRyaXZlcnMvc3RhZ2luZy9nZW5lcmljX3NlcmlhbC9zZXJfYTIyMzIqCiAKIEFBQ1JBSUQgU0NTSSBSQUlEIERSSVZFUgogTToJQWRhcHRlYyBPRU0gUmFpZCBTb2x1dGlvbnMgPGFhY3JhaWRAYWRhcHRlYy5jb20+CkBAIC04NzcsNiArODc3LDEzIEBACiBGOglhcmNoL2FybS9tYWNoLW9yaW9uNXgvCiBGOglhcmNoL2FybS9wbGF0LW9yaW9uLwogCitBUk0vT3Jpb24gU29DL1RlY2hub2xvZ2ljIFN5c3RlbXMgVFMtNzh4eCBwbGF0Zm9ybSBzdXBwb3J0CitNOglBbGV4YW5kZXIgQ2xvdXRlciA8YWxleEBkaWdyaXoub3JnLnVrPgorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKK1c6CWh0dHA6Ly93d3cuZGlncml6Lm9yZy51ay90czc4eHgva2VybmVsCitTOglNYWludGFpbmVkCitGOglhcmNoL2FybS9tYWNoLW9yaW9uNXgvdHM3OHh4LSoKKwogQVJNL01JT0E3MDEgTUFDSElORSBTVVBQT1JUCiBNOglSb2JlcnQgSmFyem1payA8cm9iZXJ0LmphcnptaWtAZnJlZS5mcj4KIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCkBAIC0xMDI1LDEyICsxMDMyLDEzIEBACiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9tYWNoLXMzYzY0eHgvCiAKLUFSTS9TNVAgQVJNIEFSQ0hJVEVDVFVSRVMKK0FSTS9TNVAgRVhZTk9TIEFSTSBBUkNISVRFQ1RVUkVTCiBNOglLdWtqaW4gS2ltIDxrZ2VuZS5raW1Ac2Ftc3VuZy5jb20+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogTDoJbGludXgtc2Ftc3VuZy1zb2NAdmdlci5rZXJuZWwub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtL21hY2gtczVwKi8KK0Y6CWFyY2gvYXJtL21hY2gtZXh5bm9zKi8KIAogQVJNL1NBTVNVTkcgTU9CSUxFIE1BQ0hJTkUgU1VQUE9SVAogTToJS3l1bmdtaW4gUGFyayA8a3l1bmdtaW4ucGFya0BzYW1zdW5nLmNvbT4KQEAgLTEwNjMsNyArMTA3MSw3IEBACiBGOglkcml2ZXJzL3NoLwogCiBBUk0vVEVMRUNISVBTIEFSTSBBUkNISVRFQ1RVUkUKLU06CSJIYW5zIEouIEtvY2giIDxoamtAbGludXRyb25peC5kZT4KK006CSJIYW5zIEouIEtvY2giIDxoamtAaGFuc2prb2NoLmRlPgogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtL3BsYXQtdGNjLwpAQCAtMTgyMywxMSArMTgzMSwxMCBAQAogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvY29tcGFsLWxhcHRvcC5jCiAKIENPTVBVVE9ORSBJTlRFTExJUE9SVCBNVUxUSVBPUlQgQ0FSRAotTToJIk1pY2hhZWwgSC4gV2FyZmllbGQiIDxtaHdAd2l0dHNlbmQuY29tPgogVzoJaHR0cDovL3d3dy53aXR0c2VuZC5jb20vY29tcHV0b25lLmh0bWwKLVM6CU1haW50YWluZWQKK1M6CU9ycGhhbgogRjoJRG9jdW1lbnRhdGlvbi9zZXJpYWwvY29tcHV0b25lLnR4dAotRjoJZHJpdmVycy9jaGFyL2lwMi8KK0Y6CWRyaXZlcnMvc3RhZ2luZy90dHkvaXAyLwogCiBDT05FWEFOVCBBQ0NFU1NSVU5ORVIgVVNCIERSSVZFUgogTToJU2ltb24gQXJsb3R0IDxjeGFjcnVAZmlyZS5scDAuZXU+CkBAIC0yMDEwLDcgKzIwMTcsNyBAQAogQ1lDTEFERVMgQVNZTkMgTVVYIERSSVZFUgogVzoJaHR0cDovL3d3dy5jeWNsYWRlcy5jb20vCiBTOglPcnBoYW4KLUY6CWRyaXZlcnMvY2hhci9jeWNsYWRlcy5jCitGOglkcml2ZXJzL3R0eS9jeWNsYWRlcy5jCiBGOglpbmNsdWRlL2xpbnV4L2N5Y2xhZGVzLmgKIAogQ1lDTEFERVMgUEMzMDAgRFJJVkVSCkBAIC0yMTI0LDggKzIxMzEsOCBAQAogVzoJaHR0cDovL3d3dy5kaWdpLmNvbQogUzoJT3JwaGFuCiBGOglEb2N1bWVudGF0aW9uL3NlcmlhbC9kaWdpZXBjYS50eHQKLUY6CWRyaXZlcnMvY2hhci9lcGNhKgotRjoJZHJpdmVycy9jaGFyL2RpZ2kqCitGOglkcml2ZXJzL3N0YWdpbmcvdHR5L2VwY2EqCitGOglkcml2ZXJzL3N0YWdpbmcvdHR5L2RpZ2kqCiAKIERJT0xBTiBVMkMtMTIgSTJDIERSSVZFUgogTToJR3VlbnRlciBSb2VjayA8Z3VlbnRlci5yb2Vja0Blcmljc3Nvbi5jb20+CkBAIC0yODAyLDQyICsyODA5LDIzIEBACiBNOglHcmFudCBMaWtlbHkgPGdyYW50Lmxpa2VseUBzZWNyZXRsYWIuY2E+CiBTOglNYWludGFpbmVkCiBUOglnaXQgZ2l0Oi8vZ2l0LnNlY3JldGxhYi5jYS9naXQvbGludXgtMi42LmdpdAotRjoJRG9jdW1lbnRhdGlvbi9ncGlvL2dwaW8udHh0CitGOglEb2N1bWVudGF0aW9uL2dwaW8udHh0CiBGOglkcml2ZXJzL2dwaW8vCiBGOglpbmNsdWRlL2xpbnV4L2dwaW8qCiAKK0dSRSBERU1VTFRJUExFWEVSIERSSVZFUgorTToJRG1pdHJ5IEtvemxvdiA8eGViQG1haWwucnU+CitMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCitGOgluZXQvaXB2NC9ncmUuYworRjoJaW5jbHVkZS9uZXQvZ3JlLmgKKwogR1JFVEggMTAvMTAwLzFHIEV0aGVybmV0IE1BQyBkZXZpY2UgZHJpdmVyCiBNOglLcmlzdG9mZmVyIEdsZW1ibyA8a3Jpc3RvZmZlckBnYWlzbGVyLmNvbT4KIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvbmV0L2dyZXRoKgogCi1IQVJEIERSSVZFIEFDVElWRSBQUk9URUNUSU9OIFNZU1RFTSAoSERBUFMpIERSSVZFUgotTToJRnJhbmsgU2VpZGVsIDxmcmFua0BmLXNlaWRlbC5kZT4KLUw6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCi1XOglodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvZnNlaWRlbC9oZGFwcy8KLVM6CU1haW50YWluZWQKLUY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2hkYXBzLmMKLQotSFdQT0lTT04gTUVNT1JZIEZBSUxVUkUgSEFORExJTkcKLU06CUFuZGkgS2xlZW4gPGFuZGlAZmlyc3RmbG9vci5vcmc+Ci1MOglsaW51eC1tbUBrdmFjay5vcmcKLVQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWsvbGludXgtbWNlLTIuNi5naXQgaHdwb2lzb24KLVM6CU1haW50YWluZWQKLUY6CW1tL21lbW9yeS1mYWlsdXJlLmMKLUY6CW1tL2h3cG9pc29uLWluamVjdC5jCi0KLUhZUEVSVklTT1IgVklSVFVBTCBDT05TT0xFIERSSVZFUgotTDoJbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcKLVM6CU9kZCBGaXhlcwotRjoJZHJpdmVycy90dHkvaHZjLwotCi1pU0NTSSBCT09UIEZJUk1XQVJFIFRBQkxFIChpQkZUKSBEUklWRVIKLU06CVBldGVyIEpvbmVzIDxwam9uZXNAcmVkaGF0LmNvbT4KLU06CUtvbnJhZCBSemVzenV0ZWsgV2lsayA8a29ucmFkQGtlcm5lbC5vcmc+Ci1TOglNYWludGFpbmVkCi1GOglkcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQqCi0KIEdTUENBIEZJTkVQSVggU1VCRFJJVkVSCiBNOglGcmFuayBaYWdvIDxmcmFua0B6YWdvLm5ldD4KIEw6CWxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZwpAQCAtMjg4OCw2ICsyODc2LDI2IEBACiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhLwogCitIQVJEIERSSVZFIEFDVElWRSBQUk9URUNUSU9OIFNZU1RFTSAoSERBUFMpIERSSVZFUgorTToJRnJhbmsgU2VpZGVsIDxmcmFua0BmLXNlaWRlbC5kZT4KK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCitXOglodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvZnNlaWRlbC9oZGFwcy8KK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2hkYXBzLmMKKworSFdQT0lTT04gTUVNT1JZIEZBSUxVUkUgSEFORExJTkcKK006CUFuZGkgS2xlZW4gPGFuZGlAZmlyc3RmbG9vci5vcmc+CitMOglsaW51eC1tbUBrdmFjay5vcmcKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWsvbGludXgtbWNlLTIuNi5naXQgaHdwb2lzb24KK1M6CU1haW50YWluZWQKK0Y6CW1tL21lbW9yeS1mYWlsdXJlLmMKK0Y6CW1tL2h3cG9pc29uLWluamVjdC5jCisKK0hZUEVSVklTT1IgVklSVFVBTCBDT05TT0xFIERSSVZFUgorTDoJbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcKK1M6CU9kZCBGaXhlcworRjoJZHJpdmVycy90dHkvaHZjLworCiBIQVJEV0FSRSBNT05JVE9SSU5HCiBNOglKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KIE06CUd1ZW50ZXIgUm9lY2sgPGd1ZW50ZXIucm9lY2tAZXJpY3Nzb24uY29tPgpAQCAtMzQ3MSw2ICszNDc5LDEyIEBACiBGOglkcml2ZXJzL3BucC9pc2FwbnAvCiBGOglpbmNsdWRlL2xpbnV4L2lzYXBucC5oCiAKK2lTQ1NJIEJPT1QgRklSTVdBUkUgVEFCTEUgKGlCRlQpIERSSVZFUgorTToJUGV0ZXIgSm9uZXMgPHBqb25lc0ByZWRoYXQuY29tPgorTToJS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWRAa2VybmVsLm9yZz4KK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdCoKKwogSVNDU0kKIE06CU1pa2UgQ2hyaXN0aWUgPG1pY2hhZWxjQGNzLndpc2MuZWR1PgogTDoJb3Blbi1pc2NzaUBnb29nbGVncm91cHMuY29tCkBAIC00MDc3LDcgKzQwOTEsNyBAQAogRjoJaW5jbHVkZS9saW51eC9tYXRyb3hmYi5oCiAKIE1BWDY2NTAgSEFSRFdBUkUgTU9OSVRPUiBBTkQgRkFOIENPTlRST0xMRVIgRFJJVkVSCi1NOgkiSGFucyBKLiBLb2NoIiA8aGprQGxpbnV0cm9uaXguZGU+CitNOgkiSGFucyBKLiBLb2NoIiA8aGprQGhhbnNqa29jaC5kZT4KIEw6CWxtLXNlbnNvcnNAbG0tc2Vuc29ycy5vcmcKIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vaHdtb24vbWF4NjY1MApAQCAtNDE5Miw3ICs0MjA2LDcgQEAKIE06CUppcmkgU2xhYnkgPGppcmlzbGFieUBnbWFpbC5jb20+CiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL3NlcmlhbC9tb3hhLXNtYXJ0aW8KLUY6CWRyaXZlcnMvY2hhci9teHNlci4qCitGOglkcml2ZXJzL3R0eS9teHNlci4qCiAKIE1TSSBMQVBUT1AgU1VQUE9SVAogTToJIkxlZSwgQ2h1bi1ZaSIgPGpsZWVAbm92ZWxsLmNvbT4KQEAgLTQyMzQsNyArNDI0OCw3IEBACiAKIE1VTFRJVEVDSCBNVUxUSVBPUlQgQ0FSRCAoSVNJQ09NKQogUzoJT3JwaGFuCi1GOglkcml2ZXJzL2NoYXIvaXNpY29tLmMKK0Y6CWRyaXZlcnMvdHR5L2lzaWNvbS5jCiBGOglpbmNsdWRlL2xpbnV4L2lzaWNvbS5oCiAKIE1VU0IgTVVMVElQT0lOVCBISUdIIFNQRUVEIERVQUwtUk9MRSBDT05UUk9MTEVSCkBAIC00OTgyLDYgKzQ5OTYsMTMgQEAKIEY6CWRyaXZlcnMvcHBzLwogRjoJaW5jbHVkZS9saW51eC9wcHMqLmgKIAorUFBUUCBEUklWRVIKK006CURtaXRyeSBLb3psb3YgPHhlYkBtYWlsLnJ1PgorTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9uZXQvcHB0cC5jCitXOglodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2FjY2VsLXBwdHAKKwogUFJFRU1QVElCTEUgS0VSTkVMCiBNOglSb2JlcnQgTG92ZSA8cm1sQHRlY2g5Lm5ldD4KIEw6CWtwcmVlbXB0LXRlY2hAbGlzdHMuc291cmNlZm9yZ2UubmV0CkBAIC01MjczLDE0ICs1Mjk0LDE0IEBACiBSSVNDT004IERSSVZFUgogUzoJT3JwaGFuCiBGOglEb2N1bWVudGF0aW9uL3NlcmlhbC9yaXNjb204LnR4dAotRjoJZHJpdmVycy9jaGFyL3Jpc2NvbTgqCitGOglkcml2ZXJzL3N0YWdpbmcvdHR5L3Jpc2NvbTgqCiAKIFJPQ0tFVFBPUlQgRFJJVkVSCiBQOglDb210cm9sIENvcnAuCiBXOglodHRwOi8vd3d3LmNvbXRyb2wuY29tCiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL3NlcmlhbC9yb2NrZXQudHh0Ci1GOglkcml2ZXJzL2NoYXIvcm9ja2V0KgorRjoJZHJpdmVycy90dHkvcm9ja2V0KgogCiBST1NFIE5FVFdPUksgTEFZRVIKIE06CVJhbGYgQmFlY2hsZSA8cmFsZkBsaW51eC1taXBzLm9yZz4KQEAgLTUzOTAsNyArNTQxMSw3IEBACiBGOglpbmNsdWRlL21lZGlhLyo3MTQ2KgogCiBTQU1TVU5HIEFVRElPIChBU29DKSBEUklWRVJTCi1NOglKYXNzaSBCcmFyIDxqYXNzaS5icmFyQHNhbXN1bmcuY29tPgorTToJSmFzc2kgQnJhciA8amFzc2lzaW5naGJyYXJAZ21haWwuY29tPgogTDoJYWxzYS1kZXZlbEBhbHNhLXByb2plY3Qub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CVN1cHBvcnRlZAogRjoJc291bmQvc29jL3NhbXN1bmcKQEAgLTU5MTYsMTAgKzU5MzcsOSBAQAogRjoJYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9zcGVhcjYwMF9ldmIuYwogCiBTUEVDSUFMSVggSU84KyBNVUxUSVBPUlQgU0VSSUFMIENBUkQgRFJJVkVSCi1NOglSb2dlciBXb2xmZiA8Ui5FLldvbGZmQEJpdFdpemFyZC5ubD4KLVM6CVN1cHBvcnRlZAorUzoJT3JwaGFuCiBGOglEb2N1bWVudGF0aW9uL3NlcmlhbC9zcGVjaWFsaXgudHh0Ci1GOglkcml2ZXJzL2NoYXIvc3BlY2lhbGl4KgorRjoJZHJpdmVycy9zdGFnaW5nL3R0eS9zcGVjaWFsaXgqCiAKIFNQSSBTVUJTWVNURU0KIE06CURhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgpAQCAtNTk2NCw3ICs1OTg0LDYgQEAKIAogU1RBQkxFIEJSQU5DSAogTToJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KLU06CUNocmlzIFdyaWdodCA8Y2hyaXN3QHNvdXMtc29sLm9yZz4KIEw6CXN0YWJsZUBrZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKQEAgLTYyNDgsNyArNjI2Nyw4IEBACiBXOglodHRwOi8vd3d3LnVjbGludXgub3JnLwogTDoJdWNsaW51eC1kZXZAdWNsaW51eC5vcmcgIChzdWJzY3JpYmVycy1vbmx5KQogUzoJTWFpbnRhaW5lZAotRjoJYXJjaC9tNjhrbm9tbXUvCitGOglhcmNoL202OGsvKi8qX25vLioKK0Y6CWFyY2gvbTY4ay9pbmNsdWRlL2FzbS8qX25vLioKIAogVUNMSU5VWCBGT1IgUkVORVNBUyBIOC8zMDAgKEg4MzAwKQogTToJWW9zaGlub3JpIFNhdG8gPHlzYXRvQHVzZXJzLnNvdXJjZWZvcmdlLmpwPgpAQCAtNjU1MCw3ICs2NTcwLDcgQEAKIEY6CWRyaXZlcnMvdXNiL2hvc3QvdWhjaSoKIAogVVNCICJVU0JORVQiIERSSVZFUiBGUkFNRVdPUksKLU06CURhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorTToJT2xpdmVyIE5ldWt1bSA8b25ldWt1bUBzdXNlLmRlPgogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5saW51eC11c2Iub3JnL3VzYm5ldAogUzoJTWFpbnRhaW5lZApAQCAtNjYxOCw3ICs2NjM4LDcgQEAKIEY6CWZzL2hwcGZzLwogCiBVU0VSU1BBQ0UgSS9PIChVSU8pCi1NOgkiSGFucyBKLiBLb2NoIiA8aGprQGxpbnV0cm9uaXguZGU+CitNOgkiSGFucyBKLiBLb2NoIiA8aGprQGhhbnNqa29jaC5kZT4KIE06CUdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL0RvY0Jvb2svdWlvLWhvd3RvLnRtcGwKQEAgLTY5MTYsNiArNjkzNiwyNSBAQAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYKIAorWEVOIEhZUEVSVklTT1IgSU5URVJGQUNFCitNOglKZXJlbXkgRml0emhhcmRpbmdlIDxqZXJlbXkuZml0emhhcmRpbmdlQGNpdHJpeC5jb20+CitNOglLb25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJhZC53aWxrQG9yYWNsZS5jb20+CitMOgl4ZW4tZGV2ZWxAbGlzdHMueGVuc291cmNlLmNvbSAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCitMOgl2aXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZworUzoJU3VwcG9ydGVkCitGOglhcmNoL3g4Ni94ZW4vCitGOglkcml2ZXJzLyoveGVuLSpmcm9udC5jCitGOglkcml2ZXJzL3hlbi8KK0Y6CWFyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi8KK0Y6CWluY2x1ZGUveGVuLworCitYRU4gTkVUV09SSyBCQUNLRU5EIERSSVZFUgorTToJSWFuIENhbXBiZWxsIDxpYW4uY2FtcGJlbGxAY2l0cml4LmNvbT4KK0w6CXhlbi1kZXZlbEBsaXN0cy54ZW5zb3VyY2UuY29tIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKK0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKK1M6CVN1cHBvcnRlZAorRjoJZHJpdmVycy9uZXQveGVuLW5ldGJhY2svKgorCiBYRU4gUENJIFNVQlNZU1RFTQogTToJS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWQud2lsa0BvcmFjbGUuY29tPgogTDoJeGVuLWRldmVsQGxpc3RzLnhlbnNvdXJjZS5jb20gKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQpAQCAtNjkzMCwxOCArNjk2OSw2IEBACiBGOglhcmNoL3g4Ni94ZW4vKnN3aW90bGIqCiBGOglkcml2ZXJzL3hlbi8qc3dpb3RsYioKIAotWEVOIEhZUEVSVklTT1IgSU5URVJGQUNFCi1NOglKZXJlbXkgRml0emhhcmRpbmdlIDxqZXJlbXkuZml0emhhcmRpbmdlQGNpdHJpeC5jb20+Ci1NOglLb25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJhZC53aWxrQG9yYWNsZS5jb20+Ci1MOgl4ZW4tZGV2ZWxAbGlzdHMueGVuc291cmNlLmNvbSAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCi1MOgl2aXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwotUzoJU3VwcG9ydGVkCi1GOglhcmNoL3g4Ni94ZW4vCi1GOglkcml2ZXJzLyoveGVuLSpmcm9udC5jCi1GOglkcml2ZXJzL3hlbi8KLUY6CWFyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi8KLUY6CWluY2x1ZGUveGVuLwotCiBYRlMgRklMRVNZU1RFTQogUDoJU2lsaWNvbiBHcmFwaGljcyBJbmMKIE06CUFsZXggRWxkZXIgPGFlbGRlckBzZ2kuY29tPgpAQCAtNzAxMSwyMCArNzAzOCw2IEBACiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3R0eS9zZXJpYWwvenMuKgogCi1HUkUgREVNVUxUSVBMRVhFUiBEUklWRVIKLU06CURtaXRyeSBLb3psb3YgPHhlYkBtYWlsLnJ1PgotTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwotUzoJTWFpbnRhaW5lZAotRjoJbmV0L2lwdjQvZ3JlLmMKLUY6CWluY2x1ZGUvbmV0L2dyZS5oCi0KLVBQVFAgRFJJVkVSCi1NOglEbWl0cnkgS296bG92IDx4ZWJAbWFpbC5ydT4KLUw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKLVM6CU1haW50YWluZWQKLUY6CWRyaXZlcnMvbmV0L3BwdHAuYwotVzoJaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9hY2NlbC1wcHRwCi0KIFRIRSBSRVNUCiBNOglMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+CiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDgzOTJiNjQuLjEyM2Q4NTggMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogVkVSU0lPTiA9IDIKIFBBVENITEVWRUwgPSA2CiBTVUJMRVZFTCA9IDM5Ci1FWFRSQVZFUlNJT04gPSAtcmMyCitFWFRSQVZFUlNJT04gPQogTkFNRSA9IEZsZXNoLUVhdGluZyBCYXRzIHdpdGggRmFuZ3MKIAogIyAqRE9DVU1FTlRBVElPTioKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IDliYWFlOGEuLmRhNTQ0OWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9lbGYuaApAQCAtMTAxLDcgKzEwMSw3IEBACiAKICNkZWZpbmUgRUxGX1BMQVRfSU5JVChfciwgbG9hZF9hZGRyKQlfci0+cjAgPSAwCiAKLS8qIFRoZSByZWdpc3RlcnMgYXJlIGxheWVkIG91dCBpbiBwdF9yZWdzIGZvciBQQUwgYW5kIHN5c2NhbGwKKy8qIFRoZSByZWdpc3RlcnMgYXJlIGxhaWQgb3V0IGluIHB0X3JlZ3MgZm9yIFBBTCBhbmQgc3lzY2FsbAogICAgY29udmVuaWVuY2UuICBSZS1vcmRlciB0aGVtIGZvciB0aGUgbGluZWFyIGVsZl9ncmVnc2V0X3QuICAqLwogCiBzdHJ1Y3QgcHRfcmVnczsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDA1ODkzN2IuLmIxODM0MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtNDUyLDEwICs0NTIsMTQgQEAKICNkZWZpbmUgX19OUl9mYW5vdGlmeV9pbml0CQk0OTQKICNkZWZpbmUgX19OUl9mYW5vdGlmeV9tYXJrCQk0OTUKICNkZWZpbmUgX19OUl9wcmxpbWl0NjQJCQk0OTYKKyNkZWZpbmUgX19OUl9uYW1lX3RvX2hhbmRsZV9hdAkJNDk3CisjZGVmaW5lIF9fTlJfb3Blbl9ieV9oYW5kbGVfYXQJCTQ5OAorI2RlZmluZSBfX05SX2Nsb2NrX2FkanRpbWUJCTQ5OQorI2RlZmluZSBfX05SX3N5bmNmcwkJCTUwMAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jZGVmaW5lIE5SX1NZU0NBTExTCQkJNDk3CisjZGVmaW5lIE5SX1NZU0NBTExTCQkJNTAxCiAKICNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL01ha2VmaWxlIGIvYXJjaC9hbHBoYS9rZXJuZWwvTWFrZWZpbGUKaW5kZXggOWJiN2I4NTguLjdhNmQ5MDggMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL01ha2VmaWxlCkBAIC00LDcgKzQsNyBAQAogCiBleHRyYS15CQk6PSBoZWFkLm8gdm1saW51eC5sZHMKIGFzZmxhZ3MteQk6PSAkKEtCVUlMRF9DRkxBR1MpCi1jY2ZsYWdzLXkJOj0gLVdlcnJvciAtV25vLXNpZ24tY29tcGFyZQorY2NmbGFncy15CTo9IC1Xbm8tc2lnbi1jb21wYXJlCiAKIG9iai15ICAgIDo9IGVudHJ5Lm8gdHJhcHMubyBwcm9jZXNzLm8gaW5pdF90YXNrLm8gb3NmX3N5cy5vIGlycS5vIFwKIAkgICAgaXJxX2FscGhhLm8gc2lnbmFsLm8gc2V0dXAubyBwdHJhY2UubyB0aW1lLm8gXApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9sY2EuYyBiL2FyY2gvYWxwaGEva2VybmVsL2NvcmVfbGNhLmMKaW5kZXggNDg0M2Y2ZS4uY2IyODAxYyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9sY2EuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9jb3JlX2xjYS5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAotCS8qIFJlc2V0IHN0YXR1cyByZWdpc3RlciB0byBhdm9pZCBsb29zaW5nIGVycm9ycy4gICovCisJLyogUmVzZXQgc3RhdHVzIHJlZ2lzdGVyIHRvIGF2b2lkIGxvc2luZyBlcnJvcnMuICAqLwogCXN0YXQwID0gKih2dWxwKUxDQV9JT0NfU1RBVDA7CiAJKih2dWxwKUxDQV9JT0NfU1RBVDAgPSBzdGF0MDsKIAltYigpOwpAQCAtMTcwLDcgKzE3MCw3IEBACiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CS8qIGF2b2lkIGdldHRpbmcgaGl0IGJ5IG1hY2hpbmUgY2hlY2sgKi8KIAotCS8qIFJlc2V0IHN0YXR1cyByZWdpc3RlciB0byBhdm9pZCBsb29zaW5nIGVycm9ycy4gICovCisJLyogUmVzZXQgc3RhdHVzIHJlZ2lzdGVyIHRvIGF2b2lkIGxvc2luZyBlcnJvcnMuICAqLwogCXN0YXQwID0gKih2dWxwKUxDQV9JT0NfU1RBVDA7CiAJKih2dWxwKUxDQV9JT0NfU1RBVDAgPSBzdGF0MDsKIAltYigpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tY3BjaWEuYyBiL2FyY2gvYWxwaGEva2VybmVsL2NvcmVfbWNwY2lhLmMKaW5kZXggMzgxZmVjMC4uZGE3YmNjMyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tY3BjaWEuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21jcGNpYS5jCkBAIC04OCw3ICs4OCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIG1pZCA9IE1DUENJQV9IT1NFMk1JRChob3NlLT5pbmRleCk7Ci0JdW5zaWduZWQgaW50IHN0YXQwLCB2YWx1ZSwgdGVtcCwgY3B1OworCXVuc2lnbmVkIGludCBzdGF0MCwgdmFsdWUsIGNwdTsKIAogCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIApAQCAtMTAxLDcgKzEwMSw3IEBACiAJc3RhdDAgPSAqKHZ1aXApTUNQQ0lBX0NBUF9FUlIobWlkKTsKIAkqKHZ1aXApTUNQQ0lBX0NBUF9FUlIobWlkKSA9IHN0YXQwOwogCW1iKCk7Ci0JdGVtcCA9ICoodnVpcClNQ1BDSUFfQ0FQX0VSUihtaWQpOworCSoodnVpcClNQ1BDSUFfQ0FQX0VSUihtaWQpOwogCURCR19DRkcoKCJjb25mX3JlYWQ6IE1DUENJQV9DQVBfRVJSKCVkKSB3YXMgMHgleFxuIiwgbWlkLCBzdGF0MCkpOwogCiAJbWIoKTsKQEAgLTEzNiw3ICsxMzYsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBtaWQgPSBNQ1BDSUFfSE9TRTJNSUQoaG9zZS0+aW5kZXgpOwotCXVuc2lnbmVkIGludCBzdGF0MCwgdGVtcCwgY3B1OworCXVuc2lnbmVkIGludCBzdGF0MCwgY3B1OwogCiAJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAkvKiBSZXNldCBzdGF0dXMgcmVnaXN0ZXIgdG8gYXZvaWQgbG9zaW5nIGVycm9ycy4gICovCiAJc3RhdDAgPSAqKHZ1aXApTUNQQ0lBX0NBUF9FUlIobWlkKTsKIAkqKHZ1aXApTUNQQ0lBX0NBUF9FUlIobWlkKSA9IHN0YXQwOyBtYigpOwotCXRlbXAgPSAqKHZ1aXApTUNQQ0lBX0NBUF9FUlIobWlkKTsKKwkqKHZ1aXApTUNQQ0lBX0NBUF9FUlIobWlkKTsKIAlEQkdfQ0ZHKCgiY29uZl93cml0ZTogTUNQQ0lBIENBUF9FUlIoJWQpIHdhcyAweCV4XG4iLCBtaWQsIHN0YXQwKSk7CiAKIAlkcmFpbmEoKTsKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCSooKHZ1aXApYWRkcikgPSB2YWx1ZTsKIAltYigpOwogCW1iKCk7ICAvKiBtYWdpYyAqLwotCXRlbXAgPSAqKHZ1aXApTUNQQ0lBX0NBUF9FUlIobWlkKTsgLyogcmVhZCB0byBmb3JjZSB0aGUgd3JpdGUgKi8KKwkqKHZ1aXApTUNQQ0lBX0NBUF9FUlIobWlkKTsgLyogcmVhZCB0byBmb3JjZSB0aGUgd3JpdGUgKi8KIAltY2hlY2tfZXhwZWN0ZWQoY3B1KSA9IDA7CiAJbWIoKTsKIApAQCAtNTcyLDEyICs1NzIsMTAgQEAKIHZvaWQKIG1jcGNpYV9tYWNoaW5lX2NoZWNrKHVuc2lnbmVkIGxvbmcgdmVjdG9yLCB1bnNpZ25lZCBsb25nIGxhX3B0cikKIHsKLQlzdHJ1Y3QgZWxfY29tbW9uICptY2hrX2hlYWRlcjsKIAlzdHJ1Y3QgZWxfTUNQQ0lBX3VuY29ycmVjdGVkX2ZyYW1lX21jaGVjayAqbWNoa19sb2dvdXQ7CiAJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlpbnQgZXhwZWN0ZWQ7CiAKLQltY2hrX2hlYWRlciA9IChzdHJ1Y3QgZWxfY29tbW9uICopbGFfcHRyOwogCW1jaGtfbG9nb3V0ID0gKHN0cnVjdCBlbF9NQ1BDSUFfdW5jb3JyZWN0ZWRfZnJhbWVfbWNoZWNrICopbGFfcHRyOwogCWV4cGVjdGVkID0gbWNoZWNrX2V4cGVjdGVkKGNwdSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2Vycl9tYXJ2ZWwuYyBiL2FyY2gvYWxwaGEva2VybmVsL2Vycl9tYXJ2ZWwuYwppbmRleCA2NDhhZTg4Li5hZTU0YWQ5IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9lcnJfbWFydmVsLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvZXJyX21hcnZlbC5jCkBAIC0xMDI3LDcgKzEwMjcsNyBAQAogCSAqIG5vcm1hbCBvcGVyYXRpb24sIGRpc21pc3MgdGhlbS4KIAkgKgogCSAqIERpc21pc3MgaWY6Ci0JICoJQ19TVEFUCQk9IDB4MTQgCQkoRXJyb3IgUmVwb25zZSkKKwkgKglDX1NUQVQJCT0gMHgxNCAJCShFcnJvciBSZXNwb25zZSkKIAkgKglDX1NUUzwzPgk9IDAgICAgCQkoQ19BRERSIHZhbGlkKQogCSAqCUNfQUREUjw0Mj4JPSAxICAgIAkJKEkvTykKIAkgKglDX0FERFI8MzE6MjI+CT0gMTExMTEweHhiCShQQ0kgQ29uZmlnIHNwYWNlKQpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvZXJyX3RpdGFuLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9lcnJfdGl0YW4uYwppbmRleCBjM2IzNzgxLi4xNGIyNmM0IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9lcnJfdGl0YW4uYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9lcnJfdGl0YW4uYwpAQCAtNTMzLDggKzUzMyw2IEBACiBzdGF0aWMgc3RydWN0IGVsX3N1YnBhY2tldCAqCiBlbF9wcm9jZXNzX3JlZ2F0dGFfc3VicGFja2V0KHN0cnVjdCBlbF9zdWJwYWNrZXQgKmhlYWRlcikKIHsKLQlpbnQgc3RhdHVzOwotCiAJaWYgKGhlYWRlci0+Y2xhc3MgIT0gRUxfQ0xBU1NfX1JFR0FUVEFfRkFNSUxZKSB7CiAJCXByaW50aygiJXMgICoqIFVuZXhwZWN0ZWQgaGVhZGVyIENMQVNTICVkIFRZUEUgJWQsIGFib3J0aW5nXG4iLAogCQkgICAgICAgZXJyX3ByaW50X3ByZWZpeCwKQEAgLTU1MSw3ICs1NDksNyBAQAogCQlwcmludGsoIiVzICAqKiBPY2N1cnJlZCBvbiBDUFUgJWQ6XG4iLCAKIAkJICAgICAgIGVycl9wcmludF9wcmVmaXgsCiAJCSAgICAgICAoaW50KWhlYWRlci0+YnlfdHlwZS5yZWdhdHRhX2ZyYW1lLmNwdWlkKTsKLQkJc3RhdHVzID0gcHJpdmF0ZWVyX3Byb2Nlc3NfbG9nb3V0X2ZyYW1lKChzdHJ1Y3QgZWxfY29tbW9uICopCisJCXByaXZhdGVlcl9wcm9jZXNzX2xvZ291dF9mcmFtZSgoc3RydWN0IGVsX2NvbW1vbiAqKQogCQkJaGVhZGVyLT5ieV90eXBlLnJlZ2F0dGFfZnJhbWUuZGF0YV9zdGFydCwgMSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYyBiL2FyY2gvYWxwaGEva2VybmVsL2lycV9hbHBoYS5jCmluZGV4IDE0NzlkYzYuLjUxYjdmYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2lycV9hbHBoYS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2lycV9hbHBoYS5jCkBAIC0yMjgsNyArMjI4LDcgQEAKIHZvaWQgX19pbml0CiBpbml0X3J0Y19pcnEodm9pZCkKIHsKLQlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXJfbmFtZShSVENfSVJRLCAmbm9faXJxX2NoaXAsCisJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyX25hbWUoUlRDX0lSUSwgJmR1bW15X2lycV9jaGlwLAogCQkJCSAgICAgIGhhbmRsZV9zaW1wbGVfaXJxLCAiUlRDIik7CiAJc2V0dXBfaXJxKFJUQ19JUlEsICZ0aW1lcl9pcnFhY3Rpb24pOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvYWxwaGEva2VybmVsL3NldHVwLmMKaW5kZXggZDI2MzRlNC4uZWRiZGRjYiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jCkBAIC0xNDA0LDggKzE0MDQsNiBAQAogCWNhc2UgUENBNTZfQ1BVOgogCWNhc2UgUENBNTdfQ1BVOgogCSAgewotCQl1bnNpZ25lZCBsb25nIGNib3hfY29uZmlnLCBzaXplOwotCiAJCWlmIChjcHVfdHlwZSA9PSBQQ0E1Nl9DUFUpIHsKIAkJCUwxSSA9IENTSEFQRSgxNioxMDI0LCA2LCAxKTsKIAkJCUwxRCA9IENTSEFQRSg4KjEwMjQsIDUsIDEpOwpAQCAtMTQxNSwxMCArMTQxMywxMiBAQAogCQl9CiAJCUwzID0gLTE7CiAKKyNpZiAwCisJCXVuc2lnbmVkIGxvbmcgY2JveF9jb25maWcsIHNpemU7CisKIAkJY2JveF9jb25maWcgPSAqKHZ1bHApIHBoeXNfdG9fdmlydCAoMHhmZmZmZjAwMDA4VUwpOwogCQlzaXplID0gNTEyKjEwMjQgKiAoMSA8PCAoKGNib3hfY29uZmlnID4+IDEyKSAmIDMpKTsKIAotI2lmIDAKIAkJTDIgPSAoKGNib3hfY29uZmlnID4+IDMxKSAmIDEgPyBDU0hBUEUgKHNpemUsIDYsIDEpIDogLTEpOwogI2Vsc2UKIAkJTDIgPSBleHRlcm5hbF9jYWNoZV9wcm9iZSg1MTIqMTAyNCwgNik7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zbWMzN2M5M3guYyBiL2FyY2gvYWxwaGEva2VybmVsL3NtYzM3YzkzeC5jCmluZGV4IDNlNmEyODkuLjY4ODZiODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3NtYzM3YzkzeC5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3NtYzM3YzkzeC5jCkBAIC03OSw3ICs3OSw2IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgU01DQ29uZmlnU3RhdGUodW5zaWduZWQgbG9uZyBiYXNlQWRkcikKIHsKIAl1bnNpZ25lZCBjaGFyIGRldklkOwotCXVuc2lnbmVkIGNoYXIgZGV2UmV2OwogCiAJdW5zaWduZWQgbG9uZyBjb25maWdQb3J0OwogCXVuc2lnbmVkIGxvbmcgaW5kZXhQb3J0OwpAQCAtMTAwLDcgKzk5LDcgQEAKIAkJZGV2SWQgPSBpbmIoZGF0YVBvcnQpOwogCQlpZiAoZGV2SWQgPT0gVkFMSURfREVWSUNFX0lEKSB7CiAJCQlvdXRiKERFVklDRV9SRVYsIGluZGV4UG9ydCk7Ci0JCQlkZXZSZXYgPSBpbmIoZGF0YVBvcnQpOworCQkJLyogdW5zaWduZWQgY2hhciBkZXZSZXYgPSAqLyBpbmIoZGF0YVBvcnQpOwogCQkJYnJlYWs7CiAJCX0KIAkJZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3dpbGRmaXJlLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfd2lsZGZpcmUuYwppbmRleCBkM2NiMjhiLi5kOTJjZGM3IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfd2lsZGZpcmUuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfd2lsZGZpcmUuYwpAQCAtMTU2LDcgKzE1Niw2IEBACiB3aWxkZmlyZV9pbml0X2lycV9wZXJfcGNhKGludCBxYmJubywgaW50IHBjYW5vKQogewogCWludCBpLCBpcnFfYmlhczsKLQl1bnNpZ25lZCBsb25nIGlvX2JpYXM7CiAJc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXNhX2VuYWJsZSA9IHsKIAkJLmhhbmRsZXIJPSBub19hY3Rpb24sCiAJCS5uYW1lCQk9ICJpc2FfZW5hYmxlIiwKQEAgLTE2NSwxMCArMTY0LDEyIEBACiAJaXJxX2JpYXMgPSBxYmJubyAqIChXSUxERklSRV9QQ0FfUEVSX1FCQiAqIFdJTERGSVJFX0lSUV9QRVJfUENBKQogCQkgKyBwY2FubyAqIFdJTERGSVJFX0lSUV9QRVJfUENBOwogCisjaWYgMAorCXVuc2lnbmVkIGxvbmcgaW9fYmlhczsKKwogCS8qIE9ubHkgbmVlZCB0aGUgZm9sbG93aW5nIGZvciBmaXJzdCBQQ0kgYnVzIHBlciBQQ0EuICovCiAJaW9fYmlhcyA9IFdJTERGSVJFX0lPKHFiYm5vLCBwY2Fubzw8MSkgLSBXSUxERklSRV9JT19CSUFTOwogCi0jaWYgMAogCW91dGIoMCwgRE1BMV9SRVNFVF9SRUcgKyBpb19iaWFzKTsKIAlvdXRiKDAsIERNQTJfUkVTRVRfUkVHICsgaW9fYmlhcyk7CiAJb3V0YihETUFfTU9ERV9DQVNDQURFLCBETUEyX01PREVfUkVHICsgaW9fYmlhcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXN0YmxzLlMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXN0YmxzLlMKaW5kZXggYTZhMWRlOS4uMTVmOTk5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzdGJscy5TCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c3RibHMuUwpAQCAtNDk4LDIzICs0OTgsMjcgQEAKIAkucXVhZCBzeXNfbmlfc3lzY2FsbAkJCS8qIHN5c190aW1lcmZkICovCiAJLnF1YWQgc3lzX2V2ZW50ZmQKIAkucXVhZCBzeXNfcmVjdm1tc2cKLQkucXVhZCBzeXNfZmFsbG9jYXRlCQkJCS8qIDQ4MCAqLworCS5xdWFkIHN5c19mYWxsb2NhdGUJCQkvKiA0ODAgKi8KIAkucXVhZCBzeXNfdGltZXJmZF9jcmVhdGUKIAkucXVhZCBzeXNfdGltZXJmZF9zZXR0aW1lCiAJLnF1YWQgc3lzX3RpbWVyZmRfZ2V0dGltZQogCS5xdWFkIHN5c19zaWduYWxmZDQKLQkucXVhZCBzeXNfZXZlbnRmZDIJCQkJLyogNDg1ICovCisJLnF1YWQgc3lzX2V2ZW50ZmQyCQkJLyogNDg1ICovCiAJLnF1YWQgc3lzX2Vwb2xsX2NyZWF0ZTEKIAkucXVhZCBzeXNfZHVwMwogCS5xdWFkIHN5c19waXBlMgogCS5xdWFkIHN5c19pbm90aWZ5X2luaXQxCi0JLnF1YWQgc3lzX3ByZWFkdgkJCQkvKiA0OTAgKi8KKwkucXVhZCBzeXNfcHJlYWR2CQkJLyogNDkwICovCiAJLnF1YWQgc3lzX3B3cml0ZXYKIAkucXVhZCBzeXNfcnRfdGdzaWdxdWV1ZWluZm8KIAkucXVhZCBzeXNfcGVyZl9ldmVudF9vcGVuCiAJLnF1YWQgc3lzX2Zhbm90aWZ5X2luaXQKLQkucXVhZCBzeXNfZmFub3RpZnlfbWFyawkJCQkvKiA0OTUgKi8KKwkucXVhZCBzeXNfZmFub3RpZnlfbWFyawkJCS8qIDQ5NSAqLwogCS5xdWFkIHN5c19wcmxpbWl0NjQKKwkucXVhZCBzeXNfbmFtZV90b19oYW5kbGVfYXQKKwkucXVhZCBzeXNfb3Blbl9ieV9oYW5kbGVfYXQKKwkucXVhZCBzeXNfY2xvY2tfYWRqdGltZQorCS5xdWFkIHN5c19zeW5jZnMJCQkvKiA1MDAgKi8KIAogCS5zaXplIHN5c19jYWxsX3RhYmxlLCAuIC0gc3lzX2NhbGxfdGFibGUKIAkudHlwZSBzeXNfY2FsbF90YWJsZSwgQG9iamVjdApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvdGltZS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvdGltZS5jCmluZGV4IGE1OGU4NGYuLjgxOGU3NGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC90aW1lLmMKQEAgLTE1Myw2ICsxNTMsNyBAQAogCQl5ZWFyICs9IDEwMDsKIAogCXRzLT50dl9zZWMgPSBta3RpbWUoeWVhciwgbW9uLCBkYXksIGhvdXIsIG1pbiwgc2VjKTsKKwl0cy0+dHZfbnNlYyA9IDA7CiB9CiAKIApAQCAtMzc0LDggKzM3NSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWdpc3Rlcl9ycGNjX2Nsb2Nrc291cmNlKGxvbmcgY3ljbGVfZnJlcSkKIHsKLQljbG9ja3NvdXJjZV9jYWxjX211bHRfc2hpZnQoJmNsb2Nrc291cmNlX3JwY2MsIGN5Y2xlX2ZyZXEsIDQpOwotCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9ycGNjKTsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfcnBjYywgY3ljbGVfZnJlcSk7CiB9CiAjZWxzZSAvKiAhQ09ORklHX1NNUCAqLwogc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX3JwY2NfY2xvY2tzb3VyY2UobG9uZyBjeWNsZV9mcmVxKQpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9saWIvZXY2Ny1zdHJyY2hyLlMgYi9hcmNoL2FscGhhL2xpYi9ldjY3LXN0cnJjaHIuUwppbmRleCAzZmQ4YmY0Li5kZDBkOGM2IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2xpYi9ldjY3LXN0cnJjaHIuUworKysgYi9hcmNoL2FscGhhL2xpYi9ldjY3LXN0cnJjaHIuUwpAQCAtODIsNyArODIsNyBAQAogJGVvczoKIAluZWdxCXQxLCB0NAkJIyBFIDogaXNvbGF0ZSBmaXJzdCBudWxsIGJ5dGUgbWF0Y2gKIAlhbmQJdDEsIHQ0LCB0NAkjIEUgOgotCXN1YnEJdDQsIDEsIHQ1CSMgRSA6IGJ1aWxkIGEgbWFzayBvZiB0aGUgYnl0ZXMgdXB0by4uLgorCXN1YnEJdDQsIDEsIHQ1CSMgRSA6IGJ1aWxkIGEgbWFzayBvZiB0aGUgYnl0ZXMgdXAgdG8uLi4KIAlvcgl0NCwgdDUsIHQ0CSMgRSA6IC4uLiBhbmQgaW5jbHVkaW5nIHRoZSBudWxsCiAKIAlhbmQJdDMsIHQ0LCB0MwkjIEUgOiBtYXNrIG91dCBjaGFyIG1hdGNoZXMgYWZ0ZXIgbnVsbApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9saWIvZmxzLmMgYi9hcmNoL2FscGhhL2xpYi9mbHMuYwppbmRleCAzMmFmYWEzLi5kZGQwNDhjIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2xpYi9mbHMuYworKysgYi9hcmNoL2FscGhhL2xpYi9mbHMuYwpAQCAtNiw3ICs2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogLyogVGhpcyBpcyBmbHMoeCktMSwgZXhjZXB0IHplcm8gaXMgaGVsZCB0byB6ZXJvLiAgVGhpcyBhbGxvd3MgbW9zdAotICAgZWZmaWNlbnQgaW5wdXQgaW50byBleHRibCwgcGx1cyBpdCBhbGxvd3MgZWFzeSBoYW5kbGluZyBvZiBmbHMoMCk9MC4gICovCisgICBlZmZpY2llbnQgaW5wdXQgaW50byBleHRibCwgcGx1cyBpdCBhbGxvd3MgZWFzeSBoYW5kbGluZyBvZiBmbHMoMCk9MC4gICovCiAKIGNvbnN0IHVuc2lnbmVkIGNoYXIgX19mbHNtMV90YWJbMjU2XSA9IAogewpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9saWIvc3RycmNoci5TIGIvYXJjaC9hbHBoYS9saWIvc3RycmNoci5TCmluZGV4IDgyY2ZkMGEuLjE5NzBkYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvbGliL3N0cnJjaHIuUworKysgYi9hcmNoL2FscGhhL2xpYi9zdHJyY2hyLlMKQEAgLTU0LDcgKzU0LDcgQEAKICRlb3M6CiAJbmVncQl0MSwgdDQJCSMgZTAgICAgOiBpc29sYXRlIGZpcnN0IG51bGwgYnl0ZSBtYXRjaAogCWFuZAl0MSwgdDQsIHQ0CSMgZTEgICAgOgotCXN1YnEJdDQsIDEsIHQ1CSMgZTAgICAgOiBidWlsZCBhIG1hc2sgb2YgdGhlIGJ5dGVzIHVwdG8uLi4KKwlzdWJxCXQ0LCAxLCB0NQkjIGUwICAgIDogYnVpbGQgYSBtYXNrIG9mIHRoZSBieXRlcyB1cCB0by4uLgogCW9yCXQ0LCB0NSwgdDQJIyBlMSAgICA6IC4uLiBhbmQgaW5jbHVkaW5nIHRoZSBudWxsCiAKIAlhbmQJdDMsIHQ0LCB0MwkjIGUwICAgIDogbWFzayBvdXQgY2hhciBtYXRjaGVzIGFmdGVyIG51bGwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvb3Byb2ZpbGUvb3BfbW9kZWxfZXY2Ny5jIGIvYXJjaC9hbHBoYS9vcHJvZmlsZS9vcF9tb2RlbF9ldjY3LmMKaW5kZXggNzAzMDIwOC4uNWI5ZDE3OCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9vcHJvZmlsZS9vcF9tb2RlbF9ldjY3LmMKKysrIGIvYXJjaC9hbHBoYS9vcHJvZmlsZS9vcF9tb2RlbF9ldjY3LmMKQEAgLTE5Miw3ICsxOTIsNyBAQAogCQljYXNlIFRSQVBfSU5WQUxJRDE6CiAJCWNhc2UgVFJBUF9JTlZBTElEMjoKIAkJY2FzZSBUUkFQX0lOVkFMSUQzOgotCQkJLyogUGlwZWxpbmUgcmVkaXJlY3Rpb24gb2N1cnJlZC4gUE1QQyBwb2ludHMKKwkJCS8qIFBpcGVsaW5lIHJlZGlyZWN0aW9uIG9jY3VycmVkLiBQTVBDIHBvaW50cwogCQkJICAgdG8gUEFMY29kZS4gUmVjb2duaXplIElUQiBtaXNzIGJ5IFBBTGNvZGUKIAkJCSAgIG9mZnNldCBhZGRyZXNzLCBhbmQgZ2V0IGFjdHVhbCBQQyBmcm9tCiAJCQkgICBFWENfQUREUi4gICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZwppbmRleCA1YjlmNzhiLi4zNzdhN2E1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL0tjb25maWcKQEAgLTY5NCw3ICs2OTQsNyBAQAogCSAgdGhlIFNhbXN1bmcgU01ESzI0MTAgZGV2ZWxvcG1lbnQgYm9hcmQgKGFuZCBkZXJpdmF0aXZlcykuCiAKIAkgIE5vdGUsIHRoZSBTM0MyNDE2IGFuZCB0aGUgUzNDMjQ1MCBhcmUgc28gY2xvc2UgdGhhdCB0aGV5IGV2ZW4gc2hhcmUKLQkgIHRoZSBzYW1lIFNvQyBJRCBjb2RlLiBUaGlzIG1lYW5zIHRoYXQgdGhlcmUgaXMgbm8gc2VwZXJhdGUgbWFjaGluZQorCSAgdGhlIHNhbWUgU29DIElEIGNvZGUuIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSBpcyBubyBzZXBhcmF0ZSBtYWNoaW5lCiAJICBkaXJlY3RvcnkgKG5vIGFyY2gvYXJtL21hY2gtczNjMjQ1MCkgYXMgdGhlIFMzQzI0MTYgd2FzIGZpcnN0LgogCiBjb25maWcgQVJDSF9TM0M2NFhYCkBAIC0xNTQwLDcgKzE1NDAsNiBAQAogY29uZmlnIEhJR0hQVEUKIAlib29sICJBbGxvY2F0ZSAybmQtbGV2ZWwgcGFnZXRhYmxlcyBmcm9tIGhpZ2htZW0iCiAJZGVwZW5kcyBvbiBISUdITUVNCi0JZGVwZW5kcyBvbiAhT1VURVJfQ0FDSEUKIAogY29uZmlnIEhXX1BFUkZfRVZFTlRTCiAJYm9vbCAiRW5hYmxlIGhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXIgc3VwcG9ydCBmb3IgcGVyZiBldmVudHMiCkBAIC0yMDEyLDYgKzIwMTEsOCBAQAogCiBjb25maWcgQVJDSF9TVVNQRU5EX1BPU1NJQkxFCiAJZGVwZW5kcyBvbiAhQVJDSF9TNVA2NFgwICYmICFBUkNIX1M1UDY0NDIKKwlkZXBlbmRzIG9uIENQVV9BUk05MjBUIHx8IENQVV9BUk05MjZUIHx8IENQVV9TQTExMDAgfHwgXAorCQlDUFVfVjYgfHwgQ1BVX1Y2SyB8fCBDUFVfVjcgfHwgQ1BVX1hTQzMgfHwgQ1BVX1hTQ0FMRQogCWRlZl9ib29sIHkKIAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZy1ub21tdSBiL2FyY2gvYXJtL0tjb25maWctbm9tbXUKaW5kZXggOTAxZTZkZi4uMmNlZjhlMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZy1ub21tdQorKysgYi9hcmNoL2FybS9LY29uZmlnLW5vbW11CkBAIC0zNCw3ICszNCw3IEBACiAJICB1c2VkIGluc3RlYWQgb2YgdGhlIGF1dG8tcHJvYmluZyB3aGljaCB1dGlsaXplcyB0aGUgcmVnaXN0ZXIuCiAKIGNvbmZpZyBSRU1BUF9WRUNUT1JTX1RPX1JBTQotCWJvb2wgJ0luc3RhbGwgdmVjdG9ycyB0byB0aGUgYmVnaW5pbmcgb2YgUkFNJyBpZiBEUkFNX0JBU0UKKwlib29sICdJbnN0YWxsIHZlY3RvcnMgdG8gdGhlIGJlZ2lubmluZyBvZiBSQU0nIGlmIERSQU1fQkFTRQogCWRlcGVuZHMgb24gRFJBTV9CQVNFCiAJaGVscAogCSAgVGhlIGtlcm5lbCBuZWVkcyB0byBjaGFuZ2UgdGhlIGhhcmR3YXJlIGV4Y2VwdGlvbiB2ZWN0b3JzLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvYXJtL0tjb25maWcuZGVidWcKaW5kZXggNDk0MjI0YS4uMDNkMDFkNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL2FybS9LY29uZmlnLmRlYnVnCkBAIC02MywxNyArNjMsNiBAQAogCSAgICAgIDggLSBTSUdTRUdWIGZhdWx0cwogCSAgICAgMTYgLSBTSUdCVVMgZmF1bHRzCiAKLWNvbmZpZyBERUJVR19FUlJPUlMKLQlib29sICJWZXJib3NlIGtlcm5lbCBlcnJvciBtZXNzYWdlcyIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGNvbnRyb2xzIHZlcmJvc2UgZGVidWdnaW5nIGluZm9ybWF0aW9uIHdoaWNoIGNhbiBiZQotCSAgcHJpbnRlZCB3aGVuIHRoZSBrZXJuZWwgZGV0ZWN0cyBhbiBpbnRlcm5hbCBlcnJvci4gVGhpcyBkZWJ1Z2dpbmcKLQkgIGluZm9ybWF0aW9uIGlzIHVzZWZ1bCB0byBrZXJuZWwgaGFja2VycyB3aGVuIHRyYWNraW5nIGRvd24gcHJvYmxlbXMsCi0JICBidXQgbW9zdGx5IG1lYW5pbmdsZXNzIHRvIG90aGVyIHBlb3BsZS4gSXQncyBzYWZlIHRvIHNheSBZIHVubGVzcwotCSAgeW91IGFyZSBjb25jZXJuZWQgd2l0aCB0aGUgY29kZSBzaXplIG9yIGRvbid0IHdhbnQgdG8gc2VlIHRoZXNlCi0JICBtZXNzYWdlcy4KLQogY29uZmlnIERFQlVHX1NUQUNLX1VTQUdFCiAJYm9vbCAiRW5hYmxlIHN0YWNrIHV0aWxpemF0aW9uIGluc3RydW1lbnRhdGlvbiIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDhlYmJiNTEuLjBjNjg1MmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTc0LDcgKzc0LDcgQEAKIFpCU1NBRERSCTo9ICQoQ09ORklHX1pCT09UX1JPTV9CU1MpCiBlbHNlCiBaVEVYVEFERFIJOj0gMAotWkJTU0FERFIJOj0gQUxJR04oNCkKK1pCU1NBRERSCTo9IEFMSUdOKDgpCiBlbmRpZgogCiBTRURGTEFHUwk9IHMvVEVYVF9TVEFSVC8kKFpURVhUQUREUikvO3MvQlNTX1NUQVJULyQoWkJTU0FERFIpLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKaW5kZXggYWRmNTgzYy4uNDlmNWIyZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUworKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCkBAIC0xNzksMTUgKzE3OSwxNCBAQAogCQlibAljYWNoZV9vbgogCiByZXN0YXJ0OglhZHIJcjAsIExDMAotCQlsZG1pYQlyMCwge3IxLCByMiwgcjMsIHI1LCByNiwgcjksIHIxMSwgcjEyfQotCQlsZHIJc3AsIFtyMCwgIzMyXQorCQlsZG1pYQlyMCwge3IxLCByMiwgcjMsIHI2LCByOSwgcjExLCByMTJ9CisJCWxkcglzcCwgW3IwLCAjMjhdCiAKIAkJLyoKIAkJICogV2UgbWlnaHQgYmUgcnVubmluZyBhdCBhIGRpZmZlcmVudCBhZGRyZXNzLiAgV2UgbmVlZAogCQkgKiB0byBmaXggdXAgdmFyaW91cyBwb2ludGVycy4KIAkJICovCiAJCXN1YglyMCwgcjAsIHIxCQlAIGNhbGN1bGF0ZSB0aGUgZGVsdGEgb2Zmc2V0Ci0JCWFkZAlyNSwgcjUsIHIwCQlAIF9zdGFydAogCQlhZGQJcjYsIHI2LCByMAkJQCBfZWRhdGEKIAogI2lmbmRlZiBDT05GSUdfWkJPT1RfUk9NCkBAIC0yMDYsMzEgKzIwNSw0MCBAQAogLyoKICAqIENoZWNrIHRvIHNlZSBpZiB3ZSB3aWxsIG92ZXJ3cml0ZSBvdXJzZWx2ZXMuCiAgKiAgIHI0ICA9IGZpbmFsIGtlcm5lbCBhZGRyZXNzCi0gKiAgIHI1ICA9IHN0YXJ0IG9mIHRoaXMgaW1hZ2UKICAqICAgcjkgID0gc2l6ZSBvZiBkZWNvbXByZXNzZWQgaW1hZ2UKICAqICAgcjEwID0gZW5kIG9mIHRoaXMgaW1hZ2UsIGluY2x1ZGluZyAgYnNzL3N0YWNrL21hbGxvYyBzcGFjZSBpZiBub24gWElQCiAgKiBXZSBiYXNpY2FsbHkgd2FudDoKLSAqICAgcjQgPj0gcjEwIC0+IE9LCi0gKiAgIHI0ICsgaW1hZ2UgbGVuZ3RoIDw9IHI1IC0+IE9LCisgKiAgIHI0IC0gMTZrIHBhZ2UgZGlyZWN0b3J5ID49IHIxMCAtPiBPSworICogICByNCArIGltYWdlIGxlbmd0aCA8PSBjdXJyZW50IHBvc2l0aW9uIChwYykgLT4gT0sKICAqLworCQlhZGQJcjEwLCByMTAsICMxNjM4NAogCQljbXAJcjQsIHIxMAogCQliaHMJd29udF9vdmVyd3JpdGUKIAkJYWRkCXIxMCwgcjQsIHI5Ci0JCWNtcAlyMTAsIHI1CisgICBBUk0oCQljbXAJcjEwLCBwYwkJKQorIFRIVU1CKAkJbW92CWxyLCBwYwkJKQorIFRIVU1CKAkJY21wCXIxMCwgbHIJCSkKIAkJYmxzCXdvbnRfb3ZlcndyaXRlCiAKIC8qCiAgKiBSZWxvY2F0ZSBvdXJzZWx2ZXMgcGFzdCB0aGUgZW5kIG9mIHRoZSBkZWNvbXByZXNzZWQga2VybmVsLgotICogICByNSAgPSBzdGFydCBvZiB0aGlzIGltYWdlCiAgKiAgIHI2ICA9IF9lZGF0YQogICogICByMTAgPSBlbmQgb2YgdGhlIGRlY29tcHJlc3NlZCBrZXJuZWwKICAqIEJlY2F1c2Ugd2UgYWx3YXlzIGNvcHkgYWhlYWQsIHdlIG5lZWQgdG8gZG8gaXQgZnJvbSB0aGUgZW5kIGFuZCBnbwogICogYmFja3dhcmQgaW4gY2FzZSB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBvdmVybGFwLgogICovCi0JCS8qIFJvdW5kIHVwIHRvIG5leHQgMjU2LWJ5dGUgYm91bmRhcnkuICovCi0JCWFkZAlyMTAsIHIxMCwgIzI1NgorCQkvKgorCQkgKiBCdW1wIHRvIHRoZSBuZXh0IDI1Ni1ieXRlIGJvdW5kYXJ5IHdpdGggdGhlIHNpemUgb2YKKwkJICogdGhlIHJlbG9jYXRpb24gY29kZSBhZGRlZC4gVGhpcyBhdm9pZHMgb3ZlcndyaXRpbmcKKwkJICogb3Vyc2VsZiB3aGVuIHRoZSBvZmZzZXQgaXMgc21hbGwuCisJCSAqLworCQlhZGQJcjEwLCByMTAsICMoKHJlbG9jX2NvZGVfZW5kIC0gcmVzdGFydCArIDI1NikgJiB+MjU1KQogCQliaWMJcjEwLCByMTAsICMyNTUKIAorCQkvKiBHZXQgc3RhcnQgb2YgY29kZSB3ZSB3YW50IHRvIGNvcHkgYW5kIGFsaWduIGl0IGRvd24uICovCisJCWFkcglyNSwgcmVzdGFydAorCQliaWMJcjUsIHI1LCAjMzEKKwogCQlzdWIJcjksIHI2LCByNQkJQCBzaXplIHRvIGNvcHkKIAkJYWRkCXI5LCByOSwgIzMxCQlAIHJvdW5kZWQgdXAgdG8gYSBtdWx0aXBsZQogCQliaWMJcjksIHI5LCAjMzEJCUAgLi4uIG9mIDMyIGJ5dGVzCkBAIC0yNDUsNiArMjUzLDExIEBACiAJCS8qIFByZXNlcnZlIG9mZnNldCB0byByZWxvY2F0ZWQgY29kZS4gKi8KIAkJc3ViCXI2LCByOSwgcjYKIAorI2lmbmRlZiBDT05GSUdfWkJPT1RfUk9NCisJCS8qIGNhY2hlX2NsZWFuX2ZsdXNoIG1heSB1c2UgdGhlIHN0YWNrLCBzbyByZWxvY2F0ZSBpdCAqLworCQlhZGQJc3AsIHNwLCByNgorI2VuZGlmCisKIAkJYmwJY2FjaGVfY2xlYW5fZmx1c2gKIAogCQlhZHIJcjAsIEJTWU0ocmVzdGFydCkKQEAgLTMzMyw3ICszNDYsNiBAQAogTEMwOgkJLndvcmQJTEMwCQkJQCByMQogCQkud29yZAlfX2Jzc19zdGFydAkJQCByMgogCQkud29yZAlfZW5kCQkJQCByMwotCQkud29yZAlfc3RhcnQJCQlAIHI1CiAJCS53b3JkCV9lZGF0YQkJCUAgcjYKIAkJLndvcmQJX2ltYWdlX3NpemUJCUAgcjkKIAkJLndvcmQJX2dvdF9zdGFydAkJQCByMTEKQEAgLTEwNjIsNiArMTA3NCw3IEBACiAjZW5kaWYKIAogCQkubHRvcmcKK3JlbG9jX2NvZGVfZW5kOgogCiAJCS5hbGlnbgogCQkuc2VjdGlvbiAiLnN0YWNrIiwgImF3IiwgJW5vYml0cwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLmluIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLmluCmluZGV4IDUzMDk5MDkuLmVhODBhYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5pbgorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuaW4KQEAgLTU0LDYgKzU0LDcgQEAKICAgLmJzcwkJCTogeyAqKC5ic3MpIH0KICAgX2VuZCA9IC47CiAKKyAgLiA9IEFMSUdOKDgpOwkJLyogdGhlIHN0YWNrIG11c3QgYmUgNjQtYml0IGFsaWduZWQgKi8KICAgLnN0YWNrCQk6IHsgKiguc3RhY2spIH0KIAogICAuc3RhYiAwCQk6IHsgKiguc3RhYikgfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL01ha2VmaWxlIGIvYXJjaC9hcm0vY29tbW9uL01ha2VmaWxlCmluZGV4IGU3NTIxYmNhLi42ZWE5YjZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vY29tbW9uL01ha2VmaWxlCkBAIC0xNiw1ICsxNiw0IEBACiBvYmotJChDT05GSUdfQVJDSF9JWFAyMDAwKQkrPSB1ZW5naW5lLm8KIG9iai0kKENPTkZJR19BUkNIX0lYUDIzWFgpCSs9IHVlbmdpbmUubwogb2JqLSQoQ09ORklHX1BDSV9IT1NUX0lURTgxNTIpICArPSBpdDgxNTIubwotb2JqLSQoQ09ORklHX0NPTU1PTl9DTEtERVYpCSs9IGNsa2Rldi5vCiBvYmotJChDT05GSUdfQVJNX1RJTUVSX1NQODA0KQkrPSB0aW1lci1zcC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vcGwzMzAuYyBiL2FyY2gvYXJtL2NvbW1vbi9wbDMzMC5jCmluZGV4IDhmMGY4NmQuLjk3OTEyZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9wbDMzMC5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9wbDMzMC5jCkBAIC0xMDQ1LDcgKzEwNDUsNyBAQAogCXVuc2lnbmVkIGxjbnQwLCBsY250MSwgbGptcDAsIGxqbXAxOwogCXN0cnVjdCBfYXJnX0xQRU5EIGxwZW5kOwogCi0JLyogTWF4IGl0ZXJhdGlvbnMgcG9zc2liaWxlIGluIERNQUxQIGlzIDI1NiAqLworCS8qIE1heCBpdGVyYXRpb25zIHBvc3NpYmxlIGluIERNQUxQIGlzIDI1NiAqLwogCWlmICgqYnVyc3RzID49IDI1NioyNTYpIHsKIAkJbGNudDEgPSAyNTY7CiAJCWxjbnQwID0gMjU2OwpAQCAtMTQ0Niw3ICsxNDQ2LDcgQEAKIAl9CiAKIAlmb3IgKGV2ID0gMDsgZXYgPCBwaS0+cGNmZy5udW1fZXZlbnRzOyBldisrKSB7Ci0JCWlmICh2YWwgJiAoMSA8PCBldikpIHsgLyogRXZlbnQgb2NjdXJlZCAqLworCQlpZiAodmFsICYgKDEgPDwgZXYpKSB7IC8qIEV2ZW50IG9jY3VycmVkICovCiAJCQlzdHJ1Y3QgcGwzMzBfdGhyZWFkICp0aHJkOwogCQkJdTMyIGludGVuID0gcmVhZGwocmVncyArIElOVEVOKTsKIAkJCWludCBhY3RpdmU7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0OTF4NDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxeDQwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTVlOTIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxeDQwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDQ4IEBACitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfRU1CRURERUQ9eQorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CisjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUkZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19NTVUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVQ5MT15CitDT05GSUdfQVJDSF9BVDkxWDQwPXkKK0NPTkZJR19NQUNIX0FUOTFFQjAxPXkKK0NPTkZJR19BVDkxX0VBUkxZX1VTQVJUMD15CitDT05GSUdfQ1BVX0FSTTdURE1JPXkKK0NPTkZJR19TRVRfTUVNX1BBUkFNPXkKK0NPTkZJR19EUkFNX0JBU0U9MHgwMTAwMDAwMAorQ09ORklHX0RSQU1fU0laRT0weDAwNDAwMDAwCitDT05GSUdfRkxBU0hfTUVNX0JBU0U9MHgwMTQwMDAwMAorQ09ORklHX1BST0NFU1NPUl9JRD0weDE0MDAwMDQwCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19CSU5GTVRfRkxBVD15CisjIENPTkZJR19TVVNQRU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTE9DSz15CitDT05GSUdfTVREX1JBTT15CitDT05GSUdfTVREX1JPTT15CitDT05GSUdfQkxLX0RFVl9SQU09eQorIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfRlM9eQorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY3B1dHlwZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vY3B1dHlwZS5oCmluZGV4IGVkNWJjOWUuLmNkNDQ1OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdXR5cGUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHV0eXBlLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9fQVNNX0FSTV9DUFVUWVBFX0gKIAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCiAjZGVmaW5lIENQVUlEX0lECTAKICNkZWZpbmUgQ1BVSURfQ0FDSEVUWVBFCTEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2Zwc3RhdGUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2Zwc3RhdGUuaAppbmRleCBlZTVlMDNlLi4zYWQ0YzEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9mcHN0YXRlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZnBzdGF0ZS5oCkBAIC0xOCw3ICsxOCw3IEBACiAgKiBWRlAgc3RvcmFnZSBhcmVhIGhhczoKICAqICAtIEZQRVhDLCBGUFNDUiwgRlBJTlNUIGFuZCBGUElOU1QyLgogICogIC0gMTYgb3IgMzIgZG91YmxlIHByZWNpc2lvbiBkYXRhIHJlZ2lzdGVycwotICogIC0gYW4gaW1wbGVtZW50YXRpb24tZGVwZW5kYW50IHdvcmQgb2Ygc3RhdGUgZm9yIEZMRE1YL0ZTVE1YIChwcmUtQVJNdjYpCisgKiAgLSBhbiBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQgd29yZCBvZiBzdGF0ZSBmb3IgRkxETVgvRlNUTVggKHByZS1BUk12NikKICAqIAogICogIEZQRVhDIHdpbGwgYWx3YXlzIGJlIG5vbi16ZXJvIG9uY2UgdGhlIFZGUCBoYXMgYmVlbiB1c2VkIGluIHRoaXMgcHJvY2Vzcy4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS1jYWNoZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS1jYWNoZS5oCmluZGV4IGM3YWZiYzUuLjdlMzA4NzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUtY2FjaGUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLWNhY2hlLmgKQEAgLTEyNiw3ICsxMjYsNyBAQAogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChfQ0FDSEUpICYmICFkZWZpbmVkKE1VTFRJX0NBQ0hFKQotI2Vycm9yIFVua25vd24gY2FjaGUgbWFpbnRhaW5lbmNlIG1vZGVsCisjZXJyb3IgVW5rbm93biBjYWNoZSBtYWludGVuYW5jZSBtb2RlbAogI2VuZGlmCiAKICNpZm5kZWYgTVVMVElfQ0FDSEUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUuaAppbmRleCAwZWMzNWQxLi5mYmY3MWQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS5oCkBAIC0xMCw4ICsxMCw4IEBACiAgKgogICogIFRoaXMgZmlsZSBwcm92aWRlcyB0aGUgZ2x1ZSB0byBzdGljayB0aGUgcHJvY2Vzc29yLXNwZWNpZmljIGJpdHMKICAqICBpbnRvIHRoZSBrZXJuZWwgaW4gYW4gZWZmaWNpZW50IG1hbm5lci4gIFRoZSBpZGVhIGlzIHRvIHVzZSBicmFuY2hlcwotICogIHdoZW4gd2UncmUgb25seSB0YXJnZXR0aW5nIG9uZSBjbGFzcyBvZiBUTEIsIG9yIGluZGlyZWN0IGNhbGxzCi0gKiAgd2hlbiB3ZSdyZSB0YXJnZXR0aW5nIG11bHRpcGxlIGNsYXNzZXMgb2YgVExCcy4KKyAqICB3aGVuIHdlJ3JlIG9ubHkgdGFyZ2V0aW5nIG9uZSBjbGFzcyBvZiBUTEIsIG9yIGluZGlyZWN0IGNhbGxzCisgKiAgd2hlbiB3ZSdyZSB0YXJnZXRpbmcgbXVsdGlwbGUgY2xhc3NlcyBvZiBUTEJzLgogICovCiAjaWZkZWYgX19LRVJORUxfXwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9wbDA4MC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvcGwwODAuaAppbmRleCBmMzViODZlLi5lNGEwNGU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9wbDA4MC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL3BsMDgwLmgKQEAgLTE2LDcgKzE2LDcgQEAKICAqIG1ha2UgaXQgbm90IGVudGllcmx5IGNvbXBhdGlibGUgd2l0aCB0aGUgUEwwODAgc3BlY2lmaWNhdGlvbiBmcm9tCiAgKiBBUk0uIFdoZW4gaW4gZG91YnQsIGNoZWNrIHRoZSBTYW1zdW5nIGRvY3VtZW50YXRpb24gZmlyc3QuCiAgKgotICogVGhlIFNhbXN1bmcgZGVmaW5lcyBhcmUgUEwwODBTLCBhbmQgYWRkIGFuIGV4dHJhIGNvbnRyb2xsIHJlZ2lzdGVyLAorICogVGhlIFNhbXN1bmcgZGVmaW5lcyBhcmUgUEwwODBTLCBhbmQgYWRkIGFuIGV4dHJhIGNvbnRyb2wgcmVnaXN0ZXIsCiAgKiB0aGUgYWJpbGl0eSB0byBtb3ZlIG1vcmUgdGhhbiAyXjExIGNvdW50cyBvZiBkYXRhIGFuZCBzb21lIGV4dHJhCiAgKiBPbmVOQU5EIGZlYXR1cmVzLgogKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2twcm9iZXMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2twcm9iZXMuaAppbmRleCBiYjhhMTliLi5lNDZiZGQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9rcHJvYmVzLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20va3Byb2Jlcy5oCkBAIC0zOSwxMCArMzksMTMgQEAKIHN0cnVjdCBrcHJvYmU7CiB0eXBlZGVmIHZvaWQgKGtwcm9iZV9pbnNuX2hhbmRsZXJfdCkoc3RydWN0IGtwcm9iZSAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKIAordHlwZWRlZiB1bnNpZ25lZCBsb25nIChrcHJvYmVfY2hlY2tfY2MpKHVuc2lnbmVkIGxvbmcpOworCiAvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29weSBvZiBvcmlnaW5hbCBpbnN0cnVjdGlvbi4gKi8KIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gewogCWtwcm9iZV9vcGNvZGVfdAkJKmluc247CiAJa3Byb2JlX2luc25faGFuZGxlcl90CSppbnNuX2hhbmRsZXI7CisJa3Byb2JlX2NoZWNrX2NjCQkqaW5zbl9jaGVja19jYzsKIH07CiAKIHN0cnVjdCBwcmV2X2twcm9iZSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IDlhODc4MjMuLjgzMjg4OGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0xNTksNyArMTU5LDcgQEAKICNpbmNsdWRlIDxtYWNoL2JhcnJpZXJzLmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUk1fRE1BX01FTV9CVUZGRVJBQkxFKSB8fCBkZWZpbmVkKENPTkZJR19TTVApCiAjZGVmaW5lIG1iKCkJCWRvIHsgZHNiKCk7IG91dGVyX3N5bmMoKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgcm1iKCkJCWRtYigpCisjZGVmaW5lIHJtYigpCQlkc2IoKQogI2RlZmluZSB3bWIoKQkJbWIoKQogI2Vsc2UKICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CkBAIC0yNDksNyArMjQ5LDcgQEAKICAqIGNhY2hlIHRvdGFsbHkuICBUaGlzIG1lYW5zIHRoYXQgdGhlIGNhY2hlIGJlY29tZXMgaW5jb25zaXN0ZW50LCBhbmQsCiAgKiBzaW5jZSB3ZSB1c2Ugbm9ybWFsIGxvYWRzL3N0b3JlcyBhcyB3ZWxsLCB0aGlzIGlzIHJlYWxseSBiYWQuCiAgKiBUeXBpY2FsbHksIHRoaXMgY2F1c2VzIG9vcHNlbiBpbiBmaWxwX2Nsb3NlLCBidXQgY291bGQgaGF2ZSBvdGhlciwKLSAqIG1vcmUgZGlzYXN0ZXJvdXMgZWZmZWN0cy4gIFRoZXJlIGFyZSB0d28gd29yay1hcm91bmRzOgorICogbW9yZSBkaXNhc3Ryb3VzIGVmZmVjdHMuICBUaGVyZSBhcmUgdHdvIHdvcmstYXJvdW5kczoKICAqICAxLiBEaXNhYmxlIGludGVycnVwdHMgYW5kIGVtdWxhdGUgdGhlIGF0b21pYyBzd2FwCiAgKiAgMi4gQ2xlYW4gdGhlIGNhY2hlLCBwZXJmb3JtIGF0b21pYyBzd2FwLCBmbHVzaCB0aGUgY2FjaGUKICAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90aHJlYWRfbm90aWZ5LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90aHJlYWRfbm90aWZ5LmgKaW5kZXggYzQzOTFiYS4uMWRjOTgwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGhyZWFkX25vdGlmeS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RocmVhZF9ub3RpZnkuaApAQCAtNDMsNiArNDMsNyBAQAogI2RlZmluZSBUSFJFQURfTk9USUZZX0ZMVVNICTAKICNkZWZpbmUgVEhSRUFEX05PVElGWV9FWElUCTEKICNkZWZpbmUgVEhSRUFEX05PVElGWV9TV0lUQ0gJMgorI2RlZmluZSBUSFJFQURfTk9USUZZX0NPUFkJMwogCiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdWNvbnRleHQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKaW5kZXggNDdmMDIzYS4uMTQ3NDlhZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdWNvbnRleHQuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS91Y29udGV4dC5oCkBAIC00Nyw3ICs0Nyw3IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19JV01NWFQKLS8qIGl3bW14dF9hcmVhIGlzIDB4OTggYnl0ZXMgbG9uZywgcHJlY2VlZGVkIGJ5IDggYnl0ZXMgb2Ygc2lnbmF0dXJlICovCisvKiBpd21teHRfYXJlYSBpcyAweDk4IGJ5dGVzIGxvbmcsIHByZWNlZGVkIGJ5IDggYnl0ZXMgb2Ygc2lnbmF0dXJlICovCiAjZGVmaW5lIElXTU1YVF9NQUdJQwkJMHgxMmVmODQyYQogI2RlZmluZSBJV01NWFRfU1RPUkFHRV9TSVpFCShJV01NWFRfU0laRSArIDgpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggYzg5MWViNy4uODdkYmUzZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTM5Niw2ICszOTYsMTAgQEAKICNkZWZpbmUgX19OUl9mYW5vdGlmeV9pbml0CQkoX19OUl9TWVNDQUxMX0JBU0UrMzY3KQogI2RlZmluZSBfX05SX2Zhbm90aWZ5X21hcmsJCShfX05SX1NZU0NBTExfQkFTRSszNjgpCiAjZGVmaW5lIF9fTlJfcHJsaW1pdDY0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM2OSkKKyNkZWZpbmUgX19OUl9uYW1lX3RvX2hhbmRsZV9hdAkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM3MCkKKyNkZWZpbmUgX19OUl9vcGVuX2J5X2hhbmRsZV9hdAkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM3MSkKKyNkZWZpbmUgX19OUl9jbG9ja19hZGp0aW1lCQkoX19OUl9TWVNDQUxMX0JBU0UrMzcyKQorI2RlZmluZSBfX05SX3N5bmNmcwkJCShfX05SX1NZU0NBTExfQkFTRSszNzMpCiAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIFNXSXMgYXJlIEFSTSBwcml2YXRlLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlIGIvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCmluZGV4IDc0NTU0ZjEuLjhkOTU0NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKQEAgLTI5LDcgKzI5LDcgQEAKIG9iai0kKENPTkZJR19BUlRIVVIpCQkrPSBhcnRodXIubwogb2JqLSQoQ09ORklHX0lTQV9ETUEpCQkrPSBkbWEtaXNhLm8KIG9iai0kKENPTkZJR19QQ0kpCQkrPSBiaW9zMzIubyBpc2Eubwotb2JqLSQoQ09ORklHX1BNKQkJKz0gc2xlZXAubworb2JqLSQoQ09ORklHX1BNX1NMRUVQKQkJKz0gc2xlZXAubwogb2JqLSQoQ09ORklHX0hBVkVfU0NIRURfQ0xPQ0spCSs9IHNjaGVkX2Nsb2NrLm8KIG9iai0kKENPTkZJR19TTVApCQkrPSBzbXAubyBzbXBfdGxiLm8KIG9iai0kKENPTkZJR19IQVZFX0FSTV9TQ1UpCSs9IHNtcF9zY3UubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2NhbGxzLlMgYi9hcmNoL2FybS9rZXJuZWwvY2FsbHMuUwppbmRleCA1YzI2ZWNjLi43ZmJmMjhjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvY2FsbHMuUworKysgYi9hcmNoL2FybS9rZXJuZWwvY2FsbHMuUwpAQCAtMzc5LDYgKzM3OSwxMCBAQAogCQlDQUxMKHN5c19mYW5vdGlmeV9pbml0KQogCQlDQUxMKHN5c19mYW5vdGlmeV9tYXJrKQogCQlDQUxMKHN5c19wcmxpbWl0NjQpCisvKiAzNzAgKi8JQ0FMTChzeXNfbmFtZV90b19oYW5kbGVfYXQpCisJCUNBTEwoc3lzX29wZW5fYnlfaGFuZGxlX2F0KQorCQlDQUxMKHN5c19jbG9ja19hZGp0aW1lKQorCQlDQUxMKHN5c19zeW5jZnMpCiAjaWZuZGVmIHN5c2NhbGxzX2NvdW50ZWQKIC5lcXUgc3lzY2FsbHNfcGFkZGluZywgKChOUl9zeXNjYWxscyArIDMpICYgfjMpIC0gTlJfc3lzY2FsbHMKICNkZWZpbmUgc3lzY2FsbHNfY291bnRlZApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VsZi5jIGIvYXJjaC9hcm0va2VybmVsL2VsZi5jCmluZGV4IGQ0YTBkYTEuLjliMDVjNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbGYuYworKysgYi9hcmNoL2FybS9rZXJuZWwvZWxmLmMKQEAgLTQwLDE1ICs0MCwyMiBAQAogdm9pZCBlbGZfc2V0X3BlcnNvbmFsaXR5KGNvbnN0IHN0cnVjdCBlbGYzMl9oZHIgKngpCiB7CiAJdW5zaWduZWQgaW50IGVmbGFncyA9IHgtPmVfZmxhZ3M7Ci0JdW5zaWduZWQgaW50IHBlcnNvbmFsaXR5ID0gUEVSX0xJTlVYXzMyQklUOworCXVuc2lnbmVkIGludCBwZXJzb25hbGl0eSA9IGN1cnJlbnQtPnBlcnNvbmFsaXR5ICYgflBFUl9NQVNLOworCisJLyoKKwkgKiBXZSBvbmx5IHN1cHBvcnQgTGludXggRUxGIGV4ZWN1dGFibGVzLCBzbyBhbHdheXMgc2V0IHRoZQorCSAqIHBlcnNvbmFsaXR5IHRvIExJTlVYLgorCSAqLworCXBlcnNvbmFsaXR5IHw9IFBFUl9MSU5VWDsKIAogCS8qCiAJICogQVBDUy0yNiBpcyBvbmx5IHZhbGlkIGZvciBPQUJJIGV4ZWN1dGFibGVzCiAJICovCi0JaWYgKChlZmxhZ3MgJiBFRl9BUk1fRUFCSV9NQVNLKSA9PSBFRl9BUk1fRUFCSV9VTktOT1dOKSB7Ci0JCWlmIChlZmxhZ3MgJiBFRl9BUk1fQVBDU18yNikKLQkJCXBlcnNvbmFsaXR5ID0gUEVSX0xJTlVYOwotCX0KKwlpZiAoKGVmbGFncyAmIEVGX0FSTV9FQUJJX01BU0spID09IEVGX0FSTV9FQUJJX1VOS05PV04gJiYKKwkgICAgKGVmbGFncyAmIEVGX0FSTV9BUENTXzI2KSkKKwkJcGVyc29uYWxpdHkgJj0gfkFERFJfTElNSVRfMzJCSVQ7CisJZWxzZQorCQlwZXJzb25hbGl0eSB8PSBBRERSX0xJTUlUXzMyQklUOwogCiAJc2V0X3BlcnNvbmFsaXR5KHBlcnNvbmFsaXR5KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2h3X2JyZWFrcG9pbnQuYyBiL2FyY2gvYXJtL2tlcm5lbC9od19icmVha3BvaW50LmMKaW5kZXggOGRiYzEyNi4uODdhY2MyNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2h3X2JyZWFrcG9pbnQuYworKysgYi9hcmNoL2FybS9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCkBAIC04NjgsNiArODY4LDEzIEBACiAJCSAqLwogCQlhc20gdm9sYXRpbGUoIm1jciBwMTQsIDAsICUwLCBjMSwgYzAsIDQiIDogOiAiciIgKDApKTsKIAkJaXNiKCk7CisKKwkJLyoKKwkJICogQ2xlYXIgYW55IGNvbmZpZ3VyZWQgdmVjdG9yLWNhdGNoIGV2ZW50cyBiZWZvcmUKKwkJICogZW5hYmxpbmcgbW9uaXRvciBtb2RlLgorCQkgKi8KKwkJYXNtIHZvbGF0aWxlKCJtY3IgcDE0LCAwLCAlMCwgYzAsIGM3LCAwIiA6IDogInIiICgwKSk7CisJCWlzYigpOwogCX0KIAogCWlmIChlbmFibGVfbW9uaXRvcl9tb2RlKCkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy1kZWNvZGUuYyBiL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLWRlY29kZS5jCmluZGV4IDIzODkxMzEuLjE1ZWVmZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLWRlY29kZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLWRlY29kZS5jCkBAIC0zNCw5ICszNCw2IEBACiAgKgogICogICAqKSBJZiB0aGUgUEMgaXMgd3JpdHRlbiB0byBieSB0aGUgaW5zdHJ1Y3Rpb24sIHRoZQogICogICAgICBpbnN0cnVjdGlvbiBtdXN0IGJlIGZ1bGx5IHNpbXVsYXRlZCBpbiBzb2Z0d2FyZS4KLSAqICAgICAgSWYgaXQgaXMgYSBjb25kaXRpb25hbCBpbnN0cnVjdGlvbiwgdGhlIGhhbmRsZXIKLSAqICAgICAgd2lsbCB1c2UgaW5zblswXSB0byBjb3B5IGl0cyBjb25kaXRpb24gY29kZSB0bwotICoJc2V0IHIwIHRvIDEgYW5kIGluc25bMV0gdG8gIm1vdiBwYywgbHIiIHRvIHJldHVybi4KICAqCiAgKiAgICopIE90aGVyd2lzZSwgYSBtb2RpZmllZCBmb3JtIG9mIHRoZSBpbnN0cnVjdGlvbiBpcwogICogICAgICBkaXJlY3RseSBleGVjdXRlZC4gIEl0cyBoYW5kbGVyIGNhbGxzIHRoZQpAQCAtNjgsMTMgKzY1LDE3IEBACiAKICNkZWZpbmUgYnJhbmNoX2Rpc3BsYWNlbWVudChpbnNuKSBzaWduX2V4dGVuZCgoKGluc24pICYgMHhmZmZmZmYpIDw8IDIsIDI1KQogCisjZGVmaW5lIGlzX3IxNShpbnNuLCBiaXRwb3MpICgoKGluc24pICYgKDB4ZiA8PCBiaXRwb3MpKSA9PSAoMHhmIDw8IGJpdHBvcykpCisKKy8qCisgKiBUZXN0IGlmIGxvYWQvc3RvcmUgaW5zdHJ1Y3Rpb25zIHdyaXRlYmFjayB0aGUgYWRkcmVzcyByZWdpc3Rlci4KKyAqIGlmIFAgKGJpdCAyNCkgPT0gMCBvciBXIChiaXQgMjEpID09IDEKKyAqLworI2RlZmluZSBpc193cml0ZWJhY2soaW5zbikgKChpbnNuIF4gMHgwMTAwMDAwMCkgJiAweDAxMjAwMDAwKQorCiAjZGVmaW5lIFBTUl9mcwkoUFNSX2Z8UFNSX3MpCiAKICNkZWZpbmUgS1BST0JFX1JFVFVSTl9JTlNUUlVDVElPTgkweGUxYTBmMDBlCS8qIG1vdiBwYywgbHIgKi8KLSNkZWZpbmUgU0VUX1IwX1RSVUVfSU5TVFJVQ1RJT04JCTB4ZTNhMDAwMDEJLyogbW92CXIwLCAjMSAqLwotCi0jZGVmaW5lCXRydWVjY19pbnNuKGluc24pCSgoKGluc24pICYgMHhmMDAwMDAwMCkgfCBcCi0JCQkJIChTRVRfUjBfVFJVRV9JTlNUUlVDVElPTiAmIDB4MGZmZmZmZmYpKQogCiB0eXBlZGVmIGxvbmcgKGluc25fMGFyZ19mbl90KSh2b2lkKTsKIHR5cGVkZWYgbG9uZyAoaW5zbl8xYXJnX2ZuX3QpKGxvbmcpOwpAQCAtNDE5LDE0ICs0MjAsMTAgQEAKIAogc3RhdGljIHZvaWQgX19rcHJvYmVzIHNpbXVsYXRlX2JibChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlpbnNuXzFhcmdfZm5fdCAqaV9mbiA9IChpbnNuXzFhcmdfZm5fdCAqKSZwLT5haW5zbi5pbnNuWzBdOwogCWtwcm9iZV9vcGNvZGVfdCBpbnNuID0gcC0+b3Bjb2RlOwogCWxvbmcgaWFkZHIgPSAobG9uZylwLT5hZGRyOwogCWludCBkaXNwICA9IGJyYW5jaF9kaXNwbGFjZW1lbnQoaW5zbik7CiAKLQlpZiAoIWluc25zbG90XzFhcmdfcmZsYWdzKDAsIHJlZ3MtPkFSTV9jcHNyLCBpX2ZuKSkKLQkJcmV0dXJuOwotCiAJaWYgKGluc24gJiAoMSA8PCAyNCkpCiAJCXJlZ3MtPkFSTV9sciA9IGlhZGRyICsgNDsKIApAQCAtNDQ2LDE0ICs0NDMsMTAgQEAKIAogc3RhdGljIHZvaWQgX19rcHJvYmVzIHNpbXVsYXRlX2JseDJieChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlpbnNuXzFhcmdfZm5fdCAqaV9mbiA9IChpbnNuXzFhcmdfZm5fdCAqKSZwLT5haW5zbi5pbnNuWzBdOwogCWtwcm9iZV9vcGNvZGVfdCBpbnNuID0gcC0+b3Bjb2RlOwogCWludCBybSA9IGluc24gJiAweGY7CiAJbG9uZyBybXYgPSByZWdzLT51cmVnc1tybV07CiAKLQlpZiAoIWluc25zbG90XzFhcmdfcmZsYWdzKDAsIHJlZ3MtPkFSTV9jcHNyLCBpX2ZuKSkKLQkJcmV0dXJuOwotCiAJaWYgKGluc24gJiAoMSA8PCA1KSkKIAkJcmVncy0+QVJNX2xyID0gKGxvbmcpcC0+YWRkciArIDQ7CiAKQEAgLTQ2Myw5ICs0NTYsMTYgQEAKIAkJcmVncy0+QVJNX2Nwc3IgfD0gUFNSX1RfQklUOwogfQogCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgc2ltdWxhdGVfbXJzKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWtwcm9iZV9vcGNvZGVfdCBpbnNuID0gcC0+b3Bjb2RlOworCWludCByZCA9IChpbnNuID4+IDEyKSAmIDB4ZjsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAweGY4ZmYwM2RmOyAvKiBNYXNrIG91dCBleGVjdXRpb24gc3RhdGUgKi8KKwlyZWdzLT51cmVnc1tyZF0gPSByZWdzLT5BUk1fY3BzciAmIG1hc2s7Cit9CisKIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyBzaW11bGF0ZV9sZG0xc3RtMShzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlpbnNuXzFhcmdfZm5fdCAqaV9mbiA9IChpbnNuXzFhcmdfZm5fdCAqKSZwLT5haW5zbi5pbnNuWzBdOwogCWtwcm9iZV9vcGNvZGVfdCBpbnNuID0gcC0+b3Bjb2RlOwogCWludCBybiA9IChpbnNuID4+IDE2KSAmIDB4ZjsKIAlpbnQgbGJpdCA9IGluc24gJiAoMSA8PCAyMCk7CkBAIC00NzYsOSArNDc2LDYgQEAKIAlpbnQgcmVnX2JpdF92ZWN0b3I7CiAJaW50IHJlZ19jb3VudDsKIAotCWlmICghaW5zbnNsb3RfMWFyZ19yZmxhZ3MoMCwgcmVncy0+QVJNX2Nwc3IsIGlfZm4pKQotCQlyZXR1cm47Ci0KIAlyZWdfY291bnQgPSAwOwogCXJlZ19iaXRfdmVjdG9yID0gaW5zbiAmIDB4ZmZmZjsKIAl3aGlsZSAocmVnX2JpdF92ZWN0b3IpIHsKQEAgLTUxMCwxMSArNTA3LDYgQEAKIAogc3RhdGljIHZvaWQgX19rcHJvYmVzIHNpbXVsYXRlX3N0bTFfcGMoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JaW5zbl8xYXJnX2ZuX3QgKmlfZm4gPSAoaW5zbl8xYXJnX2ZuX3QgKikmcC0+YWluc24uaW5zblswXTsKLQotCWlmICghaW5zbnNsb3RfMWFyZ19yZmxhZ3MoMCwgcmVncy0+QVJNX2Nwc3IsIGlfZm4pKQotCQlyZXR1cm47Ci0KIAlyZWdzLT5BUk1fcGMgPSAobG9uZylwLT5hZGRyICsgc3RyX3BjX29mZnNldDsKIAlzaW11bGF0ZV9sZG0xc3RtMShwLCByZWdzKTsKIAlyZWdzLT5BUk1fcGMgPSAobG9uZylwLT5hZGRyICsgNDsKQEAgLTUyNSwyNCArNTE3LDE2IEBACiAJcmVncy0+dXJlZ3NbMTJdID0gcmVncy0+dXJlZ3NbMTNdOwogfQogCi1zdGF0aWMgdm9pZCBfX2twcm9iZXMgZW11bGF0ZV9sZGNzdGMoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JaW5zbl8xYXJnX2ZuX3QgKmlfZm4gPSAoaW5zbl8xYXJnX2ZuX3QgKikmcC0+YWluc24uaW5zblswXTsKLQlrcHJvYmVfb3Bjb2RlX3QgaW5zbiA9IHAtPm9wY29kZTsKLQlpbnQgcm4gPSAoaW5zbiA+PiAxNikgJiAweGY7Ci0JbG9uZyBybnYgPSByZWdzLT51cmVnc1tybl07Ci0KLQkvKiBTYXZlIFJuIGluIGNhc2Ugb2Ygd3JpdGViYWNrLiAqLwotCXJlZ3MtPnVyZWdzW3JuXSA9IGluc25zbG90XzFhcmdfcmZsYWdzKHJudiwgcmVncy0+QVJNX2Nwc3IsIGlfZm4pOwotfQotCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgZW11bGF0ZV9sZHJkKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWluc25fMmFyZ19mbl90ICppX2ZuID0gKGluc25fMmFyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07CiAJa3Byb2JlX29wY29kZV90IGluc24gPSBwLT5vcGNvZGU7CisJbG9uZyBwcGMgPSAobG9uZylwLT5hZGRyICsgODsKIAlpbnQgcmQgPSAoaW5zbiA+PiAxMikgJiAweGY7CiAJaW50IHJuID0gKGluc24gPj4gMTYpICYgMHhmOwogCWludCBybSA9IGluc24gJiAweGY7ICAvKiBybSBtYXkgYmUgaW52YWxpZCwgZG9uJ3QgY2FyZS4gKi8KKwlsb25nIHJtdiA9IChybSA9PSAxNSkgPyBwcGMgOiByZWdzLT51cmVnc1tybV07CisJbG9uZyBybnYgPSAocm4gPT0gMTUpID8gcHBjIDogcmVncy0+dXJlZ3Nbcm5dOwogCiAJLyogTm90IGZvbGxvd2luZyB0aGUgQyBjYWxsaW5nIGNvbnZlbnRpb24gaGVyZSwgc28gbmVlZCBhc20oKS4gKi8KIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCkBAIC01NTQsMjkgKzUzOCwzNiBAQAogCQkic3RyCXIwLCAlW3JuXQlcblx0IgkvKiBpbiBjYXNlIG9mIHdyaXRlYmFjayAqLwogCQkic3RyCXIyLCAlW3JkMF0JXG5cdCIKIAkJInN0cglyMywgJVtyZDFdCVxuXHQiCi0JCTogW3JuXSAgIittIiAocmVncy0+dXJlZ3Nbcm5dKSwKKwkJOiBbcm5dICAiK20iIChybnYpLAogCQkgIFtyZDBdICI9bSIgKHJlZ3MtPnVyZWdzW3JkXSksCiAJCSAgW3JkMV0gIj1tIiAocmVncy0+dXJlZ3NbcmQrMV0pCi0JCTogW3JtXSAgICJtIiAocmVncy0+dXJlZ3Nbcm1dKSwKKwkJOiBbcm1dICAgIm0iIChybXYpLAogCQkgIFtjcHNyXSAiciIgKHJlZ3MtPkFSTV9jcHNyKSwKIAkJICBbaV9mbl0gInIiIChpX2ZuKQogCQk6ICJyMCIsICJyMSIsICJyMiIsICJyMyIsICJsciIsICJjYyIKIAkpOworCWlmIChpc193cml0ZWJhY2soaW5zbikpCisJCXJlZ3MtPnVyZWdzW3JuXSA9IHJudjsKIH0KIAogc3RhdGljIHZvaWQgX19rcHJvYmVzIGVtdWxhdGVfc3RyZChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpbnNuXzRhcmdfZm5fdCAqaV9mbiA9IChpbnNuXzRhcmdfZm5fdCAqKSZwLT5haW5zbi5pbnNuWzBdOwogCWtwcm9iZV9vcGNvZGVfdCBpbnNuID0gcC0+b3Bjb2RlOworCWxvbmcgcHBjID0gKGxvbmcpcC0+YWRkciArIDg7CiAJaW50IHJkID0gKGluc24gPj4gMTIpICYgMHhmOwogCWludCBybiA9IChpbnNuID4+IDE2KSAmIDB4ZjsKIAlpbnQgcm0gID0gaW5zbiAmIDB4ZjsKLQlsb25nIHJudiA9IHJlZ3MtPnVyZWdzW3JuXTsKLQlsb25nIHJtdiA9IHJlZ3MtPnVyZWdzW3JtXTsgIC8qIHJtL3JtdiBtYXkgYmUgaW52YWxpZCwgZG9uJ3QgY2FyZS4gKi8KKwlsb25nIHJudiA9IChybiA9PSAxNSkgPyBwcGMgOiByZWdzLT51cmVnc1tybl07CisJLyogcm0vcm12IG1heSBiZSBpbnZhbGlkLCBkb24ndCBjYXJlLiAqLworCWxvbmcgcm12ID0gKHJtID09IDE1KSA/IHBwYyA6IHJlZ3MtPnVyZWdzW3JtXTsKKwlsb25nIHJudl93YjsKIAotCXJlZ3MtPnVyZWdzW3JuXSA9IGluc25zbG90XzRhcmdfcmZsYWdzKHJudiwgcm12LCByZWdzLT51cmVnc1tyZF0sCisJcm52X3diID0gaW5zbnNsb3RfNGFyZ19yZmxhZ3Mocm52LCBybXYsIHJlZ3MtPnVyZWdzW3JkXSwKIAkJCQkJICAgICAgIHJlZ3MtPnVyZWdzW3JkKzFdLAogCQkJCQkgICAgICAgcmVncy0+QVJNX2Nwc3IsIGlfZm4pOworCWlmIChpc193cml0ZWJhY2soaW5zbikpCisJCXJlZ3MtPnVyZWdzW3JuXSA9IHJudl93YjsKIH0KIAogc3RhdGljIHZvaWQgX19rcHJvYmVzIGVtdWxhdGVfbGRyKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQpAQCAtNjMwLDMxICs2MjEsNiBAQAogCQlyZWdzLT51cmVnc1tybl0gPSBybnZfd2I7ICAvKiBTYXZlIFJuIGluIGNhc2Ugb2Ygd3JpdGViYWNrLiAqLwogfQogCi1zdGF0aWMgdm9pZCBfX2twcm9iZXMgZW11bGF0ZV9tcnJjKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWluc25fbGxyZXRfMGFyZ19mbl90ICppX2ZuID0gKGluc25fbGxyZXRfMGFyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07Ci0Ja3Byb2JlX29wY29kZV90IGluc24gPSBwLT5vcGNvZGU7Ci0JdW5pb24gcmVnX3BhaXIgZm5yOwotCWludCByZCA9IChpbnNuID4+IDEyKSAmIDB4ZjsKLQlpbnQgcm4gPSAoaW5zbiA+PiAxNikgJiAweGY7Ci0KLQlmbnIuZHIgPSBpbnNuc2xvdF9sbHJldF8wYXJnX3JmbGFncyhyZWdzLT5BUk1fY3BzciwgaV9mbik7Ci0JcmVncy0+dXJlZ3Nbcm5dID0gZm5yLnIwOwotCXJlZ3MtPnVyZWdzW3JkXSA9IGZuci5yMTsKLX0KLQotc3RhdGljIHZvaWQgX19rcHJvYmVzIGVtdWxhdGVfbWNycihzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlpbnNuXzJhcmdfZm5fdCAqaV9mbiA9IChpbnNuXzJhcmdfZm5fdCAqKSZwLT5haW5zbi5pbnNuWzBdOwotCWtwcm9iZV9vcGNvZGVfdCBpbnNuID0gcC0+b3Bjb2RlOwotCWludCByZCA9IChpbnNuID4+IDEyKSAmIDB4ZjsKLQlpbnQgcm4gPSAoaW5zbiA+PiAxNikgJiAweGY7Ci0JbG9uZyBybnYgPSByZWdzLT51cmVnc1tybl07Ci0JbG9uZyByZHYgPSByZWdzLT51cmVnc1tyZF07Ci0KLQlpbnNuc2xvdF8yYXJnX3JmbGFncyhybnYsIHJkdiwgcmVncy0+QVJNX2Nwc3IsIGlfZm4pOwotfQotCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgZW11bGF0ZV9zYXQoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW5zbl8xYXJnX2ZuX3QgKmlfZm4gPSAoaW5zbl8xYXJnX2ZuX3QgKikmcC0+YWluc24uaW5zblswXTsKQEAgLTY4OCwzMiArNjU0LDMyIEBACiAJaW5zbnNsb3RfMGFyZ19yZmxhZ3MocmVncy0+QVJNX2Nwc3IsIGlfZm4pOwogfQogCi1zdGF0aWMgdm9pZCBfX2twcm9iZXMgZW11bGF0ZV9yZDEyKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgX19rcHJvYmVzIGVtdWxhdGVfbm9wKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWluc25fMGFyZ19mbl90ICppX2ZuID0gKGluc25fMGFyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07Cit9CisKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcworZW11bGF0ZV9yZDEyX21vZGlmeShzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnNuXzFhcmdfZm5fdCAqaV9mbiA9IChpbnNuXzFhcmdfZm5fdCAqKSZwLT5haW5zbi5pbnNuWzBdOwogCWtwcm9iZV9vcGNvZGVfdCBpbnNuID0gcC0+b3Bjb2RlOwogCWludCByZCA9IChpbnNuID4+IDEyKSAmIDB4ZjsKKwlsb25nIHJkdiA9IHJlZ3MtPnVyZWdzW3JkXTsKIAotCXJlZ3MtPnVyZWdzW3JkXSA9IGluc25zbG90XzBhcmdfcmZsYWdzKHJlZ3MtPkFSTV9jcHNyLCBpX2ZuKTsKKwlyZWdzLT51cmVnc1tyZF0gPSBpbnNuc2xvdF8xYXJnX3JmbGFncyhyZHYsIHJlZ3MtPkFSTV9jcHNyLCBpX2ZuKTsKIH0KIAotc3RhdGljIHZvaWQgX19rcHJvYmVzIGVtdWxhdGVfaXJkMTIoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBfX2twcm9iZXMKK2VtdWxhdGVfcmQxMnJuMF9tb2RpZnkoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JaW5zbl8xYXJnX2ZuX3QgKmlfZm4gPSAoaW5zbl8xYXJnX2ZuX3QgKikmcC0+YWluc24uaW5zblswXTsKKwlpbnNuXzJhcmdfZm5fdCAqaV9mbiA9IChpbnNuXzJhcmdfZm5fdCAqKSZwLT5haW5zbi5pbnNuWzBdOwogCWtwcm9iZV9vcGNvZGVfdCBpbnNuID0gcC0+b3Bjb2RlOwotCWludCBpcmQgPSAoaW5zbiA+PiAxMikgJiAweGY7Ci0KLQlpbnNuc2xvdF8xYXJnX3JmbGFncyhyZWdzLT51cmVnc1tpcmRdLCByZWdzLT5BUk1fY3BzciwgaV9mbik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fa3Byb2JlcyBlbXVsYXRlX3JuMTYoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JaW5zbl8xYXJnX2ZuX3QgKmlfZm4gPSAoaW5zbl8xYXJnX2ZuX3QgKikmcC0+YWluc24uaW5zblswXTsKLQlrcHJvYmVfb3Bjb2RlX3QgaW5zbiA9IHAtPm9wY29kZTsKLQlpbnQgcm4gPSAoaW5zbiA+PiAxNikgJiAweGY7CisJaW50IHJkID0gKGluc24gPj4gMTIpICYgMHhmOworCWludCBybiA9IGluc24gJiAweGY7CisJbG9uZyByZHYgPSByZWdzLT51cmVnc1tyZF07CiAJbG9uZyBybnYgPSByZWdzLT51cmVnc1tybl07CiAKLQlpbnNuc2xvdF8xYXJnX3JmbGFncyhybnYsIHJlZ3MtPkFSTV9jcHNyLCBpX2ZuKTsKKwlyZWdzLT51cmVnc1tyZF0gPSBpbnNuc2xvdF8yYXJnX3JmbGFncyhyZHYsIHJudiwgcmVncy0+QVJNX2Nwc3IsIGlfZm4pOwogfQogCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgZW11bGF0ZV9yZDEycm0wKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQpAQCAtODE5LDYgKzc4NSwxNyBAQAogfQogCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMKK2VtdWxhdGVfYWx1X3Rlc3RzX2ltbShzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnNuXzFhcmdfZm5fdCAqaV9mbiA9IChpbnNuXzFhcmdfZm5fdCAqKSZwLT5haW5zbi5pbnNuWzBdOworCWtwcm9iZV9vcGNvZGVfdCBpbnNuID0gcC0+b3Bjb2RlOworCWludCBybiA9IChpbnNuID4+IDE2KSAmIDB4ZjsKKwlsb25nIHJudiA9IChybiA9PSAxNSkgPyAobG9uZylwLT5hZGRyICsgOCA6IHJlZ3MtPnVyZWdzW3JuXTsKKworCWluc25zbG90XzFhcmdfcndmbGFncyhybnYsICZyZWdzLT5BUk1fY3BzciwgaV9mbik7Cit9CisKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcwogZW11bGF0ZV9hbHVfcmZsYWdzKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWluc25fM2FyZ19mbl90ICppX2ZuID0gKGluc25fM2FyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07CkBAIC04NTQsMTQgKzgzMSwzNCBAQAogCQlpbnNuc2xvdF8zYXJnX3J3ZmxhZ3Mocm52LCBybXYsIHJzdiwgJnJlZ3MtPkFSTV9jcHNyLCBpX2ZuKTsKIH0KIAorc3RhdGljIHZvaWQgX19rcHJvYmVzCitlbXVsYXRlX2FsdV90ZXN0cyhzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnNuXzNhcmdfZm5fdCAqaV9mbiA9IChpbnNuXzNhcmdfZm5fdCAqKSZwLT5haW5zbi5pbnNuWzBdOworCWtwcm9iZV9vcGNvZGVfdCBpbnNuID0gcC0+b3Bjb2RlOworCWxvbmcgcHBjID0gKGxvbmcpcC0+YWRkciArIDg7CisJaW50IHJuID0gKGluc24gPj4gMTYpICYgMHhmOworCWludCBycyA9IChpbnNuID4+IDgpICYgMHhmOwkvKiBycy9yc3YgbWF5IGJlIGludmFsaWQsIGRvbid0IGNhcmUuICovCisJaW50IHJtID0gaW5zbiAmIDB4ZjsKKwlsb25nIHJudiA9IChybiA9PSAxNSkgPyBwcGMgOiByZWdzLT51cmVnc1tybl07CisJbG9uZyBybXYgPSAocm0gPT0gMTUpID8gcHBjIDogcmVncy0+dXJlZ3Nbcm1dOworCWxvbmcgcnN2ID0gcmVncy0+dXJlZ3NbcnNdOworCisJaW5zbnNsb3RfM2FyZ19yd2ZsYWdzKHJudiwgcm12LCByc3YsICZyZWdzLT5BUk1fY3BzciwgaV9mbik7Cit9CisKIHN0YXRpYyBlbnVtIGtwcm9iZV9pbnNuIF9fa3Byb2JlcwogcHJlcF9lbXVsYXRlX2xkcl9zdHIoa3Byb2JlX29wY29kZV90IGluc24sIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gKmFzaSkKIHsKLQlpbnQgaWJpdCA9IChpbnNuICYgKDEgPDwgMjYpKSA/IDI1IDogMjI7CisJaW50IG5vdF9pbW0gPSAoaW5zbiAmICgxIDw8IDI2KSkgPyAoaW5zbiAmICgxIDw8IDI1KSkKKwkJCQkJIDogKH5pbnNuICYgKDEgPDwgMjIpKTsKKworCWlmIChpc193cml0ZWJhY2soaW5zbikgJiYgaXNfcjE1KGluc24sIDE2KSkKKwkJcmV0dXJuIElOU05fUkVKRUNURUQ7CS8qIFdyaXRlYmFjayB0byBQQyAqLwogCiAJaW5zbiAmPSAweGZmZjAwZmZmOwogCWluc24gfD0gMHgwMDAwMTAwMDsJLyogUm4gPSByMCwgUmQgPSByMSAqLwotCWlmIChpbnNuICYgKDEgPDwgaWJpdCkpIHsKKwlpZiAobm90X2ltbSkgewogCQlpbnNuICY9IH4weGY7CiAJCWluc24gfD0gMjsJLyogUm0gPSByMiAqLwogCX0KQEAgLTg3MSw4ICs4NjgsMzcgQEAKIH0KIAogc3RhdGljIGVudW0ga3Byb2JlX2luc24gX19rcHJvYmVzCitwcmVwX2VtdWxhdGVfcmQxMl9tb2RpZnkoa3Byb2JlX29wY29kZV90IGluc24sIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gKmFzaSkKK3sKKwlpZiAoaXNfcjE1KGluc24sIDEyKSkKKwkJcmV0dXJuIElOU05fUkVKRUNURUQ7CS8qIFJkIGlzIFBDICovCisKKwlpbnNuICY9IDB4ZmZmZjBmZmY7CS8qIFJkID0gcjAgKi8KKwlhc2ktPmluc25bMF0gPSBpbnNuOworCWFzaS0+aW5zbl9oYW5kbGVyID0gZW11bGF0ZV9yZDEyX21vZGlmeTsKKwlyZXR1cm4gSU5TTl9HT09EOworfQorCitzdGF0aWMgZW51bSBrcHJvYmVfaW5zbiBfX2twcm9iZXMKK3ByZXBfZW11bGF0ZV9yZDEycm4wX21vZGlmeShrcHJvYmVfb3Bjb2RlX3QgaW5zbiwKKwkJCSAgICBzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuICphc2kpCit7CisJaWYgKGlzX3IxNShpbnNuLCAxMikpCisJCXJldHVybiBJTlNOX1JFSkVDVEVEOwkvKiBSZCBpcyBQQyAqLworCisJaW5zbiAmPSAweGZmZmYwZmYwOwkvKiBSZCA9IHIwICovCisJaW5zbiB8PSAweDAwMDAwMDAxOwkvKiBSbiA9IHIxICovCisJYXNpLT5pbnNuWzBdID0gaW5zbjsKKwlhc2ktPmluc25faGFuZGxlciA9IGVtdWxhdGVfcmQxMnJuMF9tb2RpZnk7CisJcmV0dXJuIElOU05fR09PRDsKK30KKworc3RhdGljIGVudW0ga3Byb2JlX2luc24gX19rcHJvYmVzCiBwcmVwX2VtdWxhdGVfcmQxMnJtMChrcHJvYmVfb3Bjb2RlX3QgaW5zbiwgc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiAqYXNpKQogeworCWlmIChpc19yMTUoaW5zbiwgMTIpKQorCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsJLyogUmQgaXMgUEMgKi8KKwogCWluc24gJj0gMHhmZmZmMGZmMDsJLyogUmQgPSByMCwgUm0gPSByMCAqLwogCWFzaS0+aW5zblswXSA9IGluc247CiAJYXNpLT5pbnNuX2hhbmRsZXIgPSBlbXVsYXRlX3JkMTJybTA7CkBAIC04ODAsMTggKzkwNiwxMiBAQAogfQogCiBzdGF0aWMgZW51bSBrcHJvYmVfaW5zbiBfX2twcm9iZXMKLXByZXBfZW11bGF0ZV9yZDEyKGtwcm9iZV9vcGNvZGVfdCBpbnNuLCBzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuICphc2kpCi17Ci0JaW5zbiAmPSAweGZmZmYwZmZmOwkvKiBSZCA9IHIwICovCi0JYXNpLT5pbnNuWzBdID0gaW5zbjsKLQlhc2ktPmluc25faGFuZGxlciA9IGVtdWxhdGVfcmQxMjsKLQlyZXR1cm4gSU5TTl9HT09EOwotfQotCi1zdGF0aWMgZW51bSBrcHJvYmVfaW5zbiBfX2twcm9iZXMKIHByZXBfZW11bGF0ZV9yZDEycm4xNnJtMF93ZmxhZ3Moa3Byb2JlX29wY29kZV90IGluc24sCiAJCQkJc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiAqYXNpKQogeworCWlmIChpc19yMTUoaW5zbiwgMTIpKQorCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsJLyogUmQgaXMgUEMgKi8KKwogCWluc24gJj0gMHhmZmYwMGZmMDsJLyogUmQgPSByMCwgUm4gPSByMCAqLwogCWluc24gfD0gMHgwMDAwMDAwMTsJLyogUm0gPSByMSAqLwogCWFzaS0+aW5zblswXSA9IGluc247CkBAIC05MDMsNiArOTIzLDkgQEAKIHByZXBfZW11bGF0ZV9yZDE2cnM4cm0wX3dmbGFncyhrcHJvYmVfb3Bjb2RlX3QgaW5zbiwKIAkJCSAgICAgICBzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuICphc2kpCiB7CisJaWYgKGlzX3IxNShpbnNuLCAxNikpCisJCXJldHVybiBJTlNOX1JFSkVDVEVEOwkvKiBSZCBpcyBQQyAqLworCiAJaW5zbiAmPSAweGZmZjBmMGYwOwkvKiBSZCA9IHIwLCBScyA9IHIwICovCiAJaW5zbiB8PSAweDAwMDAwMDAxOwkvKiBSbSA9IHIxICAgICAgICAgICovCiAJYXNpLT5pbnNuWzBdID0gaW5zbjsKQEAgLTkxNCw2ICs5MzcsOSBAQAogcHJlcF9lbXVsYXRlX3JkMTZybjEycnM4cm0wX3dmbGFncyhrcHJvYmVfb3Bjb2RlX3QgaW5zbiwKIAkJCQkgICBzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuICphc2kpCiB7CisJaWYgKGlzX3IxNShpbnNuLCAxNikpCisJCXJldHVybiBJTlNOX1JFSkVDVEVEOwkvKiBSZCBpcyBQQyAqLworCiAJaW5zbiAmPSAweGZmZjAwMGYwOwkvKiBSZCA9IHIwLCBSbiA9IHIwICovCiAJaW5zbiB8PSAweDAwMDAwMTAyOwkvKiBScyA9IHIxLCBSbSA9IHIyICovCiAJYXNpLT5pbnNuWzBdID0gaW5zbjsKQEAgLTkyNSw2ICs5NTEsOSBAQAogcHJlcF9lbXVsYXRlX3JkaGkxNnJkbG8xMnJzOHJtMF93ZmxhZ3Moa3Byb2JlX29wY29kZV90IGluc24sCiAJCQkJICAgICAgIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gKmFzaSkKIHsKKwlpZiAoaXNfcjE1KGluc24sIDE2KSB8fCBpc19yMTUoaW5zbiwgMTIpKQorCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsJLyogUmRIaSBvciBSZExvIGlzIFBDICovCisKIAlpbnNuICY9IDB4ZmZmMDAwZjA7CS8qIFJkSGkgPSByMCwgUmRMbyA9IHIxICovCiAJaW5zbiB8PSAweDAwMDAxMjAzOwkvKiBScyA9IHIyLCBSbSA9IHIzICovCiAJYXNpLT5pbnNuWzBdID0gaW5zbjsKQEAgLTk0NSwyMCArOTc0LDEzIEBACiBzdGF0aWMgZW51bSBrcHJvYmVfaW5zbiBfX2twcm9iZXMKIHNwYWNlXzExMTEoa3Byb2JlX29wY29kZV90IGluc24sIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gKmFzaSkKIHsKLQkvKiBDUFMgbW1vZCA9PSAxIDogMTExMSAwMDAxIDAwMDAgeHgxMCB4eHh4IHh4eHggeHgweCB4eHh4ICovCi0JLyogUkZFICAgICAgICAgICA6IDExMTEgMTAweCB4MHgxIHh4eHggeHh4eCAxMDEwIHh4eHggeHh4eCAqLwotCS8qIFNSUyAgICAgICAgICAgOiAxMTExIDEwMHggeDF4MCAxMTAxIHh4eHggMDEwMSB4eHh4IHh4eHggKi8KLQlpZiAoKGluc24gJiAweGZmZjMwMDIwKSA9PSAweGYxMDIwMDAwIHx8Ci0JICAgIChpbnNuICYgMHhmZTUwMGYwMCkgPT0gMHhmODEwMGEwMCB8fAotCSAgICAoaW5zbiAmIDB4ZmU1ZjBmMDApID09IDB4Zjg0ZDA1MDApCi0JCXJldHVybiBJTlNOX1JFSkVDVEVEOwotCi0JLyogUExEIDogMTExMSAwMXgxIHgxMDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IDogKi8KLQlpZiAoKGluc24gJiAweGZkNzAwMDAwKSA9PSAweGY0NTAwMDAwKSB7Ci0JCWluc24gJj0gMHhmZmYwZmZmZjsJLyogUm4gPSByMCAqLwotCQlhc2ktPmluc25bMF0gPSBpbnNuOwotCQlhc2ktPmluc25faGFuZGxlciA9IGVtdWxhdGVfcm4xNjsKLQkJcmV0dXJuIElOU05fR09PRDsKKwkvKiBtZW1vcnkgaGludCA6IDExMTEgMDEwMCB4MDAxIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCA6ICovCisJLyogUExESSAgICAgICAgOiAxMTExIDAxMDAgeDEwMSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggOiAqLworCS8qIFBMRFcgICAgICAgIDogMTExMSAwMTAxIHgwMDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IDogKi8KKwkvKiBQTEQgICAgICAgICA6IDExMTEgMDEwMSB4MTAxIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCA6ICovCisJaWYgKChpbnNuICYgMHhmZTMwMDAwMCkgPT0gMHhmNDEwMDAwMCkgeworCQlhc2ktPmluc25faGFuZGxlciA9IGVtdWxhdGVfbm9wOworCQlyZXR1cm4gSU5TTl9HT09EX05PX1NMT1Q7CiAJfQogCiAJLyogQkxYKDEpIDogMTExMSAxMDF4IHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IDogKi8KQEAgLTk2Nyw0MSArOTg5LDIyIEBACiAJCXJldHVybiBJTlNOX0dPT0RfTk9fU0xPVDsKIAl9CiAKLQkvKiBTRVRFTkQgOiAxMTExIDAwMDEgMDAwMCAwMDAxIHh4eHggeHh4eCAwMDAwIHh4eHggKi8KLQkvKiBDRFAyICAgOiAxMTExIDExMTAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHgwIHh4eHggKi8KLQlpZiAoKGluc24gJiAweGZmZmYwMGYwKSA9PSAweGYxMDEwMDAwIHx8Ci0JICAgIChpbnNuICYgMHhmZjAwMDAxMCkgPT0gMHhmZTAwMDAwMCkgewotCQlhc2ktPmluc25bMF0gPSBpbnNuOwotCQlhc2ktPmluc25faGFuZGxlciA9IGVtdWxhdGVfbm9uZTsKLQkJcmV0dXJuIElOU05fR09PRDsKLQl9CisJLyogQ1BTICAgOiAxMTExIDAwMDEgMDAwMCB4eHgwIHh4eHggeHh4eCB4eDB4IHh4eHggKi8KKwkvKiBTRVRFTkQ6IDExMTEgMDAwMSAwMDAwIDAwMDEgeHh4eCB4eHh4IDAwMDAgeHh4eCAqLwogCisJLyogU1JTICAgOiAxMTExIDEwMHggeDF4MCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KKwkvKiBSRkUgICA6IDExMTEgMTAweCB4MHgxIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLworCisJLyogQ29wcm9jZXNzb3IgaW5zdHJ1Y3Rpb25zLi4uICovCiAJLyogTUNSUjIgOiAxMTExIDExMDAgMDEwMCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggOiAoUmQgIT0gUm4pICovCiAJLyogTVJSQzIgOiAxMTExIDExMDAgMDEwMSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggOiAoUmQgIT0gUm4pICovCi0JaWYgKChpbnNuICYgMHhmZmUwMDAwMCkgPT0gMHhmYzQwMDAwMCkgewotCQlpbnNuICY9IDB4ZmZmMDBmZmY7CS8qIFJuID0gcjAgKi8KLQkJaW5zbiB8PSAweDAwMDAxMDAwOwkvKiBSZCA9IHIxICovCi0JCWFzaS0+aW5zblswXSA9IGluc247Ci0JCWFzaS0+aW5zbl9oYW5kbGVyID0KLQkJCShpbnNuICYgKDEgPDwgMjApKSA/IGVtdWxhdGVfbXJyYyA6IGVtdWxhdGVfbWNycjsKLQkJcmV0dXJuIElOU05fR09PRDsKLQl9CisJLyogTERDMiAgOiAxMTExIDExMHggeHh4MSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KKwkvKiBTVEMyICA6IDExMTEgMTEweCB4eHgwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLworCS8qIENEUDIgIDogMTExMSAxMTEwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4MCB4eHh4ICovCisJLyogTUNSMiAgOiAxMTExIDExMTAgeHh4MCB4eHh4IHh4eHggeHh4eCB4eHgxIHh4eHggKi8KKwkvKiBNUkMyICA6IDExMTEgMTExMCB4eHgxIHh4eHggeHh4eCB4eHh4IHh4eDEgeHh4eCAqLwogCi0JLyogTERDMiA6IDExMTEgMTEweCB4eHgxIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLwotCS8qIFNUQzIgOiAxMTExIDExMHggeHh4MCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KLQlpZiAoKGluc24gJiAweGZlMDAwMDAwKSA9PSAweGZjMDAwMDAwKSB7Ci0JCWluc24gJj0gMHhmZmYwZmZmZjsgICAgICAvKiBSbiA9IHIwICovCi0JCWFzaS0+aW5zblswXSA9IGluc247Ci0JCWFzaS0+aW5zbl9oYW5kbGVyID0gZW11bGF0ZV9sZGNzdGM7Ci0JCXJldHVybiBJTlNOX0dPT0Q7Ci0JfQotCi0JLyogTUNSMiA6IDExMTEgMTExMCB4eHgwIHh4eHggeHh4eCB4eHh4IHh4eDEgeHh4eCAqLwotCS8qIE1SQzIgOiAxMTExIDExMTAgeHh4MSB4eHh4IHh4eHggeHh4eCB4eHgxIHh4eHggKi8KLQlpbnNuICY9IDB4ZmZmZjBmZmY7CS8qIFJkID0gcjAgKi8KLQlhc2ktPmluc25bMF0gICAgICA9IGluc247Ci0JYXNpLT5pbnNuX2hhbmRsZXIgPSAoaW5zbiAmICgxIDw8IDIwKSkgPyBlbXVsYXRlX3JkMTIgOiBlbXVsYXRlX2lyZDEyOwotCXJldHVybiBJTlNOX0dPT0Q7CisJcmV0dXJuIElOU05fUkVKRUNURUQ7CiB9CiAKIHN0YXRpYyBlbnVtIGtwcm9iZV9pbnNuIF9fa3Byb2JlcwpAQCAtMTAxMCwxOSArMTAxMywxOCBAQAogCS8qIGNjY2MgMDAwMSAweHgwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4MCB4eHh4ICovCiAJaWYgKChpbnNuICYgMHgwZjkwMDAxMCkgPT0gMHgwMTAwMDAwMCkgewogCi0JCS8qIEJYSiAgOiBjY2NjIDAwMDEgMDAxMCB4eHh4IHh4eHggeHh4eCAwMDEwIHh4eHggKi8KLQkJLyogTVNSICA6IGNjY2MgMDAwMSAweDEwIHh4eHggeHh4eCB4eHh4IDAwMDAgeHh4eCAqLwotCQlpZiAoKGluc24gJiAweDBmZjAwMGYwKSA9PSAweDAxMjAwMDIwIHx8Ci0JCSAgICAoaW5zbiAmIDB4MGZiMDAwZjApID09IDB4MDEyMDAwMDApCi0JCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKLQotCQkvKiBNUlMgOiBjY2NjIDAwMDEgMHgwMCB4eHh4IHh4eHggeHh4eCAwMDAwIHh4eHggKi8KLQkJaWYgKChpbnNuICYgMHgwZmIwMDAxMCkgPT0gMHgwMTAwMDAwMCkKLQkJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxMihpbnNuLCBhc2kpOworCQkvKiBNUlMgY3BzciA6IGNjY2MgMDAwMSAwMDAwIHh4eHggeHh4eCB4eHh4IDAwMDAgeHh4eCAqLworCQlpZiAoKGluc24gJiAweDBmZjAwMGYwKSA9PSAweDAxMDAwMDAwKSB7CisJCQlpZiAoaXNfcjE1KGluc24sIDEyKSkKKwkJCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsJLyogUmQgaXMgUEMgKi8KKwkJCWFzaS0+aW5zbl9oYW5kbGVyID0gc2ltdWxhdGVfbXJzOworCQkJcmV0dXJuIElOU05fR09PRF9OT19TTE9UOworCQl9CiAKIAkJLyogU01MQUx4eSA6IGNjY2MgMDAwMSAwMTAwIHh4eHggeHh4eCB4eHh4IDF4eDAgeHh4eCAqLwogCQlpZiAoKGluc24gJiAweDBmZjAwMDkwKSA9PSAweDAxNDAwMDgwKQotCQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZGhpMTZyZGxvMTJyczhybTBfd2ZsYWdzKGluc24sIGFzaSk7CisJCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkaGkxNnJkbG8xMnJzOHJtMF93ZmxhZ3MoaW5zbiwKKwkJCQkJCQkJCWFzaSk7CiAKIAkJLyogU01VTFd5IDogY2NjYyAwMDAxIDAwMTAgeHh4eCB4eHh4IHh4eHggMXgxMCB4eHh4ICovCiAJCS8qIFNNVUx4eSA6IGNjY2MgMDAwMSAwMTEwIHh4eHggeHh4eCB4eHh4IDF4eDAgeHh4eCAqLwpAQCAtMTAzMSwyNCArMTAzMywyOSBAQAogCQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDE2cnM4cm0wX3dmbGFncyhpbnNuLCBhc2kpOwogCiAJCS8qIFNNTEF4eSA6IGNjY2MgMDAwMSAwMDAwIHh4eHggeHh4eCB4eHh4IDF4eDAgeHh4eCA6IFEgKi8KLQkJLyogU01MQVd5IDogY2NjYyAwMDAxIDAwMTAgeHh4eCB4eHh4IHh4eHggMHgwMCB4eHh4IDogUSAqLwotCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTZybjEycnM4cm0wX3dmbGFncyhpbnNuLCBhc2kpOworCQkvKiBTTUxBV3kgOiBjY2NjIDAwMDEgMDAxMCB4eHh4IHh4eHggeHh4eCAxeDAwIHh4eHggOiBRICovCisJCWlmICgoaW5zbiAmIDB4MGZmMDAwOTApID09IDB4MDEwMDAwODAgfHwKKwkJICAgIChpbnNuICYgMHgwZmYwMDBiMCkgPT0gMHgwMTIwMDA4MCkKKwkJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxNnJuMTJyczhybTBfd2ZsYWdzKGluc24sIGFzaSk7CiAKKwkJLyogQlhKICAgICAgOiBjY2NjIDAwMDEgMDAxMCB4eHh4IHh4eHggeHh4eCAwMDEwIHh4eHggKi8KKwkJLyogTVNSICAgICAgOiBjY2NjIDAwMDEgMHgxMCB4eHh4IHh4eHggeHh4eCAwMDAwIHh4eHggKi8KKwkJLyogTVJTIHNwc3IgOiBjY2NjIDAwMDEgMDEwMCB4eHh4IHh4eHggeHh4eCAwMDAwIHh4eHggKi8KKworCQkvKiBPdGhlciBpbnN0cnVjdGlvbiBlbmNvZGluZ3MgYXJlbid0IHlldCBkZWZpbmVkICovCisJCXJldHVybiBJTlNOX1JFSkVDVEVEOwogCX0KIAogCS8qIGNjY2MgMDAwMSAweHgwIHh4eHggeHh4eCB4eHh4IHh4eHggMHh4MSB4eHh4ICovCiAJZWxzZSBpZiAoKGluc24gJiAweDBmOTAwMDkwKSA9PSAweDAxMDAwMDEwKSB7CiAKLQkJLyogQktQVCA6IDExMTAgMDAwMSAwMDEwIHh4eHggeHh4eCB4eHh4IDAxMTEgeHh4eCAqLwotCQlpZiAoKGluc24gJiAweGZmZjAwMGYwKSA9PSAweGUxMjAwMDcwKQotCQkJcmV0dXJuIElOU05fUkVKRUNURUQ7Ci0KIAkJLyogQkxYKDIpIDogY2NjYyAwMDAxIDAwMTAgeHh4eCB4eHh4IHh4eHggMDAxMSB4eHh4ICovCiAJCS8qIEJYICAgICA6IGNjY2MgMDAwMSAwMDEwIHh4eHggeHh4eCB4eHh4IDAwMDEgeHh4eCAqLwogCQlpZiAoKGluc24gJiAweDBmZjAwMGQwKSA9PSAweDAxMjAwMDEwKSB7Ci0JCQlhc2ktPmluc25bMF0gPSB0cnVlY2NfaW5zbihpbnNuKTsKKwkJCWlmICgoaW5zbiAmIDB4MGZmMDAwZmYpID09IDB4MDEyMDAwM2YpCisJCQkJcmV0dXJuIElOU05fUkVKRUNURUQ7IC8qIEJMWCBwYyAqLwogCQkJYXNpLT5pbnNuX2hhbmRsZXIgPSBzaW11bGF0ZV9ibHgyYng7Ci0JCQlyZXR1cm4gSU5TTl9HT09EOworCQkJcmV0dXJuIElOU05fR09PRF9OT19TTE9UOwogCQl9CiAKIAkJLyogQ0xaIDogY2NjYyAwMDAxIDAxMTAgeHh4eCB4eHh4IHh4eHggMDAwMSB4eHh4ICovCkBAIC0xMDU5LDE3ICsxMDY2LDI3IEBACiAJCS8qIFFTVUIgICAgOiBjY2NjIDAwMDEgMDAxMCB4eHh4IHh4eHggeHh4eCAwMTAxIHh4eHggOlEgKi8KIAkJLyogUURBREQgICA6IGNjY2MgMDAwMSAwMTAwIHh4eHggeHh4eCB4eHh4IDAxMDEgeHh4eCA6USAqLwogCQkvKiBRRFNVQiAgIDogY2NjYyAwMDAxIDAxMTAgeHh4eCB4eHh4IHh4eHggMDEwMSB4eHh4IDpRICovCi0JCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxMnJuMTZybTBfd2ZsYWdzKGluc24sIGFzaSk7CisJCWlmICgoaW5zbiAmIDB4MGY5MDAwZjApID09IDB4MDEwMDAwNTApCisJCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTJybjE2cm0wX3dmbGFncyhpbnNuLCBhc2kpOworCisJCS8qIEJLUFQgOiAxMTEwIDAwMDEgMDAxMCB4eHh4IHh4eHggeHh4eCAwMTExIHh4eHggKi8KKwkJLyogU01DICA6IGNjY2MgMDAwMSAwMTEwIHh4eHggeHh4eCB4eHh4IDAxMTEgeHh4eCAqLworCisJCS8qIE90aGVyIGluc3RydWN0aW9uIGVuY29kaW5ncyBhcmVuJ3QgeWV0IGRlZmluZWQgKi8KKwkJcmV0dXJuIElOU05fUkVKRUNURUQ7CiAJfQogCiAJLyogY2NjYyAwMDAwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggKi8KLQllbHNlIGlmICgoaW5zbiAmIDB4MGYwMDAwOTApID09IDB4MDAwMDAwOTApIHsKKwllbHNlIGlmICgoaW5zbiAmIDB4MGYwMDAwZjApID09IDB4MDAwMDAwOTApIHsKIAogCQkvKiBNVUwgICAgOiBjY2NjIDAwMDAgMDAwMCB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOiAgICovCiAJCS8qIE1VTFMgICA6IGNjY2MgMDAwMCAwMDAxIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6Y2MgKi8KIAkJLyogTUxBICAgIDogY2NjYyAwMDAwIDAwMTAgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDogICAqLwogCQkvKiBNTEFTICAgOiBjY2NjIDAwMDAgMDAxMSB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOmNjICovCiAJCS8qIFVNQUFMICA6IGNjY2MgMDAwMCAwMTAwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6ICAgKi8KKwkJLyogdW5kZWYgIDogY2NjYyAwMDAwIDAxMDEgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDogICAqLworCQkvKiBNTFMgICAgOiBjY2NjIDAwMDAgMDExMCB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOiAgICovCisJCS8qIHVuZGVmICA6IGNjY2MgMDAwMCAwMTExIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6ICAgKi8KIAkJLyogVU1VTEwgIDogY2NjYyAwMDAwIDEwMDAgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDogICAqLwogCQkvKiBVTVVMTFMgOiBjY2NjIDAwMDAgMTAwMSB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOmNjICovCiAJCS8qIFVNTEFMICA6IGNjY2MgMDAwMCAxMDEwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6ICAgKi8KQEAgLTEwNzgsMTMgKzEwOTUsMTUgQEAKIAkJLyogU01VTExTIDogY2NjYyAwMDAwIDExMDEgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDpjYyAqLwogCQkvKiBTTUxBTCAgOiBjY2NjIDAwMDAgMTExMCB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOiAgICovCiAJCS8qIFNNTEFMUyA6IGNjY2MgMDAwMCAxMTExIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6Y2MgKi8KLQkJaWYgKChpbnNuICYgMHgwZmUwMDBmMCkgPT0gMHgwMDAwMDA5MCkgewotCQkgICAgICAgcmV0dXJuIHByZXBfZW11bGF0ZV9yZDE2cnM4cm0wX3dmbGFncyhpbnNuLCBhc2kpOwotCQl9IGVsc2UgaWYgICgoaW5zbiAmIDB4MGZlMDAwZjApID09IDB4MDAyMDAwOTApIHsKLQkJICAgICAgIHJldHVybiBwcmVwX2VtdWxhdGVfcmQxNnJuMTJyczhybTBfd2ZsYWdzKGluc24sIGFzaSk7Ci0JCX0gZWxzZSB7Ci0JCSAgICAgICByZXR1cm4gcHJlcF9lbXVsYXRlX3JkaGkxNnJkbG8xMnJzOHJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKLQkJfQorCQlpZiAoKGluc24gJiAweDAwZDAwMDAwKSA9PSAweDAwNTAwMDAwKQorCQkJcmV0dXJuIElOU05fUkVKRUNURUQ7CisJCWVsc2UgaWYgKChpbnNuICYgMHgwMGUwMDAwMCkgPT0gMHgwMDAwMDAwMCkKKwkJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxNnJzOHJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKKwkJZWxzZSBpZiAoKGluc24gJiAweDAwYTAwMDAwKSA9PSAweDAwMjAwMDAwKQorCQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDE2cm4xMnJzOHJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKKwkJZWxzZQorCQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZGhpMTZyZGxvMTJyczhybTBfd2ZsYWdzKGluc24sCisJCQkJCQkJCQlhc2kpOwogCX0KIAogCS8qIGNjY2MgMDAweCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggMXh4MSB4eHh4ICovCkBAIC0xMDkyLDIzICsxMTExLDQ1IEBACiAKIAkJLyogU1dQICAgOiBjY2NjIDAwMDEgMDAwMCB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggKi8KIAkJLyogU1dQQiAgOiBjY2NjIDAwMDEgMDEwMCB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggKi8KLQkJLyogTERSRCAgOiBjY2NjIDAwMHggeHh4MCB4eHh4IHh4eHggeHh4eCAxMTAxIHh4eHggKi8KLQkJLyogU1RSRCAgOiBjY2NjIDAwMHggeHh4MCB4eHh4IHh4eHggeHh4eCAxMTExIHh4eHggKi8KKwkJLyogPz8/ICAgOiBjY2NjIDAwMDEgMHgwMSB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggKi8KKwkJLyogPz8/ICAgOiBjY2NjIDAwMDEgMHgxMCB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggKi8KKwkJLyogPz8/ICAgOiBjY2NjIDAwMDEgMHgxMSB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggKi8KIAkJLyogU1RSRVggOiBjY2NjIDAwMDEgMTAwMCB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggKi8KIAkJLyogTERSRVggOiBjY2NjIDAwMDEgMTAwMSB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggKi8KKwkJLyogU1RSRVhEOiBjY2NjIDAwMDEgMTAxMCB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggKi8KKwkJLyogTERSRVhEOiBjY2NjIDAwMDEgMTAxMSB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggKi8KKwkJLyogU1RSRVhCOiBjY2NjIDAwMDEgMTEwMCB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggKi8KKwkJLyogTERSRVhCOiBjY2NjIDAwMDEgMTEwMSB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggKi8KKwkJLyogU1RSRVhIOiBjY2NjIDAwMDEgMTExMCB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggKi8KKwkJLyogTERSRVhIOiBjY2NjIDAwMDEgMTExMSB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggKi8KKworCQkvKiBMRFJEICA6IGNjY2MgMDAweCB4eHgwIHh4eHggeHh4eCB4eHh4IDExMDEgeHh4eCAqLworCQkvKiBTVFJEICA6IGNjY2MgMDAweCB4eHgwIHh4eHggeHh4eCB4eHh4IDExMTEgeHh4eCAqLwogCQkvKiBMRFJIICA6IGNjY2MgMDAweCB4eHgxIHh4eHggeHh4eCB4eHh4IDEwMTEgeHh4eCAqLwogCQkvKiBTVFJIICA6IGNjY2MgMDAweCB4eHgwIHh4eHggeHh4eCB4eHh4IDEwMTEgeHh4eCAqLwogCQkvKiBMRFJTQiA6IGNjY2MgMDAweCB4eHgxIHh4eHggeHh4eCB4eHh4IDExMDEgeHh4eCAqLwogCQkvKiBMRFJTSCA6IGNjY2MgMDAweCB4eHgxIHh4eHggeHh4eCB4eHh4IDExMTEgeHh4eCAqLwotCQlpZiAoKGluc24gJiAweDBmYjAwMGYwKSA9PSAweDAxMDAwMDkwKSB7Ci0JCQkvKiBTV1AvU1dQQiAqLwotCQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDEycm4xNnJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKKwkJaWYgKChpbnNuICYgMHgwZjAwMDBmMCkgPT0gMHgwMTAwMDA5MCkgeworCQkJaWYgKChpbnNuICYgMHgwZmIwMDBmMCkgPT0gMHgwMTAwMDA5MCkgeworCQkJCS8qIFNXUC9TV1BCICovCisJCQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDEycm4xNnJtMF93ZmxhZ3MoaW5zbiwKKwkJCQkJCQkJCWFzaSk7CisJCQl9IGVsc2UgeworCQkJCS8qIFNUUkVYL0xEUkVYIHZhcmlhbnRzIGFuZCB1bmFsbG9jYWVkIHNwYWNlICovCisJCQkJcmV0dXJuIElOU05fUkVKRUNURUQ7CisJCQl9CisKIAkJfSBlbHNlIGlmICgoaW5zbiAmIDB4MGUxMDAwZDApID09IDB4MDAwMDBkMCkgewogCQkJLyogU1RSRC9MRFJEICovCisJCQlpZiAoKGluc24gJiAweDAwMDBlMDAwKSA9PSAweDAwMDBlMDAwKQorCQkJCXJldHVybiBJTlNOX1JFSkVDVEVEOwkvKiBSZCBpcyBMUiBvciBQQyAqLworCQkJaWYgKGlzX3dyaXRlYmFjayhpbnNuKSAmJiBpc19yMTUoaW5zbiwgMTYpKQorCQkJCXJldHVybiBJTlNOX1JFSkVDVEVEOwkvKiBXcml0ZWJhY2sgdG8gUEMgKi8KKwogCQkJaW5zbiAmPSAweGZmZjAwZmZmOwogCQkJaW5zbiB8PSAweDAwMDAyMDAwOwkvKiBSbiA9IHIwLCBSZCA9IHIyICovCi0JCQlpZiAoaW5zbiAmICgxIDw8IDIyKSkgewotCQkJCS8qIEkgYml0ICovCisJCQlpZiAoIShpbnNuICYgKDEgPDwgMjIpKSkgeworCQkJCS8qIFJlZ2lzdGVyIGluZGV4ICovCiAJCQkJaW5zbiAmPSB+MHhmOwogCQkJCWluc24gfD0gMTsJLyogUm0gPSByMSAqLwogCQkJfQpAQCAtMTExOCw2ICsxMTU5LDkgQEAKIAkJCXJldHVybiBJTlNOX0dPT0Q7CiAJCX0KIAorCQkvKiBMRFJIL1NUUkgvTERSU0IvTERSU0ggKi8KKwkJaWYgKGlzX3IxNShpbnNuLCAxMikpCisJCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsJLyogUmQgaXMgUEMgKi8KIAkJcmV0dXJuIHByZXBfZW11bGF0ZV9sZHJfc3RyKGluc24sIGFzaSk7CiAJfQogCkBAIC0xMTI1LDcgKzExNjksNyBAQAogCiAJLyoKIAkgKiBBTFUgb3Agd2l0aCBTIGJpdCBhbmQgUmQgPT0gMTUgOgotCSAqIAljY2NjIDAwMHggeHh4MSB4eHh4IDExMTEgeHh4eCB4eHh4IHh4eHgKKwkgKgljY2NjIDAwMHggeHh4MSB4eHh4IDExMTEgeHh4eCB4eHh4IHh4eHgKIAkgKi8KIAlpZiAoKGluc24gJiAweDBlMTBmMDAwKSA9PSAweDAwMTBmMDAwKQogCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKQEAgLTExNTQsMjIgKzExOTgsNjEgQEAKIAkJaW5zbiB8PSAweDAwMDAwMjAwOyAgICAgLyogUnMgPSByMiAqLwogCX0KIAlhc2ktPmluc25bMF0gPSBpbnNuOwotCWFzaS0+aW5zbl9oYW5kbGVyID0gKGluc24gJiAoMSA8PCAyMCkpID8gIC8qIFMtYml0ICovCisKKwlpZiAoKGluc24gJiAweDBmOTAwMDAwKSA9PSAweDAxMTAwMDAwKSB7CisJCS8qCisJCSAqIFRTVCA6IGNjY2MgMDAwMSAwMDAxIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eAorCQkgKiBURVEgOiBjY2NjIDAwMDEgMDAxMSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHgKKwkJICogQ01QIDogY2NjYyAwMDAxIDAxMDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4CisJCSAqIENNTiA6IGNjY2MgMDAwMSAwMTExIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eAorCQkgKi8KKwkJYXNpLT5pbnNuX2hhbmRsZXIgPSBlbXVsYXRlX2FsdV90ZXN0czsKKwl9IGVsc2UgeworCQkvKiBBTFUgb3BzIHdoaWNoIHdyaXRlIHRvIFJkICovCisJCWFzaS0+aW5zbl9oYW5kbGVyID0gKGluc24gJiAoMSA8PCAyMCkpID8gIC8qIFMtYml0ICovCiAJCQkJZW11bGF0ZV9hbHVfcndmbGFncyA6IGVtdWxhdGVfYWx1X3JmbGFnczsKKwl9CiAJcmV0dXJuIElOU05fR09PRDsKIH0KIAogc3RhdGljIGVudW0ga3Byb2JlX2luc24gX19rcHJvYmVzCiBzcGFjZV9jY2NjXzAwMXgoa3Byb2JlX29wY29kZV90IGluc24sIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gKmFzaSkKIHsKKwkvKiBNT1ZXICA6IGNjY2MgMDAxMSAwMDAwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLworCS8qIE1PVlQgIDogY2NjYyAwMDExIDAxMDAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCisJaWYgKChpbnNuICYgMHgwZmIwMDAwMCkgPT0gMHgwMzAwMDAwMCkKKwkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDEyX21vZGlmeShpbnNuLCBhc2kpOworCisJLyogaGludHMgOiBjY2NjIDAwMTEgMDAxMCAwMDAwIHh4eHggeHh4eCB4eHh4IHh4eHggKi8KKwlpZiAoKGluc24gJiAweDBmZmYwMDAwKSA9PSAweDAzMjAwMDAwKSB7CisJCXVuc2lnbmVkIG9wMiA9IGluc24gJiAweDAwMDAwMGZmOworCQlpZiAob3AyID09IDB4MDEgfHwgb3AyID09IDB4MDQpIHsKKwkJCS8qIFlJRUxEIDogY2NjYyAwMDExIDAwMTAgMDAwMCB4eHh4IHh4eHggMDAwMCAwMDAxICovCisJCQkvKiBTRVYgICA6IGNjY2MgMDAxMSAwMDEwIDAwMDAgeHh4eCB4eHh4IDAwMDAgMDEwMCAqLworCQkJYXNpLT5pbnNuWzBdID0gaW5zbjsKKwkJCWFzaS0+aW5zbl9oYW5kbGVyID0gZW11bGF0ZV9ub25lOworCQkJcmV0dXJuIElOU05fR09PRDsKKwkJfSBlbHNlIGlmIChvcDIgPD0gMHgwMykgeworCQkJLyogTk9QICAgOiBjY2NjIDAwMTEgMDAxMCAwMDAwIHh4eHggeHh4eCAwMDAwIDAwMDAgKi8KKwkJCS8qIFdGRSAgIDogY2NjYyAwMDExIDAwMTAgMDAwMCB4eHh4IHh4eHggMDAwMCAwMDEwICovCisJCQkvKiBXRkkgICA6IGNjY2MgMDAxMSAwMDEwIDAwMDAgeHh4eCB4eHh4IDAwMDAgMDAxMSAqLworCQkJLyoKKwkJCSAqIFdlIG1ha2UgV0ZFIGFuZCBXRkkgdHJ1ZSBOT1BzIHRvIGF2b2lkIHN0YWxscyBkdWUKKwkJCSAqIHRvIG1pc3NpbmcgZXZlbnRzIHdoaWxzdCBwcm9jZXNzaW5nIHRoZSBwcm9iZS4KKwkJCSAqLworCQkJYXNpLT5pbnNuX2hhbmRsZXIgPSBlbXVsYXRlX25vcDsKKwkJCXJldHVybiBJTlNOX0dPT0RfTk9fU0xPVDsKKwkJfQorCQkvKiBGb3IgREJHIGFuZCB1bmFsbG9jYXRlZCBoaW50cyBpdCdzIHNhZmVzdCB0byByZWplY3QgdGhlbSAqLworCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKKwl9CisKIAkvKgogCSAqIE1TUiAgIDogY2NjYyAwMDExIDB4MTAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4Ci0JICogVW5kZWYgOiBjY2NjIDAwMTEgMDEwMCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHgKIAkgKiBBTFUgb3Agd2l0aCBTIGJpdCBhbmQgUmQgPT0gMTUgOgogCSAqCSAgIGNjY2MgMDAxeCB4eHgxIHh4eHggMTExMSB4eHh4IHh4eHggeHh4eAogCSAqLwogCWlmICgoaW5zbiAmIDB4MGZiMDAwMDApID09IDB4MDMyMDAwMDAgfHwJLyogTVNSICovCi0JICAgIChpbnNuICYgMHgwZmYwMDAwMCkgPT0gMHgwMzQwMDAwMCB8fAkvKiBVbmRlZiAqLwogCSAgICAoaW5zbiAmIDB4MGUxMGYwMDApID09IDB4MDIxMGYwMDApCQkvKiBBTFUgcy1iaXQsIFIxNSAgKi8KIAkJcmV0dXJuIElOU05fUkVKRUNURUQ7CiAKQEAgLTExODAsMTAgKzEyNjMsMjIgQEAKIAkgKiAqUyAoYml0IDIwKSB1cGRhdGVzIGNvbmRpdGlvbiBjb2RlcwogCSAqIEFEQy9TQkMvUlNDIHJlYWRzIHRoZSBDIGZsYWcKIAkgKi8KLQlpbnNuICY9IDB4ZmZmZjBmZmY7CS8qIFJkID0gcjAgKi8KKwlpbnNuICY9IDB4ZmZmMDBmZmY7CS8qIFJuID0gcjAgYW5kIFJkID0gcjAgKi8KIAlhc2ktPmluc25bMF0gPSBpbnNuOwotCWFzaS0+aW5zbl9oYW5kbGVyID0gKGluc24gJiAoMSA8PCAyMCkpID8gIC8qIFMtYml0ICovCisKKwlpZiAoKGluc24gJiAweDBmOTAwMDAwKSA9PSAweDAzMTAwMDAwKSB7CisJCS8qCisJCSAqIFRTVCA6IGNjY2MgMDAxMSAwMDAxIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eAorCQkgKiBURVEgOiBjY2NjIDAwMTEgMDAxMSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHgKKwkJICogQ01QIDogY2NjYyAwMDExIDAxMDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4CisJCSAqIENNTiA6IGNjY2MgMDAxMSAwMTExIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eAorCQkgKi8KKwkJYXNpLT5pbnNuX2hhbmRsZXIgPSBlbXVsYXRlX2FsdV90ZXN0c19pbW07CisJfSBlbHNlIHsKKwkJLyogQUxVIG9wcyB3aGljaCB3cml0ZSB0byBSZCAqLworCQlhc2ktPmluc25faGFuZGxlciA9IChpbnNuICYgKDEgPDwgMjApKSA/ICAvKiBTLWJpdCAqLwogCQkJZW11bGF0ZV9hbHVfaW1tX3J3ZmxhZ3MgOiBlbXVsYXRlX2FsdV9pbW1fcmZsYWdzOworCX0KIAlyZXR1cm4gSU5TTl9HT09EOwogfQogCkBAIC0xMTkyLDYgKzEyODcsOCBAQAogewogCS8qIFNFTCA6IGNjY2MgMDExMCAxMDAwIHh4eHggeHh4eCB4eHh4IDEwMTEgeHh4eCBHRTogISEhICovCiAJaWYgKChpbnNuICYgMHgwZmYwMDBmMCkgPT0gMHgwNjgwMDBiMCkgeworCQlpZiAoaXNfcjE1KGluc24sIDEyKSkKKwkJCXJldHVybiBJTlNOX1JFSkVDVEVEOwkvKiBSZCBpcyBQQyAqLwogCQlpbnNuICY9IDB4ZmZmMDBmZjA7CS8qIFJkID0gcjAsIFJuID0gcjAgKi8KIAkJaW5zbiB8PSAweDAwMDAwMDAxOwkvKiBSbSA9IHIxICovCiAJCWFzaS0+aW5zblswXSA9IGluc247CkBAIC0xMjA1LDYgKzEzMDIsOCBAQAogCS8qIFVTQVQxNiA6IGNjY2MgMDExMCAxMTEwIHh4eHggeHh4eCB4eHh4IDAwMTEgeHh4eCA6USAqLwogCWlmICgoaW5zbiAmIDB4MGZhMDAwMzApID09IDB4MDZhMDAwMTAgfHwKIAkgICAgKGluc24gJiAweDBmYjAwMGYwKSA9PSAweDA2YTAwMDMwKSB7CisJCWlmIChpc19yMTUoaW5zbiwgMTIpKQorCQkJcmV0dXJuIElOU05fUkVKRUNURUQ7CS8qIFJkIGlzIFBDICovCiAJCWluc24gJj0gMHhmZmZmMGZmMDsJLyogUmQgPSByMCwgUm0gPSByMCAqLwogCQlhc2ktPmluc25bMF0gPSBpbnNuOwogCQlhc2ktPmluc25faGFuZGxlciA9IGVtdWxhdGVfc2F0OwpAQCAtMTIxMyw1NyArMTMxMiwxMDEgQEAKIAogCS8qIFJFViAgICA6IGNjY2MgMDExMCAxMDExIHh4eHggeHh4eCB4eHh4IDAwMTEgeHh4eCAqLwogCS8qIFJFVjE2ICA6IGNjY2MgMDExMCAxMDExIHh4eHggeHh4eCB4eHh4IDEwMTEgeHh4eCAqLworCS8qIFJCSVQgICA6IGNjY2MgMDExMCAxMTExIHh4eHggeHh4eCB4eHh4IDAwMTEgeHh4eCAqLwogCS8qIFJFVlNIICA6IGNjY2MgMDExMCAxMTExIHh4eHggeHh4eCB4eHh4IDEwMTEgeHh4eCAqLwogCWlmICgoaW5zbiAmIDB4MGZmMDAwNzApID09IDB4MDZiMDAwMzAgfHwKLQkgICAgKGluc24gJiAweDBmZjAwMGYwKSA9PSAweDA2ZjAwMGIwKQorCSAgICAoaW5zbiAmIDB4MGZmMDAwNzApID09IDB4MDZmMDAwMzApCiAJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxMnJtMChpbnNuLCBhc2kpOwogCisJLyogPz8/ICAgICAgIDogY2NjYyAwMTEwIDAwMDAgeHh4eCB4eHh4IHh4eHggeHh4MSB4eHh4IDogICAqLwogCS8qIFNBREQxNiAgICA6IGNjY2MgMDExMCAwMDAxIHh4eHggeHh4eCB4eHh4IDAwMDEgeHh4eCA6R0UgKi8KIAkvKiBTQUREU1VCWCAgOiBjY2NjIDAxMTAgMDAwMSB4eHh4IHh4eHggeHh4eCAwMDExIHh4eHggOkdFICovCiAJLyogU1NVQkFERFggIDogY2NjYyAwMTEwIDAwMDEgeHh4eCB4eHh4IHh4eHggMDEwMSB4eHh4IDpHRSAqLwogCS8qIFNTVUIxNiAgICA6IGNjY2MgMDExMCAwMDAxIHh4eHggeHh4eCB4eHh4IDAxMTEgeHh4eCA6R0UgKi8KIAkvKiBTQUREOCAgICAgOiBjY2NjIDAxMTAgMDAwMSB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOkdFICovCisJLyogPz8/ICAgICAgIDogY2NjYyAwMTEwIDAwMDEgeHh4eCB4eHh4IHh4eHggMTAxMSB4eHh4IDogICAqLworCS8qID8/PyAgICAgICA6IGNjY2MgMDExMCAwMDAxIHh4eHggeHh4eCB4eHh4IDExMDEgeHh4eCA6ICAgKi8KIAkvKiBTU1VCOCAgICAgOiBjY2NjIDAxMTAgMDAwMSB4eHh4IHh4eHggeHh4eCAxMTExIHh4eHggOkdFICovCiAJLyogUUFERDE2ICAgIDogY2NjYyAwMTEwIDAwMTAgeHh4eCB4eHh4IHh4eHggMDAwMSB4eHh4IDogICAqLwogCS8qIFFBRERTVUJYICA6IGNjY2MgMDExMCAwMDEwIHh4eHggeHh4eCB4eHh4IDAwMTEgeHh4eCA6ICAgKi8KIAkvKiBRU1VCQUREWCAgOiBjY2NjIDAxMTAgMDAxMCB4eHh4IHh4eHggeHh4eCAwMTAxIHh4eHggOiAgICovCiAJLyogUVNVQjE2ICAgIDogY2NjYyAwMTEwIDAwMTAgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLwogCS8qIFFBREQ4ICAgICA6IGNjY2MgMDExMCAwMDEwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6ICAgKi8KKwkvKiA/Pz8gICAgICAgOiBjY2NjIDAxMTAgMDAxMCB4eHh4IHh4eHggeHh4eCAxMDExIHh4eHggOiAgICovCisJLyogPz8/ICAgICAgIDogY2NjYyAwMTEwIDAwMTAgeHh4eCB4eHh4IHh4eHggMTEwMSB4eHh4IDogICAqLwogCS8qIFFTVUI4ICAgICA6IGNjY2MgMDExMCAwMDEwIHh4eHggeHh4eCB4eHh4IDExMTEgeHh4eCA6ICAgKi8KIAkvKiBTSEFERDE2ICAgOiBjY2NjIDAxMTAgMDAxMSB4eHh4IHh4eHggeHh4eCAwMDAxIHh4eHggOiAgICovCiAJLyogU0hBRERTVUJYIDogY2NjYyAwMTEwIDAwMTEgeHh4eCB4eHh4IHh4eHggMDAxMSB4eHh4IDogICAqLwogCS8qIFNIU1VCQUREWCA6IGNjY2MgMDExMCAwMDExIHh4eHggeHh4eCB4eHh4IDAxMDEgeHh4eCA6ICAgKi8KIAkvKiBTSFNVQjE2ICAgOiBjY2NjIDAxMTAgMDAxMSB4eHh4IHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCiAJLyogU0hBREQ4ICAgIDogY2NjYyAwMTEwIDAwMTEgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDogICAqLworCS8qID8/PyAgICAgICA6IGNjY2MgMDExMCAwMDExIHh4eHggeHh4eCB4eHh4IDEwMTEgeHh4eCA6ICAgKi8KKwkvKiA/Pz8gICAgICAgOiBjY2NjIDAxMTAgMDAxMSB4eHh4IHh4eHggeHh4eCAxMTAxIHh4eHggOiAgICovCiAJLyogU0hTVUI4ICAgIDogY2NjYyAwMTEwIDAwMTEgeHh4eCB4eHh4IHh4eHggMTExMSB4eHh4IDogICAqLworCS8qID8/PyAgICAgICA6IGNjY2MgMDExMCAwMTAwIHh4eHggeHh4eCB4eHh4IHh4eDEgeHh4eCA6ICAgKi8KIAkvKiBVQUREMTYgICAgOiBjY2NjIDAxMTAgMDEwMSB4eHh4IHh4eHggeHh4eCAwMDAxIHh4eHggOkdFICovCiAJLyogVUFERFNVQlggIDogY2NjYyAwMTEwIDAxMDEgeHh4eCB4eHh4IHh4eHggMDAxMSB4eHh4IDpHRSAqLwogCS8qIFVTVUJBRERYICA6IGNjY2MgMDExMCAwMTAxIHh4eHggeHh4eCB4eHh4IDAxMDEgeHh4eCA6R0UgKi8KIAkvKiBVU1VCMTYgICAgOiBjY2NjIDAxMTAgMDEwMSB4eHh4IHh4eHggeHh4eCAwMTExIHh4eHggOkdFICovCiAJLyogVUFERDggICAgIDogY2NjYyAwMTEwIDAxMDEgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDpHRSAqLworCS8qID8/PyAgICAgICA6IGNjY2MgMDExMCAwMTAxIHh4eHggeHh4eCB4eHh4IDEwMTEgeHh4eCA6ICAgKi8KKwkvKiA/Pz8gICAgICAgOiBjY2NjIDAxMTAgMDEwMSB4eHh4IHh4eHggeHh4eCAxMTAxIHh4eHggOiAgICovCiAJLyogVVNVQjggICAgIDogY2NjYyAwMTEwIDAxMDEgeHh4eCB4eHh4IHh4eHggMTExMSB4eHh4IDpHRSAqLwogCS8qIFVRQUREMTYgICA6IGNjY2MgMDExMCAwMTEwIHh4eHggeHh4eCB4eHh4IDAwMDEgeHh4eCA6ICAgKi8KIAkvKiBVUUFERFNVQlggOiBjY2NjIDAxMTAgMDExMCB4eHh4IHh4eHggeHh4eCAwMDExIHh4eHggOiAgICovCiAJLyogVVFTVUJBRERYIDogY2NjYyAwMTEwIDAxMTAgeHh4eCB4eHh4IHh4eHggMDEwMSB4eHh4IDogICAqLwogCS8qIFVRU1VCMTYgICA6IGNjY2MgMDExMCAwMTEwIHh4eHggeHh4eCB4eHh4IDAxMTEgeHh4eCA6ICAgKi8KIAkvKiBVUUFERDggICAgOiBjY2NjIDAxMTAgMDExMCB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOiAgICovCisJLyogPz8/ICAgICAgIDogY2NjYyAwMTEwIDAxMTAgeHh4eCB4eHh4IHh4eHggMTAxMSB4eHh4IDogICAqLworCS8qID8/PyAgICAgICA6IGNjY2MgMDExMCAwMTEwIHh4eHggeHh4eCB4eHh4IDExMDEgeHh4eCA6ICAgKi8KIAkvKiBVUVNVQjggICAgOiBjY2NjIDAxMTAgMDExMCB4eHh4IHh4eHggeHh4eCAxMTExIHh4eHggOiAgICovCiAJLyogVUhBREQxNiAgIDogY2NjYyAwMTEwIDAxMTEgeHh4eCB4eHh4IHh4eHggMDAwMSB4eHh4IDogICAqLwogCS8qIFVIQUREU1VCWCA6IGNjY2MgMDExMCAwMTExIHh4eHggeHh4eCB4eHh4IDAwMTEgeHh4eCA6ICAgKi8KIAkvKiBVSFNVQkFERFggOiBjY2NjIDAxMTAgMDExMSB4eHh4IHh4eHggeHh4eCAwMTAxIHh4eHggOiAgICovCiAJLyogVUhTVUIxNiAgIDogY2NjYyAwMTEwIDAxMTEgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLwogCS8qIFVIQUREOCAgICA6IGNjY2MgMDExMCAwMTExIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6ICAgKi8KKwkvKiA/Pz8gICAgICAgOiBjY2NjIDAxMTAgMDExMSB4eHh4IHh4eHggeHh4eCAxMDExIHh4eHggOiAgICovCisJLyogPz8/ICAgICAgIDogY2NjYyAwMTEwIDAxMTEgeHh4eCB4eHh4IHh4eHggMTEwMSB4eHh4IDogICAqLwogCS8qIFVIU1VCOCAgICA6IGNjY2MgMDExMCAwMTExIHh4eHggeHh4eCB4eHh4IDExMTEgeHh4eCA6ICAgKi8KKwlpZiAoKGluc24gJiAweDBmODAwMDEwKSA9PSAweDA2MDAwMDEwKSB7CisJCWlmICgoaW5zbiAmIDB4MDAzMDAwMDApID09IDB4MDAwMDAwMDAgfHwKKwkJICAgIChpbnNuICYgMHgwMDAwMDBlMCkgPT0gMHgwMDAwMDBhMCB8fAorCQkgICAgKGluc24gJiAweDAwMDAwMGUwKSA9PSAweDAwMDAwMGMwKQorCQkJcmV0dXJuIElOU05fUkVKRUNURUQ7CS8qIFVuYWxsb2NhdGVkIHNwYWNlICovCisJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxMnJuMTZybTBfd2ZsYWdzKGluc24sIGFzaSk7CisJfQorCiAJLyogUEtIQlQgICAgIDogY2NjYyAwMTEwIDEwMDAgeHh4eCB4eHh4IHh4eHggeDAwMSB4eHh4IDogICAqLwogCS8qIFBLSFRCICAgICA6IGNjY2MgMDExMCAxMDAwIHh4eHggeHh4eCB4eHh4IHgxMDEgeHh4eCA6ICAgKi8KKwlpZiAoKGluc24gJiAweDBmZjAwMDMwKSA9PSAweDA2ODAwMDEwKQorCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTJybjE2cm0wX3dmbGFncyhpbnNuLCBhc2kpOworCiAJLyogU1hUQUIxNiAgIDogY2NjYyAwMTEwIDEwMDAgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLwotCS8qIFNYVEIgICAgICA6IGNjY2MgMDExMCAxMDEwIHh4eHggeHh4eCB4eHh4IDAxMTEgeHh4eCA6ICAgKi8KKwkvKiBTWFRCMTYgICAgOiBjY2NjIDAxMTAgMTAwMCAxMTExIHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCisJLyogPz8/ICAgICAgIDogY2NjYyAwMTEwIDEwMDEgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLwogCS8qIFNYVEFCICAgICA6IGNjY2MgMDExMCAxMDEwIHh4eHggeHh4eCB4eHh4IDAxMTEgeHh4eCA6ICAgKi8KKwkvKiBTWFRCICAgICAgOiBjY2NjIDAxMTAgMTAxMCAxMTExIHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCiAJLyogU1hUQUggICAgIDogY2NjYyAwMTEwIDEwMTEgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLworCS8qIFNYVEggICAgICA6IGNjY2MgMDExMCAxMDExIDExMTEgeHh4eCB4eHh4IDAxMTEgeHh4eCA6ICAgKi8KIAkvKiBVWFRBQjE2ICAgOiBjY2NjIDAxMTAgMTEwMCB4eHh4IHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCisJLyogVVhUQjE2ICAgIDogY2NjYyAwMTEwIDExMDAgMTExMSB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLworCS8qID8/PyAgICAgICA6IGNjY2MgMDExMCAxMTAxIHh4eHggeHh4eCB4eHh4IDAxMTEgeHh4eCA6ICAgKi8KIAkvKiBVWFRBQiAgICAgOiBjY2NjIDAxMTAgMTExMCB4eHh4IHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCisJLyogVVhUQiAgICAgIDogY2NjYyAwMTEwIDExMTAgMTExMSB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLwogCS8qIFVYVEFIICAgICA6IGNjY2MgMDExMCAxMTExIHh4eHggeHh4eCB4eHh4IDAxMTEgeHh4eCA6ICAgKi8KLQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTJybjE2cm0wX3dmbGFncyhpbnNuLCBhc2kpOworCS8qIFVYVEggICAgICA6IGNjY2MgMDExMCAxMTExIDExMTEgeHh4eCB4eHh4IDAxMTEgeHh4eCA6ICAgKi8KKwlpZiAoKGluc24gJiAweDBmODAwMGYwKSA9PSAweDA2ODAwMDcwKSB7CisJCWlmICgoaW5zbiAmIDB4MDAzMDAwMDApID09IDB4MDAxMDAwMDApCisJCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsJLyogVW5hbGxvY2F0ZWQgc3BhY2UgKi8KKworCQlpZiAoKGluc24gJiAweDAwMGYwMDAwKSA9PSAweDAwMGYwMDAwKQorCQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDEycm0wKGluc24sIGFzaSk7CisJCWVsc2UKKwkJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxMnJuMTZybTBfd2ZsYWdzKGluc24sIGFzaSk7CisJfQorCisJLyogT3RoZXIgaW5zdHJ1Y3Rpb24gZW5jb2RpbmdzIGFyZW4ndCB5ZXQgZGVmaW5lZCAqLworCXJldHVybiBJTlNOX1JFSkVDVEVEOwogfQogCiBzdGF0aWMgZW51bSBrcHJvYmVfaW5zbiBfX2twcm9iZXMKQEAgLTEyNzMsMjkgKzE0MTYsNDkgQEAKIAlpZiAoKGluc24gJiAweDBmZjAwMGYwKSA9PSAweDAzZjAwMGYwKQogCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKIAotCS8qIFVTQURBOCA6IGNjY2MgMDExMSAxMDAwIHh4eHggeHh4eCB4eHh4IDAwMDEgeHh4eCAqLwotCS8qIFVTQUQ4ICA6IGNjY2MgMDExMSAxMDAwIHh4eHggMTExMSB4eHh4IDAwMDEgeHh4eCAqLwotCWlmICgoaW5zbiAmIDB4MGZmMDAwZjApID09IDB4MDc4MDAwMTApCi0JCSByZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTZybjEycnM4cm0wX3dmbGFncyhpbnNuLCBhc2kpOwotCiAJLyogU01MQUxEIDogY2NjYyAwMTExIDAxMDAgeHh4eCB4eHh4IHh4eHggMDB4MSB4eHh4ICovCiAJLyogU01MU0xEIDogY2NjYyAwMTExIDAxMDAgeHh4eCB4eHh4IHh4eHggMDF4MSB4eHh4ICovCiAJaWYgKChpbnNuICYgMHgwZmYwMDA5MCkgPT0gMHgwNzQwMDAxMCkKIAkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZGhpMTZyZGxvMTJyczhybTBfd2ZsYWdzKGluc24sIGFzaSk7CiAKIAkvKiBTTUxBRCAgOiBjY2NjIDAxMTEgMDAwMCB4eHh4IHh4eHggeHh4eCAwMHgxIHh4eHggOlEgKi8KKwkvKiBTTVVBRCAgOiBjY2NjIDAxMTEgMDAwMCB4eHh4IDExMTEgeHh4eCAwMHgxIHh4eHggOlEgKi8KIAkvKiBTTUxTRCAgOiBjY2NjIDAxMTEgMDAwMCB4eHh4IHh4eHggeHh4eCAwMXgxIHh4eHggOlEgKi8KKwkvKiBTTVVTRCAgOiBjY2NjIDAxMTEgMDAwMCB4eHh4IDExMTEgeHh4eCAwMXgxIHh4eHggOiAgKi8KIAkvKiBTTU1MQSAgOiBjY2NjIDAxMTEgMDEwMSB4eHh4IHh4eHggeHh4eCAwMHgxIHh4eHggOiAgKi8KLQkvKiBTTU1MUyAgOiBjY2NjIDAxMTEgMDEwMSB4eHh4IHh4eHggeHh4eCAxMXgxIHh4eHggOiAgKi8KKwkvKiBTTU1VTCAgOiBjY2NjIDAxMTEgMDEwMSB4eHh4IDExMTEgeHh4eCAwMHgxIHh4eHggOiAgKi8KKwkvKiBVU0FEQTggOiBjY2NjIDAxMTEgMTAwMCB4eHh4IHh4eHggeHh4eCAwMDAxIHh4eHggOiAgKi8KKwkvKiBVU0FEOCAgOiBjY2NjIDAxMTEgMTAwMCB4eHh4IDExMTEgeHh4eCAwMDAxIHh4eHggOiAgKi8KIAlpZiAoKGluc24gJiAweDBmZjAwMDkwKSA9PSAweDA3MDAwMDEwIHx8CiAJICAgIChpbnNuICYgMHgwZmYwMDBkMCkgPT0gMHgwNzUwMDAxMCB8fAotCSAgICAoaW5zbiAmIDB4MGZmMDAwZDApID09IDB4MDc1MDAwZDApCisJICAgIChpbnNuICYgMHgwZmYwMDBmMCkgPT0gMHgwNzgwMDAxMCkgeworCisJCWlmICgoaW5zbiAmIDB4MDAwMGYwMDApID09IDB4MDAwMGYwMDApCisJCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTZyczhybTBfd2ZsYWdzKGluc24sIGFzaSk7CisJCWVsc2UKKwkJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxNnJuMTJyczhybTBfd2ZsYWdzKGluc24sIGFzaSk7CisJfQorCisJLyogU01NTFMgIDogY2NjYyAwMTExIDAxMDEgeHh4eCB4eHh4IHh4eHggMTF4MSB4eHh4IDogICovCisJaWYgKChpbnNuICYgMHgwZmYwMDBkMCkgPT0gMHgwNzUwMDBkMCkKIAkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDE2cm4xMnJzOHJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKIAotCS8qIFNNVVNEICA6IGNjY2MgMDExMSAwMDAwIHh4eHggeHh4eCB4eHh4IDAxeDEgeHh4eCA6ICAqLwotCS8qIFNNVUFEICA6IGNjY2MgMDExMSAwMDAwIHh4eHggMTExMSB4eHh4IDAweDEgeHh4eCA6USAqLwotCS8qIFNNTVVMICA6IGNjY2MgMDExMSAwMTAxIHh4eHggMTExMSB4eHh4IDAweDEgeHh4eCA6ICAqLwotCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxNnJzOHJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKKwkvKiBTQkZYICAgOiBjY2NjIDAxMTEgMTAxeCB4eHh4IHh4eHggeHh4eCB4MTAxIHh4eHggOiAgKi8KKwkvKiBVQkZYICAgOiBjY2NjIDAxMTEgMTExeCB4eHh4IHh4eHggeHh4eCB4MTAxIHh4eHggOiAgKi8KKwlpZiAoKGluc24gJiAweDBmYTAwMDcwKSA9PSAweDA3YTAwMDUwKQorCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTJybTAoaW5zbiwgYXNpKTsKKworCS8qIEJGSSAgICA6IGNjY2MgMDExMSAxMTB4IHh4eHggeHh4eCB4eHh4IHgwMDEgeHh4eCA6ICAqLworCS8qIEJGQyAgICA6IGNjY2MgMDExMSAxMTB4IHh4eHggeHh4eCB4eHh4IHgwMDEgMTExMSA6ICAqLworCWlmICgoaW5zbiAmIDB4MGZlMDAwNzApID09IDB4MDdjMDAwMTApIHsKKworCQlpZiAoKGluc24gJiAweDAwMDAwMDBmKSA9PSAweDAwMDAwMDBmKQorCQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDEyX21vZGlmeShpbnNuLCBhc2kpOworCQllbHNlCisJCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTJybjBfbW9kaWZ5KGluc24sIGFzaSk7CisJfQorCisJcmV0dXJuIElOU05fUkVKRUNURUQ7CiB9CiAKIHN0YXRpYyBlbnVtIGtwcm9iZV9pbnNuIF9fa3Byb2JlcwpAQCAtMTMwOSw2ICsxNDcyLDEwIEBACiAJLyogU1RSQiAgOiBjY2NjIDAxeHggeDF4MCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KIAkvKiBTVFJCVCA6IGNjY2MgMDF4MCB4MTEwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLwogCS8qIFNUUlQgIDogY2NjYyAwMXgwIHgwMTAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCisKKwlpZiAoKGluc24gJiAweDAwNTAwMDAwKSA9PSAweDAwNTAwMDAwICYmIGlzX3IxNShpbnNuLCAxMikpCisJCXJldHVybiBJTlNOX1JFSkVDVEVEOwkvKiBMRFJCIGludG8gUEMgKi8KKwogCXJldHVybiBwcmVwX2VtdWxhdGVfbGRyX3N0cihpbnNuLCBhc2kpOwogfQogCkBAIC0xMzIzLDEwICsxNDkwLDkgQEAKIAogCS8qIExETSgxKSA6IGNjY2MgMTAweCB4MHgxIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLwogCS8qIFNUTSgxKSA6IGNjY2MgMTAweCB4MHgwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLwotCWFzaS0+aW5zblswXSA9IHRydWVjY19pbnNuKGluc24pOwogCWFzaS0+aW5zbl9oYW5kbGVyID0gKChpbnNuICYgMHgxMDgwMDApID09IDB4MDA4MDAwKSA/IC8qIFNUTSAmIFIxNSAqLwogCQkJCXNpbXVsYXRlX3N0bTFfcGMgOiBzaW11bGF0ZV9sZG0xc3RtMTsKLQlyZXR1cm4gSU5TTl9HT09EOworCXJldHVybiBJTlNOX0dPT0RfTk9fU0xPVDsKIH0KIAogc3RhdGljIGVudW0ga3Byb2JlX2luc24gX19rcHJvYmVzCkBAIC0xMzM0LDU4ICsxNTAwLDExNyBAQAogewogCS8qIEIgIDogY2NjYyAxMDEwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCiAJLyogQkwgOiBjY2NjIDEwMTEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KLQlhc2ktPmluc25bMF0gPSB0cnVlY2NfaW5zbihpbnNuKTsKIAlhc2ktPmluc25faGFuZGxlciA9IHNpbXVsYXRlX2JibDsKLQlyZXR1cm4gSU5TTl9HT09EOworCXJldHVybiBJTlNOX0dPT0RfTk9fU0xPVDsKIH0KIAogc3RhdGljIGVudW0ga3Byb2JlX2luc24gX19rcHJvYmVzCi1zcGFjZV9jY2NjXzExMDBfMDEweChrcHJvYmVfb3Bjb2RlX3QgaW5zbiwgc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiAqYXNpKQorc3BhY2VfY2NjY18xMXh4KGtwcm9iZV9vcGNvZGVfdCBpbnNuLCBzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuICphc2kpCiB7CisJLyogQ29wcm9jZXNzb3IgaW5zdHJ1Y3Rpb25zLi4uICovCiAJLyogTUNSUiA6IGNjY2MgMTEwMCAwMTAwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCA6IChSZCE9Um4pICovCiAJLyogTVJSQyA6IGNjY2MgMTEwMCAwMTAxIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCA6IChSZCE9Um4pICovCi0JaW5zbiAmPSAweGZmZjAwZmZmOwotCWluc24gfD0gMHgwMDAwMTAwMDsJLyogUm4gPSByMCwgUmQgPSByMSAqLwotCWFzaS0+aW5zblswXSA9IGluc247Ci0JYXNpLT5pbnNuX2hhbmRsZXIgPSAoaW5zbiAmICgxIDw8IDIwKSkgPyBlbXVsYXRlX21ycmMgOiBlbXVsYXRlX21jcnI7Ci0JcmV0dXJuIElOU05fR09PRDsKKwkvKiBMREMgIDogY2NjYyAxMTB4IHh4eDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCisJLyogU1RDICA6IGNjY2MgMTEweCB4eHgwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLworCS8qIENEUCAgOiBjY2NjIDExMTAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHgwIHh4eHggKi8KKwkvKiBNQ1IgIDogY2NjYyAxMTEwIHh4eDAgeHh4eCB4eHh4IHh4eHggeHh4MSB4eHh4ICovCisJLyogTVJDICA6IGNjY2MgMTExMCB4eHgxIHh4eHggeHh4eCB4eHh4IHh4eDEgeHh4eCAqLworCisJLyogU1ZDICA6IGNjY2MgMTExMSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLworCisJcmV0dXJuIElOU05fUkVKRUNURUQ7CiB9CiAKLXN0YXRpYyBlbnVtIGtwcm9iZV9pbnNuIF9fa3Byb2Jlcwotc3BhY2VfY2NjY18xMTB4KGtwcm9iZV9vcGNvZGVfdCBpbnNuLCBzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuICphc2kpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2twcm9iZXMgX19jaGVja19lcSh1bnNpZ25lZCBsb25nIGNwc3IpCiB7Ci0JLyogTERDIDogY2NjYyAxMTB4IHh4eDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCi0JLyogU1RDIDogY2NjYyAxMTB4IHh4eDAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCi0JaW5zbiAmPSAweGZmZjBmZmZmOwkvKiBSbiA9IHIwICovCi0JYXNpLT5pbnNuWzBdID0gaW5zbjsKLQlhc2ktPmluc25faGFuZGxlciA9IGVtdWxhdGVfbGRjc3RjOwotCXJldHVybiBJTlNOX0dPT0Q7CisJcmV0dXJuIGNwc3IgJiBQU1JfWl9CSVQ7CiB9CiAKLXN0YXRpYyBlbnVtIGtwcm9iZV9pbnNuIF9fa3Byb2Jlcwotc3BhY2VfY2NjY18xMTF4KGtwcm9iZV9vcGNvZGVfdCBpbnNuLCBzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuICphc2kpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2twcm9iZXMgX19jaGVja19uZSh1bnNpZ25lZCBsb25nIGNwc3IpCiB7Ci0JLyogQktQVCA6IDExMTAgMDAwMSAwMDEwIHh4eHggeHh4eCB4eHh4IDAxMTEgeHh4eCAqLwotCS8qIFNXSSAgOiBjY2NjIDExMTEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KLQlpZiAoKGluc24gJiAweGZmZjAwMGYwKSA9PSAweGUxMjAwMDcwIHx8Ci0JICAgIChpbnNuICYgMHgwZjAwMDAwMCkgPT0gMHgwZjAwMDAwMCkKLQkJcmV0dXJuIElOU05fUkVKRUNURUQ7Ci0KLQkvKiBDRFAgOiBjY2NjIDExMTAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHgwIHh4eHggKi8KLQlpZiAoKGluc24gJiAweDBmMDAwMDEwKSA9PSAweDBlMDAwMDAwKSB7Ci0JCWFzaS0+aW5zblswXSA9IGluc247Ci0JCWFzaS0+aW5zbl9oYW5kbGVyID0gZW11bGF0ZV9ub25lOwotCQlyZXR1cm4gSU5TTl9HT09EOwotCX0KLQotCS8qIE1DUiA6IGNjY2MgMTExMCB4eHgwIHh4eHggeHh4eCB4eHh4IHh4eDEgeHh4eCAqLwotCS8qIE1SQyA6IGNjY2MgMTExMCB4eHgxIHh4eHggeHh4eCB4eHh4IHh4eDEgeHh4eCAqLwotCWluc24gJj0gMHhmZmZmMGZmZjsJLyogUmQgPSByMCAqLwotCWFzaS0+aW5zblswXSA9IGluc247Ci0JYXNpLT5pbnNuX2hhbmRsZXIgPSAoaW5zbiAmICgxIDw8IDIwKSkgPyBlbXVsYXRlX3JkMTIgOiBlbXVsYXRlX2lyZDEyOwotCXJldHVybiBJTlNOX0dPT0Q7CisJcmV0dXJuICh+Y3BzcikgJiBQU1JfWl9CSVQ7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3Byb2JlcyBfX2NoZWNrX2NzKHVuc2lnbmVkIGxvbmcgY3BzcikKK3sKKwlyZXR1cm4gY3BzciAmIFBTUl9DX0JJVDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19rcHJvYmVzIF9fY2hlY2tfY2ModW5zaWduZWQgbG9uZyBjcHNyKQoreworCXJldHVybiAofmNwc3IpICYgUFNSX0NfQklUOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2twcm9iZXMgX19jaGVja19taSh1bnNpZ25lZCBsb25nIGNwc3IpCit7CisJcmV0dXJuIGNwc3IgJiBQU1JfTl9CSVQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3Byb2JlcyBfX2NoZWNrX3BsKHVuc2lnbmVkIGxvbmcgY3BzcikKK3sKKwlyZXR1cm4gKH5jcHNyKSAmIFBTUl9OX0JJVDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19rcHJvYmVzIF9fY2hlY2tfdnModW5zaWduZWQgbG9uZyBjcHNyKQoreworCXJldHVybiBjcHNyICYgUFNSX1ZfQklUOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2twcm9iZXMgX19jaGVja192Yyh1bnNpZ25lZCBsb25nIGNwc3IpCit7CisJcmV0dXJuICh+Y3BzcikgJiBQU1JfVl9CSVQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3Byb2JlcyBfX2NoZWNrX2hpKHVuc2lnbmVkIGxvbmcgY3BzcikKK3sKKwljcHNyICY9IH4oY3BzciA+PiAxKTsgLyogUFNSX0NfQklUICY9IH5QU1JfWl9CSVQgKi8KKwlyZXR1cm4gY3BzciAmIFBTUl9DX0JJVDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19rcHJvYmVzIF9fY2hlY2tfbHModW5zaWduZWQgbG9uZyBjcHNyKQoreworCWNwc3IgJj0gfihjcHNyID4+IDEpOyAvKiBQU1JfQ19CSVQgJj0gflBTUl9aX0JJVCAqLworCXJldHVybiAofmNwc3IpICYgUFNSX0NfQklUOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2twcm9iZXMgX19jaGVja19nZSh1bnNpZ25lZCBsb25nIGNwc3IpCit7CisJY3BzciBePSAoY3BzciA8PCAzKTsgLyogUFNSX05fQklUIF49IFBTUl9WX0JJVCAqLworCXJldHVybiAofmNwc3IpICYgUFNSX05fQklUOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2twcm9iZXMgX19jaGVja19sdCh1bnNpZ25lZCBsb25nIGNwc3IpCit7CisJY3BzciBePSAoY3BzciA8PCAzKTsgLyogUFNSX05fQklUIF49IFBTUl9WX0JJVCAqLworCXJldHVybiBjcHNyICYgUFNSX05fQklUOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2twcm9iZXMgX19jaGVja19ndCh1bnNpZ25lZCBsb25nIGNwc3IpCit7CisJdW5zaWduZWQgbG9uZyB0ZW1wID0gY3BzciBeIChjcHNyIDw8IDMpOyAvKiBQU1JfTl9CSVQgXj0gUFNSX1ZfQklUICovCisJdGVtcCB8PSAoY3BzciA8PCAxKTsJCQkgLyogUFNSX05fQklUIHw9IFBTUl9aX0JJVCAqLworCXJldHVybiAofnRlbXApICYgUFNSX05fQklUOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2twcm9iZXMgX19jaGVja19sZSh1bnNpZ25lZCBsb25nIGNwc3IpCit7CisJdW5zaWduZWQgbG9uZyB0ZW1wID0gY3BzciBeIChjcHNyIDw8IDMpOyAvKiBQU1JfTl9CSVQgXj0gUFNSX1ZfQklUICovCisJdGVtcCB8PSAoY3BzciA8PCAxKTsJCQkgLyogUFNSX05fQklUIHw9IFBTUl9aX0JJVCAqLworCXJldHVybiB0ZW1wICYgUFNSX05fQklUOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2twcm9iZXMgX19jaGVja19hbCh1bnNpZ25lZCBsb25nIGNwc3IpCit7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBrcHJvYmVfY2hlY2tfY2MgKiBjb25zdCBjb25kaXRpb25fY2hlY2tzWzE2XSA9IHsKKwkmX19jaGVja19lcSwgJl9fY2hlY2tfbmUsICZfX2NoZWNrX2NzLCAmX19jaGVja19jYywKKwkmX19jaGVja19taSwgJl9fY2hlY2tfcGwsICZfX2NoZWNrX3ZzLCAmX19jaGVja192YywKKwkmX19jaGVja19oaSwgJl9fY2hlY2tfbHMsICZfX2NoZWNrX2dlLCAmX19jaGVja19sdCwKKwkmX19jaGVja19ndCwgJl9fY2hlY2tfbGUsICZfX2NoZWNrX2FsLCAmX19jaGVja19hbAorfTsKKwogLyogUmV0dXJuOgogICogICBJTlNOX1JFSkVDVEVEICAgICBJZiBpbnN0cnVjdGlvbiBpcyBvbmUgbm90IGFsbG93ZWQgdG8ga3Byb2JlLAogICogICBJTlNOX0dPT0QgICAgICAgICBJZiBpbnN0cnVjdGlvbiBpcyBzdXBwb3J0ZWQgYW5kIHVzZXMgaW5zdHJ1Y3Rpb24gc2xvdCwKQEAgLTE0MDEsMTMzICsxNjI2LDQ1IEBACiBlbnVtIGtwcm9iZV9pbnNuIF9fa3Byb2JlcwogYXJtX2twcm9iZV9kZWNvZGVfaW5zbihrcHJvYmVfb3Bjb2RlX3QgaW5zbiwgc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiAqYXNpKQogeworCWFzaS0+aW5zbl9jaGVja19jYyA9IGNvbmRpdGlvbl9jaGVja3NbaW5zbj4+MjhdOwogCWFzaS0+aW5zblsxXSA9IEtQUk9CRV9SRVRVUk5fSU5TVFJVQ1RJT047CiAKLQlpZiAoKGluc24gJiAweGYwMDAwMDAwKSA9PSAweGYwMDAwMDAwKSB7CisJaWYgKChpbnNuICYgMHhmMDAwMDAwMCkgPT0gMHhmMDAwMDAwMCkKIAogCQlyZXR1cm4gc3BhY2VfMTExMShpbnNuLCBhc2kpOwogCi0JfSBlbHNlIGlmICgoaW5zbiAmIDB4MGUwMDAwMDApID09IDB4MDAwMDAwMDApIHsKKwllbHNlIGlmICgoaW5zbiAmIDB4MGUwMDAwMDApID09IDB4MDAwMDAwMDApCiAKIAkJcmV0dXJuIHNwYWNlX2NjY2NfMDAweChpbnNuLCBhc2kpOwogCi0JfSBlbHNlIGlmICgoaW5zbiAmIDB4MGUwMDAwMDApID09IDB4MDIwMDAwMDApIHsKKwllbHNlIGlmICgoaW5zbiAmIDB4MGUwMDAwMDApID09IDB4MDIwMDAwMDApCiAKIAkJcmV0dXJuIHNwYWNlX2NjY2NfMDAxeChpbnNuLCBhc2kpOwogCi0JfSBlbHNlIGlmICgoaW5zbiAmIDB4MGYwMDAwMTApID09IDB4MDYwMDAwMTApIHsKKwllbHNlIGlmICgoaW5zbiAmIDB4MGYwMDAwMTApID09IDB4MDYwMDAwMTApCiAKIAkJcmV0dXJuIHNwYWNlX2NjY2NfMDExMF9fMShpbnNuLCBhc2kpOwogCi0JfSBlbHNlIGlmICgoaW5zbiAmIDB4MGYwMDAwMTApID09IDB4MDcwMDAwMTApIHsKKwllbHNlIGlmICgoaW5zbiAmIDB4MGYwMDAwMTApID09IDB4MDcwMDAwMTApCiAKIAkJcmV0dXJuIHNwYWNlX2NjY2NfMDExMV9fMShpbnNuLCBhc2kpOwogCi0JfSBlbHNlIGlmICgoaW5zbiAmIDB4MGMwMDAwMDApID09IDB4MDQwMDAwMDApIHsKKwllbHNlIGlmICgoaW5zbiAmIDB4MGMwMDAwMDApID09IDB4MDQwMDAwMDApCiAKIAkJcmV0dXJuIHNwYWNlX2NjY2NfMDF4eChpbnNuLCBhc2kpOwogCi0JfSBlbHNlIGlmICgoaW5zbiAmIDB4MGUwMDAwMDApID09IDB4MDgwMDAwMDApIHsKKwllbHNlIGlmICgoaW5zbiAmIDB4MGUwMDAwMDApID09IDB4MDgwMDAwMDApCiAKIAkJcmV0dXJuIHNwYWNlX2NjY2NfMTAweChpbnNuLCBhc2kpOwogCi0JfSBlbHNlIGlmICgoaW5zbiAmIDB4MGUwMDAwMDApID09IDB4MGEwMDAwMDApIHsKKwllbHNlIGlmICgoaW5zbiAmIDB4MGUwMDAwMDApID09IDB4MGEwMDAwMDApCiAKIAkJcmV0dXJuIHNwYWNlX2NjY2NfMTAxeChpbnNuLCBhc2kpOwogCi0JfSBlbHNlIGlmICgoaW5zbiAmIDB4MGZlMDAwMDApID09IDB4MGM0MDAwMDApIHsKLQotCQlyZXR1cm4gc3BhY2VfY2NjY18xMTAwXzAxMHgoaW5zbiwgYXNpKTsKLQotCX0gZWxzZSBpZiAoKGluc24gJiAweDBlMDAwMDAwKSA9PSAweDBjMDAwMDAwKSB7Ci0KLQkJcmV0dXJuIHNwYWNlX2NjY2NfMTEweChpbnNuLCBhc2kpOwotCi0JfQotCi0JcmV0dXJuIHNwYWNlX2NjY2NfMTExeChpbnNuLCBhc2kpOworCXJldHVybiBzcGFjZV9jY2NjXzExeHgoaW5zbiwgYXNpKTsKIH0KIAogdm9pZCBfX2luaXQgYXJtX2twcm9iZV9kZWNvZGVfaW5pdCh2b2lkKQogewogCWZpbmRfc3RyX3BjX29mZnNldCgpOwogfQotCi0KLS8qCi0gKiBBbGwgQVJNIGluc3RydWN0aW9ucyBsaXN0ZWQgYmVsb3cuCi0gKgotICogSW5zdHJ1Y3Rpb25zIGFuZCB0aGVpciBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzIGFyZSBnaXZlbi4KLSAqIElmIGEgcGFydGljdWxhciByZWdpc3RlciBtYXkgbm90IHVzZSBSMTUsIGl0IGlzIHByZWZpeGVkIHdpdGggYSAiISIuCi0gKiBJZiBtYXJrZWQgd2l0aCBhICIqIiBtZWFucyB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgcmVhZGluZyBSMTUKLSAqIGlzIGltcGxlbWVudGF0aW9uIGRlZmluZWQuCi0gKgotICogQURDL0FERC9BTkQvQklDL0NNTi9DTVAvRU9SL01PVi9NVk4vT1JSL1JTQi9SU0MvU0JDL1NVQi9URVEKLSAqICAgICBUU1Q6IFJkLCBSbiwgUm0sICFScwotICogQlg6IFJtCi0gKiBCTFgoMik6ICFSbQotICogQlg6IFJtIChSMTUgbGVnYWwsIGJ1dCBkaXNjb3VyYWdlZCkKLSAqIEJYSjogIVJtLAotICogQ0xaOiAhUmQsICFSbQotICogQ1BZOiBSZCwgUm0KLSAqIExEQy8yLFNUQy8yIGltbWVkaWF0ZSBvZmZzZXQgJiB1bmluZGV4OiBSbgotICogTERDLzIsU1RDLzIgaW1tZWRpYXRlIHByZS9wb3N0LWluZGV4ZWQ6ICFSbgotICogTERNKDEvMyk6ICFSbiwgcmVnaXN0ZXJfbGlzdAotICogTERNKDIpOiAhUm4sICFyZWdpc3Rlcl9saXN0Ci0gKiBMRFIsU1RSLFBMRCBpbW1lZGlhdGUgb2Zmc2V0OiBSZCwgUm4KLSAqIExEUixTVFIsUExEIHJlZ2lzdGVyIG9mZnNldDogUmQsIFJuLCAhUm0KLSAqIExEUixTVFIsUExEIHNjYWxlZCByZWdpc3RlciBvZmZzZXQ6IFJkLCAhUm4sICFSbQotICogTERSLFNUUiBpbW1lZGlhdGUgcHJlL3Bvc3QtaW5kZXhlZDogUmQsICFSbgotICogTERSLFNUUiByZWdpc3RlciBwcmUvcG9zdC1pbmRleGVkOiBSZCwgIVJuLCAhUm0KLSAqIExEUixTVFIgc2NhbGVkIHJlZ2lzdGVyIHByZS9wb3N0LWluZGV4ZWQ6IFJkLCAhUm4sICFSbQotICogTERSQixTVFJCIGltbWVkaWF0ZSBvZmZzZXQ6ICFSZCwgUm4KLSAqIExEUkIsU1RSQiByZWdpc3RlciBvZmZzZXQ6ICFSZCwgUm4sICFSbQotICogTERSQixTVFJCIHNjYWxlZCByZWdpc3RlciBvZmZzZXQ6ICFSZCwgIVJuLCAhUm0KLSAqIExEUkIsU1RSQiBpbW1lZGlhdGUgcHJlL3Bvc3QtaW5kZXhlZDogIVJkLCAhUm4KLSAqIExEUkIsU1RSQiByZWdpc3RlciBwcmUvcG9zdC1pbmRleGVkOiAhUmQsICFSbiwgIVJtCi0gKiBMRFJCLFNUUkIgc2NhbGVkIHJlZ2lzdGVyIHByZS9wb3N0LWluZGV4ZWQ6ICFSZCwgIVJuLCAhUm0KLSAqIExEUlQsTERSQlQsU1RSQlQgaW1tZWRpYXRlIHByZS9wb3N0LWluZGV4ZWQ6ICFSZCwgIVJuCi0gKiBMRFJULExEUkJULFNUUkJUIHJlZ2lzdGVyIHByZS9wb3N0LWluZGV4ZWQ6ICFSZCwgIVJuLCAhUm0KLSAqIExEUlQsTERSQlQsU1RSQlQgc2NhbGVkIHJlZ2lzdGVyIHByZS9wb3N0LWluZGV4ZWQ6ICFSZCwgIVJuLCAhUm0KLSAqIExEUkgvU0gvU0IvRCxTVFJIL1NIL1NCL0QgaW1tZWRpYXRlIG9mZnNldDogIVJkLCBSbgotICogTERSSC9TSC9TQi9ELFNUUkgvU0gvU0IvRCByZWdpc3RlciBvZmZzZXQ6ICFSZCwgUm4sICFSbQotICogTERSSC9TSC9TQi9ELFNUUkgvU0gvU0IvRCBpbW1lZGlhdGUgcHJlL3Bvc3QtaW5kZXhlZDogIVJkLCAhUm4KLSAqIExEUkgvU0gvU0IvRCxTVFJIL1NIL1NCL0QgcmVnaXN0ZXIgcHJlL3Bvc3QtaW5kZXhlZDogIVJkLCAhUm4sICFSbQotICogTERSRVg6ICFSZCwgIVJuCi0gKiBNQ1IvMjogIVJkCi0gKiBNQ1JSLzIsTVJSQy8yOiAhUmQsICFSbgotICogTUxBOiAhUmQsICFSbiwgIVJtLCAhUnMKLSAqIE1PVjogUmQKLSAqIE1SQy8yOiAhUmQgKGlmIFJkPT0xNSwgb25seSBjaGFuZ2VzIGNvbmQgY29kZXMsIG5vdCB0aGUgcmVnaXN0ZXIpCi0gKiBNUlMsTVNSOiAhUmQKLSAqIE1VTDogIVJkLCAhUm0sICFScwotICogUEtIe0JULFRCfTogIVJkLCAhUm4sICFSbQotICogUURBREQsW1VdUUFERC8xNi84L1NVQlg6ICFSZCwgIVJtLCAhUm4KLSAqIFFEU1VCLFtVXVFTVUIvMTYvOC9BRERYOiAhUmQsICFSbSwgIVJuCi0gKiBSRVYvMTYvU0g6ICFSZCwgIVJtCi0gKiBSRkU6ICFSbgotICoge1MsVX1bSF1BRER7MTYsOCxTVUJYfSx7UyxVfVtIXVNVQnsxNiw4LEFERFh9OiAhUmQsICFSbiwgIVJtCi0gKiBTRUw6ICFSZCwgIVJuLCAhUm0KLSAqIFNNTEE8eD48eT4sU01MQXtELFc8eT59LFNNTFNELFNNTUx7QSxTfTogIVJkLCAhUm4sICFSbSwgIVJzCi0gKiBTTUxBTDx4Pjx5PixTTUxBe0QsTER9LFNNTFNMRCxTTU1VTEwsU01VTFc8eT46ICFSZEhpLCAhUmRMbywgIVJtLCAhUnMKLSAqIFNNTVVMLFNNVUFELFNNVUw8eD48eT4sU01VU0Q6ICFSZCwgIVJtLCAhUnMKLSAqIFNTQVQvMTY6ICFSZCwgIVJtCi0gKiBTVE0oMS8yKTogIVJuLCByZWdpc3Rlcl9saXN0KiAoUjE1IGluIHJlZyBsaXN0IG5vdCByZWNvbW1lbmRlZCkKLSAqIFNUUlQgaW1tZWRpYXRlIHByZS9wb3N0LWluZGV4ZWQ6IFJkKiwgIVJuCi0gKiBTVFJUIHJlZ2lzdGVyIHByZS9wb3N0LWluZGV4ZWQ6IFJkKiwgIVJuLCAhUm0KLSAqIFNUUlQgc2NhbGVkIHJlZ2lzdGVyIHByZS9wb3N0LWluZGV4ZWQ6IFJkKiwgIVJuLCAhUm0KLSAqIFNUUkVYOiAhUmQsICFSbiwgIVJtCi0gKiBTV1AvQjogIVJkLCAhUm4sICFSbQotICoge1MsVX1YVEF7QixCMTYsSH06ICFSZCwgIVJuLCAhUm0KLSAqIHtTLFV9WFR7QixCMTYsSH06ICFSZCwgIVJtCi0gKiBVTXtBQSxMQSxVTH1MOiAhUmRIaSwgIVJkTG8sICFSbSwgIVJzCi0gKiBVU0F7RDgsQTgsVCxUMTZ9OiAhUmQsICFSbSwgIVJzCi0gKgotICogTWF5IHRyYW5zZmVyIGNvbnRyb2wgYnkgd3JpdGluZyBSMTUgKHBvc3NpYmxlIG1vZGUgY2hhbmdlcyBvciBhbHRlcm5hdGUKLSAqIG1vZGUgYWNjZXNzZXMgbWFya2VkIGJ5ICIqIik6Ci0gKiBBTFUgb3AgKCogd2l0aCBzLWJpdCksIEIsIEJMLCBCS1BULCBCTFgoMS8yKSwgQlgsIEJYSiwgQ1BTKiwgQ1BZLAotICogTERNKDEpLCBMRE0oMi8zKSosIExEUiwgTU9WLCBSRkUqLCBTV0kqCi0gKgotICogSW5zdHJ1Y3Rpb25zIHRoYXQgZG8gbm90IHRha2UgZ2VuZXJhbCByZWdpc3RlcnMsIG5vciB0cmFuc2ZlciBjb250cm9sOgotICogQ0RQLzIsIFNFVEVORCwgU1JTKgotICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC9hcm0va2VybmVsL2twcm9iZXMuYwppbmRleCAyYmE3ZGViLi4xNjU2Yzg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTEzNCw3ICsxMzQsOCBAQAogCQkJCSBzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQogewogCXJlZ3MtPkFSTV9wYyArPSA0OwotCXAtPmFpbnNuLmluc25faGFuZGxlcihwLCByZWdzKTsKKwlpZiAocC0+YWluc24uaW5zbl9jaGVja19jYyhyZWdzLT5BUk1fY3BzcikpCisJCXAtPmFpbnNuLmluc25faGFuZGxlcihwLCByZWdzKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IDY5Y2ZlZTAuLjEzOWUzYzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMjIxLDcgKzIyMSw3IEBACiAJcHJldl9yYXdfY291bnQgJj0gYXJtcG11LT5tYXhfcGVyaW9kOwogCiAJaWYgKG92ZXJmbG93KQotCQlkZWx0YSA9IGFybXBtdS0+bWF4X3BlcmlvZCAtIHByZXZfcmF3X2NvdW50ICsgbmV3X3Jhd19jb3VudDsKKwkJZGVsdGEgPSBhcm1wbXUtPm1heF9wZXJpb2QgLSBwcmV2X3Jhd19jb3VudCArIG5ld19yYXdfY291bnQgKyAxOwogCWVsc2UKIAkJZGVsdGEgPSBuZXdfcmF3X2NvdW50IC0gcHJldl9yYXdfY291bnQ7CiAKQEAgLTc0Niw3ICs3NDYsOCBAQAogCiAJdGFpbCA9IChzdHJ1Y3QgZnJhbWVfdGFpbCBfX3VzZXIgKilyZWdzLT5BUk1fZnAgLSAxOwogCi0Jd2hpbGUgKHRhaWwgJiYgISgodW5zaWduZWQgbG9uZyl0YWlsICYgMHgzKSkKKwl3aGlsZSAoKGVudHJ5LT5uciA8IFBFUkZfTUFYX1NUQUNLX0RFUFRIKSAmJgorCSAgICAgICB0YWlsICYmICEoKHVuc2lnbmVkIGxvbmcpdGFpbCAmIDB4MykpCiAJCXRhaWwgPSB1c2VyX2JhY2t0cmFjZSh0YWlsLCBlbnRyeSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDk0YmJlZGIuLjVlMWU1NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYwpAQCAtMzcyLDYgKzM3Miw4IEBACiAJaWYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfU0VUVExTKQogCQl0aHJlYWQtPnRwX3ZhbHVlID0gcmVncy0+QVJNX3IzOwogCisJdGhyZWFkX25vdGlmeShUSFJFQURfTk9USUZZX0NPUFksIHRocmVhZCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jIGIvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCmluZGV4IDJiZjI3ZjMuLjgxODJmNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKQEAgLTc2NywxMiArNzY3LDIwIEBACiAKICNpZmRlZiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UCiAJCWNhc2UgUFRSQUNFX0dFVEhCUFJFR1M6CisJCQlpZiAocHRyYWNlX2dldF9icmVha3BvaW50cyhjaGlsZCkgPCAwKQorCQkJCXJldHVybiAtRVNSQ0g7CisKIAkJCXJldCA9IHB0cmFjZV9nZXRoYnByZWdzKGNoaWxkLCBhZGRyLAogCQkJCQkJKHVuc2lnbmVkIGxvbmcgX191c2VyICopZGF0YSk7CisJCQlwdHJhY2VfcHV0X2JyZWFrcG9pbnRzKGNoaWxkKTsKIAkJCWJyZWFrOwogCQljYXNlIFBUUkFDRV9TRVRIQlBSRUdTOgorCQkJaWYgKHB0cmFjZV9nZXRfYnJlYWtwb2ludHMoY2hpbGQpIDwgMCkKKwkJCQlyZXR1cm4gLUVTUkNIOworCiAJCQlyZXQgPSBwdHJhY2Vfc2V0aGJwcmVncyhjaGlsZCwgYWRkciwKIAkJCQkJCSh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWRhdGEpOworCQkJcHRyYWNlX3B1dF9icmVha3BvaW50cyhjaGlsZCk7CiAJCQlicmVhazsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMKaW5kZXggY2I4Mzk4My4uMDM0MDIyNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYwpAQCAtNTk3LDE5ICs1OTcsMTMgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfc3lzY2FsbF9yZXN0YXJ0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXJlZ3MtPkFSTV9yMCA9IHJlZ3MtPkFSTV9PUklHX3IwOwotCXJlZ3MtPkFSTV9wYyAtPSB0aHVtYl9tb2RlKHJlZ3MpID8gMiA6IDQ7Ci19Ci0KIC8qCiAgKiBPSywgd2UncmUgaW52b2tpbmcgYSBoYW5kbGVyCiAgKi8JCiBzdGF0aWMgaW50CiBoYW5kbGVfc2lnbmFsKHVuc2lnbmVkIGxvbmcgc2lnLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLAogCSAgICAgIHNpZ2luZm9fdCAqaW5mbywgc2lnc2V0X3QgKm9sZHNldCwKLQkgICAgICBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIGludCBzeXNjYWxsKQorCSAgICAgIHN0cnVjdCBwdF9yZWdzICogcmVncykKIHsKIAlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CkBAIC02MTcsMjYgKzYxMSw2IEBACiAJaW50IHJldDsKIAogCS8qCi0JICogSWYgd2Ugd2VyZSBmcm9tIGEgc3lzdGVtIGNhbGwsIGNoZWNrIGZvciBzeXN0ZW0gY2FsbCByZXN0YXJ0aW5nLi4uCi0JICovCi0JaWYgKHN5c2NhbGwpIHsKLQkJc3dpdGNoIChyZWdzLT5BUk1fcjApIHsKLQkJY2FzZSAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLOgotCQljYXNlIC1FUkVTVEFSVE5PSEFORDoKLQkJCXJlZ3MtPkFSTV9yMCA9IC1FSU5UUjsKLQkJCWJyZWFrOwotCQljYXNlIC1FUkVTVEFSVFNZUzoKLQkJCWlmICghKGthLT5zYS5zYV9mbGFncyAmIFNBX1JFU1RBUlQpKSB7Ci0JCQkJcmVncy0+QVJNX3IwID0gLUVJTlRSOwotCQkJCWJyZWFrOwotCQkJfQotCQkJLyogZmFsbHRocm91Z2ggKi8KLQkJY2FzZSAtRVJFU1RBUlROT0lOVFI6Ci0JCQlzZXR1cF9zeXNjYWxsX3Jlc3RhcnQocmVncyk7Ci0JCX0KLQl9Ci0KLQkvKgogCSAqIHRyYW5zbGF0ZSB0aGUgc2lnbmFsCiAJICovCiAJaWYgKHVzaWcgPCAzMiAmJiB0aHJlYWQtPmV4ZWNfZG9tYWluICYmIHRocmVhZC0+ZXhlY19kb21haW4tPnNpZ25hbF9pbnZtYXApCkBAIC02ODUsNiArNjU5LDcgQEAKICAqLwogc3RhdGljIHZvaWQgZG9fc2lnbmFsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc3lzY2FsbCkKIHsKKwl1bnNpZ25lZCBpbnQgcmV0dmFsID0gMCwgY29udGludWVfYWRkciA9IDAsIHJlc3RhcnRfYWRkciA9IDA7CiAJc3RydWN0IGtfc2lnYWN0aW9uIGthOwogCXNpZ2luZm9fdCBpbmZvOwogCWludCBzaWducjsKQEAgLTY5OCwxOCArNjczLDYxIEBACiAJaWYgKCF1c2VyX21vZGUocmVncykpCiAJCXJldHVybjsKIAorCS8qCisJICogSWYgd2Ugd2VyZSBmcm9tIGEgc3lzdGVtIGNhbGwsIGNoZWNrIGZvciBzeXN0ZW0gY2FsbCByZXN0YXJ0aW5nLi4uCisJICovCisJaWYgKHN5c2NhbGwpIHsKKwkJY29udGludWVfYWRkciA9IHJlZ3MtPkFSTV9wYzsKKwkJcmVzdGFydF9hZGRyID0gY29udGludWVfYWRkciAtICh0aHVtYl9tb2RlKHJlZ3MpID8gMiA6IDQpOworCQlyZXR2YWwgPSByZWdzLT5BUk1fcjA7CisKKwkJLyoKKwkJICogUHJlcGFyZSBmb3Igc3lzdGVtIGNhbGwgcmVzdGFydC4gIFdlIGRvIHRoaXMgaGVyZSBzbyB0aGF0IGEKKwkJICogZGVidWdnZXIgd2lsbCBzZWUgdGhlIGFscmVhZHkgY2hhbmdlZCBQU1cuCisJCSAqLworCQlzd2l0Y2ggKHJldHZhbCkgeworCQljYXNlIC1FUkVTVEFSVE5PSEFORDoKKwkJY2FzZSAtRVJFU1RBUlRTWVM6CisJCWNhc2UgLUVSRVNUQVJUTk9JTlRSOgorCQkJcmVncy0+QVJNX3IwID0gcmVncy0+QVJNX09SSUdfcjA7CisJCQlyZWdzLT5BUk1fcGMgPSByZXN0YXJ0X2FkZHI7CisJCQlicmVhazsKKwkJY2FzZSAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLOgorCQkJcmVncy0+QVJNX3IwID0gLUVJTlRSOworCQkJYnJlYWs7CisJCX0KKwl9CisKIAlpZiAodHJ5X3RvX2ZyZWV6ZSgpKQogCQlnb3RvIG5vX3NpZ25hbDsKIAorCS8qCisJICogR2V0IHRoZSBzaWduYWwgdG8gZGVsaXZlci4gIFdoZW4gcnVubmluZyB1bmRlciBwdHJhY2UsIGF0IHRoaXMKKwkgKiBwb2ludCB0aGUgZGVidWdnZXIgbWF5IGNoYW5nZSBhbGwgb3VyIHJlZ2lzdGVycyAuLi4KKwkgKi8KIAlzaWduciA9IGdldF9zaWduYWxfdG9fZGVsaXZlcigmaW5mbywgJmthLCByZWdzLCBOVUxMKTsKIAlpZiAoc2lnbnIgPiAwKSB7CiAJCXNpZ3NldF90ICpvbGRzZXQ7CiAKKwkJLyoKKwkJICogRGVwZW5kaW5nIG9uIHRoZSBzaWduYWwgc2V0dGluZ3Mgd2UgbWF5IG5lZWQgdG8gcmV2ZXJ0IHRoZQorCQkgKiBkZWNpc2lvbiB0byByZXN0YXJ0IHRoZSBzeXN0ZW0gY2FsbC4gIEJ1dCBza2lwIHRoaXMgaWYgYQorCQkgKiBkZWJ1Z2dlciBoYXMgY2hvc2VuIHRvIHJlc3RhcnQgYXQgYSBkaWZmZXJlbnQgUEMuCisJCSAqLworCQlpZiAocmVncy0+QVJNX3BjID09IHJlc3RhcnRfYWRkcikgeworCQkJaWYgKHJldHZhbCA9PSAtRVJFU1RBUlROT0hBTkQKKwkJCSAgICB8fCAocmV0dmFsID09IC1FUkVTVEFSVFNZUworCQkJCSYmICEoa2Euc2Euc2FfZmxhZ3MgJiBTQV9SRVNUQVJUKSkpIHsKKwkJCQlyZWdzLT5BUk1fcjAgPSAtRUlOVFI7CisJCQkJcmVncy0+QVJNX3BjID0gY29udGludWVfYWRkcjsKKwkJCX0KKwkJfQorCiAJCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spKQogCQkJb2xkc2V0ID0gJmN1cnJlbnQtPnNhdmVkX3NpZ21hc2s7CiAJCWVsc2UKIAkJCW9sZHNldCA9ICZjdXJyZW50LT5ibG9ja2VkOwotCQlpZiAoaGFuZGxlX3NpZ25hbChzaWduciwgJmthLCAmaW5mbywgb2xkc2V0LCByZWdzLCBzeXNjYWxsKSA9PSAwKSB7CisJCWlmIChoYW5kbGVfc2lnbmFsKHNpZ25yLCAma2EsICZpbmZvLCBvbGRzZXQsIHJlZ3MpID09IDApIHsKIAkJCS8qCiAJCQkgKiBBIHNpZ25hbCB3YXMgc3VjY2Vzc2Z1bGx5IGRlbGl2ZXJlZDsgdGhlIHNhdmVkCiAJCQkgKiBzaWdtYXNrIHdpbGwgaGF2ZSBiZWVuIHN0b3JlZCBpbiB0aGUgc2lnbmFsIGZyYW1lLApAQCAtNzIzLDExICs3NDEsMTQgQEAKIAl9CiAKICBub19zaWduYWw6Ci0JLyoKLQkgKiBObyBzaWduYWwgdG8gZGVsaXZlciB0byB0aGUgcHJvY2VzcyAtIHJlc3RhcnQgdGhlIHN5c2NhbGwuCi0JICovCiAJaWYgKHN5c2NhbGwpIHsKLQkJaWYgKHJlZ3MtPkFSTV9yMCA9PSAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLKSB7CisJCS8qCisJCSAqIEhhbmRsZSByZXN0YXJ0aW5nIGEgZGlmZmVyZW50IHN5c3RlbSBjYWxsLiAgQXMgYWJvdmUsCisJCSAqIGlmIGEgZGVidWdnZXIgaGFzIGNob3NlbiB0byByZXN0YXJ0IGF0IGEgZGlmZmVyZW50IFBDLAorCQkgKiBpZ25vcmUgdGhlIHJlc3RhcnQuCisJCSAqLworCQlpZiAocmV0dmFsID09IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0sKKwkJICAgICYmIHJlZ3MtPkFSTV9wYyA9PSBjb250aW51ZV9hZGRyKSB7CiAJCQlpZiAodGh1bWJfbW9kZShyZWdzKSkgewogCQkJCXJlZ3MtPkFSTV9yNyA9IF9fTlJfcmVzdGFydF9zeXNjYWxsIC0gX19OUl9TWVNDQUxMX0JBU0U7CiAJCQkJcmVncy0+QVJNX3BjIC09IDI7CkBAIC03NTAsMTEgKzc3MSw2IEBACiAjZW5kaWYKIAkJCX0KIAkJfQotCQlpZiAocmVncy0+QVJNX3IwID09IC1FUkVTVEFSVE5PSEFORCB8fAotCQkgICAgcmVncy0+QVJNX3IwID09IC1FUkVTVEFSVFNZUyB8fAotCQkgICAgcmVncy0+QVJNX3IwID09IC1FUkVTVEFSVE5PSU5UUikgewotCQkJc2V0dXBfc3lzY2FsbF9yZXN0YXJ0KHJlZ3MpOwotCQl9CiAKIAkJLyogSWYgdGhlcmUncyBubyBzaWduYWwgdG8gZGVsaXZlciwgd2UganVzdCBwdXQgdGhlIHNhdmVkIHNpZ21hc2sKIAkJICogYmFjay4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zbXAuYyBiL2FyY2gvYXJtL2tlcm5lbC9zbXAuYwppbmRleCA4ZmUwNWFkLi5mMjliOGEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NtcC5jCkBAIC00NzksNyArNDc5LDcgQEAKIHsKIH0KIAotc3RhdGljIHZvaWQgYnJvYWRjYXN0X3RpbWVyX3NldHVwKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBicm9hZGNhc3RfdGltZXJfc2V0dXAoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQogewogCWV2dC0+bmFtZQk9ICJkdW1teV90aW1lciI7CiAJZXZ0LT5mZWF0dXJlcwk9IENMT0NLX0VWVF9GRUFUX09ORVNIT1QgfApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3N3cF9lbXVsYXRlLmMgYi9hcmNoL2FybS9rZXJuZWwvc3dwX2VtdWxhdGUuYwppbmRleCA3YTU3NjA5Li40MGVlN2U1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc3dwX2VtdWxhdGUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc3dwX2VtdWxhdGUuYwpAQCAtMTU4LDcgKzE1OCw3IEBACiAKIAlpZiAocmVzID09IDApIHsKIAkJLyoKLQkJICogQmFycmllciBhbHNvIHJlcXVpcmVkIGJldHdlZW4gYXF1aXJpbmcgYSBsb2NrIGZvciBhCisJCSAqIEJhcnJpZXIgYWxzbyByZXF1aXJlZCBiZXR3ZWVuIGFjcXVpcmluZyBhIGxvY2sgZm9yIGEKIAkJICogcHJvdGVjdGVkIHJlc291cmNlIGFuZCBhY2Nlc3NpbmcgdGhlIHJlc291cmNlLiBJbnNlcnRlZCBmb3IKIAkJICogc2FtZSByZWFzb24gYXMgYWJvdmUuCiAJCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3N5c19vYWJpLWNvbXBhdC5jIGIvYXJjaC9hcm0va2VybmVsL3N5c19vYWJpLWNvbXBhdC5jCmluZGV4IDRhZDhkYTEuLmFmMGFhZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zeXNfb2FiaS1jb21wYXQuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc3lzX29hYmktY29tcGF0LmMKQEAgLTMxMSw3ICszMTEsNyBAQAogCWxvbmcgZXJyOwogCWludCBpOwogCi0JaWYgKG5zb3BzIDwgMSkKKwlpZiAobnNvcHMgPCAxIHx8IG5zb3BzID4gU0VNT1BNKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlzb3BzID0ga21hbGxvYyhzaXplb2YoKnNvcHMpICogbnNvcHMsIEdGUF9LRVJORUwpOwogCWlmICghc29wcykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKaW5kZXggZjAwMDBlMS4uM2I1NGFkMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKQEAgLTQxMCw4ICs0MTAsNyBAQAogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkID0gY3VycmVudF90aHJlYWRfaW5mbygpOwogCXNpZ2luZm9fdCBpbmZvOwogCi0JaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICE9IFBFUl9MSU5VWCAmJgotCSAgICBjdXJyZW50LT5wZXJzb25hbGl0eSAhPSBQRVJfTElOVVhfMzJCSVQgJiYKKwlpZiAoKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICYgUEVSX01BU0spICE9IFBFUl9MSU5VWCAmJgogCSAgICB0aHJlYWQtPmV4ZWNfZG9tYWluLT5oYW5kbGVyKSB7CiAJCXRocmVhZC0+ZXhlY19kb21haW4tPmhhbmRsZXIobiwgcmVncyk7CiAJCXJldHVybiByZWdzLT5BUk1fcjA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCmluZGV4IDE5MzkwMjMuLjJkMjk5YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCkBAIC04Myw2ICs4Myw3IEBACiAJc2VsZWN0IENQVV9BUk05MjZUCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlzZWxlY3QgSEFWRV9GQl9BVE1FTAorCXNlbGVjdCBIQVZFX05FVF9NQUNCCiAKIGNvbmZpZyBBUkNIX0FUNTcyRDk0MEhGCiAJYm9vbCAiQVQ1NzJEOTQwSEYiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FybWV2YS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhcm1ldmEuYwppbmRleCAyZTc0YTE5Li4yOTVlMWU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FybWV2YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jYXJtZXZhLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAkucHVsbHVwX3Bpbgk9IEFUOTFfUElOX1BEOSwKIH07CiAKLS8qIEZJWE1FOiB1c2VyIGRlcGVuZGFudCAqLworLyogRklYTUU6IHVzZXIgZGVwZW5kZW50ICovCiAvLyBzdGF0aWMgc3RydWN0IGF0OTFfY2ZfZGF0YSBfX2luaXRkYXRhIGNhcm1ldmFfY2ZfZGF0YSA9IHsKIC8vCS5kZXRfcGluCT0gQVQ5MV9QSU5fUEIwLAogLy8JLnJzdF9waW4JPSBBVDkxX1BJTl9QQzUsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWIwMS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWViMDEuYwppbmRleCAxZjlkM2NiLi5kOGRmNTlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWIwMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lYjAxLmMKQEAgLTMwLDYgKzMwLDExIEBACiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAorc3RhdGljIHZvaWQgX19pbml0IGF0OTFlYjAxX2luaXRfaXJxKHZvaWQpCit7CisJYXQ5MXg0MF9pbml0X2ludGVycnVwdHMoTlVMTCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBhdDkxZWIwMV9tYXBfaW8odm9pZCkKIHsKIAlhdDkxeDQwX2luaXRpYWxpemUoNDAwMDAwMDApOwpAQCAtMzgsNyArNDMsNyBAQAogTUFDSElORV9TVEFSVChBVDkxRUIwMSwgIkF0bWVsIEFUOTEgRUIwMSIpCiAJLyogTWFpbnRhaW5lcjogR3JlZyBVbmdlcmVyIDxnZXJnQHNuYXBnZWFyLmNvbT4gKi8KIAkudGltZXIJCT0gJmF0OTF4NDBfdGltZXIsCi0JLmluaXRfaXJxCT0gYXQ5MXg0MF9pbml0X2ludGVycnVwdHMsCisJLmluaXRfaXJxCT0gYXQ5MWViMDFfaW5pdF9pcnEsCiAJLm1hcF9pbwkJPSBhdDkxZWIwMV9tYXBfaW8sCiBNQUNISU5FX0VORAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFfbWNpLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFfbWNpLmgKaW5kZXggMjdhYzZmNS4uMDIxODJjMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX21jaS5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MV9tY2kuaApAQCAtMTAyLDcgKzEwMiw3IEBACiAjZGVmaW5lCQlBVDkxX01DSV9SRElSRQkJKDEgPDwgMTcpCS8qIFJlc3BvbnNlIERpcmVjdGlvbiBFcnJvciAqLwogI2RlZmluZQkJQVQ5MV9NQ0lfUkNSQ0UJCSgxIDw8IDE4KQkvKiBSZXNwb25zZSBDUkMgRXJyb3IgKi8KICNkZWZpbmUJCUFUOTFfTUNJX1JFTkRFCQkoMSA8PCAxOSkJLyogUmVzcG9uc2UgRW5kIEJpdCBFcnJvciAqLwotI2RlZmluZQkJQVQ5MV9NQ0lfUlRPRQkJKDEgPDwgMjApCS8qIFJlcG9uc2UgVGltZS1vdXQgRXJyb3IgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX1JUT0UJCSgxIDw8IDIwKQkvKiBSZXNwb25zZSBUaW1lLW91dCBFcnJvciAqLwogI2RlZmluZQkJQVQ5MV9NQ0lfRENSQ0UJCSgxIDw8IDIxKQkvKiBEYXRhIENSQyBFcnJvciAqLwogI2RlZmluZQkJQVQ5MV9NQ0lfRFRPRQkJKDEgPDwgMjIpCS8qIERhdGEgVGltZS1vdXQgRXJyb3IgKi8KICNkZWZpbmUJCUFUOTFfTUNJX09WUkUJCSgxIDw8IDMwKQkvKiBPdmVycnVuICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaAppbmRleCAzYmVmOTMxLi4wNzAwZjIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmgKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOUc0NQkweDgxOWIwNWEwCiAjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlHNDVNUkwJMHg4MTliMDVhMgkvKiBha2EgOUc0NS1FUzIgJiBub24gRVMgbG90cyAqLwogI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05RzQ1RVMJMHg4MTliMDVhMQkvKiA5RzQ1LUVTIChFbmdpbmVlcmluZyBTYW1wbGUpICovCisjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlYNQkweDgxOWEwNWEwCiAjZGVmaW5lIEFSQ0hfSURfQVQ5MUNBUDkJMHgwMzlBMDNBMAogCiAjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlYRTEyOAkweDMyOTk3M2EwCkBAIC01NSw2ICs1NiwxMiBAQAogI2RlZmluZSBBUkNIX0VYSURfQVQ5MVNBTTlHNDYJMHgwMDAwMDAwMwogI2RlZmluZSBBUkNIX0VYSURfQVQ5MVNBTTlHNDUJMHgwMDAwMDAwNAogCisjZGVmaW5lIEFSQ0hfRVhJRF9BVDkxU0FNOUcxNQkweDAwMDAwMDAwCisjZGVmaW5lIEFSQ0hfRVhJRF9BVDkxU0FNOUczNQkweDAwMDAwMDAxCisjZGVmaW5lIEFSQ0hfRVhJRF9BVDkxU0FNOVgzNQkweDAwMDAwMDAyCisjZGVmaW5lIEFSQ0hfRVhJRF9BVDkxU0FNOUcyNQkweDAwMDAwMDAzCisjZGVmaW5lIEFSQ0hfRVhJRF9BVDkxU0FNOVgyNQkweDAwMDAwMDA0CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhdDkxX2V4aWRfaWRlbnRpZnkodm9pZCkKIHsKIAlyZXR1cm4gYXQ5MV9zeXNfcmVhZChBVDkxX0RCR1VfRVhJRCk7CkBAIC0xNDMsNiArMTUwLDI3IEBACiAjZGVmaW5lIGNwdV9pc19hdDkxc2FtOW0xMSgpCSgwKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQVJDSF9BVDkxU0FNOVg1CisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOXg1KCkJKGF0OTFfY3B1X2lkZW50aWZ5KCkgPT0gQVJDSF9JRF9BVDkxU0FNOVg1KQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnMTUoKQkoY3B1X2lzX2F0OTFzYW05eDUoKSAmJiBcCisJCQkJKGF0OTFfZXhpZF9pZGVudGlmeSgpID09IEFSQ0hfRVhJRF9BVDkxU0FNOUcxNSkpCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWczNSgpCShjcHVfaXNfYXQ5MXNhbTl4NSgpICYmIFwKKwkJCQkoYXQ5MV9leGlkX2lkZW50aWZ5KCkgPT0gQVJDSF9FWElEX0FUOTFTQU05RzM1KSkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05eDM1KCkJKGNwdV9pc19hdDkxc2FtOXg1KCkgJiYgXAorCQkJCShhdDkxX2V4aWRfaWRlbnRpZnkoKSA9PSBBUkNIX0VYSURfQVQ5MVNBTTlYMzUpKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnMjUoKQkoY3B1X2lzX2F0OTFzYW05eDUoKSAmJiBcCisJCQkJKGF0OTFfZXhpZF9pZGVudGlmeSgpID09IEFSQ0hfRVhJRF9BVDkxU0FNOUcyNSkpCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOXgyNSgpCShjcHVfaXNfYXQ5MXNhbTl4NSgpICYmIFwKKwkJCQkoYXQ5MV9leGlkX2lkZW50aWZ5KCkgPT0gQVJDSF9FWElEX0FUOTFTQU05WDI1KSkKKyNlbHNlCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOXg1KCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWcxNSgpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnMzUoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05eDM1KCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWcyNSgpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTl4MjUoKQkoMCkKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0FSQ0hfQVQ5MUNBUDkKICNkZWZpbmUgY3B1X2lzX2F0OTFjYXA5KCkJKGF0OTFfY3B1X2lkZW50aWZ5KCkgPT0gQVJDSF9JRF9BVDkxQ0FQOSkKICNkZWZpbmUgY3B1X2lzX2F0OTFjYXA5X3JldkIoKQkoYXQ5MWNhcDlfcmV2X2lkZW50aWZ5KCkgPT0gQVJDSF9SRVZJU0lPTl9DQVA5X0IpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IGRkZWI2NDUuLjA1NmRjNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0yMDgsNyArMjA4LDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLyogd3JhcHBlcnMgZm9yICJuZXcgc3R5bGUiIEdQSU8gY2FsbHMuIHRoZSBvbGQgQVQ5MS1zcGVjZmljIG9uZXMgc2hvdWxkCisvKiB3cmFwcGVycyBmb3IgIm5ldyBzdHlsZSIgR1BJTyBjYWxscy4gdGhlIG9sZCBBVDkxLXNwZWNpZmljIG9uZXMgc2hvdWxkCiAgKiBldmVudHVhbGx5IGJlIHJlbW92ZWQgKGFsb25nIHdpdGggdGhpcyBlcnJuby5oIGluY2x1c2lvbiksIGFuZCB0aGUKICAqIGdwaW8gcmVxdWVzdC9mcmVlIGNhbGxzIHNob3VsZCBwcm9iYWJseSBiZSBpbXBsZW1lbnRlZC4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9kbWFjL2RtYWNId19leHRyYS5jIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9kbWFjL2RtYWNId19leHRyYS5jCmluZGV4IDc3Zjg0YjQuLmExZjMyODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvZG1hYy9kbWFjSHdfZXh0cmEuYworKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2RtYWMvZG1hY0h3X2V4dHJhLmMKQEAgLTU1MSw3ICs1NTEsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKgotKiAgQGJyaWVmICAgQ2hlY2sgdGhlIGV4aXN0YW5jZSBvZiBwZW5kaW5nIGRlc2NyaXB0b3IKKyogIEBicmllZiAgIENoZWNrIHRoZSBleGlzdGVuY2Ugb2YgcGVuZGluZyBkZXNjcmlwdG9yCiAqCiAqICBUaGlzIGZ1bmN0aW9uIGNvbmZpcm1lcyBpZiB0aGVyZSBpcyBhbnkgcGVuZGluZyBkZXNjcmlwdG9yIGluIHRoZSBjaGFpbgogKiAgdG8gcHJvZ3JhbSB0aGUgY2hhbm5lbApAQCAtNzc1LDcgKzc3NSw3IEBACiAvKioKICogIEBicmllZiAgIFJlYWQgZGF0YSBETUFlZCB0byBtZW1vcnkKICoKLSogIFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIGRhdGEgdGhhdCBoYXMgYmVlbiBETUFlZCB0byBtZW1vcnkgd2hpbGUgdHJhbnNmZXJpbmcgZnJvbToKKyogIFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIGRhdGEgdGhhdCBoYXMgYmVlbiBETUFlZCB0byBtZW1vcnkgd2hpbGUgdHJhbnNmZXJyaW5nIGZyb206CiAqICAgICAgICAgIC0gTWVtb3J5IHRvIG1lbW9yeQogKiAgICAgICAgICAtIFBlcmlwaGVyYWwgdG8gbWVtb3J5CiAqCkBAIC05NDEsNyArOTQxLDcgQEAKIC8qKgogKiAgQGJyaWVmICAgU2V0cyBjaGFubmVsIHNwZWNpZmljIHVzZXIgZGF0YQogKgotKiAgVGhpcyBmdW5jdGlvbiBhc3NvY2lhdGVzIHVzZXIgZGF0YSB0byBhIHNwZWNpZiBETUEgY2hhbm5lbAorKiAgVGhpcyBmdW5jdGlvbiBhc3NvY2lhdGVzIHVzZXIgZGF0YSB0byBhIHNwZWNpZmljIERNQSBjaGFubmVsCiAqCiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvZG1hLmMgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvZG1hLmMKaW5kZXggOGQxYmFmMy4uZDg3YWQzMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9kbWEuYwpAQCAtNjI5LDcgKzYyOSw3IEBACiAqICAgQ29uZmlndXJlcyBhIERNQSBjaGFubmVsLgogKgogKiAgIEByZXR1cm4KLSogICAgICAgPj0gMCAgICAtIEluaXRpYWxpemF0aW9uIHdhcyBzdWNjZXNzZnVsbC4KKyogICAgICAgPj0gMCAgICAtIEluaXRpYWxpemF0aW9uIHdhcyBzdWNjZXNzZnVsLgogKgogKiAgICAgICAtRUJVU1kgIC0gRGV2aWNlIGlzIGN1cnJlbnRseSBiZWluZyB1c2VkLgogKiAgICAgICAtRU5PREVWIC0gRGV2aWNlIGhhbmRlZCBpbiBpcyBpbnZhbGlkLgpAQCAtNjczLDcgKzY3Myw3IEBACiAvKioKICogICBJbml0aWFsaXplcyBhbGwgb2YgdGhlIGRhdGEgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggdGhlIERNQS4KICogICBAcmV0dXJuCi0qICAgICAgID49IDAgICAgLSBJbml0aWFsaXphdGlvbiB3YXMgc3VjY2Vzc2Z1bGwuCisqICAgICAgID49IDAgICAgLSBJbml0aWFsaXphdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KICoKICogICAgICAgLUVCVVNZICAtIERldmljZSBpcyBjdXJyZW50bHkgYmVpbmcgdXNlZC4KICogICAgICAgLUVOT0RFViAtIERldmljZSBoYW5kZWQgaW4gaXMgaW52YWxpZC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NzcC9kbWFjSHcuaCBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NzcC9kbWFjSHcuaAppbmRleCA2YzhkYTJiLi5lNmExZGM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3AvZG1hY0h3LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL2RtYWNIdy5oCkBAIC0zNjIsNyArMzYyLDcgQEAKIC8qKgogKiAgQGJyaWVmICAgUmVhZCBkYXRhIERNQSB0cmFuc2ZlcnJlZCB0byBtZW1vcnkKICoKLSogIFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIGRhdGEgdGhhdCBoYXMgYmVlbiBETUFlZCB0byBtZW1vcnkgd2hpbGUgdHJhbnNmZXJpbmcgZnJvbToKKyogIFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIGRhdGEgdGhhdCBoYXMgYmVlbiBETUFlZCB0byBtZW1vcnkgd2hpbGUgdHJhbnNmZXJyaW5nIGZyb206CiAqICAgICAgICAgIC0gTWVtb3J5IHRvIG1lbW9yeQogKiAgICAgICAgICAtIFBlcmlwaGVyYWwgdG8gbWVtb3J5CiAqCkBAIC00NDYsNyArNDQ2LDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKioKLSogIEBicmllZiAgIENoZWNrIHRoZSBleGlzdGFuY2Ugb2YgcGVuZGluZyBkZXNjcmlwdG9yCisqICBAYnJpZWYgICBDaGVjayB0aGUgZXhpc3RlbmNlIG9mIHBlbmRpbmcgZGVzY3JpcHRvcgogKgogKiAgVGhpcyBmdW5jdGlvbiBjb25maXJtZXMgaWYgdGhlcmUgaXMgYW55IHBlbmRpbmcgZGVzY3JpcHRvciBpbiB0aGUgY2hhaW4KICogIHRvIHByb2dyYW0gdGhlIGNoYW5uZWwKQEAgLTU0Miw3ICs1NDIsNyBAQAogLyoqCiAqICBAYnJpZWYgICBTZXRzIGNoYW5uZWwgc3BlY2lmaWMgdXNlciBkYXRhCiAqCi0qICBUaGlzIGZ1bmN0aW9uIGFzc29jaWF0ZXMgdXNlciBkYXRhIHRvIGEgc3BlY2lmIERNQSBjaGFubmVsCisqICBUaGlzIGZ1bmN0aW9uIGFzc29jaWF0ZXMgdXNlciBkYXRhIHRvIGEgc3BlY2lmaWMgRE1BIGNoYW5uZWwKICoKICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL2NoaXBjSHdfZGVmLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9jaGlwY0h3X2RlZi5oCmluZGV4IDcwZWFlYTguLjE2MTk3MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL2NoaXBjSHdfZGVmLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvY2hpcGNId19kZWYuaApAQCAtMTgwLDcgKzE4MCw3IEBACiAKICNkZWZpbmUgY2hpcGNId19YVEFMX0ZSRVFfSHogICAgICAgICAgICAgICAgICAgIDI1MDAwMDAwCS8qIFJlZmVyZW5jZSBjbG9jayBmcmVxdWVuY3kgaW4gSHogKi8KIAotLyogUHJvZ3JhbWFibGUgcGluIGRlZmluZXMgKi8KKy8qIFByb2dyYW1tYWJsZSBwaW4gZGVmaW5lcyAqLwogI2RlZmluZSBjaGlwY0h3X1BJTl9HUElPKG4pICAgICAgICAgICAgICAgICAgICAgKCgoKG4pID49IDApICYmICgobikgPCAoY2hpcGNId19HUElPX0NPVU5UKSkpID8gKG4pIDogMHhGRkZGRkZGRikKIAkJCQkJCQkJCSAgICAgLyogR1BJTyBwaW4gMCAtIDYwICovCiAjZGVmaW5lIGNoaXBjSHdfUElOX1VBUlRUWEQgICAgICAgICAgICAgICAgICAgICAoY2hpcGNId19HUElPX0NPVU5UICsgMCkJLyogVUFSVCBUcmFuc21pdCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvY2hpcGNId19pbmxpbmUuaCBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL2NoaXBjSHdfaW5saW5lLmgKaW5kZXggYzc4ODMzYS4uMDMyMzhjMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvY2hpcGNId19pbmxpbmUuaAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9jaGlwY0h3X2lubGluZS5oCkBAIC04MzIsNyArODMyLDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKioKLSogIEBicmllZiAgIExvd2VyIGxheWVyIGZ1bnRpb24gdG8gZW5hYmxlL2Rpc2FibGUgYSBjbG9jayBvZiBhIGNlcnRhaW4gZGV2aWNlCisqICBAYnJpZWYgICBMb3dlciBsYXllciBmdW5jdGlvbiB0byBlbmFibGUvZGlzYWJsZSBhIGNsb2NrIG9mIGEgY2VydGFpbiBkZXZpY2UKICoKICogIFRoaXMgZnVuY3Rpb24gZW5hYmxlcy9kaXNhYmxlcyBhIGNvcmUgY2xvY2sKICoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL2ludGNId19yZWcuaCBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL2ludGNId19yZWcuaAppbmRleCBlMDFmYzQ2Li4wYWViNmE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9pbnRjSHdfcmVnLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvaW50Y0h3X3JlZy5oCkBAIC0xMDksOSArMTA5LDkgQEAKICNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTBDMCAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMEMwX0JJVE5VTSkKIAogLyogSU5UQzEgLSBpbnRlcnJ1cHQgY29udHJvbGxlciAxICovCi0jZGVmaW5lIElOVENIV19JTlRDMV9ERFJWUE1QX0JJVE5VTSAgICAgICAyNwkvKiBERFIgYW5kIFZQTSBQTEwgY2xvY2sgcGhhc2UgcmVsYXRpb25zaGlwIGludGVydXB0IChOb3QgZm9yIEEwKSAqLworI2RlZmluZSBJTlRDSFdfSU5UQzFfRERSVlBNUF9CSVROVU0gICAgICAgMjcJLyogRERSIGFuZCBWUE0gUExMIGNsb2NrIHBoYXNlIHJlbGF0aW9uc2hpcCBpbnRlcnJ1cHQgKE5vdCBmb3IgQTApICovCiAjZGVmaW5lIElOVENIV19JTlRDMV9ERFJWUE1UX0JJVE5VTSAgICAgICAyNgkvKiBERFIgYW5kIFZQTSBIVyBwaGFzZSBhbGlnbiB0aW1lb3V0IGludGVycnVwdCAoTm90IGZvciBBMCkgKi8KLSNkZWZpbmUgSU5UQ0hXX0lOVEMxX0REUlBfQklUTlVNICAgICAgICAgIDI2CS8qIEREUiBhbmQgUExMIGNsb2NrIHBoYXNlIHJlbGF0aW9uc2hpcCBpbnRlcnVwdCAoRm9yIEEwIG9ubHkpKSAqLworI2RlZmluZSBJTlRDSFdfSU5UQzFfRERSUF9CSVROVU0gICAgICAgICAgMjYJLyogRERSIGFuZCBQTEwgY2xvY2sgcGhhc2UgcmVsYXRpb25zaGlwIGludGVycnVwdCAoRm9yIEEwIG9ubHkpKSAqLwogI2RlZmluZSBJTlRDSFdfSU5UQzFfUlRDMl9CSVROVU0gICAgICAgICAgMjUJLyogUmVhbCB0aW1lIGNsb2NrIHRhbXBlciBpbnRlcnJ1cHQgKi8KICNkZWZpbmUgSU5UQ0hXX0lOVEMxX1ZERUNfQklUTlVNICAgICAgICAgIDI0CS8qIEhhbnRybyBWaWRlbyBEZWNvZGVyIGludGVycnVwdCAqLwogLyogQml0cyAxMy0yMyBhcmUgbm9uLXNlY3VyZSB2ZXJzaW9ucyBvZiB0aGUgY29ycmVzcG9uZGluZyBzZWN1cmUgYml0cyBpbiBTSU5UQyBiaXRzIDAtMTAuICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL3JlZ191bWkuaCBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvcmVnX3VtaS5oCmluZGV4IDA2YTM1NTQuLjA5OTI4NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvcmVnX3VtaS5oCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvcmVnX3VtaS5oCkBAIC04OCw3ICs4OCw3IEBACiAvKiBSRUdfVU1JX0ZMQVNIMC8xLzJfVENSLCBSRUdfVU1JX1NSQU0wLzFfVENSIGJpdHMgKi8KIC8qIEVuYWJsZSB3YWl0IHBpbiBkdXJpbmcgYnVyc3Qgd3JpdGUgb3IgcmVhZCAqLwogI2RlZmluZSBSRUdfVU1JX1RDUl9XQUlURU4gICAgICAgICAgICAgIDB4ODAwMDAwMDAKLS8qIEVuYWJsZSBtZW0gY3RybHIgdG8gd29yayBpd3RoIGV4dCBtZW0gb2YgbG93ZXIgZnJlcSB0aGFuIEFIQiBjbGsgKi8KKy8qIEVuYWJsZSBtZW0gY3RybHIgdG8gd29yayB3aXRoIGV4dCBtZW0gb2YgbG93ZXIgZnJlcSB0aGFuIEFIQiBjbGsgKi8KICNkZWZpbmUgUkVHX1VNSV9UQ1JfTE9XRlJFUSAgICAgICAgICAgICAweDQwMDAwMDAwCiAvKiAxPXN5bmNoIHdyaXRlLCAwPWFzeW5jIHdyaXRlICovCiAjZGVmaW5lIFJFR19VTUlfVENSX01FTVRZUEVfU1lOQ1dSSVRFICAgMHgyMDAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvS2NvbmZpZwppbmRleCAzMmYxNDc5Li5jMGRlYWNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvS2NvbmZpZwpAQCAtNjMsNiArNjMsNyBAQAogCWRlcGVuZHMgb24gQVJDSF9EQVZJTkNJX0RNNjQ0eAogCXNlbGVjdCBNSVNDX0RFVklDRVMKIAlzZWxlY3QgRUVQUk9NX0FUMjQKKwlzZWxlY3QgSTJDCiAJaGVscAogCSAgQ29uZmlndXJlIHRoaXMgb3B0aW9uIHRvIHNwZWNpZnkgdGhlIHdoZXRoZXIgdGhlIGJvYXJkIHVzZWQKIAkgIGZvciBkZXZlbG9wbWVudCBpcyBhIERNNjQ0eCBFVk0KQEAgLTcyLDYgKzczLDcgQEAKIAlkZXBlbmRzIG9uIEFSQ0hfREFWSU5DSV9ETTY0NHgKIAlzZWxlY3QgTUlTQ19ERVZJQ0VTCiAJc2VsZWN0IEVFUFJPTV9BVDI0CisJc2VsZWN0IEkyQwogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc2VsZWN0IHRoZSBMeXJ0ZWNoIFNtYWxsIEZvcm0gRmFjdG9yCiAJICBTb2Z0d2FyZSBEZWZpbmVkIFJhZGlvIChTRkZTRFIpIGJvYXJkLgpAQCAtMTA1LDYgKzEwNyw3IEBACiAJc2VsZWN0IE1BQ0hfREFWSU5DSV9ETTY0NjdURVZNCiAJc2VsZWN0IE1JU0NfREVWSUNFUwogCXNlbGVjdCBFRVBST01fQVQyNAorCXNlbGVjdCBJMkMKIAloZWxwCiAJICBDb25maWd1cmUgdGhpcyBvcHRpb24gdG8gc3BlY2lmeSB0aGUgd2hldGhlciB0aGUgYm9hcmQgdXNlZAogCSAgZm9yIGRldmVsb3BtZW50IGlzIGEgRE02NDY3IEVWTQpAQCAtMTE4LDYgKzEyMSw3IEBACiAJZGVwZW5kcyBvbiBBUkNIX0RBVklOQ0lfRE0zNjUKIAlzZWxlY3QgTUlTQ19ERVZJQ0VTCiAJc2VsZWN0IEVFUFJPTV9BVDI0CisJc2VsZWN0IEkyQwogCWhlbHAKIAkgIENvbmZpZ3VyZSB0aGlzIG9wdGlvbiB0byBzcGVjaWZ5IHdoZXRoZXIgdGhlIGJvYXJkIHVzZWQKIAkgIGZvciBkZXZlbG9wbWVudCBpcyBhIERNMzY1IEVWTQpAQCAtMTI5LDYgKzEzMyw3IEBACiAJc2VsZWN0IEdQSU9fUENGODU3WAogCXNlbGVjdCBNSVNDX0RFVklDRVMKIAlzZWxlY3QgRUVQUk9NX0FUMjQKKwlzZWxlY3QgSTJDCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzZWxlY3QgdGhlIFRJIERBODMwL09NQVAtTDEzNy9BTTE3eCBFdmFsdWF0aW9uIE1vZHVsZS4KIApAQCAtMjA1LDYgKzIxMCw3IEBACiAJZGVwZW5kcyBvbiBBUkNIX0RBVklOQ0lfREE4NTAKIAlzZWxlY3QgTUlTQ19ERVZJQ0VTCiAJc2VsZWN0IEVFUFJPTV9BVDI0CisJc2VsZWN0IEkyQwogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc2VsZWN0IHRoZSBDcml0aWNhbCBMaW5rIE1pdHlEU1AtTDEzOC9NaXR5QVJNLTE4MDgKIAkgIFN5c3RlbSBvbiBNb2R1bGUuICBJbmZvcm1hdGlvbiBvbiB0aGlzIFNvTSBtYXkgYmUgZm91bmQgYXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1taXR5b21hcGwxMzguYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1taXR5b21hcGwxMzguYwppbmRleCAyYWE3OWM1Li42MDZhNmYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtbWl0eW9tYXBsMTM4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLW1pdHlvbWFwbDEzOC5jCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSA8bWFjaC9tdXguaD4KICNpbmNsdWRlIDxtYWNoL3NwaS5oPgogCi0jZGVmaW5lIE1JVFlPTUFQTDEzOF9QSFlfSUQJCSIwOjAzIgorI2RlZmluZSBNSVRZT01BUEwxMzhfUEhZX0lECQkiIgogCiAjZGVmaW5lIEZBQ1RPUllfQ09ORklHX01BR0lDCTB4MDEyQzAxMzgKICNkZWZpbmUgRkFDVE9SWV9DT05GSUdfVkVSU0lPTgkweDAwMDEwMDAxCkBAIC00MTQsNyArNDE0LDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbWl0eW9tYXBsMTM4X25hbmRmbGFzaF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImRhdmluY2lfbmFuZCIsCi0JLmlkCQk9IDAsCisJLmlkCQk9IDEsCiAJLmRldgkJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJm1pdHlvbWFwbDEzOF9uYW5kZmxhc2hfZGF0YSwKIAl9LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLW5ldXJvcy1vc2QyLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtbmV1cm9zLW9zZDIuYwppbmRleCA2YzM4OWZmLi4zZTdiZTJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtbmV1cm9zLW9zZDIuYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtbmV1cm9zLW9zZDIuYwpAQCAtMTEsNyArMTEsNyBAQAogICogRE02NDRYLUVWTSBib2FyZC4gSXQgaGFzOgogICogCURNNjQ0Nk0wMiBtb2R1bGUgd2l0aCAyNTZNQiBOQU5ELCAyNTZNQiBSQU0sIFRMVjMyMEFJQzMyIEFJQywKICAqIAlVU0IsIEV0aGVybmV0LCBTRC9NTUMsIFVBUlQsIFRIUzgyMDAsIFRWUDcwMDAgZm9yIHZpZGVvLgotICogCUFkZGl0aW9uYWx5IHJlYWx0aW1lIGNsb2NrLCBJUiByZW1vdGUgY29udHJvbCByZWNlaXZlciwKKyAqIAlBZGRpdGlvbmFsbHkgcmVhbHRpbWUgY2xvY2ssIElSIHJlbW90ZSBjb250cm9sIHJlY2VpdmVyLAogICogCUlSIEJsYXN0ZXIgYmFzZWQgb24gTVNQNDMwIChmaXJtd2FyZSBhbHRob3VnaCBpcyBkaWZmZXJlbnQKICAqIAlmcm9tIHVzZWQgaW4gRE02NDRYLUVWTSksIGludGVybmFsIEFUQS02IDMuNeKAnSBIREQgZHJpdmUKICAqIAl3aXRoIFBBVEEgaW50ZXJmYWNlLCB0d28gbXV4ZWQgcmVkLWdyZWVuIGxlZHMuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvY3B1ZnJlcS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2NwdWZyZXEuYwppbmRleCA0YTY4YzJiLi4wYTk1YmUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvY3B1ZnJlcS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9jcHVmcmVxLmMKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCS8qCiAJICogVGltZSBtZWFzdXJlbWVudCBhY3Jvc3MgdGhlIHRhcmdldCgpIGZ1bmN0aW9uIHlpZWxkcyB+MTUwMC0xODAwdXMKIAkgKiB0aW1lIHRha2VuIHdpdGggbm8gZHJpdmVycyBvbiBub3RpZmljYXRpb24gbGlzdC4KLQkgKiBTZXR0aW5nIHRoZSBsYXRlbmN5IHRvIDIwMDAgdXMgdG8gYWNjb21vZGF0ZSBhZGRpdGlvbiBvZiBkcml2ZXJzCisJICogU2V0dGluZyB0aGUgbGF0ZW5jeSB0byAyMDAwIHVzIHRvIGFjY29tbW9kYXRlIGFkZGl0aW9uIG9mIGRyaXZlcnMKIAkgKiB0byBwcmUvcG9zdCBjaGFuZ2Ugbm90aWZpY2F0aW9uIGxpc3QuCiAJICovCiAJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IDIwMDAgKiAxMDAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RhODUwLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGE4NTAuYwppbmRleCA2OGZlNGMyLi5iOTViOTE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGE4NTAuYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGE4NTAuYwpAQCAtMTEyMyw3ICsxMTIzLDcgQEAKIAkgKiBUaGlzIGhlbHBzIGtlZXBpbmcgdGhlIHBlcmlwaGVyYWxzIG9uIHRoaXMgZG9tYWluIGluc3VsYXRlZAogCSAqIGZyb20gQ1BVIGZyZXF1ZW5jeSBjaGFuZ2VzIGNhdXNlZCBieSBEVkZTLiBUaGUgZmlybXdhcmUgc2V0cwogCSAqIGJvdGggUExMMCBhbmQgUExMMSB0byB0aGUgc2FtZSBmcmVxdWVuY3kgc28sIHRoZXJlIHNob3VsZCBub3QKLQkgKiBiZSBhbnkgbm90aWNpYmxlIGNoYW5nZSBldmVuIGluIG5vbi1EVkZTIHVzZSBjYXNlcy4KKwkgKiBiZSBhbnkgbm90aWNlYWJsZSBjaGFuZ2UgZXZlbiBpbiBub24tRFZGUyB1c2UgY2FzZXMuCiAJICovCiAJZGE4NTBfc2V0X2FzeW5jM19zcmMoMSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLWRhOHh4LmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy1kYTh4eC5jCmluZGV4IDYyNWQ0YjYuLjU4YTAyZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLWRhOHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMtZGE4eHguYwpAQCAtMzksNyArMzksOCBAQAogI2RlZmluZSBEQThYWF9HUElPX0JBU0UJCQkweDAxZTI2MDAwCiAjZGVmaW5lIERBOFhYX0kyQzFfQkFTRQkJCTB4MDFlMjgwMDAKICNkZWZpbmUgREE4WFhfU1BJMF9CQVNFCQkJMHgwMWM0MTAwMAotI2RlZmluZSBEQThYWF9TUEkxX0JBU0UJCQkweDAxZjBlMDAwCisjZGVmaW5lIERBODMwX1NQSTFfQkFTRQkJCTB4MDFlMTIwMDAKKyNkZWZpbmUgREE4NTBfU1BJMV9CQVNFCQkJMHgwMWYwZTAwMAogCiAjZGVmaW5lIERBOFhYX0VNQUNfQ1RSTF9SRUdfT0ZGU0VUCTB4MzAwMAogI2RlZmluZSBEQThYWF9FTUFDX01PRF9SRUdfT0ZGU0VUCTB4MjAwMApAQCAtNzYyLDggKzc2Myw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZGE4eHhfc3BpMV9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7Ci0JCS5zdGFydAk9IERBOFhYX1NQSTFfQkFTRSwKLQkJLmVuZAk9IERBOFhYX1NQSTFfQkFTRSArIFNaXzRLIC0gMSwKKwkJLnN0YXJ0CT0gREE4MzBfU1BJMV9CQVNFLAorCQkuZW5kCT0gREE4MzBfU1BJMV9CQVNFICsgU1pfNEsgLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKQEAgLTgzMiw1ICs4MzMsMTAgQEAKIAogCWRhOHh4X3NwaV9wZGF0YVtpbnN0YW5jZV0ubnVtX2NoaXBzZWxlY3QgPSBsZW47CiAKKwlpZiAoaW5zdGFuY2UgPT0gMSAmJiBjcHVfaXNfZGF2aW5jaV9kYTg1MCgpKSB7CisJCWRhOHh4X3NwaTFfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gREE4NTBfU1BJMV9CQVNFOworCQlkYTh4eF9zcGkxX3Jlc291cmNlc1swXS5lbmQgPSBEQTg1MF9TUEkxX0JBU0UgKyBTWl80SyAtIDE7CisJfQorCiAJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZGE4eHhfc3BpX2RldmljZVtpbnN0YW5jZV0pOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzU1LmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNTUuYwppbmRleCA3NjM2NGQxLi5hM2E5NGU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNTUuYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNTUuYwpAQCAtMzE0LDcgKzMxNCw3IEBACiAJLm5hbWUgPSAidGltZXIyIiwKIAkucGFyZW50ID0gJnBsbDFfYXV4X2NsaywKIAkubHBzYyA9IERBVklOQ0lfTFBTQ19USU1FUjIsCi0JLnVzZWNvdW50ID0gMSwgICAgICAgICAgICAgIC8qIFJFVklTSVQ6IHdoeSBjYW50JyB0aGlzIGJlIGRpc2FibGVkPyAqLworCS51c2Vjb3VudCA9IDEsICAgICAgICAgICAgICAvKiBSRVZJU0lUOiB3aHkgY2FuJ3QgdGhpcyBiZSBkaXNhYmxlZD8gKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHRpbWVyM19jbGsgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG02NDR4LmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG02NDR4LmMKaW5kZXggOWEyMzc2Yi4uNGM4MmMyNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtNjQ0eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTY0NHguYwpAQCAtMjc0LDcgKzI3NCw3IEBACiAJLm5hbWUgPSAidGltZXIyIiwKIAkucGFyZW50ID0gJnBsbDFfYXV4X2NsaywKIAkubHBzYyA9IERBVklOQ0lfTFBTQ19USU1FUjIsCi0JLnVzZWNvdW50ID0gMSwgICAgICAgICAgICAgIC8qIFJFVklTSVQ6IHdoeSBjYW50JyB0aGlzIGJlIGRpc2FibGVkPyAqLworCS51c2Vjb3VudCA9IDEsICAgICAgICAgICAgICAvKiBSRVZJU0lUOiB3aHkgY2FuJ3QgdGhpcyBiZSBkaXNhYmxlZD8gKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBkbTY0NHhfY2xrc1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9jcHV0eXBlLmggYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2NwdXR5cGUuaAppbmRleCBjZWE2Yjg5Li45NTdmYjg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2NwdXR5cGUuaAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2NwdXR5cGUuaApAQCAtNCw3ICs0LDcgQEAKICAqIEF1dGhvcjogS2V2aW4gSGlsbWFuLCBEZWVwIFJvb3QgU3lzdGVtcywgTExDCiAgKgogICogRGVmaW5lcyB0aGUgY3B1X2lzXyooKSBtYWNyb3MgZm9yIHJ1bnRpbWUgZGV0ZWN0aW9uIG9mIERhVmluY2kKLSAqIGRldmljZSB0eXBlLiAgSW4gYWRkdGlvbiwgaWYgc3VwcG9ydCBmb3IgYSBnaXZlbiBkZXZpY2UgaXMgbm90CisgKiBkZXZpY2UgdHlwZS4gIEluIGFkZGl0aW9uLCBpZiBzdXBwb3J0IGZvciBhIGdpdmVuIGRldmljZSBpcyBub3QKICAqIGNvbXBpbGVkIGluIHRvIHRoZSBrZXJuZWwsIHRoZSBtYWNyb3MgcmV0dXJuIDAgc28gdGhhdAogICogcmVzdWx0aW5nIGNvZGUgY2FuIGJlIG9wdGltaXplZCBvdXQuCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDlmMWJlZmMuLmY4YjdlYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTI0LDYgKzI0LDkgQEAKIAogI2RlZmluZSBVQVJUX1NISUZUCTIKIAorI2RlZmluZSBkYXZpbmNpX3VhcnRfdjJwKHgpCSgoeCkgLSBQQUdFX09GRlNFVCArIFBMQVRfUEhZU19PRkZTRVQpCisjZGVmaW5lIGRhdmluY2lfdWFydF9wMnYoeCkJKCh4KSAtIFBMQVRfUEhZU19PRkZTRVQgKyBQQUdFX09GRlNFVCkKKwogCQkucHVzaHNlY3Rpb24gLmRhdGEKIGRhdmluY2lfdWFydF9waHlzOgkud29yZAkwCiBkYXZpbmNpX3VhcnRfdmlydDoJLndvcmQJMApAQCAtMzQsNyArMzcsNyBAQAogCQkvKiBVc2UgZGF2aW5jaV91YXJ0X3BoeXMvdmlydCBpZiBhbHJlYWR5IGNvbmZpZ3VyZWQgKi8KIDEwOgkJbXJjCXAxNSwgMCwgXHJwLCBjMSwgYzAKIAkJdHN0CVxycCwgIzEJCQlAIE1NVSBlbmFibGVkPwotCQlsZHJlcQlccnAsID1fX3ZpcnRfdG9fcGh5cyhkYXZpbmNpX3VhcnRfcGh5cykKKwkJbGRyZXEJXHJwLCA9ZGF2aW5jaV91YXJ0X3YycChkYXZpbmNpX3VhcnRfcGh5cykKIAkJbGRybmUJXHJwLCA9ZGF2aW5jaV91YXJ0X3BoeXMKIAkJYWRkCVxydiwgXHJwLCAjNAkJQCBkYXZpbmNpX3VhcnRfdmlydAogCQlsZHIJXHJwLCBbXHJwLCAjMF0KQEAgLTQ4LDE4ICs1MSwxOCBAQAogCQl0c3QJXHJwLCAjMQkJCUAgTU1VIGVuYWJsZWQ/CiAKIAkJLyogQ29weSB1YXJ0IHBoeXMgYWRkcmVzcyBmcm9tIGRlY29tcHJlc3NvciB1YXJ0IGluZm8gKi8KLQkJbGRyZXEJXHJ2LCA9X192aXJ0X3RvX3BoeXMoZGF2aW5jaV91YXJ0X3BoeXMpCisJCWxkcmVxCVxydiwgPWRhdmluY2lfdWFydF92MnAoZGF2aW5jaV91YXJ0X3BoeXMpCiAJCWxkcm5lCVxydiwgPWRhdmluY2lfdWFydF9waHlzCiAJCWxkcmVxCVxycCwgPURBVklOQ0lfVUFSVF9JTkZPCi0JCWxkcm5lCVxycCwgPV9fcGh5c190b192aXJ0KERBVklOQ0lfVUFSVF9JTkZPKQorCQlsZHJuZQlccnAsID1kYXZpbmNpX3VhcnRfcDJ2KERBVklOQ0lfVUFSVF9JTkZPKQogCQlsZHIJXHJwLCBbXHJwLCAjMF0KIAkJc3RyCVxycCwgW1xydl0KIAogCQkvKiBDb3B5IHVhcnQgdmlydCBhZGRyZXNzIGZyb20gZGVjb21wcmVzc29yIHVhcnQgaW5mbyAqLwotCQlsZHJlcQlccnYsID1fX3ZpcnRfdG9fcGh5cyhkYXZpbmNpX3VhcnRfdmlydCkKKwkJbGRyZXEJXHJ2LCA9ZGF2aW5jaV91YXJ0X3YycChkYXZpbmNpX3VhcnRfdmlydCkKIAkJbGRybmUJXHJ2LCA9ZGF2aW5jaV91YXJ0X3ZpcnQKIAkJbGRyZXEJXHJwLCA9REFWSU5DSV9VQVJUX0lORk8KLQkJbGRybmUJXHJwLCA9X19waHlzX3RvX3ZpcnQoREFWSU5DSV9VQVJUX0lORk8pCisJCWxkcm5lCVxycCwgPWRhdmluY2lfdWFydF9wMnYoREFWSU5DSV9VQVJUX0lORk8pCiAJCWxkcglccnAsIFtccnAsICM0XQogCQlzdHIJXHJwLCBbXHJ2XQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL3NlcmlhbC5oIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9zZXJpYWwuaAppbmRleCA4MDUxMTEwLi5jOWU2Y2UxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL3NlcmlhbC5oCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvc2VyaWFsLmgKQEAgLTIyLDcgKzIyLDcgQEAKICAqCiAgKiBUaGlzIGFyZWEgc2l0cyBqdXN0IGJlbG93IHRoZSBwYWdlIHRhYmxlcyAoc2VlIGFyY2gvYXJtL2tlcm5lbC9oZWFkLlMpLgogICovCi0jZGVmaW5lIERBVklOQ0lfVUFSVF9JTkZPCShQSFlTX09GRlNFVCArIDB4M2ZmOCkKKyNkZWZpbmUgREFWSU5DSV9VQVJUX0lORk8JKFBMQVRfUEhZU19PRkZTRVQgKyAweDNmZjgpCiAKICNkZWZpbmUgREFWSU5DSV9VQVJUMF9CQVNFCShJT19QSFlTICsgMHgyMDAwMCkKICNkZWZpbmUgREFWSU5DSV9VQVJUMV9CQVNFCShJT19QSFlTICsgMHgyMDQwMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dwaW8uYwppbmRleCAxODBiOGE5Li5hNWE5ZmY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZ3Bpby5jCkBAIC0xMDEsNyArMTAxLDcgQEAKIHN0YXRpYyB2b2lkIGVwOTN4eF9ncGlvX2ZfaXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewogCS8qCi0JICogbWFwIGRpc2NvbnRpZ3VvdXMgaHcgaXJxIHJhbmdlIHRvIGNvbnRpbm91cyBzdyBpcnEgcmFuZ2U6CisJICogbWFwIGRpc2NvbnRpZ3VvdXMgaHcgaXJxIHJhbmdlIHRvIGNvbnRpbnVvdXMgc3cgaXJxIHJhbmdlOgogCSAqCiAJICogIElSUV9FUDkzWFhfR1BJT3swLi43fU1VWCAtPiBncGlvX3RvX2lycShFUDkzWFhfR1BJT19MSU5FX0YoezAuLjd9KQogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCA5Mzk3MjhiLi5iZTkyNjZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMTgsNyArMTgsNyBAQAogI2RlZmluZSBncGlvX2NhbnNsZWVwCV9fZ3Bpb19jYW5zbGVlcAogI2RlZmluZSBncGlvX3RvX2lycQlfX2dwaW9fdG9faXJxCiAKLS8qIFByYWN0aWNhbGx5LCBHUElPIGJhbmtzIHVwdG8gR1BaIGFyZSB0aGUgY29uZmlndXJhYmxlIGdwaW8gYmFua3MgKi8KKy8qIFByYWN0aWNhbGx5LCBHUElPIGJhbmtzIHVwIHRvIEdQWiBhcmUgdGhlIGNvbmZpZ3VyYWJsZSBncGlvIGJhbmtzICovCiAKIC8qIEdQSU8gYmFuayBzaXplcyAqLwogI2RlZmluZSBFWFlOT1M0X0dQSU9fQTBfTlIJKDgpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvbWN0LmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvbWN0LmMKaW5kZXggYWY4MmE4Zi4uMTRhYzEwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L21jdC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9tY3QuYwpAQCAtMjc2LDcgKzI3Niw3IEBACiAJLyogdXBkYXRlIGludGVycnVwdCBjb3VudCBidWZmZXIgKi8KIAlleHlub3M0X21jdF93cml0ZSh0bXAsIG1ldnQtPmJhc2UgKyBNQ1RfTF9JQ05UQl9PRkZTRVQpOwogCi0JLyogZW5hYmxlIE1DVCB0aWNrIGludGVydXB0ICovCisJLyogZW5hYmxlIE1DVCB0aWNrIGludGVycnVwdCAqLwogCWV4eW5vczRfbWN0X3dyaXRlKDB4MSwgbWV2dC0+YmFzZSArIE1DVF9MX0lOVF9FTkJfT0ZGU0VUKTsKIAogCXRtcCA9IF9fcmF3X3JlYWRsKG1ldnQtPmJhc2UgKyBNQ1RfTF9UQ09OX09GRlNFVCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAtc2RoY2ktZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLXNkaGNpLWdwaW8uYwppbmRleCAxYjNkM2EyZC4uZThkMDhiZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLXNkaGNpLWdwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAtc2RoY2ktZ3Bpby5jCkBAIC0zOCwxNCArMzgsMTQgQEAKIAlzd2l0Y2ggKHdpZHRoKSB7CiAJY2FzZSA4OgogCQlmb3IgKGdwaW8gPSBFWFlOT1M0X0dQSzEoMyk7IGdwaW8gPD0gRVhZTk9TNF9HUEsxKDYpOyBncGlvKyspIHsKLQkJCS8qIERhdGEgcGluIEdQSzFbMzo2XSB0byBzcGVjaWFsLWZ1bnRpb24gMyAqLworCQkJLyogRGF0YSBwaW4gR1BLMVszOjZdIHRvIHNwZWNpYWwtZnVuY3Rpb24gMyAqLwogCQkJczNjX2dwaW9fY2ZncGluKGdwaW8sIFMzQ19HUElPX1NGTigzKSk7CiAJCQlzM2NfZ3Bpb19zZXRwdWxsKGdwaW8sIFMzQ19HUElPX1BVTExfVVApOwogCQkJczVwX2dwaW9fc2V0X2RydnN0cihncGlvLCBTNVBfR1BJT19EUlZTVFJfTFY0KTsKIAkJfQogCWNhc2UgNDoKIAkJZm9yIChncGlvID0gRVhZTk9TNF9HUEswKDMpOyBncGlvIDw9IEVYWU5PUzRfR1BLMCg2KTsgZ3BpbysrKSB7Ci0JCQkvKiBEYXRhIHBpbiBHUEswWzM6Nl0gdG8gc3BlY2lhbC1mdW50aW9uIDIgKi8KKwkJCS8qIERhdGEgcGluIEdQSzBbMzo2XSB0byBzcGVjaWFsLWZ1bmN0aW9uIDIgKi8KIAkJCXMzY19ncGlvX2NmZ3BpbihncGlvLCBTM0NfR1BJT19TRk4oMikpOwogCQkJczNjX2dwaW9fc2V0cHVsbChncGlvLCBTM0NfR1BJT19QVUxMX1VQKTsKIAkJCXM1cF9ncGlvX3NldF9kcnZzdHIoZ3BpbywgUzVQX0dQSU9fRFJWU1RSX0xWNCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAtc2RoY2kuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9zZXR1cC1zZGhjaS5jCmluZGV4IDg1Zjk0MzMuLjFlODNmOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9zZXR1cC1zZGhjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9zZXR1cC1zZGhjaS5jCkBAIC0zNSw3ICszNSw3IEBACiB7CiAJdTMyIGN0cmwyLCBjdHJsMzsKIAotCS8qIGRvbid0IG5lZWQgdG8gYWx0ZXIgYW55dGhpbmcgYWNvcmRpbmcgdG8gY2FyZC10eXBlICovCisJLyogZG9uJ3QgbmVlZCB0byBhbHRlciBhbnl0aGluZyBhY2NvcmRpbmcgdG8gY2FyZC10eXBlICovCiAKIAljdHJsMiA9IHJlYWRsKHIgKyBTM0NfU0RIQ0lfQ09OVFJPTDIpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvcGNpLmMgYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvcGNpLmMKaW5kZXggNzczZWEwYy4uYmEzZGFlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L3BjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9wY2kuYwpAQCAtMjI1LDcgKzIyNSw3IEBACiAvKiBUaGlzIHJvdXRpbmUgY2hlY2tzIHRoZSBzdGF0dXMgb2YgdGhlIGxhc3QgY29uZmlndXJhdGlvbiBjeWNsZS4gIElmIGFuIGVycm9yCiAgKiB3YXMgZGV0ZWN0ZWQgaXQgcmV0dXJucyA+MCwgZWxzZSBpdCByZXR1cm5zIGEgMC4gIFRoZSBlcnJvcnMgYmVpbmcgY2hlY2tlZAogICogYXJlIHBhcml0eSwgbWFzdGVyIGFib3J0LCB0YXJnZXQgYWJvcnQgKG1hc3RlciBhbmQgdGFyZ2V0KS4gIFRoZXNlIHR5cGVzIG9mCi0gKiBlcnJvcnMgb2NjdXJlIGR1cmluZyBhIGNvbmZpZyBjeWNsZSB3aGVyZSB0aGVyZSBpcyBubyBkZXZpY2UsIGxpa2UgZHVyaW5nCisgKiBlcnJvcnMgb2NjdXIgZHVyaW5nIGEgY29uZmlnIGN5Y2xlIHdoZXJlIHRoZXJlIGlzIG5vIGRldmljZSwgbGlrZSBkdXJpbmcKICAqIHRoZSBkaXNjb3Zlcnkgc3RhZ2UuCiAgKi8KIHN0YXRpYyBpbnQgaW9wMTN4eF9hdHV4X3BjaV9zdGF0dXMoaW50IGNsZWFyKQpAQCAtMzMyLDcgKzMzMiw3IEBACiAvKiBUaGlzIHJvdXRpbmUgY2hlY2tzIHRoZSBzdGF0dXMgb2YgdGhlIGxhc3QgY29uZmlndXJhdGlvbiBjeWNsZS4gIElmIGFuIGVycm9yCiAgKiB3YXMgZGV0ZWN0ZWQgaXQgcmV0dXJucyA+MCwgZWxzZSBpdCByZXR1cm5zIGEgMC4gIFRoZSBlcnJvcnMgYmVpbmcgY2hlY2tlZAogICogYXJlIHBhcml0eSwgbWFzdGVyIGFib3J0LCB0YXJnZXQgYWJvcnQgKG1hc3RlciBhbmQgdGFyZ2V0KS4gIFRoZXNlIHR5cGVzIG9mCi0gKiBlcnJvcnMgb2NjdXJlIGR1cmluZyBhIGNvbmZpZyBjeWNsZSB3aGVyZSB0aGVyZSBpcyBubyBkZXZpY2UsIGxpa2UgZHVyaW5nCisgKiBlcnJvcnMgb2NjdXIgZHVyaW5nIGEgY29uZmlnIGN5Y2xlIHdoZXJlIHRoZXJlIGlzIG5vIGRldmljZSwgbGlrZSBkdXJpbmcKICAqIHRoZSBkaXNjb3Zlcnkgc3RhZ2UuCiAgKi8KIHN0YXRpYyBpbnQgaW9wMTN4eF9hdHVlX3BjaV9zdGF0dXMoaW50IGNsZWFyKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC90c3gxeC1jb21tb24uYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvdHN4MXgtY29tbW9uLmMKaW5kZXggZjc4MTE2NC4uMjQyOTRiMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC90c3gxeC1jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3RzeDF4LWNvbW1vbi5jCkBAIC0xNSw3ICsxNSw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAxNiBNaUIgTk9SIGZsYXNoLiBUaGUgc3RydWN0IG10ZF9wYXJ0aXRpb24gaXMgbm90IGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZQotICogICAgIHBhcnRpdGlvbnMgb24gdGhlIGRldmljZSBiZWNhdXNlIHdlIHdhbnQgdG8ga2VlcCBjb21wYXRhYmlsaXR5IHdpdGgKKyAqICAgICBwYXJ0aXRpb25zIG9uIHRoZSBkZXZpY2UgYmVjYXVzZSB3ZSB3YW50IHRvIGtlZXAgY29tcGF0aWJpbGl0eSB3aXRoCiAgKiAgICAgdGhlIFFOQVAgZmlybXdhcmUuCiAgKiBMYXlvdXQgYXMgdXNlZCBieSBRTkFQOgogICogIDB4MDAwMDAwMDAtMHgwMDA4MDAwMCA6ICJVLUJvb3QiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxwYzMyeHgvcG0uYyBiL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9wbS5jCmluZGV4IGU3NmQ0MWIuLmI5YzgwNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbHBjMzJ4eC9wbS5jCkBAIC00MSw3ICs0MSw3IEBACiAgKiBEUkFNIGNsb2NraW5nIGFuZCByZWZyZXNoIGFyZSBzbGlnaHRseSBkaWZmZXJlbnQgZm9yIHN5c3RlbXMgd2l0aCBERFIKICAqIERSQU0gb3IgcmVndWxhciBTRFJBTSBkZXZpY2VzLiBJZiBTRFJBTSBpcyB1c2VkIGluIHRoZSBzeXN0ZW0sIHRoZQogICogU0RSQU0gd2lsbCBzdGlsbCBiZSBhY2Nlc3NpYmxlIGluIGRpcmVjdC1ydW4gbW9kZS4gSW4gRERSIGJhc2VkIHN5c3RlbXMsCi0gKiBhIHRyYW5zaXN0aW9uIHRvIGRpcmVjdC1ydW4gbW9kZSB3aWxsIHN0b3AgYWxsIEREUiBhY2Nlc3NlcyAobm8gY2xvY2tzKS4KKyAqIGEgdHJhbnNpdGlvbiB0byBkaXJlY3QtcnVuIG1vZGUgd2lsbCBzdG9wIGFsbCBERFIgYWNjZXNzZXMgKG5vIGNsb2NrcykuCiAgKiBCZWNhdXNlIG9mIHRoaXMsIHRoZSBjb2RlIHRvIHN3aXRjaCBwb3dlciBtb2RlcyBhbmQgdGhlIGNvZGUgdG8gZW50ZXIKICAqIGFuZCBleGl0IERSQU0gc2VsZi1yZWZyZXNoIG1vZGVzIG11c3Qgbm90IGJlIGV4ZWN1dGVkIGluIERSQU0uIEEgc21hbGwKICAqIHNlY3Rpb24gb2YgSVJBTSBpcyB1c2VkIGluc3RlYWQgZm9yIHRoaXMuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCBlZThiMDJlLi43YmZiODI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTEwLDcgKzEwLDcgQEAKICNkZWZpbmUgQkFOS19PRkYobikJKCgobikgPCAzKSA/IChuKSA8PCAyIDogMHgxMDAgKyAoKChuKSAtIDMpIDw8IDIpKQogI2RlZmluZSBHUElPX1JFRyh4KQkoKigodm9sYXRpbGUgdTMyICopKEdQSU9fUkVHU19WSVJUICsgKHgpKSkpCiAKLSNkZWZpbmUgTlJfQlVJTFRJTl9HUElPCSgxOTIpCisjZGVmaW5lIE5SX0JVSUxUSU5fR1BJTwkJSVJRX0dQSU9fTlVNCiAKICNkZWZpbmUgZ3Bpb190b19iYW5rKGdwaW8pCSgoZ3BpbykgPj4gNSkKICNkZWZpbmUgZ3Bpb190b19pcnEoZ3BpbykJKElSUV9HUElPX1NUQVJUICsgKGdwaW8pKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC1weGExNjguaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAtcHhhMTY4LmgKaW5kZXggNDYyMTA2Ny4uNzEzYmUxNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC1weGExNjguaAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWZwLXB4YTE2OC5oCkBAIC04LDYgKzgsMTUgQEAKICNkZWZpbmUgTUZQX0RSSVZFX01FRElVTQkoMHgyIDw8IDEzKQogI2RlZmluZSBNRlBfRFJJVkVfRkFTVAkJKDB4MyA8PCAxMykKIAorI3VuZGVmIE1GUF9DRkcKKyN1bmRlZiBNRlBfQ0ZHX0RSVgorCisjZGVmaW5lIE1GUF9DRkcocGluLCBhZikJCVwKKwkoTUZQX0xQTV9JTlBVVCB8IE1GUF9QSU4oTUZQX1BJTl8jI3BpbikgfCBNRlBfIyNhZiB8IE1GUF9EUklWRV9NRURJVU0pCisKKyNkZWZpbmUgTUZQX0NGR19EUlYocGluLCBhZiwgZHJ2KQlcCisJKE1GUF9MUE1fSU5QVVQgfCBNRlBfUElOKE1GUF9QSU5fIyNwaW4pIHwgTUZQXyMjYWYgfCBNRlBfRFJJVkVfIyNkcnYpCisKIC8qIEdQSU8gKi8KICNkZWZpbmUgR1BJTzBfR1BJTwkJTUZQX0NGRyhHUElPMCwgQUY1KQogI2RlZmluZSBHUElPMV9HUElPCQlNRlBfQ0ZHKEdQSU8xLCBBRjUpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLW1tcC90aW1lLmMKaW5kZXggYWViOWFlMi4uOTk4MzNiOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL3RpbWUuYwpAQCAtOSw3ICs5LDcgQEAKICAqICAgMjAwOC0wNC0xMTogSmFzb24gQ2hhZ2FzIDxKYXNvbi5jaGFnYXNAbWFydmVsbC5jb20+CiAgKiAgIDIwMDgtMTAtMDg6IEJpbiBZYW5nIDxiaW4ueWFuZ0BtYXJ2ZWxsLmNvbT4KICAqCi0gKiBUaGUgdGltZXJzIG1vZHVsZSBhY3R1YWxseSBpbmNsdWRlcyB0aHJlZSB0aW1lcnMsIGVhY2ggdGltZXIgd2l0aCB1cHRvCisgKiBUaGUgdGltZXJzIG1vZHVsZSBhY3R1YWxseSBpbmNsdWRlcyB0aHJlZSB0aW1lcnMsIGVhY2ggdGltZXIgd2l0aCB1cCB0bwogICogdGhyZWUgbWF0Y2ggY29tcGFyYXRvcnMuIFRpbWVyICMwIGlzIHVzZWQgaGVyZSBpbiBmcmVlLXJ1bm5pbmcgbW9kZSBhcwogICogdGhlIGNsb2NrIHNvdXJjZSwgYW5kIG1hdGNoIGNvbXBhcmF0b3IgIzEgdXNlZCBhcyBjbG9jayBldmVudCBkZXZpY2UuCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vYWNwdWNsb2NrLWFybTExLmMgYi9hcmNoL2FybS9tYWNoLW1zbS9hY3B1Y2xvY2stYXJtMTEuYwppbmRleCA3ZmZiZDk4Li44MDVkNGVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9hY3B1Y2xvY2stYXJtMTEuYworKysgYi9hcmNoL2FybS9tYWNoLW1zbS9hY3B1Y2xvY2stYXJtMTEuYwpAQCAtMzQzLDcgKzM0Myw3IEBACiAJCX0KIAl9CiAKLQkvKiBTZXQgd2FpdCBzdGF0ZXMgZm9yIENQVSBpbmJldHdlZW4gZnJlcXVlbmN5IGNoYW5nZXMgKi8KKwkvKiBTZXQgd2FpdCBzdGF0ZXMgZm9yIENQVSBiZXR3ZWVuIGZyZXF1ZW5jeSBjaGFuZ2VzICovCiAJcmVnX2Nsa2N0bCA9IHJlYWRsKEExMVNfQ0xLX0NOVExfQUREUik7CiAJcmVnX2Nsa2N0bCB8PSAoMTAwIDw8IDE2KTsgLyogc2V0IFdUX1NUX0NOVCAqLwogCXdyaXRlbChyZWdfY2xrY3RsLCBBMTFTX0NMS19DTlRMX0FERFIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtcXNkOHg1MC5jIGIvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtcXNkOHg1MC5jCmluZGV4IDdmNTY4NjEuLjZhOTY5MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXFzZDh4NTAuYworKysgYi9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC1xc2Q4eDUwLmMKQEAgLTE2MCwxMCArMTYwLDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHFzZDh4NTBfaW5pdF9tbWModm9pZCkKIHsKLQlpZiAobWFjaGluZV9pc19xc2Q4eDUwX2ZmYSgpIHx8IG1hY2hpbmVfaXNfcXNkOHg1MGFfZmZhKCkpCi0JCXZyZWdfbW1jID0gdnJlZ19nZXQoTlVMTCwgImdwNiIpOwotCWVsc2UKLQkJdnJlZ19tbWMgPSB2cmVnX2dldChOVUxMLCAiZ3A1Iik7CisJdnJlZ19tbWMgPSB2cmVnX2dldChOVUxMLCAiZ3A1Iik7CiAKIAlpZiAoSVNfRVJSKHZyZWdfbW1jKSkgewogCQlwcl9lcnIoInZyZWcgZ2V0IGZvciB2cmVnX21tYyBmYWlsZWQgKCVsZClcbiIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9zY20uYyBiL2FyY2gvYXJtL21hY2gtbXNtL3NjbS5jCmluZGV4IGNmYTgwOGQuLjIzMmY5N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL3NjbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL3NjbS5jCkBAIC00Niw3ICs0Niw3IEBACiAgKiBAaWQ6IGNvbW1hbmQgdG8gYmUgZXhlY3V0ZWQKICAqIEBidWY6IGJ1ZmZlciByZXR1cm5lZCBmcm9tIHNjbV9nZXRfY29tbWFuZF9idWZmZXIoKQogICoKLSAqIEFuIFNDTSBjb21tYW5kIGlzIGxheWVkIG91dCBpbiBtZW1vcnkgYXMgZm9sbG93czoKKyAqIEFuIFNDTSBjb21tYW5kIGlzIGxhaWQgb3V0IGluIG1lbW9yeSBhcyBmb2xsb3dzOgogICoKICAqCS0tLS0tLS0tLS0tLS0tLS0tLS0gPC0tLSBzdHJ1Y3Qgc2NtX2NvbW1hbmQKICAqCXwgY29tbWFuZCBoZWFkZXIgIHwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL3RpbWVyLmMgYi9hcmNoL2FybS9tYWNoLW1zbS90aW1lci5jCmluZGV4IDU2ZjkyMGMuLjM4Yjk1ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL3RpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vdGltZXIuYwpAQCAtMjY5LDcgKzI2OSw3IEBACiAKIAkvKiBVc2UgZXhpc3RpbmcgY2xvY2tfZXZlbnQgZm9yIGNwdSAwICovCiAJaWYgKCFzbXBfcHJvY2Vzc29yX2lkKCkpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAl3cml0ZWwoREdUX0NMS19DVExfRElWXzQsIE1TTV9UTVJfQkFTRSArIERHVF9DTEtfQ1RMKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC12cHIyMDAuYyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtdnByMjAwLmMKaW5kZXggMmNmMzkwZi4uNDdhNjljYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC12cHIyMDAuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLXZwcjIwMC5jCkBAIC0yNTcsMTEgKzI1NywxNiBAQAogCS53b3JrYXJvdW5kCT0gRkxTX1VTQjJfV09SS0FST1VORF9FTkdDTTA5MTUyLAogfTsKIAorc3RhdGljIGludCB2cHIyMDBfdXNiaF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIG14MzVfaW5pdGlhbGl6ZV91c2JfaHcocGRldi0+aWQsCisJCQlNWENfRUhDSV9JTlRFUkZBQ0VfU0lOR0xFX1VOSSB8IE1YQ19FSENJX0lOVEVSTkFMX1BIWSk7Cit9CisKIC8qIFVTQiBIT1NUIGNvbmZpZyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYl9ob3N0X3BkYXRhIF9faW5pdGNvbnN0ID0gewotCS5wb3J0c2MJCT0gTVhDX0VIQ0lfTU9ERV9TRVJJQUwsCi0JLmZsYWdzCQk9IE1YQ19FSENJX0lOVEVSRkFDRV9TSU5HTEVfVU5JIHwKLQkJCSAgTVhDX0VIQ0lfSU5URVJOQUxfUEhZLAorCS5pbml0ID0gdnByMjAwX3VzYmhfaW5pdCwKKwkucG9ydHNjID0gTVhDX0VIQ0lfTU9ERV9TRVJJQUwsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUzX2xvY28uYyBiL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTNfbG9jby5jCmluZGV4IDEwYTFiZWEuLjYyMDZiMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTNfbG9jby5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTNfbG9jby5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAkud2FrZXVwCQk9IHdha2UsCQkJCQlcCiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBsb2NvX2J1dHRvbnNbXSBfX2luaXRjb25zdCA9IHsKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBsb2NvX2J1dHRvbnNbXSA9IHsKIAlHUElPX0JVVFRPTihNWDUzX0xPQ09fUE9XRVIsIEtFWV9QT1dFUiwgMSwgInBvd2VyIiwgMCksCiAJR1BJT19CVVRUT04oTVg1M19MT0NPX1VJMSwgS0VZX1ZPTFVNRVVQLCAxLCAidm9sdW1lLXVwIiwgMCksCiAJR1BJT19CVVRUT04oTVg1M19MT0NPX1VJMiwgS0VZX1ZPTFVNRURPV04sIDEsICJ2b2x1bWUtZG93biIsIDApLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyOC5jIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyOC5jCmluZGV4IDFhZDk3ZmUuLjVkY2M1OWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLW14MjguYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9jbG9jay1teDI4LmMKQEAgLTI5NSwxMSArMjk1LDExIEBACiAJdW5zaWduZWQgbG9uZyBkaWZmLCBwYXJlbnRfcmF0ZSwgY2FsY19yYXRlOwkJCVwKIAlpbnQgaTsJCQkJCQkJCVwKIAkJCQkJCQkJCVwKLQlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CQkJXAogCWRpdl9tYXggPSBCTV9DTEtDVFJMXyMjZHIjI19ESVYgPj4gQlBfQ0xLQ1RSTF8jI2RyIyNfRElWOwlcCiAJYm1fYnVzeSA9IEJNX0NMS0NUUkxfIyNkciMjX0JVU1k7CQkJCVwKIAkJCQkJCQkJCVwKIAlpZiAoY2xrLT5wYXJlbnQgPT0gJnJlZl94dGFsX2NsaykgewkJCQlcCisJCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsJCVwKIAkJZGl2ID0gRElWX1JPVU5EX1VQKHBhcmVudF9yYXRlLCByYXRlKTsJCQlcCiAJCWlmIChjbGsgPT0gJmNwdV9jbGspIHsJCQkJCVwKIAkJCWRpdl9tYXggPSBCTV9DTEtDVFJMX0NQVV9ESVZfWFRBTCA+PgkJXApAQCAtMzA5LDYgKzMwOSwxMSBAQAogCQlpZiAoZGl2ID09IDAgfHwgZGl2ID4gZGl2X21heCkJCQkJXAogCQkJcmV0dXJuIC1FSU5WQUw7CQkJCQlcCiAJfSBlbHNlIHsJCQkJCQkJXAorCQkvKgkJCQkJCQlcCisJCSAqIGhhY2sgYWxlcnQ6IHRoaXMgYmxvY2sgbW9kaWZpZXMgY2xrLT5wYXJlbnQsIHRvbywJXAorCQkgKiBzbyB0aGUgYmFzZSB0byB1c2UgaXQgdGhlIGdyYW5kIHBhcmVudC4JCVwKKwkJICovCQkJCQkJCVwKKwkJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQtPnBhcmVudCk7CVwKIAkJcmF0ZSA+Pj0gUEFSRU5UX1JBVEVfU0hJRlQ7CQkJCVwKIAkJcGFyZW50X3JhdGUgPj49IFBBUkVOVF9SQVRFX1NISUZUOwkJCVwKIAkJZGlmZiA9IHBhcmVudF9yYXRlOwkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9hbXMtZGVsdGEtZmlxLWhhbmRsZXIuUyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYW1zLWRlbHRhLWZpcS1oYW5kbGVyLlMKaW5kZXggOTI3ZDVhMS4uYzFjNWZiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9hbXMtZGVsdGEtZmlxLWhhbmRsZXIuUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Ftcy1kZWx0YS1maXEtaGFuZGxlci5TCkBAIC03OSw3ICs3OSw3IEBACiAKIAogLyoKLSAqIFJlZ2lzdGVyIHVzZWFnZQorICogUmVnaXN0ZXIgdXNhZ2UKICAqIHI4ICAtIHRlbXBvcmFyeQogICogcjkgIC0gdGhlIGRyaXZlciBidWZmZXIKICAqIHIxMCAtIHRlbXBvcmFyeQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMKaW5kZXggZDQxZmUyZC4uMGFkNzgxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jCkBAIC0zOTksNyArMzk5LDcgQEAKIAlzeDFfbW1jX2luaXQoKTsKIAogCS8qIHR1cm4gb24gVVNCIHBvd2VyICovCi0JLyogc3gxX3NldHVzYnBvd2VyKDEpOyBjYW50IGRvIGl0IGhlcmUgYmVjYXVzZSBpMmMgaXMgbm90IHJlYWR5ICovCisJLyogc3gxX3NldHVzYnBvd2VyKDEpOyBjYW4ndCBkbyBpdCBoZXJlIGJlY2F1c2UgaTJjIGlzIG5vdCByZWFkeSAqLwogCWdwaW9fcmVxdWVzdCgxLCAiQV9JUkRBX09GRiIpOwogCWdwaW9fcmVxdWVzdCgxMSwgIkFfU1dJVENIIik7CiAJZ3Bpb19yZXF1ZXN0KDE1LCAiQV9VU0JfT04iKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKaW5kZXggYjBmNGMyMy4uMzZmMjZjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKQEAgLTI4MSw3ICsyODEsNyBAQAogICogQ2xhaW1pbmcgR1BJT3MsIGFuZCBzZXR0aW5nIHRoZWlyIGRpcmVjdGlvbiBhbmQgaW5pdGlhbCB2YWx1ZXMsIGlzIHRoZQogICogcmVzcG9uc2liaWxpdHkgb2YgdGhlIGRldmljZSBkcml2ZXJzLiAgU28gaXMgcmVzcG9uZGluZyB0byBwcm9iZSgpLgogICoKLSAqIEJvYXJkLXNwZWNpZmljIGtub3dsZWdlIGxpa2UgY3JlYXRpbmcgZGV2aWNlcyBvciBwaW4gc2V0dXAgaXMgdG8gYmUKKyAqIEJvYXJkLXNwZWNpZmljIGtub3dsZWRnZSBsaWtlIGNyZWF0aW5nIGRldmljZXMgb3IgcGluIHNldHVwIGlzIHRvIGJlCiAgKiBrZXB0IG91dCBvZiBkcml2ZXJzIGFzIG11Y2ggYXMgcG9zc2libGUuICBJbiBwYXJ0aWN1bGFyLCBwaW4gc2V0dXAKICAqIG1heSBiZSBoYW5kbGVkIGJ5IHRoZSBib290IGxvYWRlciwgYW5kIGRyaXZlcnMgc2hvdWxkIGV4cGVjdCBpdCB3aWxsCiAgKiBub3JtYWxseSBoYXZlIGJlZW4gZG9uZSBieSB0aGUgdGltZSB0aGV5J3JlIHByb2JlZC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvaW5jbHVkZS9tYWNoL2Ftcy1kZWx0YS1maXEuaCBiL2FyY2gvYXJtL21hY2gtb21hcDEvaW5jbHVkZS9tYWNoL2Ftcy1kZWx0YS1maXEuaAppbmRleCA3YTJkZjI5Li4yM2VlZDAwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2luY2x1ZGUvbWFjaC9hbXMtZGVsdGEtZmlxLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pbmNsdWRlL21hY2gvYW1zLWRlbHRhLWZpcS5oCkBAIC0zMSw3ICszMSw3IEBACiAjZW5kaWYKIAogLyoKLSAqIFRoZXNlIGFyZSB0aGUgb2Zmc2V0cyBmcm9tIHRoZSBiZWdpbmluZyBvZiB0aGUgZmlxX2J1ZmZlci4gVGhleSBhcmUgcHV0IGhlcmUKKyAqIFRoZXNlIGFyZSB0aGUgb2Zmc2V0cyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpcV9idWZmZXIuIFRoZXkgYXJlIHB1dCBoZXJlCiAgKiBzaW5jZSB0aGUgYnVmZmVyIGFuZCBoZWFkZXIgbmVlZCB0byBiZSBhY2Nlc3NlZCBieSBkcml2ZXJzIHNlcnZpY2luZyBkZXZpY2VzCiAgKiB3aGljaCBnZW5lcmF0ZSBHUElPIGludGVycnVwdHMgLSBlLmcuIGtleWJvYXJkLCBtb2RlbSwgaG9vayBzd2l0Y2guCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCmluZGV4IGE0NWNkNjQuLjUxMmIxNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQpAQCAtNjgsNyArNjgsNyBAQAogb2JqLSQoQ09ORklHX09NQVBfU01BUlRSRUZMRVhfQ0xBU1MzKQkrPSBzbWFydHJlZmxleC1jbGFzczMubwogCiBBRkxBR1Nfc2xlZXAyNHh4Lm8JCQk6PS1XYSwtbWFyY2g9YXJtdjYKLUFGTEFHU19zbGVlcDM0eHgubwkJCTo9LVdhLC1tYXJjaD1hcm12Ny1hCitBRkxBR1Nfc2xlZXAzNHh4Lm8JCQk6PS1XYSwtbWFyY2g9YXJtdjctYSQocGx1c19zZWMpCiAKIGlmZXEgKCQoQ09ORklHX1BNX1ZFUkJPU0UpLHkpCiBDRkxBR1NfcG1fYnVzLm8JCQkJKz0gLURERUJVRwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1pZ2VwMDAyMC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1pZ2VwMDAyMC5jCmluZGV4IDVmOGEyZmQuLjM0Y2Y5ODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaWdlcDAwMjAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWlnZXAwMDIwLmMKQEAgLTY5Niw3ICs2OTYsNyBAQAogCWlnZXAyX2luaXRfc21zYzkxMXgoKTsKIAogCS8qCi0JICogV0xBTi1CVCBjb21ibyBtb2R1bGUgZnJvbSBNdVJhdGEgd2ljaCBoYXMgYSBNYXJ2ZWxsIFdMQU4KKwkgKiBXTEFOLUJUIGNvbWJvIG1vZHVsZSBmcm9tIE11UmF0YSB3aGljaCBoYXMgYSBNYXJ2ZWxsIFdMQU4KIAkgKiAoODhXODY4NikgKyBDU1IgQmx1ZXRvb3RoIGNoaXBzZXQuIFVzZXMgU0RJTyBpbnRlcmZhY2UuCiAJICovCiAJaWdlcDJfd2xhbl9idF9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWlnZXAwMDMwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWlnZXAwMDMwLmMKaW5kZXggYjEwZGIwZS4uMmNmODZjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1pZ2VwMDAzMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaWdlcDAwMzAuYwpAQCAtNDQwLDcgKzQ0MCw3IEBACiAJaWdlcDNfbGVkc19pbml0KCk7CiAKIAkvKgotCSAqIFdMQU4tQlQgY29tYm8gbW9kdWxlIGZyb20gTXVSYXRhIHdpY2ggaGFzIGEgTWFydmVsbCBXTEFOCisJICogV0xBTi1CVCBjb21ibyBtb2R1bGUgZnJvbSBNdVJhdGEgd2hpY2ggaGFzIGEgTWFydmVsbCBXTEFOCiAJICogKDg4Vzg2ODYpICsgQ1NSIEJsdWV0b290aCBjaGlwc2V0LiBVc2VzIFNESU8gaW50ZXJmYWNlLgogCSAqLwogCWlnZXAzX3dpZmlfYnRfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYwppbmRleCBlOTY0ODk1Li5mOGJhMjBhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYwpAQCAtMTQxLDE0ICsxNDEsMTkgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCByeDUxX21hcF9pbyh2b2lkKQogewogCW9tYXAyX3NldF9nbG9iYWxzXzN4eHgoKTsKLQlyeDUxX3ZpZGVvX21lbV9pbml0KCk7CiAJb21hcDM0eHhfbWFwX2NvbW1vbl9pbygpOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgcng1MV9yZXNlcnZlKHZvaWQpCit7CisJcng1MV92aWRlb19tZW1faW5pdCgpOworCW9tYXBfcmVzZXJ2ZSgpOworfQorCiBNQUNISU5FX1NUQVJUKE5PS0lBX1JYNTEsICJOb2tpYSBSWC01MSBib2FyZCIpCiAJLyogTWFpbnRhaW5lcjogTGF1cmkgTGV1a2t1bmVuIDxsYXVyaS5sZXVra3VuZW5Abm9raWEuY29tPiAqLwogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCi0JLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCisJLnJlc2VydmUJPSByeDUxX3Jlc2VydmUsCiAJLm1hcF9pbwkJPSByeDUxX21hcF9pbywKIAkuaW5pdF9lYXJseQk9IHJ4NTFfaW5pdF9lYXJseSwKIAkuaW5pdF9pcnEJPSBvbWFwX2luaXRfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0MzR4eF9kcGxsM20yLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QzNHh4X2RwbGwzbTIuYwppbmRleCBiMmIxZTM3Li5kNmUzNGRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QzNHh4X2RwbGwzbTIuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QzNHh4X2RwbGwzbTIuYwpAQCAtMTE1LDYgKzExNSw3IEBACiAJCQkJICBzZHJjX2NzMC0+cmZyX2N0cmwsIHNkcmNfY3MwLT5hY3RpbV9jdHJsYSwKIAkJCQkgIHNkcmNfY3MwLT5hY3RpbV9jdHJsYiwgc2RyY19jczAtPm1yLAogCQkJCSAgMCwgMCwgMCwgMCk7CisJY2xrLT5yYXRlID0gcmF0ZTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHhfZGF0YS5jCmluZGV4IDI3Njk5MmQuLjhjOTY1NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eF9kYXRhLmMKQEAgLTMxMTYsMTQgKzMxMTYsOSBAQAogCUNMSyhOVUxMLAkiZHNwX2ZjayIsCQkJJmRzcF9mY2ssCUNLXzQ0M1gpLAogCUNMSygib21hcGRzc19kc3MiLAkic3lzX2NsayIsCQkJJmRzc19zeXNfY2xrLAlDS180NDNYKSwKIAlDTEsoIm9tYXBkc3NfZHNzIiwJInR2X2NsayIsCQkJJmRzc190dl9jbGssCUNLXzQ0M1gpLAotCUNMSygib21hcGRzc19kc3MiLAkiZHNzX2NsayIsCQkJJmRzc19kc3NfY2xrLAlDS180NDNYKSwKIAlDTEsoIm9tYXBkc3NfZHNzIiwJInZpZGVvX2NsayIsCQkJJmRzc180OG1oel9jbGssCUNLXzQ0M1gpLAotCUNMSygib21hcGRzc19kc3MiLAkiZmNrIiwJCQkJJmRzc19mY2ssCUNLXzQ0M1gpLAotCS8qCi0JICogT24gT01BUDQsIERTUyBpY2sgaXMgYSBkdW1teSBjbG9jazsgdGhpcyBpcyBuZWVkZWQgZm9yIGNvbXBhdGliaWxpdHkKLQkgKiB3aXRoIE9NQVAyLzMuCi0JICovCi0JQ0xLKCJvbWFwZHNzX2RzcyIsCSJpY2siLAkJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSygib21hcGRzc19kc3MiLAkiZmNrIiwJCQkJJmRzc19kc3NfY2xrLAlDS180NDNYKSwKKwlDTEsoIm9tYXBkc3NfZHNzIiwJImljayIsCQkJCSZkc3NfZmNrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJImVmdXNlX2N0cmxfY3VzdF9mY2siLAkJJmVmdXNlX2N0cmxfY3VzdF9mY2ssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkiZW1pZjFfZmNrIiwJCQkmZW1pZjFfZmNrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJImVtaWYyX2ZjayIsCQkJJmVtaWYyX2ZjaywJQ0tfNDQzWCksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKaW5kZXggYWI4Nzg1NC4uNmNiNmMwMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYwpAQCAtMjU4LDcgKzI1OCw3IEBACiAgKiBjbGtkbV9pbml0IC0gc2V0IHVwIHRoZSBjbG9ja2RvbWFpbiBsYXllcgogICogQGNsa2Rtczogb3B0aW9uYWwgcG9pbnRlciB0byBhbiBhcnJheSBvZiBjbG9ja2RvbWFpbnMgdG8gcmVnaXN0ZXIKICAqIEBpbml0X2F1dG9kZXBzOiBvcHRpb25hbCBwb2ludGVyIHRvIGFuIGFycmF5IG9mIGF1dG9kZXBzIHRvIHJlZ2lzdGVyCi0gKiBAY3VzdG9tX2Z1bmNzOiBmdW5jIHBvaW50ZXJzIGZvciBhcmNoIHNwZWNmaWMgaW1wbGVtZW50YXRpb25zCisgKiBAY3VzdG9tX2Z1bmNzOiBmdW5jIHBvaW50ZXJzIGZvciBhcmNoIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucwogICoKICAqIFNldCB1cCBpbnRlcm5hbCBzdGF0ZS4gIElmIGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBjbG9ja2RvbWFpbnMKICAqIEBjbGtkbXMgd2FzIHN1cHBsaWVkLCBsb29wIHRocm91Z2ggdGhlIGxpc3Qgb2YgY2xvY2tkb21haW5zLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5oCmluZGV4IDg1YjNkY2UuLjU4MjM1ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmgKQEAgLTEyNSw3ICsxMjUsNyBAQAogfTsKIAogLyoqCi0gKiBzdHJ1Y3QgY2xrZG1fb3BzIC0gQXJjaCBzcGVjZmljIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucworICogc3RydWN0IGNsa2RtX29wcyAtIEFyY2ggc3BlY2lmaWMgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zCiAgKiBAY2xrZG1fYWRkX3drZGVwOiBBZGQgYSB3YWtldXAgZGVwZW5kZW5jeSBiZXR3ZWVuIGNsayBkb21haW5zCiAgKiBAY2xrZG1fZGVsX3drZGVwOiBEZWxldGUgYSB3YWtldXAgZGVwZW5kZW5jeSBiZXR3ZWVuIGNsayBkb21haW5zCiAgKiBAY2xrZG1fcmVhZF93a2RlcDogUmVhZCB3YWtldXAgZGVwZW5kZW5jeSBzdGF0ZSBiZXR3ZWVuIGNsayBkb21haW5zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eF8zeHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eF8zeHh4LmMKaW5kZXggOWQwZGVjOC4uMzg4MzBkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJ4eHhfM3h4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20yeHh4XzN4eHguYwpAQCAtMjQ3LDYgKzI0Nyw3IEBACiAJdTMyIHBlcl9jbV9jbGtzZWw7CiAJdTMyIGVtdV9jbV9jbGtzZWw7CiAJdTMyIGVtdV9jbV9jbGtzdGN0cmw7CisJdTMyIHBsbF9jbV9hdXRvaWRsZTsKIAl1MzIgcGxsX2NtX2F1dG9pZGxlMjsKIAl1MzIgcGxsX2NtX2Nsa3NlbDQ7CiAJdTMyIHBsbF9jbV9jbGtzZWw1OwpAQCAtMzE5LDYgKzMyMCwxNSBAQAogCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSk7CiAJY21fY29udGV4dC5lbXVfY21fY2xrc3RjdHJsID0KIAkJb21hcDJfY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0VNVV9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCk7CisJLyoKKwkgKiBBcyBwZXIgZXJyYXR1bSBpNjcxLCBST00gY29kZSBkb2VzIG5vdCByZXNwZWN0IHRoZSBQRVIgRFBMTAorCSAqIHByb2dyYW1taW5nIHNjaGVtZSBpZiBDTV9BVVRPSURMRV9QTEwuQVVUT19QRVJJUEhfRFBMTCA9PSAxLgorCSAqIEluIHRoaXMgY2FzZSwgZXZlbiB0aG91Z2ggdGhpcyByZWdpc3RlciBoYXMgYmVlbiBzYXZlZCBpbgorCSAqIHNjcmF0Y2hwYWQgY29udGVudHMsIHdlIG5lZWQgdG8gcmVzdG9yZSBBVVRPX1BFUklQSF9EUExMCisJICogYnkgb3Vyc2VsdmVzLiBTbywgd2UgbmVlZCB0byBzYXZlIGl0IGFueXdheS4KKwkgKi8KKwljbV9jb250ZXh0LnBsbF9jbV9hdXRvaWRsZSA9CisJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9BVVRPSURMRSk7CiAJY21fY29udGV4dC5wbGxfY21fYXV0b2lkbGUyID0KIAkJb21hcDJfY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0FVVE9JRExFMik7CiAJY21fY29udGV4dC5wbGxfY21fY2xrc2VsNCA9CkBAIC00NDEsNiArNDUxLDEzIEBACiAJCQkgICAgICAgQ01fQ0xLU0VMMSk7CiAJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LmVtdV9jbV9jbGtzdGN0cmwsIE9NQVAzNDMwX0VNVV9NT0QsCiAJCQkgICAgICAgT01BUDJfQ01fQ0xLU1RDVFJMKTsKKwkvKgorCSAqIEFzIHBlciBlcnJhdHVtIGk2NzEsIFJPTSBjb2RlIGRvZXMgbm90IHJlc3BlY3QgdGhlIFBFUiBEUExMCisJICogcHJvZ3JhbW1pbmcgc2NoZW1lIGlmIENNX0FVVE9JRExFX1BMTC5BVVRPX1BFUklQSF9EUExMID09IDEuCisJICogSW4gdGhpcyBjYXNlLCB3ZSBuZWVkIHRvIHJlc3RvcmUgQVVUT19QRVJJUEhfRFBMTCBieSBvdXJzZWx2ZXMuCisJICovCisJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LnBsbF9jbV9hdXRvaWRsZSwgUExMX01PRCwKKwkJCSAgICAgICBDTV9BVVRPSURMRSk7CiAJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LnBsbF9jbV9hdXRvaWRsZTIsIFBMTF9NT0QsCiAJCQkgICAgICAgQ01fQVVUT0lETEUyKTsKIAlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKGNtX2NvbnRleHQucGxsX2NtX2Nsa3NlbDQsIFBMTF9NT0QsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY29udHJvbC5jCmluZGV4IDY5NTI3OTQuLmRhNTNiYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY29udHJvbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY29udHJvbC5jCkBAIC0zMTYsOCArMzE2LDE0IEBACiAJCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoV0tVUF9NT0QsIENNX0NMS1NFTCk7CiAJcHJjbV9ibG9ja19jb250ZW50cy5jbV9jbGtlbl9wbGwgPQogCQkJb21hcDJfY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS0VOKTsKKwkvKgorCSAqIEFzIHBlciBlcnJhdHVtIGk2NzEsIFJPTSBjb2RlIGRvZXMgbm90IHJlc3BlY3QgdGhlIFBFUiBEUExMCisJICogcHJvZ3JhbW1pbmcgc2NoZW1lIGlmIENNX0FVVE9JRExFX1BMTC4uQVVUT19QRVJJUEhfRFBMTCA9PSAxLgorCSAqIFRoZW4sICBpbiBhbnljYXNlLCBjbGVhciB0aGVzZSBiaXRzIHRvIGF2b2lkIGV4dHJhIGxhdGVuY2llcy4KKwkgKi8KIAlwcmNtX2Jsb2NrX2NvbnRlbnRzLmNtX2F1dG9pZGxlX3BsbCA9Ci0JCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoUExMX01PRCwgT01BUDM0MzBfQ01fQVVUT0lETEVfUExMKTsKKwkJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9BVVRPSURMRSkgJgorCQkJfk9NQVAzNDMwX0FVVE9fUEVSSVBIX0RQTExfTUFTSzsKIAlwcmNtX2Jsb2NrX2NvbnRlbnRzLmNtX2Nsa3NlbDFfcGxsID0KIAkJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwxX1BMTCk7CiAJcHJjbV9ibG9ja19jb250ZW50cy5jbV9jbGtzZWwyX3BsbCA9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NwdWlkbGUzNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NwdWlkbGUzNHh4LmMKaW5kZXggYTQ0YzUyMy4uMWMyNDBlZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jcHVpZGxlMzR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY3B1aWRsZTM0eHguYwpAQCAtMjk3LDggKzI5Nyw4IEBACiAKIC8qKgogICogb21hcDNfY3B1aWRsZV91cGRhdGVfc3RhdGVzKCkgLSBVcGRhdGUgdGhlIGNwdWlkbGUgc3RhdGVzCi0gKiBAbXB1X2RlZXBlc3Rfc3RhdGU6CUVuYWJsZSBzdGF0ZXMgdXB0byBhbmQgaW5jbHVkaW5nIHRoaXMgZm9yIG1wdSBkb21haW4KLSAqIEBjb3JlX2RlZXBlc3Rfc3RhdGU6CUVuYWJsZSBzdGF0ZXMgdXB0byBhbmQgaW5jbHVkaW5nIHRoaXMgZm9yIGNvcmUgZG9tYWluCisgKiBAbXB1X2RlZXBlc3Rfc3RhdGU6CUVuYWJsZSBzdGF0ZXMgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGlzIGZvciBtcHUgZG9tYWluCisgKiBAY29yZV9kZWVwZXN0X3N0YXRlOglFbmFibGUgc3RhdGVzIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhpcyBmb3IgY29yZSBkb21haW4KICAqCiAgKiBUaGlzIGdvZXMgdGhyb3VnaCB0aGUgbGlzdCBvZiBzdGF0ZXMgYXZhaWxhYmxlIGFuZCBlbmFibGVzIGFuZCBkaXNhYmxlcyB0aGUKICAqIHZhbGlkaXR5IG9mIEMgc3RhdGVzIGJhc2VkIG9uIGRlZXBlc3Qgc3RhdGUgdGhhdCBjYW4gYmUgYWNoaWV2ZWQgZm9yIHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwppbmRleCA4NGQxYjczLi43Yjg1NTg1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwpAQCAtMjUzLDcgKzI1Myw3IEBACiAJCQlBUlJBWV9TSVpFKG9tYXBfa2V5Ym9hcmRfbGF0ZW5jeSksIDApOwogCiAJaWYgKElTX0VSUihvZCkpIHsKLQkJV0FSTigxLCAiQ2FudCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXM6JXMuXG4iLAorCQlXQVJOKDEsICJDYW4ndCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXM6JXMuXG4iLAogCQkJCQkJbmFtZSwgb2gtPm5hbWUpOwogCQlyZXR1cm4gUFRSX0VSUihvZCk7CiAJfQpAQCAtMzczLDcgKzM3Myw3IEBACiAJb2QgPSBvbWFwX2RldmljZV9idWlsZChuYW1lLCBzcGlfbnVtLCBvaCwgcGRhdGEsCiAJCQkJc2l6ZW9mKCpwZGF0YSksCW9tYXBfbWNzcGlfbGF0ZW5jeSwKIAkJCQlBUlJBWV9TSVpFKG9tYXBfbWNzcGlfbGF0ZW5jeSksIDApOwotCVdBUk4oSVNfRVJSKG9kKSwgIkNhbnQgYnVpbGQgb21hcF9kZXZpY2UgZm9yICVzOiVzXG4iLAorCVdBUk4oSVNfRVJSKG9kKSwgIkNhbid0IGJ1aWxkIG9tYXBfZGV2aWNlIGZvciAlczolc1xuIiwKIAkJCQluYW1lLCBvaC0+bmFtZSk7CiAJa2ZyZWUocGRhdGEpOwogCXJldHVybiAwOwpAQCAtNzI1LDcgKzcyNSw3IEBACiAJb2QgPSBvbWFwX2RldmljZV9idWlsZChkZXZfbmFtZSwgaWQsIG9oLCBOVUxMLCAwLAogCQkJCW9tYXBfd2R0X2xhdGVuY3ksCiAJCQkJQVJSQVlfU0laRShvbWFwX3dkdF9sYXRlbmN5KSwgMCk7Ci0JV0FSTihJU19FUlIob2QpLCAiQ2FudCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXM6JXMuXG4iLAorCVdBUk4oSVNfRVJSKG9kKSwgIkNhbid0IGJ1aWxkIG9tYXBfZGV2aWNlIGZvciAlczolcy5cbiIsCiAJCQkJZGV2X25hbWUsIG9oLT5uYW1lKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZG1hLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RtYS5jCmluZGV4IDM0OTIyYjIuLmM5ZmYwZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kbWEuYwpAQCAtMjYyLDcgKzI2Miw3IEBACiAJCQlvbWFwMl9kbWFfbGF0ZW5jeSwgQVJSQVlfU0laRShvbWFwMl9kbWFfbGF0ZW5jeSksIDApOwogCWtmcmVlKHApOwogCWlmIChJU19FUlIob2QpKSB7Ci0JCXByX2VycigiJXM6IENhbnQgYnVpbGQgb21hcF9kZXZpY2UgZm9yICVzOiVzLlxuIiwKKwkJcHJfZXJyKCIlczogQ2FuJ3QgYnVpbGQgb21hcF9kZXZpY2UgZm9yICVzOiVzLlxuIiwKIAkJCV9fZnVuY19fLCBuYW1lLCBvaC0+bmFtZSk7CiAJCXJldHVybiBQVFJfRVJSKG9kKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3Bpby5jCmluZGV4IDQxM2RlMTguLjk1Mjk4NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3Bpby5jCkBAIC04Miw3ICs4Miw3IEBACiAJa2ZyZWUocGRhdGEpOwogCiAJaWYgKElTX0VSUihvZCkpIHsKLQkJV0FSTigxLCAiQ2FudCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXM6JXMuXG4iLAorCQlXQVJOKDEsICJDYW4ndCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXM6JXMuXG4iLAogCQkJCQluYW1lLCBvaC0+bmFtZSk7CiAJCXJldHVybiBQVFJfRVJSKG9kKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmMKaW5kZXggMTM3ZTFhNS4uYjJmMzBiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuYwpAQCAtNDY1LDcgKzQ2NSw3IEBACiAJb2QgPSBvbWFwX2RldmljZV9idWlsZChuYW1lLCBjdHJsX25yIC0gMSwgb2gsIG1tY19kYXRhLAogCQlzaXplb2Yoc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEpLCBvaGwsIG9obF9jbnQsIGZhbHNlKTsKIAlpZiAoSVNfRVJSKG9kKSkgewotCQlXQVJOKDEsICJDYW50IGJ1aWxkIG9tYXBfZGV2aWNlIGZvciAlczolcy5cbiIsIG5hbWUsIG9oLT5uYW1lKTsKKwkJV0FSTigxLCAiQ2FuJ3QgYnVpbGQgb21hcF9kZXZpY2UgZm9yICVzOiVzLlxuIiwgbmFtZSwgb2gtPm5hbWUpOwogCQlrZnJlZShtbWNfZGF0YS0+c2xvdHNbMF0ubmFtZSk7CiAJCWdvdG8gZG9uZTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21jYnNwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21jYnNwLmMKaW5kZXggNTY1YjkwNi4uNGE2ZWY2YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tY2JzcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWNic3AuYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAJCQkJQVJSQVlfU0laRShvbWFwMl9tY2JzcF9sYXRlbmN5KSwgZmFsc2UpOwogCWtmcmVlKHBkYXRhKTsKIAlpZiAoSVNfRVJSKG9kKSkgIHsKLQkJcHJfZXJyKCIlczogQ2FudCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXM6JXMuXG4iLCBfX2Z1bmNfXywKKwkJcHJfZXJyKCIlczogQ2FuJ3QgYnVpbGQgb21hcF9kZXZpY2UgZm9yICVzOiVzLlxuIiwgX19mdW5jX18sCiAJCQkJCW5hbWUsIG9oLT5uYW1lKTsKIAkJcmV0dXJuIFBUUl9FUlIob2QpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCmluZGV4IGJiMDQzY2IuLmE0YWIxZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwpAQCAtNTE4LDcgKzUxOCw3IEBACiAJCQlzZXFfcHJpbnRmKHMsICIvKiAlcyAqL1xuIiwgbS0+bXV4bmFtZXNbbW9kZV0pOwogCiAJCS8qCi0JCSAqIFhYWDogTWlnaHQgYmUgcmV2aXNpdGVkIHRvIHN1cHBvcnQgZGlmZmVyZW5jZXMgYWNjcm9zcworCQkgKiBYWFg6IE1pZ2h0IGJlIHJldmlzaXRlZCB0byBzdXBwb3J0IGRpZmZlcmVuY2VzIGFjcm9zcwogCQkgKiBzYW1lIE9NQVAgZ2VuZXJhdGlvbi4KIAkJICovCiAJCXNlcV9wcmludGYocywgIk9NQVAlZF9NVVgoJXMsICIsIG9tYXBfZ2VuLCBtMF9kZWYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXgyNDMwLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eDI0MzAuaAppbmRleCBhZGJlYTBkLi45ZmQ5MzE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eDI0MzAuaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eDI0MzAuaApAQCAtMjIsNyArMjIsNyBAQAogICogYWJzb2x1dGUgYWRkcmVzc2VzLiAgVGhlIG5hbWUgaW4gdGhlIG1hY3JvIGlzIHRoZSBtb2RlLTAgbmFtZSBvZgogICogdGhlIHBpbi4gIE5PVEU6IFRoZXNlIHJlZ2lzdGVycyBhcmUgOC1iaXRzIHdpZGUuCiAgKgotICogTm90ZSB0aGF0IHRoZXNlIGRlZmluZXMgdXNlIFNETU1DIGluc3RlYWQgb2YgTU1DIGZvciBjb21wYWJpbGl0eQorICogTm90ZSB0aGF0IHRoZXNlIGRlZmluZXMgdXNlIFNETU1DIGluc3RlYWQgb2YgTU1DIGZvciBjb21wYXRpYmlsaXR5CiAgKiB3aXRoIHNpZ25hbCBuYW1lcyB1c2VkIGluIDM2MzAuCiAgKi8KICNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQTUNfQ0xLX09GRlNFVAkJMHgwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDIwX2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDIwX2RhdGEuYwppbmRleCA4ZWIzY2UxLi5jNGQwYWU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQyMF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MjBfZGF0YS5jCkBAIC0xNjM5LDYgKzE2MzksNyBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfZ3BpbzFfaHdtb2QgPSB7CiAJLm5hbWUJCT0gImdwaW8xIiwKKwkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9SRVNFVCwKIAkubXB1X2lycXMJPSBvbWFwMjQyeF9ncGlvMV9pcnFzLAogCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDJ4X2dwaW8xX2lycXMpLAogCS5tYWluX2Nsawk9ICJncGlvc19mY2siLApAQCAtMTY2OSw2ICsxNjcwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2dwaW8yX2h3bW9kID0gewogCS5uYW1lCQk9ICJncGlvMiIsCisJLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQsCiAJLm1wdV9pcnFzCT0gb21hcDI0MnhfZ3BpbzJfaXJxcywKIAkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyeF9ncGlvMl9pcnFzKSwKIAkubWFpbl9jbGsJPSAiZ3Bpb3NfZmNrIiwKQEAgLTE2OTksNiArMTcwMSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9ncGlvM19od21vZCA9IHsKIAkubmFtZQkJPSAiZ3BpbzMiLAorCS5mbGFncwkJPSBIV01PRF9DT05UUk9MX09QVF9DTEtTX0lOX1JFU0VULAogCS5tcHVfaXJxcwk9IG9tYXAyNDJ4X2dwaW8zX2lycXMsCiAJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MnhfZ3BpbzNfaXJxcyksCiAJLm1haW5fY2xrCT0gImdwaW9zX2ZjayIsCkBAIC0xNzI5LDYgKzE3MzIsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfZ3BpbzRfaHdtb2QgPSB7CiAJLm5hbWUJCT0gImdwaW80IiwKKwkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9SRVNFVCwKIAkubXB1X2lycXMJPSBvbWFwMjQyeF9ncGlvNF9pcnFzLAogCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDJ4X2dwaW80X2lycXMpLAogCS5tYWluX2Nsawk9ICJncGlvc19mY2siLApAQCAtMTc4Miw3ICsxNzg2LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9hZGRyX3NwYWNlIG9tYXAyNDIwX2RtYV9zeXN0ZW1fYWRkcnNbXSA9IHsKIAl7CiAJCS5wYV9zdGFydAk9IDB4NDgwNTYwMDAsCi0JCS5wYV9lbmQJCT0gMHg0YTA1NjBmZiwKKwkJLnBhX2VuZAkJPSAweDQ4MDU2ZmZmLAogCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCiAJfSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQzMF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQzMF9kYXRhLmMKaW5kZXggYTg2MGZiNS4uOTY4MmRkNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MzBfZGF0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDMwX2RhdGEuYwpAQCAtMTU1OSw3ICsxNTU5LDcgQEAKIAkJCSAqIEkyQ0hTIElQJ3MgZG8gbm90IGZvbGxvdyB0aGUgdXN1YWwgcGF0dGVybi4KIAkJCSAqIHByY21fcmVnX2lkIGFsb25lIGNhbm5vdCBiZSB1c2VkIHRvIHByb2dyYW0KIAkJCSAqIHRoZSBpY2xrIGFuZCBmY2xrLiBOZWVkcyB0byBiZSBoYW5kbGVkIHVzaW5nCi0JCQkgKiBhZGRpdG9uYWwgZmxhZ3Mgd2hlbiBjbGsgaGFuZGxpbmcgaXMgbW92ZWQKKwkJCSAqIGFkZGl0aW9uYWwgZmxhZ3Mgd2hlbiBjbGsgaGFuZGxpbmcgaXMgbW92ZWQKIAkJCSAqIHRvIGh3bW9kIGZyYW1ld29yay4KIAkJCSAqLwogCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCkBAIC0xNzQyLDYgKzE3NDIsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfZ3BpbzFfaHdtb2QgPSB7CiAJLm5hbWUJCT0gImdwaW8xIiwKKwkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9SRVNFVCwKIAkubXB1X2lycXMJPSBvbWFwMjQzeF9ncGlvMV9pcnFzLAogCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDN4X2dwaW8xX2lycXMpLAogCS5tYWluX2Nsawk9ICJncGlvc19mY2siLApAQCAtMTc3Miw2ICsxNzczLDcgQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2dwaW8yX2h3bW9kID0gewogCS5uYW1lCQk9ICJncGlvMiIsCisJLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQsCiAJLm1wdV9pcnFzCT0gb21hcDI0M3hfZ3BpbzJfaXJxcywKIAkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzeF9ncGlvMl9pcnFzKSwKIAkubWFpbl9jbGsJPSAiZ3Bpb3NfZmNrIiwKQEAgLTE4MDIsNiArMTgwNCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9ncGlvM19od21vZCA9IHsKIAkubmFtZQkJPSAiZ3BpbzMiLAorCS5mbGFncwkJPSBIV01PRF9DT05UUk9MX09QVF9DTEtTX0lOX1JFU0VULAogCS5tcHVfaXJxcwk9IG9tYXAyNDN4X2dwaW8zX2lycXMsCiAJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0M3hfZ3BpbzNfaXJxcyksCiAJLm1haW5fY2xrCT0gImdwaW9zX2ZjayIsCkBAIC0xODMyLDYgKzE4MzUsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfZ3BpbzRfaHdtb2QgPSB7CiAJLm5hbWUJCT0gImdwaW80IiwKKwkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9SRVNFVCwKIAkubXB1X2lycXMJPSBvbWFwMjQzeF9ncGlvNF9pcnFzLAogCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDN4X2dwaW80X2lycXMpLAogCS5tYWluX2Nsawk9ICJncGlvc19mY2siLApAQCAtMTg2Miw2ICsxODY2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2dwaW81X2h3bW9kID0gewogCS5uYW1lCQk9ICJncGlvNSIsCisJLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQsCiAJLm1wdV9pcnFzCT0gb21hcDI0M3hfZ3BpbzVfaXJxcywKIAkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzeF9ncGlvNV9pcnFzKSwKIAkubWFpbl9jbGsJPSAiZ3BpbzVfZmNrIiwKQEAgLTE5MTUsNyArMTkyMCw3IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQzMF9kbWFfc3lzdGVtX2FkZHJzW10gPSB7CiAJewogCQkucGFfc3RhcnQJPSAweDQ4MDU2MDAwLAotCQkucGFfZW5kCQk9IDB4NGEwNTYwZmYsCisJCS5wYV9lbmQJCT0gMHg0ODA1NmZmZiwKIAkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzN4eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzN4eHhfZGF0YS5jCmluZGV4IGI5OGUyZGYuLjkwOWE4NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zeHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfM3h4eF9kYXRhLmMKQEAgLTIxNDEsNiArMjE0MSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9ncGlvMV9od21vZCA9IHsKIAkubmFtZQkJPSAiZ3BpbzEiLAorCS5mbGFncwkJPSBIV01PRF9DT05UUk9MX09QVF9DTEtTX0lOX1JFU0VULAogCS5tcHVfaXJxcwk9IG9tYXAzeHh4X2dwaW8xX2lycXMsCiAJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfZ3BpbzFfaXJxcyksCiAJLm1haW5fY2xrCT0gImdwaW8xX2ljayIsCkBAIC0yMTc3LDYgKzIxNzgsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfZ3BpbzJfaHdtb2QgPSB7CiAJLm5hbWUJCT0gImdwaW8yIiwKKwkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9SRVNFVCwKIAkubXB1X2lycXMJPSBvbWFwM3h4eF9ncGlvMl9pcnFzLAogCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2dwaW8yX2lycXMpLAogCS5tYWluX2Nsawk9ICJncGlvMl9pY2siLApAQCAtMjIxMyw2ICsyMjE1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2dwaW8zX2h3bW9kID0gewogCS5uYW1lCQk9ICJncGlvMyIsCisJLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQsCiAJLm1wdV9pcnFzCT0gb21hcDN4eHhfZ3BpbzNfaXJxcywKIAkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9ncGlvM19pcnFzKSwKIAkubWFpbl9jbGsJPSAiZ3BpbzNfaWNrIiwKQEAgLTIyNDksNiArMjI1Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9ncGlvNF9od21vZCA9IHsKIAkubmFtZQkJPSAiZ3BpbzQiLAorCS5mbGFncwkJPSBIV01PRF9DT05UUk9MX09QVF9DTEtTX0lOX1JFU0VULAogCS5tcHVfaXJxcwk9IG9tYXAzeHh4X2dwaW80X2lycXMsCiAJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfZ3BpbzRfaXJxcyksCiAJLm1haW5fY2xrCT0gImdwaW80X2ljayIsCkBAIC0yMjg1LDYgKzIyODksNyBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfZ3BpbzVfaHdtb2QgPSB7CiAJLm5hbWUJCT0gImdwaW81IiwKKwkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9SRVNFVCwKIAkubXB1X2lycXMJPSBvbWFwM3h4eF9ncGlvNV9pcnFzLAogCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2dwaW81X2lycXMpLAogCS5tYWluX2Nsawk9ICJncGlvNV9pY2siLApAQCAtMjMyMSw2ICsyMzI2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2dwaW82X2h3bW9kID0gewogCS5uYW1lCQk9ICJncGlvNiIsCisJLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQsCiAJLm1wdV9pcnFzCT0gb21hcDN4eHhfZ3BpbzZfaXJxcywKIAkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9ncGlvNl9pcnFzKSwKIAkubWFpbl9jbGsJPSAiZ3BpbzZfaWNrIiwKQEAgLTIzODYsNyArMjM5Miw3IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwM3h4eF9kbWFfc3lzdGVtX2FkZHJzW10gPSB7CiAJewogCQkucGFfc3RhcnQJPSAweDQ4MDU2MDAwLAotCQkucGFfZW5kCQk9IDB4NGEwNTYwZmYsCisJCS5wYV9lbmQJCT0gMHg0ODA1NmZmZiwKIAkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jCmluZGV4IDNlODhkZDMuLmFiYzU0OGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80NHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDR4eF9kYXRhLmMKQEAgLTg4NSw3ICs4ODUsNyBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfZG1hX3N5c3RlbV9hZGRyc1tdID0gewogCXsKIAkJLnBhX3N0YXJ0CT0gMHg0YTA1NjAwMCwKLQkJLnBhX2VuZAkJPSAweDRhMDU2MGZmLAorCQkucGFfZW5kCQk9IDB4NGEwNTZmZmYsCiAJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9sM19zbXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9sM19zbXguYwppbmRleCA1ZjJkYTc1Ni4uNDMyMWU3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2wzX3NteC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9sM19zbXguYwpAQCAtMTk2LDExICsxOTYsMTEgQEAKIAkJLyogTm8gdGltZW91dCBlcnJvciBmb3IgZGVidWcgc291cmNlcyAqLwogCX0KIAotCWJhc2UgPSAoKGwzLT5ydCkgKyAoKihvbWFwM19sM19iYXNlc1tpbnRfdHlwZV0gKyBlcnJfc291cmNlKSkpOwotCiAJLyogaWRlbnRpZnkgdGhlIGVycm9yIHNvdXJjZSAqLwogCWZvciAoZXJyX3NvdXJjZSA9IDA7ICEoc3RhdHVzICYgKDEgPDwgZXJyX3NvdXJjZSkpOyBlcnJfc291cmNlKyspCiAJCQkJCQkJCQk7CisKKwliYXNlID0gbDMtPnJ0ICsgKihvbWFwM19sM19iYXNlc1tpbnRfdHlwZV0gKyBlcnJfc291cmNlKTsKIAllcnJvciA9IG9tYXAzX2wzX3JlYWRsbChiYXNlLCBMM19FUlJPUl9MT0cpOwogCiAJaWYgKGVycm9yKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfcGh5X2ludGVybmFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfcGh5X2ludGVybmFsLmMKaW5kZXggZTJlNjA1Zi4uMDVmNmFiYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX3BoeV9pbnRlcm5hbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9waHlfaW50ZXJuYWwuYwpAQCAtMTEyLDEyICsxMTIsMTIgQEAKIAkJZWxzZQogCQkJLyoKIAkJCSAqIEVuYWJsZSBWQlVTIFZhbGlkLCBBVmFsaWQgYW5kIElERElHCi0JCQkgKiBoaWdoIGltcGVkZW5jZQorCQkJICogaGlnaCBpbXBlZGFuY2UKIAkJCSAqLwogCQkJX19yYXdfd3JpdGVsKElERElHIHwgQVZBTElEIHwgVkJVU1ZBTElELAogCQkJCQkJY3RybF9iYXNlICsgVVNCT1RHSFNfQ09OVFJPTCk7CiAJfSBlbHNlIHsKLQkJLyogRW5hYmxlIHNlc3Npb24gRU5EIGFuZCBJRElHIHRvIGhpZ2ggaW1wZWRlbmNlLiAqLworCQkvKiBFbmFibGUgc2Vzc2lvbiBFTkQgYW5kIElESUcgdG8gaGlnaCBpbXBlZGFuY2UuICovCiAJCV9fcmF3X3dyaXRlbChTRVNTRU5EIHwgSURESUcsIGN0cmxfYmFzZSArCiAJCQkJCVVTQk9UR0hTX0NPTlRST0wpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF90d2wuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF90d2wuYwppbmRleCAwYThlNzRlLi4wN2Q2MTQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfdHdsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX3R3bC5jCkBAIC0zMDgsNyArMzA4LDcgQEAKICAqIFN0cmF0ZWd5IFNvZnR3YXJlIFNjYWxpbmcgTW9kZSAoRU5BQkxFX1ZNT0RFPTApLCBmb3Igc2V0dGluZyB0aGUgdm9sdGFnZXMsCiAgKiBpbiB0aG9zZSBzY2VuYXJpb3MgdGhpcyBiaXQgaXMgdG8gYmUgY2xlYXJlZCAoZW5hYmxlID0gZmFsc2UpLgogICoKLSAqIFJldHVybnMgMCBvbiBzdWNlc3MsIGVycm9yIGlzIHJldHVybmVkIGlmIEkyQyByZWFkL3dyaXRlIGZhaWxzLgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm9yIGlzIHJldHVybmVkIGlmIEkyQyByZWFkL3dyaXRlIGZhaWxzLgogICovCiBpbnQgX19pbml0IG9tYXAzX3R3bF9zZXRfc3JfYml0KGJvb2wgZW5hYmxlKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5jCmluZGV4IDMwYWYzMzUuLjQ5NDg2ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmMKQEAgLTg5LDYgKzg5LDcgQEAKIAlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKIAkJX2luaXRfb21hcF9kZXZpY2UoImwzX21haW5fMSIsICZsM19kZXYpOwogCQlfaW5pdF9vbWFwX2RldmljZSgiZHNwIiwgJmRzcF9kZXYpOworCQlfaW5pdF9vbWFwX2RldmljZSgiaXZhIiwgJml2YV9kZXYpOwogCX0gZWxzZSB7CiAJCV9pbml0X29tYXBfZGV2aWNlKCJsM19tYWluIiwgJmwzX2Rldik7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5jCmluZGV4IDQ5YzY1MTMuLjlhZjA4NDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmMKQEAgLTE5Niw3ICsxOTYsNyBAQAogLyoqCiAgKiBwd3JkbV9pbml0IC0gc2V0IHVwIHRoZSBwb3dlcmRvbWFpbiBsYXllcgogICogQHB3cmRtX2xpc3Q6IGFycmF5IG9mIHN0cnVjdCBwb3dlcmRvbWFpbiBwb2ludGVycyB0byByZWdpc3RlcgotICogQGN1c3RvbV9mdW5jczogZnVuYyBwb2ludGVycyBmb3IgYXJjaCBzcGVjZmljIGltcGxlbWVudGF0aW9ucworICogQGN1c3RvbV9mdW5jczogZnVuYyBwb2ludGVycyBmb3IgYXJjaCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMKICAqCiAgKiBMb29wIHRocm91Z2ggdGhlIGFycmF5IG9mIHBvd2VyZG9tYWlucyBAcHdyZG1fbGlzdCwgcmVnaXN0ZXJpbmcgYWxsCiAgKiB0aGF0IGFyZSBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgQ1BVLiBJZiBwd3JkbV9saXN0IGlzIHN1cHBsaWVkCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmgKaW5kZXggMDI3ZjQwYi4uZDIzZDk3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uaApAQCAtMTIxLDcgKzEyMSw3IEBACiB9OwogCiAvKioKLSAqIHN0cnVjdCBwd3JkbV9vcHMgLSBBcmNoIHNwZWNmaWMgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zCisgKiBzdHJ1Y3QgcHdyZG1fb3BzIC0gQXJjaCBzcGVjaWZpYyBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMKICAqIEBwd3JkbV9zZXRfbmV4dF9wd3JzdDogU2V0IHRoZSB0YXJnZXQgcG93ZXIgc3RhdGUgZm9yIGEgcGQKICAqIEBwd3JkbV9yZWFkX25leHRfcHdyc3Q6IFJlYWQgdGhlIHRhcmdldCBwb3dlciBzdGF0ZSBzZXQgZm9yIGEgcGQKICAqIEBwd3JkbV9yZWFkX3B3cnN0OiBSZWFkIHRoZSBjdXJyZW50IHBvd2VyIHN0YXRlIG9mIGEgcGQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zM3h4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluczN4eHhfZGF0YS5jCmluZGV4IDljOWMxMTMuLjQ2OWE5MjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zM3h4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMzeHh4X2RhdGEuYwpAQCAtNzIsNyArNzIsNyBAQAogCiAvKgogICogVGhlIFVTQlRMTCBTYXZlLWFuZC1SZXN0b3JlIG1lY2hhbmlzbSBpcyBicm9rZW4gb24KLSAqIDM0MzBzIHVwdG8gRVMzLjAgYW5kIDM2MzBFUzEuMC4gSGVuY2UgdGhpcyBmZWF0dXJlCisgKiAzNDMwcyB1cCB0byBFUzMuMCBhbmQgMzYzMEVTMS4wLiBIZW5jZSB0aGlzIGZlYXR1cmUKICAqIG5lZWRzIHRvIGJlIGRpc2FibGVkIG9uIHRoZXNlIGNoaXBzLgogICogUmVmZXI6IDM0MzAgZXJyYXRhIElEIGk0NTkgYW5kIDM2MzAgZXJyYXRhIElEIGk1NzkKICAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NtYXJ0cmVmbGV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NtYXJ0cmVmbGV4LmMKaW5kZXggOGY2NzRjOS4uMTNlMjRmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbWFydHJlZmxleC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc21hcnRyZWZsZXguYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAgKiBkcml2ZXIgcmVnaXN0ZXIgYW5kIHNyIGRldmljZSBpbnRpYWxpenRpb24gQVBJJ3MuIE9ubHkgb25lIGNhbGwKICAqIHdpbGwgdWx0aW1hdGVseSBzdWNjZWVkLgogICoKLSAqIEN1cnJlbmx5IHRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGludGVycnJ1cHQgaGFuZGxlciBmb3IgYSBwYXJ0aWN1bGFyIFNSCisgKiBDdXJyZW50bHkgdGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgaW50ZXJycnVwdCBoYW5kbGVyIGZvciBhIHBhcnRpY3VsYXIgU1IKICAqIGlmIHNtYXJ0cmVmbGV4IGNsYXNzIGRyaXZlciBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgYW5kIGhhcwogICogcmVxdWVzdGVkIGZvciBpbnRlcnJ1cHRzIGFuZCB0aGUgU1IgaW50ZXJydXB0IGxpbmUgaW4gcHJlc2VudC4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ZvbHRhZ2UuYwppbmRleCBjNmZhY2Y3Li4wYzE1NTJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ZvbHRhZ2UuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ZvbHRhZ2UuYwpAQCAtMTE0LDcgKzExNCw2IEBACiAJc3lzX2Nsa19zcGVlZCAvPSAxMDAwOwogCiAJLyogR2VuZXJpYyB2b2x0YWdlIHBhcmFtZXRlcnMgKi8KLQl2ZGQtPmN1cnJfdm9sdCA9IDEyMDAwMDA7CiAJdmRkLT52b2x0X3NjYWxlID0gdnBfZm9yY2V1cGRhdGVfc2NhbGVfdm9sdGFnZTsKIAl2ZGQtPnZwX2VuYWJsZWQgPSBmYWxzZTsKIApAQCAtODUxLDcgKzg1MCw3IEBACiAgKiBAdm9sdGRtOglwb2ludGVyIHRvIHRoZSBWREQgd2hvc2Ugdm9sdGFnZSBpcyB0byBiZSByZXNldC4KICAqCiAgKiBUaGlzIEFQSSBmaW5kcyBvdXQgdGhlIGNvcnJlY3Qgdm9sdGFnZSB0aGUgdm9sdGFnZSBkb21haW4gaXMgc3VwcG9zZWQKLSAqIHRvIGJlIGF0IGFuZCByZXNldHMgdGhlIHZvbHRhZ2UgdG8gdGhhdCBsZXZlbC4gU2hvdWxkIGJlIHVzZWQgZXhwZWNpYWxseQorICogdG8gYmUgYXQgYW5kIHJlc2V0cyB0aGUgdm9sdGFnZSB0byB0aGF0IGxldmVsLiBTaG91bGQgYmUgdXNlZCBlc3BlY2lhbGx5CiAgKiB3aGlsZSBkaXNhYmxpbmcgYW55IHZvbHRhZ2UgY29tcGVuc2F0aW9uIG1vZHVsZXMuCiAgKi8KIHZvaWQgb21hcF92b2x0YWdlX3Jlc2V0KHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0pCkBAIC05MTIsNyArOTExLDcgQEAKICAqIFRoaXMgQVBJIHNlYXJjaGVzIG9ubHkgdGhyb3VnaCB0aGUgbm9uLWNvbXBlbnNhdGVkIHZvbHRhZ2VzIGludCB0aGUKICAqIHZvbHRhZ2UgdGFibGUuCiAgKiBSZXR1cm5zIHBvaW50ZXIgdG8gdGhlIHZvbHRhZ2UgdGFibGUgZW50cnkgY29ycmVzcG9uZGluZyB0byB2b2x0IG9uCi0gKiBzdWNlc3MuIFJldHVybnMgLUVOT0RBVEEgaWYgbm8gdm9sdGFnZSB0YWJsZSBleGlzaXRzIGZvciB0aGUgcGFzc2VkIHZvbHRhZ2UKKyAqIHN1Y2Nlc3MuIFJldHVybnMgLUVOT0RBVEEgaWYgbm8gdm9sdGFnZSB0YWJsZSBleGlzaXRzIGZvciB0aGUgcGFzc2VkIHZvbHRhZ2UKICAqIGRvbWFpbiBvciBpZiB0aGVyZSBpcyBubyBtYXRjaGluZyBlbnRyeS4KICAqLwogc3RydWN0IG9tYXBfdm9sdF9kYXRhICpvbWFwX3ZvbHRhZ2VfZ2V0X3ZvbHRkYXRhKHN0cnVjdCB2b2x0YWdlZG9tYWluICp2b2x0ZG0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvYWRkci1tYXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9hZGRyLW1hcC5jCmluZGV4IDFhNWQ2YTAuLjVjZWFmZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9hZGRyLW1hcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9hZGRyLW1hcC5jCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKIC8qCi0gKiBUaGUgT3Jpb24gaGFzIGZ1bGx5IHByb2dyYW1hYmxlIGFkZHJlc3MgbWFwLiBUaGVyZSdzIGEgc2VwYXJhdGUgYWRkcmVzcworICogVGhlIE9yaW9uIGhhcyBmdWxseSBwcm9ncmFtbWFibGUgYWRkcmVzcyBtYXAuIFRoZXJlJ3MgYSBzZXBhcmF0ZSBhZGRyZXNzCiAgKiBtYXAgZm9yIGVhY2ggb2YgdGhlIGRldmljZSBfbWFzdGVyXyBpbnRlcmZhY2VzLCBlLmcuIENQVSwgUENJLCBQQ0llLCBVU0IsCiAgKiBHaWdhYml0IEV0aGVybmV0LCBETUEvWE9SIGVuZ2luZXMsIGV0Yy4gRWFjaCBpbnRlcmZhY2UgaGFzIGl0cyBvd24KICAqIGFkZHJlc3MgZGVjb2RlIHdpbmRvd3MgdGhhdCBhbGxvdyBpdCB0byBhY2Nlc3MgYW55IG9mIHRoZSBPcmlvbiByZXNvdXJjZXMuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvbmV0MmJpZy1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L25ldDJiaWctc2V0dXAuYwppbmRleCA0MjllY2FmLi5hNTkzMGY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvbmV0MmJpZy1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9uZXQyYmlnLXNldHVwLmMKQEAgLTE5MCw3ICsxOTAsNyBAQAogICogVGhlIHBvd2VyIGZyb250IExFRHMgKGJsdWUgYW5kIHJlZCkgYW5kIFNBVEEgcmVkIExFRHMgYXJlIGNvbnRyb2xsZWQgdmlhIGEKICAqIHNpbmdsZSBHUElPIGxpbmUgYW5kIGFyZSBjb21wYXRpYmxlIHdpdGggdGhlIGxlZHMtZ3BpbyBkcml2ZXIuCiAgKgotICogVGhlIFNBVEEgYmx1ZSBMRURzIGhhdmUgc29tZSBoYXJkd2FyZSBibGluayBjYXBhYmlsaXRpZXMgd2hpY2ggYXJlIGRldGFpbGxlZAorICogVGhlIFNBVEEgYmx1ZSBMRURzIGhhdmUgc29tZSBoYXJkd2FyZSBibGluayBjYXBhYmlsaXRpZXMgd2hpY2ggYXJlIGRldGFpbGVkCiAgKiBpbiB0aGUgZm9sbG93aW5nIGFycmF5OgogICoKICAqIFNBVEF4IGJsdWUgTEVEIHwgU0FUQXggYWN0aXZpdHkgfCBMRUQgc3RhdGUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC90czIwOS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RzMjA5LXNldHVwLmMKaW5kZXggZjBmNDNlMS4uZTZkNjQ0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RzMjA5LXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RzMjA5LXNldHVwLmMKQEAgLTM2LDcgKzM2LDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIDhNaUIgTk9SIGZsYXNoLiBUaGUgc3RydWN0IG10ZF9wYXJ0aXRpb24gaXMgbm90IGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZQotICogICAgIHBhcnRpdGlvbnMgb24gdGhlIGRldmljZSBiZWNhdXNlIHdlIHdhbnQgdG8ga2VlcCBjb21wYXRhYmlsaXR5IHdpdGgKKyAqICAgICBwYXJ0aXRpb25zIG9uIHRoZSBkZXZpY2UgYmVjYXVzZSB3ZSB3YW50IHRvIGtlZXAgY29tcGF0aWJpbGl0eSB3aXRoCiAgKiAgICAgZXhpc3RpbmcgUU5BUCBmaXJtd2FyZS4KICAqCiAgKiBMYXlvdXQgYXMgdXNlZCBieSBRTkFQOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RzNDA5LXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvdHM0MDktc2V0dXAuYwppbmRleCA5MmYzOTNmLi45ZWFjODE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvdHM0MDktc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvdHM0MDktc2V0dXAuYwpAQCAtNTYsNyArNTYsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogOE1pQiBOT1IgZmxhc2guIFRoZSBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBpcyBub3QgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlCi0gKiAgICAgcGFydGl0aW9ucyBvbiB0aGUgZGV2aWNlIGJlY2F1c2Ugd2Ugd2FudCB0byBrZWVwIGNvbXBhdGFiaWxpdHkgd2l0aAorICogICAgIHBhcnRpdGlvbnMgb24gdGhlIGRldmljZSBiZWNhdXNlIHdlIHdhbnQgdG8ga2VlcCBjb21wYXRpYmlsaXR5IHdpdGgKICAqICAgICBleGlzdGluZyBRTkFQIGZpcm13YXJlLgogICoKICAqIExheW91dCBhcyB1c2VkIGJ5IFFOQVA6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9oeDQ3MDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2h4NDcwMC5jCmluZGV4IDZkZTBhZDAuLjljZGNjYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2h4NDcwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2h4NDcwMC5jCkBAIC03MTEsNyArNzExLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBicTI0MDIyX2luaXRfZGF0YSA9IHsKIAkuY29uc3RyYWludHMgPSB7CiAJCS5tYXhfdUEgICAgICAgICA9IDUwMDAwMCwKLQkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9DVVJSRU5ULAorCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX0NVUlJFTlR8UkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCiAJfSwKIAkubnVtX2NvbnN1bWVyX3N1cHBsaWVzICA9IEFSUkFZX1NJWkUoYnEyNDAyMl9jb25zdW1lcnMpLAogCS5jb25zdW1lcl9zdXBwbGllcyAgICAgID0gYnEyNDAyMl9jb25zdW1lcnMsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCBiMDI0YThiLi5jNDYzOTUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTk5LDExICs5OSwyNCBAQAogI2RlZmluZSBHQUZSKHgpCQlHUElPX1JFRygweDU0ICsgKCgoeCkgJiAweDcwKSA+PiAyKSkKIAogCi0jZGVmaW5lIE5SX0JVSUxUSU5fR1BJTyAxMjgKKyNkZWZpbmUgTlJfQlVJTFRJTl9HUElPCQlQWEFfR1BJT19JUlFfTlVNCiAKICNkZWZpbmUgZ3Bpb190b19iYW5rKGdwaW8pCSgoZ3BpbykgPj4gNSkKICNkZWZpbmUgZ3Bpb190b19pcnEoZ3BpbykJSVJRX0dQSU8oZ3BpbykKLSNkZWZpbmUgaXJxX3RvX2dwaW8oaXJxKQlJUlFfVE9fR1BJTyhpcnEpCisKK3N0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGdwaW87CisKKwlpZiAoaXJxID09IElSUV9HUElPMCB8fCBpcnEgPT0gSVJRX0dQSU8xKQorCQlyZXR1cm4gaXJxIC0gSVJRX0dQSU8wOworCisJZ3BpbyA9IGlycSAtIFBYQV9HUElPX0lSUV9CQVNFOworCWlmIChncGlvID49IDIgJiYgZ3BpbyA8IE5SX0JVSUxUSU5fR1BJTykKKwkJcmV0dXJuIGdwaW87CisKKwlyZXR1cm4gLTE7Cit9CiAKICNpZmRlZiBDT05GSUdfQ1BVX1BYQTI2eAogLyogR1BJTzg2Lzg3Lzg4Lzg5IG9uIFBYQTI2eCBoYXZlIHRoZWlyIGRpcmVjdGlvbiBiaXRzIGluIEdQRFIyIGludmVydGVkLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggYTQyODVmYy4uMDM4NDAyNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC05Myw5ICs5Myw2IEBACiAjZGVmaW5lIEdQSU9fMl94X1RPX0lSUSh4KQkoUFhBX0dQSU9fSVJRX0JBU0UgKyAoeCkpCiAjZGVmaW5lIElSUV9HUElPKHgpCSgoKHgpIDwgMikgPyAoSVJRX0dQSU8wICsgKHgpKSA6IEdQSU9fMl94X1RPX0lSUSh4KSkKIAotI2RlZmluZSBJUlFfVE9fR1BJT18yX3goaSkJKChpKSAtIFBYQV9HUElPX0lSUV9CQVNFKQotI2RlZmluZSBJUlFfVE9fR1BJTyhpKQkoKChpKSA8IElSUV9HUElPKDIpKSA/ICgoaSkgLSBJUlFfR1BJTzApIDogSVJRX1RPX0dQSU9fMl94KGkpKQotCiAvKgogICogVGhlIGZvbGxvd2luZyBpbnRlcnJ1cHRzIGFyZSBmb3IgYm9hcmQgc3BlY2lmaWMgcHVycG9zZXMuIFNpbmNlCiAgKiB0aGUga2VybmVsIGNhbiBvbmx5IHJ1biBvbiBvbmUgbWFjaGluZSBhdCBhIHRpbWUsIHdlIGNhbiByZS11c2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHgtcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTN4eC1yZWdzLmgKaW5kZXggZTRmYjQ2Ni4uMjA3ZWNiNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTN4eC1yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTN4eC1yZWdzLmgKQEAgLTM4LDcgKzM4LDcgQEAKICNkZWZpbmUgUENNRCh4KQkJX19SRUcoMHg0MEY1MDExMCArICgoeCkgPDwgMikpCiAKIC8qCi0gKiBTbGF2ZSBQb3dlciBNYW5hZ21lbnQgVW5pdAorICogU2xhdmUgUG93ZXIgTWFuYWdlbWVudCBVbml0CiAgKi8KICNkZWZpbmUgQVNDUgkJX19SRUcoMHg0MGY0MDAwMCkJLyogQXBwbGljYXRpb24gU3Vic3lzdGVtIFBvd2VyIFN0YXR1cy9Db25maWd1cmF0aW9uICovCiAjZGVmaW5lIEFSU1IJCV9fUkVHKDB4NDBmNDAwMDQpCS8qIEFwcGxpY2F0aW9uIFN1YnN5c3RlbSBSZXNldCBTdGF0dXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC96ZXVzLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvemV1cy5oCmluZGV4IGZhYTQwOGEuLjA2NDFmMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC96ZXVzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3pldXMuaApAQCAtNjQsNyArNjQsNyBAQAogCiAvKgogICogQ1BMRCByZWdpc3RlcnM6Ci0gKiBPbmx5IDQgcmVnaXN0ZXJzLCBidXQgc3ByZWFkZWQgb3ZlciBhIDMyTUIgYWRkcmVzcyBzcGFjZS4KKyAqIE9ubHkgNCByZWdpc3RlcnMsIGJ1dCBzcHJlYWQgb3ZlciBhIDMyTUIgYWRkcmVzcyBzcGFjZS4KICAqIEJlIGdlbnRsZSwgYW5kIHJlbWFwIHRoYXQgb3ZlciAzMmtCLi4uCiAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYyBiL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMKaW5kZXggYTcyOTkzZC4uOTk4NGVmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jCkBAIC01OTksNyArNTk5LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBicTI0MDIyX2luaXRfZGF0YSA9IHsKIAkuY29uc3RyYWludHMgPSB7CiAJCS5tYXhfdUEgICAgICAgICA9IDUwMDAwMCwKLQkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9DVVJSRU5ULAorCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX0NVUlJFTlQgfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKIAl9LAogCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgID0gQVJSQVlfU0laRShicTI0MDIyX2NvbnN1bWVycyksCiAJLmNvbnN1bWVyX3N1cHBsaWVzICAgICAgPSBicTI0MDIyX2NvbnN1bWVycywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYyBiL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYwppbmRleCBkZDEzYmI2Li4yMzkyNWRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9taW9hNzAxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWlvYTcwMS5jCkBAIC00NTgsNyArNDU4LDcgQEAKIC8qCiAgKiBTdXNwZW5kL1Jlc3VtZSBib290c3RyYXAgbWFuYWdlbWVudAogICoKLSAqIE1JTyBBNzAxIHJlYm9vdCBzZXF1ZW5jZSBpcyBoaWdobHkgUk9NIGRlcGVuZGFudC4gRnJvbSB0aGUgb25lIGRpc3Nhc3NlbWJsZWQsCisgKiBNSU8gQTcwMSByZWJvb3Qgc2VxdWVuY2UgaXMgaGlnaGx5IFJPTSBkZXBlbmRlbnQuIEZyb20gdGhlIG9uZSBkaXNzYXNzZW1ibGVkLAogICogdGhpcyBzZXF1ZW5jZSBpcyBhcyBmb2xsb3dzIDoKICAqICAgLSBkaXNhYmxlcyBpbnRlcnJ1cHRzCiAgKiAgIC0gaW5pdGlhbGl6ZSBTRFJBTSAoc2VsZiByZWZyZXNoIFJBTSBpbnRvIGFjdGl2ZSBSQU0pCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCmluZGV4IDZiZGU1OTUuLmE0YWY4YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCkBAIC0yODUsNyArMjg1LDcgQEAKIAogc3RhdGljIGludCBweGEyNXhfc2V0X3dha2Uoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgb24pCiB7Ci0JaW50IGdwaW8gPSBJUlFfVE9fR1BJTyhkLT5pcnEpOworCWludCBncGlvID0gaXJxX3RvX2dwaW8oZC0+aXJxKTsKIAl1aW50MzJfdCBtYXNrID0gMDsKIAogCWlmIChncGlvID49IDAgJiYgZ3BpbyA8IDg1KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYwppbmRleCAxY2I1ZDBmLi45MDk3NTZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYwpAQCAtMzQ1LDcgKzM0NSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgcHhhMjd4X3NldF93YWtlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IG9uKQogewotCWludCBncGlvID0gSVJRX1RPX0dQSU8oZC0+aXJxKTsKKwlpbnQgZ3BpbyA9IGlycV90b19ncGlvKGQtPmlycSk7CiAJdWludDMyX3QgbWFzazsKIAogCWlmIChncGlvID49IDAgJiYgZ3BpbyA8IDEyOCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JhcnJpZXJzLmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9iYXJyaWVycy5oCmluZGV4IDBjNWQ3NDkuLjlhNzMyMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JhcnJpZXJzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYmFycmllcnMuaApAQCAtNCw1ICs0LDUgQEAKICAqIG9wZXJhdGlvbiB0byBkZWFkbG9jayB0aGUgc3lzdGVtLgogICovCiAjZGVmaW5lIG1iKCkJCWRzYigpCi0jZGVmaW5lIHJtYigpCQlkbWIoKQorI2RlZmluZSBybWIoKQkJZHNiKCkKICNkZWZpbmUgd21iKCkJCW1iKCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZG1hLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2RtYS5oCmluZGV4IGNmNjgxMzYuLmIyYjJhNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZG1hLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9kbWEuaApAQCAtMTksNyArMTksNyBAQAogI2RlZmluZSBNQVhfRE1BX1RSQU5TRkVSX1NJWkUgICAweDEwMDAwMCAvKiBEYXRhIFVuaXQgaXMgaGFsZiB3b3JkICAqLwogCiAvKiBXZSB1c2UgYHZpcnR1YWxgIGRtYSBjaGFubmVscyB0byBoaWRlIHRoZSBmYWN0IHdlIGhhdmUgb25seSBhIGxpbWl0ZWQKLSAqIG51bWJlciBvZiBETUEgY2hhbm5lbHMsIGFuZCBub3Qgb2YgYWxsIG9mIHRoZW0gKGRlcGVuZGFudCBvbiB0aGUgZGV2aWNlKQorICogbnVtYmVyIG9mIERNQSBjaGFubmVscywgYW5kIG5vdCBvZiBhbGwgb2YgdGhlbSAoZGVwZW5kZW50IG9uIHRoZSBkZXZpY2UpCiAgKiBjYW4gYmUgYXR0YWNoZWQgdG8gYW55IERNQSBzb3VyY2UuIFdlIHRoZXJlZm9yZSBsZXQgdGhlIERNQSBjb3JlIGhhbmRsZQogICogdGhlIGFsbG9jYXRpb24gb2YgaGFyZHdhcmUgY2hhbm5lbHMgdG8gY2xpZW50cy4KICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3JlZ3MtbWVtLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3JlZ3MtbWVtLmgKaW5kZXggN2Y3YzUyOS4uOTg4YTY4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLW1lbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvcmVncy1tZW0uaApAQCAtMTAxLDcgKzEwMSw3IEBACiAjZGVmaW5lIFMzQzI0MTBfQkFOS0NPTl9QTUMxNgkJKDB4MDMpCiAKIC8qIGJhbmsgY29uZmlndXJhdGlvbnMgZm9yIGJhbmtzIDAuLjcsIG5vdGUgYmFua3MKLSAqIDYgYW5kIDcgaGF2ZSBkaWZmZXJudCBjb25maWd1cmF0aW9ucyBkZXBlbmRpbmcgb24KKyAqIDYgYW5kIDcgaGF2ZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgZGVwZW5kaW5nIG9uCiAgKiB0aGUgbWVtb3J5IHR5cGUgYml0cyAqLwogCiAjZGVmaW5lIFMzQzI0MTBfQkFOS0NPTl9UYWNwMgkJKDB4MCA8PCAyKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtbjMwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYwppbmRleCA2NmY0NDQ0Li4wNzlkY2FhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYwpAQCAtMjUyLDcgKzI1Miw3IEBACiAJLmRlZl90cmlnZ2VyCT0gIiIsCiB9OwogCi0vKiBUaGlzIGlzIHRoZSBibHVlIExFRCBvbiB0aGUgZGV2aWNlLiBPcmlnaW5hbHkgdXNlZCB0byBpbmRpY2F0ZSBHUFMgYWN0aXZpdHkKKy8qIFRoaXMgaXMgdGhlIGJsdWUgTEVEIG9uIHRoZSBkZXZpY2UuIE9yaWdpbmFsbHkgdXNlZCB0byBpbmRpY2F0ZSBHUFMgYWN0aXZpdHkKICAqIGJ5IGZsYXNoaW5nLiAqLwogc3RhdGljIHN0cnVjdCBzM2MyNHh4X2xlZF9wbGF0ZGF0YSBuMzVfYmx1ZV9sZWRfcGRhdGEgPSB7CiAJLm5hbWUJCT0gImJsdWVfbGVkIiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWd0YTAyLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1ndGEwMi5jCmluZGV4IDBkYjI0MTEuLjcxNjY2MjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWd0YTAyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtZ3RhMDIuYwpAQCAtNDA5LDYgKzQwOSwxMCBAQAogCS5udW1fcmVzb3VyY2VzCT0gMCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGd0YTAyX2RmYm1jczMyMF9kZXZpY2UgPSB7CisJLm5hbWUgPSAiZGZibWNzMzIwIiwKK307CisKIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gZ3RhMDJfaTJjX2RldnNbXSBfX2luaXRkYXRhID0gewogCXsKIAkJSTJDX0JPQVJEX0lORk8oInBjZjUwNjMzIiwgMHg3MyksCkBAIC01MjMsNiArNTI3LDcgQEAKIAkmczNjX2RldmljZV9paXMsCiAJJnNhbXN1bmdfYXNvY19kbWEsCiAJJnMzY19kZXZpY2VfaTJjMCwKKwkmZ3RhMDJfZGZibWNzMzIwX2RldmljZSwKIAkmZ3RhMDJfYnV0dG9uc19kZXZpY2UsCiAJJnMzY19kZXZpY2VfYWRjLAogCSZzM2NfZGV2aWNlX3RzLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtbWluaTI0NDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW1pbmkyNDQwLmMKaW5kZXggZGZlZGM5Yy4uZGQzMTIwZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtbWluaTI0NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1taW5pMjQ0MC5jCkBAIC0xNTUsNyArMTU1LDcgQEAKIAkgKiB0aGUgc2FtZSB0aW1pbmdzLCBob3dldmVyLCBhbnl0aGluZyBzbWFsbGVyIHRoYW4gMTAyNHg3NjgKIAkgKiB3aWxsIG9ubHkgYmUgZGlzcGxheWVkIGluIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgYSAxMDI0eDc2OAogCSAqIFhHQSBvdXRwdXQgdW5sZXNzIHlvdSBhZGQgb3B0aW9uYWwgZGlwIHN3aXRjaGVzIHRvIHRoZSBzaGllbGQuCi0JICogVGhlcmVmb3JlIHRpbWluZ3MgZm9yIG90aGVyIHJlc29sdXRpb25zIGhhdmUgYmVlbiBvbW1pdGVkIGhlcmUuCisJICogVGhlcmVmb3JlIHRpbWluZ3MgZm9yIG90aGVyIHJlc29sdXRpb25zIGhhdmUgYmVlbiBvbWl0dGVkIGhlcmUuCiAJICovCiAJWzJdID0gewogCQlfTENEX0RFQ0xBUkUoCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvZG1hLmMKaW5kZXggYzM1NTg1Yy4uYjE5NzE3MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9kbWEuYwpAQCAtMzE1LDcgKzMxNSw3IEBACiAJY2FzZSBTM0MyNDEwX0RNQU9QX0ZMVVNIOgogCQlyZXR1cm4gczNjNjR4eF9kbWFfZmx1c2goY2hhbik7CiAKLQkvKiBiZWxpdmUgUEFVU0UvUkVTVU1FIGFyZSBuby1vcHMgKi8KKwkvKiBiZWxpZXZlIFBBVVNFL1JFU1VNRSBhcmUgbm8tb3BzICovCiAJY2FzZSBTM0MyNDEwX0RNQU9QX1BBVVNFOgogCWNhc2UgUzNDMjQxMF9ETUFPUF9SRVNVTUU6CiAJY2FzZSBTM0MyNDEwX0RNQU9QX1NUQVJURUQ6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3JlZ3MtZmIuaCBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvcmVncy1mYi5oCmluZGV4IDRiZTRjYzkuLjA3YWE0ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvcmVncy1mYi5oCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvcmVncy1mYi5oCkBAIC0yOSw3ICsyOSw3IEBACiAjZGVmaW5lIFdQQUxDT05fSAkJCQkJKDB4MTljKQogI2RlZmluZSBXUEFMQ09OX0wJCQkJCSgweDFhMCkKIAotLyogUGFsbGV0ZSBjb250cm8gZm9yIFdQQUwwIGFuZCBXUEFMMSBpcyB0aGUgc2FtZSBhcyBpbiBTM0M2NHh4LCBidXQKKy8qIFBhbGV0dGUgY29udHJvbCBmb3IgV1BBTDAgYW5kIFdQQUwxIGlzIHRoZSBzYW1lIGFzIGluIFMzQzY0eHgsIGJ1dAogICogZGlmZmVyZW50IGZvciBXUEFMMi00CiAgKi8KIC8qIEluIFdQQUxDT05fTCAoYWthIFdQQUxDT04pICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvc2V0dXAtc2RoY2kuYyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9zZXR1cC1zZGhjaS5jCmluZGV4IGYxNjk0NmUuLmJlMjU4NzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9zZXR1cC1zZGhjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9zZXR1cC1zZGhjaS5jCkBAIC00MCw3ICs0MCw3IEBACiB7CiAJdTMyIGN0cmwyLCBjdHJsMzsKIAotCS8qIGRvbid0IG5lZWQgdG8gYWx0ZXIgYW55dGhpbmcgYWNvcmRpbmcgdG8gY2FyZC10eXBlICovCisJLyogZG9uJ3QgbmVlZCB0byBhbHRlciBhbnl0aGluZyBhY2NvcmRpbmcgdG8gY2FyZC10eXBlICovCiAKIAl3cml0ZWwoUzNDNjRYWF9TREhDSV9DT05UUk9MNF9EUklWRV85bUEsIHIgKyBTM0M2NFhYX1NESENJX0NPTlRST0w0KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCAxZjRiNTk1Li5hNWExZTMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMTgsNyArMTgsNyBAQAogI2RlZmluZSBncGlvX2NhbnNsZWVwCV9fZ3Bpb19jYW5zbGVlcAogI2RlZmluZSBncGlvX3RvX2lycQlfX2dwaW9fdG9faXJxCiAKLS8qIFByYWN0aWNhbGx5LCBHUElPIGJhbmtzIHVwdG8gTVAwMyBhcmUgdGhlIGNvbmZpZ3VyYWJsZSBncGlvIGJhbmtzICovCisvKiBQcmFjdGljYWxseSwgR1BJTyBiYW5rcyB1cCB0byBNUDAzIGFyZSB0aGUgY29uZmlndXJhYmxlIGdwaW8gYmFua3MgKi8KIAogLyogR1BJTyBiYW5rIHNpemVzICovCiAjZGVmaW5lIFM1UFYyMTBfR1BJT19BMF9OUgkoOCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9zZXR1cC1zZGhjaS1ncGlvLmMgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvc2V0dXAtc2RoY2ktZ3Bpby5jCmluZGV4IDc0Njc3N2QuLjNlM2FjMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9zZXR1cC1zZGhjaS1ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NldHVwLXNkaGNpLWdwaW8uYwpAQCAtMzIsMTAgKzMyLDEwIEBACiAKIAlzd2l0Y2ggKHdpZHRoKSB7CiAJY2FzZSA4OgotCQkvKiBHUEcxWzM6Nl0gc3BlY2lhbC1mdW50aW9uIDMgKi8KKwkJLyogR1BHMVszOjZdIHNwZWNpYWwtZnVuY3Rpb24gMyAqLwogCQlzM2NfZ3Bpb19jZmdyYW5nZV9ub3B1bGwoUzVQVjIxMF9HUEcxKDMpLCA0LCBTM0NfR1BJT19TRk4oMykpOwogCWNhc2UgNDoKLQkJLyogR1BHMFszOjZdIHNwZWNpYWwtZnVudGlvbiAyICovCisJCS8qIEdQRzBbMzo2XSBzcGVjaWFsLWZ1bmN0aW9uIDIgKi8KIAkJczNjX2dwaW9fY2ZncmFuZ2Vfbm9wdWxsKFM1UFYyMTBfR1BHMCgzKSwgNCwgUzNDX0dQSU9fU0ZOKDIpKTsKIAlkZWZhdWx0OgogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9zZXR1cC1zZGhjaS5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NldHVwLXNkaGNpLmMKaW5kZXggYzMyZTIwMi4uYTgzYjZjOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NldHVwLXNkaGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NldHVwLXNkaGNpLmMKQEAgLTM4LDcgKzM4LDcgQEAKIHsKIAl1MzIgY3RybDIsIGN0cmwzOwogCi0JLyogZG9uJ3QgbmVlZCB0byBhbHRlciBhbnl0aGluZyBhY29yZGluZyB0byBjYXJkLXR5cGUgKi8KKwkvKiBkb24ndCBuZWVkIHRvIGFsdGVyIGFueXRoaW5nIGFjY29yZGluZyB0byBjYXJkLXR5cGUgKi8KIAogCXdyaXRlbChTM0M2NFhYX1NESENJX0NPTlRST0w0X0RSSVZFXzltQSwgciArIFMzQzY0WFhfU0RIQ0lfQ09OVFJPTDQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlCmluZGV4IGU2OTc2OTEuLjQxMjUyZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlCkBAIC01MCw3ICs1MCw3IEBACiAjIExFRHMgc3VwcG9ydAogb2JqLSQoQ09ORklHX0xFRFMpICs9ICQobGVkLXkpCiAKLSMgTWlzY2VsYW5lb3VzIGZ1bmN0aW9ucworIyBNaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucwogb2JqLSQoQ09ORklHX1BNKQkJCSs9IHBtLm8gc2xlZXAubwogb2JqLSQoQ09ORklHX1NBMTEwMF9TU1ApCQkrPSBzc3AubwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jcHUtc2ExMTAwLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jcHUtc2ExMTAwLmMKaW5kZXggMDdkNGU4Yi4uYWFhOGFjZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvY3B1LXNhMTEwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NwdS1zYTExMDAuYwpAQCAtNjgsNyArNjgsNyBAQAogICogY2xvY2sgY2hhbmdlIGluIFJPTSBhbmQganVtcCB0byB0aGF0IGNvZGUgZnJvbSB0aGUga2VybmVsLiBUaGUgbWFpbgogICogZGlzYWR2YW50YWdlIGlzIHRoYXQgdGhlIFJPTSBoYXMgdG8gYmUgbW9kaWZpZWQsIHdoaWNoIGlzIG5vdAogICogcG9zc2libGUgb24gYWxsIFNBLTExMDAgcGxhdGZvcm1zLiBBbm90aGVyIGRpc2FkdmFudGFnZSBpcyB0aGF0Ci0gKiBqdW1waW5nIHRvIFJPTSBtYWtlcyBjbG9jayBzd2l0Y2hpbmcgdW5lY2Vzc2FyeSBjb21wbGljYXRlZC4KKyAqIGp1bXBpbmcgdG8gUk9NIG1ha2VzIGNsb2NrIHN3aXRjaGluZyB1bm5lY2Vzc2FyeSBjb21wbGljYXRlZC4KICAqCiAgKiBUaGUgaWRlYSBiZWhpbmQgdGhpcyBkcml2ZXIgaXMgdGhhdCB0aGUgbWVtb3J5IGNvbmZpZ3VyYXRpb24gY2FuIGJlCiAgKiBjaGFuZ2VkIHdoaWxlIHJ1bm5pbmcgZnJvbSBEUkFNIChldmVuIHdpdGggaW50ZXJydXB0cyB0dXJuZWQgb24hKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL1NBLTExMDAuaCBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9TQS0xMTAwLmgKaW5kZXggNGY3ZWEwMS4uYmFlODI5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL1NBLTExMDAuaAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvU0EtMTEwMC5oCkBAIC0xNzk0LDcgKzE3OTQsNyBAQAogICAgICAgICAgICAgICAgIAkoRERBUl9EZXZSZCArIEREQVJfQnJzdDQgKyBEREFSXzE2Qml0RGV2ICsgXAogICAgICAgICAgICAgICAgIAkgRERBUl9TZXI0U1NQUmMgKyBEREFSX0RldkFkZCAoX19QUkVHKFNlcjRTU0RSKSkpCiAKLSNkZWZpbmUgRENTUl9SVU4JMHgwMDAwMDAwMQkvKiBETUEgUlVOaW5nICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERDU1JfUlVOCTB4MDAwMDAwMDEJLyogRE1BIHJ1bm5pbmcgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBEQ1NSX0lFIAkweDAwMDAwMDAyCS8qIERNQSBJbnRlcnJ1cHQgRW5hYmxlICAgICAgICAgICAgKi8KICNkZWZpbmUgRENTUl9FUlJPUgkweDAwMDAwMDA0CS8qIERNQSBFUlJPUiAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgRENTUl9ET05FQQkweDAwMDAwMDA4CS8qIERPTkUgRE1BIHRyYW5zZmVyIGJ1ZmZlciBBICAgICAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2pvcm5hZGE3MjBfc3NwLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9qb3JuYWRhNzIwX3NzcC5jCmluZGV4IDlkNDkwYzYuLmY1MGIwMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2pvcm5hZGE3MjBfc3NwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvam9ybmFkYTcyMF9zc3AuYwpAQCAtMjksNyArMjksNyBAQAogLyoqCiAgKiBqb3JuYWRhX3NzcF9yZXZlcnNlIC0gcmV2ZXJzZXMgaW5wdXQgYnl0ZQogICoKLSAqIHdlIG5lZWQgdG8gcmV2ZXJzZSBhbGwgZGF0YSB3ZSByZWNpZXZlIGZyb20gdGhlIG1jdSBkdWUgdG8gaXRzIHBoeXNpY2FsIGxvY2F0aW9uCisgKiB3ZSBuZWVkIHRvIHJldmVyc2UgYWxsIGRhdGEgd2UgcmVjZWl2ZSBmcm9tIHRoZSBtY3UgZHVlIHRvIGl0cyBwaHlzaWNhbCBsb2NhdGlvbgogICogcmV0dXJucyA6IDAxMTEwMTExIC0+IDExMTAxMTEwCiAgKi8KIHU4IGlubGluZSBqb3JuYWRhX3NzcF9yZXZlcnNlKHU4IGJ5dGUpCkBAIC0xNzksNyArMTc5LDcgQEAKIAogc3RhdGljIGludCBqb3JuYWRhX3NzcF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCS8qIE5vdGUgdGhhdCB0aGlzIGRvZXNudCBhY3R1YWxseSByZW1vdmUgdGhlIGRyaXZlciwgc2luY2UgdGhlcmVzIG5vdGhpbmcgdG8gcmVtb3ZlCisJLyogTm90ZSB0aGF0IHRoaXMgZG9lc24ndCBhY3R1YWxseSByZW1vdmUgdGhlIGRyaXZlciwgc2luY2UgdGhlcmVzIG5vdGhpbmcgdG8gcmVtb3ZlCiAJICogSXQganVzdCBtYWtlcyBzdXJlIGV2ZXJ5dGhpbmcgaXMgdHVybmVkIG9mZiAqLwogCUdQU1IgPSBHUElPX0dQSU8yNTsKIAlzc3BfZXhpdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcDRldmIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXA0ZXZiLmMKaW5kZXggNzgzYjY2Zi4uMWUzNWZhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcDRldmIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwNGV2Yi5jCkBAIC05NDcsNyArOTQ3LDcgQEAKIAkmYXA0ZXZiX2NhbWVyYSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGhkbWlfaW5pdF9wbV9jbG9jayh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGhkbWlfaW5pdF9wbV9jbG9jayh2b2lkKQogewogCXN0cnVjdCBjbGsgKmhkbWlfaWNrID0gY2xrX2dldCgmaGRtaV9kZXZpY2UuZGV2LCAiaWNrIik7CiAJaW50IHJldDsKQEAgLTk4OCwyMCArOTg4LDE1IEBACiAJcHJfZGVidWcoIlBMTEMyIHNldCBmcmVxdWVuY3kgJWx1XG4iLCByYXRlKTsKIAogCXJldCA9IGNsa19zZXRfcGFyZW50KGhkbWlfaWNrLCAmc2g3MzcyX3BsbGMyX2Nsayk7Ci0JaWYgKHJldCA8IDApIHsKKwlpZiAocmV0IDwgMCkKIAkJcHJfZXJyKCJDYW5ub3Qgc2V0IEhETUkgcGFyZW50OiAlZFxuIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQogCiBvdXQ6CiAJaWYgKCFJU19FUlIoaGRtaV9pY2spKQogCQljbGtfcHV0KGhkbWlfaWNrKTsKLQlyZXR1cm4gcmV0OwogfQogCi1kZXZpY2VfaW5pdGNhbGwoaGRtaV9pbml0X3BtX2Nsb2NrKTsKLQotc3RhdGljIGludCBfX2luaXQgZnNpX2luaXRfcG1fY2xvY2sodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBmc2lfaW5pdF9wbV9jbG9jayh2b2lkKQogewogCXN0cnVjdCBjbGsgKmZzaWFfaWNrOwogCWludCByZXQ7CkBAIC0xMDEwLDcgKzEwMDUsNyBAQAogCWlmIChJU19FUlIoZnNpYV9pY2spKSB7CiAJCXJldCA9IFBUUl9FUlIoZnNpYV9pY2spOwogCQlwcl9lcnIoIkNhbm5vdCBnZXQgRlNJIElDSzogJWRcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7CisJCXJldHVybjsKIAl9CiAKIAlyZXQgPSBjbGtfc2V0X3BhcmVudChmc2lhX2ljaywgJnNoNzM3Ml9mc2lhY2tfY2xrKTsKQEAgLTEwMTgsMTAgKzEwMTMsNyBAQAogCQlwcl9lcnIoIkNhbm5vdCBzZXQgRlNJLUEgcGFyZW50OiAlZFxuIiwgcmV0KTsKIAogCWNsa19wdXQoZnNpYV9pY2spOwotCi0JcmV0dXJuIHJldDsKIH0KLWRldmljZV9pbml0Y2FsbChmc2lfaW5pdF9wbV9jbG9jayk7CiAKIC8qCiAgKiBGSVhNRSAhIQpAQCAtMTM0OCw2ICsxMzQwLDkgQEAKIAlfX3Jhd193cml0ZWwoc3JjcjQgJiB+KDEgPDwgMTMpLCBTUkNSNCk7CiAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhhcDRldmJfZGV2aWNlcywgQVJSQVlfU0laRShhcDRldmJfZGV2aWNlcykpOworCisJaGRtaV9pbml0X3BtX2Nsb2NrKCk7CisJZnNpX2luaXRfcG1fY2xvY2soKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGFwNGV2Yl90aW1lcl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hY2tlcmVsLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hY2tlcmVsLmMKaW5kZXggODE4NGQ0ZC4uN2RhMmNhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYWNrZXJlbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFja2VyZWwuYwpAQCAtNDIzLDcgKzQyMyw3IEBACiAJLm5hbWUJCT0gInNoX2ZzaTJfYl9oZG1pIiwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGhkbWlfaW5pdF9wbV9jbG9jayh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGhkbWlfaW5pdF9wbV9jbG9jayh2b2lkKQogewogCXN0cnVjdCBjbGsgKmhkbWlfaWNrID0gY2xrX2dldCgmaGRtaV9kZXZpY2UuZGV2LCAiaWNrIik7CiAJaW50IHJldDsKQEAgLTQ2NywxNyArNDY3LDEzIEBACiAJcHJfZGVidWcoIlBMTEMyIHNldCBmcmVxdWVuY3kgJWx1XG4iLCByYXRlKTsKIAogCXJldCA9IGNsa19zZXRfcGFyZW50KGhkbWlfaWNrLCAmc2g3MzcyX3BsbGMyX2Nsayk7Ci0JaWYgKHJldCA8IDApIHsKKwlpZiAocmV0IDwgMCkKIAkJcHJfZXJyKCJDYW5ub3Qgc2V0IEhETUkgcGFyZW50OiAlZFxuIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQogCiBvdXQ6CiAJaWYgKCFJU19FUlIoaGRtaV9pY2spKQogCQljbGtfcHV0KGhkbWlfaWNrKTsKLQlyZXR1cm4gcmV0OwogfQotZGV2aWNlX2luaXRjYWxsKGhkbWlfaW5pdF9wbV9jbG9jayk7CiAKIC8qIFVTQjEgKEhvc3QpICovCiBzdGF0aWMgdm9pZCB1c2IxX2hvc3RfcG9ydF9wb3dlcihpbnQgcG9ydCwgaW50IHBvd2VyKQpAQCAtMTIxOCw2ICsxMjE0LDggQEAKIAlzaDczNzJfYWRkX3N0YW5kYXJkX2RldmljZXMoKTsKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG1hY2tlcmVsX2RldmljZXMsIEFSUkFZX1NJWkUobWFja2VyZWxfZGV2aWNlcykpOworCisJaGRtaV9pbml0X3BtX2Nsb2NrKCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBtYWNrZXJlbF90aW1lcl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9tbWMuaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL21tYy5oCmluZGV4IGUxMTU2MGEuLjIxYTU5ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL21tYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL21tYy5oCkBAIC05LDcgKzksNyBAQAogCiAjaWZkZWYgQ09ORklHX01BQ0hfQVA0RVZCCiAjaW5jbHVkZSAibWFjaC9tbWMtYXA0ZWIuaCIKLSNlbGlmIENPTkZJR19NQUNIX01BQ0tFUkVMCisjZWxpZiBkZWZpbmVkKENPTkZJR19NQUNIX01BQ0tFUkVMKQogI2luY2x1ZGUgIm1hY2gvbW1jLW1hY2tlcmVsLmgiCiAjZWxzZQogI2Vycm9yICJ1bnN1cHBvcnRlZCBib2FyZC4iCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC96Ym9vdC5oIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvemJvb3QuaAppbmRleCA2ZDZhMjA1Li45MzIwYWZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC96Ym9vdC5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3pib290LmgKQEAgLTEzLDcgKzEzLDcgQEAKICNpZmRlZiBDT05GSUdfTUFDSF9BUDRFVkIKICNkZWZpbmUgTUFDSF9UWVBFCU1BQ0hfVFlQRV9BUDRFVkIKICNpbmNsdWRlICJtYWNoL2hlYWQtYXA0ZXZiLnR4dCIKLSNlbGlmIENPTkZJR19NQUNIX01BQ0tFUkVMCisjZWxpZiBkZWZpbmVkKENPTkZJR19NQUNIX01BQ0tFUkVMKQogI2RlZmluZSBNQUNIX1RZUEUJTUFDSF9UWVBFX01BQ0tFUkVMCiAjaW5jbHVkZSAibWFjaC9oZWFkLW1hY2tlcmVsLnR4dCIKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9kbWEuYwppbmRleCBlOTQ1YWUyLi5mNGVmNWViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvZG1hLmMKQEAgLTIyMyw3ICsyMjMsNyBAQAogCSAqICAtIENoYW5nZSB0aGUgc291cmNlIHNlbGVjdG9yIHRvIGludmFsaWQgdG8gc3RvcCB0aGUgRE1BIGZyb20KIAkgKiAgICBGSUZPIHRvIG1lbW9yeS4KIAkgKiAgLSBSZWFkIHRoZSBzdGF0dXMgcmVnaXN0ZXIgdG8ga25vdyB0aGUgbnVtYmVyIG9mIHBlbmRpbmcKLQkgKiAgICBieXRlcyB0byBiZSB0cmFuc2ZlcmVkLgorCSAqICAgIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkLgogCSAqICAtIEZpbmFsbHkgc3RvcCBvciBwcm9ncmFtIHRoZSBETUEgdG8gdGhlIG5leHQgYnVmZmVyIGluIHRoZQogCSAqICAgIGxpc3QuCiAJICovCkBAIC0yNDQsNyArMjQ0LDcgQEAKIAlpZiAoc3RhdHVzICYgU1RBX0JVU1kpCiAJCXJlcS0+Ynl0ZXNfdHJhbnNmZXJyZWQgLT0gdG9fdHJhbnNmZXI7CiAKLQkvKiBJbiBjb250aW5vdXMgdHJhbnNmZXIgbW9kZSwgRE1BIG9ubHkgdHJhY2tzIHRoZSBjb3VudCBvZiB0aGUKKwkvKiBJbiBjb250aW51b3VzIHRyYW5zZmVyIG1vZGUsIERNQSBvbmx5IHRyYWNrcyB0aGUgY291bnQgb2YgdGhlCiAJICogaGFsZiBETUEgYnVmZmVyLiBTbywgaWYgdGhlIERNQSBhbHJlYWR5IGZpbmlzaGVkIGhhbGYgdGhlIERNQQogCSAqIHRoZW4gYWRkIHRoZSBoYWxmIGJ1ZmZlciB0byB0aGUgY29tcGxldGVkIGNvdW50LgogCSAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtdGVncmEvZ3Bpby5jCmluZGV4IDc2YTNmNjUuLjY1YTFhYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvZ3Bpby5jCkBAIC0yNTcsNyArMjU3LDggQEAKIHZvaWQgdGVncmFfZ3Bpb19yZXN1bWUodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBiLCBwLCBpOworCWludCBiOworCWludCBwOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCkBAIC0yODAsNyArMjgxLDggQEAKIHZvaWQgdGVncmFfZ3Bpb19zdXNwZW5kKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgYiwgcCwgaTsKKwlpbnQgYjsKKwlpbnQgcDsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlmb3IgKGIgPSAwOyBiIDwgQVJSQVlfU0laRSh0ZWdyYV9ncGlvX2JhbmtzKTsgYisrKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9iYXJyaWVycy5oIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvYmFycmllcnMuaAppbmRleCBjYzExNTE3Li40MjViNDJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9iYXJyaWVycy5oCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2JhcnJpZXJzLmgKQEAgLTIzLDcgKzIzLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9vdXRlcmNhY2hlLmg+CiAKLSNkZWZpbmUgcm1iKCkJCWRtYigpCisjZGVmaW5lIHJtYigpCQlkc2IoKQogI2RlZmluZSB3bWIoKQkJZG8geyBkc2IoKTsgb3V0ZXJfc3luYygpOyB9IHdoaWxlICgwKQogI2RlZmluZSBtYigpCQl3bWIoKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2RtYS5oCmluZGV4IDM5MDExYmQuLmQwMTMyZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2RtYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2RtYS5oCkBAIC05MiwxMSArOTIsMTEgQEAKIAkvKiAgVGhpcyBpcyBhIGNhbGxlZCBmcm9tIHRoZSBETUEgSVNSIGNvbnRleHQgd2hlbiB0aGUgRE1BIGlzIHN0aWxsIGluCiAJICogIHByb2dyZXNzIGFuZCBpcyBhY3RpdmVseSBmaWxsaW5nIHNhbWUgYnVmZmVyLgogCSAqCi0JICogIEluIGNhc2Ugb2YgY29udGlub3VzIG1vZGUgcmVjZWl2ZSwgdGhpcyB0aHJlc2hvbGQgaXMgMS8yIHRoZSBidWZmZXIKKwkgKiAgSW4gY2FzZSBvZiBjb250aW51b3VzIG1vZGUgcmVjZWl2ZSwgdGhpcyB0aHJlc2hvbGQgaXMgMS8yIHRoZSBidWZmZXIKIAkgKiAgc2l6ZS4gSW4gb3RoZXIgY2FzZXMsIHRoaXMgd2lsbCBub3QgZXZlbiBiZSBjYWxsZWQgYXMgdGhlcmUgaXMgbm8KIAkgKiAgaGFyZHdhcmUgc3VwcG9ydCBmb3IgaXQuCiAJICoKLQkgKiBJbiB0aGUgY2FzZSBvZiBjb250aW5vdXMgbW9kZSByZWNlaXZlLCBpZiB0aGVyZSBpcyBuZXh0IHJlcSBhbHJlYWR5CisJICogSW4gdGhlIGNhc2Ugb2YgY29udGludW91cyBtb2RlIHJlY2VpdmUsIGlmIHRoZXJlIGlzIG5leHQgcmVxIGFscmVhZHkKIAkgKiBxdWV1ZWQsIERNQSBwcm9ncmFtcyB0aGUgSFcgdG8gdXNlIHRoYXQgcmVxIHdoZW4gdGhpcyByZXEgaXMKIAkgKiBjb21wbGV0ZWQuIElmIHRoZXJlIGlzIG5vICJuZXh0IHJlcSIgcXVldWVkLCB0aGVuIERNQSBJU1IgZG9lc24ndCBkbwogCSAqIGFueXRoaW5nIGJlZm9yZSBjYWxsaW5nIHRoaXMgY2FsbGJhY2suCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL3RlZ3JhMl9jbG9ja3MuYyBiL2FyY2gvYXJtL21hY2gtdGVncmEvdGVncmEyX2Nsb2Nrcy5jCmluZGV4IDZkN2M0ZWUuLjQ0NTk0NzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvdGVncmEyX2Nsb2Nrcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvdGVncmEyX2Nsb2Nrcy5jCkBAIC0xMzYyLDE0ICsxMzYyLDE1IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OworCWxvbmcgbmV3X3JhdGUgPSByYXRlOwogCi0JcmF0ZSA9IGNsa19yb3VuZF9yYXRlKGMtPnBhcmVudCwgcmF0ZSk7Ci0JaWYgKHJhdGUgPCAwKQotCQlyZXR1cm4gcmF0ZTsKKwluZXdfcmF0ZSA9IGNsa19yb3VuZF9yYXRlKGMtPnBhcmVudCwgbmV3X3JhdGUpOworCWlmIChuZXdfcmF0ZSA8IDApCisJCXJldHVybiBuZXdfcmF0ZTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjLT5wYXJlbnQtPnNwaW5sb2NrLCBmbGFncyk7CiAKLQljLT51LnNoYXJlZF9idXNfdXNlci5yYXRlID0gcmF0ZTsKKwljLT51LnNoYXJlZF9idXNfdXNlci5yYXRlID0gbmV3X3JhdGU7CiAJcmV0ID0gdGVncmFfY2xrX3NoYXJlZF9idXNfdXBkYXRlKGMtPnBhcmVudCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjLT5wYXJlbnQtPnNwaW5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtdTMwMC9jbG9jay5jCmluZGV4IGZhYmNjNDkuLjU1MzVkZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9jbG9jay5jCkBAIC0yNjMsNyArMjYzLDcgQEAKIAl2YWwgPSByZWFkdyhVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX0NDUik7CiAJdmFsICY9IH5VMzAwX1NZU0NPTl9DQ1JfSTJTMF9VU0VfVkNYTzsKIAl3cml0ZXcodmFsLCBVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX0NDUik7Ci0JLyogRGVhY3RpdmF0ZSBWQ1hPIGlmIG5vb25lIGVsc2UgaXMgdXNpbmcgVkNYTyAqLworCS8qIERlYWN0aXZhdGUgVkNYTyBpZiBubyBvbmUgZWxzZSBpcyB1c2luZyBWQ1hPICovCiAJaWYgKCEodmFsICYgVTMwMF9TWVNDT05fQ0NSX0kyUzFfVVNFX1ZDWE8pKQogCQl2YWwgJj0gflUzMDBfU1lTQ09OX0NDUl9UVVJOX1ZDWE9fT047CiAJd3JpdGV3KHZhbCwgVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9DQ1IpOwpAQCAtMjgzLDcgKzI4Myw3IEBACiAJdmFsID0gcmVhZHcoVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9DQ1IpOwogCXZhbCAmPSB+VTMwMF9TWVNDT05fQ0NSX0kyUzFfVVNFX1ZDWE87CiAJd3JpdGV3KHZhbCwgVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9DQ1IpOwotCS8qIERlYWN0aXZhdGUgVkNYTyBpZiBub29uZSBlbHNlIGlzIHVzaW5nIFZDWE8gKi8KKwkvKiBEZWFjdGl2YXRlIFZDWE8gaWYgbm8gb25lIGVsc2UgaXMgdXNpbmcgVkNYTyAqLwogCWlmICghKHZhbCAmIFUzMDBfU1lTQ09OX0NDUl9JMlMwX1VTRV9WQ1hPKSkKIAkJdmFsICY9IH5VMzAwX1NZU0NPTl9DQ1JfVFVSTl9WQ1hPX09OOwogCXdyaXRldyh2YWwsIFUzMDBfU1lTQ09OX1ZCQVNFICsgVTMwMF9TWVNDT05fQ0NSKTsKQEAgLTY0OSw3ICs2NDksNyBAQAogICovCiBsb25nIGNsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewotCS8qIFRPRE86IGdldCBhcHJvcHJpYXRlIHN3aXRjaGVzIGZvciBFTUlGQ0xLLCBBSEJDTEsgYW5kIE1DTEsgKi8KKwkvKiBUT0RPOiBnZXQgYXBwcm9wcmlhdGUgc3dpdGNoZXMgZm9yIEVNSUZDTEssIEFIQkNMSyBhbmQgTUNMSyAqLwogCS8qIEVsc2UgZGVmYXVsdCB0byBmaXhlZCB2YWx1ZSAqLwogCiAJaWYgKGNsay0+cm91bmRfcmF0ZSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAuYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLmMKaW5kZXggZGM4NzQ2ZC4uNmUxOTA3ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAuYwpAQCAtNTIsNyArNTIsNyBAQAogCSAqIG9uIHZhbHVlIHByZXNlbnQgaW4gR3Bpb1NlbDEgdG8gR3Bpb1NlbDYgYW5kIEFsdGVybmF0RnVuY3Rpb24KIAkgKiByZWdpc3Rlci4gVGhpcyBpcyB0aGUgYXJyYXkgb2YgNyBjb25maWd1cmF0aW9uIHNldHRpbmdzLgogCSAqIE9uZSBoYXMgdG8gY29tcGlsZSB0aW1lIGRlY2lkZSB0aGVzZSBzZXR0aW5ncy4gQmVsb3cgaXMgdGhlCi0JICogZXhwbGFpbmF0aW9uIG9mIHRoZXNlIHNldHRpbmcKKwkgKiBleHBsYW5hdGlvbiBvZiB0aGVzZSBzZXR0aW5nCiAJICogR3Bpb1NlbDEgPSAweDAwID0+IFBpbnMgR1BJTzEgdG8gR1BJTzggYXJlIG5vdCB1c2VkIGFzIEdQSU8KIAkgKiBHcGlvU2VsMiA9IDB4MUUgPT4gUGlucyBHUElPMTAgdG8gR1BJTzEzIGFyZSBjb25maWd1cmVkIGFzIEdQSU8KIAkgKiBHcGlvU2VsMyA9IDB4ODAgPT4gUGluIEdQSU8yNCBpcyBjb25maWd1cmVkIGFzIEdQSU8KQEAgLTE3OCwxNiArMTc4LDE1IEBACiAJCS5pcnEJCT0gTk9NQURJS19HUElPX1RPX0lSUSgyMTcpLAogCQkucGxhdGZvcm1fZGF0YSAgPSAmbW9wNTAwX3RjMzU4OTJfZGF0YSwKIAl9LAotfTsKLQotLyogSTJDMCBkZXZpY2VzIG9ubHkgYXZhaWxhYmxlIHByaW9yIHRvIEhSRUZ2NjAgKi8KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBtb3A1MDBfaTJjMF9vbGRfZGV2aWNlc1tdID0geworCS8qIEkyQzAgZGV2aWNlcyBvbmx5IGF2YWlsYWJsZSBwcmlvciB0byBIUkVGdjYwICovCiAJewogCQlJMkNfQk9BUkRfSU5GTygidHBzNjEwNTIiLCAweDMzKSwKIAkJLnBsYXRmb3JtX2RhdGEgID0gJm1vcDUwMF90cHM2MTA1Ml9kYXRhLAogCX0sCiB9OwogCisjZGVmaW5lIE5VTV9QUkVfVjYwX0kyQzBfREVWSUNFUyAxCisKIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBtb3A1MDBfaTJjMl9kZXZpY2VzW10gPSB7CiAJewogCQkvKiBscDU1MjEgTEVEIGRyaXZlciwgMXN0IGRldmljZSAqLwpAQCAtNDI1LDYgKzQyNCw4IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBtb3A1MDBfaW5pdF9tYWNoaW5lKHZvaWQpCiB7CisJaW50IGkyYzBfZGV2czsKKwogCS8qCiAJICogVGhlIEhSRUZ2NjAgYm9hcmQgcmVtb3ZlZCBhIEdQSU8gZXhwYW5kZXIgYW5kIHJvdXRlZAogCSAqIGFsbCB0aGVzZSBHUElPIHBpbnMgdG8gdGhlIGludGVybmFsIEdQSU8gY29udHJvbGxlcgpAQCAtNDQ4LDExICs0NDksMTEgQEAKIAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYWI4NTAwX2RldmljZSk7CiAKLQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBtb3A1MDBfaTJjMF9kZXZpY2VzLAotCQkJCUFSUkFZX1NJWkUobW9wNTAwX2kyYzBfZGV2aWNlcykpOwotCWlmICghbWFjaGluZV9pc19ocmVmdjYwKCkpCi0JCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIG1vcDUwMF9pMmMwX29sZF9kZXZpY2VzLAotCQkJCQlBUlJBWV9TSVpFKG1vcDUwMF9pMmMwX29sZF9kZXZpY2VzKSk7CisJaTJjMF9kZXZzID0gQVJSQVlfU0laRShtb3A1MDBfaTJjMF9kZXZpY2VzKTsKKwlpZiAobWFjaGluZV9pc19ocmVmdjYwKCkpCisJCWkyYzBfZGV2cyAtPSBOVU1fUFJFX1Y2MF9JMkMwX0RFVklDRVM7CisKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBtb3A1MDBfaTJjMF9kZXZpY2VzLCBpMmMwX2RldnMpOwogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDIsIG1vcDUwMF9pMmMyX2RldmljZXMsCiAJCQkJQVJSQVlfU0laRShtb3A1MDBfaTJjMl9kZXZpY2VzKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9kYjg1MDAtcmVncy5oIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvZGI4NTAwLXJlZ3MuaAppbmRleCAwZmVmYjM0Li4xNjY0N2IyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9kYjg1MDAtcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2RiODUwMC1yZWdzLmgKQEAgLTU4LDcgKzU4LDcgQEAKICNkZWZpbmUgVTg1MDBfR1BJTzJfQkFTRQkoVTg1MDBfUEVSMl9CQVNFICsgMHhFMDAwKQogI2RlZmluZSBVODUwMF9HUElPM19CQVNFCShVODUwMF9QRVI1X0JBU0UgKyAweDFFMDAwKQogCi0vKiBwZXI3IGJhc2UgYWRkcmVzc2VzcyAqLworLyogcGVyNyBiYXNlIGFkZHJlc3NlcyAqLwogI2RlZmluZSBVODUwMF9DUl9CQVNFX0VECShVODUwMF9QRVI3X0JBU0VfRUQgKyAweDgwMDApCiAjZGVmaW5lIFU4NTAwX01UVTBfQkFTRV9FRAkoVTg1MDBfUEVSN19CQVNFX0VEICsgMHhhMDAwKQogI2RlZmluZSBVODUwMF9NVFUxX0JBU0VfRUQJKFU4NTAwX1BFUjdfQkFTRV9FRCArIDB4YjAwMCkKQEAgLTY4LDcgKzY4LDcgQEAKICNkZWZpbmUgVTg1MDBfVUFSVDBfQkFTRQkoVTg1MDBfUEVSMV9CQVNFICsgMHgwMDAwKQogI2RlZmluZSBVODUwMF9VQVJUMV9CQVNFCShVODUwMF9QRVIxX0JBU0UgKyAweDEwMDApCiAKLS8qIHBlcjYgYmFzZSBhZGRyZXNzZXNzICovCisvKiBwZXI2IGJhc2UgYWRkcmVzc2VzICovCiAjZGVmaW5lIFU4NTAwX1JOR19CQVNFCQkoVTg1MDBfUEVSNl9CQVNFICsgMHgwMDAwKQogI2RlZmluZSBVODUwMF9QS0FfQkFTRQkJKFU4NTAwX1BFUjZfQkFTRSArIDB4MTAwMCkKICNkZWZpbmUgVTg1MDBfUEtBTV9CQVNFCQkoVTg1MDBfUEVSNl9CQVNFICsgMHgyMDAwKQpAQCAtNzksMTEgKzc5LDExIEBACiAjZGVmaW5lIFU4NTAwX0NSWVBUTzFfQkFTRQkoVTg1MDBfUEVSNl9CQVNFICsgMHhiMDAwKQogI2RlZmluZSBVODUwMF9DTEtSU1Q2X0JBU0UJKFU4NTAwX1BFUjZfQkFTRSArIDB4ZjAwMCkKIAotLyogcGVyNSBiYXNlIGFkZHJlc3Nlc3MgKi8KKy8qIHBlcjUgYmFzZSBhZGRyZXNzZXMgKi8KICNkZWZpbmUgVTg1MDBfVVNCT1RHX0JBU0UJKFU4NTAwX1BFUjVfQkFTRSArIDB4MDAwMDApCiAjZGVmaW5lIFU4NTAwX0NMS1JTVDVfQkFTRQkoVTg1MDBfUEVSNV9CQVNFICsgMHgxZjAwMCkKIAotLyogcGVyNCBiYXNlIGFkZHJlc3Nlc3MgKi8KKy8qIHBlcjQgYmFzZSBhZGRyZXNzZXMgKi8KICNkZWZpbmUgVTg1MDBfQkFDS1VQUkFNMF9CQVNFCShVODUwMF9QRVI0X0JBU0UgKyAweDAwMDAwKQogI2RlZmluZSBVODUwMF9CQUNLVVBSQU0xX0JBU0UJKFU4NTAwX1BFUjRfQkFTRSArIDB4MDEwMDApCiAjZGVmaW5lIFU4NTAwX1JUVDBfQkFTRQkJKFU4NTAwX1BFUjRfQkFTRSArIDB4MDIwMDApCkBAIC0xMDYsNyArMTA2LDcgQEAKICNkZWZpbmUgVTg1MDBfU0RJNV9CQVNFCQkoVTg1MDBfUEVSM19CQVNFICsgMHg4MDAwKQogI2RlZmluZSBVODUwMF9DTEtSU1QzX0JBU0UJKFU4NTAwX1BFUjNfQkFTRSArIDB4ZjAwMCkKIAotLyogcGVyMiBiYXNlIGFkZHJlc3Nlc3MgKi8KKy8qIHBlcjIgYmFzZSBhZGRyZXNzZXMgKi8KICNkZWZpbmUgVTg1MDBfSTJDM19CQVNFCQkoVTg1MDBfUEVSMl9CQVNFICsgMHgwMDAwKQogI2RlZmluZSBVODUwMF9TUEkyX0JBU0UJCShVODUwMF9QRVIyX0JBU0UgKyAweDEwMDApCiAjZGVmaW5lIFU4NTAwX1NQSTFfQkFTRQkJKFU4NTAwX1BFUjJfQkFTRSArIDB4MjAwMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXY0d2IuUyBiL2FyY2gvYXJtL21tL2NhY2hlLXY0d2IuUwppbmRleCBkMzY0NGRiLi5mNDBjNjk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12NHdiLlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TCkBAIC0zMiw3ICszMiw3IEBACiAvKgogICogVGhpcyBpcyB0aGUgc2l6ZSBhdCB3aGljaCBpdCBiZWNvbWVzIG1vcmUgZWZmaWNpZW50IHRvCiAgKiBjbGVhbiB0aGUgd2hvbGUgY2FjaGUsIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBpbmRpdmlkdWFsCi0gKiBjYWNoZSBsaW5lIG1haW50YWluZW5jZSBpbnN0cnVjdGlvbnMuCisgKiBjYWNoZSBsaW5lIG1haW50ZW5hbmNlIGluc3RydWN0aW9ucy4KICAqCiAgKiAgU2l6ZSAgQ2xlYW4gKHRpY2tzKSBEaXJ0eSAodGlja3MpCiAgKiAgIDQwOTYgICAyMSAgMjAgIDIxICAgIDUzICA1NSAgNTQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXY0d3QuUyBiL2FyY2gvYXJtL21tL2NhY2hlLXY0d3QuUwppbmRleCA0OWMyYjY2Li5hN2IyNzZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12NHd0LlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3dC5TCkBAIC0zNCw3ICszNCw3IEBACiAvKgogICogVGhpcyBpcyB0aGUgc2l6ZSBhdCB3aGljaCBpdCBiZWNvbWVzIG1vcmUgZWZmaWNpZW50IHRvCiAgKiBjbGVhbiB0aGUgd2hvbGUgY2FjaGUsIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBpbmRpdmlkdWFsCi0gKiBjYWNoZSBsaW5lIG1haW50YWluZW5jZSBpbnN0cnVjdGlvbnMuCisgKiBjYWNoZSBsaW5lIG1haW50ZW5hbmNlIGluc3RydWN0aW9ucy4KICAqCiAgKiAqKiogVGhpcyBuZWVkcyBiZW5jaG1hcmtpbmcKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjcuUyBiL2FyY2gvYXJtL21tL2NhY2hlLXY3LlMKaW5kZXggNjEzNmU2OC4uZGMxOGQ4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY2FjaGUtdjcuUworKysgYi9hcmNoL2FybS9tbS9jYWNoZS12Ny5TCkBAIC05Niw3ICs5Niw3IEBACiAgKglGbHVzaCB0aGUgZW50aXJlIGNhY2hlIHN5c3RlbS4KICAqICBUaGUgZGF0YSBjYWNoZSBmbHVzaCBpcyBub3cgYWNoaWV2ZWQgdXNpbmcgYXRvbWljIGNsZWFuIC8gaW52YWxpZGF0ZXMKICAqICB3b3JraW5nIG91dHdhcmRzIGZyb20gTDEgY2FjaGUuIFRoaXMgaXMgZG9uZSB1c2luZyBTZXQvV2F5IGJhc2VkIGNhY2hlCi0gKiAgbWFpbnRhaW5hbmNlIGluc3RydWN0aW9ucy4KKyAqICBtYWludGVuYW5jZSBpbnN0cnVjdGlvbnMuCiAgKiAgVGhlIGluc3RydWN0aW9uIGNhY2hlIGNhbiBzdGlsbCBiZSBpbnZhbGlkYXRlZCBiYWNrIHRvIHRoZSBwb2ludCBvZgogICogIHVuaWZpY2F0aW9uIGluIGEgc2luZ2xlIGluc3RydWN0aW9uLgogICoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2luaXQuYyBiL2FyY2gvYXJtL21tL2luaXQuYwppbmRleCBlNWY2ZmM0Li5lNTkxNTEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9pbml0LmMKKysrIGIvYXJjaC9hcm0vbW0vaW5pdC5jCkBAIC0zOTIsNyArMzkyLDcgQEAKIAkgKiBDb252ZXJ0IHN0YXJ0X3Bmbi9lbmRfcGZuIHRvIGEgc3RydWN0IHBhZ2UgcG9pbnRlci4KIAkgKi8KIAlzdGFydF9wZyA9IHBmbl90b19wYWdlKHN0YXJ0X3BmbiAtIDEpICsgMTsKLQllbmRfcGcgPSBwZm5fdG9fcGFnZShlbmRfcGZuKTsKKwllbmRfcGcgPSBwZm5fdG9fcGFnZShlbmRfcGZuIC0gMSkgKyAxOwogCiAJLyoKIAkgKiBDb252ZXJ0IHRvIHBoeXNpY2FsIGFkZHJlc3NlcywgYW5kCkBAIC00MjYsNiArNDI2LDE0IEBACiAKIAkJYmFua19zdGFydCA9IGJhbmtfcGZuX3N0YXJ0KGJhbmspOwogCisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTQorCQkvKgorCQkgKiBUYWtlIGNhcmUgbm90IHRvIGZyZWUgbWVtbWFwIGVudHJpZXMgdGhhdCBkb24ndCBleGlzdAorCQkgKiBkdWUgdG8gU1BBUlNFTUVNIHNlY3Rpb25zIHdoaWNoIGFyZW4ndCBwcmVzZW50LgorCQkgKi8KKwkJYmFua19zdGFydCA9IG1pbihiYW5rX3N0YXJ0LAorCQkJCSBBTElHTihwcmV2X2JhbmtfZW5kLCBQQUdFU19QRVJfU0VDVElPTikpOworI2VuZGlmCiAJCS8qCiAJCSAqIElmIHdlIGhhZCBhIHByZXZpb3VzIGJhbmssIGFuZCB0aGVyZSBpcyBhIHNwYWNlCiAJCSAqIGJldHdlZW4gdGhlIGN1cnJlbnQgYmFuayBhbmQgdGhlIHByZXZpb3VzLCBmcmVlIGl0LgpAQCAtNDQwLDYgKzQ0OCwxMiBAQAogCQkgKi8KIAkJcHJldl9iYW5rX2VuZCA9IEFMSUdOKGJhbmtfcGZuX2VuZChiYW5rKSwgTUFYX09SREVSX05SX1BBR0VTKTsKIAl9CisKKyNpZmRlZiBDT05GSUdfU1BBUlNFTUVNCisJaWYgKCFJU19BTElHTkVEKHByZXZfYmFua19lbmQsIFBBR0VTX1BFUl9TRUNUSU9OKSkKKwkJZnJlZV9tZW1tYXAocHJldl9iYW5rX2VuZCwKKwkJCSAgICBBTElHTihwcmV2X2JhbmtfZW5kLCBQQUdFU19QRVJfU0VDVElPTikpOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBmcmVlX2hpZ2hwYWdlcyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vbW1hcC5jIGIvYXJjaC9hcm0vbW0vbW1hcC5jCmluZGV4IGFmZTIwOWUuLjc0YmUwNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL21tYXAuYworKysgYi9hcmNoL2FybS9tbS9tbWFwLmMKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2htLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXR5cGUuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC04Miw3ICs4Myw4IEBACiAJICAgICAgICBtbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IDA7CiAJfQogCS8qIDggYml0cyBvZiByYW5kb21uZXNzIGluIDIwIGFkZHJlc3Mgc3BhY2UgYml0cyAqLwotCWlmIChjdXJyZW50LT5mbGFncyAmIFBGX1JBTkRPTUlaRSkKKwlpZiAoKGN1cnJlbnQtPmZsYWdzICYgUEZfUkFORE9NSVpFKSAmJgorCSAgICAhKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICYgQUREUl9OT19SQU5ET01JWkUpKQogCQlhZGRyICs9IChnZXRfcmFuZG9tX2ludCgpICUgKDEgPDwgOCkpIDw8IFBBR0VfU0hJRlQ7CiAKIGZ1bGxfc2VhcmNoOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUwppbmRleCAyMjZlM2Q4Li42YzRlN2ZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUwpAQCAtNjQsNyArNjQsNyBAQAogLyoKICAqIFRoaXMgaXMgdGhlIHNpemUgYXQgd2hpY2ggaXQgYmVjb21lcyBtb3JlIGVmZmljaWVudCB0bwogICogY2xlYW4gdGhlIHdob2xlIGNhY2hlLCByYXRoZXIgdGhhbiB1c2luZyB0aGUgaW5kaXZpZHVhbAotICogY2FjaGUgbGluZSBtYWludGFpbmVuY2UgaW5zdHJ1Y3Rpb25zLgorICogY2FjaGUgbGluZSBtYWludGVuYW5jZSBpbnN0cnVjdGlvbnMuCiAgKi8KICNkZWZpbmUgQ0FDSEVfRExJTUlUCTMyNzY4CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUwppbmRleCA4NmQ5YzJjLi40Y2U5NDdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TCkBAIC02NCw3ICs2NCw3IEBACiAvKgogICogVGhpcyBpcyB0aGUgc2l6ZSBhdCB3aGljaCBpdCBiZWNvbWVzIG1vcmUgZWZmaWNpZW50IHRvCiAgKiBjbGVhbiB0aGUgd2hvbGUgY2FjaGUsIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBpbmRpdmlkdWFsCi0gKiBjYWNoZSBsaW5lIG1haW50YWluZW5jZSBpbnN0cnVjdGlvbnMuCisgKiBjYWNoZSBsaW5lIG1haW50ZW5hbmNlIGluc3RydWN0aW9ucy4KICAqLwogI2RlZmluZSBDQUNIRV9ETElNSVQJMzI3NjgKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUwppbmRleCA4M2QzZGQzLi5jODg4NGM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUwpAQCAtNTMsNyArNTMsNyBAQAogLyoKICAqIFRoaXMgaXMgdGhlIHNpemUgYXQgd2hpY2ggaXQgYmVjb21lcyBtb3JlIGVmZmljaWVudCB0bwogICogY2xlYW4gdGhlIHdob2xlIGNhY2hlLCByYXRoZXIgdGhhbiB1c2luZyB0aGUgaW5kaXZpZHVhbAotICogY2FjaGUgbGluZSBtYWludGFpbmVuY2UgaW5zdHJ1Y3Rpb25zLgorICogY2FjaGUgbGluZSBtYWludGVuYW5jZSBpbnN0cnVjdGlvbnMuCiAgKi8KICNkZWZpbmUgQ0FDSEVfRExJTUlUCTMyNzY4CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKaW5kZXggNjg2MDQzZS4uNDEzNjg0NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKQEAgLTUzLDcgKzUzLDcgQEAKIC8qCiAgKiBUaGlzIGlzIHRoZSBzaXplIGF0IHdoaWNoIGl0IGJlY29tZXMgbW9yZSBlZmZpY2llbnQgdG8KICAqIGNsZWFuIHRoZSB3aG9sZSBjYWNoZSwgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIGluZGl2aWR1YWwKLSAqIGNhY2hlIGxpbmUgbWFpbnRhaW5lbmNlIGluc3RydWN0aW9ucy4KKyAqIGNhY2hlIGxpbmUgbWFpbnRlbmFuY2UgaW5zdHJ1Y3Rpb25zLgogICovCiAjZGVmaW5lIENBQ0hFX0RMSU1JVAkzMjc2OAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03MjAuUwppbmRleCA2NjUyNjZkLi43YTA2ZTU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlMKQEAgLTYzLDcgKzYzLDcgQEAKIC8qCiAgKiBGdW5jdGlvbjogYXJtNzIwX3Byb2NfZG9faWRsZSh2b2lkKQogICogUGFyYW1zICA6IHIwID0gdW51c2VkCi0gKiBQdXJwb3NlIDogcHV0IHRoZSBwcm9jZXNzZXIgaW4gcHJvcGVyIGlkbGUgbW9kZQorICogUHVycG9zZSA6IHB1dCB0aGUgcHJvY2Vzc29yIGluIHByb3BlciBpZGxlIG1vZGUKICAqLwogRU5UUlkoY3B1X2FybTcyMF9kb19pZGxlKQogCQltb3YJcGMsIGxyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUwppbmRleCAyMTk5ODBlLi5iZjhhMWQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKQEAgLTUzLDcgKzUzLDcgQEAKIC8qCiAgKiBUaGlzIGlzIHRoZSBzaXplIGF0IHdoaWNoIGl0IGJlY29tZXMgbW9yZSBlZmZpY2llbnQgdG8KICAqIGNsZWFuIHRoZSB3aG9sZSBjYWNoZSwgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIGluZGl2aWR1YWwKLSAqIGNhY2hlIGxpbmUgbWFpbnRhaW5lbmNlIGluc3RydWN0aW9ucy4KKyAqIGNhY2hlIGxpbmUgbWFpbnRlbmFuY2UgaW5zdHJ1Y3Rpb25zLgogICovCiAjZGVmaW5lIENBQ0hFX0RMSU1JVAk2NTUzNgogCkBAIC0zOTAsNyArMzkwLDcgQEAKIC8qIFN1c3BlbmQvcmVzdW1lIHN1cHBvcnQ6IHRha2VuIGZyb20gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NsZWVwLlMgKi8KIC5nbG9ibAljcHVfYXJtOTIwX3N1c3BlbmRfc2l6ZQogLmVxdQljcHVfYXJtOTIwX3N1c3BlbmRfc2l6ZSwgNCAqIDMKLSNpZmRlZiBDT05GSUdfUE0KKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIEVOVFJZKGNwdV9hcm05MjBfZG9fc3VzcGVuZCkKIAlzdG1mZAlzcCEsIHtyNCAtIHI3LCBscn0KIAltcmMJcDE1LCAwLCByNCwgYzEzLCBjMCwgMAlAIFBJRApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMKaW5kZXggMzYxNTRiMS4uOTViYTFmYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TCkBAIC01NCw3ICs1NCw3IEBACiAvKgogICogVGhpcyBpcyB0aGUgc2l6ZSBhdCB3aGljaCBpdCBiZWNvbWVzIG1vcmUgZWZmaWNpZW50IHRvCiAgKiBjbGVhbiB0aGUgd2hvbGUgY2FjaGUsIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBpbmRpdmlkdWFsCi0gKiBjYWNoZSBsaW5lIG1haW50YWluZW5jZSBpbnN0cnVjdGlvbnMuICAoSSB0aGluayB0aGlzIHNob3VsZAorICogY2FjaGUgbGluZSBtYWludGVuYW5jZSBpbnN0cnVjdGlvbnMuICAoSSB0aGluayB0aGlzIHNob3VsZAogICogYmUgMzI3NjgpLgogICovCiAjZGVmaW5lIENBQ0hFX0RMSU1JVAk4MTkyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUwppbmRleCA4OWM1ZTAwMC4uNTQxZTQ3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TCkBAIC03Nyw3ICs3Nyw3IEBACiAvKgogICogVGhpcyBpcyB0aGUgc2l6ZSBhdCB3aGljaCBpdCBiZWNvbWVzIG1vcmUgZWZmaWNpZW50IHRvCiAgKiBjbGVhbiB0aGUgd2hvbGUgY2FjaGUsIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBpbmRpdmlkdWFsCi0gKiBjYWNoZSBsaW5lIG1haW50YWluZW5jZSBpbnN0cnVjdGlvbnMuCisgKiBjYWNoZSBsaW5lIG1haW50ZW5hbmNlIGluc3RydWN0aW9ucy4KICAqLwogI2RlZmluZSBDQUNIRV9ETElNSVQJODE5MgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUwppbmRleCA2YTRiZGIyLi4wZWQ4NWQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMKQEAgLTQwNCw3ICs0MDQsNyBAQAogLyogU3VzcGVuZC9yZXN1bWUgc3VwcG9ydDogdGFrZW4gZnJvbSBhcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUyAqLwogLmdsb2JsCWNwdV9hcm05MjZfc3VzcGVuZF9zaXplCiAuZXF1CWNwdV9hcm05MjZfc3VzcGVuZF9zaXplLCA0ICogMwotI2lmZGVmIENPTkZJR19QTQorI2lmZGVmIENPTkZJR19QTV9TTEVFUAogRU5UUlkoY3B1X2FybTkyNl9kb19zdXNwZW5kKQogCXN0bWZkCXNwISwge3I0IC0gcjcsIGxyfQogCW1yYwlwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCUAgUElECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLW1hY3Jvcy5TIGIvYXJjaC9hcm0vbW0vcHJvYy1tYWNyb3MuUwppbmRleCBlMzJmYTQ5Li4zNDI2MWY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLW1hY3Jvcy5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtbWFjcm9zLlMKQEAgLTg1LDcgKzg1LDcgQEAKIAogLyoKICAqIFNhbml0eSBjaGVjayB0aGUgUFRFIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb2RlIGJlbG93IC0gd2hpY2ggbWFrZXMKLSAqIGNlcnRhaW4gYXNzdW1wdGlvbnMgYWJvdXQgaG93IHRoZXNlIGJpdHMgYXJlIGxheWVkIG91dC4KKyAqIGNlcnRhaW4gYXNzdW1wdGlvbnMgYWJvdXQgaG93IHRoZXNlIGJpdHMgYXJlIGxhaWQgb3V0LgogICovCiAjaWZkZWYgQ09ORklHX01NVQogI2lmIExfUFRFX1NIQVJFRCAhPSBQVEVfRVhUX1NIQVJFRApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMKaW5kZXggNzQ0ODNkMS4uMTg0YTljOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TCkBAIC0xNzEsNyArMTcxLDcgQEAKIAogLmdsb2JsCWNwdV9zYTExMDBfc3VzcGVuZF9zaXplCiAuZXF1CWNwdV9zYTExMDBfc3VzcGVuZF9zaXplLCA0KjQKLSNpZmRlZiBDT05GSUdfUE0KKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIEVOVFJZKGNwdV9zYTExMDBfZG9fc3VzcGVuZCkKIAlzdG1mZAlzcCEsIHtyNCAtIHI3LCBscn0KIAltcmMJcDE1LCAwLCByNCwgYzMsIGMwLCAwCQlAIGRvbWFpbiBJRApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy12Ni5TIGIvYXJjaC9hcm0vbW0vcHJvYy12Ni5TCmluZGV4IDgzMmI2YmQuLjdjOTljYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtdjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXY2LlMKQEAgLTEyNCw3ICsxMjQsNyBAQAogLyogU3VzcGVuZC9yZXN1bWUgc3VwcG9ydDogdGFrZW4gZnJvbSBhcmNoL2FybS9tYWNoLXMzYzY0eHgvc2xlZXAuUyAqLwogLmdsb2JsCWNwdV92Nl9zdXNwZW5kX3NpemUKIC5lcXUJY3B1X3Y2X3N1c3BlbmRfc2l6ZSwgNCAqIDgKLSNpZmRlZiBDT05GSUdfUE0KKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIEVOVFJZKGNwdV92Nl9kb19zdXNwZW5kKQogCXN0bWZkCXNwISwge3I0IC0gcjExLCBscn0KIAltcmMJcDE1LCAwLCByNCwgYzEzLCBjMCwgMAlAIEZDU0UvUElECkBAIC0xMzIsNyArMTMyLDcgQEAKIAltcmMJcDE1LCAwLCByNiwgYzMsIGMwLCAwCUAgRG9tYWluIElECiAJbXJjCXAxNSwgMCwgcjcsIGMyLCBjMCwgMAlAIFRyYW5zbGF0aW9uIHRhYmxlIGJhc2UgMAogCW1yYwlwMTUsIDAsIHI4LCBjMiwgYzAsIDEJQCBUcmFuc2xhdGlvbiB0YWJsZSBiYXNlIDEKLQltcmMJcDE1LCAwLCByOSwgYzEsIGMwLCAxCUAgYXV4aWxsYXJ5IGNvbnRyb2wgcmVnaXN0ZXIKKwltcmMJcDE1LCAwLCByOSwgYzEsIGMwLCAxCUAgYXV4aWxpYXJ5IGNvbnRyb2wgcmVnaXN0ZXIKIAltcmMJcDE1LCAwLCByMTAsIGMxLCBjMCwgMglAIGNvLXByb2Nlc3NvciBhY2Nlc3MgY29udHJvbAogCW1yYwlwMTUsIDAsIHIxMSwgYzEsIGMwLCAwCUAgY29udHJvbCByZWdpc3RlcgogCXN0bWlhCXIwLCB7cjQgLSByMTF9CkBAIC0xNTEsNyArMTUxLDcgQEAKIAltY3IJcDE1LCAwLCByNiwgYzMsIGMwLCAwCUAgRG9tYWluIElECiAJbWNyCXAxNSwgMCwgcjcsIGMyLCBjMCwgMAlAIFRyYW5zbGF0aW9uIHRhYmxlIGJhc2UgMAogCW1jcglwMTUsIDAsIHI4LCBjMiwgYzAsIDEJQCBUcmFuc2xhdGlvbiB0YWJsZSBiYXNlIDEKLQltY3IJcDE1LCAwLCByOSwgYzEsIGMwLCAxCUAgYXV4aWxsYXJ5IGNvbnRyb2wgcmVnaXN0ZXIKKwltY3IJcDE1LCAwLCByOSwgYzEsIGMwLCAxCUAgYXV4aWxpYXJ5IGNvbnRyb2wgcmVnaXN0ZXIKIAltY3IJcDE1LCAwLCByMTAsIGMxLCBjMCwgMglAIGNvLXByb2Nlc3NvciBhY2Nlc3MgY29udHJvbAogCW1jcglwMTUsIDAsIGlwLCBjMiwgYzAsIDIJQCBUVEIgY29udHJvbCByZWdpc3RlcgogCW1jcglwMTUsIDAsIGlwLCBjNywgYzUsIDQJQCBJU0IKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtdjcuUyBiL2FyY2gvYXJtL21tL3Byb2MtdjcuUwppbmRleCAyNjJmYTg4Li5iYWJmYmEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXY3LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCkBAIC0yMTEsNyArMjExLDcgQEAKIC8qIFN1c3BlbmQvcmVzdW1lIHN1cHBvcnQ6IGRlcml2ZWQgZnJvbSBhcmNoL2FybS9tYWNoLXM1cHYyMTAvc2xlZXAuUyAqLwogLmdsb2JsCWNwdV92N19zdXNwZW5kX3NpemUKIC5lcXUJY3B1X3Y3X3N1c3BlbmRfc2l6ZSwgNCAqIDgKLSNpZmRlZiBDT05GSUdfUE0KKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIEVOVFJZKGNwdV92N19kb19zdXNwZW5kKQogCXN0bWZkCXNwISwge3I0IC0gcjExLCBscn0KIAltcmMJcDE1LCAwLCByNCwgYzEzLCBjMCwgMAlAIEZDU0UvUElECkBAIC0yMzcsNyArMjM3LDcgQEAKIAltY3IJcDE1LCAwLCByNywgYzIsIGMwLCAwCUAgVFRCIDAKIAltY3IJcDE1LCAwLCByOCwgYzIsIGMwLCAxCUAgVFRCIDEKIAltY3IJcDE1LCAwLCBpcCwgYzIsIGMwLCAyCUAgVFRCIGNvbnRyb2wgcmVnaXN0ZXIKLQltY3IJcDE1LCAwLCByMTAsIGMxLCBjMCwgMQlAIEF1eGlsbGFyeSBjb250cm9sIHJlZ2lzdGVyCisJbWNyCXAxNSwgMCwgcjEwLCBjMSwgYzAsIDEJQCBBdXhpbGlhcnkgY29udHJvbCByZWdpc3RlcgogCW1jcglwMTUsIDAsIHIxMSwgYzEsIGMwLCAyCUAgQ28tcHJvY2Vzc29yIGFjY2VzcyBjb250cm9sCiAJbGRyCXI0LCA9UFJSUgkJQCBQUlJSCiAJbGRyCXI1LCA9Tk1SUgkJQCBOTVJSCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUyBiL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TCmluZGV4IDYzZDhiMjAuLjU5NjIxMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TCkBAIC00MTcsNyArNDE3LDcgQEAKIAogLmdsb2JsCWNwdV94c2MzX3N1c3BlbmRfc2l6ZQogLmVxdQljcHVfeHNjM19zdXNwZW5kX3NpemUsIDQgKiA4Ci0jaWZkZWYgQ09ORklHX1BNCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiBFTlRSWShjcHVfeHNjM19kb19zdXNwZW5kKQogCXN0bWZkCXNwISwge3I0IC0gcjEwLCBscn0KIAltcmMJcDE0LCAwLCByNCwgYzYsIGMwLCAwCUAgY2xvY2sgY29uZmlndXJhdGlvbiwgZm9yIHR1cmJvIG1vZGUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMgYi9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCmluZGV4IDA4NjAzOGMuLjQyYWY5NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwpAQCAtMzk1LDcgKzM5NSw3IEBACiAJdGVxCXIyLCAjRE1BX1RPX0RFVklDRQogCWJlcQl4c2NhbGVfZG1hX2NsZWFuX3JhbmdlCiAJYgl4c2NhbGVfZG1hX2ZsdXNoX3JhbmdlCi1FTkRQUk9DKHhzY3NhbGVfZG1hX2EwX21hcF9hcmVhKQorRU5EUFJPQyh4c2NhbGVfZG1hX2EwX21hcF9hcmVhKQogCiAvKgogICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKQEAgLTUxOCw3ICs1MTgsNyBAQAogCiAuZ2xvYmwJY3B1X3hzY2FsZV9zdXNwZW5kX3NpemUKIC5lcXUJY3B1X3hzY2FsZV9zdXNwZW5kX3NpemUsIDQgKiA3Ci0jaWZkZWYgQ09ORklHX1BNCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiBFTlRSWShjcHVfeHNjYWxlX2RvX3N1c3BlbmQpCiAJc3RtZmQJc3AhLCB7cjQgLSByMTAsIGxyfQogCW1yYwlwMTQsIDAsIHI0LCBjNiwgYzAsIDAJQCBjbG9jayBjb25maWd1cmF0aW9uLCBmb3IgdHVyYm8gbW9kZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvY3B1ZnJlcS5jIGIvYXJjaC9hcm0vcGxhdC1teGMvY3B1ZnJlcS5jCmluZGV4IGNlODE0ODEuLjQyNjhhMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2NwdWZyZXEuYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9jcHVmcmVxLmMKQEAgLTEzLDcgKzEzLDcgQEAKIAogLyoKICAqIEEgZHJpdmVyIGZvciB0aGUgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgaS5NWEMgQ1BVZnJlcSBtb2R1bGUuCi0gKiBUaGUgQ1BVRlJFUSBkcml2ZXIgaXMgZm9yIGNvbnRyb2xpbmcgQ1BVIGZyZXF1ZW5jeS4gSXQgYWxsb3dzIHlvdSB0byBjaGFuZ2UKKyAqIFRoZSBDUFVGUkVRIGRyaXZlciBpcyBmb3IgY29udHJvbGxpbmcgQ1BVIGZyZXF1ZW5jeS4gSXQgYWxsb3dzIHlvdSB0byBjaGFuZ2UKICAqIHRoZSBDUFUgY2xvY2sgc3BlZWQgb24gdGhlIGZseS4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9ncGlvLmMKaW5kZXggN2ExMDcyNC4uNmNkNmQ3ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2dwaW8uYwpAQCAtMjk1LDYgKzI5NSwxMiBAQAogCXJldHVybiAwOwogfQogCisvKgorICogVGhpcyBsb2NrIGNsYXNzIHRlbGxzIGxvY2tkZXAgdGhhdCBHUElPIGlycXMgYXJlIGluIGEgZGlmZmVyZW50CisgKiBjYXRlZ29yeSB0aGFuIHRoZWlyIHBhcmVudHMsIHNvIGl0IHdvbid0IHJlcG9ydCBmYWxzZSByZWN1cnNpb24uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgZ3Bpb19sb2NrX2NsYXNzOworCiBpbnQgX19pbml0IG14Y19ncGlvX2luaXQoc3RydWN0IG14Y19ncGlvX3BvcnQgKnBvcnQsIGludCBjbnQpCiB7CiAJaW50IGksIGo7CkBAIC0zMTEsNiArMzE3LDcgQEAKIAkJX19yYXdfd3JpdGVsKH4wLCBwb3J0W2ldLmJhc2UgKyBHUElPX0lTUik7CiAJCWZvciAoaiA9IHBvcnRbaV0udmlydHVhbF9pcnFfc3RhcnQ7CiAJCQlqIDwgcG9ydFtpXS52aXJ0dWFsX2lycV9zdGFydCArIDMyOyBqKyspIHsKKwkJCWlycV9zZXRfbG9ja2RlcF9jbGFzcyhqLCAmZ3Bpb19sb2NrX2NsYXNzKTsKIAkJCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihqLCAmZ3Bpb19pcnFfY2hpcCwKIAkJCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAkJCXNldF9pcnFfZmxhZ3MoaiwgSVJRRl9WQUxJRCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCmluZGV4IGJkOWJiOTcuLjJlNDllNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0zMyw5ICszMyw5IEBACiAJLm1hY3JvICBhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCiAJLmVuZG0KIAotCUAgdGhpcyBtYWNybyBjaGVja3Mgd2hpY2ggaW50ZXJydXB0IG9jY3VyZWQKKwlAIHRoaXMgbWFjcm8gY2hlY2tzIHdoaWNoIGludGVycnVwdCBvY2N1cnJlZAogCUAgYW5kIHJldHVybnMgaXRzIG51bWJlciBpbiBpcnFucgotCUAgYW5kIHJldHVybnMgaWYgYW4gaW50ZXJydXB0IG9jY3VyZWQgaW4gaXJxc3RhdAorCUAgYW5kIHJldHVybnMgaWYgYW4gaW50ZXJydXB0IG9jY3VycmVkIGluIGlycXN0YXQKIAkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCiAjaWZuZGVmIENPTkZJR19NWENfVFpJQwogCUAgTG9hZCBvZmZzZXQgJiBwcmlvcml0eSBvZiB0aGUgaGlnaGVzdCBwcmlvcml0eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Y19uYW5kLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjX25hbmQuaAppbmRleCAwNGMwZDA2Li42YmI5NmVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjX25hbmQuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjX25hbmQuaApAQCAtMjQsNyArMjQsNyBAQAogCiBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YSB7CiAJdW5zaWduZWQgaW50IHdpZHRoOwkvKiBkYXRhIGJ1cyB3aWR0aCBpbiBieXRlcyAqLwotCXVuc2lnbmVkIGludCBod19lY2M6MTsJLyogMCBpZiBzdXByZXNzIGhhcmR3YXJlIEVDQyAqLworCXVuc2lnbmVkIGludCBod19lY2M6MTsJLyogMCBpZiBzdXBwcmVzcyBoYXJkd2FyZSBFQ0MgKi8KIAl1bnNpZ25lZCBpbnQgZmxhc2hfYmJ0OjE7IC8qIHNldCB0byAxIHRvIHVzZSBhIGZsYXNoIGJhc2VkIGJidCAqLwogCXN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0czsJLyogcGFydGl0aW9uIHRhYmxlICovCiAJaW50IG5yX3BhcnRzOwkJCS8qIHNpemUgb2YgcGFydHMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL3NzaS1maXEuUyBiL2FyY2gvYXJtL3BsYXQtbXhjL3NzaS1maXEuUwppbmRleCA0ZGRjZTU2Li44Mzk3YTJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9zc2ktZmlxLlMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvc3NpLWZpcS5TCkBAIC0xMjQsNiArMTI0LDggQEAKIDE6CiAJCUAgcmV0dXJuIGZyb20gRklRCiAJCXN1YnMJcGMsIGxyLCAjNAorCisJCS5hbGlnbgogaW14X3NzaV9maXFfYmFzZToKIAkJLndvcmQgMHgwCiBpbXhfc3NpX2ZpcV9yeF9idWZmZXI6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYwppbmRleCA3ZDlmODE1Li5lYTI4Zjk4ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCkBAIC0yODAsNyArMjgwLDcgQEAKICAqIENsYWltaW5nIEdQSU9zLCBhbmQgc2V0dGluZyB0aGVpciBkaXJlY3Rpb24gYW5kIGluaXRpYWwgdmFsdWVzLCBpcyB0aGUKICAqIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBkZXZpY2UgZHJpdmVycy4gIFNvIGlzIHJlc3BvbmRpbmcgdG8gcHJvYmUoKS4KICAqCi0gKiBCb2FyZC1zcGVjaWZpYyBrbm93bGVnZSBsaWtlIGNyZWF0aW5nIGRldmljZXMgb3IgcGluIHNldHVwIGlzIHRvIGJlCisgKiBCb2FyZC1zcGVjaWZpYyBrbm93bGVkZ2UgbGlrZSBjcmVhdGluZyBkZXZpY2VzIG9yIHBpbiBzZXR1cCBpcyB0byBiZQogICoga2VwdCBvdXQgb2YgZHJpdmVycyBhcyBtdWNoIGFzIHBvc3NpYmxlLiAgSW4gcGFydGljdWxhciwgcGluIHNldHVwCiAgKiBtYXkgYmUgaGFuZGxlZCBieSB0aGUgYm9vdCBsb2FkZXIsIGFuZCBkcml2ZXJzIHNob3VsZCBleHBlY3QgaXQgd2lsbAogICogbm9ybWFsbHkgaGF2ZSBiZWVuIGRvbmUgYnkgdGhlIHRpbWUgdGhleSdyZSBwcm9iZWQuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKaW5kZXggMmVjM2I1ZC4uYzIyMjE3YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwpAQCAtMTAxOSw3ICsxMDE5LDcgQEAKICAqIElmIHRoZSBjaGFubmVsIGlzIHJ1bm5pbmcgdGhlIGNhbGxlciBtdXN0IGRpc2FibGUgaW50ZXJydXB0cyBwcmlvciBjYWxsaW5nCiAgKiB0aGlzIGZ1bmN0aW9uIGFuZCBwcm9jZXNzIHRoZSByZXR1cm5lZCB2YWx1ZSBiZWZvcmUgcmUtZW5hYmxpbmcgaW50ZXJydXB0IHRvCiAgKiBwcmV2ZW50IHJhY2VzIHdpdGggdGhlIGludGVycnVwdCBoYW5kbGVyLiBOb3RlIHRoYXQgaW4gY29udGludW91cyBtb2RlIHRoZXJlCi0gKiBpcyBhIGNoYW5jZSBmb3IgQ1NTQV9MIHJlZ2lzdGVyIG92ZXJmbG93IGluYmV0d2VlbiB0aGUgdHdvIHJlYWRzIHJlc3VsdGluZworICogaXMgYSBjaGFuY2UgZm9yIENTU0FfTCByZWdpc3RlciBvdmVyZmxvdyBiZXR3ZWVuIHRoZSB0d28gcmVhZHMgcmVzdWx0aW5nCiAgKiBpbiBpbmNvcnJlY3QgcmV0dXJuIHZhbHVlLgogICovCiBkbWFfYWRkcl90IG9tYXBfZ2V0X2RtYV9zcmNfcG9zKGludCBsY2gpCkBAIC0xMDQ2LDcgKzEwNDYsNyBAQAogICogSWYgdGhlIGNoYW5uZWwgaXMgcnVubmluZyB0aGUgY2FsbGVyIG11c3QgZGlzYWJsZSBpbnRlcnJ1cHRzIHByaW9yIGNhbGxpbmcKICAqIHRoaXMgZnVuY3Rpb24gYW5kIHByb2Nlc3MgdGhlIHJldHVybmVkIHZhbHVlIGJlZm9yZSByZS1lbmFibGluZyBpbnRlcnJ1cHQgdG8KICAqIHByZXZlbnQgcmFjZXMgd2l0aCB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIE5vdGUgdGhhdCBpbiBjb250aW51b3VzIG1vZGUgdGhlcmUKLSAqIGlzIGEgY2hhbmNlIGZvciBDRFNBX0wgcmVnaXN0ZXIgb3ZlcmZsb3cgaW5iZXR3ZWVuIHRoZSB0d28gcmVhZHMgcmVzdWx0aW5nCisgKiBpcyBhIGNoYW5jZSBmb3IgQ0RTQV9MIHJlZ2lzdGVyIG92ZXJmbG93IGJldHdlZW4gdGhlIHR3byByZWFkcyByZXN1bHRpbmcKICAqIGluIGluY29ycmVjdCByZXR1cm4gdmFsdWUuCiAgKi8KIGRtYV9hZGRyX3Qgb21hcF9nZXRfZG1hX2RzdF9wb3MoaW50IGxjaCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZ3Bpby5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ncGlvLmgKaW5kZXggZDZmOWZhMC4uY2FjMmU4YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ncGlvLmgKQEAgLTkzLDcgKzkzLDcgQEAKIC8qIFdyYXBwZXJzIGZvciAibmV3IHN0eWxlIiBHUElPIGNhbGxzLCB1c2luZyB0aGUgbmV3IGluZnJhc3RydWN0dXJlCiAgKiB3aGljaCBsZXRzIHVzIHBsdWcgaW4gRlBHQSwgSTJDLCBhbmQgb3RoZXIgaW1wbGVtZW50YXRpb25zLgogICogKgotICogVGhlIG9yaWdpbmFsIE9NQVAtc3BlY2ZpYyBjYWxscyBzaG91bGQgZXZlbnR1YWxseSBiZSByZW1vdmVkLgorICogVGhlIG9yaWdpbmFsIE9NQVAtc3BlY2lmaWMgY2FsbHMgc2hvdWxkIGV2ZW50dWFsbHkgYmUgcmVtb3ZlZC4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZ3BtYy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ncG1jLmgKaW5kZXggMTJiMzE2MS4uMTUyNzkyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ncG1jLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ncG1jLmgKQEAgLTkwLDcgKzkwLDcgQEAKIAkJLyogMS1iaXQgZWNjOiBzdG9yZWQgYXQgZW5kIG9mIHNwYXJlIGFyZWEgKi8KIAlPTUFQX0VDQ19IQU1NSU5HX0NPREVfREVGQVVMVCA9IDAsIC8qIERlZmF1bHQsIHMvdyBtZXRob2QgKi8KIAlPTUFQX0VDQ19IQU1NSU5HX0NPREVfSFcsIC8qIGdwbWMgdG8gZGV0ZWN0IHRoZSBlcnJvciAqLwotCQkvKiAxLWJpdCBlY2M6IHN0b3JlZCBhdCBiZWdpbmluZyBvZiBzcGFyZSBhcmVhIGFzIHJvbWNvZGUgKi8KKwkJLyogMS1iaXQgZWNjOiBzdG9yZWQgYXQgYmVnaW5uaW5nIG9mIHNwYXJlIGFyZWEgYXMgcm9tY29kZSAqLwogCU9NQVBfRUNDX0hBTU1JTkdfQ09ERV9IV19ST01DT0RFLCAvKiBncG1jIG1ldGhvZCAmIHJvbWNvZGUgbGF5b3V0ICovCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW9tbXUuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jCmluZGV4IDhhNTFmZDUuLjM0ZmMzMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jCkBAIC03OTMsNiArNzkzLDggQEAKIAljbGtfZW5hYmxlKG9iai0+Y2xrKTsKIAllcnJzID0gaW9tbXVfcmVwb3J0X2ZhdWx0KG9iaiwgJmRhKTsKIAljbGtfZGlzYWJsZShvYmotPmNsayk7CisJaWYgKGVycnMgPT0gMCkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOwogCiAJLyogRmF1bHQgY2FsbGJhY2sgb3IgVExCL1BURSBEeW5hbWljIGxvYWRpbmcgKi8KIAlpZiAob2JqLT5pc3IgJiYgIW9iai0+aXNyKG9iaiwgZGEsIGVycnMsIG9iai0+aXNyX3ByaXYpKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwppbmRleCBkNTk4ZDlmLi41NTg3YWNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwpAQCAtMTEwMyw3ICsxMTAzLDcgQEAKIAkJLyogcmVzZW5kICovCiAJCXJldHVybiAtMTsKIAl9IGVsc2UgewotCQkvKiB3YWl0IGZvciByZWNpZXZlIGNvbmZpcm1hdGlvbiAqLworCQkvKiB3YWl0IGZvciByZWNlaXZlIGNvbmZpcm1hdGlvbiAqLwogCQlpbnQgYXR0ZW1wcyA9IDA7CiAJCXdoaWxlICghKE1DQlNQX1JFQUQobWNic3AsIFNQQ1IxKSAmIFJSRFkpKSB7CiAJCQlpZiAoYXR0ZW1wcysrID4gMTAwMCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L21mcC5oIGIvYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L21mcC5oCmluZGV4IDc1ZjY1NjQuLjg5ZTY4ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9tZnAuaAorKysgYi9hcmNoL2FybS9wbGF0LXB4YS9pbmNsdWRlL3BsYXQvbWZwLmgKQEAgLTQzNCw3ICs0MzQsNyBAQAogICoKICAqIG1mcF9pbml0X2FkZHIoKSAtIGFjY2VwdHMgYSB0YWJsZSBvZiAibWZwX2FkZHJfbWFwIiBzdHJ1Y3R1cmUsIHdoaWNoCiAgKiByZXByZXNlbnRzIGEgcmFuZ2Ugb2YgTUZQIHBpbnMgZnJvbSAic3RhcnQiIHRvICJlbmQiLCB3aXRoIHRoZSBvZmZzZXQKLSAqIGJlZ2luaW5nIGF0ICJvZmZzZXQiLCB0byBkZWZpbmUgYSBzaW5nbGUgcGluLCBsZXQgImVuZCIgPSAtMS4KKyAqIGJlZ2lubmluZyBhdCAib2Zmc2V0IiwgdG8gZGVmaW5lIGEgc2luZ2xlIHBpbiwgbGV0ICJlbmQiID0gLTEuCiAgKgogICogdXNlCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L01ha2VmaWxlCmluZGV4IGMyMDY0YzMuLjAyOTFiZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvTWFrZWZpbGUKQEAgLTIzLDcgKzIzLDcgQEAKIG9iai0kKENPTkZJR19DUFVfRlJFUV9TM0MyNFhYKQkrPSBjcHUtZnJlcS5vCiBvYmotJChDT05GSUdfQ1BVX0ZSRVFfUzNDMjRYWF9ERUJVR0ZTKSArPSBjcHUtZnJlcS1kZWJ1Z2ZzLm8KIAotIyBBcmNoaXRlY3R1cmUgZGVwZW5kYW50IGJ1aWxkcworIyBBcmNoaXRlY3R1cmUgZGVwZW5kZW50IGJ1aWxkcwogCiBvYmotJChDT05GSUdfUE1fU0lNVEVDKQkJKz0gcG0tc2ltdGVjLm8KIG9iai0kKENPTkZJR19QTSkJCSs9IHBtLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUtZnJlcS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS1mcmVxLmMKaW5kZXggZWVhNzVmZi4uYjNkM2QwMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS1mcmVxLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS1mcmVxLmMKQEAgLTQ1NSw3ICs0NTUsNyBAQAogCiAJLyogd2hpbHN0IHdlIHdpbGwgYmUgY2FsbGVkIGxhdGVyIG9uLCB3ZSB0cnkgYW5kIHJlLXNldCB0aGUKIAkgKiBjcHUgZnJlcXVlbmNpZXMgYXMgc29vbiBhcyBwb3NzaWJsZSBzbyB0aGF0IHdlIGRvIG5vdCBlbmQKLQkgKiB1cCByZXN1bWluZyBkZXZpY2VzIGFuZCB0aGVuIGltbWVkaWF0bGV5IGhhdmluZyB0byByZS1zZXQKKwkgKiB1cCByZXN1bWluZyBkZXZpY2VzIGFuZCB0aGVuIGltbWVkaWF0ZWx5IGhhdmluZyB0byByZS1zZXQKIAkgKiBhIG51bWJlciBvZiBzZXR0aW5ncyBvbmNlIHRoZXNlIGRldmljZXMgaGF2ZSByZXN0YXJ0ZWQuCiAJICoKIAkgKiBhcyBhIG5vdGUsIGl0IGlzIGV4cGVjdGVkIGRldmljZXMgYXJlIG5vdCB1c2VkIHVudGlsIHRoZXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYwppbmRleCA2YWQyNzRlLi4yN2VhODUyZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYwpAQCAtNTU3LDcgKzU1Nyw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTM0MyNDEwX0RNQUxPQURfMUxPQURFRF8xUlVOTklORzoKLQkJLyogSSBiZWxpdmUgaW4gdGhpcyBjYXNlIHdlIGRvIG5vdCBoYXZlIGFueXRoaW5nIHRvIGRvCisJCS8qIEkgYmVsaWV2ZSBpbiB0aGlzIGNhc2Ugd2UgZG8gbm90IGhhdmUgYW55dGhpbmcgdG8gZG8KIAkJICogdW50aWwgdGhlIG5leHQgYnVmZmVyIGNvbWVzIGFsb25nLCBhbmQgd2UgdHVybiBvZmYgdGhlCiAJCSAqIHJlbG9hZCAqLwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9pcnEtZ3Bpb2ludC5jIGIvYXJjaC9hcm0vcGxhdC1zNXAvaXJxLWdwaW9pbnQuYwppbmRleCA0NmRkMDc4Li5jZDZkNjdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXM1cC9pcnEtZ3Bpb2ludC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL2lycS1ncGlvaW50LmMKQEAgLTIwOCw3ICsyMDgsNyBAQAogCX0KIAogCS8qCi0JICogY2hhaW5lZCBHUElPIGlycSBoYXMgYmVlbiBzdWNlc3NmdWxseSByZWdpc3RlcmVkLCBhbGxvY2F0ZSBuZXcgZ3BpbworCSAqIGNoYWluZWQgR1BJTyBpcnEgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQsIGFsbG9jYXRlIG5ldyBncGlvCiAJICogaW50IGdyb3VwIGFuZCBhc3NpZ24gaXJxIG51Ym1lcnMKIAkgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXAvcG0uYyBiL2FyY2gvYXJtL3BsYXQtczVwL3BtLmMKaW5kZXggZDU5MmI2My4uZDE1ZGM0NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zNXAvcG0uYworKysgYi9hcmNoL2FybS9wbGF0LXM1cC9wbS5jCkBAIC0xOSwxNyArMTksNiBAQAogCiAjZGVmaW5lIFBGWCAiczVwIHBtOiAiCiAKLS8qIHMzY19wbV9jaGVja19yZXN1bWVfcGluCi0gKgotICogY2hlY2sgdG8gc2VlIGlmIHRoZSBwaW4gaXMgY29uZmlndXJlZCBjb3JyZWN0bHkgZm9yIHNsZWVwIG1vZGUsIGFuZAotICogbWFrZSBhbnkgbmVjZXNzYXJ5IGFkanVzdG1lbnRzIGlmIGl0IGlzIG5vdAotKi8KLQotc3RhdGljIHZvaWQgczNjX3BtX2NoZWNrX3Jlc3VtZV9waW4odW5zaWduZWQgaW50IHBpbiwgdW5zaWduZWQgaW50IGlycW9mZnMpCi17Ci0JLyogbm90aGluZyBoZXJlIHlldCAqLwotfQotCiAvKiBzM2NfcG1fY29uZmlndXJlX2V4dGludAogICoKICAqIGNvbmZpZ3VyZSBhbGwgZXh0ZXJuYWwgaW50ZXJydXB0IHBpbnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvY2xvY2suaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvY2xvY2suaAppbmRleCA5YTgyYjg4Li45ODNjNTc4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9jbG9jay5oCkBAIC0yMSw3ICsyMSw3IEBACiAgKiBAc2V0X3BhcmVudDogc2V0IHRoZSBjbG9jaydzIHBhcmVudCwgc2VlIGNsa19zZXRfcGFyZW50KCkuCiAgKgogICogR3JvdXAgdGhlIGNvbW1vbiBjbG9jayBpbXBsZW1lbnRhdGlvbnMgdG9nZXRoZXIgc28gdGhhdCB3ZQotICogZG9uJ3QgaGF2ZSB0byBrZWVwIHNldHRpbmcgdGhlIHNhbWUgZmllbHMgYWdhaW4uIFdlIGxlYXZlCisgKiBkb24ndCBoYXZlIHRvIGtlZXAgc2V0dGluZyB0aGUgc2FtZSBmaWVsZHMgYWdhaW4uIFdlIGxlYXZlCiAgKiBlbmFibGUgaW4gc3RydWN0IGNsay4KICAqCiAgKiBBZGRpbmcgYW4gZXh0cmEgbGF5ZXIgb2YgaW5kaXJlY3Rpb24gaW50byB0aGUgcHJvY2VzcyBzaG91bGQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZ3Bpby1jZmctaGVscGVycy5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9ncGlvLWNmZy1oZWxwZXJzLmgKaW5kZXggNTYwM2RiMC4uM2FkODM4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9ncGlvLWNmZy1oZWxwZXJzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9ncGlvLWNmZy1oZWxwZXJzLmgKQEAgLTExNCw3ICsxMTQsNyBAQAogICogb2YgY29udHJvbCBwZXIgR1BJTywgZ2VuZXJhbGx5IGluIHRoZSBmb3JtIG9mOgogICoJMDAwMCA9IElucHV0CiAgKgkwMDAxID0gT3V0cHV0Ci0gKglvdGhlcnMgPSBTcGVjaWFsIGZ1bmN0aW9ucyAoZGVwZW5kYW50IG9uIGJhbmspCisgKglvdGhlcnMgPSBTcGVjaWFsIGZ1bmN0aW9ucyAoZGVwZW5kZW50IG9uIGJhbmspCiAgKgogICogTm90ZSwgc2luY2UgdGhlIGNvZGUgdG8gZGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGFyZSB0d28gY29udHJvbAogICogcmVnaXN0ZXJzIGluc3RlYWQgb2Ygb25lLCB3ZSBkbyBub3QgaGF2ZSBhIHNlcGFyYXRlIHNldCBvZiBmdW5jdGlvbnMgZm9yCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2dwaW8tY2ZnLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2dwaW8tY2ZnLmgKaW5kZXggNWUwNGZhNi4uMTc2MmRjYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9ncGlvLWNmZy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZ3Bpby1jZmcuaApAQCAtMTI1LDcgKzEyNSw3IEBACiAgKgogICogVGhlc2UgdmFsdWVzIGNvbnRyb2wgdGhlIHN0YXRlIG9mIHRoZSB3ZWFrIHB1bGwte3VwLGRvd259IHJlc2lzdG9ycwogICogYXZhaWxhYmxlIG9uIG1vc3QgcGlucyBvbiB0aGUgUzNDIHNlcmllcy4gTm90IGFsbCBjaGlwcyBzdXBwb3J0IGJvdGgKLSAqIHVwIG9yIGRvd24gc2V0dGluZ3MsIGFuZCBpdCBtYXkgYmUgZGVwZW5kYW50IG9uIHRoZSBjaGlwIHRoYXQgaXMgYmVpbmcKKyAqIHVwIG9yIGRvd24gc2V0dGluZ3MsIGFuZCBpdCBtYXkgYmUgZGVwZW5kZW50IG9uIHRoZSBjaGlwIHRoYXQgaXMgYmVpbmcKICAqIHVzZWQgdG8gd2hldGhlciB0aGUgcGFydGljdWxhciBtb2RlIGlzIGF2YWlsYWJsZS4KICAqLwogI2RlZmluZSBTM0NfR1BJT19QVUxMX05PTkUJKChfX2ZvcmNlIHMzY19ncGlvX3B1bGxfdCkweDAwKQpAQCAtMTM4LDcgKzEzOCw3IEBACiAgKiBAcHVsbDogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBwdWxsIHJlc2lzdG9yLgogICoKICAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgc3RhdGUgb2YgdGhlIHB1bGwte3VwLGRvd259IHJlc2lzdG9yIGZvciB0aGUKLSAqIHNwZWNpZmllZCBwaW4uIEl0IHdpbGwgcmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bGwsIG9yIGEgbmVnYXRpdmUgZXJyb3IKKyAqIHNwZWNpZmllZCBwaW4uIEl0IHdpbGwgcmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBuZWdhdGl2ZSBlcnJvcgogICogY29kZSBpZiB0aGUgcGluIGNhbm5vdCBzdXBwb3J0IHRoZSByZXF1ZXN0ZWQgcHVsbCBzZXR0aW5nLgogICoKICAqIEBwdWxsIGlzIG9uZSBvZiBTM0NfR1BJT19QVUxMX05PTkUsIFMzQ19HUElPX1BVTExfRE9XTiBvciBTM0NfR1BJT19QVUxMX1VQLgpAQCAtMjAyLDcgKzIwMiw3IEBACiAgKiBAZHJ2c3RyOiBUaGUgbmV3IHZhbHVlIG9mIHRoZSBkcml2ZXIgc3RyZW5ndGgKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGRyaXZlciBzdHJlbmd0aCB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBwaW4uCi0gKiBJdCB3aWxsIHJldHVybiAwIGlmIHN1Y2Nlc3NmdWxsLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlIHBpbgorICogSXQgd2lsbCByZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlIHBpbgogICogY2Fubm90IHN1cHBvcnQgdGhlIHJlcXVlc3RlZCBzZXR0aW5nLgogKi8KIGV4dGVybiBpbnQgczVwX2dwaW9fc2V0X2RydnN0cih1bnNpZ25lZCBpbnQgcGluLCBzNXBfZ3Bpb19kcnZzdHJfdCBkcnZzdHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9ncGlvLWNvcmUuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZ3Bpby1jb3JlLmgKaW5kZXggZGFjMzVkMC4uOGNhZDRjZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9ncGlvLWNvcmUuaAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2dwaW8tY29yZS5oCkBAIC0xMDgsNyArMTA4LDcgQEAKICAqIG9mIGNvbnRyb2wgcGVyIEdQSU8sIGdlbmVyYWxseSBpbiB0aGUgZm9ybSBvZjoKICAqIDAwMDAgPSBJbnB1dAogICogMDAwMSA9IE91dHB1dAotICogb3RoZXJzID0gU3BlY2lhbCBmdW5jdGlvbnMgKGRlcGVuZGFudCBvbiBiYW5rKQorICogb3RoZXJzID0gU3BlY2lhbCBmdW5jdGlvbnMgKGRlcGVuZGVudCBvbiBiYW5rKQogICoKICAqIE5vdGUsIHNpbmNlIHRoZSBjb2RlIHRvIGRlYWwgd2l0aCB0aGUgY2FzZSB3aGVyZSB0aGVyZSBhcmUgdHdvIGNvbnRyb2wKICAqIHJlZ2lzdGVycyBpbnN0ZWFkIG9mIG9uZSwgd2UgZG8gbm90IGhhdmUgYSBzZXBhcmF0ZSBzZXQgb2YgZnVuY3Rpb24KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvc2RoY2kuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvc2RoY2kuaAppbmRleCBiMGJkZjE2Li4wNThlMDk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3NkaGNpLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9zZGhjaS5oCkBAIC01Nyw3ICs1Nyw3IEBACiAgKiBAY2ZnX2dwaW86IENvbmZpZ3VyZSB0aGUgR1BJTyBmb3IgYSBzcGVjaWZpYyBjYXJkIGJpdC13aWR0aAogICogQGNmZ19jYXJkOiBDb25maWd1cmUgdGhlIGludGVyZmFjZSBmb3IgYSBzcGVjaWZpYyBjYXJkIGFuZCBzcGVlZC4gVGhpcwogICogICAgICAgICAgICBpcyBuZWNlc3NhcnkgdGhlIGNvbnRyb2xsZXJzIGFuZC9vciBHUElPIGJsb2NrcyByZXF1aXJlIHRoZQotICoJICAgICAgY2hhbmdpbmcgb2YgZHJpdmVyLXN0cmVuZ3RoIGFuZCBvdGhlciBjb250cm9scyBkZXBlbmRhbnQgb24KKyAqCSAgICAgIGNoYW5naW5nIG9mIGRyaXZlci1zdHJlbmd0aCBhbmQgb3RoZXIgY29udHJvbHMgZGVwZW5kZW50IG9uCiAgKgkgICAgICB0aGUgY2FyZCBhbmQgc3BlZWQgb2Ygb3BlcmF0aW9uLgogICoKICAqIEluaXRpYWxpc2F0aW9uIGRhdGEgc3BlY2lmaWMgdG8gZWl0aGVyIHRoZSBtYWNoaW5lIG9yIHRoZSBwbGF0Zm9ybQpAQCAtMTA4LDcgKzEwOCw3IEBACiBleHRlcm4gc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSBzM2NfaHNtbWMyX2RlZl9wbGF0ZGF0YTsKIGV4dGVybiBzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhIHMzY19oc21tYzNfZGVmX3BsYXRkYXRhOwogCi0vKiBIZWxwZXIgZnVuY3Rpb24gYXZhaWxhYmxpdHkgKi8KKy8qIEhlbHBlciBmdW5jdGlvbiBhdmFpbGFiaWxpdHkgKi8KIAogZXh0ZXJuIHZvaWQgczNjMjQxNl9zZXR1cF9zZGhjaTBfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLCBpbnQgdyk7CiBleHRlcm4gdm9pZCBzM2MyNDE2X3NldHVwX3NkaGNpMV9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIGludCB3KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9wbS1jaGVjay5jIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3BtLWNoZWNrLmMKaW5kZXggZTRiYWY3Ni4uNmI3MzNmYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3BtLWNoZWNrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3BtLWNoZWNrLmMKQEAgLTE2NCw3ICsxNjQsNiBAQAogICovCiBzdGF0aWMgdTMyICpzM2NfcG1fcnVuY2hlY2soc3RydWN0IHJlc291cmNlICpyZXMsIHUzMiAqdmFsKQogewotCXZvaWQgKnNhdmVfYXQgPSBwaHlzX3RvX3ZpcnQoczNjX3NsZWVwX3NhdmVfcGh5cyk7CiAJdW5zaWduZWQgbG9uZyBhZGRyOwogCXVuc2lnbmVkIGxvbmcgbGVmdDsKIAl2b2lkICpzdGtwYWdlOwpAQCAtMTkyLDExICsxOTEsNiBAQAogCQkJZ290byBza2lwX2NoZWNrOwogCQl9CiAKLQkJaWYgKGluX3JlZ2lvbihwdHIsIGxlZnQsIHNhdmVfYXQsIDMyKjQgKSkgewotCQkJUzNDX1BNREJHKCJza2lwcGluZyAlMDhseCwgaGFzIHNhdmUgYmxvY2sgaW5cbiIsIGFkZHIpOwotCQkJZ290byBza2lwX2NoZWNrOwotCQl9Ci0KIAkJLyogY2FsY3VsYXRlIGFuZCBjaGVjayB0aGUgY2hlY2tzdW0gKi8KIAogCQljYWxjID0gY3JjMzJfbGUofjAsIHB0ciwgbGVmdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcG0uYyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9wbS5jCmluZGV4IGQ1YjU4ZDMuLjVjMGE0NDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9wbS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9wbS5jCkBAIC0yMTQsOCArMjE0LDkgQEAKICAqCiAgKiBwcmludCBhbnkgSVJRcyBhc3NlcnRlZCBhdCByZXN1bWUgdGltZSAoaWUsIHdlIHdva2UgZnJvbSkKICovCi1zdGF0aWMgdm9pZCBzM2NfcG1fc2hvd19yZXN1bWVfaXJxcyhpbnQgc3RhcnQsIHVuc2lnbmVkIGxvbmcgd2hpY2gsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgbWFzaykKK3N0YXRpYyB2b2lkIF9fbWF5YmVfdW51c2VkIHMzY19wbV9zaG93X3Jlc3VtZV9pcnFzKGludCBzdGFydCwKKwkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgd2hpY2gsCisJCQkJCQkgICB1bnNpZ25lZCBsb25nIG1hc2spCiB7CiAJaW50IGk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9zM2MtcGwzMzAuYyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9zM2MtcGwzMzAuYwppbmRleCBiNGZmOGQ3Li5mODU2MzhjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvczNjLXBsMzMwLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3MzYy1wbDMzMC5jCkBAIC02OCw3ICs2OCw3IEBACiAgKiBAcmVxOiBUd28gcmVxdWVzdHMgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgUEwzMzAgZW5naW5lLgogICogQGNhbGxiYWNrX2ZuOiBDYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgY2xpZW50LgogICogQHJxY2ZnOiBDaGFubmVsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB4ZmVycy4KLSAqIEB4ZmVyX2hlYWQ6IFBvaW50ZXIgdG8gdGhlIHhmZXIgdG8gYmUgbmV4dCBleGNlY3V0ZWQuCisgKiBAeGZlcl9oZWFkOiBQb2ludGVyIHRvIHRoZSB4ZmVyIHRvIGJlIG5leHQgZXhlY3V0ZWQuCiAgKiBAZG1hYzogUG9pbnRlciB0byB0aGUgRE1BQyB0aGF0IG1hbmFnZXMgdGhpcyBjaGFubmVsLCBOVUxMIGlmIHRoZQogICogCWNoYW5uZWwgaXMgYXZhaWxhYmxlIHRvIGJlIGFjcXVpcmVkLgogICogQGNsaWVudDogQ2xpZW50IG9mIHRoaXMgY2hhbm5lbC4gTlVMTCBpZiB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L2Nsb2NrLmggYi9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9jbG9jay5oCmluZGV4IDJhZTY2MDYuLmZjYzBkMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvY2xvY2suaApAQCAtODksNyArODksNyBAQAogICogQHNpYmxpbmc6IG5vZGUgZm9yIGxpc3Qgb2YgY2xvY2tzIGhhdmluZyBzYW1lIHBhcmVudHMKICAqIEBwcml2YXRlX2RhdGE6IGNsb2NrIHNwZWNpZmljIHByaXZhdGUgZGF0YQogICogQG5vZGU6IGxpc3QgdG8gbWFpbnRhaW4gY2xvY2tzIGxpbmVhcmx5Ci0gKiBAY2w6IGNsb2NrbG9vayB1cCBhc3NvaWNhdGVkIHdpdGggdGhpcyBjbG9jaworICogQGNsOiBjbG9ja2xvb2sgdXAgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2xvY2sKICAqIEBkZW50OiBvYmplY3QgZm9yIGRlYnVnZnMKICAqLwogc3RydWN0IGNsayB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMgYi9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKaW5kZXggYmJmM2RhMC4uZjc0Njk1MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYwpAQCAtNzgsNiArNzgsMTQgQEAKIAlwdXRfY3B1KCk7CiB9CiAKK3N0YXRpYyB2b2lkIHZmcF90aHJlYWRfY29weShzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCkKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnBhcmVudCA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKKworCXZmcF9zeW5jX2h3c3RhdGUocGFyZW50KTsKKwl0aHJlYWQtPnZmcHN0YXRlID0gcGFyZW50LT52ZnBzdGF0ZTsKK30KKwogLyoKICAqIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nICdjbWQncywgdGhlIGZvbGxvd2luZwogICogaXMgdHJ1ZSB3aGlsZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIHJ1bjoKQEAgLTEwNCwxMiArMTEyLDE3IEBACiBzdGF0aWMgaW50IHZmcF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICp2KQogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkID0gdjsKKwl1MzIgZnBleGM7CisjaWZkZWYgQ09ORklHX1NNUAorCXVuc2lnbmVkIGludCBjcHU7CisjZW5kaWYKIAotCWlmIChsaWtlbHkoY21kID09IFRIUkVBRF9OT1RJRllfU1dJVENIKSkgewotCQl1MzIgZnBleGMgPSBmbXJ4KEZQRVhDKTsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVEhSRUFEX05PVElGWV9TV0lUQ0g6CisJCWZwZXhjID0gZm1yeChGUEVYQyk7CiAKICNpZmRlZiBDT05GSUdfU01QCi0JCXVuc2lnbmVkIGludCBjcHUgPSB0aHJlYWQtPmNwdTsKKwkJY3B1ID0gdGhyZWFkLT5jcHU7CiAKIAkJLyoKIAkJICogT24gU01QLCBpZiBWRlAgaXMgZW5hYmxlZCwgc2F2ZSB0aGUgb2xkIHN0YXRlIGluCkBAIC0xMzQsMTMgKzE0NywyMCBAQAogCQkgKiBvbGQgc3RhdGUuCiAJCSAqLwogCQlmbXhyKEZQRVhDLCBmcGV4YyAmIH5GUEVYQ19FTik7Ci0JCXJldHVybiBOT1RJRllfRE9ORTsKLQl9CisJCWJyZWFrOwogCi0JaWYgKGNtZCA9PSBUSFJFQURfTk9USUZZX0ZMVVNIKQorCWNhc2UgVEhSRUFEX05PVElGWV9GTFVTSDoKIAkJdmZwX3RocmVhZF9mbHVzaCh0aHJlYWQpOwotCWVsc2UKKwkJYnJlYWs7CisKKwljYXNlIFRIUkVBRF9OT1RJRllfRVhJVDoKIAkJdmZwX3RocmVhZF9leGl0KHRocmVhZCk7CisJCWJyZWFrOworCisJY2FzZSBUSFJFQURfTk9USUZZX0NPUFk6CisJCXZmcF90aHJlYWRfY29weSh0aHJlYWQpOworCQlicmVhazsKKwl9CiAKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3NldHVwLmggYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3NldHVwLmgKaW5kZXggZmY1YjdjZi4uMTYwNTQzZCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zZXR1cC5oCisrKyBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vc2V0dXAuaApAQCAtOTQsNiArOTQsMTMgQEAKIAogI2RlZmluZSBFVEhfSU5WQUxJRF9QSFkJMHhmZgogCisvKiBib2FyZCBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBBVEFHX0JPQVJESU5GTwkweDU0NDEwMDA4CisKK3N0cnVjdCB0YWdfYm9hcmRpbmZvIHsKKwl1MzIJYm9hcmRfbnVtYmVyOworfTsKKwogc3RydWN0IHRhZyB7CiAJc3RydWN0IHRhZ19oZWFkZXIgaGRyOwogCXVuaW9uIHsKQEAgLTEwMiw2ICsxMDksNyBAQAogCQlzdHJ1Y3QgdGFnX2NtZGxpbmUgY21kbGluZTsKIAkJc3RydWN0IHRhZ19jbG9jayBjbG9jazsKIAkJc3RydWN0IHRhZ19ldGhlcm5ldCBldGhlcm5ldDsKKwkJc3RydWN0IHRhZ19ib2FyZGluZm8gYm9hcmRpbmZvOwogCX0gdTsKIH07CiAKQEAgLTEyOCw2ICsxMzYsNyBAQAogCiBleHRlcm4gcmVzb3VyY2Vfc2l6ZV90IGZibWVtX3N0YXJ0OwogZXh0ZXJuIHJlc291cmNlX3NpemVfdCBmYm1lbV9zaXplOworZXh0ZXJuIHUzMiBib2FyZF9udW1iZXI7CiAKIHZvaWQgc2V0dXBfcHJvY2Vzc29yKHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9hdnIzMi9rZXJuZWwvc2V0dXAuYwppbmRleCA1YzcwODM5Li5iYjA5NzRjIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYXZyMzIva2VybmVsL3NldHVwLmMKQEAgLTM5MSw2ICszOTEsMjEgQEAKIF9fdGFndGFibGUoQVRBR19DTE9DSywgcGFyc2VfdGFnX2Nsb2NrKTsKIAogLyoKKyAqIFRoZSBib2FyZF9udW1iZXIgY29ycmVzcG9uZCB0byB0aGUgYmQtPmJpX2JvYXJkX251bWJlciBpbiBVLUJvb3QuIFRoaXMKKyAqIHBhcmFtZXRlciBpcyBvbmx5IGF2YWlsYWJsZSBkdXJpbmcgaW5pdGlhbGlzYXRpb24gYW5kIGNhbiBiZSB1c2VkIGluIHNvbWUKKyAqIGtpbmQgb2YgYm9hcmQgaWRlbnRpZmljYXRpb24uCisgKi8KK3UzMiBfX2luaXRkYXRhIGJvYXJkX251bWJlcjsKKworc3RhdGljIGludCBfX2luaXQgcGFyc2VfdGFnX2JvYXJkaW5mbyhzdHJ1Y3QgdGFnICp0YWcpCit7CisJYm9hcmRfbnVtYmVyID0gdGFnLT51LmJvYXJkaW5mby5ib2FyZF9udW1iZXI7CisKKwlyZXR1cm4gMDsKK30KK19fdGFndGFibGUoQVRBR19CT0FSRElORk8sIHBhcnNlX3RhZ19ib2FyZGluZm8pOworCisvKgogICogU2NhbiB0aGUgdGFnIHRhYmxlIGZvciB0aGlzIHRhZywgYW5kIGNhbGwgaXRzIHBhcnNlIGZ1bmN0aW9uLiBUaGUKICAqIHRhZyB0YWJsZSBpcyBidWlsdCBieSB0aGUgbGlua2VyIGZyb20gYWxsIHRoZSBfX3RhZ3RhYmxlCiAgKiBkZWNsYXJhdGlvbnMuCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hdnIzMi9rZXJuZWwvdHJhcHMuYwppbmRleCBiOTFiMjA0Li43YWEyNTc1IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvYXZyMzIva2VybmVsL3RyYXBzLmMKQEAgLTk1LDI4ICs5NSw2IEBACiAJaW5mby5zaV9jb2RlID0gY29kZTsKIAlpbmZvLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKilhZGRyOwogCWZvcmNlX3NpZ19pbmZvKHNpZ25yLCAmaW5mbywgY3VycmVudCk7Ci0KLQkvKgotCSAqIEluaXQgZ2V0cyBubyBzaWduYWxzIHRoYXQgaXQgZG9lc24ndCBoYXZlIGEgaGFuZGxlciBmb3IuCi0JICogVGhhdCdzIGFsbCB2ZXJ5IHdlbGwsIGJ1dCBpZiBpdCBoYXMgY2F1c2VkIGEgc3luY2hyb25vdXMKLQkgKiBleGNlcHRpb24gYW5kIHdlIGlnbm9yZSB0aGUgcmVzdWx0aW5nIHNpZ25hbCwgaXQgd2lsbCBqdXN0Ci0JICogZ2VuZXJhdGUgdGhlIHNhbWUgZXhjZXB0aW9uIG92ZXIgYW5kIG92ZXIgYWdhaW4gYW5kIHdlIGdldAotCSAqIG5vd2hlcmUuICBCZXR0ZXIgdG8ga2lsbCBpdCBhbmQgbGV0IHRoZSBrZXJuZWwgcGFuaWMuCi0JICovCi0JaWYgKGlzX2dsb2JhbF9pbml0KGN1cnJlbnQpKSB7Ci0JCV9fc2lnaGFuZGxlcl90IGhhbmRsZXI7Ci0KLQkJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCWhhbmRsZXIgPSBjdXJyZW50LT5zaWdoYW5kLT5hY3Rpb25bc2lnbnItMV0uc2Euc2FfaGFuZGxlcjsKLQkJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJaWYgKGhhbmRsZXIgPT0gU0lHX0RGTCkgewotCQkJLyogaW5pdCBoYXMgZ2VuZXJhdGVkIGEgc3luY2hyb25vdXMgZXhjZXB0aW9uCi0JCQkgICBhbmQgaXQgZG9lc24ndCBoYXZlIGEgaGFuZGxlciBmb3IgdGhlIHNpZ25hbCAqLwotCQkJcHJpbnRrKEtFUk5fQ1JJVCAiaW5pdCBoYXMgZ2VuZXJhdGVkIHNpZ25hbCAlbGQgIgotCQkJICAgICAgICJidXQgaGFzIG5vIGhhbmRsZXIgZm9yIGl0XG4iLCBzaWducik7Ci0JCQlkb19leGl0KHNpZ25yKTsKLQkJfQotCX0KIH0KIAogYXNtbGlua2FnZSB2b2lkIGRvX25taSh1bnNpZ25lZCBsb25nIGVjciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2Nsb2NrLmMgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2Nsb2NrLmMKaW5kZXggNDQyZjA4Yy4uODY5MjVmZCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9jbG9jay5jCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvY2xvY2suYwpAQCAtMzUsMjIgKzM1LDMwIEBACiAJc3Bpbl91bmxvY2soJmNsa19saXN0X2xvY2spOwogfQogCitzdGF0aWMgc3RydWN0IGNsayAqX19jbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCit7CisJc3RydWN0IGNsayAqY2xrOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGssICZhdDMyX2Nsb2NrX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGNsay0+ZGV2ID09IGRldiAmJiBzdHJjbXAoaWQsIGNsay0+bmFtZSkgPT0gMCkgeworCQkJcmV0dXJuIGNsazsKKwkJfQorCX0KKworCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOworfQorCiBzdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCiB7CiAJc3RydWN0IGNsayAqY2xrOwogCiAJc3Bpbl9sb2NrKCZjbGtfbGlzdF9sb2NrKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xrLCAmYXQzMl9jbG9ja19saXN0LCBsaXN0KSB7Ci0JCWlmIChjbGstPmRldiA9PSBkZXYgJiYgc3RyY21wKGlkLCBjbGstPm5hbWUpID09IDApIHsKLQkJCXNwaW5fdW5sb2NrKCZjbGtfbGlzdF9sb2NrKTsKLQkJCXJldHVybiBjbGs7Ci0JCX0KLQl9Ci0KKwljbGsgPSBfX2Nsa19nZXQoZGV2LCBpZCk7CiAJc3Bpbl91bmxvY2soJmNsa19saXN0X2xvY2spOwotCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOworCisJcmV0dXJuIGNsazsKIH0KKwogRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKIAogdm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKQEAgLTI1NywxNSArMjY1LDE1IEBACiAJc3Bpbl9sb2NrKCZjbGtfbGlzdF9sb2NrKTsKIAogCS8qIHNob3cgY2xvY2sgdHJlZSBhcyBkZXJpdmVkIGZyb20gdGhlIHRocmVlIG9zY2lsbGF0b3JzICovCi0JY2xrID0gY2xrX2dldChOVUxMLCAib3NjMzJrIik7CisJY2xrID0gX19jbGtfZ2V0KE5VTEwsICJvc2MzMmsiKTsKIAlkdW1wX2Nsb2NrKGNsaywgJnIpOwogCWNsa19wdXQoY2xrKTsKIAotCWNsayA9IGNsa19nZXQoTlVMTCwgIm9zYzAiKTsKKwljbGsgPSBfX2Nsa19nZXQoTlVMTCwgIm9zYzAiKTsKIAlkdW1wX2Nsb2NrKGNsaywgJnIpOwogCWNsa19wdXQoY2xrKTsKIAotCWNsayA9IGNsa19nZXQoTlVMTCwgIm9zYzEiKTsKKwljbGsgPSBfX2Nsa19nZXQoTlVMTCwgIm9zYzEiKTsKIAlkdW1wX2Nsb2NrKGNsaywgJnIpOwogCWNsa19wdXQoY2xrKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9leHRpbnQuYyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvZXh0aW50LmMKaW5kZXggNDdiYTRiOS4uZmJjMmFlYSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9leHRpbnQuYworKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2V4dGludC5jCkBAIC02MSwzNCArNjEsMzQgQEAKIHN0YXRpYyBzdHJ1Y3QgZWljICpubWlfZWljOwogc3RhdGljIGJvb2wgbm1pX2VuYWJsZWQ7CiAKLXN0YXRpYyB2b2lkIGVpY19hY2tfaXJxKHN0cnVjdCBpcnFfY2hpcCAqZCkKK3N0YXRpYyB2b2lkIGVpY19hY2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlzdHJ1Y3QgZWljICplaWMgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkYXRhKTsKKwlzdHJ1Y3QgZWljICplaWMgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAllaWNfd3JpdGVsKGVpYywgSUNSLCAxIDw8IChkLT5pcnEgLSBlaWMtPmZpcnN0X2lycSkpOwogfQogCi1zdGF0aWMgdm9pZCBlaWNfbWFza19pcnEoc3RydWN0IGlycV9jaGlwICpkKQorc3RhdGljIHZvaWQgZWljX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlzdHJ1Y3QgZWljICplaWMgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkYXRhKTsKKwlzdHJ1Y3QgZWljICplaWMgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAllaWNfd3JpdGVsKGVpYywgSURSLCAxIDw8IChkLT5pcnEgLSBlaWMtPmZpcnN0X2lycSkpOwogfQogCi1zdGF0aWMgdm9pZCBlaWNfbWFza19hY2tfaXJxKHN0cnVjdCBpcnFfY2hpcCAqZCkKK3N0YXRpYyB2b2lkIGVpY19tYXNrX2Fja19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBlaWMgKmVpYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOworCXN0cnVjdCBlaWMgKmVpYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCWVpY193cml0ZWwoZWljLCBJQ1IsIDEgPDwgKGQtPmlycSAtIGVpYy0+Zmlyc3RfaXJxKSk7CiAJZWljX3dyaXRlbChlaWMsIElEUiwgMSA8PCAoZC0+aXJxIC0gZWljLT5maXJzdF9pcnEpKTsKIH0KIAotc3RhdGljIHZvaWQgZWljX3VubWFza19pcnEoc3RydWN0IGlycV9jaGlwICpkKQorc3RhdGljIHZvaWQgZWljX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCXN0cnVjdCBlaWMgKmVpYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOworCXN0cnVjdCBlaWMgKmVpYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCWVpY193cml0ZWwoZWljLCBJRVIsIDEgPDwgKGQtPmlycSAtIGVpYy0+Zmlyc3RfaXJxKSk7CiB9CiAKLXN0YXRpYyBpbnQgZWljX3NldF9pcnFfdHlwZShzdHJ1Y3QgaXJxX2NoaXAgKmQsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCitzdGF0aWMgaW50IGVpY19zZXRfaXJxX3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQogewotCXN0cnVjdCBlaWMgKmVpYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOworCXN0cnVjdCBlaWMgKmVpYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCXVuc2lnbmVkIGludCBpcnEgPSBkLT5pcnE7CiAJdW5zaWduZWQgaW50IGkgPSBpcnEgLSBlaWMtPmZpcnN0X2lycTsKIAl1MzIgbW9kZSwgZWRnZSwgbGV2ZWw7CkBAIC0xOTEsNyArMTkxLDcgQEAKIAogCXJlZ3MgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWludF9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmICghcmVncyB8fCAhaW50X2lycSkgeworCWlmICghcmVncyB8fCAoaW50KWludF9pcnEgPD0gMCkgewogCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJtaXNzaW5nIHJlZ3MgYW5kL29yIGlycSByZXNvdXJjZVxuIik7CiAJCXJldHVybiAtRU5YSU87CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9waW8uYyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvcGlvLmMKaW5kZXggZjMwOGUxZC4uMmUwYWE4NSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9waW8uYworKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL3Bpby5jCkBAIC0yNTcsNyArMjU3LDcgQEAKIAlwaW9fd3JpdGVsKHBpbywgSURSLCAxIDw8IChncGlvICYgMHgxZikpOwogfQogCi1zdGF0aWMgdm9pZCBncGlvX2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKSkKK3N0YXRpYyB2b2lkIGdwaW9faXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdW5zaWduZWQJCWdwaW8gPSBpcnFfdG9fZ3BpbyhkLT5pcnEpOwogCXN0cnVjdCBwaW9fZGV2aWNlCSpwaW8gPSAmcGlvX2RldltncGlvID4+IDVdOwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9wbS1hdDMyYXA3MDB4LlMgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL3BtLWF0MzJhcDcwMHguUwppbmRleCAxNzUwM2IwLi5mODY4ZjRjIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL3BtLWF0MzJhcDcwMHguUworKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL3BtLWF0MzJhcDcwMHguUwpAQCAtNTMsNyArNTMsNyBAQAogCXN0LncJcjhbVElfZmxhZ3NdLCByOQogCXVubWFza19pbnRlcnJ1cHRzCiAJc2xlZXAJQ1BVX1NMRUVQX0lETEUKLQkuc2l6ZQljcHVfaWRsZV9zbGVlcCwgLiAtIGNwdV9pZGxlX3NsZWVwCisJLnNpemUJY3B1X2VudGVyX2lkbGUsIC4gLSBjcHVfZW50ZXJfaWRsZQogCiAJLyoKIAkgKiBDb21tb24gcmV0dXJuIHBhdGggZm9yIFBNIGZ1bmN0aW9ucyB0aGF0IGRvbid0IHJ1biBmcm9tCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL0tjb25maWcuZGVidWcgYi9hcmNoL2JsYWNrZmluL0tjb25maWcuZGVidWcKaW5kZXggYWNiODM3OS4uMjY0MTczMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvYmxhY2tmaW4vS2NvbmZpZy5kZWJ1ZwpAQCAtNTksNyArNTksNyBAQAogICAgICAgICAgIGJlIHJlcG9ydGVkIG11bHRpcGxlIGN5Y2xlcyBhZnRlciB0aGUgZXJyb3IgaGFwcGVucy4gVGhpcyBkZWxheQogCSAgY2FuIGNhdXNlIHRoZSB3cm9uZyBhcHBsaWNhdGlvbiwgb3IgZXZlbiB0aGUga2VybmVsIHRvIHJlY2VpdmUgYQogCSAgc2lnbmFsIHRvIGJlIGtpbGxlZC4gSWYgeW91IGFyZSBnZXR0aW5nIEhXIGVycm9ycyBpbiB5b3VyIHN5c3RlbSwKLQkgIHRyeSB0dXJuaW5nIHRoaXMgb24gdG8gZW5zdXJlIHRoZXkgYXJlIGF0IGxlYXN0IGNvbW1pbmcgZnJvbSB0aGUKKwkgIHRyeSB0dXJuaW5nIHRoaXMgb24gdG8gZW5zdXJlIHRoZXkgYXJlIGF0IGxlYXN0IGNvbWluZyBmcm9tIHRoZQogCSAgcHJvcGVyIHRocmVhZC4KIAogCSAgT24gcHJvZHVjdGlvbiBzeXN0ZW1zLCBpdCBpcyBzYWZlIChhbmQgYSBzbWFsbCBvcHRpbWl6YXRpb24pIHRvIHNheSBOLgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3lzdGVtLmgKaW5kZXggMTllMmM3Yy4uNDRiZDBjYyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zeXN0ZW0uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0xOSwxMSArMTksMTEgQEAKICAqIEZvcmNlIHN0cmljdCBDUFUgb3JkZXJpbmcuCiAgKi8KICNkZWZpbmUgbm9wKCkgIF9fYXNtX18gX192b2xhdGlsZV9fICgibm9wO1xuXHQiIDogOiApCi0jZGVmaW5lIG1iKCkgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiIgICA6IDogOiAibWVtb3J5IikKLSNkZWZpbmUgcm1iKCkgIF9fYXNtX18gX192b2xhdGlsZV9fICgiIiAgIDogOiA6ICJtZW1vcnkiKQotI2RlZmluZSB3bWIoKSAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIiICAgOiA6IDogIm1lbW9yeSIpCi0jZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSBkbyB7ICh2b2lkKSB4Y2hnKCZ2YXIsIHZhbHVlKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKSAJCWRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBzbXBfbWIoKSAgbWIoKQorI2RlZmluZSBzbXBfcm1iKCkgcm1iKCkKKyNkZWZpbmUgc21wX3dtYigpIHdtYigpCisjZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSBkbyB7IHZhciA9IHZhbHVlOyBtYigpOyB9IHdoaWxlICgwKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlyZWFkX2JhcnJpZXJfZGVwZW5kcygpCiAKICNpZmRlZiBDT05GSUdfU01QCiBhc21saW5rYWdlIHVuc2lnbmVkIGxvbmcgX19yYXdfeGNoZ18xX2FzbSh2b2xhdGlsZSB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgdmFsdWUpOwpAQCAtMzcsMTYgKzM3LDE2IEBACiAJCQkJCXVuc2lnbmVkIGxvbmcgbmV3LCB1bnNpZ25lZCBsb25nIG9sZCk7CiAKICNpZmRlZiBfX0FSQ0hfU1lOQ19DT1JFX0RDQUNIRQotIyBkZWZpbmUgc21wX21iKCkJZG8geyBiYXJyaWVyKCk7IHNtcF9jaGVja19iYXJyaWVyKCk7IHNtcF9tYXJrX2JhcnJpZXIoKTsgfSB3aGlsZSAoMCkKLSMgZGVmaW5lIHNtcF9ybWIoKQlkbyB7IGJhcnJpZXIoKTsgc21wX2NoZWNrX2JhcnJpZXIoKTsgfSB3aGlsZSAoMCkKLSMgZGVmaW5lIHNtcF93bWIoKQlkbyB7IGJhcnJpZXIoKTsgc21wX21hcmtfYmFycmllcigpOyB9IHdoaWxlICgwKQotI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IGJhcnJpZXIoKTsgc21wX2NoZWNrX2JhcnJpZXIoKTsgfSB3aGlsZSAoMCkKLQorLyogRm9yY2UgQ29yZSBkYXRhIGNhY2hlIGNvaGVyZW5jZSAqLworIyBkZWZpbmUgbWIoKQlkbyB7IGJhcnJpZXIoKTsgc21wX2NoZWNrX2JhcnJpZXIoKTsgc21wX21hcmtfYmFycmllcigpOyB9IHdoaWxlICgwKQorIyBkZWZpbmUgcm1iKCkJZG8geyBiYXJyaWVyKCk7IHNtcF9jaGVja19iYXJyaWVyKCk7IH0gd2hpbGUgKDApCisjIGRlZmluZSB3bWIoKQlkbyB7IGJhcnJpZXIoKTsgc21wX21hcmtfYmFycmllcigpOyB9IHdoaWxlICgwKQorIyBkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IGJhcnJpZXIoKTsgc21wX2NoZWNrX2JhcnJpZXIoKTsgfSB3aGlsZSAoMCkKICNlbHNlCi0jIGRlZmluZSBzbXBfbWIoKQliYXJyaWVyKCkKLSMgZGVmaW5lIHNtcF9ybWIoKQliYXJyaWVyKCkKLSMgZGVmaW5lIHNtcF93bWIoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkJYmFycmllcigpCisjIGRlZmluZSBtYigpCWJhcnJpZXIoKQorIyBkZWZpbmUgcm1iKCkJYmFycmllcigpCisjIGRlZmluZSB3bWIoKQliYXJyaWVyKCkKKyMgZGVmaW5lIHJlYWRfYmFycmllcl9kZXBlbmRzKCkJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3hjaGcodW5zaWduZWQgbG9uZyB4LCB2b2xhdGlsZSB2b2lkICpwdHIsCkBAIC05OSwxMCArOTksMTAgQEAKIAogI2Vsc2UgLyogIUNPTkZJR19TTVAgKi8KIAotI2RlZmluZSBzbXBfbWIoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX3JtYigpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfd21iKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpCWRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBtYigpCWJhcnJpZXIoKQorI2RlZmluZSBybWIoKQliYXJyaWVyKCkKKyNkZWZpbmUgd21iKCkJYmFycmllcigpCisjZGVmaW5lIHJlYWRfYmFycmllcl9kZXBlbmRzKCkJZG8geyB9IHdoaWxlICgwKQogCiBzdHJ1Y3QgX194Y2hnX2R1bW15IHsKIAl1bnNpZ25lZCBsb25nIGFbMTAwXTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdHJhcHMuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdHJhcHMuaAppbmRleCA5ZmUwZGE2Li43MGM0ZTUxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RyYXBzLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90cmFwcy5oCkBAIC01Nyw3ICs1Nyw3IEBACiAjZGVmaW5lIEhXQ194MyhsZXZlbCkgXAogCSJFeHRlcm5hbCBNZW1vcnkgQWRkcmVzc2luZyBFcnJvclxuIgogI2RlZmluZSBFWENfMHgwNChsZXZlbCkgXAotCSJVbmltcGxtZW50ZWQgZXhjZXB0aW9uIG9jY3VyZWRcbiIgXAorCSJVbmltcGxtZW50ZWQgZXhjZXB0aW9uIG9jY3VycmVkXG4iIFwKIAlsZXZlbCAiIC0gTWF5YmUgeW91IGZvcmdvdCB0byBpbnN0YWxsIGEgY3VzdG9tIGV4Y2VwdGlvbiBoYW5kbGVyP1xuIgogI2RlZmluZSBIV0NfeDEyKGxldmVsKSBcCiAJIlBlcmZvcm1hbmNlIE1vbml0b3IgT3ZlcmZsb3dcbiIKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2dwdGltZXJzLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9ncHRpbWVycy5jCmluZGV4IGNkYmUwNzUuLjhiODFkYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2dwdGltZXJzLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZ3B0aW1lcnMuYwpAQCAtMjY4LDcgKzI2OCw3IEBACiAJX2Rpc2FibGVfZ3B0aW1lcnMobWFzayk7CiAJZm9yIChpID0gMDsgaSA8IE1BWF9CTEFDS0ZJTl9HUFRJTUVSUzsgKytpKQogCQlpZiAobWFzayAmICgxIDw8IGkpKQotCQkJZ3JvdXBfcmVnc1tCRklOX1RJTUVSX09DVEVUKGkpXS0+c3RhdHVzIHw9IHRydW5fbWFza1tpXTsKKwkJCWdyb3VwX3JlZ3NbQkZJTl9USU1FUl9PQ1RFVChpKV0tPnN0YXR1cyA9IHRydW5fbWFza1tpXTsKIAlTU1lOQygpOwogfQogRVhQT1JUX1NZTUJPTChkaXNhYmxlX2dwdGltZXJzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2tnZGIuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2tnZGIuYwppbmRleCBiOGNmZTM0Li45YjgwYjE1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9rZ2RiLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwva2dkYi5jCkBAIC0xODEsNyArMTgxLDcgQEAKIAkJcmV0dXJuIC1FTk9TUEM7CiAJfQogCi0JLyogQmVjYXN1ZSBoYXJkd2FyZSBkYXRhIHdhdGNocG9pbnQgaW1wZWxlbWVudGVkIGluIGN1cnJlbnQKKwkvKiBCZWNhdXNlIGhhcmR3YXJlIGRhdGEgd2F0Y2hwb2ludCBpbXBlbGVtZW50ZWQgaW4gY3VycmVudAogCSAqIEJsYWNrZmluIGNhbiBub3QgdHJpZ2dlciBhbiBleGNlcHRpb24gZXZlbnQgYXMgdGhlIGhhcmR3YXJlCiAJICogaW5zdHJjdGlvbiB3YXRjaHBvaW50IGRvZXMsIHdlIGlnbmFvcmUgYWxsIGRhdGEgd2F0Y2ggcG9pbnQgaGVyZS4KIAkgKiBUaGV5IGNhbiBiZSB0dXJuZWQgb24gZWFzaWx5IGFmdGVyIGZ1dHVyZSBibGFja2ZpbiBkZXNpZ24KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3RpbWUtdHMuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3RpbWUtdHMuYwppbmRleCA4YzlhNDNkYS4uY2RiNGJlYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdGltZS10cy5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3RpbWUtdHMuYwpAQCAtMjA2LDggKzIwNiwxNCBAQAogewogCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCA9IGRldl9pZDsKIAlzbXBfbWIoKTsKLQlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKKwkvKgorCSAqIFdlIHdhbnQgdG8gQUNLIGJlZm9yZSB3ZSBoYW5kbGUgc28gdGhhdCB3ZSBjYW4gaGFuZGxlIHNtYWxsZXIgdGltZXIKKwkgKiBpbnRlcnZhbHMuICBUaGlzIHdheSBpZiB0aGUgdGltZXIgZXhwaXJlcyBhZ2FpbiB3aGlsZSB3ZSdyZSBoYW5kbGluZworCSAqIHRoaW5ncywgd2UncmUgbW9yZSBsaWtlbHkgdG8gc2VlIHRoYXQgMm5kIGludCByYXRoZXIgdGhhbiBzd2FsbG93aW5nCisJICogaXQgYnkgQUNLaW5nIHRoZSBpbnQgYXQgdGhlIGVuZCBvZiB0aGlzIGhhbmRsZXIuCisJICovCiAJYmZpbl9ncHRtcjBfYWNrKCk7CisJZXZ0LT5ldmVudF9oYW5kbGVyKGV2dCk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdHJhcHMuYwppbmRleCA1OWMxZGY3Li42NTVmMjVkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3RyYXBzLmMKQEAgLTk4LDcgKzk4LDcgQEAKIAkvKiBzZW5kIHRoZSBhcHByb3ByaWF0ZSBzaWduYWwgdG8gdGhlIHVzZXIgcHJvZ3JhbSAqLwogCXN3aXRjaCAodHJhcG5yKSB7CiAKLQkvKiBUaGlzIHRhYmxlIHdvcmtzIGluIGNvbmp1Y3Rpb24gd2l0aCB0aGUgb25lIGluIC4vbWFjaC1jb21tb24vZW50cnkuUworCS8qIFRoaXMgdGFibGUgd29ya3MgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgb25lIGluIC4vbWFjaC1jb21tb24vZW50cnkuUwogCSAqIFNvbWUgZXhjZXB0aW9ucyBhcmUgaGFuZGxlZCB0aGVyZSAoaW4gYXNzZW1ibHksIGluIGV4Y2VwdGlvbiBzcGFjZSkKIAkgKiBTb21lIGFyZSBoYW5kbGVkIGhlcmUsIChpbiBDLCBpbiBpbnRlcnJ1cHQgc3BhY2UpCiAJICogU29tZSwgbGlrZSBDUExCLCBhcmUgaGFuZGxlZCBpbiBib3RoLCB3aGVyZSB0aGUgbm9ybWFsIHBhdGggaXMKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL2lucy5TIGIvYXJjaC9ibGFja2Zpbi9saWIvaW5zLlMKaW5kZXggM2VkYmQ4ZC4uNzljYWNjZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvaW5zLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvaW5zLlMKQEAgLTY3LDcgKzY3LDcgQEAKICAqICAtIERNQSB2ZXJzaW9uLCB3aGljaCBkbyBub3Qgc3VmZmVyIGZyb20gdGhpcyBpc3N1ZS4gRE1BIHZlcnNpb25zIGhhdmUKICAqICAgICAgZGlmZmVyZW50IG5hbWUgKHByZWZpeGVkIGJ5IGRtYV8gKSwgYW5kIGFyZSBsb2NhdGVkIGluCiAgKiAgICAgIC4uL2tlcm5lbC9iZmluX2RtYV81eHguYwotICogVXNpbmcgdGhlIGRtYSByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgcmVjb21tZW5kZWQgZm9yIHRyYW5zZmVyaW5nIGxhcmdlCisgKiBVc2luZyB0aGUgZG1hIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSByZWNvbW1lbmRlZCBmb3IgdHJhbnNmZXJyaW5nIGxhcmdlCiAgKiBidWZmZXJzIGluL291dCBvZiBGSUZPcy4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9tZW1tb3ZlLlMgYi9hcmNoL2JsYWNrZmluL2xpYi9tZW1tb3ZlLlMKaW5kZXggODBjMjQwYS4uNGVjYTU2NiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtbW92ZS5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL21lbW1vdmUuUwpAQCAtNjAsNyArNjAsNyBAQAogCVtQMCsrXSA9IFIxOwogCiAJQ0MgPSBQMiA9PSAwOyAgICAgICAgICAgICAvKiBhbnkgcmVtYWluaW5nIGJ5dGVzPyAqLwotCVAzID0gSTA7ICAgICAgICAgICAgICAgICAgLyogQW1tZW5kIFAzIHRvIHVwZGF0ZWQgcHRyLiAqLworCVAzID0gSTA7ICAgICAgICAgICAgICAgICAgLyogQW1lbmQgUDMgdG8gdXBkYXRlZCBwdHIuICovCiAJSUYgIUNDIEpVTVAgLkxieXRlczsKIAlQMyA9IEkxOwogCVJUUzsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYwppbmRleCAyYzY5Nzg1Li4zZmEzMzU0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jCkBAIC0yNTMwLDcgKzI1MzAsNyBAQAogc3RhdGljIHN0cnVjdCBwYXRhX3BsYXRmb3JtX2luZm8gYmZpbl9wYXRhX3BsYXRmb3JtX2RhdGEgPSB7CiAJLmlvcG9ydF9zaGlmdCA9IDAsCiB9OwotLyogQ29tcGFjdEZsYXNoIFN0b3JhZ2UgQ2FyZCBNZW1vcnkgTWFwcGVkIEFkcmVzc2luZworLyogQ29tcGFjdEZsYXNoIFN0b3JhZ2UgQ2FyZCBNZW1vcnkgTWFwcGVkIEFkZHJlc3NpbmcKICAqIC9SRUcgPSBBMTEgPSAxCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9wYXRhX3Jlc291cmNlc1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TCmluZGV4IDQ2YWI0NTcuLmY5NjkzM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMKQEAgLTI2OCw3ICsyNjgsNyBAQAogCS8qIFRvIGdldCBoZXJlLCB3ZSBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gY2hhbmdlIGEgQ1BMQgogCSAqIHNvLCBoYW5kbGUgdGhpbmdzIGluIHRyYXBfYyAoQyBjb2RlKSwgYnkgbG93ZXJpbmcgdG8KIAkgKiBJUlE1LCBqdXN0IGxpa2Ugd2Ugbm9ybWFsbHkgZG8uIFNpbmNlIHRoaXMgaXMgbm90IGEKLQkgKiAibm9ybWFsIiByZXR1cm4gcGF0aCwgd2UgaGF2ZSBhIGRvIGFsb3Qgb2Ygc3R1ZmYgdG8KKwkgKiAibm9ybWFsIiByZXR1cm4gcGF0aCwgd2UgaGF2ZSBhIGRvIGEgbG90IG9mIHN0dWZmIHRvCiAJICogdGhlIHN0YWNrIHRvIGdldCByZWFkeSBzbywgd2UgY2FuIGZhbGwgdGhyb3VnaCAtIHdlCiAJICogbmVlZCB0byBtYWtlIGEgQ1BMQiBleGNlcHRpb24gbG9vayBsaWtlIGEgbm9ybWFsIGV4Y2VwdGlvbgogCSAqLwpAQCAtODE3LDcgKzgxNyw3IEBACiAJcmV0cyA9IFtzcCsrXTsKIAogCS8qCi0JICogV2hlbiB3ZSBjb21lIG91dCBvZiByZXN1bWUsIHIwIGNhcnJpZXMgIm9sZCIgdGFzaywgYmVjdWFzZSB3ZSBhcmUKKwkgKiBXaGVuIHdlIGNvbWUgb3V0IG9mIHJlc3VtZSwgcjAgY2FycmllcyAib2xkIiB0YXNrLCBiZWNhdXNlIHdlIGFyZQogCSAqIGluICJuZXciIHRhc2suCiAJICovCiAJcnRzOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9oZWFkLlMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2hlYWQuUwppbmRleCA1ODFlMmIwLi43NmRlNTcyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2hlYWQuUworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2hlYWQuUwpAQCAtMTc0LDcgKzE3NCw3IEBACiAJc3AubCA9IGxvKEtFUk5FTF9DTE9DS19TVEFDSyk7CiAJc3AuaCA9IGhpKEtFUk5FTF9DTE9DS19TVEFDSyk7CiAJY2FsbCBfaW5pdF9jbG9ja3M7Ci0Jc3AgPSB1c3A7CS8qIHVzcCBoYXNudCBiZWVuIHRvdWNoZWQsIHNvIHJlc3RvcmUgZnJvbSB0aGVyZSAqLworCXNwID0gdXNwOwkvKiB1c3AgaGFzbid0IGJlZW4gdG91Y2hlZCwgc28gcmVzdG9yZSBmcm9tIHRoZXJlICovCiAjZW5kaWYKIAogCS8qIFRoaXMgc2VjdGlvbiBrZWVwcyB0aGUgcHJvY2Vzc29yIGluIHN1cGVydmlzb3IgbW9kZQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9zbXAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vc21wLmMKaW5kZXggNmUxN2EyNi4uOGJjZTVlZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9zbXAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3NtcC5jCkBAIC0xMDksMTAgKzEwOSwyMyBAQAogCXN0cnVjdCBibGFja2Zpbl9mbHVzaF9kYXRhICpmZGF0YSA9IGluZm87CiAKIAkvKiBJbnZhbGlkYXRlIHRoZSBtZW1vcnkgaG9sZGluZyB0aGUgYm91bmRzIG9mIHRoZSBmbHVzaGVkIHJlZ2lvbi4gKi8KLQlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylmZGF0YSwKLQkJKHVuc2lnbmVkIGxvbmcpZmRhdGEgKyBzaXplb2YoKmZkYXRhKSk7CisJYmxhY2tmaW5fZGNhY2hlX2ludmFsaWRhdGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpZmRhdGEsCisJCQkJCSAodW5zaWduZWQgbG9uZylmZGF0YSArIHNpemVvZigqZmRhdGEpKTsKIAotCWZsdXNoX2ljYWNoZV9yYW5nZShmZGF0YS0+c3RhcnQsIGZkYXRhLT5lbmQpOworCS8qIE1ha2Ugc3VyZSBhbGwgd3JpdGUgYnVmZmVycyBpbiB0aGUgZGF0YSBzaWRlIG9mIHRoZSBjb3JlCisJICogYXJlIGZsdXNoZWQgYmVmb3JlIHRyeWluZyB0byBpbnZhbGlkYXRlIHRoZSBpY2FjaGUuICBUaGlzCisJICogbmVlZHMgdG8gYmUgYWZ0ZXIgdGhlIGRhdGEgZmx1c2ggYW5kIGJlZm9yZSB0aGUgaWNhY2hlCisJICogZmx1c2ggc28gdGhhdCB0aGUgU1NZTkMgZG9lcyB0aGUgcmlnaHQgdGhpbmcgaW4gcHJldmVudGluZworCSAqIHRoZSBpbnN0cnVjdGlvbiBwcmVmZXRjaGVyIGZyb20gaGl0dGluZyB0aGluZ3MgaW4gY2FjaGVkCisJICogbWVtb3J5IGF0IHRoZSB3cm9uZyB0aW1lIC0tIGl0IHJ1bnMgbXVjaCBmdXJ0aGVyIGFoZWFkIHRoYW4KKwkgKiB0aGUgcGlwZWxpbmUuCisJICovCisJU1NZTkMoKTsKKworCS8qIGlwaV9mbGF1c2hfaWNhY2hlIGlzIGludm9rZWQgYnkgZ2VuZXJpYyBmbHVzaF9pY2FjaGVfcmFuZ2UsCisJICogc28gY2FsbCBibGFja2ZpbiBhcmNoIGljYWNoZSBmbHVzaCBkaXJlY3RseSBoZXJlLgorCSAqLworCWJsYWNrZmluX2ljYWNoZV9mbHVzaF9yYW5nZShmZGF0YS0+c3RhcnQsIGZkYXRhLT5lbmQpOwogfQogCiBzdGF0aWMgdm9pZCBpcGlfY2FsbF9mdW5jdGlvbih1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgaXBpX21lc3NhZ2UgKm1zZykKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9SRUFETUUubW0gYi9hcmNoL2NyaXMvYXJjaC12MTAvUkVBRE1FLm1tCmluZGV4IDUxN2QxZjAuLjY3NzMxZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9SRUFETUUubW0KKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL1JFQURNRS5tbQpAQCAtMzgsNyArMzgsNyBAQAogbWFwIGR1cmluZyBrZXJuZWwtbW9kZSwgc28gdGhhdCB0aGUga2VybmVsIGVhc2lseSBjYW4gYWNjZXNzIHRoZSBjb3JyZXNwb25kaW5nCiB1c2VyLW1vZGUgcHJvY2VzcycgZGF0YS4KIAotQXMgYSBjb21wYXJpc2lvbiwgdGhlIExpbnV4L2kzODYgMi4wIHB1dHMgdGhlIGtlcm5lbCBhbmQgcGh5c2ljYWwgUkFNIGF0CitBcyBhIGNvbXBhcmlzb24sIHRoZSBMaW51eC9pMzg2IDIuMCBwdXRzIHRoZSBrZXJuZWwgYW5kIHBoeXNpY2FsIFJBTSBhdAogYWRkcmVzcyAwLCBvdmVybGFwcGluZyB3aXRoIHRoZSB1c2VyLW1vZGUgdmlydHVhbCBzcGFjZSwgc28gdGhhdCBkZXNjcmlwdG9yCiByZWdpc3RlcnMgYXJlIG5lZWRlZCBmb3IgZWFjaCBtZW1vcnkgYWNjZXNzIHRvIHNwZWNpZnkgd2hpY2ggTU1VIHNwYWNlIHRvCiBtYXAgdGhyb3VnaC4gVGhhdCBjaGFuZ2VkIGluIDIuMiwgcHV0dGluZyB0aGUga2VybmVsL3BoeXNpY2FsIFJBTSBhdCAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3N5bmNfc2VyaWFsLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9zeW5jX3NlcmlhbC5jCmluZGV4IDM5OWRjMWUuLjg1MDI2NTM3IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9zeW5jX3NlcmlhbC5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3N5bmNfc2VyaWFsLmMKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDxhc20vc3luY19zZXJpYWwuaD4KICNpbmNsdWRlIDxhcmNoL2lvX2ludGVyZmFjZV9tdXguaD4KIAotLyogVGhlIHJlY2VpdmVyIGlzIGEgYml0IHRyaWNreSBiZWFjdXNlIG9mIHRoZSBjb250aW51b3VzIHN0cmVhbSBvZiBkYXRhLiovCisvKiBUaGUgcmVjZWl2ZXIgaXMgYSBiaXQgdHJpY2t5IGJlY2F1c2Ugb2YgdGhlIGNvbnRpbnVvdXMgc3RyZWFtIG9mIGRhdGEuKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogVGhyZWUgRE1BIGRlc2NyaXB0b3JzIGFyZSBsaW5rZWQgdG9nZXRoZXIuIEVhY2ggRE1BIGRlc2NyaXB0b3IgaXMgICAgICovCiAvKiByZXNwb25zaWJsZSBmb3IgcG9ydC0+YnVmY2h1bmsgb2YgYSBjb21tb24gYnVmZmVyLiAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL2F4aXNmbGFzaG1hcC5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvYXhpc2ZsYXNobWFwLmMKaW5kZXggM2Q3NTEyNS4uN2IxNTVmOCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvYXhpc2ZsYXNobWFwLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvYXhpc2ZsYXNobWFwLmMKQEAgLTIxNSw3ICsyMTUsNyBAQAogfTsKICNlbmRpZgogCi0vKiBBdXhpbGxpYXJ5IHBhcnRpdGlvbiBpZiB3ZSBmaW5kIGFub3RoZXIgZmxhc2ggKi8KKy8qIEF1eGlsaWFyeSBwYXJ0aXRpb24gaWYgd2UgZmluZCBhbm90aGVyIGZsYXNoICovCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gYXV4X3BhcnRpdGlvbiA9IHsKIAkubmFtZSA9ICJhdXgiLAogCS5zaXplID0gMCwKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL21hY2gtYTMvbmFuZGZsYXNoLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9tYWNoLWEzL25hbmRmbGFzaC5jCmluZGV4IDI1ZDZmMmIuLmY1OGYyYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL21hY2gtYTMvbmFuZGZsYXNoLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbWFjaC1hMy9uYW5kZmxhc2guYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJLyogRW5hYmxlIHRoZSBmb2xsb3dpbmcgZm9yIGEgZmxhc2ggYmFzZWQgYmFkIGJsb2NrIHRhYmxlICovCiAJLyogdGhpcy0+b3B0aW9ucyA9IE5BTkRfVVNFX0ZMQVNIX0JCVDsgKi8KIAotCS8qIFNjYW4gdG8gZmluZCBleGlzdGFuY2Ugb2YgdGhlIGRldmljZSAqLworCS8qIFNjYW4gdG8gZmluZCBleGlzdGVuY2Ugb2YgdGhlIGRldmljZSAqLwogCWlmIChuYW5kX3NjYW4oY3Jpc3YzMl9tdGQsIDEpKSB7CiAJCWVyciA9IC1FTlhJTzsKIAkJZ290byBvdXRfbXRkOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbWFjaC1mcy9uYW5kZmxhc2guYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL21hY2gtZnMvbmFuZGZsYXNoLmMKaW5kZXggYzVhMGY1NC4uZDViMGNjOSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbWFjaC1mcy9uYW5kZmxhc2guYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9tYWNoLWZzL25hbmRmbGFzaC5jCkBAIC0xNTYsNyArMTU2LDcgQEAKIAkvKiBFbmFibGUgdGhlIGZvbGxvd2luZyBmb3IgYSBmbGFzaCBiYXNlZCBiYWQgYmxvY2sgdGFibGUgKi8KIAkvKiB0aGlzLT5vcHRpb25zID0gTkFORF9VU0VfRkxBU0hfQkJUOyAqLwogCi0JLyogU2NhbiB0byBmaW5kIGV4aXN0YW5jZSBvZiB0aGUgZGV2aWNlICovCisJLyogU2NhbiB0byBmaW5kIGV4aXN0ZW5jZSBvZiB0aGUgZGV2aWNlICovCiAJaWYgKG5hbmRfc2NhbihjcmlzdjMyX210ZCwgMSkpIHsKIAkJZXJyID0gLUVOWElPOwogCQlnb3RvIG91dF9pb3I7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9zeW5jX3NlcmlhbC5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvc3luY19zZXJpYWwuYwppbmRleCBjODYzN2E5Li5hNmExODBiIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9zeW5jX3NlcmlhbC5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3N5bmNfc2VyaWFsLmMKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlIDxhc20vc3luY19zZXJpYWwuaD4KIAogCi0vKiBUaGUgcmVjZWl2ZXIgaXMgYSBiaXQgdHJpY2t5IGJlYWN1c2Ugb2YgdGhlIGNvbnRpbnVvdXMgc3RyZWFtIG9mIGRhdGEuKi8KKy8qIFRoZSByZWNlaXZlciBpcyBhIGJpdCB0cmlja3kgYmVjYXVzZSBvZiB0aGUgY29udGludW91cyBzdHJlYW0gb2YgZGF0YS4qLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBUaHJlZSBETUEgZGVzY3JpcHRvcnMgYXJlIGxpbmtlZCB0b2dldGhlci4gRWFjaCBETUEgZGVzY3JpcHRvciBpcyAgICAgKi8KIC8qIHJlc3BvbnNpYmxlIGZvciBwb3J0LT5idWZjaHVuayBvZiBhIGNvbW1vbiBidWZmZXIuICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9lbnRyeS5TCmluZGV4IDBlY2I1MGIuLjNhYmYxMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2VudHJ5LlMKQEAgLTE4Miw3ICsxODIsNyBAQAogCW1vdmUuZAkkcjAsIFskc3BdCiAKIAk7OyBUaGUgcmVnaXN0ZXJzIGNhcnJ5aW5nIHBhcmFtZXRlcnMgKFIxMC1SMTMpIGFyZSBpbnRhY3QuIFRoZSBvcHRpb25hbAotCTs7IGZpZnRoIGFuZCBzaXh0aCBwYXJhbWV0ZXJzIGlzIGluIE1PRiBhbmQgU1JQIHJlc3BlY3Rpdmx5LiBQdXQgdGhlbQorCTs7IGZpZnRoIGFuZCBzaXh0aCBwYXJhbWV0ZXJzIGlzIGluIE1PRiBhbmQgU1JQIHJlc3BlY3RpdmVseS4gUHV0IHRoZW0KIAk7OyBiYWNrIG9uIHRoZSBzdGFjay4KIAlzdWJxCTQsICRzcAogCW1vdmUJJHNycCwgWyRzcF0KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvaXJxLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2lycS5jCmluZGV4IDgwMjMxNzYuLjY4YTFhNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9pcnEuYwpAQCAtMzc0LDcgKzM3NCw3IEBACiAJaXJxX2VudGVyKCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTkJSX1JFR1M7IGkrKykgewotCQkvKiBHZXQgd2hpY2ggSVJRcyB0aGF0IGhhcHBlbmQuICovCisJCS8qIEdldCB3aGljaCBJUlFzIHRoYXQgaGFwcGVuZWQuICovCiAJCW1hc2tlZFtpXSA9IFJFR19SRF9JTlRfVkVDVChpbnRyX3ZlY3QsIGlycV9yZWdzW2NwdV0sCiAJCQlyX21hc2tlZF92ZWN0LCBpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9rZ2RiLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2tnZGIuYwppbmRleCA2YjY1MzMyLi5jMDM0M2MzIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2tnZGIuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2tnZGIuYwpAQCAtOTI1LDcgKzkyNSw3IEBACiAKIAkJCQkJaWYgKHJlZy5lZGEgPj0gYnBfZF9yZWdzW2JwICogMl0gJiYKIAkJCQkJICAgIHJlZy5lZGEgPD0gYnBfZF9yZWdzW2JwICogMiArIDFdKSB7Ci0JCQkJCQkvKiBFREEgd2l0aGluZyByYW5nZSBmb3IgdGhpcyBCUDsgaXQgbXVzdCBiZSB0aGUgb25lCisJCQkJCQkvKiBFREEgd2l0aGluIHJhbmdlIGZvciB0aGlzIEJQOyBpdCBtdXN0IGJlIHRoZSBvbmUKIAkJCQkJCSAgIHdlJ3JlIGxvb2tpbmcgZm9yLiAqLwogCQkJCQkJc3RvcHBlZF9kYXRhX2FkZHJlc3MgPSByZWcuZWRhOwogCQkJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDU2MmY4NDcuLjA1NzBlOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xNDksNyArMTQ5LDcgQEAKICAgICAgICAgY2hpbGRyZWdzLT5yMTAgPSAwOwkvKiBDaGlsZCByZXR1cm5zIDAgYWZ0ZXIgYSBmb3JrL2Nsb25lLiAqLwogCiAJLyogU2V0IGEgbmV3IFRMUyA/Ci0JICogVGhlIFRMUyBpcyBpbiAkbW9mIGJlYWN1c2UgaXQgaXMgdGhlIDV0aCBhcmd1bWVudCB0byBzeXNfY2xvbmUuCisJICogVGhlIFRMUyBpcyBpbiAkbW9mIGJlY2F1c2UgaXQgaXMgdGhlIDV0aCBhcmd1bWVudCB0byBzeXNfY2xvbmUuCiAJICovCiAJaWYgKHAtPm1tICYmIChjbG9uZV9mbGFncyAmIENMT05FX1NFVFRMUykpIHsKIAkJdGFza190aHJlYWRfaW5mbyhwKS0+dGxzID0gcmVncy0+bW9mOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc2lnbmFsLmMKaW5kZXggYjNhMDVhZS4uY2U0YWIxYSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NpZ25hbC5jCkBAIC02MTAsNyArNjEwLDcgQEAKIAkJdXNlcl9yZWdzKHRpKS0+c3BjID0gMDsKIAl9CiAJLyogRklYTUU6IEZpbHRlciBvdXQgZmFsc2UgaC93IGJyZWFrcG9pbnQgaGl0cyAoaS5lLiBFREEKLQkgICBub3Qgd2l0aGluZyBhbnkgY29uZmlndXJlZCBoL3cgYnJlYWtwb2ludCByYW5nZSkuIFN5bmNocm9uaXplIHdpdGgKKwkgICBub3Qgd2l0aGluIGFueSBjb25maWd1cmVkIGgvdyBicmVha3BvaW50IHJhbmdlKS4gU3luY2hyb25pemUgd2l0aAogCSAgIHdoYXQgYWxyZWFkeSBleGlzdHMgZm9yIGtlcm5lbCBkZWJ1Z2dpbmcuICAqLwogCWlmICgoKHVzZXJfcmVncyh0aSktPmV4cyAmIDB4ZmYwMCkgPj4gOCkgPT0gQlJFQUtfOF9JTlRSX1ZFQ1QpIHsKIAkJLyogQnJlYWsgODogc3VidHJhY3QgMiBmcm9tIEVSUCB1bmxlc3MgaW4gYSBkZWxheSBzbG90LiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtYTMvYXJiaXRlci5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtYTMvYXJiaXRlci5jCmluZGV4IDhiOTI0ZGIuLjE1ZjVjOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWEzL2FyYml0ZXIuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1hMy9hcmJpdGVyLmMKQEAgLTU2OCw3ICs1NjgsNyBAQAogCVJFR19XUihtYXJiX2Zvb19icCwgd2F0Y2gtPmluc3RhbmNlLCByd19hY2ssIGFjayk7CiAJUkVHX1dSKG1hcmJfZm9vLCByZWdpX21hcmJfZm9vLCByd19hY2tfaW50ciwgYWNrX2ludHIpOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIklSUSBvY2N1cmVkIGF0ICVYXG4iLCAodW5zaWduZWQpZ2V0X2lycV9yZWdzKCkpOworCXByaW50ayhLRVJOX0RFQlVHICJJUlEgb2NjdXJyZWQgYXQgJVhcbiIsICh1bnNpZ25lZClnZXRfaXJxX3JlZ3MoKSk7CiAKIAlpZiAod2F0Y2gtPmNiKQogCQl3YXRjaC0+Y2IoKTsKQEAgLTYyNCw3ICs2MjQsNyBAQAogCVJFR19XUihtYXJiX2Jhcl9icCwgd2F0Y2gtPmluc3RhbmNlLCByd19hY2ssIGFjayk7CiAJUkVHX1dSKG1hcmJfYmFyLCByZWdpX21hcmJfYmFyLCByd19hY2tfaW50ciwgYWNrX2ludHIpOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIklSUSBvY2N1cmVkIGF0ICVYXG4iLCAodW5zaWduZWQpZ2V0X2lycV9yZWdzKCktPmVycCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIklSUSBvY2N1cnJlZCBhdCAlWFxuIiwgKHVuc2lnbmVkKWdldF9pcnFfcmVncygpLT5lcnApOwogCiAJaWYgKHdhdGNoLT5jYikKIAkJd2F0Y2gtPmNiKCk7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1mcy9hcmJpdGVyLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1mcy9hcmJpdGVyLmMKaW5kZXggODJlZjI5My4uM2Y4ZWJiNSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvYXJiaXRlci5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL2FyYml0ZXIuYwpAQCAtMzk1LDcgKzM5NSw3IEBACiAJUkVHX1dSKG1hcmJfYnAsIHdhdGNoLT5pbnN0YW5jZSwgcndfYWNrLCBhY2spOwogCVJFR19XUihtYXJiLCByZWdpX21hcmIsIHJ3X2Fja19pbnRyLCBhY2tfaW50cik7CiAKLQlwcmludGsoS0VSTl9JTkZPICJJUlEgb2NjdXJlZCBhdCAlbFhcbiIsIGdldF9pcnFfcmVncygpLT5lcnApOworCXByaW50ayhLRVJOX0lORk8gIklSUSBvY2N1cnJlZCBhdCAlbFhcbiIsIGdldF9pcnFfcmVncygpLT5lcnApOwogCiAJaWYgKHdhdGNoLT5jYikKIAkJd2F0Y2gtPmNiKCk7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYm9vdC9yZXNjdWUvaGVhZF92MTAuUyBiL2FyY2gvY3Jpcy9ib290L3Jlc2N1ZS9oZWFkX3YxMC5TCmluZGV4IDJmYWZlMjQuLmFmNTVkZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9ib290L3Jlc2N1ZS9oZWFkX3YxMC5TCisrKyBiL2FyY2gvY3Jpcy9ib290L3Jlc2N1ZS9oZWFkX3YxMC5TCkBAIC03LDcgKzcsNyBAQAogICogZm9yIGVhY2ggcGFydGl0aW9uIHRoYXQgdGhpcyBjb2RlIHNob3VsZCBjaGVjay4KICAqCiAgKiBJZiBhbnkgb2YgdGhlIGNoZWNrc3VtcyBmYWlsLCB3ZSBhc3N1bWUgdGhlIGZsYXNoIGlzIHNvCi0gKiBjb3JydXB0IHRoYXQgd2UgY2FudCB1c2UgaXQgdG8gYm9vdCBpbnRvIHRoZSBmdHAgZmxhc2gKKyAqIGNvcnJ1cHQgdGhhdCB3ZSBjYW4ndCB1c2UgaXQgdG8gYm9vdCBpbnRvIHRoZSBmdHAgZmxhc2gKICAqIGxvYWRlciwgYW5kIGluc3RlYWQgd2UgaW5pdGlhbGl6ZSB0aGUgc2VyaWFsIHBvcnQgdG8KICAqIHJlY2VpdmUgYSBmbGFzaC1sb2FkZXIgYW5kIG5ldyBmbGFzaCBpbWFnZS4gd2UgZG9udCBpbmNsdWRlCiAgKiBhbnkgZmxhc2ggY29kZSBoZXJlLCBidXQganVzdCBhY2NlcHQgYSBjZXJ0YWluIGFtb3VudCBvZgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9od3JlZ3MvTWFrZWZpbGUgYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9hcmNoL2h3cmVncy9NYWtlZmlsZQppbmRleCBmOWEwNWQyLi5iOGIzZjhkIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9hcmNoL2h3cmVncy9NYWtlZmlsZQorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9hcmNoL2h3cmVncy9NYWtlZmlsZQpAQCAtMSw2ICsxLDYgQEAKICMgTWFrZWZpbGUgdG8gZ2VuZXJhdGUgb3IgY29weSB0aGUgbGF0ZXN0IHJlZ2lzdGVyIGRlZmluaXRpb25zCiAjIGFuZCByZWxhdGVkIGRhdGFzdHJ1Y3R1cmVzIGFuZCBoZWxwZXJtYWNyb3MuCi0jIFRoZSBvZmZpY2FsIHBsYWNlIGZvciB0aGVzZSBmaWxlcyBpcyBhdDoKKyMgVGhlIG9mZmljaWFsIHBsYWNlIGZvciB0aGVzZSBmaWxlcyBpcyBhdDoKIFJFTEVBU0UgPz0gcjFfYWxmYTUKIE9GRklDSUFMX0lOQ0RJUiA9IC9uL2FzaWMvcHJvamVjdHMvZ3Vpbm5lc3MvcmVsZWFzZXMvJChSRUxFQVNFKS9kZXNpZ24vdG9wL3N3L2luY2x1ZGUvCiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvaHdyZWdzL2lvcC9NYWtlZmlsZSBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvaHdyZWdzL2lvcC9NYWtlZmlsZQppbmRleCBhOTAwNTZhLi4wNzQ3YTIyIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9hcmNoL2h3cmVncy9pb3AvTWFrZWZpbGUKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9od3JlZ3MvaW9wL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogIyAkSWQ6IE1ha2VmaWxlLHYgMS4zIDIwMDQvMDEvMDcgMjA6MzQ6NTUgam9oYW5hIEV4cCAkCiAjIE1ha2VmaWxlIHRvIGdlbmVyYXRlIG9yIGNvcHkgdGhlIGxhdGVzdCByZWdpc3RlciBkZWZpbml0aW9ucwogIyBhbmQgcmVsYXRlZCBkYXRhc3RydWN0dXJlcyBhbmQgaGVscGVybWFjcm9zLgotIyBUaGUgb2ZmaWNhbCBwbGFjZSBmb3IgdGhlc2UgZmlsZXMgaXMgcHJvYmFibHkgYXQ6CisjIFRoZSBvZmZpY2lhbCBwbGFjZSBmb3IgdGhlc2UgZmlsZXMgaXMgcHJvYmFibHkgYXQ6CiBSRUxFQVNFID89IHIxX2FsZmE1CiBJT1BPRkZJQ0lBTF9JTkNESVIgPSAvbi9hc2ljL3Byb2plY3RzL2d1aW5uZXNzL3JlbGVhc2VzLyQoUkVMRUFTRSkvZGVzaWduL3RvcC9zdy9pbmNsdWRlLwogCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCA5ZWFhZTIxLi43ZGY0MzAxIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTk3LDcgKzk3LDcgQEAKICNkZWZpbmUgcHRlX2NsZWFyKG1tLGFkZHIseHApCWRvIHsgcHRlX3ZhbCgqKHhwKSkgPSAwOyB9IHdoaWxlICgwKQogCiAjZGVmaW5lIHBtZF9ub25lKHgpICAgICAoIXBtZF92YWwoeCkpCi0vKiBieSByZW1vdmluZyB0aGUgX1BBR0VfS0VSTkVMIGJpdCBmcm9tIHRoZSBjb21wYXJpc2lvbiwgdGhlIHNhbWUgcG1kX2JhZAorLyogYnkgcmVtb3ZpbmcgdGhlIF9QQUdFX0tFUk5FTCBiaXQgZnJvbSB0aGUgY29tcGFyaXNvbiwgdGhlIHNhbWUgcG1kX2JhZAogICogd29ya3MgZm9yIGJvdGggX1BBR0VfVEFCTEUgYW5kIF9LRVJOUEdfVEFCTEUgcG1kIGVudHJpZXMuCiAgKi8KICNkZWZpbmUJcG1kX2JhZCh4KQkoKHBtZF92YWwoeCkgJiAoflBBR0VfTUFTSyAmIH5fUEFHRV9LRVJORUwpKSAhPSBfUEFHRV9UQUJMRSkKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvY3Jpcy9rZXJuZWwvdHJhcHMuYwppbmRleCA1NDFlZmJmMC4uOGRhNTNmMyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvY3Jpcy9rZXJuZWwvdHJhcHMuYwpAQCAtMTgzLDcgKzE4Myw3IEBACiAKIC8qCiAgKiBUaGlzIGdldHMgY2FsbGVkIGZyb20gZW50cnkuUyB3aGVuIHRoZSB3YXRjaGRvZyBoYXMgYml0dGVuLiBTaG93IHNvbWV0aGluZwotICogc2ltaWxpYXIgdG8gYW4gT29wcyBkdW1wLCBhbmQgaWYgdGhlIGtlcm5lbCBpcyBjb25maWd1cmVkIHRvIGJlIGEgbmljZQorICogc2ltaWxhciB0byBhbiBPb3BzIGR1bXAsIGFuZCBpZiB0aGUga2VybmVsIGlzIGNvbmZpZ3VyZWQgdG8gYmUgYSBuaWNlCiAgKiBkb2dneSwgdGhlbiBoYWx0IGluc3RlYWQgb2YgcmVib290LgogICovCiB2b2lkCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS9wY2kuaCBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3BjaS5oCmluZGV4IDBkNTk5NzkuLmVmMDNiYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3BjaS5oCisrKyBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3BjaS5oCkBAIC01NCw3ICs1NCw3IEBACiAjZW5kaWYKIAogLyoKLSAqCVRoZXNlIGFyZSBwcmV0dHkgbXVjaCBhcmJpdGFyeSB3aXRoIHRoZSBDb01FTSBpbXBsZW1lbnRhdGlvbi4KKyAqCVRoZXNlIGFyZSBwcmV0dHkgbXVjaCBhcmJpdHJhcnkgd2l0aCB0aGUgQ29NRU0gaW1wbGVtZW50YXRpb24uCiAgKglXZSBoYXZlIHRoZSB3aG9sZSBhZGRyZXNzIHNwYWNlIHRvIG91cnNlbHZlcy4KICAqLwogI2RlZmluZSBQQ0lCSU9TX01JTl9JTwkJMHgxMDAKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3Nwci1yZWdzLmggYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS9zcHItcmVncy5oCmluZGV4IDAxZTZhZjUuLmQzODgzMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3Nwci1yZWdzLmgKKysrIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vc3ByLXJlZ3MuaApAQCAtMjc0LDcgKzI3NCw3IEBACiAjZGVmaW5lIE1TUjBfUkQJCQkweGMwMDAwMDAwCS8qIHJvdW5kaW5nIG1vZGUgKi8KICNkZWZpbmUgTVNSMF9SRF9ORUFSRVNUCQkweDAwMDAwMDAwCS8qIC0gbmVhcmVzdCAqLwogI2RlZmluZSBNU1IwX1JEX1pFUk8JCTB4NDAwMDAwMDAJLyogLSB6ZXJvICovCi0jZGVmaW5lIE1TUjBfUkRfUE9TX0lORgkJMHg4MDAwMDAwMAkvKiAtIHBvc3RpdmUgaW5maW5pdHkgKi8KKyNkZWZpbmUgTVNSMF9SRF9QT1NfSU5GCQkweDgwMDAwMDAwCS8qIC0gcG9zaXRpdmUgaW5maW5pdHkgKi8KICNkZWZpbmUgTVNSMF9SRF9ORUdfSU5GCQkweGMwMDAwMDAwCS8qIC0gbmVnYXRpdmUgaW5maW5pdHkgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3ZpcnRjb252ZXJ0LmggYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS92aXJ0Y29udmVydC5oCmluZGV4IDU5Nzg4ZmEuLmIyNmQ3MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3ZpcnRjb252ZXJ0LmgKKysrIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vdmlydGNvbnZlcnQuaApAQCAtMSw0ICsxLDQgQEAKLS8qIHZpcnRjb252ZXJ0Lmg6IHZpcnR1YWwvcGh5c2ljYWwvcGFnZSBhZGRyZXNzIGNvbnZlcnRpb24KKy8qIHZpcnRjb252ZXJ0Lmg6IHZpcnR1YWwvcGh5c2ljYWwvcGFnZSBhZGRyZXNzIGNvbnZlcnNpb24KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL2VudHJ5LXRhYmxlLlMgYi9hcmNoL2Zydi9rZXJuZWwvZW50cnktdGFibGUuUwppbmRleCBiZjM1ZjMzLi4wNmM1YWUxIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvZW50cnktdGFibGUuUworKysgYi9hcmNoL2Zydi9rZXJuZWwvZW50cnktdGFibGUuUwpAQCAtODYsNyArODYsNyBAQAogCS5nbG9ibAkJX19icmVha19rZXJuZWx0cmFwX2ZpeHVwX3RhYmxlCiBfX2JyZWFrX2tlcm5lbHRyYXBfZml4dXBfdGFibGU6CiAKLQkjIGhhbmRsZXIgZGVjbGFyYXRpb24gZm9yIGEgc29md2FyZSBvciBwcm9ncmFtIGludGVycnVwdAorCSMgaGFuZGxlciBkZWNsYXJhdGlvbiBmb3IgYSBzb2Z0d2FyZSBvciBwcm9ncmFtIGludGVycnVwdAogLm1hY3JvIFZFQ1RPUl9TT0ZUUFJPRyB0YnJfdHQsIHZlYwogCS5zZWN0aW9uIC50cmFwLnVzZXIKIAkub3JnCQlcdGJyX3R0CkBAIC0xNDUsNyArMTQ1LDcgQEAKIAkubG9uZwkJXHZlYwogLmVuZG0KIAotCSMgaGFuZGxlciBkZWNsYXJhdGlvbiBmb3IgYW4gTU1VIG9ubHkgc29md2FyZSBvciBwcm9ncmFtIGludGVycnVwdAorCSMgaGFuZGxlciBkZWNsYXJhdGlvbiBmb3IgYW4gTU1VIG9ubHkgc29mdHdhcmUgb3IgcHJvZ3JhbSBpbnRlcnJ1cHQKIC5tYWNybyBWRUNUT1JfU1BfTU1VIHRicl90dCwgdmVjCiAjaWZkZWYgQ09ORklHX01NVQogIAlWRUNUT1JfU09GVFBST0cJXHRicl90dCwgXHZlYwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L0tjb25maWcgYi9hcmNoL2lhNjQvS2NvbmZpZwppbmRleCBjNGVhMDkyLi5lNWNjNTZhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvS2NvbmZpZworKysgYi9hcmNoL2lhNjQvS2NvbmZpZwpAQCAtNDE0LDExICs0MTQsMTEgQEAKIAlzdXBwb3J0LiAKIAogY29uZmlnIEZPUkNFX0NQRUlfUkVUQVJHRVQKLQlib29sICJGb3JjZSBhc3N1bXB0aW9uIHRoYXQgQ1BFSSBjYW4gYmUgcmUtdGFyZ2V0dGVkIgorCWJvb2wgIkZvcmNlIGFzc3VtcHRpb24gdGhhdCBDUEVJIGNhbiBiZSByZS10YXJnZXRlZCIKIAlkZXBlbmRzIG9uIFBFUk1JVF9CU1BfUkVNT1ZFCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQotCVNheSBZIGlmIHlvdSBuZWVkIHRvIGZvcmNlIHRoZSBhc3N1bXB0aW9uIHRoYXQgQ1BFSSBjYW4gYmUgcmUtdGFyZ2V0dGVkIHRvCisJU2F5IFkgaWYgeW91IG5lZWQgdG8gZm9yY2UgdGhlIGFzc3VtcHRpb24gdGhhdCBDUEVJIGNhbiBiZSByZS10YXJnZXRlZCB0bwogCWFueSBjcHUgaW4gdGhlIHN5c3RlbS4gVGhpcyBoaW50IGlzIGF2YWlsYWJsZSB2aWEgQUNQSSAzLjAgc3BlY2lmaWNhdGlvbnMuCiAJVGlnZXI0IHN5c3RlbXMgYXJlIGNhcGFibGUgb2YgcmUtZGlyZWN0aW5nIENQRUkgdG8gYW55IENQVSBvdGhlciB0aGFuIEJTUC4KIAlUaGlzIG9wdGlvbiBpdCB1c2VmdWwgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZSBvbiBvbGRlciBCSU9TJ3MgYXMgd2VsbC4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wYWwuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wYWwuaAppbmRleCA2YTI5MjUwLi4yZTY5Mjg0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGFsLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BhbC5oCkBAIC0xNjY5LDcgKzE2NjksNyBAQAogfSBwYWxfdnBfaW5mb191X3Q7CiAKIC8qCi0gKiBSZXR1cm5zIGluZm9tYXRpb24gYWJvdXQgdmlydHVhbCBwcm9jZXNzb3IgZmVhdHVyZXMKKyAqIFJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdmlydHVhbCBwcm9jZXNzb3IgZmVhdHVyZXMKICAqLwogc3RhdGljIGlubGluZSBzNjQKIGlhNjRfcGFsX3ZwX2luZm8gKHU2NCBmZWF0dXJlX3NldCwgdTY0IHZwX2J1ZmZlciwgdTY0ICp2cF9pbmZvLCB1NjQgKnZtbV9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wZXJmbW9uX2RlZmF1bHRfc21wbC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BlcmZtb25fZGVmYXVsdF9zbXBsLmgKaW5kZXggNzQ3MjRiMi4uYTJkNTYwYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BlcmZtb25fZGVmYXVsdF9zbXBsLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BlcmZtb25fZGVmYXVsdF9zbXBsLmgKQEAgLTY3LDggKzY3LDggQEAKICAgICAgICAgdW5zaWduZWQgbG9uZyAgIGlwOyAgICAgICAgICAgICAgICAgICAgIC8qIHdoZXJlIGRpZCB0aGUgb3ZlcmZsb3cgaW50ZXJydXB0IGhhcHBlbmVkICAqLwogICAgICAgICB1bnNpZ25lZCBsb25nICAgdHN0YW1wOyAgICAgICAgICAgICAgICAgLyogYXIuaXRjIHdoZW4gZW50ZXJpbmcgcGVyZm1vbiBpbnRyLiBoYW5kbGVyICovCiAKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgIGNwdTsgICAgICAgICAgICAgICAgICAgIC8qIGNwdSBvbiB3aGljaCB0aGUgb3ZlcmZsb3cgb2NjdXJlZCAqLwotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgc2V0OyAgICAgICAgICAgICAgICAgICAgLyogZXZlbnQgc2V0IGFjdGl2ZSB3aGVuIG92ZXJmbG93IG9jdXJyZWQgICAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgY3B1OyAgICAgICAgICAgICAgICAgICAgLyogY3B1IG9uIHdoaWNoIHRoZSBvdmVyZmxvdyBvY2N1cnJlZCAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgc2V0OyAgICAgICAgICAgICAgICAgICAgLyogZXZlbnQgc2V0IGFjdGl2ZSB3aGVuIG92ZXJmbG93IG9jY3VycmVkICAgKi8KICAgICAgICAgaW50ICAgIAkJdGdpZDsgICAgICAgICAgICAgIAkvKiB0aHJlYWQgZ3JvdXAgaWQgKGZvciBOUFRMLCB0aGlzIGlzIGdldHBpZCgpKSAqLwogfSBwZm1fZGVmYXVsdF9zbXBsX2VudHJ5X3Q7CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zbi9idGUuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zbi9idGUuaAppbmRleCA5Njc5OGQyLi5jYzZjNGRiIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc24vYnRlLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NuL2J0ZS5oCkBAIC0yMTYsNyArMjE2LDcgQEAKIAlidGVfY29weSgwLCBkZXN0LCBsZW4sICgobW9kZSkgfCBCVEVfWkVST19GSUxMKSwgbm90aWZpY2F0aW9uKQogCiAvKgotICogVGhlIGZvbGxvd2luZyBpcyB0aGUgcHJlZmVyZWQgd2F5IG9mIGNhbGxpbmcgYnRlX3VuYWxpZ25lZF9jb3B5CisgKiBUaGUgZm9sbG93aW5nIGlzIHRoZSBwcmVmZXJyZWQgd2F5IG9mIGNhbGxpbmcgYnRlX3VuYWxpZ25lZF9jb3B5CiAgKiBJZiB0aGUgY29weSBpcyBmdWxseSBjYWNoZSBsaW5lIGFsaWduZWQsIHRoZW4gYnRlX2NvcHkgaXMKICAqIHVzZWQgaW5zdGVhZC4gIFNpbmNlIGJ0ZV9jb3B5IGlzIGlubGluZWQsIHRoaXMgc2F2ZXMgYSBjYWxsCiAgKiBzdGFjay4gIE5PVEU6IGJ0ZV9jb3B5IGlzIGNhbGxlZCBzeW5jaHJvbm91c2x5IGFuZCBkb2VzIGJsb2NrCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc24vc2h1Yl9tbXIuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zbi9zaHViX21tci5oCmluZGV4IDdkZTFkMWQuLmE4NGQ4NzAgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zbi9zaHViX21tci5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zbi9zaHViX21tci5oCkBAIC00NTksNyArNDU5LDcgQEAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiBTb21lIE1NUnMgYXJlIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgKG9yIGNsb3NlIGVub3VnaCkgb24gYm90aCBTSFVCMSAqLwogLyogYW5kIFNIVUIyIHRoYXQgaXQgbWFrZXMgc2Vuc2UgdG8gZGVmaW5lIGEgZ2ViZXJpYyBuYW1lIGZvciB0aGUgTU1SLiAgKi8KLS8qIEl0IGlzIGFjY2VwdGlibGUgdG8gdXNlIChmb3IgZXhhbXBsZSkgU0hfSVBJX0lOVCB0byByZWZlcmVuY2UgdGhlICAgICovCisvKiBJdCBpcyBhY2NlcHRhYmxlIHRvIHVzZSAoZm9yIGV4YW1wbGUpIFNIX0lQSV9JTlQgdG8gcmVmZXJlbmNlIHRoZSAgICAqLwogLyogdGhlIElQSSBNTVIuIFRoZSB2YWx1ZSBvZiBTSF9JUElfSU5UIGlzIGRldGVybWluZWQgYXQgcnVudGltZSBiYXNlZCAgKi8KIC8qIG9uIHRoZSB0eXBlIG9mIHRoZSBTSFVCLiBEbyBub3QgdXNlIHRoZXNlICNkZWZpbmVzIGluIHBlcmZvcm1hbmNlICAgICovCiAvKiBjcml0aWNhbCBjb2RlICBvciBsb29wcyAtIHRoZXJlIGlzIGEgc21hbGwgcGVyZm9ybWFuY2UgcGVuYWx0eS4gICAgICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NuL3NodWJpby5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NuL3NodWJpby5oCmluZGV4IDYwNTI0MjIuLmVjYjhhNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zbi9zaHViaW8uaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc24vc2h1YmlvLmgKQEAgLTEzODMsNyArMTM4Myw3IEBACiAgKiByZXNwb25zZSBpcyBjYXB0dXJlIGluIElYU00gYW5kIElYU1MsIGFuZCBJWFNTW1ZBTElEXSBpcyBzZXQuIFRoZSAgICAqCiAgKiBlcnJhbnQgaGVhZGVyIGlzIHRoZXJlYnkgY2FwdHVyZWQsIGFuZCBubyBmdXJ0aGVyIHNwdXJpb3VzIHJlYWQgICAgICAqCiAgKiByZXNwb25lcyBhcmUgY2FwdHVyZWQgdW50aWwgSVhTU1tWQUxJRF0gaXMgY2xlYXJlZCBieSBzZXR0aW5nIHRoZSAgICAqCi0gKiBhcHByb3ByaWF0ZSBiaXQgaW4gSUVDTFIuRXZlcnl0aW1lIGEgc3B1cmlvdXMgcmVhZCByZXNwb25zZSBpcyAgICAgICAqCisgKiBhcHByb3ByaWF0ZSBiaXQgaW4gSUVDTFIuIEV2ZXJ5IHRpbWUgYSBzcHVyaW91cyByZWFkIHJlc3BvbnNlIGlzICAgICAqCiAgKiBkZXRlY3RlZCwgdGhlIFNQVVJfUkQgYml0IG9mIHRoZSBQUkIgY29ycmVzcG9uZGluZyB0byB0aGUgaW5jb21pbmcgICAqCiAgKiBtZXNzYWdlJ3MgU0lETiBmaWVsZCBpcyBzZXQuIFRoaXMgYWx3YXlzIGhhcHBlbnMsIHJlZ2FybGVzcyBvZiAgICAgICAqCiAgKiB3aGV0aGVyIGEgaGVhZGVyIGlzIGNhcHR1cmVkLiBUaGUgcHJvZ3JhbW1lciBzaG91bGQgY2hlY2sgICAgICAgICAgICAqCkBAIC0yNzM4LDcgKzI3MzgsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJCQkJCQkJCQkqCiAgKiBUaGUgZm9sbG93aW5nIGRlZmluZXMgd2hpY2ggd2VyZSBub3QgZm9ybWVkIGludG8gc3RydWN0dXJlcyBhcmUJKgotICogcHJvYmFibHkgaW5kZW50aWNhbCB0byBhbm90aGVyIHJlZ2lzdGVyLCBhbmQgdGhlIG5hbWUgb2YgdGhlCQkqCisgKiBwcm9iYWJseSBpZGVudGljYWwgdG8gYW5vdGhlciByZWdpc3RlciwgYW5kIHRoZSBuYW1lIG9mIHRoZQkJKgogICogcmVnaXN0ZXIgaXMgcHJvdmlkZWQgYWdhaW5zdCBlYWNoIG9mIHRoZXNlIHJlZ2lzdGVycy4gVGhpcwkJKgogICogaW5mb3JtYXRpb24gbmVlZHMgdG8gYmUgY2hlY2tlZCBjYXJlZnVsbHkJCQkJKgogICoJCQkJCQkJCQkqCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2N5Y2xvbmUuYyBiL2FyY2gvaWE2NC9rZXJuZWwvY3ljbG9uZS5jCmluZGV4IGQ1MmYxZjcuLjFiODExYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvY3ljbG9uZS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvY3ljbG9uZS5jCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgIC5yYXRpbmcgICAgICAgICA9IDMwMCwKICAgICAgICAgLnJlYWQgICAgICAgICAgID0gcmVhZF9jeWNsb25lLAogICAgICAgICAubWFzayAgICAgICAgICAgPSAoMUxMIDw8IDQwKSAtIDEsCi0gICAgICAgIC5tdWx0ICAgICAgICAgICA9IDAsIC8qdG8gYmUgY2FsdWNsYXRlZCovCisgICAgICAgIC5tdWx0ICAgICAgICAgICA9IDAsIC8qdG8gYmUgY2FsY3VsYXRlZCovCiAgICAgICAgIC5zaGlmdCAgICAgICAgICA9IDE2LAogICAgICAgICAuZmxhZ3MgICAgICAgICAgPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb25fZGVmYXVsdF9zbXBsLmMgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb25fZGVmYXVsdF9zbXBsLmMKaW5kZXggNWY2MzdiYi4uMzBjNjQ0ZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uX2RlZmF1bHRfc21wbC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbl9kZWZhdWx0X3NtcGwuYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAJICogY3VycmVudCA9IHRhc2sgcnVubmluZyBhdCB0aGUgdGltZSBvZiB0aGUgb3ZlcmZsb3cuCiAJICoKIAkgKiBwZXItdGFzayBtb2RlOgotCSAqIAktIHRoaXMgaXMgdXN1c2FsbHkgdGhlIHRhc2sgYmVpbmcgbW9uaXRvcmVkLgorCSAqIAktIHRoaXMgaXMgdXN1YWxseSB0aGUgdGFzayBiZWluZyBtb25pdG9yZWQuCiAJICogCSAgVW5kZXIgY2VydGFpbiBjb25kaXRpb25zLCBpdCBtaWdodCBiZSBhIGRpZmZlcmVudCB0YXNrCiAJICoKIAkgKiBzeXN0ZW0td2lkZToKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMKaW5kZXggNDRmMTFlZS4uMTRlYzY0MSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMKQEAgLTcwMyw3ICs3MDMsNyBAQAogCQkJCWRhdGEtPmNoaXAtPmlycV9kaXNhYmxlKGRhdGEpOwogCQkJCWRhdGEtPmNoaXAtPmlycV9zZXRfYWZmaW5pdHkoZGF0YSwgbWFzaywgZmFsc2UpOwogCQkJCWRhdGEtPmNoaXAtPmlycV9lbmFibGUoZGF0YSk7Ci0JCQkJcHJpbnRrICgiUmUtdGFyZ2V0dGluZyBDUEVJIHRvIGNwdSAlZFxuIiwgbmV3X2NwZWlfY3B1KTsKKwkJCQlwcmludGsgKCJSZS10YXJnZXRpbmcgQ1BFSSB0byBjcHUgJWRcbiIsIG5ld19jcGVpX2NwdSk7CiAJCQl9CiAJCX0KIAkJaWYgKCFkYXRhKSB7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3RvcG9sb2d5LmMgYi9hcmNoL2lhNjQva2VybmVsL3RvcG9sb2d5LmMKaW5kZXggMGJhYTFiYi4uMGUwZTBjYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC90b3BvbG9neS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdG9wb2xvZ3kuYwpAQCAtNDMsNyArNDMsNyBAQAogewogI2lmZGVmIENPTkZJR19BQ1BJCiAJLyoKLQkgKiBJZiBDUEVJIGNhbiBiZSByZS10YXJnZXR0ZWQgb3IgaWYgdGhpcyBpcyBub3QKKwkgKiBJZiBDUEVJIGNhbiBiZSByZS10YXJnZXRlZCBvciBpZiB0aGlzIGlzIG5vdAogCSAqIENQRUkgdGFyZ2V0LCB0aGVuIGl0IGlzIGhvdHBsdWdnYWJsZQogCSAqLwogCWlmIChjYW5fY3BlaV9yZXRhcmdldCgpIHx8ICFpc19jcHVfY3BlaV90YXJnZXQobnVtKSkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vcHJvY2Vzcy5jIGIvYXJjaC9pYTY0L2t2bS9wcm9jZXNzLmMKaW5kZXggYmI4NjJmYi4uYjAzOTg3NCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9wcm9jZXNzLmMKKysrIGIvYXJjaC9pYTY0L2t2bS9wcm9jZXNzLmMKQEAgLTk4Nyw3ICs5ODcsNyBAQAogCiBzdGF0aWMgdm9pZCBrdm1fZG9fcmVzdW1lX29wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQl2bW1fc2FuaXR5X2NoZWNrKHZjcHUpOyAvKkd1YXJhbnRlZSB2Y3B1IHJ1bmluZyBvbiBoZWFsdGh5IHZtbSEqLworCXZtbV9zYW5pdHlfY2hlY2sodmNwdSk7IC8qR3VhcmFudGVlIHZjcHUgcnVubmluZyBvbiBoZWFsdGh5IHZtbSEqLwogCiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChLVk1fUkVRX1JFU1VNRSwgJnZjcHUtPnJlcXVlc3RzKSkgewogCQl2Y3B1X2RvX3Jlc3VtZSh2Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9saWIvZG9fY3N1bS5TIGIvYXJjaC9pYTY0L2xpYi9kb19jc3VtLlMKaW5kZXggNmJlYzJmYy4uMWE0MzFhNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2xpYi9kb19jc3VtLlMKKysrIGIvYXJjaC9pYTY0L2xpYi9kb19jc3VtLlMKQEAgLTIwMSw3ICsyMDEsNyBAQAogCTs7CiAocDYpCWFkZHMgcmVzdWx0MVswXT0xLHJlc3VsdDFbMF0KIChwOSkJYnIuY29uZC5zcHRrIC5kb19jc3VtX2V4aXQJLy8gaWYgKGNvdW50ID09IDEpIGV4aXQKLQkvLyBGYWxsIHRocm91Z2ggdG8gY2FsdWN1bGF0ZSB0aGUgY2hlY2tzdW0sIGZlZWRpbmcgcmVzdWx0MVswXSBhcworCS8vIEZhbGwgdGhyb3VnaCB0byBjYWxjdWxhdGUgdGhlIGNoZWNrc3VtLCBmZWVkaW5nIHJlc3VsdDFbMF0gYXMKIAkvLyB0aGUgaW5pdGlhbCB2YWx1ZSBpbiByZXN1bHQxWzBdLgogCS8vCiAJLy8gQ2FsY3VsYXRlIHRoZSBjaGVja3N1bSBsb2FkaW5nIHR3byA4LWJ5dGUgd29yZHMgcGVyIGxvb3AuCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL2lycS5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9pcnEuYwppbmRleCAxMzljMDE4Li44MWExZjRlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL2lycS5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaXJxLmMKQEAgLTIyNyw3ICsyMjcsNyBAQAogewogICAgICAgICAvKgogICAgICAgICAgKiBPbiBzeXN0ZW1zIHdoaWNoIHN1cHBvcnQgQ1BVIGRpc2FibGluZyAoU0h1YjIpLCBhbGwgZXJyb3IgaW50ZXJydXB0cwotICAgICAgICAgKiBhcmUgdGFyZ2V0dGVkIGF0IHRoZSBib290IENQVS4KKyAgICAgICAgICogYXJlIHRhcmdldGVkIGF0IHRoZSBib290IENQVS4KICAgICAgICAgICovCiAgICAgICAgIGlmIChpc19zaHViMigpICYmIHNuX3Byb21fZmVhdHVyZV9hdmFpbGFibGUoUFJGX0NQVV9ESVNBQkxFX1NVUFBPUlQpKQogICAgICAgICAgICAgICAgIHNldF9pcnFfYWZmaW5pdHlfaW5mbyhpcnEsIGNwdV9waHlzaWNhbF9pZCgwKSwgMCk7CkBAIC00MzUsNyArNDM1LDcgQEAKIAkvKgogCSAqIEJyaWRnZSB0eXBlcyBhdHRhY2hlZCB0byBUSU8gKGFueXRoaW5nIGJ1dCBQSUMpIGRvIG5vdCBuZWVkIHRoaXMgV0FSCiAJICogc2luY2UgdGhleSBkbyBub3QgdGFyZ2V0IFNodWIgSUkgaW50ZXJydXB0IHJlZ2lzdGVycy4gIElmIHRoYXQKLQkgKiBldmVyIGNoYW5nZXMsIHRoaXMgY2hlY2sgbmVlZHMgdG8gYWNjb21vZGF0ZS4KKwkgKiBldmVyIGNoYW5nZXMsIHRoaXMgY2hlY2sgbmVlZHMgdG8gYWNjb21tb2RhdGUuCiAJICovCiAJaWYgKHNuX2lycV9pbmZvLT5pcnFfYnJpZGdlX3R5cGUgIT0gUENJSU9fQVNJQ19UWVBFX1BJQykKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9kbWEuYyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfZG1hLmMKaW5kZXggYzY1OWFkNS4uMzNkZWY2NiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9kbWEuYworKysgYi9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX2RtYS5jCkBAIC0yMjcsNyArMjI3LDcgQEAKICAqIGFmdGVyIGRvaW5nIHRoZSByZWFkLiAgRm9yIFBJQyB0aGlzIHJvdXRpbmUgdGhlbiBmb3JjZXMgYSBmYWtlIGludGVycnVwdAogICogb24gYW5vdGhlciBsaW5lLCB3aGljaCBpcyBsb2dpY2FsbHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBzbG90IHRoYXQgdGhlIFBJTwogICogaXMgYWRkcmVzc2VkIHRvLiAgSXQgdGhlbiBzcGlucyB3aGlsZSB3YXRjaGluZyB0aGUgbWVtb3J5IGxvY2F0aW9uIHRoYXQKLSAqIHRoZSBpbnRlcnJ1cHQgaXMgdGFyZ2V0dGVkIHRvLiAgV2hlbiB0aGUgaW50ZXJydXB0IHJlc3BvbnNlIGFycml2ZXMsIHdlIAorICogdGhlIGludGVycnVwdCBpcyB0YXJnZXRlZCB0by4gIFdoZW4gdGhlIGludGVycnVwdCByZXNwb25zZSBhcnJpdmVzLCB3ZSAKICAqIGFyZSBzdXJlIHRoYXQgdGhlIERNQSBoYXMgbGFuZGVkIGluIG1lbW9yeSBhbmQgaXQgaXMgc2FmZSBmb3IgdGhlIGRyaXZlcgogICogdG8gcHJvY2VlZC4JRm9yIFRJT0NQIHVzZSB0aGUgRGV2aWNlKHgpIFdyaXRlIFJlcXVlc3QgQnVmZmVyIEZsdXNoIAogICogQnJpZGdlIHJlZ2lzdGVyIHNpbmNlIGl0IGVuc3VyZXMgdGhlIGRhdGEgaGFzIGVudGVyZWQgdGhlIGNvaGVyZW5jZSBkb21haW4sCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vbTMyMTA0dXQvbTMyMTA0dXRfcGxkLmggYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vbTMyMTA0dXQvbTMyMTA0dXRfcGxkLmgKaW5kZXggMmRjODlkNi4uMWZlYWU5NyAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL20zMjEwNHV0L20zMjEwNHV0X3BsZC5oCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9tMzIxMDR1dC9tMzIxMDR1dF9wbGQuaApAQCAtNCw3ICs0LDcgQEAKIC8qCiAgKiBpbmNsdWRlL2FzbS1tMzJyL20zMjEwNHV0L20zMjEwNHV0X3BsZC5oCiAgKgotICogRGVmaW5pdGlvbnMgZm9yIFByb2dyYW1hYmxlIExvZ2ljIERldmljZShQTEQpIG9uIE0zMjEwNFVUIGJvYXJkLgorICogRGVmaW5pdGlvbnMgZm9yIFByb2dyYW1tYWJsZSBMb2dpYyBEZXZpY2UoUExEKSBvbiBNMzIxMDRVVCBib2FyZC4KICAqIEJhc2VkIG9uIG0zMjcwMHV0X3BsZC5oCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAyCVRha2VvIFRha2FoYXNoaQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL20zMjcwMHV0L20zMjcwMHV0X3BsZC5oIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL20zMjcwMHV0L20zMjcwMHV0X3BsZC5oCmluZGV4IDU3NjIzYmUuLjM1Mjk0NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9tMzI3MDB1dC9tMzI3MDB1dF9wbGQuaAorKysgYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vbTMyNzAwdXQvbTMyNzAwdXRfcGxkLmgKQEAgLTQsNyArNCw3IEBACiAvKgogICogaW5jbHVkZS9hc20tbTMyci9tMzI3MDB1dC9tMzI3MDB1dF9wbGQuaAogICoKLSAqIERlZmluaXRpb25zIGZvciBQcm9ncmFtYWJsZSBMb2dpYyBEZXZpY2UoUExEKSBvbiBNMzI3MDBVVCBib2FyZC4KKyAqIERlZmluaXRpb25zIGZvciBQcm9ncmFtbWFibGUgTG9naWMgRGV2aWNlKFBMRCkgb24gTTMyNzAwVVQgYm9hcmQuCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAyCVRha2VvIFRha2FoYXNoaQogICoKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9vcHNwdXQvb3BzcHV0X3BsZC5oIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL29wc3B1dC9vcHNwdXRfcGxkLmgKaW5kZXggM2YxMWVhMS4uNjkwMTQwMSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL29wc3B1dC9vcHNwdXRfcGxkLmgKKysrIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL29wc3B1dC9vcHNwdXRfcGxkLmgKQEAgLTQsNyArNCw3IEBACiAvKgogICogaW5jbHVkZS9hc20tbTMyci9vcHNwdXQvb3BzcHV0X3BsZC5oCiAgKgotICogRGVmaW5pdGlvbnMgZm9yIFByb2dyYW1hYmxlIExvZ2ljIERldmljZShQTEQpIG9uIE9QU1BVVCBib2FyZC4KKyAqIERlZmluaXRpb25zIGZvciBQcm9ncmFtbWFibGUgTG9naWMgRGV2aWNlKFBMRCkgb24gT1BTUFVUIGJvYXJkLgogICoKICAqIENvcHlyaWdodCAoYykgMjAwMglUYWtlbyBUYWthaGFzaGkKICAqCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuaCBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCmluZGV4IGJjYTM0NzUuLjljZGFmNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCkBAIC00NCw3ICs0NCw3IEBACiAjZGVmaW5lIHNldF9wdGVfYXQobW0sYWRkcixwdGVwLHB0ZXZhbCkgc2V0X3B0ZShwdGVwLHB0ZXZhbCkKIAogLyoKLSAqIChwbWRzIGFyZSBmb2xkZWQgaW50byBwZ2RzIHNvIHRoaXMgZG9lc250IGdldCBhY3R1YWxseSBjYWxsZWQsCisgKiAocG1kcyBhcmUgZm9sZGVkIGludG8gcGdkcyBzbyB0aGlzIGRvZXNuJ3QgZ2V0IGFjdHVhbGx5IGNhbGxlZCwKICAqIGJ1dCB0aGUgZGVmaW5lIGlzIG5lZWRlZCBmb3IgYSBnZW5lcmljIGlubGluZSBmdW5jdGlvbi4pCiAgKi8KICNkZWZpbmUgc2V0X3BtZChwbWRwdHIsIHBtZHZhbCkgKCoocG1kcHRyKSA9IHBtZHZhbCkKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9tbS9mYXVsdC5jIGIvYXJjaC9tMzJyL21tL2ZhdWx0LmMKaW5kZXggYjhlYzAwMi4uMmM5YWViNCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9tMzJyL21tL2ZhdWx0LmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogCiAJLyogV2hlbiBydW5uaW5nIGluIHRoZSBrZXJuZWwgd2UgZXhwZWN0IGZhdWx0cyB0byBvY2N1ciBvbmx5IHRvCiAJICogYWRkcmVzc2VzIGluIHVzZXIgc3BhY2UuICBBbGwgb3RoZXIgZmF1bHRzIHJlcHJlc2VudCBlcnJvcnMgaW4gdGhlCi0JICoga2VybmVsIGFuZCBzaG91bGQgZ2VuZXJhdGUgYW4gT09QUy4gIFVuZm9ydHVuYXRseSwgaW4gdGhlIGNhc2Ugb2YgYW4KKwkgKiBrZXJuZWwgYW5kIHNob3VsZCBnZW5lcmF0ZSBhbiBPT1BTLiAgVW5mb3J0dW5hdGVseSwgaW4gdGhlIGNhc2Ugb2YgYW4KIAkgKiBlcnJvbmVvdXMgZmF1bHQgb2NjdXJyaW5nIGluIGEgY29kZSBwYXRoIHdoaWNoIGFscmVhZHkgaG9sZHMgbW1hcF9zZW0KIAkgKiB3ZSB3aWxsIGRlYWRsb2NrIGF0dGVtcHRpbmcgdG8gdmFsaWRhdGUgdGhlIGZhdWx0IGFnYWluc3QgdGhlCiAJICogYWRkcmVzcyBzcGFjZS4gIEx1Y2tpbHkgdGhlIGtlcm5lbCBvbmx5IHZhbGlkbHkgcmVmZXJlbmNlcyB1c2VyCkBAIC0xMjgsNyArMTI4LDcgQEAKIAkgKiBleGNlcHRpb25zIHRhYmxlLgogCSAqCiAJICogQXMgdGhlIHZhc3QgbWFqb3JpdHkgb2YgZmF1bHRzIHdpbGwgYmUgdmFsaWQgd2Ugd2lsbCBvbmx5IHBlcmZvcm0KLQkgKiB0aGUgc291cmNlIHJlZmVyZW5jZSBjaGVjayB3aGVuIHRoZXJlIGlzIGEgcG9zc2liaWx0eSBvZiBhIGRlYWRsb2NrLgorCSAqIHRoZSBzb3VyY2UgcmVmZXJlbmNlIGNoZWNrIHdoZW4gdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSBvZiBhIGRlYWRsb2NrLgogCSAqIEF0dGVtcHQgdG8gbG9jayB0aGUgYWRkcmVzcyBzcGFjZSwgaWYgd2UgY2Fubm90IHdlIHRoZW4gdmFsaWRhdGUgdGhlCiAJICogc291cmNlLiAgSWYgdGhpcyBpcyBpbnZhbGlkIHdlIGNhbiBza2lwIHRoZSBhZGRyZXNzIHNwYWNlIGNoZWNrLAogCSAqIHRodXMgYXZvaWRpbmcgdGhlIGRlYWRsb2NrLgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL2F0YWtleWIuYyBiL2FyY2gvbTY4ay9hdGFyaS9hdGFrZXliLmMKaW5kZXggNTg5MDg5Ny4uYjk5NTUxMyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2F0YXJpL2F0YWtleWIuYworKysgYi9hcmNoL202OGsvYXRhcmkvYXRha2V5Yi5jCkBAIC0xMzAsNyArMTMwLDcgQEAKICAqIGl0J3MgcmVhbGx5IGhhcmQgdG8gZGVjaWRlIHdoZXRoZXIgdGhleSdyZSBtb3VzZSBvciBrZXlib2FyZCBieXRlcy4gU2luY2UKICAqIG92ZXJydW5zIHVzdWFsbHkgb2NjdXIgd2hlbiBtb3ZpbmcgdGhlIEF0YXJpIG1vdXNlIHJhcGlkbHksIHRoZXkncmUgc2VlbiBhcwogICogbW91c2UgYnl0ZXMgaGVyZS4gSWYgdGhpcyBpcyB3cm9uZywgb25seSBhIG1ha2UgY29kZSBvZiB0aGUga2V5Ym9hcmQgZ2V0cwotICogbG9zdCwgd2hpY2ggaXNuJ3QgdG9vIGJhZC4gTG9vc2luZyBhIGJyZWFrIGNvZGUgd291bGQgYmUgZGlzYXN0cm91cywKKyAqIGxvc3QsIHdoaWNoIGlzbid0IHRvbyBiYWQuIExvc2luZyBhIGJyZWFrIGNvZGUgd291bGQgYmUgZGlzYXN0cm91cywKICAqIGJlY2F1c2UgdGhlbiB0aGUga2V5Ym9hcmQgcmVwZWF0IHN0cmlrZXMuLi4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9iaW5kZWMuUyBiL2FyY2gvbTY4ay9mcHNwMDQwL2JpbmRlYy5TCmluZGV4IDcyZjExNTkuLmYyZTc5NTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9mcHNwMDQwL2JpbmRlYy5TCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL2JpbmRlYy5TCkBAIC02MDksNyArNjA5LDcgQEAKIHwgICAgICBBNi4gIFRoaXMgdGVzdCBvY2N1cnMgb25seSBvbiB0aGUgZmlyc3QgcGFzcy4gIElmIHRoZQogfCAgICAgIHJlc3VsdCBpcyBleGFjdGx5IDEwXkxFTiwgZGVjcmVtZW50IElMT0cgYW5kIGRpdmlkZQogfCAgICAgIHRoZSBtYW50aXNzYSBieSAxMC4gIFRoZSBjYWxjdWxhdGlvbiBvZiAxMF5MRU4gY2Fubm90Ci18ICAgICAgYmUgaW5leGFjdCwgc2luY2UgYWxsIHBvd2VycyBvZiB0ZW4gdXB0byAxMF4yNyBhcmUgZXhhY3QKK3wgICAgICBiZSBpbmV4YWN0LCBzaW5jZSBhbGwgcG93ZXJzIG9mIHRlbiB1cCB0byAxMF4yNyBhcmUgZXhhY3QKIHwgICAgICBpbiBleHRlbmRlZCBwcmVjaXNpb24sIHNvIHRoZSB1c2Ugb2YgYSBwcmV2aW91cyBwb3dlci1vZi10ZW4KIHwgICAgICB0YWJsZSB3aWxsIGludHJvZHVjZSBubyBlcnJvci4KIHwKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvZnBzcC5TIGIvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9mcHNwLlMKaW5kZXggMjZlODVlMi4uNzhjYjYwZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9mcHNwLlMKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9mcHNwLlMKQEAgLTExODEzLDcgKzExODEzLDcgQEAKIAlibmUuYgkJZm11bF91bmZsX2VuYV9zZAkjIG5vLCBzZ2wgb3IgZGJsCiAKICMgaWYgdGhlIHJuZCBtb2RlIGlzIGFueXRoaW5nIGJ1dCBSWiwgdGhlbiB3ZSBoYXZlIHRvIHJlLWRvIHRoZSBhYm92ZQotIyBtdWx0aXBsaWNhdGlvbiBiZWN1YXNlIHdlIHVzZWQgUlogZm9yIGFsbC4KKyMgbXVsdGlwbGljYXRpb24gYmVjYXVzZSB3ZSB1c2VkIFJaIGZvciBhbGwuCiAJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCiAKIGZtdWxfdW5mbF9lbmFfY29udDoKQEAgLTE4MDk1LDcgKzE4MDk1LDcgQEAKIAogCXJ0cwogCi0jIGFkZHJlc2luZyBtb2RlIGlzIHBvc3QtaW5jcmVtZW50LiB3cml0ZSB0aGUgcmVzdWx0IGJ5dGUuIGlmIHRoZSB3cml0ZQorIyBhZGRyZXNzaW5nIG1vZGUgaXMgcG9zdC1pbmNyZW1lbnQuIHdyaXRlIHRoZSByZXN1bHQgYnl0ZS4gaWYgdGhlIHdyaXRlCiAjIGZhaWxzIHRoZW4gZG9uJ3QgdXBkYXRlIHRoZSBhZGRyZXNzIHJlZ2lzdGVyLiBpZiB3cml0ZSBwYXNzZXMgdGhlbgogIyBjYWxsIGluY19hcmVnKCkgdG8gdXBkYXRlIHRoZSBhZGRyZXNzIHJlZ2lzdGVyLgogZnNjY19tZW1faW5jOgpAQCAtMjA4NzYsNyArMjA4NzYsNyBAQAogCXN3YXAJCSVkMAkJCSMgZDAgbm93IGluIHVwcGVyIHdvcmQKIAlsc2wubAkJJjB4NCwlZDAJCSMgZDAgaW4gcHJvcGVyIHBsYWNlIGZvciBkYmwgcHJlYyBleHAKIAl0c3QuYgkJRlRFTVBfRVgoJWEwKQkJIyB0ZXN0IHNpZ24KLQlicGwuYgkJZHN0X2dldF9kbWFuCQkjIGlmIHBvc3RpdmUsIGdvIHByb2Nlc3MgbWFudGlzc2EKKwlicGwuYgkJZHN0X2dldF9kbWFuCQkjIGlmIHBvc2l0aXZlLCBnbyBwcm9jZXNzIG1hbnRpc3NhCiAJYnNldAkJJjB4MWYsJWQwCQkjIGlmIG5lZ2F0aXZlLCBzZXQgc2lnbgogZHN0X2dldF9kbWFuOgogCW1vdi5sCQlGVEVNUF9ISSglYTApLCVkMQkjIGdldCBtcyBtYW50aXNzYQpAQCAtMjI5NDMsNyArMjI5NDMsNyBAQAogIwlGUF9TUkMoYTYpID0gcGFja2VkIG9wZXJhbmQgbm93IGFzIGEgYmluYXJ5IEZQIG51bWJlcgkJIwogIwkJCQkJCQkJCSMKICMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKLSMJR2V0IHRoZSBjb3JyZWN0IDxlYT4gd2hpaGMgaXMgdGhlIHZhbHVlIG9uIHRoZSBleGNlcHRpb24gc3RhY2sJIworIwlHZXQgdGhlIGNvcnJlY3QgPGVhPiB3aGljaCBpcyB0aGUgdmFsdWUgb24gdGhlIGV4Y2VwdGlvbiBzdGFjawkjCiAjIGZyYW1lIHcvIG1heWJlIGEgY29ycmVjdGlvbiBmYWN0b3IgaWYgdGhlIDxlYT4gaXMgLShhbikgb3IgKGFuKSsuCSMKICMgVGhlbiwgZmV0Y2ggdGhlIG9wZXJhbmQgZnJvbSBtZW1vcnkuIElmIHRoZSBmZXRjaCBmYWlscywgZXhpdAkJIwogIyB0aHJvdWdoIGZhY2NfaW5feCgpLgkJCQkJCQkjCkBAIC0yNDA5Niw3ICsyNDA5Niw3IEBACiAjICAgICAgQTYuICBUaGlzIHRlc3Qgb2NjdXJzIG9ubHkgb24gdGhlIGZpcnN0IHBhc3MuICBJZiB0aGUKICMgICAgICByZXN1bHQgaXMgZXhhY3RseSAxMF5MRU4sIGRlY3JlbWVudCBJTE9HIGFuZCBkaXZpZGUKICMgICAgICB0aGUgbWFudGlzc2EgYnkgMTAuICBUaGUgY2FsY3VsYXRpb24gb2YgMTBeTEVOIGNhbm5vdAotIyAgICAgIGJlIGluZXhhY3QsIHNpbmNlIGFsbCBwb3dlcnMgb2YgdGVuIHVwdG8gMTBeMjcgYXJlIGV4YWN0CisjICAgICAgYmUgaW5leGFjdCwgc2luY2UgYWxsIHBvd2VycyBvZiB0ZW4gdXAgdG8gMTBeMjcgYXJlIGV4YWN0CiAjICAgICAgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uLCBzbyB0aGUgdXNlIG9mIGEgcHJldmlvdXMgcG93ZXItb2YtdGVuCiAjICAgICAgdGFibGUgd2lsbCBpbnRyb2R1Y2Ugbm8gZXJyb3IuCiAjCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvc3JjL3BmcHNwLlMgYi9hcmNoL202OGsvaWZwc3AwNjAvc3JjL3BmcHNwLlMKaW5kZXggZTcxYmEwYS4uNGFlZGVmOSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9wZnBzcC5TCisrKyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvcGZwc3AuUwpAQCAtNzc3Nyw3ICs3Nzc3LDcgQEAKIAlzd2FwCQklZDAJCQkjIGQwIG5vdyBpbiB1cHBlciB3b3JkCiAJbHNsLmwJCSYweDQsJWQwCQkjIGQwIGluIHByb3BlciBwbGFjZSBmb3IgZGJsIHByZWMgZXhwCiAJdHN0LmIJCUZURU1QX0VYKCVhMCkJCSMgdGVzdCBzaWduCi0JYnBsLmIJCWRzdF9nZXRfZG1hbgkJIyBpZiBwb3N0aXZlLCBnbyBwcm9jZXNzIG1hbnRpc3NhCisJYnBsLmIJCWRzdF9nZXRfZG1hbgkJIyBpZiBwb3NpdGl2ZSwgZ28gcHJvY2VzcyBtYW50aXNzYQogCWJzZXQJCSYweDFmLCVkMAkJIyBpZiBuZWdhdGl2ZSwgc2V0IHNpZ24KIGRzdF9nZXRfZG1hbjoKIAltb3YubAkJRlRFTVBfSEkoJWEwKSwlZDEJIyBnZXQgbXMgbWFudGlzc2EKQEAgLTgyNDQsNyArODI0NCw3IEBACiAJYm5lLmIJCWZtdWxfdW5mbF9lbmFfc2QJIyBubywgc2dsIG9yIGRibAogCiAjIGlmIHRoZSBybmQgbW9kZSBpcyBhbnl0aGluZyBidXQgUlosIHRoZW4gd2UgaGF2ZSB0byByZS1kbyB0aGUgYWJvdmUKLSMgbXVsdGlwbGljYXRpb24gYmVjdWFzZSB3ZSB1c2VkIFJaIGZvciBhbGwuCisjIG11bHRpcGxpY2F0aW9uIGJlY2F1c2Ugd2UgdXNlZCBSWiBmb3IgYWxsLgogCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgogCiBmbXVsX3VuZmxfZW5hX2NvbnQ6CkBAIC0xMjkwMyw3ICsxMjkwMyw3IEBACiAjCUZQX1NSQyhhNikgPSBwYWNrZWQgb3BlcmFuZCBub3cgYXMgYSBiaW5hcnkgRlAgbnVtYmVyCQkjCiAjCQkJCQkJCQkJIwogIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIwotIwlHZXQgdGhlIGNvcnJlY3QgPGVhPiB3aGloYyBpcyB0aGUgdmFsdWUgb24gdGhlIGV4Y2VwdGlvbiBzdGFjawkjCisjCUdldCB0aGUgY29ycmVjdCA8ZWE+IHdoaWNoIGlzIHRoZSB2YWx1ZSBvbiB0aGUgZXhjZXB0aW9uIHN0YWNrCSMKICMgZnJhbWUgdy8gbWF5YmUgYSBjb3JyZWN0aW9uIGZhY3RvciBpZiB0aGUgPGVhPiBpcyAtKGFuKSBvciAoYW4pKy4JIwogIyBUaGVuLCBmZXRjaCB0aGUgb3BlcmFuZCBmcm9tIG1lbW9yeS4gSWYgdGhlIGZldGNoIGZhaWxzLCBleGl0CQkjCiAjIHRocm91Z2ggZmFjY19pbl94KCkuCQkJCQkJCSMKQEAgLTE0MDU2LDcgKzE0MDU2LDcgQEAKICMgICAgICBBNi4gIFRoaXMgdGVzdCBvY2N1cnMgb25seSBvbiB0aGUgZmlyc3QgcGFzcy4gIElmIHRoZQogIyAgICAgIHJlc3VsdCBpcyBleGFjdGx5IDEwXkxFTiwgZGVjcmVtZW50IElMT0cgYW5kIGRpdmlkZQogIyAgICAgIHRoZSBtYW50aXNzYSBieSAxMC4gIFRoZSBjYWxjdWxhdGlvbiBvZiAxMF5MRU4gY2Fubm90Ci0jICAgICAgYmUgaW5leGFjdCwgc2luY2UgYWxsIHBvd2VycyBvZiB0ZW4gdXB0byAxMF4yNyBhcmUgZXhhY3QKKyMgICAgICBiZSBpbmV4YWN0LCBzaW5jZSBhbGwgcG93ZXJzIG9mIHRlbiB1cCB0byAxMF4yNyBhcmUgZXhhY3QKICMgICAgICBpbiBleHRlbmRlZCBwcmVjaXNpb24sIHNvIHRoZSB1c2Ugb2YgYSBwcmV2aW91cyBwb3dlci1vZi10ZW4KICMgICAgICB0YWJsZSB3aWxsIGludHJvZHVjZSBubyBlcnJvci4KICMKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hdGFyaWludHMuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hdGFyaWludHMuaAppbmRleCBmNTk3ODkyLi42NTZiYmJmIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRhcmlpbnRzLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpaW50cy5oCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAogLyoKICAqIHtlbixkaXN9YWJsZV9pcnEgaGF2ZSB0aGUgdXN1YWwgc2VtYW50aWNzIG9mIHRlbXBvcmFyeSBibG9ja2luZyB0aGUKLSAqIGludGVycnVwdCwgYnV0IG5vdCBsb29zaW5nIHJlcXVlc3RzIHRoYXQgaGFwcGVuIGJldHdlZW4gZGlzYWJsaW5nIGFuZAorICogaW50ZXJydXB0LCBidXQgbm90IGxvc2luZyByZXF1ZXN0cyB0aGF0IGhhcHBlbiBiZXR3ZWVuIGRpc2FibGluZyBhbmQKICAqIGVuYWJsaW5nLiBUaGlzIGlzIGRvbmUgd2l0aCB0aGUgTUZQIG1hc2sgcmVnaXN0ZXJzLgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9ib290c3RkLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYm9vdHN0ZC5oCmluZGV4IGJkYzFhNGEuLmU1MThmNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9ib290c3RkLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2Jvb3RzdGQuaApAQCAtMzEsNyArMzEsNyBAQAogI2RlZmluZSBfX0JOX2ZsYXNoX3dyaXRlX3JhbmdlCQkyMAogCiAvKiBDYWxsaW5nIGNvbnZlbnRpb25zIGNvbXBhdGlibGUgdG8gKHVDKWxpbnV4LzY4awotICogV2UgdXNlIHNpbW1pbGFyIG1hY3JvcyB0byBjYWxsIGludG8gdGhlIGJvb3Rsb2FkZXIgYXMgZm9yIHVDbGludXgKKyAqIFdlIHVzZSBzaW1pbGFyIG1hY3JvcyB0byBjYWxsIGludG8gdGhlIGJvb3Rsb2FkZXIgYXMgZm9yIHVDbGludXgKICAqLwogCiAjZGVmaW5lIF9fYnNjX3JldHVybih0eXBlLCByZXMpIFwKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9jb21tcHJvYy5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2NvbW1wcm9jLmgKaW5kZXggZWRmNWViNi4uYTczOTk4NSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2NvbW1wcm9jLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2NvbW1wcm9jLmgKQEAgLTg4LDcgKzg4LDcgQEAKIAogCiAvKiByeCBiZCBzdGF0dXMvY29udHJvbCBiaXRzICovCi0jZGVmaW5lIEJEX1NDX0VNUFRZCSgodXNob3J0KTB4ODAwMCkJLyogUmVjaWV2ZSBpcyBlbXB0eSAqLworI2RlZmluZSBCRF9TQ19FTVBUWQkoKHVzaG9ydCkweDgwMDApCS8qIFJlY2VpdmUgaXMgZW1wdHkgKi8KICNkZWZpbmUgQkRfU0NfV1JBUAkoKHVzaG9ydCkweDIwMDApCS8qIExhc3QgYnVmZmVyIGRlc2NyaXB0b3IgaW4gdGFibGUgKi8KICNkZWZpbmUgQkRfU0NfSU5UUlBUCSgodXNob3J0KTB4MTAwMCkJLyogSW50ZXJydXB0IG9uIGNoYW5nZSAqLwogI2RlZmluZSBCRF9TQ19MQVNUCSgodXNob3J0KTB4MDgwMCkJLyogTGFzdCBidWZmZXIgaW4gZnJhbWUgT1IgY29udHJvbCBjaGFyICovCkBAIC05Niw3ICs5Niw3IEBACiAjZGVmaW5lIEJEX1NDX0ZJUlNUCSgodXNob3J0KTB4MDQwMCkJLyogMXN0IGJ1ZmZlciBpbiBhbiBIRExDIGZyYW1lICovCiAjZGVmaW5lIEJEX1NDX0FERFIJKCh1c2hvcnQpMHgwNDAwKQkvKiAxc3QgYnl0ZSBpcyBhIG11bHRpZHJvcCBhZGRyZXNzICovCiAKLSNkZWZpbmUgQkRfU0NfQ00JKCh1c2hvcnQpMHgwMjAwKQkvKiBDb250aW5vdXMgbW9kZSAqLworI2RlZmluZSBCRF9TQ19DTQkoKHVzaG9ydCkweDAyMDApCS8qIENvbnRpbnVvdXMgbW9kZSAqLwogI2RlZmluZSBCRF9TQ19JRAkoKHVzaG9ydCkweDAxMDApCS8qIFJlY2VpdmVkIHRvbyBtYW55IGlkbGVzICovCiAKICNkZWZpbmUgQkRfU0NfQU0JKCh1c2hvcnQpMHgwMDgwKQkvKiBNdWx0aWRyb3AgYWRkcmVzcyBtYXRjaCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2RlbGF5X25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vZGVsYXlfbm8uaAppbmRleCA1NWNiZDYyLi5jM2EwZWRjIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZGVsYXlfbm8uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vZGVsYXlfbm8uaApAQCAtMTYsNyArMTYsNyBAQAogCSAqIGxvbmcgd29yZCBhbGlnbm1lbnQgd2hpY2ggaXMgdGhlIGZhc3RlciB2ZXJzaW9uLgogCSAqIFRoZSAweDRhOGUgaXMgb2YgY291cnNlIGEgJ3RzdGwgJWZwJyBpbnN0cnVjdGlvbi4gIFRoaXMgaXMgYmV0dGVyCiAJICogdGhhbiB1c2luZyBhIE5PUCAoMHg0ZTcxKSBpbnN0cnVjdGlvbiBiZWNhdXNlIGl0IGV4ZWN1dGVzIGluIG9uZQotCSAqIGN5Y2xlIG5vdCB0aHJlZSBhbmQgZG9lc24ndCBhbGxvdyBmb3IgYW4gYXJiaXRhcnkgZGVsYXkgd2FpdGluZworCSAqIGN5Y2xlIG5vdCB0aHJlZSBhbmQgZG9lc24ndCBhbGxvdyBmb3IgYW4gYXJiaXRyYXJ5IGRlbGF5IHdhaXRpbmcKIAkgKiBmb3IgYnVzIGN5Y2xlcyB0byBmaW5pc2guICBBbHNvIGZwL2E2IGlzbid0IGxpa2VseSB0byBjYXVzZSBhCiAJICogc3RhbGwgd2FpdGluZyBmb3IgdGhlIHJlZ2lzdGVyIHRvIGJlY29tZSB2YWxpZCBpZiBzdWNoIGlzIGFkZGVkCiAJICogdG8gdGhlIGNvbGRmaXJlIGF0IHNvbWUgc3RhZ2UuCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZ3Bpby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2dwaW8uaAppbmRleCBjNjRjN2I3Li5iMjA0NjgzIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZ3Bpby5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9ncGlvLmgKQEAgLTMxLDcgKzMxLDcgQEAKICAqIEdQSU9zIGluIGEgc2luZ2xlIGNvbnRyb2wgYXJlYSwgb3RoZXJzIGhhdmUgc29tZSBHUElPcyBpbXBsZW1lbnRlZCBpbgogICogZGlmZmVyZW50IG1vZHVsZXMuCiAgKgotICogVGhpcyBpbXBsZW1lbnRhdGlvbiBhdHRlbXB0cyBhY2NvbW9kYXRlIHRoZSBkaWZmZXJlbmNlcyB3aGlsZSBwcmVzZW50aW5nCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIGF0dGVtcHRzIGFjY29tbW9kYXRlIHRoZSBkaWZmZXJlbmNlcyB3aGlsZSBwcmVzZW50aW5nCiAgKiBhIGdlbmVyaWMgaW50ZXJmYWNlIHRoYXQgd2lsbCBvcHRpbWl6ZSB0byBhcyBmZXcgaW5zdHJ1Y3Rpb25zIGFzIHBvc3NpYmxlLgogICovCiAjaWYgZGVmaW5lZChDT05GSUdfTTUyMDYpIHx8IGRlZmluZWQoQ09ORklHX001MjA2ZSkgfHwgXApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MjB4c2ltLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbTUyMHhzaW0uaAppbmRleCA1NWQ1YTRjNS4uYjZiZjJjNSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MjB4c2ltLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MjB4c2ltLmgKQEAgLTE1Nyw3ICsxNTcsNyBAQAogI2RlZmluZQlNQ0ZGRUNfU0laRQkJMHg4MDAJCS8qIFJlZ2lzdGVyIHNldCBzaXplICovCiAKIC8qCi0gKiAgUmVzZXQgQ29udHJvbGwgVW5pdC4KKyAqICBSZXNldCBDb250cm9sIFVuaXQuCiAgKi8KICNkZWZpbmUJTUNGX1JDUgkJCTB4RkMwQTAwMDAKICNkZWZpbmUJTUNGX1JTUgkJCTB4RkMwQTAwMDEKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNTIzeHNpbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MjN4c2ltLmgKaW5kZXggODk5NmRmNi4uNjIzNTkyMSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MjN4c2ltLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MjN4c2ltLmgKQEAgLTQ4LDcgKzQ4LDcgQEAKICNkZWZpbmUJTUNGU0lNX0RNUjEJCShNQ0ZfSVBTQkFSICsgMHg1NCkJLyogQWRkcmVzcyBtYXNrIDEgKi8KIAogLyoKLSAqICBSZXNldCBDb250cm9sbCBVbml0IChyZWxhdGl2ZSB0byBJUFNCQVIpLgorICogIFJlc2V0IENvbnRyb2wgVW5pdCAocmVsYXRpdmUgdG8gSVBTQkFSKS4KICAqLwogI2RlZmluZQlNQ0ZfUkNSCQkJMHgxMTAwMDAKICNkZWZpbmUJTUNGX1JTUgkJCTB4MTEwMDAxCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbTUyN3hzaW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNTI3eHNpbS5oCmluZGV4IDc0ODU1YTYuLjc1ODgxMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNTI3eHNpbS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNTI3eHNpbS5oCkBAIC0yODMsNyArMjgzLDcgQEAKICNlbmRpZgogCiAvKgotICogIFJlc2V0IENvbnRyb2xsIFVuaXQgKHJlbGF0aXZlIHRvIElQU0JBUikuCisgKiAgUmVzZXQgQ29udHJvbCBVbml0IChyZWxhdGl2ZSB0byBJUFNCQVIpLgogICovCiAjZGVmaW5lCU1DRl9SQ1IJCQkweDExMDAwMAogI2RlZmluZQlNQ0ZfUlNSCQkJMHgxMTAwMDEKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNTMwN3NpbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MzA3c2ltLmgKaW5kZXggNGM5NGMwMS4uOGY4NjA5ZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MzA3c2ltLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MzA3c2ltLmgKQEAgLTI5LDcgKzI5LDcgQEAKICNkZWZpbmUJTUNGU0lNX1NXU1IJCTB4MDMJCS8qIFNXIFdhdGNoZG9nIHNlcnZpY2UgKHIvdykgKi8KICNkZWZpbmUJTUNGU0lNX1BBUgkJMHgwNAkJLyogUGluIEFzc2lnbm1lbnQgcmVnIChyL3cpICovCiAjZGVmaW5lCU1DRlNJTV9JUlFQQVIJCTB4MDYJCS8qIEludGVycnVwdCBBc3NpZ25tZW50IHJlZyAoci93KSAqLwotI2RlZmluZQlNQ0ZTSU1fUExMQ1IJCTB4MDgJCS8qIFBMTCBDb250cm9sbCBSZWcqLworI2RlZmluZQlNQ0ZTSU1fUExMQ1IJCTB4MDgJCS8qIFBMTCBDb250cm9sIFJlZyovCiAjZGVmaW5lCU1DRlNJTV9NUEFSSwkJMHgwQwkJLyogQlVTIE1hc3RlciBDb250cm9sIFJlZyovCiAjZGVmaW5lCU1DRlNJTV9JUFIJCTB4NDAJCS8qIEludGVycnVwdCBQZW5kIHJlZyAoci93KSAqLwogI2RlZmluZQlNQ0ZTSU1fSU1SCQkweDQ0CQkvKiBJbnRlcnJ1cHQgTWFzayByZWcgKHIvdykgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNTQwN3NpbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201NDA3c2ltLmgKaW5kZXggNzYyYzU4Yy4uNTFlMDBiMCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201NDA3c2ltLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201NDA3c2ltLmgKQEAgLTI5LDcgKzI5LDcgQEAKICNkZWZpbmUJTUNGU0lNX1NXU1IJCTB4MDMJCS8qIFNXIFdhdGNoZG9nIHNlcnZpY2UgKHIvdykgKi8KICNkZWZpbmUJTUNGU0lNX1BBUgkJMHgwNAkJLyogUGluIEFzc2lnbm1lbnQgcmVnIChyL3cpICovCiAjZGVmaW5lCU1DRlNJTV9JUlFQQVIJCTB4MDYJCS8qIEludGVycnVwdCBBc3NpZ25tZW50IHJlZyAoci93KSAqLwotI2RlZmluZQlNQ0ZTSU1fUExMQ1IJCTB4MDgJCS8qIFBMTCBDb250cm9sbCBSZWcqLworI2RlZmluZQlNQ0ZTSU1fUExMQ1IJCTB4MDgJCS8qIFBMTCBDb250cm9sIFJlZyovCiAjZGVmaW5lCU1DRlNJTV9NUEFSSwkJMHgwQwkJLyogQlVTIE1hc3RlciBDb250cm9sIFJlZyovCiAjZGVmaW5lCU1DRlNJTV9JUFIJCTB4NDAJCS8qIEludGVycnVwdCBQZW5kIHJlZyAoci93KSAqLwogI2RlZmluZQlNQ0ZTSU1fSU1SCQkweDQ0CQkvKiBJbnRlcnJ1cHQgTWFzayByZWcgKHIvdykgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNjgzNjBfcXVpY2MuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNjgzNjBfcXVpY2MuaAppbmRleCA2ZDQwZjRkLi41OTQxNGNjIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbTY4MzYwX3F1aWNjLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL202ODM2MF9xdWljYy5oCkBAIC0zMiw3ICszMiw3IEBACiAgICAgLyogQkFTRSArIDB4MDAwOiB1c2VyIGRhdGEgbWVtb3J5ICovCiAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIHVkYXRhX2JkX3Vjb2RlWzB4NDAwXTsgLyp1c2VyIGRhdGEgYmQncyBVY29kZSovCiAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIHVkYXRhX2JkWzB4MjAwXTsgICAgICAgLyp1c2VyIGRhdGEgVWNvZGUgICAgICovCi0gICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIHVjb2RlX2V4dFsweDEwMF07ICAgICAgLypVY29kZSBFeHRlbnRpb24gcmFtICovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIHVjb2RlX2V4dFsweDEwMF07ICAgICAgLypVY29kZSBFeHRlbnNpb24gcmFtICovCiAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAgICAgIFJFU0VSVkVEMVsweDUwMF07ICAgICAgLyogUmVzZXJ2ZWQgYXJlYSAgICAgICovCiB9OwogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNfb3NzLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjX29zcy5oCmluZGV4IDcyMjFmNzIuLjNjZjJiNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNfb3NzLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY19vc3MuaApAQCAtNjEsNyArNjEsNyBAQAogLyoKICAqIE9TUyBJbnRlcnJ1cHQgbGV2ZWxzIGZvciB2YXJpb3VzIHN1Yi1zeXN0ZW1zCiAgKgotICogVGhpcyBtYXBwaW5nIGlzIGxheWVkIG91dCB3aXRoIHR3byB0aGluZ3MgaW4gbWluZDogZmlyc3QsIHdlIHRyeSB0byBrZWVwCisgKiBUaGlzIG1hcHBpbmcgaXMgbGFpZCBvdXQgd2l0aCB0d28gdGhpbmdzIGluIG1pbmQ6IGZpcnN0LCB3ZSB0cnkgdG8ga2VlcAogICogdGhpbmdzIG9uIHRoZWlyIG93biBsZXZlbHMgdG8gYXZvaWQgaGF2aW5nIHRvIGRvIGRvdWJsZS1kaXNwYXRjaGVzLiBTZWNvbmQsCiAgKiB0aGUgbGV2ZWxzIG1hdGNoIGFzIGNsb3NlbHkgYXMgcG9zc2libGUgdGhlIGFsdGVybmF0ZSBJUlEgbWFwcGluZyBtb2RlIChha2EKICAqICJBL1VYIG1vZGUiKSBhdmFpbGFibGUgb24gc29tZSBWSUEgbWFjaGluZXMuCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjX3ZpYS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY192aWEuaAppbmRleCAzOWFmYjQzLi5hNTk2NjVlIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjX3ZpYS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNfdmlhLmgKQEAgLTIwNCw3ICsyMDQsNyBAQAogI2RlZmluZSB2VDJDTAkweDEwMDAgIC8qIFtWSUEgb25seV0gVGltZXIgdHdvIGNvdW50ZXIgbG93LiAqLwogI2RlZmluZSB2VDJDSAkweDEyMDAgIC8qIFtWSUEgb25seV0gVGltZXIgdHdvIGNvdW50ZXIgaGlnaC4gKi8KICNkZWZpbmUgdlNSCTB4MTQwMCAgLyogW1ZJQSBvbmx5XSBTaGlmdCByZWdpc3Rlci4gKi8KLSNkZWZpbmUgdkFDUgkweDE2MDAgIC8qIFtWSUEgb25seV0gQXV4aWxhcnkgY29udHJvbCByZWdpc3Rlci4gKi8KKyNkZWZpbmUgdkFDUgkweDE2MDAgIC8qIFtWSUEgb25seV0gQXV4aWxpYXJ5IGNvbnRyb2wgcmVnaXN0ZXIuICovCiAjZGVmaW5lIHZQQ1IJMHgxODAwICAvKiBbVklBIG9ubHldIFBlcmlwaGVyYWwgY29udHJvbCByZWdpc3Rlci4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgICAgICAgQ0hSUCBzZXogbmV2ZXIgZXZlciB0byAqd3JpdGUqIHRoaXMuCiAJCQkgKiAgICAgICAgICAgIE1hYyBmYW1pbHkgc2F5cyBuZXZlciB0byAqY2hhbmdlKiB0aGlzLgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2ludG9zaC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2ludG9zaC5oCmluZGV4IDUwZGIzNTkuLmMyYTFjNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNpbnRvc2guaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50b3NoLmgKQEAgLTE0LDcgKzE0LDcgQEAKIGV4dGVybiBpbnQgbWFjX2lycV9wZW5kaW5nKHVuc2lnbmVkIGludCk7CiAKIC8qCi0gKglGbG9wcHkgZHJpdmVyIG1hZ2ljIGhvb2sgLSBwcm9iYWJseSBzaG91bGRudCBiZSBoZXJlCisgKglGbG9wcHkgZHJpdmVyIG1hZ2ljIGhvb2sgLSBwcm9iYWJseSBzaG91bGRuJ3QgYmUgaGVyZQogICovCiAKIGV4dGVybiB2b2lkIHZpYTFfc2V0X2hlYWQoaW50KTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2Z0aW1lci5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZnRpbWVyLmgKaW5kZXggOTJiMjc2Zi4uMzUxYzI3MiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZnRpbWVyLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZnRpbWVyLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogLyoKICAqCUJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIFRpbWVyIE1vZGUgUmVnaXN0ZXIgKFRNUikuCi0gKglSZWdpc3RlciBiaXQgZmxhZ3MgYXJlIGNvbW1vbiBhY2Nyb3NzIENvbGRGaXJlcy4KKyAqCVJlZ2lzdGVyIGJpdCBmbGFncyBhcmUgY29tbW9uIGFjcm9zcyBDb2xkRmlyZXMuCiAgKi8KICNkZWZpbmUJTUNGVElNRVJfVE1SX1BSRU1BU0sJMHhmZjAwCQkvKiBQcmVzY2FsYXIgbWFzayAqLwogI2RlZmluZQlNQ0ZUSU1FUl9UTVJfRElTQ0UJMHgwMDAwCQkvKiBEaXNhYmxlIGNhcHR1cmUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCAyNmQ4NTFkLi4yOWUxNzkwIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0zNDMsMTAgKzM0MywxNCBAQAogI2RlZmluZSBfX05SX2Zhbm90aWZ5X2luaXQJMzM3CiAjZGVmaW5lIF9fTlJfZmFub3RpZnlfbWFyawkzMzgKICNkZWZpbmUgX19OUl9wcmxpbWl0NjQJCTMzOQorI2RlZmluZSBfX05SX25hbWVfdG9faGFuZGxlX2F0CTM0MAorI2RlZmluZSBfX05SX29wZW5fYnlfaGFuZGxlX2F0CTM0MQorI2RlZmluZSBfX05SX2Nsb2NrX2FkanRpbWUJMzQyCisjZGVmaW5lIF9fTlJfc3luY2ZzCQkzNDMKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2RlZmluZSBOUl9zeXNjYWxscwkJMzQwCisjZGVmaW5lIE5SX3N5c2NhbGxzCQkzNDQKIAogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9lbnRyeV9tbS5TIGIvYXJjaC9tNjhrL2tlcm5lbC9lbnRyeV9tbS5TCmluZGV4IDE1NTlkZWEuLjEzNTllZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvZW50cnlfbW0uUworKysgYi9hcmNoL202OGsva2VybmVsL2VudHJ5X21tLlMKQEAgLTc1MCw0ICs3NTAsOCBAQAogCS5sb25nIHN5c19mYW5vdGlmeV9pbml0CiAJLmxvbmcgc3lzX2Zhbm90aWZ5X21hcmsKIAkubG9uZyBzeXNfcHJsaW1pdDY0CisJLmxvbmcgc3lzX25hbWVfdG9faGFuZGxlX2F0CS8qIDM0MCAqLworCS5sb25nIHN5c19vcGVuX2J5X2hhbmRsZV9hdAorCS5sb25nIHN5c19jbG9ja19hZGp0aW1lCisJLmxvbmcgc3lzX3N5bmNmcwogCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL2hlYWQuUyBiL2FyY2gvbTY4ay9rZXJuZWwvaGVhZC5TCmluZGV4IGVmNTQxMjguLjI3NjIyYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvaGVhZC5TCkBAIC0xMzQsNyArMTM0LDcgQEAKICAqCVRoYW5rcyB0byBhIHNtYWxsIGhlbHBpbmcgcm91dGluZSBlbmFibGluZyB0aGUgbW11IGdvdCBxdWl0ZSBzaW1wbGUKICAqIGFuZCB0aGVyZSBpcyBvbmx5IG9uZSB3YXkgbGVmdC4gbW11X2VuZ2FnZSBtYWtlcyBhIGNvbXBsZXRlIGEgbmV3IG1hcHBpbmcKICAqIHRoYXQgb25seSBpbmNsdWRlcyB0aGUgYWJzb2x1dGUgbmVjZXNzYXJ5IHRvIGJlIGFibGUgdG8ganVtcCB0byB0aGUgZmluYWwKLSAqIHBvc3Rpb24gYW5kIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIG1hcHBpbmcuCisgKiBwb3NpdGlvbiBhbmQgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgbWFwcGluZy4KICAqIEFzIHRoaXMgY29kZSBkb2Vzbid0IG5lZWQgYSB0cmFuc3BhcmVudCB0cmFuc2xhdGlvbiByZWdpc3RlciBhbnltb3JlIHRoaXMKICAqIG1lYW5zIGFsbCByZWdpc3RlcnMgYXJlIGZyZWUgdG8gYmUgdXNlZCBieSBtYWNoaW5lcyB0aGF0IG5lZWRzIHRoZW0gZm9yCiAgKiBvdGhlciBwdXJwb3Nlcy4KQEAgLTk2OSw3ICs5NjksNyBAQAogCWlzX25vdF8wNDBfb3JfMDYwKDFmKQogCiAJLyoKLQkgKiAwNDA6IE1hcCB0aGUgMTZNZWcgcmFuZ2UgcGh5c2ljYWwgMHgwIHVwdG8gbG9naWNhbCAweDgwMDAuMDAwMAorCSAqIDA0MDogTWFwIHRoZSAxNk1lZyByYW5nZSBwaHlzaWNhbCAweDAgdXAgdG8gbG9naWNhbCAweDgwMDAuMDAwMAogCSAqLwogCW1tdV9tYXAJCSMweDgwMDAwMDAwLCMwLCMweDAxMDAwMDAwLCNfUEFHRV9OT0NBQ0hFX1MKIAkvKgpAQCAtOTgyLDcgKzk4Miw3IEBACiAKIDE6CiAJLyoKLQkgKiAwMzA6CU1hcCB0aGUgMzJNZWcgcmFuZ2UgcGh5c2ljYWwgMHgwIHVwdG8gbG9naWNhbCAweDgwMDAuMDAwMAorCSAqIDAzMDoJTWFwIHRoZSAzMk1lZyByYW5nZSBwaHlzaWNhbCAweDAgdXAgdG8gbG9naWNhbCAweDgwMDAuMDAwMAogCSAqLwogCW1tdV9tYXAJCSMweDgwMDAwMDAwLCMwLCMweDAyMDAwMDAwLCNfUEFHRV9OT0NBQ0hFMDMwCiAJbW11X21hcF90dAkjMSwjMHg0MDAwMDAwMCwjMHgyMDAwMDAwMCwjX1BBR0VfTk9DQUNIRTAzMApAQCAtMTA3NCw3ICsxMDc0LDcgQEAKIAlpc18wNDAoMWYpCiAKIAkvKgotCSAqIDAzMDogTWFwIHRoZSAzMk1lZyByYW5nZSBwaHlzaWNhbCAweDAgdXB0byBsb2dpY2FsIDB4ZjAwMC4wMDAwCisJICogMDMwOiBNYXAgdGhlIDMyTWVnIHJhbmdlIHBoeXNpY2FsIDB4MCB1cCB0byBsb2dpY2FsIDB4ZjAwMC4wMDAwCiAJICovCiAJbW11X21hcAkjMHhmMDAwMDAwMCwjMCwjMHgwMjAwMDAwMCwjX1BBR0VfTk9DQUNIRTAzMAogCkBAIC0xMDgyLDcgKzEwODIsNyBAQAogCiAxOgogCS8qCi0JICogMDQwOiBNYXAgdGhlIDE2TWVnIHJhbmdlIHBoeXNpY2FsIDB4MCB1cHRvIGxvZ2ljYWwgMHhmMDAwLjAwMDAKKwkgKiAwNDA6IE1hcCB0aGUgMTZNZWcgcmFuZ2UgcGh5c2ljYWwgMHgwIHVwIHRvIGxvZ2ljYWwgMHhmMDAwLjAwMDAKIAkgKi8KIAltbXVfbWFwICMweGYwMDAwMDAwLCMwLCMweDAxMDAwMDAwLCNfUEFHRV9OT0NBQ0hFX1MKIApAQCAtMzA3OCw3ICszMDc4LDcgQEAKIAkvKgogCSAqIElmIHRoZSBsb2FkZXIgZ2F2ZSB1cyBhIGJvYXJkIHR5cGUgdGhlbiB3ZSBjYW4gdXNlIHRoYXQgdG8KIAkgKiBzZWxlY3QgYW4gYXBwcm9wcmlhdGUgb3V0cHV0IHJvdXRpbmU7IG90aGVyd2lzZSB3ZSBqdXN0IHVzZQotCSAqIHRoZSBCdWcgY29kZS4gIElmIHdlIGhhZXYgdG8gdXNlIHRoZSBCdWcgdGhhdCBtZWFucyB0aGUgQnVnCisJICogdGhlIEJ1ZyBjb2RlLiAgSWYgd2UgaGF2ZSB0byB1c2UgdGhlIEJ1ZyB0aGF0IG1lYW5zIHRoZSBCdWcKIAkgKiB3b3Jrc3BhY2UgaGFzIHRvIGJlIHZhbGlkLCB3aGljaCBtZWFucyB0aGUgQnVnIGhhcyB0byB1c2UKIAkgKiB0aGUgU1JBTSwgd2hpY2ggaXMgbm9uLXN0YW5kYXJkLgogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9zeXNjYWxsdGFibGUuUyBiL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHRhYmxlLlMKaW5kZXggNzliMWVkMS4uOWI4MzkzZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9zeXNjYWxsdGFibGUuUworKysgYi9hcmNoL202OGsva2VybmVsL3N5c2NhbGx0YWJsZS5TCkBAIC0zNTgsNiArMzU4LDEwIEBACiAJLmxvbmcgc3lzX2Zhbm90aWZ5X2luaXQKIAkubG9uZyBzeXNfZmFub3RpZnlfbWFyawogCS5sb25nIHN5c19wcmxpbWl0NjQKKwkubG9uZyBzeXNfbmFtZV90b19oYW5kbGVfYXQJLyogMzQwICovCisJLmxvbmcgc3lzX29wZW5fYnlfaGFuZGxlX2F0CisJLmxvbmcgc3lzX2Nsb2NrX2FkanRpbWUKKwkubG9uZyBzeXNfc3luY2ZzCiAKIAkucmVwdCBOUl9zeXNjYWxscy0oLi1zeXNfY2FsbF90YWJsZSkvNAogCQkubG9uZyBzeXNfbmlfc3lzY2FsbApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4Lmxkc19uby5TIGIvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4Lmxkc19uby5TCmluZGV4IDQ3ZTE1ZWIuLmY0ZDcxNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC5sZHNfbm8uUworKysgYi9hcmNoL202OGsva2VybmVsL3ZtbGludXgubGRzX25vLlMKQEAgLTMsNyArMyw3IEBACiAgKgogICoJKEMpIENvcHlyaWdodCAyMDAyLTIwMDYsIEdyZWcgVW5nZXJlciA8Z2VyZ0BzbmFwZ2Vhci5jb20+CiAgKgotICoJVGhpcyBsaW5rZXIgc2NyaXB0IGlzIGVxdWlwZWQgdG8gYnVpbGQgZWl0aGVyIFJPTSBsb2FkZWQgb3IgUkFNCisgKglUaGlzIGxpbmtlciBzY3JpcHQgaXMgZXF1aXBwZWQgdG8gYnVpbGQgZWl0aGVyIFJPTSBsb2FkZWQgb3IgUkFNCiAgKglydW4ga2VybmVscy4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbW0vbW90b3JvbGEuYyBiL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jCmluZGV4IDAyYjdhMDMuLjhiM2RiMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jCisrKyBiL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jCkBAIC0zMDAsNiArMzAwLDggQEAKIAkJem9uZXNfc2l6ZVtaT05FX0RNQV0gPSBtNjhrX21lbW9yeVtpXS5zaXplID4+IFBBR0VfU0hJRlQ7CiAJCWZyZWVfYXJlYV9pbml0X25vZGUoaSwgem9uZXNfc2l6ZSwKIAkJCQkgICAgbTY4a19tZW1vcnlbaV0uYWRkciA+PiBQQUdFX1NISUZULCBOVUxMKTsKKwkJaWYgKG5vZGVfcHJlc2VudF9wYWdlcyhpKSkKKwkJCW5vZGVfc2V0X3N0YXRlKGksIE5fTk9STUFMX01FTU9SWSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvcGxhdGZvcm0vNTIzeC9jb25maWcuYyBiL2FyY2gvbTY4ay9wbGF0Zm9ybS81MjN4L2NvbmZpZy5jCmluZGV4IDQxOGE3NmYuLjcxZjQ0MzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9wbGF0Zm9ybS81MjN4L2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4ay9wbGF0Zm9ybS81MjN4L2NvbmZpZy5jCkBAIC0zLDcgKzMsNyBAQAogLyoKICAqCWxpbnV4L2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyM3gvY29uZmlnLmMKICAqCi0gKglTdWItYXJjaGl0Y3R1cmUgZGVwZW5kYW50IGluaXRpYWxpemF0aW9uIGNvZGUgZm9yIHRoZSBGcmVlc2NhbGUKKyAqCVN1Yi1hcmNoaXRjdHVyZSBkZXBlbmRlbnQgaW5pdGlhbGl6YXRpb24gY29kZSBmb3IgdGhlIEZyZWVzY2FsZQogICoJNTIzeCBDUFVzLgogICoKICAqCUNvcHlyaWdodCAoQykgMTk5OS0yMDA1LCBHcmVnIFVuZ2VyZXIgKGdlcmdAc25hcGdlYXIuY29tKQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3BsYXRmb3JtLzUyNzIvaW50Yy5jIGIvYXJjaC9tNjhrL3BsYXRmb3JtLzUyNzIvaW50Yy5jCmluZGV4IDQzZTZlOTYuLjdlNzE1ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9wbGF0Zm9ybS81MjcyL2ludGMuYworKysgYi9hcmNoL202OGsvcGxhdGZvcm0vNTI3Mi9pbnRjLmMKQEAgLTMzLDcgKzMzLDcgQEAKICAqCiAgKiBOb3RlIHRoYXQgdGhlIGV4dGVybmFsIGludGVycnVwdHMgYXJlIGVkZ2UgdHJpZ2dlcmVkICh1bmxpa2UgdGhlCiAgKiBpbnRlcm5hbCBpbnRlcnJ1cHQgc291cmNlcyB3aGljaCBhcmUgbGV2ZWwgdHJpZ2dlcmVkKS4gV2hpY2ggbWVhbnMKLSAqIHRoZXkgYWxzbyBuZWVkIGFja25vd2xlZGdlaW5nIHZpYSBhY2tub3dsZWRnZSBiaXRzLgorICogdGhleSBhbHNvIG5lZWQgYWNrbm93bGVkZ2luZyB2aWEgYWNrbm93bGVkZ2UgYml0cy4KICAqLwogc3RydWN0IGlycW1hcCB7CiAJdW5zaWduZWQgY2hhcglpY3I7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvcGxhdGZvcm0vNTI3eC9jb25maWcuYyBiL2FyY2gvbTY4ay9wbGF0Zm9ybS81Mjd4L2NvbmZpZy5jCmluZGV4IGZhMzU5NTkuLjNlYmM3NjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9wbGF0Zm9ybS81Mjd4L2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4ay9wbGF0Zm9ybS81Mjd4L2NvbmZpZy5jCkBAIC0zLDcgKzMsNyBAQAogLyoKICAqCWxpbnV4L2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyN3gvY29uZmlnLmMKICAqCi0gKglTdWItYXJjaGl0Y3R1cmUgZGVwZW5kYW50IGluaXRpYWxpemF0aW9uIGNvZGUgZm9yIHRoZSBGcmVlc2NhbGUKKyAqCVN1Yi1hcmNoaXRjdHVyZSBkZXBlbmRlbnQgaW5pdGlhbGl6YXRpb24gY29kZSBmb3IgdGhlIEZyZWVzY2FsZQogICoJNTI3MC81MjcxIENQVXMuCiAgKgogICoJQ29weXJpZ2h0IChDKSAxOTk5LTIwMDQsIEdyZWcgVW5nZXJlciAoZ2VyZ0BzbmFwZ2Vhci5jb20pCmRpZmYgLS1naXQgYS9hcmNoL202OGsvcGxhdGZvcm0vNTI4eC9jb25maWcuYyBiL2FyY2gvbTY4ay9wbGF0Zm9ybS81Mjh4L2NvbmZpZy5jCmluZGV4IGFjMzlmYzYuLjdhYmU3N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9wbGF0Zm9ybS81Mjh4L2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4ay9wbGF0Zm9ybS81Mjh4L2NvbmZpZy5jCkBAIC0zLDcgKzMsNyBAQAogLyoKICAqCWxpbnV4L2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyOHgvY29uZmlnLmMKICAqCi0gKglTdWItYXJjaGl0Y3R1cmUgZGVwZW5kYW50IGluaXRpYWxpemF0aW9uIGNvZGUgZm9yIHRoZSBGcmVlc2NhbGUKKyAqCVN1Yi1hcmNoaXRjdHVyZSBkZXBlbmRlbnQgaW5pdGlhbGl6YXRpb24gY29kZSBmb3IgdGhlIEZyZWVzY2FsZQogICoJNTI4MCwgNTI4MSBhbmQgNTI4MiBDUFVzLgogICoKICAqCUNvcHlyaWdodCAoQykgMTk5OS0yMDAzLCBHcmVnIFVuZ2VyZXIgKGdlcmdAc25hcGdlYXIuY29tKQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3BsYXRmb3JtL2NvbGRmaXJlL2NhY2hlLmMgYi9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvY2FjaGUuYwppbmRleCAyMzVkM2M0Li43MWJlZWFmIDEwMDY0NAotLS0gYS9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvY2FjaGUuYworKysgYi9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvY2FjaGUuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKgljYWNoZS5jIC0tIGdlbmVyYWwgQ29sZEZpcmUgQ2FjaGUgbWFpbnRhaW5lbmNlIGNvZGUKKyAqCWNhY2hlLmMgLS0gZ2VuZXJhbCBDb2xkRmlyZSBDYWNoZSBtYWludGVuYW5jZSBjb2RlCiAgKgogICoJQ29weXJpZ2h0IChDKSAyMDEwLCBHcmVnIFVuZ2VyZXIgKGdlcmdAc25hcGdlYXIuY29tKQogICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvZW50cnkuUyBiL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9lbnRyeS5TCmluZGV4IDU4MzdjZjAuLmVhYjYzZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9lbnRyeS5TCisrKyBiL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9lbnRyeS5TCkBAIC0xNjMsNyArMTYzLDcgQEAKIAogLyoKICAqIFRoaXMgaXMgdGhlIGdlbmVyaWMgaW50ZXJydXB0IGhhbmRsZXIgKGZvciBhbGwgaGFyZHdhcmUgaW50ZXJydXB0Ci0gKiBzb3VyY2VzKS4gQ2FsbHMgdXB0byBoaWdoIGxldmVsIGNvZGUgdG8gZG8gYWxsIHRoZSB3b3JrLgorICogc291cmNlcykuIENhbGxzIHVwIHRvIGhpZ2ggbGV2ZWwgY29kZSB0byBkbyBhbGwgdGhlIHdvcmsuCiAgKi8KIEVOVFJZKGludGhhbmRsZXIpCiAJU0FWRV9BTEwKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9oZWFkLlMgYi9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvaGVhZC5TCmluZGV4IDEyOWJmZjQ5Li42YWU5MWE0IDEwMDY0NAotLS0gYS9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvaGVhZC5TCisrKyBiL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9oZWFkLlMKQEAgLTIwLDcgKzIwLDcgQEAKIAogLyoKICAqCUlmIHdlIGRvbid0IGhhdmUgYSBmaXhlZCBtZW1vcnkgc2l6ZSwgdGhlbiBsZXRzIGJ1aWxkIGluIGNvZGUKLSAqCXRvIGF1dG8gZGV0ZWN0IHRoZSBEUkFNIHNpemUuIE9idmlvdXNseSB0aGlzIGlzIHRoZSBwcmVmZXJlZAorICoJdG8gYXV0byBkZXRlY3QgdGhlIERSQU0gc2l6ZS4gT2J2aW91c2x5IHRoaXMgaXMgdGhlIHByZWZlcnJlZAogICoJbWV0aG9kLCBhbmQgc2hvdWxkIHdvcmsgZm9yIG1vc3QgYm9hcmRzLiBJdCB3b24ndCB3b3JrIGZvciB0aG9zZQogICoJdGhhdCBkbyBub3QgaGF2ZSB0aGVpciBSQU0gc3RhcnRpbmcgYXQgYWRkcmVzcyAwLCBhbmQgaXQgb25seQogICoJd29ya3Mgb24gU0RSQU0gKG5vdCBib2FyZHMgZml0dGVkIHdpdGggU1JBTSkuCmRpZmYgLS1naXQgYS9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvaW50Yy5jIGIvYXJjaC9tNjhrL3BsYXRmb3JtL2NvbGRmaXJlL2ludGMuYwppbmRleCBjMjhhNmVkLi4wYmJiNDE0IDEwMDY0NAotLS0gYS9hcmNoL202OGsvcGxhdGZvcm0vY29sZGZpcmUvaW50Yy5jCisrKyBiL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9pbnRjLmMKQEAgLTM3LDcgKzM3LDcgQEAKIC8qCiAgKiBJbiB0aGUgZWFybHkgdmVyc2lvbiAyIGNvcmUgQ29sZEZpcmUgcGFydHMgdGhlIElNUiByZWdpc3RlciB3YXMgMTYgYml0cwogICogaW4gc2l6ZS4gVmVyc2lvbiAzIChhbmQgbGF0ZXIgdmVyc2lvbiAyKSBjb3JlIHBhcnRzIGhhdmUgYSAzMiBiaXQKLSAqIHNpemVkIElNUiByZWdpc3Rlci4gUHJvdmlkZSBzb21lIHNpemUgaW5kZXBlbmRhbnQgbWV0aG9kcyB0byBhY2Nlc3MgdGhlCisgKiBzaXplZCBJTVIgcmVnaXN0ZXIuIFByb3ZpZGUgc29tZSBzaXplIGluZGVwZW5kZW50IG1ldGhvZHMgdG8gYWNjZXNzIHRoZQogICogSU1SIHJlZ2lzdGVyLgogICovCiAjaWZkZWYgTUNGU0lNX0lNUl9JU18xNkJJVFMKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9wbGF0Zm9ybS9jb2xkZmlyZS9zbHRpbWVycy5jIGIvYXJjaC9tNjhrL3BsYXRmb3JtL2NvbGRmaXJlL3NsdGltZXJzLmMKaW5kZXggMGExYjkzNy4uNmE4NWRhZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL3BsYXRmb3JtL2NvbGRmaXJlL3NsdGltZXJzLmMKKysrIGIvYXJjaC9tNjhrL3BsYXRmb3JtL2NvbGRmaXJlL3NsdGltZXJzLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogCWN5Y2xlcyA9IG1jZnNsdF9jbnQ7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JLyogc3Vic3RyYWN0IGJlY2F1c2Ugc2xpY2UgdGltZXJzIGNvdW50IGRvd24gKi8KKwkvKiBzdWJ0cmFjdCBiZWNhdXNlIHNsaWNlIHRpbWVycyBjb3VudCBkb3duICovCiAJcmV0dXJuIGN5Y2xlcyAtIHNjbnQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9xNDAvUkVBRE1FIGIvYXJjaC9tNjhrL3E0MC9SRUFETUUKaW5kZXggZjg3N2I3Mi4uYjI2ZDVmNSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL3E0MC9SRUFETUUKKysrIGIvYXJjaC9tNjhrL3E0MC9SRUFETUUKQEAgLTg5LDcgKzg5LDcgQEAKIG9yIGZyb20gc29tZSBJU0EgZGV2aWNlcywgRUlSUV9SRUcgY2FuIGRpc3Rpbmd1aXNoIHVwIHRvIDggSVNBIElSUXMuCiAKIFRoZSBRNDAgY3VzdG9tIGNoaXAgaXMgcHJvZ3JhbW1hYmxlIHRvIHByb3ZpZGUgMiBwZXJpb2RpYyB0aW1lcnM6Ci0JLSA1MCBvciAyMDAgSHogLSBsZXZlbCAyLCAhIVRISVMgQ0FOVCBCRSBESVNBQkxFRCEhCisJLSA1MCBvciAyMDAgSHogLSBsZXZlbCAyLCAhIVRISVMgQ0FOJ1QgQkUgRElTQUJMRUQhIQogCS0gMTAgb3IgMjAgS0h6IC0gbGV2ZWwgNCwgdXNlZCBmb3IgZG1hLXNvdW5kCiAKIExpbnV4IHVzZXMgdGhlIDIwMCBIeiBpbnRlcnJ1cHQgZm9yIHRpbWVyIGFuZCBiZWVwIGJ5IGRlZmF1bHQuCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvS2NvbmZpZyBiL2FyY2gvbWljcm9ibGF6ZS9LY29uZmlnCmluZGV4IDg1MWIzYmYuLmVjY2RlZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9LY29uZmlnCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9LY29uZmlnCkBAIC02LDcgKzYsNiBAQAogCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgogCXNlbGVjdCBIQVZFX0RZTkFNSUNfRlRSQUNFCiAJc2VsZWN0IEhBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQKLQlzZWxlY3QgVVNCX0FSQ0hfSEFTX0VIQ0kKIAlzZWxlY3QgQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUIKIAlzZWxlY3QgSEFWRV9PUFJPRklMRQogCXNlbGVjdCBIQVZFX0FSQ0hfS0dEQgpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL01ha2VmaWxlIGIvYXJjaC9taWNyb2JsYXplL01ha2VmaWxlCmluZGV4IDZmNDMyZTYuLmIyM2M0MGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9NYWtlZmlsZQorKysgYi9hcmNoL21pY3JvYmxhemUvTWFrZWZpbGUKQEAgLTE4LDcgKzE4LDcgQEAKICMgcmF0aGVyIHRoYW4gYm9vbHMgeS9uCiAKICMgV29yayBvdXQgSFcgbXVsdGlwbGVyIHN1cHBvcnQuIFRoaXMgaXMgdHJpY2t5LgotIyAxLiBTcGFydGFuMiBoYXMgbm8gSFcgbXVsdGlwbGVycy4KKyMgMS4gU3BhcnRhbjIgaGFzIG5vIEhXIG11bHRpcGxpZXJzLgogIyAyLiBNaWNyb0JsYXplIHYzLnggYWx3YXlzIHVzZXMgdGhlbSwgZXhjZXB0IGluIFNwYXJ0YW4gMgogIyAzLiBBbGwgb3RoZXIgRlBHYS9DUFUgdmVyIGNvbWJvcywgd2UgY2FuIHRydXN0IHRoZSBDT05GSUdfIHNldHRpbmdzCiBpZmVxICgsJChmaW5kc3RyaW5nIHNwYXJ0YW4yLCQoQ09ORklHX1hJTElOWF9NSUNST0JMQVpFMF9GQU1JTFkpKSkKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggZWFlMzIyMi4uOGNkYWMxNCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTcwLDcgKzcwLDcgQEAKIAogLyoKICAqIHJlYWQgKHJlYWRiLCByZWFkdywgcmVhZGwsIHJlYWRxKSBhbmQgd3JpdGUgKHdyaXRlYiwgd3JpdGV3LAotICogd3JpdGVsLCB3cml0ZXEpIGFjY2Vzc29ycyBhcmUgZm9yIFBDSSBhbmQgdGh1cyBsaXR0ZWwgZW5kaWFuLgorICogd3JpdGVsLCB3cml0ZXEpIGFjY2Vzc29ycyBhcmUgZm9yIFBDSSBhbmQgdGh1cyBsaXR0bGUgZW5kaWFuLgogICogTGludXggMi40IGZvciBNaWNyb2JsYXplIGhhZCB0aGlzIHdyb25nLgogICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BjaS1icmlkZ2UuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wY2ktYnJpZGdlLmgKaW5kZXggMTA3MTc2Ni4uNzQ2ZGY5MSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BjaS1icmlkZ2UuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGNpLWJyaWRnZS5oCkBAIC03Niw3ICs3Niw3IEBACiAJICogVXNlZCBmb3IgdmFyaWFudHMgb2YgUENJIGluZGlyZWN0IGhhbmRsaW5nIGFuZCBwb3NzaWJsZSBxdWlya3M6CiAJICogIFNFVF9DRkdfVFlQRSAtIHVzZWQgb24gNHh4IG9yIGFueSBQSEIgdGhhdCBkb2VzIGV4cGxpY2l0IHR5cGUwLzEKIAkgKiAgRVhUX1JFRyAtIHByb3ZpZGVzIGFjY2VzcyB0byBQQ0ktZSBleHRlbmRlZCByZWdpc3RlcnMKLQkgKiAgU1VSUFJFU1NfUFJJTUFSWV9CVVMgLSB3ZSBzdXJwcmVzcyB0aGUgc2V0dGluZyBvZiBQQ0lfUFJJTUFSWV9CVVMKKwkgKiAgU1VSUFJFU1NfUFJJTUFSWV9CVVMgLSB3ZSBzdXBwcmVzcyB0aGUgc2V0dGluZyBvZiBQQ0lfUFJJTUFSWV9CVVMKIAkgKiAgIG9uIEZyZWVzY2FsZSBQQ0ktZSBjb250cm9sbGVycyBzaW5jZSB0aGV5IHVzZWQgdGhlIFBDSV9QUklNQVJZX0JVUwogCSAqICAgdG8gZGV0ZXJtaW5lIHdoaWNoIGJ1cyBudW1iZXIgdG8gbWF0Y2ggb24gd2hlbiBnZW5lcmF0aW5nIHR5cGUwCiAJICogICBjb25maWcgY3ljbGVzCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGNpLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggMjIzMmZmOTQuLmJhNjVjZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wY2kuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTE1OCw3ICsxNTgsNyBAQAogZXh0ZXJuIHZvaWQgcGNpYmlvc19zZXR1cF9idXNfZGV2aWNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIGV4dGVybiB2b2lkIHBjaWJpb3Nfc2V0dXBfYnVzX3NlbGYoc3RydWN0IHBjaV9idXMgKmJ1cyk7CiAKLS8qIFRoaXMgcGFydCBvZiBjb2RlIHdhcyBvcmlnaW5hbHkgaW4geGlsaW54LXBjaS5oICovCisvKiBUaGlzIHBhcnQgb2YgY29kZSB3YXMgb3JpZ2luYWxseSBpbiB4aWxpbngtcGNpLmggKi8KICNpZmRlZiBDT05GSUdfUENJX1hJTElOWAogZXh0ZXJuIHZvaWQgX19pbml0IHhpbGlueF9wY2lfaW5pdCh2b2lkKTsKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9jYWNoZS5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvY2FjaGUuYwppbmRleCBjZjBhZmQ5Li40YjdkOGEzIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9jYWNoZS5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L2NhY2hlLmMKQEAgLTEyOSw3ICsxMjksNyBAQAogICogdG8gdXNlIGZvciBzaW1wbGUgd2RjIG9yIHdpYy4KICAqCiAgKiBzdGFydCBhZGRyZXNzIGlzIGNhY2hlIGFsaWduZWQKLSAqIGVuZCBhZGRyZXNzIGlzIG5vdCBhbGlnbmVkLCBpZiBlbmQgaXMgYWxpZ25lZCB0aGVuIEkgaGF2ZSB0byBzdWJzdHJhY3QKKyAqIGVuZCBhZGRyZXNzIGlzIG5vdCBhbGlnbmVkLCBpZiBlbmQgaXMgYWxpZ25lZCB0aGVuIEkgaGF2ZSB0byBzdWJ0cmFjdAogICogY2FjaGVsaW5lIGxlbmd0aCBiZWNhdXNlIEkgY2FuJ3QgZmx1c2gvaW52YWxpZGF0ZSB0aGUgbmV4dCBjYWNoZWxpbmUuCiAgKiBJZiBpcyBub3QsIEkgYWxpZ24gaXQgYmVjYXVzZSBJIHdpbGwgZmx1c2gvaW52YWxpZGF0ZSB3aG9sZSBsaW5lLgogICovCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvbGliL21lbWNweS5jIGIvYXJjaC9taWNyb2JsYXplL2xpYi9tZW1jcHkuYwppbmRleCBjYzQ5NWQ3Li41Mjc0NmU3IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvbGliL21lbWNweS5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9saWIvbWVtY3B5LmMKQEAgLTYzLDggKzYzLDggQEAKIAlpZiAobGlrZWx5KGMgPj0gNCkpIHsKIAkJdW5zaWduZWQgIHZhbHVlLCBidWZfaG9sZDsKIAotCQkvKiBBbGlnbiB0aGUgZHN0aW5hdGlvbiB0byBhIHdvcmQgYm91bmRyeS4gKi8KLQkJLyogVGhpcyBpcyBkb25lIGluIGFuIGVuZGlhbiBpbmRlcGVuZGFudCBtYW5uZXIuICovCisJCS8qIEFsaWduIHRoZSBkZXN0aW5hdGlvbiB0byBhIHdvcmQgYm91bmRhcnkuICovCisJCS8qIFRoaXMgaXMgZG9uZSBpbiBhbiBlbmRpYW4gaW5kZXBlbmRlbnQgbWFubmVyLiAqLwogCQlzd2l0Y2ggKCh1bnNpZ25lZCBsb25nKWRzdCAmIDMpIHsKIAkJY2FzZSAxOgogCQkJKmRzdCsrID0gKnNyYysrOwpAQCAtODAsNyArODAsNyBAQAogCQlpX2RzdCA9ICh2b2lkICopZHN0OwogCiAJCS8qIENob29zZSBhIGNvcHkgc2NoZW1lIGJhc2VkIG9uIHRoZSBzb3VyY2UgKi8KLQkJLyogYWxpZ25tZW50IHJlbGF0aXZlIHRvIGRzdGluYXRpb24uICovCisJCS8qIGFsaWdubWVudCByZWxhdGl2ZSB0byBkZXN0aW5hdGlvbi4gKi8KIAkJc3dpdGNoICgodW5zaWduZWQgbG9uZylzcmMgJiAzKSB7CiAJCWNhc2UgMHgwOgkvKiBCb3RoIGJ5dGUgb2Zmc2V0cyBhcmUgYWxpZ25lZCAqLwogCQkJaV9zcmMgID0gKGNvbnN0IHZvaWQgKilzcmM7CkBAIC0xNzMsNyArMTczLDcgQEAKIAl9CiAKIAkvKiBGaW5pc2ggb2ZmIGFueSByZW1haW5pbmcgYnl0ZXMgKi8KLQkvKiBzaW1wbGUgZmFzdCBjb3B5LCAuLi4gdW5sZXNzIGEgY2FjaGUgYm91bmRyeSBpcyBjcm9zc2VkICovCisJLyogc2ltcGxlIGZhc3QgY29weSwgLi4uIHVubGVzcyBhIGNhY2hlIGJvdW5kYXJ5IGlzIGNyb3NzZWQgKi8KIAlzd2l0Y2ggKGMpIHsKIAljYXNlIDM6CiAJCSpkc3QrKyA9ICpzcmMrKzsKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9saWIvbWVtbW92ZS5jIGIvYXJjaC9taWNyb2JsYXplL2xpYi9tZW1tb3ZlLmMKaW5kZXggODEwZmQ2OC4uMjE0NmMzNyAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2xpYi9tZW1tb3ZlLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2xpYi9tZW1tb3ZlLmMKQEAgLTgzLDggKzgzLDggQEAKIAlpZiAoYyA+PSA0KSB7CiAJCXVuc2lnbmVkICB2YWx1ZSwgYnVmX2hvbGQ7CiAKLQkJLyogQWxpZ24gdGhlIGRlc3RpbmF0aW9uIHRvIGEgd29yZCBib3VuZHJ5LiAqLwotCQkvKiBUaGlzIGlzIGRvbmUgaW4gYW4gZW5kaWFuIGluZGVwZW5kYW50IG1hbm5lci4gKi8KKwkJLyogQWxpZ24gdGhlIGRlc3RpbmF0aW9uIHRvIGEgd29yZCBib3VuZGFyeS4gKi8KKwkJLyogVGhpcyBpcyBkb25lIGluIGFuIGVuZGlhbiBpbmRlcGVuZGVudCBtYW5uZXIuICovCiAKIAkJc3dpdGNoICgodW5zaWduZWQgbG9uZylkc3QgJiAzKSB7CiAJCWNhc2UgMzoKQEAgLTE5Myw3ICsxOTMsNyBAQAogCQlkc3QgPSAodm9pZCAqKWlfZHN0OwogCX0KIAotCS8qIHNpbXBsZSBmYXN0IGNvcHksIC4uLiB1bmxlc3MgYSBjYWNoZSBib3VuZHJ5IGlzIGNyb3NzZWQgKi8KKwkvKiBzaW1wbGUgZmFzdCBjb3B5LCAuLi4gdW5sZXNzIGEgY2FjaGUgYm91bmRhcnkgaXMgY3Jvc3NlZCAqLwogCS8qIEZpbmlzaCBvZmYgYW55IHJlbWFpbmluZyBieXRlcyAqLwogCXN3aXRjaCAoYykgewogCWNhc2UgNDoKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9saWIvbWVtc2V0LmMgYi9hcmNoL21pY3JvYmxhemUvbGliL21lbXNldC5jCmluZGV4IDgzNDU2NWQuLmRkZjY3OTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9saWIvbWVtc2V0LmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2xpYi9tZW1zZXQuYwpAQCAtNjQsNyArNjQsNyBAQAogCiAJaWYgKGxpa2VseShuID49IDQpKSB7CiAJCS8qIEFsaWduIHRoZSBkZXN0aW5hdGlvbiB0byBhIHdvcmQgYm91bmRhcnkgKi8KLQkJLyogVGhpcyBpcyBkb25lIGluIGFuIGVuZGlhbiBpbmRlcGVuZGFudCBtYW5uZXIgKi8KKwkJLyogVGhpcyBpcyBkb25lIGluIGFuIGVuZGlhbiBpbmRlcGVuZGVudCBtYW5uZXIgKi8KIAkJc3dpdGNoICgodW5zaWduZWQpIHNyYyAmIDMpIHsKIAkJY2FzZSAxOgogCQkJKnNyYysrID0gYzsKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9wY2kvaW5kaXJlY3RfcGNpLmMgYi9hcmNoL21pY3JvYmxhemUvcGNpL2luZGlyZWN0X3BjaS5jCmluZGV4IDI1ZjE4ZjAuLjQxOTZlYjZiIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvcGNpL2luZGlyZWN0X3BjaS5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9wY2kvaW5kaXJlY3RfcGNpLmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogCQlvdXRfbGUzMihob3NlLT5jZmdfYWRkciwgKDB4ODAwMDAwMDAgfCAoYnVzX25vIDw8IDE2KSB8CiAJCQkgKGRldmZuIDw8IDgpIHwgcmVnIHwgY2ZnX3R5cGUpKTsKIAotCS8qIHN1cnByZXNzIHNldHRpbmcgb2YgUENJX1BSSU1BUllfQlVTICovCisJLyogc3VwcHJlc3Mgc2V0dGluZyBvZiBQQ0lfUFJJTUFSWV9CVVMgKi8KIAlpZiAoaG9zZS0+aW5kaXJlY3RfdHlwZSAmIElORElSRUNUX1RZUEVfU1VSUFJFU1NfUFJJTUFSWV9CVVMpCiAJCWlmICgob2Zmc2V0ID09IFBDSV9QUklNQVJZX0JVUykgJiYKIAkJCShidXMtPm51bWJlciA9PSBob3NlLT5maXJzdF9idXNubykpCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvcGxhdGZvcm0vZ2VuZXJpYy9LY29uZmlnLmF1dG8gYi9hcmNoL21pY3JvYmxhemUvcGxhdGZvcm0vZ2VuZXJpYy9LY29uZmlnLmF1dG8KaW5kZXggNWQ4NmZjMS4uMjVhNmYwMSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL3BsYXRmb3JtL2dlbmVyaWMvS2NvbmZpZy5hdXRvCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9wbGF0Zm9ybS9nZW5lcmljL0tjb25maWcuYXV0bwpAQCAtMjksNyArMjksNyBAQAogCSAgQkFTRSBBZGRyZXNzIGZvciBrZXJuZWwKIAogY29uZmlnIFhJTElOWF9NSUNST0JMQVpFMF9GQU1JTFkKLQlzdHJpbmcgIlRhcmdldHRlZCBGUEdBIGZhbWlseSIKKwlzdHJpbmcgIlRhcmdldGVkIEZQR0EgZmFtaWx5IgogCWRlZmF1bHQgInZpcnRleDUiCiAKIGNvbmZpZyBYSUxJTlhfTUlDUk9CTEFaRTBfVVNFX01TUl9JTlNUUgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL0tjb25maWcgYi9hcmNoL21pcHMvS2NvbmZpZwppbmRleCA4M2FhNWZiLi4zNTFjODBmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvS2NvbmZpZworKysgYi9hcmNoL21pcHMvS2NvbmZpZwpAQCAtOTk3LDkgKzk5Nyw2IEBACiBjb25maWcgSVJRX0dJQwogCWJvb2wKIAotY29uZmlnIElSUV9DUFVfT0NURU9OCi0JYm9vbAotCiBjb25maWcgTUlQU19CT0FSRFNfR0VOCiAJYm9vbAogCkBAIC0xMTM1LDcgKzExMzIsNyBAQAogCSAgVGhlIExvb25nc29uIDJFIHByb2Nlc3NvciBpbXBsZW1lbnRzIHRoZSBNSVBTIElJSSBpbnN0cnVjdGlvbiBzZXQKIAkgIHdpdGggbWFueSBleHRlbnNpb25zLgogCi0JICBJdCBoYXMgYW4gaW50ZXJuYWwgRlBHQSBub3J0aGJyaWRnZSwgd2hpY2ggaXMgY29tcGF0aWFibGUgdG8KKwkgIEl0IGhhcyBhbiBpbnRlcm5hbCBGUEdBIG5vcnRoYnJpZGdlLCB3aGljaCBpcyBjb21wYXRpYmxlIHRvCiAJICBib25pdG82NC4KIAogY29uZmlnIENQVV9MT09OR1NPTjJGCkBAIC0xMzU5LDggKzEzNTYsNiBAQAogY29uZmlnIENQVV9DQVZJVU1fT0NURU9OCiAJYm9vbCAiQ2F2aXVtIE9jdGVvbiBwcm9jZXNzb3IiCiAJZGVwZW5kcyBvbiBTWVNfSEFTX0NQVV9DQVZJVU1fT0NURU9OCi0Jc2VsZWN0IElSUV9DUFUKLQlzZWxlY3QgSVJRX0NQVV9PQ1RFT04KIAlzZWxlY3QgQ1BVX0hBU19QUkVGRVRDSAogCXNlbGVjdCBDUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU19TTVAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9NYWtlZmlsZSBiL2FyY2gvbWlwcy9NYWtlZmlsZQppbmRleCBhYzFkNWI2Li41M2UzNTE0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL01ha2VmaWxlCkBAIC0xMDEsNyArMTAxLDcgQEAKICMgY2FyZWZ1bGx5IGF2b2lkIHRvIGFkZCBpdCByZWR1bmRhbnRseSBiZWNhdXNlIGdjYyAzLjMvMy40IGNvbXBsYWlucwogIyB3aGVuIGZlZCB0aGUgdG9vbGNoYWluIGRlZmF1bHQhCiAjCi0jIENlcnRhaW4gZ2NjIHZlcnNpb25zIHVwdG8gZ2NjIDQuMS4xIChwcm9iYWJseSA0LjItc3VidmVyc2lvbiBhcyBvZgorIyBDZXJ0YWluIGdjYyB2ZXJzaW9ucyB1cCB0byBnY2MgNC4xLjEgKHByb2JhYmx5IDQuMi1zdWJ2ZXJzaW9uIGFzIG9mCiAjIDIwMDYtMTAtMTAgZG9uJ3QgcHJvcGVybHkgY2hhbmdlIHRoZSBwcmVkZWZpbmVkIHN5bWJvbHMgaWYgLUVCIC8gLUVMCiAjIGFyZSB1c2VkLCBzbyB3ZSBrbHVkZ2UgdGhhdCBoZXJlLiAgQSBidWcgaGFzIGJlZW4gZmlsZWQgYXQKICMgaHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0yOTQxMy4KQEAgLTMxNCw1ICszMTQsNSBAQAogCWVjaG8gJyAgdm1saW51ei5iaW4gICAgICAgICAgLSBSYXcgYmluYXJ5IHpib290IGltYWdlJwogCWVjaG8gJyAgdm1saW51ei5zcmVjICAgICAgICAgLSBTUkVDIHpib290IGltYWdlJwogCWVjaG8KLQllY2hvICcgIFRoZXNlIHdpbGwgYmUgZGVmYXVsdCBhcyBhcHJvcHJpYXRlIGZvciBhIGNvbmZpZ3VyZWQgcGxhdGZvcm0uJworCWVjaG8gJyAgVGhlc2Ugd2lsbCBiZSBkZWZhdWx0IGFzIGFwcHJvcHJpYXRlIGZvciBhIGNvbmZpZ3VyZWQgcGxhdGZvcm0uJwogZW5kZWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9jbG9ja3MuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9jbG9ja3MuYwppbmRleCBhZjBmZTQxLi5mMzgyOThhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vY2xvY2tzLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2Nsb2Nrcy5jCkBAIC03NSw3ICs3NSw3IEBACiAgKiBjb3VudGVyLCBpZiBpdCBleGlzdHMuICBJZiB3ZSBkb24ndCBoYXZlIGFuIGFjY3VyYXRlIHByb2Nlc3NvcgogICogc3BlZWQsIGFsbCBvZiB0aGUgcGVyaXBoZXJhbHMgdGhhdCBkZXJpdmUgdGhlaXIgY2xvY2tzIGJhc2VkIG9uCiAgKiB0aGlzIGFkdmVydGlzZWQgc3BlZWQgd2lsbCBpbnRyb2R1Y2UgZXJyb3IgYW5kIHNvbWV0aW1lcyBub3Qgd29yawotICogcHJvcGVybHkuICBUaGlzIGZ1bmN0aW9uIGlzIGZ1dGhlciBjb252b2x1dGVkIHRvIHN0aWxsIGFsbG93IGNvbmZpZ3VyYXRpb25zCisgKiBwcm9wZXJseS4gIFRoaXMgZnVuY3Rpb24gaXMgZnVydGhlciBjb252b2x1dGVkIHRvIHN0aWxsIGFsbG93IGNvbmZpZ3VyYXRpb25zCiAgKiB0byBkbyB0aGF0IGluIGNhc2UgdGhleSBoYXZlIHJlYWxseSwgcmVhbGx5IG9sZCBzaWxpY29uIHdpdGggYQogICogd3JpdGUtb25seSBQTEwgcmVnaXN0ZXIuCQkJLS0gRGFuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvYm9hcmRfc2V0dXAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvYm9hcmRfc2V0dXAuYwppbmRleCAwNWYxMjBmLi41Yzk1NmZlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL2JvYXJkX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMXgwMC9ib2FyZF9zZXR1cC5jCkBAIC0xMjcsMTMgKzEyNywxMCBAQAogdm9pZCBfX2luaXQgYm9hcmRfc2V0dXAodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGJjc3IxLCBiY3NyMjsKLQl1MzIgcGluX2Z1bmM7CiAKIAliY3NyMSA9IERCMTAwMF9CQ1NSX1BIWVNfQUREUjsKIAliY3NyMiA9IERCMTAwMF9CQ1NSX1BIWVNfQUREUiArIERCMTAwMF9CQ1NSX0hFWExFRF9PRlM7CiAKLQlwaW5fZnVuYyA9IDA7Ci0KICNpZmRlZiBDT05GSUdfTUlQU19EQjEwMDAKIAlwcmludGsoS0VSTl9JTkZPICJBTUQgQWxjaGVteSBBdTEwMDAvRGIxMDAwIEJvYXJkXG4iKTsKICNlbmRpZgpAQCAtMTY0LDEyICsxNjEsMTYgQEAKIAkvKiBOb3QgdmFsaWQgZm9yIEF1MTU1MCAqLwogI2lmIGRlZmluZWQoQ09ORklHX0lSREEpICYmIFwKICAgIChkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKSB8fCBkZWZpbmVkKENPTkZJR19TT0NfQVUxMTAwKSkKLQkvKiBTZXQgSVJGSVJTRUwgaW5zdGVhZCBvZiBHUElPMTUgKi8KLQlwaW5fZnVuYyA9IGF1X3JlYWRsKFNZU19QSU5GVU5DKSB8IFNZU19QRl9JUkY7Ci0JYXVfd3JpdGVsKHBpbl9mdW5jLCBTWVNfUElORlVOQyk7Ci0JLyogUG93ZXIgb2ZmIHVudGlsIHRoZSBkcml2ZXIgaXMgaW4gdXNlICovCi0JYmNzcl9tb2QoQkNTUl9SRVNFVFMsIEJDU1JfUkVTRVRTX0lSREFfTU9ERV9NQVNLLAotCQkJCUJDU1JfUkVTRVRTX0lSREFfTU9ERV9PRkYpOworCXsKKwkJdTMyIHBpbl9mdW5jOworCisJCS8qIFNldCBJUkZJUlNFTCBpbnN0ZWFkIG9mIEdQSU8xNSAqLworCQlwaW5fZnVuYyA9IGF1X3JlYWRsKFNZU19QSU5GVU5DKSB8IFNZU19QRl9JUkY7CisJCWF1X3dyaXRlbChwaW5fZnVuYywgU1lTX1BJTkZVTkMpOworCQkvKiBQb3dlciBvZmYgdW50aWwgdGhlIGRyaXZlciBpcyBpbiB1c2UgKi8KKwkJYmNzcl9tb2QoQkNTUl9SRVNFVFMsIEJDU1JfUkVTRVRTX0lSREFfTU9ERV9NQVNLLAorCQkJIEJDU1JfUkVTRVRTX0lSREFfTU9ERV9PRkYpOworCX0KICNlbmRpZgogCWJjc3Jfd3JpdGUoQkNTUl9QQ01DSUEsIDApOwkvKiB0dXJuIG9mZiBQQ01DSUEgcG93ZXIgKi8KIApAQCAtMTc3LDMxICsxNzgsMzUgQEAKIAlhbGNoZW15X2dwaW8xX2lucHV0X2VuYWJsZSgpOwogCiAjaWZkZWYgQ09ORklHX01JUFNfTUlSQUdFCi0JLyogR1BJT1syMF0gaXMgb3V0cHV0ICovCi0JYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoMjAsIDApOworCXsKKwkJdTMyIHBpbl9mdW5jOwogCi0JLyogU2V0IEdQSU9bMjEwOjIwOF0gaW5zdGVhZCBvZiBTU0lfMCAqLwotCXBpbl9mdW5jID0gYXVfcmVhZGwoU1lTX1BJTkZVTkMpIHwgU1lTX1BGX1MwOworCQkvKiBHUElPWzIwXSBpcyBvdXRwdXQgKi8KKwkJYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoMjAsIDApOwogCi0JLyogU2V0IEdQSU9bMjE1OjIxMV0gZm9yIExFRHMgKi8KLQlwaW5fZnVuYyB8PSA1IDw8IDI7CisJCS8qIFNldCBHUElPWzIxMDoyMDhdIGluc3RlYWQgb2YgU1NJXzAgKi8KKwkJcGluX2Z1bmMgPSBhdV9yZWFkbChTWVNfUElORlVOQykgfCBTWVNfUEZfUzA7CiAKLQkvKiBTZXQgR1BJT1syMTQ6MjEzXSBmb3IgbW9yZSBMRURzICovCi0JcGluX2Z1bmMgfD0gNSA8PCAxMjsKKwkJLyogU2V0IEdQSU9bMjE1OjIxMV0gZm9yIExFRHMgKi8KKwkJcGluX2Z1bmMgfD0gNSA8PCAyOwogCi0JLyogU2V0IEdQSU9bMjA3OjIwMF0gaW5zdGVhZCBvZiBQQ01DSUEvTENEICovCi0JcGluX2Z1bmMgfD0gU1lTX1BGX0xDRCB8IFNZU19QRl9QQzsKLQlhdV93cml0ZWwocGluX2Z1bmMsIFNZU19QSU5GVU5DKTsKKwkJLyogU2V0IEdQSU9bMjE0OjIxM10gZm9yIG1vcmUgTEVEcyAqLworCQlwaW5fZnVuYyB8PSA1IDw8IDEyOwogCi0JLyoKLQkgKiBFbmFibGUgc3BlYWtlciBhbXBsaWZpZXIuICBUaGlzIHNob3VsZAotCSAqIGJlIHBhcnQgb2YgdGhlIGF1ZGlvIGRyaXZlci4KLQkgKi8KLQlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX291dHB1dCgyMDksIDEpOworCQkvKiBTZXQgR1BJT1syMDc6MjAwXSBpbnN0ZWFkIG9mIFBDTUNJQS9MQ0QgKi8KKwkJcGluX2Z1bmMgfD0gU1lTX1BGX0xDRCB8IFNZU19QRl9QQzsKKwkJYXVfd3JpdGVsKHBpbl9mdW5jLCBTWVNfUElORlVOQyk7CiAKLQlwbV9wb3dlcl9vZmYgPSBtaXJhZ2VfcG93ZXJfb2ZmOwotCV9tYWNoaW5lX2hhbHQgPSBtaXJhZ2VfcG93ZXJfb2ZmOwotCV9tYWNoaW5lX3Jlc3RhcnQgPSAodm9pZCgqKShjaGFyICopKW1pcHNfc29mdHJlc2V0OworCQkvKgorCQkgKiBFbmFibGUgc3BlYWtlciBhbXBsaWZpZXIuICBUaGlzIHNob3VsZAorCQkgKiBiZSBwYXJ0IG9mIHRoZSBhdWRpbyBkcml2ZXIuCisJCSAqLworCQlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX291dHB1dCgyMDksIDEpOworCisJCXBtX3Bvd2VyX29mZiA9IG1pcmFnZV9wb3dlcl9vZmY7CisJCV9tYWNoaW5lX2hhbHQgPSBtaXJhZ2VfcG93ZXJfb2ZmOworCQlfbWFjaGluZV9yZXN0YXJ0ID0gKHZvaWQoKikoY2hhciAqKSltaXBzX3NvZnRyZXNldDsKKwl9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19NSVBTX0JPU1BPUlVTCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2luaXQuYyBiL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvaW5pdC5jCmluZGV4IDE1MTI1YzIuLjM0YTkwYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvaW5pdC5jCkBAIC01MSwxMCArNTEsOSBAQAogCXByb21faW5pdF9jbWRsaW5lKCk7CiAKIAltZW1zaXplX3N0ciA9IHByb21fZ2V0ZW52KCJtZW1zaXplIik7Ci0JaWYgKCFtZW1zaXplX3N0cikKKwlpZiAoIW1lbXNpemVfc3RyIHx8IHN0cmljdF9zdHJ0b3VsKG1lbXNpemVfc3RyLCAwLCAmbWVtc2l6ZSkpCiAJCW1lbXNpemUgPSAweDA0MDAwMDAwOwotCWVsc2UKLQkJc3RyaWN0X3N0cnRvdWwobWVtc2l6ZV9zdHIsIDAsICZtZW1zaXplKTsKKwogCWFkZF9tZW1vcnlfcmVnaW9uKDAsIG1lbXNpemUsIEJPT1RfTUVNX1JBTSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hcjcvZ3Bpby5jIGIvYXJjaC9taXBzL2FyNy9ncGlvLmMKaW5kZXggNDI1ZGZhNS4uYmI1NzFiYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FyNy9ncGlvLmMKKysrIGIvYXJjaC9taXBzL2FyNy9ncGlvLmMKQEAgLTMyNSw5ICszMjUsNyBAQAogCQlzaXplID0gMHgxZjsKIAl9CiAKLQlncGNoLT5yZWdzID0gaW9yZW1hcF9ub2NhY2hlKEFSN19SRUdTX0dQSU8sCi0JCQkJCUFSN19SRUdTX0dQSU8gKyAweDEwKTsKLQorCWdwY2gtPnJlZ3MgPSBpb3JlbWFwX25vY2FjaGUoQVI3X1JFR1NfR1BJTywgc2l6ZSk7CiAJaWYgKCFncGNoLT5yZWdzKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBpb3JlbWFwIHJlZ3NcbiIsCiAJCQkJCWdwY2gtPmNoaXAubGFiZWwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9jYWxjX3ZtbGludXpfbG9hZF9hZGRyLmMgYi9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2NhbGNfdm1saW51el9sb2FkX2FkZHIuYwppbmRleCA4OGM5ZDk2My4uOWE2MjQzNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9jYWxjX3ZtbGludXpfbG9hZF9hZGRyLmMKKysrIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9jYWxjX3ZtbGludXpfbG9hZF9hZGRyLmMKQEAgLTE2LDggKzE2LDggQEAKIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdm1saW51eF9zaXplLCB2bWxpbnV4X2xvYWRfYWRkciwgdm1saW51el9sb2FkX2FkZHI7CiAJc3RydWN0IHN0YXQgc2I7Ci0JdWludDY0X3Qgdm1saW51eF9zaXplLCB2bWxpbnV4X2xvYWRfYWRkciwgdm1saW51el9sb2FkX2FkZHI7CiAKIAlpZiAoYXJnYyAhPSAzKSB7CiAJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIDxwYXRobmFtZT4gPHZtbGludXhfbG9hZF9hZGRyPlxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL0tjb25maWcgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9LY29uZmlnCmluZGV4IGNhYWUyMjguLmNhZDU1NWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL0tjb25maWcKKysrIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vS2NvbmZpZwpAQCAtMSwxMSArMSw3IEBACi1jb25maWcgQ0FWSVVNX09DVEVPTl9TUEVDSUZJQ19PUFRJT05TCi0JYm9vbCAiRW5hYmxlIE9jdGVvbiBzcGVjaWZpYyBvcHRpb25zIgotCWRlcGVuZHMgb24gQ1BVX0NBVklVTV9PQ1RFT04KLQlkZWZhdWx0ICJ5IgoraWYgQ1BVX0NBVklVTV9PQ1RFT04KIAogY29uZmlnIENBVklVTV9DTjYzWFhQMQogCWJvb2wgIkVuYWJsZSBDTjYzWFhQMSBlcnJhdGEgd29yYXJvdW5kcyIKLQlkZXBlbmRzIG9uIENBVklVTV9PQ1RFT05fU1BFQ0lGSUNfT1BUSU9OUwogCWRlZmF1bHQgIm4iCiAJaGVscAogCSAgVGhlIENONjNYWFAxIGNoaXAgcmVxdWlyZXMgYnVpbGQgdGltZSB3b3JrYXJvdW5kcyB0bwpAQCAtMTYsNyArMTIsNiBAQAogCiBjb25maWcgQ0FWSVVNX09DVEVPTl8yTkRfS0VSTkVMCiAJYm9vbCAiQnVpbGQgdGhlIGtlcm5lbCB0byBiZSB1c2VkIGFzIGEgMm5kIGtlcm5lbCBvbiB0aGUgc2FtZSBjaGlwIgotCWRlcGVuZHMgb24gQ0FWSVVNX09DVEVPTl9TUEVDSUZJQ19PUFRJT05TCiAJZGVmYXVsdCAibiIKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBjb25maWd1cmVzIHRoaXMga2VybmVsIHRvIGJlIGxpbmtlZCBhdCBhIGRpZmZlcmVudApAQCAtMjYsNyArMjEsNiBAQAogCiBjb25maWcgQ0FWSVVNX09DVEVPTl9IV19GSVhfVU5BTElHTkVECiAJYm9vbCAiRW5hYmxlIGhhcmR3YXJlIGZpeHVwcyBvZiB1bmFsaWduZWQgbG9hZHMgYW5kIHN0b3JlcyIKLQlkZXBlbmRzIG9uIENBVklVTV9PQ1RFT05fU1BFQ0lGSUNfT1BUSU9OUwogCWRlZmF1bHQgInkiCiAJaGVscAogCSAgQ29uZmlndXJlIHRoZSBPY3Rlb24gaGFyZHdhcmUgdG8gYXV0b21hdGljYWxseSBmaXggdW5hbGlnbmVkIGxvYWRzCkBAIC0zOCw3ICszMiw2IEBACiAKIGNvbmZpZyBDQVZJVU1fT0NURU9OX0NWTVNFR19TSVpFCiAJaW50ICJOdW1iZXIgb2YgTDEgY2FjaGUgbGluZXMgcmVzZXJ2ZWQgZm9yIENWTVNFRyBtZW1vcnkiCi0JZGVwZW5kcyBvbiBDQVZJVU1fT0NURU9OX1NQRUNJRklDX09QVElPTlMKIAlyYW5nZSAwIDU0CiAJZGVmYXVsdCAxCiAJaGVscApAQCAtNTAsNyArNDMsNiBAQAogCiBjb25maWcgQ0FWSVVNX09DVEVPTl9MT0NLX0wyCiAJYm9vbCAiTG9jayBvZnRlbiB1c2VkIGtlcm5lbCBjb2RlIGluIHRoZSBMMiIKLQlkZXBlbmRzIG9uIENBVklVTV9PQ1RFT05fU1BFQ0lGSUNfT1BUSU9OUwogCWRlZmF1bHQgInkiCiAJaGVscAogCSAgRW5hYmxlIGxvY2tpbmcgcGFydHMgb2YgdGhlIGtlcm5lbCBpbnRvIHRoZSBMMiBjYWNoZS4KQEAgLTkzLDcgKzg1LDYgQEAKIGNvbmZpZyBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAlkZWZfYm9vbCB5CiAJc2VsZWN0IFNQQVJTRU1FTV9TVEFUSUMKLQlkZXBlbmRzIG9uIENQVV9DQVZJVU1fT0NURU9OCiAKIGNvbmZpZyBDQVZJVU1fT0NURU9OX0hFTFBFUgogCWRlZl9ib29sIHkKQEAgLTEwNyw2ICs5OCw4IEBACiAKIGNvbmZpZyBTV0lPVExCCiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gQ1BVX0NBVklVTV9PQ1RFT04KIAlzZWxlY3QgSU9NTVVfSEVMUEVSCiAJc2VsZWN0IE5FRURfU0dfRE1BX0xFTkdUSAorCisKK2VuZGlmICMgQ1BVX0NBVklVTV9PQ1RFT04KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2V4ZWN1dGl2ZS9vY3Rlb24tbW9kZWwuYyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2V4ZWN1dGl2ZS9vY3Rlb24tbW9kZWwuYwppbmRleCA5YWZjMzc5Li5jOGQzNTY4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9leGVjdXRpdmUvb2N0ZW9uLW1vZGVsLmMKKysrIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZXhlY3V0aXZlL29jdGVvbi1tb2RlbC5jCkBAIC03NSw3ICs3NSw3IEBACiAKIAludW1fY29yZXMgPSBjdm14X29jdGVvbl9udW1fY29yZXMoKTsKIAotCS8qIE1ha2Ugc3VyZSB0aGUgbm9uIGV4aXN0YW50IGRldmljZXMgbG9vayBkaXNhYmxlZCAqLworCS8qIE1ha2Ugc3VyZSB0aGUgbm9uIGV4aXN0ZW50IGRldmljZXMgbG9vayBkaXNhYmxlZCAqLwogCXN3aXRjaCAoKGNoaXBfaWQgPj4gOCkgJiAweGZmKSB7CiAJY2FzZSA2OgkJLyogQ041MFhYICovCiAJY2FzZSAyOgkJLyogQ04zMFhYICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24tcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1wbGF0Zm9ybS5jCmluZGV4IGNlY2FmNjIuLmNkNjFkNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1wbGF0Zm9ybS5jCkBAIC03NSw3ICs3NSw3IEBACiAJCSAqIHplcm8uCiAJCSAqLwogCi0JCS8qIEFzdW1lIHRoYXQgQ1MxIGltbWVkaWF0ZWx5IGZvbGxvd3MuICovCisJCS8qIEFzc3VtZSB0aGF0IENTMSBpbW1lZGlhdGVseSBmb2xsb3dzLiAqLwogCQltaW9fYm9vdF9yZWdfY2ZnLnU2NCA9CiAJCQljdm14X3JlYWRfY3NyKENWTVhfTUlPX0JPT1RfUkVHX0NGR1goaSArIDEpKTsKIAkJcmVnaW9uX2Jhc2UgPSBtaW9fYm9vdF9yZWdfY2ZnLnMuYmFzZSA8PCAxNjsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jCmluZGV4IDhiMTM5YmYuLjA3MDdmYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYwpAQCAtNjYyLDcgKzY2Miw3IEBACiAJICogc29tZSBtZW1vcnkgdmVjdG9ycy4gV2hlbiBTUEFSU0VNRU0gaXMgaW4gdXNlLCBpdCBkb2Vzbid0CiAJICogdmVyaWZ5IHRoYXQgdGhlIHNpemUgaXMgYmlnIGVub3VnaCBmb3IgdGhlIGZpbmFsCiAJICogdmVjdG9ycy4gTWFraW5nIHRoZSBzbWFsbGVzdCBjaHVjayA0TUIgc2VlbXMgdG8gYmUgZW5vdWdoCi0JICogdG8gY29uc2lzdGFudGx5IHdvcmsuCisJICogdG8gY29uc2lzdGVudGx5IHdvcmsuCiAJICovCiAJbWVtX2FsbG9jX3NpemUgPSA0IDw8IDIwOwogCWlmIChtZW1fYWxsb2Nfc2l6ZSA+IE1BWF9NRU1PUlkpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZncvYXJjL3Byb21saWIuYyBiL2FyY2gvbWlwcy9mdy9hcmMvcHJvbWxpYi5jCmluZGV4IGM1MDhjMDAuLmI3ZjlkZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9mdy9hcmMvcHJvbWxpYi5jCisrKyBiL2FyY2gvbWlwcy9mdy9hcmMvcHJvbWxpYi5jCkBAIC00LDcgKzQsNyBAQAogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkbUBzZ2kuY29tKQotICogQ29tcGFiaWxpdHkgd2l0aCBib2FyZCBjYWNoZXMsIFVsZiBDYXJsc3NvbgorICogQ29tcGF0aWJpbGl0eSB3aXRoIGJvYXJkIGNhY2hlcywgVWxmIENhcmxzc29uCiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxhc20vc2dpYWxpYi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NhY2hlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY2FjaGUuaAppbmRleCA2NTBhYzliLi5iNGRiNjlmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY2FjaGUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY2FjaGUuaApAQCAtMTcsNiArMTcsNiBAQAogI2RlZmluZSBTTVBfQ0FDSEVfU0hJRlQJCUwxX0NBQ0hFX1NISUZUCiAjZGVmaW5lIFNNUF9DQUNIRV9CWVRFUwkJTDFfQ0FDSEVfQllURVMKIAotI2RlZmluZSBfX3JlYWRfbW9zdGx5IF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS5yZWFkX21vc3RseSIpKSkKKyNkZWZpbmUgX19yZWFkX21vc3RseSBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEuLnJlYWRfbW9zdGx5IikpKQogCiAjZW5kaWYgLyogX0FTTV9DQUNIRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY2V2dC1yNGsuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jZXZ0LXI0ay5oCmluZGV4IGZhNDMyOGYuLjY1ZjliZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jZXZ0LXI0ay5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jZXZ0LXI0ay5oCkBAIC0xNCw2ICsxNCw5IEBACiAjaWZuZGVmIF9fQVNNX0NFVlRfUjRLX0gKICNkZWZpbmUgX19BU01fQ0VWVF9SNEtfSAogCisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlLCBtaXBzX2Nsb2NrZXZlbnRfZGV2aWNlKTsKIAogdm9pZCBtaXBzX2V2ZW50X2hhbmRsZXIoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9kZWMvcHJvbS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RlYy9wcm9tLmgKaW5kZXggYjljODIwMy4uYzBlYWQ2MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RlYy9wcm9tLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RlYy9wcm9tLmgKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiAvKgogICogT24gTUlQUzY0IHdlIGhhdmUgdG8gY2FsbCBQUk9NIGZ1bmN0aW9ucyB2aWEgYSBoZWxwZXIKLSAqIGRpc3BhdGNoZXIgdG8gYWNjb21vZGF0ZSBBQkkgaW5jb21wYXRpYmlsaXRpZXMuCisgKiBkaXNwYXRjaGVyIHRvIGFjY29tbW9kYXRlIEFCSSBpbmNvbXBhdGliaWxpdGllcy4KICAqLwogI2RlZmluZSBfX0RFQ19QUk9NX08zMihmdW4sIGFyZykgZnVuIGFyZyBfX2FzbV9fKCNmdW4pOyBcCiAJCQkJIF9fYXNtX18oI2Z1biAiID0gY2FsbF9vMzIiKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCA2NTVmODQ5Li43YWEzN2RkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtNSw3ICs1LDkgQEAKICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEtY29oZXJlbnQuaD4KIAorI2lmbmRlZiBDT05GSUdfU0dJX0lQMjcJLyogS2x1ZGdlIHRvIGZpeCAyLjYuMzkgYnVpbGQgZm9yIElQMjcgKi8KICNpbmNsdWRlIDxkbWEtY29oZXJlbmNlLmg+CisjZW5kaWYKIAogZXh0ZXJuIHN0cnVjdCBkbWFfbWFwX29wcyAqbWlwc19kbWFfbWFwX29wczsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Zsb3BweS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Zsb3BweS5oCmluZGV4IDk5MmQyMzIuLmM1YzdjMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9mbG9wcHkuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZmxvcHB5LmgKQEAgLTI0LDcgKzI0LDcgQEAKICAqIEFuZCBvbiBNaXBzJ3MgdGhlIENNT1MgaW5mbyBmYWlscyBhbHNvIC4uLgogICoKICAqIEZJWE1FOiBUaGlzIGluZm9ybWF0aW9uIHNob3VsZCBjb21lIGZyb20gdGhlIEFSQyBjb25maWd1cmF0aW9uIHRyZWUKLSAqICAgICAgICBvciB3aGVyZWV2ZXIgYSBwYXJ0aWN1bGFyIG1hY2hpbmUgaGFzIHN0b3JlZCB0aGlzIC4uLgorICogICAgICAgIG9yIHdoZXJldmVyIGEgcGFydGljdWxhciBtYWNoaW5lIGhhcyBzdG9yZWQgdGhpcyAuLi4KICAqLwogI2RlZmluZSBGTE9QUFkwX1RZUEUgCQlmZF9kcml2ZV90eXBlKDApCiAjZGVmaW5lIEZMT1BQWTFfVFlQRQkJZmRfZHJpdmVfdHlwZSgxKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9odWdldGxiLmgKaW5kZXggZjVlODU2MC4uYzU2NWI3YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaHVnZXRsYi5oCkBAIC03MCw2ICs3MCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKIHsKKwlmbHVzaF90bGJfbW0odm1hLT52bV9tbSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGh1Z2VfcHRlX25vbmUocHRlX3QgcHRlKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2h3X2lycS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2h3X2lycS5oCmluZGV4IGFjYTA1YTQuLjc3YWRkYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9od19pcnEuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaHdfaXJxLmgKQEAgLTEzLDcgKzEzLDcgQEAKIGV4dGVybiBhdG9taWNfdCBpcnFfZXJyX2NvdW50OwogCiAvKgotICogaW50ZXJydXB0LXJldHJpZ2dlcjogTk9QIGZvciBub3cuIFRoaXMgbWF5IG5vdCBiZSBhcHJvcHJpYXRlIGZvciBhbGwKKyAqIGludGVycnVwdC1yZXRyaWdnZXI6IE5PUCBmb3Igbm93LiBUaGlzIG1heSBub3QgYmUgYXBwcm9wcmlhdGUgZm9yIGFsbAogICogbWFjaGluZXMsIHdlJ2xsIHNlZSAuLi4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDViMDE3ZjIuLmIwNGU0ZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pby5oCkBAIC0yNDIsNyArMjQyLDcgQEAKICAqIFRoaXMgdmVyc2lvbiBvZiBpb3JlbWFwIGVuc3VyZXMgdGhhdCB0aGUgbWVtb3J5IGlzIG1hcmtlZCB1bmNhY2hhYmxlCiAgKiBvbiB0aGUgQ1BVIGFzIHdlbGwgYXMgaG9ub3VyaW5nIGV4aXN0aW5nIGNhY2hpbmcgcnVsZXMgZnJvbSB0aGluZ3MgbGlrZQogICogdGhlIFBDSSBidXMuIE5vdGUgdGhhdCB0aGVyZSBhcmUgb3RoZXIgY2FjaGVzIGFuZCBidWZmZXJzIG9uIG1hbnkKLSAqIGJ1c3Nlcy4gSW4gcGF0aWN1bGFyIGRyaXZlciBhdXRob3JzIHNob3VsZCByZWFkIHVwIG9uIFBDSSB3cml0ZXMKKyAqIGJ1c3Nlcy4gSW4gcGFydGljdWxhciBkcml2ZXIgYXV0aG9ycyBzaG91bGQgcmVhZCB1cCBvbiBQQ0kgd3JpdGVzCiAgKgogICogSXQncyB1c2VmdWwgaWYgc29tZSBjb250cm9sIHJlZ2lzdGVycyBhcmUgaW4gc3VjaCBhbiBhcmVhIGFuZAogICogd3JpdGUgY29tYmluaW5nIG9yIHJlYWQgY2FjaGluZyBpcyBub3QgZGVzaXJhYmxlOgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2lycWZsYWdzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaAppbmRleCA5ZWYzYjBkLi4zMDljYmNkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaApAQCAtMTc0LDcgKzE3NCw3IEBACiAJIm10YzAJXFxmbGFncywgJDIsIDEJCQkJCQlcbiIKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTUjIpICYmIGRlZmluZWQoQ09ORklHX0lSUV9DUFUpCiAJLyoKLQkgKiBTbG93LCBidXQgZG9lc24ndCBzdWZmZXIgZnJvbSBhIHJlbGF0aXZseSB1bmxpa2VseSByYWNlCisJICogU2xvdywgYnV0IGRvZXNuJ3Qgc3VmZmVyIGZyb20gYSByZWxhdGl2ZWx5IHVubGlrZWx5IHJhY2UKIAkgKiBjb25kaXRpb24gd2UncmUgaGF2aW5nIHNpbmNlIGRheXMgMS4KIAkgKi8KIAkiCWJlcXoJXFxmbGFncywgMWYJCQkJCVxuIgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNjN4eC9iY205NjN4eF90YWcuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTYzeHgvYmNtOTYzeHhfdGFnLmgKaW5kZXggNTMyNTA4NC4uZWQ3MmU2YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNjN4eC9iY205NjN4eF90YWcuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY202M3h4L2JjbTk2M3h4X3RhZy5oCkBAIC00LDcgKzQsNyBAQAogI2RlZmluZSBUQUdWRVJfTEVOCQk0CS8qIExlbmd0aCBvZiBUYWcgVmVyc2lvbiAqLwogI2RlZmluZSBUQUdMQVlPVVRfTEVOCQk0CS8qIExlbmd0aCBvZiBGbGFzaExheW91dFZlciAqLwogI2RlZmluZSBTSUcxX0xFTgkJMjAJLyogQ29tcGFueSBTaWduYXR1cmUgMSBMZW5ndGggKi8KLSNkZWZpbmUgU0lHMl9MRU4JCTE0CS8qIENvbXBhbnkgU2lnbmF0dXJlIDIgTGVuZ2h0ICovCisjZGVmaW5lIFNJRzJfTEVOCQkxNAkvKiBDb21wYW55IFNpZ25hdHVyZSAyIExlbmd0aCAqLwogI2RlZmluZSBCT0FSRElEX0xFTgkJMTYJLyogTGVuZ3RoIG9mIEJvYXJkSWQgKi8KICNkZWZpbmUgRU5ESUFORkxBR19MRU4JCTIJLyogRW5kaWFuIEZsYWcgTGVuZ3RoICovCiAjZGVmaW5lIENISVBJRF9MRU4JCTYJLyogQ2hpcCBJZCBMZW5ndGggKi8KQEAgLTg4LDcgKzg4LDcgQEAKIAljaGFyIGtlcm5lbF9jcmNbQ1JDX0xFTl07CiAJLyogMjI4LTIzNTogVW51c2VkIGF0IHByZXNlbnQgKi8KIAljaGFyIHJlc2VydmVkMVs4XTsKLQkvKiAyMzYtMjM5OiBDUkMzMiBvZiBoZWFkZXIgZXhjbHVkaW5nIHRhZ1ZlcnNpb24gKi8KKwkvKiAyMzYtMjM5OiBDUkMzMiBvZiBoZWFkZXIgZXhjbHVkaW5nIGxhc3QgMjAgYnl0ZXMgKi8KIAljaGFyIGhlYWRlcl9jcmNbQ1JDX0xFTl07CiAJLyogMjQwLTI1NTogVW51c2VkIGF0IHByZXNlbnQgKi8KIAljaGFyIHJlc2VydmVkMlsxNl07CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDMyL21jMTQ2ODE4cnRjLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDMyL21jMTQ2ODE4cnRjLmgKaW5kZXggYzI4YmE4ZC4uNmI2YmFiNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAzMi9tYzE0NjgxOHJ0Yy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWlwMzIvbWMxNDY4MThydGMuaApAQCAtMjYsNyArMjYsNyBAQAogfQogCiAvKgotICogRklYTUU6IERvIGl0IHJpZ2h0LiBGb3Igbm93IGp1c3QgYXNzdW1lIHRoYXQgbm9vbmUgbGl2ZXMgaW4gMjB0aCBjZW50dXJ5CisgKiBGSVhNRTogRG8gaXQgcmlnaHQuIEZvciBub3cganVzdCBhc3N1bWUgdGhhdCBubyBvbmUgbGl2ZXMgaW4gMjB0aCBjZW50dXJ5CiAgKiBhbmQgbm8gTzIgdXNlciBpbiAyMnRoIGNlbnR1cnkgOy0pCiAgKi8KICNkZWZpbmUgbWMxNDY4MThfZGVjb2RlX3llYXIoeWVhcikgKCh5ZWFyKSArIDIwMDApCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jczU1MzYvY3M1NTM2LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jczU1MzYvY3M1NTM2LmgKaW5kZXggMDIxZjc3Yy4uMmE4ZTJiYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3M1NTM2L2NzNTUzNi5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NzNTUzNi9jczU1MzYuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBUaGUgaGVhZGVyIGZpbGUgb2YgY3M1NTM2IHNvdXJ0aCBicmlkZ2UuCisgKiBUaGUgaGVhZGVyIGZpbGUgb2YgY3M1NTM2IHNvdXRoIGJyaWRnZS4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTGVtb3RlLCBJbmMuCiAgKiBBdXRob3IgOiBqbGxpdSA8bGl1amxAbGVtb3RlLmNvbT4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjEwMDAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjEwMDAuaAppbmRleCA2ZDFmZjkwLi42NTA1OTI1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxMDAwLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTAwMC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIEFsY2hlbXkgU2VtaSBQYjEwMDAgUmVmZXJyZW5jZSBCb2FyZAorICogQWxjaGVteSBTZW1pIFBiMTAwMCBSZWZlcmVuY2UgQm9hcmQKICAqCiAgKiBDb3B5cmlnaHQgMjAwMSwgMjAwOCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KICAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiA8c291cmNlQG12aXN0YS5jb20+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxMjAwLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxMjAwLmgKaW5kZXggOTYyZWI1NS4uZmNlNDMzMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTIwMC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjEyMDAuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBBTUQgQWxjaGVteSBQYjEyMDAgUmVmZXJyZW5jZSBCb2FyZAorICogQU1EIEFsY2hlbXkgUGIxMjAwIFJlZmVyZW5jZSBCb2FyZAogICogQm9hcmQgUmVnaXN0ZXJzIGRlZmluZXMuCiAgKgogICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxNTUwLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxNTUwLmgKaW5kZXggZmM0ZDc2Ni4uZjgzNWM4OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTU1MC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjE1NTAuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBBTUQgQWxjaGVteSBTZW1pIFBCMTU1MCBSZWZlcnJlbmNlIEJvYXJkCisgKiBBTUQgQWxjaGVteSBTZW1pIFBCMTU1MCBSZWZlcmVuY2UgQm9hcmQKICAqIEJvYXJkIFJlZ2lzdGVycyBkZWZpbmVzLgogICoKICAqIENvcHlyaWdodCAyMDA0IEVtYmVkZGVkIEVkZ2UgTExDLgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9kbWEtY29oZXJlbmNlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2RtYS1jb2hlcmVuY2UuaAppbmRleCBmNzYwMjljLi5hOGU3MmNmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2RtYS1jb2hlcmVuY2UuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wb3dlcnR2L2RtYS1jb2hlcmVuY2UuaApAQCAtNDgsNyArNDgsNyBAQAogCQkJCS8qIGNoZWNrIGZvciBhIHZhbGlkIHBhZ2UgKi8KIAkJCQlpZiAocHRlX3ByZXNlbnQocHRlKSkgewogCQkJCQkvKiBnZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3MgdGhlIHBhZ2UgaXMKLQkJCQkJICogcmVmZXJpbmcgdG8gKi8KKwkJCQkJICogcmVmZXJyaW5nIHRvICovCiAJCQkJCXBoeXNfYWRkciA9ICh1bnNpZ25lZCBsb25nKQogCQkJCQkJcGFnZV90b19waHlzKHB0ZV9wYWdlKHB0ZSkpOwogCQkJCQkvKiBhZGQgdGhlIG9mZnNldCB3aXRoaW4gdGhlIHBhZ2UgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzcmVncy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmgKaW5kZXggNGQ5ODcwOS4uNmE2ZjhhOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmgKQEAgLTkyMiw3ICs5MjIsNyBAQAogI2RlZmluZSB3cml0ZV9jMF9jb25maWc3KHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMTYsIDcsIHZhbCkKIAogLyoKLSAqIFRoZSBXYXRjaExvIHJlZ2lzdGVyLiAgVGhlcmUgbWF5IGJlIHVwdG8gOCBvZiB0aGVtLgorICogVGhlIFdhdGNoTG8gcmVnaXN0ZXIuICBUaGVyZSBtYXkgYmUgdXAgdG8gOCBvZiB0aGVtLgogICovCiAjZGVmaW5lIHJlYWRfYzBfd2F0Y2hsbzAoKQlfX3JlYWRfdWxvbmdfYzBfcmVnaXN0ZXIoJDE4LCAwKQogI2RlZmluZSByZWFkX2MwX3dhdGNobG8xKCkJX19yZWFkX3Vsb25nX2MwX3JlZ2lzdGVyKCQxOCwgMSkKQEAgLTk0Miw3ICs5NDIsNyBAQAogI2RlZmluZSB3cml0ZV9jMF93YXRjaGxvNyh2YWwpCV9fd3JpdGVfdWxvbmdfYzBfcmVnaXN0ZXIoJDE4LCA3LCB2YWwpCiAKIC8qCi0gKiBUaGUgV2F0Y2hIaSByZWdpc3Rlci4gIFRoZXJlIG1heSBiZSB1cHRvIDggb2YgdGhlbS4KKyAqIFRoZSBXYXRjaEhpIHJlZ2lzdGVyLiAgVGhlcmUgbWF5IGJlIHVwIHRvIDggb2YgdGhlbS4KICAqLwogI2RlZmluZSByZWFkX2MwX3dhdGNoaGkwKCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQxOSwgMCkKICNkZWZpbmUgcmVhZF9jMF93YXRjaGhpMSgpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMTksIDEpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtYm9vdGluZm8uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ib290aW5mby5oCmluZGV4IGYzYzIzYTQuLjRlNGMzYTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ib290aW5mby5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ib290aW5mby5oCkBAIC0yMDAsNyArMjAwLDcgQEAKIAlDVk1YX0NISVBfVFlQRV9NQVgsCiB9OwogCi0vKiBDb21wYXRhYmlsaXR5IGFsaWFzIGZvciBOQUMzOCBuYW1lIGNoYW5nZSwgcGxhbm5lZCB0byBiZSByZW1vdmVkCisvKiBDb21wYXRpYmlsaXR5IGFsaWFzIGZvciBOQUMzOCBuYW1lIGNoYW5nZSwgcGxhbm5lZCB0byBiZSByZW1vdmVkCiAgKiBmcm9tIFNESyAxLjcgKi8KICNkZWZpbmUgQ1ZNWF9CT0FSRF9UWVBFX05BTzM4CUNWTVhfQk9BUkRfVFlQRV9OQUMzOAogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtYm9vdG1lbS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LWJvb3RtZW0uaAppbmRleCA4ZTcwOGJkLi44Nzc4NDViIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtYm9vdG1lbS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1ib290bWVtLmgKQEAgLTY3LDcgKzY3LDcgQEAKIAogLyoKICAqIFN0cnVjdHVyZSBmb3IgbmFtZWQgbWVtb3J5IGJsb2Nrcy4gIE51bWJlciBvZiBkZXNjcmlwdG9ycyBhdmFpbGFibGUKLSAqIGNhbiBiZSBjaGFuZ2VkIHdpdGhvdXQgYWZmZWN0aW5nIGNvbXBhdGlibGl0eSwgYnV0IG5hbWUgbGVuZ3RoCisgKiBjYW4gYmUgY2hhbmdlZCB3aXRob3V0IGFmZmVjdGluZyBjb21wYXRpYmlsaXR5LCBidXQgbmFtZSBsZW5ndGgKICAqIGNoYW5nZXMgcmVxdWlyZSBhIGJ1bXAgaW4gdGhlIGJvb3RtZW0gZGVzY3JpcHRvciB2ZXJzaW9uIE5vdGU6IFRoaXMKICAqIHN0cnVjdHVyZSBtdXN0IGJlIG5hdHVyYWxseSA2NCBiaXQgYWxpZ25lZCwgYXMgYSBzaW5nbGUgbWVtb3J5CiAgKiBpbWFnZSB3aWxsIGJlIHVzZWQgYnkgYm90aCAzMiBhbmQgNjQgYml0IHByb2dyYW1zLgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LWwyYy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LWwyYy5oCmluZGV4IDBiMzJjNWIuLjJjOGZmOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vY3ZteC1sMmMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXgtbDJjLmgKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCiAvKioKICAqIENvbmZpZ3VyZSBvbmUgb2YgdGhlIGZvdXIgTDIgQ2FjaGUgcGVyZm9ybWFuY2UgY291bnRlcnMgdG8gY2FwdHVyZSBldmVudAotICogb2NjdXJlbmNlcy4KKyAqIG9jY3VycmVuY2VzLgogICoKICAqIEBjb3VudGVyOiAgICAgICAgVGhlIGNvdW50ZXIgdG8gY29uZmlndXJlLiBSYW5nZSAwLi4zLgogICogQGV2ZW50OiAgICAgICAgICBUaGUgdHlwZSBvZiBMMiBDYWNoZSBldmVudCBvY2N1cnJlbmNlIHRvIGNvdW50LgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9jdm14LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXguaAppbmRleCA5ZDkzODFlLi43ZTEyODY3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXguaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL2N2bXguaApAQCAtMTUxLDcgKzE1MSw3IEBACiAjZW5kaWYKIAogLyoqCi0gKiBDb252ZXJ0IGEgbWVtb3J5IHBvaW50ZXIgKHZvaWQqKSBpbnRvIGEgaGFyZHdhcmUgY29tcGF0YWJsZQorICogQ29udmVydCBhIG1lbW9yeSBwb2ludGVyICh2b2lkKikgaW50byBhIGhhcmR3YXJlIGNvbXBhdGlibGUKICAqIG1lbW9yeSBhZGRyZXNzICh1aW50NjRfdCkuIE9jdGVvbiBoYXJkd2FyZSB3aWRnZXRzIGRvbid0CiAgKiB1bmRlcnN0YW5kIGxvZ2ljYWwgYWRkcmVzc2VzLgogICoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wYWNjZXNzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFjY2Vzcy5oCmluZGV4IGMyMzk0ZjguLjljZTVhMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wYWNjZXNzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BhY2Nlc3MuaApAQCAtNyw3ICs3LDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCiAgKgogICogUHJvdGVjdGVkIG1lbW9yeSBhY2Nlc3MuICBVc2VkIGZvciBldmVyeXRoaW5nIHRoYXQgbWlnaHQgdGFrZSByZXZlbmdlCi0gKiBieSBzZW5kaW5nIGEgREJFIGVycm9yIGxpa2UgYWNjZXNzaW5nIHBvc3NpYmx5IG5vbi1leGlzdGFudCBtZW1vcnkgb3IKKyAqIGJ5IHNlbmRpbmcgYSBEQkUgZXJyb3IgbGlrZSBhY2Nlc3NpbmcgcG9zc2libHkgbm9uLWV4aXN0ZW50IG1lbW9yeSBvcgogICogZGV2aWNlcy4KICAqLwogI2lmbmRlZiBfQVNNX1BBQ0NFU1NfSApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BjaS9icmlkZ2UuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wY2kvYnJpZGdlLmgKaW5kZXggZjFmNTA4ZS4uYmU0NGZiMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BjaS9icmlkZ2UuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGNpL2JyaWRnZS5oCkBAIC0yNjIsNyArMjYyLDcgQEAKIH0gYnJpZGdlX3Q7CiAKIC8qCi0gKiBGaWVsZCBmb3JtYXRzIGZvciBFcnJvciBDb21tYW5kIFdvcmQgYW5kIEF1eGlsbGFyeSBFcnJvciBDb21tYW5kIFdvcmQKKyAqIEZpZWxkIGZvcm1hdHMgZm9yIEVycm9yIENvbW1hbmQgV29yZCBhbmQgQXV4aWxpYXJ5IEVycm9yIENvbW1hbmQgV29yZAogICogb2YgYnJpZGdlLgogICovCiB0eXBlZGVmIHN0cnVjdCBicmlkZ2VfZXJyX2NtZHdvcmRfcyB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9yZWdvcHMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wbWMtc2llcnJhL21zcDcxeHgvbXNwX3JlZ29wcy5oCmluZGV4IDYwYTVhMzguLjdkNDE0NzQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wbWMtc2llcnJhL21zcDcxeHgvbXNwX3JlZ29wcy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wbWMtc2llcnJhL21zcDcxeHgvbXNwX3JlZ29wcy5oCkBAIC0yMDUsNyArMjA1LDcgQEAKICAqICAgY3VzdG9tX3JlYWRfcmVnMzIoYWRkcmVzcywgdG1wKTsJPC0tIFJlYWRzIHRoZSBhZGRyZXNzIGFuZCBwdXQgdGhlIHZhbHVlCiAgKgkJCQkJCWluIHRoZSAndG1wJyB2YXJpYWJsZSBnaXZlbgogICoKLSAqCUZyb20gaGVyZSBvbiBvdXQsIHlvdSBhcmUgKGJhc2ljbHkpIGF0b21pYywgc28gZG9uJ3QgZG8gYW55dGhpbmcgdG9vCisgKglGcm9tIGhlcmUgb24gb3V0LCB5b3UgYXJlIChiYXNpY2FsbHkpIGF0b21pYywgc28gZG9uJ3QgZG8gYW55dGhpbmcgdG9vCiAgKglmYW5jeSEKICAqCUFsc28sIHRoaXMgY29kZSBtYXkgbG9vcCBpZiB0aGUgZW5kIG9mIHRoaXMgYmxvY2sgZmFpbHMgdG8gd3JpdGUKICAqCWV2ZXJ5dGhpbmcgYmFjayBzYWZlbHkgZHVlIGRvIHRoZSBvdGhlciBDUFUsIHNvIGRvIE5PVCBkbyBhbnl0aGluZwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IGVhZDY5MjguLmMxMDRmMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTMzNyw3ICszMzcsNyBAQAogLyoKICAqIFJldHVybl9hZGRyZXNzIGlzIGEgcmVwbGFjZW1lbnQgZm9yIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcyhjb3VudCkKICAqIHdoaWNoIG9uIGNlcnRhaW4gYXJjaGl0ZWN0dXJlcyBjYW5ub3QgcmVhc29uYWJseSBiZSBpbXBsZW1lbnRlZCBpbiBHQ0MKLSAqIChNSVBTLCBBbHBoYSkgb3IgaXMgdW51c2VhYmxlIHdpdGggLWZvbWl0LWZyYW1lLXBvaW50ZXIgKGkzODYpLgorICogKE1JUFMsIEFscGhhKSBvciBpcyB1bnVzYWJsZSB3aXRoIC1mb21pdC1mcmFtZS1wb2ludGVyIChpMzg2KS4KICAqIE5vdGUgdGhhdCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoeD49MSkgaXMgZm9yYmlkZGVuIGJlY2F1c2UgR0NDCiAgKiBhYm9ydHMgY29tcGlsYXRpb24gb24gc29tZSBDUFVzLiAgSXQncyBzaW1wbHkgbm90IHBvc3NpYmxlIHRvIHVud2luZAogICogc29tZSBDUFUncyBzdGFja2ZyYW1lcy4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZ2kvaW9jLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2dpL2lvYy5oCmluZGV4IDU3YTk3MTkuLjM4MDM0N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZ2kvaW9jLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NnaS9pb2MuaApAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgPGFzbS9zZ2kvcGkxLmg+CiAKIC8qCi0gKiBBbGwgcmVnaXN0ZXJzIGFyZSA4LWJpdCB3aWRlIGFsbGlnbmVkIG9uIDMyLWJpdCBib3VuZGFyeS4gQmFkIHRoaW5ncworICogQWxsIHJlZ2lzdGVycyBhcmUgOC1iaXQgd2lkZSBhbGlnbmVkIG9uIDMyLWJpdCBib3VuZGFyeS4gQmFkIHRoaW5ncwogICogaGFwcGVuIGlmIHlvdSB0cnkgd29yZCBhY2Nlc3MgdGhlbS4gWW91IGhhdmUgYmVlbiB3YXJuZWQuCiAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpYnl0ZS9zYjEyNTBfbWFjLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2lieXRlL3NiMTI1MF9tYWMuaAppbmRleCA1OTFiOTA2Li43N2Y3ODcyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2lieXRlL3NiMTI1MF9tYWMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2lieXRlL3NiMTI1MF9tYWMuaApAQCAtNTIwLDcgKzUyMCw3IEBACiAjZGVmaW5lIEdfTUFDX1JYX0VPUF9DT1VOVEVSKHgpICAgICBfU0JfR0VUVkFMVUUoeCwgU19NQUNfUlhfRU9QX0NPVU5URVIsIE1fTUFDX1JYX0VPUF9DT1VOVEVSKQogCiAvKgotICogTUFDIFJlY2lldmUgQWRkcmVzcyBGaWx0ZXIgRXhhY3QgTWF0Y2ggUmVnaXN0ZXJzIChUYWJsZSA5LTIxKQorICogTUFDIFJlY2VpdmUgQWRkcmVzcyBGaWx0ZXIgRXhhY3QgTWF0Y2ggUmVnaXN0ZXJzIChUYWJsZSA5LTIxKQogICogUmVnaXN0ZXJzOiBNQUNfQUREUjBfMCB0aHJvdWdoIE1BQ19BRERSN18wCiAgKiBSZWdpc3RlcnM6IE1BQ19BRERSMF8xIHRocm91Z2ggTUFDX0FERFI3XzEKICAqIFJlZ2lzdGVyczogTUFDX0FERFIwXzIgdGhyb3VnaCBNQUNfQUREUjdfMgpAQCAtNTM4LDcgKzUzOCw3IEBACiAvKiBObyBiaXRmaWVsZHMgKi8KIAogLyoKLSAqIE1BQyBSZWNpZXZlIEFkZHJlc3MgRmlsdGVyIEhhc2ggTWF0Y2ggUmVnaXN0ZXJzIChUYWJsZSA5LTIyKQorICogTUFDIFJlY2VpdmUgQWRkcmVzcyBGaWx0ZXIgSGFzaCBNYXRjaCBSZWdpc3RlcnMgKFRhYmxlIDktMjIpCiAgKiBSZWdpc3RlcnM6IE1BQ19IQVNIMF8wIHRocm91Z2ggTUFDX0hBU0g3XzAKICAqIFJlZ2lzdGVyczogTUFDX0hBU0gwXzEgdGhyb3VnaCBNQUNfSEFTSDdfMQogICogUmVnaXN0ZXJzOiBNQUNfSEFTSDBfMiB0aHJvdWdoIE1BQ19IQVNIN18yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2lnaW5mby5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpZ2luZm8uaAppbmRleCAxY2E2NGI0Li4yMGViZWI4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2lnaW5mby5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWdpbmZvLmgKQEAgLTEwMSw3ICsxMDEsNyBAQAogCiAvKgogICogc2lfY29kZSB2YWx1ZXMKLSAqIEFnYWluIHRoZXNlIGhhdmUgYmVlbiBjaG9vc2VuIHRvIGJlIElSSVggY29tcGF0aWJsZS4KKyAqIEFnYWluIHRoZXNlIGhhdmUgYmVlbiBjaG9zZW4gdG8gYmUgSVJJWCBjb21wYXRpYmxlLgogICovCiAjdW5kZWYgU0lfQVNZTkNJTwogI3VuZGVmIFNJX1RJTUVSCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc24va2xjb25maWcuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbi9rbGNvbmZpZy5oCmluZGV4IDA5ZTU5MGQuLmZlMDI5MDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbi9rbGNvbmZpZy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbi9rbGNvbmZpZy5oCkBAIC03OCw3ICs3OCw3IEBACiAgKi8KICNkZWZpbmUgTUFYX1NMT1RTX1BFUl9OT0RFCSgxICsgMiArIDYgKyAyKQogCi0vKiBYWFggaWYgZWFjaCBub2RlIGlzIGd1cmFudGVlZCB0byBoYXZlIHNvbWUgbWVtb3J5ICovCisvKiBYWFggaWYgZWFjaCBub2RlIGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBzb21lIG1lbW9yeSAqLwogCiAjZGVmaW5lIE1BWF9QQ0lfREVWUwkJOAogCkBAIC01MzksNyArNTM5LDcgQEAKICNkZWZpbmUgS0xTVFJVQ1RfSU9DM19UVFkgCTI0CiAKIC8qIEVhcmx5IEFjY2VzcyBJTyBwcm9tcyBhcmUgY29tcGF0aWJsZQotICAgb25seSB3aXRoIEtMU1RSVUNUIHZhbHVlcyB1cHRvIDI0LiAqLworICAgb25seSB3aXRoIEtMU1RSVUNUIHZhbHVlcyB1cCB0byAyNC4gKi8KIAogI2RlZmluZSBLTFNUUlVDVF9GSUJFUkNIQU5ORUwgCTI1CiAjZGVmaW5lIEtMU1RSVUNUX01PRF9TRVJJQUxfTlVNIDI2CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc24vc24wL2h1YmlvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc24vc24wL2h1YmlvLmgKaW5kZXggMzFjNzZjMC4uNDYyODZkOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NuL3NuMC9odWJpby5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbi9zbjAvaHViaW8uaApAQCAtNjIyLDcgKzYyMiw3IEBACiAgKi8KICNkZWZpbmUJSUlPX0lDUkJfUFJPQzAJCTAJLyogU291cmNlIG9mIHJlcXVlc3QgaXMgUHJvYyAwICovCiAjZGVmaW5lCUlJT19JQ1JCX1BST0MxCQkxCS8qIFNvdXJjZSBvZiByZXF1ZXN0IGlzIFByb2MgMSAqLwotI2RlZmluZQlJSU9fSUNSQl9HQl9SRVEJCTIJLyogU291cmNlIGlzIEd1cmFudGVlZCBCVyByZXF1ZXN0ICovCisjZGVmaW5lCUlJT19JQ1JCX0dCX1JFUQkJMgkvKiBTb3VyY2UgaXMgR3VhcmFudGVlZCBCVyByZXF1ZXN0ICovCiAjZGVmaW5lCUlJT19JQ1JCX0lPX1JFUQkJMwkvKiBTb3VyY2UgaXMgTm9ybWFsIElPIHJlcXVlc3QJKi8KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zdGFja2ZyYW1lLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3RhY2tmcmFtZS5oCmluZGV4IDU4NzMwYzUuLmI0YmEyNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zdGFja2ZyYW1lLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3N0YWNrZnJhbWUuaApAQCAtMzQ2LDcgKzM0Niw3IEBACiAJCSAqIHdlIGNhbid0IGRpc3BhdGNoIGl0IGRpcmVjdGx5IHdpdGhvdXQgdHJhc2hpbmcKIAkJICogc29tZSByZWdpc3RlcnMsIHNvIHdlJ2xsIHRyeSB0byBkZXRlY3QgdGhpcyB1bmxpa2VseQogCQkgKiBjYXNlIGFuZCBwcm9ncmFtIGEgc29mdHdhcmUgaW50ZXJydXB0IGluIHRoZSBWUEUsCi0JCSAqIGFzIHdvdWxkIGJlIGRvbmUgZm9yIGEgY3Jvc3MtVlBFIElQSS4gIFRvIGFjY29tb2RhdGUKKwkJICogYXMgd291bGQgYmUgZG9uZSBmb3IgYSBjcm9zcy1WUEUgSVBJLiAgVG8gYWNjb21tb2RhdGUKIAkJICogdGhlIGhhbmRsaW5nIG9mIHRoYXQgY2FzZSwgd2UncmUgZG9pbmcgYSBEVlBFIGluc3RlYWQKIAkJICogb2YganVzdCBhIERNVCBoZXJlIHRvIHByb3RlY3QgYWdhaW5zdCBvdGhlciB0aHJlYWRzLgogCQkgKiBUaGlzIGlzIGEgbG90IG9mIGNydWZ0IHRvIGNvdmVyIGEgdGlueSB3aW5kb3cuCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vd2FyLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vd2FyLmgKaW5kZXggMjIzNjFkNS4uZmExMzNjMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3dhci5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS93YXIuaApAQCAtMjI3LDcgKzIyNyw3IEBACiAjZW5kaWYKIAogLyoKLSAqIE9uIHRoZSBSMTAwMDAgdXB0byB2ZXJzaW9uIDIuNiAobm90IHN1cmUgYWJvdXQgMi43KSB0aGVyZSBpcyBhIGJ1ZyB0aGF0CisgKiBPbiB0aGUgUjEwMDAwIHVwIHRvIHZlcnNpb24gMi42IChub3Qgc3VyZSBhYm91dCAyLjcpIHRoZXJlIGlzIGEgYnVnIHRoYXQKICAqIG1heSBjYXVzZSBsbCAvIHNjIGFuZCBsbGQgLyBzY2Qgc2VxdWVuY2VzIHRvIGV4ZWN1dGUgbm9uLWF0b21pY2FsbHkuCiAgKi8KICNpZm5kZWYgUjEwMDAwX0xMU0NfV0FSCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvamF6ei9qYXp6ZG1hLmMgYi9hcmNoL21pcHMvamF6ei9qYXp6ZG1hLmMKaW5kZXggOWNlOWY2NC4uMmQ4ZTQ0NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2phenovamF6emRtYS5jCisrKyBiL2FyY2gvbWlwcy9qYXp6L2phenpkbWEuYwpAQCAtMjExLDcgKzIxMSw3IEBACiAgKi8KIGludCB2ZG1hX3JlbWFwKHVuc2lnbmVkIGxvbmcgbGFkZHIsIHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLQlpbnQgZmlyc3QsIHBhZ2VzLCBucGFnZXM7CisJaW50IGZpcnN0LCBwYWdlczsKIAogCWlmIChsYWRkciA+IDB4ZmZmZmZmKSB7CiAJCWlmICh2ZG1hX2RlYnVnKQpAQCAtMjI4LDggKzIyOCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwkvKiBpbnZhbGlkIHBoeXNpY2FsIGFkZHJlc3MgKi8KIAl9CiAKLQlucGFnZXMgPSBwYWdlcyA9Ci0JICAgICgoKHBhZGRyICYgKFZETUFfUEFHRVNJWkUgLSAxKSkgKyBzaXplKSA+PiAxMikgKyAxOworCXBhZ2VzID0gKCgocGFkZHIgJiAoVkRNQV9QQUdFU0laRSAtIDEpKSArIHNpemUpID4+IDEyKSArIDE7CiAJZmlyc3QgPSBsYWRkciA+PiAxMjsKIAlpZiAodmRtYV9kZWJ1ZykKIAkJcHJpbnRrKCJ2ZG1hX3JlbWFwOiBmaXJzdD0leCwgcGFnZXM9JXhcbiIsIGZpcnN0LCBwYWdlcyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvano0NzQwL2JvYXJkLXFpX2xiNjAuYyBiL2FyY2gvbWlwcy9qejQ3NDAvYm9hcmQtcWlfbGI2MC5jCmluZGV4IGJjMThkYWEuLmMzYjA0YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qejQ3NDAvYm9hcmQtcWlfbGI2MC5jCisrKyBiL2FyY2gvbWlwcy9qejQ3NDAvYm9hcmQtcWlfbGI2MC5jCkBAIC02NSw3ICs2NSw3IEBACiB9OwogCiAvKiBFYXJseSBwcm90b3R5cGVzIG9mIHRoZSBRSSBMQjYwIGhhZCBvbmx5IDFHQiBvZiBOQU5ELgotICogSW4gb3JkZXIgdG8gc3VwcG9ydCB0aGVzZSBkZXZpY2VzIGFzd2VsbCB0aGUgcGFydGl0aW9uIGFuZCBlY2MgbGF5b3V0IGlzCisgKiBJbiBvcmRlciB0byBzdXBwb3J0IHRoZXNlIGRldmljZXMgYXMgd2VsbCB0aGUgcGFydGl0aW9uIGFuZCBlY2MgbGF5b3V0IGlzCiAgKiBpbml0aWFsaXplZCBkZXBlbmRpbmcgb24gdGhlIE5BTkQgc2l6ZSAqLwogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHFpX2xiNjBfcGFydGl0aW9uc18xZ2JbXSA9IHsKIAl7CkBAIC00MzksNyArNDM5LDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBib2FyZF9ncGlvX3NldHVwKHZvaWQpCiB7CiAJLyogV2Ugb25seSBuZWVkIHRvIGVuYWJsZS9kaXNhYmxlIHB1bGx1cCBoZXJlIGZvciBwaW5zIHVzZWQgaW4gZ2VuZXJpYwotCSAqIGRyaXZlcnMuIEV2ZXJ5dGhpbmcgZWxzZSBpcyBkb25lIGJ5IHRoZSBkcml2ZXJzIHRoZW1zZWxmcy4gKi8KKwkgKiBkcml2ZXJzLiBFdmVyeXRoaW5nIGVsc2UgaXMgZG9uZSBieSB0aGUgZHJpdmVycyB0aGVtc2VsdmVzLiAqLwogCWp6X2dwaW9fZGlzYWJsZV9wdWxsdXAoUUlfTEI2MF9HUElPX1NEX1ZDQ19FTl9OKTsKIAlqel9ncGlvX2Rpc2FibGVfcHVsbHVwKFFJX0xCNjBfR1BJT19TRF9DRCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvano0NzQwL2RtYS5jIGIvYXJjaC9taXBzL2p6NDc0MC9kbWEuYwppbmRleCA1ZWJlNzVhLi5kN2ZlYjg5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvano0NzQwL2RtYS5jCisrKyBiL2FyY2gvbWlwcy9qejQ3NDAvZG1hLmMKQEAgLTI0Miw5ICsyNDIsNyBAQAogCiBzdGF0aWMgdm9pZCBqejQ3NDBfZG1hX2NoYW5faXJxKHN0cnVjdCBqejQ3NDBfZG1hX2NoYW4gKmRtYSkKIHsKLQl1aW50MzJfdCBzdGF0dXM7Ci0KLQlzdGF0dXMgPSBqejQ3NDBfZG1hX3JlYWQoSlpfUkVHX0RNQV9TVEFUVVNfQ1RSTChkbWEtPmlkKSk7CisJKHZvaWQpIGp6NDc0MF9kbWFfcmVhZChKWl9SRUdfRE1BX1NUQVRVU19DVFJMKGRtYS0+aWQpKTsKIAogCWp6NDc0MF9kbWFfd3JpdGVfbWFzayhKWl9SRUdfRE1BX1NUQVRVU19DVFJMKGRtYS0+aWQpLCAwLAogCQlKWl9ETUFfU1RBVFVTX0NUUkxfRU5BQkxFIHwgSlpfRE1BX1NUQVRVU19DVFJMX1RSQU5TRkVSX0RPTkUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2p6NDc0MC90aW1lLmMgYi9hcmNoL21pcHMvano0NzQwL3RpbWUuYwppbmRleCBmZTAxNjc4Li5lYWE4NTNhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvano0NzQwL3RpbWUuYworKysgYi9hcmNoL21pcHMvano0NzQwL3RpbWUuYwpAQCAtODksNyArODksNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBqejQ3NDBfY2xvY2tldmVudCA9IHsKIAkubmFtZSA9ICJqejQ3NDAtdGltZXIiLAotCS5mZWF0dXJlcyA9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDLAorCS5mZWF0dXJlcyA9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKIAkuc2V0X25leHRfZXZlbnQgPSBqejQ3NDBfY2xvY2tldmVudF9zZXRfbmV4dCwKIAkuc2V0X21vZGUgPSBqejQ3NDBfY2xvY2tldmVudF9zZXRfbW9kZSwKIAkucmF0aW5nID0gMjAwLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2p6NDc0MC90aW1lci5jIGIvYXJjaC9taXBzL2p6NDc0MC90aW1lci5jCmluZGV4IGIyYzAxNTEuLjY1NGQ1YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qejQ3NDAvdGltZXIuYworKysgYi9hcmNoL21pcHMvano0NzQwL3RpbWVyLmMKQEAgLTI3LDExICsyNywxMyBAQAogewogCXdyaXRlbChCSVQoMTYpLCBqejQ3NDBfdGltZXJfYmFzZSArIEpaX1JFR19USU1FUl9TVE9QX0NMRUFSKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGp6NDc0MF90aW1lcl9lbmFibGVfd2F0Y2hkb2cpOwogCiB2b2lkIGp6NDc0MF90aW1lcl9kaXNhYmxlX3dhdGNoZG9nKHZvaWQpCiB7CiAJd3JpdGVsKEJJVCgxNiksIGp6NDc0MF90aW1lcl9iYXNlICsgSlpfUkVHX1RJTUVSX1NUT1BfU0VUKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGp6NDc0MF90aW1lcl9kaXNhYmxlX3dhdGNoZG9nKTsKIAogdm9pZCBfX2luaXQgano0NzQwX3RpbWVyX2luaXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LWJ1Z3M2NC5jIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtYnVnczY0LmMKaW5kZXggYjhiYjhiYS4uZjMwNWNhMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtYnVnczY0LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtYnVnczY0LmMKQEAgLTczLDcgKzczLDcgQEAKIAkJOiAiMCIgKDUpLCAiMSIgKDgpLCAiMiIgKDUpKTsKIAlhbGlnbl9tb2QoYWxpZ24sIG1vZCk7CiAJLyoKLQkgKiBUaGUgdHJhaWxpbmcgbm9wIGlzIG5lZWRlZCB0byBmdWxsZmlsbCB0aGUgdHdvLWluc3RydWN0aW9uCisJICogVGhlIHRyYWlsaW5nIG5vcCBpcyBuZWVkZWQgdG8gZnVsZmlsbCB0aGUgdHdvLWluc3RydWN0aW9uCiAJICogcmVxdWlyZW1lbnQgYmV0d2VlbiByZWFkaW5nIGhpL2xvIGFuZCBzdGFyaW5nIGEgbXVsdC9kaXYuCiAJICogTGVhdmluZyBpdCBvdXQgbWF5IGNhdXNlIGdhcyBpbnNlcnQgYSBub3AgaXRzZWxmIGJyZWFraW5nCiAJICogdGhlIGRlc2lyZWQgYWxpZ25tZW50IG9mIHRoZSBuZXh0IGNodW5rLgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvbWlwcy9rZXJuZWwvZnRyYWNlLmMKaW5kZXggOTRjYTJiMC4uZmViODAyMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL21pcHMva2VybmVsL2Z0cmFjZS5jCkBAIC0yMyw2ICsyMyw3IEBACiAKICNkZWZpbmUgSkFMIDB4MGMwMDAwMDAJCS8qIGp1bXAgJiBsaW5rOiBpcCAtLT4gcmEsIGp1bXAgdG8gdGFyZ2V0ICovCiAjZGVmaW5lIEFERFJfTUFTSyAweDAzZmZmZmZmCS8qICBvcF9jb2RlfGFkZHIgOiAzMS4uLjI2fDI1IC4uLi4wICovCisjZGVmaW5lIEpVTVBfUkFOR0VfTUFTSyAoKDFVTCA8PCAyOCkgLSAxKQogCiAjZGVmaW5lIElOU05fTk9QIDB4MDAwMDAwMDAJLyogbm9wICovCiAjZGVmaW5lIElOU05fSkFMKGFkZHIpCVwKQEAgLTQ0LDEyICs0NSwxMiBAQAogCiAJLyogamFsIChmdHJhY2VfY2FsbGVyICsgOCksIGp1bXAgb3ZlciB0aGUgZmlyc3QgdHdvIGluc3RydWN0aW9uICovCiAJYnVmID0gKHUzMiAqKSZpbnNuX2phbF9mdHJhY2VfY2FsbGVyOwotCXVhc21faV9qYWwoJmJ1ZiwgKEZUUkFDRV9BRERSICsgOCkpOworCXVhc21faV9qYWwoJmJ1ZiwgKEZUUkFDRV9BRERSICsgOCkgJiBKVU1QX1JBTkdFX01BU0spOwogCiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgogCS8qIGogZnRyYWNlX2dyYXBoX2NhbGxlciAqLwogCWJ1ZiA9ICh1MzIgKikmaW5zbl9qX2Z0cmFjZV9ncmFwaF9jYWxsZXI7Ci0JdWFzbV9pX2ooJmJ1ZiwgKHVuc2lnbmVkIGxvbmcpZnRyYWNlX2dyYXBoX2NhbGxlcik7CisJdWFzbV9pX2ooJmJ1ZiwgKHVuc2lnbmVkIGxvbmcpZnRyYWNlX2dyYXBoX2NhbGxlciAmIEpVTVBfUkFOR0VfTUFTSyk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9wZXJmX2V2ZW50X21pcHN4eC5jIGIvYXJjaC9taXBzL2tlcm5lbC9wZXJmX2V2ZW50X21pcHN4eC5jCmluZGV4IGQ5YTdkYjcuLjc1MjY2ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcGVyZl9ldmVudF9taXBzeHguYworKysgYi9hcmNoL21pcHMva2VybmVsL3BlcmZfZXZlbnRfbWlwc3h4LmMKQEAgLTcyMSw3ICs3MjEsNyBAQAogCiAvKgogICogTUlQUyBwZXJmb3JtYW5jZSBjb3VudGVycyBjYW4gYmUgcGVyLVRDLiBUaGUgY29udHJvbCByZWdpc3RlcnMgY2FuCi0gKiBub3QgYmUgZGlyZWN0bHkgYWNjZXNzZWQgYWNjcm9zcyBDUFVzLiBIZW5jZSBpZiB3ZSB3YW50IHRvIGRvIGdsb2JhbAorICogbm90IGJlIGRpcmVjdGx5IGFjY2Vzc2VkIGFjcm9zcyBDUFVzLiBIZW5jZSBpZiB3ZSB3YW50IHRvIGRvIGdsb2JhbAogICogY29udHJvbCwgd2UgbmVlZCBjcm9zcyBDUFUgY2FsbHMuIG9uX2VhY2hfY3B1KCkgY2FuIGhlbHAgdXMsIGJ1dCB3ZQogICogY2FuIG5vdCBtYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuIFNvCiAgKiBoZXJlIHdlIHBhdXNlIGxvY2FsIGNvdW50ZXJzIGFuZCB0aGVuIGdyYWIgYSByd2xvY2sgYW5kIGxlYXZlIHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYwppbmRleCBhZTE2N2RmLi5kMjExMmQzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYwpAQCAtNDEwLDcgKzQxMCw3IEBACiAJaWYgKCFrYWxsc3ltc19sb29rdXBfc2l6ZV9vZmZzZXQocGMsICZzaXplLCAmb2ZzKSkKIAkJcmV0dXJuIDA7CiAJLyoKLQkgKiBSZXR1cm4gcmEgaWYgYW4gZXhjZXB0aW9uIG9jY3VyZWQgYXQgdGhlIGZpcnN0IGluc3RydWN0aW9uCisJICogUmV0dXJuIHJhIGlmIGFuIGV4Y2VwdGlvbiBvY2N1cnJlZCBhdCB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24KIAkgKi8KIAlpZiAodW5saWtlbHkob2ZzID09IDApKSB7CiAJCXBjID0gKnJhOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmMKaW5kZXggZDIxYzM4OC4uNTg0ZTZiNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jCkBAIC01NDAsOCArNTQwLDggQEAKIAkJc2VjdXJlX2NvbXB1dGluZyhyZWdzLT5yZWdzWzJdKTsKIAogCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSAmJiBlbnRyeWV4aXQpCi0JCWF1ZGl0X3N5c2NhbGxfZXhpdChBVURJVFNDX1JFU1VMVChyZWdzLT5yZWdzWzJdKSwKLQkJICAgICAgICAgICAgICAgICAgIHJlZ3MtPnJlZ3NbMl0pOworCQlhdWRpdF9zeXNjYWxsX2V4aXQoQVVESVRTQ19SRVNVTFQocmVncy0+cmVnc1s3XSksCisJCSAgICAgICAgICAgICAgICAgICAtcmVncy0+cmVnc1syXSk7CiAKIAlpZiAoIShjdXJyZW50LT5wdHJhY2UgJiBQVF9QVFJBQ0VEKSkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMKaW5kZXggN2Y1NDY4Yi4uN2YxMzc3ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUwpAQCAtNTY1LDcgKzU2NSw3IEBACiAJc3lzCXN5c19pb3ByaW9fZ2V0CQkyCS8qIDQzMTUgKi8KIAlzeXMJc3lzX3V0aW1lbnNhdAkJNAogCXN5cwlzeXNfc2lnbmFsZmQJCTMKLQlzeXMJc3lzX25pX3N5c2NhbGwJCTAKKwlzeXMJc3lzX25pX3N5c2NhbGwJCTAJLyogd2FzIHRpbWVyZmQgKi8KIAlzeXMJc3lzX2V2ZW50ZmQJCTEKIAlzeXMJc3lzX2ZhbGxvY2F0ZQkJNgkvKiA0MzIwICovCiAJc3lzCXN5c190aW1lcmZkX2NyZWF0ZQkyCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtNjQuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCmluZGV4IGEyZTFmY2IuLjdjMGVmN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCkBAIC00MDQsNyArNDA0LDcgQEAKIAlQVFIJc3lzX2lvcHJpb19nZXQKIAlQVFIJc3lzX3V0aW1lbnNhdAkJCS8qIDUyNzUgKi8KIAlQVFIJc3lzX3NpZ25hbGZkCi0JUFRSCXN5c19uaV9zeXNjYWxsCisJUFRSCXN5c19uaV9zeXNjYWxsCQkJLyogd2FzIHRpbWVyZmQgKi8KIAlQVFIJc3lzX2V2ZW50ZmQKIAlQVFIJc3lzX2ZhbGxvY2F0ZQogCVBUUglzeXNfdGltZXJmZF9jcmVhdGUJCS8qIDUyODAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUwppbmRleCBiMmM3NjI0Li5kZTZjNTU2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCkBAIC00MDMsNyArNDAzLDcgQEAKIAlQVFIJc3lzX2lvcHJpb19nZXQKIAlQVFIJY29tcGF0X3N5c191dGltZW5zYXQKIAlQVFIJY29tcGF0X3N5c19zaWduYWxmZAkJLyogNjI4MCAqLwotCVBUUglzeXNfbmlfc3lzY2FsbAorCVBUUglzeXNfbmlfc3lzY2FsbAkJCS8qIHdhcyB0aW1lcmZkICovCiAJUFRSCXN5c19ldmVudGZkCiAJUFRSCXN5c19mYWxsb2NhdGUKIAlQVFIJc3lzX3RpbWVyZmRfY3JlYXRlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKaW5kZXggMDQ5YTljOC4uYjA1NDFkZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwpAQCAtNTIyLDcgKzUyMiw3IEBACiAJUFRSCXN5c19pb3ByaW9fZ2V0CQkJLyogNDMxNSAqLwogCVBUUgljb21wYXRfc3lzX3V0aW1lbnNhdAogCVBUUgljb21wYXRfc3lzX3NpZ25hbGZkCi0JUFRSCXN5c19uaV9zeXNjYWxsCisJUFRSCXN5c19uaV9zeXNjYWxsCQkJLyogd2FzIHRpbWVyZmQgKi8KIAlQVFIJc3lzX2V2ZW50ZmQKIAlQVFIJc3lzMzJfZmFsbG9jYXRlCQkJLyogNDMyMCAqLwogCVBUUglzeXNfdGltZXJmZF9jcmVhdGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLW10LmMgYi9hcmNoL21pcHMva2VybmVsL3NtcC1tdC5jCmluZGV4IGMwZTgxNDEuLjFlYzU2ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLW10LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAtbXQuYwpAQCAtMTIwLDcgKzEyMCw3IEBACiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKLQl2cGZsYWdzID0gZHZwZSgpOwkvKiBjYW50IGFjY2VzcyB0aGUgb3RoZXIgQ1BVJ3MgcmVnaXN0ZXJzIHdoaWxzdCBNVlBFIGVuYWJsZWQgKi8KKwl2cGZsYWdzID0gZHZwZSgpOwkvKiBjYW4ndCBhY2Nlc3MgdGhlIG90aGVyIENQVSdzIHJlZ2lzdGVycyB3aGlsc3QgTVZQRSBlbmFibGVkICovCiAKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgU01QX0NBTExfRlVOQ1RJT046CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3RpbWUuYyBiL2FyY2gvbWlwcy9rZXJuZWwvdGltZS5jCmluZGV4IGZiNzQ5NzQuLjEwODNhZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdGltZS5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAljYXNlIENQVV9SNDQwMFNDOgogCWNhc2UgQ1BVX1I0NDAwTUM6CiAJCS8qCi0JCSAqIFRoZSBwdWJsaXNoZWQgZXJyYXRhIGZvciB0aGUgUjQ0MDAgdXB0byAzLjAgc2F5IHRoZSBDUFUKKwkJICogVGhlIHB1Ymxpc2hlZCBlcnJhdGEgZm9yIHRoZSBSNDQwMCB1cCB0byAzLjAgc2F5IHRoZSBDUFUKIAkJICogaGFzIHRoZSBtZmMwIGZyb20gY291bnQgYnVnLgogCQkgKi8KIAkJaWYgKChjdXJyZW50X2NwdV9kYXRhLnByb2Nlc3Nvcl9pZCAmIDB4ZmYpIDw9IDB4MzApCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKaW5kZXggNzEzNTBmNy4uZTliM2FmMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwpAQCAtMzc0LDcgKzM3NCw4IEBACiAJdW5zaWduZWQgbG9uZyBkdnByZXQgPSBkdnBlKCk7CiAjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCi0Jbm90aWZ5X2RpZShESUVfT09QUywgc3RyLCByZWdzLCAwLCByZWdzX3RvX3RyYXBucihyZWdzKSwgU0lHU0VHVik7CisJaWYgKG5vdGlmeV9kaWUoRElFX09PUFMsIHN0ciwgcmVncywgMCwgcmVnc190b190cmFwbnIocmVncyksIFNJR1NFR1YpID09IE5PVElGWV9TVE9QKQorCQlzaWcgPSAwOwogCiAJY29uc29sZV92ZXJib3NlKCk7CiAJc3Bpbl9sb2NrX2lycSgmZGllX2xvY2spOwpAQCAtMzgzLDkgKzM4NCw2IEBACiAJbWlwc19tdF9yZWdkdW1wKGR2cHJldCk7CiAjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCi0JaWYgKG5vdGlmeV9kaWUoRElFX09PUFMsIHN0ciwgcmVncywgMCwgcmVnc190b190cmFwbnIocmVncyksIFNJR1NFR1YpID09IE5PVElGWV9TVE9QKQotCQlzaWcgPSAwOwotCiAJcHJpbnRrKCIlc1sjJWRdOlxuIiwgc3RyLCArK2RpZV9jb3VudGVyKTsKIAlzaG93X3JlZ2lzdGVycyhyZWdzKTsKIAlhZGRfdGFpbnQoVEFJTlRfRElFKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA4MzJhZmJiLi5lNGIwYjBiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC03NCw2ICs3NCw3IEBACiAJCUlOSVRfVEFTS19EQVRBKFBBR0VfU0laRSkKIAkJTk9TQVZFX0RBVEEKIAkJQ0FDSEVMSU5FX0FMSUdORURfREFUQSgxIDw8IENPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUKQorCQlSRUFEX01PU1RMWV9EQVRBKDEgPDwgQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQpCiAJCURBVEFfREFUQQogCQlDT05TVFJVQ1RPUlMKIAl9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3ZwZS5jIGIvYXJjaC9taXBzL2tlcm5lbC92cGUuYwppbmRleCBhYjUyYjdjLi5kYmI2YjQwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3ZwZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMKQEAgLTE5LDcgKzE5LDcgQEAKICAqIFZQRSBzdXBwb3J0IG1vZHVsZQogICoKICAqIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGxvYWRpbmcgYSBNSVBTIFNQIHByb2dyYW0gb24gVlBFMS4KLSAqIFRoZSBTUCBlbnZpcm9tZW50IGlzIHJhdGhlciBzaW1wbGUsIG5vIHRsYidzLiAgSXQgbmVlZHMgdG8gYmUgcmVsb2NhdGFibGUKKyAqIFRoZSBTUCBlbnZpcm9ubWVudCBpcyByYXRoZXIgc2ltcGxlLCBubyB0bGIncy4gIEl0IG5lZWRzIHRvIGJlIHJlbG9jYXRhYmxlCiAgKiAob3IgcGFydGlhbGx5IGxpbmtlZCkuIFlvdSBzaG91bGQgaW5pdGlhbGlzZSB5b3VyIHN0YWNrIGluIHRoZSBzdGFydHVwCiAgKiBjb2RlLiBUaGlzIGxvYWRlciBsb29rcyBmb3IgdGhlIHN5bWJvbCBfX3N0YXJ0IGFuZCBzZXRzIHVwCiAgKiBleGVjdXRpb24gdG8gcmVzdW1lIGZyb20gdGhlcmUuIFRoZSBNSVBTIFNERSBraXQgY29udGFpbnMgc3VpdGFibGUgZXhhbXBsZXMuCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGliL3N0cm5sZW5fdXNlci5TIGIvYXJjaC9taXBzL2xpYi9zdHJubGVuX3VzZXIuUwppbmRleCBjNzY4ZTMwMC4uNjQ0NTcxNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xpYi9zdHJubGVuX3VzZXIuUworKysgYi9hcmNoL21pcHMvbGliL3N0cm5sZW5fdXNlci5TCkBAIC0xNyw3ICsxNyw3IEBACiAJLnByZXZpb3VzCiAKIC8qCi0gKiBSZXR1cm4gdGhlIHNpemUgb2YgYSBzdHJpbmcgaW5jbHVkaW5nIHRoZSBlbmRpbmcgTlVMIGNoYXJhY3RlciB1cHRvIGEKKyAqIFJldHVybiB0aGUgc2l6ZSBvZiBhIHN0cmluZyBpbmNsdWRpbmcgdGhlIGVuZGluZyBOVUwgY2hhcmFjdGVyIHVwIHRvIGEKICAqIG1heGltdW0gb2YgYTEgb3IgMCBpbiBjYXNlIG9mIGVycm9yLgogICoKICAqIE5vdGU6IGZvciBwZXJmb3JtYW5jZSByZWFzb25zIHdlIGRlbGliZXJhdGVseSBhY2NlcHQgdGhhdCBhIHVzZXIgbWF5CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Vudi5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lbnYuYwppbmRleCAxMWIxOTNmLi5kOTM4MzBhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Vudi5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vZW52LmMKQEAgLTI5LDkgKzI5LDEwIEBACiAKICNkZWZpbmUgcGFyc2VfZXZlbl9lYXJsaWVyKHJlcywgb3B0aW9uLCBwKQkJCQlcCiBkbyB7CQkJCQkJCQkJXAotCWludCByZXQ7CQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgdG1wIF9fbWF5YmVfdW51c2VkOwkJCQlcCisJCQkJCQkJCQlcCiAJaWYgKHN0cm5jbXAob3B0aW9uLCAoY2hhciAqKXAsIHN0cmxlbihvcHRpb24pKSA9PSAwKQkJXAotCQlyZXQgPSBzdHJpY3Rfc3RydG9sKChjaGFyICopcCArIHN0cmxlbihvcHRpb24iPSIpLCAxMCwgJnJlcyk7IFwKKwkJdG1wID0gc3RyaWN0X3N0cnRvbCgoY2hhciAqKXAgKyBzdHJsZW4ob3B0aW9uIj0iKSwgMTAsICZyZXMpOyBcCiB9IHdoaWxlICgwKQogCiB2b2lkIF9faW5pdCBwcm9tX2luaXRfZW52KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvZHBfZnNwLmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvZHBfZnNwLmMKaW5kZXggMWRmYmQ5Mi4uZGFlZDY4MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L2RwX2ZzcC5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9mc3AuYwpAQCAtNjIsNyArNjIsNyBAQAogCQlicmVhazsKIAl9CiAKLQkvKiBDQU5UIHBvc3NpYmx5IG92ZXJmbG93LHVuZGVyZmxvdywgb3IgbmVlZCByb3VuZGluZworCS8qIENBTidUIHBvc3NpYmx5IG92ZXJmbG93LHVuZGVyZmxvdywgb3IgbmVlZCByb3VuZGluZwogCSAqLwogCiAJLyogZHJvcCB0aGUgaGlkZGVuIGJpdCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L2RwX211bC5jIGIvYXJjaC9taXBzL21hdGgtZW11L2RwX211bC5jCmluZGV4IGFhNTY2ZTcuLjA5MTc1ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9tdWwuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvZHBfbXVsLmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogCWNhc2UgQ0xQQUlSKElFRUU3NTRfQ0xBU1NfTk9STSwgSUVFRTc1NF9DTEFTU19OT1JNKToKIAkJYnJlYWs7CiAJfQotCS8qIHJtID0geG0gKiB5bSwgcmUgPSB4ZSt5ZSBiYXNpY2x5ICovCisJLyogcm0gPSB4bSAqIHltLCByZSA9IHhlK3llIGJhc2ljYWxseSAqLwogCWFzc2VydCh4bSAmIERQX0hJRERFTl9CSVQpOwogCWFzc2VydCh5bSAmIERQX0hJRERFTl9CSVQpOwogCXsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tYXRoLWVtdS9kc2VtdWwuYyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9kc2VtdWwuYwppbmRleCAzNmQ5NzVhLi4zYzRhOGM1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUvZHNlbXVsLmMKKysrIGIvYXJjaC9taXBzL21hdGgtZW11L2RzZW11bC5jCkBAIC0zMiw3ICszMiw3IEBACiAgKiBub3QgY2hhbmdlIGNwMF9lcGMgZHVlIHRvIHRoZSBpbnN0cnVjdGlvbgogICoKICAqIEFjY29yZGluZyB0byB0aGUgc3BlYzoKLSAqIDEpIGl0IHNob3VsZG50IGJlIGEgYnJhbmNoIDotKQorICogMSkgaXQgc2hvdWxkbid0IGJlIGEgYnJhbmNoIDotKQogICogMikgaXQgY2FuIGJlIGEgQ09QIGluc3RydWN0aW9uIDotKAogICogMykgaWYgd2UgYXJlIHRyaW5nIHRvIHJ1biBhIHByb3RlY3RlZCBtZW1vcnkgc3BhY2Ugd2UgbXVzdCB0YWtlCiAgKiAgICBzcGVjaWFsIGNhcmUgb24gbWVtb3J5IGFjY2VzcyBpbnN0cnVjdGlvbnMgOi0oCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvc3BfbXVsLmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvc3BfbXVsLmMKaW5kZXggYzA2YmI0MDIuLjI3MjJhMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9zcF9tdWwuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvc3BfbXVsLmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogCWNhc2UgQ0xQQUlSKElFRUU3NTRfQ0xBU1NfTk9STSwgSUVFRTc1NF9DTEFTU19OT1JNKToKIAkJYnJlYWs7CiAJfQotCS8qIHJtID0geG0gKiB5bSwgcmUgPSB4ZSt5ZSBiYXNpY2x5ICovCisJLyogcm0gPSB4bSAqIHltLCByZSA9IHhlK3llIGJhc2ljYWxseSAqLwogCWFzc2VydCh4bSAmIFNQX0hJRERFTl9CSVQpOwogCWFzc2VydCh5bSAmIFNQX0hJRERFTl9CSVQpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vYy1yNGsuYyBiL2FyY2gvbWlwcy9tbS9jLXI0ay5jCmluZGV4IGI0OTIzYTcuLjcxYmRkZjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9jLXI0ay5jCisrKyBiL2FyY2gvbWlwcy9tbS9jLXI0ay5jCkBAIC0xMDc1LDcgKzEwNzUsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGFkZHIsIGJlZ2luLCBlbmQsIHBvdzI7CiAJdW5zaWduZWQgaW50IGNvbmZpZyA9IHJlYWRfYzBfY29uZmlnKCk7CiAJc3RydWN0IGNwdWluZm9fbWlwcyAqYyA9ICZjdXJyZW50X2NwdV9kYXRhOwotCWludCB0bXA7CiAKIAlpZiAoY29uZmlnICYgQ09ORl9TQykKIAkJcmV0dXJuIDA7CkBAIC0xMTA4LDcgKzExMDcsNiBAQAogCiAJLyogTm93IHNlYXJjaCBmb3IgdGhlIHdyYXAgYXJvdW5kIHBvaW50LiAqLwogCXBvdzIgPSAoMTI4ICogMTAyNCk7Ci0JdG1wID0gMDsKIAlmb3IgKGFkZHIgPSBiZWdpbiArICgxMjggKiAxMDI0KTsgYWRkciA8IGVuZDsgYWRkciA9IGJlZ2luICsgcG93MikgewogCQljYWNoZV9vcChJbmRleF9Mb2FkX1RhZ19TRCwgYWRkcik7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fKCJub3A7IG5vcDsgbm9wOyBub3A7Iik7IC8qIGhhemFyZC4uLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2NleC1zYjEuUyBiL2FyY2gvbWlwcy9tbS9jZXgtc2IxLlMKaW5kZXggMmQwODI2OC4uODljNDEyYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2NleC1zYjEuUworKysgYi9hcmNoL21pcHMvbW0vY2V4LXNiMS5TCkBAIC03OSw3ICs3OSw3IEBACiByZWNvdmVyZWRfZGNhY2hlOgogCS8qCiAJICogVW5sb2NrIENhY2hlRXJyLUQgKHdoaWNoIGluIHR1cm4gdW5sb2NrcyBDYWNoZUVyci1EUEEpLgotCSAqIE91Z2h0IHRvIGxvZyB0aGUgb2NjdXJlbmNlIG9mIHRoaXMgcmVjb3ZlcmVkIGRjYWNoZSBlcnJvci4KKwkgKiBPdWdodCB0byBsb2cgdGhlIG9jY3VycmVuY2Ugb2YgdGhpcyByZWNvdmVyZWQgZGNhY2hlIGVycm9yLgogCSAqLwogCWIJcmVjb3ZlcmVkCiAJIG10YzAJJDAsQzBfQ0VSUl9ECmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vdGxiZXguYyBiL2FyY2gvbWlwcy9tbS90bGJleC5jCmluZGV4IDA0ZjllMTcuLmY1NzM0YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS90bGJleC5jCisrKyBiL2FyY2gvbWlwcy9tbS90bGJleC5jCkBAIC0zNTIsNyArMzUyLDcgQEAKIAogLyoKICAqIFdyaXRlIHJhbmRvbSBvciBpbmRleGVkIFRMQiBlbnRyeSwgYW5kIGNhcmUgYWJvdXQgdGhlIGhhemFyZHMgZnJvbQotICogdGhlIHByZWNlZWRpbmcgbXRjMCBhbmQgZm9yIHRoZSBmb2xsb3dpbmcgZXJldC4KKyAqIHRoZSBwcmVjZWRpbmcgbXRjMCBhbmQgZm9yIHRoZSBmb2xsb3dpbmcgZXJldC4KICAqLwogZW51bSB0bGJfd3JpdGVfZW50cnkgeyB0bGJfcmFuZG9tLCB0bGJfaW5kZXhlZCB9OwogCkBAIC0xMTUxLDggKzExNTEsOCBAQAogCXN0cnVjdCB1YXNtX3JlbG9jICpyID0gcmVsb2NzOwogCXUzMiAqZjsKIAl1bnNpZ25lZCBpbnQgZmluYWxfbGVuOwotCXN0cnVjdCBtaXBzX2h1Z2VfdGxiX2luZm8gaHRsYl9pbmZvOwotCWVudW0gdm1hbGxvYzY0X21vZGUgdm1hbGxvY19tb2RlOworCXN0cnVjdCBtaXBzX2h1Z2VfdGxiX2luZm8gaHRsYl9pbmZvIF9fbWF5YmVfdW51c2VkOworCWVudW0gdm1hbGxvYzY0X21vZGUgdm1hbGxvY19tb2RlIF9fbWF5YmVfdW51c2VkOwogCiAJbWVtc2V0KHRsYl9oYW5kbGVyLCAwLCBzaXplb2YodGxiX2hhbmRsZXIpKTsKIAltZW1zZXQobGFiZWxzLCAwLCBzaXplb2YobGFiZWxzKSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWluaXQuYyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW5pdC5jCmluZGV4IDQxNGYwYzkuLjMxMTgwYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW5pdC5jCkBAIC0xOTMsOCArMTkzLDYgQEAKIAogdm9pZCBfX2luaXQgcHJvbV9pbml0KHZvaWQpCiB7Ci0JaW50IHJlc3VsdDsKLQogCXByb21fYXJnYyA9IGZ3X2FyZzA7CiAJX3Byb21fYXJndiA9IChpbnQgKikgZndfYXJnMTsKIAlfcHJvbV9lbnZwID0gKGludCAqKSBmd19hcmcyOwpAQCAtMzYwLDIwICszNTgsMTQgQEAKICNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRQogCWNvbnNvbGVfY29uZmlnKCk7CiAjZW5kaWYKLQkvKiBFYXJseSBkZXRlY3Rpb24gb2YgQ01QIHN1cHBvcnQgKi8KLQlyZXN1bHQgPSBnY21wX3Byb2JlKEdDTVBfQkFTRV9BRERSLCBHQ01QX0FERFJTUEFDRV9TWik7Ci0KICNpZmRlZiBDT05GSUdfTUlQU19DTVAKLQlpZiAocmVzdWx0KQorCS8qIEVhcmx5IGRldGVjdGlvbiBvZiBDTVAgc3VwcG9ydCAqLworCWlmIChnY21wX3Byb2JlKEdDTVBfQkFTRV9BRERSLCBHQ01QX0FERFJTUEFDRV9TWikpCiAJCXJlZ2lzdGVyX3NtcF9vcHMoJmNtcF9zbXBfb3BzKTsKKwllbHNlCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVAKLSNpZmRlZiBDT05GSUdfTUlQU19DTVAKLQlpZiAoIXJlc3VsdCkKIAkJcmVnaXN0ZXJfc21wX29wcygmdnNtcF9zbXBfb3BzKTsKLSNlbHNlCi0JcmVnaXN0ZXJfc21wX29wcygmdnNtcF9zbXBfb3BzKTsKLSNlbmRpZgogI2VuZGlmCiAjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQwogCXJlZ2lzdGVyX3NtcF9vcHMoJm1zbXRjX3NtcF9vcHMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbnQuYyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW50LmMKaW5kZXggOTAyNzA2MS4uZTg1Yzk3NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbnQuYworKysgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWludC5jCkBAIC01Niw3ICs1Niw2IEBACiBzdGF0aWMgaW5saW5lIGludCBtaXBzX3BjaWJpb3NfaWFjayh2b2lkKQogewogCWludCBpcnE7Ci0JdTMyIGR1bW15OwogCiAJLyoKIAkgKiBEZXRlcm1pbmUgaGlnaGVzdCBwcmlvcml0eSBwZW5kaW5nIGludGVycnVwdCBieSBwZXJmb3JtaW5nCkBAIC04Myw3ICs4Miw3IEBACiAJCUJPTklUT19QQ0lNQVBfQ0ZHID0gMHgyMDAwMDsKIAogCQkvKiBGbHVzaCBCb25pdG8gcmVnaXN0ZXIgYmxvY2sgKi8KLQkJZHVtbXkgPSBCT05JVE9fUENJTUFQX0NGRzsKKwkJKHZvaWQpIEJPTklUT19QQ0lNQVBfQ0ZHOwogCQlpb2IoKTsgICAgLyogc3luYyAqLwogCiAJCWlycSA9IF9fcmF3X3JlYWRsKCh1MzIgKilfcGNpY3RybF9ib25pdG9fcGNpY2ZnKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtc210Yy5jIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1zbXRjLmMKaW5kZXggZTY3ODkxNS4uNDlhMzhiMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1zbXRjLmMKKysrIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1zbXRjLmMKQEAgLTEzMCw3ICsxMzAsNyBAQAogCSAqIGNsZWFyZWQgaW4gdGhlIGFmZmluaXR5IG1hc2ssIHRoZXJlIHdpbGwgbmV2ZXIgYmUgYW55CiAJICogaW50ZXJydXB0IGZvcndhcmRpbmcuICBCdXQgYXMgc29vbiBhcyBhIHByb2dyYW0gb3Igb3BlcmF0b3IKIAkgKiBzZXRzIGFmZmluaXR5IGZvciBvbmUgb2YgdGhlIHJlbGF0ZWQgSVJRcywgd2UgbmVlZCB0byBtYWtlCi0JICogc3VyZSB0aGF0IHdlIGRvbid0IGV2ZXIgdHJ5IHRvIGZvcndhcmQgYWNyb3NzIHRoZSBWUEUgYm91bmRyeSwKKwkgKiBzdXJlIHRoYXQgd2UgZG9uJ3QgZXZlciB0cnkgdG8gZm9yd2FyZCBhY3Jvc3MgdGhlIFZQRSBib3VuZGFyeSwKIAkgKiBhdCBsZWFzdCBub3QgdW50aWwgd2UgZW5naW5lZXIgYSBzeXN0ZW0gd2hlcmUgdGhlIGludGVycnVwdAogCSAqIF9hY2soKSBvciBfZW5kKCkgZnVuY3Rpb24gY2FuIHNvbWVob3cga25vdyB0aGF0IGl0IGNvcnJlc3BvbmRzCiAJICogdG8gYW4gaW50ZXJydXB0IHRha2VuIG9uIGFub3RoZXIgVlBFLCBhbmQgcGVyZm9ybSB0aGUgYXBwcm9wcmlhdGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvb3BzLXBtY21zcC5jIGIvYXJjaC9taXBzL3BjaS9vcHMtcG1jbXNwLmMKaW5kZXggNjg3OThmOC4uOGZiZmJmMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9vcHMtcG1jbXNwLmMKKysrIGIvYXJjaC9taXBzL3BjaS9vcHMtcG1jbXNwLmMKQEAgLTM0NCw3ICszNDQsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfQUNDRVNTX1dSSVRFIGFuZCBQQ0lfQUNDRVNTX1JFQUQuCiAgKgogICogICAgICAgICAgICAgICBidXMgICAgICAgICAgLSBwb2ludGVyIHRvIHRoZSBidXMgbnVtYmVyIG9mIHRoZSBkZXZpY2UgdG8KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgdGFyZ2V0dGVkIGZvciB0aGUgY29uZmlndXJhdGlvbiBjeWNsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgdGFyZ2V0ZWQgZm9yIHRoZSBjb25maWd1cmF0aW9uIGN5Y2xlLgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgb25seSBlbGVtZW50IG9mIHRoZSBwY2lfYnVzIHN0cnVjdHVyZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIGlzIGJ1cy0+bnVtYmVyLiBUaGlzIGFyZ3VtZW50IGRldGVybWluZXMKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIGNvbmZpZ3VyYXRpb24gYWNjZXNzIHdpbGwgYmUgVHlwZSAwIG9yCkBAIC0zNTQsNyArMzU0LDcgQEAKICAqCiAgKiAgICAgICAgICAgICAgIGRldmZuICAgICAgICAtIHRoaXMgaXMgYW4gOC1iaXQgZmllbGQuIFRoZSBsb3dlciB0aHJlZSBiaXRzCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgdGhlIGZ1bmN0aW9uIG51bWJlciBvZiB0aGUgZGV2aWNlIHRvCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHRhcmdldHRlZCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gY3ljbGUsIHdpdGgKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgdGFyZ2V0ZWQgZm9yIHRoZSBjb25maWd1cmF0aW9uIGN5Y2xlLCB3aXRoCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbCB0aHJlZS1iaXQgY29tYmluYXRpb25zIGJlaW5nIGxlZ2FsLiBUaGUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXIgZml2ZSBiaXRzIHNwZWNpZnkgdGhlIGRldmljZSBudW1iZXIsCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggbGVnYWwgdmFsdWVzIGJlaW5nIDEwIHRvIDMxLgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9wY2ktYmNtMTQ4MC5jIGIvYXJjaC9taXBzL3BjaS9wY2ktYmNtMTQ4MC5jCmluZGV4IDZmNWUyNGMuLmFmOGMzMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvcGNpLWJjbTE0ODAuYworKysgYi9hcmNoL21pcHMvcGNpL3BjaS1iY20xNDgwLmMKQEAgLTIxMCw3ICsyMTAsNyBAQAogCVBDSUJJT1NfTUlOX0lPID0gMHgwMDAwODAwMFVMOwogCVBDSUJJT1NfTUlOX01FTSA9IDB4MDEwMDAwMDBVTDsKIAotCS8qIFNldCBJL08gcmVzb3VyY2UgbGltaXRzLiAtIHVubGltaXRlZCBmb3Igbm93IHRvIGFjY29tb2RhdGUgSFQgKi8KKwkvKiBTZXQgSS9PIHJlc291cmNlIGxpbWl0cy4gLSB1bmxpbWl0ZWQgZm9yIG5vdyB0byBhY2NvbW1vZGF0ZSBIVCAqLwogCWlvcG9ydF9yZXNvdXJjZS5lbmQgPSAweGZmZmZmZmZmVUw7CiAJaW9tZW1fcmVzb3VyY2UuZW5kID0gMHhmZmZmZmZmZlVMOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1vY3Rlb24uYyBiL2FyY2gvbWlwcy9wY2kvcGNpLW9jdGVvbi5jCmluZGV4IDJkNzRmYzkuLmVkMWM1NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvcGNpLW9jdGVvbi5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLW9jdGVvbi5jCkBAIC00NDEsNyArNDQxLDcgQEAKIAogCS8qCiAJICogVERPTUMgbXVzdCBiZSBzZXQgdG8gb25lIGluIFBDSSBtb2RlLiBURE9NQyBzaG91bGQgYmUgc2V0IHRvIDQKLQkgKiBpbiBQQ0ktWCBtb2RlIHRvIGFsbG93IGZvdXIgb3VzdGFuZGluZyBzcGxpdHMuIE90aGVyd2lzZSwKKwkgKiBpbiBQQ0ktWCBtb2RlIHRvIGFsbG93IGZvdXIgb3V0c3RhbmRpbmcgc3BsaXRzLiBPdGhlcndpc2UsCiAJICogc2hvdWxkIG5vdCBjaGFuZ2UgZnJvbSBpdHMgcmVzZXQgdmFsdWUuIERvbid0IHdyaXRlIFBDSV9DRkcxOQogCSAqIGluIFBDSSBtb2RlICgweDgyMDAwMDAxIHJlc2V0IHZhbHVlKSwgd3JpdGUgaXQgdG8gMHg4MjAwMDAwNAogCSAqIGFmdGVyIFBDSS1YIG1vZGUgaXMga25vd24uIE1SQkNJLE1EV0UsTURSRSAtPiBtdXN0IGJlIHplcm8uCkBAIC01MTUsNyArNTE1LDcgQEAKICNlbmRpZgkvKiBVU0VfT0NURU9OX0lOVEVSTkFMX0FSQklURVIgKi8KIAogCS8qCi0JICogUHJlZmVycmFibHkgd3JpdHRlbiB0byAxIHRvIHNldCBNTFRELiBbUkRTQVRJLFRSVEFFLAorCSAqIFByZWZlcmFibHkgd3JpdHRlbiB0byAxIHRvIHNldCBNTFRELiBbUkRTQVRJLFRSVEFFLAogCSAqIFRXVEFFLFRNQUUsRFBQTVIgLT4gbXVzdCBiZSB6ZXJvLiBUSUxUIC0+IG11c3Qgbm90IGJlIHNldCB0bwogCSAqIDEuLjcuCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS5jIGIvYXJjaC9taXBzL3BjaS9wY2kuYwppbmRleCAzOGJjMjgwLi4zM2JiYTdiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogCWhvc2VfdGFpbCA9ICZob3NlLT5uZXh0OwogCiAJLyoKLQkgKiBEbyBub3QgcGFuaWMgaGVyZSBidXQgbGF0ZXIgLSB0aGlzIG1pZ2h0IGhhcGVuIGJlZm9yZSBjb25zb2xlIGluaXQuCisJICogRG8gbm90IHBhbmljIGhlcmUgYnV0IGxhdGVyIC0gdGhpcyBtaWdodCBoYXBwZW4gYmVmb3JlIGNvbnNvbGUgaW5pdC4KIAkgKi8KIAlpZiAoIWhvc2UtPmlvX21hcF9iYXNlKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX2lycV9wZXIuYyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX2lycV9wZXIuYwppbmRleCBmOWI5ZGNkLi45OGZkMDA5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9pcnFfcGVyLmMKKysrIGIvYXJjaC9taXBzL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfaXJxX3Blci5jCkBAIC05Nyw3ICs5Nyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXNwX3Blcl9pcnFfY29udHJvbGxlciA9IHsKIAkubmFtZSA9ICJNU1BfUEVSIiwKLQkuaXJxX2VuYWJsZSA9IHVubWFza19wZXJfaXJxLgorCS5pcnFfZW5hYmxlID0gdW5tYXNrX3Blcl9pcnEsCiAJLmlycV9kaXNhYmxlID0gbWFza19wZXJfaXJxLAogCS5pcnFfYWNrID0gbXNwX3Blcl9pcnFfYWNrLAogI2lmZGVmIENPTkZJR19TTVAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX3NldHVwLmMgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9zZXR1cC5jCmluZGV4IGZiMzdhMTAuLjI0MTNlYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3BtYy1zaWVycmEvbXNwNzF4eC9tc3Bfc2V0dXAuYwpAQCAtMjM5LDcgKzIzOSw3IEBACiAjaWZkZWYgQ09ORklHX1BNQ1RXSUxFRAogCS8qCiAJICogU2V0dXAgTEVEIHN0YXRlcyBiZWZvcmUgdGhlIHN1YnN5c19pbml0Y2FsbCBsb2FkcyBvdGhlcgotCSAqIGRlcGVuZGFudCBkcml2ZXJzL21vZHVsZXMuCisJICogZGVwZW5kZW50IGRyaXZlcnMvbW9kdWxlcy4KIAkgKi8KIAlwbWN0d2lsZWRfc2V0dXAoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BueDgzM3gvY29tbW9uL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvcG54ODMzeC9jb21tb24vcGxhdGZvcm0uYwppbmRleCBjZTQ1ZGYxLi44NzE2N2RjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG54ODMzeC9jb21tb24vcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvcG54ODMzeC9jb21tb24vcGxhdGZvcm0uYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJewogCQkuYmFzZSA9IFBOWDgzM1hfSTJDMF9QT1JUU19TVEFSVCwKIAkJLmlycSA9IC0xLCAvKiBzaG91bGQgYmUgUE5YODMzWF9QSUNfSTJDMF9JTlQgYnV0IHBvbGxpbmcgaXMgZmFzdGVyICovCi0JCS5jbG9jayA9IDYsCS8qIDAgPT0gNDAwIGtIeiwgNCA9PSAxMDAga0h6KE1heGltdW0gSERNSSksIDYgPSA1MGtIeihQcmVmZXJlZCBIRENQKSAqLworCQkuY2xvY2sgPSA2LAkvKiAwID09IDQwMCBrSHosIDQgPT0gMTAwIGtIeihNYXhpbXVtIEhETUkpLCA2ID0gNTBrSHooUHJlZmVycmVkIEhEQ1ApICovCiAJCS5idXNfYWRkciA9IDAsCS8qIG5vIHNsYXZlIHN1cHBvcnQgKi8KIAl9LAogCXsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlci9oaWJlcm5hdGUuUyBiL2FyY2gvbWlwcy9wb3dlci9oaWJlcm5hdGUuUwppbmRleCBkYmI1YzdiLi5mOGE3NTFjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG93ZXIvaGliZXJuYXRlLlMKKysrIGIvYXJjaC9taXBzL3Bvd2VyL2hpYmVybmF0ZS5TCkBAIC0zNSw3ICszNSw3IEBACiAwOgogCVBUUl9MIHQxLCBQQkVfQUREUkVTUyh0MCkgICAvKiBzb3VyY2UgKi8KIAlQVFJfTCB0MiwgUEJFX09SSUdfQUREUkVTUyh0MCkgLyogZGVzdGluYXRpb24gKi8KLQlQVFJfQURESVUgdDMsIHQxLCBQQUdFX1NJWkUKKwlQVFJfQUREVSB0MywgdDEsIFBBR0VfU0laRQogMToKIAlSRUdfTCB0OCwgKHQxKQogCVJFR19TIHQ4LCAodDIpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcmI1MzIvZ3Bpby5jIGIvYXJjaC9taXBzL3JiNTMyL2dwaW8uYwppbmRleCAzN2RlMDVkLi42YzQ3ZGZlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcmI1MzIvZ3Bpby5jCisrKyBiL2FyY2gvbWlwcy9yYjUzMi9ncGlvLmMKQEAgLTE4NSw3ICsxODUsNyBAQAogCXN0cnVjdCByZXNvdXJjZSAqcjsKIAogCXIgPSByYjUzMl9ncGlvX3JlZzBfcmVzOwotCXJiNTMyX2dwaW9fY2hpcC0+cmVnYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQpOworCXJiNTMyX2dwaW9fY2hpcC0+cmVnYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyKSk7CiAKIAlpZiAoIXJiNTMyX2dwaW9fY2hpcC0+cmVnYmFzZSkgewogCQlwcmludGsoS0VSTl9FUlIgInJiNTMyOiBjYW5ub3QgcmVtYXAgR1BJTyByZWdpc3RlciAwXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXBsYXRmb3JtLmMgYi9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1wbGF0Zm9ybS5jCmluZGV4IGRlZGRiZjAuLjY5ODkwNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXBsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItcGxhdGZvcm0uYwpAQCAtMTMyLDcgKzEzMiw3IEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IHNnaXNlZXFfZGV2aW5pdCh2b2lkKQogewotCXVuc2lnbmVkIGludCB0bXA7CisJdW5zaWduZWQgaW50IHBiZG1hIF9fbWF5YmVfdW51c2VkOwogCWludCByZXMsIGk7CiAKIAlldGgwX3BkLmhwYyA9IGhwYzNjMDsKQEAgLTE1MSw3ICsxNTEsNyBAQAogCiAJLyogU2Vjb25kIEhQQyBpcyBtaXNzaW5nPyAqLwogCWlmIChpcDIyX2lzX2Z1bGxob3VzZSgpIHx8Ci0JICAgIGdldF9kYmUodG1wLCAodW5zaWduZWQgaW50ICopJmhwYzNjMS0+cGJkbWFbMV0pKQorCSAgICBnZXRfZGJlKHBiZG1hLCAodW5zaWduZWQgaW50ICopJmhwYzNjMS0+cGJkbWFbMV0pKQogCQlyZXR1cm4gMDsKIAogCXNnaW1jLT5naW9wYXIgfD0gU0dJTUNfR0lPUEFSX01BU1RFUkVYUDEgfCBTR0lNQ19HSU9QQVJfRVhQMTY0IHwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXRpbWUuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXRpbWUuYwppbmRleCA2MDNmYzkxLi4xYTk0Yzk4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi10aW1lLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItdGltZS5jCkBAIC0zMiw3ICszMiw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBkb3NhbXBsZSh2b2lkKQogewogCXUzMiBjdDAsIGN0MTsKLQl1OCBtc2IsIGxzYjsKKwl1OCBtc2I7CiAKIAkvKiBTdGFydCB0aGUgY291bnRlci4gKi8KIAlzZ2ludC0+dGN3b3JkID0gKFNHSU5UX1RDV09SRF9DTlQyIHwgU0dJTlRfVENXT1JEX0NBTEwgfApAQCAtNDYsNyArNDYsNyBAQAogCS8qIExhdGNoIGFuZCBzcGluIHVudGlsIHRvcCBieXRlIG9mIGNvdW50ZXIyIGlzIHplcm8gKi8KIAlkbyB7CiAJCXdyaXRlYihTR0lOVF9UQ1dPUkRfQ05UMiB8IFNHSU5UX1RDV09SRF9DTEFULCAmc2dpbnQtPnRjd29yZCk7Ci0JCWxzYiA9IHJlYWRiKCZzZ2ludC0+dGNudDIpOworCQkodm9pZCkgcmVhZGIoJnNnaW50LT50Y250Mik7CiAJCW1zYiA9IHJlYWRiKCZzZ2ludC0+dGNudDIpOwogCQljdDEgPSByZWFkX2MwX2NvdW50KCk7CiAJfSB3aGlsZSAobXNiKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9LY29uZmlnIGIvYXJjaC9taXBzL3NnaS1pcDI3L0tjb25maWcKaW5kZXggNWU5NjBhZS4uYmM1ZTk3NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L0tjb25maWcKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L0tjb25maWcKQEAgLTEsNyArMSw3IEBACiAjY29uZmlnIFNHSV9TTjBfWFhMCiAjCWJvb2wgIklQMjcgWFhMIgogIwlkZXBlbmRzIG9uIFNHSV9JUDI3Ci0jCSAgVGhpcyBvcHRpb25zIGFkZHMgc3VwcG9ydCBmb3IgdXNlcnNwYWNlIHByb2Nlc3NlcyB1cHRvIDE2VEIgc2l6ZS4KKyMJICBUaGlzIG9wdGlvbnMgYWRkcyBzdXBwb3J0IGZvciB1c2Vyc3BhY2UgcHJvY2Vzc2VzIHVwIHRvIDE2VEIgc2l6ZS4KICMJICBOb3JtYWxseSB0aGUgbGltaXQgaXMganVzdCAuNVRCLgogCiBjaG9pY2UKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9UT0RPIGIvYXJjaC9taXBzL3NnaS1pcDI3L1RPRE8KaW5kZXggMTlmMTUxMi4uMTYwODU3ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L1RPRE8KKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L1RPRE8KQEAgLTEzLDcgKzEzLDcgQEAKIDkuIHN0YXJ0X3RocmVhZCBtdXN0IHR1cm4gb2ZmIFVYNjQgLi4uIGFuZCBkZWZpbmUgdGxiX3JlZmlsbF9kZWJ1Zy4KIDEwLiBOZWVkIGEgYmFkIHBtZCB0YWJsZSwgYmFkIHB0ZSB0YWJsZS4gX19iYWRfcG1kX3RhYmxlL19fYmFkX3BhZ2V0YWJsZQogZG9lcyBub3QgYWdyZWUgd2l0aCBwZ2RfYmFkL3BtZF9iYWQuCi0xMS4gQWxsIGludHJzIChpcDI3X2RvX2lycSBoYW5kbGVycykgYXJlIHRhcmdldHRlZCBhdCBjcHUgQSBvbiB0aGUgbm9kZS4KKzExLiBBbGwgaW50cnMgKGlwMjdfZG9faXJxIGhhbmRsZXJzKSBhcmUgdGFyZ2V0ZWQgYXQgY3B1IEEgb24gdGhlIG5vZGUuCiBUaGlzIG1pZ2h0IG5lZWQgdG8gY2hhbmdlIGxhdGVyLiBPbmx5IHRoZSB0aW1lciBpbnRyIGlzIHNldCB1cCB0byBiZQogcmVjZWl2ZWQgb24gYm90aCBDcHUgQSBhbmQgQi4gKGlwMjdfZG9faXJxKCkvYnJpZGdlX3N0YXJ0dXAoKSkKIDEzLiBDYWNoZSBmbHVzaGluZyAoc3BlY2lhbGx5IHRoZSBTTVAgdmVyc2lvbikgaGFzIHRvIGJlIGludmVzdGlnYXRlZC4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWh1YmlvLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1odWJpby5jCmluZGV4IGExZmE0YWIuLmNkMGQ1YjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWh1YmlvLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaHViaW8uYwpAQCAtMjksNyArMjksNiBAQAogCQkJICB1bnNpZ25lZCBsb25nIHh0YWxrX2FkZHIsIHNpemVfdCBzaXplKQogewogCW5hc2lkX3QgbmFzaWQgPSBDT01QQUNUX1RPX05BU0lEX05PREVJRChjbm9kZSk7Ci0Jdm9sYXRpbGUgaHVicmVnX3QganVuazsKIAl1bnNpZ25lZCBpOwogCiAJLyogdXNlIHNtYWxsLXdpbmRvdyBtYXBwaW5nIGlmIHBvc3NpYmxlICovCkBAIC02NCw3ICs2Myw3IEBACiAJCSAqIGFmdGVyIHdlIHdyaXRlIGl0LgogCQkgKi8KIAkJSUlPX0lUVEVfUFVUKG5hc2lkLCBpLCBIVUJfUElPX01BUF9UT19NRU0sIHdpZGdldCwgeHRhbGtfYWRkcik7Ci0JCWp1bmsgPSBIVUJfTChJSU9fSVRURV9HRVQobmFzaWQsIGkpKTsKKwkJKHZvaWQpIEhVQl9MKElJT19JVFRFX0dFVChuYXNpZCwgaSkpOwogCiAJCXJldHVybiBOT0RFX0JXSU5fQkFTRShuYXNpZCwgd2lkZ2V0KSArICh4dGFsa19hZGRyICUgQldJTl9TSVpFKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1pbml0LmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1pbml0LmMKaW5kZXggNTFkM2E0Zi4uOTIzYzA4MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWluaXQuYwpAQCAtOTMsNyArOTMsNyBAQAogCiAJLyoKIAkgKiBTb21lIGludGVycnVwdHMgYXJlIHJlc2VydmVkIGJ5IGhhcmR3YXJlIG9yIGJ5IHNvZnR3YXJlIGNvbnZlbnRpb24uCi0JICogTWFyayB0aGVzZSBhcyByZXNlcnZlZCByaWdodCBhd2F5IHNvIHRoZXkgd29uJ3QgYmUgdXNlZCBhY2NpZGVudGx5CisJICogTWFyayB0aGVzZSBhcyByZXNlcnZlZCByaWdodCBhd2F5IHNvIHRoZXkgd29uJ3QgYmUgdXNlZCBhY2NpZGVudGFsbHkKIAkgKiBsYXRlci4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDw9IEJBU0VfUENJX0lSUTsgaSsrKSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1pcnEuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jCmluZGV4IDExNDg4NzEuLjBhMDQ2MDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jCkBAIC00MSw3ICs0MSw3IEBACiAgKiBMaW51eCBoYXMgYSBjb250cm9sbGVyLWluZGVwZW5kZW50IHg4NiBpbnRlcnJ1cHQgYXJjaGl0ZWN0dXJlLgogICogZXZlcnkgY29udHJvbGxlciBoYXMgYSAnY29udHJvbGxlci10ZW1wbGF0ZScsIHRoYXQgaXMgdXNlZAogICogYnkgdGhlIG1haW4gY29kZSB0byBkbyB0aGUgcmlnaHQgdGhpbmcuIEVhY2ggZHJpdmVyLXZpc2libGUKLSAqIGludGVycnVwdCBzb3VyY2UgaXMgdHJhbnNwYXJlbnRseSB3aXJlZCB0byB0aGUgYXByb3ByaWF0ZQorICogaW50ZXJydXB0IHNvdXJjZSBpcyB0cmFuc3BhcmVudGx5IHdpcmVkIHRvIHRoZSBhcHByb3ByaWF0ZQogICogY29udHJvbGxlci4gVGh1cyBkcml2ZXJzIG5lZWQgbm90IGJlIGF3YXJlIG9mIHRoZQogICogaW50ZXJydXB0LWNvbnRyb2xsZXIuCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xudW1hLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYwppbmRleCBjM2QzMGE4Li4xZDE5MTlhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYwpAQCAtNTQsMTEgKzU0LDggQEAKIAogc3RhdGljIF9faW5pdCB2b2lkIHNldF9rdGV4dF9zb3VyY2UobmFzaWRfdCBjbGllbnRfbmFzaWQsIG5hc2lkX3Qgc2VydmVyX25hc2lkKQogewotCWNub2RlaWRfdCBjbGllbnRfY25vZGU7CiAJa2Vybl92YXJzX3QgKmt2cDsKIAotCWNsaWVudF9jbm9kZSA9IE5BU0lEX1RPX0NPTVBBQ1RfTk9ERUlEKGNsaWVudF9uYXNpZCk7Ci0KIAlrdnAgPSAmaHViX2RhdGEoY2xpZW50X25hc2lkKS0+a2Vybl92YXJzOwogCiAJS0VSTl9WQVJTX0FERFIoY2xpZW50X25hc2lkKSA9ICh1bnNpZ25lZCBsb25nKWt2cDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zbmkvdGltZS5jIGIvYXJjaC9taXBzL3NuaS90aW1lLmMKaW5kZXggYzc2MTUxYi4uMDkwNGQ0ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS90aW1lLmMKKysrIGIvYXJjaC9taXBzL3NuaS90aW1lLmMKQEAgLTk1LDcgKzk1LDcgQEAKIHN0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyBkb3NhbXBsZSh2b2lkKQogewogCXUzMiBjdDAsIGN0MTsKLQl2b2xhdGlsZSB1OCBtc2IsIGxzYjsKKwl2b2xhdGlsZSB1OCBtc2I7CiAKIAkvKiBTdGFydCB0aGUgY291bnRlci4gKi8KIAlvdXRiX3AoMHgzNCwgMHg0Myk7CkBAIC0xMDgsNyArMTA4LDcgQEAKIAkvKiBMYXRjaCBhbmQgc3BpbiB1bnRpbCB0b3AgYnl0ZSBvZiBjb3VudGVyMCBpcyB6ZXJvICovCiAJZG8gewogCQlvdXRiKDB4MDAsIDB4NDMpOwotCQlsc2IgPSBpbmIoMHg0MCk7CisJCSh2b2lkKSBpbmIoMHg0MCk7CiAJCW1zYiA9IGluYigweDQwKTsKIAkJY3QxID0gcmVhZF9jMF9jb3VudCgpOwogCX0gd2hpbGUgKG1zYik7CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vY3B1LXJlZ3MuaCBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9jcHUtcmVncy5oCmluZGV4IDkwZWQ0YTMuLmM1NGVmZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9jcHUtcmVncy5oCisrKyBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9jcHUtcmVncy5oCkBAIC00OSw3ICs0OSw3IEBACiAjZGVmaW5lIEVQU1dfSU1fNgkJMHgwMDAwMDYwMAkvKiBpbnRlcnJ1cHQgbW9kZSA2ICovCiAjZGVmaW5lIEVQU1dfSU1fNwkJMHgwMDAwMDcwMAkvKiBpbnRlcnJ1cHQgbW9kZSA3ICovCiAjZGVmaW5lIEVQU1dfSUUJCQkweDAwMDAwODAwCS8qIGludGVycnVwdCBlbmFibGUgKi8KLSNkZWZpbmUgRVBTV19TCQkJMHgwMDAwMzAwMAkvKiBzb2Z0d2FyZSBhdXhpbGxpYXJ5IGJpdHMgKi8KKyNkZWZpbmUgRVBTV19TCQkJMHgwMDAwMzAwMAkvKiBzb2Z0d2FyZSBhdXhpbGlhcnkgYml0cyAqLwogI2RlZmluZSBFUFNXX1QJCQkweDAwMDA4MDAwCS8qIHRyYWNlIGVuYWJsZSAqLwogI2RlZmluZSBFUFNXX25TTAkJMHgwMDAxMDAwMAkvKiBub3Qgc3VwZXJ2aXNvciBsZXZlbCAqLwogI2RlZmluZSBFUFNXX05NSUQJCTB4MDAwMjAwMDAJLyogbm9ubWFza2FibGUgaW50ZXJydXB0IGRpc2FibGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2Vpc2FfZWVwcm9tLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9laXNhX2VlcHJvbS5oCmluZGV4IDljOWRhOTguLjhjZThiODUgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2Vpc2FfZWVwcm9tLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZWlzYV9lZXByb20uaApAQCAtMjcsNyArMjcsNyBAQAogCXVfaW50OF90ICB2ZXJfbWFqOwogCXVfaW50OF90ICB2ZXJfbWluOwogCXVfaW50OF90ICBudW1fc2xvdHM7ICAgICAgICAvKiBudW1iZXIgb2YgRUlTQSBzbG90cyBpbiBzeXN0ZW0gKi8KLQl1X2ludDE2X3QgY3N1bTsgICAgICAgICAgICAgLyogY2hlY2tzdW0sIEkgZG9uJ3Qga25vdyBob3cgdG8gY2FsdWxhdGUgdGhpcyAqLworCXVfaW50MTZfdCBjc3VtOyAgICAgICAgICAgICAvKiBjaGVja3N1bSwgSSBkb24ndCBrbm93IGhvdyB0byBjYWxjdWxhdGUgdGhpcyAqLwogCXVfaW50OF90ICBwYWRbMTBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKaW5kZXggZTU0NzcwOS4uZWFkOGQyYSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKQEAgLTE4Nyw4ICsxODcsOCBAQAogCiAJLyogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIHRsYiBtaXNzIGhhbmRsZXIgbWFjcm9zICovCiAKLQl2YSAgPSByOAkvKiB2aXJ0dWFsIGFkZHJlc3MgZm9yIHdoaWNoIHRoZSB0cmFwIG9jY3VyZWQgKi8KLQlzcGMgPSByMjQJLyogc3BhY2UgZm9yIHdoaWNoIHRoZSB0cmFwIG9jY3VyZWQgKi8KKwl2YSAgPSByOAkvKiB2aXJ0dWFsIGFkZHJlc3MgZm9yIHdoaWNoIHRoZSB0cmFwIG9jY3VycmVkICovCisJc3BjID0gcjI0CS8qIHNwYWNlIGZvciB3aGljaCB0aGUgdHJhcCBvY2N1cnJlZCAqLwogCiAjaWZuZGVmIENPTkZJR182NEJJVAogCkBAIC04ODIsNyArODgyLDcgQEAKIAkgKiAod2UgZG9uJ3Qgc3RvcmUgdGhlbSBpbiB0aGUgc2lnY29udGV4dCksIHNvIHNldCB0aGVtCiAJICogdG8gInByb3BlciIgdmFsdWVzIG5vdyAob3RoZXJ3aXNlIHdlJ2xsIHdpbmQgdXAgcmVzdG9yaW5nCiAJICogd2hhdGV2ZXIgd2FzIGxhc3Qgc3RvcmVkIGluIHRoZSB0YXNrIHN0cnVjdHVyZSwgd2hpY2ggbWlnaHQKLQkgKiBiZSBpbmNvbnNpc3RlbnQgaWYgYW4gaW50ZXJydXB0IG9jY3VyZWQgd2hpbGUgb24gdGhlIGdhdGV3YXkKKwkgKiBiZSBpbmNvbnNpc3RlbnQgaWYgYW4gaW50ZXJydXB0IG9jY3VycmVkIHdoaWxlIG9uIHRoZSBnYXRld2F5CiAJICogcGFnZSkuIE5vdGUgdGhhdCB3ZSBtYXkgYmUgInRyYXNoaW5nIiB2YWx1ZXMgdGhlIHVzZXIgcHV0IGluCiAJICogdGhlbSwgYnV0IHdlIGRvbid0IHN1cHBvcnQgdGhlIHVzZXIgY2hhbmdpbmcgdGhlbS4KIAkgKi8KQEAgLTExNTYsMTEgKzExNTYsMTEgQEAKIAkgKi8KIAogCXQwID0gcjEJCS8qIHRlbXBvcmFyeSByZWdpc3RlciAwICovCi0JdmEgPSByOAkJLyogdmlydHVhbCBhZGRyZXNzIGZvciB3aGljaCB0aGUgdHJhcCBvY2N1cmVkICovCisJdmEgPSByOAkJLyogdmlydHVhbCBhZGRyZXNzIGZvciB3aGljaCB0aGUgdHJhcCBvY2N1cnJlZCAqLwogCXQxID0gcjkJCS8qIHRlbXBvcmFyeSByZWdpc3RlciAxICovCiAJcHRlICA9IHIxNgkvKiBwdGUvcGh5cyBwYWdlICMgKi8KIAlwcm90ID0gcjE3CS8qIHByb3QgYml0cyAqLwotCXNwYyAgPSByMjQJLyogc3BhY2UgZm9yIHdoaWNoIHRoZSB0cmFwIG9jY3VyZWQgKi8KKwlzcGMgID0gcjI0CS8qIHNwYWNlIGZvciB3aGljaCB0aGUgdHJhcCBvY2N1cnJlZCAqLwogCXB0cCA9IHIyNQkvKiBwYWdlIGRpcmVjdG9yeS9wYWdlIHRhYmxlIHBvaW50ZXIgKi8KIAogI2lmZGVmIENPTkZJR182NEJJVApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2hlYWQuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9oZWFkLlMKaW5kZXggNGRiZGYwZS4uMTQ1YzVlNCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvaGVhZC5TCkBAIC0xMzEsNyArMTMxLDcgQEAKIAlsZG8gICAgICAgICAgICAgVEhSRUFEX1NaX0FMR04oJXI2KSwlc3AKIAogI2lmZGVmIENPTkZJR19TTVAKLQkvKiBTZXQgdGhlIHNtcCByZW5kZXZvdXMgYWRkcmVzcyBpbnRvIHBhZ2UgemVyby4KKwkvKiBTZXQgdGhlIHNtcCByZW5kZXp2b3VzIGFkZHJlc3MgaW50byBwYWdlIHplcm8uCiAJKiogSXQgd291bGQgYmUgc2FmZXIgdG8gZG8gdGhpcyBpbiBpbml0X3NtcF9jb25maWcoKSBidXQKIAkqKiBpdCdzIGp1c3Qgd2F5IGVhc2llciB0byBkZWFsIHdpdGggaGVyZSBiZWNhdXNlCiAJKiogb2YgNjQtYml0IGZ1bmN0aW9uIHB0cnMgYW5kIHRoZSBhZGRyZXNzIGlzIGxvY2FsIHRvIHRoaXMgZmlsZS4KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYwppbmRleCBkMjI4ZDgyLi4wODMyNGFhIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jCkBAIC05Myw3ICs5Myw3IEBACiAJY2FzZSAweDY6CQkvKiA3MDUsIDcxMCAqLwogCWNhc2UgMHg3OgkJLyogNzE1LCA3MjUgKi8KIAljYXNlIDB4ODoJCS8qIDc0NSwgNzQ3LCA3NDIgKi8KLQljYXNlIDB4QToJCS8qIDcxMiBhbmQgc2ltaWxpYXIgKi8KKwljYXNlIDB4QToJCS8qIDcxMiBhbmQgc2ltaWxhciAqLwogCWNhc2UgMHhDOgkJLyogNzE1LzY0LCBhdCBsZWFzdCAqLwogCiAJCXBkY190eXBlID0gUERDX1RZUEVfU05BS0U7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMKaW5kZXggNjA5YTMzMS4uMTJjMWVkMyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYwpAQCAtMjkxLDcgKzI5MSw3IEBACiAJCURCRygxLCJzZXR1cF9ydF9mcmFtZTogZnJhbWUtPnVjID0gMHglcFxuIiwgJmZyYW1lLT51Yyk7CiAJCURCRygxLCJzZXR1cF9ydF9mcmFtZTogZnJhbWUtPnVjLnVjX21jb250ZXh0ID0gMHglcFxuIiwgJmZyYW1lLT51Yy51Y19tY29udGV4dCk7CiAJCWVyciB8PSBzZXR1cF9zaWdjb250ZXh0KCZmcmFtZS0+dWMudWNfbWNvbnRleHQsIHJlZ3MsIGluX3N5c2NhbGwpOwotCQkvKiBGSVhNRTogU2hvdWxkIHByb2JhYmx5IGJlIGNvbnZlcnRlZCBhc3dlbGwgZm9yIHRoZSBjb21wYXQgY2FzZSAqLworCQkvKiBGSVhNRTogU2hvdWxkIHByb2JhYmx5IGJlIGNvbnZlcnRlZCBhcyB3ZWxsIGZvciB0aGUgY29tcGF0IGNhc2UgKi8KIAkJZXJyIHw9IF9fY29weV90b191c2VyKCZmcmFtZS0+dWMudWNfc2lnbWFzaywgc2V0LCBzaXplb2YoKnNldCkpOwogCX0KIAkKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbC5TCmluZGV4IDY4ZTc1Y2UuLjgyYTUyYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUwpAQCAtNjA1LDcgKzYwNSw3IEBACiAJY29weQklcjAsICVyMjEKIAogMzoJCQotCS8qIEVycm9yIG9jY3VyZWQgb24gbG9hZCBvciBzdG9yZSAqLworCS8qIEVycm9yIG9jY3VycmVkIG9uIGxvYWQgb3Igc3RvcmUgKi8KIAkvKiBGcmVlIGxvY2sgKi8KIAlzdHcJJXIyMCwgMCglc3IyLCVyMjApCiAjaWYgRU5BQkxFX0xXU19ERUJVRwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKaW5kZXggNzQ4NjdkZi4uNGJlODVlZSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCkBAIC0zNCw3ICszNCw3IEBACiAvKiBVc2UgRU5UUllfU0FNRSBmb3IgMzItYml0IHN5c2NhbGxzIHdoaWNoIGFyZSB0aGUgc2FtZSBvbiB3aWRlIGFuZAogICogbmFycm93IHBhbGludXguICBVc2UgRU5UUllfRElGRiBmb3IgdGhvc2Ugd2hlcmUgYSAzMi1iaXQgc3BlY2lmaWMKICAqIGltcGxlbWVudGF0aW9uIGlzIHJlcXVpcmVkIG9uIHdpZGUgcGFsaW51eC4gIFVzZSBFTlRSWV9DT01QIHdoZXJlCi0gKiB0aGUgY29tcGF0YWJpbGl0eSBsYXllciBoYXMgYSB1c2VmdWwgMzItYml0IGltcGxlbWVudGF0aW9uLgorICogdGhlIGNvbXBhdGliaWxpdHkgbGF5ZXIgaGFzIGEgdXNlZnVsIDMyLWJpdCBpbXBsZW1lbnRhdGlvbi4KICAqLwogI2RlZmluZSBFTlRSWV9TQU1FKF9uYW1lXykgLmR3b3JkIHN5c18jI19uYW1lXwogI2RlZmluZSBFTlRSWV9ESUZGKF9uYW1lXykgLmR3b3JkIHN5czMyXyMjX25hbWVfCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9tYXRoLWVtdS9kZmFkZC5jIGIvYXJjaC9wYXJpc2MvbWF0aC1lbXUvZGZhZGQuYwppbmRleCBlMTQ3ZDdkLi5kMzdlMmQyIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9tYXRoLWVtdS9kZmFkZC5jCisrKyBiL2FyY2gvcGFyaXNjL21hdGgtZW11L2RmYWRkLmMKQEAgLTMwMyw3ICszMDMsNyBAQAogCWlmKERibF9pc3plcm9faGlkZGVuKHJlc3VsdHAxKSkKIAkgICAgewogCSAgICAvKiBIYW5kbGUgbm9ybWFsaXphdGlvbiAqLwotCSAgICAvKiBBIHN0cmFpZ2h0IGZvd2FyZCBhbGdvcml0aG0gd291bGQgbm93IHNoaWZ0IHRoZSByZXN1bHQKKwkgICAgLyogQSBzdHJhaWdodCBmb3J3YXJkIGFsZ29yaXRobSB3b3VsZCBub3cgc2hpZnQgdGhlIHJlc3VsdAogCSAgICAgKiBhbmQgZXh0ZW5zaW9uIGxlZnQgdW50aWwgdGhlIGhpZGRlbiBiaXQgYmVjb21lcyBvbmUuICBOb3QKIAkgICAgICogYWxsIG9mIHRoZSBleHRlbnNpb24gYml0cyBuZWVkIHBhcnRpY2lwYXRlIGluIHRoZSBzaGlmdC4KIAkgICAgICogT25seSB0aGUgdHdvIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyAocm91bmQgYW5kIGd1YXJkKSBhcmUKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL21hdGgtZW11L2Rmc3ViLmMgYi9hcmNoL3BhcmlzYy9tYXRoLWVtdS9kZnN1Yi5jCmluZGV4IDg3ZWJjNjAuLjJlOGI1YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL21hdGgtZW11L2Rmc3ViLmMKKysrIGIvYXJjaC9wYXJpc2MvbWF0aC1lbXUvZGZzdWIuYwpAQCAtMzA2LDcgKzMwNiw3IEBACiAJaWYoRGJsX2lzemVyb19oaWRkZW4ocmVzdWx0cDEpKQogCSAgICB7CiAJICAgIC8qIEhhbmRsZSBub3JtYWxpemF0aW9uICovCi0JICAgIC8qIEEgc3RyYWlnaHQgZm93YXJkIGFsZ29yaXRobSB3b3VsZCBub3cgc2hpZnQgdGhlIHJlc3VsdAorCSAgICAvKiBBIHN0cmFpZ2h0IGZvcndhcmQgYWxnb3JpdGhtIHdvdWxkIG5vdyBzaGlmdCB0aGUgcmVzdWx0CiAJICAgICAqIGFuZCBleHRlbnNpb24gbGVmdCB1bnRpbCB0aGUgaGlkZGVuIGJpdCBiZWNvbWVzIG9uZS4gIE5vdAogCSAgICAgKiBhbGwgb2YgdGhlIGV4dGVuc2lvbiBiaXRzIG5lZWQgcGFydGljaXBhdGUgaW4gdGhlIHNoaWZ0LgogCSAgICAgKiBPbmx5IHRoZSB0d28gbW9zdCBzaWduaWZpY2FudCBiaXRzIChyb3VuZCBhbmQgZ3VhcmQpIGFyZQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvbWF0aC1lbXUvZm1weWZhZGQuYyBiL2FyY2gvcGFyaXNjL21hdGgtZW11L2ZtcHlmYWRkLmMKaW5kZXggNWRkN2Y5My4uYjA2N2M0NSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvbWF0aC1lbXUvZm1weWZhZGQuYworKysgYi9hcmNoL3BhcmlzYy9tYXRoLWVtdS9mbXB5ZmFkZC5jCkBAIC01MzEsNyArNTMxLDcgQEAKIAkJc2lnbl9zYXZlID0gRGJsX3NpZ25leHRlbmRlZHNpZ24ocmVzdWx0cDEpOwogCQlpZiAoRGJsX2lzemVyb19oaWRkZW4ocmVzdWx0cDEpKSB7CiAJCQkvKiBIYW5kbGUgbm9ybWFsaXphdGlvbiAqLwotCQkvKiBBIHN0cmFpZ2h0IGZvd2FyZCBhbGdvcml0aG0gd291bGQgbm93IHNoaWZ0IHRoZQorCQkvKiBBIHN0cmFpZ2h0Zm9yd2FyZCBhbGdvcml0aG0gd291bGQgbm93IHNoaWZ0IHRoZQogCQkgKiByZXN1bHQgYW5kIGV4dGVuc2lvbiBsZWZ0IHVudGlsIHRoZSBoaWRkZW4gYml0CiAJCSAqIGJlY29tZXMgb25lLiAgTm90IGFsbCBvZiB0aGUgZXh0ZW5zaW9uIGJpdHMgbmVlZAogCQkgKiBwYXJ0aWNpcGF0ZSBpbiB0aGUgc2hpZnQuICBPbmx5IHRoZSB0d28gbW9zdCAKQEAgLTExOTEsNyArMTE5MSw3IEBACiAJCXNpZ25fc2F2ZSA9IERibF9zaWduZXh0ZW5kZWRzaWduKHJlc3VsdHAxKTsKIAkJaWYgKERibF9pc3plcm9faGlkZGVuKHJlc3VsdHAxKSkgewogCQkJLyogSGFuZGxlIG5vcm1hbGl6YXRpb24gKi8KLQkJLyogQSBzdHJhaWdodCBmb3dhcmQgYWxnb3JpdGhtIHdvdWxkIG5vdyBzaGlmdCB0aGUKKwkJLyogQSBzdHJhaWdodGZvcndhcmQgYWxnb3JpdGhtIHdvdWxkIG5vdyBzaGlmdCB0aGUKIAkJICogcmVzdWx0IGFuZCBleHRlbnNpb24gbGVmdCB1bnRpbCB0aGUgaGlkZGVuIGJpdAogCQkgKiBiZWNvbWVzIG9uZS4gIE5vdCBhbGwgb2YgdGhlIGV4dGVuc2lvbiBiaXRzIG5lZWQKIAkJICogcGFydGljaXBhdGUgaW4gdGhlIHNoaWZ0LiAgT25seSB0aGUgdHdvIG1vc3QgCkBAIC0xODQxLDcgKzE4NDEsNyBAQAogCQlzaWduX3NhdmUgPSBTZ2xfc2lnbmV4dGVuZGVkc2lnbihyZXN1bHRwMSk7CiAJCWlmIChTZ2xfaXN6ZXJvX2hpZGRlbihyZXN1bHRwMSkpIHsKIAkJCS8qIEhhbmRsZSBub3JtYWxpemF0aW9uICovCi0JCS8qIEEgc3RyYWlnaHQgZm93YXJkIGFsZ29yaXRobSB3b3VsZCBub3cgc2hpZnQgdGhlCisJCS8qIEEgc3RyYWlnaHRmb3J3YXJkIGFsZ29yaXRobSB3b3VsZCBub3cgc2hpZnQgdGhlCiAJCSAqIHJlc3VsdCBhbmQgZXh0ZW5zaW9uIGxlZnQgdW50aWwgdGhlIGhpZGRlbiBiaXQKIAkJICogYmVjb21lcyBvbmUuICBOb3QgYWxsIG9mIHRoZSBleHRlbnNpb24gYml0cyBuZWVkCiAJCSAqIHBhcnRpY2lwYXRlIGluIHRoZSBzaGlmdC4gIE9ubHkgdGhlIHR3byBtb3N0IApAQCAtMjQ4Myw3ICsyNDgzLDcgQEAKIAkJc2lnbl9zYXZlID0gU2dsX3NpZ25leHRlbmRlZHNpZ24ocmVzdWx0cDEpOwogCQlpZiAoU2dsX2lzemVyb19oaWRkZW4ocmVzdWx0cDEpKSB7CiAJCQkvKiBIYW5kbGUgbm9ybWFsaXphdGlvbiAqLwotCQkvKiBBIHN0cmFpZ2h0IGZvd2FyZCBhbGdvcml0aG0gd291bGQgbm93IHNoaWZ0IHRoZQorCQkvKiBBIHN0cmFpZ2h0Zm9yd2FyZCBhbGdvcml0aG0gd291bGQgbm93IHNoaWZ0IHRoZQogCQkgKiByZXN1bHQgYW5kIGV4dGVuc2lvbiBsZWZ0IHVudGlsIHRoZSBoaWRkZW4gYml0CiAJCSAqIGJlY29tZXMgb25lLiAgTm90IGFsbCBvZiB0aGUgZXh0ZW5zaW9uIGJpdHMgbmVlZAogCQkgKiBwYXJ0aWNpcGF0ZSBpbiB0aGUgc2hpZnQuICBPbmx5IHRoZSB0d28gbW9zdCAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL21hdGgtZW11L3NmYWRkLmMgYi9hcmNoL3BhcmlzYy9tYXRoLWVtdS9zZmFkZC5jCmluZGV4IDAwOGQ3MjEuLmY4MDJjZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL21hdGgtZW11L3NmYWRkLmMKKysrIGIvYXJjaC9wYXJpc2MvbWF0aC1lbXUvc2ZhZGQuYwpAQCAtMjk4LDcgKzI5OCw3IEBACiAJaWYoU2dsX2lzemVyb19oaWRkZW4ocmVzdWx0KSkKIAkgICAgewogCSAgICAvKiBIYW5kbGUgbm9ybWFsaXphdGlvbiAqLwotCSAgICAvKiBBIHN0cmFpZ2h0IGZvd2FyZCBhbGdvcml0aG0gd291bGQgbm93IHNoaWZ0IHRoZSByZXN1bHQKKwkgICAgLyogQSBzdHJhaWdodGZvcndhcmQgYWxnb3JpdGhtIHdvdWxkIG5vdyBzaGlmdCB0aGUgcmVzdWx0CiAJICAgICAqIGFuZCBleHRlbnNpb24gbGVmdCB1bnRpbCB0aGUgaGlkZGVuIGJpdCBiZWNvbWVzIG9uZS4gIE5vdAogCSAgICAgKiBhbGwgb2YgdGhlIGV4dGVuc2lvbiBiaXRzIG5lZWQgcGFydGljaXBhdGUgaW4gdGhlIHNoaWZ0LgogCSAgICAgKiBPbmx5IHRoZSB0d28gbW9zdCBzaWduaWZpY2FudCBiaXRzIChyb3VuZCBhbmQgZ3VhcmQpIGFyZQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvbWF0aC1lbXUvc2ZzdWIuYyBiL2FyY2gvcGFyaXNjL21hdGgtZW11L3Nmc3ViLmMKaW5kZXggMjRlZWY2MS4uNWY5MGQwZiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvbWF0aC1lbXUvc2ZzdWIuYworKysgYi9hcmNoL3BhcmlzYy9tYXRoLWVtdS9zZnN1Yi5jCkBAIC0zMDEsNyArMzAxLDcgQEAKIAlpZihTZ2xfaXN6ZXJvX2hpZGRlbihyZXN1bHQpKQogCSAgICB7CiAJICAgIC8qIEhhbmRsZSBub3JtYWxpemF0aW9uICovCi0JICAgIC8qIEEgc3RyYWlnaHQgZm93YXJkIGFsZ29yaXRobSB3b3VsZCBub3cgc2hpZnQgdGhlIHJlc3VsdAorCSAgICAvKiBBIHN0cmFpZ2h0Zm9yd2FyZCBhbGdvcml0aG0gd291bGQgbm93IHNoaWZ0IHRoZSByZXN1bHQKIAkgICAgICogYW5kIGV4dGVuc2lvbiBsZWZ0IHVudGlsIHRoZSBoaWRkZW4gYml0IGJlY29tZXMgb25lLiAgTm90CiAJICAgICAqIGFsbCBvZiB0aGUgZXh0ZW5zaW9uIGJpdHMgbmVlZCBwYXJ0aWNpcGF0ZSBpbiB0aGUgc2hpZnQuCiAJICAgICAqIE9ubHkgdGhlIHR3byBtb3N0IHNpZ25pZmljYW50IGJpdHMgKHJvdW5kIGFuZCBndWFyZCkgYXJlCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9tbS9pbml0LmMgYi9hcmNoL3BhcmlzYy9tbS9pbml0LmMKaW5kZXggYjdlZDhkNy4uYjFkMTI2MiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvbW0vaW5pdC5jCisrKyBiL2FyY2gvcGFyaXNjL21tL2luaXQuYwpAQCAtMjY2LDggKzI2NiwxMCBAQAogCX0KIAltZW1zZXQocGZubmlkX21hcCwgMHhmZiwgc2l6ZW9mKHBmbm5pZF9tYXApKTsKIAotCWZvciAoaSA9IDA7IGkgPCBucG1lbV9yYW5nZXM7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgbnBtZW1fcmFuZ2VzOyBpKyspIHsKKwkJbm9kZV9zZXRfc3RhdGUoaSwgTl9OT1JNQUxfTUVNT1JZKTsKIAkJbm9kZV9zZXRfb25saW5lKGkpOworCX0KICNlbmRpZgogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKaW5kZXggYjZmZjg4Mi4uOGY0ZDUwYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKQEAgLTIwOSw3ICsyMDksNyBAQAogY29uZmlnIEFSQ0hfU1VTUEVORF9QT1NTSUJMRQogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIEFEQl9QTVUgfHwgUFBDX0VGSUtBIHx8IFBQQ19MSVRFNTIwMCB8fCBQUENfODN4eCB8fCBcCi0JCSAgIFBQQ184NXh4IHx8IFBQQ184Nnh4IHx8IFBQQ19QU0VSSUVTIHx8IDQ0eCB8fCA0MHgKKwkJICAgKFBQQ184NXh4ICYmICFTTVApIHx8IFBQQ184Nnh4IHx8IFBQQ19QU0VSSUVTIHx8IDQ0eCB8fCA0MHgKIAogY29uZmlnIFBQQ19EQ1JfTkFUSVZFCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtLzh4eF9pbW1hcC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtLzh4eF9pbW1hcC5oCmluZGV4IDZiNmRjMjAuLmJkZjA1NjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS84eHhfaW1tYXAuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vOHh4X2ltbWFwLmgKQEAgLTM5Myw4ICszOTMsOCBAQAogCXVpbnQJZmVjX2FkZHJfbG93OwkJLyogbG93ZXIgMzIgYml0cyBvZiBzdGF0aW9uIGFkZHJlc3MJKi8KIAl1c2hvcnQJZmVjX2FkZHJfaGlnaDsJCS8qIHVwcGVyIDE2IGJpdHMgb2Ygc3RhdGlvbiBhZGRyZXNzCSovCiAJdXNob3J0CXJlczE7CQkJLyogcmVzZXJ2ZWQJCQkJKi8KLQl1aW50CWZlY19oYXNoX3RhYmxlX2hpZ2g7CS8qIHVwcGVyIDMyLWJpdHMgb2YgaGFzaCB0YWJsZQkJKi8KLQl1aW50CWZlY19oYXNoX3RhYmxlX2xvdzsJLyogbG93ZXIgMzItYml0cyBvZiBoYXNoIHRhYmxlCQkqLworCXVpbnQJZmVjX2dycF9oYXNoX3RhYmxlX2hpZ2g7CS8qIHVwcGVyIDMyLWJpdHMgb2YgaGFzaCB0YWJsZQkJKi8KKwl1aW50CWZlY19ncnBfaGFzaF90YWJsZV9sb3c7CS8qIGxvd2VyIDMyLWJpdHMgb2YgaGFzaCB0YWJsZQkJKi8KIAl1aW50CWZlY19yX2Rlc19zdGFydDsJLyogYmVnaW5uaW5nIG9mIFJ4IGRlc2NyaXB0b3IgcmluZwkqLwogCXVpbnQJZmVjX3hfZGVzX3N0YXJ0OwkvKiBiZWdpbm5pbmcgb2YgVHggZGVzY3JpcHRvciByaW5nCSovCiAJdWludAlmZWNfcl9idWZmX3NpemU7CS8qIFJ4IGJ1ZmZlciBzaXplCQkJKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCAyZTU2MTg3Li5mMThjNmQ5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC0yMDksOCArMjA5LDggQEAKIAkJcmV0dXJuIEJJVFNfUEVSX0xPTkc7CiAKIAkvKgotCSAqIENhbGN1bGF0ZSB0aGUgYml0IHBvc2l0aW9uIG9mIHRoZSBsZWFzdCBzaWduZmljYW50ICcxJyBiaXQgaW4geAotCSAqIChzaW5jZSB4IGhhcyBiZWVuIGNoYW5nZWQgdGhpcyB3aWxsIGFjdHVhbGx5IGJlIHRoZSBsZWFzdCBzaWduZmljYW50CisJICogQ2FsY3VsYXRlIHRoZSBiaXQgcG9zaXRpb24gb2YgdGhlIGxlYXN0IHNpZ25pZmljYW50ICcxJyBiaXQgaW4geAorCSAqIChzaW5jZSB4IGhhcyBiZWVuIGNoYW5nZWQgdGhpcyB3aWxsIGFjdHVhbGx5IGJlIHRoZSBsZWFzdCBzaWduaWZpY2FudAogCSAqICcwJyBiaXQgaW4gKiB0aGUgb3JpZ2luYWwgeCkuICBOb3RlOiAoeCAmIC14KSBnaXZlcyB1cyBhIG1hc2sgdGhhdAogCSAqIGlzIHRoZSBsZWFzdCBzaWduaWZpY2FudCAqIChSSUdIVC1tb3N0KSAxLWJpdCBvZiB0aGUgdmFsdWUgaW4geC4KIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jb21wYXQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jb21wYXQuaAppbmRleCAyMjk2MTEyLi45MTAxMGU4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY29tcGF0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NvbXBhdC5oCkBAIC0xNDAsNyArMTQwLDcgQEAKIAl1bnNpZ25lZCBsb25nIHVzcCA9IHJlZ3MtPmdwclsxXTsKIAogCS8qCi0JICogV2UgY2FudCBhY2Nlc3MgYmVsb3cgdGhlIHN0YWNrIHBvaW50ZXIgaW4gdGhlIDMyYml0IEFCSSBhbmQKKwkgKiBXZSBjYW4ndCBhY2Nlc3MgYmVsb3cgdGhlIHN0YWNrIHBvaW50ZXIgaW4gdGhlIDMyYml0IEFCSSBhbmQKIAkgKiBjYW4gYWNjZXNzIDI4OCBieXRlcyBpbiB0aGUgNjRiaXQgQUJJCiAJICovCiAJaWYgKCFpc18zMmJpdF90YXNrKCkpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3BtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3BtLmgKaW5kZXggZTUwMzIzZi4uNDM5OGE2YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwbS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcG0uaApAQCAtOTgsNyArOTgsNyBAQAogI2RlZmluZSBCRF9TQ19JTlRSUFQJKDB4MTAwMCkJLyogSW50ZXJydXB0IG9uIGNoYW5nZSAqLwogI2RlZmluZSBCRF9TQ19MQVNUCSgweDA4MDApCS8qIExhc3QgYnVmZmVyIGluIGZyYW1lICovCiAjZGVmaW5lIEJEX1NDX1RDCSgweDA0MDApCS8qIFRyYW5zbWl0IENSQyAqLwotI2RlZmluZSBCRF9TQ19DTQkoMHgwMjAwKQkvKiBDb250aW5vdXMgbW9kZSAqLworI2RlZmluZSBCRF9TQ19DTQkoMHgwMjAwKQkvKiBDb250aW51b3VzIG1vZGUgKi8KICNkZWZpbmUgQkRfU0NfSUQJKDB4MDEwMCkJLyogUmVjJ2QgdG9vIG1hbnkgaWRsZXMgKi8KICNkZWZpbmUgQkRfU0NfUAkJKDB4MDEwMCkJLyogeG10IHByZWFtYmxlICovCiAjZGVmaW5lIEJEX1NDX0JSCSgweDAwMjApCS8qIEJyZWFrIHJlY2VpdmVkICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3BtMS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwbTEuaAppbmRleCBiZDA3NjUwZC4uOGVlNDIxMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwbTEuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3BtMS5oCkBAIC00LDcgKzQsNyBAQAogICoKICAqIFRoaXMgZmlsZSBjb250YWlucyBzdHJ1Y3R1cmVzIGFuZCBpbmZvcm1hdGlvbiBmb3IgdGhlIGNvbW11bmljYXRpb24KICAqIHByb2Nlc3NvciBjaGFubmVscy4gIFNvbWUgQ1BNIGNvbnRyb2wgYW5kIHN0YXR1cyBpcyBhdmFpbGFibGUKLSAqIHRocm91Z2h0IHRoZSBNUEM4eHggaW50ZXJuYWwgbWVtb3J5IG1hcC4gIFNlZSBpbW1hcC5oIGZvciBkZXRhaWxzLgorICogdGhyb3VnaCB0aGUgTVBDOHh4IGludGVybmFsIG1lbW9yeSBtYXAuICBTZWUgaW1tYXAuaCBmb3IgZGV0YWlscy4KICAqIFRoaXMgZmlsZSBvbmx5IGNvbnRhaW5zIHdoYXQgSSBuZWVkIGZvciB0aGUgbW9tZW50LCBub3QgdGhlIHRvdGFsCiAgKiBDUE0gY2FwYWJpbGl0aWVzLiAgSSAob3Igc29tZW9uZSBlbHNlKSB3aWxsIGFkZCBkZWZpbml0aW9ucyBhcyB0aGV5CiAgKiBhcmUgbmVlZGVkLiAgLS0gRGFuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCmluZGV4IGJlM2NkZjkuLjE4MzNkMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCkBAIC0zODIsMTAgKzM4MiwxMiBAQAogI2RlZmluZSBDUFVfRlRSU19FNTAwXzIJKENQVV9GVFJfTUFZQkVfQ0FOX0RPWkUgfCBDUFVfRlRSX1VTRV9UQiB8IFwKIAkgICAgQ1BVX0ZUUl9TUEVfQ09NUCB8IENQVV9GVFJfTUFZQkVfQ0FOX05BUCB8IFwKIAkgICAgQ1BVX0ZUUl9OT0RTSVNSQUxJR04gfCBDUFVfRlRSX05PRVhFQ1VURSkKLSNkZWZpbmUgQ1BVX0ZUUlNfRTUwME1DCShDUFVfRlRSX01BWUJFX0NBTl9ET1pFIHwgQ1BVX0ZUUl9VU0VfVEIgfCBcCi0JICAgIENQVV9GVFJfTUFZQkVfQ0FOX05BUCB8IENQVV9GVFJfTk9EU0lTUkFMSUdOIHwgXAorI2RlZmluZSBDUFVfRlRSU19FNTAwTUMJKENQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9OT0RTSVNSQUxJR04gfCBcCiAJICAgIENQVV9GVFJfTDJDU1IgfCBDUFVfRlRSX0xXU1lOQyB8IENQVV9GVFJfTk9FWEVDVVRFIHwgXAogCSAgICBDUFVfRlRSX0RCRUxMKQorI2RlZmluZSBDUFVfRlRSU19FNTUwMAkoQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX05PRFNJU1JBTElHTiB8IFwKKwkgICAgQ1BVX0ZUUl9MMkNTUiB8IENQVV9GVFJfTFdTWU5DIHwgQ1BVX0ZUUl9OT0VYRUNVVEUgfCBcCisJICAgIENQVV9GVFJfREJFTEwgfCBDUFVfRlRSX1BPUENOVEIgfCBDUFVfRlRSX1BPUENOVEQpCiAjZGVmaW5lIENQVV9GVFJTX0dFTkVSSUNfMzIJKENQVV9GVFJfQ09NTU9OIHwgQ1BVX0ZUUl9OT0RTSVNSQUxJR04pCiAKIC8qIDY0LWJpdCBDUFVzICovCkBAIC00MzUsMTEgKzQzNywxNSBAQAogI2RlZmluZSBDUFVfRlRSU19DT01QQVRJQkxFCShDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfUFBDQVNfQVJDSF9WMikKIAogI2lmZGVmIF9fcG93ZXJwYzY0X18KKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQorI2RlZmluZSBDUFVfRlRSU19QT1NTSUJMRQkoQ1BVX0ZUUlNfRTU1MDApCisjZWxzZQogI2RlZmluZSBDUFVfRlRSU19QT1NTSUJMRQlcCiAJICAgIChDUFVfRlRSU19QT1dFUjMgfCBDUFVfRlRSU19SUzY0IHwgQ1BVX0ZUUlNfUE9XRVI0IHwJXAogCSAgICBDUFVfRlRSU19QUEM5NzAgfCBDUFVfRlRSU19QT1dFUjUgfCBDUFVfRlRSU19QT1dFUjYgfAlcCiAJICAgIENQVV9GVFJTX1BPV0VSNyB8IENQVV9GVFJTX0NFTEwgfCBDUFVfRlRSU19QQTZUIHwJCVwKIAkgICAgQ1BVX0ZUUl8xVF9TRUdNRU5UIHwgQ1BVX0ZUUl9WU1gpCisjZW5kaWYKICNlbHNlCiBlbnVtIHsKIAlDUFVfRlRSU19QT1NTSUJMRSA9CkBAIC00NzMsMTYgKzQ3OSwyMSBAQAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0U1MDAKIAkgICAgQ1BVX0ZUUlNfRTUwMCB8IENQVV9GVFJTX0U1MDBfMiB8IENQVV9GVFJTX0U1MDBNQyB8CisJICAgIENQVV9GVFJTX0U1NTAwIHwKICNlbmRpZgogCSAgICAwLAogfTsKICNlbmRpZiAvKiBfX3Bvd2VycGM2NF9fICovCiAKICNpZmRlZiBfX3Bvd2VycGM2NF9fCisjaWZkZWYgQ09ORklHX1BQQ19CT09LM0UKKyNkZWZpbmUgQ1BVX0ZUUlNfQUxXQVlTCQkoQ1BVX0ZUUlNfRTU1MDApCisjZWxzZQogI2RlZmluZSBDUFVfRlRSU19BTFdBWVMJCVwKIAkgICAgKENQVV9GVFJTX1BPV0VSMyAmIENQVV9GVFJTX1JTNjQgJiBDUFVfRlRSU19QT1dFUjQgJglcCiAJICAgIENQVV9GVFJTX1BQQzk3MCAmIENQVV9GVFJTX1BPV0VSNSAmIENQVV9GVFJTX1BPV0VSNiAmCVwKIAkgICAgQ1BVX0ZUUlNfUE9XRVI3ICYgQ1BVX0ZUUlNfQ0VMTCAmIENQVV9GVFJTX1BBNlQgJiBDUFVfRlRSU19QT1NTSUJMRSkKKyNlbmRpZgogI2Vsc2UKIGVudW0gewogCUNQVV9GVFJTX0FMV0FZUyA9CkBAIC01MTMsNiArNTI0LDcgQEAKICNlbmRpZgogI2lmZGVmIENPTkZJR19FNTAwCiAJICAgIENQVV9GVFJTX0U1MDAgJiBDUFVfRlRSU19FNTAwXzIgJiBDUFVfRlRSU19FNTAwTUMgJgorCSAgICBDUFVfRlRSU19FNTUwMCAmCiAjZW5kaWYKIAkgICAgQ1BVX0ZUUlNfUE9TU0lCTEUsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h2Y2FsbC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h2Y2FsbC5oCmluZGV4IGVjMDg5YWMuLjhlZGVjNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odmNhbGwuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHZjYWxsLmgKQEAgLTEyMiw3ICsxMjIsNyBAQAogI2RlZmluZSBIX0RBQlJYX0tFUk5FTAkJKDFVTDw8KDYzLTYyKSkKICNkZWZpbmUgSF9EQUJSWF9VU0VSCQkoMVVMPDwoNjMtNjMpKQogCi0vKiBFYWNoIGNvbnRyb2wgYmxvY2sgaGFzIHRvIGJlIG9uIGEgNEsgYm9uZGFyeSAqLworLyogRWFjaCBjb250cm9sIGJsb2NrIGhhcyB0byBiZSBvbiBhIDRLIGJvdW5kYXJ5ICovCiAjZGVmaW5lIEhfQ0JfQUxJR05NRU5UICAgICAgICAgIDQwOTYKIAogLyogcFNlcmllcyBoeXBlcnZpc29yIG9wY29kZXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rcHJvYmVzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3Byb2Jlcy5oCmluZGV4IGQwZTc3MDEuLmJlMDE3MWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rcHJvYmVzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2twcm9iZXMuaApAQCAtNTAsNyArNTAsNyBAQAogICogSGFuZGxlIGNhc2VzIHdoZXJlOgogICogCQktIFVzZXIgcGFzc2VzIGEgPC5zeW1ib2w+IG9yIDxtb2R1bGU6LnN5bWJvbD4KICAqIAkJLSBVc2VyIHBhc3NlcyBhIDxzeW1ib2w+IG9yIDxtb2R1bGU6c3ltYm9sPgotICogCQktIFVzZXIgcGFzc2VzIGEgbm9uLWV4aXN0YW50IHN5bWJvbCwga2FsbHN5bXNfbG9va3VwX25hbWUKKyAqIAkJLSBVc2VyIHBhc3NlcyBhIG5vbi1leGlzdGVudCBzeW1ib2wsIGthbGxzeW1zX2xvb2t1cF9uYW1lCiAgKiAJCSAgcmV0dXJucyAwLiBEb24ndCBkZXJlZiB0aGUgTlVMTCBwb2ludGVyIGluIHRoYXQgY2FzZQogICovCiAjZGVmaW5lIGtwcm9iZV9sb29rdXBfbmFtZShuYW1lLCBhZGRyKQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2xwcGFjYS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2xwcGFjYS5oCmluZGV4IDI2YjhjODAuLmEwNzdhZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9scHBhY2EuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbHBwYWNhLmgKQEAgLTEwNSw3ICsxMDUsNyBAQAogCS8vIHByb2Nlc3Npbmcgb2YgZXh0ZXJuYWwgaW50ZXJydXB0cy4gIE5vdGUgdGhhdCBQTElDIHdpbGwgc3RvcmUgdGhlCiAJLy8gWElSUiBkaXJlY3RseSBpbnRvIHRoZSB4WGlyclZhbHVlIGZpZWxkIHNvIHRoYXQgYW5vdGhlciBYSVJSIHdpbGwKIAkvLyBub3QgYmUgcHJlc2VudGVkIHVudGlsIHRoaXMgb25lIGNsZWFycy4gIFRoZSBsYXlvdXQgb2YgdGhlIGxvdwotCS8vIDQtYnl0ZXMgb2YgdGhpcyBEd29yZCBpcyB1cHRvIFNMSUMgLSBQTElDIGp1c3QgY2hlY2tzIHdoZXRoZXIgdGhlCisJLy8gNC1ieXRlcyBvZiB0aGlzIER3b3JkIGlzIHVwIHRvIFNMSUMgLSBQTElDIGp1c3QgY2hlY2tzIHdoZXRoZXIgdGhlCiAJLy8gZW50aXJlIER3b3JkIGlzIHplcm8gb3Igbm90LiAgQSBub24temVybyB2YWx1ZSBpbiB0aGUgbG93IG9yZGVyCiAJLy8gMi1ieXRlcyB3aWxsIHJlc3VsdCBpbiBTTElDIGJlaW5nIGdyYW50ZWQgdGhlIGhpZ2hlc3QgdGhyZWFkCiAJLy8gcHJpb3JpdHkgdXBvbiByZXR1cm4uICBBIDAgd2lsbCByZXR1cm4gdG8gU0xJQyBhcyBtZWRpdW0gcHJpb3JpdHkuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZV82NC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2VfNjQuaAppbmRleCA5MzJmODhkLi44MTJiMmNkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZV82NC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlXzY0LmgKQEAgLTE2OSw3ICsxNjksNyBAQAogLyoKICAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgaWYgYSBwcm9ncmFtIGRvZXNuJ3QgaGF2ZSBhIFBUX0dOVV9TVEFDSwogICogcHJvZ3JhbSBoZWFkZXIgZW50cnkuIFRoZSBQUEM2NCBFTEYgQUJJIGhhcyBhIG5vbiBleGVjdXRhYmxlIHN0YWNrCi0gKiBzdGFjayBieSBkZWZhdWx0LCBzbyBpbiB0aGUgYWJzZW5zZSBvZiBhIFBUX0dOVV9TVEFDSyBwcm9ncmFtIGhlYWRlcgorICogc3RhY2sgYnkgZGVmYXVsdCwgc28gaW4gdGhlIGFic2VuY2Ugb2YgYSBQVF9HTlVfU1RBQ0sgcHJvZ3JhbSBoZWFkZXIKICAqIHdlIHR1cm4gZXhlY3V0ZSBwZXJtaXNzaW9uIG9mZi4KICAqLwogI2RlZmluZSBWTV9TVEFDS19ERUZBVUxUX0ZMQUdTMzIJKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMgfCBcCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFzZW1pX2RtYS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Bhc2VtaV9kbWEuaAppbmRleCAxOWZkNzkzLi5lYWZhNWE1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFzZW1pX2RtYS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYXNlbWlfZG1hLmgKQEAgLTUyMiw3ICs1MjIsNyBAQAogZXh0ZXJuIHZvaWQgcGFzZW1pX2RtYV9mcmVlX2J1ZihzdHJ1Y3QgcGFzZW1pX2RtYWNoYW4gKmNoYW4sIGludCBzaXplLAogCQkJCWRtYV9hZGRyX3QgKmhhbmRsZSk7CiAKLS8qIFJvdXRpbmVzIHRvIGFsbG9jYXRlIGZsYWdzIChldmVudHMpIGZvciBjaGFubmVsIHN5bmNyb25pemF0aW9uICovCisvKiBSb3V0aW5lcyB0byBhbGxvY2F0ZSBmbGFncyAoZXZlbnRzKSBmb3IgY2hhbm5lbCBzeW5jaHJvbml6YXRpb24gKi8KIGV4dGVybiBpbnQgIHBhc2VtaV9kbWFfYWxsb2NfZmxhZyh2b2lkKTsKIGV4dGVybiB2b2lkIHBhc2VtaV9kbWFfZnJlZV9mbGFnKGludCBmbGFnKTsKIGV4dGVybiB2b2lkIHBhc2VtaV9kbWFfc2V0X2ZsYWcoaW50IGZsYWcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS1icmlkZ2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wY2ktYnJpZGdlLmgKaW5kZXggNWUxNTZlMC4uYjkwZGJmOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS1icmlkZ2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLWJyaWRnZS5oCkBAIC0xMDYsNyArMTA2LDcgQEAKIAkgKiBVc2VkIGZvciB2YXJpYW50cyBvZiBQQ0kgaW5kaXJlY3QgaGFuZGxpbmcgYW5kIHBvc3NpYmxlIHF1aXJrczoKIAkgKiAgU0VUX0NGR19UWVBFIC0gdXNlZCBvbiA0eHggb3IgYW55IFBIQiB0aGF0IGRvZXMgZXhwbGljaXQgdHlwZTAvMQogCSAqICBFWFRfUkVHIC0gcHJvdmlkZXMgYWNjZXNzIHRvIFBDSS1lIGV4dGVuZGVkIHJlZ2lzdGVycwotCSAqICBTVVJQUkVTU19QUklNQVJZX0JVUyAtIHdlIHN1cnByZXNzIHRoZSBzZXR0aW5nIG9mIFBDSV9QUklNQVJZX0JVUworCSAqICBTVVJQUkVTU19QUklNQVJZX0JVUyAtIHdlIHN1cHByZXNzIHRoZSBzZXR0aW5nIG9mIFBDSV9QUklNQVJZX0JVUwogCSAqICAgb24gRnJlZXNjYWxlIFBDSS1lIGNvbnRyb2xsZXJzIHNpbmNlIHRoZXkgdXNlZCB0aGUgUENJX1BSSU1BUllfQlVTCiAJICogICB0byBkZXRlcm1pbmUgd2hpY2ggYnVzIG51bWJlciB0byBtYXRjaCBvbiB3aGVuIGdlbmVyYXRpbmcgdHlwZTAKIAkgKiAgIGNvbmZpZyBjeWNsZXMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wbWFjX2ZlYXR1cmUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wbWFjX2ZlYXR1cmUuaAppbmRleCAwMGVlZGM1Li4xMDkwMmM5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcG1hY19mZWF0dXJlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BtYWNfZmVhdHVyZS5oCkBAIC01Myw4ICs1Myw4IEBACiAKIC8qIEhlcmUgaXMgdGhlIGluZmFtb3VzIHNlcmllIG9mIE9IYXJlIGJhc2VkIG1hY2hpbmVzCiAgKi8KLSNkZWZpbmUgUE1BQ19UWVBFX0NPTUVUCQkJMHgyMAkvKiBCZWxlaXZlZCB0byBiZSBQb3dlckJvb2sgMjQwMCAqLwotI2RlZmluZSBQTUFDX1RZUEVfSE9PUEVSCQkweDIxCS8qIEJlbGVpdmVkIHRvIGJlIFBvd2VyQm9vayAzNDAwICovCisjZGVmaW5lIFBNQUNfVFlQRV9DT01FVAkJCTB4MjAJLyogQmVsaWV2ZWQgdG8gYmUgUG93ZXJCb29rIDI0MDAgKi8KKyNkZWZpbmUgUE1BQ19UWVBFX0hPT1BFUgkJMHgyMQkvKiBCZWxpZXZlZCB0byBiZSBQb3dlckJvb2sgMzQwMCAqLwogI2RlZmluZSBQTUFDX1RZUEVfS0FOR0EJCQkweDIyCS8qIFBvd2VyQm9vayAzNTAwIChmaXJzdCBHMykgKi8KICNkZWZpbmUgUE1BQ19UWVBFX0FMQ0hFTVkJCTB4MjMJLyogQWxjaGVteSBtb3RoZXJib2FyZCBiYXNlICovCiAjZGVmaW5lIFBNQUNfVFlQRV9HQVpFTExFCQkweDI0CS8qIFNwYXJ0YWN1cywgc29tZSA1eHh4LzZ4eHggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtY29tbW9uLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWNvbW1vbi5oCmluZGV4IDc2YmIxOTUuLjhkMTU2OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtY29tbW9uLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1jb21tb24uaApAQCAtODYsNyArODYsNyBAQAogI2RlZmluZSBQVEVfUlBOX01BU0sJKH4oKDFVTDw8UFRFX1JQTl9TSElGVCktMSkpCiAjZW5kaWYKIAotLyogX1BBR0VfQ0hHX01BU0sgbWFza3Mgb2YgYml0cyB0aGF0IGFyZSB0byBiZSBwcmVzZXJ2ZWQgYWNjcm9zcworLyogX1BBR0VfQ0hHX01BU0sgbWFza3Mgb2YgYml0cyB0aGF0IGFyZSB0byBiZSBwcmVzZXJ2ZWQgYWNyb3NzCiAgKiBwZ3Byb3QgY2hhbmdlcwogICovCiAjZGVmaW5lIF9QQUdFX0NIR19NQVNLCShQVEVfUlBOX01BU0sgfCBfUEFHRV9IUFRFRkxBR1MgfCBfUEFHRV9ESVJUWSB8IFwKQEAgLTE2Miw3ICsxNjIsNyBAQAogICogb24gcGxhdGZvcm1zIHdoZXJlIHN1Y2ggY29udHJvbCBpcyBwb3NzaWJsZS4KICAqLwogI2lmIGRlZmluZWQoQ09ORklHX0tHREIpIHx8IGRlZmluZWQoQ09ORklHX1hNT04pIHx8IGRlZmluZWQoQ09ORklHX0JESV9TV0lUQ0gpIHx8XAotCWRlZmluZWQoQ09ORklHX0tQUk9CRVMpCisJZGVmaW5lZChDT05GSUdfS1BST0JFUykgfHwgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpCiAjZGVmaW5lIFBBR0VfS0VSTkVMX1RFWFQJUEFHRV9LRVJORUxfWAogI2Vsc2UKICNkZWZpbmUgUEFHRV9LRVJORUxfVEVYVAlQQUdFX0tFUk5FTF9ST1gKQEAgLTE3NCw3ICsxNzQsNyBAQAogLyoKICAqIERvbid0IGp1c3QgY2hlY2sgZm9yIGFueSBub24gemVybyBiaXRzIGluIF9fUEFHRV9VU0VSLCBzaW5jZSBmb3IgYm9vazNlCiAgKiBhbmQgUFRFXzY0QklULCBQQUdFX0tFUk5FTF9YIGNvbnRhaW5zIF9QQUdFX0JBUF9TUiB3aGljaCBpcyBhbHNvIGluCi0gKiBfUEFHRV9VU0VSLiAgTmVlZCB0byBleHBsaWN0bHkgbWF0Y2ggX1BBR0VfQkFQX1VSIGJpdCBpbiB0aGF0IGNhc2UgdG9vLgorICogX1BBR0VfVVNFUi4gIE5lZWQgdG8gZXhwbGljaXRseSBtYXRjaCBfUEFHRV9CQVBfVVIgYml0IGluIHRoYXQgY2FzZSB0b28uCiAgKi8KICNkZWZpbmUgcHRlX3VzZXIodmFsKQkJKCh2YWwgJiBfUEFHRV9VU0VSKSA9PSBfUEFHRV9VU0VSKQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmgKaW5kZXggM2IxYTliNy4uYjMxNjc5NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaApAQCAtMiw3ICsyLDcgQEAKICAqIENvbnRhaW5zIHJlZ2lzdGVyIGRlZmluaXRpb25zIGNvbW1vbiB0byB0aGUgQm9vayBFIFBvd2VyUEMKICAqIHNwZWNpZmljYXRpb24uICBOb3RpY2UgdGhhdCB3aGlsZSB0aGUgSUJNLTQweCBzZXJpZXMgb2YgQ1BVcwogICogYXJlIG5vdCB0cnVlIEJvb2sgRSBQb3dlclBDcywgdGhleSBib3Jyb3dlZCBhIG51bWJlciBvZiBmZWF0dXJlcwotICogYmVmb3JlIEJvb2sgRSB3YXMgZmluYWxpemVkLCBhbmQgYXJlIGluY2x1ZGVkIGhlcmUgYXMgd2VsbC4gIFVuZm9ydHVuYXRseSwKKyAqIGJlZm9yZSBCb29rIEUgd2FzIGZpbmFsaXplZCwgYW5kIGFyZSBpbmNsdWRlZCBoZXJlIGFzIHdlbGwuICBVbmZvcnR1bmF0ZWx5LAogICogdGhleSBzb21ldGltZXMgdXNlZCBkaWZmZXJlbnQgbG9jYXRpb25zIHRoYW4gdHJ1ZSBCb29rIEUgQ1BVcyBkaWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdV9wcml2MS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdV9wcml2MS5oCmluZGV4IDI1MDIwYTMuLmQ4ZjVjNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHVfcHJpdjEuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1X3ByaXYxLmgKQEAgLTIyMyw3ICsyMjMsNyBAQAogfQogCiAvKgotICogVGhlIGRlY2xhcmF0aW9ucyBmb2xvd2luZyBhcmUgcHV0IGhlcmUgZm9yIGNvbnZlbmllbmNlCisgKiBUaGUgZGVjbGFyYXRpb25zIGZvbGxvd2luZyBhcmUgcHV0IGhlcmUgZm9yIGNvbnZlbmllbmNlCiAgKiBhbmQgb25seSBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IHRoZSBwbGF0Zm9ybSBzZXR1cCBjb2RlLgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS91bmlub3J0aC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VuaW5vcnRoLmgKaW5kZXggZjczNzczMi4uZDEyYjExZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VuaW5vcnRoLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VuaW5vcnRoLmgKQEAgLTYwLDcgKzYwLDcgQEAKICAqCiAgKiBPYnZpb3VzbHksIHRoZSBHQVJUIGlzIG5vdCBjYWNoZSBjb2hlcmVudCBhbmQgc28gYW55IGNoYW5nZSB0byBpdAogICogbXVzdCBiZSBmbHVzaGVkIHRvIG1lbW9yeSAob3IgbWF5YmUganVzdCBtYWtlIHRoZSBHQVJUIHNwYWNlIG5vbgotICogY2FjaGFibGUpLiBBR1AgbWVtb3J5IGl0c2VsZiBkb2Vucyd0IHNlZW0gdG8gYmUgY2FjaGUgY29oZXJlbnQgbmVpdGhlci4KKyAqIGNhY2hhYmxlKS4gQUdQIG1lbW9yeSBpdHNlbGYgZG9lc24ndCBzZWVtIHRvIGJlIGNhY2hlIGNvaGVyZW50IG5laXRoZXIuCiAgKgogICogSW4gb3JkZXIgdG8gaW52YWxpZGF0ZSB0aGUgR0FSVCAod2hpY2ggaXMgcHJvYmFibHkgbmVjZXNzYXJ5IHRvIGludmFsCiAgKiB0aGUgYnJpZGdlIGludGVybmFsIFRMQnMpLCB0aGUgZm9sbG93aW5nIHNlcXVlbmNlIGhhcyB0byBiZSB3cml0dGVuLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Zkc29fZGF0YXBhZ2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS92ZHNvX2RhdGFwYWdlLmgKaW5kZXggMjVlMzkyMi4uYjczYTgxOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Zkc29fZGF0YXBhZ2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdmRzb19kYXRhcGFnZS5oCkBAIC01Nyw3ICs1Nyw3IEBACiAJfSB2ZXJzaW9uOwogCiAJLyogTm90ZSBhYm91dCB0aGUgcGxhdGZvcm0gZmxhZ3M6IGl0IG5vdyBvbmx5IGNvbnRhaW5zIHRoZSBscGFyCi0JICogYml0LiBUaGUgYWN0dWFsIHBsYXRmb3JtIG51bWJlciBpcyBkZWFkIGFuZCBidXJyaWVkCisJICogYml0LiBUaGUgYWN0dWFsIHBsYXRmb3JtIG51bWJlciBpcyBkZWFkIGFuZCBidXJpZWQKIAkgKi8KIAlfX3UzMiBwbGF0Zm9ybTsJCQkvKiBQbGF0Zm9ybSBmbGFncwkJMHgxOCAqLwogCV9fdTMyIHByb2Nlc3NvcjsJCS8qIFByb2Nlc3NvciB0eXBlCQkweDFDICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2J0ZXh0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2J0ZXh0LmMKaW5kZXggNjI1OTQyYS4uNjBiM2UzNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9idGV4dC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYnRleHQuYwpAQCAtOTksNyArOTksNyBAQAogCiAvKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSB0aGUgZWFybHkgYm9vdCB0ZXh0IHdoZW4gZG9pbmcKICAqIE9GIGJvb3Rpbmcgb3Igd2l0aGluIGJvb3R4IGluaXQuIEl0IG11c3QgYmUgZm9sbG93ZWQgYnkgYSBidGV4dF91bm1hcCgpCi0gKiBjYWxsIGJlZm9yZSB0aGUgbG9naWNhbCBhZGRyZXNzIGJlY29tZXMgdW51c2VhYmxlCisgKiBjYWxsIGJlZm9yZSB0aGUgbG9naWNhbCBhZGRyZXNzIGJlY29tZXMgdW51c2FibGUKICAqLwogdm9pZCBfX2luaXQgYnRleHRfc2V0dXBfZGlzcGxheShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBkZXB0aCwgaW50IHBpdGNoLAogCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwppbmRleCBjOWI2OGQwLi5iOTYwMmVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCkBAIC0xOTczLDcgKzE5NzMsNyBAQAogCQkucHZyX21hc2sJCT0gMHhmZmZmMDAwMCwKIAkJLnB2cl92YWx1ZQkJPSAweDgwMjQwMDAwLAogCQkuY3B1X25hbWUJCT0gImU1NTAwIiwKLQkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19FNTAwTUMsCisJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfRTU1MDAsCiAJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX0JPT0tFLAogCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVFlQRV9GU0xfRSB8IE1NVV9GVFJfQklHX1BIWVMgfAogCQkJTU1VX0ZUUl9VU0VfVExCSUxYLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaC5jCmluZGV4IDNkM2Q0MTYuLjViNWUxZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2guYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoLmMKQEAgLTE2Myw3ICsxNjMsNyBAQAogfQogCiAvKiB3YWl0IGZvciBhbGwgdGhlIENQVXMgdG8gaGl0IHJlYWwgbW9kZSBidXQgdGltZW91dCBpZiB0aGV5IGRvbid0IGNvbWUgaW4gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QUENfU1REX01NVV82NCkgJiYgZGVmaW5lZChDT05GSUdfU01QKQorI2lmZGVmIENPTkZJR19QUENfU1REX01NVV82NAogc3RhdGljIHZvaWQgY3Jhc2hfa2V4ZWNfd2FpdF9yZWFsbW9kZShpbnQgY3B1KQogewogCXVuc2lnbmVkIGludCBtc2VjczsKQEAgLTE4OCw5ICsxODgsNyBAQAogCX0KIAltYigpOwogfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBjcmFzaF9rZXhlY193YWl0X3JlYWxtb2RlKGludCBjcHUpIHt9Ci0jZW5kaWYKKyNlbmRpZgkvKiBDT05GSUdfUFBDX1NURF9NTVVfNjQgKi8KIAogLyoKICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgc2Vjb25kYXJ5IGNwdXMgb3IgYnkga2V4ZWMgY3B1CkBAIC0yMzUsNyArMjMzLDkgQEAKIAljcmFzaF9pcGlfY2FsbGJhY2socmVncyk7CiB9CiAKLSNlbHNlCisjZWxzZQkvKiAhIENPTkZJR19TTVAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjcmFzaF9rZXhlY193YWl0X3JlYWxtb2RlKGludCBjcHUpIHt9CisKIHN0YXRpYyB2b2lkIGNyYXNoX2tleGVjX3ByZXBhcmVfY3B1cyhpbnQgY3B1KQogewogCS8qCkBAIC0yNTUsNyArMjU1LDcgQEAKIHsKIAljcHVzX2luX3NyID0gQ1BVX01BU0tfTk9ORTsKIH0KLSNlbmRpZgorI2VuZGlmCS8qIENPTkZJR19TTVAgKi8KIAogLyoKICAqIFJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIHNodXRkb3duLiAgT25seSB1c2UgdGhpcyBpZiB5b3UKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NGUuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NGUuUwppbmRleCA1YzQzMDYzLi45NjUxYWNjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRlLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0ZS5TCkBAIC0zNzksNyArMzc5LDcgQEAKIAltZnNwcglyMTMsU1BSTl9TUFJHX1BBQ0EJLyogZ2V0IG91ciBQQUNBICovCiAJYglzeXN0ZW1fY2FsbF9jb21tb24KIAotLyogQXV4aWxsYXJ5IFByb2Nlc3NvciBVbmF2YWlsYWJsZSBJbnRlcnJ1cHQgKi8KKy8qIEF1eGlsaWFyeSBQcm9jZXNzb3IgVW5hdmFpbGFibGUgSW50ZXJydXB0ICovCiAJU1RBUlRfRVhDRVBUSU9OKGFwX3VuYXZhaWxhYmxlKTsKIAlOT1JNQUxfRVhDRVBUSU9OX1BST0xPRygweGYyMCwgUFJPTE9HX0FERElUSU9OX05PTkUpCiAJRVhDRVBUSU9OX0NPTU1PTigweGYyMCwgUEFDQV9FWEdFTiwgSU5UU19LRUVQKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0cy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0cy5TCmluZGV4IGM1MzJjYjIuLmFlYjczOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRzLlMKQEAgLTUsNyArNSw3IEBACiAgKiBoYW5kbGluZyBhbmQgb3RoZXIgZml4ZWQgb2Zmc2V0IHNwZWNpZmljIHRoaW5ncy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgbWVhbnQgdG8gYmUgI2luY2x1ZGVkIGZyb20gaGVhZF82NC5TIGR1ZSB0bwotICogcG9zaXRpb24gZGVwZW5kYW50IGFzc2VtYmx5LgorICogcG9zaXRpb24gZGVwZW5kZW50IGFzc2VtYmx5LgogICoKICAqIE1vc3Qgb2YgdGhpcyBvcmlnaW5hdGVzIGZyb20gaGVhZF82NC5TIGFuZCB0aHVzIGhhcyB0aGUgc2FtZQogICogY29weXJpZ2h0IGhpc3RvcnkuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNDB4LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNDB4LlMKaW5kZXggOWRkMjFhOC4uYTkxNjI2ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzQweC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF80MHguUwpAQCAtNzY2LDcgKzc2Niw3IEBACiAJICogbWlzcyBnZXQgdG8gdGhpcyBwb2ludCB0byBsb2FkIHRoZSBUTEIuCiAJICogCXIxMCAtIFRMQl9UQUcgdmFsdWUKIAkgKiAJcjExIC0gTGludXggUFRFCi0JICoJcjEyLCByOSAtIGF2aWxhYmxlIHRvIHVzZQorCSAqCXIxMiwgcjkgLSBhdmFpbGFibGUgdG8gdXNlCiAJICoJUElEIC0gbG9hZGVkIHdpdGggcHJvcGVyIHZhbHVlIHdoZW4gd2UgZ2V0IGhlcmUKIAkgKglVcG9uIGV4aXQsIHdlIHJlbG9hZCBldmVyeXRoaW5nIGFuZCBSRkkuCiAJICogQWN0dWFsbHksIGl0IHdpbGwgZml0IG5vdywgYnV0IG9oIHdlbGwuLi4uLmEgY29tbW9uIHBsYWNlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNDR4LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNDR4LlMKaW5kZXggY2JiMzQzNi4uNWUxMmI3NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzQ0eC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF80NHguUwpAQCAtMTc4LDcgKzE3OCw3IEBACiAJTk9STUFMX0VYQ0VQVElPTl9QUk9MT0cKIAlFWENfWEZFUl9FRV9MSVRFKDB4MGMwMCwgRG9TeXNjYWxsKQogCi0JLyogQXV4aWxsYXJ5IFByb2Nlc3NvciBVbmF2YWlsYWJsZSBJbnRlcnJ1cHQgKi8KKwkvKiBBdXhpbGlhcnkgUHJvY2Vzc29yIFVuYXZhaWxhYmxlIEludGVycnVwdCAqLwogCUVYQ0VQVElPTigweDIwMjAsIEF1eGlsbGFyeVByb2Nlc3NvclVuYXZhaWxhYmxlLCB1bmtub3duX2V4Y2VwdGlvbiwgRVhDX1hGRVJfRUUpCiAKIAkvKiBEZWNyZW1lbnRlciBJbnRlcnJ1cHQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggMjcxMTQwYi4uM2EzMTlmOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlIDxhc20va3ZtX2Jvb2szc19hc20uaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAKLS8qIFRoZSBwaHlzaWNhbCBtZW1vcnkgaXMgbGF5ZWQgb3V0IHN1Y2ggdGhhdCB0aGUgc2Vjb25kYXJ5IHByb2Nlc3NvcgorLyogVGhlIHBoeXNpY2FsIG1lbW9yeSBpcyBsYWlkIG91dCBzdWNoIHRoYXQgdGhlIHNlY29uZGFyeSBwcm9jZXNzb3IKICAqIHNwaW4gY29kZSBzaXRzIGF0IDB4MDAwMC4uLjB4MDBmZi4gT24gc2VydmVyLCB0aGUgdmVjdG9ycyBmb2xsb3cKICAqIHVzaW5nIHRoZSBsYXlvdXQgZGVzY3JpYmVkIGluIGV4Y2VwdGlvbnMtNjRzLlMKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TCmluZGV4IDNlMDI3MTAuLjVlY2Y1NGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKQEAgLTMyNiw3ICszMjYsNyBAQAogCU5PUk1BTF9FWENFUFRJT05fUFJPTE9HCiAJRVhDX1hGRVJfRUVfTElURSgweDBjMDAsIERvU3lzY2FsbCkKIAotCS8qIEF1eGlsbGFyeSBQcm9jZXNzb3IgVW5hdmFpbGFibGUgSW50ZXJydXB0ICovCisJLyogQXV4aWxpYXJ5IFByb2Nlc3NvciBVbmF2YWlsYWJsZSBJbnRlcnJ1cHQgKi8KIAlFWENFUFRJT04oMHgyOTAwLCBBdXhpbGxhcnlQcm9jZXNzb3JVbmF2YWlsYWJsZSwgdW5rbm93bl9leGNlcHRpb24sIEVYQ19YRkVSX0VFKQogCiAJLyogRGVjcmVtZW50ZXIgSW50ZXJydXB0ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2libWVidXMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWJtZWJ1cy5jCmluZGV4IGMwMGQ0Y2EuLjI4NTgxZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWJtZWJ1cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWJtZWJ1cy5jCkBAIC01MjcsNyArNTI3LDcgQEAKIAogI2VuZGlmIC8qICFDT05GSUdfU1VTUEVORCAqLwogCi0jaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OCisjaWZkZWYgQ09ORklHX0hJQkVSTkFURV9DQUxMQkFDS1MKIAogc3RhdGljIGludCBpYm1lYnVzX2J1c19wbV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtNjY1LDcgKzY2NSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2Vsc2UgLyogIUNPTkZJR19ISUJFUk5BVElPTiAqLworI2Vsc2UgLyogIUNPTkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTICovCiAKICNkZWZpbmUgaWJtZWJ1c19idXNfcG1fZnJlZXplCQlOVUxMCiAjZGVmaW5lIGlibWVidXNfYnVzX3BtX3RoYXcJCU5VTEwKQEAgLTY3Niw3ICs2NzYsNyBAQAogI2RlZmluZSBpYm1lYnVzX2J1c19wbV9wb3dlcm9mZl9ub2lycQlOVUxMCiAjZGVmaW5lIGlibWVidXNfYnVzX3BtX3Jlc3RvcmVfbm9pcnEJTlVMTAogCi0jZW5kaWYgLyogIUNPTkZJR19ISUJFUk5BVElPTiAqLworI2VuZGlmIC8qICFDT05GSUdfSElCRVJOQVRFX0NBTExCQUNLUyAqLwogCiBzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgaWJtZWJ1c19idXNfZGV2X3BtX29wcyA9IHsKIAkucHJlcGFyZSA9IGlibWVidXNfYnVzX3BtX3ByZXBhcmUsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2wyY3JfNnh4LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2wyY3JfNnh4LlMKaW5kZXggMmEyZjNjMy4uOTdlYzg1NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9sMmNyXzZ4eC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbDJjcl82eHguUwpAQCAtMTUxLDcgKzE1MSw3IEBACiAJIC8qKioqIE1pZ2h0IGJlIGEgZ29vZCBpZGVhIHRvIHNldCBMMkRPIGhlcmUgLSB0byBwcmV2ZW50IGluc3RydWN0aW9ucwogCSAgICAgICBmcm9tIGdldHRpbmcgaW50byB0aGUgY2FjaGUuICBCdXQgc2luY2Ugd2UgaW52YWxpZGF0ZQogCSAgICAgICB0aGUgbmV4dCB0aW1lIHdlIGVuYWJsZSB0aGUgY2FjaGUgaXQgZG9lc24ndCByZWFsbHkgbWF0dGVyLgotCSAgICAgICBEb24ndCBkbyB0aGlzIHVubGVzcyB5b3UgYWNjb21vZGF0ZSBhbGwgcHJvY2Vzc29yIHZhcmlhdGlvbnMuCisJICAgICAgIERvbid0IGRvIHRoaXMgdW5sZXNzIHlvdSBhY2NvbW1vZGF0ZSBhbGwgcHJvY2Vzc29yIHZhcmlhdGlvbnMuCiAJICAgICAgIFRoZSBiaXQgbW92ZWQgb24gdGhlIDc0NTAuLi4uLgogCSAgKioqKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9sZWdhY3lfc2VyaWFsLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xlZ2FjeV9zZXJpYWwuYwppbmRleCBjODM0NzU3Li4yYjk3YjgwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2xlZ2FjeV9zZXJpYWwuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xlZ2FjeV9zZXJpYWwuYwpAQCAtMzMwLDkgKzMzMCwxMSBAQAogCQlpZiAoIXBhcmVudCkKIAkJCWNvbnRpbnVlOwogCQlpZiAob2ZfbWF0Y2hfbm9kZShsZWdhY3lfc2VyaWFsX3BhcmVudHMsIHBhcmVudCkgIT0gTlVMTCkgewotCQkJaW5kZXggPSBhZGRfbGVnYWN5X3NvY19wb3J0KG5wLCBucCk7Ci0JCQlpZiAoaW5kZXggPj0gMCAmJiBucCA9PSBzdGRvdXQpCi0JCQkJbGVnYWN5X3NlcmlhbF9jb25zb2xlID0gaW5kZXg7CisJCQlpZiAob2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpIHsKKwkJCQlpbmRleCA9IGFkZF9sZWdhY3lfc29jX3BvcnQobnAsIG5wKTsKKwkJCQlpZiAoaW5kZXggPj0gMCAmJiBucCA9PSBzdGRvdXQpCisJCQkJCWxlZ2FjeV9zZXJpYWxfY29uc29sZSA9IGluZGV4OworCQkJfQogCQl9CiAJCW9mX25vZGVfcHV0KHBhcmVudCk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYwppbmRleCAxNjQ2ODM2Li4zMDFkYjY1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYwpAQCAtMjYyLDcgKzI2Miw3IEBACiAJc2VxX3ByaW50ZihtLCAic3lzdGVtX2FjdGl2ZV9wcm9jZXNzb3JzPSVkXG4iLAogCSAgICAgICAgICAgcHBwX2RhdGEuYWN0aXZlX3N5c3RlbV9wcm9jcyk7CiAKLQkvKiBwb29sIHJlbGF0ZWQgZW50cmllcyBhcmUgYXByb3ByaWF0ZSBmb3Igc2hhcmVkIGNvbmZpZ3MgKi8KKwkvKiBwb29sIHJlbGF0ZWQgZW50cmllcyBhcmUgYXBwcm9wcmlhdGUgZm9yIHNoYXJlZCBjb25maWdzICovCiAJaWYgKGxwcGFjYV9vZigwKS5zaGFyZWRfcHJvYykgewogCQl1bnNpZ25lZCBsb25nIHBvb2xfaWRsZV90aW1lLCBwb29sX3Byb2NzOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IDk3ZTBhZTQuLjgyMmY2MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC0zOTgsNiArMzk4LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1NjQgY2hlY2tfYW5kX2NvbXB1dGVfZGVsdGEodTY0IHByZXYsIHU2NCB2YWwpCit7CisJdTY0IGRlbHRhID0gKHZhbCAtIHByZXYpICYgMHhmZmZmZmZmZnVsOworCisJLyoKKwkgKiBQT1dFUjcgY2FuIHJvbGwgYmFjayBjb3VudGVyIHZhbHVlcywgaWYgdGhlIG5ldyB2YWx1ZSBpcyBzbWFsbGVyCisJICogdGhhbiB0aGUgcHJldmlvdXMgdmFsdWUgaXQgd2lsbCBjYXVzZSB0aGUgZGVsdGEgYW5kIHRoZSBjb3VudGVyIHRvCisJICogaGF2ZSBib2d1cyB2YWx1ZXMgdW5sZXNzIHdlIHJvbGxlZCBhIGNvdW50ZXIgb3Zlci4gIElmIGEgY291dG5lciBpcworCSAqIHJvbGxlZCBiYWNrLCBpdCB3aWxsIGJlIHNtYWxsZXIsIGJ1dCB3aXRoaW4gMjU2LCB3aGljaCBpcyB0aGUgbWF4aW11bQorCSAqIG51bWJlciBvZiBldmVudHMgdG8gcm9sbGJhY2sgYXQgb25jZS4gIElmIHdlIGRlY3RlY3QgYSByb2xsYmFjaworCSAqIHJldHVybiAwLiAgVGhpcyBjYW4gbGVhZCB0byBhIHNtYWxsIGxhY2sgb2YgcHJlY2lzaW9uIGluIHRoZQorCSAqIGNvdW50ZXJzLgorCSAqLworCWlmIChwcmV2ID4gdmFsICYmIChwcmV2IC0gdmFsKSA8IDI1NikKKwkJZGVsdGEgPSAwOworCisJcmV0dXJuIGRlbHRhOworfQorCiBzdGF0aWMgdm9pZCBwb3dlcl9wbXVfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJczY0IHZhbCwgZGVsdGEsIHByZXY7CkBAIC00MTYsMTAgKzQzNSwxMSBAQAogCQlwcmV2ID0gbG9jYWw2NF9yZWFkKCZldmVudC0+aHcucHJldl9jb3VudCk7CiAJCWJhcnJpZXIoKTsKIAkJdmFsID0gcmVhZF9wbWMoZXZlbnQtPmh3LmlkeCk7CisJCWRlbHRhID0gY2hlY2tfYW5kX2NvbXB1dGVfZGVsdGEocHJldiwgdmFsKTsKKwkJaWYgKCFkZWx0YSkKKwkJCXJldHVybjsKIAl9IHdoaWxlIChsb2NhbDY0X2NtcHhjaGcoJmV2ZW50LT5ody5wcmV2X2NvdW50LCBwcmV2LCB2YWwpICE9IHByZXYpOwogCi0JLyogVGhlIGNvdW50ZXJzIGFyZSBvbmx5IDMyIGJpdHMgd2lkZSAqLwotCWRlbHRhID0gKHZhbCAtIHByZXYpICYgMHhmZmZmZmZmZnVsOwogCWxvY2FsNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsKIAlsb2NhbDY0X3N1YihkZWx0YSwgJmV2ZW50LT5ody5wZXJpb2RfbGVmdCk7CiB9CkBAIC00NDksOCArNDY5LDkgQEAKIAkJdmFsID0gKGV2ZW50LT5ody5pZHggPT0gNSkgPyBwbWM1IDogcG1jNjsKIAkJcHJldiA9IGxvY2FsNjRfcmVhZCgmZXZlbnQtPmh3LnByZXZfY291bnQpOwogCQlldmVudC0+aHcuaWR4ID0gMDsKLQkJZGVsdGEgPSAodmFsIC0gcHJldikgJiAweGZmZmZmZmZmdWw7Ci0JCWxvY2FsNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsKKwkJZGVsdGEgPSBjaGVja19hbmRfY29tcHV0ZV9kZWx0YShwcmV2LCB2YWwpOworCQlpZiAoZGVsdGEpCisJCQlsb2NhbDY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7CiAJfQogfQogCkBAIC00NTgsMTQgKzQ3OSwxNiBAQAogCQkJCSAgdW5zaWduZWQgbG9uZyBwbWM1LCB1bnNpZ25lZCBsb25nIHBtYzYpCiB7CiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwotCXU2NCB2YWw7CisJdTY0IHZhbCwgcHJldjsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBjcHVody0+bl9saW1pdGVkOyArK2kpIHsKIAkJZXZlbnQgPSBjcHVody0+bGltaXRlZF9jb3VudGVyW2ldOwogCQlldmVudC0+aHcuaWR4ID0gY3B1aHctPmxpbWl0ZWRfaHdpZHhbaV07CiAJCXZhbCA9IChldmVudC0+aHcuaWR4ID09IDUpID8gcG1jNSA6IHBtYzY7Ci0JCWxvY2FsNjRfc2V0KCZldmVudC0+aHcucHJldl9jb3VudCwgdmFsKTsKKwkJcHJldiA9IGxvY2FsNjRfcmVhZCgmZXZlbnQtPmh3LnByZXZfY291bnQpOworCQlpZiAoY2hlY2tfYW5kX2NvbXB1dGVfZGVsdGEocHJldiwgdmFsKSkKKwkJCWxvY2FsNjRfc2V0KCZldmVudC0+aHcucHJldl9jb3VudCwgdmFsKTsKIAkJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOwogCX0KIH0KQEAgLTc1OSw3ICs3ODIsNyBAQAogCiAJLyoKIAkgKiBJZiBncm91cCBldmVudHMgc2NoZWR1bGluZyB0cmFuc2FjdGlvbiB3YXMgc3RhcnRlZCwKLQkgKiBza2lwIHRoZSBzY2hlZHVsYWJpbGl0eSB0ZXN0IGhlcmUsIGl0IHdpbGwgYmUgcGVmb3JtZWQKKwkgKiBza2lwIHRoZSBzY2hlZHVsYWJpbGl0eSB0ZXN0IGhlcmUsIGl0IHdpbGwgYmUgcGVyZm9ybWVkCiAJICogYXQgY29tbWl0IHRpbWUoLT5jb21taXRfdHhuKSBhcyBhIHdob2xlCiAJICovCiAJaWYgKGNwdWh3LT5ncm91cF9mbGFnICYgUEVSRl9FVkVOVF9UWE4pCkBAIC0xMTk3LDcgKzEyMjAsNyBAQAogCiAJLyogd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBpbnRlcnJ1cHRzIGhlcmUgKi8KIAlwcmV2ID0gbG9jYWw2NF9yZWFkKCZldmVudC0+aHcucHJldl9jb3VudCk7Ci0JZGVsdGEgPSAodmFsIC0gcHJldikgJiAweGZmZmZmZmZmdWw7CisJZGVsdGEgPSBjaGVja19hbmRfY29tcHV0ZV9kZWx0YShwcmV2LCB2YWwpOwogCWxvY2FsNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19zYXZlX3JlZ3MuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX3NhdmVfcmVncy5TCmluZGV4IGU4M2JhM2YuLjFiMTc4N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX3NhdmVfcmVncy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX3NhdmVfcmVncy5TCkBAIC0xNSw3ICsxNSw3IEBACiAKIC8qCiAgKiBHcmFiIHRoZSByZWdpc3RlciB2YWx1ZXMgYXMgdGhleSBhcmUgbm93LgotICogVGhpcyB3b24ndCBkbyBhIHBhcnRpY3VsYXJpbHkgZ29vZCBqb2IgYmVjYXVzZSB3ZSByZWFsbHkKKyAqIFRoaXMgd29uJ3QgZG8gYSBwYXJ0aWN1bGFybHkgZ29vZCBqb2IgYmVjYXVzZSB3ZSByZWFsbHkKICAqIHdhbnQgb3VyIGNhbGxlcidzIGNhbGxlcidzIHJlZ2lzdGVycywgYW5kIG91ciBjYWxsZXIgaGFzCiAgKiBhbHJlYWR5IGV4ZWN1dGVkIGl0cyBwcm9sb2d1ZS4KICAqIFRvRG86IFdlIGNvdWxkIHJlYWNoIGJhY2sgaW50byB0aGUgY2FsbGVyJ3Mgc2F2ZSBhcmVhIHRvIGRvCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCmluZGV4IDA1YjcxMzkuLmU3NGZhMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCkBAIC02ODMsNyArNjgzLDcgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BIWVBfRFVNUAotCS8qIHNjYW4gdHJlZSB0byBzZWUgaWYgZHVtcCBvY2N1cmVkIGR1cmluZyBsYXN0IGJvb3QgKi8KKwkvKiBzY2FuIHRyZWUgdG8gc2VlIGlmIGR1bXAgb2NjdXJyZWQgZHVyaW5nIGxhc3QgYm9vdCAqLwogCW9mX3NjYW5fZmxhdF9kdChlYXJseV9pbml0X2R0X3NjYW5fcGh5cF9kdW1wLCBOVUxMKTsKICNlbmRpZgogCkBAIC03MzksNyArNzM5LDcgQEAKIAogCURCRygiU2Nhbm5pbmcgQ1BVcyAuLi5cbiIpOwogCi0JLyogUmV0cmVpdmUgQ1BVIHJlbGF0ZWQgaW5mb3JtYXRpb25zIGZyb20gdGhlIGZsYXQgdHJlZQorCS8qIFJldHJpZXZlIENQVSByZWxhdGVkIGluZm9ybWF0aW9ucyBmcm9tIHRoZSBmbGF0IHRyZWUKIAkgKiAoYWx0aXZlYyBzdXBwb3J0LCBib290IENQVSBJRCwgLi4uKQogCSAqLwogCW9mX3NjYW5fZmxhdF9kdChlYXJseV9pbml0X2R0X3NjYW5fY3B1cywgTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UuYwppbmRleCA4OTViMDgyLi5hNmFlMWNmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMKQEAgLTQ2Myw3ICs0NjMsNyBAQAogI2lmZGVmIENPTkZJR19WU1gKIC8qCiAgKiBDdXJyZW50bHkgdG8gc2V0IGFuZCBhbmQgZ2V0IGFsbCB0aGUgdnN4IHN0YXRlLCB5b3UgbmVlZCB0byBjYWxsCi0gKiB0aGUgZnAgYW5kIFZNWCBjYWxscyBhc3dlbGwuICBUaGlzIG9ubHkgZ2V0L3NldHMgdGhlIGxvd2VyIDMyCisgKiB0aGUgZnAgYW5kIFZNWCBjYWxscyBhcyB3ZWxsLiAgVGhpcyBvbmx5IGdldC9zZXRzIHRoZSBsb3dlciAzMgogICogMTI4Yml0IFZTWCByZWdpc3RlcnMuCiAgKi8KIApAQCAtOTMzLDEyICs5MzMsMTYgQEAKIAlpZiAoZGF0YSAmJiAhKGRhdGEgJiBEQUJSX1RSQU5TTEFUSU9OKSkKIAkJcmV0dXJuIC1FSU87CiAjaWZkZWYgQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVAorCWlmIChwdHJhY2VfZ2V0X2JyZWFrcG9pbnRzKHRhc2spIDwgMCkKKwkJcmV0dXJuIC1FU1JDSDsKKwogCWJwID0gdGhyZWFkLT5wdHJhY2VfYnBzWzBdOwogCWlmICgoIWRhdGEpIHx8ICEoZGF0YSAmIChEQUJSX0RBVEFfV1JJVEUgfCBEQUJSX0RBVEFfUkVBRCkpKSB7CiAJCWlmIChicCkgewogCQkJdW5yZWdpc3Rlcl9od19icmVha3BvaW50KGJwKTsKIAkJCXRocmVhZC0+cHRyYWNlX2Jwc1swXSA9IE5VTEw7CiAJCX0KKwkJcHRyYWNlX3B1dF9icmVha3BvaW50cyh0YXNrKTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmIChicCkgewpAQCAtOTQ4LDkgKzk1MiwxMiBAQAogCQkJCQkoREFCUl9EQVRBX1dSSVRFIHwgREFCUl9EQVRBX1JFQUQpLAogCQkJCQkJCSZhdHRyLmJwX3R5cGUpOwogCQlyZXQgPSAgbW9kaWZ5X3VzZXJfaHdfYnJlYWtwb2ludChicCwgJmF0dHIpOwotCQlpZiAocmV0KQorCQlpZiAocmV0KSB7CisJCQlwdHJhY2VfcHV0X2JyZWFrcG9pbnRzKHRhc2spOwogCQkJcmV0dXJuIHJldDsKKwkJfQogCQl0aHJlYWQtPnB0cmFjZV9icHNbMF0gPSBicDsKKwkJcHRyYWNlX3B1dF9icmVha3BvaW50cyh0YXNrKTsKIAkJdGhyZWFkLT5kYWJyID0gZGF0YTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtOTY1LDkgKzk3MiwxMiBAQAogCQkJCQkJCXB0cmFjZV90cmlnZ2VyZWQsIHRhc2spOwogCWlmIChJU19FUlIoYnApKSB7CiAJCXRocmVhZC0+cHRyYWNlX2Jwc1swXSA9IE5VTEw7CisJCXB0cmFjZV9wdXRfYnJlYWtwb2ludHModGFzayk7CiAJCXJldHVybiBQVFJfRVJSKGJwKTsKIAl9CiAKKwlwdHJhY2VfcHV0X2JyZWFrcG9pbnRzKHRhc2spOworCiAjZW5kaWYgLyogQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCAqLwogCiAJLyogTW92ZSBjb250ZW50cyB0byB0aGUgREFCUiByZWdpc3RlciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzZC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzZC5jCmluZGV4IDc5ODBlYzAuLjY3ZjZjM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhc2QuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNkLmMKQEAgLTQ2NSw3ICs0NjUsNyBAQAogCXByX2RlYnVnKCJydGFzZDogd2lsbCBzbGVlcCBmb3IgJWQgbWlsbGlzZWNvbmRzXG4iLAogCQkgKDMwMDAwIC8gcnRhc19ldmVudF9zY2FuX3JhdGUpKTsKIAotCS8qIFJldHJlaXZlIGVycm9ycyBmcm9tIG52cmFtIGlmIGFueSAqLworCS8qIFJldHJpZXZlIGVycm9ycyBmcm9tIG52cmFtIGlmIGFueSAqLwogCXJldHJlaXZlX252cmFtX2Vycm9yX2xvZygpOwogCiAJc2NoZWR1bGVfZGVsYXllZF93b3JrX29uKGNwdW1hc2tfZmlyc3QoY3B1X29ubGluZV9tYXNrKSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3dzdXNwXzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N3c3VzcF8zMi5TCmluZGV4IGIwNzU0ZTIuLmJhNGRlZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3dzdXNwXzMyLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zd3N1c3BfMzIuUwpAQCAtMTQzLDcgKzE0Myw3IEBACiAKIAkvKiBEaXNhYmxlIE1TUjpEUiB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgdGFrZSBhIFRMQiBvcgogCSAqIGhhc2ggbWlzcyBkdXJpbmcgdGhlIGNvcHksIGFzIG91ciBoYXNoIHRhYmxlIHdpbGwKLQkgKiBmb3IgYSB3aGlsZSBiZSB1bnVzZWFibGUuIEZvciAudGV4dCwgd2UgYXNzdW1lIHdlIGFyZQorCSAqIGZvciBhIHdoaWxlIGJlIHVudXNhYmxlLiBGb3IgLnRleHQsIHdlIGFzc3VtZSB3ZSBhcmUKIAkgKiBjb3ZlcmVkIGJ5IGEgQkFULiBUaGlzIHdvcmtzIG9ubHkgZm9yIG5vbi1HNSBhdCB0aGlzCiAJICogcG9pbnQuIEc1IHdpbGwgbmVlZCBhIGJldHRlciBhcHByb2FjaCwgcG9zc2libHkgdXNpbmcKIAkgKiBhIHNtYWxsIHRlbXBvcmFyeSBoYXNoIHRhYmxlIGZpbGxlZCB3aXRoIGxhcmdlIG1hcHBpbmdzLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwppbmRleCAzNzU0ODBjLi5mMzNhY2ZkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwpAQCAtMjI5LDYgKzIyOSw5IEBACiAJdTY0IHN0b2xlbiA9IDA7CiAJdTY0IGR0YjsKIAorCWlmICghZHRsKQorCQlyZXR1cm4gMDsKKwogCWlmIChpID09IHZwYS0+ZHRsX2lkeCkKIAkJcmV0dXJuIDA7CiAJd2hpbGUgKGkgPCB2cGEtPmR0bF9pZHgpIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYwppbmRleCBiZDc0ZmFjLi41ZGRiODAxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCkBAIC05NTksNyArOTU5LDcgQEAKIAkgKiBFU1JfRFNUICghPykgb3IgMC4gIEluIHRoZSBwcm9jZXNzIG9mIGNoYXNpbmcgdGhpcyB3aXRoIHRoZQogCSAqIGhhcmR3YXJlIHBlb3BsZSAtIG5vdCBzdXJlIGlmIGl0IGNhbiBoYXBwZW4gb24gYW55IGlsbGVnYWwKIAkgKiBpbnN0cnVjdGlvbiBvciBvbmx5IG9uIEZQIGluc3RydWN0aW9ucywgd2hldGhlciB0aGVyZSBpcyBhCi0JICogcGF0dGVybiB0byBvY2N1cmVuY2VzIGV0Yy4gLWRnaWJzb24gMzEvTWFyLzIwMDMgKi8KKwkgKiBwYXR0ZXJuIHRvIG9jY3VycmVuY2VzIGV0Yy4gLWRnaWJzb24gMzEvTWFyLzIwMDMgKi8KIAlzd2l0Y2ggKGRvX21hdGhlbXUocmVncykpIHsKIAljYXNlIDA6CiAJCWVtdWxhdGVfc2luZ2xlX3N0ZXAocmVncyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmdfMTY1NTAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jCmluZGV4IGI0YjE2N2IuLmJhYTMzYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIHVkYmcgZm9yIE5TMTY1NTAgY29tcGF0YWJsZSBzZXJpYWwgcG9ydHMKKyAqIHVkYmcgZm9yIE5TMTY1NTAgY29tcGF0aWJsZSBzZXJpYWwgcG9ydHMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNSBQUEMgNjQgVGVhbSwgSUJNIENvcnAKICAqCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9zaWd0cmFtcC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvc2lndHJhbXAuUwppbmRleCA2OGQ0OWRkLi5jZjBjOWM5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9zaWd0cmFtcC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3NpZ3RyYW1wLlMKQEAgLTE5LDcgKzE5LDcgQEAKIAogLyogVGhlIG5vcCBoZXJlIGlzIGEgaGFjay4gIFRoZSBkd2FyZjIgdW53aW5kIHJvdXRpbmVzIHN1YnRyYWN0IDEgZnJvbQogICAgdGhlIHJldHVybiBhZGRyZXNzIHRvIGdldCBhbiBhZGRyZXNzIGluIHRoZSBtaWRkbGUgb2YgdGhlIHByZXN1bWVkCi0gICBjYWxsIGluc3RydWN0aW9uLiAgU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIGNhbGwgaGVyZSwgd2UgYXJ0aWZpY2FsbHkKKyAgIGNhbGwgaW5zdHJ1Y3Rpb24uICBTaW5jZSB3ZSBkb24ndCBoYXZlIGEgY2FsbCBoZXJlLCB3ZSBhcnRpZmljaWFsbHkKICAgIGV4dGVuZCB0aGUgcmFuZ2UgY292ZXJlZCBieSB0aGUgdW53aW5kIGluZm8gYnkgYWRkaW5nIGEgbm9wIGJlZm9yZQogICAgdGhlIHJlYWwgc3RhcnQuICAqLwogCW5vcApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvc2lndHJhbXAuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L3NpZ3RyYW1wLlMKaW5kZXggNTllYjU5Yi4uNDVlYTI4MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvc2lndHJhbXAuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9zaWd0cmFtcC5TCkBAIC0yMCw3ICsyMCw3IEBACiAKIC8qIFRoZSBub3AgaGVyZSBpcyBhIGhhY2suICBUaGUgZHdhcmYyIHVud2luZCByb3V0aW5lcyBzdWJ0cmFjdCAxIGZyb20KICAgIHRoZSByZXR1cm4gYWRkcmVzcyB0byBnZXQgYW4gYWRkcmVzcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwcmVzdW1lZAotICAgY2FsbCBpbnN0cnVjdGlvbi4gIFNpbmNlIHdlIGRvbid0IGhhdmUgYSBjYWxsIGhlcmUsIHdlIGFydGlmaWNhbGx5CisgICBjYWxsIGluc3RydWN0aW9uLiAgU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIGNhbGwgaGVyZSwgd2UgYXJ0aWZpY2lhbGx5CiAgICBleHRlbmQgdGhlIHJhbmdlIGNvdmVyZWQgYnkgdGhlIHVud2luZCBpbmZvIGJ5IHBhZGRpbmcgYmVmb3JlIHRoZQogICAgcmVhbCBzdGFydC4gICovCiAJbm9wCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF9sb3dfNjQuUyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX2xvd182NC5TCmluZGV4IDMwNzlmNmIuLjViN2RkNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX2xvd182NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX2xvd182NC5TCkBAIC0xOTIsOCArMTkyLDggQEAKIAlybGRpY3IJcjMscjAsMyw2My0zCQkvKiByMyA9IChoYXNoICYgbWFzaykgPDwgMyAqLwogCiAJLyogQ2FsbCBwcGNfbWQuaHB0ZV9pbnNlcnQgKi8KLQlsZAlyNixTVEtfUEFSTShyNCkocjEpCS8qIFJldHJlaXZlIG5ldyBwcCBiaXRzICovCi0JbXIJcjQscjI5CQkJLyogUmV0cmVpdmUgdmEgKi8KKwlsZAlyNixTVEtfUEFSTShyNCkocjEpCS8qIFJldHJpZXZlIG5ldyBwcCBiaXRzICovCisJbXIJcjQscjI5CQkJLyogUmV0cmlldmUgdmEgKi8KIAlsaQlyNywwCQkJLyogIWJvbHRlZCwgIXNlY29uZGFyeSAqLwogCWxpCXI4LE1NVV9QQUdFXzRLCQkvKiBwYWdlIHNpemUgKi8KIAlsZAlyOSxTVEtfUEFSTShyOSkocjEpCS8qIHNlZ21lbnQgc2l6ZSAqLwpAQCAtMjE1LDggKzIxNSw4IEBACiAJcmxkaWNyCXIzLHIwLDMsNjMtMwkvKiByMCA9ICh+aGFzaCAmIG1hc2spIDw8IDMgKi8KIAkKIAkvKiBDYWxsIHBwY19tZC5ocHRlX2luc2VydCAqLwotCWxkCXI2LFNUS19QQVJNKHI0KShyMSkJLyogUmV0cmVpdmUgbmV3IHBwIGJpdHMgKi8KLQltcglyNCxyMjkJCQkvKiBSZXRyZWl2ZSB2YSAqLworCWxkCXI2LFNUS19QQVJNKHI0KShyMSkJLyogUmV0cmlldmUgbmV3IHBwIGJpdHMgKi8KKwltcglyNCxyMjkJCQkvKiBSZXRyaWV2ZSB2YSAqLwogCWxpCXI3LEhQVEVfVl9TRUNPTkRBUlkJLyogIWJvbHRlZCwgc2Vjb25kYXJ5ICovCiAJbGkJcjgsTU1VX1BBR0VfNEsJCS8qIHBhZ2Ugc2l6ZSAqLwogCWxkCXI5LFNUS19QQVJNKHI5KShyMSkJLyogc2VnbWVudCBzaXplICovCkBAIC00OTUsOCArNDk1LDggQEAKIAlybGRpY3IJcjMscjAsMyw2My0zCQkvKiByMCA9IChoYXNoICYgbWFzaykgPDwgMyAqLwogCiAJLyogQ2FsbCBwcGNfbWQuaHB0ZV9pbnNlcnQgKi8KLQlsZAlyNixTVEtfUEFSTShyNCkocjEpCS8qIFJldHJlaXZlIG5ldyBwcCBiaXRzICovCi0JbXIJcjQscjI5CQkJLyogUmV0cmVpdmUgdmEgKi8KKwlsZAlyNixTVEtfUEFSTShyNCkocjEpCS8qIFJldHJpZXZlIG5ldyBwcCBiaXRzICovCisJbXIJcjQscjI5CQkJLyogUmV0cmlldmUgdmEgKi8KIAlsaQlyNywwCQkJLyogIWJvbHRlZCwgIXNlY29uZGFyeSAqLwogCWxpCXI4LE1NVV9QQUdFXzRLCQkvKiBwYWdlIHNpemUgKi8KIAlsZAlyOSxTVEtfUEFSTShyOSkocjEpCS8qIHNlZ21lbnQgc2l6ZSAqLwpAQCAtNTIyLDggKzUyMiw4IEBACiAJcmxkaWNyCXIzLHIwLDMsNjMtMwkJLyogcjAgPSAofmhhc2ggJiBtYXNrKSA8PCAzICovCiAKIAkvKiBDYWxsIHBwY19tZC5ocHRlX2luc2VydCAqLwotCWxkCXI2LFNUS19QQVJNKHI0KShyMSkJLyogUmV0cmVpdmUgbmV3IHBwIGJpdHMgKi8KLQltcglyNCxyMjkJCQkvKiBSZXRyZWl2ZSB2YSAqLworCWxkCXI2LFNUS19QQVJNKHI0KShyMSkJLyogUmV0cmlldmUgbmV3IHBwIGJpdHMgKi8KKwltcglyNCxyMjkJCQkvKiBSZXRyaWV2ZSB2YSAqLwogCWxpCXI3LEhQVEVfVl9TRUNPTkRBUlkJLyogIWJvbHRlZCwgc2Vjb25kYXJ5ICovCiAJbGkJcjgsTU1VX1BBR0VfNEsJCS8qIHBhZ2Ugc2l6ZSAqLwogCWxkCXI5LFNUS19QQVJNKHI5KShyMSkJLyogc2VnbWVudCBzaXplICovCkBAIC04MTMsOCArODEzLDggQEAKIAlybGRpY3IJcjMscjAsMyw2My0zCS8qIHIwID0gKGhhc2ggJiBtYXNrKSA8PCAzICovCiAKIAkvKiBDYWxsIHBwY19tZC5ocHRlX2luc2VydCAqLwotCWxkCXI2LFNUS19QQVJNKHI0KShyMSkJLyogUmV0cmVpdmUgbmV3IHBwIGJpdHMgKi8KLQltcglyNCxyMjkJCQkvKiBSZXRyZWl2ZSB2YSAqLworCWxkCXI2LFNUS19QQVJNKHI0KShyMSkJLyogUmV0cmlldmUgbmV3IHBwIGJpdHMgKi8KKwltcglyNCxyMjkJCQkvKiBSZXRyaWV2ZSB2YSAqLwogCWxpCXI3LDAJCQkvKiAhYm9sdGVkLCAhc2Vjb25kYXJ5ICovCiAJbGkJcjgsTU1VX1BBR0VfNjRLCiAJbGQJcjksU1RLX1BBUk0ocjkpKHIxKQkvKiBzZWdtZW50IHNpemUgKi8KQEAgLTgzNiw4ICs4MzYsOCBAQAogCXJsZGljcglyMyxyMCwzLDYzLTMJLyogcjAgPSAofmhhc2ggJiBtYXNrKSA8PCAzICovCiAKIAkvKiBDYWxsIHBwY19tZC5ocHRlX2luc2VydCAqLwotCWxkCXI2LFNUS19QQVJNKHI0KShyMSkJLyogUmV0cmVpdmUgbmV3IHBwIGJpdHMgKi8KLQltcglyNCxyMjkJCQkvKiBSZXRyZWl2ZSB2YSAqLworCWxkCXI2LFNUS19QQVJNKHI0KShyMSkJLyogUmV0cmlldmUgbmV3IHBwIGJpdHMgKi8KKwltcglyNCxyMjkJCQkvKiBSZXRyaWV2ZSB2YSAqLwogCWxpCXI3LEhQVEVfVl9TRUNPTkRBUlkJLyogIWJvbHRlZCwgc2Vjb25kYXJ5ICovCiAJbGkJcjgsTU1VX1BBR0VfNjRLCiAJbGQJcjksU1RLX1BBUk0ocjkpKHIxKQkvKiBzZWdtZW50IHNpemUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCmluZGV4IGE1OTkxZmEuLjU4YTAyMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYwpAQCAtNzUzLDcgKzc1Myw3IEBACiAJCW10c3ByKFNQUk5fU0RSMSwgX1NEUjEpOwogCiAJLyogSW5pdGlhbGl6ZSBTVEFCL1NMQi4gV2UgdXNlIGEgdmlydHVhbCBhZGRyZXNzIGFzIGl0IHdvcmtzCi0JICogaW4gcmVhbCBtb2RlIG9uIHBTZXJpZXMgYW5kIHdlIHdhbnQgYSB2aXJ1dGFsIGFkZHJlc3Mgb24KKwkgKiBpbiByZWFsIG1vZGUgb24gcFNlcmllcyBhbmQgd2Ugd2FudCBhIHZpcnR1YWwgYWRkcmVzcyBvbgogCSAqIGlTZXJpZXMgYW55d2F5CiAJICovCiAJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1NMQikpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbWVtLmMgYi9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKaW5kZXggYTY2NDk5Ni4uNTdlNTQ1YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL21lbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9tZW0uYwpAQCAtNDI0LDcgKzQyNCw3IEBACiAJY2xlYXJfcGFnZShwYWdlKTsKIAogCS8qCi0JICogV2Ugc2hvdWxkbnQgaGF2ZSB0byBkbyB0aGlzLCBidXQgc29tZSB2ZXJzaW9ucyBvZiBnbGliYworCSAqIFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXMsIGJ1dCBzb21lIHZlcnNpb25zIG9mIGdsaWJjCiAJICogcmVxdWlyZSBpdCAobGQuc28gYXNzdW1lcyB6ZXJvIGZpbGxlZCBwYWdlcyBhcmUgaWNhY2hlIGNsZWFuKQogCSAqIC0gQW50b24KIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMgYi9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCmluZGV4IDBkYzk1YzAuLjVlYzFkYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwpAQCAtNDQwLDExICs0NDAsMTEgQEAKIH0KIAogLyoKLSAqIFJldHJlaXZlIGFuZCB2YWxpZGF0ZSB0aGUgaWJtLGR5bmFtaWMtbWVtb3J5IHByb3BlcnR5IG9mIHRoZSBkZXZpY2UgdHJlZS4KKyAqIFJldHJpZXZlIGFuZCB2YWxpZGF0ZSB0aGUgaWJtLGR5bmFtaWMtbWVtb3J5IHByb3BlcnR5IG9mIHRoZSBkZXZpY2UgdHJlZS4KICAqCiAgKiBUaGUgbGF5b3V0IG9mIHRoZSBpYm0sZHluYW1pYy1tZW1vcnkgcHJvcGVydHkgaXMgYSBudW1iZXIgTiBvZiBtZW1ibG9jawogICogbGlzdCBlbnRyaWVzIGZvbGxvd2VkIGJ5IE4gbWVtYmxvY2sgbGlzdCBlbnRyaWVzLiAgRWFjaCBtZW1ibG9jayBsaXN0IGVudHJ5Ci0gKiBjb250YWlucyBpbmZvcm1hdGlvbiBhcyBsYXllZCBvdXQgaW4gdGhlIG9mX2RyY29uZl9jZWxsIHN0cnVjdCBhYm92ZS4KKyAqIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFzIGxhaWQgb3V0IGluIHRoZSBvZl9kcmNvbmZfY2VsbCBzdHJ1Y3QgYWJvdmUuCiAgKi8KIHN0YXRpYyBpbnQgb2ZfZ2V0X2RyY29uZl9tZW1vcnkoc3RydWN0IGRldmljZV9ub2RlICptZW1vcnksIGNvbnN0IHUzMiAqKmRtKQogewpAQCAtNDY4LDcgKzQ2OCw3IEBACiB9CiAKIC8qCi0gKiBSZXRyZWl2ZSBhbmQgdmFsaWRhdGUgdGhlIGlibSxsbWItc2l6ZSBwcm9wZXJ0eSBmb3IgZHJjb25mIG1lbW9yeQorICogUmV0cmlldmUgYW5kIHZhbGlkYXRlIHRoZSBpYm0sbG1iLXNpemUgcHJvcGVydHkgZm9yIGRyY29uZiBtZW1vcnkKICAqIGZyb20gdGhlIGRldmljZSB0cmVlLgogICovCiBzdGF0aWMgdTY0IG9mX2dldF9sbWJfc2l6ZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm1lbW9yeSkKQEAgLTQ5MCw3ICs0OTAsNyBAQAogfTsKIAogLyoKLSAqIFJldHJlaXZlIGFuZCB2YWxpZGF0ZSB0aGUgbGlzdCBvZiBhc3NvY2lhdGl2aXR5IGFycmF5cyBmb3IgZHJjb25mCisgKiBSZXRyaWV2ZSBhbmQgdmFsaWRhdGUgdGhlIGxpc3Qgb2YgYXNzb2NpYXRpdml0eSBhcnJheXMgZm9yIGRyY29uZgogICogbWVtb3J5IGZyb20gdGhlIGlibSxhc3NvY2lhdGl2aXR5LWxvb2t1cC1hcnJheXMgcHJvcGVydHkgb2YgdGhlCiAgKiBkZXZpY2UgdHJlZS4uCiAgKgpAQCAtNjA0LDcgKzYwNCw3IEBACiAgKiBSZXR1cm5zIHRoZSBzaXplIHRoZSByZWdpb24gc2hvdWxkIGhhdmUgdG8gZW5mb3JjZSB0aGUgbWVtb3J5IGxpbWl0LgogICogVGhpcyB3aWxsIGVpdGhlciBiZSB0aGUgb3JpZ2luYWwgdmFsdWUgb2Ygc2l6ZSwgYSB0cnVuY2F0ZWQgdmFsdWUsCiAgKiBvciB6ZXJvLiBJZiB0aGUgcmV0dXJuZWQgdmFsdWUgb2Ygc2l6ZSBpcyAwIHRoZSByZWdpb24gc2hvdWxkIGJlCi0gKiBkaXNjYXJkZWQgYXMgaXQgbGllcyB3aG9seSBhYm92ZSB0aGUgbWVtb3J5IGxpbWl0LgorICogZGlzY2FyZGVkIGFzIGl0IGxpZXMgd2hvbGx5IGFib3ZlIHRoZSBtZW1vcnkgbGltaXQuCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBudW1hX2VuZm9yY2VfbWVtb3J5X2xpbWl0KHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vdGxiX2xvd182NGUuUyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfbG93XzY0ZS5TCmluZGV4IDIyMjgxNTEuLmFmMDg5MjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbG93XzY0ZS5TCisrKyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfbG93XzY0ZS5TCkBAIC0xOTIsNyArMTkyLDcgQEAKIAlvcglyMTAscjE1LHIxNAogCiBCRUdJTl9NTVVfRlRSX1NFQ1RJT04KLQkvKiBTZXQgdGhlIFRMQiByZXNlcnZhdGlvbiBhbmQgc2VhY2ggZm9yIGV4aXN0aW5nIGVudHJ5LiBUaGVuIGxvYWQKKwkvKiBTZXQgdGhlIFRMQiByZXNlcnZhdGlvbiBhbmQgc2VhcmNoIGZvciBleGlzdGluZyBlbnRyeS4gVGhlbiBsb2FkCiAJICogdGhlIGVudHJ5LgogCSAqLwogCVBQQ19UTEJTUlhfRE9UKDAscjE2KQpAQCAtNDI1LDcgKzQyNSw3IEBACiAKIHZpcnRfcGFnZV90YWJsZV90bGJfbWlzc19mYXVsdDoKIAkvKiBJZiB3ZSBmYXVsdCBoZXJlLCB0aGluZ3MgYXJlIGEgbGl0dGxlIGJpdCB0cmlja3kuIFdlIG5lZWQgdG8gY2FsbAotCSAqIGVpdGhlciBkYXRhIG9yIGluc3RydWN0aW9uIHN0b3JlIGZhdWx0LCBhbmQgd2UgbmVlZCB0byByZXRyZWl2ZQorCSAqIGVpdGhlciBkYXRhIG9yIGluc3RydWN0aW9uIHN0b3JlIGZhdWx0LCBhbmQgd2UgbmVlZCB0byByZXRyaWV2ZQogCSAqIHRoZSBvcmlnaW5hbCBmYXVsdCBhZGRyZXNzIGFuZCBFU1IgKGZvciBkYXRhKS4KIAkgKgogCSAqIFRoZSB0aGluZyBpcywgd2Uga25vdyB0aGF0IGluIG5vcm1hbCBjaXJjdW1zdGFuY2VzLCB0aGlzIGlzCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfY2VsbC5jIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX2NlbGwuYwppbmRleCBjNGQyYjcxLi5jYjUxNWNmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfY2VsbC5jCisrKyBiL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9jZWxsLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAogI2RlZmluZSBNQVhfU1BVX0NPVU5UIDB4RkZGRkZGCS8qIG1heGltdW0gMjQgYml0IExGU1IgdmFsdWUgKi8KIAotLyogTWludW11bSBIVyBpbnRlcnZhbCB0aW1lciBzZXR0aW5nIHRvIHNlbmQgdmFsdWUgdG8gdHJhY2UgYnVmZmVyIGlzIDEwIGN5Y2xlLgorLyogTWluaW11bSBIVyBpbnRlcnZhbCB0aW1lciBzZXR0aW5nIHRvIHNlbmQgdmFsdWUgdG8gdHJhY2UgYnVmZmVyIGlzIDEwIGN5Y2xlLgogICogVG8gY29uZmlndXJlIGNvdW50ZXIgdG8gc2VuZCB2YWx1ZSBldmVyeSBOIGN5Y2xlcyBzZXQgY291bnRlciB0bwogICogMl4zMiAtIDEgLSBOLgogICovCkBAIC0xNDcwLDcgKzE0NzAsNyBAQAogICogdHJhY2UgYnVmZmVyIGF0IHRoZSBtYXhpbXVtIHJhdGUgcG9zc2libGUuICBUaGUgdHJhY2UgYnVmZmVyIGlzIGNvbmZpZ3VyZWQKICAqIHRvIHN0b3JlIHRoZSBQQ3MsIHdyYXBwaW5nIHdoZW4gaXQgaXMgZnVsbC4gIFRoZSBwZXJmb3JtYW5jZSBjb3VudGVyIGlzCiAgKiBpbml0aWFsaXplZCB0byB0aGUgbWF4IGhhcmR3YXJlIGNvdW50IG1pbnVzIHRoZSBudW1iZXIgb2YgZXZlbnRzLCBOLCBiZXR3ZWVuCi0gKiBzYW1wbGVzLiAgT25jZSB0aGUgTiBldmVudHMgaGF2ZSBvY2N1cmVkLCBhIEhXIGNvdW50ZXIgb3ZlcmZsb3cgb2NjdXJzCisgKiBzYW1wbGVzLiAgT25jZSB0aGUgTiBldmVudHMgaGF2ZSBvY2N1cnJlZCwgYSBIVyBjb3VudGVyIG92ZXJmbG93IG9jY3VycwogICogY2F1c2luZyB0aGUgZ2VuZXJhdGlvbiBvZiBhIEhXIGNvdW50ZXIgaW50ZXJydXB0IHdoaWNoIGFsc28gc3RvcHMgdGhlCiAgKiB3cml0aW5nIG9mIHRoZSBTUFUgUEMgdmFsdWVzIHRvIHRoZSB0cmFjZSBidWZmZXIuICBIZW5jZSB0aGUgbGFzdCBQQwogICogd3JpdHRlbiB0byB0aGUgdHJhY2UgYnVmZmVyIGlzIHRoZSBTUFUgUEMgdGhhdCB3ZSB3YW50LiAgVW5mb3J0dW5hdGVseSwKQEAgLTE2NTYsNyArMTY1Niw3IEBACiAJCSAqIFRoZSBjb3VudGVycyB3ZXJlIGZyb3plbiBieSB0aGUgaW50ZXJydXB0LgogCQkgKiBSZWVuYWJsZSB0aGUgaW50ZXJydXB0IGFuZCByZXN0YXJ0IHRoZSBjb3VudGVycy4KIAkJICogSWYgdGhlcmUgd2FzIGEgcmFjZSBiZXR3ZWVuIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhbmQKLQkJICogdGhlIHZpcnR1YWwgY291bnRlciByb3V0aW5lLgkgVGhlIHZpcnV0YWwgY291bnRlcgorCQkgKiB0aGUgdmlydHVhbCBjb3VudGVyIHJvdXRpbmUuCSBUaGUgdmlydHVhbCBjb3VudGVyCiAJCSAqIHJvdXRpbmUgbWF5IGhhdmUgY2xlYXJlZCB0aGUgaW50ZXJydXB0cy4gIEhlbmNlIG11c3QKIAkJICogdXNlIHRoZSB2aXJ0X2NudHJfaW50ZXJfbWFzayB0byByZS1lbmFibGUgdGhlIGludGVycnVwdHMuCiAJCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX3Bvd2VyNC5jIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX3Bvd2VyNC5jCmluZGV4IDgwNzc0MDkuLjhlZTUxYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9wb3dlcjQuYworKysgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfcG93ZXI0LmMKQEAgLTIwNyw3ICsyMDcsNyBAQAogCXVuc2lnbmVkIGxvbmcgbW1jcmE7CiAJdW5zaWduZWQgbG9uZyBzbG90OwogCi0JLyogQ2FudCBkbyBtdWNoIGFib3V0IGl0ICovCisJLyogQ2FuJ3QgZG8gbXVjaCBhYm91dCBpdCAqLwogCWlmICghY3VyX2NwdV9zcGVjLT5vcHJvZmlsZV9tbWNyYV9zaWh2KQogCQlyZXR1cm4gcGM7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2xwYmZpZm8uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2xwYmZpZm8uYwppbmRleCA2Mzg1ZDg4Li45OTQwY2U4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9scGJmaWZvLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfbHBiZmlmby5jCkBAIC01Nyw3ICs1Nyw3IEBACiBzdGF0aWMgc3RydWN0IG1wYzUyeHhfbHBiZmlmbyBscGJmaWZvOwogCiAvKioKLSAqIG1wYzUyeHhfbHBiZmlmb19raWNrIC0gVHJpZ2dlciB0aGUgbmV4dCBibG9jayBvZiBkYXRhIHRvIGJlIHRyYW5zZmVyZWQKKyAqIG1wYzUyeHhfbHBiZmlmb19raWNrIC0gVHJpZ2dlciB0aGUgbmV4dCBibG9jayBvZiBkYXRhIHRvIGJlIHRyYW5zZmVycmVkCiAgKi8KIHN0YXRpYyB2b2lkIG1wYzUyeHhfbHBiZmlmb19raWNrKHN0cnVjdCBtcGM1Mnh4X2xwYmZpZm9fcmVxdWVzdCAqcmVxKQogewpAQCAtMTc5LDcgKzE3OSw3IEBACiAgKgogICogT24gdHJhbnNtaXQsIHRoZSBkbWEgY29tcGxldGlvbiBpcnEgdHJpZ2dlcnMgYmVmb3JlIHRoZSBmaWZvIGNvbXBsZXRpb24KICAqIHRyaWdnZXJzLiAgSGFuZGxlIHRoZSBkbWEgY29tcGxldGlvbiBoZXJlIGluc3RlYWQgb2YgdGhlIExQQiBGSUZPIEJlc3Rjb21tCi0gKiB0YXNrIGNvbXBsZXRpb24gaXJxIGJlY3Vhc2UgZXZlcnl0aW5nIGlzIG5vdCByZWFsbHkgZG9uZSB1bnRpbCB0aGUgTFBCIEZJRk8KKyAqIHRhc2sgY29tcGxldGlvbiBpcnEgYmVjYXVzZSBldmVyeXRoaW5nIGlzIG5vdCByZWFsbHkgZG9uZSB1bnRpbCB0aGUgTFBCIEZJRk8KICAqIGNvbXBsZXRpb24gaXJxIHRyaWdnZXJzLgogICoKICAqIEluIG90aGVyIHdvcmRzOgpAQCAtMTk1LDcgKzE5NSw3IEBACiAgKiBFeGl0IGNvbmRpdGlvbnM6CiAgKiAxKSBUcmFuc2ZlciBhYm9ydGVkCiAgKiAyKSBGSUZPIGNvbXBsZXRlIHdpdGhvdXQgRE1BOyBtb3JlIGRhdGEgdG8gZG8KLSAqIDMpIEZJRk8gY29tcGxldGUgd2l0aG91dCBETUE7IGFsbCBkYXRhIHRyYW5zZmVyZWQKKyAqIDMpIEZJRk8gY29tcGxldGUgd2l0aG91dCBETUE7IGFsbCBkYXRhIHRyYW5zZmVycmVkCiAgKiA0KSBGSUZPIGNvbXBsZXRlIHVzaW5nIERNQQogICoKICAqIENvbmRpdGlvbiAxIGNhbiBvY2N1ciByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IERNQSBpcyB1c2VkLgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9waWMuYwppbmRleCAzZGRlYTk2Li4xZGQxNTQwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9waWMuYwpAQCAtNTEyLDcgKzUxMiw3IEBACiAvKioKICAqIG1wYzUyeHhfZ2V0X2lycSAtIEdldCBwZW5kaW5nIGludGVycnVwdCBudW1iZXIgaG9vayBmdW5jdGlvbgogICoKLSAqIENhbGxlZCBieSB0aGUgaW50ZXJ1cHQgaGFuZGxlciB0byBkZXRlcm1pbmUgd2hhdCBJUlEgaGFuZGxlciBuZWVkcyB0byBiZQorICogQ2FsbGVkIGJ5IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBkZXRlcm1pbmUgd2hhdCBJUlEgaGFuZGxlciBuZWVkcyB0byBiZQogICogZXhlY3V0ZWQuCiAgKgogICogU3RhdHVzIG9mIHBlbmRpbmcgaW50ZXJydXB0cyBpcyBkZXRlcm1pbmVkIGJ5IHJlYWRpbmcgdGhlIGVuY29kZWQgc3RhdHVzCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc3VzcGVuZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3N1c3BlbmQuYwppbmRleCAxODgyNzI5Li4xMDRmYWE4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc3VzcGVuZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zdXNwZW5kLmMKQEAgLTMxOCwxNyArMzE4LDIwIEBACiAJLmVuZCA9IG1wYzgzeHhfc3VzcGVuZF9lbmQsCiB9OwogCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBwbWNfbWF0Y2hbXTsKIHN0YXRpYyBpbnQgcG1jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KQogeworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZmRldi0+ZGV2Lm9mX25vZGU7CiAJc3RydWN0IHJlc291cmNlIHJlczsKIAlzdHJ1Y3QgcG1jX3R5cGUgKnR5cGU7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoIW9mZGV2LT5kZXYub2ZfbWF0Y2gpCisJbWF0Y2ggPSBvZl9tYXRjaF9kZXZpY2UocG1jX21hdGNoLCAmb2ZkZXYtPmRldik7CisJaWYgKCFtYXRjaCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl0eXBlID0gb2ZkZXYtPmRldi5vZl9tYXRjaC0+ZGF0YTsKKwl0eXBlID0gbWF0Y2gtPmRhdGE7CiAKIAlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKQogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9sc2NzYV9hbGxvYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2xzY3NhX2FsbG9jLmMKaW5kZXggM2I4OTRmNS4uMTQ3MDY5OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2xzY3NhX2FsbG9jLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2xzY3NhX2FsbG9jLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgU1BVX0xTQ1NBX05VTV9CSUdfUEFHRVM7IGkrKykgewogCQkvKiBYWFggVGhpcyBpcyBsaWtlbHkgdG8gZmFpbCwgd2Ugc2hvdWxkIHVzZSBhIHNwZWNpYWwgcG9vbAotCQkgKiAgICAgc2ltaWxpYXIgdG8gd2hhdCBodWdldGxiZnMgZG9lcy4KKwkJICogICAgIHNpbWlsYXIgdG8gd2hhdCBodWdldGxiZnMgZG9lcy4KIAkJICovCiAJCWNzYS0+bHNjc2FfcGFnZXNbaV0gPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMLAogCQkJCQkJICBTUFVfNjRLX1BBR0VfT1JERVIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NjaGVkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYwppbmRleCAwYjA0NjYyLi42NTIwMzg1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYwpAQCAtODQ2LDcgKzg0Niw3IEBACiAJCXN0cnVjdCBsaXN0X2hlYWQgKnJxID0gJnNwdV9wcmlvLT5ydW5xW2Jlc3RdOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoY3R4LCBycSwgcnEpIHsKLQkJCS8qIFhYWChoY2gpOiBjaGVjayBmb3IgYWZmaW5pdHkgaGVyZSBhc3dlbGwgKi8KKwkJCS8qIFhYWChoY2gpOiBjaGVjayBmb3IgYWZmaW5pdHkgaGVyZSBhcyB3ZWxsICovCiAJCQlpZiAoX19ub2RlX2FsbG93ZWQoY3R4LCBub2RlKSkgewogCQkJCV9fc3B1X2RlbF9mcm9tX3JxKGN0eCk7CiAJCQkJZ290byBmb3VuZDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVfcmVzdG9yZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdV9yZXN0b3JlLmMKaW5kZXggMjFhOWM5NS4uNzJjOTA1ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdV9yZXN0b3JlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdV9yZXN0b3JlLmMKQEAgLTI4NCw3ICsyODQsNyBAQAogCQlleGl0X2luc3Ryc1szXSA9IEJSX0lOU1RSOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQkvKiBTUFVfU3RhdHVzW1JdPTEuIE5vIGFkZGl0b25hbCBpbnN0cnVjdGlvbnMuICovCisJCS8qIFNQVV9TdGF0dXNbUl09MS4gTm8gYWRkaXRpb25hbCBpbnN0cnVjdGlvbnMuICovCiAJCWJyZWFrOwogCX0KIAlzcHVfc3luYygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL21mLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWYuYwppbmRleCBiNWUwMjZiLi42MmRhYmUzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWYuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWYuYwpAQCAtNTEsNyArNTEsNyBAQAogc3RhdGljIGludCBtZl9pbml0aWFsaXplZDsKIAogLyoKLSAqIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSBsYXlvdXQgZm9yIHRoZSBNYWNoaW5lIEZhY2lsaXRlcyBMUEFSIGV2ZW50CisgKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgbGF5b3V0IGZvciB0aGUgTWFjaGluZSBGYWNpbGl0aWVzIExQQVIgZXZlbnQKICAqIGZsb3dzLgogICovCiBzdHJ1Y3QgdnNwX2NtZF9kYXRhIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy92aW9wYXRoLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvdmlvcGF0aC5jCmluZGV4IGI1ZjA1ZDkuLjIzNzYwNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy92aW9wYXRoLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3Zpb3BhdGguYwpAQCAtMzk2LDcgKzM5Niw3IEBACiAJCQl2aW9wYXRoU3RhdHVzW3JlbW90ZUxwXS5tVGFyZ2V0SW5zdCkpIHsKIAkJCXByaW50ayhWSU9QQVRIX0tFUk5fV0FSTgogCQkJICAgICAgICJtZXNzYWdlIGZyb20gaW52YWxpZCBwYXJ0aXRpb24uICIKLQkJCSAgICAgICAiaW50IG1zZyByY3ZkLCBzb3VyY2UgaW5zdCAoJWQpIGRvZXNudCBtYXRjaCAoJWQpXG4iLAorCQkJICAgICAgICJpbnQgbXNnIHJjdmQsIHNvdXJjZSBpbnN0ICglZCkgZG9lc24ndCBtYXRjaCAoJWQpXG4iLAogCQkJICAgICAgIHZpb3BhdGhTdGF0dXNbcmVtb3RlTHBdLm1UYXJnZXRJbnN0LAogCQkJICAgICAgIGV2ZW50LT54U291cmNlSW5zdGFuY2VJZCk7CiAJCQlyZXR1cm47CkBAIC00MDcsNyArNDA3LDcgQEAKIAkJCXZpb3BhdGhTdGF0dXNbcmVtb3RlTHBdLm1Tb3VyY2VJbnN0KSkgewogCQkJcHJpbnRrKFZJT1BBVEhfS0VSTl9XQVJOCiAJCQkgICAgICAgIm1lc3NhZ2UgZnJvbSBpbnZhbGlkIHBhcnRpdGlvbi4gIgotCQkJICAgICAgICJpbnQgbXNnIHJjdmQsIHRhcmdldCBpbnN0ICglZCkgZG9lc250IG1hdGNoICglZClcbiIsCisJCQkgICAgICAgImludCBtc2cgcmN2ZCwgdGFyZ2V0IGluc3QgKCVkKSBkb2Vzbid0IG1hdGNoICglZClcbiIsCiAJCQkgICAgICAgdmlvcGF0aFN0YXR1c1tyZW1vdGVMcF0ubVNvdXJjZUluc3QsCiAJCQkgICAgICAgZXZlbnQtPnhUYXJnZXRJbnN0YW5jZUlkKTsKIAkJCXJldHVybjsKQEAgLTQxOCw3ICs0MTgsNyBAQAogCQkgICAgdmlvcGF0aFN0YXR1c1tyZW1vdGVMcF0ubVNvdXJjZUluc3QpIHsKIAkJCXByaW50ayhWSU9QQVRIX0tFUk5fV0FSTgogCQkJICAgICAgICJtZXNzYWdlIGZyb20gaW52YWxpZCBwYXJ0aXRpb24uICIKLQkJCSAgICAgICAiYWNrIG1zZyByY3ZkLCBzb3VyY2UgaW5zdCAoJWQpIGRvZXNudCBtYXRjaCAoJWQpXG4iLAorCQkJICAgICAgICJhY2sgbXNnIHJjdmQsIHNvdXJjZSBpbnN0ICglZCkgZG9lc24ndCBtYXRjaCAoJWQpXG4iLAogCQkJICAgICAgIHZpb3BhdGhTdGF0dXNbcmVtb3RlTHBdLm1Tb3VyY2VJbnN0LAogCQkJICAgICAgIGV2ZW50LT54U291cmNlSW5zdGFuY2VJZCk7CiAJCQlyZXR1cm47CkBAIC00MjgsNyArNDI4LDcgQEAKIAkJICAgIHZpb3BhdGhTdGF0dXNbcmVtb3RlTHBdLm1UYXJnZXRJbnN0KSB7CiAJCQlwcmludGsoVklPUEFUSF9LRVJOX1dBUk4KIAkJCSAgICAgICAibWVzc2FnZSBmcm9tIGludmFsaWQgcGFydGl0aW9uLiAiCi0JCQkgICAgICAgInZpb3BhdGg6IGFjayBtc2cgcmN2ZCwgdGFyZ2V0IGluc3QgKCVkKSBkb2VzbnQgbWF0Y2ggKCVkKVxuIiwKKwkJCSAgICAgICAidmlvcGF0aDogYWNrIG1zZyByY3ZkLCB0YXJnZXQgaW5zdCAoJWQpIGRvZXNuJ3QgbWF0Y2ggKCVkKVxuIiwKIAkJCSAgICAgICB2aW9wYXRoU3RhdHVzW3JlbW90ZUxwXS5tVGFyZ2V0SW5zdCwKIAkJCSAgICAgICBldmVudC0+eFRhcmdldEluc3RhbmNlSWQpOwogCQkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZG1hX2xpYi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvZG1hX2xpYi5jCmluZGV4IDA5Njk1YWUuLjMyMWE5YjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2RtYV9saWIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9kbWFfbGliLmMKQEAgLTM3OSw5ICszNzksOSBAQAogfQogRVhQT1JUX1NZTUJPTChwYXNlbWlfZG1hX2ZyZWVfYnVmKTsKIAotLyogcGFzZW1pX2RtYV9hbGxvY19mbGFnIC0gQWxsb2NhdGUgYSBmbGFnIChldmVudCkgZm9yIGNoYW5uZWwgc3luY3Jvbml6YXRpb24KKy8qIHBhc2VtaV9kbWFfYWxsb2NfZmxhZyAtIEFsbG9jYXRlIGEgZmxhZyAoZXZlbnQpIGZvciBjaGFubmVsIHN5bmNocm9uaXphdGlvbgogICoKLSAqIEFsbG9jYXRlcyBhIGZsYWcgZm9yIHVzZSB3aXRoIGNoYW5uZWwgc3luY3Jvbml6YXRpb24gKGV2ZW50IGRlc2NyaXB0b3JzKS4KKyAqIEFsbG9jYXRlcyBhIGZsYWcgZm9yIHVzZSB3aXRoIGNoYW5uZWwgc3luY2hyb25pemF0aW9uIChldmVudCBkZXNjcmlwdG9ycykuCiAgKiBSZXR1cm5zIGFsbG9jYXRlZCBmbGFnICgwLTYzKSwgPCAwIG9uIGVycm9yLgogICovCiBpbnQgcGFzZW1pX2RtYV9hbGxvY19mbGFnKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9NYWtlZmlsZQppbmRleCA1MGYxNjkzLi5lYTQ3ZGY2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvTWFrZWZpbGUKQEAgLTExLDcgKzExLDcgQEAKIG9iai0kKENPTkZJR19QTUFDX0JBQ0tMSUdIVCkJKz0gYmFja2xpZ2h0Lm8KIG9iai0kKENPTkZJR19DUFVfRlJFUV9QTUFDKQkrPSBjcHVmcmVxXzMyLm8KIG9iai0kKENPTkZJR19DUFVfRlJFUV9QTUFDNjQpCSs9IGNwdWZyZXFfNjQubwotIyBDT05GSUdfTlZSQU0gaXMgYW4gYXJjaC4gaW5kZXBlbmRhbnQgdHJpc3RhdGUgc3ltYm9sLCBmb3IgcG1hYzMyIHdlIHJlYWxseQorIyBDT05GSUdfTlZSQU0gaXMgYW4gYXJjaC4gaW5kZXBlbmRlbnQgdHJpc3RhdGUgc3ltYm9sLCBmb3IgcG1hYzMyIHdlIHJlYWxseQogIyBuZWVkIHRoaXMgdG8gYmUgYSBib29sLiAgQ2hlYXQgaGVyZSBhbmQgcHJldGVuZCBDT05GSUdfTlZSQU09bSBpcyByZWFsbHkKICMgQ09ORklHX05WUkFNPXkKIG9iai0kKENPTkZJR19OVlJBTTptPXkpCQkrPSBudnJhbS5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2xvd19pMmMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jCmluZGV4IDQ4MDU2N2UuLmU5YzhhNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jCkBAIC05MDQsNyArOTA0LDcgQEAKIAlwcmludGsoS0VSTl9JTkZPICJTTVUgaTJjICVzXG4iLCBjb250cm9sbGVyLT5mdWxsX25hbWUpOwogCiAJLyogTG9vayBmb3IgY2hpbGRzLCBub3RlIHRoYXQgdGhleSBtaWdodCBub3QgYmUgb2YgdGhlIHJpZ2h0Ci0JICogdHlwZSBhcyBvbGRlciBkZXZpY2UgdHJlZXMgbWl4IGkyYyBidXNzZXMgYW5kIG90aGVyIHRoaWducworCSAqIHR5cGUgYXMgb2xkZXIgZGV2aWNlIHRyZWVzIG1peCBpMmMgYnVzc2VzIGFuZCBvdGhlciB0aGluZ3MKIAkgKiBhdCB0aGUgc2FtZSBsZXZlbAogCSAqLwogCWZvciAoYnVzbm9kZSA9IE5VTEw7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BjaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wY2kuYwppbmRleCBhYjY4OTg5Li5mMzNlMDhkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGNpLmMKQEAgLTI5OSw3ICsyOTksNyBAQAogICogVGhpcyBmdW5jdGlvbiBkZWFscyB3aXRoIHNvbWUgInNwZWNpYWwgY2FzZXMiIGRldmljZXMuCiAgKgogICogIDAgLT4gTm8gc3BlY2lhbCBjYXNlCi0gKiAgMSAtPiBTa2lwIHRoZSBkZXZpY2UgYnV0IGFjdCBhcyBpZiB0aGUgYWNjZXNzIHdhcyBzdWNjZXNzZnVsbAorICogIDEgLT4gU2tpcCB0aGUgZGV2aWNlIGJ1dCBhY3QgYXMgaWYgdGhlIGFjY2VzcyB3YXMgc3VjY2Vzc2Z1bAogICogICAgICAgKHJldHVybiAweGZmJ3Mgb24gcmVhZHMsIGV2ZW50dWFsbHksIGNhY2hlIGNvbmZpZyBzcGFjZQogICogICAgICAgYWNjZXNzZXMgaW4gYSBsYXRlciB2ZXJzaW9uKQogICogLTEgLT4gSGlkZSB0aGUgZGV2aWNlICh1bnN1Y2Nlc3NmdWwgYWNjZXNzKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMKaW5kZXggYTgzMGM1ZS4uYmM1ZjBkYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jCkBAIC04NDIsNiArODQyLDcgQEAKIAltcGljX3NldHVwX3RoaXNfY3B1KCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfUFBDNjQKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIHN0YXRpYyBpbnQgc21wX2NvcmU5OV9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKIAkJCQkgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCkBAIC04NzksNyArODgwLDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHNtcF9jb3JlOTlfYnJpbmd1cF9kb25lKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX1BQQzY0CiAJZXh0ZXJuIHZvaWQgZzVfcGh5X2Rpc2FibGVfY3B1MSh2b2lkKTsKIAogCS8qIENsb3NlIGkyYyBidXMgaWYgaXQgd2FzIHVzZWQgZm9yIHRiIHN5bmMgKi8KQEAgLTg5NCwxNCArODk0LDE0IEBACiAJCXNldF9jcHVfcHJlc2VudCgxLCBmYWxzZSk7CiAJCWc1X3BoeV9kaXNhYmxlX2NwdTEoKTsKIAl9Ci0jZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCi0KICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJnNtcF9jb3JlOTlfY3B1X25iKTsKICNlbmRpZgorCiAJaWYgKHBwY19tZC5wcm9ncmVzcykKIAkJcHBjX21kLnByb2dyZXNzKCJzbXBfY29yZTk5X2JyaW5ndXBfZG9uZSIsIDB4MzQ5KTsKIH0KKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogCkBAIC05NzUsNyArOTc1LDkgQEAKIHN0cnVjdCBzbXBfb3BzX3QgY29yZTk5X3NtcF9vcHMgPSB7CiAJLm1lc3NhZ2VfcGFzcwk9IHNtcF9tcGljX21lc3NhZ2VfcGFzcywKIAkucHJvYmUJCT0gc21wX2NvcmU5OV9wcm9iZSwKKyNpZmRlZiBDT05GSUdfUFBDNjQKIAkuYnJpbmd1cF9kb25lCT0gc21wX2NvcmU5OV9icmluZ3VwX2RvbmUsCisjZW5kaWYKIAkua2lja19jcHUJPSBzbXBfY29yZTk5X2tpY2tfY3B1LAogCS5zZXR1cF9jcHUJPSBzbXBfY29yZTk5X3NldHVwX2NwdSwKIAkuZ2l2ZV90aW1lYmFzZQk9IHNtcF9jb3JlOTlfZ2l2ZV90aW1lYmFzZSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmMKaW5kZXggYjc0YTkyMy4uNTdjZWI5MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmMKQEAgLTc0LDcgKzc0LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKiBUaGUgY29uZmlndXJlIGNvbm5lY3RvciByZXBvcnRlZCBuYW1lIGRvZXMgbm90IGNvbnRhaW4gYQotCSAqIHByZWNlZWRpbmcgJy8nLCBzbyB3ZSBhbGxvY2F0ZSBhIGJ1ZmZlciBsYXJnZSBlbm91Z2ggdG8KKwkgKiBwcmVjZWRpbmcgJy8nLCBzbyB3ZSBhbGxvY2F0ZSBhIGJ1ZmZlciBsYXJnZSBlbm91Z2ggdG8KIAkgKiBwcmVwZW5kIHRoaXMgdG8gdGhlIGZ1bGxfbmFtZS4KIAkgKi8KIAluYW1lID0gKGNoYXIgKiljY3dhICsgY2N3YS0+bmFtZV9vZmZzZXQ7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKaW5kZXggM2NjNGQxMC4uODk2NDkxNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYwpAQCAtNjUsNyArNjUsNyBAQAogICogIHdpdGggRUVILgogICoKICAqICBJZGVhbGx5LCBhIFBDSSBkZXZpY2UgZHJpdmVyLCB3aGVuIHN1c3BlY3RpbmcgdGhhdCBhbiBpc29sYXRpb24KLSAqICBldmVudCBoYXMgb2NjdXJlZCAoZS5nLiBieSByZWFkaW5nIDB4ZmYncyksIHdpbGwgdGhlbiBhc2sgRUVICisgKiAgZXZlbnQgaGFzIG9jY3VycmVkIChlLmcuIGJ5IHJlYWRpbmcgMHhmZidzKSwgd2lsbCB0aGVuIGFzayBFRUgKICAqICB3aGV0aGVyIHRoaXMgaXMgdGhlIGNhc2UsIGFuZCB0aGVuIHRha2UgYXBwcm9wcmlhdGUgc3RlcHMgdG8KICAqICByZXNldCB0aGUgUENJIHNsb3QsIHRoZSBQQ0kgZGV2aWNlLCBhbmQgdGhlbiByZXN1bWUgb3BlcmF0aW9ucy4KICAqICBIb3dldmVyLCB1bnRpbCB0aGF0IGRheSwgIHRoZSBjaGVja2luZyBpcyBkb25lIGhlcmUsIHdpdGggdGhlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1jcHUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLWNwdS5jCmluZGV4IGZkNTBjY2QuLmVmOGM0NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLWNwdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLWNwdS5jCkBAIC0yMTYsNyArMjE2LDcgQEAKIAkJICAgICAgIGNwdSwgcGNwdSwgY3B1X3N0YXR1cyk7CiAJfQogCi0JLyogSXNvbGF0aW9uIGFuZCBkZWFsbG9jYXRpb24gYXJlIGRlZmluYXRseSBkb25lIGJ5CisJLyogSXNvbGF0aW9uIGFuZCBkZWFsbG9jYXRpb24gYXJlIGRlZmluaXRlbHkgZG9uZSBieQogCSAqIGRyc2xvdF9jaHJwX2NwdS4gIElmIHRoZXkgd2VyZSBub3QgdGhleSB3b3VsZCBiZQogCSAqIGRvbmUgaGVyZS4gIENoYW5nZSBpc29sYXRlIHN0YXRlIHRvIElzb2xhdGUgYW5kCiAJICogY2hhbmdlIGFsbG9jYXRpb24tc3RhdGUgdG8gVW51c2FibGUuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCmluZGV4IDE1NGM0NjQuLjZkNTQxMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCkBAIC0yNzIsNyArMjcyLDcgQEAKIAlyZXR1cm4gdGNlX3JldDsKIH0KIAotLyogdGhpcyBpcyBjb21wYXRhYmxlIHdpdGggY2VsbHMgZm9yIHRoZSBkZXZpY2UgdHJlZSBwcm9wZXJ0eSAqLworLyogdGhpcyBpcyBjb21wYXRpYmxlIHdpdGggY2VsbHMgZm9yIHRoZSBkZXZpY2UgdHJlZSBwcm9wZXJ0eSAqLwogc3RydWN0IGR5bmFtaWNfZG1hX3dpbmRvd19wcm9wIHsKIAlfX2JlMzIJbGlvYm47CQkvKiB0Y2UgdGFibGUgbnVtYmVyICovCiAJX19iZTY0CWRtYV9iYXNlOwkvKiBhZGRyZXNzIGhpLGxvICovCkBAIC05NzYsNyArOTc2LDcgQEAKIAlwcl9kZWJ1ZygicGNpX2RtYV9kZXZfc2V0dXBfcFNlcmllc0xQOiAlc1xuIiwgcGNpX25hbWUoZGV2KSk7CiAKIAkvKiBkZXYgc2V0dXAgZm9yIExQQVIgaXMgYSBsaXR0bGUgdHJpY2t5LCBzaW5jZSB0aGUgZGV2aWNlIHRyZWUgbWlnaHQKLQkgKiBjb250YWluIHRoZSBkbWEtd2luZG93IHByb3BlcnRpZXMgcGVyLWRldmljZSBhbmQgbm90IG5lY2Nlc2FyaWx5CisJICogY29udGFpbiB0aGUgZG1hLXdpbmRvdyBwcm9wZXJ0aWVzIHBlci1kZXZpY2UgYW5kIG5vdCBuZWNlc3NhcmlseQogCSAqIGZvciB0aGUgYnVzLiBTbyB3ZSBuZWVkIHRvIHNlYXJjaCB1cHdhcmRzIGluIHRoZSB0cmVlIHVudGlsIHdlCiAJICogZWl0aGVyIGhpdCBhIGRtYS13aW5kb3cgcHJvcGVydHksIE9SIGZpbmQgYSBwYXJlbnQgd2l0aCBhIHRhYmxlCiAJICogYWxyZWFkeSBhbGxvY2F0ZWQuCkBAIC0xMDMzLDcgKzEwMzMsNyBAQAogCiAJCS8qCiAJCSAqIHRoZSBkZXZpY2UgdHJlZSBtaWdodCBjb250YWluIHRoZSBkbWEtd2luZG93IHByb3BlcnRpZXMKLQkJICogcGVyLWRldmljZSBhbmQgbm90IG5lY2Nlc2FyaWx5IGZvciB0aGUgYnVzLiBTbyB3ZSBuZWVkIHRvCisJCSAqIHBlci1kZXZpY2UgYW5kIG5vdCBuZWNlc3NhcmlseSBmb3IgdGhlIGJ1cy4gU28gd2UgbmVlZCB0bwogCQkgKiBzZWFyY2ggdXB3YXJkcyBpbiB0aGUgdHJlZSB1bnRpbCB3ZSBlaXRoZXIgaGl0IGEgZG1hLXdpbmRvdwogCQkgKiBwcm9wZXJ0eSwgT1IgZmluZCBhIHBhcmVudCB3aXRoIGEgdGFibGUgYWxyZWFkeSBhbGxvY2F0ZWQuCiAJCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYwppbmRleCAwMDA3MjQxLi42YzQyY2ZkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYwpAQCAtMjg3LDE0ICsyODcsMjIgQEAKIAlpbnQgY3B1LCByZXQ7CiAJc3RydWN0IHBhY2Ffc3RydWN0ICpwcDsKIAlzdHJ1Y3QgZHRsX2VudHJ5ICpkdGw7CisJc3RydWN0IGttZW1fY2FjaGUgKmR0bF9jYWNoZTsKIAogCWlmICghZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9TUExQQVIpKQogCQlyZXR1cm4gMDsKIAorCWR0bF9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJkdGwiLCBESVNQQVRDSF9MT0dfQllURVMsCisJCQkJCQlESVNQQVRDSF9MT0dfQllURVMsIDAsIE5VTEwpOworCWlmICghZHRsX2NhY2hlKSB7CisJCXByX3dhcm4oIkZhaWxlZCB0byBjcmVhdGUgZGlzcGF0Y2ggdHJhY2UgbG9nIGJ1ZmZlciBjYWNoZVxuIik7CisJCXByX3dhcm4oIlN0b2xlbiB0aW1lIHN0YXRpc3RpY3Mgd2lsbCBiZSB1bnJlbGlhYmxlXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlwcCA9ICZwYWNhW2NwdV07Ci0JCWR0bCA9IGttYWxsb2Nfbm9kZShESVNQQVRDSF9MT0dfQllURVMsIEdGUF9LRVJORUwsCi0JCQkJICAgY3B1X3RvX25vZGUoY3B1KSk7CisJCWR0bCA9IGttZW1fY2FjaGVfYWxsb2MoZHRsX2NhY2hlLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFkdGwpIHsKIAkJCXByX3dhcm4oIkZhaWxlZCB0byBhbGxvY2F0ZSBkaXNwYXRjaCB0cmFjZSBsb2cgZm9yIGNwdSAlZFxuIiwKIAkJCQljcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKaW5kZXggZWM4ZmUyMi4uZDY5MDEzMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCkBAIC04OTcsNyArODk3LDcgQEAKIAkJaW50IHN0YXR1czsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCQkvKiBXZSBjYW50IHNldCBhZmZpbml0eSBvbiBJU0EgaW50ZXJydXB0cyAqLworCQkvKiBXZSBjYW4ndCBzZXQgYWZmaW5pdHkgb24gSVNBIGludGVycnVwdHMgKi8KIAkJaWYgKHZpcnEgPCBOVU1fSVNBX0lOVEVSUlVQVFMpCiAJCQljb250aW51ZTsKIAkJaWYgKGlycV9tYXBbdmlycV0uaG9zdCAhPSB4aWNzX2hvc3QpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2F4b25yYW0uYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvYXhvbnJhbS5jCmluZGV4IDI3NDAyYzdkLi4xNjM2ZGQ4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2F4b25yYW0uYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2F4b25yYW0uYwpAQCAtOTUsNyArOTUsNyBAQAogCiAJQlVHX09OKCFiYW5rKTsKIAotCWRldl9lcnIoJmRldmljZS0+ZGV2LCAiQ29ycmVjdGFibGUgbWVtb3J5IGVycm9yIG9jY3VyZWRcbiIpOworCWRldl9lcnIoJmRldmljZS0+ZGV2LCAiQ29ycmVjdGFibGUgbWVtb3J5IGVycm9yIG9jY3VycmVkXG4iKTsKIAliYW5rLT5lY2NfY291bnRlcisrOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvYmVzdGNvbW0vYmVzdGNvbW0uaCBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvYmVzdGNvbW0vYmVzdGNvbW0uaAppbmRleCAyM2E5NWY4Li5hMGUyZTZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2Jlc3Rjb21tL2Jlc3Rjb21tLmgKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9iZXN0Y29tbS9iZXN0Y29tbS5oCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBzdHJ1Y3QgYmNvbV9iZCAtIFN0cnVjdHVyZSBkZXNjcmliaW5nIGEgZ2VuZXJpYyBCZXN0Q29tbSBidWZmZXIgZGVzY3JpcHRvcgogICogQHN0YXR1czogVGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoaXMgYnVmZmVyLiBFeGFjdCBtZWFuaW5nIGRlcGVuZHMgb24gdGhlCiAgKiAgICAgICAgICB0YXNrIHR5cGUKLSAqIEBkYXRhOiBBbiBhcnJheSBvZiB1MzIgZXh0cmEgZGF0YS4gIFNpemUgb2YgYXJyYXkgaXMgdGFzayBkZXBlbmRhbnQuCisgKiBAZGF0YTogQW4gYXJyYXkgb2YgdTMyIGV4dHJhIGRhdGEuICBTaXplIG9mIGFycmF5IGlzIHRhc2sgZGVwZW5kZW50LgogICoKICAqIE5vdGU6IERvbid0IGRlcmVmZXJlbmNlIGEgYmNvbV9iZCBwb2ludGVyIGFzIGFuIGFycmF5LiAgVGhlIHNpemUgb2YgdGhlCiAgKiAgICAgICBiY29tX2JkIGlzIHZhcmlhYmxlLiAgVXNlIGJjb21fZ2V0X2JkKCkgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvYmVzdGNvbW0vYmVzdGNvbW1fcHJpdi5oIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9iZXN0Y29tbS9iZXN0Y29tbV9wcml2LmgKaW5kZXggZWIwZDFjOC4uM2I1MmYzZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9iZXN0Y29tbS9iZXN0Y29tbV9wcml2LmgKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9iZXN0Y29tbS9iZXN0Y29tbV9wcml2LmgKQEAgLTk3LDcgKzk3LDcgQEAKIAl1OAlyZXNlcnZlZFs4XTsKIH07CiAKLS8qIERlc2NyaXB0b3JzIHN0dWN0dXJlICYgY28gKi8KKy8qIERlc2NyaXB0b3JzIHN0cnVjdHVyZSAmIGNvICovCiAjZGVmaW5lIEJDT01fREVTQ19OT1AJCTB4MDAwMDAxZjgKICNkZWZpbmUgQkNPTV9MQ0RfTUFTSwkJMHg4MDAwMDAwMAogI2RlZmluZSBCQ09NX0RSRF9FWFRFTkRFRAkweDQwMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCmluZGV4IDhiNWFiYTIuLmUwYmM5NDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCkBAIC0yMjMsNyArMjIzLDcgQEAKIAogCS8qIFNldCBTRE1BIEJ1cyBSZXF1ZXN0IHByaW9yaXR5IDUuCiAJICogT24gODYwVCwgdGhpcyBhbHNvIGVuYWJsZXMgRkVDIHByaW9yaXR5IDYuICBJIGFtIG5vdCBzdXJlCi0JICogdGhpcyBpcyB3aGF0IHdlIHJlYWx5IHdhbnQgZm9yIHNvbWUgYXBwbGljYXRpb25zLCBidXQgdGhlCisJICogdGhpcyBpcyB3aGF0IHdlIHJlYWxseSB3YW50IGZvciBzb21lIGFwcGxpY2F0aW9ucywgYnV0IHRoZQogCSAqIG1hbnVhbCByZWNvbW1lbmRzIGl0LgogCSAqIEJpdCAyNSwgRkFNIGNhbiBhbHNvIGJlIHNldCB0byB1c2UgRkVDIGFnZ3Jlc3NpdmUgbW9kZSAoODYwVCkuCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9tc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCmluZGV4IGQ1Njc5ZGMuLjAxY2QyZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCkBAIC0zMDQsOCArMzA0LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZzbF9vZl9tc2lfaWRzW107CiBzdGF0aWMgaW50IF9fZGV2aW5pdCBmc2xfb2ZfbXNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKIAlzdHJ1Y3QgZnNsX21zaSAqbXNpOwogCXN0cnVjdCByZXNvdXJjZSByZXM7CiAJaW50IGVyciwgaSwgaiwgaXJxX2luZGV4LCBjb3VudDsKQEAgLTMxNiw5ICszMTgsMTAgQEAKIAl1MzIgb2Zmc2V0OwogCXN0YXRpYyBjb25zdCB1MzIgYWxsX2F2YWlsW10gPSB7IDAsIE5SX01TSV9JUlFTIH07CiAKLQlpZiAoIWRldi0+ZGV2Lm9mX21hdGNoKQorCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKGZzbF9vZl9tc2lfaWRzLCAmZGV2LT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwotCWZlYXR1cmVzID0gZGV2LT5kZXYub2ZfbWF0Y2gtPmRhdGE7CisJZmVhdHVyZXMgPSBtYXRjaC0+ZGF0YTsKIAogCXByaW50ayhLRVJOX0RFQlVHICJTZXR0aW5nIHVwIEZyZWVzY2FsZSBNU0kgc3VwcG9ydFxuIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMKaW5kZXggZjhmN2YyOC4uNjhjYTkyOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMKQEAgLTMyNCw2ICszMjQsMTEgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgcnNyYzsKIAljb25zdCBpbnQgKmJ1c19yYW5nZTsKIAorCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShkZXYpKSB7CisJCXByX3dhcm5pbmcoIiVzOiBkaXNhYmxlZFxuIiwgZGV2LT5mdWxsX25hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKIAlwcl9kZWJ1ZygiQWRkaW5nIFBDSSBob3N0IGJyaWRnZSAlc1xuIiwgZGV2LT5mdWxsX25hbWUpOwogCiAJLyogRmV0Y2ggaG9zdCBicmlkZ2UgcmVnaXN0ZXJzIGFkZHJlc3MgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3Jpby5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcmlvLmMKaW5kZXggMTQyMzJkNS4uNDk3OTg1MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcmlvLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcmlvLmMKQEAgLTE0NTcsNyArMTQ1Nyw2IEBACiAJcG9ydC0+b3BzID0gb3BzOwogCXBvcnQtPnByaXYgPSBwcml2OwogCXBvcnQtPnBoeXNfZWZwdHIgPSAweDEwMDsKLQlyaW9fcmVnaXN0ZXJfbXBvcnQocG9ydCk7CiAKIAlwcml2LT5yZWdzX3dpbiA9IGlvcmVtYXAocmVncy5zdGFydCwgcmVncy5lbmQgLSByZWdzLnN0YXJ0ICsgMSk7CiAJcmlvX3JlZ3Nfd2luID0gcHJpdi0+cmVnc193aW47CkBAIC0xNTA0LDYgKzE1MDMsOSBAQAogCWRldl9pbmZvKCZkZXYtPmRldiwgIlJhcGlkSU8gQ29tbW9uIFRyYW5zcG9ydCBTeXN0ZW0gc2l6ZTogJWRcbiIsCiAJCQlwb3J0LT5zeXNfc2l6ZSA/IDY1NTM2IDogMjU2KTsKIAorCWlmIChyaW9fcmVnaXN0ZXJfbXBvcnQocG9ydCkpCisJCWdvdG8gZXJyOworCiAJaWYgKHBvcnQtPmhvc3RfZGV2aWNlaWQgPj0gMCkKIAkJb3V0X2JlMzIocHJpdi0+cmVnc193aW4gKyBSSU9fR0NDU1IsIFJJT19QT1JUX0dFTl9IT1NUIHwKIAkJCVJJT19QT1JUX0dFTl9NQVNURVIgfCBSSU9fUE9SVF9HRU5fRElTQ09WRVJFRCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2luZGlyZWN0X3BjaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9pbmRpcmVjdF9wY2kuYwppbmRleCA3ZWQ4MDk2Li44MmZkYWQ4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2luZGlyZWN0X3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaW5kaXJlY3RfcGNpLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogCQlvdXRfbGUzMihob3NlLT5jZmdfYWRkciwgKDB4ODAwMDAwMDAgfCAoYnVzX25vIDw8IDE2KSB8CiAJCQkgKGRldmZuIDw8IDgpIHwgcmVnIHwgY2ZnX3R5cGUpKTsKIAotCS8qIHN1cnByZXNzIHNldHRpbmcgb2YgUENJX1BSSU1BUllfQlVTICovCisJLyogc3VwcHJlc3Mgc2V0dGluZyBvZiBQQ0lfUFJJTUFSWV9CVVMgKi8KIAlpZiAoaG9zZS0+aW5kaXJlY3RfdHlwZSAmIFBQQ19JTkRJUkVDVF9UWVBFX1NVUlBSRVNTX1BSSU1BUllfQlVTKQogCQlpZiAoKG9mZnNldCA9PSBQQ0lfUFJJTUFSWV9CVVMpICYmCiAJCQkoYnVzLT5udW1iZXIgPT0gaG9zZS0+Zmlyc3RfYnVzbm8pKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmggYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9wY2kuaAppbmRleCA1NmQ5ZTVkLi5jMzlhMTM0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9wY2kuaAorKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9wY2kuaApAQCAtMzI0LDcgKzMyNCw3IEBACiAjZGVmaW5lIFBFU0RSMF80NjBFWF9JSFMyCQkweDAzNkQKIAogLyoKLSAqIDQ2MFNYIGFkZHRpb25hbCBEQ1JzCisgKiA0NjBTWCBhZGRpdGlvbmFsIERDUnMKICAqLwogI2RlZmluZSBQRVNEUm5fNDYwU1hfUkNFSQkJMHgwMgogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3BybmcuYyBiL2FyY2gvczM5MC9jcnlwdG8vcHJuZy5jCmluZGV4IDk3NWUzYWIuLjhiMTZjNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vcHJuZy5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vcHJuZy5jCkBAIC03Niw3ICs3Niw3IEBACiAKIAkvKiBBZGQgdGhlIGVudHJvcHkgKi8KIAl3aGlsZSAobmJ5dGVzID49IDgpIHsKLQkJKigoX191NjQgKilwYXJtX2Jsb2NrKSBePSAqKChfX3U2NCAqKWJ1ZitpKjgpOworCQkqKChfX3U2NCAqKXBhcm1fYmxvY2spIF49ICooKF9fdTY0ICopKGJ1ZitpKSk7CiAJCXBybmdfYWRkX2VudHJvcHkoKTsKIAkJaSArPSA4OwogCQluYnl0ZXMgLT0gODsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hdG9taWMuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCA1YzViYTEwLi5kOWRiMTM4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2F0b21pYy5oCkBAIC05LDcgKzksNyBAQAogICoKICAqIEF0b21pYyBvcGVyYXRpb25zIHRoYXQgQyBjYW4ndCBndWFyYW50ZWUgdXMuCiAgKiBVc2VmdWwgZm9yIHJlc291cmNlIGNvdW50aW5nIGV0Yy4KLSAqIHMzOTAgdXNlcyAnQ29tcGFyZSBBbmQgU3dhcCcgZm9yIGF0b21pY2l0eSBpbiBTTVAgZW52aXJvbWVudC4KKyAqIHMzOTAgdXNlcyAnQ29tcGFyZSBBbmQgU3dhcCcgZm9yIGF0b21pY2l0eSBpbiBTTVAgZW52aXJvbm1lbnQuCiAgKgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jaW8uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jaW8uaAppbmRleCBlMzQzNDdkLi5mYzUwYTMzNCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Npby5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jaW8uaApAQCAtMTgzLDcgKzE4Myw3IEBACiAgKiBUaGUgaXJiIHRoYXQgaXMgaGFuZGVkIHRvIHRoZSBkZXZpY2UgZHJpdmVyIHdoZW4gYW4gaW50ZXJydXB0IG9jY3Vycy4gRm9yCiAgKiBzb2xpY2l0ZWQgaW50ZXJydXB0cywgdGhlIGNvbW1vbiBJL08gbGF5ZXIgYWxyZWFkeSBwZXJmb3JtcyBjaGVja3Mgd2hldGhlcgogICogYSBmaWVsZCBpcyB2YWxpZDsgYSBmaWVsZCBub3QgYmVpbmcgdmFsaWQgaXMgYWx3YXlzIHBhc3NlZCBhcyAlMC4KLSAqIElmIGEgdW5pdCBjaGVjayBvY2N1cmVkLCBAZWN3IG1heSBjb250YWluIHNlbnNlIGRhdGE7IHRoaXMgaXMgcmV0cmlldmVkCisgKiBJZiBhIHVuaXQgY2hlY2sgb2NjdXJyZWQsIEBlY3cgbWF5IGNvbnRhaW4gc2Vuc2UgZGF0YTsgdGhpcyBpcyByZXRyaWV2ZWQKICAqIGJ5IHRoZSBjb21tb24gSS9PIGxheWVyIGl0c2VsZiBpZiB0aGUgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBjb25jdXJyZW50CiAgKiBzZW5zZSAoc28gdGhhdCB0aGUgZGV2aWNlIGRyaXZlciBuZXZlciBuZWVkcyB0byBwZXJmb3JtIGJhc2ljIHNlbmUgaXRzZWxmKS4KICAqIEZvciB1bnNvbGljaXRlZCBpbnRlcnJ1cHRzLCB0aGUgaXJiIGlzIHBhc3NlZCBhcy1pcyAoZXhwZWN0IGZvciBzZW5zZSBkYXRhLApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2RpYWcuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kaWFnLmgKaW5kZXggNzJiMmUyZi4uN2U5MWM1OCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2RpYWcuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZGlhZy5oCkBAIC05LDkgKzksMjIgQEAKICNkZWZpbmUgX0FTTV9TMzkwX0RJQUdfSAogCiAvKgotICogRGlhZ25vc2UgMTA6IFJlbGVhc2UgcGFnZXMKKyAqIERpYWdub3NlIDEwOiBSZWxlYXNlIHBhZ2UgcmFuZ2UKICAqLwotZXh0ZXJuIHZvaWQgZGlhZzEwKHVuc2lnbmVkIGxvbmcgYWRkcik7CitzdGF0aWMgaW5saW5lIHZvaWQgZGlhZzEwX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG51bV9wZm4pCit7CisJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyLCBlbmRfYWRkcjsKKworCXN0YXJ0X2FkZHIgPSBzdGFydF9wZm4gPDwgUEFHRV9TSElGVDsKKwllbmRfYWRkciA9IChzdGFydF9wZm4gKyBudW1fcGZuIC0gMSkgPDwgUEFHRV9TSElGVDsKKworCWFzbSB2b2xhdGlsZSgKKwkJIjA6CWRpYWcJJTAsJTEsMHgxMFxuIgorCQkiMTpcbiIKKwkJRVhfVEFCTEUoMGIsIDFiKQorCQlFWF9UQUJMRSgxYiwgMWIpCisJCTogOiAiYSIgKHN0YXJ0X2FkZHIpLCAiYSIgKGVuZF9hZGRyKSk7Cit9CiAKIC8qCiAgKiBEaWFnbm9zZSAxNDogSW5wdXQgc3Bvb2wgZmlsZSBtYW5pcHVsYXRpb24KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggYTZmMGU3Yy4uOGMyNzdjYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTIzLDcgKzIzLDcgQEAKICNpZmRlZiBDT05GSUdfNjRCSVQKIAltbS0+Y29udGV4dC5hc2NlX2JpdHMgfD0gX0FTQ0VfVFlQRV9SRUdJT04zOwogI2VuZGlmCi0JaWYgKGN1cnJlbnQtPm1tLT5jb250ZXh0LmFsbG9jX3Bnc3RlKSB7CisJaWYgKGN1cnJlbnQtPm1tICYmIGN1cnJlbnQtPm1tLT5jb250ZXh0LmFsbG9jX3Bnc3RlKSB7CiAJCS8qCiAJCSAqIGFsbG9jX3Bnc3RlIGluZGljYXRlcywgdGhhdCBhbnkgTkVXIGNvbnRleHQgd2lsbCBiZSBjcmVhdGVkCiAJCSAqIHdpdGggZXh0ZW5kZWQgcGFnZSB0YWJsZXMuIFRoZSBvbGQgY29udGV4dCBpcyB1bmNoYW5nZWQuIFRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9kaWFnLmMgYi9hcmNoL3MzOTAva2VybmVsL2RpYWcuYwppbmRleCBjMDMyZDExLi44MjM3ZmMwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2RpYWcuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2RpYWcuYwpAQCAtOSwyNyArOSw2IEBACiAjaW5jbHVkZSA8YXNtL2RpYWcuaD4KIAogLyoKLSAqIERpYWdub3NlIDEwOiBSZWxlYXNlIHBhZ2VzCi0gKi8KLXZvaWQgZGlhZzEwKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlpZiAoYWRkciA+PSAweDdmZjAwMDAwKQotCQlyZXR1cm47Ci0JYXNtIHZvbGF0aWxlKAotI2lmZGVmIENPTkZJR182NEJJVAotCQkiCXNhbTMxXG4iCi0JCSIJZGlhZwklMCwlMCwweDEwXG4iCi0JCSIwOglzYW02NFxuIgotI2Vsc2UKLQkJIglkaWFnCSUwLCUwLDB4MTBcbiIKLQkJIjA6XG4iCi0jZW5kaWYKLQkJRVhfVEFCTEUoMGIsIDBiKQotCQk6IDogImEiIChhZGRyKSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGRpYWcxMCk7Ci0KLS8qCiAgKiBEaWFnbm9zZSAxNDogSW5wdXQgc3Bvb2wgZmlsZSBtYW5pcHVsYXRpb24KICAqLwogaW50IGRpYWcxNCh1bnNpZ25lZCBsb25nIHJ4LCB1bnNpZ25lZCBsb25nIHJ5MSwgdW5zaWduZWQgbG9uZyBzdWJjb2RlKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9kaXMuYyBiL2FyY2gvczM5MC9rZXJuZWwvZGlzLmMKaW5kZXggYzgzNzI2Yy4uM2Q0YTc4ZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9kaXMuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2Rpcy5jCkBAIC02NzIsNiArNjcyLDcgQEAKIAl7ICJycCIsIDB4NzcsIElOU1RSX1NfUkQgfSwKIAl7ICJzdGNrZSIsIDB4NzgsIElOU1RSX1NfUkQgfSwKIAl7ICJzYWNmIiwgMHg3OSwgSU5TVFJfU19SRCB9LAorCXsgInNwcCIsIDB4ODAsIElOU1RSX1NfUkQgfSwKIAl7ICJzdHNpIiwgMHg3ZCwgSU5TVFJfU19SRCB9LAogCXsgInNybm0iLCAweDk5LCBJTlNUUl9TX1JEIH0sCiAJeyAic3RmcGMiLCAweDljLCBJTlNUUl9TX1JEIH0sCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMKaW5kZXggNjQ4ZjY0Mi4uMWI2N2ZjNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUwpAQCAtODM2LDcgKzgzNiw3IEBACiAJc3Rvc20JX19TRl9FTVBUWSglcjE1KSwweDA0CSMgbm93IHdlIGNhbiB0dXJuIGRhdCBvbgogCWJhc3IJJXIxNCwwCiAJbAklcjE0LHJlc3RhcnRfYWRkci0uKCVyMTQpCi0JYnIJJXIxNAkJCSMgYnJhbmNoIHRvIHN0YXJ0X3NlY29uZGFyeQorCWJhc3IJJXIxNCwlcjE0CQkjIGJyYW5jaCB0byBzdGFydF9zZWNvbmRhcnkKIHJlc3RhcnRfYWRkcjoKIAkubG9uZwlzdGFydF9zZWNvbmRhcnkKIAkuYWxpZ24JOApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUwppbmRleCA5ZDM2MDNkLi45ZmQ4NjQ1IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUwpAQCAtODQxLDcgKzg0MSw3IEBACiAJbXZjCV9fTENfU1lTVEVNX1RJTUVSKDgpLF9fVElfc3lzdGVtX3RpbWVyKCVyMSkKIAl4YwlfX0xDX1NURUFMX1RJTUVSKDgpLF9fTENfU1RFQUxfVElNRVIKIAlzdG9zbQlfX1NGX0VNUFRZKCVyMTUpLDB4MDQJIyBub3cgd2UgY2FuIHR1cm4gZGF0IG9uCi0JamcJc3RhcnRfc2Vjb25kYXJ5CisJYnJhc2wJJXIxNCxzdGFydF9zZWNvbmRhcnkKIAkuYWxpZ24JOAogcmVzdGFydF92dGltZToKIAkubG9uZwkweDdmZmZmZmZmLDB4ZmZmZmZmZmYKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKaW5kZXggNzA2MTM5OC4uZmIzMTdiZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKQEAgLTQ2MCw3ICs0NjAsNyBAQAogI2lmbmRlZiBDT05GSUdfTUFSQ0hfRzUKIAkjIGNoZWNrIGNhcGFiaWxpdGllcyBhZ2FpbnN0IE1BUkNIX3tHNSxaOTAwLFo5OTAsWjlfMTA5LFoxMH0KIAl4YwlfX0xDX1NURkxfRkFDX0xJU1QoOCksX19MQ19TVEZMX0ZBQ19MSVNUCi0Jc3RmbAlfX0xDX1NURkxfRkFDX0xJU1QJIyBzdG9yZSBmYWNpbGl0eSBsaXN0CisJLmluc24JcywweGIyYjEwMDAwLF9fTENfU1RGTF9GQUNfTElTVAkjIHN0b3JlIGZhY2lsaXR5IGxpc3QKIAl0bQlfX0xDX1NURkxfRkFDX0xJU1QsMHgwMQkjIHN0ZmxlIGF2YWlsYWJsZSA/CiAJanoJMGYKIAlsYQklcjAsMApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMgYi9hcmNoL3MzOTAva2VybmVsL3JlaXBsNjQuUwppbmRleCA1ZTczZGVlLi45ZWFiYmM5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3JlaXBsNjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3JlaXBsNjQuUwpAQCAtNzgsNyArNzgsNyBAQAogICogaW4gdGhlIEVTQSBwc3cuCiAgKiBCaXQgMzEgb2YgdGhlIGFkZHJlc3NlcyBoYXMgdG8gYmUgMCBmb3IgdGhlCiAgKiAzMWJpdCBscHN3ZSBpbnN0cnVjdGlvbiBhIGZhY3QgdGhleSBhcHBlYXIgdG8gaGF2ZQotICogb21taXRlZCBmcm9tIHRoZSBwb3AuCisgKiBvbWl0dGVkIGZyb20gdGhlIHBvcC4KICAqLwogLkxuZXdwc3c6CS5xdWFkCTB4MDAwMDAwMDA4MDAwMDAwMAogCQkucXVhZAkuTHBnMQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCmluZGV4IGVkMTgzYzIuLmY1NDM0ZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKQEAgLTcwOCw3ICs3MDgsNyBAQAogCSAqIGFuZCAxVUxMPDwwIGFzIGJpdCA2My4gQml0cyAwLTMxIGNvbnRhaW4gdGhlIHNhbWUgaW5mb3JtYXRpb24KIAkgKiBhcyBzdG9yZWQgYnkgc3RmbCwgYml0cyAzMi14eHggY29udGFpbiBhZGRpdGlvbmFsIGZhY2lsaXRpZXMuCiAJICogSG93IG1hbnkgZmFjaWxpdHkgd29yZHMgYXJlIHN0b3JlZCBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YKLQkgKiBkb3VibGV3b3JkcyBwYXNzZWQgdG8gdGhlIGluc3RydWN0aW9uLiBUaGUgYWRkaXRpb25hbCBmYWNpbGl0ZXMKKwkgKiBkb3VibGV3b3JkcyBwYXNzZWQgdG8gdGhlIGluc3RydWN0aW9uLiBUaGUgYWRkaXRpb25hbCBmYWNpbGl0aWVzCiAJICogYXJlOgogCSAqICAgQml0IDQyOiBkZWNpbWFsIGZsb2F0aW5nIHBvaW50IGZhY2lsaXR5IGlzIGluc3RhbGxlZAogCSAqICAgQml0IDQ0OiBwZXJmb3JtIGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbiBmYWNpbGl0eSBpcyBpbnN0YWxsZWQKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc3dpdGNoX2NwdS5TIGIvYXJjaC9zMzkwL2tlcm5lbC9zd2l0Y2hfY3B1LlMKaW5kZXggNDY5ZjExYi4uMjA1MzBkZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zd2l0Y2hfY3B1LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zd2l0Y2hfY3B1LlMKQEAgLTQ2LDcgKzQ2LDkgQEAKIAlsdHIJJXI0LCVyNAkJCS8qIE5ldyBzdGFjayA/ICovCiAJanoJMWYKIAlscgklcjE1LCVyNAotMToJYmFzcgklcjE0LCVyMgorMToJbHIJJXIxNCwlcjIJCS8qIHIxNDogRnVuY3Rpb24gdG8gY2FsbCAqLworCWxyCSVyMiwlcjMJCQkvKiByMiA6IFBhcmFtZXRlciBmb3IgZnVuY3Rpb24qLworCWJhc3IJJXIxNCwlcjE0CQkvKiBDYWxsIGZ1bmN0aW9uICovCiAKIC5ncHJyZWdzX2FkZHI6CiAJLmxvbmcJLmdwcnJlZ3MKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc3dpdGNoX2NwdTY0LlMgYi9hcmNoL3MzOTAva2VybmVsL3N3aXRjaF9jcHU2NC5TCmluZGV4IGQ5NGFhY2MuLjViZTNmNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc3dpdGNoX2NwdTY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zd2l0Y2hfY3B1NjQuUwpAQCAtNDIsNyArNDIsOSBAQAogCWx0Z3IJJXI0LCVyNAkJCS8qIE5ldyBzdGFjayA/ICovCiAJanoJMWYKIAlsZ3IJJXIxNSwlcjQKLTE6CWJhc3IJJXIxNCwlcjIKKzE6CWxncgklcjE0LCVyMgkJLyogcjE0OiBGdW5jdGlvbiB0byBjYWxsICovCisJbGdyCSVyMiwlcjMJCQkvKiByMiA6IFBhcmFtZXRlciBmb3IgZnVuY3Rpb24qLworCWJhc3IJJXIxNCwlcjE0CQkvKiBDYWxsIGZ1bmN0aW9uICovCiAKIAkuc2VjdGlvbiAuZGF0YSwiYXciLEBwcm9nYml0cwogLmdwcnJlZ3M6CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RpbWUuYyBiL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCmluZGV4IDllN2IwMzkuLjg3YmU2NTUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCkBAIC03MjQsNyArNzI0LDcgQEAKIH0KIAogLyoKLSAqIFN5bmMgdGhlIFRPRCBjbG9jayB1c2luZyB0aGUgcG9ydCByZWZlcmVkIHRvIGJ5IGFpYnAuIFRoaXMgcG9ydAorICogU3luYyB0aGUgVE9EIGNsb2NrIHVzaW5nIHRoZSBwb3J0IHJlZmVycmVkIHRvIGJ5IGFpYnAuIFRoaXMgcG9ydAogICogaGFzIHRvIGJlIGVuYWJsZWQgYW5kIHRoZSBvdGhlciBwb3J0IGhhcyB0byBiZSBkaXNhYmxlZC4gVGhlCiAgKiBsYXN0IGVhY3IgdXBkYXRlIGhhcyB0byBiZSBtb3JlIHRoYW4gMS42IHNlY29uZHMgaW4gdGhlIHBhc3QuCiAgKi8KQEAgLTEwMTIsNyArMTAxMiw3IEBACiAJCWVhY3IgPSBldHJfaGFuZGxlX3VwZGF0ZSgmYWliLCBlYWNyKTsKIAogCS8qCi0JICogU2VsZWN0IHBvcnRzIHRvIGVuYWJsZS4gVGhlIHByZWZlcmVkIHN5bmNocm9uaXphdGlvbiBtb2RlIGlzIFBQUy4KKwkgKiBTZWxlY3QgcG9ydHMgdG8gZW5hYmxlLiBUaGUgcHJlZmVycmVkIHN5bmNocm9uaXphdGlvbiBtb2RlIGlzIFBQUy4KIAkgKiBJZiBhIHBvcnQgY2FuIGJlIGVuYWJsZWQgZGVwZW5kcyBvbiBhIG51bWJlciBvZiB0aGluZ3M6CiAJICogMSkgVGhlIHBvcnQgbmVlZHMgdG8gYmUgb25saW5lIGFuZCB1cHRvZGF0ZS4gQSBwb3J0IGlzIG5vdAogCSAqICAgIGRpc2FibGVkIGp1c3QgYmVjYXVzZSBpdCBpcyBub3QgdXB0b2RhdGUsIGJ1dCBpdCBpcyBvbmx5CkBAIC0xMDkxLDcgKzEwOTEsNyBAQAogCS8qCiAJICogVXBkYXRlIGVhY3IgYW5kIHRyeSB0byBzeW5jaHJvbml6ZSB0aGUgY2xvY2suIElmIHRoZSB1cGRhdGUKIAkgKiBvZiBlYWNyIGNhdXNlZCBhIHN0ZXBwaW5nIHBvcnQgc3dpdGNoIChvciBpZiB3ZSBoYXZlIHRvCi0JICogYXNzdW1lIHRoYXQgYSBzdGVwcGluZyBwb3J0IHN3aXRjaCBoYXMgb2NjdXJlZCkgb3IgdGhlCisJICogYXNzdW1lIHRoYXQgYSBzdGVwcGluZyBwb3J0IHN3aXRjaCBoYXMgb2NjdXJyZWQpIG9yIHRoZQogCSAqIGNsb2NrIHN5bmNpbmcgZmFpbGVkLCByZXNldCB0aGUgc3luYyBjaGVjayBjb250cm9sIGJpdAogCSAqIGFuZCBzZXQgdXAgYSB0aW1lciB0byB0cnkgYWdhaW4gYWZ0ZXIgMC41IHNlY29uZHMKIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdnRpbWUuYyBiL2FyY2gvczM5MC9rZXJuZWwvdnRpbWUuYwppbmRleCAxY2NkZjRkLi41ZThlYWQ0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3Z0aW1lLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC92dGltZS5jCkBAIC00NCw3ICs0NCw3IEBACiAJX191NjQgdGltZXI7CiAKIAlhc20gdm9sYXRpbGUgKCIgIFNUUFQgJTBcbiIgIC8qIFN0b3JlIGN1cnJlbnQgY3B1IHRpbWVyIHZhbHVlICovCi0JCSAgICAgICIgIFNQVCAlMSIgICAgIC8qIFNldCBuZXcgdmFsdWUgaW1tZWRpYXRseSBhZnRlcndhcmRzICovCisJCSAgICAgICIgIFNQVCAlMSIgICAgIC8qIFNldCBuZXcgdmFsdWUgaW1tZWRpYXRlbHkgYWZ0ZXJ3YXJkcyAqLwogCQkgICAgICA6ICI9bSIgKHRpbWVyKSA6ICJtIiAoZXhwaXJlcykgKTsKIAlTMzkwX2xvd2NvcmUuc3lzdGVtX3RpbWVyICs9IFMzOTBfbG93Y29yZS5sYXN0X3VwZGF0ZV90aW1lciAtIHRpbWVyOwogCVMzOTBfbG93Y29yZS5sYXN0X3VwZGF0ZV90aW1lciA9IGV4cGlyZXM7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKaW5kZXggYmFkZTUzMy4uMzBjYTg1YyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwpAQCAtNzIxLDcgKzcyMSw3IEBACiAKIAkvKgogCSAqIGd1ZXN0cyBjYW4gYXNrIGZvciB1cCB0byAyNTUrMSBkb3VibGUgd29yZHMsIHdlIG5lZWQgYSBmdWxsIHBhZ2UKLQkgKiB0byBob2xkIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBmYWNpbGl0ZXMuIE9uIHRoZSBvdGhlciBoYW5kLCB3ZQorCSAqIHRvIGhvbGQgdGhlIG1heGltdW0gYW1vdW50IG9mIGZhY2lsaXRpZXMuIE9uIHRoZSBvdGhlciBoYW5kLCB3ZQogCSAqIG9ubHkgc2V0IGZhY2lsaXRpZXMgdGhhdCBhcmUga25vd24gdG8gd29yayBpbiBLVk0uCiAJICovCiAJZmFjaWxpdGllcyA9ICh1bnNpZ25lZCBsb25nIGxvbmcgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUx8R0ZQX0RNQSk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ByaXYuYyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jCmluZGV4IDkxOTRhNGIuLjczYzQ3YmQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vcHJpdi5jCisrKyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jCkBAIC0zMTEsNyArMzExLDcgQEAKIAogCS8qCiAJICogYSBsb3Qgb2YgQjIgaW5zdHJ1Y3Rpb25zIGFyZSBwcml2aWxlZGdlZC4gV2UgZmlyc3QgY2hlY2sgZm9yCi0JICogdGhlIHByaXZpbGVkZ2VzIG9uZXMsIHRoYXQgd2UgY2FuIGhhbmRsZSBpbiB0aGUga2VybmVsLiBJZiB0aGUKKwkgKiB0aGUgcHJpdmlsZWdlZCBvbmVzLCB0aGF0IHdlIGNhbiBoYW5kbGUgaW4gdGhlIGtlcm5lbC4gSWYgdGhlCiAJICoga2VybmVsIGNhbiBoYW5kbGUgdGhpcyBpbnN0cnVjdGlvbiwgd2UgY2hlY2sgZm9yIHRoZSBwcm9ibGVtCiAJICogc3RhdGUgYml0IGFuZCAoYSkgaGFuZGxlIHRoZSBpbnN0cnVjdGlvbiBvciAoYikgc2VuZCBhIGNvZGUgMgogCSAqIHByb2dyYW0gY2hlY2suCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3NpZTY0YS5TIGIvYXJjaC9zMzkwL2t2bS9zaWU2NGEuUwppbmRleCA3ZTlkMzBkLi5hYjBlMDQxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3NpZTY0YS5TCisrKyBiL2FyY2gvczM5MC9rdm0vc2llNjRhLlMKQEAgLTQ4LDEwICs0OCwxMCBAQAogCXRtCV9fVElfZmxhZ3MrNyglcjIpLF9USUZfRVhJVF9TSUUKIAlqegkwZgogCWxhcmwJJXIyLHNpZV9leGl0CQkJIyB3b3JrIHBlbmRpbmcsIGxlYXZlIHNpZQotCXN0ZwklcjIsX19MQ19SRVRVUk5fUFNXKzgKKwlzdGcJJXIyLFNQSV9QU1crOCgwLCVyMTUpCiAJYnIJJXIxNAogMDoJbGFybAklcjIsc2llX3JlZW50ZXIJCQkjIHJlLWVudGVyIHdpdGggZ3Vlc3QgaWQKLQlzdGcJJXIyLF9fTENfUkVUVVJOX1BTVys4CisJc3RnCSVyMixTUElfUFNXKzgoMCwlcjE1KQogMToJYnIJJXIxNAogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2NtbS5jIGIvYXJjaC9zMzkwL21tL2NtbS5jCmluZGV4IGM2NmZmZDguLjFmMWRiYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9jbW0uYworKysgYi9hcmNoL3MzOTAvbW0vY21tLmMKQEAgLTkxLDcgKzkxLDcgQEAKIAkJCX0gZWxzZQogCQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgbnBhKTsKIAkJfQotCQlkaWFnMTAoYWRkcik7CisJCWRpYWcxMF9yYW5nZShhZGRyID4+IFBBR0VfU0hJRlQsIDEpOwogCQlwYS0+cGFnZXNbcGEtPmluZGV4KytdID0gYWRkcjsKIAkJKCpjb3VudGVyKSsrOwogCQlzcGluX3VubG9jaygmY21tX2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwppbmRleCAyYzU3ODA2Li5hYjk4ODEzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vZmF1bHQuYworKysgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwpAQCAtMzkyLDcgKzM5Miw3IEBACiB7CiAJaW50IGZhdWx0OwogCi0JLyogUHJvdGVjdGlvbiBleGNlcHRpb24gaXMgc3VwcmVzc2luZywgZGVjcmVtZW50IHBzdyBhZGRyZXNzLiAqLworCS8qIFByb3RlY3Rpb24gZXhjZXB0aW9uIGlzIHN1cHByZXNzaW5nLCBkZWNyZW1lbnQgcHN3IGFkZHJlc3MuICovCiAJcmVncy0+cHN3LmFkZHIgLT0gKHBnbV9pbnRfY29kZSA+PiAxNik7CiAJLyoKIAkgKiBDaGVjayBmb3IgbG93LWFkZHJlc3MgcHJvdGVjdGlvbi4gIFRoaXMgbmVlZHMgdG8gYmUgdHJlYXRlZApAQCAtNTQzLDcgKzU0Myw2IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CiAJX191MTYgc3ViY29kZTsKIAotCWtzdGF0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpLmlycXNbRVhUSU5UX1BGTF0rKzsKIAkvKgogCSAqIEdldCB0aGUgZXh0ZXJuYWwgaW50ZXJydXB0aW9uIHN1YmNvZGUgJiBwZmF1bHQKIAkgKiBpbml0aWFsL2NvbXBsZXRpb24gc2lnbmFsIGJpdC4gVk0gc3RvcmVzIHRoaXMgCkBAIC01NTMsMTQgKzU1MiwxNSBAQAogCXN1YmNvZGUgPSBleHRfaW50X2NvZGUgPj4gMTY7CiAJaWYgKChzdWJjb2RlICYgMHhmZjAwKSAhPSBfX1NVQkNPREVfTUFTSykKIAkJcmV0dXJuOworCWtzdGF0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpLmlycXNbRVhUSU5UX1BGTF0rKzsKIAogCS8qCiAJICogR2V0IHRoZSB0b2tlbiAoPSBhZGRyZXNzIG9mIHRoZSB0YXNrIHN0cnVjdHVyZSBvZiB0aGUgYWZmZWN0ZWQgdGFzaykuCiAJICovCiAjaWZkZWYgQ09ORklHXzY0QklUCi0JdHNrID0gKihzdHJ1Y3QgdGFza19zdHJ1Y3QgKiopIHBhcmFtNjQ7CisJdHNrID0gKHN0cnVjdCB0YXNrX3N0cnVjdCAqKSBwYXJhbTY0OwogI2Vsc2UKLQl0c2sgPSAqKHN0cnVjdCB0YXNrX3N0cnVjdCAqKikgcGFyYW0zMjsKKwl0c2sgPSAoc3RydWN0IHRhc2tfc3RydWN0ICopIHBhcmFtMzI7CiAjZW5kaWYKIAogCWlmIChzdWJjb2RlICYgMHgwMDgwKSB7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vcGFnZWF0dHIuYyBiL2FyY2gvczM5MC9tbS9wYWdlYXR0ci5jCmluZGV4IDEyMmZmYmQuLjA2MDdlNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9wYWdlYXR0ci5jCisrKyBiL2FyY2gvczM5MC9tbS9wYWdlYXR0ci5jCkBAIC0yNCwxMiArMjQsMTMgQEAKIAkJCVdBUk5fT05fT05DRSgxKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCXB0ZXAgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCBhZGRyICsgaSAqIFBBR0VfU0laRSk7CisJCXB0ZXAgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCBhZGRyKTsKIAogCQlwdGUgPSAqcHRlcDsKIAkJcHRlID0gc2V0KHB0ZSk7Ci0JCXB0ZXBfaW52YWxpZGF0ZSgmaW5pdF9tbSwgYWRkciArIGkgKiBQQUdFX1NJWkUsIHB0ZXApOworCQlwdGVwX2ludmFsaWRhdGUoJmluaXRfbW0sIGFkZHIsIHB0ZXApOwogCQkqcHRlcCA9IHB0ZTsKKwkJYWRkciArPSBQQUdFX1NJWkU7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvb3Byb2ZpbGUvaHdzYW1wbGVyLmMgYi9hcmNoL3MzOTAvb3Byb2ZpbGUvaHdzYW1wbGVyLmMKaW5kZXggM2Q0OGY0ZC4uMzNjYmQzNyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL29wcm9maWxlL2h3c2FtcGxlci5jCisrKyBiL2FyY2gvczM5MC9vcHJvZmlsZS9od3NhbXBsZXIuYwpAQCAtNTE3LDEyICs1MTcsOCBAQAogCiBzdGF0aWMgaW50IGNoZWNrX2hhcmR3YXJlX3ByZXJlcXVpc2l0ZXModm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgZmFjaWxpdHlfYml0c1syXTsKLQotCW1lbWNweShmYWNpbGl0eV9iaXRzLCBTMzkwX2xvd2NvcmUuc3RmbGVfZmFjX2xpc3QsIDMyKTsKLQlpZiAoIShmYWNpbGl0eV9iaXRzWzFdICYgKDFVTEwgPDwgNTkpKSkKKwlpZiAoIXRlc3RfZmFjaWxpdHkoNjgpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KIAlyZXR1cm4gMDsKIH0KIC8qCkBAIC0xMDI1LDIwICsxMDIxLDE0IEBACiAJcmV0dXJuIHJjOwogfQogCi1sb25nIGh3c2FtcGxlcl9xdWVyeV9taW5faW50ZXJ2YWwodm9pZCkKK3Vuc2lnbmVkIGxvbmcgaHdzYW1wbGVyX3F1ZXJ5X21pbl9pbnRlcnZhbCh2b2lkKQogewotCWlmIChtaW5fc2FtcGxlcl9yYXRlKQotCQlyZXR1cm4gbWluX3NhbXBsZXJfcmF0ZTsKLQllbHNlCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBtaW5fc2FtcGxlcl9yYXRlOwogfQogCi1sb25nIGh3c2FtcGxlcl9xdWVyeV9tYXhfaW50ZXJ2YWwodm9pZCkKK3Vuc2lnbmVkIGxvbmcgaHdzYW1wbGVyX3F1ZXJ5X21heF9pbnRlcnZhbCh2b2lkKQogewotCWlmIChtYXhfc2FtcGxlcl9yYXRlKQotCQlyZXR1cm4gbWF4X3NhbXBsZXJfcmF0ZTsKLQllbHNlCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBtYXhfc2FtcGxlcl9yYXRlOwogfQogCiB1bnNpZ25lZCBsb25nIGh3c2FtcGxlcl9nZXRfc2FtcGxlX292ZXJmbG93X2NvdW50KHVuc2lnbmVkIGludCBjcHUpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvb3Byb2ZpbGUvaHdzYW1wbGVyLmggYi9hcmNoL3MzOTAvb3Byb2ZpbGUvaHdzYW1wbGVyLmgKaW5kZXggOGM3MmI1OS4uMTkxMmYzYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL29wcm9maWxlL2h3c2FtcGxlci5oCisrKyBiL2FyY2gvczM5MC9vcHJvZmlsZS9od3NhbXBsZXIuaApAQCAtMTAyLDggKzEwMiw4IEBACiBpbnQgaHdzYW1wbGVyX3NodXRkb3duKHZvaWQpOwogaW50IGh3c2FtcGxlcl9hbGxvY2F0ZSh1bnNpZ25lZCBsb25nIHNkYnQsIHVuc2lnbmVkIGxvbmcgc2RiKTsKIGludCBod3NhbXBsZXJfZGVhbGxvY2F0ZSh2b2lkKTsKLWxvbmcgaHdzYW1wbGVyX3F1ZXJ5X21pbl9pbnRlcnZhbCh2b2lkKTsKLWxvbmcgaHdzYW1wbGVyX3F1ZXJ5X21heF9pbnRlcnZhbCh2b2lkKTsKK3Vuc2lnbmVkIGxvbmcgaHdzYW1wbGVyX3F1ZXJ5X21pbl9pbnRlcnZhbCh2b2lkKTsKK3Vuc2lnbmVkIGxvbmcgaHdzYW1wbGVyX3F1ZXJ5X21heF9pbnRlcnZhbCh2b2lkKTsKIGludCBod3NhbXBsZXJfc3RhcnRfYWxsKHVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwpOwogaW50IGh3c2FtcGxlcl9zdG9wX2FsbCh2b2lkKTsKIGludCBod3NhbXBsZXJfZGVhY3RpdmF0ZSh1bnNpZ25lZCBpbnQgY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9vcHJvZmlsZS9pbml0LmMgYi9hcmNoL3MzOTAvb3Byb2ZpbGUvaW5pdC5jCmluZGV4IGM2M2Q3ZTUuLjU5OTVlOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9vcHJvZmlsZS9pbml0LmMKKysrIGIvYXJjaC9zMzkwL29wcm9maWxlL2luaXQuYwpAQCAtMTQ1LDE1ICsxNDUsMTEgQEAKIAkgKiBjcmVhdGUgaHdzYW1wbGVyIGZpbGVzIG9ubHkgaWYgaHdzYW1wbGVyX3NldHVwKCkgc3VjY2VlZHMuCiAJICovCiAJb3Byb2ZpbGVfbWluX2ludGVydmFsID0gaHdzYW1wbGVyX3F1ZXJ5X21pbl9pbnRlcnZhbCgpOwotCWlmIChvcHJvZmlsZV9taW5faW50ZXJ2YWwgPCAwKSB7Ci0JCW9wcm9maWxlX21pbl9pbnRlcnZhbCA9IDA7CisJaWYgKG9wcm9maWxlX21pbl9pbnRlcnZhbCA9PSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiAJb3Byb2ZpbGVfbWF4X2ludGVydmFsID0gaHdzYW1wbGVyX3F1ZXJ5X21heF9pbnRlcnZhbCgpOwotCWlmIChvcHJvZmlsZV9tYXhfaW50ZXJ2YWwgPCAwKSB7Ci0JCW9wcm9maWxlX21heF9pbnRlcnZhbCA9IDA7CisJaWYgKG9wcm9maWxlX21heF9pbnRlcnZhbCA9PSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiAKIAlpZiAob3Byb2ZpbGVfdGltZXJfaW5pdChvcHMpKQogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2FyY2gvc2NvcmUvTWFrZWZpbGUgYi9hcmNoL3Njb3JlL01ha2VmaWxlCmluZGV4IGQ3N2RjNjMuLjk3NGFlZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2NvcmUvTWFrZWZpbGUKKysrIGIvYXJjaC9zY29yZS9NYWtlZmlsZQpAQCAtNDAsNSArNDAsNSBAQAogZGVmaW5lIGFyY2hoZWxwCiAJZWNobyAnICB2bWxpbnV4LmJpbiAgICAgICAgICAtIFJhdyBiaW5hcnkgYm9vdCBpbWFnZScKIAllY2hvCi0JZWNobyAnICBUaGVzZSB3aWxsIGJlIGRlZmF1bHQgYXMgYXByb3ByaWF0ZSBmb3IgYSBjb25maWd1cmVkIHBsYXRmb3JtLicKKwllY2hvICcgIFRoZXNlIHdpbGwgYmUgZGVmYXVsdCBhcyBhcHByb3ByaWF0ZSBmb3IgYSBjb25maWd1cmVkIHBsYXRmb3JtLicKIGVuZGVmCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggYmM0MzlkZS4uNGI4OWRhMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMjQsNiArMjQsNyBAQAogCXNlbGVjdCBSVENfTElCCiAJc2VsZWN0IEdFTkVSSUNfQVRPTUlDNjQKIAlzZWxlY3QgR0VORVJJQ19JUlFfU0hPVworCXNlbGVjdCBBUkNIX05PX1NZU0RFVl9PUFMKIAloZWxwCiAJICBUaGUgU3VwZXJIIGlzIGEgUklTQyBwcm9jZXNzb3IgdGFyZ2V0ZWQgZm9yIHVzZSBpbiBlbWJlZGRlZCBzeXN0ZW1zCiAJICBhbmQgY29uc3VtZXIgZWxlY3Ryb25pY3M7IGl0IHdhcyBhbHNvIHVzZWQgaW4gdGhlIFNlZ2EgRHJlYW1jYXN0CmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcuZGVidWcgYi9hcmNoL3NoL0tjb25maWcuZGVidWcKaW5kZXggMTJmZWM3Mi4uMTU1M2Q1NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvc2gvS2NvbmZpZy5kZWJ1ZwpAQCAtODIsNyArODIsNyBAQAogCWhlbHAKIAkgIElmIHJ1bm5pbmcgaW4gcGFpbmZ1bGx5IHNsb3cgZW52aXJvbm1lbnRzLCBzdWNoIGFzIGFuIFJUTAogCSAgc2ltdWxhdGlvbiBvciBmcm9tIHJlbW90ZSBtZW1vcnkgdmlhIFNIZGVidWcsIHdoZXJlIHRoZSBtZW1vcnkKLQkgIGNhbiBhbHJlYWR5IGJlIGdhdXJhbnRlZWQgdG8gYmVyIHplcm9lZCBvbiBib290LCBzYXkgWS4KKwkgIGNhbiBhbHJlYWR5IGJlIGd1YXJhbnRlZWQgdG8gYmVyIHplcm9lZCBvbiBib290LCBzYXkgWS4KIAogCSAgRm9yIGFsbCBvdGhlciBjYXNlcywgc2F5IE4uIElmIHRoaXMgb3B0aW9uIHNlZW1zIHBlcnBsZXhpbmcsIG9yCiAJICB5b3UgYXJlbid0IHN1cmUsIHNheSBOLgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3NzU3bGNyLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3NTdsY3IuYwppbmRleCBhOWUzMzU2Li5mYTJhMjA4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3NTdsY3IuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3NTdsY3IuYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvc2hfbW1jaWYuaD4KLSNpbmNsdWRlIDxsaW51eC9tZmQvc2hfbW9iaWxlX3NkaGkuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvc2hfbW9iaWxlX3NkaGkuaD4KICNpbmNsdWRlIDxjcHUvc2g3NzU3Lmg+CiAjaW5jbHVkZSA8YXNtL3NoX2V0aC5oPgogI2luY2x1ZGUgPGFzbS9oZWFydGJlYXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtYXAzMjVyeGEvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtYXAzMjVyeGEvc2V0dXAuYwppbmRleCA2MzZkODMxLi42MThiZDU2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWFwMzI1cnhhL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1hcDMyNXJ4YS9zZXR1cC5jCkBAIC0xNTYsMjQgKzE1NiwzNCBAQAogI2RlZmluZSBQT1JUX0RSVkNSQQkweEE0MDUwMThBCiAjZGVmaW5lIFBPUlRfRFJWQ1JCCTB4QTQwNTAxOEMKIAorc3RhdGljIGludCBhcDMyMF93dmdhX3NldF9icmlnaHRuZXNzKHZvaWQgKmJvYXJkX2RhdGEsIGludCBicmlnaHRuZXNzKQoreworCWlmIChicmlnaHRuZXNzKSB7CisJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRTMywgMCk7CisJCV9fcmF3X3dyaXRldygweDEwMCwgRlBHQV9CS0xSRUcpOworCX0gZWxzZSB7CisJCV9fcmF3X3dyaXRldygwLCBGUEdBX0JLTFJFRyk7CisJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRTMywgMSk7CisJfQorCQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFwMzIwX3d2Z2FfZ2V0X2JyaWdodG5lc3Modm9pZCAqYm9hcmRfZGF0YSkKK3sKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19QVFMzKTsKK30KKwogc3RhdGljIHZvaWQgYXAzMjBfd3ZnYV9wb3dlcl9vbih2b2lkICpib2FyZF9kYXRhLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAltc2xlZXAoMTAwKTsKIAogCS8qIEFTRCBBUC0zMjAvMzI1IExDRCBPTiAqLwogCV9fcmF3X3dyaXRldyhGUEdBX0xDRFJFR19WQUwsIEZQR0FfTENEUkVHKTsKLQotCS8qIGJhY2tsaWdodCAqLwotCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRTMywgMCk7Ci0JX19yYXdfd3JpdGV3KDB4MTAwLCBGUEdBX0JLTFJFRyk7CiB9CiAKIHN0YXRpYyB2b2lkIGFwMzIwX3d2Z2FfcG93ZXJfb2ZmKHZvaWQgKmJvYXJkX2RhdGEpCiB7Ci0JLyogYmFja2xpZ2h0ICovCi0JX19yYXdfd3JpdGV3KDAsIEZQR0FfQktMUkVHKTsKLQlncGlvX3NldF92YWx1ZShHUElPX1BUUzMsIDEpOwotCiAJLyogQVNEIEFQLTMyMC8zMjUgTENEIE9GRiAqLwogCV9fcmF3X3dyaXRldygwLCBGUEdBX0xDRFJFRyk7CiB9CkBAIC0yMDksNiArMjE5LDEyIEBACiAJCS5ib2FyZF9jZmcgPSB7CiAJCQkuZGlzcGxheV9vbiA9IGFwMzIwX3d2Z2FfcG93ZXJfb24sCiAJCQkuZGlzcGxheV9vZmYgPSBhcDMyMF93dmdhX3Bvd2VyX29mZiwKKwkJCS5zZXRfYnJpZ2h0bmVzcyA9IGFwMzIwX3d2Z2Ffc2V0X2JyaWdodG5lc3MsCisJCQkuZ2V0X2JyaWdodG5lc3MgPSBhcDMyMF93dmdhX2dldF9icmlnaHRuZXNzLAorCQl9LAorCQkuYmxfaW5mbyA9IHsKKwkJCS5uYW1lID0gInNoX21vYmlsZV9sY2RjX2JsIiwKKwkJCS5tYXhfYnJpZ2h0bmVzcyA9IDEsCiAJCX0sCiAJfQogfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3QvaXJxLmMKaW5kZXggNzhjZjJhYi4uZjYzZDMyMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3QvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3QvaXJxLmMKQEAgLTUxLDcgKzUxLDcgQEAKICAqLwogI2RlZmluZSBMRVZFTChldmVudCkgKCgoZXZlbnQpIC0gSFdfRVZFTlRfSVJRX0JBU0UpIC8gMzIpCiAKLS8qIFJldHVybiB0aGUgaGFyZHdhcmUgZXZlbnQncyBiaXQgcG9zaXRvbiB3aXRoaW4gdGhlIEVNUi9FU1IgKi8KKy8qIFJldHVybiB0aGUgaGFyZHdhcmUgZXZlbnQncyBiaXQgcG9zaXRpb24gd2l0aGluIHRoZSBFTVIvRVNSICovCiAjZGVmaW5lIEVWRU5UX0JJVChldmVudCkgKCgoZXZlbnQpIC0gSFdfRVZFTlRfSVJRX0JBU0UpICYgMzEpCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKaW5kZXggZmQ0ZmYyNS4uODZhMGQ1NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYwpAQCAtMjYzLDYgKzI2MywxOCBAQAogCX0sCiB9OwogCitzdGF0aWMgaW50IGVjb3ZlYzI0X3NldF9icmlnaHRuZXNzKHZvaWQgKmJvYXJkX2RhdGEsIGludCBicmlnaHRuZXNzKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRSMSwgYnJpZ2h0bmVzcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlY292ZWMyNF9nZXRfYnJpZ2h0bmVzcyh2b2lkICpib2FyZF9kYXRhKQoreworCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPX1BUUjEpOworfQorCiBzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9sY2RjX2luZm8gbGNkY19pbmZvID0gewogCS5jaFswXSA9IHsKIAkJLmludGVyZmFjZV90eXBlID0gUkdCMTgsCkBAIC0yNzMsNiArMjg1LDEyIEBACiAJCQkuaGVpZ2h0ID0gOTEsCiAJCX0sCiAJCS5ib2FyZF9jZmcgPSB7CisJCQkuc2V0X2JyaWdodG5lc3MgPSBlY292ZWMyNF9zZXRfYnJpZ2h0bmVzcywKKwkJCS5nZXRfYnJpZ2h0bmVzcyA9IGVjb3ZlYzI0X2dldF9icmlnaHRuZXNzLAorCQl9LAorCQkuYmxfaW5mbyA9IHsKKwkJCS5uYW1lID0gInNoX21vYmlsZV9sY2RjX2JsIiwKKwkJCS5tYXhfYnJpZ2h0bmVzcyA9IDEsCiAJCX0sCiAJfQogfTsKQEAgLTkzNiw3ICs5NTQsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JLyogcmVhZCBNQUMgYWRkcmVzcyBmcm9tZSBFRVBST00gKi8KKwkvKiByZWFkIE1BQyBhZGRyZXNzIGZyb20gRUVQUk9NICovCiAJZm9yIChpID0gMDsgaSA8IHNpemVvZihwZC0+bWFjX2FkZHIpOyBpKyspIHsKIAkJcGQtPm1hY19hZGRyW2ldID0gbWFjX3JlYWQoYSwgMHgxMCArIGkpOwogCQltc2xlZXAoMTApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svc2V0dXAuYwppbmRleCA5NDE4NmNmLi5mMTE0N2NhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svc2V0dXAuYwpAQCAtMjMsNyArMjMsNyBAQAogCiBzdGF0aWMgdm9pZCBsYW5kaXNrX3Bvd2VyX29mZih2b2lkKQogewotICAgICAgICBfX3Jhd193cml0ZWIoMHgwMSwgUEFfU0hVVERPV04pOworCV9fcmF3X3dyaXRlYigweDAxLCBQQV9TSFVURE9XTik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2ZfaWRlX3Jlc291cmNlc1szXTsKQEAgLTg1LDcgKzg1LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGxhbmRpc2tfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKLSAgICAgICAgLyogTEVEIE9OICovCisJLyogTEVEIE9OICovCiAJX19yYXdfd3JpdGViKF9fcmF3X3JlYWRiKFBBX0xFRCkgfCAweDAzLCBQQV9MRUQpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiSS1PIERBVEEgREVWSUNFLCBJTkMuIFwiTEFORElTSyBTZXJpZXNcIiBzdXBwb3J0LlxuIik7CkBAIC05Nyw3ICs5Nyw2IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfbGFuZGlzayBfX2luaXRtdiA9IHsKIAkubXZfbmFtZSA9ICJMQU5ESVNLIiwKLQkubXZfbnJfaXJxcyA9IDcyLAogCS5tdl9zZXR1cCA9IGxhbmRpc2tfc2V0dXAsCiAJLm12X2luaXRfaXJxID0gaW5pdF9sYW5kaXNrX0lSUSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3NTEuaCBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc1MS5oCmluZGV4IDQ5ODNhNGQuLjVlZGUzOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc1MS5oCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc1MS5oCkBAIC02MSw3ICs2MSw3IEBACiAgICNkZWZpbmUgU0g3NzUxX1BDSUNPTkYzX0JJU1Q3ICAgICAgMHg4MDAwMDAwMCAgLyogQmlzdCBTdXBwb3J0ZWQgKi8KICAgI2RlZmluZSBTSDc3NTFfUENJQ09ORjNfQklTVDYgICAgICAweDQwMDAwMDAwICAvKiBCaXN0IEV4ZWN1dGluZyAqLwogICAjZGVmaW5lIFNINzc1MV9QQ0lDT05GM19CSVNUM18wICAgIDB4MEYwMDAwMDAgIC8qIEJpc3QgUGFzc2VkICovCi0gICNkZWZpbmUgU0g3NzUxX1BDSUNPTkYzX0hENyAgICAgICAgMHgwMDgwMDAwMCAgLyogU2luZ2xlIEZ1bnRpb24gZGV2aWNlICovCisgICNkZWZpbmUgU0g3NzUxX1BDSUNPTkYzX0hENyAgICAgICAgMHgwMDgwMDAwMCAgLyogU2luZ2xlIEZ1bmN0aW9uIGRldmljZSAqLwogICAjZGVmaW5lIFNINzc1MV9QQ0lDT05GM19IRDZfMCAgICAgIDB4MDA3RjAwMDAgIC8qIENvbmZpZ3VyYXRpb24gTGF5b3V0ICovCiAgICNkZWZpbmUgU0g3NzUxX1BDSUNPTkYzX0xBVCAgICAgICAgMHgwMDAwRkYwMCAgLyogTGF0ZW5jeSBUaW1lciAqLwogICAjZGVmaW5lIFNINzc1MV9QQ0lDT05GM19DTFMgICAgICAgIDB4MDAwMDAwRkYgIC8qIENhY2hlIExpbmUgU2l6ZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2kuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLmMKaW5kZXggYTA5Yzc3ZC4uMTk0MjMxYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS5jCkBAIC04NCw3ICs4NCw3IEBACiAJaG9zZV90YWlsID0gJmhvc2UtPm5leHQ7CiAKIAkvKgotCSAqIERvIG5vdCBwYW5pYyBoZXJlIGJ1dCBsYXRlciAtIHRoaXMgbWlnaHQgaGFwZW4gYmVmb3JlIGNvbnNvbGUgaW5pdC4KKwkgKiBEbyBub3QgcGFuaWMgaGVyZSBidXQgbGF0ZXIgLSB0aGlzIG1pZ2h0IGhhcHBlbiBiZWZvcmUgY29uc29sZSBpbml0LgogCSAqLwogCWlmICghaG9zZS0+aW9fbWFwX2Jhc2UpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCBjNGUwYjNkLi44MjJkNjA4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMTg2LDcgKzE4Niw3IEBACiAvKgogICogV2hpbGUgQllURVNfUEVSX1dPUkQgPT0gNCBvbiB0aGUgY3VycmVudCBzaDY0IEFCSSwgR0NDIHdpbGwgc3RpbGwKICAqIGhhcHBpbHkgZ2VuZXJhdGUge2xkL3N0fS5xIHBhaXJzLCByZXF1aXJpbmcgdXMgdG8gaGF2ZSA4LWJ5dGUKLSAqIGFsaWdubWVudCB0byBhdm9pZCB0cmFwcy4gVGhlIGttYWxsb2MgYWxpZ25tZW50IGlzIGdhdXJhbnRlZWQgYnkKKyAqIGFsaWdubWVudCB0byBhdm9pZCB0cmFwcy4gVGhlIGttYWxsb2MgYWxpZ25tZW50IGlzIGd1YXJhbnRlZWQgYnkKICAqIHZpcnR1ZSBvZiBMMV9DQUNIRV9CWVRFUywgcmVxdWlyaW5nIHRoaXMgdG8gb25seSBiZSBzcGVjaWFsIGNhc2VkCiAgKiBmb3Igc2xhYiBjYWNoZXMuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgKaW5kZXggYjc5OWZlNy4uMGJjZTNkOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgKQEAgLTE2Nyw3ICsxNjcsNyBAQAogI2VuZGlmCiAKIC8qCi0gKiBNYXNrIG9mIGJpdHMgdGhhdCBhcmUgdG8gYmUgcHJlc2VydmVkIGFjY3Jvc3MgcGdwcm90IGNoYW5nZXMuCisgKiBNYXNrIG9mIGJpdHMgdGhhdCBhcmUgdG8gYmUgcHJlc2VydmVkIGFjcm9zcyBwZ3Byb3QgY2hhbmdlcy4KICAqLwogI2RlZmluZSBfUEFHRV9DSEdfTUFTSyBcCiAJKFBURV9NQVNLIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9DQUNIQUJMRSB8IFwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdW5hbGlnbmVkLXNoNGEuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdW5hbGlnbmVkLXNoNGEuaAppbmRleCBjNDhhOWMzLi45NWFkYzUwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3VuYWxpZ25lZC1zaDRhLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS91bmFsaWduZWQtc2g0YS5oCkBAIC05LDcgKzksNyBAQAogICogc3RydWN0LgogICoKICAqIFRoZSBzYW1lIG5vdGUgYXMgd2l0aCB0aGUgbW92bGkubC9tb3Zjby5sIHBhaXIgYXBwbGllcyBoZXJlLCBhcyBsb25nCi0gKiBhcyB0aGUgbG9hZCBpcyBnYXVyYW50ZWVkIHRvIGJlIGlubGluZWQsIG5vdGhpbmcgZWxzZSB3aWxsIGhvb2sgaW4gdG8KKyAqIGFzIHRoZSBsb2FkIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5saW5lZCwgbm90aGluZyBlbHNlIHdpbGwgaG9vayBpbiB0bwogICogcjAgYW5kIHdlIGdldCB0aGUgcmV0dXJuIHZhbHVlIGZvciBmcmVlLgogICoKICAqIE5PVEU6IER1ZSB0byB0aGUgZmFjdCB3ZSByZXF1aXJlIHIwIGVuY29kaW5nLCBjYXJlIHNob3VsZCBiZSB0YWtlbiB0bwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvaGlnaGxhbmRlci5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvaGlnaGxhbmRlci5oCmluZGV4IDVkOWQ0ZDUuLjZjZTk0NGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL2hpZ2hsYW5kZXIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9oaWdobGFuZGVyLmgKQEAgLTI0LDcgKzI0LDcgQEAKICNkZWZpbmUgUEFfT0JMRUQgICAgICAgIChQQV9CQ1IrMHgwMDFjKSAvKiBPbiBCb2FyZCBMRUQgY29udHJvbCAqLwogI2RlZmluZSBQQV9PQlNXICAgICAgICAgKFBBX0JDUisweDAwMWUpIC8qIE9uIEJvYXJkIFN3aXRjaCBjb250cm9sICovCiAjZGVmaW5lIFBBX0FVRElPU0VMICAgICAoUEFfQkNSKzB4MDAyMCkgLyogU291bmQgSW50ZXJmYWNlIFNlbGVjdCBjb250cm9sICovCi0jZGVmaW5lIFBBX0VYVFBMUiAgICAgICAoUEFfQkNSKzB4MDAxZSkgLyogRXh0ZW50aW9uIFBpbiBQb2xhcml0eSBjb250cm9sICovCisjZGVmaW5lIFBBX0VYVFBMUiAgICAgICAoUEFfQkNSKzB4MDAxZSkgLyogRXh0ZW5zaW9uIFBpbiBQb2xhcml0eSBjb250cm9sICovCiAjZGVmaW5lIFBBX1RQQ1RMICAgICAgICAoUEFfQkNSKzB4MDEwMCkgLyogVG91Y2ggUGFuZWwgQWNjZXNzIGNvbnRyb2wgKi8KICNkZWZpbmUgUEFfVFBEQ0tDVEwgICAgIChQQV9CQ1IrMHgwMTAyKSAvKiBUb3VjaCBQYW5lbCBBY2Nlc3MgZGF0YSBjb250cm9sICovCiAjZGVmaW5lIFBBX1RQQ1RMQ0xSICAgICAoUEFfQkNSKzB4MDEwNCkgLyogVG91Y2ggUGFuZWwgQWNjZXNzIGNvbnRyb2wgKi8KQEAgLTg5LDcgKzg5LDcgQEAKICNkZWZpbmUgUEFfT0JMRUQJKFBBX0JDUisweDAwMTgpCS8qIE9uIEJvYXJkIExFRCBjb250cm9sICovCiAjZGVmaW5lIFBBX09CU1cJCShQQV9CQ1IrMHgwMDFhKQkvKiBPbiBCb2FyZCBTd2l0Y2ggY29udHJvbCAqLwogI2RlZmluZSBQQV9BVURJT1NFTAkoUEFfQkNSKzB4MDAxYykJLyogU291bmQgSW50ZXJmYWNlIFNlbGVjdCBjb250cm9sICovCi0jZGVmaW5lIFBBX0VYVFBMUgkoUEFfQkNSKzB4MDAxZSkJLyogRXh0ZW50aW9uIFBpbiBQb2xhcml0eSBjb250cm9sICovCisjZGVmaW5lIFBBX0VYVFBMUgkoUEFfQkNSKzB4MDAxZSkJLyogRXh0ZW5zaW9uIFBpbiBQb2xhcml0eSBjb250cm9sICovCiAjZGVmaW5lIFBBX1RQQ1RMCShQQV9CQ1IrMHgwMTAwKQkvKiBUb3VjaCBQYW5lbCBBY2Nlc3MgY29udHJvbCAqLwogI2RlZmluZSBQQV9UUERDS0NUTAkoUEFfQkNSKzB4MDEwMikJLyogVG91Y2ggUGFuZWwgQWNjZXNzIGRhdGEgY29udHJvbCAqLwogI2RlZmluZSBQQV9UUENUTENMUgkoUEFfQkNSKzB4MDEwNCkJLyogVG91Y2ggUGFuZWwgQWNjZXNzIGNvbnRyb2wgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3IyZC5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvcjJkLmgKaW5kZXggMGE4MDAxNS4uZTA0Zjc1ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvcjJkLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvcjJkLmgKQEAgLTE4LDE4ICsxOCwxOCBAQAogI2RlZmluZSBQQV9ESVNQQ1RMCTB4YTQwMDAwMDgJLyogRGlzcGxheSBUaW1pbmcgY29udHJvbCAqLwogI2RlZmluZSBQQV9TRE1QT1cJMHhhNDAwMDAwYQkvKiBTRCBQb3dlciBjb250cm9sICovCiAjZGVmaW5lIFBBX1JUQ0NFCTB4YTQwMDAwMGMJLyogUlRDKDk3MDEpIEVuYWJsZSBjb250cm9sICovCi0jZGVmaW5lIFBBX1BDSUNECTB4YTQwMDAwMGUJLyogUENJIEV4dGVudGlvbiBkZXRlY3QgY29udHJvbCAqLworI2RlZmluZSBQQV9QQ0lDRAkweGE0MDAwMDBlCS8qIFBDSSBFeHRlbnNpb24gZGV0ZWN0IGNvbnRyb2wgKi8KICNkZWZpbmUgUEFfVk9ZQUdFUlJUUwkweGE0MDAwMDIwCS8qIFZPWUFHRVIgUmVzZXQgY29udHJvbCAqLwogCiAjZGVmaW5lIFBBX1IyRDFfQVhSU1QJCTB4YTQwMDAwMjIJLyogQVhfTEFOIFJlc2V0IGNvbnRyb2wgKi8KICNkZWZpbmUgUEFfUjJEMV9DRlJTVAkJMHhhNDAwMDAyNAkvKiBDRiBSZXNldCBjb250cm9sICovCiAjZGVmaW5lIFBBX1IyRDFfQURNUlRTCQkweGE0MDAwMDI2CS8qIFNEIFJlc2V0IGNvbnRyb2wgKi8KLSNkZWZpbmUgUEFfUjJEMV9FWFRSU1QJCTB4YTQwMDAwMjgJLyogRXh0ZW50aW9uIFJlc2V0IGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfUjJEMV9FWFRSU1QJCTB4YTQwMDAwMjgJLyogRXh0ZW5zaW9uIFJlc2V0IGNvbnRyb2wgKi8KICNkZWZpbmUgUEFfUjJEMV9DRkNESU5UQ0xSCTB4YTQwMDAwMmEJLyogQ0YgSW5zZXJ0IEludGVycnVwdCBjbGVhciAqLwogCiAjZGVmaW5lIFBBX1IyRFBMVVNfQ0ZSU1QJMHhhNDAwMDAyMgkvKiBDRiBSZXNldCBjb250cm9sICovCiAjZGVmaW5lIFBBX1IyRFBMVVNfQURNUlRTCTB4YTQwMDAwMjQJLyogU0QgUmVzZXQgY29udHJvbCAqLwotI2RlZmluZSBQQV9SMkRQTFVTX0VYVFJTVAkweGE0MDAwMDI2CS8qIEV4dGVudGlvbiBSZXNldCBjb250cm9sICovCisjZGVmaW5lIFBBX1IyRFBMVVNfRVhUUlNUCTB4YTQwMDAwMjYJLyogRXh0ZW5zaW9uIFJlc2V0IGNvbnRyb2wgKi8KICNkZWZpbmUgUEFfUjJEUExVU19DRkNESU5UQ0xSCTB4YTQwMDAwMjgJLyogQ0YgSW5zZXJ0IEludGVycnVwdCBjbGVhciAqLwogI2RlZmluZSBQQV9SMkRQTFVTX0tFWUNUTENMUgkweGE0MDAwMDJhCS8qIEtleSBJbnRlcnJ1cHQgY2xlYXIgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLWNwZy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLWNwZy5jCmluZGV4IGRkMGUwZjIuLjhmNjNhMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay1jcGcuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2stY3BnLmMKQEAgLTY3LDcgKzY3LDcgQEAKIH0KIAogLyoKLSAqIFBsYWNlaG9sZGVyIGZvciBjb21wYXRhYmlsaXR5LCB1bnRpbCB0aGUgbGF6eSBDUFVzIGRvIHRoaXMKKyAqIFBsYWNlaG9sZGVyIGZvciBjb21wYXRpYmlsaXR5LCB1bnRpbCB0aGUgbGF6eSBDUFVzIGRvIHRoaXMKICAqIG9uIHRoZWlyIG93bi4KICAqLwogaW50IF9faW5pdCBfX3dlYWsgYXJjaF9jbGtfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODYuYwppbmRleCAxNjU2YjhjLi5iZWJhMzJiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODYuYwpAQCAtNjQ4LDcgKzY0OCw3IEBACiAJICogVGhlIGZvbGxvd2luZyBzZXR0aW5ncyBhcmUgbmVjZXNzYXJ5CiAJICogZm9yIHVzaW5nIHRoZSBVU0IgbW9kdWxlcy4KIAkgKgotCSAqIHNlZSAiVVNCIEluaXRhbCBTZXR0aW5ncyIgZm9yIGRldGFpbAorCSAqIHNlZSAiVVNCIEluaXRpYWwgU2V0dGluZ3MiIGZvciBkZXRhaWwKIAkgKi8KIAlfX3Jhd193cml0ZWwoVVNCSU5JVFZBTDEsIFVTQklOSVRSRUcxKTsKIAlfX3Jhd193cml0ZWwoVVNCSU5JVFZBTDIsIFVTQklOSVRSRUcyKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2lycS5jIGIvYXJjaC9zaC9rZXJuZWwvaXJxLmMKaW5kZXggNjRlYTBiMS4uOTE5NzExMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaXJxLmMKQEAgLTE4Myw3ICsxODMsNyBAQAogCQkpOwogCiAJCS8qCi0JCSAqIFNob3VsZG50IGhhcHBlbiwgd2UgcmV0dXJuZWQgYWJvdmUgaWYgaW5faW50ZXJydXB0KCk6CisJCSAqIFNob3VsZG4ndCBoYXBwZW4sIHdlIHJldHVybmVkIGFib3ZlIGlmIGluX2ludGVycnVwdCgpOgogCQkgKi8KIAkJV0FSTl9PTl9PTkNFKHNvZnRpcnFfY291bnQoKSk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYwppbmRleCAyMTMwY2E2Li4zZDdiMjA5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYwpAQCAtMTE3LDcgKzExNywxMSBAQAogCiAJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NJTkdMRVNURVApOwogCisJaWYgKHB0cmFjZV9nZXRfYnJlYWtwb2ludHMoY2hpbGQpIDwgMCkKKwkJcmV0dXJuOworCiAJc2V0X3NpbmdsZV9zdGVwKGNoaWxkLCBwYyk7CisJcHRyYWNlX3B1dF9icmVha3BvaW50cyhjaGlsZCk7CiB9CiAKIHZvaWQgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwppbmRleCA0ZjI2NzE2Li41OGJmZjQ1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NldHVwLmMKQEAgLTE1MCw3ICsxNTAsNyBAQAogCX0KIAogCS8qCi0JICogSWYgd2UgZ290IHRoaXMgZmFyIGluc3BpdGUgb2YgdGhlIGJvb3QgbG9hZGVyJ3MgYmVzdCBlZmZvcnRzCisJICogSWYgd2UgZ290IHRoaXMgZmFyIGluIHNwaXRlIG9mIHRoZSBib290IGxvYWRlcidzIGJlc3QgZWZmb3J0cwogCSAqIHRvIHRoZSBjb250cmFyeSwgYXNzdW1lIHdlIGFjdHVhbGx5IGhhdmUgYSB2YWxpZCBpbml0cmQgYW5kCiAJICogZml4IHVwIHRoZSByb290IGRldi4KIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbGliNjQvY29weV91c2VyX21lbWNweS5TIGIvYXJjaC9zaC9saWI2NC9jb3B5X3VzZXJfbWVtY3B5LlMKaW5kZXggMmE2MjgxNi4uNDlhZWFiZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9saWI2NC9jb3B5X3VzZXJfbWVtY3B5LlMKKysrIGIvYXJjaC9zaC9saWI2NC9jb3B5X3VzZXJfbWVtY3B5LlMKQEAgLTI3LDcgKzI3LDcgQEAKICEgMi46IFdoZW4gdGhlcmUgYXJlIHR3byBvciB0aHJlZSBieXRlcyBpbiB0aGUgbGFzdCB3b3JkIG9mIGFuIDExLW9yLW1vcmUKICEgICAgIGJ5dGVzIG1lbW9yeSBjaHVuayB0byBiIGNvcGllZCwgdGhlIHJlc3Qgb2YgdGhlIHdvcmQgY2FuIGJlIHJlYWQKICEgICAgIHdpdGhvdXQgc2lkZSBlZmZlY3RzLgotISAgICAgVGhpcyBjb3VsZCBiZSBlYXNpbHkgY2hhbmdlZCBieSBpbmNyZWFzaW5nIHRoZSBtaW51bXVtIHNpemUgb2YKKyEgICAgIFRoaXMgY291bGQgYmUgZWFzaWx5IGNoYW5nZWQgYnkgaW5jcmVhc2luZyB0aGUgbWluaW11bSBzaXplIG9mCiAhICAgICBhIGZhc3QgbWVtY3B5IGFuZCB0aGUgYW1vdW50IHN1YnRyYWN0ZWQgZnJvbSByNyBiZWZvcmUgTF8ybF9sb29wIGJlIDIsCiAhICAgICBob3dldmVyLCB0aGlzIHdvdWxkIGNvc3QgYSBmZXcgZXh0cmEgY3lsZXMgb24gYXZlcmFnZS4KICEgICAgIEZvciBTSG1lZGlhLCB0aGUgYXNzdW1wdGlvbiBpcyB0aGF0IGFueSBxdWFkd29yZCBjYW4gYmUgcmVhZCBpbiBpdHMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbGliNjQvbWVtY3B5LlMgYi9hcmNoL3NoL2xpYjY0L21lbWNweS5TCmluZGV4IGRkMzAwYzMuLjVkNjgyZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbGliNjQvbWVtY3B5LlMKKysrIGIvYXJjaC9zaC9saWI2NC9tZW1jcHkuUwpAQCAtMjksNyArMjksNyBAQAogISAyLjogV2hlbiB0aGVyZSBhcmUgdHdvIG9yIHRocmVlIGJ5dGVzIGluIHRoZSBsYXN0IHdvcmQgb2YgYW4gMTEtb3ItbW9yZQogISAgICAgYnl0ZXMgbWVtb3J5IGNodW5rIHRvIGIgY29waWVkLCB0aGUgcmVzdCBvZiB0aGUgd29yZCBjYW4gYmUgcmVhZAogISAgICAgd2l0aG91dCBzaWRlIGVmZmVjdHMuCi0hICAgICBUaGlzIGNvdWxkIGJlIGVhc2lseSBjaGFuZ2VkIGJ5IGluY3JlYXNpbmcgdGhlIG1pbnVtdW0gc2l6ZSBvZgorISAgICAgVGhpcyBjb3VsZCBiZSBlYXNpbHkgY2hhbmdlZCBieSBpbmNyZWFzaW5nIHRoZSBtaW5pbXVtIHNpemUgb2YKICEgICAgIGEgZmFzdCBtZW1jcHkgYW5kIHRoZSBhbW91bnQgc3VidHJhY3RlZCBmcm9tIHI3IGJlZm9yZSBMXzJsX2xvb3AgYmUgMiwKICEgICAgIGhvd2V2ZXIsIHRoaXMgd291bGQgY29zdCBhIGZldyBleHRyYSBjeWxlcyBvbiBhdmVyYWdlLgogISAgICAgRm9yIFNIbWVkaWEsIHRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgYW55IHF1YWR3b3JkIGNhbiBiZSByZWFkIGluIGl0cwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9oeXBlcnZpc29yLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaAppbmRleCBiYWZlNWE2Li43NTY4NjQwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaApAQCAtNjU0LDcgKzY1NCw3IEBACiAgKiBBUkczOgltbXUgY29udGV4dAogICogQVJHNDoJZmxhZ3MgKEhWX01NVV97SU1NVSxETU1VfSkKICAqIFJFVDA6CXN0YXR1cwotICogRVJST1JTOglFSU5WQUwJCQlJbnZhbGlkIHZpcnV0YWwgYWRkcmVzcywgY29udGV4dCwgb3IKKyAqIEVSUk9SUzoJRUlOVkFMCQkJSW52YWxpZCB2aXJ0dWFsIGFkZHJlc3MsIGNvbnRleHQsIG9yCiAgKgkJCQkJZmxhZ3MgdmFsdWUKICAqCQlFTk9UU1VQUE9SVEVECQlBUkcwIG9yIEFSRzEgaXMgbm9uLXplcm8KICAqCkBAIC03MjEsNyArNzIxLDcgQEAKICAqIEFSRzI6CVRURQogICogQVJHMzoJZmxhZ3MgKEhWX01NVV97SU1NVSxETU1VfSkKICAqIFJFVDA6CXN0YXR1cwotICogRVJST1JTOglFSU5WQUwJCQlJbnZhbGlkIHZpcnV0YWwgYWRkcmVzcyBvciBmbGFncyB2YWx1ZQorICogRVJST1JTOglFSU5WQUwJCQlJbnZhbGlkIHZpcnR1YWwgYWRkcmVzcyBvciBmbGFncyB2YWx1ZQogICoJCUVCQURQR1NaCQlJbnZhbGlkIHBhZ2Ugc2l6ZSB2YWx1ZQogICoJCUVOT1JBRERSCQlJbnZhbGlkIHJlYWwgYWRkcmVzcyBpbiBUVEUKICAqCQlFVE9PTUFOWQkJVG9vIG1hbnkgbWFwcGluZ3MgKG1heCBvZiA4IHJlYWNoZWQpCkBAIC04MDAsNyArODAwLDcgQEAKICAqIEFSRzE6CXJlc2VydmVkLCBtdXN0IGJlIHplcm8KICAqIEFSRzI6CWZsYWdzIChIVl9NTVVfe0lNTVUsRE1NVX0pCiAgKiBSRVQwOglzdGF0dXMKLSAqIEVSUk9SUzoJRUlOVkFMCQkJSW52YWxpZCB2aXJ1dGFsIGFkZHJlc3Mgb3IgZmxhZ3MgdmFsdWUKKyAqIEVSUk9SUzoJRUlOVkFMCQkJSW52YWxpZCB2aXJ0dWFsIGFkZHJlc3Mgb3IgZmxhZ3MgdmFsdWUKICAqCQlFTk9NQVAJCQlTcGVjaWZpZWQgbWFwcGluZyB3YXMgbm90IGZvdW5kCiAgKgogICogRGVtYXBzIGFueSBwZXJtYW5lbnQgcGFnZSBtYXBwaW5nIChlc3RhYmxpc2hlZCB2aWEKQEAgLTEyMDUsNyArMTIwNSw3IEBACiAgKiBzdHJ1Y3R1cmUgY29udGVudHMuICBBdHRlbXB0cyB0byBkbyBzbyB3aWxsIHJlc3VsdCBpbiB1bmRlZmluZWQKICAqIGJlaGF2aW9yIGZvciB0aGUgZ3Vlc3QuCiAgKgotICogRWFjaCB0cmFwIHRyYWNlIGJ1ZmZlciBlbnRyeSBpcyBsYXllZCBvdXQgYXMgZm9sbG93czoKKyAqIEVhY2ggdHJhcCB0cmFjZSBidWZmZXIgZW50cnkgaXMgbGFpZCBvdXQgYXMgZm9sbG93czoKICAqLwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIHN0cnVjdCBodl90cmFwX3RyYWNlX2VudHJ5IHsKQEAgLTEzMDAsNyArMTMwMCw3IEBACiAgKiBzdGF0ZSBpbiBSRVQxLiAgRnV0dXJlIHN5c3RlbXMgbWF5IGRlZmluZSB2YXJpb3VzIGZsYWdzIGZvciB0aGUKICAqIGVuYWJsZSBhcmd1bWVudCAoQVJHMCksIGZvciB0aGUgbW9tZW50IGEgZ3Vlc3Qgc2hvdWxkIHBhc3MKICAqICIodWludDY0X3QpIC0xIiB0byBlbmFibGUsIGFuZCAiKHVpbnQ2NF90KSAwIiB0byBkaXNhYmxlIGFsbAotICogdHJhY2luZyAtIHdoaWNoIHdpbGwgZW5zdXJlIGZ1dHVyZSBjb21wYXRhYmlsaXR5LgorICogdHJhY2luZyAtIHdoaWNoIHdpbGwgZW5zdXJlIGZ1dHVyZSBjb21wYXRpYmlsaXR5LgogICovCiAjZGVmaW5lIEhWX0ZBU1RfVFRSQUNFX0VOQUJMRQkJMHg5MgogCkBAIC0xODgwLDcgKzE4ODAsNyBAQAogICogcGNpX2RldmljZSwgYXQgcGNpX2NvbmZpZ19vZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkZXZpY2UncwogICogY29uZmlndXJhdGlvbiBzcGFjZS4gIElmIHRoZXJlIHdhcyBubyBlcnJvciwgUkVUMSBpcyBzZXQgdG8gemVybyBhbmQKICAqIFJFVDIgaXMgc2V0IHRvIHRoZSBkYXRhIHJlYWQuICBJbnNpZ25pZmljYW50IGJpdHMgaW4gUkVUMiBhcmUgbm90Ci0gKiBndWFyZW50ZWVkIHRvIGhhdmUgYW55IHNwZWNpZmljIHZhbHVlIGFuZCB0aGVyZWZvcmUgbXVzdCBiZSBpZ25vcmVkLgorICogZ3VhcmFudGVlZCB0byBoYXZlIGFueSBzcGVjaWZpYyB2YWx1ZSBhbmQgdGhlcmVmb3JlIG11c3QgYmUgaWdub3JlZC4KICAqCiAgKiBUaGUgZGF0YSByZXR1cm5lZCBpbiBSRVQyIGlzIHNpemUgYmFzZWQgYnl0ZSBzd2FwcGVkLgogICoKQEAgLTE5NDEsOSArMTk0MSw5IEBACiAgKiBhbmQgcmV0dXJuIHRoZSBhY3R1YWwgZGF0YSByZWFkIGluIFJFVDIuICBUaGUgZGF0YSByZXR1cm5lZCBpcyBzaXplIGJhc2VkCiAgKiBieXRlIHN3YXBwZWQuCiAgKgotICogTm9uLXNpZ25pZmljYW50IGJpdHMgaW4gUkVUMiBhcmUgbm90IGd1YXJlbnRlZWQgdG8gaGF2ZSBhbnkgc3BlY2lmaWMgdmFsdWUKKyAqIE5vbi1zaWduaWZpY2FudCBiaXRzIGluIFJFVDIgYXJlIG5vdCBndWFyYW50ZWVkIHRvIGhhdmUgYW55IHNwZWNpZmljIHZhbHVlCiAgKiBhbmQgdGhlcmVmb3JlIG11c3QgYmUgaWdub3JlZC4gIElmIFJFVDEgaXMgcmV0dXJuZWQgYXMgbm9uLXplcm8sIHRoZSBkYXRhCi0gKiB2YWx1ZSBpcyBub3QgZ3VhcmVudGVlZCB0byBoYXZlIGFueSBzcGVjaWZpYyB2YWx1ZSBhbmQgc2hvdWxkIGJlIGlnbm9yZWQuCisgKiB2YWx1ZSBpcyBub3QgZ3VhcmFudGVlZCB0byBoYXZlIGFueSBzcGVjaWZpYyB2YWx1ZSBhbmQgc2hvdWxkIGJlIGlnbm9yZWQuCiAgKgogICogVGhlIGNhbGxlciBtdXN0IGhhdmUgcGVybWlzc2lvbiB0byByZWFkIGZyb20gdGhlIGdpdmVuIGRldmhhbmRsZSwgcmVhbAogICogYWRkcmVzcywgd2hpY2ggbXVzdCBiZSBhbiBJTyBhZGRyZXNzLiAgVGhlIGFyZ3VtZW50IHJlYWwgYWRkcmVzcyBtdXN0IGJlIGEKQEAgLTI0NTYsOSArMjQ1Niw5IEBACiAgKgogICogQXMgcmVjZWl2ZSBxdWV1ZSBjb25maWd1cmF0aW9uIGNhdXNlcyBhIHJlc2V0IG9mIHRoZSBxdWV1ZSdzIGhlYWQgYW5kCiAgKiB0YWlsIHBvaW50ZXJzIHRoZXJlIGlzIG5vIHdheSBmb3IgYSBndWVzIHRvIGRldGVybWluZSBob3cgbWFueSBlbnRyaWVzCi0gKiBoYXZlIGJlZW4gcmVjZWl2ZWQgYmV0d2VlbiBhIHByZWNlZWRpbmcgbGRjX2dldF9yeF9zdGF0ZSgpIEFQSSBjYWxsCisgKiBoYXZlIGJlZW4gcmVjZWl2ZWQgYmV0d2VlbiBhIHByZWNlZGluZyBsZGNfZ2V0X3J4X3N0YXRlKCkgQVBJIGNhbGwKICAqIGFuZCB0aGUgY29tcGxldGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBvcGVyYXRpb24uICBJdCBzaG91bGQgYmUgbm90ZWQKLSAqIHRoYXQgZGF0YWdyYW0gZGVsaXZlcnkgaXMgbm90IGd1YXJlbnRlZWQgdmlhIGRvbWFpbiBjaGFubmVscyBhbnl3YXksCisgKiB0aGF0IGRhdGFncmFtIGRlbGl2ZXJ5IGlzIG5vdCBndWFyYW50ZWVkIHZpYSBkb21haW4gY2hhbm5lbHMgYW55d2F5LAogICogYW5kIHRoZXJlZm9yZSBhbnkgaGlnaGVyIHByb3RvY29sIHNob3VsZCBiZSByZXNpbGllbnQgdG8gZGF0YWdyYW0KICAqIGxvc3MgaWYgbmVjZXNzYXJ5LiAgSG93ZXZlciwgdG8gb3ZlcmNvbWUgdGhpcyBzcGVjaWZpYyByYWNlIHBvdGVudGlhbAogICogaXQgaXMgcmVjb21tZW5kZWQsIGZvciBleGFtcGxlLCB0aGF0IGEgaGlnaGVyIGxldmVsIHByb3RvY29sIGJlIGVtcGxveWVkCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL25zODczMDMuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbnM4NzMwMy5oCmluZGV4IDY4NmRlZmUuLmFmNzU1NDggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbnM4NzMwMy5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbnM4NzMwMy5oCkBAIC0zNyw3ICszNyw3IEBACiAvKiBQb3dlciBhbmQgVGVzdCBSZWdpc3RlciAoUFRSKSBiaXRzICovCiAjZGVmaW5lIFBUUl9MUFRCX0lSUTcJMHgwOAogI2RlZmluZSBQVFJfTEVWRUxfSVJRCTB4ODAJLyogV2hlbiBub3QgRUNQL0VQUDogVXNlIGxldmVsIElSUSAgICAgICAgICAgKi8KLSNkZWZpbmUgUFRSX0xQVF9SRUdfRElSCTB4ODAJLyogV2hlbiBFQ1AvRVBQOiBMUFQgQ1RSIGNvbnRyb2xscyBkaXJlY3Rpb24gKi8KKyNkZWZpbmUgUFRSX0xQVF9SRUdfRElSCTB4ODAJLyogV2hlbiBFQ1AvRVBQOiBMUFQgQ1RSIGNvbnRyb2xzIGRpcmVjdGlvbiAqLwogCQkJCS8qICAgICAgICAgICAgICAgb2YgdGhlIHBhcmFsbGVsIHBvcnQJICAgICAqLwogCiAvKiBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyIChGQ1IpIGJpdHMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Bjci5oCmluZGV4IDg0M2U0ZmEuLjI4OGQ3YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY3IuaApAQCAtMzEsNyArMzEsNyBAQAogCiAvKiBJbiBvcmRlciB0byBjb21tb25pemUgYXMgbXVjaCBvZiB0aGUgaW1wbGVtZW50YXRpb24gYXMKICAqIHBvc3NpYmxlLCB3ZSB1c2UgUElDSCBhcyBvdXIgY291bnRlci4gIE1vc3RseSB0aGlzIGlzCi0gKiB0byBhY2NvbW9kYXRlIE5pYWdhcmEtMSB3aGljaCBjYW4gb25seSBjb3VudCBpbnNuIGN5Y2xlcworICogdG8gYWNjb21tb2RhdGUgTmlhZ2FyYS0xIHdoaWNoIGNhbiBvbmx5IGNvdW50IGluc24gY3ljbGVzCiAgKiBpbiBQSUNILgogICovCiBzdGF0aWMgaW5saW5lIHU2NCBwaWNsX3ZhbHVlKHVuc2lnbmVkIGludCBubWlfaHopCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCAzMGIwYjc5Li5jN2FkM2ZlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTMzLDcgKzMzLDcgQEAKIAkgKiB0aGluZ3MgbGlrZSAiaW4gYSBzeXN0ZW0gY2FsbCIgZXRjLiBmb3IgYW4gYXJiaXRyYXkKIAkgKiBwcm9jZXNzLgogCSAqCi0JICogVGhlIFBUX1JFR1NfTUFHSUMgaXMgY2hvb3NlbiBzdWNoIHRoYXQgaXQgY2FuIGJlCisJICogVGhlIFBUX1JFR1NfTUFHSUMgaXMgY2hvc2VuIHN1Y2ggdGhhdCBpdCBjYW4gYmUKIAkgKiBsb2FkZWQgY29tcGxldGVseSB1c2luZyBqdXN0IGEgc2V0aGkgaW5zdHJ1Y3Rpb24uCiAJICovCiAJdW5zaWduZWQgaW50IG1hZ2ljOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvYXBjLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9hcGMuYwppbmRleCBmNjc5YzU3Li4xZTM0ZjI5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9hcGMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9hcGMuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9faW5pdGRhdGEgYXBjX21hdGNoW10gPSB7CitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBhcGNfbWF0Y2hbXSA9IHsKIAl7CiAJCS5uYW1lID0gQVBDX09CUE5BTUUsCiAJfSwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2VudHJ5LlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5TCmluZGV4IDkwNmVlM2UuLjZkYTc4NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUwpAQCAtODAxLDcgKzgwMSw3IEBACiAJLmdsb2JsCXZhY19od2ZsdXNoX3BhdGNoMV9vbiwgdmFjX2h3Zmx1c2hfcGF0Y2gyX29uCiAKIC8qCi0gKiBVZ2x5LCBidXQgd2UgY2FudCB1c2UgaGFyZHdhcmUgZmx1c2hpbmcgb24gdGhlIHN1bjQgYW5kIHdlJ2QgcmVxdWlyZQorICogVWdseSwgYnV0IHdlIGNhbid0IHVzZSBoYXJkd2FyZSBmbHVzaGluZyBvbiB0aGUgc3VuNCBhbmQgd2UnZCByZXF1aXJlCiAgKiB0d28gaW5zdHJ1Y3Rpb25zIChBbnRvbikKICAqLwogdmFjX2h3Zmx1c2hfcGF0Y2gxX29uOgkJYWRkY2MJJWw3LCAtUEFHRV9TSVpFLCAlbDcKQEAgLTg1MSw3ICs4NTEsNyBAQAogCSBzZXRoaQklaGkofigoMSA8PCBTVU40Q19SRUFMX1BHRElSX1NISUZUKSAtIDEpKSwgJWw0CiAKIAkvKiBJZiB0aGUga2VybmVsIHJlZmVyZW5jZXMgYSBidW0ga2VybmVsIHBvaW50ZXIsIG9yIGEgcHRlIHdoaWNoCi0JICogcG9pbnRzIHRvIGEgbm9uIGV4aXN0YW50IHBhZ2UgaW4gcmFtLCB3ZSB3aWxsIHJ1biB0aGlzIGNvZGUKKwkgKiBwb2ludHMgdG8gYSBub24gZXhpc3RlbnQgcGFnZSBpbiByYW0sIHdlIHdpbGwgcnVuIHRoaXMgY29kZQogCSAqIF9mb3JldmVyXyBhbmQgbG9jayB1cCB0aGUgbWFjaGluZSEhISEhIFNvIHdlIG11c3QgY2hlY2sgZm9yCiAJICogdGhpcyBjb25kaXRpb24sIHRoZSBBQ19TWU5DX0VSUiBiaXRzIGFyZSB3aGF0IHdlIG11c3QgZXhhbWluZS4KIAkgKiBBbHNvIGEgcGFyaXR5IGVycm9yIHdvdWxkIG1ha2UgdGhpcyBoYXBwZW4gYXMgd2VsbC4gIFNvIHdlIGp1c3QKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2hlYWRfNjQuUyBiL2FyY2gvc3BhcmMva2VybmVsL2hlYWRfNjQuUwppbmRleCBmOGYyMTA1Li5hYTU5NGM3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaGVhZF82NC5TCkBAIC04NSw3ICs4NSw3IEBACiBzcGFyYzY0X2Jvb3Q6CiAJbW92CSVvNCwgJWw3CiAKLQkvKiBXZSBuZWVkIHRvIHJlbWFwIHRoZSBrZXJuZWwuICBVc2UgcG9zaXRpb24gaW5kZXBlbmRhbnQKKwkvKiBXZSBuZWVkIHRvIHJlbWFwIHRoZSBrZXJuZWwuICBVc2UgcG9zaXRpb24gaW5kZXBlbmRlbnQKIAkgKiBjb2RlIHRvIHJlbWFwIHVzIHRvIEtFUk5CQVNFLgogCSAqCiAJICogU0lMTyBjYW4gaW52b2tlIHVzIHdpdGggMzItYml0IGFkZHJlc3MgbWFza2luZyBlbmFibGVkLApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaW5pdF90YXNrLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9pbml0X3Rhc2suYwppbmRleCA1ZmUzZDY1Li4zNWYxNDFhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9pbml0X3Rhc2suYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9pbml0X3Rhc2suYwpAQCAtMTUsNyArMTUsNyBAQAogCiAvKiAudGV4dCBzZWN0aW9uIGluIGhlYWQuUyBpcyBhbGlnbmVkIGF0IDhrIGJvdW5kYXJ5IGFuZCB0aGlzIGdldHMgbGlua2VkCiAgKiByaWdodCBhZnRlciB0aGF0IHNvIHRoYXQgdGhlIGluaXRfdGhyZWFkX3VuaW9uIGlzIGFsaWduZWQgcHJvcGVybHkgYXMgd2VsbC4KLSAqIElmIHRoaXMgaXMgbm90IGFsaWduZWQgb24gYSA4ayBib3VuZHJ5LCB0aGVuIHlvdSBzaG91bGQgY2hhbmdlIGNvZGUKKyAqIElmIHRoaXMgaXMgbm90IGFsaWduZWQgb24gYSA4ayBib3VuZGFyeSwgdGhlbiB5b3Ugc2hvdWxkIGNoYW5nZSBjb2RlCiAgKiBpbiBldHJhcC5TIHdoaWNoIGFzc3VtZXMgaXQuCiAgKi8KIHVuaW9uIHRocmVhZF91bmlvbiBpbml0X3RocmVhZF91bmlvbiBfX2luaXRfdGFza19kYXRhID0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzY0LmMKaW5kZXggNjNjZDRlNS4uNWMxNDk2OCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzY0LmMKQEAgLTQ1OSw3ICs0NTksNyBAQAogCQkgKgogCQkgKiBIYW5kbGUgdGhpcyBieSBkZWNpZGluZyB0aGF0LCBpZiB3ZSBkaWRuJ3QgZ2V0IGEKIAkJICogbWF0Y2ggaW4gdGhlIHBhcmVudCdzICdpbnRlcnJ1cHQtbWFwJywgYW5kIHRoZQotCQkgKiBwYXJlbnQgaXMgYW4gSVJRIHRyYW5zbGF0ZXIsIHRoZW4gdXNlIHRoZSBwYXJlbnQgYXMKKwkJICogcGFyZW50IGlzIGFuIElSUSB0cmFuc2xhdG9yLCB0aGVuIHVzZSB0aGUgcGFyZW50IGFzCiAJCSAqIG91ciBJUlEgY29udHJvbGxlci4KIAkJICovCiAJCWlmIChwcC0+aXJxX3RyYW5zKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3NhYnJlLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfc2FicmUuYwppbmRleCA5NDgwNjhhLi5kMTg0MGRiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfc2FicmUuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfc2FicmUuYwpAQCAtNDUyLDggKzQ1MiwxMCBAQAogCXNhYnJlX3NjYW5fYnVzKHBibSwgJm9wLT5kZXYpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzYWJyZV9tYXRjaFtdOwogc3RhdGljIGludCBfX2RldmluaXQgc2FicmVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3ApCiB7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CiAJY29uc3Qgc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMgKnByX3JlZ3M7CiAJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IG9wLT5kZXYub2Zfbm9kZTsKIAlzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm07CkBAIC00NjMsNyArNDY1LDggQEAKIAljb25zdCB1MzIgKnZkbWE7CiAJdTY0IGNsZWFyX2lycTsKIAotCWh1bW1pbmdiaXJkX3AgPSBvcC0+ZGV2Lm9mX21hdGNoICYmIChvcC0+ZGV2Lm9mX21hdGNoLT5kYXRhICE9IE5VTEwpOworCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKHNhYnJlX21hdGNoLCAmb3AtPmRldik7CisJaHVtbWluZ2JpcmRfcCA9IG1hdGNoICYmIChtYXRjaC0+ZGF0YSAhPSBOVUxMKTsKIAlpZiAoIWh1bW1pbmdiaXJkX3ApIHsKIAkJc3RydWN0IGRldmljZV9ub2RlICpjcHVfZHA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BjaV9zY2hpem8uYyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9zY2hpem8uYwppbmRleCBmZWNmY2IyLi4yODNmYmMzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfc2NoaXpvLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3NjaGl6by5jCkBAIC0xNDU4LDExICsxNDU4LDE1IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc2NoaXpvX21hdGNoW107CiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzY2hpem9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3ApCiB7Ci0JaWYgKCFvcC0+ZGV2Lm9mX21hdGNoKQorCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOworCisJbWF0Y2ggPSBvZl9tYXRjaF9kZXZpY2Uoc2NoaXpvX21hdGNoLCAmb3AtPmRldik7CisJaWYgKCFtYXRjaCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIF9fc2NoaXpvX2luaXQob3AsICh1bnNpZ25lZCBsb25nKSBvcC0+ZGV2Lm9mX21hdGNoLT5kYXRhKTsKKwlyZXR1cm4gX19zY2hpem9faW5pdChvcCwgKHVuc2lnbmVkIGxvbmcpbWF0Y2gtPmRhdGEpOwogfQogCiAvKiBUaGUgb3JkZXJpbmcgb2YgdGhpcyB0YWJsZSBpcyB2ZXJ5IGltcG9ydGFudC4gIFNvbWUgVG9tYXRpbGxvCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggNzYwNTc4Ni4uZWU4NDI2ZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMTAyNyw3ICsxMDI3LDcgQEAKIAogCS8qCiAJICogSWYgZ3JvdXAgZXZlbnRzIHNjaGVkdWxpbmcgdHJhbnNhY3Rpb24gd2FzIHN0YXJ0ZWQsCi0JICogc2tpcCB0aGUgc2NoZWR1bGFiaWxpdHkgdGVzdCBoZXJlLCBpdCB3aWxsIGJlIHBlZm9ybWVkCisJICogc2tpcCB0aGUgc2NoZWR1bGFiaWxpdHkgdGVzdCBoZXJlLCBpdCB3aWxsIGJlIHBlcmZvcm1lZAogCSAqIGF0IGNvbW1pdCB0aW1lKC0+Y29tbWl0X3R4bikgYXMgYSB3aG9sZQogCSAqLwogCWlmIChjcHVjLT5ncm91cF9mbGFnICYgUEVSRl9FVkVOVF9UWE4pCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wbWMuYyBiL2FyY2gvc3BhcmMva2VybmVsL3BtYy5jCmluZGV4IDkzZDdiNDQuLjZhNTg1ZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BtYy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BtYy5jCkBAIC02OSw3ICs2OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9faW5pdGRhdGEgcG1jX21hdGNoW10gPSB7CitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBwbWNfbWF0Y2hbXSA9IHsKIAl7CiAJCS5uYW1lID0gUE1DX09CUE5BTUUsCiAJfSwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NtcF8zMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzMyLmMKaW5kZXggOTFjMTBmYi4uODUwYTEzNiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzMyLmMKQEAgLTUzLDYgKzUzLDcgQEAKIHZvaWQgX19jcHVpbml0IHNtcF9zdG9yZV9jcHVfaW5mbyhpbnQgaWQpCiB7CiAJaW50IGNwdV9ub2RlOworCWludCBtaWQ7CiAKIAljcHVfZGF0YShpZCkudWRlbGF5X3ZhbCA9IGxvb3BzX3Blcl9qaWZmeTsKIApAQCAtNjAsMTAgKzYxLDEzIEBACiAJY3B1X2RhdGEoaWQpLmNsb2NrX3RpY2sgPSBwcm9tX2dldGludGRlZmF1bHQoY3B1X25vZGUsCiAJCQkJCQkgICAgICJjbG9jay1mcmVxdWVuY3kiLCAwKTsKIAljcHVfZGF0YShpZCkucHJvbV9ub2RlID0gY3B1X25vZGU7Ci0JY3B1X2RhdGEoaWQpLm1pZCA9IGNwdV9nZXRfaHdtaWQoY3B1X25vZGUpOworCW1pZCA9IGNwdV9nZXRfaHdtaWQoY3B1X25vZGUpOwogCi0JaWYgKGNwdV9kYXRhKGlkKS5taWQgPCAwKQotCQlwYW5pYygiTm8gTUlEIGZvdW5kIGZvciBDUFUlZCBhdCBub2RlIDB4JTA4ZCIsIGlkLCBjcHVfbm9kZSk7CisJaWYgKG1pZCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJObyBNSUQgZm91bmQgZm9yIENQVSVkIGF0IG5vZGUgMHglMDhkIiwgaWQsIGNwdV9ub2RlKTsKKwkJbWlkID0gMDsKKwl9CisJY3B1X2RhdGEoaWQpLm1pZCA9IG1pZDsKIH0KIAogdm9pZCBfX2luaXQgc21wX2NwdXNfZG9uZSh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzMyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzMyLmMKaW5kZXggNGUyMzYzOS4uOTYwNDZhNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvdGltZV8zMi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3RpbWVfMzIuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9faW5pdGRhdGEgY2xvY2tfbWF0Y2hbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGNsb2NrX21hdGNoW10gPSB7CiAJewogCQkubmFtZSA9ICJlZXByb20iLAogCX0sCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9jaGVja3N1bV8zMi5TIGIvYXJjaC9zcGFyYy9saWIvY2hlY2tzdW1fMzIuUwppbmRleCAzNjMyY2IzLi4wMDg0YzMzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2xpYi9jaGVja3N1bV8zMi5TCisrKyBiL2FyY2gvc3BhcmMvbGliL2NoZWNrc3VtXzMyLlMKQEAgLTI4OSwxMCArMjg5LDE2IEBACiAKIAkvKiBBbHNvLCBoYW5kbGUgdGhlIGFsaWdubWVudCBjb2RlIG91dCBvZiBiYW5kLiAqLwogY2NfZHdvcmRfYWxpZ246Ci0JY21wCSVnMSwgNgotCWJsLGEJY2N0ZQorCWNtcAklZzEsIDE2CisJYmdlCTFmCisJIHNybAklZzEsIDEsICVvMworMjoJY21wCSVvMywgMAorCWJlLGEJY2N0ZQogCSBhbmRjYwklZzEsIDB4ZiwgJW8zCi0JYW5kY2MJJW8wLCAweDEsICVnMAorCWFuZGNjCSVvMywgJW8wLCAlZzAJISBDaGVjayAlbzAgb25seSAoJW8xIGhhcyB0aGUgc2FtZSBsYXN0IDIgYml0cykKKwliZSxhCTJiCisJIHNybAklbzMsIDEsICVvMworMToJYW5kY2MJJW8wLCAweDEsICVnMAogCWJuZQljY3Nsb3cKIAkgYW5kY2MJJW8wLCAweDIsICVnMAogCWJlCTFmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21hdGgtZW11L01ha2VmaWxlIGIvYXJjaC9zcGFyYy9tYXRoLWVtdS9NYWtlZmlsZQppbmRleCBiOTA4NWVjLi44MjVkYmVlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21hdGgtZW11L01ha2VmaWxlCisrKyBiL2FyY2gvc3BhcmMvbWF0aC1lbXUvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgRlBVIGluc3RydWN0aW9uIGVtdWxhdGlvbi4KICMKIAotIyBzdXByZXNzIGFsbCB3YXJuaW5ncyAtIGFzIG1hdGguYyBwcm9kdWNlcyBhIGxvdCEKKyMgc3VwcHJlc3MgYWxsIHdhcm5pbmdzIC0gYXMgbWF0aC5jIHByb2R1Y2VzIGEgbG90IQogY2NmbGFncy15IDo9IC13CiAKIG9iai15ICAgIDo9IG1hdGhfJChCSVRTKS5vCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvS2NvbmZpZyBiL2FyY2gvdGlsZS9LY29uZmlnCmluZGV4IDZlMmNkZDUuLmUzMmIwYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9LY29uZmlnCisrKyBiL2FyY2gvdGlsZS9LY29uZmlnCkBAIC01MSw3ICs1MSw3IEBACiBjb25maWcgR0VORVJJQ19DTE9DS0VWRU5UUwogCWRlZl9ib29sIHkKIAotIyBGSVhNRTogdGlsZWd4IGNhbiBpbXBsZW1lbnQgYSBtb3JlIGVmZmljZW50IHJ3c2VtLgorIyBGSVhNRTogdGlsZWd4IGNhbiBpbXBsZW1lbnQgYSBtb3JlIGVmZmljaWVudCByd3NlbS4KIGNvbmZpZyBSV1NFTV9HRU5FUklDX1NQSU5MT0NLCiAJZGVmX2Jvb2wgeQogCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9odi9kcnZfeGdiZV9pbnRmLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9odi9kcnZfeGdiZV9pbnRmLmgKaW5kZXggMTQ2ZTQ3ZC4uZjEzMTg4YSAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvaHYvZHJ2X3hnYmVfaW50Zi5oCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2h2L2Rydl94Z2JlX2ludGYuaApAQCAtMzE5LDcgKzMxOSw3IEBACiAgKiAgICAgICAgIGlzIGFuIGVycm9yIGNvZGUsIG9yIHplcm8gaWYgbm8gZXJyb3IuICBUaGUgdmFsMCBtZW1iZXIgaXMgdGhlCiAgKiAgICAgICAgIHVwZGF0ZWQgdmFsdWUgb2Ygc2Vxbm87IGl0IGhhcyBiZWVuIGluY3JlbWVudGVkIGJ5IDEgZm9yIGVhY2gKICAqICAgICAgICAgcGFja2V0IHNlbnQuICBUaGF0IGluY3JlbWVudCBtYXkgYmUgbGVzcyB0aGFuIG5lbnRyaWVzIGlmIGFuCi0gKiAgICAgICAgIGVycm9yIG9jY3VyZWQsIG9yIGlmIHNvbWUgb2YgdGhlIGVudHJpZXMgaW4gdGhlIHZlY3RvciBjb250YWluCisgKiAgICAgICAgIGVycm9yIG9jY3VycmVkLCBvciBpZiBzb21lIG9mIHRoZSBlbnRyaWVzIGluIHRoZSB2ZWN0b3IgY29udGFpbgogICogICAgICAgICBoYW5kbGVzIGVxdWFsIHRvIE5FVElPX1BLVF9IQU5ETEVfTk9ORS4gIFRoZSB2YWwxIG1lbWJlciBpcyB0aGUKICAqICAgICAgICAgdXBkYXRlZCB2YWx1ZSBvZiBuZW50cmllczsgaXQgaGFzIGJlZW4gZGVjcmVtZW50ZWQgYnkgMSBmb3IgZWFjaAogICogICAgICAgICB2ZWN0b3IgZW50cnkgcHJvY2Vzc2VkLiAgQWdhaW4sIHRoYXQgZGVjcmVtZW50IG1heSBiZSBsZXNzIHRoYW4KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2h2L2h5cGVydmlzb3IuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2h2L2h5cGVydmlzb3IuaAppbmRleCAxYjhiZjAzLi5lZTQxYmNhIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9odi9oeXBlcnZpc29yLmgKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvaHYvaHlwZXJ2aXNvci5oCkBAIC0xMzQwLDcgKzEzNDAsNyBAQAogICogIHRoaXMgb3BlcmF0aW9uLiAgSWYgYW55IHBlcm1hbmVudCBkZWxpdmVyeSBlcnJvcnMgd2VyZSBlbmNvdW50ZXJlZCwKICAqICB0aGUgcm91dGluZSByZXR1cm5zIEhWX0VSRUNJUC4gIEluIHRoZSBldmVudCBvZiBwZXJtYW5lbnQgZGVsaXZlcnkKICAqICBlcnJvcnMsIGl0IG1heSBiZSB0aGUgY2FzZSB0aGF0IGRlbGl2ZXJ5IHdhcyBub3QgYXR0ZW1wdGVkIHRvIGFsbAotICogIHJlY2lwaWVudHM7IGlmIGFueSBtZXNzYWdlcyB3ZXJlIHN1Y2Nlc2Z1bGx5IGRlbGl2ZXJlZCwgaG93ZXZlciwKKyAqICByZWNpcGllbnRzOyBpZiBhbnkgbWVzc2FnZXMgd2VyZSBzdWNjZXNzZnVsbHkgZGVsaXZlcmVkLCBob3dldmVyLAogICogIHJlY2lwaWVudHMnIHN0YXRlIHZhbHVlcyB3aWxsIGJlIHVwZGF0ZWQgYXBwcm9wcmlhdGVseS4KICAqCiAgKiAgSXQgaXMgZXhwbGljaXRseSBsZWdhbCB0byBzcGVjaWZ5IGEgcmVjaXBpZW50IHN0cnVjdHVyZSB3aG9zZSBzdGF0ZQpAQCAtMTM1OSw3ICsxMzU5LDcgQEAKICAqICBuZXZlciBjYWxsIGh2X3JlY2VpdmVfbWVzc2FnZSwgb3IgY291bGQgcmVnaXN0ZXIgYSBkaWZmZXJlbnQgc3RhdGUKICAqICBidWZmZXIsIGxvc2luZyB0aGUgbWVzc2FnZS4KICAqCi0gKiAgU3BlY2lmaXlpbmcgdGhlIHNhbWUgcmVjaXBpZW50IG1vcmUgdGhhbiBvbmNlIGluIHRoZSByZWNpcGllbnQgbGlzdAorICogIFNwZWNpZnlpbmcgdGhlIHNhbWUgcmVjaXBpZW50IG1vcmUgdGhhbiBvbmNlIGluIHRoZSByZWNpcGllbnQgbGlzdAogICogIGlzIGFuIGVycm9yLCB3aGljaCB3aWxsIG5vdCByZXN1bHQgaW4gYW4gZXJyb3IgcmV0dXJuIGJ1dCB3aGljaCBtYXkKICAqICBvciBtYXkgbm90IHJlc3VsdCBpbiBtb3JlIHRoYW4gb25lIG1lc3NhZ2UgYmVpbmcgZGVsaXZlcmVkIHRvIHRoZQogICogIHJlY2lwaWVudCB0aWxlLgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2tlcm5lbC9wY2kuYyBiL2FyY2gvdGlsZS9rZXJuZWwvcGNpLmMKaW5kZXggYTFlZTI1Yi4uZWEzOGYwYyAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2tlcm5lbC9wY2kuYworKysgYi9hcmNoL3RpbGUva2VybmVsL3BjaS5jCkBAIC0zNiw3ICszNiw3IEBACiAgKiBJbml0aWFsaXphdGlvbiBmbG93IGFuZCBwcm9jZXNzCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgotICogVGhpcyBmaWxlcyBjb250YWluZXMgdGhlIHJvdXRpbmVzIHRvIHNlYXJjaCBmb3IgUENJIGJ1c2VzLAorICogVGhpcyBmaWxlcyBjb250YWlucyB0aGUgcm91dGluZXMgdG8gc2VhcmNoIGZvciBQQ0kgYnVzZXMsCiAgKiBlbnVtZXJhdGUgdGhlIGJ1c2VzLCBhbmQgY29uZmlndXJlIGFueSBhdHRhY2hlZCBkZXZpY2VzLgogICoKICAqIFRoZXJlIGFyZSB0d28gZW50cnkgcG9pbnRzIGhlcmU6CkBAIC01MTksNyArNTE5LDcgQEAKIAogCiAvKgotICogU2VlIHRpbGVfY2ZnX3JlYWQoKSBmb3IgcmVsZXZlbnQgY29tbWVudHMuCisgKiBTZWUgdGlsZV9jZmdfcmVhZCgpIGZvciByZWxldmFudCBjb21tZW50cy4KICAqIE5vdGUgdGhhdCAidmFsIiBpcyB0aGUgdmFsdWUgdG8gd3JpdGUsIG5vdCBhIHBvaW50ZXIgdG8gdGhhdCB2YWx1ZS4KICAqLwogc3RhdGljIGludCBfX2RldmluaXQgdGlsZV9jZmdfd3JpdGUoc3RydWN0IHBjaV9idXMgKmJ1cywKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9tbS9mYXVsdC5jIGIvYXJjaC90aWxlL21tL2ZhdWx0LmMKaW5kZXggNzU4ZjU5Ny4uNTFmODY2MyAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL21tL2ZhdWx0LmMKKysrIGIvYXJjaC90aWxlL21tL2ZhdWx0LmMKQEAgLTI5MCw3ICsyOTAsNyBAQAogCS8qCiAJICogRWFybHkgb24sIHdlIG5lZWQgdG8gY2hlY2sgZm9yIG1pZ3JhdGluZyBQVEUgZW50cmllczsKIAkgKiBzZWUgaG9tZWNhY2hlLmMuICBJZiB3ZSBmaW5kIGEgbWlncmF0aW5nIFBURSwgd2Ugd2FpdCB1bnRpbAotCSAqIHRoZSBiYWNraW5nIHBhZ2UgY2xhaW1zIHRvIGJlIGRvbmUgbWlncmF0aW5nLCB0aGVuIHdlIHByb2NlZGUuCisJICogdGhlIGJhY2tpbmcgcGFnZSBjbGFpbXMgdG8gYmUgZG9uZSBtaWdyYXRpbmcsIHRoZW4gd2UgcHJvY2VlZC4KIAkgKiBGb3Iga2VybmVsIFBURXMsIHdlIHJld3JpdGUgdGhlIFBURSBhbmQgcmV0dXJuIGFuZCByZXRyeS4KIAkgKiBPdGhlcndpc2UsIHdlIHRyZWF0IHRoZSBmYXVsdCBsaWtlIGEgbm9ybWFsICJubyBQVEUiIGZhdWx0LAogCSAqIHJhdGhlciB0aGFuIHRyeWluZyB0byBwYXRjaCB1cCB0aGUgZXhpc3RpbmcgUFRFLgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL3RpbGUvbW0vaHVnZXRsYnBhZ2UuYwppbmRleCAyMDFhNTgyLi40MmNmY2JhIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL3RpbGUvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJaWYgKG1tLT5mcmVlX2FyZWFfY2FjaGUgPCBsZW4pCiAJCWdvdG8gZmFpbDsKIAotCS8qIGVpdGhlciBubyBhZGRyZXNzIHJlcXVlc3RlZCBvciBjYW50IGZpdCBpbiByZXF1ZXN0ZWQgYWRkcmVzcyBob2xlICovCisJLyogZWl0aGVyIG5vIGFkZHJlc3MgcmVxdWVzdGVkIG9yIGNhbid0IGZpdCBpbiByZXF1ZXN0ZWQgYWRkcmVzcyBob2xlICovCiAJYWRkciA9IChtbS0+ZnJlZV9hcmVhX2NhY2hlIC0gbGVuKSAmIGh1Z2VfcGFnZV9tYXNrKGgpOwogCWRvIHsKIAkJLyoKZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZy5uZXQgYi9hcmNoL3VtL0tjb25maWcubmV0CmluZGV4IDllOWE0YWEuLjMxNjBiMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vS2NvbmZpZy5uZXQKKysrIGIvYXJjaC91bS9LY29uZmlnLm5ldApAQCAtMTg2LDcgKzE4Niw3IEBACiAgICAgICAgIG90aGVyIHRyYW5zcG9ydHMsIFNMaVJQIHdvcmtzIHdpdGhvdXQgdGhlIG5lZWQgb2Ygcm9vdCBsZXZlbAogICAgICAgICBwcml2bGVnZXMsIHNldHVpZCBiaW5hcmllcywgb3IgU0xJUCBkZXZpY2VzIG9uIHRoZSBob3N0LiAgVGhpcwogICAgICAgICBhbHNvIG1lYW5zIG5vdCBldmVyeSB0eXBlIG9mIGNvbm5lY3Rpb24gaXMgcG9zc2libGUsIGJ1dCBtb3N0Ci0gICAgICAgIHNpdHVhdGlvbnMgY2FuIGJlIGFjY29tb2RhdGVkIHdpdGggY2FyZWZ1bGx5IGNyYWZ0ZWQgc2xpcnAKKyAgICAgICAgc2l0dWF0aW9ucyBjYW4gYmUgYWNjb21tb2RhdGVkIHdpdGggY2FyZWZ1bGx5IGNyYWZ0ZWQgc2xpcnAKICAgICAgICAgY29tbWFuZHMgdGhhdCBjYW4gYmUgcGFzc2VkIGFsb25nIGFzIHBhcnQgb2YgdGhlIG5ldHdvcmsgZGV2aWNlJ3MKICAgICAgICAgc2V0dXAgc3RyaW5nLiAgVGhlIGVmZmVjdCBvZiB0aGlzIHRyYW5zcG9ydCBvbiB0aGUgVU1MIGlzIHNpbWlsYXIKICAgICAgICAgdGhhdCBvZiBhIGhvc3QgYmVoaW5kIGEgZmlyZXdhbGwgdGhhdCBtYXNxdWVyYWRlcyBhbGwgbmV0d29yawpkaWZmIC0tZ2l0IGEvYXJjaC91bS9LY29uZmlnLnVtIGIvYXJjaC91bS9LY29uZmlnLnVtCmluZGV4IDkwYTQzOGEuLmI1ZTY3NWUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vS2NvbmZpZy51bQorKysgYi9hcmNoL3VtL0tjb25maWcudW0KQEAgLTQ3LDcgKzQ3LDcgQEAKIAogY29uZmlnIEhQUEZTCiAJdHJpc3RhdGUgIkhvbmV5UG90IFByb2NGUyAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIFBST0NfRlMKIAloZWxwCiAJICBocHBmcyAoSG9uZXlQb3QgUHJvY0ZTKSBpcyBhIGZpbGVzeXN0ZW0gd2hpY2ggYWxsb3dzIFVNTCAvcHJvYwogCSAgZW50cmllcyB0byBiZSBvdmVycmlkZGVuLCByZW1vdmVkLCBvciBmYWJyaWNhdGVkIGZyb20gdGhlIGhvc3QuCmRpZmYgLS1naXQgYS9hcmNoL3VtL0tjb25maWcueDg2IGIvYXJjaC91bS9LY29uZmlnLng4NgppbmRleCAwMmZiMDE3Li5hOWRhNTE2IDEwMDY0NAotLS0gYS9hcmNoL3VtL0tjb25maWcueDg2CisrKyBiL2FyY2gvdW0vS2NvbmZpZy54ODYKQEAgLTQsNiArNCwxMCBAQAogCiBtZW51ICJIb3N0IHByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcyIKIAorY29uZmlnIENNUFhDSEdfTE9DQUwKKwlib29sCisJZGVmYXVsdCBuCisKIHNvdXJjZSAiYXJjaC94ODYvS2NvbmZpZy5jcHUiCiAKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vYnVnLmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL2J1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMzNiODYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL2luY2x1ZGUvYXNtL2J1Zy5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX1VNX0JVR19ICisjZGVmaW5lIF9fVU1fQlVHX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCBlMmNmNzg2Li41YmQxYmFkIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC00OSw3ICs0OSwxMCBAQAogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7CiAJdW5zaWduZWQgbG9uZyBtYXNrID0gVEhSRUFEX1NJWkUgLSAxOwotCXRpID0gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKSAoKCh1bnNpZ25lZCBsb25nKSAmdGkpICYgfm1hc2spOworCXZvaWQgKnA7CisKKwlhc20gdm9sYXRpbGUgKCIiIDogIj1yIiAocCkgOiAiMCIgKCZ0aSkpOworCXRpID0gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKSAoKCh1bnNpZ25lZCBsb25nKXApICYgfm1hc2spOwogCXJldHVybiB0aTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC91dGlsLmMgYi9hcmNoL3VtL29zLUxpbnV4L3V0aWwuYwppbmRleCA2ZWE3Nzk3Li40MjgyN2NhIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3V0aWwuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L3V0aWwuYwpAQCAtNSw2ICs1LDcgQEAKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTc1LDYgKzc2LDI2IEBACiAJCSBob3N0LnJlbGVhc2UsIGhvc3QudmVyc2lvbiwgaG9zdC5tYWNoaW5lKTsKIH0KIAorLyoKKyAqIFdlIGNhbm5vdCB1c2UgZ2xpYmMncyBhYm9ydCgpLiBJdCBtYWtlcyB1c2Ugb2YgdGdraWxsKCkgd2hpY2gKKyAqIGhhcyBubyBlZmZlY3Qgd2l0aGluIFVNTCdzIGtlcm5lbCB0aHJlYWRzLgorICogQWZ0ZXIgdGhhdCBnbGliYyB3b3VsZCBleGVjdXRlIGFuIGludmFsaWQgaW5zdHJ1Y3Rpb24gdG8ga2lsbAorICogdGhlIGNhbGxpbmcgcHJvY2VzcyBhbmQgVU1MIGNyYXNoZXMgd2l0aCBTSUdTRUdWLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSkgdW1sX2Fib3J0KHZvaWQpCit7CisJc2lnc2V0X3Qgc2lnOworCisJZmZsdXNoKE5VTEwpOworCisJaWYgKCFzaWdlbXB0eXNldCgmc2lnKSAmJiAhc2lnYWRkc2V0KCZzaWcsIFNJR0FCUlQpKQorCQlzaWdwcm9jbWFzayhTSUdfVU5CTE9DSywgJnNpZywgMCk7CisKKwlmb3IgKDs7KQorCQlpZiAoa2lsbChnZXRwaWQoKSwgU0lHQUJSVCkgPCAwKQorCQkJZXhpdCgxMjcpOworfQorCiB2b2lkIG9zX2R1bXBfY29yZSh2b2lkKQogewogCWludCBwaWQ7CkBAIC0xMTYsNSArMTM3LDUgQEAKIAl3aGlsZSAoKHBpZCA9IHdhaXRwaWQoLTEsIE5VTEwsIFdOT0hBTkcgfCBfX1dBTEwpKSA+IDApCiAJCW9zX2tpbGxfcHRyYWNlZF9wcm9jZXNzKHBpZCwgMCk7CiAKLQlhYm9ydCgpOworCXVtbF9hYm9ydCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9NYWtlZmlsZSBiL2FyY2gvdW0vc3lzLWkzODYvTWFrZWZpbGUKaW5kZXggODA0YjI4ZC4uYjFkYTkxYyAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni9NYWtlZmlsZQorKysgYi9hcmNoL3VtL3N5cy1pMzg2L01ha2VmaWxlCkBAIC00LDcgKzQsNyBAQAogCiBvYmoteSA9IGJ1Zy5vIGJ1Z3MubyBjaGVja3N1bS5vIGRlbGF5Lm8gZmF1bHQubyBrc3ltcy5vIGxkdC5vIHB0cmFjZS5vIFwKIAlwdHJhY2VfdXNlci5vIHNldGptcC5vIHNpZ25hbC5vIHN0dWIubyBzdHViX3NlZ3YubyBzeXNjYWxscy5vIHN5c3JxLm8gXAotCXN5c19jYWxsX3RhYmxlLm8gdGxzLm8KKwlzeXNfY2FsbF90YWJsZS5vIHRscy5vIGF0b21pYzY0X2N4OF8zMi5vCiAKIG9iai0kKENPTkZJR19CSU5GTVRfRUxGKSArPSBlbGZjb3JlLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9hdG9taWM2NF9jeDhfMzIuUyBiL2FyY2gvdW0vc3lzLWkzODYvYXRvbWljNjRfY3g4XzMyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU5MDFkMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvYXRvbWljNjRfY3g4XzMyLlMKQEAgLTAsMCArMSwyMjUgQEAKKy8qCisgKiBhdG9taWM2NF90IGZvciA1ODYrCisgKgorICogQ29waWVkIGZyb20gYXJjaC94ODYvbGliL2F0b21pYzY0X2N4OF8zMi5TCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTAgIEx1Y2EgQmFyYmllcmkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS1hc20uaD4KKyNpbmNsdWRlIDxhc20vZHdhcmYyLmg+CisKKy5tYWNybyBTQVZFIHJlZworCXB1c2hsX2NmaSAlXHJlZworCUNGSV9SRUxfT0ZGU0VUIFxyZWcsIDAKKy5lbmRtCisKKy5tYWNybyBSRVNUT1JFIHJlZworCXBvcGxfY2ZpICVccmVnCisJQ0ZJX1JFU1RPUkUgXHJlZworLmVuZG0KKworLm1hY3JvIHJlYWQ2NCByZWcKKwltb3ZsICVlYngsICVlYXgKKwltb3ZsICVlY3gsICVlZHgKKy8qIHdlIG5lZWQgTE9DS19QUkVGSVggc2luY2Ugb3RoZXJ3aXNlIGNtcHhjaGc4YiBhbHdheXMgZG9lcyB0aGUgd3JpdGUgKi8KKwlMT0NLX1BSRUZJWAorCWNtcHhjaGc4YiAoXHJlZykKKy5lbmRtCisKK0VOVFJZKGF0b21pYzY0X3JlYWRfY3g4KQorCUNGSV9TVEFSVFBST0MKKworCXJlYWQ2NCAlZWN4CisJcmV0CisJQ0ZJX0VORFBST0MKK0VORFBST0MoYXRvbWljNjRfcmVhZF9jeDgpCisKK0VOVFJZKGF0b21pYzY0X3NldF9jeDgpCisJQ0ZJX1NUQVJUUFJPQworCisxOgorLyogd2UgZG9uJ3QgbmVlZCBMT0NLX1BSRUZJWCBzaW5jZSBhbGlnbmVkIDY0LWJpdCB3cml0ZXMKKyAqIGFyZSBhdG9taWMgb24gNTg2IGFuZCBuZXdlciAqLworCWNtcHhjaGc4YiAoJWVzaSkKKwlqbmUgMWIKKworCXJldAorCUNGSV9FTkRQUk9DCitFTkRQUk9DKGF0b21pYzY0X3NldF9jeDgpCisKK0VOVFJZKGF0b21pYzY0X3hjaGdfY3g4KQorCUNGSV9TVEFSVFBST0MKKworCW1vdmwgJWVieCwgJWVheAorCW1vdmwgJWVjeCwgJWVkeAorMToKKwlMT0NLX1BSRUZJWAorCWNtcHhjaGc4YiAoJWVzaSkKKwlqbmUgMWIKKworCXJldAorCUNGSV9FTkRQUk9DCitFTkRQUk9DKGF0b21pYzY0X3hjaGdfY3g4KQorCisubWFjcm8gYWRkc3ViX3JldHVybiBmdW5jIGlucyBpbnNjCitFTlRSWShhdG9taWM2NF9cZnVuY1woKV9yZXR1cm5fY3g4KQorCUNGSV9TVEFSVFBST0MKKwlTQVZFIGVicAorCVNBVkUgZWJ4CisJU0FWRSBlc2kKKwlTQVZFIGVkaQorCisJbW92bCAlZWF4LCAlZXNpCisJbW92bCAlZWR4LCAlZWRpCisJbW92bCAlZWN4LCAlZWJwCisKKwlyZWFkNjQgJWVicAorMToKKwltb3ZsICVlYXgsICVlYngKKwltb3ZsICVlZHgsICVlY3gKKwlcaW5zXCgpbCAlZXNpLCAlZWJ4CisJXGluc2NcKClsICVlZGksICVlY3gKKwlMT0NLX1BSRUZJWAorCWNtcHhjaGc4YiAoJWVicCkKKwlqbmUgMWIKKworMTA6CisJbW92bCAlZWJ4LCAlZWF4CisJbW92bCAlZWN4LCAlZWR4CisJUkVTVE9SRSBlZGkKKwlSRVNUT1JFIGVzaQorCVJFU1RPUkUgZWJ4CisJUkVTVE9SRSBlYnAKKwlyZXQKKwlDRklfRU5EUFJPQworRU5EUFJPQyhhdG9taWM2NF9cZnVuY1woKV9yZXR1cm5fY3g4KQorLmVuZG0KKworYWRkc3ViX3JldHVybiBhZGQgYWRkIGFkYworYWRkc3ViX3JldHVybiBzdWIgc3ViIHNiYgorCisubWFjcm8gaW5jZGVjX3JldHVybiBmdW5jIGlucyBpbnNjCitFTlRSWShhdG9taWM2NF9cZnVuY1woKV9yZXR1cm5fY3g4KQorCUNGSV9TVEFSVFBST0MKKwlTQVZFIGVieAorCisJcmVhZDY0ICVlc2kKKzE6CisJbW92bCAlZWF4LCAlZWJ4CisJbW92bCAlZWR4LCAlZWN4CisJXGluc1woKWwgJDEsICVlYngKKwlcaW5zY1woKWwgJDAsICVlY3gKKwlMT0NLX1BSRUZJWAorCWNtcHhjaGc4YiAoJWVzaSkKKwlqbmUgMWIKKworMTA6CisJbW92bCAlZWJ4LCAlZWF4CisJbW92bCAlZWN4LCAlZWR4CisJUkVTVE9SRSBlYngKKwlyZXQKKwlDRklfRU5EUFJPQworRU5EUFJPQyhhdG9taWM2NF9cZnVuY1woKV9yZXR1cm5fY3g4KQorLmVuZG0KKworaW5jZGVjX3JldHVybiBpbmMgYWRkIGFkYworaW5jZGVjX3JldHVybiBkZWMgc3ViIHNiYgorCitFTlRSWShhdG9taWM2NF9kZWNfaWZfcG9zaXRpdmVfY3g4KQorCUNGSV9TVEFSVFBST0MKKwlTQVZFIGVieAorCisJcmVhZDY0ICVlc2kKKzE6CisJbW92bCAlZWF4LCAlZWJ4CisJbW92bCAlZWR4LCAlZWN4CisJc3VibCAkMSwgJWVieAorCXNiYiAkMCwgJWVjeAorCWpzIDJmCisJTE9DS19QUkVGSVgKKwljbXB4Y2hnOGIgKCVlc2kpCisJam5lIDFiCisKKzI6CisJbW92bCAlZWJ4LCAlZWF4CisJbW92bCAlZWN4LCAlZWR4CisJUkVTVE9SRSBlYngKKwlyZXQKKwlDRklfRU5EUFJPQworRU5EUFJPQyhhdG9taWM2NF9kZWNfaWZfcG9zaXRpdmVfY3g4KQorCitFTlRSWShhdG9taWM2NF9hZGRfdW5sZXNzX2N4OCkKKwlDRklfU1RBUlRQUk9DCisJU0FWRSBlYnAKKwlTQVZFIGVieAorLyogdGhlc2UganVzdCBwdXNoIHRoZXNlIHR3byBwYXJhbWV0ZXJzIG9uIHRoZSBzdGFjayAqLworCVNBVkUgZWRpCisJU0FWRSBlc2kKKworCW1vdmwgJWVjeCwgJWVicAorCW1vdmwgJWVheCwgJWVzaQorCW1vdmwgJWVkeCwgJWVkaQorCisJcmVhZDY0ICVlYnAKKzE6CisJY21wbCAlZWF4LCAwKCVlc3ApCisJamUgNGYKKzI6CisJbW92bCAlZWF4LCAlZWJ4CisJbW92bCAlZWR4LCAlZWN4CisJYWRkbCAlZXNpLCAlZWJ4CisJYWRjbCAlZWRpLCAlZWN4CisJTE9DS19QUkVGSVgKKwljbXB4Y2hnOGIgKCVlYnApCisJam5lIDFiCisKKwltb3ZsICQxLCAlZWF4CiszOgorCWFkZGwgJDgsICVlc3AKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTgKKwlSRVNUT1JFIGVieAorCVJFU1RPUkUgZWJwCisJcmV0Cis0OgorCWNtcGwgJWVkeCwgNCglZXNwKQorCWpuZSAyYgorCXhvcmwgJWVheCwgJWVheAorCWptcCAzYgorCUNGSV9FTkRQUk9DCitFTkRQUk9DKGF0b21pYzY0X2FkZF91bmxlc3NfY3g4KQorCitFTlRSWShhdG9taWM2NF9pbmNfbm90X3plcm9fY3g4KQorCUNGSV9TVEFSVFBST0MKKwlTQVZFIGVieAorCisJcmVhZDY0ICVlc2kKKzE6CisJdGVzdGwgJWVheCwgJWVheAorCWplIDRmCisyOgorCW1vdmwgJWVheCwgJWVieAorCW1vdmwgJWVkeCwgJWVjeAorCWFkZGwgJDEsICVlYngKKwlhZGNsICQwLCAlZWN4CisJTE9DS19QUkVGSVgKKwljbXB4Y2hnOGIgKCVlc2kpCisJam5lIDFiCisKKwltb3ZsICQxLCAlZWF4CiszOgorCVJFU1RPUkUgZWJ4CisJcmV0Cis0OgorCXRlc3RsICVlZHgsICVlZHgKKwlqbmUgMmIKKwlqbXAgM2IKKwlDRklfRU5EUFJPQworRU5EUFJPQyhhdG9taWM2NF9pbmNfbm90X3plcm9fY3g4KQpkaWZmIC0tZ2l0IGEvYXJjaC91bmljb3JlMzIvaW5jbHVkZS9tYWNoL3JlZ3MtdW1hbC5oIGIvYXJjaC91bmljb3JlMzIvaW5jbHVkZS9tYWNoL3JlZ3MtdW1hbC5oCmluZGV4IDg4NWJiNjIuLmFhMjJkZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvdW5pY29yZTMyL2luY2x1ZGUvbWFjaC9yZWdzLXVtYWwuaAorKysgYi9hcmNoL3VuaWNvcmUzMi9pbmNsdWRlL21hY2gvcmVncy11bWFsLmgKQEAgLTUyLDcgKzUyLDcgQEAKICAqLwogI2RlZmluZSBVTUFMX01JSVNUQVRVUwkJKFBLVU5JVFlfVU1BTF9CQVNFICsgMHgwMDMwKQogLyoKLSAqIE1JSSBNYW5hZ21lbnQgSW5kaWNhdG9yIFVNQUxfTUlJSURDVAorICogTUlJIE1hbmFnZW1lbnQgSW5kaWNhdG9yIFVNQUxfTUlJSURDVAogICovCiAjZGVmaW5lIFVNQUxfTUlJSURDVAkJKFBLVU5JVFlfVU1BTF9CQVNFICsgMHgwMDM0KQogLyoKQEAgLTkxLDcgKzkxLDcgQEAKICNkZWZpbmUgVU1BTF9GSUZPUkFNNgkJKFBLVU5JVFlfVU1BTF9CQVNFICsgMHgwMDc4KQogI2RlZmluZSBVTUFMX0ZJRk9SQU03CQkoUEtVTklUWV9VTUFMX0JBU0UgKyAweDAwN2MpCiAKLS8qIE1BSEJFIE1PRFVFTCBPRiBVTUFMICovCisvKiBNQUhCRSBNT0RVTEUgT0YgVU1BTCAqLwogLyogVU1BTCdzIE1BSEJFIG1vZHVsZSBpbnRlcmZhY2VzIHRvIHRoZSBob3N0IHN5c3RlbSB0aHJvdWdoIDMyLWJpdCBBSEIgTWFzdGVyCiAgKiBhbmQgU2xhdmUgcG9ydHMuUmVnaXN0ZXJzIHdpdGhpbiB0aGUgTS1BSEJFIHByb3ZpZGUgQ29udHJvbCBhbmQgU3RhdHVzCiAgKiBpbmZvcm1hdGlvbiBjb25jZXJuaW5nIHRoZXNlIHRyYW5zZmVycy4KZGlmZiAtLWdpdCBhL2FyY2gvdW5pY29yZTMyL2tlcm5lbC9oZWFkLlMgYi9hcmNoL3VuaWNvcmUzMi9rZXJuZWwvaGVhZC5TCmluZGV4IDkyMjU1ZjMuLjhjYWYzMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW5pY29yZTMyL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC91bmljb3JlMzIva2VybmVsL2hlYWQuUwpAQCAtMTY0LDcgKzE2NCw3IEBACiBFTkRQUk9DKHN0ZXh0KQogCiAvKgotICogRW5hYmxlIHRoZSBNTVUuICBUaGlzIGNvbXBsZXRlbHkgY2hhbmdlcyB0aGUgc3R1Y3R1cmUgb2YgdGhlIHZpc2libGUKKyAqIEVuYWJsZSB0aGUgTU1VLiAgVGhpcyBjb21wbGV0ZWx5IGNoYW5nZXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgdmlzaWJsZQogICogbWVtb3J5IHNwYWNlLiAgWW91IHdpbGwgbm90IGJlIGFibGUgdG8gdHJhY2UgZXhlY3V0aW9uIHRocm91Z2ggdGhpcy4KICAqCiAgKiAgcjAgID0gY3AjMCBjb250cm9sIHJlZ2lzdGVyCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L21lbW9yeS5jIGIvYXJjaC94ODYvYm9vdC9tZW1vcnkuYwppbmRleCBjYWUzZmViLi5kYjc1ZDA3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L21lbW9yeS5jCisrKyBiL2FyY2gveDg2L2Jvb3QvbWVtb3J5LmMKQEAgLTkxLDcgKzkxLDcgQEAKIAlpZiAob3JlZy5heCA+IDE1KjEwMjQpIHsKIAkJcmV0dXJuIC0xOwkvKiBCb2d1cyEgKi8KIAl9IGVsc2UgaWYgKG9yZWcuYXggPT0gMTUqMTAyNCkgewotCQlib290X3BhcmFtcy5hbHRfbWVtX2sgPSAob3JlZy5keCA8PCA2KSArIG9yZWcuYXg7CisJCWJvb3RfcGFyYW1zLmFsdF9tZW1fayA9IChvcmVnLmJ4IDw8IDYpICsgb3JlZy5heDsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBUaGlzIGlnbm9yZXMgbWVtb3J5IGFib3ZlIDE2TUIgaWYgd2UgaGF2ZSBhIG1lbW9yeQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpY2RlZi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpY2RlZi5oCmluZGV4IGQ4Nzk4OGIuLjM0NTk1ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWNkZWYuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljZGVmLmgKQEAgLTc4LDYgKzc4LDcgQEAKICNkZWZpbmUJCUFQSUNfREVTVF9MT0dJQ0FMCTB4MDA4MDAKICNkZWZpbmUJCUFQSUNfREVTVF9QSFlTSUNBTAkweDAwMDAwCiAjZGVmaW5lCQlBUElDX0RNX0ZJWEVECQkweDAwMDAwCisjZGVmaW5lCQlBUElDX0RNX0ZJWEVEX01BU0sJMHgwMDcwMAogI2RlZmluZQkJQVBJQ19ETV9MT1dFU1QJCTB4MDAxMDAKICNkZWZpbmUJCUFQSUNfRE1fU01JCQkweDAwMjAwCiAjZGVmaW5lCQlBUElDX0RNX1JFTVJECQkweDAwMzAwCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9nYXJ0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9nYXJ0LmgKaW5kZXggNDMwODViZi4uMTU2Y2Q1ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZ2FydC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2dhcnQuaApAQCAtNjYsNyArNjYsNyBAQAogCSAqIERvbid0IGVuYWJsZSB0cmFuc2xhdGlvbiBidXQgZW5hYmxlIEdBUlQgSU8gYW5kIENQVSBhY2Nlc3Nlcy4KIAkgKiBBbHNvLCBzZXQgRElTVExCV0FMS1BSQiBzaW5jZSBHQVJUIHRhYmxlcyBtZW1vcnkgaXMgVUMuCiAJICovCi0JY3RsID0gRElTVExCV0FMS1BSQiB8IG9yZGVyIDw8IDE7CisJY3RsID0gb3JkZXIgPDwgMTsKIAogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBBTUQ2NF9HQVJUQVBFUlRVUkVDVEwsIGN0bCk7CiB9CkBAIC03NSwxNyArNzUsMTcgQEAKIHsKIAl1MzIgdG1wLCBjdGw7CiAKLSAgICAgICAgLyogYWRkcmVzcyBvZiB0aGUgbWFwcGluZ3MgdGFibGUgKi8KLSAgICAgICAgYWRkciA+Pj0gMTI7Ci0gICAgICAgIHRtcCA9ICh1MzIpIGFkZHI8PDQ7Ci0gICAgICAgIHRtcCAmPSB+MHhmOwotICAgICAgICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgQU1ENjRfR0FSVFRBQkxFQkFTRSwgdG1wKTsKKwkvKiBhZGRyZXNzIG9mIHRoZSBtYXBwaW5ncyB0YWJsZSAqLworCWFkZHIgPj49IDEyOworCXRtcCA9ICh1MzIpIGFkZHI8PDQ7CisJdG1wICY9IH4weGY7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIEFNRDY0X0dBUlRUQUJMRUJBU0UsIHRtcCk7CiAKLSAgICAgICAgLyogRW5hYmxlIEdBUlQgdHJhbnNsYXRpb24gZm9yIHRoaXMgaGFtbWVyLiAqLwotICAgICAgICBwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBBTUQ2NF9HQVJUQVBFUlRVUkVDVEwsICZjdGwpOwotICAgICAgICBjdGwgfD0gR0FSVEVOOwotICAgICAgICBjdGwgJj0gfihESVNHQVJUQ1BVIHwgRElTR0FSVElPKTsKLSAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIEFNRDY0X0dBUlRBUEVSVFVSRUNUTCwgY3RsKTsKKwkvKiBFbmFibGUgR0FSVCB0cmFuc2xhdGlvbiBmb3IgdGhpcyBoYW1tZXIuICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgQU1ENjRfR0FSVEFQRVJUVVJFQ1RMLCAmY3RsKTsKKwljdGwgfD0gR0FSVEVOIHwgRElTVExCV0FMS1BSQjsKKwljdGwgJj0gfihESVNHQVJUQ1BVIHwgRElTR0FSVElPKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgQU1ENjRfR0FSVEFQRVJUVVJFQ1RMLCBjdGwpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBhcGVydHVyZV92YWxpZCh1NjQgYXBlcl9iYXNlLCB1MzIgYXBlcl9zaXplLCB1MzIgbWluX3NpemUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmgKaW5kZXggZWYzMjg5MC4uYzllMDllYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaTM4Ny5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2kzODcuaApAQCAtMjM3LDcgKzIzNyw3IEBACiAJfSBlbHNlIGlmICh1c2VfZnhzcigpKSB7CiAJCWZwdV9meHNhdmUoZnB1KTsKIAl9IGVsc2UgewotCQlhc20gdm9sYXRpbGUoImZzYXZlICVbZnhdOyBmd2FpdCIKKwkJYXNtIHZvbGF0aWxlKCJmbnNhdmUgJVtmeF07IGZ3YWl0IgogCQkJICAgICA6IFtmeF0gIj1tIiAoZnB1LT5zdGF0ZS0+ZnNhdmUpKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaAppbmRleCBjNGJkMjY3Li5hOTdhMjQwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb19hcGljLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oCkBAIC0xNTAsNyArMTUwLDcgQEAKIGV4dGVybiB2b2lkIGlvYXBpY19hbmRfZ3NpX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBpb2FwaWNfaW5zZXJ0X3Jlc291cmNlcyh2b2lkKTsKIAotaW50IGlvX2FwaWNfc2V0dXBfaXJxX3Bpbih1bnNpZ25lZCBpbnQgaXJxLCBpbnQgbm9kZSwgc3RydWN0IGlvX2FwaWNfaXJxX2F0dHIgKmF0dHIpOworaW50IGlvX2FwaWNfc2V0dXBfaXJxX3Bpbl9vbmNlKHVuc2lnbmVkIGludCBpcnEsIGludCBub2RlLCBzdHJ1Y3QgaW9fYXBpY19pcnFfYXR0ciAqYXR0cik7CiAKIGV4dGVybiBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqKmFsbG9jX2lvYXBpY19lbnRyaWVzKHZvaWQpOwogZXh0ZXJuIHZvaWQgZnJlZV9pb2FwaWNfZW50cmllcyhzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqKmlvYXBpY19lbnRyaWVzKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKaW5kZXggZmQ1YTFmMy4uM2NjZTcxNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKQEAgLTk2LDExICs5NiwxNSBAQAogI2RlZmluZSBNU1JfSUEzMl9NQzBfQUREUgkJMHgwMDAwMDQwMgogI2RlZmluZSBNU1JfSUEzMl9NQzBfTUlTQwkJMHgwMDAwMDQwMwogCisjZGVmaW5lIE1TUl9BTUQ2NF9NQzBfTUFTSwkJMHhjMDAxMDA0NAorCiAjZGVmaW5lIE1TUl9JQTMyX01DeF9DVEwoeCkJCShNU1JfSUEzMl9NQzBfQ1RMICsgNCooeCkpCiAjZGVmaW5lIE1TUl9JQTMyX01DeF9TVEFUVVMoeCkJCShNU1JfSUEzMl9NQzBfU1RBVFVTICsgNCooeCkpCiAjZGVmaW5lIE1TUl9JQTMyX01DeF9BRERSKHgpCQkoTVNSX0lBMzJfTUMwX0FERFIgKyA0Kih4KSkKICNkZWZpbmUgTVNSX0lBMzJfTUN4X01JU0MoeCkJCShNU1JfSUEzMl9NQzBfTUlTQyArIDQqKHgpKQogCisjZGVmaW5lIE1TUl9BTUQ2NF9NQ3hfTUFTSyh4KQkJKE1TUl9BTUQ2NF9NQzBfTUFTSyArICh4KSkKKwogLyogVGhlc2UgYXJlIGNvbnNlY3V0aXZlIGFuZCBub3QgaW4gdGhlIG5vcm1hbCA0ZXIgTUNFIGJhbmsgYmxvY2sgKi8KICNkZWZpbmUgTVNSX0lBMzJfTUMwX0NUTDIJCTB4MDAwMDAyODAKICNkZWZpbmUgTVNSX0lBMzJfTUN4X0NUTDIoeCkJCShNU1JfSUEzMl9NQzBfQ1RMMiArICh4KSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWEuaAppbmRleCAzZDRkYWI0Li5hNTBmYzlmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYS5oCkBAIC01MSw3ICs1MSw3IEBACiAjZW5kaWYJLyogQ09ORklHX05VTUEgKi8KIAogI2lmZGVmIENPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMKLXN0cnVjdCBjcHVtYXNrIF9fY3B1aW5pdCAqZGVidWdfY3B1bWFza19zZXRfY3B1KGludCBjcHUsIGludCBlbmFibGUpOwordm9pZCBkZWJ1Z19jcHVtYXNrX3NldF9jcHUoaW50IGNwdSwgaW50IG5vZGUsIGJvb2wgZW5hYmxlKTsKICNlbmRpZgogCiAjZW5kaWYJLyogX0FTTV9YODZfTlVNQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmgKaW5kZXggN2RiNzcyMy4uZDU2MTg3YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaApAQCAtMjk5LDYgKzI5OSw3IEBACiAvKiBJbnN0YWxsIGEgcHRlIGZvciBhIHBhcnRpY3VsYXIgdmFkZHIgaW4ga2VybmVsIHNwYWNlLiAqLwogdm9pZCBzZXRfcHRlX3ZhZGRyKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHB0ZV90IHB0ZSk7CiAKK2V4dGVybiB2b2lkIG5hdGl2ZV9wYWdldGFibGVfcmVzZXJ2ZSh1NjQgc3RhcnQsIHU2NCBlbmQpOwogI2lmZGVmIENPTkZJR19YODZfMzIKIGV4dGVybiB2b2lkIG5hdGl2ZV9wYWdldGFibGVfc2V0dXBfc3RhcnQocGdkX3QgKmJhc2UpOwogZXh0ZXJuIHZvaWQgbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9kb25lKHBnZF90ICpiYXNlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2JhdS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfYmF1LmgKaW5kZXggM2UwOTRhZi4uMTMwZjFlZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfYmF1LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfYmF1LmgKQEAgLTk0LDYgKzk0LDggQEAKIC8qIGFmdGVyIHRoaXMgIyBjb25zZWN1dGl2ZSBzdWNjZXNzZXMsIGJ1bXAgdXAgdGhlIHRocm90dGxlIGlmIGl0IHdhcyBsb3dlcmVkICovCiAjZGVmaW5lIENPTVBMRVRFX1RIUkVTSE9MRCA1CiAKKyNkZWZpbmUgVVZfTEJfU1VCTk9ERUlEIDB4MTAKKwogLyoKICAqIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBkZXN0aW5hdGlvbiBzaWRlIHBheWxvYWQgcXVldWUKICAqLwpAQCAtMTI0LDcgKzEyNiw3IEBACiAgKiBUaGUgZGlzdHJpYnV0aW9uIHNwZWNpZmljYXRpb24gKDMyIGJ5dGVzKSBpcyBpbnRlcnByZXRlZCBhcyBhIDI1Ni1iaXQKICAqIGRpc3RyaWJ1dGlvbiB2ZWN0b3IuIEFkamFjZW50IGJpdHMgY29ycmVzcG9uZCB0byBjb25zZWN1dGl2ZSBldmVuIG51bWJlcmVkCiAgKiBub2RlSURzLiBUaGUgcmVzdWx0IG9mIGFkZGluZyB0aGUgaW5kZXggb2YgYSBnaXZlbiBiaXQgdG8gdGhlIDE1LWJpdAotICogJ2Jhc2VfZGVzdF9ub2RlaWQnIGZpZWxkIG9mIHRoZSBoZWFkZXIgY29ycmVzcG9uZHMgdG8gdGhlCisgKiAnYmFzZV9kZXN0X25hc2lkJyBmaWVsZCBvZiB0aGUgaGVhZGVyIGNvcnJlc3BvbmRzIHRvIHRoZQogICogZGVzdGluYXRpb24gbm9kZUlEIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHNwZWNpZmllZCBiaXQuCiAgKi8KIHN0cnVjdCBiYXVfdGFyZ2V0X3V2aHVibWFzayB7CkBAIC0xNzYsNyArMTc4LDcgQEAKIHN0cnVjdCBiYXVfbXNnX2hlYWRlciB7CiAJdW5zaWduZWQgaW50IGRlc3Rfc3Vibm9kZWlkOjY7CS8qIG11c3QgYmUgMHgxMCwgZm9yIHRoZSBMQiAqLwogCS8qIGJpdHMgNTowICovCi0JdW5zaWduZWQgaW50IGJhc2VfZGVzdF9ub2RlaWQ6MTU7IC8qIG5hc2lkIG9mIHRoZSAqLworCXVuc2lnbmVkIGludCBiYXNlX2Rlc3RfbmFzaWQ6MTU7IC8qIG5hc2lkIG9mIHRoZSAqLwogCS8qIGJpdHMgMjA6NiAqLwkJCSAgLyogZmlyc3QgYml0IGluIHV2aHViIG1hcCAqLwogCXVuc2lnbmVkIGludCBjb21tYW5kOjg7CS8qIG1lc3NhZ2UgdHlwZSAqLwogCS8qIGJpdHMgMjg6MjEgKi8KQEAgLTM3OCw2ICszODAsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGRfcmNhbmNlbGVkOyAvKiBudW1iZXIgb2YgbWVzc2FnZXMgY2FuY2VsZWQgYnkgcmVzZXRzICovCiB9OwogCitzdHJ1Y3QgaHViX2FuZF9wbm9kZSB7CisJc2hvcnQgdXZodWI7CisJc2hvcnQgcG5vZGU7Cit9OwogLyoKICAqIG9uZSBwZXItY3B1OyB0byBsb2NhdGUgdGhlIHNvZnR3YXJlIHRhYmxlcwogICovCkBAIC0zOTksMTAgKzQwNSwxMiBAQAogCWludCBiYXVkaXNhYmxlZDsKIAlpbnQgc2V0X2JhdV9vZmY7CiAJc2hvcnQgY3B1OworCXNob3J0IG9zbm9kZTsKIAlzaG9ydCB1dmh1Yl9jcHU7CiAJc2hvcnQgdXZodWI7CiAJc2hvcnQgY3B1c19pbl9zb2NrZXQ7CiAJc2hvcnQgY3B1c19pbl91dmh1YjsKKwlzaG9ydCBwYXJ0aXRpb25fYmFzZV9wbm9kZTsKIAl1bnNpZ25lZCBzaG9ydCBtZXNzYWdlX251bWJlcjsKIAl1bnNpZ25lZCBzaG9ydCB1dmh1Yl9xdWllc2NlOwogCXNob3J0IHNvY2tldF9hY2tub3dsZWRnZV9jb3VudFtERVNUX1FfU0laRV07CkBAIC00MjIsMTUgKzQzMCwxNiBAQAogCWludCBjb25nZXN0ZWRfcGVyaW9kOwogCWN5Y2xlc190IHBlcmlvZF90aW1lOwogCWxvbmcgcGVyaW9kX3JlcXVlc3RzOworCXN0cnVjdCBodWJfYW5kX3Bub2RlICp0YXJnZXRfaHViX2FuZF9wbm9kZTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IGJhdV91dmh1Yl9pc3NldChpbnQgdXZodWIsIHN0cnVjdCBiYXVfdGFyZ2V0X3V2aHVibWFzayAqZHN0cCkKIHsKIAlyZXR1cm4gY29uc3RhbnRfdGVzdF9iaXQodXZodWIsICZkc3RwLT5iaXRzWzBdKTsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBiYXVfdXZodWJfc2V0KGludCB1dmh1Yiwgc3RydWN0IGJhdV90YXJnZXRfdXZodWJtYXNrICpkc3RwKQorc3RhdGljIGlubGluZSB2b2lkIGJhdV91dmh1Yl9zZXQoaW50IHBub2RlLCBzdHJ1Y3QgYmF1X3RhcmdldF91dmh1Ym1hc2sgKmRzdHApCiB7Ci0JX19zZXRfYml0KHV2aHViLCAmZHN0cC0+Yml0c1swXSk7CisJX19zZXRfYml0KHBub2RlLCAmZHN0cC0+Yml0c1swXSk7CiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgYmF1X3V2aHVic19jbGVhcihzdHJ1Y3QgYmF1X3RhcmdldF91dmh1Ym1hc2sgKmRzdHAsCiAJCQkJICAgIGludCBuYml0cykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKaW5kZXggYTUwMTc0MS4uNDI5ODAwMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKQEAgLTM5OCw2ICszOTgsOCBAQAogCXVuc2lnbmVkIHNob3J0CW5yX29ubGluZV9jcHVzOwogCXVuc2lnbmVkIHNob3J0CXBub2RlOwogCXNob3J0CQltZW1vcnlfbmlkOworCXNwaW5sb2NrX3QJbm1pX2xvY2s7CisJdW5zaWduZWQgbG9uZwlubWlfY291bnQ7CiB9OwogZXh0ZXJuIHN0cnVjdCB1dl9ibGFkZV9pbmZvICp1dl9ibGFkZV9pbmZvOwogZXh0ZXJuIHNob3J0ICp1dl9ub2RlX3RvX2JsYWRlOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfbW1ycy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfbW1ycy5oCmluZGV4IDIwY2FmZWEuLmY1YmI2NGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X21tcnMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9tbXJzLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogU0dJIFVWIE1NUiBkZWZpbml0aW9ucwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDExIFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqLwogCiAjaWZuZGVmIF9BU01fWDg2X1VWX1VWX01NUlNfSApAQCAtMTA5OSw1ICsxMDk5LDE5IEBACiAgICAgfSBzOwogfTsKIAorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVZIX1NDUkFUQ0g1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfU0NSQVRDSDUgMHgyZDAyMDBVTAorI2RlZmluZSBVVkhfU0NSQVRDSDVfMzIgMHgwMDc3OAorCisjZGVmaW5lIFVWSF9TQ1JBVENINV9TQ1JBVENINV9TSEZUIDAKKyNkZWZpbmUgVVZIX1NDUkFUQ0g1X1NDUkFUQ0g1X01BU0sgMHhmZmZmZmZmZmZmZmZmZmZmVUwKK3VuaW9uIHV2aF9zY3JhdGNoNV91IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9zY3JhdGNoNV9zIHsKKwl1bnNpZ25lZCBsb25nCXNjcmF0Y2g1IDogNjQ7ICAvKiBSVywgVzFDUyAqLworICAgIH0gczsKK307CiAKICNlbmRpZiAvKiBfX0FTTV9VVl9NTVJTX1g4Nl9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oCmluZGV4IDY0M2ViZjIuLmQzZDg1OTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaApAQCAtNjgsNiArNjgsMTcgQEAKIH07CiAKIC8qKgorICogc3RydWN0IHg4Nl9pbml0X21hcHBpbmcgLSBwbGF0Zm9ybSBzcGVjaWZpYyBpbml0aWFsIGtlcm5lbCBwYWdldGFibGUgc2V0dXAKKyAqIEBwYWdldGFibGVfcmVzZXJ2ZToJcmVzZXJ2ZSBhIHJhbmdlIG9mIGFkZHJlc3NlcyBmb3Iga2VybmVsIHBhZ2V0YWJsZSB1c2FnZQorICoKKyAqIEZvciBtb3JlIGRldGFpbHMgb24gdGhlIHB1cnBvc2Ugb2YgdGhpcyBob29rLCBsb29rIGluCisgKiBpbml0X21lbW9yeV9tYXBwaW5nIGFuZCB0aGUgY29tbWl0IHRoYXQgYWRkZWQgaXQuCisgKi8KK3N0cnVjdCB4ODZfaW5pdF9tYXBwaW5nIHsKKwl2b2lkICgqcGFnZXRhYmxlX3Jlc2VydmUpKHU2NCBzdGFydCwgdTY0IGVuZCk7Cit9OworCisvKioKICAqIHN0cnVjdCB4ODZfaW5pdF9wYWdpbmcgLSBwbGF0Zm9ybSBzcGVjaWZpYyBwYWdpbmcgZnVuY3Rpb25zCiAgKiBAcGFnZXRhYmxlX3NldHVwX3N0YXJ0OglwbGF0Zm9ybSBzcGVjaWZpYyBwcmUgcGFnaW5nX2luaXQoKSBjYWxsCiAgKiBAcGFnZXRhYmxlX3NldHVwX2RvbmU6CXBsYXRmb3JtIHNwZWNpZmljIHBvc3QgcGFnaW5nX2luaXQoKSBjYWxsCkBAIC0xMjMsNiArMTM0LDcgQEAKIAlzdHJ1Y3QgeDg2X2luaXRfbXBwYXJzZQkJbXBwYXJzZTsKIAlzdHJ1Y3QgeDg2X2luaXRfaXJxcwkJaXJxczsKIAlzdHJ1Y3QgeDg2X2luaXRfb2VtCQlvZW07CisJc3RydWN0IHg4Nl9pbml0X21hcHBpbmcJCW1hcHBpbmc7CiAJc3RydWN0IHg4Nl9pbml0X3BhZ2luZwkJcGFnaW5nOwogCXN0cnVjdCB4ODZfaW5pdF90aW1lcnMJCXRpbWVyczsKIAlzdHJ1Y3QgeDg2X2luaXRfaW9tbXUJCWlvbW11OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwZXJ0dXJlXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBlcnR1cmVfNjQuYwppbmRleCA4NmQxYWQ0Li43M2ZiNDY5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBlcnR1cmVfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBlcnR1cmVfNjQuYwpAQCAtNDk5LDcgKzQ5OSw3IEBACiAJCSAqIERvbid0IGVuYWJsZSB0cmFuc2xhdGlvbiB5ZXQgYnV0IGVuYWJsZSBHQVJUIElPIGFuZCBDUFUKIAkJICogYWNjZXNzZXMgYW5kIHNldCBESVNUTEJXQUxLUFJCIHNpbmNlIEdBUlQgdGFibGUgbWVtb3J5IGlzIFVDLgogCQkgKi8KLQkJdTMyIGN0bCA9IERJU1RMQldBTEtQUkIgfCBhcGVyX29yZGVyIDw8IDE7CisJCXUzMiBjdGwgPSBhcGVyX29yZGVyIDw8IDE7CiAKIAkJYnVzID0gYW1kX25iX2J1c19kZXZfcmFuZ2VzW2ldLmJ1czsKIAkJZGV2X2Jhc2UgPSBhbWRfbmJfYnVzX2Rldl9yYW5nZXNbaV0uZGV2X2Jhc2U7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKaW5kZXggNjhkZjA5Yi4uNDVmZDMzZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwpAQCAtMTI4LDggKzEyOCw4IEBACiB9CiBlYXJseV9wYXJhbSgibm9hcGljIiwgcGFyc2Vfbm9hcGljKTsKIAotc3RhdGljIGludCBpb19hcGljX3NldHVwX2lycV9waW5fb25jZSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgbm9kZSwKLQkJCQkgICAgICBzdHJ1Y3QgaW9fYXBpY19pcnFfYXR0ciAqYXR0cik7CitzdGF0aWMgaW50IGlvX2FwaWNfc2V0dXBfaXJxX3Bpbih1bnNpZ25lZCBpbnQgaXJxLCBpbnQgbm9kZSwKKwkJCQkgc3RydWN0IGlvX2FwaWNfaXJxX2F0dHIgKmF0dHIpOwogCiAvKiBXaWxsIGJlIGNhbGxlZCBpbiBtcHBhcnNlL2FjcGkvc2ZpIGNvZGVzIGZvciBzYXZpbmcgSVJRIGluZm8gKi8KIHZvaWQgbXBfc2F2ZV9pcnEoc3RydWN0IG1wY19pbnRzcmMgKm0pCkBAIC0zNTcwLDcgKzM1NzAsNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19IVF9JUlEgKi8KIAotaW50CitzdGF0aWMgaW50CiBpb19hcGljX3NldHVwX2lycV9waW4odW5zaWduZWQgaW50IGlycSwgaW50IG5vZGUsIHN0cnVjdCBpb19hcGljX2lycV9hdHRyICphdHRyKQogewogCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBhbGxvY19pcnFfYW5kX2NmZ19hdChpcnEsIG5vZGUpOwpAQCAtMzU4NSw4ICszNTg1LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGlvX2FwaWNfc2V0dXBfaXJxX3Bpbl9vbmNlKHVuc2lnbmVkIGludCBpcnEsIGludCBub2RlLAotCQkJCSAgICAgIHN0cnVjdCBpb19hcGljX2lycV9hdHRyICphdHRyKQoraW50IGlvX2FwaWNfc2V0dXBfaXJxX3Bpbl9vbmNlKHVuc2lnbmVkIGludCBpcnEsIGludCBub2RlLAorCQkJICAgICAgIHN0cnVjdCBpb19hcGljX2lycV9hdHRyICphdHRyKQogewogCXVuc2lnbmVkIGludCBpZCA9IGF0dHItPmlvYXBpYywgcGluID0gYXR0ci0+aW9hcGljX3BpbjsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKaW5kZXggMzNiMTBhMC4uN2FjZDJkMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCkBAIC0zNyw2ICszNywxMyBAQAogI2luY2x1ZGUgPGFzbS9zbXAuaD4KICNpbmNsdWRlIDxhc20veDg2X2luaXQuaD4KICNpbmNsdWRlIDxhc20vZW1lcmdlbmN5LXJlc3RhcnQuaD4KKyNpbmNsdWRlIDxhc20vbm1pLmg+CisKKy8qIEJNQyBzZXRzIGEgYml0IHRoaXMgTU1SIG5vbi16ZXJvIGJlZm9yZSBzZW5kaW5nIGFuIE5NSSAqLworI2RlZmluZSBVVkhfTk1JX01NUgkJCQlVVkhfU0NSQVRDSDUKKyNkZWZpbmUgVVZIX05NSV9NTVJfQ0xFQVIJCQkoVVZIX05NSV9NTVIgKyA4KQorI2RlZmluZSBVVl9OTUlfUEVORElOR19NQVNLCQkJKDFVTCA8PCA2MykKK0RFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGNwdV9sYXN0X25taV9jb3VudCk7CiAKIERFRklORV9QRVJfQ1BVKGludCwgeDJhcGljX2V4dHJhX2JpdHMpOwogCkBAIC02NDIsMTggKzY0OSw0NiBAQAogICovCiBpbnQgdXZfaGFuZGxlX25taShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgcmVhc29uLCB2b2lkICpkYXRhKQogeworCXVuc2lnbmVkIGxvbmcgcmVhbF91dl9ubWk7CisJaW50IGJpZDsKKwogCWlmIChyZWFzb24gIT0gRElFX05NSVVOS05PV04pCiAJCXJldHVybiBOT1RJRllfT0s7CiAKIAlpZiAoaW5fY3Jhc2hfa2V4ZWMpCiAJCS8qIGRvIG5vdGhpbmcgaWYgZW50ZXJpbmcgdGhlIGNyYXNoIGtlcm5lbCAqLwogCQlyZXR1cm4gTk9USUZZX09LOworCiAJLyoKLQkgKiBVc2UgYSBsb2NrIHNvIG9ubHkgb25lIGNwdSBwcmludHMgYXQgYSB0aW1lCi0JICogdG8gcHJldmVudCBpbnRlcm1peGVkIG91dHB1dC4KKwkgKiBFYWNoIGJsYWRlIGhhcyBhbiBNTVIgdGhhdCBpbmRpY2F0ZXMgd2hlbiBhbiBOTUkgaGFzIGJlZW4gc2VudAorCSAqIHRvIGNwdXMgb24gdGhlIGJsYWRlLiBJZiBhbiBOTUkgaXMgZGV0ZWN0ZWQsIGF0b21pY2FsbHkKKwkgKiBjbGVhciB0aGUgTU1SIGFuZCB1cGRhdGUgYSBwZXItYmxhZGUgTk1JIGNvdW50IHVzZWQgdG8KKwkgKiBjYXVzZSBlYWNoIGNwdSBvbiB0aGUgYmxhZGUgdG8gbm90aWNlIGEgbmV3IE5NSS4KKwkgKi8KKwliaWQgPSB1dl9udW1hX2JsYWRlX2lkKCk7CisJcmVhbF91dl9ubWkgPSAodXZfcmVhZF9sb2NhbF9tbXIoVVZIX05NSV9NTVIpICYgVVZfTk1JX1BFTkRJTkdfTUFTSyk7CisKKwlpZiAodW5saWtlbHkocmVhbF91dl9ubWkpKSB7CisJCXNwaW5fbG9jaygmdXZfYmxhZGVfaW5mb1tiaWRdLm5taV9sb2NrKTsKKwkJcmVhbF91dl9ubWkgPSAodXZfcmVhZF9sb2NhbF9tbXIoVVZIX05NSV9NTVIpICYgVVZfTk1JX1BFTkRJTkdfTUFTSyk7CisJCWlmIChyZWFsX3V2X25taSkgeworCQkJdXZfYmxhZGVfaW5mb1tiaWRdLm5taV9jb3VudCsrOworCQkJdXZfd3JpdGVfbG9jYWxfbW1yKFVWSF9OTUlfTU1SX0NMRUFSLCBVVl9OTUlfUEVORElOR19NQVNLKTsKKwkJfQorCQlzcGluX3VubG9jaygmdXZfYmxhZGVfaW5mb1tiaWRdLm5taV9sb2NrKTsKKwl9CisKKwlpZiAobGlrZWx5KF9fZ2V0X2NwdV92YXIoY3B1X2xhc3Rfbm1pX2NvdW50KSA9PSB1dl9ibGFkZV9pbmZvW2JpZF0ubm1pX2NvdW50KSkKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCisJX19nZXRfY3B1X3ZhcihjcHVfbGFzdF9ubWlfY291bnQpID0gdXZfYmxhZGVfaW5mb1tiaWRdLm5taV9jb3VudDsKKworCS8qCisJICogVXNlIGEgbG9jayBzbyBvbmx5IG9uZSBjcHUgcHJpbnRzIGF0IGEgdGltZS4KKwkgKiBUaGlzIHByZXZlbnRzIGludGVybWl4ZWQgb3V0cHV0LgogCSAqLwogCXNwaW5fbG9jaygmdXZfbm1pX2xvY2spOwotCXByX2luZm8oIk5NSSBzdGFjayBkdW1wIGNwdSAldTpcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcHJfaW5mbygiVVYgTk1JIHN0YWNrIGR1bXAgY3B1ICV1OlxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlkdW1wX3N0YWNrKCk7CiAJc3Bpbl91bmxvY2soJnV2X25taV9sb2NrKTsKIApAQCAtNjYxLDcgKzY5Niw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgdXZfZHVtcF9zdGFja19ubWlfbmIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwJPSB1dl9oYW5kbGVfbm1pCisJLm5vdGlmaWVyX2NhbGwJPSB1dl9oYW5kbGVfbm1pLAorCS5wcmlvcml0eSA9IE5NSV9MT0NBTF9MT1dfUFJJT1IgLSAxLAogfTsKIAogdm9pZCB1dl9yZWdpc3Rlcl9ubWlfbm90aWZpZXIodm9pZCkKQEAgLTcyMCw4ICs3NTYsOSBAQAogCXByaW50ayhLRVJOX0RFQlVHICJVVjogRm91bmQgJWQgYmxhZGVzXG4iLCB1dl9udW1fcG9zc2libGVfYmxhZGVzKCkpOwogCiAJYnl0ZXMgPSBzaXplb2Yoc3RydWN0IHV2X2JsYWRlX2luZm8pICogdXZfbnVtX3Bvc3NpYmxlX2JsYWRlcygpOwotCXV2X2JsYWRlX2luZm8gPSBrbWFsbG9jKGJ5dGVzLCBHRlBfS0VSTkVMKTsKKwl1dl9ibGFkZV9pbmZvID0ga3phbGxvYyhieXRlcywgR0ZQX0tFUk5FTCk7CiAJQlVHX09OKCF1dl9ibGFkZV9pbmZvKTsKKwogCWZvciAoYmxhZGUgPSAwOyBibGFkZSA8IHV2X251bV9wb3NzaWJsZV9ibGFkZXMoKTsgYmxhZGUrKykKIAkJdXZfYmxhZGVfaW5mb1tibGFkZV0ubWVtb3J5X25pZCA9IC0xOwogCkBAIC03NDcsNiArNzg0LDcgQEAKIAkJCXV2X2JsYWRlX2luZm9bYmxhZGVdLnBub2RlID0gcG5vZGU7CiAJCQl1dl9ibGFkZV9pbmZvW2JsYWRlXS5ucl9wb3NzaWJsZV9jcHVzID0gMDsKIAkJCXV2X2JsYWRlX2luZm9bYmxhZGVdLm5yX29ubGluZV9jcHVzID0gMDsKKwkJCXNwaW5fbG9ja19pbml0KCZ1dl9ibGFkZV9pbmZvW2JsYWRlXS5ubWlfbG9jayk7CiAJCQltYXhfcG5vZGUgPSBtYXgocG5vZGUsIG1heF9wbm9kZSk7CiAJCQlibGFkZSsrOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKaW5kZXggMGI0YmU0My4uYWRlZTEyZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYwpAQCAtMjI4LDYgKzIyOCw3IEBACiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMTIzOCw2ICsxMjM5LDcgQEAKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJc3lzZGV2X3N1c3BlbmQoUE1TR19TVVNQRU5EKTsKKwlzeXNjb3JlX3N1c3BlbmQoKTsKIAogCWxvY2FsX2lycV9lbmFibGUoKTsKIApAQCAtMTI1NSw2ICsxMjU3LDcgQEAKIAkJYXBtX2Vycm9yKCJzdXNwZW5kIiwgZXJyKTsKIAllcnIgPSAoZXJyID09IEFQTV9TVUNDRVNTKSA/IDAgOiAtRUlPOwogCisJc3lzY29yZV9yZXN1bWUoKTsKIAlzeXNkZXZfcmVzdW1lKCk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCkBAIC0xMjgwLDYgKzEyODMsNyBAQAogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAlzeXNkZXZfc3VzcGVuZChQTVNHX1NVU1BFTkQpOworCXN5c2NvcmVfc3VzcGVuZCgpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAogCWVyciA9IHNldF9zeXN0ZW1fcG93ZXJfc3RhdGUoQVBNX1NUQVRFX1NUQU5EQlkpOwpAQCAtMTI4Nyw2ICsxMjkxLDcgQEAKIAkJYXBtX2Vycm9yKCJzdGFuZGJ5IiwgZXJyKTsKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJc3lzY29yZV9yZXN1bWUoKTsKIAlzeXNkZXZfcmVzdW1lKCk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYwppbmRleCAzZWNlY2UwLi42ZjlkMWY2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKQEAgLTYxMyw4ICs2MTMsMjcgQEAKICNlbmRpZgogCiAJLyogQXMgYSBydWxlIHByb2Nlc3NvcnMgaGF2ZSBBUElDIHRpbWVyIHJ1bm5pbmcgaW4gZGVlcCBDIHN0YXRlcyAqLwotCWlmIChjLT54ODYgPj0gMHhmICYmICFjcHVfaGFzX2FtZF9lcnJhdHVtKGFtZF9lcnJhdHVtXzQwMCkpCisJaWYgKGMtPng4NiA+IDB4ZiAmJiAhY3B1X2hhc19hbWRfZXJyYXR1bShhbWRfZXJyYXR1bV80MDApKQogCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9BUkFUKTsKKworCS8qCisJICogRGlzYWJsZSBHQVJUIFRMQiBXYWxrIEVycm9ycyBvbiBGYW0xMGguIFdlIGRvIHRoaXMgaGVyZQorCSAqIGJlY2F1c2UgdGhpcyBpcyBhbHdheXMgbmVlZGVkIHdoZW4gR0FSVCBpcyBlbmFibGVkLCBldmVuIGluIGEKKwkgKiBrZXJuZWwgd2hpY2ggaGFzIG5vIE1DRSBzdXBwb3J0IGJ1aWx0IGluLgorCSAqLworCWlmIChjLT54ODYgPT0gMHgxMCkgeworCQkvKgorCQkgKiBCSU9TIHNob3VsZCBkaXNhYmxlIEdhcnRUbGJXbGsgRXJyb3JzIHRoZW1zZWxmLiBJZgorCQkgKiBpdCBkb2Vzbid0IGRvIGl0IGhlcmUgYXMgc3VnZ2VzdGVkIGJ5IHRoZSBCS0RHLgorCQkgKgorCQkgKiBGaXhlczogaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzAxMgorCQkgKi8KKwkJdTY0IG1hc2s7CisKKwkJcmRtc3JsKE1TUl9BTUQ2NF9NQ3hfTUFTSyg0KSwgbWFzayk7CisJCW1hc2sgfD0gKDEgPDwgMTApOworCQl3cm1zcmwoTVNSX0FNRDY0X01DeF9NQVNLKDQpLCBtYXNrKTsKKwl9CiB9CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kLmMKaW5kZXggMTY3Zjk3Yi4uYmIwYWRhZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWQuYwpAQCAtNTA5LDYgKzUwOSw3IEBACiBvdXRfZnJlZToKIAlpZiAoYikgewogCQlrb2JqZWN0X3B1dCgmYi0+a29iaik7CisJCWxpc3RfZGVsKCZiLT5taXNjaik7CiAJCWtmcmVlKGIpOwogCX0KIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMKaW5kZXggNmY4YzVlOS4uMGYwMzQ0NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCkBAIC00NDYsMTggKzQ0NiwyMCBAQAogCSAqLwogCXJkbXNyKE1TUl9JQTMyX01JU0NfRU5BQkxFLCBsLCBoKTsKIAorCWggPSBsdnR0aG1yX2luaXQ7CiAJLyoKIAkgKiBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGVybWFsIExWVCBlbnRyaWVzIG9uIGFsbCBBUHMgYWx3YXlzIHJlYWRzCiAJICogMHgxMDAwMCBiZWNhdXNlIEFQcyBhcmUgd29rZW4gdXAgYnkgQlNQIGlzc3VpbmcgSU5JVC1TSVBJLVNJUEkKIAkgKiBzZXF1ZW5jZSB0byB0aGVtIGFuZCBMVlQgcmVnaXN0ZXJzIGFyZSByZXNldCB0byAwcyBleGNlcHQgZm9yCiAJICogdGhlIG1hc2sgYml0cyB3aGljaCBhcmUgc2V0IHRvIDFzIHdoZW4gQVBzIHJlY2VpdmUgSU5JVCBJUEkuCi0JICogQWx3YXlzIHJlc3RvcmUgdGhlIHZhbHVlIHRoYXQgQklPUyBoYXMgcHJvZ3JhbW1lZCBvbiBBUCBiYXNlZCBvbgotCSAqIEJTUCdzIGluZm8gd2Ugc2F2ZWQgc2luY2UgQklPUyBpcyBhbHdheXMgc2V0dGluZyB0aGUgc2FtZSB2YWx1ZQotCSAqIGZvciBhbGwgdGhyZWFkcy9jb3JlcworCSAqIElmIEJJT1MgdGFrZXMgb3ZlciB0aGUgdGhlcm1hbCBpbnRlcnJ1cHQgYW5kIHNldHMgaXRzIGludGVycnVwdAorCSAqIGRlbGl2ZXJ5IG1vZGUgdG8gU01JIChub3QgZml4ZWQpLCBpdCByZXN0b3JlcyB0aGUgdmFsdWUgdGhhdCB0aGUKKwkgKiBCSU9TIGhhcyBwcm9ncmFtbWVkIG9uIEFQIGJhc2VkIG9uIEJTUCdzIGluZm8gd2Ugc2F2ZWQgc2luY2UgQklPUworCSAqIGlzIGFsd2F5cyBzZXR0aW5nIHRoZSBzYW1lIHZhbHVlIGZvciBhbGwgdGhyZWFkcy9jb3Jlcy4KIAkgKi8KLQlhcGljX3dyaXRlKEFQSUNfTFZUVEhNUiwgbHZ0dGhtcl9pbml0KTsKKwlpZiAoKGggJiBBUElDX0RNX0ZJWEVEX01BU0spICE9IEFQSUNfRE1fRklYRUQpCisJCWFwaWNfd3JpdGUoQVBJQ19MVlRUSE1SLCBsdnR0aG1yX2luaXQpOwogCi0JaCA9IGx2dHRobXJfaW5pdDsKIAogCWlmICgobCAmIE1TUl9JQTMyX01JU0NfRU5BQkxFX1RNMSkgJiYgKGggJiBBUElDX0RNX1NNSSkpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKaW5kZXggZWVkMzY3M2EuLmU2Mzg2ODkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCkBAIC01ODYsOCArNTg2LDEyIEBACiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCisJLyoKKwkgKiBEbyBub3QgYWxsb3cgY29uZmlnMSAoZXh0ZW5kZWQgcmVnaXN0ZXJzKSB0byBwcm9wYWdhdGUsCisJICogdGhlcmUncyBubyBzYW5lIHVzZXItc3BhY2UgZ2VuZXJhbGl6YXRpb24geWV0OgorCSAqLwogCWlmIChhdHRyLT50eXBlID09IFBFUkZfVFlQRV9SQVcpCi0JCXJldHVybiB4ODZfcG11X2V4dHJhX3JlZ3MoZXZlbnQtPmF0dHIuY29uZmlnLCBldmVudCk7CisJCXJldHVybiAwOwogCiAJaWYgKGF0dHItPnR5cGUgPT0gUEVSRl9UWVBFX0hXX0NBQ0hFKQogCQlyZXR1cm4gc2V0X2V4dF9od19hdHRyKGh3YywgZXZlbnQpOwpAQCAtNjA5LDggKzYxMyw4IEBACiAJLyoKIAkgKiBCcmFuY2ggdHJhY2luZzoKIAkgKi8KLQlpZiAoKGF0dHItPmNvbmZpZyA9PSBQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlMpICYmCi0JICAgIChod2MtPnNhbXBsZV9wZXJpb2QgPT0gMSkpIHsKKwlpZiAoYXR0ci0+Y29uZmlnID09IFBFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OUyAmJgorCSAgICAhYXR0ci0+ZnJlcSAmJiBod2MtPnNhbXBsZV9wZXJpb2QgPT0gMSkgewogCQkvKiBCVFMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGFyY2hpdGVjdHVyZS4gKi8KIAkJaWYgKCF4ODZfcG11LmJ0c19hY3RpdmUpCiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC0xMjg0LDYgKzEyODgsMTYgQEAKIAogCWNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKIAorCS8qCisJICogU29tZSBjaGlwc2V0cyBuZWVkIHRvIHVubWFzayB0aGUgTFZUUEMgaW4gYSBwYXJ0aWN1bGFyIHNwb3QKKwkgKiBpbnNpZGUgdGhlIG5taSBoYW5kbGVyLiAgQXMgYSByZXN1bHQsIHRoZSB1bm1hc2tpbmcgd2FzIHB1c2hlZAorCSAqIGludG8gYWxsIHRoZSBubWkgaGFuZGxlcnMuCisJICoKKwkgKiBUaGlzIGdlbmVyaWMgaGFuZGxlciBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhbnkgaXNzdWVzIHdoZXJlIHRoZQorCSAqIHVubWFza2luZyBvY2N1cnMgc28gaXQgd2FzIGxlZnQgYXQgdGhlIHRvcC4KKwkgKi8KKwlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfRE1fTk1JKTsKKwogCWZvciAoaWR4ID0gMDsgaWR4IDwgeDg2X3BtdS5udW1fY291bnRlcnM7IGlkeCsrKSB7CiAJCWlmICghdGVzdF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzaykpIHsKIAkJCS8qCkBAIC0xMzcwLDggKzEzODQsNiBAQAogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAJfQogCi0JYXBpY193cml0ZShBUElDX0xWVFBDLCBBUElDX0RNX05NSSk7Ci0KIAloYW5kbGVkID0geDg2X3BtdS5oYW5kbGVfaXJxKGFyZ3MtPnJlZ3MpOwogCWlmICghaGFuZGxlZCkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2FtZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2FtZC5jCmluZGV4IDQ2MWY2MmIuLmNmNGUzNjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9hbWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfYW1kLmMKQEAgLTgsNyArOCw3IEBACiAgWyBDKEwxRCkgXSA9IHsKIAlbIEMoT1BfUkVBRCkgXSA9IHsKIAkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwNDAsIC8qIERhdGEgQ2FjaGUgQWNjZXNzZXMgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMDQxLCAvKiBEYXRhIENhY2hlIE1pc3NlcyAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE0MSwgLyogRGF0YSBDYWNoZSBNaXNzZXMgICAgICAgICAgKi8KIAl9LAogCVsgQyhPUF9XUklURSkgXSA9IHsKIAkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxNDIsIC8qIERhdGEgQ2FjaGUgUmVmaWxscyA6c3lzdGVtICovCkBAIC00MjcsNyArNDI3LDkgQEAKICAqCiAgKiBFeGNlcHRpb25zOgogICoKKyAqIDB4MDAwCUZQCVBFUkZfQ1RMWzNdLCBQRVJGX0NUTFs1OjNdICgqKQogICogMHgwMDMJRlAJUEVSRl9DVExbM10KKyAqIDB4MDA0CUZQCVBFUkZfQ1RMWzNdLCBQRVJGX0NUTFs1OjNdICgqKQogICogMHgwMEIJRlAJUEVSRl9DVExbM10KICAqIDB4MDBECUZQCVBFUkZfQ1RMWzNdCiAgKiAweDAyMwlERQlQRVJGX0NUTFsyOjBdCkBAIC00NDgsNiArNDUwLDggQEAKICAqIDB4MERGCUxTCVBFUkZfQ1RMWzU6MF0KICAqIDB4MUQ2CUVYCVBFUkZfQ1RMWzU6MF0KICAqIDB4MUQ4CUVYCVBFUkZfQ1RMWzU6MF0KKyAqCisgKiAoKikgZGVwZW5kaW5nIG9uIHRoZSB1bWFzayBhbGwgRlBVIGNvdW50ZXJzIG1heSBiZSB1c2VkCiAgKi8KIAogc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGFtZF9mMTVfUE1DMCAgPSBFVkVOVF9DT05TVFJBSU5UKDAsIDB4MDEsIDApOwpAQCAtNDYwLDE4ICs0NjQsMjggQEAKIHN0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqCiBhbWRfZ2V0X2V2ZW50X2NvbnN0cmFpbnRzX2YxNWgoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQl1bnNpZ25lZCBpbnQgZXZlbnRfY29kZSA9IGFtZF9nZXRfZXZlbnRfY29kZSgmZXZlbnQtPmh3KTsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwl1bnNpZ25lZCBpbnQgZXZlbnRfY29kZSA9IGFtZF9nZXRfZXZlbnRfY29kZShod2MpOwogCiAJc3dpdGNoIChldmVudF9jb2RlICYgQU1EX0VWRU5UX1RZUEVfTUFTSykgewogCWNhc2UgQU1EX0VWRU5UX0ZQOgogCQlzd2l0Y2ggKGV2ZW50X2NvZGUpIHsKKwkJY2FzZSAweDAwMDoKKwkJCWlmICghKGh3Yy0+Y29uZmlnICYgMHgwMDAwRjAwMFVMTCkpCisJCQkJYnJlYWs7CisJCQlpZiAoIShod2MtPmNvbmZpZyAmIDB4MDAwMDBGMDBVTEwpKQorCQkJCWJyZWFrOworCQkJcmV0dXJuICZhbWRfZjE1X1BNQzM7CisJCWNhc2UgMHgwMDQ6CisJCQlpZiAoaHdlaWdodF9sb25nKGh3Yy0+Y29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX1VNQVNLKSA8PSAxKQorCQkJCWJyZWFrOworCQkJcmV0dXJuICZhbWRfZjE1X1BNQzM7CiAJCWNhc2UgMHgwMDM6CiAJCWNhc2UgMHgwMEI6CiAJCWNhc2UgMHgwMEQ6CiAJCQlyZXR1cm4gJmFtZF9mMTVfUE1DMzsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAmYW1kX2YxNV9QTUM1MzsKIAkJfQorCQlyZXR1cm4gJmFtZF9mMTVfUE1DNTM7CiAJY2FzZSBBTURfRVZFTlRfTFM6CiAJY2FzZSBBTURfRVZFTlRfREM6CiAJY2FzZSBBTURfRVZFTlRfRVhfTFM6CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbC5jCmluZGV4IDhmYzJiMmMuLjQ0N2EyOGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbC5jCkBAIC0yNSw3ICsyNSw3IEBACiAvKgogICogSW50ZWwgUGVyZk1vbiwgdXNlZCBvbiBDb3JlIGFuZCBsYXRlci4KICAqLwotc3RhdGljIGNvbnN0IHU2NCBpbnRlbF9wZXJmbW9uX2V2ZW50X21hcFtdID0KK3N0YXRpYyB1NjQgaW50ZWxfcGVyZm1vbl9ldmVudF9tYXBbUEVSRl9DT1VOVF9IV19NQVhdIF9fcmVhZF9tb3N0bHkgPQogewogICBbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXQkJPSAweDAwM2MsCiAgIFtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10JCT0gMHgwMGMwLApAQCAtMTg0LDI2ICsxODQsMjMgQEAKIAl9LAogIH0sCiAgWyBDKExMICApIF0gPSB7Ci0JLyoKLQkgKiBUQkQ6IE5lZWQgT2ZmLWNvcmUgUmVzcG9uc2UgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBzdXBwb3J0Ci0JICovCiAJWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCS8qIE9GRkNPUkVfUkVTUE9OU0VfMC5BTllfREFUQS5MT0NBTF9DQUNIRSAqLworCQkvKiBPRkZDT1JFX1JFU1BPTlNFLkFOWV9EQVRBLkxPQ0FMX0NBQ0hFICovCiAJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMWI3LAotCQkvKiBPRkZDT1JFX1JFU1BPTlNFXzEuQU5ZX0RBVEEuQU5ZX0xMQ19NSVNTICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMWJiLAorCQkvKiBPRkZDT1JFX1JFU1BPTlNFLkFOWV9EQVRBLkFOWV9MTENfTUlTUyAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDFiNywKIAl9LAogCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJLyogT0ZGQ09SRV9SRVNQT05TRV8wLkFOWV9SRk8uTE9DQUxfQ0FDSEUgKi8KKwkJLyogT0ZGQ09SRV9SRVNQT05TRS5BTllfUkZPLkxPQ0FMX0NBQ0hFICovCiAJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMWI3LAotCQkvKiBPRkZDT1JFX1JFU1BPTlNFXzEuQU5ZX1JGTy5BTllfTExDX01JU1MgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxYmIsCisJCS8qIE9GRkNPUkVfUkVTUE9OU0UuQU5ZX1JGTy5BTllfTExDX01JU1MgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxYjcsCiAJfSwKIAlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCS8qIE9GRkNPUkVfUkVTUE9OU0VfMC5QUkVGRVRDSC5MT0NBTF9DQUNIRSAqLworCQkvKiBPRkZDT1JFX1JFU1BPTlNFLlBSRUZFVENILkxPQ0FMX0NBQ0hFICovCiAJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMWI3LAotCQkvKiBPRkZDT1JFX1JFU1BPTlNFXzEuUFJFRkVUQ0guQU5ZX0xMQ19NSVNTICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMWJiLAorCQkvKiBPRkZDT1JFX1JFU1BPTlNFLlBSRUZFVENILkFOWV9MTENfTUlTUyAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDFiNywKIAl9LAogIH0sCiAgWyBDKERUTEIpIF0gPSB7CkBAIC0yODUsMjYgKzI4MiwyNiBAQAogIH0sCiAgWyBDKExMICApIF0gPSB7CiAJWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCS8qIE9GRkNPUkVfUkVTUE9OU0VfMC5BTllfREFUQS5MT0NBTF9DQUNIRSAqLworCQkvKiBPRkZDT1JFX1JFU1BPTlNFLkFOWV9EQVRBLkxPQ0FMX0NBQ0hFICovCiAJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMWI3LAotCQkvKiBPRkZDT1JFX1JFU1BPTlNFXzEuQU5ZX0RBVEEuQU5ZX0xMQ19NSVNTICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMWJiLAorCQkvKiBPRkZDT1JFX1JFU1BPTlNFLkFOWV9EQVRBLkFOWV9MTENfTUlTUyAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDFiNywKIAl9LAogCS8qCiAJICogVXNlIFJGTywgbm90IFdSSVRFQkFDSywgYmVjYXVzZSBhIHdyaXRlIG1pc3Mgd291bGQgdHlwaWNhbGx5IG9jY3VyCiAJICogb24gUkZPLgogCSAqLwogCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJLyogT0ZGQ09SRV9SRVNQT05TRV8xLkFOWV9SRk8uTE9DQUxfQ0FDSEUgKi8KLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxYmIsCi0JCS8qIE9GRkNPUkVfUkVTUE9OU0VfMC5BTllfUkZPLkFOWV9MTENfTUlTUyAqLworCQkvKiBPRkZDT1JFX1JFU1BPTlNFLkFOWV9SRk8uTE9DQUxfQ0FDSEUgKi8KKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxYjcsCisJCS8qIE9GRkNPUkVfUkVTUE9OU0UuQU5ZX1JGTy5BTllfTExDX01JU1MgKi8KIAkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxYjcsCiAJfSwKIAlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCS8qIE9GRkNPUkVfUkVTUE9OU0VfMC5QUkVGRVRDSC5MT0NBTF9DQUNIRSAqLworCQkvKiBPRkZDT1JFX1JFU1BPTlNFLlBSRUZFVENILkxPQ0FMX0NBQ0hFICovCiAJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMWI3LAotCQkvKiBPRkZDT1JFX1JFU1BPTlNFXzEuUFJFRkVUQ0guQU5ZX0xMQ19NSVNTICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMWJiLAorCQkvKiBPRkZDT1JFX1JFU1BPTlNFLlBSRUZFVENILkFOWV9MTENfTUlTUyAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDFiNywKIAl9LAogIH0sCiAgWyBDKERUTEIpIF0gPSB7CkBAIC0zNTIsMTYgKzM0OSwzNiBAQAogfTsKIAogLyoKLSAqIE9GRkNPUkVfUkVTUE9OU0UgTVNSIGJpdHMgKHN1YnNldCksIFNlZSBJQTMyIFNETSBWb2wgMyAzMC42LjEuMworICogTmVoYWxlbS9XZXN0bWVyZSBNU1JfT0ZGQ09SRV9SRVNQT05TRSBiaXRzOworICogU2VlIElBMzIgU0RNIFZvbCAzQiAzMC42LjEuMwogICovCiAKLSNkZWZpbmUgRE1ORF9EQVRBX1JEICAgICAoMSA8PCAwKQotI2RlZmluZSBETU5EX1JGTyAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIERNTkRfV0IgICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgUEZfREFUQV9SRCAgICAgICAoMSA8PCA0KQotI2RlZmluZSBQRl9EQVRBX1JGTyAgICAgICgxIDw8IDUpCi0jZGVmaW5lIFJFU1BfVU5DT1JFX0hJVCAgKDEgPDwgOCkKLSNkZWZpbmUgUkVTUF9NSVNTICAgICAgICAoMHhmNjAwKSAvKiBub24gdW5jb3JlIGhpdCAqLworI2RlZmluZSBOSE1fRE1ORF9EQVRBX1JECSgxIDw8IDApCisjZGVmaW5lIE5ITV9ETU5EX1JGTwkJKDEgPDwgMSkKKyNkZWZpbmUgTkhNX0RNTkRfSUZFVENICQkoMSA8PCAyKQorI2RlZmluZSBOSE1fRE1ORF9XQgkJKDEgPDwgMykKKyNkZWZpbmUgTkhNX1BGX0RBVEFfUkQJCSgxIDw8IDQpCisjZGVmaW5lIE5ITV9QRl9EQVRBX1JGTwkJKDEgPDwgNSkKKyNkZWZpbmUgTkhNX1BGX0lGRVRDSAkJKDEgPDwgNikKKyNkZWZpbmUgTkhNX09GRkNPUkVfT1RIRVIJKDEgPDwgNykKKyNkZWZpbmUgTkhNX1VOQ09SRV9ISVQJCSgxIDw8IDgpCisjZGVmaW5lIE5ITV9PVEhFUl9DT1JFX0hJVF9TTlAJKDEgPDwgOSkKKyNkZWZpbmUgTkhNX09USEVSX0NPUkVfSElUTQkoMSA8PCAxMCkKKyAgICAgICAgCQkJLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgTkhNX1JFTU9URV9DQUNIRV9GV0QJKDEgPDwgMTIpCisjZGVmaW5lIE5ITV9SRU1PVEVfRFJBTQkJKDEgPDwgMTMpCisjZGVmaW5lIE5ITV9MT0NBTF9EUkFNCQkoMSA8PCAxNCkKKyNkZWZpbmUgTkhNX05PTl9EUkFNCQkoMSA8PCAxNSkKKworI2RlZmluZSBOSE1fQUxMX0RSQU0JCShOSE1fUkVNT1RFX0RSQU18TkhNX0xPQ0FMX0RSQU0pCisKKyNkZWZpbmUgTkhNX0RNTkRfUkVBRAkJKE5ITV9ETU5EX0RBVEFfUkQpCisjZGVmaW5lIE5ITV9ETU5EX1dSSVRFCQkoTkhNX0RNTkRfUkZPfE5ITV9ETU5EX1dCKQorI2RlZmluZSBOSE1fRE1ORF9QUkVGRVRDSAkoTkhNX1BGX0RBVEFfUkR8TkhNX1BGX0RBVEFfUkZPKQorCisjZGVmaW5lIE5ITV9MM19ISVQJKE5ITV9VTkNPUkVfSElUfE5ITV9PVEhFUl9DT1JFX0hJVF9TTlB8TkhNX09USEVSX0NPUkVfSElUTSkKKyNkZWZpbmUgTkhNX0wzX01JU1MJKE5ITV9OT05fRFJBTXxOSE1fQUxMX0RSQU18TkhNX1JFTU9URV9DQUNIRV9GV0QpCisjZGVmaW5lIE5ITV9MM19BQ0NFU1MJKE5ITV9MM19ISVR8TkhNX0wzX01JU1MpCiAKIHN0YXRpYyBfX2luaXRjb25zdCBjb25zdCB1NjQgbmVoYWxlbV9od19jYWNoZV9leHRyYV9yZWdzCiAJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQpAQCAtMzcwLDE2ICszODcsMTYgQEAKIHsKICBbIEMoTEwgICkgXSA9IHsKIAlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSBETU5EX0RBVEFfUkR8UkVTUF9VTkNPUkVfSElULAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IERNTkRfREFUQV9SRHxSRVNQX01JU1MsCisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gTkhNX0RNTkRfUkVBRHxOSE1fTDNfQUNDRVNTLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IE5ITV9ETU5EX1JFQUR8TkhNX0wzX01JU1MsCiAJfSwKIAlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gRE1ORF9SRk98RE1ORF9XQnxSRVNQX1VOQ09SRV9ISVQsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gRE1ORF9SRk98RE1ORF9XQnxSRVNQX01JU1MsCisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gTkhNX0RNTkRfV1JJVEV8TkhNX0wzX0FDQ0VTUywKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSBOSE1fRE1ORF9XUklURXxOSE1fTDNfTUlTUywKIAl9LAogCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSBQRl9EQVRBX1JEfFBGX0RBVEFfUkZPfFJFU1BfVU5DT1JFX0hJVCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSBQRl9EQVRBX1JEfFBGX0RBVEFfUkZPfFJFU1BfTUlTUywKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSBOSE1fRE1ORF9QUkVGRVRDSHxOSE1fTDNfQUNDRVNTLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IE5ITV9ETU5EX1BSRUZFVENIfE5ITV9MM19NSVNTLAogCX0sCiAgfQogfTsKQEAgLTM5MSwxMiArNDA4LDEyIEBACiB7CiAgWyBDKEwxRCkgXSA9IHsKIAlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDAsIC8qIEwxRF9DQUNIRV9MRC5NRVNJICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNDAsIC8qIEwxRF9DQUNIRV9MRC5JX1NUQVRFICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxMGIsIC8qIE1FTV9JTlNUX1JFVElSRUQuTE9BRFMgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNTEsIC8qIEwxRC5SRVBMICAgICAgICAgICAgICAgICAgICAgKi8KIAl9LAogCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDEsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNDEsIC8qIEwxRF9DQUNIRV9TVC5JX1NUQVRFICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAyMGIsIC8qIE1FTV9JTlNUX1JFVFVSRUQuU1RPUkVTICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyNTEsIC8qIEwxRC5NX1JFUEwgICAgICAgICAgICAgICAgICAgKi8KIAl9LAogCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKIAkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxNGUsIC8qIEwxRF9QUkVGRVRDSC5SRVFVRVNUUyAgICAgICAgKi8KQEAgLTkzMyw2ICs5NTAsMTYgQEAKIAogCWNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKIAorCS8qCisJICogU29tZSBjaGlwc2V0cyBuZWVkIHRvIHVubWFzayB0aGUgTFZUUEMgaW4gYSBwYXJ0aWN1bGFyIHNwb3QKKwkgKiBpbnNpZGUgdGhlIG5taSBoYW5kbGVyLiAgQXMgYSByZXN1bHQsIHRoZSB1bm1hc2tpbmcgd2FzIHB1c2hlZAorCSAqIGludG8gYWxsIHRoZSBubWkgaGFuZGxlcnMuCisJICoKKwkgKiBUaGlzIGhhbmRsZXIgZG9lc24ndCBzZWVtIHRvIGhhdmUgYW55IGlzc3VlcyB3aXRoIHRoZSB1bm1hc2tpbmcKKwkgKiBzbyBpdCB3YXMgbGVmdCBhdCB0aGUgdG9wLgorCSAqLworCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgQVBJQ19ETV9OTUkpOworCiAJaW50ZWxfcG11X2Rpc2FibGVfYWxsKCk7CiAJaGFuZGxlZCA9IGludGVsX3BtdV9kcmFpbl9idHNfYnVmZmVyKCk7CiAJc3RhdHVzID0gaW50ZWxfcG11X2dldF9zdGF0dXMoKTsKQEAgLTk5OCw2ICsxMDI1LDkgQEAKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKIAl1bnNpZ25lZCBpbnQgaHdfZXZlbnQsIGJ0c19ldmVudDsKIAorCWlmIChldmVudC0+YXR0ci5mcmVxKQorCQlyZXR1cm4gTlVMTDsKKwogCWh3X2V2ZW50ID0gaHdjLT5jb25maWcgJiBJTlRFTF9BUkNIX0VWRU5UX01BU0s7CiAJYnRzX2V2ZW50ID0geDg2X3BtdS5ldmVudF9tYXAoUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TKTsKIApAQCAtMTMwNSw3ICsxMzM1LDcgQEAKIAkgKiBBSjEwNiBjb3VsZCBwb3NzaWJseSBiZSB3b3JrZWQgYXJvdW5kIGJ5IG5vdCBhbGxvd2luZyBMQlIKIAkgKiAgICAgICB1c2FnZSBmcm9tIFBFQlMsIGluY2x1ZGluZyB0aGUgZml4dXAuCiAJICogQUo2OCAgY291bGQgcG9zc2libHkgYmUgd29ya2VkIGFyb3VuZCBieSBhbHdheXMgcHJvZ3JhbW1pbmcKLQkgKiAJIGEgcGVic19ldmVudF9yZXNldFswXSB2YWx1ZSBhbmQgY29waW5nIHdpdGggdGhlIGxvc3QgZXZlbnRzLgorCSAqCSBhIHBlYnNfZXZlbnRfcmVzZXRbMF0gdmFsdWUgYW5kIGNvcGluZyB3aXRoIHRoZSBsb3N0IGV2ZW50cy4KIAkgKgogCSAqIEJ1dCB0YWtlbiB0b2dldGhlciBpdCBtaWdodCBqdXN0IG1ha2Ugc2Vuc2UgdG8gbm90IGVuYWJsZSBQRUJTIG9uCiAJICogdGhlc2UgY2hpcHMuCkBAIC0xNDA5LDYgKzE0MzksMTggQEAKIAkJeDg2X3BtdS5wZXJjb3JlX2NvbnN0cmFpbnRzID0gaW50ZWxfbmVoYWxlbV9wZXJjb3JlX2NvbnN0cmFpbnRzOwogCQl4ODZfcG11LmVuYWJsZV9hbGwgPSBpbnRlbF9wbXVfbmhtX2VuYWJsZV9hbGw7CiAJCXg4Nl9wbXUuZXh0cmFfcmVncyA9IGludGVsX25laGFsZW1fZXh0cmFfcmVnczsKKworCQlpZiAoZWJ4ICYgMHg0MCkgeworCQkJLyoKKwkJCSAqIEVycmF0dW0gQUFKODAgZGV0ZWN0ZWQsIHdlIHdvcmsgaXQgYXJvdW5kIGJ5IHVzaW5nCisJCQkgKiB0aGUgQlJfTUlTUF9FWEVDLkFOWSBldmVudC4gVGhpcyB3aWxsIG92ZXItY291bnQKKwkJCSAqIGJyYW5jaC1taXNzZXMsIGJ1dCBpdCdzIHN0aWxsIG11Y2ggYmV0dGVyIHRoYW4gdGhlCisJCQkgKiBhcmNoaXRlY3R1cmFsIGV2ZW50IHdoaWNoIGlzIG9mdGVuIGNvbXBsZXRlbHkgYm9ndXM6CisJCQkgKi8KKwkJCWludGVsX3BlcmZtb25fZXZlbnRfbWFwW1BFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFU10gPSAweDdmODk7CisKKwkJCXByX2NvbnQoImVycmF0dW0gQUFKODAgd29ya2VkIGFyb3VuZCwgIik7CisJCX0KIAkJcHJfY29udCgiTmVoYWxlbSBldmVudHMsICIpOwogCQlicmVhazsKIApAQCAtMTQyNSw2ICsxNDY3LDcgQEAKIAogCWNhc2UgMzc6IC8qIDMyIG5tIG5laGFsZW0sICJDbGFya2RhbGUiICovCiAJY2FzZSA0NDogLyogMzIgbm0gbmVoYWxlbSwgIkd1bGZ0b3duIiAqLworCWNhc2UgNDc6IC8qIDMyIG5tIFhlb24gRTcgKi8KIAkJbWVtY3B5KGh3X2NhY2hlX2V2ZW50X2lkcywgd2VzdG1lcmVfaHdfY2FjaGVfZXZlbnRfaWRzLAogCQkgICAgICAgc2l6ZW9mKGh3X2NhY2hlX2V2ZW50X2lkcykpOwogCQltZW1jcHkoaHdfY2FjaGVfZXh0cmFfcmVncywgbmVoYWxlbV9od19jYWNoZV9leHRyYV9yZWdzLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X3A0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfcDQuYwppbmRleCBjMjUyMGUxLi5lOTNmY2Q1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfcDQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfcDQuYwpAQCAtOTQ3LDE0ICs5NDcsMjMgQEAKIAkJaWYgKCF4ODZfcGVyZl9ldmVudF9zZXRfcGVyaW9kKGV2ZW50KSkKIAkJCWNvbnRpbnVlOwogCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMSwgJmRhdGEsIHJlZ3MpKQotCQkJcDRfcG11X2Rpc2FibGVfZXZlbnQoZXZlbnQpOworCQkJeDg2X3BtdV9zdG9wKGV2ZW50LCAwKTsKIAl9CiAKLQlpZiAoaGFuZGxlZCkgewotCQkvKiBwNCBxdWlyazogdW5tYXNrIGl0IGFnYWluICovCi0JCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgYXBpY19yZWFkKEFQSUNfTFZUUEMpICYgfkFQSUNfTFZUX01BU0tFRCk7CisJaWYgKGhhbmRsZWQpCiAJCWluY19pcnFfc3RhdChhcGljX3BlcmZfaXJxcyk7Ci0JfQorCisJLyoKKwkgKiBXaGVuIGRlYWxpbmcgd2l0aCB0aGUgdW5tYXNraW5nIG9mIHRoZSBMVlRQQyBvbiBQNCBwZXJmIGh3LCBpdCBoYXMKKwkgKiBiZWVuIG9ic2VydmVkIHRoYXQgdGhlIE9WRiBiaXQgZmxhZyBoYXMgdG8gYmUgY2xlYXJlZCBmaXJzdCBfYmVmb3JlXworCSAqIHRoZSBMVlRQQyBjYW4gYmUgdW5tYXNrZWQuCisJICoKKwkgKiBUaGUgcmVhc29uIGlzIHRoZSBOTUkgbGluZSB3aWxsIGNvbnRpbnVlIHRvIGJlIGFzc2VydGVkIHdoaWxlIHRoZSBPVkYKKwkgKiBiaXQgaXMgc2V0LiAgVGhpcyBjYXVzZXMgYSBzZWNvbmQgTk1JIHRvIGdlbmVyYXRlIGlmIHRoZSBMVlRQQyBpcworCSAqIHVubWFza2VkIGJlZm9yZSB0aGUgT1ZGIGJpdCBpcyBjbGVhcmVkLCBsZWFkaW5nIHRvIHVua25vd24gTk1JCisJICogbWVzc2FnZXMuCisJICovCisJYXBpY193cml0ZShBUElDX0xWVFBDLCBBUElDX0RNX05NSSk7CiAKIAlyZXR1cm4gaGFuZGxlZDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kZXZpY2V0cmVlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZGV2aWNldHJlZS5jCmluZGV4IDcwNmE5ZmIuLmU5MGYwODQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kZXZpY2V0cmVlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2RldmljZXRyZWUuYwpAQCAtMzkxLDcgKzM5MSw3IEBACiAKIAlzZXRfaW9fYXBpY19pcnFfYXR0cigmYXR0ciwgaWR4LCBsaW5lLCBpdC0+dHJpZ2dlciwgaXQtPnBvbGFyaXR5KTsKIAotCXJldHVybiBpb19hcGljX3NldHVwX2lycV9waW4oKm91dF9od2lycSwgY3B1X3RvX25vZGUoMCksICZhdHRyKTsKKwlyZXR1cm4gaW9fYXBpY19zZXR1cF9pcnFfcGluX29uY2UoKm91dF9od2lycSwgY3B1X3RvX25vZGUoMCksICZhdHRyKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGlvYXBpY19hZGRfb2Zub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYwppbmRleCBjOTY5ZmQ5Li5mMWE2MjQ0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKQEAgLTExODMsMTIgKzExODMsMTMgQEAKIAkJCQkJIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBUaGlzIGlzIHBvc3NpYmxlIGlmIG9wIGlzIHVuZGVyIGRlbGF5ZWQgdW5vcHRpbWl6aW5nICovCiAJaWYgKGtwcm9iZV9kaXNhYmxlZCgmb3AtPmtwKSkKIAkJcmV0dXJuOwogCi0JcHJlZW1wdF9kaXNhYmxlKCk7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWlmIChrcHJvYmVfcnVubmluZygpKSB7CiAJCWtwcm9iZXNfaW5jX25taXNzZWRfY291bnQoJm9wLT5rcCk7CiAJfSBlbHNlIHsKQEAgLTEyMDcsNyArMTIwOCw3IEBACiAJCW9wdF9wcmVfaGFuZGxlcigmb3AtPmtwLCByZWdzKTsKIAkJX190aGlzX2NwdV93cml0ZShjdXJyZW50X2twcm9iZSwgTlVMTCk7CiAJfQotCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgX19rcHJvYmVzIGNvcHlfb3B0aW1pemVkX2luc3RydWN0aW9ucyh1OCAqZGVzdCwgdTggKnNyYykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZ2FydF82NC5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKaW5kZXggODJhZGEwMS4uYjExN2VmZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKQEAgLTgxLDYgKzgxLDkgQEAKICNkZWZpbmUgQUdQRVhURVJOCiAjZW5kaWYKIAorLyogR0FSVCBjYW4gb25seSByZW1hcCB0byBwaHlzaWNhbCBhZGRyZXNzZXMgPCAxVEIgKi8KKyNkZWZpbmUgR0FSVF9NQVhfUEhZU19BRERSCSgxVUxMIDw8IDQwKQorCiAvKiBiYWNrZG9vciBpbnRlcmZhY2UgdG8gQUdQIGRyaXZlciAqLwogQUdQRVhURVJOIGludCBhZ3BfbWVtb3J5X3Jlc2VydmVkOwogQUdQRVhURVJOIF9fdTMyICphZ3BfZ2F0dF90YWJsZTsKQEAgLTIxMiw5ICsyMTUsMTMgQEAKIAkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpciwgdW5zaWduZWQgbG9uZyBhbGlnbl9tYXNrKQogewogCXVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHBoeXNfbWVtLCBzaXplLCBQQUdFX1NJWkUpOwotCXVuc2lnbmVkIGxvbmcgaW9tbXVfcGFnZSA9IGFsbG9jX2lvbW11KGRldiwgbnBhZ2VzLCBhbGlnbl9tYXNrKTsKKwl1bnNpZ25lZCBsb25nIGlvbW11X3BhZ2U7CiAJaW50IGk7CiAKKwlpZiAodW5saWtlbHkocGh5c19tZW0gKyBzaXplID4gR0FSVF9NQVhfUEhZU19BRERSKSkKKwkJcmV0dXJuIGJhZF9kbWFfYWRkcjsKKworCWlvbW11X3BhZ2UgPSBhbGxvY19pb21tdShkZXYsIG5wYWdlcywgYWxpZ25fbWFzayk7CiAJaWYgKGlvbW11X3BhZ2UgPT0gLTEpIHsKIAkJaWYgKCFub25mb3JjZWRfaW9tbXUoZGV2LCBwaHlzX21lbSwgc2l6ZSkpCiAJCQlyZXR1cm4gcGh5c19tZW07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKaW5kZXggNDU4OTJkYy4uZjY1ZTViNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYwpAQCAtNjA4LDYgKzYwOCw5IEBACiAJdW5zaWduZWQgbGVuLCB0eXBlOwogCXN0cnVjdCBwZXJmX2V2ZW50ICpicDsKIAorCWlmIChwdHJhY2VfZ2V0X2JyZWFrcG9pbnRzKHRzaykgPCAwKQorCQlyZXR1cm4gLUVTUkNIOworCiAJZGF0YSAmPSB+RFJfQ09OVFJPTF9SRVNFUlZFRDsKIAlvbGRfZHI3ID0gcHRyYWNlX2dldF9kcjcodGhyZWFkLT5wdHJhY2VfYnBzKTsKIHJlc3RvcmU6CkBAIC02NTUsNiArNjU4LDkgQEAKIAkJfQogCQlnb3RvIHJlc3RvcmU7CiAJfQorCisJcHRyYWNlX3B1dF9icmVha3BvaW50cyh0c2spOworCiAJcmV0dXJuICgob3JpZ19yZXQgPCAwKSA/IG9yaWdfcmV0IDogcmMpOwogfQogCkBAIC02NjgsMTAgKzY3NCwxNyBAQAogCiAJaWYgKG4gPCBIQlBfTlVNKSB7CiAJCXN0cnVjdCBwZXJmX2V2ZW50ICpicDsKKworCQlpZiAocHRyYWNlX2dldF9icmVha3BvaW50cyh0c2spIDwgMCkKKwkJCXJldHVybiAtRVNSQ0g7CisKIAkJYnAgPSB0aHJlYWQtPnB0cmFjZV9icHNbbl07CiAJCWlmICghYnApCi0JCQlyZXR1cm4gMDsKLQkJdmFsID0gYnAtPmh3LmluZm8uYWRkcmVzczsKKwkJCXZhbCA9IDA7CisJCWVsc2UKKwkJCXZhbCA9IGJwLT5ody5pbmZvLmFkZHJlc3M7CisKKwkJcHRyYWNlX3B1dF9icmVha3BvaW50cyh0c2spOwogCX0gZWxzZSBpZiAobiA9PSA2KSB7CiAJCXZhbCA9IHRocmVhZC0+ZGVidWdyZWc2OwogCSB9IGVsc2UgaWYgKG4gPT0gNykgewpAQCAtNjg2LDYgKzY5OSwxMCBAQAogCXN0cnVjdCBwZXJmX2V2ZW50ICpicDsKIAlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCA9ICZ0c2stPnRocmVhZDsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHI7CisJaW50IGVyciA9IDA7CisKKwlpZiAocHRyYWNlX2dldF9icmVha3BvaW50cyh0c2spIDwgMCkKKwkJcmV0dXJuIC1FU1JDSDsKIAogCWlmICghdC0+cHRyYWNlX2Jwc1tucl0pIHsKIAkJcHRyYWNlX2JyZWFrcG9pbnRfaW5pdCgmYXR0cik7CkBAIC03MDksMjQgKzcyNiwyMyBAQAogCQkgKiB3cml0aW5nIGZvciB0aGUgdXNlci4gQW5kIGFueXdheSB0aGlzIGlzIHRoZSBwcmV2aW91cwogCQkgKiBiZWhhdmlvdXIuCiAJCSAqLwotCQlpZiAoSVNfRVJSKGJwKSkKLQkJCXJldHVybiBQVFJfRVJSKGJwKTsKKwkJaWYgKElTX0VSUihicCkpIHsKKwkJCWVyciA9IFBUUl9FUlIoYnApOworCQkJZ290byBwdXQ7CisJCX0KIAogCQl0LT5wdHJhY2VfYnBzW25yXSA9IGJwOwogCX0gZWxzZSB7Ci0JCWludCBlcnI7Ci0KIAkJYnAgPSB0LT5wdHJhY2VfYnBzW25yXTsKIAogCQlhdHRyID0gYnAtPmF0dHI7CiAJCWF0dHIuYnBfYWRkciA9IGFkZHI7CiAJCWVyciA9IG1vZGlmeV91c2VyX2h3X2JyZWFrcG9pbnQoYnAsICZhdHRyKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CiAJfQogCi0KLQlyZXR1cm4gMDsKK3B1dDoKKwlwdHJhY2VfcHV0X2JyZWFrcG9pbnRzKHRzayk7CisJcmV0dXJuIGVycjsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3RfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9yZWJvb3RfMzIuUwppbmRleCAyOTA5MmIzLi4xZDVjNDZkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcmVib290XzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdF8zMi5TCkBAIC0yMSwyNiArMjEsMjYgQEAKIAkvKiBHZXQgb3VyIG93biByZWxvY2F0ZWQgYWRkcmVzcyAqLwogCWNhbGwJMWYKIDE6CXBvcGwJJWVieAotCXN1YmwJJDFiLCAlZWJ4CisJc3VibAkkKDFiIC0gcl9iYXNlKSwgJWVieAogCiAJLyogQ29tcHV0ZSB0aGUgZXF1aXZhbGVudCByZWFsLW1vZGUgc2VnbWVudCAqLwogCW1vdmwJJWVieCwgJWVjeAogCXNocmwJJDQsICVlY3gKIAkKIAkvKiBQYXRjaCBwb3N0LXJlYWwtbW9kZSBzZWdtZW50IGp1bXAgKi8KLQltb3Z3CWRpc3BhdGNoX3RhYmxlKCVlYngsJWVheCwyKSwlYXgKLQltb3Z3CSVheCwgMTAxZiglZWJ4KQotCW1vdncJJWN4LCAxMDJmKCVlYngpCisJbW92dwkoZGlzcGF0Y2hfdGFibGUgLSByX2Jhc2UpKCVlYngsJWVheCwyKSwlYXgKKwltb3Z3CSVheCwgKDEwMWYgLSByX2Jhc2UpKCVlYngpCisJbW92dwklY3gsICgxMDJmIC0gcl9iYXNlKSglZWJ4KQogCiAJLyogU2V0IHVwIHRoZSBJRFQgZm9yIHJlYWwgbW9kZS4gKi8KLQlsaWR0bAltYWNoaW5lX3JlYWxfcmVzdGFydF9pZHQoJWVieCkKKwlsaWR0bAkobWFjaGluZV9yZWFsX3Jlc3RhcnRfaWR0IC0gcl9iYXNlKSglZWJ4KQogCiAJLyoKIAkgKiBTZXQgdXAgYSBHRFQgZnJvbSB3aGljaCB3ZSBjYW4gbG9hZCBzZWdtZW50IGRlc2NyaXB0b3JzIGZvciByZWFsCiAJICogbW9kZS4gIFRoZSBHRFQgaXMgbm90IHVzZWQgaW4gcmVhbCBtb2RlOyBpdCBpcyBqdXN0IG5lZWRlZCBoZXJlIHRvCiAJICogcHJlcGFyZSB0aGUgZGVzY3JpcHRvcnMuCiAJICovCi0JbGdkdGwJbWFjaGluZV9yZWFsX3Jlc3RhcnRfZ2R0KCVlYngpCisJbGdkdGwJKG1hY2hpbmVfcmVhbF9yZXN0YXJ0X2dkdCAtIHJfYmFzZSkoJWVieCkKIAogCS8qCiAJICogTG9hZCB0aGUgZGF0YSBzZWdtZW50IHJlZ2lzdGVycyB3aXRoIDE2LWJpdCBjb21wYXRpYmxlIHZhbHVlcwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwppbmRleCA1YTA0ODRhLi40YmU5YjM5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwpAQCAtOTc2LDYgKzk3NiwxMSBAQAogCXBhZ2luZ19pbml0KCk7CiAJeDg2X2luaXQucGFnaW5nLnBhZ2V0YWJsZV9zZXR1cF9kb25lKHN3YXBwZXJfcGdfZGlyKTsKIAorCWlmIChib290X2NwdV9kYXRhLmNwdWlkX2xldmVsID49IDApIHsKKwkJLyogQSBDUFUgaGFzICVjcjQgaWYgYW5kIG9ubHkgaWYgaXQgaGFzIENQVUlEICovCisJCW1tdV9jcjRfZmVhdHVyZXMgPSByZWFkX2NyNCgpOworCX0KKwogI2lmZGVmIENPTkZJR19YODZfMzIKIAkvKiBzeW5jIGJhY2sga2VybmVsIGFkZHJlc3MgcmFuZ2UgKi8KIAljbG9uZV9wZ2RfcmFuZ2UoaW5pdGlhbF9wYWdlX3RhYmxlICsgS0VSTkVMX1BHRF9CT1VOREFSWSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jIGIvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmMKaW5kZXggYzExNTE0ZS4uNzVlZjRiMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmMKQEAgLTYxLDYgKzYxLDEwIEBACiAJCS5iYW5uZXIJCQk9IGRlZmF1bHRfYmFubmVyLAogCX0sCiAKKwkubWFwcGluZyA9IHsKKwkJLnBhZ2V0YWJsZV9yZXNlcnZlCQk9IG5hdGl2ZV9wYWdldGFibGVfcmVzZXJ2ZSwKKwl9LAorCiAJLnBhZ2luZyA9IHsKIAkJLnBhZ2V0YWJsZV9zZXR1cF9zdGFydAk9IG5hdGl2ZV9wYWdldGFibGVfc2V0dXBfc3RhcnQsCiAJCS5wYWdldGFibGVfc2V0dXBfZG9uZQk9IG5hdGl2ZV9wYWdldGFibGVfc2V0dXBfZG9uZSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuYwppbmRleCA1OGY1MTdiLi45MzRiNGM2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmMKKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jCkBAIC0yMzk1LDkgKzIzOTUsOSBAQAogCQlpbnQgaTsKIAogCQllbnRyeS0+ZmxhZ3MgfD0gS1ZNX0NQVUlEX0ZMQUdfU0lHTklGQ0FOVF9JTkRFWDsKLQkJZm9yIChpID0gMTsgKm5lbnQgPCBtYXhuZW50OyArK2kpIHsKLQkJCWlmIChlbnRyeVtpIC0gMV0uZWF4ID09IDAgJiYgaSAhPSAyKQotCQkJCWJyZWFrOworCQlmb3IgKGkgPSAxOyAqbmVudCA8IG1heG5lbnQgJiYgaSA8IDY0OyArK2kpIHsKKwkJCWlmIChlbnRyeVtpXS5lYXggPT0gMCkKKwkJCQljb250aW51ZTsKIAkJCWRvX2NwdWlkXzFfZW50KCZlbnRyeVtpXSwgZnVuY3Rpb24sIGkpOwogCQkJZW50cnlbaV0uZmxhZ3MgfD0KIAkJCSAgICAgICBLVk1fQ1BVSURfRkxBR19TSUdOSUZDQU5UX0lOREVYOwpAQCAtNDk1OCwxMiArNDk1OCw2IEBACiAJCQliZXN0ID0gZTsKIAkJCWJyZWFrOwogCQl9Ci0JCS8qCi0JCSAqIEJvdGggYmFzaWMgb3IgYm90aCBleHRlbmRlZD8KLQkJICovCi0JCWlmICgoKGUtPmZ1bmN0aW9uIF4gZnVuY3Rpb24pICYgMHg4MDAwMDAwMCkgPT0gMCkKLQkJCWlmICghYmVzdCB8fCBlLT5mdW5jdGlvbiA+IGJlc3QtPmZ1bmN0aW9uKQotCQkJCWJlc3QgPSBlOwogCX0KIAlyZXR1cm4gYmVzdDsKIH0KQEAgLTQ5ODMsNiArNDk3NywyNyBAQAogCXJldHVybiAzNjsKIH0KIAorLyoKKyAqIElmIG5vIG1hdGNoIGlzIGZvdW5kLCBjaGVjayB3aGV0aGVyIHdlIGV4Y2VlZCB0aGUgdkNQVSdzIGxpbWl0CisgKiBhbmQgcmV0dXJuIHRoZSBjb250ZW50IG9mIHRoZSBoaWdoZXN0IHZhbGlkIF9zdGFuZGFyZF8gbGVhZiBpbnN0ZWFkLgorICogVGhpcyBpcyB0byBzYXRpc2Z5IHRoZSBDUFVJRCBzcGVjaWZpY2F0aW9uLgorICovCitzdGF0aWMgc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIqIGNoZWNrX2NwdWlkX2xpbWl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGZ1bmN0aW9uLCB1MzIgaW5kZXgpCit7CisJc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKm1heGxldmVsOworCisJbWF4bGV2ZWwgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCBmdW5jdGlvbiAmIDB4ODAwMDAwMDAsIDApOworCWlmICghbWF4bGV2ZWwgfHwgbWF4bGV2ZWwtPmVheCA+PSBmdW5jdGlvbikKKwkJcmV0dXJuIE5VTEw7CisJaWYgKGZ1bmN0aW9uICYgMHg4MDAwMDAwMCkgeworCQltYXhsZXZlbCA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KHZjcHUsIDAsIDApOworCQlpZiAoIW1heGxldmVsKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCBtYXhsZXZlbC0+ZWF4LCBpbmRleCk7Cit9CisKIHZvaWQga3ZtX2VtdWxhdGVfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXUzMiBmdW5jdGlvbiwgaW5kZXg7CkBAIC00OTk1LDYgKzUwMTAsMTAgQEAKIAlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JDWCwgMCk7CiAJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SRFgsIDApOwogCWJlc3QgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCBmdW5jdGlvbiwgaW5kZXgpOworCisJaWYgKCFiZXN0KQorCQliZXN0ID0gY2hlY2tfY3B1aWRfbGltaXQodmNwdSwgZnVuY3Rpb24sIGluZGV4KTsKKwogCWlmIChiZXN0KSB7CiAJCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkFYLCBiZXN0LT5lYXgpOwogCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JCWCwgYmVzdC0+ZWJ4KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXQuYyBiL2FyY2gveDg2L21tL2luaXQuYwppbmRleCAyODZkMjg5Li4zN2I4YjBmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0LmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdC5jCkBAIC04MSw2ICs4MSwxMSBAQAogCQllbmQsIHBndF9idWZfc3RhcnQgPDwgUEFHRV9TSElGVCwgcGd0X2J1Zl90b3AgPDwgUEFHRV9TSElGVCk7CiB9CiAKK3ZvaWQgX19pbml0IG5hdGl2ZV9wYWdldGFibGVfcmVzZXJ2ZSh1NjQgc3RhcnQsIHU2NCBlbmQpCit7CisJbWVtYmxvY2tfeDg2X3Jlc2VydmVfcmFuZ2Uoc3RhcnQsIGVuZCwgIlBHVEFCTEUiKTsKK30KKwogc3RydWN0IG1hcF9yYW5nZSB7CiAJdW5zaWduZWQgbG9uZyBzdGFydDsKIAl1bnNpZ25lZCBsb25nIGVuZDsKQEAgLTI3Miw5ICsyNzcsMjQgQEAKIAogCV9fZmx1c2hfdGxiX2FsbCgpOwogCisJLyoKKwkgKiBSZXNlcnZlIHRoZSBrZXJuZWwgcGFnZXRhYmxlIHBhZ2VzIHdlIHVzZWQgKHBndF9idWZfc3RhcnQgLQorCSAqIHBndF9idWZfZW5kKSBhbmQgZnJlZSB0aGUgb3RoZXIgb25lcyAocGd0X2J1Zl9lbmQgLSBwZ3RfYnVmX3RvcCkKKwkgKiBzbyB0aGF0IHRoZXkgY2FuIGJlIHJldXNlZCBmb3Igb3RoZXIgcHVycG9zZXMuCisJICoKKwkgKiBPbiBuYXRpdmUgaXQganVzdCBtZWFucyBjYWxsaW5nIG1lbWJsb2NrX3g4Nl9yZXNlcnZlX3JhbmdlLCBvbiBYZW4gaXQKKwkgKiBhbHNvIG1lYW5zIG1hcmtpbmcgUlcgdGhlIHBhZ2V0YWJsZSBwYWdlcyB0aGF0IHdlIGFsbG9jYXRlZCBiZWZvcmUKKwkgKiBidXQgdGhhdCBoYXZlbid0IGJlZW4gdXNlZC4KKwkgKgorCSAqIEluIGZhY3Qgb24geGVuIHdlIG1hcmsgUk8gdGhlIHdob2xlIHJhbmdlIHBndF9idWZfc3RhcnQgLQorCSAqIHBndF9idWZfdG9wLCBiZWNhdXNlIHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgd2hlbgorCSAqIGluaXRfbWVtb3J5X21hcHBpbmcgcmVhY2hlcyB0aGUgcGFnZXRhYmxlIHBhZ2VzIGFyZWEsIGl0IG1hcHMKKwkgKiBSTyBhbGwgdGhlIHBhZ2V0YWJsZSBwYWdlcywgaW5jbHVkaW5nIHRoZSBvbmVzIHRoYXQgYXJlIGJleW9uZAorCSAqIHBndF9idWZfZW5kIGF0IHRoYXQgdGltZS4KKwkgKi8KIAlpZiAoIWFmdGVyX2Jvb3RtZW0gJiYgcGd0X2J1Zl9lbmQgPiBwZ3RfYnVmX3N0YXJ0KQotCQltZW1ibG9ja194ODZfcmVzZXJ2ZV9yYW5nZShwZ3RfYnVmX3N0YXJ0IDw8IFBBR0VfU0hJRlQsCi0JCQkJIHBndF9idWZfZW5kIDw8IFBBR0VfU0hJRlQsICJQR1RBQkxFIik7CisJCXg4Nl9pbml0Lm1hcHBpbmcucGFnZXRhYmxlX3Jlc2VydmUoUEZOX1BIWVMocGd0X2J1Zl9zdGFydCksCisJCQkJUEZOX1BIWVMocGd0X2J1Zl9lbmQpKTsKIAogCWlmICghYWZ0ZXJfYm9vdG1lbSkKIAkJZWFybHlfbWVtdGVzdChzdGFydCwgZW5kKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL251bWEuYyBiL2FyY2gveDg2L21tL251bWEuYwppbmRleCA5NTU5ZDM2Li43NDUyNThkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9udW1hLmMKKysrIGIvYXJjaC94ODYvbW0vbnVtYS5jCkBAIC0yMTMsNTMgKzIxMyw0OCBAQAogCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fbm9kZV9tYXAsIGNwdSk7CiB9CiAKLXN0cnVjdCBjcHVtYXNrIF9fY3B1aW5pdCAqZGVidWdfY3B1bWFza19zZXRfY3B1KGludCBjcHUsIGludCBlbmFibGUpCit2b2lkIGRlYnVnX2NwdW1hc2tfc2V0X2NwdShpbnQgY3B1LCBpbnQgbm9kZSwgYm9vbCBlbmFibGUpCiB7Ci0JaW50IG5vZGUgPSBlYXJseV9jcHVfdG9fbm9kZShjcHUpOwogCXN0cnVjdCBjcHVtYXNrICptYXNrOwogCWNoYXIgYnVmWzY0XTsKIAogCWlmIChub2RlID09IE5VTUFfTk9fTk9ERSkgewogCQkvKiBlYXJseV9jcHVfdG9fbm9kZSgpIGFscmVhZHkgZW1pdHMgYSB3YXJuaW5nIGFuZCB0cmFjZSAqLwotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuOwogCX0KIAltYXNrID0gbm9kZV90b19jcHVtYXNrX21hcFtub2RlXTsKIAlpZiAoIW1hc2spIHsKIAkJcHJfZXJyKCJub2RlX3RvX2NwdW1hc2tfbWFwWyVpXSBOVUxMXG4iLCBub2RlKTsKIAkJZHVtcF9zdGFjaygpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQljcHVsaXN0X3NjbnByaW50ZihidWYsIHNpemVvZihidWYpLCBtYXNrKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXMgY3B1ICVkIG5vZGUgJWQ6IG1hc2sgbm93ICVzXG4iLAotCQllbmFibGUgPyAibnVtYV9hZGRfY3B1IiA6ICJudW1hX3JlbW92ZV9jcHUiLAotCQljcHUsIG5vZGUsIGJ1Zik7Ci0JcmV0dXJuIG1hc2s7Ci19Ci0KLSMgaWZuZGVmIENPTkZJR19OVU1BX0VNVQotc3RhdGljIHZvaWQgX19jcHVpbml0IG51bWFfc2V0X2NwdW1hc2soaW50IGNwdSwgaW50IGVuYWJsZSkKLXsKLQlzdHJ1Y3QgY3B1bWFzayAqbWFzazsKLQotCW1hc2sgPSBkZWJ1Z19jcHVtYXNrX3NldF9jcHUoY3B1LCBlbmFibGUpOwotCWlmICghbWFzaykKIAkJcmV0dXJuOworCX0KIAogCWlmIChlbmFibGUpCiAJCWNwdW1hc2tfc2V0X2NwdShjcHUsIG1hc2spOwogCWVsc2UKIAkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBtYXNrKTsKKworCWNwdWxpc3Rfc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIG1hc2spOworCXByaW50ayhLRVJOX0RFQlVHICIlcyBjcHUgJWQgbm9kZSAlZDogbWFzayBub3cgJXNcbiIsCisJCWVuYWJsZSA/ICJudW1hX2FkZF9jcHUiIDogIm51bWFfcmVtb3ZlX2NwdSIsCisJCWNwdSwgbm9kZSwgYnVmKTsKKwlyZXR1cm47Cit9CisKKyMgaWZuZGVmIENPTkZJR19OVU1BX0VNVQorc3RhdGljIHZvaWQgX19jcHVpbml0IG51bWFfc2V0X2NwdW1hc2soaW50IGNwdSwgYm9vbCBlbmFibGUpCit7CisJZGVidWdfY3B1bWFza19zZXRfY3B1KGNwdSwgZWFybHlfY3B1X3RvX25vZGUoY3B1KSwgZW5hYmxlKTsKIH0KIAogdm9pZCBfX2NwdWluaXQgbnVtYV9hZGRfY3B1KGludCBjcHUpCiB7Ci0JbnVtYV9zZXRfY3B1bWFzayhjcHUsIDEpOworCW51bWFfc2V0X2NwdW1hc2soY3B1LCB0cnVlKTsKIH0KIAogdm9pZCBfX2NwdWluaXQgbnVtYV9yZW1vdmVfY3B1KGludCBjcHUpCiB7Ci0JbnVtYV9zZXRfY3B1bWFzayhjcHUsIDApOworCW51bWFfc2V0X2NwdW1hc2soY3B1LCBmYWxzZSk7CiB9CiAjIGVuZGlmCS8qICFDT05GSUdfTlVNQV9FTVUgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbnVtYV82NC5jIGIvYXJjaC94ODYvbW0vbnVtYV82NC5jCmluZGV4IGU4YzAwY2MuLjg1YjUyZmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL251bWFfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9udW1hXzY0LmMKQEAgLTMwNiw3ICszMDYsNyBAQAogCQliaS0+ZW5kID0gbWluKGJpLT5lbmQsIGhpZ2gpOwogCiAJCS8qIGFuZCB0aGVyZSdzIG5vIGVtcHR5IGJsb2NrICovCi0JCWlmIChiaS0+c3RhcnQgPT0gYmktPmVuZCkgeworCQlpZiAoYmktPnN0YXJ0ID49IGJpLT5lbmQpIHsKIAkJCW51bWFfcmVtb3ZlX21lbWJsa19mcm9tKGktLSwgbWkpOwogCQkJY29udGludWU7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL251bWFfZW11bGF0aW9uLmMgYi9hcmNoL3g4Ni9tbS9udW1hX2VtdWxhdGlvbi5jCmluZGV4IGFkMDkxZTQuLmRlODRjYzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL251bWFfZW11bGF0aW9uLmMKKysrIGIvYXJjaC94ODYvbW0vbnVtYV9lbXVsYXRpb24uYwpAQCAtNDU0LDEwICs0NTQsOSBAQAogCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG5vZGVfdG9fY3B1bWFza19tYXBbaV0pOwogfQogI2Vsc2UJLyogIUNPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMgKi8KLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBudW1hX3NldF9jcHVtYXNrKGludCBjcHUsIGludCBlbmFibGUpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgbnVtYV9zZXRfY3B1bWFzayhpbnQgY3B1LCBib29sIGVuYWJsZSkKIHsKLQlzdHJ1Y3QgY3B1bWFzayAqbWFzazsKLQlpbnQgbmlkLCBwaHlzbmlkLCBpOworCWludCBuaWQsIHBoeXNuaWQ7CiAKIAluaWQgPSBlYXJseV9jcHVfdG9fbm9kZShjcHUpOwogCWlmIChuaWQgPT0gTlVNQV9OT19OT0RFKSB7CkBAIC00NjcsMjggKzQ2NiwyMSBAQAogCiAJcGh5c25pZCA9IGVtdV9uaWRfdG9fcGh5c1tuaWRdOwogCi0JZm9yX2VhY2hfb25saW5lX25vZGUoaSkgeworCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkgewogCQlpZiAoZW11X25pZF90b19waHlzW25pZF0gIT0gcGh5c25pZCkKIAkJCWNvbnRpbnVlOwogCi0JCW1hc2sgPSBkZWJ1Z19jcHVtYXNrX3NldF9jcHUoY3B1LCBlbmFibGUpOwotCQlpZiAoIW1hc2spCi0JCQlyZXR1cm47Ci0KLQkJaWYgKGVuYWJsZSkKLQkJCWNwdW1hc2tfc2V0X2NwdShjcHUsIG1hc2spOwotCQllbHNlCi0JCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG1hc2spOworCQlkZWJ1Z19jcHVtYXNrX3NldF9jcHUoY3B1LCBuaWQsIGVuYWJsZSk7CiAJfQogfQogCiB2b2lkIF9fY3B1aW5pdCBudW1hX2FkZF9jcHUoaW50IGNwdSkKIHsKLQludW1hX3NldF9jcHVtYXNrKGNwdSwgMSk7CisJbnVtYV9zZXRfY3B1bWFzayhjcHUsIHRydWUpOwogfQogCiB2b2lkIF9fY3B1aW5pdCBudW1hX3JlbW92ZV9jcHUoaW50IGNwdSkKIHsKLQludW1hX3NldF9jcHVtYXNrKGNwdSwgMCk7CisJbnVtYV9zZXRfY3B1bWFzayhjcHUsIGZhbHNlKTsKIH0KICNlbmRpZgkvKiAhQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vc3JhdF8zMi5jIGIvYXJjaC94ODYvbW0vc3JhdF8zMi5jCmluZGV4IDQ4NjUxYzYuLjM2NGYzNmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3NyYXRfMzIuYworKysgYi9hcmNoL3g4Ni9tbS9zcmF0XzMyLmMKQEAgLTIxMSwxMCArMjExLDEyIEBACiB7CiAJaW50IGksIGosIG5pZDsKIAotCiAJaWYgKHNyYXRfZGlzYWJsZWQoKSkKIAkJZ290byBvdXRfZmFpbDsKIAorCWlmIChhY3BpX251bWFfaW5pdCgpIDwgMCkKKwkJZ290byBvdXRfZmFpbDsKKwogCWlmIChudW1fbWVtb3J5X2NodW5rcyA9PSAwKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHCiAJCQkgImNvdWxkIG5vdCBmaW5kIGFueSBBQ1BJIFNSQVQgbWVtb3J5IGFyZWFzLlxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS9jZTQxMDAvZmFsY29uZmFsbHMuZHRzIGIvYXJjaC94ODYvcGxhdGZvcm0vY2U0MTAwL2ZhbGNvbmZhbGxzLmR0cwppbmRleCBkYzcwMWVhLi5lNzBiZTM4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wbGF0Zm9ybS9jZTQxMDAvZmFsY29uZmFsbHMuZHRzCisrKyBiL2FyY2gveDg2L3BsYXRmb3JtL2NlNDEwMC9mYWxjb25mYWxscy5kdHMKQEAgLTc0LDYgKzc0LDcgQEAKIAkJCQljb21wYXRpYmxlID0gImludGVsLGNlNDEwMC1wY2kiLCAicGNpIjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCQkJCWJ1cy1yYW5nZSA9IDwxIDE+OworCQkJCXJlZyA9IDwweDA4MDAgMHgwIDB4MCAweDAgMHgwPjsKIAkJCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDAgMHhkZmZlMDAwMCAweDIwMDAwMDAgMCAweGRmZmUwMDAwIDAgMHgxMDAwPjsKIAogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlvYXBpYzI+OwpAQCAtMzQ2LDcgKzM0Nyw3IEBACiAJCQkJCQkgICAicGNpY2xhc3MwYzAzIjsKIAogCQkJCQlyZWcgPSA8MHgxNjgwMCAweDAgMHgwIDB4MCAweDA+OwotCQkJCQlpbnRlcnJ1cHRzID0gPDIyIDM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDIyIDE+OwogCQkJCX07CiAKIAkJCQl1c2JAZCwxIHsKQEAgLTM1Niw3ICszNTcsNyBAQAogCQkJCQkJICAgInBjaWNsYXNzMGMwMyI7CiAKIAkJCQkJcmVnID0gPDB4MTY5MDAgMHgwIDB4MCAweDAgMHgwPjsKLQkJCQkJaW50ZXJydXB0cyA9IDwyMiAzPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwyMiAxPjsKIAkJCQl9OwogCiAJCQkJc2F0YUBlLDAgewpAQCAtMzY2LDcgKzM2Nyw3IEBACiAJCQkJCQkgICAicGNpY2xhc3MwMTA2IjsKIAogCQkJCQlyZWcgPSA8MHgxNzAwMCAweDAgMHgwIDB4MCAweDA+OwotCQkJCQlpbnRlcnJ1cHRzID0gPDIzIDM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDIzIDE+OwogCQkJCX07CiAKIAkJCQlmbGFzaEBmLDAgewpAQCAtNDEyLDYgKzQxMyw3IEBACiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CiAJCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQkJY29tcGF0aWJsZSA9ICJpc2EiOworCQkJCXJlZyA9IDwweGY4MDAgMHgwIDB4MCAweDAgMHgwPjsKIAkJCQlyYW5nZXMgPSA8MSAwIDAgMCAwIDB4MTAwPjsKIAogCQkJCXJ0Y0A3MCB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS9tcnN0L21yc3QuYyBiL2FyY2gveDg2L3BsYXRmb3JtL21yc3QvbXJzdC5jCmluZGV4IDVjMDIwN2IuLjI3NWRiYzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BsYXRmb3JtL21yc3QvbXJzdC5jCisrKyBiL2FyY2gveDg2L3BsYXRmb3JtL21yc3QvbXJzdC5jCkBAIC05NywxMSArOTcsMTEgQEAKIAkJCXBlbnRyeS0+ZnJlcV9oeiwgcGVudHJ5LT5pcnEpOwogCQkJaWYgKCFwZW50cnktPmlycSkKIAkJCQljb250aW51ZTsKLQkJCW1wX2lycS50eXBlID0gTVBfSU9BUElDOworCQkJbXBfaXJxLnR5cGUgPSBNUF9JTlRTUkM7CiAJCQltcF9pcnEuaXJxdHlwZSA9IG1wX0lOVDsKIC8qIHRyaWdnZXJpbmcgbW9kZSBlZGdlIGJpdCAyLTMsIGFjdGl2ZSBoaWdoIHBvbGFyaXR5IGJpdCAwLTEgKi8KIAkJCW1wX2lycS5pcnFmbGFnID0gNTsKLQkJCW1wX2lycS5zcmNidXMgPSAwOworCQkJbXBfaXJxLnNyY2J1cyA9IE1QX0JVU19JU0E7CiAJCQltcF9pcnEuc3JjYnVzaXJxID0gcGVudHJ5LT5pcnE7CS8qIElSUSAqLwogCQkJbXBfaXJxLmRzdGFwaWMgPSBNUF9BUElDX0FMTDsKIAkJCW1wX2lycS5kc3RpcnEgPSBwZW50cnktPmlycTsKQEAgLTE2OCwxMCArMTY4LDEwIEBACiAJZm9yICh0b3RhbGxlbiA9IDA7IHRvdGFsbGVuIDwgc2ZpX21ydGNfbnVtOyB0b3RhbGxlbisrLCBwZW50cnkrKykgewogCQlwcl9kZWJ1ZygiUlRDWyVkXTogcGFkZHIgPSAweCUwOHgsIGlycSA9ICVkXG4iLAogCQkJdG90YWxsZW4sICh1MzIpcGVudHJ5LT5waHlzX2FkZHIsIHBlbnRyeS0+aXJxKTsKLQkJbXBfaXJxLnR5cGUgPSBNUF9JT0FQSUM7CisJCW1wX2lycS50eXBlID0gTVBfSU5UU1JDOwogCQltcF9pcnEuaXJxdHlwZSA9IG1wX0lOVDsKIAkJbXBfaXJxLmlycWZsYWcgPSAweGY7CS8qIGxldmVsIHRyaWdnZXIgYW5kIGFjdGl2ZSBsb3cgKi8KLQkJbXBfaXJxLnNyY2J1cyA9IDA7CisJCW1wX2lycS5zcmNidXMgPSBNUF9CVVNfSVNBOwogCQltcF9pcnEuc3JjYnVzaXJxID0gcGVudHJ5LT5pcnE7CS8qIElSUSAqLwogCQltcF9pcnEuZHN0YXBpYyA9IE1QX0FQSUNfQUxMOwogCQltcF9pcnEuZHN0aXJxID0gcGVudHJ5LT5pcnE7CkBAIC0yODIsNyArMjgyLDcgQEAKIAkvKiBBdm9pZCBzZWFyY2hpbmcgZm9yIEJJT1MgTVAgdGFibGVzICovCiAJeDg2X2luaXQubXBwYXJzZS5maW5kX3NtcF9jb25maWcgPSB4ODZfaW5pdF9ub29wOwogCXg4Nl9pbml0Lm1wcGFyc2UuZ2V0X3NtcF9jb25maWcgPSB4ODZfaW5pdF91aW50X25vb3A7Ci0KKwlzZXRfYml0KE1QX0JVU19JU0EsIG1wX2J1c19ub3RfcGNpKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL21yc3QvdnJ0Yy5jIGIvYXJjaC94ODYvcGxhdGZvcm0vbXJzdC92cnRjLmMKaW5kZXggMDRjZjY0NS4uNzNkNzBkNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGxhdGZvcm0vbXJzdC92cnRjLmMKKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vbXJzdC92cnRjLmMKQEAgLTEwMCw5ICsxMDAsMTEgQEAKIAogdm9pZCBfX2luaXQgbXJzdF9ydGNfaW5pdCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgdnJ0Y19wYWRkciA9IHNmaV9tcnRjX2FycmF5WzBdLnBoeXNfYWRkcjsKKwl1bnNpZ25lZCBsb25nIHZydGNfcGFkZHI7CiAKIAlzZmlfdGFibGVfcGFyc2UoU0ZJX1NJR19NUlRDLCBOVUxMLCBOVUxMLCBzZmlfcGFyc2VfbXJ0Yyk7CisKKwl2cnRjX3BhZGRyID0gc2ZpX21ydGNfYXJyYXlbMF0ucGh5c19hZGRyOwogCWlmICghc2ZpX21ydGNfbnVtIHx8ICF2cnRjX3BhZGRyKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL3V2L3RsYl91di5jIGIvYXJjaC94ODYvcGxhdGZvcm0vdXYvdGxiX3V2LmMKaW5kZXggN2NiNjQyNC4uYzU4ZTBlYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGxhdGZvcm0vdXYvdGxiX3V2LmMKKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vdXYvdGxiX3V2LmMKQEAgLTY5OSwxNiArNjk5LDE3IEBACiAJCQkJCSAgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkJCSAgdW5zaWduZWQgbG9uZyB2YSwgdW5zaWduZWQgaW50IGNwdSkKIHsKLQlpbnQgdGNwdTsKLQlpbnQgdXZodWI7CiAJaW50IGxvY2FscyA9IDA7CiAJaW50IHJlbW90ZXMgPSAwOwogCWludCBodWJzID0gMDsKKwlpbnQgdGNwdTsKKwlpbnQgdHBub2RlOwogCXN0cnVjdCBiYXVfZGVzYyAqYmF1X2Rlc2M7CiAJc3RydWN0IGNwdW1hc2sgKmZsdXNoX21hc2s7CiAJc3RydWN0IHB0Y19zdGF0cyAqc3RhdDsKIAlzdHJ1Y3QgYmF1X2NvbnRyb2wgKmJjcDsKIAlzdHJ1Y3QgYmF1X2NvbnRyb2wgKnRiY3A7CisJc3RydWN0IGh1Yl9hbmRfcG5vZGUgKmhwcDsKIAogCS8qIGtlcm5lbCB3YXMgYm9vdGVkICdub2JhdScgKi8KIAlpZiAobm9iYXUpCkBAIC03NTAsMTEgKzc1MSwxOCBAQAogCWJhdV9kZXNjICs9IFVWX0lURU1TX1BFUl9ERVNDUklQVE9SICogYmNwLT51dmh1Yl9jcHU7CiAJYmF1X3V2aHVic19jbGVhcigmYmF1X2Rlc2MtPmRpc3RyaWJ1dGlvbiwgVVZfRElTVFJJQlVUSU9OX1NJWkUpOwogCi0JLyogY3B1IHN0YXRpc3RpY3MgKi8KIAlmb3JfZWFjaF9jcHUodGNwdSwgZmx1c2hfbWFzaykgewotCQl1dmh1YiA9IHV2X2NwdV90b19ibGFkZV9pZCh0Y3B1KTsKLQkJYmF1X3V2aHViX3NldCh1dmh1YiwgJmJhdV9kZXNjLT5kaXN0cmlidXRpb24pOwotCQlpZiAodXZodWIgPT0gYmNwLT51dmh1YikKKwkJLyoKKwkJICogVGhlIGRpc3RyaWJ1dGlvbiB2ZWN0b3IgaXMgYSBiaXQgbWFwIG9mIHBub2RlcywgcmVsYXRpdmUKKwkJICogdG8gdGhlIHBhcnRpdGlvbiBiYXNlIHBub2RlIChhbmQgdGhlIHBhcnRpdGlvbiBiYXNlIG5hc2lkCisJCSAqIGluIHRoZSBoZWFkZXIpLgorCQkgKiBUcmFuc2xhdGUgY3B1IHRvIHBub2RlIGFuZCBodWIgdXNpbmcgYW4gYXJyYXkgc3RvcmVkCisJCSAqIGluIGxvY2FsIG1lbW9yeS4KKwkJICovCisJCWhwcCA9ICZiY3AtPnNvY2tldF9tYXN0ZXItPnRhcmdldF9odWJfYW5kX3Bub2RlW3RjcHVdOworCQl0cG5vZGUgPSBocHAtPnBub2RlIC0gYmNwLT5wYXJ0aXRpb25fYmFzZV9wbm9kZTsKKwkJYmF1X3V2aHViX3NldCh0cG5vZGUsICZiYXVfZGVzYy0+ZGlzdHJpYnV0aW9uKTsKKwkJaWYgKGhwcC0+dXZodWIgPT0gYmNwLT51dmh1YikKIAkJCWxvY2FscysrOwogCQllbHNlCiAJCQlyZW1vdGVzKys7CkBAIC04NTUsNyArODYzLDcgQEAKICAqIGFuIGludGVycnVwdCwgYnV0IGNhdXNlcyBhbiBlcnJvciBtZXNzYWdlIHRvIGJlIHJldHVybmVkIHRvCiAgKiB0aGUgc2VuZGVyLgogICovCi1zdGF0aWMgdm9pZCB1dl9lbmFibGVfdGltZW91dHModm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCB1dl9lbmFibGVfdGltZW91dHModm9pZCkKIHsKIAlpbnQgdXZodWI7CiAJaW50IG51dmh1YnM7CkBAIC0xMzI2LDEwICsxMzM0LDEwIEBACiB9CiAKIC8qCi0gKiBpbml0aWFsaXplIHRoZSBzZW5kaW5nIHNpZGUncyBzZW5kaW5nIGJ1ZmZlcnMKKyAqIEluaXRpYWxpemUgdGhlIHNlbmRpbmcgc2lkZSdzIHNlbmRpbmcgYnVmZmVycy4KICAqLwogc3RhdGljIHZvaWQKLXV2X2FjdGl2YXRpb25fZGVzY3JpcHRvcl9pbml0KGludCBub2RlLCBpbnQgcG5vZGUpCit1dl9hY3RpdmF0aW9uX2Rlc2NyaXB0b3JfaW5pdChpbnQgbm9kZSwgaW50IHBub2RlLCBpbnQgYmFzZV9wbm9kZSkKIHsKIAlpbnQgaTsKIAlpbnQgY3B1OwpAQCAtMTM1MiwxMSArMTM2MCwxMSBAQAogCW4gPSBwYSA+PiB1dl9uc2hpZnQ7CiAJbSA9IHBhICYgdXZfbW1hc2s7CiAKKwkvKiB0aGUgMTQtYml0IHBub2RlICovCiAJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfTEJfQkFVX1NCX0RFU0NSSVBUT1JfQkFTRSwKIAkJCSAgICAgIChuIDw8IFVWX0RFU0NfQkFTRV9QTk9ERV9TSElGVCB8IG0pKTsKLQogCS8qCi0JICogaW5pdGlhbGl6aW5nIGFsbCA4IChVVl9JVEVNU19QRVJfREVTQ1JJUFRPUikgZGVzY3JpcHRvcnMgZm9yIGVhY2gKKwkgKiBJbml0aWFsaXppbmcgYWxsIDggKFVWX0lURU1TX1BFUl9ERVNDUklQVE9SKSBkZXNjcmlwdG9ycyBmb3IgZWFjaAogCSAqIGNwdSBldmVuIHRob3VnaCB3ZSBvbmx5IHVzZSB0aGUgZmlyc3Qgb25lOyBvbmUgZGVzY3JpcHRvciBjYW4KIAkgKiBkZXNjcmliZSBhIGJyb2FkY2FzdCB0byAyNTYgdXYgaHVicy4KIAkgKi8KQEAgLTEzNjUsMTIgKzEzNzMsMTMgQEAKIAkJbWVtc2V0KGJkMiwgMCwgc2l6ZW9mKHN0cnVjdCBiYXVfZGVzYykpOwogCQliZDItPmhlYWRlci5zd19hY2tfZmxhZyA9IDE7CiAJCS8qCi0JCSAqIGJhc2VfZGVzdF9ub2RlaWQgaXMgdGhlIG5hc2lkIG9mIHRoZSBmaXJzdCB1dmh1YgotCQkgKiBpbiB0aGUgcGFydGl0aW9uLiBUaGUgYml0IG1hcCB3aWxsIGluZGljYXRlIHV2aHViIG51bWJlcnMsCi0JCSAqIHdoaWNoIGFyZSAwLU4gaW4gYSBwYXJ0aXRpb24uIFBub2RlcyBhcmUgdW5pcXVlIHN5c3RlbS13aWRlLgorCQkgKiBUaGUgYmFzZV9kZXN0X25hc2lkIHNldCBpbiB0aGUgbWVzc2FnZSBoZWFkZXIgaXMgdGhlIG5hc2lkCisJCSAqIG9mIHRoZSBmaXJzdCB1dmh1YiBpbiB0aGUgcGFydGl0aW9uLiBUaGUgYml0IG1hcCB3aWxsCisJCSAqIGluZGljYXRlIGRlc3RpbmF0aW9uIHBub2RlIG51bWJlcnMgcmVsYXRpdmUgdG8gdGhhdCBiYXNlLgorCQkgKiBUaGV5IG1heSBub3QgYmUgY29uc2VjdXRpdmUgaWYgbmFzaWQgc3RyaWRpbmcgaXMgYmVpbmcgdXNlZC4KIAkJICovCi0JCWJkMi0+aGVhZGVyLmJhc2VfZGVzdF9ub2RlaWQgPSBVVl9QTk9ERV9UT19OQVNJRCh1dl9wYXJ0aXRpb25fYmFzZV9wbm9kZSk7Ci0JCWJkMi0+aGVhZGVyLmRlc3Rfc3Vibm9kZWlkID0gMHgxMDsgLyogdGhlIExCICovCisJCWJkMi0+aGVhZGVyLmJhc2VfZGVzdF9uYXNpZCA9IFVWX1BOT0RFX1RPX05BU0lEKGJhc2VfcG5vZGUpOworCQliZDItPmhlYWRlci5kZXN0X3N1Ym5vZGVpZCA9IFVWX0xCX1NVQk5PREVJRDsKIAkJYmQyLT5oZWFkZXIuY29tbWFuZCA9IFVWX05FVF9FTkRQT0lOVF9JTlREOwogCQliZDItPmhlYWRlci5pbnRfYm90aCA9IDE7CiAJCS8qCkBAIC0xNDQyLDcgKzE0NTEsNyBAQAogLyoKICAqIEluaXRpYWxpemF0aW9uIG9mIGVhY2ggVVYgaHViJ3Mgc3RydWN0dXJlcwogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgdXZfaW5pdF91dmh1YihpbnQgdXZodWIsIGludCB2ZWN0b3IpCitzdGF0aWMgdm9pZCBfX2luaXQgdXZfaW5pdF91dmh1YihpbnQgdXZodWIsIGludCB2ZWN0b3IsIGludCBiYXNlX3Bub2RlKQogewogCWludCBub2RlOwogCWludCBwbm9kZTsKQEAgLTE0NTAsMTEgKzE0NTksMTEgQEAKIAogCW5vZGUgPSB1dmh1Yl90b19maXJzdF9ub2RlKHV2aHViKTsKIAlwbm9kZSA9IHV2X2JsYWRlX3RvX3Bub2RlKHV2aHViKTsKLQl1dl9hY3RpdmF0aW9uX2Rlc2NyaXB0b3JfaW5pdChub2RlLCBwbm9kZSk7CisJdXZfYWN0aXZhdGlvbl9kZXNjcmlwdG9yX2luaXQobm9kZSwgcG5vZGUsIGJhc2VfcG5vZGUpOwogCXV2X3BheWxvYWRfcXVldWVfaW5pdChub2RlLCBwbm9kZSk7CiAJLyoKLQkgKiB0aGUgYmVsb3cgaW5pdGlhbGl6YXRpb24gY2FuJ3QgYmUgaW4gZmlybXdhcmUgYmVjYXVzZSB0aGUKLQkgKiBtZXNzYWdpbmcgSVJRIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSB0aGUgT1MKKwkgKiBUaGUgYmVsb3cgaW5pdGlhbGl6YXRpb24gY2FuJ3QgYmUgaW4gZmlybXdhcmUgYmVjYXVzZSB0aGUKKwkgKiBtZXNzYWdpbmcgSVJRIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSB0aGUgT1MuCiAJICovCiAJYXBpY2lkID0gdXZodWJfdG9fZmlyc3RfYXBpY2lkKHV2aHViKSB8IHV2X2FwaWNpZF9oaWJpdHM7CiAJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfQkFVX0RBVEFfQ09ORklHLApAQCAtMTQ5MSwxMCArMTUwMCwxMSBAQAogLyoKICAqIGluaXRpYWxpemUgdGhlIGJhdV9jb250cm9sIHN0cnVjdHVyZSBmb3IgZWFjaCBjcHUKICAqLwotc3RhdGljIGludCBfX2luaXQgdXZfaW5pdF9wZXJfY3B1KGludCBudXZodWJzKQorc3RhdGljIGludCBfX2luaXQgdXZfaW5pdF9wZXJfY3B1KGludCBudXZodWJzLCBpbnQgYmFzZV9wYXJ0X3Bub2RlKQogewogCWludCBpOwogCWludCBjcHU7CisJaW50IHRjcHU7CiAJaW50IHBub2RlOwogCWludCB1dmh1YjsKIAlpbnQgaGF2ZV9obWFzdGVyOwpAQCAtMTUyOCw2ICsxNTM4LDE1IEBACiAJCWJjcCA9ICZwZXJfY3B1KGJhdV9jb250cm9sLCBjcHUpOwogCQltZW1zZXQoYmNwLCAwLCBzaXplb2Yoc3RydWN0IGJhdV9jb250cm9sKSk7CiAJCXBub2RlID0gdXZfY3B1X2h1Yl9pbmZvKGNwdSktPnBub2RlOworCQlpZiAoKHBub2RlIC0gYmFzZV9wYXJ0X3Bub2RlKSA+PSBVVl9ESVNUUklCVVRJT05fU0laRSkgeworCQkJcHJpbnRrKEtFUk5fRU1FUkcKKwkJCQkiY3B1ICVkIHBub2RlICVkLSVkIGJleW9uZCAlZDsgQkFVIGRpc2FibGVkXG4iLAorCQkJCWNwdSwgcG5vZGUsIGJhc2VfcGFydF9wbm9kZSwKKwkJCQlVVl9ESVNUUklCVVRJT05fU0laRSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQliY3AtPm9zbm9kZSA9IGNwdV90b19ub2RlKGNwdSk7CisJCWJjcC0+cGFydGl0aW9uX2Jhc2VfcG5vZGUgPSB1dl9wYXJ0aXRpb25fYmFzZV9wbm9kZTsKIAkJdXZodWIgPSB1dl9jcHVfaHViX2luZm8oY3B1KS0+bnVtYV9ibGFkZV9pZDsKIAkJKih1dmh1Yl9tYXNrICsgKHV2aHViLzgpKSB8PSAoMSA8PCAodXZodWIlOCkpOwogCQliZHAgPSAmdXZodWJfZGVzY3NbdXZodWJdOwpAQCAtMTUzNiw3ICsxNTU1LDcgQEAKIAkJYmRwLT5wbm9kZSA9IHBub2RlOwogCQkvKiBrbHVkZ2U6ICdhc3N1bWluZycgb25lIG5vZGUgcGVyIHNvY2tldCwgYW5kIGFzc3VtaW5nIHRoYXQKIAkJICAgZGlzYWJsaW5nIGEgc29ja2V0IGp1c3QgbGVhdmVzIGEgZ2FwIGluIG5vZGUgbnVtYmVycyAqLwotCQlzb2NrZXQgPSAoY3B1X3RvX25vZGUoY3B1KSAmIDEpOworCQlzb2NrZXQgPSBiY3AtPm9zbm9kZSAmIDE7CiAJCWJkcC0+c29ja2V0X21hc2sgfD0gKDEgPDwgc29ja2V0KTsKIAkJc2RwID0gJmJkcC0+c29ja2V0W3NvY2tldF07CiAJCXNkcC0+Y3B1X251bWJlcltzZHAtPm51bV9jcHVzXSA9IGNwdTsKQEAgLTE1ODUsNiArMTYwNCwyMCBAQAogbmV4dHNvY2tldDoKIAkJCXNvY2tldCsrOwogCQkJc29ja2V0X21hc2sgPSAoc29ja2V0X21hc2sgPj4gMSk7CisJCQkvKiBlYWNoIHNvY2tldCBnZXRzIGEgbG9jYWwgYXJyYXkgb2YgcG5vZGVzL2h1YnMgKi8KKwkJCWJjcCA9IHNtYXN0ZXI7CisJCQliY3AtPnRhcmdldF9odWJfYW5kX3Bub2RlID0ga21hbGxvY19ub2RlKAorCQkJCXNpemVvZihzdHJ1Y3QgaHViX2FuZF9wbm9kZSkgKgorCQkJCW51bV9wb3NzaWJsZV9jcHVzKCksIEdGUF9LRVJORUwsIGJjcC0+b3Nub2RlKTsKKwkJCW1lbXNldChiY3AtPnRhcmdldF9odWJfYW5kX3Bub2RlLCAwLAorCQkJCXNpemVvZihzdHJ1Y3QgaHViX2FuZF9wbm9kZSkgKgorCQkJCW51bV9wb3NzaWJsZV9jcHVzKCkpOworCQkJZm9yX2VhY2hfcHJlc2VudF9jcHUodGNwdSkgeworCQkJCWJjcC0+dGFyZ2V0X2h1Yl9hbmRfcG5vZGVbdGNwdV0ucG5vZGUgPQorCQkJCQl1dl9jcHVfaHViX2luZm8odGNwdSktPnBub2RlOworCQkJCWJjcC0+dGFyZ2V0X2h1Yl9hbmRfcG5vZGVbdGNwdV0udXZodWIgPQorCQkJCQl1dl9jcHVfaHViX2luZm8odGNwdSktPm51bWFfYmxhZGVfaWQ7CisJCQl9CiAJCX0KIAl9CiAJa2ZyZWUodXZodWJfZGVzY3MpOwpAQCAtMTYzNywyMSArMTY3MCwyMiBAQAogCXNwaW5fbG9ja19pbml0KCZkaXNhYmxlX2xvY2spOwogCWNvbmdlc3RlZF9jeWNsZXMgPSBtaWNyb3NlY18yX2N5Y2xlcyhjb25nZXN0ZWRfcmVzcG9uc2VfdXMpOwogCi0JaWYgKHV2X2luaXRfcGVyX2NwdShudXZodWJzKSkgeworCXV2X3BhcnRpdGlvbl9iYXNlX3Bub2RlID0gMHg3ZmZmZmZmZjsKKwlmb3IgKHV2aHViID0gMDsgdXZodWIgPCBudXZodWJzOyB1dmh1YisrKSB7CisJCWlmICh1dl9ibGFkZV9ucl9wb3NzaWJsZV9jcHVzKHV2aHViKSAmJgorCQkJKHV2X2JsYWRlX3RvX3Bub2RlKHV2aHViKSA8IHV2X3BhcnRpdGlvbl9iYXNlX3Bub2RlKSkKKwkJCXV2X3BhcnRpdGlvbl9iYXNlX3Bub2RlID0gdXZfYmxhZGVfdG9fcG5vZGUodXZodWIpOworCX0KKworCWlmICh1dl9pbml0X3Blcl9jcHUobnV2aHVicywgdXZfcGFydGl0aW9uX2Jhc2VfcG5vZGUpKSB7CiAJCW5vYmF1ID0gMTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JdXZfcGFydGl0aW9uX2Jhc2VfcG5vZGUgPSAweDdmZmZmZmZmOwotCWZvciAodXZodWIgPSAwOyB1dmh1YiA8IG51dmh1YnM7IHV2aHViKyspCi0JCWlmICh1dl9ibGFkZV9ucl9wb3NzaWJsZV9jcHVzKHV2aHViKSAmJgotCQkJKHV2X2JsYWRlX3RvX3Bub2RlKHV2aHViKSA8IHV2X3BhcnRpdGlvbl9iYXNlX3Bub2RlKSkKLQkJCXV2X3BhcnRpdGlvbl9iYXNlX3Bub2RlID0gdXZfYmxhZGVfdG9fcG5vZGUodXZodWIpOwotCiAJdmVjdG9yID0gVVZfQkFVX01FU1NBR0U7CiAJZm9yX2VhY2hfcG9zc2libGVfYmxhZGUodXZodWIpCiAJCWlmICh1dl9ibGFkZV9ucl9wb3NzaWJsZV9jcHVzKHV2aHViKSkKLQkJCXV2X2luaXRfdXZodWIodXZodWIsIHZlY3Rvcik7CisJCQl1dl9pbml0X3V2aHViKHV2aHViLCB2ZWN0b3IsIHV2X3BhcnRpdGlvbl9iYXNlX3Bub2RlKTsKIAogCXV2X2VuYWJsZV90aW1lb3V0cygpOwogCWFsbG9jX2ludHJfZ2F0ZSh2ZWN0b3IsIHV2X2JhdV9tZXNzYWdlX2ludHIxKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL3Zpc3dzL3Zpc3dzX3F1aXJrcy5jIGIvYXJjaC94ODYvcGxhdGZvcm0vdmlzd3Mvdmlzd3NfcXVpcmtzLmMKaW5kZXggZmU0Y2Y4Mi4uYzdhYmYxMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGxhdGZvcm0vdmlzd3Mvdmlzd3NfcXVpcmtzLmMKKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vdmlzd3Mvdmlzd3NfcXVpcmtzLmMKQEAgLTQ3MSwxNSArNDcxLDcgQEAKIHsKIAlsZWdhY3lfcGljLT5pbml0KDApOwogCWVuYWJsZV9jb2JhbHRfaXJxKGRhdGEpOwotfQotCi1zdGF0aWMgdm9pZCBlbmRfcGlpeDRfbWFzdGVyX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjb2JhbHRfbG9jaywgZmxhZ3MpOwotCWVuYWJsZV9jb2JhbHRfaXJxKGRhdGEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvYmFsdF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcGlpeDRfbWFzdGVyX2lycV90eXBlID0gewpAQCAtNDkyLDcgKzQ4NCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcGlpeDRfdmlydHVhbF9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiUElJWDQtdmlydHVhbCIsCi0JLm1hc2sJCT0gcGlpNF9tYXNrLAorCS5pcnFfbWFzawk9IHBpaTRfbWFzaywKIH07CiAKIC8qCkBAIC01ODAsOSArNTcyLDkgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9waWl4NF92aXJ0dWFsX2lycV90eXBlKHZvaWQpCiB7Ci0JcGlpeDRfdmlydHVhbF9pcnFfdHlwZS5lbmFibGUgPQlpODI1OUFfY2hpcC51bm1hc2s7Ci0JcGlpeDRfdmlydHVhbF9pcnFfdHlwZS5kaXNhYmxlID0gaTgyNTlBX2NoaXAubWFzazsKLQlwaWl4NF92aXJ0dWFsX2lycV90eXBlLnVubWFzayA9CWk4MjU5QV9jaGlwLnVubWFzazsKKwlwaWl4NF92aXJ0dWFsX2lycV90eXBlLmlycV9lbmFibGUgPSBpODI1OUFfY2hpcC5pcnFfdW5tYXNrOworCXBpaXg0X3ZpcnR1YWxfaXJxX3R5cGUuaXJxX2Rpc2FibGUgPSBpODI1OUFfY2hpcC5pcnFfbWFzazsKKwlwaWl4NF92aXJ0dWFsX2lycV90eXBlLmlycV91bm1hc2sgPSBpODI1OUFfY2hpcC5pcnFfdW5tYXNrOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgdmlzd3NfcHJlX2ludHJfaW5pdCh2b2lkKQpAQCAtNTk5LDcgKzU5MSw3IEBACiAJCWVsc2UgaWYgKGkgPT0gQ09fSVJRX0lERTApCiAJCQljaGlwID0gJmNvYmFsdF9pcnFfdHlwZTsKIAkJZWxzZSBpZiAoaSA9PSBDT19JUlFfSURFMSkKLQkJCT5jaGlwID0gJmNvYmFsdF9pcnFfdHlwZTsKKwkJCWNoaXAgPSAmY29iYWx0X2lycV90eXBlOwogCQllbHNlIGlmIChpID09IENPX0lSUV84MjU5KQogCQkJY2hpcCA9ICZwaWl4NF9tYXN0ZXJfaXJxX3R5cGU7CiAJCWVsc2UgaWYgKGkgPCBDT19JUlFfQVBJQzApCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vS2NvbmZpZyBiL2FyY2gveDg2L3hlbi9LY29uZmlnCmluZGV4IDFjNzEyMWIuLjVjYzgyMWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9LY29uZmlnCisrKyBiL2FyY2gveDg2L3hlbi9LY29uZmlnCkBAIC0zOSw2ICszOSw3IEBACiBjb25maWcgWEVOX1NBVkVfUkVTVE9SRQogICAgICAgIGJvb2wKICAgICAgICBkZXBlbmRzIG9uIFhFTgorICAgICAgIHNlbGVjdCBISUJFUk5BVEVfQ0FMTEJBQ0tTCiAgICAgICAgZGVmYXVsdCB5CiAKIGNvbmZpZyBYRU5fREVCVUdfRlMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwppbmRleCA0OWRiZDc4Li5lM2M2YTA2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKKysrIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCkBAIC0yMzgsNiArMjM4LDcgQEAKIHN0YXRpYyBfX2luaXQgdm9pZCB4ZW5faW5pdF9jcHVpZF9tYXNrKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGF4LCBieCwgY3gsIGR4OworCXVuc2lnbmVkIGludCB4c2F2ZV9tYXNrOwogCiAJY3B1aWRfbGVhZjFfZWR4X21hc2sgPQogCQl+KCgxIDw8IFg4Nl9GRUFUVVJFX01DRSkgIHwgIC8qIGRpc2FibGUgTUNFICovCkBAIC0yNDksMjQgKzI1MCwxNiBAQAogCQljcHVpZF9sZWFmMV9lZHhfbWFzayAmPQogCQkJfigoMSA8PCBYODZfRkVBVFVSRV9BUElDKSB8ICAvKiBkaXNhYmxlIGxvY2FsIEFQSUMgKi8KIAkJCSAgKDEgPDwgWDg2X0ZFQVRVUkVfQUNQSSkpOyAgLyogZGlzYWJsZSBBQ1BJICovCi0KIAlheCA9IDE7Ci0JY3ggPSAwOwogCXhlbl9jcHVpZCgmYXgsICZieCwgJmN4LCAmZHgpOwogCi0JLyogY3B1aWQgY2xhaW1zIHdlIHN1cHBvcnQgeHNhdmU7IHRyeSBlbmFibGluZyBpdCB0byBzZWUgd2hhdCBoYXBwZW5zICovCi0JaWYgKGN4ICYgKDEgPDwgKFg4Nl9GRUFUVVJFX1hTQVZFICUgMzIpKSkgewotCQl1bnNpZ25lZCBsb25nIGNyNDsKKwl4c2F2ZV9tYXNrID0KKwkJKDEgPDwgKFg4Nl9GRUFUVVJFX1hTQVZFICUgMzIpKSB8CisJCSgxIDw8IChYODZfRkVBVFVSRV9PU1hTQVZFICUgMzIpKTsKIAotCQlzZXRfaW5fY3I0KFg4Nl9DUjRfT1NYU0FWRSk7Ci0JCQotCQljcjQgPSByZWFkX2NyNCgpOwotCi0JCWlmICgoY3I0ICYgWDg2X0NSNF9PU1hTQVZFKSA9PSAwKQotCQkJY3B1aWRfbGVhZjFfZWN4X21hc2sgJj0gfigxIDw8IChYODZfRkVBVFVSRV9YU0FWRSAlIDMyKSk7Ci0KLQkJY2xlYXJfaW5fY3I0KFg4Nl9DUjRfT1NYU0FWRSk7Ci0JfQorCS8qIFhlbiB3aWxsIHNldCBDUjQuT1NYU0FWRSBpZiBzdXBwb3J0ZWQgYW5kIG5vdCBkaXNhYmxlZCBieSBmb3JjZSAqLworCWlmICgoY3ggJiB4c2F2ZV9tYXNrKSAhPSB4c2F2ZV9tYXNrKQorCQljcHVpZF9sZWFmMV9lY3hfbWFzayAmPSB+eHNhdmVfbWFzazsgLyogZGlzYWJsZSBYU0FWRSAmIE9TWFNBVkUgKi8KIH0KIAogc3RhdGljIHZvaWQgeGVuX3NldF9kZWJ1Z3JlZyhpbnQgcmVnLCB1bnNpZ25lZCBsb25nIHZhbCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9tbXUuYyBiL2FyY2gveDg2L3hlbi9tbXUuYwppbmRleCBjODJkZjZjLi4wNjg0ZjNjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vbW11LmMKKysrIGIvYXJjaC94ODYveGVuL21tdS5jCkBAIC01NjUsMTMgKzU2NSwxMyBAQAogCWlmIChpb19wYWdlICYmCiAJICAgICh4ZW5faW5pdGlhbF9kb21haW4oKSB8fCBhZGRyID49IElTQV9FTkRfQUREUkVTUykpIHsKIAkJb3RoZXJfYWRkciA9IHBmbl90b19tZm4oYWRkciA+PiBQQUdFX1NISUZUKSA8PCBQQUdFX1NISUZUOwotCQlXQVJOKGFkZHIgIT0gb3RoZXJfYWRkciwKKwkJV0FSTl9PTkNFKGFkZHIgIT0gb3RoZXJfYWRkciwKIAkJCSIweCVseCBpcyB1c2luZyBWTV9JTywgYnV0IGl0IGlzIDB4JWx4IVxuIiwKIAkJCSh1bnNpZ25lZCBsb25nKWFkZHIsICh1bnNpZ25lZCBsb25nKW90aGVyX2FkZHIpOwogCX0gZWxzZSB7CiAJCXB0ZXZhbF90IGlvbWFwX3NldCA9IChfcHRlLnB0ZSAmIFBURV9GTEFHU19NQVNLKSAmIF9QQUdFX0lPTUFQOwogCQlvdGhlcl9hZGRyID0gKF9wdGUucHRlICYgUFRFX1BGTl9NQVNLKTsKLQkJV0FSTigoYWRkciA9PSBvdGhlcl9hZGRyKSAmJiAoIWlvX3BhZ2UpICYmICghaW9tYXBfc2V0KSwKKwkJV0FSTl9PTkNFKChhZGRyID09IG90aGVyX2FkZHIpICYmICghaW9fcGFnZSkgJiYgKCFpb21hcF9zZXQpLAogCQkJIjB4JWx4IGlzIG1pc3NpbmcgVk1fSU8gKGFuZCB3YXNuJ3QgZml4ZWQpIVxuIiwKIAkJCSh1bnNpZ25lZCBsb25nKWFkZHIpOwogCX0KQEAgLTEyNzUsNiArMTI3NSwyMCBAQAogewogfQogCitzdGF0aWMgX19pbml0IHZvaWQgeGVuX21hcHBpbmdfcGFnZXRhYmxlX3Jlc2VydmUodTY0IHN0YXJ0LCB1NjQgZW5kKQoreworCS8qIHJlc2VydmUgdGhlIHJhbmdlIHVzZWQgKi8KKwluYXRpdmVfcGFnZXRhYmxlX3Jlc2VydmUoc3RhcnQsIGVuZCk7CisKKwkvKiBzZXQgYXMgUlcgdGhlIHJlc3QgKi8KKwlwcmludGsoS0VSTl9ERUJVRyAieGVuOiBzZXR0aW5nIFJXIHRoZSByYW5nZSAlbGx4IC0gJWxseFxuIiwgZW5kLAorCQkJUEZOX1BIWVMocGd0X2J1Zl90b3ApKTsKKwl3aGlsZSAoZW5kIDwgUEZOX1BIWVMocGd0X2J1Zl90b3ApKSB7CisJCW1ha2VfbG93bWVtX3BhZ2VfcmVhZHdyaXRlKF9fdmEoZW5kKSk7CisJCWVuZCArPSBQQUdFX1NJWkU7CisJfQorfQorCiBzdGF0aWMgdm9pZCB4ZW5fcG9zdF9hbGxvY2F0b3JfaW5pdCh2b2lkKTsKIAogc3RhdGljIF9faW5pdCB2b2lkIHhlbl9wYWdldGFibGVfc2V0dXBfZG9uZShwZ2RfdCAqYmFzZSkKQEAgLTE0NzMsMTYgKzE0ODcsMjAgQEAKICNlbmRpZgogfQogCisjaWZkZWYgQ09ORklHX1g4Nl8zMgogc3RhdGljIF9faW5pdCBwdGVfdCBtYXNrX3J3X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQogewotCXVuc2lnbmVkIGxvbmcgcGZuID0gcHRlX3BmbihwdGUpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgogCS8qIElmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgcHRlLCB0aGVuIGRvbid0IGFsbG93IF9QQUdFX1JXIHRvIGJlIHNldCAqLwogCWlmIChwdGVfdmFsX21hKCpwdGVwKSAmIF9QQUdFX1BSRVNFTlQpCiAJCXB0ZSA9IF9fcHRlX21hKCgocHRlX3ZhbF9tYSgqcHRlcCkgJiBfUEFHRV9SVykgfCB+X1BBR0VfUlcpICYKIAkJCSAgICAgICBwdGVfdmFsX21hKHB0ZSkpOwotI2VuZGlmCisKKwlyZXR1cm4gcHRlOworfQorI2Vsc2UgLyogQ09ORklHX1g4Nl82NCAqLworc3RhdGljIF9faW5pdCBwdGVfdCBtYXNrX3J3X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQoreworCXVuc2lnbmVkIGxvbmcgcGZuID0gcHRlX3BmbihwdGUpOwogCiAJLyoKIAkgKiBJZiB0aGUgbmV3IHBmbiBpcyB3aXRoaW4gdGhlIHJhbmdlIG9mIHRoZSBuZXdseSBhbGxvY2F0ZWQKQEAgLTE0OTEsMTIgKzE1MDksMTMgQEAKIAkgKiBpdCBpcyBSTy4KIAkgKi8KIAlpZiAoKCghaXNfZWFybHlfaW9yZW1hcF9wdGVwKHB0ZXApICYmCi0JCQlwZm4gPj0gcGd0X2J1Zl9zdGFydCAmJiBwZm4gPCBwZ3RfYnVmX2VuZCkpIHx8CisJCQlwZm4gPj0gcGd0X2J1Zl9zdGFydCAmJiBwZm4gPCBwZ3RfYnVmX3RvcCkpIHx8CiAJCQkoaXNfZWFybHlfaW9yZW1hcF9wdGVwKHB0ZXApICYmIHBmbiAhPSAocGd0X2J1Zl9lbmQgLSAxKSkpCiAJCXB0ZSA9IHB0ZV93cnByb3RlY3QocHRlKTsKIAogCXJldHVybiBwdGU7CiB9CisjZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLwogCiAvKiBJbml0LXRpbWUgc2V0X3B0ZSB3aGlsZSBjb25zdHJ1Y3RpbmcgaW5pdGlhbCBwYWdldGFibGVzLCB3aGljaAogICAgZG9lc24ndCBhbGxvdyBSTyBwYWdldGFibGUgcGFnZXMgdG8gYmUgcmVtYXBwZWQgUlcgKi8KQEAgLTIxMDAsNiArMjExOSw3IEBACiAKIHZvaWQgX19pbml0IHhlbl9pbml0X21tdV9vcHModm9pZCkKIHsKKwl4ODZfaW5pdC5tYXBwaW5nLnBhZ2V0YWJsZV9yZXNlcnZlID0geGVuX21hcHBpbmdfcGFnZXRhYmxlX3Jlc2VydmU7CiAJeDg2X2luaXQucGFnaW5nLnBhZ2V0YWJsZV9zZXR1cF9zdGFydCA9IHhlbl9wYWdldGFibGVfc2V0dXBfc3RhcnQ7CiAJeDg2X2luaXQucGFnaW5nLnBhZ2V0YWJsZV9zZXR1cF9kb25lID0geGVuX3BhZ2V0YWJsZV9zZXR1cF9kb25lOwogCXB2X21tdV9vcHMgPSB4ZW5fbW11X29wczsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9zZXR1cC5jIGIvYXJjaC94ODYveGVuL3NldHVwLmMKaW5kZXggZmEwMjY5YS4uOTBiYWMwYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3NldHVwLmMKKysrIGIvYXJjaC94ODYveGVuL3NldHVwLmMKQEAgLTIyNyw3ICsyMjcsNyBAQAogCiAJbWVtY3B5KG1hcF9yYXcsIG1hcCwgc2l6ZW9mKG1hcCkpOwogCWU4MjAubnJfbWFwID0gMDsKLQl4ZW5fZXh0cmFfbWVtX3N0YXJ0ID0gbWVtX2VuZDsKKwl4ZW5fZXh0cmFfbWVtX3N0YXJ0ID0gbWF4KCgxVUxMIDw8IDMyKSwgbWVtX2VuZCk7CiAJZm9yIChpID0gMDsgaSA8IG1lbW1hcC5ucl9lbnRyaWVzOyBpKyspIHsKIAkJdW5zaWduZWQgbG9uZyBsb25nIGVuZDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vZG1hLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9kbWEuaAppbmRleCAxMzdjYTM5Li5iYjA5OWEzIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9kbWEuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9kbWEuaApAQCAtMzcsNyArMzcsNyBAQAogICoJdGhlIHNpemUgb2YgdGhlIHN0YXRpY2FsbHkgbWFwcGVkIGtlcm5lbCBzZWdtZW50CiAgKgkoWENIQUxfS1NFR197Q0FDSEVELEJZUEFTU31fU0laRSksIGllLiAxMjggTUIuCiAgKgotICogTk9URTogV2hlbiB0aGUgZW50aXJlIEtTRUcgYXJlYSBpcyBETUEgY2FwYWJsZSwgd2Ugc3Vic3RyYWN0CisgKiBOT1RFOiBXaGVuIHRoZSBlbnRpcmUgS1NFRyBhcmVhIGlzIERNQSBjYXBhYmxlLCB3ZSBzdWJ0cmFjdAogICoJb25lIGZyb20gdGhlIG1heCBhZGRyZXNzIHNvIHRoYXQgdGhlIHZpcnRfdG9fcGh5cygpIG1hY3JvCiAgKgl3b3JrcyBjb3JyZWN0bHkgb24gdGhlIGFkZHJlc3MgKG90aGVyd2lzZSB0aGUgYWRkcmVzcwogICoJZW50ZXJzIGFub3RoZXIgYXJlYSwgYW5kIHZpcnRfdG9fcGh5cygpIG1heSBub3QgcmV0dXJuCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvZW50cnkuUyBiL2FyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TCmluZGV4IDVmZDAxZjYuLjYyMjNmMzMgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TCkBAIC0xMDI2LDcgKzEwMjYsNyBAQAogICogVFJZCSBhZGRzIGFuIGVudHJ5IHRvIHRoZSBfX2V4X3RhYmxlIGZpeHVwIHRhYmxlIGZvciB0aGUgaW1tZWRpYXRlbHkKICAqCSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24uCiAgKgotICogQ0FUQ0ggY2F0Y2hlcyBhbnkgZXhjZXB0aW9uIHRoYXQgb2NjdXJyZWQgYXQgb25lIG9mIHRoZSBwcmVjZWVkaW5nIFRSWQorICogQ0FUQ0ggY2F0Y2hlcyBhbnkgZXhjZXB0aW9uIHRoYXQgb2NjdXJyZWQgYXQgb25lIG9mIHRoZSBwcmVjZWRpbmcgVFJZCiAgKiAgICAgICBzdGF0ZW1lbnRzIGFuZCBjb250aW51ZXMgZnJvbSB0aGVyZQogICoKICAqIFVzYWdlIFRSWQlsMzJpCWEwLCBhMSwgMApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jCmluZGV4IGQ3NzA4OWQuLjQzNDBlZTAgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvaXJxLmMKQEAgLTY0LDQ3ICs2NCw0MSBAQAogCiBpbnQgYXJjaF9zaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCBpbnQgcHJlYykKIHsKLQlpbnQgajsKLQotCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIk5NSSIpOwotCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBubWlfY291bnQoaikpOwotCXNlcV9wdXRjKHAsICdcbicpOwogCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIkVSUiIpOwogCXNlcV9wcmludGYocCwgIiUxMHVcbiIsIGF0b21pY19yZWFkKCZpcnFfZXJyX2NvdW50KSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHh0ZW5zYV9pcnFfbWFzayhzdHJ1Y3QgaXJxX2NoaXAgKmQpCitzdGF0aWMgdm9pZCB4dGVuc2FfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewogCWNhY2hlZF9pcnFfbWFzayAmPSB+KDEgPDwgZC0+aXJxKTsKIAlzZXRfc3IgKGNhY2hlZF9pcnFfbWFzaywgSU5URU5BQkxFKTsKIH0KIAotc3RhdGljIHZvaWQgeHRlbnNhX2lycV91bm1hc2soc3RydWN0IGlycV9jaGlwICpkKQorc3RhdGljIHZvaWQgeHRlbnNhX2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogewogCWNhY2hlZF9pcnFfbWFzayB8PSAxIDw8IGQtPmlycTsKIAlzZXRfc3IgKGNhY2hlZF9pcnFfbWFzaywgSU5URU5BQkxFKTsKIH0KIAotc3RhdGljIHZvaWQgeHRlbnNhX2lycV9lbmFibGUoc3RydWN0IGlycV9jaGlwICpkKQorc3RhdGljIHZvaWQgeHRlbnNhX2lycV9lbmFibGUoc3RydWN0IGlycV9kYXRhICpkKQogewogCXZhcmlhbnRfaXJxX2VuYWJsZShkLT5pcnEpOwogCXh0ZW5zYV9pcnFfdW5tYXNrKGQtPmlycSk7CiB9CiAKLXN0YXRpYyB2b2lkIHh0ZW5zYV9pcnFfZGlzYWJsZShzdHJ1Y3QgaXJxX2NoaXAgKmQpCitzdGF0aWMgdm9pZCB4dGVuc2FfaXJxX2Rpc2FibGUoc3RydWN0IGlycV9kYXRhICpkKQogewogCXh0ZW5zYV9pcnFfbWFzayhkLT5pcnEpOwogCXZhcmlhbnRfaXJxX2Rpc2FibGUoZC0+aXJxKTsKIH0KIAotc3RhdGljIHZvaWQgeHRlbnNhX2lycV9hY2soc3RydWN0IGlycV9jaGlwICpkKQorc3RhdGljIHZvaWQgeHRlbnNhX2lycV9hY2soc3RydWN0IGlycV9kYXRhICpkKQogewogCXNldF9zcigxIDw8IGQtPmlycSwgSU5UQ0xFQVIpOwogfQogCi1zdGF0aWMgaW50IHh0ZW5zYV9pcnFfcmV0cmlnZ2VyKHN0cnVjdCBpcnFfY2hpcCAqZCkKK3N0YXRpYyBpbnQgeHRlbnNhX2lycV9yZXRyaWdnZXIoc3RydWN0IGlycV9kYXRhICpkKQogewogCXNldF9zciAoMSA8PCBkLT5pcnEsIElOVFNFVCk7CiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmMgYi9ibG9jay9ibGstY2dyb3VwLmMKaW5kZXggMmJlZjU3MC4uNDcxZmRjYyAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWNncm91cC5jCisrKyBiL2Jsb2NrL2Jsay1jZ3JvdXAuYwpAQCAtMTE0LDYgKzExNCwxMyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY2dyb3VwX3RvX2Jsa2lvX2Nncm91cCk7CiAKK3N0cnVjdCBibGtpb19jZ3JvdXAgKnRhc2tfYmxraW9fY2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXJldHVybiBjb250YWluZXJfb2YodGFza19zdWJzeXNfc3RhdGUodHNrLCBibGtpb19zdWJzeXNfaWQpLAorCQkJICAgIHN0cnVjdCBibGtpb19jZ3JvdXAsIGNzcyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0YXNrX2Jsa2lvX2Nncm91cCk7CisKIHN0YXRpYyBpbmxpbmUgdm9pZAogYmxraW9fdXBkYXRlX2dyb3VwX3dlaWdodChzdHJ1Y3QgYmxraW9fZ3JvdXAgKmJsa2csIHVuc2lnbmVkIGludCB3ZWlnaHQpCiB7CkBAIC04NjgsNyArODc1LDcgQEAKIH0KIAogLyoKLSAqIFNvbWUgcnVsZXMvdmFsdWVzIGluIGJsa2cgaGF2ZSBjaGFuZ2VkLiBQcm9wb2dhdGUgdGhvc2UgdG8gcmVzcGVjdGl2ZQorICogU29tZSBydWxlcy92YWx1ZXMgaW4gYmxrZyBoYXZlIGNoYW5nZWQuIFByb3BhZ2F0ZSB0aG9zZSB0byByZXNwZWN0aXZlCiAgKiBwb2xpY2llcy4KICAqLwogc3RhdGljIHZvaWQgYmxraW9fdXBkYXRlX2Jsa2dfcG9saWN5KHN0cnVjdCBibGtpb19jZ3JvdXAgKmJsa2NnLApAQCAtOTAzLDcgKzkxMCw3IEBACiB9CiAKIC8qCi0gKiBBIHBvbGljeSBub2RlIHJ1bGUgaGFzIGJlZW4gdXBkYXRlZC4gUHJvcG9nYXRlIHRoaXMgdXBkYXRlIHRvIGFsbCB0aGUKKyAqIEEgcG9saWN5IG5vZGUgcnVsZSBoYXMgYmVlbiB1cGRhdGVkLiBQcm9wYWdhdGUgdGhpcyB1cGRhdGUgdG8gYWxsIHRoZQogICogYmxvY2sgZ3JvdXBzIHdoaWNoIG1pZ2h0IGJlIGFmZmVjdGVkIGJ5IHRoaXMgdXBkYXRlLgogICovCiBzdGF0aWMgdm9pZCBibGtpb191cGRhdGVfcG9saWN5X25vZGVfYmxrZyhzdHJ1Y3QgYmxraW9fY2dyb3VwICpibGtjZywKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jZ3JvdXAuaCBiL2Jsb2NrL2Jsay1jZ3JvdXAuaAppbmRleCAxMDkxOWZhLi5jNzc0OTMwIDEwMDY0NAotLS0gYS9ibG9jay9ibGstY2dyb3VwLmgKKysrIGIvYmxvY2svYmxrLWNncm91cC5oCkBAIC0yOTEsNiArMjkxLDcgQEAKICNpZiBkZWZpbmVkKENPTkZJR19CTEtfQ0dST1VQKSB8fCBkZWZpbmVkKENPTkZJR19CTEtfQ0dST1VQX01PRFVMRSkKIGV4dGVybiBzdHJ1Y3QgYmxraW9fY2dyb3VwIGJsa2lvX3Jvb3RfY2dyb3VwOwogZXh0ZXJuIHN0cnVjdCBibGtpb19jZ3JvdXAgKmNncm91cF90b19ibGtpb19jZ3JvdXAoc3RydWN0IGNncm91cCAqY2dyb3VwKTsKK2V4dGVybiBzdHJ1Y3QgYmxraW9fY2dyb3VwICp0YXNrX2Jsa2lvX2Nncm91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CiBleHRlcm4gdm9pZCBibGtpb2NnX2FkZF9ibGtpb19ncm91cChzdHJ1Y3QgYmxraW9fY2dyb3VwICpibGtjZywKIAlzdHJ1Y3QgYmxraW9fZ3JvdXAgKmJsa2csIHZvaWQgKmtleSwgZGV2X3QgZGV2LAogCWVudW0gYmxraW9fcG9saWN5X2lkIHBsaWQpOwpAQCAtMzE0LDYgKzMxNSw4IEBACiBzdHJ1Y3QgY2dyb3VwOwogc3RhdGljIGlubGluZSBzdHJ1Y3QgYmxraW9fY2dyb3VwICoKIGNncm91cF90b19ibGtpb19jZ3JvdXAoc3RydWN0IGNncm91cCAqY2dyb3VwKSB7IHJldHVybiBOVUxMOyB9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBibGtpb19jZ3JvdXAgKgordGFza19ibGtpb19jZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgcmV0dXJuIE5VTEw7IH0KIAogc3RhdGljIGlubGluZSB2b2lkIGJsa2lvY2dfYWRkX2Jsa2lvX2dyb3VwKHN0cnVjdCBibGtpb19jZ3JvdXAgKmJsa2NnLAogCQlzdHJ1Y3QgYmxraW9fZ3JvdXAgKmJsa2csIHZvaWQgKmtleSwgZGV2X3QgZGV2LApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNvcmUuYyBiL2Jsb2NrL2Jsay1jb3JlLmMKaW5kZXggNzI1MDkxZC4uM2ZlMDBhMSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWNvcmUuYworKysgYi9ibG9jay9ibGstY29yZS5jCkBAIC0xOTgsMjYgKzE5OCwxMyBAQAogfQogRVhQT1JUX1NZTUJPTChibGtfZHVtcF9ycV9mbGFncyk7CiAKLS8qCi0gKiBNYWtlIHN1cmUgdGhhdCBwbHVncyB0aGF0IHdlcmUgcGVuZGluZyB3aGVuIHRoaXMgZnVuY3Rpb24gd2FzIGVudGVyZWQsCi0gKiBhcmUgbm93IGNvbXBsZXRlIGFuZCByZXF1ZXN0cyBwdXNoZWQgdG8gdGhlIHF1ZXVlLgotKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBxdWV1ZV9zeW5jX3BsdWdzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQotewotCS8qCi0JICogSWYgdGhlIGN1cnJlbnQgcHJvY2VzcyBpcyBwbHVnZ2VkIGFuZCBoYXMgYmFycmllcnMgc3VibWl0dGVkLAotCSAqIHdlIHdpbGwgbGl2ZWxvY2sgaWYgd2UgZG9uJ3QgdW5wbHVnIGZpcnN0LgotCSAqLwotCWJsa19mbHVzaF9wbHVnKGN1cnJlbnQpOwotfQotCiBzdGF0aWMgdm9pZCBibGtfZGVsYXlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnE7CiAKIAlxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByZXF1ZXN0X3F1ZXVlLCBkZWxheV93b3JrLndvcmspOwogCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7Ci0JX19ibGtfcnVuX3F1ZXVlKHEsIGZhbHNlKTsKKwlfX2Jsa19ydW5fcXVldWUocSk7CiAJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogfQogCkBAIC0yMzMsNyArMjIwLDggQEAKICAqLwogdm9pZCBibGtfZGVsYXlfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIGxvbmcgbXNlY3MpCiB7Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZxLT5kZWxheV93b3JrLCBtc2Vjc190b19qaWZmaWVzKG1zZWNzKSk7CisJcXVldWVfZGVsYXllZF93b3JrKGtibG9ja2Rfd29ya3F1ZXVlLCAmcS0+ZGVsYXlfd29yaywKKwkJCQltc2Vjc190b19qaWZmaWVzKG1zZWNzKSk7CiB9CiBFWFBPUlRfU1lNQk9MKGJsa19kZWxheV9xdWV1ZSk7CiAKQEAgLTI1MSw3ICsyMzksNyBAQAogCVdBUk5fT04oIWlycXNfZGlzYWJsZWQoKSk7CiAKIAlxdWV1ZV9mbGFnX2NsZWFyKFFVRVVFX0ZMQUdfU1RPUFBFRCwgcSk7Ci0JX19ibGtfcnVuX3F1ZXVlKHEsIGZhbHNlKTsKKwlfX2Jsa19ydW5fcXVldWUocSk7CiB9CiBFWFBPUlRfU1lNQk9MKGJsa19zdGFydF9xdWV1ZSk7CiAKQEAgLTI5OCwzOCArMjg2LDQ0IEBACiB7CiAJZGVsX3RpbWVyX3N5bmMoJnEtPnRpbWVvdXQpOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcS0+ZGVsYXlfd29yayk7Ci0JcXVldWVfc3luY19wbHVncyhxKTsKIH0KIEVYUE9SVF9TWU1CT0woYmxrX3N5bmNfcXVldWUpOwogCiAvKioKICAqIF9fYmxrX3J1bl9xdWV1ZSAtIHJ1biBhIHNpbmdsZSBkZXZpY2UgcXVldWUKICAqIEBxOglUaGUgcXVldWUgdG8gcnVuCi0gKiBAZm9yY2Vfa2Jsb2NrZDogRG9uJ3QgcnVuIEBxLT5yZXF1ZXN0X2ZuIGRpcmVjdGx5LiAgVXNlIGtibG9ja2QuCiAgKgogICogRGVzY3JpcHRpb246CiAgKiAgICBTZWUgQGJsa19ydW5fcXVldWUuIFRoaXMgdmFyaWFudCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBxdWV1ZSBsb2NrCiAgKiAgICBoZWxkIGFuZCBpbnRlcnJ1cHRzIGRpc2FibGVkLgotICoKICAqLwotdm9pZCBfX2Jsa19ydW5fcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGJvb2wgZm9yY2Vfa2Jsb2NrZCkKK3ZvaWQgX19ibGtfcnVuX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewogCWlmICh1bmxpa2VseShibGtfcXVldWVfc3RvcHBlZChxKSkpCiAJCXJldHVybjsKIAotCS8qCi0JICogT25seSByZWN1cnNlIG9uY2UgdG8gYXZvaWQgb3ZlcnJ1bm5pbmcgdGhlIHN0YWNrLCBsZXQgdGhlIHVucGx1ZwotCSAqIGhhbmRsaW5nIHJlaW52b2tlIHRoZSBoYW5kbGVyIHNob3J0bHkgaWYgd2UgYWxyZWFkeSBnb3QgdGhlcmUuCi0JICovCi0JaWYgKCFmb3JjZV9rYmxvY2tkICYmICFxdWV1ZV9mbGFnX3Rlc3RfYW5kX3NldChRVUVVRV9GTEFHX1JFRU5URVIsIHEpKSB7Ci0JCXEtPnJlcXVlc3RfZm4ocSk7Ci0JCXF1ZXVlX2ZsYWdfY2xlYXIoUVVFVUVfRkxBR19SRUVOVEVSLCBxKTsKLQl9IGVsc2UKLQkJcXVldWVfZGVsYXllZF93b3JrKGtibG9ja2Rfd29ya3F1ZXVlLCAmcS0+ZGVsYXlfd29yaywgMCk7CisJcS0+cmVxdWVzdF9mbihxKTsKIH0KIEVYUE9SVF9TWU1CT0woX19ibGtfcnVuX3F1ZXVlKTsKIAogLyoqCisgKiBibGtfcnVuX3F1ZXVlX2FzeW5jIC0gcnVuIGEgc2luZ2xlIGRldmljZSBxdWV1ZSBpbiB3b3JrcXVldWUgY29udGV4dAorICogQHE6CVRoZSBxdWV1ZSB0byBydW4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgIFRlbGxzIGtibG9ja2QgdG8gcGVyZm9ybSB0aGUgZXF1aXZhbGVudCBvZiBAYmxrX3J1bl9xdWV1ZSBvbiBiZWhhbGYKKyAqICAgIG9mIHVzLgorICovCit2b2lkIGJsa19ydW5fcXVldWVfYXN5bmMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCit7CisJaWYgKGxpa2VseSghYmxrX3F1ZXVlX3N0b3BwZWQocSkpKSB7CisJCV9fY2FuY2VsX2RlbGF5ZWRfd29yaygmcS0+ZGVsYXlfd29yayk7CisJCXF1ZXVlX2RlbGF5ZWRfd29yayhrYmxvY2tkX3dvcmtxdWV1ZSwgJnEtPmRlbGF5X3dvcmssIDApOworCX0KK30KK0VYUE9SVF9TWU1CT0woYmxrX3J1bl9xdWV1ZV9hc3luYyk7CisKKy8qKgogICogYmxrX3J1bl9xdWV1ZSAtIHJ1biBhIHNpbmdsZSBkZXZpY2UgcXVldWUKICAqIEBxOiBUaGUgcXVldWUgdG8gcnVuCiAgKgpAQCAtMzQyLDcgKzMzNiw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQlfX2Jsa19ydW5fcXVldWUocSwgZmFsc2UpOworCV9fYmxrX3J1bl9xdWV1ZShxKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woYmxrX3J1bl9xdWV1ZSk7CkBAIC05OTEsNyArOTg1LDcgQEAKIAkJYmxrX3F1ZXVlX2VuZF90YWcocSwgcnEpOwogCiAJYWRkX2FjY3RfcmVxdWVzdChxLCBycSwgd2hlcmUpOwotCV9fYmxrX3J1bl9xdWV1ZShxLCBmYWxzZSk7CisJX19ibGtfcnVuX3F1ZXVlKHEpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChibGtfaW5zZXJ0X3JlcXVlc3QpOwpAQCAtMTE4NCw3ICsxMTc4LDcgQEAKIAogLyoKICAqIEF0dGVtcHRzIHRvIG1lcmdlIHdpdGggdGhlIHBsdWdnZWQgbGlzdCBpbiB0aGUgY3VycmVudCBwcm9jZXNzLiBSZXR1cm5zCi0gKiB0cnVlIGlmIG1lcmdlIHdhcyBzdWNjZXNmdWwsIG90aGVyd2lzZSBmYWxzZS4KKyAqIHRydWUgaWYgbWVyZ2Ugd2FzIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSBmYWxzZS4KICAqLwogc3RhdGljIGJvb2wgYXR0ZW1wdF9wbHVnX21lcmdlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKIAkJCSAgICAgICBzdHJ1Y3QgYmlvICpiaW8pCkBAIC0xMzExLDcgKzEzMDUsMTUgQEAKIAogCXBsdWcgPSBjdXJyZW50LT5wbHVnOwogCWlmIChwbHVnKSB7Ci0JCWlmICghcGx1Zy0+c2hvdWxkX3NvcnQgJiYgIWxpc3RfZW1wdHkoJnBsdWctPmxpc3QpKSB7CisJCS8qCisJCSAqIElmIHRoaXMgaXMgdGhlIGZpcnN0IHJlcXVlc3QgYWRkZWQgYWZ0ZXIgYSBwbHVnLCBmaXJlCisJCSAqIG9mIGEgcGx1ZyB0cmFjZS4gSWYgb3RoZXJzIGhhdmUgYmVlbiBhZGRlZCBiZWZvcmUsIGNoZWNrCisJCSAqIGlmIHdlIGhhdmUgbXVsdGlwbGUgZGV2aWNlcyBpbiB0aGlzIHBsdWcuIElmIHNvLCBtYWtlIGEKKwkJICogbm90ZSB0byBzb3J0IHRoZSBsaXN0IGJlZm9yZSBkaXNwYXRjaC4KKwkJICovCisJCWlmIChsaXN0X2VtcHR5KCZwbHVnLT5saXN0KSkKKwkJCXRyYWNlX2Jsb2NrX3BsdWcocSk7CisJCWVsc2UgaWYgKCFwbHVnLT5zaG91bGRfc29ydCkgewogCQkJc3RydWN0IHJlcXVlc3QgKl9fcnE7CiAKIAkJCV9fcnEgPSBsaXN0X2VudHJ5X3JxKHBsdWctPmxpc3QucHJldik7CkBAIC0xMzI3LDcgKzEzMjksNyBAQAogCX0gZWxzZSB7CiAJCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7CiAJCWFkZF9hY2N0X3JlcXVlc3QocSwgcmVxLCB3aGVyZSk7Ci0JCV9fYmxrX3J1bl9xdWV1ZShxLCBmYWxzZSk7CisJCV9fYmxrX3J1bl9xdWV1ZShxKTsKIG91dF91bmxvY2s6CiAJCXNwaW5fdW5sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIAl9CkBAIC0yNjQ0LDYgKzI2NDYsNyBAQAogCiAJcGx1Zy0+bWFnaWMgPSBQTFVHX01BR0lDOwogCUlOSVRfTElTVF9IRUFEKCZwbHVnLT5saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcGx1Zy0+Y2JfbGlzdCk7CiAJcGx1Zy0+c2hvdWxkX3NvcnQgPSAwOwogCiAJLyoKQEAgLTI2NjgsMzMgKzI2NzEsOTMgQEAKIAlyZXR1cm4gIShycWEtPnEgPD0gcnFiLT5xKTsKIH0KIAotc3RhdGljIHZvaWQgZmx1c2hfcGx1Z19saXN0KHN0cnVjdCBibGtfcGx1ZyAqcGx1ZykKKy8qCisgKiBJZiAnZnJvbV9zY2hlZHVsZScgaXMgdHJ1ZSwgdGhlbiBwb3N0cG9uZSB0aGUgZGlzcGF0Y2ggb2YgcmVxdWVzdHMKKyAqIHVudGlsIGEgc2FmZSBrYmxvY2tkIGNvbnRleHQuIFdlIGR1ZSB0aGlzIHRvIGF2b2lkIGFjY2lkZW50YWwgYmlnCisgKiBhZGRpdGlvbmFsIHN0YWNrIHVzYWdlIGluIGRyaXZlciBkaXNwYXRjaCwgaW4gcGxhY2VzIHdoZXJlIHRoZSBvcmlnaW5hbGx5CisgKiBwbHVnZ2VyIGRpZCBub3QgaW50ZW5kIGl0LgorICovCitzdGF0aWMgdm9pZCBxdWV1ZV91bnBsdWdnZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIGludCBkZXB0aCwKKwkJCSAgICBib29sIGZyb21fc2NoZWR1bGUpCisJX19yZWxlYXNlcyhxLT5xdWV1ZV9sb2NrKQoreworCXRyYWNlX2Jsb2NrX3VucGx1ZyhxLCBkZXB0aCwgIWZyb21fc2NoZWR1bGUpOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgcHVudGluZyB0aGlzIHRvIGtibG9ja2QsIHRoZW4gd2UgY2FuIHNhZmVseSBkcm9wCisJICogdGhlIHF1ZXVlX2xvY2sgYmVmb3JlIHdha2luZyBrYmxvY2tkICh3aGljaCBuZWVkcyB0byB0YWtlCisJICogdGhpcyBsb2NrKS4KKwkgKi8KKwlpZiAoZnJvbV9zY2hlZHVsZSkgeworCQlzcGluX3VubG9jayhxLT5xdWV1ZV9sb2NrKTsKKwkJYmxrX3J1bl9xdWV1ZV9hc3luYyhxKTsKKwl9IGVsc2UgeworCQlfX2Jsa19ydW5fcXVldWUocSk7CisJCXNwaW5fdW5sb2NrKHEtPnF1ZXVlX2xvY2spOworCX0KKworfQorCitzdGF0aWMgdm9pZCBmbHVzaF9wbHVnX2NhbGxiYWNrcyhzdHJ1Y3QgYmxrX3BsdWcgKnBsdWcpCit7CisJTElTVF9IRUFEKGNhbGxiYWNrcyk7CisKKwlpZiAobGlzdF9lbXB0eSgmcGx1Zy0+Y2JfbGlzdCkpCisJCXJldHVybjsKKworCWxpc3Rfc3BsaWNlX2luaXQoJnBsdWctPmNiX2xpc3QsICZjYWxsYmFja3MpOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZjYWxsYmFja3MpKSB7CisJCXN0cnVjdCBibGtfcGx1Z19jYiAqY2IgPSBsaXN0X2ZpcnN0X2VudHJ5KCZjYWxsYmFja3MsCisJCQkJCQkJICBzdHJ1Y3QgYmxrX3BsdWdfY2IsCisJCQkJCQkJICBsaXN0KTsKKwkJbGlzdF9kZWwoJmNiLT5saXN0KTsKKwkJY2ItPmNhbGxiYWNrKGNiKTsKKwl9Cit9CisKK3ZvaWQgYmxrX2ZsdXNoX3BsdWdfbGlzdChzdHJ1Y3QgYmxrX3BsdWcgKnBsdWcsIGJvb2wgZnJvbV9zY2hlZHVsZSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCByZXF1ZXN0ICpycTsKKwlMSVNUX0hFQUQobGlzdCk7CisJdW5zaWduZWQgaW50IGRlcHRoOwogCiAJQlVHX09OKHBsdWctPm1hZ2ljICE9IFBMVUdfTUFHSUMpOwogCisJZmx1c2hfcGx1Z19jYWxsYmFja3MocGx1Zyk7CiAJaWYgKGxpc3RfZW1wdHkoJnBsdWctPmxpc3QpKQogCQlyZXR1cm47CiAKLQlpZiAocGx1Zy0+c2hvdWxkX3NvcnQpCi0JCWxpc3Rfc29ydChOVUxMLCAmcGx1Zy0+bGlzdCwgcGx1Z19ycV9jbXApOworCWxpc3Rfc3BsaWNlX2luaXQoJnBsdWctPmxpc3QsICZsaXN0KTsKKworCWlmIChwbHVnLT5zaG91bGRfc29ydCkgeworCQlsaXN0X3NvcnQoTlVMTCwgJmxpc3QsIHBsdWdfcnFfY21wKTsKKwkJcGx1Zy0+c2hvdWxkX3NvcnQgPSAwOworCX0KIAogCXEgPSBOVUxMOworCWRlcHRoID0gMDsKKworCS8qCisJICogU2F2ZSBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzIGhlcmUsIHRvIGF2b2lkIGRvaW5nIGl0IGZvciBldmVyeQorCSAqIHF1ZXVlIGxvY2sgd2UgaGF2ZSB0byB0YWtlLgorCSAqLwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJnBsdWctPmxpc3QpKSB7Ci0JCXJxID0gbGlzdF9lbnRyeV9ycShwbHVnLT5saXN0Lm5leHQpOworCXdoaWxlICghbGlzdF9lbXB0eSgmbGlzdCkpIHsKKwkJcnEgPSBsaXN0X2VudHJ5X3JxKGxpc3QubmV4dCk7CiAJCWxpc3RfZGVsX2luaXQoJnJxLT5xdWV1ZWxpc3QpOwogCQlCVUdfT04oIShycS0+Y21kX2ZsYWdzICYgUkVRX09OX1BMVUcpKTsKIAkJQlVHX09OKCFycS0+cSk7CiAJCWlmIChycS0+cSAhPSBxKSB7Ci0JCQlpZiAocSkgewotCQkJCV9fYmxrX3J1bl9xdWV1ZShxLCBmYWxzZSk7Ci0JCQkJc3Bpbl91bmxvY2socS0+cXVldWVfbG9jayk7Ci0JCQl9CisJCQkvKgorCQkJICogVGhpcyBkcm9wcyB0aGUgcXVldWUgbG9jaworCQkJICovCisJCQlpZiAocSkKKwkJCQlxdWV1ZV91bnBsdWdnZWQocSwgZGVwdGgsIGZyb21fc2NoZWR1bGUpOwogCQkJcSA9IHJxLT5xOworCQkJZGVwdGggPSAwOwogCQkJc3Bpbl9sb2NrKHEtPnF1ZXVlX2xvY2spOwogCQl9CiAJCXJxLT5jbWRfZmxhZ3MgJj0gflJFUV9PTl9QTFVHOwpAQCAtMjcwNiwzOSArMjc2OSwyOCBAQAogCQkJX19lbHZfYWRkX3JlcXVlc3QocSwgcnEsIEVMRVZBVE9SX0lOU0VSVF9GTFVTSCk7CiAJCWVsc2UKIAkJCV9fZWx2X2FkZF9yZXF1ZXN0KHEsIHJxLCBFTEVWQVRPUl9JTlNFUlRfU09SVF9NRVJHRSk7CisKKwkJZGVwdGgrKzsKIAl9CiAKLQlpZiAocSkgewotCQlfX2Jsa19ydW5fcXVldWUocSwgZmFsc2UpOwotCQlzcGluX3VubG9jayhxLT5xdWV1ZV9sb2NrKTsKLQl9CisJLyoKKwkgKiBUaGlzIGRyb3BzIHRoZSBxdWV1ZSBsb2NrCisJICovCisJaWYgKHEpCisJCXF1ZXVlX3VucGx1Z2dlZChxLCBkZXB0aCwgZnJvbV9zY2hlZHVsZSk7CiAKLQlCVUdfT04oIWxpc3RfZW1wdHkoJnBsdWctPmxpc3QpKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fYmxrX2ZpbmlzaF9wbHVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgYmxrX3BsdWcgKnBsdWcpCi17Ci0JZmx1c2hfcGx1Z19saXN0KHBsdWcpOwotCi0JaWYgKHBsdWcgPT0gdHNrLT5wbHVnKQotCQl0c2stPnBsdWcgPSBOVUxMOwotfQotCiB2b2lkIGJsa19maW5pc2hfcGx1ZyhzdHJ1Y3QgYmxrX3BsdWcgKnBsdWcpCiB7Ci0JaWYgKHBsdWcpCi0JCV9fYmxrX2ZpbmlzaF9wbHVnKGN1cnJlbnQsIHBsdWcpOworCWJsa19mbHVzaF9wbHVnX2xpc3QocGx1ZywgZmFsc2UpOworCisJaWYgKHBsdWcgPT0gY3VycmVudC0+cGx1ZykKKwkJY3VycmVudC0+cGx1ZyA9IE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKGJsa19maW5pc2hfcGx1Zyk7CiAKLXZvaWQgX19ibGtfZmx1c2hfcGx1ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IGJsa19wbHVnICpwbHVnKQotewotCV9fYmxrX2ZpbmlzaF9wbHVnKHRzaywgcGx1Zyk7Ci0JdHNrLT5wbHVnID0gcGx1ZzsKLX0KLUVYUE9SVF9TWU1CT0woX19ibGtfZmx1c2hfcGx1Zyk7Ci0KIGludCBfX2luaXQgYmxrX2Rldl9pbml0KHZvaWQpCiB7CiAJQlVJTERfQlVHX09OKF9fUkVRX05SX0JJVFMgPiA4ICoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1leGVjLmMgYi9ibG9jay9ibGstZXhlYy5jCmluZGV4IDc0ODJiN2YuLjgxZTMxODEgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1leGVjLmMKKysrIGIvYmxvY2svYmxrLWV4ZWMuYwpAQCAtNTUsNyArNTUsNyBAQAogCVdBUk5fT04oaXJxc19kaXNhYmxlZCgpKTsKIAlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCV9fZWx2X2FkZF9yZXF1ZXN0KHEsIHJxLCB3aGVyZSk7Ci0JX19ibGtfcnVuX3F1ZXVlKHEsIGZhbHNlKTsKKwlfX2Jsa19ydW5fcXVldWUocSk7CiAJLyogdGhlIHF1ZXVlIGlzIHN0b3BwZWQgc28gaXQgd29uJ3QgYmUgcGx1Z2dlZCt1bnBsdWdnZWQgKi8KIAlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX1BNX1JFU1VNRSkKIAkJcS0+cmVxdWVzdF9mbihxKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1mbHVzaC5jIGIvYmxvY2svYmxrLWZsdXNoLmMKaW5kZXggZWJhNGEyNy4uNmM5YjVlMTggMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1mbHVzaC5jCisrKyBiL2Jsb2NrL2Jsay1mbHVzaC5jCkBAIC0yMTgsNyArMjE4LDcgQEAKIAkgKiByZXF1ZXN0X2ZuIG1heSBjb25mdXNlIHRoZSBkcml2ZXIuICBBbHdheXMgdXNlIGtibG9ja2QuCiAJICovCiAJaWYgKHF1ZXVlZCkKLQkJX19ibGtfcnVuX3F1ZXVlKHEsIHRydWUpOworCQlibGtfcnVuX3F1ZXVlX2FzeW5jKHEpOwogfQogCiAvKioKQEAgLTI3NCw3ICsyNzQsNyBAQAogCSAqIHRoZSBjb21tZW50IGluIGZsdXNoX2VuZF9pbygpLgogCSAqLwogCWlmIChibGtfZmx1c2hfY29tcGxldGVfc2VxKHJxLCBSRVFfRlNFUV9EQVRBLCBlcnJvcikpCi0JCV9fYmxrX3J1bl9xdWV1ZShxLCB0cnVlKTsKKwkJYmxrX3J1bl9xdWV1ZV9hc3luYyhxKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9ibG9jay9ibGstc3lzZnMuYyBiL2Jsb2NrL2Jsay1zeXNmcy5jCmluZGV4IDI2MWM3NWMuLmJkMjM2MzEgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1zeXNmcy5jCisrKyBiL2Jsb2NrL2Jsay1zeXNmcy5jCkBAIC02NiwxNCArNjYsMTQgQEAKIAogCWlmIChybC0+Y291bnRbQkxLX1JXX1NZTkNdID49IHEtPm5yX3JlcXVlc3RzKSB7CiAJCWJsa19zZXRfcXVldWVfZnVsbChxLCBCTEtfUldfU1lOQyk7Ci0JfSBlbHNlIGlmIChybC0+Y291bnRbQkxLX1JXX1NZTkNdKzEgPD0gcS0+bnJfcmVxdWVzdHMpIHsKKwl9IGVsc2UgewogCQlibGtfY2xlYXJfcXVldWVfZnVsbChxLCBCTEtfUldfU1lOQyk7CiAJCXdha2VfdXAoJnJsLT53YWl0W0JMS19SV19TWU5DXSk7CiAJfQogCiAJaWYgKHJsLT5jb3VudFtCTEtfUldfQVNZTkNdID49IHEtPm5yX3JlcXVlc3RzKSB7CiAJCWJsa19zZXRfcXVldWVfZnVsbChxLCBCTEtfUldfQVNZTkMpOwotCX0gZWxzZSBpZiAocmwtPmNvdW50W0JMS19SV19BU1lOQ10rMSA8PSBxLT5ucl9yZXF1ZXN0cykgeworCX0gZWxzZSB7CiAJCWJsa19jbGVhcl9xdWV1ZV9mdWxsKHEsIEJMS19SV19BU1lOQyk7CiAJCXdha2VfdXAoJnJsLT53YWl0W0JMS19SV19BU1lOQ10pOwogCX0KQEAgLTQ5OCw3ICs0OTgsNiBAQAogewogCWludCByZXQ7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gZGlza190b19kZXYoZGlzayk7Ci0KIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRpc2stPnF1ZXVlOwogCiAJaWYgKFdBUk5fT04oIXEpKQpAQCAtNTA5LDggKzUwOCwxMCBAQAogCQlyZXR1cm4gcmV0OwogCiAJcmV0ID0ga29iamVjdF9hZGQoJnEtPmtvYmosIGtvYmplY3RfZ2V0KCZkZXYtPmtvYmopLCAiJXMiLCAicXVldWUiKTsKLQlpZiAocmV0IDwgMCkKKwlpZiAocmV0IDwgMCkgeworCQlibGtfdHJhY2VfcmVtb3ZlX3N5c2ZzKGRldik7CiAJCXJldHVybiByZXQ7CisJfQogCiAJa29iamVjdF91ZXZlbnQoJnEtPmtvYmosIEtPQkpfQUREKTsKIApAQCAtNTIxLDcgKzUyMiw3IEBACiAJaWYgKHJldCkgewogCQlrb2JqZWN0X3VldmVudCgmcS0+a29iaiwgS09CSl9SRU1PVkUpOwogCQlrb2JqZWN0X2RlbCgmcS0+a29iaik7Ci0JCWJsa190cmFjZV9yZW1vdmVfc3lzZnMoZGlza190b19kZXYoZGlzaykpOworCQlibGtfdHJhY2VfcmVtb3ZlX3N5c2ZzKGRldik7CiAJCWtvYmplY3RfcHV0KCZkZXYtPmtvYmopOwogCQlyZXR1cm4gcmV0OwogCX0KZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jIGIvYmxvY2svYmxrLXRocm90dGxlLmMKaW5kZXggNmM5OGNmZS4uMjUyYTgxYSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXRocm90dGxlLmMKKysrIGIvYmxvY2svYmxrLXRocm90dGxlLmMKQEAgLTE2MCw5ICsxNjAsOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHRocm90bF9ncnAgKiB0aHJvdGxfZmluZF9hbGxvY190ZyhzdHJ1Y3QgdGhyb3RsX2RhdGEgKnRkLAotCQkJc3RydWN0IGNncm91cCAqY2dyb3VwKQorCQkJc3RydWN0IGJsa2lvX2Nncm91cCAqYmxrY2cpCiB7Ci0Jc3RydWN0IGJsa2lvX2Nncm91cCAqYmxrY2cgPSBjZ3JvdXBfdG9fYmxraW9fY2dyb3VwKGNncm91cCk7CiAJc3RydWN0IHRocm90bF9ncnAgKnRnID0gTlVMTDsKIAl2b2lkICprZXkgPSB0ZDsKIAlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpID0gJnRkLT5xdWV1ZS0+YmFja2luZ19kZXZfaW5mbzsKQEAgLTIyOSwxMiArMjI4LDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgdGhyb3RsX2dycCAqIHRocm90bF9nZXRfdGcoc3RydWN0IHRocm90bF9kYXRhICp0ZCkKIHsKLQlzdHJ1Y3QgY2dyb3VwICpjZ3JvdXA7CiAJc3RydWN0IHRocm90bF9ncnAgKnRnID0gTlVMTDsKKwlzdHJ1Y3QgYmxraW9fY2dyb3VwICpibGtjZzsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQljZ3JvdXAgPSB0YXNrX2Nncm91cChjdXJyZW50LCBibGtpb19zdWJzeXNfaWQpOwotCXRnID0gdGhyb3RsX2ZpbmRfYWxsb2NfdGcodGQsIGNncm91cCk7CisJYmxrY2cgPSB0YXNrX2Jsa2lvX2Nncm91cChjdXJyZW50KTsKKwl0ZyA9IHRocm90bF9maW5kX2FsbG9jX3RnKHRkLCBibGtjZyk7CiAJaWYgKCF0ZykKIAkJdGcgPSAmdGQtPnJvb3RfdGc7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC05MTYsNyArOTE1LDcgQEAKIC8qCiAgKiBGb3IgYWxsIHVwZGF0ZSBmdW5jdGlvbnMsIGtleSBzaG91bGQgYmUgYSB2YWxpZCBwb2ludGVyIGJlY2F1c2UgdGhlc2UKICAqIHVwZGF0ZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCB1bmRlciBibGtjZ19sb2NrLCB0aGF0IG1lYW5zLCBibGtnIGlzCi0gKiB2YWxpZCBhbmQgaW4gdHVybiBrZXkgaXMgdmFsaWQuIHF1ZXVlIGV4aXQgcGF0aCBjYW4gbm90IHJhY2UgYmVjdWFzZQorICogdmFsaWQgYW5kIGluIHR1cm4ga2V5IGlzIHZhbGlkLiBxdWV1ZSBleGl0IHBhdGggY2FuIG5vdCByYWNlIGJlY2F1c2UKICAqIG9mIGJsa2NnX2xvY2sKICAqCiAgKiBDYW4gbm90IHRha2UgcXVldWUgbG9jayBpbiB1cGRhdGUgZnVuY3Rpb25zIGFzIHF1ZXVlIGxvY2sgdW5kZXIgYmxrY2dfbG9jawpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLmggYi9ibG9jay9ibGsuaAppbmRleCBjOGRiMzcxLi42MTI2MzQ2IDEwMDY0NAotLS0gYS9ibG9jay9ibGsuaAorKysgYi9ibG9jay9ibGsuaApAQCAtMzIsNyArMzIsNyBAQAogCiAvKgogICogRUggdGltZXIgYW5kIElPIGNvbXBsZXRpb24gd2lsbCBib3RoIGF0dGVtcHQgdG8gJ2dyYWInIHRoZSByZXF1ZXN0LCBtYWtlCi0gKiBzdXJlIHRoYXQgb25seSBvbmUgb2YgdGhlbSBzdWNlZWRzCisgKiBzdXJlIHRoYXQgb25seSBvbmUgb2YgdGhlbSBzdWNjZWVkcwogICovCiBzdGF0aWMgaW5saW5lIGludCBibGtfbWFya19ycV9jb21wbGV0ZShzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CmRpZmYgLS1naXQgYS9ibG9jay9jZnEtaW9zY2hlZC5jIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwppbmRleCA3Nzg1MTY5Li5hYjdhOWU2IDEwMDY0NAotLS0gYS9ibG9jay9jZnEtaW9zY2hlZC5jCisrKyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKQEAgLTg4OCw3ICs4ODgsNyBAQAogCS8qCiAJICogQ3VycmVudGx5IHB1dCB0aGUgZ3JvdXAgYXQgdGhlIGVuZC4gTGF0ZXIgaW1wbGVtZW50IHNvbWV0aGluZwogCSAqIHNvIHRoYXQgZ3JvdXBzIGdldCBsZXNzZXIgdnRpbWUgYmFzZWQgb24gdGhlaXIgd2VpZ2h0cywgc28gdGhhdAotCSAqIGlmIGdyb3VwIGRvZXMgbm90IGxvb3NlIGFsbCBpZiBpdCB3YXMgbm90IGNvbnRpbm91c2x5IGJhY2tsb2dnZWQuCisJICogaWYgZ3JvdXAgZG9lcyBub3QgbG9vc2UgYWxsIGlmIGl0IHdhcyBub3QgY29udGludW91c2x5IGJhY2tsb2dnZWQuCiAJICovCiAJbiA9IHJiX2xhc3QoJnN0LT5yYik7CiAJaWYgKG4pIHsKQEAgLTEwMTQsMTAgKzEwMTQsOSBAQAogCWNmcWctPm5lZWRzX3VwZGF0ZSA9IHRydWU7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY2ZxX2dyb3VwICoKLWNmcV9maW5kX2FsbG9jX2NmcWcoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2dyb3VwICpjZ3JvdXAsIGludCBjcmVhdGUpCitzdGF0aWMgc3RydWN0IGNmcV9ncm91cCAqIGNmcV9maW5kX2FsbG9jX2NmcWcoc3RydWN0IGNmcV9kYXRhICpjZnFkLAorCQlzdHJ1Y3QgYmxraW9fY2dyb3VwICpibGtjZywgaW50IGNyZWF0ZSkKIHsKLQlzdHJ1Y3QgYmxraW9fY2dyb3VwICpibGtjZyA9IGNncm91cF90b19ibGtpb19jZ3JvdXAoY2dyb3VwKTsKIAlzdHJ1Y3QgY2ZxX2dyb3VwICpjZnFnID0gTlVMTDsKIAl2b2lkICprZXkgPSBjZnFkOwogCWludCBpLCBqOwpAQCAtMTA3OSwxMiArMTA3OCwxMiBAQAogICovCiBzdGF0aWMgc3RydWN0IGNmcV9ncm91cCAqY2ZxX2dldF9jZnFnKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgaW50IGNyZWF0ZSkKIHsKLQlzdHJ1Y3QgY2dyb3VwICpjZ3JvdXA7CisJc3RydWN0IGJsa2lvX2Nncm91cCAqYmxrY2c7CiAJc3RydWN0IGNmcV9ncm91cCAqY2ZxZyA9IE5VTEw7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JY2dyb3VwID0gdGFza19jZ3JvdXAoY3VycmVudCwgYmxraW9fc3Vic3lzX2lkKTsKLQljZnFnID0gY2ZxX2ZpbmRfYWxsb2NfY2ZxZyhjZnFkLCBjZ3JvdXAsIGNyZWF0ZSk7CisJYmxrY2cgPSB0YXNrX2Jsa2lvX2Nncm91cChjdXJyZW50KTsKKwljZnFnID0gY2ZxX2ZpbmRfYWxsb2NfY2ZxZyhjZnFkLCBibGtjZywgY3JlYXRlKTsKIAlpZiAoIWNmcWcgJiYgY3JlYXRlKQogCQljZnFnID0gJmNmcWQtPnJvb3RfZ3JvdXA7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC0yNTgyLDI4ICsyNTgxLDIwIEBACiB9CiAKIC8qCi0gKiBNdXN0IGFsd2F5cyBiZSBjYWxsZWQgd2l0aCB0aGUgcmN1X3JlYWRfbG9jaygpIGhlbGQKLSAqLwotc3RhdGljIHZvaWQKLV9fY2FsbF9mb3JfZWFjaF9jaWMoc3RydWN0IGlvX2NvbnRleHQgKmlvYywKLQkJICAgIHZvaWQgKCpmdW5jKShzdHJ1Y3QgaW9fY29udGV4dCAqLCBzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKikpCi17Ci0Jc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWM7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm47Ci0KLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2ljLCBuLCAmaW9jLT5jaWNfbGlzdCwgY2ljX2xpc3QpCi0JCWZ1bmMoaW9jLCBjaWMpOwotfQotCi0vKgogICogQ2FsbCBmdW5jIGZvciBlYWNoIGNpYyBhdHRhY2hlZCB0byB0aGlzIGlvYy4KICAqLwogc3RhdGljIHZvaWQKIGNhbGxfZm9yX2VhY2hfY2ljKHN0cnVjdCBpb19jb250ZXh0ICppb2MsCiAJCSAgdm9pZCAoKmZ1bmMpKHN0cnVjdCBpb19jb250ZXh0ICosIHN0cnVjdCBjZnFfaW9fY29udGV4dCAqKSkKIHsKKwlzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpYzsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKwogCXJjdV9yZWFkX2xvY2soKTsKLQlfX2NhbGxfZm9yX2VhY2hfY2ljKGlvYywgZnVuYyk7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2ljLCBuLCAmaW9jLT5jaWNfbGlzdCwgY2ljX2xpc3QpCisJCWZ1bmMoaW9jLCBjaWMpOworCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKQEAgLTI2NjQsNyArMjY1NSw3IEBACiAJICogc2hvdWxkIGJlIG9rIHRvIGl0ZXJhdGUgb3ZlciB0aGUga25vd24gbGlzdCwgd2Ugd2lsbCBzZWUgYWxsIGNpYydzCiAJICogc2luY2Ugbm8gbmV3IG9uZXMgYXJlIGFkZGVkLgogCSAqLwotCV9fY2FsbF9mb3JfZWFjaF9jaWMoaW9jLCBjaWNfZnJlZV9mdW5jKTsKKwljYWxsX2Zvcl9lYWNoX2NpYyhpb2MsIGNpY19mcmVlX2Z1bmMpOwogfQogCiBzdGF0aWMgdm9pZCBjZnFfcHV0X2Nvb3BlcmF0b3Ioc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKQEAgLTMzNjgsNyArMzM1OSw3IEBACiAJCQkgICAgY2ZxZC0+YnVzeV9xdWV1ZXMgPiAxKSB7CiAJCQkJY2ZxX2RlbF90aW1lcihjZnFkLCBjZnFxKTsKIAkJCQljZnFfY2xlYXJfY2ZxcV93YWl0X3JlcXVlc3QoY2ZxcSk7Ci0JCQkJX19ibGtfcnVuX3F1ZXVlKGNmcWQtPnF1ZXVlLCBmYWxzZSk7CisJCQkJX19ibGtfcnVuX3F1ZXVlKGNmcWQtPnF1ZXVlKTsKIAkJCX0gZWxzZSB7CiAJCQkJY2ZxX2Jsa2lvY2dfdXBkYXRlX2lkbGVfdGltZV9zdGF0cygKIAkJCQkJCSZjZnFxLT5jZnFnLT5ibGtnKTsKQEAgLTMzODMsNyArMzM3NCw3IEBACiAJCSAqIHRoaXMgbmV3IHF1ZXVlIGlzIFJUIGFuZCB0aGUgY3VycmVudCBvbmUgaXMgQkUKIAkJICovCiAJCWNmcV9wcmVlbXB0X3F1ZXVlKGNmcWQsIGNmcXEpOwotCQlfX2Jsa19ydW5fcXVldWUoY2ZxZC0+cXVldWUsIGZhbHNlKTsKKwkJX19ibGtfcnVuX3F1ZXVlKGNmcWQtPnF1ZXVlKTsKIAl9CiB9CiAKQEAgLTM3NDMsNyArMzczNCw3IEBACiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBjZnFkLT5xdWV1ZTsKIAogCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7Ci0JX19ibGtfcnVuX3F1ZXVlKGNmcWQtPnF1ZXVlLCBmYWxzZSk7CisJX19ibGtfcnVuX3F1ZXVlKGNmcWQtPnF1ZXVlKTsKIAlzcGluX3VubG9ja19pcnEocS0+cXVldWVfbG9jayk7CiB9CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2VsZXZhdG9yLmMgYi9ibG9jay9lbGV2YXRvci5jCmluZGV4IDBjZGI0ZTcuLjQ1Y2ExZTMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2VsZXZhdG9yLmMKKysrIGIvYmxvY2svZWxldmF0b3IuYwpAQCAtNjQyLDcgKzY0Miw3IEBACiAJICovCiAJZWx2X2RyYWluX2VsZXZhdG9yKHEpOwogCXdoaWxlIChxLT5ycS5lbHZwcml2KSB7Ci0JCV9fYmxrX3J1bl9xdWV1ZShxLCBmYWxzZSk7CisJCV9fYmxrX3J1bl9xdWV1ZShxKTsKIAkJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCQltc2xlZXAoMTApOwogCQlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwpAQCAtNjcxLDcgKzY3MSw4IEBACiAJCQlxLT5ib3VuZGFyeV9ycSA9IHJxOwogCQl9CiAJfSBlbHNlIGlmICghKHJxLT5jbWRfZmxhZ3MgJiBSRVFfRUxWUFJJVikgJiYKLQkJICAgIHdoZXJlID09IEVMRVZBVE9SX0lOU0VSVF9TT1JUKQorCQkgICAgKHdoZXJlID09IEVMRVZBVE9SX0lOU0VSVF9TT1JUIHx8CisJCSAgICAgd2hlcmUgPT0gRUxFVkFUT1JfSU5TRVJUX1NPUlRfTUVSR0UpKQogCQl3aGVyZSA9IEVMRVZBVE9SX0lOU0VSVF9CQUNLOwogCiAJc3dpdGNoICh3aGVyZSkgewpAQCAtNjk1LDcgKzY5Niw3IEBACiAJCSAqICAgd2l0aCBhbnl0aGluZy4gIFRoZXJlJ3Mgbm8gcG9pbnQgaW4gZGVsYXlpbmcgcXVldWUKIAkJICogICBwcm9jZXNzaW5nLgogCQkgKi8KLQkJX19ibGtfcnVuX3F1ZXVlKHEsIGZhbHNlKTsKKwkJX19ibGtfcnVuX3F1ZXVlKHEpOwogCQlicmVhazsKIAogCWNhc2UgRUxFVkFUT1JfSU5TRVJUX1NPUlRfTUVSR0U6CmRpZmYgLS1naXQgYS9ibG9jay9nZW5oZC5jIGIvYmxvY2svZ2VuaGQuYwppbmRleCBjOTFhMmRhLi4yZGQ5ODg3IDEwMDY0NAotLS0gYS9ibG9jay9nZW5oZC5jCisrKyBiL2Jsb2NrL2dlbmhkLmMKQEAgLTczOSw3ICs3MzksNyBAQAogCiAJCS8qCiAJCSAqIERvbid0IHNob3cgZW1wdHkgZGV2aWNlcyBvciB0aGluZ3MgdGhhdCBoYXZlIGJlZW4KLQkJICogc3VycHJlc3NlZAorCQkgKiBzdXBwcmVzc2VkCiAJCSAqLwogCQlpZiAoZ2V0X2NhcGFjaXR5KGRpc2spID09IDAgfHwKIAkJICAgIChkaXNrLT5mbGFncyAmIEdFTkhEX0ZMX1NVUFBSRVNTX1BBUlRJVElPTl9JTkZPKSkKQEAgLTE1ODgsOSArMTU4OCwxMyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxKCZldi0+bG9jayk7CiAKLQkvKiB0ZWxsIHVzZXJsYW5kIGFib3V0IG5ldyBldmVudHMgKi8KKwkvKgorCSAqIFRlbGwgdXNlcmxhbmQgYWJvdXQgbmV3IGV2ZW50cy4gIE9ubHkgdGhlIGV2ZW50cyBsaXN0ZWQgaW4KKwkgKiBAZGlzay0+ZXZlbnRzIGFyZSByZXBvcnRlZC4gIFVubGlzdGVkIGV2ZW50cyBhcmUgcHJvY2Vzc2VkIHRoZQorCSAqIHNhbWUgaW50ZXJuYWxseSBidXQgbmV2ZXIgZ2V0IHJlcG9ydGVkIHRvIHVzZXJsYW5kLgorCSAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRpc2tfdWV2ZW50cyk7IGkrKykKLQkJaWYgKGV2ZW50cyAmICgxIDw8IGkpKQorCQlpZiAoZXZlbnRzICYgZGlzay0+ZXZlbnRzICYgKDEgPDwgaSkpCiAJCQllbnZwW25yX2V2ZW50cysrXSA9IGRpc2tfdWV2ZW50c1tpXTsKIAogCWlmIChucl9ldmVudHMpCmRpZmYgLS1naXQgYS9jcnlwdG8vYW5zaV9jcHJuZy5jIGIvY3J5cHRvL2Fuc2lfY3BybmcuYwppbmRleCAyYmMzMzIxLi5mZmEwMjQ1IDEwMDY0NAotLS0gYS9jcnlwdG8vYW5zaV9jcHJuZy5jCisrKyBiL2NyeXB0by9hbnNpX2Nwcm5nLmMKQEAgLTgzLDcgKzgzLDcgQEAKIH0KIC8qCiAgKiBSZXR1cm5zIERFRkFVTFRfQkxLX1NaIGJ5dGVzIG9mIHJhbmRvbSBkYXRhIHBlciBjYWxsCi0gKiByZXR1cm5zIDAgaWYgZ2VuZXJhdGlvbiBzdWNjZWRlZCwgPDAgaWYgc29tZXRoaW5nIHdlbnQgd3JvbmcKKyAqIHJldHVybnMgMCBpZiBnZW5lcmF0aW9uIHN1Y2NlZWRlZCwgPDAgaWYgc29tZXRoaW5nIHdlbnQgd3JvbmcKICAqLwogc3RhdGljIGludCBfZ2V0X21vcmVfcHJuZ19ieXRlcyhzdHJ1Y3QgcHJuZ19jb250ZXh0ICpjdHgsIGludCBjb250X3Rlc3QpCiB7CmRpZmYgLS1naXQgYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfeG9yLmMgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfeG9yLmMKaW5kZXggMDc5YWU4Yy4uYmMyODMzNyAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3hvci5jCisrKyBiL2NyeXB0by9hc3luY190eC9hc3luY194b3IuYwpAQCAtOTQsNyArOTQsNyBAQAogCQlpZiAodW5saWtlbHkoIXR4KSkKIAkJCWFzeW5jX3R4X3F1aWVzY2UoJnN1Ym1pdC0+ZGVwZW5kX3R4KTsKIAotCQkvKiBzcGluIHdhaXQgZm9yIHRoZSBwcmVjZWVkaW5nIHRyYW5zYWN0aW9ucyB0byBjb21wbGV0ZSAqLworCQkvKiBzcGluIHdhaXQgZm9yIHRoZSBwcmVjZWRpbmcgdHJhbnNhY3Rpb25zIHRvIGNvbXBsZXRlICovCiAJCXdoaWxlICh1bmxpa2VseSghdHgpKSB7CiAJCQlkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhjaGFuKTsKIAkJCXR4ID0gZG1hLT5kZXZpY2VfcHJlcF9kbWFfeG9yKGNoYW4sIGRtYV9kZXN0LApkaWZmIC0tZ2l0IGEvY3J5cHRvL2dmMTI4bXVsLmMgYi9jcnlwdG8vZ2YxMjhtdWwuYwppbmRleCBhOTBkMjYwLi5kZjM1ZTRjIDEwMDY0NAotLS0gYS9jcnlwdG8vZ2YxMjhtdWwuYworKysgYi9jcnlwdG8vZ2YxMjhtdWwuYwpAQCAtODksNyArODksNyBAQAogfQogCiAvKglHaXZlbiB0aGUgdmFsdWUgaSBpbiAwLi4yNTUgYXMgdGhlIGJ5dGUgb3ZlcmZsb3cgd2hlbiBhIGZpZWxkIGVsZW1lbnQKLSAgICBpbiBHSEFTSCBpcyBtdWx0aXBsZWQgYnkgeF44LCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSB2YWx1ZXMgdGhhdAorICAgIGluIEdIQVNIIGlzIG11bHRpcGxpZWQgYnkgeF44LCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSB2YWx1ZXMgdGhhdAogICAgIGFyZSBnZW5lcmF0ZWQgaW4gdGhlIGxvIDE2LWJpdCB3b3JkIG9mIHRoZSBmaWVsZCB2YWx1ZSBieSBhcHBseWluZyB0aGUKICAgICBtb2R1bGFyIHBvbHlub21pYWwuIFRoZSB2YWx1ZXMgbG9fYnl0ZSBhbmQgaGlfYnl0ZSBhcmUgcmV0dXJuZWQgdmlhIHRoZQogICAgIG1hY3JvIHhwX2Z1bihsb19ieXRlLCBoaV9ieXRlKSBzbyB0aGF0IHRoZSB2YWx1ZXMgY2FuIGJlIGFzc2VtYmxlZCBpbnRvCmRpZmYgLS1naXQgYS9jcnlwdG8vdm1hYy5jIGIvY3J5cHRvL3ZtYWMuYwppbmRleCAwOTk5Mjc0Li5mMzVmZjhhIDEwMDY0NAotLS0gYS9jcnlwdG8vdm1hYy5jCisrKyBiL2NyeXB0by92bWFjLmMKQEAgLTk1LDcgKzk1LDcgQEAKIAogLyoKICAqIEZvciBoaWdoZXN0IHBlcmZvcm1hbmNlIHRoZSBMMSBOSCBhbmQgTDIgcG9seW5vbWlhbCBoYXNoZXMgc2hvdWxkIGJlCi0gKiBjYXJlZnVsbHkgaW1wbGVtZW50ZWQgdG8gdGFrZSBhZHZhbnRhZ2Ugb2Ygb25lJ3MgdGFyZ2V0IGFyY2hpdGVjaHR1cmUuCisgKiBjYXJlZnVsbHkgaW1wbGVtZW50ZWQgdG8gdGFrZSBhZHZhbnRhZ2Ugb2Ygb25lJ3MgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KICAqIEhlcmUgdGhlc2UgdHdvIGhhc2ggZnVuY3Rpb25zIGFyZSBkZWZpbmVkIG11bHRpcGxlIHRpbWU7IG9uY2UgZm9yCiAgKiA2NC1iaXQgYXJjaGl0ZWN0dXJlcywgb25jZSBmb3IgMzItYml0IFNTRTIgYXJjaGl0ZWN0dXJlcywgYW5kIG9uY2UKICAqIGZvciB0aGUgcmVzdCAoMzItYml0KSBhcmNoaXRlY3R1cmVzLgpkaWZmIC0tZ2l0IGEvY3J5cHRvL3h0cy5jIGIvY3J5cHRvL3h0cy5jCmluZGV4IDU1NWVjYWEuLjg1MTcwNTQgMTAwNjQ0Ci0tLSBhL2NyeXB0by94dHMuYworKysgYi9jcnlwdG8veHRzLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogd2UgbmVlZCB0d28gY2lwaGVyIGluc3RhbmNlczogb25lIHRvIGNvbXB1dGUgdGhlIGluaXRhbCAndHdlYWsnCisJLyogd2UgbmVlZCB0d28gY2lwaGVyIGluc3RhbmNlczogb25lIHRvIGNvbXB1dGUgdGhlIGluaXRpYWwgJ3R3ZWFrJwogCSAqIGJ5IGVuY3J5cHRpbmcgdGhlIElWICh1c3VhbGx5IHRoZSAncGxhaW4nIGl2KSBhbmQgdGhlIG90aGVyCiAJICogb25lIHRvIGVuY3J5cHQgYW5kIGRlY3J5cHQgdGhlIGRhdGEgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FwZWkvS2NvbmZpZyBiL2RyaXZlcnMvYWNwaS9hcGVpL0tjb25maWcKaW5kZXggNjZhMDNjYS4uZjczOWE3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FwZWkvS2NvbmZpZworKysgYi9kcml2ZXJzL2FjcGkvYXBlaS9LY29uZmlnCkBAIC0xLDUgKzEsNiBAQAogY29uZmlnIEFDUElfQVBFSQogCWJvb2wgIkFDUEkgUGxhdGZvcm0gRXJyb3IgSW50ZXJmYWNlIChBUEVJKSIKKwlzZWxlY3QgTUlTQ19GSUxFU1lTVEVNUwogCXNlbGVjdCBQU1RPUkUKIAlkZXBlbmRzIG9uIFg4NgogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hcGVpL2Vyc3QuYyBiL2RyaXZlcnMvYWNwaS9hcGVpL2Vyc3QuYwppbmRleCBkNmNiMGZmLi5lNmNlZjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYXBlaS9lcnN0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FwZWkvZXJzdC5jCkBAIC05MjksMTMgKzkyOSwxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc2l6ZV90IGVyc3RfcmVhZGVyKHU2NCAqaWQsIGVudW0gcHN0b3JlX3R5cGVfaWQgKnR5cGUsCitzdGF0aWMgaW50IGVyc3Rfb3Blbl9wc3RvcmUoc3RydWN0IHBzdG9yZV9pbmZvICpwc2kpOworc3RhdGljIGludCBlcnN0X2Nsb3NlX3BzdG9yZShzdHJ1Y3QgcHN0b3JlX2luZm8gKnBzaSk7CitzdGF0aWMgc3NpemVfdCBlcnN0X3JlYWRlcih1NjQgKmlkLCBlbnVtIHBzdG9yZV90eXBlX2lkICp0eXBlLAogCQkgICAgICAgc3RydWN0IHRpbWVzcGVjICp0aW1lKTsKIHN0YXRpYyB1NjQgZXJzdF93cml0ZXIoZW51bSBwc3RvcmVfdHlwZV9pZCB0eXBlLCBzaXplX3Qgc2l6ZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcHN0b3JlX2luZm8gZXJzdF9pbmZvID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiZXJzdCIsCisJLm9wZW4JCT0gZXJzdF9vcGVuX3BzdG9yZSwKKwkuY2xvc2UJCT0gZXJzdF9jbG9zZV9wc3RvcmUsCiAJLnJlYWQJCT0gZXJzdF9yZWFkZXIsCiAJLndyaXRlCQk9IGVyc3Rfd3JpdGVyLAogCS5lcmFzZQkJPSBlcnN0X2NsZWFyCkBAIC05NTcsMTIgKzk2MSwzMiBAQAogCWNoYXIgZGF0YVtdOwogfSBfX3BhY2tlZDsKIAotc3RhdGljIHNpemVfdCBlcnN0X3JlYWRlcih1NjQgKmlkLCBlbnVtIHBzdG9yZV90eXBlX2lkICp0eXBlLAorc3RhdGljIGludCByZWFkZXJfcG9zOworCitzdGF0aWMgaW50IGVyc3Rfb3Blbl9wc3RvcmUoc3RydWN0IHBzdG9yZV9pbmZvICpwc2kpCit7CisJaW50IHJjOworCisJaWYgKGVyc3RfZGlzYWJsZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyYyA9IGVyc3RfZ2V0X3JlY29yZF9pZF9iZWdpbigmcmVhZGVyX3Bvcyk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgZXJzdF9jbG9zZV9wc3RvcmUoc3RydWN0IHBzdG9yZV9pbmZvICpwc2kpCit7CisJZXJzdF9nZXRfcmVjb3JkX2lkX2VuZCgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGVyc3RfcmVhZGVyKHU2NCAqaWQsIGVudW0gcHN0b3JlX3R5cGVfaWQgKnR5cGUsCiAJCSAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKnRpbWUpCiB7CiAJaW50IHJjOwotCXNzaXplX3QgbGVuOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3NpemVfdCBsZW4gPSAwOwogCXU2NCByZWNvcmRfaWQ7CiAJc3RydWN0IGNwZXJfcHN0b3JlX3JlY29yZCAqcmNkID0gKHN0cnVjdCBjcGVyX3BzdG9yZV9yZWNvcmQgKikKIAkJCQkJKGVyc3RfaW5mby5idWYgLSBzaXplb2YoKnJjZCkpOwpAQCAtOTcwLDI0ICs5OTQsMjggQEAKIAlpZiAoZXJzdF9kaXNhYmxlKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZXJzdF9sb2NrLCBmbGFncyk7CiBza2lwOgotCXJjID0gX19lcnN0X2dldF9uZXh0X3JlY29yZF9pZCgmcmVjb3JkX2lkKTsKLQlpZiAocmMpIHsKLQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVyc3RfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gcmM7Ci0JfQorCXJjID0gZXJzdF9nZXRfcmVjb3JkX2lkX25leHQoJnJlYWRlcl9wb3MsICZyZWNvcmRfaWQpOworCWlmIChyYykKKwkJZ290byBvdXQ7CisKIAkvKiBubyBtb3JlIHJlY29yZCAqLwogCWlmIChyZWNvcmRfaWQgPT0gQVBFSV9FUlNUX0lOVkFMSURfUkVDT1JEX0lEKSB7Ci0JCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcnN0X2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIDA7CisJCXJjID0gLTE7CisJCWdvdG8gb3V0OwogCX0KIAotCWxlbiA9IF9fZXJzdF9yZWFkKHJlY29yZF9pZCwgJnJjZC0+aGRyLCBzaXplb2YoKnJjZCkgKwotCQkJICBlcnN0X2VyYW5nZS5zaXplKTsKKwlsZW4gPSBlcnN0X3JlYWQocmVjb3JkX2lkLCAmcmNkLT5oZHIsIHNpemVvZigqcmNkKSArCisJCQllcnN0X2luZm8uYnVmc2l6ZSk7CisJLyogVGhlIHJlY29yZCBtYXkgYmUgY2xlYXJlZCBieSBvdGhlcnMsIHRyeSByZWFkIG5leHQgcmVjb3JkICovCisJaWYgKGxlbiA9PSAtRU5PRU5UKQorCQlnb3RvIHNraXA7CisJZWxzZSBpZiAobGVuIDwgMCkgeworCQlyYyA9IC0xOworCQlnb3RvIG91dDsKKwl9CiAJaWYgKHV1aWRfbGVfY21wKHJjZC0+aGRyLmNyZWF0b3JfaWQsIENQRVJfQ1JFQVRPUl9QU1RPUkUpICE9IDApCiAJCWdvdG8gc2tpcDsKLQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXJzdF9sb2NrLCBmbGFncyk7CiAKIAkqaWQgPSByZWNvcmRfaWQ7CiAJaWYgKHV1aWRfbGVfY21wKHJjZC0+c2VjX2hkci5zZWN0aW9uX3R5cGUsCkBAIC0xMDA1LDcgKzEwMzMsOCBAQAogCQl0aW1lLT50dl9zZWMgPSAwOwogCXRpbWUtPnR2X25zZWMgPSAwOwogCi0JcmV0dXJuIGxlbiAtIHNpemVvZigqcmNkKTsKK291dDoKKwlyZXR1cm4gKHJjIDwgMCkgPyByYyA6IChsZW4gLSBzaXplb2YoKnJjZCkpOwogfQogCiBzdGF0aWMgdTY0IGVyc3Rfd3JpdGVyKGVudW0gcHN0b3JlX3R5cGVfaWQgdHlwZSwgc2l6ZV90IHNpemUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYXBlaS9naGVzLmMgYi9kcml2ZXJzL2FjcGkvYXBlaS9naGVzLmMKaW5kZXggZDFkNDg0ZC4uZjcwM2IyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FwZWkvZ2hlcy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hcGVpL2doZXMuYwpAQCAtMjQxLDcgKzI0MSw3IEBACiAJY2FzZSBDUEVSX1NFVl9GQVRBTDoKIAkJcmV0dXJuIEdIRVNfU0VWX1BBTklDOwogCWRlZmF1bHQ6Ci0JCS8qIFVua293biwgZ28gcGFuaWMgKi8KKwkJLyogVW5rbm93biwgZ28gcGFuaWMgKi8KIAkJcmV0dXJuIEdIRVNfU0VWX1BBTklDOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKaW5kZXggZmE4NGU5Ny4uYWQzNTAxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKQEAgLTExNjQsNyArMTE2NCw3IEBACiAJCQkgKi8KIAkJCWlmICghbWF0Y2hfcHItPmZsYWdzLnRocm90dGxpbmcpIHsKIAkJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCi0JCQkJCSJUaHJvdHRsaW5nIENvbnRyb2xsIGlzIHVuc3VwcG9ydGVkICIKKwkJCQkJIlRocm90dGxpbmcgQ29udHJvbCBpcyB1bnN1cHBvcnRlZCAiCiAJCQkJCSJvbiBDUFUgJWRcbiIsIGkpKTsKIAkJCQljb250aW51ZTsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zY2FuLmMgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCmluZGV4IGIxMzZjOWMuLjQ0OWM1NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zY2FuLmMKKysrIGIvZHJpdmVycy9hY3BpL3NjYW4uYwpAQCAtOTQzLDYgKzk0MywxMCBAQAogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKIAkJZGV2aWNlLT5mbGFncy5sb2NrYWJsZSA9IDE7CiAKKwkvKiBQb3dlciByZXNvdXJjZXMgY2Fubm90IGJlIHBvd2VyIG1hbmFnZWFibGUuICovCisJaWYgKGRldmljZS0+ZGV2aWNlX3R5cGUgPT0gQUNQSV9CVVNfVFlQRV9QT1dFUikKKwkJcmV0dXJuIDA7CisKIAkvKiBQcmVzZW5jZSBvZiBfUFMwfF9QUjAgaW5kaWNhdGVzICdwb3dlciBtYW5hZ2VhYmxlJyAqLwogCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShkZXZpY2UtPmhhbmRsZSwgIl9QUzAiLCAmdGVtcCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwppbmRleCAzMWU5ZTEwLi5lYzU3NGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW8uYworKysgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwpAQCAtMTM1NCw3ICsxMzU0LDcgQEAKIAkJc3RhdHVzID0gYWNwaV92aWRlb19idXNfZ2V0X29uZV9kZXZpY2UoZGV2LCB2aWRlbyk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVgKLQkJCQkJIkNhbnQgYXR0YWNoIGRldmljZVxuIik7CisJCQkJCSJDYW4ndCBhdHRhY2ggZGV2aWNlXG4iKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJfQpAQCAtMTM3Myw3ICsxMzczLDcgQEAKIAkJCQkJICAgIGFjcGlfdmlkZW9fZGV2aWNlX25vdGlmeSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYCi0JCSAgICAgICAiQ2FudCByZW1vdmUgdmlkZW8gbm90aWZ5IGhhbmRsZXJcbiIpOworCQkgICAgICAgIkNhbid0IHJlbW92ZSB2aWRlbyBub3RpZnkgaGFuZGxlclxuIik7CiAJfQogCWlmIChkZXZpY2UtPmJhY2tsaWdodCkgewogCQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlLT5iYWNrbGlnaHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hbWJhL2J1cy5jIGIvZHJpdmVycy9hbWJhL2J1cy5jCmluZGV4IDZkMmJiMjUuLjcwMjU1OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYW1iYS9idXMuYworKysgYi9kcml2ZXJzL2FtYmEvYnVzLmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogCiAjZW5kaWYgLyogIUNPTkZJR19TVVNQRU5EICovCiAKLSNpZmRlZiBDT05GSUdfSElCRVJOQVRJT04KKyNpZmRlZiBDT05GSUdfSElCRVJOQVRFX0NBTExCQUNLUwogCiBzdGF0aWMgaW50IGFtYmFfcG1fZnJlZXplKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKQEAgLTM1Miw3ICszNTIsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNlbHNlIC8qICFDT05GSUdfSElCRVJOQVRJT04gKi8KKyNlbHNlIC8qICFDT05GSUdfSElCRVJOQVRFX0NBTExCQUNLUyAqLwogCiAjZGVmaW5lIGFtYmFfcG1fZnJlZXplCQlOVUxMCiAjZGVmaW5lIGFtYmFfcG1fdGhhdwkJTlVMTApAQCAtMzYzLDcgKzM2Myw3IEBACiAjZGVmaW5lIGFtYmFfcG1fcG93ZXJvZmZfbm9pcnEJTlVMTAogI2RlZmluZSBhbWJhX3BtX3Jlc3RvcmVfbm9pcnEJTlVMTAogCi0jZW5kaWYgLyogIUNPTkZJR19ISUJFUk5BVElPTiAqLworI2VuZGlmIC8qICFDT05GSUdfSElCRVJOQVRFX0NBTExCQUNLUyAqLwogCiAjaWZkZWYgQ09ORklHX1BNCiAKQEAgLTc2MCw3ICs3NjAsNyBAQAogfQogCiAvKioKLSAqCWFtYmFfcmVsZWFzZV9yZWdpb25zIC0gcmVsZWFzZSBtZW0gcmVnaW9ucyBhc3NvaWNhdGVkIHdpdGggZGV2aWNlCisgKglhbWJhX3JlbGVhc2VfcmVnaW9ucyAtIHJlbGVhc2UgbWVtIHJlZ2lvbnMgYXNzb2NpYXRlZCB3aXRoIGRldmljZQogICoJQGRldjogYW1iYV9kZXZpY2Ugc3RydWN0dXJlIGZvciBkZXZpY2UKICAqCiAgKglSZWxlYXNlIHJlZ2lvbnMgY2xhaW1lZCBieSBhIHN1Y2Nlc3NmdWwgY2FsbCB0byBhbWJhX3JlcXVlc3RfcmVnaW9ucy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2FoY2kuYyBiL2RyaXZlcnMvYXRhL2FoY2kuYwppbmRleCBlNjJmNjkzLi43MWFmZTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9haGNpLmMKKysrIGIvZHJpdmVycy9hdGEvYWhjaS5jCkBAIC0xNTAsNyArMTUwLDcgQEAKIAl7CiAJCUFIQ0lfSEZMQUdTCShBSENJX0hGTEFHX05PX0ZQRE1BX0FBIHwgQUhDSV9IRkxBR19OT19QTVAgfAogCQkJCSBBSENJX0hGTEFHX1lFU19OQ1EpLAotCQkuZmxhZ3MJCT0gQUhDSV9GTEFHX0NPTU1PTiwKKwkJLmZsYWdzCQk9IEFIQ0lfRkxBR19DT01NT04gfCBBVEFfRkxBR19OT19ESVBNLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmFoY2lfb3BzLApAQCAtMjYxLDYgKzI2MSwxMiBAQAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MWQwNiksIGJvYXJkX2FoY2kgfSwgLyogUEJHIFJBSUQgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDI4MjYpLCBib2FyZF9haGNpIH0sIC8qIFBCRyBSQUlEICovCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgyMzIzKSwgYm9hcmRfYWhjaSB9LCAvKiBESDg5eHhDQyBBSENJICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgxZTAyKSwgYm9hcmRfYWhjaSB9LCAvKiBQYW50aGVyIFBvaW50IEFIQ0kgKi8KKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweDFlMDMpLCBib2FyZF9haGNpIH0sIC8qIFBhbnRoZXIgUG9pbnQgQUhDSSAqLworCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MWUwNCksIGJvYXJkX2FoY2kgfSwgLyogUGFudGhlciBQb2ludCBSQUlEICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgxZTA1KSwgYm9hcmRfYWhjaSB9LCAvKiBQYW50aGVyIFBvaW50IFJBSUQgKi8KKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweDFlMDYpLCBib2FyZF9haGNpIH0sIC8qIFBhbnRoZXIgUG9pbnQgUkFJRCAqLworCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MWUwNyksIGJvYXJkX2FoY2kgfSwgLyogUGFudGhlciBQb2ludCBSQUlEICovCiAKIAkvKiBKTWljcm9uIDM2MC8xLzMvNS82LCBtYXRjaCBjbGFzcyB0byBhdm9pZCBJREUgZnVuY3Rpb24gKi8KIAl7IFBDSV9WRU5ET1JfSURfSk1JQ1JPTiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKQEAgLTkyNiw3ICs5MzIsNyBAQAogCQkvKgogCQkgKiBBY2VyIGVNYWNoaW5lcyBHNzI1IGhhcyB0aGUgc2FtZSBwcm9ibGVtLiAgQklPUwogCQkgKiBWMS4wMyBpcyBrbm93biB0byBiZSBicm9rZW4uICBWMy4wNCBpcyBrbm93biB0bwotCQkgKiB3b3JrLiAgSW5iZXR3ZWVuLCB0aGVyZSBhcmUgVjEuMDYsIFYyLjA2IGFuZCBWMy4wMworCQkgKiB3b3JrLiAgQmV0d2VlbiwgdGhlcmUgYXJlIFYxLjA2LCBWMi4wNiBhbmQgVjMuMDMKIAkJICogdGhhdCB3ZSBkb24ndCBoYXZlIG11Y2ggaWRlYSBhYm91dC4gIEZvciBub3csCiAJCSAqIGJsYWNrbGlzdCBhbnl0aGluZyBvbGRlciB0aGFuIFYzLjA0LgogCQkgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYWhjaS5oIGIvZHJpdmVycy9hdGEvYWhjaS5oCmluZGV4IGNjYWYwODEuLjEyYzUyODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2FoY2kuaAorKysgYi9kcml2ZXJzL2F0YS9haGNpLmgKQEAgLTIyNSwxMCArMjI1LDE0IEBACiAJLyogZW1fY3RsIGJpdHMgKi8KIAlFTV9DVExfUlNUCQk9ICgxIDw8IDkpLCAvKiBSZXNldCAqLwogCUVNX0NUTF9UTQkJPSAoMSA8PCA4KSwgLyogVHJhbnNtaXQgTWVzc2FnZSAqLwotCUVNX0NUTF9NUgkJPSAoMSA8PCAwKSwgLyogTWVzc2FnZSBSZWNpZXZlZCAqLworCUVNX0NUTF9NUgkJPSAoMSA8PCAwKSwgLyogTWVzc2FnZSBSZWNlaXZlZCAqLwogCUVNX0NUTF9BTEhECQk9ICgxIDw8IDI2KSwgLyogQWN0aXZpdHkgTEVEICovCiAJRU1fQ1RMX1hNVAkJPSAoMSA8PCAyNSksIC8qIFRyYW5zbWl0IE9ubHkgKi8KIAlFTV9DVExfU01CCQk9ICgxIDw8IDI0KSwgLyogU2luZ2xlIE1lc3NhZ2UgQnVmZmVyICovCisJRU1fQ1RMX1NHUElPCQk9ICgxIDw8IDE5KSwgLyogU0dQSU8gbWVzc2FnZXMgc3VwcG9ydGVkICovCisJRU1fQ1RMX1NFUwkJPSAoMSA8PCAxOCksIC8qIFNFUy0yIG1lc3NhZ2VzIHN1cHBvcnRlZCAqLworCUVNX0NUTF9TQUZURQkJPSAoMSA8PCAxNyksIC8qIFNBRi1URSBtZXNzYWdlcyBzdXBwb3J0ZWQgKi8KKwlFTV9DVExfTEVECQk9ICgxIDw8IDE2KSwgLyogTEVEIG1lc3NhZ2VzIHN1cHBvcnRlZCAqLwogCiAJLyogZW0gbWVzc2FnZSB0eXBlICovCiAJRU1fTVNHX1RZUEVfTEVECQk9ICgxIDw8IDApLCAvKiBMRUQgKi8KQEAgLTI4MSw3ICsyODUsNyBAQAogfTsKIAogc3RydWN0IGFoY2lfaG9zdF9wcml2IHsKLQl2b2lkIF9faW9tZW0gKgkJbW1pbzsJCS8qIGJ1cy1pbmRlcGVuZGFudCBtZW0gbWFwICovCisJdm9pZCBfX2lvbWVtICoJCW1taW87CQkvKiBidXMtaW5kZXBlbmRlbnQgbWVtIG1hcCAqLwogCXVuc2lnbmVkIGludAkJZmxhZ3M7CQkvKiBBSENJX0hGTEFHXyogKi8KIAl1MzIJCQljYXA7CQkvKiBjYXAgdG8gdXNlICovCiAJdTMyCQkJY2FwMjsJCS8qIGNhcDIgdG8gdXNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jIGIvZHJpdmVycy9hdGEvYXRhX3BpaXguYwppbmRleCBjZGVjNGFiLi42ZjZlNzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jCisrKyBiL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMKQEAgLTM4LDE2ICszOCwxNiBAQAogICogIEhhcmR3YXJlIGRvY3VtZW50YXRpb24gYXZhaWxhYmxlIGF0IGh0dHA6Ly9kZXZlbG9wZXIuaW50ZWwuY29tLwogICoKICAqIERvY3VtZW50YXRpb24KLSAqCVB1YmxpY2FsbHkgYXZhaWxhYmxlIGZyb20gSW50ZWwgd2ViIHNpdGUuIEVycmF0YSBkb2N1bWVudGF0aW9uCi0gKiBpcyBhbHNvIHB1YmxpY2FsbHkgYXZhaWxhYmxlLiBBcyBhbiBhaWRlIHRvIGFueW9uZSBoYWNraW5nIG9uIHRoaXMKKyAqCVB1YmxpY2x5IGF2YWlsYWJsZSBmcm9tIEludGVsIHdlYiBzaXRlLiBFcnJhdGEgZG9jdW1lbnRhdGlvbgorICogaXMgYWxzbyBwdWJsaWNseSBhdmFpbGFibGUuIEFzIGFuIGFpZGUgdG8gYW55b25lIGhhY2tpbmcgb24gdGhpcwogICogZHJpdmVyIHRoZSBsaXN0IG9mIGVycmF0YSB0aGF0IGFyZSByZWxldmFudCBpcyBiZWxvdywgZ29pbmcgYmFjayB0bwogICogUElJWDQuIE9sZGVyIGRldmljZSBkb2N1bWVudGF0aW9uIGlzIG5vdyBhIGJpdCB0cmlja3kgdG8gZmluZC4KICAqCiAgKiBUaGUgY2hpcHNldHMgYWxsIGZvbGxvdyB2ZXJ5IG11Y2ggdGhlIHNhbWUgZGVzaWduLiBUaGUgb3JpZ2luYWwgVHJpdG9uCi0gKiBzZXJpZXMgY2hpcHNldHMgZG8gX25vdF8gc3VwcG9ydCBpbmRlcGVuZGFudCBkZXZpY2UgdGltaW5ncywgYnV0IHRoaXMKKyAqIHNlcmllcyBjaGlwc2V0cyBkbyBfbm90XyBzdXBwb3J0IGluZGVwZW5kZW50IGRldmljZSB0aW1pbmdzLCBidXQgdGhpcwogICogaXMgZml4ZWQgaW4gVHJpdG9uIElJLiBXaXRoIHRoZSBvZGQgbW9iaWxlIGV4Y2VwdGlvbiB0aGUgY2hpcHMgdGhlbgogICogY2hhbmdlIGxpdHRsZSBleGNlcHQgaW4gZ2FpbmluZyBtb3JlIG1vZGVzIHVudGlsIFNBVEEgYXJyaXZlcy4gVGhpcwotICogZHJpdmVyIHN1cHBvcnRzIG9ubHkgdGhlIGNoaXBzIHdpdGggaW5kZXBlbmRhbnQgdGltaW5nICh0aGF0IGlzIHRob3NlCisgKiBkcml2ZXIgc3VwcG9ydHMgb25seSB0aGUgY2hpcHMgd2l0aCBpbmRlcGVuZGVudCB0aW1pbmcgKHRoYXQgaXMgdGhvc2UKICAqIHdpdGggU0lUUkUgYW5kIHRoZSAweDQ0IHRpbWluZyByZWdpc3RlcikuIFNlZSBwYXRhX29sZHBpaXggYW5kIHBhdGFfbXBpaXgKICAqIGZvciB0aGUgZWFybHkgY2hpcCBkcml2ZXJzLgogICoKQEAgLTEyMiw3ICsxMjIsNyBAQAogCVAyCQkJPSAyLCAgLyogcG9ydCAyICovCiAJUDMJCQk9IDMsICAvKiBwb3J0IDMgKi8KIAlJREUJCQk9IC0xLCAvKiBJREUgKi8KLQlOQQkJCT0gLTIsIC8qIG5vdCBhdmFsaWFibGUgKi8KKwlOQQkJCT0gLTIsIC8qIG5vdCBhdmFpbGFibGUgKi8KIAlSVgkJCT0gLTMsIC8qIHJlc2VydmVkICovCiAKIAlQSUlYX0FIQ0lfREVWSUNFCT0gNiwKQEAgLTMwOSw2ICszMDksMTQgQEAKIAl7IDB4ODA4NiwgMHgxZDAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g4X3NhdGEgfSwKIAkvKiBTQVRBIENvbnRyb2xsZXIgSURFIChQQkcpICovCiAJeyAweDgwODYsIDB4MWQwOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoOF8ycG9ydF9zYXRhIH0sCisJLyogU0FUQSBDb250cm9sbGVyIElERSAoUGFudGhlciBQb2ludCkgKi8KKwl7IDB4ODA4NiwgMHgxZTAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g4X3NhdGEgfSwKKwkvKiBTQVRBIENvbnRyb2xsZXIgSURFIChQYW50aGVyIFBvaW50KSAqLworCXsgMHg4MDg2LCAweDFlMDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDhfc2F0YSB9LAorCS8qIFNBVEEgQ29udHJvbGxlciBJREUgKFBhbnRoZXIgUG9pbnQpICovCisJeyAweDgwODYsIDB4MWUwOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoOF8ycG9ydF9zYXRhIH0sCisJLyogU0FUQSBDb250cm9sbGVyIElERSAoUGFudGhlciBQb2ludCkgKi8KKwl7IDB4ODA4NiwgMHgxZTA5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g4XzJwb3J0X3NhdGEgfSwKIAl7IH0JLyogdGVybWluYXRlIGxpc3QgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmFoY2kuYyBiL2RyaXZlcnMvYXRhL2xpYmFoY2kuYwppbmRleCAyNmQ0NTIzLi5kMzhjNDBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhaGNpLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYWhjaS5jCkBAIC0xMDksNiArMTA5LDggQEAKIHN0YXRpYyBzc2l6ZV90IGFoY2lfc3RvcmVfZW1fYnVmZmVyKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpOworc3RhdGljIHNzaXplX3QgYWhjaV9zaG93X2VtX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CiAKIHN0YXRpYyBERVZJQ0VfQVRUUihhaGNpX2hvc3RfY2FwcywgU19JUlVHTywgYWhjaV9zaG93X2hvc3RfY2FwcywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoYWhjaV9ob3N0X2NhcDIsIFNfSVJVR08sIGFoY2lfc2hvd19ob3N0X2NhcDIsIE5VTEwpOwpAQCAtMTE2LDYgKzExOCw3IEBACiBzdGF0aWMgREVWSUNFX0FUVFIoYWhjaV9wb3J0X2NtZCwgU19JUlVHTywgYWhjaV9zaG93X3BvcnRfY21kLCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihlbV9idWZmZXIsIFNfSVdVU1IgfCBTX0lSVUdPLAogCQkgICBhaGNpX3JlYWRfZW1fYnVmZmVyLCBhaGNpX3N0b3JlX2VtX2J1ZmZlcik7CitzdGF0aWMgREVWSUNFX0FUVFIoZW1fbWVzc2FnZV9zdXBwb3J0ZWQsIFNfSVJVR08sIGFoY2lfc2hvd19lbV9zdXBwb3J0ZWQsIE5VTEwpOwogCiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYWhjaV9zaG9zdF9hdHRyc1tdID0gewogCSZkZXZfYXR0cl9saW5rX3Bvd2VyX21hbmFnZW1lbnRfcG9saWN5LApAQCAtMTI2LDYgKzEyOSw3IEBACiAJJmRldl9hdHRyX2FoY2lfaG9zdF92ZXJzaW9uLAogCSZkZXZfYXR0cl9haGNpX3BvcnRfY21kLAogCSZkZXZfYXR0cl9lbV9idWZmZXIsCisJJmRldl9hdHRyX2VtX21lc3NhZ2Vfc3VwcG9ydGVkLAogCU5VTEwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChhaGNpX3Nob3N0X2F0dHJzKTsKQEAgLTM0Myw2ICszNDcsMjQgQEAKIAlyZXR1cm4gc2l6ZTsKIH0KIAorc3RhdGljIHNzaXplX3QgYWhjaV9zaG93X2VtX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IGF0YV9zaG9zdF90b19wb3J0KHNob3N0KTsKKwlzdHJ1Y3QgYWhjaV9ob3N0X3ByaXYgKmhwcml2ID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKKwl2b2lkIF9faW9tZW0gKm1taW8gPSBocHJpdi0+bW1pbzsKKwl1MzIgZW1fY3RsOworCisJZW1fY3RsID0gcmVhZGwobW1pbyArIEhPU1RfRU1fQ1RMKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzJXMlcyVzXG4iLAorCQkgICAgICAgZW1fY3RsICYgRU1fQ1RMX0xFRCA/ICJsZWQgIiA6ICIiLAorCQkgICAgICAgZW1fY3RsICYgRU1fQ1RMX1NBRlRFID8gInNhZi10ZSAiIDogIiIsCisJCSAgICAgICBlbV9jdGwgJiBFTV9DVExfU0VTID8gInNlcy0yICIgOiAiIiwKKwkJICAgICAgIGVtX2N0bCAmIEVNX0NUTF9TR1BJTyA/ICJzZ3BpbyAiIDogIiIpOworfQorCiAvKioKICAqCWFoY2lfc2F2ZV9pbml0aWFsX2NvbmZpZyAtIFNhdmUgYW5kIGZpeHVwIGluaXRpYWwgY29uZmlnIHZhbHVlcwogICoJQGRldjogdGFyZ2V0IEFIQ0kgZGV2aWNlCkBAIC0xODk3LDcgKzE5MTksMTcgQEAKIAlhaGNpX2VuYWJsZV9mYnMoYXApOwogCiAJcHAtPmludHJfbWFzayB8PSBQT1JUX0lSUV9CQURfUE1QOwotCXdyaXRlbChwcC0+aW50cl9tYXNrLCBwb3J0X21taW8gKyBQT1JUX0lSUV9NQVNLKTsKKworCS8qCisJICogV2UgbXVzdCBub3QgY2hhbmdlIHRoZSBwb3J0IGludGVycnVwdCBtYXNrIHJlZ2lzdGVyIGlmIHRoZQorCSAqIHBvcnQgaXMgbWFya2VkIGZyb3plbiwgdGhlIHZhbHVlIGluIHBwLT5pbnRyX21hc2sgd2lsbCBiZQorCSAqIHJlc3RvcmVkIGxhdGVyIHdoZW4gdGhlIHBvcnQgaXMgdGhhd2VkLgorCSAqCisJICogTm90ZSB0aGF0IGR1cmluZyBpbml0aWFsaXphdGlvbiwgdGhlIHBvcnQgaXMgbWFya2VkIGFzCisJICogZnJvemVuIHNpbmNlIHRoZSBpcnEgaGFuZGxlciBpcyBub3QgeWV0IHJlZ2lzdGVyZWQuCisJICovCisJaWYgKCEoYXAtPnBmbGFncyAmIEFUQV9QRkxBR19GUk9aRU4pKQorCQl3cml0ZWwocHAtPmludHJfbWFzaywgcG9ydF9tbWlvICsgUE9SVF9JUlFfTUFTSyk7CiB9CiAKIHN0YXRpYyB2b2lkIGFoY2lfcG1wX2RldGFjaChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQpAQCAtMTkxMyw3ICsxOTQ1LDEwIEBACiAJd3JpdGVsKGNtZCwgcG9ydF9tbWlvICsgUE9SVF9DTUQpOwogCiAJcHAtPmludHJfbWFzayAmPSB+UE9SVF9JUlFfQkFEX1BNUDsKLQl3cml0ZWwocHAtPmludHJfbWFzaywgcG9ydF9tbWlvICsgUE9SVF9JUlFfTUFTSyk7CisKKwkvKiBzZWUgY29tbWVudCBhYm92ZSBpbiBhaGNpX3BtcF9hdHRhY2goKSAqLworCWlmICghKGFwLT5wZmxhZ3MgJiBBVEFfUEZMQUdfRlJPWkVOKSkKKwkJd3JpdGVsKHBwLT5pbnRyX21hc2ssIHBvcnRfbW1pbyArIFBPUlRfSVJRX01BU0spOwogfQogCiBpbnQgYWhjaV9wb3J0X3Jlc3VtZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKaW5kZXggYjkxZTE5Yy4uNzZjM2MxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCkBAIC00MTM5LDYgKzQxMzksNyBAQAogCSAqLwogCXsgIlBJT05FRVIgRFZELVJXICBEVlJURDA4IiwJIjEuMDAiLAlBVEFfSE9SS0FHRV9OT1NFVFhGRVIgfSwKIAl7ICJQSU9ORUVSIERWRC1SVyAgRFZSLTIxMkQiLAkiMS4yOCIsIEFUQV9IT1JLQUdFX05PU0VUWEZFUiB9LAorCXsgIlBJT05FRVIgRFZELVJXICBEVlItMjE2RCIsCSIxLjA4IiwgQVRBX0hPUktBR0VfTk9TRVRYRkVSIH0sCiAKIAkvKiBFbmQgTWFya2VyICovCiAJeyB9CkBAIC01MzQwLDcgKzUzNDEsNyBAQAogICoKICAqCVJlc3VtZSBAaG9zdC4gIEFjdHVhbCBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIGJ5IEVILiAgVGhpcwogICoJZnVuY3Rpb24gcmVxdWVzdHMgRUggdG8gcGVyZm9ybSBQTSBvcGVyYXRpb25zIGFuZCByZXR1cm5zLgotICoJTm90ZSB0aGF0IGFsbCByZXN1bWUgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIHBhcmFsbGVseS4KKyAqCU5vdGUgdGhhdCBhbGwgcmVzdW1lIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCBwYXJhbGxlbGx5LgogICoKICAqCUxPQ0tJTkc6CiAgKglLZXJuZWwgdGhyZWFkIGNvbnRleHQgKG1heSBzbGVlcCkuCkBAIC01NDgwLDcgKzU0ODEsNyBAQAogCWlmICghYXApCiAJCXJldHVybiBOVUxMOwogCi0JYXAtPnBmbGFncyB8PSBBVEFfUEZMQUdfSU5JVElBTElaSU5HOworCWFwLT5wZmxhZ3MgfD0gQVRBX1BGTEFHX0lOSVRJQUxJWklORyB8IEFUQV9QRkxBR19GUk9aRU47CiAJYXAtPmxvY2sgPSAmaG9zdC0+bG9jazsKIAlhcC0+cHJpbnRfaWQgPSAtMTsKIAlhcC0+aG9zdCA9IGhvc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCmluZGV4IGRmM2YzMTQuLmRhZDlmZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCkBAIC03NzEsNyArNzcxLDcgQEAKIAkJLyogcHJvY2VzcyBwb3J0IHN1c3BlbmQgcmVxdWVzdCAqLwogCQlhdGFfZWhfaGFuZGxlX3BvcnRfc3VzcGVuZChhcCk7CiAKLQkJLyogRXhjZXB0aW9uIG1pZ2h0IGhhdmUgaGFwcGVuZCBhZnRlciAtPmVycm9yX2hhbmRsZXIKKwkJLyogRXhjZXB0aW9uIG1pZ2h0IGhhdmUgaGFwcGVuZWQgYWZ0ZXIgLT5lcnJvcl9oYW5kbGVyCiAJCSAqIHJlY292ZXJlZCB0aGUgcG9ydCBidXQgYmVmb3JlIHRoaXMgcG9pbnQuICBSZXBlYXQKIAkJICogRUggaW4gc3VjaCBjYXNlLgogCQkgKi8KQEAgLTE3NDIsNyArMTc0Miw3IEBACiAgKgogICoJQW5hbHl6ZSB0YXNrZmlsZSBvZiBAcWMgYW5kIGZ1cnRoZXIgZGV0ZXJtaW5lIGNhdXNlIG9mCiAgKglmYWlsdXJlLiAgVGhpcyBmdW5jdGlvbiBhbHNvIHJlcXVlc3RzIEFUQVBJIHNlbnNlIGRhdGEgaWYKLSAqCWF2YWxpYWJsZS4KKyAqCWF2YWlsYWJsZS4KICAqCiAgKglMT0NLSU5HOgogICoJS2VybmVsIHRocmVhZCBjb250ZXh0IChtYXkgc2xlZXApLgpAQCAtMTg5Myw3ICsxODkzLDcgQEAKICAqCSAgIG9jY3VycmVkIGR1cmluZyBsYXN0IDUgbWlucywgTkNRX09GRi4KICAqCiAgKgkzLiBJZiBtb3JlIHRoYW4gOCBBVEFfQlVTLCBUT1VUX0hTTSBvciBVTktfREVWIGVycm9ycwotICoJICAgb2N1cnJlZCBkdXJpbmcgbGFzdCA1IG1pbnMsIEZBTExCQUNLX1RPX1BJTworICoJICAgb2NjdXJyZWQgZHVyaW5nIGxhc3QgNSBtaW5zLCBGQUxMQkFDS19UT19QSU8KICAqCiAgKgk0LiBJZiBtb3JlIHRoYW4gMyBUT1VUX0hTTSBvciBVTktfREVWIGVycm9ycyBvY2N1cnJlZAogICoJICAgZHVyaW5nIGxhc3QgMTAgbWlucywgTkNRX09GRi4KQEAgLTI1NzcsNyArMjU3Nyw3IEBACiAJaWYgKGxpbmstPmZsYWdzICYgQVRBX0xGTEFHX05PX1NSU1QpCiAJCXNvZnRyZXNldCA9IE5VTEw7CiAKLQkvKiBtYWtlIHN1cmUgZWFjaCByZXNldCBhdHRlbXAgaXMgYXQgbGVhc3QgQ09PTF9ET1dOIGFwYXJ0ICovCisJLyogbWFrZSBzdXJlIGVhY2ggcmVzZXQgYXR0ZW1wdCBpcyBhdCBsZWFzdCBDT09MX0RPV04gYXBhcnQgKi8KIAlpZiAoZWhjLT5pLmZsYWdzICYgQVRBX0VISV9ESURfUkVTRVQpIHsKIAkJbm93ID0gamlmZmllczsKIAkJV0FSTl9PTih0aW1lX2FmdGVyKGVoYy0+bGFzdF9yZXNldCwgbm93KSk7CkBAIC0yNzM2LDcgKzI3MzYsNyBAQAogCQkJaWYgKCFyZXNldCkgewogCQkJCWF0YV9saW5rX3ByaW50ayhsaW5rLCBLRVJOX0VSUiwKIAkJCQkJCSJmb2xsb3ctdXAgc29mdHJlc2V0IHJlcXVpcmVkICIKLQkJCQkJCSJidXQgbm8gc29mdHJlc2V0IGF2YWxpYWJsZVxuIik7CisJCQkJCQkiYnV0IG5vIHNvZnRyZXNldCBhdmFpbGFibGVcbiIpOwogCQkJCWZhaWxlZF9saW5rID0gbGluazsKIAkJCQlyYyA9IC1FSU5WQUw7CiAJCQkJZ290byBmYWlsOwpAQCAtMzMxNiw2ICszMzE2LDcgQEAKIAlzdHJ1Y3QgYXRhX2VoX2NvbnRleHQgKmVoYyA9ICZsaW5rLT5laF9jb250ZXh0OwogCXN0cnVjdCBhdGFfZGV2aWNlICpkZXYsICpsaW5rX2RldiA9IE5VTEwsICpscG1fZGV2ID0gTlVMTDsKIAllbnVtIGF0YV9scG1fcG9saWN5IG9sZF9wb2xpY3kgPSBsaW5rLT5scG1fcG9saWN5OworCWJvb2wgbm9fZGlwbSA9IGxpbmstPmFwLT5mbGFncyAmIEFUQV9GTEFHX05PX0RJUE07CiAJdW5zaWduZWQgaW50IGhpbnRzID0gQVRBX0xQTV9FTVBUWSB8IEFUQV9MUE1fSElQTTsKIAl1bnNpZ25lZCBpbnQgZXJyX21hc2s7CiAJaW50IHJjOwpAQCAtMzMzMiw3ICszMzMzLDcgQEAKIAkgKi8KIAlhdGFfZm9yX2VhY2hfZGV2KGRldiwgbGluaywgRU5BQkxFRCkgewogCQlib29sIGhpcG0gPSBhdGFfaWRfaGFzX2hpcG0oZGV2LT5pZCk7Ci0JCWJvb2wgZGlwbSA9IGF0YV9pZF9oYXNfZGlwbShkZXYtPmlkKTsKKwkJYm9vbCBkaXBtID0gYXRhX2lkX2hhc19kaXBtKGRldi0+aWQpICYmICFub19kaXBtOwogCiAJCS8qIGZpbmQgdGhlIGZpcnN0IGVuYWJsZWQgYW5kIExQTSBlbmFibGVkIGRldmljZXMgKi8KIAkJaWYgKCFsaW5rX2RldikKQEAgLTMzODksNyArMzM5MCw4IEBACiAKIAkvKiBob3N0IGNvbmZpZyB1cGRhdGVkLCBlbmFibGUgRElQTSBpZiB0cmFuc2l0aW9uaW5nIHRvIE1JTl9QT1dFUiAqLwogCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBFTkFCTEVEKSB7Ci0JCWlmIChwb2xpY3kgPT0gQVRBX0xQTV9NSU5fUE9XRVIgJiYgYXRhX2lkX2hhc19kaXBtKGRldi0+aWQpKSB7CisJCWlmIChwb2xpY3kgPT0gQVRBX0xQTV9NSU5fUE9XRVIgJiYgIW5vX2RpcG0gJiYKKwkJICAgIGF0YV9pZF9oYXNfZGlwbShkZXYtPmlkKSkgewogCQkJZXJyX21hc2sgPSBhdGFfZGV2X3NldF9mZWF0dXJlKGRldiwKIAkJCQkJU0VURkVBVFVSRVNfU0FUQV9FTkFCTEUsIFNBVEFfRElQTSk7CiAJCQlpZiAoZXJyX21hc2sgJiYgZXJyX21hc2sgIT0gQUNfRVJSX0RFVikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKaW5kZXggYTgzNDE5OS4uZTJmNTdlOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYwpAQCAtOTk5LDcgKzk5OSw3IEBACiAgKglAcWM6IENvbW1hbmQgdGhhdCB3ZSBhcmUgZXJyb3Jpbmcgb3V0CiAgKgogICoJR2VuZXJhdGUgc2Vuc2UgYmxvY2sgZm9yIGEgZmFpbGVkIEFUQSBjb21tYW5kIEBxYy4gIERlc2NyaXB0b3IKLSAqCWZvcm1hdCBpcyB1c2VkIHRvIGFjY29tb2RhdGUgTEJBNDggYmxvY2sgYWRkcmVzcy4KKyAqCWZvcm1hdCBpcyB1c2VkIHRvIGFjY29tbW9kYXRlIExCQTQ4IGJsb2NrIGFkZHJlc3MuCiAgKgogICoJTE9DS0lORzoKICAqCU5vbmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKaW5kZXggY2Y3YWNiYy4uZjgzODBjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYwpAQCAtMjgzOSw3ICsyODM5LDcgQEAKIAkJYm1kbWFfc3RvcHBlZCA9IHRydWU7CiAKIAkJaWYgKHVubGlrZWx5KGhvc3Rfc3RhdCAmIEFUQV9ETUFfRVJSKSkgewotCQkJLyogZXJyb3Igd2hlbiB0cmFuc2ZlcmluZyBkYXRhIHRvL2Zyb20gbWVtb3J5ICovCisJCQkvKiBlcnJvciB3aGVuIHRyYW5zZmVycmluZyBkYXRhIHRvL2Zyb20gbWVtb3J5ICovCiAJCQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX0hPU1RfQlVTOwogCQkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUX0VSUjsKIAkJfQpAQCAtMzAzMiw3ICszMDMyLDcgQEAKIAkgKiBPciBtYXliZSBJJ20ganVzdCBiZWluZyBwYXJhbm9pZC4KIAkgKgogCSAqIEZJWE1FOiBUaGUgcG9zdGluZyBvZiB0aGlzIHdyaXRlIG1lYW5zIEkvTyBzdGFydHMgYXJlCi0JICogdW5uZWNjZXNzYXJpbHkgZGVsYXllZCBmb3IgTU1JTworCSAqIHVubmVjZXNzYXJpbHkgZGVsYXllZCBmb3IgTU1JTwogCSAqLwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2JtZG1hX3N0YXJ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYW1kLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2FtZC5jCmluZGV4IDYyMGEwN2MuLmIwOTc1YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYW1kLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hbWQuYwpAQCAtMTEsNyArMTEsNyBAQAogICoJUG93ZXIgbWFuYWdlbWVudCBvbiBwb3J0cwogICoKICAqCi0gKiAgRG9jdW1lbnRhdGlvbiBwdWJsaWNhbGx5IGF2YWlsYWJsZS4KKyAqICBEb2N1bWVudGF0aW9uIHB1YmxpY2x5IGF2YWlsYWJsZS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2FyYXNhbl9jZi5jIGIvZHJpdmVycy9hdGEvcGF0YV9hcmFzYW5fY2YuYwppbmRleCA2NWNlZTc0Li43MTliYjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2FyYXNhbl9jZi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYXJhc2FuX2NmLmMKQEAgLTM4NSw3ICszODUsNyBAQAogCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAl9CiAKLQkvKiBDaGVjayBpZiBQSU8gRXJyb3IgaW50ZXJydXB0IGhhcyBvY2N1cmVkICovCisJLyogQ2hlY2sgaWYgUElPIEVycm9yIGludGVycnVwdCBoYXMgb2NjdXJyZWQgKi8KIAlpZiAoYWNkZXYtPmRtYV9zdGF0dXMgJiBBVEFfRE1BX0VSUikKIAkJcmV0dXJuIC1FQUdBSU47CiAKQEAgLTQ1MCw3ICs0NTAsNyBAQAogCS8qCiAJICogRm9yIGVhY2ggc2c6CiAJICogTUFYX1hGRVJfQ09VTlQgZGF0YSB3aWxsIGJlIHRyYW5zZmVycmVkIGJlZm9yZSB3ZSBnZXQgdHJhbnNmZXIKLQkgKiBjb21wbGV0ZSBpbnRlcnJ1cHQuIEluYmV0d2VlbiBhZnRlciBGSUZPX1NJWkUgZGF0YQorCSAqIGNvbXBsZXRlIGludGVycnVwdC4gQmV0d2VlbiBhZnRlciBGSUZPX1NJWkUgZGF0YQogCSAqIGJ1ZmZlciBhdmFpbGFibGUgaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkLiBBdCB0aGlzIHRpbWUgd2Ugd2lsbAogCSAqIGZpbGwgRklGTyBhZ2FpbjogbWF4IEZJRk9fU0laRSBkYXRhLgogCSAqLwpAQCAtNDYzLDcgKzQ2Myw3IEBACiAJCQkJYWNkZXYtPnZiYXNlICsgWEZFUl9DVFIpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhY2Rldi0+aG9zdC0+bG9jaywgZmxhZ3MpOwogCi0JCS8qIGNvbnRpbnVlIGRtYSB4ZmVycyB1bnRpbGwgY3VycmVudCBzZyBpcyBjb21wbGV0ZWQgKi8KKwkJLyogY29udGludWUgZG1hIHhmZXJzIHVudGlsIGN1cnJlbnQgc2cgaXMgY29tcGxldGVkICovCiAJCXdoaWxlICh4ZmVyX2NudCkgewogCQkJLyogd2FpdCBmb3IgcmVhZCB0byBjb21wbGV0ZSAqLwogCQkJaWYgKCF3cml0ZSkgewpAQCAtNTYzLDcgKzU2Myw3IEBACiAKIGNoYW5fcmVxdWVzdF9mYWlsOgogCXNwaW5fbG9ja19pcnFzYXZlKCZhY2Rldi0+aG9zdC0+bG9jaywgZmxhZ3MpOwotCS8qIGVycm9yIHdoZW4gdHJhbnNmZXJpbmcgZGF0YSB0by9mcm9tIG1lbW9yeSAqLworCS8qIGVycm9yIHdoZW4gdHJhbnNmZXJyaW5nIGRhdGEgdG8vZnJvbSBtZW1vcnkgKi8KIAlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX0hPU1RfQlVTOwogCXFjLT5hcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfRVJSOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2F0OTEuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYXQ5MS5jCmluZGV4IDBkYTBkY2MuLmE1ZmRiZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYXQ5MS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYXQ5MS5jCkBAIC0zMywxMSArMzMsMTIgQEAKIAogCiAjZGVmaW5lIERSVl9OQU1FICJwYXRhX2F0OTEiCi0jZGVmaW5lIERSVl9WRVJTSU9OICIwLjEiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjIiCiAKICNkZWZpbmUgQ0ZfSURFX09GRlNFVAkgICAgMHgwMGMwMDAwMAogI2RlZmluZSBDRl9BTFRfSURFX09GRlNFVCAgIDB4MDBlMDAwMDAKICNkZWZpbmUgQ0ZfSURFX1JFU19TSVpFICAgICAweDA4CisjZGVmaW5lIE5DU19SRF9QVUxTRV9MSU1JVCAgMHgzZiAvKiBtYXhpbWFsIHZhbHVlIGZvciBwdWxzZSBiaXRmaWVsZHMgKi8KIAogc3RydWN0IGF0OTFfaWRlX2luZm8gewogCXVuc2lnbmVkIGxvbmcgbW9kZTsKQEAgLTQ5LDggKzUwLDE4IEBACiAJdm9pZCBfX2lvbWVtICphbHRfYWRkcjsKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3RpbWluZyBpbml0aWFsX3RpbWluZyA9Ci0Je1hGRVJfUElPXzAsIDcwLCAyOTAsIDI0MCwgNjAwLCAxNjUsIDE1MCwgNjAwLCAwfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3RpbWluZyBpbml0aWFsX3RpbWluZyA9IHsKKwkubW9kZQkJPSBYRkVSX1BJT18wLAorCS5zZXR1cAkJPSA3MCwKKwkuYWN0OGIJCT0gMjkwLAorCS5yZWM4YgkJPSAyNDAsCisJLmN5YzhiCQk9IDYwMCwKKwkuYWN0aXZlCQk9IDE2NSwKKwkucmVjb3Zlcgk9IDE1MCwKKwkuZG1hY2tfaG9sZAk9IDAsCisJLmN5Y2xlCQk9IDYwMCwKKwkudWRtYQkJPSAwCit9OwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjYWxjX21ja19jeWNsZXModW5zaWduZWQgbG9uZyBucywgdW5zaWduZWQgbG9uZyBtY2tfaHopCiB7CkBAIC0xMDksNiArMTIwLDExIEBACiAJLyogKENTMCwgQ1MxLCBESVIsIE9FKSA8PSAoQ0ZDRTEsIENGQ0UyLCBDRlJOVywgTkNTWCkgdGltaW5ncyAqLwogCW5jc19yZWFkX3NldHVwID0gMTsKIAluY3NfcmVhZF9wdWxzZSA9IHJlYWRfY3ljbGUgLSAyOworCWlmIChuY3NfcmVhZF9wdWxzZSA+IE5DU19SRF9QVUxTRV9MSU1JVCkgeworCQluY3NfcmVhZF9wdWxzZSA9IE5DU19SRF9QVUxTRV9MSU1JVDsKKwkJZGV2X3dhcm4oZGV2LCAibmNzX3JlYWRfcHVsc2UgbGltaXRlZCB0byBtYXhpbWFsIHZhbHVlICVsdVxuIiwKKwkJCW5jc19yZWFkX3B1bHNlKTsKKwl9CiAKIAkvKiBXcml0ZSB0aW1pbmdzIHNhbWUgYXMgcmVhZCB0aW1pbmdzICovCiAJd3JpdGVfY3ljbGUgPSByZWFkX2N5Y2xlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9iZjU0eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9iZjU0eC5jCmluZGV4IGUwYjU4YjguLmVhNjQ5NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYmY1NHguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2JmNTR4LmMKQEAgLTEzNDIsNyArMTM0Miw3IEBACiAJCQlhcC0+b3BzLT5ibWRtYV9zdG9wKHFjKTsKIAogCQkJaWYgKHVubGlrZWx5KGhvc3Rfc3RhdCAmIEFUQV9ETUFfRVJSKSkgewotCQkJCS8qIGVycm9yIHdoZW4gdHJhbnNmZXJpbmcgZGF0YSB0by9mcm9tIG1lbW9yeSAqLworCQkJCS8qIGVycm9yIHdoZW4gdHJhbnNmZXJyaW5nIGRhdGEgdG8vZnJvbSBtZW1vcnkgKi8KIAkJCQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX0hPU1RfQlVTOwogCQkJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9FUlI7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUyMC5jIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MjAuYwppbmRleCAwMzA5NTJmLi5lMzI1NGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUyMC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTIwLmMKQEAgLTI5LDcgKzI5LDcgQEAKICAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCiAgKiBEb2N1bWVudGF0aW9uOgotICoJTm90IHB1YmxpY2FsbHkgYXZhaWxhYmxlLgorICoJTm90IHB1YmxpY2x5IGF2YWlsYWJsZS4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9tcGlpeC5jIGIvZHJpdmVycy9hdGEvcGF0YV9tcGlpeC5jCmluZGV4IGIyMWYwMDIuLmQ4ZDljNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbXBpaXguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX21waWl4LmMKQEAgLTE1LDcgKzE1LDcgQEAKICAqIHdpdGggUENJIElERSBhbmQgYWxzbyB0aGF0IHdlIGRvIG5vdCBkaXNhYmxlIHRoZSBkZXZpY2Ugd2hlbiBvdXIgZHJpdmVyIGlzCiAgKiB1bmxvYWRlZCAoYXMgaXQgaGFzIG1hbnkgb3RoZXIgZnVuY3Rpb25zKS4KICAqCi0gKiBUaGUgZHJpdmVyIGNvbmNpb3VzbHkga2VlcHMgdGhpcyBsb2dpYyBpbnRlcm5hbGx5IHRvIGF2b2lkIHB1c2hpbmcgcXVpcmt5CisgKiBUaGUgZHJpdmVyIGNvbnNjaW91c2x5IGtlZXBzIHRoaXMgbG9naWMgaW50ZXJuYWxseSB0byBhdm9pZCBwdXNoaW5nIHF1aXJreQogICogUEFUQSBoaXN0b3J5IGludG8gdGhlIGNsZWFuIGxpYmF0YSBsYXllci4KICAqCiAgKiBUaGlua3BhZCBzcGVjaWZpYyBub3RlOiBJZiB5b3UgYm9vdCBhbiBNUElJWCB1c2luZyBhIHRoaW5rcGFkIHdpdGggYSBQQ01DSUEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3J6MTAwMC5jCmluZGV4IDRhNDU0YTguLjRkMDQ0NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9yejEwMDAuYwpAQCAtMTEyLDcgKzExMiw3IEBACiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQkvKiBJZiB0aGlzIGZhaWxzIG9uIHJlc3VtZSAod2hpY2ggaXMgYSAiY2FudCBoYXBwZW4iIGNhc2UpLCB3ZQorCS8qIElmIHRoaXMgZmFpbHMgb24gcmVzdW1lICh3aGljaCBpcyBhICJjYW4ndCBoYXBwZW4iIGNhc2UpLCB3ZQogCSAgIG11c3Qgc3RvcCBhcyBhbnkgcHJvZ3Jlc3Mgcmlza3MgZGF0YSBsb3NzICovCiAJaWYgKHJ6MTAwMF9maWZvX2Rpc2FibGUocGRldikpCiAJCXBhbmljKCJyejEwMDAgZmlmbyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zaWw2ODAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMKaW5kZXggMDBlZWZiZC4uMTE4Nzg3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zaWw2ODAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NpbDY4MC5jCkBAIC0xMSw3ICsxMSw3IEBACiAgKgogICogIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICoKLSAqICBEb2N1bWVudGF0aW9uIHB1YmxpY2FsbHkgYXZhaWxhYmxlLgorICogIERvY3VtZW50YXRpb24gcHVibGljbHkgYXZhaWxhYmxlLgogICoKICAqCUlmIHlvdSBoYXZlIHN0cmFuZ2UgcHJvYmxlbXMgd2l0aCBuVmlkaWEgY2hpcHNldCBzeXN0ZW1zIHBsZWFzZQogICoJc2VlIHRoZSBTSSBzdXBwb3J0IGRvY3VtZW50YXRpb24gYW5kIHVwZGF0ZSB5b3VyIHN5c3RlbSBCSU9TCkBAIC00Myw3ICs0Myw3IEBACiAgKgogICoJVHVybiBhIGNvbmZpZyByZWdpc3RlciBvZmZzZXQgaW50byB0aGUgcmlnaHQgYWRkcmVzcyBpbiBlaXRoZXIKICAqCVBDSSBzcGFjZSBvciBNTUlPIHNwYWNlIHRvIGFjY2VzcyB0aGUgY29udHJvbCByZWdpc3RlciBpbiBxdWVzdGlvbgotICoJVGhhbmtmdWxseSB0aGlzIGlzIGEgY29uZmlndXJhdGlvbiBvcGVyYXRpb24gc28gaXNudCBwZXJmb3JtYW5jZQorICoJVGhhbmtmdWxseSB0aGlzIGlzIGEgY29uZmlndXJhdGlvbiBvcGVyYXRpb24gc28gaXNuJ3QgcGVyZm9ybWFuY2UKICAqCWNyaXRpY2lhbC4KICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3Npcy5jIGIvZHJpdmVycy9hdGEvcGF0YV9zaXMuYwppbmRleCBjMDRhYmMzLi5iZTA4ZmY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3Npcy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2lzLmMKQEAgLTMzMSw3ICszMzEsNyBAQAogCiAJaWYgKGFkZXYtPmRtYV9tb2RlIDwgWEZFUl9VRE1BXzApIHsKIAkJLyogYml0cyAzLTAgaG9sZCByZWNvdmVyeSB0aW1pbmcgYml0cyA4LTEwIGFjdGl2ZSB0aW1pbmcgYW5kCi0JCSAgIHRoZSBoaWdoZXIgYml0cyBhcmUgZGVwZW5kYW50IG9uIHRoZSBkZXZpY2UgKi8KKwkJICAgdGhlIGhpZ2hlciBiaXRzIGFyZSBkZXBlbmRlbnQgb24gdGhlIGRldmljZSAqLwogCQl0aW1pbmcgJj0gfjB4ODcwRjsKIAkJdGltaW5nIHw9IG13ZG1hX2JpdHNbc3BlZWRdOwogCX0gZWxzZSB7CkBAIC0zNzEsNyArMzcxLDcgQEAKIAogCWlmIChhZGV2LT5kbWFfbW9kZSA8IFhGRVJfVURNQV8wKSB7CiAJCS8qIGJpdHMgMy0wIGhvbGQgcmVjb3ZlcnkgdGltaW5nIGJpdHMgOC0xMCBhY3RpdmUgdGltaW5nIGFuZAotCQkgICB0aGUgaGlnaGVyIGJpdHMgYXJlIGRlcGVuZGFudCBvbiB0aGUgZGV2aWNlLCBiaXQgMTUgdWRtYSAqLworCQkgICB0aGUgaGlnaGVyIGJpdHMgYXJlIGRlcGVuZGVudCBvbiB0aGUgZGV2aWNlLCBiaXQgMTUgdWRtYSAqLwogCQl0aW1pbmcgJj0gfjB4ODcwRjsKIAkJdGltaW5nIHw9IG13ZG1hX2JpdHNbc3BlZWRdOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYyBiL2RyaXZlcnMvYXRhL3BhdGFfdHJpZmxleC5jCmluZGV4IDBkMWY4OWUuLjAzYjZkNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfdHJpZmxleC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfdHJpZmxleC5jCkBAIC0zMCw3ICszMCw3IEBACiAgKiBMb29zZWx5IGJhc2VkIG9uIHRoZSBwaWl4ICYgc3Z3a3MgZHJpdmVycy4KICAqCiAgKiBEb2N1bWVudGF0aW9uOgotICoJTm90IHB1YmxpY2FsbHkgYXZhaWxhYmxlLgorICoJTm90IHB1YmxpY2x5IGF2YWlsYWJsZS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jIGIvZHJpdmVycy9hdGEvc2F0YV9mc2wuYwppbmRleCAwZjkxZTU4Li4zNWE3MWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMKQEAgLTQyLDcgKzQyLDcgQEAKIAogCS8qCiAJICogU0FUQS1GU0wgaG9zdCBjb250cm9sbGVyIHN1cHBvcnRzIGEgbWF4LiBvZiAoMTUrMSkgZGlyZWN0IFBSREVzLCBhbmQKLQkgKiBjaGFpbmVkIGluZGlyZWN0IFBSREVzIHVwdG8gYSBtYXggY291bnQgb2YgNjMuCisJICogY2hhaW5lZCBpbmRpcmVjdCBQUkRFcyB1cCB0byBhIG1heCBjb3VudCBvZiA2My4KIAkgKiBXZSBhcmUgYWxsb2NhdGluZyBhbiBhcnJheSBvZiA2MyBQUkRFcyBjb250aWd1b3VzbHksIGJ1dCBQUkRFIzE1IHdpbGwKIAkgKiBiZSBzZXR1cCBhcyBhbiBpbmRpcmVjdCBkZXNjcmlwdG9yLCBwb2ludGluZyB0byBpdCdzIG5leHQKIAkgKiAoY29udGlndW91cykgUFJERS4gVGhvdWdoIGNoYWluZWQgaW5kaXJlY3QgUFJERSBhcnJheXMgYXJlCkBAIC05MDcsNyArOTA3LDcgQEAKIAlhdGFfbXNsZWVwKGFwLCAxKTsKIAogCS8qCi0JICogU0FUQSBkZXZpY2UgZW50ZXJzIHJlc2V0IHN0YXRlIGFmdGVyIHJlY2V2aW5nIGEgQ29udHJvbCByZWdpc3RlcgorCSAqIFNBVEEgZGV2aWNlIGVudGVycyByZXNldCBzdGF0ZSBhZnRlciByZWNlaXZpbmcgYSBDb250cm9sIHJlZ2lzdGVyCiAJICogRklTIHdpdGggU1JTVCBiaXQgYXNzZXJ0ZWQgYW5kIGl0IGF3YWl0cyBhbm90aGVyIEgyRCBDb250cm9sIHJlZy4KIAkgKiBGSVMgd2l0aCBTUlNUIGJpdCBjbGVhcmVkLCB0aGVuIHRoZSBkZXZpY2UgZG9lcyBpbnRlcm5hbCBkaWFncyAmCiAJICogaW5pdGlhbGl6YXRpb24sIGZvbGxvd2VkIGJ5IGluZGljYXRpbmcgaXQncyBpbml0aWFsaXphdGlvbiBzdGF0dXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbXYuYwppbmRleCBjZDQwNjUxLi5iNTJjMDUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX212LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9tdi5jCkBAIC0xMzUyLDcgKzEzNTIsNyBAQAogCQkJLyoKIAkJCSAqIFdvcmthcm91bmQgZm9yIDg4U1g2MHgxIEZFciBTQVRBIzI2OgogCQkJICoKLQkJCSAqIENPTVJFU0VUcyBoYXZlIHRvIHRha2UgY2FyZSBub3QgdG8gYWNjaWRlbnRseQorCQkJICogQ09NUkVTRVRzIGhhdmUgdG8gdGFrZSBjYXJlIG5vdCB0byBhY2NpZGVudGFsbHkKIAkJCSAqIHB1dCB0aGUgZHJpdmUgdG8gc2xlZXAgd2hlbiB3cml0aW5nIFNDUl9DT05UUk9MLgogCQkJICogU2V0dGluZyBiaXRzIDEyLi4xNSBwcmV2ZW50cyB0aGlzIHByb2JsZW0uCiAJCQkgKgpAQCAtMjA0NCw3ICsyMDQ0LDcgQEAKIAogCWN3ID0gJnBwLT5jcnFiW2luX2luZGV4XS5hdGFfY21kWzBdOwogCi0JLyogU2FkbHksIHRoZSBDUlFCIGNhbm5vdCBhY2NvbW9kYXRlIGFsbCByZWdpc3RlcnMtLXRoZXJlIGFyZQorCS8qIFNhZGx5LCB0aGUgQ1JRQiBjYW5ub3QgYWNjb21tb2RhdGUgYWxsIHJlZ2lzdGVycy0tdGhlcmUgYXJlCiAJICogb25seSAxMSBieXRlcy4uLnNvIHdlIG11c3QgcGljayBhbmQgY2hvb3NlIHJlcXVpcmVkCiAJICogcmVnaXN0ZXJzIGJhc2VkIG9uIHRoZSBjb21tYW5kLiAgU28sIHdlIGRyb3AgZmVhdHVyZSBhbmQKIAkgKiBob2JfZmVhdHVyZSBmb3IgW1JXXSBETUEgY29tbWFuZHMsIGJ1dCB0aGV5IGFyZSBuZWVkZWQgZm9yCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX252LmMgYi9kcml2ZXJzL2F0YS9zYXRhX252LmMKaW5kZXggNDIzNDRlMy4uZjE3M2VmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9udi5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfbnYuYwpAQCAtMjEyMSw3ICsyMTIxLDcgQEAKIAogCWhvc3Rfc3RhdCA9IGFwLT5vcHMtPmJtZG1hX3N0YXR1cyhhcCk7CiAJaWYgKHVubGlrZWx5KGhvc3Rfc3RhdCAmIEFUQV9ETUFfRVJSKSkgewotCQkvKiBlcnJvciB3aGVuIHRyYW5zZmVyaW5nIGRhdGEgdG8vZnJvbSBtZW1vcnkgKi8KKwkJLyogZXJyb3Igd2hlbiB0cmFuc2ZlcnJpbmcgZGF0YSB0by9mcm9tIG1lbW9yeSAqLwogCQlhdGFfZWhpX2NsZWFyX2Rlc2MoZWhpKTsKIAkJYXRhX2VoaV9wdXNoX2Rlc2MoZWhpLCAiQk1ETUEgc3RhdCAweCV4IiwgaG9zdF9zdGF0KTsKIAkJZWhpLT5lcnJfbWFzayB8PSBBQ19FUlJfSE9TVF9CVVM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jIGIvZHJpdmVycy9hdGEvc2F0YV92aWEuYwppbmRleCAyMTI0MmM1Li41NDQzNGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMKQEAgLTU4Miw3ICs1ODIsNyBAQAogCSAqIFdoZW4gaG9zdCBpc3N1ZXMgSE9MRCwgZGV2aWNlIG1heSBzZW5kIHVwIHRvIDIwRFcgb2YgZGF0YQogCSAqIGJlZm9yZSBhY2tub3dsZWRnaW5nIGl0IHdpdGggSE9MREEgYW5kIHRoZSBob3N0IHNob3VsZCBiZQogCSAqIGFibGUgdG8gYnVmZmVyIHRoZW0gaW4gRklGTy4gIFVuZm9ydHVuYXRlbHksIHNvbWUgV0QgZHJpdmVzCi0JICogc2VuZCB1cHRvIDQwRFcgYmVmb3JlIGFja25vd2xlZGdpbmcgSE9MRCBhbmQsIGluIHRoZQorCSAqIHNlbmQgdXAgdG8gNDBEVyBiZWZvcmUgYWNrbm93bGVkZ2luZyBIT0xEIGFuZCwgaW4gdGhlCiAJICogZGVmYXVsdCBjb25maWd1cmF0aW9uLCB0aGlzIGVuZHMgdXAgb3ZlcmZsb3dpbmcgdnQ2NDIxJ3MKIAkgKiBGSUZPLCBtYWtpbmcgdGhlIGNvbnRyb2xsZXIgYWJvcnQgdGhlIHRyYW5zYWN0aW9uIHdpdGgKIAkgKiBSX0VSUi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2FtYmFzc2Fkb3IuYyBiL2RyaXZlcnMvYXRtL2FtYmFzc2Fkb3IuYwppbmRleCA5ZjQ3ZTg2Li5hNWZjYjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9hbWJhc3NhZG9yLmMKKysrIGIvZHJpdmVycy9hdG0vYW1iYXNzYWRvci5jCkBAIC00OTcsNyArNDk3LDcgQEAKIAkgIC8vIFZDIGxheWVyIHN0YXRzCiAJICBhdG9taWNfaW5jKCZhdG1fdmNjLT5zdGF0cy0+cngpOwogCSAgX19uZXRfdGltZXN0YW1wKHNrYik7Ci0JICAvLyBlbmQgb2Ygb3VyIHJlc3BvbnNhYmlsaXR5CisJICAvLyBlbmQgb2Ygb3VyIHJlc3BvbnNpYmlsaXR5CiAJICBhdG1fdmNjLT5wdXNoIChhdG1fdmNjLCBza2IpOwogCSAgcmV0dXJuOwogCSAgCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMgYi9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMKaW5kZXggMDQ5NjUwZC4uZWY3YTY1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vZmlyZXN0cmVhbS5jCisrKyBiL2RyaXZlcnMvYXRtL2ZpcmVzdHJlYW0uYwpAQCAtMTc4Miw3ICsxNzgyLDcgQEAKIAkJd3JpdGVfZnMgKGRldiwgUkFTMCwgUkFTMF9EQ0RfWEhMVCAKIAkJCSAgfCAoKCgxIDw8IEZTMTU1X1ZQSV9CSVRTKSAtIDEpICogUkFTMF9WUFNFTCkKIAkJCSAgfCAoKCgxIDw8IEZTMTU1X1ZDSV9CSVRTKSAtIDEpICogUkFTMF9WQ1NFTCkpOwotCQkvKiBXZSBjYW4gY2hvc2UgdGhlIHNwbGl0IGFyYml0YXJpbHkuIFdlIG1pZ2h0IGJlIGFibGUgdG8gCisJCS8qIFdlIGNhbiBjaG9zZSB0aGUgc3BsaXQgYXJiaXRyYXJpbHkuIFdlIG1pZ2h0IGJlIGFibGUgdG8gCiAJCSAgIHN1cHBvcnQgbW9yZS4gV2hhdGV2ZXIuIFRoaXMgc2hvdWxkIGRvIGZvciBub3cuICovCiAJCWRldi0+YXRtX2Rldi0+Y2lfcmFuZ2UudnBpX2JpdHMgPSBGUzE1NV9WUElfQklUUzsKIAkJZGV2LT5hdG1fZGV2LT5jaV9yYW5nZS52Y2lfYml0cyA9IEZTMTU1X1ZDSV9CSVRTOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vZm9yZTIwMGUuYyBiL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmMKaW5kZXggYmRkMjcxOS4uYmM5ZTcwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vZm9yZTIwMGUuYworKysgYi9kcml2ZXJzL2F0bS9mb3JlMjAwZS5jCkBAIC0yNjQzLDE2ICsyNjQzLDE5IEBACiB9CiAKICNpZmRlZiBDT05GSUdfU0JVUworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZm9yZTIwMGVfc2JhX21hdGNoW107CiBzdGF0aWMgaW50IF9fZGV2aW5pdCBmb3JlMjAwZV9zYmFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3ApCiB7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CiAJY29uc3Qgc3RydWN0IGZvcmUyMDBlX2J1cyAqYnVzOwogCXN0cnVjdCBmb3JlMjAwZSAqZm9yZTIwMGU7CiAJc3RhdGljIGludCBpbmRleCA9IDA7CiAJaW50IGVycjsKIAotCWlmICghb3AtPmRldi5vZl9tYXRjaCkKKwltYXRjaCA9IG9mX21hdGNoX2RldmljZShmb3JlMjAwZV9zYmFfbWF0Y2gsICZvcC0+ZGV2KTsKKwlpZiAoIW1hdGNoKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlidXMgPSBvcC0+ZGV2Lm9mX21hdGNoLT5kYXRhOworCWJ1cyA9IG1hdGNoLT5kYXRhOwogCiAJZm9yZTIwMGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZm9yZTIwMGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWZvcmUyMDBlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vZm9yZTIwMGUuaCBiL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmgKaW5kZXggN2Y5N2MwOS4uYmEzNGEwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vZm9yZTIwMGUuaAorKysgYi9kcml2ZXJzL2F0bS9mb3JlMjAwZS5oCkBAIC0yNjMsNyArMjYzLDcgQEAKIH0gb3Bjb2RlX3Q7CiAKIAotLyogdmlydHVhbCBwYXRoIC8gdmlydHVhbCBjaGFubmVsIGlkZW50aWZlcnMgKi8KKy8qIHZpcnR1YWwgcGF0aCAvIHZpcnR1YWwgY2hhbm5lbCBpZGVudGlmaWVycyAqLwogCiB0eXBlZGVmIHN0cnVjdCB2cHZjIHsKICAgICBCSVRGSUVMRDMoCkBAIC05MjYsNyArOTI2LDcgQEAKIAogI2RlZmluZSBQQ0EyMDBFX1BDSV9MQVRFTkNZICAgICAgMHg0MCAgICAvKiBtYXhpbXVtIHNsYXZlIGxhdGVudHkgICAgICAgICAgICAqLwogI2RlZmluZSBQQ0EyMDBFX1BDSV9NQVNURVJfQ1RSTCAgMHg0MSAgICAvKiBtYXN0ZXIgY29udHJvbCAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBQQ0EyMDBFX1BDSV9USFJFU0hPTEQgICAgMHg0MiAgICAvKiBidXJzdCAvIGNvbnRpbm91cyByZXEgdGhyZXNob2xkICAqLworI2RlZmluZSBQQ0EyMDBFX1BDSV9USFJFU0hPTEQgICAgMHg0MiAgICAvKiBidXJzdCAvIGNvbnRpbnVvdXMgcmVxIHRocmVzaG9sZCAgKi8KIAogLyogUEJJIG1hc3RlciBjb250cm9sIHJlZ2lzdGVyICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2hvcml6b24uYyBiL2RyaXZlcnMvYXRtL2hvcml6b24uYwppbmRleCAyNDc2MWUxLi5kNThlM2ZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9ob3Jpem9uLmMKKysrIGIvZHJpdmVycy9hdG0vaG9yaXpvbi5jCkBAIC0xNjksMTMgKzE2OSwxMyBAQAogICBSZWFsIFRpbWUgKGNkdiBhbmQgbWF4IENEVCBnaXZlbikKICAgCiAgIENCUihwY3IpICAgICAgICAgICAgIHBjciBiYW5kd2lkdGggYWx3YXlzIGF2YWlsYWJsZQotICBydFZCUihwY3Isc2NyLG1icykgICBzY3IgYmFuZHdpZHRoIGFsd2F5cyBhdmFpbGFibGUsIHVwdG8gcGNyIGF0IG1icyB0b28KKyAgcnRWQlIocGNyLHNjcixtYnMpICAgc2NyIGJhbmR3aWR0aCBhbHdheXMgYXZhaWxhYmxlLCB1cCB0byBwY3IgYXQgbWJzIHRvbwogICAKICAgTm9uIFJlYWwgVGltZQogICAKLSAgbnJ0VkJSKHBjcixzY3IsbWJzKSAgc2NyIGJhbmR3aWR0aCBhbHdheXMgYXZhaWxhYmxlLCB1cHRvIHBjciBhdCBtYnMgdG9vCisgIG5ydFZCUihwY3Isc2NyLG1icykgIHNjciBiYW5kd2lkdGggYWx3YXlzIGF2YWlsYWJsZSwgdXAgdG8gcGNyIGF0IG1icyB0b28KICAgVUJSKCkKLSAgQUJSKG1jcixwY3IpICAgICAgICAgbWNyIGJhbmR3aWR0aCBhbHdheXMgYXZhaWxhYmxlLCB1cHRvIHBjciAoZGVwZW5kaW5nKSB0b28KKyAgQUJSKG1jcixwY3IpICAgICAgICAgbWNyIGJhbmR3aWR0aCBhbHdheXMgYXZhaWxhYmxlLCB1cCB0byBwY3IgKGRlcGVuZGluZykgdG9vCiAgIAogICBtYnMgaXMgbWF4IGJ1cnN0IHNpemUgKGJ1Y2tldCkKICAgcGNyIGFuZCBzY3IgaGF2ZSBhc3NvY2lhdGVkIGNkdnQgdmFsdWVzCkBAIC05NDQsNyArOTQ0LDcgQEAKIC8vIHRvIGJlIGZpeGVkIHNvb24sIHNvIGRvIG5vdCBkZWZpbmUgVEFJTFJFQ1VTUklPTldPUktTIHVubGVzcyB5b3UKIC8vIGFyZSBzdXJlIGl0IGRvZXMgYXMgeW91IG1heSBvdGhlcndpc2Ugb3ZlcmZsb3cgdGhlIGtlcm5lbCBzdGFjay4KIAotLy8gZ2l2aW5nIHRoaXMgZm4gYSByZXR1cm4gdmFsdWUgd291bGQgaGVscCBHQ0MsIGFsbGVkZ2VkbHkKKy8vIGdpdmluZyB0aGlzIGZuIGEgcmV0dXJuIHZhbHVlIHdvdWxkIGhlbHAgR0NDLCBhbGxlZ2VkbHkKIAogc3RhdGljIHZvaWQgcnhfc2NoZWR1bGUgKGhyel9kZXYgKiBkZXYsIGludCBpcnEpIHsKICAgdW5zaWduZWQgaW50IHJ4X2J5dGVzOwpAQCAtMTAzNiw3ICsxMDM2LDcgQEAKIAkgIC8vIFZDIGxheWVyIHN0YXRzCiAJICBhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT5yeCk7CiAJICBfX25ldF90aW1lc3RhbXAoc2tiKTsKLQkgIC8vIGVuZCBvZiBvdXIgcmVzcG9uc2FiaWxpdHkKKwkgIC8vIGVuZCBvZiBvdXIgcmVzcG9uc2liaWxpdHkKIAkgIHZjYy0+cHVzaCAodmNjLCBza2IpOwogCX0KICAgICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2lkdDc3MjUyLmMgYi9kcml2ZXJzL2F0bS9pZHQ3NzI1Mi5jCmluZGV4IGJmYjdmZWUuLjA0OGY5OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2lkdDc3MjUyLmMKKysrIGIvZHJpdmVycy9hdG0vaWR0NzcyNTIuYwpAQCAtMzQ5NSw3ICszNDk1LDcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAlpZiAoZGV2LT5waHktPmlvY3RsID09IE5VTEwpIHsKLQkJcHJpbnRrKCIlczogTFQgaGFkIG5vIElPQ1RMIGZ1bnRpb24gZGVmaW5lZC5cbiIsIGNhcmQtPm5hbWUpOworCQlwcmludGsoIiVzOiBMVCBoYWQgbm8gSU9DVEwgZnVuY3Rpb24gZGVmaW5lZC5cbiIsIGNhcmQtPm5hbWUpOwogCQlkZWluaXRfY2FyZChjYXJkKTsKIAkJcmV0dXJuIC0xOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2lkdDc3MjUyLmggYi9kcml2ZXJzL2F0bS9pZHQ3NzI1Mi5oCmluZGV4IGY1M2E0M2EuLjNhODJjYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2lkdDc3MjUyLmgKKysrIGIvZHJpdmVycy9hdG0vaWR0NzcyNTIuaApAQCAtNzY2LDcgKzc2Niw3IEBACiAjZGVmaW5lIFNBUl9SQ1RFX0JVRkZTVEFUX01BU0sgMHgwMDAwMzAwMCAgLyogYnVmZmVyIHN0YXR1cyAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFNBUl9SQ1RFX0VGQ0kgICAgICAgICAgMHgwMDAwMDgwMCAgLyogRUZDSSBDb25nZXN0aW9uIGZsYWcgICAgICAgICAgICovCiAjZGVmaW5lIFNBUl9SQ1RFX0NMUCAgICAgICAgICAgMHgwMDAwMDQwMCAgLyogQ2VsbCBMb3NzIFByaW9yaXR5IGZsYWcgICAgICAgICovCi0jZGVmaW5lIFNBUl9SQ1RFX0NSQyAgICAgICAgICAgMHgwMDAwMDIwMCAgLyogUmVjaWV2ZWQgQ1JDIEVycm9yICAgICAgICAgICAgICovCisjZGVmaW5lIFNBUl9SQ1RFX0NSQyAgICAgICAgICAgMHgwMDAwMDIwMCAgLyogUmVjZWl2ZWQgQ1JDIEVycm9yICAgICAgICAgICAgICovCiAjZGVmaW5lIFNBUl9SQ1RFX0NFTExDTlRfTUFTSyAgMHgwMDAwMDFGRiAgLyogY2VsbCBDb3VudCAgICAgICAgICAgICAgICAgICAgICovCiAKICNkZWZpbmUgU0FSX1JDVEVfQUFMMCAgICAgICAgICAweDAwMDAwMDAwICAvKiBBQUwgdHlwZXMgZm9yIEFMTCBmaWVsZCAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2lwaGFzZS5jIGIvZHJpdmVycy9hdG0vaXBoYXNlLmMKaW5kZXggZDgwZDUxYi4uMWM2NzRhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vaXBoYXNlLmMKKysrIGIvZHJpdmVycy9hdG0vaXBoYXNlLmMKQEAgLTEwMjUsNyArMTAyNSw3IEBACiB9IAogICAKICAgCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlY2lldmluZyBzaWRlIHN0dWZmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8gIAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZWNlaXZpbmcgc2lkZSBzdHVmZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovICAKICAKIHN0YXRpYyB2b2lkIHJ4X2V4Y3BfcmN2ZChzdHJ1Y3QgYXRtX2RldiAqZGV2KSAgCiB7ICAKQEAgLTExOTUsNyArMTE5NSw3IEBACiAgIGlmIChzdGF0dXMgJiBSWF9QS1RfUkNWRCkgIAogICB7ICAKIAkvKiBkbyBzb21ldGhpbmcgKi8gIAotCS8qIEJhc2ljYWxseSByZWN2ZCBhbiBpbnRlcnJ1cHQgZm9yIHJlY2V2aW5nIGEgcGFja2V0LiAgCisJLyogQmFzaWNhbGx5IHJlY3ZkIGFuIGludGVycnVwdCBmb3IgcmVjZWl2aW5nIGEgcGFja2V0LiAgCiAJQSBkZXNjcmlwdG9yIHdvdWxkIGhhdmUgYmVlbiB3cml0dGVuIHRvIHRoZSBwYWNrZXQgY29tcGxldGUgICAKIAlxdWV1ZS4gR2V0IGFsbCB0aGUgZGVzY3JpcHRvcnMgYW5kIHNldCB1cCBkbWEgdG8gbW92ZSB0aGUgICAKIAlwYWNrZXRzIHRpbGwgdGhlIHBhY2tldCBjb21wbGV0ZSBxdWV1ZSBpcyBlbXB0eS4uICAKQEAgLTE4NTUsNyArMTg1NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOyAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKHZjYy0+cW9zLnR4dHAubWF4X3BjciA+IGlhZGV2LT5MaW5lUmF0ZSkgewotICAgICAgICAgICAgICAgICAgIElGX0NCUihwcmludGsoIlBDUiBpcyBub3QgYXZhaWxibGVcbiIpOykKKyAgICAgICAgICAgICAgICAgICBJRl9DQlIocHJpbnRrKCJQQ1IgaXMgbm90IGF2YWlsYWJsZVxuIik7KQogICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgdmMtPnR5cGUgPSBDQlI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9sYW5haS5jIGIvZHJpdmVycy9hdG0vbGFuYWkuYwppbmRleCA1Mjg4MGM4Li40ZThiYTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9sYW5haS5jCisrKyBiL2RyaXZlcnMvYXRtL2xhbmFpLmMKQEAgLTEyNTUsNyArMTI1NSw3IEBACiAJLyoKIAkgKiBTaW5jZSB0aGUgImJ1dHQgcmVnaXN0ZXIiIGlzIGEgc2hhcmVkIHJlc291bmNlIG9uIHRoZSBjYXJkIHdlCiAJICogc2VyaWFsaXplIGFsbCBhY2Nlc3NlcyB0byBpdCB0aHJvdWdoIHRoaXMgc3BpbmxvY2suICBUaGlzIGlzCi0JICogbW9zdGx5IGp1c3QgcGFyYW5vaWEgc2ljbmUgdGhlIHJlZ2lzdGVyIGlzIHJhcmVseSAiYnVzeSIgYW55d2F5CisJICogbW9zdGx5IGp1c3QgcGFyYW5vaWEgc2luY2UgdGhlIHJlZ2lzdGVyIGlzIHJhcmVseSAiYnVzeSIgYW55d2F5CiAJICogYnV0IGlzIG5lZWRlZCBmb3IgY29ycmVjdG5lc3MuCiAJICovCiAJc3Bpbl9sb2NrKCZsYW5haS0+ZW5kdHhsb2NrKTsKQEAgLTE5OTAsNyArMTk5MCw3IEBACiAKIC8qCiAgKiBXZSBfY2FuXyB1c2UgVkNJPT0wIGZvciBub3JtYWwgdHJhZmZpYywgYnV0IG9ubHkgZm9yIFVCUiAob3Igd2UnbGwKLSAqIGdldCBhIENCUlpFUk8gaW50ZXJydXB0KSwgYW5kIHdlIGNhbiB1c2UgaXQgb25seSBpZiBub29uZSBpcyByZWNlaXZpbmcKKyAqIGdldCBhIENCUlpFUk8gaW50ZXJydXB0KSwgYW5kIHdlIGNhbiB1c2UgaXQgb25seSBpZiBubyBvbmUgaXMgcmVjZWl2aW5nCiAgKiBBQUwwIHRyYWZmaWMgKHNpbmNlIHRoZXkgd2lsbCB1c2UgdGhlIHNhbWUgcXVldWUpIC0gYWNjb3JkaW5nIHRvIHRoZQogICogZG9jcyB3ZSBzaG91bGRuJ3QgZXZlbiB1c2UgaXQgZm9yIEFBTDAgdHJhZmZpYwogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F1eGRpc3BsYXkvY2ZhZzEyODY0Yi5jIGIvZHJpdmVycy9hdXhkaXNwbGF5L2NmYWcxMjg2NGIuYwppbmRleCA0OTc1ODU5Li40MWNlNGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F1eGRpc3BsYXkvY2ZhZzEyODY0Yi5jCisrKyBiL2RyaXZlcnMvYXV4ZGlzcGxheS9jZmFnMTI4NjRiLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY2ZhZzEyODY0Yl9yYXRlID0gQ09ORklHX0NGQUcxMjg2NEJfUkFURTsKIG1vZHVsZV9wYXJhbShjZmFnMTI4NjRiX3JhdGUsIHVpbnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhjZmFnMTI4NjRiX3JhdGUsCi0JIlJlZnJlc2ggcmF0ZSAoaGVydHpzKSIpOworCSJSZWZyZXNoIHJhdGUgKGhlcnR6KSIpOwogCiB1bnNpZ25lZCBpbnQgY2ZhZzEyODY0Yl9nZXRyYXRlKHZvaWQpCiB7CkBAIC02MCw3ICs2MCw3IEBACiAgKiBjZmFnMTI4NjRiIENvbW1hbmRzCiAgKgogICoJRSA9IEVuYWJsZSBzaWduYWwKLSAqCQlFdmVyeXRpbWUgRSBzd2l0Y2ggZnJvbSBsb3cgdG8gaGlnaCwKKyAqCQlFdmVyeSB0aW1lIEUgc3dpdGNoIGZyb20gbG93IHRvIGhpZ2gsCiAgKgkJY2ZhZzEyODY0Yi9rczAxMDggcmVhZHMgdGhlIGNvbW1hbmQvZGF0YS4KICAqCiAgKglDUzEgPSBGaXJzdCBrczAxMDhjb250cm9sbGVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwppbmRleCBmMDUxY2ZmLi45ZTBlNGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwpAQCAtMTQ5LDYgKzE0OSw3IEBACiAKIAlvZl9kZXZpY2Vfbm9kZV9wdXQoJnBhLT5wZGV2LmRldik7CiAJa2ZyZWUocGEtPnBkZXYuZGV2LnBsYXRmb3JtX2RhdGEpOworCWtmcmVlKHBhLT5wZGV2Lm1mZF9jZWxsKTsKIAlrZnJlZShwYS0+cGRldi5yZXNvdXJjZSk7CiAJa2ZyZWUocGEpOwogfQpAQCAtNzcxLDcgKzc3Miw3IEBACiAKICNlbmRpZiAvKiAhQ09ORklHX1NVU1BFTkQgKi8KIAotI2lmZGVmIENPTkZJR19ISUJFUk5BVElPTgorI2lmZGVmIENPTkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTCiAKIHN0YXRpYyBpbnQgcGxhdGZvcm1fcG1fZnJlZXplKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKQEAgLTkwOSw3ICs5MTAsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNlbHNlIC8qICFDT05GSUdfSElCRVJOQVRJT04gKi8KKyNlbHNlIC8qICFDT05GSUdfSElCRVJOQVRFX0NBTExCQUNLUyAqLwogCiAjZGVmaW5lIHBsYXRmb3JtX3BtX2ZyZWV6ZQkJTlVMTAogI2RlZmluZSBwbGF0Zm9ybV9wbV90aGF3CQlOVUxMCkBAIC05MjAsNyArOTIxLDcgQEAKICNkZWZpbmUgcGxhdGZvcm1fcG1fcG93ZXJvZmZfbm9pcnEJTlVMTAogI2RlZmluZSBwbGF0Zm9ybV9wbV9yZXN0b3JlX25vaXJxCU5VTEwKIAotI2VuZGlmIC8qICFDT05GSUdfSElCRVJOQVRJT04gKi8KKyNlbmRpZiAvKiAhQ09ORklHX0hJQkVSTkFURV9DQUxMQkFDS1MgKi8KIAogI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCmluZGV4IDA1MmRjNTMuLmFiZTNhYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwpAQCAtNjMsNiArNjMsNyBAQAogCWRldi0+cG93ZXIud2FrZXVwID0gTlVMTDsKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5wb3dlci5sb2NrKTsKIAlwbV9ydW50aW1lX2luaXQoZGV2KTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5wb3dlci5lbnRyeSk7CiB9CiAKIC8qKgpAQCAtMjMzLDcgKzIzNCw3IEBACiAJCX0KIAkJYnJlYWs7CiAjZW5kaWYgLyogQ09ORklHX1NVU1BFTkQgKi8KLSNpZmRlZiBDT05GSUdfSElCRVJOQVRJT04KKyNpZmRlZiBDT05GSUdfSElCRVJOQVRFX0NBTExCQUNLUwogCWNhc2UgUE1fRVZFTlRfRlJFRVpFOgogCWNhc2UgUE1fRVZFTlRfUVVJRVNDRToKIAkJaWYgKG9wcy0+ZnJlZXplKSB7CkBAIC0yNjAsNyArMjYxLDcgQEAKIAkJCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChvcHMtPnJlc3RvcmUsIGVycm9yKTsKIAkJfQogCQlicmVhazsKLSNlbmRpZiAvKiBDT05GSUdfSElCRVJOQVRJT04gKi8KKyNlbmRpZiAvKiBDT05GSUdfSElCRVJOQVRFX0NBTExCQUNLUyAqLwogCWRlZmF1bHQ6CiAJCWVycm9yID0gLUVJTlZBTDsKIAl9CkBAIC0zMDgsNyArMzA5LDcgQEAKIAkJfQogCQlicmVhazsKICNlbmRpZiAvKiBDT05GSUdfU1VTUEVORCAqLwotI2lmZGVmIENPTkZJR19ISUJFUk5BVElPTgorI2lmZGVmIENPTkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTCiAJY2FzZSBQTV9FVkVOVF9GUkVFWkU6CiAJY2FzZSBQTV9FVkVOVF9RVUlFU0NFOgogCQlpZiAob3BzLT5mcmVlemVfbm9pcnEpIHsKQEAgLTMzNSw3ICszMzYsNyBAQAogCQkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KG9wcy0+cmVzdG9yZV9ub2lycSwgZXJyb3IpOwogCQl9CiAJCWJyZWFrOwotI2VuZGlmIC8qIENPTkZJR19ISUJFUk5BVElPTiAqLworI2VuZGlmIC8qIENPTkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTICovCiAJZGVmYXVsdDoKIAkJZXJyb3IgPSAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCmluZGV4IDU0NTk3YzguLjMxNzJjNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYwpAQCAtNDQzLDcgKzQ0Myw3IEBACiAgKgogICogQ2hlY2sgaWYgdGhlIGRldmljZSdzIHJ1bi10aW1lIFBNIHN0YXR1cyBhbGxvd3MgaXQgdG8gYmUgcmVzdW1lZC4gIENhbmNlbAogICogYW55IHNjaGVkdWxlZCBvciBwZW5kaW5nIHJlcXVlc3RzLiAgSWYgYW5vdGhlciByZXN1bWUgaGFzIGJlZW4gc3RhcnRlZAotICogZWFybGllciwgZWl0aGVyIHJldHVybiBpbWVkaWF0ZWx5IG9yIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCwgZGVwZW5kaW5nIG9uIHRoZQorICogZWFybGllciwgZWl0aGVyIHJldHVybiBpbW1lZGlhdGVseSBvciB3YWl0IGZvciBpdCB0byBmaW5pc2gsIGRlcGVuZGluZyBvbiB0aGUKICAqIFJQTV9OT1dBSVQgYW5kIFJQTV9BU1lOQyBmbGFncy4gIFNpbWlsYXJseSwgaWYgdGhlcmUncyBhIHN1c3BlbmQgcnVubmluZyBpbgogICogcGFyYWxsZWwgd2l0aCB0aGlzIGZ1bmN0aW9uLCBlaXRoZXIgdGVsbCB0aGUgb3RoZXIgcHJvY2VzcyB0byByZXN1bWUgYWZ0ZXIKICAqIHN1c3BlbmRpbmcgKGRlZmVycmVkX3Jlc3VtZSkgb3Igd2FpdCBmb3IgaXQgdG8gZmluaXNoLiAgSWYgdGhlIFJQTV9BU1lOQwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jCmluZGV4IDQ1NzNjODMuLmFiYmJkMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci93YWtldXAuYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmMKQEAgLTI1OCw3ICsyNTgsNyBAQAogCWlmICghIWRldi0+cG93ZXIuY2FuX3dha2V1cCA9PSAhIWNhcGFibGUpCiAJCXJldHVybjsKIAotCWlmIChkZXZpY2VfaXNfcmVnaXN0ZXJlZChkZXYpKSB7CisJaWYgKGRldmljZV9pc19yZWdpc3RlcmVkKGRldikgJiYgIWxpc3RfZW1wdHkoJmRldi0+cG93ZXIuZW50cnkpKSB7CiAJCWlmIChjYXBhYmxlKSB7CiAJCQlpZiAod2FrZXVwX3N5c2ZzX2FkZChkZXYpKQogCQkJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9zeXMuYyBiL2RyaXZlcnMvYmFzZS9zeXMuYwppbmRleCBmYmU3MmRhLi5hY2RlOWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2Uvc3lzLmMKKysrIGIvZHJpdmVycy9iYXNlL3N5cy5jCkBAIC0xOTcsNyArMTk3LDcgQEAKIH0KIAogLyoqCi0gKglzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgYXV4aWxsYXJ5IGRyaXZlcgorICoJc3lzZGV2X2RyaXZlcl9yZWdpc3RlciAtIFJlZ2lzdGVyIGF1eGlsaWFyeSBkcml2ZXIKICAqCUBjbHM6CURldmljZSBjbGFzcyBkcml2ZXIgYmVsb25ncyB0by4KICAqCUBkcnY6CURyaXZlci4KICAqCkBAIC0yNTAsNyArMjUwLDcgQEAKIH0KIAogLyoqCi0gKglzeXNkZXZfZHJpdmVyX3VucmVnaXN0ZXIgLSBSZW1vdmUgYW4gYXV4aWxsYXJ5IGRyaXZlci4KKyAqCXN5c2Rldl9kcml2ZXJfdW5yZWdpc3RlciAtIFJlbW92ZSBhbiBhdXhpbGlhcnkgZHJpdmVyLgogICoJQGNsczoJQ2xhc3MgZHJpdmVyIGJlbG9uZ3MgdG8uCiAgKglAZHJ2OglEcml2ZXIuCiAgKi8KQEAgLTMwMiw3ICszMDIsNyBAQAogCQkgKiBjb2RlIHRoYXQgc2hvdWxkIGhhdmUgY2FsbGVkIHVzLgogCQkgKi8KIAotCQkvKiBOb3RpZnkgY2xhc3MgYXV4aWxsYXJ5IGRyaXZlcnMgKi8KKwkJLyogTm90aWZ5IGNsYXNzIGF1eGlsaWFyeSBkcml2ZXJzICovCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2LCAmY2xzLT5kcml2ZXJzLCBlbnRyeSkgewogCQkJaWYgKGRydi0+YWRkKQogCQkJCWRydi0+YWRkKHN5c2Rldik7CkBAIC0zMzUsNyArMzM1LDcgQEAKICAqCiAgKglMb29wIG92ZXIgZWFjaCBjbGFzcyBvZiBzeXN0ZW0gZGV2aWNlcywgYW5kIHRoZSBkZXZpY2VzIGluIGVhY2gKICAqCW9mIHRob3NlIGNsYXNzZXMuIEZvciBlYWNoIGRldmljZSwgd2UgY2FsbCB0aGUgc2h1dGRvd24gbWV0aG9kIGZvcgotICoJZWFjaCBkcml2ZXIgcmVnaXN0ZXJlZCBmb3IgdGhlIGRldmljZSAtIHRoZSBhdXhpbGxhcmllcywKKyAqCWVhY2ggZHJpdmVyIHJlZ2lzdGVyZWQgZm9yIHRoZSBkZXZpY2UgLSB0aGUgYXV4aWxpYXJpZXMsCiAgKglhbmQgdGhlIGNsYXNzIGRyaXZlci4KICAqCiAgKglOb3RlOiBUaGUgbGlzdCBpcyBpdGVyYXRlZCBpbiByZXZlcnNlIG9yZGVyLCBzbyB0aGF0IHdlIHNodXQgZG93bgpAQCAtMzYwLDcgKzM2MCw3IEBACiAJCQlzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqZHJ2OwogCQkJcHJfZGVidWcoIiAlc1xuIiwga29iamVjdF9uYW1lKCZzeXNkZXYtPmtvYmopKTsKIAotCQkJLyogQ2FsbCBhdXhpbGxhcnkgZHJpdmVycyBmaXJzdCAqLworCQkJLyogQ2FsbCBhdXhpbGlhcnkgZHJpdmVycyBmaXJzdCAqLwogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShkcnYsICZjbHMtPmRyaXZlcnMsIGVudHJ5KSB7CiAJCQkJaWYgKGRydi0+c2h1dGRvd24pCiAJCQkJCWRydi0+c2h1dGRvd24oc3lzZGV2KTsKQEAgLTM4NSw3ICszODUsNyBAQAogCVdBUk5fT05DRSghaXJxc19kaXNhYmxlZCgpLAogCQkiSW50ZXJydXB0cyBlbmFibGVkIGFmdGVyICVwRlxuIiwgY2xzLT5yZXN1bWUpOwogCi0JLyogQ2FsbCBhdXhpbGxhcnkgZHJpdmVycyBuZXh0LiAqLworCS8qIENhbGwgYXV4aWxpYXJ5IGRyaXZlcnMgbmV4dC4gKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRydiwgJmNscy0+ZHJpdmVycywgZW50cnkpIHsKIAkJaWYgKGRydi0+cmVzdW1lKQogCQkJZHJ2LT5yZXN1bWUoZGV2KTsKQEAgLTQzMiw3ICs0MzIsNyBAQAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN5c2RldiwgJmNscy0+a3NldC5saXN0LCBrb2JqLmVudHJ5KSB7CiAJCQlwcl9kZWJ1ZygiICVzXG4iLCBrb2JqZWN0X25hbWUoJnN5c2Rldi0+a29iaikpOwogCi0JCQkvKiBDYWxsIGF1eGlsbGFyeSBkcml2ZXJzIGZpcnN0ICovCisJCQkvKiBDYWxsIGF1eGlsaWFyeSBkcml2ZXJzIGZpcnN0ICovCiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRydiwgJmNscy0+ZHJpdmVycywgZW50cnkpIHsKIAkJCQlpZiAoZHJ2LT5zdXNwZW5kKSB7CiAJCQkJCXJldCA9IGRydi0+c3VzcGVuZChzeXNkZXYsIHN0YXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9zeXNjb3JlLmMgYi9kcml2ZXJzL2Jhc2Uvc3lzY29yZS5jCmluZGV4IDkwYWYyOTQuLmMxMjZkYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9zeXNjb3JlLmMKKysrIGIvZHJpdmVycy9iYXNlL3N5c2NvcmUuYwpAQCAtNzMsNiArNzMsNyBAQAogCiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHN5c2NvcmVfc3VzcGVuZCk7CiAKIC8qKgogICogc3lzY29yZV9yZXN1bWUgLSBFeGVjdXRlIGFsbCB0aGUgcmVnaXN0ZXJlZCBzeXN0ZW0gY29yZSByZXN1bWUgY2FsbGJhY2tzLgpAQCAtOTUsNiArOTYsNyBAQAogCQkJCSJJbnRlcnJ1cHRzIGVuYWJsZWQgYWZ0ZXIgJXBGXG4iLCBvcHMtPnJlc3VtZSk7CiAJCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHN5c2NvcmVfcmVzdW1lKTsKICNlbmRpZiAvKiBDT05GSUdfUE1fU0xFRVAgKi8KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jIGIvZHJpdmVycy9ibG9jay9EQUM5NjAuYwppbmRleCA3OTg4MjEwLi5lMDg2ZmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jCisrKyBiL2RyaXZlcnMvYmxvY2svREFDOTYwLmMKQEAgLTE3OTAsNyArMTc5MCw3IEBACiAgIHVuc2lnbmVkIHNob3J0IExvZ2ljYWxEZXZpY2VOdW1iZXIgPSAwOwogICBpbnQgTW9kZWxOYW1lTGVuZ3RoOwogCi0gIC8qIEdldCBkYXRhIGludG8gZG1hLWFibGUgYXJlYSwgdGhlbiBjb3B5IGludG8gcGVybWFuYW50IGxvY2F0aW9uICovCisgIC8qIEdldCBkYXRhIGludG8gZG1hLWFibGUgYXJlYSwgdGhlbiBjb3B5IGludG8gcGVybWFuZW50IGxvY2F0aW9uICovCiAgIGlmICghREFDOTYwX1YyX05ld0NvbnRyb2xsZXJJbmZvKENvbnRyb2xsZXIpKQogICAgIHJldHVybiBEQUM5NjBfRmFpbHVyZShDb250cm9sbGVyLCAiR0VUIENPTlRST0xMRVIgSU5GTyIpOwogICBtZW1jcHkoQ29udHJvbGxlckluZm8sIENvbnRyb2xsZXItPlYyLk5ld0NvbnRyb2xsZXJJbmZvcm1hdGlvbiwKQEAgLTI1NDcsNyArMjU0Nyw2IEBACiAJZGlzay0+bWFqb3IgPSBNYWpvck51bWJlcjsKIAlkaXNrLT5maXJzdF9taW5vciA9IG4gPDwgREFDOTYwX01heFBhcnRpdGlvbnNCaXRzOwogCWRpc2stPmZvcHMgPSAmREFDOTYwX0Jsb2NrRGV2aWNlT3BlcmF0aW9uczsKLQlkaXNrLT5ldmVudHMgPSBESVNLX0VWRU5UX01FRElBX0NIQU5HRTsKICAgIH0KICAgLyoKICAgICBJbmRpY2F0ZSB0aGUgQmxvY2sgRGV2aWNlIFJlZ2lzdHJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9hbWlmbG9wLmMgYi9kcml2ZXJzL2Jsb2NrL2FtaWZsb3AuYwppbmRleCA0NTZjMGNjLi44ZWJhODZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2FtaWZsb3AuYworKysgYi9kcml2ZXJzL2Jsb2NrL2FtaWZsb3AuYwpAQCAtMTczNiw3ICsxNzM2LDYgQEAKIAkJZGlzay0+bWFqb3IgPSBGTE9QUFlfTUFKT1I7CiAJCWRpc2stPmZpcnN0X21pbm9yID0gZHJpdmU7CiAJCWRpc2stPmZvcHMgPSAmZmxvcHB5X2ZvcHM7Ci0JCWRpc2stPmV2ZW50cyA9IERJU0tfRVZFTlRfTUVESUFfQ0hBTkdFOwogCQlzcHJpbnRmKGRpc2stPmRpc2tfbmFtZSwgImZkJWQiLCBkcml2ZSk7CiAJCWRpc2stPnByaXZhdGVfZGF0YSA9ICZ1bml0W2RyaXZlXTsKIAkJc2V0X2NhcGFjaXR5KGRpc2ssIDg4MCoyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYXRhZmxvcC5jIGIvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKaW5kZXggYzg3MWVhZS4uZWRlMTZjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKKysrIGIvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKQEAgLTE5NjQsNyArMTk2NCw2IEBACiAJCXVuaXRbaV0uZGlzay0+Zmlyc3RfbWlub3IgPSBpOwogCQlzcHJpbnRmKHVuaXRbaV0uZGlzay0+ZGlza19uYW1lLCAiZmQlZCIsIGkpOwogCQl1bml0W2ldLmRpc2stPmZvcHMgPSAmZmxvcHB5X2ZvcHM7Ci0JCXVuaXRbaV0uZGlzay0+ZXZlbnRzID0gRElTS19FVkVOVF9NRURJQV9DSEFOR0U7CiAJCXVuaXRbaV0uZGlzay0+cHJpdmF0ZV9kYXRhID0gJnVuaXRbaV07CiAJCXVuaXRbaV0uZGlzay0+cXVldWUgPSBibGtfaW5pdF9xdWV1ZShkb19mZF9yZXF1ZXN0LAogCQkJCQkmYXRhZmxvcF9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX2FjdGxvZy5jIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfYWN0bG9nLmMKaW5kZXggMmExNjQyYi4uYzY4MjhiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfYWN0bG9nLmMKKysrIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfYWN0bG9nLmMKQEAgLTMwLDcgKzMwLDcgQEAKIAogLyogV2UgbWFpbnRhaW4gYSB0cml2aWFsIGNoZWNrIHN1bSBpbiBvdXIgb24gZGlzayBhY3Rpdml0eSBsb2cuCiAgKiBXaXRoIHRoYXQgd2UgY2FuIGVuc3VyZSBjb3JyZWN0IG9wZXJhdGlvbiBldmVuIHdoZW4gdGhlIHN0b3JhZ2UKLSAqIGRldmljZSBtaWdodCBkbyBhIHBhcnRpYWwgKGxhc3QpIHNlY3RvciB3cml0ZSB3aGlsZSBsb29zaW5nIHBvd2VyLgorICogZGV2aWNlIG1pZ2h0IGRvIGEgcGFydGlhbCAobGFzdCkgc2VjdG9yIHdyaXRlIHdoaWxlIGxvc2luZyBwb3dlci4KICAqLwogc3RydWN0IF9fcGFja2VkIGFsX3RyYW5zYWN0aW9uIHsKIAl1MzIgICAgICAgbWFnaWM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9pbnQuaCBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX2ludC5oCmluZGV4IDgxMDMwZDguLmIyNjk5YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX2ludC5oCisrKyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX2ludC5oCkBAIC02MjIsNyArNjIyLDcgQEAKIC8qIG9uZSBiaXRtYXAgcGFja2V0LCBpbmNsdWRpbmcgdGhlIHBfaGVhZGVyLAogICogc2hvdWxkIGZpdCB3aXRoaW4gb25lIF9hcmNoaXRlY3R1cmUgaW5kZXBlbmRlbmRfIHBhZ2UuCiAgKiBzbyB3ZSBuZWVkIHRvIHVzZSB0aGUgZml4ZWQgc2l6ZSA0S2lCIHBhZ2Ugc2l6ZQotICogbW9zdCBhcmNoaXRlY2h0dXJlcyBoYXZlIHVzZWQgZm9yIGEgbG9uZyB0aW1lLgorICogbW9zdCBhcmNoaXRlY3R1cmVzIGhhdmUgdXNlZCBmb3IgYSBsb25nIHRpbWUuCiAgKi8KICNkZWZpbmUgQk1fUEFDS0VUX1BBWUxPQURfQllURVMgKDQwOTYgLSBzaXplb2Yoc3RydWN0IHBfaGVhZGVyODApKQogI2RlZmluZSBCTV9QQUNLRVRfV09SRFMgKEJNX1BBQ0tFVF9QQVlMT0FEX0JZVEVTL3NpemVvZihsb25nKSkKQEAgLTgxMCw3ICs4MTAsNyBAQAogCiAvKiBnbG9iYWwgZmxhZyBiaXRzICovCiBlbnVtIHsKLQlDUkVBVEVfQkFSUklFUiwJCS8qIG5leHQgUF9EQVRBIGlzIHByZWNlZWRlZCBieSBhIFBfQkFSUklFUiAqLworCUNSRUFURV9CQVJSSUVSLAkJLyogbmV4dCBQX0RBVEEgaXMgcHJlY2VkZWQgYnkgYSBQX0JBUlJJRVIgKi8KIAlTSUdOQUxfQVNFTkRFUiwJCS8qIHdoZXRoZXIgYXNlbmRlciB3YW50cyB0byBiZSBpbnRlcnJ1cHRlZCAqLwogCVNFTkRfUElORywJCS8qIHdoZXRoZXIgYXNlbmRlciBzaG91bGQgc2VuZCBhIHBpbmcgYXNhcCAqLwogCkBAIC0xMTI2LDcgKzExMjYsNyBAQAogCWludCBjX3N5bmNfcmF0ZTsgLyogY3VycmVudCByZXN5bmMgcmF0ZSBhZnRlciBzeW5jZXIgdGhyb3R0bGUgbWFnaWMgKi8KIAlzdHJ1Y3QgZmlmb19idWZmZXIgcnNfcGxhbl9zOyAvKiBjb3JyZWN0aW9uIHZhbHVlcyBvZiByZXN5bmMgcGxhbmVyICovCiAJaW50IHJzX2luX2ZsaWdodDsgLyogcmVzeW5jIHNlY3RvcnMgaW4gZmxpZ2h0ICh0byBwcm94eSwgaW4gcHJveHkgYW5kIGZyb20gcHJveHkpICovCi0JaW50IHJzX3BsYW5lZDsgICAgLyogcmVzeW5jIHNlY3RvcnMgYWxyZWFkeSBwbGFuZWQgKi8KKwlpbnQgcnNfcGxhbmVkOyAgICAvKiByZXN5bmMgc2VjdG9ycyBhbHJlYWR5IHBsYW5uZWQgKi8KIAlhdG9taWNfdCBhcF9pbl9mbGlnaHQ7IC8qIEFwcCBzZWN0b3JzIGluIGZsaWdodCAod2FpdGluZyBmb3IgYWNrKSAqLwogfTsKIApAQCAtMTE0NCw3ICsxMTQ0LDcgQEAKIAlyZXR1cm4gbWRldi0+bWlub3I7CiB9CiAKLS8qIHJldHVybnMgMSBpZiBpdCB3YXMgc3VjY2Vzc2Z1bGwsCisvKiByZXR1cm5zIDEgaWYgaXQgd2FzIHN1Y2Nlc3NmdWwsCiAgKiByZXR1cm5zIDAgaWYgdGhlcmUgd2FzIG5vIGRhdGEgc29ja2V0LgogICogc28gd2hlcmV2ZXIgeW91IGFyZSBnb2luZyB0byB1c2UgdGhlIGRhdGEuc29ja2V0LCBlLmcuIGRvCiAgKiBpZiAoIWRyYmRfZ2V0X2RhdGFfc29jayhtZGV2KSkKQEAgLTIwNzksNyArMjA3OSw3IEBACiAvKiBjb3VudHMgaG93IG1hbnkgcmVzeW5jLXJlbGF0ZWQgYW5zd2VycyB3ZSBzdGlsbCBleHBlY3QgZnJvbSB0aGUgcGVlcgogICoJCSAgICAgaW5jcmVhc2UJCQlkZWNyZWFzZQogICogQ19TWU5DX1RBUkdFVCBzZW5kcyBQX1JTX0RBVEFfUkVRVUVTVCAoYW5kIGV4cGVjdHMgUF9SU19EQVRBX1JFUExZKQotICogQ19TWU5DX1NPVVJDRSBzZW5kcyBQX1JTX0RBVEFfUkVQTFkgICAoYW5kIGV4cGVjdHMgUF9XUklURV9BQ0sgd2hpdGggSURfU1lOQ0VSKQorICogQ19TWU5DX1NPVVJDRSBzZW5kcyBQX1JTX0RBVEFfUkVQTFkgICAoYW5kIGV4cGVjdHMgUF9XUklURV9BQ0sgd2l0aCBJRF9TWU5DRVIpCiAgKgkJCQkJICAgKG9yIFBfTkVHX0FDSyB3aXRoIElEX1NZTkNFUikKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGluY19yc19wZW5kaW5nKHN0cnVjdCBkcmJkX2NvbmYgKm1kZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9tYWluLmMgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9tYWluLmMKaW5kZXggZGZjODVmMy4uNWI1MjVjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbWFpbi5jCisrKyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX21haW4uYwpAQCAtMTU2MSw3ICsxNTYxLDcgQEAKIAkJaWYgKGRyYmRfc2VuZF9zdGF0ZShtZGV2KSkKIAkJCWRldl93YXJuKERFViwgIk5vdGlmaWVkIHBlZXIgdGhhdCBJJ20gbm93IGRpc2tsZXNzLlxuIik7CiAJCS8qIGNvcnJlc3BvbmRpbmcgZ2V0X2xkZXYgaW4gX19kcmJkX3NldF9zdGF0ZQotCQkgKiB0aGlzIG1heSBmaW5hbHkgdHJpZ2dlciBkcmJkX2xkZXZfZGVzdHJveS4gKi8KKwkJICogdGhpcyBtYXkgZmluYWxseSB0cmlnZ2VyIGRyYmRfbGRldl9kZXN0cm95LiAqLwogCQlwdXRfbGRldihtZGV2KTsKIAl9CiAKQEAgLTM3MDYsNyArMzcwNiw3IEBACiAJYnVmZmVyID0gKHN0cnVjdCBtZXRhX2RhdGFfb25fZGlzayAqKXBhZ2VfYWRkcmVzcyhtZGV2LT5tZF9pb19wYWdlKTsKIAogCWlmICghZHJiZF9tZF9zeW5jX3BhZ2VfaW8obWRldiwgYmRldiwgYmRldi0+bWQubWRfb2Zmc2V0LCBSRUFEKSkgewotCQkvKiBOT1RFOiBjYW50IGRvIG5vcm1hbCBlcnJvciBwcm9jZXNzaW5nIGhlcmUgYXMgdGhpcyBpcworCQkvKiBOT1RFOiBjYW4ndCBkbyBub3JtYWwgZXJyb3IgcHJvY2Vzc2luZyBoZXJlIGFzIHRoaXMgaXMKIAkJICAgY2FsbGVkIEJFRk9SRSBkaXNrIGlzIGF0dGFjaGVkICovCiAJCWRldl9lcnIoREVWLCAiRXJyb3Igd2hpbGUgcmVhZGluZyBtZXRhZGF0YS5cbiIpOwogCQlydiA9IEVSUl9JT19NRF9ESVNLOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmMKaW5kZXggZmUxNTY0Yy4uZmQyNjY2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYworKysgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jCkBAIC04NjIsNyArODYyLDcgQEAKIAltc29jay0+c2stPnNrX3JjdnRpbWVvID0gbWRldi0+bmV0X2NvbmYtPnBpbmdfaW50KkhaOwogCiAJLyogd2UgZG9uJ3Qgd2FudCBkZWxheXMuCi0JICogd2UgdXNlIFRDUF9DT1JLIHdoZXJlIGFwcm9wcmlhdGUsIHRob3VnaCAqLworCSAqIHdlIHVzZSBUQ1BfQ09SSyB3aGVyZSBhcHByb3ByaWF0ZSwgdGhvdWdoICovCiAJZHJiZF90Y3Bfbm9kZWxheShzb2NrKTsKIAlkcmJkX3RjcF9ub2RlbGF5KG1zb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfdmxpLmggYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF92bGkuaAppbmRleCBmYzgyNDAwLi44Y2IxNTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF92bGkuaAorKysgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF92bGkuaApAQCAtMzIsNyArMzIsNyBAQAogICogdGhlIGJpdG1hcCB0cmFuc2ZlciB0aW1lIGNhbiB0YWtlIG11Y2ggdG9vIGxvbmcsCiAgKiBpZiB0cmFuc21pdHRlZCBpbiBwbGFpbiB0ZXh0LgogICoKLSAqIFdlIHRyeSB0byByZWR1Y2UgdGhlIHRyYW5zZmVyZWQgYml0bWFwIGluZm9ybWF0aW9uCisgKiBXZSB0cnkgdG8gcmVkdWNlIHRoZSB0cmFuc2ZlcnJlZCBiaXRtYXAgaW5mb3JtYXRpb24KICAqIGJ5IGVuY29kaW5nIHJ1bmxlbmd0aHMgb2YgYml0IHBvbGFyaXR5LgogICoKICAqIFdlIG5ldmVyIGFjdHVhbGx5IG5lZWQgdG8gZW5jb2RlIGEgInplcm8iIChydW5sZW5ndGhzIGFyZSBwb3NpdGl2ZSkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jIGIvZHJpdmVycy9ibG9jay9mbG9wcHkuYwppbmRleCAzMDFkN2E5Li5kYjhmODg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCisrKyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKQEAgLTQyMDUsNyArNDIwNSw2IEBACiAJCWRpc2tzW2RyXS0+bWFqb3IgPSBGTE9QUFlfTUFKT1I7CiAJCWRpc2tzW2RyXS0+Zmlyc3RfbWlub3IgPSBUT01JTk9SKGRyKTsKIAkJZGlza3NbZHJdLT5mb3BzID0gJmZsb3BweV9mb3BzOwotCQlkaXNrc1tkcl0tPmV2ZW50cyA9IERJU0tfRVZFTlRfTUVESUFfQ0hBTkdFOwogCQlzcHJpbnRmKGRpc2tzW2RyXS0+ZGlza19uYW1lLCAiZmQlZCIsIGRyKTsKIAogCQlpbml0X3RpbWVyKCZtb3Rvcl9vZmZfdGltZXJbZHJdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svaGQuYyBiL2RyaXZlcnMvYmxvY2svaGQuYwppbmRleCAzMGVjNmIzLi4wMDdjNjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2hkLmMKKysrIGIvZHJpdmVycy9ibG9jay9oZC5jCkBAIC03MzMsNyArNzMzLDcgQEAKIAkJICogdGhlIEJJT1Mgb3IgQ01PUy4gIFRoaXMgZG9lc24ndCB3b3JrIGFsbCB0aGF0IHdlbGwsCiAJCSAqIHNpbmNlIHRoaXMgYXNzdW1lcyB0aGF0IHRoaXMgaXMgYSBwcmltYXJ5IG9yIHNlY29uZGFyeQogCQkgKiBkcml2ZSwgYW5kIGlmIHdlJ3JlIHVzaW5nIHRoaXMgbGVnYWN5IGRyaXZlciwgaXQncwotCQkgKiBwcm9iYWJseSBhbiBhdXhpbGxpYXJ5IGNvbnRyb2xsZXIgYWRkZWQgdG8gcmVjb3ZlcgorCQkgKiBwcm9iYWJseSBhbiBhdXhpbGlhcnkgY29udHJvbGxlciBhZGRlZCB0byByZWNvdmVyCiAJCSAqIGxlZ2FjeSBkYXRhIG9mZiBhbiBTVC01MDYgZHJpdmUuICBFaXRoZXIgd2F5LCBpdCdzCiAJCSAqIGRlZmluaXRlbHkgc2FmZXN0IHRvIGhhdmUgdGhlIHVzZXIgZXhwbGljaXRseSBzcGVjaWZ5CiAJCSAqIHRoZSBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BjZC5jIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGNkLmMKaW5kZXggMmYyY2NmNi4uODY5MGUzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGNkLmMKKysrIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGNkLmMKQEAgLTMyMCw3ICszMjAsNiBAQAogCQlkaXNrLT5maXJzdF9taW5vciA9IHVuaXQ7CiAJCXN0cmNweShkaXNrLT5kaXNrX25hbWUsIGNkLT5uYW1lKTsJLyogdW1tLi4uICovCiAJCWRpc2stPmZvcHMgPSAmcGNkX2Jkb3BzOwotCQlkaXNrLT5ldmVudHMgPSBESVNLX0VWRU5UX01FRElBX0NIQU5HRTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BkLmMgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZC5jCmluZGV4IDIxZGZkYjcuLjg2OWU3NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BkLmMKKysrIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGQuYwpAQCAtODM3LDcgKzgzNyw2IEBACiAJcC0+Zm9wcyA9ICZwZF9mb3BzOwogCXAtPm1ham9yID0gbWFqb3I7CiAJcC0+Zmlyc3RfbWlub3IgPSAoZGlzayAtIHBkKSA8PCBQRF9CSVRTOwotCXAtPmV2ZW50cyA9IERJU0tfRVZFTlRfTUVESUFfQ0hBTkdFOwogCWRpc2stPmdkID0gcDsKIAlwLT5wcml2YXRlX2RhdGEgPSBkaXNrOwogCXAtPnF1ZXVlID0gcGRfcXVldWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZi5jIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGYuYwppbmRleCA3YWRlYjFlLi5mMjFiNTIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZi5jCisrKyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BmLmMKQEAgLTI5NCw3ICsyOTQsNiBAQAogCQlkaXNrLT5maXJzdF9taW5vciA9IHVuaXQ7CiAJCXN0cmNweShkaXNrLT5kaXNrX25hbWUsIHBmLT5uYW1lKTsKIAkJZGlzay0+Zm9wcyA9ICZwZl9mb3BzOwotCQlkaXNrLT5ldmVudHMgPSBESVNLX0VWRU5UX01FRElBX0NIQU5HRTsKIAkJaWYgKCEoKmRyaXZlc1t1bml0XSlbRF9QUlRdKQogCQkJcGZfZHJpdmVfY291bnQrKzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3JiZC5jIGIvZHJpdmVycy9ibG9jay9yYmQuYwppbmRleCAxNmRjMzY0Li45NzEyZmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3JiZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svcmJkLmMKQEAgLTkyLDYgKzkyLDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CiB9OwogCitzdHJ1Y3QgcmJkX3JlcV9jb2xsOworCiAvKgogICogYSBzaW5nbGUgaW8gcmVxdWVzdAogICovCkBAIC0xMDAsNiArMTAyLDI0IEBACiAJc3RydWN0IGJpbwkJKmJpbzsJCS8qIGNsb25lZCBiaW8gKi8KIAlzdHJ1Y3QgcGFnZQkJKipwYWdlczsJLyogbGlzdCBvZiB1c2VkIHBhZ2VzICovCiAJdTY0CQkJbGVuOworCWludAkJCWNvbGxfaW5kZXg7CisJc3RydWN0IHJiZF9yZXFfY29sbAkqY29sbDsKK307CisKK3N0cnVjdCByYmRfcmVxX3N0YXR1cyB7CisJaW50IGRvbmU7CisJaW50IHJjOworCXU2NCBieXRlczsKK307CisKKy8qCisgKiBhIGNvbGxlY3Rpb24gb2YgcmVxdWVzdHMKKyAqLworc3RydWN0IHJiZF9yZXFfY29sbCB7CisJaW50CQkJdG90YWw7CisJaW50CQkJbnVtX2RvbmU7CisJc3RydWN0IGtyZWYJCWtyZWY7CisJc3RydWN0IHJiZF9yZXFfc3RhdHVzCXN0YXR1c1swXTsKIH07CiAKIHN0cnVjdCByYmRfc25hcCB7CkBAIC00MTYsNiArNDM2LDE3IEBACiAJcmJkX2Rldi0+Y2xpZW50ID0gTlVMTDsKIH0KIAorLyoKKyAqIERlc3Ryb3kgcmVxdWVzdHMgY29sbGVjdGlvbgorICovCitzdGF0aWMgdm9pZCByYmRfY29sbF9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCByYmRfcmVxX2NvbGwgKmNvbGwgPQorCQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJiZF9yZXFfY29sbCwga3JlZik7CisKKwlkb3V0KCJyYmRfY29sbF9yZWxlYXNlICVwXG4iLCBjb2xsKTsKKwlrZnJlZShjb2xsKTsKK30KIAogLyoKICAqIENyZWF0ZSBhIG5ldyBoZWFkZXIgc3RydWN0dXJlLCB0cmFuc2xhdGUgaGVhZGVyIGZvcm1hdCBmcm9tIHRoZSBvbi1kaXNrCkBAIC01OTAsNiArNjIxLDE0IEBACiAJcmV0dXJuIGxlbjsKIH0KIAorc3RhdGljIGludCByYmRfZ2V0X251bV9zZWdtZW50cyhzdHJ1Y3QgcmJkX2ltYWdlX2hlYWRlciAqaGVhZGVyLAorCQkJCXU2NCBvZnMsIHU2NCBsZW4pCit7CisJdTY0IHN0YXJ0X3NlZyA9IG9mcyA+PiBoZWFkZXItPm9ial9vcmRlcjsKKwl1NjQgZW5kX3NlZyA9IChvZnMgKyBsZW4gLSAxKSA+PiBoZWFkZXItPm9ial9vcmRlcjsKKwlyZXR1cm4gZW5kX3NlZyAtIHN0YXJ0X3NlZyArIDE7Cit9CisKIC8qCiAgKiBiaW8gaGVscGVycwogICovCkBAIC03MzUsNiArNzc0LDUwIEBACiAJa2ZyZWUob3BzKTsKIH0KIAorc3RhdGljIHZvaWQgcmJkX2NvbGxfZW5kX3JlcV9pbmRleChzdHJ1Y3QgcmVxdWVzdCAqcnEsCisJCQkJICAgc3RydWN0IHJiZF9yZXFfY29sbCAqY29sbCwKKwkJCQkgICBpbnQgaW5kZXgsCisJCQkJICAgaW50IHJldCwgdTY0IGxlbikKK3sKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKKwlpbnQgbWluLCBtYXgsIGk7CisKKwlkb3V0KCJyYmRfY29sbF9lbmRfcmVxX2luZGV4ICVwIGluZGV4ICVkIHJldCAlZCBsZW4gJWxsZFxuIiwKKwkgICAgIGNvbGwsIGluZGV4LCByZXQsIGxlbik7CisKKwlpZiAoIXJxKQorCQlyZXR1cm47CisKKwlpZiAoIWNvbGwpIHsKKwkJYmxrX2VuZF9yZXF1ZXN0KHJxLCByZXQsIGxlbik7CisJCXJldHVybjsKKwl9CisKKwlxID0gcnEtPnE7CisKKwlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOworCWNvbGwtPnN0YXR1c1tpbmRleF0uZG9uZSA9IDE7CisJY29sbC0+c3RhdHVzW2luZGV4XS5yYyA9IHJldDsKKwljb2xsLT5zdGF0dXNbaW5kZXhdLmJ5dGVzID0gbGVuOworCW1heCA9IG1pbiA9IGNvbGwtPm51bV9kb25lOworCXdoaWxlIChtYXggPCBjb2xsLT50b3RhbCAmJiBjb2xsLT5zdGF0dXNbbWF4XS5kb25lKQorCQltYXgrKzsKKworCWZvciAoaSA9IG1pbjsgaTxtYXg7IGkrKykgeworCQlfX2Jsa19lbmRfcmVxdWVzdChycSwgY29sbC0+c3RhdHVzW2ldLnJjLAorCQkJCSAgY29sbC0+c3RhdHVzW2ldLmJ5dGVzKTsKKwkJY29sbC0+bnVtX2RvbmUrKzsKKwkJa3JlZl9wdXQoJmNvbGwtPmtyZWYsIHJiZF9jb2xsX3JlbGVhc2UpOworCX0KKwlzcGluX3VubG9ja19pcnEocS0+cXVldWVfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHJiZF9jb2xsX2VuZF9yZXEoc3RydWN0IHJiZF9yZXF1ZXN0ICpyZXEsCisJCQkgICAgIGludCByZXQsIHU2NCBsZW4pCit7CisJcmJkX2NvbGxfZW5kX3JlcV9pbmRleChyZXEtPnJxLCByZXEtPmNvbGwsIHJlcS0+Y29sbF9pbmRleCwgcmV0LCBsZW4pOworfQorCiAvKgogICogU2VuZCBjZXBoIG9zZCByZXF1ZXN0CiAgKi8KQEAgLTc0OSw2ICs4MzIsOCBAQAogCQkJICBpbnQgZmxhZ3MsCiAJCQkgIHN0cnVjdCBjZXBoX29zZF9yZXFfb3AgKm9wcywKIAkJCSAgaW50IG51bV9yZXBseSwKKwkJCSAgc3RydWN0IHJiZF9yZXFfY29sbCAqY29sbCwKKwkJCSAgaW50IGNvbGxfaW5kZXgsCiAJCQkgIHZvaWQgKCpyYmRfY2IpKHN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0ICpyZXEsCiAJCQkJCSBzdHJ1Y3QgY2VwaF9tc2cgKm1zZyksCiAJCQkgIHN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0ICoqbGluZ2VyX3JlcSwKQEAgLTc2MywxMiArODQ4LDIwIEBACiAJc3RydWN0IGNlcGhfb3NkX3JlcXVlc3RfaGVhZCAqcmVxaGVhZDsKIAlzdHJ1Y3QgcmJkX2ltYWdlX2hlYWRlciAqaGVhZGVyID0gJmRldi0+aGVhZGVyOwogCi0JcmV0ID0gLUVOT01FTTsKIAlyZXFfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpyZXFfZGF0YSksIEdGUF9OT0lPKTsKLQlpZiAoIXJlcV9kYXRhKQotCQlnb3RvIGRvbmU7CisJaWYgKCFyZXFfZGF0YSkgeworCQlpZiAoY29sbCkKKwkJCXJiZF9jb2xsX2VuZF9yZXFfaW5kZXgocnEsIGNvbGwsIGNvbGxfaW5kZXgsCisJCQkJCSAgICAgICAtRU5PTUVNLCBsZW4pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKLQlkb3V0KCJyYmRfZG9fcmVxdWVzdCBsZW49JWxsZCBvZnM9JWxsZFxuIiwgbGVuLCBvZnMpOworCWlmIChjb2xsKSB7CisJCXJlcV9kYXRhLT5jb2xsID0gY29sbDsKKwkJcmVxX2RhdGEtPmNvbGxfaW5kZXggPSBjb2xsX2luZGV4OworCX0KKworCWRvdXQoInJiZF9kb19yZXF1ZXN0IG9iaj0lcyBvZnM9JWxsZCBsZW49JWxsZFxuIiwgb2JqLCBsZW4sIG9mcyk7CiAKIAlkb3duX3JlYWQoJmhlYWRlci0+c25hcF9yd3NlbSk7CiAKQEAgLTc3Nyw5ICs4NzAsOSBAQAogCQkJCSAgICAgIG9wcywKIAkJCQkgICAgICBmYWxzZSwKIAkJCQkgICAgICBHRlBfTk9JTywgcGFnZXMsIGJpbyk7Ci0JaWYgKElTX0VSUihyZXEpKSB7CisJaWYgKCFyZXEpIHsKIAkJdXBfcmVhZCgmaGVhZGVyLT5zbmFwX3J3c2VtKTsKLQkJcmV0ID0gUFRSX0VSUihyZXEpOworCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGRvbmVfcGFnZXM7CiAJfQogCkBAIC04MjgsNyArOTIxLDggQEAKIAkJcmV0ID0gY2VwaF9vc2RjX3dhaXRfcmVxdWVzdCgmZGV2LT5jbGllbnQtPm9zZGMsIHJlcSk7CiAJCWlmICh2ZXIpCiAJCQkqdmVyID0gbGU2NF90b19jcHUocmVxLT5yX3JlYXNzZXJ0X3ZlcnNpb24udmVyc2lvbik7Ci0JCWRvdXQoInJlYXNzZXJ0X3Zlcj0lbGxkXG4iLCBsZTY0X3RvX2NwdShyZXEtPnJfcmVhc3NlcnRfdmVyc2lvbi52ZXJzaW9uKSk7CisJCWRvdXQoInJlYXNzZXJ0X3Zlcj0lbGxkXG4iLAorCQkgICAgIGxlNjRfdG9fY3B1KHJlcS0+cl9yZWFzc2VydF92ZXJzaW9uLnZlcnNpb24pKTsKIAkJY2VwaF9vc2RjX3B1dF9yZXF1ZXN0KHJlcSk7CiAJfQogCXJldHVybiByZXQ7CkBAIC04MzcsMTAgKzkzMSw4IEBACiAJYmlvX2NoYWluX3B1dChyZXFfZGF0YS0+YmlvKTsKIAljZXBoX29zZGNfcHV0X3JlcXVlc3QocmVxKTsKIGRvbmVfcGFnZXM6CisJcmJkX2NvbGxfZW5kX3JlcShyZXFfZGF0YSwgcmV0LCBsZW4pOwogCWtmcmVlKHJlcV9kYXRhKTsKLWRvbmU6Ci0JaWYgKHJxKQotCQlibGtfZW5kX3JlcXVlc3QocnEsIHJldCwgbGVuKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC04NzQsNyArOTY2LDcgQEAKIAkJYnl0ZXMgPSByZXFfZGF0YS0+bGVuOwogCX0KIAotCWJsa19lbmRfcmVxdWVzdChyZXFfZGF0YS0+cnEsIHJjLCBieXRlcyk7CisJcmJkX2NvbGxfZW5kX3JlcShyZXFfZGF0YSwgcmMsIGJ5dGVzKTsKIAogCWlmIChyZXFfZGF0YS0+YmlvKQogCQliaW9fY2hhaW5fcHV0KHJlcV9kYXRhLT5iaW8pOwpAQCAtOTM0LDYgKzEwMjYsNyBAQAogCQkJICBmbGFncywKIAkJCSAgb3BzLAogCQkJICAyLAorCQkJICBOVUxMLCAwLAogCQkJICBOVUxMLAogCQkJICBsaW5nZXJfcmVxLCB2ZXIpOwogCWlmIChyZXQgPCAwKQpAQCAtOTU5LDcgKzEwNTIsOSBAQAogCQkgICAgIHU2NCBzbmFwaWQsCiAJCSAgICAgaW50IG9wY29kZSwgaW50IGZsYWdzLCBpbnQgbnVtX3JlcGx5LAogCQkgICAgIHU2NCBvZnMsIHU2NCBsZW4sCi0JCSAgICAgc3RydWN0IGJpbyAqYmlvKQorCQkgICAgIHN0cnVjdCBiaW8gKmJpbywKKwkJICAgICBzdHJ1Y3QgcmJkX3JlcV9jb2xsICpjb2xsLAorCQkgICAgIGludCBjb2xsX2luZGV4KQogewogCWNoYXIgKnNlZ19uYW1lOwogCXU2NCBzZWdfb2ZzOwpAQCAtOTk1LDcgKzEwOTAsMTAgQEAKIAkJCSAgICAgZmxhZ3MsCiAJCQkgICAgIG9wcywKIAkJCSAgICAgbnVtX3JlcGx5LAorCQkJICAgICBjb2xsLCBjb2xsX2luZGV4LAogCQkJICAgICByYmRfcmVxX2NiLCAwLCBOVUxMKTsKKworCXJiZF9kZXN0cm95X29wcyhvcHMpOwogZG9uZToKIAlrZnJlZShzZWdfbmFtZSk7CiAJcmV0dXJuIHJldDsKQEAgLTEwMDgsMTMgKzExMDYsMTUgQEAKIAkJCSBzdHJ1Y3QgcmJkX2RldmljZSAqcmJkX2RldiwKIAkJCSBzdHJ1Y3QgY2VwaF9zbmFwX2NvbnRleHQgKnNuYXBjLAogCQkJIHU2NCBvZnMsIHU2NCBsZW4sCi0JCQkgc3RydWN0IGJpbyAqYmlvKQorCQkJIHN0cnVjdCBiaW8gKmJpbywKKwkJCSBzdHJ1Y3QgcmJkX3JlcV9jb2xsICpjb2xsLAorCQkJIGludCBjb2xsX2luZGV4KQogewogCXJldHVybiByYmRfZG9fb3AocnEsIHJiZF9kZXYsIHNuYXBjLCBDRVBIX05PU05BUCwKIAkJCSBDRVBIX09TRF9PUF9XUklURSwKIAkJCSBDRVBIX09TRF9GTEFHX1dSSVRFIHwgQ0VQSF9PU0RfRkxBR19PTkRJU0ssCiAJCQkgMiwKLQkJCSBvZnMsIGxlbiwgYmlvKTsKKwkJCSBvZnMsIGxlbiwgYmlvLCBjb2xsLCBjb2xsX2luZGV4KTsKIH0KIAogLyoKQEAgLTEwMjQsMTQgKzExMjQsMTYgQEAKIAkJCSBzdHJ1Y3QgcmJkX2RldmljZSAqcmJkX2RldiwKIAkJCSB1NjQgc25hcGlkLAogCQkJIHU2NCBvZnMsIHU2NCBsZW4sCi0JCQkgc3RydWN0IGJpbyAqYmlvKQorCQkJIHN0cnVjdCBiaW8gKmJpbywKKwkJCSBzdHJ1Y3QgcmJkX3JlcV9jb2xsICpjb2xsLAorCQkJIGludCBjb2xsX2luZGV4KQogewogCXJldHVybiByYmRfZG9fb3AocnEsIHJiZF9kZXYsIE5VTEwsCiAJCQkgKHNuYXBpZCA/IHNuYXBpZCA6IENFUEhfTk9TTkFQKSwKIAkJCSBDRVBIX09TRF9PUF9SRUFELAogCQkJIENFUEhfT1NEX0ZMQUdfUkVBRCwKIAkJCSAyLAotCQkJIG9mcywgbGVuLCBiaW8pOworCQkJIG9mcywgbGVuLCBiaW8sIGNvbGwsIGNvbGxfaW5kZXgpOwogfQogCiAvKgpAQCAtMTA2Myw3ICsxMTY1LDkgQEAKIHsKIAlzdHJ1Y3QgY2VwaF9vc2RfcmVxX29wICpvcHM7CiAJc3RydWN0IHBhZ2UgKipwYWdlcyA9IE5VTEw7Ci0JaW50IHJldCA9IHJiZF9jcmVhdGVfcndfb3BzKCZvcHMsIDEsIENFUEhfT1NEX09QX05PVElGWV9BQ0ssIDApOworCWludCByZXQ7CisKKwlyZXQgPSByYmRfY3JlYXRlX3J3X29wcygmb3BzLCAxLCBDRVBIX09TRF9PUF9OT1RJRllfQUNLLCAwKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMTA3Nyw2ICsxMTgxLDcgQEAKIAkJCSAgQ0VQSF9PU0RfRkxBR19SRUFELAogCQkJICBvcHMsCiAJCQkgIDEsCisJCQkgIE5VTEwsIDAsCiAJCQkgIHJiZF9zaW1wbGVfcmVxX2NiLCAwLCBOVUxMKTsKIAogCXJiZF9kZXN0cm95X29wcyhvcHMpOwpAQCAtMTI3NCw2ICsxMzc5LDIwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHN0cnVjdCByYmRfcmVxX2NvbGwgKnJiZF9hbGxvY19jb2xsKGludCBudW1fcmVxcykKK3sKKwlzdHJ1Y3QgcmJkX3JlcV9jb2xsICpjb2xsID0KKwkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYmRfcmVxX2NvbGwpICsKKwkJCSAgICAgICAgc2l6ZW9mKHN0cnVjdCByYmRfcmVxX3N0YXR1cykgKiBudW1fcmVxcywKKwkJCQlHRlBfQVRPTUlDKTsKKworCWlmICghY29sbCkKKwkJcmV0dXJuIE5VTEw7CisJY29sbC0+dG90YWwgPSBudW1fcmVxczsKKwlrcmVmX2luaXQoJmNvbGwtPmtyZWYpOworCXJldHVybiBjb2xsOworfQorCiAvKgogICogYmxvY2sgZGV2aWNlIHF1ZXVlIGNhbGxiYWNrCiAgKi8KQEAgLTEyOTEsNiArMTQxMCw4IEBACiAJCWJvb2wgZG9fd3JpdGU7CiAJCWludCBzaXplLCBvcF9zaXplID0gMDsKIAkJdTY0IG9mczsKKwkJaW50IG51bV9zZWdzLCBjdXJfc2VnID0gMDsKKwkJc3RydWN0IHJiZF9yZXFfY29sbCAqY29sbDsKIAogCQkvKiBwZWVrIGF0IHJlcXVlc3QgZnJvbSBibG9jayBsYXllciAqLwogCQlpZiAoIXJxKQpAQCAtMTMyMSw2ICsxNDQyLDE0IEBACiAJCSAgICAgZG9fd3JpdGUgPyAid3JpdGUiIDogInJlYWQiLAogCQkgICAgIHNpemUsIGJsa19ycV9wb3MocnEpICogNTEyVUxMKTsKIAorCQludW1fc2VncyA9IHJiZF9nZXRfbnVtX3NlZ21lbnRzKCZyYmRfZGV2LT5oZWFkZXIsIG9mcywgc2l6ZSk7CisJCWNvbGwgPSByYmRfYWxsb2NfY29sbChudW1fc2Vncyk7CisJCWlmICghY29sbCkgeworCQkJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKKwkJCV9fYmxrX2VuZF9yZXF1ZXN0X2FsbChycSwgLUVOT01FTSk7CisJCQlnb3RvIG5leHQ7CisJCX0KKwogCQlkbyB7CiAJCQkvKiBhIGJpbyBjbG9uZSB0byBiZSBwYXNzZWQgZG93biB0byBPU0QgcmVxICovCiAJCQlkb3V0KCJycS0+YmlvLT5iaV92Y250PSVkXG4iLCBycS0+YmlvLT5iaV92Y250KTsKQEAgLTEzMjgsMzUgKzE0NTcsNDEgQEAKIAkJCQkJCSAgcmJkX2Rldi0+aGVhZGVyLmJsb2NrX25hbWUsCiAJCQkJCQkgIG9mcywgc2l6ZSwKIAkJCQkJCSAgTlVMTCwgTlVMTCk7CisJCQlrcmVmX2dldCgmY29sbC0+a3JlZik7CiAJCQliaW8gPSBiaW9fY2hhaW5fY2xvbmUoJnJxX2JpbywgJm5leHRfYmlvLCAmYnAsCiAJCQkJCSAgICAgIG9wX3NpemUsIEdGUF9BVE9NSUMpOwogCQkJaWYgKCFiaW8pIHsKLQkJCQlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwotCQkJCV9fYmxrX2VuZF9yZXF1ZXN0X2FsbChycSwgLUVOT01FTSk7Ci0JCQkJZ290byBuZXh0OworCQkJCXJiZF9jb2xsX2VuZF9yZXFfaW5kZXgocnEsIGNvbGwsIGN1cl9zZWcsCisJCQkJCQkgICAgICAgLUVOT01FTSwgb3Bfc2l6ZSk7CisJCQkJZ290byBuZXh0X3NlZzsKIAkJCX0KIAorCiAJCQkvKiBpbml0IE9TRCBjb21tYW5kOiB3cml0ZSBvciByZWFkICovCiAJCQlpZiAoZG9fd3JpdGUpCiAJCQkJcmJkX3JlcV93cml0ZShycSwgcmJkX2RldiwKIAkJCQkJICAgICAgcmJkX2Rldi0+aGVhZGVyLnNuYXBjLAogCQkJCQkgICAgICBvZnMsCi0JCQkJCSAgICAgIG9wX3NpemUsIGJpbyk7CisJCQkJCSAgICAgIG9wX3NpemUsIGJpbywKKwkJCQkJICAgICAgY29sbCwgY3VyX3NlZyk7CiAJCQllbHNlCiAJCQkJcmJkX3JlcV9yZWFkKHJxLCByYmRfZGV2LAogCQkJCQkgICAgIGN1cl9zbmFwX2lkKHJiZF9kZXYpLAogCQkJCQkgICAgIG9mcywKLQkJCQkJICAgICBvcF9zaXplLCBiaW8pOworCQkJCQkgICAgIG9wX3NpemUsIGJpbywKKwkJCQkJICAgICBjb2xsLCBjdXJfc2VnKTsKIAorbmV4dF9zZWc6CiAJCQlzaXplIC09IG9wX3NpemU7CiAJCQlvZnMgKz0gb3Bfc2l6ZTsKIAorCQkJY3VyX3NlZysrOwogCQkJcnFfYmlvID0gbmV4dF9iaW87CiAJCX0gd2hpbGUgKHNpemUgPiAwKTsKKwkJa3JlZl9wdXQoJmNvbGwtPmtyZWYsIHJiZF9jb2xsX3JlbGVhc2UpOwogCiAJCWlmIChicCkKIAkJCWJpb19wYWlyX3JlbGVhc2UoYnApOwotCiAJCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7CiBuZXh0OgogCQlycSA9IGJsa19mZXRjaF9yZXF1ZXN0KHEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zd2ltLmMgYi9kcml2ZXJzL2Jsb2NrL3N3aW0uYwppbmRleCAyNGE0ODJmLi5mZDVhZGNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3N3aW0uYworKysgYi9kcml2ZXJzL2Jsb2NrL3N3aW0uYwpAQCAtODU4LDcgKzg1OCw2IEBACiAJCXN3ZC0+dW5pdFtkcml2ZV0uZGlzay0+Zmlyc3RfbWlub3IgPSBkcml2ZTsKIAkJc3ByaW50Zihzd2QtPnVuaXRbZHJpdmVdLmRpc2stPmRpc2tfbmFtZSwgImZkJWQiLCBkcml2ZSk7CiAJCXN3ZC0+dW5pdFtkcml2ZV0uZGlzay0+Zm9wcyA9ICZmbG9wcHlfZm9wczsKLQkJc3dkLT51bml0W2RyaXZlXS5kaXNrLT5ldmVudHMgPSBESVNLX0VWRU5UX01FRElBX0NIQU5HRTsKIAkJc3dkLT51bml0W2RyaXZlXS5kaXNrLT5wcml2YXRlX2RhdGEgPSAmc3dkLT51bml0W2RyaXZlXTsKIAkJc3dkLT51bml0W2RyaXZlXS5kaXNrLT5xdWV1ZSA9IHN3ZC0+cXVldWU7CiAJCXNldF9jYXBhY2l0eShzd2QtPnVuaXRbZHJpdmVdLmRpc2ssIDI4ODApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zd2ltMy5jIGIvZHJpdmVycy9ibG9jay9zd2ltMy5jCmluZGV4IDRjMTBmNTYuLjc3M2JmYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svc3dpbTMuYworKysgYi9kcml2ZXJzL2Jsb2NrL3N3aW0zLmMKQEAgLTExNjMsNyArMTE2Myw2IEBACiAJZGlzay0+bWFqb3IgPSBGTE9QUFlfTUFKT1I7CiAJZGlzay0+Zmlyc3RfbWlub3IgPSBpOwogCWRpc2stPmZvcHMgPSAmZmxvcHB5X2ZvcHM7Ci0JZGlzay0+ZXZlbnRzID0gRElTS19FVkVOVF9NRURJQV9DSEFOR0U7CiAJZGlzay0+cHJpdmF0ZV9kYXRhID0gJmZsb3BweV9zdGF0ZXNbaV07CiAJZGlzay0+cXVldWUgPSBzd2ltM19xdWV1ZTsKIAlkaXNrLT5mbGFncyB8PSBHRU5IRF9GTF9SRU1PVkFCTEU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3ViLmMgYi9kcml2ZXJzL2Jsb2NrL3ViLmMKaW5kZXggNjhiOTQzMC4uMGUzNzZkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay91Yi5jCisrKyBiL2RyaXZlcnMvYmxvY2svdWIuYwpAQCAtMjMzNCw3ICsyMzM0LDYgQEAKIAlkaXNrLT5tYWpvciA9IFVCX01BSk9SOwogCWRpc2stPmZpcnN0X21pbm9yID0gbHVuLT5pZCAqIFVCX1BBUlRTX1BFUl9MVU47CiAJZGlzay0+Zm9wcyA9ICZ1Yl9iZF9mb3BzOwotCWRpc2stPmV2ZW50cyA9IERJU0tfRVZFTlRfTUVESUFfQ0hBTkdFOwogCWRpc2stPnByaXZhdGVfZGF0YSA9IGx1bjsKIAlkaXNrLT5kcml2ZXJmc19kZXYgPSAmc2MtPmludGYtPmRldjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay92aW9kYXNkLmMgYi9kcml2ZXJzL2Jsb2NrL3Zpb2Rhc2QuYwppbmRleCBlMmZmNjk3Li45YTViMmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3Zpb2Rhc2QuYworKysgYi9kcml2ZXJzL2Jsb2NrL3Zpb2Rhc2QuYwpAQCAtOTQsNyArOTQsNyBAQAogCXsgMHgwMjA0LCBFSU8sICJVc2UgRXJyb3IiIH0sCiAJeyAweDAyMDUsIEVJTywgIlJlbGVhc2UgRXJyb3IiIH0sCiAJeyAweDAyMDYsIEVJTlZBTCwgIkludmFsaWQgRGlzayIgfSwKLQl7IDB4MDIwNywgRUJVU1ksICJDYW50IExvY2siIH0sCisJeyAweDAyMDcsIEVCVVNZLCAiQ2FuJ3QgTG9jayIgfSwKIAl7IDB4MDIwOCwgRUlPLCAiQWxyZWFkeSBMb2NrZWQiIH0sCiAJeyAweDAyMDksIEVJTywgIkFscmVhZHkgVW5sb2NrZWQiIH0sCiAJeyAweDAyMEEsIEVJTywgIkludmFsaWQgQXJnIiB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay94c3lzYWNlLmMgYi9kcml2ZXJzL2Jsb2NrL3hzeXNhY2UuYwppbmRleCA3MzM1NGIwLi42YzdmZDdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3hzeXNhY2UuYworKysgYi9kcml2ZXJzL2Jsb2NrL3hzeXNhY2UuYwpAQCAtNjIxLDcgKzYyMSw3IEBACiAJCWFjZV9kdW1wX21lbShhY2UtPmNmX2lkLCA1MTIpOwkvKiBEZWJ1ZzogRHVtcCBvdXQgZGlzayBJRCAqLwogCiAJCWlmIChhY2UtPmRhdGFfcmVzdWx0KSB7Ci0JCQkvKiBFcnJvciBvY2N1cmVkLCBkaXNhYmxlIHRoZSBkaXNrICovCisJCQkvKiBFcnJvciBvY2N1cnJlZCwgZGlzYWJsZSB0aGUgZGlzayAqLwogCQkJYWNlLT5tZWRpYV9jaGFuZ2UgPSAxOwogCQkJc2V0X2NhcGFjaXR5KGFjZS0+Z2QsIDApOwogCQkJZGV2X2VycihhY2UtPmRldiwgImVycm9yIGZldGNoaW5nIENGIGlkICglaSlcbiIsCkBAIC04MDEsNyArODAxLDcgQEAKIAl1MzIgc3JlZyA9IGFjZV9pbjMyKGFjZSwgQUNFX1NUQVRVUyk7CiAJdTE2IGNyZWcgPSBhY2VfaW4oYWNlLCBBQ0VfQ1RSTCk7CiAKLQkvKiBDaGVjayBmb3IgZXJyb3Igb2NjdXJhbmNlICovCisJLyogQ2hlY2sgZm9yIGVycm9yIG9jY3VycmVuY2UgKi8KIAlpZiAoKHNyZWcgJiAoQUNFX1NUQVRVU19DRkdFUlJPUiB8IEFDRV9TVEFUVVNfQ0ZDRVJST1IpKSAmJgogCSAgICAoY3JlZyAmIEFDRV9DVFJMX0VSUk9SSVJRKSkgewogCQlkZXZfZXJyKGFjZS0+ZGV2LCAidHJhbnNmZXIgZmFpbHVyZVxuIik7CkBAIC0xMDA1LDcgKzEwMDUsNiBAQAogCWFjZS0+Z2QtPm1ham9yID0gYWNlX21ham9yOwogCWFjZS0+Z2QtPmZpcnN0X21pbm9yID0gYWNlLT5pZCAqIEFDRV9OVU1fTUlOT1JTOwogCWFjZS0+Z2QtPmZvcHMgPSAmYWNlX2ZvcHM7Ci0JYWNlLT5nZC0+ZXZlbnRzID0gRElTS19FVkVOVF9NRURJQV9DSEFOR0U7CiAJYWNlLT5nZC0+cXVldWUgPSBhY2UtPnF1ZXVlOwogCWFjZS0+Z2QtPnByaXZhdGVfZGF0YSA9IGFjZTsKIAlzbnByaW50ZihhY2UtPmdkLT5kaXNrX25hbWUsIDMyLCAieHMlYyIsIGFjZS0+aWQgKyAnYScpOwpAQCAtMTE2OSw3ICsxMTY4LDcgQEAKIAkJCWlycSA9IGRldi0+cmVzb3VyY2VbaV0uc3RhcnQ7CiAJfQogCi0JLyogQ2FsbCB0aGUgYnVzLWluZGVwZW5kYW50IHNldHVwIGNvZGUgKi8KKwkvKiBDYWxsIHRoZSBidXMtaW5kZXBlbmRlbnQgc2V0dXAgY29kZSAqLwogCXJldHVybiBhY2VfYWxsb2MoJmRldi0+ZGV2LCBpZCwgcGh5c2FkZHIsIGlycSwgYnVzX3dpZHRoKTsKIH0KIApAQCAtMTIyMiw3ICsxMjIxLDcgQEAKIAlpZiAob2ZfZmluZF9wcm9wZXJ0eShvcC0+ZGV2Lm9mX25vZGUsICI4LWJpdCIsIE5VTEwpKQogCQlidXNfd2lkdGggPSBBQ0VfQlVTX1dJRFRIXzg7CiAKLQkvKiBDYWxsIHRoZSBidXMtaW5kZXBlbmRhbnQgc2V0dXAgY29kZSAqLworCS8qIENhbGwgdGhlIGJ1cy1pbmRlcGVuZGVudCBzZXR1cCBjb2RlICovCiAJcmV0dXJuIGFjZV9hbGxvYygmb3AtPmRldiwgaWQgPyBiZTMyX3RvX2NwdXAoaWQpIDogMCwKIAkJCQkJCXBoeXNhZGRyLCBpcnEsIGJ1c193aWR0aCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGwuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sbC5jCmluZGV4IDM4NTk1ZTcuLjdlNGI0MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sbC5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sbC5jCkBAIC0yMDcsNyArMjA3LDcgQEAKIAkJLyoKIAkJICogVGhpcyBzdGF0ZSBtZWFucyB0aGF0IGJvdGggdGhlIGhvc3QgYW5kIHRoZSBCUkYgY2hpcAogCQkgKiBoYXZlIHNpbXVsdGFuZW91c2x5IHNlbnQgYSB3YWtlLXVwLWluZGljYXRpb24gcGFja2V0LgotCQkgKiBUcmFkaXRpb25hbHksIGluIHRoaXMgY2FzZSwgcmVjZWl2aW5nIGEgd2FrZS11cC1pbmRpY2F0aW9uCisJCSAqIFRyYWRpdGlvbmFsbHksIGluIHRoaXMgY2FzZSwgcmVjZWl2aW5nIGEgd2FrZS11cC1pbmRpY2F0aW9uCiAJCSAqIHdhcyBlbm91Z2ggYW5kIGFuIGFkZGl0aW9uYWwgd2FrZS11cC1hY2sgd2Fzbid0IG5lZWRlZC4KIAkJICogVGhpcyBoYXMgY2hhbmdlZCB3aXRoIHRoZSBCUkY2MzUwLCB3aGljaCBkb2VzIHJlcXVpcmUgYW4KIAkJICogZXhwbGljaXQgd2FrZS11cC1hY2suIE90aGVyIEJSRiB2ZXJzaW9ucywgd2hpY2ggZG8gbm90CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMgYi9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKaW5kZXggZTJjNDhhNy4uNzVmYjk2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZHJvbS9jZHJvbS5jCisrKyBiL2RyaXZlcnMvY2Ryb20vY2Ryb20uYwpAQCAtMzAsNyArMzAsNyBAQAogICBjaGFuZ2Vsb2cgZm9yIHRoZSAxLnggc2VyaWVzLCBEYXZpZD8KIAogMi4wMCAgRGVjICAyLCAxOTk3IC0tIEVyaWsgQW5kZXJzZW4gPGFuZGVyc2VlQGRlYmlhbi5vcmc+Ci0gIC0tIE5ldyBtYWludGFpbmVyISBBcyBEYXZpZCBBLiB2YW4gTGVldXdlbiBoYXMgYmVlbiB0b28gYnVzeSB0byBhY3Rpdmx5CisgIC0tIE5ldyBtYWludGFpbmVyISBBcyBEYXZpZCBBLiB2YW4gTGVldXdlbiBoYXMgYmVlbiB0b28gYnVzeSB0byBhY3RpdmVseQogICBtYWludGFpbiBhbmQgaW1wcm92ZSB0aGlzIGRyaXZlciwgSSBhbSBub3cgY2Fycnlpbmcgb24gdGhlIHRvcmNoLiBJZgogICB5b3UgaGF2ZSBhIHByb2JsZW0gd2l0aCB0aGlzIGRyaXZlciwgcGxlYXNlIGZlZWwgZnJlZSB0byBjb250YWN0IG1lLgogCkBAIC05ODYsNiArOTg2LDkgQEAKIAogCWNkaW5mbyhDRF9PUEVOLCAiZW50ZXJpbmcgY2Ryb21fb3BlblxuIik7IAogCisJLyogb3BlbiBpcyBldmVudCBzeW5jaHJvbml6YXRpb24gcG9pbnQsIGNoZWNrIGV2ZW50cyBmaXJzdCAqLworCWNoZWNrX2Rpc2tfY2hhbmdlKGJkZXYpOworCiAJLyogaWYgdGhpcyB3YXMgYSBPX05PTkJMT0NLIG9wZW4gYW5kIHdlIHNob3VsZCBob25vciB0aGUgZmxhZ3MsCiAJICogZG8gYSBxdWljayBvcGVuIHdpdGhvdXQgZHJpdmUvZGlzYyBpbnRlZ3JpdHkgY2hlY2tzLiAqLwogCWNkaS0+dXNlX2NvdW50Kys7CkBAIC0xMDEyLDkgKzEwMTUsNiBAQAogCiAJY2RpbmZvKENEX09QRU4sICJVc2UgY291bnQgZm9yIFwiL2Rldi8lc1wiIG5vdyAlZFxuIiwKIAkJCWNkaS0+bmFtZSwgY2RpLT51c2VfY291bnQpOwotCS8qIERvIHRoaXMgb24gb3Blbi4gIERvbid0IHdhaXQgZm9yIG1vdW50LCBiZWNhdXNlIHRoZXkgbWlnaHQKLQkgICAgbm90IGJlIG1vdW50aW5nLCBidXQgb3BlbmluZyB3aXRoIE9fTk9OQkxPQ0sgKi8KLQljaGVja19kaXNrX2NoYW5nZShiZGV2KTsKIAlyZXR1cm4gMDsKIGVycl9yZWxlYXNlOgogCWlmIChDRFJPTV9DQU4oQ0RDX0xPQ0spICYmIGNkaS0+b3B0aW9ucyAmIENET19MT0NLKSB7CkBAIC0yNTIwLDcgKzI1MjAsNyBAQAogLyoKICAqIE9rLCB0aGlzIGlzIHdoZXJlIHByb2JsZW1zIHN0YXJ0LiAgVGhlIGN1cnJlbnQgaW50ZXJmYWNlIGZvciB0aGUKICAqIENEUk9NX0RJU0NfU1RBVFVTIGlvY3RsIGlzIGZsYXdlZC4gIEl0IG1ha2VzIHRoZSBmYWxzZSBhc3N1bXB0aW9uIHRoYXQKLSAqIENEcyBhcmUgYWxsIENEU19EQVRBXzEgb3IgYWxsIENEU19BVURJTywgZXRjLiAgVW5mb3J0dW5hdGx5LCB3aGlsZSB0aGlzCisgKiBDRHMgYXJlIGFsbCBDRFNfREFUQV8xIG9yIGFsbCBDRFNfQVVESU8sIGV0Yy4gIFVuZm9ydHVuYXRlbHksIHdoaWxlIHRoaXMKICAqIGlzIG9mdGVuIHRoZSBjYXNlLCBpdCBpcyBhbHNvIHZlcnkgY29tbW9uIGZvciBDRHMgdG8gaGF2ZSBzb21lIHRyYWNrcwogICogd2l0aCBkYXRhLCBhbmQgc29tZSB0cmFja3Mgd2l0aCBhdWRpby4gIEp1c3QgYmVjYXVzZSBJIGZlZWwgbGlrZSBpdCwKICAqIEkgZGVjbGFyZSB0aGUgZm9sbG93aW5nIHRvIGJlIHRoZSBiZXN0IHdheSB0byBjb3BlLiAgSWYgdGhlIENEIGhhcyBBTlkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vZ2Ryb20uYyBiL2RyaXZlcnMvY2Ryb20vZ2Ryb20uYwppbmRleCBiMmIwMzRmLi4zY2VhZjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL2dkcm9tLmMKKysrIGIvZHJpdmVycy9jZHJvbS9nZHJvbS5jCkBAIC04MDMsNyArODAzLDYgQEAKIAkJZ290byBwcm9iZV9mYWlsX2Nkcm9tX3JlZ2lzdGVyOwogCX0KIAlnZC5kaXNrLT5mb3BzID0gJmdkcm9tX2Jkb3BzOwotCWdkLmRpc2stPmV2ZW50cyA9IERJU0tfRVZFTlRfTUVESUFfQ0hBTkdFOwogCS8qIGxhdGNoIG9uIHRvIHRoZSBpbnRlcnJ1cHQgKi8KIAllcnIgPSBnZHJvbV9zZXRfaW50ZXJydXB0X2hhbmRsZXJzKCk7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vdmlvY2QuYyBiL2RyaXZlcnMvY2Ryb20vdmlvY2QuYwppbmRleCA0ZTg3NGM1Li5lNDI3ZmJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMKKysrIGIvZHJpdmVycy9jZHJvbS92aW9jZC5jCkBAIC02MjYsNyArNjI2LDYgQEAKIAlnZW5kaXNrLT5xdWV1ZSA9IHE7CiAJZ2VuZGlzay0+Zm9wcyA9ICZ2aW9jZF9mb3BzOwogCWdlbmRpc2stPmZsYWdzID0gR0VOSERfRkxfQ0R8R0VOSERfRkxfUkVNT1ZBQkxFOwotCWdlbmRpc2stPmV2ZW50cyA9IERJU0tfRVZFTlRfTUVESUFfQ0hBTkdFOwogCXNldF9jYXBhY2l0eShnZW5kaXNrLCAwKTsKIAlnZW5kaXNrLT5wcml2YXRlX2RhdGEgPSBkOwogCWQtPnZpb2NkX2Rpc2sgPSBnZW5kaXNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hZ3AuaCBiL2RyaXZlcnMvY2hhci9hZ3AvYWdwLmgKaW5kZXggM2U2N2RkZC4uOTIzZjk5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hZ3AuaAorKysgYi9kcml2ZXJzL2NoYXIvYWdwL2FncC5oCkBAIC0yMzcsNyArMjM3LDcgQEAKIAogbG9uZyBjb21wYXRfYWdwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAKLS8qIENoaXBzZXQgaW5kZXBlbmRhbnQgcmVnaXN0ZXJzIChmcm9tIEFHUCBTcGVjKSAqLworLyogQ2hpcHNldCBpbmRlcGVuZGVudCByZWdpc3RlcnMgKGZyb20gQUdQIFNwZWMpICovCiAjZGVmaW5lIEFHUF9BUEJBU0UJMHgxMAogCiAjZGVmaW5lIEFHUFNUQVQJCTB4NApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYwppbmRleCA0NTY4MWMwLi5mN2U4ODc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYwpAQCAtMjcyLDcgKzI3Miw3IEBACiAgKiBUaGlzIHJvdXRpbmUgY291bGQgYmUgaW1wbGVtZW50ZWQgYnkgdGFraW5nIHRoZSBhZGRyZXNzZXMKICAqIHdyaXR0ZW4gdG8gdGhlIEdBVFQsIGFuZCBmbHVzaGluZyB0aGVtIGluZGl2aWR1YWxseS4gIEhvd2V2ZXIKICAqIGN1cnJlbnRseSBpdCBqdXN0IGZsdXNoZXMgdGhlIHdob2xlIHRhYmxlLiAgV2hpY2ggaXMgcHJvYmFibHkKLSAqIG1vcmUgZWZmaWNlbnQsIHNpbmNlIGFncF9tZW1vcnkgYmxvY2tzIGNhbiBiZSBhIGxhcmdlIG51bWJlciBvZgorICogbW9yZSBlZmZpY2llbnQsIHNpbmNlIGFncF9tZW1vcnkgYmxvY2tzIGNhbiBiZSBhIGxhcmdlIG51bWJlciBvZgogICogZW50cmllcy4KICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2dlbmVyaWMuYyBiL2RyaXZlcnMvY2hhci9hZ3AvZ2VuZXJpYy5jCmluZGV4IDAxMmNiYTAuLmIwNzI2NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvZ2VuZXJpYy5jCkBAIC0xMTUsNiArMTE1LDkgQEAKIAlzdHJ1Y3QgYWdwX21lbW9yeSAqbmV3OwogCXVuc2lnbmVkIGxvbmcgYWxsb2Nfc2l6ZSA9IG51bV9hZ3BfcGFnZXMqc2l6ZW9mKHN0cnVjdCBwYWdlICopOwogCisJaWYgKElOVF9NQVgvc2l6ZW9mKHN0cnVjdCBwYWdlICopIDwgbnVtX2FncF9wYWdlcykKKwkJcmV0dXJuIE5VTEw7CisKIAluZXcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWdwX21lbW9yeSksIEdGUF9LRVJORUwpOwogCWlmIChuZXcgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CkBAIC0yMzQsMTEgKzIzNywxNCBAQAogCWludCBzY3JhdGNoX3BhZ2VzOwogCXN0cnVjdCBhZ3BfbWVtb3J5ICpuZXc7CiAJc2l6ZV90IGk7CisJaW50IGN1cl9tZW1vcnk7CiAKIAlpZiAoIWJyaWRnZSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoKGF0b21pY19yZWFkKCZicmlkZ2UtPmN1cnJlbnRfbWVtb3J5X2FncCkgKyBwYWdlX2NvdW50KSA+IGJyaWRnZS0+bWF4X21lbW9yeV9hZ3ApCisJY3VyX21lbW9yeSA9IGF0b21pY19yZWFkKCZicmlkZ2UtPmN1cnJlbnRfbWVtb3J5X2FncCk7CisJaWYgKChjdXJfbWVtb3J5ICsgcGFnZV9jb3VudCA+IGJyaWRnZS0+bWF4X21lbW9yeV9hZ3ApIHx8CisJICAgIChjdXJfbWVtb3J5ICsgcGFnZV9jb3VudCA8IHBhZ2VfY291bnQpKQogCQlyZXR1cm4gTlVMTDsKIAogCWlmICh0eXBlID49IEFHUF9VU0VSX1RZUEVTKSB7CkBAIC0xMDg5LDggKzEwOTUsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKiBBSzogY291bGQgd3JhcCAqLwotCWlmICgocGdfc3RhcnQgKyBtZW0tPnBhZ2VfY291bnQpID4gbnVtX2VudHJpZXMpCisJaWYgKCgocGdfc3RhcnQgKyBtZW0tPnBhZ2VfY291bnQpID4gbnVtX2VudHJpZXMpIHx8CisJICAgICgocGdfc3RhcnQgKyBtZW0tPnBhZ2VfY291bnQpIDwgcGdfc3RhcnQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWogPSBwZ19zdGFydDsKQEAgLTExMjQsNyArMTEzMCw3IEBACiB7CiAJc2l6ZV90IGk7CiAJc3RydWN0IGFncF9icmlkZ2VfZGF0YSAqYnJpZGdlOwotCWludCBtYXNrX3R5cGU7CisJaW50IG1hc2tfdHlwZSwgbnVtX2VudHJpZXM7CiAKIAlicmlkZ2UgPSBtZW0tPmJyaWRnZTsKIAlpZiAoIWJyaWRnZSkKQEAgLTExMzYsNiArMTE0MiwxMSBAQAogCWlmICh0eXBlICE9IG1lbS0+dHlwZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwludW1fZW50cmllcyA9IGFncF9udW1fZW50cmllcygpOworCWlmICgoKHBnX3N0YXJ0ICsgbWVtLT5wYWdlX2NvdW50KSA+IG51bV9lbnRyaWVzKSB8fAorCSAgICAoKHBnX3N0YXJ0ICsgbWVtLT5wYWdlX2NvdW50KSA8IHBnX3N0YXJ0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAltYXNrX3R5cGUgPSBicmlkZ2UtPmRyaXZlci0+YWdwX3R5cGVfdG9fbWFza190eXBlKGJyaWRnZSwgdHlwZSk7CiAJaWYgKG1hc2tfdHlwZSAhPSAwKSB7CiAJCS8qIFRoZSBnZW5lcmljIHJvdXRpbmVzIGtub3cgbm90aGluZyBvZiBtZW1vcnkgdHlwZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3Avc3dvcmtzLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9zd29ya3MtYWdwLmMKaW5kZXggMTNhY2FhZi4uZjAyZjliMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9zd29ya3MtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9zd29ya3MtYWdwLmMKQEAgLTIyOSw3ICsyMjksNyBAQAogICogVGhpcyByb3V0aW5lIGNvdWxkIGJlIGltcGxlbWVudGVkIGJ5IHRha2luZyB0aGUgYWRkcmVzc2VzCiAgKiB3cml0dGVuIHRvIHRoZSBHQVRULCBhbmQgZmx1c2hpbmcgdGhlbSBpbmRpdmlkdWFsbHkuICBIb3dldmVyCiAgKiBjdXJyZW50bHkgaXQganVzdCBmbHVzaGVzIHRoZSB3aG9sZSB0YWJsZS4gIFdoaWNoIGlzIHByb2JhYmx5Ci0gKiBtb3JlIGVmZmljZW50LCBzaW5jZSBhZ3BfbWVtb3J5IGJsb2NrcyBjYW4gYmUgYSBsYXJnZSBudW1iZXIgb2YKKyAqIG1vcmUgZWZmaWNpZW50LCBzaW5jZSBhZ3BfbWVtb3J5IGJsb2NrcyBjYW4gYmUgYSBsYXJnZSBudW1iZXIgb2YKICAqIGVudHJpZXMuCiAgKi8KIHN0YXRpYyB2b2lkIHNlcnZlcndvcmtzX3RsYmZsdXNoKHN0cnVjdCBhZ3BfbWVtb3J5ICp0ZW1wKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYwppbmRleCBkZjY3ZTgwLi44YmMzODQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYwpAQCAtNDAwLDcgKzQwMCw3IEBACiAJICogdGhlIHRyYWRpdGlvbmFsIEFHUCB3aGljaCByZXNpZGVzIG9ubHkgaW4gY2hpcHNldC4gQUdQIGlzIHVzZWQKIAkgKiBieSAzRCBkcml2ZXIgd2hpY2ggd2Fzbid0IGF2YWlsYWJsZSBmb3IgdGhlIFZUMzMzNiBhbmQgVlQzMzY0CiAJICogZ2VuZXJhdGlvbiB1bnRpbCBub3cuICBVbmZvcnR1bmF0ZWx5LCBieSB0ZXN0aW5nLCBWVDMzNjQgd29ya3MKLQkgKiBidXQgVlQzMzM2IGRvZXNuJ3QuIC0gZXhwbGFpbmF0aW9uIGZyb20gdmlhLCBqdXN0IGxlYXZlIHRoaXMgYXMKKwkgKiBidXQgVlQzMzM2IGRvZXNuJ3QuIC0gZXhwbGFuYXRpb24gZnJvbSB2aWEsIGp1c3QgbGVhdmUgdGhpcyBhcwogCSAqIGFzIGEgcGxhY2Vob2xkZXIgdG8gYXZvaWQgZnV0dXJlIHBhdGNoZXMgYWRkaW5nIGl0IGJhY2sgaW4uCiAJICovCiAjaWYgMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9uMi1kcnYuYyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vbjItZHJ2LmMKaW5kZXggNDNhYzYxOS4uYWM2NzM5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9uMi1kcnYuYworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL24yLWRydi5jCkBAIC02MTksMTUgKzYxOSwxOCBAQAogCQlwcl9pbmZvKCIlcyIsIHZlcnNpb24pOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBuMnJuZ19tYXRjaFtdOwogc3RhdGljIGludCBfX2RldmluaXQgbjJybmdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3ApCiB7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CiAJaW50IHZpY3RvcmlhX2ZhbGxzOwogCWludCBlcnIgPSAtRU5PTUVNOwogCXN0cnVjdCBuMnJuZyAqbnA7CiAKLQlpZiAoIW9wLT5kZXYub2ZfbWF0Y2gpCisJbWF0Y2ggPSBvZl9tYXRjaF9kZXZpY2UobjJybmdfbWF0Y2gsICZvcC0+ZGV2KTsKKwlpZiAoIW1hdGNoKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl2aWN0b3JpYV9mYWxscyA9IChvcC0+ZGV2Lm9mX21hdGNoLT5kYXRhICE9IE5VTEwpOworCXZpY3RvcmlhX2ZhbGxzID0gKG1hdGNoLT5kYXRhICE9IE5VTEwpOwogCiAJbjJybmdfZHJpdmVyX3ZlcnNpb24oKTsKIAlucCA9IGt6YWxsb2Moc2l6ZW9mKCpucCksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9wb3dlcm9mZi5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9wb3dlcm9mZi5jCmluZGV4IDBkZWM1ZGEuLjJlZmExNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfcG93ZXJvZmYuYworKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3Bvd2Vyb2ZmLmMKQEAgLTEyMiw3ICsxMjIsNyBAQAogCiAKIC8qCi0gKiBDb2RlIHRvIHNlbmQgYSBtZXNzYWdlIGFuZCB3YWl0IGZvciB0aGUgcmVwb25zZS4KKyAqIENvZGUgdG8gc2VuZCBhIG1lc3NhZ2UgYW5kIHdhaXQgZm9yIHRoZSByZXNwb25zZS4KICAqLwogCiBzdGF0aWMgdm9pZCByZWNlaXZlX2hhbmRsZXIoc3RydWN0IGlwbWlfcmVjdl9tc2cgKnJlY3ZfbXNnLCB2b2lkICpoYW5kbGVyX2RhdGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCmluZGV4IGQyOGI0ODQuLjY0YzZiODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCkBAIC0zMzksNyArMzM5LDcgQEAKIAkJY0NvZGUgPSBJUE1JX0VSUl9VTlNQRUNJRklFRDsKIAkvKiBlbHNlIHVzZSBpdCBhcyBpcyAqLwogCi0JLyogTWFrZSBpdCBhIHJlcG9uc2UgKi8KKwkvKiBNYWtlIGl0IGEgcmVzcG9uc2UgKi8KIAltc2ctPnJzcFswXSA9IG1zZy0+ZGF0YVswXSB8IDQ7CiAJbXNnLT5yc3BbMV0gPSBtc2ctPmRhdGFbMV07CiAJbXNnLT5yc3BbMl0gPSBjQ29kZTsKQEAgLTI1NTQsOSArMjU1NCwxMSBAQAogfTsKICNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGlwbWlfbWF0Y2hbXTsKIHN0YXRpYyBpbnQgX19kZXZpbml0IGlwbWlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogI2lmZGVmIENPTkZJR19PRgorCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCXN0cnVjdCBzbWlfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgcmVzb3VyY2UgcmVzb3VyY2U7CiAJY29uc3QgX19iZTMyICpyZWdzaXplLCAqcmVnc3BhY2luZywgKnJlZ3NoaWZ0OwpAQCAtMjU2Niw3ICsyNTY4LDggQEAKIAogCWRldl9pbmZvKCZkZXYtPmRldiwgInByb2JpbmcgdmlhIGRldmljZSB0cmVlXG4iKTsKIAotCWlmICghZGV2LT5kZXYub2ZfbWF0Y2gpCisJbWF0Y2ggPSBvZl9tYXRjaF9kZXZpY2UoaXBtaV9tYXRjaCwgJmRldi0+ZGV2KTsKKwlpZiAoIW1hdGNoKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyZXNvdXJjZSk7CkBAIC0yNjAxLDcgKzI2MDQsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlpbmZvLT5zaV90eXBlCQk9IChlbnVtIHNpX3R5cGUpIGRldi0+ZGV2Lm9mX21hdGNoLT5kYXRhOworCWluZm8tPnNpX3R5cGUJCT0gKGVudW0gc2lfdHlwZSkgbWF0Y2gtPmRhdGE7CiAJaW5mby0+YWRkcl9zb3VyY2UJPSBTSV9ERVZJQ0VUUkVFOwogCWluZm8tPmlycV9zZXR1cAkJPSBzdGRfaXJxX3NldHVwOwogCkBAIC0yOTI3LDcgKzI5MzAsNyBAQAogewogCXN0cnVjdCBpcG1pX3NtaV9tc2cgKm1zZyA9IHNtaV9pbmZvLT5jdXJyX21zZzsKIAotCS8qIE1ha2UgaXQgYSByZXBvbnNlICovCisJLyogTWFrZSBpdCBhIHJlc3BvbnNlICovCiAJbXNnLT5yc3BbMF0gPSBtc2ctPmRhdGFbMF0gfCA0OwogCW1zZy0+cnNwWzFdID0gbXNnLT5kYXRhWzFdOwogCW1zZy0+cnNwWzJdID0gQ0FOTk9UX1JFVFVSTl9SRVFVRVNURURfTEVOR1RIOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21iY3MuaCBiL2RyaXZlcnMvY2hhci9tYmNzLmgKaW5kZXggYmE2NzE1OC4uMWEzNjg4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21iY3MuaAorKysgYi9kcml2ZXJzL2NoYXIvbWJjcy5oCkBAIC0zNiwxMyArMzYsMTMgQEAKICNkZWZpbmUgTUJDU19SRF9ETUFfQ1RSTAkweDAxMTAJLyogUmVhZCBETUEgQ29udHJvbCAqLwogI2RlZmluZSBNQkNTX1JEX0RNQV9BTU9fREVTVAkweDAxMTgJLyogUmVhZCBETUEgQU1PIERlc3RpbmF0aW9uICovCiAjZGVmaW5lIE1CQ1NfUkRfRE1BX0lOVF9ERVNUCTB4MDEyMAkvKiBSZWFkIERNQSBJbnRlcnJ1cHQgRGVzdGluYXRpb24gKi8KLSNkZWZpbmUgTUJDU19SRF9ETUFfQVVYX1NUQVQJMHgwMTMwCS8qIFJlYWQgRE1BIEF1eGlsbGFyeSBTdGF0dXMgKi8KKyNkZWZpbmUgTUJDU19SRF9ETUFfQVVYX1NUQVQJMHgwMTMwCS8qIFJlYWQgRE1BIEF1eGlsaWFyeSBTdGF0dXMgKi8KICNkZWZpbmUgTUJDU19XUl9ETUFfU1lTX0FERFIJMHgwMjAwCS8qIFdyaXRlIERNQSBTeXN0ZW0gQWRkcmVzcyAqLwogI2RlZmluZSBNQkNTX1dSX0RNQV9MT0NfQUREUgkweDAyMDgJLyogV3JpdGUgRE1BIExvY2FsIEFkZHJlc3MgKi8KICNkZWZpbmUgTUJDU19XUl9ETUFfQ1RSTAkweDAyMTAJLyogV3JpdGUgRE1BIENvbnRyb2wgKi8KICNkZWZpbmUgTUJDU19XUl9ETUFfQU1PX0RFU1QJMHgwMjE4CS8qIFdyaXRlIERNQSBBTU8gRGVzdGluYXRpb24gKi8KICNkZWZpbmUgTUJDU19XUl9ETUFfSU5UX0RFU1QJMHgwMjIwCS8qIFdyaXRlIERNQSBJbnRlcnJ1cHQgRGVzdGluYXRpb24gKi8KLSNkZWZpbmUgTUJDU19XUl9ETUFfQVVYX1NUQVQJMHgwMjMwCS8qIFdyaXRlIERNQSBBdXhpbGxhcnkgU3RhdHVzICovCisjZGVmaW5lIE1CQ1NfV1JfRE1BX0FVWF9TVEFUCTB4MDIzMAkvKiBXcml0ZSBETUEgQXV4aWxpYXJ5IFN0YXR1cyAqLwogI2RlZmluZSBNQkNTX0FMR19BTU9fREVTVAkweDAzMDAJLyogQWxnb3JpdGhtIEFNTyBEZXN0aW5hdGlvbiAqLwogI2RlZmluZSBNQkNTX0FMR19JTlRfREVTVAkweDAzMDgJLyogQWxnb3JpdGhtIEludGVycnVwdCBEZXN0aW5hdGlvbiAqLwogI2RlZmluZSBNQkNTX0FMR19PRkZTRVRTCTB4MDMxMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL213YXZlLzM3ODBpLmggYi9kcml2ZXJzL2NoYXIvbXdhdmUvMzc4MGkuaAppbmRleCAyNzA0MzFjLi5mYmE2YWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbXdhdmUvMzc4MGkuaAorKysgYi9kcml2ZXJzL2NoYXIvbXdhdmUvMzc4MGkuaApAQCAtMTIyLDcgKzEyMiw3IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAJdW5zaWduZWQgY2hhciBEbWE6MzsJLyogUlc6IERNQSBjaGFubmVsIHNlbGVjdGlvbiAqLwogCXVuc2lnbmVkIGNoYXIgTnVtVHJhbnNmZXJzOjI7CS8qIFJXOiBNYXhpbXVtICMgb2YgdHJhbnNmZXJzIG9uY2UgYmVpbmcgZ3JhbnRlZCB0aGUgSVNBIGJ1cyAqLwotCXVuc2lnbmVkIGNoYXIgUmVSZXF1ZXN0OjI7CS8qIFJXOiBNaW51bXVtIGRlbGF5IGJldHdlZW4gcmVsZWFzaW5nIHRoZSBJU0EgYnVzIGFuZCByZXF1ZXN0aW5nIGl0IGFnYWluICovCisJdW5zaWduZWQgY2hhciBSZVJlcXVlc3Q6MjsJLyogUlc6IE1pbmltdW0gZGVsYXkgYmV0d2VlbiByZWxlYXNpbmcgdGhlIElTQSBidXMgYW5kIHJlcXVlc3RpbmcgaXQgYWdhaW4gKi8KIAl1bnNpZ25lZCBjaGFyIE1FTUNTMTY6MTsJLyogUlc6IElTQSBzaWduYWwgTUVNQ1MxNjogMD1kaXNhYmxlZCwgMT1lbmFibGVkICovCiB9IERTUF9CVVNNQVNURVJfQ0ZHXzE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ud2J1dHRvbi5jIGIvZHJpdmVycy9jaGFyL253YnV0dG9uLmMKaW5kZXggODk5NGNlMy4uMDRhNDgwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL253YnV0dG9uLmMKKysrIGIvZHJpdmVycy9jaGFyL253YnV0dG9uLmMKQEAgLTc1LDcgKzc1LDcgQEAKICAqIHdpdGggLUVJTlZBTC4gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBlbnRyeSB3aXRoIHRoZSBzYW1lIGFkZHJlc3MsCiAgKiBiZWNhdXNlIGl0IHNlYXJjaGVzIHRoZSBsaXN0IGZyb20gZW5kIHRvIGJlZ2lubmluZywgaXQgd2lsbCB1bnJlZ2lzdGVyIHRoZQogICogbGFzdCBvbmUgdG8gYmUgcmVnaXN0ZXJlZCBmaXJzdCAoRklMTy0gRmlyc3QgSW4gTGFzdCBPdXQpLgotICogTm90ZSB0aGF0IHRoaXMgaXMgbm90IG5lY2Nlc3NhcmlseSB0cnVlIGlmIHRoZSBlbnRyaWVzIGFyZSBub3Qgc3VibWl0dGVkCisgKiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgdHJ1ZSBpZiB0aGUgZW50cmllcyBhcmUgbm90IHN1Ym1pdHRlZAogICogYXQgdGhlIHNhbWUgdGltZSwgYmVjYXVzZSBhbm90aGVyIGRyaXZlciBjb3VsZCBoYXZlIHVucmVnaXN0ZXJlZCBhIGNhbGxiYWNrCiAgKiBiZXR3ZWVuIHRoZSBzdWJtaXNzaW9ucyBjcmVhdGluZyBhIGdhcCBlYXJsaWVyIGluIHRoZSBsaXN0LCB3aGljaCB3b3VsZAogICogYmUgZmlsbGVkIGZpcnN0IGF0IHN1Ym1pc3Npb24gdGltZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCmluZGV4IGJjYmJjNzEuLjkwYmQwMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKKysrIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYwpAQCAtODA2LDcgKzgwNiw3IEBACiAJCWRldi0+ZmxhZ3MxID0gMHgwMTsKIAkJeG91dGIoZGV2LT5mbGFnczEsIFJFR19GTEFHUzEoaW9iYXNlKSk7CiAKLQkJLyogYXRyIGlzIHByZXNlbnQgKHdoaWNoIGRvZXNudCBtZWFuIGl0J3MgdmFsaWQpICovCisJCS8qIGF0ciBpcyBwcmVzZW50ICh3aGljaCBkb2Vzbid0IG1lYW4gaXQncyB2YWxpZCkgKi8KIAkJc2V0X2JpdChJU19BVFJfUFJFU0VOVCwgJmRldi0+ZmxhZ3MpOwogCQlpZiAoZGV2LT5hdHJbMF0gPT0gMHgwMykKIAkJCXN0cl9pbnZlcnRfcmV2ZXJ0KGRldi0+YXRyLCBkZXYtPmF0cl9sZW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCmluZGV4IGJlY2E4MGIuLmI1NzU0MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMKQEAgLTEyOTAsNyArMTI5MCw3IEBACiAJLyogQWxsb2NhdGUgYW5kIGNsYWltIGFkYXB0ZXIgcmVzb3VyY2VzICovCiAJcmV0dmFsID0gY2xhaW1fcmVzb3VyY2VzKGluZm8pOwogCi0JLyogcGVyZm9ybSBleGlzdGFuY2UgY2hlY2sgYW5kIGRpYWdub3N0aWNzICovCisJLyogcGVyZm9ybSBleGlzdGVuY2UgY2hlY2sgYW5kIGRpYWdub3N0aWNzICovCiAJaWYgKCAhcmV0dmFsICkKIAkJcmV0dmFsID0gYWRhcHRlcl90ZXN0KGluZm8pOwogCkBAIC0yNjgwLDcgKzI2ODAsNyBAQAogc3RhdGljIGludCBjbGFpbV9yZXNvdXJjZXMoTUdTTFBDX0lORk8gKmluZm8pCiB7CiAJaWYgKHJ4X2FsbG9jX2J1ZmZlcnMoaW5mbykgPCAwICkgewotCQlwcmludGsoICJDYW50IGFsbG9jYXRlIHJ4IGJ1ZmZlciAlc1xuIiwgaW5mby0+ZGV2aWNlX25hbWUpOworCQlwcmludGsoICJDYW4ndCBhbGxvY2F0ZSByeCBidWZmZXIgJXNcbiIsIGluZm8tPmRldmljZV9uYW1lKTsKIAkJcmVsZWFzZV9yZXNvdXJjZXMoaW5mbyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yYW5kb20uYyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwppbmRleCA1ZTI5ZTgwLi5kNGRkZWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKKysrIGIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCkBAIC03MzIsNyArNzMyLDcgQEAKIAkJCSAgICAgICBzaXplX3QgbmJ5dGVzLCBpbnQgbWluLCBpbnQgcnN2ZCk7CiAKIC8qCi0gKiBUaGlzIHV0aWxpdHkgaW5saW5lIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB0cmFuc2ZlcmluZyBlbnRyb3B5CisgKiBUaGlzIHV0aWxpdHkgaW5saW5lIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB0cmFuc2ZlcnJpbmcgZW50cm9weQogICogZnJvbSB0aGUgcHJpbWFyeSBwb29sIHRvIHRoZSBzZWNvbmRhcnkgZXh0cmFjdGlvbiBwb29sLiBXZSBtYWtlCiAgKiBzdXJlIHdlIHB1bGwgZW5vdWdoIGZvciBhICdjYXRhc3Ryb3BoaWMgcmVzZWVkJy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NvbnlwaS5jIGIvZHJpdmVycy9jaGFyL3NvbnlwaS5jCmluZGV4IDc5ZTM2YzguLjFlZThjZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zb255cGkuYworKysgYi9kcml2ZXJzL2NoYXIvc29ueXBpLmMKQEAgLTEyNDEsNyArMTI0MSw3IEBACiAJd2hpbGUgKGNoZWNrX2lvcG9ydCAmJiBjaGVjay0+cG9ydDEpIHsKIAkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihjaGVjay0+cG9ydDEsCiAJCQkJICAgc29ueXBpX2RldmljZS5yZWdpb25fc2l6ZSwKLQkJCQkgICAiU29ueSBQcm9ncmFtYWJsZSBJL08gRGV2aWNlIENoZWNrIikpIHsKKwkJCQkgICAiU29ueSBQcm9ncmFtbWFibGUgSS9PIERldmljZSBDaGVjayIpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgInNvbnlwaTogaW9wb3J0IDB4JS40eCBidXN5LCB1c2luZyBzb255LWxhcHRvcD8gIgogCQkJCQkiaWYgbm90IHVzZSBjaGVja19pb3BvcnQ9MFxuIiwKIAkJCQkJY2hlY2stPnBvcnQxKTsKQEAgLTEyNTUsNyArMTI1NSw3IEBACiAKIAkJaWYgKHJlcXVlc3RfcmVnaW9uKGlvcG9ydF9saXN0LT5wb3J0MSwKIAkJCQkgICBzb255cGlfZGV2aWNlLnJlZ2lvbl9zaXplLAotCQkJCSAgICJTb255IFByb2dyYW1hYmxlIEkvTyBEZXZpY2UiKSkgeworCQkJCSAgICJTb255IFByb2dyYW1tYWJsZSBJL08gRGV2aWNlIikpIHsKIAkJCWRldi0+aW9wb3J0MSA9IGlvcG9ydF9saXN0LT5wb3J0MTsKIAkJCWRldi0+aW9wb3J0MiA9IGlvcG9ydF9saXN0LT5wb3J0MjsKIAkJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMgYi9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwppbmRleCA4NGIxNjRkLi44Mzg1NjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwpAQCAtMTI4MCwxOCArMTI4MCw3IEBACiAJCXNwaW5fbG9ja19pcnEoJnBkcnZkYXRhX2xvY2spOwogCQlsaXN0X2RlbCgmcG9ydC0+Y29ucy5saXN0KTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZwZHJ2ZGF0YV9sb2NrKTsKLSNpZiAwCi0JCS8qCi0JCSAqIGh2Y19yZW1vdmUoKSBub3QgY2FsbGVkIGFzIHJlbW92aW5nIG9uZSBodmMgcG9ydAotCQkgKiByZXN1bHRzIGluIG90aGVyIGh2YyBwb3J0cyBnZXR0aW5nIGZyb3plbi4KLQkJICoKLQkJICogT25jZSB0aGlzIGlzIHJlc29sdmVkIGluIGh2YywgdGhpcyBmdW5jdGlvbmFsaXR5Ci0JCSAqIHdpbGwgYmUgZW5hYmxlZC4gIFRpbGwgdGhhdCBpcyBkb25lLCB0aGUgLUVQSVBFCi0JCSAqIHJldHVybiBmcm9tIGdldF9jaGFycygpIGFib3ZlIHdpbGwgaGVscAotCQkgKiBodmNfY29uc29sZS5jIHRvIGNsZWFuIHVwIG9uIHBvcnRzIHdlIHJlbW92ZSBoZXJlLgotCQkgKi8KIAkJaHZjX3JlbW92ZShwb3J0LT5jb25zLmh2Yyk7Ci0jZW5kaWYKIAl9CiAKIAkvKiBSZW1vdmUgdW51c2VkIGRhdGEgdGhpcyBwb3J0IG1pZ2h0IGhhdmUgcmVjZWl2ZWQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC94aWxpbnhfaHdpY2FwLmMgYi9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC94aWxpbnhfaHdpY2FwLmMKaW5kZXggZDNjOWQ3NS4uMzljY2RlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAveGlsaW54X2h3aWNhcC5jCisrKyBiL2RyaXZlcnMvY2hhci94aWxpbnhfaHdpY2FwL3hpbGlueF9od2ljYXAuYwpAQCAtNjcsNyArNjcsNyBAQAogICogY3AgZm9vLmJpdCAvZGV2L2ljYXAwCiAgKgogICogTm90ZSB0aGF0IHVubGVzcyBmb28uYml0IGlzIGFuIGFwcHJvcHJpYXRlbHkgY29uc3RydWN0ZWQgcGFydGlhbAotICogYml0c3RyZWFtLCB0aGlzIGhhcyBhIGhpZ2ggbGlrZWx5aG9vZCBvZiBvdmVyd3JpdGluZyB0aGUgZGVzaWduCisgKiBiaXRzdHJlYW0sIHRoaXMgaGFzIGEgaGlnaCBsaWtlbGlob29kIG9mIG92ZXJ3cml0aW5nIHRoZSBkZXNpZ24KICAqIGN1cnJlbnRseSBwcm9ncmFtbWVkIGluIHRoZSBGUEdBLgogICovCiAKQEAgLTcxNSwxMyArNzE1LDEzIEBACiB9CiAKICNpZmRlZiBDT05GSUdfT0YKLXN0YXRpYyBpbnQgX19kZXZpbml0IGh3aWNhcF9vZl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGh3aWNhcF9vZl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBod2ljYXBfZHJpdmVyX2NvbmZpZyAqY29uZmlnKQogewogCXN0cnVjdCByZXNvdXJjZSByZXM7CiAJY29uc3QgdW5zaWduZWQgaW50ICppZDsKIAljb25zdCBjaGFyICpmYW1pbHk7CiAJaW50IHJjOwotCWNvbnN0IHN0cnVjdCBod2ljYXBfZHJpdmVyX2NvbmZpZyAqY29uZmlnID0gb3AtPmRldi5vZl9tYXRjaC0+ZGF0YTsKIAljb25zdCBzdHJ1Y3QgY29uZmlnX3JlZ2lzdGVycyAqcmVnczsKIAogCkBAIC03NTEsMjAgKzc1MSwyNCBAQAogCQkJcmVncyk7CiB9CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgaHdpY2FwX29mX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wKQorc3RhdGljIGlubGluZSBpbnQgaHdpY2FwX29mX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wLAorCQkJCSAgY29uc3Qgc3RydWN0IGh3aWNhcF9kcml2ZXJfY29uZmlnICpjb25maWcpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAjZW5kaWYgLyogQ09ORklHX09GICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9fZGV2aW5pdGNvbnN0IGh3aWNhcF9vZl9tYXRjaFtdOwogc3RhdGljIGludCBfX2RldmluaXQgaHdpY2FwX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWNvbnN0IHN0cnVjdCBjb25maWdfcmVnaXN0ZXJzICpyZWdzOwogCWNvbnN0IGNoYXIgKmZhbWlseTsKIAotCWlmIChwZGV2LT5kZXYub2ZfbWF0Y2gpCi0JCXJldHVybiBod2ljYXBfb2ZfcHJvYmUocGRldik7CisJbWF0Y2ggPSBvZl9tYXRjaF9kZXZpY2UoaHdpY2FwX29mX21hdGNoLCAmcGRldi0+ZGV2KTsKKwlpZiAobWF0Y2gpCisJCXJldHVybiBod2ljYXBfb2ZfcHJvYmUocGRldiwgbWF0Y2gtPmRhdGEpOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXJlcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2Nsa2Rldi5jIGIvZHJpdmVycy9jbGsvY2xrZGV2LmMKaW5kZXggMGZjMGE3OS4uNmRiMTYxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvY2xrZGV2LmMKKysrIGIvZHJpdmVycy9jbGsvY2xrZGV2LmMKQEAgLTMyLDEwICszMiw5IEBACiAgKiBUaGVuIHdlIHRha2UgdGhlIG1vc3Qgc3BlY2lmaWMgZW50cnkgLSB3aXRoIHRoZSBmb2xsb3dpbmcKICAqIG9yZGVyIG9mIHByZWNlZGVuY2U6IGRlditjb24gPiBkZXYgb25seSA+IGNvbiBvbmx5LgogICovCi1zdGF0aWMgc3RydWN0IGNsayAqY2xrX2ZpbmQoY29uc3QgY2hhciAqZGV2X2lkLCBjb25zdCBjaGFyICpjb25faWQpCitzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgKmNsa19maW5kKGNvbnN0IGNoYXIgKmRldl9pZCwgY29uc3QgY2hhciAqY29uX2lkKQogewotCXN0cnVjdCBjbGtfbG9va3VwICpwOwotCXN0cnVjdCBjbGsgKmNsayA9IE5VTEw7CisJc3RydWN0IGNsa19sb29rdXAgKnAsICpjbCA9IE5VTEw7CiAJaW50IG1hdGNoLCBiZXN0ID0gMDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmNsb2Nrcywgbm9kZSkgewpAQCAtNTIsMjcgKzUxLDI3IEBACiAJCX0KIAogCQlpZiAobWF0Y2ggPiBiZXN0KSB7Ci0JCQljbGsgPSBwLT5jbGs7CisJCQljbCA9IHA7CiAJCQlpZiAobWF0Y2ggIT0gMykKIAkJCQliZXN0ID0gbWF0Y2g7CiAJCQllbHNlCiAJCQkJYnJlYWs7CiAJCX0KIAl9Ci0JcmV0dXJuIGNsazsKKwlyZXR1cm4gY2w7CiB9CiAKIHN0cnVjdCBjbGsgKmNsa19nZXRfc3lzKGNvbnN0IGNoYXIgKmRldl9pZCwgY29uc3QgY2hhciAqY29uX2lkKQogewotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2xvb2t1cCAqY2w7CiAKIAltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCWNsayA9IGNsa19maW5kKGRldl9pZCwgY29uX2lkKTsKLQlpZiAoY2xrICYmICFfX2Nsa19nZXQoY2xrKSkKLQkJY2xrID0gTlVMTDsKKwljbCA9IGNsa19maW5kKGRldl9pZCwgY29uX2lkKTsKKwlpZiAoY2wgJiYgIV9fY2xrX2dldChjbC0+Y2xrKSkKKwkJY2wgPSBOVUxMOwogCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKIAotCXJldHVybiBjbGsgPyBjbGsgOiBFUlJfUFRSKC1FTk9FTlQpOworCXJldHVybiBjbCA/IGNsLT5jbGsgOiBFUlJfUFRSKC1FTk9FTlQpOwogfQogRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3N5cyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY29ubmVjdG9yL2Nvbm5lY3Rvci5jIGIvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMKaW5kZXggZDc3MDA1OC4uMjE5ZDg4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMKKysrIGIvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMKQEAgLTE0Miw2ICsxNDIsNyBAQAogCQljYnEtPmNhbGxiYWNrKG1zZywgbnNwKTsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWNuX3F1ZXVlX3JlbGVhc2VfY2FsbGJhY2soY2JxKTsKKwkJZXJyID0gMDsKIAl9CiAKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKaW5kZXggYjAzNzcxZC4uMmRhZmM1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCkBAIC0xNzgyLDcgKzE3ODIsNyBAQAogICoJY3B1ZnJlcV91cGRhdGVfcG9saWN5IC0gcmUtZXZhbHVhdGUgYW4gZXhpc3RpbmcgY3B1ZnJlcSBwb2xpY3kKICAqCUBjcHU6IENQVSB3aGljaCBzaGFsbCBiZSByZS1ldmFsdWF0ZWQKICAqCi0gKglVc2VmdWxsIGZvciBwb2xpY3kgbm90aWZpZXJzIHdoaWNoIGhhdmUgZGlmZmVyZW50IG5lY2Vzc2l0aWVzCisgKglVc2VmdWwgZm9yIHBvbGljeSBub3RpZmllcnMgd2hpY2ggaGF2ZSBkaWZmZXJlbnQgbmVjZXNzaXRpZXMKICAqCWF0IGRpZmZlcmVudCB0aW1lcy4KICAqLwogaW50IGNwdWZyZXFfdXBkYXRlX3BvbGljeSh1bnNpZ25lZCBpbnQgY3B1KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfc2EuYyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3NhLmMKaW5kZXggNDY2ZmQ5NC4uZGU4YTdhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfc2EuYworKysgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9zYS5jCkBAIC0xNyw3ICsxNyw3IEBACiAgKiBAZmlsZSBjcnlwdG80eHhfc2EuYwogICoKICAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBzZWN1cml0eSBjb250ZXh0Ci0gKiBhc3NvaWNhdGUgZm9ybWF0LgorICogYXNzb2NpYXRlIGZvcm1hdC4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfc2EuaCBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X3NhLmgKaW5kZXggNGI4M2VkNy4uMTM1MmQ1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfc2EuaAorKysgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9zYS5oCkBAIC0xNSw3ICsxNSw3IEBACiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICoKICAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBzZWN1cml0eSBjb250ZXh0Ci0gKiBhc3NvaWNhdGUgZm9ybWF0LgorICogYXNzb2NpYXRlIGZvcm1hdC4KICAqLwogCiAjaWZuZGVmIF9fQ1JZUFRPNFhYX1NBX0hfXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vaXhwNHh4X2NyeXB0by5jIGIvZHJpdmVycy9jcnlwdG8vaXhwNHh4X2NyeXB0by5jCmluZGV4IDBkNjYyMjEuLjRjMjBjNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL2l4cDR4eF9jcnlwdG8uYworKysgYi9kcml2ZXJzL2NyeXB0by9peHA0eHhfY3J5cHRvLmMKQEAgLTEwNDQsNyArMTA0NCw3IEBACiAJbWVtY3B5KGNyeXB0LT5pdiwgcmVxLT5pdiwgaXZzaXplKTsKIAogCWlmIChyZXEtPnNyYyAhPSByZXEtPmRzdCkgewotCQlCVUcoKTsgLyogLUVOT1RTVVAgYmVjYXVzZSBvZiBteSBsYXp5bmVzcyAqLworCQlCVUcoKTsgLyogLUVOT1RTVVAgYmVjYXVzZSBvZiBteSBsYXppbmVzcyAqLwogCX0KIAogCS8qIEFTU09DIGRhdGEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2F0X2hkbWFjLmMgYi9kcml2ZXJzL2RtYS9hdF9oZG1hYy5jCmluZGV4IDNkN2Q3MDUuLjIzNWY1M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2F0X2hkbWFjLmMKKysrIGIvZHJpdmVycy9kbWEvYXRfaGRtYWMuYwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAvKioKICAqIGF0Y19hc3NpZ25fY29va2llIC0gY29tcHV0ZSBhbmQgYXNzaWduIG5ldyBjb29raWUKICAqIEBhdGNoYW46IGNoYW5uZWwgd2Ugd29yayBvbgotICogQGRlc2M6IGRlc2NyaXB0b3IgdG8gYXNpZ24gY29va2llIGZvcgorICogQGRlc2M6IGRlc2NyaXB0b3IgdG8gYXNzaWduIGNvb2tpZSBmb3IKICAqCiAgKiBDYWxsZWQgd2l0aCBhdGNoYW4tPmxvY2sgaGVsZCBhbmQgYmggZGlzYWJsZWQKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvY29oOTAxMzE4LmMgYi9kcml2ZXJzL2RtYS9jb2g5MDEzMTguYwppbmRleCAwMGRlYWJkLi5mNDhlNTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9jb2g5MDEzMTguYworKysgYi9kcml2ZXJzL2RtYS9jb2g5MDEzMTguYwpAQCAtNTI5LDcgKzUyOSw3IEBACiAJdmFsID0gcmVhZGwodmlydGJhc2UgKyBDT0g5MDEzMThfQ1hfQ0ZHICsKIAkJICAgIENPSDkwMTMxOF9DWF9DRkdfU1BBQ0lORyAqIGNoYW5uZWwpOwogCi0JLyogU3RvcHBpbmcgaW5maW5pdCB0cmFuc2ZlciAqLworCS8qIFN0b3BwaW5nIGluZmluaXRlIHRyYW5zZmVyICovCiAJaWYgKCh2YWwgJiBDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUpID09IDAgJiYKIAkgICAgKHZhbCAmIENPSDkwMTMxOF9DWF9DRkdfQ0hfRU5BQkxFKSkKIAkJY29oYy0+c3RvcHBlZCA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9mc2xkbWEuYyBiL2RyaXZlcnMvZG1hL2ZzbGRtYS5jCmluZGV4IDZiMzk2NzUuLjhhNzgxNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2ZzbGRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2ZzbGRtYS5jCkBAIC0xNDQ4LDcgKzE0NDgsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBmc2xkbWFfb2ZfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZnNsZG1hX29mX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZSA9ICJmc2wtZWxvLWRtYSIsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW50ZWxfbWlkX2RtYS5jIGIvZHJpdmVycy9kbWEvaW50ZWxfbWlkX2RtYS5jCmluZGV4IDc5OGY0NmEuLjNkNGVjMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2ludGVsX21pZF9kbWEuYworKysgYi9kcml2ZXJzL2RtYS9pbnRlbF9taWRfZG1hLmMKQEAgLTkxMSw4ICs5MTEsOCBAQAogCiAvKioKICAqIG1pZGNfaGFuZGxlX2Vycm9yIC0JSGFuZGxlIERNQSB0eG4gZXJyb3IKLSAqIEBtaWQ6IGNvbnRyb2xsZXIgd2hlcmUgZXJyb3Igb2NjdXJlZAotICogQG1pZGM6IGNoYW4gd2hlcmUgZXJyb3Igb2NjdXJlZAorICogQG1pZDogY29udHJvbGxlciB3aGVyZSBlcnJvciBvY2N1cnJlZAorICogQG1pZGM6IGNoYW4gd2hlcmUgZXJyb3Igb2NjdXJyZWQKICAqCiAgKiBTY2FuIHRoZSBkZXNjcmlwdG9yIGZvciBlcnJvcgogICovCkBAIC0xMDk5LDcgKzEwOTksNyBAQAogCQlkbWEtPm1hc2tfcmVnID0gaW9yZW1hcChMTldfUEVSSVBIUkFMX01BU0tfQkFTRSwKIAkJCQkJTE5XX1BFUklQSFJBTF9NQVNLX1NJWkUpOwogCQlpZiAoZG1hLT5tYXNrX3JlZyA9PSBOVUxMKSB7Ci0JCQlwcl9lcnIoIkVSUl9NRE1BOkNhbnQgbWFwIHBlcmlwaHJhbCBpbnRyIHNwYWNlICEhXG4iKTsKKwkJCXByX2VycigiRVJSX01ETUE6Q2FuJ3QgbWFwIHBlcmlwaHJhbCBpbnRyIHNwYWNlICEhXG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJfSBlbHNlCkBAIC0xMzczLDcgKzEzNzMsNyBAQAogCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7CiAJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKIAlpZiAocmV0KSB7Ci0JCXByX2VycigiTURNQTogZGV2aWNlIGNhbnQgYmUgZW5hYmxlZCBmb3IgJXhcbiIsIHBjaS0+ZGV2aWNlKTsKKwkJcHJfZXJyKCJNRE1BOiBkZXZpY2UgY2FuJ3QgYmUgZW5hYmxlZCBmb3IgJXhcbiIsIHBjaS0+ZGV2aWNlKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJZGV2aWNlLT5zdGF0ZSA9IFJVTk5JTkc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pbnRlbF9taWRfZG1hX3JlZ3MuaCBiL2RyaXZlcnMvZG1hL2ludGVsX21pZF9kbWFfcmVncy5oCmluZGV4IDcwOWZlY2IuLmFlYTVlZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2ludGVsX21pZF9kbWFfcmVncy5oCisrKyBiL2RyaXZlcnMvZG1hL2ludGVsX21pZF9kbWFfcmVncy5oCkBAIC0xNzQsOCArMTc0LDggQEAKICAqIEBkbWE6IGRtYSBkZXZpY2Ugc3RydXR1cmUgcG9pbnRlcgogICogQGJ1c3k6IGJvb2wgcmVwcmVzZW50aW5nIGlmIGNoIGlzIGJ1c3kgKGFjdGl2ZSB0eG4pIG9yIG5vdAogICogQGluX3VzZTogYm9vbCByZXByZXNlbnRpbmcgaWYgY2ggaXMgaW4gdXNlIG9yIG5vdAotICogQHJhd190ZnI6IHJhdyB0cmYgaW50ZXJydXB0IHJlY2lldmVkCi0gKiBAcmF3X2Jsb2NrOiByYXcgYmxvY2sgaW50ZXJydXB0IHJlY2lldmVkCisgKiBAcmF3X3RmcjogcmF3IHRyZiBpbnRlcnJ1cHQgcmVjZWl2ZWQKKyAqIEByYXdfYmxvY2s6IHJhdyBibG9jayBpbnRlcnJ1cHQgcmVjZWl2ZWQKICAqLwogc3RydWN0IGludGVsX21pZF9kbWFfY2hhbiB7CiAJc3RydWN0IGRtYV9jaGFuCQljaGFuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvbXBjNTEyeF9kbWEuYyBiL2RyaXZlcnMvZG1hL21wYzUxMnhfZG1hLmMKaW5kZXggNGY5NWQzMS4uYjliYWU5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvbXBjNTEyeF9kbWEuYworKysgYi9kcml2ZXJzL2RtYS9tcGM1MTJ4X2RtYS5jCkBAIC0zMjgsNyArMzI4LDcgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLS8qIHByb2NjZXNzIGNvbXBsZXRlZCBkZXNjcmlwdG9ycyAqLworLyogcHJvY2VzcyBjb21wbGV0ZWQgZGVzY3JpcHRvcnMgKi8KIHN0YXRpYyB2b2lkIG1wY19kbWFfcHJvY2Vzc19jb21wbGV0ZWQoc3RydWN0IG1wY19kbWEgKm1kbWEpCiB7CiAJZG1hX2Nvb2tpZV90IGxhc3RfY29va2llID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL3NoZG1hLmMgYi9kcml2ZXJzL2RtYS9zaGRtYS5jCmluZGV4IDY0NTFiNTguLmQ1MGRhNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3NoZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvc2hkbWEuYwpAQCAtODY1LDcgKzg2NSwxMiBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2hfZG1hZV9lcnIoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKLQlyZXR1cm4gSVJRX1JFVFZBTChzaF9kbWFlX3Jlc2V0KGRhdGEpKTsKKwlzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UgKnNoZGV2ID0gZGF0YTsKKworCWlmIChkbWFvcl9yZWFkKHNoZGV2KSAmIERNQU9SX0FFKQorCQlyZXR1cm4gSVJRX1JFVFZBTChzaF9kbWFlX3Jlc2V0KGRhdGEpKTsKKwllbHNlCisJCXJldHVybiBJUlFfTk9ORTsKIH0KIAogc3RhdGljIHZvaWQgZG1hZV9kb190YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL3N0ZV9kbWE0MC5jIGIvZHJpdmVycy9kbWEvc3RlX2RtYTQwLmMKaW5kZXggYWY5NTVkZS4uOTRlZTE1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvc3RlX2RtYTQwLmMKKysrIGIvZHJpdmVycy9kbWEvc3RlX2RtYTQwLmMKQEAgLTkwLDcgKzkwLDcgQEAKICAqIEBsbGlfbG9nOiBTYW1lIGFzIGFib3ZlIGJ1dCBmb3IgbG9naWNhbCBjaGFubmVscy4KICAqIEBsbGlfcG9vbDogVGhlIHBvb2wgd2l0aCB0d28gZW50cmllcyBwcmUtYWxsb2NhdGVkLgogICogQGxsaV9sZW46IE51bWJlciBvZiBsbGlzIG9mIGN1cnJlbnQgZGVzY3JpcHRvci4KLSAqIEBsbGlfY3VycmVudDogTnVtYmVyIG9mIHRyYW5zZmVyZWQgbGxpcy4KKyAqIEBsbGlfY3VycmVudDogTnVtYmVyIG9mIHRyYW5zZmVycmVkIGxsaXMuCiAgKiBAbGNsYV9hbGxvYzogTnVtYmVyIG9mIExDTEEgZW50cmllcyBhbGxvY2F0ZWQuCiAgKiBAdHhkOiBETUEgZW5naW5lIHN0cnVjdC4gVXNlZCBmb3IgYW1vbmcgb3RoZXIgdGhpbmdzIGZvciBjb21tdW5pY2F0aW9uCiAgKiBkdXJpbmcgYSB0cmFuc2Zlci4KQEAgLTEyMTQsNyArMTIxNCw3IEBACiAJcmV0dXJuOwogCiAgZXJyOgotCS8qIFJlc2N1ZSBtYW5vdXZlciBpZiByZWNlaXZpbmcgZG91YmxlIGludGVycnVwdHMgKi8KKwkvKiBSZXNjdWUgbWFub2V1dnJlIGlmIHJlY2VpdmluZyBkb3VibGUgaW50ZXJydXB0cyAqLwogCWlmIChkNDBjLT5wZW5kaW5nX3R4ID4gMCkKIAkJZDQwYy0+cGVuZGluZ190eC0tOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmQ0MGMtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9LY29uZmlnIGIvZHJpdmVycy9lZGFjL0tjb25maWcKaW5kZXggZmFjMWEyMC4uYWYxYTE3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL0tjb25maWcKKysrIGIvZHJpdmVycy9lZGFjL0tjb25maWcKQEAgLTQ1LDcgKzQ1LDcgQEAKIAlkZWZhdWx0IHkKIAktLS1oZWxwLS0tCiAJICBFbmFibGUgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gZGVjb2RlIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9ucwotCSAgb2NjdXJpbmcgb24geW91ciBtYWNoaW5lIGluIGh1bWFuLXJlYWRhYmxlIGZvcm0uCisJICBvY2N1cnJpbmcgb24geW91ciBtYWNoaW5lIGluIGh1bWFuLXJlYWRhYmxlIGZvcm0uCiAKIAkgIFlvdSBzaG91bGQgZGVmaW5pdGVseSBzYXkgWSBoZXJlIGluIGNhc2UgeW91IHdhbnQgdG8gZGVjb2RlIE1DRXMKIAkgIHdoaWNoIG9jY3VyIHJlYWxseSBlYXJseSB1cG9uIGJvb3QsIGJlZm9yZSB0aGUgbW9kdWxlIGluZnJhc3RydWN0dXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYwppbmRleCAzMWU3MWM0Zi4uOWE4YmViYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCkBAIC0yMTEsOCArMjExLDYgQEAKIAogCXNjcnVidmFsID0gc2NydWJ2YWwgJiAweDAwMUY7CiAKLQlhbWQ2NF9kZWJ1ZygicGNpLXJlYWQsIHNkcmFtIHNjcnViIGNvbnRyb2wgdmFsdWU6ICVkXG4iLCBzY3J1YnZhbCk7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzY3J1YnJhdGVzKTsgaSsrKSB7CiAJCWlmIChzY3J1YnJhdGVzW2ldLnNjcnVidmFsID09IHNjcnVidmFsKSB7CiAJCQlyZXR2YWwgPSBzY3J1YnJhdGVzW2ldLmJhbmR3aWR0aDsKQEAgLTkzMywyNSArOTMxLDc0IEBACiAvKiBPbiBGMTBoIGFuZCBsYXRlciBFcnJBZGRyIGlzIE1DNF9BRERSWzQ3OjFdICovCiBzdGF0aWMgdTY0IGdldF9lcnJvcl9hZGRyZXNzKHN0cnVjdCBtY2UgKm0pCiB7CisJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmJvb3RfY3B1X2RhdGE7CisJdTY0IGFkZHI7CiAJdTggc3RhcnRfYml0ID0gMTsKIAl1OCBlbmRfYml0ICAgPSA0NzsKIAotCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAweGYpIHsKKwlpZiAoYy0+eDg2ID09IDB4ZikgewogCQlzdGFydF9iaXQgPSAzOwogCQllbmRfYml0ICAgPSAzOTsKIAl9CiAKLQlyZXR1cm4gbS0+YWRkciAmIEdFTk1BU0soc3RhcnRfYml0LCBlbmRfYml0KTsKKwlhZGRyID0gbS0+YWRkciAmIEdFTk1BU0soc3RhcnRfYml0LCBlbmRfYml0KTsKKworCS8qCisJICogRXJyYXR1bSA2Mzcgd29ya2Fyb3VuZAorCSAqLworCWlmIChjLT54ODYgPT0gMHgxNSkgeworCQlzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQ7CisJCXU2NCBjYzZfYmFzZSwgdG1wX2FkZHI7CisJCXUzMiB0bXA7CisJCXU4IG1jZV9uaWQsIGludGx2X2VuOworCisJCWlmICgoYWRkciAmIEdFTk1BU0soMjQsIDQ3KSkgPj4gMjQgIT0gMHgwMGZkZjcpCisJCQlyZXR1cm4gYWRkcjsKKworCQltY2VfbmlkCT0gYW1kX2dldF9uYl9pZChtLT5leHRjcHUpOworCQlwdnQJPSBtY2lzW21jZV9uaWRdLT5wdnRfaW5mbzsKKworCQlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5GMSwgRFJBTV9MT0NBTF9OT0RFX0xJTSwgJnRtcCk7CisJCWludGx2X2VuID0gdG1wID4+IDIxICYgMHg3OworCisJCS8qIGFkZCBbNDc6MjddICsgMyB0cmFpbGluZyBiaXRzICovCisJCWNjNl9iYXNlICA9ICh0bXAgJiBHRU5NQVNLKDAsIDIwKSkgPDwgMzsKKworCQkvKiByZXZlcnNlIGFuZCBhZGQgRHJhbUludGx2RW4gKi8KKwkJY2M2X2Jhc2UgfD0gaW50bHZfZW4gXiAweDc7CisKKwkJLyogcGluIGF0IFs0NzoyNF0gKi8KKwkJY2M2X2Jhc2UgPDw9IDI0OworCisJCWlmICghaW50bHZfZW4pCisJCQlyZXR1cm4gY2M2X2Jhc2UgfCAoYWRkciAmIEdFTk1BU0soMCwgMjMpKTsKKworCQlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5GMSwgRFJBTV9MT0NBTF9OT0RFX0JBU0UsICZ0bXApOworCisJCQkJCQkJLyogZmFzdGVyIGxvZzIgKi8KKwkJdG1wX2FkZHIgID0gKGFkZHIgJiBHRU5NQVNLKDEyLCAyMykpIDw8IF9fZmxzKGludGx2X2VuICsgMSk7CisKKwkJLyogT1IgRHJhbUludGx2U2VsIGludG8gYml0cyBbMTQ6MTJdICovCisJCXRtcF9hZGRyIHw9ICh0bXAgJiBHRU5NQVNLKDIxLCAyMykpID4+IDk7CisKKwkJLyogYWRkIHJlbWFpbmluZyBbMTE6MF0gYml0cyBmcm9tIG9yaWdpbmFsIE1DNF9BRERSICovCisJCXRtcF9hZGRyIHw9IGFkZHIgJiBHRU5NQVNLKDAsIDExKTsKKworCQlyZXR1cm4gY2M2X2Jhc2UgfCB0bXBfYWRkcjsKKwl9CisKKwlyZXR1cm4gYWRkcjsKIH0KIAogc3RhdGljIHZvaWQgcmVhZF9kcmFtX2Jhc2VfbGltaXRfcmVncyhzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQsIHVuc2lnbmVkIHJhbmdlKQogeworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZib290X2NwdV9kYXRhOwogCWludCBvZmYgPSByYW5nZSA8PCAzOwogCiAJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+RjEsIERSQU1fQkFTRV9MTyArIG9mZiwgICZwdnQtPnJhbmdlc1tyYW5nZV0uYmFzZS5sbyk7CiAJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+RjEsIERSQU1fTElNSVRfTE8gKyBvZmYsICZwdnQtPnJhbmdlc1tyYW5nZV0ubGltLmxvKTsKIAotCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAweGYpCisJaWYgKGMtPng4NiA9PSAweGYpCiAJCXJldHVybjsKIAogCWlmICghZHJhbV9ydyhwdnQsIHJhbmdlKSkKQEAgLTk1OSw2ICsxMDA2LDMxIEBACiAKIAlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5GMSwgRFJBTV9CQVNFX0hJICsgb2ZmLCAgJnB2dC0+cmFuZ2VzW3JhbmdlXS5iYXNlLmhpKTsKIAlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5GMSwgRFJBTV9MSU1JVF9ISSArIG9mZiwgJnB2dC0+cmFuZ2VzW3JhbmdlXS5saW0uaGkpOworCisJLyogRmFjdG9yIGluIENDNiBzYXZlIGFyZWEgYnkgcmVhZGluZyBkc3Qgbm9kZSdzIGxpbWl0IHJlZyAqLworCWlmIChjLT54ODYgPT0gMHgxNSkgeworCQlzdHJ1Y3QgcGNpX2RldiAqZjEgPSBOVUxMOworCQl1OCBuaWQgPSBkcmFtX2RzdF9ub2RlKHB2dCwgcmFuZ2UpOworCQl1MzIgbGxpbTsKKworCQlmMSA9IHBjaV9nZXRfZG9tYWluX2J1c19hbmRfc2xvdCgwLCAwLCBQQ0lfREVWRk4oMHgxOCArIG5pZCwgMSkpOworCQlpZiAoV0FSTl9PTighZjEpKQorCQkJcmV0dXJuOworCisJCWFtZDY0X3JlYWRfcGNpX2NmZyhmMSwgRFJBTV9MT0NBTF9OT0RFX0xJTSwgJmxsaW0pOworCisJCXB2dC0+cmFuZ2VzW3JhbmdlXS5saW0ubG8gJj0gR0VOTUFTSygwLCAxNSk7CisKKwkJCQkJICAgIC8qIHtbMzk6MjddLDExMWJ9ICovCisJCXB2dC0+cmFuZ2VzW3JhbmdlXS5saW0ubG8gfD0gKChsbGltICYgMHgxZmZmKSA8PCAzIHwgMHg3KSA8PCAxNjsKKworCQlwdnQtPnJhbmdlc1tyYW5nZV0ubGltLmhpICY9IEdFTk1BU0soMCwgNyk7CisKKwkJCQkJICAgIC8qIFs0Nzo0MF0gKi8KKwkJcHZ0LT5yYW5nZXNbcmFuZ2VdLmxpbS5oaSB8PSBsbGltID4+IDEzOworCisJCXBjaV9kZXZfcHV0KGYxKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGs4X21hcF9zeXNhZGRyX3RvX2Nzcm93KHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwgdTY0IHN5c19hZGRyLApAQCAtMTQwMywxMiArMTQ3NSw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChpbnRsdl9lbiAmJgotCSAgICAoaW50bHZfc2VsICE9ICgoc3lzX2FkZHIgPj4gMTIpICYgaW50bHZfZW4pKSkgewotCQlhbWQ2NF93YXJuKCJCb3RjaGVkIGludGx2IGJpdHMsIGVuOiAweCV4LCBzZWw6IDB4JXhcbiIsCi0JCQkgICBpbnRsdl9lbiwgaW50bHZfc2VsKTsKKwlpZiAoaW50bHZfZW4gJiYgKGludGx2X3NlbCAhPSAoKHN5c19hZGRyID4+IDEyKSAmIGludGx2X2VuKSkpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KIAogCXN5c19hZGRyID0gZjF4X3N3YXBfaW50ZXJsZWF2ZWRfcmVnaW9uKHB2dCwgc3lzX2FkZHIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5oIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaAppbmRleCAxMWJlMzZhLi45YTY2NmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5oCisrKyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmgKQEAgLTE5Niw2ICsxOTYsOSBAQAogCiAjZGVmaW5lIERDVF9DRkdfU0VMCQkJMHgxMEMKIAorI2RlZmluZSBEUkFNX0xPQ0FMX05PREVfQkFTRQkJMHgxMjAKKyNkZWZpbmUgRFJBTV9MT0NBTF9OT0RFX0xJTQkJMHgxMjQKKwogI2RlZmluZSBEUkFNX0JBU0VfSEkJCQkweDE0MAogI2RlZmluZSBEUkFNX0xJTUlUX0hJCQkJMHgxNDQKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2NwYzkyNV9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvY3BjOTI1X2VkYWMuYwppbmRleCBiOWE3ODFjLi44MzdhZDhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvY3BjOTI1X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvY3BjOTI1X2VkYWMuYwpAQCAtODE3LDcgKzgxNyw3IEBACiAJfQogfQogCi0vKiBDb252ZXJ0IGN1cnJlbnQgYmFjay1ncm91bmQgc2NydWIgcmF0ZSBpbnRvIGJ5dGUvc2VjIGJhbmR3aXRoICovCisvKiBDb252ZXJ0IGN1cnJlbnQgYmFjay1ncm91bmQgc2NydWIgcmF0ZSBpbnRvIGJ5dGUvc2VjIGJhbmR3aWR0aCAqLwogc3RhdGljIGludCBjcGM5MjVfZ2V0X3NkcmFtX3NjcnViX3JhdGUoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpKQogewogCXN0cnVjdCBjcGM5MjVfbWNfcGRhdGEgKnBkYXRhID0gbWNpLT5wdnRfaW5mbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9lZGFjX2NvcmUuaCBiL2RyaXZlcnMvZWRhYy9lZGFjX2NvcmUuaAppbmRleCAzZDk2NTM0Li5lZWZhMzUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvZWRhY19jb3JlLmgKKysrIGIvZHJpdmVycy9lZGFjL2VkYWNfY29yZS5oCkBAIC0xNjQsNyArMTY0LDcgQEAKIC8qIGNoaXBzZXQgRXJyb3IgRGV0ZWN0aW9uIGFuZCBDb3JyZWN0aW9uIGNhcGFiaWxpdGllcyBhbmQgbW9kZSAqLwogZW51bSBlZGFjX3R5cGUgewogCUVEQUNfVU5LTk9XTiA9IDAsCS8qIFVua25vd24gaWYgRUNDIGlzIGF2YWlsYWJsZSAqLwotCUVEQUNfTk9ORSwJCS8qIERvZXNudCBzdXBwb3J0IEVDQyAqLworCUVEQUNfTk9ORSwJCS8qIERvZXNuJ3Qgc3VwcG9ydCBFQ0MgKi8KIAlFREFDX1JFU0VSVkVELAkJLyogUmVzZXJ2ZWQgRUNDIHR5cGUgKi8KIAlFREFDX1BBUklUWSwJCS8qIERldGVjdHMgcGFyaXR5IGVycm9ycyAqLwogCUVEQUNfRUMsCQkvKiBFcnJvciBDaGVja2luZyAtIG5vIGNvcnJlY3Rpb24gKi8KQEAgLTIzMyw3ICsyMzMsNyBAQAogICoJCQlvZiB0aGVzZSBpbiBwYXJhbGxlbCBwcm92aWRlcyA2NCBiaXRzIHdoaWNoIGlzIGNvbW1vbgogICoJCQlmb3IgYSBtZW1vcnkgc3RpY2suCiAgKgotICogTWVtb3J5IFN0aWNrOglBIHByaW50ZWQgY2lyY3VpdCBib2FyZCB0aGF0IGFncmVnYXRlcyBtdWx0aXBsZQorICogTWVtb3J5IFN0aWNrOglBIHByaW50ZWQgY2lyY3VpdCBib2FyZCB0aGF0IGFnZ3JlZ2F0ZXMgbXVsdGlwbGUKICAqCQkJbWVtb3J5IGRldmljZXMgaW4gcGFyYWxsZWwuICBUaGlzIGlzIHRoZSBhdG9taWMKICAqCQkJbWVtb3J5IGNvbXBvbmVudCB0aGF0IGlzIHB1cmNoYXNlYWJsZSBieSBKb2UgY29uc3VtZXIKICAqCQkJYW5kIGxvYWRlZCBpbnRvIGEgbWVtb3J5IHNvY2tldC4KQEAgLTM4NSw3ICszODUsNyBAQAogCiAJLyogR2V0IHRoZSBjdXJyZW50IHNkcmFtIG1lbW9yeSBzY3J1YiByYXRlIGZyb20gdGhlIGludGVybmFsCiAJICAgcmVwcmVzZW50YXRpb24gYW5kIGNvbnZlcnRzIGl0IHRvIHRoZSBjbG9zZXN0IG1hdGNoaW5nCi0JICAgYmFuZHdpdGggaW4gYnl0ZXMvc2VjLgorCSAgIGJhbmR3aWR0aCBpbiBieXRlcy9zZWMuCiAJICovCiAJaW50ICgqZ2V0X3NkcmFtX3NjcnViX3JhdGUpIChzdHJ1Y3QgbWVtX2N0bF9pbmZvICogbWNpKTsKIApAQCAtODIzLDcgKzgyMyw3IEBACiAgKiBUaGVyZSBhcmUgYSBsaW1pdGVkIG51bWJlciBvZiBlcnJvciBsb2dnaW5nIHJlZ2lzdGVycyB0aGF0IGNhbgogICogYmUgZXhhdXN0ZWQuICBXaGVuIGFsbCByZWdpc3RlcnMgYXJlIGV4aGF1c3RlZCBhbmQgYW4gYWRkaXRpb25hbAogICogZXJyb3Igb2NjdXJzIHRoZW4gYW4gZXJyb3Igb3ZlcmZsb3cgcmVnaXN0ZXIgcmVjb3JkcyB0aGF0IGFuCi0gKiBlcnJvciBvY2N1cmVkIGFuZCB0aGUgdHlwZSBvZiBlcnJvciwgYnV0IGRvZXNuJ3QgaGF2ZSBhbnkKKyAqIGVycm9yIG9jY3VycmVkIGFuZCB0aGUgdHlwZSBvZiBlcnJvciwgYnV0IGRvZXNuJ3QgaGF2ZSBhbnkKICAqIGZ1cnRoZXIgaW5mb3JtYXRpb24uICBUaGUgY2UvdWUgdmVyc2lvbnMgbWFrZSBmb3IgY2xlYW5lcgogICogcmVwb3J0aW5nIGxvZ2ljIGFuZCBmdW5jdGlvbiBpbnRlcmZhY2UgLSByZWR1Y2VzIGNvbmRpdGlvbmFsCiAgKiBzdGF0ZW1lbnQgY2x1dHRlciBhbmQgZXh0cmEgZnVuY3Rpb24gYXJndW1lbnRzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2VkYWNfZGV2aWNlLmMgYi9kcml2ZXJzL2VkYWMvZWRhY19kZXZpY2UuYwppbmRleCBkNWUxM2M5Li5hNzQwOGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvZWRhY19kZXZpY2UuYworKysgYi9kcml2ZXJzL2VkYWMvZWRhY19kZXZpY2UuYwpAQCAtNjcyLDcgKzY3Miw3IEBACiAJCWJsb2NrLT5jb3VudGVycy5jZV9jb3VudCsrOwogCX0KIAotCS8qIFByb3BvZ2F0ZSB0aGUgY291bnQgdXAgdGhlICd0b3RhbHMnIHRyZWUgKi8KKwkvKiBQcm9wYWdhdGUgdGhlIGNvdW50IHVwIHRoZSAndG90YWxzJyB0cmVlICovCiAJaW5zdGFuY2UtPmNvdW50ZXJzLmNlX2NvdW50Kys7CiAJZWRhY19kZXYtPmNvdW50ZXJzLmNlX2NvdW50Kys7CiAKQEAgLTcxOCw3ICs3MTgsNyBAQAogCQlibG9jay0+Y291bnRlcnMudWVfY291bnQrKzsKIAl9CiAKLQkvKiBQcm9wb2dhdGUgdGhlIGNvdW50IHVwIHRoZSAndG90YWxzJyB0cmVlICovCisJLyogUHJvcGFnYXRlIHRoZSBjb3VudCB1cCB0aGUgJ3RvdGFscycgdHJlZSAqLwogCWluc3RhbmNlLT5jb3VudGVycy51ZV9jb3VudCsrOwogCWVkYWNfZGV2LT5jb3VudGVycy51ZV9jb3VudCsrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19kZXZpY2Vfc3lzZnMuYyBiL2RyaXZlcnMvZWRhYy9lZGFjX2RldmljZV9zeXNmcy5jCmluZGV4IDQwMGRlMDcuLjg2NjQ5ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9lZGFjX2RldmljZV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX2RldmljZV9zeXNmcy5jCkBAIC01MzMsNyArNTMzLDcgQEAKIAltZW1zZXQoJmJsb2NrLT5rb2JqLCAwLCBzaXplb2Yoc3RydWN0IGtvYmplY3QpKTsKIAogCS8qIGJ1bXAgdGhlIG1haW4ga29iamVjdCdzIHJlZmVyZW5jZSBjb3VudCBmb3IgdGhpcyBjb250cm9sbGVyCi0JICogYW5kIHRoaXMgaW5zdGFuY2UgaXMgZGVwZW5kYW50IG9uIHRoZSBtYWluCisJICogYW5kIHRoaXMgaW5zdGFuY2UgaXMgZGVwZW5kZW50IG9uIHRoZSBtYWluCiAJICovCiAJbWFpbl9rb2JqID0ga29iamVjdF9nZXQoJmVkYWNfZGV2LT5rb2JqKTsKIAlpZiAoIW1haW5fa29iaikgewpAQCAtNjM1LDcgKzYzNSw3IEBACiAJaW5zdGFuY2UtPmN0bCA9IGVkYWNfZGV2OwogCiAJLyogYnVtcCB0aGUgbWFpbiBrb2JqZWN0J3MgcmVmZXJlbmNlIGNvdW50IGZvciB0aGlzIGNvbnRyb2xsZXIKLQkgKiBhbmQgdGhpcyBpbnN0YW5jZSBpcyBkZXBlbmRhbnQgb24gdGhlIG1haW4KKwkgKiBhbmQgdGhpcyBpbnN0YW5jZSBpcyBkZXBlbmRlbnQgb24gdGhlIG1haW4KIAkgKi8KIAltYWluX2tvYmogPSBrb2JqZWN0X2dldCgmZWRhY19kZXYtPmtvYmopOwogCWlmICghbWFpbl9rb2JqKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19tYy5jIGIvZHJpdmVycy9lZGFjL2VkYWNfbWMuYwppbmRleCBhNGU5ZGIyLi4xZDgwNTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvZWRhY19tYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX21jLmMKQEAgLTcyNCw3ICs3MjQsNyBAQAogCQkgKiBTb21lIE1DJ3MgY2FuIHJlbWFwIG1lbW9yeSBzbyB0aGF0IGl0IGlzIHN0aWxsIGF2YWlsYWJsZQogCQkgKiBhdCBhIGRpZmZlcmVudCBhZGRyZXNzIHdoZW4gUENJIGRldmljZXMgbWFwIGludG8gbWVtb3J5LgogCQkgKiBNQydzIHRoYXQgY2FuJ3QgZG8gdGhpcyBsb3NlIHRoZSBtZW1vcnkgd2hlcmUgUENJIGRldmljZXMKLQkJICogYXJlIG1hcHBlZC4gIFRoaXMgbWFwcGluZyBpcyBNQyBkZXBlbmRhbnQgYW5kIHNvIHdlIGNhbGwKKwkJICogYXJlIG1hcHBlZC4gIFRoaXMgbWFwcGluZyBpcyBNQyBkZXBlbmRlbnQgYW5kIHNvIHdlIGNhbGwKIAkJICogYmFjayBpbnRvIHRoZSBNQyBkcml2ZXIgZm9yIGl0IHRvIG1hcCB0aGUgTUMgcGFnZSB0bwogCQkgKiBhIHBoeXNpY2FsIChDUFUpIHBhZ2Ugd2hpY2ggY2FuIHRoZW4gYmUgbWFwcGVkIHRvIGEgdmlydHVhbAogCQkgKiBwYWdlIC0gd2hpY2ggY2FuIHRoZW4gYmUgc2NydWJiZWQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19tY19zeXNmcy5jIGIvZHJpdmVycy9lZGFjL2VkYWNfbWNfc3lzZnMuYwppbmRleCA3MzE5NmY3Li4yOWZmYTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvZWRhY19tY19zeXNmcy5jCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX21jX3N5c2ZzLmMKQEAgLTQ1OCwxMyArNDU4LDEzIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJbmV3X2J3ID0gbWNpLT5zZXRfc2RyYW1fc2NydWJfcmF0ZShtY2ksIGJhbmR3aWR0aCk7Ci0JaWYgKG5ld19idyA+PSAwKSB7Ci0JCWVkYWNfcHJpbnRrKEtFUk5fREVCVUcsIEVEQUNfTUMsICJTY3J1YiByYXRlIHNldCB0byAlZFxuIiwgbmV3X2J3KTsKLQkJcmV0dXJuIGNvdW50OworCWlmIChuZXdfYncgPCAwKSB7CisJCWVkYWNfcHJpbnRrKEtFUk5fV0FSTklORywgRURBQ19NQywKKwkJCSAgICAiRXJyb3Igc2V0dGluZyBzY3J1YiByYXRlIHRvOiAlbHVcbiIsIGJhbmR3aWR0aCk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWVkYWNfcHJpbnRrKEtFUk5fREVCVUcsIEVEQUNfTUMsICJFcnJvciBzZXR0aW5nIHNjcnViIHJhdGUgdG86ICVsdVxuIiwgYmFuZHdpZHRoKTsKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gY291bnQ7CiB9CiAKIC8qCkBAIC00ODMsNyArNDgzLDYgQEAKIAkJcmV0dXJuIGJhbmR3aWR0aDsKIAl9CiAKLQllZGFjX3ByaW50ayhLRVJOX0RFQlVHLCBFREFDX01DLCAiUmVhZCBzY3J1YiByYXRlOiAlZFxuIiwgYmFuZHdpZHRoKTsKIAlyZXR1cm4gc3ByaW50ZihkYXRhLCAiJWRcbiIsIGJhbmR3aWR0aCk7CiB9CiAKQEAgLTg1MCw3ICs4NDksNyBAQAogCiAJLyoKIAkgKiBsb29wIGlmIHRoZXJlIGFyZSBhdHRyaWJ1dGVzIGFuZCB1bnRpbCB3ZSBoaXQgYSBOVUxMIGVudHJ5Ci0JICogUmVtb3ZlIGZpcnN0IGFsbCB0aGUgYXRyaWJ1dGVzCisJICogUmVtb3ZlIGZpcnN0IGFsbCB0aGUgYXR0cmlidXRlcwogCSAqLwogCXdoaWxlIChzeXNmc19hdHRyaWIpIHsKIAkJZGVidWdmNCgiJXMoKSBzeXNmc19hdHRyaWIgPSAlcFxuIixfX2Z1bmNfXywgc3lzZnNfYXR0cmliKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9lZGFjX3BjaV9zeXNmcy5jIGIvZHJpdmVycy9lZGFjL2VkYWNfcGNpX3N5c2ZzLmMKaW5kZXggMDIzYjAxYy4uNDk1MTk4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2VkYWNfcGNpX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9lZGFjL2VkYWNfcGNpX3N5c2ZzLmMKQEAgLTM1Miw3ICszNTIsNyBAQAogCQlyZXR1cm4gMDsKIAogCS8qIEZpcnN0IHRpbWUsIHNvIGNyZWF0ZSB0aGUgbWFpbiBrb2JqZWN0IGFuZCBpdHMKLQkgKiBjb250cm9scyBhbmQgYXRyaWJ1dGVzCisJICogY29udHJvbHMgYW5kIGF0dHJpYnV0ZXMKIAkgKi8KIAllZGFjX2NsYXNzID0gZWRhY19nZXRfc3lzZnNfY2xhc3MoKTsKIAlpZiAoZWRhY19jbGFzcyA9PSBOVUxMKSB7CkBAIC01NTEsNyArNTUxLDcgQEAKIC8qCiAgKiAgUENJIFBhcml0eSBwb2xsaW5nCiAgKgotICoJRnVjbnRpb24gdG8gcmV0cmlldmUgdGhlIGN1cnJlbnQgcGFyaXR5IHN0YXR1cworICoJRnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIGN1cnJlbnQgcGFyaXR5IHN0YXR1cwogICoJYW5kIGRlY29kZSBpdAogICoKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2k1MDAwX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9pNTAwMF9lZGFjLmMKaW5kZXggYTVjZWZhYi4uODdmNDI3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2k1MDAwX2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvaTUwMDBfZWRhYy5jCkBAIC0xMzcyLDcgKzEzNzIsNyBAQAogCSAqIGFjdHVhbCBudW1iZXIgb2Ygc2xvdHMvZGltbXMgcGVyIGNoYW5uZWwsIHdlIHRodXMgdXRpbGl6ZSB0aGUKIAkgKiByZXNvdXJjZSBhcyBzcGVjaWZpZWQgYnkgdGhlIGNoaXBzZXQuIFRodXMsIHdlIG1pZ2h0IGhhdmUKIAkgKiBoYXZlIG1vcmUgRElNTXMgcGVyIGNoYW5uZWwgdGhhbiBhY3R1YWxseSBvbiB0aGUgbW9ibywgYnV0IHRoaXMKLQkgKiBhbGxvd3MgdGhlIGRyaXZlciB0byBzdXBwb3J0IHVwdG8gdGhlIGNoaXBzZXQgbWF4LCB3aXRob3V0CisJICogYWxsb3dzIHRoZSBkcml2ZXIgdG8gc3VwcG9ydCB1cCB0byB0aGUgY2hpcHNldCBtYXgsIHdpdGhvdXQKIAkgKiBzb21lIGZhbmN5IG1vYm8gZGV0ZXJtaW5hdGlvbi4KIAkgKi8KIAlpNTAwMF9nZXRfZGltbV9hbmRfY2hhbm5lbF9jb3VudHMocGRldiwgJm51bV9kaW1tc19wZXJfY2hhbm5lbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9pNTEwMF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTUxMDBfZWRhYy5jCmluZGV4IDA0NDhkYTAuLmJjYmRlZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9pNTEwMF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2k1MTAwX2VkYWMuYwpAQCAtMTEsNyArMTEsNyBAQAogICoKICAqIFRoZSBpbnRlbCA1MTAwIGhhcyB0d28gaW5kZXBlbmRlbnQgY2hhbm5lbHMuIEVEQUMgY29yZSBjdXJyZW50bHkKICAqIGNhbiBub3QgcmVmbGVjdCB0aGlzIGNvbmZpZ3VyYXRpb24gc28gaW5zdGVhZCB0aGUgY2hpcC1zZWxlY3QKLSAqIHJvd3MgZm9yIGVhY2ggcmVzcGVjdGl2ZSBjaGFubmVsIGFyZSBsYXllZCBvdXQgb25lIGFmdGVyIGFub3RoZXIsCisgKiByb3dzIGZvciBlYWNoIHJlc3BlY3RpdmUgY2hhbm5lbCBhcmUgbGFpZCBvdXQgb25lIGFmdGVyIGFub3RoZXIsCiAgKiB0aGUgZmlyc3QgaGFsZiBiZWxvbmdpbmcgdG8gY2hhbm5lbCAwLCB0aGUgc2Vjb25kIGhhbGYgYmVsb25naW5nCiAgKiB0byBjaGFubmVsIDEuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9pNTQwMF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTU0MDBfZWRhYy5jCmluZGV4IDM4YTliZTkuLjgwYTQ2NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9pNTQwMF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2k1NDAwX2VkYWMuYwpAQCAtNjQ4LDcgKzY0OCw3IEBACiAJCXJldHVybjsKIAl9CiAKLQkvKiBNaXNjZWxhbmVvdXMgZXJyb3JzICovCisJLyogTWlzY2VsbGFuZW91cyBlcnJvcnMgKi8KIAllcnJudW0gPSBmaW5kX2ZpcnN0X2JpdCgmYWxsRXJyb3JzLCBBUlJBWV9TSVpFKGVycm9yX25hbWUpKTsKIAogCWJyYW5jaCA9IGV4dHJhY3RfZmJkY2hhbl9pbmR4KGluZm8tPmZlcnJfbmZfZmJkKTsKQEAgLTEyNDAsNyArMTI0MCw3IEBACiAJICogYWN0dWFsIG51bWJlciBvZiBzbG90cy9kaW1tcyBwZXIgY2hhbm5lbCwgd2UgdGh1cyB1dGlsaXplIHRoZQogCSAqIHJlc291cmNlIGFzIHNwZWNpZmllZCBieSB0aGUgY2hpcHNldC4gVGh1cywgd2UgbWlnaHQgaGF2ZQogCSAqIGhhdmUgbW9yZSBESU1NcyBwZXIgY2hhbm5lbCB0aGFuIGFjdHVhbGx5IG9uIHRoZSBtb2JvLCBidXQgdGhpcwotCSAqIGFsbG93cyB0aGUgZHJpdmVyIHRvIHN1cHBvcnQgdXB0byB0aGUgY2hpcHNldCBtYXgsIHdpdGhvdXQKKwkgKiBhbGxvd3MgdGhlIGRyaXZlciB0byBzdXBwb3J0IHVwIHRvIHRoZSBjaGlwc2V0IG1heCwgd2l0aG91dAogCSAqIHNvbWUgZmFuY3kgbW9ibyBkZXRlcm1pbmF0aW9uLgogCSAqLwogCW51bV9kaW1tc19wZXJfY2hhbm5lbCA9IE1BWF9ESU1NU19QRVJfQ0hBTk5FTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9pNzMwMF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTczMDBfZWRhYy5jCmluZGV4IDc2ZDFmNTcuLjM2M2NjMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9pNzMwMF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2k3MzAwX2VkYWMuYwpAQCAtMTA2NSw3ICsxMDY1LDcgQEAKIAkgKiBhY3R1YWwgbnVtYmVyIG9mIHNsb3RzL2RpbW1zIHBlciBjaGFubmVsLCB3ZSB0aHVzIHV0aWxpemUgdGhlCiAJICogcmVzb3VyY2UgYXMgc3BlY2lmaWVkIGJ5IHRoZSBjaGlwc2V0LiBUaHVzLCB3ZSBtaWdodCBoYXZlCiAJICogaGF2ZSBtb3JlIERJTU1zIHBlciBjaGFubmVsIHRoYW4gYWN0dWFsbHkgb24gdGhlIG1vYm8sIGJ1dCB0aGlzCi0JICogYWxsb3dzIHRoZSBkcml2ZXIgdG8gc3VwcG9ydCB1cHRvIHRoZSBjaGlwc2V0IG1heCwgd2l0aG91dAorCSAqIGFsbG93cyB0aGUgZHJpdmVyIHRvIHN1cHBvcnQgdXAgdG8gdGhlIGNoaXBzZXQgbWF4LCB3aXRob3V0CiAJICogc29tZSBmYW5jeSBtb2JvIGRldGVybWluYXRpb24uCiAJICovCiAJbnVtX2RpbW1zX3Blcl9jaGFubmVsID0gTUFYX1NMT1RTOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2k3Y29yZV9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTdjb3JlX2VkYWMuYwppbmRleCA4MTE1NGFiLi40NjVjYmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvaTdjb3JlX2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvaTdjb3JlX2VkYWMuYwpAQCAtMTc3Miw3ICsxNzcyLDcgQEAKIAkvKgogCSAqIE1DRSBmaXJzdCBzdGVwOiBDb3B5IGFsbCBtY2UgZXJyb3JzIGludG8gYSB0ZW1wb3JhcnkgYnVmZmVyCiAJICogV2UgdXNlIGEgZG91YmxlIGJ1ZmZlcmluZyBoZXJlLCB0byByZWR1Y2UgdGhlIHJpc2sgb2YKLQkgKiBsb29zaW5nIGFuIGVycm9yLgorCSAqIGxvc2luZyBhbiBlcnJvci4KIAkgKi8KIAlzbXBfcm1iKCk7CiAJY291bnQgPSAocHZ0LT5tY2Vfb3V0ICsgTUNFX0xPR19MRU4gLSBwdnQtPm1jZV9pbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9pODI0NDNieGd4X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9pODI0NDNieGd4X2VkYWMuYwppbmRleCA2Nzg0MDVhLi40MzI5ZDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvaTgyNDQzYnhneF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2k4MjQ0M2J4Z3hfZWRhYy5jCkBAIC0yMDMsNyArMjAzLDcgQEAKIAkJcm93X2hpZ2hfbGltaXQgPSAoKHUzMikgZHJiYXIgPDwgMjMpOwogCQkvKiBmaW5kIHRoZSBEUkFNIENoaXAgU2VsZWN0IEJhc2UgYWRkcmVzcyBhbmQgbWFzayAqLwogCQlkZWJ1Z2YxKCJNQyVkOiAlczogJXMoKSBSb3c9JWQsICIKLQkJCSJCb3VuZHJ5IEFkZHJlc3M9JSMweCwgTGFzdCA9ICUjMHhcbiIsCisJCQkiQm91bmRhcnkgQWRkcmVzcz0lIzB4LCBMYXN0ID0gJSMweFxuIiwKIAkJCW1jaS0+bWNfaWR4LCBfX0ZJTEVfXywgX19mdW5jX18sIGluZGV4LCByb3dfaGlnaF9saW1pdCwKIAkJCXJvd19oaWdoX2xpbWl0X2xhc3QpOwogCkBAIC0zMDUsNyArMzA1LDcgQEAKIAlpODI0NDNieGd4X2luaXRfY3Nyb3dzKG1jaSwgcGRldiwgZWRhY19tb2RlLCBtdHlwZSk7CiAKIAkvKiBNYW55IEJJT1NlcyBkb24ndCBjbGVhciBlcnJvciBmbGFncyBvbiBib290LCBzbyBkbyB0aGlzCi0JICogaGVyZSwgb3Igd2UgZ2V0ICJwaGFudG9tIiBlcnJvcnMgb2NjdXJpbmcgYXQgbW9kdWxlLWxvYWQKKwkgKiBoZXJlLCBvciB3ZSBnZXQgInBoYW50b20iIGVycm9ycyBvY2N1cnJpbmcgYXQgbW9kdWxlLWxvYWQKIAkgKiB0aW1lLiAqLwogCXBjaV93cml0ZV9iaXRzMzIocGRldiwgSTgyNDQzQlhHWF9FQVAsCiAJCQkoSTgyNDQzQlhHWF9FQVBfT0ZGU0VUX1NCRSB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvbWNlX2FtZF9pbmouYyBiL2RyaXZlcnMvZWRhYy9tY2VfYW1kX2luai5jCmluZGV4IDczM2E3ZTdhLi5hNDk4N2UwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvbWNlX2FtZF9pbmouYworKysgYi9kcml2ZXJzL2VkYWMvbWNlX2FtZF9pbmouYwpAQCAtOTAsNyArOTAsNyBAQAogCiAJaWYgKHZhbHVlID4gNSkKIAkJaWYgKGJvb3RfY3B1X2RhdGEueDg2ICE9IDB4MTUgfHwgdmFsdWUgPiA2KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIk5vbi1leGlzdGFudCBNQ0UgYmFuazogJWx1XG4iLCB2YWx1ZSk7CisJCQlwcmludGsoS0VSTl9FUlIgIk5vbi1leGlzdGVudCBNQ0UgYmFuazogJWx1XG4iLCB2YWx1ZSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvcHBjNHh4X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9wcGM0eHhfZWRhYy5jCmluZGV4IGMxZjAwNDUuLmFmOGU3YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9wcGM0eHhfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9wcGM0eHhfZWRhYy5jCkBAIC0xMDE5LDcgKzEwMTksNyBAQAogCXN0cnVjdCBwcGM0eHhfZWRhY19wZGF0YSAqcGRhdGEgPSBOVUxMOwogCWNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvcC0+ZGV2Lm9mX25vZGU7CiAKLQlpZiAob3AtPmRldi5vZl9tYXRjaCA9PSBOVUxMKQorCWlmIChvZl9tYXRjaF9kZXZpY2UocHBjNHh4X2VkYWNfbWF0Y2gsICZvcC0+ZGV2KSA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIEluaXRpYWwgZHJpdmVyIHBvaW50ZXJzIGFuZCBwcml2YXRlIGRhdGEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9yODI2MDBfZWRhYy5jIGIvZHJpdmVycy9lZGFjL3I4MjYwMF9lZGFjLmMKaW5kZXggNmE4MjJjNi4uNjc4NTEzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL3I4MjYwMF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL3I4MjYwMF9lZGFjLmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogCQkJCSAqICAgICAgICB3cml0ZSAwPU5PUAogCQkJCSAqLwogCi0jZGVmaW5lIFI4MjYwMF9EUkJBCTB4NjAJLyogKyAweDYwLi4weDYzIFNEUkFNIFJvdyBCb3VuZHJ5IEFkZHJlc3MKKyNkZWZpbmUgUjgyNjAwX0RSQkEJMHg2MAkvKiArIDB4NjAuLjB4NjMgU0RSQU0gUm93IEJvdW5kYXJ5IEFkZHJlc3MKIAkJCQkgKiAgUmVnaXN0ZXJzCiAJCQkJICoKIAkJCQkgKiA3OjAgIEFkZHJlc3MgbGluZXMgMzA6MjQgLSB1cHBlciBsaW1pdCBvZgpAQCAtMjE3LDcgKzIxNyw3IEBACiB7CiAJc3RydWN0IGNzcm93X2luZm8gKmNzcm93OwogCWludCBpbmRleDsKLQl1OCBkcmJhcjsJCS8qIFNEUkFNIFJvdyBCb3VuZHJ5IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKwl1OCBkcmJhcjsJCS8qIFNEUkFNIFJvdyBCb3VuZGFyeSBBZGRyZXNzIFJlZ2lzdGVyICovCiAJdTMyIHJvd19oaWdoX2xpbWl0LCByb3dfaGlnaF9saW1pdF9sYXN0OwogCXUzMiByZWdfc2RyYW0sIGVjY19vbiwgcm93X2Jhc2U7CiAKQEAgLTIzNiw3ICsyMzYsNyBAQAogCQlyb3dfaGlnaF9saW1pdCA9ICgodTMyKSBkcmJhciA8PCAyNCk7CiAvKgkJcm93X2hpZ2hfbGltaXQgPSAoKHUzMilkcmJhciA8PCAyNCkgfCAweGZmZmZmZlVMOyAqLwogCi0JCWRlYnVnZjEoIiVzKCkgUm93PSVkLCBCb3VuZHJ5IEFkZHJlc3M9JSMweCwgTGFzdCA9ICUjMHhcbiIsCisJCWRlYnVnZjEoIiVzKCkgUm93PSVkLCBCb3VuZGFyeSBBZGRyZXNzPSUjMHgsIExhc3QgPSAlIzB4XG4iLAogCQkJX19mdW5jX18sIGluZGV4LCByb3dfaGlnaF9saW1pdCwgcm93X2hpZ2hfbGltaXRfbGFzdCk7CiAKIAkJLyogRW1wdHkgcm93IFtwLjU3XSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9uZXQuYyBiL2RyaXZlcnMvZmlyZXdpcmUvbmV0LmMKaW5kZXggN2VkMDhmZC4uM2YwNGRkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9uZXQuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL25ldC5jCkBAIC00NTMsNyArNDUzLDcgQEAKIAltZW1jcHkocGQtPnBidWYgKyBmcmFnX29mZiwgZnJhZ19idWYsIGZyYWdfbGVuKTsKIAogCS8qCi0JICogTW92ZSBsaXN0IGVudHJ5IHRvIGJlZ2lubmlnIG9mIGxpc3Qgc28gdGhhdCBvbGRlc3QgcGFydGlhbAorCSAqIE1vdmUgbGlzdCBlbnRyeSB0byBiZWdpbm5pbmcgb2YgbGlzdCBzbyB0aGF0IG9sZGVzdCBwYXJ0aWFsCiAJICogZGF0YWdyYW1zIHBlcmNvbGF0ZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CiAJICovCiAJbGlzdF9tb3ZlX3RhaWwoJnBkLT5wZF9saW5rLCAmcGVlci0+cGRfbGlzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYyBiL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jCmluZGV4IGY5MDNkN2I2Li4yM2QxNDY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYwpAQCAtMjE5OSw3ICsyMTk5LDYgQEAKIHsKIAlzdHJ1Y3QgZndfb2hjaSAqb2hjaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAtRUJVU1k7CiAJX19iZTMyICpuZXh0X2NvbmZpZ19yb207CiAJZG1hX2FkZHJfdCB1bmluaXRpYWxpemVkX3ZhcihuZXh0X2NvbmZpZ19yb21fYnVzKTsKIApAQCAtMjI0MCwyMiArMjIzOSwzNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm9oY2ktPmxvY2ssIGZsYWdzKTsKIAorCS8qCisJICogSWYgdGhlcmUgaXMgbm90IGFuIGFscmVhZHkgcGVuZGluZyBjb25maWdfcm9tIHVwZGF0ZSwKKwkgKiBwdXNoIG91ciBuZXcgYWxsb2NhdGlvbiBpbnRvIHRoZSBvaGNpLT5uZXh0X2NvbmZpZ19yb20KKwkgKiBhbmQgdGhlbiBtYXJrIHRoZSBsb2NhbCB2YXJpYWJsZSBhcyBudWxsIHNvIHRoYXQgd2UKKwkgKiB3b24ndCBkZWFsbG9jYXRlIHRoZSBuZXcgYnVmZmVyLgorCSAqCisJICogT1RPSCwgaWYgdGhlcmUgaXMgYSBwZW5kaW5nIGNvbmZpZ19yb20gdXBkYXRlLCBqdXN0CisJICogdXNlIHRoYXQgYnVmZmVyIHdpdGggdGhlIG5ldyBjb25maWdfcm9tIGRhdGEsIGFuZAorCSAqIGxldCB0aGlzIHJvdXRpbmUgZnJlZSB0aGUgdW51c2VkIERNQSBhbGxvY2F0aW9uLgorCSAqLworCiAJaWYgKG9oY2ktPm5leHRfY29uZmlnX3JvbSA9PSBOVUxMKSB7CiAJCW9oY2ktPm5leHRfY29uZmlnX3JvbSA9IG5leHRfY29uZmlnX3JvbTsKIAkJb2hjaS0+bmV4dF9jb25maWdfcm9tX2J1cyA9IG5leHRfY29uZmlnX3JvbV9idXM7Ci0KLQkJY29weV9jb25maWdfcm9tKG9oY2ktPm5leHRfY29uZmlnX3JvbSwgY29uZmlnX3JvbSwgbGVuZ3RoKTsKLQotCQlvaGNpLT5uZXh0X2hlYWRlciA9IGNvbmZpZ19yb21bMF07Ci0JCW9oY2ktPm5leHRfY29uZmlnX3JvbVswXSA9IDA7Ci0KLQkJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0NvbmZpZ1JPTW1hcCwKLQkJCSAgb2hjaS0+bmV4dF9jb25maWdfcm9tX2J1cyk7Ci0JCXJldCA9IDA7CisJCW5leHRfY29uZmlnX3JvbSA9IE5VTEw7CiAJfQogCisJY29weV9jb25maWdfcm9tKG9oY2ktPm5leHRfY29uZmlnX3JvbSwgY29uZmlnX3JvbSwgbGVuZ3RoKTsKKworCW9oY2ktPm5leHRfaGVhZGVyID0gY29uZmlnX3JvbVswXTsKKwlvaGNpLT5uZXh0X2NvbmZpZ19yb21bMF0gPSAwOworCisJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0NvbmZpZ1JPTW1hcCwgb2hjaS0+bmV4dF9jb25maWdfcm9tX2J1cyk7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvaGNpLT5sb2NrLCBmbGFncyk7CiAKKwkvKiBJZiB3ZSBkaWRuJ3QgdXNlIHRoZSBETUEgYWxsb2NhdGlvbiwgZGVsZXRlIGl0LiAqLworCWlmIChuZXh0X2NvbmZpZ19yb20gIT0gTlVMTCkKKwkJZG1hX2ZyZWVfY29oZXJlbnQob2hjaS0+Y2FyZC5kZXZpY2UsIENPTkZJR19ST01fU0laRSwKKwkJCQkgIG5leHRfY29uZmlnX3JvbSwgbmV4dF9jb25maWdfcm9tX2J1cyk7CisKIAkvKgogCSAqIE5vdyBpbml0aWF0ZSBhIGJ1cyByZXNldCB0byBoYXZlIHRoZSBjaGFuZ2VzIHRha2UKIAkgKiBlZmZlY3QuIFdlIGNsZWFuIHVwIHRoZSBvbGQgY29uZmlnIHJvbSBtZW1vcnkgYW5kIERNQQpAQCAtMjI2MywxMyArMjI3NywxMCBAQAogCSAqIGNvbnRyb2xsZXIgY291bGQgbmVlZCB0byBhY2Nlc3MgaXQgYmVmb3JlIHRoZSBidXMgcmVzZXQKIAkgKiB0YWtlcyBlZmZlY3QuCiAJICovCi0JaWYgKHJldCA9PSAwKQotCQlmd19zY2hlZHVsZV9idXNfcmVzZXQoJm9oY2ktPmNhcmQsIHRydWUsIHRydWUpOwotCWVsc2UKLQkJZG1hX2ZyZWVfY29oZXJlbnQob2hjaS0+Y2FyZC5kZXZpY2UsIENPTkZJR19ST01fU0laRSwKLQkJCQkgIG5leHRfY29uZmlnX3JvbSwgbmV4dF9jb25maWdfcm9tX2J1cyk7CiAKLQlyZXR1cm4gcmV0OworCWZ3X3NjaGVkdWxlX2J1c19yZXNldCgmb2hjaS0+Y2FyZCwgdHJ1ZSwgdHJ1ZSk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgb2hjaV9zZW5kX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9tYzMzODgwLmMgYi9kcml2ZXJzL2dwaW8vbWMzMzg4MC5jCmluZGV4IDAwZjZkMjQuLjRlYzc5NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9tYzMzODgwLmMKKysrIGIvZHJpdmVycy9ncGlvL21jMzM4ODAuYwpAQCAtNDUsNyArNDUsNyBAQAogICogVG8gc2F2ZSB0aW1lIHdlIGNhY2hlIHRoZW0gaGVyZSBpbiBtZW1vcnkKICAqLwogc3RydWN0IG1jMzM4ODAgewotCXN0cnVjdCBtdXRleAlsb2NrOwkvKiBwcm90ZWN0IGZyb20gc2ltdWx0YW5vdXMgYWNjZXNzZXMgKi8KKwlzdHJ1Y3QgbXV0ZXgJbG9jazsJLyogcHJvdGVjdCBmcm9tIHNpbXVsdGFuZW91cyBhY2Nlc3NlcyAqLwogCXU4CQlwb3J0X2NvbmZpZzsKIAlzdHJ1Y3QgZ3Bpb19jaGlwIGNoaXA7CiAJc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9tbF9pb2hfZ3Bpby5jIGIvZHJpdmVycy9ncGlvL21sX2lvaF9ncGlvLmMKaW5kZXggN2Y2ZjAxYS4uMGE3NzVmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL21sX2lvaF9ncGlvLmMKKysrIGIvZHJpdmVycy9ncGlvL21sX2lvaF9ncGlvLmMKQEAgLTExNiw2ICsxMTYsNyBAQAogCQlyZWdfdmFsIHw9ICgxIDw8IG5yKTsKIAllbHNlCiAJCXJlZ192YWwgJj0gfigxIDw8IG5yKTsKKwlpb3dyaXRlMzIocmVnX3ZhbCwgJmNoaXAtPnJlZy0+cmVnc1tjaGlwLT5jaF0ucG8pOwogCiAJbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3BjYTk1M3guYyBiL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMKaW5kZXggNTgzZTkyNS4uNzYzMGFiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL3BjYTk1M3guYworKysgYi9kcml2ZXJzL2dwaW8vcGNhOTUzeC5jCkBAIC01NTgsNyArNTU4LDcgQEAKIAogCXJldCA9IGdwaW9jaGlwX2FkZCgmY2hpcC0+Z3Bpb19jaGlwKTsKIAlpZiAocmV0KQotCQlnb3RvIG91dF9mYWlsZWQ7CisJCWdvdG8gb3V0X2ZhaWxlZF9pcnE7CiAKIAlpZiAocGRhdGEtPnNldHVwKSB7CiAJCXJldCA9IHBkYXRhLT5zZXR1cChjbGllbnQsIGNoaXAtPmdwaW9fY2hpcC5iYXNlLApAQCAtNTcwLDggKzU3MCw5IEBACiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgY2hpcCk7CiAJcmV0dXJuIDA7CiAKLW91dF9mYWlsZWQ6CitvdXRfZmFpbGVkX2lycToKIAlwY2E5NTN4X2lycV90ZWFyZG93bihjaGlwKTsKK291dF9mYWlsZWQ6CiAJa2ZyZWUoY2hpcC0+ZHluX3BkYXRhKTsKIAlrZnJlZShjaGlwKTsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3BjaF9ncGlvLmMgYi9kcml2ZXJzL2dwaW8vcGNoX2dwaW8uYwppbmRleCAyYzZhZjg3Li5mOTcwYTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vcGNoX2dwaW8uYworKysgYi9kcml2ZXJzL2dwaW8vcGNoX2dwaW8uYwpAQCAtMTA1LDYgKzEwNSw3IEBACiAJCXJlZ192YWwgfD0gKDEgPDwgbnIpOwogCWVsc2UKIAkJcmVnX3ZhbCAmPSB+KDEgPDwgbnIpOworCWlvd3JpdGUzMihyZWdfdmFsLCAmY2hpcC0+cmVnLT5wbyk7CiAKIAltdXRleF91bmxvY2soJmNoaXAtPmxvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCmluZGV4IGE2ZmViNzhjLi5iNDkzNjYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpAQCAtMjQsNiArMjQsNyBAQAogCWRlcGVuZHMgb24gRFJNCiAJc2VsZWN0IEZCCiAJc2VsZWN0IEZSQU1FQlVGRkVSX0NPTlNPTEUgaWYgIUVYUEVSVAorCXNlbGVjdCBGUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlmIEZSQU1FQlVGRkVSX0NPTlNPTEUKIAloZWxwCiAJICBGQiBhbmQgQ1JUQyBoZWxwZXJzIGZvciBLTVMgZHJpdmVycy4KIApAQCAtOTYsNiArOTcsNyBAQAogCSMgaTkxNSBkZXBlbmRzIG9uIEFDUElfVklERU8gd2hlbiBBQ1BJIGlzIGVuYWJsZWQKIAkjIGJ1dCBmb3Igc2VsZWN0IHRvIHdvcmssIG5lZWQgdG8gc2VsZWN0IEFDUElfVklERU8ncyBkZXBlbmRlbmNpZXMsIGljawogCXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFIGlmIEFDUEkKKwlzZWxlY3QgVklERU9fT1VUUFVUX0NPTlRST0wgaWYgQUNQSQogCXNlbGVjdCBJTlBVVCBpZiBBQ1BJCiAJc2VsZWN0IEFDUElfVklERU8gaWYgQUNQSQogCXNlbGVjdCBBQ1BJX0JVVFRPTiBpZiBBQ1BJCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCmluZGV4IDc5OWUxNDkuLjg3Mjc0N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCkBAIC0xNjk5LDcgKzE2OTksNyBAQAogCiAJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CiAKLQkvKiBUT0RPIGNoZWNrIGJ1ZmZlciBpcyBzdWZmaWNlbnRseSBsYXJnZSAqLworCS8qIFRPRE8gY2hlY2sgYnVmZmVyIGlzIHN1ZmZpY2llbnRseSBsYXJnZSAqLwogCS8qIFRPRE8gc2V0dXAgZGVzdHJ1Y3RvciBjYWxsYmFjayAqLwogCiAJZmIgPSBkZXYtPm1vZGVfY29uZmlnLmZ1bmNzLT5mYl9jcmVhdGUoZGV2LCBmaWxlX3ByaXYsIHIpOwpAQCAtMTc1MCw3ICsxNzUwLDcgQEAKIAogCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwogCW9iaiA9IGRybV9tb2RlX29iamVjdF9maW5kKGRldiwgKmlkLCBEUk1fTU9ERV9PQkpFQ1RfRkIpOwotCS8qIFRPRE8gY2hlY2sgdGhhdCB3ZSByZWFseSBnZXQgYSBmcmFtZWJ1ZmZlciBiYWNrLiAqLworCS8qIFRPRE8gY2hlY2sgdGhhdCB3ZSByZWFsbHkgZ2V0IGEgZnJhbWVidWZmZXIgYmFjay4gKi8KIAlpZiAoIW9iaikgewogCQlEUk1fRVJST1IoIm1vZGUgaW52YWxpZCBmcmFtZWJ1ZmZlciBpZFxuIik7CiAJCXJldCA9IC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwppbmRleCA5NTA3MjA0Li4xNDBiOTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKQEAgLTM0Miw5ICszNDIsMjIgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9kZWJ1Z19sZWF2ZSk7CiAKK2Jvb2wgZHJtX2ZiX2hlbHBlcl9yZXN0b3JlX2ZiZGV2X21vZGUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcikKK3sKKwlib29sIGVycm9yID0gZmFsc2U7CisJaW50IGksIHJldDsKKwlmb3IgKGkgPSAwOyBpIDwgZmJfaGVscGVyLT5jcnRjX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZV9zZXQgPSAmZmJfaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQ7CisJCXJldCA9IGRybV9jcnRjX2hlbHBlcl9zZXRfY29uZmlnKG1vZGVfc2V0KTsKKwkJaWYgKHJldCkKKwkJCWVycm9yID0gdHJ1ZTsKKwl9CisJcmV0dXJuIGVycm9yOworfQorRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX3Jlc3RvcmVfZmJkZXZfbW9kZSk7CisKIGJvb2wgZHJtX2ZiX2hlbHBlcl9mb3JjZV9rZXJuZWxfbW9kZSh2b2lkKQogewotCWludCBpID0gMDsKIAlib29sIHJldCwgZXJyb3IgPSBmYWxzZTsKIAlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyOwogCkBAIC0zNTIsMTIgKzM2NSwxMiBAQAogCQlyZXR1cm4gZmFsc2U7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhlbHBlciwgJmtlcm5lbF9mYl9oZWxwZXJfbGlzdCwga2VybmVsX2ZiX2xpc3QpIHsKLQkJZm9yIChpID0gMDsgaSA8IGhlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7Ci0JCQlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2RlX3NldCA9ICZoZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldDsKLQkJCXJldCA9IGRybV9jcnRjX2hlbHBlcl9zZXRfY29uZmlnKG1vZGVfc2V0KTsKLQkJCWlmIChyZXQpCi0JCQkJZXJyb3IgPSB0cnVlOwotCQl9CisJCWlmIChoZWxwZXItPmRldi0+c3dpdGNoX3Bvd2VyX3N0YXRlID09IERSTV9TV0lUQ0hfUE9XRVJfT0ZGKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gZHJtX2ZiX2hlbHBlcl9yZXN0b3JlX2ZiZGV2X21vZGUoaGVscGVyKTsKKwkJaWYgKHJldCkKKwkJCWVycm9yID0gdHJ1ZTsKIAl9CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMTUwMywxNyArMTUxNiwzMyBAQAogfQogRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX2luaXRpYWxfY29uZmlnKTsKIAotYm9vbCBkcm1fZmJfaGVscGVyX2hvdHBsdWdfZXZlbnQoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcikKKy8qKgorICogZHJtX2ZiX2hlbHBlcl9ob3RwbHVnX2V2ZW50IC0gcmVzcG9uZCB0byBhIGhvdHBsdWcgbm90aWZpY2F0aW9uIGJ5CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9iaW5nIGFsbCB0aGUgb3V0cHV0cyBhdHRhY2hlZCB0byB0aGUgZmIuCisgKiBAZmJfaGVscGVyOiB0aGUgZHJtX2ZiX2hlbHBlcgorICoKKyAqIExPQ0tJTkc6CisgKiBDYWxsZWQgYXQgcnVudGltZSwgbXVzdCB0YWtlIG1vZGUgY29uZmlnIGxvY2suCisgKgorICogU2NhbiB0aGUgY29ubmVjdG9ycyBhdHRhY2hlZCB0byB0aGUgZmJfaGVscGVyIGFuZCB0cnkgdG8gcHV0IHRvZ2V0aGVyIGEKKyAqIHNldHVwIGFmdGVyICpub3RpZmljYXRpb24gb2YgYSBjaGFuZ2UgaW4gb3V0cHV0IGNvbmZpZ3VyYXRpb24uCisgKgorICogUkVUVVJOUzoKKyAqIDAgb24gc3VjY2VzcyBhbmQgYSBub24temVybyBlcnJvciBjb2RlIG90aGVyd2lzZS4KKyAqLworaW50IGRybV9mYl9oZWxwZXJfaG90cGx1Z19ldmVudChzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKQogeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBmYl9oZWxwZXItPmRldjsKIAlpbnQgY291bnQgPSAwOwogCXUzMiBtYXhfd2lkdGgsIG1heF9oZWlnaHQsIGJwcF9zZWw7CiAJYm9vbCBib3VuZCA9IGZhbHNlLCBjcnRjc19ib3VuZCA9IGZhbHNlOwogCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKIAogCWlmICghZmJfaGVscGVyLT5mYikKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmZiX2hlbHBlci0+ZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKKwltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewogCQlpZiAoY3J0Yy0+ZmIpCiAJCQljcnRjc19ib3VuZCA9IHRydWU7CiAJCWlmIChjcnRjLT5mYiA9PSBmYl9oZWxwZXItPmZiKQpAQCAtMTUyMiw3ICsxNTUxLDggQEAKIAogCWlmICghYm91bmQgJiYgY3J0Y3NfYm91bmQpIHsKIAkJZmJfaGVscGVyLT5kZWxheWVkX2hvdHBsdWcgPSB0cnVlOwotCQlyZXR1cm4gZmFsc2U7CisJCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJCXJldHVybiAwOwogCX0KIAlEUk1fREVCVUdfS01TKCJcbiIpOwogCkBAIC0xNTMzLDYgKzE1NjMsNyBAQAogCWNvdW50ID0gZHJtX2ZiX2hlbHBlcl9wcm9iZV9jb25uZWN0b3JfbW9kZXMoZmJfaGVscGVyLCBtYXhfd2lkdGgsCiAJCQkJCQkgICAgbWF4X2hlaWdodCk7CiAJZHJtX3NldHVwX2NydGNzKGZiX2hlbHBlcik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAogCXJldHVybiBkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9wcm9iZShmYl9oZWxwZXIsIGJwcF9zZWwpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKaW5kZXggNzQxNDU3Yi4uYTFmMTJjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCkBAIC05MzIsMTEgKzkzMiwzNCBAQAogCiB2b2lkIGRybV92Ymxhbmtfb2ZmKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQogeworCXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmUsICp0OworCXN0cnVjdCB0aW1ldmFsIG5vdzsKIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXVuc2lnbmVkIGludCBzZXE7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOwogCXZibGFua19kaXNhYmxlX2FuZF9zYXZlKGRldiwgY3J0Yyk7CiAJRFJNX1dBS0VVUCgmZGV2LT52YmxfcXVldWVbY3J0Y10pOworCisJLyogU2VuZCBhbnkgcXVldWVkIHZibGFuayBldmVudHMsIGxlc3QgdGhlIG5hdGl2ZXMgZ3JvdyBkaXNxdWlldCAqLworCXNlcSA9IGRybV92YmxhbmtfY291bnRfYW5kX3RpbWUoZGV2LCBjcnRjLCAmbm93KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZSwgdCwgJmRldi0+dmJsYW5rX2V2ZW50X2xpc3QsIGJhc2UubGluaykgeworCQlpZiAoZS0+cGlwZSAhPSBjcnRjKQorCQkJY29udGludWU7CisJCURSTV9ERUJVRygiU2VuZGluZyBwcmVtYXR1cmUgdmJsYW5rIGV2ZW50IG9uIGRpc2FibGU6IFwKKwkJCSAgd2FudGVkICVkLCBjdXJyZW50ICVkXG4iLAorCQkJICBlLT5ldmVudC5zZXF1ZW5jZSwgc2VxKTsKKworCQllLT5ldmVudC5zZXF1ZW5jZSA9IHNlcTsKKwkJZS0+ZXZlbnQudHZfc2VjID0gbm93LnR2X3NlYzsKKwkJZS0+ZXZlbnQudHZfdXNlYyA9IG5vdy50dl91c2VjOworCQlkcm1fdmJsYW5rX3B1dChkZXYsIGUtPnBpcGUpOworCQlsaXN0X21vdmVfdGFpbCgmZS0+YmFzZS5saW5rLCAmZS0+YmFzZS5maWxlX3ByaXYtPmV2ZW50X2xpc3QpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmUtPmJhc2UuZmlsZV9wcml2LT5ldmVudF93YWl0KTsKKwkJdHJhY2VfZHJtX3ZibGFua19ldmVudF9kZWxpdmVyZWQoZS0+YmFzZS5waWQsIGUtPnBpcGUsCisJCQkJCQkgZS0+ZXZlbnQuc2VxdWVuY2UpOworCX0KKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsX2xvY2ssIGlycWZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX3ZibGFua19vZmYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCmluZGV4IGFkZDE3MzcuLjk1OTE4NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMKQEAgLTQzMSw3ICs0MzEsNyBAQAogdm9pZCBkcm1fbW1fcmVwbGFjZV9ub2RlKHN0cnVjdCBkcm1fbW1fbm9kZSAqb2xkLCBzdHJ1Y3QgZHJtX21tX25vZGUgKm5ldykKIHsKIAlsaXN0X3JlcGxhY2UoJm9sZC0+bm9kZV9saXN0LCAmbmV3LT5ub2RlX2xpc3QpOwotCWxpc3RfcmVwbGFjZSgmb2xkLT5ub2RlX2xpc3QsICZuZXctPmhvbGVfc3RhY2spOworCWxpc3RfcmVwbGFjZSgmb2xkLT5ob2xlX3N0YWNrLCAmbmV3LT5ob2xlX3N0YWNrKTsKIAluZXctPmhvbGVfZm9sbG93cyA9IG9sZC0+aG9sZV9mb2xsb3dzOwogCW5ldy0+bW0gPSBvbGQtPm1tOwogCW5ldy0+c3RhcnQgPSBvbGQtPnN0YXJ0OwpAQCAtNTUxLDcgKzU1MSw3IEBACiAgKiBjb3JydXB0ZWQuCiAgKgogICogV2hlbiB0aGUgc2NhbiBsaXN0IGlzIGVtcHR5LCB0aGUgc2VsZWN0ZWQgbWVtb3J5IG5vZGVzIGNhbiBiZSBmcmVlZC4gQW4KLSAqIGltbWVkaWF0bHkgZm9sbG93aW5nIGRybV9tbV9zZWFyY2hfZnJlZSB3aXRoIGJlc3RfbWF0Y2ggPSAwIHdpbGwgdGhlbiByZXR1cm4KKyAqIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBkcm1fbW1fc2VhcmNoX2ZyZWUgd2l0aCBiZXN0X21hdGNoID0gMCB3aWxsIHRoZW4gcmV0dXJuCiAgKiB0aGUganVzdCBmcmVlZCBibG9jayAoYmVjYXVzZSBpdHMgYXQgdGhlIHRvcCBvZiB0aGUgZnJlZV9zdGFjayBsaXN0KS4KICAqCiAgKiBSZXR1cm5zIG9uZSBpZiB0aGlzIGJsb2NrIHNob3VsZCBiZSBldmljdGVkLCB6ZXJvIG90aGVyd2lzZS4gV2lsbCBhbHdheXMKQEAgLTY5OSw4ICs2OTksOCBAQAogCQkJCWVudHJ5LT5zaXplKTsKIAkJdG90YWxfdXNlZCArPSBlbnRyeS0+c2l6ZTsKIAkJaWYgKGVudHJ5LT5ob2xlX2ZvbGxvd3MpIHsKLQkJCWhvbGVfc3RhcnQgPSBkcm1fbW1faG9sZV9ub2RlX3N0YXJ0KCZtbS0+aGVhZF9ub2RlKTsKLQkJCWhvbGVfZW5kID0gZHJtX21tX2hvbGVfbm9kZV9lbmQoJm1tLT5oZWFkX25vZGUpOworCQkJaG9sZV9zdGFydCA9IGRybV9tbV9ob2xlX25vZGVfc3RhcnQoZW50cnkpOworCQkJaG9sZV9lbmQgPSBkcm1fbW1faG9sZV9ub2RlX2VuZChlbnRyeSk7CiAJCQlob2xlX3NpemUgPSBob2xlX2VuZCAtIGhvbGVfc3RhcnQ7CiAJCQlzZXFfcHJpbnRmKG0sICIweCUwOGx4LTB4JTA4bHg6IDB4JTA4bHg6IGZyZWVcbiIsCiAJCQkJCWhvbGVfc3RhcnQsIGhvbGVfZW5kLCBob2xlX3NpemUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKaW5kZXggNzI3MzAzNy4uMTI4NzZmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCkBAIC0yMjA3LDcgKzIyMDcsNyBAQAogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCiAJaWYgKCFkZXZfcHJpdiB8fCBkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7Ci0JCWRybV9mYl9oZWxwZXJfcmVzdG9yZSgpOworCQlpbnRlbF9mYl9yZXN0b3JlX21vZGUoZGV2KTsKIAkJdmdhX3N3aXRjaGVyb29fcHJvY2Vzc19kZWxheWVkX3N3aXRjaCgpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggYzM0YThkZC4uMzJkMWIzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCkBAIC00OSw3ICs0OSw3IEBACiB1bnNpZ25lZCBpbnQgaTkxNV9wb3dlcnNhdmUgPSAxOwogbW9kdWxlX3BhcmFtX25hbWVkKHBvd2Vyc2F2ZSwgaTkxNV9wb3dlcnNhdmUsIGludCwgMDYwMCk7CiAKLXVuc2lnbmVkIGludCBpOTE1X3NlbWFwaG9yZXMgPSAxOwordW5zaWduZWQgaW50IGk5MTVfc2VtYXBob3JlcyA9IDA7CiBtb2R1bGVfcGFyYW1fbmFtZWQoc2VtYXBob3JlcywgaTkxNV9zZW1hcGhvcmVzLCBpbnQsIDA2MDApOwogCiB1bnNpZ25lZCBpbnQgaTkxNV9lbmFibGVfcmM2ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDUwMDQ3MjQuLjFjMWIyN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtNjMwLDcgKzYzMCw3IEBACiAJCSAqIEZsYWcgaWYgdGhlIGhhcmR3YXJlIGFwcGVhcnMgdG8gYmUgd2VkZ2VkLgogCQkgKgogCQkgKiBUaGlzIGlzIHNldCB3aGVuIGF0dGVtcHRzIHRvIGlkbGUgdGhlIGRldmljZSB0aW1lb3V0LgotCQkgKiBJdCBwcmV2ZW50cyBjb21tYW5kIHN1Ym1pc3Npb24gZnJvbSBvY2N1cmluZyBhbmQgbWFrZXMKKwkJICogSXQgcHJldmVudHMgY29tbWFuZCBzdWJtaXNzaW9uIGZyb20gb2NjdXJyaW5nIGFuZCBtYWtlcwogCQkgKiBldmVyeSBwZW5kaW5nIHJlcXVlc3QgZmFpbAogCQkgKi8KIAkJYXRvbWljX3Qgd2VkZ2VkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IDQzMmZjMDQuLjIxNjZlZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTM3NzEsOCArMzc3MSwxMSBAQAogCWludCBlbnRyaWVzLCB0bGJfbWlzczsKIAogCWNydGMgPSBpbnRlbF9nZXRfY3J0Y19mb3JfcGxhbmUoZGV2LCBwbGFuZSk7Ci0JaWYgKGNydGMtPmZiID09IE5VTEwgfHwgIWNydGMtPmVuYWJsZWQpCisJaWYgKGNydGMtPmZiID09IE5VTEwgfHwgIWNydGMtPmVuYWJsZWQpIHsKKwkJKmN1cnNvcl93bSA9IGN1cnNvci0+Z3VhcmRfc2l6ZTsKKwkJKnBsYW5lX3dtID0gZGlzcGxheS0+Z3VhcmRfc2l6ZTsKIAkJcmV0dXJuIGZhbHNlOworCX0KIAogCWh0b3RhbCA9IGNydGMtPm1vZGUuaHRvdGFsOwogCWhkaXNwbGF5ID0gY3J0Yy0+bW9kZS5oZGlzcGxheTsKQEAgLTU2MDIsOSArNTYwNSw5IEBACiAJaW50ZWxfY2xvY2tfdCBjbG9jazsKIAogCWlmICgoZHBsbCAmIERJU1BMQVlfUkFURV9TRUxFQ1RfRlBBMSkgPT0gMCkKLQkJZnAgPSBGUDAocGlwZSk7CisJCWZwID0gSTkxNV9SRUFEKEZQMChwaXBlKSk7CiAJZWxzZQotCQlmcCA9IEZQMShwaXBlKTsKKwkJZnAgPSBJOTE1X1JFQUQoRlAxKHBpcGUpKTsKIAogCWNsb2NrLm0xID0gKGZwICYgRlBfTTFfRElWX01BU0spID4+IEZQX00xX0RJVl9TSElGVDsKIAlpZiAoSVNfUElORVZJRVcoZGV2KSkgewpAQCAtNjIxNSwzNiArNjIxOCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgaW50ZWxfY3J0Y19yZXNldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCi17Ci0Jc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwotCi0JLyogUmVzZXQgZmxhZ3MgYmFjayB0byB0aGUgJ3Vua25vd24nIHN0YXR1cyBzbyB0aGF0IHRoZXkKLQkgKiB3aWxsIGJlIGNvcnJlY3RseSBzZXQgb24gdGhlIGluaXRpYWwgbW9kZXNldC4KLQkgKi8KLQlpbnRlbF9jcnRjLT5kcG1zX21vZGUgPSAtMTsKLX0KLQotc3RhdGljIHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgaW50ZWxfaGVscGVyX2Z1bmNzID0gewotCS5kcG1zID0gaW50ZWxfY3J0Y19kcG1zLAotCS5tb2RlX2ZpeHVwID0gaW50ZWxfY3J0Y19tb2RlX2ZpeHVwLAotCS5tb2RlX3NldCA9IGludGVsX2NydGNfbW9kZV9zZXQsCi0JLm1vZGVfc2V0X2Jhc2UgPSBpbnRlbF9waXBlX3NldF9iYXNlLAotCS5tb2RlX3NldF9iYXNlX2F0b21pYyA9IGludGVsX3BpcGVfc2V0X2Jhc2VfYXRvbWljLAotCS5sb2FkX2x1dCA9IGludGVsX2NydGNfbG9hZF9sdXQsCi0JLmRpc2FibGUgPSBpbnRlbF9jcnRjX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGludGVsX2NydGNfZnVuY3MgPSB7Ci0JLnJlc2V0ID0gaW50ZWxfY3J0Y19yZXNldCwKLQkuY3Vyc29yX3NldCA9IGludGVsX2NydGNfY3Vyc29yX3NldCwKLQkuY3Vyc29yX21vdmUgPSBpbnRlbF9jcnRjX2N1cnNvcl9tb3ZlLAotCS5nYW1tYV9zZXQgPSBpbnRlbF9jcnRjX2dhbW1hX3NldCwKLQkuc2V0X2NvbmZpZyA9IGRybV9jcnRjX2hlbHBlcl9zZXRfY29uZmlnLAotCS5kZXN0cm95ID0gaW50ZWxfY3J0Y19kZXN0cm95LAotCS5wYWdlX2ZsaXAgPSBpbnRlbF9jcnRjX3BhZ2VfZmxpcCwKLX07Ci0KIHN0YXRpYyB2b2lkIGludGVsX3Nhbml0aXplX21vZGVzZXR0aW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgICAgIGludCBwaXBlLCBpbnQgcGxhbmUpCiB7CkBAIC02MjgxLDYgKzYyNTQsNDIgQEAKIAlpbnRlbF9kaXNhYmxlX3BpcGUoZGV2X3ByaXYsIHBpcGUpOwogfQogCitzdGF0aWMgdm9pZCBpbnRlbF9jcnRjX3Jlc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKKworCS8qIFJlc2V0IGZsYWdzIGJhY2sgdG8gdGhlICd1bmtub3duJyBzdGF0dXMgc28gdGhhdCB0aGV5CisJICogd2lsbCBiZSBjb3JyZWN0bHkgc2V0IG9uIHRoZSBpbml0aWFsIG1vZGVzZXQuCisJICovCisJaW50ZWxfY3J0Yy0+ZHBtc19tb2RlID0gLTE7CisKKwkvKiBXZSBuZWVkIHRvIGZpeCB1cCBhbnkgQklPUyBjb25maWd1cmF0aW9uIHRoYXQgY29uZmxpY3RzIHdpdGgKKwkgKiBvdXIgZXhwZWN0YXRpb25zLgorCSAqLworCWludGVsX3Nhbml0aXplX21vZGVzZXR0aW5nKGRldiwgaW50ZWxfY3J0Yy0+cGlwZSwgaW50ZWxfY3J0Yy0+cGxhbmUpOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBpbnRlbF9oZWxwZXJfZnVuY3MgPSB7CisJLmRwbXMgPSBpbnRlbF9jcnRjX2RwbXMsCisJLm1vZGVfZml4dXAgPSBpbnRlbF9jcnRjX21vZGVfZml4dXAsCisJLm1vZGVfc2V0ID0gaW50ZWxfY3J0Y19tb2RlX3NldCwKKwkubW9kZV9zZXRfYmFzZSA9IGludGVsX3BpcGVfc2V0X2Jhc2UsCisJLm1vZGVfc2V0X2Jhc2VfYXRvbWljID0gaW50ZWxfcGlwZV9zZXRfYmFzZV9hdG9taWMsCisJLmxvYWRfbHV0ID0gaW50ZWxfY3J0Y19sb2FkX2x1dCwKKwkuZGlzYWJsZSA9IGludGVsX2NydGNfZGlzYWJsZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgaW50ZWxfY3J0Y19mdW5jcyA9IHsKKwkucmVzZXQgPSBpbnRlbF9jcnRjX3Jlc2V0LAorCS5jdXJzb3Jfc2V0ID0gaW50ZWxfY3J0Y19jdXJzb3Jfc2V0LAorCS5jdXJzb3JfbW92ZSA9IGludGVsX2NydGNfY3Vyc29yX21vdmUsCisJLmdhbW1hX3NldCA9IGludGVsX2NydGNfZ2FtbWFfc2V0LAorCS5zZXRfY29uZmlnID0gZHJtX2NydGNfaGVscGVyX3NldF9jb25maWcsCisJLmRlc3Ryb3kgPSBpbnRlbF9jcnRjX2Rlc3Ryb3ksCisJLnBhZ2VfZmxpcCA9IGludGVsX2NydGNfcGFnZV9mbGlwLAorfTsKKwogc3RhdGljIHZvaWQgaW50ZWxfY3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlKQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtNjMzMCw4ICs2MzM5LDYgQEAKIAogCXNldHVwX3RpbWVyKCZpbnRlbF9jcnRjLT5pZGxlX3RpbWVyLCBpbnRlbF9jcnRjX2lkbGVfdGltZXIsCiAJCSAgICAodW5zaWduZWQgbG9uZylpbnRlbF9jcnRjKTsKLQotCWludGVsX3Nhbml0aXplX21vZGVzZXR0aW5nKGRldiwgaW50ZWxfY3J0Yy0+cGlwZSwgaW50ZWxfY3J0Yy0+cGxhbmUpOwogfQogCiBpbnQgaW50ZWxfZ2V0X3BpcGVfZnJvbV9jcnRjX2lkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCkBAIC02NTcyLDggKzY1NzksMTAgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiAKIAlpbnRlbF9mYiA9IGt6YWxsb2Moc2l6ZW9mKCppbnRlbF9mYiksIEdGUF9LRVJORUwpOwotCWlmICghaW50ZWxfZmIpCisJaWYgKCFpbnRlbF9mYikgeworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmb2JqLT5iYXNlKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQogCiAJcmV0ID0gaW50ZWxfZnJhbWVidWZmZXJfaW5pdChkZXYsIGludGVsX2ZiLCBtb2RlX2NtZCwgb2JqKTsKIAlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwppbmRleCAwZGFlZmNhLi5hNGQ4MDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKQEAgLTIxMyw3ICsyMTMsNyBAQAogCQkJcmV0dXJuIE1PREVfUEFORUw7CiAJfQogCi0JLyogb25seSByZWZ1c2UgdGhlIG1vZGUgb24gbm9uIGVEUCBzaW5jZSB3ZSBoYXZlIHNlZW4gc29tZSB3aWVyZCBlRFAgcGFuZWxzCisJLyogb25seSByZWZ1c2UgdGhlIG1vZGUgb24gbm9uIGVEUCBzaW5jZSB3ZSBoYXZlIHNlZW4gc29tZSB3ZWlyZCBlRFAgcGFuZWxzCiAJICAgd2hpY2ggYXJlIG91dHNpZGUgc3BlYyB0b2xlcmFuY2VzIGJ1dCBzb21laG93IHdvcmsgYnkgbWFnaWMgKi8KIAlpZiAoIWlzX2VkcChpbnRlbF9kcCkgJiYKIAkgICAgKGludGVsX2RwX2xpbmtfcmVxdWlyZWQoY29ubmVjdG9yLT5kZXYsIGludGVsX2RwLCBtb2RlLT5jbG9jaykKQEAgLTE0NzAsNyArMTQ3MCw4IEBACiAKIAlpZiAoIUhBU19QQ0hfQ1BUKGRldikgJiYKIAkgICAgSTkxNV9SRUFEKGludGVsX2RwLT5vdXRwdXRfcmVnKSAmIERQX1BJUEVCX1NFTEVDVCkgewotCQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoaW50ZWxfZHAtPmJhc2UuYmFzZS5jcnRjKTsKKwkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gaW50ZWxfZHAtPmJhc2UuYmFzZS5jcnRjOworCiAJCS8qIEhhcmR3YXJlIHdvcmthcm91bmQ6IGxlYXZpbmcgb3VyIHRyYW5zY29kZXIgc2VsZWN0CiAJCSAqIHNldCB0byB0cmFuc2NvZGVyIEIgd2hpbGUgaXQncyBvZmYgd2lsbCBwcmV2ZW50IHRoZQogCQkgKiBjb3JyZXNwb25kaW5nIEhETUkgb3V0cHV0IG9uIHRyYW5zY29kZXIgQS4KQEAgLTE0ODUsNyArMTQ4NiwxOSBAQAogCQkvKiBDaGFuZ2VzIHRvIGVuYWJsZSBvciBzZWxlY3QgdGFrZSBwbGFjZSB0aGUgdmJsYW5rCiAJCSAqIGFmdGVyIGJlaW5nIHdyaXR0ZW4uCiAJCSAqLwotCQlpbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2LCBpbnRlbF9jcnRjLT5waXBlKTsKKwkJaWYgKGNydGMgPT0gTlVMTCkgeworCQkJLyogV2UgY2FuIGFycml2ZSBoZXJlIG5ldmVyIGhhdmluZyBiZWVuIGF0dGFjaGVkCisJCQkgKiB0byBhIENSVEMsIGZvciBpbnN0YW5jZSwgZHVlIHRvIGluaGVyaXRpbmcKKwkJCSAqIHJhbmRvbSBzdGF0ZSBmcm9tIHRoZSBCSU9TLgorCQkJICoKKwkJCSAqIElmIHRoZSBwaXBlIGlzIG5vdCBydW5uaW5nLCBwbGF5IHNhZmUgYW5kCisJCQkgKiB3YWl0IGZvciB0aGUgY2xvY2tzIHRvIHN0YWJpbGlzZSBiZWZvcmUKKwkJCSAqIGNvbnRpbnVpbmcuCisJCQkgKi8KKwkJCVBPU1RJTkdfUkVBRChpbnRlbF9kcC0+b3V0cHV0X3JlZyk7CisJCQltc2xlZXAoNTApOworCQl9IGVsc2UKKwkJCWludGVsX3dhaXRfZm9yX3ZibGFuayhkZXYsIHRvX2ludGVsX2NydGMoY3J0YyktPnBpcGUpOwogCX0KIAogCUk5MTVfV1JJVEUoaW50ZWxfZHAtPm91dHB1dF9yZWcsIERQICYgfkRQX1BPUlRfRU4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAppbmRleCBmNWIwZDgzLi4xZDIwNzEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaApAQCAtMzM4LDQgKzMzOCw1IEBACiAJCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogCiBleHRlcm4gdm9pZCBpbnRlbF9mYl9vdXRwdXRfcG9sbF9jaGFuZ2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgaW50ZWxfZmJfcmVzdG9yZV9tb2RlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogI2VuZGlmIC8qIF9fSU5URUxfRFJWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMKaW5kZXggNTEyNzgyNy4uZWM0OWJhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jCkBAIC0yNjQsMyArMjY0LDEzIEBACiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2ZiX2hlbHBlcl9ob3RwbHVnX2V2ZW50KCZkZXZfcHJpdi0+ZmJkZXYtPmhlbHBlcik7CiB9CisKK3ZvaWQgaW50ZWxfZmJfcmVzdG9yZV9tb2RlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCXJldCA9IGRybV9mYl9oZWxwZXJfcmVzdG9yZV9mYmRldl9tb2RlKCZkZXZfcHJpdi0+ZmJkZXYtPmhlbHBlcik7CisJaWYgKHJldCkKKwkJRFJNX0RFQlVHKCJmYWlsZWQgdG8gcmVzdG9yZSBjcnRjIG1vZGVcbiIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCmluZGV4IGE1NjJiZDIuLjY3Y2IwNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKQEAgLTUzOSw2ICs1MzksOSBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBkZXZfcHJpdi0+aW50X2x2ZHNfY29ubmVjdG9yOwogCisJaWYgKGRldi0+c3dpdGNoX3Bvd2VyX3N0YXRlICE9IERSTV9TV0lUQ0hfUE9XRVJfT04pCisJCXJldHVybiBOT1RJRllfT0s7CisKIAkvKgogCSAqIGNoZWNrIGFuZCB1cGRhdGUgdGhlIHN0YXR1cyBvZiBMVkRTIGNvbm5lY3RvciBhZnRlciByZWNlaXZpbmcKIAkgKiB0aGUgTElEIG5vZmljYXRpb24gZXZlbnQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvX3JlZ3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm9fcmVncy5oCmluZGV4IGEzODZiMDIuLjRmNGUyM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm9fcmVncy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm9fcmVncy5oCkBAIC0yMzAsNyArMjMwLDcgQEAKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qKgotICogVGFrZXMgYSBzdHJ1Y3QgaW50ZWxfc2R2b19vdXRwdXRfZmxhZ3Mgb2Ygd2hpY2ggb3V0cHV0cyBhcmUgdGFyZ2V0dGVkIGJ5CisgKiBUYWtlcyBhIHN0cnVjdCBpbnRlbF9zZHZvX291dHB1dF9mbGFncyBvZiB3aGljaCBvdXRwdXRzIGFyZSB0YXJnZXRlZCBieQogICogZnV0dXJlIG91dHB1dCBjb21tYW5kcy4KICAqCiAgKiBBZmZlY3RlZCBjb21tYW5kcyBpbmNsdWUgU0VUX09VVFBVVF9USU1JTkdTX1BBUlRbMTJdLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKaW5kZXggNDI1NmI4ZS4uNmIyMmMxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCkBAIC0xMTUxLDEwICsxMTUxLDEwIEBACiAJCQkgICAgKHZpZGVvX2xldmVscy0+YmxhbmsgPDwgVFZfQkxBTktfTEVWRUxfU0hJRlQpKSk7CiAJewogCQlpbnQgcGlwZWNvbmZfcmVnID0gUElQRUNPTkYocGlwZSk7Ci0JCWludCBkc3BjbnRyX3JlZyA9IERTUENOVFIocGlwZSk7CisJCWludCBkc3BjbnRyX3JlZyA9IERTUENOVFIoaW50ZWxfY3J0Yy0+cGxhbmUpOwogCQlpbnQgcGlwZWNvbmYgPSBJOTE1X1JFQUQocGlwZWNvbmZfcmVnKTsKIAkJaW50IGRzcGNudHIgPSBJOTE1X1JFQUQoZHNwY250cl9yZWcpOwotCQlpbnQgZHNwYmFzZV9yZWcgPSBEU1BBRERSKHBpcGUpOworCQlpbnQgZHNwYmFzZV9yZWcgPSBEU1BBRERSKGludGVsX2NydGMtPnBsYW5lKTsKIAkJaW50IHhwb3MgPSAweDAsIHlwb3MgPSAweDA7CiAJCXVuc2lnbmVkIGludCB4c2l6ZSwgeXNpemU7CiAJCS8qIFBpcGUgbXVzdCBiZSBvZmYgaGVyZSAqLwpAQCAtMTM3OCw3ICsxMzc4LDkgQEAKIAlpZiAodHlwZSA8IDApCiAJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKIAorCWludGVsX3R2LT50eXBlID0gdHlwZTsKIAlpbnRlbF90dl9maW5kX2JldHRlcl9mb3JtYXQoY29ubmVjdG9yKTsKKwogCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKIH0KIApAQCAtMTY3MCw4ICsxNjcyLDcgQEAKIAkgKgogCSAqIE1vcmUgcmVjZW50IGNoaXBzZXRzIGZhdm91ciBIRE1JIHJhdGhlciB0aGFuIGludGVncmF0ZWQgUy1WaWRlby4KIAkgKi8KLQljb25uZWN0b3ItPnBvbGxlZCA9Ci0JCURSTV9DT05ORUNUT1JfUE9MTF9DT05ORUNUIHwgRFJNX0NPTk5FQ1RPUl9QT0xMX0RJU0NPTk5FQ1Q7CisJY29ubmVjdG9yLT5wb2xsZWQgPSBEUk1fQ09OTkVDVE9SX1BPTExfQ09OTkVDVDsKIAogCWRybV9jb25uZWN0b3JfaW5pdChkZXYsIGNvbm5lY3RvciwgJmludGVsX3R2X2Nvbm5lY3Rvcl9mdW5jcywKIAkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kbWEuYwppbmRleCAxZTFlYjFkLi41Y2NiNjVkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZG1hLmMKQEAgLTQyNiw3ICs0MjYsNyBAQAogICogQm9vdHN0cmFwIHRoZSBkcml2ZXIgZm9yIEFHUCBETUEuCiAgKgogICogXHRvZG8KLSAqIEludmVzdGlnYXRlIHdoZXRoZXIgdGhlcmUgaXMgYW55IGJlbmlmaXQgdG8gc3RvcmluZyB0aGUgV0FSUCBtaWNyb2NvZGUgaW4KKyAqIEludmVzdGlnYXRlIHdoZXRoZXIgdGhlcmUgaXMgYW55IGJlbmVmaXQgdG8gc3RvcmluZyB0aGUgV0FSUCBtaWNyb2NvZGUgaW4KICAqIEFHUCBtZW1vcnkuICBJZiBub3QsIHRoZSBtaWNyb2NvZGUgbWF5IGFzIHdlbGwgYWx3YXlzIGJlIHB1dCBpbiBQQ0kKICAqIG1lbW9yeS4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jCmluZGV4IDgzMTRhNDkuLjkwYWVmNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jCkBAIC0yNjksNyArMjY5LDcgQEAKIAlpbnQgKCpoYW5kbGVyKShzdHJ1Y3QgbnZiaW9zICosIHVpbnQxNl90LCBzdHJ1Y3QgaW5pdF9leGVjICopOwogfTsKIAotc3RhdGljIGludCBwYXJzZV9pbml0X3RhYmxlKHN0cnVjdCBudmJpb3MgKiwgdW5zaWduZWQgaW50LCBzdHJ1Y3QgaW5pdF9leGVjICopOworc3RhdGljIGludCBwYXJzZV9pbml0X3RhYmxlKHN0cnVjdCBudmJpb3MgKiwgdWludDE2X3QsIHN0cnVjdCBpbml0X2V4ZWMgKik7CiAKICNkZWZpbmUgTUFDUk9fSU5ERVhfU0laRQkyCiAjZGVmaW5lIE1BQ1JPX1NJWkUJCTgKQEAgLTIwMTEsNiArMjAxMSwyNyBAQAogfQogCiBzdGF0aWMgaW50Citpbml0X2p1bXAoc3RydWN0IG52YmlvcyAqYmlvcywgdWludDE2X3Qgb2Zmc2V0LCBzdHJ1Y3QgaW5pdF9leGVjICppZXhlYykKK3sKKwkvKgorCSAqIElOSVRfSlVNUCAgIG9wY29kZTogMHg1QyAoJ1wnKQorCSAqCisJICogb2Zmc2V0ICAgICAgKDggIGJpdCk6IG9wY29kZQorCSAqIG9mZnNldCArIDEgICgxNiBiaXQpOiBvZmZzZXQgKGluIGJpb3MpCisJICoKKwkgKiBDb250aW51ZSBleGVjdXRpb24gb2YgaW5pdCB0YWJsZSBmcm9tICdvZmZzZXQnCisJICovCisKKwl1aW50MTZfdCBqbXBfb2Zmc2V0ID0gUk9NMTYoYmlvcy0+ZGF0YVtvZmZzZXQgKyAxXSk7CisKKwlpZiAoIWlleGVjLT5leGVjdXRlKQorCQlyZXR1cm4gMzsKKworCUJJT1NMT0coYmlvcywgIjB4JTA0WDogSnVtcCB0byAweCUwNFhcbiIsIG9mZnNldCwgam1wX29mZnNldCk7CisJcmV0dXJuIGptcF9vZmZzZXQgLSBvZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQKIGluaXRfaTJjX2lmKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKQEAgLTM2NTksNiArMzY4MCw3IEBACiAJeyAiSU5JVF9aTV9SRUdfU0VRVUVOQ0UiICAgICAgICAgICAgICAsIDB4NTgsIGluaXRfem1fcmVnX3NlcXVlbmNlICAgICAgICAgICAgfSwKIAkvKiBJTklUX0lORElSRUNUX1JFRyAoMHg1QSwgNywgMCwgMCkgcmVtb3ZlZCBkdWUgdG8gbm8gZXhhbXBsZSBvZiB1c2UgKi8KIAl7ICJJTklUX1NVQl9ESVJFQ1QiICAgICAgICAgICAgICAgICAgICwgMHg1QiwgaW5pdF9zdWJfZGlyZWN0ICAgICAgICAgICAgICAgICB9LAorCXsgIklOSVRfSlVNUCIgICAgICAgICAgICAgICAgICAgICAgICAgLCAweDVDLCBpbml0X2p1bXAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAJeyAiSU5JVF9JMkNfSUYiICAgICAgICAgICAgICAgICAgICAgICAsIDB4NUUsIGluaXRfaTJjX2lmICAgICAgICAgICAgICAgICAgICAgfSwKIAl7ICJJTklUX0NPUFlfTlZfUkVHIiAgICAgICAgICAgICAgICAgICwgMHg1RiwgaW5pdF9jb3B5X252X3JlZyAgICAgICAgICAgICAgICB9LAogCXsgIklOSVRfWk1fSU5ERVhfSU8iICAgICAgICAgICAgICAgICAgLCAweDYyLCBpbml0X3ptX2luZGV4X2lvICAgICAgICAgICAgICAgIH0sCkBAIC0zNzAwLDggKzM3MjIsNyBAQAogI2RlZmluZSBNQVhfVEFCTEVfT1BTIDEwMDAKIAogc3RhdGljIGludAotcGFyc2VfaW5pdF90YWJsZShzdHJ1Y3QgbnZiaW9zICpiaW9zLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAotCQkgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCitwYXJzZV9pbml0X3RhYmxlKHN0cnVjdCBudmJpb3MgKmJpb3MsIHVpbnQxNl90IG9mZnNldCwgc3RydWN0IGluaXRfZXhlYyAqaWV4ZWMpCiB7CiAJLyoKIAkgKiBQYXJzZXMgYWxsIGNvbW1hbmRzIGluIGFuIGluaXQgdGFibGUuCkBAIC02MzMzLDYgKzYzNTQsMzIgQEAKIAkJfQogCX0KIAorCS8qIFhGWCBHVC0yNDBYLVlBCisJICoKKwkgKiBTbyBtYW55IHRoaW5ncyB3cm9uZyBoZXJlLCByZXBsYWNlIHRoZSBlbnRpcmUgZW5jb2RlciB0YWJsZS4uCisJICovCisJaWYgKG52X21hdGNoX2RldmljZShkZXYsIDB4MGNhMywgMHgxNjgyLCAweDMwMDMpKSB7CisJCWlmIChpZHggPT0gMCkgeworCQkJKmNvbm4gPSAweDAyMDAxMzAwOyAvKiBWR0EsIGNvbm5lY3RvciAxICovCisJCQkqY29uZiA9IDB4MDAwMDAwMjg7CisJCX0gZWxzZQorCQlpZiAoaWR4ID09IDEpIHsKKwkJCSpjb25uID0gMHgwMTAxMDMxMjsgLyogRFZJLCBjb25uZWN0b3IgMCAqLworCQkJKmNvbmYgPSAweDAwMDIwMDMwOworCQl9IGVsc2UKKwkJaWYgKGlkeCA9PSAyKSB7CisJCQkqY29ubiA9IDB4MDEwMTAzMTA7IC8qIFZHQSwgY29ubmVjdG9yIDAgKi8KKwkJCSpjb25mID0gMHgwMDAwMDAyODsKKwkJfSBlbHNlCisJCWlmIChpZHggPT0gMykgeworCQkJKmNvbm4gPSAweDAyMDIyMzYyOyAvKiBIRE1JLCBjb25uZWN0b3IgMiAqLworCQkJKmNvbmYgPSAweDAwMDIwMDEwOworCQl9IGVsc2UgeworCQkJKmNvbm4gPSAweDAwMDAwMDBlOyAvKiBFT0wgKi8KKwkJCSpjb25mID0gMHgwMDAwMDAwMDsKKwkJfQorCX0KKwogCXJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2NoYW5uZWwuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY2hhbm5lbC5jCmluZGV4IDM4MzcwOTAuLjRjZWEzNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY2hhbm5lbC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY2hhbm5lbC5jCkBAIC0yMDAsNyArMjAwLDcgQEAKIAkvKiBkaXNhYmxlIHRoZSBmaWZvIGNhY2hlcyAqLwogCXBmaWZvLT5yZWFzc2lnbihkZXYsIGZhbHNlKTsKIAotCS8qIENvbnN0cnVjdCBpbml0YWwgUkFNRkMgZm9yIG5ldyBjaGFubmVsICovCisJLyogQ29uc3RydWN0IGluaXRpYWwgUkFNRkMgZm9yIG5ldyBjaGFubmVsICovCiAJcmV0ID0gcGZpZm8tPmNyZWF0ZV9jb250ZXh0KGNoYW4pOwogCWlmIChyZXQpIHsKIAkJbm91dmVhdV9jaGFubmVsX3B1dCgmY2hhbik7CkBAIC0yNzgsNyArMjc4LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCS8qIG5vb25lIHdhbnRzIHRoZSBjaGFubmVsIGFueW1vcmUgKi8KKwkvKiBubyBvbmUgd2FudHMgdGhlIGNoYW5uZWwgYW55bW9yZSAqLwogCU5WX0RFQlVHKGRldiwgImZyZWVpbmcgY2hhbm5lbCAlZFxuIiwgY2hhbi0+aWQpOwogCW5vdXZlYXVfZGVidWdmc19jaGFubmVsX2ZpbmkoY2hhbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtYS5jCmluZGV4IGNlMzhlOTcuLjU2OGNhZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWEuYwpAQCAtODMsNyArODMsNyBAQAogCQlyZXR1cm4gcmV0OwogCiAJLyogTlZfTUVNT1JZX1RPX01FTU9SWV9GT1JNQVQgcmVxdWlyZXMgYSBub3RpZmllciBvYmplY3QgKi8KLQlyZXQgPSBub3V2ZWF1X25vdGlmaWVyX2FsbG9jKGNoYW4sIE52Tm90aWZ5MCwgMzIsIDB4ZmQwLCAweDEwMDAsCisJcmV0ID0gbm91dmVhdV9ub3RpZmllcl9hbGxvYyhjaGFuLCBOdk5vdGlmeTAsIDMyLCAweGZlMCwgMHgxMDAwLAogCQkJCSAgICAgJmNoYW4tPm0ybWZfbnRmeSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oCmluZGV4IGZmZjE4MGEuLmE3NjUxNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaApAQCAtMjE2LDcgKzIxNiw3IEBACiAJLyogbWFwcGluZyBvZiB0aGUgZmlmbyBpdHNlbGYgKi8KIAlzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwOwogCi0JLyogbWFwcGluZyBvZiB0aGUgcmVncyBjb250cm9saW5nIHRoZSBmaWZvICovCisJLyogbWFwcGluZyBvZiB0aGUgcmVncyBjb250cm9sbGluZyB0aGUgZmlmbyAqLwogCXZvaWQgX19pb21lbSAqdXNlcjsKIAl1aW50MzJfdCB1c2VyX2dldDsKIAl1aW50MzJfdCB1c2VyX3B1dDsKQEAgLTY4Miw2ICs2ODIsOSBAQAogCS8qIEZvciBQRklGTyBhbmQgUEdSQVBILiAqLwogCXNwaW5sb2NrX3QgY29udGV4dF9zd2l0Y2hfbG9jazsKIAorCS8qIFZNL1BSQU1JTiBmbHVzaCwgbGVnYWN5IFBSQU1JTiBhcGVydHVyZSAqLworCXNwaW5sb2NrX3Qgdm1fbG9jazsKKwogCS8qIFJBTUlOIGNvbmZpZ3VyYXRpb24sIFJBTUZDLCBSQU1IVCBhbmQgUkFNUk8gb2Zmc2V0cyAqLwogCXN0cnVjdCBub3V2ZWF1X3JhbWh0ICAqcmFtaHQ7CiAJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpyYW1mYzsKQEAgLTExOTAsNyArMTE5Myw3IEBACiBleHRlcm4gaW50ICBudjUwX2dyYXBoX3VubG9hZF9jb250ZXh0KHN0cnVjdCBkcm1fZGV2aWNlICopOwogZXh0ZXJuIGludCAgbnY1MF9ncmN0eF9pbml0KHN0cnVjdCBub3V2ZWF1X2dyY3R4ICopOwogZXh0ZXJuIHZvaWQgbnY1MF9ncmFwaF90bGJfZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCBudjg2X2dyYXBoX3RsYl9mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIG52ODRfZ3JhcGhfdGxiX2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHN0cnVjdCBub3V2ZWF1X2VudW0gbnY1MF9kYXRhX2Vycm9yX25hbWVzW107CiAKIC8qIG52YzBfZ3JhcGguYyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5jCmluZGV4IDg4OWM0NDUuLjM5YWVlNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmJjb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmMKQEAgLTE4MSwxMyArMTgxLDEzIEBACiAJCU9VVF9SSU5HICAoY2hhbiwgMCk7CiAJfQogCi0Jbm91dmVhdV9ib193cjMyKGNoYW4tPm5vdGlmaWVyX2JvLCBjaGFuLT5tMm1mX250ZnkgKyAzLCAweGZmZmZmZmZmKTsKKwlub3V2ZWF1X2JvX3dyMzIoY2hhbi0+bm90aWZpZXJfYm8sIGNoYW4tPm0ybWZfbnRmeS80ICsgMywgMHhmZmZmZmZmZik7CiAJRklSRV9SSU5HKGNoYW4pOwogCW11dGV4X3VubG9jaygmY2hhbi0+bXV0ZXgpOwogCiAJcmV0ID0gLUVCVVNZOwogCWZvciAoaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgewotCQlpZiAoIW5vdXZlYXVfYm9fcmQzMihjaGFuLT5ub3RpZmllcl9ibywgY2hhbi0+bTJtZl9udGZ5ICsgMykpIHsKKwkJaWYgKCFub3V2ZWF1X2JvX3JkMzIoY2hhbi0+bm90aWZpZXJfYm8sIGNoYW4tPm0ybWZfbnRmeS80ICsgMykpIHsKIAkJCXJldCA9IDA7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMKaW5kZXggMjY4MzM3Ny4uYzNlOTUzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21lbS5jCkBAIC0xNTIsOCArMTUyLDYgQEAKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0Jbm91dmVhdV9ib19yZWYoTlVMTCwgJmRldl9wcml2LT52Z2FfcmFtKTsKLQogCXR0bV9ib19kZXZpY2VfcmVsZWFzZSgmZGV2X3ByaXYtPnR0bS5iZGV2KTsKIAogCW5vdXZlYXVfdHRtX2dsb2JhbF9yZWxlYXNlKGRldl9wcml2KTsKQEAgLTM5OCw3ICszOTYsNyBAQAogCQkJZG1hX2JpdHMgPSA0MDsKIAl9IGVsc2UKIAlpZiAoZHJtX3BjaV9kZXZpY2VfaXNfcGNpZShkZXYpICYmCi0JICAgIGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NDAgJiYKKwkgICAgZGV2X3ByaXYtPmNoaXBzZXQgID4gMHg0MCAmJgogCSAgICBkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDQ1KSB7CiAJCWlmIChwY2lfZG1hX3N1cHBvcnRlZChkZXYtPnBkZXYsIERNQV9CSVRfTUFTSygzOSkpKQogCQkJZG1hX2JpdHMgPSAzOTsKQEAgLTU1Miw2ICs1NTAsNyBAQAogCXU4IHRSQzsJCS8qIEJ5dGUgOSAqLwogCXU4IHRVTktfMTAsIHRVTktfMTEsIHRVTktfMTIsIHRVTktfMTMsIHRVTktfMTQ7CiAJdTggdFVOS18xOCwgdFVOS18xOSwgdFVOS18yMCwgdFVOS18yMTsKKwl1OCBtYWdpY19udW1iZXIgPSAwOyAvKiBZZWFoLi4uIHNvcnJ5Ki8KIAl1OCAqbWVtID0gTlVMTCwgKmVudHJ5OwogCWludCBpLCByZWNvcmRsZW4sIGVudHJpZXM7CiAKQEAgLTU5Niw2ICs1OTUsMTIgQEAKIAlpZiAoIW1lbXRpbWluZ3MtPnRpbWluZykKIAkJcmV0dXJuOwogCisJLyogR2V0ICJzb21lIG51bWJlciIgZnJvbSB0aGUgdGltaW5nIHJlZyBmb3IgTlZfNDAKKwkgKiBVc2VkIGluIGNhbGN1bGF0aW9ucyBsYXRlciAqLworCWlmKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfNDApIHsKKwkJbWFnaWNfbnVtYmVyID0gKG52X3JkMzIoZGV2LDB4MTAwMjI4KSAmIDB4MGYwMDAwMDApID4+IDI0OworCX0KKwogCWVudHJ5ID0gbWVtICsgbWVtWzFdOwogCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzOyBpKyssIGVudHJ5ICs9IHJlY29yZGxlbikgewogCQlzdHJ1Y3Qgbm91dmVhdV9wbV9tZW10aW1pbmcgKnRpbWluZyA9ICZwbS0+bWVtdGltaW5ncy50aW1pbmdbaV07CkBAIC02MzUsMzYgKzY0MCw1MSBAQAogCiAJCS8qIFhYWDogSSBkb24ndCB0cnVzdCB0aGUgLTEncyBhbmQgKzEncy4uLiB0aGV5IG11c3QgY29tZQogCQkgKiAgICAgIGZyb20gc29tZXdoZXJlISAqLwotCQl0aW1pbmctPnJlZ18xMDAyMjQgPSAoKHRVTktfMCArIHRVTktfMTkgKyAxKSA8PCAyNCB8CisJCXRpbWluZy0+cmVnXzEwMDIyNCA9ICh0VU5LXzAgKyB0VU5LXzE5ICsgMSArIG1hZ2ljX251bWJlcikgPDwgMjQgfAogCQkJCSAgICAgIHRVTktfMTggPDwgMTYgfAotCQkJCSAgICAgICh0VU5LXzEgKyB0VU5LXzE5ICsgMSkgPDwgOCB8Ci0JCQkJICAgICAgKHRVTktfMiAtIDEpKTsKKwkJCQkgICAgICAodFVOS18xICsgdFVOS18xOSArIDEgKyBtYWdpY19udW1iZXIpIDw8IDg7CisJCWlmKGRldl9wcml2LT5jaGlwc2V0ID09IDB4YTgpIHsKKwkJCXRpbWluZy0+cmVnXzEwMDIyNCB8PSAodFVOS18yIC0gMSk7CisJCX0gZWxzZSB7CisJCQl0aW1pbmctPnJlZ18xMDAyMjQgfD0gKHRVTktfMiArIDIgLSBtYWdpY19udW1iZXIpOworCQl9CiAKIAkJdGltaW5nLT5yZWdfMTAwMjI4ID0gKHRVTktfMTIgPDwgMTYgfCB0VU5LXzExIDw8IDggfCB0VU5LXzEwKTsKLQkJaWYocmVjb3JkbGVuID4gMTkpIHsKLQkJCXRpbWluZy0+cmVnXzEwMDIyOCArPSAodFVOS18xOSAtIDEpIDw8IDI0OwotCQl9LyogSSBjYW5ub3QgYmFjay11cCB0aGlzIGVsc2Utc3RhdGVtZW50IHJpZ2h0IG5vdwotCQkJIGVsc2UgewotCQkJdGltaW5nLT5yZWdfMTAwMjI4ICs9IHRVTktfMTIgPDwgMjQ7Ci0JCX0qLworCQlpZihkZXZfcHJpdi0+Y2hpcHNldCA+PSAweGEzICYmIGRldl9wcml2LT5jaGlwc2V0IDwgMHhhYSkgeworCQkJdGltaW5nLT5yZWdfMTAwMjI4IHw9ICh0VU5LXzE5IC0gMSkgPDwgMjQ7CisJCX0KIAotCQkvKiBYWFg6IHJlZ18xMDAyMmMgKi8KLQkJdGltaW5nLT5yZWdfMTAwMjJjID0gdFVOS18yIC0gMTsKKwkJaWYoZGV2X3ByaXYtPmNhcmRfdHlwZSA9PSBOVl80MCkgeworCQkJLyogTlY0MDogZG9uJ3Qga25vdyB3aGF0IHRoZSByZXN0IG9mIHRoZSByZWdzIGFyZS4uCisJCQkgKiBBbmQgZG9uJ3QgbmVlZCB0byBrbm93IGVpdGhlciAqLworCQkJdGltaW5nLT5yZWdfMTAwMjI4IHw9IDB4MjAyMDAwMDAgfCBtYWdpY19udW1iZXIgPDwgMjQ7CisJCX0gZWxzZSBpZihkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzUwKSB7CisJCQkvKiBYWFg6IHJlZ18xMDAyMmMgKi8KKwkJCXRpbWluZy0+cmVnXzEwMDIyYyA9IHRVTktfMiAtIDE7CiAKLQkJdGltaW5nLT5yZWdfMTAwMjMwID0gKHRVTktfMjAgPDwgMjQgfCB0VU5LXzIxIDw8IDE2IHwKLQkJCQkgICAgICB0VU5LXzEzIDw8IDggIHwgdFVOS18xMyk7CisJCQl0aW1pbmctPnJlZ18xMDAyMzAgPSAodFVOS18yMCA8PCAyNCB8IHRVTktfMjEgPDwgMTYgfAorCQkJCQkJICB0VU5LXzEzIDw8IDggIHwgdFVOS18xMyk7CiAKLQkJLyogWFhYOiArNj8gKi8KLQkJdGltaW5nLT5yZWdfMTAwMjM0ID0gKHRSQVMgPDwgMjQgfCAodFVOS18xOSArIDYpIDw8IDggfCB0UkMpOwotCQl0aW1pbmctPnJlZ18xMDAyMzQgKz0gbWF4KHRVTktfMTAsdFVOS18xMSkgPDwgMTY7CisJCQl0aW1pbmctPnJlZ18xMDAyMzQgPSAodFJBUyA8PCAyNCB8IHRSQyk7CisJCQl0aW1pbmctPnJlZ18xMDAyMzQgKz0gbWF4KHRVTktfMTAsdFVOS18xMSkgPDwgMTY7CiAKLQkJLyogWFhYOyByZWdfMTAwMjM4LCByZWdfMTAwMjNjCi0JCSAqIHJlZzogMHgwMD8/Pz8/PwotCQkgKiByZWdfMTAwMjNjOgotCQkgKiAgICAgIDAgZm9yIHByZS1OVjUwIGNhcmRzCi0JCSAqICAgICAgMHg/Pz8/MDIwMiBmb3IgTlY1MCsgY2FyZHMgKGVtcGlyaWNhbCBldmlkZW5jZSkgKi8KLQkJaWYoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCkgeworCQkJaWYoZGV2X3ByaXYtPmNoaXBzZXQgPCAweGEzKSB7CisJCQkJdGltaW5nLT5yZWdfMTAwMjM0IHw9ICh0VU5LXzIgKyAyKSA8PCA4OworCQkJfSBlbHNlIHsKKwkJCQkvKiBYWFg6ICs2PyAqLworCQkJCXRpbWluZy0+cmVnXzEwMDIzNCB8PSAodFVOS18xOSArIDYpIDw8IDg7CisJCQl9CisKKwkJCS8qIFhYWDsgcmVnXzEwMDIzOCwgcmVnXzEwMDIzYworCQkJICogcmVnXzEwMDIzODogMHgwMD8/Pz8/PworCQkJICogcmVnXzEwMDIzYzogMHghIT8/MDIwMiBmb3IgTlY1MCsgY2FyZHMgKGVtcGlyaWNhbCBldmlkZW5jZSkgKi8KIAkJCXRpbWluZy0+cmVnXzEwMDIzYyA9IDB4MjAyOworCQkJaWYoZGV2X3ByaXYtPmNoaXBzZXQgPCAweGEzKSB7CisJCQkJdGltaW5nLT5yZWdfMTAwMjNjIHw9IDB4NDAwMDAwMCB8ICh0VU5LXzIgLSAxKSA8PCAxNjsKKwkJCX0gZWxzZSB7CisJCQkJLyogY3VycmVudGx5IHVua25vd24KKwkJCQkgKiAxMDAyM2Mgc2VlbiBhcyAwNnh4eHh4eCwgMGJ4eHh4eHggb3IgMGZ4eHh4eHggKi8KKwkJCX0KIAkJfQogCiAJCU5WX0RFQlVHKGRldiwgIkVudHJ5ICVkOiAyMjA6ICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsIGksCkBAIC02NzUsNyArNjk1LDcgQEAKIAkJCSB0aW1pbmctPnJlZ18xMDAyMzgsIHRpbWluZy0+cmVnXzEwMDIzYyk7CiAJfQogCi0JbWVtdGltaW5ncy0+bnJfdGltaW5nICA9IGVudHJpZXM7CisJbWVtdGltaW5ncy0+bnJfdGltaW5nID0gZW50cmllczsKIAltZW10aW1pbmdzLT5zdXBwb3J0ZWQgPSB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X25vdGlmaWVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X25vdGlmaWVyLmMKaW5kZXggN2JhM2ZjMC4uNWIzOTcxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ub3RpZmllci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbm90aWZpZXIuYwpAQCAtMzUsMTkgKzM1LDIyIEBACiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKIAlzdHJ1Y3Qgbm91dmVhdV9ibyAqbnRmeSA9IE5VTEw7Ci0JdWludDMyX3QgZmxhZ3M7CisJdWludDMyX3QgZmxhZ3MsIHR0bXBsOwogCWludCByZXQ7CiAKLQlpZiAobm91dmVhdV92cmFtX25vdGlmeSkKKwlpZiAobm91dmVhdV92cmFtX25vdGlmeSkgewogCQlmbGFncyA9IE5PVVZFQVVfR0VNX0RPTUFJTl9WUkFNOwotCWVsc2UKKwkJdHRtcGwgPSBUVE1fUExfRkxBR19WUkFNOworCX0gZWxzZSB7CiAJCWZsYWdzID0gTk9VVkVBVV9HRU1fRE9NQUlOX0dBUlQ7CisJCXR0bXBsID0gVFRNX1BMX0ZMQUdfVFQ7CisJfQogCiAJcmV0ID0gbm91dmVhdV9nZW1fbmV3KGRldiwgTlVMTCwgUEFHRV9TSVpFLCAwLCBmbGFncywgMCwgMCwgJm50ZnkpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBub3V2ZWF1X2JvX3BpbihudGZ5LCBmbGFncyk7CisJcmV0ID0gbm91dmVhdV9ib19waW4obnRmeSwgdHRtcGwpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2VycjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9vYmplY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfb2JqZWN0LmMKaW5kZXggNGYwMGM4Ny4uNjdhMTZlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9vYmplY3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X29iamVjdC5jCkBAIC0xMDM5LDE5ICsxMDM5LDIwIEBACiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3B1b2JqLT5kZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBncHVvYmotPmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGdwdW9iai0+cGluc3QgPT0gfjAgfHwgIWRldl9wcml2LT5yYW1pbl9hdmFpbGFibGUpIHsKIAkJdTY0ICBwdHIgPSBncHVvYmotPnZpbnN0ICsgb2Zmc2V0OwogCQl1MzIgYmFzZSA9IHB0ciA+PiAxNjsKIAkJdTMyICB2YWw7CiAKLQkJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dm1fbG9jaywgZmxhZ3MpOwogCQlpZiAoZGV2X3ByaXYtPnJhbWluX2Jhc2UgIT0gYmFzZSkgewogCQkJZGV2X3ByaXYtPnJhbWluX2Jhc2UgPSBiYXNlOwogCQkJbnZfd3IzMihkZXYsIDB4MDAxNzAwLCBkZXZfcHJpdi0+cmFtaW5fYmFzZSk7CiAJCX0KIAkJdmFsID0gbnZfcmQzMihkZXYsIDB4NzAwMDAwICsgKHB0ciAmIDB4ZmZmZikpOwotCQlzcGluX3VubG9jaygmZGV2X3ByaXYtPnJhbWluX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dm1fbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gdmFsOwogCX0KIApAQCAtMTA2MywxOCArMTA2NCwxOSBAQAogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGdwdW9iai0+ZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZ3B1b2JqLT5kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChncHVvYmotPnBpbnN0ID09IH4wIHx8ICFkZXZfcHJpdi0+cmFtaW5fYXZhaWxhYmxlKSB7CiAJCXU2NCAgcHRyID0gZ3B1b2JqLT52aW5zdCArIG9mZnNldDsKIAkJdTMyIGJhc2UgPSBwdHIgPj4gMTY7CiAKLQkJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dm1fbG9jaywgZmxhZ3MpOwogCQlpZiAoZGV2X3ByaXYtPnJhbWluX2Jhc2UgIT0gYmFzZSkgewogCQkJZGV2X3ByaXYtPnJhbWluX2Jhc2UgPSBiYXNlOwogCQkJbnZfd3IzMihkZXYsIDB4MDAxNzAwLCBkZXZfcHJpdi0+cmFtaW5fYmFzZSk7CiAJCX0KIAkJbnZfd3IzMihkZXYsIDB4NzAwMDAwICsgKHB0ciAmIDB4ZmZmZiksIHZhbCk7Ci0JCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT52bV9sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfcGVyZi5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9wZXJmLmMKaW5kZXggYWM2MmExYi4uNjcwZTNjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9wZXJmLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9wZXJmLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCQljYXNlIDB4MTM6CiAJCWNhc2UgMHgxNToKIAkJCXBlcmZsdmwtPmZhbnNwZWVkID0gZW50cnlbNTVdOwotCQkJcGVyZmx2bC0+dm9sdGFnZSA9IGVudHJ5WzU2XTsKKwkJCXBlcmZsdmwtPnZvbHRhZ2UgPSAocmVjb3JkbGVuID4gNTYpID8gZW50cnlbNTZdIDogMDsKIAkJCXBlcmZsdmwtPmNvcmUgPSBST00zMihlbnRyeVsxXSkgKiAxMDsKIAkJCXBlcmZsdmwtPm1lbW9yeSA9IFJPTTMyKGVudHJ5WzVdKSAqIDIwOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3NnZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3NnZG1hLmMKaW5kZXggYTMzZmU0MC4uYzc3MTExZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zZ2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc2dkbWEuYwpAQCAtNDIsNyArNDIsOCBAQAogCiAJbnZiZS0+bnJfcGFnZXMgPSAwOwogCXdoaWxlIChudW1fcGFnZXMtLSkgewotCQlpZiAoZG1hX2FkZHJzW252YmUtPm5yX3BhZ2VzXSAhPSBETUFfRVJST1JfQ09ERSkgeworCQkvKiB0aGlzIGNvZGUgcGF0aCBpc24ndCBjYWxsZWQgYW5kIGlzIGluY29ycmVjdCBhbnl3YXlzICovCisJCWlmICgwKSB7IC8qZG1hX2FkZHJzW252YmUtPm5yX3BhZ2VzXSAhPSBETUFfRVJST1JfQ09ERSkqLwogCQkJbnZiZS0+cGFnZXNbbnZiZS0+bnJfcGFnZXNdID0KIAkJCQkJZG1hX2FkZHJzW252YmUtPm5yX3BhZ2VzXTsKIAkJIAludmJlLT50dG1fYWxsb2NlZFtudmJlLT5ucl9wYWdlc10gPSB0cnVlOwpAQCAtNTUsNiArNTYsNyBAQAogCQkJCWJlLT5mdW5jLT5jbGVhcihiZSk7CiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQl9CisJCQludmJlLT50dG1fYWxsb2NlZFtudmJlLT5ucl9wYWdlc10gPSBmYWxzZTsKIAkJfQogCiAJCW52YmUtPm5yX3BhZ2VzKys7CkBAIC00MjcsNyArNDI5LDcgQEAKIAl1MzIgYXBlcl9zaXplLCBhbGlnbjsKIAlpbnQgcmV0OwogCi0JaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfNTAgfHwgZHJtX3BjaV9kZXZpY2VfaXNfcGNpZShkZXYpKQorCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzQwICYmIGRybV9wY2lfZGV2aWNlX2lzX3BjaWUoZGV2KSkKIAkJYXBlcl9zaXplID0gNTEyICogMTAyNCAqIDEwMjQ7CiAJZWxzZQogCQlhcGVyX3NpemUgPSA2NCAqIDEwMjQgKiAxMDI0OwpAQCAtNDU3LDcgKzQ1OSw3IEBACiAJCWRldl9wcml2LT5nYXJ0X2luZm8uZnVuYyA9ICZudjUwX3NnZG1hX2JhY2tlbmQ7CiAJfSBlbHNlCiAJaWYgKGRybV9wY2lfZGV2aWNlX2lzX3BjaWUoZGV2KSAmJgotCSAgICBkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDQwICYmIGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NDUpIHsKKwkgICAgZGV2X3ByaXYtPmNoaXBzZXQgPiAweDQwICYmIGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NDUpIHsKIAkJaWYgKG52NDRfZ3JhcGhfY2xhc3MoZGV2KSkgewogCQkJZGV2X3ByaXYtPmdhcnRfaW5mby5mdW5jID0gJm52NDRfc2dkbWFfYmFja2VuZDsKIAkJCWFsaWduID0gNTEyICogMTAyNDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYwppbmRleCA0ZmNiZDA5Li45MTVmYmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N0YXRlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jCkBAIC0zNzYsMTUgKzM3NiwxMSBAQAogCQllbmdpbmUtPmdyYXBoLmRlc3Ryb3lfY29udGV4dAk9IG52NTBfZ3JhcGhfZGVzdHJveV9jb250ZXh0OwogCQllbmdpbmUtPmdyYXBoLmxvYWRfY29udGV4dAk9IG52NTBfZ3JhcGhfbG9hZF9jb250ZXh0OwogCQllbmdpbmUtPmdyYXBoLnVubG9hZF9jb250ZXh0CT0gbnY1MF9ncmFwaF91bmxvYWRfY29udGV4dDsKLQkJaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4ODYpCisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwIHx8CisJCSAgICBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweGFjKQogCQkJZW5naW5lLT5ncmFwaC50bGJfZmx1c2gJPSBudjUwX2dyYXBoX3RsYl9mbHVzaDsKLQkJZWxzZSB7Ci0JCQkvKiBmcm9tIHdoYXQgaSBjYW4gc2VlIG52aWRpYSBkbyB0aGlzIG9uIGV2ZXJ5Ci0JCQkgKiBwcmUtTlZBMyBib2FyZCBleGNlcHQgTlZBQywgYnV0LCB3ZSd2ZSBvbmx5Ci0JCQkgKiBldmVyIHNlZW4gcHJvYmxlbXMgb24gTlY4NgotCQkJICovCi0JCQllbmdpbmUtPmdyYXBoLnRsYl9mbHVzaAk9IG52ODZfZ3JhcGhfdGxiX2ZsdXNoOwotCQl9CisJCWVsc2UKKwkJCWVuZ2luZS0+Z3JhcGgudGxiX2ZsdXNoCT0gbnY4NF9ncmFwaF90bGJfZmx1c2g7CiAJCWVuZ2luZS0+Zmlmby5jaGFubmVscwkJPSAxMjg7CiAJCWVuZ2luZS0+Zmlmby5pbml0CQk9IG52NTBfZmlmb19pbml0OwogCQllbmdpbmUtPmZpZm8udGFrZWRvd24JCT0gbnY1MF9maWZvX3Rha2Vkb3duOwpAQCAtNjEyLDYgKzYwOCw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5jaGFubmVscy5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPnRpbGUubG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPnZtX2xvY2spOwogCiAJLyogTWFrZSB0aGUgQ1JUQ3MgYW5kIEkyQyBidXNlcyBhY2Nlc3NpYmxlICovCiAJcmV0ID0gZW5naW5lLT5kaXNwbGF5LmVhcmx5X2luaXQoZGV2KTsKQEAgLTc3MSw2ICs3NjgsMTEgQEAKIAllbmdpbmUtPm1jLnRha2Vkb3duKGRldik7CiAJZW5naW5lLT5kaXNwbGF5LmxhdGVfdGFrZWRvd24oZGV2KTsKIAorCWlmIChkZXZfcHJpdi0+dmdhX3JhbSkgeworCQlub3V2ZWF1X2JvX3VucGluKGRldl9wcml2LT52Z2FfcmFtKTsKKwkJbm91dmVhdV9ib19yZWYoTlVMTCwgJmRldl9wcml2LT52Z2FfcmFtKTsKKwl9CisKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJdHRtX2JvX2NsZWFuX21tKCZkZXZfcHJpdi0+dHRtLmJkZXYsIFRUTV9QTF9WUkFNKTsKIAl0dG1fYm9fY2xlYW5fbW0oJmRldl9wcml2LT50dG0uYmRldiwgVFRNX1BMX1RUKTsKQEAgLTk2Myw3ICs5NjUsNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX21taW87CiAKLQkvKiBNYXAgUFJBTUlOIEJBUiwgb3Igb24gb2xkZXIgY2FyZHMsIHRoZSBhcGVydHVyZSB3aXRoaW5nIEJBUjAgKi8KKwkvKiBNYXAgUFJBTUlOIEJBUiwgb3Igb24gb2xkZXIgY2FyZHMsIHRoZSBhcGVydHVyZSB3aXRoaW4gQkFSMCAqLwogCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzQwKSB7CiAJCWludCByYW1pbl9iYXIgPSAyOwogCQlpZiAocGNpX3Jlc291cmNlX2xlbihkZXYtPnBkZXYsIHJhbWluX2JhcikgPT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9jcnRjLmMKaW5kZXggYTI2MGZiYi4uNzQ4YjlkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9jcnRjLmMKQEAgLTE2NCw3ICsxNjQsNyBAQAogCU5WX0RFQlVHX0tNUyhkZXYsICJTZXR0aW5nIGRwbXMgbW9kZSAlZCBvbiBDUlRDICVkXG4iLCBtb2RlLAogCQkJCQkJCW52X2NydGMtPmluZGV4KTsKIAotCWlmIChudl9jcnRjLT5sYXN0X2RwbXMgPT0gbW9kZSkgLyogRG9uJ3QgZG8gdW5uZWNlc2FyeSBtb2RlIGNoYW5nZXMuICovCisJaWYgKG52X2NydGMtPmxhc3RfZHBtcyA9PSBtb2RlKSAvKiBEb24ndCBkbyB1bm5lY2Vzc2FyeSBtb2RlIGNoYW5nZXMuICovCiAJCXJldHVybjsKIAogCW52X2NydGMtPmxhc3RfZHBtcyA9IG1vZGU7CkBAIC02NzcsNyArNjc3LDcgQEAKIAogCU5WQmxhbmtTY3JlZW4oZGV2LCBudl9jcnRjLT5pbmRleCwgdHJ1ZSk7CiAKLQkvKiBTb21lIG1vcmUgcHJlcGVyYXRpb24uICovCisJLyogU29tZSBtb3JlIHByZXBhcmF0aW9uLiAqLwogCU5WV3JpdGVDUlRDKGRldiwgbnZfY3J0Yy0+aW5kZXgsIE5WX1BDUlRDX0NPTkZJRywgTlZfUENSVENfQ09ORklHX1NUQVJUX0FERFJFU1NfTk9OX1ZHQSk7CiAJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfNDApIHsKIAkJdWludDMyX3QgcmVnOTAwID0gTlZSZWFkUkFNREFDKGRldiwgbnZfY3J0Yy0+aW5kZXgsIE5WX1BSQU1EQUNfOTAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGZwLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RmcC5jCmluZGV4IGM4MmRiMzcuLjEyMDk4YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGZwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kZnAuYwpAQCAtNTgxLDEyICs1ODEsMTMgQEAKIAlpbnQgaGVhZCA9IG52X2VuY29kZXItPnJlc3RvcmUuaGVhZDsKIAogCWlmIChudl9lbmNvZGVyLT5kY2ItPnR5cGUgPT0gT1VUUFVUX0xWRFMpIHsKLQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5hdGl2ZV9tb2RlID0gbm91dmVhdV9lbmNvZGVyX2Nvbm5lY3Rvcl9nZXQobnZfZW5jb2RlciktPm5hdGl2ZV9tb2RlOwotCQlpZiAobmF0aXZlX21vZGUpCi0JCQljYWxsX2x2ZHNfc2NyaXB0KGRldiwgbnZfZW5jb2Rlci0+ZGNiLCBoZWFkLCBMVkRTX1BBTkVMX09OLAotCQkJCQkgbmF0aXZlX21vZGUtPmNsb2NrKTsKLQkJZWxzZQotCQkJTlZfRVJST1IoZGV2LCAiTm90IHJlc3RvcmluZyBMVkRTIHdpdGhvdXQgbmF0aXZlIG1vZGVcbiIpOworCQlzdHJ1Y3Qgbm91dmVhdV9jb25uZWN0b3IgKmNvbm5lY3RvciA9CisJCQlub3V2ZWF1X2VuY29kZXJfY29ubmVjdG9yX2dldChudl9lbmNvZGVyKTsKKworCQlpZiAoY29ubmVjdG9yICYmIGNvbm5lY3Rvci0+bmF0aXZlX21vZGUpCisJCQljYWxsX2x2ZHNfc2NyaXB0KGRldiwgbnZfZW5jb2Rlci0+ZGNiLCBoZWFkLAorCQkJCQkgTFZEU19QQU5FTF9PTiwKKwkJCQkJIGNvbm5lY3Rvci0+bmF0aXZlX21vZGUtPmNsb2NrKTsKIAogCX0gZWxzZSBpZiAobnZfZW5jb2Rlci0+ZGNiLT50eXBlID09IE9VVFBVVF9UTURTKSB7CiAJCWludCBjbG9jayA9IG5vdXZlYXVfaHdfcGxsdmFsc190b19jbGsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZ3JhcGguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZ3JhcGguYwppbmRleCAxOGQzMGMyLi5mY2ViNDRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2dyYXBoLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9ncmFwaC5jCkBAIC0xODEsNyArMTgxLDcgQEAKIAkJICBOVjQwX1BHUkFQSF9DVFhDVExfQ1VSX0xPQURFRCk7CiAJLyogMHgzMkUwIHJlY29yZHMgdGhlIGluc3RhbmNlIGFkZHJlc3Mgb2YgdGhlIGFjdGl2ZSBGSUZPJ3MgUEdSQVBICiAJICogY29udGV4dC4gIElmIGF0IGFueSB0aW1lIHRoaXMgZG9lc24ndCBtYXRjaCAweDQwMDMyQywgeW91IHdpbGwKLQkgKiByZWNpZXZlIFBHUkFQSF9JTlRSX0NPTlRFWFRfU1dJVENICisJICogcmVjZWl2ZSBQR1JBUEhfSU5UUl9DT05URVhUX1NXSVRDSAogCSAqLwogCW52X3dyMzIoZGV2LCBOVjQwX1BGSUZPX0dSQ1RYX0lOU1RBTkNFLCBpbnN0KTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jcnRjLmMKaW5kZXggMmI5OTg0MC4uYTE5Y2NhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jcnRjLmMKQEAgLTQ2OSw5ICs0NjksNiBAQAogCiAJc3RhcnQgPSBwdGltZXItPnJlYWQoZGV2KTsKIAlkbyB7Ci0JCW52X3dyMzIoZGV2LCAweDYxMDAyYywgMHgzNzApOwotCQludl93cjMyKGRldiwgMHgwMDAxNDAsIDEpOwotCiAJCWlmIChudl9ybzMyKGRpc3AtPm50ZnksIDB4MDAwKSkKIAkJCXJldHVybiAwOwogCX0gd2hpbGUgKHB0aW1lci0+cmVhZChkZXYpIC0gc3RhcnQgPCAyMDAwMDAwMDAwVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZXZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2V2by5jCmluZGV4IGEyY2ZhYTYuLmM4ZTgzYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZXZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ldm8uYwpAQCAtMTg2LDYgKzE4Niw3IEBACiAJbnZfbWFzayhkZXYsIDB4NjEwMDI4LCAweDAwMDAwMDAwLCAweDAwMDEwMDAxIDw8IGlkKTsKIAogCWV2by0+ZG1hLm1heCA9ICg0MDk2LzQpIC0gMjsKKwlldm8tPmRtYS5tYXggJj0gfjc7CiAJZXZvLT5kbWEucHV0ID0gMDsKIAlldm8tPmRtYS5jdXIgPSBldm8tPmRtYS5wdXQ7CiAJZXZvLT5kbWEuZnJlZSA9IGV2by0+ZG1hLm1heCAtIGV2by0+ZG1hLmN1cjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYwppbmRleCA4Njc1YjAwLi5iMDJhNWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dyYXBoLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ncmFwaC5jCkBAIC01MDMsNyArNTAzLDcgQEAKIH0KIAogdm9pZAotbnY4Nl9ncmFwaF90bGJfZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldikKK252ODRfZ3JhcGhfdGxiX2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV90aW1lcl9lbmdpbmUgKnB0aW1lciA9ICZkZXZfcHJpdi0+ZW5naW5lLnRpbWVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9pbnN0bWVtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2luc3RtZW0uYwppbmRleCBhNmY4YWE2Li40Zjk1YTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2luc3RtZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2luc3RtZW0uYwpAQCAtNDA0LDIzICs0MDQsMjUgQEAKIG52NTBfaW5zdG1lbV9mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmZGV2X3ByaXYtPnJhbWluX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dm1fbG9jaywgZmxhZ3MpOwogCW52X3dyMzIoZGV2LCAweDAwMzMwYywgMHgwMDAwMDAwMSk7CiAJaWYgKCFudl93YWl0KGRldiwgMHgwMDMzMGMsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMDApKQogCQlOVl9FUlJPUihkZXYsICJQUkFNSU4gZmx1c2ggdGltZW91dFxuIik7Ci0Jc3Bpbl91bmxvY2soJmRldl9wcml2LT5yYW1pbl9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dm1fbG9jaywgZmxhZ3MpOwogfQogCiB2b2lkCiBudjg0X2luc3RtZW1fZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2soJmRldl9wcml2LT5yYW1pbl9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnZtX2xvY2ssIGZsYWdzKTsKIAludl93cjMyKGRldiwgMHgwNzAwMDAsIDB4MDAwMDAwMDEpOwogCWlmICghbnZfd2FpdChkZXYsIDB4MDcwMDAwLCAweDAwMDAwMDAyLCAweDAwMDAwMDAwKSkKIAkJTlZfRVJST1IoZGV2LCAiUFJBTUlOIGZsdXNoIHRpbWVvdXRcbiIpOwotCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnZtX2xvY2ssIGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF92bS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF92bS5jCmluZGV4IDRmZDM0MzIuLjZjMjY5NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfdm0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3ZtLmMKQEAgLTE3NCwxMCArMTc0LDExIEBACiBudjUwX3ZtX2ZsdXNoX2VuZ2luZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgZW5naW5lKQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmZGV2X3ByaXYtPnJhbWluX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dm1fbG9jaywgZmxhZ3MpOwogCW52X3dyMzIoZGV2LCAweDEwMGM4MCwgKGVuZ2luZSA8PCAxNikgfCAxKTsKIAlpZiAoIW52X3dhaXQoZGV2LCAweDEwMGM4MCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMCkpCiAJCU5WX0VSUk9SKGRldiwgInZtIGZsdXNoIHRpbWVvdXQ6IGVuZ2luZSAlZFxuIiwgZW5naW5lKTsKLQlzcGluX3VubG9jaygmZGV2X3ByaXYtPnJhbWluX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT52bV9sb2NrLCBmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX3ZtLmMKaW5kZXggNjlhZjBiYS4uYTE3OWU2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF92bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfdm0uYwpAQCAtMTA0LDIwICsxMDQsMjcgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9pbnN0bWVtX2VuZ2luZSAqcGluc3RtZW0gPSAmZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSB2bS0+ZGV2OwogCXN0cnVjdCBub3V2ZWF1X3ZtX3BnZCAqdnBnZDsKLQl1MzIgcjEwMGM4MCwgZW5naW5lOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGVuZ2luZSA9IChkZXZfcHJpdi0+Y2hhbl92bSA9PSB2bSkgPyAxIDogNTsKIAogCXBpbnN0bWVtLT5mbHVzaCh2bS0+ZGV2KTsKIAotCWlmICh2bSA9PSBkZXZfcHJpdi0+Y2hhbl92bSkKLQkJZW5naW5lID0gMTsKLQllbHNlCi0JCWVuZ2luZSA9IDU7Ci0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnZtX2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZwZ2QsICZ2bS0+cGdkX2xpc3QsIGhlYWQpIHsKLQkJcjEwMGM4MCA9IG52X3JkMzIoZGV2LCAweDEwMGM4MCk7CisJCS8qIGxvb2tzIGxpa2UgbWF5YmUgYSAiZnJlZSBmbHVzaCBzbG90cyIgY291bnRlciwgdGhlCisJCSAqIGZhc3RlciB5b3Ugd3JpdGUgdG8gMHgxMDBjYmMgdG8gbW9yZSBpdCBkZWNyZWFzZXMKKwkJICovCisJCWlmICghbnZfd2FpdF9uZShkZXYsIDB4MTAwYzgwLCAweDAwZmYwMDAwLCAweDAwMDAwMDAwKSkgeworCQkJTlZfRVJST1IoZGV2LCAidm0gdGltZW91dCAwOiAweCUwOHggJWRcbiIsCisJCQkJIG52X3JkMzIoZGV2LCAweDEwMGM4MCksIGVuZ2luZSk7CisJCX0KIAkJbnZfd3IzMihkZXYsIDB4MTAwY2I4LCB2cGdkLT5vYmotPnZpbnN0ID4+IDgpOwogCQludl93cjMyKGRldiwgMHgxMDBjYmMsIDB4ODAwMDAwMDAgfCBlbmdpbmUpOwotCQlpZiAoIW52X3dhaXQoZGV2LCAweDEwMGM4MCwgMHhmZmZmZmZmZiwgcjEwMGM4MCkpCi0JCQlOVl9FUlJPUihkZXYsICJ2bSBmbHVzaCB0aW1lb3V0IGVuZyAlZFxuIiwgZW5naW5lKTsKKwkJLyogd2FpdCBmb3IgZmx1c2ggdG8gYmUgcXVldWVkPyAqLworCQlpZiAoIW52X3dhaXQoZGV2LCAweDEwMGM4MCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCkpIHsKKwkJCU5WX0VSUk9SKGRldiwgInZtIHRpbWVvdXQgMTogMHglMDh4ICVkXG4iLAorCQkJCSBudl9yZDMyKGRldiwgMHgxMDBjODApLCBlbmdpbmUpOworCQl9CiAJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT52bV9sb2NrLCBmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jCmluZGV4IDI1OGZhNWUuLjdiZDc0NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiYXRvbS5oIgogI2luY2x1ZGUgImF0b20tbmFtZXMuaCIKICNpbmNsdWRlICJhdG9tLWJpdHMuaCIKKyNpbmNsdWRlICJyYWRlb24uaCIKIAogI2RlZmluZSBBVE9NX0NPTkRfQUJPVkUJCTAKICNkZWZpbmUgQVRPTV9DT05EX0FCT1ZFT1JFUVVBTAkxCkBAIC0xMDEsNyArMTAyLDkgQEAKIHN0YXRpYyB1aW50MzJfdCBhdG9tX2lpb19leGVjdXRlKHN0cnVjdCBhdG9tX2NvbnRleHQgKmN0eCwgaW50IGJhc2UsCiAJCQkJIHVpbnQzMl90IGluZGV4LCB1aW50MzJfdCBkYXRhKQogeworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gY3R4LT5jYXJkLT5kZXYtPmRldl9wcml2YXRlOwogCXVpbnQzMl90IHRlbXAgPSAweENEQ0RDRENEOworCiAJd2hpbGUgKDEpCiAJCXN3aXRjaCAoQ1U4KGJhc2UpKSB7CiAJCWNhc2UgQVRPTV9JSU9fTk9QOgpAQCAtMTEyLDcgKzExNSw4IEBACiAJCQliYXNlICs9IDM7CiAJCQlicmVhazsKIAkJY2FzZSBBVE9NX0lJT19XUklURToKLQkJCSh2b2lkKWN0eC0+Y2FyZC0+aW9yZWdfcmVhZChjdHgtPmNhcmQsIENVMTYoYmFzZSArIDEpKTsKKwkJCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjUxNSkKKwkJCQkodm9pZCljdHgtPmNhcmQtPmlvcmVnX3JlYWQoY3R4LT5jYXJkLCBDVTE2KGJhc2UgKyAxKSk7CiAJCQljdHgtPmNhcmQtPmlvcmVnX3dyaXRlKGN0eC0+Y2FyZCwgQ1UxNihiYXNlICsgMSksIHRlbXApOwogCQkJYmFzZSArPSAzOwogCQkJYnJlYWs7CkBAIC0xMzEsNyArMTM1LDcgQEAKIAkJY2FzZSBBVE9NX0lJT19NT1ZFX0lOREVYOgogCQkJdGVtcCAmPQogCQkJICAgIH4oKDB4RkZGRkZGRkYgPj4gKDMyIC0gQ1U4KGJhc2UgKyAxKSkpIDw8Ci0JCQkgICAgICBDVTgoYmFzZSArIDIpKTsKKwkJCSAgICAgIENVOChiYXNlICsgMykpOwogCQkJdGVtcCB8PQogCQkJICAgICgoaW5kZXggPj4gQ1U4KGJhc2UgKyAyKSkgJgogCQkJICAgICAoMHhGRkZGRkZGRiA+PiAoMzIgLSBDVTgoYmFzZSArIDEpKSkpIDw8IENVOChiYXNlICsKQEAgLTE0MSw3ICsxNDUsNyBAQAogCQljYXNlIEFUT01fSUlPX01PVkVfREFUQToKIAkJCXRlbXAgJj0KIAkJCSAgICB+KCgweEZGRkZGRkZGID4+ICgzMiAtIENVOChiYXNlICsgMSkpKSA8PAotCQkJICAgICAgQ1U4KGJhc2UgKyAyKSk7CisJCQkgICAgICBDVTgoYmFzZSArIDMpKTsKIAkJCXRlbXAgfD0KIAkJCSAgICAoKGRhdGEgPj4gQ1U4KGJhc2UgKyAyKSkgJgogCQkJICAgICAoMHhGRkZGRkZGRiA+PiAoMzIgLSBDVTgoYmFzZSArIDEpKSkpIDw8IENVOChiYXNlICsKQEAgLTE1MSw3ICsxNTUsNyBAQAogCQljYXNlIEFUT01fSUlPX01PVkVfQVRUUjoKIAkJCXRlbXAgJj0KIAkJCSAgICB+KCgweEZGRkZGRkZGID4+ICgzMiAtIENVOChiYXNlICsgMSkpKSA8PAotCQkJICAgICAgQ1U4KGJhc2UgKyAyKSk7CisJCQkgICAgICBDVTgoYmFzZSArIDMpKTsKIAkJCXRlbXAgfD0KIAkJCSAgICAoKGN0eC0+CiAJCQkgICAgICBpb19hdHRyID4+IENVOChiYXNlICsgMikpICYgKDB4RkZGRkZGRkYgPj4gKDMyIC0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3MuaAppbmRleCAwNGIyNjlkLi43ZmQ4ODQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oCkBAIC03MzgsMTMgKzczOCwxMyBAQAogewogI2lmIEFUT01fQklHX0VORElBTgogICAgIFVDSEFSIHVjUmVzZXJ2ZWQxOjE7Ci0gICAgVUNIQVIgdWNEaWdTZWw6MzsgICAgICAgICAgICAgLy8gPTAvMS8yLzMvNC81OiBESUcwLzEvMi8zLzQvNSAoSW4gcmVnaXN0ZXIgc3BlYyBhbHNvIHJlZmVyZWQgYXMgRElHQS9CL0MvRC9FL0YpCisgICAgVUNIQVIgdWNEaWdTZWw6MzsgICAgICAgICAgICAgLy8gPTAvMS8yLzMvNC81OiBESUcwLzEvMi8zLzQvNSAoSW4gcmVnaXN0ZXIgc3BlYyBhbHNvIHJlZmVycmVkIGFzIERJR0EvQi9DL0QvRS9GKQogICAgIFVDSEFSIHVjUmVzZXJ2ZWQ6MzsKICAgICBVQ0hBUiB1Y0RQTGlua1JhdGU6MTsgICAgICAgICAvLyA9MDogMS42MkdoeiwgPTE6IDIuN0doegogI2Vsc2UKICAgICBVQ0hBUiB1Y0RQTGlua1JhdGU6MTsgICAgICAgICAvLyA9MDogMS42MkdoeiwgPTE6IDIuN0doegogICAgIFVDSEFSIHVjUmVzZXJ2ZWQ6MzsKLSAgICBVQ0hBUiB1Y0RpZ1NlbDozOyAgICAgICAgICAgICAvLyA9MC8xLzIvMy80LzU6IERJRzAvMS8yLzMvNC81IChJbiByZWdpc3RlciBzcGVjIGFsc28gcmVmZXJlZCBhcyBESUdBL0IvQy9EL0UvRikKKyAgICBVQ0hBUiB1Y0RpZ1NlbDozOyAgICAgICAgICAgICAvLyA9MC8xLzIvMy80LzU6IERJRzAvMS8yLzMvNC81IChJbiByZWdpc3RlciBzcGVjIGFsc28gcmVmZXJyZWQgYXMgRElHQS9CL0MvRC9FL0YpCiAgICAgVUNIQVIgdWNSZXNlcnZlZDE6MTsKICNlbmRpZgogfUFUT01fRElHX0VOQ09ERVJfQ09ORklHX1YzOwpAQCAtNzg1LDEzICs3ODUsMTMgQEAKIHsKICNpZiBBVE9NX0JJR19FTkRJQU4KICAgICBVQ0hBUiB1Y1Jlc2VydmVkMToxOwotICAgIFVDSEFSIHVjRGlnU2VsOjM7ICAgICAgICAgICAgIC8vID0wLzEvMi8zLzQvNTogRElHMC8xLzIvMy80LzUgKEluIHJlZ2lzdGVyIHNwZWMgYWxzbyByZWZlcmVkIGFzIERJR0EvQi9DL0QvRS9GKQorICAgIFVDSEFSIHVjRGlnU2VsOjM7ICAgICAgICAgICAgIC8vID0wLzEvMi8zLzQvNTogRElHMC8xLzIvMy80LzUgKEluIHJlZ2lzdGVyIHNwZWMgYWxzbyByZWZlcnJlZCBhcyBESUdBL0IvQy9EL0UvRikKICAgICBVQ0hBUiB1Y1Jlc2VydmVkOjI7CiAgICAgVUNIQVIgdWNEUExpbmtSYXRlOjI7ICAgICAgICAgLy8gPTA6IDEuNjJHaHosID0xOiAyLjdHaHosIDI9NS40R2h6ICAgIDw9IENoYW5nZWQgY29tcGFyaW5nIHRvIHByZXZpb3VzIHZlcnNpb24KICNlbHNlCiAgICAgVUNIQVIgdWNEUExpbmtSYXRlOjI7ICAgICAgICAgLy8gPTA6IDEuNjJHaHosID0xOiAyLjdHaHosIDI9NS40R2h6ICAgIDw9IENoYW5nZWQgY29tcGFyaW5nIHRvIHByZXZpb3VzIHZlcnNpb24KICAgICBVQ0hBUiB1Y1Jlc2VydmVkOjI7Ci0gICAgVUNIQVIgdWNEaWdTZWw6MzsgICAgICAgICAgICAgLy8gPTAvMS8yLzMvNC81OiBESUcwLzEvMi8zLzQvNSAoSW4gcmVnaXN0ZXIgc3BlYyBhbHNvIHJlZmVyZWQgYXMgRElHQS9CL0MvRC9FL0YpCisgICAgVUNIQVIgdWNEaWdTZWw6MzsgICAgICAgICAgICAgLy8gPTAvMS8yLzMvNC81OiBESUcwLzEvMi8zLzQvNSAoSW4gcmVnaXN0ZXIgc3BlYyBhbHNvIHJlZmVycmVkIGFzIERJR0EvQi9DL0QvRS9GKQogICAgIFVDSEFSIHVjUmVzZXJ2ZWQxOjE7CiAjZW5kaWYKIH1BVE9NX0RJR19FTkNPREVSX0NPTkZJR19WNDsKQEAgLTIxMjYsNyArMjEyNiw3IEBACiAvLyBTdHJ1Y3R1cmVzIHVzZWQgaW4gRmlybXdhcmVJbmZvVGFibGUKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKIAotLy8gdXNCSU9TQ2FwYWJpbGl0eSBEZWZpbnRpb246CisvLyB1c0JJT1NDYXBhYmlsaXR5IERlZmluaXRpb246CiAvLyBCaXQgMCA9IDA6IEJpb3MgaW1hZ2UgaXMgbm90IFBvc3RlZCwgPTE6QmlvcyBpbWFnZSBpcyBQb3N0ZWQ7IAogLy8gQml0IDEgPSAwOiBEdWFsIENSVEMgaXMgbm90IHN1cHBvcnRlZCwgPTE6IER1YWwgQ1JUQyBpcyBzdXBwb3J0ZWQ7IAogLy8gQml0IDIgPSAwOiBFeHRlbmRlZCBEZXNrdG9wIGlzIG5vdCBzdXBwb3J0ZWQsID0xOiBFeHRlbmRlZCBEZXNrdG9wIGlzIHN1cHBvcnRlZDsgCkBAIC0zMzQxLDcgKzMzNDEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQogLy8gU3RydWN0dXJlIHVzZWQgaW4gQW5hbG9nVFZfSW5mb1RhYmxlIChUb3AgbGV2ZWwpCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCi0vL3VjVFZCb290VXBEZWZhdWx0U3RkIGRlZmluaXRvbjoKKy8vdWNUVkJvb3RVcERlZmF1bHRTdGQgZGVmaW5pdGlvbjoKIAogLy9BVE9NX1RWX05UU0MgICAgICAgICAgICAgICAgMQogLy9BVE9NX1RWX05UU0NKICAgICAgICAgICAgICAgMgpAQCAtMzgxNiw3ICszODE2LDcgQEAKICAgVUNIQVIgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkIFs2XTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBwb3RlbnRpYWwgZXhwYW5zaW9uCiB9QVRPTV9FWFRFUk5BTF9ESVNQTEFZX0NPTk5FQ1RJT05fSU5GTzsKIAotLy9SZWxhdGVkIGRlZmluaXRpb25zLCBhbGwgcmVjb3JkcyBhcmUgZGlmZmVybnQgYnV0IHRoZXkgaGF2ZSBhIGNvbW1vbmQgaGVhZGVyCisvL1JlbGF0ZWQgZGVmaW5pdGlvbnMsIGFsbCByZWNvcmRzIGFyZSBkaWZmZXJlbnQgYnV0IHRoZXkgaGF2ZSBhIGNvbW1vbmQgaGVhZGVyCiB0eXBlZGVmIHN0cnVjdCBfQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUgogewogICBVQ0hBUiAgICAgICAgICAgICAgIHVjUmVjb3JkVHlwZTsgICAgICAgICAgICAgICAgICAgICAgLy9BbiBlbXVuIHRvIGluZGljYXRlIHRoZSByZWNvcmQgdHlwZQpAQCAtNDM2NSwxNCArNDM2NSwxNCBAQAogdWxDU1JfTTNfQVJCX0NOVExfREVGQVVMVFsxMF06ICAgIEFycmF5cyB3aXRoIHZhbHVlcyBmb3IgQ1NSIE0zIGFyYml0ZXIgZm9yIGRlZmF1bHQKIHVsQ1NSX00zX0FSQl9DTlRMX1VWRFsxMF06ICAgICAgICBBcnJheXMgd2l0aCB2YWx1ZXMgZm9yIENTUiBNMyBhcmJpdGVyIGZvciBVVkQgcGxheWJhY2suCiB1bENTUl9NM19BUkJfQ05UTF9GUzNEWzEwXTogICAgICAgQXJyYXlzIHdpdGggdmFsdWVzIGZvciBDU1IgTTMgYXJiaXRlciBmb3IgRnVsbCBTY3JlZW4gM0QgYXBwbGljYXRpb25zLgotc0F2YWlsX1NDTEtbNV06ICAgICAgICAgICAgICAgICAgIEFycmF5cyB0byBwcm92aWRlIGF2YWlsYWJlIGxpc3Qgb2YgU0xDSyBhbmQgY29ycmVzcG9uZGluZyB2b2x0YWdlLCBvcmRlciBmcm9tIGxvdyB0byBoaWdoICAKK3NBdmFpbF9TQ0xLWzVdOiAgICAgICAgICAgICAgICAgICBBcnJheXMgdG8gcHJvdmlkZSBhdmFpbGFibGUgbGlzdCBvZiBTTENLIGFuZCBjb3JyZXNwb25kaW5nIHZvbHRhZ2UsIG9yZGVyIGZyb20gbG93IHRvIGhpZ2ggIAogdWxHTUNSZXN0b3JlUmVzZXRUaW1lOiAgICAgICAgICAgIEdNQyBwb3dlciByZXN0b3JlIGFuZCBHTUMgcmVzZXQgdGltZSB0byBjYWxjdWxhdGUgZGF0YSByZWNvbm5lY3Rpb24gbGF0ZW5jeS4gVW5pdCBpbiBucy4gCiB1bE1pbmltdW1OQ2xrOiAgICAgICAgICAgICAgICAgICAgTWluaW11bSBOQ0xLIHNwZWVkIGFtb25nIGFsbCBOQi1Qc3RhdGVzIHRvIGNhbGN1YWx0ZSBkYXRhIHJlY29ubmVjdGlvbiBsYXRlbmN5LiBVbml0IGluIDEwa0h6LiAKIHVsSWRsZU5DbGs6ICAgICAgICAgICAgICAgICAgICAgICBOQ0xLIHNwZWVkIHdoaWxlIG1lbW9yeSBydW5zIGluIHNlbGYtcmVmcmVzaCBzdGF0ZS4gVW5pdCBpbiAxMGtIei4KIHVsRERSX0RMTF9Qb3dlclVwVGltZTogICAgICAgICAgICBERFIgUEhZIERMTCBwb3dlciB1cCB0aW1lLiBVbml0IGluIG5zLgogdWxERFJfUExMX1Bvd2VyVXBUaW1lOiAgICAgICAgICAgIEREUiBQSFkgUExMIHBvd2VyIHVwIHRpbWUuIFVuaXQgaW4gbnMuCi11c1BDSUVDbGtTU1BlcmNlbnRhZ2U6ICAgICAgICAgICAgUENJRSBDbG9jayBTcHJlZCBTcGVjdHJ1bSBQZXJjZW50YWdlIGluIHVuaXQgMC4wMSU7IDEwMCBtZWFuIDElLgotdXNQQ0lFQ2xrU1NUeXBlOiAgICAgICAgICAgICAgICAgIFBDSUUgQ2xvY2sgU3ByZWQgU3BlY3RydW0gVHlwZS4gMCBmb3IgRG93biBzcHJlYWQoZGVmYXVsdCk7IDEgZm9yIENlbnRlciBzcHJlYWQuCit1c1BDSUVDbGtTU1BlcmNlbnRhZ2U6ICAgICAgICAgICAgUENJRSBDbG9jayBTcHJlYWQgU3BlY3RydW0gUGVyY2VudGFnZSBpbiB1bml0IDAuMDElOyAxMDAgbWVhbiAxJS4KK3VzUENJRUNsa1NTVHlwZTogICAgICAgICAgICAgICAgICBQQ0lFIENsb2NrIFNwcmVhZCBTcGVjdHJ1bSBUeXBlLiAwIGZvciBEb3duIHNwcmVhZChkZWZhdWx0KTsgMSBmb3IgQ2VudGVyIHNwcmVhZC4KIHVzTHZkc1NTUGVyY2VudGFnZTogICAgICAgICAgICAgICBMVkRTIHBhbmVsICggbm90IGluY2x1ZGUgZURQICkgU3ByZWFkIFNwZWN0cnVtIFBlcmNlbnRhZ2UgaW4gdW5pdCBvZiAwLjAxJSwgPTAsIHVzZSBWQklPUyBkZWZhdWx0IHNldHRpbmcuIAogdXNMdmRzU1NwcmVhZFJhdGVJbjEwSHo6ICAgICAgICAgIExWRFMgcGFuZWwgKCBub3QgaW5jbHVkZSBlRFAgKSBTcHJlYWQgU3BlY3RydW0gZnJlcXVlbmN5IGluIHVuaXQgb2YgMTBIeiwgPTAsIHVzZSBWQklPUyBkZWZhdWx0IHNldHRpbmcuIAogdXNIRE1JU1NQZXJjZW50YWdlOiAgICAgICAgICAgICAgIEhETUkgU3ByZWFkIFNwZWN0cnVtIFBlcmNlbnRhZ2UgaW4gdW5pdCAwLjAxJTsgMTAwIG1lYW4gMSUsICA9MCwgdXNlIFZCSU9TIGRlZmF1bHQgc2V0dGluZy4gCkBAIC00NTU1LDcgKzQ1NTUsNyBAQAogI2RlZmluZSBBVE9NX1MwX1NZU1RFTV9QT1dFUl9TVEFURV9WQUxVRV9MSVRFQUMgMwogI2RlZmluZSBBVE9NX1MwX1NZU1RFTV9QT1dFUl9TVEFURV9WQUxVRV9MSVQyQUMgNAogCi0vL0J5dGUgYWxpZ25lZCBkZWZpbnRpb24gZm9yIEJJT1MgdXNhZ2UKKy8vQnl0ZSBhbGlnbmVkIGRlZmluaXRpb24gZm9yIEJJT1MgdXNhZ2UKICNkZWZpbmUgQVRPTV9TMF9DUlQxX01PTk9iMCAgICAgICAgICAgICAweDAxCiAjZGVmaW5lIEFUT01fUzBfQ1JUMV9DT0xPUmIwICAgICAgICAgICAgMHgwMgogI2RlZmluZSBBVE9NX1MwX0NSVDFfTUFTS2IwICAgICAgICAgICAgIChBVE9NX1MwX0NSVDFfTU9OT2IwK0FUT01fUzBfQ1JUMV9DT0xPUmIwKQpAQCAtNDYyMSw3ICs0NjIxLDcgQEAKICNkZWZpbmUgQVRPTV9TMl9ESVNQTEFZX1JPVEFUSU9OX0FOR0xFX01BU0sgICAweEMwMDAwMDAwTAogCiAKLS8vQnl0ZSBhbGlnbmVkIGRlZmludGlvbiBmb3IgQklPUyB1c2FnZQorLy9CeXRlIGFsaWduZWQgZGVmaW5pdGlvbiBmb3IgQklPUyB1c2FnZQogI2RlZmluZSBBVE9NX1MyX1RWMV9TVEFOREFSRF9NQVNLYjAgICAgIDB4MEYKICNkZWZpbmUgQVRPTV9TMl9DVVJSRU5UX0JMX0xFVkVMX01BU0tiMSAweEZGCiAjZGVmaW5lIEFUT01fUzJfREVWSUNFX0RQTVNfU1RBVEViMiAgICAgMHgwMQpAQCAtNDY3MSw3ICs0NjcxLDcgQEAKICNkZWZpbmUgQVRPTV9TM19BTExPV19GQVNUX1BXUl9TV0lUQ0ggICAweDQwMDAwMDAwTAogI2RlZmluZSBBVE9NX1MzX1JRU1RfR1BVX1VTRV9NSU5fUFdSICAgIDB4ODAwMDAwMDBMCiAKLS8vQnl0ZSBhbGlnbmVkIGRlZmludGlvbiBmb3IgQklPUyB1c2FnZQorLy9CeXRlIGFsaWduZWQgZGVmaW5pdGlvbiBmb3IgQklPUyB1c2FnZQogI2RlZmluZSBBVE9NX1MzX0NSVDFfQUNUSVZFYjAgICAgICAgICAgIDB4MDEKICNkZWZpbmUgQVRPTV9TM19MQ0QxX0FDVElWRWIwICAgICAgICAgICAweDAyCiAjZGVmaW5lIEFUT01fUzNfVFYxX0FDVElWRWIwICAgICAgICAgICAgMHgwNApAQCAtNDcwNyw3ICs0NzA3LDcgQEAKICNkZWZpbmUgQVRPTV9TNF9MQ0QxX1JFRlJFU0hfTUFTSyAgICAgICAweDAwMDBGRjAwTAogI2RlZmluZSBBVE9NX1M0X0xDRDFfUkVGUkVTSF9TSElGVCAgICAgIDgKIAotLy9CeXRlIGFsaWduZWQgZGVmaW50aW9uIGZvciBCSU9TIHVzYWdlCisvL0J5dGUgYWxpZ25lZCBkZWZpbml0aW9uIGZvciBCSU9TIHVzYWdlCiAjZGVmaW5lIEFUT01fUzRfTENEMV9QQU5FTF9JRF9NQVNLYjAJICAweDBGRgogI2RlZmluZSBBVE9NX1M0X0xDRDFfUkVGUkVTSF9NQVNLYjEJCSAgQVRPTV9TNF9MQ0QxX1BBTkVMX0lEX01BU0tiMAogI2RlZmluZSBBVE9NX1M0X1ZSQU1fSU5GT19NQVNLYjIgICAgICAgIEFUT01fUzRfTENEMV9QQU5FTF9JRF9NQVNLYjAKQEAgLTQ3ODYsNyArNDc4Niw3IEBACiAjZGVmaW5lIEFUT01fUzZfVlJJX0JSSUdIVE5FU1NfQ0hBTkdFICAgICAgIDB4NDAwMDAwMDBMCiAjZGVmaW5lIEFUT01fUzZfQ09ORklHX0RJU1BMQVlfQ0hBTkdFX01BU0sgIDB4ODAwMDAwMDBMCiAKLS8vQnl0ZSBhbGlnbmVkIGRlZmludGlvbiBmb3IgQklPUyB1c2FnZQorLy9CeXRlIGFsaWduZWQgZGVmaW5pdGlvbiBmb3IgQklPUyB1c2FnZQogI2RlZmluZSBBVE9NX1M2X0RFVklDRV9DSEFOR0ViMCAgICAgICAgIDB4MDEKICNkZWZpbmUgQVRPTV9TNl9TQ0FMRVJfQ0hBTkdFYjAgICAgICAgICAweDAyCiAjZGVmaW5lIEFUT01fUzZfTElEX0NIQU5HRWIwICAgICAgICAgICAgMHgwNApAQCAtNTAyNyw3ICs1MDI3LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgX01FTU9SWV9DTEVBTl9VUF9QQVJBTUVURVJTCiB7Ci0gIFVTSE9SVCAgdXNNZW1vcnlTdGFydDsgICAgICAgICAgICAgICAgLy9pbiA4S2IgYm91bmRyeSwgb2Zmc2V0IGZyb20gbWVtb3J5IGJhc2UgYWRkcmVzcworICBVU0hPUlQgIHVzTWVtb3J5U3RhcnQ7ICAgICAgICAgICAgICAgIC8vaW4gOEtiIGJvdW5kYXJ5LCBvZmZzZXQgZnJvbSBtZW1vcnkgYmFzZSBhZGRyZXNzCiAgIFVTSE9SVCAgdXNNZW1vcnlTaXplOyAgICAgICAgICAgICAgICAgLy84S2IgYmxvY2tzIGFsaWduZWQKIH1NRU1PUllfQ0xFQU5fVVBfUEFSQU1FVEVSUzsKICNkZWZpbmUgTUVNT1JZX0NMRUFOX1VQX1BTX0FMTE9DQVRJT04gTUVNT1JZX0NMRUFOX1VQX1BBUkFNRVRFUlMKQEAgLTY4NTUsNyArNjg1NSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotLy8gRm9sbG93aW5nIGRlZmluaXRpb25zIGFyZSBmb3IgY29tcGF0aWJsaXR5IGlzc3VlIGluIGRpZmZlcmVudCBTVyBjb21wb25lbnRzLiAKKy8vIEZvbGxvd2luZyBkZWZpbml0aW9ucyBhcmUgZm9yIGNvbXBhdGliaWxpdHkgaXNzdWUgaW4gZGlmZmVyZW50IFNXIGNvbXBvbmVudHMuIAogI2RlZmluZSBBVE9NX01BU1RFUl9EQVRBX1RBQkxFX1JFVklTSU9OICAgMHgwMQogI2RlZmluZSBPYmplY3RfSW5mbwkJCQkJCQkJCQkJCU9iamVjdF9IZWFkZXIJCQkKICNkZWZpbmUJQWRqdXN0QVJCX1NFUQkJCQkJCQkJCQkJTUNfSW5pdFBhcmFtZXRlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYwppbmRleCBiNDFlYzU5Li41MjlhM2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYwpAQCAtNTMxLDYgKzUzMSw5IEBACiAJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfUFJFRkVSX0hJR0hfRkJfRElWOwogCQllbHNlCiAJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfUFJFRkVSX0xPV19SRUZfRElWOworCisJCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX1JWNzcwKQorCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX1BSRUZFUl9NSU5NX09WRVJfTUFYUDsKIAl9IGVsc2UgewogCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfTEVHQUNZOwogCkBAIC01NTksNyArNTYyLDYgQEAKIAkJCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9MQ0RfU1VQUE9SVCkpIHsKIAkJCQlpZiAoc3NfZW5hYmxlZCkgewogCQkJCQlpZiAoc3MtPnJlZmRpdikgewotCQkJCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX1BSRUZFUl9NSU5NX09WRVJfTUFYUDsKIAkJCQkJCXBsbC0+ZmxhZ3MgfD0gUkFERU9OX1BMTF9VU0VfUkVGX0RJVjsKIAkJCQkJCXBsbC0+cmVmZXJlbmNlX2RpdiA9IHNzLT5yZWZkaXY7CiAJCQkJCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jCmluZGV4IDBiMGNjNzQuLjkwNzNlM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYwpAQCAtMTIwLDExICsxMjAsMTYgQEAKIAlzdHJ1Y3QgcmFkZW9uX3Bvd2VyX3N0YXRlICpwcyA9ICZyZGV2LT5wbS5wb3dlcl9zdGF0ZVtyZXFfcHNfaWR4XTsKIAlzdHJ1Y3QgcmFkZW9uX3ZvbHRhZ2UgKnZvbHRhZ2UgPSAmcHMtPmNsb2NrX2luZm9bcmVxX2NtX2lkeF0udm9sdGFnZTsKIAotCWlmICgodm9sdGFnZS0+dHlwZSA9PSBWT0xUQUdFX1NXKSAmJiB2b2x0YWdlLT52b2x0YWdlKSB7Ci0JCWlmICh2b2x0YWdlLT52b2x0YWdlICE9IHJkZXYtPnBtLmN1cnJlbnRfdmRkYykgewotCQkJcmFkZW9uX2F0b21fc2V0X3ZvbHRhZ2UocmRldiwgdm9sdGFnZS0+dm9sdGFnZSk7CisJaWYgKHZvbHRhZ2UtPnR5cGUgPT0gVk9MVEFHRV9TVykgeworCQlpZiAodm9sdGFnZS0+dm9sdGFnZSAmJiAodm9sdGFnZS0+dm9sdGFnZSAhPSByZGV2LT5wbS5jdXJyZW50X3ZkZGMpKSB7CisJCQlyYWRlb25fYXRvbV9zZXRfdm9sdGFnZShyZGV2LCB2b2x0YWdlLT52b2x0YWdlLCBTRVRfVk9MVEFHRV9UWVBFX0FTSUNfVkREQyk7CiAJCQlyZGV2LT5wbS5jdXJyZW50X3ZkZGMgPSB2b2x0YWdlLT52b2x0YWdlOwotCQkJRFJNX0RFQlVHKCJTZXR0aW5nOiB2OiAlZFxuIiwgdm9sdGFnZS0+dm9sdGFnZSk7CisJCQlEUk1fREVCVUcoIlNldHRpbmc6IHZkZGM6ICVkXG4iLCB2b2x0YWdlLT52b2x0YWdlKTsKKwkJfQorCQlpZiAodm9sdGFnZS0+dmRkY2kgJiYgKHZvbHRhZ2UtPnZkZGNpICE9IHJkZXYtPnBtLmN1cnJlbnRfdmRkY2kpKSB7CisJCQlyYWRlb25fYXRvbV9zZXRfdm9sdGFnZShyZGV2LCB2b2x0YWdlLT52ZGRjaSwgU0VUX1ZPTFRBR0VfVFlQRV9BU0lDX1ZERENJKTsKKwkJCXJkZXYtPnBtLmN1cnJlbnRfdmRkY2kgPSB2b2x0YWdlLT52ZGRjaTsKKwkJCURSTV9ERUJVRygiU2V0dGluZzogdmRkY2k6ICVkXG4iLCB2b2x0YWdlLT52ZGRjaSk7CiAJCX0KIAl9CiB9CkBAIC0zNDgsNyArMzUzLDcgQEAKIAkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpvdGhlcl9tb2RlKQogewotCXUzMiB0bXAgPSAwOworCXUzMiB0bXA7CiAJLyoKIAkgKiBMaW5lIEJ1ZmZlciBTZXR1cAogCSAqIFRoZXJlIGFyZSAzIGxpbmUgYnVmZmVycywgZWFjaCBvbmUgc2hhcmVkIGJ5IDIgZGlzcGxheSBjb250cm9sbGVycy4KQEAgLTM1OCw2NCArMzYzLDYzIEBACiAJICogZmlyc3QgZGlzcGxheSBjb250cm9sbGVyCiAJICogIDAgLSBmaXJzdCBoYWxmIG9mIGxiICgzODQwICogMikKIAkgKiAgMSAtIGZpcnN0IDMvNCBvZiBsYiAoNTc2MCAqIDIpCi0JICogIDIgLSB3aG9sZSBsYiAoNzY4MCAqIDIpCisJICogIDIgLSB3aG9sZSBsYiAoNzY4MCAqIDIpLCBvdGhlciBjcnRjIG11c3QgYmUgZGlzYWJsZWQKIAkgKiAgMyAtIGZpcnN0IDEvNCBvZiBsYiAoMTkyMCAqIDIpCiAJICogc2Vjb25kIGRpc3BsYXkgY29udHJvbGxlcgogCSAqICA0IC0gc2Vjb25kIGhhbGYgb2YgbGIgKDM4NDAgKiAyKQogCSAqICA1IC0gc2Vjb25kIDMvNCBvZiBsYiAoNTc2MCAqIDIpCi0JICogIDYgLSB3aG9sZSBsYiAoNzY4MCAqIDIpCisJICogIDYgLSB3aG9sZSBsYiAoNzY4MCAqIDIpLCBvdGhlciBjcnRjIG11c3QgYmUgZGlzYWJsZWQKIAkgKiAgNyAtIGxhc3QgMS80IG9mIGxiICgxOTIwICogMikKIAkgKi8KLQlpZiAobW9kZSAmJiBvdGhlcl9tb2RlKSB7Ci0JCWlmIChtb2RlLT5oZGlzcGxheSA+IG90aGVyX21vZGUtPmhkaXNwbGF5KSB7Ci0JCQlpZiAobW9kZS0+aGRpc3BsYXkgPiAyNTYwKQotCQkJCXRtcCA9IDE7IC8qIDMvNCAqLwotCQkJZWxzZQotCQkJCXRtcCA9IDA7IC8qIDEvMiAqLwotCQl9IGVsc2UgaWYgKG90aGVyX21vZGUtPmhkaXNwbGF5ID4gbW9kZS0+aGRpc3BsYXkpIHsKLQkJCWlmIChvdGhlcl9tb2RlLT5oZGlzcGxheSA+IDI1NjApCi0JCQkJdG1wID0gMzsgLyogMS80ICovCi0JCQllbHNlCi0JCQkJdG1wID0gMDsgLyogMS8yICovCi0JCX0gZWxzZQorCS8qIHRoaXMgY2FuIGdldCB0cmlja3kgaWYgd2UgaGF2ZSB0d28gbGFyZ2UgZGlzcGxheXMgb24gYSBwYWlyZWQgZ3JvdXAKKwkgKiBvZiBjcnRjcy4gIElkZWFsbHkgZm9yIG11bHRpcGxlIGxhcmdlIGRpc3BsYXlzIHdlJ2QgYXNzaWduIHRoZW0gdG8KKwkgKiBub24tbGlua2VkIGNydGNzIGZvciBtYXhpbXVtIGxpbmUgYnVmZmVyIGFsbG9jYXRpb24uCisJICovCisJaWYgKHJhZGVvbl9jcnRjLT5iYXNlLmVuYWJsZWQgJiYgbW9kZSkgeworCQlpZiAob3RoZXJfbW9kZSkKIAkJCXRtcCA9IDA7IC8qIDEvMiAqLwotCX0gZWxzZSBpZiAobW9kZSkKLQkJdG1wID0gMjsgLyogd2hvbGUgKi8KLQllbHNlIGlmIChvdGhlcl9tb2RlKQotCQl0bXAgPSAzOyAvKiAxLzQgKi8KKwkJZWxzZQorCQkJdG1wID0gMjsgLyogd2hvbGUgKi8KKwl9IGVsc2UKKwkJdG1wID0gMDsKIAogCS8qIHNlY29uZCBjb250cm9sbGVyIG9mIHRoZSBwYWlyIHVzZXMgc2Vjb25kIGhhbGYgb2YgdGhlIGxiICovCiAJaWYgKHJhZGVvbl9jcnRjLT5jcnRjX2lkICUgMikKIAkJdG1wICs9IDQ7CiAJV1JFRzMyKERDX0xCX01FTU9SWV9TUExJVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgdG1wKTsKIAotCXN3aXRjaCAodG1wKSB7Ci0JY2FzZSAwOgotCWNhc2UgNDoKLQlkZWZhdWx0OgotCQlpZiAoQVNJQ19JU19EQ0U1KHJkZXYpKQotCQkJcmV0dXJuIDQwOTYgKiAyOwotCQllbHNlCi0JCQlyZXR1cm4gMzg0MCAqIDI7Ci0JY2FzZSAxOgotCWNhc2UgNToKLQkJaWYgKEFTSUNfSVNfRENFNShyZGV2KSkKLQkJCXJldHVybiA2MTQ0ICogMjsKLQkJZWxzZQotCQkJcmV0dXJuIDU3NjAgKiAyOwotCWNhc2UgMjoKLQljYXNlIDY6Ci0JCWlmIChBU0lDX0lTX0RDRTUocmRldikpCi0JCQlyZXR1cm4gODE5MiAqIDI7Ci0JCWVsc2UKLQkJCXJldHVybiA3NjgwICogMjsKLQljYXNlIDM6Ci0JY2FzZSA3OgotCQlpZiAoQVNJQ19JU19EQ0U1KHJkZXYpKQotCQkJcmV0dXJuIDIwNDggKiAyOwotCQllbHNlCi0JCQlyZXR1cm4gMTkyMCAqIDI7CisJaWYgKHJhZGVvbl9jcnRjLT5iYXNlLmVuYWJsZWQgJiYgbW9kZSkgeworCQlzd2l0Y2ggKHRtcCkgeworCQljYXNlIDA6CisJCWNhc2UgNDoKKwkJZGVmYXVsdDoKKwkJCWlmIChBU0lDX0lTX0RDRTUocmRldikpCisJCQkJcmV0dXJuIDQwOTYgKiAyOworCQkJZWxzZQorCQkJCXJldHVybiAzODQwICogMjsKKwkJY2FzZSAxOgorCQljYXNlIDU6CisJCQlpZiAoQVNJQ19JU19EQ0U1KHJkZXYpKQorCQkJCXJldHVybiA2MTQ0ICogMjsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gNTc2MCAqIDI7CisJCWNhc2UgMjoKKwkJY2FzZSA2OgorCQkJaWYgKEFTSUNfSVNfRENFNShyZGV2KSkKKwkJCQlyZXR1cm4gODE5MiAqIDI7CisJCQllbHNlCisJCQkJcmV0dXJuIDc2ODAgKiAyOworCQljYXNlIDM6CisJCWNhc2UgNzoKKwkJCWlmIChBU0lDX0lTX0RDRTUocmRldikpCisJCQkJcmV0dXJuIDIwNDggKiAyOworCQkJZWxzZQorCQkJCXJldHVybiAxOTIwICogMjsKKwkJfQogCX0KKworCS8qIGNvbnRyb2xsZXIgbm90IGVuYWJsZWQsIHNvIG5vIGxiIHVzZWQgKi8KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHUzMiBldmVyZ3JlZW5fZ2V0X251bWJlcl9vZl9kcmFtX2NoYW5uZWxzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQpAQCAtODU4LDkgKzg2MiwxNSBAQAogCQlTWVNURU1fQUNDRVNTX01PREVfTk9UX0lOX1NZUyB8CiAJCVNZU1RFTV9BUEVSVFVSRV9VTk1BUFBFRF9BQ0NFU1NfUEFTU19USFJVIHwKIAkJRUZGRUNUSVZFX0wxX1RMQl9TSVpFKDUpIHwgRUZGRUNUSVZFX0wxX1FVRVVFX1NJWkUoNSk7Ci0JV1JFRzMyKE1DX1ZNX01EX0wxX1RMQjBfQ05UTCwgdG1wKTsKLQlXUkVHMzIoTUNfVk1fTURfTDFfVExCMV9DTlRMLCB0bXApOwotCVdSRUczMihNQ19WTV9NRF9MMV9UTEIyX0NOVEwsIHRtcCk7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkgeworCQlXUkVHMzIoRlVTX01DX1ZNX01EX0wxX1RMQjBfQ05UTCwgdG1wKTsKKwkJV1JFRzMyKEZVU19NQ19WTV9NRF9MMV9UTEIxX0NOVEwsIHRtcCk7CisJCVdSRUczMihGVVNfTUNfVk1fTURfTDFfVExCMl9DTlRMLCB0bXApOworCX0gZWxzZSB7CisJCVdSRUczMihNQ19WTV9NRF9MMV9UTEIwX0NOVEwsIHRtcCk7CisJCVdSRUczMihNQ19WTV9NRF9MMV9UTEIxX0NOVEwsIHRtcCk7CisJCVdSRUczMihNQ19WTV9NRF9MMV9UTEIyX0NOVEwsIHRtcCk7CisJfQogCVdSRUczMihNQ19WTV9NQl9MMV9UTEIwX0NOVEwsIHRtcCk7CiAJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjFfQ05UTCwgdG1wKTsKIAlXUkVHMzIoTUNfVk1fTUJfTDFfVExCMl9DTlRMLCB0bXApOwpAQCAtMTc3MCw3ICsxNzgwLDEwIEBACiAKIAogCW1jX3NoYXJlZF9jaG1hcCA9IFJSRUczMihNQ19TSEFSRURfQ0hNQVApOwotCW1jX2FyYl9yYW1jZmcgPSBSUkVHMzIoTUNfQVJCX1JBTUNGRyk7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkKKwkJbWNfYXJiX3JhbWNmZyA9IFJSRUczMihGVVNfTUNfQVJCX1JBTUNGRyk7CisJZWxzZQorCQltY19hcmJfcmFtY2ZnID0gUlJFRzMyKE1DX0FSQl9SQU1DRkcpOwogCiAJc3dpdGNoIChyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF90aWxlX3BpcGVzKSB7CiAJY2FzZSAxOgpAQCAtMjU3Niw3ICsyNTg5LDcgQEAKIAl1MzIgd3B0ciwgdG1wOwogCiAJaWYgKHJkZXYtPndiLmVuYWJsZWQpCi0JCXdwdHIgPSByZGV2LT53Yi53YltSNjAwX1dCX0lIX1dQVFJfT0ZGU0VULzRdOworCQl3cHRyID0gbGUzMl90b19jcHUocmRldi0+d2Iud2JbUjYwMF9XQl9JSF9XUFRSX09GRlNFVC80XSk7CiAJZWxzZQogCQl3cHRyID0gUlJFRzMyKElIX1JCX1dQVFIpOwogCkBAIC0yOTE5LDExICsyOTMyLDYgQEAKIAkJcmRldi0+YXNpYy0+Y29weSA9IE5VTEw7CiAJCWRldl93YXJuKHJkZXYtPmRldiwgImZhaWxlZCBibGl0dGVyICglZCkgZmFsbGluZyBiYWNrIHRvIG1lbWNweVxuIiwgcik7CiAJfQotCS8qIFhYWDogb250YXJpbyBoYXMgcHJvYmxlbXMgYmxpdHRpbmcgdG8gZ2FydCBhdCB0aGUgbW9tZW50ICovCi0JaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1BBTE0pIHsKLQkJcmRldi0+YXNpYy0+Y29weSA9IE5VTEw7Ci0JCXJhZGVvbl90dG1fc2V0X2FjdGl2ZV92cmFtX3NpemUocmRldiwgcmRldi0+bWMudmlzaWJsZV92cmFtX3NpemUpOwotCX0KIAogCS8qIGFsbG9jYXRlIHdiIGJ1ZmZlciAqLwogCXIgPSByYWRlb25fd2JfaW5pdChyZGV2KTsKQEAgLTMwMzYsOSArMzA0NCw2IEBACiB7CiAJaW50IHI7CiAKLQlyID0gcmFkZW9uX2R1bW15X3BhZ2VfaW5pdChyZGV2KTsKLQlpZiAocikKLQkJcmV0dXJuIHI7CiAJLyogVGhpcyBkb24ndCBkbyBtdWNoICovCiAJciA9IHJhZGVvbl9nZW1faW5pdChyZGV2KTsKIAlpZiAocikKQEAgLTMxNTAsNyArMzE1NSw2IEBACiAJcmFkZW9uX2F0b21iaW9zX2ZpbmkocmRldik7CiAJa2ZyZWUocmRldi0+Ymlvcyk7CiAJcmRldi0+YmlvcyA9IE5VTEw7Ci0JcmFkZW9uX2R1bW15X3BhZ2VfZmluaShyZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgZXZlcmdyZWVuX3BjaWVfZ2VuMl9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fY3MuYwppbmRleCBlZGRlOTBiLi4yM2QzNjQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX2NzLmMKQEAgLTQ0Miw3ICs0NDIsNyBAQAogCX0KIAlpYiA9IHAtPmliLT5wdHI7CiAJc3dpdGNoIChyZWcpIHsKLQkvKiBmb3JjZSBmb2xsb3dpbmcgcmVnIHRvIDAgaW4gYW4gYXR0ZW1wIHRvIGRpc2FibGUgb3V0IGJ1ZmZlcgorCS8qIGZvcmNlIGZvbGxvd2luZyByZWcgdG8gMCBpbiBhbiBhdHRlbXB0IHRvIGRpc2FibGUgb3V0IGJ1ZmZlcgogCSAqIHdoaWNoIHdpbGwgbmVlZCB1cyB0byBiZXR0ZXIgdW5kZXJzdGFuZCBob3cgaXQgd29ya3MgdG8gcGVyZm9ybQogCSAqIHNlY3VyaXR5IGNoZWNrIG9uIGl0IChKZXJvbWUpCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbmQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oCmluZGV4IDlhYWEzZjAuLmZjNDBlMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oCkBAIC0yMDAsNiArMjAwLDcgQEAKICNkZWZpbmUJCUJVUlNUTEVOR1RIX1NISUZUCQkJCTkKICNkZWZpbmUJCUJVUlNUTEVOR1RIX01BU0sJCQkJMHgwMDAwMDIwMAogI2RlZmluZQkJQ0hBTlNJWkVfT1ZFUlJJREUJCQkJKDEgPDwgMTEpCisjZGVmaW5lCUZVU19NQ19BUkJfUkFNQ0ZHCQkJCTB4Mjc2OAogI2RlZmluZQlNQ19WTV9BR1BfVE9QCQkJCQkweDIwMjgKICNkZWZpbmUJTUNfVk1fQUdQX0JPVAkJCQkJMHgyMDJDCiAjZGVmaW5lCU1DX1ZNX0FHUF9CQVNFCQkJCQkweDIwMzAKQEAgLTIyMSw2ICsyMjIsMTEgQEAKICNkZWZpbmUJTUNfVk1fTURfTDFfVExCMF9DTlRMCQkJCTB4MjY1NAogI2RlZmluZQlNQ19WTV9NRF9MMV9UTEIxX0NOVEwJCQkJMHgyNjU4CiAjZGVmaW5lCU1DX1ZNX01EX0wxX1RMQjJfQ05UTAkJCQkweDI2NUMKKworI2RlZmluZQlGVVNfTUNfVk1fTURfTDFfVExCMF9DTlRMCQkJMHgyNjVDCisjZGVmaW5lCUZVU19NQ19WTV9NRF9MMV9UTEIxX0NOVEwJCQkweDI2NjAKKyNkZWZpbmUJRlVTX01DX1ZNX01EX0wxX1RMQjJfQ05UTAkJCTB4MjY2NAorCiAjZGVmaW5lCU1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ERUZBVUxUX0FERFIJCTB4MjAzQwogI2RlZmluZQlNQ19WTV9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSCQkJMHgyMDM4CiAjZGVmaW5lCU1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUgkJCTB4MjAzNApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaS5jCmluZGV4IDdhYWRlMjAuLjNkOGE3NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbmkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pLmMKQEAgLTY3NCw3ICs2NzQsNyBAQAogCiAJY2NfcmJfYmFja2VuZF9kaXNhYmxlID0gUlJFRzMyKENDX1JCX0JBQ0tFTkRfRElTQUJMRSk7CiAJY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnID0gUlJFRzMyKENDX0dDX1NIQURFUl9QSVBFX0NPTkZJRyk7Ci0JY2d0c190Y2NfZGlzYWJsZSA9IFJSRUczMihDR1RTX1RDQ19ESVNBQkxFKTsKKwljZ3RzX3RjY19kaXNhYmxlID0gMHhmZjAwMDAwMDsKIAlnY191c2VyX3JiX2JhY2tlbmRfZGlzYWJsZSA9IFJSRUczMihHQ19VU0VSX1JCX0JBQ0tFTkRfRElTQUJMRSk7CiAJZ2NfdXNlcl9zaGFkZXJfcGlwZV9jb25maWcgPSBSUkVHMzIoR0NfVVNFUl9TSEFERVJfUElQRV9DT05GSUcpOwogCWNndHNfdXNlcl90Y2NfZGlzYWJsZSA9IFJSRUczMihDR1RTX1VTRVJfVENDX0RJU0FCTEUpOwpAQCAtODcxLDcgKzg3MSw3IEBACiAKIAlzbXhfZGNfY3RsMCA9IFJSRUczMihTTVhfRENfQ1RMMCk7CiAJc214X2RjX2N0bDAgJj0gfk5VTUJFUl9PRl9TRVRTKDB4MWZmKTsKLQlzbXhfZGNfY3RsMCB8PSBOVU1CRVJfT0ZfU0VUUyhyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X251bV9vZl9zZXRzKTsKKwlzbXhfZGNfY3RsMCB8PSBOVU1CRVJfT0ZfU0VUUyhyZGV2LT5jb25maWcuY2F5bWFuLnN4X251bV9vZl9zZXRzKTsKIAlXUkVHMzIoU01YX0RDX0NUTDAsIHNteF9kY19jdGwwKTsKIAogCVdSRUczMihTUElfQ09ORklHX0NOVExfMSwgVlRYX0RPTkVfREVMQVkoNCkgfCBDUkNfU0lNRF9JRF9XQUREUl9ESVNBQkxFKTsKQEAgLTg4NywyMCArODg3LDIwIEBACiAKIAlXUkVHMzIoVEFfQ05UTF9BVVgsIERJU0FCTEVfQ1VCRV9BTklTTyk7CiAKLQlXUkVHMzIoU1hfRVhQT1JUX0JVRkZFUl9TSVpFUywgKENPTE9SX0JVRkZFUl9TSVpFKChyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X21heF9leHBvcnRfc2l6ZSAvIDQpIC0gMSkgfAotCQkJCQlQT1NJVElPTl9CVUZGRVJfU0laRSgocmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zeF9tYXhfZXhwb3J0X3Bvc19zaXplIC8gNCkgLSAxKSB8Ci0JCQkJCVNNWF9CVUZGRVJfU0laRSgocmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zeF9tYXhfZXhwb3J0X3NteF9zaXplIC8gNCkgLSAxKSkpOworCVdSRUczMihTWF9FWFBPUlRfQlVGRkVSX1NJWkVTLCAoQ09MT1JfQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5jYXltYW4uc3hfbWF4X2V4cG9ydF9zaXplIC8gNCkgLSAxKSB8CisJCQkJCVBPU0lUSU9OX0JVRkZFUl9TSVpFKChyZGV2LT5jb25maWcuY2F5bWFuLnN4X21heF9leHBvcnRfcG9zX3NpemUgLyA0KSAtIDEpIHwKKwkJCQkJU01YX0JVRkZFUl9TSVpFKChyZGV2LT5jb25maWcuY2F5bWFuLnN4X21heF9leHBvcnRfc214X3NpemUgLyA0KSAtIDEpKSk7CiAKLQlXUkVHMzIoUEFfU0NfRklGT19TSVpFLCAoU0NfUFJJTV9GSUZPX1NJWkUocmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19wcmltX2ZpZm9fc2l6ZSkgfAotCQkJCSBTQ19ISVpfVElMRV9GSUZPX1NJWkUocmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19oaXpfdGlsZV9maWZvX3NpemUpIHwKLQkJCQkgU0NfRUFSTFlaX1RJTEVfRklGT19TSVpFKHJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc2NfZWFybHl6X3RpbGVfZmlmb19zaXplKSkpOworCVdSRUczMihQQV9TQ19GSUZPX1NJWkUsIChTQ19QUklNX0ZJRk9fU0laRShyZGV2LT5jb25maWcuY2F5bWFuLnNjX3ByaW1fZmlmb19zaXplKSB8CisJCQkJIFNDX0hJWl9USUxFX0ZJRk9fU0laRShyZGV2LT5jb25maWcuY2F5bWFuLnNjX2hpel90aWxlX2ZpZm9fc2l6ZSkgfAorCQkJCSBTQ19FQVJMWVpfVElMRV9GSUZPX1NJWkUocmRldi0+Y29uZmlnLmNheW1hbi5zY19lYXJseXpfdGlsZV9maWZvX3NpemUpKSk7CiAKIAogCVdSRUczMihWR1RfTlVNX0lOU1RBTkNFUywgMSk7CiAKIAlXUkVHMzIoQ1BfUEVSRk1PTl9DTlRMLCAwKTsKIAotCVdSRUczMihTUV9NU19GSUZPX1NJWkVTLCAoQ0FDSEVfRklGT19TSVpFKDE2ICogcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zcV9udW1fY2ZfaW5zdHMpIHwKKwlXUkVHMzIoU1FfTVNfRklGT19TSVpFUywgKENBQ0hFX0ZJRk9fU0laRSgxNiAqIHJkZXYtPmNvbmZpZy5jYXltYW4uc3FfbnVtX2NmX2luc3RzKSB8CiAJCQkJICBGRVRDSF9GSUZPX0hJV0FURVIoMHg0KSB8CiAJCQkJICBET05FX0ZJRk9fSElXQVRFUigweGUwKSB8CiAJCQkJICBBTFVfVVBEQVRFX0ZJRk9fSElXQVRFUigweDgpKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCmluZGV4IDg3MTM3MzEuLjU1YTdmMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCkBAIC00MzcsNyArNDM3LDcgQEAKIAlzdGF0dXMgPSBSUkVHMzIoUl8wMDBFNDBfUkJCTV9TVEFUVVMpOwogCWRldl9pbmZvKHJkZXYtPmRldiwgIiglczolZCkgUkJCTV9TVEFUVVM9MHglMDhYXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIHN0YXR1cyk7CiAJLyogcmVzZXR0aW5nIHRoZSBDUCBzZWVtcyB0byBiZSBwcm9ibGVtYXRpYyBzb21ldGltZXMgaXQgZW5kIHVwCi0JICogaGFyZCBsb2NraW5nIHRoZSBjb21wdXRlciwgYnV0IGl0J3MgbmVjZXNzYXJ5IGZvciBzdWNjZXNzZnVsbAorCSAqIGhhcmQgbG9ja2luZyB0aGUgY29tcHV0ZXIsIGJ1dCBpdCdzIG5lY2Vzc2FyeSBmb3Igc3VjY2Vzc2Z1bAogCSAqIHJlc2V0IG1vcmUgdGVzdCAmIHBsYXlpbmcgaXMgbmVlZGVkIG9uIFIzWFgvUjRYWCB0byBmaW5kIGEKIAkgKiByZWxpYWJsZSAoaWYgYW55IHNvbHV0aW9uKQogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX3JlZy5oCmluZGV4IGYwYmNlMzkuLjAwYzBkMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfcmVnLmgKQEAgLTYwOCw3ICs2MDgsNyBAQAogICogTXkgZ3Vlc3MgaXMgdGhhdCB0aGVyZSBhcmUgdHdvIGJpdHMgZm9yIGVhY2ggemJpYXMgcHJpbWl0aXZlCiAgKiAoRklMTCwgTElORSwgUE9JTlQpLgogICogIE9uZSB0byBlbmFibGUgZGVwdGggdGVzdCBhbmQgb25lIGZvciBkZXB0aCB3cml0ZS4KLSAqIFlldCB0aGlzIGRvZXNudCBleHBsYWluIHdoeSBkZXB0aCB3cml0ZXMgd29yayAuLi4KKyAqIFlldCB0aGlzIGRvZXNuJ3QgZXhwbGFpbiB3aHkgZGVwdGggd3JpdGVzIHdvcmsgLi4uCiAgKi8KICNkZWZpbmUgUjMwMF9SRV9PQ0NMVVNJT05fQ05UTAkJICAgIDB4NDJCNAogIwlkZWZpbmUgUjMwMF9PQ0NMVVNJT05fT04JCSgxPDwxKQpAQCAtODE3LDcgKzgxNyw3IEBACiAjCWRlZmluZSBSMzAwX1RYX01JTl9GSUxURVJfTElORUFSX01JUF9ORUFSRVNUICAgICAgICAoNiAgPDwgIDExKQogIwlkZWZpbmUgUjMwMF9UWF9NSU5fRklMVEVSX0xJTkVBUl9NSVBfTElORUFSICAgICAgICAgKDEwIDw8ICAxMSkKIAotLyogTk9URTogTkVBUkVTVCBkb2VzbnQgc2VlbSB0byBleGlzdC4KKy8qIE5PVEU6IE5FQVJFU1QgZG9lc24ndCBzZWVtIHRvIGV4aXN0LgogICogSW0gbm90IHNldGluZyBNQUdfRklMVEVSX01BU0sgYW5kICgzIDw8IDExKSBvbiBmb3IgYWxsCiAgKiBhbmlzb3Ryb3B5IG1vZGVzIGJlY2F1c2UgdGhhdCB3b3VsZCB2b2lkIHNlbGVjdGVkIG1hZyBmaWx0ZXIKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwppbmRleCBiZTI3MWM0Li42ZjI3NTkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwpAQCAtNTg3LDcgKzU4Nyw3IEBACiAKIAlpZiAoKHZvbHRhZ2UtPnR5cGUgPT0gVk9MVEFHRV9TVykgJiYgdm9sdGFnZS0+dm9sdGFnZSkgewogCQlpZiAodm9sdGFnZS0+dm9sdGFnZSAhPSByZGV2LT5wbS5jdXJyZW50X3ZkZGMpIHsKLQkJCXJhZGVvbl9hdG9tX3NldF92b2x0YWdlKHJkZXYsIHZvbHRhZ2UtPnZvbHRhZ2UpOworCQkJcmFkZW9uX2F0b21fc2V0X3ZvbHRhZ2UocmRldiwgdm9sdGFnZS0+dm9sdGFnZSwgU0VUX1ZPTFRBR0VfVFlQRV9BU0lDX1ZEREMpOwogCQkJcmRldi0+cG0uY3VycmVudF92ZGRjID0gdm9sdGFnZS0+dm9sdGFnZTsKIAkJCURSTV9ERUJVR19EUklWRVIoIlNldHRpbmc6IHY6ICVkXG4iLCB2b2x0YWdlLT52b2x0YWdlKTsKIAkJfQpAQCAtMjUwOSw5ICsyNTA5LDYgQEAKIHsKIAlpbnQgcjsKIAotCXIgPSByYWRlb25fZHVtbXlfcGFnZV9pbml0KHJkZXYpOwotCWlmIChyKQotCQlyZXR1cm4gcjsKIAlpZiAocjYwMF9kZWJ1Z2ZzX21jX2luZm9faW5pdChyZGV2KSkgewogCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIG1jICFcbiIpOwogCX0KQEAgLTI2MjUsNyArMjYyMiw2IEBACiAJcmFkZW9uX2F0b21iaW9zX2ZpbmkocmRldik7CiAJa2ZyZWUocmRldi0+Ymlvcyk7CiAJcmRldi0+YmlvcyA9IE5VTEw7Ci0JcmFkZW9uX2R1bW15X3BhZ2VfZmluaShyZGV2KTsKIH0KIAogCkBAIC0zMjM1LDcgKzMyMzEsNyBAQAogCXUzMiB3cHRyLCB0bXA7CiAKIAlpZiAocmRldi0+d2IuZW5hYmxlZCkKLQkJd3B0ciA9IHJkZXYtPndiLndiW1I2MDBfV0JfSUhfV1BUUl9PRkZTRVQvNF07CisJCXdwdHIgPSBsZTMyX3RvX2NwdShyZGV2LT53Yi53YltSNjAwX1dCX0lIX1dQVFJfT0ZGU0VULzRdKTsKIAllbHNlCiAJCXdwdHIgPSBSUkVHMzIoSUhfUkJfV1BUUik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMKaW5kZXggMzMyNDYyMC4uZmQxOGJlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMKQEAgLTkyMSw3ICs5MjEsNyBAQAogCQlyZXR1cm4gMDsKIAlpYiA9IHAtPmliLT5wdHI7CiAJc3dpdGNoIChyZWcpIHsKLQkvKiBmb3JjZSBmb2xsb3dpbmcgcmVnIHRvIDAgaW4gYW4gYXR0ZW1wIHRvIGRpc2FibGUgb3V0IGJ1ZmZlcgorCS8qIGZvcmNlIGZvbGxvd2luZyByZWcgdG8gMCBpbiBhbiBhdHRlbXB0IHRvIGRpc2FibGUgb3V0IGJ1ZmZlcgogCSAqIHdoaWNoIHdpbGwgbmVlZCB1cyB0byBiZXR0ZXIgdW5kZXJzdGFuZCBob3cgaXQgd29ya3MgdG8gcGVyZm9ybQogCSAqIHNlY3VyaXR5IGNoZWNrIG9uIGl0IChKZXJvbWUpCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2hkbWkuYwppbmRleCA1MGRiNmQ2Li5mNWFjN2U3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfaGRtaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9oZG1pLmMKQEAgLTMzNCw3ICszMzQsNyBAQAogCXI2MDBfaGRtaV92aWRlb2luZm9mcmFtZShlbmNvZGVyLCBSR0IsIDAsIDAsIDAsIDAsCiAJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApOwogCi0JLyogaXQncyB1bmtub3duIHdoYXQgdGhlc2UgYml0cyBkbyBleGNhdGx5LCBidXQgaXQncyBpbmRlZWQgcXVpdGUgdXNlZnVsbCBmb3IgZGVidWdnaW5nICovCisJLyogaXQncyB1bmtub3duIHdoYXQgdGhlc2UgYml0cyBkbyBleGNhdGx5LCBidXQgaXQncyBpbmRlZWQgcXVpdGUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgKi8KIAlXUkVHMzIob2Zmc2V0K1I2MDBfSERNSV9BVURJT19ERUJVR18wLCAweDAwRkZGRkZGKTsKIAlXUkVHMzIob2Zmc2V0K1I2MDBfSERNSV9BVURJT19ERUJVR18xLCAweDAwN0ZGRkZGKTsKIAlXUkVHMzIob2Zmc2V0K1I2MDBfSERNSV9BVURJT19ERUJVR18yLCAweDAwMDAwMDAxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCmluZGV4IGNmZTNhZjEuLmJhNjQzYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaApAQCAtMTc3LDcgKzE3Nyw3IEBACiB2b2lkIHJhZGVvbl9wbV9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByYWRlb25fY29tYmlvc19nZXRfcG93ZXJfbW9kZXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByYWRlb25fYXRvbWJpb3NfZ2V0X3Bvd2VyX21vZGVzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcmFkZW9uX2F0b21fc2V0X3ZvbHRhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHUxNiBsZXZlbCk7Cit2b2lkIHJhZGVvbl9hdG9tX3NldF92b2x0YWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1MTYgdm9sdGFnZV9sZXZlbCwgdTggdm9sdGFnZV90eXBlKTsKIHZvaWQgcnM2OTBfcG1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gaW50IHJ2Nnh4X2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiBpbnQgcnY3NzBfZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwpAQCAtNjc5LDExICs2NzksMTEgQEAKICAqIEBzaWRlcG9ydF9iYW5kd2lkdGg6IHNpZGVwb3J0IGJhbmR3aWR0aCB0aGUgZ3B1IGhhcyAoTUJ5dGUvcykgKElHUCkKICAqIEBodF9iYW5kd2lkdGg6ICAgICAgIGh0IGJhbmR3aWR0aCB0aGUgZ3B1IGhhcyAoTUJ5dGUvcykgKElHUCkKICAqIEBjb3JlX2JhbmR3aWR0aDogICAgIGNvcmUgR1BVIGJhbmR3aWR0aCB0aGUgZ3B1IGhhcyAoTUJ5dGUvcykgKElHUCkKLSAqIEBzY2xrOiAgICAgICAgICAJR1BVIGNsb2NrIE1oeiAoY29yZSBiYW5kd2l0aCBkZXBlbmRzIG9mIHRoaXMgY2xvY2spCisgKiBAc2NsazogICAgICAgICAgCUdQVSBjbG9jayBNaHogKGNvcmUgYmFuZHdpZHRoIGRlcGVuZHMgb2YgdGhpcyBjbG9jaykKICAqIEBuZWVkZWRfYmFuZHdpZHRoOiAgIGN1cnJlbnQgYmFuZHdpZHRoIG5lZWRzCiAgKgogICogSXQga2VlcHMgdHJhY2sgb2YgdmFyaW91cyBkYXRhIG5lZWRlZCB0byB0YWtlIHBvd2VybWFuYWdlbWVudCBkZWNpc2lvbi4KLSAqIEJhbmR3aXRoIG5lZWQgaXMgdXNlZCB0byBkZXRlcm1pbmUgbWluaW11biBjbG9jayBvZiB0aGUgR1BVIGFuZCBtZW1vcnkuCisgKiBCYW5kd2lkdGggbmVlZCBpcyB1c2VkIHRvIGRldGVybWluZSBtaW5pbXVuIGNsb2NrIG9mIHRoZSBHUFUgYW5kIG1lbW9yeS4KICAqIEVxdWF0aW9uIGJldHdlZW4gZ3B1L21lbW9yeSBjbG9jayBhbmQgYXZhaWxhYmxlIGJhbmR3aWR0aCBpcyBodyBkZXBlbmRlbnQKICAqICh0eXBlIG9mIG1lbW9yeSwgYnVzIHNpemUsIGVmZmljaWVuY3ksIC4uLikKICAqLwpAQCAtNzY3LDcgKzc2Nyw5IEBACiAJdTggdmRkY2lfaWQ7IC8qIGluZGV4IGludG8gdmRkY2kgdm9sdGFnZSB0YWJsZSAqLwogCWJvb2wgdmRkY2lfZW5hYmxlZDsKIAkvKiByNnh4KyBzdyAqLwotCXUzMiB2b2x0YWdlOworCXUxNiB2b2x0YWdlOworCS8qIGV2ZXJncmVlbisgdmRkY2kgKi8KKwl1MTYgdmRkY2k7CiB9OwogCiAvKiBjbG9jayBtb2RlIGZsYWdzICovCkBAIC04MzUsMTAgKzgzNywxMiBAQAogCWludCAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfcG93ZXJfc3RhdGVfaW5kZXg7CiAJdTMyICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9zY2xrOwogCXUzMiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfbWNsazsKLQl1MzIgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3ZkZGM7CisJdTE2ICAgICAgICAgICAgICAgICAgICAgY3VycmVudF92ZGRjOworCXUxNiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdmRkY2k7CiAJdTMyICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9zY2xrOwogCXUzMiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfbWNsazsKLQl1MzIgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3ZkZGM7CisJdTE2ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF92ZGRjOworCXUxNiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfdmRkY2k7CiAJc3RydWN0IHJhZGVvbl9pMmNfY2hhbiAqaTJjX2J1czsKIAkvKiBzZWxlY3RlZCBwbSBtZXRob2QgKi8KIAllbnVtIHJhZGVvbl9wbV9tZXRob2QgICAgIHBtX21ldGhvZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYwppbmRleCBlYjg4OGVlLi5jYTU3NjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5jCkBAIC05NCw3ICs5NCw3IEBACiAJCXJkZXYtPm1jX3JyZWcgPSAmcnM2MDBfbWNfcnJlZzsKIAkJcmRldi0+bWNfd3JlZyA9ICZyczYwMF9tY193cmVnOwogCX0KLQlpZiAoKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApICYmIChyZGV2LT5mYW1pbHkgPD0gQ0hJUF9IRU1MT0NLKSkgeworCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKSB7CiAJCXJkZXYtPnBjaWVwX3JyZWcgPSAmcjYwMF9wY2llcF9ycmVnOwogCQlyZGV2LT5wY2llcF93cmVnID0gJnI2MDBfcGNpZXBfd3JlZzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYwppbmRleCA5OTc2OGQ5Li45MGRmYjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKQEAgLTQzMSw3ICs0MzEsNyBAQAogCQl9CiAJfQogCi0JLyogQWNlciBsYXB0b3AgKEFjZXIgVHJhdmVsTWF0ZSA1NzMwRykgaGFzIGFuIEhETUkgcG9ydAorCS8qIEFjZXIgbGFwdG9wIChBY2VyIFRyYXZlbE1hdGUgNTczMC81NzMwRykgaGFzIGFuIEhETUkgcG9ydAogCSAqIG9uIHRoZSBsYXB0b3AgYW5kIGEgRFZJIHBvcnQgb24gdGhlIGRvY2tpbmcgc3RhdGlvbiBhbmQKIAkgKiBib3RoIHNoYXJlIHRoZSBzYW1lIGVuY29kZXIsIGhwZCBwaW4sIGFuZCBkZGMgbGluZS4KIAkgKiBTbyB3aGlsZSB0aGUgYmlvcyB0YWJsZSBpcyB0ZWNobmljYWxseSBjb3JyZWN0LApAQCAtNDQwLDcgKzQ0MCw3IEBACiAJICogd2l0aCBkaWZmZXJlbnQgY3J0Y3Mgd2hpY2ggaXNuJ3QgcG9zc2libGUgb24gdGhlIGhhcmR3YXJlCiAJICogc2lkZSBhbmQgbGVhdmVzIG5vIGNydGNzIGZvciBMVkRTIG9yIFZHQS4KIAkgKi8KLQlpZiAoKGRldi0+cGRldi0+ZGV2aWNlID09IDB4OTVjNCkgJiYKKwlpZiAoKChkZXYtPnBkZXYtPmRldmljZSA9PSAweDk1YzQpIHx8IChkZXYtPnBkZXYtPmRldmljZSA9PSAweDk1OTEpKSAmJgogCSAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IDB4MTAyNSkgJiYKIAkgICAgKGRldi0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDAxM2MpKSB7CiAJCWlmICgoKmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJKSAmJgpAQCAtMTU3NCw5ICsxNTc0LDE3IEBACiAJCQlBVE9NX0ZBS0VfRURJRF9QQVRDSF9SRUNPUkQgKmZha2VfZWRpZF9yZWNvcmQ7CiAJCQlBVE9NX1BBTkVMX1JFU09MVVRJT05fUEFUQ0hfUkVDT1JEICpwYW5lbF9yZXNfcmVjb3JkOwogCQkJYm9vbCBiYWRfcmVjb3JkID0gZmFsc2U7Ci0JCQl1OCAqcmVjb3JkID0gKHU4ICopKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsKLQkJCQkJICAgIGRhdGFfb2Zmc2V0ICsKLQkJCQkJICAgIGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby51c01vZGVQYXRjaFRhYmxlT2Zmc2V0KSk7CisJCQl1OCAqcmVjb3JkOworCisJCQlpZiAoKGZyZXYgPT0gMSkgJiYgKGNyZXYgPCAyKSkKKwkJCQkvKiBhYnNvbHV0ZSAqLworCQkJCXJlY29yZCA9ICh1OCAqKShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArCisJCQkJCQlsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8udXNNb2RlUGF0Y2hUYWJsZU9mZnNldCkpOworCQkJZWxzZQorCQkJCS8qIHJlbGF0aXZlICovCisJCQkJcmVjb3JkID0gKHU4ICopKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsKKwkJCQkJCWRhdGFfb2Zmc2V0ICsKKwkJCQkJCWxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby51c01vZGVQYXRjaFRhYmxlT2Zmc2V0KSk7CiAJCQl3aGlsZSAoKnJlY29yZCAhPSBBVE9NX1JFQ09SRF9FTkRfVFlQRSkgewogCQkJCXN3aXRjaCAoKnJlY29yZCkgewogCQkJCWNhc2UgTENEX01PREVfUEFUQ0hfUkVDT1JEX01PREVfVFlQRToKQEAgLTE1OTksOSArMTYwNywxMCBAQAogCQkJCQkJCW1lbWNweSgodTggKillZGlkLCAodTggKikmZmFrZV9lZGlkX3JlY29yZC0+dWNGYWtlRURJRFN0cmluZ1swXSwKIAkJCQkJCQkgICAgICAgZmFrZV9lZGlkX3JlY29yZC0+dWNGYWtlRURJRExlbmd0aCk7CiAKLQkJCQkJCQlpZiAoZHJtX2VkaWRfaXNfdmFsaWQoZWRpZCkpCisJCQkJCQkJaWYgKGRybV9lZGlkX2lzX3ZhbGlkKGVkaWQpKSB7CiAJCQkJCQkJCXJkZXYtPm1vZGVfaW5mby5iaW9zX2hhcmRjb2RlZF9lZGlkID0gZWRpZDsKLQkJCQkJCQllbHNlCisJCQkJCQkJCXJkZXYtPm1vZGVfaW5mby5iaW9zX2hhcmRjb2RlZF9lZGlkX3NpemUgPSBlZGlkX3NpemU7CisJCQkJCQkJfSBlbHNlCiAJCQkJCQkJCWtmcmVlKGVkaWQpOwogCQkJCQkJfQogCQkJCQl9CkBAIC0yMTc2LDI0ICsyMTg1LDI3IEBACiAJfQogfQogCi1zdGF0aWMgdTE2IHJhZGVvbl9hdG9tYmlvc19nZXRfZGVmYXVsdF92ZGRjKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQorc3RhdGljIHZvaWQgcmFkZW9uX2F0b21iaW9zX2dldF9kZWZhdWx0X3ZvbHRhZ2VzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAorCQkJCQkJIHUxNiAqdmRkYywgdTE2ICp2ZGRjaSkKIHsKIAlzdHJ1Y3QgcmFkZW9uX21vZGVfaW5mbyAqbW9kZV9pbmZvID0gJnJkZXYtPm1vZGVfaW5mbzsKIAlpbnQgaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShEQVRBLCBGaXJtd2FyZUluZm8pOwogCXU4IGZyZXYsIGNyZXY7CiAJdTE2IGRhdGFfb2Zmc2V0OwogCXVuaW9uIGZpcm13YXJlX2luZm8gKmZpcm13YXJlX2luZm87Ci0JdTE2IHZkZGMgPSAwOworCisJKnZkZGMgPSAwOworCSp2ZGRjaSA9IDA7CiAKIAlpZiAoYXRvbV9wYXJzZV9kYXRhX2hlYWRlcihtb2RlX2luZm8tPmF0b21fY29udGV4dCwgaW5kZXgsIE5VTEwsCiAJCQkJICAgJmZyZXYsICZjcmV2LCAmZGF0YV9vZmZzZXQpKSB7CiAJCWZpcm13YXJlX2luZm8gPQogCQkJKHVuaW9uIGZpcm13YXJlX2luZm8gKikobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKwogCQkJCQkJZGF0YV9vZmZzZXQpOwotCQl2ZGRjID0gbGUxNl90b19jcHUoZmlybXdhcmVfaW5mby0+aW5mb18xNC51c0Jvb3RVcFZERENWb2x0YWdlKTsKKwkJKnZkZGMgPSBsZTE2X3RvX2NwdShmaXJtd2FyZV9pbmZvLT5pbmZvXzE0LnVzQm9vdFVwVkREQ1ZvbHRhZ2UpOworCQlpZiAoKGZyZXYgPT0gMikgJiYgKGNyZXYgPj0gMikpCisJCQkqdmRkY2kgPSBsZTE2X3RvX2NwdShmaXJtd2FyZV9pbmZvLT5pbmZvXzIyLnVzQm9vdFVwVkREQ0lWb2x0YWdlKTsKIAl9Ci0KLQlyZXR1cm4gdmRkYzsKIH0KIAogc3RhdGljIHZvaWQgcmFkZW9uX2F0b21iaW9zX3BhcnNlX3BwbGliX25vbl9jbG9ja19pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LApAQCAtMjIwMyw3ICsyMjE1LDkgQEAKIAlpbnQgajsKIAl1MzIgbWlzYyA9IGxlMzJfdG9fY3B1KG5vbl9jbG9ja19pbmZvLT51bENhcHNBbmRTZXR0aW5ncyk7CiAJdTMyIG1pc2MyID0gbGUxNl90b19jcHUobm9uX2Nsb2NrX2luZm8tPnVzQ2xhc3NpZmljYXRpb24pOwotCXUxNiB2ZGRjID0gcmFkZW9uX2F0b21iaW9zX2dldF9kZWZhdWx0X3ZkZGMocmRldik7CisJdTE2IHZkZGMsIHZkZGNpOworCisJcmFkZW9uX2F0b21iaW9zX2dldF9kZWZhdWx0X3ZvbHRhZ2VzKHJkZXYsICZ2ZGRjLCAmdmRkY2kpOwogCiAJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm1pc2MgPSBtaXNjOwogCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5taXNjMiA9IG1pc2MyOwpAQCAtMjI0NCw2ICsyMjU4LDcgQEAKIAkJCXJkZXYtPnBtLmRlZmF1bHRfc2NsayA9IHJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnNjbGs7CiAJCQlyZGV2LT5wbS5kZWZhdWx0X21jbGsgPSByZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5tY2xrOwogCQkJcmRldi0+cG0uZGVmYXVsdF92ZGRjID0gcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS52b2x0YWdlOworCQkJcmRldi0+cG0uZGVmYXVsdF92ZGRjaSA9IHJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudmRkY2k7CiAJCX0gZWxzZSB7CiAJCQkvKiBwYXRjaCB0aGUgdGFibGUgdmFsdWVzIHdpdGggdGhlIGRlZmF1bHQgc2xjay9tY2xrIGZyb20gZmlybXdhcmUgaW5mbyAqLwogCQkJZm9yIChqID0gMDsgaiA8IG1vZGVfaW5kZXg7IGorKykgewpAQCAtMjI4Niw2ICsyMzAxLDggQEAKIAkJCVZPTFRBR0VfU1c7CiAJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLnZvbHRhZ2Uudm9sdGFnZSA9CiAJCQlsZTE2X3RvX2NwdShjbG9ja19pbmZvLT5ldmVyZ3JlZW4udXNWRERDKTsKKwkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleF0udm9sdGFnZS52ZGRjaSA9CisJCQlsZTE2X3RvX2NwdShjbG9ja19pbmZvLT5ldmVyZ3JlZW4udXNWRERDSSk7CiAJfSBlbHNlIHsKIAkJc2NsayA9IGxlMTZfdG9fY3B1KGNsb2NrX2luZm8tPnI2MDAudXNFbmdpbmVDbG9ja0xvdyk7CiAJCXNjbGsgfD0gY2xvY2tfaW5mby0+cjYwMC51Y0VuZ2luZUNsb2NrSGlnaCA8PCAxNjsKQEAgLTI1NzcsMjUgKzI1OTQsMjUgQEAKIAlzdHJ1Y3QgX1NFVF9WT0xUQUdFX1BBUkFNRVRFUlNfVjIgdjI7CiB9OwogCi12b2lkIHJhZGVvbl9hdG9tX3NldF92b2x0YWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1MTYgbGV2ZWwpCit2b2lkIHJhZGVvbl9hdG9tX3NldF92b2x0YWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1MTYgdm9sdGFnZV9sZXZlbCwgdTggdm9sdGFnZV90eXBlKQogewogCXVuaW9uIHNldF92b2x0YWdlIGFyZ3M7CiAJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgU2V0Vm9sdGFnZSk7Ci0JdTggZnJldiwgY3Jldiwgdm9sdF9pbmRleCA9IGxldmVsOworCXU4IGZyZXYsIGNyZXYsIHZvbHRfaW5kZXggPSB2b2x0YWdlX2xldmVsOwogCiAJaWYgKCFhdG9tX3BhcnNlX2NtZF9oZWFkZXIocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICZmcmV2LCAmY3JldikpCiAJCXJldHVybjsKIAogCXN3aXRjaCAoY3JldikgewogCWNhc2UgMToKLQkJYXJncy52MS51Y1ZvbHRhZ2VUeXBlID0gU0VUX1ZPTFRBR0VfVFlQRV9BU0lDX1ZEREM7CisJCWFyZ3MudjEudWNWb2x0YWdlVHlwZSA9IHZvbHRhZ2VfdHlwZTsKIAkJYXJncy52MS51Y1ZvbHRhZ2VNb2RlID0gU0VUX0FTSUNfVk9MVEFHRV9NT0RFX0FMTF9TT1VSQ0U7CiAJCWFyZ3MudjEudWNWb2x0YWdlSW5kZXggPSB2b2x0X2luZGV4OwogCQlicmVhazsKIAljYXNlIDI6Ci0JCWFyZ3MudjIudWNWb2x0YWdlVHlwZSA9IFNFVF9WT0xUQUdFX1RZUEVfQVNJQ19WRERDOworCQlhcmdzLnYyLnVjVm9sdGFnZVR5cGUgPSB2b2x0YWdlX3R5cGU7CiAJCWFyZ3MudjIudWNWb2x0YWdlTW9kZSA9IFNFVF9BU0lDX1ZPTFRBR0VfTU9ERV9TRVRfVk9MVEFHRTsKLQkJYXJncy52Mi51c1ZvbHRhZ2VMZXZlbCA9IGNwdV90b19sZTE2KGxldmVsKTsKKwkJYXJncy52Mi51c1ZvbHRhZ2VMZXZlbCA9IGNwdV90b19sZTE2KHZvbHRhZ2VfbGV2ZWwpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUk1fRVJST1IoIlVua25vd24gdGFibGUgdmVyc2lvbiAlZCwgJWRcbiIsIGZyZXYsIGNyZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRweF9oYW5kbGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdHB4X2hhbmRsZXIuYwppbmRleCBlZDVkZmU1Li45ZDk1NzkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdHB4X2hhbmRsZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdHB4X2hhbmRsZXIuYwpAQCAtMTUsNiArMTUsOSBAQAogI2RlZmluZSBBVFBYX1ZFUlNJT04gMAogI2RlZmluZSBBVFBYX0dQVV9QV1IgMgogI2RlZmluZSBBVFBYX01VWF9TRUxFQ1QgMworI2RlZmluZSBBVFBYX0kyQ19NVVhfU0VMRUNUIDQKKyNkZWZpbmUgQVRQWF9TV0lUQ0hfU1RBUlQgNQorI2RlZmluZSBBVFBYX1NXSVRDSF9FTkQgNgogCiAjZGVmaW5lIEFUUFhfSU5URUdSQVRFRCAwCiAjZGVmaW5lIEFUUFhfRElTQ1JFVEUgMQpAQCAtMTQ5LDEzICsxNTIsMzUgQEAKIAlyZXR1cm4gcmFkZW9uX2F0cHhfZXhlY3V0ZShoYW5kbGUsIEFUUFhfTVVYX1NFTEVDVCwgbXV4X2lkKTsKIH0KIAorc3RhdGljIGludCByYWRlb25fYXRweF9zd2l0Y2hfaTJjX211eChhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBtdXhfaWQpCit7CisJcmV0dXJuIHJhZGVvbl9hdHB4X2V4ZWN1dGUoaGFuZGxlLCBBVFBYX0kyQ19NVVhfU0VMRUNULCBtdXhfaWQpOworfQorCitzdGF0aWMgaW50IHJhZGVvbl9hdHB4X3N3aXRjaF9zdGFydChhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBncHVfaWQpCit7CisJcmV0dXJuIHJhZGVvbl9hdHB4X2V4ZWN1dGUoaGFuZGxlLCBBVFBYX1NXSVRDSF9TVEFSVCwgZ3B1X2lkKTsKK30KKworc3RhdGljIGludCByYWRlb25fYXRweF9zd2l0Y2hfZW5kKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IGdwdV9pZCkKK3sKKwlyZXR1cm4gcmFkZW9uX2F0cHhfZXhlY3V0ZShoYW5kbGUsIEFUUFhfU1dJVENIX0VORCwgZ3B1X2lkKTsKK30KIAogc3RhdGljIGludCByYWRlb25fYXRweF9zd2l0Y2h0byhlbnVtIHZnYV9zd2l0Y2hlcm9vX2NsaWVudF9pZCBpZCkKIHsKKwlpbnQgZ3B1X2lkOworCiAJaWYgKGlkID09IFZHQV9TV0lUQ0hFUk9PX0lHRCkKLQkJcmFkZW9uX2F0cHhfc3dpdGNoX211eChyYWRlb25fYXRweF9wcml2LmF0cHhfaGFuZGxlLCAwKTsKKwkJZ3B1X2lkID0gQVRQWF9JTlRFR1JBVEVEOwogCWVsc2UKLQkJcmFkZW9uX2F0cHhfc3dpdGNoX211eChyYWRlb25fYXRweF9wcml2LmF0cHhfaGFuZGxlLCAxKTsKKwkJZ3B1X2lkID0gQVRQWF9ESVNDUkVURTsKKworCXJhZGVvbl9hdHB4X3N3aXRjaF9zdGFydChyYWRlb25fYXRweF9wcml2LmF0cHhfaGFuZGxlLCBncHVfaWQpOworCXJhZGVvbl9hdHB4X3N3aXRjaF9tdXgocmFkZW9uX2F0cHhfcHJpdi5hdHB4X2hhbmRsZSwgZ3B1X2lkKTsKKwlyYWRlb25fYXRweF9zd2l0Y2hfaTJjX211eChyYWRlb25fYXRweF9wcml2LmF0cHhfaGFuZGxlLCBncHVfaWQpOworCXJhZGVvbl9hdHB4X3N3aXRjaF9lbmQocmFkZW9uX2F0cHhfcHJpdi5hdHB4X2hhbmRsZSwgZ3B1X2lkKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKaW5kZXggMmVmNmQ1MS4uNWY0NWZhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYwpAQCAtMTE5OSw3ICsxMTk5LDcgQEAKIAlpZiAocm91dGVyLT5kZGNfdmFsaWQgfHwgcm91dGVyLT5jZF92YWxpZCkgewogCQlyYWRlb25fY29ubmVjdG9yLT5yb3V0ZXJfYnVzID0gcmFkZW9uX2kyY19sb29rdXAocmRldiwgJnJvdXRlci0+aTJjX2luZm8pOwogCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPnJvdXRlcl9idXMpCi0JCQlnb3RvIGZhaWxlZDsKKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFzc2lnbiByb3V0ZXIgaTJjIGJ1cyEgQ2hlY2sgZG1lc2cgZm9yIGkyYyBlcnJvcnMuXG4iKTsKIAl9CiAJc3dpdGNoIChjb25uZWN0b3JfdHlwZSkgewogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX1ZHQToKQEAgLTEyMDgsNyArMTIwOCw3IEBACiAJCWlmIChpMmNfYnVzLT52YWxpZCkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfbG9va3VwKHJkZXYsIGkyY19idXMpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQotCQkJCWdvdG8gZmFpbGVkOworCQkJCURSTV9FUlJPUigiVkdBOiBGYWlsZWQgdG8gYXNzaWduIGRkYyBidXMhIENoZWNrIGRtZXNnIGZvciBpMmMgZXJyb3JzLlxuIik7CiAJCX0KIAkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0ID0gdHJ1ZTsKIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCkBAIC0xMjI2LDcgKzEyMjYsNyBAQAogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2xvb2t1cChyZGV2LCBpMmNfYnVzKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKLQkJCQlnb3RvIGZhaWxlZDsKKwkJCQlEUk1fRVJST1IoIkRWSUE6IEZhaWxlZCB0byBhc3NpZ24gZGRjIGJ1cyEgQ2hlY2sgZG1lc2cgZm9yIGkyYyBlcnJvcnMuXG4iKTsKIAkJfQogCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOwogCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKQEAgLTEyNDksNyArMTI0OSw3IEBACiAJCWlmIChpMmNfYnVzLT52YWxpZCkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfbG9va3VwKHJkZXYsIGkyY19idXMpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQotCQkJCWdvdG8gZmFpbGVkOworCQkJCURSTV9FUlJPUigiRFZJOiBGYWlsZWQgdG8gYXNzaWduIGRkYyBidXMhIENoZWNrIGRtZXNnIGZvciBpMmMgZXJyb3JzLlxuIik7CiAJCX0KIAkJc3VicGl4ZWxfb3JkZXIgPSBTdWJQaXhlbEhvcml6b250YWxSR0I7CiAJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLApAQCAtMTI5MCw3ICsxMjkwLDcgQEAKIAkJaWYgKGkyY19idXMtPnZhbGlkKSB7CiAJCQlyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzID0gcmFkZW9uX2kyY19sb29rdXAocmRldiwgaTJjX2J1cyk7CiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCi0JCQkJZ290byBmYWlsZWQ7CisJCQkJRFJNX0VSUk9SKCJIRE1JOiBGYWlsZWQgdG8gYXNzaWduIGRkYyBidXMhIENoZWNrIGRtZXNnIGZvciBpMmMgZXJyb3JzLlxuIik7CiAJCX0KIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5jb2hlcmVudF9tb2RlX3Byb3BlcnR5LApAQCAtMTMyOSwxMCArMTMyOSwxMCBAQAogCQkJZWxzZQogCQkJCXJhZGVvbl9kaWdfY29ubmVjdG9yLT5kcF9pMmNfYnVzID0gcmFkZW9uX2kyY19jcmVhdGVfZHAoZGV2LCBpMmNfYnVzLCAiRFAtYXV4Y2giKTsKIAkJCWlmICghcmFkZW9uX2RpZ19jb25uZWN0b3ItPmRwX2kyY19idXMpCi0JCQkJZ290byBmYWlsZWQ7CisJCQkJRFJNX0VSUk9SKCJEUDogRmFpbGVkIHRvIGFzc2lnbiBkcCBkZGMgYnVzISBDaGVjayBkbWVzZyBmb3IgaTJjIGVycm9ycy5cbiIpOwogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfbG9va3VwKHJkZXYsIGkyY19idXMpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQotCQkJCWdvdG8gZmFpbGVkOworCQkJCURSTV9FUlJPUigiRFA6IEZhaWxlZCB0byBhc3NpZ24gZGRjIGJ1cyEgQ2hlY2sgZG1lc2cgZm9yIGkyYyBlcnJvcnMuXG4iKTsKIAkJfQogCQlzdWJwaXhlbF9vcmRlciA9IFN1YlBpeGVsSG9yaXpvbnRhbFJHQjsKIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCkBAIC0xMzgxLDcgKzEzODEsNyBAQAogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2xvb2t1cChyZGV2LCBpMmNfYnVzKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKLQkJCQlnb3RvIGZhaWxlZDsKKwkJCQlEUk1fRVJST1IoIkxWRFM6IEZhaWxlZCB0byBhc3NpZ24gZGRjIGJ1cyEgQ2hlY2sgZG1lc2cgZm9yIGkyYyBlcnJvcnMuXG4iKTsKIAkJfQogCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKIAkJCQkJICAgICAgZGV2LT5tb2RlX2NvbmZpZy5zY2FsaW5nX21vZGVfcHJvcGVydHksCkBAIC0xNDU3LDcgKzE0NTcsNyBAQAogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2xvb2t1cChyZGV2LCBpMmNfYnVzKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKLQkJCQlnb3RvIGZhaWxlZDsKKwkJCQlEUk1fRVJST1IoIlZHQTogRmFpbGVkIHRvIGFzc2lnbiBkZGMgYnVzISBDaGVjayBkbWVzZyBmb3IgaTJjIGVycm9ycy5cbiIpOwogCQl9CiAJCXJhZGVvbl9jb25uZWN0b3ItPmRhY19sb2FkX2RldGVjdCA9IHRydWU7CiAJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLApAQCAtMTQ3NSw3ICsxNDc1LDcgQEAKIAkJaWYgKGkyY19idXMtPnZhbGlkKSB7CiAJCQlyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzID0gcmFkZW9uX2kyY19sb29rdXAocmRldiwgaTJjX2J1cyk7CiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCi0JCQkJZ290byBmYWlsZWQ7CisJCQkJRFJNX0VSUk9SKCJEVklBOiBGYWlsZWQgdG8gYXNzaWduIGRkYyBidXMhIENoZWNrIGRtZXNnIGZvciBpMmMgZXJyb3JzLlxuIik7CiAJCX0KIAkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0ID0gdHJ1ZTsKIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCkBAIC0xNDkzLDcgKzE0OTMsNyBAQAogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2xvb2t1cChyZGV2LCBpMmNfYnVzKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKLQkJCQlnb3RvIGZhaWxlZDsKKwkJCQlEUk1fRVJST1IoIkRWSTogRmFpbGVkIHRvIGFzc2lnbiBkZGMgYnVzISBDaGVjayBkbWVzZyBmb3IgaTJjIGVycm9ycy5cbiIpOwogCQl9CiAJCWlmIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0ID0gdHJ1ZTsKQEAgLTE1MzgsNyArMTUzOCw3IEBACiAJCWlmIChpMmNfYnVzLT52YWxpZCkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfbG9va3VwKHJkZXYsIGkyY19idXMpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQotCQkJCWdvdG8gZmFpbGVkOworCQkJCURSTV9FUlJPUigiTFZEUzogRmFpbGVkIHRvIGFzc2lnbiBkZGMgYnVzISBDaGVjayBkbWVzZyBmb3IgaTJjIGVycm9ycy5cbiIpOwogCQl9CiAJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAogCQkJCQkgICAgICBkZXYtPm1vZGVfY29uZmlnLnNjYWxpbmdfbW9kZV9wcm9wZXJ0eSwKQEAgLTE1NjcsOSArMTU2Nyw0IEBACiAJCQkJcmFkZW9uX2xlZ2FjeV9iYWNrbGlnaHRfaW5pdChyYWRlb25fZW5jb2RlciwgY29ubmVjdG9yKTsKIAkJfQogCX0KLQlyZXR1cm47Ci0KLWZhaWxlZDoKLQlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKLQlrZnJlZShjb25uZWN0b3IpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NwLmMKaW5kZXggM2Q1OTllMy4uNzU4Njc3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jCkBAIC0yNDQsNyArMjQ0LDcgQEAKIAl1MzIgYWdwX2Jhc2VfbG8gPSBhZ3BfYmFzZSAmIDB4ZmZmZmZmZmY7CiAJdTMyIHI2eHhfYWdwX2Jhc2UgPSAoYWdwX2Jhc2UgPj4gMjIpICYgMHgzZmZmZjsKIAotCS8qIFI2eHgvUjd4eCBtdXN0IGJlIGFsaWduZWQgdG8gYSA0TUIgYm91bmRyeSAqLworCS8qIFI2eHgvUjd4eCBtdXN0IGJlIGFsaWduZWQgdG8gYSA0TUIgYm91bmRhcnkgKi8KIAlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SVjc3MCkKIAkJUkFERU9OX1dSSVRFKFI3MDBfTUNfVk1fQUdQX0JBU0UsIHI2eHhfYWdwX2Jhc2UpOwogCWVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2N1cnNvci5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3Vyc29yLmMKaW5kZXggMDE3YWM1NC4uMzE4OWE3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3Vyc29yLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3Vyc29yLmMKQEAgLTE2Nyw5ICsxNjcsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyYWRlb25fY3J0Yy0+Y3Vyc29yX3dpZHRoID0gd2lkdGg7Ci0JcmFkZW9uX2NydGMtPmN1cnNvcl9oZWlnaHQgPSBoZWlnaHQ7Ci0KIAlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoY3J0Yy0+ZGV2LCBmaWxlX3ByaXYsIGhhbmRsZSk7CiAJaWYgKCFvYmopIHsKIAkJRFJNX0VSUk9SKCJDYW5ub3QgZmluZCBjdXJzb3Igb2JqZWN0ICV4IGZvciBjcnRjICVkXG4iLCBoYW5kbGUsIHJhZGVvbl9jcnRjLT5jcnRjX2lkKTsKQEAgLTE4MCw2ICsxNzcsOSBAQAogCWlmIChyZXQpCiAJCWdvdG8gZmFpbDsKIAorCXJhZGVvbl9jcnRjLT5jdXJzb3Jfd2lkdGggPSB3aWR0aDsKKwlyYWRlb25fY3J0Yy0+Y3Vyc29yX2hlaWdodCA9IGhlaWdodDsKKwogCXJhZGVvbl9sb2NrX2N1cnNvcihjcnRjLCB0cnVlKTsKIAkvKiBYWFggb25seSAyNyBiaXQgb2Zmc2V0IGZvciBsZWdhY3kgY3Vyc29yICovCiAJcmFkZW9uX3NldF9jdXJzb3IoY3J0Yywgb2JqLCBncHVfYWRkcik7CkBAIC0yMjYsNyArMjI2LDcgQEAKIAkJeSArPSBjcnRjLT55OwogCQlEUk1fREVCVUcoInggJWQgeSAlZCBjLT54ICVkIGMtPnkgJWRcbiIsIHgsIHksIGNydGMtPngsIGNydGMtPnkpOwogCi0JCS8qIGF2aXZvIGN1cnNvciBpbWFnZSBjYW4ndCBlbmQgb24gMTI4IHBpeGVsIGJvdW5kcnkgb3IKKwkJLyogYXZpdm8gY3Vyc29yIGltYWdlIGNhbid0IGVuZCBvbiAxMjggcGl4ZWwgYm91bmRhcnkgb3IKIAkJICogZ28gcGFzdCB0aGUgZW5kIG9mIHRoZSBmcmFtZSBpZiBib3RoIGNydGNzIGFyZSBlbmFibGVkCiAJCSAqLwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGNfcCwgJmNydGMtPmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCmluZGV4IGYwMjA5YmUuLjg5MDIxN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCkBAIC0yNjIsNyArMjYyLDcgQEAKICAqIE5vdGU6IEdUVCBzdGFydCwgZW5kLCBzaXplIHNob3VsZCBiZSBpbml0aWFsaXplZCBiZWZvcmUgY2FsbGluZyB0aGlzCiAgKiBmdW5jdGlvbiBvbiBBR1AgcGxhdGZvcm0uCiAgKgotICogTm90ZTogV2UgZG9uJ3QgZXhwbGljdGx5IGVuZm9yY2UgVlJBTSBzdGFydCB0byBiZSBhbGlnbmVkIG9uIFZSQU0gc2l6ZSwKKyAqIE5vdGU6IFdlIGRvbid0IGV4cGxpY2l0bHkgZW5mb3JjZSBWUkFNIHN0YXJ0IHRvIGJlIGFsaWduZWQgb24gVlJBTSBzaXplLAogICogdGhpcyBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtIGFzIHdlIGFyZSB1c2luZyB0aGUgUENJIGFwZXJ0dXJlIGFzIGEgcmVmZXJlbmNlLgogICogT3RoZXJ3aXNlIHRoaXMgd291bGQgYmUgbmVlZGVkIGZvciBydjI4MCwgYWxsIHIzeHgsIGFuZCBhbGwgcjR4eCwgYnV0CiAgKiBub3QgSUdQLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCmluZGV4IDRiZTU4NzkuLmJkYmFiNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKQEAgLTE0OTIsNyArMTQ5Miw3IEBACiAgKgogICogXHJldHVybiBGbGFncywgb3InZWQgdG9nZXRoZXIgYXMgZm9sbG93czoKICAqCi0gKiBEUk1fU0NBTk9VVFBPU19WQUxJRCA9IFF1ZXJ5IHN1Y2Nlc3NmdWxsLgorICogRFJNX1NDQU5PVVRQT1NfVkFMSUQgPSBRdWVyeSBzdWNjZXNzZnVsLgogICogRFJNX1NDQU5PVVRQT1NfSU5WQkwgPSBJbnNpZGUgdmJsYW5rLgogICogRFJNX1NDQU5PVVRQT1NfQUNDVVJBVEUgPSBSZXR1cm5lZCBwb3NpdGlvbiBpcyBhY2N1cmF0ZS4gQSBsYWNrIG9mCiAgKiB0aGlzIGZsYWcgbWVhbnMgdGhhdCByZXR1cm5lZCBwb3NpdGlvbiBtYXkgYmUgb2Zmc2V0IGJ5IGEgY29uc3RhbnQgYnV0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5oCmluZGV4IDVjYmE0NmIuLmExYjU5Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5oCkBAIC0yNzEsNyArMjcxLDcgQEAKIAogCWludCBoYXZlX3pfb2Zmc2V0OwogCi0JLyogc3RhcnRpbmcgZnJvbSBoZXJlIG9uLCBkYXRhIGlzIHByZXNlcnZlZCBhY2Nyb3NzIGFuIG9wZW4gKi8KKwkvKiBzdGFydGluZyBmcm9tIGhlcmUgb24sIGRhdGEgaXMgcHJlc2VydmVkIGFjcm9zcyBhbiBvcGVuICovCiAJdWludDMyX3QgZmxhZ3M7CQkvKiBzZWUgcmFkZW9uX2NoaXBfZmxhZ3MgKi8KIAlyZXNvdXJjZV9zaXplX3QgZmJfYXBlcl9vZmZzZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZlbmNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mZW5jZS5jCmluZGV4IDllNTk4NjguLmJiY2QxZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZlbmNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmVuY2UuYwpAQCAtNzksNyArNzksNyBAQAogCQkJc2NyYXRjaF9pbmRleCA9IFI2MDBfV0JfRVZFTlRfT0ZGU0VUICsgcmRldi0+ZmVuY2VfZHJ2LnNjcmF0Y2hfcmVnIC0gcmRldi0+c2NyYXRjaC5yZWdfYmFzZTsKIAkJZWxzZQogCQkJc2NyYXRjaF9pbmRleCA9IFJBREVPTl9XQl9TQ1JBVENIX09GRlNFVCArIHJkZXYtPmZlbmNlX2Rydi5zY3JhdGNoX3JlZyAtIHJkZXYtPnNjcmF0Y2gucmVnX2Jhc2U7Ci0JCXNlcSA9IHJkZXYtPndiLndiW3NjcmF0Y2hfaW5kZXgvNF07CisJCXNlcSA9IGxlMzJfdG9fY3B1KHJkZXYtPndiLndiW3NjcmF0Y2hfaW5kZXgvNF0pOwogCX0gZWxzZQogCQlzZXEgPSBSUkVHMzIocmRldi0+ZmVuY2VfZHJ2LnNjcmF0Y2hfcmVnKTsKIAlpZiAoc2VxICE9IHJkZXYtPmZlbmNlX2Rydi5sYXN0X3NlcSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jCmluZGV4IGYwNTM0ZWYuLmE1MzNmNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nYXJ0LmMKQEAgLTE4MSw5ICsxODEsOSBAQAogCXAgPSB0IC8gKFBBR0VfU0laRSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFKTsKIAogCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgaSsrLCBwKyspIHsKLQkJLyogT24gVFRNIHBhdGgsIHdlIG9ubHkgdXNlIHRoZSBETUEgQVBJIGlmIFRUTV9QQUdFX0ZMQUdfRE1BMzIKLQkJICogaXMgcmVxdWVzdGVkLiAqLwotCQlpZiAoZG1hX2FkZHJbaV0gIT0gRE1BX0VSUk9SX0NPREUpIHsKKwkJLyogd2UgcmV2ZXJ0ZWQgdGhlIHBhdGNoIHVzaW5nIGRtYV9hZGRyIGluIFRUTSBmb3Igbm93IGJ1dCB0aGlzCisJCSAqIGNvZGUgc3RvcHMgYnVpbGRpbmcgb24gYWxwaGEgc28ganVzdCBjb21tZW50IGl0IG91dCBmb3Igbm93ICovCisJCWlmICgwKSB7IC8qZG1hX2FkZHJbaV0gIT0gRE1BX0VSUk9SX0NPREUpICovCiAJCQlyZGV2LT5nYXJ0LnR0bV9hbGxvY2VkW3BdID0gdHJ1ZTsKIAkJCXJkZXYtPmdhcnQucGFnZXNfYWRkcltwXSA9IGRtYV9hZGRyW2ldOwogCQl9IGVsc2UgewpAQCAtMjg1LDQgKzI4NSw2IEBACiAJcmRldi0+Z2FydC5wYWdlcyA9IE5VTEw7CiAJcmRldi0+Z2FydC5wYWdlc19hZGRyID0gTlVMTDsKIAlyZGV2LT5nYXJ0LnR0bV9hbGxvY2VkID0gTlVMTDsKKworCXJhZGVvbl9kdW1teV9wYWdlX2ZpbmkocmRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pMmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2kyYy5jCmluZGV4IGRlZDJhNDUuLjk4M2NiYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2kyYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2kyYy5jCkBAIC0xMDYyLDcgKzEwNjIsNyBAQAogCQkqdmFsID0gaW5fYnVmWzBdOwogCQlEUk1fREVCVUcoInZhbCA9IDB4JTAyeFxuIiwgKnZhbCk7CiAJfSBlbHNlIHsKLQkJRFJNX0VSUk9SKCJpMmMgMHglMDJ4IDB4JTAyeCByZWFkIGZhaWxlZFxuIiwKKwkJRFJNX0RFQlVHKCJpMmMgMHglMDJ4IDB4JTAyeCByZWFkIGZhaWxlZFxuIiwKIAkJCSAgYWRkciwgKnZhbCk7CiAJfQogfQpAQCAtMTA4NCw3ICsxMDg0LDcgQEAKIAlvdXRfYnVmWzFdID0gdmFsOwogCiAJaWYgKGkyY190cmFuc2ZlcigmaTJjX2J1cy0+YWRhcHRlciwgJm1zZywgMSkgIT0gMSkKLQkJRFJNX0VSUk9SKCJpMmMgMHglMDJ4IDB4JTAyeCB3cml0ZSBmYWlsZWRcbiIsCisJCURSTV9ERUJVRygiaTJjIDB4JTAyeCAweCUwMnggd3JpdGUgZmFpbGVkXG4iLAogCQkJICBhZGRyLCB2YWwpOwogfQogCkBAIC0xMDk2LDYgKzEwOTYsOSBAQAogCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+cm91dGVyLmRkY192YWxpZCkKIAkJcmV0dXJuOwogCisJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5yb3V0ZXJfYnVzKQorCQlyZXR1cm47CisKIAlyYWRlb25faTJjX2dldF9ieXRlKHJhZGVvbl9jb25uZWN0b3ItPnJvdXRlcl9idXMsCiAJCQkgICAgcmFkZW9uX2Nvbm5lY3Rvci0+cm91dGVyLmkyY19hZGRyLAogCQkJICAgIDB4MywgJnZhbCk7CkBAIC0xMTIxLDYgKzExMjQsOSBAQAogCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+cm91dGVyLmNkX3ZhbGlkKQogCQlyZXR1cm47CiAKKwlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPnJvdXRlcl9idXMpCisJCXJldHVybjsKKwogCXJhZGVvbl9pMmNfZ2V0X2J5dGUocmFkZW9uX2Nvbm5lY3Rvci0+cm91dGVyX2J1cywKIAkJCSAgICByYWRlb25fY29ubmVjdG9yLT5yb3V0ZXIuaTJjX2FkZHIsCiAJCQkgICAgMHgzLCAmdmFsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKaW5kZXggYmY3ZDRjMC4uYmQ1OGFmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKQEAgLTIyMSw2ICsyMjEsMjIgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWJyZWFrOworCWNhc2UgUkFERU9OX0lORk9fTlVNX1RJTEVfUElQRVM6CisJCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9DQVlNQU4pCisJCQl2YWx1ZSA9IHJkZXYtPmNvbmZpZy5jYXltYW4ubWF4X3RpbGVfcGlwZXM7CisJCWVsc2UgaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX0NFREFSKQorCQkJdmFsdWUgPSByZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF90aWxlX3BpcGVzOworCQllbHNlIGlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjc3MCkKKwkJCXZhbHVlID0gcmRldi0+Y29uZmlnLnJ2NzcwLm1heF90aWxlX3BpcGVzOworCQllbHNlIGlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKQorCQkJdmFsdWUgPSByZGV2LT5jb25maWcucjYwMC5tYXhfdGlsZV9waXBlczsKKwkJZWxzZSB7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwljYXNlIFJBREVPTl9JTkZPX0ZVU0lPTl9HQVJUX1dPUktJTkc6CisJCXZhbHVlID0gMTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0RFQlVHX0tNUygiSW52YWxpZCByZXF1ZXN0ICVkXG4iLCBpbmZvLT5yZXF1ZXN0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfZW5jb2RlcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9lbmNvZGVycy5jCmluZGV4IDViNTQyNjguLjJmNDZlMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9lbmNvZGVycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9lbmNvZGVycy5jCkBAIC0yNjksNyArMjY5LDcgQEAKIAkuZGlzYWJsZSA9IHJhZGVvbl9sZWdhY3lfZW5jb2Rlcl9kaXNhYmxlLAogfTsKIAotI2lmZGVmIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFCisjaWYgZGVmaW5lZChDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRSkgfHwgZGVmaW5lZChDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRV9NT0RVTEUpCiAKICNkZWZpbmUgTUFYX1JBREVPTl9MRVZFTCAweEZGCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmgKaW5kZXggN2Y4ZTc3OC4uZWRlNmMxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmgKQEAgLTg3LDcgKzg3LDcgQEAKICAqIFJldHVybnMgY3VycmVudCBHUFUgb2Zmc2V0IG9mIHRoZSBvYmplY3QuCiAgKgogICogTm90ZTogb2JqZWN0IHNob3VsZCBlaXRoZXIgYmUgcGlubmVkIG9yIHJlc2VydmVkIHdoZW4gY2FsbGluZyB0aGlzCi0gKiBmdW5jdGlvbiwgaXQgbWlnaHQgYmUgdXNlZnVsbCB0byBhZGQgY2hlY2sgZm9yIHRoaXMgZm9yIGRlYnVnZ2luZy4KKyAqIGZ1bmN0aW9uLCBpdCBtaWdodCBiZSB1c2VmdWwgdG8gYWRkIGNoZWNrIGZvciB0aGlzIGZvciBkZWJ1Z2dpbmcuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdTY0IHJhZGVvbl9ib19ncHVfb2Zmc2V0KHN0cnVjdCByYWRlb25fYm8gKmJvKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKaW5kZXggMDhkZTY2OS4uODZlZGExZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgogI2luY2x1ZGUgImF2aXZvZC5oIgorI2luY2x1ZGUgImF0b20uaCIKICNpZmRlZiBDT05GSUdfQUNQSQogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KICNlbmRpZgpAQCAtNTM1LDcgKzUzNiwxMSBAQAogCS8qIHNldCB1cCB0aGUgZGVmYXVsdCBjbG9ja3MgaWYgdGhlIE1DIHVjb2RlIGlzIGxvYWRlZCAqLwogCWlmIChBU0lDX0lTX0RDRTUocmRldikgJiYgcmRldi0+bWNfZncpIHsKIAkJaWYgKHJkZXYtPnBtLmRlZmF1bHRfdmRkYykKLQkJCXJhZGVvbl9hdG9tX3NldF92b2x0YWdlKHJkZXYsIHJkZXYtPnBtLmRlZmF1bHRfdmRkYyk7CisJCQlyYWRlb25fYXRvbV9zZXRfdm9sdGFnZShyZGV2LCByZGV2LT5wbS5kZWZhdWx0X3ZkZGMsCisJCQkJCQlTRVRfVk9MVEFHRV9UWVBFX0FTSUNfVkREQyk7CisJCWlmIChyZGV2LT5wbS5kZWZhdWx0X3ZkZGNpKQorCQkJcmFkZW9uX2F0b21fc2V0X3ZvbHRhZ2UocmRldiwgcmRldi0+cG0uZGVmYXVsdF92ZGRjaSwKKwkJCQkJCVNFVF9WT0xUQUdFX1RZUEVfQVNJQ19WRERDSSk7CiAJCWlmIChyZGV2LT5wbS5kZWZhdWx0X3NjbGspCiAJCQlyYWRlb25fc2V0X2VuZ2luZV9jbG9jayhyZGV2LCByZGV2LT5wbS5kZWZhdWx0X3NjbGspOwogCQlpZiAocmRldi0+cG0uZGVmYXVsdF9tY2xrKQpAQCAtNTQ4LDYgKzU1Myw3IEBACiAJcmRldi0+cG0uY3VycmVudF9zY2xrID0gcmRldi0+cG0uZGVmYXVsdF9zY2xrOwogCXJkZXYtPnBtLmN1cnJlbnRfbWNsayA9IHJkZXYtPnBtLmRlZmF1bHRfbWNsazsKIAlyZGV2LT5wbS5jdXJyZW50X3ZkZGMgPSByZGV2LT5wbS5wb3dlcl9zdGF0ZVtyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2Uudm9sdGFnZTsKKwlyZGV2LT5wbS5jdXJyZW50X3ZkZGNpID0gcmRldi0+cG0ucG93ZXJfc3RhdGVbcmRldi0+cG0uZGVmYXVsdF9wb3dlcl9zdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnZkZGNpOwogCWlmIChyZGV2LT5wbS5wbV9tZXRob2QgPT0gUE1fTUVUSE9EX0RZTlBNCiAJICAgICYmIHJkZXYtPnBtLmR5bnBtX3N0YXRlID09IERZTlBNX1NUQVRFX1NVU1BFTkRFRCkgewogCQlyZGV2LT5wbS5keW5wbV9zdGF0ZSA9IERZTlBNX1NUQVRFX0FDVElWRTsKQEAgLTU4NSw3ICs1OTEsOCBAQAogCQkvKiBzZXQgdXAgdGhlIGRlZmF1bHQgY2xvY2tzIGlmIHRoZSBNQyB1Y29kZSBpcyBsb2FkZWQgKi8KIAkJaWYgKEFTSUNfSVNfRENFNShyZGV2KSAmJiByZGV2LT5tY19mdykgewogCQkJaWYgKHJkZXYtPnBtLmRlZmF1bHRfdmRkYykKLQkJCQlyYWRlb25fYXRvbV9zZXRfdm9sdGFnZShyZGV2LCByZGV2LT5wbS5kZWZhdWx0X3ZkZGMpOworCQkJCXJhZGVvbl9hdG9tX3NldF92b2x0YWdlKHJkZXYsIHJkZXYtPnBtLmRlZmF1bHRfdmRkYywKKwkJCQkJCQlTRVRfVk9MVEFHRV9UWVBFX0FTSUNfVkREQyk7CiAJCQlpZiAocmRldi0+cG0uZGVmYXVsdF9zY2xrKQogCQkJCXJhZGVvbl9zZXRfZW5naW5lX2Nsb2NrKHJkZXYsIHJkZXYtPnBtLmRlZmF1bHRfc2Nsayk7CiAJCQlpZiAocmRldi0+cG0uZGVmYXVsdF9tY2xrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmluZy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmluZy5jCmluZGV4IGJiYzljZDguLmM2Nzc2ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JpbmcuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yaW5nLmMKQEAgLTI0OCw3ICsyNDgsNyBAQAogdm9pZCByYWRlb25fcmluZ19mcmVlX3NpemUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJaWYgKHJkZXYtPndiLmVuYWJsZWQpCi0JCXJkZXYtPmNwLnJwdHIgPSByZGV2LT53Yi53YltSQURFT05fV0JfQ1BfUlBUUl9PRkZTRVQvNF07CisJCXJkZXYtPmNwLnJwdHIgPSBsZTMyX3RvX2NwdShyZGV2LT53Yi53YltSQURFT05fV0JfQ1BfUlBUUl9PRkZTRVQvNF0pOwogCWVsc2UgewogCQlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUjYwMCkKIAkJCXJkZXYtPmNwLnJwdHIgPSBSUkVHMzIoUjYwMF9DUF9SQl9SUFRSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3N0YXRlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jCmluZGV4IDRhZTVhM2QuLjkyZTdlYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3N0YXRlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3RhdGUuYwpAQCAtOTgwLDcgKzk4MCw3IEBACiAJfQogCiAJLyogaHlwZXIgeiBjbGVhciAqLwotCS8qIG5vIGRvY3MgYXZhaWxhYmxlLCBiYXNlZCBvbiByZXZlcnNlIGVuZ2VuZWVyaW5nIGJ5IFN0ZXBoYW5lIE1hcmNoZXNpbiAqLworCS8qIG5vIGRvY3MgYXZhaWxhYmxlLCBiYXNlZCBvbiByZXZlcnNlIGVuZ2luZWVyaW5nIGJ5IFN0ZXBoYW5lIE1hcmNoZXNpbiAqLwogCWlmICgoZmxhZ3MgJiAoUkFERU9OX0RFUFRIIHwgUkFERU9OX1NURU5DSUwpKQogCSAgICAmJiAoZmxhZ3MgJiBSQURFT05fQ0xFQVJfRkFTVFopKSB7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvY2F5bWFuIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9jYXltYW4KaW5kZXggNjMzNGY4YS4uMGFhOGU4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9jYXltYW4KKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9jYXltYW4KQEAgLTMzLDYgKzMzLDcgQEAKIDB4MDAwMDhFNDggU1FfRVhfQUxMT0NfVEFCTEVfU0xPVFMKIDB4MDAwMDkxMDAgU1BJX0NPTkZJR19DTlRMCiAweDAwMDA5MTNDIFNQSV9DT05GSUdfQ05UTF8xCisweDAwMDA5NTA4IFRBX0NOVExfQVVYCiAweDAwMDA5ODMwIERCX0RFQlVHCiAweDAwMDA5ODM0IERCX0RFQlVHMgogMHgwMDAwOTgzOCBEQl9ERUJVRzMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvZXZlcmdyZWVuIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9ldmVyZ3JlZW4KaW5kZXggN2UxNjM3MS4uMGUyOGNhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9ldmVyZ3JlZW4KKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9ldmVyZ3JlZW4KQEAgLTQ2LDYgKzQ2LDcgQEAKIDB4MDAwMDhFNDggU1FfRVhfQUxMT0NfVEFCTEVfU0xPVFMKIDB4MDAwMDkxMDAgU1BJX0NPTkZJR19DTlRMCiAweDAwMDA5MTNDIFNQSV9DT05GSUdfQ05UTF8xCisweDAwMDA5NTA4IFRBX0NOVExfQVVYCiAweDAwMDA5NzAwIFZDX0NOVEwKIDB4MDAwMDk3MTQgVkNfRU5IQU5DRQogMHgwMDAwOTgzMCBEQl9ERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNjAwIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNjAwCmluZGV4IGFmMGRhNGEuLjkyZjE5MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjYwMAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I2MDAKQEAgLTcwOCw2ICs3MDgsNyBAQAogMHgwMDAyOEQwQyBEQl9SRU5ERVJfQ09OVFJPTAogMHgwMDAyOEQxMCBEQl9SRU5ERVJfT1ZFUlJJREUKIDB4MDAwMjg4MEMgREJfU0hBREVSX0NPTlRST0wKKzB4MDAwMjhEMjggREJfU1JFU1VMVFNfQ09NUEFSRV9TVEFURTAKIDB4MDAwMjhEMkMgREJfU1JFU1VMVFNfQ09NUEFSRV9TVEFURTEKIDB4MDAwMjg0MzAgREJfU1RFTkNJTFJFRk1BU0sKIDB4MDAwMjg0MzQgREJfU1RFTkNJTFJFRk1BU0tfQkYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYwppbmRleCA4NzZjZWJjLi42ZTNiMTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCkBAIC0xMTQsNyArMTE0LDcgQEAKIAkJCQl1ZGVsYXkodm9sdGFnZS0+ZGVsYXkpOwogCQl9CiAJfSBlbHNlIGlmICh2b2x0YWdlLT50eXBlID09IFZPTFRBR0VfVkREQykKLQkJcmFkZW9uX2F0b21fc2V0X3ZvbHRhZ2UocmRldiwgdm9sdGFnZS0+dmRkY19pZCk7CisJCXJhZGVvbl9hdG9tX3NldF92b2x0YWdlKHJkZXYsIHZvbHRhZ2UtPnZkZGNfaWQsIFNFVF9WT0xUQUdFX1RZUEVfQVNJQ19WRERDKTsKIAogCWR5bl9wd3JtZ3Rfc2Nsa19sZW5ndGggPSBSUkVHMzJfUExMKERZTl9QV1JNR1RfU0NMS19MRU5HVEgpOwogCWR5bl9wd3JtZ3Rfc2Nsa19sZW5ndGggJj0gflJFRFVDRURfUE9XRVJfU0NMS19ISUxFTigweGYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCmluZGV4IGI5NzRhYzcuLmVmOGE1YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogCiAJaWYgKCh2b2x0YWdlLT50eXBlID09IFZPTFRBR0VfU1cpICYmIHZvbHRhZ2UtPnZvbHRhZ2UpIHsKIAkJaWYgKHZvbHRhZ2UtPnZvbHRhZ2UgIT0gcmRldi0+cG0uY3VycmVudF92ZGRjKSB7Ci0JCQlyYWRlb25fYXRvbV9zZXRfdm9sdGFnZShyZGV2LCB2b2x0YWdlLT52b2x0YWdlKTsKKwkJCXJhZGVvbl9hdG9tX3NldF92b2x0YWdlKHJkZXYsIHZvbHRhZ2UtPnZvbHRhZ2UsIFNFVF9WT0xUQUdFX1RZUEVfQVNJQ19WRERDKTsKIAkJCXJkZXYtPnBtLmN1cnJlbnRfdmRkYyA9IHZvbHRhZ2UtPnZvbHRhZ2U7CiAJCQlEUk1fREVCVUcoIlNldHRpbmc6IHY6ICVkXG4iLCB2b2x0YWdlLT52b2x0YWdlKTsKIAkJfQpAQCAtMTI1NSw5ICsxMjU1LDYgQEAKIHsKIAlpbnQgcjsKIAotCXIgPSByYWRlb25fZHVtbXlfcGFnZV9pbml0KHJkZXYpOwotCWlmIChyKQotCQlyZXR1cm4gcjsKIAkvKiBUaGlzIGRvbid0IGRvIG11Y2ggKi8KIAlyID0gcmFkZW9uX2dlbV9pbml0KHJkZXYpOwogCWlmIChyKQpAQCAtMTM3Miw3ICsxMzY5LDYgQEAKIAlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKIAlrZnJlZShyZGV2LT5iaW9zKTsKIAlyZGV2LT5iaW9zID0gTlVMTDsKLQlyYWRlb25fZHVtbXlfcGFnZV9maW5pKHJkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBydjc3MF9wY2llX2dlbjJfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fcGFnZV9hbGxvYy5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fcGFnZV9hbGxvYy5jCmluZGV4IDczN2EyYTIuLjlkOWQ5MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3BhZ2VfYWxsb2MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9wYWdlX2FsbG9jLmMKQEAgLTY4MywyMiArNjgzLDE0IEBACiAJCQlnZnBfZmxhZ3MgfD0gR0ZQX0hJR0hVU0VSOwogCiAJCWZvciAociA9IDA7IHIgPCBjb3VudDsgKytyKSB7Ci0JCQlpZiAoKGZsYWdzICYgVFRNX1BBR0VfRkxBR19ETUEzMikgJiYgZG1hX2FkZHJlc3MpIHsKLQkJCQl2b2lkICphZGRyOwotCQkJCWFkZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgUEFHRV9TSVpFLAotCQkJCQkJCSAgJmRtYV9hZGRyZXNzW3JdLAotCQkJCQkJCSAgZ2ZwX2ZsYWdzKTsKLQkJCQlpZiAoYWRkciA9PSBOVUxMKQotCQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCQlwID0gdmlydF90b19wYWdlKGFkZHIpOwotCQkJfSBlbHNlCi0JCQkJcCA9IGFsbG9jX3BhZ2UoZ2ZwX2ZsYWdzKTsKKwkJCXAgPSBhbGxvY19wYWdlKGdmcF9mbGFncyk7CiAJCQlpZiAoIXApIHsKIAogCQkJCXByaW50ayhLRVJOX0VSUiBUVE1fUEZYCiAJCQkJICAgICAgICJVbmFibGUgdG8gYWxsb2NhdGUgcGFnZS4iKTsKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCX0KKwogCQkJbGlzdF9hZGQoJnAtPmxydSwgcGFnZXMpOwogCQl9CiAJCXJldHVybiAwOwpAQCAtNzQ2LDI0ICs3MzgsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAlzdHJ1Y3QgdHRtX3BhZ2VfcG9vbCAqcG9vbCA9IHR0bV9nZXRfcG9vbChmbGFncywgY3N0YXRlKTsKIAlzdHJ1Y3QgcGFnZSAqcCwgKnRtcDsKLQl1bnNpZ25lZCByOwogCiAJaWYgKHBvb2wgPT0gTlVMTCkgewogCQkvKiBObyBwb29sIGZvciB0aGlzIG1lbW9yeSB0eXBlIHNvIGZyZWUgdGhlIHBhZ2VzICovCiAKLQkJciA9IHBhZ2VfY291bnQtMTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIHRtcCwgcGFnZXMsIGxydSkgewotCQkJaWYgKChmbGFncyAmIFRUTV9QQUdFX0ZMQUdfRE1BMzIpICYmIGRtYV9hZGRyZXNzKSB7Ci0JCQkJdm9pZCAqYWRkciA9IHBhZ2VfYWRkcmVzcyhwKTsKLQkJCQlXQVJOX09OKCFhZGRyIHx8ICFkbWFfYWRkcmVzc1tyXSk7Ci0JCQkJaWYgKGFkZHIpCi0JCQkJCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIFBBR0VfU0laRSwKLQkJCQkJCQkgIGFkZHIsCi0JCQkJCQkJICBkbWFfYWRkcmVzc1tyXSk7Ci0JCQkJZG1hX2FkZHJlc3Nbcl0gPSAwOwotCQkJfSBlbHNlCi0JCQkJX19mcmVlX3BhZ2UocCk7Ci0JCQlyLS07CisJCQlfX2ZyZWVfcGFnZShwKTsKIAkJfQogCQkvKiBNYWtlIHRoZSBwYWdlcyBsaXN0IGVtcHR5ICovCiAJCUlOSVRfTElTVF9IRUFEKHBhZ2VzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKaW5kZXggY2NlZWI0Mi4uZGZlMzJlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKQEAgLTI0NSw3ICsyNDUsNyBAQAogCQkvKiBUT0RPIGhhbmRsZSBub25lIHBhZ2UgYWxpZ25lZCBvZmZzZXRzICovCiAJCS8qIFRPRE8gaGFuZGxlIHBhcnRpYWwgdXBsb2FkcyBhbmQgcGl0Y2ggIT0gMjU2ICovCiAJCS8qIFRPRE8gaGFuZGxlIG1vcmUgdGhlbiBvbmUgY29weSAoc2l6ZSAhPSA2NCkgKi8KLQkJRFJNX0VSUk9SKCJsYXp5IHByb2dyYW1lciwgY2FudCBoYW5kbGUgd2llcmQgc3R1ZmZcbiIpOworCQlEUk1fRVJST1IoImxhenkgcHJvZ3JhbW1lciwgY2FuJ3QgaGFuZGxlIHdlaXJkIHN0dWZmXG4iKTsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvc3R1Yi9LY29uZmlnIGIvZHJpdmVycy9ncHUvc3R1Yi9LY29uZmlnCmluZGV4IDcwZTYwYTQuLjQxOTkxNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L3N0dWIvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9zdHViL0tjb25maWcKQEAgLTUsNiArNSw3IEBACiAJIyBQb3Vsc2JvIHN0dWIgZGVwZW5kcyBvbiBBQ1BJX1ZJREVPIHdoZW4gQUNQSSBpcyBlbmFibGVkCiAJIyBidXQgZm9yIHNlbGVjdCB0byB3b3JrLCBuZWVkIHRvIHNlbGVjdCBBQ1BJX1ZJREVPJ3MgZGVwZW5kZW5jaWVzLCBpY2sKIAlzZWxlY3QgQkFDS0xJR0hUX0NMQVNTX0RFVklDRSBpZiBBQ1BJCisJc2VsZWN0IFZJREVPX09VVFBVVF9DT05UUk9MIGlmIEFDUEkKIAlzZWxlY3QgSU5QVVQgaWYgQUNQSQogCXNlbGVjdCBBQ1BJX1ZJREVPIGlmIEFDUEkKIAlzZWxlY3QgVEhFUk1BTCBpZiBBQ1BJCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS92Z2EvdmdhX3N3aXRjaGVyb28uYyBiL2RyaXZlcnMvZ3B1L3ZnYS92Z2Ffc3dpdGNoZXJvby5jCmluZGV4IGUwMWNhY2IuLjQ5OGIyODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L3ZnYS92Z2Ffc3dpdGNoZXJvby5jCisrKyBiL2RyaXZlcnMvZ3B1L3ZnYS92Z2Ffc3dpdGNoZXJvby5jCkBAIC0yMTksOSArMjE5LDYgQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgdmdhX3N3aXRjaGVyb29fY2xpZW50ICphY3RpdmUgPSBOVUxMOwogCi0JaWYgKG5ld19jbGllbnQtPmFjdGl2ZSA9PSB0cnVlKQotCQlyZXR1cm4gMDsKLQogCWZvciAoaSA9IDA7IGkgPCBWR0FfU1dJVENIRVJPT19NQVhfQ0xJRU5UUzsgaSsrKSB7CiAJCWlmICh2Z2Fzcl9wcml2LmNsaWVudHNbaV0uYWN0aXZlID09IHRydWUpIHsKIAkJCWFjdGl2ZSA9ICZ2Z2Fzcl9wcml2LmNsaWVudHNbaV07CkBAIC0zNzIsNiArMzY5LDkgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJaWYgKGNsaWVudC0+YWN0aXZlID09IHRydWUpCisJCWdvdG8gb3V0OworCiAJLyogb2theSB3ZSB3YW50IGEgc3dpdGNoIC0gdGVzdCBpZiBkZXZpY2VzIGFyZSB3aWxsaW5nIHRvIHN3aXRjaCAqLwogCWNhbl9zd2l0Y2ggPSB0cnVlOwogCWZvciAoaSA9IDA7IGkgPCBWR0FfU1dJVENIRVJPT19NQVhfQ0xJRU5UUzsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS92Z2EvdmdhYXJiLmMgYi9kcml2ZXJzL2dwdS92Z2EvdmdhYXJiLmMKaW5kZXggYWNlMmIxNi4uYmU4ZDRjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvdmdhL3ZnYWFyYi5jCisrKyBiL2RyaXZlcnMvZ3B1L3ZnYS92Z2FhcmIuYwpAQCAtMTUxLDcgKzE1MSw3IEBACiBzdGF0aWMgdm9pZCB2Z2FfY2hlY2tfZmlyc3RfdXNlKHZvaWQpCiB7CiAJLyogd2Ugc2hvdWxkIGluZm9ybSBhbGwgR1BVcyBpbiB0aGUgc3lzdGVtIHRoYXQKLQkgKiBWR0EgYXJiIGhhcyBvY2N1cmVkIGFuZCB0byB0cnkgYW5kIGRpc2FibGUgcmVzb3VyY2VzCisJICogVkdBIGFyYiBoYXMgb2NjdXJyZWQgYW5kIHRvIHRyeSBhbmQgZGlzYWJsZSByZXNvdXJjZXMKIAkgKiBpZiB0aGV5IGNhbiAqLwogCWlmICghdmdhX2FyYml0ZXJfdXNlZCkgewogCQl2Z2FfYXJiaXRlcl91c2VkID0gdHJ1ZTsKQEAgLTc3NCw3ICs3NzQsNyBAQAogCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZ2Z2FfbG9jaywgZmxhZ3MpOwogCi0JLyogSWYgd2UgYXJlIHRhcmdldHRpbmcgdGhlIGRlZmF1bHQsIHVzZSBpdCAqLworCS8qIElmIHdlIGFyZSB0YXJnZXRpbmcgdGhlIGRlZmF1bHQsIHVzZSBpdCAqLwogCXBkZXYgPSBwcml2LT50YXJnZXQ7CiAJaWYgKHBkZXYgPT0gTlVMTCB8fCBwZGV2ID09IFBDSV9JTlZBTElEX0NBUkQpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmdhX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL0tjb25maWcgYi9kcml2ZXJzL2hpZC9LY29uZmlnCmluZGV4IGI3ZWM0MDUuLjlkZTllOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL0tjb25maWcKKysrIGIvZHJpdmVycy9oaWQvS2NvbmZpZwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJU3VwcG9ydCBmb3IgRXprZXkgQlRDIDgxOTMga2V5Ym9hcmQuCiAKIGNvbmZpZyBISURfS0VZVE9VQ0gKLQl0cmlzdGF0ZSAiS2V5b3V0Y2ggSElEIGRldmljZXMiCisJdHJpc3RhdGUgIktleXRvdWNoIEhJRCBkZXZpY2VzIgogCWRlcGVuZHMgb24gVVNCX0hJRAogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciBLZXl0b3VjaCBISUQgZGV2aWNlcyBub3QgZnVsbHkgY29tcGxpYW50IHdpdGgKQEAgLTM0MCwxMCArMzQwLDE3IEBACiAJU3VwcG9ydCBmb3IgTi1UcmlnIHRvdWNoIHNjcmVlbi4KIAogY29uZmlnIEhJRF9PUlRFSwotCXRyaXN0YXRlICJPcnRlayBQS0ItMTcwMC9XS0ItMjAwMCB3aXJlbGVzcyBrZXlib2FyZCBhbmQgbW91c2UgdHJhY2twYWQiCisJdHJpc3RhdGUgIk9ydGVrIFBLQi0xNzAwL1dLQi0yMDAwL1NreWNhYmxlIHdpcmVsZXNzIGtleWJvYXJkIGFuZCBtb3VzZSB0cmFja3BhZCIKIAlkZXBlbmRzIG9uIFVTQl9ISUQKIAktLS1oZWxwLS0tCi0JU3VwcG9ydCBmb3IgT3J0ZWsgUEtCLTE3MDAvV0tCLTIwMDAgd2lyZWxlc3Mga2V5Ym9hcmQgKyBtb3VzZSB0cmFja3BhZC4KKwlUaGVyZSBhcmUgY2VydGFpbiBkZXZpY2VzIHdoaWNoIGhhdmUgTG9naWNhbE1heGltdW0gd3JvbmcgaW4gdGhlIGtleWJvYXJkCisJdXNhZ2UgcGFnZSBvZiB0aGVpciByZXBvcnQgZGVzY3JpcHRvci4gVGhlIG1vc3QgcHJldmFpbGluZyBvbmVzIHNvIGZhcgorCWFyZSBtYW51ZmFjdHVyZWQgYnkgT3J0ZWssIHRodXMgdGhlIG5hbWUgb2YgdGhlIGRyaXZlci4gQ3VycmVudGx5CisJc3VwcG9ydGVkIGRldmljZXMgYnkgdGhpcyBkcml2ZXIgYXJlCisKKwkgICAtIE9ydGVrIFBLQi0xNzAwCisJICAgLSBPcnRlayBXS0ItMjAwMAorCSAgIC0gU2t5Y2FibGUgd2lyZWxlc3MgcHJlc2VudGVyCiAKIGNvbmZpZyBISURfUEFOVEhFUkxPUkQKIAl0cmlzdGF0ZSAiUGFudGhlcmxvcmQvR3JlZW5Bc2lhIGdhbWUgY29udHJvbGxlciIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCmluZGV4IGU5Njg3NzYuLjQwOGM0YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwpAQCAtMzA2LDcgKzMwNiw3IEBACiAJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1BVU0g6CiAKIAkJaWYgKHBhcnNlci0+Z2xvYmFsX3N0YWNrX3B0ciA9PSBISURfR0xPQkFMX1NUQUNLX1NJWkUpIHsKLQkJCWRiZ19oaWQoImdsb2JhbCBlbnZpcm9tZW50IHN0YWNrIG92ZXJmbG93XG4iKTsKKwkJCWRiZ19oaWQoImdsb2JhbCBlbnZpcm9ubWVudCBzdGFjayBvdmVyZmxvd1xuIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIApAQCAtMzE3LDcgKzMxNyw3IEBACiAJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1BPUDoKIAogCQlpZiAoIXBhcnNlci0+Z2xvYmFsX3N0YWNrX3B0cikgewotCQkJZGJnX2hpZCgiZ2xvYmFsIGVudmlyb21lbnQgc3RhY2sgdW5kZXJmbG93XG4iKTsKKwkJCWRiZ19oaWQoImdsb2JhbCBlbnZpcm9ubWVudCBzdGFjayB1bmRlcmZsb3dcbiIpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAKQEAgLTE0NDksOCArMTQ0OSwxMCBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9ST0NDQVQsIFVTQl9ERVZJQ0VfSURfUk9DQ0FUX0tPTkVQTFVTKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9ST0NDQVQsIFVTQl9ERVZJQ0VfSURfUk9DQ0FUX0tPVkFQTFVTKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9ST0NDQVQsIFVTQl9ERVZJQ0VfSURfUk9DQ0FUX1BZUkFfV0lSRUQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1JPQ0NBVCwgVVNCX0RFVklDRV9JRF9ST0NDQVRfUFlSQV9XSVJFTEVTUykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU0FNU1VORywgVVNCX0RFVklDRV9JRF9TQU1TVU5HX0lSX1JFTU9URSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU0FNU1VORywgVVNCX0RFVklDRV9JRF9TQU1TVU5HX1dJUkVMRVNTX0tCRF9NT1VTRSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU0tZQ0FCTEUsIFVTQl9ERVZJQ0VfSURfU0tZQ0FCTEVfV0lSRUxFU1NfUFJFU0VOVEVSKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TT05ZLCBVU0JfREVWSUNFX0lEX1NPTllfUFMzX0NPTlRST0xMRVIpIH0sCiAJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX1NPTlksIFVTQl9ERVZJQ0VfSURfU09OWV9QUzNfQ09OVFJPTExFUikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU09OWSwgVVNCX0RFVklDRV9JRF9TT05ZX1ZBSU9fVkdYX01PVVNFKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWRlYnVnLmMgYi9kcml2ZXJzL2hpZC9oaWQtZGVidWcuYwppbmRleCA1NTUzODJmLi5iYWU0ODc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtZGVidWcuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtZGVidWcuYwpAQCAtMzQxLDcgKzM0MSw3IEBACiAgICAgeyAweDg1LCAweDgzLCAiRGVzaWduQ2FwYWNpdHkiIH0sCiAgICAgeyAweDg1LCAweDg1LCAiTWFudWZhY3R1cmVyRGF0ZSIgfSwKICAgICB7IDB4ODUsIDB4ODksICJpRGV2aWNlQ2hlbWlzdHJ5IiB9LAotICAgIHsgMHg4NSwgMHg4YiwgIlJlY2hhcmdhYmxlIiB9LAorICAgIHsgMHg4NSwgMHg4YiwgIlJlY2hhcmdlYWJsZSIgfSwKICAgICB7IDB4ODUsIDB4OGYsICJpT0VNSW5mb3JtYXRpb24iIH0sCiAgICAgeyAweDg1LCAweDhkLCAiQ2FwYWNpdHlHcmFudWxhcml0eTEiIH0sCiAgICAgeyAweDg1LCAweGQwLCAiQUNQcmVzZW50IiB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWlkcy5oIGIvZHJpdmVycy9oaWQvaGlkLWlkcy5oCmluZGV4IDY1YWM1M2QuLjAwYTk0YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1pZHMuaAorKysgYi9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKQEAgLTE1MCw2ICsxNTAsNyBAQAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0NBTkRPX01VTFRJX1RPVUNIXzE1XzYgMHgwZjAxCiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9DSAkJMHgwNjhlCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ0hfUFJPX1RIUk9UVExFCTB4MDBmMQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0NIX1BST19QRURBTFMJMHgwMGYyCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ0hfQ09NQkFUU1RJQ0sJMHgwMGY0CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ0hfRkxJR0hUX1NJTV9FQ0xJUFNFX1lPS0UgICAgICAgMHgwMDUxCkBAIC01MjQsNiArNTI1LDkgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TQU1TVU5HX0lSX1JFTU9URQkweDAwMDEKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TQU1TVU5HX1dJUkVMRVNTX0tCRF9NT1VTRQkweDA2MDAKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX1NLWUNBQkxFCQkJMHgxMjIzCisjZGVmaW5lCVVTQl9ERVZJQ0VfSURfU0tZQ0FCTEVfV0lSRUxFU1NfUFJFU0VOVEVSCTB4M0YwNworCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfU09OWQkJCTB4MDU0YwogI2RlZmluZSBVU0JfREVWSUNFX0lEX1NPTllfVkFJT19WR1hfTU9VU0UJMHgwMjRiCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU09OWV9QUzNfQ09OVFJPTExFUgkweDAyNjgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1sZ2ZmLmMgYi9kcml2ZXJzL2hpZC9oaWQtbGdmZi5jCmluZGV4IDkwZDBlZjIuLmYwOTkwNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1sZ2ZmLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWxnZmYuYwpAQCAtNzMsNiArNzMsOCBAQAogCXsgMHgwNDZkLCAweGMyOTMsIGZmX2pveXN0aWNrIH0sCiAJeyAweDA0NmQsIDB4YzI5NCwgZmZfd2hlZWwgfSwKIAl7IDB4MDQ2ZCwgMHhjMjk1LCBmZl9qb3lzdGljayB9LAorCXsgMHgwNDZkLCAweGMyOTgsIGZmX3doZWVsIH0sCisJeyAweDA0NmQsIDB4YzI5OSwgZmZfd2hlZWwgfSwKIAl7IDB4MDQ2ZCwgMHhjYTAzLCBmZl93aGVlbCB9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLW1hZ2ljbW91c2UuYyBiL2RyaXZlcnMvaGlkL2hpZC1tYWdpY21vdXNlLmMKaW5kZXggMzE4Y2M0MC4uMGVjOTFjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLW1hZ2ljbW91c2UuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbWFnaWNtb3VzZS5jCkBAIC03Niw3ICs3Niw3IEBACiAgKiBUaGlzIGlzIHRydWUgd2hlbiBzaW5nbGVfdG91Y2hfaWQgaXMgZXF1YWwgdG8gTk9fVE9VQ0hFUy4gSWYgbXVsdGlwbGUgdG91Y2hlcwogICogYXJlIGRvd24gYW5kIHRoZSB0b3VjaCBwcm92aWRpbmcgZm9yIHNpbmdsZSB0b3VjaCBlbXVsYXRpb24gaXMgbGlmdGVkLAogICogc2luZ2xlX3RvdWNoX2lkIGlzIGVxdWFsIHRvIFNJTkdMRV9UT1VDSF9VUC4gV2hpbGUgc2luZ2xlIHRvdWNoIGVtdWxhdGlvbiBpcwotICogb2NjdXJpbmcsIHNpbmdsZV90b3VjaF9pZCBjb3JyZXNwb25kcyB3aXRoIHRoZSB0cmFja2luZyBpZCBvZiB0aGUgdG91Y2ggdXNlZC4KKyAqIG9jY3VycmluZywgc2luZ2xlX3RvdWNoX2lkIGNvcnJlc3BvbmRzIHdpdGggdGhlIHRyYWNraW5nIGlkIG9mIHRoZSB0b3VjaCB1c2VkLgogICovCiAjZGVmaW5lIE5PX1RPVUNIRVMgLTEKICNkZWZpbmUgU0lOR0xFX1RPVUNIX1VQIC0yCkBAIC00MTgsNiArNDE4LDggQEAKIAkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfTVRfUE9TSVRJT05fWSwgLTI0NTYsCiAJCQkJMjU2NSwgNCwgMCk7CiAJCX0KKworCQlpbnB1dF9zZXRfZXZlbnRzX3Blcl9wYWNrZXQoaW5wdXQsIDYwKTsKIAl9CiAKIAlpZiAocmVwb3J0X3VuZGVjaXBoZXJlZCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLW9ydGVrLmMgYi9kcml2ZXJzL2hpZC9oaWQtb3J0ZWsuYwppbmRleCBmOWI3ZGQ0Li4wZmZhMWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtb3J0ZWsuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtb3J0ZWsuYwpAQCAtMSw4ICsxLDE0IEBACiAvKgotICogIEhJRCBkcml2ZXIgZm9yIE9ydGVrIFBLQi0xNzAwL1dLQi0yMDAwICh3aXJlbGVzcyBrZXlib2FyZCArIG1vdXNlIHRyYWNrcGFkKS4KLSAqICBGaXhlcyBMb2dpY2FsTWF4aW11bSBlcnJvciBpbiBISUQgcmVwb3J0IGRlc2NyaXB0aW9uLgorICogIEhJRCBkcml2ZXIgZm9yIHZhcmlvdXMgZGV2aWNlcyB3aGljaCBhcmUgYXBwYXJlbnRseSBiYXNlZCBvbiB0aGUgc2FtZSBjaGlwc2V0CisgKiAgZnJvbSBjZXJ0YWluIHZlbmRvciB3aGljaCBwcm9kdWNlcyBjaGlwcyB0aGF0IGNvbnRhaW4gd3JvbmcgTG9naWNhbE1heGltdW0KKyAqICB2YWx1ZSBpbiB0aGVpciBISUQgcmVwb3J0IGRlc2NyaXB0b3IuIEN1cnJlbnRseSBzdXBwb3J0ZWQgZGV2aWNlcyBhcmU6CisgKgorICogICAgT3J0ZWsgUEtCLTE3MDAKKyAqICAgIE9ydGVrIFdLQi0yMDAwCisgKiAgICBTa3ljYWJsZSB3aXJlbGVzcyBwcmVzZW50ZXIKICAqCiAgKiAgQ29weXJpZ2h0IChjKSAyMDEwIEpvaG5hdGhvbiBIYXJyaXMgPGptaGFycmlzQGdtYWlsLmNvbT4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTEgSmlyaSBLb3NpbmEKICAqLwogCiAvKgpAQCAtMjIsOCArMjgsMTEgQEAKIAkJdW5zaWduZWQgaW50ICpyc2l6ZSkKIHsKIAlpZiAoKnJzaXplID49IDU2ICYmIHJkZXNjWzU0XSA9PSAweDI1ICYmIHJkZXNjWzU1XSA9PSAweDAxKSB7Ci0JCWhpZF9pbmZvKGhkZXYsICJGaXhpbmcgdXAgT3J0ZWsgV0tCLTIwMDAgcmVwb3J0IGRlc2NyaXB0b3JcbiIpOworCQloaWRfaW5mbyhoZGV2LCAiRml4aW5nIHVwIGxvZ2ljYWwgbWluaW11bSBpbiByZXBvcnQgZGVzY3JpcHRvciAoT3J0ZWspXG4iKTsKIAkJcmRlc2NbNTVdID0gMHg5MjsKKwl9IGVsc2UgaWYgKCpyc2l6ZSA+PSA1NCAmJiByZGVzY1s1Ml0gPT0gMHgyNSAmJiByZGVzY1s1M10gPT0gMHgwMSkgeworCQloaWRfaW5mbyhoZGV2LCAiRml4aW5nIHVwIGxvZ2ljYWwgbWluaW11bSBpbiByZXBvcnQgZGVzY3JpcHRvciAoU2t5Y2FibGUpXG4iKTsKKwkJcmRlc2NbNTNdID0gMHg2NTsKIAl9CiAJcmV0dXJuIHJkZXNjOwogfQpAQCAtMzEsNiArNDAsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIG9ydGVrX2RldmljZXNbXSA9IHsKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfT1JURUssIFVTQl9ERVZJQ0VfSURfT1JURUtfUEtCMTcwMCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfT1JURUssIFVTQl9ERVZJQ0VfSURfT1JURUtfV0tCMjAwMCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU0tZQ0FCTEUsIFVTQl9ERVZJQ0VfSURfU0tZQ0FCTEVfV0lSRUxFU1NfUFJFU0VOVEVSKSB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBvcnRla19kZXZpY2VzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1waWNvbGNkLmMgYi9kcml2ZXJzL2hpZC9oaWQtcGljb2xjZC5jCmluZGV4IDY1N2RhNWEuLmIyZjU2YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1waWNvbGNkLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLXBpY29sY2QuYwpAQCAtMTgwNiwxMyArMTgwNiwxMyBAQAogLyoKICAqIE5vdGVzOgogICogLSBjb25jdXJyZW50IHdyaXRpbmcgaXMgcHJldmVudGVkIGJ5IG11dGV4IGFuZCBhbGwgd3JpdGVzIG11c3QgYmUKLSAqICAgbio2NCBieXRlcyBhbmQgNjQtYnl0ZSBhbGlnbmVkLCBlYWNoIHdyaXRlIGJlaW5nIHByZWNlZWRlZCBieSBhbgorICogICBuKjY0IGJ5dGVzIGFuZCA2NC1ieXRlIGFsaWduZWQsIGVhY2ggd3JpdGUgYmVpbmcgcHJlY2VkZWQgYnkgYW4KICAqICAgRVJBU0Ugd2hpY2ggZXJhc2VzIGEgNjRieXRlIGJsb2NrLgogICogICBJZiBsZXNzIHRoYW4gcmVxdWVzdGVkIHdhcyB3cml0dGVuIG9yIGFuIGVycm9yIGlzIHJldHVybmVkIGZvciBhbgogICogICBvdGhlcndpc2UgY29ycmVjdCB3cml0ZSByZXF1ZXN0IHRoZSBuZXh0IDY0LWJ5dGUgYmxvY2sgd2hpY2ggc2hvdWxkCiAgKiAgIGhhdmUgYmVlbiB3cml0dGVuIGlzIGluIHVuZGVmaW5lZCBzdGF0ZSAobW9zdGx5OiBvcmlnaW5hbCwgZXJhc2VkLAogICogICAoaGFsZi0pd3JpdHRlbiB3aXRoIHdyaXRlIGVycm9yKQotICogLSByZWFkaW5nIGNhbiBoYXBwZW5kIHdpdGhvdXQgc3BlY2lhbCByZXN0cmljdGlvbgorICogLSByZWFkaW5nIGNhbiBoYXBwZW4gd2l0aG91dCBzcGVjaWFsIHJlc3RyaWN0aW9uCiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBpY29sY2RfZGVidWdfZmxhc2hfZm9wcyA9IHsKIAkub3duZXIgICAgPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5oIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmgKaW5kZXggNjRhYmI1Yi4uNDEwOWEwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmgKKysrIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmgKQEAgLTE2Niw3ICsxNjYsNyBAQAogCS8qIG9zZCBldmVudHMgYXJlIHRob3VnaHQgdG8gYmUgZGlzcGxheSBvbiBzY3JlZW4gKi8KIAlrb25lX21vdXNlX2V2ZW50X29zZF9kcGkgPSAweGEwLAogCWtvbmVfbW91c2VfZXZlbnRfb3NkX3Byb2ZpbGUgPSAweGIwLAotCS8qIFRPRE8gY2xhcmlmeSBtZWFuaW5nIGFuZCBvY2N1cmVuY2Ugb2Yga29uZV9tb3VzZV9ldmVudF9jYWxpYnJhdGlvbiAqLworCS8qIFRPRE8gY2xhcmlmeSBtZWFuaW5nIGFuZCBvY2N1cnJlbmNlIG9mIGtvbmVfbW91c2VfZXZlbnRfY2FsaWJyYXRpb24gKi8KIAlrb25lX21vdXNlX2V2ZW50X2NhbGlicmF0aW9uID0gMHhjMCwKIAlrb25lX21vdXNlX2V2ZW50X2NhbGxfb3ZlcmxvbmdfbWFjcm8gPSAweGUwLAogCS8qIHN3aXRjaCBldmVudHMgbm90aWZ5IGlmIHVzZXIgY2hhbmdlZCB2YWx1ZXMgd2l0aCBtb3VzZWJ1dHRvbiBjbGljayAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1weXJhLmMgYi9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LXB5cmEuYwppbmRleCAxNjBmNDgxLi4zODI4MGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LXB5cmEuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LXB5cmEuYwpAQCAtNjUyLDcgKzY1Miw4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgcHlyYV9kZXZpY2VzW10gPSB7CiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1JPQ0NBVCwKIAkJCVVTQl9ERVZJQ0VfSURfUk9DQ0FUX1BZUkFfV0lSRUQpIH0sCi0JLyogVE9ETyBhZGQgVVNCX0RFVklDRV9JRF9ST0NDQVRfUFlSQV9XSVJFTEVTUyBhZnRlciB0ZXN0aW5nICovCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1JPQ0NBVCwKKwkJCVVTQl9ERVZJQ0VfSURfUk9DQ0FUX1BZUkFfV0lSRUxFU1MpIH0sCiAJeyB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYwppbmRleCA5YTk0YjY0Li5hODQyNmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKQEAgLTU5LDYgKzU5LDcgQEAKIAl7IFVTQl9WRU5ET1JfSURfQ0gsIFVTQl9ERVZJQ0VfSURfQ0hfQ09NQkFUU1RJQ0ssIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9DSCwgVVNCX0RFVklDRV9JRF9DSF9GTElHSFRfU0lNX0VDTElQU0VfWU9LRSwgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0NILCBVU0JfREVWSUNFX0lEX0NIX0ZMSUdIVF9TSU1fWU9LRSwgSElEX1FVSVJLX05PR0VUIH0sCisJeyBVU0JfVkVORE9SX0lEX0NILCBVU0JfREVWSUNFX0lEX0NIX1BST19USFJPVFRMRSwgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0NILCBVU0JfREVWSUNFX0lEX0NIX1BST19QRURBTFMsIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9DSCwgVVNCX0RFVklDRV9JRF9DSF8zQVhJU181QlVUVE9OX1NUSUNLLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfQ0gsIFVTQl9ERVZJQ0VfSURfQ0hfQVhJU18yOTUsIEhJRF9RVUlSS19OT0dFVCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9LY29uZmlnIGIvZHJpdmVycy9od21vbi9LY29uZmlnCmluZGV4IDA2MGVmNjMuLjUwZTQwZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZworKysgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKQEAgLTExMCw4ICsxMTAsNyBAQAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBBbmFsb2cgRGV2aWNlcyBBRE0xMDIxCiAJICBhbmQgQURNMTAyMyBzZW5zb3IgY2hpcHMgYW5kIGNsb25lczogTWF4aW0gTUFYMTYxNyBhbmQgTUFYMTYxN0EsCi0JICBHZW5lc3lzIExvZ2ljIEdMNTIzU00sIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE04NCwgVEkgVEhNQzEwLAotCSAgYW5kIHRoZSBYRU9OIHByb2Nlc3NvciBidWlsdC1pbiBzZW5zb3IuCisJICBHZW5lc3lzIExvZ2ljIEdMNTIzU00sIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE04NCBhbmQgVEkgVEhNQzEwLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBhZG0xMDIxLgpAQCAtNjE4LDEwICs2MTcsMTAgQEAKIAlkZXBlbmRzIG9uIEkyQwogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNOTAsCi0JICBMTTg2LCBMTTg5IGFuZCBMTTk5LCBBbmFsb2cgRGV2aWNlcyBBRE0xMDMyIGFuZCBBRFQ3NDYxLCBNYXhpbQotCSAgTUFYNjY0NiwgTUFYNjY0NywgTUFYNjY0OCwgTUFYNjY0OSwgTUFYNjY1NywgTUFYNjY1OCwgTUFYNjY1OSwKLQkgIE1BWDY2ODAsIE1BWDY2ODEsIE1BWDY2OTIsIE1BWDY2OTUsIE1BWDY2OTYsIGFuZCBXaW5ib25kL051dm90b24KLQkgIFc4M0w3NzFXL0cvQVdHL0FTRyBzZW5zb3IgY2hpcHMuCisJICBMTTg2LCBMTTg5IGFuZCBMTTk5LCBBbmFsb2cgRGV2aWNlcyBBRE0xMDMyLCBBRFQ3NDYxLCBhbmQgQURUNzQ2MUEsCisJICBNYXhpbSBNQVg2NjQ2LCBNQVg2NjQ3LCBNQVg2NjQ4LCBNQVg2NjQ5LCBNQVg2NjU3LCBNQVg2NjU4LCBNQVg2NjU5LAorCSAgTUFYNjY4MCwgTUFYNjY4MSwgTUFYNjY5MiwgTUFYNjY5NSwgTUFYNjY5NiwgT04gU2VtaWNvbmR1Y3RvciBOQ1QxMDA4LAorCSAgYW5kIFdpbmJvbmQvTnV2b3RvbiBXODNMNzcxVy9HL0FXRy9BU0cgc2Vuc29yIGNoaXBzLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBsbTkwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hYml0dWd1cnUuYyBiL2RyaXZlcnMvaHdtb24vYWJpdHVndXJ1LmMKaW5kZXggMGUwNWFhMS4uZTdkNGM0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hYml0dWd1cnUuYworKysgYi9kcml2ZXJzL2h3bW9uL2FiaXR1Z3VydS5jCkBAIC0xNDIyLDcgKzE0MjIsNyBAQAogCSAgIGF0IERBVEEgYW5kIDB4QUMsIHdoZW4gdGhpcyBkcml2ZXIgaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQgb25jZQogCSAgIERBVEEgd2lsbCBob2xkIDB4MDguIEZvciBtb3N0IHVHdXJ1J3MgQ01EIHdpbGwgaG9sZCAweEFDIGluIGVpdGhlcgogCSAgIHNjZW5hcmlvIGJ1dCBzb21lIHdpbGwgaG9sZCAweDAwLgotCSAgIFNvbWUgdUd1cnUncyBpbml0YWxseSBob2xkIDB4MDkgYXQgREFUQSBhbmQgd2lsbCBvbmx5IGhvbGQgMHgwOAorCSAgIFNvbWUgdUd1cnUncyBpbml0aWFsbHkgaG9sZCAweDA5IGF0IERBVEEgYW5kIHdpbGwgb25seSBob2xkIDB4MDgKIAkgICBhZnRlciByZWFkaW5nIENNRCBmaXJzdCwgc28gQ01EIG11c3QgYmUgcmVhZCBmaXJzdCEgKi8KIAl1OCBjbWRfdmFsID0gaW5iX3AoQUJJVF9VR1VSVV9CQVNFICsgQUJJVF9VR1VSVV9DTUQpOwogCXU4IGRhdGFfdmFsID0gaW5iX3AoQUJJVF9VR1VSVV9CQVNFICsgQUJJVF9VR1VSVV9EQVRBKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWJpdHVndXJ1My5jIGIvZHJpdmVycy9od21vbi9hYml0dWd1cnUzLmMKaW5kZXggMDM0Y2ViZi4uZTg5ZDU3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hYml0dWd1cnUzLmMKKysrIGIvZHJpdmVycy9od21vbi9hYml0dWd1cnUzLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCS8qIFBvaW50ZXIgdG8gdGhlIHNlbnNvcnMgaW5mbyBmb3IgdGhlIGRldGVjdGVkIG1vdGhlcmJvYXJkICovCiAJY29uc3Qgc3RydWN0IGFiaXR1Z3VydTNfc2Vuc29yX2luZm8gKnNlbnNvcnM7CiAKLQkvKiBUaGUgYWJpdHVndXJ1MyBzdXBwb3J0cyB1cHRvIDQ4IHNlbnNvcnMsIGFuZCB0aHVzIGhhcyByZWdpc3RlcnMKKwkvKiBUaGUgYWJpdHVndXJ1MyBzdXBwb3J0cyB1cCB0byA0OCBzZW5zb3JzLCBhbmQgdGh1cyBoYXMgcmVnaXN0ZXJzCiAJICAgc2V0cyBmb3IgNDggc2Vuc29ycywgZm9yIGNvbnZpZW5lbmNlIHJlYXNvbnMgLyBzaW1wbGljaXR5IG9mIHRoZQogCSAgIGNvZGUgd2UgYWx3YXlzIHJlYWQgYW5kIHN0b3JlIGFsbCByZWdpc3RlcnMgZm9yIGFsbCA0OCBzZW5zb3JzICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWRtMTAyNi5jIGIvZHJpdmVycy9od21vbi9hZG0xMDI2LmMKaW5kZXggYmUwZmRkNS4uMDUzMTg2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hZG0xMDI2LmMKKysrIGIvZHJpdmVycy9od21vbi9hZG0xMDI2LmMKQEAgLTE3NSw3ICsxNzUsNyBAQAogICogdGhlc2UgbWFjcm9zIGFyZSBjYWxsZWQ6IGFyZ3VtZW50cyBtYXkgYmUgZXZhbHVhdGVkIG1vcmUgdGhhbiBvbmNlLgogICovCiAKLS8qIElOIGFyZSBzY2FsZWQgYWNvcmRpbmcgdG8gYnVpbHQtaW4gcmVzaXN0b3JzLiAgVGhlc2UgYXJlIHRoZQorLyogSU4gYXJlIHNjYWxlZCBhY2NvcmRpbmcgdG8gYnVpbHQtaW4gcmVzaXN0b3JzLiAgVGhlc2UgYXJlIHRoZQogICogICB2b2x0YWdlcyBjb3JyZXNwb25kaW5nIHRvIDMvNCBvZiBmdWxsIHNjYWxlICgxOTIgb3IgMHhjMCkKICAqICAgTk9URTogVGhlIC0xMlYgaW5wdXQgbmVlZHMgYW4gYWRkaXRpb25hbCBmYWN0b3IgdG8gYWNjb3VudAogICogICAgICBmb3IgdGhlIFZyZWYgcHVsbHVwIHJlc2lzdG9yLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTg1LmMgYi9kcml2ZXJzL2h3bW9uL2xtODUuYwppbmRleCBjZjQ3ZTZlLi5kYTcyZGMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtODUuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtODUuYwpAQCAtMTMwLDcgKzEzMCw3IEBACiAgICB0aGVzZSBtYWNyb3MgYXJlIGNhbGxlZDogYXJndW1lbnRzIG1heSBiZSBldmFsdWF0ZWQgbW9yZSB0aGFuIG9uY2UuCiAgKi8KIAotLyogSU4gYXJlIHNjYWxlZCBhY29yZGluZyB0byBidWlsdC1pbiByZXNpc3RvcnMgKi8KKy8qIElOIGFyZSBzY2FsZWQgYWNjb3JkaW5nIHRvIGJ1aWx0LWluIHJlc2lzdG9ycyAqLwogc3RhdGljIGNvbnN0IGludCBsbTg1X3NjYWxpbmdbXSA9IHsgIC8qIC4wMDEgVm9sdHMgKi8KIAkyNTAwLCAyMjUwLCAzMzAwLCA1MDAwLCAxMjAwMCwKIAkzMzAwLCAxNTAwLCAxODAwIC8qRU1DNkQxMDAqLwpAQCAtMTA5NCw2ICsxMDk0LDcgQEAKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfYXV0b19wd21fbWluY3RsLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2F1dG9fcHdtX21pbmN0bC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19hdXRvX3B3bV9taW5jdGwuZGV2X2F0dHIuYXR0ciwKKwlOVUxMCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBsbTg1X2dyb3VwX21pbmN0bCA9IHsKQEAgLTExMDQsNiArMTEwNSw3IEBACiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9hdXRvX3RlbXBfb2ZmLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9hdXRvX3RlbXBfb2ZmLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19hdXRvX3RlbXBfb2ZmLmRldl9hdHRyLmF0dHIsCisJTlVMTAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbG04NV9ncm91cF90ZW1wX29mZiA9IHsKQEAgLTEzMjksMTEgKzEzMzEsMTEgQEAKIAlpZiAoZGF0YS0+dHlwZSAhPSBlbWM2ZDEwM3MpIHsKIAkJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbG04NV9ncm91cF9taW5jdGwpOwogCQlpZiAoZXJyKQotCQkJZ290byBlcnJfa2ZyZWU7CisJCQlnb3RvIGVycl9yZW1vdmVfZmlsZXM7CiAJCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwKIAkJCQkJICZsbTg1X2dyb3VwX3RlbXBfb2ZmKTsKIAkJaWYgKGVycikKLQkJCWdvdG8gZXJyX2tmcmVlOworCQkJZ290byBlcnJfcmVtb3ZlX2ZpbGVzOwogCX0KIAogCS8qIFRoZSBBRFQ3NDYzLzY4IGhhdmUgYW4gb3B0aW9uYWwgVlJNIDEwIG1vZGUgd2hlcmUgcGluIDIxIGlzIHVzZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG05MC5jIGIvZHJpdmVycy9od21vbi9sbTkwLmMKaW5kZXggODEyNzgxYy4uMmY5NGY5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTkwLmMKKysrIGIvZHJpdmVycy9od21vbi9sbTkwLmMKQEAgLTQ5LDEwICs0OSwxMCBAQAogICogY2hpcHMsIGJ1dCBzdXBwb3J0IHRocmVlIHRlbXBlcmF0dXJlIHNlbnNvcnMgaW5zdGVhZCBvZiB0d28uIE1BWDY2OTUKICAqIGFuZCBNQVg2Njk2IG9ubHkgZGlmZmVyIGluIHRoZSBwaW5vdXQgc28gdGhleSBjYW4gYmUgdHJlYXRlZCBpZGVudGljYWxseS4KICAqCi0gKiBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIHRoZSBBRFQ3NDYxIGNoaXAgZnJvbSBBbmFsb2cgRGV2aWNlcy4KLSAqIEl0J3Mgc3VwcG9ydGVkIGluIGJvdGggY29tcGF0aWJpbGl0eSBhbmQgZXh0ZW5kZWQgbW9kZS4gSXQgaXMgbW9zdGx5Ci0gKiBjb21wYXRpYmxlIHdpdGggTE05MCBleGNlcHQgZm9yIGEgZGF0YSBmb3JtYXQgZGlmZmVyZW5jZSBmb3IgdGhlCi0gKiB0ZW1wZXJhdHVyZSB2YWx1ZSByZWdpc3RlcnMuCisgKiBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIEFEVDc0NjEgYW5kIEFEVDc0NjFBIGZyb20gQW5hbG9nIERldmljZXMgYXMgd2VsbCBhcworICogTkNUMTAwOCBmcm9tIE9OIFNlbWljb25kdWN0b3IuIFRoZSBjaGlwcyBhcmUgc3VwcG9ydGVkIGluIGJvdGggY29tcGF0aWJpbGl0eQorICogYW5kIGV4dGVuZGVkIG1vZGUuIFRoZXkgYXJlIG1vc3RseSBjb21wYXRpYmxlIHdpdGggTE05MCBleGNlcHQgZm9yIGEgZGF0YQorICogZm9ybWF0IGRpZmZlcmVuY2UgZm9yIHRoZSB0ZW1wZXJhdHVyZSB2YWx1ZSByZWdpc3RlcnMuCiAgKgogICogU2luY2UgdGhlIExNOTAgd2FzIHRoZSBmaXJzdCBjaGlwc2V0IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciwgbW9zdAogICogY29tbWVudHMgd2lsbCByZWZlciB0byB0aGlzIGNoaXBzZXQsIGJ1dCBhcmUgYWN0dWFsbHkgZ2VuZXJhbCBhbmQKQEAgLTg4LDkgKzg4LDEwIEBACiAgKiBBZGRyZXNzZXMgdG8gc2NhbgogICogQWRkcmVzcyBpcyBmdWxseSBkZWZpbmVkIGludGVybmFsbHkgYW5kIGNhbm5vdCBiZSBjaGFuZ2VkIGV4Y2VwdCBmb3IKICAqIE1BWDY2NTksIE1BWDY2ODAgYW5kIE1BWDY2ODEuCi0gKiBMTTg2LCBMTTg5LCBMTTkwLCBMTTk5LCBBRE0xMDMyLCBBRE0xMDMyLTEsIEFEVDc0NjEsIE1BWDY2NDksIE1BWDY2NTcsCi0gKiBNQVg2NjU4IGFuZCBXODNMNzcxIGhhdmUgYWRkcmVzcyAweDRjLgotICogQURNMTAzMi0yLCBBRFQ3NDYxLTIsIExNODktMSwgTE05OS0xIGFuZCBNQVg2NjQ2IGhhdmUgYWRkcmVzcyAweDRkLgorICogTE04NiwgTE04OSwgTE05MCwgTE05OSwgQURNMTAzMiwgQURNMTAzMi0xLCBBRFQ3NDYxLCBBRFQ3NDYxQSwgTUFYNjY0OSwKKyAqIE1BWDY2NTcsIE1BWDY2NTgsIE5DVDEwMDggYW5kIFc4M0w3NzEgaGF2ZSBhZGRyZXNzIDB4NGMuCisgKiBBRE0xMDMyLTIsIEFEVDc0NjEtMiwgQURUNzQ2MUEtMiwgTE04OS0xLCBMTTk5LTEsIE1BWDY2NDYsIGFuZCBOQ1QxMDA4RAorICogaGF2ZSBhZGRyZXNzIDB4NGQuCiAgKiBNQVg2NjQ3IGhhcyBhZGRyZXNzIDB4NGUuCiAgKiBNQVg2NjU5IGNhbiBoYXZlIGFkZHJlc3MgMHg0YywgMHg0ZCBvciAweDRlLgogICogTUFYNjY4MCBhbmQgTUFYNjY4MSBjYW4gaGF2ZSBhZGRyZXNzIDB4MTgsIDB4MTksIDB4MWEsIDB4MjksIDB4MmEsIDB4MmIsCkBAIC0xNzQsNiArMTc1LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBsbTkwX2lkW10gPSB7CiAJeyAiYWRtMTAzMiIsIGFkbTEwMzIgfSwKIAl7ICJhZHQ3NDYxIiwgYWR0NzQ2MSB9LAorCXsgImFkdDc0NjFhIiwgYWR0NzQ2MSB9LAogCXsgImxtOTAiLCBsbTkwIH0sCiAJeyAibG04NiIsIGxtODYgfSwKIAl7ICJsbTg5IiwgbG04NiB9LApAQCAtMTg4LDYgKzE5MCw3IEBACiAJeyAibWF4NjY4MSIsIG1heDY2ODAgfSwKIAl7ICJtYXg2Njk1IiwgbWF4NjY5NiB9LAogCXsgIm1heDY2OTYiLCBtYXg2Njk2IH0sCisJeyAibmN0MTAwOCIsIGFkdDc0NjEgfSwKIAl7ICJ3ODNsNzcxIiwgdzgzbDc3MSB9LAogCXsgfQogfTsKQEAgLTM1Niw3ICszNTksNyBAQAogCS8qCiAJICogVGhlcmUgaXMgYSB0cmljayBoZXJlLiBXZSBoYXZlIHRvIHJlYWQgdHdvIHJlZ2lzdGVycyB0byBoYXZlIHRoZQogCSAqIHNlbnNvciB0ZW1wZXJhdHVyZSwgYnV0IHdlIGhhdmUgdG8gYmV3YXJlIGEgY29udmVyc2lvbiBjb3VsZCBvY2N1cgotCSAqIGluYmV0d2VlbiB0aGUgcmVhZGluZ3MuIFRoZSBkYXRhc2hlZXQgc2F5cyB3ZSBzaG91bGQgZWl0aGVyIHVzZQorCSAqIGJldHdlZW4gdGhlIHJlYWRpbmdzLiBUaGUgZGF0YXNoZWV0IHNheXMgd2Ugc2hvdWxkIGVpdGhlciB1c2UKIAkgKiB0aGUgb25lLXNob3QgY29udmVyc2lvbiByZWdpc3Rlciwgd2hpY2ggd2UgZG9uJ3Qgd2FudCB0byBkbwogCSAqIChkaXNhYmxlcyBoYXJkd2FyZSBtb25pdG9yaW5nKSBvciBtb25pdG9yIHRoZSBidXN5IGJpdCwgd2hpY2ggaXMKIAkgKiBpbXBvc3NpYmxlICh3ZSBjYW4ndCByZWFkIHRoZSB2YWx1ZXMgYW5kIG1vbml0b3IgdGhhdCBiaXQgYXQgdGhlCkBAIC0xMTUzLDYgKzExNTYsMTEgQEAKIAkJICYmIChyZWdfY29uZmlnMSAmIDB4MUIpID09IDB4MDAKIAkJICYmIHJlZ19jb252cmF0ZSA8PSAweDBBKSB7CiAJCQluYW1lID0gImFkdDc0NjEiOworCQl9IGVsc2UKKwkJaWYgKGNoaXBfaWQgPT0gMHg1NyAvKiBBRFQ3NDYxQSwgTkNUMTAwOCAqLworCQkgJiYgKHJlZ19jb25maWcxICYgMHgxQikgPT0gMHgwMAorCQkgJiYgcmVnX2NvbnZyYXRlIDw9IDB4MEEpIHsKKwkJCW5hbWUgPSAiYWR0NzQ2MWEiOwogCQl9CiAJfSBlbHNlCiAJaWYgKG1hbl9pZCA9PSAweDREKSB7IC8qIE1heGltICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3BtYnVzX2NvcmUuYyBiL2RyaXZlcnMvaHdtb24vcG1idXNfY29yZS5jCmluZGV4IGVkZmI5MmUuLjE5NmZmYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vcG1idXNfY29yZS5jCisrKyBiL2RyaXZlcnMvaHdtb24vcG1idXNfY29yZS5jCkBAIC0xMzksNyArMTM5LDYgQEAKIAkgKiBBIHNpbmdsZSBzdGF0dXMgcmVnaXN0ZXIgY292ZXJzIG11bHRpcGxlIGF0dHJpYnV0ZXMsCiAJICogc28gd2Uga2VlcCB0aGVtIGFsbCB0b2dldGhlci4KIAkgKi8KLQl1OCBzdGF0dXNfYml0czsKIAl1OCBzdGF0dXNbUEJfTlVNX1NUQVRVU19SRUddOwogCiAJdTggY3VycnBhZ2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3NodDE1LmMgYi9kcml2ZXJzL2h3bW9uL3NodDE1LmMKaW5kZXggMWE5YzMyZC4uZjRlNjE3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9zaHQxNS5jCisrKyBiL2RyaXZlcnMvaHdtb24vc2h0MTUuYwpAQCAtNTIsNyArNTIsNyBAQAogI2RlZmluZSBTSFQxNV9UU1UJCTE1MAkvKiBkYXRhIHNldHVwIHRpbWUgKi8KIAogLyoqCi0gKiBzdHJ1Y3Qgc2h0MTVfdGVtcHBhaXIgLSBlbGVtZW50cyBvZiB2b2x0YWdlIGRlcGVuZGFudCB0ZW1wIGNhbGMKKyAqIHN0cnVjdCBzaHQxNV90ZW1wcGFpciAtIGVsZW1lbnRzIG9mIHZvbHRhZ2UgZGVwZW5kZW50IHRlbXAgY2FsYwogICogQHZkZDoJc3VwcGx5IHZvbHRhZ2UgaW4gbWljcm92b2x0cwogICogQGQxOgkJc2VlIGRhdGEgc2hlZXQKICAqLwpAQCAtMjUxLDcgKzI1MSw3IEBACiAJZW5hYmxlX2lycShncGlvX3RvX2lycShkYXRhLT5wZGF0YS0+Z3Bpb19kYXRhKSk7CiAJaWYgKGdwaW9fZ2V0X3ZhbHVlKGRhdGEtPnBkYXRhLT5ncGlvX2RhdGEpID09IDApIHsKIAkJZGlzYWJsZV9pcnFfbm9zeW5jKGdwaW9fdG9faXJxKGRhdGEtPnBkYXRhLT5ncGlvX2RhdGEpKTsKLQkJLyogT25seSByZWxldmFudCBpZiB0aGUgaW50ZXJydXB0IGhhc24ndCBvY2N1cmVkLiAqLworCQkvKiBPbmx5IHJlbGV2YW50IGlmIHRoZSBpbnRlcnJ1cHQgaGFzbid0IG9jY3VycmVkLiAqLwogCQlpZiAoIWF0b21pY19yZWFkKCZkYXRhLT5pbnRlcnJ1cHRfaGFuZGxlZCkpCiAJCQlzY2hlZHVsZV93b3JrKCZkYXRhLT5yZWFkX3dvcmspOwogCX0KQEAgLTQ1Miw3ICs0NTIsNyBAQAogCQkqLwogCQlhdG9taWNfc2V0KCZkYXRhLT5pbnRlcnJ1cHRfaGFuZGxlZCwgMCk7CiAJCWVuYWJsZV9pcnEoZ3Bpb190b19pcnEoZGF0YS0+cGRhdGEtPmdwaW9fZGF0YSkpOwotCQkvKiBJZiBzdGlsbCBub3Qgb2NjdXJlZCBvciBhbm90aGVyIGhhbmRsZXIgaGFzIGJlZW4gc2NoZWR1bGVkICovCisJCS8qIElmIHN0aWxsIG5vdCBvY2N1cnJlZCBvciBhbm90aGVyIGhhbmRsZXIgaGFzIGJlZW4gc2NoZWR1bGVkICovCiAJCWlmIChncGlvX2dldF92YWx1ZShkYXRhLT5wZGF0YS0+Z3Bpb19kYXRhKQogCQkgICAgfHwgYXRvbWljX3JlYWQoJmRhdGEtPmludGVycnVwdF9oYW5kbGVkKSkKIAkJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdG1wMTAyLmMgYi9kcml2ZXJzL2h3bW9uL3RtcDEwMi5jCmluZGV4IDkzMTg3YzMuLjViZDE5NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdG1wMTAyLmMKKysrIGIvZHJpdmVycy9od21vbi90bXAxMDIuYwpAQCAtMTY2LDcgKzE2Niw3IEBACiAKIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwKIAkJCQkgICAgIEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSkpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJhZGFwdGVyIGRvZXNudCBzdXBwb3J0IFNNQnVzIHdvcmQgIgorCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImFkYXB0ZXIgZG9lc24ndCBzdXBwb3J0IFNNQnVzIHdvcmQgIgogCQkJInRyYW5zYWN0aW9uc1xuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdHdsNDAzMC1tYWRjLWh3bW9uLmMgYi9kcml2ZXJzL2h3bW9uL3R3bDQwMzAtbWFkYy1od21vbi5jCmluZGV4IGRlNTgxOTEuLjU3MjQwNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdHdsNDAzMC1tYWRjLWh3bW9uLmMKKysrIGIvZHJpdmVycy9od21vbi90d2w0MDMwLW1hZGMtaHdtb24uYwpAQCAtOTgsNyArOTgsNiBAQAogc3RhdGljIGludCBfX2RldmluaXQgdHdsNDAzMF9tYWRjX2h3bW9uX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IHJldDsKLQlpbnQgc3RhdHVzOwogCXN0cnVjdCBkZXZpY2UgKmh3bW9uOwogCiAJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnR3bDQwMzBfbWFkY19ncm91cCk7CkBAIC0xMDcsNyArMTA2LDcgQEAKIAlod21vbiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2KTsKIAlpZiAoSVNfRVJSKGh3bW9uKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJod21vbl9kZXZpY2VfcmVnaXN0ZXIgZmFpbGVkLlxuIik7Ci0JCXN0YXR1cyA9IFBUUl9FUlIoaHdtb24pOworCQlyZXQgPSBQVFJfRVJSKGh3bW9uKTsKIAkJZ290byBlcnJfcmVnOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi93ODM3OTFkLmMgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5MWQuYwppbmRleCA0MDBhODhiLi4xN2NmMWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3c4Mzc5MWQuYworKysgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5MWQuYwpAQCAtNTU2LDcgKzU1Niw3IEBACiAKIC8qIE5vdGU6IHdlIHNhdmUgYW5kIHJlc3RvcmUgdGhlIGZhbiBtaW5pbXVtIGhlcmUsIGJlY2F1c2UgaXRzIHZhbHVlIGlzCiAgICBkZXRlcm1pbmVkIGluIHBhcnQgYnkgdGhlIGZhbiBkaXZpc29yLiAgVGhpcyBmb2xsb3dzIHRoZSBwcmluY2lwbGUgb2YKLSAgIGxlYXN0IHN1cHJpc2U7IHRoZSB1c2VyIGRvZXNuJ3QgZXhwZWN0IHRoZSBmYW4gbWluaW11bSB0byBjaGFuZ2UganVzdAorICAgbGVhc3Qgc3VycHJpc2U7IHRoZSB1c2VyIGRvZXNuJ3QgZXhwZWN0IHRoZSBmYW4gbWluaW11bSB0byBjaGFuZ2UganVzdAogICAgYmVjYXVzZSB0aGUgZGl2aXNvciBjaGFuZ2VkLiAqLwogc3RhdGljIHNzaXplX3Qgc3RvcmVfZmFuX2RpdihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi93ODM3OTJkLmMgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5MmQuYwppbmRleCA2Mzg0MWY4Li5mM2U3MTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3c4Mzc5MmQuYworKysgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5MmQuYwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAjZGVmaW5lIFRFTVAxX1RPX1JFRyh2YWwpCShTRU5TT1JTX0xJTUlUKCgodmFsKSA8IDAgPyAodmFsKSsweDEwMCoxMDAwIFwKIAkJCQkJOiAodmFsKSkgLyAxMDAwLCAwLCAweGZmKSkKICNkZWZpbmUgVEVNUDFfRlJPTV9SRUcodmFsKQkoKCh2YWwpICYgMHg4MCA/ICh2YWwpLTB4MTAwIDogKHZhbCkpICogMTAwMCkKLS8qIGZvciB0ZW1wMiBhbmQgdGVtcDMsIGJlY2F1c2UgdGhleSBuZWVkIGFkZHRpb25hbCByZXNvbHV0aW9uICovCisvKiBmb3IgdGVtcDIgYW5kIHRlbXAzLCBiZWNhdXNlIHRoZXkgbmVlZCBhZGRpdGlvbmFsIHJlc29sdXRpb24gKi8KICNkZWZpbmUgVEVNUF9BRERfRlJPTV9SRUcodmFsMSwgdmFsMikgXAogCSgoKCh2YWwxKSAmIDB4ODAgPyAodmFsMSktMHgxMDAgXAogCQk6ICh2YWwxKSkgKiAxMDAwKSArICgodmFsMiAmIDB4ODApID8gNTAwIDogMCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3c4Mzc5My5jIGIvZHJpdmVycy9od21vbi93ODM3OTMuYwppbmRleCBlM2JkZWRmLi44NTRmOTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3c4Mzc5My5jCisrKyBiL2RyaXZlcnMvaHdtb24vdzgzNzkzLmMKQEAgLTE5MjEsNyArMTkyMSw3IEBACiAJc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IGksIGo7CiAJLyoKLQkgICBUaGV5IGFyZSBzb21ld2hhdCAic3RhYmxlIiByZWdpc3RlcnMsIGFuZCB0byB1cGRhdGUgdGhlbSBldmVyeXRpbWUKKwkgICBUaGV5IGFyZSBzb21ld2hhdCAic3RhYmxlIiByZWdpc3RlcnMsIGFuZCB0byB1cGRhdGUgdGhlbSBldmVyeSB0aW1lCiAJICAgdGFrZXMgc28gbXVjaCB0aW1lLCBpdCdzIGp1c3Qgbm90IHdvcnRoeS4gVXBkYXRlIHRoZW0gaW4gYSBsb25nCiAJICAgaW50ZXJ2YWwgdG8gYXZvaWQgZXhjZXB0aW9uLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tYml0LmMgYi9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1iaXQuYwppbmRleCAzODMxOWE2Li5kNmQ1ODY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1iaXQuYworKysgYi9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1iaXQuYwpAQCAtMjMyLDkgKzIzMiwxNyBAQAogICogU2FuaXR5IGNoZWNrIGZvciB0aGUgYWRhcHRlciBoYXJkd2FyZSAtIGNoZWNrIHRoZSByZWFjdGlvbiBvZgogICogdGhlIGJ1cyBsaW5lcyBvbmx5IGlmIGl0IHNlZW1zIHRvIGJlIGlkbGUuCiAgKi8KLXN0YXRpYyBpbnQgdGVzdF9idXMoc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhICphZGFwLCBjaGFyICpuYW1lKQorc3RhdGljIGludCB0ZXN0X2J1cyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwKQogewotCWludCBzY2wsIHNkYTsKKwlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgKmFkYXAgPSBpMmNfYWRhcC0+YWxnb19kYXRhOworCWNvbnN0IGNoYXIgKm5hbWUgPSBpMmNfYWRhcC0+bmFtZTsKKwlpbnQgc2NsLCBzZGEsIHJldDsKKworCWlmIChhZGFwLT5wcmVfeGZlcikgeworCQlyZXQgPSBhZGFwLT5wcmVfeGZlcihpMmNfYWRhcCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJaWYgKGFkYXAtPmdldHNjbCA9PSBOVUxMKQogCQlwcl9pbmZvKCIlczogVGVzdGluZyBTREEgb25seSwgU0NMIGlzIG5vdCByZWFkYWJsZVxuIiwgbmFtZSk7CkBAIC0yOTcsMTEgKzMwNSwxOSBAQAogCQkgICAgICAgIndoaWxlIHB1bGxpbmcgU0NMIGhpZ2ghXG4iLCBuYW1lKTsKIAkJZ290byBiYWlsb3V0OwogCX0KKworCWlmIChhZGFwLT5wb3N0X3hmZXIpCisJCWFkYXAtPnBvc3RfeGZlcihpMmNfYWRhcCk7CisKIAlwcl9pbmZvKCIlczogVGVzdCBPS1xuIiwgbmFtZSk7CiAJcmV0dXJuIDA7CiBiYWlsb3V0OgogCXNkYWhpKGFkYXApOwogCXNjbGhpKGFkYXApOworCisJaWYgKGFkYXAtPnBvc3RfeGZlcikKKwkJYWRhcC0+cG9zdF94ZmVyKGkyY19hZGFwKTsKKwogCXJldHVybiAtRU5PREVWOwogfQogCkBAIC02MDcsNyArNjIzLDcgQEAKIAlpbnQgcmV0OwogCiAJaWYgKGJpdF90ZXN0KSB7Ci0JCXJldCA9IHRlc3RfYnVzKGJpdF9hZGFwLCBhZGFwLT5uYW1lKTsKKwkJcmV0ID0gdGVzdF9idXMoYWRhcCk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tcGNhLmMgYi9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2EuYwppbmRleCAyYjlhOGY1Li40Y2E5Y2Y5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2EuYworKysgYi9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2EuYwpAQCAtMzQzLDcgKzM0Myw3IEBACiAKIAlyZXQgPSBjdXJtc2c7CiAgb3V0OgotCURFQjEoIn19fSB0cmFuc2ZlcmVkICVkLyVkIG1lc3NhZ2VzLiAiCisJREVCMSgifX19IHRyYW5zZmVycmVkICVkLyVkIG1lc3NhZ2VzLiAiCiAJICAgICAic3RhdHVzIGlzICUjMDR4LiBjb250cm9sIGlzICUjMDR4XG4iLAogCSAgICAgY3VybXNnLCBudW0sIHBjYV9zdGF0dXMoYWRhcCksCiAJICAgICBwY2FfZ2V0X2NvbihhZGFwKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1MzUuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTUzNS5jCmluZGV4IDkwNmEzY2E1Li5kZDM2NDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1MzUuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1MzUuYwpAQCAtMjk1LDcgKzI5NSw3IEBACiAJfQogCiAJLyogVW5mb3J0dW5hdGVseSB0aGUgQUxJIFNNQiBjb250cm9sbGVyIG1hcHMgIm5vIHJlc3BvbnNlIiBhbmQgImJ1cwotCSAqIGNvbGxpc2lvbiIgaW50byBhIHNpbmdsZSBiaXQuIE5vIHJlcG9uc2UgaXMgdGhlIHVzdWFsIGNhc2Ugc28gZG9uJ3QKKwkgKiBjb2xsaXNpb24iIGludG8gYSBzaW5nbGUgYml0LiBObyByZXNwb25zZSBpcyB0aGUgdXN1YWwgY2FzZSBzbyBkb24ndAogCSAqIGRvIGEgcHJpbnRrLiAgVGhpcyBtZWFucyB0aGF0IGJ1cyBjb2xsaXNpb25zIGdvIHVucmVwb3J0ZWQuCiAJICovCiAJaWYgKHRlbXAgJiBBTEkxNTM1X1NUU19CVVNFUlIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTV4My5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNXgzLmMKaW5kZXggYjE0ZjZkNi4uODNlOGE2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNXgzLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNXgzLmMKQEAgLTMxOCw3ICszMTgsNyBAQAogCiAJLyoKIAkgIFVuZm9ydHVuYXRlbHkgdGhlIEFMSSBTTUIgY29udHJvbGxlciBtYXBzICJubyByZXNwb25zZSIgYW5kICJidXMKLQkgIGNvbGxpc2lvbiIgaW50byBhIHNpbmdsZSBiaXQuIE5vIHJlcG9uc2UgaXMgdGhlIHVzdWFsIGNhc2Ugc28gZG9uJ3QKKwkgIGNvbGxpc2lvbiIgaW50byBhIHNpbmdsZSBiaXQuIE5vIHJlc3BvbnNlIGlzIHRoZSB1c3VhbCBjYXNlIHNvIGRvbid0CiAJICBkbyBhIHByaW50ay4KIAkgIFRoaXMgbWVhbnMgdGhhdCBidXMgY29sbGlzaW9ucyBnbyB1bnJlcG9ydGVkLgogCSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRhdmluY2kuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGF2aW5jaS5jCmluZGV4IDU3OTVjODMuLmE3NmQ4NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGF2aW5jaS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGF2aW5jaS5jCkBAIC0zNTUsNyArMzU1LDcgQEAKIAkvKgogCSAqIFdyaXRlIG1vZGUgcmVnaXN0ZXIgZmlyc3QgYXMgbmVlZGVkIGZvciBjb3JyZWN0IGJlaGF2aW91cgogCSAqIG9uIE9NQVAtTDEzOCwgYnV0IGRvbid0IHNldCBTVFQgeWV0IHRvIGF2b2lkIGEgcmFjZSB3aXRoIFhSRFkKLQkgKiBvY2N1cmluZyBiZWZvcmUgd2UgaGF2ZSBsb2FkZWQgRFhSCisJICogb2NjdXJyaW5nIGJlZm9yZSB3ZSBoYXZlIGxvYWRlZCBEWFIKIAkgKi8KIAlkYXZpbmNpX2kyY193cml0ZV9yZWcoZGV2LCBEQVZJTkNJX0kyQ19NRFJfUkVHLCBmbGFnKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kZXNpZ253YXJlLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRlc2lnbndhcmUuYwppbmRleCBiNjY0ZWQ4Li5iN2E1MWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRlc2lnbndhcmUuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRlc2lnbndhcmUuYwpAQCAtMTc4LDcgKzE3OCw3IEBACiAgKiBAbG9jazogcHJvdGVjdCB0aGlzIHN0cnVjdCBhbmQgSU8gcmVnaXN0ZXJzCiAgKiBAY2xrOiBpbnB1dCByZWZlcmVuY2UgY2xvY2sKICAqIEBjbWRfZXJyOiBydW4gdGltZSBoYWR3YXJlIGVycm9yIGNvZGUKLSAqIEBtc2dzOiBwb2ludHMgdG8gYW4gYXJyYXkgb2YgbWVzc2FnZXMgY3VycmVudGx5IGJlaW5nIHRyYW5zZmVyZWQKKyAqIEBtc2dzOiBwb2ludHMgdG8gYW4gYXJyYXkgb2YgbWVzc2FnZXMgY3VycmVudGx5IGJlaW5nIHRyYW5zZmVycmVkCiAgKiBAbXNnc19udW06IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gbXNncwogICogQG1zZ193cml0ZV9pZHg6IHRoZSBlbGVtZW50IGluZGV4IG9mIHRoZSBjdXJyZW50IHR4IG1lc3NhZ2UgaW4gdGhlIG1zZ3MKICAqCWFycmF5CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWVsZWt0b3IuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZWxla3Rvci5jCmluZGV4IGU1YjFhM2IuLjM3ZTJlODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZWxla3Rvci5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZWxla3Rvci5jCkBAIC0yMiw3ICsyMiw3IEBACiAvKiBXaXRoIHNvbWUgY2hhbmdlcyBmcm9tIEt5w7ZzdGkgTcOkbGtraSA8a21hbGtraUBjYy5odXQuZmk+IGFuZCBldmVuCiAgICBGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+ICovCiAKLS8qIFBhcnRpYWx5IHJld3JpdGVuIGJ5IE9sZWcgSS4gVmRvdmlraW4gZm9yIG1tYXBwZWQgc3VwcG9ydCBvZgorLyogUGFydGlhbGx5IHJld3JpdGVuIGJ5IE9sZWcgSS4gVmRvdmlraW4gZm9yIG1tYXBwZWQgc3VwcG9ydCBvZgogICAgZm9yIEFscGhhIFByb2Nlc3NvciBJbmMuIFVQLTIwMDAoKykgYm9hcmRzICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKaW5kZXggZWQyZTBjNS4uNDU1ZTkwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKQEAgLTk2LDcgKzk2LDcgQEAKICNkZWZpbmUgU01CSFNUQ0ZHX1NNQl9TTUlfRU4JMgogI2RlZmluZSBTTUJIU1RDRkdfSTJDX0VOCTQKIAotLyogQXV4aWxsYXJ5IGNvbnRyb2wgcmVnaXN0ZXIgYml0cywgSUNINCsgb25seSAqLworLyogQXV4aWxpYXJ5IGNvbnRyb2wgcmVnaXN0ZXIgYml0cywgSUNINCsgb25seSAqLwogI2RlZmluZSBTTUJBVVhDVExfQ1JDCQkxCiAjZGVmaW5lIFNNQkFVWENUTF9FMzJCCQkyCiAKQEAgLTEzNCwxMCArMTM0LDE1IEBACiAJCQkJIFNNQkhTVFNUU19CVVNfRVJSIHwgU01CSFNUU1RTX0RFVl9FUlIgfCBcCiAJCQkJIFNNQkhTVFNUU19JTlRSKQogCisvKiBPbGRlciBkZXZpY2VzIGhhdmUgdGhlaXIgSUQgZGVmaW5lZCBpbiA8bGludXgvcGNpX2lkcy5oPiAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NPVUdBUlBPSU5UX1NNQlVTCTB4MWMyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1BBVFNCVVJHX1NNQlVTCTB4MWQyMgogLyogUGF0c2J1cmcgYWxzbyBoYXMgdGhyZWUgJ0ludGVncmF0ZWQgRGV2aWNlIEZ1bmN0aW9uJyBTTUJ1cyBjb250cm9sbGVycyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1BBVFNCVVJHX1NNQlVTX0lERjAJMHgxZDcwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUEFUU0JVUkdfU01CVVNfSURGMQkweDFkNzEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9QQVRTQlVSR19TTUJVU19JREYyCTB4MWQ3MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0RIODlYWENDX1NNQlVTCTB4MjMzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzVfMzQwMF9TRVJJRVNfU01CVVMJMHgzYjMwCiAKIHN0cnVjdCBpODAxX3ByaXYgewogCXN0cnVjdCBpMmNfYWRhcHRlciBhZGFwdGVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pYm1faWljLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlibV9paWMuYwppbmRleCBlNGY4OGRjLi4zYzExMGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlibV9paWMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlibV9paWMuYwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAJCWlmICh1bmxpa2VseShyZXQgPCAwKSkKIAkJCWJyZWFrOwogCQllbHNlIGlmICh1bmxpa2VseShyZXQgIT0gY291bnQpKXsKLQkJCURCRygiJWQ6IHhmZXJfYnl0ZXMsIHJlcXVlc3RlZCAlZCwgdHJhbnNmZXJlZCAlZFxuIiwKKwkJCURCRygiJWQ6IHhmZXJfYnl0ZXMsIHJlcXVlc3RlZCAlZCwgdHJhbnNmZXJyZWQgJWRcbiIsCiAJCQkJZGV2LT5pZHgsIGNvdW50LCByZXQpOwogCiAJCQkvKiBJZiBpdCdzIG5vdCBhIGxhc3QgcGFydCBvZiB4ZmVyLCBhYm9ydCBpdCAqLwpAQCAtNTkzLDcgKzU5Myw3IEBACiAJaWYgKHVubGlrZWx5KChpbl84KCZpaWMtPmV4dHN0cykgJiBFWFRTVFNfQkNTX01BU0spICE9IEVYVFNUU19CQ1NfRlJFRSkpewogCQlEQkcoIiVkOiBpaWNfeGZlciwgYnVzIGlzIG5vdCBmcmVlXG4iLCBkZXYtPmlkeCk7CiAKLQkJLyogVXN1YWxseSBpdCBtZWFucyBzb21ldGhpbmcgc2VyaW91cyBoYXMgaGFwcGVuZC4KKwkJLyogVXN1YWxseSBpdCBtZWFucyBzb21ldGhpbmcgc2VyaW91cyBoYXMgaGFwcGVuZWQuCiAJCSAqIFdlICpjYW5ub3QqIGhhdmUgdW5maW5pc2hlZCBwcmV2aW91cyB0cmFuc2ZlcgogCQkgKiBzbyBpdCBkb2Vzbid0IG1ha2UgYW55IHNlbnNlIHRvIHRyeSB0byBzdG9wIGl0LgogCQkgKiBQcm9iYWJseSB3ZSB3ZXJlIG5vdCBhYmxlIHRvIHJlY292ZXIgZnJvbSB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW50ZWwtbWlkLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWludGVsLW1pZC5jCmluZGV4IGM3MTQ5MjcuLmU4MjhhYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW50ZWwtbWlkLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pbnRlbC1taWQuYwpAQCAtMTcwLDggKzE3MCw4IEBACiAvKiBSYXcgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLwogI2RlZmluZSBJQ19SQVdfSU5UUl9TVEFUCTB4MzQJCS8qIFJlYWQgT25seSAqLwogI2RlZmluZSBHRU5fQ0FMTAkJKDEgPDwgMTEpCS8qIEdlbmVyYWwgY2FsbCAqLwotI2RlZmluZSBTVEFSVF9ERVQJCSgxIDw8IDEwKQkvKiAoUkUpU1RBUlQgb2NjdXJlZCAqLwotI2RlZmluZSBTVE9QX0RFVAkJKDEgPDwgOSkJLyogU1RPUCBvY2N1cmVkICovCisjZGVmaW5lIFNUQVJUX0RFVAkJKDEgPDwgMTApCS8qIChSRSlTVEFSVCBvY2N1cnJlZCAqLworI2RlZmluZSBTVE9QX0RFVAkJKDEgPDwgOSkJLyogU1RPUCBvY2N1cnJlZCAqLwogI2RlZmluZSBBQ1RJVklUWQkJKDEgPDwgOCkJLyogQnVzIGJ1c3kgKi8KICNkZWZpbmUgUlhfRE9ORQkJCSgxIDw8IDcpCS8qIE5vdCB1c2VkIGluIE1hc3RlciBtb2RlICovCiAjZGVmaW5lCVRYX0FCUlQJCQkoMSA8PCA2KQkvKiBUcmFuc21pdCBBYm9ydCAqLwpAQCAtMzc1LDcgKzM3NSw3IEBACiAgKiBJMkMgc2hvdWxkIGJlIGRpc2FibGVkIHByaW9yIHRvIG90aGVyIHJlZ2lzdGVyIG9wZXJhdGlvbi4gSWYgZmFpbGVkLCBhbgogICogZXJybm8gaXMgcmV0dXJuZWQuIE1hc2sgYW5kIENsZWFyIGFsbCBpbnRlcnJwdHMsIHRoaXMgc2hvdWxkIGJlIGRvbmUgYXQKICAqIGZpcnN0LiAgU2V0IGNvbW1vbiByZWdpc3RlcnMgd2hpY2ggd2lsbCBub3QgYmUgbW9kaWZpZWQgZHVyaW5nIG5vcm1hbAotICogdHJhbnNmZXJzLCBpbmNsdWRpbmc6IGNvbnRyb2xsIHJlZ2lzdGVyLCBGSUZPIHRocmVzaG9sZCBhbmQgY2xvY2sgZnJlcS4KKyAqIHRyYW5zZmVycywgaW5jbHVkaW5nOiBjb250cm9sIHJlZ2lzdGVyLCBGSUZPIHRocmVzaG9sZCBhbmQgY2xvY2sgZnJlcS4KICAqIENoZWNrIEFQQiBkYXRhIHdpZHRoIGF0IGxhc3QuCiAgKi8KIHN0YXRpYyBpbnQgaW50ZWxfbWlkX2kyY19od2luaXQoc3RydWN0IGludGVsX21pZF9pMmNfcHJpdmF0ZSAqaTJjKQpAQCAtNDU1LDcgKzQ1NSw3IEBACiAgKgogICogQnkgcmVhZGluZyByZWdpc3RlciBJQ19UWF9BQlJUX1NPVVJDRSwgdmFyaW91cyB0cmFuc2ZlciBlcnJvcnMgY2FuIGJlCiAgKiBkaXN0aW5ndXNoZWQuIEF0IHByZXNlbnQsIG5vIGNpcmN1bXN0YW5jZXMgaGF2ZSBiZWVuIGZvdW5kIG91dCB0aGF0Ci0gKiBtdWx0aXBsZSBlcnJvcnMgd291bGQgYmUgb2NjdXJlZCBzaW11dGFuZW91c2x5LCBzbyB3ZSBzaW1wbHkgdXNlIHRoZQorICogbXVsdGlwbGUgZXJyb3JzIHdvdWxkIGJlIG9jY3VycmVkIHNpbXV0YW5lb3VzbHksIHNvIHdlIHNpbXBseSB1c2UgdGhlCiAgKiByZWdpc3RlciB2YWx1ZSBkaXJlY3RseS4KICAqCiAgKiBBdCBsYXN0IHRoZSBlcnJvciBiaXRzIGFyZSBjbGVhcmVkLiAoTm90ZSBjbGVhciBBQlJUX1NCWVRFX05PUlNUUlQgYml0IG5lZWQKQEAgLTQ2OSw3ICs0NjksNyBAQAogCiAJLyogU2luZ2xlIHRyYW5zZmVyIGVycm9yIGNoZWNrOgogCSAqIEFjY29yZGluZyB0byBkYXRhYm9vaywgVFgvUlggRklGT3Mgd291bGQgYmUgZmx1c2hlZCB3aGVuCi0JICogdGhlIGFib3J0IGludGVycnVwdCBvY2N1cmVkLgorCSAqIHRoZSBhYm9ydCBpbnRlcnJ1cHQgb2NjdXJyZWQuCiAJICovCiAJaWYgKGFib3J0ICYgQUJSVF9NQVNURVJfRElTKQogCQlkZXZfZXJyKCZhZGFwLT5kZXYsCkBAIC01NjksNyArNTY5LDcgQEAKICAqIFJldHVybiBWYWx1ZXM6CiAgKiAwCWlmIHRoZSByZWFkIHRyYW5zZmVyIHN1Y2NlZWRzCiAgKiAtRVRJTUVET1VUCWlmIHdlIGNhbm5vdCByZWFkIHRoZSAicmF3IiBpbnRlcnJ1cHQgcmVnaXN0ZXIKLSAqIC1FSU5WQUwJaWYgYSB0cmFuc2ZlciBhYm9ydCBvY2N1cmVkCisgKiAtRUlOVkFMCWlmIGEgdHJhbnNmZXIgYWJvcnQgb2NjdXJyZWQKICAqCiAgKiBGb3IgZXZlcnkgYnl0ZSwgYSAiV1JJVEUiIGNvbW1hbmQgd2lsbCBiZSBsb2FkZWQgaW50byBJQ19EQVRBX0NNRCBwcmlvciB0bwogICogZGF0YSB0cmFuc2Zlci4gVGhlIGFjdHVhbCAid3JpdGUiIG9wZXJhdGlvbiB3aWxsIGJlIHBlcmZvcm1lZCB3aGVuIHRoZQpAQCAtNjk3LDcgKzY5Nyw3IEBACiAgKiBAbnVtOiBudW1iZXIgb2YgaTJjX21zZwogICoKICAqIFJldHVybiBWYWx1ZXM6Ci0gKiArCQludW1iZXIgb2YgbWVzc2FnZXMgdHJhbnNmZXJlZAorICogKwkJbnVtYmVyIG9mIG1lc3NhZ2VzIHRyYW5zZmVycmVkCiAgKiAtRVRJTUVET1VUCUlmIGNhbm5vdCBkaXNhYmxlIEkyQyBjb250cm9sbGVyIG9yIHJlYWQgSUNfU1RBVFVTCiAgKiAtRUlOVkFMCUlmIHRoZSBhZGRyZXNzIGluIGkyY19tc2cgaXMgaW52YWxpZAogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXNjaC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc2NoLmMKaW5kZXggZGRjMjU4ZS4uMDY4MmY4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc2NoLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc2NoLmMKQEAgLTE0MSw3ICsxNDEsNyBAQAogICogVGhpcyBpcyB0aGUgbWFpbiBhY2Nlc3MgZW50cnkgZm9yIGkyYy1zY2ggYWNjZXNzCiAgKiBhZGFwIGlzIGkyY19hZGFwdGVyIHBvaW50ZXIsIGFkZHIgaXMgdGhlIGkyYyBkZXZpY2UgYnVzIGFkZHJlc3MsIHJlYWRfd3JpdGUKICAqICgwIGZvciByZWFkIGFuZCAxIGZvciB3cml0ZSksIHNpemUgaXMgaTJjIHRyYW5zYWN0aW9uIHR5cGUgYW5kIGRhdGEgaXMgdGhlCi0gKiB1bmlvbiBvZiB0cmFuc2FjdGlvbiBmb3IgZGF0YSB0byBiZSB0cmFuc2ZlcmVkIG9yIGRhdGEgcmVhZCBmcm9tIGJ1cy4KKyAqIHVuaW9uIG9mIHRyYW5zYWN0aW9uIGZvciBkYXRhIHRvIGJlIHRyYW5zZmVycmVkIG9yIGRhdGEgcmVhZCBmcm9tIGJ1cy4KICAqIHJldHVybiAwIGZvciBzdWNjZXNzIGFuZCBvdGhlcnMgZm9yIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBzMzIgc2NoX2FjY2VzcyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHUxNiBhZGRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKaW5kZXggNzViOTg0Yy4uMTA3Mzk3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCkBAIC01NjAsMTUgKzU2MCwxOCBAQAogCS50aW1lb3V0ID0gSFosCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtcGNfaTJjX29mX21hdGNoW107CiBzdGF0aWMgaW50IF9fZGV2aW5pdCBmc2xfaTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wKQogeworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCXN0cnVjdCBtcGNfaTJjICppMmM7CiAJY29uc3QgdTMyICpwcm9wOwogCXUzMiBjbG9jayA9IE1QQ19JMkNfQ0xPQ0tfTEVHQUNZOwogCWludCByZXN1bHQgPSAwOwogCWludCBwbGVuOwogCi0JaWYgKCFvcC0+ZGV2Lm9mX21hdGNoKQorCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKG1wY19pMmNfb2ZfbWF0Y2gsICZvcC0+ZGV2KTsKKwlpZiAoIW1hdGNoKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWkyYyA9IGt6YWxsb2Moc2l6ZW9mKCppMmMpLCBHRlBfS0VSTkVMKTsKQEAgLTYwNSw4ICs2MDgsOCBAQAogCQkJY2xvY2sgPSAqcHJvcDsKIAl9CiAKLQlpZiAob3AtPmRldi5vZl9tYXRjaC0+ZGF0YSkgewotCQlzdHJ1Y3QgbXBjX2kyY19kYXRhICpkYXRhID0gb3AtPmRldi5vZl9tYXRjaC0+ZGF0YTsKKwlpZiAobWF0Y2gtPmRhdGEpIHsKKwkJc3RydWN0IG1wY19pMmNfZGF0YSAqZGF0YSA9IG1hdGNoLT5kYXRhOwogCQlkYXRhLT5zZXR1cChvcC0+ZGV2Lm9mX25vZGUsIGkyYywgY2xvY2ssIGRhdGEtPnByZXNjYWxlcik7CiAJfSBlbHNlIHsKIAkJLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXhzLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW14cy5jCmluZGV4IGNhZjk2ZGMuLjdlNzhmN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXhzLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1teHMuYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAJICogV2UgaGF2ZSB0byBjb3B5IHRoZSBzbGF2ZSBhZGRyZXNzICh1OCkgYW5kIGJ1ZmZlciAoYXJiaXRyYXJ5IG51bWJlcgogCSAqIG9mIHU4KSBpbnRvIHRoZSBkYXRhIHJlZ2lzdGVyICh1MzIpLiBUbyBhY2hpZXZlIHRoYXQsIHRoZSB1OCBhcmUgcHV0CiAJICogaW50byB0aGUgTVNCcyBvZiAnZGF0YScgd2hpY2ggaXMgdGhlbiBzaGlmdGVkIGZvciB0aGUgbmV4dCB1OC4gV2hlbgotCSAqIGFwcm9wcmlhdGUsICdkYXRhJyBpcyB3cml0dGVuIHRvIE1YU19JMkNfREFUQS4gU28sIHRoZSBmaXJzdCB1MzIKKwkgKiBhcHByb3ByaWF0ZSwgJ2RhdGEnIGlzIHdyaXR0ZW4gdG8gTVhTX0kyQ19EQVRBLiBTbywgdGhlIGZpcnN0IHUzMgogCSAqIGxvb2tzIGxpa2UgdGhpczoKIAkgKgogCSAqICAzICAgICAgICAgIDIgICAgICAgICAgMSAgICAgICAgICAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5vbWFkaWsuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbm9tYWRpay5jCmluZGV4IDU5NGVkNTAuLmUxMGU1Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbm9tYWRpay5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbm9tYWRpay5jCkBAIC0xMjYsOSArMTI2LDkgQEAKIC8qKgogICogc3RydWN0IGkyY19ubWtfY2xpZW50IC0gY2xpZW50IHNwZWNpZmljIGRhdGEKICAqIEBzbGF2ZV9hZHI6IDctYml0IHNsYXZlIGFkZHJlc3MKLSAqIEBjb3VudDogbm8uIGJ5dGVzIHRvIGJlIHRyYW5zZmVyZWQKKyAqIEBjb3VudDogbm8uIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkCiAgKiBAYnVmZmVyOiBjbGllbnQgZGF0YSBidWZmZXIKLSAqIEB4ZmVyX2J5dGVzOiBieXRlcyB0cmFuc2ZlcmVkIHRpbGwgbm93CisgKiBAeGZlcl9ieXRlczogYnl0ZXMgdHJhbnNmZXJyZWQgdGlsbCBub3cKICAqIEBvcGVyYXRpb246IGN1cnJlbnQgSTJDIG9wZXJhdGlvbgogICovCiBzdHJ1Y3QgaTJjX25ta19jbGllbnQgewpAQCAtMzMwLDcgKzMzMCw3IEBACiAJICogc2xzdSBkZWZpbmVzIHRoZSBkYXRhIHNldHVwIHRpbWUgYWZ0ZXIgU0NMIGNsb2NrCiAJICogc3RyZXRjaGluZyBpbiB0ZXJtcyBvZiBpMmMgY2xrIGN5Y2xlcy4gVGhlCiAJICogbmVlZGVkIHNldHVwIHRpbWUgZm9yIHRoZSB0aHJlZSBtb2RlcyBhcmUgMjUwbnMsCi0JICogMTAwbnMsIDEwbnMgcmVwZWN0aXZlbHkgdGh1cyBsZWFkaW5nIHRvIHRoZSB2YWx1ZXMKKwkgKiAxMDBucywgMTBucyByZXNwZWN0aXZlbHkgdGh1cyBsZWFkaW5nIHRvIHRoZSB2YWx1ZXMKIAkgKiBvZiAxNCwgNiwgMiBmb3IgYSA0OCBNSHogaTJjIGNsay4KIAkgKi8KIAl3cml0ZWwoZGV2LT5jZmcuc2xzdSA8PCAxNiwgZGV2LT52aXJ0YmFzZSArIEkyQ19TQ1IpOwpAQCAtMzY0LDcgKzM2NCw3IEBACiAJLyoKIAkgKiBzZXQgdGhlIHNwZWVkIG1vZGUuIEN1cnJlbnRseSB3ZSBzdXBwb3J0CiAJICogb25seSBzdGFuZGFyZCBhbmQgZmFzdCBtb2RlIG9mIG9wZXJhdGlvbgotCSAqIFRPRE8gLSBzdXBwb3J0IGZvciBmYXN0IG1vZGUgcGx1cyAodXB0byAxTWIvcykKKwkgKiBUT0RPIC0gc3VwcG9ydCBmb3IgZmFzdCBtb2RlIHBsdXMgKHVwIHRvIDFNYi9zKQogCSAqIGFuZCBoaWdoIHNwZWVkICh1cCB0byAzLjQgTWIvcykKIAkgKi8KIAlpZiAoZGV2LT5jZmcuc20gPiBJMkNfRlJFUV9NT0RFX0ZBU1QpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMKaW5kZXggMGViMTUxNS4uMmRiYmExNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMKQEAgLTEsNyArMSw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKgogICogaTJjLXBhcnBvcnQuYyBJMkMgYnVzIG92ZXIgcGFyYWxsZWwgcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqCi0gICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMCBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KKyAgIENvcHlyaWdodCAoQykgMjAwMy0yMDExIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogICAgCiAgICBCYXNlZCBvbiBvbGRlciBpMmMtcGhpbGlwcy1wYXIuYyBkcml2ZXIKICAgIENvcHlyaWdodCAoQykgMTk5NS0yMDAwIFNpbW9uIEcuIFZvZ2wKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtc21idXMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSAiaTJjLXBhcnBvcnQuaCIKIAogLyogLS0tLS0gRGV2aWNlIGxpc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00MywxMCArNDUsMTEgQEAKIAlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgYWxnb19kYXRhOwogCXN0cnVjdCBpMmNfc21idXNfYWxlcnRfc2V0dXAgYWxlcnRfZGF0YTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqYXJhOwotCXN0cnVjdCBpMmNfcGFyICpuZXh0OworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX3BhciAqYWRhcHRlcl9saXN0Oworc3RhdGljIExJU1RfSEVBRChhZGFwdGVyX2xpc3QpOworc3RhdGljIERFRklORV9NVVRFWChhZGFwdGVyX2xpc3RfbG9jayk7CiAKIC8qIC0tLS0tIExvdy1sZXZlbCBwYXJhbGxlbCBwb3J0IGFjY2VzcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0yMjgsOCArMjMxLDkgQEAKIAl9CiAKIAkvKiBBZGQgdGhlIG5ldyBhZGFwdGVyIHRvIHRoZSBsaXN0ICovCi0JYWRhcHRlci0+bmV4dCA9IGFkYXB0ZXJfbGlzdDsKLQlhZGFwdGVyX2xpc3QgPSBhZGFwdGVyOworCW11dGV4X2xvY2soJmFkYXB0ZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZhZGFwdGVyLT5ub2RlLCAmYWRhcHRlcl9saXN0KTsKKwltdXRleF91bmxvY2soJmFkYXB0ZXJfbGlzdF9sb2NrKTsKICAgICAgICAgcmV0dXJuOwogCiBFUlJPUjE6CkBAIC0yNDEsMTEgKzI0NSwxMSBAQAogCiBzdGF0aWMgdm9pZCBpMmNfcGFycG9ydF9kZXRhY2ggKHN0cnVjdCBwYXJwb3J0ICpwb3J0KQogewotCXN0cnVjdCBpMmNfcGFyICphZGFwdGVyLCAqcHJldjsKKwlzdHJ1Y3QgaTJjX3BhciAqYWRhcHRlciwgKl9uOwogCiAJLyogV2FsayB0aGUgbGlzdCAqLwotCWZvciAocHJldiA9IE5VTEwsIGFkYXB0ZXIgPSBhZGFwdGVyX2xpc3Q7IGFkYXB0ZXI7Ci0JICAgICBwcmV2ID0gYWRhcHRlciwgYWRhcHRlciA9IGFkYXB0ZXItPm5leHQpIHsKKwltdXRleF9sb2NrKCZhZGFwdGVyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGFkYXB0ZXIsIF9uLCAmYWRhcHRlcl9saXN0LCBub2RlKSB7CiAJCWlmIChhZGFwdGVyLT5wZGV2LT5wb3J0ID09IHBvcnQpIHsKIAkJCWlmIChhZGFwdGVyLT5hcmEpIHsKIAkJCQlwYXJwb3J0X2Rpc2FibGVfaXJxKHBvcnQpOwpAQCAtMjU5LDE0ICsyNjMsMTEgQEAKIAkJCQkKIAkJCXBhcnBvcnRfcmVsZWFzZShhZGFwdGVyLT5wZGV2KTsKIAkJCXBhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UoYWRhcHRlci0+cGRldik7Ci0JCQlpZiAocHJldikKLQkJCQlwcmV2LT5uZXh0ID0gYWRhcHRlci0+bmV4dDsKLQkJCWVsc2UKLQkJCQlhZGFwdGVyX2xpc3QgPSBhZGFwdGVyLT5uZXh0OworCQkJbGlzdF9kZWwoJmFkYXB0ZXItPm5vZGUpOwogCQkJa2ZyZWUoYWRhcHRlcik7Ci0JCQlyZXR1cm47CiAJCX0KIAl9CisJbXV0ZXhfdW5sb2NrKCZhZGFwdGVyX2xpc3RfbG9jayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGFycG9ydF9kcml2ZXIgaTJjX3BhcnBvcnRfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wbnguYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG54LmMKaW5kZXggYTk3ZTNmZS4uMDRiZTlmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wbnguYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBueC5jCkBAIC02NSw3ICs2NSw3IEBACiAJCWppZmZpZXMsIGV4cGlyZXMpOwogCiAJdGltZXItPmV4cGlyZXMgPSBqaWZmaWVzICsgZXhwaXJlczsKLQl0aW1lci0+ZGF0YSA9ICh1bnNpZ25lZCBsb25nKSZhbGdfZGF0YTsKKwl0aW1lci0+ZGF0YSA9ICh1bnNpZ25lZCBsb25nKWFsZ19kYXRhOwogCiAJYWRkX3RpbWVyKHRpbWVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtczYwMDAuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtczYwMDAuYwppbmRleCBjYWRjMDIxLi5jYjVkMDFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXM2MDAwLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zNjAwMC5jCkBAIC0zMTgsNyArMzE4LDcgQEAKIAlyYyA9IHJlcXVlc3RfaXJxKGlmYWNlLT5pcnEsIHM2aTJjX2ludGVycnVwdF9lbnRyeSwKIAkJCSBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBpZmFjZSk7CiAJaWYgKHJjKSB7Ci0JCWRldl9lcnIoJnBfYWRhcC0+ZGV2LCAiczZpMmM6IGNhbnQgZ2V0IElSUSAlZFxuIiwgaWZhY2UtPmlycSk7CisJCWRldl9lcnIoJnBfYWRhcC0+ZGV2LCAiczZpMmM6IGNhbid0IGdldCBJUlEgJWRcbiIsIGlmYWNlLT5pcnEpOwogCQlnb3RvIGVycl9jbGtfZGlzOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zdHUzMDAuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc3R1MzAwLmMKaW5kZXggMjY2MTM1ZC4uOTk4Nzk2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zdHUzMDAuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXN0dTMwMC5jCkBAIC00OTcsNyArNDk3LDcgQEAKIAl1MzIgdmFsOwogCWludCBpID0gMDsKIAotCS8qIExvY2F0ZSB0aGUgYXByb3ByaWF0ZSBjbG9jayBzZXR0aW5nICovCisJLyogTG9jYXRlIHRoZSBhcHByb3ByaWF0ZSBjbG9jayBzZXR0aW5nICovCiAJd2hpbGUgKGkgPCBBUlJBWV9TSVpFKHN0dTMwMF9jbGt0YWJsZSkgLSAxICYmCiAJICAgICAgIHN0dTMwMF9jbGt0YWJsZVtpXS5yYXRlIDwgY2xrcmF0ZSkKIAkJaSsrOwpAQCAtNjQ0LDcgKzY0NCw3IEBACiAJcmV0ID0gc3R1MzAwX2F3YWl0X2V2ZW50KGRldiwgU1RVMzAwX0VWRU5UXzYpOwogCiAJLyoKLQkgKiBDbGVhciBhbnkgcGVuZGluZyBFVkVOVCA2IG5vIG1hdHRlciB3aGF0IGhhcHBlbmQgZHVyaW5nCisJICogQ2xlYXIgYW55IHBlbmRpbmcgRVZFTlQgNiBubyBtYXR0ZXIgd2hhdCBoYXBwZW5lZCBkdXJpbmcKIAkgKiBhd2FpdF9ldmVudC4KIAkgKi8KIAl2YWwgPSBzdHUzMDBfcjgoZGV2LT52aXJ0YmFzZSArIEkyQ19DUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXRlZ3JhLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXRlZ3JhLmMKaW5kZXggMzkyMWY2Ni4uYjRhYjM5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy10ZWdyYS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdGVncmEuYwpAQCAtMzg2LDcgKzM4Niw3IEBACiAJCWR2Y193cml0ZWwoaTJjX2RldiwgRFZDX1NUQVRVU19JMkNfRE9ORV9JTlRSLCBEVkNfU1RBVFVTKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiBlcnI6Ci0JLyogQW4gZXJyb3Igb2NjdXJlZCwgbWFzayBhbGwgaW50ZXJydXB0cyAqLworCS8qIEFuIGVycm9yIG9jY3VycmVkLCBtYXNrIGFsbCBpbnRlcnJ1cHRzICovCiAJdGVncmFfaTJjX21hc2tfaXJxKGkyY19kZXYsIEkyQ19JTlRfTk9fQUNLIHwgSTJDX0lOVF9BUkJJVFJBVElPTl9MT1NUIHwKIAkJSTJDX0lOVF9QQUNLRVRfWEZFUl9DT01QTEVURSB8IEkyQ19JTlRfVFhfRklGT19EQVRBX1JFUSB8CiAJCUkyQ19JTlRfUlhfRklGT19EQVRBX1JFUSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhpaWMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGlpYy5jCmluZGV4IDlmYmQ3ZTYuLmU5ZDVmZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGlpYy5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGlpYy5jCkBAIC0yMSw3ICsyMSw3IEBACiAgKiB0byB0aGUgYXV0b21vdGl2ZSBkZXZlbG9wbWVudCBib2FyZCBSdXNzZWxsdmlsbGUuIFRoZSBjb3B5cmlnaHQgaG9sZGVyCiAgKiBhcyBzZWVuIGluIHRoZSBoZWFkZXIgaXMgSW50ZWwgY29ycG9yYXRpb24uCiAgKiBNb2NlYW4gTGFib3JhdG9yaWVzIGZvcmtlZCBvZmYgdGhlIEdOVS9MaW51eCBwbGF0Zm9ybSB3b3JrIGludG8gYQotICogc2VwYXJhdGUgY29tcGFueSBjYWxsZWQgUGVsYWdpY29yZSBBQiwgd2hpY2ggY29tbWl0ZWQgdGhlIGNvZGUgdG8gdGhlCisgKiBzZXBhcmF0ZSBjb21wYW55IGNhbGxlZCBQZWxhZ2ljb3JlIEFCLCB3aGljaCBjb21taXR0ZWQgdGhlIGNvZGUgdG8gdGhlCiAgKiBrZXJuZWwuCiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKaW5kZXggZTVmNzZhMC4uOWE1ODk5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCkBAIC0zNDgsNyArMzQ4LDcgQEAKIAogCiAvKiBUaGlzIGlzIGEgcGVybWlzc2l2ZSBhZGRyZXNzIHZhbGlkaXR5IGNoZWNrLCBJMkMgYWRkcmVzcyBtYXAgY29uc3RyYWludHMKLSAqIGFyZSBwdXJwb3NlZGx5IG5vdCBlbmZvcmNlZCwgZXhjZXB0IGZvciB0aGUgZ2VuZXJhbCBjYWxsIGFkZHJlc3MuICovCisgKiBhcmUgcHVycG9zZWx5IG5vdCBlbmZvcmNlZCwgZXhjZXB0IGZvciB0aGUgZ2VuZXJhbCBjYWxsIGFkZHJlc3MuICovCiBzdGF0aWMgaW50IGkyY19jaGVja19jbGllbnRfYWRkcl92YWxpZGl0eShjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCWlmIChjbGllbnQtPmZsYWdzICYgSTJDX0NMSUVOVF9URU4pIHsKQEAgLTc5Nyw3ICs3OTcsOCBAQAogCiAJLyogTGV0IGxlZ2FjeSBkcml2ZXJzIHNjYW4gdGhpcyBidXMgZm9yIG1hdGNoaW5nIGRldmljZXMgKi8KIAlpZiAoZHJpdmVyLT5hdHRhY2hfYWRhcHRlcikgewotCQlkZXZfd2FybigmYWRhcC0+ZGV2LCAiYXR0YWNoX2FkYXB0ZXIgbWV0aG9kIGlzIGRlcHJlY2F0ZWRcbiIpOworCQlkZXZfd2FybigmYWRhcC0+ZGV2LCAiJXM6IGF0dGFjaF9hZGFwdGVyIG1ldGhvZCBpcyBkZXByZWNhdGVkXG4iLAorCQkJIGRyaXZlci0+ZHJpdmVyLm5hbWUpOwogCQlkZXZfd2FybigmYWRhcC0+ZGV2LCAiUGxlYXNlIHVzZSBhbm90aGVyIHdheSB0byBpbnN0YW50aWF0ZSAiCiAJCQkgInlvdXIgaTJjX2NsaWVudFxuIik7CiAJCS8qIFdlIGlnbm9yZSB0aGUgcmV0dXJuIGNvZGU7IGlmIGl0IGZhaWxzLCB0b28gYmFkICovCkBAIC05ODQsNyArOTg1LDggQEAKIAogCWlmICghZHJpdmVyLT5kZXRhY2hfYWRhcHRlcikKIAkJcmV0dXJuIDA7Ci0JZGV2X3dhcm4oJmFkYXB0ZXItPmRldiwgImRldGFjaF9hZGFwdGVyIG1ldGhvZCBpcyBkZXByZWNhdGVkXG4iKTsKKwlkZXZfd2FybigmYWRhcHRlci0+ZGV2LCAiJXM6IGRldGFjaF9hZGFwdGVyIG1ldGhvZCBpcyBkZXByZWNhdGVkXG4iLAorCQkgZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAJcmVzID0gZHJpdmVyLT5kZXRhY2hfYWRhcHRlcihhZGFwdGVyKTsKIAlpZiAocmVzKQogCQlkZXZfZXJyKCZhZGFwdGVyLT5kZXYsICJkZXRhY2hfYWRhcHRlciBmYWlsZWQgKCVkKSAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9jeTgyYzY5My5jIGIvZHJpdmVycy9pZGUvY3k4MmM2OTMuYwppbmRleCA5MzgzZjY3Li4zYmU2MGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9jeTgyYzY5My5jCisrKyBiL2RyaXZlcnMvaWRlL2N5ODJjNjkzLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAogCS8qCiAJICogbm90ZTogYmVsb3cgd2Ugc2V0IHRoZSB2YWx1ZSBmb3IgQnVzIE1hc3RlciBJREUgVGltZU91dCBSZWdpc3RlcgotCSAqIEknbSBub3QgYWJzb2x1dGx5IHN1cmUgd2hhdCB0aGlzIGRvZXMsIGJ1dCBpdCBzb2x2ZWQgbXkgcHJvYmxlbQorCSAqIEknbSBub3QgYWJzb2x1dGVseSBzdXJlIHdoYXQgdGhpcyBkb2VzLCBidXQgaXQgc29sdmVkIG15IHByb2JsZW0KIAkgKiB3aXRoIElERSBETUEgYW5kIHNvdW5kLCBzbyBJIG5vdyBjYW4gcGxheSBzb3VuZCBhbmQgd29yayB3aXRoCiAJICogbXkgSURFIGRyaXZlciBhdCB0aGUgc2FtZSB0aW1lIDotKQogCSAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtY2QuYyBiL2RyaXZlcnMvaWRlL2lkZS1jZC5jCmluZGV4IGZkMWUxMTcuLmE1ZWM1YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1jZC5jCkBAIC0xNzgyLDcgKzE3ODIsNiBAQAogCWlkZV9jZF9yZWFkX3RvYyhkcml2ZSwgJnNlbnNlKTsKIAlnLT5mb3BzID0gJmlkZWNkX29wczsKIAlnLT5mbGFncyB8PSBHRU5IRF9GTF9SRU1PVkFCTEU7Ci0JZy0+ZXZlbnRzID0gRElTS19FVkVOVF9NRURJQV9DSEFOR0U7CiAJYWRkX2Rpc2soZyk7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jZF9pb2N0bC5jIGIvZHJpdmVycy9pZGUvaWRlLWNkX2lvY3RsLmMKaW5kZXggMmE2YmM1MC4uMDJjYWE3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNkX2lvY3RsLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNkX2lvY3RsLmMKQEAgLTc5LDYgKzc5LDEyIEBACiAJcmV0dXJuIENEU19EUklWRV9OT1RfUkVBRFk7CiB9CiAKKy8qCisgKiBpZGUtY2QgYWx3YXlzIGdlbmVyYXRlcyBtZWRpYSBjaGFuZ2VkIGV2ZW50IGlmIG1lZGlhIGlzIG1pc3NpbmcsIHdoaWNoCisgKiBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIHVzZSBmb3IgcHJvcGVyIGV2ZW50IHJlcG9ydGluZywgc28gZGlzay0+ZXZlbnRzCisgKiBpcyBjbGVhcmVkIHRvIDAgYW5kIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gaXMgdXNlZCBvbmx5IHRvIHRyaWdnZXIKKyAqIHJldmFsaWRhdGlvbiBhbmQgbmV2ZXIgcHJvcGFnYXRlZCB0byB1c2VybGFuZC4KKyAqLwogdW5zaWduZWQgaW50IGlkZV9jZHJvbV9jaGVja19ldmVudHNfcmVhbChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKIAkJCQkJIHVuc2lnbmVkIGludCBjbGVhcmluZywgaW50IHNsb3RfbnIpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKaW5kZXggNTQwNmI2ZS4uNWE3MDJkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiBzdGF0aWMgdm9pZCBpZGVfZmxvcHB5X3JlcG9ydF9lcnJvcihzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHksCiAJCQkJICAgIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQogewotCS8qIHN1cHJlc3MgZXJyb3IgbWVzc2FnZXMgcmVzdWx0aW5nIGZyb20gTWVkaXVtIG5vdCBwcmVzZW50ICovCisJLyogc3VwcHJlc3MgZXJyb3IgbWVzc2FnZXMgcmVzdWx0aW5nIGZyb20gTWVkaXVtIG5vdCBwcmVzZW50ICovCiAJaWYgKGZsb3BweS0+c2Vuc2Vfa2V5ID09IDB4MDIgJiYKIAkgICAgZmxvcHB5LT5hc2MgICAgICAgPT0gMHgzYSAmJgogCSAgICBmbG9wcHktPmFzY3EgICAgICA9PSAweDAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWdkLmMgYi9kcml2ZXJzL2lkZS9pZGUtZ2QuYwppbmRleCBjNGZmZDQ4Li43MGVhODc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZ2QuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZ2QuYwpAQCAtMjk4LDYgKzI5OCwxMiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgaXMgdXNlZCB0byBmb3JjZSByZXZhbGlkYXRpb24gb24gdGhlIGZpcnN0IG9wZW4gb24KKwkgKiByZW1vdmVhYmxlIGRldmljZXMsIGFuZCBuZXZlciBnZXRzIHJlcG9ydGVkIHRvIHVzZXJsYW5kIGFzCisJICogZ2VuaGQtPmV2ZW50cyBpcyAwLiAgVGhpcyBpcyBpbnRlbmRlZCBhcyByZW1vdmVhYmxlIGlkZSBkaXNrCisJICogY2FuJ3QgcmVhbGx5IGRldGVjdCBNRURJQV9DSEFOR0UgZXZlbnRzLgorCSAqLwogCXJldCA9IGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTUVESUFfQ0hBTkdFRDsKIAlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfTUVESUFfQ0hBTkdFRDsKIApAQCAtNDEzLDcgKzQxOSw2IEBACiAJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUkVNT1ZBQkxFKQogCQlnLT5mbGFncyA9IEdFTkhEX0ZMX1JFTU9WQUJMRTsKIAlnLT5mb3BzID0gJmlkZV9nZF9vcHM7Ci0JZy0+ZXZlbnRzID0gRElTS19FVkVOVF9NRURJQV9DSEFOR0U7CiAJYWRkX2Rpc2soZyk7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jIGIvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMKaW5kZXggMzRiOTg3Mi4uNjAwYzg5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMKQEAgLTIwMSw3ICsyMDEsNyBAQAogCXU4IHN0YXQ7CiAKIAkvKgotCSAqIExhc3Qgc2VjdG9yIHdhcyB0cmFuc2ZlcmVkLCB3YWl0IHVudGlsIGRldmljZSBpcyByZWFkeS4gIFRoaXMgY2FuCisJICogTGFzdCBzZWN0b3Igd2FzIHRyYW5zZmVycmVkLCB3YWl0IHVudGlsIGRldmljZSBpcyByZWFkeS4gIFRoaXMgY2FuCiAJICogdGFrZSB1cCB0byA2IG1zIG9uIHNvbWUgQVRBUEkgZGV2aWNlcywgc28gd2Ugd2lsbCB3YWl0IG1heCAxMCBtcy4KIAkgKi8KIAlmb3IgKHJldHJpZXMgPSAwOyByZXRyaWVzIDwgMTAwMDsgcmV0cmllcysrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9waWl4LmMgYi9kcml2ZXJzL2lkZS9waWl4LmMKaW5kZXggMWJkY2E0OS4uYjU5ZDA0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGlpeC5jCisrKyBiL2RyaXZlcnMvaWRlL3BpaXguYwpAQCAtOCw4ICs4LDggQEAKICAqCiAgKiBEb2N1bWVudGF0aW9uOgogICoKLSAqCVB1YmxpY2FsbHkgYXZhaWxhYmxlIGZyb20gSW50ZWwgd2ViIHNpdGUuIEVycmF0YSBkb2N1bWVudGF0aW9uCi0gKiBpcyBhbHNvIHB1YmxpY2FsbHkgYXZhaWxhYmxlLiBBcyBhbiBhaWRlIHRvIGFueW9uZSBoYWNraW5nIG9uIHRoaXMKKyAqCVB1YmxpY2x5IGF2YWlsYWJsZSBmcm9tIEludGVsIHdlYiBzaXRlLiBFcnJhdGEgZG9jdW1lbnRhdGlvbgorICogaXMgYWxzbyBwdWJsaWNseSBhdmFpbGFibGUuIEFzIGFuIGFpZGUgdG8gYW55b25lIGhhY2tpbmcgb24gdGhpcwogICogZHJpdmVyIHRoZSBsaXN0IG9mIGVycmF0YSB0aGF0IGFyZSByZWxldmFudCBpcyBiZWxvdy5nb2luZyBiYWNrIHRvCiAgKiBQSUlYNC4gT2xkZXIgZGV2aWNlIGRvY3VtZW50YXRpb24gaXMgbm93IGEgYml0IHRyaWNreSB0byBmaW5kLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NpczU1MTMuYyBiL2RyaXZlcnMvaWRlL3NpczU1MTMuYwppbmRleCBkYjdmNGU3Li40YTAwMjI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zaXM1NTEzLmMKKysrIGIvZHJpdmVycy9pZGUvc2lzNTUxMy5jCkBAIC01Myw3ICs1Myw3IEBACiAKICNkZWZpbmUgRFJWX05BTUUgInNpczU1MTMiCiAKLS8qIHJlZ2lzdGVycyBsYXlvdXQgYW5kIGluaXQgdmFsdWVzIGFyZSBjaGlwc2V0IGZhbWlseSBkZXBlbmRhbnQgKi8KKy8qIHJlZ2lzdGVycyBsYXlvdXQgYW5kIGluaXQgdmFsdWVzIGFyZSBjaGlwc2V0IGZhbWlseSBkZXBlbmRlbnQgKi8KIAogI2RlZmluZSBBVEFfMTYJCTB4MDEKICNkZWZpbmUgQVRBXzMzCQkweDAyCkBAIC00MDYsNyArNDA2LDcgQEAKIAkJCQkJcGNpX25hbWUoZGV2KSk7CiAJCQkJY2hpcHNldF9mYW1pbHkgPSBBVEFfMTMzOwogCi0JCQkJLyogQ2hlY2sgZm9yIDU1MTMgY29tcGFiaWxpdHkgbWFwcGluZworCQkJCS8qIENoZWNrIGZvciA1NTEzIGNvbXBhdGliaWxpdHkgbWFwcGluZwogCQkJCSAqIFdlIG11c3QgdXNlIHRoaXMsIGVsc2UgdGhlIHBvcnQgZW5hYmxlZCBjb2RlIHdpbGwgZmFpbCwKIAkJCQkgKiBhcyBpdCBleHBlY3RzIHRoZSBlbmFibGViaXRzIGF0IDB4NGEuCiAJCQkJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS90cmlmbGV4LmMgYi9kcml2ZXJzL2lkZS90cmlmbGV4LmMKaW5kZXggNzk1MzQ0Ny4uZTUzYTFiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvdHJpZmxleC5jCisrKyBiL2RyaXZlcnMvaWRlL3RyaWZsZXguYwpAQCAtMjIsNyArMjIsNyBAQAogICogTG9vc2VseSBiYXNlZCBvbiB0aGUgcGlpeCAmIHN2d2tzIGRyaXZlcnMuCiAgKgogICogRG9jdW1lbnRhdGlvbjoKLSAqCU5vdCBwdWJsaWNhbGx5IGF2YWlsYWJsZS4KKyAqCU5vdCBwdWJsaWNseSBhdmFpbGFibGUuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS92aWE4MmN4eHguYyBiL2RyaXZlcnMvaWRlL3ZpYTgyY3h4eC5jCmluZGV4IGQyYTA5OTcuLmY0NmY0OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3ZpYTgyY3h4eC5jCisrKyBiL2RyaXZlcnMvaWRlL3ZpYTgyY3h4eC5jCkBAIC0xNCw3ICsxNCw3IEBACiAgKglBbmRyZSBIZWRyaWNrCiAgKgogICogRG9jdW1lbnRhdGlvbjoKLSAqCU9ic29sZXRlIGRldmljZSBkb2N1bWVudGF0aW9uIHB1YmxpY2FsbHkgYXZhaWxhYmxlIGZyb20gdmlhLmNvbS50dworICoJT2Jzb2xldGUgZGV2aWNlIGRvY3VtZW50YXRpb24gcHVibGljbHkgYXZhaWxhYmxlIGZyb20gdmlhLmNvbS50dwogICoJQ3VycmVudCBkZXZpY2UgZG9jdW1lbnRhdGlvbiBhdmFpbGFibGUgdW5kZXIgTkRBIG9ubHkKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfYWUuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9hZS5jCmluZGV4IDYyYWY3NDIuLjI0ZjllM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9hZS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9hZS5jCkBAIC0xNTcsNyArMTU3LDcgQEAKIAlpbnQgc3RhdHVzOwogCiAJLyoKLQkgKiByZXRyZWl2ZSB0aGUgbWVzc2FnZQorCSAqIHJldHJpZXZlIHRoZSBtZXNzYWdlCiAJICovCiAJd3IgPSBjMl9tcV9jb25zdW1lKG1xKTsKIAlpZiAoIXdyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfcXAuYwppbmRleCBkOGY0YmI4Li4wZDdiNmYyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3FwLmMKQEAgLTYxMiw3ICs2MTIsNyBAQAogCWMyX3VubG9ja19jcXMoc2VuZF9jcSwgcmVjdl9jcSk7CiAKIAkvKgotCSAqIERlc3RvcnkgcXAgaW4gdGhlIHJuaWMuLi4KKwkgKiBEZXN0cm95IHFwIGluIHRoZSBybmljLi4uCiAJICovCiAJZGVzdHJveV9xcChjMmRldiwgcXApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfd3IuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl93ci5oCmluZGV4IGM2NWZiZGQuLjhkNGI0Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl93ci5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl93ci5oCkBAIC0xMzEsNyArMTMxLDcgQEAKIAkgKiAgICAgICAgICBBbGwgdGhlIHByZWNlZGluZyBJRHMgYXJlIGZpeGVkLCBhbmQgbXVzdCBub3QgY2hhbmdlLgogCSAqICAgICAgICAgIFlvdSBjYW4gYWRkIG5ldyBJRHMsIGJ1dCBtdXN0IG5vdCByZW1vdmUgb3IgcmVvcmRlcgogCSAqICAgICAgICAgIGFueSBJRHMuIElmIHlvdSBkbywgWU9VIHdpbGwgcnVpbiBhbnkgaG9wZSBvZgotCSAqICAgICAgICAgIGNvbXBhdGFiaWxpdHkgYmV0d2VlbiB2ZXJzaW9ucy4KKwkgKiAgICAgICAgICBjb21wYXRpYmlsaXR5IGJldHdlZW4gdmVyc2lvbnMuCiAJICovCiAJQ0NXUl9MQVNULAogCkBAIC0yNDIsNyArMjQyLDcgQEAKIC8qCiAgKiAgdG8gZml4IGJ1ZyAxODE1IHdlIGRlZmluZSB0aGUgbWF4IHNpemUgYWxsb3dhYmxlIG9mIHRoZQogICogIHRlcm1pbmF0ZSBtZXNzYWdlIChwZXIgdGhlIElFVEYgc3BlYykuUmVmZXIgdG8gdGhlIElFVEYKLSAqICBwcm90b2NhbCBzcGVjaWZpY2F0aW9uLCBzZWN0aW9uIDEyLjEuNiwgcGFnZSA2NCkKKyAqICBwcm90b2NvbCBzcGVjaWZpY2F0aW9uLCBzZWN0aW9uIDEyLjEuNiwgcGFnZSA2NCkKICAqICBUaGUgbWVzc2FnZSBpcyBwcmVmaXhlZCBieSAyMCB0eXBlcyBvZiBERFAgaW5mby4KICAqCiAgKiAgVGhlbiB0aGUgbWVzc2FnZSBoYXMgNiBieXRlcyBmb3IgdGhlIHRlcm1pbmF0ZSBjb250cm9sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKaW5kZXggNDdkYjRiZi4uNThjMGU0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYwpAQCAtMjM5Miw3ICsyMzkyLDcgQEAKIAkvKgogCSAqIGNsZWFyIFNlcmRlc0VuYWJsZSBhbmQgdHVybiB0aGUgbGVkcyBvZmY7IGRvIHRoaXMgaGVyZSBiZWNhdXNlCiAJICogd2UgYXJlIHVubG9hZGluZywgc28gZG9uJ3QgY291bnQgb24gaW50ZXJydXB0cyB0byBtb3ZlIGFsb25nCi0JICogVHVybiB0aGUgTEVEcyBvZmYgZXhwbGljdGx5IGZvciB0aGUgc2FtZSByZWFzb24uCisJICogVHVybiB0aGUgTEVEcyBvZmYgZXhwbGljaXRseSBmb3IgdGhlIHNhbWUgcmVhc29uLgogCSAqLwogCWRkLT5pcGF0aF9mX3F1aWV0X3NlcmRlcyhkZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZpbGVfb3BzLmMKaW5kZXggNmQ0YjI5Yy4uZWU3OWEyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZpbGVfb3BzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZpbGVfb3BzLmMKQEAgLTE5NzIsNyArMTk3Miw3IEBACiAJICogMCB0byAxLiAgU28gZm9yIHRob3NlIGNoaXBzLCB3ZSB0dXJuIGl0IG9mZiBhbmQgdGhlbiBiYWNrIG9uLgogCSAqIFRoaXMgd2lsbCAodmVyeSBicmllZmx5KSBhZmZlY3QgYW55IG90aGVyIG9wZW4gcG9ydHMsIGJ1dCB0aGUKIAkgKiBkdXJhdGlvbiBpcyB2ZXJ5IHNob3J0LCBhbmQgdGhlcmVmb3JlIGlzbid0IGFuIGlzc3VlLiAgV2UKLQkgKiBleHBsaWN0bHkgc2V0IHRoZSBpbi1tZW1vcnkgdGFpbCBjb3B5IHRvIDAgYmVmb3JlaGFuZCwgc28gd2UKKwkgKiBleHBsaWNpdGx5IHNldCB0aGUgaW4tbWVtb3J5IHRhaWwgY29weSB0byAwIGJlZm9yZWhhbmQsIHNvIHdlCiAJICogZG9uJ3QgaGF2ZSB0byB3YWl0IHRvIGJlIHN1cmUgdGhlIERNQSB1cGRhdGUgaGFzIGhhcHBlbmVkCiAJICogKGNoaXAgcmVzZXRzIGhlYWQvdGFpbCB0byAwIG9uIHRyYW5zaXRpb24gdG8gZW5hYmxlKS4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbml0X2NoaXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbml0X2NoaXAuYwppbmRleCBmZWYwZjQyLi43YzFlZWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW5pdF9jaGlwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2luaXRfY2hpcC5jCkBAIC0zMzUsNyArMzM1LDcgQEAKICAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCiAgKgogICogc2FuaXR5IGNoZWNrIGF0IGxlYXN0IHNvbWUgb2YgdGhlIHZhbHVlcyBhZnRlciByZXNldCwgYW5kCi0gKiBlbnN1cmUgbm8gcmVjZWl2ZSBvciB0cmFuc21pdCAoZXhwbGljdGx5LCBpbiBjYXNlIHJlc2V0CisgKiBlbnN1cmUgbm8gcmVjZWl2ZSBvciB0cmFuc21pdCAoZXhwbGljaXRseSwgaW4gY2FzZSByZXNldAogICogZmFpbGVkCiAgKi8KIHN0YXRpYyBpbnQgaW5pdF9jaGlwX3Jlc2V0KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91ZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMKaW5kZXggNzQyMDcxNS4uZThhMmE5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMKQEAgLTg2LDcgKzg2LDcgQEAKIAl9CiAKIAkvKgotCSAqIEEgR1JIIGlzIGV4cGVjdGVkIHRvIHByZWNlZWQgdGhlIGRhdGEgZXZlbiBpZiBub3QKKwkgKiBBIEdSSCBpcyBleHBlY3RlZCB0byBwcmVjZWRlIHRoZSBkYXRhIGV2ZW4gaWYgbm90CiAJICogcHJlc2VudCBvbiB0aGUgd2lyZS4KIAkgKi8KIAlsZW5ndGggPSBzd3FlLT5sZW5ndGg7CkBAIC01MTUsNyArNTE1LDcgQEAKIAl9CiAKIAkvKgotCSAqIEEgR1JIIGlzIGV4cGVjdGVkIHRvIHByZWNlZWQgdGhlIGRhdGEgZXZlbiBpZiBub3QKKwkgKiBBIEdSSCBpcyBleHBlY3RlZCB0byBwcmVjZWRlIHRoZSBkYXRhIGV2ZW4gaWYgbm90CiAJICogcHJlc2VudCBvbiB0aGUgd2lyZS4KIAkgKi8KIAl3Yy5ieXRlX2xlbiA9IHRsZW4gKyBzaXplb2Yoc3RydWN0IGliX2dyaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9zZG1hLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9zZG1hLmMKaW5kZXggYmU3OGY2Ni4uZjVjYjEzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfc2RtYS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3NkbWEuYwpAQCAtMjM2LDcgKzIzNiw3IEBACiAJcmV0dXJuIDEgKyAoKGVwYWdlIC0gc3BhZ2UpID4+IFBBR0VfU0hJRlQpOwogfQogCi0vKiB0cnVuY2F0ZSBsZW5ndGggdG8gcGFnZSBib3VuZHJ5ICovCisvKiB0cnVuY2F0ZSBsZW5ndGggdG8gcGFnZSBib3VuZGFyeSAqLwogc3RhdGljIGludCBpcGF0aF91c2VyX3NkbWFfcGFnZV9sZW5ndGgodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbikKIHsKIAljb25zdCB1bnNpZ25lZCBsb25nIG9mZnNldCA9IGFkZHIgJiB+UEFHRV9NQVNLOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMKaW5kZXggY2ZhM2EyYi4uMzNjN2VlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5jCkBAIC0xMzk3LDcgKzEzOTcsNyBAQAogCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CiAJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NJTkc7CiAJCXNlbmRfYWNrKGNtX25vZGUsIE5VTEwpOwotCQkvKiBXYWl0IGZvciBBQ0sgYXMgdGhpcyBpcyBzaW11bHRhbm91cyBjbG9zZS4uCisJCS8qIFdhaXQgZm9yIEFDSyBhcyB0aGlzIGlzIHNpbXVsdGFuZW91cyBjbG9zZS4uCiAJCSogQWZ0ZXIgd2UgcmVjZWl2ZSBBQ0ssIGRvIG5vdCBzZW5kIGFueXRoaW5nLi4KIAkJKiBKdXN0IHJtIHRoZSBub2RlLi4gRG9uZS4uICovCiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMKaW5kZXggMDhjMTk0OC4uMTBkMGE1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jCkBAIC04MCw3ICs4MCw3IEBACiAKICNpZmRlZiBDT05GSUdfSU5GSU5JQkFORF9ORVNfREVCVUcKIHN0YXRpYyB1bnNpZ25lZCBjaGFyICpuZXNfaXdhcnBfc3RhdGVfc3RyW10gPSB7Ci0JIk5vbi1FeGlzdGFudCIsCisJIk5vbi1FeGlzdGVudCIsCiAJIklkbGUiLAogCSJSVFMiLAogCSJDbG9zaW5nIiwKQEAgLTkxLDcgKzkxLDcgQEAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyICpuZXNfdGNwX3N0YXRlX3N0cltdID0gewotCSJOb24tRXhpc3RhbnQiLAorCSJOb24tRXhpc3RlbnQiLAogCSJDbG9zZWQiLAogCSJMaXN0ZW4iLAogCSJTWU4gU2VudCIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jCmluZGV4IDJjOWMxOTMuLmU5NmI4ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jCkBAIC05MDIsNyArOTAyLDcgQEAKIAkJbmVzX3dyaXRlX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX05JQ19VTklDQVNUX0FMTCwgbmljX2FjdGl2ZSk7CiAJfQogCi0JbmVzX2RlYnVnKE5FU19EQkdfTklDX1JYLCAiTnVtYmVyIG9mIE1DIGVudHJpZXMgPSAlZCwgUHJvbWlzY291cyA9ICVkLCBBbGwgTXVsdGljYXN0ID0gJWQuXG4iLAorCW5lc19kZWJ1ZyhORVNfREJHX05JQ19SWCwgIk51bWJlciBvZiBNQyBlbnRyaWVzID0gJWQsIFByb21pc2N1b3VzID0gJWQsIEFsbCBNdWx0aWNhc3QgPSAlZC5cbiIsCiAJCSAgbWNfY291bnQsICEhKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQyksCiAJCSAgISEobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpOwogCWlmICghbWNfYWxsX29uKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWIuaAppbmRleCA3MzIyNWVlLi43NjlhMWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliLmgKQEAgLTY1Myw3ICs2NTMsNyBAQAogCiAvKiBkZXZpY2UgZGF0YSBzdHJ1Y3Qgbm93IGNvbnRhaW5zIG9ubHkgImdlbmVyYWwgcGVyLWRldmljZSIgaW5mby4KICAqIGZpZWxkcyByZWxhdGVkIHRvIGEgcGh5c2ljYWwgSUIgcG9ydCBhcmUgaW4gYSBxaWJfcHBvcnRkYXRhIHN0cnVjdCwKLSAqIGRlc2NyaWJlZCBhYm92ZSkgd2hpbGUgZmllbGRzIG9ubHkgdXNlZCBieSBhIHBhcnRpY3VhbHIgY2hpcC10eXBlIGFyZSBpbgorICogZGVzY3JpYmVkIGFib3ZlKSB3aGlsZSBmaWVsZHMgb25seSB1c2VkIGJ5IGEgcGFydGljdWxhciBjaGlwLXR5cGUgYXJlIGluCiAgKiBhIHFpYl9jaGlwZGF0YSBzdHJ1Y3QsIHdob3NlIGNvbnRlbnRzIGFyZSBvcGFxdWUgdG8gdGhpcyBmaWxlLgogICovCiBzdHJ1Y3QgcWliX2RldmRhdGEgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfZmlsZV9vcHMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2ZpbGVfb3BzLmMKaW5kZXggNzViZmFkMS4uNDA2ZmNhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfZmlsZV9vcHMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9maWxlX29wcy5jCkBAIC0xNTM5LDcgKzE1MzksNyBAQAogCiAJCS8qCiAJCSAqIElmIHByb2Nlc3MgaGFzIE5PVCBhbHJlYWR5IHNldCBpdCdzIGFmZmluaXR5LCBzZWxlY3QgYW5kCi0JCSAqIHJlc2VydmUgYSBwcm9jZXNzb3IgZm9yIGl0LCBhcyBhIHJlbmRldm91cyBmb3IgYWxsCisJCSAqIHJlc2VydmUgYSBwcm9jZXNzb3IgZm9yIGl0LCBhcyBhIHJlbmRlenZvdXMgZm9yIGFsbAogCQkgKiB1c2VycyBvZiB0aGUgZHJpdmVyLiAgSWYgdGhleSBkb24ndCBhY3R1YWxseSBsYXRlcgogCQkgKiBzZXQgYWZmaW5pdHkgdG8gdGhpcyBjcHUsIG9yIHNldCBpdCB0byBzb21lIG90aGVyIGNwdSwKIAkJICogaXQganVzdCBtZWFucyB0aGF0IHNvb25lciBvciBsYXRlciB3ZSBkb24ndCByZWNvbW1lbmQKQEAgLTE2NTcsNyArMTY1Nyw3IEBACiAJICogMCB0byAxLiAgU28gZm9yIHRob3NlIGNoaXBzLCB3ZSB0dXJuIGl0IG9mZiBhbmQgdGhlbiBiYWNrIG9uLgogCSAqIFRoaXMgd2lsbCAodmVyeSBicmllZmx5KSBhZmZlY3QgYW55IG90aGVyIG9wZW4gY3R4dHMsIGJ1dCB0aGUKIAkgKiBkdXJhdGlvbiBpcyB2ZXJ5IHNob3J0LCBhbmQgdGhlcmVmb3JlIGlzbid0IGFuIGlzc3VlLiAgV2UKLQkgKiBleHBsaWN0bHkgc2V0IHRoZSBpbi1tZW1vcnkgdGFpbCBjb3B5IHRvIDAgYmVmb3JlaGFuZCwgc28gd2UKKwkgKiBleHBsaWNpdGx5IHNldCB0aGUgaW4tbWVtb3J5IHRhaWwgY29weSB0byAwIGJlZm9yZWhhbmQsIHNvIHdlCiAJICogZG9uJ3QgaGF2ZSB0byB3YWl0IHRvIGJlIHN1cmUgdGhlIERNQSB1cGRhdGUgaGFzIGhhcHBlbmVkCiAJICogKGNoaXAgcmVzZXRzIGhlYWQvdGFpbCB0byAwIG9uIHRyYW5zaXRpb24gdG8gZW5hYmxlKS4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTYxMjAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTYxMjAuYwppbmRleCA3NzRkZWE4Li5kOGNhMGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE2MTIwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNjEyMC5jCkBAIC0xNzk5LDcgKzE3OTksNyBAQAogCS8qCiAJICogS2VlcCBjaGlwIGZyb20gYmVpbmcgYWNjZXNzZWQgdW50aWwgd2UgYXJlIHJlYWR5LiAgVXNlCiAJICogd3JpdGVxKCkgZGlyZWN0bHksIHRvIGFsbG93IHRoZSB3cml0ZSBldmVuIHRob3VnaCBRSUJfUFJFU0VOVAotCSAqIGlzbnQnIHNldC4KKwkgKiBpc24ndCBzZXQuCiAJICovCiAJZGQtPmZsYWdzICY9IH4oUUlCX0lOSVRURUQgfCBRSUJfUFJFU0VOVCk7CiAJZGQtPmludF9jb3VudGVyID0gMDsgLyogc28gd2UgY2hlY2sgaW50ZXJydXB0cyB3b3JrIGFnYWluICovCkBAIC0yMTcxLDcgKzIxNzEsNyBAQAogCQkgKiBJbml0IHRoZSBjb250ZXh0IHJlZ2lzdGVycyBhbHNvOyBpZiB3ZSB3ZXJlCiAJCSAqIGRpc2FibGVkLCB0YWlsIGFuZCBoZWFkIHNob3VsZCBib3RoIGJlIHplcm8KIAkJICogYWxyZWFkeSBmcm9tIHRoZSBlbmFibGUsIGJ1dCBzaW5jZSB3ZSBkb24ndAotCQkgKiBrbm93LCB3ZSBoYXZlIHRvIGRvIGl0IGV4cGxpY3RseS4KKwkJICoga25vdywgd2UgaGF2ZSB0byBkbyBpdCBleHBsaWNpdGx5LgogCQkgKi8KIAkJdmFsID0gcWliX3JlYWRfdXJlZzMyKGRkLCB1cl9yY3ZlZ3JpbmRleHRhaWwsIGN0eHQpOwogCQlxaWJfd3JpdGVfdXJlZyhkZCwgdXJfcmN2ZWdyaW5kZXhoZWFkLCB2YWwsIGN0eHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNzIyMC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNzIyMC5jCmluZGV4IGRlNzk5ZjEuLmM3NjVhMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTcyMjAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MjIwLmMKQEAgLTIxMTEsNyArMjExMSw3IEBACiAJLyoKIAkgKiBLZWVwIGNoaXAgZnJvbSBiZWluZyBhY2Nlc3NlZCB1bnRpbCB3ZSBhcmUgcmVhZHkuICBVc2UKIAkgKiB3cml0ZXEoKSBkaXJlY3RseSwgdG8gYWxsb3cgdGhlIHdyaXRlIGV2ZW4gdGhvdWdoIFFJQl9QUkVTRU5UCi0JICogaXNudCcgc2V0LgorCSAqIGlzbid0IHNldC4KIAkgKi8KIAlkZC0+ZmxhZ3MgJj0gfihRSUJfSU5JVFRFRCB8IFFJQl9QUkVTRU5UKTsKIAlkZC0+aW50X2NvdW50ZXIgPSAwOyAvKiBzbyB3ZSBjaGVjayBpbnRlcnJ1cHRzIHdvcmsgYWdhaW4gKi8KQEAgLTI0NzksNyArMjQ3OSw3IEBACiAJCSAqIHdlIGNvbW1hbmQgdGhlIGxpbmsgZG93bi4gIEFzIHdpdGggd2lkdGgsIG9ubHkgd3JpdGUgdGhlCiAJCSAqIGFjdHVhbCByZWdpc3RlciBpZiB0aGUgbGluayBpcyBjdXJyZW50bHkgZG93biwgb3RoZXJ3aXNlCiAJCSAqIHRha2VzIGVmZmVjdCBvbiBuZXh0IGxpbmsgY2hhbmdlLiAgU2luY2Ugc2V0dGluZyBpcyBiZWluZwotCQkgKiBleHBsaWN0bHkgcmVxdWVzdGVkICh2aWEgTUFEIG9yIHN5c2ZzKSwgY2xlYXIgYXV0b25lZworCQkgKiBleHBsaWNpdGx5IHJlcXVlc3RlZCAodmlhIE1BRCBvciBzeXNmcyksIGNsZWFyIGF1dG9uZWcKIAkJICogZmFpbHVyZSBzdGF0dXMgaWYgc3BlZWQgYXV0b25lZyBpcyBlbmFibGVkLgogCQkgKi8KIAkJcHBkLT5saW5rX3NwZWVkX2VuYWJsZWQgPSB2YWw7CkBAIC0yNzc4LDcgKzI3NzgsNyBAQAogCQkgKiBJbml0IHRoZSBjb250ZXh0IHJlZ2lzdGVycyBhbHNvOyBpZiB3ZSB3ZXJlCiAJCSAqIGRpc2FibGVkLCB0YWlsIGFuZCBoZWFkIHNob3VsZCBib3RoIGJlIHplcm8KIAkJICogYWxyZWFkeSBmcm9tIHRoZSBlbmFibGUsIGJ1dCBzaW5jZSB3ZSBkb24ndAotCQkgKiBrbm93LCB3ZSBoYXZlIHRvIGRvIGl0IGV4cGxpY3RseS4KKwkJICoga25vdywgd2UgaGF2ZSB0byBkbyBpdCBleHBsaWNpdGx5LgogCQkgKi8KIAkJdmFsID0gcWliX3JlYWRfdXJlZzMyKGRkLCB1cl9yY3ZlZ3JpbmRleHRhaWwsIGN0eHQpOwogCQlxaWJfd3JpdGVfdXJlZyhkZCwgdXJfcmN2ZWdyaW5kZXhoZWFkLCB2YWwsIGN0eHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNzMyMi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNzMyMi5jCmluZGV4IDRhMmQyMWUuLjZiYWIzZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTczMjIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MzIyLmMKQEAgLTMyOTksNyArMzI5OSw3IEBACiAJLyoKIAkgKiBLZWVwIGNoaXAgZnJvbSBiZWluZyBhY2Nlc3NlZCB1bnRpbCB3ZSBhcmUgcmVhZHkuICBVc2UKIAkgKiB3cml0ZXEoKSBkaXJlY3RseSwgdG8gYWxsb3cgdGhlIHdyaXRlIGV2ZW4gdGhvdWdoIFFJQl9QUkVTRU5UCi0JICogaXNudCcgc2V0LgorCSAqIGlzbid0IHNldC4KIAkgKi8KIAlkZC0+ZmxhZ3MgJj0gfihRSUJfSU5JVFRFRCB8IFFJQl9QUkVTRU5UIHwgUUlCX0JBRElOVFIpOwogCWRkLT5mbGFncyB8PSBRSUJfRE9JTkdfUkVTRVQ7CkBAIC0zNzI3LDcgKzM3MjcsNyBAQAogCQkvKgogCQkgKiBBcyB3aXRoIHdpZHRoLCBvbmx5IHdyaXRlIHRoZSBhY3R1YWwgcmVnaXN0ZXIgaWYgdGhlCiAJCSAqIGxpbmsgaXMgY3VycmVudGx5IGRvd24sIG90aGVyd2lzZSB0YWtlcyBlZmZlY3Qgb24gbmV4dAotCQkgKiBsaW5rIGNoYW5nZS4gIFNpbmNlIHNldHRpbmcgaXMgYmVpbmcgZXhwbGljdGx5IHJlcXVlc3RlZAorCQkgKiBsaW5rIGNoYW5nZS4gIFNpbmNlIHNldHRpbmcgaXMgYmVpbmcgZXhwbGljaXRseSByZXF1ZXN0ZWQKIAkJICogKHZpYSBNQUQgb3Igc3lzZnMpLCBjbGVhciBhdXRvbmVnIGZhaWx1cmUgc3RhdHVzIGlmIHNwZWVkCiAJCSAqIGF1dG9uZWcgaXMgZW5hYmxlZC4KIAkJICovCkBAIC00MTYzLDcgKzQxNjMsNyBAQAogCQkgKiBJbml0IHRoZSBjb250ZXh0IHJlZ2lzdGVycyBhbHNvOyBpZiB3ZSB3ZXJlCiAJCSAqIGRpc2FibGVkLCB0YWlsIGFuZCBoZWFkIHNob3VsZCBib3RoIGJlIHplcm8KIAkJICogYWxyZWFkeSBmcm9tIHRoZSBlbmFibGUsIGJ1dCBzaW5jZSB3ZSBkb24ndAotCQkgKiBrbm93LCB3ZSBoYXZlIHRvIGRvIGl0IGV4cGxpY3RseS4KKwkJICoga25vdywgd2UgaGF2ZSB0byBkbyBpdCBleHBsaWNpdGx5LgogCQkgKi8KIAkJdmFsID0gcWliX3JlYWRfdXJlZzMyKGRkLCB1cl9yY3ZlZ3JpbmRleHRhaWwsIGN0eHQpOwogCQlxaWJfd3JpdGVfdXJlZyhkZCwgdXJfcmN2ZWdyaW5kZXhoZWFkLCB2YWwsIGN0eHQpOwpAQCAtNzQ4Myw3ICs3NDgzLDcgQEAKIAkvKiAgICAgICBCYXNlbGluZSBXYW5kZXIgQ29ycmVjdGlvbiBHYWluIFsxMzo0LTBdIChsZWF2ZSBhcyBkZWZhdWx0KSAqLwogCS8qICAgICAgIEJhc2VsaW5lIFdhbmRlciBDb3JyZWN0aW9uIEdhaW4gWzM6Ny01XSAobGVhdmUgYXMgZGVmYXVsdCkgKi8KIAkvKiAgICAgICBEYXRhIFJhdGUgU2VsZWN0IFs1OjctNl0gKGxlYXZlIGFzIGRlZmF1bHQpICovCi0JLyogICAgICAgUlggUGFycmFsZWwgV29yZCBXaWR0aCBbMzoxMC04XSAobGVhdmUgYXMgZGVmYXVsdCkgKi8KKwkvKiAgICAgICBSWCBQYXJhbGxlbCBXb3JkIFdpZHRoIFszOjEwLThdIChsZWF2ZSBhcyBkZWZhdWx0KSAqLwogCiAJLyogUlggUkVTVCAqLwogCS8qICAgICAgIFNpbmdsZS0gb3IgTXVsdGktY2hhbm5lbCByZXNldCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaW5pdC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaW5pdC5jCmluZGV4IGZmZWZiNzguLmEwMWYzZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2luaXQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pbml0LmMKQEAgLTM0Niw3ICszNDYsNyBAQAogICogQGRkOiB0aGUgcWxvZ2ljX2liIGRldmljZQogICoKICAqIHNhbml0eSBjaGVjayBhdCBsZWFzdCBzb21lIG9mIHRoZSB2YWx1ZXMgYWZ0ZXIgcmVzZXQsIGFuZAotICogZW5zdXJlIG5vIHJlY2VpdmUgb3IgdHJhbnNtaXQgKGV4cGxpY3RseSwgaW4gY2FzZSByZXNldAorICogZW5zdXJlIG5vIHJlY2VpdmUgb3IgdHJhbnNtaXQgKGV4cGxpY2l0bHksIGluIGNhc2UgcmVzZXQKICAqIGZhaWxlZAogICovCiBzdGF0aWMgaW50IGluaXRfYWZ0ZXJfcmVzZXQoc3RydWN0IHFpYl9kZXZkYXRhICpkZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX21hZC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfbWFkLmgKaW5kZXggMTQ3YWZmOS4uNzg0MGFiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfbWFkLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfbWFkLmgKQEAgLTczLDcgKzczLDcgQEAKIAogCQlzdHJ1Y3QgewogCQkJX19iZTE2CXJlc2VydmVkOwotCQkJX19iZTE2CWxpZDsJCS8qIExJRCB3aGVyZSBjaGFuZ2Ugb2NjdXJlZCAqLworCQkJX19iZTE2CWxpZDsJCS8qIExJRCB3aGVyZSBjaGFuZ2Ugb2NjdXJyZWQgKi8KIAkJCXU4CXJlc2VydmVkMjsKIAkJCXU4CWxvY2FsX2NoYW5nZXM7CS8qIGxvdyBiaXQgLSBsb2NhbCBjaGFuZ2VzICovCiAJCQlfX2JlMzIJbmV3X2NhcF9tYXNrOwkvKiBuZXcgY2FwYWJpbGl0eSBtYXNrICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl90d3NpLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl90d3NpLmMKaW5kZXggNmYzMWNhNS4uZGRkZTcyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdHdzaS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3R3c2kuYwpAQCAtNDEsNyArNDEsNyBAQAogICogUUxvZ2ljX0lCICJUd28gV2lyZSBTZXJpYWwgSW50ZXJmYWNlIiBkcml2ZXIuCiAgKiBPcmlnaW5hbGx5IHdyaXR0ZW4gZm9yIGEgbm90LXF1aXRlLWkyYyBzZXJpYWwgZWVwcm9tLCB3aGljaCBpcwogICogc3RpbGwgdXNlZCBvbiBzb21lIHN1cHBvcnRlZCBib2FyZHMuIExhdGVyIGJvYXJkcyBoYXZlIGFkZGVkIGEKLSAqIHZhcmlldHkgb2Ygb3RoZXIgdXNlcywgbW9zdCBib2FyZC1zcGVjaWZpYywgc28gdGVoIGJpdC1ib2ZmaW5nCisgKiB2YXJpZXR5IG9mIG90aGVyIHVzZXMsIG1vc3QgYm9hcmQtc3BlY2lmaWMsIHNvIHRoZSBiaXQtYm9mZmluZwogICogcGFydCBoYXMgYmVlbiBzcGxpdCBvZmYgdG8gdGhpcyBmaWxlLCB3aGlsZSB0aGUgb3RoZXIgcGFydHMKICAqIGhhdmUgYmVlbiBtb3ZlZCB0byBjaGlwLXNwZWNpZmljIGZpbGVzLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3VkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl91ZC5jCmluZGV4IDRhNTFmZDEuLjgyODYwOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3VkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdWQuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAJfQogCiAJLyoKLQkgKiBBIEdSSCBpcyBleHBlY3RlZCB0byBwcmVjZWVkIHRoZSBkYXRhIGV2ZW4gaWYgbm90CisJICogQSBHUkggaXMgZXhwZWN0ZWQgdG8gcHJlY2VkZSB0aGUgZGF0YSBldmVuIGlmIG5vdAogCSAqIHByZXNlbnQgb24gdGhlIHdpcmUuCiAJICovCiAJbGVuZ3RoID0gc3dxZS0+bGVuZ3RoOwpAQCAtNTIwLDcgKzUyMCw3IEBACiAJCWdvdG8gZHJvcDsKIAogCS8qCi0JICogQSBHUkggaXMgZXhwZWN0ZWQgdG8gcHJlY2VlZCB0aGUgZGF0YSBldmVuIGlmIG5vdAorCSAqIEEgR1JIIGlzIGV4cGVjdGVkIHRvIHByZWNlZGUgdGhlIGRhdGEgZXZlbiBpZiBub3QKIAkgKiBwcmVzZW50IG9uIHRoZSB3aXJlLgogCSAqLwogCXdjLmJ5dGVfbGVuID0gdGxlbiArIHNpemVvZihzdHJ1Y3QgaWJfZ3JoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3VzZXJfc2RtYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdXNlcl9zZG1hLmMKaW5kZXggNjYyMDhiYy4uODI0NDIwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdXNlcl9zZG1hLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdXNlcl9zZG1hLmMKQEAgLTIzOSw3ICsyMzksNyBAQAogfQogCiAvKgotICogVHJ1bmNhdGUgbGVuZ3RoIHRvIHBhZ2UgYm91bmRyeS4KKyAqIFRydW5jYXRlIGxlbmd0aCB0byBwYWdlIGJvdW5kYXJ5LgogICovCiBzdGF0aWMgaW50IHFpYl91c2VyX3NkbWFfcGFnZV9sZW5ndGgodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmggYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5oCmluZGV4IGYxZGYwMTUuLjJmMDJhYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuaApAQCAtOTEsNyArOTEsNyBAQAogI2RlZmluZSBTSVpFXzRLCSgxVUwgPDwgU0hJRlRfNEspCiAjZGVmaW5lIE1BU0tfNEsJKH4oU0laRV80Sy0xKSkKIAotCQkJCQkvKiBzdXBwb3J0IHVwdG8gNTEyS0IgaW4gb25lIFJETUEgKi8KKwkJCQkJLyogc3VwcG9ydCB1cCB0byA1MTJLQiBpbiBvbmUgUkRNQSAqLwogI2RlZmluZSBJU0NTSV9JU0VSX1NHX1RBQkxFU0laRSAgICAgICAgICgweDgwMDAwID4+IFNISUZUXzRLKQogI2RlZmluZSBJU0VSX0RFRl9DTURfUEVSX0xVTgkJMTI4CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZXZkZXYuYyBiL2RyaXZlcnMvaW5wdXQvZXZkZXYuYwppbmRleCA3ZjQyZDNhLi44OGQ4ZTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9ldmRldi5jCkBAIC0zOSwxMyArMzksMTMgQEAKIH07CiAKIHN0cnVjdCBldmRldl9jbGllbnQgewotCWludCBoZWFkOwotCWludCB0YWlsOworCXVuc2lnbmVkIGludCBoZWFkOworCXVuc2lnbmVkIGludCB0YWlsOwogCXNwaW5sb2NrX3QgYnVmZmVyX2xvY2s7IC8qIHByb3RlY3RzIGFjY2VzcyB0byBidWZmZXIsIGhlYWQgYW5kIHRhaWwgKi8KIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jOwogCXN0cnVjdCBldmRldiAqZXZkZXY7CiAJc3RydWN0IGxpc3RfaGVhZCBub2RlOwotCWludCBidWZzaXplOworCXVuc2lnbmVkIGludCBidWZzaXplOwogCXN0cnVjdCBpbnB1dF9ldmVudCBidWZmZXJbXTsKIH07CiAKQEAgLTU1LDE2ICs1NSwyNSBAQAogc3RhdGljIHZvaWQgZXZkZXZfcGFzc19ldmVudChzdHJ1Y3QgZXZkZXZfY2xpZW50ICpjbGllbnQsCiAJCQkgICAgIHN0cnVjdCBpbnB1dF9ldmVudCAqZXZlbnQpCiB7Ci0JLyoKLQkgKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwganVzdCBhY3F1aXJlIHRoZSBsb2NrLgotCSAqIE1ha2Ugc3VyZSB3ZSBkb24ndCBsZWF2ZSB3aXRoIHRoZSBjbGllbnQgYnVmZmVyCi0JICogImVtcHR5IiBieSBoYXZpbmcgY2xpZW50LT5oZWFkID09IGNsaWVudC0+dGFpbC4KLQkgKi8KKwkvKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwganVzdCBhY3F1aXJlIHRoZSBsb2NrLiAqLwogCXNwaW5fbG9jaygmY2xpZW50LT5idWZmZXJfbG9jayk7Ci0JZG8gewotCQljbGllbnQtPmJ1ZmZlcltjbGllbnQtPmhlYWQrK10gPSAqZXZlbnQ7Ci0JCWNsaWVudC0+aGVhZCAmPSBjbGllbnQtPmJ1ZnNpemUgLSAxOwotCX0gd2hpbGUgKGNsaWVudC0+aGVhZCA9PSBjbGllbnQtPnRhaWwpOworCisJY2xpZW50LT5idWZmZXJbY2xpZW50LT5oZWFkKytdID0gKmV2ZW50OworCWNsaWVudC0+aGVhZCAmPSBjbGllbnQtPmJ1ZnNpemUgLSAxOworCisJaWYgKHVubGlrZWx5KGNsaWVudC0+aGVhZCA9PSBjbGllbnQtPnRhaWwpKSB7CisJCS8qCisJCSAqIFRoaXMgZWZmZWN0aXZlbHkgImRyb3BzIiBhbGwgdW5jb25zdW1lZCBldmVudHMsIGxlYXZpbmcKKwkJICogRVZfU1lOL1NZTl9EUk9QUEVEIHBsdXMgdGhlIG5ld2VzdCBldmVudCBpbiB0aGUgcXVldWUuCisJCSAqLworCQljbGllbnQtPnRhaWwgPSAoY2xpZW50LT5oZWFkIC0gMikgJiAoY2xpZW50LT5idWZzaXplIC0gMSk7CisKKwkJY2xpZW50LT5idWZmZXJbY2xpZW50LT50YWlsXS50aW1lID0gZXZlbnQtPnRpbWU7CisJCWNsaWVudC0+YnVmZmVyW2NsaWVudC0+dGFpbF0udHlwZSA9IEVWX1NZTjsKKwkJY2xpZW50LT5idWZmZXJbY2xpZW50LT50YWlsXS5jb2RlID0gU1lOX0RST1BQRUQ7CisJCWNsaWVudC0+YnVmZmVyW2NsaWVudC0+dGFpbF0udmFsdWUgPSAwOworCX0KKwogCXNwaW5fdW5sb2NrKCZjbGllbnQtPmJ1ZmZlcl9sb2NrKTsKIAogCWlmIChldmVudC0+dHlwZSA9PSBFVl9TWU4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2lucHV0LmMgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKaW5kZXggZDZlOGJkOC4uZWJiY2VlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwpAQCAtMTc0Niw2ICsxNzQ2LDQyIEBACiB9CiBFWFBPUlRfU1lNQk9MKGlucHV0X3NldF9jYXBhYmlsaXR5KTsKIAorc3RhdGljIHVuc2lnbmVkIGludCBpbnB1dF9lc3RpbWF0ZV9ldmVudHNfcGVyX3BhY2tldChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJaW50IG10X3Nsb3RzOworCWludCBpOworCXVuc2lnbmVkIGludCBldmVudHM7CisKKwlpZiAoZGV2LT5tdHNpemUpIHsKKwkJbXRfc2xvdHMgPSBkZXYtPm10c2l6ZTsKKwl9IGVsc2UgaWYgKHRlc3RfYml0KEFCU19NVF9UUkFDS0lOR19JRCwgZGV2LT5hYnNiaXQpKSB7CisJCW10X3Nsb3RzID0gZGV2LT5hYnNpbmZvW0FCU19NVF9UUkFDS0lOR19JRF0ubWF4aW11bSAtCisJCQkgICBkZXYtPmFic2luZm9bQUJTX01UX1RSQUNLSU5HX0lEXS5taW5pbXVtICsgMSwKKwkJY2xhbXAobXRfc2xvdHMsIDIsIDMyKTsKKwl9IGVsc2UgaWYgKHRlc3RfYml0KEFCU19NVF9QT1NJVElPTl9YLCBkZXYtPmFic2JpdCkpIHsKKwkJbXRfc2xvdHMgPSAyOworCX0gZWxzZSB7CisJCW10X3Nsb3RzID0gMDsKKwl9CisKKwlldmVudHMgPSBtdF9zbG90cyArIDE7IC8qIGNvdW50IFNZTl9NVF9SRVBPUlQgYW5kIFNZTl9SRVBPUlQgKi8KKworCWZvciAoaSA9IDA7IGkgPCBBQlNfQ05UOyBpKyspIHsKKwkJaWYgKHRlc3RfYml0KGksIGRldi0+YWJzYml0KSkgeworCQkJaWYgKGlucHV0X2lzX210X2F4aXMoaSkpCisJCQkJZXZlbnRzICs9IG10X3Nsb3RzOworCQkJZWxzZQorCQkJCWV2ZW50cysrOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IFJFTF9DTlQ7IGkrKykKKwkJaWYgKHRlc3RfYml0KGksIGRldi0+cmVsYml0KSkKKwkJCWV2ZW50cysrOworCisJcmV0dXJuIGV2ZW50czsKK30KKwogI2RlZmluZSBJTlBVVF9DTEVBTlNFX0JJVE1BU0soZGV2LCB0eXBlLCBiaXRzKQkJCQlcCiAJZG8gewkJCQkJCQkJXAogCQlpZiAoIXRlc3RfYml0KEVWXyMjdHlwZSwgZGV2LT5ldmJpdCkpCQkJXApAQCAtMTc5Myw2ICsxODI5LDEwIEBACiAJLyogTWFrZSBzdXJlIHRoYXQgYml0bWFza3Mgbm90IG1lbnRpb25lZCBpbiBkZXYtPmV2Yml0IGFyZSBjbGVhbi4gKi8KIAlpbnB1dF9jbGVhbnNlX2JpdG1hc2tzKGRldik7CiAKKwlpZiAoIWRldi0+aGludF9ldmVudHNfcGVyX3BhY2tldCkKKwkJZGV2LT5oaW50X2V2ZW50c19wZXJfcGFja2V0ID0KKwkJCQlpbnB1dF9lc3RpbWF0ZV9ldmVudHNfcGVyX3BhY2tldChkZXYpOworCiAJLyoKIAkgKiBJZiBkZWxheSBhbmQgcGVyaW9kIGFyZSBwcmUtc2V0IGJ5IHRoZSBkcml2ZXIsIHRoZW4gYXV0b3JlcGVhdGluZwogCSAqIGlzIGhhbmRsZWQgYnkgdGhlIGRyaXZlciBpdHNlbGYgYW5kIHdlIGRvbid0IGRvIGl0IGluIGlucHV0LmMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveWRldi5jIGIvZHJpdmVycy9pbnB1dC9qb3lkZXYuYwppbmRleCAzMTgyYzljLi41Njg4YjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveWRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKQEAgLTc1OCw3ICs3NTgsNyBAQAogfQogCiAvKgotICogTWFyayBkZXZpY2Ugbm9uLWV4aXN0YW50LiBUaGlzIGRpc2FibGVzIHdyaXRlcywgaW9jdGxzIGFuZAorICogTWFyayBkZXZpY2Ugbm9uLWV4aXN0ZW50LiBUaGlzIGRpc2FibGVzIHdyaXRlcywgaW9jdGxzIGFuZAogICogcHJldmVudHMgbmV3IHVzZXJzIGZyb20gb3BlbmluZyB0aGUgZGV2aWNlLiBBbHJlYWR5IHBvc3RlZAogICogYmxvY2tpbmcgcmVhZHMgd2lsbCBzdGF5LCBob3dldmVyIG5ldyBvbmVzIHdpbGwgZmFpbC4KICAqLwpAQCAtNzc3LDcgKzc3Nyw3IEBACiAJam95ZGV2X2hhbmd1cChqb3lkZXYpOwogCWpveWRldl9yZW1vdmVfY2hyZGV2KGpveWRldik7CiAKLQkvKiBqb3lkZXYgaXMgbWFya2VkIGRlYWQgc28gbm9vbmUgZWxzZSBhY2Nlc3NlcyBqb3lkZXYtPm9wZW4gKi8KKwkvKiBqb3lkZXYgaXMgbWFya2VkIGRlYWQgc28gbm8gb25lIGVsc2UgYWNjZXNzZXMgam95ZGV2LT5vcGVuICovCiAJaWYgKGpveWRldi0+b3BlbikKIAkJaW5wdXRfY2xvc2VfZGV2aWNlKGhhbmRsZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2EzZC5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hM2QuYwppbmRleCBkMjU5YjQxLi4xNjM5YWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2EzZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYTNkLmMKQEAgLTMsNyArMyw3IEBACiAgKi8KIAogLyoKLSAqIEZQLUdhbWluZyBBc3Nhc2luIDNEIGpveXN0aWNrIGRyaXZlciBmb3IgTGludXgKKyAqIEZQLUdhbWluZyBBc3Nhc3NpbiAzRCBqb3lzdGljayBkcml2ZXIgZm9yIExpbnV4CiAgKi8KIAogLyoKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KIAotI2RlZmluZSBEUklWRVJfREVTQwkiRlAtR2FtaW5nIEFzc2FzaW4gM0Qgam95c3RpY2sgZHJpdmVyIgorI2RlZmluZSBEUklWRVJfREVTQwkiRlAtR2FtaW5nIEFzc2Fzc2luIDNEIGpveXN0aWNrIGRyaXZlciIKIAogTU9EVUxFX0FVVEhPUigiVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAdWN3LmN6PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZGF2aW5jaV9rZXlzY2FuLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2RhdmluY2lfa2V5c2Nhbi5jCmluZGV4IGE5MWVlOTQuLmNkODlkMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZGF2aW5jaV9rZXlzY2FuLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9kYXZpbmNpX2tleXNjYW4uYwpAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBBdXRob3I6IE1pZ3VlbCBBZ3VpbGFyIDxtaWd1ZWwuYWd1aWxhckByaWRnZXJ1bi5jb20+CiAgKgotICogSW50aWFsIENvZGU6IFNhbmRlZXAgUGF1bHJhaiA8cy1wYXVscmFqQHRpLmNvbT4KKyAqIEluaXRpYWwgQ29kZTogU2FuZGVlcCBQYXVscmFqIDxzLXBhdWxyYWpAdGkuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90d2w0MDMwX2tleXBhZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90d2w0MDMwX2tleXBhZC5jCmluZGV4IDA5YmVmNzkuLmEyNjkyMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdHdsNDAzMF9rZXlwYWQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3R3bDQwMzBfa2V5cGFkLmMKQEAgLTMzMiwxOCArMzMyLDIwIEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCB0d2w0MDMwX2twX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHR3bDQwMzBfa2V5cGFkX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSAqa2V5bWFwX2RhdGEgPSBwZGF0YS0+a2V5bWFwX2RhdGE7CisJY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSAqa2V5bWFwX2RhdGE7CiAJc3RydWN0IHR3bDQwMzBfa2V5cGFkICprcDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKIAl1OCByZWc7CiAJaW50IGVycm9yOwogCi0JaWYgKCFwZGF0YSB8fCAhcGRhdGEtPnJvd3MgfHwgIXBkYXRhLT5jb2xzIHx8CisJaWYgKCFwZGF0YSB8fCAhcGRhdGEtPnJvd3MgfHwgIXBkYXRhLT5jb2xzIHx8ICFwZGF0YS0+a2V5bWFwX2RhdGEgfHwKIAkgICAgcGRhdGEtPnJvd3MgPiBUV0w0MDMwX01BWF9ST1dTIHx8IHBkYXRhLT5jb2xzID4gVFdMNDAzMF9NQVhfQ09MUykgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJbnZhbGlkIHBsYXRmb3JtX2RhdGFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlrZXltYXBfZGF0YSA9IHBkYXRhLT5rZXltYXBfZGF0YTsKKwogCWtwID0ga3phbGxvYyhzaXplb2YoKmtwKSwgR0ZQX0tFUk5FTCk7CiAJaW5wdXQgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIWtwIHx8ICFpbnB1dCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2FkeGwzNHguYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9hZHhsMzR4LmMKaW5kZXggZGU1OTAwZC4uMTQ0ZGRiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2FkeGwzNHguYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvYWR4bDM0eC5jCkBAIC03MTYsNyArNzE2LDcgQEAKIAlwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAlpZiAoIXBkYXRhKSB7CiAJCWRldl9kYmcoZGV2LAotCQkJIk5vIHBsYXRmcm9tIGRhdGE6IFVzaW5nIGRlZmF1bHQgaW5pdGlhbGl6YXRpb25cbiIpOworCQkJIk5vIHBsYXRmb3JtIGRhdGE6IFVzaW5nIGRlZmF1bHQgaW5pdGlhbGl6YXRpb25cbiIpOwogCQlwZGF0YSA9ICZhZHhsMzR4X2RlZmF1bHRfaW5pdDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9rZXlzcGFuX3JlbW90ZS5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2tleXNwYW5fcmVtb3RlLmMKaW5kZXggYTkzYzUyNS4uZmM2MjI1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2tleXNwYW5fcmVtb3RlLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2tleXNwYW5fcmVtb3RlLmMKQEAgLTMxMiw3ICszMTIsNyBAQAogCQkJcmVtb3RlLT5kYXRhLnRlc3RlciA9IHJlbW90ZS0+ZGF0YS50ZXN0ZXIgPj4gNTsKIAkJCXJlbW90ZS0+ZGF0YS5iaXRzX2xlZnQgLT0gNTsKIAkJfSBlbHNlIHsKLQkJCWVycigiQmFkIG1lc3NhZ2UgcmVjaWV2ZWQsIG5vIHN0b3AgYml0IGZvdW5kLlxuIik7CisJCQllcnIoIkJhZCBtZXNzYWdlIHJlY2VpdmVkLCBubyBzdG9wIGJpdCBmb3VuZC5cbiIpOwogCQl9CiAKIAkJZGV2X2RiZygmcmVtb3RlLT51ZGV2LT5kZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMgYi9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMKaW5kZXggMTI1MDFkZS4uNTJiNDE5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYwpAQCAtMjc0LDcgKzI3NCw3IEBACiAJeyBLRV9CTFVFVE9PVEgsIDB4MzAgfSwgICAgICAgICAgICAgICAgICAgICAgLyogRm4rRjEwICovCiAJeyBLRV9LRVksICAgICAgIDB4MzEsIHtLRVlfTUFJTH0gfSwgICAgICAgICAgLyogbWFpbCBidXR0b24gKi8KIAl7IEtFX0tFWSwgICAgICAgMHgzNiwge0tFWV9XV1d9IH0sICAgICAgICAgICAvKiB3d3cgYnV0dG9uICovCi0JeyBLRV9XSUZJLCAgICAgIDB4NzggfSwgICAgICAgICAgICAgICAgICAgICAgLyogc2F0ZWxpdGUgZGlzaCBidXR0b24gKi8KKwl7IEtFX1dJRkksICAgICAgMHg3OCB9LCAgICAgICAgICAgICAgICAgICAgICAvKiBzYXRlbGxpdGUgZGlzaCBidXR0b24gKi8KIAl7IEtFX0VORCwgICAgICAgMCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MveGVuLWtiZGZyb250LmMgYi9kcml2ZXJzL2lucHV0L21pc2MveGVuLWtiZGZyb250LmMKaW5kZXggNzA3N2Y5Yi4uNjJiYWU5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3hlbi1rYmRmcm9udC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy94ZW4ta2JkZnJvbnQuYwpAQCAtMzAzLDcgKzMwMyw3IEBACiAJCQkJICAgZW51bSB4ZW5idXNfc3RhdGUgYmFja2VuZF9zdGF0ZSkKIHsKIAlzdHJ1Y3QgeGVua2JkX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTsKLQlpbnQgdmFsOworCWludCByZXQsIHZhbDsKIAogCXN3aXRjaCAoYmFja2VuZF9zdGF0ZSkgewogCWNhc2UgWGVuYnVzU3RhdGVJbml0aWFsaXNpbmc6CkBAIC0zMTYsNiArMzE2LDE3IEBACiAKIAljYXNlIFhlbmJ1c1N0YXRlSW5pdFdhaXQ6CiBJbml0V2FpdDoKKwkJcmV0ID0geGVuYnVzX3NjYW5mKFhCVF9OSUwsIGluZm8tPnhiZGV2LT5vdGhlcmVuZCwKKwkJCQkgICAiZmVhdHVyZS1hYnMtcG9pbnRlciIsICIlZCIsICZ2YWwpOworCQlpZiAocmV0IDwgMCkKKwkJCXZhbCA9IDA7CisJCWlmICh2YWwpIHsKKwkJCXJldCA9IHhlbmJ1c19wcmludGYoWEJUX05JTCwgaW5mby0+eGJkZXYtPm5vZGVuYW1lLAorCQkJCQkgICAgInJlcXVlc3QtYWJzLXBvaW50ZXIiLCAiMSIpOworCQkJaWYgKHJldCkKKwkJCQlwcl93YXJuaW5nKCJ4ZW5rYmQ6IGNhbid0IHJlcXVlc3QgYWJzLXBvaW50ZXIiKTsKKwkJfQorCiAJCXhlbmJ1c19zd2l0Y2hfc3RhdGUoZGV2LCBYZW5idXNTdGF0ZUNvbm5lY3RlZCk7CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2JjbTU5NzQuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYmNtNTk3NC5jCmluZGV4IDNhZWFkOTEuLjMxMjY5ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYmNtNTk3NC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYmNtNTk3NC5jCkBAIC02MzksNyArNjM5LDcgQEAKICAqIGRldmljZSwgcmVzdWx0aW5nIGluIHRyYWNrcGFkIG1hbGZ1bmN0aW9uIHVuZGVyIGNlcnRhaW4KICAqIGNpcmN1bXN0YW5jZXMuIFRvIGdldCBhcm91bmQgdGhpcyBwcm9ibGVtLCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUKICAqIGV4YW1wbGUgdGhhdCB1dGlsaXplcyB0aGUgVVNCX1FVSVJLX1JFU0VUX1JFU1VNRSBxdWlyayBpbiBvcmRlciB0bwotICogcmVjaWV2ZSBhIHJlc2V0X3Jlc3VtZSByZXF1ZXN0IHJhdGhlciB0aGFuIHRoZSBub3JtYWwgcmVzdW1lLgorICogcmVjZWl2ZSBhIHJlc2V0X3Jlc3VtZSByZXF1ZXN0IHJhdGhlciB0aGFuIHRoZSBub3JtYWwgcmVzdW1lLgogICogU2luY2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIHJlc2V0X3Jlc3VtZSBpcyBlcXVhbCB0byBtb2RlIHN3aXRjaAogICogcGx1cyBzdGFydF90cmFmZmljLCBpdCBzZWVtcyBlYXNpZXIgdG8gYWx3YXlzIGRvIHRoZSBzd2l0Y2ggd2hlbgogICogc3RhcnRpbmcgdHJhZmZpYyBvbiB0aGUgZGV2aWNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3NfaTJjLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljc19pMmMuYwppbmRleCBmNmFhMjZkLi5jYmEzYzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljc19pMmMuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljc19pMmMuYwpAQCAtNDYyLDcgKzQ2Miw3IEBACiAJICogV2hpbGUgaW50ZXJydXB0IGRyaXZlbiwgdGhlcmUgaXMgbm8gcmVhbCBuZWVkIHRvIHBvbGwgdGhlIGRldmljZS4KIAkgKiBCdXQgdG91Y2hwYWRzIGFyZSB2ZXJ5IHNlbnNpdGl2ZSwgc28gdGhlcmUgY291bGQgYmUgZXJyb3JzCiAJICogcmVsYXRlZCB0byBwaHlzaWNhbCBlbnZpcm9ubWVudCBhbmQgdGhlIGF0dGVudGlvbiBsaW5lIGlzbid0Ci0JICogbmVjY2VzYXJpbHkgYXNzZXJ0ZWQuIEluIHN1Y2ggY2FzZSB3ZSBjYW4gbG9zZSB0aGUgdG91Y2hwYWQuCisJICogbmVjZXNzYXJpbHkgYXNzZXJ0ZWQuIEluIHN1Y2ggY2FzZSB3ZSBjYW4gbG9zZSB0aGUgdG91Y2hwYWQuCiAJICogV2UgcG9sbCB0aGUgZGV2aWNlIG9uY2UgaW4gVEhSRUFEX0lSUV9TTEVFUF9TRUNTIGFuZAogCSAqIGlmIGVycm9yIGlzIGRldGVjdGVkLCB3ZSB0cnkgdG8gcmVzZXQgYW5kIHJlY29uZmlndXJlIHRoZSB0b3VjaHBhZC4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvdnN4eHhhYS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS92c3h4eGFhLmMKaW5kZXggYmYyYzBjOC4uZWI5YTNjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS92c3h4eGFhLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS92c3h4eGFhLmMKQEAgLTMzNCw3ICszMzQsNyBAQAogCSAqIE06IG1hbnVmYWN0dXJlciBsb2NhdGlvbiBjb2RlCiAJICogUjogcmV2aXNpb24gY29kZQogCSAqIEU6IEVycm9yIGNvZGUuIElmIGl0J3MgaW4gdGhlIHJhbmdlIG9mIDB4MDAuLjB4MWYsIG9ubHkgc29tZQotCSAqICAgIG1pbm9yIHByb2JsZW0gb2NjdXJlZC4gRXJyb3JzID49IDB4MjAgYXJlIGNvbnNpZGVyZWQgYmFkCisJICogICAgbWlub3IgcHJvYmxlbSBvY2N1cnJlZC4gRXJyb3JzID49IDB4MjAgYXJlIGNvbnNpZGVyZWQgYmFkCiAJICogICAgYW5kIHRoZSBkZXZpY2UgbWF5IG5vdCB3b3JrIHByb3Blcmx5Li4uCiAJICogRDogPDAwMTA+ID09IG1vdXNlLCA8MDEwMD4gPT0gdGFibGV0CiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2hwX3NkYy5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9ocF9zZGMuYwppbmRleCA4YzBiNTFjLi40MjIwNjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2hwX3NkYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaHBfc2RjLmMKQEAgLTk1NSw3ICs5NTUsNyBAQAogCUlOSVRfREVMQVlFRF9XT1JLKCZtb2R1bGVsb2FkZXJfd29yaywgcmVxdWVzdF9tb2R1bGVfZGVsYXllZCk7CiAKIAlyZXQgPSBocF9zZGNfaW5pdCgpOwotCS8qIGFmdGVyIHN1Y2Nlc3NmdWxsIGluaXRpYWxpemF0aW9uIGdpdmUgU0RDIHNvbWUgdGltZSB0byBzZXR0bGUKKwkvKiBhZnRlciBzdWNjZXNzZnVsIGluaXRpYWxpemF0aW9uIGdpdmUgU0RDIHNvbWUgdGltZSB0byBzZXR0bGUKIAkgKiBhbmQgdGhlbiBsb2FkIHRoZSBocF9zZGNfbWxjIHVwcGVyIGxheWVyIGRyaXZlciAqLwogCWlmICghcmV0KQogCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm1vZHVsZWxvYWRlcl93b3JrLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby94aWxpbnhfcHMyLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3hpbGlueF9wczIuYwppbmRleCA3NTQwYmFmLi44MGJhYTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3hpbGlueF9wczIuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3hpbGlueF9wczIuYwpAQCAtMjI1LDcgKzIyNSw3IEBACiAvKioKICAqIHhwczJfb2ZfcHJvYmUgLSBwcm9iZSBtZXRob2QgZm9yIHRoZSBQUy8yIGRldmljZS4KICAqIEBvZl9kZXY6CXBvaW50ZXIgdG8gT0YgZGV2aWNlIHN0cnVjdHVyZQotICogQG1hdGNoOglwb2ludGVyIHRvIHRoZSBzdHVjdHVyZSB1c2VkIGZvciBtYXRjaGluZyBhIGRldmljZQorICogQG1hdGNoOglwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgdXNlZCBmb3IgbWF0Y2hpbmcgYSBkZXZpY2UKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHByb2JlcyB0aGUgUFMvMiBkZXZpY2UgaW4gdGhlIGRldmljZSB0cmVlLgogICogSXQgaW5pdGlhbGl6ZXMgdGhlIGRyaXZlciBkYXRhIHN0cnVjdHVyZSBhbmQgdGhlIGhhcmR3YXJlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwppbmRleCBjMjQ5NDZmLi4xZGUxYzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwpAQCAtMjgxLDE3ICsyODEsMjQgQEAKIAl1OAkJCWNvbW1hbmQ7CiAJdTgJCQlyZWZfb2ZmOwogCXUxNgkJCXNjcmF0Y2g7Ci0JX19iZTE2CQkJc2FtcGxlOwogCXN0cnVjdCBzcGlfbWVzc2FnZQltc2c7CiAJc3RydWN0IHNwaV90cmFuc2Zlcgl4ZmVyWzZdOworCS8qCisJICogRE1BICh0aHVzIGNhY2hlIGNvaGVyZW5jeSBtYWludGVuYW5jZSkgcmVxdWlyZXMgdGhlCisJICogdHJhbnNmZXIgYnVmZmVycyB0byBsaXZlIGluIHRoZWlyIG93biBjYWNoZSBsaW5lcy4KKwkgKi8KKwlfX2JlMTYgc2FtcGxlIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIH07CiAKIHN0cnVjdCBhZHM3ODQ1X3Nlcl9yZXEgewogCXU4CQkJY29tbWFuZFszXTsKLQl1OAkJCXB3cmRvd25bM107Ci0JdTgJCQlzYW1wbGVbM107CiAJc3RydWN0IHNwaV9tZXNzYWdlCW1zZzsKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyCXhmZXJbMl07CisJLyoKKwkgKiBETUEgKHRodXMgY2FjaGUgY29oZXJlbmN5IG1haW50ZW5hbmNlKSByZXF1aXJlcyB0aGUKKwkgKiB0cmFuc2ZlciBidWZmZXJzIHRvIGxpdmUgaW4gdGhlaXIgb3duIGNhY2hlIGxpbmVzLgorCSAqLworCXU4IHNhbXBsZVszXSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiB9OwogCiBzdGF0aWMgaW50IGFkczc4NDZfcmVhZDEyX3NlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNvbW1hbmQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2gzNjAwX3RzX2lucHV0LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2gzNjAwX3RzX2lucHV0LmMKaW5kZXggZWZhMDY4OC4uNDVmOTNkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9oMzYwMF90c19pbnB1dC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaDM2MDBfdHNfaW5wdXQuYwpAQCAtMzk5LDMxICszOTksMzQgQEAKIAkJCUlSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgImgzNjAwX2FjdGlvbiIsICZ0cy0+ZGV2KSkgewogCQlwcmludGsoS0VSTl9FUlIgImgzNjAwdHMuYzogQ291bGQgbm90IGFsbG9jYXRlIEFjdGlvbiBCdXR0b24gSVJRIVxuIik7CiAJCWVyciA9IC1FQlVTWTsKLQkJZ290byBmYWlsMjsKKwkJZ290byBmYWlsMTsKIAl9CiAKIAlpZiAocmVxdWVzdF9pcnEoSVJRX0dQSU9fQklUU1lfTlBPV0VSX0JVVFRPTiwgbnBvd2VyX2J1dHRvbl9oYW5kbGVyLAogCQkJSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELCAiaDM2MDBfc3VzcGVuZCIsICZ0cy0+ZGV2KSkgewogCQlwcmludGsoS0VSTl9FUlIgImgzNjAwdHMuYzogQ291bGQgbm90IGFsbG9jYXRlIFBvd2VyIEJ1dHRvbiBJUlEhXG4iKTsKIAkJZXJyID0gLUVCVVNZOwotCQlnb3RvIGZhaWwzOworCQlnb3RvIGZhaWwyOwogCX0KIAogCXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCB0cyk7CiAKIAllcnIgPSBzZXJpb19vcGVuKHNlcmlvLCBkcnYpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gZmFpbDM7CiAKIAkvL2gzNjAwX2ZsaXRlX2NvbnRyb2woMSwgMjUpOyAgICAgLyogZGVmYXVsdCBicmlnaHRuZXNzICovCi0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHRzLT5kZXYpOworCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZSh0cy0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWw0OwogCiAJcmV0dXJuIDA7CiAKLWZhaWwzOglmcmVlX2lycShJUlFfR1BJT19CSVRTWV9OUE9XRVJfQlVUVE9OLCB0cy0+ZGV2KTsKK2ZhaWw0OglzZXJpb19jbG9zZShzZXJpbyk7CitmYWlsMzoJc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIE5VTEwpOworCWZyZWVfaXJxKElSUV9HUElPX0JJVFNZX05QT1dFUl9CVVRUT04sIHRzLT5kZXYpOwogZmFpbDI6CWZyZWVfaXJxKElSUV9HUElPX0JJVFNZX0FDVElPTl9CVVRUT04sIHRzLT5kZXYpOwotZmFpbDE6CXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBOVUxMKTsKLQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworZmFpbDE6CWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CiAJa2ZyZWUodHMpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2ludGVsLW1pZC10b3VjaC5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9pbnRlbC1taWQtdG91Y2guYwppbmRleCBjMDMwN2IyLi42NmM5NmJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2ludGVsLW1pZC10b3VjaC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaW50ZWwtbWlkLXRvdWNoLmMKQEAgLTU0Miw3ICs1NDIsNyBAQAogCSAqIEFEQyBwb3dlciBvbiwgc3RhcnQsIGVuYWJsZSBQRU5ERVQgYW5kIHNldCBsb29wIGRlbGF5CiAJICogQURDIGxvb3AgZGVsYXkgaXMgc2V0IHRvIDQuNSBtcyBhcHByb3hpbWF0ZWx5CiAJICogTG9vcCBkZWxheSBtb3JlIHRoYW4gdGhpcyByZXN1bHRzIGluIGppdHRlciBpbiBhZGMgcmVhZGluZ3MKLQkgKiBTZXR0aW5nIGxvb3AgZGVsYXkgdG8gMCAoY29udGlub3VzIGxvb3ApIGluIE1BWElNIHN0b3BzIFBFTkRFVAorCSAqIFNldHRpbmcgbG9vcCBkZWxheSB0byAwIChjb250aW51b3VzIGxvb3ApIGluIE1BWElNIHN0b3BzIFBFTkRFVAogCSAqIGludGVycnVwdCBnZW5lcmF0aW9uIHNvbWV0aW1lcy4KIAkgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi91Y2IxNDAwX3RzLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3VjYjE0MDBfdHMuYwppbmRleCAwMjhhNTM2Li4zYjViNWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3VjYjE0MDBfdHMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3VjYjE0MDBfdHMuYwpAQCAtNiw3ICs2LDcgQEAKICAqICBDb3B5cmlnaHQ6CU1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqCiAgKiBTcGxpdGluZyBkb25lIGJ5OiBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgotICogSWYgc29tZXRoaW5nIGRvZXNudCB3b3JrIGFuZCBpdCB3b3JrZWQgYmVmb3JlIHNwbGl0aW5nLCBlLW1haWwgbWUsCisgKiBJZiBzb21ldGhpbmcgZG9lc24ndCB3b3JrIGFuZCBpdCB3b3JrZWQgYmVmb3JlIHNwbGl0aW5nLCBlLW1haWwgbWUsCiAgKiBkb250IGJvdGhlciBOaWNvbGFzIHBsZWFzZSA7LSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTgzMXgtdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd204MzF4LXRzLmMKaW5kZXggNmFlMDU0Zi4uOTE3NWQ0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTgzMXgtdHMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtODMxeC10cy5jCkBAIC02OCw4ICs2OCwyMyBAQAogCXVuc2lnbmVkIGludCBwZF9pcnE7CiAJYm9vbCBwcmVzc3VyZTsKIAlib29sIHBlbl9kb3duOworCXN0cnVjdCB3b3JrX3N0cnVjdCBwZF9kYXRhX3dvcms7CiB9OwogCitzdGF0aWMgdm9pZCB3bTgzMXhfcGRfZGF0YV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgd204MzF4X3RzICp3bTgzMXhfdHMgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHdtODMxeF90cywgcGRfZGF0YV93b3JrKTsKKworCWlmICh3bTgzMXhfdHMtPnBlbl9kb3duKSB7CisJCWVuYWJsZV9pcnEod204MzF4X3RzLT5kYXRhX2lycSk7CisJCWRldl9kYmcod204MzF4X3RzLT53bTgzMXgtPmRldiwgIklSUSBQRC0+REFUQSBkb25lXG4iKTsKKwl9IGVsc2UgeworCQllbmFibGVfaXJxKHdtODMxeF90cy0+cGRfaXJxKTsKKwkJZGV2X2RiZyh3bTgzMXhfdHMtPndtODMxeC0+ZGV2LCAiSVJRIERBVEEtPlBEIGRvbmVcbiIpOworCX0KK30KKwogc3RhdGljIGlycXJldHVybl90IHdtODMxeF90c19kYXRhX2lycShpbnQgaXJxLCB2b2lkICppcnFfZGF0YSkKIHsKIAlzdHJ1Y3Qgd204MzF4X3RzICp3bTgzMXhfdHMgPSBpcnFfZGF0YTsKQEAgLTExMCw2ICsxMjUsOSBAQAogCX0KIAogCWlmICghd204MzF4X3RzLT5wZW5fZG93bikgeworCQkvKiBTd2l0Y2ggZnJvbSBkYXRhIHRvIHBlbiBkb3duICovCisJCWRldl9kYmcod204MzF4LT5kZXYsICJJUlEgREFUQS0+UERcbiIpOworCiAJCWRpc2FibGVfaXJxX25vc3luYyh3bTgzMXhfdHMtPmRhdGFfaXJxKTsKIAogCQkvKiBEb24ndCBuZWVkIGRhdGEgYW55IG1vcmUgKi8KQEAgLTEyOCw2ICsxNDYsMTAgQEAKIAkJCQkJIEFCU19QUkVTU1VSRSwgMCk7CiAKIAkJaW5wdXRfcmVwb3J0X2tleSh3bTgzMXhfdHMtPmlucHV0X2RldiwgQlROX1RPVUNILCAwKTsKKworCQlzY2hlZHVsZV93b3JrKCZ3bTgzMXhfdHMtPnBkX2RhdGFfd29yayk7CisJfSBlbHNlIHsKKwkJaW5wdXRfcmVwb3J0X2tleSh3bTgzMXhfdHMtPmlucHV0X2RldiwgQlROX1RPVUNILCAxKTsKIAl9CiAKIAlpbnB1dF9zeW5jKHdtODMxeF90cy0+aW5wdXRfZGV2KTsKQEAgLTE0MSw2ICsxNjMsMTEgQEAKIAlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSB3bTgzMXhfdHMtPndtODMxeDsKIAlpbnQgZW5hID0gMDsKIAorCWlmICh3bTgzMXhfdHMtPnBlbl9kb3duKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwlkaXNhYmxlX2lycV9ub3N5bmMod204MzF4X3RzLT5wZF9pcnEpOworCiAJLyogU3RhcnQgY29sbGVjdGluZyBkYXRhICovCiAJaWYgKHdtODMxeF90cy0+cHJlc3N1cmUpCiAJCWVuYSB8PSBXTTgzMVhfVENIX1pfRU5BOwpAQCAtMTQ5LDE0ICsxNzYsMTQgQEAKIAkJCVdNODMxWF9UQ0hfWF9FTkEgfCBXTTgzMVhfVENIX1lfRU5BIHwgV004MzFYX1RDSF9aX0VOQSwKIAkJCVdNODMxWF9UQ0hfWF9FTkEgfCBXTTgzMVhfVENIX1lfRU5BIHwgZW5hKTsKIAotCWlucHV0X3JlcG9ydF9rZXkod204MzF4X3RzLT5pbnB1dF9kZXYsIEJUTl9UT1VDSCwgMSk7Ci0JaW5wdXRfc3luYyh3bTgzMXhfdHMtPmlucHV0X2Rldik7Ci0KIAl3bTgzMXhfc2V0X2JpdHMod204MzF4LCBXTTgzMVhfSU5URVJSVVBUX1NUQVRVU18xLAogCQkJV004MzFYX1RDSFBEX0VJTlQsIFdNODMxWF9UQ0hQRF9FSU5UKTsKIAogCXdtODMxeF90cy0+cGVuX2Rvd24gPSB0cnVlOwotCWVuYWJsZV9pcnEod204MzF4X3RzLT5kYXRhX2lycSk7CisKKwkvKiBTd2l0Y2ggZnJvbSBwZW4gZG93biB0byBkYXRhICovCisJZGV2X2RiZyh3bTgzMXgtPmRldiwgIklSUSBQRC0+REFUQVxuIik7CisJc2NoZWR1bGVfd29yaygmd204MzF4X3RzLT5wZF9kYXRhX3dvcmspOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMTgyLDEzICsyMDksMjggQEAKIAlzdHJ1Y3Qgd204MzF4X3RzICp3bTgzMXhfdHMgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpZGV2KTsKIAlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSB3bTgzMXhfdHMtPndtODMxeDsKIAorCS8qIFNodXQgdGhlIGNvbnRyb2xsZXIgZG93biwgZGlzYWJsaW5nIGFsbCBvdGhlciBmdW5jdGlvbmFsaXR5IHRvbyAqLwogCXdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9UT1VDSF9DT05UUk9MXzEsCi0JCQlXTTgzMVhfVENIX0VOQSB8IFdNODMxWF9UQ0hfQ1ZUX0VOQSB8Ci0JCQlXTTgzMVhfVENIX1hfRU5BIHwgV004MzFYX1RDSF9ZX0VOQSB8Ci0JCQlXTTgzMVhfVENIX1pfRU5BLCAwKTsKKwkJCVdNODMxWF9UQ0hfRU5BIHwgV004MzFYX1RDSF9YX0VOQSB8CisJCQlXTTgzMVhfVENIX1lfRU5BIHwgV004MzFYX1RDSF9aX0VOQSwgMCk7CiAKLQlpZiAod204MzF4X3RzLT5wZW5fZG93bikKKwkvKiBNYWtlIHN1cmUgYW55IHBlbmRpbmcgSVJRcyBhcmUgZG9uZSwgdGhlIGFib3ZlIHdpbGwgcHJldmVudAorCSAqIG5ldyBvbmVzIGZpcmluZy4KKwkgKi8KKwlzeW5jaHJvbml6ZV9pcnEod204MzF4X3RzLT5kYXRhX2lycSk7CisJc3luY2hyb25pemVfaXJxKHdtODMxeF90cy0+cGRfaXJxKTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgSVJRIGNvbXBsZXRpb24gd29yayBpcyBxdWllc2NlZCAqLworCWZsdXNoX3dvcmtfc3luYygmd204MzF4X3RzLT5wZF9kYXRhX3dvcmspOworCisJLyogSWYgd2UgZW5kZWQgdXAgd2l0aCB0aGUgcGVuIGRvd24gdGhlbiBtYWtlIHN1cmUgd2UgcmV2ZXJ0IGJhY2sKKwkgKiB0byBwZW4gZGV0ZWN0aW9uIHN0YXRlIGZvciB0aGUgbmV4dCB0aW1lIHdlIHN0YXJ0IHVwLgorCSAqLworCWlmICh3bTgzMXhfdHMtPnBlbl9kb3duKSB7CiAJCWRpc2FibGVfaXJxKHdtODMxeF90cy0+ZGF0YV9pcnEpOworCQllbmFibGVfaXJxKHdtODMxeF90cy0+cGRfaXJxKTsKKwkJd204MzF4X3RzLT5wZW5fZG93biA9IGZhbHNlOworCX0KIH0KIAogc3RhdGljIF9fZGV2aW5pdCBpbnQgd204MzF4X3RzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC0xOTgsNyArMjQwLDcgQEAKIAlzdHJ1Y3Qgd204MzF4X3BkYXRhICpjb3JlX3BkYXRhID0gZGV2X2dldF9wbGF0ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKIAlzdHJ1Y3Qgd204MzF4X3RvdWNoX3BkYXRhICpwZGF0YSA9IE5VTEw7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwotCWludCBlcnJvcjsKKwlpbnQgZXJyb3IsIGlycWY7CiAKIAlpZiAoY29yZV9wZGF0YSkKIAkJcGRhdGEgPSBjb3JlX3BkYXRhLT50b3VjaDsKQEAgLTIxMiw2ICsyNTQsNyBAQAogCiAJd204MzF4X3RzLT53bTgzMXggPSB3bTgzMXg7CiAJd204MzF4X3RzLT5pbnB1dF9kZXYgPSBpbnB1dF9kZXY7CisJSU5JVF9XT1JLKCZ3bTgzMXhfdHMtPnBkX2RhdGFfd29yaywgd204MzF4X3BkX2RhdGFfd29yayk7CiAKIAkvKgogCSAqIElmIHdlIGhhdmUgYSBkaXJlY3QgSVJRIHVzZSBpdCwgb3RoZXJ3aXNlIHVzZSB0aGUgaW50ZXJydXB0CkBAIC0yNzAsOSArMzEzLDE0IEBACiAJd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX1RPVUNIX0NPTlRST0xfMSwKIAkJCVdNODMxWF9UQ0hfUkFURV9NQVNLLCA2KTsKIAorCWlmIChwZGF0YSAmJiBwZGF0YS0+ZGF0YV9pcnFmKQorCQlpcnFmID0gcGRhdGEtPmRhdGFfaXJxZjsKKwllbHNlCisJCWlycWYgPSBJUlFGX1RSSUdHRVJfSElHSDsKKwogCWVycm9yID0gcmVxdWVzdF90aHJlYWRlZF9pcnEod204MzF4X3RzLT5kYXRhX2lycSwKIAkJCQkgICAgIE5VTEwsIHdtODMxeF90c19kYXRhX2lycSwKLQkJCQkgICAgIElSUUZfT05FU0hPVCwKKwkJCQkgICAgIGlycWYgfCBJUlFGX09ORVNIT1QsCiAJCQkJICAgICAiVG91Y2hzY3JlZW4gZGF0YSIsIHdtODMxeF90cyk7CiAJaWYgKGVycm9yKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IGRhdGEgSVJRICVkOiAlZFxuIiwKQEAgLTI4MSw5ICszMjksMTQgQEAKIAl9CiAJZGlzYWJsZV9pcnEod204MzF4X3RzLT5kYXRhX2lycSk7CiAKKwlpZiAocGRhdGEgJiYgcGRhdGEtPnBkX2lycWYpCisJCWlycWYgPSBwZGF0YS0+cGRfaXJxZjsKKwllbHNlCisJCWlycWYgPSBJUlFGX1RSSUdHRVJfSElHSDsKKwogCWVycm9yID0gcmVxdWVzdF90aHJlYWRlZF9pcnEod204MzF4X3RzLT5wZF9pcnEsCiAJCQkJICAgICBOVUxMLCB3bTgzMXhfdHNfcGVuX2Rvd25faXJxLAotCQkJCSAgICAgSVJRRl9PTkVTSE9ULAorCQkJCSAgICAgaXJxZiB8IElSUUZfT05FU0hPVCwKIAkJCQkgICAgICJUb3VjaHNjcmVlbiBwZW4gZG93biIsIHdtODMxeF90cyk7CiAJaWYgKGVycm9yKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IHBlbiBkb3duIElSUSAlZDogJWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTcwNS5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3MDUuYwppbmRleCA2YjViZTc0Li45OGU2MTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTcwNS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205NzA1LmMKQEAgLTMwNiw3ICszMDYsNyBAQAogCWRpZzIgPSB3bS0+ZGlnWzJdOwogCiAJaWYgKGVuYWJsZSkgewotCQkvKiBjb250aW5vdXMgbW9kZSAqLworCQkvKiBjb250aW51b3VzIG1vZGUgKi8KIAkJaWYgKHdtLT5tYWNoX29wcy0+YWNjX3N0YXJ0dXAgJiYKIAkJICAgIChyZXQgPSB3bS0+bWFjaF9vcHMtPmFjY19zdGFydHVwKHdtKSkgPCAwKQogCQkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205NzEyLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTcxMi5jCmluZGV4IDc0OTBiMDUuLjJiYzJmYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205NzEyLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3MTIuYwpAQCAtNDE5LDcgKzQxOSw3IEBACiAJZGlnMiA9IHdtLT5kaWdbMl07CiAKIAlpZiAoZW5hYmxlKSB7Ci0JCS8qIGNvbnRpbm91cyBtb2RlICovCisJCS8qIGNvbnRpbnVvdXMgbW9kZSAqLwogCQlpZiAod20tPm1hY2hfb3BzLT5hY2Nfc3RhcnR1cCkgewogCQkJcmV0ID0gd20tPm1hY2hfb3BzLT5hY2Nfc3RhcnR1cCh3bSk7CiAJCQlpZiAocmV0IDwgMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205NzEzLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTcxMy5jCmluZGV4IDIzOGI1MTMuLjczZWM5OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205NzEzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3MTMuYwpAQCAtNDMxLDcgKzQzMSw3IEBACiAJZGlnMyA9IHdtLT5kaWdbMl07CiAKIAlpZiAoZW5hYmxlKSB7Ci0JCS8qIGNvbnRpbm91cyBtb2RlICovCisJCS8qIGNvbnRpbnVvdXMgbW9kZSAqLwogCQlpZiAod20tPm1hY2hfb3BzLT5hY2Nfc3RhcnR1cCAmJgogCQkJKHJldCA9IHdtLT5tYWNoX29wcy0+YWNjX3N0YXJ0dXAod20pKSA8IDApCiAJCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3eHgtY29yZS5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3eHgtY29yZS5jCmluZGV4IDZiNzVjOWYuLjVkYmU3M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205N3h4LWNvcmUuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTd4eC1jb3JlLmMKQEAgLTMzNSw3ICszMzUsNyBAQAogCSAqLwogCWlmICghd20tPm1hY2hfb3BzLT5hY2NfZW5hYmxlZCB8fCB3bS0+bWFjaF9vcHMtPmFjY19wZW5fZG93bikgewogCQlpZiAod20tPnBlbl9pc19kb3duICYmICFwZW5fd2FzX2Rvd24pIHsKLQkJCS8qIERhdGEgaXMgbm90IGF2YWlsaWFibGUgaW1tZWRpYXRlbHkgb24gcGVuIGRvd24gKi8KKwkJCS8qIERhdGEgaXMgbm90IGF2YWlsYWJsZSBpbW1lZGlhdGVseSBvbiBwZW4gZG93biAqLwogCQkJcXVldWVfZGVsYXllZF93b3JrKHdtLT50c193b3JrcSwgJndtLT50c19yZWFkZXIsIDEpOwogCQl9CiAKQEAgLTM1NCw3ICszNTQsNyBAQAogICogQ29kZWMgUEVORE9XTiBpcnEgaGFuZGxlcgogICoKICAqIFdlIGhhdmUgdG8gZGlzYWJsZSB0aGUgY29kZWMgaW50ZXJydXB0IGluIHRoZSBoYW5kbGVyIGJlY2F1c2UgaXQKLSAqIGNhbiB0YWtlIHVwdG8gMW1zIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgc291cmNlLiBXZSBzY2hlZHVsZSBhIHRhc2sKKyAqIGNhbiB0YWtlIHVwIHRvIDFtcyB0byBjbGVhciB0aGUgaW50ZXJydXB0IHNvdXJjZS4gV2Ugc2NoZWR1bGUgYSB0YXNrCiAgKiBpbiBhIHdvcmsgcXVldWUgdG8gZG8gdGhlIGFjdHVhbCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBjaGlwLiAgVGhlCiAgKiBpbnRlcnJ1cHQgaXMgdGhlbiBlbmFibGVkIGFnYWluIGluIHRoZSBzbG93IGhhbmRsZXIgd2hlbiB0aGUgc291cmNlCiAgKiBoYXMgYmVlbiBjbGVhcmVkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFjYXBpLmggYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YWNhcGkuaAppbmRleCA5ZjViNjgwLi5lMzMwZGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YWNhcGkuaAorKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YWNhcGkuaApAQCAtNjczLDcgKzY3Myw3IEBACiAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogYXV4aWxsaWFyeSBzdGF0ZXMgZm9yIHN1cHBsZW1lbnRhcnkgc2VydmljZXMgICAgICAgICAgICAgICAgICAgICAqLworLyogYXV4aWxpYXJ5IHN0YXRlcyBmb3Igc3VwcGxlbWVudGFyeSBzZXJ2aWNlcyAgICAgICAgICAgICAgICAgICAgICovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNkZWZpbmUgSURMRSAgICAgICAgICAgICAgICAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vaW8uaCBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9pby5oCmluZGV4IDBjNmM2NTAuLmE2ZjE3NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9pby5oCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9pby5oCkBAIC02MCw3ICs2MCw3IEBACiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiBzdHJ1Y3QgX0lTRE5fQURBUFRFUiB7CiAgdm9pZCAgICAgICAgICAgICAoKiBESVJlcXVlc3QpKFBJU0ROX0FEQVBURVIsIEVOVElUWSAqKSA7Ci0gaW50ICAgICAgICAgICAgICAgICBTdGF0ZSA7IC8qIGZyb20gTlQ0IDEuc3J2LCBhIGdvb2QgaWRlYSwgYnV0ICBhIHBvb3IgYWNoaWV2bWVudCAqLworIGludCAgICAgICAgICAgICAgICAgU3RhdGUgOyAvKiBmcm9tIE5UNCAxLnNydiwgYSBnb29kIGlkZWEsIGJ1dCAgYSBwb29yIGFjaGlldmVtZW50ICovCiAgaW50ICAgICAgICAgICAgICAgICBJbml0aWFsaXplZCA7CiAgaW50ICAgICAgICAgUmVnaXN0ZXJlZFdpdGhEaWRkIDsKICBpbnQgICAgICAgICAgICAgICAgIFVuYXZhaWxhYmxlIDsgIC8qIGNhbGxiYWNrIGZ1bmN0aW9uIHBvc3NpYmxlPyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21lc3NhZ2UuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMKaW5kZXggMzQxZWYxNy4uOGM1YzU2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21lc3NhZ2UuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jCkBAIC0yNjM5LDcgKzI2MzksNyBAQAogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgLyogbG9jYWwgcmVwbHkgaWYgYXNzaWduIHVuc3VjY2Vzc2Z1bGwKKyAgICAgIC8qIGxvY2FsIHJlcGx5IGlmIGFzc2lnbiB1bnN1Y2Nlc3NmdWwKICAgICAgICAgIG9yIEIzIHByb3RvY29sIGFsbG93cyBvbmx5IG9uZSBsYXllciAzIGNvbm5lY3Rpb24KICAgICAgICAgICAgYW5kIGFscmVhZHkgY29ubmVjdGVkCiAgICAgICAgICAgICAgb3IgQjIgcHJvdG9jb2wgbm90IGFueSBMQVBECkBAIC04MTg5LDcgKzgxODksNyBAQAogICAgICAgZGxjWyAwXSA9IDE1OwogICAgICAgaWYoYjJfY29uZmlnLT5sZW5ndGggPj0gOCkgeyAvKiBQSUFGUyBjb250cm9sIGFiaWxpdGllcyAqLwogICAgICAgICBkbGNbIDddID0gMTA7IAotICAgICAgICBkbGNbMTZdID0gMjsgLyogTGVuZ3RoIG9mIFBJQUZTIGV4dGVudGlvbiAqLworICAgICAgICBkbGNbMTZdID0gMjsgLyogTGVuZ3RoIG9mIFBJQUZTIGV4dGVuc2lvbiAqLwogICAgICAgICBkbGNbMTddID0gUElBRlNfVURBVEFfQUJJTElUSUVTOyAvKiBjb250cm9sIChVREFUQSkgYWJpbGl0eSAqLwogICAgICAgICBkbGNbMThdID0gYjJfY29uZmlnX3Bhcm1zWzRdLmluZm9bMF07IC8qIHZhbHVlICovCiAgICAgICAgIGRsY1sgMF0gPSAxODsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9wYy5oIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL3BjLmgKaW5kZXggMWM2OTQ1Ny4uYmY2YjAxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL3BjLmgKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL3BjLmgKQEAgLTcwMSw3ICs3MDEsNyBAQAogI2RlZmluZSBQUk9UQ0FQX0ZSRUUxMiAgICAweDEwMDAgIC8qIG5vdCB1c2VkICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFBST1RDQVBfRlJFRTEzICAgIDB4MjAwMCAgLyogbm90IHVzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgUFJPVENBUF9GUkVFMTQgICAgMHg0MDAwICAvKiBub3QgdXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBQUk9UQ0FQX0VYVEVOU0lPTiAweDgwMDAgIC8qIHVzZWQgZm9yIGZ1dHVyZSBleHRlbnRpb25zICAgICAgICAgICovCisjZGVmaW5lIFBST1RDQVBfRVhURU5TSU9OIDB4ODAwMCAgLyogdXNlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMgICAgICAgICAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiAqLwogLyogT25ob29rIGRhdGEgdHJhbnNtaXNzaW9uIEVUUzMwMDY1OTAxICovCiAvKiBNZXNzYWdlIFR5cGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi91bV9pZGkuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi91bV9pZGkuYwppbmRleCA2NTYzZGI5Li5hYzBiZGQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vdW1faWRpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL3VtX2lkaS5jCkBAIC0zNjMsNyArMzYzLDcgQEAKIAogCQlpZiAoKHJldCA9ICgqY3BfZm4pIChvc19oYW5kbGUsIGRzdCwgZGF0YSwgbGVuZ3RoKSkgPj0gMCkgewogCQkJLyoKLQkJCSAgIEFja25vd2xlZGdlIG9ubHkgaWYgcmVhZCB3YXMgc3VjY2Vzc2Z1bGwKKwkJCSAgIEFja25vd2xlZGdlIG9ubHkgaWYgcmVhZCB3YXMgc3VjY2Vzc2Z1bAogCQkJICovCiAJCQlkaXZhX2RhdGFfcV9hY2tfc2VnbWVudDRyZWFkKHEpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjbXVsdGkuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNtdWx0aS5jCmluZGV4IDRlMzc4MGQuLmY2ZjNjODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNtdWx0aS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNtdWx0aS5jCkBAIC0xMTgsNyArMTE4LDcgQEAKICAqCS0+IFNlZSBoZmNfbXVsdGkuaCBmb3IgSEZDX0lPX01PREVfKiB2YWx1ZXMKICAqCUJ5IGRlZmF1bHQsIHRoZSBJTyBtb2RlIGlzIHBjaSBtZW1vcnkgSU8gKE1FTUlPKS4KICAqCVNvbWUgY2FyZHMgcmVxdWlyZSBzcGVjaWZpYyBJTyBtb2RlLCBzbyBpdCBjYW5ub3QgYmUgY2hhbmdlZC4KLSAqCUl0IG1heSBiZSB1c2VmdWxsIHRvIHNldCBJTyBtb2RlIHRvIHJlZ2lzdGVyIGlvIChSRUdJTykgdG8gc29sdmUKKyAqCUl0IG1heSBiZSB1c2VmdWwgdG8gc2V0IElPIG1vZGUgdG8gcmVnaXN0ZXIgaW8gKFJFR0lPKSB0byBzb2x2ZQogICoJUENJIGJyaWRnZSBwcm9ibGVtcy4KICAqCUlmIHVuc3VyZSwgZG9uJ3QgZ2l2ZSB0aGlzIHBhcmFtZXRlci4KICAqCkBAIC05MDMsNyArOTAzLDcgQEAKIC8qCiAgKiBTcGVlY2ggRGVzaWduIHJlc3luYyBmZWF0dXJlCiAgKiBOT1RFOiBUaGlzIGlzIGNhbGxlZCBzb21ldGltZXMgb3V0c2lkZSBpbnRlcnJ1cHQgaGFuZGxlci4KLSAqIFdlIG11c3QgbG9jayBpcnFzYXZlLCBzbyBubyBvdGhlciBpbnRlcnJ1cHQgKG90aGVyIGNhcmQpIHdpbGwgb2NjdXJyIQorICogV2UgbXVzdCBsb2NrIGlycXNhdmUsIHNvIG5vIG90aGVyIGludGVycnVwdCAob3RoZXIgY2FyZCkgd2lsbCBvY2N1ciEKICAqIEFsc28gbXVsdGlwbGUgaW50ZXJydXB0cyBtYXkgbmVzdCwgc28gbXVzdCBsb2NrIGVhY2ggYWNjZXNzIChsaXN0cywgY2FyZCkhCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3BjaS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3BjaS5jCmluZGV4IDE1ZDMyM2IuLjQzNDNhYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNwY2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjcGNpLmMKQEAgLTI3Miw3ICsyNzIsNyBAQAogCSAqIEQtIGFuZCBtb25pdG9yL0NJIGNoYW5uZWwgYXJlIG5vdCBlbmFibGVkCiAJICogU1RJTzEgaXMgdXNlZCBhcyBvdXRwdXQgZm9yIGRhdGEsIEIxK0IyIGZyb20gU1QtPklPTStIRkMKIAkgKiBTVElPMiBpcyB1c2VkIGFzIGRhdGEgaW5wdXQsIEIxK0IyIGZyb20gSU9NLT5TVAotCSAqIFNUIEItY2hhbm5lbCBzZW5kIGRpc2FibGVkIC0+IGNvbnRpbm91cyAxcworCSAqIFNUIEItY2hhbm5lbCBzZW5kIGRpc2FibGVkIC0+IGNvbnRpbnVvdXMgMXMKIAkgKiBUaGUgSU9NIHNsb3RzIGFyZSBhbHdheXMgZW5hYmxlZAogCSAqLwogCWlmICh0ZXN0X2JpdChIRkNfQ0ZHX1BDTSwgJmhjLT5jZmcpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYwppbmRleCAzMTQ3MDIwLi4wY2IwNTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCS8qIEQtIGFuZCBtb25pdG9yL0NJIGNoYW5uZWwgYXJlIG5vdCBlbmFibGVkICovCiAJLyogU1RJTzEgaXMgdXNlZCBhcyBvdXRwdXQgZm9yIGRhdGEsIEIxK0IyIGZyb20gU1QtPklPTStIRkMgKi8KIAkvKiBTVElPMiBpcyB1c2VkIGFzIGRhdGEgaW5wdXQsIEIxK0IyIGZyb20gSU9NLT5TVCAqLwotCS8qIFNUIEItY2hhbm5lbCBzZW5kIGRpc2FibGVkIC0+IGNvbnRpbm91cyAxcyAqLworCS8qIFNUIEItY2hhbm5lbCBzZW5kIGRpc2FibGVkIC0+IGNvbnRpbnVvdXMgMXMgKi8KIAkvKiBUaGUgSU9NIHNsb3RzIGFyZSBhbHdheXMgZW5hYmxlZCAqLwogCWNzLT5ody5oZmNwY2kuY29ubiA9IDB4MzY7CS8qIHNldCBkYXRhIGZsb3cgZGlyZWN0aW9ucyAqLwogCVdyaXRlX2hmYyhjcywgSEZDUENJX0NPTk5FQ1QsIGNzLT5ody5oZmNwY2kuY29ubik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3N4LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3N4LmMKaW5kZXggMTIzNWI3MS4uMTU2ZDdjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19zeC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfc3guYwpAQCAtMzk5LDcgKzM5OSw3IEBACiAJLyogRC0gYW5kIG1vbml0b3IvQ0kgY2hhbm5lbCBhcmUgbm90IGVuYWJsZWQgKi8KIAkvKiBTVElPMSBpcyB1c2VkIGFzIG91dHB1dCBmb3IgZGF0YSwgQjErQjIgZnJvbSBTVC0+SU9NK0hGQyAqLwogCS8qIFNUSU8yIGlzIHVzZWQgYXMgZGF0YSBpbnB1dCwgQjErQjIgZnJvbSBJT00tPlNUICovCi0JLyogU1QgQi1jaGFubmVsIHNlbmQgZGlzYWJsZWQgLT4gY29udGlub3VzIDFzICovCisJLyogU1QgQi1jaGFubmVsIHNlbmQgZGlzYWJsZWQgLT4gY29udGludW91cyAxcyAqLwogCS8qIFRoZSBJT00gc2xvdHMgYXJlIGFsd2F5cyBlbmFibGVkICovCiAJY3MtPmh3LmhmY3N4LmNvbm4gPSAweDM2OwkvKiBzZXQgZGF0YSBmbG93IGRpcmVjdGlvbnMgKi8KIAlXcml0ZV9oZmMoY3MsIEhGQ1NYX0NPTk5FQ1QsIGNzLT5ody5oZmNzeC5jb25uKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfdXNiLmggYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3VzYi5oCmluZGV4IGU3OWY1NjUuLjJmNTgxYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfdXNiLmgKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY191c2IuaApAQCAtMTI2LDcgKzEyNiw3IEBACiAKIAogLyoKLSAqIGRldmljZSBkZXBlbmRhbnQgaW5mb3JtYXRpb24gdG8gc3VwcG9ydCBkaWZmZXJlbnQKKyAqIGRldmljZSBkZXBlbmRlbnQgaW5mb3JtYXRpb24gdG8gc3VwcG9ydCBkaWZmZXJlbnQKICAqIElTRE4gVGEncyB1c2luZyB0aGUgSEZDLVMgVVNCIGNoaXAKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvbDNkc3MxLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbDNkc3MxLmMKaW5kZXggY2M2ZWUyZC4uOGUyZmQwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2wzZHNzMS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9sM2RzczEuYwpAQCAtMTU5NSw3ICsxNTk1LDcgQEAKIAkgKiBCZWFyZXIgQ2FwYWJpbGl0aWVzCiAJICovCiAJcCA9IHNrYi0+ZGF0YTsKLQkvKiBvbmx5IHRoZSBmaXJzdCBvY2N1cmVuY2UgJ2xsIGJlIGRldGVjdGVkICEgKi8KKwkvKiBvbmx5IHRoZSBmaXJzdCBvY2N1cnJlbmNlICdsbCBiZSBkZXRlY3RlZCAhICovCiAJaWYgKChwID0gZmluZGllKHAsIHNrYi0+bGVuLCAweDA0LCAwKSkpIHsKIAkJaWYgKChwWzFdIDwgMikgfHwgKHBbMV0gPiAxMSkpCiAJCQllcnIgPSAxOwpAQCAtMjE2MSw3ICsyMTYxLDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogaGFuZGxlIHNwZWNpYWwgY29tbWFuZHMgZm9yIHRoaXMgcHJvdG9jb2wuICAqLwotLyogRXhhbXBsZXMgYXJlIGNhbGwgaW5kZXBlbmRhbnQgc2VydmljZXMgbGlrZSAqLworLyogRXhhbXBsZXMgYXJlIGNhbGwgaW5kZXBlbmRlbnQgc2VydmljZXMgbGlrZSAqLwogLyogcmVtb3RlIG9wZXJhdGlvbnMgd2l0aCBkdW1teSAgY2FsbHJlZi4gICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCBsM2RzczFfY21kX2dsb2JhbChzdHJ1Y3QgUFN0YWNrICpzdCwgaXNkbl9jdHJsICppYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9sM25pMS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2wzbmkxLmMKaW5kZXggZjk1ODQ0OS4uN2IyMjljMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2wzbmkxLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2wzbmkxLmMKQEAgLTE0NDksNyArMTQ0OSw3IEBACiAJICogQmVhcmVyIENhcGFiaWxpdGllcwogCSAqLwogCXAgPSBza2ItPmRhdGE7Ci0JLyogb25seSB0aGUgZmlyc3Qgb2NjdXJlbmNlICdsbCBiZSBkZXRlY3RlZCAhICovCisJLyogb25seSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSAnbGwgYmUgZGV0ZWN0ZWQgISAqLwogCWlmICgocCA9IGZpbmRpZShwLCBza2ItPmxlbiwgMHgwNCwgMCkpKSB7CiAJCWlmICgocFsxXSA8IDIpIHx8IChwWzFdID4gMTEpKQogCQkJZXJyID0gMTsKQEAgLTIwMTcsNyArMjAxNyw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIGhhbmRsZSBzcGVjaWFsIGNvbW1hbmRzIGZvciB0aGlzIHByb3RvY29sLiAgKi8KLS8qIEV4YW1wbGVzIGFyZSBjYWxsIGluZGVwZW5kYW50IHNlcnZpY2VzIGxpa2UgKi8KKy8qIEV4YW1wbGVzIGFyZSBjYWxsIGluZGVwZW5kZW50IHNlcnZpY2VzIGxpa2UgKi8KIC8qIHJlbW90ZSBvcGVyYXRpb25zIHdpdGggZHVtbXkgIGNhbGxyZWYuICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbnQgbDNuaTFfY21kX2dsb2JhbChzdHJ1Y3QgUFN0YWNrICpzdCwgaXNkbl9jdHJsICppYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9ual9zLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfcy5jCmluZGV4IDIzNDRlN2IuLmExYjg5NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9ual9zLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L25qX3MuYwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJCXJldHVybigwKTsKIAl9CiAJLyogdGhlIFRKMzAwIGFuZCBUSjMyMCBtdXN0IGJlIGRldGVjdGVkLCB0aGUgSVJRIGhhbmRsaW5nIGlzIGRpZmZlcmVudAotCSAqIHVuZm9ydHVuYXRseSB0aGUgY2hpcHMgdXNlIHRoZSBzYW1lIGRldmljZSBJRCwgYnV0IHRoZSBUSjMyMCBoYXMKKwkgKiB1bmZvcnR1bmF0ZWx5IHRoZSBjaGlwcyB1c2UgdGhlIHNhbWUgZGV2aWNlIElELCBidXQgdGhlIFRKMzIwIGhhcwogCSAqIHRoZSBiaXQyMCBpbiBzdGF0dXMgUENJIGNmZyByZWdpc3RlciBzZXQKIAkgKi8KIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2X25ldGpldCwgMHgwNCwgJmNmZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX2IuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfYi5jCmluZGV4IGU1NmU1YWYuLmVkNGJjNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfYi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfYi5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIH0KIAogLyoKLSAqIFN0YXJ0IHRyYW5zZmVyaW5nIChmbGFncyBvciBkYXRhKSBvbiB0aGUgQiBjaGFubmVsLCBzaW5jZQorICogU3RhcnQgdHJhbnNmZXJyaW5nIChmbGFncyBvciBkYXRhKSBvbiB0aGUgQiBjaGFubmVsLCBzaW5jZQogICogRklGTyBjb3VudGVycyBoYXMgYmVlbiBzZXQgdG8gYSBub24temVybyB2YWx1ZS4KICAqLwogc3RhdGljIHZvaWQgc3Q1NDgxQl9zdGFydF94ZmVyKHZvaWQgKmNvbnRleHQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX3VzYi5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV91c2IuYwppbmRleCAxMGQ0MWM1Li4xNTllOGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX3VzYi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfdXNiLmMKQEAgLTQ3MCw3ICs0NzAsNyBAQAogCiAvKgogICogRGVjb2RlIGZyYW1lcyByZWNlaXZlZCBvbiB0aGUgQi9EIGNoYW5uZWwuCi0gKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBjb250aW5vdXNseQorICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgY29udGludW91c2x5CiAgKiB3aXRoIDY0S2JpdC9zIC8gMTZLYml0L3Mgb2YgZGF0YSBhbmQgaGVuY2UgaXQgd2lsbCBiZSAKICAqIGNhbGxlZCA1MCB0aW1lcyBwZXIgc2Vjb25kIHdpdGggMjAgSVNPQyBkZXNjcmlwdG9ycy4gCiAgKiBDYWxsZWQgYXQgaW50ZXJydXB0LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzX2NzLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNfY3MuYwppbmRleCAyODJhNDQ2Li5hYTI1ZTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNfY3MuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNfY3MuYwpAQCAtOSw3ICs5LDcgQEAKICAgICBBbHNvIGluc3BpcmVkIGJ5IEVMU0EgUENNQ0lBIGRyaXZlciAKICAgICBieSBLbGF1cyBMaWNodGVud2FsZGVyIDxMaWNodGVud2FsZGVyQEFDTS5vcmc+CiAgICAgCi0gICAgRXh0ZW50aW9ucyB0byBuZXcgaGlzYXhfcGNtY2lhIGJ5IEthcnN0ZW4gS2VpbAorICAgIEV4dGVuc2lvbnMgdG8gbmV3IGhpc2F4X3BjbWNpYSBieSBLYXJzdGVuIEtlaWwKIAogICAgIG1pbm9yIGNoYW5nZXMgdG8gYmUgY29tcGF0aWJsZSB3aXRoIGtlcm5lbCAyLjQueAogICAgIGJ5IEphbi5TY2h1YmVydEBHTVgubGkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9zY2hlZC5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3NjaGVkLmMKaW5kZXggODFkYjRhMS4uMzY3NGQzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3NjaGVkLmMKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3NjaGVkLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogLyogc2VuZCBvbmUgY29uZmlnIGxpbmUgdG8gdGhlIGNhcmQgYW5kIHJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSBhICovCiAvKiBuZWdhdGl2ZSBlcnJvciBjb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBUaGUgZnVuY3Rpb24gd29ya3Mgd2l0aCB0aW1lb3V0cyBwZXJoYXBzIG5vdCBnaXZpbmcgdGhlIGdyZWF0ZXN0IHNwZWVkICAgICovCi0vKiBzZW5kaW5nIHRoZSBsaW5lLCBidXQgdGhpcyBzaG91bGQgYmUgbWVhbmluZ2xlc3MgYmVhY3VzZSBvbmx5IHNvbWUgbGluZXMgICovCisvKiBzZW5kaW5nIHRoZSBsaW5lLCBidXQgdGhpcyBzaG91bGQgYmUgbWVhbmluZ2xlc3MgYmVjYXVzZSBvbmx5IHNvbWUgbGluZXMgICovCiAvKiBhcmUgdG8gYmUgc2VudCBhbmQgdGhpcyBoYXBwZW5zIHZlcnkgc2VsZG9tLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9uZXQuYyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9uZXQuYwppbmRleCBhZmVlZGU3Li4yYTdkMTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fbmV0LmMKKysrIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX25ldC5jCkBAIC0xNTMwLDcgKzE1MzAsNyBAQAogCQlwcmludGsgKEtFUk5fV0FSTklORwogCQkJCSJVUERPV046IExpbmUgcHJvdG9jb2wgb24gSW50ZXJmYWNlICVzLCIKIAkJCQkiIGNoYW5nZWQgc3RhdGUgdG8gZG93blxuIiwgbHAtPm5ldGRldi0+ZGV2LT5uYW1lKTsKLQkJLyogc2hvdWxkIHN0b3Agcm91dGluZyBoaWdoZXItbGV2ZWwgZGF0YSBhY2Nyb3NzICovCisJCS8qIHNob3VsZCBzdG9wIHJvdXRpbmcgaGlnaGVyLWxldmVsIGRhdGEgYWNyb3NzICovCiAJfSBlbHNlIGlmICgoIWxwLT5jaXNjb19saW5lX3N0YXRlKSAmJgogCQkobXlzZXFfZGlmZiA+PSAwKSAmJiAobXlzZXFfZGlmZiA8PSAyKSkgewogCQkvKiBsaW5lIGRvd24gLT4gdXAgKi8KQEAgLTE1MzgsNyArMTUzOCw3IEBACiAJCXByaW50ayAoS0VSTl9XQVJOSU5HCiAJCQkJIlVQRE9XTjogTGluZSBwcm90b2NvbCBvbiBJbnRlcmZhY2UgJXMsIgogCQkJCSIgY2hhbmdlZCBzdGF0ZSB0byB1cFxuIiwgbHAtPm5ldGRldi0+ZGV2LT5uYW1lKTsKLQkJLyogcmVzdGFydCByb3V0aW5nIGhpZ2hlci1sZXZlbCBkYXRhIGFjY3Jvc3MgKi8KKwkJLyogcmVzdGFydCByb3V0aW5nIGhpZ2hlci1sZXZlbCBkYXRhIGFjcm9zcyAqLwogCX0KIAogCWlmIChscC0+Y2lzY29fZGVic2VyaW50KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3BwcC5jIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3BwcC5jCmluZGV4IDllODE2MmMuLjFiMDAyYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9wcHAuYworKysgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fcHBwLmMKQEAgLTE1MTQsNyArMTUxNCw3IEBACiAjZGVmaW5lIE1QX0xPTkdTRVFfTUFYQklUCSgoTVBfTE9OR1NFUV9NQVNLKzEpPj4xKQogI2RlZmluZSBNUF9TSE9SVFNFUV9NQVhCSVQJKChNUF9TSE9SVFNFUV9NQVNLKzEpPj4xKQogCi0vKiBzZXF1ZW5jZS13cmFwIHNhZmUgY29tcGFyaXNpb25zIChmb3IgbG9uZyBzZXF1ZW5jZSkqLyAKKy8qIHNlcXVlbmNlLXdyYXAgc2FmZSBjb21wYXJpc29ucyAoZm9yIGxvbmcgc2VxdWVuY2UpKi8KICNkZWZpbmUgTVBfTFQoYSxiKQkoKGEtYikmTVBfTE9OR1NFUV9NQVhCSVQpCiAjZGVmaW5lIE1QX0xFKGEsYikgCSEoKGItYSkmTVBfTE9OR1NFUV9NQVhCSVQpCiAjZGVmaW5lIE1QX0dUKGEsYikgCSgoYi1hKSZNUF9MT05HU0VRX01BWEJJVCkKQEAgLTE3NDYsNyArMTc0Niw3IEBACiAJCSAqIHRoZW4gbmV4dCBmcmFnbWVudCBzaG91bGQgYmUgdGhlIHN0YXJ0IG9mIG5ldyByZWFzc2VtYmx5CiAJCSAqIGlmIHNlcXVlbmNlIGlzIGNvbnRpZ3VvdXMsIGJ1dCB3ZSBoYXZlbid0IHJlYXNzZW1ibGVkIHlldCwKIAkJICoga2VlcCBnb2luZy4KLQkJICogaWYgc2VxdWVuY2UgaXMgbm90IGNvbnRpZ3VvdXMsIGVpdGhlciBjbGVhciBldmVyeXRpbmcKKwkJICogaWYgc2VxdWVuY2UgaXMgbm90IGNvbnRpZ3VvdXMsIGVpdGhlciBjbGVhciBldmVyeXRoaW5nCiAJCSAqIGJlbG93IGxvdyB3YXRlcm1hcmsgYW5kIHNldCBzdGFydCB0byB0aGUgbmV4dCBmcmFnIG9yCiAJCSAqIGNsZWFyIHN0YXJ0IHB0ci4KIAkJICovIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3R0eS5jIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3R0eS5jCmluZGV4IDNkODhmMTUuLjYwN2Q4NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl90dHkuYworKysgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fdHR5LmMKQEAgLTc5Miw3ICs3OTIsNyBAQAogfQogCiAvKiBpc2RuX3R0eV9yZXN1bWUoKSB0cmllcyB0byByZXN1bWUgYSBzdXNwZW5kZWQgY2FsbAotICogc2V0dXAgb2YgdGhlIGxvd2VyIGxldmVscyBiZWZvcmUgdGhhdC4gdW5mb3J0dW5hdGx5IGhlcmUgaXMgbm8KKyAqIHNldHVwIG9mIHRoZSBsb3dlciBsZXZlbHMgYmVmb3JlIHRoYXQuIHVuZm9ydHVuYXRlbHkgaGVyZSBpcyBubwogICogY2hlY2tpbmcgZm9yIGNvbXBhdGliaWxpdHkgb2YgdXNlZCBwcm90b2NvbHMgaW1wbGVtZW50ZWQgYnkgUTkzMQogICogSXQgZG9lcyB0aGUgc2FtZSB0aGluZ3MgbGlrZSBpc2RuX3R0eV9kaWFsLCB0aGUgbGFzdCBjb21tYW5kCiAgKiBpcyBkaWZmZXJlbnQsIG1heSBiZSB3ZSBjYW4gbWVyZ2UgaXQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaXNkbmxvb3AvaXNkbmxvb3AuYyBiL2RyaXZlcnMvaXNkbi9pc2RubG9vcC9pc2RubG9vcC5jCmluZGV4IGI4YTEwOTguLmQ0OTdkYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pc2RubG9vcC9pc2RubG9vcC5jCisrKyBiL2RyaXZlcnMvaXNkbi9pc2RubG9vcC9pc2RubG9vcC5jCkBAIC05NTQsNyArOTU0LDcgQEAKIC8qCiAgKiBQdXQgY29tbWFuZC1zdHJpbmdzIGludG8gdGhlIG9mIHRoZSAnY2FyZCcuIEluIHJlYWxpdHksIGV4ZWN1dGUgdGhlbQogICogcmlnaHQgaW4gcGxhY2UgYnkgY2FsbGluZyBpc2RubG9vcF9wYXJzZV9jbWQoKS4gQWxzbyBjb3B5IGV2ZXJ5Ci0gKiBjb21tYW5kIHRvIHRoZSByZWFkIG1lc3NhZ2UgcmluZ2J1ZmZlciwgcHJlY2VlZGluZyBpdCB3aXRoIGEgJz4nLgorICogY29tbWFuZCB0byB0aGUgcmVhZCBtZXNzYWdlIHJpbmdidWZmZXIsIHByZWNlZGluZyBpdCB3aXRoIGEgJz4nLgogICogVGhlc2UgbWVzYWdnZXMgY2FuIGJlIHJlYWQgYXQgL2Rldi9pc2RuY3RybC4KICAqCiAgKiBQYXJhbWV0ZXI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vbUlTRE4vZHNwLmggYi9kcml2ZXJzL2lzZG4vbUlTRE4vZHNwLmgKaW5kZXggMThhZjg2OC4uODU0OTQzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL21JU0ROL2RzcC5oCisrKyBiL2RyaXZlcnMvaXNkbi9tSVNETi9kc3AuaApAQCAtMjEsNyArMjEsNyBAQAogLyogb3B0aW9ucyBtYXkgYmU6CiAgKgogICogYml0IDAgPSB1c2UgdWxhdyBpbnN0ZWFkIG9mIGFsYXcKLSAqIGJpdCAxID0gZW5hYmxlIGhmYyBoYXJkd2FyZSBhY2NlbGxlcmF0aW9uIGZvciBhbGwgY2hhbm5lbHMKKyAqIGJpdCAxID0gZW5hYmxlIGhmYyBoYXJkd2FyZSBhY2NlbGVyYXRpb24gZm9yIGFsbCBjaGFubmVscwogICoKICAqLwogI2RlZmluZSBEU1BfT1BUX1VMQVcJCSgxPDwwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL21JU0ROL2RzcF9jbXguYyBiL2RyaXZlcnMvaXNkbi9tSVNETi9kc3BfY214LmMKaW5kZXggMzA5YmFjZi4uNGQzOTVkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL21JU0ROL2RzcF9jbXguYworKysgYi9kcml2ZXJzL2lzZG4vbUlTRE4vZHNwX2NteC5jCkBAIC0xNTEzLDcgKzE1MTMsNyBAQAogCS8qIC0+IGlmIGVjaG8gaXMgTk9UIGVuYWJsZWQgKi8KIAlpZiAoIWRzcC0+ZWNoby5zb2Z0d2FyZSkgewogCQkvKgotCQkgKiAtPiBzdWJzdHJhY3QgcngtZGF0YSBmcm9tIGNvbmYtZGF0YSwKKwkJICogLT4gc3VidHJhY3QgcngtZGF0YSBmcm9tIGNvbmYtZGF0YSwKIAkJICogaWYgdHgtZGF0YSBpcyBhdmFpbGFibGUsIG1peAogCQkgKi8KIAkJd2hpbGUgKHIgIT0gcnIgJiYgdCAhPSB0dCkgewpAQCAtMTU3Miw3ICsxNTcyLDcgQEAKIHNlbmRfcGFja2V0OgogCS8qCiAJICogc2VuZCB0eC1kYXRhIGlmIGVuYWJsZWQgLSBkb24ndCBmaWx0ZXIsCi0JICogYmVjdWFzZSB3ZSB3YW50IHdoYXQgd2Ugc2VuZCwgbm90IHdoYXQgd2UgZmlsdGVyZWQKKwkgKiBiZWNhdXNlIHdlIHdhbnQgd2hhdCB3ZSBzZW5kLCBub3Qgd2hhdCB3ZSBmaWx0ZXJlZAogCSAqLwogCWlmIChkc3AtPnR4X2RhdGEpIHsKIAkJaWYgKHR4X2RhdGFfb25seSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL21JU0ROL2RzcF9jb3JlLmMgYi9kcml2ZXJzL2lzZG4vbUlTRE4vZHNwX2NvcmUuYwppbmRleCA2ZjViNTQ4Li4yODc3MjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vbUlTRE4vZHNwX2NvcmUuYworKysgYi9kcml2ZXJzL2lzZG4vbUlTRE4vZHNwX2NvcmUuYwpAQCAtMTE1LDcgKzExNSw3IEBACiAgKgogICogVGhlIENNWCBoYXMgc3BlY2lhbCBmdW5jdGlvbnMgZm9yIGNvbmZlcmVuY2VzIHdpdGggb25lLCB0d28gYW5kIG1vcmUKICAqIG1lbWJlcnMuIEl0IHdpbGwgYWxsb3cgZGlmZmVyZW50IHR5cGVzIG9mIGRhdGEgZmxvdy4gUmVjZWl2ZSBhbmQgdHJhbnNtaXQKLSAqIGRhdGEgdG8vZm9ybSB1cHBlciBsYXllciBtYXkgYmUgc3dpdGhlZCBvbi9vZmYgaW5kaXZpZHVhbGx5IHdpdGhvdXQgbG9vc2luZworICogZGF0YSB0by9mb3JtIHVwcGVyIGxheWVyIG1heSBiZSBzd2l0aGVkIG9uL29mZiBpbmRpdmlkdWFsbHkgd2l0aG91dCBsb3NpbmcKICAqIGZlYXR1cmVzIG9mIENNWCwgVG9uZXMgYW5kIERUTUYuCiAgKgogICogRWNobyBDYW5jZWxsYXRpb246IFNvbWV0aW1lcyB3ZSBsaWtlIHRvIGNhbmNlbCBlY2hvIGZyb20gdGhlIGludGVyZmFjZS4KQEAgLTEyNyw5ICsxMjcsOSBAQAogICoKICAqIElmIGFsbCB1c2VkIGZlYXR1cmVzIGNhbiBiZSByZWFsaXplZCBpbiBoYXJkd2FyZSwgYW5kIGlmIHRyYW5zbWl0IGFuZC9vcgogICogcmVjZWl2ZSBkYXRhIGlzdCBkaXNhYmxlZCwgdGhlIGNhcmQgbWF5IG5vdCBzZW5kL3JlY2VpdmUgYW55IGRhdGEgYXQgYWxsLgotICogTm90IHJlY2VpdmluZyBpcyB1c2VmdWxsIGlmIG9ubHkgYW5ub3VuY2VtZW50cyBhcmUgcGxheWVkLiBOb3Qgc2VuZGluZyBpcwotICogdXNlZnVsbCBpZiBhbiBhbnN3ZXJpbmcgbWFjaGluZSByZWNvcmRzIGF1ZGlvLiBOb3Qgc2VuZGluZyBhbmQgcmVjZWl2aW5nIGlzCi0gKiB1c2VmdWxsIGR1cmluZyBtb3N0IHN0YXRlcyBvZiB0aGUgY2FsbC4gSWYgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlLCB0b25lcworICogTm90IHJlY2VpdmluZyBpcyB1c2VmdWwgaWYgb25seSBhbm5vdW5jZW1lbnRzIGFyZSBwbGF5ZWQuIE5vdCBzZW5kaW5nIGlzCisgKiB1c2VmdWwgaWYgYW4gYW5zd2VyaW5nIG1hY2hpbmUgcmVjb3JkcyBhdWRpby4gTm90IHNlbmRpbmcgYW5kIHJlY2VpdmluZyBpcworICogdXNlZnVsIGR1cmluZyBtb3N0IHN0YXRlcyBvZiB0aGUgY2FsbC4gSWYgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlLCB0b25lcwogICogd2lsbCBiZSBwbGF5ZWQgd2l0aG91dCBjcHUgbG9hZC4gU21hbGwgUEJYcyBhbmQgTlQtTW9kZSBhcHBsaWNhdGlvbnMgd2lsbAogICogbm90IG5lZWQgZXhwZW5zaXZlIGhhcmR3YXJlIHdoZW4gcHJvY2Vzc2luZyBjYWxscy4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vbUlTRE4vZHNwX2R0bWYuYyBiL2RyaXZlcnMvaXNkbi9tSVNETi9kc3BfZHRtZi5jCmluZGV4IDlhZTJkMzMuLjViNDg0YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9tSVNETi9kc3BfZHRtZi5jCisrKyBiL2RyaXZlcnMvaXNkbi9tSVNETi9kc3BfZHRtZi5jCkBAIC0xMDYsNyArMTA2LDcgQEAKICAqIHRlc3RlZCBpdCBhbGxvdC4gaXQgZXZlbiB3b3JrcyB3aXRoIHZlcnkgc2hvcnQgdG9uZXMgKDQwbXMpLiB0aGUgb25seQogICogZGlzYWR2YW50YWdlIGlzLCB0aGF0IGl0IGRvZXNuJ3Qgd29yayBnb29kIHdpdGggZGlmZmVyZW50IHZvbHVtZXMgb2YgYm90aAogICogdG9uZXMuIHRoaXMgd2lsbCBoYXBwZW4sIGlmIGFjY291c3RpY2FsbHkgY291cGxlZCBkaWFsZXJzIGFyZSB1c2VkLgotICogaXQgc29tZXRpbWVzIGRldGVjdHMgdG9uZXMgZHVyaW5nIHNwZWFjaCwgd2hpY2ggaXMgbm9ybWFsIGZvciBkZWNvZGVycy4KKyAqIGl0IHNvbWV0aW1lcyBkZXRlY3RzIHRvbmVzIGR1cmluZyBzcGVlY2gsIHdoaWNoIGlzIG5vcm1hbCBmb3IgZGVjb2RlcnMuCiAgKiB1c2Ugc2VxdWVuY2VzIHRvIGdpdmVuIGNvbW1hbmRzIGR1cmluZyBjYWxscy4KICAqCiAgKiBkdG1mIC0gcG9pbnRzIHRvIGEgc3RydWN0dXJlIG9mIHRoZSBjdXJyZW50IGR0bWYgc3RhdGUKQEAgLTI0NCw3ICsyNDQsNyBAQAogCQlpZiAocmVzdWx0W2ldIDwgdHJlc2gpIHsKIAkJCWxvd2dyb3VwID0gLTE7CiAJCQloaWdoZ3JvdXAgPSAtMTsKLQkJCWJyZWFrOyAgLyogbm9pc2UgaW5iZXR3ZWVuICovCisJCQlicmVhazsgIC8qIG5vaXNlIGluIGJldHdlZW4gKi8KIAkJfQogCQkvKiBnb29kIGxldmVsIGZvdW5kLiBUaGlzIGlzIGFsbG93ZWQgb25seSBvbmUgdGltZSBwZXIgZ3JvdXAgKi8KIAkJaWYgKGkgPCBOQ09FRkYvMikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL21JU0ROL2RzcF90b25lcy5jIGIvZHJpdmVycy9pc2RuL21JU0ROL2RzcF90b25lcy5jCmluZGV4IDdkYmU1NGUuLjRlNDQ0MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9tSVNETi9kc3BfdG9uZXMuYworKysgYi9kcml2ZXJzL2lzZG4vbUlTRE4vZHNwX3RvbmVzLmMKQEAgLTM5NCw3ICszOTQsNyBAQAogCXdoaWxlIChsZW4pIHsKIAkJLyogZmluZCBzYW1wbGUgdG8gc3RhcnQgd2l0aCAqLwogCQl3aGlsZSAoNDIpIHsKLQkJCS8qIHdhcnAgYXJyb3VuZCAqLworCQkJLyogd3JhcCBhcm91bmQgKi8KIAkJCWlmICghcGF0LT5zZXFbaW5kZXhdKSB7CiAJCQkJY291bnQgPSAwOwogCQkJCWluZGV4ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9tSVNETi9sMW9pcF9jb3JlLmMgYi9kcml2ZXJzL2lzZG4vbUlTRE4vbDFvaXBfY29yZS5jCmluZGV4IGJkNTI2ZjYuLjIyZjhlYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9tSVNETi9sMW9pcF9jb3JlLmMKKysrIGIvZHJpdmVycy9pc2RuL21JU0ROL2wxb2lwX2NvcmUuYwpAQCAtMTc5LDcgKzE3OSw3IEBACiAtIFRpbWUgQmFzZSA9IFRpbWVzdGFtcCBvZiBmaXJzdCBzYW1wbGUgaW4gZnJhbWUKIFRoZSAiVGltZSBCYXNlIiBpcyB1c2VkIHRvIHJlYXJhbmdlIHBhY2tldHMgYW5kIHRvIGRldGVjdCBwYWNrZXQgbG9zcy4KIFRoZSAxNiBiaXRzIGFyZSBzZW50IGluIG5ldHdvcmsgb3JkZXIgKE1TQiBmaXJzdCkgYW5kIGNvdW50IDEvODAwMCB0aCBvZiBhCi1zZWNvbmQuIFRoaXMgY2F1c2VzIGEgd3JhcCBhcnJvdW5kIGVhY2ggOCwxOTIgc2Vjb25kcy4gVGhlcmUgaXMgbm8gcmVxdWlyZW1lbnQKK3NlY29uZC4gVGhpcyBjYXVzZXMgYSB3cmFwIGFyb3VuZCBlYWNoIDgsMTkyIHNlY29uZHMuIFRoZXJlIGlzIG5vIHJlcXVpcmVtZW50CiBmb3IgdGhlIGluaXRpYWwgIlRpbWUgQmFzZSIsIGJ1dCAwIHNob3VsZCBiZSB1c2VkIGZvciB0aGUgZmlyc3QgcGFja2V0LgogSW4gY2FzZSBvZiBIRExDIGRhdGEsIHRoaXMgdGltZXN0YW1wIGNvdW50cyB0aGUgcGFja2V0IG9yIGJ5dGUgbnVtYmVyLgogCkBAIC0yMDUsNyArMjA1LDcgQEAKIAogSWYgdGhlIG9uZGVtYW5kIHBhcmFtZXRlciBpcyBnaXZlbiwgdGhlIHJlbW90ZSBJUCBpcyBzZXQgdG8gMCBvbiB0aW1lb3V0LgogVGhpcyB3aWxsIHN0b3Aga2VlcGFsaXZlIHRyYWZmaWMgdG8gcmVtb3RlLiBJZiB0aGUgcmVtb3RlIGlzIG9ubGluZSBhZ2FpbiwKLXRyYWZmaWMgd2lsbCBjb250aW51ZSB0byB0aGUgcmVtb3RlIGFkZHJlc3MuIFRoaXMgaXMgdXNlZnVsbCBmb3Igcm9hZCB3YXJyaW9ycy4KK3RyYWZmaWMgd2lsbCBjb250aW51ZSB0byB0aGUgcmVtb3RlIGFkZHJlc3MuIFRoaXMgaXMgdXNlZnVsIGZvciByb2FkIHdhcnJpb3JzLgogVGhpcyBmZWF0dXJlIG9ubHkgd29ya3Mgd2l0aCBJRCBzZXQsIG90aGVyd2hpc2UgaXQgaXMgaGlnaGx5IHVuc2VjdXJlLgogCiAKQEAgLTU5MCw3ICs1OTAsNyBAQAogCQkJcmV0dXJuOwogCQl9CiAJfSBlbHNlCi0JCW1sZW4gPSBsZW4tMjsgLyogc2luZ2xlIGZyYW1lLCBzdWJzdHJhY3QgdGltZWJhc2UgKi8KKwkJbWxlbiA9IGxlbi0yOyAvKiBzaW5nbGUgZnJhbWUsIHN1YnRyYWN0IHRpbWViYXNlICovCiAKIAlpZiAobGVuIDwgMikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcGFja2V0IGVycm9yIC0gcGFja2V0IHRvbyBzaG9ydCwgdGltZSAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vbUlTRE4vbGF5ZXIyLmMgYi9kcml2ZXJzL2lzZG4vbUlTRE4vbGF5ZXIyLmMKaW5kZXggNGFlNzUwNS4uZDBhZWI0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL21JU0ROL2xheWVyMi5jCisrKyBiL2RyaXZlcnMvaXNkbi9tSVNETi9sYXllcjIuYwpAQCAtMTg2NCw3ICsxODY0LDcgQEAKIAkJcHNhcGkgPj49IDI7CiAJCXB0ZWkgPj49IDE7CiAJCWlmIChwc2FwaSAhPSBsMi0+c2FwaSkgewotCQkJLyogbm90IG91ciBidXNzaW5lc3MgKi8KKwkJCS8qIG5vdCBvdXIgYnVzaW5lc3MgKi8KIAkJCWlmICgqZGVidWcgJiBERUJVR19MMikKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHNhcGkgJWQvJWQgbWlzbWF0Y2hcbiIsCiAJCQkJCV9fZnVuY19fLCBwc2FwaSwgbDItPnNhcGkpOwpAQCAtMTg3Miw3ICsxODcyLDcgQEAKIAkJCXJldHVybiAwOwogCQl9CiAJCWlmICgocHRlaSAhPSBsMi0+dGVpKSAmJiAocHRlaSAhPSBHUk9VUF9URUkpKSB7Ci0JCQkvKiBub3Qgb3VyIGJ1c3NpbmVzcyAqLworCQkJLyogbm90IG91ciBidXNpbmVzcyAqLwogCQkJaWYgKCpkZWJ1ZyAmIERFQlVHX0wyKQogCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdGVpICVkLyVkIG1pc21hdGNoXG4iLAogCQkJCQlfX2Z1bmNfXywgcHRlaSwgbDItPnRlaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1sbTM1MzAuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWxtMzUzMC5jCmluZGV4IGU3MDg5YTEuLmIzN2U2MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWxtMzUzMC5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWxtMzUzMC5jCkBAIC0zNDksNiArMzQ5LDcgQEAKIAl7TE0zNTMwX05BTUUsIDB9LAogCXt9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGxtMzUzMF9pZCk7CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsbTM1MzBfaTJjX2RyaXZlciA9IHsKIAkucHJvYmUgPSBsbTM1MzBfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1wY2E5NTMyLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1wY2E5NTMyLmMKaW5kZXggYWZhYzMzOC4uNWJmNjNhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtcGNhOTUzMi5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLXBjYTk1MzIuYwpAQCAtNTgsNyArNTgsNyBAQAogCS5pZF90YWJsZSA9IHBjYTk1MzJfaWQsCiB9OwogCi0vKiBXZSBoYXZlIHR3byBwd20vYmxpbmtlcnMsIGJ1dCAxNiBwb3NzaWJsZSBsZWRzIHRvIGRyaXZlLiBBZGRpdGlvbmFseSwKKy8qIFdlIGhhdmUgdHdvIHB3bS9ibGlua2VycywgYnV0IDE2IHBvc3NpYmxlIGxlZHMgdG8gZHJpdmUuIEFkZGl0aW9uYWxseSwKICAqIHRoZSBjbGV2ZXIgVGhlY3VzIHBlb3BsZSBhcmUgdXNpbmcgb25lIHB3bSB0byBkcml2ZSB0aGUgYmVlcGVyLiBTbywKICAqIGFzIGEgY29tcHJvbWlzZSB3ZSBhdmVyYWdlIG9uZSBwd20gdG8gdGhlIHZhbHVlcyByZXF1ZXN0ZWQgYnkgYWxsCiAgKiBsZWRzIHRoYXQgYXJlIG5vdCBPTi9PRkYuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLXJlZ3VsYXRvci5jCmluZGV4IDM3OTA4MTYuLjg0OTdmNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLXJlZ3VsYXRvci5jCkBAIC0xNzgsNiArMTc4LDEwIEBACiAJbGVkLT5jZGV2LmZsYWdzIHw9IExFRF9DT1JFX1NVU1BFTkRSRVNVTUU7CiAJbGVkLT52Y2MgPSB2Y2M7CiAKKwkvKiB0byBoYW5kbGUgY29ycmVjdGx5IGFuIGFscmVhZHkgZW5hYmxlZCByZWd1bGF0b3IgKi8KKwlpZiAocmVndWxhdG9yX2lzX2VuYWJsZWQobGVkLT52Y2MpKQorCQlsZWQtPmVuYWJsZWQgPSAxOworCiAJbXV0ZXhfaW5pdCgmbGVkLT5tdXRleCk7CiAJSU5JVF9XT1JLKCZsZWQtPndvcmssIGxlZF93b3JrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtd204MzUwLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy13bTgzNTAuYwppbmRleCBhMDQ1MjMyLi5mMTRlZGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy13bTgzNTAuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy13bTgzNTAuYwpAQCAtMjE1LDEzICsyMTUsMTMgQEAKIAogCWlzaW5rID0gcmVndWxhdG9yX2dldCgmcGRldi0+ZGV2LCAibGVkX2lzaW5rIik7CiAJaWYgKElTX0VSUihpc2luaykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FudCBnZXQgSVNJTktcbiIsIF9fZnVuY19fKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgZ2V0IElTSU5LXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBQVFJfRVJSKGlzaW5rKTsKIAl9CiAKIAlkY2RjID0gcmVndWxhdG9yX2dldCgmcGRldi0+ZGV2LCAibGVkX3ZjYyIpOwogCWlmIChJU19FUlIoZGNkYykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FudCBnZXQgRENEQ1xuIiwgX19mdW5jX18pOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBnZXQgRENEQ1xuIiwgX19mdW5jX18pOwogCQlyZXQgPSBQVFJfRVJSKGRjZGMpOwogCQlnb3RvIGVycl9pc2luazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xndWVzdC9sZ3Vlc3RfdXNlci5jIGIvZHJpdmVycy9sZ3Vlc3QvbGd1ZXN0X3VzZXIuYwppbmRleCAzYzc4MWNkLi45NDhjNTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xndWVzdC9sZ3Vlc3RfdXNlci5jCisrKyBiL2RyaXZlcnMvbGd1ZXN0L2xndWVzdF91c2VyLmMKQEAgLTEzMCw3ICsxMzAsNyBAQAogCXJjdV9hc3NpZ25fcG9pbnRlcihsZy0+ZXZlbnRmZHMsIG5ldyk7CiAKIAkvKgotCSAqIFdlJ3JlIG5vdCBpbiBhIGJpZyBodXJyeS4gIFdhaXQgdW50aWwgbm9vbmUncyBsb29raW5nIGF0IG9sZAorCSAqIFdlJ3JlIG5vdCBpbiBhIGJpZyBodXJyeS4gIFdhaXQgdW50aWwgbm8gb25lJ3MgbG9va2luZyBhdCBvbGQKIAkgKiB2ZXJzaW9uLCB0aGVuIGZyZWUgaXQuCiAJICovCiAJc3luY2hyb25pemVfcmN1KCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC9hZGJoaWQuYyBiL2RyaXZlcnMvbWFjaW50b3NoL2FkYmhpZC5jCmluZGV4IDUzOTZjNjcuLjA5ZDcyYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL2FkYmhpZC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL2FkYmhpZC5jCkBAIC0zMjgsNyArMzI4LDcgQEAKIAlzd2l0Y2ggKGtleWNvZGUpIHsKIAljYXNlIEFEQl9LRVlfQ0FQU0xPQ0s6CiAJCWlmICghcmVzdG9yZV9jYXBzbG9ja19ldmVudHMpIHsKLQkJCS8qIEdlbmVyYXRlIGRvd24vdXAgZXZlbnRzIGZvciBDYXBzTG9jayBldmVyeXRpbWUuICovCisJCQkvKiBHZW5lcmF0ZSBkb3duL3VwIGV2ZW50cyBmb3IgQ2Fwc0xvY2sgZXZlcnkgdGltZS4gKi8KIAkJCWlucHV0X3JlcG9ydF9rZXkoYWhpZC0+aW5wdXQsIEtFWV9DQVBTTE9DSywgMSk7CiAJCQlpbnB1dF9zeW5jKGFoaWQtPmlucHV0KTsKIAkJCWlucHV0X3JlcG9ydF9rZXkoYWhpZC0+aW5wdXQsIEtFWV9DQVBTTE9DSywgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC9tYWNpby1hZGIuYyBiL2RyaXZlcnMvbWFjaW50b3NoL21hY2lvLWFkYi5jCmluZGV4IGJkNmRhN2EuLmI2ZWY4ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL21hY2lvLWFkYi5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL21hY2lvLWFkYi5jCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAogCS8qIEhybS4uLiB3ZSBtYXkgd2FudCB0byBub3QgbG9jayBpbnRlcnJ1cHRzIGZvciBzbwogCSAqIGxvbmcgLi4uIG9oIHdlbGwsIHdobyB1c2VzIHRoYXQgY2hpcCBhbnl3YXkgPyA6KQotCSAqIFRoYXQgZnVuY3Rpb24gd2lsbCBiZSBzZWxkb21seSB1c2VkIGR1cmluZyBib290CisJICogVGhhdCBmdW5jdGlvbiB3aWxsIGJlIHNlbGRvbSB1c2VkIGR1cmluZyBib290CiAJICogb24gcmFyZSBtYWNoaW5lcywgc28uLi4KIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjaW9fbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jCmluZGV4IDllM2UyYzUuLjAyMzY3MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYworKysgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKQEAgLTY2Miw3ICs2NjIsNyBAQAogCQllcnIgfD0gZGV2aWNlX2NyZWF0ZV9maWxlKCZvZl9kZXYtPmRldiwgJmRldl9hdHRyX3NlbnNvcjJfZmFuX3NwZWVkKTsKIAlpZiAoZXJyKQogCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkiRmFpbGVkIHRvIGNyZWF0ZSB0ZW1wZXJ0YXVyZSBhdHRyaWJ1dGUgZmlsZShzKS5cbiIpOworCQkJIkZhaWxlZCB0byBjcmVhdGUgdGVtcGVyYXR1cmUgYXR0cmlidXRlIGZpbGUocykuXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgdGhlcm1vc3RhdF9yZW1vdmVfZmlsZXModm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYwppbmRleCBjOTg3MDMzLi5iYjhiNzIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jCkBAIC05MSw3ICs5MSw3IEBACiAgKgogICogIE1hci4gMTAsIDIwMDUgOiAxLjIKICAqCS0gQWRkIGJhc2ljIHN1cHBvcnQgZm9yIFhzZXJ2ZSBHNQotICoJLSBSZXRyZWl2ZSBwdW1wcyBtaW4vbWF4IGZyb20gRUVQUk9NIGltYWdlIGluIGRldmljZS10cmVlIChicm9rZW4pCisgKgktIFJldHJpZXZlIHB1bXBzIG1pbi9tYXggZnJvbSBFRVBST00gaW1hZ2UgaW4gZGV2aWNlLXRyZWUgKGJyb2tlbikKICAqCS0gVXNlIG1pbi9tYXggbWFjcm9zIGhlcmUgb3IgdGhlcmUKICAqCS0gTGF0ZXN0IGRhcndpbiB1cGRhdGVkIFUzSCBtaW4gZmFuIHNwZWVkIHRvIDIwJSBQV00KICAqCkBAIC0zNzUsNyArMzc1LDcgQEAKIAkJcmMgPSBpMmNfbWFzdGVyX3NlbmQoc3RhdGUtPm1vbml0b3IsIGJ1ZiwgMik7CiAJCWlmIChyYyA8PSAwKQogCQkJZ290byBlcnJvcjsKLQkJLyogV2FpdCBmb3IgY29udmVydGlvbiAqLworCQkvKiBXYWl0IGZvciBjb252ZXJzaW9uICovCiAJCW1zbGVlcCgxKTsKIAkJLyogU3dpdGNoIHRvIGRhdGEgcmVnaXN0ZXIgKi8KIAkJYnVmWzBdID0gNDsKQEAgLTExOTIsNyArMTE5Miw3IEBACiAJCWVyciB8PSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfY3B1MV9pbnRha2VfZmFuX3JwbSk7CiAJfQogCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byBjcmVhdGUgc29tZSBvZiB0aGUgYXRyaWJ1dGUiCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byBjcmVhdGUgc29tZSBvZiB0aGUgYXR0cmlidXRlIgogCQkJImZpbGVzIGZvciBDUFUgJWRcbiIsIGluZGV4KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fd2luZHR1bm5lbC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fd2luZHR1bm5lbC5jCmluZGV4IGQzNzgxOWYuLjQ2YzRlOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3dpbmR0dW5uZWwuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV93aW5kdHVubmVsLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vbWFjaW8uaD4KIAotI2RlZmluZSBMT0dfVEVNUAkJMAkJCS8qIGNvbnRpbm91c2x5IGxvZyB0ZW1wZXJhdHVyZSAqLworI2RlZmluZSBMT0dfVEVNUAkJMAkJCS8qIGNvbnRpbnVvdXNseSBsb2cgdGVtcGVyYXR1cmUgKi8KIAogc3RhdGljIHN0cnVjdCB7CiAJdm9sYXRpbGUgaW50CQlydW5uaW5nOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9iaXRtYXAuaCBiL2RyaXZlcnMvbWQvYml0bWFwLmgKaW5kZXggOTMxYTdhNy4uZDBhZWFmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9iaXRtYXAuaAorKysgYi9kcml2ZXJzL21kL2JpdG1hcC5oCkBAIC00NSw3ICs0NSw3IEBACiAgKgogICogVGhlIGNvdW50ZXIgY291bnRzIHBlbmRpbmcgd3JpdGUgcmVxdWVzdHMsIHBsdXMgdGhlIG9uLWRpc2sgYml0LgogICogV2hlbiB0aGUgY291bnRlciBpcyAnMScgYW5kIHRoZSByZXN5bmMgYml0cyBhcmUgY2xlYXIsIHRoZSBvbi1kaXNrCi0gKiBiaXQgY2FuIGJlIGNsZWFyZWQgYXN3ZWxsLCB0aHVzIHNldHRpbmcgdGhlIGNvdW50ZXIgdG8gMC4KKyAqIGJpdCBjYW4gYmUgY2xlYXJlZCBhcyB3ZWxsLCB0aHVzIHNldHRpbmcgdGhlIGNvdW50ZXIgdG8gMC4KICAqIFdoZW4gd2Ugc2V0IGEgYml0LCBvciBpbiB0aGUgY291bnRlciAodG8gc3RhcnQgYSB3cml0ZSksIGlmIHRoZSBmaWVsZHMgaXMKICAqIDAsIHdlIGZpcnN0IHNldCB0aGUgZGlzayBiaXQgYW5kIHNldCB0aGUgY291bnRlciB0byAxLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tcmFpZC5jIGIvZHJpdmVycy9tZC9kbS1yYWlkLmMKaW5kZXggNWVmMTM2Yy4uZTVkODkwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1yYWlkLmMKKysrIGIvZHJpdmVycy9tZC9kbS1yYWlkLmMKQEAgLTM5MCwxMyArMzkwLDYgQEAKIAlyZXR1cm4gbWRfcmFpZDVfY29uZ2VzdGVkKCZycy0+bWQsIGJpdHMpOwogfQogCi1zdGF0aWMgdm9pZCByYWlkX3VucGx1ZyhzdHJ1Y3QgZG1fdGFyZ2V0X2NhbGxiYWNrcyAqY2IpCi17Ci0Jc3RydWN0IHJhaWRfc2V0ICpycyA9IGNvbnRhaW5lcl9vZihjYiwgc3RydWN0IHJhaWRfc2V0LCBjYWxsYmFja3MpOwotCi0JbWRfcmFpZDVfa2lja19kZXZpY2UocnMtPm1kLnByaXZhdGUpOwotfQotCiAvKgogICogQ29uc3RydWN0IGEgUkFJRDQvNS82IG1hcHBpbmc6CiAgKiBBcmdzOgpAQCAtNDg3LDcgKzQ4MCw2IEBACiAJfQogCiAJcnMtPmNhbGxiYWNrcy5jb25nZXN0ZWRfZm4gPSByYWlkX2lzX2Nvbmdlc3RlZDsKLQlycy0+Y2FsbGJhY2tzLnVucGx1Z19mbiA9IHJhaWRfdW5wbHVnOwogCWRtX3RhYmxlX2FkZF90YXJnZXRfY2FsbGJhY2tzKHRpLT50YWJsZSwgJnJzLT5jYWxsYmFja3MpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXJlZ2lvbi1oYXNoLmMgYi9kcml2ZXJzL21kL2RtLXJlZ2lvbi1oYXNoLmMKaW5kZXggZGFkMDExYS4uNzc3MWVkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1yZWdpb24taGFzaC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tcmVnaW9uLWhhc2guYwpAQCAtNDE5LDcgKzQxOSw3IEBACiAJLyoKIAkgKiBQb3NzaWJsZSBjYXNlczoKIAkgKiAgIDEpIERNX1JIX0RJUlRZCi0JICogICAyKSBETV9SSF9OT1NZTkM6IHdhcyBkaXJ0eSwgb3RoZXIgcHJlY2VlZGluZyB3cml0ZXMgZmFpbGVkCisJICogICAyKSBETV9SSF9OT1NZTkM6IHdhcyBkaXJ0eSwgb3RoZXIgcHJlY2VkaW5nIHdyaXRlcyBmYWlsZWQKIAkgKiAgIDMpIERNX1JIX1JFQ09WRVJJTkc6IGZsdXNoaW5nIHBlbmRpbmcgd3JpdGVzCiAJICogRWl0aGVyIGNhc2UsIHRoZSByZWdpb24gc2hvdWxkIGhhdmUgbm90IGJlZW4gY29ubmVjdGVkIHRvIGxpc3QuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2ZhdWx0eS5jIGIvZHJpdmVycy9tZC9mYXVsdHkuYwppbmRleCAzMzlmZGM2Li4yMzA3OGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2ZhdWx0eS5jCisrKyBiL2RyaXZlcnMvbWQvZmF1bHR5LmMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBEaWZmZXJlbnQgbW9kZXMgY2FuIGJlIGFjdGl2ZSBhdCBhIHRpbWUsIGJ1dCBvbmx5CiAgKiBvbmUgY2FuIGJlIHNldCBhdCBhcnJheSBjcmVhdGlvbi4gIE90aGVycyBjYW4gYmUgYWRkZWQgbGF0ZXIuCi0gKiBBIG1vZGUgY2FuIGJlIG9uZS1zaG90IG9yIHJlY3VycmVudCB3aXRoIHRoZSByZWN1cnJhbmNlIGJlaW5nCisgKiBBIG1vZGUgY2FuIGJlIG9uZS1zaG90IG9yIHJlY3VycmVudCB3aXRoIHRoZSByZWN1cnJlbmNlIGJlaW5nCiAgKiBvbmNlIGluIGV2ZXJ5IE4gcmVxdWVzdHMuCiAgKiBUaGUgYm90dG9tIDUgYml0cyBvZiB0aGUgImxheW91dCIgaW5kaWNhdGUgdGhlIG1vZGUuICBUaGUKICAqIHJlbWFpbmRlciBpbmRpY2F0ZSBhIHBlcmlvZCwgb3IgMCBmb3Igb25lLXNob3QuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmMKaW5kZXggOGI2NmUwNC4uN2Q2ZjdmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tZC5jCisrKyBiL2RyaXZlcnMvbWQvbWQuYwpAQCAtNDQ3LDQ4ICs0NDcsNTkgQEAKIAogLyogU3VwcG9ydCBmb3IgcGx1Z2dpbmcuCiAgKiBUaGlzIG1pcnJvcnMgdGhlIHBsdWdnaW5nIHN1cHBvcnQgaW4gcmVxdWVzdF9xdWV1ZSwgYnV0IGRvZXMgbm90Ci0gKiByZXF1aXJlIGhhdmluZyBhIHdob2xlIHF1ZXVlCisgKiByZXF1aXJlIGhhdmluZyBhIHdob2xlIHF1ZXVlIG9yIHJlcXVlc3Qgc3RydWN0dXJlcy4KKyAqIFdlIGFsbG9jYXRlIGFuIG1kX3BsdWdfY2IgZm9yIGVhY2ggbWQgZGV2aWNlIGFuZCBlYWNoIHRocmVhZCBpdCBnZXRzCisgKiBwbHVnZ2VkIG9uLiAgVGhpcyBsaW5rcyB0b3QgdGhlIHByaXZhdGUgcGx1Z19oYW5kbGUgc3RydWN0dXJlIGluIHRoZQorICogcGVyc29uYWxpdHkgZGF0YSB3aGVyZSB3ZSBrZWVwIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBvdXRzdGFuZGluZworICogcGx1Z3Mgc28gb3RoZXIgY29kZSBjYW4gc2VlIGlmIGEgcGx1ZyBpcyBhY3RpdmUuCiAgKi8KLXN0YXRpYyB2b2lkIHBsdWdnZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHBsdWdfaGFuZGxlICpwbHVnID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwbHVnX2hhbmRsZSwgdW5wbHVnX3dvcmspOwotCXBsdWctPnVucGx1Z19mbihwbHVnKTsKLX0KLXN0YXRpYyB2b2lkIHBsdWdnZXJfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IHBsdWdfaGFuZGxlICpwbHVnID0gKHZvaWQgKilkYXRhOwotCWtibG9ja2Rfc2NoZWR1bGVfd29yayhOVUxMLCAmcGx1Zy0+dW5wbHVnX3dvcmspOwotfQotdm9pZCBwbHVnZ2VyX2luaXQoc3RydWN0IHBsdWdfaGFuZGxlICpwbHVnLAotCQkgIHZvaWQgKCp1bnBsdWdfZm4pKHN0cnVjdCBwbHVnX2hhbmRsZSAqKSkKLXsKLQlwbHVnLT51bnBsdWdfZmxhZyA9IDA7Ci0JcGx1Zy0+dW5wbHVnX2ZuID0gdW5wbHVnX2ZuOwotCWluaXRfdGltZXIoJnBsdWctPnVucGx1Z190aW1lcik7Ci0JcGx1Zy0+dW5wbHVnX3RpbWVyLmZ1bmN0aW9uID0gcGx1Z2dlcl90aW1lb3V0OwotCXBsdWctPnVucGx1Z190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcGx1ZzsKLQlJTklUX1dPUksoJnBsdWctPnVucGx1Z193b3JrLCBwbHVnZ2VyX3dvcmspOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocGx1Z2dlcl9pbml0KTsKK3N0cnVjdCBtZF9wbHVnX2NiIHsKKwlzdHJ1Y3QgYmxrX3BsdWdfY2IgY2I7CisJbWRkZXZfdCAqbWRkZXY7Cit9OwogCi12b2lkIHBsdWdnZXJfc2V0X3BsdWcoc3RydWN0IHBsdWdfaGFuZGxlICpwbHVnKQorc3RhdGljIHZvaWQgcGx1Z2dlcl91bnBsdWcoc3RydWN0IGJsa19wbHVnX2NiICpjYikKIHsKLQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoUExVR0dFRF9GTEFHLCAmcGx1Zy0+dW5wbHVnX2ZsYWcpKQotCQltb2RfdGltZXIoJnBsdWctPnVucGx1Z190aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMykrMSk7CisJc3RydWN0IG1kX3BsdWdfY2IgKm1kY2IgPSBjb250YWluZXJfb2YoY2IsIHN0cnVjdCBtZF9wbHVnX2NiLCBjYik7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1kY2ItPm1kZGV2LT5wbHVnX2NudCkpCisJCW1kX3dha2V1cF90aHJlYWQobWRjYi0+bWRkZXYtPnRocmVhZCk7CisJa2ZyZWUobWRjYik7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChwbHVnZ2VyX3NldF9wbHVnKTsKIAotaW50IHBsdWdnZXJfcmVtb3ZlX3BsdWcoc3RydWN0IHBsdWdfaGFuZGxlICpwbHVnKQorLyogQ2hlY2sgdGhhdCBhbiB1bnBsdWcgd2FrZXVwIHdpbGwgY29tZSBzaG9ydGx5LgorICogSWYgbm90LCB3YWtldXAgdGhlIG1kIHRocmVhZCBpbW1lZGlhdGVseQorICovCitpbnQgbWRkZXZfY2hlY2tfcGx1Z2dlZChtZGRldl90ICptZGRldikKIHsKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBMVUdHRURfRkxBRywgJnBsdWctPnVucGx1Z19mbGFnKSkgewotCQlkZWxfdGltZXIoJnBsdWctPnVucGx1Z190aW1lcik7Ci0JCXJldHVybiAxOwotCX0gZWxzZQorCXN0cnVjdCBibGtfcGx1ZyAqcGx1ZyA9IGN1cnJlbnQtPnBsdWc7CisJc3RydWN0IG1kX3BsdWdfY2IgKm1kY2I7CisKKwlpZiAoIXBsdWcpCiAJCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocGx1Z2dlcl9yZW1vdmVfcGx1Zyk7CiAKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1kY2IsICZwbHVnLT5jYl9saXN0LCBjYi5saXN0KSB7CisJCWlmIChtZGNiLT5jYi5jYWxsYmFjayA9PSBwbHVnZ2VyX3VucGx1ZyAmJgorCQkgICAgbWRjYi0+bWRkZXYgPT0gbWRkZXYpIHsKKwkJCS8qIEFscmVhZHkgb24gdGhlIGxpc3QsIG1vdmUgdG8gdG9wICovCisJCQlpZiAobWRjYiAhPSBsaXN0X2ZpcnN0X2VudHJ5KCZwbHVnLT5jYl9saXN0LAorCQkJCQkJICAgIHN0cnVjdCBtZF9wbHVnX2NiLAorCQkJCQkJICAgIGNiLmxpc3QpKQorCQkJCWxpc3RfbW92ZSgmbWRjYi0+Y2IubGlzdCwgJnBsdWctPmNiX2xpc3QpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJLyogTm90IGN1cnJlbnRseSBvbiB0aGUgY2FsbGJhY2sgbGlzdCAqLworCW1kY2IgPSBrbWFsbG9jKHNpemVvZigqbWRjYiksIEdGUF9BVE9NSUMpOworCWlmICghbWRjYikKKwkJcmV0dXJuIDA7CisKKwltZGNiLT5tZGRldiA9IG1kZGV2OworCW1kY2ItPmNiLmNhbGxiYWNrID0gcGx1Z2dlcl91bnBsdWc7CisJYXRvbWljX2luYygmbWRkZXYtPnBsdWdfY250KTsKKwlsaXN0X2FkZCgmbWRjYi0+Y2IubGlzdCwgJnBsdWctPmNiX2xpc3QpOworCXJldHVybiAxOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWRkZXZfY2hlY2tfcGx1Z2dlZCk7CiAKIHN0YXRpYyBpbmxpbmUgbWRkZXZfdCAqbWRkZXZfZ2V0KG1kZGV2X3QgKm1kZGV2KQogewpAQCAtNTM4LDYgKzU0OSw3IEBACiAJYXRvbWljX3NldCgmbWRkZXYtPmFjdGl2ZSwgMSk7CiAJYXRvbWljX3NldCgmbWRkZXYtPm9wZW5lcnMsIDApOwogCWF0b21pY19zZXQoJm1kZGV2LT5hY3RpdmVfaW8sIDApOworCWF0b21pY19zZXQoJm1kZGV2LT5wbHVnX2NudCwgMCk7CiAJc3Bpbl9sb2NrX2luaXQoJm1kZGV2LT53cml0ZV9sb2NrKTsKIAlhdG9taWNfc2V0KCZtZGRldi0+Zmx1c2hfcGVuZGluZywgMCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmbWRkZXYtPnNiX3dhaXQpOwpAQCAtMzE1OCw2ICszMTcwLDcgQEAKIAltZGRldi0+bGF5b3V0ID0gbWRkZXYtPm5ld19sYXlvdXQ7CiAJbWRkZXYtPmNodW5rX3NlY3RvcnMgPSBtZGRldi0+bmV3X2NodW5rX3NlY3RvcnM7CiAJbWRkZXYtPmRlbHRhX2Rpc2tzID0gMDsKKwltZGRldi0+ZGVncmFkZWQgPSAwOwogCWlmIChtZGRldi0+cGVycy0+c3luY19yZXF1ZXN0ID09IE5VTEwpIHsKIAkJLyogdGhpcyBpcyBub3cgYW4gYXJyYXkgd2l0aG91dCByZWR1bmRhbmN5LCBzbwogCQkgKiBpdCBtdXN0IGFsd2F5cyBiZSBpbl9zeW5jCkBAIC00NzIzLDcgKzQ3MzYsNiBAQAogCW1kZGV2LT5iaXRtYXBfaW5mby5jaHVua3NpemUgPSAwOwogCW1kZGV2LT5iaXRtYXBfaW5mby5kYWVtb25fc2xlZXAgPSAwOwogCW1kZGV2LT5iaXRtYXBfaW5mby5tYXhfd3JpdGVfYmVoaW5kID0gMDsKLQltZGRldi0+cGx1ZyA9IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIF9fbWRfc3RvcF93cml0ZXMobWRkZXZfdCAqbWRkZXYpCkBAIC02MjY2LDcgKzYyNzgsNyBAQAogCSAqIHJ0IGlzIGEgc2VjdG9yX3QsIHNvIGNvdWxkIGJlIDMyYml0IG9yIDY0Yml0LgogCSAqIFNvIHdlIGRpdmlkZSBiZWZvcmUgbXVsdGlwbHkgaW4gY2FzZSBpdCBpcyAzMmJpdCBhbmQgY2xvc2UKIAkgKiB0byB0aGUgbGltaXQuCi0JICogV2Ugc2NhbGUgdGhlIGRpdmlzb3IgKGRiKSBieSAzMiB0byBhdm9pZCBsb29zaW5nIHByZWNpc2lvbgorCSAqIFdlIHNjYWxlIHRoZSBkaXZpc29yIChkYikgYnkgMzIgdG8gYXZvaWQgbG9zaW5nIHByZWNpc2lvbgogCSAqIG5lYXIgdGhlIGVuZCBvZiByZXN5bmMgd2hlbiB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyBzZWN0b3JzCiAJICogaXMgY2xvc2UgdG8gJ2RiJy4KIAkgKiBXZSB0aGVuIGRpdmlkZSBydCBieSAzMiBhZnRlciBtdWx0aXBseWluZyBieSBkYiB0byBjb21wZW5zYXRlLgpAQCAtNjY4OCwxMiArNjcwMCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtZF9hbGxvd193cml0ZSk7CiAKLXZvaWQgbWRfdW5wbHVnKG1kZGV2X3QgKm1kZGV2KQotewotCWlmIChtZGRldi0+cGx1ZykKLQkJbWRkZXYtPnBsdWctPnVucGx1Z19mbihtZGRldi0+cGx1Zyk7Ci19Ci0KICNkZWZpbmUgU1lOQ19NQVJLUwkxMAogI2RlZmluZQlTWU5DX01BUktfU1RFUAkoMypIWikKIHZvaWQgbWRfZG9fc3luYyhtZGRldl90ICptZGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaAppbmRleCAxMjIxNWQ0Li4wYjFmZDNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmgKKysrIGIvZHJpdmVycy9tZC9tZC5oCkBAIC0yOSwyNiArMjksNiBAQAogdHlwZWRlZiBzdHJ1Y3QgbWRkZXZfcyBtZGRldl90OwogdHlwZWRlZiBzdHJ1Y3QgbWRrX3JkZXZfcyBtZGtfcmRldl90OwogCi0vKiBnZW5lcmljIHBsdWdnaW5nIHN1cHBvcnQgLSBsaWtlIHRoYXQgcHJvdmlkZWQgd2l0aCByZXF1ZXN0X3F1ZXVlLAotICogYnV0IGRvZXMgbm90IHJlcXVpcmUgYSByZXF1ZXN0X3F1ZXVlCi0gKi8KLXN0cnVjdCBwbHVnX2hhbmRsZSB7Ci0Jdm9pZAkJCSgqdW5wbHVnX2ZuKShzdHJ1Y3QgcGx1Z19oYW5kbGUgKik7Ci0Jc3RydWN0IHRpbWVyX2xpc3QJdW5wbHVnX3RpbWVyOwotCXN0cnVjdCB3b3JrX3N0cnVjdAl1bnBsdWdfd29yazsKLQl1bnNpZ25lZCBsb25nCQl1bnBsdWdfZmxhZzsKLX07Ci0jZGVmaW5lCVBMVUdHRURfRkxBRyAxCi12b2lkIHBsdWdnZXJfaW5pdChzdHJ1Y3QgcGx1Z19oYW5kbGUgKnBsdWcsCi0JCSAgdm9pZCAoKnVucGx1Z19mbikoc3RydWN0IHBsdWdfaGFuZGxlICopKTsKLXZvaWQgcGx1Z2dlcl9zZXRfcGx1ZyhzdHJ1Y3QgcGx1Z19oYW5kbGUgKnBsdWcpOwotaW50IHBsdWdnZXJfcmVtb3ZlX3BsdWcoc3RydWN0IHBsdWdfaGFuZGxlICpwbHVnKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBwbHVnZ2VyX2ZsdXNoKHN0cnVjdCBwbHVnX2hhbmRsZSAqcGx1ZykKLXsKLQlkZWxfdGltZXJfc3luYygmcGx1Zy0+dW5wbHVnX3RpbWVyKTsKLQljYW5jZWxfd29ya19zeW5jKCZwbHVnLT51bnBsdWdfd29yayk7Ci19Ci0KIC8qCiAgKiBNRCdzICdleHRlbmRlZCcgZGV2aWNlCiAgKi8KQEAgLTk0LDcgKzc0LDcgQEAKICNkZWZpbmUJSW5fc3luYwkJMgkJLyogZGV2aWNlIGlzIGluX3N5bmMgd2l0aCByZXN0IG9mIGFycmF5ICovCiAjZGVmaW5lCVdyaXRlTW9zdGx5CTQJCS8qIEF2b2lkIHJlYWRpbmcgaWYgYXQgYWxsIHBvc3NpYmxlICovCiAjZGVmaW5lCUF1dG9EZXRlY3RlZAk3CQkvKiBhZGRlZCBieSBhdXRvLWRldGVjdCAqLwotI2RlZmluZSBCbG9ja2VkCQk4CQkvKiBBbiBlcnJvciBvY2N1cmVkIG9uIGFuIGV4dGVybmFsbHkKKyNkZWZpbmUgQmxvY2tlZAkJOAkJLyogQW4gZXJyb3Igb2NjdXJyZWQgb24gYW4gZXh0ZXJuYWxseQogCQkJCQkgKiBtYW5hZ2VkIGFycmF5LCBkb24ndCBhbGxvdyB3cml0ZXMKIAkJCQkJICogdW50aWwgaXQgaXMgY2xlYXJlZCAqLwogCXdhaXRfcXVldWVfaGVhZF90IGJsb2NrZWRfd2FpdDsKQEAgLTE5OSw2ICsxNzksOSBAQAogCWludAkJCQlkZWx0YV9kaXNrcywgbmV3X2xldmVsLCBuZXdfbGF5b3V0OwogCWludAkJCQluZXdfY2h1bmtfc2VjdG9yczsKIAorCWF0b21pY190CQkJcGx1Z19jbnQ7CS8qIElmIGRldmljZSBpcyBleHBlY3RpbmcKKwkJCQkJCQkgKiBtb3JlIGJpb3Mgc29vbi4KKwkJCQkJCQkgKi8KIAlzdHJ1Y3QgbWRrX3RocmVhZF9zCQkqdGhyZWFkOwkvKiBtYW5hZ2VtZW50IHRocmVhZCAqLwogCXN0cnVjdCBtZGtfdGhyZWFkX3MJCSpzeW5jX3RocmVhZDsJLyogZG9pbmcgcmVzeW5jIG9yIHJlY29uc3RydWN0ICovCiAJc2VjdG9yX3QJCQljdXJyX3Jlc3luYzsJLyogbGFzdCBibG9jayBzY2hlZHVsZWQgKi8KQEAgLTMzNiw3ICszMTksNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQJCWFsbF9tZGRldnM7CiAKIAlzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwCQkqdG9fcmVtb3ZlOwotCXN0cnVjdCBwbHVnX2hhbmRsZQkJKnBsdWc7IC8qIGlmIHVzZWQgYnkgcGVyc29uYWxpdHkgKi8KIAogCXN0cnVjdCBiaW9fc2V0CQkJKmJpb19zZXQ7CiAKQEAgLTUxNiw3ICs0OTgsNiBAQAogZXh0ZXJuIHZvaWQgbWRfaW50ZWdyaXR5X2FkZF9yZGV2KG1ka19yZGV2X3QgKnJkZXYsIG1kZGV2X3QgKm1kZGV2KTsKIGV4dGVybiBpbnQgc3RyaWN0X3N0cnRvdWxfc2NhbGVkKGNvbnN0IGNoYXIgKmNwLCB1bnNpZ25lZCBsb25nICpyZXMsIGludCBzY2FsZSk7CiBleHRlcm4gdm9pZCByZXN0b3JlX2JpdG1hcF93cml0ZV9hY2Nlc3Moc3RydWN0IGZpbGUgKmZpbGUpOwotZXh0ZXJuIHZvaWQgbWRfdW5wbHVnKG1kZGV2X3QgKm1kZGV2KTsKIAogZXh0ZXJuIHZvaWQgbWRkZXZfaW5pdChtZGRldl90ICptZGRldik7CiBleHRlcm4gaW50IG1kX3J1bihtZGRldl90ICptZGRldik7CkBAIC01MzAsNCArNTExLDUgQEAKIAkJCQkgICBtZGRldl90ICptZGRldik7CiBleHRlcm4gc3RydWN0IGJpbyAqYmlvX2FsbG9jX21kZGV2KGdmcF90IGdmcF9tYXNrLCBpbnQgbnJfaW92ZWNzLAogCQkJCSAgIG1kZGV2X3QgKm1kZGV2KTsKK2V4dGVybiBpbnQgbWRkZXZfY2hlY2tfcGx1Z2dlZChtZGRldl90ICptZGRldik7CiAjZW5kaWYgLyogX01EX01EX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCBjMmEyMWFlLi4yYjdhN2ZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jCkBAIC01NjUsMTIgKzU2NSw2IEBACiAJCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCBtZF9raWNrX2RldmljZShtZGRldl90ICptZGRldikKLXsKLQlibGtfZmx1c2hfcGx1ZyhjdXJyZW50KTsKLQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwotfQotCiAvKiBCYXJyaWVycy4uLi4KICAqIFNvbWV0aW1lcyB3ZSBuZWVkIHRvIHN1c3BlbmQgSU8gd2hpbGUgd2UgZG8gc29tZXRoaW5nIGVsc2UsCiAgKiBlaXRoZXIgc29tZSByZXN5bmMvcmVjb3ZlcnksIG9yIHJlY29uZmlndXJlIHRoZSBhcnJheS4KQEAgLTYwMCw3ICs1OTQsNyBAQAogCiAJLyogV2FpdCB1bnRpbCBubyBibG9jayBJTyBpcyB3YWl0aW5nICovCiAJd2FpdF9ldmVudF9sb2NrX2lycShjb25mLT53YWl0X2JhcnJpZXIsICFjb25mLT5ucl93YWl0aW5nLAotCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLCBtZF9raWNrX2RldmljZShjb25mLT5tZGRldikpOworCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLCApOwogCiAJLyogYmxvY2sgYW55IG5ldyBJTyBmcm9tIHN0YXJ0aW5nICovCiAJY29uZi0+YmFycmllcisrOwpAQCAtNjA4LDcgKzYwMiw3IEBACiAJLyogTm93IHdhaXQgZm9yIGFsbCBwZW5kaW5nIElPIHRvIGNvbXBsZXRlICovCiAJd2FpdF9ldmVudF9sb2NrX2lycShjb25mLT53YWl0X2JhcnJpZXIsCiAJCQkgICAgIWNvbmYtPm5yX3BlbmRpbmcgJiYgY29uZi0+YmFycmllciA8IFJFU1lOQ19ERVBUSCwKLQkJCSAgICBjb25mLT5yZXN5bmNfbG9jaywgbWRfa2lja19kZXZpY2UoY29uZi0+bWRkZXYpKTsKKwkJCSAgICBjb25mLT5yZXN5bmNfbG9jaywgKTsKIAogCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+cmVzeW5jX2xvY2spOwogfQpAQCAtNjMwLDcgKzYyNCw3IEBACiAJCWNvbmYtPm5yX3dhaXRpbmcrKzsKIAkJd2FpdF9ldmVudF9sb2NrX2lycShjb25mLT53YWl0X2JhcnJpZXIsICFjb25mLT5iYXJyaWVyLAogCQkJCSAgICBjb25mLT5yZXN5bmNfbG9jaywKLQkJCQkgICAgbWRfa2lja19kZXZpY2UoY29uZi0+bWRkZXYpKTsKKwkJCQkgICAgKTsKIAkJY29uZi0+bnJfd2FpdGluZy0tOwogCX0KIAljb25mLT5ucl9wZW5kaW5nKys7CkBAIC02NjYsOCArNjYwLDcgQEAKIAl3YWl0X2V2ZW50X2xvY2tfaXJxKGNvbmYtPndhaXRfYmFycmllciwKIAkJCSAgICBjb25mLT5ucl9wZW5kaW5nID09IGNvbmYtPm5yX3F1ZXVlZCsxLAogCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLAotCQkJICAgICh7IGZsdXNoX3BlbmRpbmdfd3JpdGVzKGNvbmYpOwotCQkJICAgICAgIG1kX2tpY2tfZGV2aWNlKGNvbmYtPm1kZGV2KTsgfSkpOworCQkJICAgIGZsdXNoX3BlbmRpbmdfd3JpdGVzKGNvbmYpKTsKIAlzcGluX3VubG9ja19pcnEoJmNvbmYtPnJlc3luY19sb2NrKTsKIH0KIHN0YXRpYyB2b2lkIHVuZnJlZXplX2FycmF5KGNvbmZfdCAqY29uZikKQEAgLTcyOSw2ICs3MjIsNyBAQAogCWNvbnN0IHVuc2lnbmVkIGxvbmcgZG9fc3luYyA9IChiaW8tPmJpX3J3ICYgUkVRX1NZTkMpOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgZG9fZmx1c2hfZnVhID0gKGJpby0+YmlfcncgJiAoUkVRX0ZMVVNIIHwgUkVRX0ZVQSkpOwogCW1ka19yZGV2X3QgKmJsb2NrZWRfcmRldjsKKwlpbnQgcGx1Z2dlZDsKIAogCS8qCiAJICogUmVnaXN0ZXIgdGhlIG5ldyByZXF1ZXN0IGFuZCB3YWl0IGlmIHRoZSByZWNvbnN0cnVjdGlvbgpAQCAtODIwLDYgKzgxNCw4IEBACiAJICogaW5jIHJlZmNvdW50IG9uIHRoZWlyIHJkZXYuICBSZWNvcmQgdGhlbSBieSBzZXR0aW5nCiAJICogYmlvc1t4XSB0byBiaW8KIAkgKi8KKwlwbHVnZ2VkID0gbWRkZXZfY2hlY2tfcGx1Z2dlZChtZGRldik7CisKIAlkaXNrcyA9IGNvbmYtPnJhaWRfZGlza3M7CiAgcmV0cnlfd3JpdGU6CiAJYmxvY2tlZF9yZGV2ID0gTlVMTDsKQEAgLTkyNSw3ICs5MjEsNyBAQAogCS8qIEluIGNhc2UgcmFpZDFkIHNudWNrIGluIHRvIGZyZWV6ZV9hcnJheSAqLwogCXdha2VfdXAoJmNvbmYtPndhaXRfYmFycmllcik7CiAKLQlpZiAoZG9fc3luYyB8fCAhYml0bWFwKQorCWlmIChkb19zeW5jIHx8ICFiaXRtYXAgfHwgIXBsdWdnZWQpCiAJCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7CiAKIAlyZXR1cm4gMDsKQEAgLTE1MTYsMTMgKzE1MTIsMTYgQEAKIAljb25mX3QgKmNvbmYgPSBtZGRldi0+cHJpdmF0ZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmNvbmYtPnJldHJ5X2xpc3Q7CiAJbWRrX3JkZXZfdCAqcmRldjsKKwlzdHJ1Y3QgYmxrX3BsdWcgcGx1ZzsKIAogCW1kX2NoZWNrX3JlY292ZXJ5KG1kZGV2KTsKLQkKKworCWJsa19zdGFydF9wbHVnKCZwbHVnKTsKIAlmb3IgKDs7KSB7CiAJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKIAotCQlmbHVzaF9wZW5kaW5nX3dyaXRlcyhjb25mKTsKKwkJaWYgKGF0b21pY19yZWFkKCZtZGRldi0+cGx1Z19jbnQpID09IDApCisJCQlmbHVzaF9wZW5kaW5nX3dyaXRlcyhjb25mKTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAkJaWYgKGxpc3RfZW1wdHkoaGVhZCkpIHsKQEAgLTE1OTMsNiArMTU5Miw3IEBACiAJCX0KIAkJY29uZF9yZXNjaGVkKCk7CiAJfQorCWJsa19maW5pc2hfcGx1ZygmcGx1Zyk7CiB9CiAKIApAQCAtMjAzOSw3ICsyMDM5LDYgQEAKIAogCW1kX3VucmVnaXN0ZXJfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwogCW1kZGV2LT50aHJlYWQgPSBOVUxMOwotCWJsa19zeW5jX3F1ZXVlKG1kZGV2LT5xdWV1ZSk7IC8qIHRoZSB1bnBsdWcgZm4gcmVmZXJlbmNlcyAnY29uZicqLwogCWlmIChjb25mLT5yMWJpb19wb29sKQogCQltZW1wb29sX2Rlc3Ryb3koY29uZi0+cjFiaW9fcG9vbCk7CiAJa2ZyZWUoY29uZi0+bWlycm9ycyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuYwppbmRleCBmN2I2MjM3Li44ZTk0NjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogUkFJRC0xMCBzdXBwb3J0IGZvciBtZC4KICAqCi0gKiBCYXNlIG9uIGNvZGUgaW4gcmFpZDEuYy4gIFNlZSByYWlkMS5jIGZvciBmdXRoZXIgY29weXJpZ2h0IGluZm9ybWF0aW9uLgorICogQmFzZSBvbiBjb2RlIGluIHJhaWQxLmMuICBTZWUgcmFpZDEuYyBmb3IgZnVydGhlciBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCiAgKgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0zNDAsMTQgKzM0MCwxNCBAQAogCiAvKgogICogUkFJRDEwIGxheW91dCBtYW5hZ2VyCi0gKiBBc3dlbGwgYXMgdGhlIGNodW5rc2l6ZSBhbmQgcmFpZF9kaXNrcyBjb3VudCwgdGhlcmUgYXJlIHR3bworICogQXMgd2VsbCBhcyB0aGUgY2h1bmtzaXplIGFuZCByYWlkX2Rpc2tzIGNvdW50LCB0aGVyZSBhcmUgdHdvCiAgKiBwYXJhbWV0ZXJzOiBuZWFyX2NvcGllcyBhbmQgZmFyX2NvcGllcy4KICAqIG5lYXJfY29waWVzICogZmFyX2NvcGllcyBtdXN0IGJlIDw9IHJhaWRfZGlza3MuCiAgKiBOb3JtYWxseSBvbmUgb2YgdGhlc2Ugd2lsbCBiZSAxLgogICogSWYgYm90aCBhcmUgMSwgd2UgZ2V0IHJhaWQwLgogICogSWYgbmVhcl9jb3BpZXMgPT0gcmFpZF9kaXNrcywgd2UgZ2V0IHJhaWQxLgogICoKLSAqIENodW5rcyBhcmUgbGF5ZWQgb3V0IGluIHJhaWQwIHN0eWxlIHdpdGggbmVhcl9jb3BpZXMgY29waWVzIG9mIHRoZQorICogQ2h1bmtzIGFyZSBsYWlkIG91dCBpbiByYWlkMCBzdHlsZSB3aXRoIG5lYXJfY29waWVzIGNvcGllcyBvZiB0aGUKICAqIGZpcnN0IGNodW5rLCBmb2xsb3dlZCBieSBuZWFyX2NvcGllcyBjb3BpZXMgb2YgdGhlIG5leHQgY2h1bmsgYW5kCiAgKiBzbyBvbi4KICAqIElmIGZhcl9jb3BpZXMgPiAxLCB0aGVuIGFmdGVyIDEvZmFyX2NvcGllcyBvZiB0aGUgYXJyYXkgaGFzIGJlZW4gYXNzaWduZWQKQEAgLTYzNCwxMiArNjM0LDYgQEAKIAkJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIG1kX2tpY2tfZGV2aWNlKG1kZGV2X3QgKm1kZGV2KQotewotCWJsa19mbHVzaF9wbHVnKGN1cnJlbnQpOwotCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7Ci19Ci0KIC8qIEJhcnJpZXJzLi4uLgogICogU29tZXRpbWVzIHdlIG5lZWQgdG8gc3VzcGVuZCBJTyB3aGlsZSB3ZSBkbyBzb21ldGhpbmcgZWxzZSwKICAqIGVpdGhlciBzb21lIHJlc3luYy9yZWNvdmVyeSwgb3IgcmVjb25maWd1cmUgdGhlIGFycmF5LgpAQCAtNjY5LDE1ICs2NjMsMTUgQEAKIAogCS8qIFdhaXQgdW50aWwgbm8gYmxvY2sgSU8gaXMgd2FpdGluZyAodW5sZXNzICdmb3JjZScpICovCiAJd2FpdF9ldmVudF9sb2NrX2lycShjb25mLT53YWl0X2JhcnJpZXIsIGZvcmNlIHx8ICFjb25mLT5ucl93YWl0aW5nLAotCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLCBtZF9raWNrX2RldmljZShjb25mLT5tZGRldikpOworCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLCApOwogCiAJLyogYmxvY2sgYW55IG5ldyBJTyBmcm9tIHN0YXJ0aW5nICovCiAJY29uZi0+YmFycmllcisrOwogCi0JLyogTm8gd2FpdCBmb3IgYWxsIHBlbmRpbmcgSU8gdG8gY29tcGxldGUgKi8KKwkvKiBOb3cgd2FpdCBmb3IgYWxsIHBlbmRpbmcgSU8gdG8gY29tcGxldGUgKi8KIAl3YWl0X2V2ZW50X2xvY2tfaXJxKGNvbmYtPndhaXRfYmFycmllciwKIAkJCSAgICAhY29uZi0+bnJfcGVuZGluZyAmJiBjb25mLT5iYXJyaWVyIDwgUkVTWU5DX0RFUFRILAotCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLCBtZF9raWNrX2RldmljZShjb25mLT5tZGRldikpOworCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLCApOwogCiAJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5yZXN5bmNfbG9jayk7CiB9CkBAIC02OTgsNyArNjkyLDcgQEAKIAkJY29uZi0+bnJfd2FpdGluZysrOwogCQl3YWl0X2V2ZW50X2xvY2tfaXJxKGNvbmYtPndhaXRfYmFycmllciwgIWNvbmYtPmJhcnJpZXIsCiAJCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLAotCQkJCSAgICBtZF9raWNrX2RldmljZShjb25mLT5tZGRldikpOworCQkJCSAgICApOwogCQljb25mLT5ucl93YWl0aW5nLS07CiAJfQogCWNvbmYtPm5yX3BlbmRpbmcrKzsKQEAgLTczNCw4ICs3MjgsOCBAQAogCXdhaXRfZXZlbnRfbG9ja19pcnEoY29uZi0+d2FpdF9iYXJyaWVyLAogCQkJICAgIGNvbmYtPm5yX3BlbmRpbmcgPT0gY29uZi0+bnJfcXVldWVkKzEsCiAJCQkgICAgY29uZi0+cmVzeW5jX2xvY2ssCi0JCQkgICAgKHsgZmx1c2hfcGVuZGluZ193cml0ZXMoY29uZik7Ci0JCQkgICAgICAgbWRfa2lja19kZXZpY2UoY29uZi0+bWRkZXYpOyB9KSk7CisJCQkgICAgZmx1c2hfcGVuZGluZ193cml0ZXMoY29uZikpOworCiAJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5yZXN5bmNfbG9jayk7CiB9CiAKQEAgLTc2Miw2ICs3NTYsNyBAQAogCWNvbnN0IHVuc2lnbmVkIGxvbmcgZG9fZnVhID0gKGJpby0+YmlfcncgJiBSRVFfRlVBKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCW1ka19yZGV2X3QgKmJsb2NrZWRfcmRldjsKKwlpbnQgcGx1Z2dlZDsKIAogCWlmICh1bmxpa2VseShiaW8tPmJpX3J3ICYgUkVRX0ZMVVNIKSkgewogCQltZF9mbHVzaF9yZXF1ZXN0KG1kZGV2LCBiaW8pOwpAQCAtODcwLDYgKzg2NSw4IEBACiAJICogaW5jIHJlZmNvdW50IG9uIHRoZWlyIHJkZXYuICBSZWNvcmQgdGhlbSBieSBzZXR0aW5nCiAJICogYmlvc1t4XSB0byBiaW8KIAkgKi8KKwlwbHVnZ2VkID0gbWRkZXZfY2hlY2tfcGx1Z2dlZChtZGRldik7CisKIAlyYWlkMTBfZmluZF9waHlzKGNvbmYsIHIxMF9iaW8pOwogIHJldHJ5X3dyaXRlOgogCWJsb2NrZWRfcmRldiA9IE5VTEw7CkBAIC05NDYsOSArOTQzLDggQEAKIAkvKiBJbiBjYXNlIHJhaWQxMGQgc251Y2sgaW4gdG8gZnJlZXplX2FycmF5ICovCiAJd2FrZV91cCgmY29uZi0+d2FpdF9iYXJyaWVyKTsKIAotCWlmIChkb19zeW5jIHx8ICFtZGRldi0+Yml0bWFwKQorCWlmIChkb19zeW5jIHx8ICFtZGRldi0+Yml0bWFwIHx8ICFwbHVnZ2VkKQogCQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2NDAsOSArMTYzNiwxMSBAQAogCWNvbmZfdCAqY29uZiA9IG1kZGV2LT5wcml2YXRlOwogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAmY29uZi0+cmV0cnlfbGlzdDsKIAltZGtfcmRldl90ICpyZGV2OworCXN0cnVjdCBibGtfcGx1ZyBwbHVnOwogCiAJbWRfY2hlY2tfcmVjb3ZlcnkobWRkZXYpOwogCisJYmxrX3N0YXJ0X3BsdWcoJnBsdWcpOwogCWZvciAoOzspIHsKIAkJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCkBAIC0xNzE2LDYgKzE3MTQsNyBAQAogCQl9CiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KKwlibGtfZmluaXNoX3BsdWcoJnBsdWcpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmggYi9kcml2ZXJzL21kL3JhaWQxMC5oCmluZGV4IDIzMTZhYzIuLjk0NGIxMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmgKKysrIGIvZHJpdmVycy9tZC9yYWlkMTAuaApAQCAtMTcsOCArMTcsOCBAQAogCXNwaW5sb2NrX3QJCWRldmljZV9sb2NrOwogCiAJLyogZ2VvbWV0cnkgKi8KLQlpbnQJCQluZWFyX2NvcGllczsgIC8qIG51bWJlciBvZiBjb3BpZXMgbGF5ZWQgb3V0IHJhaWQwIHN0eWxlICovCi0JaW50IAkJCWZhcl9jb3BpZXM7ICAgLyogbnVtYmVyIG9mIGNvcGllcyBsYXllZCBvdXQKKwlpbnQJCQluZWFyX2NvcGllczsgIC8qIG51bWJlciBvZiBjb3BpZXMgbGFpZCBvdXQgcmFpZDAgc3R5bGUgKi8KKwlpbnQgCQkJZmFyX2NvcGllczsgICAvKiBudW1iZXIgb2YgY29waWVzIGxhaWQgb3V0CiAJCQkJCSAgICAgICAqIGF0IGxhcmdlIHN0cmlkZXMgYWNyb3NzIGRyaXZlcwogCQkJCQkgICAgICAgKi8KIAlpbnQJCQlmYXJfb2Zmc2V0OyAgIC8qIGZhcl9jb3BpZXMgYXJlIG9mZnNldCBieSAxIHN0cmlwZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5jIGIvZHJpdmVycy9tZC9yYWlkNS5jCmluZGV4IGU4NjdlZTQuLjQ5YmY1ZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuYworKysgYi9kcml2ZXJzL21kL3JhaWQ1LmMKQEAgLTI3LDEyICsyNywxMiBAQAogICoKICAqIFdlIGdyb3VwIGJpdG1hcCB1cGRhdGVzIGludG8gYmF0Y2hlcy4gIEVhY2ggYmF0Y2ggaGFzIGEgbnVtYmVyLgogICogV2UgbWF5IHdyaXRlIG91dCBzZXZlcmFsIGJhdGNoZXMgYXQgb25jZSwgYnV0IHRoYXQgaXNuJ3QgdmVyeSBpbXBvcnRhbnQuCi0gKiBjb25mLT5ibV93cml0ZSBpcyB0aGUgbnVtYmVyIG9mIHRoZSBsYXN0IGJhdGNoIHN1Y2Nlc3NmdWxseSB3cml0dGVuLgotICogY29uZi0+Ym1fZmx1c2ggaXMgdGhlIG51bWJlciBvZiB0aGUgbGFzdCBiYXRjaCB0aGF0IHdhcyBjbG9zZWQgdG8KKyAqIGNvbmYtPnNlcV93cml0ZSBpcyB0aGUgbnVtYmVyIG9mIHRoZSBsYXN0IGJhdGNoIHN1Y2Nlc3NmdWxseSB3cml0dGVuLgorICogY29uZi0+c2VxX2ZsdXNoIGlzIHRoZSBudW1iZXIgb2YgdGhlIGxhc3QgYmF0Y2ggdGhhdCB3YXMgY2xvc2VkIHRvCiAgKiAgICBuZXcgYWRkaXRpb25zLgogICogV2hlbiB3ZSBkaXNjb3ZlciB0aGF0IHdlIHdpbGwgbmVlZCB0byB3cml0ZSB0byBhbnkgYmxvY2sgaW4gYSBzdHJpcGUKICAqIChpbiBhZGRfc3RyaXBlX2Jpbykgd2UgdXBkYXRlIHRoZSBpbi1tZW1vcnkgYml0bWFwIGFuZCByZWNvcmQgaW4gc2gtPmJtX3NlcQotICogdGhlIG51bWJlciBvZiB0aGUgYmF0Y2ggaXQgd2lsbCBiZSBpbi4gVGhpcyBpcyBibV9mbHVzaCsxLgorICogdGhlIG51bWJlciBvZiB0aGUgYmF0Y2ggaXQgd2lsbCBiZSBpbi4gVGhpcyBpcyBzZXFfZmx1c2grMS4KICAqIFdoZW4gd2UgYXJlIHJlYWR5IHRvIGRvIGEgd3JpdGUsIGlmIHRoYXQgYmF0Y2ggaGFzbid0IGJlZW4gd3JpdHRlbiB5ZXQsCiAgKiAgIHdlIHBsdWcgdGhlIGFycmF5IGFuZCBxdWV1ZSB0aGUgc3RyaXBlIGZvciBsYXRlci4KICAqIFdoZW4gYW4gdW5wbHVnIGhhcHBlbnMsIHdlIGluY3JlbWVudCBibV9mbHVzaCwgdGh1cyBjbG9zaW5nIHRoZSBjdXJyZW50CkBAIC0xOTksMTQgKzE5OSwxMiBAQAogCQlCVUdfT04oIWxpc3RfZW1wdHkoJnNoLT5scnUpKTsKIAkJQlVHX09OKGF0b21pY19yZWFkKCZjb25mLT5hY3RpdmVfc3RyaXBlcyk9PTApOwogCQlpZiAodGVzdF9iaXQoU1RSSVBFX0hBTkRMRSwgJnNoLT5zdGF0ZSkpIHsKLQkJCWlmICh0ZXN0X2JpdChTVFJJUEVfREVMQVlFRCwgJnNoLT5zdGF0ZSkpIHsKKwkJCWlmICh0ZXN0X2JpdChTVFJJUEVfREVMQVlFRCwgJnNoLT5zdGF0ZSkpCiAJCQkJbGlzdF9hZGRfdGFpbCgmc2gtPmxydSwgJmNvbmYtPmRlbGF5ZWRfbGlzdCk7Ci0JCQkJcGx1Z2dlcl9zZXRfcGx1ZygmY29uZi0+cGx1Zyk7Ci0JCQl9IGVsc2UgaWYgKHRlc3RfYml0KFNUUklQRV9CSVRfREVMQVksICZzaC0+c3RhdGUpICYmCi0JCQkJICAgc2gtPmJtX3NlcSAtIGNvbmYtPnNlcV93cml0ZSA+IDApIHsKKwkJCWVsc2UgaWYgKHRlc3RfYml0KFNUUklQRV9CSVRfREVMQVksICZzaC0+c3RhdGUpICYmCisJCQkJICAgc2gtPmJtX3NlcSAtIGNvbmYtPnNlcV93cml0ZSA+IDApCiAJCQkJbGlzdF9hZGRfdGFpbCgmc2gtPmxydSwgJmNvbmYtPmJpdG1hcF9saXN0KTsKLQkJCQlwbHVnZ2VyX3NldF9wbHVnKCZjb25mLT5wbHVnKTsKLQkJCX0gZWxzZSB7CisJCQllbHNlIHsKIAkJCQljbGVhcl9iaXQoU1RSSVBFX0JJVF9ERUxBWSwgJnNoLT5zdGF0ZSk7CiAJCQkJbGlzdF9hZGRfdGFpbCgmc2gtPmxydSwgJmNvbmYtPmhhbmRsZV9saXN0KTsKIAkJCX0KQEAgLTQ2MSw3ICs0NTksNyBAQAogCQkJCQkJICAgICA8IChjb25mLT5tYXhfbnJfc3RyaXBlcyAqMy80KQogCQkJCQkJICAgICB8fCAhY29uZi0+aW5hY3RpdmVfYmxvY2tlZCksCiAJCQkJCQkgICAgY29uZi0+ZGV2aWNlX2xvY2ssCi0JCQkJCQkgICAgbWRfcmFpZDVfa2lja19kZXZpY2UoY29uZikpOworCQkJCQkJICAgICk7CiAJCQkJY29uZi0+aW5hY3RpdmVfYmxvY2tlZCA9IDA7CiAJCQl9IGVsc2UKIAkJCQlpbml0X3N0cmlwZShzaCwgc2VjdG9yLCBwcmV2aW91cyk7CkBAIC0xNDcwLDcgKzE0NjgsNyBAQAogCQl3YWl0X2V2ZW50X2xvY2tfaXJxKGNvbmYtPndhaXRfZm9yX3N0cmlwZSwKIAkJCQkgICAgIWxpc3RfZW1wdHkoJmNvbmYtPmluYWN0aXZlX2xpc3QpLAogCQkJCSAgICBjb25mLT5kZXZpY2VfbG9jaywKLQkJCQkgICAgYmxrX2ZsdXNoX3BsdWcoY3VycmVudCkpOworCQkJCSAgICApOwogCQlvc2ggPSBnZXRfZnJlZV9zdHJpcGUoY29uZik7CiAJCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCQlhdG9taWNfc2V0KCZuc2gtPmNvdW50LCAxKTsKQEAgLTM2MjMsOCArMzYyMSw3IEBACiAJCQkJYXRvbWljX2luYygmY29uZi0+cHJlcmVhZF9hY3RpdmVfc3RyaXBlcyk7CiAJCQlsaXN0X2FkZF90YWlsKCZzaC0+bHJ1LCAmY29uZi0+aG9sZF9saXN0KTsKIAkJfQotCX0gZWxzZQotCQlwbHVnZ2VyX3NldF9wbHVnKCZjb25mLT5wbHVnKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGFjdGl2YXRlX2JpdF9kZWxheShyYWlkNV9jb25mX3QgKmNvbmYpCkBAIC0zNjQxLDIxICszNjM4LDYgQEAKIAl9CiB9CiAKLXZvaWQgbWRfcmFpZDVfa2lja19kZXZpY2UocmFpZDVfY29uZl90ICpjb25mKQotewotCWJsa19mbHVzaF9wbHVnKGN1cnJlbnQpOwotCXJhaWQ1X2FjdGl2YXRlX2RlbGF5ZWQoY29uZik7Ci0JbWRfd2FrZXVwX3RocmVhZChjb25mLT5tZGRldi0+dGhyZWFkKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKG1kX3JhaWQ1X2tpY2tfZGV2aWNlKTsKLQotc3RhdGljIHZvaWQgcmFpZDVfdW5wbHVnKHN0cnVjdCBwbHVnX2hhbmRsZSAqcGx1ZykKLXsKLQlyYWlkNV9jb25mX3QgKmNvbmYgPSBjb250YWluZXJfb2YocGx1ZywgcmFpZDVfY29uZl90LCBwbHVnKTsKLQotCW1kX3JhaWQ1X2tpY2tfZGV2aWNlKGNvbmYpOwotfQotCiBpbnQgbWRfcmFpZDVfY29uZ2VzdGVkKG1kZGV2X3QgKm1kZGV2LCBpbnQgYml0cykKIHsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldi0+cHJpdmF0ZTsKQEAgLTM5NDUsNiArMzkyNyw3IEBACiAJc3RydWN0IHN0cmlwZV9oZWFkICpzaDsKIAljb25zdCBpbnQgcncgPSBiaW9fZGF0YV9kaXIoYmkpOwogCWludCByZW1haW5pbmc7CisJaW50IHBsdWdnZWQ7CiAKIAlpZiAodW5saWtlbHkoYmktPmJpX3J3ICYgUkVRX0ZMVVNIKSkgewogCQltZF9mbHVzaF9yZXF1ZXN0KG1kZGV2LCBiaSk7CkBAIC0zOTYzLDYgKzM5NDYsNyBAQAogCWJpLT5iaV9uZXh0ID0gTlVMTDsKIAliaS0+YmlfcGh5c19zZWdtZW50cyA9IDE7CS8qIG92ZXItbG9hZGVkIHRvIGNvdW50IGFjdGl2ZSBzdHJpcGVzICovCiAKKwlwbHVnZ2VkID0gbWRkZXZfY2hlY2tfcGx1Z2dlZChtZGRldik7CiAJZm9yICg7bG9naWNhbF9zZWN0b3IgPCBsYXN0X3NlY3RvcjsgbG9naWNhbF9zZWN0b3IgKz0gU1RSSVBFX1NFQ1RPUlMpIHsKIAkJREVGSU5FX1dBSVQodyk7CiAJCWludCBkaXNrcywgZGF0YV9kaXNrczsKQEAgLTQwNTcsNyArNDA0MSw3IEBACiAJCQkJICogYWRkIGZhaWxlZCBkdWUgdG8gb3ZlcmxhcC4gIEZsdXNoIGV2ZXJ5dGhpbmcKIAkJCQkgKiBhbmQgd2FpdCBhIHdoaWxlCiAJCQkJICovCi0JCQkJbWRfcmFpZDVfa2lja19kZXZpY2UoY29uZik7CisJCQkJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKIAkJCQlyZWxlYXNlX3N0cmlwZShzaCk7CiAJCQkJc2NoZWR1bGUoKTsKIAkJCQlnb3RvIHJldHJ5OwpAQCAtNDA3Nyw2ICs0MDYxLDkgQEAKIAkJfQogCQkJCiAJfQorCWlmICghcGx1Z2dlZCkKKwkJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKKwogCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAlyZW1haW5pbmcgPSByYWlkNV9kZWNfYmlfcGh5c19zZWdtZW50cyhiaSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CkBAIC00NDc4LDI0ICs0NDY1LDMwIEBACiAJc3RydWN0IHN0cmlwZV9oZWFkICpzaDsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldi0+cHJpdmF0ZTsKIAlpbnQgaGFuZGxlZDsKKwlzdHJ1Y3QgYmxrX3BsdWcgcGx1ZzsKIAogCXByX2RlYnVnKCIrKysgcmFpZDVkIGFjdGl2ZVxuIik7CiAKIAltZF9jaGVja19yZWNvdmVyeShtZGRldik7CiAKKwlibGtfc3RhcnRfcGx1ZygmcGx1Zyk7CiAJaGFuZGxlZCA9IDA7CiAJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCXdoaWxlICgxKSB7CiAJCXN0cnVjdCBiaW8gKmJpbzsKIAotCQlpZiAoY29uZi0+c2VxX2ZsdXNoICE9IGNvbmYtPnNlcV93cml0ZSkgewotCQkJaW50IHNlcSA9IGNvbmYtPnNlcV9mbHVzaDsKKwkJaWYgKGF0b21pY19yZWFkKCZtZGRldi0+cGx1Z19jbnQpID09IDAgJiYKKwkJICAgICFsaXN0X2VtcHR5KCZjb25mLT5iaXRtYXBfbGlzdCkpIHsKKwkJCS8qIE5vdyBpcyBhIGdvb2QgdGltZSB0byBmbHVzaCBzb21lIGJpdG1hcCB1cGRhdGVzICovCisJCQljb25mLT5zZXFfZmx1c2grKzsKIAkJCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCQkJYml0bWFwX3VucGx1ZyhtZGRldi0+Yml0bWFwKTsKIAkJCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKLQkJCWNvbmYtPnNlcV93cml0ZSA9IHNlcTsKKwkJCWNvbmYtPnNlcV93cml0ZSA9IGNvbmYtPnNlcV9mbHVzaDsKIAkJCWFjdGl2YXRlX2JpdF9kZWxheShjb25mKTsKIAkJfQorCQlpZiAoYXRvbWljX3JlYWQoJm1kZGV2LT5wbHVnX2NudCkgPT0gMCkKKwkJCXJhaWQ1X2FjdGl2YXRlX2RlbGF5ZWQoY29uZik7CiAKIAkJd2hpbGUgKChiaW8gPSByZW1vdmVfYmlvX2Zyb21fcmV0cnkoY29uZikpKSB7CiAJCQlpbnQgb2s7CkBAIC00NTI1LDYgKzQ1MTgsNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCiAJYXN5bmNfdHhfaXNzdWVfcGVuZGluZ19hbGwoKTsKKwlibGtfZmluaXNoX3BsdWcoJnBsdWcpOwogCiAJcHJfZGVidWcoIi0tLSByYWlkNWQgaW5hY3RpdmVcbiIpOwogfQpAQCAtNTE0MSw4ICs1MTM1LDYgQEAKIAkJICAgICAgIG1kbmFtZShtZGRldikpOwogCW1kX3NldF9hcnJheV9zZWN0b3JzKG1kZGV2LCByYWlkNV9zaXplKG1kZGV2LCAwLCAwKSk7CiAKLQlwbHVnZ2VyX2luaXQoJmNvbmYtPnBsdWcsIHJhaWQ1X3VucGx1Zyk7Ci0JbWRkZXYtPnBsdWcgPSAmY29uZi0+cGx1ZzsKIAlpZiAobWRkZXYtPnF1ZXVlKSB7CiAJCWludCBjaHVua19zaXplOwogCQkvKiByZWFkLWFoZWFkIHNpemUgbXVzdCBjb3ZlciB0d28gd2hvbGUgc3RyaXBlcywgd2hpY2gKQEAgLTUxNTksNyArNTE1MSw2IEBACiAKIAkJbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLmNvbmdlc3RlZF9kYXRhID0gbWRkZXY7CiAJCW1kZGV2LT5xdWV1ZS0+YmFja2luZ19kZXZfaW5mby5jb25nZXN0ZWRfZm4gPSByYWlkNV9jb25nZXN0ZWQ7Ci0JCW1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayA9ICZjb25mLT5kZXZpY2VfbG9jazsKIAogCQljaHVua19zaXplID0gbWRkZXYtPmNodW5rX3NlY3RvcnMgPDwgOTsKIAkJYmxrX3F1ZXVlX2lvX21pbihtZGRldi0+cXVldWUsIGNodW5rX3NpemUpOwpAQCAtNTE5Miw3ICs1MTgzLDYgQEAKIAltZGRldi0+dGhyZWFkID0gTlVMTDsKIAlpZiAobWRkZXYtPnF1ZXVlKQogCQltZGRldi0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8uY29uZ2VzdGVkX2ZuID0gTlVMTDsKLQlwbHVnZ2VyX2ZsdXNoKCZjb25mLT5wbHVnKTsgLyogdGhlIHVucGx1ZyBmbiByZWZlcmVuY2VzICdjb25mJyovCiAJZnJlZV9jb25mKGNvbmYpOwogCW1kZGV2LT5wcml2YXRlID0gTlVMTDsKIAltZGRldi0+dG9fcmVtb3ZlID0gJnJhaWQ1X2F0dHJzX2dyb3VwOwpAQCAtNTY4OCw2ICs1Njc4LDcgQEAKIHN0YXRpYyB2b2lkICpyYWlkNDVfdGFrZW92ZXJfcmFpZDAobWRkZXZfdCAqbWRkZXYsIGludCBsZXZlbCkKIHsKIAlzdHJ1Y3QgcmFpZDBfcHJpdmF0ZV9kYXRhICpyYWlkMF9wcml2ID0gbWRkZXYtPnByaXZhdGU7CisJc2VjdG9yX3Qgc2VjdG9yczsKIAogCS8qIGZvciByYWlkMCB0YWtlb3ZlciBvbmx5IG9uZSB6b25lIGlzIHN1cHBvcnRlZCAqLwogCWlmIChyYWlkMF9wcml2LT5ucl9zdHJpcF96b25lcyA+IDEpIHsKQEAgLTU2OTYsNiArNTY4Nyw5IEBACiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KIAorCXNlY3RvcnMgPSByYWlkMF9wcml2LT5zdHJpcF96b25lWzBdLnpvbmVfZW5kOworCXNlY3Rvcl9kaXYoc2VjdG9ycywgcmFpZDBfcHJpdi0+c3RyaXBfem9uZVswXS5uYl9kZXYpOworCW1kZGV2LT5kZXZfc2VjdG9ycyA9IHNlY3RvcnM7CiAJbWRkZXYtPm5ld19sZXZlbCA9IGxldmVsOwogCW1kZGV2LT5uZXdfbGF5b3V0ID0gQUxHT1JJVEhNX1BBUklUWV9OOwogCW1kZGV2LT5uZXdfY2h1bmtfc2VjdG9ycyA9IG1kZGV2LT5jaHVua19zZWN0b3JzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5oIGIvZHJpdmVycy9tZC9yYWlkNS5oCmluZGV4IDhkNTYzYTQuLjNjYTc3YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuaAorKysgYi9kcml2ZXJzL21kL3JhaWQ1LmgKQEAgLTQwMCw4ICs0MDAsNiBAQAogCQkJCQkgICAgKiBDbGVhcmVkIHdoZW4gYSBzeW5jIGNvbXBsZXRlcy4KIAkJCQkJICAgICovCiAKLQlzdHJ1Y3QgcGx1Z19oYW5kbGUJcGx1ZzsKLQogCS8qIHBlciBjcHUgdmFyaWFibGVzICovCiAJc3RydWN0IHJhaWQ1X3BlcmNwdSB7CiAJCXN0cnVjdCBwYWdlCSpzcGFyZV9wYWdlOyAvKiBVc2VkIHdoZW4gY2hlY2tpbmcgUC9RIGluIHJhaWQ2ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2kyYy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9pMmMuYwppbmRleCA3NGVlMTcyLi5iMmJhOWRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2kyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfaTJjLmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogCQltc2xlZXAoU0FBNzE0Nl9JMkNfREVMQVkpOwogCX0KIAotCS8qIGlmIGFueSBlcnJvciBpcyBzdGlsbCBwcmVzZW50LCBhIGZhdGFsIGVycm9yIGhhcyBvY2N1cmVkIC4uLiAqLworCS8qIGlmIGFueSBlcnJvciBpcyBzdGlsbCBwcmVzZW50LCBhIGZhdGFsIGVycm9yIGhhcyBvY2N1cnJlZCAuLi4gKi8KIAlzdGF0dXMgPSBzYWE3MTQ2X2kyY19zdGF0dXMoZGV2KTsKIAlpZiAoIGRldi0+aTJjX2JpdHJhdGUgIT0gc3RhdHVzICkgewogCQlERUJfSTJDKCgiZmF0YWwgZXJyb3IuIHN0YXR1czoweCUwOHhcbiIsc3RhdHVzKSk7CkBAIC0zMjYsOSArMzI2LDkgQEAKIAkJCWlmICggMCAhPSBlcnIpIHsKIAkJCQkvKiB0aGlzIG9uZSBpcyB1bnNhdGlzZnlpbmc6IHNvbWUgaTJjIHNsYXZlcyBvbiBzb21lCiAJCQkJICAgZHZiIGNhcmRzIGRvbid0IGFja25vd2xlZGdlIGNvcnJlY3RseSwgc28gdGhlIHNhYTcxNDYKLQkJCQkgICB0aGlua3MgdGhhdCBhbiBhZGRyZXNzIGVycm9yIG9jY3VyZWQuIGluIHRoYXQgY2FzZSwgdGhlCisJCQkJICAgdGhpbmtzIHRoYXQgYW4gYWRkcmVzcyBlcnJvciBvY2N1cnJlZC4gaW4gdGhhdCBjYXNlLCB0aGUKIAkJCQkgICB0cmFuc2FjdGlvbiBzaG91bGQgYmUgcmV0cnlpbmcsIGV2ZW4gaWYgYW4gYWRkcmVzcyBlcnJvcgotCQkJCSAgIG9jY3VyZWQuIGFuYWxvZyBzYWE3MTQ2IGJhc2VkIGNhcmRzIGV4dGVuc2l2ZWx5IHJlbHkgb24KKwkJCQkgICBvY2N1cnJlZC4gYW5hbG9nIHNhYTcxNDYgYmFzZWQgY2FyZHMgZXh0ZW5zaXZlbHkgcmVseSBvbgogCQkJCSAgIGkyYyBhZGRyZXNzIHByb2JpbmcsIGhvd2V2ZXIsIGFuZCBhZGRyZXNzIGVycm9ycyBpbmRpY2F0ZSB0aGF0IGEKIAkJCQkgICBkZXZpY2UgaXMgcmVhbGx5ICpub3QqIHRoZXJlLiByZXRyeWluZyBpbiB0aGF0IGNhc2UKIAkJCQkgICBpbmNyZWFzZXMgdGhlIHRpbWUgdGhlIGRldmljZSBuZWVkcyB0byBwcm9iZSBncmVhdGx5LCBzbwpAQCAtMzY1LDcgKzM2NSw3IEBACiAJREVCX0kyQygoInRyYW5zbWlzc2lvbiBzdWNjZXNzZnVsLiAobXNnOiVkKS5cbiIsZXJyKSk7CiBvdXQ6CiAJLyogYW5vdGhlciBidWcgaW4gcmV2aXNpb24gMDogdGhlIGkyYy1yZWdpc3RlcnMgZ2V0IHVwbG9hZGVkIHJhbmRvbWx5IGJ5IG90aGVyCi0JICAgdXBsb2Fkcywgc28gd2UgYmV0dGVyIGNsZWFyIHRoZW0gb3V0IGJlZm9yZSBjb250aW51ZWluZyAqLworCSAgIHVwbG9hZHMsIHNvIHdlIGJldHRlciBjbGVhciB0aGVtIG91dCBiZWZvcmUgY29udGludWluZyAqLwogCWlmKCAwID09IGRldi0+cmV2aXNpb24gKSB7CiAJCV9fbGUzMiB6ZXJvID0gMDsKIAkJc2FhNzE0Nl9pMmNfcmVzZXQoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9teGw1MDA1cy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDVzLmMKaW5kZXggNjA1ZTI4Yi4uMGQ2ZTA5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDVzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDVzLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogLyogTVhMNTAwNSBUdW5lciBSZWdpc3RlciBTdHJ1Y3QgKi8KIHN0cnVjdCBUdW5lclJlZyB7CiAJdTE2IFJlZ19OdW07CS8qIFR1bmVyIFJlZ2lzdGVyIEFkZHJlc3MgKi8KLQl1MTYgUmVnX1ZhbDsJLyogQ3VycmVudCBzdyBwcm9ncmFtbWVkIHZhbHVlIHdhaXRpbmcgdG8gYmUgd3JpdGVuICovCisJdTE2IFJlZ19WYWw7CS8qIEN1cnJlbnQgc3cgcHJvZ3JhbW1lZCB2YWx1ZSB3YWl0aW5nIHRvIGJlIHdyaXR0ZW4gKi8KIH07CiAKIGVudW0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWNvbW1vbi5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWNvbW1vbi5jCmluZGV4IDU0NjZkNDcuLmFhZTQwZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1jb21tb24uYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtY29tbW9uLmMKQEAgLTUzMywxNiArNTMzLDcgQEAKIAlpZiAodGRhX2ZhaWwocmV0KSkKIAkJZ290byBmYWlsOwogCi0JcmVnc1tSX01QRF0gICA9ICgweDc3ICYgcGQpOwotCi0Jc3dpdGNoIChwcml2LT5tb2RlKSB7Ci0JY2FzZSBUREExODI3MV9BTkFMT0c6Ci0JCXJlZ3NbUl9NUERdICAmPSB+MHgwODsKLQkJYnJlYWs7Ci0JY2FzZSBUREExODI3MV9ESUdJVEFMOgotCQlyZWdzW1JfTVBEXSAgfD0gIDB4MDg7Ci0JCWJyZWFrOwotCX0KKwlyZWdzW1JfTVBEXSAgID0gKDB4N2YgJiBwZCk7CiAKIAlkaXYgPSAgKChkICogKGZyZXEgLyAxMDAwKSkgPDwgNykgLyAxMjU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKaW5kZXggOWFkNDQ1NC4uZDg4NGY1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKQEAgLTU3OSw4ICs1NzksOCBAQAogI2RlZmluZSBSRjMgMgogCXUzMiByZl9kZWZhdWx0WzNdOwogCXUzMiByZl9mcmVxWzNdOwotCXU4IHByb2dfY2FsWzNdOwotCXU4IHByb2dfdGFiWzNdOworCXMzMiBwcm9nX2NhbFszXTsKKwlzMzIgcHJvZ190YWJbM107CiAKIAlpID0gdGRhMTgyNzFfbG9va3VwX3JmX2JhbmQoZmUsICZmcmVxLCBOVUxMKTsKIApAQCAtNjAyLDMyICs2MDIsMzMgQEAKIAkJCXJldHVybiBiY2FsOwogCiAJCXRkYTE4MjcxX2NhbGNfcmZfY2FsKGZlLCAmcmZfZnJlcVtyZl0pOwotCQlwcm9nX3RhYltyZl0gPSByZWdzW1JfRUIxNF07CisJCXByb2dfdGFiW3JmXSA9IChzMzIpcmVnc1tSX0VCMTRdOwogCiAJCWlmICgxID09IGJjYWwpCi0JCQlwcm9nX2NhbFtyZl0gPSB0ZGExODI3MV9jYWxpYnJhdGVfcmYoZmUsIHJmX2ZyZXFbcmZdKTsKKwkJCXByb2dfY2FsW3JmXSA9CisJCQkJKHMzMil0ZGExODI3MV9jYWxpYnJhdGVfcmYoZmUsIHJmX2ZyZXFbcmZdKTsKIAkJZWxzZQogCQkJcHJvZ19jYWxbcmZdID0gcHJvZ190YWJbcmZdOwogCiAJCXN3aXRjaCAocmYpIHsKIAkJY2FzZSBSRjE6CiAJCQltYXBbaV0ucmZfYTEgPSAwOwotCQkJbWFwW2ldLnJmX2IxID0gKHMzMikocHJvZ19jYWxbUkYxXSAtIHByb2dfdGFiW1JGMV0pOworCQkJbWFwW2ldLnJmX2IxID0gKHByb2dfY2FsW1JGMV0gLSBwcm9nX3RhYltSRjFdKTsKIAkJCW1hcFtpXS5yZjEgICA9IHJmX2ZyZXFbUkYxXSAvIDEwMDA7CiAJCQlicmVhazsKIAkJY2FzZSBSRjI6Ci0JCQlkaXZpZGVuZCA9IChzMzIpKHByb2dfY2FsW1JGMl0gLSBwcm9nX3RhYltSRjJdKSAtCi0JCQkJICAgKHMzMikocHJvZ19jYWxbUkYxXSArIHByb2dfdGFiW1JGMV0pOworCQkJZGl2aWRlbmQgPSAocHJvZ19jYWxbUkYyXSAtIHByb2dfdGFiW1JGMl0gLQorCQkJCSAgICBwcm9nX2NhbFtSRjFdICsgcHJvZ190YWJbUkYxXSk7CiAJCQlkaXZpc29yID0gKHMzMikocmZfZnJlcVtSRjJdIC0gcmZfZnJlcVtSRjFdKSAvIDEwMDA7CiAJCQltYXBbaV0ucmZfYTEgPSAoZGl2aWRlbmQgLyBkaXZpc29yKTsKIAkJCW1hcFtpXS5yZjIgICA9IHJmX2ZyZXFbUkYyXSAvIDEwMDA7CiAJCQlicmVhazsKIAkJY2FzZSBSRjM6Ci0JCQlkaXZpZGVuZCA9IChzMzIpKHByb2dfY2FsW1JGM10gLSBwcm9nX3RhYltSRjNdKSAtCi0JCQkJICAgKHMzMikocHJvZ19jYWxbUkYyXSArIHByb2dfdGFiW1JGMl0pOworCQkJZGl2aWRlbmQgPSAocHJvZ19jYWxbUkYzXSAtIHByb2dfdGFiW1JGM10gLQorCQkJCSAgICBwcm9nX2NhbFtSRjJdICsgcHJvZ190YWJbUkYyXSk7CiAJCQlkaXZpc29yID0gKHMzMikocmZfZnJlcVtSRjNdIC0gcmZfZnJlcVtSRjJdKSAvIDEwMDA7CiAJCQltYXBbaV0ucmZfYTIgPSAoZGl2aWRlbmQgLyBkaXZpc29yKTsKLQkJCW1hcFtpXS5yZl9iMiA9IChzMzIpKHByb2dfY2FsW1JGMl0gLSBwcm9nX3RhYltSRjJdKTsKKwkJCW1hcFtpXS5yZl9iMiA9IChwcm9nX2NhbFtSRjJdIC0gcHJvZ190YWJbUkYyXSk7CiAJCQltYXBbaV0ucmYzICAgPSByZl9mcmVxW1JGM10gLyAxMDAwOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtbWFwcy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLW1hcHMuYwppbmRleCBlN2Y4NGM3Li4zZDViNmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtbWFwcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1tYXBzLmMKQEAgLTIyOSw4ICsyMjksNyBAQAogc3RhdGljIHN0cnVjdCB0ZGExODI3MV9tYXAgdGRhMTgyNzFfcmZfYmFuZFtdID0gewogCXsgLnJmbWF4ID0gIDQ3OTAwLCAudmFsID0gMHgwMCB9LAogCXsgLnJmbWF4ID0gIDYxMTAwLCAudmFsID0gMHgwMSB9LAotLyoJeyAucmZtYXggPSAxNTI2MDAsIC52YWwgPSAweDAyIH0sICovCi0JeyAucmZtYXggPSAxMjEyMDAsIC52YWwgPSAweDAyIH0sCisJeyAucmZtYXggPSAxNTI2MDAsIC52YWwgPSAweDAyIH0sCiAJeyAucmZtYXggPSAxNjQ3MDAsIC52YWwgPSAweDAzIH0sCiAJeyAucmZtYXggPSAyMDM1MDAsIC52YWwgPSAweDA0IH0sCiAJeyAucmZtYXggPSA0NTc4MDAsIC52YWwgPSAweDA1IH0sCkBAIC00NDgsNyArNDQ3LDcgQEAKIAl7IC5yZm1heCA9IDE1MDAwMCwgLnZhbCA9IDB4YjAgfSwKIAl7IC5yZm1heCA9IDE1MTAwMCwgLnZhbCA9IDB4YjEgfSwKIAl7IC5yZm1heCA9IDE1MjAwMCwgLnZhbCA9IDB4YjcgfSwKLQl7IC5yZm1heCA9IDE1MzAwMCwgLnZhbCA9IDB4YmQgfSwKKwl7IC5yZm1heCA9IDE1MjYwMCwgLnZhbCA9IDB4YmQgfSwKIAl7IC5yZm1heCA9IDE1NDAwMCwgLnZhbCA9IDB4MjAgfSwKIAl7IC5yZm1heCA9IDE1NTAwMCwgLnZhbCA9IDB4MjIgfSwKIAl7IC5yZm1heCA9IDE1NjAwMCwgLnZhbCA9IDB4MjQgfSwKQEAgLTQ1OSw3ICs0NTgsNyBAQAogCXsgLnJmbWF4ID0gMTYxMDAwLCAudmFsID0gMHgyZCB9LAogCXsgLnJmbWF4ID0gMTYzMDAwLCAudmFsID0gMHgyZSB9LAogCXsgLnJmbWF4ID0gMTY0MDAwLCAudmFsID0gMHgyZiB9LAotCXsgLnJmbWF4ID0gMTY1MDAwLCAudmFsID0gMHgzMCB9LAorCXsgLnJmbWF4ID0gMTY0NzAwLCAudmFsID0gMHgzMCB9LAogCXsgLnJmbWF4ID0gMTY2MDAwLCAudmFsID0gMHgxMSB9LAogCXsgLnJmbWF4ID0gMTY3MDAwLCAudmFsID0gMHgxMiB9LAogCXsgLnJmbWF4ID0gMTY4MDAwLCAudmFsID0gMHgxMyB9LApAQCAtNTEwLDcgKzUwOSw4IEBACiAJeyAucmZtYXggPSAyMzYwMDAsIC52YWwgPSAweDFiIH0sCiAJeyAucmZtYXggPSAyMzcwMDAsIC52YWwgPSAweDFjIH0sCiAJeyAucmZtYXggPSAyNDAwMDAsIC52YWwgPSAweDFkIH0sCi0JeyAucmZtYXggPSAyNDIwMDAsIC52YWwgPSAweDFmIH0sCisJeyAucmZtYXggPSAyNDIwMDAsIC52YWwgPSAweDFlIH0sCisJeyAucmZtYXggPSAyNDQwMDAsIC52YWwgPSAweDFmIH0sCiAJeyAucmZtYXggPSAyNDcwMDAsIC52YWwgPSAweDIwIH0sCiAJeyAucmZtYXggPSAyNDkwMDAsIC52YWwgPSAweDIxIH0sCiAJeyAucmZtYXggPSAyNTIwMDAsIC52YWwgPSAweDIyIH0sCkBAIC02MjQsNyArNjI0LDcgQEAKIAl7IC5yZm1heCA9IDQ1MzAwMCwgLnZhbCA9IDB4OTMgfSwKIAl7IC5yZm1heCA9IDQ1NDAwMCwgLnZhbCA9IDB4OTQgfSwKIAl7IC5yZm1heCA9IDQ1NjAwMCwgLnZhbCA9IDB4OTYgfSwKLQl7IC5yZm1heCA9IDQ1NzAwMCwgLnZhbCA9IDB4OTggfSwKKwl7IC5yZm1heCA9IDQ1NzgwMCwgLnZhbCA9IDB4OTggfSwKIAl7IC5yZm1heCA9IDQ2MTAwMCwgLnZhbCA9IDB4MTEgfSwKIAl7IC5yZm1heCA9IDQ2ODAwMCwgLnZhbCA9IDB4MTIgfSwKIAl7IC5yZm1heCA9IDQ3MjAwMCwgLnZhbCA9IDB4MTMgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS5oIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLmgKaW5kZXggM2FiYjIyMS4uNTBjZmE4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLmgKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLmgKQEAgLTk4LDcgKzk4LDcgQEAKIAkvKiBvdXRwdXQgb3B0aW9ucyB0aGF0IGNhbiBiZSBkaXNhYmxlZCAqLwogCWVudW0gdGRhMTgyNzFfb3V0cHV0X29wdGlvbnMgb3V0cHV0X29wdDsKIAotCS8qIHNvbWUgaTJjIHByb3ZpZGVycyBjYW50IHdyaXRlIGFsbCAzOSByZWdpc3RlcnMgYXQgb25jZSAqLworCS8qIHNvbWUgaTJjIHByb3ZpZGVycyBjYW4ndCB3cml0ZSBhbGwgMzkgcmVnaXN0ZXJzIGF0IG9uY2UgKi8KIAllbnVtIHRkYTE4MjcxX3NtYWxsX2kyYyBzbWFsbF9pMmM7CiAKIAkvKiBmb3JjZSByZiB0cmFja2luZyBmaWx0ZXIgY2FsaWJyYXRpb24gb24gc3RhcnR1cCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXBjaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXBjaS5jCmluZGV4IDIyN2MwMjAuLjAzZjk2ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1wY2kuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcGNpLmMKQEAgLTM4LDcgKzM4LDcgQEAKIAlERUJTVEFUVVMpOwogCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIwLjEiCi0jZGVmaW5lIERSSVZFUl9OQU1FICJUZWNobmlzYXQvQjJDMiBGbGV4Q29wIElJL0lJYi9JSUkgRGlnaXRhbCBUViBQQ0kgRHJpdmVyIgorI2RlZmluZSBEUklWRVJfTkFNRSAiZmxleGNvcC1wY2kiCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlBhdHJpY2sgQm9ldHRjaGVyIDxwYXRyaWNrLmJvZXR0Y2hlckBkZXN5LmRlPiIKIAogc3RydWN0IGZsZXhjb3BfcGNpIHsKQEAgLTU4LDcgKzU4LDcgQEAKIAogCWludCBhY3RpdmVfZG1hMV9hZGRyOyAvKiAwID0gYWRkcjAgb2YgZG1hMTsgMSA9IGFkZHIxIG9mIGRtYTEgKi8KIAl1MzIgbGFzdF9kbWExX2N1cl9wb3M7Ci0JLyogcG9zaXRpb24gb2YgdGhlIHBvaW50ZXIgbGFzdCB0aW1lIHRoZSB0aW1lci9wYWNrZXQgaXJxIG9jY3VyZWQgKi8KKwkvKiBwb3NpdGlvbiBvZiB0aGUgcG9pbnRlciBsYXN0IHRpbWUgdGhlIHRpbWVyL3BhY2tldCBpcnEgb2NjdXJyZWQgKi8KIAlpbnQgY291bnQ7CiAJaW50IGNvdW50X3ByZXY7CiAJaW50IHN0cmVhbV9wcm9ibGVtOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguYwppbmRleCA3OGZjNDY5Li4xZTExMDZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguYwpAQCAtNDI3LDEwICs0MjcsMTAgQEAKIAlzdHJ1Y3QgZHZiX2J0OHh4X2NhcmQgKmJ0ID0gZmUtPmR2Yi0+cHJpdjsKIAogCS8qIFJFU0VUIERFVklDRQotCSAqIHJlc2V0IGlzIGNvbnRyb2xlZCBieSBHUElPLTAKKwkgKiByZXNldCBpcyBjb250cm9sbGVkIGJ5IEdQSU8tMAogCSAqIHdoZW4gc2V0IHRvIDAgY2F1c2VzIHJlc2V0IGFuZCB3aGVuIHRvIDEgZm9yIG5vcm1hbCBvcAogCSAqIG11c3QgcmVtYWluIHJlc2V0IGZvciAxMjggY2xvY2sgY3ljbGVzIG9uIGEgNTBNaHogY2xvY2sKLQkgKiBhbHNvIFBSTTEgUFJNMiAmIFBSTTQgYXJlIGNvbnRyb2xlZCBieSBHUElPLTEsR1BJTy0yICYgR1BJTy00CisJICogYWxzbyBQUk0xIFBSTTIgJiBQUk00IGFyZSBjb250cm9sbGVkIGJ5IEdQSU8tMSxHUElPLTIgJiBHUElPLTQKIAkgKiBXZSBhc3N1bWUgdGhhdCB0aGUgcmVzZXQgaGFzIGJlIGhlbGQgbG93IGxvbmcgZW5vdWdoIG9yIHdlCiAJICogaGF2ZSBiZWVuIHJlc2V0IGJ5IGEgcG93ZXIgb24uICBXaGVuIHRoZSBkcml2ZXIgaXMgdW5sb2FkZWQKIAkgKiByZXNldCBzZXQgdG8gMCBzbyBpZiByZWxvYWRlZCB3ZSBoYXZlIGJlZW4gcmVzZXQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCmluZGV4IGNhZDY2MzQuLjMxZTJjMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCkBAIC0xNjM4LDcgKzE2MzgsNyBAQAogCWNhc2UgRkVfUkVBRF9TVEFUVVM6IHsKIAkJZmVfc3RhdHVzX3QqIHN0YXR1cyA9IHBhcmc7CiAKLQkJLyogaWYgcmV0dW5lIHdhcyByZXF1ZXN0ZWQgYnV0IGhhc24ndCBvY2N1cmVkIHlldCwgcHJldmVudAorCQkvKiBpZiByZXR1bmUgd2FzIHJlcXVlc3RlZCBidXQgaGFzbid0IG9jY3VycmVkIHlldCwgcHJldmVudAogCQkgKiB0aGF0IHVzZXIgZ2V0IHNpZ25hbCBzdGF0ZSBmcm9tIHByZXZpb3VzIHR1bmluZyAqLwogCQlpZiAoZmVwcml2LT5zdGF0ZSA9PSBGRVNUQVRFX1JFVFVORSB8fAogCQkgICAgZmVwcml2LT5zdGF0ZSA9PSBGRVNUQVRFX0VSUk9SKSB7CkBAIC0xNzI5LDcgKzE3MjksNyBAQAogCQkJICogRGlzaCBuZXR3b3JrIGxlZ2FjeSBzd2l0Y2hlcyAoYXMgdXNlZCBieSBEaXNoNTAwKQogCQkJICogYXJlIGNvbnRyb2xsZWQgYnkgc2VuZGluZyA5LWJpdCBjb21tYW5kIHdvcmRzCiAJCQkgKiBzcGFjZWQgOG1zZWMgYXBhcnQuCi0JCQkgKiB0aGUgYWN0dWFsIGNvbW1hbmQgd29yZCBpcyBzd2l0Y2gvcG9ydCBkZXBlbmRhbnQKKwkJCSAqIHRoZSBhY3R1YWwgY29tbWFuZCB3b3JkIGlzIHN3aXRjaC9wb3J0IGRlcGVuZGVudAogCQkJICogc28gaXQgaXMgdXAgdG8gdGhlIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiB0byBzZW5kCiAJCQkgKiB0aGUgcmlnaHQgY29tbWFuZC4KIAkJCSAqIFRoZSBjb21tYW5kIG11c3QgYWx3YXlzIHN0YXJ0IHdpdGggYSAnMCcgYWZ0ZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZwppbmRleCBmZTRmODk0Li5jNTQ1MDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCkBAIC0zNTYsMTMgKzM1NiwxNSBAQAogCXNlbGVjdCBEVkJfVERBODI2WCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfU1RWMDI4OCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfSVgyNTA1ViBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWMDI5OSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfUExMIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBMTUUgRE0wNC9RUUJPWCBEVkItUyBVU0IyLjAgLgogCiBjb25maWcgRFZCX1VTQl9URUNITklTQVRfVVNCMgogCXRyaXN0YXRlICJUZWNobmlzYXQgRFZCLVMvUzIgVVNCMi4wIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBEVkJfVVNCCi0Jc2VsZWN0IERWQl9TVEIwODk5IGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IERWQl9TVEI2MTAwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9TVFYwOTB4IGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9TVFY2MTEweCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgVGVjaG5pc2F0IFVTQjIgRFZCLVMvUzIgZGV2aWNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAwNS1mZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMDUtZmUuYwppbmRleCAxOTllY2UwLi42YWQ5NDc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAwNS1mZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDA1LWZlLmMKQEAgLTU4MCw3ICs1ODAsNyBAQAogCQlOU19jb2VmZjJfOGsgPSAweDcyNDkyNTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZXJyKCJJbnZhbGlkIGJhbmR3aXRoICVkLiIsIGJ3KTsKKwkJZXJyKCJJbnZhbGlkIGJhbmR3aWR0aCAlZC4iLCBidyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNzg5LDcgKzc4OSw3IEBACiAJCXRlbXAgPSAyOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnIoIkludmFsaWQgYmFuZHdpdGggJWQuIiwgYncpOworCQllcnIoIkludmFsaWQgYmFuZHdpZHRoICVkLiIsIGJ3KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiBhZjkwMDVfd3JpdGVfcmVnaXN0ZXJfYml0cyhkLCB4ZF9nX3JlZ19idywgcmVnX2J3X3BvcywKQEAgLTkzMCw3ICs5MzAsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQkvKiBpbml0IG90aGVyIHBhcmFtZXRlcnM6IHByb2dyYW0gY2ZvZSBhbmQgc2VsZWN0IGJhbmR3aXRoICovCisJLyogaW5pdCBvdGhlciBwYXJhbWV0ZXJzOiBwcm9ncmFtIGNmb2UgYW5kIHNlbGVjdCBiYW5kd2lkdGggKi8KIAlkZWJfaW5mbygicHJvZ3JhbSBjZm9lXG4iKTsKIAlpZiAoKHJldCA9IGFmOTAwNV9mZV9wcm9ncmFtX2Nmb2Uoc3RhdGUtPmQsIEJBTkRXSURUSF82X01IWikpKQogCQlyZXR1cm4gcmV0OwpAQCAtMTE2Nyw3ICsxMTY3LDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JLyogc2VsZWN0IGJhbmR3aXRoICovCisJLyogc2VsZWN0IGJhbmR3aWR0aCAqLwogCWRlYl9pbmZvKCJzZWxlY3QgYmFuZHdpZHRoIik7CiAJcmV0ID0gYWY5MDA1X2ZlX3NlbGVjdF9idyhzdGF0ZS0+ZCwgZmVwLT51Lm9mZG0uYmFuZHdpZHRoKTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKaW5kZXggOTdhZjI2Ni4uNjUyMTRhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCkBAIC0yMTYyLDcgKzIxNjIsNyBAQAogCQkuYWdjMV9wdDMgICAgICAgPSA5OCwKIAkJLmFnYzFfc2xvcGUxICAgID0gMCwKIAkJLmFnYzFfc2xvcGUyICAgID0gMTY3LAotCQkuYWdjMV9wdDEgICAgICAgPSA5OCwKKwkJLmFnYzJfcHQxICAgICAgID0gOTgsCiAJCS5hZ2MyX3B0MiAgICAgICA9IDI1NSwKIAkJLmFnYzJfc2xvcGUxICAgID0gMTA0LAogCQkuYWdjMl9zbG9wZTIgICAgPSAwLApAQCAtMjQ0MCwxMSArMjQ0MCwxMSBAQAogCWRpYjA3MDBfc2V0X2kyY19zcGVlZChhZGFwLT5kZXYsIDM0MCk7CiAJYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKGRpYjcwMDBwX2F0dGFjaCwgJmFkYXAtPmRldi0+aTJjX2FkYXAsIDB4OTAsICZ0ZmU3MDkwcHZyX2RpYjcwMDBwX2NvbmZpZ1swXSk7CiAKLQlkaWI3MDkwX3NsYXZlX3Jlc2V0KGFkYXAtPmZlKTsKLQogCWlmIChhZGFwLT5mZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCWRpYjcwOTBfc2xhdmVfcmVzZXQoYWRhcC0+ZmUpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZnJpaW8uaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZnJpaW8uaAppbmRleCBhZjhkNTVlLi4wZjQ2MWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2ZyaWlvLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9mcmlpby5oCkBAIC0yMCw3ICsyMCw3IEBACiAgKiAgICAgICAgIEZyb250ZW5kOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tdGVjaCBKRFZCVC05MDUwMgogICogICAgICAgICAgICAgKHR1bmVyIFBMTDogICAgICAgICAgICAgICAgICAgICAgIHR1YTYwMzQsIEkyQyBhZGRyOigweEMwID4+IDEpKQogICogICAgICAgICAgICAgKE9GRE0gZGVtb2R1bGF0b3I6ICAgICAgICAgICAgICAgIFRDOTA1MDIsIEkyQyBhZGRyOigweDMwID4+IDEpKQotICogICAgICAgICBMRUQgeDMgKCtMTkIpIGNvbnRyb2xsOiAgICAgICAgICAgICAgIFBJQyAxNkY2NzYKKyAqICAgICAgICAgTEVEIHgzICgrTE5CKSBjb250cm9sOiAgICAgICAgICAgICAgICBQSUMgMTZGNjc2CiAgKiAgICAgICAgIEVFUFJPTTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjRDMDgKICAqCiAgKiAgICAgICAgKFVTQiBzbWFydCBjYXJkIHJlYWRlcjogICAgICAgICAgICAgICAgQVU5NTIyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9sbWVkbTA0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2xtZWRtMDQuYwppbmRleCBjZDI2ZTdjLi5mMmRiMDEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2xtZWRtMDQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2xtZWRtMDQuYwpAQCAtMzIxLDcgKzMyMSw3IEBACiAJbG1lX2ludC0+bG1lX3VyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CiAKIAl1c2Jfc3VibWl0X3VyYihsbWVfaW50LT5sbWVfdXJiLCBHRlBfQVRPTUlDKTsKLQlpbmZvKCJJTlQgSW50ZXJ1cHQgU2VydmljZSBTdGFydGVkIik7CisJaW5mbygiSU5UIEludGVycnVwdCBTZXJ2aWNlIFN0YXJ0ZWQiKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDgyLDcgKzQ4Miw3IEBACiAJCQlicmVhazsKIAkJfQogCi0JCWRlYl9pbmZvKDQsICJJMkMgRnJvbSBJbnRlcnVwdCBNZXNzYWdlIG91dCglMDJ4KSBpbiglMDJ4KSIsCisJCWRlYl9pbmZvKDQsICJJMkMgRnJvbSBJbnRlcnJ1cHQgTWVzc2FnZSBvdXQoJTAyeCkgaW4oJTAyeCkiLAogCQkJCXdidWZbM10sIHJidWZbMV0pOwogCiAJfQpAQCAtNjMyLDExICs2MzIsMTEgQEAKIAl9CiAJZC0+cmNfZGV2ID0gcmM7CiAKLQkvKiBTdGFydCB0aGUgSW50ZXJ1cHQgKi8KKwkvKiBTdGFydCB0aGUgSW50ZXJydXB0ICovCiAJcmV0ID0gbG1lMjUxMF9pbnRfcmVhZChhZGFwKTsKIAlpZiAocmV0IDwgMCkgewogCQlyY191bnJlZ2lzdGVyX2RldmljZShyYyk7Ci0JCWluZm8oIklOVCBVbmFibGUgdG8gc3RhcnQgSW50ZXJ1cHQgU2VydmljZSIpOworCQlpbmZvKCJJTlQgVW5hYmxlIHRvIHN0YXJ0IEludGVycnVwdCBTZXJ2aWNlIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMTAwMyw3ICsxMDAzLDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JLyogU3RhcnQgdGhlIEludGVydXB0ICYgUmVtb3RlKi8KKwkvKiBTdGFydCB0aGUgSW50ZXJydXB0ICYgUmVtb3RlKi8KIAlyZXQgPSBsbWUyNTEwX2ludF9zZXJ2aWNlKGFkYXApOwogCiAJcmV0dXJuIHJldDsKQEAgLTExNzEsNyArMTE3MSw3IEBACiAJCXVzYl9raWxsX3VyYihzdC0+bG1lX3VyYik7CiAJCXVzYl9mcmVlX2NvaGVyZW50KGQtPnVkZXYsIDUwMDAsIHN0LT5idWZmZXIsCiAJCQkJICBzdC0+bG1lX3VyYi0+dHJhbnNmZXJfZG1hKTsKLQkJaW5mbygiSW50ZXJ1cHQgU2VydmljZSBTdG9wcGVkIik7CisJCWluZm8oIkludGVycnVwdCBTZXJ2aWNlIFN0b3BwZWQiKTsKIAkJcmNfdW5yZWdpc3Rlcl9kZXZpY2UoZC0+cmNfZGV2KTsKIAkJaW5mbygiUmVtb3RlIFN0b3BwZWQiKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXRibTg4MzAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdGJtODgzMC5oCmluZGV4IGU4MTQ5ZjMuLjAyNDI3MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdGJtODgzMC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdGJtODgzMC5oCkBAIC0zOSw3ICszOSw3IEBACiAJLyogcGFyYWxsZWwgb3Igc2VyaWFsIHRyYW5zcG9ydCBzdHJlYW0gKi8KIAl1OCBzZXJpYWxfdHM7CiAKLQkvKiB0cmFuc3BvcnQgc3RyZWFtIGNsb2NrIG91dHB1dCBvbmx5IHdoZW4gcmVjZXZpbmcgdmFsaWQgc3RyZWFtICovCisJLyogdHJhbnNwb3J0IHN0cmVhbSBjbG9jayBvdXRwdXQgb25seSB3aGVuIHJlY2VpdmluZyB2YWxpZCBzdHJlYW0gKi8KIAl1OCB0c19jbGtfZ2F0ZWQ7CiAKIAkvKiBEZWNvZGVyIHNhbXBsZSBUUyBkYXRhIGF0IHJpc2luZyBlZGdlIG9mIGNsb2NrICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyX2RpZy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMl9kaWcuYwppbmRleCA2NWY2YTM2Li4xZDU3Mjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyX2RpZy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfZGlnLmMKQEAgLTYzNSw3ICs2MzUsNyBAQAogCXN0cnVjdCBhdTg1MjJfbGVkX2NvbmZpZyAqbGVkX2NvbmZpZyA9IHN0YXRlLT5jb25maWctPmxlZF9jZmc7CiAJdTggdmFsOwogCi0JLyogYmFpbCBvdXQgaWYgd2UgY2FudCBjb250cm9sIGFuIExFRCAqLworCS8qIGJhaWwgb3V0IGlmIHdlIGNhbid0IGNvbnRyb2wgYW4gTEVEICovCiAJaWYgKCFsZWRfY29uZmlnIHx8ICFsZWRfY29uZmlnLT5ncGlvX291dHB1dCB8fAogCSAgICAhbGVkX2NvbmZpZy0+Z3Bpb19vdXRwdXRfZW5hYmxlIHx8ICFsZWRfY29uZmlnLT5ncGlvX291dHB1dF9kaXNhYmxlKQogCQlyZXR1cm4gMDsKQEAgLTY2NSw3ICs2NjUsNyBAQAogCXN0cnVjdCBhdTg1MjJfbGVkX2NvbmZpZyAqbGVkX2NvbmZpZyA9IHN0YXRlLT5jb25maWctPmxlZF9jZmc7CiAJaW50IGksIHJldCA9IDA7CiAKLQkvKiBiYWlsIG91dCBpZiB3ZSBjYW50IGNvbnRyb2wgYW4gTEVEICovCisJLyogYmFpbCBvdXQgaWYgd2UgY2FuJ3QgY29udHJvbCBhbiBMRUQgKi8KIAlpZiAoIWxlZF9jb25maWcgfHwgIWxlZF9jb25maWctPmdwaW9fbGVkcyB8fAogCSAgICAhbGVkX2NvbmZpZy0+bnVtX2xlZF9zdGF0ZXMgfHwgIWxlZF9jb25maWctPmxlZF9zdGF0ZXMpCiAJCXJldHVybiAwOwpAQCAtODAzLDcgKzgwMyw3IEBACiAJaW50IGxlZDsKIAl1MTYgc3Ryb25nOwogCi0JLyogYmFpbCBvdXQgaWYgd2UgY2FudCBjb250cm9sIGFuIExFRCAqLworCS8qIGJhaWwgb3V0IGlmIHdlIGNhbid0IGNvbnRyb2wgYW4gTEVEICovCiAJaWYgKCFsZWRfY29uZmlnKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2JjbTM1MTAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9iY20zNTEwLmMKaW5kZXggY2Y1ZTU3Ni4uOGFmZjU4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2JjbTM1MTAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYmNtMzUxMC5jCkBAIC0xNTUsNyArMTU1LDcgQEAKIAl1bnNpZ25lZCBsb25nIHQ7CiAKIC8qIENoZWNrIGlmIGFueSBwcmV2aW91cyBIQUIgcmVxdWVzdCBzdGlsbCBuZWVkcyB0byBiZSBzZXJ2aWNlZCBieSB0aGUKLSAqIEFxdWlzaXRpb24gUHJvY2Vzc29yIGJlZm9yZSBzZW5kaW5nIG5ldyByZXF1ZXN0ICovCisgKiBBY3F1aXNpdGlvbiBQcm9jZXNzb3IgYmVmb3JlIHNlbmRpbmcgbmV3IHJlcXVlc3QgKi8KIAlpZiAoKHJldCA9IGJjbTM1MTBfcmVhZEIoc3QsMHhhOCwmdikpIDwgMCkKIAkJcmV0dXJuIHJldDsKIAlpZiAodi5IQUJTVEFUX2E4LkhBQlIpIHsKQEAgLTM2MSw3ICszNjEsNyBAQAogLyogU2V0IGR1cmF0aW9uIG9mIHRoZSBpbml0aWFsIHN0YXRlIG9mIFRVTkNUTCA9IDMuMzQgbWljcm8gU2VjICovCiAJYy5UVU5DVExfc3RhdGUgPSAweDQwOwogCi0vKiBQUkVTQ0FMRVIgREVWSURFIFJBVElPIHwgQkMxXzJfM180OyAoYmFuZCBzd2l0Y2gpLCAxc3Rvc2MgUkVGRVJFTkNFIENPVU5URVIgUkVGX1MxMiBhbmQgUkVGX1MxMSAqLworLyogUFJFU0NBTEVSIERJVklERSBSQVRJTyB8IEJDMV8yXzNfNDsgKGJhbmQgc3dpdGNoKSwgMXN0b3NjIFJFRkVSRU5DRSBDT1VOVEVSIFJFRl9TMTIgYW5kIFJFRl9TMTEgKi8KIAljLmN0bF9kYXRbMF0uY3RybC5zaXplID0gQklUU184OwogCWMuY3RsX2RhdFswXS5kYXRhICAgICAgPSAweDgwIHwgYmM7CiAKQEAgLTM5Nyw3ICszOTcsNyBAQAogCWMuY3RsX2RhdFs3XS5jdHJsLmNzMCAgPSAxOwogCWMuY3RsX2RhdFs3XS5kYXRhICAgICAgPSAweDQwOwogCi0vKiBQUkVTQ0FMRVIgREVWSURFIFJBVElPLCAybmRvc2MgUkVGRVJFTkNFIENPVU5URVIgUkVGX1MxMiBhbmQgUkVGX1MxMSAqLworLyogUFJFU0NBTEVSIERJVklERSBSQVRJTywgMm5kb3NjIFJFRkVSRU5DRSBDT1VOVEVSIFJFRl9TMTIgYW5kIFJFRl9TMTEgKi8KIAljLmN0bF9kYXRbOF0uY3RybC5zaXplID0gQklUU184OwogCWMuY3RsX2RhdFs4XS5kYXRhICAgICAgPSAweDgwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDAuYwppbmRleCA1ZmJjMGZjLi4wMTQyMjE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAwLmMKQEAgLTE3OSw3ICsxNzksNyBAQAogCWN4MjI3MDBfd3JpdGVyZWcgKHN0YXRlLCAweDA2LCB2YWwpOwogCiAJY3gyMjcwMF93cml0ZXJlZyAoc3RhdGUsIDB4MDgsIDB4MDQgfCAweDAyKTsgIC8qIHVzZSB1c2VyIHRwcyBwYXJhbWV0ZXJzICovCi0JY3gyMjcwMF93cml0ZXJlZyAoc3RhdGUsIDB4MDgsIDB4MDQpOyAgICAgICAgIC8qIHJlc3RhcnQgYXF1aXNpdGlvbiAqLworCWN4MjI3MDBfd3JpdGVyZWcgKHN0YXRlLCAweDA4LCAweDA0KTsgICAgICAgICAvKiByZXN0YXJ0IGFjcXVpc2l0aW9uICovCiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5jCmluZGV4IGZmNmM0OTguLjMxMzk1NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuYwpAQCAtNTUsNyArNTUsNyBAQAogCiAvKiBSZWdpc3RlciB2YWx1ZXMgdG8gaW5pdGlhbGlzZSB0aGUgZGVtb2QgKi8KIHN0YXRpYyBjb25zdCB1OCBpbml0X3RhYltdID0gewotCTB4MDAsIDB4MDAsIC8qIFN0b3AgYXF1aXNpdGlvbiAqLworCTB4MDAsIDB4MDAsIC8qIFN0b3AgYWNxdWlzaXRpb24gKi8KIAkweDBCLCAweDA2LAogCTB4MDksIDB4MDEsCiAJMHgwRCwgMHg0MSwKQEAgLTMxMCw3ICszMTAsNyBAQAogCQkJJiAweGZjKTsKIAkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQywKIAkJCShjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEMpICYgMHhCRikgfCAweDQwKTsKLQkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwMCwgMHgwMSk7IC8qIEJlZ2luIGFxdWlzaXRpb24gKi8KKwkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwMCwgMHgwMSk7IC8qIEJlZ2luIGFjcXVpc2l0aW9uICovCiAJCWRwcmludGsoIiVzOiBBdXRvZGV0ZWN0aW5nXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOwogCX0KQEAgLTQyNCw3ICs0MjQsNyBAQAogCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEMsCiAJCShjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEMpICYgMHhCRikgfCAweDQwKTsKIAotCS8qIEJlZ2luIGNoYW5uZWwgYXF1aXNpdGlvbiAqLworCS8qIEJlZ2luIGNoYW5uZWwgYWNxdWlzaXRpb24gKi8KIAljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDAwLCAweDAxKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEwLmMKaW5kZXggN2ExYTViYy4uYmY5Yzk5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMC5jCkBAIC01NDQsNyArNTQ0LDcgQEAKIAljeDI0MTEwX3NldF9pbnZlcnNpb24gKHN0YXRlLCBwLT5pbnZlcnNpb24pOwogCWN4MjQxMTBfc2V0X2ZlYyAoc3RhdGUsIHAtPnUucXBzay5mZWNfaW5uZXIpOwogCWN4MjQxMTBfc2V0X3N5bWJvbHJhdGUgKHN0YXRlLCBwLT51LnFwc2suc3ltYm9sX3JhdGUpOwotCWN4MjQxMTBfd3JpdGVyZWcoc3RhdGUsMHgwNCwweDA1KTsgLyogc3RhcnQgYXF1aXNpdGlvbiAqLworCWN4MjQxMTBfd3JpdGVyZWcoc3RhdGUsMHgwNCwweDA1KTsgLyogc3RhcnQgYWNxdWlzaXRpb24gKi8KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTMuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEzLmgKaW5kZXggNWRlMGY3Zi4uMDFlYjdiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBEcml2ZXIgZm9yIENvbmV4YW50IENYMjQxMTMvQ1gyNDEyOCBUdW5lciAoU2F0ZWxpdGUpCisgKiAgRHJpdmVyIGZvciBDb25leGFudCBDWDI0MTEzL0NYMjQxMjggVHVuZXIgKFNhdGVsbGl0ZSkKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTggUGF0cmljayBCb2V0dGNoZXIgPHBiQGxpbnV4dHYub3JnPgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5jCmluZGV4IGZhZDZhOTkuLmIxZGQ4YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYwpAQCAtOTQ5LDcgKzk0OSw3IEBACiAJZWxzZQogCQllcnIoIml0IHNlZW1zIEkgZG9uJ3QgaGF2ZSBhIHR1bmVyLi4uIik7CiAKLQkvKiBFbmFibGUgYXV0b21hdGljIGFxdWlzaXRpb24gYW5kIHJlc2V0IGN5Y2xlICovCisJLyogRW5hYmxlIGF1dG9tYXRpYyBhY3F1aXNpdGlvbiBhbmQgcmVzZXQgY3ljbGUgKi8KIAljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDAzLCAoY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDAzKSB8IDB4MDcpKTsKIAljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDAwLCAweDEwKTsKIAljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDAwLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcngzOTd4RC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RyeDM5N3hELmMKaW5kZXggYTA1MDA3Yy4uNTM2ZjAyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RyeDM5N3hELmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RyeDM5N3hELmMKQEAgLTEwOTcsNyArMTA5Nyw3IEBACiAJcy0+Y29uZmlnLmlmYWdjLncwQSA9IDB4M2ZmOwogCXMtPmNvbmZpZy5pZmFnYy53MEMgPSAweDM4ODsKIAotCS8qIGZvciBzaWduYWwgc3RyZW5naHQgY2FsY3VsYXRpb25zICovCisJLyogZm9yIHNpZ25hbCBzdHJlbmd0aCBjYWxjdWxhdGlvbnMgKi8KIAlzLT5jb25maWcuc3M3NiA9IDgyMDsKIAlzLT5jb25maWcuc3M3OCA9IDIyMDA7CiAJcy0+Y29uZmlnLnNzN0EgPSAxNTA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbWI4NmExNi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL21iODZhMTYuYwppbmRleCAzM2I2MzIzLi5jMjgzMTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbWI4NmExNi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tYjg2YTE2LmMKQEAgLTE2MzAsNyArMTYzMCw3IEBACiAJc3RhdGUtPnNyYXRlID0gcC0+dS5xcHNrLnN5bWJvbF9yYXRlIC8gMTAwMDsKIAogCWlmICghbWI4NmExNl9zZXRfZmUoc3RhdGUpKSB7Ci0JCWRwcmludGsodmVyYm9zZSwgTUI4NkExNl9FUlJPUiwgMSwgIlN1Y2Nlc2Z1bGx5IGFjcXVpcmVkIExPQ0siKTsKKwkJZHByaW50ayh2ZXJib3NlLCBNQjg2QTE2X0VSUk9SLCAxLCAiU3VjY2Vzc2Z1bGx5IGFjcXVpcmVkIExPQ0siKTsKIAkJcmV0dXJuIERWQkZFX0FMR09fU0VBUkNIX1NVQ0NFU1M7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbWI4NmEyMHMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tYjg2YTIwcy5jCmluZGV4IGNjNGFjZDIuLjBmODY3YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tYjg2YTIwcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tYjg2YTIwcy5jCkBAIC00MDYsNyArNDA2LDcgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAibWI4NmEyMHM6IEluaXQgZmFpbGVkLiBXaWxsIHRyeSBhZ2FpbiBsYXRlclxuIik7CiAJfSBlbHNlIHsKIAkJc3RhdGUtPm5lZWRfaW5pdCA9IGZhbHNlOwotCQlkcHJpbnRrKCJJbml0aWFsaXphdGlvbiBzdWNjZWRlZC5cbiIpOworCQlkcHJpbnRrKCJJbml0aWFsaXphdGlvbiBzdWNjZWVkZWQuXG4iKTsKIAl9CiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL210MzEyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbXQzMTIuYwppbmRleCA0NzI5MDdkLi44M2U2ZjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbXQzMTIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbXQzMTIuYwpAQCAtNjcwLDcgKzY3MCw3IEBACiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBlcnJvcjsKIAotCQkvKiBwcmVzZXJ2ZSB0aGlzIGJpdCB0byBub3QgYWNjaWRlbnRseSBzaHV0ZG93biBBREMgKi8KKwkJLyogcHJlc2VydmUgdGhpcyBiaXQgdG8gbm90IGFjY2lkZW50YWxseSBzaHV0ZG93biBBREMgKi8KIAkJdmFsICY9IDB4ODA7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDIwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQyMC5jCmluZGV4IGU4N2I3NDcuLjE3ZjhjZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDIwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MjAuYwpAQCAtMjI1LDcgKzIyNSw3IEBACiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCWludCByZXN1bHQgPSAwOwogCi0JLyogc2V0dXAgZm9yIERJU0VRQyByZWNpZXZlICovCisJLyogc2V0dXAgZm9yIERJU0VRQyByZWNlaXZlICovCiAJdmFsID0gczVoMTQyMF9yZWFkcmVnKHN0YXRlLCAweDNiKTsKIAlzNWgxNDIwX3dyaXRlcmVnKHN0YXRlLCAweDNiLCAweDgyKTsgLyogRklYTUU6IGd1ZXNzIC0gZG8gd2UgbmVlZCB0byBzZXQgRElTX1JEWSgweDA4KSBpbiByZWNlaXZlIG1vZGU/ICovCiAJbXNsZWVwKDE1KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGI2MTAwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiNjEwMC5jCmluZGV4IDY0NjczYjguLmJjMWE4YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGI2MTAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjYxMDAuYwpAQCAtMzYwLDcgKzM2MCw3IEBACiAJZWxzZQogCQlvZGl2ID0gMDsKIAotCS8qIFZDTyBlbmFibGVkLCBzZWFjaCBjbG9jayBvZmYgYXMgcGVyIExMMy43LCAzLjQuMSAqLworCS8qIFZDTyBlbmFibGVkLCBzZWFyY2ggY2xvY2sgb2ZmIGFzIHBlciBMTDMuNywgMy40LjEgKi8KIAlyZWdzW1NUQjYxMDBfVkNPXSA9IDB4ZTAgfCAob2RpdiA8PCBTVEI2MTAwX1ZDT19PRElWX1NISUZUKTsKIAogCS8qIE9TTQkqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTcuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk3LmMKaW5kZXggNGZkNzQ3OS4uODRkODhmMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk3LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTcuYwpAQCAtNDM1LDcgKzQzNSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8vIGRldGVybWluZSBpbnZlcnNpb24gZGVwZW5kYW50IHBhcmFtZXRlcnMKKwkvLyBkZXRlcm1pbmUgaW52ZXJzaW9uIGRlcGVuZGVudCBwYXJhbWV0ZXJzCiAJaW52ZXJzaW9uID0gcC0+aW52ZXJzaW9uOwogCWlmIChzdGF0ZS0+Y29uZmlnLT5pbnZlcnQpCiAJCWludmVyc2lvbiA9IChpbnZlcnNpb24gPT0gSU5WRVJTSU9OX09OKSA/IElOVkVSU0lPTl9PRkYgOiBJTlZFUlNJT05fT047CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDM2Ny5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAzNjcuYwppbmRleCA0ZTBlNmE4Li5lNTdhYjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDM2Ny5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMzY3LmMKQEAgLTEzMjgsNyArMTMyOCw3IEBACiAKIAkvKmd1YXJkPXN0djAzNjdfcmVhZGJpdHMoc3RhdGUsRjM2N1RFUl9TWVJfR1VBUkQpOyAqLwogCi0JLypzdXByZXNzIEVQUSBhdXRvIGZvciBTWVJfR0FSRCAxLzE2IG9yIDEvMzIKKwkvKnN1cHByZXNzIEVQUSBhdXRvIGZvciBTWVJfR0FSRCAxLzE2IG9yIDEvMzIKIAlhbmQgc2V0IGNoYW5uZWwgcHJlZGljdG9yIGluIGF1dG9tYXRpYyAqLwogI2lmIDAKIAlzd2l0Y2ggKGd1YXJkKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9wcml2LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9wcml2LmgKaW5kZXggYjYyYjBmMC4uZTBlYTc0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcHJpdi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3ByaXYuaApAQCAtMjM4LDcgKzIzOCw3IEBACiB9OwogCiBzdHJ1Y3Qgc3R2MDkwMF9pbml0X3BhcmFtc3sKLQl1MzIJZG1kX3JlZl9jbGs7LyogUmVmcmVuY2UsSW5wdXQgY2xvY2sgZm9yIHRoZSBkZW1vZCBpbiBIeiAqLworCXUzMglkbWRfcmVmX2NsazsvKiBSZWZlcmVuY2UsSW5wdXQgY2xvY2sgZm9yIHRoZSBkZW1vZCBpbiBIeiAqLwogCiAJLyogRGVtb2R1bGF0b3IgVHlwZSAoc2luZ2xlIGRlbW9kIG9yIGR1YWwgZGVtb2QpICovCiAJZW51bSBmZV9zdHYwOTAwX2RlbW9kX21vZGUJZGVtb2RfbW9kZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkweC5jCmluZGV4IDQxZDBmMGEuLjUyZDg3MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHguYwpAQCAtMTQyNCw3ICsxNDI0LDcgQEAKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDRlJMT1cwLCAweDAwKSA8IDApCiAJCQkJZ290byBlcnI7CiAKLQkJCS8qZW5sYXJnZSB0aGUgdGltaW5nIGJhbmR3aXRoIGZvciBMb3cgU1IqLworCQkJLyplbmxhcmdlIHRoZSB0aW1pbmcgYmFuZHdpZHRoIGZvciBMb3cgU1IqLwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFJUQ1MyLCAweDY4KSA8IDApCiAJCQkJZ290byBlcnI7CiAJCX0gZWxzZSB7CkBAIC0xNDMyLDE3ICsxNDMyLDE3IEBACiAJCQlTZXQgVGhlIGNhcnJpZXIgc2VhcmNoIHVwIGFuZCBsb3cgdG8gYXV0byBtb2RlICovCiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ0FSQ0ZHLCAweGM0KSA8IDApCiAJCQkJZ290byBlcnI7Ci0JCQkvKnJlZHVjZSB0aGUgdGltaW5nIGJhbmR3aXRoIGZvciBoaWdoIFNSKi8KKwkJCS8qcmVkdWNlIHRoZSB0aW1pbmcgYmFuZHdpZHRoIGZvciBoaWdoIFNSKi8KIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBSVENTMiwgMHg0NCkgPCAwKQogCQkJCWdvdG8gZXJyOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogPj0gQ3V0IDMgKi8KIAkJaWYgKHN0YXRlLT5zcmF0ZSA8PSA1MDAwMDAwKSB7Ci0JCQkvKiBlbmxhcmdlIHRoZSB0aW1pbmcgYmFuZHdpdGggZm9yIExvdyBTUiAqLworCQkJLyogZW5sYXJnZSB0aGUgdGltaW5nIGJhbmR3aWR0aCBmb3IgTG93IFNSICovCiAJCQlTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBSVENTMiwgMHg2OCk7CiAJCX0gZWxzZSB7Ci0JCQkvKiByZWR1Y2UgdGltaW5nIGJhbmR3aXRoIGZvciBoaWdoIFNSICovCisJCQkvKiByZWR1Y2UgdGltaW5nIGJhbmR3aWR0aCBmb3IgaGlnaCBTUiAqLwogCQkJU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgUlRDUzIsIDB4NDQpOwogCQl9CiAKQEAgLTI0ODIsNyArMjQ4Miw3IEBACiAJCQkJCWR2YnMyX2ZseV93aGVlbCA9IFNUVjA5MHhfR0VURklFTERfUHgocmVnLCBGTFlXSEVFTF9DUFRfRklFTEQpOwogCQkJCX0KIAkJCQlpZiAoZHZiczJfZmx5X3doZWVsIDwgMHhkKSB7Ci0JCQkJCS8qRkFMU0UgbG9jaywgVGhlIGRlbW9kIGlzIGxvb3NpbmcgbG9jayAqLworCQkJCQkvKkZBTFNFIGxvY2ssIFRoZSBkZW1vZCBpcyBsb3NpbmcgbG9jayAqLwogCQkJCQlsb2NrID0gMDsKIAkJCQkJaWYgKHRyaWFscyA8IDIpIHsKIAkJCQkJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgewpAQCAtMzIwMiw3ICszMjAyLDcgQEAKIAkJCWdvdG8gZXJyOwogCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ09SUkVMTUFOVCwgMHg3MCkgPCAwKQogCQkJZ290byBlcnI7Ci0JCWlmIChzdHYwOTB4X3NldF9zcmF0ZShzdGF0ZSwgMTAwMDAwMCkgPCAwKSAvKiBpbml0YWwgc3JhdGUgPSAxTXNwcyAqLworCQlpZiAoc3R2MDkweF9zZXRfc3JhdGUoc3RhdGUsIDEwMDAwMDApIDwgMCkgLyogaW5pdGlhbCBzcmF0ZSA9IDFNc3BzICovCiAJCQlnb3RvIGVycjsKIAl9IGVsc2UgewogCQkvKiBrbm93biBzcmF0ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc191YXJ0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX3VhcnQuYwppbmRleCA5N2I4ODllLi5mODA3YzhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX3VhcnQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX3VhcnQuYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAJbW13cml0ZShtbXJlYWQoTUFOVElTX1VBUlRfQ1RMKSB8IE1BTlRJU19VQVJUX1JYSU5ULCBNQU5USVNfVUFSVF9DVEwpOwogCiAJc2NoZWR1bGVfd29yaygmbWFudGlzLT51YXJ0X3dvcmspOwotCWRwcmludGsoTUFOVElTX0RFQlVHLCAxLCAiVUFSVCBzdWNjZXNmdWxseSBpbml0aWFsaXplZCIpOworCWRwcmludGsoTUFOVElTX0RFQlVHLCAxLCAiVUFSVCBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQiKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvbmdlbmUtY29yZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvbmdlbmUtY29yZS5jCmluZGV4IDE3NWEwZjYuLjY5MjdjNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9uZ2VuZS1jb3JlLmMKQEAgLTEyMiw3ICsxMjIsNyBAQAogCQkJCQkJQ3VyLT5uZ2VuZUJ1ZmZlci5TUi5GbGFncyAmPQogCQkJCQkJCX4weDQwOwogCQkJCQkJYnJlYWs7Ci0JCQkJCQkvKiBTdG9wIHByb2NjZXNzaW5nIHN0cmVhbSAqLworCQkJCQkJLyogU3RvcCBwcm9jZXNzaW5nIHN0cmVhbSAqLwogCQkJCQl9CiAJCQkJfSBlbHNlIHsKIAkJCQkJLyogV2UgZ290IGEgdmFsaWQgYnVmZmVyLApAQCAtMTMzLDcgKzEzMyw3IEBACiAJCQkJcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FICI6IE9PUFNcbiIpOwogCQkJCWlmIChjaGFuLT5IV1N0YXRlID09IEhXU1RBVEVfUlVOKSB7CiAJCQkJCUN1ci0+bmdlbmVCdWZmZXIuU1IuRmxhZ3MgJj0gfjB4NDA7Ci0JCQkJCWJyZWFrOwkvKiBTdG9wIHByb2NjZXNzaW5nIHN0cmVhbSAqLworCQkJCQlicmVhazsJLyogU3RvcCBwcm9jZXNzaW5nIHN0cmVhbSAqLwogCQkJCX0KIAkJCX0KIAkJCWlmIChjaGFuLT5BdWRpb0RUT1VwZGF0ZWQpIHsKQEAgLTE1MjAsNiArMTUyMCw3IEBACiAJaWYgKGRldi0+Y2kuZW4gJiYgKGlvICYgTkdFTkVfSU9fVFNPVVQpKSB7CiAJCWR2Yl9jYV9lbjUwMjIxX2luaXQoYWRhcHRlciwgZGV2LT5jaS5lbiwgMCwgMSk7CiAJCXNldF90cmFuc2ZlcihjaGFuLCAxKTsKKwkJY2hhbi0+ZGV2LT5jaGFubmVsWzJdLkRhdGFGb3JtYXRGbGFncyA9IERGX1NXQVAzMjsKIAkJc2V0X3RyYW5zZmVyKCZjaGFuLT5kZXYtPmNoYW5uZWxbMl0sIDEpOwogCQlkdmJfcmVnaXN0ZXJfZGV2aWNlKGFkYXB0ZXIsICZjaGFuLT5jaV9kZXYsCiAJCQkJICAgICZuZ2VuZV9kdmJkZXZfY2ksICh2b2lkICopIGNoYW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvcGx1dG8yLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvcGx1dG8yLmMKaW5kZXggNmNhNjcxMy4uN2NiNzllYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL3BsdXRvMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9wbHV0bzIuYwpAQCAtMjk0LDEzICsyOTQsMTMgQEAKIAogCS8qIFdvcmthcm91bmQgZm9yIGJyb2tlbiBoYXJkd2FyZToKIAkgKiBbMV0gT24gc3RhcnR1cCBOQlBBQ0tFVFMgc2VlbXMgdG8gY29udGFpbiBhbiB1bmluaXRpYWxpemVkIHZhbHVlLAotCSAqICAgICBidXQgbm8gcGFja2V0cyBoYXZlIGJlZW4gdHJhbnNmZXJlZC4KKwkgKiAgICAgYnV0IG5vIHBhY2tldHMgaGF2ZSBiZWVuIHRyYW5zZmVycmVkLgogCSAqIFsyXSBTb21ldGltZXMgKGFjdHVhbGx5IHZlcnkgb2Z0ZW4pIE5CUEFDS0VUUyBzdGF5cyBhdCB6ZXJvCi0JICogICAgIGFsdGhvdWdoIG9uZSBwYWNrZXQgaGFzIGJlZW4gdHJhbnNmZXJlZC4KKwkgKiAgICAgYWx0aG91Z2ggb25lIHBhY2tldCBoYXMgYmVlbiB0cmFuc2ZlcnJlZC4KIAkgKiBbM10gU29tZXRpbWVzIChhY3R1YWxseSByYXJlbHkpLCB0aGUgY2FyZCBnZXRzIGludG8gYW4gZXJyb25lb3VzCiAJICogICAgIG1vZGUgd2hlcmUgaXQgY29udGludW91c2x5IGdlbmVyYXRlcyBpbnRlcnJ1cHRzLCBjbGFpbWluZyBpdAotCSAqICAgICBoYXMgcmVjaWV2ZWQgbmJwYWNrZXRzPlRTX0RNQV9QQUNLRVRTIHBhY2tldHMsIGJ1dCBubyBwYWNrZXQKLQkgKiAgICAgaGFzIGJlZW4gdHJhbnNmZXJlZC4gT25seSBhIHJlc2V0IHNlZW1zIHRvIHNvbHZlIHRoaXMKKwkgKiAgICAgaGFzIHJlY2VpdmVkIG5icGFja2V0cz5UU19ETUFfUEFDS0VUUyBwYWNrZXRzLCBidXQgbm8gcGFja2V0CisJICogICAgIGhhcyBiZWVuIHRyYW5zZmVycmVkLiBPbmx5IGEgcmVzZXQgc2VlbXMgdG8gc29sdmUgdGhpcwogCSAqLwogCWlmICgobmJwYWNrZXRzID09IDApIHx8IChuYnBhY2tldHMgPiBUU19ETUFfUEFDS0VUUykpIHsKIAkJdW5zaWduZWQgaW50IGkgPSAwOwpAQCAtMzMyLDcgKzMzMiw3IEBACiAJc3RydWN0IHBsdXRvICpwbHV0byA9IGRldl9pZDsKIAl1MzIgdHNjcjsKIAotCS8qIGNoZWNrIHdoZXRoZXIgYW4gaW50ZXJydXB0IG9jY3VyZWQgb24gdGhpcyBkZXZpY2UgKi8KKwkvKiBjaGVjayB3aGV0aGVyIGFuIGludGVycnVwdCBvY2N1cnJlZCBvbiB0aGlzIGRldmljZSAqLwogCXRzY3IgPSBwbHV0b19yZWFkcmVnKHBsdXRvLCBSRUdfVFNDUik7CiAJaWYgKCEodHNjciAmIChUU0NSX0RFIHwgVFNDUl9PVlIpKSkKIAkJcmV0dXJuIElSUV9OT05FOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNkdmIuYwppbmRleCBiODBkMDliLi4zN2M1OTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNkdmIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNkdmIuYwpAQCAtNjUwLDcgKzY1MCw3IEBACiAJCWlmIChzdGF0dXMgJiBGRV9IQVNfTE9DSykKIAkJCXJldHVybiByZXQ7CiAKLQkJLyogcHJldmlvdXMgdHVuZSBkaWRudCBsb2NrIC0gZW5hYmxlIExOQSBhbmQgdHVuZSBhZ2FpbiAqLworCQkvKiBwcmV2aW91cyB0dW5lIGRpZG4ndCBsb2NrIC0gZW5hYmxlIExOQSBhbmQgdHVuZSBhZ2FpbiAqLwogCQlzbXNfYm9hcmRfbG5hX2NvbnRyb2woY2xpZW50LT5jb3JlZGV2LCAxKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKaW5kZXggZmMwYTYwZi4uM2QyMDcxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKQEAgLTIzMzIsNyArMjMzMiw3IEBACiAgKiBpbmNyZW1lbnQuIFRoYXQncyBob3cgdGhlIDcxNDYgaXMgcHJvZ3JhbW1lZCB0byBkbyBldmVudAogICogY291bnRpbmcgaW4gdGhpcyBidWRnZXQtcGF0Y2guYwogICogSSAqdGhpbmsqIEhQUyBzZXR0aW5nIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgcGhhc2UKLSAqIG9mIEhTIGJ1dCBJIGNhbnQgYmUgMTAwJSBzdXJlIGluIHRoYXQuCisgKiBvZiBIUyBidXQgSSBjYW4ndCBiZSAxMDAlIHN1cmUgaW4gdGhhdC4KICAqCiAgKiBoYXJkd2FyZSBkZWJ1ZyBub3RlOiBhIHdvcmtpbmcgYnVkZ2V0IGNhcmQgKGluY2x1ZGluZyBidWRnZXQgcGF0Y2gpCiAgKiB3aXRoIHZwZWlycSgpIGludGVycnVwdCBzZXR1cCBpbiBtb2RlICIweDkwIiAoZXZlcnkgNjRLKSB3aWxsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtcGF0Y2guYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1wYXRjaC5jCmluZGV4IDU3OTgzNTUuLjMzOTVkMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1wYXRjaC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1wYXRjaC5jCkBAIC01MzksNyArNTM5LDcgQEAKICoqICAgICAgaW5jcmVtZW50LiBUaGF0J3MgaG93IHRoZSA3MTQ2IGlzIHByb2dyYW1tZWQgdG8gZG8gZXZlbnQKICoqICAgICAgY291bnRpbmcgaW4gdGhpcyBidWRnZXQtcGF0Y2guYwogKiogICAgICBJICp0aGluayogSFBTIHNldHRpbmcgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBwaGFzZQotKiogICAgICBvZiBIUyBidXQgSSBjYW50IGJlIDEwMCUgc3VyZSBpbiB0aGF0LgorKiogICAgICBvZiBIUyBidXQgSSBjYW4ndCBiZSAxMDAlIHN1cmUgaW4gdGhhdC4KIAogKiogICAgICBoYXJkd2FyZSBkZWJ1ZyBub3RlOiBhIHdvcmtpbmcgYnVkZ2V0IGNhcmQgKGluY2x1ZGluZyBidWRnZXQgcGF0Y2gpCiAqKiAgICAgIHdpdGggdnBlaXJxKCkgaW50ZXJydXB0IHNldHVwIGluIG1vZGUgIjB4OTAiIChldmVyeSA2NEspIHdpbGwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWRlYy90dHVzYl9kZWMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWRlYy90dHVzYl9kZWMuYwppbmRleCBmZTFiODAzLi5mODkzYmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1kZWMvdHR1c2JfZGVjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL3R0dXNiX2RlYy5jCkBAIC0yMzQsNyArMjM0LDcgQEAKIAkJICogKHdpdGggYnVmZmVyWzNdID09IDB4NDApIGluIGFuIGludGVydmFsbCBvZiB+MTAwbXMuCiAJCSAqIEJ1dCB0byBoYW5kbGUgdGhpcyBjb3JyZWN0bHkgd2UgaGFkIHRvIGltbGVtZW5lbnQgc29tZQogCQkgKiBraW5kIG9mIHRpbWVyIHdoaWNoIHNpZ25hbHMgYSAna2V5IHVwJyBldmVudCBpZiBubwotCQkgKiBrZXlyZXBlYXQgc2lnbmFsIGlzIHJlY2lldmVkIGZvciBsZXRzIHNheSAyMDBtcy4KKwkJICoga2V5cmVwZWF0IHNpZ25hbCBpcyByZWNlaXZlZCBmb3IgbGV0cyBzYXkgMjAwbXMuCiAJCSAqIHRoaXMgc2hvdWxkL2NvdWxkIGJlIGFkZGVkIGxhdGVyIC4uLgogCQkgKiBmb3Igbm93IGxldHMgcmVwb3J0IGVhY2ggc2lnbmFsIGFzIGEga2V5IGRvd24gYW5kIHVwKi8KIAkJZHByaW50aygiJXM6cmMgc2lnbmFsOiVkXG4iLCBfX2Z1bmNfXywgYnVmZmVyWzRdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvbWVkaWEtZW50aXR5LmMgYi9kcml2ZXJzL21lZGlhL21lZGlhLWVudGl0eS5jCmluZGV4IDIzNjQwZWQuLjA1NjEzOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvbWVkaWEtZW50aXR5LmMKKysrIGIvZHJpdmVycy9tZWRpYS9tZWRpYS1lbnRpdHkuYwpAQCAtMzc4LDcgKzM3OCw2IEBACiAKIHN0YXRpYyBpbnQgX19tZWRpYV9lbnRpdHlfc2V0dXBfbGlua19ub3RpZnkoc3RydWN0IG1lZGlhX2xpbmsgKmxpbmssIHUzMiBmbGFncykKIHsKLQljb25zdCB1MzIgbWFzayA9IE1FRElBX0xOS19GTF9FTkFCTEVEOwogCWludCByZXQ7CiAKIAkvKiBOb3RpZnkgYm90aCBlbnRpdGllcy4gKi8KQEAgLTM5NSw3ICszOTQsNyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWxpbmstPmZsYWdzID0gKGxpbmstPmZsYWdzICYgfm1hc2spIHwgKGZsYWdzICYgbWFzayk7CisJbGluay0+ZmxhZ3MgPSBmbGFnczsKIAlsaW5rLT5yZXZlcnNlLT5mbGFncyA9IGxpbmstPmZsYWdzOwogCiAJcmV0dXJuIDA7CkBAIC00MTcsNiArNDE2LDcgQEAKICAqLwogaW50IF9fbWVkaWFfZW50aXR5X3NldHVwX2xpbmsoc3RydWN0IG1lZGlhX2xpbmsgKmxpbmssIHUzMiBmbGFncykKIHsKKwljb25zdCB1MzIgbWFzayA9IE1FRElBX0xOS19GTF9FTkFCTEVEOwogCXN0cnVjdCBtZWRpYV9kZXZpY2UgKm1kZXY7CiAJc3RydWN0IG1lZGlhX2VudGl0eSAqc291cmNlLCAqc2luazsKIAlpbnQgcmV0ID0gLUVCVVNZOwpAQCAtNDI0LDYgKzQyNCwxMCBAQAogCWlmIChsaW5rID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCisJLyogVGhlIG5vbi1tb2RpZmlhYmxlIGxpbmsgZmxhZ3MgbXVzdCBub3QgYmUgbW9kaWZpZWQuICovCisJaWYgKChsaW5rLT5mbGFncyAmIH5tYXNrKSAhPSAoZmxhZ3MgJiB+bWFzaykpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKGxpbmstPmZsYWdzICYgTUVESUFfTE5LX0ZMX0lNTVVUQUJMRSkKIAkJcmV0dXJuIGxpbmstPmZsYWdzID09IGZsYWdzID8gMCA6IC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbXI4MDAuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbXI4MDAuYwppbmRleCBlNmIyZDA4Li5iM2E2MzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1yODAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tcjgwMC5jCkBAIC05OSw3ICs5OSw3IEBACiAKIC8qCiAgKiBDb21tYW5kcyB0aGF0IGRldmljZSBzaG91bGQgdW5kZXJzdGFuZAotICogTGlzdCBpc250IGZ1bGwgYW5kIHdpbGwgYmUgdXBkYXRlZCB3aXRoIGltcGxlbWVudGF0aW9uIG9mIG5ldyBmdW5jdGlvbnMKKyAqIExpc3QgaXNuJ3QgZnVsbCBhbmQgd2lsbCBiZSB1cGRhdGVkIHdpdGggaW1wbGVtZW50YXRpb24gb2YgbmV3IGZ1bmN0aW9ucwogICovCiAjZGVmaW5lIEFNUkFESU9fU0VUX0ZSRVEJMHhhNAogI2RlZmluZSBBTVJBRElPX1NFVF9NVVRFCTB4YWIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtcjIuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtcjIuYwppbmRleCBkYzNmMDRjLi44N2JhZDc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbXIyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jCkBAIC0xNzAsNyArMTcwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogISEhIG5vdCB0ZXN0ZWQsIGluIG15IGNhcmQgdGhpcyBkb2VzJ3Qgd29yayAhISEgKi8KKy8qICEhISBub3QgdGVzdGVkLCBpbiBteSBjYXJkIHRoaXMgZG9lc24ndCB3b3JrICEhISAqLwogc3RhdGljIGludCBmbXIyX3NldHZvbHVtZShzdHJ1Y3QgZm1yMiAqZGV2KQogewogCWludCB2b2xbMTZdID0geyAweDAyMSwgMHgwODQsIDB4MDkwLCAweDEwNCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2FhNzcwNmguYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2FhNzcwNmguYwppbmRleCA1ODU2ODBmLi5iMTE5M2RmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NhYTc3MDZoLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9zYWE3NzA2aC5jCkBAIC0zNzYsNyArMzc2LDcgQEAKIAl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHglMDJ4ICglcylcbiIsCiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAotCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNhYTc3MDZoX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzcwNmhfc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3RhdGUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJc2QgPSAmc3RhdGUtPnNkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MTMtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcxMy1pMmMuYwppbmRleCAwZmFiNmY4Li5kZWNhMmUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcxMy1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcxMy1pMmMuYwpAQCAtNDgxLDcgKzQ4MSw3IEBACiB9CiAKIC8qCi0gKiBzaTQ3MTNfd2FpdF9zdGMgLSBXYWl0cyBTVEMgaW50ZXJydXB0IGFuZCBjbGVhcnMgc3RhdHVzIGJpdHMuIFVzZWZ1bGwKKyAqIHNpNDcxM193YWl0X3N0YyAtIFdhaXRzIFNUQyBpbnRlcnJ1cHQgYW5kIGNsZWFycyBzdGF0dXMgYml0cy4gVXNlZnVsCiAgKgkJICAgICBmb3IgVFhfVFVORV9QT1dFUiwgVFhfVFVORV9GUkVRIGFuZCBUWF9UVU5FX01FQVMKICAqIEBzZGV2OiBzaTQ3MTNfZGV2aWNlIHN0cnVjdHVyZSBmb3IgdGhlIGRldmljZSB3ZSBhcmUgY29tbXVuaWNhdGluZwogICogQHVzZWNzOiB0aW1lb3V0IHRvIHdhaXQgZm9yIFNUQyBpbnRlcnJ1cHQgc2lnbmFsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3RlZjY4NjIuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vdGVmNjg2Mi5jCmluZGV4IDdjMGQ3NzcuLjA5OTFlMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vdGVmNjg2Mi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vdGVmNjg2Mi5jCkBAIC0xNzYsNyArMTc2LDcgQEAKIAl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHglMDJ4ICglcylcbiIsCiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAotCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHRlZjY4NjJfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0ZWY2ODYyX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHN0YXRlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCXN0YXRlLT5mcmVxID0gVEVGNjg2Ml9MT19GUkVROwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby93bDEyOHgvZm1kcnZfY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3dsMTI4eC9mbWRydl9jb21tb24uYwppbmRleCBlY2ZkOWZiLi41OTkxYWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3dsMTI4eC9mbWRydl9jb21tb24uYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3dsMTI4eC9mbWRydl9jb21tb24uYwpAQCAtMzUyLDcgKzM1Miw3IEBACiAJaWYgKCFhdG9taWNfcmVhZCgmZm1kZXYtPnR4X2NudCkpCiAJCXJldHVybjsKIAotCS8qIENoZWNrLCBpcyB0aGVyZSBhbnkgdGltZW91dCBoYXBwZW5uZWQgdG8gbGFzdCB0cmFuc21pdHRlZCBwYWNrZXQgKi8KKwkvKiBDaGVjaywgaXMgdGhlcmUgYW55IHRpbWVvdXQgaGFwcGVuZWQgdG8gbGFzdCB0cmFuc21pdHRlZCBwYWNrZXQgKi8KIAlpZiAoKGppZmZpZXMgLSBmbWRldi0+bGFzdF90eF9qaWZmaWVzKSA+IEZNX0RSVl9UWF9USU1FT1VUKSB7CiAJCWZtZXJyKCJUWCB0aW1lb3V0IG9jY3VycmVkXG4iKTsKIAkJYXRvbWljX3NldCgmZm1kZXYtPnR4X2NudCwgMSk7CkBAIC00NzgsNyArNDc4LDcgQEAKIAkJcmV0dXJuIC1FVElNRURPVVQ7CiAJfQogCWlmICghZm1kZXYtPnJlc3Bfc2tiKSB7Ci0JCWZtZXJyKCJSZXBvbnNlIFNLQiBpcyBtaXNzaW5nXG4iKTsKKwkJZm1lcnIoIlJlc3BvbnNlIFNLQiBpcyBtaXNzaW5nXG4iKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCXNwaW5fbG9ja19pcnFzYXZlKCZmbWRldi0+cmVzcF9za2JfbG9jaywgZmxhZ3MpOwpAQCAtMTU5OCw3ICsxNTk4LDcgQEAKIAkJZm1kYmcoIkZNIENvcmUgaXMgYWxyZWFkeSBkb3duXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCS8qIFNldmljZSBwZW5kaW5nIHJlYWQgKi8KKwkvKiBTZXJ2aWNlIHBlbmRpbmcgcmVhZCAqLwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZm1kZXYtPnJ4LnJkcy5yZWFkX3F1ZXVlKTsKIAogCXRhc2tsZXRfa2lsbCgmZm1kZXYtPnR4X3Rhc2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby93bDEyOHgvZm1kcnZfY29tbW9uLmggYi9kcml2ZXJzL21lZGlhL3JhZGlvL3dsMTI4eC9mbWRydl9jb21tb24uaAppbmRleCA0MjdjNDE2Li5hZWUyNDNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3dsMTI4eC9mbWRydl9jb21tb24uaAorKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3dsMTI4eC9mbWRydl9jb21tb24uaApAQCAtMzYyLDcgKzM2Miw3IEBACiAjZGVmaW5lIEZNX1RYX1BSRUVNUEhfNTBVUwkJMAogI2RlZmluZSBGTV9UWF9QUkVFTVBIXzc1VVMJCTIKIAotLyogRk0gVFggYW50ZW5uYSBpbXBlZGVuY2UgdmFsdWVzICovCisvKiBGTSBUWCBhbnRlbm5hIGltcGVkYW5jZSB2YWx1ZXMgKi8KICNkZWZpbmUgRk1fVFhfQU5UX0lNUF81MAkJMAogI2RlZmluZSBGTV9UWF9BTlRfSU1QXzIwMAkJMQogI2RlZmluZSBGTV9UWF9BTlRfSU1QXzUwMAkJMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9lbmVfaXIuYyBiL2RyaXZlcnMvbWVkaWEvcmMvZW5lX2lyLmMKaW5kZXggMWFjNDkxMy4uYTQzZWQ2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9lbmVfaXIuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL2VuZV9pci5jCkBAIC01MjAsNyArNTIwLDcgQEAKIAlkZXYtPnJ4X2VuYWJsZWQgPSBmYWxzZTsKIH0KIAotLyogVGhpcyByZXNldHMgdGhlIHJlY2VpdmVyLiBVc2VmdWxsIHRvIHN0b3Agc3RyZWFtIG9mIHNwYWNlcyBhdCBlbmQgb2YKKy8qIFRoaXMgcmVzZXRzIHRoZSByZWNlaXZlci4gVXNlZnVsIHRvIHN0b3Agc3RyZWFtIG9mIHNwYWNlcyBhdCBlbmQgb2YKICAqIHRyYW5zbWlzc2lvbgogICovCiBzdGF0aWMgdm9pZCBlbmVfcnhfcmVzZXQoc3RydWN0IGVuZV9kZXZpY2UgKmRldikKQEAgLTEwODksNyArMTA4OSw3IEBACiAJaWYgKGVycm9yIDwgMCkKIAkJZ290byBlcnJvcjsKIAotCWVuZV9ub3RpY2UoImRyaXZlciBoYXMgYmVlbiBzdWNjZXNmdWxseSBsb2FkZWQiKTsKKwllbmVfbm90aWNlKCJkcml2ZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGxvYWRlZCIpOwogCXJldHVybiAwOwogZXJyb3I6CiAJaWYgKGRldiAmJiBkZXYtPmlycSA+PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9pbW9uLmMgYi9kcml2ZXJzL21lZGlhL3JjL2ltb24uYwppbmRleCBmNzE0ZTFhLi44ZmMwZjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL2ltb24uYworKysgYi9kcml2ZXJzL21lZGlhL3JjL2ltb24uYwpAQCAtNDYsNyArNDYsNyBAQAogI2RlZmluZSBNT0RfQVVUSE9SCSJKYXJvZCBXaWxzb24gPGphcm9kQHdpbHNvbmV0LmNvbT4iCiAjZGVmaW5lIE1PRF9ERVNDCSJEcml2ZXIgZm9yIFNvdW5kR3JhcGggaU1PTiBNdWx0aU1lZGlhIElSL0Rpc3BsYXkiCiAjZGVmaW5lIE1PRF9OQU1FCSJpbW9uIgotI2RlZmluZSBNT0RfVkVSU0lPTgkiMC45LjIiCisjZGVmaW5lIE1PRF9WRVJTSU9OCSIwLjkuMyIKIAogI2RlZmluZSBESVNQTEFZX01JTk9SX0JBU0UJMTQ0CiAjZGVmaW5lIERFVklDRV9OQU1FCSJsY2QlZCIKQEAgLTQ2MCw4ICs0NjAsOSBAQAogfQogCiAvKioKLSAqIFNlbmRzIGEgcGFja2V0IHRvIHRoZSBkZXZpY2UgLS0gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZAotICogd2l0aCBpY3R4LT5sb2NrIGhlbGQuCisgKiBTZW5kcyBhIHBhY2tldCB0byB0aGUgZGV2aWNlIC0tIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aAorICogaWN0eC0+bG9jayBoZWxkLCBvciBpdHMgdW5sb2NrL2xvY2sgc2VxdWVuY2Ugd2hpbGUgd2FpdGluZyBmb3IgdHgKKyAqIHRvIGNvbXBsZXRlIGNhbi93aWxsIGxlYWQgdG8gYSBkZWFkbG9jay4KICAqLwogc3RhdGljIGludCBzZW5kX3BhY2tldChzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4KQogewpAQCAtOTkxLDEyICs5OTIsMjEgQEAKICAqIHRoZSBpTU9OIHJlbW90ZXMsIGFuZCB0aG9zZSB1c2VkIGJ5IHRoZSBXaW5kb3dzIE1DRSByZW1vdGVzICh3aGljaCBpcwogICogcmVhbGx5IGp1c3QgUkMtNiksIGJ1dCBvbmx5IG9uZSBvciB0aGUgb3RoZXIgYXQgYSB0aW1lLCBhcyB0aGUgc2lnbmFscwogICogYXJlIGRlY29kZWQgb25ib2FyZCB0aGUgcmVjZWl2ZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCB0d28gZGlmZmVyZW50IHdheXMsIG9uZSB3YXkgaXMgZnJvbQorICogcmNfcmVnaXN0ZXJfZGV2aWNlLCBmb3IgaW5pdGlhbCBwcm90b2NvbCBzZWxlY3Rpb24vc2V0dXAsIGFuZCB0aGUgb3RoZXIgaXMKKyAqIHZpYSBhIHVzZXJzcGFjZS1pbml0aWF0ZWQgcHJvdG9jb2wgY2hhbmdlIHJlcXVlc3QsIGVpdGhlciBieSBkaXJlY3Qgc3lzZnMKKyAqIHByb2RkaW5nIG9yIGJ5IHNvbWV0aGluZyBsaWtlIGlyLWtleXRhYmxlLiBJbiB0aGUgcmNfcmVnaXN0ZXJfZGV2aWNlIGNhc2UsCisgKiB0aGUgaW1vbiBjb250ZXh0IGxvY2sgaXMgYWxyZWFkeSBoZWxkLCBidXQgd2hlbiBpbml0aWF0ZWQgZnJvbSB1c2Vyc3BhY2UsCisgKiBpdCBpcyBub3QsIHNvIHdlIG11c3QgYWNxdWlyZSBpdCBwcmlvciB0byBjYWxsaW5nIHNlbmRfcGFja2V0LCB3aGljaAorICogcmVxdWlyZXMgdGhhdCB0aGUgbG9jayBpcyBoZWxkLgogICovCiBzdGF0aWMgaW50IGltb25faXJfY2hhbmdlX3Byb3RvY29sKHN0cnVjdCByY19kZXYgKnJjLCB1NjQgcmNfdHlwZSkKIHsKIAlpbnQgcmV0dmFsOwogCXN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHggPSByYy0+cHJpdjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY3R4LT5kZXY7CisJYm9vbCB1bmxvY2sgPSBmYWxzZTsKIAl1bnNpZ25lZCBjaGFyIGlyX3Byb3RvX3BhY2tldFtdID0gewogCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg2IH07CiAKQEAgLTEwMjksNiArMTAzOSwxMSBAQAogCiAJbWVtY3B5KGljdHgtPnVzYl90eF9idWYsICZpcl9wcm90b19wYWNrZXQsIHNpemVvZihpcl9wcm90b19wYWNrZXQpKTsKIAorCWlmICghbXV0ZXhfaXNfbG9ja2VkKCZpY3R4LT5sb2NrKSkgeworCQl1bmxvY2sgPSB0cnVlOworCQltdXRleF9sb2NrKCZpY3R4LT5sb2NrKTsKKwl9CisKIAlyZXR2YWwgPSBzZW5kX3BhY2tldChpY3R4KTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIG91dDsKQEAgLTEwMzcsNiArMTA1Miw5IEBACiAJaWN0eC0+cGFkX21vdXNlID0gZmFsc2U7CiAKIG91dDoKKwlpZiAodW5sb2NrKQorCQltdXRleF91bmxvY2soJmljdHgtPmxvY2spOworCiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTI5Myw3ICsxMzExLDcgQEAKIAkgKiBjb250YWluIGEgcG9zaXRpb24gY29vcmRpbmF0ZSAoeCx5KSwgd2l0aCBlYWNoIGNvbXBvbmVudCByYW5naW5nCiAJICogZnJvbSAtMTQgdG8gMTQuIFdlIHdhbnQgdG8gZG93bi1zYW1wbGUgdGhpcyB0byBvbmx5IDQgZGlzY3JldGUgdmFsdWVzCiAJICogZm9yIHVwL2Rvd24vbGVmdC9yaWdodCBhcnJvdyBrZXlzLiBBbHNvLCB3aGVuIHlvdSBnZXQgdG9vIGNsb3NlIHRvCi0JICogZGlhZ29uYWxzLCBpdCBoYXMgYSB0ZW5kYW5jeSB0byBqdW1wIGJhY2sgYW5kIGZvcnRoLCBzbyBsZXRzIHRyeSB0bworCSAqIGRpYWdvbmFscywgaXQgaGFzIGEgdGVuZGVuY3kgdG8ganVtcCBiYWNrIGFuZCBmb3J0aCwgc28gbGV0cyB0cnkgdG8KIAkgKiBpZ25vcmUgd2hlbiB0aGV5IGdldCB0b28gY2xvc2UuCiAJICovCiAJaWYgKGljdHgtPnByb2R1Y3QgIT0gMHhmZmRjKSB7CkBAIC0yMTM0LDYgKzIxNTIsNyBAQAogCQlnb3RvIHJkZXZfc2V0dXBfZmFpbGVkOwogCX0KIAorCW11dGV4X3VubG9jaygmaWN0eC0+bG9jayk7CiAJcmV0dXJuIGljdHg7CiAKIHJkZXZfc2V0dXBfZmFpbGVkOgpAQCAtMjIwNSw2ICsyMjI0LDcgQEAKIAkJZ290byB1cmJfc3VibWl0X2ZhaWxlZDsKIAl9CiAKKwltdXRleF91bmxvY2soJmljdHgtPmxvY2spOwogCXJldHVybiBpY3R4OwogCiB1cmJfc3VibWl0X2ZhaWxlZDoKQEAgLTIyOTksNiArMjMxOSw4IEBACiAJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGljdHgpOwogCiAJaWYgKGlmbnVtID09IDApIHsKKwkJbXV0ZXhfbG9jaygmaWN0eC0+bG9jayk7CisKIAkJaWYgKHByb2R1Y3QgPT0gMHhmZmRjICYmIGljdHgtPnJmX2RldmljZSkgewogCQkJc3lzZnNfZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZpbnRlcmZhY2UtPmRldi5rb2JqLAogCQkJCQkJICAgICAgICZpbW9uX3JmX2F0dHJfZ3JvdXApOwpAQCAtMjMwOSwxMyArMjMzMSwxNCBAQAogCiAJCWlmIChpY3R4LT5kaXNwbGF5X3N1cHBvcnRlZCkKIAkJCWltb25faW5pdF9kaXNwbGF5KGljdHgsIGludGVyZmFjZSk7CisKKwkJbXV0ZXhfdW5sb2NrKCZpY3R4LT5sb2NrKTsKIAl9CiAKIAlkZXZfaW5mbyhkZXYsICJpTU9OIGRldmljZSAoJTA0eDolMDR4LCBpbnRmJWQpIG9uICIKIAkJICJ1c2I8JWQ6JWQ+IGluaXRpYWxpemVkXG4iLCB2ZW5kb3IsIHByb2R1Y3QsIGlmbnVtLAogCQkgdXNiZGV2LT5idXMtPmJ1c251bSwgdXNiZGV2LT5kZXZudW0pOwogCi0JbXV0ZXhfdW5sb2NrKCZpY3R4LT5sb2NrKTsKIAltdXRleF91bmxvY2soJmRyaXZlcl9sb2NrKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9pci1yYXcuYyBiL2RyaXZlcnMvbWVkaWEvcmMvaXItcmF3LmMKaW5kZXggMDFmMjU4YS4uMTFjMTlkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9pci1yYXcuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL2lyLXJhdy5jCkBAIC0xNTMsNyArMTUzLDcgQEAKICAqIEB0eXBlOgl0aGUgdHlwZSBvZiB0aGUgZXZlbnQgdGhhdCBoYXMgb2NjdXJyZWQKICAqCiAgKiBUaGlzIHJvdXRpbmUgKHdoaWNoIG1heSBiZSBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgY29udGV4dCkgd29ya3MKLSAqIGluIHNpbWlsaWFyIG1hbm5lciB0byBpcl9yYXdfZXZlbnRfc3RvcmVfZWRnZS4KKyAqIGluIHNpbWlsYXIgbWFubmVyIHRvIGlyX3Jhd19ldmVudF9zdG9yZV9lZGdlLgogICogVGhpcyByb3V0aW5lIGlzIGludGVuZGVkIGZvciBkZXZpY2VzIHdpdGggbGltaXRlZCBpbnRlcm5hbCBidWZmZXIKICAqIEl0IGF1dG9tZXJnZXMgc2FtcGxlcyBvZiBzYW1lIHR5cGUsIGFuZCBoYW5kbGVzIHRpbWVvdXRzCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvaXRlLWNpci5jIGIvZHJpdmVycy9tZWRpYS9yYy9pdGUtY2lyLmMKaW5kZXggYWNjYWY2Yy4uNDM5MDhhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9pdGUtY2lyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9pdGUtY2lyLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1sbWUyNTEwLmMgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtbG1lMjUxMC5jCmluZGV4IDNjMTkxMzkuLmFmYWUxNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1sbWUyNTEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLWxtZTI1MTAuYwpAQCAtNTUsNyArNTUsNyBAQAogCXsgMHhmZjQwZmIwNCwgS0VZX01FRElBX1JFUEVBVH0sIC8qIFJlY2FsbCAqLwogCXsgMHhmZjQwZTUxYSwgS0VZX1BBVVNFIH0sIC8qIFRpbWVzaGlmdCAqLwogCXsgMHhmZjQwZmQwMiwgS0VZX1ZPTFVNRVVQIH0sIC8qIDIgeCAtLysgS2V5cyBub3QgbWFya2VkICovCi0JeyAweGZmNDBmOTA2LCBLRVlfVk9MVU1FRE9XTiB9LCAvKiBWb2x1bW5lIGRlZmluZWQgYXMgcmlnaHQgaGFuZCovCisJeyAweGZmNDBmOTA2LCBLRVlfVk9MVU1FRE9XTiB9LCAvKiBWb2x1bWUgZGVmaW5lZCBhcyByaWdodCBoYW5kKi8KIAl7IDB4ZmY0MGZlMDEsIEtFWV9DSEFOTkVMVVAgfSwKIAl7IDB4ZmY0MGZhMDUsIEtFWV9DSEFOTkVMRE9XTiB9LAogCXsgMHhmZjQwZWIxNCwgS0VZX1pPT00gfSwKQEAgLTc2LDcgKzc2LDcgQEAKIAl7IDB4ZmYwMGJiNDQsIEtFWV9NRURJQV9SRVBFQVR9LCAvKiBSZWNhbGwgKi8KIAl7IDB4ZmYwMGI1NGEsIEtFWV9QQVVTRSB9LCAvKiBUaW1lc2hpZnQgKi8KIAl7IDB4ZmYwMGI4NDcsIEtFWV9WT0xVTUVVUCB9LCAvKiAyIHggLS8rIEtleXMgbm90IG1hcmtlZCAqLwotCXsgMHhmZjAwYmM0MywgS0VZX1ZPTFVNRURPV04gfSwgLyogVm9sdW1uZSBkZWZpbmVkIGFzIHJpZ2h0IGhhbmQqLworCXsgMHhmZjAwYmM0MywgS0VZX1ZPTFVNRURPV04gfSwgLyogVm9sdW1lIGRlZmluZWQgYXMgcmlnaHQgaGFuZCovCiAJeyAweGZmMDBiOTQ2LCBLRVlfQ0hBTk5FTFVQIH0sCiAJeyAweGZmMDBiZjQwLCBLRVlfQ0hBTk5FTERPV04gfSwKIAl7IDB4ZmYwMGY3MDgsIEtFWV9aT09NIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtbXNpLXR2YW55d2hlcmUuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1tc2ktdHZhbnl3aGVyZS5jCmluZGV4IDE4YjM3ZmEuLmZkZDIxM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1tc2ktdHZhbnl3aGVyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1tc2ktdHZhbnl3aGVyZS5jCkBAIC0yOSw3ICsyOSw3IEBACiAKIAl7IDB4MGMsIEtFWV9NVVRFIH0sCiAJeyAweDBmLCBLRVlfU0NSRUVOIH0sCQkvKiBGdWxsIFNjcmVlbiAqLwotCXsgMHgxMCwgS0VZX0ZOIH0sCQkvKiBGdW50aW9uICovCisJeyAweDEwLCBLRVlfRk4gfSwJCS8qIEZ1bmN0aW9uICovCiAJeyAweDExLCBLRVlfVElNRSB9LAkJLyogVGltZSBzaGlmdCAqLwogCXsgMHgxMiwgS0VZX1BPV0VSIH0sCiAJeyAweDEzLCBLRVlfTUVESUEgfSwJCS8qIE1UUyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLW5vcndvb2QuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1ub3J3b29kLmMKaW5kZXggZjFjMTI4MS4uZjlmMmZhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLW5vcndvb2QuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtbm9yd29vZC5jCkBAIC00OSw3ICs0OSw3IEBACiAJeyAweDM3LCBLRVlfUExBWSB9LAkJLyogUGxheSAgICAgICAgICAgICAgICAqLwogCXsgMHgzNiwgS0VZX1BBVVNFIH0sCQkvKiBQYXVzZSAgICAgICAgICAgICAgICovCiAJeyAweDJiLCBLRVlfU1RPUCB9LAkJLyogU3RvcCAgICAgICAgICAgICAgICAqLwotCXsgMHg2NywgS0VZX0ZBU1RGT1JXQVJEIH0sCS8qIEZvd2FyZCAgICAgICAgICAgICAgKi8KKwl7IDB4NjcsIEtFWV9GQVNURk9SV0FSRCB9LAkvKiBGb3J3YXJkICAgICAgICAgICAgICAqLwogCXsgMHg2NiwgS0VZX1JFV0lORCB9LAkJLyogUmV3aW5kICAgICAgICAgICAgICAqLwogCXsgMHgzZSwgS0VZX1NFQVJDSCB9LAkJLyogQXV0byBTY2FuICAgICAgICAgICAqLwogCXsgMHgyZSwgS0VZX0NBTUVSQSB9LAkJLyogQ2FwdHVyZSBWaWRlbyAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9tY2V1c2IuYyBiL2RyaXZlcnMvbWVkaWEvcmMvbWNldXNiLmMKaW5kZXggMDQ0ZmI3YS4uMGMyNzNlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9tY2V1c2IuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL21jZXVzYi5jCkBAIC0yMjAsNiArMjIwLDggQEAKIAl7IFVTQl9ERVZJQ0UoVkVORE9SX1BISUxJUFMsIDB4MjA2YykgfSwKIAkvKiBQaGlsaXBzL1NwaW5lbCBwbHVzIElSIHRyYW5zY2VpdmVyIGZvciBBU1VTICovCiAJeyBVU0JfREVWSUNFKFZFTkRPUl9QSElMSVBTLCAweDIwODgpIH0sCisJLyogUGhpbGlwcyBJUiB0cmFuc2NlaXZlciAoRGVsbCBicmFuZGVkKSAqLworCXsgVVNCX0RFVklDRShWRU5ET1JfUEhJTElQUywgMHgyMDkzKSB9LAogCS8qIFJlYWx0ZWsgTUNFIElSIFJlY2VpdmVyIGFuZCBjYXJkIHJlYWRlciAqLwogCXsgVVNCX0RFVklDRShWRU5ET1JfUkVBTFRFSywgMHgwMTYxKSwKIAkgIC5kcml2ZXJfaW5mbyA9IE1VTFRJRlVOQ1RJT04gfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvcmMtbWFpbi5jIGIvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMKaW5kZXggNWFjMWJhZi4uYTI3MDY2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMKQEAgLTI1NSw3ICsyNTUsNyBAQAogICogQHJjX21hcDoJc2NhbmNvZGUgdGFibGUgdG8gYmUgc2VhcmNoZWQKICAqIEBzY2FuY29kZToJdGhlIGRlc2lyZWQgc2NhbmNvZGUKICAqIEByZXNpemU6CWNvbnRyb2xzIHdoZXRoZXIgd2UgYWxsb3dlZCB0byByZXNpemUgdGhlIHRhYmxlIHRvCi0gKgkJYWNjb21vZGF0ZSBub3QgeWV0IHByZXNlbnQgc2NhbmNvZGVzCisgKgkJYWNjb21tb2RhdGUgbm90IHlldCBwcmVzZW50IHNjYW5jb2RlcwogICogQHJldHVybjoJaW5kZXggb2YgdGhlIG1hcHBpbmcgY29udGFpbmluZyBzY2FuY29kZSBpbiBxdWVzdGlvbgogICoJCW9yIC0xVSBpbiBjYXNlIG9mIGZhaWx1cmUuCiAgKgpAQCAtNzA3LDcgKzcwNyw4IEBACiB7CiAJc3RydWN0IHJjX2RldiAqcmRldiA9IGlucHV0X2dldF9kcnZkYXRhKGlkZXYpOwogCi0JcmRldi0+Y2xvc2UocmRldik7CisJIGlmIChyZGV2KQorCQlyZGV2LT5jbG9zZShyZGV2KTsKIH0KIAogLyogY2xhc3MgZm9yIC9zeXMvY2xhc3MvcmMgKi8KQEAgLTczMyw2ICs3MzQsNyBAQAogCXsgUkNfVFlQRV9TT05ZLAkJInNvbnkiCQl9LAogCXsgUkNfVFlQRV9SQzVfU1osCSJyYy01LXN6Igl9LAogCXsgUkNfVFlQRV9MSVJDLAkJImxpcmMiCQl9LAorCXsgUkNfVFlQRV9PVEhFUiwJIm90aGVyIgkJfSwKIH07CiAKICNkZWZpbmUgUFJPVE9fTk9ORQkibm9uZSIKQEAgLTEwMzcsNyArMTAzOSw3IEBACiAJCWdvdG8gb3V0X3RhYmxlOwogCiAJLyoKLQkgKiBEZWZhdWx0IGRlbGF5IG9mIDI1MG1zIGlzIHRvbyBzaG9ydCBmb3Igc29tZSBwcm90b2NvbHMsIGV4cGVjaWFsbHkKKwkgKiBEZWZhdWx0IGRlbGF5IG9mIDI1MG1zIGlzIHRvbyBzaG9ydCBmb3Igc29tZSBwcm90b2NvbHMsIGVzcGVjaWFsbHkKIAkgKiBzaW5jZSB0aGUgdGltZW91dCBpcyBjdXJyZW50bHkgc2V0IHRvIDI1MG1zLiBJbmNyZWFzZSBpdCB0byA1MDBtcywKIAkgKiB0byBhdm9pZCB3cm9uZyByZXBldGl0aW9uIG9mIHRoZSBrZXljb2Rlcy4gTm90ZSB0aGF0IHRoaXMgbXVzdCBiZQogCSAqIHNldCBhZnRlciB0aGUgY2FsbCB0byBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoKS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwppbmRleCA0NDk4Yjk0Li4wMGY1MWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCkBAIC04NzUsNyArODc1LDcgQEAKIGNvbmZpZyBWSURFT19NWDMKIAl0cmlzdGF0ZSAiaS5NWDN4IENhbWVyYSBTZW5zb3IgSW50ZXJmYWNlIGRyaXZlciIKIAlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBNWDNfSVBVICYmIFNPQ19DQU1FUkEKLQlzZWxlY3QgVklERU9CVUZfRE1BX0NPTlRJRworCXNlbGVjdCBWSURFT0JVRjJfRE1BX0NPTlRJRwogCXNlbGVjdCBNWDNfVklERU8KIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgdjRsMiBkcml2ZXIgZm9yIHRoZSBpLk1YM3ggQ2FtZXJhIFNlbnNvciBJbnRlcmZhY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LXZpZGVvLmMKaW5kZXggNmFkODNhMS4uYzAzZWIyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LXZpZGVvLmMKQEAgLTUwMiw3ICs1MDIsNyBAQAogCiAJLyogR2V0IHRoZSBuZXh0IGJ1ZmZlciAqLwogCSpidWYgPSBsaXN0X2VudHJ5KGRtYV9xLT5hY3RpdmUubmV4dCwgc3RydWN0IGF1MDgyOF9idWZmZXIsIHZiLnF1ZXVlKTsKLQkvKiBDbGVhbnMgdXAgYnVmZmVyIC0gVXNlZnVsbCBmb3IgdGVzdGluZyBmb3IgZnJhbWUvVVJCIGxvc3MgKi8KKwkvKiBDbGVhbnMgdXAgYnVmZmVyIC0gVXNlZnVsIGZvciB0ZXN0aW5nIGZvciBmcmFtZS9VUkIgbG9zcyAqLwogCW91dHAgPSB2aWRlb2J1Zl90b192bWFsbG9jKCYoKmJ1ZiktPnZiKTsKIAltZW1zZXQob3V0cCwgMHgwMCwgKCpidWYpLT52Yi5zaXplKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYwppbmRleCAyNDJmMGQ1Li4zYzllNmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYwpAQCAtMjI0NCw4ICsyMjQ0LDggQEAKIAl9LAogCVtCVFRWX0JPQVJEX1BJQ09MT19URVRSQV9DSElQXSA9IHsKIAkJLypFcmljIERFQklFRiA8ZGViaWVmQHRlbGVtc2EuY29tPiovCi0JCS8qRVVSRVNZUyBQaWNvbG8gVGV0cmEgOiA0IENvbmV4YW50IEZ1c2lvbiA4NzhBLCBubyBhdWRpbywgdmlkZW8gaW5wdXQgc2V0IHdpdGggYW5hbG9nIG11bHRpcGxleGVycyBHUElPIGNvbnRyb2xlZCovCi0JCS8qIGFkZHMgcGljb2xvX3RldHJhX211eHNlbCgpLCBwaWNvbG9fdGV0cmFfaW5pdCgpLCB0aGUgZm9sb3dpbmcgZGVjbGFyYXRpb24gc3RydWN1cmUsIGFuZCAjZGVmaW5lIEJUVFZfQk9BUkRfUElDT0xPX1RFVFJBX0NISVAqLworCQkvKkVVUkVTWVMgUGljb2xvIFRldHJhIDogNCBDb25leGFudCBGdXNpb24gODc4QSwgbm8gYXVkaW8sIHZpZGVvIGlucHV0IHNldCB3aXRoIGFuYWxvZyBtdWx0aXBsZXhlcnMgR1BJTyBjb250cm9sbGVkKi8KKwkJLyogYWRkcyBwaWNvbG9fdGV0cmFfbXV4c2VsKCksIHBpY29sb190ZXRyYV9pbml0KCksIHRoZSBmb2xsb3dpbmcgZGVjbGFyYXRpb24gc3RydWN1cmUsIGFuZCAjZGVmaW5lIEJUVFZfQk9BUkRfUElDT0xPX1RFVFJBX0NISVAqLwogCQkvKjB4NzkgaW4gYnR0di5oKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkV1cmVzeXMgUGljb2xvIFRldHJhIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKQEAgLTQ1NjcsNyArNDU2Nyw3IEBACiAgKiBhdCBvbmUgaW5wdXQgd2hpbGUgdGhlIG1vbml0b3IgaXMgbG9va2luZyBhdCBhbm90aGVyLgogICoKICAqIFNpbmNlIEkndmUgY291bGRuJ3QgYmUgYm90aGVyZWQgZmlndXJpbmcgb3V0IGhvdyB0byBhZGQgYW4KLSAqIGluZGVwZW5kYW50IG11eHNlbCBmb3IgdGhlIG1vbml0b3IgYnVzLCBJJ3ZlIGp1c3Qgc2V0IGl0IHRvCisgKiBpbmRlcGVuZGVudCBtdXhzZWwgZm9yIHRoZSBtb25pdG9yIGJ1cywgSSd2ZSBqdXN0IHNldCBpdCB0bwogICogd2hhdGV2ZXIgdGhlIGNhcmQgaXMgbG9va2luZyBhdC4KICAqCiAgKiAgT1VUMCBvZiB0aGUgVERBODU0MCdzIGlzIGNvbm5lY3RlZCB0byBNVVgwICAgICAgICAgKDB4MDMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZ3Bpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWdwaW8uYwppbmRleCBmZDYwNGQzLi4xM2NlNzJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZ3Bpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1ncGlvLmMKQEAgLTMsNyArMyw3IEBACiAgICAgYnR0di1ncGlvLmMgIC0tICBncGlvIHN1YiBkcml2ZXJzCiAKICAgICBzeXNmcy1iYXNlZCBzdWIgZHJpdmVyIGludGVyZmFjZSBmb3IgYnR0dgotICAgIG1haW5seSBpbnRlbnRlZCBmb3IgZ3BpbyBhY2Nlc3MKKyAgICBtYWlubHkgaW50ZW5kZWQgZm9yIGdwaW8gYWNjZXNzCiAKIAogICAgIENvcHlyaWdodCAoQykgMTk5Niw5Nyw5OCBSYWxwaCAgTWV0emxlciAocmprbUB0aHAudW5pLWtvZWxuLmRlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKaW5kZXggNTVmZmQ2MC4uNjY0NzAzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCkBAIC0zODMsNyArMzgzLDcgQEAKIAkgKiBjYXVzZXMgdGhlIGRldmljZSB0byBkaWUuCiAJICogVXNlIGEgYnVzeS13YWl0IGJlY2F1c2Ugd2Ugb2Z0ZW4gc2VuZCBhIGxhcmdlIHF1YW50aXR5IG9mIHNtYWxsCiAJICogY29tbWFuZHMgYXQtb25jZTsgdXNpbmcgbXNsZWVwKCkgd291bGQgY2F1c2UgYSBsb3Qgb2YgY29udGV4dAotCSAqIHN3aXRjaGVzIHdoaWNoIHRha2UgbG9uZ2VyIHRoYW4gMm1zLCByZXN1bHRpbmcgaW4gYSBub3RpY2FibGUKKwkgKiBzd2l0Y2hlcyB3aGljaCB0YWtlIGxvbmdlciB0aGFuIDJtcywgcmVzdWx0aW5nIGluIGEgbm90aWNlYWJsZQogCSAqIGJvb3QtdGltZSBhbmQgY2FwdHVyZS1zdGFydCBkZWxheXMuCiAJICovCiAJbWRlbGF5KDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtY29yZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtY29yZS5oCmluZGV4IDE4OGM5YzMuLmU5YzY5ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1jb3JlLmgKQEAgLTEwOSw3ICsxMDksNyBAQAogCWludCBpc19pbml0aWFsaXplZDsKIAogCS8qCi0JICogVGhlIFZCSSBzbGljZXIgc3RhcnRzIG9wZXJhdGluZyBhbmQgY291bnRpbmcgbGluZXMsIGJlZ2luaW5nIGF0CisJICogVGhlIFZCSSBzbGljZXIgc3RhcnRzIG9wZXJhdGluZyBhbmQgY291bnRpbmcgbGluZXMsIGJlZ2lubmluZyBhdAogCSAqIHNsaWNlciBsaW5lIGNvdW50IG9mIDEsIGF0IEQgbGluZXMgYWZ0ZXIgdGhlIGRlYXNzZXJ0aW9uIG9mIFZSRVNFVC4KIAkgKiBUaGlzIHN0YXJpbmcgZmllbGQgbGluZSwgUywgaXMgNiAoJiAzMTkpIG9yIDEwICgmIDI3MykgZm9yIDYyNSBvciA1MjUKIAkgKiBsaW5lIHN5c3RlbXMgcmVzcGVjdGl2ZWx5LiAgU2xpY2VkIGFuY2lsbGFyeSBkYXRhIGNhcHR1cmVkIG9uIFZCSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmMKaW5kZXggODZjMzBiOS4uNGYwNDFjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5jCkBAIC0zMTIsNyArMzEyLDcgQEAKIAogCS8qCiAJICogU2V0IHRoZSBkaWdpdGl6ZXIgcmVnaXN0ZXJzIGZvciByYXcgYWN0aXZlIFZCSS4KLQkgKiBOb3RlIGN4MThfYXZfdmJpX3dpcGVzIG91dCBhbG90IG9mIHRoZSBwYXNzZWQgaW4gZm10IHVuZGVyIHZhbGlkCisJICogTm90ZSBjeDE4X2F2X3ZiaV93aXBlcyBvdXQgYSBsb3Qgb2YgdGhlIHBhc3NlZCBpbiBmbXQgdW5kZXIgdmFsaWQKIAkgKiBjYWxsaW5nIGNvbmRpdGlvbnMKIAkgKi8KIAlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgdmJpLCBzX3Jhd19mbXQsICZmbXQtPmZtdC52YmkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jCmluZGV4IGM2ZTJjYTMuLjZmYmMzNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMKQEAgLTM1MCw5ICszNTAsMTcgQEAKIAogCQkvKiBObyBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCBidXQgY2FuIGhhdmUgYnVmZmVycyBhbGxvY2F0ZWQgKi8KIAkJaWYgKHR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYKSB7CisJCQkvKiBJZiB0aGUgbW9kdWxlIHBhcmFtcyBkaWRuJ3QgaW5oaWJpdCBJRFggLi4uICovCiAJCQlpZiAoY3gtPnN0cmVhbV9idWZmZXJzW3R5cGVdICE9IDApIHsKIAkJCQljeC0+c3RyZWFtX2J1ZmZlcnNbdHlwZV0gPSAwOwotCQkJCWN4MThfc3RyZWFtX2ZyZWUoJmN4LT5zdHJlYW1zW3R5cGVdKTsKKwkJCQkvKgorCQkJCSAqIEJlZm9yZSBjYWxsaW5nIGN4MThfc3RyZWFtX2ZyZWUoKSwKKwkJCQkgKiBjaGVjayBpZiB0aGUgSURYIHN0cmVhbSB3YXMgYWN0dWFsbHkgc2V0IHVwLgorCQkJCSAqIE5lZWRlZCwgc2luY2UgdGhlIGN4MThfcHJvYmUoKSBlcnJvciBwYXRoCisJCQkJICogZXhpdHMgdGhyb3VnaCBoZXJlIGFzIHdlbGwgYXMgbm9ybWFsIGNsZWFuIHVwCisJCQkJICovCisJCQkJaWYgKGN4LT5zdHJlYW1zW3R5cGVdLmJ1ZmZlcnMgIT0gMCkKKwkJCQkJY3gxOF9zdHJlYW1fZnJlZSgmY3gtPnN0cmVhbXNbdHlwZV0pOwogCQkJfQogCQkJY29udGludWU7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmJpLmMKaW5kZXggNTgyMjI3NS4uNmQzMTIxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmJpLmMKQEAgLTI5LDcgKzI5LDcgQEAKIC8qCiAgKiBSYXN0ZXIgUmVmZXJlbmNlL1Byb3RlY3Rpb24gKFJQKSBieXRlcywgdXNlZCBpbiBTdGFydC9FbmQgQWN0aXZlCiAgKiBWaWRlbyBjb2RlcyBlbWl0dGVkIGZyb20gdGhlIGRpZ2l0emVyIGluIFZJUCAxLnggbW9kZSwgdGhhdCBmbGFnIHRoZSBzdGFydAotICogb2YgVkJJIHNhbXBsZSBvciBWQkkgYW5jaWxsaWFyeSBkYXRhIHJlZ2lvbnMgaW4gdGhlIGRpZ2l0aWFsIHJhdHNlciBsaW5lLgorICogb2YgVkJJIHNhbXBsZSBvciBWQkkgYW5jaWxsYXJ5IGRhdGEgcmVnaW9ucyBpbiB0aGUgZGlnaXRpYWwgcmF0c2VyIGxpbmUuCiAgKgogICogVGFzayBGaWVsZEV2ZW4gVmVydGljYWxCbGFuayBIb3Jpem9udGFsQmxhbmsgMCAwIDAgMAogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1hdmNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWF2Y29yZS5jCmluZGV4IDYyODQzZDMuLjI4MGRmNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWF2Y29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWF2Y29yZS5jCkBAIC0yNTc3LDcgKzI1NzcsNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSA2OgkvKiB0czEgcGFyYWxsZWwgbW9kZSAqLwotCQkJY3gyMzF4eF9pbmZvKCIlczogc2V0IHRzMSBwYXJyYWxsZWwgbW9kZSByZWdpc3RlcnNcbiIsCisJCQljeDIzMXh4X2luZm8oIiVzOiBzZXQgdHMxIHBhcmFsbGVsIG1vZGUgcmVnaXN0ZXJzXG4iLAogCQkJCSAgICAgX19mdW5jX18pOwogCQkJc3RhdHVzID0gY3gyMzF4eF9tb2RlX3JlZ2lzdGVyKGRldiwgVFNfTU9ERV9SRUcsIDB4MTAwKTsKIAkJCXN0YXR1cyA9IGN4MjMxeHhfbW9kZV9yZWdpc3RlcihkZXYsIFRTMV9DRkdfUkVHLCAweDQwMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LXZiaS5jCmluZGV4IDFkOTE0NDguLjFjN2E0ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LXZiaS5jCkBAIC02MzEsNyArNjMxLDcgQEAKIAkvKiBHZXQgdGhlIG5leHQgYnVmZmVyICovCiAJKmJ1ZiA9IGxpc3RfZW50cnkoZG1hX3EtPmFjdGl2ZS5uZXh0LCBzdHJ1Y3QgY3gyMzF4eF9idWZmZXIsIHZiLnF1ZXVlKTsKIAotCS8qIENsZWFucyB1cCBidWZmZXIgLSBVc2VmdWxsIGZvciB0ZXN0aW5nIGZvciBmcmFtZS9VUkIgbG9zcyAqLworCS8qIENsZWFucyB1cCBidWZmZXIgLSBVc2VmdWwgZm9yIHRlc3RpbmcgZm9yIGZyYW1lL1VSQiBsb3NzICovCiAJb3V0cCA9IHZpZGVvYnVmX3RvX3ZtYWxsb2MoJigqYnVmKS0+dmIpOwogCW1lbXNldChvdXRwLCAwLCAoKmJ1ZiktPnZiLnNpemUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtdmlkZW8uYwppbmRleCBmZmQ1YWY5Li5hNjljMjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LXZpZGVvLmMKQEAgLTMwOSw3ICszMDksNyBAQAogCS8qIEdldCB0aGUgbmV4dCBidWZmZXIgKi8KIAkqYnVmID0gbGlzdF9lbnRyeShkbWFfcS0+YWN0aXZlLm5leHQsIHN0cnVjdCBjeDIzMXh4X2J1ZmZlciwgdmIucXVldWUpOwogCi0JLyogQ2xlYW5zIHVwIGJ1ZmZlciAtIFVzZWZ1bGwgZm9yIHRlc3RpbmcgZm9yIGZyYW1lL1VSQiBsb3NzICovCisJLyogQ2xlYW5zIHVwIGJ1ZmZlciAtIFVzZWZ1bCBmb3IgdGVzdGluZyBmb3IgZnJhbWUvVVJCIGxvc3MgKi8KIAlvdXRwID0gdmlkZW9idWZfdG9fdm1hbGxvYygmKCpidWYpLT52Yik7CiAJbWVtc2V0KG91dHAsIDAsICgqYnVmKS0+dmIuc2l6ZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L0tjb25maWcKaW5kZXggM2I2ZTdmMi4uY2FhYjFiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L0tjb25maWcKQEAgLTIyLDYgKzIyLDcgQEAKIAlzZWxlY3QgRFZCX0NYMjQxMTYgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1NUVjA5MDAgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0RTMzAwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWMDM2NyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIxMzEgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9YQzIwMjggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjkwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jaW1heDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jaW1heDIuYwppbmRleCAyMDliOTcxLi5jOWYxNWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY2ltYXgyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2NpbWF4Mi5jCkBAIC00NDksNyArNDQ5LDcgQEAKIAkJMHgwNCwgLyogYWNrIGFjdGl2ZSBsb3cgKi8KIAkJMHgwMCwgLyogTE9DSyA9IDAgKi8KIAkJMHgzMywgLyogc2VyaWFsIG1vZGUsIHJpc2luZyBpbiwgcmlzaW5nIG91dCwgTVNCIGZpcnN0Ki8KLQkJMHgzMSwgLyogc3luY3Jvbml6YXRpb24gKi8KKwkJMHgzMSwgLyogc3luY2hyb25pemF0aW9uICovCiAJfTsKIAlpbnQgcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaAppbmRleCA4ZGIyNzk3Li5jMTg2NDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKQEAgLTIxNCw3ICsyMTQsNyBAQAogCiAJLyogVmVuZG9ycyBjYW4gYW5kIGRvIHJ1biB0aGUgUENJZSBicmlkZ2UgYXQgZGlmZmVyZW50CiAJICogY2xvY2sgcmF0ZXMsIGRyaXZlbiBwaHlzaWNhbGx5IGJ5IGNyeXN0YWxzIG9uIHRoZSBQQ0JzLgotCSAqIFRoZSBjb3JlIGhhcyB0byBhY2NvbW9kYXRlIHRoaXMuIFRoaXMgYWxsb3dzIHRoZSB1c2VyCisJICogVGhlIGNvcmUgaGFzIHRvIGFjY29tbW9kYXRlIHRoaXMuIFRoaXMgYWxsb3dzIHRoZSB1c2VyCiAJICogdG8gYWRkIG5ldyBib2FyZHMgd2l0aCBuZXcgZnJlcXVlbmN5cy4gVGhlIHZhbHVlIGlzCiAJICogZXhwcmVzc2VkIGluIEh6LgogCSAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKaW5kZXggMzU3OTZlMC4uYjdlZTJhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYwpAQCAtMiw3ICsyLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgVWxmIEVrbHVuZAogICoKLSAqIEJhc2VkIG9uIHRoZSBzYWE3MTE1IGRyaXZlciBhbmQgb24gdGhlIGZpcnN0IHZlcmlzb24gb2YgQ2hyaXMgS2VubmVkeSdzCisgKiBCYXNlZCBvbiB0aGUgc2FhNzExNSBkcml2ZXIgYW5kIG9uIHRoZSBmaXJzdCB2ZXJzaW9uIG9mIENocmlzIEtlbm5lZHkncwogICogY3gyNTg0MCBkcml2ZXIuCiAgKgogICogQ2hhbmdlcyBieSBUeWxlciBUcmFmZm9yZCA8dGF0cmFmZm9yZEBjb21jYXN0Lm5ldD4KQEAgLTQ0NSw3ICs0NDUsNyBAQAogCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDkxOCwgMHhhMCk7CiAJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4OTE5LCAweDAxKTsKIAotCS8qIHN0ZXJlbyBwcmVmZXJlZCAqLworCS8qIHN0ZXJlbyBwcmVmZXJyZWQgKi8KIAljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg4MDksIDB4MDQpOwogCS8qIEFDOTcgc2hpZnQgKi8KIAljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg4Y2YsIDB4MGYpOwpAQCAtNTQ2LDcgKzU0Niw3IEBACiAJICogQXV4IFBMTAogCSAqIEluaXRpYWwgc2V0dXAgZm9yIGF1ZGlvIHNhbXBsZSBjbG9jazoKIAkgKiA0OCBrc3BzLCAxNiBiaXRzL3NhbXBsZSwgeDE2MCBtdWx0aXBsaWVyID0gMTIyLjg4IE1IegotCSAqIEludGlhbCBJMlMgb3V0cHV0L21hc3RlciBjbG9jayg/KToKKwkgKiBJbml0aWFsIEkyUyBvdXRwdXQvbWFzdGVyIGNsb2NrKD8pOgogCSAqIDQ4IGtzcHMsIDE2IGJpdHMvc2FtcGxlLCB4MTYgbXVsdGlwbGllciA9IDEyLjI4OCBNSHoKIAkgKi8KIAlzd2l0Y2ggKHN0YXRlLT5pZCkgewpAQCAtOTAzLDcgKzkwMyw3IEBACiAJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9QQUwpIHsKIAkJLyogQXV0b2RldGVjdCBhdWRpbyBzdGFuZGFyZCBhbmQgYXVkaW8gc3lzdGVtICovCiAJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDgwOCwgMHhmZik7Ci0JCS8qIFNpbmNlIHN5c3RlbSBQQUwtTCBpcyBwcmV0dHkgbXVjaCBub24tZXhpc3RhbnQgYW5kCisJCS8qIFNpbmNlIHN5c3RlbSBQQUwtTCBpcyBwcmV0dHkgbXVjaCBub24tZXhpc3RlbnQgYW5kCiAJCSAgIG5vdCB1c2VkIGJ5IGFueSBwdWJsaWMgYnJvYWRjYXN0IG5ldHdvcmssIGZvcmNlCiAJCSAgIDYuNSBNSHogY2FycmllciB0byBiZSBpbnRlcnByZXRlZCBhcyBTeXN0ZW0gREssCiAJCSAgIHRoaXMgYXZvaWRzIERLIGF1ZGlvIGRldGVjdGlvbiBpbnN0YWJpbGl0eSAqLwpAQCAtMTg1MSw3ICsxODUxLDcgQEAKIAkJCXJldCA9IFY0TDJfSURFTlRfQ1gyMzg4NV9BVjsKIAkJfSBlbHNlIHsKIAkJCS8qIENYMjM4ODcgaGFzIGEgYnJva2VuIERJRiwgYnV0IHRoZSByZWdpc3RlcnMKLQkJCSAqIGFwcGVhciB2YWxpZCAoYnV0IHVuc2VkKSwgZ29vZCBlbm91Z2ggdG8gZGV0ZWN0LiAqLworCQkJICogYXBwZWFyIHZhbGlkIChidXQgdW51c2VkKSwgZ29vZCBlbm91Z2ggdG8gZGV0ZWN0LiAqLwogCQkJcmV0ID0gVjRMMl9JREVOVF9DWDIzODg3X0FWOwogCQl9CiAJfSBlbHNlIGlmIChjeDI1ODQwX3JlYWQ0KGNsaWVudCwgMHgzMDApICYgMHgwZmZmZmZmZikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKaW5kZXggYzgyMGUyZi4uM2Y0NDIwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCkBAIC01MjQsNyArNTI0LDcgQEAKIAlmb3IgKHRvZG8gPSAzMjsgdG9kbyA+IDA7IHRvZG8gLT0gYml0cykgewogCQlldi5wdWxzZSA9IHNhbXBsZXMgJiAweDgwMDAwMDAwID8gZmFsc2UgOiB0cnVlOwogCQliaXRzID0gbWluKHRvZG8sIDMyVSAtIGZscyhldi5wdWxzZSA/IHNhbXBsZXMgOiB+c2FtcGxlcykpOwotCQlldi5kdXJhdGlvbiA9IChiaXRzICogTlNFQ19QRVJfU0VDKSAvICgxMDAwICogaXJfc2FtcGxlcmF0ZSk7CisJCWV2LmR1cmF0aW9uID0gKGJpdHMgKiAoTlNFQ19QRVJfU0VDIC8gMTAwMCkpIC8gaXJfc2FtcGxlcmF0ZTsKIAkJaXJfcmF3X2V2ZW50X3N0b3JlX3dpdGhfZmlsdGVyKGlyLT5kZXYsICZldik7CiAJCXNhbXBsZXMgPDw9IGJpdHM7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2RtNjQ0eF9jY2RjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG02NDR4X2NjZGMuYwppbmRleCA0OTBhYWZiLi5jOGIzMmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG02NDR4X2NjZGMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG02NDR4X2NjZGMuYwpAQCAtMjU4LDcgKzI1OCw3IEBACiAJLyoKIAkgKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIEZQQyB0YWJsZSBpZiBjdXJyZW50CiAJICogRlBDIHRhYmxlIGJ1ZmZlciBpcyBub3QgYmlnIGVub3VnaCB0bwotCSAqIGFjY29tb2RhdGUgRlBDIE51bWJlciByZXF1ZXN0ZWQKKwkgKiBhY2NvbW1vZGF0ZSBGUEMgTnVtYmVyIHJlcXVlc3RlZAogCSAqLwogCWlmIChyYXdfcGFyYW1zLT5mYXVsdF9weGwuZnBfbnVtICE9IGNvbmZpZ19wYXJhbXMtPmZhdWx0X3B4bC5mcF9udW0pIHsKIAkJaWYgKGZwY19waHlzYWRkciAhPSBOVUxMKSB7CkBAIC00MzYsNyArNDM2LDcgQEAKIAogCS8qCiAJICogY29uZmlndXJlIHRoZSBob3Jpem9udGFsIGxpbmUgb2Zmc2V0LiBUaGlzIHNob3VsZCBiZSBhCi0JICogb24gMzIgYnl0ZSBib25kYXJ5LiBTbyBjbGVhciBMU0IgNSBiaXRzCisJICogb24gMzIgYnl0ZSBib3VuZGFyeS4gU28gY2xlYXIgTFNCIDUgYml0cwogCSAqLwogCXJlZ3coKChwYXJhbXMtPndpbi53aWR0aCAqIDIgICsgMzEpICYgfjB4MWYpLCBDQ0RDX0hTSVpFX09GRik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGZlX2NhcHR1cmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGZlX2NhcHR1cmUuYwppbmRleCA3MWU5NjFlLi41YjM4ZmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBmZV9jYXB0dXJlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwZmVfY2FwdHVyZS5jCkBAIC0xNjkxLDcgKzE2OTEsNyBAQAogCQlnb3RvIHVubG9ja19vdXQ7CiAJfQogCi0JLyogYWRqdXN0IHRoZSB3aWR0aCB0byAxNiBwaXhlbCBib3VuZHJ5ICovCisJLyogYWRqdXN0IHRoZSB3aWR0aCB0byAxNiBwaXhlbCBib3VuZGFyeSAqLwogCWNyb3AtPmMud2lkdGggPSAoKGNyb3AtPmMud2lkdGggKyAxNSkgJiB+MHhmKTsKIAogCS8qIG1ha2Ugc3VyZSBwYXJhbWV0ZXJzIGFyZSB2YWxpZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwppbmRleCBhODMxMzFiLi43YjY0NjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwpAQCAtMzc3LDcgKzM3Nyw3IEBACiAJLyogR2V0IHRoZSBuZXh0IGJ1ZmZlciAqLwogCSpidWYgPSBsaXN0X2VudHJ5KGRtYV9xLT5hY3RpdmUubmV4dCwgc3RydWN0IGVtMjh4eF9idWZmZXIsIHZiLnF1ZXVlKTsKIAotCS8qIENsZWFucyB1cCBidWZmZXIgLSBVc2VmdWxsIGZvciB0ZXN0aW5nIGZvciBmcmFtZS9VUkIgbG9zcyAqLworCS8qIENsZWFucyB1cCBidWZmZXIgLSBVc2VmdWwgZm9yIHRlc3RpbmcgZm9yIGZyYW1lL1VSQiBsb3NzICovCiAJb3V0cCA9IHZpZGVvYnVmX3RvX3ZtYWxsb2MoJigqYnVmKS0+dmIpOwogCW1lbXNldChvdXRwLCAwLCAoKmJ1ZiktPnZiLnNpemUpOwogCkBAIC00MDQsNyArNDA0LDcgQEAKIAogCS8qIEdldCB0aGUgbmV4dCBidWZmZXIgKi8KIAkqYnVmID0gbGlzdF9lbnRyeShkbWFfcS0+YWN0aXZlLm5leHQsIHN0cnVjdCBlbTI4eHhfYnVmZmVyLCB2Yi5xdWV1ZSk7Ci0JLyogQ2xlYW5zIHVwIGJ1ZmZlciAtIFVzZWZ1bGwgZm9yIHRlc3RpbmcgZm9yIGZyYW1lL1VSQiBsb3NzICovCisJLyogQ2xlYW5zIHVwIGJ1ZmZlciAtIFVzZWZ1bCBmb3IgdGVzdGluZyBmb3IgZnJhbWUvVVJCIGxvc3MgKi8KIAlvdXRwID0gdmlkZW9idWZfdG9fdm1hbGxvYygmKCpidWYpLT52Yik7CiAJbWVtc2V0KG91dHAsIDB4MDAsICgqYnVmKS0+dmIuc2l6ZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAtbWkxMzIwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLW1pMTMyMC5jCmluZGV4IGMyNzZhN2QuLmI1NzE2MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAtbWkxMzIwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC1taTEzMjAuYwpAQCAtMjAxLDcgKzIwMSw3IEBACiAJc2QtPnZtYXguYmFja2xpZ2h0ICA9ICAyOwogCXNkLT52bWF4LmJyaWdodG5lc3MgPSAgODsKIAlzZC0+dm1heC5zaGFycG5lc3MgID0gIDc7Ci0Jc2QtPnZtYXguY29udHJhc3QgICA9ICAwOyAvKiAxMCBidXQgbm90IHdvcmtpbmcgd2l0aCB0aWhzIGRyaXZlciAqLworCXNkLT52bWF4LmNvbnRyYXN0ICAgPSAgMDsgLyogMTAgYnV0IG5vdCB3b3JraW5nIHdpdGggdGhpcyBkcml2ZXIgKi8KIAlzZC0+dm1heC5nYW1tYSAgICAgID0gNDA7CiAJc2QtPnZtYXguaHVlICAgICAgICA9ICA1ICsgMTsKIAlzZC0+dm1heC5zYXR1cmF0aW9uID0gIDg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKaW5kZXggOWM2YTY0My4uZTUyNmFhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYwpAQCAtODU3LDcgKzg1Nyw3IEBACiAJCX0KIAogCQkvKiB0aGUgYmFuZHdpZHRoIGlzIG5vdCB3aWRlIGVub3VnaAotCQkgKiBuZWdvY2lhdGUgb3IgdHJ5IGEgbG93ZXIgYWx0ZXJuYXRlIHNldHRpbmcgKi8KKwkJICogbmVnb3RpYXRlIG9yIHRyeSBhIGxvd2VyIGFsdGVybmF0ZSBzZXR0aW5nICovCiAJCVBERUJVRyhEX0VSUnxEX1NUUkVBTSwKIAkJCSJiYW5kd2lkdGggbm90IHdpZGUgZW5vdWdoIC0gdHJ5aW5nIGFnYWluIik7CiAJCW1zbGVlcCgyMCk7CS8qIHdhaXQgZm9yIGtpbGwgY29tcGxldGUgKi8KQEAgLTIzNDYsNyArMjM0Niw3IEBACiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKIAogCS8qIHJlbGVhc2UgdGhlIGRldmljZSAqLwotCS8qICh0aGlzIHdpbGwgY2FsbCBnc3BjYV9yZWxlYXNlKCkgaW1tZWRpYXRseSBvciBvbiBsYXN0IGNsb3NlKSAqLworCS8qICh0aGlzIHdpbGwgY2FsbCBnc3BjYV9yZWxlYXNlKCkgaW1tZWRpYXRlbHkgb3Igb24gbGFzdCBjbG9zZSkgKi8KIAl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZ3NwY2FfZGV2LT52ZGV2KTsKIAogLyoJUERFQlVHKERfUFJPQkUsICJkaXNjb25uZWN0IGNvbXBsZXRlIik7ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21hcnMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCmluZGV4IGNiNGQwYmYuLjAxOTYyMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCkBAIC0zNjEsNyArMzYxLDcgQEAKIAkJbWlfdyhnc3BjYV9kZXYsIGkgKyAxLCBtaV9kYXRhW2ldKTsKIAogCWRhdGFbMF0gPSAweDAwOwotCWRhdGFbMV0gPSAweDRkOwkJLyogSVNPQyB0cmFuc2ZlcmluZyBlbmFibGUuLi4gKi8KKwlkYXRhWzFdID0gMHg0ZDsJCS8qIElTT0MgdHJhbnNmZXJyaW5nIGVuYWJsZS4uLiAqLwogCXJlZ193KGdzcGNhX2RldiwgMik7CiAKIAlnc3BjYV9kZXYtPmN0cmxfaW5hYyA9IDA7IC8qIGFjdGl2YXRlIHRoZSBpbGx1bWluYXRvciBjb250cm9scyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tcjk3MzEwYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tcjk3MzEwYS5jCmluZGV4IDM4ODRjOWQuLjk3ZTUwNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbXI5NzMxMGEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMKQEAgLTQ2OSw3ICs0NjksNyBAQAogc3RhdGljIGludCBpc29jX2VuYWJsZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gMHgwMDsKLQlnc3BjYV9kZXYtPnVzYl9idWZbMV0gPSAweDRkOyAgLyogSVNPQyB0cmFuc2ZlcmluZyBlbmFibGUuLi4gKi8KKwlnc3BjYV9kZXYtPnVzYl9idWZbMV0gPSAweDRkOyAgLyogSVNPQyB0cmFuc2ZlcnJpbmcgZW5hYmxlLi4uICovCiAJcmV0dXJuIG1yX3dyaXRlKGdzcGNhX2RldiwgMik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYwppbmRleCBmZDFiNjA4Li4zNmE0NmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCkBAIC0zODEsNyArMzgxLDcgQEAKICAgIGxhcmdlciB0aGVuIG5lY2Vzc2FyeSwgaG93ZXZlciB0aGV5IG5lZWQgdG8gYmUgdGhpcyBiaWcgYXMgdGhlIG92NTExIC8KICAgIG92NTE4IGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGlzb2MgZnJhbWUsIHVzaW5nIDAgcGFkZGluZyBieXRlcyB3aGVuCiAgICBpdCBkb2Vzbid0IGhhdmUgYW55IGRhdGEuIFNvIHdpdGggbG93IGZyYW1lcmF0ZXMgdGhlIGFtb3VudCBvZiBkYXRhCi0gICB0cmFuc2ZlcmVkIGNhbiBiZWNvbWUgcXVpdGUgbGFyZ2UgKGxpYnY0bCB3aWxsIHJlbW92ZSBhbGwgdGhlIDAgcGFkZGluZworICAgdHJhbnNmZXJyZWQgY2FuIGJlY29tZSBxdWl0ZSBsYXJnZSAobGlidjRsIHdpbGwgcmVtb3ZlIGFsbCB0aGUgMCBwYWRkaW5nCiAgICBpbiB1c2Vyc3BhY2UpLiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgb3Y1MThfdmdhX21vZGVbXSA9IHsKIAl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9PVjUxOCwgVjRMMl9GSUVMRF9OT05FLApAQCAtNDM2OCw3ICs0MzY4LDcgQEAKIAkJCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsKIAkJCQlyZXR1cm47CiAJCQl9Ci0JCQkvKiBBZGQgMTEgYnl0ZSBmb290ZXIgdG8gZnJhbWUsIG1pZ2h0IGJlIHVzZWZ1bGwgKi8KKwkJCS8qIEFkZCAxMSBieXRlIGZvb3RlciB0byBmcmFtZSwgbWlnaHQgYmUgdXNlZnVsICovCiAJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgaW4sIDExKTsKIAkJCXJldHVybjsKIAkJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jCmluZGV4IDVhMDg3MzguLjE0NmI0NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYwpAQCAtODI3LDcgKzgyNyw3IEBACiAJCSAgIHBvc3NpYmxlIHRvIHVzZSBsZXNzIGV4cG9zdXJlIHRoZW4gd2hhdCB0aGUgZnBzIG1heGltdW0KIAkJICAgYWxsb3dzIGJ5IHNldHRpbmcgcmVnaXN0ZXIgMTAuIHJlZ2lzdGVyIDEwIGNvbmZpZ3VyZXMgdGhlCiAJCSAgIGFjdHVhbCBleHBvc3VyZSBhcyBxdW90aWVudCBvZiB0aGUgZnVsbCBleHBvc3VyZSwgd2l0aCAwCi0JCSAgIGJlaW5nIG5vIGV4cG9zdXJlIGF0IGFsbCAobm90IHZlcnkgdXNlZnVsbCkgYW5kIHJlZzEwX21heAorCQkgICBiZWluZyBubyBleHBvc3VyZSBhdCBhbGwgKG5vdCB2ZXJ5IHVzZWZ1bCkgYW5kIHJlZzEwX21heAogCQkgICBiZWluZyBtYXggZXhwb3N1cmUgcG9zc2libGUgYXQgdGhhdCBmcmFtZXJhdGUuCiAKIAkJICAgVGhlIGNvZGUgbWFwcyBvdXIgMCAtIDUxMCBtcyBleHBvc3VyZSBjdHJsIHRvIHRoZXNlIDIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMKaW5kZXggNDU1NTJjMy4uM2U3Njk1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMKQEAgLTYwNyw3ICs2MDcsNyBAQAogCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4ODgwLCAyKTsKIAkvKiBmYW1pbHkgY2FtIFF1aWNrc21hcnQgc3R1ZmYgKi8KIAlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODAwYSwgMHgwMCk7Ci0JLyogU2V0IGFnYyB0cmFuc2Zlcjogc3luY2VkIGluYmV0d2VlbiBmcmFtZXMgKi8KKwkvKiBTZXQgYWdjIHRyYW5zZmVyOiBzeW5jZWQgYmV0d2VlbiBmcmFtZXMgKi8KIAlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODIwZiwgMHgwMSk7CiAJLyogSW5pdCBTRFJBTSAtIG5lZWRlZCBmb3IgU0RSQU0gYWNjZXNzICovCiAJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDg3MGEsIDB4MDQpOwpAQCAtODMxLDcgKzgzMSw3IEBACiAKIAkJLyogZmFtaWx5Y2FtIFF1aWNrc21hcnQgcG9ja2V0RFYgc3R1ZmYgKi8KIAkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDgwMGEsIDB4MDApOwotCQkvKiBTZXQgYWdjIHRyYW5zZmVyOiBzeW5jZWQgaW5iZXR3ZWVuIGZyYW1lcyAqLworCQkvKiBTZXQgYWdjIHRyYW5zZmVyOiBzeW5jZWQgYmV0d2VlbiBmcmFtZXMgKi8KIAkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDgyMGYsIDB4MDEpOwogCQkvKiBJbml0IFNEUkFNIC0gbmVlZGVkIGZvciBTRFJBTSBhY2Nlc3MgKi8KIAkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDg3MGEsIDB4MDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYwppbmRleCAzNDgzMTkzLi40MWRjZTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYwpAQCAtNTkyLDcgKzU5Miw3IEBACiAvKiBUaGlzIGxpbmUgc2VlbXMgdG8gc2V0dXAgdGhlIGZyYW1lL2NhbnZhcyAqLwogCXsweDAwMGYsIDB4ODQwMn0sCiAKLS8qIFRoZWVzZSA2IGxpbmVzIGFyZSBuZWVkZWQgdG8gc3RhcnR1cCB0aGUgd2ViY2FtICovCisvKiBUaGVzZSA2IGxpbmVzIGFyZSBuZWVkZWQgdG8gc3RhcnR1cCB0aGUgd2ViY2FtICovCiAJezB4MDA5MCwgMHg4MTEwfSwKIAl7MHgwMDAxLCAweDgxMTR9LAogCXsweDAwMDEsIDB4ODExNH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1LmMKaW5kZXggMmU5YzA2MS4uNWJhOTZhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcTkwNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3E5MDUuYwpAQCAtMjIsNyArMjIsNyBAQAogICogSGlzdG9yeSBhbmQgQWNrbm93bGVkZ21lbnRzCiAgKgogICogVGhlIG9yaWdpbmFsIExpbnV4IGRyaXZlciBmb3IgU1E5MDUgYmFzZWQgY2FtZXJhcyB3YXMgd3JpdHRlbiBieQotICogTWFyY2VsbCBMZW5neWVsIGFuZCBmdXJ0ZXIgZGV2ZWxvcGVkIGJ5IG1hbnkgb3RoZXIgY29udHJpYnV0ZXJzCisgKiBNYXJjZWxsIExlbmd5ZWwgYW5kIGZ1cnRlciBkZXZlbG9wZWQgYnkgbWFueSBvdGhlciBjb250cmlidXRvcnMKICAqIGFuZCBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3NxY2FtLwogICoKICAqIFRoaXMgZHJpdmVyIHRha2VzIGFkdmFudGFnZSBvZiB0aGUgcmV2ZXJzZSBlbmdpbmVlcmluZyB3b3JrIGRvbmUgZm9yCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmMKaW5kZXggMTc1MzFiNC4uYjgxNTY4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuYwpAQCAtNTY5LDcgKzU2OSw3IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQkvKiBFbmFibGUgY29udGlub3VzIGZyYW1lIGNhcHR1cmUsIGJpdCAyOiBzdG9wIHdoZW4gZnJhbWUgY29tcGxldGUgKi8KKwkvKiBFbmFibGUgY29udGludW91cyBmcmFtZSBjYXB0dXJlLCBiaXQgMjogc3RvcCB3aGVuIGZyYW1lIGNvbXBsZXRlICovCiAJZXJyID0gc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc2QsIEhEQ1NfUkVHX0NPTkZJRyhzZCksIEJJVCgzKSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9nZW1pbmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX2dlbWluaS5jCmluZGV4IGNkZjhiMTkuLmNiYzUwNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX2dlbWluaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX2dlbWluaS5jCkBAIC0yNjEsNyArMjYxLDcgQEAKIAogLyogdGhlIHNhYTcxNDYgcHJvdmlkZXMgc29tZSBjb250cm9scyAoYnJpZ2h0bmVzcywgY29udHJhc3QsIHNhdHVyYXRpb24pCiAgICB3aGljaCBnZXRzIHJlZ2lzdGVyZWQgKmFmdGVyKiB0aGlzIGZ1bmN0aW9uLiBiZWNhdXNlIG9mIHRoaXMgd2UgaGF2ZQotICAgdG8gcmV0dXJuIHdpdGggYSB2YWx1ZSAhPSAwIGV2ZW4gaWYgdGhlIGZ1bmN0aW9uIHN1Y2NlZGVkLi4gKi8KKyAgIHRvIHJldHVybiB3aXRoIGEgdmFsdWUgIT0gMCBldmVuIGlmIHRoZSBmdW5jdGlvbiBzdWNjZWVkZWQuLiAqLwogc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKIHsKIAlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaW14MDc0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lteDA3NC5jCmluZGV4IDFhMTE2OTEuLjAzODJlYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaW14MDc0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pbXgwNzQuYwpAQCAtMjk4LDcgKzI5OCw3IEBACiBzdGF0aWMgaW50IGlteDA3NF9zZXRfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJCSB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCXJldHVybiAtMTsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX29wcyBpbXgwNzRfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMKaW5kZXggNGRmMDE5NC4uMTRhMWNlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jCkBAIC0xNzksNyArMTc5LDcgQEAKIHsKIAlpbnQgaTsKIAotCS8qIG1haWxib3ggaXMgcHJlY2VlZGVkIGJ5IGEgMTYgYnl0ZSAnbWFnaWMgY29va2llJyBzdGFydGluZyBhdCBhIDI1Ni1ieXRlCisJLyogbWFpbGJveCBpcyBwcmVjZWRlZCBieSBhIDE2IGJ5dGUgJ21hZ2ljIGNvb2tpZScgc3RhcnRpbmcgYXQgYSAyNTYtYnl0ZQogCSAgIGFkZHJlc3MgYm91bmRhcnkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSAweDEwMCkgewogCQlpZiAocmVhZGwobWVtICsgaSkgICAgICA9PSAweDEyMzQ1Njc4ICYmCkBAIC0zNzcsNyArMzc3LDcgQEAKIAkJCSAgIlJlbG9hZGluZ1xuIiwgd2hlcmUpOwogCQlyZXMgPSBpdnR2X2Zpcm13YXJlX3Jlc3RhcnQoaXR2KTsKIAkJLyoKLQkJICogRXZlbiBpZiByZXN0YXJ0ZWQgb2ssIHN0aWxsIHNpZ25hbCBhIHByb2JsZW0gaGFkIG9jY3VyZWQuCisJCSAqIEV2ZW4gaWYgcmVzdGFydGVkIG9rLCBzdGlsbCBzaWduYWwgYSBwcm9ibGVtIGhhZCBvY2N1cnJlZC4KIAkJICogVGhlIGNhbGxlciBjYW4gY29tZSB0aHJvdWdoIHRoaXMgZnVuY3Rpb24gYWdhaW4gdG8gY2hlY2sKIAkJICogaWYgdGhpbmdzIGFyZSByZWFsbHkgb2sgYWZ0ZXIgdGhlIHJlc3RhcnQuCiAJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHZmYi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHZmYi5jCmluZGV4IGYwMzE2ZDAuLjE3MjQ3NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2ZmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0dmZiLmMKQEAgLTEwODAsNyArMTA4MCw3IEBACiAJCWttYWxsb2Moc2l6ZW9mKHUzMikgKiAxNiwgR0ZQX0tFUk5FTHxfX0dGUF9OT1dBUk4pOwogCiAJaWYgKCFvaS0+aXZ0dmZiX2luZm8ucHNldWRvX3BhbGV0dGUpIHsKLQkJSVZUVkZCX0VSUigiYWJvcnQsIHVuYWJsZSB0byBhbGxvYyBwc2V1ZG8gcGFsbGV0ZVxuIik7CisJCUlWVFZGQl9FUlIoImFib3J0LCB1bmFibGUgdG8gYWxsb2MgcHNldWRvIHBhbGV0dGVcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbTUyNzkwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL201Mjc5MC5jCmluZGV4IDVlMWM5YTguLjMwM2ZmYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbTUyNzkwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tNTI3OTAuYwpAQCAtMTc0LDcgKzE3NCw3IEBACiAJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKIAkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCi0Jc3RhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbTUyNzkwX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbTUyNzkwX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHN0YXRlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmMKaW5kZXggYjE3NjNhYy4uODEyNjYyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuYwpAQCAtNjksNyArNjksNyBAQAogLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8KIHN0YXRpYyBpbnQgb3Btb2RlICAgPSBPUE1PREVfQVVUTzsKIGludCBtc3BfZGVidWc7CQkgLyogbXNwX2RlYnVnIG91dHB1dCAqLwotaW50IG1zcF9vbmNlOwkJIC8qIG5vIGNvbnRpbm91cyBzdGVyZW8gbW9uaXRvcmluZyAqLworaW50IG1zcF9vbmNlOwkJIC8qIG5vIGNvbnRpbnVvdXMgc3RlcmVvIG1vbml0b3JpbmcgKi8KIGludCBtc3BfYW1zb3VuZDsJIC8qIGhhcmQtd2lyZSBBTSBzb3VuZCBhdCA2LjUgSHogKGZyYW5jZSksCiAJCQkgICAgdGhlIGF1dG9zY2FuIHNlZW1zIHdvcmsgd2VsbCBvbmx5IHdpdGggRk0uLi4gKi8KIGludCBtc3Bfc3RhbmRhcmQgPSAxOyAgICAvKiBPdmVycmlkZSBhdXRvIGRldGVjdCBvZiBhdWRpbyBtc3Bfc3RhbmRhcmQsCkBAIC01NTEsNyArNTUxLDcgQEAKIAlzd2l0Y2ggKHN0YXRlLT5tb2RlKSB7CiAJCWNhc2UgTVNQX01PREVfQU1fREVURUNUOiBwID0gIkFNIChmb3IgY2FycmllciBkZXRlY3QpIjsgYnJlYWs7CiAJCWNhc2UgTVNQX01PREVfRk1fUkFESU86IHAgPSAiRk0gUmFkaW8iOyBicmVhazsKLQkJY2FzZSBNU1BfTU9ERV9GTV9URVJSQTogcCA9ICJUZXJyZXN0aWFsIEZNLW1vbm8vc3RlcmVvIjsgYnJlYWs7CisJCWNhc2UgTVNQX01PREVfRk1fVEVSUkE6IHAgPSAiVGVycmVzdHJpYWwgRk0tbW9uby9zdGVyZW8iOyBicmVhazsKIAkJY2FzZSBNU1BfTU9ERV9GTV9TQVQ6IHAgPSAiU2F0ZWxsaXRlIEZNLW1vbm8iOyBicmVhazsKIAkJY2FzZSBNU1BfTU9ERV9GTV9OSUNBTTE6IHAgPSAiTklDQU0vRk0gKEIvRywgRC9LKSI7IGJyZWFrOwogCQljYXNlIE1TUF9NT0RFX0ZNX05JQ0FNMjogcCA9ICJOSUNBTS9GTSAoSSkiOyBicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1rdGhyZWFkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWt0aHJlYWRzLmMKaW5kZXggYjM3NmZjZC4uODAzODdlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWt0aHJlYWRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWt0aHJlYWRzLmMKQEAgLTg3LDcgKzg3LDcgQEAKIAkJey04LCAtOCwgNCwgNiwgNzgsIDEwN30sCiAJCU1TUF9DQVJSSUVSKDEwLjcpLCBNU1BfQ0FSUklFUigxMC43KSwKIAkJMHgwMGQwLCAweDA0ODAsIDB4MDAyMCwgMHgzMDAwCi0JfSwgewkvKiBUZXJyZXN0aWFsIEZNLW1vbm8gKyBGTS1zdGVyZW8gKi8KKwl9LCB7CS8qIFRlcnJlc3RyaWFsIEZNLW1vbm8gKyBGTS1zdGVyZW8gKi8KIAkJezMsIDE4LCAyNywgNDgsIDY2LCA3Mn0sCiAJCXszLCAxOCwgMjcsIDQ4LCA2NiwgNzJ9LAogCQlNU1BfQ0FSUklFUig1LjUpLCBNU1BfQ0FSUklFUig1LjUpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwL29tYXBfdm91dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwL29tYXBfdm91dC5jCmluZGV4IDAyOWE0YmEuLmQ0ZmU3YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9vbWFwX3ZvdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAvb21hcF92b3V0LmMKQEAgLTQ3Myw3ICs0NzMsNyBAQAogLyoKICAqIENvbnZlcnQgVjRMMiByb3RhdGlvbiB0byBEU1Mgcm90YXRpb24KICAqCVY0TDIgdW5kZXJzdGFuZCAwLCA5MCwgMTgwLCAyNzAuCi0gKglDb252ZXJ0IHRvIDAsIDEsIDIgYW5kIDMgcmVwc2VjdGl2ZWx5IGZvciBEU1MKKyAqCUNvbnZlcnQgdG8gMCwgMSwgMiBhbmQgMyByZXNwZWN0aXZlbHkgZm9yIERTUwogICovCiBzdGF0aWMgaW50IHY0bDJfcm90X3RvX2Rzc19yb3QoaW50IHY0bDJfcm90YXRpb24sCiAJCQllbnVtIGRzc19yb3RhdGlvbiAqcm90YXRpb24sIGJvb2wgbWlycm9yKQpAQCAtMTE0Miw3ICsxMTQyLDcgQEAKIH0KIAogLyoKLSAqIEJ1ZmZlciBxdWV1ZSBmdW50aW9uIHdpbGwgYmUgY2FsbGVkIGZyb20gdGhlIHZpZGVvYnVmIGxheWVyIHdoZW4gX1FCVUYKKyAqIEJ1ZmZlciBxdWV1ZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBmcm9tIHRoZSB2aWRlb2J1ZiBsYXllciB3aGVuIF9RQlVGCiAgKiBpb2N0bCBpcyBjYWxsZWQuIEl0IGlzIHVzZWQgdG8gZW5xdWV1ZSBidWZmZXIsIHdoaWNoIGlzIHJlYWR5IHRvIGJlCiAgKiBkaXNwbGF5ZWQuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9vbWFwX3ZvdXRsaWIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9vbWFwX3ZvdXRsaWIuYwppbmRleCBiOTQxYzc2Li4yYWE2YTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAvb21hcF92b3V0bGliLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwL29tYXBfdm91dGxpYi5jCkBAIC01Myw3ICs1Myw3IEBACiAvKiBHaXZlbiBhIG5ldyByZW5kZXIgd2luZG93IGluIG5ld193aW4sIGFkanVzdCB0aGUgd2luZG93IHRvIHRoZQogICogbmVhcmVzdCBzdXBwb3J0ZWQgY29uZmlndXJhdGlvbi4gIFRoZSBhZGp1c3RlZCB3aW5kb3cgcGFyYW1ldGVycyBhcmUKICAqIHJldHVybmVkIGluIG5ld193aW4uCi0gKiBSZXR1cm5zIHplcm8gaWYgc3VjY2VzZnVsLCBvciAtRUlOVkFMIGlmIHRoZSByZXF1ZXN0ZWQgd2luZG93IGlzCisgKiBSZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bCwgb3IgLUVJTlZBTCBpZiB0aGUgcmVxdWVzdGVkIHdpbmRvdyBpcwogICogaW1wb3NzaWJsZSBhbmQgY2Fubm90IHJlYXNvbmFibHkgYmUgYWRqdXN0ZWQuCiAgKi8KIGludCBvbWFwX3ZvdXRfdHJ5X3dpbmRvdyhzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmJ1ZiwKQEAgLTEwMSw3ICsxMDEsNyBAQAogICogd2lsbCBhbHNvIGJlIGFkanVzdGVkIGlmIG5lY2Vzc2FyeS4gIFByZWZlcmVuY2UgaXMgZ2l2ZW4gdG8ga2VlcGluZyB0aGUKICAqIHRoZSB3aW5kb3cgYXMgY2xvc2UgdG8gdGhlIHJlcXVlc3RlZCBjb25maWd1cmF0aW9uIGFzIHBvc3NpYmxlLiAgSWYKICAqIHN1Y2Nlc3NmdWwsIG5ld193aW4sIHZvdXQtPndpbiwgYW5kIGNyb3AgYXJlIHVwZGF0ZWQuCi0gKiBSZXR1cm5zIHplcm8gaWYgc3VjY2VzZnVsLCBvciAtRUlOVkFMIGlmIHRoZSByZXF1ZXN0ZWQgcHJldmlldyB3aW5kb3cgaXMKKyAqIFJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsLCBvciAtRUlOVkFMIGlmIHRoZSByZXF1ZXN0ZWQgcHJldmlldyB3aW5kb3cgaXMKICAqIGltcG9zc2libGUgYW5kIGNhbm5vdCByZWFzb25hYmx5IGJlIGFkanVzdGVkLgogICovCiBpbnQgb21hcF92b3V0X25ld193aW5kb3coc3RydWN0IHY0bDJfcmVjdCAqY3JvcCwKQEAgLTE1NSw3ICsxNTUsNyBAQAogICogd2luZG93IHdvdWxkIGZhbGwgb3V0c2lkZSB0aGUgZGlzcGxheSBib3VuZGFyaWVzLCB0aGUgY3JvcHBpbmcgcmVjdGFuZ2xlCiAgKiB3aWxsIGFsc28gYmUgYWRqdXN0ZWQgdG8gbWFpbnRhaW4gdGhlIHJlc2NhbGluZyByYXRpb3MuICBJZiBzdWNjZXNzZnVsLCBjcm9wCiAgKiBhbmQgd2luIGFyZSB1cGRhdGVkLgotICogUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc2Z1bCwgb3IgLUVJTlZBTCBpZiB0aGUgcmVxdWVzdGVkIGNyb3BwaW5nIHJlY3RhbmdsZSBpcworICogUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwsIG9yIC1FSU5WQUwgaWYgdGhlIHJlcXVlc3RlZCBjcm9wcGluZyByZWN0YW5nbGUgaXMKICAqIGltcG9zc2libGUgYW5kIGNhbm5vdCByZWFzb25hYmx5IGJlIGFkanVzdGVkLgogICovCiBpbnQgb21hcF92b3V0X25ld19jcm9wKHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDFfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAxX2NhbWVyYS5jCmluZGV4IGVhYjMxY2IuLjU5NTRiOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDFfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMV9jYW1lcmEuYwpAQCAtNjg3LDcgKzY4Nyw3IEBACiAJCSAqIEluIENPTlRJRyBtb2RlLCB0aGUgY3VycmVudCBidWZmZXIgcGFyYW1ldGVycyBoYWQgYWxyZWFkeQogCQkgKiBiZWVuIGVudGVyZWQgaW50byB0aGUgRE1BIHByb2dyYW1taW5nIHJlZ2lzdGVyIHNldCB3aGlsZSB0aGUKIAkJICogYnVmZmVyIHdhcyBmZXRjaGVkIHdpdGggcHJlcGFyZV9uZXh0X3ZiKCksIHRoZXkgbWF5IGhhdmUgYWxzbwotCQkgKiBiZWVuIHRyYW5zZmVyZWQgaW50byB0aGUgcnVudGltZSBzZXQgYW5kIGFscmVhZHkgYWN0aXZlIGlmCisJCSAqIGJlZW4gdHJhbnNmZXJyZWQgaW50byB0aGUgcnVudGltZSBzZXQgYW5kIGFscmVhZHkgYWN0aXZlIGlmCiAJCSAqIHRoZSBETUEgc3RpbGwgcnVubmluZy4KIAkJICovCiAJfSBlbHNlIHsKQEAgLTgzNSw3ICs4MzUsNyBAQAogCQkJCS8qCiAJCQkJICogSWYgZXhhY3RseSAyIHNnYnVmcyBmcm9tIHRoZSBuZXh0IHNnbGlzdCBoYXZlCiAJCQkJICogYmVlbiBwcm9ncmFtbWVkIGludG8gdGhlIERNQSBlbmdpbmUgKHRoZQotCQkJCSAqIGZyaXN0IG9uZSBhbHJlYWR5IHRyYW5zZmVyZWQgaW50byB0aGUgRE1BCisJCQkJICogZmlyc3Qgb25lIGFscmVhZHkgdHJhbnNmZXJyZWQgaW50byB0aGUgRE1BCiAJCQkJICogcnVudGltZSByZWdpc3RlciBzZXQsIHRoZSBzZWNvbmQgb25lIHN0aWxsCiAJCQkJICogaW4gdGhlIHByb2dyYW1taW5nIHNldCksIHRoZW4gd2UgYXJlIGluIHN5bmMuCiAJCQkJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3AuYwppbmRleCAxYTk5NjNiZC4uNDcyYTY5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3AuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcC5jCkBAIC0yMTUsMjAgKzIxNSwyMSBAQAogCX0KIAogCXN3aXRjaCAoeGNsa3NlbCkgewotCWNhc2UgMDoKKwljYXNlIElTUF9YQ0xLX0E6CiAJCWlzcF9yZWdfY2xyX3NldChpc3AsIE9NQVAzX0lTUF9JT01FTV9NQUlOLCBJU1BfVENUUkxfQ1RSTCwKIAkJCQlJU1BUQ1RSTF9DVFJMX0RJVkFfTUFTSywKIAkJCQlkaXZpc29yIDw8IElTUFRDVFJMX0NUUkxfRElWQV9TSElGVCk7CiAJCWRldl9kYmcoaXNwLT5kZXYsICJpc3Bfc2V0X3hjbGsoKTogY2FtX3hjbGthIHNldCB0byAlZCBIelxuIiwKIAkJCWN1cnJlbnR4Y2xrKTsKIAkJYnJlYWs7Ci0JY2FzZSAxOgorCWNhc2UgSVNQX1hDTEtfQjoKIAkJaXNwX3JlZ19jbHJfc2V0KGlzcCwgT01BUDNfSVNQX0lPTUVNX01BSU4sIElTUF9UQ1RSTF9DVFJMLAogCQkJCUlTUFRDVFJMX0NUUkxfRElWQl9NQVNLLAogCQkJCWRpdmlzb3IgPDwgSVNQVENUUkxfQ1RSTF9ESVZCX1NISUZUKTsKIAkJZGV2X2RiZyhpc3AtPmRldiwgImlzcF9zZXRfeGNsaygpOiBjYW1feGNsa2Igc2V0IHRvICVkIEh6XG4iLAogCQkJY3VycmVudHhjbGspOwogCQlicmVhazsKKwljYXNlIElTUF9YQ0xLX05PTkU6CiAJZGVmYXVsdDoKIAkJb21hcDNpc3BfcHV0KGlzcCk7CiAJCWRldl9kYmcoaXNwLT5kZXYsICJJU1BfRVJSOiBpc3Bfc2V0X3hjbGsoKTogSW52YWxpZCByZXF1ZXN0ZWQgIgpAQCAtMjM3LDEzICsyMzgsMTMgQEAKIAl9CiAKIAkvKiBEbyB3ZSBnbyBmcm9tIHN0YWJsZSB3aGF0ZXZlciB0byBjbG9jaz8gKi8KLQlpZiAoZGl2aXNvciA+PSAyICYmIGlzcC0+eGNsa19kaXZpc29yW3hjbGtzZWxdIDwgMikKKwlpZiAoZGl2aXNvciA+PSAyICYmIGlzcC0+eGNsa19kaXZpc29yW3hjbGtzZWwgLSAxXSA8IDIpCiAJCW9tYXAzaXNwX2dldChpc3ApOwogCS8qIFN0b3BwaW5nIHRoZSBjbG9jay4gKi8KLQllbHNlIGlmIChkaXZpc29yIDwgMiAmJiBpc3AtPnhjbGtfZGl2aXNvclt4Y2xrc2VsXSA+PSAyKQorCWVsc2UgaWYgKGRpdmlzb3IgPCAyICYmIGlzcC0+eGNsa19kaXZpc29yW3hjbGtzZWwgLSAxXSA+PSAyKQogCQlvbWFwM2lzcF9wdXQoaXNwKTsKIAotCWlzcC0+eGNsa19kaXZpc29yW3hjbGtzZWxdID0gZGl2aXNvcjsKKwlpc3AtPnhjbGtfZGl2aXNvclt4Y2xrc2VsIC0gMV0gPSBkaXZpc29yOwogCiAJb21hcDNpc3BfcHV0KGlzcCk7CiAKQEAgLTI4NSw3ICsyODYsOCBAQAogICovCiB2b2lkIG9tYXAzaXNwX2NvbmZpZ3VyZV9icmlkZ2Uoc3RydWN0IGlzcF9kZXZpY2UgKmlzcCwKIAkJCSAgICAgICBlbnVtIGNjZGNfaW5wdXRfZW50aXR5IGlucHV0LAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpc3BfcGFyYWxsZWxfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGlzcF9wYXJhbGxlbF9wbGF0Zm9ybV9kYXRhICpwZGF0YSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgc2hpZnQpCiB7CiAJdTMyIGlzcGN0cmxfdmFsOwogCkBAIC0yOTgsOSArMzAwLDkgQEAKIAlzd2l0Y2ggKGlucHV0KSB7CiAJY2FzZSBDQ0RDX0lOUFVUX1BBUkFMTEVMOgogCQlpc3BjdHJsX3ZhbCB8PSBJU1BDVFJMX1BBUl9TRVJfQ0xLX1NFTF9QQVJBTExFTDsKLQkJaXNwY3RybF92YWwgfD0gcGRhdGEtPmRhdGFfbGFuZV9zaGlmdCA8PCBJU1BDVFJMX1NISUZUX1NISUZUOwogCQlpc3BjdHJsX3ZhbCB8PSBwZGF0YS0+Y2xrX3BvbCA8PCBJU1BDVFJMX1BBUl9DTEtfUE9MX1NISUZUOwogCQlpc3BjdHJsX3ZhbCB8PSBwZGF0YS0+YnJpZGdlIDw8IElTUENUUkxfUEFSX0JSSURHRV9TSElGVDsKKwkJc2hpZnQgKz0gcGRhdGEtPmRhdGFfbGFuZV9zaGlmdCAqIDI7CiAJCWJyZWFrOwogCiAJY2FzZSBDQ0RDX0lOUFVUX0NTSTJBOgpAQCAtMzE5LDYgKzMyMSw4IEBACiAJCXJldHVybjsKIAl9CiAKKwlpc3BjdHJsX3ZhbCB8PSAoKHNoaWZ0LzIpIDw8IElTUENUUkxfU0hJRlRfU0hJRlQpICYgSVNQQ1RSTF9TSElGVF9NQVNLOworCiAJaXNwY3RybF92YWwgJj0gfklTUENUUkxfU1lOQ19ERVRFQ1RfTUFTSzsKIAlpc3BjdHJsX3ZhbCB8PSBJU1BDVFJMX1NZTkNfREVURUNUX1ZTUklTRTsKIApAQCAtNjU4LDYgKzY2Miw4IEBACiAKIAkvKiBBcHBseSBwb3dlciBjaGFuZ2UgdG8gY29ubmVjdGVkIG5vbi1ub2Rlcy4gKi8KIAlyZXQgPSBpc3BfcGlwZWxpbmVfcG1fcG93ZXIoZW50aXR5LCBjaGFuZ2UpOworCWlmIChyZXQgPCAwKQorCQllbnRpdHktPnVzZV9jb3VudCAtPSBjaGFuZ2U7CiAKIAltdXRleF91bmxvY2soJmVudGl0eS0+cGFyZW50LT5ncmFwaF9tdXRleCk7CiAKQEAgLTcxNSw3ICs3MjEsNyBAQAogICogV2FsayB0aGUgZW50aXRpZXMgY2hhaW4gc3RhcnRpbmcgYXQgdGhlIHBpcGVsaW5lIG91dHB1dCB2aWRlbyBub2RlIGFuZCBzdGFydAogICogYWxsIG1vZHVsZXMgaW4gdGhlIGNoYWluIGluIHRoZSBnaXZlbiBtb2RlLgogICoKLSAqIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWxsLCBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmYWlsZWQgdmlkZW86OnNfc3RyZWFtCisgKiBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmYWlsZWQgdmlkZW86OnNfc3RyZWFtCiAgKiBvcGVyYXRpb24gb3RoZXJ3aXNlLgogICovCiBzdGF0aWMgaW50IGlzcF9waXBlbGluZV9lbmFibGUoc3RydWN0IGlzcF9waXBlbGluZSAqcGlwZSwKQEAgLTg3Miw2ICs4NzgsOSBAQAogCQl9CiAJfQogCisJaWYgKGZhaWx1cmUgPCAwKQorCQlpc3AtPm5lZWRzX3Jlc2V0ID0gdHJ1ZTsKKwogCXJldHVybiBmYWlsdXJlOwogfQogCkBAIC04ODMsOCArODkyLDkgQEAKICAqIFNldCB0aGUgcGlwZWxpbmUgdG8gdGhlIGdpdmVuIHN0cmVhbSBzdGF0ZS4gUGlwZWxpbmVzIGNhbiBiZSBzdGFydGVkIGluCiAgKiBzaW5nbGUtc2hvdCBvciBjb250aW51b3VzIG1vZGUuCiAgKgotICogUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bGwsIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZhaWxlZCB2aWRlbzo6c19zdHJlYW0KLSAqIG9wZXJhdGlvbiBvdGhlcndpc2UuCisgKiBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmYWlsZWQgdmlkZW86OnNfc3RyZWFtCisgKiBvcGVyYXRpb24gb3RoZXJ3aXNlLiBUaGUgcGlwZWxpbmUgc3RhdGUgaXMgbm90IHVwZGF0ZWQgd2hlbiB0aGUgb3BlcmF0aW9uCisgKiBmYWlscywgZXhjZXB0IHdoZW4gc3RvcHBpbmcgdGhlIHBpcGVsaW5lLgogICovCiBpbnQgb21hcDNpc3BfcGlwZWxpbmVfc2V0X3N0cmVhbShzdHJ1Y3QgaXNwX3BpcGVsaW5lICpwaXBlLAogCQkJCSBlbnVtIGlzcF9waXBlbGluZV9zdHJlYW1fc3RhdGUgc3RhdGUpCkBAIC04OTUsNyArOTA1LDkgQEAKIAkJcmV0ID0gaXNwX3BpcGVsaW5lX2Rpc2FibGUocGlwZSk7CiAJZWxzZQogCQlyZXQgPSBpc3BfcGlwZWxpbmVfZW5hYmxlKHBpcGUsIHN0YXRlKTsKLQlwaXBlLT5zdHJlYW1fc3RhdGUgPSBzdGF0ZTsKKworCWlmIChyZXQgPT0gMCB8fCBzdGF0ZSA9PSBJU1BfUElQRUxJTkVfU1RSRUFNX1NUT1BQRUQpCisJCXBpcGUtPnN0cmVhbV9zdGF0ZSA9IHN0YXRlOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTEyODMsNyArMTI5NSw3IEBACiAJCWNsayB8PSBJU1BDVFJMX1JTWl9DTEtfRU47CiAKIAkvKiBOT1RFOiBGb3IgQ0NEQyAmIFByZXZpZXcgc3VibW9kdWxlcywgd2UgbmVlZCB0byBhZmZlY3QgaW50ZXJuYWwKLQkgKiAgICAgICBSQU0gYXN3ZWxsLgorCSAqICAgICAgIFJBTSBhcyB3ZWxsLgogCSAqLwogCWlmIChpc3AtPnN1YmNsa19yZXNvdXJjZXMgJiBPTUFQM19JU1BfU1VCQ0xLX0NDREMpCiAJCWNsayB8PSBJU1BDVFJMX0NDRENfQ0xLX0VOIHwgSVNQQ1RSTF9DQ0RDX1JBTV9FTjsKQEAgLTE0MzEsNyArMTQ0Myw3IEBACiAgKiBJbmNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiB0aGUgSVNQLiBJZiB0aGUgZmlyc3QgcmVmZXJlbmNlIGlzIHRha2VuLAogICogZW5hYmxlIGNsb2NrcyBhbmQgcG93ZXItdXAgYWxsIHN1Ym1vZHVsZXMuCiAgKgotICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgSVNQIGRldmljZSBzdHJ1Y3R1cmUsIG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJlZC4KKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIElTUCBkZXZpY2Ugc3RydWN0dXJlLCBvciBOVUxMIGlmIGFuIGVycm9yIG9jY3VycmVkLgogICovCiBzdHJ1Y3QgaXNwX2RldmljZSAqb21hcDNpc3BfZ2V0KHN0cnVjdCBpc3BfZGV2aWNlICppc3ApCiB7CkBAIC0xNDgxLDYgKzE0OTMsMTAgQEAKIAlpZiAoLS1pc3AtPnJlZl9jb3VudCA9PSAwKSB7CiAJCWlzcF9kaXNhYmxlX2ludGVycnVwdHMoaXNwKTsKIAkJaXNwX3NhdmVfY3R4KGlzcCk7CisJCWlmIChpc3AtPm5lZWRzX3Jlc2V0KSB7CisJCQlpc3BfcmVzZXQoaXNwKTsKKwkJCWlzcC0+bmVlZHNfcmVzZXQgPSBmYWxzZTsKKwkJfQogCQlpc3BfZGlzYWJsZV9jbG9ja3MoaXNwKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZpc3AtPmlzcF9tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3AuaAppbmRleCBjZjUyMTRlLi4yNjIwYzQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwLmgKQEAgLTEzMiw3ICsxMzIsNiBAQAogCiAvKioKICAqIHN0cnVjdCBpc3BfcGFyYWxsZWxfcGxhdGZvcm1fZGF0YSAtIFBhcmFsbGVsIGludGVyZmFjZSBwbGF0Zm9ybSBkYXRhCi0gKiBAd2lkdGg6IFBhcmFsbGVsIGJ1cyB3aWR0aCBpbiBiaXRzICg4LCAxMCwgMTEgb3IgMTIpCiAgKiBAZGF0YV9sYW5lX3NoaWZ0OiBEYXRhIGxhbmUgc2hpZnRlcgogICoJCTAgLSBDQU1FWFRbMTM6MF0gLT4gQ0FNWzEzOjBdCiAgKgkJMSAtIENBTUVYVFsxMzoyXSAtPiBDQU1bMTE6MF0KQEAgLTE0Niw3ICsxNDUsNiBAQAogICoJCUlTUENUUkxfUEFSX0JSSURHRV9CRU5ESUFOIC0gQmlnIGVuZGlhbgogICovCiBzdHJ1Y3QgaXNwX3BhcmFsbGVsX3BsYXRmb3JtX2RhdGEgewotCXVuc2lnbmVkIGludCB3aWR0aDsKIAl1bnNpZ25lZCBpbnQgZGF0YV9sYW5lX3NoaWZ0OjI7CiAJdW5zaWduZWQgaW50IGNsa19wb2w6MTsKIAl1bnNpZ25lZCBpbnQgYnJpZGdlOjQ7CkBAIC0yNjIsNiArMjYwLDcgQEAKIAkvKiBJU1AgT2JqICovCiAJc3BpbmxvY2tfdCBzdGF0X2xvY2s7CS8qIGNvbW1vbiBsb2NrIGZvciBzdGF0aXN0aWMgZHJpdmVycyAqLwogCXN0cnVjdCBtdXRleCBpc3BfbXV0ZXg7CS8qIEZvciBoYW5kbGluZyByZWZfY291bnQgZmllbGQgKi8KKwlib29sIG5lZWRzX3Jlc2V0OwogCWludCBoYXNfY29udGV4dDsKIAlpbnQgcmVmX2NvdW50OwogCXVuc2lnbmVkIGludCBhdXRvaWRsZTsKQEAgLTMxMSwxMSArMzEwLDEyIEBACiAJCQkJIGVudW0gaXNwX3BpcGVsaW5lX3N0cmVhbV9zdGF0ZSBzdGF0ZSk7CiB2b2lkIG9tYXAzaXNwX2NvbmZpZ3VyZV9icmlkZ2Uoc3RydWN0IGlzcF9kZXZpY2UgKmlzcCwKIAkJCSAgICAgICBlbnVtIGNjZGNfaW5wdXRfZW50aXR5IGlucHV0LAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpc3BfcGFyYWxsZWxfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOworCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpc3BfcGFyYWxsZWxfcGxhdGZvcm1fZGF0YSAqcGRhdGEsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHNoaWZ0KTsKIAotI2RlZmluZSBJU1BfWENMS19OT05FCQkJLTEKLSNkZWZpbmUgSVNQX1hDTEtfQQkJCTAKLSNkZWZpbmUgSVNQX1hDTEtfQgkJCTEKKyNkZWZpbmUgSVNQX1hDTEtfTk9ORQkJCTAKKyNkZWZpbmUgSVNQX1hDTEtfQQkJCTEKKyNkZWZpbmUgSVNQX1hDTEtfQgkJCTIKIAogc3RydWN0IGlzcF9kZXZpY2UgKm9tYXAzaXNwX2dldChzdHJ1Y3QgaXNwX2RldmljZSAqaXNwKTsKIHZvaWQgb21hcDNpc3BfcHV0KHN0cnVjdCBpc3BfZGV2aWNlICppc3ApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BjY2RjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcGNjZGMuYwppbmRleCA1ZmY5ZDE0Li4zOWQ1MDFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcGNjZGMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcGNjZGMuYwpAQCAtNDMsNiArNDMsMTIgQEAKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjY2RjX2ZtdHNbXSA9IHsKIAlWNEwyX01CVVNfRk1UX1k4XzFYOCwKKwlWNEwyX01CVVNfRk1UX1kxMF8xWDEwLAorCVY0TDJfTUJVU19GTVRfWTEyXzFYMTIsCisJVjRMMl9NQlVTX0ZNVF9TR1JCRzhfMVg4LAorCVY0TDJfTUJVU19GTVRfU1JHR0I4XzFYOCwKKwlWNEwyX01CVVNfRk1UX1NCR0dSOF8xWDgsCisJVjRMMl9NQlVTX0ZNVF9TR0JSRzhfMVg4LAogCVY0TDJfTUJVU19GTVRfU0dSQkcxMF8xWDEwLAogCVY0TDJfTUJVU19GTVRfU1JHR0IxMF8xWDEwLAogCVY0TDJfTUJVU19GTVRfU0JHR1IxMF8xWDEwLApAQCAtMTExMCwyMSArMTExNiwzOCBAQAogCXN0cnVjdCBpc3BfcGFyYWxsZWxfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBOVUxMOwogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Vuc29yOwogCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKmZvcm1hdDsKKwljb25zdCBzdHJ1Y3QgaXNwX2Zvcm1hdF9pbmZvICpmbXRfaW5mbzsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0IGZtdF9zcmM7CisJdW5zaWduZWQgaW50IGRlcHRoX291dDsKKwl1bnNpZ25lZCBpbnQgZGVwdGhfaW4gPSAwOwogCXN0cnVjdCBtZWRpYV9wYWQgKnBhZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBzaGlmdDsKIAl1MzIgc3luX21vZGU7CiAJdTMyIGNjZGNfcGF0dGVybjsKIAotCWlmIChjY2RjLT5pbnB1dCA9PSBDQ0RDX0lOUFVUX1BBUkFMTEVMKSB7Ci0JCXBhZCA9IG1lZGlhX2VudGl0eV9yZW1vdGVfc291cmNlKCZjY2RjLT5wYWRzW0NDRENfUEFEX1NJTktdKTsKLQkJc2Vuc29yID0gbWVkaWFfZW50aXR5X3RvX3Y0bDJfc3ViZGV2KHBhZC0+ZW50aXR5KTsKKwlwYWQgPSBtZWRpYV9lbnRpdHlfcmVtb3RlX3NvdXJjZSgmY2NkYy0+cGFkc1tDQ0RDX1BBRF9TSU5LXSk7CisJc2Vuc29yID0gbWVkaWFfZW50aXR5X3RvX3Y0bDJfc3ViZGV2KHBhZC0+ZW50aXR5KTsKKwlpZiAoY2NkYy0+aW5wdXQgPT0gQ0NEQ19JTlBVVF9QQVJBTExFTCkKIAkJcGRhdGEgPSAmKChzdHJ1Y3QgaXNwX3Y0bDJfc3ViZGV2c19ncm91cCAqKXNlbnNvci0+aG9zdF9wcml2KQogCQkJLT5idXMucGFyYWxsZWw7CisKKwkvKiBDb21wdXRlIHNoaWZ0IHZhbHVlIGZvciBsYW5lIHNoaWZ0ZXIgdG8gY29uZmlndXJlIHRoZSBicmlkZ2UuICovCisJZm10X3NyYy5wYWQgPSBwYWQtPmluZGV4OworCWZtdF9zcmMud2hpY2ggPSBWNEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFOworCWlmICghdjRsMl9zdWJkZXZfY2FsbChzZW5zb3IsIHBhZCwgZ2V0X2ZtdCwgTlVMTCwgJmZtdF9zcmMpKSB7CisJCWZtdF9pbmZvID0gb21hcDNpc3BfdmlkZW9fZm9ybWF0X2luZm8oZm10X3NyYy5mb3JtYXQuY29kZSk7CisJCWRlcHRoX2luID0gZm10X2luZm8tPmJwcDsKIAl9CiAKLQlvbWFwM2lzcF9jb25maWd1cmVfYnJpZGdlKGlzcCwgY2NkYy0+aW5wdXQsIHBkYXRhKTsKKwlmbXRfaW5mbyA9IG9tYXAzaXNwX3ZpZGVvX2Zvcm1hdF9pbmZvCisJCShpc3AtPmlzcF9jY2RjLmZvcm1hdHNbQ0NEQ19QQURfU0lOS10uY29kZSk7CisJZGVwdGhfb3V0ID0gZm10X2luZm8tPmJwcDsKIAotCWNjZGMtPnN5bmNpZi5kYXRzeiA9IHBkYXRhID8gcGRhdGEtPndpZHRoIDogMTA7CisJc2hpZnQgPSBkZXB0aF9pbiAtIGRlcHRoX291dDsKKwlvbWFwM2lzcF9jb25maWd1cmVfYnJpZGdlKGlzcCwgY2NkYy0+aW5wdXQsIHBkYXRhLCBzaGlmdCk7CisKKwljY2RjLT5zeW5jaWYuZGF0c3ogPSBkZXB0aF9vdXQ7CiAJY2NkY19jb25maWdfc3luY19pZihjY2RjLCAmY2NkYy0+c3luY2lmKTsKIAogCS8qIENDRENfUEFEX1NJTksgKi8KQEAgLTEzMzgsNyArMTM2MSw3IEBACiAgKiBAY2NkYzogUG9pbnRlciB0byBJU1AgQ0NEQyBkZXZpY2UuCiAgKiBAZXZlbnQ6IFBvaW50aW5nIHdoaWNoIGV2ZW50IHRyaWdnZXIgaGFuZGxlcgogICoKLSAqIFJldHVybiAxIHdoZW4gdGhlIGV2ZW50IGFuZCBzdG9wcGluZyByZXF1ZXN0IGNvbWJpbmF0aW9uIGlzIHNhdGlzZnlpZWQsCisgKiBSZXR1cm4gMSB3aGVuIHRoZSBldmVudCBhbmQgc3RvcHBpbmcgcmVxdWVzdCBjb21iaW5hdGlvbiBpcyBzYXRpc2ZpZWQsCiAgKiB6ZXJvIG90aGVyd2lzZS4KICAqLwogc3RhdGljIGludCBfX2NjZGNfaGFuZGxlX3N0b3BwaW5nKHN0cnVjdCBpc3BfY2NkY19kZXZpY2UgKmNjZGMsIHUzMiBldmVudCkKQEAgLTE2MTgsNyArMTY0MSw3IEBACiAKIAljY2RjX3NldF9vdXRhZGRyKGNjZGMsIGJ1ZmZlci0+aXNwX2FkZHIpOwogCi0JLyogV2Ugbm93IGhhdmUgYSBidWZmZXIgcXVldWVkIG9uIHRoZSBvdXRwdXQsIHJlc3RhcnQgdGhlIHBpcGVsaW5lIGluCisJLyogV2Ugbm93IGhhdmUgYSBidWZmZXIgcXVldWVkIG9uIHRoZSBvdXRwdXQsIHJlc3RhcnQgdGhlIHBpcGVsaW5lCiAJICogb24gdGhlIG5leHQgQ0NEQyBpbnRlcnJ1cHQgaWYgcnVubmluZyBpbiBjb250aW51b3VzIG1vZGUgKG9yIHdoZW4KIAkgKiBzdGFydGluZyB0aGUgc3RyZWFtKS4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwY2NkYy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BjY2RjLmgKaW5kZXggZDQwM2FmNS4uNDgzYTE5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BjY2RjLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BjY2RjLmgKQEAgLTE1MCw3ICsxNTAsNyBAQAogICogQGlucHV0OiBBY3RpdmUgaW5wdXQKICAqIEBvdXRwdXQ6IEFjdGl2ZSBvdXRwdXRzCiAgKiBAdmlkZW9fb3V0OiBPdXRwdXQgdmlkZW8gbm9kZQotICogQGVycm9yOiBBIGhhcmR3YXJlIGVycm9yIG9jY3VyZWQgZHVyaW5nIGNhcHR1cmUKKyAqIEBlcnJvcjogQSBoYXJkd2FyZSBlcnJvciBvY2N1cnJlZCBkdXJpbmcgY2FwdHVyZQogICogQGFsYXc6IEEtbGF3IGNvbXByZXNzaW9uIGVuYWJsZWQgKDEpIG9yIGRpc2FibGVkICgwKQogICogQGxwZjogTG93IHBhc3MgZmlsdGVyIGVuYWJsZWQgKDEpIG9yIGRpc2FibGVkICgwKQogICogQG9iY2xhbXA6IE9wdGljYWwtYmxhY2sgY2xhbXAgZW5hYmxlZCAoMSkgb3IgZGlzYWJsZWQgKDApCkBAIC0xNjMsNyArMTYzLDcgQEAKICAqIEBzaGFkb3dfdXBkYXRlOiBDb250cm9scyB1cGRhdGUgaW4gcHJvZ3Jlc3MgYnkgdXNlcnNwYWNlCiAgKiBAc3luY2lmOiBJbnRlcmZhY2Ugc3luY2hyb25pemF0aW9uIGNvbmZpZ3VyYXRpb24KICAqIEB2cGNmZzogVmlkZW8gcG9ydCBjb25maWd1cmF0aW9uCi0gKiBAdW5kZXJydW46IEEgYnVmZmVyIHVuZGVycnVuIG9jY3VyZWQgYW5kIGEgbmV3IGJ1ZmZlciBoYXMgYmVlbiBxdWV1ZWQKKyAqIEB1bmRlcnJ1bjogQSBidWZmZXIgdW5kZXJydW4gb2NjdXJyZWQgYW5kIGEgbmV3IGJ1ZmZlciBoYXMgYmVlbiBxdWV1ZWQKICAqIEBzdGF0ZTogU3RyZWFtaW5nIHN0YXRlCiAgKiBAbG9jazogU2VyaWFsaXplcyBzaGFkb3dfdXBkYXRlIHdpdGggaW50ZXJydXB0IGhhbmRsZXIKICAqIEB3YWl0OiBXYWl0IHF1ZXVlIHVzZWQgdG8gc3RvcCB0aGUgbW9kdWxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcGNjcDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwY2NwMi5jCmluZGV4IDBlZmVmMmUuLjBlMTZjYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwY2NwMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwY2NwMi5jCkBAIC03NzIsNyArNzcyLDcgQEAKICAqIEBzZCAgICA6IHBvaW50ZXIgdG8gdjRsMiBzdWJkZXYgc3RydWN0dXJlCiAgKiBAZmggICAgOiBWNEwyIHN1YmRldiBmaWxlIGhhbmRsZQogICogQGZtdCAgIDogcG9pbnRlciB0byB2NGwyIHN1YmRldiBmb3JtYXQgc3RydWN0dXJlCi0gKiByZXR1cm4gLUVJTlZBTCBvciB6ZXJvIG9uIHN1Y2VzcworICogcmV0dXJuIC1FSU5WQUwgb3IgemVybyBvbiBzdWNjZXNzCiAgKi8KIHN0YXRpYyBpbnQgY2NwMl9nZXRfZm9ybWF0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3N1YmRldl9maCAqZmgsCiAJCQkgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0ICpmbXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcGNzaTIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwY3NpMi5jCmluZGV4IGZiNTAzZjMuLjY5MTYxYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwY3NpMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwY3NpMi5jCkBAIC05NjksNyArOTY5LDcgQEAKICAqIEBzZCA6IHBvaW50ZXIgdG8gdjRsMiBzdWJkZXYgc3RydWN0dXJlCiAgKiBAZmggOiBWNEwyIHN1YmRldiBmaWxlIGhhbmRsZQogICogQGZtdDogcG9pbnRlciB0byB2NGwyIHN1YmRldiBmb3JtYXQgc3RydWN0dXJlCi0gKiByZXR1cm4gLUVJTlZBTCBvciB6ZXJvIG9uIHN1Y2VzcworICogcmV0dXJuIC1FSU5WQUwgb3IgemVybyBvbiBzdWNjZXNzCiAgKi8KIHN0YXRpYyBpbnQgY3NpMl9nZXRfZm9ybWF0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3N1YmRldl9maCAqZmgsCiAJCQkgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0ICpmbXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHByZXZpZXcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwcHJldmlldy5jCmluZGV4IGJhZjkzNzQuLmFiYTUzN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwcHJldmlldy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwcHJldmlldy5jCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiaXNwcmVnLmgiCiAjaW5jbHVkZSAiaXNwcHJldmlldy5oIgogCi0vKiBEZWZhdWx0IHZhbHVlcyBpbiBPZmZpY2UgRmxvdXJlc2NlbnQgTGlnaHQgZm9yIFJHQnRvUkdCIEJsZW5kaW5nICovCisvKiBEZWZhdWx0IHZhbHVlcyBpbiBPZmZpY2UgRmx1b3Jlc2NlbnQgTGlnaHQgZm9yIFJHQnRvUkdCIEJsZW5kaW5nICovCiBzdGF0aWMgc3RydWN0IG9tYXAzaXNwX3ByZXZfcmdidG9yZ2IgZmxyX3JnYjJyZ2IgPSB7CiAJewkvKiBSR0ItUkdCIE1hdHJpeCAqLwogCQl7MHgwMUUyLCAweDBGMzAsIDB4MEZFRX0sCkBAIC00NCw3ICs0NCw3IEBACiAJezB4MDAwMCwgMHgwMDAwLCAweDAwMDB9CiB9OwogCi0vKiBEZWZhdWx0IHZhbHVlcyBpbiBPZmZpY2UgRmxvdXJlc2NlbnQgTGlnaHQgZm9yIFJHQiB0byBZVVYgQ29udmVyc2lvbiovCisvKiBEZWZhdWx0IHZhbHVlcyBpbiBPZmZpY2UgRmx1b3Jlc2NlbnQgTGlnaHQgZm9yIFJHQiB0byBZVVYgQ29udmVyc2lvbiovCiBzdGF0aWMgc3RydWN0IG9tYXAzaXNwX3ByZXZfY3NjIGZscl9wcmV2X2NzYyA9IHsKIAl7CS8qIENTQyBDb2VmIE1hdHJpeCAqLwogCQl7NjYsIDEyOSwgMjV9LApAQCAtNTQsMjIgKzU0LDIyIEBACiAJezB4MCwgMHgwLCAweDB9CiB9OwogCi0vKiBEZWZhdWx0IHZhbHVlcyBpbiBPZmZpY2UgRmxvdXJlc2NlbnQgTGlnaHQgZm9yIENGQSBHcmFkaWVudCovCisvKiBEZWZhdWx0IHZhbHVlcyBpbiBPZmZpY2UgRmx1b3Jlc2NlbnQgTGlnaHQgZm9yIENGQSBHcmFkaWVudCovCiAjZGVmaW5lIEZMUl9DRkFfR1JBRFRIUlNfSE9SWgkweDI4CiAjZGVmaW5lIEZMUl9DRkFfR1JBRFRIUlNfVkVSVAkweDI4CiAKLS8qIERlZmF1bHQgdmFsdWVzIGluIE9mZmljZSBGbG91cmVzY2VudCBMaWdodCBmb3IgQ2hyb21hIFN1cHByZXNzaW9uKi8KKy8qIERlZmF1bHQgdmFsdWVzIGluIE9mZmljZSBGbHVvcmVzY2VudCBMaWdodCBmb3IgQ2hyb21hIFN1cHByZXNzaW9uKi8KICNkZWZpbmUgRkxSX0NTVVBfR0FJTgkJMHgwRAogI2RlZmluZSBGTFJfQ1NVUF9USFJFUwkJMHhFQgogCi0vKiBEZWZhdWx0IHZhbHVlcyBpbiBPZmZpY2UgRmxvdXJlc2NlbnQgTGlnaHQgZm9yIE5vaXNlIEZpbHRlciovCisvKiBEZWZhdWx0IHZhbHVlcyBpbiBPZmZpY2UgRmx1b3Jlc2NlbnQgTGlnaHQgZm9yIE5vaXNlIEZpbHRlciovCiAjZGVmaW5lIEZMUl9ORl9TVFJHVEgJCTB4MDMKIAogLyogRGVmYXVsdCB2YWx1ZXMgZm9yIFdoaXRlIEJhbGFuY2UgKi8KICNkZWZpbmUgRkxSX1dCQUxfREdBSU4JCTB4MTAwCiAjZGVmaW5lIEZMUl9XQkFMX0NPRUYJCTB4MjAKIAotLyogRGVmYXVsdCB2YWx1ZXMgaW4gT2ZmaWNlIEZsb3VyZXNjZW50IExpZ2h0IGZvciBCbGFjayBBZGp1c3RtZW50Ki8KKy8qIERlZmF1bHQgdmFsdWVzIGluIE9mZmljZSBGbHVvcmVzY2VudCBMaWdodCBmb3IgQmxhY2sgQWRqdXN0bWVudCovCiAjZGVmaW5lIEZMUl9CTEtBREpfQkxVRQkJMHgwCiAjZGVmaW5lIEZMUl9CTEtBREpfR1JFRU4JMHgwCiAjZGVmaW5lIEZMUl9CTEtBREpfUkVECQkweDAKQEAgLTEzNyw3ICsxMzcsNyBAQAogICogQGVuYWJsZTogMSAtIEVuYWJsZSwgMCAtIERpc2FibGUKICAqCiAgKiBOT1RFOiBQUlZfV1NEUl9BRERSIGFuZCBQUlZfV0FERF9PRkZTRVQgbXVzdCBiZSBzZXQgYWxzbwotICogVGhlIHByb2NjZXNzIGlzIGFwcGxpZWQgZm9yIGVhY2ggY2FwdHVyZWQgZnJhbWUuCisgKiBUaGUgcHJvY2VzcyBpcyBhcHBsaWVkIGZvciBlYWNoIGNhcHR1cmVkIGZyYW1lLgogICovCiBzdGF0aWMgdm9pZAogcHJldmlld19lbmFibGVfZHJrZnJhbWVfY2FwdHVyZShzdHJ1Y3QgaXNwX3ByZXZfZGV2aWNlICpwcmV2LCB1OCBlbmFibGUpCkBAIC0xNTcsNyArMTU3LDcgQEAKICAqIEBlbmFibGU6IDEgLSBBY3F1aXJlcyBtZW1vcnkgYmFuZHdpZHRoIHNpbmNlIHRoZSBwaXhlbHMgaW4gZWFjaCBmcmFtZSBpcwogICogICAgICAgICAgc3VidHJhY3RlZCB3aXRoIHRoZSBwaXhlbHMgaW4gdGhlIGN1cnJlbnQgZnJhbWUuCiAgKgotICogVGhlIHByb2NjZXNzIGlzIGFwcGxpZWQgZm9yIGVhY2ggY2FwdHVyZWQgZnJhbWUuCisgKiBUaGUgcHJvY2VzcyBpcyBhcHBsaWVkIGZvciBlYWNoIGNhcHR1cmVkIGZyYW1lLgogICovCiBzdGF0aWMgdm9pZAogcHJldmlld19lbmFibGVfZHJrZnJhbWUoc3RydWN0IGlzcF9wcmV2X2RldmljZSAqcHJldiwgdTggZW5hYmxlKQpAQCAtNzU1LDcgKzc1NSw3IEBACiAgKiBAY29uZmlncyAtIHBvaW50ZXIgdG8gdXBkYXRlIGNvbmZpZyBzdHJ1Y3R1cmUuCiAgKiBAY29uZmlnIC0gcmV0dXJuIHBvaW50ZXIgdG8gYXBwcm9wcmlhdGUgc3RydWN0dXJlIGZpZWxkLgogICogQGJpdCAtIGZvciB3aGljaCBmZWF0dXJlIHRvIHJldHVybiBwb2ludGVycy4KLSAqIFJldHVybiBzaXplIG9mIGNvcmVzcG9uZGluZyBwcmV2X3BhcmFtcyBtZW1iZXIKKyAqIFJldHVybiBzaXplIG9mIGNvcnJlc3BvbmRpbmcgcHJldl9wYXJhbXMgbWVtYmVyCiAgKi8KIHN0YXRpYyB1MzIKIF9fcHJldmlld19nZXRfcHRycyhzdHJ1Y3QgcHJldl9wYXJhbXMgKnBhcmFtcywgdm9pZCAqKnBhcmFtLApAQCAtMTUyOCw3ICsxNTI4LDcgQEAKICAqIHByZXZpZXdfc2V0X3N0cmVhbSAtIEVuYWJsZS9EaXNhYmxlIHN0cmVhbWluZyBvbiBwcmV2aWV3IHN1YmRldgogICogQHNkICAgIDogcG9pbnRlciB0byB2NGwyIHN1YmRldiBzdHJ1Y3R1cmUKICAqIEBlbmFibGU6IDEgPT0gRW5hYmxlLCAwID09IERpc2FibGUKLSAqIHJldHVybiAtRUlOVkFMIG9yIHplcm8gb24gc3VjZXNzCisgKiByZXR1cm4gLUVJTlZBTCBvciB6ZXJvIG9uIHN1Y2Nlc3MKICAqLwogc3RhdGljIGludCBwcmV2aWV3X3NldF9zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKIHsKQEAgLTE3ODAsNyArMTc4MCw3IEBACiAgKiBAc2QgOiBwb2ludGVyIHRvIHY0bDIgc3ViZGV2IHN0cnVjdHVyZQogICogQGZoIDogVjRMMiBzdWJkZXYgZmlsZSBoYW5kbGUKICAqIEBmbXQ6IHBvaW50ZXIgdG8gdjRsMiBzdWJkZXYgZm9ybWF0IHN0cnVjdHVyZQotICogcmV0dXJuIC1FSU5WQUwgb3IgemVybyBvbiBzdWNlc3MKKyAqIHJldHVybiAtRUlOVkFMIG9yIHplcm8gb24gc3VjY2VzcwogICovCiBzdGF0aWMgaW50IHByZXZpZXdfZ2V0X2Zvcm1hdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9zdWJkZXZfZmggKmZoLAogCQkJICAgICAgc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCAqZm10KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BwcmV2aWV3LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHByZXZpZXcuaAppbmRleCBmMmQ2M2NhLi5mYTk0M2JkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHByZXZpZXcuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHByZXZpZXcuaApAQCAtMTYzLDcgKzE2Myw3IEBACiAgKiBAb3V0cHV0OiBCaXRtYXNrIG9mIHRoZSBhY3RpdmUgb3V0cHV0CiAgKiBAdmlkZW9faW46IElucHV0IHZpZGVvIGVudGl0eQogICogQHZpZGVvX291dDogT3V0cHV0IHZpZGVvIGVudGl0eQotICogQGVycm9yOiBBIGhhcmR3YXJlIGVycm9yIG9jY3VyZWQgZHVyaW5nIGNhcHR1cmUKKyAqIEBlcnJvcjogQSBoYXJkd2FyZSBlcnJvciBvY2N1cnJlZCBkdXJpbmcgY2FwdHVyZQogICogQHBhcmFtczogTW9kdWxlIGNvbmZpZ3VyYXRpb24gZGF0YQogICogQHNoYWRvd191cGRhdGU6IElmIHNldCwgdXBkYXRlIHRoZSBoYXJkd2FyZSBjb25maWd1cmVkIGluIHRoZSBuZXh0IGludGVycnVwdAogICogQHVuZGVycnVuOiBXaGV0aGVyIHRoZSBwcmV2aWV3IGVudGl0eSBoYXMgcXVldWVkIGJ1ZmZlcnMgb24gdGhlIG91dHB1dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BxdWV1ZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BxdWV1ZS5jCmluZGV4IDhmZGRjNTguLjljMzE3MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwcXVldWUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHF1ZXVlLmMKQEAgLTMzOSw3ICszMzksNyBAQAogCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKIAlpZiAocmV0ICE9IGJ1Zi0+bnBhZ2VzKSB7Ci0JCWJ1Zi0+bnBhZ2VzID0gcmV0OworCQlidWYtPm5wYWdlcyA9IHJldCA8IDAgPyAwIDogcmV0OwogCQlpc3BfdmlkZW9fYnVmZmVyX2NsZWFudXAoYnVmKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQpAQCAtNDA4LDggKzQwOCw4IEBACiAgKiBpc3BfdmlkZW9fYnVmZmVyX3ByZXBhcmVfdm1fZmxhZ3MgLSBHZXQgVk1BIGZsYWdzIGZvciBhIHVzZXJzcGFjZSBhZGRyZXNzCiAgKgogICogVGhpcyBmdW5jdGlvbiBsb2NhdGVzIHRoZSBWTUFzIGZvciB0aGUgYnVmZmVyJ3MgdXNlcnNwYWNlIGFkZHJlc3MgYW5kIGNoZWNrcwotICogdGhhdCB0aGVpciBmbGFncyBtYXRjaC4gVGhlIG9ubGZsYWcgdGhhdCB3ZSBuZWVkIHRvIGNhcmUgZm9yIGF0IHRoZSBtb21lbnQgaXMKLSAqIFZNX1BGTk1BUC4KKyAqIHRoYXQgdGhlaXIgZmxhZ3MgbWF0Y2guIFRoZSBvbmx5IGZsYWcgdGhhdCB3ZSBuZWVkIHRvIGNhcmUgZm9yIGF0IHRoZSBtb21lbnQKKyAqIGlzIFZNX1BGTk1BUC4KICAqCiAgKiBUaGUgYnVmZmVyIHZtX2ZsYWdzIGZpZWxkIGlzIHNldCB0byB0aGUgZmlyc3QgVk1BIGZsYWdzLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwcXVldWUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwcXVldWUuaAppbmRleCAyNTFkZTNlLi45MmM1YTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHF1ZXVlLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BxdWV1ZS5oCkBAIC00Niw5ICs0Niw5IEBACiAgKglkZXZpY2UgeWV0LgogICogQElTUF9CVUZfU1RBVEVfQUNUSVZFOiBUaGUgYnVmZmVyIGlzIGluIHVzZSBmb3IgYW4gYWN0aXZlIHZpZGVvIHRyYW5zZmVyLgogICogQElTUF9CVUZfU1RBVEVfRVJST1I6IFRoZSBkZXZpY2UgaXMgZG9uZSB3aXRoIHRoZSBidWZmZXIgYW5kIGFuIGVycm9yCi0gKglvY2N1cmVkLiBGb3IgY2FwdHVyZSBkZXZpY2UgdGhlIGJ1ZmZlciBsaWtlbHkgY29udGFpbnMgY29ycnVwdGVkIGRhdGEgb3IKKyAqCW9jY3VycmVkLiBGb3IgY2FwdHVyZSBkZXZpY2UgdGhlIGJ1ZmZlciBsaWtlbHkgY29udGFpbnMgY29ycnVwdGVkIGRhdGEgb3IKICAqCW5vIGRhdGEgYXQgYWxsLgotICogQElTUF9CVUZfU1RBVEVfRE9ORTogVGhlIGRldmljZSBpcyBkb25lIHdpdGggdGhlIGJ1ZmZlciBhbmQgbm8gZXJyb3Igb2NjdXJlZC4KKyAqIEBJU1BfQlVGX1NUQVRFX0RPTkU6IFRoZSBkZXZpY2UgaXMgZG9uZSB3aXRoIHRoZSBidWZmZXIgYW5kIG5vIGVycm9yIG9jY3VycmVkLgogICoJRm9yIGNhcHR1cmUgZGV2aWNlcyB0aGUgYnVmZmVyIGNvbnRhaW5zIHZhbGlkIGRhdGEuCiAgKi8KIGVudW0gaXNwX3ZpZGVvX2J1ZmZlcl9zdGF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHJlc2l6ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwcmVzaXplci5jCmluZGV4IDc1ZDM5YjEuLjBiYjBmOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwcmVzaXplci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwcmVzaXplci5jCkBAIC03MTQsMTkgKzcxNCw1MCBAQAogICogaXcgYW5kIGloIGFyZSB0aGUgaW5wdXQgd2lkdGggYW5kIGhlaWdodCBhZnRlciBjcm9wcGluZy4gVGhvc2UgZXF1YXRpb25zIG5lZWQKICAqIHRvIGJlIHNhdGlzZmllZCBleGFjdGx5IGZvciB0aGUgcmVzaXplciB0byB3b3JrIGNvcnJlY3RseS4KICAqCi0gKiBSZXZlcnRpbmcgdGhlIGVxdWF0aW9ucywgd2UgY2FuIGNvbXB1dGUgdGhlIHJlc2l6aW5nIHJhdGlvcyB3aXRoCisgKiBUaGUgZXF1YXRpb25zIGNhbid0IGJlIGVhc2lseSByZXZlcnRlZCwgYXMgdGhlID4+IDggb3BlcmF0aW9uIGlzIG5vdCBsaW5lYXIuCisgKiBJbiBhZGRpdGlvbiwgbm90IGFsbCBpbnB1dCBzaXplcyBjYW4gYmUgYWNoaWV2ZWQgZm9yIGEgZ2l2ZW4gb3V0cHV0IHNpemUuIFRvCisgKiBnZXQgdGhlIGhpZ2hlc3QgaW5wdXQgc2l6ZSBsb3dlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSByZXF1ZXN0ZWQgaW5wdXQgc2l6ZSwKKyAqIHdlIG5lZWQgdG8gY29tcHV0ZSB0aGUgaGlnaGVzdCByZXNpemluZyByYXRpbyB0aGF0IHNhdGlzZmllcyB0aGUgZm9sbG93aW5nCisgKiBpbmVxdWFsaXR5ICh0YWtpbmcgdGhlIDQtdGFwIG1vZGUgd2lkdGggZXF1YXRpb24gYXMgYW4gZXhhbXBsZSkKKyAqCisgKglpdyA+PSAoMzIgKiBzcGggKyAob3cgLSAxKSAqIGhyc3ogKyAxNikgPj4gOCAtIDcKKyAqCisgKiAod2hlcmUgaXcgaXMgdGhlIHJlcXVlc3RlZCBpbnB1dCB3aWR0aCkgd2hpY2ggY2FuIGJlIHJld3JpdHRlbiBhcworICoKKyAqCSAgaXcgLSA3ICAgICAgICAgICAgPj0gKDMyICogc3BoICsgKG93IC0gMSkgKiBocnN6ICsgMTYpID4+IDgKKyAqCSAoaXcgLSA3KSA8PCA4ICAgICAgPj0gIDMyICogc3BoICsgKG93IC0gMSkgKiBocnN6ICsgMTYgLSBiCisgKgkoKGl3IC0gNykgPDwgOCkgKyBiID49ICAzMiAqIHNwaCArIChvdyAtIDEpICogaHJzeiArIDE2CisgKgorICogd2hlcmUgYiBpcyB0aGUgdmFsdWUgb2YgdGhlIDggbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB0aGUgcmlnaHQgaGFuZCBzaWRlCisgKiBleHByZXNzaW9uIG9mIHRoZSBsYXN0IGluZXF1YWxpdHkuIFRoZSBoaWdoZXN0IHJlc2l6aW5nIHJhdGlvIHZhbHVlIHdpbGwgYmUKKyAqIGFjaGlldmVkIHdoZW4gYiBpcyBlcXVhbCB0byBpdHMgbWF4aW11bSB2YWx1ZSBvZiAyNTUuIFRoYXQgcmVzaXppbmcgcmF0aW8KKyAqIHZhbHVlIHdpbGwgc3RpbGwgc2F0aXNmeSB0aGUgb3JpZ2luYWwgaW5lcXVhbGl0eSwgYXMgYiB3aWxsIGRpc2FwcGVhciB3aGVuCisgKiB0aGUgZXhwcmVzc2lvbiB3aWxsIGJlIHNoaWZ0ZWQgcmlnaHQgYnkgOC4KKyAqCisgKiBUaGUgcmV2ZXJ0ZWQgdGhlIGVxdWF0aW9ucyB0aHVzIGJlY29tZQogICoKICAqIC0gOC1waGFzZSwgNC10YXAgbW9kZQotICoJaHJzeiA9ICgoaXcgLSA3KSAqIDI1NiAtIDE2IC0gMzIgKiBzcGgpIC8gKG93IC0gMSkKLSAqCXZyc3ogPSAoKGloIC0gNCkgKiAyNTYgLSAxNiAtIDMyICogc3B2KSAvIChvaCAtIDEpCisgKglocnN6ID0gKChpdyAtIDcpICogMjU2ICsgMjU1IC0gMTYgLSAzMiAqIHNwaCkgLyAob3cgLSAxKQorICoJdnJzeiA9ICgoaWggLSA0KSAqIDI1NiArIDI1NSAtIDE2IC0gMzIgKiBzcHYpIC8gKG9oIC0gMSkKICAqIC0gNC1waGFzZSwgNy10YXAgbW9kZQotICoJaHJzeiA9ICgoaXcgLSA3KSAqIDI1NiAtIDMyIC0gNjQgKiBzcGgpIC8gKG93IC0gMSkKLSAqCXZyc3ogPSAoKGloIC0gNykgKiAyNTYgLSAzMiAtIDY0ICogc3B2KSAvIChvaCAtIDEpCisgKglocnN6ID0gKChpdyAtIDcpICogMjU2ICsgMjU1IC0gMzIgLSA2NCAqIHNwaCkgLyAob3cgLSAxKQorICoJdnJzeiA9ICgoaWggLSA3KSAqIDI1NiArIDI1NSAtIDMyIC0gNjQgKiBzcHYpIC8gKG9oIC0gMSkKICAqCi0gKiBUaGUgcmF0aW9zIGFyZSBpbnRlZ2VyIHZhbHVlcywgYW5kIG11c3QgYmUgcm91bmRlZCBkb3duIHRvIGVuc3VyZSB0aGF0IHRoZQotICogY3JvcHBlZCBpbnB1dCBzaXplIGlzIG5vdCBiaWdnZXIgdGhhbiB0aGUgdW5jcm9wcGVkIGlucHV0IHNpemUuIEFzIHRoZSByYXRpbwotICogaW4gNy10YXAgbW9kZSBpcyBhbHdheXMgc21hbGxlciB0aGFuIHRoZSByYXRpbyBpbiA0LXRhcCBtb2RlLCB3ZSBjYW4gdXNlIHRoZQotICogNy10YXAgbW9kZSBlcXVhdGlvbnMgdG8gY29tcHV0ZSBhIHJhdGlvIGFwcHJveGltYXRpb24uCisgKiBUaGUgcmF0aW9zIGFyZSBpbnRlZ2VyIHZhbHVlcywgYW5kIGFyZSByb3VuZGVkIGRvd24gdG8gZW5zdXJlIHRoYXQgdGhlCisgKiBjcm9wcGVkIGlucHV0IHNpemUgaXMgbm90IGJpZ2dlciB0aGFuIHRoZSB1bmNyb3BwZWQgaW5wdXQgc2l6ZS4KKyAqCisgKiBBcyB0aGUgbnVtYmVyIG9mIHBoYXNlcy90YXBzLCB1c2VkIHRvIHNlbGVjdCB0aGUgY29ycmVjdCBlcXVhdGlvbnMgdG8gY29tcHV0ZQorICogdGhlIHJhdGlvLCBkZXBlbmRzIG9uIHRoZSByYXRpbywgd2Ugc3RhcnQgd2l0aCB0aGUgNC10YXAgbW9kZSBlcXVhdGlvbnMgdG8KKyAqIGNvbXB1dGUgYW4gYXBwcm94aW1hdGlvbiBvZiB0aGUgcmF0aW8sIGFuZCBzd2l0Y2ggdG8gdGhlIDctdGFwIG1vZGUgZXF1YXRpb25zCisgKiBpZiB0aGUgYXBwcm94aW1hdGlvbiBpcyBoaWdoZXIgdGhhbiB0aGUgcmF0aW8gdGhyZXNob2xkLgorICoKKyAqIEFzIHRoZSA3LXRhcCBtb2RlIGVxdWF0aW9ucyB3aWxsIHJldHVybiBhIHJhdGlvIHNtYWxsZXIgdGhhbiBvciBlcXVhbCB0byB0aGUKKyAqIDQtdGFwIG1vZGUgZXF1YXRpb25zLCB0aGUgcmVzdWx0aW5nIHJhdGlvIGNvdWxkIGJlY29tZSBsb3dlciB0aGFuIG9yIGVxdWFsIHRvCisgKiB0aGUgcmF0aW8gdGhyZXNob2xkLiBUaGlzICdlcXVhdGlvbnMgbG9vcCcgaXNuJ3QgYW4gaXNzdWUgYXMgbG9uZyBhcyB0aGUKKyAqIGNvcnJlY3QgZXF1YXRpb25zIGFyZSB1c2VkIHRvIGNvbXB1dGUgdGhlIGZpbmFsIGlucHV0IHNpemUuIFN0YXJ0aW5nIHdpdGggdGhlCisgKiA0LXRhcCBtb2RlIGVxdWF0aW9ucyBlbnN1cmUgdGhhdCwgaW4gY2FzZSBvZiB2YWx1ZXMgcmVzdWx0aW5nIGluIGEgJ3JhdGlvCisgKiBsb29wJywgdGhlIHNtYWxsZXN0IG9mIHRoZSByYXRpbyB2YWx1ZXMgd2lsbCBiZSB1c2VkLCBuZXZlciBleGNlZWRpbmcgdGhlCisgKiByZXF1ZXN0ZWQgaW5wdXQgc2l6ZS4KICAqCiAgKiBXZSBmaXJzdCBjbGFtcCB0aGUgb3V0cHV0IHNpemUgYWNjb3JkaW5nIHRvIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZSB0byBhdm9pZAogICogYXV0by1jcm9wcGluZyB0aGUgaW5wdXQgbW9yZSB0aGFuIHJlcXVpcmVkIHRvIHNhdGlzZnkgdGhlIFRSTSBlcXVhdGlvbnMuIFRoZQpAQCAtNzUxLDcgKzc4Miw3IEBACiAgKiByYXRpbyB3aWxsIHRodXMgcmVzdWx0IGluIGEgcmVzaXppbmcgZmFjdG9yIHNsaWdodGx5IGxhcmdlciB0aGFuIHRoZQogICogcmVxdWVzdGVkIHZhbHVlLgogICoKLSAqIFRvIGFjY29tb2RhdGUgdGhhdCwgYW5kIG1ha2Ugc3VyZSB0aGUgVFJNIGVxdWF0aW9ucyBhcmUgc2F0aXNmaWVkIGV4YWN0bHksIHdlCisgKiBUbyBhY2NvbW1vZGF0ZSB0aGF0LCBhbmQgbWFrZSBzdXJlIHRoZSBUUk0gZXF1YXRpb25zIGFyZSBzYXRpc2ZpZWQgZXhhY3RseSwgd2UKICAqIGNvbXB1dGUgdGhlIGlucHV0IGNyb3AgcmVjdGFuZ2xlIGFzIHRoZSBsYXN0IHN0ZXAuCiAgKgogICogQXMgaWYgdGhlIHNpdHVhdGlvbiB3YXNuJ3QgY29tcGxleCBlbm91Z2gsIHRoZSBtYXhpbXVtIG91dHB1dCB3aWR0aCBkZXBlbmRzCkBAIC03NzUsNiArODA2LDggQEAKIAl1bnNpZ25lZCBpbnQgbWF4X3dpZHRoOwogCXVuc2lnbmVkIGludCBtYXhfaGVpZ2h0OwogCXVuc2lnbmVkIGludCB3aWR0aF9hbGlnbm1lbnQ7CisJdW5zaWduZWQgaW50IHdpZHRoOworCXVuc2lnbmVkIGludCBoZWlnaHQ7CiAKIAkvKgogCSAqIENsYW1wIHRoZSBvdXRwdXQgaGVpZ2h0IGJhc2VkIG9uIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgYW5kCkBAIC03ODYsMTkgKzgxOSwyMiBAQAogCW1heF9oZWlnaHQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG1heF9oZWlnaHQsIE1BWF9PVVRfSEVJR0hUKTsKIAlvdXRwdXQtPmhlaWdodCA9IGNsYW1wKG91dHB1dC0+aGVpZ2h0LCBtaW5faGVpZ2h0LCBtYXhfaGVpZ2h0KTsKIAotCXJhdGlvLT52ZXJ0ID0gKChpbnB1dC0+aGVpZ2h0IC0gNykgKiAyNTYgLSAzMiAtIDY0ICogc3B2KQorCXJhdGlvLT52ZXJ0ID0gKChpbnB1dC0+aGVpZ2h0IC0gNCkgKiAyNTYgKyAyNTUgLSAxNiAtIDMyICogc3B2KQogCQkgICAgLyAob3V0cHV0LT5oZWlnaHQgLSAxKTsKKwlpZiAocmF0aW8tPnZlcnQgPiBNSURfUkVTSVpFX1ZBTFVFKQorCQlyYXRpby0+dmVydCA9ICgoaW5wdXQtPmhlaWdodCAtIDcpICogMjU2ICsgMjU1IC0gMzIgLSA2NCAqIHNwdikKKwkJCSAgICAvIChvdXRwdXQtPmhlaWdodCAtIDEpOwogCXJhdGlvLT52ZXJ0ID0gY2xhbXBfdCh1bnNpZ25lZCBpbnQsIHJhdGlvLT52ZXJ0LAogCQkJICAgICAgTUlOX1JFU0laRV9WQUxVRSwgTUFYX1JFU0laRV9WQUxVRSk7CiAKIAlpZiAocmF0aW8tPnZlcnQgPD0gTUlEX1JFU0laRV9WQUxVRSkgewogCQl1cHNjYWxlZF9oZWlnaHQgPSAob3V0cHV0LT5oZWlnaHQgLSAxKSAqIHJhdGlvLT52ZXJ0CiAJCQkJKyAzMiAqIHNwdiArIDE2OwotCQlpbnB1dC0+aGVpZ2h0ID0gKHVwc2NhbGVkX2hlaWdodCA+PiA4KSArIDQ7CisJCWhlaWdodCA9ICh1cHNjYWxlZF9oZWlnaHQgPj4gOCkgKyA0OwogCX0gZWxzZSB7CiAJCXVwc2NhbGVkX2hlaWdodCA9IChvdXRwdXQtPmhlaWdodCAtIDEpICogcmF0aW8tPnZlcnQKIAkJCQkrIDY0ICogc3B2ICsgMzI7Ci0JCWlucHV0LT5oZWlnaHQgPSAodXBzY2FsZWRfaGVpZ2h0ID4+IDgpICsgNzsKKwkJaGVpZ2h0ID0gKHVwc2NhbGVkX2hlaWdodCA+PiA4KSArIDc7CiAJfQogCiAJLyoKQEAgLTg1NCwyMCArODkwLDI5IEBACiAJCQkgICAgICBtYXhfd2lkdGggJiB+KHdpZHRoX2FsaWdubWVudCAtIDEpKTsKIAlvdXRwdXQtPndpZHRoID0gQUxJR04ob3V0cHV0LT53aWR0aCwgd2lkdGhfYWxpZ25tZW50KTsKIAotCXJhdGlvLT5ob3J6ID0gKChpbnB1dC0+d2lkdGggLSA3KSAqIDI1NiAtIDMyIC0gNjQgKiBzcGgpCisJcmF0aW8tPmhvcnogPSAoKGlucHV0LT53aWR0aCAtIDcpICogMjU2ICsgMjU1IC0gMTYgLSAzMiAqIHNwaCkKIAkJICAgIC8gKG91dHB1dC0+d2lkdGggLSAxKTsKKwlpZiAocmF0aW8tPmhvcnogPiBNSURfUkVTSVpFX1ZBTFVFKQorCQlyYXRpby0+aG9yeiA9ICgoaW5wdXQtPndpZHRoIC0gNykgKiAyNTYgKyAyNTUgLSAzMiAtIDY0ICogc3BoKQorCQkJICAgIC8gKG91dHB1dC0+d2lkdGggLSAxKTsKIAlyYXRpby0+aG9yeiA9IGNsYW1wX3QodW5zaWduZWQgaW50LCByYXRpby0+aG9yeiwKIAkJCSAgICAgIE1JTl9SRVNJWkVfVkFMVUUsIE1BWF9SRVNJWkVfVkFMVUUpOwogCiAJaWYgKHJhdGlvLT5ob3J6IDw9IE1JRF9SRVNJWkVfVkFMVUUpIHsKIAkJdXBzY2FsZWRfd2lkdGggPSAob3V0cHV0LT53aWR0aCAtIDEpICogcmF0aW8tPmhvcnoKIAkJCSAgICAgICArIDMyICogc3BoICsgMTY7Ci0JCWlucHV0LT53aWR0aCA9ICh1cHNjYWxlZF93aWR0aCA+PiA4KSArIDc7CisJCXdpZHRoID0gKHVwc2NhbGVkX3dpZHRoID4+IDgpICsgNzsKIAl9IGVsc2UgewogCQl1cHNjYWxlZF93aWR0aCA9IChvdXRwdXQtPndpZHRoIC0gMSkgKiByYXRpby0+aG9yegogCQkJICAgICAgICsgNjQgKiBzcGggKyAzMjsKLQkJaW5wdXQtPndpZHRoID0gKHVwc2NhbGVkX3dpZHRoID4+IDgpICsgNzsKKwkJd2lkdGggPSAodXBzY2FsZWRfd2lkdGggPj4gOCkgKyA3OwogCX0KKworCS8qIENlbnRlciB0aGUgbmV3IGNyb3AgcmVjdGFuZ2xlLiAqLworCWlucHV0LT5sZWZ0ICs9IChpbnB1dC0+d2lkdGggLSB3aWR0aCkgLyAyOworCWlucHV0LT50b3AgKz0gKGlucHV0LT5oZWlnaHQgLSBoZWlnaHQpIC8gMjsKKwlpbnB1dC0+d2lkdGggPSB3aWR0aDsKKwlpbnB1dC0+aGVpZ2h0ID0gaGVpZ2h0OwogfQogCiAvKgpAQCAtMTM4Niw3ICsxNDMxLDcgQEAKICAqIEBzZCAgICA6IHBvaW50ZXIgdG8gdjRsMiBzdWJkZXYgc3RydWN0dXJlCiAgKiBAZmggICAgOiBWNEwyIHN1YmRldiBmaWxlIGhhbmRsZQogICogQGZtdCAgIDogcG9pbnRlciB0byB2NGwyIHN1YmRldiBmb3JtYXQgc3RydWN0dXJlCi0gKiByZXR1cm4gLUVJTlZBTCBvciB6ZXJvIG9uIHN1Y2VzcworICogcmV0dXJuIC1FSU5WQUwgb3IgemVybyBvbiBzdWNjZXNzCiAgKi8KIHN0YXRpYyBpbnQgcmVzaXplcl9nZXRfZm9ybWF0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3N1YmRldl9maCAqZmgsCiAJCQkgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0ICpmbXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHN0YXQuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwc3RhdC5oCmluZGV4IDgyMDk1MGMuLmQ4NmRhOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwc3RhdC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwc3RhdC5oCkBAIC0xMzEsOSArMTMxLDkgQEAKIHN0cnVjdCBpc3BzdGF0X2dlbmVyaWNfY29uZmlnIHsKIAkvKgogCSAqIEZpZWxkcyBtdXN0IGJlIGluIHRoZSBzYW1lIG9yZGVyIGFzIGluOgotCSAqICAtIGlzcGgzYV9hZXdiX2NvbmZpZwotCSAqICAtIGlzcGgzYV9hZl9jb25maWcKLQkgKiAgLSBpc3BoaXN0X2NvbmZpZworCSAqICAtIG9tYXAzaXNwX2gzYV9hZXdiX2NvbmZpZworCSAqICAtIG9tYXAzaXNwX2gzYV9hZl9jb25maWcKKwkgKiAgLSBvbWFwM2lzcF9oaXN0X2NvbmZpZwogCSAqLwogCXUzMiBidWZfc2l6ZTsKIAl1MTYgY29uZmlnX2NvdW50ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHZpZGVvLmMKaW5kZXggYTBiYjVkYi4uOWNkOGYxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3B2aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwdmlkZW8uYwpAQCAtNDcsMjkgKzQ3LDU5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXNwX2Zvcm1hdF9pbmZvIGZvcm1hdHNbXSA9IHsKIAl7IFY0TDJfTUJVU19GTVRfWThfMVg4LCBWNEwyX01CVVNfRk1UX1k4XzFYOCwKLQkgIFY0TDJfTUJVU19GTVRfWThfMVg4LCBWNEwyX1BJWF9GTVRfR1JFWSwgOCwgfSwKKwkgIFY0TDJfTUJVU19GTVRfWThfMVg4LCBWNEwyX01CVVNfRk1UX1k4XzFYOCwKKwkgIFY0TDJfUElYX0ZNVF9HUkVZLCA4LCB9LAorCXsgVjRMMl9NQlVTX0ZNVF9ZMTBfMVgxMCwgVjRMMl9NQlVTX0ZNVF9ZMTBfMVgxMCwKKwkgIFY0TDJfTUJVU19GTVRfWTEwXzFYMTAsIFY0TDJfTUJVU19GTVRfWThfMVg4LAorCSAgVjRMMl9QSVhfRk1UX1kxMCwgMTAsIH0sCisJeyBWNEwyX01CVVNfRk1UX1kxMl8xWDEyLCBWNEwyX01CVVNfRk1UX1kxMF8xWDEwLAorCSAgVjRMMl9NQlVTX0ZNVF9ZMTJfMVgxMiwgVjRMMl9NQlVTX0ZNVF9ZOF8xWDgsCisJICBWNEwyX1BJWF9GTVRfWTEyLCAxMiwgfSwKKwl7IFY0TDJfTUJVU19GTVRfU0JHR1I4XzFYOCwgVjRMMl9NQlVTX0ZNVF9TQkdHUjhfMVg4LAorCSAgVjRMMl9NQlVTX0ZNVF9TQkdHUjhfMVg4LCBWNEwyX01CVVNfRk1UX1NCR0dSOF8xWDgsCisJICBWNEwyX1BJWF9GTVRfU0JHR1I4LCA4LCB9LAorCXsgVjRMMl9NQlVTX0ZNVF9TR0JSRzhfMVg4LCBWNEwyX01CVVNfRk1UX1NHQlJHOF8xWDgsCisJICBWNEwyX01CVVNfRk1UX1NHQlJHOF8xWDgsIFY0TDJfTUJVU19GTVRfU0dCUkc4XzFYOCwKKwkgIFY0TDJfUElYX0ZNVF9TR0JSRzgsIDgsIH0sCisJeyBWNEwyX01CVVNfRk1UX1NHUkJHOF8xWDgsIFY0TDJfTUJVU19GTVRfU0dSQkc4XzFYOCwKKwkgIFY0TDJfTUJVU19GTVRfU0dSQkc4XzFYOCwgVjRMMl9NQlVTX0ZNVF9TR1JCRzhfMVg4LAorCSAgVjRMMl9QSVhfRk1UX1NHUkJHOCwgOCwgfSwKKwl7IFY0TDJfTUJVU19GTVRfU1JHR0I4XzFYOCwgVjRMMl9NQlVTX0ZNVF9TUkdHQjhfMVg4LAorCSAgVjRMMl9NQlVTX0ZNVF9TUkdHQjhfMVg4LCBWNEwyX01CVVNfRk1UX1NSR0dCOF8xWDgsCisJICBWNEwyX1BJWF9GTVRfU1JHR0I4LCA4LCB9LAogCXsgVjRMMl9NQlVTX0ZNVF9TR1JCRzEwX0RQQ004XzFYOCwgVjRMMl9NQlVTX0ZNVF9TR1JCRzEwX0RQQ004XzFYOCwKLQkgIFY0TDJfTUJVU19GTVRfU0dSQkcxMF8xWDEwLCBWNEwyX1BJWF9GTVRfU0dSQkcxMERQQ004LCA4LCB9LAorCSAgVjRMMl9NQlVTX0ZNVF9TR1JCRzEwXzFYMTAsIDAsCisJICBWNEwyX1BJWF9GTVRfU0dSQkcxMERQQ004LCA4LCB9LAogCXsgVjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzFYMTAsIFY0TDJfTUJVU19GTVRfU0JHR1IxMF8xWDEwLAotCSAgVjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzFYMTAsIFY0TDJfUElYX0ZNVF9TQkdHUjEwLCAxMCwgfSwKKwkgIFY0TDJfTUJVU19GTVRfU0JHR1IxMF8xWDEwLCBWNEwyX01CVVNfRk1UX1NCR0dSOF8xWDgsCisJICBWNEwyX1BJWF9GTVRfU0JHR1IxMCwgMTAsIH0sCiAJeyBWNEwyX01CVVNfRk1UX1NHQlJHMTBfMVgxMCwgVjRMMl9NQlVTX0ZNVF9TR0JSRzEwXzFYMTAsCi0JICBWNEwyX01CVVNfRk1UX1NHQlJHMTBfMVgxMCwgVjRMMl9QSVhfRk1UX1NHQlJHMTAsIDEwLCB9LAorCSAgVjRMMl9NQlVTX0ZNVF9TR0JSRzEwXzFYMTAsIFY0TDJfTUJVU19GTVRfU0dCUkc4XzFYOCwKKwkgIFY0TDJfUElYX0ZNVF9TR0JSRzEwLCAxMCwgfSwKIAl7IFY0TDJfTUJVU19GTVRfU0dSQkcxMF8xWDEwLCBWNEwyX01CVVNfRk1UX1NHUkJHMTBfMVgxMCwKLQkgIFY0TDJfTUJVU19GTVRfU0dSQkcxMF8xWDEwLCBWNEwyX1BJWF9GTVRfU0dSQkcxMCwgMTAsIH0sCisJICBWNEwyX01CVVNfRk1UX1NHUkJHMTBfMVgxMCwgVjRMMl9NQlVTX0ZNVF9TR1JCRzhfMVg4LAorCSAgVjRMMl9QSVhfRk1UX1NHUkJHMTAsIDEwLCB9LAogCXsgVjRMMl9NQlVTX0ZNVF9TUkdHQjEwXzFYMTAsIFY0TDJfTUJVU19GTVRfU1JHR0IxMF8xWDEwLAotCSAgVjRMMl9NQlVTX0ZNVF9TUkdHQjEwXzFYMTAsIFY0TDJfUElYX0ZNVF9TUkdHQjEwLCAxMCwgfSwKKwkgIFY0TDJfTUJVU19GTVRfU1JHR0IxMF8xWDEwLCBWNEwyX01CVVNfRk1UX1NSR0dCOF8xWDgsCisJICBWNEwyX1BJWF9GTVRfU1JHR0IxMCwgMTAsIH0sCiAJeyBWNEwyX01CVVNfRk1UX1NCR0dSMTJfMVgxMiwgVjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzFYMTAsCi0JICBWNEwyX01CVVNfRk1UX1NCR0dSMTJfMVgxMiwgVjRMMl9QSVhfRk1UX1NCR0dSMTIsIDEyLCB9LAorCSAgVjRMMl9NQlVTX0ZNVF9TQkdHUjEyXzFYMTIsIFY0TDJfTUJVU19GTVRfU0JHR1I4XzFYOCwKKwkgIFY0TDJfUElYX0ZNVF9TQkdHUjEyLCAxMiwgfSwKIAl7IFY0TDJfTUJVU19GTVRfU0dCUkcxMl8xWDEyLCBWNEwyX01CVVNfRk1UX1NHQlJHMTBfMVgxMCwKLQkgIFY0TDJfTUJVU19GTVRfU0dCUkcxMl8xWDEyLCBWNEwyX1BJWF9GTVRfU0dCUkcxMiwgMTIsIH0sCisJICBWNEwyX01CVVNfRk1UX1NHQlJHMTJfMVgxMiwgVjRMMl9NQlVTX0ZNVF9TR0JSRzhfMVg4LAorCSAgVjRMMl9QSVhfRk1UX1NHQlJHMTIsIDEyLCB9LAogCXsgVjRMMl9NQlVTX0ZNVF9TR1JCRzEyXzFYMTIsIFY0TDJfTUJVU19GTVRfU0dSQkcxMF8xWDEwLAotCSAgVjRMMl9NQlVTX0ZNVF9TR1JCRzEyXzFYMTIsIFY0TDJfUElYX0ZNVF9TR1JCRzEyLCAxMiwgfSwKKwkgIFY0TDJfTUJVU19GTVRfU0dSQkcxMl8xWDEyLCBWNEwyX01CVVNfRk1UX1NHUkJHOF8xWDgsCisJICBWNEwyX1BJWF9GTVRfU0dSQkcxMiwgMTIsIH0sCiAJeyBWNEwyX01CVVNfRk1UX1NSR0dCMTJfMVgxMiwgVjRMMl9NQlVTX0ZNVF9TUkdHQjEwXzFYMTAsCi0JICBWNEwyX01CVVNfRk1UX1NSR0dCMTJfMVgxMiwgVjRMMl9QSVhfRk1UX1NSR0dCMTIsIDEyLCB9LAorCSAgVjRMMl9NQlVTX0ZNVF9TUkdHQjEyXzFYMTIsIFY0TDJfTUJVU19GTVRfU1JHR0I4XzFYOCwKKwkgIFY0TDJfUElYX0ZNVF9TUkdHQjEyLCAxMiwgfSwKIAl7IFY0TDJfTUJVU19GTVRfVVlWWThfMVgxNiwgVjRMMl9NQlVTX0ZNVF9VWVZZOF8xWDE2LAotCSAgVjRMMl9NQlVTX0ZNVF9VWVZZOF8xWDE2LCBWNEwyX1BJWF9GTVRfVVlWWSwgMTYsIH0sCisJICBWNEwyX01CVVNfRk1UX1VZVlk4XzFYMTYsIDAsCisJICBWNEwyX1BJWF9GTVRfVVlWWSwgMTYsIH0sCiAJeyBWNEwyX01CVVNfRk1UX1lVWVY4XzFYMTYsIFY0TDJfTUJVU19GTVRfWVVZVjhfMVgxNiwKLQkgIFY0TDJfTUJVU19GTVRfWVVZVjhfMVgxNiwgVjRMMl9QSVhfRk1UX1lVWVYsIDE2LCB9LAorCSAgVjRMMl9NQlVTX0ZNVF9ZVVlWOF8xWDE2LCAwLAorCSAgVjRMMl9QSVhfRk1UX1lVWVYsIDE2LCB9LAogfTsKIAogY29uc3Qgc3RydWN0IGlzcF9mb3JtYXRfaW5mbyAqCkBAIC04Niw2ICsxMTYsMzcgQEAKIH0KIAogLyoKKyAqIERlY2lkZSB3aGV0aGVyIGRlc2lyZWQgb3V0cHV0IHBpeGVsIGNvZGUgY2FuIGJlIG9idGFpbmVkIHdpdGgKKyAqIHRoZSBsYW5lIHNoaWZ0ZXIgYnkgc2hpZnRpbmcgdGhlIGlucHV0IHBpeGVsIGNvZGUuCisgKiBAaW46IGlucHV0IHBpeGVsY29kZSB0byBzaGlmdGVyCisgKiBAb3V0OiBvdXRwdXQgcGl4ZWxjb2RlIGZyb20gc2hpZnRlcgorICogQGFkZGl0aW9uYWxfc2hpZnQ6ICMgb2YgYml0cyB0aGUgc2Vuc29yJ3MgTFNCIGlzIG9mZnNldCBmcm9tIENBTUVYVFswXQorICoKKyAqIHJldHVybiB0cnVlIGlmIHRoZSBjb21iaW5hdGlvbiBpcyBwb3NzaWJsZQorICogcmV0dXJuIGZhbHNlIG90aGVyd2lzZQorICovCitzdGF0aWMgYm9vbCBpc3BfdmlkZW9faXNfc2hpZnRhYmxlKGVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSBpbiwKKwkJZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlIG91dCwKKwkJdW5zaWduZWQgaW50IGFkZGl0aW9uYWxfc2hpZnQpCit7CisJY29uc3Qgc3RydWN0IGlzcF9mb3JtYXRfaW5mbyAqaW5faW5mbywgKm91dF9pbmZvOworCisJaWYgKGluID09IG91dCkKKwkJcmV0dXJuIHRydWU7CisKKwlpbl9pbmZvID0gb21hcDNpc3BfdmlkZW9fZm9ybWF0X2luZm8oaW4pOworCW91dF9pbmZvID0gb21hcDNpc3BfdmlkZW9fZm9ybWF0X2luZm8ob3V0KTsKKworCWlmICgoaW5faW5mby0+Zmxhdm9yID09IDApIHx8IChvdXRfaW5mby0+Zmxhdm9yID09IDApKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoaW5faW5mby0+Zmxhdm9yICE9IG91dF9pbmZvLT5mbGF2b3IpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiBpbl9pbmZvLT5icHAgLSBvdXRfaW5mby0+YnBwICsgYWRkaXRpb25hbF9zaGlmdCA8PSA2OworfQorCisvKgogICogaXNwX3ZpZGVvX21idXNfdG9fcGl4IC0gQ29udmVydCB2NGwyX21idXNfZnJhbWVmbXQgdG8gdjRsMl9waXhfZm9ybWF0CiAgKiBAdmlkZW86IElTUCB2aWRlbyBpbnN0YW5jZQogICogQG1idXM6IHY0bDJfbWJ1c19mcmFtZWZtdCBmb3JtYXQgKGlucHV0KQpAQCAtMjM1LDYgKzI5Niw3IEBACiAJCXJldHVybiAtRVBJUEU7CiAKIAl3aGlsZSAoMSkgeworCQl1bnNpZ25lZCBpbnQgc2hpZnRlcl9saW5rOwogCQkvKiBSZXRyaWV2ZSB0aGUgc2luayBmb3JtYXQgKi8KIAkJcGFkID0gJnN1YmRldi0+ZW50aXR5LnBhZHNbMF07CiAJCWlmICghKHBhZC0+ZmxhZ3MgJiBNRURJQV9QQURfRkxfU0lOSykpCkBAIC0yNjMsNiArMzI1LDEwIEBACiAJCQkJcmV0dXJuIC1FTk9TUEM7CiAJCX0KIAorCQkvKiBJZiBzaW5rIHBhZCBpcyBvbiBDQ0RDLCB0aGUgbGluayBoYXMgdGhlIGxhbmUgc2hpZnRlcgorCQkgKiBpbiB0aGUgbWlkZGxlIG9mIGl0LiAqLworCQlzaGlmdGVyX2xpbmsgPSBzdWJkZXYgPT0gJmlzcC0+aXNwX2NjZGMuc3ViZGV2OworCiAJCS8qIFJldHJpZXZlIHRoZSBzb3VyY2UgZm9ybWF0ICovCiAJCXBhZCA9IG1lZGlhX2VudGl0eV9yZW1vdGVfc291cmNlKHBhZCk7CiAJCWlmIChwYWQgPT0gTlVMTCB8fApAQCAtMjc4LDEwICszNDQsMjQgQEAKIAkJCXJldHVybiAtRVBJUEU7CiAKIAkJLyogQ2hlY2sgaWYgdGhlIHR3byBlbmRzIG1hdGNoICovCi0JCWlmIChmbXRfc291cmNlLmZvcm1hdC5jb2RlICE9IGZtdF9zaW5rLmZvcm1hdC5jb2RlIHx8Ci0JCSAgICBmbXRfc291cmNlLmZvcm1hdC53aWR0aCAhPSBmbXRfc2luay5mb3JtYXQud2lkdGggfHwKKwkJaWYgKGZtdF9zb3VyY2UuZm9ybWF0LndpZHRoICE9IGZtdF9zaW5rLmZvcm1hdC53aWR0aCB8fAogCQkgICAgZm10X3NvdXJjZS5mb3JtYXQuaGVpZ2h0ICE9IGZtdF9zaW5rLmZvcm1hdC5oZWlnaHQpCiAJCQlyZXR1cm4gLUVQSVBFOworCisJCWlmIChzaGlmdGVyX2xpbmspIHsKKwkJCXVuc2lnbmVkIGludCBwYXJhbGxlbF9zaGlmdCA9IDA7CisJCQlpZiAoaXNwLT5pc3BfY2NkYy5pbnB1dCA9PSBDQ0RDX0lOUFVUX1BBUkFMTEVMKSB7CisJCQkJc3RydWN0IGlzcF9wYXJhbGxlbF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9CisJCQkJCSYoKHN0cnVjdCBpc3BfdjRsMl9zdWJkZXZzX2dyb3VwICopCisJCQkJCSAgICAgIHN1YmRldi0+aG9zdF9wcml2KS0+YnVzLnBhcmFsbGVsOworCQkJCXBhcmFsbGVsX3NoaWZ0ID0gcGRhdGEtPmRhdGFfbGFuZV9zaGlmdCAqIDI7CisJCQl9CisJCQlpZiAoIWlzcF92aWRlb19pc19zaGlmdGFibGUoZm10X3NvdXJjZS5mb3JtYXQuY29kZSwKKwkJCQkJCWZtdF9zaW5rLmZvcm1hdC5jb2RlLAorCQkJCQkJcGFyYWxsZWxfc2hpZnQpKQorCQkJCXJldHVybiAtRVBJUEU7CisJCX0gZWxzZSBpZiAoZm10X3NvdXJjZS5mb3JtYXQuY29kZSAhPSBmbXRfc2luay5mb3JtYXQuY29kZSkKKwkJCXJldHVybiAtRVBJUEU7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00OTQsMTIgKzU3NCwxMiBAQAogLyoKICAqIG9tYXAzaXNwX3ZpZGVvX2J1ZmZlcl9uZXh0IC0gQ29tcGxldGUgdGhlIGN1cnJlbnQgYnVmZmVyIGFuZCByZXR1cm4gdGhlIG5leHQKICAqIEB2aWRlbzogSVNQIHZpZGVvIG9iamVjdAotICogQGVycm9yOiBXaGV0aGVyIGFuIGVycm9yIG9jY3VyZWQgZHVyaW5nIGNhcHR1cmUKKyAqIEBlcnJvcjogV2hldGhlciBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgY2FwdHVyZQogICoKICAqIFJlbW92ZSB0aGUgY3VycmVudCB2aWRlbyBidWZmZXIgZnJvbSB0aGUgRE1BIHF1ZXVlIGFuZCBmaWxsIGl0cyB0aW1lc3RhbXAsCiAgKiBmaWVsZCBjb3VudCBhbmQgc3RhdGUgZmllbGRzIGJlZm9yZSB3YWtpbmcgdXAgaXRzIGNvbXBsZXRpb24gaGFuZGxlci4KICAqCi0gKiBUaGUgYnVmZmVyIHN0YXRlIGlzIHNldCB0byBWSURFT0JVRl9ET05FIGlmIG5vIGVycm9yIG9jY3VyZWQgKEBlcnJvciBpcyAwKQorICogVGhlIGJ1ZmZlciBzdGF0ZSBpcyBzZXQgdG8gVklERU9CVUZfRE9ORSBpZiBubyBlcnJvciBvY2N1cnJlZCAoQGVycm9yIGlzIDApCiAgKiBvciBWSURFT0JVRl9FUlJPUiBvdGhlcndpc2UgKEBlcnJvciBpcyBub24temVybykuCiAgKgogICogVGhlIERNQSBxdWV1ZSBpcyBleHBlY3RlZCB0byBjb250YWluIGF0IGxlYXN0IG9uZSBidWZmZXIuCkBAIC01NzgsNyArNjU4LDcgQEAKIC8qCiAgKiBvbWFwM2lzcF92aWRlb19yZXN1bWUgLSBQZXJmb3JtIHJlc3VtZSBvcGVyYXRpb24gb24gdGhlIGJ1ZmZlcnMKICAqIEB2aWRlbzogSVNQIHZpZGVvIG9iamVjdAotICogQGNvbnRpbnVvdXM6IFBpcGVsaW5lIGlzIGluIHNpbmdsZSBzaG90IG1vZGUgaWYgMCBvciBjb250aW5vdXMgbW9kZSBvdGhlcndpc2UKKyAqIEBjb250aW51b3VzOiBQaXBlbGluZSBpcyBpbiBzaW5nbGUgc2hvdCBtb2RlIGlmIDAgb3IgY29udGludW91cyBtb2RlIG90aGVyd2lzZQogICoKICAqIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbiBzdXNwZW5kL3Jlc3VtZSBzY2VuYXJpby4gSXQKICAqIHJlcXVlc3RzIHZpZGVvIHF1ZXVlIGxheWVyIHRvIGRpc2NhcmQgYnVmZmVycyBtYXJrZWQgYXMgRE9ORSBpZiBpdCdzIGluCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHZpZGVvLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHZpZGVvLmgKaW5kZXggNTI0YTFhYy4uOTExYmVhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3B2aWRlby5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwdmlkZW8uaApAQCAtNDksNiArNDksOCBAQAogICoJYml0cy4gSWRlbnRpY2FsIHRvIEBjb2RlIGlmIHRoZSBmb3JtYXQgaXMgMTAgYml0cyB3aWRlIG9yIGxlc3MuCiAgKiBAdW5jb21wcmVzc2VkOiBWNEwyIG1lZGlhIGJ1cyBmb3JtYXQgY29kZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgdW5jb21wcmVzc2VkCiAgKglmb3JtYXQuIElkZW50aWNhbCB0byBAY29kZSBpZiB0aGUgZm9ybWF0IGlzIG5vdCBEUENNIGNvbXByZXNzZWQuCisgKiBAZmxhdm9yOiBWNEwyIG1lZGlhIGJ1cyBmb3JtYXQgY29kZSBmb3IgdGhlIHNhbWUgcGl4ZWwgbGF5b3V0IGJ1dAorICoJc2hpZnRlZCB0byBiZSA4IGJpdHMgcGVyIHBpeGVsLiA9MCBpZiBmb3JtYXQgaXMgbm90IHNoaWZ0YWJsZS4KICAqIEBwaXhlbGZvcm1hdDogVjRMMiBwaXhlbCBmb3JtYXQgRkNDIGlkZW50aWZpZXIKICAqIEBicHA6IEJpdHMgcGVyIHBpeGVsCiAgKi8KQEAgLTU2LDYgKzU4LDcgQEAKIAllbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUgY29kZTsKIAllbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUgdHJ1bmNhdGVkOwogCWVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSB1bmNvbXByZXNzZWQ7CisJZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlIGZsYXZvcjsKIAl1MzIgcGl4ZWxmb3JtYXQ7CiAJdW5zaWduZWQgaW50IGJwcDsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NjY1MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjY2NTAuYwppbmRleCBmZThlM2ViLi40NTZkOWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NjY1MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y2NjUwLmMKQEAgLTEwMzgsNyArMTAzOCw3IEBACiAJcmV0ID0gb3Y2NjUwX3JlZ19ybXcoY2xpZW50LCBSRUdfQ09NQSwgQ09NQV9SRVNFVCwgMCk7CiAJaWYgKHJldCkKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsCi0JCQkiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBlbnRlcmluZyBzb2Z0IHJlc2V0IVxuIik7CisJCQkiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZW50ZXJpbmcgc29mdCByZXNldCFcbiIpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y5NjQwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292OTY0MC5jCmluZGV4IDUzZDg4YTIuLjUxNzNhYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y5NjQwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjk2NDAuYwpAQCAtMjczLDcgKzI3Myw3IEBACiAJcmV0ID0gb3Y5NjQwX3JlZ193cml0ZShjbGllbnQsIE9WOTY0MF9DT003LCBPVjk2NDBfQ09NN19TQ0NCX1JFU0VUKTsKIAlpZiAocmV0KQogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKLQkJCSJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIGVudGVyaW5nIHNvZnQgcmVzZXQhXG4iKTsKKwkJCSJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBlbnRlcmluZyBzb2Z0IHJlc2V0IVxuIik7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZWVwcm9tLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lZXByb20uYwppbmRleCBhZWVkMWMyLi45NTE1ZjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lZXByb20uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lZXByb20uYwpAQCAtMzIsNyArMzIsNyBAQAogCiAgICBSZWFkIGFuZCBhbmFseXplIGRhdGEgaW4gdGhlIGVlcHJvbS4gIFVzZSB0dmVlcHJvbSB0byBmaWd1cmUgb3V0CiAgICB0aGUgcGFja2V0IHN0cnVjdHVyZSwgc2luY2UgdGhpcyBpcyBhbm90aGVyIEhhdXBwYXVnZSBkZXZpY2UgYW5kCi0gICBpbnRlcm5hbGx5IGl0IGhhcyBhIGZhbWlseSByZXNlbWJsZW5jZSB0byBpdnR2LXR5cGUgZGV2aWNlcworICAgaW50ZXJuYWxseSBpdCBoYXMgYSBmYW1pbHkgcmVzZW1ibGFuY2UgdG8gaXZ0di10eXBlIGRldmljZXMKIAogKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuaAppbmRleCA1MWQzMDA5Li5kNzc1M2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuaApAQCAtNzUsNyArNzUsNyBAQAogICogIChidXQgaXQgbWlnaHQgc3RpbGwgb24gdGhlIGJ1cykuICBJbiB0aGlzIHN0YXRlIHRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4KICAqICBkbzsgaXQgbXVzdCBiZSByZXBsdWdnZWQgaW4gb3JkZXIgdG8gcmVjb3Zlci4KICAqCi0gKiAgQ09MRCAtIERldmljZSBpcyBpbiBhbiB1bnVzdWFibGUgc3RhdGUsIG5lZWRzIG1pY3JvY29udHJvbGxlciBmaXJtd2FyZS4KKyAqICBDT0xEIC0gRGV2aWNlIGlzIGluIGFuIHVudXNhYmxlIHN0YXRlLCBuZWVkcyBtaWNyb2NvbnRyb2xsZXIgZmlybXdhcmUuCiAgKgogICogIFdBUk0gLSBXZSBjYW4gY29tbXVuaWNhdGUgd2l0aCB0aGUgZGV2aWNlIGFuZCB0aGUgcHJvcGVyCiAgKiAgbWljcm9jb250cm9sbGVyIGZpcm13YXJlIGlzIHJ1bm5pbmcsIGJ1dCBvdGhlciBkZXZpY2UgaW5pdGlhbGl6YXRpb24gaXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKaW5kZXggMDI2ODY3Ny4uYzFlZTA5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKQEAgLTcxNCw3ICs3MTQsNyBAQAogICoKICAqIFRoZSBETUEgY2hhaW5pbmcgaXMgZG9uZSB3aXRoIERNQSBydW5uaW5nLiBUaGlzIG1lYW5zIGEgdGlueSB0ZW1wb3JhbCB3aW5kb3cKICAqIHJlbWFpbnMsIHdoZXJlIGEgYnVmZmVyIGlzIHF1ZXVlZCBvbiB0aGUgY2hhaW4sIHdoaWxlIHRoZSBjaGFpbiBpcyBhbHJlYWR5Ci0gKiBzdG9wcGVkLiBUaGlzIG1lYW5zIHRoZSB0YWlsZWQgYnVmZmVyIHdvdWxkIG5ldmVyIGJlIHRyYW5zZmVyZWQgYnkgRE1BLgorICogc3RvcHBlZC4gVGhpcyBtZWFucyB0aGUgdGFpbGVkIGJ1ZmZlciB3b3VsZCBuZXZlciBiZSB0cmFuc2ZlcnJlZCBieSBETUEuCiAgKiBUaGlzIGZ1bmN0aW9uIHJlc3RhcnRzIHRoZSBjYXB0dXJlIGZvciB0aGlzIGNvcm5lciBjYXNlLCB3aGVyZSA6CiAgKiAgLSBEQURSKCkgPT0gREFERFJfU1RPUAogICogIC0gYSB2aWRlb2J1ZmZlciBpcyBxdWV1ZWQgb24gdGhlIHBjZGV2LT5jYXB0dXJlIGxpc3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLWZpbWMvZmltYy1jYXB0dXJlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1maW1jL2ZpbWMtY2FwdHVyZS5jCmluZGV4IDk1ZjhiNGUxLi5kMTQyYjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1maW1jL2ZpbWMtY2FwdHVyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLWZpbWMvZmltYy1jYXB0dXJlLmMKQEAgLTUyNyw3ICs1MjcsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAodmIyX2lzX3N0cmVhbWluZygmZmltYy0+dmlkX2NhcC52YnEpIHx8IGZpbWNfY2FwdHVyZV9hY3RpdmUoZmltYykpCisJaWYgKHZiMl9pc19idXN5KCZmaW1jLT52aWRfY2FwLnZicSkgfHwgZmltY19jYXB0dXJlX2FjdGl2ZShmaW1jKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWZyYW1lID0gJmN0eC0+ZF9mcmFtZTsKQEAgLTUzOSw4ICs1MzksMTAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IGZyYW1lLT5mbXQtPmNvbHBsYW5lczsgaSsrKQotCQlmcmFtZS0+cGF5bG9hZFtpXSA9IHBpeC0+cGxhbmVfZm10W2ldLmJ5dGVzcGVybGluZSAqIHBpeC0+aGVpZ2h0OworCWZvciAoaSA9IDA7IGkgPCBmcmFtZS0+Zm10LT5jb2xwbGFuZXM7IGkrKykgeworCQlmcmFtZS0+cGF5bG9hZFtpXSA9CisJCQkocGl4LT53aWR0aCAqIHBpeC0+aGVpZ2h0ICogZnJhbWUtPmZtdC0+ZGVwdGhbaV0pID4+IDM7CisJfQogCiAJLyogT3V0cHV0IERNQSBmcmFtZSBwaXhlbCBzaXplIGFuZCBvZmZzZXRzLiAqLwogCWZyYW1lLT5mX3dpZHRoID0gcGl4LT5wbGFuZV9mbXRbMF0uYnl0ZXNwZXJsaW5lICogOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtZmltYy9maW1jLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLWZpbWMvZmltYy1jb3JlLmMKaW5kZXggNmM5MTliMy4uZGM5MWE4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtZmltYy9maW1jLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1maW1jL2ZpbWMtY29yZS5jCkBAIC0zNjEsMTAgKzM2MSwyMCBAQAogewogCXN0cnVjdCBmaW1jX3ZpZF9jYXAgKmNhcCA9ICZmaW1jLT52aWRfY2FwOwogCXN0cnVjdCBmaW1jX3ZpZF9idWZmZXIgKnZfYnVmOworCXN0cnVjdCB0aW1ldmFsICp0djsKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CiAKIAlpZiAoIWxpc3RfZW1wdHkoJmNhcC0+YWN0aXZlX2J1Zl9xKSAmJgogCSAgICB0ZXN0X2JpdChTVF9DQVBUX1JVTiwgJmZpbWMtPnN0YXRlKSkgeworCQlrdGltZV9nZXRfcmVhbF90cygmdHMpOworCiAJCXZfYnVmID0gYWN0aXZlX3F1ZXVlX3BvcChjYXApOworCisJCXR2ID0gJnZfYnVmLT52Yi52NGwyX2J1Zi50aW1lc3RhbXA7CisJCXR2LT50dl9zZWMgPSB0cy50dl9zZWM7CisJCXR2LT50dl91c2VjID0gdHMudHZfbnNlYyAvIE5TRUNfUEVSX1VTRUM7CisJCXZfYnVmLT52Yi52NGwyX2J1Zi5zZXF1ZW5jZSA9IGNhcC0+ZnJhbWVfY291bnQrKzsKKwogCQl2YjJfYnVmZmVyX2RvbmUoJnZfYnVmLT52YiwgVkIyX0JVRl9TVEFURV9ET05FKTsKIAl9CiAKQEAgLTc1OCw3ICs3NjgsNyBAQAogCW11dGV4X3VubG9jaygmY3R4LT5maW1jX2Rldi0+bG9jayk7CiB9CiAKLXN0cnVjdCB2YjJfb3BzIGZpbWNfcW9wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgdmIyX29wcyBmaW1jX3FvcHMgPSB7CiAJLnF1ZXVlX3NldHVwCSA9IGZpbWNfcXVldWVfc2V0dXAsCiAJLmJ1Zl9wcmVwYXJlCSA9IGZpbWNfYnVmX3ByZXBhcmUsCiAJLmJ1Zl9xdWV1ZQkgPSBmaW1jX2J1Zl9xdWV1ZSwKQEAgLTkyNywyMyArOTM3LDIzIEBACiAJcGl4LT5udW1fcGxhbmVzID0gZm10LT5tZW1wbGFuZXM7CiAJcGl4LT5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX0pQRUc7CiAKKwogCWZvciAoaSA9IDA7IGkgPCBwaXgtPm51bV9wbGFuZXM7ICsraSkgewotCQlpbnQgYnBsID0gcGl4LT5wbGFuZV9mbXRbaV0uYnl0ZXNwZXJsaW5lOworCQl1MzIgYnBsID0gcGl4LT5wbGFuZV9mbXRbaV0uYnl0ZXNwZXJsaW5lOworCQl1MzIgKnNpemVpbWFnZSA9ICZwaXgtPnBsYW5lX2ZtdFtpXS5zaXplaW1hZ2U7CiAKLQkJZGJnKCJbJWRdIGJwbDogJWQsIGRlcHRoOiAlZCwgdzogJWQsIGg6ICVkIiwKLQkJICAgIGksIGJwbCwgZm10LT5kZXB0aFtpXSwgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOworCQlpZiAoZm10LT5jb2xwbGFuZXMgPiAxICYmIChicGwgPT0gMCB8fCBicGwgPCBwaXgtPndpZHRoKSkKKwkJCWJwbCA9IHBpeC0+d2lkdGg7IC8qIFBsYW5hciAqLwogCi0JCWlmICghYnBsIHx8IChicGwgKiA4IC8gZm10LT5kZXB0aFtpXSkgPiBwaXgtPndpZHRoKQotCQkJYnBsID0gKHBpeC0+d2lkdGggKiBmbXQtPmRlcHRoWzBdKSA+PiAzOworCQlpZiAoZm10LT5jb2xwbGFuZXMgPT0gMSAmJiAvKiBQYWNrZWQgKi8KKwkJICAgIChicGwgPT0gMCB8fCAoKGJwbCAqIDgpIC8gZm10LT5kZXB0aFtpXSkgPCBwaXgtPndpZHRoKSkKKwkJCWJwbCA9IChwaXgtPndpZHRoICogZm10LT5kZXB0aFswXSkgLyA4OwogCi0JCWlmICghcGl4LT5wbGFuZV9mbXRbaV0uc2l6ZWltYWdlKQotCQkJcGl4LT5wbGFuZV9mbXRbaV0uc2l6ZWltYWdlID0gcGl4LT5oZWlnaHQgKiBicGw7CisJCWlmIChpID09IDApIC8qIFNhbWUgYnl0ZXNwZXJsaW5lIGZvciBlYWNoIHBsYW5lLiAqLworCQkJbW9kX3ggPSBicGw7CiAKLQkJcGl4LT5wbGFuZV9mbXRbaV0uYnl0ZXNwZXJsaW5lID0gYnBsOwotCi0JCWRiZygiWyVkXTogYnBsOiAlZCwgc2l6ZWltYWdlOiAlZCIsCi0JCSAgICBpLCBwaXgtPnBsYW5lX2ZtdFtpXS5ieXRlc3BlcmxpbmUsCi0JCSAgICBwaXgtPnBsYW5lX2ZtdFtpXS5zaXplaW1hZ2UpOworCQlwaXgtPnBsYW5lX2ZtdFtpXS5ieXRlc3BlcmxpbmUgPSBtb2RfeDsKKwkJKnNpemVpbWFnZSA9IChwaXgtPndpZHRoICogcGl4LT5oZWlnaHQgKiBmbXQtPmRlcHRoW2ldKSAvIDg7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC05NjUsNyArOTc1LDcgQEAKIAogCXZxID0gdjRsMl9tMm1fZ2V0X3ZxKGN0eC0+bTJtX2N0eCwgZi0+dHlwZSk7CiAKLQlpZiAodmIyX2lzX3N0cmVhbWluZyh2cSkpIHsKKwlpZiAodmIyX2lzX2J1c3kodnEpKSB7CiAJCXY0bDJfZXJyKCZmaW1jLT5tMm0udjRsMl9kZXYsICJxdWV1ZSAoJWQpIGJ1c3lcbiIsIGYtPnR5cGUpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KQEAgLTk4NSw4ICs5OTUsMTAgQEAKIAlpZiAoIWZyYW1lLT5mbXQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZm9yIChpID0gMDsgaSA8IGZyYW1lLT5mbXQtPmNvbHBsYW5lczsgaSsrKQotCQlmcmFtZS0+cGF5bG9hZFtpXSA9IHBpeC0+cGxhbmVfZm10W2ldLmJ5dGVzcGVybGluZSAqIHBpeC0+aGVpZ2h0OworCWZvciAoaSA9IDA7IGkgPCBmcmFtZS0+Zm10LT5jb2xwbGFuZXM7IGkrKykgeworCQlmcmFtZS0+cGF5bG9hZFtpXSA9CisJCQkocGl4LT53aWR0aCAqIHBpeC0+aGVpZ2h0ICogZnJhbWUtPmZtdC0+ZGVwdGhbaV0pIC8gODsKKwl9CiAKIAlmcmFtZS0+Zl93aWR0aAk9IHBpeC0+cGxhbmVfZm10WzBdLmJ5dGVzcGVybGluZSAqIDggLwogCQlmcmFtZS0+Zm10LT5kZXB0aFswXTsKQEAgLTE3NTAsNyArMTc2Miw3IEBACiB9CiAKIC8qIEltYWdlIHBpeGVsIGxpbWl0cywgc2ltaWxhciBhY3Jvc3Mgc2V2ZXJhbCBGSU1DIEhXIHJldmlzaW9ucy4gKi8KLXN0YXRpYyBzdHJ1Y3QgZmltY19waXhfbGltaXQgczVwX3BpeF9saW1pdFszXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZmltY19waXhfbGltaXQgczVwX3BpeF9saW1pdFs0XSA9IHsKIAlbMF0gPSB7CiAJCS5zY2FsZXJfZW5fdwk9IDMyNjQsCiAJCS5zY2FsZXJfZGlzX3cJPSA4MTkyLApAQCAtMTc3NSw2ICsxNzg3LDE0IEBACiAJCS5vdXRfcm90X2VuX3cJPSAxMjgwLAogCQkub3V0X3JvdF9kaXNfdwk9IDE5MjAsCiAJfSwKKwlbM10gPSB7CisJCS5zY2FsZXJfZW5fdwk9IDE5MjAsCisJCS5zY2FsZXJfZGlzX3cJPSA4MTkyLAorCQkuaW5fcm90X2VuX2gJPSAxMzY2LAorCQkuaW5fcm90X2Rpc193CT0gODE5MiwKKwkJLm91dF9yb3RfZW5fdwk9IDEzNjYsCisJCS5vdXRfcm90X2Rpc193CT0gMTkyMCwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBzYW1zdW5nX2ZpbWNfdmFyaWFudCBmaW1jMF92YXJpYW50X3M1cCA9IHsKQEAgLTE4MjcsNyArMTg0Nyw3IEBACiAJLnBpeF9saW1pdAkgPSAmczVwX3BpeF9saW1pdFsyXSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19maW1jX3ZhcmlhbnQgZmltYzBfdmFyaWFudF9zNXB2MzEwID0geworc3RhdGljIHN0cnVjdCBzYW1zdW5nX2ZpbWNfdmFyaWFudCBmaW1jMF92YXJpYW50X2V4eW5vczQgPSB7CiAJLnBpeF9ob2ZmCSA9IDEsCiAJLmhhc19pbnBfcm90CSA9IDEsCiAJLmhhc19vdXRfcm90CSA9IDEsCkBAIC0xODQwLDcgKzE4NjAsNyBAQAogCS5waXhfbGltaXQJID0gJnM1cF9waXhfbGltaXRbMV0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHNhbXN1bmdfZmltY192YXJpYW50IGZpbWMyX3ZhcmlhbnRfczVwdjMxMCA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19maW1jX3ZhcmlhbnQgZmltYzJfdmFyaWFudF9leHlub3M0ID0gewogCS5waXhfaG9mZgkgPSAxLAogCS5oYXNfY2lzdGF0dXMyCSA9IDEsCiAJLmhhc19tYWluc2NhbGVyX2V4dCA9IDEsCkBAIC0xODQ4LDcgKzE4NjgsNyBAQAogCS5taW5fb3V0X3BpeHNpemUgPSAxNiwKIAkuaG9yX29mZnNfYWxpZ24JID0gMSwKIAkub3V0X2J1Zl9jb3VudAkgPSAzMiwKLQkucGl4X2xpbWl0CSA9ICZzNXBfcGl4X2xpbWl0WzJdLAorCS5waXhfbGltaXQJID0gJnM1cF9waXhfbGltaXRbM10sCiB9OwogCiAvKiBTNVBDMTAwICovCkBAIC0xODc0LDEyICsxODk0LDEyIEBACiB9OwogCiAvKiBTNVBWMzEwLCBTNVBDMjEwICovCi1zdGF0aWMgc3RydWN0IHNhbXN1bmdfZmltY19kcml2ZXJkYXRhIGZpbWNfZHJ2ZGF0YV9zNXB2MzEwID0geworc3RhdGljIHN0cnVjdCBzYW1zdW5nX2ZpbWNfZHJpdmVyZGF0YSBmaW1jX2RydmRhdGFfZXh5bm9zNCA9IHsKIAkudmFyaWFudCA9IHsKLQkJWzBdID0gJmZpbWMwX3ZhcmlhbnRfczVwdjMxMCwKLQkJWzFdID0gJmZpbWMwX3ZhcmlhbnRfczVwdjMxMCwKLQkJWzJdID0gJmZpbWMwX3ZhcmlhbnRfczVwdjMxMCwKLQkJWzNdID0gJmZpbWMyX3ZhcmlhbnRfczVwdjMxMCwKKwkJWzBdID0gJmZpbWMwX3ZhcmlhbnRfZXh5bm9zNCwKKwkJWzFdID0gJmZpbWMwX3ZhcmlhbnRfZXh5bm9zNCwKKwkJWzJdID0gJmZpbWMwX3ZhcmlhbnRfZXh5bm9zNCwKKwkJWzNdID0gJmZpbWMyX3ZhcmlhbnRfZXh5bm9zNCwKIAl9LAogCS5udW1fZW50aXRpZXMgPSA0LAogCS5sY2xrX2ZyZXF1ZW5jeSA9IDE2NjAwMDAwMFVMLApAQCAtMTg5Myw4ICsxOTEzLDggQEAKIAkJLm5hbWUJCT0gInM1cHYyMTAtZmltYyIsCiAJCS5kcml2ZXJfZGF0YQk9ICh1bnNpZ25lZCBsb25nKSZmaW1jX2RydmRhdGFfczVwdjIxMCwKIAl9LCB7Ci0JCS5uYW1lCQk9ICJzNXB2MzEwLWZpbWMiLAotCQkuZHJpdmVyX2RhdGEJPSAodW5zaWduZWQgbG9uZykmZmltY19kcnZkYXRhX3M1cHYzMTAsCisJCS5uYW1lCQk9ICJleHlub3M0LWZpbWMiLAorCQkuZHJpdmVyX2RhdGEJPSAodW5zaWduZWQgbG9uZykmZmltY19kcnZkYXRhX2V4eW5vczQsCiAJfSwKIAl7fSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1maW1jL2ZpbWMtcmVnLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1maW1jL2ZpbWMtcmVnLmMKaW5kZXggNGQ5MjlhMy4uNDg5M2IyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtZmltYy9maW1jLXJlZy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLWZpbWMvZmltYy1yZWcuYwpAQCAtMzU2LDcgKzM1Niw3IEBACiAJCS8qIG9uZSBzaG90IG1vZGUgKi8KIAkJY2ZnIHw9IFM1UF9DSUlNR0NQVF9DUFRfRlJFTl9FTkFCTEUgfCBTNVBfQ0lJTUdDUFRfSU1HQ1BURU47CiAJfSBlbHNlIHsKLQkJLyogQ29udGlub3VzIGZyYW1lIGNhcHR1cmUgbW9kZSAoZnJlZXJ1bikuICovCisJCS8qIENvbnRpbnVvdXMgZnJhbWUgY2FwdHVyZSBtb2RlIChmcmVlcnVuKS4gKi8KIAkJY2ZnICY9IH4oUzVQX0NJSU1HQ1BUX0NQVF9GUkVOX0VOQUJMRSB8CiAJCQkgUzVQX0NJSU1HQ1BUX0NQVF9GUk1PRF9DTlQpOwogCQljZmcgfD0gUzVQX0NJSU1HQ1BUX0lNR0NQVEVOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKaW5kZXggNjFjNjAwNy4uNTBmMWJlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCkBAIC03NDYwLDcgKzc0NjAsNyBAQAogCQkJCWRldi0+dHVuZXJfdHlwZSA9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzIENhbnQgZGV0ZXJtaW5lIHR1bmVyIHR5cGUgJXggZnJvbSBFRVBST01cbiIsIGRldi0+bmFtZSwgdHVuZXJfdCk7CisJCQkJcHJpbnRrKEtFUk5fRVJSICIlcyBDYW4ndCBkZXRlcm1pbmUgdHVuZXIgdHlwZSAleCBmcm9tIEVFUFJPTVxuIiwgZGV2LT5uYW1lLCB0dW5lcl90KTsKIAkJCX0KIAkJfSBlbHNlIGlmICgoZGF0YVsxXSAhPSAwKSAmJiAoZGF0YVsxXSAhPSAweGZmKSkgewogCQkJLyogbmV3IGNvbmZpZyBzdHJ1Y3R1cmUgKi8KQEAgLTc0ODAsNyArNzQ4MCw3IEBACiAJCQkJCXByaW50ayhLRVJOX0lORk8gIiVzIEJvYXJkIGhhcyBEVkItVFxuIiwgZGV2LT5uYW1lKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIlcyBDYW50IGRldGVybWluZSB0dW5lciB0eXBlICV4IGZyb20gRUVQUk9NXG4iLCBkZXYtPm5hbWUsIHR1bmVyX3QpOworCQkJCXByaW50ayhLRVJOX0VSUiAiJXMgQ2FuJ3QgZGV0ZXJtaW5lIHR1bmVyIHR5cGUgJXggZnJvbSBFRVBST01cbiIsIGRldi0+bmFtZSwgdHVuZXJfdCk7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzIHVuZXhwZWN0ZWQgY29uZmlnIHN0cnVjdHVyZVxuIiwgZGV2LT5uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWNtZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtY21kLmMKaW5kZXggNmE0YzIxNy4uNjJmYWM3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtY21kLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtY21kLmMKQEAgLTI1Nyw3ICsyNTcsNyBAQAogfQogCiAvKiBXYWl0IGZvciBhIHNpZ25hbCBldmVudCwgd2l0aG91dCBob2xkaW5nIGEgbXV0ZXguIEVpdGhlciByZXR1cm4gVElNRU9VVCBpZgotICogdGhlIGV2ZW50IG5ldmVyIG9jY3VyZWQsIG9yIFNBQV9PSyBpZiBpdCB3YXMgc2lnbmFsZWQgZHVyaW5nIHRoZSB3YWl0LgorICogdGhlIGV2ZW50IG5ldmVyIG9jY3VycmVkLCBvciBTQUFfT0sgaWYgaXQgd2FzIHNpZ25hbGVkIGR1cmluZyB0aGUgd2FpdC4KICAqLwogaW50IHNhYTcxNjRfY21kX3dhaXQoc3RydWN0IHNhYTcxNjRfZGV2ICpkZXYsIHU4IHNlcW5vKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtZncuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWZ3LmMKaW5kZXggYjM2OTMwMC4uYTI2NmJmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtZncuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1mdy5jCkBAIC00NDQsNyArNDQ0LDcgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiIC5SZXNlcnZlZCA9IDB4JXhcbiIsIGhkci0+cmVzZXJ2ZWQpOwogCQlwcmludGsoS0VSTl9JTkZPICIgLlZlcnNpb24gPSAweCV4XG4iLCBoZHItPnZlcnNpb24pOwogCi0JCS8qIFJldHJlaXZlIGJvb3Rsb2FkZXIgaWYgcmVxZCAqLworCQkvKiBSZXRyaWV2ZSBib290bG9hZGVyIGlmIHJlcWQgKi8KIAkJaWYgKChoZHItPmZpcm13YXJlc2l6ZSA9PSAwKSAmJiAoaGRyLT5ic2xzaXplID09IDApKQogCQkJLyogU2Vjb25kIGJvb3Rsb2FkZXIgaW4gdGhlIGZpcm13YXJlIGZpbGUgKi8KIAkJCWZpbGVzaXplID0gaGRyLT5yZXNlcnZlZCAqIDE2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtdHlwZXMuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LXR5cGVzLmgKaW5kZXggZGYxZDI5OS4uMWQyMTQwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtdHlwZXMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC10eXBlcy5oCkBAIC00MTIsNyArNDEyLDcgQEAKIAl1OAlTdGFydExpbmU7IC8qIE5UU0MgU3RhcnQgPSAxMCAqLwogCXU4CUVuZExpbmU7IC8qIE5UU0MgPSAyMSAqLwogCXU4CUZpZWxkUmF0ZTsgLyogNjAgZm9yIE5UU0MgKi8KLQl1OAliTnVtTGluZXM7IC8qIFVuc2VkIC0gc2NoZWR1bGVkIGZvciByZW1vdmFsICovCisJdTgJYk51bUxpbmVzOyAvKiBVbnVzZWQgLSBzY2hlZHVsZWQgZm9yIHJlbW92YWwgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCB0bUNvbVJlc1Byb2JlQ29tbWl0IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYwppbmRleCAzZmU1NGJmLi4xMzRlODZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCkBAIC05MjIsNyArOTIyLDcgQEAKIAkJCS8qIFRyeSAyNTYweDE5MjAsIDEyODB4OTYwLCA2NDB4NDgwLCAzMjB4MjQwICovCiAJCQltZi53aWR0aAk9IDI1NjAgPj4gc2hpZnQ7CiAJCQltZi5oZWlnaHQJPSAxOTIwID4+IHNoaWZ0OwotCQkJcmV0ID0gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoc2QtPnY0bDJfZGV2LCAwLCB2aWRlbywKKwkJCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKHNkLT52NGwyX2RldiwgKGxvbmcpaWNkLCB2aWRlbywKIAkJCQkJCQkgc19tYnVzX2ZtdCwgJm1mKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCXJldHVybiByZXQ7CkBAIC0xMjI0LDcgKzEyMjQsNyBAQAogCXN0cnVjdCB2NGwyX2Nyb3BjYXAgY2FwOwogCWludCByZXQ7CiAKLQlyZXQgPSB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycihzZC0+djRsMl9kZXYsIDAsIHZpZGVvLAorCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKHNkLT52NGwyX2RldiwgKGxvbmcpaWNkLCB2aWRlbywKIAkJCQkJIHNfbWJ1c19mbXQsIG1mKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKQEAgLTEyNTQsNyArMTI1NCw3IEBACiAJCXRtcF9oID0gbWluKDIgKiB0bXBfaCwgbWF4X2hlaWdodCk7CiAJCW1mLT53aWR0aCA9IHRtcF93OwogCQltZi0+aGVpZ2h0ID0gdG1wX2g7Ci0JCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKHNkLT52NGwyX2RldiwgMCwgdmlkZW8sCisJCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKHNkLT52NGwyX2RldiwgKGxvbmcpaWNkLCB2aWRlbywKIAkJCQkJCSBzX21idXNfZm10LCBtZik7CiAJCWRldl9nZW8oZGV2LCAiQ2FtZXJhIHNjYWxlZCB0byAldXgldVxuIiwKIAkJCW1mLT53aWR0aCwgbWYtPmhlaWdodCk7CkBAIC0xNjU4LDcgKzE2NTgsNyBAQAogCW1mLmNvZGUJCT0geGxhdGUtPmNvZGU7CiAJbWYuY29sb3JzcGFjZQk9IHBpeC0+Y29sb3JzcGFjZTsKIAotCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKHNkLT52NGwyX2RldiwgMCwgdmlkZW8sIHRyeV9tYnVzX2ZtdCwgJm1mKTsKKwlyZXQgPSB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycihzZC0+djRsMl9kZXYsIChsb25nKWljZCwgdmlkZW8sIHRyeV9tYnVzX2ZtdCwgJm1mKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMTY4Miw3ICsxNjgyLDcgQEAKIAkJCSAqLwogCQkJbWYud2lkdGggPSAyNTYwOwogCQkJbWYuaGVpZ2h0ID0gMTkyMDsKLQkJCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKHNkLT52NGwyX2RldiwgMCwgdmlkZW8sCisJCQlyZXQgPSB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycihzZC0+djRsMl9kZXYsIChsb25nKWljZCwgdmlkZW8sCiAJCQkJCQkJIHRyeV9tYnVzX2ZtdCwgJm1mKTsKIAkJCWlmIChyZXQgPCAwKSB7CiAJCQkJLyogU2hvdWxkbid0IGFjdHVhbGx5IGhhcHBlbi4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY3NpMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY3NpMi5jCmluZGV4IGRkMWI4MWIuLjk4Yjg3NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NzaTIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jc2kyLmMKQEAgLTM4LDYgKzM4LDggQEAKIAl2b2lkIF9faW9tZW0JCQkqYmFzZTsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqcGRldjsKIAlzdHJ1Y3Qgc2hfY3NpMl9jbGllbnRfY29uZmlnCSpjbGllbnQ7CisJdW5zaWduZWQgbG9uZyAoKnF1ZXJ5X2J1c19wYXJhbSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOworCWludCAoKnNldF9idXNfcGFyYW0pKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCB1bnNpZ25lZCBsb25nKTsKIH07CiAKIHN0YXRpYyBpbnQgc2hfY3NpMl90cnlfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCkBAIC0yMDgsNiArMjEwLDcgQEAKIAljYXNlIEJVU19OT1RJRllfQk9VTkRfRFJJVkVSOgogCQlzbnByaW50Zihwcml2LT5zdWJkZXYubmFtZSwgVjRMMl9TVUJERVZfTkFNRV9TSVpFLCAiJXMlcyIsCiAJCQkgZGV2X25hbWUodjRsMl9kZXYtPmRldiksICIubWlwaS1jc2kiKTsKKwkJcHJpdi0+c3ViZGV2LmdycF9pZCA9IChsb25nKWljZDsKIAkJcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KHY0bDJfZGV2LCAmcHJpdi0+c3ViZGV2KTsKIAkJZGV2X2RiZyhkZXYsICIlcyglcCk6IHJldChyZWdpc3Rlcl9zdWJkZXYpID0gJWRcbiIsIF9fZnVuY19fLCBwcml2LCByZXQpOwogCQlpZiAocmV0IDwgMCkKQEAgLTIxNSw2ICsyMTgsOCBAQAogCiAJCXByaXYtPmNsaWVudCA9IHBkYXRhLT5jbGllbnRzICsgaTsKIAorCQlwcml2LT5zZXRfYnVzX3BhcmFtCQk9IGljZC0+b3BzLT5zZXRfYnVzX3BhcmFtOworCQlwcml2LT5xdWVyeV9idXNfcGFyYW0JCT0gaWNkLT5vcHMtPnF1ZXJ5X2J1c19wYXJhbTsKIAkJaWNkLT5vcHMtPnNldF9idXNfcGFyYW0JCT0gc2hfY3NpMl9zZXRfYnVzX3BhcmFtOwogCQlpY2QtPm9wcy0+cXVlcnlfYnVzX3BhcmFtCT0gc2hfY3NpMl9xdWVyeV9idXNfcGFyYW07CiAKQEAgLTIyNiw4ICsyMzEsMTAgQEAKIAkJcHJpdi0+Y2xpZW50ID0gTlVMTDsKIAogCQkvKiBEcml2ZXIgaXMgYWJvdXQgdG8gYmUgdW5ib3VuZCAqLwotCQlpY2QtPm9wcy0+c2V0X2J1c19wYXJhbQkJPSBOVUxMOwotCQlpY2QtPm9wcy0+cXVlcnlfYnVzX3BhcmFtCT0gTlVMTDsKKwkJaWNkLT5vcHMtPnNldF9idXNfcGFyYW0JCT0gcHJpdi0+c2V0X2J1c19wYXJhbTsKKwkJaWNkLT5vcHMtPnF1ZXJ5X2J1c19wYXJhbQk9IHByaXYtPnF1ZXJ5X2J1c19wYXJhbTsKKwkJcHJpdi0+c2V0X2J1c19wYXJhbQkJPSBOVUxMOworCQlwcml2LT5xdWVyeV9idXNfcGFyYW0JCT0gTlVMTDsKIAogCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldigmcHJpdi0+c3ViZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jCmluZGV4IGNlNTZhMWMuLjBlMDdjNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMKQEAgLTE4MTAsNyArMTgxMCw3IEBACiAJCS8qCiAJCSAgIFdlIHdpbGwgbm90IHJlbGVhc2UgdGhlICJvcGVuX211dGV4IiBsb2NrLCBzbyB0aGF0IG9ubHkgb25lCiAJCSAgIHByb2Nlc3MgY2FuIGJlIGluIHRoZSB3YWl0IHF1ZXVlIGJlbG93LiBUaGlzIHdheSB0aGUgcHJvY2VzcwotCQkgICB3aWxsIGJlIHNsZWVwaW5nIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2ssIHdpdGhvdXQgbG9vc2luZyBpdHMKKwkJICAgd2lsbCBiZSBzbGVlcGluZyB3aGlsZSBob2xkaW5nIHRoZSBsb2NrLCB3aXRob3V0IGxvc2luZyBpdHMKIAkJICAgcHJpb3JpdHkgYWZ0ZXIgYW55IHdha2VfdXAoKS4KIAkJKi8KIAkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2V4Y2x1c2l2ZShjYW0tPndhaXRfb3BlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3NlbnNvci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfc2Vuc29yLmgKaW5kZXggN2YzODU0OS4uMzY3OTk3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfc2Vuc29yLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfc2Vuc29yLmgKQEAgLTE4MCw3ICsxODAsNyBAQAogCSAgIEl0IHNob3VsZCBiZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHNlbnNvciBvbmx5LCBidXQgbWF5IGFsc28KIAkgICBjb25maWd1cmUgcGFydCBvZiB0aGUgU045QzFYWCBjaGlwIGlmIG5lY2Vzc2FyeS4gWW91IGRvbid0IG5lZWQgdG8KIAkgICBzZXR1cCBwaWN0dXJlIHNldHRpbmdzIGxpa2UgYnJpZ2h0bmVzcywgY29udHJhc3QsIGV0Yy4uIGhlcmUsIGlmCi0JICAgdGhlIGNvcnJpc3BvbmRpbmcgY29udHJvbHMgYXJlIGltcGxlbWVudGVkIChzZWUgYmVsb3cpLCBzaW5jZQorCSAgIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRyb2xzIGFyZSBpbXBsZW1lbnRlZCAoc2VlIGJlbG93KSwgc2luY2UKIAkgICB0aGV5IGFyZSBhZGp1c3RlZCBpbiB0aGUgY29yZSBkcml2ZXIgYnkgY2FsbGluZyB0aGUgc2V0X2N0cmwoKQogCSAgIG1ldGhvZCBhZnRlciBpbml0KCksIHdoZXJlIHRoZSBhcmd1bWVudHMgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcwogCSAgIHNwZWNpZmllZCBpbiB0aGUgdjRsMl9xdWVyeWN0cmwgbGlzdCBvZiBzdXBwb3J0ZWQgY29udHJvbHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCmluZGV4IDQ2Mjg0NDguLmRkYjRjMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCkBAIC0xMzYsMTEgKzEzNiw1MCBAQAogfQogRVhQT1JUX1NZTUJPTChzb2NfY2FtZXJhX2FwcGx5X3NlbnNvcl9mbGFncyk7CiAKKyNkZWZpbmUgcGl4Zm10c3RyKHgpICh4KSAmIDB4ZmYsICgoeCkgPj4gOCkgJiAweGZmLCAoKHgpID4+IDE2KSAmIDB4ZmYsIFwKKwkoKHgpID4+IDI0KSAmIDB4ZmYKKworc3RhdGljIGludCBzb2NfY2FtZXJhX3RyeV9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJaW50IHJldDsKKworCWRldl9kYmcoJmljZC0+ZGV2LCAiVFJZX0ZNVCglYyVjJWMlYywgJXV4JXUpXG4iLAorCQlwaXhmbXRzdHIocGl4LT5waXhlbGZvcm1hdCksIHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0KTsKKworCXBpeC0+Ynl0ZXNwZXJsaW5lID0gMDsKKwlwaXgtPnNpemVpbWFnZSA9IDA7CisKKwlyZXQgPSBpY2ktPm9wcy0+dHJ5X2ZtdChpY2QsIGYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKCFwaXgtPnNpemVpbWFnZSkgeworCQlpZiAoIXBpeC0+Ynl0ZXNwZXJsaW5lKSB7CisJCQljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlOworCisJCQl4bGF0ZSA9IHNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKGljZCwgcGl4LT5waXhlbGZvcm1hdCk7CisJCQlpZiAoIXhsYXRlKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlyZXQgPSBzb2NfbWJ1c19ieXRlc19wZXJfbGluZShwaXgtPndpZHRoLAorCQkJCQkJICAgICAgeGxhdGUtPmhvc3RfZm10KTsKKwkJCWlmIChyZXQgPiAwKQorCQkJCXBpeC0+Ynl0ZXNwZXJsaW5lID0gcmV0OworCQl9CisJCWlmIChwaXgtPmJ5dGVzcGVybGluZSkKKwkJCXBpeC0+c2l6ZWltYWdlID0gcGl4LT5ieXRlc3BlcmxpbmUgKiBwaXgtPmhlaWdodDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzb2NfY2FtZXJhX3RyeV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAKIAlXQVJOX09OKHByaXYgIT0gZmlsZS0+cHJpdmF0ZV9kYXRhKTsKIApAQCAtMTQ5LDcgKzE4OCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogbGltaXQgZm9ybWF0IHRvIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAqLwotCXJldHVybiBpY2ktPm9wcy0+dHJ5X2ZtdChpY2QsIGYpOworCXJldHVybiBzb2NfY2FtZXJhX3RyeV9mbXQoaWNkLCBmKTsKIH0KIAogc3RhdGljIGludCBzb2NfY2FtZXJhX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCkBAIC0zNjIsOSArNDAxLDYgQEAKIAlpY2QtPnVzZXJfZm9ybWF0cyA9IE5VTEw7CiB9CiAKLSNkZWZpbmUgcGl4Zm10c3RyKHgpICh4KSAmIDB4ZmYsICgoeCkgPj4gOCkgJiAweGZmLCAoKHgpID4+IDE2KSAmIDB4ZmYsIFwKLQkoKHgpID4+IDI0KSAmIDB4ZmYKLQogLyogQ2FsbGVkIHdpdGggLnZiX2xvY2sgaGVsZCwgb3IgZnJvbSB0aGUgZmlyc3Qgb3BlbigyKSwgc2VlIGNvbW1lbnQgdGhlcmUgKi8KIHN0YXRpYyBpbnQgc29jX2NhbWVyYV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQpAQCAtMzc3LDcgKzQxMyw3IEBACiAJCXBpeGZtdHN0cihwaXgtPnBpeGVsZm9ybWF0KSwgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOwogCiAJLyogV2UgYWx3YXlzIGNhbGwgdHJ5X2ZtdCgpIGJlZm9yZSBzZXRfZm10KCkgb3Igc2V0X2Nyb3AoKSAqLwotCXJldCA9IGljaS0+b3BzLT50cnlfZm10KGljZCwgZik7CisJcmV0ID0gc29jX2NhbWVyYV90cnlfZm10KGljZCwgZik7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTk5NiwxMCArMTAzMiwxMSBAQAogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPQogCQl0b19pMmNfY2xpZW50KHRvX3NvY19jYW1lcmFfY29udHJvbChpY2QpKTsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSBjbGllbnQtPmFkYXB0ZXI7CiAJZGV2X3NldF9kcnZkYXRhKCZpY2QtPmRldiwgTlVMTCk7CiAJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCWkyY191bnJlZ2lzdGVyX2RldmljZShjbGllbnQpOwotCWkyY19wdXRfYWRhcHRlcihjbGllbnQtPmFkYXB0ZXIpOworCWkyY19wdXRfYWRhcHRlcihhZGFwKTsKIH0KICNlbHNlCiAjZGVmaW5lIHNvY19jYW1lcmFfaW5pdF9pMmMoaWNkLCBpY2wpCSgtRU5PREVWKQpAQCAtMTA3MSw2ICsxMTA4LDkgQEAKIAkJfQogCX0KIAorCXNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKKwlzZC0+Z3JwX2lkID0gKGxvbmcpaWNkOworCiAJLyogQXQgdGhpcyBwb2ludCBjbGllbnQgLnByb2JlKCkgc2hvdWxkIGhhdmUgcnVuIGFscmVhZHkgKi8KIAlyZXQgPSBzb2NfY2FtZXJhX2luaXRfdXNlcl9mb3JtYXRzKGljZCk7CiAJaWYgKHJldCA8IDApCkBAIC0xMDkyLDcgKzExMzIsNiBAQAogCQlnb3RvIGV2aWRzdGFydDsKIAogCS8qIFRyeSB0byBpbXByb3ZlIG91ciBndWVzcyBvZiBhIHJlYXNvbmFibGUgd2luZG93IGZvcm1hdCAqLwotCXNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKIAlpZiAoIXY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX21idXNfZm10LCAmbWYpKSB7CiAJCWljZC0+dXNlcl93aWR0aAkJPSBtZi53aWR0aDsKIAkJaWNkLT51c2VyX2hlaWdodAk9IG1mLmhlaWdodDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90Y204MjV4LmMKaW5kZXggNTQ2ODFhNS4uYjZlZTFiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90Y204MjV4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90Y204MjV4LmMKQEAgLTQ5Myw3ICs0OTMsNyBAQAogCWludCB2YWwsIHI7CiAJc3RydWN0IHZjb250cm9sICpsdmM7CiAKLQkvKiBleHBvc3VyZSB0aW1lIGlzIHNwZWNpYWwsIHNwcmVhZCBhY2Nyb3NzIDIgcmVnaXN0ZXJzICovCisJLyogZXhwb3N1cmUgdGltZSBpcyBzcGVjaWFsLCBzcHJlYWQgYWNyb3NzIDIgcmVnaXN0ZXJzICovCiAJaWYgKHZjLT5pZCA9PSBWNEwyX0NJRF9FWFBPU1VSRSkgewogCQlpbnQgdmFsX2xvd2VyLCB2YWxfdXBwZXI7CiAKQEAgLTUzOCw3ICs1MzgsNyBAQAogCXN0cnVjdCB2Y29udHJvbCAqbHZjOwogCWludCB2YWwgPSB2Yy0+dmFsdWU7CiAKLQkvKiBleHBvc3VyZSB0aW1lIGlzIHNwZWNpYWwsIHNwcmVhZCBhY2Nyb3NzIDIgcmVnaXN0ZXJzICovCisJLyogZXhwb3N1cmUgdGltZSBpcyBzcGVjaWFsLCBzcHJlYWQgYWNyb3NzIDIgcmVnaXN0ZXJzICovCiAJaWYgKHZjLT5pZCA9PSBWNEwyX0NJRF9FWFBPU1VSRSkgewogCQlpbnQgdmFsX2xvd2VyLCB2YWxfdXBwZXI7CiAJCXZhbF9sb3dlciA9IHZhbCAmIFRDTTgyNVhfTUFTSyhUQ004MjVYX0VTUlNQRF9MKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg0MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmMKaW5kZXggNWQ0Y2YzYi4uMjJmYTgyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAotCXNkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHY0bDJfc3ViZGV2KSwgR0ZQX0tFUk5FTCk7CisJc2QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdjRsMl9zdWJkZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc2QgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJnRkYTk4NDBfb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQxNWMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQxNWMuYwppbmRleCAxOTYyMWVkLi44Mjc0MjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MTVjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5jCkBAIC0xNTIsNyArMTUyLDcgQEAKIAogCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKLQlzZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2NGwyX3N1YmRldiksIEdGUF9LRVJORUwpOworCXNkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHY0bDJfc3ViZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNkID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZ0ZWE2NDE1Y19vcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYwppbmRleCA1ZWE4NDA0Li5mMzUwYjZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKIAkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCi0Jc2QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdjRsMl9zdWJkZXYpLCBHRlBfS0VSTkVMKTsKKwlzZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2NGwyX3N1YmRldiksIEdGUF9LRVJORUwpOwogCWlmIChzZCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmdGVhNjQyMF9vcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYwppbmRleCBhMjVlMmI1Li5jNDZhM2JiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYwpAQCAtMTA1OCwxMSArMTA1OCwxMSBAQAogI2RlZmluZSBUREE5ODc1X01WUiAgICAgICAgIDB4MWIgIC8qIE1haW4gdm9sdW1lIGRyb2l0ZSAqLwogI2RlZmluZSBUREE5ODc1X01CQSAgICAgICAgIDB4MWQgIC8qIE1haW4gQmFzc2UgKi8KICNkZWZpbmUgVERBOTg3NV9NVFIgICAgICAgICAweDFlICAvKiBNYWluIHRyZWJsZSAqLwotI2RlZmluZSBUREE5ODc1X0FDUyAgICAgICAgIDB4MWYgIC8qIEF1eGlsYXJ5IGNoYW5uZWwgc2VsZWN0IChGTSkgMGIwMDAwMDAwKi8KLSNkZWZpbmUgVERBOTg3NV9BVkwgICAgICAgICAweDIwICAvKiBBdXhpbGFyeSB2b2x1bWUgZ2F1Y2hlICovCi0jZGVmaW5lIFREQTk4NzVfQVZSICAgICAgICAgMHgyMSAgLyogQXV4aWxhcnkgdm9sdW1lIGRyb2l0ZSAqLwotI2RlZmluZSBUREE5ODc1X0FCQSAgICAgICAgIDB4MjIgIC8qIEF1eGlsYXJ5IEJhc3NlICovCi0jZGVmaW5lIFREQTk4NzVfQVRSICAgICAgICAgMHgyMyAgLyogQXV4aWxhcnkgdHJlYmxlICovCisjZGVmaW5lIFREQTk4NzVfQUNTICAgICAgICAgMHgxZiAgLyogQXV4aWxpYXJ5IGNoYW5uZWwgc2VsZWN0IChGTSkgMGIwMDAwMDAwKi8KKyNkZWZpbmUgVERBOTg3NV9BVkwgICAgICAgICAweDIwICAvKiBBdXhpbGlhcnkgdm9sdW1lIGdhdWNoZSAqLworI2RlZmluZSBUREE5ODc1X0FWUiAgICAgICAgIDB4MjEgIC8qIEF1eGlsaWFyeSB2b2x1bWUgZHJvaXRlICovCisjZGVmaW5lIFREQTk4NzVfQUJBICAgICAgICAgMHgyMiAgLyogQXV4aWxpYXJ5IEJhc3NlICovCisjZGVmaW5lIFREQTk4NzVfQVRSICAgICAgICAgMHgyMyAgLyogQXV4aWxpYXJ5IHRyZWJsZSAqLwogCiAjZGVmaW5lIFREQTk4NzVfTVNSICAgICAgICAgMHgwMiAgLyogTW9uaXRvciBzZWxlY3QgcmVnaXN0ZXIgKi8KICNkZWZpbmUgVERBOTg3NV9DMU1TQiAgICAgICAweDAzICAvKiBDYXJyaWVyIDEgKEZNKSBmcmVxdWVuY3kgcmVnaXN0ZXIgTVNCICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDMxYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDAzMWEuYwppbmRleCBmODEzOGM3Li4xYWFiOTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDMxYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwMzFhLmMKQEAgLTIzMCw3ICsyMzAsNyBAQAogCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAotCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVwZDY0MDMxYV9zdGF0ZSksIEdGUF9LRVJORUwpOworCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVwZDY0MDMxYV9zdGF0ZSksIEdGUF9LRVJORUwpOwogCWlmIChzdGF0ZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlzZCA9ICZzdGF0ZS0+c2Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDgzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDgzLmMKaW5kZXggMjhlMGU2Yi4uOWJiZTYxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDA4My5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwODMuYwpAQCAtMjAyLDcgKzIwMiw3IEBACiAJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKIAkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCi0Jc3RhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXBkNjQwODNfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1cGQ2NDA4M19zdGF0ZSksIEdGUF9LRVJORUwpOwogCWlmIChzdGF0ZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlzZCA9ICZzdGF0ZS0+c2Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jCmluZGV4IDU0NWMwMjkuLmZjNzY2YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jCkBAIC0zOTQsMTEgKzM5NCwxMSBAQAogICoKICAqIHV2Y192aWRlb19kZWNvZGVfZW5kIGlzIGNhbGxlZCB3aXRoIGhlYWRlciBkYXRhIGF0IHRoZSBlbmQgb2YgYSBidWxrIG9yCiAgKiBpc29jaHJvbm91cyBwYXlsb2FkLiBJdCBwZXJmb3JtcyBhbnkgYWRkaXRpb25hbCBoZWFkZXIgZGF0YSBwcm9jZXNzaW5nIGFuZAotICogcmV0dXJucyAwIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiBhbiBlcnJvciBvY2N1cmVkLiBBcyBoZWFkZXIgZGF0YSBoYXZlCisgKiByZXR1cm5zIDAgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIGFuIGVycm9yIG9jY3VycmVkLiBBcyBoZWFkZXIgZGF0YSBoYXZlCiAgKiBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkIGJ5IHV2Y192aWRlb19kZWNvZGVfc3RhcnQsIHRoaXMgZnVuY3Rpb25zIGlzbid0CiAgKiByZXF1aXJlZCB0byBwZXJmb3JtIHNhbml0eSBjaGVja3MgYSBzZWNvbmQgdGltZS4KICAqCi0gKiBGb3IgaXNvY2hyb25vdXMgdHJhbnNmZXJzIHdoZXJlIGEgcGF5bG9hZCBpcyBhbHdheXMgdHJhbnNmZXJlZCBpbiBhIHNpbmdsZQorICogRm9yIGlzb2Nocm9ub3VzIHRyYW5zZmVycyB3aGVyZSBhIHBheWxvYWQgaXMgYWx3YXlzIHRyYW5zZmVycmVkIGluIGEgc2luZ2xlCiAgKiBVUkIsIHRoZSB0aHJlZSBmdW5jdGlvbnMgd2lsbCBiZSBjYWxsZWQgaW4gYSByb3cuCiAgKgogICogVG8gbGV0IHRoZSBkZWNvZGVyIHByb2Nlc3MgaGVhZGVyIGRhdGEgYW5kIHVwZGF0ZSBpdHMgaW50ZXJuYWwgc3RhdGUgZXZlbgpAQCAtNjU4LDcgKzY1OCw3IEBACiAJCQkJCQkJICAgIGJ1Zik7CiAJCX0gd2hpbGUgKHJldCA9PSAtRUFHQUlOKTsKIAotCQkvKiBJZiBhbiBlcnJvciBvY2N1cmVkIHNraXAgdGhlIHJlc3Qgb2YgdGhlIHBheWxvYWQuICovCisJCS8qIElmIGFuIGVycm9yIG9jY3VycmVkIHNraXAgdGhlIHJlc3Qgb2YgdGhlIHBheWxvYWQuICovCiAJCWlmIChyZXQgPCAwIHx8IGJ1ZiA9PSBOVUxMKSB7CiAJCQlzdHJlYW0tPmJ1bGsuc2tpcF9wYXlsb2FkID0gMTsKIAkJfSBlbHNlIHsKQEAgLTgyMSw3ICs4MjEsNyBAQAogCQlyZXR1cm4gc3RyZWFtLT51cmJfc2l6ZSAvIHBzaXplOwogCiAJLyogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIHBhY2tldHMuIEJ1bGsgZW5kcG9pbnRzIG1pZ2h0IHRyYW5zZmVyIFVWQwotCSAqIHBheWxvYWRzIGFjY3Jvc3MgbXVsdGlwbGUgVVJCcy4KKwkgKiBwYXlsb2FkcyBhY3Jvc3MgbXVsdGlwbGUgVVJCcy4KIAkgKi8KIAlucGFja2V0cyA9IERJVl9ST1VORF9VUChzaXplLCBwc2l6ZSk7CiAJaWYgKG5wYWNrZXRzID4gVVZDX01BWF9QQUNLRVRTKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldi5jCmluZGV4IDQ5OGU2NzQuLjZkYzcxOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2LmMKQEAgLTM4OSw3ICszODksOCBAQAogCXZpZGVvX2dldCh2ZGV2KTsKIAltdXRleF91bmxvY2soJnZpZGVvZGV2X2xvY2spOwogI2lmIGRlZmluZWQoQ09ORklHX01FRElBX0NPTlRST0xMRVIpCi0JaWYgKHZkZXYtPnY0bDJfZGV2ICYmIHZkZXYtPnY0bDJfZGV2LT5tZGV2KSB7CisJaWYgKHZkZXYtPnY0bDJfZGV2ICYmIHZkZXYtPnY0bDJfZGV2LT5tZGV2ICYmCisJICAgIHZkZXYtPnZmbF90eXBlICE9IFZGTF9UWVBFX1NVQkRFVikgewogCQllbnRpdHkgPSBtZWRpYV9lbnRpdHlfZ2V0KCZ2ZGV2LT5lbnRpdHkpOwogCQlpZiAoIWVudGl0eSkgewogCQkJcmV0ID0gLUVCVVNZOwpAQCAtNDE1LDcgKzQxNiw4IEBACiAJLyogZGVjcmVhc2UgdGhlIHJlZmNvdW50IGluIGNhc2Ugb2YgYW4gZXJyb3IgKi8KIAlpZiAocmV0KSB7CiAjaWYgZGVmaW5lZChDT05GSUdfTUVESUFfQ09OVFJPTExFUikKLQkJaWYgKHZkZXYtPnY0bDJfZGV2ICYmIHZkZXYtPnY0bDJfZGV2LT5tZGV2KQorCQlpZiAodmRldi0+djRsMl9kZXYgJiYgdmRldi0+djRsMl9kZXYtPm1kZXYgJiYKKwkJICAgIHZkZXYtPnZmbF90eXBlICE9IFZGTF9UWVBFX1NVQkRFVikKIAkJCW1lZGlhX2VudGl0eV9wdXQoZW50aXR5KTsKICNlbmRpZgogCQl2aWRlb19wdXQodmRldik7CkBAIC00MzcsNyArNDM5LDggQEAKIAkJCW11dGV4X3VubG9jayh2ZGV2LT5sb2NrKTsKIAl9CiAjaWYgZGVmaW5lZChDT05GSUdfTUVESUFfQ09OVFJPTExFUikKLQlpZiAodmRldi0+djRsMl9kZXYgJiYgdmRldi0+djRsMl9kZXYtPm1kZXYpCisJaWYgKHZkZXYtPnY0bDJfZGV2ICYmIHZkZXYtPnY0bDJfZGV2LT5tZGV2ICYmCisJICAgIHZkZXYtPnZmbF90eXBlICE9IFZGTF9UWVBFX1NVQkRFVikKIAkJbWVkaWFfZW50aXR5X3B1dCgmdmRldi0+ZW50aXR5KTsKICNlbmRpZgogCS8qIGRlY3JlYXNlIHRoZSByZWZjb3VudCB1bmNvbmRpdGlvbmFsbHkgc2luY2UgdGhlIHJlbGVhc2UoKQpAQCAtNjg2LDcgKzY4OSw4IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19NRURJQV9DT05UUk9MTEVSKQogCS8qIFBhcnQgNTogUmVnaXN0ZXIgdGhlIGVudGl0eS4gKi8KLQlpZiAodmRldi0+djRsMl9kZXYgJiYgdmRldi0+djRsMl9kZXYtPm1kZXYpIHsKKwlpZiAodmRldi0+djRsMl9kZXYgJiYgdmRldi0+djRsMl9kZXYtPm1kZXYgJiYKKwkgICAgdmRldi0+dmZsX3R5cGUgIT0gVkZMX1RZUEVfU1VCREVWKSB7CiAJCXZkZXYtPmVudGl0eS50eXBlID0gTUVESUFfRU5UX1RfREVWTk9ERV9WNEw7CiAJCXZkZXYtPmVudGl0eS5uYW1lID0gdmRldi0+bmFtZTsKIAkJdmRldi0+ZW50aXR5LnY0bC5tYWpvciA9IFZJREVPX01BSk9SOwpAQCAtNzMzLDcgKzczNyw4IEBACiAJCXJldHVybjsKIAogI2lmIGRlZmluZWQoQ09ORklHX01FRElBX0NPTlRST0xMRVIpCi0JaWYgKHZkZXYtPnY0bDJfZGV2ICYmIHZkZXYtPnY0bDJfZGV2LT5tZGV2KQorCWlmICh2ZGV2LT52NGwyX2RldiAmJiB2ZGV2LT52NGwyX2Rldi0+bWRldiAmJgorCSAgICB2ZGV2LT52ZmxfdHlwZSAhPSBWRkxfVFlQRV9TVUJERVYpCiAJCW1lZGlhX2RldmljZV91bnJlZ2lzdGVyX2VudGl0eSgmdmRldi0+ZW50aXR5KTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMKaW5kZXggNWFlYWY4Ny4uNGFhZTUwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldmljZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXZpY2UuYwpAQCAtMTU1LDggKzE1NSwxMCBAQAogCXNkLT52NGwyX2RldiA9IHY0bDJfZGV2OwogCWlmIChzZC0+aW50ZXJuYWxfb3BzICYmIHNkLT5pbnRlcm5hbF9vcHMtPnJlZ2lzdGVyZWQpIHsKIAkJZXJyID0gc2QtPmludGVybmFsX29wcy0+cmVnaXN0ZXJlZChzZCk7Ci0JCWlmIChlcnIpCisJCWlmIChlcnIpIHsKKwkJCW1vZHVsZV9wdXQoc2QtPm93bmVyKTsKIAkJCXJldHVybiBlcnI7CisJCX0KIAl9CiAKIAkvKiBUaGlzIGp1c3QgcmV0dXJucyAwIGlmIGVpdGhlciBvZiB0aGUgdHdvIGFyZ3MgaXMgTlVMTCAqLwpAQCAtMTY0LDYgKzE2Niw3IEBACiAJaWYgKGVycikgewogCQlpZiAoc2QtPmludGVybmFsX29wcyAmJiBzZC0+aW50ZXJuYWxfb3BzLT51bnJlZ2lzdGVyZWQpCiAJCQlzZC0+aW50ZXJuYWxfb3BzLT51bnJlZ2lzdGVyZWQoc2QpOworCQltb2R1bGVfcHV0KHNkLT5vd25lcik7CiAJCXJldHVybiBlcnI7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW9jdGwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1pb2N0bC5jCmluZGV4IGEwMWVkMzkuLjUwNmVkY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1pb2N0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1pb2N0bC5jCkBAIC00OCw3ICs0OCw3IEBACiAJCQlwcmludGsoS0VSTl9DT05UICIlczogIiBmbXQsIHZmZC0+bmFtZSwgIyMgYXJnKTtcCiAJCX0gd2hpbGUgKDApCiAKLS8qIFplcm8gb3V0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdCBwb2ludGVkIHRvIGJ5IHAuICBFdmVydGhpbmcgYWZ0ZXIsIGJ1dAorLyogWmVybyBvdXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0IHBvaW50ZWQgdG8gYnkgcC4gIEV2ZXJ5dGhpbmcgYWZ0ZXIsIGJ1dAogICogbm90IGluY2x1ZGluZywgdGhlIHNwZWNpZmllZCBmaWVsZCBpcyBjbGVhcmVkLiAqLwogI2RlZmluZSBDTEVBUl9BRlRFUl9GSUVMRChwLCBmaWVsZCkgXAogCW1lbXNldCgodTggKikocCkgKyBvZmZzZXRvZih0eXBlb2YoKihwKSksIGZpZWxkKSArIHNpemVvZigocCktPmZpZWxkKSwgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLXN1YmRldi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLXN1YmRldi5jCmluZGV4IDBiODA2NDQuLjgxMjcyOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1zdWJkZXYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItc3ViZGV2LmMKQEAgLTE1NSwyNSArMTU1LDI1IEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQkJcmV0dXJuIHY0bDJfc3ViZGV2X3F1ZXJ5Y3RybChzZCwgYXJnKTsKKwkJcmV0dXJuIHY0bDJfcXVlcnljdHJsKHNkLT5jdHJsX2hhbmRsZXIsIGFyZyk7CiAKIAljYXNlIFZJRElPQ19RVUVSWU1FTlU6Ci0JCXJldHVybiB2NGwyX3N1YmRldl9xdWVyeW1lbnUoc2QsIGFyZyk7CisJCXJldHVybiB2NGwyX3F1ZXJ5bWVudShzZC0+Y3RybF9oYW5kbGVyLCBhcmcpOwogCiAJY2FzZSBWSURJT0NfR19DVFJMOgotCQlyZXR1cm4gdjRsMl9zdWJkZXZfZ19jdHJsKHNkLCBhcmcpOworCQlyZXR1cm4gdjRsMl9nX2N0cmwoc2QtPmN0cmxfaGFuZGxlciwgYXJnKTsKIAogCWNhc2UgVklESU9DX1NfQ1RSTDoKLQkJcmV0dXJuIHY0bDJfc3ViZGV2X3NfY3RybChzZCwgYXJnKTsKKwkJcmV0dXJuIHY0bDJfc19jdHJsKHNkLT5jdHJsX2hhbmRsZXIsIGFyZyk7CiAKIAljYXNlIFZJRElPQ19HX0VYVF9DVFJMUzoKLQkJcmV0dXJuIHY0bDJfc3ViZGV2X2dfZXh0X2N0cmxzKHNkLCBhcmcpOworCQlyZXR1cm4gdjRsMl9nX2V4dF9jdHJscyhzZC0+Y3RybF9oYW5kbGVyLCBhcmcpOwogCiAJY2FzZSBWSURJT0NfU19FWFRfQ1RSTFM6Ci0JCXJldHVybiB2NGwyX3N1YmRldl9zX2V4dF9jdHJscyhzZCwgYXJnKTsKKwkJcmV0dXJuIHY0bDJfc19leHRfY3RybHMoc2QtPmN0cmxfaGFuZGxlciwgYXJnKTsKIAogCWNhc2UgVklESU9DX1RSWV9FWFRfQ1RSTFM6Ci0JCXJldHVybiB2NGwyX3N1YmRldl90cnlfZXh0X2N0cmxzKHNkLCBhcmcpOworCQlyZXR1cm4gdjRsMl90cnlfZXh0X2N0cmxzKHNkLT5jdHJsX2hhbmRsZXIsIGFyZyk7CiAKIAljYXNlIFZJRElPQ19EUUVWRU5UOgogCQlpZiAoIShzZC0+ZmxhZ3MgJiBWNEwyX1NVQkRFVl9GTF9IQVNfRVZFTlRTKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLWNvbnRpZy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtY29udGlnLmMKaW5kZXggYzQ3NDJmYy4uYzk2OTExMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtY29udGlnLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtY29udGlnLmMKQEAgLTMwMCw3ICszMDAsNyBAQAogCiAJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS0+dm1fcGFnZV9wcm90KTsKIAlyZXR2YWwgPSByZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LAotCQkJCSBQRk5fRE9XTih2aXJ0X3RvX3BoeXMobWVtLT52YWRkcikpLAorCQkJCSBtZW0tPmRtYV9oYW5kbGUgPj4gUEFHRV9TSElGVCwKIAkJCQkgc2l6ZSwgdm1hLT52bV9wYWdlX3Byb3QpOwogCWlmIChyZXR2YWwpIHsKIAkJZGV2X2VycihxLT5kZXYsICJtbWFwOiByZW1hcCBmYWlsZWQgd2l0aCBlcnJvciAlZC4gIiwgcmV0dmFsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYyLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYyLWNvcmUuYwppbmRleCA2Njk4Yzc3Li42YmExNDYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmMi1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1ZjItY29yZS5jCkBAIC0zNyw2ICszNyw5IEBACiAjZGVmaW5lIGNhbGxfcW9wKHEsIG9wLCBhcmdzLi4uKQkJCQkJXAogCSgoKHEpLT5vcHMtPm9wKSA/ICgocSktPm9wcy0+b3AoYXJncykpIDogMCkKIAorI2RlZmluZSBWNEwyX0JVRkZFUl9TVEFURV9GTEFHUwkoVjRMMl9CVUZfRkxBR19NQVBQRUQgfCBWNEwyX0JVRl9GTEFHX1FVRVVFRCB8IFwKKwkJCQkgVjRMMl9CVUZfRkxBR19ET05FIHwgVjRMMl9CVUZfRkxBR19FUlJPUikKKwogLyoqCiAgKiBfX3ZiMl9idWZfbWVtX2FsbG9jKCkgLSBhbGxvY2F0ZSB2aWRlbyBtZW1vcnkgZm9yIHRoZSBnaXZlbiBidWZmZXIKICAqLwpAQCAtNTEsNyArNTQsNyBAQAogCWZvciAocGxhbmUgPSAwOyBwbGFuZSA8IHZiLT5udW1fcGxhbmVzOyArK3BsYW5lKSB7CiAJCW1lbV9wcml2ID0gY2FsbF9tZW1vcChxLCBwbGFuZSwgYWxsb2MsIHEtPmFsbG9jX2N0eFtwbGFuZV0sCiAJCQkJCXBsYW5lX3NpemVzW3BsYW5lXSk7Ci0JCWlmICghbWVtX3ByaXYpCisJCWlmIChJU19FUlJfT1JfTlVMTChtZW1fcHJpdikpCiAJCQlnb3RvIGZyZWU7CiAKIAkJLyogQXNzb2NpYXRlIGFsbG9jYXRvciBwcml2YXRlIGRhdGEgd2l0aCB0aGlzIHBsYW5lICovCkBAIC0yODQsNyArMjg3LDcgQEAKIAlzdHJ1Y3QgdmIyX3F1ZXVlICpxID0gdmItPnZiMl9xdWV1ZTsKIAlpbnQgcmV0ID0gMDsKIAotCS8qIENvcHkgYmFjayBkYXRhIHN1Y2ggYXMgdGltZXN0YW1wLCBpbnB1dCwgZXRjLiAqLworCS8qIENvcHkgYmFjayBkYXRhIHN1Y2ggYXMgdGltZXN0YW1wLCBmbGFncywgaW5wdXQsIGV0Yy4gKi8KIAltZW1jcHkoYiwgJnZiLT52NGwyX2J1Ziwgb2Zmc2V0b2Yoc3RydWN0IHY0bDJfYnVmZmVyLCBtKSk7CiAJYi0+aW5wdXQgPSB2Yi0+djRsMl9idWYuaW5wdXQ7CiAJYi0+cmVzZXJ2ZWQgPSB2Yi0+djRsMl9idWYucmVzZXJ2ZWQ7CkBAIC0zMTMsNyArMzE2LDEwIEBACiAJCQliLT5tLnVzZXJwdHIgPSB2Yi0+djRsMl9wbGFuZXNbMF0ubS51c2VycHRyOwogCX0KIAotCWItPmZsYWdzID0gMDsKKwkvKgorCSAqIENsZWFyIGFueSBidWZmZXIgc3RhdGUgcmVsYXRlZCBmbGFncy4KKwkgKi8KKwliLT5mbGFncyAmPSB+VjRMMl9CVUZGRVJfU1RBVEVfRkxBR1M7CiAKIAlzd2l0Y2ggKHZiLT5zdGF0ZSkgewogCWNhc2UgVkIyX0JVRl9TVEFURV9RVUVVRUQ6CkBAIC01MTksNiArNTI1LDcgQEAKIAludW1fYnVmZmVycyA9IG1pbl90KHVuc2lnbmVkIGludCwgcmVxLT5jb3VudCwgVklERU9fTUFYX0ZSQU1FKTsKIAltZW1zZXQocGxhbmVfc2l6ZXMsIDAsIHNpemVvZihwbGFuZV9zaXplcykpOwogCW1lbXNldChxLT5hbGxvY19jdHgsIDAsIHNpemVvZihxLT5hbGxvY19jdHgpKTsKKwlxLT5tZW1vcnkgPSByZXEtPm1lbW9yeTsKIAogCS8qCiAJICogQXNrIHRoZSBkcml2ZXIgaG93IG1hbnkgYnVmZmVycyBhbmQgcGxhbmVzIHBlciBidWZmZXIgaXQgcmVxdWlyZXMuCkBAIC01NjAsOCArNTY3LDYgQEAKIAkJcmV0ID0gbnVtX2J1ZmZlcnM7CiAJfQogCi0JcS0+bWVtb3J5ID0gcmVxLT5tZW1vcnk7Ci0KIAkvKgogCSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQgYnVmZmVycwogCSAqIHRvIHRoZSB1c2Vyc3BhY2UuCkBAIC03MTUsNiArNzIwLDggQEAKIAogCXZiLT52NGwyX2J1Zi5maWVsZCA9IGItPmZpZWxkOwogCXZiLT52NGwyX2J1Zi50aW1lc3RhbXAgPSBiLT50aW1lc3RhbXA7CisJdmItPnY0bDJfYnVmLmlucHV0ID0gYi0+aW5wdXQ7CisJdmItPnY0bDJfYnVmLmZsYWdzID0gYi0+ZmxhZ3MgJiB+VjRMMl9CVUZGRVJfU1RBVEVfRkxBR1M7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYyLWRtYS1jb250aWcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYyLWRtYS1jb250aWcuYwppbmRleCA1ODIwNWQ1Li5hNzkwYTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmMi1kbWEtY29udGlnLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1ZjItZG1hLWNvbnRpZy5jCkBAIC00Niw3ICs0Niw3IEBACiAJCQkJCUdGUF9LRVJORUwpOwogCWlmICghYnVmLT52YWRkcikgewogCQlkZXZfZXJyKGNvbmYtPmRldiwgImRtYV9hbGxvY19jb2hlcmVudCBvZiBzaXplICVsZCBmYWlsZWRcbiIsCi0JCQlidWYtPnNpemUpOworCQkJc2l6ZSk7CiAJCWtmcmVlKGJ1Zik7CiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdnB4MzIyMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMKaW5kZXggNzUzMDFkMS4uY2EzNzJlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMKQEAgLTM1NCw3ICszNTQsNyBAQAogCiAJLyogSGVyZSB3ZSBiYWNrIHVwIHRoZSBpbnB1dCBzZWxlY3Rpb24gYmVjYXVzZSBpdCBnZXRzCiAJICAgb3ZlcndyaXR0ZW4gd2hlbiB3ZSBmaWxsIHRoZSByZWdpc3RlcnMgd2l0aCB0aGUKLQkgICBjaG9vc2VuIHZpZGVvIG5vcm0gKi8KKwkgICBjaG9zZW4gdmlkZW8gbm9ybSAqLwogCXRlbXBfaW5wdXQgPSB2cHgzMjIwX2ZwX3JlYWQoc2QsIDB4ZjIpOwogCiAJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic19zdGQgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzdGQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi92aWRlb2NvZGVjLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3ZpZGVvY29kZWMuaAppbmRleCBiNjU0YmZmLi5kZWY1NTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3ZpZGVvY29kZWMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3ZpZGVvY29kZWMuaApAQCAtNTcsNyArNTcsNyBAQAogICAgdGhlcmZvciB0aGV5IG1heSBub3QgYmUgaW5pdGlhbGl6ZWQuCiAKICAgIFRoZSBvdGhlciBmdW5jdGlvbnMgYXJlIGp1c3QgZm9yIGNvbnZlbmllbmNlLCBhcyB0aGV5IGFyZSBmb3Igc3VyZSB1c2VkIGJ5Ci0gICBtb3N0L2FsbCBvZiB0aGUgY29kZWNzLiBUaGUgbGFzdCBvbmVzIG1heSBiZSBvbW1pdGVkLCB0b28uCisgICBtb3N0L2FsbCBvZiB0aGUgY29kZWNzLiBUaGUgbGFzdCBvbmVzIG1heSBiZSBvbWl0dGVkLCB0b28uCiAKICAgIFNlZSB0aGUgc3RydWN0dXJlIGRlY2xhcmF0aW9uIGJlbG93IGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCB3aGljaCBkYXRhIGhhcwogICAgdG8gYmUgc2V0IHVwIGZvciB0aGUgbWFzdGVyIGFuZCB0aGUgc2xhdmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuLmgKaW5kZXggNGJiMzY4ZS4uZjNmNjQwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW4uaApAQCAtMjU5LDcgKzI1OSw3IEBACiAJc3RydWN0IHZmZV9wb2xhcml0eSB2ZmVfcG9sOwogCXU4IGdwaW9fcG9sW1pSX0dQSU9fTUFYXTsKIAotCS8qIGlzIHRoZSAvR1dTIGxpbmUgY29uZWN0ZWQ/ICovCisJLyogaXMgdGhlIC9HV1MgbGluZSBjb25uZWN0ZWQ/ICovCiAJdTggZ3dzX25vdF9jb25uZWN0ZWQ7CiAKIAkvKiBhdnM2ZXllcyBtdXggc2V0dGluZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMKaW5kZXggN2MzOTIxZC4uMjc3MWQ4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jCkBAIC0xMjU0LDcgKzEyNTQsNyBAQAogewogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAKLQkvKiBJZiB0aGVyZSBpcyBub3RoaW5nIHRvIGRvLCByZXR1cm4gaW1tZWRpYXRseSAqLworCS8qIElmIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8sIHJldHVybiBpbW1lZGlhdGVseSAqLwogCWlmICgob24gJiYgZmgtPm92ZXJsYXlfYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHx8CiAJICAgICghb24gJiYgZmgtPm92ZXJsYXlfYWN0aXZlID09IFpPUkFOX0ZSRUUpKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jIGIvZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMKaW5kZXggNTdiNDJiZi4uNGExOTA5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMKQEAgLTk3Myw3ICs5NzMsNyBAQAogfQogCiAvKiBNZW1vcnkgYWxsb2NhdGVkIGZvciBhdHRyaWJ1dGVzIGJ5IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGZyZWVkIGJ5Ci0gKiBtc3Byb19ibG9ja19kYXRhX2NsZWFyLCBubyBtYXR0ZXIgaWYgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgc3VjY2VkZWQKKyAqIG1zcHJvX2Jsb2NrX2RhdGFfY2xlYXIsIG5vIG1hdHRlciBpZiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBzdWNjZWVkZWQKICAqIG9yIGZhaWxlZC4KICAqLwogc3RhdGljIGludCBtc3Byb19ibG9ja19yZWFkX2F0dHJpYnV0ZXMoc3RydWN0IG1lbXN0aWNrX2RldiAqY2FyZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtc3RpY2svaG9zdC9yNTkyLmMgYi9kcml2ZXJzL21lbXN0aWNrL2hvc3QvcjU5Mi5jCmluZGV4IDcwMGQ0MjAuLjY2OGY1YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVtc3RpY2svaG9zdC9yNTkyLmMKKysrIGIvZHJpdmVycy9tZW1zdGljay9ob3N0L3I1OTIuYwpAQCAtNzk2LDcgKzc5Niw3IEBACiAJaWYgKG1lbXN0aWNrX2FkZF9ob3N0KGhvc3QpKQogCQlnb3RvIGVycm9yNzsKIAotCW1lc3NhZ2UoImRyaXZlciBzdWNjZXNmdWxseSBsb2FkZWQiKTsKKwltZXNzYWdlKCJkcml2ZXIgc3VjY2Vzc2Z1bGx5IGxvYWRlZCIpOwogCXJldHVybiAwOwogZXJyb3I3OgogCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZW1zdGljay9ob3N0L3I1OTIuaCBiL2RyaXZlcnMvbWVtc3RpY2svaG9zdC9yNTkyLmgKaW5kZXggZWVlMjY0ZS4uYzU3MjZjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZW1zdGljay9ob3N0L3I1OTIuaAorKysgYi9kcml2ZXJzL21lbXN0aWNrL2hvc3QvcjU5Mi5oCkBAIC00MywxMiArNDMsMTIgQEAKIAogCQkJCQkJCS8qIEVycm9yIGRldGVjdGlvbiB2aWEgQ1JDICovCiAjZGVmaW5lIFI1OTJfU1RBVFVTX1NFTkRfRVJSCQkoMSA8PCAyNCkJLyogU2VuZCBmYWlsZWQgKi8KLSNkZWZpbmUgUjU5Ml9TVEFUVVNfUkVDVl9FUlIJCSgxIDw8IDI1KQkvKiBSZWNpZXZlIGZhaWxlZCAqLworI2RlZmluZSBSNTkyX1NUQVRVU19SRUNWX0VSUgkJKDEgPDwgMjUpCS8qIFJlY2VpdmUgZmFpbGVkICovCiAKIAkJCQkJCQkvKiBDYXJkIHN0YXRlICovCi0jZGVmaW5lIFI1OTJfU1RBVFVTX1JEWQkJCSgxIDw8IDI4KQkvKiBSRFkgc2lnbmFsIHJlY2lldmVkICovCisjZGVmaW5lIFI1OTJfU1RBVFVTX1JEWQkJCSgxIDw8IDI4KQkvKiBSRFkgc2lnbmFsIHJlY2VpdmVkICovCiAjZGVmaW5lIFI1OTJfU1RBVFVTX0NFRAkJCSgxIDw8IDI5KQkvKiBJTlQ6IENvbW1hbmQgZG9uZSAoc2VyaWFsIG1vZGUpKi8KLSNkZWZpbmUgUjU5Ml9TVEFUVVNfU0ZJRk9fSU5QVVQJCSgxIDw8IDMwKQkvKiBTbWFsbCBmaWZvIHJlY2lldmVkIGRhdGEqLworI2RlZmluZSBSNTkyX1NUQVRVU19TRklGT19JTlBVVAkJKDEgPDwgMzApCS8qIFNtYWxsIGZpZm8gcmVjZWl2ZWQgZGF0YSovCiAKICNkZWZpbmUgUjU5Ml9TRklGT19TSVpFCQkJMzIJCS8qIHRvdGFsIHNpemUgb2Ygc21hbGwgZmlmbyBpcyAzMiBieXRlcyAqLwogI2RlZmluZSBSNTkyX1NGSUZPX1BBQ0tFVAkJOAkJLyogcGFja2V0IHNpemUgb2Ygc21hbGwgZmlmbyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvbXBpX2xvZ19mYy5oIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvbXBpX2xvZ19mYy5oCmluZGV4IGZhY2U2ZTcuLjAzYmU4YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbHNpL21waV9sb2dfZmMuaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL2xzaS9tcGlfbG9nX2ZjLmgKQEAgLTM4LDggKzM4LDggQEAKIHsKICAgICBNUElfSU9DTE9HSU5GT19GQ19JTklUX0JBU0UgICAgICAgICAgICAgICAgICAgICA9IDB4MjAwMDAwMDAsCiAgICAgTVBJX0lPQ0xPR0lORk9fRkNfSU5JVF9FUlJPUl9PVVRfT0ZfT1JERVJfRlJBTUUgPSAweDIwMDAwMDAxLCAvKiByZWNlaXZlZCBhbiBvdXQgb2Ygb3JkZXIgZnJhbWUgLSB1bnN1cHBvcnRlZCAqLwotICAgIE1QSV9JT0NMT0dJTkZPX0ZDX0lOSVRfRVJST1JfQkFEX1NUQVJUX09GX0ZSQU1FID0gMHgyMDAwMDAwMiwgLyogQmFkIFJ4IEZyYW1lLCBiYWQgc3RhcnQgb2YgZnJhbWUgcHJpbWF0aXZlICovCi0gICAgTVBJX0lPQ0xPR0lORk9fRkNfSU5JVF9FUlJPUl9CQURfRU5EX09GX0ZSQU1FICAgPSAweDIwMDAwMDAzLCAvKiBCYWQgUnggRnJhbWUsIGJhZCBlbmQgb2YgZnJhbWUgcHJpbWF0aXZlICovCisgICAgTVBJX0lPQ0xPR0lORk9fRkNfSU5JVF9FUlJPUl9CQURfU1RBUlRfT0ZfRlJBTUUgPSAweDIwMDAwMDAyLCAvKiBCYWQgUnggRnJhbWUsIGJhZCBzdGFydCBvZiBmcmFtZSBwcmltaXRpdmUgKi8KKyAgICBNUElfSU9DTE9HSU5GT19GQ19JTklUX0VSUk9SX0JBRF9FTkRfT0ZfRlJBTUUgICA9IDB4MjAwMDAwMDMsIC8qIEJhZCBSeCBGcmFtZSwgYmFkIGVuZCBvZiBmcmFtZSBwcmltaXRpdmUgKi8KICAgICBNUElfSU9DTE9HSU5GT19GQ19JTklUX0VSUk9SX09WRVJfUlVOICAgICAgICAgICA9IDB4MjAwMDAwMDQsIC8qIEJhZCBSeCBGcmFtZSwgb3ZlcnJ1biAqLwogICAgIE1QSV9JT0NMT0dJTkZPX0ZDX0lOSVRfRVJST1JfUlhfT1RIRVIgICAgICAgICAgID0gMHgyMDAwMDAwNSwgLyogT3RoZXIgZXJyb3JzIGNhdWdodCBieSBJT0Mgd2hpY2ggcmVxdWlyZSByZXRyaWVzICovCiAgICAgTVBJX0lPQ0xPR0lORk9fRkNfSU5JVF9FUlJPUl9TVUJQUk9DX0RFQUQgICAgICAgPSAweDIwMDAwMDA2LCAvKiBNYWluIHByb2Nlc3NvciBjb3VsZCBub3QgaW5pdGlhbGl6ZSBzdWItcHJvY2Vzc29yICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL2xzaS9tcGlfbG9nX3Nhcy5oIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvbXBpX2xvZ19zYXMuaAppbmRleCA4YjA0ODEwLi5mNjI5NjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL2xzaS9tcGlfbG9nX3Nhcy5oCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbHNpL21waV9sb2dfc2FzLmgKQEAgLTU2LDkgKzU2LDkgQEAKICNkZWZpbmUgSU9QX0xPR0lORk9fQ09ERV9GV1VQTE9BRF9OT19GTEFTSF9BVkFJTEFCTEUgICAgICAgICAoMHgwMDAzRTAwMCkgLyogVHJpZWQgdG8gdXBsb2FkIGZyb20gZmxhc2gsIGJ1dCB0aGVyZSBpcyBub25lICovCiAjZGVmaW5lIElPUF9MT0dJTkZPX0NPREVfRldVUExPQURfVU5LTk9XTl9JTUFHRV9UWVBFICAgICAgICAgKDB4MDAwM0UwMDEpIC8qIEltYWdlVHlwZSBmaWVsZCBjb250ZW50cyB3ZXJlIGludmFsaWQgKi8KICNkZWZpbmUgSU9QX0xPR0lORk9fQ09ERV9GV1VQTE9BRF9XUk9OR19JTUFHRV9TSVpFICAgICAgICAgICAoMHgwMDAzRTAwMikgLyogSW1hZ2VTaXplIGZpZWxkIGluIFRDU0dFIHdhcyBiYWQvb2Zmc2V0IGluIE1mZ1BnIDQgd2FzIHdyb25nICovCi0jZGVmaW5lIElPUF9MT0dJTkZPX0NPREVfRldVUExPQURfRU5USVJFX0ZMQVNIX1VQTE9BRF9GQUlMRUQgKDB4MDAwM0UwMDMpIC8qIEVycm9yIG9jY3VyZWQgd2hpbGUgYXR0ZW1wdGluZyB0byB1cGxvYWQgdGhlIGVudGlyZSBmbGFzaCAqLwotI2RlZmluZSBJT1BfTE9HSU5GT19DT0RFX0ZXVVBMT0FEX1JFR0lPTl9VUExPQURfRkFJTEVEICAgICAgICgweDAwMDNFMDA0KSAvKiBFcnJvciBvY2N1cmVkIHdoaWxlIGF0dGVtcHRpbmcgdG8gdXBsb2FkIHNpbmdsZSBmbGFzaCByZWdpb24gKi8KLSNkZWZpbmUgSU9QX0xPR0lORk9fQ09ERV9GV1VQTE9BRF9ETUFfRkFJTFVSRSAgICAgICAgICAgICAgICAoMHgwMDAzRTAwNSkgLyogUHJvYmxlbSBvY2N1cmVkIHdoaWxlIERNQWluZyBGVyB0byBob3N0IG1lbW9yeSAqLworI2RlZmluZSBJT1BfTE9HSU5GT19DT0RFX0ZXVVBMT0FEX0VOVElSRV9GTEFTSF9VUExPQURfRkFJTEVEICgweDAwMDNFMDAzKSAvKiBFcnJvciBvY2N1cnJlZCB3aGlsZSBhdHRlbXB0aW5nIHRvIHVwbG9hZCB0aGUgZW50aXJlIGZsYXNoICovCisjZGVmaW5lIElPUF9MT0dJTkZPX0NPREVfRldVUExPQURfUkVHSU9OX1VQTE9BRF9GQUlMRUQgICAgICAgKDB4MDAwM0UwMDQpIC8qIEVycm9yIG9jY3VycmVkIHdoaWxlIGF0dGVtcHRpbmcgdG8gdXBsb2FkIHNpbmdsZSBmbGFzaCByZWdpb24gKi8KKyNkZWZpbmUgSU9QX0xPR0lORk9fQ09ERV9GV1VQTE9BRF9ETUFfRkFJTFVSRSAgICAgICAgICAgICAgICAoMHgwMDAzRTAwNSkgLyogUHJvYmxlbSBvY2N1cnJlZCB3aGlsZSBETUFpbmcgRlcgdG8gaG9zdCBtZW1vcnkgKi8KIAogI2RlZmluZSBJT1BfTE9HSU5GT19DT0RFX0RJQUdfTVNHX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICgweDAwMDQwMDAwKSAvKiBFcnJvciBoYW5kbGluZyBkaWFnIG1zZyAtIG9yJ2Qgd2l0aCBkaWFnIHN0YXR1cyAqLwogCkBAIC0xODcsOCArMTg3LDggQEAKICNkZWZpbmUgUExfTE9HSU5GT19TVUJfQ09ERV9CUkVBS19PTl9JTkNPTVBMRVRFX0JSRUFLX1JDVkQgICAoMHgwMDAwNTAwMCkKIAogI2RlZmluZSBQTF9MT0dJTkZPX0NPREVfRU5DTF9NR01UX1NNUF9GUkFNRV9GQUlMVVJFICAgICAgICAgICgweDAwMjAwMDAwKSAvKiBDYW4ndCBnZXQgU01QIEZyYW1lICovCi0jZGVmaW5lIFBMX0xPR0lORk9fQ09ERV9FTkNMX01HTVRfU01QX1JFQURfRVJST1IgICAgICAgICAgICAgKDB4MDAyMDAwMTApIC8qIEVycm9yIG9jY3VyZWQgb24gU01QIFJlYWQgKi8KLSNkZWZpbmUgUExfTE9HSU5GT19DT0RFX0VOQ0xfTUdNVF9TTVBfV1JJVEVfRVJST1IgICAgICAgICAgICAoMHgwMDIwMDAyMCkgLyogRXJyb3Igb2NjdXJlZCBvbiBTTVAgV3JpdGUgKi8KKyNkZWZpbmUgUExfTE9HSU5GT19DT0RFX0VOQ0xfTUdNVF9TTVBfUkVBRF9FUlJPUiAgICAgICAgICAgICAoMHgwMDIwMDAxMCkgLyogRXJyb3Igb2NjdXJyZWQgb24gU01QIFJlYWQgKi8KKyNkZWZpbmUgUExfTE9HSU5GT19DT0RFX0VOQ0xfTUdNVF9TTVBfV1JJVEVfRVJST1IgICAgICAgICAgICAoMHgwMDIwMDAyMCkgLyogRXJyb3Igb2NjdXJyZWQgb24gU01QIFdyaXRlICovCiAjZGVmaW5lIFBMX0xPR0lORk9fQ09ERV9FTkNMX01HTVRfTk9UX1NVUFBPUlRFRF9PTl9FTkNMICAgICAgKDB4MDAyMDAwNDApIC8qIEVuY2wgTWdtdCBzZXJ2aWNlcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIFdXSUQgKi8KICNkZWZpbmUgUExfTE9HSU5GT19DT0RFX0VOQ0xfTUdNVF9BRERSX01PREVfTk9UX1NVUFBPUlRFRCAgICAoMHgwMDIwMDA1MCkgLyogQWRkcmVzcyBNb2RlIG5vdCBzdXBwb3JlZCAqLwogI2RlZmluZSBQTF9MT0dJTkZPX0NPREVfRU5DTF9NR01UX0JBRF9TTE9UX05VTSAgICAgICAgICAgICAgICgweDAwMjAwMDYwKSAvKiBJbnZhbGlkIFNsb3QgTnVtYmVyIGluIFNFUCBNc2cgKi8KQEAgLTIwNyw4ICsyMDcsOCBAQAogI2RlZmluZSBQTF9MT0dJTkZPX0RBX1NFUF9SRUNFSVZFRF9OQUNLX0ZST01fU0xBVkUgICAgICAgICAgICgweDAwMjAwMTAzKSAvKiBTRVAgTkFDSydkLCBpdCBpcyBidXN5ICovCiAjZGVmaW5lIFBMX0xPR0lORk9fREFfU0VQX0RJRF9OT1RfUkVDRUlWRV9BQ0sgICAgICAgICAgICAgICAgKDB4MDAyMDAxMDQpIC8qIFNFUCBkaWRuJ3QgcmN2LiBBQ0sgKExhc3QgUmN2ZCBCaXQgPSAxKSAqLwogI2RlZmluZSBQTF9MT0dJTkZPX0RBX1NFUF9CQURfU1RBVFVTX0hEUl9DSEtTVU0gICAgICAgICAgICAgICgweDAwMjAwMTA1KSAvKiBTRVAgc3RvcHBlZCBvciBzZW50IGJhZCBjaGtzdW0gaW4gSGRyICovCi0jZGVmaW5lIFBMX0xPR0lORk9fREFfU0VQX1NUT1BfT05fREFUQSAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAyMDAxMDYpIC8qIFNFUCBzdG9wcGVkIHdoaWxlIHRyYW5zZmVyaW5nIGRhdGEgKi8KLSNkZWZpbmUgUExfTE9HSU5GT19EQV9TRVBfU1RPUF9PTl9TRU5TRV9EQVRBICAgICAgICAgICAgICAgICAoMHgwMDIwMDEwNykgLyogU0VQIHN0b3BwZWQgd2hpbGUgdHJhbnNmZXJpbmcgc2Vuc2UgZGF0YSAqLworI2RlZmluZSBQTF9MT0dJTkZPX0RBX1NFUF9TVE9QX09OX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICgweDAwMjAwMTA2KSAvKiBTRVAgc3RvcHBlZCB3aGlsZSB0cmFuc2ZlcnJpbmcgZGF0YSAqLworI2RlZmluZSBQTF9MT0dJTkZPX0RBX1NFUF9TVE9QX09OX1NFTlNFX0RBVEEgICAgICAgICAgICAgICAgICgweDAwMjAwMTA3KSAvKiBTRVAgc3RvcHBlZCB3aGlsZSB0cmFuc2ZlcnJpbmcgc2Vuc2UgZGF0YSAqLwogI2RlZmluZSBQTF9MT0dJTkZPX0RBX1NFUF9VTlNVUFBPUlRFRF9TQ1NJX1NUQVRVU18xICAgICAgICAgICgweDAwMjAwMTA4KSAvKiBTRVAgcmV0dXJuZWQgdW5rbm93biBzY3NpIHN0YXR1cyAqLwogI2RlZmluZSBQTF9MT0dJTkZPX0RBX1NFUF9VTlNVUFBPUlRFRF9TQ1NJX1NUQVRVU18yICAgICAgICAgICgweDAwMjAwMTA5KSAvKiBTRVAgcmV0dXJuZWQgdW5rbm93biBzY3NpIHN0YXR1cyAqLwogI2RlZmluZSBQTF9MT0dJTkZPX0RBX1NFUF9DSEtTVU1fRVJST1JfQUZURVJfU1RPUCAgICAgICAgICAgICgweDAwMjAwMTBBKSAvKiBTRVAgcmV0dXJuZWQgYmFkIGNoa3N1bSBhZnRlciBTVE9QICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCmluZGV4IGVjODA4MGMuLmZhMTVlODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCkBAIC0zNDM1LDcgKzM0MzUsNyBAQAogICoJSWYgbWVtb3J5IGhhcyBhbHJlYWR5IGJlZW4gYWxsb2NhdGVkLCB0aGUgc2FtZSAoY2FjaGVkKSB2YWx1ZQogICoJaXMgcmV0dXJuZWQuCiAgKgotICoJUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bGwsIG9yIG5vbi16ZXJvIGZvciBmYWlsdXJlCisgKglSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvciBub24temVybyBmb3IgZmFpbHVyZQogICoqLwogaW50CiBtcHRfYWxsb2NfZndfbWVtb3J5KE1QVF9BREFQVEVSICppb2MsIGludCBzaXplKQpAQCAtNjkzMiw3ICs2OTMyLDcgQEAKICAqCU1lc3NhZ2UgVW5pdCBSZXNldCAtIGluc3RydWN0cyB0aGUgSU9DIHRvIHJlc2V0IHRoZSBSZXBseSBQb3N0IGFuZAogICoJRnJlZSBGSUZPJ3MuIEFsbCB0aGUgTWVzc2FnZSBGcmFtZXMgb24gUmVwbHkgRnJlZSBGSUZPIGFyZSBkaXNjYXJkZWQuCiAgKglBbGwgcG9zdGVkIGJ1ZmZlcnMgYXJlIGZyZWVkLCBhbmQgZXZlbnQgbm90aWZpY2F0aW9uIGlzIHR1cm5lZCBvZmYuCi0gKglJT0MgZG9lc250IHJlcGx5IHRvIGFueSBvdXRzdGFuZGluZyByZXF1ZXN0LiBUaGlzIHdpbGwgdHJhbnNmZXIgSU9DCisgKglJT0MgZG9lc24ndCByZXBseSB0byBhbnkgb3V0c3RhbmRpbmcgcmVxdWVzdC4gVGhpcyB3aWxsIHRyYW5zZmVyIElPQwogICoJdG8gUkVBRFkgc3RhdGUuCiAgKiovCiBpbnQKQEAgLTc5MDUsNyArNzkwNSw3IEBACiAJCSAgICAiT3duZXIiLCAJCQkJCS8qIDE1aCAqLwogCQkiT3BlbiBUcmFuc21pdCBETUEgQWJvcnQiLAkJCS8qIDE2aCAqLwogCQkiSU8gRGV2aWNlIE1pc3NpbmcgRGVsYXkgUmV0cnkiLAkJLyogMTdoICovCi0JCSJJTyBDYW5jZWxsZWQgRHVlIHRvIFJlY2lldmUgRXJyb3IiLAkJLyogMThoICovCisJCSJJTyBDYW5jZWxsZWQgRHVlIHRvIFJlY2VpdmUgRXJyb3IiLAkJLyogMThoICovCiAJCU5VTEwsCQkJCQkJLyogMTloICovCiAJCU5VTEwsCQkJCQkJLyogMUFoICovCiAJCU5VTEwsCQkJCQkJLyogMUJoICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuYwppbmRleCA4NzhiZGEwLi42ZTZlMTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMKQEAgLTk4NSw3ICs5ODUsNyBAQAogCVJlcGx5TXNnID0gKHBGV0Rvd25sb2FkUmVwbHlfdClpb2NwLT5pb2N0bF9jbWRzLnJlcGx5OwogCWlvY3N0YXQgPSBsZTE2X3RvX2NwdShSZXBseU1zZy0+SU9DU3RhdHVzKSAmIE1QSV9JT0NTVEFUVVNfTUFTSzsKIAlpZiAoaW9jc3RhdCA9PSBNUElfSU9DU1RBVFVTX1NVQ0NFU1MpIHsKLQkJcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQgIkYvVyB1cGRhdGUgc3VjY2Vzc2Z1bGwhXG4iLCBpb2NwLT5uYW1lKTsKKwkJcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQgIkYvVyB1cGRhdGUgc3VjY2Vzc2Z1bCFcbiIsIGlvY3AtPm5hbWUpOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgaWYgKGlvY3N0YXQgPT0gTVBJX0lPQ1NUQVRVU19JTlZBTElEX0ZVTkNUSU9OKSB7CiAJCXByaW50ayhNWUlPQ19zX1dBUk5fRk1UICJIbW1tLi4uICBGL1cgZG93bmxvYWQgbm90IHN1cHBvcnRlZCE/IVxuIiwKQEAgLTI0MDcsNyArMjQwNyw3IEBACiAJfQogCiAJLyogbWYgaXMgbnVsbCBpZiBjb21tYW5kIGlzc3VlZCBzdWNjZXNzZnVsbHkKLQkgKiBvdGhlcndpc2UsIGZhaWx1cmUgb2NjdXJlZCBhZnRlciBtZiBhY3F1aXJlZC4KKwkgKiBvdGhlcndpc2UsIGZhaWx1cmUgb2NjdXJyZWQgYWZ0ZXIgbWYgYWNxdWlyZWQuCiAJICovCiAJaWYgKG1mKQogCQltcHRfZnJlZV9tc2dfZnJhbWUoaW9jLCBtZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYwppbmRleCBmNWExNGFmLi42NmY5NDEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMKQEAgLTMwNyw3ICszMDcsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+ZndfZXZlbnRfbG9jaywgZmxhZ3MpOwogfQogCi0vKiBmcmVlIG1lbW9yeSBhc3NvaWNhdGVkIHRvIGEgc2FzIGZpcm13YXJlIGV2ZW50ICovCisvKiBmcmVlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIGEgc2FzIGZpcm13YXJlIGV2ZW50ICovCiBzdGF0aWMgdm9pZAogbXB0c2FzX2ZyZWVfZndfZXZlbnQoTVBUX0FEQVBURVIgKmlvYywgc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50KQogewpAQCAtMTA5NCw3ICsxMDk0LDcgQEAKIC8qKgogICogbXB0c2FzX3RhcmdldF9yZXNldF9xdWV1ZQogICoKLSAqIFJlY2VpdmUgcmVxdWVzdCBmb3IgVEFSR0VUX1JFU0VUIGFmdGVyIHJlY2lldmluZyBhbiBmaXJtd2FyZQorICogUmVjZWl2ZSByZXF1ZXN0IGZvciBUQVJHRVRfUkVTRVQgYWZ0ZXIgcmVjZWl2aW5nIGFuIGZpcm13YXJlCiAgKiBldmVudCBOT1RfUkVTUE9ORElOR19FVkVOVCwgdGhlbiBwdXQgY29tbWFuZCBpbiBsaW5rIGxpc3QKICAqIGFuZCBxdWV1ZSBpZiB0YXNrX3F1ZXVlIGFscmVhZHkgaW4gdXNlLgogICoKQEAgLTE0MDMsNyArMTQwMyw3IEBACiAvKioKICAqCW1wdHNhc19hZGRfZW5kX2RldmljZSAtIHJlcG9ydCBhIG5ldyBlbmQgZGV2aWNlIHRvIHNhcyB0cmFuc3BvcnQgbGF5ZXIKICAqCUBpb2M6IFBvaW50ZXIgdG8gTVBUX0FEQVBURVIgc3RydWN0dXJlCi0gKglAcGh5X2luZm86IGRlY3JpYmVzIGF0dGFjaGVkIGRldmljZQorICoJQHBoeV9pbmZvOiBkZXNjcmliZXMgYXR0YWNoZWQgZGV2aWNlCiAgKgogICoJcmV0dXJuICgwKSBzdWNjZXNzICgxKSBmYWlsdXJlCiAgKgpAQCAtMTQ4MSw3ICsxNDgxLDcgQEAKIC8qKgogICoJbXB0c2FzX2RlbF9lbmRfZGV2aWNlIC0gcmVwb3J0IGEgZGVsZXRlZCBlbmQgZGV2aWNlIHRvIHNhcyB0cmFuc3BvcnQgbGF5ZXIKICAqCUBpb2M6IFBvaW50ZXIgdG8gTVBUX0FEQVBURVIgc3RydWN0dXJlCi0gKglAcGh5X2luZm86IGRlY3JpYmVzIGF0dGFjaGVkIGRldmljZQorICoJQHBoeV9pbmZvOiBkZXNjcmliZXMgYXR0YWNoZWQgZGV2aWNlCiAgKgogICoqLwogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vUkVBRE1FIGIvZHJpdmVycy9tZXNzYWdlL2kyby9SRUFETUUKaW5kZXggOTExZmMzMC4uZjA3MmE4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9SRUFETUUKKysrIGIvZHJpdmVycy9tZXNzYWdlL2kyby9SRUFETUUKQEAgLTUzLDcgKzUzLDcgQEAKIEJveEhpbGwgQ29ycG9yYXRpb24KIAlMb2FuIG9mIGluaXRpYWwgRmlicmVDaGFubmVsIGRpc2sgYXJyYXkgdXNlZCBmb3IgZGV2ZWxvcG1lbnQgd29yay4KIAotRXVyb3BlYW4gQ29taXNzaW9uCitFdXJvcGVhbiBDb21taXNzaW9uCiAJRnVuZGluZyB0aGUgd29yayBkb25lIGJ5IHRoZSBVbml2ZXJzaXR5IG9mIEhlbHNpbmtpCiAKIFN5c0tvbm5lY3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vZGV2aWNlLmMgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2RldmljZS5jCmluZGV4IDBlZTQyNjQuLjQ1NDdkYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vZGV2aWNlLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2kyby9kZXZpY2UuYwpAQCAtNjUsNyArNjUsNyBAQAogCiAJcmMgPSBpMm9fZGV2aWNlX2lzc3VlX2NsYWltKGRldiwgSTJPX0NNRF9VVElMX0NMQUlNLCBJMk9fQ0xBSU1fUFJJTUFSWSk7CiAJaWYgKCFyYykKLQkJcHJfZGVidWcoImkybzogY2xhaW0gb2YgZGV2aWNlICVkIHN1Y2NlZGVkXG4iLAorCQlwcl9kZWJ1ZygiaTJvOiBjbGFpbSBvZiBkZXZpY2UgJWQgc3VjY2VlZGVkXG4iLAogCQkJIGRldi0+bGN0X2RhdGEudGlkKTsKIAllbHNlCiAJCXByX2RlYnVnKCJpMm86IGNsYWltIG9mIGRldmljZSAlZCBmYWlsZWQgJWRcbiIsCkBAIC0xMTAsNyArMTEwLDcgQEAKIAl9CiAKIAlpZiAoIXJjKQotCQlwcl9kZWJ1ZygiaTJvOiBjbGFpbSByZWxlYXNlIG9mIGRldmljZSAlZCBzdWNjZWRlZFxuIiwKKwkJcHJfZGVidWcoImkybzogY2xhaW0gcmVsZWFzZSBvZiBkZXZpY2UgJWQgc3VjY2VlZGVkXG4iLAogCQkJIGRldi0+bGN0X2RhdGEudGlkKTsKIAllbHNlCiAJCXByX2RlYnVnKCJpMm86IGNsYWltIHJlbGVhc2Ugb2YgZGV2aWNlICVkIGZhaWxlZCAlZFxuIiwKQEAgLTI0OCw3ICsyNDgsNyBAQAogCQkJZ290byB1bnJlZ19kZXY7CiAJfQogCi0JLyogY3JlYXRlIHVzZXIgZW50cmllcyByZWZlcmluZyB0byB0aGlzIGRldmljZSAqLworCS8qIGNyZWF0ZSB1c2VyIGVudHJpZXMgcmVmZXJyaW5nIHRvIHRoaXMgZGV2aWNlICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZjLT5kZXZpY2VzLCBsaXN0KQogCSAgICBpZiAoKHRtcC0+bGN0X2RhdGEudXNlcl90aWQgPT0gaTJvX2Rldi0+bGN0X2RhdGEudGlkKQogCQkmJiAodG1wICE9IGkyb19kZXYpKSB7CkBAIC0yNjcsNyArMjY3LDcgQEAKIAkJCWdvdG8gcm1saW5rMTsKIAl9CiAKLQkvKiBjcmVhdGUgcGFyZW50IGVudHJpZXMgcmVmZXJpbmcgdG8gdGhpcyBkZXZpY2UgKi8KKwkvKiBjcmVhdGUgcGFyZW50IGVudHJpZXMgcmVmZXJyaW5nIHRvIHRoaXMgZGV2aWNlICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZjLT5kZXZpY2VzLCBsaXN0KQogCSAgICBpZiAoKHRtcC0+bGN0X2RhdGEucGFyZW50X3RpZCA9PSBpMm9fZGV2LT5sY3RfZGF0YS50aWQpCiAJCSYmICh0bXAgIT0gaTJvX2RldikpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2Jsb2NrLmMgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19ibG9jay5jCmluZGV4IDQ3ZWM1YmMuLjQ3OTZiYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suYwpAQCAtNjEwLDcgKzYxMCw3IEBACiAKIAkvKgogCSAqIFRoaXMgaXMgdG8gZGVhaWwgd2l0aCB0aGUgY2FzZSBvZiBhbiBhcHBsaWNhdGlvbgotCSAqIG9wZW5pbmcgYSBkZXZpY2UgYW5kIHRoZW4gdGhlIGRldmljZSBkaXNzYXBlYXJzIHdoaWxlCisJICogb3BlbmluZyBhIGRldmljZSBhbmQgdGhlbiB0aGUgZGV2aWNlIGRpc2FwcGVhcnMgd2hpbGUKIAkgKiBpdCdzIGluIHVzZSwgYW5kIHRoZW4gdGhlIGFwcGxpY2F0aW9uIHRyaWVzIHRvIHJlbGVhc2UKIAkgKiBpdC4gIGV4OiBVbm1vdW50aW5nIGEgZGVsZXRlZCBSQUlEIHZvbHVtZSBhdCByZWJvb3QuCiAJICogSWYgd2Ugc2VuZCBtZXNzYWdlcywgaXQgd2lsbCBqdXN0IGNhdXNlIEZBSUxzIHNpbmNlCkBAIC03MTcsNyArNzE3LDcgQEAKIAogLyoqCiAgKglpMm9fYmxvY2tfdHJhbnNmZXIgLSBUcmFuc2ZlciBhIHJlcXVlc3QgdG8vZnJvbSB0aGUgSTJPIGNvbnRyb2xsZXIKLSAqCUByZXE6IHRoZSByZXF1ZXN0IHdoaWNoIHNob3VsZCBiZSB0cmFuc2ZlcmVkCisgKglAcmVxOiB0aGUgcmVxdWVzdCB3aGljaCBzaG91bGQgYmUgdHJhbnNmZXJyZWQKICAqCiAgKglUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSByZXF1ZXN0IGludG8gYSBJMk8gbWVzc2FnZS4gVGhlIG5lY2Vzc2FyeQogICoJRE1BIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBhbmQgYWZ0ZXIgZXZlcnl0aGluZyBpcyBzZXR1cCBwb3N0IHRoZSBtZXNzYWdlCkBAIC0xMDAwLDcgKzEwMDAsNiBAQAogCWdkLT5tYWpvciA9IEkyT19NQUpPUjsKIAlnZC0+cXVldWUgPSBxdWV1ZTsKIAlnZC0+Zm9wcyA9ICZpMm9fYmxvY2tfZm9wczsKLQlnZC0+ZXZlbnRzID0gRElTS19FVkVOVF9NRURJQV9DSEFOR0U7CiAJZ2QtPnByaXZhdGVfZGF0YSA9IGRldjsKIAogCWRldi0+Z2QgPSBnZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2Jsb2NrLmggYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19ibG9jay5oCmluZGV4IDY3ZjkyMWIuLmNmODg3M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2Jsb2NrLmgKKysrIGIvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suaApAQCAtNzMsNyArNzMsNyBAQAogCXN0cnVjdCBpMm9fZGV2aWNlICppMm9fZGV2OwkvKiBwb2ludGVyIHRvIEkyTyBkZXZpY2UgKi8KIAlzdHJ1Y3QgZ2VuZGlzayAqZ2Q7CiAJc3BpbmxvY2tfdCBsb2NrOwkvKiBxdWV1ZSBsb2NrICovCi0Jc3RydWN0IGxpc3RfaGVhZCBvcGVuX3F1ZXVlOwkvKiBsaXN0IG9mIHRyYW5zZmVyZWQsIGJ1dCB1bmZpbmlzaGVkCisJc3RydWN0IGxpc3RfaGVhZCBvcGVuX3F1ZXVlOwkvKiBsaXN0IG9mIHRyYW5zZmVycmVkLCBidXQgdW5maW5pc2hlZAogCQkJCQkgICByZXF1ZXN0cyAqLwogCXVuc2lnbmVkIGludCBvcGVuX3F1ZXVlX2RlcHRoOwkvKiBudW1iZXIgb2YgcmVxdWVzdHMgaW4gdGhlIHF1ZXVlICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX3Njc2kuYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX3Njc2kuYwppbmRleCA5N2JkZjgyLi5mMDAzOTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19zY3NpLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fc2NzaS5jCkBAIC0yMDQsNyArMjA0LDcgQEAKICAqCWkyb19zY3NpX3Byb2JlIC0gdmVyaWZ5IGlmIGRldiBpcyBhIEkyTyBTQ1NJIGRldmljZSBhbmQgaW5zdGFsbCBpdAogICoJQGRldjogZGV2aWNlIHRvIHZlcmlmeSBpZiBpdCBpcyBhIEkyTyBTQ1NJIGRldmljZQogICoKLSAqCVJldHJpZXZlIGNoYW5uZWwsIGlkIGFuZCBsdW4gZm9yIEkyTyBkZXZpY2UuIElmIGV2ZXJ0aGluZyBnb2VzIHdlbGwKKyAqCVJldHJpZXZlIGNoYW5uZWwsIGlkIGFuZCBsdW4gZm9yIEkyTyBkZXZpY2UuIElmIGV2ZXJ5dGhpbmcgZ29lcyB3ZWxsCiAgKglyZWdpc3RlciB0aGUgSTJPIGRldmljZSBhcyBTQ1NJIGRldmljZSBvbiB0aGUgSTJPIFNDU0kgY29udHJvbGxlci4KICAqCiAgKglSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9LY29uZmlnIGIvZHJpdmVycy9tZmQvS2NvbmZpZwppbmRleCBlMmZlYTU4Li4zZWQzZmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWZkL0tjb25maWcKQEAgLTIwMSw3ICsyMDEsNyBAQAogCSAgYXMgY2xvY2sgcmVxdWVzdCBoYW5kc2hha2luZy4KIAogCSAgVGhpcyBkcml2ZXIgdXNlcyBib2FyZC1zcGVjaWZpYyBkYXRhIHRvIGluaXRpYWxpemUgdGhlIHJlc291cmNlcwotCSAgYW5kIGxvYWQgc2NyaXB0cyBjb250cm9saW5nIHdoaWNoIHJlc291cmNlcyBhcmUgc3dpdGNoZWQgb2ZmL29uCisJICBhbmQgbG9hZCBzY3JpcHRzIGNvbnRyb2xsaW5nIHdoaWNoIHJlc291cmNlcyBhcmUgc3dpdGNoZWQgb2ZmL29uCiAJICBvciByZXNldCB3aGVuIGEgc2xlZXAsIHdha2V1cCBvciB3YXJtIHJlc2V0IGV2ZW50IG9jY3Vycy4KIAogY29uZmlnIFRXTDQwMzBfQ09ERUMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2FiODUwMC1ncGFkYy5jIGIvZHJpdmVycy9tZmQvYWI4NTAwLWdwYWRjLmMKaW5kZXggYmM5M2IyZS4uNjQyMWFkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvYWI4NTAwLWdwYWRjLmMKKysrIGIvZHJpdmVycy9tZmQvYWI4NTAwLWdwYWRjLmMKQEAgLTMxNCw3ICszMTQsNyBAQAogCS8qIHdhaXQgZm9yIGNvbXBsZXRpb24gb2YgY29udmVyc2lvbiAqLwogCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZncGFkYy0+YWI4NTAwX2dwYWRjX2NvbXBsZXRlLCAyKkhaKSkgewogCQlkZXZfZXJyKGdwYWRjLT5kZXYsCi0JCQkidGltZW91dDogZGlkbnQgcmVjaWV2ZSBHUEFEQyBjb252ZXJzaW9uIGludGVycnVwdFxuIik7CisJCQkidGltZW91dDogZGlkbid0IHJlY2VpdmUgR1BBREMgY29udmVyc2lvbiBpbnRlcnJ1cHRcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9hc2ljMy5jIGIvZHJpdmVycy9tZmQvYXNpYzMuYwppbmRleCBkNGE4NTFjLi4wYjRkNWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9hc2ljMy5jCisrKyBiL2RyaXZlcnMvbWZkL2FzaWMzLmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogCWludCBpdGVyLCBpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkYXRhLT5jaGlwLT5pcnFfYWNrKGlycV9kYXRhKTsKKwlkYXRhLT5jaGlwLT5pcnFfYWNrKGRhdGEpOwogCiAJZm9yIChpdGVyID0gMCA7IGl0ZXIgPCBNQVhfQVNJQ19JU1JfTE9PUFM7IGl0ZXIrKykgewogCQl1MzIgc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvZXp4LXBjYXAuYyBiL2RyaXZlcnMvbWZkL2V6eC1wY2FwLmMKaW5kZXggZjJmNDAyOS4uNDNhNzZjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvZXp4LXBjYXAuYworKysgYi9kcml2ZXJzL21mZC9lengtcGNhcC5jCkBAIC0xODUsNyArMTg1LDcgQEAKIAkJZXp4X3BjYXBfcmVhZChwY2FwLCBQQ0FQX1JFR19NU1IsICZtc3IpOwogCQllenhfcGNhcF9yZWFkKHBjYXAsIFBDQVBfUkVHX0lTUiwgJmlzcik7CiAKLQkJLyogV2UgY2FudCBzZXJ2aWNlL2FjayBpcnFzIHRoYXQgYXJlIGFzc2lnbmVkIHRvIHBvcnQgMiAqLworCQkvKiBXZSBjYW4ndCBzZXJ2aWNlL2FjayBpcnFzIHRoYXQgYXJlIGFzc2lnbmVkIHRvIHBvcnQgMiAqLwogCQlpZiAoIShwZGF0YS0+Y29uZmlnICYgUENBUF9TRUNPTkRfUE9SVCkpIHsKIAkJCWV6eF9wY2FwX3JlYWQocGNhcCwgUENBUF9SRUdfSU5UX1NFTCwgJmludF9zZWwpOwogCQkJaXNyICY9IH5pbnRfc2VsOwpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAJcGNhcC0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoInBjYXBkIik7CiAJaWYgKCFwY2FwLT53b3JrcXVldWUpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZGV2X2Vycigmc3BpLT5kZXYsICJjYW50IGNyZWF0ZSBwY2FwIHRocmVhZFxuIik7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiY2FuJ3QgY3JlYXRlIHBjYXAgdGhyZWFkXG4iKTsKIAkJZ290byBmcmVlX3BjYXA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9tZmQtY29yZS5jIGIvZHJpdmVycy9tZmQvbWZkLWNvcmUuYwppbmRleCBkMDE1NzRkLi5mNGM4Yzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9tZmQtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL21mZC1jb3JlLmMKQEAgLTU1LDYgKzU1LDE5IEBACiB9CiBFWFBPUlRfU1lNQk9MKG1mZF9jZWxsX2Rpc2FibGUpOwogCitzdGF0aWMgaW50IG1mZF9wbGF0Zm9ybV9hZGRfY2VsbChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCSBjb25zdCBzdHJ1Y3QgbWZkX2NlbGwgKmNlbGwpCit7CisJaWYgKCFjZWxsKQorCQlyZXR1cm4gMDsKKworCXBkZXYtPm1mZF9jZWxsID0ga21lbWR1cChjZWxsLCBzaXplb2YoKmNlbGwpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBkZXYtPm1mZF9jZWxsKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IG1mZF9hZGRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgaW50IGlkLAogCQkJICBjb25zdCBzdHJ1Y3QgbWZkX2NlbGwgKmNlbGwsCiAJCQkgIHN0cnVjdCByZXNvdXJjZSAqbWVtX2Jhc2UsCkBAIC03NSw3ICs4OCw3IEBACiAKIAlwZGV2LT5kZXYucGFyZW50ID0gcGFyZW50OwogCi0JcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIGNlbGwsIHNpemVvZigqY2VsbCkpOworCXJldCA9IG1mZF9wbGF0Zm9ybV9hZGRfY2VsbChwZGV2LCBjZWxsKTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxfcmVzOwogCkBAIC0xMjMsNyArMTM2LDYgQEAKIAogCXJldHVybiAwOwogCi0vKglwbGF0Zm9ybV9kZXZpY2VfZGVsKHBkZXYpOyAqLwogZmFpbF9yZXM6CiAJa2ZyZWUocmVzKTsKIGZhaWxfZGV2aWNlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvb21hcC11c2ItaG9zdC5jIGIvZHJpdmVycy9tZmQvb21hcC11c2ItaG9zdC5jCmluZGV4IGNiMDEyMDkuLjNhYjlmZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL29tYXAtdXNiLWhvc3QuYworKysgYi9kcml2ZXJzL21mZC9vbWFwLXVzYi1ob3N0LmMKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAKICNkZWZpbmUgVVNCSFNfRFJJVkVSX05BTUUJInVzYmhzLW9tYXAiCkBAIC0zMzIsNyArMzMxLDcgQEAKIAlpbnQJCQkJaTsKIAogCWlmICghcGRhdGEpIHsKLQkJZGV2X2VycihkZXYsICJNaXNzaW5nIHBsYXRmcm9tIGRhdGFcbiIpOworCQlkZXZfZXJyKGRldiwgIk1pc3NpbmcgcGxhdGZvcm0gZGF0YVxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZW5kX3Byb2JlOwogCX0KQEAgLTcwMCw4ICs2OTksNyBAQAogCWRldl9kYmcoZGV2LCAic3RhcnRpbmcgVEkgSFNVU0IgQ29udHJvbGxlclxuIik7CiAJaWYgKCFwZGF0YSkgewogCQlkZXZfZGJnKGRldiwgIm1pc3NpbmcgcGxhdGZvcm1fZGF0YVxuIik7Ci0JCXJldCA9ICAtRU5PREVWOwotCQlnb3RvIGVuZF9lbmFibGU7CisJCXJldHVybiAgLUVOT0RFVjsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmb21hcC0+bG9jaywgZmxhZ3MpOwpAQCAtNzE5LDE0ICs3MTcsMTQgQEAKIAkJCWdwaW9fcmVxdWVzdChwZGF0YS0+ZWhjaV9kYXRhLT5yZXNldF9ncGlvX3BvcnRbMF0sCiAJCQkJCQkiVVNCMSBQSFkgcmVzZXQiKTsKIAkJCWdwaW9fZGlyZWN0aW9uX291dHB1dAotCQkJCShwZGF0YS0+ZWhjaV9kYXRhLT5yZXNldF9ncGlvX3BvcnRbMF0sIDEpOworCQkJCShwZGF0YS0+ZWhjaV9kYXRhLT5yZXNldF9ncGlvX3BvcnRbMF0sIDApOwogCQl9CiAKIAkJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPmVoY2lfZGF0YS0+cmVzZXRfZ3Bpb19wb3J0WzFdKSkgewogCQkJZ3Bpb19yZXF1ZXN0KHBkYXRhLT5laGNpX2RhdGEtPnJlc2V0X2dwaW9fcG9ydFsxXSwKIAkJCQkJCSJVU0IyIFBIWSByZXNldCIpOwogCQkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0Ci0JCQkJKHBkYXRhLT5laGNpX2RhdGEtPnJlc2V0X2dwaW9fcG9ydFsxXSwgMSk7CisJCQkJKHBkYXRhLT5laGNpX2RhdGEtPnJlc2V0X2dwaW9fcG9ydFsxXSwgMCk7CiAJCX0KIAogCQkvKiBIb2xkIHRoZSBQSFkgaW4gUkVTRVQgZm9yIGVub3VnaCB0aW1lIHRpbGwgRElSIGlzIGhpZ2ggKi8KQEAgLTkwNiwxNiArOTA0LDE3IEBACiAKIAkJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPmVoY2lfZGF0YS0+cmVzZXRfZ3Bpb19wb3J0WzBdKSkKIAkJCWdwaW9fc2V0X3ZhbHVlCi0JCQkJKHBkYXRhLT5laGNpX2RhdGEtPnJlc2V0X2dwaW9fcG9ydFswXSwgMCk7CisJCQkJKHBkYXRhLT5laGNpX2RhdGEtPnJlc2V0X2dwaW9fcG9ydFswXSwgMSk7CiAKIAkJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPmVoY2lfZGF0YS0+cmVzZXRfZ3Bpb19wb3J0WzFdKSkKIAkJCWdwaW9fc2V0X3ZhbHVlCi0JCQkJKHBkYXRhLT5laGNpX2RhdGEtPnJlc2V0X2dwaW9fcG9ydFsxXSwgMCk7CisJCQkJKHBkYXRhLT5laGNpX2RhdGEtPnJlc2V0X2dwaW9fcG9ydFsxXSwgMSk7CiAJfQogCiBlbmRfY291bnQ6CiAJb21hcC0+Y291bnQrKzsKLQlnb3RvIGVuZF9lbmFibGU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb21hcC0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOwogCiBlcnJfdGxsOgogCWlmIChwZGF0YS0+ZWhjaV9kYXRhLT5waHlfcmVzZXQpIHsKQEAgLTkzMSw4ICs5MzAsNiBAQAogCWNsa19kaXNhYmxlKG9tYXAtPnVzYmhvc3RfZnNfZmNrKTsKIAljbGtfZGlzYWJsZShvbWFwLT51c2Job3N0X2hzX2Zjayk7CiAJY2xrX2Rpc2FibGUob21hcC0+dXNiaG9zdF9pY2spOwotCi1lbmRfZW5hYmxlOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9tYXAtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvcGNmNTA2MzMtY29yZS5jIGIvZHJpdmVycy9tZmQvcGNmNTA2MzMtY29yZS5jCmluZGV4IGM3Njg3ZjYuLjU3ODY4NDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9wY2Y1MDYzMy1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvcGNmNTA2MzMtY29yZS5jCkBAIC01MSw3ICs1MSw3IEBACiAKIH0KIAotLyogUmVhZCBhIGJsb2NrIG9mIHVwdG8gMzIgcmVncyAgKi8KKy8qIFJlYWQgYSBibG9jayBvZiB1cCB0byAzMiByZWdzICAqLwogaW50IHBjZjUwNjMzX3JlYWRfYmxvY2soc3RydWN0IHBjZjUwNjMzICpwY2YsIHU4IHJlZywKIAkJCQkJaW50IG5yX3JlZ3MsIHU4ICpkYXRhKQogewpAQCAtNjUsNyArNjUsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocGNmNTA2MzNfcmVhZF9ibG9jayk7CiAKLS8qIFdyaXRlIGEgYmxvY2sgb2YgdXB0byAzMiByZWdzICAqLworLyogV3JpdGUgYSBibG9jayBvZiB1cCB0byAzMiByZWdzICAqLwogaW50IHBjZjUwNjMzX3dyaXRlX2Jsb2NrKHN0cnVjdCBwY2Y1MDYzMyAqcGNmICwgdTggcmVnLAogCQkJCQlpbnQgbnJfcmVncywgdTggKmRhdGEpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90d2w0MDMwLXBvd2VyLmMgYi9kcml2ZXJzL21mZC90d2w0MDMwLXBvd2VyLmMKaW5kZXggMTY0MjJkZTAuLjJjMGQ0ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3R3bDQwMzAtcG93ZXIuYworKysgYi9kcml2ZXJzL21mZC90d2w0MDMwLXBvd2VyLmMKQEAgLTQ0NywxMiArNDQ3LDEzIEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKIAl9Ci0JaWYgKHRzY3JpcHQtPmZsYWdzICYgVFdMNDAzMF9TTEVFUF9TQ1JJUFQpCisJaWYgKHRzY3JpcHQtPmZsYWdzICYgVFdMNDAzMF9TTEVFUF9TQ1JJUFQpIHsKIAkJaWYgKG9yZGVyKQogCQkJcHJfd2FybmluZygiVFdMNDAzMDogQmFkIG9yZGVyIG9mIHNjcmlwdHMgKHNsZWVwICJcCiAJCQkJCSJzY3JpcHQgYmVmb3JlIHdha2V1cCkgTGVhZHMgdG8gYm9vdCJcCiAJCQkJCSJmYWlsdXJlIG9uIHNvbWUgYm9hcmRzXG4iKTsKIAkJZXJyID0gdHdsNDAzMF9jb25maWdfc2xlZXBfc2VxdWVuY2UoYWRkcmVzcyk7CisJfQogb3V0OgogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90d2w2MDMwLWlycS5jIGIvZHJpdmVycy9tZmQvdHdsNjAzMC1pcnEuYwppbmRleCBmYTkzNzA1Li5kZmJhZTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90d2w2MDMwLWlycS5jCisrKyBiL2RyaXZlcnMvbWZkL3R3bDYwMzAtaXJxLmMKQEAgLTIyOSw3ICsyMjksNyBAQAogCXR3bDYwMzBfaW50ZXJydXB0X3VubWFzayhUV0w2MDMwX01NQ0RFVEVDVF9JTlRfTUFTSywKIAkJCQkJCVJFR19JTlRfTVNLX1NUU19CKTsKIAkvKgotCSAqIEludGlhbGx5IENvbmZpZ3VyaW5nIE1NQ19DVFJMIGZvciByZWNldmluZyBpbnRlcnJ1cHRzICYKKwkgKiBJbml0aWFsbHkgQ29uZmlndXJpbmcgTU1DX0NUUkwgZm9yIHJlY2VpdmluZyBpbnRlcnJ1cHRzICYKIAkgKiBDYXJkIHN0YXR1cyBvbiBUV0w2MDMwIGZvciBNTUMxCiAJICovCiAJcmV0ID0gdHdsX2kyY19yZWFkX3U4KFRXTDYwMzBfTU9EVUxFX0lEMCwgJnJlZ192YWwsIFRXTDYwMzBfTU1DQ1RSTCk7CkBAIC0yNzUsNyArMjc1LDcgQEAKIAkJLyogVFdMNjAzMCBwcm92aWRlJ3MgQ2FyZCBkZXRlY3Qgc3VwcG9ydCBmb3IKIAkJICogb25seSBNTUMxIGNvbnRyb2xsZXIuCiAJCSAqLwotCQlwcl9lcnIoIlVua293biBNTUMgY29udHJvbGxlciAlZCBpbiAlc1xuIiwgcGRldi0+aWQsIF9fZnVuY19fKTsKKwkJcHJfZXJyKCJVbmtub3duIE1NQyBjb250cm9sbGVyICVkIGluICVzXG4iLCBwZGV2LT5pZCwgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0OwogCX0KIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdWNiMTQwMF9jb3JlLmMgYi9kcml2ZXJzL21mZC91Y2IxNDAwX2NvcmUuYwppbmRleCBkNzNmODRiLi5kYWY2OTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC91Y2IxNDAwX2NvcmUuYworKysgYi9kcml2ZXJzL21mZC91Y2IxNDAwX2NvcmUuYwpAQCAtOCw3ICs4LDcgQEAKICAqICBDb3B5cmlnaHQ6CU1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqCiAgKiBTcGxpdGluZyBkb25lIGJ5OiBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgotICogSWYgc29tZXRoaW5nIGRvZXNudCB3b3JrIGFuZCBpdCB3b3JrZWQgYmVmb3JlIHNwbGl0aW5nLCBlLW1haWwgbWUsCisgKiBJZiBzb21ldGhpbmcgZG9lc24ndCB3b3JrIGFuZCBpdCB3b3JrZWQgYmVmb3JlIHNwbGl0aW5nLCBlLW1haWwgbWUsCiAgKiBkb250IGJvdGhlciBOaWNvbGFzIHBsZWFzZSA7LSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2JtcDA4NS5jIGIvZHJpdmVycy9taXNjL2JtcDA4NS5jCmluZGV4IGVjZDI3NmEuLjVmODk4Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9ibXAwODUuYworKysgYi9kcml2ZXJzL21pc2MvYm1wMDg1LmMKQEAgLTIsNyArMiw3IEBACiAKICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgYm1wMDg1IGRpZ2l0YWwgYmFyb21ldHJpYyBwcmVzc3VyZQogICAgIGFuZCB0ZW1wZXJhdHVyZSBzZW5zb3IgZnJvbSBCb3NjaCBTZW5zb3J0ZWMuIFRoZSBkYXRhc2hlZXQKLSAgICBpcyBhdmFsaWFibGUgZnJvbSB0aGVpciB3ZWJzaXRlOgorICAgIGlzIGF2YWlsYWJsZSBmcm9tIHRoZWlyIHdlYnNpdGU6CiAgICAgaHR0cDovL3d3dy5ib3NjaC1zZW5zb3J0ZWMuY29tL2NvbnRlbnQvbGFuZ3VhZ2UxL2Rvd25sb2Fkcy9CU1QtQk1QMDg1LURTMDAwLTA1LnBkZgogCiAgICAgQSBwcmVzc3VyZSBtZWFzdXJlbWVudCBpcyBpc3N1ZWQgYnkgcmVhZGluZyBmcm9tIHByZXNzdXJlMF9pbnB1dC4KQEAgLTQyOSw3ICs0MjksNyBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXhpdF9mcmVlOwogCi0JZGV2X2luZm8oJmRhdGEtPmNsaWVudC0+ZGV2LCAiU3VjY2VzZnVsbHkgaW5pdGlhbGl6ZWQgYm1wMDg1IVxuIik7CisJZGV2X2luZm8oJmRhdGEtPmNsaWVudC0+ZGV2LCAiU3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkIGJtcDA4NSFcbiIpOwogCWdvdG8gZXhpdDsKIAogZXhpdF9mcmVlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2MycG9ydC9jMnBvcnQtZHVyYW1hcjIxNTAuYyBiL2RyaXZlcnMvbWlzYy9jMnBvcnQvYzJwb3J0LWR1cmFtYXIyMTUwLmMKaW5kZXggMzM4ZGNjMS4uNzc4ZmMzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2MycG9ydC9jMnBvcnQtZHVyYW1hcjIxNTAuYworKysgYi9kcml2ZXJzL21pc2MvYzJwb3J0L2MycG9ydC1kdXJhbWFyMjE1MC5jCkBAIC00MSw3ICs0MSw3IEBACiAJCW91dGIodiB8IChDMkQgfCBDMkNLKSwgRElSX1BPUlQpOwogCWVsc2UKIAkJLyogV2hlbiBhY2Nlc3MgaXMgIm9mZiIgaXMgaW1wb3J0YW50IHRoYXQgYm90aCBsaW5lcyBhcmUgc2V0Ci0JCSAqIGFzIGlucHV0cyBvciBoaS1pbXBlZGVuY2UgKi8KKwkJICogYXMgaW5wdXRzIG9yIGhpLWltcGVkYW5jZSAqLwogCQlvdXRiKHYgJiB+KEMyRCB8IEMyQ0spLCBESVJfUE9SVCk7CiAKIAltdXRleF91bmxvY2soJnVwZGF0ZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pYm1hc20vcmVtb3RlLmggYi9kcml2ZXJzL21pc2MvaWJtYXNtL3JlbW90ZS5oCmluZGV4IDcyYWNmNWEuLjAwZGJmMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9pYm1hc20vcmVtb3RlLmgKKysrIGIvZHJpdmVycy9taXNjL2libWFzbS9yZW1vdGUuaApAQCAtMjAsNyArMjAsNyBAQAogICoKICAqIEF1dGhvcjogTWF4IEFzYvZjayA8YW1heEB1cy5pYm0uY29tPgogICoKLSAqIE9yaWduYWxseSB3cml0dGVuIGJ5IFBldGUgUmV5bm9sZHMKKyAqIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXRlIFJleW5vbGRzCiAgKi8KIAogI2lmbmRlZiBfSUJNQVNNX1JFTU9URV9IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2l3bWMzMjAwdG9wL21haW4uYyBiL2RyaXZlcnMvbWlzYy9pd21jMzIwMHRvcC9tYWluLmMKaW5kZXggNzI3YWYwNy4uYjFmNDU2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2l3bWMzMjAwdG9wL21haW4uYworKysgYi9kcml2ZXJzL21pc2MvaXdtYzMyMDB0b3AvbWFpbi5jCkBAIC0yNjgsNyArMjY4LDcgQEAKIAkJTE9HX0lORk8ocHJpdiwgSVJRLCAiQUNLIGJhcmtlciBhcnJpdmVkICIKIAkJCQkiLSBzdGFydGluZyBGVyBkb3dubG9hZFxuIik7CiAJfSBlbHNlIHsgLyogUkVCT09UIGJhcmtlciAqLwotCQlMT0dfSU5GTyhwcml2LCBJUlEsICJSZWNpZXZlZCByZWJvb3QgYmFya2VyOiAleFxuIiwgYmFya2VyKTsKKwkJTE9HX0lORk8ocHJpdiwgSVJRLCAiUmVjZWl2ZWQgcmVib290IGJhcmtlcjogJXhcbiIsIGJhcmtlcik7CiAJCXByaXYtPmJhcmtlciA9IGJhcmtlcjsKIAogCQlpZiAoYmFya2VyICYgQkFSS0VSX0ROTE9BRF9TWU5DX01TSykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2tnZGJ0cy5jIGIvZHJpdmVycy9taXNjL2tnZGJ0cy5jCmluZGV4IDI3ZGM0NjMuLjc0ZjE2ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9rZ2RidHMuYworKysgYi9kcml2ZXJzL21pc2Mva2dkYnRzLmMKQEAgLTY0NSw3ICs2NDUsNyBAQAogCiAJd2hpbGUgKCpjaGtfc3RyICE9ICdcMCcgJiYgKnB1dF9zdHIgIT0gJ1wwJykgewogCQkvKiBJZiBzb21lb25lIGRvZXMgYSAqIHRvIG1hdGNoIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcsIGFsbG93Ci0JCSAqIGl0LCBvciBzdG9wIGlmIHRoZSByZWNpZXZlZCBzdHJpbmcgaXMgY29tcGxldGUuCisJCSAqIGl0LCBvciBzdG9wIGlmIHRoZSByZWNlaXZlZCBzdHJpbmcgaXMgY29tcGxldGUuCiAJCSAqLwogCQlpZiAoKnB1dF9zdHIgPT0gJyMnIHx8ICpjaGtfc3RyID09ICcqJykKIAkJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jCmluZGV4IDIwZTRlOTMuLmVjYWZhNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZpbGUuYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmaWxlLmMKQEAgLTM0OCwxNSArMzQ4LDE1IEBACiAKIHN0YXRpYyBpbnQgZ3J1X2lycV9jb3VudFtHUlVfQ0hJUExFVFNfUEVSX0JMQURFXTsKIAotc3RhdGljIHZvaWQgZ3J1X25vb3AodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGdydV9ub29wKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBncnVfY2hpcFtHUlVfQ0hJUExFVFNfUEVSX0JMQURFXSA9IHsKIAlbMCAuLi4gR1JVX0NISVBMRVRTX1BFUl9CTEFERSAtIDFdIHsKLQkJLm1hc2sJCT0gZ3J1X25vb3AsCi0JCS51bm1hc2sJCT0gZ3J1X25vb3AsCi0JCS5hY2sJCT0gZ3J1X25vb3AKKwkJLmlycV9tYXNrCT0gZ3J1X25vb3AsCisJCS5pcnFfdW5tYXNrCT0gZ3J1X25vb3AsCisJCS5pcnFfYWNrCT0gZ3J1X25vb3AKIAl9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVrc2VydmljZXMuYyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWtzZXJ2aWNlcy5jCmluZGV4IDM0NzQ5ZWUuLjllOWJkZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWtzZXJ2aWNlcy5jCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWtzZXJ2aWNlcy5jCkBAIC0yMjksNyArMjI5LDcgQEAKIAliaWQgPSBibGFkZV9pZCA8IDAgPyB1dl9udW1hX2JsYWRlX2lkKCkgOiBibGFkZV9pZDsKIAlicyA9IGdydV9iYXNlW2JpZF07CiAKLQkvKiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbWlncmF0aW9uIG9jY3VyZWQgd2hpbGUgd2FpdGluZyBmb3IgdGhlIHNlbWEgKi8KKwkvKiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbWlncmF0aW9uIG9jY3VycmVkIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBzZW1hICovCiAJZG93bl9yZWFkKCZicy0+YnNfa2d0c19zZW1hKTsKIAlpZiAoYmxhZGVfaWQgPCAwICYmIGJpZCAhPSB1dl9udW1hX2JsYWRlX2lkKCkpIHsKIAkJdXBfcmVhZCgmYnMtPmJzX2tndHNfc2VtYSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnV0YWJsZXMuaCBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXRhYmxlcy5oCmluZGV4IDdhOGI5MDYuLjVjM2NlMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXRhYmxlcy5oCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXRhYmxlcy5oCkBAIC0zNzksNyArMzc5LDcgQEAKIAkJCQkJCSAgIHJlcXVpcmVkIGZvciBjb250ZXN0ICovCiAJY2hhcgkJCXRzX2NjaF9yZXFfc2xpY2U7LyogQ0NIIHBhY2tldCBzbGljZSAqLwogCWNoYXIJCQl0c19ibGFkZTsJLyogSWYgPj0gMCwgbWlncmF0ZSBjb250ZXh0IGlmCi0JCQkJCQkgICByZWYgZnJvbSBkaWZlcmVudCBibGFkZSAqLworCQkJCQkJICAgcmVmIGZyb20gZGlmZmVyZW50IGJsYWRlICovCiAJY2hhcgkJCXRzX2ZvcmNlX2NjaF9yZWxvYWQ7CiAJY2hhcgkJCXRzX2Nicl9pZHhbR1JVX0NCUl9BVV07LyogQ0JSIG51bWJlcnMgb2YgZWFjaAogCQkJCQkJCSAgYWxsb2NhdGVkIENCICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvdGktc3Qvc3Rfa2ltLmMgYi9kcml2ZXJzL21pc2MvdGktc3Qvc3Rfa2ltLmMKaW5kZXggOWVlNGM3OC4uYjQ0ODhjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3RpLXN0L3N0X2tpbS5jCisrKyBiL2RyaXZlcnMvbWlzYy90aS1zdC9zdF9raW0uYwpAQCAtNjQ5LDcgKzY0OSw3IEBACiAJCS8qIG11bHRpcGxlIGRldmljZXMgY291bGQgZXhpc3QgKi8KIAkJc3Rfa2ltX2RldmljZXNbcGRldi0+aWRdID0gcGRldjsKIAl9IGVsc2UgewotCQkvKiBwbGF0Zm9ybSdzIHN1cmUgYWJvdXQgZXhpc3RhbmNlIG9mIDEgZGV2aWNlICovCisJCS8qIHBsYXRmb3JtJ3Mgc3VyZSBhYm91dCBleGlzdGVuY2Ugb2YgMSBkZXZpY2UgKi8KIAkJc3Rfa2ltX2RldmljZXNbMF0gPSBwZGV2OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY2FyZC9tbWNfdGVzdC5jIGIvZHJpdmVycy9tbWMvY2FyZC9tbWNfdGVzdC5jCmluZGV4IGY1Y2VkZWMuLmFiYzFhNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NhcmQvbW1jX3Rlc3QuYworKysgYi9kcml2ZXJzL21tYy9jYXJkL21tY190ZXN0LmMKQEAgLTI5Miw3ICsyOTIsNyBAQAogfQogCiAvKgotICogQWxsb2NhdGUgYSBsb3Qgb2YgbWVtb3J5LCBwcmVmZXJyYWJseSBtYXhfc3ogYnV0IGF0IGxlYXN0IG1pbl9zei4gIEluIGNhc2UKKyAqIEFsbG9jYXRlIGEgbG90IG9mIG1lbW9yeSwgcHJlZmVyYWJseSBtYXhfc3ogYnV0IGF0IGxlYXN0IG1pbl9zei4gIEluIGNhc2UKICAqIHRoZXJlIGlzbid0IG11Y2ggbWVtb3J5IGRvIG5vdCBleGNlZWQgMS8xNnRoIHRvdGFsIGxvd21lbSBwYWdlcy4gIEFsc28gZG8KICAqIG5vdCBleGNlZWQgYSBtYXhpbXVtIG51bWJlciBvZiBzZWdtZW50cyBhbmQgdHJ5IG5vdCB0byBtYWtlIHNlZ21lbnRzIG11Y2gKICAqIGJpZ2dlciB0aGFuIG1heGltdW0gc2VnbWVudCBzaXplLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9idXMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvYnVzLmMKaW5kZXggNjM2NjdhOC4uZDZkNjJmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9idXMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL2J1cy5jCkBAIC0yODQsNiArMjg0LDcgQEAKIAkJdHlwZSA9ICJTRC1jb21ibyI7CiAJCWlmIChtbWNfY2FyZF9ibG9ja2FkZHIoY2FyZCkpCiAJCQl0eXBlID0gIlNESEMtY29tYm8iOworCQlicmVhazsKIAlkZWZhdWx0OgogCQl0eXBlID0gIj8iOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMgYi9kcml2ZXJzL21tYy9jb3JlL21tYy5jCmluZGV4IDE0ZTk1ZjMuLjc3MmQwZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9tbWMuYwpAQCAtNTM4LDcgKzUzOCw3IEBACiAKIAkvKgogCSAqIElmIGVuaGFuY2VkX2FyZWFfZW4gaXMgVFJVRSwgaG9zdCBuZWVkcyB0byBlbmFibGUgRVJBU0VfR1JQX0RFRgotCSAqIGJpdC4gIFRoaXMgYml0IHdpbGwgYmUgbG9zdCBldmVyeXRpbWUgYWZ0ZXIgYSByZXNldCBvciBwb3dlciBvZmYuCisJICogYml0LiAgVGhpcyBiaXQgd2lsbCBiZSBsb3N0IGV2ZXJ5IHRpbWUgYWZ0ZXIgYSByZXNldCBvciBwb3dlciBvZmYuCiAJICovCiAJaWYgKGNhcmQtPmV4dF9jc2QuZW5oYW5jZWRfYXJlYV9lbikgewogCQllcnIgPSBtbWNfc3dpdGNoKGNhcmQsIEVYVF9DU0RfQ01EX1NFVF9OT1JNQUwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL21tY19vcHMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvbW1jX29wcy5jCmluZGV4IDYwODQyZjguLmYzYjIyYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jX29wcy5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvbW1jX29wcy5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIAkgKiB0aGF0IGluIGNhc2Ugb2YgaGFyZHdhcmUgdGhhdCB3b24ndCBwdWxsIHVwIERBVDMvbkNTIG90aGVyd2lzZS4KIAkgKgogCSAqIFNQSSBob3N0cyBpZ25vcmUgaW9zLmNoaXBfc2VsZWN0OyBpdCdzIG1hbmFnZWQgYWNjb3JkaW5nIHRvCi0JICogcnVsZXMgdGhhdCBtdXN0IGFjY29tb2RhdGUgbm9uLU1NQyBzbGF2ZXMgd2hpY2ggdGhpcyBsYXllcgorCSAqIHJ1bGVzIHRoYXQgbXVzdCBhY2NvbW1vZGF0ZSBub24tTU1DIHNsYXZlcyB3aGljaCB0aGlzIGxheWVyCiAJICogd29uJ3QgZXZlbiBrbm93IGFib3V0LgogCSAqLwogCWlmICghbW1jX2hvc3RfaXNfc3BpKGhvc3QpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9faXJxLmMgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW9faXJxLmMKaW5kZXggYmIxOTJmOS4uYjMwMDE2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9zZGlvX2lycS5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19pcnEuYwpAQCAtNDUsNyArNDUsNyBAQAogCQkJc3RydWN0IHNkaW9fZnVuYyAqZnVuYyA9IGNhcmQtPnNkaW9fZnVuY1tpIC0gMV07CiAJCQlpZiAoIWZ1bmMpIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcGVuZGluZyBJUlEgZm9yICIKLQkJCQkJIm5vbi1leGlzdGFudCBmdW5jdGlvblxuIiwKKwkJCQkJIm5vbi1leGlzdGVudCBmdW5jdGlvblxuIiwKIAkJCQkJbW1jX2NhcmRfaWQoY2FyZCkpOwogCQkJCXJldCA9IC1FSU5WQUw7CiAJCQl9IGVsc2UgaWYgKGZ1bmMtPmlycV9oYW5kbGVyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYwppbmRleCA4MGJjOWE1Li5lYTM4ODhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogICogRVZFTlRfREFUQV9DT01QTEVURSBpcyBzZXQgaW4gQHBlbmRpbmdfZXZlbnRzLCBhbGwgZGF0YS1yZWxhdGVkCiAgKiBpbnRlcnJ1cHRzIG11c3QgYmUgZGlzYWJsZWQgYW5kIEBkYXRhX3N0YXR1cyB1cGRhdGVkIHdpdGggYQogICogc25hcHNob3Qgb2YgU1IuIFNpbWlsYXJseSwgYmVmb3JlIEVWRU5UX0NNRF9DT01QTEVURSBpcyBzZXQsIHRoZQotICogQ01EUkRZIGludGVydXB0IG11c3QgYmUgZGlzYWJsZWQgYW5kIEBjbWRfc3RhdHVzIHVwZGF0ZWQgd2l0aCBhCisgKiBDTURSRFkgaW50ZXJydXB0IG11c3QgYmUgZGlzYWJsZWQgYW5kIEBjbWRfc3RhdHVzIHVwZGF0ZWQgd2l0aCBhCiAgKiBzbmFwc2hvdCBvZiBTUiwgYW5kIGJlZm9yZSBFVkVOVF9YRkVSX0NPTVBMRVRFIGNhbiBiZSBzZXQsIHRoZQogICogYnl0ZXNfeGZlcmVkIGZpZWxkIG9mIEBkYXRhIG11c3QgYmUgd3JpdHRlbi4gVGhpcyBpcyBlbnN1cmVkIGJ5CiAgKiB1c2luZyBiYXJyaWVycy4KQEAgLTEwODIsNyArMTA4Miw3IEBACiAJLyoKIAkgKiBVcGRhdGUgdGhlIE1NQyBjbG9jayByYXRlIGlmIG5lY2Vzc2FyeS4gVGhpcyBtYXkgYmUKIAkgKiBuZWNlc3NhcnkgaWYgc2V0X2lvcygpIGlzIGNhbGxlZCB3aGVuIGEgZGlmZmVyZW50IHNsb3QgaXMKLQkgKiBidXN5IHRyYW5zZmVyaW5nIGRhdGEuCisJICogYnVzeSB0cmFuc2ZlcnJpbmcgZGF0YS4KIAkgKi8KIAlpZiAoaG9zdC0+bmVlZF9jbG9ja191cGRhdGUpIHsKIAkJbWNpX3dyaXRlbChob3N0LCBNUiwgaG9zdC0+bW9kZV9yZWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmMgYi9kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYwppbmRleCAyZjdmYzBjLi43YzFlMTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYwpAQCAtOTksNyArOTksNyBAQAogI2RlZmluZSByMWJfdGltZW91dAkJKEhaICogMykKIAogLyogT25lIG9mIHRoZSBjcml0aWNhbCBzcGVlZCBwYXJhbWV0ZXJzIGlzIHRoZSBhbW91bnQgb2YgZGF0YSB3aGljaCBtYXkKLSAqIGJlIHRyYW5zZmVyZWQgaW4gb25lIGNvbW1hbmQuIElmIHRoaXMgdmFsdWUgaXMgdG9vIGxvdywgdGhlIFNEIGNhcmQKKyAqIGJlIHRyYW5zZmVycmVkIGluIG9uZSBjb21tYW5kLiBJZiB0aGlzIHZhbHVlIGlzIHRvbyBsb3csIHRoZSBTRCBjYXJkCiAgKiBjb250cm9sbGVyIGhhcyB0byBkbyBtdWx0aXBsZSBwYXJ0aWFsIGJsb2NrIHdyaXRlcyAoYXJnZ2doISkuIFdpdGgKICAqIHRvZGF5ICgyMDA4KSBTRCBjYXJkcyB0aGVyZSBpcyBsaXR0bGUgc3BlZWQgZ2FpbiBpZiB3ZSB0cmFuc2ZlciBtb3JlCiAgKiB0aGFuIDY0IEtCeXRlcyBhdCBhIHRpbWUuIFNvIHVzZSB0aGlzIHZhbHVlIHVudGlsIHRoZXJlIGlzIGFueSBpbmRpY2F0aW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L29tYXAuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCmluZGV4IDJlMDMyZjAuLmE2YzMyOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCkBAIC04MzIsNyArODMyLDcgQEAKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KIAotCWlmIChlbmRfY29tbWFuZCkKKwlpZiAoZW5kX2NvbW1hbmQgJiYgaG9zdC0+Y21kKQogCQltbWNfb21hcF9jbWRfZG9uZShob3N0LCBob3N0LT5jbWQpOwogCWlmIChob3N0LT5kYXRhICE9IE5VTEwpIHsKIAkJaWYgKHRyYW5zZmVyX2Vycm9yKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMKaW5kZXggMWNjZDRiMi4uYTA0Zjg3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5jCkBAIC04NzQsNyArODc0LDcgQEAKIAlpZiAoIW1ycS0+ZGF0YSkKIAkJZ290byByZXF1ZXN0X2RvbmU7CiAKLQkvKiBDYWx1bGF0ZSB0aGUgYW1vdXQgb2YgYnl0ZXMgdHJhbnNmZXIgaWYgdGhlcmUgd2FzIG5vIGVycm9yICovCisJLyogQ2FsY3VsYXRlIHRoZSBhbW91dCBvZiBieXRlcyB0cmFuc2ZlciBpZiB0aGVyZSB3YXMgbm8gZXJyb3IgKi8KIAlpZiAobXJxLT5kYXRhLT5lcnJvciA9PSAwKSB7CiAJCW1ycS0+ZGF0YS0+Ynl0ZXNfeGZlcmVkID0KIAkJCShtcnEtPmRhdGEtPmJsb2NrcyAqIG1ycS0+ZGF0YS0+Ymxrc3opOwpAQCAtODgyLDcgKzg4Miw3IEBACiAJCW1ycS0+ZGF0YS0+Ynl0ZXNfeGZlcmVkID0gMDsKIAl9CiAKLQkvKiBJZiB3ZSBoYWQgYW4gZXJyb3Igd2hpbGUgdHJhbnNmZXJpbmcgZGF0YSB3ZSBmbHVzaCB0aGUKKwkvKiBJZiB3ZSBoYWQgYW4gZXJyb3Igd2hpbGUgdHJhbnNmZXJyaW5nIGRhdGEgd2UgZmx1c2ggdGhlCiAJICogRE1BIGNoYW5uZWwgYW5kIHRoZSBmaWZvIHRvIGNsZWFyIG91dCBhbnkgZ2FyYmFnZS4gKi8KIAlpZiAobXJxLT5kYXRhLT5lcnJvciAhPSAwKSB7CiAJCWlmIChzM2NtY2lfaG9zdF91c2VkbWEoaG9zdCkpCkBAIC05ODAsNyArOTgwLDcgQEAKIAogCWlmICgoZGF0YS0+Ymxrc3ogJiAzKSAhPSAwKSB7CiAJCS8qIFdlIGNhbm5vdCBkZWFsIHdpdGggdW5hbGlnbmVkIGJsb2NrcyB3aXRoIG1vcmUgdGhhbgotCQkgKiBvbmUgYmxvY2sgYmVpbmcgdHJhbnNmZXJlZC4gKi8KKwkJICogb25lIGJsb2NrIGJlaW5nIHRyYW5zZmVycmVkLiAqLwogCiAJCWlmIChkYXRhLT5ibG9ja3MgPiAxKSB7CiAJCQlwcl93YXJuaW5nKCIlczogY2FuJ3QgZG8gbm9uLXdvcmQgc2l6ZWQgYmxvY2sgdHJhbnNmZXJzIChibGtzeiAlZClcbiIsIF9fZnVuY19fLCBkYXRhLT5ibGtzeik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLWNvcmUuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtY29yZS5jCmluZGV4IGY5YjYxMWYuLjYwZTQxODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtY29yZS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtY29yZS5jCkBAIC0xMjQsOCArMTI0LDEwIEBACiAjZW5kaWYKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc2RoY2lfb2ZfbWF0Y2hbXTsKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNkaGNpX29mX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KQogeworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZmRldi0+ZGV2Lm9mX25vZGU7CiAJc3RydWN0IHNkaGNpX29mX2RhdGEgKnNkaGNpX29mX2RhdGE7CiAJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3Q7CkBAIC0xMzQsOSArMTM2LDEwIEBACiAJaW50IHNpemU7CiAJaW50IHJldDsKIAotCWlmICghb2ZkZXYtPmRldi5vZl9tYXRjaCkKKwltYXRjaCA9IG9mX21hdGNoX2RldmljZShzZGhjaV9vZl9tYXRjaCwgJm9mZGV2LT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwotCXNkaGNpX29mX2RhdGEgPSBvZmRldi0+ZGV2Lm9mX21hdGNoLT5kYXRhOworCXNkaGNpX29mX2RhdGEgPSBtYXRjaC0+ZGF0YTsKIAogCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpCiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMKaW5kZXggYTEzNmJlNy4uZjhiNWYzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jCkBAIC05NTcsNiArOTU3LDcgQEAKIAlob3N0LT5pb2FkZHIgPSBwY2lfaW9yZW1hcF9iYXIocGRldiwgYmFyKTsKIAlpZiAoIWhvc3QtPmlvYWRkcikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVtYXAgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byByZWxlYXNlOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jCmluZGV4IDllMTVmNDEuLjVkMjA2NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMKQEAgLTEzMzQsNiArMTMzNCwxMyBAQAogCiAJaG9zdCA9IChzdHJ1Y3Qgc2RoY2lfaG9zdCopcGFyYW07CiAKKyAgICAgICAgLyoKKyAgICAgICAgICogSWYgdGhpcyB0YXNrbGV0IGdldHMgcmVzY2hlZHVsZWQgd2hpbGUgcnVubmluZywgaXQgd2lsbAorICAgICAgICAgKiBiZSBydW4gYWdhaW4gYWZ0ZXJ3YXJkcyBidXQgd2l0aG91dCBhbnkgYWN0aXZlIHJlcXVlc3QuCisgICAgICAgICAqLworCWlmICghaG9zdC0+bXJxKQorCQlyZXR1cm47CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCiAJZGVsX3RpbWVyKCZob3N0LT50aW1lcik7CkBAIC0xMzQ1LDcgKzEzNTIsNyBAQAogCSAqIHVwb24gZXJyb3IgY29uZGl0aW9ucy4KIAkgKi8KIAlpZiAoIShob3N0LT5mbGFncyAmIFNESENJX0RFVklDRV9ERUFEKSAmJgotCQkobXJxLT5jbWQtPmVycm9yIHx8CisJICAgICgobXJxLT5jbWQgJiYgbXJxLT5jbWQtPmVycm9yKSB8fAogCQkgKG1ycS0+ZGF0YSAmJiAobXJxLT5kYXRhLT5lcnJvciB8fAogCQkgIChtcnEtPmRhdGEtPnN0b3AgJiYgbXJxLT5kYXRhLT5zdG9wLT5lcnJvcikpKSB8fAogCQkgICAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfUkVTRVRfQUZURVJfUkVRVUVTVCkpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jX3Bpby5jIGIvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tY19waW8uYwppbmRleCA2YWU4ZDJmLi43MTAzMzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jX3Bpby5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWNfcGlvLmMKQEAgLTM1NSw3ICszNTUsNyBAQAogLyoKICAqIFRoaXMgY2hpcCBhbHdheXMgcmV0dXJucyAoYXQgbGVhc3Q/KSBhcyBtdWNoIGRhdGEgYXMgeW91IGFzayBmb3IuCiAgKiBJJ20gdW5zdXJlIHdoYXQgaGFwcGVucyBpZiB5b3UgYXNrIGZvciBsZXNzIHRoYW4gYSBibG9jay4gVGhpcyBzaG91bGQgYmUKLSAqIGxvb2tlZCBpbnRvIHRvIGVuc3VyZSB0aGF0IGEgZnVubnkgbGVuZ3RoIHJlYWQgZG9lc250IGhvc2UgdGhlIGNvbnRyb2xsZXIuCisgKiBsb29rZWQgaW50byB0byBlbnN1cmUgdGhhdCBhIGZ1bm55IGxlbmd0aCByZWFkIGRvZXNuJ3QgaG9zZSB0aGUgY29udHJvbGxlci4KICAqLwogc3RhdGljIHZvaWQgdG1pb19tbWNfcGlvX2lycShzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCkKIHsKQEAgLTcyOCwxNSArNzI4LDE1IEBACiAJCXRtaW9fbW1jX3NldF9jbG9jayhob3N0LCBpb3MtPmNsb2NrKTsKIAogCS8qIFBvd2VyIHNlcXVlbmNlIC0gT0ZGIC0+IFVQIC0+IE9OICovCi0JaWYgKGlvcy0+cG93ZXJfbW9kZSA9PSBNTUNfUE9XRVJfT0ZGIHx8ICFpb3MtPmNsb2NrKSB7CisJaWYgKGlvcy0+cG93ZXJfbW9kZSA9PSBNTUNfUE9XRVJfVVApIHsKKwkJLyogcG93ZXIgdXAgU0QgYnVzICovCisJCWlmIChob3N0LT5zZXRfcHdyKQorCQkJaG9zdC0+c2V0X3B3cihob3N0LT5wZGV2LCAxKTsKKwl9IGVsc2UgaWYgKGlvcy0+cG93ZXJfbW9kZSA9PSBNTUNfUE9XRVJfT0ZGIHx8ICFpb3MtPmNsb2NrKSB7CiAJCS8qIHBvd2VyIGRvd24gU0QgYnVzICovCiAJCWlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX09GRiAmJiBob3N0LT5zZXRfcHdyKQogCQkJaG9zdC0+c2V0X3B3cihob3N0LT5wZGV2LCAwKTsKIAkJdG1pb19tbWNfY2xrX3N0b3AoaG9zdCk7Ci0JfSBlbHNlIGlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX1VQKSB7Ci0JCS8qIHBvd2VyIHVwIFNEIGJ1cyAqLwotCQlpZiAoaG9zdC0+c2V0X3B3cikKLQkJCWhvc3QtPnNldF9wd3IoaG9zdC0+cGRldiwgMSk7CiAJfSBlbHNlIHsKIAkJLyogc3RhcnQgYnVzIGNsb2NrICovCiAJCXRtaW9fbW1jX2Nsa19zdGFydChob3N0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvd2JzZC5jIGIvZHJpdmVycy9tbWMvaG9zdC93YnNkLmMKaW5kZXggN2ZjYTBhMy4uNjJlNWE0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC93YnNkLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC93YnNkLmMKQEAgLTQ4NCw3ICs0ODQsNyBAQAogCiAJLyoKIAkgKiBDaGVjayB0aGF0IHdlIGFyZW4ndCBiZWluZyBjYWxsZWQgYWZ0ZXIgdGhlCi0JICogZW50aXJlIGJ1ZmZlciBoYXMgYmVlbiB0cmFuc2ZlcmVkLgorCSAqIGVudGlyZSBidWZmZXIgaGFzIGJlZW4gdHJhbnNmZXJyZWQuCiAJICovCiAJaWYgKGhvc3QtPm51bV9zZyA9PSAwKQogCQlyZXR1cm47CkBAIC04MjgsNyArODI4LDcgQEAKIAkvKgogCSAqIElmIHRoaXMgaXMgYSBkYXRhIHRyYW5zZmVyIHRoZSByZXF1ZXN0CiAJICogd2lsbCBiZSBmaW5pc2hlZCBhZnRlciB0aGUgZGF0YSBoYXMKLQkgKiB0cmFuc2ZlcmVkLgorCSAqIHRyYW5zZmVycmVkLgogCSAqLwogCWlmIChjbWQtPmRhdGEgJiYgIWNtZC0+ZXJyb3IpIHsKIAkJLyoKQEAgLTkwNCw3ICs5MDQsNyBAQAogCQkJc2V0dXAgJj0gfldCU0RfREFUM19IOwogCiAJCQkvKgotCQkJICogV2UgY2Fubm90IHJlc3VtZSBjYXJkIGRldGVjdGlvbiBpbW1lZGlhdGx5CisJCQkgKiBXZSBjYW5ub3QgcmVzdW1lIGNhcmQgZGV0ZWN0aW9uIGltbWVkaWF0ZWx5CiAJCQkgKiBiZWNhdXNlIG9mIGNhcGFjaXRhbmNlIGFuZCBkZWxheXMgaW4gdGhlIGNoaXAuCiAJCQkgKi8KIAkJCW1vZF90aW1lcigmaG9zdC0+aWdub3JlX3RpbWVyLCBqaWZmaWVzICsgSFogLyAxMDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL2NoaXBzL0tjb25maWcKaW5kZXggMzVjNmEyMy4uYjFlM2MyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9LY29uZmlnCkBAIC0xOSw3ICsxOSw3IEBACiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBKRURFQy1zdHlsZSBwcm9iaW5nIG9mIGZsYXNoIGNoaXBzIHdoaWNoIGFyZSBub3QKIAkgIGNvbXBhdGlibGUgd2l0aCB0aGUgQ29tbW9uIEZsYXNoIEludGVyZmFjZSwgYnV0IHdpbGwgdXNlIHRoZSBjb21tb24KLQkgIENGSS10YXJnZXR0ZWQgZmxhc2ggZHJpdmVycyBmb3IgYW55IGNoaXBzIHdoaWNoIGFyZSBpZGVudGlmaWVkIHdoaWNoCisJICBDRkktdGFyZ2V0ZWQgZmxhc2ggZHJpdmVycyBmb3IgYW55IGNoaXBzIHdoaWNoIGFyZSBpZGVudGlmaWVkIHdoaWNoCiAJICBhcmUgaW4gZmFjdCBjb21wYXRpYmxlIGluIGFsbCBidXQgdGhlIHByb2JlIG1ldGhvZC4gVGhpcyBhY3R1YWxseQogCSAgY292ZXJzIG1vc3QgQU1EL0Z1aml0c3UtY29tcGF0aWJsZSBjaGlwcyBhbmQgYWxzbyBub24tQ0ZJCiAJICBJbnRlbCBjaGlwcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMKaW5kZXggMDkyYWVmMS4uMDljYjdjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMKQEAgLTEyNDcsMTIgKzEyNDcsMTIgQEAKIAkJCWJyZWFrOwogCiAJCWlmIChjaGlwLT5lcmFzZV9zdXNwZW5kZWQgJiYgY2hpcF9zdGF0ZSA9PSBGTF9FUkFTSU5HKSAgewotCQkJLyogRXJhc2Ugc3VzcGVuZCBvY2N1cmVkIHdoaWxlIHNsZWVwOiByZXNldCB0aW1lb3V0ICovCisJCQkvKiBFcmFzZSBzdXNwZW5kIG9jY3VycmVkIHdoaWxlIHNsZWVwOiByZXNldCB0aW1lb3V0ICovCiAJCQl0aW1lbyA9IHJlc2V0X3RpbWVvOwogCQkJY2hpcC0+ZXJhc2Vfc3VzcGVuZGVkID0gMDsKIAkJfQogCQlpZiAoY2hpcC0+d3JpdGVfc3VzcGVuZGVkICYmIGNoaXBfc3RhdGUgPT0gRkxfV1JJVElORykgIHsKLQkJCS8qIFdyaXRlIHN1c3BlbmQgb2NjdXJlZCB3aGlsZSBzbGVlcDogcmVzZXQgdGltZW91dCAqLworCQkJLyogV3JpdGUgc3VzcGVuZCBvY2N1cnJlZCB3aGlsZSBzbGVlcDogcmVzZXQgdGltZW91dCAqLwogCQkJdGltZW8gPSByZXNldF90aW1lbzsKIAkJCWNoaXAtPndyaXRlX3N1c3BlbmRlZCA9IDA7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMKaW5kZXggZjlhNTMzMS4uMGI0OTI2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMKQEAgLTI2Myw3ICsyNjMsNyBAQAogCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpID0gbWFwLT5mbGRydl9wcml2OwogCiAJLyoKLQkgKiBUaGVzZSBmbGFzaGVzIHJlcG9ydCB0d28gc2VwZXJhdGUgZXJhc2VibG9jayByZWdpb25zIGJhc2VkIG9uIHRoZQorCSAqIFRoZXNlIGZsYXNoZXMgcmVwb3J0IHR3byBzZXBhcmF0ZSBlcmFzZWJsb2NrIHJlZ2lvbnMgYmFzZWQgb24gdGhlCiAJICogc2VjdG9yX2VyYXNlLXNpemUgYW5kIGJsb2NrX2VyYXNlLXNpemUsIGFsdGhvdWdoIHRoZXkgYm90aCBvcGVyYXRlIG9uIHRoZQogCSAqIHNhbWUgbWVtb3J5LiBUaGlzIGlzIG5vdCBhbGxvd2VkIGFjY29yZGluZyB0byBDRkksIHNvIHdlIGp1c3QgcGljayB0aGUKIAkgKiBzZWN0b3JfZXJhc2Utc2l6ZS4KQEAgLTYxMSw4ICs2MTEsOCBAQAogICoKICAqIE5vdGUgdGhhdCBhbnl0aGluZyBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gY2hlY2tpbmcgaWYgbm8gYml0cyBhcmUgdG9nZ2xpbmcKICAqIChpbmNsdWRpbmcgY2hlY2tpbmcgRFE1IGZvciBhbiBlcnJvciBzdGF0dXMpIGlzIHRyaWNreSB0byBnZXQgd29ya2luZwotICogY29ycmVjdGx5IGFuZCBpcyB0aGVyZWZvcmUgbm90IGRvbmUJKHBhcnRpY3VsYXJ5IHdpdGggaW50ZXJsZWF2ZWQgY2hpcHMKLSAqIGFzIGVhY2ggY2hpcCBtdXN0IGJlIGNoZWNrZWQgaW5kZXBlbmRhbnRseSBvZiB0aGUgb3RoZXJzKS4KKyAqIGNvcnJlY3RseSBhbmQgaXMgdGhlcmVmb3JlIG5vdCBkb25lCShwYXJ0aWN1bGFybHkgd2l0aCBpbnRlcmxlYXZlZCBjaGlwcworICogYXMgZWFjaCBjaGlwIG11c3QgYmUgY2hlY2tlZCBpbmRlcGVuZGVudGx5IG9mIHRoZSBvdGhlcnMpLgogICovCiBzdGF0aWMgaW50IF9feGlwcmFtIGNoaXBfcmVhZHkoc3RydWN0IG1hcF9pbmZvICptYXAsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKQEAgLTYzNSw4ICs2MzUsOCBAQAogICoKICAqIE5vdGUgdGhhdCBhbnl0aGluZyBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gY2hlY2tpbmcgaWYgbm8gYml0cyBhcmUgdG9nZ2xpbmcKICAqIChpbmNsdWRpbmcgY2hlY2tpbmcgRFE1IGZvciBhbiBlcnJvciBzdGF0dXMpIGlzIHRyaWNreSB0byBnZXQgd29ya2luZwotICogY29ycmVjdGx5IGFuZCBpcyB0aGVyZWZvcmUgbm90IGRvbmUJKHBhcnRpY3VsYXJ5IHdpdGggaW50ZXJsZWF2ZWQgY2hpcHMKLSAqIGFzIGVhY2ggY2hpcCBtdXN0IGJlIGNoZWNrZWQgaW5kZXBlbmRhbnRseSBvZiB0aGUgb3RoZXJzKS4KKyAqIGNvcnJlY3RseSBhbmQgaXMgdGhlcmVmb3JlIG5vdCBkb25lCShwYXJ0aWN1bGFybHkgd2l0aCBpbnRlcmxlYXZlZCBjaGlwcworICogYXMgZWFjaCBjaGlwIG11c3QgYmUgY2hlY2tlZCBpbmRlcGVuZGVudGx5IG9mIHRoZSBvdGhlcnMpLgogICoKICAqLwogc3RhdGljIGludCBfX3hpcHJhbSBjaGlwX2dvb2Qoc3RydWN0IG1hcF9pbmZvICptYXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgbWFwX3dvcmQgZXhwZWN0ZWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfdXRpbC5jIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3V0aWwuYwppbmRleCA2YWUzZDExLi44ZTQ2NDA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfdXRpbC5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV91dGlsLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29tbW9uIEZsYXNoIEludGVyZmFjZSBzdXBwb3J0OgotICogICBHZW5lcmljIHV0aWxpdHkgZnVuY3Rpb25zIG5vdCBkZXBlbmRhbnQgb24gY29tbWFuZCBzZXQKKyAqICAgR2VuZXJpYyB1dGlsaXR5IGZ1bmN0aW9ucyBub3QgZGVwZW5kZW50IG9uIGNvbW1hbmQgc2V0CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAyIFJlZCBIYXQKICAqIENvcHlyaWdodCAoQykgMjAwMyBTVE1pY3JvZWxlY3Ryb25pY3MgTGltaXRlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvamVkZWNfcHJvYmUuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2plZGVjX3Byb2JlLmMKaW5kZXggNGUxYmU1MS4uZWE4MzJlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvamVkZWNfcHJvYmUuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9qZWRlY19wcm9iZS5jCkBAIC0yMDc1LDcgKzIwNzUsNyBAQAogCX0KIAogCS8qCi0JICogTWFrZSBzdXJlIHRoZSBJRCdzIGRpc3NhcHBlYXIgd2hlbiB0aGUgZGV2aWNlIGlzIHRha2VuIG91dCBvZgorCSAqIE1ha2Ugc3VyZSB0aGUgSUQncyBkaXNhcHBlYXIgd2hlbiB0aGUgZGV2aWNlIGlzIHRha2VuIG91dCBvZgogCSAqIElEIG1vZGUuICBUaGUgb25seSB0aW1lIHRoaXMgc2hvdWxkIGZhaWwgd2hlbiBpdCBzaG91bGQgc3VjY2VlZAogCSAqIGlzIHdoZW4gdGhlIElEJ3MgYXJlIHdyaXR0ZW4gYXMgZGF0YSB0byB0aGUgc2FtZQogCSAqIGFkZHJlc3Nlcy4gIEZvciB0aGlzIHJhcmUgYW5kIHVuZm9ydHVuYXRlIGNhc2UgdGhlIGNoaXAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvYmxvY2sybXRkLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL2Jsb2NrMm10ZC5jCmluZGV4IGYyOWE2ZjkuLjk3MTgzYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvYmxvY2sybXRkLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9ibG9jazJtdGQuYwpAQCAtMjk1LDcgKzI5NSw3IEBACiAJZGV2LT5tdGQub3duZXIgPSBUSElTX01PRFVMRTsKIAogCWlmIChhZGRfbXRkX2RldmljZSgmZGV2LT5tdGQpKSB7Ci0JCS8qIERldmljZSBkaWRudCBnZXQgYWRkZWQsIHNvIGZyZWUgdGhlIGVudHJ5ICovCisJCS8qIERldmljZSBkaWRuJ3QgZ2V0IGFkZGVkLCBzbyBmcmVlIHRoZSBlbnRyeSAqLwogCQlnb3RvIGRldmluaXRfZXJyOwogCX0KIAlsaXN0X2FkZCgmZGV2LT5saXN0LCAmYmxrbXRkX2RldmljZV9saXN0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMXBsdXMuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMXBsdXMuYwppbmRleCA3MTliMjkxLi44YjM2ZmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL2RvYzIwMDFwbHVzLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2MyMDAxcGx1cy5jCkBAIC05MCw3ICs5MCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogRm9yIHNvbWUgcmVhc29uIHRoZSBNaWxsZW5uaXVtIFBsdXMgc2VlbXMgdG8gb2NjYXNzaW9uYWxseSBwdXQgaXRzZWxmCisvKiBGb3Igc29tZSByZWFzb24gdGhlIE1pbGxlbm5pdW0gUGx1cyBzZWVtcyB0byBvY2Nhc2lvbmFsbHkgcHV0IGl0c2VsZgogICogaW50byByZXNldCBtb2RlLiBGb3IgbWUgdGhpcyBoYXBwZW5zIHJhbmRvbWx5LCB3aXRoIG5vIHBhdHRlcm4gdGhhdCBJCiAgKiBjYW4gZGV0ZWN0LiBNLXN5c3RlbXMgc3VnZ2VzdCBhbHdheXMgY2hlY2sgdGhpcyBvbiBhbnkgYmxvY2sgbGV2ZWwKICAqIG9wZXJhdGlvbiBhbmQgc2V0dGluZyB0byBub3JtYWwgbW9kZSBpZiBpbiByZXNldCBtb2RlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2NlY2MuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jZWNjLmMKaW5kZXggYTk5ODM4Yi4uMzdlZjI5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2NlY2MuYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL2RvY2VjYy5jCkBAIC0xMDksNyArMTA5LDcgQEAKICAgIG9mIHRoZSBpbnRlZ2VyICJhbHBoYV90b1tpXSIgd2l0aCBhKDApIGJlaW5nIHRoZSBMU0IgYW5kIGEobS0xKSB0aGUgTVNCLiBUaHVzIGZvcgogICAgZXhhbXBsZSB0aGUgcG9seW5vbWlhbCByZXByZXNlbnRhdGlvbiBvZiBAXjUgd291bGQgYmUgZ2l2ZW4gYnkgdGhlIGJpbmFyeQogICAgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludGVnZXIgImFscGhhX3RvWzVdIi4KLSAgICAgICAgICAgICAgICAgICBTaW1pbGFyaWx5LCBpbmRleF9vZltdIGNhbiBiZSB1c2VkIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgU2ltaWxhcmx5LCBpbmRleF9vZltdIGNhbiBiZSB1c2VkIGFzIGZvbGxvd3M6CiAgICAgICAgIEFzIGFib3ZlLCBsZXQgQCByZXByZXNlbnQgdGhlIHByaW1pdGl2ZSBlbGVtZW50IG9mIEdGKDJebSkgdGhhdCBpcwogICAgdGhlIHJvb3Qgb2YgdGhlIHByaW1pdGl2ZSBwb2x5bm9taWFsIHAoeCkuIEluIG9yZGVyIHRvIGZpbmQgdGhlIHBvd2VyCiAgICBvZiBAIChhbHBoYSkgdGhhdCBoYXMgdGhlIHBvbHlub21pYWwgcmVwcmVzZW50YXRpb24KQEAgLTEyMSw3ICsxMjEsNyBAQAogICAgTk9URToKICAgICAgICAgVGhlIGVsZW1lbnQgYWxwaGFfdG9bMl5tLTFdID0gMCBhbHdheXMgc2lnbmlmeWluZyB0aGF0IHRoZQogICAgcmVwcmVzZW50YXRpb24gb2YgIkBeaW5maW5pdHkiID0gMCBpcyAoMCwwLDAsLi4uLDApLgotICAgICAgICBTaW1pbGFyaWx5LCB0aGUgZWxlbWVudCBpbmRleF9vZlswXSA9IEEwIGFsd2F5cyBzaWduaWZ5aW5nCisgICAgICAgIFNpbWlsYXJseSwgdGhlIGVsZW1lbnQgaW5kZXhfb2ZbMF0gPSBBMCBhbHdheXMgc2lnbmlmeWluZwogICAgdGhhdCB0aGUgcG93ZXIgb2YgYWxwaGEgd2hpY2ggaGFzIHRoZSBwb2x5bm9taWFsIHJlcHJlc2VudGF0aW9uCiAgICAoMCwwLC4uLiwwKSBpcyAiaW5maW5pdHkiLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL2xhcnQuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbGFydC5jCmluZGV4IGNhZjYwNDEuLjRiODI5ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvbGFydC5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbGFydC5jCkBAIC0zNTMsNyArMzUzLDcgQEAKICAgIC8qIHB1dCB0aGUgZmxhc2ggYmFjayBpbnRvIGNvbW1hbmQgbW9kZSAqLwogICAgd3JpdGUzMiAoREFUQV9UT19GTEFTSCAoUkVBRF9BUlJBWSksb2Zmc2V0KTsKIAotICAgLyogd2FzIHRoZSBlcmFzZSBzdWNjZXNzZnVsbD8gKi8KKyAgIC8qIHdhcyB0aGUgZXJhc2Ugc3VjY2Vzc2Z1bD8gKi8KICAgIGlmICgoc3RhdHVzICYgU1RBVFVTX0VSQVNFX0VSUikpCiAJIHsKIAkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIiVzOiBlcmFzZSBlcnJvciBhdCBhZGRyZXNzIDB4JS44eC5cbiIsbW9kdWxlX25hbWUsb2Zmc2V0KTsKQEAgLTUwOCw3ICs1MDgsNyBAQAogICAgLyogcHV0IHRoZSBmbGFzaCBiYWNrIGludG8gY29tbWFuZCBtb2RlICovCiAgICB3cml0ZTMyIChEQVRBX1RPX0ZMQVNIIChSRUFEX0FSUkFZKSxvZmZzZXQpOwogCi0gICAvKiB3YXMgdGhlIHdyaXRlIHN1Y2Nlc3NmdWxsPyAqLworICAgLyogd2FzIHRoZSB3cml0ZSBzdWNjZXNzZnVsPyAqLwogICAgaWYgKChzdGF0dXMgJiBTVEFUVVNfUEdNX0VSUikgfHwgcmVhZDMyIChvZmZzZXQpICE9IHgpCiAJIHsKIAkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIiVzOiB3cml0ZSBlcnJvciBhdCBhZGRyZXNzIDB4JS44eC5cbiIsbW9kdWxlX25hbWUsb2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvcG1jNTUxLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL3BtYzU1MS5jCmluZGV4IGVmMGFiYTAuLjQxYjhjZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvcG1jNTUxLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9wbWM1NTEuYwpAQCAtMzUxLDcgKzM1MSw3IEBACiAgKiBGaXh1cCByb3V0aW5lcyBmb3IgdGhlIFYzNzBQREMKICAqIFBDSSBkZXZpY2UgSUQgMHgwMjAwMTFiMAogICoKLSAqIFRoaXMgZnVuY3Rpb24gYmFzaWNseSBraWNrIHN0YXJ0cyB0aGUgRFJBTSBvYm9hcmQgdGhlIGNhcmQgYW5kIGdldHMgaXQKKyAqIFRoaXMgZnVuY3Rpb24gYmFzaWNhbGx5IGtpY2sgc3RhcnRzIHRoZSBEUkFNIG9ib2FyZCB0aGUgY2FyZCBhbmQgZ2V0cyBpdAogICogcmVhZHkgdG8gYmUgdXNlZC4gIEJlZm9yZSB0aGlzIGlzIGRvbmUgdGhlIGRldmljZSByZWFkcyBWRVJZIGVycmF0aWMsIHNvCiAgKiBtdWNoIHRoYXQgaXQgY2FuIGNyYXNoIHRoZSBMaW51eCAyLjIueCBzZXJpZXMga2VybmVscyB3aGVuIGEgdXNlciBjYXQncwogICogL3Byb2MvcGNpIC4uIHRob3VnaCB0aGF0IGlzIG1haW5seSBhIGtlcm5lbCBidWcgaW4gaGFuZGxpbmcgdGhlIFBDSSBERVZTRUwKQEAgLTU0MCw3ICs1NDAsNyBAQAogCiAJLyoKIAkgKiBDaGVjayB0byBtYWtlIGNlcnRhaW4gdGhlIERFVlNFTCBpcyBzZXQgY29ycmVjdGx5LCB0aGlzIGRldmljZQotCSAqIGhhcyBhIHRlbmRhbmN5IHRvIGFzc2VydCBERVZTRUwgYW5kIFRSRFkgd2hlbiBhIHdyaXRlIGlzIHBlcmZvcm1lZAorCSAqIGhhcyBhIHRlbmRlbmN5IHRvIGFzc2VydCBERVZTRUwgYW5kIFRSRFkgd2hlbiBhIHdyaXRlIGlzIHBlcmZvcm1lZAogCSAqIHRvIHRoZSBtZW1vcnkgd2hlbiBtZW1vcnkgaXMgcmVhZC1vbmx5CiAJICovCiAJaWYgKChjbWQgJiBQQ0lfU1RBVFVTX0RFVlNFTF9NQVNLKSAhPSAweDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2xwZGRyL2xwZGRyX2NtZHMuYyBiL2RyaXZlcnMvbXRkL2xwZGRyL2xwZGRyX2NtZHMuYwppbmRleCAwNGZkZmNjLi4xMjY3OTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9scGRkci9scGRkcl9jbWRzLmMKKysrIGIvZHJpdmVycy9tdGQvbHBkZHIvbHBkZHJfY21kcy5jCkBAIC0zLDcgKzMsNyBAQAogICogZXJhc2UsIGxvY2svdW5sb2NrIHN1cHBvcnQgZm9yIExQRERSIGZsYXNoIG1lbW9yaWVzCiAgKiAoQykgMjAwOCBLb3JvbGV2IEFsZXhleSA8YWtvcm9sZXZAaW5mcmFkZWFkLm9yZz4KICAqIChDKSAyMDA4IFZhc2lsaXkgTGVvbmVua28gPHZhc2lsaXkubGVvbmVua29AZ21haWwuY29tPgotICogTWFueSB0aGFua3MgdG8gUm9tYW4gQm9yaXNvdiBmb3IgaW50aWFsIGVuYWJsaW5nCisgKiBNYW55IHRoYW5rcyB0byBSb21hbiBCb3Jpc292IGZvciBpbml0aWFsIGVuYWJsaW5nCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTE3MSw3ICsxNzEsNyBAQAogCQkJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOwogCQl9CiAJCWlmIChjaGlwLT5lcmFzZV9zdXNwZW5kZWQgfHwgY2hpcC0+d3JpdGVfc3VzcGVuZGVkKSAgewotCQkJLyogU3VzcGVuZCBoYXMgb2NjdXJlZCB3aGlsZSBzbGVlcDogcmVzZXQgdGltZW91dCAqLworCQkJLyogU3VzcGVuZCBoYXMgb2NjdXJyZWQgd2hpbGUgc2xlZXA6IHJlc2V0IHRpbWVvdXQgKi8KIAkJCXRpbWVvID0gcmVzZXRfdGltZW87CiAJCQljaGlwLT5lcmFzZV9zdXNwZW5kZWQgPSBjaGlwLT53cml0ZV9zdXNwZW5kZWQgPSAwOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2NlaXZhLmMgYi9kcml2ZXJzL210ZC9tYXBzL2NlaXZhLmMKaW5kZXggZTVmNjQ1Yi4uMjNmNTUxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9jZWl2YS5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvY2VpdmEuYwpAQCAtNDIsNyArNDIsNyBAQAogICoKICAqIFBsZWFzZSBub3RlOgogICogIDEuIFRoZSBmbGFzaCBzaXplIGdpdmVuIHNob3VsZCBiZSB0aGUgbGFyZ2VzdCBmbGFzaCBzaXplIHRoYXQgY2FuCi0gKiAgICAgYmUgYWNjb21vZGF0ZWQuCisgKiAgICAgYmUgYWNjb21tb2RhdGVkLgogICoKICAqICAyLiBUaGUgYnVzIHdpZHRoIG11c3QgZGVmaW5lZCBpbiBjbHBzX3NldHVwX2ZsYXNoLgogICoKQEAgLTU4LDcgKzU4LDcgQEAKICNkZWZpbmUgQk9PVF9QQVJUSVRJT05fU0laRV9LaUIgICAgICAgKDE2KQogI2RlZmluZSBQQVJBTVNfUEFSVElUSU9OX1NJWkVfS2lCICAgICAoOCkKICNkZWZpbmUgS0VSTkVMX1BBUlRJVElPTl9TSVpFX0tpQiAgICAgKDQqMTI4KQotLyogVXNlIGJvdGggcmVtYWluZyBwb3J0aW9uIG9mIGZpcnN0IGZsYXNoLCBhbmQgYWxsIG9mIHNlY29uZCBmbGFzaCAqLworLyogVXNlIGJvdGggcmVtYWluaW5nIHBvcnRpb24gb2YgZmlyc3QgZmxhc2gsIGFuZCBhbGwgb2Ygc2Vjb25kIGZsYXNoICovCiAjZGVmaW5lIFJPT1RfUEFSVElUSU9OX1NJWkVfS2lCICAgICAgICgzKjEyOCkgKyAoOCoxMjgpCiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjZWl2YV9wYXJ0aXRpb25zW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2NmaV9mbGFnYWRtLmMgYi9kcml2ZXJzL210ZC9tYXBzL2NmaV9mbGFnYWRtLmMKaW5kZXggYjRlZDgxNi4uZjcxMzQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9jZmlfZmxhZ2FkbS5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvY2ZpX2ZsYWdhZG0uYwpAQCAtMzMsNyArMzMsNyBAQAogCiAKIC8qIFdlIHNwbGl0IHRoZSBmbGFzaCBjaGlwIHVwIGludG8gZm91ciBwYXJ0cy4KLSAqIDE6IGJvb3Rsb2FkZXIgZmlydHMgMTI4awkJCSgweDAwMDAwMDAwIC0gMHgwMDAxRkZGRikgc2l6ZSAweDAyMDAwMAorICogMTogYm9vdGxvYWRlciBmaXJzdCAxMjhrCQkJKDB4MDAwMDAwMDAgLSAweDAwMDFGRkZGKSBzaXplIDB4MDIwMDAwCiAgKiAyOiBrZXJuZWwgNjQwawkJCQkJKDB4MDAwMjAwMDAgLSAweDAwMEJGRkZGKSBzaXplIDB4MEEwMDAwCiAgKiAzOiBjb21wcmVzc2VkIDE1MzZrIHJvb3QgcmFtZGlzawkoMHgwMDBDMDAwMCAtIDB4MDAyM0ZGRkYpIHNpemUgMHgxODAwMDAKICAqIDQ6IHdyaXRlYWJsZSBkaXNrcGFydGl0aW9uIChqZmZzKSgweDAwMjQwMDAwIC0gMHgwMDNGRkZGRikgc2l6ZSAweDFDMDAwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9wY21jaWFtdGQuYyBiL2RyaXZlcnMvbXRkL21hcHMvcGNtY2lhbXRkLmMKaW5kZXggOTE3MDIyOS4uNjc5OWU3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9wY21jaWFtdGQuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3BjbWNpYW10ZC5jCkBAIC00OTcsNyArNDk3LDcgQEAKIAkJZGV2LT5wY21jaWFfbWFwLnNldF92cHAgPSBwY21jaWFtdGRfc2V0X3ZwcDsKIAogCS8qIFJlcXVlc3QgYSBtZW1vcnkgd2luZG93IGZvciBQQ01DSUEuIFNvbWUgYXJjaGl0ZXVyZXMgY2FuIG1hcCB3aW5kb3dzCi0JICogdXB0byB0aGUgbWF4aW11bSB0aGF0IFBDTUNJQSBjYW4gc3VwcG9ydCAoNjRNaUIpIC0gdGhpcyBpcyBpZGVhbCBhbmQKKwkgKiB1cCB0byB0aGUgbWF4aW11bSB0aGF0IFBDTUNJQSBjYW4gc3VwcG9ydCAoNjRNaUIpIC0gdGhpcyBpcyBpZGVhbCBhbmQKIAkgKiB3ZSBhaW0gZm9yIGEgd2luZG93IHRoZSBzaXplIG9mIHRoZSB3aG9sZSBjYXJkIC0gb3RoZXJ3aXNlIHdlIHRyeQogCSAqIHNtYWxsZXIgd2luZG93cyB1bnRpbCB3ZSBzdWNjZWVkCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXBfb2YuYyBiL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcF9vZi5jCmluZGV4IGJkNDgzZjAuLmMxZDMzNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcF9vZi5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcF9vZi5jCkBAIC0yMTQsMTEgKzIxNCwxMyBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2ZsYXNoX21hdGNoW107CiBzdGF0aWMgaW50IF9fZGV2aW5pdCBvZl9mbGFzaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiAJY29uc3QgY2hhciAqKnBhcnRfcHJvYmVfdHlwZXM7CiAjZW5kaWYKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gZGV2LT5kZXYub2Zfbm9kZTsKIAlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwogCXN0cnVjdCBvZl9mbGFzaCAqaW5mbzsKQEAgLTIzMiw5ICsyMzQsMTAgQEAKIAlzdHJ1Y3QgbXRkX2luZm8gKiptdGRfbGlzdCA9IE5VTEw7CiAJcmVzb3VyY2Vfc2l6ZV90IHJlc19zaXplOwogCi0JaWYgKCFkZXYtPmRldi5vZl9tYXRjaCkKKwltYXRjaCA9IG9mX21hdGNoX2RldmljZShvZl9mbGFzaF9tYXRjaCwgJmRldi0+ZGV2KTsKKwlpZiAoIW1hdGNoKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlwcm9iZV90eXBlID0gZGV2LT5kZXYub2ZfbWF0Y2gtPmRhdGE7CisJcHJvYmVfdHlwZSA9IG1hdGNoLT5kYXRhOwogCiAJcmVnX3R1cGxlX3NpemUgPSAob2Zfbl9hZGRyX2NlbGxzKGRwKSArIG9mX25fc2l6ZV9jZWxscyhkcCkpICogc2l6ZW9mKHUzMik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcG1jbXNwLWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL3BtY21zcC1mbGFzaC5jCmluZGV4IGFjYjEzZmEuLjY0YWVhNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcG1jbXNwLWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9wbWNtc3AtZmxhc2guYwpAQCAtMyw3ICszLDcgQEAKICAqIENvbmZpZyB3aXRoIGJvdGggQ0ZJIGFuZCBKRURFQyBkZXZpY2Ugc3VwcG9ydC4KICAqCiAgKiBCYXNpY2FsbHkgcGh5c21hcC5jIHdpdGggdGhlIGFkZGl0aW9uIG9mIHBhcnRpdGlvbnMgYW5kCi0gKiBhbiBhcnJheSBvZiBtYXBwaW5nIGluZm8gdG8gYWNjb21vZGF0ZSBtb3JlIHRoYW4gb25lIGZsYXNoIHR5cGUgcGVyIGJvYXJkLgorICogYW4gYXJyYXkgb2YgbWFwcGluZyBpbmZvIHRvIGFjY29tbW9kYXRlIG1vcmUgdGhhbiBvbmUgZmxhc2ggdHlwZSBwZXIgYm9hcmQuCiAgKgogICogQ29weXJpZ2h0IDIwMDUtMjAwNyBQTUMtU2llcnJhLCBJbmMuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9zYzUyMGNkcC5jIGIvZHJpdmVycy9tdGQvbWFwcy9zYzUyMGNkcC5jCmluZGV4IDg1YzFlNTYuLjRkOGFhYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvc2M1MjBjZHAuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3NjNTIwY2RwLmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCX0KIAogCS8qCi0JKiogRmluZCB0aGUgUEFSeHggcmVnaXN0ZXJzIHRoYXQgYXJlIHJlcG9uc2libGUgZm9yIGFjdGl2YXRpbmcKKwkqKiBGaW5kIHRoZSBQQVJ4eCByZWdpc3RlcnMgdGhhdCBhcmUgcmVzcG9uc2libGUgZm9yIGFjdGl2YXRpbmcKIAkqKiBST01DUzAsIFJPTUNTMSBhbmQgQk9PVENTLiBSZXByb2dyYW0gZWFjaCBvZiB0aGVzZSB3aXRoIGEKIAkqKiBuZXcgdmFsdWUgZnJvbSB0aGUgdGFibGUuCiAJKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvdHFtOHh4bC5jIGIvZHJpdmVycy9tdGQvbWFwcy90cW04eHhsLmMKaW5kZXggYzA4ZTE0MC4uMDcxOGRmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy90cW04eHhsLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy90cW04eHhsLmMKQEAgLTYzLDcgKzYzLDcgQEAKICAqLwogCiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCi0vKiBDdXJyZW50bHksIFRRTTh4eEwgaGFzIHVwdG8gOE1pQiBmbGFzaCAqLworLyogQ3VycmVudGx5LCBUUU04eHhMIGhhcyB1cCB0byA4TWlCIGZsYXNoICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB0cW04eHhsX21heF9mbGFzaF9zaXplID0gMHgwMDgwMDAwMDsKIAogLyogcGFydGl0aW9uIGRlZmluaXRpb24gZm9yIGZpcnN0IGZsYXNoIGJhbmsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZGJsb2NrLmMgYi9kcml2ZXJzL210ZC9tdGRibG9jay5jCmluZGV4IDFlNzRhZDkuLjMzMjY2MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZGJsb2NrLmMKKysrIGIvZHJpdmVycy9tdGQvbXRkYmxvY2suYwpAQCAtMTI5LDcgKzEyOSw3IEBACiAJCXJldHVybiByZXQ7CiAKIAkvKgotCSAqIEhlcmUgd2UgY291bGQgYXJndWJseSBzZXQgdGhlIGNhY2hlIHN0YXRlIHRvIFNUQVRFX0NMRUFOLgorCSAqIEhlcmUgd2UgY291bGQgYXJndWFibHkgc2V0IHRoZSBjYWNoZSBzdGF0ZSB0byBTVEFURV9DTEVBTi4KIAkgKiBIb3dldmVyIHRoaXMgY291bGQgbGVhZCB0byBpbmNvbnNpc3RlbmN5IHNpbmNlIHdlIHdpbGwgbm90CiAJICogYmUgbm90aWZpZWQgaWYgdGhpcyBjb250ZW50IGlzIGFsdGVyZWQgb24gdGhlIGZsYXNoIGJ5IG90aGVyCiAJICogbWVhbnMuICBMZXQncyBkZWNsYXJlIGl0IGVtcHR5IGFuZCBsZWF2ZSBidWZmZXJpbmcgdGFza3MgdG8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZGNoYXIuYyBiL2RyaXZlcnMvbXRkL210ZGNoYXIuYwppbmRleCAxNDViM2QwZC4uNGMzNmVmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkY2hhci5jCisrKyBiL2RyaXZlcnMvbXRkL210ZGNoYXIuYwpAQCAtMjM0LDcgKzIzNCw3IEBACiAJCSAqIHRoZSBkYXRhLiBGb3Igb3VyIHVzZXJzcGFjZSB0b29scyBpdCBpcyBpbXBvcnRhbnQKIAkJICogdG8gZHVtcCBhcmVhcyB3aXRoIGVjYyBlcnJvcnMgIQogCQkgKiBGb3Iga2VybmVsIGludGVybmFsIHVzYWdlIGl0IGFsc28gbWlnaHQgcmV0dXJuIC1FVUNMRUFOCi0JCSAqIHRvIHNpZ25hbCB0aGUgY2FsbGVyIHRoYXQgYSBiaXRmbGlwIGhhcyBvY2N1cmVkIGFuZCBoYXMKKwkJICogdG8gc2lnbmFsIHRoZSBjYWxsZXIgdGhhdCBhIGJpdGZsaXAgaGFzIG9jY3VycmVkIGFuZCBoYXMKIAkJICogYmVlbiBjb3JyZWN0ZWQgYnkgdGhlIEVDQyBhbGdvcml0aG0uCiAJCSAqIFVzZXJzcGFjZSBzb2Z0d2FyZSB3aGljaCBhY2Nlc3NlcyBOQU5EIHRoaXMgd2F5CiAJCSAqIG11c3QgYmUgYXdhcmUgb2YgdGhlIGZhY3QgdGhhdCBpdCBkZWFscyB3aXRoIE5BTkQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZHN3YXAuYyBiL2RyaXZlcnMvbXRkL210ZHN3YXAuYwppbmRleCAyMzc5MTNjLi5mZWQyMTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRzd2FwLmMKKysrIGIvZHJpdmVycy9tdGQvbXRkc3dhcC5jCkBAIC0xNDUyLDcgKzE0NTIsNyBAQAogCW9pbmZvID0gbXRkLT5lY2NsYXlvdXQ7CiAJaWYgKCFtdGQtPm9vYnNpemUgfHwgIW9pbmZvIHx8IG9pbmZvLT5vb2JhdmFpbCA8IE1URFNXQVBfT09CU0laRSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBOb3QgZW5vdWdoIGZyZWUgYnl0ZXMgaW4gT09CLCAiCi0JCQkiJWQgYXZhaWxhYmxlLCAlbHUgbmVlZGVkLlxuIiwKKwkJCSIlZCBhdmFpbGFibGUsICV6dSBuZWVkZWQuXG4iLAogCQkJTVREU1dBUF9QUkVGSVgsIG9pbmZvLT5vb2JhdmFpbCwgTVREU1dBUF9PT0JTSVpFKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZwppbmRleCBhOTIwNTRlLi5lZGVjNDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCkBAIC0yMzksNyArMjM5LDcgQEAKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgdGhlIE5BTkQgZmxhc2ggY29udHJvbGxlciBvbiB0aGUgQkNNIFVNSSBibG9jay4KIAotCSAgTm8gYm9hcmQgc3BlY2ZpYyBzdXBwb3J0IGlzIGRvbmUgYnkgdGhpcyBkcml2ZXIsIGVhY2ggYm9hcmQKKwkgIE5vIGJvYXJkIHNwZWNpZmljIHN1cHBvcnQgaXMgZG9uZSBieSB0aGlzIGRyaXZlciwgZWFjaCBib2FyZAogCSAgbXVzdCBhZHZlcnRpc2UgYSBwbGF0Zm9ybV9kZXZpY2UgZm9yIHRoZSBkcml2ZXIgdG8gYXR0YWNoLgogCiBjb25maWcgTVREX05BTkRfQkNNX1VNSV9IV0NTCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2Ftcy1kZWx0YS5jIGIvZHJpdmVycy9tdGQvbmFuZC9hbXMtZGVsdGEuYwppbmRleCBhMDY3ZDA5Li5iYzY1YmY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2Ftcy1kZWx0YS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvYW1zLWRlbHRhLmMKQEAgLTIyOCw3ICsyMjgsNyBAQAogCQkJCQkgIEFNU19ERUxUQV9MQVRDSDJfTkFORF9OQ0UgfAogCQkJCQkgIEFNU19ERUxUQV9MQVRDSDJfTkFORF9OV1ApOwogCi0JLyogU2NhbiB0byBmaW5kIGV4aXN0YW5jZSBvZiB0aGUgZGV2aWNlICovCisJLyogU2NhbiB0byBmaW5kIGV4aXN0ZW5jZSBvZiB0aGUgZGV2aWNlICovCiAJaWYgKG5hbmRfc2NhbihhbXNfZGVsdGFfbXRkLCAxKSkgewogCQllcnIgPSAtRU5YSU87CiAJCWdvdG8gb3V0X210ZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvYXRtZWxfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9hdG1lbF9uYW5kLmMKaW5kZXggNmZhZTA0Yi4uOTUwNjQ2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9hdG1lbF9uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9hdG1lbF9uYW5kLmMKQEAgLTIwOSwyMiArMjA5LDggQEAKIAlpbnQgZXJyID0gLUVJTzsKIAllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIgPSBpc19yZWFkID8gRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRTsKIAotCWlmIChidWYgPj0gaGlnaF9tZW1vcnkpIHsKLQkJc3RydWN0IHBhZ2UgKnBnOwotCi0JCWlmICgoKHNpemVfdClidWYgJiBQQUdFX01BU0spICE9Ci0JCSAgICAoKHNpemVfdCkoYnVmICsgbGVuIC0gMSkgJiBQQUdFX01BU0spKSB7Ci0JCQlkZXZfd2Fybihob3N0LT5kZXYsICJCdWZmZXIgbm90IGZpdCBpbiBvbmUgcGFnZVxuIik7Ci0JCQlnb3RvIGVycl9idWY7Ci0JCX0KLQotCQlwZyA9IHZtYWxsb2NfdG9fcGFnZShidWYpOwotCQlpZiAocGcgPT0gMCkgewotCQkJZGV2X2Vycihob3N0LT5kZXYsICJGYWlsZWQgdG8gdm1hbGxvY190b19wYWdlXG4iKTsKLQkJCWdvdG8gZXJyX2J1ZjsKLQkJfQotCQlwID0gcGFnZV9hZGRyZXNzKHBnKSArICgoc2l6ZV90KWJ1ZiAmIH5QQUdFX01BU0spOwotCX0KKwlpZiAoYnVmID49IGhpZ2hfbWVtb3J5KQorCQlnb3RvIGVycl9idWY7CiAKIAlkbWFfZGV2ID0gaG9zdC0+ZG1hX2NoYW4tPmRldmljZTsKIApAQCAtMjgwLDcgKzI2Niw4IEBACiAJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgYXRtZWxfbmFuZF9ob3N0ICpob3N0ID0gY2hpcC0+cHJpdjsKIAotCWlmICh1c2VfZG1hICYmIGxlbiA+PSBtdGQtPm9vYnNpemUpCisJaWYgKHVzZV9kbWEgJiYgbGVuID4gbXRkLT5vb2JzaXplKQorCQkvKiBvbmx5IHVzZSBETUEgZm9yIGJpZ2dlciB0aGFuIG9vYiBzaXplOiBiZXR0ZXIgcGVyZm9ybWFuY2VzICovCiAJCWlmIChhdG1lbF9uYW5kX2RtYV9vcChtdGQsIGJ1ZiwgbGVuLCAxKSA9PSAwKQogCQkJcmV0dXJuOwogCkBAIC0yOTUsNyArMjgyLDggQEAKIAlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCXN0cnVjdCBhdG1lbF9uYW5kX2hvc3QgKmhvc3QgPSBjaGlwLT5wcml2OwogCi0JaWYgKHVzZV9kbWEgJiYgbGVuID49IG10ZC0+b29ic2l6ZSkKKwlpZiAodXNlX2RtYSAmJiBsZW4gPiBtdGQtPm9vYnNpemUpCisJCS8qIG9ubHkgdXNlIERNQSBmb3IgYmlnZ2VyIHRoYW4gb29iIHNpemU6IGJldHRlciBwZXJmb3JtYW5jZXMgKi8KIAkJaWYgKGF0bWVsX25hbmRfZG1hX29wKG10ZCwgKHZvaWQgKilidWYsIGxlbiwgMCkgPT0gMCkKIAkJCXJldHVybjsKIApAQCAtNTk5LDcgKzU4NywxMCBAQAogCQluYW5kX2NoaXAtPm9wdGlvbnMgfD0gTkFORF9VU0VfRkxBU0hfQkJUOwogCX0KIAotCWlmIChjcHVfaGFzX2RtYSgpICYmIHVzZV9kbWEpIHsKKwlpZiAoIWNwdV9oYXNfZG1hKCkpCisJCXVzZV9kbWEgPSAwOworCisJaWYgKHVzZV9kbWEpIHsKIAkJZG1hX2NhcF9tYXNrX3QgbWFzazsKIAogCQlkbWFfY2FwX3plcm8obWFzayk7CkBAIC02MTEsNyArNjAyLDggQEAKIAkJfQogCX0KIAlpZiAodXNlX2RtYSkKLQkJZGV2X2luZm8oaG9zdC0+ZGV2LCAiVXNpbmcgRE1BIGZvciBOQU5EIGFjY2Vzcy5cbiIpOworCQlkZXZfaW5mbyhob3N0LT5kZXYsICJVc2luZyAlcyBmb3IgRE1BIHRyYW5zZmVycy5cbiIsCisJCQkJCWRtYV9jaGFuX25hbWUoaG9zdC0+ZG1hX2NoYW4pKTsKIAllbHNlCiAJCWRldl9pbmZvKGhvc3QtPmRldiwgIk5vIERNQSBzdXBwb3J0IGZvciBOQU5EIGFjY2Vzcy5cbiIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2F1dGNwdTEyLmMgYi9kcml2ZXJzL210ZC9uYW5kL2F1dGNwdTEyLmMKaW5kZXggN2M5NWRhMS4uMDkxMWNmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9hdXRjcHUxMi5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvYXV0Y3B1MTIuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiAJICovCiAJdGhpcy0+b3B0aW9ucyA9IE5BTkRfVVNFX0ZMQVNIX0JCVDsKIAotCS8qIFNjYW4gdG8gZmluZCBleGlzdGFuY2Ugb2YgdGhlIGRldmljZSAqLworCS8qIFNjYW4gdG8gZmluZCBleGlzdGVuY2Ugb2YgdGhlIGRldmljZSAqLwogCWlmIChuYW5kX3NjYW4oYXV0Y3B1MTJfbXRkLCAxKSkgewogCQllcnIgPSAtRU5YSU87CiAJCWdvdG8gb3V0X2lvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvY3M1NTN4X25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvY3M1NTN4X25hbmQuYwppbmRleCA5ZjFiNDUxLi43MWMzNWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2NzNTUzeF9uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9jczU1M3hfbmFuZC5jCkBAIC0yNDEsNyArMjQxLDcgQEAKIAkvKiBFbmFibGUgdGhlIGZvbGxvd2luZyBmb3IgYSBmbGFzaCBiYXNlZCBiYWQgYmxvY2sgdGFibGUgKi8KIAl0aGlzLT5vcHRpb25zID0gTkFORF9VU0VfRkxBU0hfQkJUIHwgTkFORF9OT19BVVRPSU5DUjsKIAotCS8qIFNjYW4gdG8gZmluZCBleGlzdGFuY2Ugb2YgdGhlIGRldmljZSAqLworCS8qIFNjYW4gdG8gZmluZCBleGlzdGVuY2Ugb2YgdGhlIGRldmljZSAqLwogCWlmIChuYW5kX3NjYW4obmV3X210ZCwgMSkpIHsKIAkJZXJyID0gLUVOWElPOwogCQlnb3RvIG91dF9pb3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2RlbmFsaS5jIGIvZHJpdmVycy9tdGQvbmFuZC9kZW5hbGkuYwppbmRleCA4YzhkM2M4Li40NjMzZjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2RlbmFsaS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvZGVuYWxpLmMKQEAgLTcyNCw3ICs3MjQsNyBAQAogfQogCiAvKiBUaGlzIGhlbHBlciBmdW5jdGlvbiBzZXR1cHMgdGhlIHJlZ2lzdGVycyBmb3IgRUNDIGFuZCB3aGV0aGVyIG9yIG5vdAotICogdGhlIHNwYXJlIGFyZWEgd2lsbCBiZSB0cmFuc2ZlcmVkLiAqLworICogdGhlIHNwYXJlIGFyZWEgd2lsbCBiZSB0cmFuc2ZlcnJlZC4gKi8KIHN0YXRpYyB2b2lkIHNldHVwX2VjY19mb3JfeGZlcihzdHJ1Y3QgZGVuYWxpX25hbmRfaW5mbyAqZGVuYWxpLCBib29sIGVjY19lbiwKIAkJCQlib29sIHRyYW5zZmVyX3NwYXJlKQogewpAQCAtOTY1LDcgKzk2NSw3IEBACiAKIAkJCWlmIChFQ0NfRVJST1JfQ09SUkVDVEFCTEUoZXJyX2NvcnJlY3Rpb25faW5mbykpIHsKIAkJCQkvKiBJZiBlcnJfYnl0ZSBpcyBsYXJnZXIgdGhhbiBFQ0NfU0VDVE9SX1NJWkUsCi0JCQkJICogbWVhbnMgZXJyb3IgaGFwcGVuZCBpbiBPT0IsIHNvIHdlIGlnbm9yZQorCQkJCSAqIG1lYW5zIGVycm9yIGhhcHBlbmVkIGluIE9PQiwgc28gd2UgaWdub3JlCiAJCQkJICogaXQuIEl0J3Mgbm8gbmVlZCBmb3IgdXMgdG8gY29ycmVjdCBpdAogCQkJCSAqIGVycl9kZXZpY2UgaXMgcmVwcmVzZW50ZWQgdGhlIE5BTkQgZXJyb3IKIAkJCQkgKiBiaXRzIGFyZSBoYXBwZW5lZCBpbiBpZiB0aGVyZSBhcmUgbW9yZQpAQCAtMTEwOSw3ICsxMTA5LDcgQEAKIH0KIAogLyogVGhpcyBpcyB0aGUgY2FsbGJhY2sgdGhhdCB0aGUgTkFORCBjb3JlIGNhbGxzIHRvIHdyaXRlIGEgcGFnZSB3aXRob3V0IEVDQy4KLSAqIHJhdyBhY2Nlc3MgaXMgc2ltaWxpYXIgdG8gRUNDIHBhZ2Ugd3JpdGVzLCBzbyBhbGwgdGhlIHdvcmsgaXMgZG9uZSBpbiB0aGUKKyAqIHJhdyBhY2Nlc3MgaXMgc2ltaWxhciB0byBFQ0MgcGFnZSB3cml0ZXMsIHNvIGFsbCB0aGUgd29yayBpcyBkb25lIGluIHRoZQogICogd3JpdGVfcGFnZSgpIGZ1bmN0aW9uIGFib3ZlLgogICovCiBzdGF0aWMgdm9pZCBkZW5hbGlfd3JpdGVfcGFnZV9yYXcoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2Rpc2tvbmNoaXAuYyBiL2RyaXZlcnMvbXRkL25hbmQvZGlza29uY2hpcC5jCmluZGV4IGI3ZjhkZTcuLjY1N2I5ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvZGlza29uY2hpcC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvZGlza29uY2hpcC5jCkBAIC0xMzcsNyArMTM3LDcgQEAKICAqCiAgKiBGYWJyaWNlIEJlbGxhcmQgZmlndXJlZCB0aGlzIG91dCBpbiB0aGUgb2xkIGRvY2VjYyBjb2RlLiBJIGFkZGVkCiAgKiBzb21lIGNvbW1lbnRzLCBpbXByb3ZlZCBhIG1pbm9yIGJpdCBhbmQgY29udmVydGVkIGl0IHRvIG1ha2UgdXNlCi0gKiBvZiB0aGUgZ2VuZXJpYyBSZWVkLVNvbG9tb24gbGliYXJ5LiB0Z2x4CisgKiBvZiB0aGUgZ2VuZXJpYyBSZWVkLVNvbG9tb24gbGlicmFyeS4gdGdseAogICovCiBzdGF0aWMgaW50IGRvY19lY2NfZGVjb2RlKHN0cnVjdCByc19jb250cm9sICpycywgdWludDhfdCAqZGF0YSwgdWludDhfdCAqZWNjKQogewpAQCAtNDAwLDcgKzQwMCw3IEBACiAJZG9jMjAweF9od2NvbnRyb2wobXRkLCAwLCBOQU5EX0NUUkxfQUxFIHwgTkFORF9DVFJMX0NIQU5HRSk7CiAJZG9jMjAweF9od2NvbnRyb2wobXRkLCBOQU5EX0NNRF9OT05FLCBOQU5EX05DRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOwogCi0JLyogV2UgY2FudCcgdXNlIGRldl9yZWFkeSBoZXJlLCBidXQgYXQgbGVhc3Qgd2Ugd2FpdCBmb3IgdGhlCisJLyogV2UgY2FuJ3QgdXNlIGRldl9yZWFkeSBoZXJlLCBidXQgYXQgbGVhc3Qgd2Ugd2FpdCBmb3IgdGhlCiAJICogY29tbWFuZCB0byBjb21wbGV0ZQogCSAqLwogCXVkZWxheSg1MCk7CkBAIC05ODYsNyArOTg2LDcgQEAKIAkJZHVtbXkgPSBSZWFkRE9DKGRvY3B0ciwgRUNDQ29uZik7CiAJfQogCi0JLyogRXJyb3Igb2NjdXJlZCA/ICovCisJLyogRXJyb3Igb2NjdXJyZWQgPyAqLwogCWlmIChkdW1teSAmIDB4ODApIHsKIAkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgewogCQkJaWYgKERvQ19pc19NaWxsZW5uaXVtUGx1cyhkb2MpKQpAQCAtMTE2MCw3ICsxMTYwLDcgQEAKIAkvKiBOT1RFOiBUaGUgbGluZXMgYmVsb3cgbW9kaWZ5IGludGVybmFsIHZhcmlhYmxlcyBvZiB0aGUgTkFORCBhbmQgTVRECiAJICAgbGF5ZXJzOyB2YXJpYWJsZXMgd2l0aCBoYXZlIGFscmVhZHkgYmVlbiBjb25maWd1cmVkIGJ5IG5hbmRfc2Nhbi4KIAkgICBVbmZvcnR1bmF0ZWx5LCB3ZSBkaWRuJ3Qga25vdyBiZWZvcmUgdGhpcyBwb2ludCB3aGF0IHRoZXNlIHZhbHVlcwotCSAgIHNob3VsZCBiZS4gIFRodXMsIHRoaXMgY29kZSBpcyBzb21ld2hhdCBkZXBlbmRhbnQgb24gdGhlIGV4YWN0CisJICAgc2hvdWxkIGJlLiAgVGh1cywgdGhpcyBjb2RlIGlzIHNvbWV3aGF0IGRlcGVuZGVudCBvbiB0aGUgZXhhY3QKIAkgICBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTkFORCBsYXllci4gICovCiAJaWYgKG1oLT5Vbml0U2l6ZUZhY3RvciAhPSAweGZmKSB7CiAJCXRoaXMtPmJidF9lcmFzZV9zaGlmdCArPSAoMHhmZiAtIG1oLT5Vbml0U2l6ZUZhY3Rvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2ZzbF9lbGJjX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvZnNsX2VsYmNfbmFuZC5jCmluZGV4IDdhMTNkNDIuLjUzN2UzODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvZnNsX2VsYmNfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvZnNsX2VsYmNfbmFuZC5jCkBAIC01OSw3ICs1OSw3IEBACiAJdW5zaWduZWQgaW50IGZtcjsgICAgICAgLyogRkNNIEZsYXNoIE1vZGUgUmVnaXN0ZXIgdmFsdWUgICAgICovCiB9OwogCi0vKiBGcmVlc2NhbGUgZUxCQyBGQ00gY29udHJvbGxlciBpbmZvbWF0aW9uICovCisvKiBGcmVlc2NhbGUgZUxCQyBGQ00gY29udHJvbGxlciBpbmZvcm1hdGlvbiAqLwogCiBzdHJ1Y3QgZnNsX2VsYmNfZmNtX2N0cmwgewogCXN0cnVjdCBuYW5kX2h3X2NvbnRyb2wgY29udHJvbGxlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvZnNtY19uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2ZzbWNfbmFuZC5jCmluZGV4IDIwNWIxMGIuLjBkNDVlZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvZnNtY19uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9mc21jX25hbmQuYwpAQCAtMzM1LDcgKzMzNSw3IEBACiAKIC8qCiAgKiBmc21jX3JlYWRfaHdlY2NfZWNjNCAtIEhhcmR3YXJlIEVDQyBjYWxjdWxhdG9yIGZvciBlY2M0IG9wdGlvbiBzdXBwb3J0ZWQgYnkKLSAqIEZTTUMuIEVDQyBpcyAxMyBieXRlcyBmb3IgNTEyIGJ5dGVzIG9mIGRhdGEgKHN1cHBvcnRzIGVycm9yIGNvcnJlY3Rpb24gdXB0bworICogRlNNQy4gRUNDIGlzIDEzIGJ5dGVzIGZvciA1MTIgYnl0ZXMgb2YgZGF0YSAoc3VwcG9ydHMgZXJyb3IgY29ycmVjdGlvbiB1cCB0bwogICogbWF4IG9mIDgtYml0cykKICAqLwogc3RhdGljIGludCBmc21jX3JlYWRfaHdlY2NfZWNjNChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdWludDhfdCAqZGF0YSwKQEAgLTM4MSw3ICszODEsNyBAQAogCiAvKgogICogZnNtY19yZWFkX2h3ZWNjX2VjYzEgLSBIYXJkd2FyZSBFQ0MgY2FsY3VsYXRvciBmb3IgZWNjMSBvcHRpb24gc3VwcG9ydGVkIGJ5Ci0gKiBGU01DLiBFQ0MgaXMgMyBieXRlcyBmb3IgNTEyIGJ5dGVzIG9mIGRhdGEgKHN1cHBvcnRzIGVycm9yIGNvcnJlY3Rpb24gdXB0bworICogRlNNQy4gRUNDIGlzIDMgYnl0ZXMgZm9yIDUxMiBieXRlcyBvZiBkYXRhIChzdXBwb3J0cyBlcnJvciBjb3JyZWN0aW9uIHVwIHRvCiAgKiBtYXggb2YgMS1iaXQpCiAgKi8KIHN0YXRpYyBpbnQgZnNtY19yZWFkX2h3ZWNjX2VjYzEoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsCkBAIC00MDgsMTAgKzQwOCwxMCBAQAogICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQogICogQHBhZ2U6CXBhZ2UgbnVtYmVyIHRvIHJlYWQKICAqCi0gKiBUaGlzIHJvdXRpbmUgaXMgbmVlZGVkIGZvciBmc21jIHZlcmlzb24gOCBhcyByZWFkaW5nIGZyb20gTkFORCBjaGlwIGhhcyB0byBiZQorICogVGhpcyByb3V0aW5lIGlzIG5lZWRlZCBmb3IgZnNtYyB2ZXJzaW9uIDggYXMgcmVhZGluZyBmcm9tIE5BTkQgY2hpcCBoYXMgdG8gYmUKICAqIHBlcmZvcm1lZCBpbiBhIHN0cmljdCBzZXF1ZW5jZSBhcyBmb2xsb3dzOgogICogZGF0YSg1MTIgYnl0ZSkgLT4gZWNjKDEzIGJ5dGUpCi0gKiBBZnRlciB0aGlzIHJlYWQsIGZzbWMgaGFyZHdhcmUgZ2VuZXJhdGVzIGFuZCByZXBvcnRzIGVycm9yIGRhdGEgYml0cyh1cHRvIGEKKyAqIEFmdGVyIHRoaXMgcmVhZCwgZnNtYyBoYXJkd2FyZSBnZW5lcmF0ZXMgYW5kIHJlcG9ydHMgZXJyb3IgZGF0YSBiaXRzKHVwIHRvIGEKICAqIG1heCBvZiA4IGJpdHMpCiAgKi8KIHN0YXRpYyBpbnQgZnNtY19yZWFkX3BhZ2VfaHdlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCkBAIC02ODYsNyArNjg2LDcgQEAKIAl9CiAKIAkvKgotCSAqIFNjYW4gdG8gZmluZCBleGlzdGFuY2Ugb2YgdGhlIGRldmljZQorCSAqIFNjYW4gdG8gZmluZCBleGlzdGVuY2Ugb2YgdGhlIGRldmljZQogCSAqLwogCWlmIChuYW5kX3NjYW5faWRlbnQoJmhvc3QtPm10ZCwgMSwgTlVMTCkpIHsKIAkJcmV0ID0gLUVOWElPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKaW5kZXggODVjZmMwNi4uYzU0YTRjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCkBAIC0xNTgyLDcgKzE1ODIsNyBAQAogfQogCiAvKioKLSAqIG5hbmRfcmVhZCAtIFtNVEQgSW50ZXJmYWNlXSBNVEQgY29tcGFiaWxpdHkgZnVuY3Rpb24gZm9yIG5hbmRfZG9fcmVhZF9lY2MKKyAqIG5hbmRfcmVhZCAtIFtNVEQgSW50ZXJmYWNlXSBNVEQgY29tcGF0aWJpbGl0eSBmdW5jdGlvbiBmb3IgbmFuZF9kb19yZWFkX2VjYwogICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBmcm9tOglvZmZzZXQgdG8gcmVhZCBmcm9tCiAgKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gcmVhZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2JidC5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2JidC5jCmluZGV4IGExZThiMzAuLmFmNDY0MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYnQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmJ0LmMKQEAgLTk0NSw3ICs5NDUsNyBAQAogCQlyZDIgPSBOVUxMOwogCQkvKiBQZXIgY2hpcCBvciBwZXIgZGV2aWNlID8gKi8KIAkJY2hpcHNlbCA9ICh0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1BFUkNISVApID8gaSA6IC0xOwotCQkvKiBNaXJyb3JlZCB0YWJsZSBhdmlsYWJsZSA/ICovCisJCS8qIE1pcnJvcmVkIHRhYmxlIGF2YWlsYWJsZSA/ICovCiAJCWlmIChtZCkgewogCQkJaWYgKHRkLT5wYWdlc1tpXSA9PSAtMSAmJiBtZC0+cGFnZXNbaV0gPT0gLTEpIHsKIAkJCQl3cml0ZW9wcyA9IDB4MDM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25hbmRzaW0uYyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZHNpbS5jCmluZGV4IDIxMzE4MWIuLjg5M2Q5NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZHNpbS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZHNpbS5jCkBAIC0xNjIsNyArMTYyLDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZ3JhdmVwYWdlcywgICAgICJQYWdlcyB0aGF0IGxvc2UgZGF0YSBbOiBtYXhpbXVtIHJlYWRzIChkZWZhdWx0cyB0byAzKV0iCiAJCQkJICIgc2VwYXJhdGVkIGJ5IGNvbW1hcyBlLmcuIDE0MDE6MiBtZWFucyBwYWdlIDE0MDEiCiAJCQkJICIgY2FuIGJlIHJlYWQgb25seSB0d2ljZSBiZWZvcmUgZmFpbGluZyIpOwotTU9EVUxFX1BBUk1fREVTQyhycHR3ZWFyLCAgICAgICAgIk51bWJlciBvZiBlcmFzZXMgaW5iZXR3ZWVuIHJlcG9ydGluZyB3ZWFyLCBpZiBub3QgemVybyIpOworTU9EVUxFX1BBUk1fREVTQyhycHR3ZWFyLCAgICAgICAgIk51bWJlciBvZiBlcmFzZXMgYmV0d2VlbiByZXBvcnRpbmcgd2VhciwgaWYgbm90IHplcm8iKTsKIE1PRFVMRV9QQVJNX0RFU0Mob3ZlcnJpZGVzaXplLCAgICJTcGVjaWZpZXMgdGhlIE5BTkQgRmxhc2ggc2l6ZSBvdmVycmlkaW5nIHRoZSBJRCBieXRlcy4gIgogCQkJCSAiVGhlIHNpemUgaXMgc3BlY2lmaWVkIGluIGVyYXNlIGJsb2NrcyBhbmQgYXMgdGhlIGV4cG9uZW50IG9mIGEgcG93ZXIgb2YgdHdvIgogCQkJCSAiIGUuZy4gNSBtZWFucyBhIHNpemUgb2YgMzIgZXJhc2UgYmxvY2tzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25vbWFkaWtfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9ub21hZGlrX25hbmQuYwppbmRleCA4YzBiNjkzLi5hMDQ1YTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25vbWFkaWtfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbm9tYWRpa19uYW5kLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCW5hbmQtPm9wdGlvbnMgPSBwZGF0YS0+b3B0aW9uczsKIAogCS8qCi0JICogU2NhbiB0byBmaW5kIGV4aXN0YW5jZSBvZiB0aGUgZGV2aWNlCisJICogU2NhbiB0byBmaW5kIGV4aXN0ZW5jZSBvZiB0aGUgZGV2aWNlCiAJICovCiAJaWYgKG5hbmRfc2NhbigmaG9zdC0+bXRkLCAxKSkgewogCQlyZXQgPSAtRU5YSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3Bhc2VtaV9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL3Bhc2VtaV9uYW5kLmMKaW5kZXggNTllZmE4Mi4uMjBiZmU1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9wYXNlbWlfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvcGFzZW1pX25hbmQuYwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAJLyogRW5hYmxlIHRoZSBmb2xsb3dpbmcgZm9yIGEgZmxhc2ggYmFzZWQgYmFkIGJsb2NrIHRhYmxlICovCiAJY2hpcC0+b3B0aW9ucyA9IE5BTkRfVVNFX0ZMQVNIX0JCVCB8IE5BTkRfTk9fQVVUT0lOQ1I7CiAKLQkvKiBTY2FuIHRvIGZpbmQgZXhpc3RhbmNlIG9mIHRoZSBkZXZpY2UgKi8KKwkvKiBTY2FuIHRvIGZpbmQgZXhpc3RlbmNlIG9mIHRoZSBkZXZpY2UgKi8KIAlpZiAobmFuZF9zY2FuKHBhc2VtaV9uYW5kX210ZCwgMSkpIHsKIAkJZXJyID0gLUVOWElPOwogCQlnb3RvIG91dF9scGM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3BsYXRfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9wbGF0X25hbmQuYwppbmRleCAzMTdhZmY0Li5jYWY1YTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3BsYXRfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvcGxhdF9uYW5kLmMKQEAgLTk1LDcgKzk1LDcgQEAKIAkJCWdvdG8gb3V0OwogCX0KIAotCS8qIFNjYW4gdG8gZmluZCBleGlzdGFuY2Ugb2YgdGhlIGRldmljZSAqLworCS8qIFNjYW4gdG8gZmluZCBleGlzdGVuY2Ugb2YgdGhlIGRldmljZSAqLwogCWlmIChuYW5kX3NjYW4oJmRhdGEtPm10ZCwgcGRhdGEtPmNoaXAubnJfY2hpcHMpKSB7CiAJCWVyciA9IC1FTlhJTzsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3B4YTN4eF9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL3B4YTN4eF9uYW5kLmMKaW5kZXggYWI3ZjRjMy4uZmYwNzAxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9weGEzeHhfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvcHhhM3h4X25hbmQuYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAKIHN0YXRpYyBpbnQgdXNlX2RtYSA9IDE7CiBtb2R1bGVfcGFyYW0odXNlX2RtYSwgYm9vbCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHVzZV9kbWEsICJlbmFibGUgRE1BIGZvciBkYXRhIHRyYW5zZmVyaW5nIHRvL2Zyb20gTkFORCBIVyIpOworTU9EVUxFX1BBUk1fREVTQyh1c2VfZG1hLCAiZW5hYmxlIERNQSBmb3IgZGF0YSB0cmFuc2ZlcnJpbmcgdG8vZnJvbSBOQU5EIEhXIik7CiAKIC8qCiAgKiBEZWZhdWx0IE5BTkQgZmxhc2ggY29udHJvbGxlciBjb25maWd1cmF0aW9uIHNldHVwIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9yODUyLmMgYi9kcml2ZXJzL210ZC9uYW5kL3I4NTIuYwppbmRleCA2MzIyZDFmLi5jYWUyZTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3I4NTIuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3I4NTIuYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAKIAlkYmdfdmVyYm9zZSgiZG9pbmcgZG1hICVzICIsIGRvX3JlYWQgPyAicmVhZCIgOiAid3JpdGUiKTsKIAotCS8qIFNldCBpbnRpYWwgZG1hIHN0YXRlOiBmb3IgcmVhZGluZyBmaXJzdCBmaWxsIG9uIGJvYXJkIGJ1ZmZlciwKKwkvKiBTZXQgaW5pdGlhbCBkbWEgc3RhdGU6IGZvciByZWFkaW5nIGZpcnN0IGZpbGwgb24gYm9hcmQgYnVmZmVyLAogCSAgZnJvbSBkZXZpY2UsIGZvciB3cml0ZXMgZmlyc3QgZmlsbCB0aGUgYnVmZmVyICBmcm9tIG1lbW9yeSovCiAJZGV2LT5kbWFfc3RhdGUgPSBkb19yZWFkID8gRE1BX0lOVEVSTkFMIDogRE1BX01FTU9SWTsKIApAQCAtNzY2LDcgKzc2Niw3IEBACiAJCXJldCA9IElSUV9IQU5ETEVEOwogCQlkZXYtPmNhcmRfZGV0ZWN0ZWQgPSAhIShjYXJkX3N0YXR1cyAmIFI4NTJfQ0FSRF9JUlFfSU5TRVJUKTsKIAotCQkvKiB3ZSBzaG91bGRuJ3QgcmVjaWV2ZSBhbnkgaW50ZXJydXB0cyBpZiB3ZSB3YWl0IGZvciBjYXJkCisJCS8qIHdlIHNob3VsZG4ndCByZWNlaXZlIGFueSBpbnRlcnJ1cHRzIGlmIHdlIHdhaXQgZm9yIGNhcmQKIAkJCXRvIHNldHRsZSAqLwogCQlXQVJOX09OKGRldi0+Y2FyZF91bnN0YWJsZSk7CiAKQEAgLTc5NCwxMyArNzk0LDEzIEBACiAJCXJldCA9IElSUV9IQU5ETEVEOwogCiAJCWlmIChkbWFfc3RhdHVzICYgUjg1Ml9ETUFfSVJRX0VSUk9SKSB7Ci0JCQlkYmcoInJlY2lldmVkIGRtYSBlcnJvciBJUlEiKTsKKwkJCWRiZygicmVjZWl2ZWQgZG1hIGVycm9yIElSUSIpOwogCQkJcjg1Ml9kbWFfZG9uZShkZXYsIC1FSU8pOwogCQkJY29tcGxldGUoJmRldi0+ZG1hX2RvbmUpOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQkvKiByZWNpZXZlZCBETUEgaW50ZXJydXB0IG91dCBvZiBub3doZXJlPyAqLworCQkvKiByZWNlaXZlZCBETUEgaW50ZXJydXB0IG91dCBvZiBub3doZXJlPyAqLwogCQlXQVJOX09OX09OQ0UoZGV2LT5kbWFfc3RhZ2UgPT0gMCk7CiAKIAkJaWYgKGRldi0+ZG1hX3N0YWdlID09IDApCkBAIC05NjAsNyArOTYwLDcgQEAKIAkJJmRldi0+Y2FyZF9kZXRlY3Rfd29yaywgMCk7CiAKIAotCXByaW50ayhLRVJOX05PVElDRSBEUlZfTkFNRSAiOiBkcml2ZXIgbG9hZGVkIHN1Y2Nlc2Z1bGx5XG4iKTsKKwlwcmludGsoS0VSTl9OT1RJQ0UgRFJWX05BTUUgIjogZHJpdmVyIGxvYWRlZCBzdWNjZXNzZnVsbHlcbiIpOwogCXJldHVybiAwOwogCiBlcnJvcjEwOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9zaF9mbGN0bC5jIGIvZHJpdmVycy9tdGQvbmFuZC9zaF9mbGN0bC5jCmluZGV4IDU0NmMyZjAuLjgxYmJiNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvc2hfZmxjdGwuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3NoX2ZsY3RsLmMKQEAgLTc4LDcgKzc4LDcgQEAKIAogc3RhdGljIHZvaWQgdGltZW91dF9lcnJvcihzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsLCBjb25zdCBjaGFyICpzdHIpCiB7Ci0JZGV2X2VycigmZmxjdGwtPnBkZXYtPmRldiwgIlRpbWVvdXQgb2NjdXJlZCBpbiAlc1xuIiwgc3RyKTsKKwlkZXZfZXJyKCZmbGN0bC0+cGRldi0+ZGV2LCAiVGltZW91dCBvY2N1cnJlZCBpbiAlc1xuIiwgc3RyKTsKIH0KIAogc3RhdGljIHZvaWQgd2FpdF9jb21wbGV0aW9uKHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3NtX2NvbW1vbi5jIGIvZHJpdmVycy9tdGQvbmFuZC9zbV9jb21tb24uYwppbmRleCA0YThmMzY3Li41N2NjODBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3NtX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvc21fY29tbW9uLmMKQEAgLTEyMSw3ICsxMjEsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQkvKiBCYWQgYmxvY2sgbWFya2VyIHBvc3Rpb24gKi8KKwkvKiBCYWQgYmxvY2sgbWFya2VyIHBvc2l0aW9uICovCiAJY2hpcC0+YmFkYmxvY2twb3MgPSAweDA1OwogCWNoaXAtPmJhZGJsb2NrYml0cyA9IDc7CiAJY2hpcC0+YmxvY2tfbWFya2JhZCA9IHNtX2Jsb2NrX21hcmtiYWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3RtaW9fbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC90bWlvX25hbmQuYwppbmRleCAzOGZiMTY3Li4xNGM1Nzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3RtaW9fbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvdG1pb19uYW5kLmMKQEAgLTQsNyArNCw3IEBACiAgKiBTbGlnaHRseSBtdXJreSBwcmUtZ2l0IGhpc3Rvcnkgb2YgdGhlIGRyaXZlcjoKICAqCiAgKiBDb3B5cmlnaHQgKGMpIElhbiBNb2x0b24gMjAwNCwgMjAwNSwgMjAwOAotICogICAgT3JpZ2luYWwgd29yaywgaW5kZXBlbmRhbnQgb2Ygc2hhcnBzIGNvZGUuIEluY2x1ZGVkIGhhcmR3YXJlIEVDQyBzdXBwb3J0LgorICogICAgT3JpZ2luYWwgd29yaywgaW5kZXBlbmRlbnQgb2Ygc2hhcnBzIGNvZGUuIEluY2x1ZGVkIGhhcmR3YXJlIEVDQyBzdXBwb3J0LgogICogICAgSGFyZCBFQ0MgZGlkIG5vdCB3b3JrIGZvciB3cml0ZXMgaW4gdGhlIGVhcmx5IHJldmlzaW9ucy4KICAqIENvcHlyaWdodCAoYykgRGlyayBPcGZlciAyMDA1LgogICogICAgTW9kaWZpY2F0aW9ucyBkZXZlbG9wZWQgZnJvbSBzaGFycHMgY29kZSBidXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb21hcDIuYyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb21hcDIuYwppbmRleCBmNTkxZjYxLi4xZmNiNDFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL29tYXAyLmMKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbWFwMi5jCkBAIC02MDgsNyArNjA4LDcgQEAKIAogCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoYy0+cmVndWxhdG9yKTsKIAlpZiAocmV0ICE9IDApCi0JCWRldl9lcnIoJmMtPnBkZXYtPmRldiwgImNhbnQgZW5hYmxlIHJlZ3VsYXRvclxuIik7CisJCWRldl9lcnIoJmMtPnBkZXYtPmRldiwgImNhbid0IGVuYWJsZSByZWd1bGF0b3JcbiIpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTYyMCw3ICs2MjAsNyBAQAogCiAJcmV0ID0gcmVndWxhdG9yX2Rpc2FibGUoYy0+cmVndWxhdG9yKTsKIAlpZiAocmV0ICE9IDApCi0JCWRldl9lcnIoJmMtPnBkZXYtPmRldiwgImNhbnQgZGlzYWJsZSByZWd1bGF0b3JcbiIpOworCQlkZXZfZXJyKCZjLT5wZGV2LT5kZXYsICJjYW4ndCBkaXNhYmxlIHJlZ3VsYXRvclxuIik7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX3NpbS5jIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX3NpbS5jCmluZGV4IDhiMjQ2MDYuLjVlZjNiZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9zaW0uYworKysgYi9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfc2ltLmMKQEAgLTMyMSw3ICszMjEsNyBAQAogCQkJCWNvbnRpbnVlOwogCQkJaWYgKG1lbWNtcChkZXN0ICsgb2ZmLCBmZmNoYXJzLCB0aGlzLT5zdWJwYWdlc2l6ZSkgJiYKIAkJCSAgICBvbmVuYW5kX2NoZWNrX292ZXJ3cml0ZShkZXN0ICsgb2ZmLCBzcmMgKyBvZmYsIHRoaXMtPnN1YnBhZ2VzaXplKSkKLQkJCQlwcmludGsoS0VSTl9FUlIgIm92ZXItd3JpdGUgaGFwcGVuZCBhdCAweCUwOHhcbiIsIG9mZnNldCk7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJvdmVyLXdyaXRlIGhhcHBlbmVkIGF0IDB4JTA4eFxuIiwgb2Zmc2V0KTsKIAkJCW1lbWNweShkZXN0ICsgb2ZmLCBzcmMgKyBvZmYsIHRoaXMtPnN1YnBhZ2VzaXplKTsKIAkJfQogCQkvKiBGYWxsIHRocm91Z2ggKi8KQEAgLTMzNSw3ICszMzUsNyBAQAogCQlkZXN0ID0gT05FTkFORF9DT1JFX1NQQVJFKGZsYXNoLCB0aGlzLCBvZmZzZXQpOwogCQlpZiAobWVtY21wKGRlc3QsIGZmY2hhcnMsIG10ZC0+b29ic2l6ZSkgJiYKIAkJICAgIG9uZW5hbmRfY2hlY2tfb3ZlcndyaXRlKGRlc3QsIHNyYywgbXRkLT5vb2JzaXplKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiT09COiBvdmVyLXdyaXRlIGhhcHBlbmQgYXQgMHglMDh4XG4iLAorCQkJcHJpbnRrKEtFUk5fRVJSICJPT0I6IG92ZXItd3JpdGUgaGFwcGVuZWQgYXQgMHglMDh4XG4iLAogCQkJICAgICAgIG9mZnNldCk7CiAJCW1lbWNweShkZXN0LCBzcmMsIG10ZC0+b29ic2l6ZSk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvc21fZnRsLmMgYi9kcml2ZXJzL210ZC9zbV9mdGwuYwppbmRleCAyYjBkYWFlLi5lZDNkNmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9zbV9mdGwuYworKysgYi9kcml2ZXJzL210ZC9zbV9mdGwuYwpAQCAtNTQwLDcgKzU0MCw3IEBACiAJCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQkvKiBJZiB0aGUgYmxvY2sgaXMgc2xpY2VkIChwYXJ0aWFseSBlcmFzZWQgdXN1YWxseSkgZXJhc2UgaXQgKi8KKwkvKiBJZiB0aGUgYmxvY2sgaXMgc2xpY2VkIChwYXJ0aWFsbHkgZXJhc2VkIHVzdWFsbHkpIGVyYXNlIGl0ICovCiAJaWYgKGkgPT0gMikgewogCQlzbV9lcmFzZV9ibG9jayhmdGwsIHpvbmUsIGJsb2NrLCAxKTsKIAkJcmV0dXJuIDE7CkBAIC04NzgsNyArODc4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogR2V0IGFuZCBhdXRvbWF0aWNseSBpbml0aWFsaXplIGFuIEZUTCBtYXBwaW5nIGZvciBvbmUgem9uZSAqLworLyogR2V0IGFuZCBhdXRvbWF0aWNhbGx5IGluaXRpYWxpemUgYW4gRlRMIG1hcHBpbmcgZm9yIG9uZSB6b25lICovCiBzdHJ1Y3QgZnRsX3pvbmUgKnNtX2dldF96b25lKHN0cnVjdCBzbV9mdGwgKmZ0bCwgaW50IHpvbmVfbnVtKQogewogCXN0cnVjdCBmdGxfem9uZSAqem9uZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9LY29uZmlnIGIvZHJpdmVycy9tdGQvdWJpL0tjb25maWcKaW5kZXggNmFiZWI0Zi4uNGRjYzc1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvdWJpL0tjb25maWcKQEAgLTU2LDcgKzU2LDcgQEAKIAlib29sICJVQkkgZGVidWdnaW5nIgogCWRlcGVuZHMgb24gU1lTRlMKIAlzZWxlY3QgREVCVUdfRlMKLQlzZWxlY3QgS0FMTFNZTVNfQUxMIGlmIEtBTExTWU1TICYmIERFQlVHX0tFUk5FTAorCXNlbGVjdCBLQUxMU1lNUwogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgVUJJIGRlYnVnZ2luZy4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL2lvLmMgYi9kcml2ZXJzL210ZC91YmkvaW8uYwppbmRleCBlZWRlZGY5Li5lMzQ3Y2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91YmkvaW8uYworKysgYi9kcml2ZXJzL210ZC91YmkvaW8uYwpAQCAtMzQ0LDYgKzM0NCwxMiBAQAogCXdhaXRfcXVldWVfaGVhZF90IHdxOwogCiAJZGJnX2lvKCJlcmFzZSBQRUIgJWQiLCBwbnVtKTsKKwl1YmlfYXNzZXJ0KHBudW0gPj0gMCAmJiBwbnVtIDwgdWJpLT5wZWJfY291bnQpOworCisJaWYgKHViaS0+cm9fbW9kZSkgeworCQl1YmlfZXJyKCJyZWFkLW9ubHkgbW9kZSIpOworCQlyZXR1cm4gLUVST0ZTOworCX0KIAogcmV0cnk6CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmd3EpOwpAQCAtMzkwLDcgKzM5Niw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWlmICh1YmlfZGJnX2lzX2VyYXNlX2ZhaWx1cmUoKSAmJiAhZXJyKSB7CisJaWYgKHViaV9kYmdfaXNfZXJhc2VfZmFpbHVyZSgpKSB7CiAJCWRiZ19lcnIoImNhbm5vdCBlcmFzZSBQRUIgJWQgKGVtdWxhdGVkKSIsIHBudW0pOwogCQlyZXR1cm4gLUVJTzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uYwppbmRleCAxMWViOGVmLi5kMmQxMmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMKQEAgLTk2OCw3ICs5NjgsNyBAQAogCQkJICogY29udGFpbnMgZ2FyYmFnZSBiZWNhdXNlIG9mIGEgcG93ZXIgY3V0IGR1cmluZyBlcmFzZQogCQkJICogb3BlcmF0aW9uLiBTbyB3ZSBqdXN0IHNjaGVkdWxlIHRoaXMgUEVCIGZvciBlcmFzdXJlLgogCQkJICoKLQkJCSAqIEJlc2lkZXMsIGluIGNhc2Ugb2YgTk9SIGZsYXNoLCB3ZSBkZWxpYmVyYXRseQorCQkJICogQmVzaWRlcywgaW4gY2FzZSBvZiBOT1IgZmxhc2gsIHdlIGRlbGliZXJhdGVseQogCQkJICogY29ycnVwdCBib3RoIGhlYWRlcnMgYmVjYXVzZSBOT1IgZmxhc2ggZXJhc3VyZSBpcwogCQkJICogc2xvdyBhbmQgY2FuIHN0YXJ0IGZyb20gdGhlIGVuZC4KIAkJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL3ZtdC5jIGIvZHJpdmVycy9tdGQvdWJpL3ZtdC5jCmluZGV4IGI3OWUwZGUuLjM2NmViNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS92bXQuYworKysgYi9kcml2ZXJzL210ZC91Ymkvdm10LmMKQEAgLTc5MCwxMSArNzkwLDYgQEAKIAkJZ290byBmYWlsOwogCX0KIAotCWlmICghdm9sLT5uYW1lKSB7Ci0JCXViaV9lcnIoIk5VTEwgdm9sdW1lIG5hbWUiKTsKLQkJZ290byBmYWlsOwotCX0KLQogCW4gPSBzdHJubGVuKHZvbC0+bmFtZSwgdm9sLT5uYW1lX2xlbiArIDEpOwogCWlmIChuICE9IHZvbC0+bmFtZV9sZW4pIHsKIAkJdWJpX2VycigiYmFkIG5hbWVfbGVuICVsbGQiLCBuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTAxLmMgYi9kcml2ZXJzL25ldC8zYzUwMS5jCmluZGV4IDllMWMwM2UuLjU0MjBmNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTAxLmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDEuYwpAQCAtMzk5LDcgKzM5OSw3IEBACiAgKiBhcyB3ZSBtYXkgc3RpbGwgYmUgYXR0ZW1wdGluZyB0byByZXRyaWV2ZSB0aGUgbGFzdCBSWCBwYWNrZXQgYnVmZmVyLgogICoKICAqIFdoZW4gYSB0cmFuc21pdCB0aW1lcyBvdXQgd2UgZHVtcCB0aGUgY2FyZCBpbnRvIGNvbnRyb2wgbW9kZSBhbmQganVzdAotICogc3RhcnQgYWdhaW4uIEl0IGhhcHBlbnMgZW5vdWdoIHRoYXQgaXQgaXNudCB3b3J0aCBsb2dnaW5nLgorICogc3RhcnQgYWdhaW4uIEl0IGhhcHBlbnMgZW5vdWdoIHRoYXQgaXQgaXNuJ3Qgd29ydGggbG9nZ2luZy4KICAqCiAgKiBXZSBhdm9pZCBob2xkaW5nIHRoZSBzcGluIGxvY2tzIHdoZW4gZG9pbmcgdGhlIHBhY2tldCBsb2FkIHRvIHRoZSBib2FyZC4KICAqIFRoZSBkZXZpY2UgaXMgdmVyeSBzbG93LCBhbmQgaXRzIERNQSBtb2RlIGlzIGV2ZW4gc2xvd2VyLiBJZiB3ZSBoZWxkIHRoZQpAQCAtNDk5LDcgKzQ5OSw3IEBACiAgKgogICogSGFuZGxlIHRoZSBldGhlciBpbnRlcmZhY2UgaW50ZXJydXB0cy4gVGhlIDNjNTAxIG5lZWRzIGEgbG90IG1vcmUKICAqIGhhbmQgaG9sZGluZyB0aGFuIG1vc3QgY2FyZHMuIEluIHBhcnRpY3VsYXIgd2UgZ2V0IGEgdHJhbnNtaXQgaW50ZXJydXB0Ci0gKiB3aXRoIGEgY29sbGlzaW9uIGVycm9yIGJlY2F1c2UgdGhlIGJvYXJkIGZpcm13YXJlIGlzbnQgY2FwYWJsZSBvZiByZXdpbmRpbmcKKyAqIHdpdGggYSBjb2xsaXNpb24gZXJyb3IgYmVjYXVzZSB0aGUgYm9hcmQgZmlybXdhcmUgaXNuJ3QgY2FwYWJsZSBvZiByZXdpbmRpbmcKICAqIGl0cyBvd24gdHJhbnNtaXQgYnVmZmVyIHBvaW50ZXJzLiBJdCBjYW4gaG93ZXZlciBjb3VudCB0byAxNiBmb3IgdXMuCiAgKgogICogT24gdGhlIHJlY2VpdmUgc2lkZSB0aGUgY2FyZCBpcyBhbHNvIHZlcnkgZHVtYi4gSXQgaGFzIG5vIGJ1ZmZlcmluZyB0bwpAQCAtNzMyLDcgKzczMiw3IEBACiAgKiBlbF9yZXNldDogUmVzZXQgYSAzYzUwMSBjYXJkCiAgKiBAZGV2OiBUaGUgM2M1MDEgY2FyZCBhYm91dCB0byBnZXQgemFwcGVkCiAgKgotICogRXZlbiByZXNldHRpbmcgYSAzYzUwMSBpc250IHNpbXBsZS4gV2hlbiB5b3UgYWN0aXZhdGUgcmVzZXQgaXQgbG9zZXMgYWxsCisgKiBFdmVuIHJlc2V0dGluZyBhIDNjNTAxIGlzbid0IHNpbXBsZS4gV2hlbiB5b3UgYWN0aXZhdGUgcmVzZXQgaXQgbG9zZXMgYWxsCiAgKiBpdHMgY29uZmlndXJhdGlvbi4gWW91IG11c3QgaG9sZCB0aGUgbG9jayB3aGVuIGRvaW5nIHRoaXMuIFRoZSBmdW5jdGlvbgogICogY2Fubm90IHRha2UgdGhlIGxvY2sgaXRzZWxmIGFzIGl0IGlzIGNhbGxhYmxlIGZyb20gdGhlIGlycSBoYW5kbGVyLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUyMy5jIGIvZHJpdmVycy9uZXQvM2M1MjMuYwppbmRleCBkZTU3OWQwLi5iYzBkMWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUyMy5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTIzLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgIHRoaXMgZm9yIHRoZSA2NEsgdmVyc2lvbiB3b3VsZCByZXF1aXJlIGEgbG90IG9mIGhlaW5vdXMgYmFuawogICAgc3dpdGNoaW5nLCB3aGljaCBJJ20gc3VyZSBub3QgaW50ZXJlc3RlZCBpbiBkb2luZy4gIElmIHlvdSB0cnkgdG8KICAgIGltcGxlbWVudCBhIGJhbmsgc3dpdGNoaW5nIHZlcnNpb24sIHlvdSdsbCBiYXNpY2FsbHkgaGF2ZSB0byByZW1lbWJlcgotICAgd2hhdCBiYW5rIGlzIGVuYWJsZWQgYW5kIGRvIGEgc3dpdGNoIGV2ZXJ5dGltZSB5b3UgYWNjZXNzIGEgbWVtb3J5CisgICB3aGF0IGJhbmsgaXMgZW5hYmxlZCBhbmQgZG8gYSBzd2l0Y2ggZXZlcnkgdGltZSB5b3UgYWNjZXNzIGEgbWVtb3J5CiAgICBsb2NhdGlvbiB0aGF0J3Mgbm90IGN1cnJlbnQuICBZb3UnbGwgYWxzbyBoYXZlIHRvIHJlbWFwIHBvaW50ZXJzIG9uCiAgICB0aGUgZHJpdmVyIHNpZGUsIGJlY2F1c2UgaXQgb25seSBrbm93cyBhYm91dCAxNksgb2YgdGhlIG1lbW9yeS4KICAgIEFueW9uZSBkZXNwZXJhdGUgb3IgbWFzb2NoaXN0aWMgZW5vdWdoIHRvIHRyeT8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTI3LmMgYi9kcml2ZXJzL25ldC8zYzUyNy5jCmluZGV4IDhjMDk0YmEuLmQ5ZDA1NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTI3LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MjcuYwpAQCAtNTEsNyArNTEsNyBAQAogICoJY2lyY3VsYXIgYnVmZmVyIHF1ZXVlcy4KICAqCiAgKglUaGUgbWFpbGJveGVzIGNhbiBiZSB1c2VkIGZvciBjb250cm9sbGluZyBob3cgdGhlIGNhcmQgdHJhdmVyc2VzCi0gKglpdHMgYnVmZmVyIHJpbmdzLCBidXQgYXJlIHVzZWQgb25seSBmb3IgaW5pdGFsIHNldHVwIGluIHRoaXMKKyAqCWl0cyBidWZmZXIgcmluZ3MsIGJ1dCBhcmUgdXNlZCBvbmx5IGZvciBpbml0aWFsIHNldHVwIGluIHRoaXMKICAqCWltcGxlbWVudGF0aW9uLiAgVGhlIGV4ZWMgbWFpbGJveCBhbGxvd3MgYSB2YXJpZXR5IG9mIGNvbW1hbmRzIHRvCiAgKgliZSBleGVjdXRlZC4gRWFjaCBjb21tYW5kIG11c3QgY29tcGxldGUgYmVmb3JlIHRoZSBuZXh0IGlzCiAgKglleGVjdXRlZC4gUHJpbWFyaWx5IHdlIHVzZSB0aGUgZXhlYyBtYWlsYm94IGZvciBjb250cm9sbGluZyB0aGUKQEAgLTgxMyw3ICs4MTMsNyBAQAogICoKICAqCVRoaXMgc2V0cyB1cCB0aGUgaG9zdCB0cmFuc21pdCBkYXRhLXN0cnVjdHVyZXMuCiAgKgotICoJRmlyc3QsIHdlIG9idGFpbiBmcm9tIHRoZSBjYXJkIGl0J3MgY3VycmVudCBwb3N0aW9uIGluIHRoZSB0eAorICoJRmlyc3QsIHdlIG9idGFpbiBmcm9tIHRoZSBjYXJkIGl0J3MgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgdHgKICAqCXJpbmcsIHNvIHRoYXQgd2Ugd2lsbCBrbm93IHdoZXJlIHRvIGJlZ2luIHRyYW5zbWl0dGluZwogICoJcGFja2V0cy4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzU5eC5jIGIvZHJpdmVycy9uZXQvM2M1OXguYwppbmRleCAwYTkyNDM2Zi4uOGNjMjI1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1OXguYworKysgYi9kcml2ZXJzL25ldC8zYzU5eC5jCkBAIC05ODQsNyArOTg0LDcgQEAKIAkJICogYW55IGRldmljZSBoYXZlIGJlZW4gZm91bmQgd2hlbiB3ZSBleGl0IGZyb20KIAkJICogZWlzYV9kcml2ZXJfcmVnaXN0ZXIgKHRoZSBidXMgcm9vdCBkcml2ZXIgbWF5IG5vdCBiZQogCQkgKiBpbml0aWFsaXplZCB5ZXQpLiBTbyB3ZSBibGluZGx5IGFzc3VtZSBzb21ldGhpbmcgd2FzCi0JCSAqIGZvdW5kLCBhbmQgbGV0IHRoZSBzeXNmcyBtYWdpYyBoYXBwZW5kLi4uCisJCSAqIGZvdW5kLCBhbmQgbGV0IHRoZSBzeXNmcyBtYWdpYyBoYXBwZW5lZC4uLgogCQkgKi8KIAkJZWlzYV9mb3VuZCA9IDE7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L0tjb25maWcKaW5kZXggZGMyODBiYy4uNmM4ODRlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9LY29uZmlnCkBAIC0yNTM2LDcgKzI1MzYsNyBAQAogc291cmNlICJkcml2ZXJzL25ldC9zdG1tYWMvS2NvbmZpZyIKIAogY29uZmlnIFBDSF9HQkUKLQl0cmlzdGF0ZSAiUENIIEdpZ2FiaXQgRXRoZXJuZXQiCisJdHJpc3RhdGUgIkludGVsIEVHMjBUIFBDSCAvIE9LSSBTRU1JQ09ORFVDVE9SIE1MNzIyMyBJT0ggR2JFIgogCWRlcGVuZHMgb24gUENJCiAJc2VsZWN0IE1JSQogCS0tLWhlbHAtLS0KQEAgLTI1NDgsNiArMjU0OCwxMiBAQAogCSAgdG8gR2lnYWJpdCBFdGhlcm5ldC4KIAkgIFRoaXMgZHJpdmVyIGVuYWJsZXMgR2lnYWJpdCBFdGhlcm5ldCBmdW5jdGlvbi4KIAorCSAgVGhpcyBkcml2ZXIgYWxzbyBjYW4gYmUgdXNlZCBmb3IgT0tJIFNFTUlDT05EVUNUT1IgSU9IKElucHV0LworCSAgT3V0cHV0IEh1YiksIE1MNzIyMy4KKwkgIE1MNzIyMyBJT0ggaXMgZm9yIE1QKE1lZGlhIFBob25lKSB1c2UuCisJICBNTDcyMjMgaXMgY29tcGFuaW9uIGNoaXAgZm9yIEludGVsIEF0b20gRTZ4eCBzZXJpZXMuCisJICBNTDcyMjMgaXMgY29tcGxldGVseSBjb21wYXRpYmxlIGZvciBJbnRlbCBFRzIwVCBQQ0guCisKIGVuZGlmICMgTkVUREVWXzEwMDAKIAogIwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQppbmRleCAwMWI2MDRhLi5lNWE3Mzc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQpAQCAtMTQ0LDcgKzE0NCw3IEBACiBvYmotJChDT05GSUdfU0IxMjUwX01BQykgKz0gc2IxMjUwLW1hYy5vCiBvYmotJChDT05GSUdfQjQ0KSArPSBiNDQubwogb2JqLSQoQ09ORklHX0ZPUkNFREVUSCkgKz0gZm9yY2VkZXRoLm8KLW9iai0kKENPTkZJR19ORV9IODMwMCkgKz0gbmUtaDgzMDAubyA4MzkwLm8KK29iai0kKENPTkZJR19ORV9IODMwMCkgKz0gbmUtaDgzMDAubwogb2JqLSQoQ09ORklHX0FYODg3OTYpICs9IGF4ODg3OTYubwogb2JqLSQoQ09ORklHX0JDTTYzWFhfRU5FVCkgKz0gYmNtNjN4eF9lbmV0Lm8KIG9iai0kKENPTkZJR19GVE1BQzEwMCkgKz0gZnRtYWMxMDAubwpAQCAtMjE5LDcgKzIxOSw3IEBACiBvYmotJChDT05GSUdfTFA0ODZFKSArPSBscDQ4NmUubwogCiBvYmotJChDT05GSUdfRVRIMTZJKSArPSBldGgxNmkubwotb2JqLSQoQ09ORklHX1pPUlJPODM5MCkgKz0gem9ycm84MzkwLm8gODM5MC5vCitvYmotJChDT05GSUdfWk9SUk84MzkwKSArPSB6b3JybzgzOTAubwogb2JqLSQoQ09ORklHX0hQTEFOQ0UpICs9IGhwbGFuY2UubyA3OTkwLm8KIG9iai0kKENPTkZJR19NVk1FMTQ3X05FVCkgKz0gbXZtZTE0Ny5vIDc5OTAubwogb2JqLSQoQ09ORklHX0VRVUFMSVpFUikgKz0gZXFsLm8KQEAgLTIzMSw3ICsyMzEsNyBAQAogb2JqLSQoQ09ORklHX0RFQ0xBTkNFKSArPSBkZWNsYW5jZS5vCiBvYmotJChDT05GSUdfQVRBUklMQU5DRSkgKz0gYXRhcmlsYW5jZS5vCiBvYmotJChDT05GSUdfQTIwNjUpICs9IGEyMDY1Lm8KLW9iai0kKENPTkZJR19IWURSQSkgKz0gaHlkcmEubyA4MzkwLm8KK29iai0kKENPTkZJR19IWURSQSkgKz0gaHlkcmEubwogb2JqLSQoQ09ORklHX0FSSUFETkUpICs9IGFyaWFkbmUubwogb2JqLSQoQ09ORklHX0NTODl4MCkgKz0gY3M4OXgwLm8KIG9iai0kKENPTkZJR19NQUNTT05JQykgKz0gbWFjc29uaWMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYWNlbmljLmMgYi9kcml2ZXJzL25ldC9hY2VuaWMuYwppbmRleCA0MWQ5OTExLi5lZTY0OGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hY2VuaWMuYworKysgYi9kcml2ZXJzL25ldC9hY2VuaWMuYwpAQCAtMTU4NCw3ICsxNTg0LDcgQEAKIAkvKgogCSAqIFdlIGhhdmVuJ3QgcmVjZWl2ZWQgYSBzdGF0cyB1cGRhdGUgZXZlbnQgZm9yIG1vcmUgdGhhbiAyLjUKIAkgKiBzZWNvbmRzIGFuZCB0aGVyZSBpcyBkYXRhIGluIHRoZSB0cmFuc21pdCBxdWV1ZSwgdGh1cyB3ZQotCSAqIGFzdW1lIHRoZSBjYXJkIGlzIHN0dWNrLgorCSAqIGFzc3VtZSB0aGUgY2FyZCBpcyBzdHVjay4KIAkgKi8KIAlpZiAoKmFwLT50eF9jc20gIT0gYXAtPnR4X3JldF9jc20pIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRyYW5zbWl0dGVyIGlzIHN0dWNrLCAlMDh4XG4iLApAQCAtMjU2NCw3ICsyNTY0LDcgQEAKIAogCQkvKgogCQkgKiBBIFRYLWRlc2NyaXB0b3IgcHJvZHVjZXIgKGFuIElSUSkgbWlnaHQgaGF2ZSBnb3R0ZW4KLQkJICogaW5iZXR3ZWVuLCBtYWtpbmcgdGhlIHJpbmcgZnJlZSBhZ2Fpbi4gU2luY2UgeG1pdCBpcworCQkgKiBiZXR3ZWVuLCBtYWtpbmcgdGhlIHJpbmcgZnJlZSBhZ2Fpbi4gU2luY2UgeG1pdCBpcwogCQkgKiBzZXJpYWxpemVkLCB0aGlzIGlzIHRoZSBvbmx5IHNpdHVhdGlvbiB3ZSBoYXZlIHRvCiAJCSAqIHJlLXRlc3QuCiAJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYW1kODExMWUuYyBiL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMKaW5kZXggMmNhODgwYi4uMjQxYjE4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYW1kODExMWUuYworKysgYi9kcml2ZXJzL25ldC9hbWQ4MTExZS5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhbWQ4MTExZV9wY2lfdGJsKTsKIG1vZHVsZV9wYXJhbV9hcnJheShzcGVlZF9kdXBsZXgsIGludCwgTlVMTCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHNwZWVkX2R1cGxleCwgIlNldCBkZXZpY2Ugc3BlZWQgYW5kIGR1cGxleCBtb2RlcywgMDogQXV0byBOZWdvdGl0YXRlLCAxOiAxME1icHMgSGFsZiBEdXBsZXgsIDI6IDEwTWJwcyBGdWxsIER1cGxleCwgMzogMTAwTWJwcyBIYWxmIER1cGxleCwgNDogMTAwTWJwcyBGdWxsIER1cGxleCIpOworTU9EVUxFX1BBUk1fREVTQyhzcGVlZF9kdXBsZXgsICJTZXQgZGV2aWNlIHNwZWVkIGFuZCBkdXBsZXggbW9kZXMsIDA6IEF1dG8gTmVnb3RpYXRlLCAxOiAxME1icHMgSGFsZiBEdXBsZXgsIDI6IDEwTWJwcyBGdWxsIER1cGxleCwgMzogMTAwTWJwcyBIYWxmIER1cGxleCwgNDogMTAwTWJwcyBGdWxsIER1cGxleCIpOwogbW9kdWxlX3BhcmFtX2FycmF5KGNvYWxlc2NlLCBib29sLCBOVUxMLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoY29hbGVzY2UsICJFbmFibGUgb3IgRGlzYWJsZSBpbnRlcnJ1cHQgY29hbGVzY2luZywgMTogRW5hYmxlLCAwOiBEaXNhYmxlIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoZHluYW1pY19pcGcsIGJvb2wsIE5VTEwsIDApOwpAQCAtMTM5OCw3ICsxMzk4LDcgQEAKIAkJbWNfZmlsdGVyWzFdID0gbWNfZmlsdGVyWzBdID0gMDsKIAkJbHAtPm9wdGlvbnMgJj0gfk9QVElPTl9NVUxUSUNBU1RfRU5BQkxFOwogCQlhbWQ4MTExZV93cml0ZXEoKih1NjQqKW1jX2ZpbHRlcixscC0+bW1pbyArIExBRFJGKTsKLQkJLyogZGlzYWJsZSBwcm9taXNjb3VzIG1vZGUgKi8KKwkJLyogZGlzYWJsZSBwcm9taXNjdW91cyBtb2RlICovCiAJCXdyaXRlbChQUk9NLCBscC0+bW1pbyArIENNRDIpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2V0aGVyaC5jIGIvZHJpdmVycy9uZXQvYXJtL2V0aGVyaC5jCmluZGV4IDRhZjIzNWQuLmZiZmI1YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9ldGhlcmguYworKysgYi9kcml2ZXJzL25ldC9hcm0vZXRoZXJoLmMKQEAgLTUyNyw3ICs1MjcsNyBAQAogICogUmVhZCB0aGUgZXRoZXJuZXQgYWRkcmVzcyBzdHJpbmcgZnJvbSB0aGUgb24gYm9hcmQgcm9tLgogICogVGhpcyBpcyBhbiBhc2NpaSBzdHJpbmcuLi4KICAqLwotc3RhdGljIGludCBfX2luaXQgZXRoZXJoX2FkZHIoY2hhciAqYWRkciwgc3RydWN0IGV4cGFuc2lvbl9jYXJkICplYykKK3N0YXRpYyBpbnQgX19kZXZpbml0IGV0aGVyaF9hZGRyKGNoYXIgKmFkZHIsIHN0cnVjdCBleHBhbnNpb25fY2FyZCAqZWMpCiB7CiAJc3RydWN0IGluX2NodW5rX2RpciBjZDsKIAljaGFyICpzOwpAQCAtNjU1LDcgKzY1NSw3IEBACiBzdGF0aWMgdTMyIGV0aGVyaF9yZWdvZmZzZXRzWzE2XTsKIHN0YXRpYyB1MzIgZXRoZXJtX3JlZ29mZnNldHNbMTZdOwogCi1zdGF0aWMgaW50IF9faW5pdAorc3RhdGljIGludCBfX2RldmluaXQKIGV0aGVyaF9wcm9iZShzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjLCBjb25zdCBzdHJ1Y3QgZWNhcmRfaWQgKmlkKQogewogCWNvbnN0IHN0cnVjdCBldGhlcmhfZGF0YSAqZGF0YSA9IGlkLT5kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXQxNzAwLmMgYi9kcml2ZXJzL25ldC9hdDE3MDAuYwppbmRleCBmNDc0NGZjLi42NWE3OGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdDE3MDAuYworKysgYi9kcml2ZXJzL25ldC9hdDE3MDAuYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAvKiBSdW4tdGltZSByZWdpc3RlciBiYW5rIDIgZGVmaW5pdGlvbnMuICovCiAjZGVmaW5lIERBVEFQT1JUCQk4CQkvKiBXb3JkLXdpZGUgRE1BIG9yIHByb2dyYW1tZWQtSS9PIGRhdGFwb3J0LiAqLwogI2RlZmluZSBUWF9TVEFSVAkJMTAKLSNkZWZpbmUgQ09MMTZDTlRMCQkxMQkJLyogQ29udHJvbGwgUmVnIGZvciAxNiBjb2xsaXNpb25zICovCisjZGVmaW5lIENPTDE2Q05UTAkJMTEJCS8qIENvbnRyb2wgUmVnIGZvciAxNiBjb2xsaXNpb25zICovCiAjZGVmaW5lIE1PREUxMwkJCTEzCiAjZGVmaW5lIFJYX0NUUkwJCQkxNAogLyogQ29uZmlndXJhdGlvbiByZWdpc3RlcnMgb25seSBvbiB0aGUgJzg2NUEvQiBjaGlwcy4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjLmggYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxYy5oCmluZGV4IDdjYjM3NWUuLjkyNTkyOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjLmgKKysrIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWMuaApAQCAtNTY2LDkgKzU2Niw5IEBACiAjZGVmaW5lIF9fQVRfVEVTVElORyAgICAgICAgMHgwMDAxCiAjZGVmaW5lIF9fQVRfUkVTRVRUSU5HICAgICAgMHgwMDAyCiAjZGVmaW5lIF9fQVRfRE9XTiAgICAgICAgICAgMHgwMDAzCi0JdTggd29ya19ldmVudDsKLSNkZWZpbmUgQVRMMUNfV09SS19FVkVOVF9SRVNFVCAJCTB4MDEKLSNkZWZpbmUgQVRMMUNfV09SS19FVkVOVF9MSU5LX0NIQU5HRQkweDAyCisJdW5zaWduZWQgbG9uZyB3b3JrX2V2ZW50OworI2RlZmluZQlBVEwxQ19XT1JLX0VWRU5UX1JFU0VUCQkwCisjZGVmaW5lCUFUTDFDX1dPUktfRVZFTlRfTElOS19DSEFOR0UJMQogCXUzMiBtc2dfZW5hYmxlOwogCiAJYm9vbCBoYXZlX21zaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYwppbmRleCA3ZDlkNTA2Li5hNmUxYzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfbWFpbi5jCkBAIC0zMjUsNyArMzI1LDcgQEAKIAkJfQogCX0KIAotCWFkYXB0ZXItPndvcmtfZXZlbnQgfD0gQVRMMUNfV09SS19FVkVOVF9MSU5LX0NIQU5HRTsKKwlzZXRfYml0KEFUTDFDX1dPUktfRVZFTlRfTElOS19DSEFOR0UsICZhZGFwdGVyLT53b3JrX2V2ZW50KTsKIAlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5jb21tb25fdGFzayk7CiB9CiAKQEAgLTMzNywyMCArMzM3LDE2IEBACiAJYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRsMWNfYWRhcHRlciwgY29tbW9uX3Rhc2spOwogCW5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAotCWlmIChhZGFwdGVyLT53b3JrX2V2ZW50ICYgQVRMMUNfV09SS19FVkVOVF9SRVNFVCkgewotCQlhZGFwdGVyLT53b3JrX2V2ZW50ICY9IH5BVEwxQ19XT1JLX0VWRU5UX1JFU0VUOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQVRMMUNfV09SS19FVkVOVF9SRVNFVCwgJmFkYXB0ZXItPndvcmtfZXZlbnQpKSB7CiAJCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKIAkJYXRsMWNfZG93bihhZGFwdGVyKTsKIAkJYXRsMWNfdXAoYWRhcHRlcik7CiAJCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKLQkJcmV0dXJuOwogCX0KIAotCWlmIChhZGFwdGVyLT53b3JrX2V2ZW50ICYgQVRMMUNfV09SS19FVkVOVF9MSU5LX0NIQU5HRSkgewotCQlhZGFwdGVyLT53b3JrX2V2ZW50ICY9IH5BVEwxQ19XT1JLX0VWRU5UX0xJTktfQ0hBTkdFOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQVRMMUNfV09SS19FVkVOVF9MSU5LX0NIQU5HRSwKKwkJJmFkYXB0ZXItPndvcmtfZXZlbnQpKQogCQlhdGwxY19jaGVja19saW5rX3N0YXR1cyhhZGFwdGVyKTsKLQl9Ci0JcmV0dXJuOwogfQogCiAKQEAgLTM2OSw3ICszNjUsNyBAQAogCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAogCS8qIERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0ICovCi0JYWRhcHRlci0+d29ya19ldmVudCB8PSBBVEwxQ19XT1JLX0VWRU5UX1JFU0VUOworCXNldF9iaXQoQVRMMUNfV09SS19FVkVOVF9SRVNFVCwgJmFkYXB0ZXItPndvcmtfZXZlbnQpOwogCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPmNvbW1vbl90YXNrKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jCmluZGV4IDFmZjAwMWEuLmIwYTcxZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9tYWluLmMKQEAgLTI1MDksNyArMjUwOSw3IEBACiAJLmlkX3RhYmxlID0gYXRsMWVfcGNpX3RibCwKIAkucHJvYmUgICAgPSBhdGwxZV9wcm9iZSwKIAkucmVtb3ZlICAgPSBfX2RldmV4aXRfcChhdGwxZV9yZW1vdmUpLAotCS8qIFBvd2VyIE1hbmFnbWVudCBIb29rcyAqLworCS8qIFBvd2VyIE1hbmFnZW1lbnQgSG9va3MgKi8KICNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZCAgPSBhdGwxZV9zdXNwZW5kLAogCS5yZXN1bWUgICA9IGF0bDFlX3Jlc3VtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5jIGIvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMKaW5kZXggOTM3ZWYxYS4uZTNjYmY0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMKKysrIGIvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMKQEAgLTE3MDEsNyArMTcwMSw3IEBACiAJLmlkX3RhYmxlID0gYXRsMl9wY2lfdGJsLAogCS5wcm9iZSAgICA9IGF0bDJfcHJvYmUsCiAJLnJlbW92ZSAgID0gX19kZXZleGl0X3AoYXRsMl9yZW1vdmUpLAotCS8qIFBvd2VyIE1hbmFnbWVudCBIb29rcyAqLworCS8qIFBvd2VyIE1hbmFnZW1lbnQgSG9va3MgKi8KIAkuc3VzcGVuZCAgPSBhdGwyX3N1c3BlbmQsCiAjaWZkZWYgQ09ORklHX1BNCiAJLnJlc3VtZSAgID0gYXRsMl9yZXN1bWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iY202M3h4X2VuZXQuYyBiL2RyaXZlcnMvbmV0L2JjbTYzeHhfZW5ldC5jCmluZGV4IGU5NGE5NjZhLi5jNDgxMDRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iY202M3h4X2VuZXQuYworKysgYi9kcml2ZXJzL25ldC9iY202M3h4X2VuZXQuYwpAQCAtNTk3LDcgKzU5Nyw3IEBACiB9CiAKIC8qCi0gKiBDaGFuZ2UgcnggbW9kZSAocHJvbWlzY291cy9hbGxtdWx0aSkgYW5kIHVwZGF0ZSBtdWx0aWNhc3QgbGlzdAorICogQ2hhbmdlIHJ4IG1vZGUgKHByb21pc2N1b3VzL2FsbG11bHRpKSBhbmQgdXBkYXRlIG11bHRpY2FzdCBsaXN0CiAgKi8KIHN0YXRpYyB2b2lkIGJjbV9lbmV0X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmUuaCBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmgKaW5kZXggZjgwM2M1OC4uMjM1M2VjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmUuaAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZS5oCkBAIC0xNTQsNyArMTU0LDcgQEAKIAl1MTYgbWluX2VxZDsJCS8qIGluIHVzZWNzICovCiAJdTE2IG1heF9lcWQ7CQkvKiBpbiB1c2VjcyAqLwogCXUxNiBjdXJfZXFkOwkJLyogaW4gdXNlY3MgKi8KLQl1OCAgbXNpeF92ZWNfaWR4OworCXU4ICBlcV9pZHg7CiAKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKIH07CkBAIC0yMTMsNyArMjEzLDcgQEAKIAogc3RydWN0IGJlX3J4X2NvbXBsX2luZm8gewogCXUzMiByc3NfaGFzaDsKLQl1MTYgdmlkOworCXUxNiB2bGFuX3RhZzsKIAl1MTYgcGt0X3NpemU7CiAJdTE2IHJ4cV9pZHg7CiAJdTE2IG1hY19pZDsKQEAgLTI5MSw3ICsyOTEsNyBAQAogCXUzMiBudW1fcnhfcXM7CiAJdTMyIGJpZ19wYWdlX3NpemU7CS8qIENvbXBvdW5kZWQgcGFnZSBzaXplIHNoYXJlZCBieSByeCB3cmJzICovCiAKLQl1OCBtc2l4X3ZlY19uZXh0X2lkeDsKKwl1OCBlcV9uZXh0X2lkeDsKIAlzdHJ1Y3QgYmVfZHJ2X3N0YXRzIGRydl9zdGF0czsKIAogCXN0cnVjdCB2bGFuX2dyb3VwICp2bGFuX2dycDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYwppbmRleCA1YTRhODdlNy4uOWRjOTM5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYwpAQCAtMTMyLDcgKzEzMiw3IEBACiAJCXN0cnVjdCBiZV9hc3luY19ldmVudF9ncnA1X3B2aWRfc3RhdGUgKmV2dCkKIHsKIAlpZiAoZXZ0LT5lbmFibGVkKQotCQlhZGFwdGVyLT5wdmlkID0gZXZ0LT50YWc7CisJCWFkYXB0ZXItPnB2aWQgPSBsZTE2X3RvX2NwdShldnQtPnRhZyk7CiAJZWxzZQogCQlhZGFwdGVyLT5wdmlkID0gMDsKIH0KQEAgLTEzMzEsNyArMTMzMSw3IEBACiAKIC8qCiAgKiBVc2VzIE1DQyBmb3IgdGhpcyBjb21tYW5kIGFzIGl0IG1heSBiZSBjYWxsZWQgaW4gQkggY29udGV4dAotICogKG1jID09IE5VTEwpID0+IG11bHRpY2FzdCBwcm9taXNjb3VzCisgKiAobWMgPT0gTlVMTCkgPT4gbXVsdGljYXN0IHByb21pc2N1b3VzCiAgKi8KIGludCBiZV9jbWRfbXVsdGljYXN0X3NldChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGlmX2lkLAogCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgYmVfZG1hX21lbSAqbWVtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCmluZGV4IGE3MTE2M2YuLjkxODdmYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKQEAgLTcwOCw3ICs3MDgsNyBAQAogCQlnb3RvIGRvbmU7CiAJfQogCi0JLyogQkUgd2FzIHByZXZpb3VzbHkgaW4gcHJvbWlzY291cyBtb2RlOyBkaXNhYmxlIGl0ICovCisJLyogQkUgd2FzIHByZXZpb3VzbHkgaW4gcHJvbWlzY3VvdXMgbW9kZTsgZGlzYWJsZSBpdCAqLwogCWlmIChhZGFwdGVyLT5wcm9taXNjdW91cykgewogCQlhZGFwdGVyLT5wcm9taXNjdW91cyA9IGZhbHNlOwogCQliZV9jbWRfcHJvbWlzY3VvdXNfY29uZmlnKGFkYXB0ZXIsIGFkYXB0ZXItPnBvcnRfbnVtLCAwKTsKQEAgLTEwMTgsNyArMTAxOCw4IEBACiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCXJldHVybjsKIAkJfQotCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBhZGFwdGVyLT52bGFuX2dycCwgcnhjcC0+dmlkKTsKKwkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgYWRhcHRlci0+dmxhbl9ncnAsCisJCQkJCXJ4Y3AtPnZsYW5fdGFnKTsKIAl9IGVsc2UgewogCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCX0KQEAgLTEwNzYsNyArMTA3Nyw4IEBACiAJaWYgKGxpa2VseSghcnhjcC0+dmxhbmYpKQogCQluYXBpX2dyb19mcmFncygmZXFfb2JqLT5uYXBpKTsKIAllbHNlCi0JCXZsYW5fZ3JvX2ZyYWdzKCZlcV9vYmotPm5hcGksIGFkYXB0ZXItPnZsYW5fZ3JwLCByeGNwLT52aWQpOworCQl2bGFuX2dyb19mcmFncygmZXFfb2JqLT5uYXBpLCBhZGFwdGVyLT52bGFuX2dycCwKKwkJCQlyeGNwLT52bGFuX3RhZyk7CiB9CiAKIHN0YXRpYyB2b2lkIGJlX3BhcnNlX3J4X2NvbXBsX3YxKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLApAQCAtMTEwMiw3ICsxMTA0LDggQEAKIAlyeGNwLT5wa3RfdHlwZSA9CiAJCUFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsX3YxLCBjYXN0X2VuYywgY29tcGwpOwogCXJ4Y3AtPnZ0bSA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsX3YxLCB2dG0sIGNvbXBsKTsKLQlyeGNwLT52aWQgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbF92MSwgdmxhbl90YWcsIGNvbXBsKTsKKwlyeGNwLT52bGFuX3RhZyA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsX3YxLCB2bGFuX3RhZywKKwkJCQkJY29tcGwpOwogfQogCiBzdGF0aWMgdm9pZCBiZV9wYXJzZV9yeF9jb21wbF92MChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKQEAgLTExMjgsNyArMTEzMSw4IEBACiAJcnhjcC0+cGt0X3R5cGUgPQogCQlBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbF92MCwgY2FzdF9lbmMsIGNvbXBsKTsKIAlyeGNwLT52dG0gPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbF92MCwgdnRtLCBjb21wbCk7Ci0JcnhjcC0+dmlkID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGxfdjAsIHZsYW5fdGFnLCBjb21wbCk7CisJcnhjcC0+dmxhbl90YWcgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbF92MCwgdmxhbl90YWcsCisJCQkJCWNvbXBsKTsKIH0KIAogc3RhdGljIHN0cnVjdCBiZV9yeF9jb21wbF9pbmZvICpiZV9yeF9jb21wbF9nZXQoc3RydWN0IGJlX3J4X29iaiAqcnhvKQpAQCAtMTE1NSw5ICsxMTU5LDExIEBACiAJCXJ4Y3AtPnZsYW5mID0gMDsKIAogCWlmICghbGFuY2VyX2NoaXAoYWRhcHRlcikpCi0JCXJ4Y3AtPnZpZCA9IHN3YWIxNihyeGNwLT52aWQpOworCQlyeGNwLT52bGFuX3RhZyA9IHN3YWIxNihyeGNwLT52bGFuX3RhZyk7CiAKLQlpZiAoKGFkYXB0ZXItPnB2aWQgPT0gcnhjcC0+dmlkKSAmJiAhYWRhcHRlci0+dmxhbl90YWdbcnhjcC0+dmlkXSkKKwlpZiAoKChhZGFwdGVyLT5wdmlkICYgVkxBTl9WSURfTUFTSykgPT0KKwkJKHJ4Y3AtPnZsYW5fdGFnICYgVkxBTl9WSURfTUFTSykpICYmCisJCSFhZGFwdGVyLT52bGFuX3RhZ1tyeGNwLT52bGFuX3RhZ10pCiAJCXJ4Y3AtPnZsYW5mID0gMDsKIAogCS8qIEFzIHRoZSBjb21wbCBoYXMgYmVlbiBwYXJzZWQsIHJlc2V0IGl0OyB3ZSB3b250IHRvdWNoIGl0IGFnYWluICovCkBAIC0xNDk3LDcgKzE1MDMsNyBAQAogCWlmIChiZV9jbWRfZXFfY3JlYXRlKGFkYXB0ZXIsIGVxLCBhZGFwdGVyLT50eF9lcS5jdXJfZXFkKSkKIAkJZ290byB0eF9lcV9mcmVlOwogCi0JYWRhcHRlci0+dHhfZXEubXNpeF92ZWNfaWR4ID0gYWRhcHRlci0+bXNpeF92ZWNfbmV4dF9pZHgrKzsKKwlhZGFwdGVyLT50eF9lcS5lcV9pZHggPSBhZGFwdGVyLT5lcV9uZXh0X2lkeCsrOwogCiAKIAkvKiBBbGxvYyBUWCBldGggY29tcGwgcXVldWUgKi8KQEAgLTE1OTAsNyArMTU5Niw3IEBACiAJCWlmIChyYykKIAkJCWdvdG8gZXJyOwogCi0JCXJ4by0+cnhfZXEubXNpeF92ZWNfaWR4ID0gYWRhcHRlci0+bXNpeF92ZWNfbmV4dF9pZHgrKzsKKwkJcnhvLT5yeF9lcS5lcV9pZHggPSBhZGFwdGVyLT5lcV9uZXh0X2lkeCsrOwogCiAJCS8qIENRICovCiAJCWNxID0gJnJ4by0+Y3E7CkBAIC0xNjY2LDExICsxNjcyLDExIEBACiAJCWlmICghaXNyKQogCQkJcmV0dXJuIElSUV9OT05FOwogCi0JCWlmICgoMSA8PCBhZGFwdGVyLT50eF9lcS5tc2l4X3ZlY19pZHggJiBpc3IpKQorCQlpZiAoKDEgPDwgYWRhcHRlci0+dHhfZXEuZXFfaWR4ICYgaXNyKSkKIAkJCWV2ZW50X2hhbmRsZShhZGFwdGVyLCAmYWRhcHRlci0+dHhfZXEpOwogCiAJCWZvcl9hbGxfcnhfcXVldWVzKGFkYXB0ZXIsIHJ4bywgaSkgewotCQkJaWYgKCgxIDw8IHJ4by0+cnhfZXEubXNpeF92ZWNfaWR4ICYgaXNyKSkKKwkJCWlmICgoMSA8PCByeG8tPnJ4X2VxLmVxX2lkeCAmIGlzcikpCiAJCQkJZXZlbnRfaGFuZGxlKGFkYXB0ZXIsICZyeG8tPnJ4X2VxKTsKIAkJfQogCX0KQEAgLTE4NzMsNiArMTg3OSw3IEBACiAJCWJlX2RldGVjdF9kdW1wX3VlKGFkYXB0ZXIpOwogCiByZXNjaGVkdWxlOgorCWFkYXB0ZXItPndvcmtfY291bnRlcisrOwogCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYWRhcHRlci0+d29yaywgbXNlY3NfdG9famlmZmllcygxMDAwKSk7CiB9CiAKQEAgLTE5NTEsNyArMTk1OCw3IEBACiBzdGF0aWMgaW5saW5lIGludCBiZV9tc2l4X3ZlY19nZXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkJCXN0cnVjdCBiZV9lcV9vYmogKmVxX29iaikKIHsKLQlyZXR1cm4gYWRhcHRlci0+bXNpeF9lbnRyaWVzW2VxX29iai0+bXNpeF92ZWNfaWR4XS52ZWN0b3I7CisJcmV0dXJuIGFkYXB0ZXItPm1zaXhfZW50cmllc1tlcV9vYmotPmVxX2lkeF0udmVjdG9yOwogfQogCiBzdGF0aWMgaW50IGJlX3JlcXVlc3RfaXJxKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLApAQCAtMjM0NSw2ICsyMzUyLDcgQEAKIAliZV9tY2NfcXVldWVzX2Rlc3Ryb3koYWRhcHRlcik7CiAJYmVfcnhfcXVldWVzX2Rlc3Ryb3koYWRhcHRlcik7CiAJYmVfdHhfcXVldWVzX2Rlc3Ryb3koYWRhcHRlcik7CisJYWRhcHRlci0+ZXFfbmV4dF9pZHggPSAwOwogCiAJaWYgKGJlX3BoeXNmbihhZGFwdGVyKSAmJiBhZGFwdGVyLT5zcmlvdl9lbmFibGVkKQogCQlmb3IgKHZmID0gMDsgdmYgPCBudW1fdmZzOyB2ZisrKQpAQCAtMzE0MSwxMiArMzE0OSwxNCBAQAogc3RhdGljIHZvaWQgYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9ICBhZGFwdGVyLT5uZXRkZXY7CiAKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCWlmICghYWRhcHRlcikKKwkJcmV0dXJuOworCisJaWYgKG5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkKIAkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhZGFwdGVyLT53b3JrKTsKIAotCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKwluZXRpZl9kZXZpY2VfZGV0YWNoKGFkYXB0ZXItPm5ldGRldik7CiAKIAliZV9jbWRfcmVzZXRfZnVuY3Rpb24oYWRhcHRlcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JuYS9iZmFfaW9jLmMgYi9kcml2ZXJzL25ldC9ibmEvYmZhX2lvYy5jCmluZGV4IDM0OTMzY2IuLjc1ODE1MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JuYS9iZmFfaW9jLmMKKysrIGIvZHJpdmVycy9uZXQvYm5hL2JmYV9pb2MuYwpAQCAtMzgsNiArMzgsOCBAQAogI2RlZmluZSBiZmFfaW9jX21hcF9wb3J0KF9faW9jKSAoKF9faW9jKS0+aW9jX2h3aWYtPmlvY19tYXBfcG9ydChfX2lvYykpCiAjZGVmaW5lIGJmYV9pb2Nfbm90aWZ5X2ZhaWwoX19pb2MpCQkJXAogCQkJKChfX2lvYyktPmlvY19od2lmLT5pb2Nfbm90aWZ5X2ZhaWwoX19pb2MpKQorI2RlZmluZSBiZmFfaW9jX3N5bmNfc3RhcnQoX19pb2MpICAgICAgICAgICAgICAgXAorCQkJKChfX2lvYyktPmlvY19od2lmLT5pb2Nfc3luY19zdGFydChfX2lvYykpCiAjZGVmaW5lIGJmYV9pb2Nfc3luY19qb2luKF9faW9jKQkJCVwKIAkJCSgoX19pb2MpLT5pb2NfaHdpZi0+aW9jX3N5bmNfam9pbihfX2lvYykpCiAjZGVmaW5lIGJmYV9pb2Nfc3luY19sZWF2ZShfX2lvYykJCQlcCkBAIC02MDIsNyArNjA0LDcgQEAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBJT0NQRl9FX1NFTUxPQ0tFRDoKIAkJaWYgKGJmYV9pb2NfZmlybXdhcmVfbG9jayhpb2MpKSB7Ci0JCQlpZiAoYmZhX2lvY19zeW5jX2NvbXBsZXRlKGlvYykpIHsKKwkJCWlmIChiZmFfaW9jX3N5bmNfc3RhcnQoaW9jKSkgewogCQkJCWlvY3BmLT5yZXRyeV9jb3VudCA9IDA7CiAJCQkJYmZhX2lvY19zeW5jX2pvaW4oaW9jKTsKIAkJCQliZmFfZnNtX3NldF9zdGF0ZShpb2NwZiwgYmZhX2lvY3BmX3NtX2h3aW5pdCk7CkBAIC0xMzE0LDcgKzEzMTYsNyBAQAogICogZXhlY3V0aW9uIGNvbnRleHQgKGRyaXZlci9iaW9zKSBtdXN0IG1hdGNoLgogICovCiBzdGF0aWMgYm9vbAotYmZhX2lvY19md3Zlcl92YWxpZChzdHJ1Y3QgYmZhX2lvYyAqaW9jKQorYmZhX2lvY19md3Zlcl92YWxpZChzdHJ1Y3QgYmZhX2lvYyAqaW9jLCB1MzIgYm9vdF9lbnYpCiB7CiAJc3RydWN0IGJmaV9pb2NfaW1hZ2VfaGRyIGZ3aGRyLCAqZHJ2X2Z3aGRyOwogCkBAIC0xMzI1LDcgKzEzMjcsNyBAQAogCWlmIChmd2hkci5zaWduYXR1cmUgIT0gZHJ2X2Z3aGRyLT5zaWduYXR1cmUpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmIChmd2hkci5leGVjICE9IGRydl9md2hkci0+ZXhlYykKKwlpZiAoc3dhYjMyKGZ3aGRyLnBhcmFtKSAhPSBib290X2VudikKIAkJcmV0dXJuIGZhbHNlOwogCiAJcmV0dXJuIGJmYV9ud19pb2NfZnd2ZXJfY21wKGlvYywgJmZ3aGRyKTsKQEAgLTEzNTIsOSArMTM1NCwxMiBAQAogewogCWVudW0gYmZpX2lvY19zdGF0ZSBpb2NfZndzdGF0ZTsKIAlib29sIGZ3dmFsaWQ7CisJdTMyIGJvb3RfZW52OwogCiAJaW9jX2Z3c3RhdGUgPSByZWFkbChpb2MtPmlvY19yZWdzLmlvY19md3N0YXRlKTsKIAorCWJvb3RfZW52ID0gQkZJX0JPT1RfTE9BREVSX09TOworCiAJaWYgKGZvcmNlKQogCQlpb2NfZndzdGF0ZSA9IEJGSV9JT0NfVU5JTklUOwogCkBAIC0xMzYyLDEwICsxMzY3LDEwIEBACiAJICogY2hlY2sgaWYgZmlybXdhcmUgaXMgdmFsaWQKIAkgKi8KIAlmd3ZhbGlkID0gKGlvY19md3N0YXRlID09IEJGSV9JT0NfVU5JTklUKSA/Ci0JCWZhbHNlIDogYmZhX2lvY19md3Zlcl92YWxpZChpb2MpOworCQlmYWxzZSA6IGJmYV9pb2NfZnd2ZXJfdmFsaWQoaW9jLCBib290X2Vudik7CiAKIAlpZiAoIWZ3dmFsaWQpIHsKLQkJYmZhX2lvY19ib290KGlvYywgQkZJX0JPT1RfVFlQRV9OT1JNQUwsIGlvYy0+cGNpZGV2LmRldmljZV9pZCk7CisJCWJmYV9pb2NfYm9vdChpb2MsIEJGSV9CT09UX1RZUEVfTk9STUFMLCBib290X2Vudik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEzOTYsNyArMTQwMSw3IEBACiAJLyoqCiAJICogSW5pdGlhbGl6ZSB0aGUgaC93IGZvciBhbnkgb3RoZXIgc3RhdGVzLgogCSAqLwotCWJmYV9pb2NfYm9vdChpb2MsIEJGSV9CT09UX1RZUEVfTk9STUFMLCBpb2MtPnBjaWRldi5kZXZpY2VfaWQpOworCWJmYV9pb2NfYm9vdChpb2MsIEJGSV9CT09UX1RZUEVfTk9STUFMLCBib290X2Vudik7CiB9CiAKIHZvaWQKQEAgLTE1MDYsNyArMTUxMSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkCiBiZmFfaW9jX2Rvd25sb2FkX2Z3KHN0cnVjdCBiZmFfaW9jICppb2MsIHUzMiBib290X3R5cGUsCi0JCSAgICB1MzIgYm9vdF9wYXJhbSkKKwkJICAgIHUzMiBib290X2VudikKIHsKIAl1MzIgKmZ3aW1nOwogCXUzMiBwZ251bSwgcGdvZmY7CkBAIC0xNTU4LDEwICsxNTYzLDEwIEBACiAJLyoKIAkgKiBTZXQgYm9vdCB0eXBlIGFuZCBib290IHBhcmFtIGF0IHRoZSBlbmQuCiAJKi8KLQl3cml0ZWwoKHN3YWIzMihzd2FiMzIoYm9vdF90eXBlKSkpLCAoKGlvYy0+aW9jX3JlZ3Muc21lbV9wYWdlX3N0YXJ0KQorCXdyaXRlbChib290X3R5cGUsICgoaW9jLT5pb2NfcmVncy5zbWVtX3BhZ2Vfc3RhcnQpCiAJCQkrIChCRklfQk9PVF9UWVBFX09GRikpKTsKLQl3cml0ZWwoKHN3YWIzMihzd2FiMzIoYm9vdF9wYXJhbSkpKSwgKChpb2MtPmlvY19yZWdzLnNtZW1fcGFnZV9zdGFydCkKLQkJCSsgKEJGSV9CT09UX1BBUkFNX09GRikpKTsKKwl3cml0ZWwoYm9vdF9lbnYsICgoaW9jLT5pb2NfcmVncy5zbWVtX3BhZ2Vfc3RhcnQpCisJCQkrIChCRklfQk9PVF9MT0FERVJfT0ZGKSkpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTcyMSw3ICsxNzI2LDcgQEAKICAqIGFzIHRoZSBlbnRyeSB2ZWN0b3IuCiAgKi8KIHN0YXRpYyB2b2lkCi1iZmFfaW9jX2Jvb3Qoc3RydWN0IGJmYV9pb2MgKmlvYywgdTMyIGJvb3RfdHlwZSwgdTMyIGJvb3RfcGFyYW0pCitiZmFfaW9jX2Jvb3Qoc3RydWN0IGJmYV9pb2MgKmlvYywgdTMyIGJvb3RfdHlwZSwgdTMyIGJvb3RfZW52KQogewogCXZvaWQgX19pb21lbSAqcmI7CiAKQEAgLTE3MzQsNyArMTczOSw3IEBACiAJICogSW5pdGlhbGl6ZSBJT0Mgc3RhdGUgb2YgYWxsIGZ1bmN0aW9ucyBvbiBhIGNoaXAgcmVzZXQuCiAJICovCiAJcmIgPSBpb2MtPnBjaWRldi5wY2lfYmFyX2t2YTsKLQlpZiAoYm9vdF9wYXJhbSA9PSBCRklfQk9PVF9UWVBFX01FTVRFU1QpIHsKKwlpZiAoYm9vdF90eXBlID09IEJGSV9CT09UX1RZUEVfTUVNVEVTVCkgewogCQl3cml0ZWwoQkZJX0lPQ19NRU1URVNULCAocmIgKyBCRkFfSU9DMF9TVEFURV9SRUcpKTsKIAkJd3JpdGVsKEJGSV9JT0NfTUVNVEVTVCwgKHJiICsgQkZBX0lPQzFfU1RBVEVfUkVHKSk7CiAJfSBlbHNlIHsKQEAgLTE3NDMsNyArMTc0OCw3IEBACiAJfQogCiAJYmZhX2lvY19tc2dmbHVzaChpb2MpOwotCWJmYV9pb2NfZG93bmxvYWRfZncoaW9jLCBib290X3R5cGUsIGJvb3RfcGFyYW0pOworCWJmYV9pb2NfZG93bmxvYWRfZncoaW9jLCBib290X3R5cGUsIGJvb3RfZW52KTsKIAogCS8qKgogCSAqIEVuYWJsZSBpbnRlcnJ1cHRzIGp1c3QgYmVmb3JlIHN0YXJ0aW5nIExQVQpAQCAtMjIxOSwxMyArMjIyNCw5IEBACiBzdGF0aWMgdm9pZAogYmZhX2lvY19yZWNvdmVyKHN0cnVjdCBiZmFfaW9jICppb2MpCiB7Ci0JdTE2IGJkZjsKLQotCWJkZiA9IChpb2MtPnBjaWRldi5wY2lfc2xvdCA8PCA4IHwgaW9jLT5wY2lkZXYucGNpX2Z1bmMgPDwgMyB8Ci0JCQkJCWlvYy0+cGNpZGV2LmRldmljZV9pZCk7Ci0KLQlwcl9jcml0KCJGaXJtd2FyZSBoZWFydGJlYXQgZmFpbHVyZSBhdCAlZCIsIGJkZik7Ci0JQlVHX09OKDEpOworCXByX2NyaXQoIkhlYXJ0IEJlYXQgb2YgSU9DIGhhcyBmYWlsZWRcbiIpOworCWJmYV9pb2Nfc3RhdHMoaW9jLCBpb2NfaGJmYWlscyk7CisJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfSEJGQUlMKTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JuYS9iZmFfaW9jLmggYi9kcml2ZXJzL25ldC9ibmEvYmZhX2lvYy5oCmluZGV4IGU0OTc0YmMuLmJkNDhhYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JuYS9iZmFfaW9jLmgKKysrIGIvZHJpdmVycy9uZXQvYm5hL2JmYV9pb2MuaApAQCAtMTk0LDYgKzE5NCw3IEBACiAJCQkJCWJvb2wgbXNpeCk7CiAJdm9pZAkJKCppb2Nfbm90aWZ5X2ZhaWwpCShzdHJ1Y3QgYmZhX2lvYyAqaW9jKTsKIAl2b2lkCQkoKmlvY19vd25lcnNoaXBfcmVzZXQpCShzdHJ1Y3QgYmZhX2lvYyAqaW9jKTsKKwlib29sCQkoKmlvY19zeW5jX3N0YXJ0KSAgICAgICAoc3RydWN0IGJmYV9pb2MgKmlvYyk7CiAJdm9pZAkJKCppb2Nfc3luY19qb2luKQkoc3RydWN0IGJmYV9pb2MgKmlvYyk7CiAJdm9pZAkJKCppb2Nfc3luY19sZWF2ZSkJKHN0cnVjdCBiZmFfaW9jICppb2MpOwogCXZvaWQJCSgqaW9jX3N5bmNfYWNrKQkJKHN0cnVjdCBiZmFfaW9jICppb2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm5hL2JmYV9pb2NfY3QuYyBiL2RyaXZlcnMvbmV0L2JuYS9iZmFfaW9jX2N0LmMKaW5kZXggNDY5OTk3Yy4uODdhZWNkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm5hL2JmYV9pb2NfY3QuYworKysgYi9kcml2ZXJzL25ldC9ibmEvYmZhX2lvY19jdC5jCkBAIC00MSw2ICs0MSw3IEBACiBzdGF0aWMgdm9pZCBiZmFfaW9jX2N0X2lzcl9tb2RlX3NldChzdHJ1Y3QgYmZhX2lvYyAqaW9jLCBib29sIG1zaXgpOwogc3RhdGljIHZvaWQgYmZhX2lvY19jdF9ub3RpZnlfZmFpbChzdHJ1Y3QgYmZhX2lvYyAqaW9jKTsKIHN0YXRpYyB2b2lkIGJmYV9pb2NfY3Rfb3duZXJzaGlwX3Jlc2V0KHN0cnVjdCBiZmFfaW9jICppb2MpOworc3RhdGljIGJvb2wgYmZhX2lvY19jdF9zeW5jX3N0YXJ0KHN0cnVjdCBiZmFfaW9jICppb2MpOwogc3RhdGljIHZvaWQgYmZhX2lvY19jdF9zeW5jX2pvaW4oc3RydWN0IGJmYV9pb2MgKmlvYyk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jX2N0X3N5bmNfbGVhdmUoc3RydWN0IGJmYV9pb2MgKmlvYyk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jX2N0X3N5bmNfYWNrKHN0cnVjdCBiZmFfaW9jICppb2MpOwpAQCAtNjMsNiArNjQsNyBAQAogCW53X2h3aWZfY3QuaW9jX2lzcl9tb2RlX3NldCA9IGJmYV9pb2NfY3RfaXNyX21vZGVfc2V0OwogCW53X2h3aWZfY3QuaW9jX25vdGlmeV9mYWlsID0gYmZhX2lvY19jdF9ub3RpZnlfZmFpbDsKIAlud19od2lmX2N0LmlvY19vd25lcnNoaXBfcmVzZXQgPSBiZmFfaW9jX2N0X293bmVyc2hpcF9yZXNldDsKKwlud19od2lmX2N0LmlvY19zeW5jX3N0YXJ0ID0gYmZhX2lvY19jdF9zeW5jX3N0YXJ0OwogCW53X2h3aWZfY3QuaW9jX3N5bmNfam9pbiA9IGJmYV9pb2NfY3Rfc3luY19qb2luOwogCW53X2h3aWZfY3QuaW9jX3N5bmNfbGVhdmUgPSBiZmFfaW9jX2N0X3N5bmNfbGVhdmU7CiAJbndfaHdpZl9jdC5pb2Nfc3luY19hY2sgPSBiZmFfaW9jX2N0X3N5bmNfYWNrOwpAQCAtMzQ1LDYgKzM0NywzMiBAQAogLyoqCiAgKiBTeW5jaHJvbml6ZWQgSU9DIGZhaWx1cmUgcHJvY2Vzc2luZyByb3V0aW5lcwogICovCitzdGF0aWMgYm9vbAorYmZhX2lvY19jdF9zeW5jX3N0YXJ0KHN0cnVjdCBiZmFfaW9jICppb2MpCit7CisJdTMyIHIzMiA9IHJlYWRsKGlvYy0+aW9jX3JlZ3MuaW9jX2ZhaWxfc3luYyk7CisJdTMyIHN5bmNfcmVxZCA9IGJmYV9pb2NfY3RfZ2V0X3N5bmNfcmVxZChyMzIpOworCisJLyoKKwkgKiBEcml2ZXIgbG9hZCB0aW1lLiAgSWYgdGhlIHN5bmMgcmVxdWlyZWQgYml0IGZvciB0aGlzIFBDSSBmbgorCSAqIGlzIHNldCwgaXQgaXMgZHVlIHRvIGFuIHVuY2xlYW4gZXhpdCBieSB0aGUgZHJpdmVyIGZvciB0aGlzCisJICogUENJIGZuIGluIHRoZSBwcmV2aW91cyBpbmNhcm5hdGlvbi4gV2hvZXZlciBjb21lcyBoZXJlIGZpcnN0CisJICogc2hvdWxkIGNsZWFuIGl0IHVwLCBubyBtYXR0ZXIgd2hpY2ggUENJIGZuLgorCSAqLworCisJaWYgKHN5bmNfcmVxZCAmIGJmYV9pb2NfY3Rfc3luY19wb3MoaW9jKSkgeworCQl3cml0ZWwoMCwgaW9jLT5pb2NfcmVncy5pb2NfZmFpbF9zeW5jKTsKKwkJd3JpdGVsKDEsIGlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3JlZyk7CisJCXdyaXRlbChCRklfSU9DX1VOSU5JVCwgaW9jLT5pb2NfcmVncy5pb2NfZndzdGF0ZSk7CisJCXdyaXRlbChCRklfSU9DX1VOSU5JVCwgaW9jLT5pb2NfcmVncy5hbHRfaW9jX2Z3c3RhdGUpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gYmZhX2lvY19jdF9zeW5jX2NvbXBsZXRlKGlvYyk7Cit9CisvKioKKyAqIFN5bmNocm9uaXplZCBJT0MgZmFpbHVyZSBwcm9jZXNzaW5nIHJvdXRpbmVzCisgKi8KIHN0YXRpYyB2b2lkCiBiZmFfaW9jX2N0X3N5bmNfam9pbihzdHJ1Y3QgYmZhX2lvYyAqaW9jKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm5hL2JmaS5oIGIvZHJpdmVycy9uZXQvYm5hL2JmaS5oCmluZGV4IGE5NzM5NjguLjYwNTAzNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JuYS9iZmkuaAorKysgYi9kcml2ZXJzL25ldC9ibmEvYmZpLmgKQEAgLTE4NCwxMiArMTg0LDE0IEBACiAjZGVmaW5lIEJGSV9JT0NfTVNHTEVOX01BWAkzMgkvKiAzMiBieXRlcyAqLwogCiAjZGVmaW5lIEJGSV9CT09UX1RZUEVfT0ZGCQk4Ci0jZGVmaW5lIEJGSV9CT09UX1BBUkFNX09GRgkJMTIKKyNkZWZpbmUgQkZJX0JPT1RfTE9BREVSX09GRgkJMTIKIAotI2RlZmluZSBCRklfQk9PVF9UWVBFX05PUk1BTCAJCTAJLyogcGFyYW0gaXMgZGV2aWNlIGlkICovCisjZGVmaW5lIEJGSV9CT09UX1RZUEVfTk9STUFMIAkJMAogI2RlZmluZQlCRklfQk9PVF9UWVBFX0ZMQVNICQkxCiAjZGVmaW5lCUJGSV9CT09UX1RZUEVfTUVNVEVTVAkJMgogCisjZGVmaW5lIEJGSV9CT09UX0xPQURFUl9PUwkJMAorCiAjZGVmaW5lIEJGSV9CT09UX01FTVRFU1RfUkVTX0FERFIgICAweDkwMAogI2RlZmluZSBCRklfQk9PVF9NRU1URVNUX1JFU19TSUcgICAgMHhBMEExQTJBMwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibmEvYm5hX2h3LmggYi9kcml2ZXJzL25ldC9ibmEvYm5hX2h3LmgKaW5kZXggODA2YjIyNC4uNmNiODk2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm5hL2JuYV9ody5oCisrKyBiL2RyaXZlcnMvbmV0L2JuYS9ibmFfaHcuaApAQCAtODk3LDcgKzg5Nyw3IEBACiAgKiBDYXRhcHVsdCBSU1MgVGFibGUgQmFzZSBPZmZzZXQgQWRkcmVzcwogICoKICAqIEV4aXN0cyBpbiBSQUQgbWVtb3J5IHNwYWNlLgotICogRWFjaCBlbnRyeSBpcyAzNTIgYml0cywgYnV0IGFsbGlnbmVkIG9uCisgKiBFYWNoIGVudHJ5IGlzIDM1MiBiaXRzLCBidXQgYWxpZ25lZCBvbgogICogNjQgYnl0ZSAoNTEyIGJpdCkgYm91bmRhcnkuIEFjY2Vzc2VkCiAgKiA0IGJ5dGUgd29yZHMsIHRoZSB3aG9sZSBlbnRyeSBjYW4gYmUKICAqIGJyb2tlbiBpbnRvIDExIHdvcmQgYWNjZXNzZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibmEvYm5hZC5jIGIvZHJpdmVycy9uZXQvYm5hL2JuYWQuYwppbmRleCA5ZjM1NmQ1Li44ZTZjZWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibmEvYm5hZC5jCisrKyBiL2RyaXZlcnMvbmV0L2JuYS9ibmFkLmMKQEAgLTE4MzcsNyArMTgzNyw2IEBACiAJLyogSW5pdGlhbGl6ZSB0aGUgUnggZXZlbnQgaGFuZGxlcnMgKi8KIAlyeF9jYmZuLnJjYl9zZXR1cF9jYmZuID0gYm5hZF9jYl9yY2Jfc2V0dXA7CiAJcnhfY2Jmbi5yY2JfZGVzdHJveV9jYmZuID0gYm5hZF9jYl9yY2JfZGVzdHJveTsKLQlyeF9jYmZuLnJjYl9kZXN0cm95X2NiZm4gPSBOVUxMOwogCXJ4X2NiZm4uY2NiX3NldHVwX2NiZm4gPSBibmFkX2NiX2NjYl9zZXR1cDsKIAlyeF9jYmZuLmNjYl9kZXN0cm95X2NiZm4gPSBibmFkX2NiX2NjYl9kZXN0cm95OwogCXJ4X2NiZm4ucnhfY2xlYW51cF9jYmZuID0gYm5hZF9jYl9yeF9jbGVhbnVwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54Mi5jIGIvZHJpdmVycy9uZXQvYm54Mi5jCmluZGV4IDhlNmQ2MTguLmQ4MzgzYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDIuYworKysgYi9kcml2ZXJzL25ldC9ibngyLmMKQEAgLTg0MTMsNiArODQxMyw4IEBACiAKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCisJZGVsX3RpbWVyX3N5bmMoJmJwLT50aW1lcik7CisKIAlpZiAoYnAtPm1pcHNfZmlybXdhcmUpCiAJCXJlbGVhc2VfZmlybXdhcmUoYnAtPm1pcHNfZmlybXdhcmUpOwogCWlmIChicC0+cnYycF9maXJtd2FyZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4LmggYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeC5oCmluZGV4IGI3ZmY4N2IuLmUwZmNhNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4LmgKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnguaApAQCAtMTIyMCw3ICsxMjIwLDcgQEAKIAlzdHJ1Y3QgYm54MnhfZGNieF9wb3J0X3BhcmFtcwkJZGNieF9wb3J0X3BhcmFtczsKIAlpbnQJCQkJCWRjYl92ZXJzaW9uOwogCi0JLyogRENCWCBOZWdvdGF0aW9uIHJlc3VsdHMgKi8KKwkvKiBEQ0JYIE5lZ290aWF0aW9uIHJlc3VsdHMgKi8KIAlzdHJ1Y3QgZGNieF9mZWF0dXJlcwkJCWRjYnhfbG9jYWxfZmVhdDsKIAl1MzIJCQkJCWRjYnhfZXJyb3I7CiAJdTMyCQkJCQlwZW5kaW5nX21heDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Ntbi5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmMKaW5kZXggZTgzYWM2ZC4uMTY1ODFkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmMKQEAgLTIwMTksMTUgKzIwMTksMjMgQEAKIHN0YXRpYyBpbmxpbmUgIHU4IGJueDJ4X3NldF9wYmRfY3N1bV9lMihzdHJ1Y3QgYm54MnggKmJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXUzMiAqcGFyc2luZ19kYXRhLCB1MzIgeG1pdF90eXBlKQogewotCSpwYXJzaW5nX2RhdGEgfD0gKCh0Y3BfaGRybGVuKHNrYikvNCkgPDwKLQkJRVRIX1RYX1BBUlNFX0JEX0UyX1RDUF9IRFJfTEVOR1RIX0RXX1NISUZUKSAmCi0JCUVUSF9UWF9QQVJTRV9CRF9FMl9UQ1BfSERSX0xFTkdUSF9EVzsKKwkqcGFyc2luZ19kYXRhIHw9CisJCQkoKCgodTggKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpIC0gc2tiLT5kYXRhKSA+PiAxKSA8PAorCQkJRVRIX1RYX1BBUlNFX0JEX0UyX1RDUF9IRFJfU1RBUlRfT0ZGU0VUX1dfU0hJRlQpICYKKwkJCUVUSF9UWF9QQVJTRV9CRF9FMl9UQ1BfSERSX1NUQVJUX09GRlNFVF9XOwogCi0JKnBhcnNpbmdfZGF0YSB8PSAoKCgodTggKil0Y3BfaGRyKHNrYikgLSBza2ItPmRhdGEpIC8gMikgPDwKLQkJRVRIX1RYX1BBUlNFX0JEX0UyX1RDUF9IRFJfU1RBUlRfT0ZGU0VUX1dfU0hJRlQpICYKLQkJRVRIX1RYX1BBUlNFX0JEX0UyX1RDUF9IRFJfU1RBUlRfT0ZGU0VUX1c7CisJaWYgKHhtaXRfdHlwZSAmIFhNSVRfQ1NVTV9UQ1ApIHsKKwkJKnBhcnNpbmdfZGF0YSB8PSAoKHRjcF9oZHJsZW4oc2tiKSAvIDQpIDw8CisJCQlFVEhfVFhfUEFSU0VfQkRfRTJfVENQX0hEUl9MRU5HVEhfRFdfU0hJRlQpICYKKwkJCUVUSF9UWF9QQVJTRV9CRF9FMl9UQ1BfSERSX0xFTkdUSF9EVzsKIAotCXJldHVybiBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpICsgdGNwX2hkcmxlbihza2IpIC0gc2tiLT5kYXRhOworCQlyZXR1cm4gc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSArIHRjcF9oZHJsZW4oc2tiKSAtIHNrYi0+ZGF0YTsKKwl9IGVsc2UKKwkJLyogV2Ugc3VwcG9ydCBjaGVja3N1bSBvZmZsb2FkIGZvciBUQ1AgYW5kIFVEUCBvbmx5LgorCQkgKiBObyBuZWVkIHRvIHBhc3MgdGhlIFVEUCBoZWFkZXIgbGVuZ3RoIC0gaXQncyBhIGNvbnN0YW50LgorCQkgKi8KKwkJcmV0dXJuIHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYikgKworCQkJCXNpemVvZihzdHJ1Y3QgdWRwaGRyKSAtIHNrYi0+ZGF0YTsKIH0KIAogLyoqCkBAIC0yMDQzLDcgKzIwNTEsNyBAQAogCXN0cnVjdCBldGhfdHhfcGFyc2VfYmRfZTF4ICpwYmQsCiAJdTMyIHhtaXRfdHlwZSkKIHsKLQl1OCBobGVuID0gKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpIC0gc2tiLT5kYXRhKSAvIDI7CisJdTggaGxlbiA9IChza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtIHNrYi0+ZGF0YSkgPj4gMTsKIAogCS8qIGZvciBub3cgTlMgZmxhZyBpcyBub3QgdXNlZCBpbiBMaW51eCAqLwogCXBiZC0+Z2xvYmFsX2RhdGEgPQpAQCAtMjA1MSw5ICsyMDU5LDE1IEBACiAJCQkgRVRIX1RYX1BBUlNFX0JEX0UxWF9MTENfU05BUF9FTl9TSElGVCkpOwogCiAJcGJkLT5pcF9obGVuX3cgPSAoc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSAtCi0JCQlza2JfbmV0d29ya19oZWFkZXIoc2tiKSkgLyAyOworCQkJc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpID4+IDE7CiAKLQlobGVuICs9IHBiZC0+aXBfaGxlbl93ICsgdGNwX2hkcmxlbihza2IpIC8gMjsKKwlobGVuICs9IHBiZC0+aXBfaGxlbl93OworCisJLyogV2Ugc3VwcG9ydCBjaGVja3N1bSBvZmZsb2FkIGZvciBUQ1AgYW5kIFVEUCBvbmx5ICovCisJaWYgKHhtaXRfdHlwZSAmIFhNSVRfQ1NVTV9UQ1ApCisJCWhsZW4gKz0gdGNwX2hkcmxlbihza2IpIC8gMjsKKwllbHNlCisJCWhsZW4gKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpIC8gMjsKIAogCXBiZC0+dG90YWxfaGxlbl93ID0gY3B1X3RvX2xlMTYoaGxlbik7CiAJaGxlbiA9IGhsZW4qMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2V0aHRvb2wuYwppbmRleCBmNTA1MDE1Li44OWNiOTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZXRodG9vbC5jCkBAIC0yMTE0LDE5ICsyMTE0LDE4IEBACiAJZm9yIChpID0gMDsgaSA8IChkYXRhICogMik7IGkrKykgewogCQlpZiAoKGkgJSAyKSA9PSAwKQogCQkJYm54Mnhfc2V0X2xlZCgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycywKLQkJCQkgICAgICBMRURfTU9ERV9PUEVSLCBTUEVFRF8xMDAwKTsKKwkJCQkgICAgICBMRURfTU9ERV9PTiwgU1BFRURfMTAwMCk7CiAJCWVsc2UKIAkJCWJueDJ4X3NldF9sZWQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMsCi0JCQkJICAgICAgTEVEX01PREVfT0ZGLCAwKTsKKwkJCQkgICAgICBMRURfTU9ERV9GUk9OVF9QQU5FTF9PRkYsIDApOwogCiAJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDUwMCk7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCWJyZWFrOwogCX0KIAotCWlmIChicC0+bGlua192YXJzLmxpbmtfdXApCi0JCWJueDJ4X3NldF9sZWQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMsIExFRF9NT0RFX09QRVIsCi0JCQkgICAgICBicC0+bGlua192YXJzLmxpbmVfc3BlZWQpOworCWJueDJ4X3NldF9sZWQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMsCisJCSAgICAgIExFRF9NT0RFX09QRVIsIGJwLT5saW5rX3ZhcnMubGluZV9zcGVlZCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2hzaS5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaHNpLmgKaW5kZXggYmU1MDNjYy4uZGFjMWJmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaHNpLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaHNpLmgKQEAgLTMwMTksNyArMzAxOSw3IEBACiAKIAogLyoKLSAqIGNvbW1vbiBmbGFnIHRvIGluZGljYXRlIGV4aXN0YW5jZSBvZiBUUEEuCisgKiBjb21tb24gZmxhZyB0byBpbmRpY2F0ZSBleGlzdGVuY2Ugb2YgVFBBLgogICovCiBzdHJ1Y3QgdHN0b3JtX2V0aF90cGFfZXhpc3QgewogI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbGluay5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbGluay5jCmluZGV4IGYyZjM2N2QuLjk3NGVmMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2xpbmsuYworKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9saW5rLmMKQEAgLTI4MjMsNyArMjgyMyw3IEBACiAJCQkJICAgICBzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKIHsKIAl1MTYgY250LCBjdHJsOwotCS8qIFdhaXQgZm9yIHNvZnQgcmVzZXQgdG8gZ2V0IGNsZWFyZWQgdXB0byAxIHNlYyAqLworCS8qIFdhaXQgZm9yIHNvZnQgcmVzZXQgdG8gZ2V0IGNsZWFyZWQgdXAgdG8gMSBzZWMgKi8KIAlmb3IgKGNudCA9IDA7IGNudCA8IDEwMDA7IGNudCsrKSB7CiAJCWJueDJ4X2NsNDVfcmVhZChicCwgcGh5LAogCQkJCU1ESU9fUE1BX0RFVkFELCBNRElPX1BNQV9SRUdfQ1RSTCwgJmN0cmwpOwpAQCAtNDE0MSw3ICs0MTQxLDcgQEAKIAkJCXZhbCA9ICgxPDw1KTsKIAkJCS8qCiAJCQkgKiBOb3RlIHRoYXQgMi41RyB3b3JrcyBvbmx5IHdoZW4gdXNlZCB3aXRoIDFHCi0JCQkgKiBhZHZlcnRpc21lbnQKKwkJCSAqIGFkdmVydGlzZW1lbnQKIAkJCSAqLwogCQl9IGVsc2UKIAkJCXZhbCA9ICgxPDw1KTsKQEAgLTQxNTEsNyArNDE1MSw3IEBACiAJCQlQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzEwRykKIAkJCXZhbCB8PSAoMTw8Nyk7CiAKLQkJLyogTm90ZSB0aGF0IDIuNUcgd29ya3Mgb25seSB3aGVuIHVzZWQgd2l0aCAxRyBhZHZlcnRpc21lbnQgKi8KKwkJLyogTm90ZSB0aGF0IDIuNUcgd29ya3Mgb25seSB3aGVuIHVzZWQgd2l0aCAxRyBhZHZlcnRpc2VtZW50ICovCiAJCWlmIChwaHktPnNwZWVkX2NhcF9tYXNrICYKIAkJCShQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzFHIHwKIAkJCSBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzJfNUcpKQpAQCAtNTIzMiwxNCArNTIzMiwxNCBAQAogCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksCiAJCQkJIE1ESU9fUE1BX0RFVkFELCBNRElPX1BNQV9SRUdfTEFTSV9DVFJMLCAxKTsKIAl9IGVsc2UgewotCQkvKiBGb3JjZSAxR2JwcyB1c2luZyBhdXRvbmVnIHdpdGggMUcgYWR2ZXJ0aXNtZW50ICovCisJCS8qIEZvcmNlIDFHYnBzIHVzaW5nIGF1dG9uZWcgd2l0aCAxRyBhZHZlcnRpc2VtZW50ICovCiAKIAkJLyogQWxsb3cgQ0wzNyB0aHJvdWdoIENMNzMgKi8KIAkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDg3MDYgQXV0b05lZ1xuIik7CiAJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwKIAkJCQkgTURJT19BTl9ERVZBRCwgTURJT19BTl9SRUdfQ0wzN19DTDczLCAweDA0MGMpOwogCi0JCS8qIEVuYWJsZSBGdWxsLUR1cGxleCBhZHZlcnRpc21lbnQgb24gQ0wzNyAqLworCQkvKiBFbmFibGUgRnVsbC1EdXBsZXggYWR2ZXJ0aXNlbWVudCBvbiBDTDM3ICovCiAJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwKIAkJCQkgTURJT19BTl9ERVZBRCwgTURJT19BTl9SRUdfQ0wzN19GQ19MUCwgMHgwMDIwKTsKIAkJLyogRW5hYmxlIENMMzcgQU4gKi8KQEAgLTYyNjksNyArNjI2OSw3IEBACiAKIAlzd2l0Y2ggKGFjdHVhbF9waHlfc2VsZWN0aW9uKSB7CiAJY2FzZSBQT1JUX0hXX0NGR19QSFlfU0VMRUNUSU9OX0hBUkRXQVJFX0RFRkFVTFQ6Ci0JCS8qIERvIG5vdGhpbmcuIEVzc2VudGlhbHkgdGhpcyBpcyBsaWtlIHRoZSBwcmlvcml0eSBjb3BwZXIgKi8KKwkJLyogRG8gbm90aGluZy4gRXNzZW50aWFsbHkgdGhpcyBpcyBsaWtlIHRoZSBwcmlvcml0eSBjb3BwZXIgKi8KIAkJYnJlYWs7CiAJY2FzZSBQT1JUX0hXX0NGR19QSFlfU0VMRUNUSU9OX0ZJUlNUX1BIWV9QUklPUklUWToKIAkJdmFsIHw9IE1ESU9fQ1RMX1JFR184NDgyM19NRURJQV9QUklPUklUWV9DT1BQRVI7CkBAIC03NzY1LDcgKzc3NjUsNyBAQAogCVJFR19XUihicCwgTklHX1JFR19OSUdfRU1BQzBfRU4gKyBwb3J0KjQsIDApOwogCiAJbXNsZWVwKDEwKTsKLQkvKiBUaGUgUEhZIHJlc2V0IGlzIGNvbnRyb2xlZCBieSBHUElPIDEKKwkvKiBUaGUgUEhZIHJlc2V0IGlzIGNvbnRyb2xsZWQgYnkgR1BJTyAxCiAJICogSG9sZCBpdCBhcyB2YXJzIGxvdwogCSAqLwogCSAvKiBjbGVhciBsaW5rIGxlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbWFpbi5jCmluZGV4IDMyZTY0Y2M4Li5hOTdhNGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbWFpbi5jCkBAIC0zNzAyLDcgKzM3MDIsNyBAQAogCWlmICgoaHdfY29ucyAmIEVRX0RFU0NfTUFYX1BBR0UpID09IEVRX0RFU0NfTUFYX1BBR0UpCiAJCWh3X2NvbnMrKzsKIAotCS8qIFRoaXMgZnVuY3Rpb24gbWF5IG5ldmVyIHJ1biBpbiBwYXJyYWxlbCB3aXRoIGl0c2VsZiBmb3IgYQorCS8qIFRoaXMgZnVuY3Rpb24gbWF5IG5ldmVyIHJ1biBpbiBwYXJhbGxlbCB3aXRoIGl0c2VsZiBmb3IgYQogCSAqIHNwZWNpZmljIGJwLCB0aHVzIHRoZXJlIGlzIG5vIG5lZWQgaW4gInBhaXJlZCIgcmVhZCBtZW1vcnkKIAkgKiBiYXJyaWVyIGhlcmUuCiAJICovCkBAIC01MDg5LDcgKzUwODksNyBAQAogCQkvKiBTdGVwIDE6IHNldCB6ZXJvZXMgdG8gYWxsIGlsdCBwYWdlIGVudHJpZXMgd2l0aCB2YWxpZCBiaXQgb24KIAkJICogU3RlcCAyOiBzZXQgdGhlIHRpbWVycyBmaXJzdC9sYXN0IGlsdCBlbnRyeSB0byBwb2ludAogCQkgKiB0byB0aGUgZW50aXJlIHJhbmdlIHRvIHByZXZlbnQgSUxUIHJhbmdlIGVycm9yIGZvciAzcmQvNHRoCi0JCSAqIHZuaWMJKHRoaXMgY29kZSBhc3N1bWVzIGV4aXN0YW5jZSBvZiB0aGUgdm5pYykKKwkJICogdm5pYwkodGhpcyBjb2RlIGFzc3VtZXMgZXhpc3RlbmNlIG9mIHRoZSB2bmljKQogCQkgKgogCQkgKiBib3RoIHN0ZXBzIHBlcmZvcm1lZCBieSBjYWxsIHRvIGJueDJ4X2lsdF9jbGllbnRfaW5pdF9vcCgpCiAJCSAqIHdpdGggZHVtbXkgVE0gY2xpZW50CkBAIC04Njg1LDcgKzg2ODUsNyBAQAogCQkJCUUxSF9GVU5DX01BWCAqIHNpemVvZihzdHJ1Y3QgZHJ2X2Z1bmNfbWIpOwogCQkvKgogCQkgKiBnZXQgbWYgY29uZmlndXJhdGlvbjoKLQkJICogMS4gZXhpc3RhbmNlIG9mIE1GIGNvbmZpZ3VyYXRpb24KKwkJICogMS4gZXhpc3RlbmNlIG9mIE1GIGNvbmZpZ3VyYXRpb24KIAkJICogMi4gTUFDIGFkZHJlc3MgbXVzdCBiZSBsZWdhbCAoY2hlY2sgb25seSB1cHBlciBieXRlcykKIAkJICogICAgZm9yICBTd2l0Y2gtSW5kZXBlbmRlbnQgbW9kZTsKIAkJICogICAgT1ZMQU4gbXVzdCBiZSBsZWdhbCBmb3IgU3dpdGNoLURlcGVuZGVudCBtb2RlCkBAIC04NzI3LDcgKzg3MjcsNyBAQAogCQkJZGVmYXVsdDoKIAkJCQkvKiBVbmtub3duIGNvbmZpZ3VyYXRpb246IHJlc2V0IG1mX2NvbmZpZyAqLwogCQkJCWJwLT5tZl9jb25maWdbdm5dID0gMDsKLQkJCQlEUChORVRJRl9NU0dfUFJPQkUsICJVbmtvd24gTUYgbW9kZSAweCV4XG4iLAorCQkJCURQKE5FVElGX01TR19QUk9CRSwgIlVua25vd24gTUYgbW9kZSAweCV4XG4iLAogCQkJCSAgIHZhbCk7CiAJCQl9CiAJCX0KQEAgLTk3NzcsNyArOTc3Nyw3IEBACiAKICNlbmRpZgogCi0JLyogQ29uZmlndXJlIGludGVydXB0IG1vZGU6IHRyeSB0byBlbmFibGUgTVNJLVgvTVNJIGlmCisJLyogQ29uZmlndXJlIGludGVycnVwdCBtb2RlOiB0cnkgdG8gZW5hYmxlIE1TSS1YL01TSSBpZgogCSAqIG5lZWRlZCwgc2V0IGJwLT5udW1fcXVldWVzIGFwcHJvcHJpYXRlbHkuCiAJICovCiAJYm54Mnhfc2V0X2ludF9tb2RlKGJwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3JlZy5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfcmVnLmgKaW5kZXggMWM4OWYxOS4uMTUwOWEyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfcmVnLmgKQEAgLTE3NSw5ICsxNzUsOSBAQAogICAgdGhlIGluaXRpYWwgY3JlZGl0IHZhbHVlOyByZWFkIHJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGNyZWRpdAogICAgY291bnRlci4gTXVzdCBiZSBpbml0aWFsaXplZCB0byAxIGF0IHN0YXJ0LXVwLiAqLwogI2RlZmluZSBDQ01fUkVHX0NGQ19JTklUX0NSRAkJCQkJIDB4ZDAyMDQKLS8qIFtSVyAyXSBBdXhpbGxhcnkgY291bnRlciBmbGFnIFEgbnVtYmVyIDEuICovCisvKiBbUlcgMl0gQXV4aWxpYXJ5IGNvdW50ZXIgZmxhZyBRIG51bWJlciAxLiAqLwogI2RlZmluZSBDQ01fUkVHX0NOVF9BVVgxX1EJCQkJCSAweGQwMGM4Ci0vKiBbUlcgMl0gQXV4aWxsYXJ5IGNvdW50ZXIgZmxhZyBRIG51bWJlciAyLiAqLworLyogW1JXIDJdIEF1eGlsaWFyeSBjb3VudGVyIGZsYWcgUSBudW1iZXIgMi4gKi8KICNkZWZpbmUgQ0NNX1JFR19DTlRfQVVYMl9RCQkJCQkgMHhkMDBjYwogLyogW1JXIDI4XSBUaGUgQ00gaGVhZGVyIHZhbHVlIGZvciBRTSByZXF1ZXN0IChwcmltYXJ5KS4gKi8KICNkZWZpbmUgQ0NNX1JFR19DUU1fQ0NNX0hEUl9QCQkJCQkgMHhkMDA4YwpAQCAtNDU3LDEzICs0NTcsMTMgQEAKICNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9NT0RFXzkgCQkJCSAweGMyMWRjCiAvKiBbUlcgMTNdIFRoZSBzdGFydCBhZGRyZXNzIGluIHRoZSBpbnRlcm5hbCBSQU0gZm9yIHRoZSBjZmNfcnNwIGxjaWQgKi8KICNkZWZpbmUgQ1NETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSCQkJCSAweGMyMDA4Ci0vKiBbUlcgMTZdIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjb21wZXRpb24gY291bnRlciAjMCAqLworLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGxldGlvbiBjb3VudGVyICMwICovCiAjZGVmaW5lIENTRE1fUkVHX0NNUF9DT1VOVEVSX01BWDAJCQkJIDB4YzIwMWMKLS8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBldGlvbiBjb3VudGVyICMxICovCisvKiBbUlcgMTZdIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjb21wbGV0aW9uIGNvdW50ZXIgIzEgKi8KICNkZWZpbmUgQ1NETV9SRUdfQ01QX0NPVU5URVJfTUFYMQkJCQkgMHhjMjAyMAotLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGV0aW9uIGNvdW50ZXIgIzIgKi8KKy8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBsZXRpb24gY291bnRlciAjMiAqLwogI2RlZmluZSBDU0RNX1JFR19DTVBfQ09VTlRFUl9NQVgyCQkJCSAweGMyMDI0Ci0vKiBbUlcgMTZdIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjb21wZXRpb24gY291bnRlciAjMyAqLworLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGxldGlvbiBjb3VudGVyICMzICovCiAjZGVmaW5lIENTRE1fUkVHX0NNUF9DT1VOVEVSX01BWDMJCQkJIDB4YzIwMjgKIC8qIFtSVyAxM10gVGhlIHN0YXJ0IGFkZHJlc3MgaW4gdGhlIGludGVybmFsIFJBTSBmb3IgdGhlIGNvbXBsZXRpb24KICAgIGNvdW50ZXJzLiAqLwpAQCAtODUxLDcgKzg1MSw3IEBACiAjZGVmaW5lIElHVV9SRUdfQVRUTl9NU0dfQUREUl9MCQkJCSAweDEzMDEyMAogLyogW1IgNF0gRGVidWc6IFszXSAtIGF0dGVudGlvbiB3cml0ZSBkb25lIG1lc3NhZ2UgaXMgcGVuZGluZyAoMC1ubyBwZW5kaW5nOwogICogMS1wZW5kaW5nKS4gWzI6MF0gPSBQRklELiBQZW5kaW5nIG1lYW5zIGF0dGVudGlvbiBtZXNzYWdlIHdhcyBzZW50OyBidXQKLSAqIHdyaXRlIGRvbmUgZGlkbnQgcmVjZWl2ZS4gKi8KKyAqIHdyaXRlIGRvbmUgZGlkbid0IHJlY2VpdmUuICovCiAjZGVmaW5lIElHVV9SRUdfQVRUTl9XUklURV9ET05FX1BFTkRJTkcJCQkgMHgxMzAwMzAKICNkZWZpbmUgSUdVX1JFR19CTE9DS19DT05GSUdVUkFUSU9OCQkJCSAweDEzMDAwMAogI2RlZmluZSBJR1VfUkVHX0NPTU1BTkRfUkVHXzMyTFNCX0RBVEEJCQkJIDB4MTMwMTI0CkBAIC04NjIsNyArODYyLDcgQEAKICNkZWZpbmUgSUdVX1JFR19DU1RPUk1fVFlQRV8wX1NCX0NMRUFOVVAJCQkgMHgxMzAyMDAKIC8qIFtSIDVdIERlYnVnOiBjdHJsX2ZzbSAqLwogI2RlZmluZSBJR1VfUkVHX0NUUkxfRlNNCQkJCQkgMHgxMzAwNjQKLS8qIFtSIDFdIGRhdGEgYXZhaWxibGUgZm9yIGVycm9yIG1lbW9yeS4gSWYgdGhpcyBiaXQgaXMgY2xlYXIgZG8gbm90IHJlZAorLyogW1IgMV0gZGF0YSBhdmFpbGFibGUgZm9yIGVycm9yIG1lbW9yeS4gSWYgdGhpcyBiaXQgaXMgY2xlYXIgZG8gbm90IHJlZAogICogZnJvbSBlcnJvcl9oYW5kbGluZ19tZW1vcnkuICovCiAjZGVmaW5lIElHVV9SRUdfRVJST1JfSEFORExJTkdfREFUQV9WQUxJRAkJCSAweDEzMDEzMAogLyogW1JXIDExXSBQYXJpdHkgbWFzayByZWdpc3RlciAjMCByZWFkL3dyaXRlICovCkBAIC0zMDE1LDcgKzMwMTUsNyBAQAogICAgYmxvY2suIFNob3VsZCBiZSB1c2VkIGZvciBjbG9zZSB0aGUgZ2F0ZXMuICovCiAjZGVmaW5lIFBYUF9SRUdfSFNUX0RJU0NBUkRfRE9PUkJFTExTCQkJCSAweDEwMzBhNAogLyogW1IgMV0gZGVidWcgb25seTogJzEnIG1lYW5zIHRoaXMgUFNXSFNUIGlzIGRpc2NhcmRpbmcgZG9vcmJlbGxzLiBUaGlzIGJpdAotICAgc2hvdWxkIHVwZGF0ZSBhY2NvcmluZyB0byAnaHN0X2Rpc2NhcmRfZG9vcmJlbGxzJyByZWdpc3RlciB3aGVuIHRoZSBzdGF0ZQorICAgc2hvdWxkIHVwZGF0ZSBhY2NvcmRpbmcgdG8gJ2hzdF9kaXNjYXJkX2Rvb3JiZWxscycgcmVnaXN0ZXIgd2hlbiB0aGUgc3RhdGUKICAgIG1hY2hpbmUgaXMgaWRsZSAqLwogI2RlZmluZSBQWFBfUkVHX0hTVF9ESVNDQVJEX0RPT1JCRUxMU19TVEFUVVMJCQkgMHgxMDMwYTAKIC8qIFtSVyAxXSBXaGVuIDE7IG5ldyBpbnRlcm5hbCB3cml0ZXMgYXJyaXZpbmcgdG8gdGhlIGJsb2NrIGFyZSBkaXNjYXJkZWQuCkBAIC0zMDIzLDcgKzMwMjMsNyBAQAogI2RlZmluZSBQWFBfUkVHX0hTVF9ESVNDQVJEX0lOVEVSTkFMX1dSSVRFUwkJCSAweDEwMzBhOAogLyogW1IgNl0gZGVidWcgb25seTogQSBiaXQgbWFzayBmb3IgYWxsIFBTV0hTVCBpbnRlcm5hbCB3cml0ZSBjbGllbnRzLiAnMScKICAgIG1lYW5zIHRoaXMgUFNXSFNUIGlzIGRpc2NhcmRpbmcgaW5wdXRzIGZyb20gdGhpcyBjbGllbnQuIEVhY2ggYml0IHNob3VsZAotICAgdXBkYXRlIGFjY29yaW5nIHRvICdoc3RfZGlzY2FyZF9pbnRlcm5hbF93cml0ZXMnIHJlZ2lzdGVyIHdoZW4gdGhlIHN0YXRlCisgICB1cGRhdGUgYWNjb3JkaW5nIHRvICdoc3RfZGlzY2FyZF9pbnRlcm5hbF93cml0ZXMnIHJlZ2lzdGVyIHdoZW4gdGhlIHN0YXRlCiAgICBtYWNoaW5lIGlzIGlkbGUuICovCiAjZGVmaW5lIFBYUF9SRUdfSFNUX0RJU0NBUkRfSU5URVJOQUxfV1JJVEVTX1NUQVRVUwkJIDB4MTAzMDljCiAvKiBbV0IgMTYwXSBVc2VkIGZvciBpbml0aWFsaXphdGlvbiBvZiB0aGUgaW5ib3VuZCBpbnRlcnJ1cHRzIG1lbW9yeSAqLwpAQCAtMzgyMiwxMyArMzgyMiwxMyBAQAogI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMQkJCQkJIDB4NDIwYmMKIC8qIFtSVyAxM10gVGhlIHN0YXJ0IGFkZHJlc3MgaW4gdGhlIGludGVybmFsIFJBTSBmb3IgdGhlIGNmY19yc3AgbGNpZCAqLwogI2RlZmluZSBUU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIJCQkJIDB4NDIwMDgKLS8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBldGlvbiBjb3VudGVyICMwICovCisvKiBbUlcgMTZdIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjb21wbGV0aW9uIGNvdW50ZXIgIzAgKi8KICNkZWZpbmUgVFNETV9SRUdfQ01QX0NPVU5URVJfTUFYMAkJCQkgMHg0MjAxYwotLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGV0aW9uIGNvdW50ZXIgIzEgKi8KKy8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBsZXRpb24gY291bnRlciAjMSAqLwogI2RlZmluZSBUU0RNX1JFR19DTVBfQ09VTlRFUl9NQVgxCQkJCSAweDQyMDIwCi0vKiBbUlcgMTZdIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjb21wZXRpb24gY291bnRlciAjMiAqLworLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGxldGlvbiBjb3VudGVyICMyICovCiAjZGVmaW5lIFRTRE1fUkVHX0NNUF9DT1VOVEVSX01BWDIJCQkJIDB4NDIwMjQKLS8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBldGlvbiBjb3VudGVyICMzICovCisvKiBbUlcgMTZdIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjb21wbGV0aW9uIGNvdW50ZXIgIzMgKi8KICNkZWZpbmUgVFNETV9SRUdfQ01QX0NPVU5URVJfTUFYMwkJCQkgMHg0MjAyOAogLyogW1JXIDEzXSBUaGUgc3RhcnQgYWRkcmVzcyBpbiB0aGUgaW50ZXJuYWwgUkFNIGZvciB0aGUgY29tcGxldGlvbgogICAgY291bnRlcnMuICovCkBAIC00Mjg0LDEzICs0Mjg0LDEzIEBACiAjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfVF82CQkJCQkgMHhjNDBkMAogLyogW1JXIDEzXSBUaGUgc3RhcnQgYWRkcmVzcyBpbiB0aGUgaW50ZXJuYWwgUkFNIGZvciB0aGUgY2ZjX3JzcCBsY2lkICovCiAjZGVmaW5lIFVTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUgkJCQkgMHhjNDAwOAotLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGV0aW9uIGNvdW50ZXIgIzAgKi8KKy8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBsZXRpb24gY291bnRlciAjMCAqLwogI2RlZmluZSBVU0RNX1JFR19DTVBfQ09VTlRFUl9NQVgwCQkJCSAweGM0MDFjCi0vKiBbUlcgMTZdIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjb21wZXRpb24gY291bnRlciAjMSAqLworLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGxldGlvbiBjb3VudGVyICMxICovCiAjZGVmaW5lIFVTRE1fUkVHX0NNUF9DT1VOVEVSX01BWDEJCQkJIDB4YzQwMjAKLS8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBldGlvbiBjb3VudGVyICMyICovCisvKiBbUlcgMTZdIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjb21wbGV0aW9uIGNvdW50ZXIgIzIgKi8KICNkZWZpbmUgVVNETV9SRUdfQ01QX0NPVU5URVJfTUFYMgkJCQkgMHhjNDAyNAotLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGV0aW9uIGNvdW50ZXIgIzMgKi8KKy8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBsZXRpb24gY291bnRlciAjMyAqLwogI2RlZmluZSBVU0RNX1JFR19DTVBfQ09VTlRFUl9NQVgzCQkJCSAweGM0MDI4CiAvKiBbUlcgMTNdIFRoZSBzdGFydCBhZGRyZXNzIGluIHRoZSBpbnRlcm5hbCBSQU0gZm9yIHRoZSBjb21wbGV0aW9uCiAgICBjb3VudGVycy4gKi8KQEAgLTQ3OTgsMTMgKzQ3OTgsMTMgQEAKICNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9NT0RFXzEgCQkJCSAweDE2NjFiYwogLyogW1JXIDEzXSBUaGUgc3RhcnQgYWRkcmVzcyBpbiB0aGUgaW50ZXJuYWwgUkFNIGZvciB0aGUgY2ZjX3JzcCBsY2lkICovCiAjZGVmaW5lIFhTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUgkJCQkgMHgxNjYwMDgKLS8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBldGlvbiBjb3VudGVyICMwICovCisvKiBbUlcgMTZdIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjb21wbGV0aW9uIGNvdW50ZXIgIzAgKi8KICNkZWZpbmUgWFNETV9SRUdfQ01QX0NPVU5URVJfTUFYMAkJCQkgMHgxNjYwMWMKLS8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBldGlvbiBjb3VudGVyICMxICovCisvKiBbUlcgMTZdIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjb21wbGV0aW9uIGNvdW50ZXIgIzEgKi8KICNkZWZpbmUgWFNETV9SRUdfQ01QX0NPVU5URVJfTUFYMQkJCQkgMHgxNjYwMjAKLS8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBldGlvbiBjb3VudGVyICMyICovCisvKiBbUlcgMTZdIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjb21wbGV0aW9uIGNvdW50ZXIgIzIgKi8KICNkZWZpbmUgWFNETV9SRUdfQ01QX0NPVU5URVJfTUFYMgkJCQkgMHgxNjYwMjQKLS8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBldGlvbiBjb3VudGVyICMzICovCisvKiBbUlcgMTZdIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjb21wbGV0aW9uIGNvdW50ZXIgIzMgKi8KICNkZWZpbmUgWFNETV9SRUdfQ01QX0NPVU5URVJfTUFYMwkJCQkgMHgxNjYwMjgKIC8qIFtSVyAxM10gVGhlIHN0YXJ0IGFkZHJlc3MgaW4gdGhlIGludGVybmFsIFJBTSBmb3IgdGhlIGNvbXBsZXRpb24KICAgIGNvdW50ZXJzLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jCmluZGV4IDQ5NGJmOTYuLjMxOTEyZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKQEAgLTE0ODIsOCArMTQ4MiwxMSBAQAogCiBzdGF0aWMgaW50IGFnZ19kZXZpY2VfdXAoY29uc3Qgc3RydWN0IGFnZ3JlZ2F0b3IgKmFnZykKIHsKLQlyZXR1cm4gKG5ldGlmX3J1bm5pbmcoYWdnLT5zbGF2ZS0+ZGV2KSAmJgotCQluZXRpZl9jYXJyaWVyX29rKGFnZy0+c2xhdmUtPmRldikpOworCXN0cnVjdCBwb3J0ICpwb3J0ID0gYWdnLT5sYWdfcG9ydHM7CisJaWYgKCFwb3J0KQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gKG5ldGlmX3J1bm5pbmcocG9ydC0+c2xhdmUtPmRldikgJiYKKwkJbmV0aWZfY2Fycmllcl9vayhwb3J0LT5zbGF2ZS0+ZGV2KSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5oIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5oCmluZGV4IGIyOGJhZmYuLjAxYjhhNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuaAorKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmgKQEAgLTM5LDcgKzM5LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgbWFjX2FkZHIgewogCXU4IG1hY19hZGRyX3ZhbHVlW0VUSF9BTEVOXTsKLX0gbWFjX2FkZHJfdDsKK30gX19wYWNrZWQgbWFjX2FkZHJfdDsKIAogZW51bSB7CiAJQk9ORF9BRF9TVEFCTEUgPSAwLApAQCAtMTM0LDEyICsxMzQsMTIgQEAKIAl1OCB0bHZfdHlwZV90ZXJtaW5hdG9yOwkgICAgIC8vID0gdGVybWluYXRvcgogCXU4IHRlcm1pbmF0b3JfbGVuZ3RoOwkgICAgIC8vID0gMAogCXU4IHJlc2VydmVkXzUwWzUwXTsJICAgICAvLyA9IDAKLX0gbGFjcGR1X3Q7Cit9IF9fcGFja2VkIGxhY3BkdV90OwogCiB0eXBlZGVmIHN0cnVjdCBsYWNwZHVfaGVhZGVyIHsKIAlzdHJ1Y3QgZXRoaGRyIGhkcjsKIAlzdHJ1Y3QgbGFjcGR1IGxhY3BkdTsKLX0gbGFjcGR1X2hlYWRlcl90OworfSBfX3BhY2tlZCBsYWNwZHVfaGVhZGVyX3Q7CiAKIC8vIE1hcmtlciBQcm90b2NvbCBEYXRhIFVuaXQoUERVKSBzdHJ1Y3R1cmUoNDMuNS4zLjIgaW4gdGhlIDgwMi4zYWQgc3RhbmRhcmQpCiB0eXBlZGVmIHN0cnVjdCBib25kX21hcmtlciB7CkBAIC0xNTUsMTIgKzE1NSwxMiBAQAogCXU4IHRsdl90eXBlX3Rlcm1pbmF0b3I7CSAgICAgLy8gID0gMHgwMAogCXU4IHRlcm1pbmF0b3JfbGVuZ3RoOwkgICAgIC8vICA9IDB4MDAKIAl1OCByZXNlcnZlZF85MFs5MF07CSAgICAgLy8gID0gMAotfSBib25kX21hcmtlcl90OworfSBfX3BhY2tlZCBib25kX21hcmtlcl90OwogCiB0eXBlZGVmIHN0cnVjdCBib25kX21hcmtlcl9oZWFkZXIgewogCXN0cnVjdCBldGhoZHIgaGRyOwogCXN0cnVjdCBib25kX21hcmtlciBtYXJrZXI7Ci19IGJvbmRfbWFya2VyX2hlYWRlcl90OworfSBfX3BhY2tlZCBib25kX21hcmtlcl9oZWFkZXJfdDsKIAogI3ByYWdtYSBwYWNrKCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCmluZGV4IDliYzVkZTMuLmJhNzE1ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogCWJvbmRfaW5mby0+dHhfaGFzaHRibCA9IG5ld19oYXNodGJsOwogCiAJZm9yIChpID0gMDsgaSA8IFRMQl9IQVNIX1RBQkxFX1NJWkU7IGkrKykgewotCQl0bGJfaW5pdF90YWJsZV9lbnRyeSgmYm9uZF9pbmZvLT50eF9oYXNodGJsW2ldLCAxKTsKKwkJdGxiX2luaXRfdGFibGVfZW50cnkoJmJvbmRfaW5mby0+dHhfaGFzaHRibFtpXSwgMCk7CiAJfQogCiAJX3VubG9ja190eF9oYXNodGJsKGJvbmQpOwpAQCAtNzAxLDcgKzcwMSw3IEBACiAJCSAqLwogCQlybGJfY2hvb3NlX2NoYW5uZWwoc2tiLCBib25kKTsKIAotCQkvKiBUaGUgQVJQIHJlbHB5IHBhY2tldHMgbXVzdCBiZSBkZWxheWVkIHNvIHRoYXQKKwkJLyogVGhlIEFSUCByZXBseSBwYWNrZXRzIG11c3QgYmUgZGVsYXllZCBzbyB0aGF0CiAJCSAqIHRoZXkgY2FuIGNhbmNlbCBvdXQgdGhlIGluZmx1ZW5jZSBvZiB0aGUgQVJQIHJlcXVlc3QuCiAJCSAqLwogCQlib25kLT5hbGJfaW5mby5ybGJfdXBkYXRlX2RlbGF5X2NvdW50ZXIgPSBSTEJfVVBEQVRFX0RFTEFZOwpAQCAtMTA0Miw3ICsxMDQyLDcgQEAKICAqCiAgKiBJZiB0aGUgcGVybWFuZW50IGh3IGFkZHJlc3Mgb2YgQHNsYXZlIGlzIEBib25kJ3MgaHcgYWRkcmVzcywgd2UgbmVlZCB0bwogICogZmluZCBhIGRpZmZlcmVudCBodyBhZGRyZXNzIHRvIGdpdmUgQHNsYXZlLCB0aGF0IGlzbid0IGluIHVzZSBieSBhbnkgb3RoZXIKLSAqIHNsYXZlIGluIHRoZSBib25kLiBUaGlzIGFkZHJlc3MgbXVzdCBiZSwgb2YgY291cnNlLCBvbmUgb2YgdGhlIHByZW1hbmVudAorICogc2xhdmUgaW4gdGhlIGJvbmQuIFRoaXMgYWRkcmVzcyBtdXN0IGJlLCBvZiBjb3Vyc2UsIG9uZSBvZiB0aGUgcGVybWFuZW50CiAgKiBhZGRyZXNzZXMgb2YgdGhlIG90aGVyIHNsYXZlcy4KICAqCiAgKiBXZSBnbyBvdmVyIHRoZSBzbGF2ZSBsaXN0LCBhbmQgZm9yIGVhY2ggc2xhdmUgdGhlcmUgd2UgY29tcGFyZSBpdHMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuaCBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuaAppbmRleCA0YjNlMzU4Li44Y2E3MTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmgKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5oCkBAIC03NSw4ICs3NSw4IEBACiAJCQkJICogZ2F2ZSB0aGlzIGVudHJ5IGluZGV4LgogCQkJCSAqLwogCXUzMiB0eF9ieXRlczsJCS8qIEVhY2ggQ2xpZW50IGFjY3VtdWxhdGVzIHRoZSBCeXRlc1R4IHRoYXQKLQkJCQkgKiB3ZXJlIHRyYW5taXR0ZWQgdG8gaXQsIGFuZCBhZnRlciBlYWNoCi0JCQkJICogQ2FsbEJhY2sgdGhlIExvYWRIaXN0b3J5IGlzIGRldmlkZWQKKwkJCQkgKiB3ZXJlIHRyYW5zbWl0dGVkIHRvIGl0LCBhbmQgYWZ0ZXIgZWFjaAorCQkJCSAqIENhbGxCYWNrIHRoZSBMb2FkSGlzdG9yeSBpcyBkaXZpZGVkCiAJCQkJICogYnkgdGhlIGJhbGFuY2UgaW50ZXJ2YWwKIAkJCQkgKi8KIAl1MzIgbG9hZF9oaXN0b3J5OwkvKiBUaGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBhbW91bnQgb2YgQnl0ZXMKQEAgLTEyMiw3ICsxMjIsNiBAQAogfTsKIAogc3RydWN0IGFsYl9ib25kX2luZm8gewotCXN0cnVjdCB0aW1lcl9saXN0CWFsYl90aW1lcjsKIAlzdHJ1Y3QgdGxiX2NsaWVudF9pbmZvCSp0eF9oYXNodGJsOyAvKiBEeW5hbWljYWxseSBhbGxvY2F0ZWQgKi8KIAlzcGlubG9ja190CQl0eF9oYXNodGJsX2xvY2s7CiAJdTMyCQkJdW5iYWxhbmNlZF9sb2FkOwpAQCAtMTQwLDcgKzEzOSw2IEBACiAJc3RydWN0IHNsYXZlCQkqbmV4dF9yeF9zbGF2ZTsvKiBuZXh0IHNsYXZlIHRvIGJlIGFzc2lnbmVkCiAJCQkJCQkqIHRvIGEgbmV3IHJ4IGNsaWVudCBmb3IKIAkJCQkJCSovCi0JdTMyCQkJcmxiX2ludGVydmFsX2NvdW50ZXI7CiAJdTgJCQlwcmltYXJ5X2lzX3Byb21pc2M7CSAgIC8qIGJvb2xlYW4gKi8KIAl1MzIJCQlybGJfcHJvbWlzY190aW1lb3V0X2NvdW50ZXI7LyogY291bnRzIHByaW1hcnkKIAkJCQkJCQkgICAgICogcHJvbWlzY3VpdHkgdGltZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FpZi9jYWlmX3NobWNvcmUuYyBiL2RyaXZlcnMvbmV0L2NhaWYvY2FpZl9zaG1jb3JlLmMKaW5kZXggODA1MTExNi4uNzMxYWExMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FpZi9jYWlmX3NobWNvcmUuYworKysgYi9kcml2ZXJzL25ldC9jYWlmL2NhaWZfc2htY29yZS5jCkBAIC01OTEsNyArNTkxLDcgQEAKIAkJCShOUl9UWF9CVUYgKiBUWF9CVUZfU1ogKyBOUl9SWF9CVUYgKiBSWF9CVUZfU1opKSB7CiAKIAkJcHJfd2FybigiRVJST1IsIEFtb3VudCBvZiBhdmFpbGFibGUiCi0JCQkJIiBQaHlzLiBTSE0gY2Fubm90IGFjY29tb2RhdGUgY3VycmVudCBTSE0gIgorCQkJCSIgUGh5cy4gU0hNIGNhbm5vdCBhY2NvbW1vZGF0ZSBjdXJyZW50IFNITSAiCiAJCQkJImRyaXZlciBjb25maWd1cmF0aW9uLCBCYWlsaW5nIG91dCAuLi5cbiIpOwogCQlmcmVlX25ldGRldihwc2htX2Rldi0+cHNobV9uZXRkZXYpOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NhaWYvY2FpZl9zcGkuYyBiL2RyaXZlcnMvbmV0L2NhaWYvY2FpZl9zcGkuYwppbmRleCAyMGRhMTk5Li41N2U2MzkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYWlmL2NhaWZfc3BpLmMKKysrIGIvZHJpdmVycy9uZXQvY2FpZi9jYWlmX3NwaS5jCkBAIC0zOTcsNyArMzk3LDcgQEAKIAlpbnQgcGt0cyA9IDA7CiAKIAkvKgotCSAqIERlY29tbWl0IHByZXZpb3VzbHkgY29tbWl0ZWQgZnJhbWVzLgorCSAqIERlY29tbWl0IHByZXZpb3VzbHkgY29tbWl0dGVkIGZyYW1lcy4KIAkgKiBza2JfcXVldWVfc3BsaWNlX3RhaWwoJmNmc3BpLT5jaGVhZCwmY2ZzcGktPnFoZWFkKQogCSAqLwogCXdoaWxlIChza2JfcGVlaygmY2ZzcGktPmNoZWFkKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FpZi9jYWlmX3NwaV9zbGF2ZS5jIGIvZHJpdmVycy9uZXQvY2FpZi9jYWlmX3NwaV9zbGF2ZS5jCmluZGV4IDFiOTk0M2EuLmIwMDllMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NhaWYvY2FpZl9zcGlfc2xhdmUuYworKysgYi9kcml2ZXJzL25ldC9jYWlmL2NhaWZfc3BpX3NsYXZlLmMKQEAgLTk4LDcgKzk4LDcgQEAKIAogCQkJY2ZzcGlfZGJnX3N0YXRlKGNmc3BpLCBDRlNQSV9TVEFURV9GRVRDSF9QS1QpOwogCi0JCQkvKiBDb3B5IGNvbW1pdGVkIFNQSSBmcmFtZXMgYWZ0ZXIgdGhlIFNQSSBpbmRpY2F0aW9uLiAqLworCQkJLyogQ29weSBjb21taXR0ZWQgU1BJIGZyYW1lcyBhZnRlciB0aGUgU1BJIGluZGljYXRpb24uICovCiAJCQlwdHIgPSAodTggKikgY2ZzcGktPnhmZXIudmFfdHg7CiAJCQlwdHIgKz0gU1BJX0lORF9TWjsKIAkJCWxlbiA9IGNmc3BpX3htaXRmcm0oY2ZzcGksIHB0ciwgY2ZzcGktPnR4X2NwY2tfbGVuKTsKQEAgLTE1OCw3ICsxNTgsNyBAQAogCiAJCWNmc3BpX2RiZ19zdGF0ZShjZnNwaSwgQ0ZTUElfU1RBVEVfU0lHX0FDVElWRSk7CiAKLQkJLyogU2lnbmFsIHRoYXQgd2UgYXJlIHJlYWR5IHRvIHJlY2lldmUgZGF0YS4gKi8KKwkJLyogU2lnbmFsIHRoYXQgd2UgYXJlIHJlYWR5IHRvIHJlY2VpdmUgZGF0YS4gKi8KIAkJY2ZzcGktPmRldi0+c2lnX3hmZXIodHJ1ZSwgY2ZzcGktPmRldik7CiAKIAkJY2ZzcGlfZGJnX3N0YXRlKGNmc3BpLCBDRlNQSV9TVEFURV9XQUlUX1hGRVJfRE9ORSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vYXQ5MV9jYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jCmluZGV4IDU3ZDJmZmIuLjc0ZWZiNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jCkBAIC00MTYsNyArNDE2LDcgQEAKIAogCXN0YXRzLT50eF9ieXRlcyArPSBjZi0+Y2FuX2RsYzsKIAotCS8qIF9OT1RFXzogc3Vic3RyYWN0IEFUOTFfTUJfVFhfRklSU1Qgb2Zmc2V0IGZyb20gbWIhICovCisJLyogX05PVEVfOiBzdWJ0cmFjdCBBVDkxX01CX1RYX0ZJUlNUIG9mZnNldCBmcm9tIG1iISAqLwogCWNhbl9wdXRfZWNob19za2Ioc2tiLCBkZXYsIG1iIC0gQVQ5MV9NQl9UWF9GSVJTVCk7CiAKIAkvKgpAQCAtNzgyLDcgKzc4Miw3IEBACiAJCXJlZ19tc3IgPSBhdDkxX3JlYWQocHJpdiwgQVQ5MV9NU1IobWIpKTsKIAkJaWYgKGxpa2VseShyZWdfbXNyICYgQVQ5MV9NU1JfTVJEWSAmJgogCQkJICAgfnJlZ19tc3IgJiBBVDkxX01TUl9NQUJUKSkgewotCQkJLyogX05PVEVfOiBzdWJzdHJhY3QgQVQ5MV9NQl9UWF9GSVJTVCBvZmZzZXQgZnJvbSBtYiEgKi8KKwkJCS8qIF9OT1RFXzogc3VidHJhY3QgQVQ5MV9NQl9UWF9GSVJTVCBvZmZzZXQgZnJvbSBtYiEgKi8KIAkJCWNhbl9nZXRfZWNob19za2IoZGV2LCBtYiAtIEFUOTFfTUJfVFhfRklSU1QpOwogCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9jX2Nhbi9jX2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL2NfY2FuL2NfY2FuLmMKaW5kZXggMzE1NTI5NS4uN2U1Y2MwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2NfY2FuL2NfY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL2NfY2FuL2NfY2FuLmMKQEAgLTgxMyw3ICs4MTMsNyBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGNhbl9iZXJyX2NvdW50ZXIgYmVjOwogCi0JLyogcHJvcG9nYXRlIHRoZSBlcnJvciBjb25kaXRpb24gdG8gdGhlIENBTiBzdGFjayAqLworCS8qIHByb3BhZ2F0ZSB0aGUgZXJyb3IgY29uZGl0aW9uIHRvIHRoZSBDQU4gc3RhY2sgKi8KIAlza2IgPSBhbGxvY19jYW5fZXJyX3NrYihkZXYsICZjZik7CiAJaWYgKHVubGlrZWx5KCFza2IpKQogCQlyZXR1cm4gMDsKQEAgLTg4Nyw3ICs4ODcsNyBAQAogCWlmIChsZWNfdHlwZSA9PSBMRUNfVU5VU0VEIHx8IGxlY190eXBlID09IExFQ19OT19FUlJPUikKIAkJcmV0dXJuIDA7CiAKLQkvKiBwcm9wb2dhdGUgdGhlIGVycm9yIGNvbmRpdGlvbiB0byB0aGUgQ0FOIHN0YWNrICovCisJLyogcHJvcGFnYXRlIHRoZSBlcnJvciBjb25kaXRpb24gdG8gdGhlIENBTiBzdGFjayAqLwogCXNrYiA9IGFsbG9jX2Nhbl9lcnJfc2tiKGRldiwgJmNmKTsKIAlpZiAodW5saWtlbHkoIXNrYikpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2phbnotaWNhbjMuYyBiL2RyaXZlcnMvbmV0L2Nhbi9qYW56LWljYW4zLmMKaW5kZXggMTAyYjE2Yy4uNTg3ZmJhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2phbnotaWNhbjMuYworKysgYi9kcml2ZXJzL25ldC9jYW4vamFuei1pY2FuMy5jCkBAIC0yNzQsNyArMjc0LDcgQEAKICAqLwogCiAvKgotICogUmVjaWV2ZSBhIG1lc3NhZ2UgZnJvbSB0aGUgSUNBTjMgIm9sZC1zdHlsZSIgZmlybXdhcmUgaW50ZXJmYWNlCisgKiBSZWNlaXZlIGEgbWVzc2FnZSBmcm9tIHRoZSBJQ0FOMyAib2xkLXN0eWxlIiBmaXJtd2FyZSBpbnRlcmZhY2UKICAqCiAgKiBMT0NLSU5HOiBtdXN0IGhvbGQgbW9kLT5sb2NrCiAgKgpAQCAtMTA1MCw3ICsxMDUwLDcgQEAKIAkJY29tcGxldGUoJm1vZC0+dGVybWluYXRpb25fY29tcCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWRldl9lcnIobW9kLT5kZXYsICJyZWNpZXZlZCBhbiB1bmtub3duIGlucXVpcnkgcmVzcG9uc2VcbiIpOworCQlkZXZfZXJyKG1vZC0+ZGV2LCAicmVjZWl2ZWQgYW4gdW5rbm93biBpbnF1aXJ5IHJlc3BvbnNlXG4iKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMTA1OCw3ICsxMDU4LDcgQEAKIHN0YXRpYyB2b2lkIGljYW4zX2hhbmRsZV91bmtub3duX21lc3NhZ2Uoc3RydWN0IGljYW4zX2RldiAqbW9kLAogCQkJCQlzdHJ1Y3QgaWNhbjNfbXNnICptc2cpCiB7Ci0JZGV2X3dhcm4obW9kLT5kZXYsICJyZWNpZXZlZCB1bmtub3duIG1lc3NhZ2U6IHNwZWMgMHglLjJ4IGxlbmd0aCAlZFxuIiwKKwlkZXZfd2Fybihtb2QtPmRldiwgInJlY2VpdmVkIHVua25vd24gbWVzc2FnZTogc3BlYyAweCUuMnggbGVuZ3RoICVkXG4iLAogCQkJICAgbXNnLT5zcGVjLCBsZTE2X3RvX2NwdShtc2ctPmxlbikpOwogfQogCkBAIC0xMTEzLDcgKzExMTMsNyBAQAogfQogCiAvKgotICogUmVjaWV2ZSBvbmUgQ0FOIGZyYW1lIGZyb20gdGhlIGhhcmR3YXJlCisgKiBSZWNlaXZlIG9uZSBDQU4gZnJhbWUgZnJvbSB0aGUgaGFyZHdhcmUKICAqCiAgKiBDT05URVhUOiBtdXN0IGJlIGNhbGxlZCBmcm9tIHVzZXIgY29udGV4dAogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vbWNwMjUxeC5jIGIvZHJpdmVycy9uZXQvY2FuL21jcDI1MXguYwppbmRleCA3NTEzYzQ1Li4zMzAxNDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vbWNwMjUxeC5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9tY3AyNTF4LmMKQEAgLTkzMSw3ICs5MzEsOCBAQAogCXByaXYtPnR4X2xlbiA9IDA7CiAKIAlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShzcGktPmlycSwgTlVMTCwgbWNwMjUxeF9jYW5faXN0LAotCQkJICBJUlFGX1RSSUdHRVJfRkFMTElORywgREVWSUNFX05BTUUsIHByaXYpOworCQkgIHBkYXRhLT5pcnFfZmxhZ3MgPyBwZGF0YS0+aXJxX2ZsYWdzIDogSVJRRl9UUklHR0VSX0ZBTExJTkcsCisJCSAgREVWSUNFX05BTUUsIHByaXYpOwogCWlmIChyZXQpIHsKIAkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gYWNxdWlyZSBpcnEgJWRcbiIsIHNwaS0+aXJxKTsKIAkJaWYgKHBkYXRhLT50cmFuc2NlaXZlcl9lbmFibGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vbXNjYW4vbXBjNXh4eF9jYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9tcGM1eHh4X2Nhbi5jCmluZGV4IGMwYTFiYzUuLjVmZWRjMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9tcGM1eHh4X2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9tcGM1eHh4X2Nhbi5jCkBAIC0yNDcsOCArMjQ3LDEwIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BQQ19NUEM1MTJ4ICovCiAKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1wYzV4eHhfY2FuX3RhYmxlW107CiBzdGF0aWMgaW50IF9fZGV2aW5pdCBtcGM1eHh4X2Nhbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldikKIHsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKIAlzdHJ1Y3QgbXBjNXh4eF9jYW5fZGF0YSAqZGF0YTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtPmRldi5vZl9ub2RlOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0yNTgsOSArMjYwLDEwIEBACiAJaW50IGlycSwgbXNjYW5fY2xrc3JjID0gMDsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAotCWlmICghb2ZkZXYtPmRldi5vZl9tYXRjaCkKKwltYXRjaCA9IG9mX21hdGNoX2RldmljZShtcGM1eHh4X2Nhbl90YWJsZSwgJm9mZGV2LT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwotCWRhdGEgPSAoc3RydWN0IG1wYzV4eHhfY2FuX2RhdGEgKilvZl9kZXYtPmRldi5vZl9tYXRjaC0+ZGF0YTsKKwlkYXRhID0gbWF0Y2gtPmRhdGE7CiAKIAliYXNlID0gb2ZfaW9tYXAobnAsIDApOwogCWlmICghYmFzZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL21zY2FuL21zY2FuLmMgYi9kcml2ZXJzL25ldC9jYW4vbXNjYW4vbXNjYW4uYwppbmRleCA3NGNkODgwLi45MmZlYWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vbXNjYW4vbXNjYW4uYworKysgYi9kcml2ZXJzL25ldC9jYW4vbXNjYW4vbXNjYW4uYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJCW91dF9iZTE2KCZyZWdzLT50eC5pZHIzXzIsIGNhbl9pZCk7CiAKIAkJY2FuX2lkID4+PSAxNjsKLQkJLyogRUZGX0ZMQUdTIGFyZSBpbmJldHdlZW4gdGhlIElEcyA6KCAqLworCQkvKiBFRkZfRkxBR1MgYXJlIGJldHdlZW4gdGhlIElEcyA6KCAqLwogCQljYW5faWQgPSAoY2FuX2lkICYgMHg3KSB8ICgoY2FuX2lkIDw8IDIpICYgMHhmZmUwKQogCQkJIHwgTVNDQU5fRUZGX0ZMQUdTOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9zamExMDAwLmMgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9zamExMDAwLmMKaW5kZXggMGE4ZGUwMS4uZjUwMWJiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvc2phMTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL3NqYTEwMDAuYwpAQCAtMzQ2LDEwICszNDYsMTAgQEAKIAkJICAgIHwgKHByaXYtPnJlYWRfcmVnKHByaXYsIFJFR19JRDIpID4+IDUpOwogCX0KIAorCWNmLT5jYW5fZGxjID0gZ2V0X2Nhbl9kbGMoZmkgJiAweDBGKTsKIAlpZiAoZmkgJiBGSV9SVFIpIHsKIAkJaWQgfD0gQ0FOX1JUUl9GTEFHOwogCX0gZWxzZSB7Ci0JCWNmLT5jYW5fZGxjID0gZ2V0X2Nhbl9kbGMoZmkgJiAweDBGKTsKIAkJZm9yIChpID0gMDsgaSA8IGNmLT5jYW5fZGxjOyBpKyspCiAJCQljZi0+ZGF0YVtpXSA9IHByaXYtPnJlYWRfcmVnKHByaXYsIGRyZWcrKyk7CiAJfQpAQCAtNDI1LDcgKzQyNSw3IEBACiAJCQljZi0+ZGF0YVszXSA9IGVjYyAmIEVDQ19TRUc7CiAJCQlicmVhazsKIAkJfQotCQkvKiBFcnJvciBvY2N1cmVkIGR1cmluZyB0cmFuc21pc3Npb24/ICovCisJCS8qIEVycm9yIG9jY3VycmVkIGR1cmluZyB0cmFuc21pc3Npb24/ICovCiAJCWlmICgoZWNjICYgRUNDX0RJUikgPT0gMCkKIAkJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9UWDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc2xjYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9zbGNhbi5jCmluZGV4IGI0MjM5NjUuLjFiNDlkZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9zbGNhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zbGNhbi5jCkBAIC01ODMsNyArNTgzLDkgQEAKIAkvKiBEb25lLiAgV2UgaGF2ZSBsaW5rZWQgdGhlIFRUWSBsaW5lIHRvIGEgY2hhbm5lbC4gKi8KIAlydG5sX3VubG9jaygpOwogCXR0eS0+cmVjZWl2ZV9yb29tID0gNjU1MzY7CS8qIFdlIGRvbid0IGZsb3cgY29udHJvbCAqLwotCXJldHVybiBzbC0+ZGV2LT5iYXNlX2FkZHI7CisKKwkvKiBUVFkgbGF5ZXIgZXhwZWN0cyAwIG9uIHN1Y2Nlc3MgKi8KKwlyZXR1cm4gMDsKIAogZXJyX2ZyZWVfY2hhbjoKIAlzbC0+dHR5ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmcuaCBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmcuaAppbmRleCA3ZWM5ZjRkLi5hZmQ3ZDg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nLmgKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZy5oCkBAIC0yMiw3ICsyMiw3IEBACiAJc3RydWN0IHNvZnRpbmcgKmNhcmQ7CiAJc3RydWN0IHsKIAkJaW50IHBlbmRpbmc7Ci0JCS8qIHZhcmlhYmxlcyB3aWNoIGhvbGQgdGhlIGNpcmN1bGFyIGJ1ZmZlciAqLworCQkvKiB2YXJpYWJsZXMgd2hpY2ggaG9sZCB0aGUgY2lyY3VsYXIgYnVmZmVyICovCiAJCWludCBlY2hvX3B1dDsKIAkJaW50IGVjaG9fZ2V0OwogCX0gdHg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX21haW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfbWFpbi5jCmluZGV4IGFlZWE5ZjkuLjdhNzA3MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfbWFpbi5jCkBAIC0yMTgsNyArMjE4LDcgQEAKIAlwdHIgPSBidWY7CiAJY21kID0gKnB0cisrOwogCWlmIChjbWQgPT0gMHhmZikKLQkJLyogbm90IHF1aXRlIHVzZWZ1bGwsIHByb2JhYmx5IHRoZSBjYXJkIGhhcyBnb3Qgb3V0ICovCisJCS8qIG5vdCBxdWl0ZSB1c2VmdWwsIHByb2JhYmx5IHRoZSBjYXJkIGhhcyBnb3Qgb3V0ICovCiAJCXJldHVybiAwOwogCW5ldGRldiA9IGNhcmQtPm5ldFswXTsKIAlpZiAoY21kICYgQ01EX0JVUzIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdGlfaGVjYy5jIGIvZHJpdmVycy9uZXQvY2FuL3RpX2hlY2MuYwppbmRleCA0ZDA3ZjFlLi5mN2JiZGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vdGlfaGVjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi90aV9oZWNjLmMKQEAgLTY2Myw3ICs2NjMsNyBAQAogCXN0cnVjdCBjYW5fZnJhbWUgKmNmOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQkvKiBwcm9wb2dhdGUgdGhlIGVycm9yIGNvbmRpdGlvbiB0byB0aGUgY2FuIHN0YWNrICovCisJLyogcHJvcGFnYXRlIHRoZSBlcnJvciBjb25kaXRpb24gdG8gdGhlIGNhbiBzdGFjayAqLwogCXNrYiA9IGFsbG9jX2Nhbl9lcnJfc2tiKG5kZXYsICZjZik7CiAJaWYgKCFza2IpIHsKIAkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvZW1zX3VzYi5jIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9lbXNfdXNiLmMKaW5kZXggZTc1ZjFhOC4uYTcyYzdiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9lbXNfdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9lbXNfdXNiLmMKQEAgLTM4Niw3ICszODYsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQkvKiBFcnJvciBvY2N1cmVkIGR1cmluZyB0cmFuc21pc3Npb24/ICovCisJCS8qIEVycm9yIG9jY3VycmVkIGR1cmluZyB0cmFuc21pc3Npb24/ICovCiAJCWlmICgoZWNjICYgU0pBMTAwMF9FQ0NfRElSKSA9PSAwKQogCQkJY2YtPmRhdGFbMl0gfD0gQ0FOX0VSUl9QUk9UX1RYOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdXNiL2VzZF91c2IyLmMgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2VzZF91c2IyLmMKaW5kZXggZGM1M2M4My4uZWI4YjBlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9lc2RfdXNiMi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvZXNkX3VzYjIuYwpAQCAtMjg0LDcgKzI4NCw3IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCS8qIEVycm9yIG9jY3VyZWQgZHVyaW5nIHRyYW5zbWlzc2lvbj8gKi8KKwkJCS8qIEVycm9yIG9jY3VycmVkIGR1cmluZyB0cmFuc21pc3Npb24/ICovCiAJCQlpZiAoIShlY2MgJiBTSkExMDAwX0VDQ19ESVIpKQogCQkJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9UWDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2Fzc2luaS5jIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5jCmluZGV4IDM0Mzc2MTMuLjE0M2EyOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYworKysgYi9kcml2ZXJzL25ldC9jYXNzaW5pLmMKQEAgLTUxLDcgKzUxLDcgQEAKICAqIFRYIGhhcyA0IHF1ZXVlcy4gY3VycmVudGx5IHRoZXNlIHF1ZXVlcyBhcmUgdXNlZCBpbiBhIHJvdW5kLXJvYmluCiAgKiBmYXNoaW9uIGZvciBsb2FkIGJhbGFuY2luZy4gVGhleSBjYW4gYWxzbyBiZSB1c2VkIGZvciBRb1MuIGZvciB0aGF0CiAgKiB0byB3b3JrLCBob3dldmVyLCBRb1MgaW5mb3JtYXRpb24gbmVlZHMgdG8gYmUgZXhwb3NlZCBkb3duIHRvIHRoZSBkcml2ZXIKLSAqIGxldmVsIHNvIHRoYXQgc3VicXVldWVzIGdldCB0YXJnZXR0ZWQgdG8gcGFydGljdWxhciB0cmFuc21pdCByaW5ncy4KKyAqIGxldmVsIHNvIHRoYXQgc3VicXVldWVzIGdldCB0YXJnZXRlZCB0byBwYXJ0aWN1bGFyIHRyYW5zbWl0IHJpbmdzLgogICogYWx0ZXJuYXRpdmVseSwgdGhlIHF1ZXVlcyBjYW4gYmUgY29uZmlndXJlZCB2aWEgdXNlIG9mIHRoZSBhbGwtcHVycG9zZQogICogaW9jdGwuCiAgKgpAQCAtNTE2NSw3ICs1MTY1LDcgQEAKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCiBlcnJfd3JpdGVfY2FjaGVsaW5lOgotCS8qIFRyeSB0byByZXN0b3JlIGl0IGluIGNhc2UgdGhlIGVycm9yIG9jY3VyZWQgYWZ0ZXIgd2UKKwkvKiBUcnkgdG8gcmVzdG9yZSBpdCBpbiBjYXNlIHRoZSBlcnJvciBvY2N1cnJlZCBhZnRlciB3ZQogCSAqIHNldCBpdC4KIAkgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgb3JpZ19jYWNoZWxpbmVfc2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYXNzaW5pLmggYi9kcml2ZXJzL25ldC9jYXNzaW5pLmgKaW5kZXggZmFmNDc0Ni4uYjM2MTQyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2Fzc2luaS5oCisrKyBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuaApAQCAtNzcyLDcgKzc3Miw3IEBACiAjZGVmaW5lICAgIFJYX0RFQlVHX0lOVFJfV1JJVEVfUFRSX01BU0sgICAgMHhDMDAwMDAwMCAvKiBpbnRlcnJ1cHQgd3JpdGUgcG9pbnRlcgogCQkJCQkJCSBvZiB0aGUgaW50ZXJydXB0IHF1ZXVlICovCiAKLS8qIGZsb3cgY29udHJvbCBmcmFtZXMgYXJlIGVtbWl0dGVkIHVzaW5nIHR3byBQQVVTRSB0aHJlc2hvbGRzOgorLyogZmxvdyBjb250cm9sIGZyYW1lcyBhcmUgZW1pdHRlZCB1c2luZyB0d28gUEFVU0UgdGhyZXNob2xkczoKICAqIFhPRkYgUEFVU0UgdXNlcyBwYXVzZSB0aW1lIHZhbHVlIHByZS1wcm9ncmFtbWVkIGluIHRoZSBTZW5kIFBBVVNFIE1BQyByZWcKICAqIFhPTiBQQVVTRSB1c2VzIGEgcGF1c2UgdGltZSBvZiAwLiBncmFudWxhcml0eSBvZiB0aHJlc2hvbGQgaXMgNjRieXRlcy4KICAqIFBBVVNFIHRocmVzaG9sZHMgZGVmaW5lZCBpbiB0ZXJtcyBvZiBGSUZPIG9jY3VwYW5jeSBhbmQgbWF5IGJlIHRyYW5zbGF0ZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vbXY4OGUxeHh4LmMgYi9kcml2ZXJzL25ldC9jaGVsc2lvL212ODhlMXh4eC5jCmluZGV4IDgwOTA0N2EuLjcxMDE4YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vbXY4OGUxeHh4LmMKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9tdjg4ZTF4eHguYwpAQCAtNDEsNyArNDEsNyBAQAogICoKICAqIFBBUkFNUzogY3BoeSAgICAgLSBQb2ludGVyIHRvIFBIWSBpbnN0YW5jZSBkYXRhLgogICoKLSAqIFJFVFVSTjogIDAgLSBTdWNjZXNzZnVsbCByZXNldC4KKyAqIFJFVFVSTjogIDAgLSBTdWNjZXNzZnVsIHJlc2V0LgogICogICAgICAgICAtMSAtIFRpbWVvdXQuCiAgKi8KIHN0YXRpYyBpbnQgbXY4OGUxeHh4X3Jlc2V0KHN0cnVjdCBjcGh5ICpjcGh5LCBpbnQgd2FpdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vcG0zMzkzLmMgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3BtMzM5My5jCmluZGV4IDdkYmIxNmQuLjQwYzdiOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vcG0zMzkzLmMKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9wbTMzOTMuYwpAQCAtMjkzLDcgKzI5Myw3IEBACiAJcG0zMzkzX2VuYWJsZShjbWFjLCB3aGljaCk7CiAKIAkvKgotCSAqIFhYWCBUaGlzIHNob3VsZCBiZSBkb25lIGJ5IHRoZSBQSFkgYW5kIHByZWZlcnJhYmx5IG5vdCBhdCBhbGwuCisJICogWFhYIFRoaXMgc2hvdWxkIGJlIGRvbmUgYnkgdGhlIFBIWSBhbmQgcHJlZmVyYWJseSBub3QgYXQgYWxsLgogCSAqIFRoZSBQSFkgZG9lc24ndCBnaXZlIHVzIGxpbmsgc3RhdHVzIGluZGljYXRpb24gb24gaXRzIG93biBzbyBoYXZlCiAJICogdGhlIGxpbmsgbWFuYWdlbWVudCBjb2RlIHF1ZXJ5IGl0IGluc3RlYWQuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYwppbmRleCBmNzc4YjE1Li44NzU0ZDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMKQEAgLTE2NjIsNyArMTY2Miw3IEBACiAgKiBUaGUgY29kZSBmaWd1cmVzIG91dCBob3cgbWFueSBlbnRyaWVzIHRoZSBza19idWZmIHdpbGwgcmVxdWlyZSBpbiB0aGUKICAqIGNtZFEgYW5kIHVwZGF0ZXMgdGhlIGNtZFEgZGF0YSBzdHJ1Y3R1cmUgd2l0aCB0aGUgc3RhdGUgb25jZSB0aGUgZW5xdWV1ZQogICogaGFzIGNvbXBsZXRlLiBUaGVuLCBpdCBkb2Vzbid0IGFjY2VzcyB0aGUgZ2xvYmFsIHN0cnVjdHVyZSBhbnltb3JlLCBidXQKLSAqIHVzZXMgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGRzIG9uIHRoZSBzdGFjay4gSW4gY29uanVjdGlvbiB3aXRoIGEgc3BpbmxvY2sKKyAqIHVzZXMgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGRzIG9uIHRoZSBzdGFjay4gSW4gY29uanVuY3Rpb24gd2l0aCBhIHNwaW5sb2NrCiAgKiBhcm91bmQgdGhhdCBjb2RlLCB3ZSBjYW4gbWFrZSB0aGUgZnVuY3Rpb24gcmVlbnRyYW50IHdpdGhvdXQgaG9sZGluZyB0aGUKICAqIGxvY2sgd2hlbiB3ZSBhY3R1YWxseSBlbnF1ZXVlICh3aGljaCBtaWdodCBiZSBleHBlbnNpdmUsIGVzcGVjaWFsbHkgb24KICAqIGFyY2hpdGVjdHVyZXMgd2l0aCBJTyBNTVVzKS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vdnNjNzMyNi5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby92c2M3MzI2LmMKaW5kZXggMTA2YTU5MC4uYjBjYjM4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby92c2M3MzI2LmMKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby92c2M3MzI2LmMKQEAgLTU2Niw3ICs1NjYsNyBAQAogCWZvciAoaSA9IDA7IGkgPD0gMHgzYTsgKytpKQogCQl2c2Nfd3JpdGUobWFjLT5hZGFwdGVyLCBDUkEoNCwgcG9ydCwgaSksIDApOwogCi0JLyogQ2xlYXIgc29md2FyZSBjb3VudGVycyAqLworCS8qIENsZWFyIHNvZnR3YXJlIGNvdW50ZXJzICovCiAJbWVtc2V0KCZtYWMtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IGNtYWNfc3RhdGlzdGljcykpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYyBiL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCmluZGV4IDgwYzJmZWUuLjlkMjY3ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCisrKyBiL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCkBAIC0xMzgzLDcgKzEzODMsNyBAQAogCXNwaW5fbG9jaygmbnAtPmxvY2spOyAvKiBQcmVlbXB0IHByb3RlY3Rpb24gKi8KIAlzd2l0Y2ggKGNtZCkgewogCQkvKiBUaGUgaW9jdGxzIGJlbG93IHNob3VsZCBiZSBjb25zaWRlcmVkIG9ic29sZXRlIGJ1dCBhcmUgKi8KLQkJLyogc3RpbGwgcHJlc2VudCBmb3IgY29tcGF0YWJpbGl0eSB3aXRoIG9sZCBzY3JpcHRzL2FwcHMgICovCisJCS8qIHN0aWxsIHByZXNlbnQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgc2NyaXB0cy9hcHBzICAqLwogCQljYXNlIFNFVF9FVEhfU1BFRURfMTA6ICAgICAgICAgICAgICAgICAgLyogMTAgTWJwcyAqLwogCQkJZTEwMF9zZXRfc3BlZWQoZGV2LCAxMCk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jIGIvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMKaW5kZXggZjlmNjY0NS4uYmZhMmQ1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMKQEAgLTE5OSw3ICsxOTksNyBAQAogICoJbmVlZF9za2JfdW5tYXAgLSBkb2VzIHRoZSBwbGF0Zm9ybSBuZWVkIHVubWFwcGluZyBvZiBza19idWZmcz8KICAqCiAgKglSZXR1cm5zIHRydWUgaWYgdGhlIHBsYXRmb3JtIG5lZWRzIHNrX2J1ZmYgdW5tYXBwaW5nLiAgVGhlIGNvbXBpbGVyCi0gKglvcHRpbWl6ZXMgYXdheSB1bmVjZXNzYXJ5IGNvZGUgaWYgdGhpcyByZXR1cm5zIHRydWUuCisgKglvcHRpbWl6ZXMgYXdheSB1bm5lY2Vzc2FyeSBjb2RlIGlmIHRoaXMgcmV0dXJucyB0cnVlLgogICovCiBzdGF0aWMgaW5saW5lIGludCBuZWVkX3NrYl91bm1hcCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvdDNfaHcuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2h3LmMKaW5kZXggZDU1ZGI2Yi4uYzY4ODQyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvdDNfaHcuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy90M19ody5jCkBAIC0xMzg2LDExICsxMzg2LDExIEBACiAgKglAcmVnOiB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciB0byBwcm9jZXNzCiAgKglAbWFzazogYSBtYXNrIHRvIGFwcGx5IHRvIHRoZSBpbnRlcnJ1cHQgc3RhdHVzCiAgKglAYWN0czogdGFibGUgb2YgaW50ZXJydXB0IGFjdGlvbnMKLSAqCUBzdGF0czogc3RhdGlzdGljcyBjb3VudGVycyB0cmFja2luZyBpbnRlcnJ1cHQgb2NjdXJlbmNlcworICoJQHN0YXRzOiBzdGF0aXN0aWNzIGNvdW50ZXJzIHRyYWNraW5nIGludGVycnVwdCBvY2N1cnJlbmNlcwogICoKICAqCUEgdGFibGUgZHJpdmVuIGludGVycnVwdCBoYW5kbGVyIHRoYXQgYXBwbGllcyBhIHNldCBvZiBtYXNrcyB0byBhbgogICoJaW50ZXJydXB0IHN0YXR1cyB3b3JkIGFuZCBwZXJmb3JtcyB0aGUgY29ycmVzcG9uZGluZyBhY3Rpb25zIGlmIHRoZQotICoJaW50ZXJydXB0cyBkZXNjcmliZWQgYnkgdGhlIG1hc2sgaGF2ZSBvY2N1cmVkLiAgVGhlIGFjdGlvbnMgaW5jbHVkZQorICoJaW50ZXJydXB0cyBkZXNjcmliZWQgYnkgdGhlIG1hc2sgaGF2ZSBvY2N1cnJlZC4gIFRoZSBhY3Rpb25zIGluY2x1ZGUKICAqCW9wdGlvbmFsbHkgcHJpbnRpbmcgYSB3YXJuaW5nIG9yIGFsZXJ0IG1lc3NhZ2UsIGFuZCBvcHRpb25hbGx5CiAgKglpbmNyZW1lbnRpbmcgYSBzdGF0IGNvdW50ZXIuICBUaGUgdGFibGUgaXMgdGVybWluYXRlZCBieSBhbiBlbnRyeQogICoJc3BlY2lmeWluZyBtYXNrIDAuICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZmF0YWwgaW50ZXJydXB0IGNvbmRpdGlvbnMuCkBAIC0yNzgzLDcgKzI3ODMsNyBAQAogewogCS8qCiAJICogU2VlIGRyYWZ0LW1hdGhpcy1wbHBtdHVkLTAwLnR4dCBmb3IgdGhlIHZhbHVlcy4gIFRoZSBtaW4gaXMgODggc28KLQkgKiBpdCBjYW4gYWNjb21vZGF0ZSBtYXggc2l6ZSBUQ1AvSVAgaGVhZGVycyB3aGVuIFNBQ0sgYW5kIHRpbWVzdGFtcHMKKwkgKiBpdCBjYW4gYWNjb21tb2RhdGUgbWF4IHNpemUgVENQL0lQIGhlYWRlcnMgd2hlbiBTQUNLIGFuZCB0aW1lc3RhbXBzCiAJICogYXJlIGVuYWJsZWQgYW5kIHN0aWxsIGhhdmUgYXQgbGVhc3QgOCBieXRlcyBvZiBwYXlsb2FkLgogCSAqLwogCW10dXNbMF0gPSA4ODsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2I0L3Q0X2h3LmMgYi9kcml2ZXJzL25ldC9jeGdiNC90NF9ody5jCmluZGV4IGI5ZmQ4YTYuLmQxZWMxMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2I0L3Q0X2h3LmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjQvdDRfaHcuYwpAQCAtODgzLDcgKzg4Myw3IEBACiAgKgogICoJQSB0YWJsZSBkcml2ZW4gaW50ZXJydXB0IGhhbmRsZXIgdGhhdCBhcHBsaWVzIGEgc2V0IG9mIG1hc2tzIHRvIGFuCiAgKglpbnRlcnJ1cHQgc3RhdHVzIHdvcmQgYW5kIHBlcmZvcm1zIHRoZSBjb3JyZXNwb25kaW5nIGFjdGlvbnMgaWYgdGhlCi0gKglpbnRlcnJ1cHRzIGRlc2NyaWJlZCBieSB0aGUgbWFzayBoYXZlIG9jY3VyZWQuICBUaGUgYWN0aW9ucyBpbmNsdWRlCisgKglpbnRlcnJ1cHRzIGRlc2NyaWJlZCBieSB0aGUgbWFzayBoYXZlIG9jY3VycmVkLiAgVGhlIGFjdGlvbnMgaW5jbHVkZQogICoJb3B0aW9uYWxseSBlbWl0dGluZyBhIHdhcm5pbmcgb3IgYWxlcnQgbWVzc2FnZS4gIFRoZSB0YWJsZSBpcyB0ZXJtaW5hdGVkCiAgKglieSBhbiBlbnRyeSBzcGVjaWZ5aW5nIG1hc2sgMC4gIFJldHVybnMgdGhlIG51bWJlciBvZiBmYXRhbCBpbnRlcnJ1cHQKICAqCWNvbmRpdGlvbnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi9jeGdiNHZmX21haW4uYwppbmRleCA2YWFkNjRkLi40NjYxY2JiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmMKQEAgLTI3MzgsNyArMjczOCw3IEBACiAJY2ZnX3F1ZXVlcyhhZGFwdGVyKTsKIAogCS8qCi0JICogUHJpbnQgYSBzaG9ydCBub3RpY2Ugb24gdGhlIGV4aXN0YW5jZSBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgbmV3CisJICogUHJpbnQgYSBzaG9ydCBub3RpY2Ugb24gdGhlIGV4aXN0ZW5jZSBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgbmV3CiAJICogVkYgbmV0d29yayBkZXZpY2UgLi4uCiAJICovCiAJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBwaWR4KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiNHZmL3NnZS5jIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi9zZ2UuYwppbmRleCBlMGIzZDFiLi5iYjY1MTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiNHZmL3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0dmYvc2dlLmMKQEAgLTIyNCw4ICsyMjQsOCBAQAogLyoqCiAgKgluZWVkX3NrYl91bm1hcCAtIGRvZXMgdGhlIHBsYXRmb3JtIG5lZWQgdW5tYXBwaW5nIG9mIHNrX2J1ZmZzPwogICoKLSAqCVJldHVybnMgdHJ1ZSBpZiB0aGUgcGxhdGZyb20gbmVlZHMgc2tfYnVmZiB1bm1hcHBpbmcuICBUaGUgY29tcGlsZXIKLSAqCW9wdGltaXplcyBhd2F5IHVuZWNlc3NhcnkgY29kZSBpZiB0aGlzIHJldHVybnMgdHJ1ZS4KKyAqCVJldHVybnMgdHJ1ZSBpZiB0aGUgcGxhdGZvcm0gbmVlZHMgc2tfYnVmZiB1bm1hcHBpbmcuICBUaGUgY29tcGlsZXIKKyAqCW9wdGltaXplcyBhd2F5IHVubmVjZXNzYXJ5IGNvZGUgaWYgdGhpcyByZXR1cm5zIHRydWUuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IG5lZWRfc2tiX3VubWFwKHZvaWQpCiB7CkBAIC0yNjcsNyArMjY3LDcgQEAKICAqCiAgKglUZXN0cyBzcGVjaWZpZWQgRnJlZSBMaXN0IHRvIHNlZSB3aGV0aGVyIHRoZSBudW1iZXIgb2YgYnVmZmVycwogICoJYXZhaWxhYmxlIHRvIHRoZSBoYXJkd2FyZSBoYXMgZmFsbGVkIGJlbG93IG91ciAic3RhcnZhdGlvbiIKLSAqCXRocmVzaGhvbGQuCisgKgl0aHJlc2hvbGQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBmbF9zdGFydmluZyhjb25zdCBzdHJ1Y3Qgc2dlX2ZsICpmbCkKIHsKQEAgLTExNDksNyArMTE0OSw3IEBACiAJaWYgKHVubGlrZWx5KGNyZWRpdHMgPCBFVEhUWFFfU1RPUF9USFJFUykpIHsKIAkJLyoKIAkJICogQWZ0ZXIgd2UncmUgZG9uZSBpbmplY3RpbmcgdGhlIFdvcmsgUmVxdWVzdCBmb3IgdGhpcwotCQkgKiBwYWNrZXQsIHdlJ2xsIGJlIGJlbG93IG91ciAic3RvcCB0aHJlc2hob2xkIiBzbyBzdG9wIHRoZSBUWAorCQkgKiBwYWNrZXQsIHdlJ2xsIGJlIGJlbG93IG91ciAic3RvcCB0aHJlc2hvbGQiIHNvIHN0b3AgdGhlIFRYCiAJCSAqIFF1ZXVlIG5vdyBhbmQgc2NoZWR1bGUgYSByZXF1ZXN0IGZvciBhbiBTR0UgRWdyZXNzIFF1ZXVlCiAJCSAqIFVwZGF0ZSBtZXNzYWdlLiAgVGhlIHF1ZXVlIHdpbGwgZ2V0IHN0YXJ0ZWQgbGF0ZXIgb24gd2hlbgogCQkgKiB0aGUgZmlybXdhcmUgcHJvY2Vzc2VzIHRoaXMgV29yayBSZXF1ZXN0IGFuZCBzZW5kcyB1cyBhbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMgYi9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYwppbmRleCBiYWNhNmJmLi44MDdiNmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYworKysgYi9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYwpAQCAtOTQsMTQgKzk0LDE0IEBACiBzdGF0aWMgY29uc3QgY2hhciBlbWFjX3ZlcnNpb25fc3RyaW5nW10gPSAiVEkgRGFWaW5jaSBFTUFDIExpbnV4IHY2LjEiOwogCiAvKiBDb25maWd1cmF0aW9uIGl0ZW1zICovCi0jZGVmaW5lIEVNQUNfREVGX1BBU1NfQ1JDCQkoMCkgLyogRG8gbm90IHBhc3MgQ1JDIHVwdG8gZnJhbWVzICovCisjZGVmaW5lIEVNQUNfREVGX1BBU1NfQ1JDCQkoMCkgLyogRG8gbm90IHBhc3MgQ1JDIHVwIHRvIGZyYW1lcyAqLwogI2RlZmluZSBFTUFDX0RFRl9RT1NfRU4JCQkoMCkgLyogRU1BQyBwcm9wcmlldGFyeSBRb1MgZGlzYWJsZWQgKi8KICNkZWZpbmUgRU1BQ19ERUZfTk9fQlVGRl9DSEFJTgkJKDApIC8qIE5vIGJ1ZmZlciBjaGFpbiAqLwogI2RlZmluZSBFTUFDX0RFRl9NQUNDVFJMX0ZSQU1FX0VOCSgwKSAvKiBEaXNjYXJkIE1hY2NvbnRyb2wgZnJhbWVzICovCiAjZGVmaW5lIEVNQUNfREVGX1NIT1JUX0ZSQU1FX0VOCQkoMCkgLyogRGlzY2FyZCBzaG9ydCBmcmFtZXMgKi8KICNkZWZpbmUgRU1BQ19ERUZfRVJST1JfRlJBTUVfRU4JCSgwKSAvKiBEaXNjYXJkIGVycm9yIGZyYW1lcyAqLwotI2RlZmluZSBFTUFDX0RFRl9QUk9NX0VOCQkoMCkgLyogUHJvbWlzY291cyBkaXNhYmxlZCAqLwotI2RlZmluZSBFTUFDX0RFRl9QUk9NX0NICQkoMCkgLyogUHJvbWlzY291cyBjaGFubmVsIGlzIDAgKi8KKyNkZWZpbmUgRU1BQ19ERUZfUFJPTV9FTgkJKDApIC8qIFByb21pc2N1b3VzIGRpc2FibGVkICovCisjZGVmaW5lIEVNQUNfREVGX1BST01fQ0gJCSgwKSAvKiBQcm9taXNjdW91cyBjaGFubmVsIGlzIDAgKi8KICNkZWZpbmUgRU1BQ19ERUZfQkNBU1RfRU4JCSgxKSAvKiBCcm9hZGNhc3QgZW5hYmxlZCAqLwogI2RlZmluZSBFTUFDX0RFRl9CQ0FTVF9DSAkJKDApIC8qIEJyb2FkY2FzdCBjaGFubmVsIGlzIDAgKi8KICNkZWZpbmUgRU1BQ19ERUZfTUNBU1RfRU4JCSgxKSAvKiBNdWx0aWNhc3QgZW5hYmxlZCAqLwpAQCAtMTAxMyw3ICsxMDEzLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCS8qIHJlY3ljbGUgb24gcmVjaWV2ZSBlcnJvciAqLworCS8qIHJlY3ljbGUgb24gcmVjZWl2ZSBlcnJvciAqLwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlnb3RvIHJlY3ljbGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKaW5kZXggZjRkMDkyMi4uZGQ3MDczOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYwpAQCAtMTYwLDcgKzE2MCw3IEBACiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkYXB0ZXItPmxpbmtfZHVwbGV4KTsKIAkJZWNtZC0+c3BlZWQgPSBhZGFwdGVyLT5saW5rX3NwZWVkOwogCi0JCS8qIHVuZm9ydHVuYXRseSBGVUxMX0RVUExFWCAhPSBEVVBMRVhfRlVMTAorCQkvKiB1bmZvcnR1bmF0ZWx5IEZVTExfRFVQTEVYICE9IERVUExFWF9GVUxMCiAJCSAqICAgICAgICAgIGFuZCBIQUxGX0RVUExFWCAhPSBEVVBMRVhfSEFMRiAqLwogCiAJCWlmIChhZGFwdGVyLT5saW5rX2R1cGxleCA9PSBGVUxMX0RVUExFWCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmggYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oCmluZGV4IGM3MGIyM2QuLjVjOWE4NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaApAQCAtMTAyNiw3ICsxMDI2LDcgQEAKIAogI2RlZmluZSBFMTAwMF9LVU1DVFJMU1RBIDB4MDAwMzQJLyogTUFDLVBIWSBpbnRlcmZhY2UgLSBSVyAqLwogI2RlZmluZSBFMTAwMF9NRFBIWUEgICAgIDB4MDAwM0MJLyogUEhZIGFkZHJlc3MgLSBSVyAqLwotI2RlZmluZSBFMTAwMF9NQU5DMkggICAgIDB4MDU4NjAJLyogTWFuYWdtZW50IENvbnRyb2wgVG8gSG9zdCAtIFJXICovCisjZGVmaW5lIEUxMDAwX01BTkMySCAgICAgMHgwNTg2MAkvKiBNYW5hZ2VtZW50IENvbnRyb2wgVG8gSG9zdCAtIFJXICovCiAjZGVmaW5lIEUxMDAwX1NXX0ZXX1NZTkMgMHgwNUI1QwkvKiBTb2Z0d2FyZS1GaXJtd2FyZSBTeW5jaHJvbml6YXRpb24gLSBSVyAqLwogCiAjZGVmaW5lIEUxMDAwX0dDUiAgICAgICAweDA1QjAwCS8qIFBDSS1FeCBDb250cm9sICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKaW5kZXggYmZhYjE0MC4uNDc3ZTA2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwpAQCAtMjA1LDcgKzIwNSw3IEBACiAJLnByb2JlICAgID0gZTEwMDBfcHJvYmUsCiAJLnJlbW92ZSAgID0gX19kZXZleGl0X3AoZTEwMDBfcmVtb3ZlKSwKICNpZmRlZiBDT05GSUdfUE0KLQkvKiBQb3dlciBNYW5hZ21lbnQgSG9va3MgKi8KKwkvKiBQb3dlciBNYW5hZ2VtZW50IEhvb2tzICovCiAJLnN1c3BlbmQgID0gZTEwMDBfc3VzcGVuZCwKIAkucmVzdW1lICAgPSBlMTAwMF9yZXN1bWUsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYwppbmRleCBhMzlkNGE0Li41MDZhMGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCkBAIC00ODg2LDcgKzQ4ODYsNyBAQAogCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKIAkJdHhfZmxhZ3MgfD0gRTEwMDBfVFhfRkxBR1NfSVBWNDsKIAotCS8qIGlmIGNvdW50IGlzIDAgdGhlbiBtYXBwaW5nIGVycm9yIGhhcyBvY2N1cmVkICovCisJLyogaWYgY291bnQgaXMgMCB0aGVuIG1hcHBpbmcgZXJyb3IgaGFzIG9jY3VycmVkICovCiAJY291bnQgPSBlMTAwMF90eF9tYXAoYWRhcHRlciwgc2tiLCBmaXJzdCwgbWF4X3Blcl90eGQsIG5yX2ZyYWdzLCBtc3MpOwogCWlmIChjb3VudCkgewogCQllMTAwMF90eF9xdWV1ZShhZGFwdGVyLCB0eF9mbGFncywgY291bnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9ldGh0b29sLmMKaW5kZXggM2UyZTczNC4uZjNiYmRjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfZXRodG9vbC5jCkBAIC01NSwxNSArNTUsMjAgQEAKIAkJY21kLT5kdXBsZXggPSAtMTsKIAl9CiAKLQljbWQtPnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsCi0JCSAgICAgICB8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwgIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmCi0JCSAgICAgICB8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfCBTVVBQT1JURURfMTBiYXNlVF9IYWxmCi0JCSAgICAgICB8IFNVUFBPUlRFRF9BdXRvbmVnIHwgU1VQUE9SVEVEX0ZJQlJFKTsKKwlpZiAoY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAwMCkgeworCQljbWQtPnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwgU1VQUE9SVEVEX0ZJQlJFKTsKKwkJY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8IEFEVkVSVElTRURfRklCUkUpOworCQljbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOworCX0gZWxzZSB7CisJCWNtZC0+c3VwcG9ydGVkID0gKFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsCisJCQkgICAgICAgfCBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwKKwkJCSAgICAgICB8IFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfCBTVVBQT1JURURfQXV0b25lZworCQkJICAgICAgIHwgU1VQUE9SVEVEX1RQKTsKKwkJY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsIHwgQURWRVJUSVNFRF9BdXRvbmVnCisJCQkJIHwgQURWRVJUSVNFRF9UUCk7CisJCWNtZC0+cG9ydCA9IFBPUlRfVFA7CisJfQogCi0JY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8IEFEVkVSVElTRURfQXV0b25lZwotCQkJIHwgQURWRVJUSVNFRF9GSUJSRSk7Ci0KLQljbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOwogCWNtZC0+YXV0b25lZyA9IHBvcnQtPmF1dG9uZWcgPT0gMSA/IEFVVE9ORUdfRU5BQkxFIDogQVVUT05FR19ESVNBQkxFOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYwppbmRleCBmNzVkMzE0Li5jZjc5Y2Y3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMKQEAgLTI2ODgsOSArMjY4OCw2IEBACiAJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAJfQogCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmcG9ydC0+c3dxZV9hdmFpbF93cSk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmcG9ydC0+cmVzdGFydF93cSk7Ci0KIAltdXRleF91bmxvY2soJnBvcnQtPnBvcnRfbG9jayk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMzA0MCwxMSArMzAzNywxNCBAQAogCiAJCQkJCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKSB7CiAJCQkJCQltdXRleF9sb2NrKCZwb3J0LT5wb3J0X2xvY2spOwotCQkJCQkJcG9ydF9uYXBpX2VuYWJsZShwb3J0KTsKIAkJCQkJCXJldCA9IGVoZWFfcmVzdGFydF9xcHMoZGV2KTsKLQkJCQkJCWNoZWNrX3Nxcyhwb3J0KTsKLQkJCQkJCWlmICghcmV0KQorCQkJCQkJaWYgKCFyZXQpIHsKKwkJCQkJCQljaGVja19zcXMocG9ydCk7CisJCQkJCQkJcG9ydF9uYXBpX2VuYWJsZShwb3J0KTsKIAkJCQkJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCW5ldGRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIHJlc3RhcnQgUVBTXG4iKTsKKwkJCQkJCX0KIAkJCQkJCW11dGV4X3VubG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKIAkJCQkJfQogCQkJCX0KQEAgLTMyNzMsNiArMzI3Myw5IEBACiAKIAlJTklUX1dPUksoJnBvcnQtPnJlc2V0X3Rhc2ssIGVoZWFfcmVzZXRfcG9ydCk7CiAKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT5zd3FlX2F2YWlsX3dxKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT5yZXN0YXJ0X3dxKTsKKwogCXJldCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJyZWdpc3Rlcl9uZXRkZXYgZmFpbGVkLiByZXQ9JWRcbiIsIHJldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmMyOGo2MF9ody5oIGIvZHJpdmVycy9uZXQvZW5jMjhqNjBfaHcuaAppbmRleCAxYTBiMjA5Li4yNWI0MWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmMyOGo2MF9ody5oCisrKyBiL2RyaXZlcnMvbmV0L2VuYzI4ajYwX2h3LmgKQEAgLTMwMyw3ICszMDMsNyBAQAogLyogbWF4aW11bSBldGhlcm5ldCBmcmFtZSBsZW5ndGggKi8KICNkZWZpbmUgTUFYX0ZSQU1FTEVOCQkxNTE4CiAKLS8qIFByZWZlcmVkIGhhbGYgZHVwbGV4OiBMRURBOiBMaW5rIHN0YXR1cyBMRURCOiBSeC9UeCBhY3Rpdml0eSAqLworLyogUHJlZmVycmVkIGhhbGYgZHVwbGV4OiBMRURBOiBMaW5rIHN0YXR1cyBMRURCOiBSeC9UeCBhY3Rpdml0eSAqLwogI2RlZmluZSBFTkMyOEo2MF9MQU1QU19NT0RFCTB4MzQ3NgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aDE2aS5jIGIvZHJpdmVycy9uZXQvZXRoMTZpLmMKaW5kZXggZmI3MTdiZS4uMTJkMjhlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoMTZpLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoMTZpLmMKQEAgLTEzLDcgKzEzLDcgQEAKICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGZvbGxvd2luZyBjYXJkcyA6CiAJLSBJQ0wgRXRoZXJUZWFtIDE2aQogCS0gSUNMIEV0aGVyVGVhbSAzMiBFSVNBCi0JICAoVXNlcyB0cnVlIDMyIGJpdCB0cmFuc2ZlcnMgcmF0aGVyIHRoYW4gMTZpIGNvbXBhYmlsaXR5IG1vZGUpCisJICAoVXNlcyB0cnVlIDMyIGJpdCB0cmFuc2ZlcnMgcmF0aGVyIHRoYW4gMTZpIGNvbXBhdGliaWxpdHkgbW9kZSkKIAogICAgRXhhbXBsZSBNb2R1bGUgdXNhZ2U6CiAgICAgICAgIGluc21vZCBldGgxNmkubyBpbz0weDJhMCBtZWRpYXR5cGU9Ym5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhvYy5jIGIvZHJpdmVycy9uZXQvZXRob2MuYwppbmRleCBkYjAyOTBmLi5hODNkZDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhvYy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aG9jLmMKQEAgLTU0Miw3ICs1NDIsNyBAQAogCiAJLyogRmlndXJlIG91dCB3aGF0IHRyaWdnZXJlZCB0aGUgaW50ZXJydXB0Li4uCiAJICogVGhlIHRyaWNreSBiaXQgaGVyZSBpcyB0aGF0IHRoZSBpbnRlcnJ1cHQgc291cmNlIGJpdHMgZ2V0Ci0JICogc2V0IGluIElOVF9TT1VSQ0UgZm9yIGFuIGV2ZW50IGlycmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoYXQKKwkgKiBzZXQgaW4gSU5UX1NPVVJDRSBmb3IgYW4gZXZlbnQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoYXQKIAkgKiBldmVudCBpcyBtYXNrZWQgb3Igbm90LiAgVGh1cywgaW4gb3JkZXIgdG8gZmlndXJlIG91dCB3aGF0CiAJICogdHJpZ2dlcmVkIHRoZSBpbnRlcnJ1cHQsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBzb3VyY2VzCiAJICogZm9yIGFsbCBldmVudHMgdGhhdCBhcmUgY3VycmVudGx5IG1hc2tlZC4gIFRoaXMgYmVoYXZpb3VyCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWMuaCBiL2RyaXZlcnMvbmV0L2ZlYy5oCmluZGV4IGFjZTMxOGQuLjhiMmM2ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlYy5oCisrKyBiL2RyaXZlcnMvbmV0L2ZlYy5oCkBAIC05NywxMSArOTcsMTEgQEAKICAqCVRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgY291cnRlc3kgb2YgY29tbXByb2MuaCwgd2hpY2ggd2hlcmUKICAqCUNvcHlyaWdodCAoYykgMTk5NyBEYW4gTWFsZWsgKGRtYWxla0BqbGMubmV0KS4KICAqLwotI2RlZmluZSBCRF9TQ19FTVBUWSAgICAgKCh1c2hvcnQpMHg4MDAwKSAgICAgICAgLyogUmVjaWV2ZSBpcyBlbXB0eSAqLworI2RlZmluZSBCRF9TQ19FTVBUWSAgICAgKCh1c2hvcnQpMHg4MDAwKSAgICAgICAgLyogUmVjZWl2ZSBpcyBlbXB0eSAqLwogI2RlZmluZSBCRF9TQ19SRUFEWSAgICAgKCh1c2hvcnQpMHg4MDAwKSAgICAgICAgLyogVHJhbnNtaXQgaXMgcmVhZHkgKi8KICNkZWZpbmUgQkRfU0NfV1JBUCAgICAgICgodXNob3J0KTB4MjAwMCkgICAgICAgIC8qIExhc3QgYnVmZmVyIGRlc2NyaXB0b3IgKi8KICNkZWZpbmUgQkRfU0NfSU5UUlBUICAgICgodXNob3J0KTB4MTAwMCkgICAgICAgIC8qIEludGVycnVwdCBvbiBjaGFuZ2UgKi8KLSNkZWZpbmUgQkRfU0NfQ00gICAgICAgICgodXNob3J0KTB4MDIwMCkgICAgICAgIC8qIENvbnRpbm91cyBtb2RlICovCisjZGVmaW5lIEJEX1NDX0NNICAgICAgICAoKHVzaG9ydCkweDAyMDApICAgICAgICAvKiBDb250aW51b3VzIG1vZGUgKi8KICNkZWZpbmUgQkRfU0NfSUQgICAgICAgICgodXNob3J0KTB4MDEwMCkgICAgICAgIC8qIFJlYydkIHRvbyBtYW55IGlkbGVzICovCiAjZGVmaW5lIEJEX1NDX1AgICAgICAgICAoKHVzaG9ydCkweDAxMDApICAgICAgICAvKiB4bXQgcHJlYW1ibGUgKi8KICNkZWZpbmUgQkRfU0NfQlIgICAgICAgICgodXNob3J0KTB4MDAyMCkgICAgICAgIC8qIEJyZWFrIHJlY2VpdmVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCmluZGV4IDdiOTI4OTcuLmQ1YWI0ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCkBAIC00NDAsNyArNDQwLDcgQEAKICNkZWZpbmUgTlZfUlgzX1ZMQU5fVEFHX1BSRVNFTlQgKDE8PDE2KQogI2RlZmluZSBOVl9SWDNfVkxBTl9UQUdfTUFTSwkoMHgwMDAwRkZGRikKIAotLyogTWlzY2VsYW5lb3VzIGhhcmR3YXJlIHJlbGF0ZWQgZGVmaW5lczogKi8KKy8qIE1pc2NlbGxhbmVvdXMgaGFyZHdhcmUgcmVsYXRlZCBkZWZpbmVzOiAqLwogI2RlZmluZSBOVl9QQ0lfUkVHU1pfVkVSMQkweDI3MAogI2RlZmluZSBOVl9QQ0lfUkVHU1pfVkVSMgkweDJkNAogI2RlZmluZSBOVl9QQ0lfUkVHU1pfVkVSMwkweDYwNApAQCAtMTQ4OCw3ICsxNDg4LDcgQEAKIAkJfQogCX0KIAotCS8qIHNvbWUgcGh5cyBjbGVhciBvdXQgcGF1c2UgYWR2ZXJ0aXNtZW50IG9uIHJlc2V0LCBzZXQgaXQgYmFjayAqLworCS8qIHNvbWUgcGh5cyBjbGVhciBvdXQgcGF1c2UgYWR2ZXJ0aXNlbWVudCBvbiByZXNldCwgc2V0IGl0IGJhY2sgKi8KIAltaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0FEVkVSVElTRSwgcmVnKTsKIAogCS8qIHJlc3RhcnQgYXV0byBuZWdvdGlhdGlvbiwgcG93ZXIgZG93biBwaHkgKi8KQEAgLTI1MzUsNyArMjUzNSw3IEBACiAJZWxzZQogCQludl90eF9kb25lX29wdGltaXplZChkZXYsIG5wLT50eF9yaW5nX3NpemUpOwogCi0JLyogc2F2ZSBjdXJyZW50IEhXIHBvc3Rpb24gKi8KKwkvKiBzYXZlIGN1cnJlbnQgSFcgcG9zaXRpb24gKi8KIAlpZiAobnAtPnR4X2NoYW5nZV9vd25lcikKIAkJcHV0X3R4LmV4ID0gbnAtPnR4X2NoYW5nZV9vd25lci0+Zmlyc3RfdHhfZGVzYzsKIAllbHNlCkBAIC00MDUzLDcgKzQwNTMsNyBAQAogCiAJfSBlbHNlIGlmIChlY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSkgewogCQkvKiBOb3RlOiBhdXRvbmVnb3RpYXRpb24gZGlzYWJsZSwgc3BlZWQgMTAwMCBpbnRlbnRpb25hbGx5Ci0JCSAqIGZvcmJpZGRlbiAtIG5vb25lIHNob3VsZCBuZWVkIHRoYXQuICovCisJCSAqIGZvcmJpZGRlbiAtIG5vIG9uZSBzaG91bGQgbmVlZCB0aGF0LiAqLwogCiAJCWlmIChlY21kLT5zcGVlZCAhPSBTUEVFRF8xMCAmJiBlY21kLT5zcGVlZCAhPSBTUEVFRF8xMDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQxMDMsNyArNDEwMyw3IEBACiAJCQlhZHYgfD0gQURWRVJUSVNFXzEwMEhBTEY7CiAJCWlmIChlY21kLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCkKIAkJCWFkdiB8PSBBRFZFUlRJU0VfMTAwRlVMTDsKLQkJaWYgKG5wLT5wYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfUlhfUkVRKSAgLyogZm9yIHJ4IHdlIHNldCBib3RoIGFkdmVydGlzbWVudHMgYnV0IGRpc2FibGUgdHggcGF1c2UgKi8KKwkJaWYgKG5wLT5wYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfUlhfUkVRKSAgLyogZm9yIHJ4IHdlIHNldCBib3RoIGFkdmVydGlzZW1lbnRzIGJ1dCBkaXNhYmxlIHR4IHBhdXNlICovCiAJCQlhZHYgfD0gIEFEVkVSVElTRV9QQVVTRV9DQVAgfCBBRFZFUlRJU0VfUEFVU0VfQVNZTTsKIAkJaWYgKG5wLT5wYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfVFhfUkVRKQogCQkJYWR2IHw9ICBBRFZFUlRJU0VfUEFVU0VfQVNZTTsKQEAgLTQxNDgsNyArNDE0OCw3IEBACiAJCWlmIChlY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAgJiYgZWNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQogCQkJYWR2IHw9IEFEVkVSVElTRV8xMDBGVUxMOwogCQlucC0+cGF1c2VfZmxhZ3MgJj0gfihOVl9QQVVTRUZSQU1FX0FVVE9ORUd8TlZfUEFVU0VGUkFNRV9SWF9FTkFCTEV8TlZfUEFVU0VGUkFNRV9UWF9FTkFCTEUpOwotCQlpZiAobnAtPnBhdXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9SWF9SRVEpIHsvKiBmb3Igcnggd2Ugc2V0IGJvdGggYWR2ZXJ0aXNtZW50cyBidXQgZGlzYWJsZSB0eCBwYXVzZSAqLworCQlpZiAobnAtPnBhdXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9SWF9SRVEpIHsvKiBmb3Igcnggd2Ugc2V0IGJvdGggYWR2ZXJ0aXNlbWVudHMgYnV0IGRpc2FibGUgdHggcGF1c2UgKi8KIAkJCWFkdiB8PSAgQURWRVJUSVNFX1BBVVNFX0NBUCB8IEFEVkVSVElTRV9QQVVTRV9BU1lNOwogCQkJbnAtPnBhdXNlX2ZsYWdzIHw9IE5WX1BBVVNFRlJBTUVfUlhfRU5BQkxFOwogCQl9CkBAIC00NDQ5LDcgKzQ0NDksNyBAQAogCiAJCWFkdiA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQURWRVJUSVNFLCBNSUlfUkVBRCk7CiAJCWFkdiAmPSB+KEFEVkVSVElTRV9QQVVTRV9DQVAgfCBBRFZFUlRJU0VfUEFVU0VfQVNZTSk7Ci0JCWlmIChucC0+cGF1c2VfZmxhZ3MgJiBOVl9QQVVTRUZSQU1FX1JYX1JFUSkgLyogZm9yIHJ4IHdlIHNldCBib3RoIGFkdmVydGlzbWVudHMgYnV0IGRpc2FibGUgdHggcGF1c2UgKi8KKwkJaWYgKG5wLT5wYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfUlhfUkVRKSAvKiBmb3Igcnggd2Ugc2V0IGJvdGggYWR2ZXJ0aXNlbWVudHMgYnV0IGRpc2FibGUgdHggcGF1c2UgKi8KIAkJCWFkdiB8PSAgQURWRVJUSVNFX1BBVVNFX0NBUCB8IEFEVkVSVElTRV9QQVVTRV9BU1lNOwogCQlpZiAobnAtPnBhdXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9UWF9SRVEpCiAJCQlhZHYgfD0gIEFEVkVSVElTRV9QQVVTRV9BU1lNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKaW5kZXggMjRjYjk1My4uNTEzMWU2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCkBAIC05OTgsOCArOTk4LDEwIEBACiAjZW5kaWYKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZzX2VuZXRfbWF0Y2hbXTsKIHN0YXRpYyBpbnQgX19kZXZpbml0IGZzX2VuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpCiB7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CiAJc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSAqZmVwOwogCXN0cnVjdCBmc19wbGF0Zm9ybV9pbmZvICpmcGk7CkBAIC0xMDA3LDE0ICsxMDA5LDE1IEBACiAJY29uc3QgdTggKm1hY19hZGRyOwogCWludCBwcml2c2l6ZSwgbGVuLCByZXQgPSAtRU5PREVWOwogCi0JaWYgKCFvZmRldi0+ZGV2Lm9mX21hdGNoKQorCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKGZzX2VuZXRfbWF0Y2gsICZvZmRldi0+ZGV2KTsKKwlpZiAoIW1hdGNoKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWZwaSA9IGt6YWxsb2Moc2l6ZW9mKCpmcGkpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWZwaSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoIUlTX0ZFQyhvZmRldi0+ZGV2Lm9mX21hdGNoKSkgeworCWlmICghSVNfRkVDKG1hdGNoKSkgewogCQlkYXRhID0gb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5kZXYub2Zfbm9kZSwgImZzbCxjcG0tY29tbWFuZCIsICZsZW4pOwogCQlpZiAoIWRhdGEgfHwgbGVuICE9IDQpCiAJCQlnb3RvIG91dF9mcmVlX2ZwaTsKQEAgLTEwNDksNyArMTA1Miw3IEBACiAJZmVwLT5kZXYgPSAmb2ZkZXYtPmRldjsKIAlmZXAtPm5kZXYgPSBuZGV2OwogCWZlcC0+ZnBpID0gZnBpOwotCWZlcC0+b3BzID0gb2ZkZXYtPmRldi5vZl9tYXRjaC0+ZGF0YTsKKwlmZXAtPm9wcyA9IG1hdGNoLT5kYXRhOwogCiAJcmV0ID0gZmVwLT5vcHMtPnNldHVwX2RhdGEobmRldik7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZlYy5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmVjLmMKaW5kZXggNjEwMzVmYy4uYjlmYmM4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmVjLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmVjLmMKQEAgLTIyNiw4ICsyMjYsOCBAQAogCX0KIAogCUZDKGZlY3AsIHJfY250cmwsIEZFQ19SQ05UUkxfUFJPTSk7Ci0JRlcoZmVjcCwgaGFzaF90YWJsZV9oaWdoLCBmZXAtPmZlYy5odGhpKTsKLQlGVyhmZWNwLCBoYXNoX3RhYmxlX2xvdywgZmVwLT5mZWMuaHRsbyk7CisJRlcoZmVjcCwgZ3JwX2hhc2hfdGFibGVfaGlnaCwgZmVwLT5mZWMuaHRoaSk7CisJRlcoZmVjcCwgZ3JwX2hhc2hfdGFibGVfbG93LCBmZXAtPmZlYy5odGxvKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0yNzMsOCArMjczLDggQEAKIAkvKgogCSAqIFJlc2V0IGFsbCBtdWx0aWNhc3QuCiAJICovCi0JRlcoZmVjcCwgaGFzaF90YWJsZV9oaWdoLCBmZXAtPmZlYy5odGhpKTsKLQlGVyhmZWNwLCBoYXNoX3RhYmxlX2xvdywgZmVwLT5mZWMuaHRsbyk7CisJRlcoZmVjcCwgZ3JwX2hhc2hfdGFibGVfaGlnaCwgZmVwLT5mZWMuaHRoaSk7CisJRlcoZmVjcCwgZ3JwX2hhc2hfdGFibGVfbG93LCBmZXAtPmZlYy5odGxvKTsKIAogCS8qCiAJICogU2V0IG1heGltdW0gcmVjZWl2ZSBidWZmZXIgc2l6ZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWlpLWZlYy5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktZmVjLmMKaW5kZXggN2U4NDBkMy4uNmEyZTE1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktZmVjLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktZmVjLmMKQEAgLTEwMSwxNyArMTAxLDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZzX2VuZXRfbWRpb19mZWNfbWF0Y2hbXTsKIHN0YXRpYyBpbnQgX19kZXZpbml0IGZzX2VuZXRfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldikKIHsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKIAlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwogCXN0cnVjdCBtaWlfYnVzICpuZXdfYnVzOwogCXN0cnVjdCBmZWNfaW5mbyAqZmVjOwogCWludCAoKmdldF9idXNfZnJlcSkoc3RydWN0IGRldmljZV9ub2RlICopOwogCWludCByZXQgPSAtRU5PTUVNLCBjbG9jaywgc3BlZWQ7CiAKLQlpZiAoIW9mZGV2LT5kZXYub2ZfbWF0Y2gpCisJbWF0Y2ggPSBvZl9tYXRjaF9kZXZpY2UoZnNfZW5ldF9tZGlvX2ZlY19tYXRjaCwgJm9mZGV2LT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwotCWdldF9idXNfZnJlcSA9IG9mZGV2LT5kZXYub2ZfbWF0Y2gtPmRhdGE7CisJZ2V0X2J1c19mcmVxID0gbWF0Y2gtPmRhdGE7CiAKIAluZXdfYnVzID0gbWRpb2J1c19hbGxvYygpOwogCWlmICghbmV3X2J1cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Z0bWFjMTAwLmMgYi9kcml2ZXJzL25ldC9mdG1hYzEwMC5jCmluZGV4IGEzMTY2MTkuLjliZDc3NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Z0bWFjMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvZnRtYWMxMDAuYwpAQCAtMTM5LDExICsxMzksMTEgQEAKIAkJCSAqIHRoYXQgaGFyZHdhcmUgcmVzZXQgY29tcGxldGVkICh3aGF0IHRoZSBmKmNrKS4KIAkJCSAqIFdlIHN0aWxsIG5lZWQgdG8gd2FpdCBmb3IgYSB3aGlsZS4KIAkJCSAqLwotCQkJdXNsZWVwX3JhbmdlKDUwMCwgMTAwMCk7CisJCQl1ZGVsYXkoNTAwKTsKIAkJCXJldHVybiAwOwogCQl9CiAKLQkJdXNsZWVwX3JhbmdlKDEwMDAsIDEwMDAwKTsKKwkJdWRlbGF5KDEwMDApOwogCX0KIAogCW5ldGRldl9lcnIobmV0ZGV2LCAic29mdHdhcmUgcmVzZXQgZmFpbGVkXG4iKTsKQEAgLTc3Miw3ICs3NzIsNyBAQAogCQlpZiAoKHBoeWNyICYgRlRNQUMxMDBfUEhZQ1JfTUlJUkQpID09IDApCiAJCQlyZXR1cm4gcGh5Y3IgJiBGVE1BQzEwMF9QSFlDUl9NSUlSREFUQTsKIAotCQl1c2xlZXBfcmFuZ2UoMTAwLCAxMDAwKTsKKwkJdWRlbGF5KDEwMCk7CiAJfQogCiAJbmV0ZGV2X2VycihuZXRkZXYsICJtZGlvIHJlYWQgdGltZWQgb3V0XG4iKTsKQEAgLTgwMSw3ICs4MDEsNyBAQAogCQlpZiAoKHBoeWNyICYgRlRNQUMxMDBfUEhZQ1JfTUlJV1IpID09IDApCiAJCQlyZXR1cm47CiAKLQkJdXNsZWVwX3JhbmdlKDEwMCwgMTAwMCk7CisJCXVkZWxheSgxMDApOwogCX0KIAogCW5ldGRldl9lcnIobmV0ZGV2LCAibWRpbyB3cml0ZSB0aW1lZCBvdXRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5oIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5oCmluZGV4IGVjNWQ1OTUuLmIyZmU3ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuaAorKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmgKQEAgLTEwNDMsNyArMTA0Myw3IEBACiB9OwogCiAvKiBTdHJ1Y3Qgc3RvbGVuIGFsbW9zdCBjb21wbGV0ZWx5IChhbmQgc2hhbWVsZXNzbHkpIGZyb20gdGhlIEZDQyBlbmV0IHNvdXJjZQotICogKE9rLCB0aGF0J3Mgbm90IHNvIHRydWUgYW55bW9yZSwgYnV0IHRoZXJlIGlzIGEgZmFtaWx5IHJlc2VtYmxlbmNlKQorICogKE9rLCB0aGF0J3Mgbm90IHNvIHRydWUgYW55bW9yZSwgYnV0IHRoZXJlIGlzIGEgZmFtaWx5IHJlc2VtYmxhbmNlKQogICogVGhlIEdGQVIgYnVmZmVyIGRlc2NyaXB0b3JzIHRyYWNrIHRoZSByaW5nIGJ1ZmZlcnMuICBUaGUgcnhfYmRfYmFzZQogICogYW5kIHR4X2JkX2Jhc2UgYWx3YXlzIHBvaW50IHRvIHRoZSBjdXJyZW50bHkgYXZhaWxhYmxlIGJ1ZmZlci4KICAqIFRoZSBkaXJ0eV90eCB0cmFja3MgdGhlIGN1cnJlbnQgYnVmZmVyIHRoYXQgaXMgYmVpbmcgc2VudCBieSB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vTWFrZWZpbGUKaW5kZXggOWRlZjg2Ny4uMTA0MDk2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjCiAjCiAjIDE5OTcxMTMwIAlNb3ZlZCB0aGUgYW1hdGV1ciByYWRpbyByZWxhdGVkIG5ldHdvcmsgZHJpdmVycyBmcm9tIAotIwkJZHJpdmVycy9uZXQvIHRvIGRyaXZlcnMvaGFtcmFkaW8gZm9yIGVhc2llciBtYWludGFpbmFuY2UuCisjCQlkcml2ZXJzL25ldC8gdG8gZHJpdmVycy9oYW1yYWRpbyBmb3IgZWFzaWVyIG1haW50ZW5hbmNlLgogIyAgICAgICAgICAgICAgIEpvZXJnIFJldXRlciBETDFCS0UgPGpyZXV0ZXJAeWFpbmEuZGU+CiAjCiAjIDIwMDAwODA2CVJld3JpdHRlbiB0byB1c2UgbGlzdHMgaW5zdGVhZCBvZiBpZi1zdGF0ZW1lbnRzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYwppbmRleCA3ZDljZWQwLi45NmE5OGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYwpAQCAtMzAsNyArMzAsNyBAQAogICogICAwLjEgRjFPQVQgMDcuMDYuOTggIEFkZCB0aW1lciBwb2xsaW5nIHJvdXRpbmUgZm9yIGNoYW5uZWwgYXJiaXRyYXRpb24KICAqICAgMC4yIEY2RkJCIDA4LjA2Ljk4ICBBZGRlZCBkZWxheSBhZnRlciBGUEdBIHByb2dyYW1taW5nCiAgKiAgIDAuMyBGNkZCQiAyOS4wNy45OCAgRGVsYXllZCBQVFQgaW1wbGVtZW50YXRpb24gZm9yIGR1cG1vZGU9MgotICogICAwLjQgRjZGQkIgMzAuMDcuOTggIEFkZGVkIFR4VGFpbCwgU2xvdHRpbWUgYW5kIFBlcnNpc3RhbmNlCisgKiAgIDAuNCBGNkZCQiAzMC4wNy45OCAgQWRkZWQgVHhUYWlsLCBTbG90dGltZSBhbmQgUGVyc2lzdGVuY2UKICAqICAgMC41IEY2RkJCIDAxLjA4Ljk4ICBTaGFyZWQgSVJRcywgL3Byb2MvbmV0IGFuZCBuZXR3b3JrIHN0YXRpc3RpY3MKICAqICAgMC42IEY2RkJCIDI1LjA4Ljk4ICBBZGRlZCAxMjAwQmRzIGZvcm1hdAogICogICAwLjcgRjZGQkIgMTIuMDkuOTggIEFkZGVkIHRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHAxMDAuYyBiL2RyaXZlcnMvbmV0L2hwMTAwLmMKaW5kZXggOGUyYzQ2MC4uOGUxMGQyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHAxMDAuYworKysgYi9kcml2ZXJzL25ldC9ocDEwMC5jCkBAIC0xODAsOCArMTgwLDggQEAKIAogCXVfaW50ICpwYWdlX3ZhZGRyX2FsZ247CS8qIEFsaWduZWQgdmlydHVhbCBhZGRyZXNzIG9mIGFsbG9jYXRlZCBwYWdlICovCiAJdV9sb25nIHdoYXRldmVyX29mZnNldDsJLyogT2Zmc2V0IHRvIGJ1cy9waHlzL2RtYSBhZGRyZXNzICovCi0JaW50IHJ4cmNvbW1pdDsJCS8qICMgUnggUERMcyBjb21taXRlZCB0byBhZGFwdGVyICovCi0JaW50IHR4cmNvbW1pdDsJCS8qICMgVHggUERMcyBjb21taXRlZCB0byBhZGFwdGVyICovCisJaW50IHJ4cmNvbW1pdDsJCS8qICMgUnggUERMcyBjb21taXR0ZWQgdG8gYWRhcHRlciAqLworCWludCB0eHJjb21taXQ7CQkvKiAjIFR4IFBETHMgY29tbWl0dGVkIHRvIGFkYXB0ZXIgKi8KIH07CiAKIC8qCkBAIC03MTYsNyArNzE2LDcgQEAKIAkgKiBpbXBsZW1lbnRlZC90ZXN0ZWQgb25seSB3aXRoIHRoZSBsYXNzZW4gY2hpcCBhbnl3YXkuLi4gKi8KIAlpZiAobHAtPm1vZGUgPT0gMSkgewkvKiBidXNtYXN0ZXIgKi8KIAkJZG1hX2FkZHJfdCBwYWdlX2JhZGRyOwotCQkvKiBHZXQgcGh5c2ljYWxseSBjb250aW5vdXMgbWVtb3J5IGZvciBUWCAmIFJYIFBETHMgICAgKi8KKwkJLyogR2V0IHBoeXNpY2FsbHkgY29udGludW91cyBtZW1vcnkgZm9yIFRYICYgUlggUERMcyAgICAqLwogCQkvKiBDb252ZXJzaW9uIHRvIG5ldyBQQ0kgQVBJIDoKIAkJICogUGFnZXMgYXJlIGFsd2F5cyBhbGlnbmVkIGFuZCB6ZXJvZWQsIG5vIG5lZWQgdG8gaXQgb3Vyc2VsZi4KIAkJICogRG9jIHNheXMgc2hvdWxkIGJlIE9LIGZvciBFSVNBIGJ1cyBhcyB3ZWxsIC0gSmVhbiBJSSAqLwpAQCAtMTU5Niw3ICsxNTk2LDcgQEAKIAogLyogY2xlYW5fdHhyaW5nIGNoZWNrcyBpZiBwYWNrZXRzIGhhdmUgYmVlbiBzZW50IGJ5IHRoZSBjYXJkIGJ5IHJlYWRpbmcKICAqIHRoZSBUWF9QREwgcmVnaXN0ZXIgZnJvbSB0aGUgcGVyZm9ybWFuY2UgcGFnZSBhbmQgY29tcGFyaW5nIGl0IHRvIHRoZQotICogbnVtYmVyIG9mIGNvbW1pdGVkIHBhY2tldHMuIEl0IHRoZW4gZnJlZXMgdGhlIHNrYidzIG9mIHRoZSBwYWNrZXRzIHRoYXQKKyAqIG51bWJlciBvZiBjb21taXR0ZWQgcGFja2V0cy4gSXQgdGhlbiBmcmVlcyB0aGUgc2tiJ3Mgb2YgdGhlIHBhY2tldHMgdGhhdAogICogb2J2aW91c2x5IGhhdmUgYmVlbiBzZW50IHRvIHRoZSBuZXR3b3JrLgogICoKICAqIE5lZWRzIHRoZSBQRVJGT1JNQU5DRSBwYWdlIHNlbGVjdGVkLgpAQCAtMTYxNyw3ICsxNjE3LDcgQEAKIAogI2lmZGVmIEhQMTAwX0RFQlVHCiAJaWYgKGRvbmVjb3VudCA+IE1BWF9UWF9QREwpCi0JCXByaW50aygiaHAxMDA6ICVzOiBXYXJuaW5nOiBNb3JlIFBETHMgdHJhbnNtaXR0ZWQgdGhhbiBjb21taXRlZCB0byBjYXJkPz8/XG4iLCBkZXYtPm5hbWUpOworCQlwcmludGsoImhwMTAwOiAlczogV2FybmluZzogTW9yZSBQRExzIHRyYW5zbWl0dGVkIHRoYW4gY29tbWl0dGVkIHRvIGNhcmQ/Pz9cbiIsIGRldi0+bmFtZSk7CiAjZW5kaWYKIAogCWZvciAoOyAwICE9IGRvbmVjb3VudDsgZG9uZWNvdW50LS0pIHsKQEAgLTE3NjUsNyArMTc2NSw3IEBACiAgKiBSZWNlaXZlIEZ1bmN0aW9uIChOb24tQnVzbWFzdGVyIG1vZGUpCiAgKiBDYWxsZWQgd2hlbiBhbiAiUmVjZWl2ZSBQYWNrZXQiIGludGVycnVwdCBvY2N1cnMsIGkuZS4gdGhlIHJlY2VpdmUKICAqIHBhY2tldCBjb3VudGVyIGlzIG5vbi16ZXJvLgotICogRm9yIG5vbi1idXNtYXN0ZXIsIHRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgd2hvbGUgd29yayBvZiB0cmFuc2ZlcmluZworICogRm9yIG5vbi1idXNtYXN0ZXIsIHRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgd2hvbGUgd29yayBvZiB0cmFuc2ZlcnJpbmcKICAqIHRoZSBwYWNrZXQgdG8gdGhlIGhvc3QgbWVtb3J5IGFuZCB0aGVuIHVwIHRvIGhpZ2hlciBsYXllcnMgdmlhIHNrYgogICogYW5kIG5ldGlmX3J4LgogICovCkBAIC0xODkyLDcgKzE4OTIsNyBAQAogCQkvKiBSWF9QS1RfQ05UIHN0YXRlcyBob3cgbWFueSBQRExzIGFyZSBjdXJyZW50bHkgZm9ybWF0dGVkIGFuZCBhdmFpbGFibGUgdG8KIAkJICogdGhlIGNhcmRzIEJNIGVuZ2luZSAqLwogCWlmICgoaHAxMDBfaW53KFJYX1BLVF9DTlQpICYgMHgwMGZmKSA+PSBscC0+cnhyY29tbWl0KSB7Ci0JCXByaW50aygiaHAxMDA6ICVzOiBNb3JlIHBhY2tldHMgcmVjZWl2ZWQgdGhhbiBjb21taXRlZD8gUlhfUEtUX0NOVD0weCV4LCBjb21taXQ9MHgleFxuIiwKKwkJcHJpbnRrKCJocDEwMDogJXM6IE1vcmUgcGFja2V0cyByZWNlaXZlZCB0aGFuIGNvbW1pdHRlZD8gUlhfUEtUX0NOVD0weCV4LCBjb21taXQ9MHgleFxuIiwKIAkJCQkgICAgIGRldi0+bmFtZSwgaHAxMDBfaW53KFJYX1BLVF9DTlQpICYgMHgwMGZmLAogCQkJCSAgICAgbHAtPnJ4cmNvbW1pdCk7CiAJCXJldHVybjsKQEAgLTIyNTYsNyArMjI1Niw3IEBACiAJCWlmIChscC0+bW9kZSAhPSAxKQkvKiBub24gYnVzbWFzdGVyICovCiAJCQlocDEwMF9yeChkZXYpOwogCQllbHNlIGlmICghKHZhbCAmIEhQMTAwX1JYX1BETF9GSUxMX0NPTVBMKSkgewotCQkJLyogU2hvdWxkbnQgaGFwcGVuIC0gbWF5YmUgd2UgbWlzc2VkIGEgUlhfUERMX0ZJTEwgSW50ZXJydXB0PyAgKi8KKwkJCS8qIFNob3VsZG4ndCBoYXBwZW4gLSBtYXliZSB3ZSBtaXNzZWQgYSBSWF9QRExfRklMTCBJbnRlcnJ1cHQ/ICAqLwogCQkJaHAxMDBfcnhfYm0oZGV2KTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hwMTAwLmggYi9kcml2ZXJzL25ldC9ocDEwMC5oCmluZGV4IGU2Y2ExMjguLmI2MGU5NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hwMTAwLmgKKysrIGIvZHJpdmVycy9uZXQvaHAxMDAuaApAQCAtMTA5LDcgKzEwOSw3IEBACiAjZGVmaW5lIEhQMTAwX1JFR19NQUNfQ0ZHXzIJMHgwZAkvKiBSVzogKDgpIE1pc2MgTUFDIGZ1bmN0aW9ucyAgICAgICAgKi8KICNkZWZpbmUgSFAxMDBfUkVHX01BQ19DRkdfMyAgICAgMHgwZQkvKiBSVzogKDgpIE1pc2MgTUFDIGZ1bmN0aW9ucyAqLwogI2RlZmluZSBIUDEwMF9SRUdfTUFDX0NGR180ICAgICAweDBmCS8qIFI6ICAoOCkgTWlzYyBNQUMgc3RhdGVzICovCi0jZGVmaW5lIEhQMTAwX1JFR19EUk9QUEVECTB4MTAJLyogUjogICgxNiksMTE6MCBQa3RzIGNhbnQgZml0IGluIG1lbSAqLworI2RlZmluZSBIUDEwMF9SRUdfRFJPUFBFRAkweDEwCS8qIFI6ICAoMTYpLDExOjAgUGt0cyBjYW4ndCBmaXQgaW4gbWVtICovCiAjZGVmaW5lIEhQMTAwX1JFR19DUkMJCTB4MTIJLyogUjogICg4KSBQa3RzIHdpdGggQ1JDICAgICAgICAgICAgICovCiAjZGVmaW5lIEhQMTAwX1JFR19BQk9SVAkJMHgxMwkvKiBSOiAgKDgpIEFib3J0ZWQgVHggcGt0cyAgICAgICAgICAgKi8KICNkZWZpbmUgSFAxMDBfUkVHX1RSQUlOX1JFUVVFU1QgMHgxNAkvKiBSVzogKDE2KSBFbmRub2RlIE1BQyByZWdpc3Rlci4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2h5ZHJhLmMgYi9kcml2ZXJzL25ldC9oeWRyYS5jCmluZGV4IGM1ZWY2MmMuLjFjZDQ4MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2h5ZHJhLmMKKysrIGIvZHJpdmVycy9uZXQvaHlkcmEuYwpAQCAtOTgsMTUgKzk4LDE1IEBACiAJLm5kb19vcGVuCQk9IGh5ZHJhX29wZW4sCiAJLm5kb19zdG9wCQk9IGh5ZHJhX2Nsb3NlLAogCi0JLm5kb19zdGFydF94bWl0CQk9IGVpX3N0YXJ0X3htaXQsCi0JLm5kb190eF90aW1lb3V0CQk9IGVpX3R4X3RpbWVvdXQsCi0JLm5kb19nZXRfc3RhdHMJCT0gZWlfZ2V0X3N0YXRzLAotCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZWlfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fc3RhcnRfeG1pdAkJPSBfX2VpX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IF9fZWlfdHhfdGltZW91dCwKKwkubmRvX2dldF9zdGF0cwkJPSBfX2VpX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IF9fZWlfc2V0X211bHRpY2FzdF9saXN0LAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAotCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGV0aF9tYWNfYWRkciwKIAkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQkubmRvX3BvbGxfY29udHJvbGxlcgk9IGVpX3BvbGwsCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBfX2VpX3BvbGwsCiAjZW5kaWYKIH07CiAKQEAgLTEyNSw3ICsxMjUsNyBAQAogCTB4MTAsIDB4MTIsIDB4MTQsIDB4MTYsIDB4MTgsIDB4MWEsIDB4MWMsIDB4MWUsCiAgICAgfTsKIAotICAgIGRldiA9IGFsbG9jX2VpX25ldGRldigpOworICAgIGRldiA9IF9fX19hbGxvY19laV9uZXRkZXYoMCk7CiAgICAgaWYgKCFkZXYpCiAJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL3RhaC5jIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvdGFoLmMKaW5kZXggOGVhZDZhOS4uNWY1MWJmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvdGFoLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvdGFoLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVzZXQgdGltZW91dFxuIiwKIAkJCW9mZGV2LT5kZXYub2Zfbm9kZS0+ZnVsbF9uYW1lKTsKIAotCS8qIDEwS0IgVEFIIFRYIEZJRk8gYWNjb21vZGF0ZXMgdGhlIG1heCBNVFUgb2YgOTAwMCAqLworCS8qIDEwS0IgVEFIIFRYIEZJRk8gYWNjb21tb2RhdGVzIHRoZSBtYXggTVRVIG9mIDkwMDAgKi8KIAlvdXRfYmUzMigmcC0+bXIsCiAJCSBUQUhfTVJfQ1ZSIHwgVEFIX01SX1NUXzc2OCB8IFRBSF9NUl9URlNfMTBLQiB8IFRBSF9NUl9EVEZQIHwKIAkJIFRBSF9NUl9ESUcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtbGFuYS5jIGIvZHJpdmVycy9uZXQvaWJtbGFuYS5jCmluZGV4IDk0ZDk5NjkuLjhmZjY4YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libWxhbmEuYworKysgYi9kcml2ZXJzL25ldC9pYm1sYW5hLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAlzdGlsbCB3b3JrIHdpdGggMi4wLnguLi4uCiAgIEphbiAyOHRoLCAyMDAwCiAJaW4gTGludXggMi4yLjEzLCB0aGUgdmVyc2lvbi5oIGZpbGUgbXlzdGVyaW91c2x5IGRpZG4ndCBnZXQKLQlpbmNsdWRlZC4gIEFkZGVkIGEgd29ya2Fyb3VuZCBmb3IgdGhpcy4gIEZ1dGhlcm1vcmUsIGl0IG5vdworCWluY2x1ZGVkLiAgQWRkZWQgYSB3b3JrYXJvdW5kIGZvciB0aGlzLiAgRnVydGhlcm1vcmUsIGl0IG5vdwogCW5vdCBvbmx5IGNvbXBpbGVzIGFzIGEgbW9kdWxlcyA7LSkKICAgSmFuIDMwdGgsIDIwMDAKIAluZXdlciBrZXJuZWxzIGF1dG9tYXRpY2FsbHkgcHJvYmUgbW9yZSB0aGFuIG9uZSBib2FyZCwgc28gdGhlCkBAIC00ODEsNyArNDgxLDcgQEAKIAlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8IG5ldGRldl9tY19jb3VudChkZXYpID4gY2FtY250KQogCQlyY3J2YWwgfD0gUkNSRUdfQU1DOwogCi0JLyogcHJvbWlzY291cyBtb2RlID8gKi8KKwkvKiBwcm9taXNjdW91cyBtb2RlID8gKi8KIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCiAJCXJjcnZhbCB8PSBSQ1JFR19QUk87CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1sYW5hLmggYi9kcml2ZXJzL25ldC9pYm1sYW5hLmgKaW5kZXggYWEzZGRiZC4uYWNjZDVlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtbGFuYS5oCisrKyBiL2RyaXZlcnMvbmV0L2libWxhbmEuaApAQCAtOTAsNyArOTAsNyBAQAogI2RlZmluZSBSQ1JFR19FUlIgICAgICAgIDB4ODAwMAkvKiBhY2NlcHQgZGFtYWdlZCBhbmQgY29sbGlkZWQgcGt0cyAqLwogI2RlZmluZSBSQ1JFR19STlQgICAgICAgIDB4NDAwMAkvKiBhY2NlcHQgcGFja2V0cyB0aGF0IGFyZSA8IDY0ICAgICAqLwogI2RlZmluZSBSQ1JFR19CUkQgICAgICAgIDB4MjAwMAkvKiBhY2NlcHQgYnJvYWRjYXN0cyAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBSQ1JFR19QUk8gICAgICAgIDB4MTAwMAkvKiBwcm9taXNjb3VzIG1vZGUgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBSQ1JFR19QUk8gICAgICAgIDB4MTAwMAkvKiBwcm9taXNjdW91cyBtb2RlICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgUkNSRUdfQU1DICAgICAgICAweDA4MDAJLyogYWNjZXB0IGFsbCBtdWx0aWNhc3RzICAgICAgICAgICAgKi8KICNkZWZpbmUgUkNSRUdfTEJfTk9ORSAgICAweDAwMDAJLyogbm8gbG9vcGJhY2sgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgUkNSRUdfTEJfTUFDICAgICAweDAyMDAJLyogTUFDIGxvb3BiYWNrICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuYyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuYwppbmRleCA5MGM1ZTAxLi5jZTgyNTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5jCkBAIC0xODEsNyArMTgxLDcgQEAKICAqICBhZGRyZXNzIGFuZCBtdXN0IG92ZXJyaWRlIHRoZSBhY3R1YWwgcGVybWFuZW50IE1BQyBhZGRyZXNzLiAgSWYgYW4KICAqICBhbHRlcm5hdGUgTUFDIGFkZHJlc3MgaXMgZm9wdW5kIGl0IGlzIHNhdmVkIGluIHRoZSBodyBzdHJ1Y3QgYW5kCiAgKiAgcHJncmFtbWVkIGludG8gUkFSMCBhbmQgdGhlIGN1bnRpb24gcmV0dXJucyBzdWNjZXNzLCBvdGhlcndpc2UgdGhlCi0gKiAgZnVjbnRpb24gcmV0dXJucyBhbiBlcnJvci4KKyAqICBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yLgogICoqLwogczMyIGlnYl9jaGVja19hbHRfbWFjX2FkZHIoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKQEAgLTk4Miw3ICs5ODIsNyBAQAogfQogCiAvKioKLSAqICBpZ2JfZ2V0X3NwZWVkX2FuZF9kdXBsZXhfY29wcGVyIC0gUmV0cmVpdmUgY3VycmVudCBzcGVlZC9kdXBsZXgKKyAqICBpZ2JfZ2V0X3NwZWVkX2FuZF9kdXBsZXhfY29wcGVyIC0gUmV0cmlldmUgY3VycmVudCBzcGVlZC9kdXBsZXgKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBzcGVlZDogc3RvcmVzIHRoZSBjdXJyZW50IHNwZWVkCiAgKiAgQGR1cGxleDogc3RvcmVzIHRoZSBjdXJyZW50IGR1cGxleApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jCmluZGV4IDY2OTRiZjMuLmQ2Mzk3MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmMKQEAgLTE0MjEsNyArMTQyMSw3IEBACiB9CiAKIC8qKgotICogIGlnYl9jaGVja19kb3duc2hpZnQgLSBDaGVja3Mgd2hldGhlciBhIGRvd25zaGlmdCBpbiBzcGVlZCBvY2N1cmVkCisgKiAgaWdiX2NoZWNrX2Rvd25zaGlmdCAtIENoZWNrcyB3aGV0aGVyIGEgZG93bnNoaWZ0IGluIHNwZWVkIG9jY3VycmVkCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCiAgKiAgU3VjY2VzcyByZXR1cm5zIDAsIEZhaWx1cmUgcmV0dXJucyAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCmluZGV4IDNkODUwYWYuLjBkZmQxYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCkBAIC0yMDAsNyArMjAwLDcgQEAKIAkucHJvYmUgICAgPSBpZ2JfcHJvYmUsCiAJLnJlbW92ZSAgID0gX19kZXZleGl0X3AoaWdiX3JlbW92ZSksCiAjaWZkZWYgQ09ORklHX1BNCi0JLyogUG93ZXIgTWFuYWdtZW50IEhvb2tzICovCisJLyogUG93ZXIgTWFuYWdlbWVudCBIb29rcyAqLwogCS5zdXNwZW5kICA9IGlnYl9zdXNwZW5kLAogCS5yZXN1bWUgICA9IGlnYl9yZXN1bWUsCiAjZW5kaWYKQEAgLTIyOTIsNyArMjI5Miw3IEBACiAJCS8qKgogCQkgKiBTY2FsZSB0aGUgTklDIGNsb2NrIGN5Y2xlIGJ5IGEgbGFyZ2UgZmFjdG9yIHNvIHRoYXQKIAkJICogcmVsYXRpdmVseSBzbWFsbCBjbG9jayBjb3JyZWN0aW9ucyBjYW4gYmUgYWRkZWQgb3IKLQkJICogc3Vic3RyYWN0ZWQgYXQgZWFjaCBjbG9jayB0aWNrLiBUaGUgZHJhd2JhY2tzIG9mIGEgbGFyZ2UKKwkJICogc3VidHJhY3RlZCBhdCBlYWNoIGNsb2NrIHRpY2suIFRoZSBkcmF3YmFja3Mgb2YgYSBsYXJnZQogCQkgKiBmYWN0b3IgYXJlIGEpIHRoYXQgdGhlIGNsb2NrIHJlZ2lzdGVyIG92ZXJmbG93cyBtb3JlIHF1aWNrbHkKIAkJICogKG5vdCBzdWNoIGEgYmlnIGRlYWwpIGFuZCBiKSB0aGF0IHRoZSBpbmNyZW1lbnQgcGVyIHRpY2sgaGFzCiAJCSAqIHRvIGZpdCBpbnRvIDI0IGJpdHMuICBBcyBhIHJlc3VsdCB3ZSBuZWVkIHRvIHVzZSBhIHNoaWZ0IG9mCkBAIC0zNDA5LDcgKzM0MDksNyBAQAogCQl9IGVsc2UgewogCQkJLyoKIAkJCSAqIFdyaXRlIGFkZHJlc3NlcyB0byB0aGUgTVRBLCBpZiB0aGUgYXR0ZW1wdCBmYWlscwotCQkJICogdGhlbiB3ZSBzaG91bGQganVzdCB0dXJuIG9uIHByb21pc2NvdXMgbW9kZSBzbworCQkJICogdGhlbiB3ZSBzaG91bGQganVzdCB0dXJuIG9uIHByb21pc2N1b3VzIG1vZGUgc28KIAkJCSAqIHRoYXQgd2UgY2FuIGF0IGxlYXN0IHJlY2VpdmUgbXVsdGljYXN0IHRyYWZmaWMKIAkJCSAqLwogCQkJY291bnQgPSBpZ2Jfd3JpdGVfbWNfYWRkcl9saXN0KG5ldGRldik7CkBAIC0zNDIzLDcgKzM0MjMsNyBAQAogCQkvKgogCQkgKiBXcml0ZSBhZGRyZXNzZXMgdG8gYXZhaWxhYmxlIFJBUiByZWdpc3RlcnMsIGlmIHRoZXJlIGlzIG5vdAogCQkgKiBzdWZmaWNpZW50IHNwYWNlIHRvIHN0b3JlIGFsbCB0aGUgYWRkcmVzc2VzIHRoZW4gZW5hYmxlCi0JCSAqIHVuaWNhc3QgcHJvbWlzY291cyBtb2RlCisJCSAqIHVuaWNhc3QgcHJvbWlzY3VvdXMgbW9kZQogCQkgKi8KIAkJY291bnQgPSBpZ2Jfd3JpdGVfdWNfYWRkcl9saXN0KG5ldGRldik7CiAJCWlmIChjb3VudCA8IDApIHsKQEAgLTQzMTcsNyArNDMxNyw3IEBACiAKIAkvKgogCSAqIGNvdW50IHJlZmxlY3RzIGRlc2NyaXB0b3JzIG1hcHBlZCwgaWYgMCBvciBsZXNzIHRoZW4gbWFwcGluZyBlcnJvcgotCSAqIGhhcyBvY2N1cmVkIGFuZCB3ZSBuZWVkIHRvIHJld2luZCB0aGUgZGVzY3JpcHRvciBxdWV1ZQorCSAqIGhhcyBvY2N1cnJlZCBhbmQgd2UgbmVlZCB0byByZXdpbmQgdGhlIGRlc2NyaXB0b3IgcXVldWUKIAkgKi8KIAljb3VudCA9IGlnYl90eF9tYXBfYWR2KHR4X3JpbmcsIHNrYiwgZmlyc3QpOwogCWlmICghY291bnQpIHsKQEAgLTUzNTIsOCArNTM1Miw4IEBACiAgKiAgVGhlIHVuaWNhc3QgdGFibGUgYWRkcmVzcyBpcyBhIHJlZ2lzdGVyIGFycmF5IG9mIDMyLWJpdCByZWdpc3RlcnMuCiAgKiAgVGhlIHRhYmxlIGlzIG1lYW50IHRvIGJlIHVzZWQgaW4gYSB3YXkgc2ltaWxhciB0byBob3cgdGhlIE1UQSBpcyB1c2VkCiAgKiAgaG93ZXZlciBkdWUgdG8gY2VydGFpbiBsaW1pdGF0aW9ucyBpbiB0aGUgaGFyZHdhcmUgaXQgaXMgbmVjZXNzYXJ5IHRvCi0gKiAgc2V0IGFsbCB0aGUgaGFzaCBiaXRzIHRvIDEgYW5kIHVzZSB0aGUgVk1PTFIgUk9QRSBiaXQgYXMgYSBwcm9taXNjb3VzCi0gKiAgZW5hYmxlIGJpdCB0byBhbGxvdyB2bGFuIHRhZyBzdHJpcHBpbmcgd2hlbiBwcm9taXNjb3VzIG1vZGUgaXMgZW5hYmxlZAorICogIHNldCBhbGwgdGhlIGhhc2ggYml0cyB0byAxIGFuZCB1c2UgdGhlIFZNT0xSIFJPUEUgYml0IGFzIGEgcHJvbWlzY3VvdXMKKyAqICBlbmFibGUgYml0IHRvIGFsbG93IHZsYW4gdGFnIHN0cmlwcGluZyB3aGVuIHByb21pc2N1b3VzIG1vZGUgaXMgZW5hYmxlZAogICoqLwogc3RhdGljIHZvaWQgaWdiX3NldF91dGEoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9pZ2J2Zi9uZXRkZXYuYwppbmRleCA2Y2NjMzJmLi4xZDA0Y2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2J2Zi9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9pZ2J2Zi9uZXRkZXYuYwpAQCAtMjIyNyw3ICsyMjI3LDcgQEAKIAogCS8qCiAJICogY291bnQgcmVmbGVjdHMgZGVzY3JpcHRvcnMgbWFwcGVkLCBpZiAwIHRoZW4gbWFwcGluZyBlcnJvcgotCSAqIGhhcyBvY2N1cmVkIGFuZCB3ZSBuZWVkIHRvIHJld2luZCB0aGUgZGVzY3JpcHRvciBxdWV1ZQorCSAqIGhhcyBvY2N1cnJlZCBhbmQgd2UgbmVlZCB0byByZXdpbmQgdGhlIGRlc2NyaXB0b3IgcXVldWUKIAkgKi8KIAljb3VudCA9IGlnYnZmX3R4X21hcF9hZHYoYWRhcHRlciwgdHhfcmluZywgc2tiLCBmaXJzdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lwZy5jIGIvZHJpdmVycy9uZXQvaXBnLmMKaW5kZXggYTViMGYwZS4uNThjZDMyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXBnLmMKKysrIGIvZHJpdmVycy9uZXQvaXBnLmMKQEAgLTQ4NiwxNCArNDg2LDE0IEBACiAJcGh5Y3RybCA9IGlwZ19yOChQSFlfQ1RSTCk7CiAJbWFjX2N0cmxfdmFsID0gaXBnX3IzMihNQUNfQ1RSTCk7CiAKLQkvKiBTZXQgZmxhZ3MgZm9yIHVzZSBpbiByZXNvbHZpbmcgYXV0by1uZWdvdGF0aW9uLCBhc3N1bWluZworCS8qIFNldCBmbGFncyBmb3IgdXNlIGluIHJlc29sdmluZyBhdXRvLW5lZ290aWF0aW9uLCBhc3N1bWluZwogCSAqIG5vbi0xMDAwTWJwcywgaGFsZiBkdXBsZXgsIG5vIGZsb3cgY29udHJvbC4KIAkgKi8KIAlmdWxsZHVwbGV4ID0gMDsKIAl0eGZsb3djb250cm9sID0gMDsKIAlyeGZsb3djb250cm9sID0gMDsKIAotCS8qIFRvIGFjY29tb2RhdGUgYSBwcm9ibGVtIGluIDEwTWJwcyBvcGVyYXRpb24sCisJLyogVG8gYWNjb21tb2RhdGUgYSBwcm9ibGVtIGluIDEwTWJwcyBvcGVyYXRpb24sCiAJICogc2V0IGEgZ2xvYmFsIGZsYWcgaWYgUEhZIHJ1bm5pbmcgaW4gMTBNYnBzIG1vZGUuCiAJICovCiAJc3AtPnRlbm1icHNtb2RlID0gMDsKQEAgLTg0Niw3ICs4NDYsNyBAQAogfQogCiAvKgotICogRnJlZSBhbGwgdHJhbnNtaXQgYnVmZmVycyB3aGljaCBoYXZlIGFscmVhZHkgYmVlbiB0cmFuc2ZlcmVkCisgKiBGcmVlIGFsbCB0cmFuc21pdCBidWZmZXJzIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuIHRyYW5zZmVycmVkCiAgKiB2aWEgRE1BIHRvIHRoZSBJUEcuCiAgKi8KIHN0YXRpYyB2b2lkIGlwZ19uaWNfdHhmcmVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC05MjAsNyArOTIwLDcgQEAKIAogLyoKICAqIEZvciBUeENvbXBsZXRlIGludGVycnVwdHMsIGZyZWUgYWxsIHRyYW5zbWl0Ci0gKiBidWZmZXJzIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuIHRyYW5zZmVyZWQgdmlhIERNQQorICogYnVmZmVycyB3aGljaCBoYXZlIGFscmVhZHkgYmVlbiB0cmFuc2ZlcnJlZCB2aWEgRE1BCiAgKiB0byB0aGUgSVBHLgogICovCiBzdGF0aWMgdm9pZCBpcGdfbmljX3R4Y2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMTE0MSwxMyArMTE0MSwxMyBAQAogCiAJCS8qIEluY3JlbWVudCBkZXRhaWxlZCByZWNlaXZlIGVycm9yIHN0YXRpc3RpY3MuICovCiAJCWlmIChsZTY0X3RvX2NwdShyeGZkLT5yZnMpICYgSVBHX1JGU19SWEZJRk9PVkVSUlVOKSB7Ci0JCQlJUEdfREVCVUdfTVNHKCJSWCBGSUZPIG92ZXJydW4gb2NjdXJlZC5cbiIpOworCQkJSVBHX0RFQlVHX01TRygiUlggRklGTyBvdmVycnVuIG9jY3VycmVkLlxuIik7CiAKIAkJCXNwLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwogCQl9CiAKIAkJaWYgKGxlNjRfdG9fY3B1KHJ4ZmQtPnJmcykgJiBJUEdfUkZTX1JYUlVOVEZSQU1FKSB7Ci0JCQlJUEdfREVCVUdfTVNHKCJSWCBydW50IG9jY3VyZWQuXG4iKTsKKwkJCUlQR19ERUJVR19NU0coIlJYIHJ1bnQgb2NjdXJyZWQuXG4iKTsKIAkJCXNwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCX0KIApAQCAtMTE1Niw3ICsxMTU2LDcgQEAKIAkJICovCiAKIAkJaWYgKGxlNjRfdG9fY3B1KHJ4ZmQtPnJmcykgJiBJUEdfUkZTX1JYQUxJR05NRU5URVJST1IpIHsKLQkJCUlQR19ERUJVR19NU0coIlJYIGFsaWdubWVudCBlcnJvciBvY2N1cmVkLlxuIik7CisJCQlJUEdfREVCVUdfTVNHKCJSWCBhbGlnbm1lbnQgZXJyb3Igb2NjdXJyZWQuXG4iKTsKIAkJCXNwLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKIAkJfQogCkBAIC0xNDIxLDEyICsxNDIxLDEyIEBACiAKIAkJCS8qIEluY3JlbWVudCBkZXRhaWxlZCByZWNlaXZlIGVycm9yIHN0YXRpc3RpY3MuICovCiAJCQlpZiAobGU2NF90b19jcHUocnhmZC0+cmZzKSAmIElQR19SRlNfUlhGSUZPT1ZFUlJVTikgewotCQkJCUlQR19ERUJVR19NU0coIlJYIEZJRk8gb3ZlcnJ1biBvY2N1cmVkLlxuIik7CisJCQkJSVBHX0RFQlVHX01TRygiUlggRklGTyBvdmVycnVuIG9jY3VycmVkLlxuIik7CiAJCQkJc3AtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CiAJCQl9CiAKIAkJCWlmIChsZTY0X3RvX2NwdShyeGZkLT5yZnMpICYgSVBHX1JGU19SWFJVTlRGUkFNRSkgewotCQkJCUlQR19ERUJVR19NU0coIlJYIHJ1bnQgb2NjdXJlZC5cbiIpOworCQkJCUlQR19ERUJVR19NU0coIlJYIHJ1bnQgb2NjdXJyZWQuXG4iKTsKIAkJCQlzcC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQkJfQogCkBAIC0xNDM2LDcgKzE0MzYsNyBAQAogCQkJICovCiAKIAkJCWlmIChsZTY0X3RvX2NwdShyeGZkLT5yZnMpICYgSVBHX1JGU19SWEFMSUdOTUVOVEVSUk9SKSB7Ci0JCQkJSVBHX0RFQlVHX01TRygiUlggYWxpZ25tZW50IGVycm9yIG9jY3VyZWQuXG4iKTsKKwkJCQlJUEdfREVCVUdfTVNHKCJSWCBhbGlnbm1lbnQgZXJyb3Igb2NjdXJyZWQuXG4iKTsKIAkJCQlzcC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CiAJCQl9CiAKQEAgLTE0NjAsNyArMTQ2MCw3IEBACiAJCQl9CiAJCX0gZWxzZSB7CiAKLQkJCS8qIEFkanVzdCB0aGUgbmV3IGJ1ZmZlciBsZW5ndGggdG8gYWNjb21vZGF0ZSB0aGUgc2l6ZQorCQkJLyogQWRqdXN0IHRoZSBuZXcgYnVmZmVyIGxlbmd0aCB0byBhY2NvbW1vZGF0ZSB0aGUgc2l6ZQogCQkJICogb2YgdGhlIHJlY2VpdmVkIGZyYW1lLgogCQkJICovCiAJCQlza2JfcHV0KHNrYiwgZnJhbWVsZW4pOwpAQCAtMTQ4OCw3ICsxNDg4LDcgQEAKIAl9CiAKIAkvKgotCSAqIElmIHRoZXJlIGFyZSBtb3JlIFJGRHMgdG8gcHJvY2VzIGFuZCB0aGUgYWxsb2NhdGVkIGFtb3VudCBvZiBSRkQKKwkgKiBJZiB0aGVyZSBhcmUgbW9yZSBSRkRzIHRvIHByb2Nlc3MgYW5kIHRoZSBhbGxvY2F0ZWQgYW1vdW50IG9mIFJGRAogCSAqIHByb2Nlc3NpbmcgdGltZSBoYXMgZXhwaXJlZCwgYXNzZXJ0IEludGVycnVwdCBSZXF1ZXN0ZWQgdG8gbWFrZQogCSAqIHN1cmUgd2UgY29tZSBiYWNrIHRvIHByb2Nlc3MgdGhlIHJlbWFpbmluZyBSRkRzLgogCSAqLwpAQCAtMTg4Niw3ICsxODg2LDcgQEAKIAkvKiBSZXF1ZXN0IFR4Q29tcGxldGUgaW50ZXJydXB0cyBhdCBhbiBpbnRlcnZhbCBkZWZpbmVkCiAJICogYnkgdGhlIGNvbnN0YW50IElQR19GUkFNRVNCRVRXRUVOVFhDT01QTEVURVMuCiAJICogUmVxdWVzdCBUeENvbXBsZXRlIGludGVycnVwdCBmb3IgZXZlcnkgZnJhbWUKLQkgKiBpZiBpbiAxME1icHMgbW9kZSB0byBhY2NvbW9kYXRlIHByb2JsZW0gd2l0aCAxME1icHMKKwkgKiBpZiBpbiAxME1icHMgbW9kZSB0byBhY2NvbW1vZGF0ZSBwcm9ibGVtIHdpdGggMTBNYnBzCiAJICogcHJvY2Vzc2luZy4KIAkgKi8KIAlpZiAoc3AtPnRlbm1icHNtb2RlKQpAQCAtMjA5OCw3ICsyMDk4LDcgQEAKIAlzdHJ1Y3QgaXBnX25pY19wcml2YXRlICpzcCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGVycjsKIAotCS8qIEZ1bmN0aW9uIHRvIGFjY29tb2RhdGUgY2hhbmdlcyB0byBNYXhpbXVtIFRyYW5zZmVyIFVuaXQKKwkvKiBGdW5jdGlvbiB0byBhY2NvbW1vZGF0ZSBjaGFuZ2VzIHRvIE1heGltdW0gVHJhbnNmZXIgVW5pdAogCSAqIChvciBNVFUpIG9mIElQRyBOSUMuIENhbm5vdCB1c2UgZGVmYXVsdCBmdW5jdGlvbiBzaW5jZQogCSAqIHRoZSBkZWZhdWx0IHdpbGwgbm90IGFsbG93IGZvciBNVFUgPiAxNTAwIGJ5dGVzLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9hbGktaXJjYy5jIGIvZHJpdmVycy9uZXQvaXJkYS9hbGktaXJjYy5jCmluZGV4IDkyNjMxZWIuLjg3MjE4M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvYWxpLWlyY2MuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2FsaS1pcmNjLmMKQEAgLTc2LDcgKzc2LDcgQEAKIHN0YXRpYyBpbnQgIGFsaV9pcmNjX2luaXRfNDMoYWxpX2NoaXBfdCAqY2hpcCwgY2hpcGlvX3QgKmluZm8pOwogc3RhdGljIGludCAgYWxpX2lyY2NfaW5pdF81MyhhbGlfY2hpcF90ICpjaGlwLCBjaGlwaW9fdCAqaW5mbyk7CiAKLS8qIFRoZXNlIGFyZSB0aGUgY3VycmVudGx5IGtub3duIEFMaSBzb3VydGgtYnJpZGdlIGNoaXBzZXRzLCB0aGUgb25seSBvbmUgZGlmZmVyZW5jZQorLyogVGhlc2UgYXJlIHRoZSBjdXJyZW50bHkga25vd24gQUxpIHNvdXRoLWJyaWRnZSBjaGlwc2V0cywgdGhlIG9ubHkgb25lIGRpZmZlcmVuY2UKICAqIGlzIHRoYXQgTTE1NDNDIGRvZXNuJ3Qgc3VwcG9ydCBIUCBIRFNMLTM2MDAKICAqLwogc3RhdGljIGFsaV9jaGlwX3QgY2hpcHNbXSA9CkBAIC0xMTA4LDcgKzExMDgsNyBAQAogCW91dGIobGNyLAkJICBpb2Jhc2UrVUFSVF9MQ1IpOyAvKiBTZXQgOE4xCSovCiAJb3V0YihmY3IsCQkgIGlvYmFzZStVQVJUX0ZDUik7IC8qIEVuYWJsZSBGSUZPJ3MgKi8KIAotCS8qIHdpdGhvdXQgdGhpcywgdGhlIGNvbmVjdGlvbiB3aWxsIGJlIGJyb2tlbiBhZnRlciBjb21lIGJhY2sgZnJvbSBGSVIgc3BlZWQsCisJLyogd2l0aG91dCB0aGlzLCB0aGUgY29ubmVjdGlvbiB3aWxsIGJlIGJyb2tlbiBhZnRlciBjb21lIGJhY2sgZnJvbSBGSVIgc3BlZWQsCiAJICAgYnV0IHdpdGggdGhpcywgdGhlIFNJUiBjb25uZWN0aW9uIGlzIGhhcmRlciB0byBlc3RhYmxpc2hlZCAqLwogCW91dGIoKFVBUlRfTUNSX0RUUiB8IFVBUlRfTUNSX1JUUyB8IFVBUlRfTUNSX09VVDIpLCBpb2Jhc2UrVUFSVF9NQ1IpOwogCQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jIGIvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jCmluZGV4IGY4MWQ5NDQuLjE3NGNhZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmMKQEAgLTU2LDcgKzU2LDcgQEAKIC8qIGRvX3Byb2JlIG1vZHVsZSBwYXJhbWV0ZXIgRW5hYmxlIHRoaXMgY29kZSAqLwogLyogUHJvYmUgY29kZSBpcyB2ZXJ5IHVzZWZ1bCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGhhcmR3YXJlIHdvcmtzICovCiAvKiBVc2UgaXQgd2l0aCB2YXJpb3VzIGNvbWJpbmF0aW9ucyBvZiBUVF9MRU4sIFJYX0xFTiAqLwotLyogU3Ryb25nbHkgcmVjb21lbmRlZCwgZGlzYWJsZSBpZiB0aGUgcHJvYmUgZmFpbHMgb24geW91ciBtYWNoaW5lICovCisvKiBTdHJvbmdseSByZWNvbW1lbmRlZCwgZGlzYWJsZSBpZiB0aGUgcHJvYmUgZmFpbHMgb24geW91ciBtYWNoaW5lICovCiAvKiBhbmQgc2VuZCBtZSA8amFtZXNAZmlzaHNvdXAuZGhzLm9yZz4gdGhlIG91dHB1dCBvZiBkbWVzZyAqLwogI2RlZmluZSBVU0VfUFJPQkUgMQogI3VuZGVmICBVU0VfUFJPQkUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuaCBiL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuaAppbmRleCA3N2ZjZjQ0Li5kOTJkNTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmgKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5oCkBAIC01MSw3ICs1MSw3IEBACiAKIC8qIFRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGlzIGNoaXAgaXMgYWxsZWdlZGx5IHJlbGVhc2VkICAgICAgICAgKi8KIC8qIEhvd2V2ZXIgSSBoYXZlIG5vdCBzZWVuIGl0LCBub3QgaGF2ZSBJIG1hbmFnZWQgdG8gY29udGFjdCAgICAgKi8KLS8qIGFueW9uZSB3aG8gaGFzLiBIT1dFVkVSIHRoZSBjaGlwIGJlYXJzIGEgc3RyaWtpbmcgcmVzZW1ibGVuY2UgKi8KKy8qIGFueW9uZSB3aG8gaGFzLiBIT1dFVkVSIHRoZSBjaGlwIGJlYXJzIGEgc3RyaWtpbmcgcmVzZW1ibGFuY2UgKi8KIC8qIHRvIHRoZSBJckRBIGNvbnRyb2xsZXIgaW4gdGhlIFRvc2hpYmEgUklTQyBUTVBSMzkyMiBjaGlwICAgICAgKi8KIC8qIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGlzIGlzIGZyZWVseSBhdmFpbGFibGUgYXQgICAgICAgICAgICAgKi8KIC8qIGh0dHA6Ly93d3cubWFkaW5nbGV5Lm9yZy9qYW1lcy9yZXNvdXJjZXMvdG9zaG9ib2UvVE1QUjM5MjIucGRmICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2dpcmJpbC1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvZ2lyYmlsLXNpci5jCmluZGV4IGEzMWI4ZmEuLjk2Y2RlY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvZ2lyYmlsLXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvZ2lyYmlsLXNpci5jCkBAIC0zOCw3ICszOCw3IEBACiAvKiBDb250cm9sIHJlZ2lzdGVyIDEgKi8KICNkZWZpbmUgR0lSQklMX1RYRU4gICAgMHgwMSAvKiBFbmFibGUgdHJhbnNtaXR0ZXIgKi8KICNkZWZpbmUgR0lSQklMX1JYRU4gICAgMHgwMiAvKiBFbmFibGUgcmVjZWl2ZXIgKi8KLSNkZWZpbmUgR0lSQklMX0VDQU4gICAgMHgwNCAvKiBDYW5jZWwgc2VsZiBlbW1pdGVkIGRhdGEgKi8KKyNkZWZpbmUgR0lSQklMX0VDQU4gICAgMHgwNCAvKiBDYW5jZWwgc2VsZiBlbWl0dGVkIGRhdGEgKi8KICNkZWZpbmUgR0lSQklMX0VDSE8gICAgMHgwOCAvKiBFY2hvIGNvbnRyb2wgY2hhcmFjdGVycyAqLwogCiAvKiBMRUQgQ3VycmVudCBSZWdpc3RlciAoMHgyKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jIGIvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jCmluZGV4IGU0ZWE2MTkuLmQ5MjY3Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMKQEAgLTM3MCw3ICszNzAsNyBAQAogCS8qIHVyYiBpcyBub3cgYXZhaWxhYmxlICovCiAJLy91cmItPnN0YXR1cyA9IDA7IC0+IHRlc3RlZCBhYm92ZQogCi0JLyogTmV3IHNwZWVkIGFuZCB4Ym9mIGlzIG5vdyBjb21taXRlZCBpbiBoYXJkd2FyZSAqLworCS8qIE5ldyBzcGVlZCBhbmQgeGJvZiBpcyBub3cgY29tbWl0dGVkIGluIGhhcmR3YXJlICovCiAJc2VsZi0+bmV3X3NwZWVkID0gLTE7CiAJc2VsZi0+bmV3X3hib2ZzID0gLTE7CiAKQEAgLTYwMiw3ICs2MDIsNyBAQAogCQkJSVJEQV9ERUJVRygxLCAiJXMoKSwgQ2hhbmdpbmcgc3BlZWQgbm93Li4uXG4iLCBfX2Z1bmNfXyk7CiAJCQlpcmRhX3VzYl9jaGFuZ2Vfc3BlZWRfeGJvZnMoc2VsZik7CiAJCX0gZWxzZSB7Ci0JCQkvKiBOZXcgc3BlZWQgYW5kIHhib2YgaXMgbm93IGNvbW1pdGVkIGluIGhhcmR3YXJlICovCisJCQkvKiBOZXcgc3BlZWQgYW5kIHhib2YgaXMgbm93IGNvbW1pdHRlZCBpbiBoYXJkd2FyZSAqLwogCQkJc2VsZi0+bmV3X3NwZWVkID0gLTE7CiAJCQlzZWxmLT5uZXdfeGJvZnMgPSAtMTsKIAkJCS8qIERvbmUsIHdhaXRpbmcgZm9yIG5leHQgcGFja2V0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYyBiL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jCmluZGV4IGNjODIxZGUuLmJlNTJiZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jCkBAIC01ODgsNyArNTg4LDcgQEAKIAogCW1jc19nZXRfcmVnKG1jcywgTUNTX01PREVfUkVHLCAmcnZhbCk7CiAKLQkvKiBNSU5SWFBXIHZhbHVlcyByZWNvbWVuZGVkIGJ5IE1vc0NoaXAgKi8KKwkvKiBNSU5SWFBXIHZhbHVlcyByZWNvbW1lbmRlZCBieSBNb3NDaGlwICovCiAJaWYgKG1jcy0+bmV3X3NwZWVkIDw9IDExNTIwMCkgewogCQlydmFsICY9IH5NQ1NfRklSOwogCkBAIC03OTksNyArNzk5LDcgQEAKIAlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogfQogCi0vKiBUcmFuc21pdCBjYWxsYmFjayBmdW50aW9uLiAgKi8KKy8qIFRyYW5zbWl0IGNhbGxiYWNrIGZ1bmN0aW9uLiAgKi8KIHN0YXRpYyB2b2lkIG1jc19zZW5kX2lycShzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IG1jc19jYiAqbWNzID0gdXJiLT5jb250ZXh0OwpAQCAtODExLDcgKzgxMSw3IEBACiAJCW5ldGlmX3dha2VfcXVldWUobmRldik7CiB9CiAKLS8qIFRyYW5zbWl0IGNhbGxiYWNrIGZ1bnRpb24uICAqLworLyogVHJhbnNtaXQgY2FsbGJhY2sgZnVuY3Rpb24uICAqLwogc3RhdGljIG5ldGRldl90eF90IG1jc19oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmMgYi9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmMKaW5kZXggNTU5ZmU4NS4uN2E5NjNkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvbnNjLWlyY2MuYwpAQCAtNzE2LDcgKzcxNiw3IEBACiAJaW50IHJlZywgY29tID0gMDsKIAlpbnQgcG5wOwogCi0JLyogUmVhZCBmdW50aW9uIGVuYWJsZSByZWdpc3RlciAoRkVSKSAqLworCS8qIFJlYWQgZnVuY3Rpb24gZW5hYmxlIHJlZ2lzdGVyIChGRVIpICovCiAJb3V0YihDRkdfMzM4X0ZFUiwgY2ZnX2Jhc2UpOwogCXJlZyA9IGluYihjZmdfYmFzZSsxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5oIGIvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5oCmluZGV4IDdiYTc3MzguLjMyZmE1ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvbnNjLWlyY2MuaAorKysgYi9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmgKQEAgLTEzNSw3ICsxMzUsNyBAQAogI2RlZmluZSBMU1JfVFhSRFkgICAgICAgMHgyMCAvKiBUcmFuc21pdHRlciByZWFkeSAqLwogI2RlZmluZSBMU1JfVFhFTVAgICAgICAgMHg0MCAvKiBUcmFuc21pdHRlciBlbXB0eSAqLwogCi0jZGVmaW5lIEFTQ1IgICAgICAgICAgICAweDA3IC8qIEF1eGlsbGFyeSBTdGF0dXMgYW5kIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVNDUiAgICAgICAgICAgIDB4MDcgLyogQXV4aWxpYXJ5IFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlciAqLwogI2RlZmluZSBBU0NSX1JYRl9UT1VUICAgMHgwMSAvKiBSeCBGSUZPIHRpbWVvdXQgKi8KICNkZWZpbmUgQVNDUl9GRU5EX0lORiAgIDB4MDIgLyogRnJhbWUgZW5kIGJ5dGVzIGluIHJ4IEZJRk8gKi8KICNkZWZpbmUgQVNDUl9TX0VPVCAgICAgIDB4MDQgLyogU2V0IGVuZCBvZiB0cmFuc21pc3Npb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvcHhhZmljcF9pci5jIGIvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMKaW5kZXggYzE5MmMzMS4uMDAxZWQwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMKQEAgLTQwLDcgKzQwLDcgQEAKIAogI2RlZmluZSBJQ0NSMF9BTUUJKDEgPDwgNykJLyogQWRkcmVzcyBtYXRjaCBlbmFibGUgKi8KICNkZWZpbmUgSUNDUjBfVElFCSgxIDw8IDYpCS8qIFRyYW5zbWl0IEZJRk8gaW50ZXJydXB0IGVuYWJsZSAqLwotI2RlZmluZSBJQ0NSMF9SSUUJKDEgPDwgNSkJLyogUmVjaWV2ZSBGSUZPIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgSUNDUjBfUklFCSgxIDw8IDUpCS8qIFJlY2VpdmUgRklGTyBpbnRlcnJ1cHQgZW5hYmxlICovCiAjZGVmaW5lIElDQ1IwX1JYRQkoMSA8PCA0KQkvKiBSZWNlaXZlIGVuYWJsZSAqLwogI2RlZmluZSBJQ0NSMF9UWEUJKDEgPDwgMykJLyogVHJhbnNtaXQgZW5hYmxlICovCiAjZGVmaW5lIElDQ1IwX1RVUwkoMSA8PCAyKQkvKiBUcmFuc21pdCBGSUZPIHVuZGVycnVuIHNlbGVjdCAqLwpAQCAtNDgzLDcgKzQ4Myw3IEBACiAJfQogCiAJaWYgKGljc3IwICYgSUNTUjBfRUlGKSB7Ci0JCS8qIEFuIGVycm9yIGluIEZJRk8gb2NjdXJlZCwgb3IgdGhlcmUgaXMgYSBlbmQgb2YgZnJhbWUgKi8KKwkJLyogQW4gZXJyb3IgaW4gRklGTyBvY2N1cnJlZCwgb3IgdGhlcmUgaXMgYSBlbmQgb2YgZnJhbWUgKi8KIAkJcHhhX2lyZGFfZmlyX2lycV9laWYoc2ksIGRldiwgaWNzcjApOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYwppbmRleCAxYzE2NzdjLi44ODAwZTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYwpAQCAtMTU4Miw3ICsxNTgyLDcgQEAKIAlpbnQgaW9iYXNlOwogCWludCBpaXIsIGxzcjsKIAotCS8qIEFscmVhZHkgbG9ja2VkIGNvbW1pbmcgaGVyZSBpbiBzbXNjX2lyY2NfaW50ZXJydXB0KCkgKi8KKwkvKiBBbHJlYWR5IGxvY2tlZCBjb21pbmcgaGVyZSBpbiBzbXNjX2lyY2NfaW50ZXJydXB0KCkgKi8KIAkvKnNwaW5fbG9jaygmc2VsZi0+bG9jayk7Ki8KIAogCWlvYmFzZSA9IHNlbGYtPmlvLnNpcl9iYXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS92aWEtaXJjYy5jIGIvZHJpdmVycy9uZXQvaXJkYS92aWEtaXJjYy5jCmluZGV4IDE4NmNkMjguLmY1MDRiMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdmlhLWlyY2MuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3ZpYS1pcmNjLmMKQEAgLTI5LDcgKzI5LDcgQEAKIAogMjAwNC0wMi0xNjogPHNkYUBiZGl0LmRlPgogLSBSZW1vdmVkIHVubmVlZGVkICdsZWdhY3knIHBjaSBzdHVmZi4KLS0gTWFrZSBzdXJlIFNJUiBtb2RlIGlzIHNldCAoaHdfaW5pdCgpKSBiZWZvcmUgY2FsbGluZyBtb2RlLWRlcGVuZGFudCBzdHVmZi4KKy0gTWFrZSBzdXJlIFNJUiBtb2RlIGlzIHNldCAoaHdfaW5pdCgpKSBiZWZvcmUgY2FsbGluZyBtb2RlLWRlcGVuZGVudCBzdHVmZi4KIC0gT24gc3BlZWQgY2hhbmdlIGZyb20gY29yZSwgZG9uJ3Qgc2VuZCBTSVIgZnJhbWUgd2l0aCBuZXcgc3BlZWQuIAogICBVc2UgY3VycmVudCBzcGVlZCBhbmQgY2hhbmdlIHNwZWVkcyBsYXRlci4KIC0gTWFrZSBtb2R1bGUtcGFyYW0gZG9uZ2xlX2lkIGFjdHVhbGx5IHdvcmsuCkBAIC0zMzQsNyArMzM0LDcgQEAKIAlzZWxmLT5pby5kb25nbGVfaWQgPSBkb25nbGVfaWQ7CiAKIAkvKiBUaGUgb25seSB2YWx1ZSB3ZSBtdXN0IG92ZXJyaWRlIGl0IHRoZSBiYXVkcmF0ZSAqLwotCS8qIE1heGltdW0gc3BlZWRzIGFuZCBjYXBhYmlsaXRpZXMgYXJlIGRvbmdsZS1kZXBlbmRhbnQuICovCisJLyogTWF4aW11bSBzcGVlZHMgYW5kIGNhcGFiaWxpdGllcyBhcmUgZG9uZ2xlLWRlcGVuZGVudC4gKi8KIAlzd2l0Y2goIHNlbGYtPmlvLmRvbmdsZV9pZCApewogCWNhc2UgMHgwZDoKIAkJc2VsZi0+cW9zLmJhdWRfcmF0ZS5iaXRzID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5oIGIvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmgKaW5kZXggZDY2ZmFiOC4uYTA3NmViMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmgKKysrIGIvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmgKQEAgLTIwOSw3ICsyMDksNyBAQAogCUlSSU5UUl9BQ1RFTgk9IDB4ODAsCS8qIGFjdGl2aXR5IGludGVycnVwdCBlbmFibGUgKi8KIAlJUklOVFJfQUNUSVZJVFkJPSAweDQwLAkvKiBhY3Rpdml0eSBtb25pdG9yICh0cmFmZmljIGRldGVjdGVkKSAqLwogCUlSSU5UUl9SUEtURU4JPSAweDIwLAkvKiByZWNlaXZlIHBhY2tldCBpbnRlcnJ1cHQgZW5hYmxlKi8KLQlJUklOVFJfUlBLVElOVAk9IDB4MTAsCS8qIHJ4LXBhY2tldCB0cmFuc2ZlcmVkIGZyb20gZmlmbyB0byBtZW1vcnkgZmluaXNoZWQgKi8KKwlJUklOVFJfUlBLVElOVAk9IDB4MTAsCS8qIHJ4LXBhY2tldCB0cmFuc2ZlcnJlZCBmcm9tIGZpZm8gdG8gbWVtb3J5IGZpbmlzaGVkICovCiAJSVJJTlRSX1RQS1RFTgk9IDB4MDgsCS8qIHRyYW5zbWl0IHBhY2tldCBpbnRlcnJ1cHQgZW5hYmxlICovCiAJSVJJTlRSX1RQS1RJTlQJPSAweDA0LAkvKiBsYXN0IGJpdCBvZiB0eC1wYWNrZXQrY3JjIHNoaWZ0ZWQgdG8gaXItcHVsc2VyICovCiAJSVJJTlRSX09FX0VOCT0gMHgwMiwJLyogVUFSVCByeCBmaWZvIG92ZXJydW4gZXJyb3IgaW50ZXJydXB0IGVuYWJsZSAqLwpAQCAtNzM5LDcgKzczOSw3IEBACiAvKiB0aGUgcmVtYXBwZWQgZXJyb3IgZmxhZ3Mgd2UgdXNlIGZvciByZXR1cm5pbmcgZnJvbSBmcmFtZQogICogcG9zdC1wcm9jZXNzaW5nIGluIHZsc2lfcHJvY2Vzc190eC9yeCgpIGFmdGVyIGl0IHdhcyBjb21wbGV0ZWQKICAqIGJ5IHRoZSBoYXJkd2FyZS4gVGhlc2UgZnVuY3Rpb25zIGVpdGhlciByZXR1cm4gdGhlID49MCBudW1iZXIKLSAqIG9mIHRyYW5zZmVyZWQgYnl0ZXMgaW4gY2FzZSBvZiBzdWNjZXNzIG9yIHRoZSBuZWdhdGl2ZSAoLSkKKyAqIG9mIHRyYW5zZmVycmVkIGJ5dGVzIGluIGNhc2Ugb2Ygc3VjY2VzcyBvciB0aGUgbmVnYXRpdmUgKC0pCiAgKiBvZiB0aGUgb3InZWQgZXJyb3IgZmxhZ3MuCiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuYwppbmRleCA0MWM1MjlmLi42ODZhMTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuYwpAQCAtMzYsNyArMzYsNyBAQAogLyoqCiAgKiBpeGdiZV9pZWVlX2NyZWRpdHMgLSBUaGlzIGNhbGN1bGF0ZXMgdGhlIGllZWUgdHJhZmZpYyBjbGFzcwogICogY3JlZGl0cyBmcm9tIHRoZSBjb25maWd1cmVkIGJhbmR3aWR0aCBwZXJjZW50YWdlcy4gQ3JlZGl0cwotICogYXJlIHRoZSBzbWFsbGVzdCB1bml0IHByb2dyYW1hYmxlIGludG8gdGhlIHVuZGVybHlpbmcKKyAqIGFyZSB0aGUgc21hbGxlc3QgdW5pdCBwcm9ncmFtbWFibGUgaW50byB0aGUgdW5kZXJseWluZwogICogaGFyZHdhcmUuIFRoZSBJRUVFIDgwMi4xUWF6IHNwZWNpZmljYXRpb24gZG8gbm90IHVzZSBiYW5kd2lkdGgKICAqIGdyb3VwcyBzbyB0aGlzIGlzIG11Y2ggc2ltcGxpZmllZCBmcm9tIHRoZSBDRUUgY2FzZS4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiX25sLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYwppbmRleCBmZWM0YzcyLi4zMjdjODYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYwpAQCAtMzYwLDcgKzM2MCw3IEBACiAJCXJldHVybiBEQ0JfTk9fSFdfQ0hHOwogCiAJLyoKLQkgKiBPbmx5IHRha2UgZG93biB0aGUgYWRhcHRlciBpZiBhbiBhcHAgY2hhbmdlIG9jY3VyZWQuIEZDb0UKKwkgKiBPbmx5IHRha2UgZG93biB0aGUgYWRhcHRlciBpZiBhbiBhcHAgY2hhbmdlIG9jY3VycmVkLiBGQ29FCiAJICogbWF5IHNodWZmbGUgdHggcmluZ3MgaW4gdGhpcyBjYXNlIGFuZCB0aGlzIGNhbiBub3QgYmUgZG9uZQogCSAqIHdpdGhvdXQgYSByZXNldCBjdXJyZW50bHkuCiAJICovCkBAIC01OTksNyArNTk5LDcgQEAKIAkJCQlicmVhazsKIAogCQkJLyogVGhlIEZDb0UgYXBwbGljYXRpb24gcHJpb3JpdHkgbWF5IGJlIGNoYW5nZWQgbXVsdGlwbGUKLQkJCSAqIHRpbWVzIGluIHF1aWNrIHN1Y2Vzc2lvbiB3aXRoIHN3aXRjaGVzIHRoYXQgYnVpbGQgdXAKKwkJCSAqIHRpbWVzIGluIHF1aWNrIHN1Y2Nlc3Npb24gd2l0aCBzd2l0Y2hlcyB0aGF0IGJ1aWxkIHVwCiAJCQkgKiBUTFZzLiBUbyBhdm9pZCBjcmVhdGluZyB1bmVlZGVkIGRldmljZSByZXNldHMgdGhpcwogCQkJICogY2hlY2tzIHRoZSBhY3R1YWwgSFcgY29uZmlndXJhdGlvbiBhbmQgY2xlYXJzCiAJCQkgKiBCSVRfQVBQX1VQQ0hHIGlmIGEgSFcgY29uZmlndXJhdGlvbiBjaGFuZ2UgaXMgbm90CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKaW5kZXggZjE3ZTRhNy4uNmY4YWRjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYwpAQCAtNjQ0LDcgKzY0NCw3IEBACiAgKiBAYWRhcHRlcjogZHJpdmVyIHByaXZhdGUgc3RydWN0CiAgKiBAaW5kZXg6IHJlZyBpZHggb2YgcXVldWUgdG8gcXVlcnkgKDAtMTI3KQogICoKLSAqIEhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIHRyYWZmaWMgaW5kZXggZm9yIGEgcGF0aWN1bGFyCisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHRoZSB0cmFmZmljIGluZGV4IGZvciBhIHBhcnRpY3VsYXIKICAqIHJlZ2lzdGVyIGluZGV4LgogICoKICAqIFJldHVybnMgOiBhIHRjIGluZGV4IGZvciB1c2UgaW4gcmFuZ2UgMC03LCBvciAwLTMKQEAgLTM1NTYsNyArMzU1Niw3IEBACiAJCX0gZWxzZSB7CiAJCQkvKgogCQkJICogV3JpdGUgYWRkcmVzc2VzIHRvIHRoZSBNVEEsIGlmIHRoZSBhdHRlbXB0IGZhaWxzCi0JCQkgKiB0aGVuIHdlIHNob3VsZCBqdXN0IHR1cm4gb24gcHJvbWlzY291cyBtb2RlIHNvCisJCQkgKiB0aGVuIHdlIHNob3VsZCBqdXN0IHR1cm4gb24gcHJvbWlzY3VvdXMgbW9kZSBzbwogCQkJICogdGhhdCB3ZSBjYW4gYXQgbGVhc3QgcmVjZWl2ZSBtdWx0aWNhc3QgdHJhZmZpYwogCQkJICovCiAJCQlody0+bWFjLm9wcy51cGRhdGVfbWNfYWRkcl9saXN0KGh3LCBuZXRkZXYpOwpAQCAtMzU2Nyw3ICszNTY3LDcgQEAKIAkJLyoKIAkJICogV3JpdGUgYWRkcmVzc2VzIHRvIGF2YWlsYWJsZSBSQVIgcmVnaXN0ZXJzLCBpZiB0aGVyZSBpcyBub3QKIAkJICogc3VmZmljaWVudCBzcGFjZSB0byBzdG9yZSBhbGwgdGhlIGFkZHJlc3NlcyB0aGVuIGVuYWJsZQotCQkgKiB1bmljYXN0IHByb21pc2NvdXMgbW9kZQorCQkgKiB1bmljYXN0IHByb21pc2N1b3VzIG1vZGUKIAkJICovCiAJCWNvdW50ID0gaXhnYmVfd3JpdGVfdWNfYWRkcl9saXN0KG5ldGRldik7CiAJCWlmIChjb3VudCA8IDApIHsKQEAgLTQ0NDMsNyArNDQ0Myw3IEBACiB9CiAKIC8qCi0gKiBpeGdiZV9zZXRfbnVtX3F1ZXVlczogQWxsb2NhdGUgcXVldWVzIGZvciBkZXZpY2UsIGZlYXR1cmUgZGVwZW5kYW50CisgKiBpeGdiZV9zZXRfbnVtX3F1ZXVlczogQWxsb2NhdGUgcXVldWVzIGZvciBkZXZpY2UsIGZlYXR1cmUgZGVwZW5kZW50CiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQogICoKICAqIFRoaXMgaXMgdGhlIHRvcCBsZXZlbCBxdWV1ZSBhbGxvY2F0aW9uIHJvdXRpbmUuICBUaGUgb3JkZXIgaGVyZSBpcyB2ZXJ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5jCmluZGV4IGY3MmY3MDUuLmRmNWI4YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5jCkBAIC0xNjk0LDcgKzE2OTQsNyBAQAogfQogCiAvKioKLSAqICBpeGdiZV90bl9jaGVja19vdmVydGVtcCAtIENoZWNrcyBpZiBhbiBvdmVydGVtcCBvY2N1cmVkLgorICogIGl4Z2JlX3RuX2NoZWNrX292ZXJ0ZW1wIC0gQ2hlY2tzIGlmIGFuIG92ZXJ0ZW1wIG9jY3VycmVkLgogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqCiAgKiAgQ2hlY2tzIGlmIHRoZSBMQVNJIHRlbXAgYWxhcm0gc3RhdHVzIHdhcyB0cmlnZ2VyZWQgZHVlIHRvIG92ZXJ0ZW1wCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV94NTQwLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV94NTQwLmMKaW5kZXggZjQ3ZTkzZi4uZDkzMjNjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfeDU0MC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3g1NDAuYwpAQCAtNTczLDcgKzU3Myw3IEBACiAgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKiBAbWFzazogTWFzayB0byBzcGVjaWZ5IHdoaWNoIHNlbWFwaG9yZSB0byByZWxlYXNlCiAgKgotICogUmVsZWFzZXMgdGhlIFNXRlcgc2VtYXBob3JlIHRocm91Z2h0IHRoZSBTV19GV19TWU5DIHJlZ2lzdGVyCisgKiBSZWxlYXNlcyB0aGUgU1dGVyBzZW1hcGhvcmUgdGhyb3VnaCB0aGUgU1dfRldfU1lOQyByZWdpc3RlcgogICogZm9yIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gKENTUiwgUEhZMCwgUEhZMSwgRVZNLCBGbGFzaCkKICAqKi8KIHN0YXRpYyB2b2lkIGl4Z2JlX3JlbGVhc2Vfc3dmd19zeW5jX1g1NDAoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG1hc2spCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9peGdiZXZmX21haW4uYwppbmRleCAwNTRhYjA1Li4wNWZhN2M4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMKQEAgLTE5MjUsNyArMTkyNSw3IEBACiB9CiAKIC8qCi0gKiBpeGdiZXZmX3NldF9udW1fcXVldWVzOiBBbGxvY2F0ZSBxdWV1ZXMgZm9yIGRldmljZSwgZmVhdHVyZSBkZXBlbmRhbnQKKyAqIGl4Z2JldmZfc2V0X251bV9xdWV1ZXM6IEFsbG9jYXRlIHF1ZXVlcyBmb3IgZGV2aWNlLCBmZWF0dXJlIGRlcGVuZGVudAogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKICAqCiAgKiBUaGlzIGlzIHRoZSB0b3AgbGV2ZWwgcXVldWUgYWxsb2NhdGlvbiByb3V0aW5lLiAgVGhlIG9yZGVyIGhlcmUgaXMgdmVyeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQva3M4ODQyLmMgYi9kcml2ZXJzL25ldC9rczg4NDIuYwppbmRleCBlZmQ0NGFmLi5mMGQ4MzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9rczg4NDIuYworKysgYi9kcml2ZXJzL25ldC9rczg4NDIuYwpAQCAtMzIxLDcgKzMyMSw3IEBACiAJLyogUlggMiBrYiBoaWdoIHdhdGVybWFyayAqLwogCWtzODg0Ml93cml0ZTE2KGFkYXB0ZXIsIDAsIDB4MTAwMCwgUkVHX1FSRkNSKTsKIAotCS8qIGFnZ3Jlc2l2ZSBiYWNrIG9mZiBpbiBoYWxmIGR1cGxleCAqLworCS8qIGFnZ3Jlc3NpdmUgYmFjayBvZmYgaW4gaGFsZiBkdXBsZXggKi8KIAlrczg4NDJfZW5hYmxlX2JpdHMoYWRhcHRlciwgMzIsIDEgPDwgOCwgUkVHX1NHQ1IxKTsKIAogCS8qIGVuYWJsZSBubyBleGNlc3NpdmUgY29sbGlzb24gZHJvcCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQva3M4ODUxLmMgYi9kcml2ZXJzL25ldC9rczg4NTEuYwppbmRleCAwZmE0YTk4Li5iY2Q5YmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9rczg4NTEuYworKysgYi9kcml2ZXJzL25ldC9rczg4NTEuYwpAQCAtMTQxLDcgKzE0MSw3IEBACiAgKgogICogQWxsIHRoZXNlIGNhbGxzIGlzc3VlIFNQSSB0cmFuc2FjdGlvbnMgdG8gYWNjZXNzIHRoZSBjaGlwJ3MgcmVnaXN0ZXJzLiBUaGV5CiAgKiBhbGwgcmVxdWlyZSB0aGF0IHRoZSBuZWNlc3NhcnkgbG9jayBpcyBoZWxkIHRvIHByZXZlbnQgYWNjZXNzZXMgd2hlbiB0aGUKLSAqIGNoaXAgaXMgYnVzeSB0cmFuc2ZlcmluZyBwYWNrZXQgZGF0YSAoUlgvVFggRklGTyBhY2Nlc3NlcykuCisgKiBjaGlwIGlzIGJ1c3kgdHJhbnNmZXJyaW5nIHBhY2tldCBkYXRhIChSWC9UWCBGSUZPIGFjY2Vzc2VzKS4KICAqLwogCiAvKioKQEAgLTQ4Myw3ICs0ODMsNyBAQAogCSAqCiAJICogVGhpcyBmb3JtIG9mIG9wZXJhdGlvbiB3b3VsZCByZXF1aXJlIHVzIHRvIGhvbGQgdGhlIFNQSSBidXMnCiAJICogY2hpcHNlbGVjdCBsb3cgZHVyaW5nIHRoZSBlbnRpZSB0cmFuc2FjdGlvbiB0byBhdm9pZCBhbnkKLQkgKiByZXNldCB0byB0aGUgZGF0YSBzdHJlYW0gY29tbWluZyBmcm9tIHRoZSBjaGlwLgorCSAqIHJlc2V0IHRvIHRoZSBkYXRhIHN0cmVhbSBjb21pbmcgZnJvbSB0aGUgY2hpcC4KIAkgKi8KIAogCWZvciAoOyByeGZjICE9IDA7IHJ4ZmMtLSkgewpAQCAtNjM0LDcgKzYzNCw3IEBACiAKIC8qKgogICogY2FsY190eGxlbiAtIGNhbGN1bGF0ZSBzaXplIG9mIG1lc3NhZ2UgdG8gc2VuZCBwYWNrZXQKLSAqIEBsZW46IExlbmdodCBvZiBkYXRhCisgKiBAbGVuOiBMZW5ndGggb2YgZGF0YQogICoKICAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIFRYRklGTyBtZXNzYWdlIG5lZWRlZCB0byBzZW5kCiAgKiB0aGlzIHBhY2tldC4KQEAgLTE0NzIsNyArMTQ3Miw3IEBACiAgKiBAcmVnOiBUaGUgcmVnaXN0ZXIgdG8gcmVhZC4KICAqCiAgKiBUaGlzIGNhbGwgcmVhZHMgZGF0YSBmcm9tIHRoZSBQSFkgcmVnaXN0ZXIgc3BlY2lmaWVkIGluIEByZWcuIFNpbmNlIHRoZQotICogZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgYWxsIHRoZSBNSUkgcmVnaXN0ZXJzLCB0aGUgbm9uLWV4aXN0YW50IHZhbHVlcworICogZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgYWxsIHRoZSBNSUkgcmVnaXN0ZXJzLCB0aGUgbm9uLWV4aXN0ZW50IHZhbHVlcwogICogYXJlIGFsd2F5cyByZXR1cm5lZCBhcyB6ZXJvLgogICoKICAqIFdlIHJldHVybiB6ZXJvIGZvciB1bnN1cHBvcnRlZCByZWdpc3RlcnMgYXMgdGhlIE1JSSBjb2RlIGRvZXMgbm90IGNoZWNrCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9rczg4NTFfbWxsLmMgYi9kcml2ZXJzL25ldC9rczg4NTFfbWxsLmMKaW5kZXggMmUyYzY5Yi4uNjE2MzFjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQva3M4ODUxX21sbC5jCisrKyBiL2RyaXZlcnMvbmV0L2tzODg1MV9tbGwuYwpAQCAtNDcwLDcgKzQ3MCw3IEBACiAgKgogICogQWxsIHRoZXNlIGNhbGxzIGlzc3VlIHRyYW5zYWN0aW9ucyB0byBhY2Nlc3MgdGhlIGNoaXAncyByZWdpc3RlcnMuIFRoZXkKICAqIGFsbCByZXF1aXJlIHRoYXQgdGhlIG5lY2Vzc2FyeSBsb2NrIGlzIGhlbGQgdG8gcHJldmVudCBhY2Nlc3NlcyB3aGVuIHRoZQotICogY2hpcCBpcyBidXN5IHRyYW5zZmVyaW5nIHBhY2tldCBkYXRhIChSWC9UWCBGSUZPIGFjY2Vzc2VzKS4KKyAqIGNoaXAgaXMgYnVzeSB0cmFuc2ZlcnJpbmcgcGFja2V0IGRhdGEgKFJYL1RYIEZJRk8gYWNjZXNzZXMpLgogICovCiAKIC8qKgpAQCAtMTM2NCw3ICsxMzY0LDcgQEAKICAqIEByZWc6IFRoZSByZWdpc3RlciB0byByZWFkLgogICoKICAqIFRoaXMgY2FsbCByZWFkcyBkYXRhIGZyb20gdGhlIFBIWSByZWdpc3RlciBzcGVjaWZpZWQgaW4gQHJlZy4gU2luY2UgdGhlCi0gKiBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBhbGwgdGhlIE1JSSByZWdpc3RlcnMsIHRoZSBub24tZXhpc3RhbnQgdmFsdWVzCisgKiBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBhbGwgdGhlIE1JSSByZWdpc3RlcnMsIHRoZSBub24tZXhpc3RlbnQgdmFsdWVzCiAgKiBhcmUgYWx3YXlzIHJldHVybmVkIGFzIHplcm8uCiAgKgogICogV2UgcmV0dXJuIHplcm8gZm9yIHVuc3VwcG9ydGVkIHJlZ2lzdGVycyBhcyB0aGUgTUlJIGNvZGUgZG9lcyBub3QgY2hlY2sKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xpYjgzOTAuYyBiL2RyaXZlcnMvbmV0L2xpYjgzOTAuYwppbmRleCBkYTc0ZGI0Li4xN2I3NWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9saWI4MzkwLmMKKysrIGIvZHJpdmVycy9uZXQvbGliODM5MC5jCkBAIC0zNSw3ICszNSw3IEBACiAgIEFsZXhleSBLdXpuZXRzb3YJOiB1c2UgdGhlIDgzOTAncyBzaXggYml0IGhhc2ggbXVsdGljYXN0IGZpbHRlci4KICAgUGF1bCBHb3J0bWFrZXIJOiB0d2VhayBBTksncyBhYm92ZSBtdWx0aWNhc3QgY2hhbmdlcyBhIGJpdC4KICAgUGF1bCBHb3J0bWFrZXIJOiB1cGRhdGUgcGFja2V0IHN0YXRpc3RpY3MgZm9yIHYyLjEueAotICBBbGFuIENveAkJOiBzdXBwb3J0IGFyYml0YXJ5IHN0dXBpZCBwb3J0IG1hcHBpbmdzIG9uIHRoZQorICBBbGFuIENveAkJOiBzdXBwb3J0IGFyYml0cmFyeSBzdHVwaWQgcG9ydCBtYXBwaW5ncyBvbiB0aGUKICAgCQkJICA2OEsgTWFjaW50b3NoLiBTdXBwb3J0ID4xNmJpdCBJL08gc3BhY2VzCiAgIFBhdWwgR29ydG1ha2VyCTogYWRkIGttb2Qgc3VwcG9ydCBmb3IgYXV0by1sb2FkaW5nIG9mIHRoZSA4MzkwCiAJCQkgIG1vZHVsZSBieSBhbGwgZHJpdmVycyB0aGF0IHJlcXVpcmUgaXQuCkBAIC0xMjEsNyArMTIxLDcgQEAKIC8qCiAgKglTTVAgYW5kIHRoZSA4MzkwIHNldHVwLgogICoKLSAqCVRoZSA4MzkwIGlzbnQgZXhhY3RseSBkZXNpZ25lZCB0byBiZSBtdWx0aXRocmVhZGVkIG9uIFJYL1RYLiBUaGVyZSBpcworICoJVGhlIDgzOTAgaXNuJ3QgZXhhY3RseSBkZXNpZ25lZCB0byBiZSBtdWx0aXRocmVhZGVkIG9uIFJYL1RYLiBUaGVyZSBpcwogICoJYSBwYWdlIHJlZ2lzdGVyIHRoYXQgY29udHJvbHMgYmFuayBhbmQgcGFja2V0IGJ1ZmZlciBhY2Nlc3MuIFdlIGd1YXJkCiAgKgl0aGlzIHdpdGggZWlfbG9jYWwtPnBhZ2VfbG9jay4gTm9ib2R5IHNob3VsZCBhc3N1bWUgb3Igc2V0IHRoZSBwYWdlIG90aGVyCiAgKgl0aGFuIHplcm8gd2hlbiB0aGUgbG9jayBpcyBub3QgaGVsZC4gTG9jayBob2xkZXJzIG11c3QgcmVzdG9yZSBwYWdlIDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMgYi9kcml2ZXJzL25ldC9sb29wYmFjay5jCmluZGV4IGVhMGRjNDUuLmQ3MGZiNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMKKysrIGIvZHJpdmVycy9uZXQvbG9vcGJhY2suYwpAQCAtMTczLDcgKzE3Myw4IEBACiAJCXwgTkVUSUZfRl9SWENTVU0KIAkJfCBORVRJRl9GX0hJR0hETUEKIAkJfCBORVRJRl9GX0xMVFgKLQkJfCBORVRJRl9GX05FVE5TX0xPQ0FMOworCQl8IE5FVElGX0ZfTkVUTlNfTE9DQUwKKwkJfCBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRDsKIAlkZXYtPmV0aHRvb2xfb3BzCT0gJmxvb3BiYWNrX2V0aHRvb2xfb3BzOwogCWRldi0+aGVhZGVyX29wcwkJPSAmZXRoX2hlYWRlcl9vcHM7CiAJZGV2LT5uZXRkZXZfb3BzCQk9ICZsb29wYmFja19vcHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9scDQ4NmUuYyBiL2RyaXZlcnMvbmV0L2xwNDg2ZS5jCmluZGV4IDM2OTg4MjQuLjM4NWE5NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xwNDg2ZS5jCisrKyBiL2RyaXZlcnMvbmV0L2xwNDg2ZS5jCkBAIC0yNyw3ICsyNyw3IEBACiAKIAlDcmVkaXRzOgogCVRoYW5rcyB0byBNdXJwaHkgU29mdHdhcmUgQlYgZm9yIGxldHRpbmcgbWUgd3JpdGUgdGhpcyBpbiB0aGVpciB0aW1lLgotCVdlbGwsIGFjdHVhbGx5LCBJIGdldCBwYXllZCBkb2luZyB0aGlzLi4uCisJV2VsbCwgYWN0dWFsbHksIEkgZ2V0IHBhaWQgZG9pbmcgdGhpcy4uLgogCShBbHNvOiBzZWUgaHR0cDovL3d3dy5tdXJwaHkubmwgZm9yIG11cnBoeSwgYW5kIG15IGhvbWVwYWdlIH5hcmQgZm9yCiAJbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgUHJvZmVzc2lvbmFsIFdvcmtzdGF0aW9uKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZXRoLmggYi9kcml2ZXJzL25ldC9tZXRoLmgKaW5kZXggYTc4ZGMxYy4uNWIxNDVjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWV0aC5oCisrKyBiL2RyaXZlcnMvbmV0L21ldGguaApAQCAtMTQ0LDcgKzE0NCw3IEBACiAJCQkJICAgICAgIC8qIEJpdHMgMjIgdGhyb3VnaCAyOCBhcmUgdXNlZCB0byBkZXRlcm1pbmUgSVBHUjIgKi8KIAogI2RlZmluZSBNRVRIX1JFVl9TSElGVCAyOSAgICAgICAvKiBCaXRzIDI5IHRocm91Z2ggMzEgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSByZXZpc2lvbiAqLwotCQkJCSAgICAgICAvKiAwMDA6IEluaXRhbCByZXZpc2lvbiAqLworCQkJCSAgICAgICAvKiAwMDA6IEluaXRpYWwgcmV2aXNpb24gKi8KIAkJCQkgICAgICAgLyogMDAxOiBGaXJzdCByZXZpc2lvbiwgSW1wcm92ZWQgVFggY29uY2F0ZW5hdGlvbiAqLwogCiAKQEAgLTE5Myw3ICsxOTMsNyBAQAogCQkJCQkgICAgICAJLyogMTogQSBUWCBtZXNzYWdlIGhhZCB0aGUgSU5UIHJlcXVlc3QgYml0IHNldCwgdGhlIHBhY2tldCBoYXMgYmVlbiBzZW50LiAqLwogI2RlZmluZSBNRVRIX0lOVF9UWF9MSU5LX0ZBSUwJQklUKDIpCS8qIDA6IE5vIGludGVycnVwdCBwZW5kaW5nLCAxOiBQSFkgaGFzIHJlcG9ydGVkIGEgbGluayBmYWlsdXJlICovCiAjZGVmaW5lIE1FVEhfSU5UX01FTV9FUlJPUglCSVQoMykJLyogMDogTm8gaW50ZXJydXB0IHBlbmRpbmcgKi8KLQkJCQkJCS8qIDE6IEEgbWVtb3J5IGVycm9yIG9jY3VycmVkIGR1cnJpbmcgRE1BLCBETUEgc3RvcHBlZCwgRmF0YWwgKi8KKwkJCQkJCS8qIDE6IEEgbWVtb3J5IGVycm9yIG9jY3VycmVkIGR1cmluZyBETUEsIERNQSBzdG9wcGVkLCBGYXRhbCAqLwogI2RlZmluZSBNRVRIX0lOVF9UWF9BQk9SVAkJQklUKDQpCS8qIDA6IE5vIGludGVycnVwdCBwZW5kaW5nLCAxOiBUaGUgVFggYWJvcnRlZCBvcGVyYXRpb24sIERNQSBzdG9wcGVkLCBGQVRBTCAqLwogI2RlZmluZSBNRVRIX0lOVF9SWF9USFJFU0hPTEQJQklUKDUpCS8qIDA6IE5vIGludGVycnVwdCBwZW5kaW5nLCAxOiBTZWxlY3RlZCByZWNlaXZlIHRocmVzaG9sZCBjb25kaXRpb24gVmFsaWQgKi8KICNkZWZpbmUgTUVUSF9JTlRfUlhfVU5ERVJGTE9XCUJJVCg2KQkvKiAwOiBObyBpbnRlcnJ1cHQgcGVuZGluZywgMTogRklGTyB3YXMgZW1wdHksIHBhY2tldCBjb3VsZCBub3QgYmUgcXVldWVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9taWkuYyBiL2RyaXZlcnMvbmV0L21paS5jCmluZGV4IDBhNmM2YTIuLmQ0ZmMwMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21paS5jCisrKyBiL2RyaXZlcnMvbmV0L21paS5jCkBAIC00OSw2ICs0OSwxMCBAQAogCQlyZXN1bHQgfD0gQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmOwogCWlmIChhZHZlcnQgJiBBRFZFUlRJU0VfMTAwRlVMTCkKIAkJcmVzdWx0IHw9IEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbDsKKwlpZiAoYWR2ZXJ0ICYgQURWRVJUSVNFX1BBVVNFX0NBUCkKKwkJcmVzdWx0IHw9IEFEVkVSVElTRURfUGF1c2U7CisJaWYgKGFkdmVydCAmIEFEVkVSVElTRV9QQVVTRV9BU1lNKQorCQlyZXN1bHQgfD0gQURWRVJUSVNFRF9Bc3ltX1BhdXNlOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZW5fbWFpbi5jIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9tYWluLmMKaW5kZXggOTMxN2I2MS4uOTI3NmIxYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZW5fbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZW5fbWFpbi5jCkBAIC0yMzYsNyArMjM2LDcgQEAKIAkJZ290byBlcnJfbXI7CiAJfQogCi0JLyogQ29uZmlndXJlIHdpY2ggcG9ydHMgdG8gc3RhcnQgYWNjb3JkaW5nIHRvIG1vZHVsZSBwYXJhbWV0ZXJzICovCisJLyogQ29uZmlndXJlIHdoaWNoIHBvcnRzIHRvIHN0YXJ0IGFjY29yZGluZyB0byBtb2R1bGUgcGFyYW1ldGVycyAqLwogCW1kZXYtPnBvcnRfY250ID0gMDsKIAltbHg0X2ZvcmVhY2hfcG9ydChpLCBkZXYsIE1MWDRfUE9SVF9UWVBFX0VUSCkKIAkJbWRldi0+cG9ydF9jbnQrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZW5fbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9tbHg0L2VuX25ldGRldi5jCmluZGV4IDRmMTU4YmEuLjc3MDYzZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZW5fbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9uZXRkZXYuYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJCQkJCQkJICAgICAgIHByaXYtPnBvcnQpOwogCQkJaWYgKGVycikKIAkJCQllbl9lcnIocHJpdiwgIkZhaWxlZCBlbmFibGluZyAiCi0JCQkJCSAgICAgInByb21pc2NvdXMgbW9kZVxuIik7CisJCQkJCSAgICAgInByb21pc2N1b3VzIG1vZGVcbiIpOwogCiAJCQkvKiBEaXNhYmxlIHBvcnQgbXVsdGljYXN0IGZpbHRlciAodW5jb25kaXRpb25hbGx5KSAqLwogCQkJZXJyID0gbWx4NF9TRVRfTUNBU1RfRkxUUihtZGV2LT5kZXYsIHByaXYtPnBvcnQsIDAsCkBAIC0yNzYsNyArMjc2LDcgQEAKIAl9CiAKIAkvKgotCSAqIE5vdCBpbiBwcm9taXNjb3VzIG1vZGUKKwkgKiBOb3QgaW4gcHJvbWlzY3VvdXMgbW9kZQogCSAqLwogCiAJaWYgKHByaXYtPmZsYWdzICYgTUxYNF9FTl9GTEFHX1BST01JU0MpIHsKQEAgLTI5MiwxNCArMjkyLDE0IEBACiAJCQllcnIgPSBtbHg0X3VuaWNhc3RfcHJvbWlzY19yZW1vdmUobWRldi0+ZGV2LCBwcml2LT5iYXNlX3FwbiwKIAkJCQkJCQkgIHByaXYtPnBvcnQpOwogCQlpZiAoZXJyKQotCQkJZW5fZXJyKHByaXYsICJGYWlsZWQgZGlzYWJsaW5nIHByb21pc2NvdXMgbW9kZVxuIik7CisJCQllbl9lcnIocHJpdiwgIkZhaWxlZCBkaXNhYmxpbmcgcHJvbWlzY3VvdXMgbW9kZVxuIik7CiAKIAkJLyogRGlzYWJsZSBNdWx0aWNhc3QgcHJvbWlzYyAqLwogCQlpZiAocHJpdi0+ZmxhZ3MgJiBNTFg0X0VOX0ZMQUdfTUNfUFJPTUlTQykgewogCQkJZXJyID0gbWx4NF9tdWx0aWNhc3RfcHJvbWlzY19yZW1vdmUobWRldi0+ZGV2LCBwcml2LT5iYXNlX3FwbiwKIAkJCQkJCQkgICAgcHJpdi0+cG9ydCk7CiAJCQlpZiAoZXJyKQotCQkJCWVuX2Vycihwcml2LCAiRmFpbGVkIGRpc2FibGluZyBtdWx0aWNhc3QgcHJvbWlzY291cyBtb2RlXG4iKTsKKwkJCQllbl9lcnIocHJpdiwgIkZhaWxlZCBkaXNhYmxpbmcgbXVsdGljYXN0IHByb21pc2N1b3VzIG1vZGVcbiIpOwogCQkJcHJpdi0+ZmxhZ3MgJj0gfk1MWDRfRU5fRkxBR19NQ19QUk9NSVNDOwogCQl9CiAKQEAgLTMzMSw3ICszMzEsNyBAQAogCQkJZXJyID0gbWx4NF9tdWx0aWNhc3RfcHJvbWlzY19yZW1vdmUobWRldi0+ZGV2LCBwcml2LT5iYXNlX3FwbiwKIAkJCQkJCQkgICAgcHJpdi0+cG9ydCk7CiAJCQlpZiAoZXJyKQotCQkJCWVuX2Vycihwcml2LCAiRmFpbGVkIGRpc2FibGluZyBtdWx0aWNhc3QgcHJvbWlzY291cyBtb2RlXG4iKTsKKwkJCQllbl9lcnIocHJpdiwgIkZhaWxlZCBkaXNhYmxpbmcgbXVsdGljYXN0IHByb21pc2N1b3VzIG1vZGVcbiIpOwogCQkJcHJpdi0+ZmxhZ3MgJj0gfk1MWDRfRU5fRkxBR19NQ19QUk9NSVNDOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZW5fcnguYyBiL2RyaXZlcnMvbmV0L21seDQvZW5fcnguYwppbmRleCAwNTk5OGVlLi42MmRkMjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L2VuX3J4LmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9yeC5jCkBAIC0zNDUsNiArMzQ1LDggQEAKIAkJZXJyID0gbWx4NF9lbl9pbml0X2FsbG9jYXRvcihwcml2LCByaW5nKTsKIAkJaWYgKGVycikgewogCQkJZW5fZXJyKHByaXYsICJGYWlsZWQgaW5pdGlhbGl6aW5nIHJpbmcgYWxsb2NhdG9yXG4iKTsKKwkJCWlmIChyaW5nLT5zdHJpZGUgPD0gVFhCQl9TSVpFKQorCQkJCXJpbmctPmJ1ZiAtPSBUWEJCX1NJWkU7CiAJCQlyaW5nX2luZC0tOwogCQkJZ290byBlcnJfYWxsb2NhdG9yOwogCQl9CkBAIC0zNjksNiArMzcxLDggQEAKIAlyaW5nX2luZCA9IHByaXYtPnJ4X3JpbmdfbnVtIC0gMTsKIGVycl9hbGxvY2F0b3I6CiAJd2hpbGUgKHJpbmdfaW5kID49IDApIHsKKwkJaWYgKHByaXYtPnJ4X3JpbmdbcmluZ19pbmRdLnN0cmlkZSA8PSBUWEJCX1NJWkUpCisJCQlwcml2LT5yeF9yaW5nW3JpbmdfaW5kXS5idWYgLT0gVFhCQl9TSVpFOwogCQltbHg0X2VuX2Rlc3Ryb3lfYWxsb2NhdG9yKHByaXYsICZwcml2LT5yeF9yaW5nW3JpbmdfaW5kXSk7CiAJCXJpbmdfaW5kLS07CiAJfQpAQCAtNzA2LDcgKzcxMCw3IEBACiB9CiAKIAotLyogQ2FsY3VsYXRlIHRoZSBsYXN0IG9mZnNldCBwb3NpdGlvbiB0aGF0IGFjY29tb2RhdGVzIGEgZnVsbCBmcmFnbWVudAorLyogQ2FsY3VsYXRlIHRoZSBsYXN0IG9mZnNldCBwb3NpdGlvbiB0aGF0IGFjY29tbW9kYXRlcyBhIGZ1bGwgZnJhZ21lbnQKICAqIChhc3N1bWluZyBmYWdtZW50IHNpemUgPSBzdHJpZGUtYWxpZ24pICovCiBzdGF0aWMgaW50IG1seDRfZW5fbGFzdF9hbGxvY19vZmZzZXQoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwgdTE2IHN0cmlkZSwgdTE2IGFsaWduKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9lbl9zZWxmdGVzdC5jIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9zZWxmdGVzdC5jCmluZGV4IDljOTFhOTIuLjE5MWE4ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZW5fc2VsZnRlc3QuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3NlbGZ0ZXN0LmMKQEAgLTE0OSw3ICsxNDksNyBAQAogCiAJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiByZXRyeV90eDoKLQkJLyogV2FpdCB1bnRpbGwgYWxsIHR4IHF1ZXVlcyBhcmUgZW1wdHkuCisJCS8qIFdhaXQgdW50aWwgYWxsIHR4IHF1ZXVlcyBhcmUgZW1wdHkuCiAJCSAqIHRoZXJlIHNob3VsZCBub3QgYmUgYW55IGFkZGl0aW9uYWwgaW5jb21pbmcgdHJhZmZpYwogCQkgKiBzaW5jZSB3ZSB0dXJuZWQgdGhlIGNhcnJpZXIgb2ZmICovCiAJCW1zbGVlcCgyMDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9lbl90eC5jIGIvZHJpdmVycy9uZXQvbWx4NC9lbl90eC5jCmluZGV4IDAxZmViOGYuLmIyMjlhY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZW5fdHguYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3R4LmMKQEAgLTYzNiw3ICs2MzYsNyBAQAogCWlmICh1bmxpa2VseSghcmVhbF9zaXplKSkKIAkJZ290byB0eF9kcm9wOwogCi0JLyogQWxsaWduIGRlc2NyaXB0b3IgdG8gVFhCQiBzaXplICovCisJLyogQWxpZ24gZGVzY3JpcHRvciB0byBUWEJCIHNpemUgKi8KIAlkZXNjX3NpemUgPSBBTElHTihyZWFsX3NpemUsIFRYQkJfU0laRSk7CiAJbnJfdHhiYiA9IGRlc2Nfc2l6ZSAvIFRYQkJfU0laRTsKIAlpZiAodW5saWtlbHkobnJfdHhiYiA+IE1BWF9ERVNDX1RYQkJTKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMgYi9kcml2ZXJzL25ldC9tbHg0L21haW4uYwppbmRleCA2MmZhN2VlLi4zODE0ZmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L21haW4uYworKysgYi9kcml2ZXJzL25ldC9tbHg0L21haW4uYwpAQCAtOTQ0LDYgKzk0NCwxMCBAQAogCX0KIAogCWZvciAocG9ydCA9IDE7IHBvcnQgPD0gZGV2LT5jYXBzLm51bV9wb3J0czsgcG9ydCsrKSB7CisJCWVudW0gbWx4NF9wb3J0X3R5cGUgcG9ydF90eXBlID0gMDsKKwkJbWx4NF9TRU5TRV9QT1JUKGRldiwgcG9ydCwgJnBvcnRfdHlwZSk7CisJCWlmIChwb3J0X3R5cGUpCisJCQlkZXYtPmNhcHMucG9ydF90eXBlW3BvcnRdID0gcG9ydF90eXBlOwogCQlpYl9wb3J0X2RlZmF1bHRfY2FwcyA9IDA7CiAJCWVyciA9IG1seDRfZ2V0X3BvcnRfaWJfY2FwcyhkZXYsIHBvcnQsICZpYl9wb3J0X2RlZmF1bHRfY2Fwcyk7CiAJCWlmIChlcnIpCkBAIC05NTgsNiArOTYyLDcgQEAKIAkJCWdvdG8gZXJyX21jZ190YWJsZV9mcmVlOwogCQl9CiAJfQorCW1seDRfc2V0X3BvcnRfbWFzayhkZXYpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvbWNnLmMgYi9kcml2ZXJzL25ldC9tbHg0L21jZy5jCmluZGV4IGM2ZDMzNmEuLmU2M2MzN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbWNnLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9tY2cuYwpAQCAtMjIyLDcgKzIyMiw3IEBACiAKIAkvKiB0aGUgZ2l2ZW4gcXBuIGlzIGxpc3RlZCBhcyBhIHByb21pc2MgcXBuCiAJICogd2UgbmVlZCB0byBhZGQgaXQgYXMgYSBkdXBsaWNhdGUgdG8gdGhpcyBlbnRyeQotCSAqIGZvciBmdXR1cmUgcmVmZXJuY2UgKi8KKwkgKiBmb3IgZnV0dXJlIHJlZmVyZW5jZXMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRxcCwgJmVudHJ5LT5kdXBsaWNhdGVzLCBsaXN0KSB7CiAJCWlmIChxcG4gPT0gZHFwLT5xcG4pCiAJCQlyZXR1cm4gMDsgLyogcXAgaXMgYWxyZWFkeSBkdXBsaWNhdGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L21seDQuaCBiL2RyaXZlcnMvbmV0L21seDQvbWx4NC5oCmluZGV4IGMxZTBlNWYuLmRkN2Q3NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbWx4NC5oCisrKyBiL2RyaXZlcnMvbmV0L21seDQvbWx4NC5oCkBAIC00MzEsNiArNDMxLDggQEAKIAogdm9pZCBtbHg0X2hhbmRsZV9jYXRhc19lcnIoc3RydWN0IG1seDRfZGV2ICpkZXYpOwogCitpbnQgbWx4NF9TRU5TRV9QT1JUKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBpbnQgcG9ydCwKKwkJICAgIGVudW0gbWx4NF9wb3J0X3R5cGUgKnR5cGUpOwogdm9pZCBtbHg0X2RvX3NlbnNlX3BvcnRzKHN0cnVjdCBtbHg0X2RldiAqZGV2LAogCQkJIGVudW0gbWx4NF9wb3J0X3R5cGUgKnN0eXBlLAogCQkJIGVudW0gbWx4NF9wb3J0X3R5cGUgKmRlZmF1bHRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvcG9ydC5jIGIvZHJpdmVycy9uZXQvbWx4NC9wb3J0LmMKaW5kZXggZWNhN2Q4NS4uODg1NjY1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9wb3J0LmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9wb3J0LmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogCQl9CiAKIAkJaWYgKG1hYyA9PSAoTUxYNF9NQUNfTUFTSyAmIGJlNjRfdG9fY3B1KHRhYmxlLT5lbnRyaWVzW2ldKSkpIHsKLQkJCS8qIE1BQyBhbHJlYWR5IHJlZ2lzdGVyZWQsIGluY3JlYXNlIHJlZmVybmNlIGNvdW50ICovCisJCQkvKiBNQUMgYWxyZWFkeSByZWdpc3RlcmVkLCBpbmNyZWFzZSByZWZlcmVuY2VzIGNvdW50ICovCiAJCQkrK3RhYmxlLT5yZWZzW2ldOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTM2MCw3ICszNjAsNyBAQAogCQlpZiAodGFibGUtPnJlZnNbaV0gJiYKIAkJICAgICh2bGFuID09IChNTFg0X1ZMQU5fTUFTSyAmCiAJCQkgICAgICBiZTMyX3RvX2NwdSh0YWJsZS0+ZW50cmllc1tpXSkpKSkgewotCQkJLyogVmxhbiBhbHJlYWR5IHJlZ2lzdGVyZWQsIGluY3JlYXNlIHJlZmVybmNlIGNvdW50ICovCisJCQkvKiBWbGFuIGFscmVhZHkgcmVnaXN0ZXJlZCwgaW5jcmVhc2UgcmVmZXJlbmNlcyBjb3VudCAqLwogCQkJKmluZGV4ID0gaTsKIAkJCSsrdGFibGUtPnJlZnNbaV07CiAJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvc2Vuc2UuYyBiL2RyaXZlcnMvbmV0L21seDQvc2Vuc2UuYwppbmRleCAwMTVmYmU3Li5lMjMzN2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L3NlbnNlLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9zZW5zZS5jCkBAIC0zOCw4ICszOCw4IEBACiAKICNpbmNsdWRlICJtbHg0LmgiCiAKLXN0YXRpYyBpbnQgbWx4NF9TRU5TRV9QT1JUKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBpbnQgcG9ydCwKLQkJCSAgIGVudW0gbWx4NF9wb3J0X3R5cGUgKnR5cGUpCitpbnQgbWx4NF9TRU5TRV9QT1JUKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBpbnQgcG9ydCwKKwkJICAgIGVudW0gbWx4NF9wb3J0X3R5cGUgKnR5cGUpCiB7CiAJdTY0IG91dF9wYXJhbTsKIAlpbnQgZXJyID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCmluZGV4IDY3M2RjNjAuLjE0NDZkZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKKysrIGIvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYwpAQCAtMzcwMiw3ICszNzAyLDcgQEAKIAogLyoKICAqIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHNsaWNlcyBzdXBwb3J0ZWQuCi0gKiBUaGUgbnVtYmVyIHNsaWNlcyBpcyB0aGUgbWludW11bSBvZiB0aGUgbnVtYmVyIG9mIENQVVMsCisgKiBUaGUgbnVtYmVyIHNsaWNlcyBpcyB0aGUgbWluaW11bSBvZiB0aGUgbnVtYmVyIG9mIENQVVMsCiAgKiB0aGUgbnVtYmVyIG9mIE1TSS1YIGlycXMgc3VwcG9ydGVkLCB0aGUgbnVtYmVyIG9mIHNsaWNlcwogICogc3VwcG9ydGVkIGJ5IHRoZSBmaXJtd2FyZQogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9teXJpX3NidXMuYyBiL2RyaXZlcnMvbmV0L215cmlfc2J1cy5jCmluZGV4IGE3NjEwNzYuLjUzYWVlYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L215cmlfc2J1cy5jCisrKyBiL2RyaXZlcnMvbmV0L215cmlfc2J1cy5jCkBAIC0xMDA5LDcgKzEwMDksNyBAQAogCiAJLyogTWFwIGluIHRoZSBNeXJpQ09NIHJlZ2lzdGVyL2xvY2FscmFtIHNldC4gKi8KIAlpZiAobXAtPmVlcHJvbS5jcHV2ZXJzIDwgQ1BVVkVSU180XzApIHsKLQkJLyogWFhYIE1ha2VzIG5vIHNlbnNlLCBpZiBjb250cm9sIHJlZyBpcyBub24tZXhpc3RhbnQgdGhpcworCQkvKiBYWFggTWFrZXMgbm8gc2Vuc2UsIGlmIGNvbnRyb2wgcmVnIGlzIG5vbi1leGlzdGVudCB0aGlzCiAJCSAqIFhYWCBkcml2ZXIgY2Fubm90IGZ1bmN0aW9uIGF0IGFsbC4uLiBtYXliZSBwcmUtNC4wIGlzCiAJCSAqIFhYWCBvbmx5IGEgdmFsaWQgdmVyc2lvbiBmb3IgUENJIGNhcmRzPyAgQXNrIGZlbGR5Li4uCiAJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmF0c2VtaS5jIGIvZHJpdmVycy9uZXQvbmF0c2VtaS5jCmluZGV4IDJmZDM5NjMuLjEwNzQyMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25hdHNlbWkuYworKysgYi9kcml2ZXJzL25ldC9uYXRzZW1pLmMKQEAgLTIwMyw3ICsyMDMsNyBAQAogSUlJZC4gU3luY2hyb25pemF0aW9uCiAKIE1vc3Qgb3BlcmF0aW9ucyBhcmUgc3luY2hyb25pemVkIG9uIHRoZSBucC0+bG9jayBpcnEgc3BpbmxvY2ssIGV4Y2VwdCB0aGUKLXJlY2lldmUgYW5kIHRyYW5zbWl0IHBhdGhzIHdoaWNoIGFyZSBzeW5jaHJvbmlzZWQgdXNpbmcgYSBjb21iaW5hdGlvbiBvZgorcmVjZWl2ZSBhbmQgdHJhbnNtaXQgcGF0aHMgd2hpY2ggYXJlIHN5bmNocm9uaXNlZCB1c2luZyBhIGNvbWJpbmF0aW9uIG9mCiBoYXJkd2FyZSBkZXNjcmlwdG9yIG93bmVyc2hpcCwgZGlzYWJsaW5nIGludGVycnVwdHMgYW5kIE5BUEkgcG9sbCBzY2hlZHVsaW5nLgogCiBJVmIuIFJlZmVyZW5jZXMKQEAgLTcyNiw3ICs3MjYsNyBAQAogCSAqIFRoZXJlIGFyZSB0d28gYWRkcmVzc2VzIHdlIG11c3QgYXZvaWQ6CiAJICogLSB0aGUgYWRkcmVzcyBvbiB0aGUgZXh0ZXJuYWwgcGh5IHRoYXQgaXMgdXNlZCBmb3IgdHJhbnNtaXNzaW9uLgogCSAqIC0gdGhlIGFkZHJlc3MgdGhhdCB3ZSB3YW50IHRvIGFjY2Vzcy4gVXNlciBzcGFjZSBjYW4gYWNjZXNzIHBoeXMKLQkgKiAgIG9uIHRoZSBtaWkgYnVzIHdpdGggU0lPQ0dNSUlSRUcvU0lPQ1NNSUlSRUcsIGluZGVwZW5kYW50IGZyb20gdGhlCisJICogICBvbiB0aGUgbWlpIGJ1cyB3aXRoIFNJT0NHTUlJUkVHL1NJT0NTTUlJUkVHLCBpbmRlcGVuZGVudCBmcm9tIHRoZQogCSAqICAgcGh5IHRoYXQgaXMgdXNlZCBmb3IgdHJhbnNtaXNzaW9uLgogCSAqLwogCkBAIC04NjAsNiArODYwLDkgQEAKIAkJcHJldl9lZWRhdGEgPSBlZWRhdGE7CiAJfQogCisJLyogU3RvcmUgTUFDIEFkZHJlc3MgaW4gcGVybV9hZGRyICovCisJbWVtY3B5KGRldi0+cGVybV9hZGRyLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisKIAlkZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpIGlvYWRkcjsKIAlkZXYtPmlycSA9IGlycTsKIApAQCAtMTk4Miw3ICsxOTg1LDcgQEAKIAogCW5wLT5yeF9oZWFkX2Rlc2MgPSAmbnAtPnJ4X3JpbmdbMF07CiAKLQkvKiBQbGVhc2UgYmUgY2FyZWZ1bGwgYmVmb3JlIGNoYW5naW5nIHRoaXMgbG9vcCAtIGF0IGxlYXN0IGdjYy0yLjk1LjEKKwkvKiBQbGVhc2UgYmUgY2FyZWZ1bCBiZWZvcmUgY2hhbmdpbmcgdGhpcyBsb29wIC0gYXQgbGVhc3QgZ2NjLTIuOTUuMQogCSAqIG1pc2NvbXBpbGVzIGl0IG90aGVyd2lzZS4KIAkgKi8KIAkvKiBJbml0aWFsaXplIGFsbCBSeCBkZXNjcmlwdG9ycy4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25lLWg4MzAwLmMgYi9kcml2ZXJzL25ldC9uZS1oODMwMC5jCmluZGV4IDMwYmU4YzYuLjcyOThhMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25lLWg4MzAwLmMKKysrIGIvZHJpdmVycy9uZXQvbmUtaDgzMDAuYwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAjaWZuZGVmIE1PRFVMRQogc3RydWN0IG5ldF9kZXZpY2UgKiBfX2luaXQgbmVfcHJvYmUoaW50IHVuaXQpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFsbG9jX2VpX25ldGRldigpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBfX19fYWxsb2NfZWlfbmV0ZGV2KDApOwogCWludCBlcnI7CiAKIAlpZiAoIWRldikKQEAgLTE5NywxNSArMTk3LDE1IEBACiAJLm5kb19vcGVuCQk9IG5lX29wZW4sCiAJLm5kb19zdG9wCQk9IG5lX2Nsb3NlLAogCi0JLm5kb19zdGFydF94bWl0CQk9IGVpX3N0YXJ0X3htaXQsCi0JLm5kb190eF90aW1lb3V0CQk9IGVpX3R4X3RpbWVvdXQsCi0JLm5kb19nZXRfc3RhdHMJCT0gZWlfZ2V0X3N0YXRzLAotCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZWlfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fc3RhcnRfeG1pdAkJPSBfX2VpX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IF9fZWlfdHhfdGltZW91dCwKKwkubmRvX2dldF9zdGF0cwkJPSBfX2VpX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IF9fZWlfc2V0X211bHRpY2FzdF9saXN0LAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAotCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGV0aF9tYWNfYWRkciwKIAkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQkubmRvX3BvbGxfY29udHJvbGxlcgk9IGVpX3BvbGwsCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBfX2VpX3BvbGwsCiAjZW5kaWYKIH07CiAKQEAgLTYzNyw3ICs2MzcsNyBAQAogCWludCBlcnI7CiAKIAlmb3IgKHRoaXNfZGV2ID0gMDsgdGhpc19kZXYgPCBNQVhfTkVfQ0FSRFM7IHRoaXNfZGV2KyspIHsKLQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFsbG9jX2VpX25ldGRldigpOworCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gX19fX2FsbG9jX2VpX25ldGRldigwKTsKIAkJaWYgKCFkZXYpCiAJCQlicmVhazsKIAkJaWYgKGlvW3RoaXNfZGV2XSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCmluZGV4IGRmYjY3ZWIuLmViNDFlNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYworKysgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKQEAgLTY3MSw2ICs2NzEsNyBAQAogCQlnb3RvIGRvbmU7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpOworcmVzdGFydDoKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG50LCAmdGFyZ2V0X2xpc3QsIGxpc3QpIHsKIAkJbmV0Y29uc29sZV90YXJnZXRfZ2V0KG50KTsKIAkJaWYgKG50LT5ucC5kZXYgPT0gZGV2KSB7CkBAIC02ODMsOSArNjg0LDE2IEBACiAJCQkJICogcnRubF9sb2NrIGFscmVhZHkgaGVsZAogCQkJCSAqLwogCQkJCWlmIChudC0+bnAuZGV2KSB7CisJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoCisJCQkJCQkJICAgICAgJnRhcmdldF9saXN0X2xvY2ssCisJCQkJCQkJICAgICAgZmxhZ3MpOwogCQkJCQlfX25ldHBvbGxfY2xlYW51cCgmbnQtPm5wKTsKKwkJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnRhcmdldF9saXN0X2xvY2ssCisJCQkJCQkJICBmbGFncyk7CiAJCQkJCWRldl9wdXQobnQtPm5wLmRldik7CiAJCQkJCW50LT5ucC5kZXYgPSBOVUxMOworCQkJCQluZXRjb25zb2xlX3RhcmdldF9wdXQobnQpOworCQkJCQlnb3RvIHJlc3RhcnQ7CiAJCQkJfQogCQkJCS8qIEZhbGwgdGhyb3VnaCAqLwogCQkJY2FzZSBORVRERVZfR09JTkdfRE9XTjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCmluZGV4IGQ3Mjk5ZjEuLjY3OWRjODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaApAQCAtMTc0LDcgKzE3NCw3IEBACiAKICNkZWZpbmUJTUFYX05VTV9DQVJEUwkJNAogCi0jZGVmaW5lIE1BWF9CVUZGRVJTX1BFUl9DTUQJMzIKKyNkZWZpbmUgTkVUWEVOX01BWF9GUkFHU19QRVJfVFgJMTQKICNkZWZpbmUgTUFYX1RTT19IRUFERVJfREVTQwkyCiAjZGVmaW5lIE1HTVRfQ01EX0RFU0NfUkVTVgk0CiAjZGVmaW5lIFRYX1NUT1BfVEhSRVNICQkoKE1BWF9TS0JfRlJBR1MgPj4gMikgKyBNQVhfVFNPX0hFQURFUl9ERVNDIFwKQEAgLTU1OCw3ICs1NTgsNyBAQAogICovCiBzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIgewogCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IG5ldHhlbl9za2JfZnJhZyBmcmFnX2FycmF5W01BWF9CVUZGRVJTX1BFUl9DTUQgKyAxXTsKKwlzdHJ1Y3QgbmV0eGVuX3NrYl9mcmFnIGZyYWdfYXJyYXlbTUFYX1NLQl9GUkFHUyArIDFdOwogCXUzMiBmcmFnX2NvdW50OwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaAppbmRleCBkOGJkNzNkLi5kYzE5NjdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaAorKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaApAQCAtNzgwLDcgKzc4MCw3IEBACiAKIC8qCiAgKiBjYXBhYmlsaXRpZXMgcmVnaXN0ZXIsIGNhbiBiZSB1c2VkIHRvIHNlbGVjdGl2ZWx5IGVuYWJsZS9kaXNhYmxlIGZlYXR1cmVzCi0gKiBmb3IgYmFja3dhcmQgY29tcGFiaWxpdHkKKyAqIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CiAgKi8KICNkZWZpbmUgQ1JCX05JQ19DQVBBQklMSVRJRVNfSE9TVAlORVRYRU5fTklDX1JFRygweDFhOCkKICNkZWZpbmUgQ1JCX05JQ19NU0lfTU9ERV9IT1NUCQlORVRYRU5fTklDX1JFRygweDI3MCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwppbmRleCA4MzM0OGRjLi5lOGE0YjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCkBAIC0xODQ0LDYgKzE4NDQsOCBAQAogCXN0cnVjdCBjbWRfZGVzY190eXBlMCAqaHdkZXNjLCAqZmlyc3RfZGVzYzsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAlpbnQgaSwgazsKKwlpbnQgZGVsdGEgPSAwOworCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKmZyYWc7CiAKIAl1MzIgcHJvZHVjZXI7CiAJaW50IGZyYWdfY291bnQsIG5vX29mX2Rlc2M7CkBAIC0xODUxLDYgKzE4NTMsMjEgQEAKIAogCWZyYWdfY291bnQgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMTsKIAorCS8qIDE0IGZyYWdzIHN1cHBvcnRlZCBmb3Igbm9ybWFsIHBhY2tldCBhbmQKKwkgKiAzMiBmcmFncyBzdXBwb3J0ZWQgZm9yIFRTTyBwYWNrZXQKKwkgKi8KKwlpZiAoIXNrYl9pc19nc28oc2tiKSAmJiBmcmFnX2NvdW50ID4gTkVUWEVOX01BWF9GUkFHU19QRVJfVFgpIHsKKworCQlmb3IgKGkgPSAwOyBpIDwgKGZyYWdfY291bnQgLSBORVRYRU5fTUFYX0ZSQUdTX1BFUl9UWCk7IGkrKykgeworCQkJZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOworCQkJZGVsdGEgKz0gZnJhZy0+c2l6ZTsKKwkJfQorCisJCWlmICghX19wc2tiX3B1bGxfdGFpbChza2IsIGRlbHRhKSkKKwkJCWdvdG8gZHJvcF9wYWNrZXQ7CisKKwkJZnJhZ19jb3VudCA9IDEgKyBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCX0KIAkvKiA0IGZyYWdtZW50cyBwZXIgY21kIGRlcyAqLwogCW5vX29mX2Rlc2MgPSAoZnJhZ19jb3VudCArIDMpID4+IDI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25zODM4MjAuYyBiL2RyaXZlcnMvbmV0L25zODM4MjAuYwppbmRleCBhNDFiMmNmLi42NjY3ZTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uczgzODIwLmMKKysrIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCkBAIC01MTIsNyArNTEyLDcgQEAKIC8qIFBhY2tldCBSZWNlaXZlcgogICoKICAqIFRoZSBoYXJkd2FyZSBzdXBwb3J0cyBsaW5rZWQgbGlzdHMgb2YgcmVjZWl2ZSBkZXNjcmlwdG9ycyBmb3IKLSAqIHdoaWNoIG93bmVyc2hpcCBpcyB0cmFuc2ZlcmVkIGJhY2sgYW5kIGZvcnRoIGJ5IG1lYW5zIG9mIGFuCisgKiB3aGljaCBvd25lcnNoaXAgaXMgdHJhbnNmZXJyZWQgYmFjayBhbmQgZm9ydGggYnkgbWVhbnMgb2YgYW4KICAqIG93bmVyc2hpcCBiaXQuICBXaGlsZSB0aGUgaGFyZHdhcmUgZG9lcyBzdXBwb3J0IHRoZSB1c2Ugb2YgYQogICogcmluZyBmb3IgcmVjZWl2ZSBkZXNjcmlwdG9ycywgd2Ugb25seSBtYWtlIHVzZSBvZiBhIGNoYWluIGluCiAgKiBhbiBhdHRlbXB0IHRvIHJlZHVjZSBidXMgdHJhZmZpYyB1bmRlciBoZWF2eSBsb2FkIHNjZW5hcmlvcy4KQEAgLTExNDcsNyArMTE0Nyw3IEBACiAjaWZkZWYgTlM4MzgyMF9WTEFOX0FDQ0VMX1NVUFBPUlQKIAlpZih2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKIAkJLyogZmV0Y2ggdGhlIHZsYW4gdGFnIGluZm8gb3V0IG9mIHRoZQotCQkgKiBhbmNpbGxpYXJ5IGRhdGEgaWYgdGhlIHZsYW4gY29kZQorCQkgKiBhbmNpbGxhcnkgZGF0YSBpZiB0aGUgdmxhbiBjb2RlCiAJCSAqIGlzIHVzaW5nIGh3IHZsYW4gYWNjZWxlcmF0aW9uCiAJCSAqLwogCQlzaG9ydCB0YWcgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZS5oIGIvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlLmgKaW5kZXggZTFlMzNjOC4uYmYxMjZlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlLmgKKysrIGIvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlLmgKQEAgLTM1MSw3ICszNTEsNyBAQAogfTsKIAogLyoqCi0gKiBzdHJ1Y3QgcGNoX2diZV9tYWNfaW5mbyAtIE1BQyBpbmZvbWF0aW9uCisgKiBzdHJ1Y3QgcGNoX2diZV9tYWNfaW5mbyAtIE1BQyBpbmZvcm1hdGlvbgogICogQGFkZHJbNl06CQlTdG9yZSB0aGUgTUFDIGFkZHJlc3MKICAqIEBmYzoJCQlNb2RlIG9mIGZsb3cgY29udHJvbAogICogQGZjX2F1dG9uZWc6CQlBdXRvIG5lZ290aWF0aW9uIGVuYWJsZSBmb3IgZmxvdyBjb250cm9sIHNldHRpbmcKQEAgLTM3NSw3ICszNzUsNyBAQAogfTsKIAogLyoqCi0gKiBzdHJ1Y3QgcGNoX2diZV9waHlfaW5mbyAtIFBIWSBpbmZvbWF0aW9uCisgKiBzdHJ1Y3QgcGNoX2diZV9waHlfaW5mbyAtIFBIWSBpbmZvcm1hdGlvbgogICogQGFkZHI6CQlQSFkgYWRkcmVzcwogICogQGlkOgkJCVBIWSdzIGlkZW50aWZpZXIKICAqIEByZXZpc2lvbjoJCVBIWSdzIHJldmlzaW9uCkBAIC0zOTMsNyArMzkzLDcgQEAKIC8qIQogICogQGluZ3JvdXAgR2lnYWJpdCBFdGhlciBkcml2ZXIgTGF5ZXIKICAqIEBzdHJ1Y3QgIHBjaF9nYmVfYnVzX2luZm8KLSAqIEBicmllZiAgIEJ1cyBpbmZvbWF0aW9uCisgKiBAYnJpZWYgICBCdXMgaW5mb3JtYXRpb24KICAqLwogc3RydWN0IHBjaF9nYmVfYnVzX2luZm8gewogCXU4IHR5cGU7CkBAIC00MDQsNyArNDA0LDcgQEAKIC8qIQogICogQGluZ3JvdXAgR2lnYWJpdCBFdGhlciBkcml2ZXIgTGF5ZXIKICAqIEBzdHJ1Y3QgIHBjaF9nYmVfaHcKLSAqIEBicmllZiAgIEhhcmR3YXJlIGluZm9tYXRpb24KKyAqIEBicmllZiAgIEhhcmR3YXJlIGluZm9ybWF0aW9uCiAgKi8KIHN0cnVjdCBwY2hfZ2JlX2h3IHsKIAl2b2lkICpiYWNrOwpAQCAtNDYyLDcgKzQ2Miw3IEBACiAKIAogLyoqCi0gKiBzdHJ1Y3QgcGNoX2diZV9idWZmZXIgLSBCdWZmZXIgaW5mb21hdGlvbgorICogc3RydWN0IHBjaF9nYmVfYnVmZmVyIC0gQnVmZmVyIGluZm9ybWF0aW9uCiAgKiBAc2tiOglwb2ludGVyIHRvIGEgc29ja2V0IGJ1ZmZlcgogICogQGRtYToJRE1BIGFkZHJlc3MKICAqIEB0aW1lX3N0YW1wOgl0aW1lIHN0YW1wCkBAIC00NzcsNyArNDc3LDcgQEAKIH07CiAKIC8qKgotICogc3RydWN0IHBjaF9nYmVfdHhfcmluZyAtIHR4IHJpbmcgaW5mb21hdGlvbgorICogc3RydWN0IHBjaF9nYmVfdHhfcmluZyAtIHR4IHJpbmcgaW5mb3JtYXRpb24KICAqIEB0eF9sb2NrOglzcGlubG9jayBzdHJ1Y3RzCiAgKiBAZGVzYzoJcG9pbnRlciB0byB0aGUgZGVzY3JpcHRvciByaW5nIG1lbW9yeQogICogQGRtYToJcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZGVzY3JpcHRvciByaW5nCkBAIC00OTksNyArNDk5LDcgQEAKIH07CiAKIC8qKgotICogc3RydWN0IHBjaF9nYmVfcnhfcmluZyAtIHJ4IHJpbmcgaW5mb21hdGlvbgorICogc3RydWN0IHBjaF9nYmVfcnhfcmluZyAtIHJ4IHJpbmcgaW5mb3JtYXRpb24KICAqIEBkZXNjOglwb2ludGVyIHRvIHRoZSBkZXNjcmlwdG9yIHJpbmcgbWVtb3J5CiAgKiBAZG1hOglwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBkZXNjcmlwdG9yIHJpbmcKICAqIEBzaXplOglsZW5ndGggb2YgZGVzY3JpcHRvciByaW5nIGluIGJ5dGVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX2V0aHRvb2wuYwppbmRleCBjOGM4NzNiLi5kMjE3NGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9ldGh0b29sLmMKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlICJwY2hfZ2JlX2FwaS5oIgogCiAvKioKLSAqIHBjaF9nYmVfc3RhdHMgLSBTdGF0cyBpdGVtIGluZm9tYXRpb24KKyAqIHBjaF9nYmVfc3RhdHMgLSBTdGF0cyBpdGVtIGluZm9ybWF0aW9uCiAgKi8KIHN0cnVjdCBwY2hfZ2JlX3N0YXRzIHsKIAljaGFyIHN0cmluZ1tFVEhfR1NUUklOR19MRU5dOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9tYWluLmMKaW5kZXggNTA5ODY4NC4uNTZkMDQ5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfbWFpbi5jCkBAIC0zNCw2ICszNCwxMCBAQAogI2RlZmluZSBQQ0hfR0JFX0NPUFlCUkVBS19ERUZBVUxUCTI1NgogI2RlZmluZSBQQ0hfR0JFX1BDSV9CQVIJCQkxCiAKKy8qIE1hY3JvcyBmb3IgTUw3MjIzICovCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUk9ITQkJCTB4MTBkYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JPSE1fTUw3MjIzX0dCRQkJMHg4MDEzCisKICNkZWZpbmUgUENIX0dCRV9UWF9XRUlHSFQgICAgICAgICA2NAogI2RlZmluZSBQQ0hfR0JFX1JYX1dFSUdIVCAgICAgICAgIDY0CiAjZGVmaW5lIFBDSF9HQkVfUlhfQlVGRkVSX1dSSVRFICAgMTYKQEAgLTQzLDggKzQ3LDcgQEAKIAogI2RlZmluZSBQQ0hfR0JFX01BQ19SR01JSV9DVFJMX1NFVFRJTkcgKCBcCiAJUENIX0dCRV9DSElQX1RZUEVfSU5URVJOQUwgfCBcCi0JUENIX0dCRV9SR01JSV9NT0RFX1JHTUlJICAgfCBcCi0JUENIX0dCRV9DUlNfU0VMICAgICAgICAgICAgICBcCisJUENIX0dCRV9SR01JSV9NT0RFX1JHTUlJICAgICBcCiAJKQogCiAvKiBFdGhlcnR5cGUgZmllbGQgdmFsdWVzICovCkBAIC0xMDExLDcgKzEwMTQsNyBAQAogCXRtcF9za2ItPmxlbiA9IHNrYi0+bGVuOwogCW1lbWNweSgmdG1wX3NrYi0+ZGF0YVtFVEhfSExFTiArIDJdLCAmc2tiLT5kYXRhW0VUSF9ITEVOXSwKIAkgICAgICAgKHNrYi0+bGVuIC0gRVRIX0hMRU4pKTsKLQkvKi0tIFNldCBCdWZmZXIgaW5mb21hdGlvbiAtLSovCisJLyotLSBTZXQgQnVmZmVyIGluZm9ybWF0aW9uIC0tKi8KIAlidWZmZXJfaW5mby0+bGVuZ3RoID0gdG1wX3NrYi0+bGVuOwogCWJ1ZmZlcl9pbmZvLT5kbWEgPSBkbWFfbWFwX3NpbmdsZSgmYWRhcHRlci0+cGRldi0+ZGV2LCB0bXBfc2tiLT5kYXRhLAogCQkJCQkgIGJ1ZmZlcl9pbmZvLT5sZW5ndGgsCkBAIC0xNDk0LDEyICsxNDk3LDExIEBACiAJCQkvKiBXcml0ZSBtZXRhIGRhdGUgb2Ygc2tiICovCiAJCQlza2JfcHV0KHNrYiwgbGVuZ3RoKTsKIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7Ci0JCQlpZiAoKHRjcF9pcF9zdGF0dXMgJiBQQ0hfR0JFX1JYRF9BQ0NfU1RBVF9UQ1BJUE9LKSA9PQotCQkJICAgIFBDSF9HQkVfUlhEX0FDQ19TVEFUX1RDUElQT0spIHsKLQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCQkJfSBlbHNlIHsKKwkJCWlmICh0Y3BfaXBfc3RhdHVzICYgUENIX0dCRV9SWERfQUNDX1NUQVRfVENQSVBPSykKIAkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7Ci0JCQl9CisJCQllbHNlCisJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwogCQkJbmFwaV9ncm9fcmVjZWl2ZSgmYWRhcHRlci0+bmFwaSwgc2tiKTsKIAkJCSgqd29ya19kb25lKSsrOwogCQkJcHJfZGVidWcoIlJlY2VpdmUgc2tiLT5pcF9zdW1tZWQ6ICVkIGxlbmd0aDogJWRcbiIsCkBAIC0xNTQwLDcgKzE1NDIsNyBAQAogCXNpemUgPSAoaW50KXNpemVvZihzdHJ1Y3QgcGNoX2diZV9idWZmZXIpICogdHhfcmluZy0+Y291bnQ7CiAJdHhfcmluZy0+YnVmZmVyX2luZm8gPSB2emFsbG9jKHNpemUpOwogCWlmICghdHhfcmluZy0+YnVmZmVyX2luZm8pIHsKLQkJcHJfZXJyKCJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgYnVmZmVyIGluZm9tYXRpb25cbiIpOworCQlwcl9lcnIoIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBidWZmZXIgaW5mb3JtYXRpb25cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTI0MjAsNiArMjQyMiwxMyBAQAogCSAuY2xhc3MgPSAoUENJX0NMQVNTX05FVFdPUktfRVRIRVJORVQgPDwgOCksCiAJIC5jbGFzc19tYXNrID0gKDB4RkZGRjAwKQogCSB9LAorCXsudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9ST0hNLAorCSAuZGV2aWNlID0gUENJX0RFVklDRV9JRF9ST0hNX01MNzIyM19HQkUsCisJIC5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAorCSAuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwKKwkgLmNsYXNzID0gKFBDSV9DTEFTU19ORVRXT1JLX0VUSEVSTkVUIDw8IDgpLAorCSAuY2xhc3NfbWFzayA9ICgweEZGRkYwMCkKKwkgfSwKIAkvKiByZXF1aXJlZCBsYXN0IGVudHJ5ICovCiAJezB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNpLXNrZWxldG9uLmMgYi9kcml2ZXJzL25ldC9wY2ktc2tlbGV0b24uYwppbmRleCAxNzY2ZGM0Li5jMGYyMzM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY2ktc2tlbGV0b24uYworKysgYi9kcml2ZXJzL25ldC9wY2ktc2tlbGV0b24uYwpAQCAtMjE0LDcgKzIxNCw3IEBACiAJeyAiU01DMTIxMVRYIEVaQ2FyZCAxMC8xMDAgKFJlYWxUZWsgUlRMODEzOSkiIH0sCiAvKgl7IE1QWDUwMzAsICJBY2N0b24gTVBYNTAzMCAoUmVhbFRlayBSVEw4MTM5KSIgfSwqLwogCXsgIkRlbHRhIEVsZWN0cm9uaWNzIDgxMzkgMTAvMTAwQmFzZVRYIiB9LAotCXsgIkFkZHRyb24gVGVjaG5vbGd5IDgxMzkgMTAvMTAwQmFzZVRYIiB9LAorCXsgIkFkZHRyb24gVGVjaG5vbG9neSA4MTM5IDEwLzEwMEJhc2VUWCIgfSwKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTc0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYwppbmRleCAzMjFiMTJmLi44MWFjMzMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYwpAQCAtOTUwLDcgKzk1MCw3IEBACiB9CiAKIC8qICBVcGRhdGUgc3RhdGlzdGljcy4KLQlTdXByaXNpbmdseSB0aGlzIG5lZWQgbm90IGJlIHJ1biBzaW5nbGUtdGhyZWFkZWQsIGJ1dCBpdCBlZmZlY3RpdmVseSBpcy4KKwlTdXJwcmlzaW5nbHkgdGhpcyBuZWVkIG5vdCBiZSBydW4gc2luZ2xlLXRocmVhZGVkLCBidXQgaXQgZWZmZWN0aXZlbHkgaXMuCiAJVGhlIGNvdW50ZXJzIGNsZWFyIHdoZW4gcmVhZCwgc28gdGhlIGFkZHMgbXVzdCBtZXJlbHkgYmUgYXRvbWljLgogICovCiBzdGF0aWMgdm9pZCB1cGRhdGVfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMKaW5kZXggZDNjYjc3Mi4uMzA3N2Q3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMKQEAgLTc4MCw3ICs3ODAsNyBAQAogICBBbGV4ZXkgS3V6bmV0c292CTogdXNlIHRoZSA4MzkwJ3Mgc2l4IGJpdCBoYXNoIG11bHRpY2FzdCBmaWx0ZXIuCiAgIFBhdWwgR29ydG1ha2VyCTogdHdlYWsgQU5LJ3MgYWJvdmUgbXVsdGljYXN0IGNoYW5nZXMgYSBiaXQuCiAgIFBhdWwgR29ydG1ha2VyCTogdXBkYXRlIHBhY2tldCBzdGF0aXN0aWNzIGZvciB2Mi4xLngKLSAgQWxhbiBDb3gJCTogc3VwcG9ydCBhcmJpdGFyeSBzdHVwaWQgcG9ydCBtYXBwaW5ncyBvbiB0aGUKKyAgQWxhbiBDb3gJCTogc3VwcG9ydCBhcmJpdHJhcnkgc3R1cGlkIHBvcnQgbWFwcGluZ3Mgb24gdGhlCiAgIAkJCSAgNjhLIE1hY2ludG9zaC4gU3VwcG9ydCA+MTZiaXQgSS9PIHNwYWNlcwogICBQYXVsIEdvcnRtYWtlcgk6IGFkZCBrbW9kIHN1cHBvcnQgZm9yIGF1dG8tbG9hZGluZyBvZiB0aGUgODM5MAogCQkJICBtb2R1bGUgYnkgYWxsIGRyaXZlcnMgdGhhdCByZXF1aXJlIGl0LgpAQCAtODQyLDcgKzg0Miw3IEBACiAvKgogICoJU01QIGFuZCB0aGUgODM5MCBzZXR1cC4KICAqCi0gKglUaGUgODM5MCBpc250IGV4YWN0bHkgZGVzaWduZWQgdG8gYmUgbXVsdGl0aHJlYWRlZCBvbiBSWC9UWC4gVGhlcmUgaXMKKyAqCVRoZSA4MzkwIGlzbid0IGV4YWN0bHkgZGVzaWduZWQgdG8gYmUgbXVsdGl0aHJlYWRlZCBvbiBSWC9UWC4gVGhlcmUgaXMKICAqCWEgcGFnZSByZWdpc3RlciB0aGF0IGNvbnRyb2xzIGJhbmsgYW5kIHBhY2tldCBidWZmZXIgYWNjZXNzLiBXZSBndWFyZAogICoJdGhpcyB3aXRoIGVpX2xvY2FsLT5wYWdlX2xvY2suIE5vYm9keSBzaG91bGQgYXNzdW1lIG9yIHNldCB0aGUgcGFnZSBvdGhlcgogICoJdGhhbiB6ZXJvIHdoZW4gdGhlIGxvY2sgaXMgbm90IGhlbGQuIExvY2sgaG9sZGVycyBtdXN0IHJlc3RvcmUgcGFnZSAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCmluZGV4IDhhOWZmNTMuLjEwODU5MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCkBAIC0xMjY0LDcgKzEyNjQsNyBAQAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotICAgIEhhbmRsZSBhIFR4IGFub21vbG91cyBldmVudC4gIEVudGVyZWQgd2hpbGUgaW4gV2luZG93IDIuCisgICAgSGFuZGxlIGEgVHggYW5vbWFsb3VzIGV2ZW50LiAgRW50ZXJlZCB3aGlsZSBpbiBXaW5kb3cgMi4KIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbmV0MzIuYyBiL2RyaXZlcnMvbmV0L3BjbmV0MzIuYwppbmRleCBhZWUzYmIwLi43NjgwMzc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY25ldDMyLmMKKysrIGIvZHJpdmVycy9uZXQvcGNuZXQzMi5jCkBAIC0xNjUxLDcgKzE2NTEsNyBAQAogCS8qCiAJICogIE9uIHNlbGVjdGVkIGNoaXBzIHR1cm4gb24gdGhlIEJDUjE4Ok5PVUZMTyBiaXQuIFRoaXMgc3RvcHMgdHJhbnNtaXQKIAkgKiAgc3RhcnRpbmcgdW50aWwgdGhlIHBhY2tldCBpcyBsb2FkZWQuIFN0cmlrZSBvbmUgZm9yIHJlbGlhYmlsaXR5LCBsb3NlCi0JICogIG9uZSBmb3IgbGF0ZW5jeSAtIGFsdGhvdWdoIG9uIFBDSSB0aGlzIGlzbnQgYSBiaWcgbG9zcy4gT2xkZXIgY2hpcHMKKwkgKiAgb25lIGZvciBsYXRlbmN5IC0gYWx0aG91Z2ggb24gUENJIHRoaXMgaXNuJ3QgYSBiaWcgbG9zcy4gT2xkZXIgY2hpcHMKIAkgKiAgaGF2ZSBGSUZPJ3Mgc21hbGxlciB0aGFuIGEgcGFja2V0LCBzbyB5b3UgY2FuJ3QgZG8gdGhpcy4KIAkgKiAgVHVybiBvbiBCQ1IxODpCdXJzdFJkRW4gYW5kIEJDUjE4OkJ1cnN0V3JFbi4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCmluZGV4IGU4NzBjMDYuLmZmMTA5ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwpAQCAtNTM4LDcgKzUzOCw3IEBACiAvKiBHZW5lcmljIFBIWSBzdXBwb3J0IGFuZCBoZWxwZXIgZnVuY3Rpb25zICovCiAKIC8qKgotICogZ2VucGh5X2NvbmZpZ19hZHZlcnQgLSBzYW5pdGl6ZSBhbmQgYWR2ZXJ0aXNlIGF1dG8tbmVnb3RhdGlvbiBwYXJhbWV0ZXJzCisgKiBnZW5waHlfY29uZmlnX2FkdmVydCAtIHNhbml0aXplIGFuZCBhZHZlcnRpc2UgYXV0by1uZWdvdGlhdGlvbiBwYXJhbWV0ZXJzCiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKICAqCiAgKiBEZXNjcmlwdGlvbjogV3JpdGVzIE1JSV9BRFZFUlRJU0Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzLApAQCAtNjg3LDcgKzY4Nyw3IEBACiAJCXJldHVybiByZXN1bHQ7CiAKIAlpZiAocmVzdWx0ID09IDApIHsKLQkJLyogQWR2ZXJ0aXNtZW50IGhhc24ndCBjaGFuZ2VkLCBidXQgbWF5YmUgYW5lZyB3YXMgbmV2ZXIgb24gdG8KKwkJLyogQWR2ZXJ0aXNlbWVudCBoYXNuJ3QgY2hhbmdlZCwgYnV0IG1heWJlIGFuZWcgd2FzIG5ldmVyIG9uIHRvCiAJCSAqIGJlZ2luIHdpdGg/ICBPciBtYXliZSBwaHkgd2FzIGlzb2xhdGVkPyAqLwogCQlpbnQgY3RsID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCmluZGV4IDlmNmQ2NzAuLjQ2MDliYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYwpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAKIAogCQkvKgogCQkgKmNoZWNrIGlmIHdlIGFyZSBvbiB0aGUgbGFzdCBjaGFubmVsIG9yCi0JCSAqd2UgZXhjZWRlZCB0aGUgbGVuZ2h0IG9mIHRoZSBkYXRhIHRvCisJCSAqd2UgZXhjZWRlZCB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvCiAJCSAqZnJhZ21lbnQKIAkJICovCiAJCWlmICgobmZyZWUgPD0gMCkgfHwgKGZsZW4gPiBsZW4pKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcF9zeW5jdHR5LmMKaW5kZXggNGU2YjcyZi4uMjU3M2Y1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYworKysgYi9kcml2ZXJzL25ldC9wcHBfc3luY3R0eS5jCkBAIC0xNzgsNyArMTc4LDcgQEAKICAqIHdheSB0byBmaXggdGhpcyBpcyB0byB1c2UgYSByd2xvY2sgaW4gdGhlIHR0eSBzdHJ1Y3QsIGJ1dCBmb3Igbm93CiAgKiB3ZSB1c2UgYSBzaW5nbGUgZ2xvYmFsIHJ3bG9jayBmb3IgYWxsIHR0eXMgaW4gcHBwIGxpbmUgZGlzY2lwbGluZS4KICAqCi0gKiBGSVhNRTogRml4ZWQgaW4gdHR5X2lvIG5vd2RheXMuCisgKiBGSVhNRTogRml4ZWQgaW4gdHR5X2lvIG5vd2FkYXlzLgogICovCiBzdGF0aWMgREVGSU5FX1JXTE9DSyhkaXNjX2RhdGFfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcG9lLmMgYi9kcml2ZXJzL25ldC9wcHBvZS5jCmluZGV4IDc4YzBlM2MuLjcxODg3OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcG9lLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwb2UuYwpAQCAtMTE1LDcgKzExNSw3IEBACiAgKiAyKSBTZXNzaW9uIHN0YWdlIChNQUMgYW5kIFNJRCBhcmUga25vd24pCiAgKgogICogRXRoZXJuZXQgZnJhbWVzIGhhdmUgYSBzcGVjaWFsIHRhZyBmb3IgdGhpcyBidXQKLSAqIHdlIHVzZSBzaW1wbGllciBhcHByb2FjaCBiYXNlZCBvbiBzZXNzaW9uIGlkCisgKiB3ZSB1c2Ugc2ltcGxlciBhcHByb2FjaCBiYXNlZCBvbiBzZXNzaW9uIGlkCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBzdGFnZV9zZXNzaW9uKF9fYmUxNiBzaWQpCiB7CkBAIC0zMTcsNyArMzE3LDcgQEAKIAkJCWxvY2tfc29jayhzayk7CiAKIAkJCWlmIChwby0+cHBwb2VfZGV2ID09IGRldiAmJgotCQkJICAgIHNrLT5za19zdGF0ZSAmIChQUFBPWF9DT05ORUNURUQgfCBQUFBPWF9CT1VORCkpIHsKKwkJCSAgICBzay0+c2tfc3RhdGUgJiAoUFBQT1hfQ09OTkVDVEVEIHwgUFBQT1hfQk9VTkQgfCBQUFBPWF9aT01CSUUpKSB7CiAJCQkJcHBwb3hfdW5iaW5kX3NvY2soc2spOwogCQkJCXNrLT5za19zdGF0ZSA9IFBQUE9YX1pPTUJJRTsKIAkJCQlzay0+c2tfc3RhdGVfY2hhbmdlKHNrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzM19nZWxpY19uZXQuYyBiL2RyaXZlcnMvbmV0L3BzM19nZWxpY19uZXQuYwppbmRleCA1ZWNmYTRiLi5mZmRmNzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5jCkBAIC02MzIsNyArNjMyLDcgQEAKICAqIEBjYXJkOiBjYXJkIHN0cnVjdHVyZQogICoKICAqIGdlbGljX2NhcmRfZGlzYWJsZV9yeGRtYWMgdGVybWluYXRlcyBwcm9jZXNzaW5nIG9uIHRoZSBETUEgY29udHJvbGxlciBieQotICogdHVyaW5nIG9mZiBETUEgYW5kIGlzc3VlaW5nIGEgZm9yY2UgZW5kCisgKiB0dXJpbmcgb2ZmIERNQSBhbmQgaXNzdWluZyBhIGZvcmNlIGVuZAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2VsaWNfY2FyZF9kaXNhYmxlX3J4ZG1hYyhzdHJ1Y3QgZ2VsaWNfY2FyZCAqY2FyZCkKIHsKQEAgLTY1MCw3ICs2NTAsNyBAQAogICogQGNhcmQ6IGNhcmQgc3RydWN0dXJlCiAgKgogICogZ2VsaWNfY2FyZF9kaXNhYmxlX3R4ZG1hYyB0ZXJtaW5hdGVzIHByb2Nlc3Npbmcgb24gdGhlIERNQSBjb250cm9sbGVyIGJ5Ci0gKiB0dXJpbmcgb2ZmIERNQSBhbmQgaXNzdWVpbmcgYSBmb3JjZSBlbmQKKyAqIHR1cmluZyBvZmYgRE1BIGFuZCBpc3N1aW5nIGEgZm9yY2UgZW5kCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBnZWxpY19jYXJkX2Rpc2FibGVfdHhkbWFjKHN0cnVjdCBnZWxpY19jYXJkICpjYXJkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5oIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5oCmluZGV4IDMyNTIxYWUuLmZhZGFkZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BzM19nZWxpY19uZXQuaAorKysgYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmgKQEAgLTExNyw3ICsxMTcsNyBAQAogCUdFTElDX0RFU0NSX1JYREFUQUVSUgk9IDB4MDAwMjAwMDAsIC8qIElQIHBhY2tldCBmb3JtYXQgZXJyb3IgKi8KIAlHRUxJQ19ERVNDUl9SWENBTEVSUgk9IDB4MDAwMTAwMDAsIC8qIGNhcmlpZXIgZXh0ZW5zaW9uIGxlbmd0aAogCQkJCQkgICAgICAqIGVycm9yICovCi0JR0VMSUNfREVTQ1JfUlhDUkVYRVJSCT0gMHgwMDAwODAwMCwgLyogY2FycmllciBleHRlbnRpb24gZXJyb3IgKi8KKwlHRUxJQ19ERVNDUl9SWENSRVhFUlIJPSAweDAwMDA4MDAwLCAvKiBjYXJyaWVyIGV4dGVuc2lvbiBlcnJvciAqLwogCUdFTElDX0RFU0NSX1JYTUxUQ1NUCT0gMHgwMDAwNDAwMCwgLyogbXVsdGljYXN0IGFkZHJlc3MgZnJhbWUgKi8KIAkvKiBiaXQgMTMuLjAgcmVzZXJ2ZWQgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wczNfZ2VsaWNfd2lyZWxlc3MuYyBiL2RyaXZlcnMvbmV0L3BzM19nZWxpY193aXJlbGVzcy5jCmluZGV4IDRhNjI0YTIuLmI1YWUyOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BzM19nZWxpY193aXJlbGVzcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BzM19nZWxpY193aXJlbGVzcy5jCkBAIC04MTQsNyArODE0LDcgQEAKIAkJCSAqIHlvdSB3aWxsIG5vdCBkZWNpZGUgc3VpdGFibGUgY2lwaGVyIGZyb20KIAkJCSAqIGl0cyBiZWFjb24uCiAJCQkgKiBZb3Ugc2hvdWxkIGhhdmUga25vd2xlZGdlIGFib3V0IHRoZSBBUCdzCi0JCQkgKiBjaXBoZXIgaW5mb21hdGlvbiBpbiBvdGhlciBtZXRob2QgcHJpb3IgdG8KKwkJCSAqIGNpcGhlciBpbmZvcm1hdGlvbiBpbiBvdGhlciBtZXRob2QgcHJpb3IgdG8KIAkJCSAqIHRoZSBhc3NvY2lhdGlvbi4KIAkJCSAqLwogCQkJaWYgKCFwcmVjaXNlX2llKCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9weGExNjhfZXRoLmMgYi9kcml2ZXJzL25ldC9weGExNjhfZXRoLmMKaW5kZXggMWI2M2M4YS4uODlmNzU0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHhhMTY4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3B4YTE2OF9ldGguYwpAQCAtNDYyLDcgKzQ2Miw3IEBACiAgKiBwZXAgLSBFVEhFUk5FVCAuCiAgKiBtYWNfYWRkciAtIE1BQyBhZGRyZXNzLgogICogc2tpcCAtIGlmIDEsIHNraXAgdGhpcyBhZGRyZXNzLlVzZWQgaW4gY2FzZSBvZiBkZWxldGluZyBhbiBlbnRyeSB3aGljaCBpcyBhCi0gKgkgIHBhcnQgb2YgY2hhaW4gaW4gdGhlIGhhc2ggdGFibGUuV2UgY2FudCBqdXN0IGRlbGV0ZSB0aGUgZW50cnkgc2luY2UKKyAqCSAgcGFydCBvZiBjaGFpbiBpbiB0aGUgaGFzaCB0YWJsZS5XZSBjYW4ndCBqdXN0IGRlbGV0ZSB0aGUgZW50cnkgc2luY2UKICAqCSAgdGhhdCB3aWxsIGJyZWFrIHRoZSBjaGFpbi5XZSBuZWVkIHRvIGRlZnJhZ21lbnQgdGhlIHRhYmxlcyB0aW1lIHRvCiAgKgkgIHRpbWUuCiAgKiByZCAgIC0gMCBEaXNjYXJkIHBhY2tldCB1cG9uIG1hdGNoLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxhM3h4eC5oIGIvZHJpdmVycy9uZXQvcWxhM3h4eC5oCmluZGV4IDMzNjJhNjYuLjczZTIzNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsYTN4eHguaAorKysgYi9kcml2ZXJzL25ldC9xbGEzeHh4LmgKQEAgLTc3MCw3ICs3NzAsNyBAQAogCUZNOTNDNTZBX1dEUyA9IDB4MCwKIAlGTTkzQzU2QV9FUkFTRSA9IDB4MywKIAlGTTkzQzU2QV9FUkFTRV9BTEwgPSAweDAsCi0vKiBDb21tYW5kIEV4dGVudGlvbnMgKi8KKy8qIENvbW1hbmQgRXh0ZW5zaW9ucyAqLwogCUZNOTNDNTZBX1dFTl9FWFQgPSAweDMsCiAJRk05M0M1NkFfV1JJVEVfQUxMX0VYVCA9IDB4MSwKIAlGTTkzQzU2QV9XRFNfRVhUID0gMHgwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pYy5oIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pYy5oCmluZGV4IGRjNDQ1NjQuLmIwZGVhZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWMuaAorKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljLmgKQEAgLTk5LDYgKzk5LDcgQEAKICNkZWZpbmUgVFhfVURQVjZfUEtUCTB4MGMKIAogLyogVHggZGVmaW5lcyAqLworI2RlZmluZSBRTENOSUNfTUFYX0ZSQUdTX1BFUl9UWAkxNAogI2RlZmluZSBNQVhfVFNPX0hFQURFUl9ERVNDCTIKICNkZWZpbmUgTUdNVF9DTURfREVTQ19SRVNWCTQKICNkZWZpbmUgVFhfU1RPUF9USFJFU0gJCSgoTUFYX1NLQl9GUkFHUyA+PiAyKSArIE1BWF9UU09fSEVBREVSX0RFU0MgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19tYWluLmMgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX21haW4uYwppbmRleCBjZDg4YzdlLi5jYjFhMWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX21haW4uYwpAQCAtMjA5OSw2ICsyMDk5LDcgQEAKIAlzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKmh3ZGVzYywgKmZpcnN0X2Rlc2M7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJc3RydWN0IGV0aGhkciAqcGhkcjsKKwlpbnQgZGVsdGEgPSAwOwogCWludCBpLCBrOwogCiAJdTMyIHByb2R1Y2VyOwpAQCAtMjExOCw2ICsyMTE5LDE5IEBACiAJfQogCiAJZnJhZ19jb3VudCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxOworCS8qIDE0IGZyYWdzIHN1cHBvcnRlZCBmb3Igbm9ybWFsIHBhY2tldCBhbmQKKwkgKiAzMiBmcmFncyBzdXBwb3J0ZWQgZm9yIFRTTyBwYWNrZXQKKwkgKi8KKwlpZiAoIXNrYl9pc19nc28oc2tiKSAmJiBmcmFnX2NvdW50ID4gUUxDTklDX01BWF9GUkFHU19QRVJfVFgpIHsKKworCQlmb3IgKGkgPSAwOyBpIDwgKGZyYWdfY291bnQgLSBRTENOSUNfTUFYX0ZSQUdTX1BFUl9UWCk7IGkrKykKKwkJCWRlbHRhICs9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZTsKKworCQlpZiAoIV9fcHNrYl9wdWxsX3RhaWwoc2tiLCBkZWx0YSkpCisJCQlnb3RvIGRyb3BfcGFja2V0OworCisJCWZyYWdfY291bnQgPSAxICsgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwl9CiAKIAkvKiA0IGZyYWdtZW50cyBwZXIgY21kIGRlcyAqLwogCW5vX29mX2Rlc2MgPSAoZnJhZ19jb3VudCArIDMpID4+IDI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYwppbmRleCA0OWJmYTU4Li41YmIzMTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMKQEAgLTY2MCw3ICs2NjAsNyBAQAogLyogSWYgd2UncmUgcnVubmluZyB3aXRoIG11bHRpcGxlIE1TSS1YIHZlY3RvcnMgdGhlbiB3ZSBlbmFibGUgb24gdGhlIGZseS4KICAqIE90aGVyd2lzZSwgd2UgbWF5IGhhdmUgbXVsdGlwbGUgb3V0c3RhbmRpbmcgd29ya2VycyBhbmQgZG9uJ3Qgd2FudCB0bwogICogZW5hYmxlIHVudGlsIHRoZSBsYXN0IG9uZSBmaW5pc2hlcy4gSW4gdGhpcyBjYXNlLCB0aGUgaXJxX2NudCBnZXRzCi0gKiBpbmNyZW1lbnRlZCBldmVyeXRpbWUgd2UgcXVldWUgYSB3b3JrZXIgYW5kIGRlY3JlbWVudGVkIGV2ZXJ5dGltZQorICogaW5jcmVtZW50ZWQgZXZlcnkgdGltZSB3ZSBxdWV1ZSBhIHdvcmtlciBhbmQgZGVjcmVtZW50ZWQgZXZlcnkgdGltZQogICogYSB3b3JrZXIgZmluaXNoZXMuICBPbmNlIGl0IGhpdHMgemVybyB3ZSBlbmFibGUgdGhlIGludGVycnVwdC4KICAqLwogdTMyIHFsX2VuYWJsZV9jb21wbGV0aW9uX2ludGVycnVwdChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIGludHIpCkBAIC0zMjk5LDcgKzMyOTksNyBAQAogICogd2lsbCBzZXJ2aWNlIGl0LiAgQW4gZXhhbXBsZSB3b3VsZCBiZSBpZiB0aGVyZSBhcmUKICAqIDIgdmVjdG9ycyAoc28gMiBSU1MgcmluZ3MpIGFuZCA4IFRYIGNvbXBsZXRpb24gcmluZ3MuCiAgKiBUaGlzIHdvdWxkIG1lYW4gdGhhdCB2ZWN0b3IgMCB3b3VsZCBzZXJ2aWNlIFJTUyByaW5nIDAKLSAqIGFuZCBUWCBjb21wZXRpb24gcmluZ3MgMCwxLDIgYW5kIDMuICBWZWN0b3IgMSB3b3VsZAorICogYW5kIFRYIGNvbXBsZXRpb24gcmluZ3MgMCwxLDIgYW5kIDMuICBWZWN0b3IgMSB3b3VsZAogICogc2VydmljZSBSU1MgcmluZyAxIGFuZCBUWCBjb21wbGV0aW9uIHJpbmdzIDQsNSw2IGFuZCA3LgogICovCiBzdGF0aWMgdm9pZCBxbF9zZXRfdHhfdmVjdChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKQEAgLTQxNTIsNyArNDE1Miw3IEBACiAJaW50IGksIHN0YXR1czsKIAl1MzIgbGJxX2J1Zl9sZW47CiAKLQkvKiBXYWl0IGZvciBhbiBvdXN0YW5kaW5nIHJlc2V0IHRvIGNvbXBsZXRlLiAqLworCS8qIFdhaXQgZm9yIGFuIG91dHN0YW5kaW5nIHJlc2V0IHRvIGNvbXBsZXRlLiAqLwogCWlmICghdGVzdF9iaXQoUUxfQURBUFRFUl9VUCwgJnFkZXYtPmZsYWdzKSkgewogCQlpbnQgaSA9IDM7CiAJCXdoaWxlIChpLS0gJiYgIXRlc3RfYml0KFFMX0FEQVBURVJfVVAsICZxZGV2LT5mbGFncykpIHsKQEAgLTQyODEsNyArNDI4MSw3IEBACiAJCQlpZiAocWxfc2V0X3JvdXRpbmdfcmVnCiAJCQkgICAgKHFkZXYsIFJUX0lEWF9QUk9NSVNDVU9VU19TTE9ULCBSVF9JRFhfVkFMSUQsIDEpKSB7CiAJCQkJbmV0aWZfZXJyKHFkZXYsIGh3LCBxZGV2LT5uZGV2LAotCQkJCQkgICJGYWlsZWQgdG8gc2V0IHByb21pc2NvdXMgbW9kZS5cbiIpOworCQkJCQkgICJGYWlsZWQgdG8gc2V0IHByb21pc2N1b3VzIG1vZGUuXG4iKTsKIAkJCX0gZWxzZSB7CiAJCQkJc2V0X2JpdChRTF9QUk9NSVNDVU9VUywgJnFkZXYtPmZsYWdzKTsKIAkJCX0KQEAgLTQyOTEsNyArNDI5MSw3IEBACiAJCQlpZiAocWxfc2V0X3JvdXRpbmdfcmVnCiAJCQkgICAgKHFkZXYsIFJUX0lEWF9QUk9NSVNDVU9VU19TTE9ULCBSVF9JRFhfVkFMSUQsIDApKSB7CiAJCQkJbmV0aWZfZXJyKHFkZXYsIGh3LCBxZGV2LT5uZGV2LAotCQkJCQkgICJGYWlsZWQgdG8gY2xlYXIgcHJvbWlzY291cyBtb2RlLlxuIik7CisJCQkJCSAgIkZhaWxlZCB0byBjbGVhciBwcm9taXNjdW91cyBtb2RlLlxuIik7CiAJCQl9IGVsc2UgewogCQkJCWNsZWFyX2JpdChRTF9QUk9NSVNDVU9VUywgJnFkZXYtPmZsYWdzKTsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3I2MDQwLmMgYi9kcml2ZXJzL25ldC9yNjA0MC5jCmluZGV4IGUzZWJkOTAuLjIwMGEzNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3I2MDQwLmMKKysrIGIvZHJpdmVycy9uZXQvcjYwNDAuYwpAQCAtNTM1LDcgKzUzNSw3IEBACiAJCQkvKiBSWCBkcmliYmxlICovCiAJCQlpZiAoZXJyICYgRFNDX1JYX0VSUl9EUkkpCiAJCQkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKLQkJCS8qIEJ1ZmZlciBsZW5naHQgZXhjZWVkZWQgKi8KKwkJCS8qIEJ1ZmZlciBsZW5ndGggZXhjZWVkZWQgKi8KIAkJCWlmIChlcnIgJiBEU0NfUlhfRVJSX0JVRikKIAkJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJCS8qIFBhY2tldCB0b28gbG9uZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjgxNjkuYyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKaW5kZXggNDkzYjBkZS4uMzk3YzM2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjgxNjkuYworKysgYi9kcml2ZXJzL25ldC9yODE2OS5jCkBAIC0xNzAsNiArMTcwLDE2IEBACiB9OwogI3VuZGVmIF9SCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2Zpcm13YXJlX2luZm8geworCWludCBtYWNfdmVyc2lvbjsKKwljb25zdCBjaGFyICpmd19uYW1lOworfSBydGxfZmlybXdhcmVfaW5mb3NbXSA9IHsKKwl7IC5tYWNfdmVyc2lvbiA9IFJUTF9HSUdBX01BQ19WRVJfMjUsIC5md19uYW1lID0gRklSTVdBUkVfODE2OERfMSB9LAorCXsgLm1hY192ZXJzaW9uID0gUlRMX0dJR0FfTUFDX1ZFUl8yNiwgLmZ3X25hbWUgPSBGSVJNV0FSRV84MTY4RF8yIH0sCisJeyAubWFjX3ZlcnNpb24gPSBSVExfR0lHQV9NQUNfVkVSXzI5LCAuZndfbmFtZSA9IEZJUk1XQVJFXzgxMDVFXzEgfSwKKwl7IC5tYWNfdmVyc2lvbiA9IFJUTF9HSUdBX01BQ19WRVJfMzAsIC5md19uYW1lID0gRklSTVdBUkVfODEwNUVfMSB9Cit9OworCiBlbnVtIGNmZ192ZXJzaW9uIHsKIAlSVExfQ0ZHXzAgPSAweDAwLAogCVJUTF9DRkdfMSwKQEAgLTU2NSw2ICs1NzUsNyBAQAogCXUzMiBzYXZlZF93b2xvcHRzOwogCiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKyNkZWZpbmUgUlRMX0ZJUk1XQVJFX1VOS05PV04JRVJSX1BUUigtRUFHQUlOKTsKIH07CiAKIE1PRFVMRV9BVVRIT1IoIlJlYWx0ZWsgYW5kIHRoZSBMaW51eCByODE2OSBjcmV3IDxuZXRkZXZAdmdlci5rZXJuZWwub3JnPiIpOwpAQCAtMTc4OSwyNSArMTgwMCwyNiBAQAogCiBzdGF0aWMgdm9pZCBydGxfcmVsZWFzZV9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKLQlyZWxlYXNlX2Zpcm13YXJlKHRwLT5mdyk7Ci0JdHAtPmZ3ID0gTlVMTDsKKwlpZiAoIUlTX0VSUl9PUl9OVUxMKHRwLT5mdykpCisJCXJlbGVhc2VfZmlybXdhcmUodHAtPmZ3KTsKKwl0cC0+ZncgPSBSVExfRklSTVdBUkVfVU5LTk9XTjsKIH0KIAotc3RhdGljIGludCBydGxfYXBwbHlfZmlybXdhcmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGNvbnN0IGNoYXIgKmZ3X25hbWUpCitzdGF0aWMgdm9pZCBydGxfYXBwbHlfZmlybXdhcmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICoqZncgPSAmdHAtPmZ3OwotCWludCByYyA9ICEqZnc7Ci0KLQlpZiAocmMpIHsKLQkJcmMgPSByZXF1ZXN0X2Zpcm13YXJlKGZ3LCBmd19uYW1lLCAmdHAtPnBjaV9kZXYtPmRldik7Ci0JCWlmIChyYyA8IDApCi0JCQlnb3RvIG91dDsKLQl9CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IHRwLT5mdzsKIAogCS8qIFRPRE86IHJlbGVhc2UgZmlybXdhcmUgb25jZSBydGxfcGh5X3dyaXRlX2Z3IHNpZ25hbHMgZmFpbHVyZXMuICovCi0JcnRsX3BoeV93cml0ZV9mdyh0cCwgKmZ3KTsKLW91dDoKLQlyZXR1cm4gcmM7CisJaWYgKCFJU19FUlJfT1JfTlVMTChmdykpCisJCXJ0bF9waHlfd3JpdGVfZncodHAsIGZ3KTsKK30KKworc3RhdGljIHZvaWQgcnRsX2FwcGx5X2Zpcm13YXJlX2NvbmQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHU4IHJlZywgdTE2IHZhbCkKK3sKKwlpZiAocnRsX3JlYWRwaHkodHAsIHJlZykgIT0gdmFsKQorCQluZXRpZl93YXJuKHRwLCBodywgdHAtPmRldiwgImNoaXBzZXQgbm90IHJlYWR5IGZvciBmaXJtd2FyZVxuIik7CisJZWxzZQorCQlydGxfYXBwbHlfZmlybXdhcmUodHApOwogfQogCiBzdGF0aWMgdm9pZCBydGw4MTY5c19od19waHlfY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQpAQCAtMjI0NiwxMCArMjI1OCw4IEBACiAKIAlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwNSk7CiAJcnRsX3dyaXRlcGh5KHRwLCAweDA1LCAweDAwMWIpOwotCWlmICgocnRsX3JlYWRwaHkodHAsIDB4MDYpICE9IDB4YmYwMCkgfHwKLQkgICAgKHJ0bF9hcHBseV9maXJtd2FyZSh0cCwgRklSTVdBUkVfODE2OERfMSkgPCAwKSkgewotCQluZXRpZl93YXJuKHRwLCBwcm9iZSwgdHAtPmRldiwgInVuYWJsZSB0byBhcHBseSBmaXJtd2FyZSBwYXRjaFxuIik7Ci0JfQorCisJcnRsX2FwcGx5X2Zpcm13YXJlX2NvbmQodHAsIE1JSV9FWFBBTlNJT04sIDB4YmYwMCk7CiAKIAlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwMCk7CiB9CkBAIC0yMzUxLDEwICsyMzYxLDggQEAKIAogCXJ0bF93cml0ZXBoeSh0cCwgMHgxZiwgMHgwMDA1KTsKIAlydGxfd3JpdGVwaHkodHAsIDB4MDUsIDB4MDAxYik7Ci0JaWYgKChydGxfcmVhZHBoeSh0cCwgMHgwNikgIT0gMHhiMzAwKSB8fAotCSAgICAocnRsX2FwcGx5X2Zpcm13YXJlKHRwLCBGSVJNV0FSRV84MTY4RF8yKSA8IDApKSB7Ci0JCW5ldGlmX3dhcm4odHAsIHByb2JlLCB0cC0+ZGV2LCAidW5hYmxlIHRvIGFwcGx5IGZpcm13YXJlIHBhdGNoXG4iKTsKLQl9CisKKwlydGxfYXBwbHlfZmlybXdhcmVfY29uZCh0cCwgTUlJX0VYUEFOU0lPTiwgMHhiMzAwKTsKIAogCXJ0bF93cml0ZXBoeSh0cCwgMHgxZiwgMHgwMDAwKTsKIH0KQEAgLTI0NzQsOCArMjQ4Miw3IEBACiAJcnRsX3dyaXRlcGh5KHRwLCAweDE4LCAweDAzMTApOwogCW1zbGVlcCgxMDApOwogCi0JaWYgKHJ0bF9hcHBseV9maXJtd2FyZSh0cCwgRklSTVdBUkVfODEwNUVfMSkgPCAwKQotCQluZXRpZl93YXJuKHRwLCBwcm9iZSwgdHAtPmRldiwgInVuYWJsZSB0byBhcHBseSBmaXJtd2FyZSBwYXRjaFxuIik7CisJcnRsX2FwcGx5X2Zpcm13YXJlKHRwKTsKIAogCXJ0bF93cml0ZXBoeV9iYXRjaCh0cCwgcGh5X3JlZ19pbml0LCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdCkpOwogfQpAQCAtMzIzNyw2ICszMjQ0LDggQEAKIAl0cC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkZXY7CiAJdHAtPnRpbWVyLmZ1bmN0aW9uID0gcnRsODE2OV9waHlfdGltZXI7CiAKKwl0cC0+ZncgPSBSVExfRklSTVdBUkVfVU5LTk9XTjsKKwogCXJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKHJjIDwgMCkKIAkJZ290byBlcnJfb3V0X21zaV80OwpAQCAtMzI4OCwxMCArMzI5NywxMCBAQAogCiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ0cC0+dGFzayk7CiAKLQlydGxfcmVsZWFzZV9maXJtd2FyZSh0cCk7Ci0KIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCisJcnRsX3JlbGVhc2VfZmlybXdhcmUodHApOworCiAJaWYgKHBjaV9kZXZfcnVuX3dha2UocGRldikpCiAJCXBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKCZwZGV2LT5kZXYpOwogCkBAIC0zMzAzLDYgKzMzMTIsMzcgQEAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0bF9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQoreworCWludCBpOworCisJLyogUmV0dXJuIGVhcmx5IGlmIHRoZSBmaXJtd2FyZSBpcyBhbHJlYWR5IGxvYWRlZCAvIGNhY2hlZC4gKi8KKwlpZiAoIUlTX0VSUih0cC0+ZncpKQorCQlnb3RvIG91dDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJ0bF9maXJtd2FyZV9pbmZvcyk7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgcnRsX2Zpcm13YXJlX2luZm8gKmluZm8gPSBydGxfZmlybXdhcmVfaW5mb3MgKyBpOworCisJCWlmIChpbmZvLT5tYWNfdmVyc2lvbiA9PSB0cC0+bWFjX3ZlcnNpb24pIHsKKwkJCWNvbnN0IGNoYXIgKm5hbWUgPSBpbmZvLT5md19uYW1lOworCQkJaW50IHJjOworCisJCQlyYyA9IHJlcXVlc3RfZmlybXdhcmUoJnRwLT5mdywgbmFtZSwgJnRwLT5wY2lfZGV2LT5kZXYpOworCQkJaWYgKHJjIDwgMCkgeworCQkJCW5ldGlmX3dhcm4odHAsIGlmdXAsIHRwLT5kZXYsICJ1bmFibGUgdG8gbG9hZCAiCisJCQkJCSJmaXJtd2FyZSBwYXRjaCAlcyAoJWQpXG4iLCBuYW1lLCByYyk7CisJCQkJZ290byBvdXRfZGlzYWJsZV9yZXF1ZXN0X2Zpcm13YXJlOworCQkJfQorCQkJZ290byBvdXQ7CisJCX0KKwl9CisKK291dF9kaXNhYmxlX3JlcXVlc3RfZmlybXdhcmU6CisJdHAtPmZ3ID0gTlVMTDsKK291dDoKKwlyZXR1cm47Cit9CisKIHN0YXRpYyBpbnQgcnRsODE2OV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMzMzNCwxMSArMzM3NCwxMyBAQAogCiAJc21wX21iKCk7CiAKKwlydGxfcmVxdWVzdF9maXJtd2FyZSh0cCk7CisKIAlyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgcnRsODE2OV9pbnRlcnJ1cHQsCiAJCQkgICAgICh0cC0+ZmVhdHVyZXMgJiBSVExfRkVBVFVSRV9NU0kpID8gMCA6IElSUUZfU0hBUkVELAogCQkJICAgICBkZXYtPm5hbWUsIGRldik7CiAJaWYgKHJldHZhbCA8IDApCi0JCWdvdG8gZXJyX3JlbGVhc2VfcmluZ18yOworCQlnb3RvIGVycl9yZWxlYXNlX2Z3XzI7CiAKIAluYXBpX2VuYWJsZSgmdHAtPm5hcGkpOwogCkBAIC0zMzU5LDcgKzM0MDEsOCBAQAogb3V0OgogCXJldHVybiByZXR2YWw7CiAKLWVycl9yZWxlYXNlX3JpbmdfMjoKK2Vycl9yZWxlYXNlX2Z3XzI6CisJcnRsX3JlbGVhc2VfZmlybXdhcmUodHApOwogCXJ0bDgxNjlfcnhfY2xlYXIodHApOwogZXJyX2ZyZWVfcnhfMToKIAlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLCB0cC0+UnhEZXNjQXJyYXksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zMmlvLmMgYi9kcml2ZXJzL25ldC9zMmlvLmMKaW5kZXggMzU2ZTc0ZC4uMzM3YmRjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvczJpby5jCisrKyBiL2RyaXZlcnMvbmV0L3MyaW8uYwpAQCAtMjM1Myw3ICsyMzUzLDcgQEAKIAogCWlmIChzMmlvX2xpbmtfZmF1bHRfaW5kaWNhdGlvbihuaWMpID09IE1BQ19STUFDX0VSUl9USU1FUikgewogCQkvKgotCQkgKiBEb250IHNlZSBsaW5rIHN0YXRlIGludGVycnVwdHMgaW5pdGFsbHkgb24gc29tZSBzd2l0Y2hlcywKKwkJICogRG9udCBzZWUgbGluayBzdGF0ZSBpbnRlcnJ1cHRzIGluaXRpYWxseSBvbiBzb21lIHN3aXRjaGVzLAogCQkgKiBzbyBkaXJlY3RseSBzY2hlZHVsaW5nIHRoZSBsaW5rIHN0YXRlIHRhc2sgaGVyZS4KIAkJICovCiAJCXNjaGVkdWxlX3dvcmsoJm5pYy0+c2V0X2xpbmtfdGFzayk7CkBAIC0zNTYzLDcgKzM1NjMsNyBAQAogCX0KIAogCS8qCi0JICogQ2xlYXIgc3B1cmlvdXMgRUNDIGludGVycnVwdHMgdGhhdCB3b3VsZCBoYXZlIG9jY3VyZWQgb24KKwkgKiBDbGVhciBzcHVyaW91cyBFQ0MgaW50ZXJydXB0cyB0aGF0IHdvdWxkIGhhdmUgb2NjdXJyZWQgb24KIAkgKiBYRlJBTUUgSUkgY2FyZHMgYWZ0ZXIgcmVzZXQuCiAJICovCiAJaWYgKHNwLT5kZXZpY2VfdHlwZSA9PSBYRlJBTUVfSUlfREVWSUNFKSB7CkBAIC00MDY1LDcgKzQwNjUsNyBAQAogICogIERlc2NyaXB0aW9uIDoKICAqICBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBUeCBlbnRyeSBwb2ludCBvZiB0aGUgZHJpdmVyLiBTMklPIE5JQyBzdXBwb3J0cwogICogIGNlcnRhaW4gcHJvdG9jb2wgYXNzaXN0IGZlYXR1cmVzIG9uIFR4IHNpZGUsIG5hbWVseSAgQ1NPLCBTL0csIExTTy4KLSAqICBOT1RFOiB3aGVuIGRldmljZSBjYW50IHF1ZXVlIHRoZSBwa3QsanVzdCB0aGUgdHJhbnNfc3RhcnQgdmFyaWFibGUgd2lsbAorICogIE5PVEU6IHdoZW4gZGV2aWNlIGNhbid0IHF1ZXVlIHRoZSBwa3QsanVzdCB0aGUgdHJhbnNfc3RhcnQgdmFyaWFibGUgd2lsbAogICogIG5vdCBiZSB1cGFkdGVkLgogICogIFJldHVybiB2YWx1ZToKICAqICAwIG9uIHN1Y2Nlc3MgJiAxIG9uIGZhaWx1cmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zMmlvLmggYi9kcml2ZXJzL25ldC9zMmlvLmgKaW5kZXggN2QxNjAzMC4uMmQxNDQ5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvczJpby5oCisrKyBiL2RyaXZlcnMvbmV0L3MyaW8uaApAQCAtMzc2LDcgKzM3Niw3IEBACiAvKiBNYWludGFpbnMgUGVyIEZJRk8gcmVsYXRlZCBpbmZvcm1hdGlvbi4gKi8KIHN0cnVjdCB0eF9maWZvX2NvbmZpZyB7CiAjZGVmaW5lCU1BWF9BVkFJTEFCTEVfVFhEUwk4MTkyCi0JdTMyIGZpZm9fbGVuOwkJLyogc3BlY2lmaWVzIGxlbiBvZiBGSUZPIHVwdG8gODE5MiwgaWUgbm8gb2YgVHhETHMgKi8KKwl1MzIgZmlmb19sZW47CQkvKiBzcGVjaWZpZXMgbGVuIG9mIEZJRk8gdXAgdG8gODE5MiwgaWUgbm8gb2YgVHhETHMgKi8KIC8qIFByaW9yaXR5IGRlZmluaXRpb24gKi8KICNkZWZpbmUgVFhfRklGT19QUklfMCAgICAgICAgICAgICAgIDAJLypIaWdoZXN0ICovCiAjZGVmaW5lIFRYX0ZJRk9fUFJJXzEgICAgICAgICAgICAgICAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZWZ4LmMgYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKaW5kZXggZDg5MDY3OS4uYTNjMmFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9lZnguYwpAQCAtMzI4LDcgKzMyOCw4IEBACiAgKiBwcm9jZXNzaW5nIHRvIGZpbmlzaCwgdGhlbiBkaXJlY3RseSBwb2xsIChhbmQgYWNrICkgdGhlIGV2ZW50cS4KICAqIEZpbmFsbHkgcmVlbmFibGUgTkFQSSBhbmQgaW50ZXJydXB0cy4KICAqCi0gKiBTaW5jZSB3ZSBhcmUgdG91Y2hpbmcgaW50ZXJydXB0cyB0aGUgY2FsbGVyIHNob3VsZCBob2xkIHRoZSBzdXNwZW5kIGxvY2sKKyAqIFRoaXMgaXMgZm9yIHVzZSBvbmx5IGR1cmluZyBhIGxvb3BiYWNrIHNlbGYtdGVzdC4gIEl0IG11c3Qgbm90CisgKiBkZWxpdmVyIGFueSBwYWNrZXRzIHVwIHRoZSBzdGFjayBhcyB0aGlzIGNhbiByZXN1bHQgaW4gZGVhZGxvY2suCiAgKi8KIHZvaWQgZWZ4X3Byb2Nlc3NfY2hhbm5lbF9ub3coc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsKQogewpAQCAtMzM2LDYgKzMzNyw3IEBACiAKIAlCVUdfT04oY2hhbm5lbC0+Y2hhbm5lbCA+PSBlZngtPm5fY2hhbm5lbHMpOwogCUJVR19PTighY2hhbm5lbC0+ZW5hYmxlZCk7CisJQlVHX09OKCFlZngtPmxvb3BiYWNrX3NlbGZ0ZXN0KTsKIAogCS8qIERpc2FibGUgaW50ZXJydXB0cyBhbmQgd2FpdCBmb3IgSVNScyB0byBjb21wbGV0ZSAqLwogCWVmeF9uaWNfZGlzYWJsZV9pbnRlcnJ1cHRzKGVmeCk7CkBAIC0xNDM2LDcgKzE0MzgsNyBAQAogCSAqIHJlc3RhcnQgdGhlIHRyYW5zbWl0IGludGVyZmFjZSBlYXJseSBzbyB0aGUgd2F0Y2hkb2cgdGltZXIgc3RvcHMgKi8KIAllZnhfc3RhcnRfcG9ydChlZngpOwogCi0JaWYgKGVmeF9kZXZfcmVnaXN0ZXJlZChlZngpKQorCWlmIChlZnhfZGV2X3JlZ2lzdGVyZWQoZWZ4KSAmJiAhZWZ4LT5wb3J0X2luaGliaXRlZCkKIAkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKGVmeC0+bmV0X2Rldik7CiAKIAllZnhfZm9yX2VhY2hfY2hhbm5lbChjaGFubmVsLCBlZngpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmMgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmMKaW5kZXggNzM0ZmNmYi4uZDk2YjIzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uYwpAQCAtNjkyLDcgKzY5Miw3IEBACiAJZWZ4X293b3JkX3QgbWRfc3RhdDsKIAlpbnQgY291bnQ7CiAKLQkvKiB3YWl0IHVwdG8gNTBtcyAtIHRha2VuIG1heCBmcm9tIGRhdGFzaGVldCAqLworCS8qIHdhaXQgdXAgdG8gNTBtcyAtIHRha2VuIG1heCBmcm9tIGRhdGFzaGVldCAqLwogCWZvciAoY291bnQgPSAwOyBjb3VudCA8IDUwMDA7IGNvdW50KyspIHsKIAkJZWZ4X3JlYWRvKGVmeCwgJm1kX3N0YXQsIEZSX0FCX01EX1NUQVQpOwogCQlpZiAoRUZYX09XT1JEX0ZJRUxEKG1kX3N0YXQsIEZSRl9BQl9NRF9CU1kpID09IDApIHsKQEAgLTEyMjEsNyArMTIyMSw3IEBACiAKIAkJCXJldHVybiAwOwogCQl9Ci0JfSB3aGlsZSAoKytjb3VudCA8IDIwKTsJLyogd2FpdCB1cHRvIDAuNCBzZWMgKi8KKwl9IHdoaWxlICgrK2NvdW50IDwgMjApOwkvKiB3YWl0IHVwIHRvIDAuNCBzZWMgKi8KIAogCW5ldGlmX2VycihlZngsIGh3LCBlZngtPm5ldF9kZXYsICJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgU1JBTSByZXNldFxuIik7CiAJcmV0dXJuIC1FVElNRURPVVQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvaW8uaCBiL2RyaXZlcnMvbmV0L3NmYy9pby5oCmluZGV4IGQ5ZDhjMmUuLmNjOTc4ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9pby5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9pby5oCkBAIC0xNTIsNiArMTUyLDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZlZngtPmJpdV9sb2NrLCBmbGFncyk7CiAJdmFsdWUtPnUzMlswXSA9IF9lZnhfcmVhZGQoZWZ4LCByZWcgKyAwKTsKKwlybWIoKTsKIAl2YWx1ZS0+dTMyWzFdID0gX2VmeF9yZWFkZChlZngsIHJlZyArIDQpOwogCXZhbHVlLT51MzJbMl0gPSBfZWZ4X3JlYWRkKGVmeCwgcmVnICsgOCk7CiAJdmFsdWUtPnUzMlszXSA9IF9lZnhfcmVhZGQoZWZ4LCByZWcgKyAxMik7CkBAIC0xNzQsNiArMTc1LDcgQEAKIAl2YWx1ZS0+dTY0WzBdID0gKF9fZm9yY2UgX19sZTY0KV9fcmF3X3JlYWRxKG1lbWJhc2UgKyBhZGRyKTsKICNlbHNlCiAJdmFsdWUtPnUzMlswXSA9IChfX2ZvcmNlIF9fbGUzMilfX3Jhd19yZWFkbChtZW1iYXNlICsgYWRkcik7CisJcm1iKCk7CiAJdmFsdWUtPnUzMlsxXSA9IChfX2ZvcmNlIF9fbGUzMilfX3Jhd19yZWFkbChtZW1iYXNlICsgYWRkciArIDQpOwogI2VuZGlmCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWZ4LT5iaXVfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL21jZGkuYyBiL2RyaXZlcnMvbmV0L3NmYy9tY2RpLmMKaW5kZXggNWUxMThmMC4uM2RkNDVlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL21jZGkuYworKysgYi9kcml2ZXJzL25ldC9zZmMvbWNkaS5jCkBAIC01MCw2ICs1MCwyMCBAQAogCXJldHVybiAmbmljX2RhdGEtPm1jZGk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZAorZWZ4X21jZGlfcmVhZGQoc3RydWN0IGVmeF9uaWMgKmVmeCwgZWZ4X2R3b3JkX3QgKnZhbHVlLCB1bnNpZ25lZCByZWcpCit7CisJc3RydWN0IHNpZW5hX25pY19kYXRhICpuaWNfZGF0YSA9IGVmeC0+bmljX2RhdGE7CisJdmFsdWUtPnUzMlswXSA9IChfX2ZvcmNlIF9fbGUzMilfX3Jhd19yZWFkbChuaWNfZGF0YS0+bWNkaV9zbWVtICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitlZnhfbWNkaV93cml0ZWQoc3RydWN0IGVmeF9uaWMgKmVmeCwgY29uc3QgZWZ4X2R3b3JkX3QgKnZhbHVlLCB1bnNpZ25lZCByZWcpCit7CisJc3RydWN0IHNpZW5hX25pY19kYXRhICpuaWNfZGF0YSA9IGVmeC0+bmljX2RhdGE7CisJX19yYXdfd3JpdGVsKChfX2ZvcmNlIHUzMil2YWx1ZS0+dTMyWzBdLCBuaWNfZGF0YS0+bWNkaV9zbWVtICsgcmVnKTsKK30KKwogdm9pZCBlZnhfbWNkaV9pbml0KHN0cnVjdCBlZnhfbmljICplZngpCiB7CiAJc3RydWN0IGVmeF9tY2RpX2lmYWNlICptY2RpOwpAQCAtNzAsOCArODQsOCBAQAogCQkJICAgIGNvbnN0IHU4ICppbmJ1Ziwgc2l6ZV90IGlubGVuKQogewogCXN0cnVjdCBlZnhfbWNkaV9pZmFjZSAqbWNkaSA9IGVmeF9tY2RpKGVmeCk7Ci0JdW5zaWduZWQgcGR1ID0gRlJfQ1pfTUNfVFJFR19TTUVNICsgTUNESV9QRFUoZWZ4KTsKLQl1bnNpZ25lZCBkb29yYmVsbCA9IEZSX0NaX01DX1RSRUdfU01FTSArIE1DRElfRE9PUkJFTEwoZWZ4KTsKKwl1bnNpZ25lZCBwZHUgPSBNQ0RJX1BEVShlZngpOworCXVuc2lnbmVkIGRvb3JiZWxsID0gTUNESV9ET09SQkVMTChlZngpOwogCXVuc2lnbmVkIGludCBpOwogCWVmeF9kd29yZF90IGhkcjsKIAl1MzIgeGZsYWdzLCBzZXFubzsKQEAgLTkyLDMwICsxMDYsMjggQEAKIAkJCSAgICAgTUNESV9IRUFERVJfU0VRLCBzZXFubywKIAkJCSAgICAgTUNESV9IRUFERVJfWEZMQUdTLCB4ZmxhZ3MpOwogCi0JZWZ4X3dyaXRlZChlZngsICZoZHIsIHBkdSk7CisJZWZ4X21jZGlfd3JpdGVkKGVmeCwgJmhkciwgcGR1KTsKIAotCWZvciAoaSA9IDA7IGkgPCBpbmxlbjsgaSArPSA0KSB7Ci0JCV9lZnhfd3JpdGVkKGVmeCwgKigoX19sZTMyICopKGluYnVmICsgaSkpLCBwZHUgKyA0ICsgaSk7Ci0JCS8qIHVzZSB3bWIoKSB3aXRoaW4gbG9vcCB0byBpbmhpYml0IHdyaXRlIGNvbWJpbmluZyAqLwotCQl3bWIoKTsKLQl9CisJZm9yIChpID0gMDsgaSA8IGlubGVuOyBpICs9IDQpCisJCWVmeF9tY2RpX3dyaXRlZChlZngsIChjb25zdCBlZnhfZHdvcmRfdCAqKShpbmJ1ZiArIGkpLAorCQkJCXBkdSArIDQgKyBpKTsKIAogCS8qIHJpbmcgdGhlIGRvb3JiZWxsIHdpdGggYSBkaXN0aW5jdGl2ZSB2YWx1ZSAqLwotCV9lZnhfd3JpdGVkKGVmeCwgKF9fZm9yY2UgX19sZTMyKSAweDQ1Nzg5YWJjLCBkb29yYmVsbCk7Ci0Jd21iKCk7CisJRUZYX1BPUFVMQVRFX0RXT1JEXzEoaGRyLCBFRlhfRFdPUkRfMCwgMHg0NTc4OWFiYyk7CisJZWZ4X21jZGlfd3JpdGVkKGVmeCwgJmhkciwgZG9vcmJlbGwpOwogfQogCiBzdGF0aWMgdm9pZCBlZnhfbWNkaV9jb3B5b3V0KHN0cnVjdCBlZnhfbmljICplZngsIHU4ICpvdXRidWYsIHNpemVfdCBvdXRsZW4pCiB7CiAJc3RydWN0IGVmeF9tY2RpX2lmYWNlICptY2RpID0gZWZ4X21jZGkoZWZ4KTsKLQl1bnNpZ25lZCBpbnQgcGR1ID0gRlJfQ1pfTUNfVFJFR19TTUVNICsgTUNESV9QRFUoZWZ4KTsKKwl1bnNpZ25lZCBpbnQgcGR1ID0gTUNESV9QRFUoZWZ4KTsKIAlpbnQgaTsKIAogCUJVR19PTihhdG9taWNfcmVhZCgmbWNkaS0+c3RhdGUpID09IE1DRElfU1RBVEVfUVVJRVNDRU5UKTsKIAlCVUdfT04ob3V0bGVuICYgMyB8fCBvdXRsZW4gPj0gMHgxMDApOwogCiAJZm9yIChpID0gMDsgaSA8IG91dGxlbjsgaSArPSA0KQotCQkqKChfX2xlMzIgKikob3V0YnVmICsgaSkpID0gX2VmeF9yZWFkZChlZngsIHBkdSArIDQgKyBpKTsKKwkJZWZ4X21jZGlfcmVhZGQoZWZ4LCAoZWZ4X2R3b3JkX3QgKikob3V0YnVmICsgaSksIHBkdSArIDQgKyBpKTsKIH0KIAogc3RhdGljIGludCBlZnhfbWNkaV9wb2xsKHN0cnVjdCBlZnhfbmljICplZngpCkBAIC0xMjMsNyArMTM1LDcgQEAKIAlzdHJ1Y3QgZWZ4X21jZGlfaWZhY2UgKm1jZGkgPSBlZnhfbWNkaShlZngpOwogCXVuc2lnbmVkIGludCB0aW1lLCBmaW5pc2g7CiAJdW5zaWduZWQgaW50IHJlc3BzZXEsIHJlc3BjbWQsIGVycm9yOwotCXVuc2lnbmVkIGludCBwZHUgPSBGUl9DWl9NQ19UUkVHX1NNRU0gKyBNQ0RJX1BEVShlZngpOworCXVuc2lnbmVkIGludCBwZHUgPSBNQ0RJX1BEVShlZngpOwogCXVuc2lnbmVkIGludCByYywgc3BpbnM7CiAJZWZ4X2R3b3JkX3QgcmVnOwogCkBAIC0xNDksOCArMTYxLDcgQEAKIAogCQl0aW1lID0gZ2V0X3NlY29uZHMoKTsKIAotCQlybWIoKTsKLQkJZWZ4X3JlYWRkKGVmeCwgJnJlZywgcGR1KTsKKwkJZWZ4X21jZGlfcmVhZGQoZWZ4LCAmcmVnLCBwZHUpOwogCiAJCS8qIEFsbCAxJ3MgaW5kaWNhdGVzIHRoYXQgc2hhcmVkIG1lbW9yeSBpcyBpbiByZXNldCAoYW5kIGlzCiAJCSAqIG5vdCBhIHZhbGlkIGhlYWRlcikuIFdhaXQgZm9yIGl0IHRvIGNvbWUgb3V0IHJlc2V0IGJlZm9yZQpAQCAtMTc3LDcgKzE4OCw3IEBACiAJCQkgIHJlc3BzZXEsIG1jZGktPnNlcW5vKTsKIAkJcmMgPSBFSU87CiAJfSBlbHNlIGlmIChlcnJvcikgewotCQllZnhfcmVhZGQoZWZ4LCAmcmVnLCBwZHUgKyA0KTsKKwkJZWZ4X21jZGlfcmVhZGQoZWZ4LCAmcmVnLCBwZHUgKyA0KTsKIAkJc3dpdGNoIChFRlhfRFdPUkRfRklFTEQocmVnLCBFRlhfRFdPUkRfMCkpIHsKICNkZWZpbmUgVFJBTlNMQVRFX0VSUk9SKG5hbWUpCQkJCQlcCiAJCWNhc2UgTUNfQ01EX0VSUl8gIyMgbmFtZToJCQlcCkBAIC0yMTEsMjEgKzIyMiwyMSBAQAogLyogVGVzdCBhbmQgY2xlYXIgTUMtcmVib290ZWQgZmxhZyBmb3IgdGhpcyBwb3J0L2Z1bmN0aW9uICovCiBpbnQgZWZ4X21jZGlfcG9sbF9yZWJvb3Qoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKLQl1bnNpZ25lZCBpbnQgYWRkciA9IEZSX0NaX01DX1RSRUdfU01FTSArIE1DRElfUkVCT09UX0ZMQUcoZWZ4KTsKKwl1bnNpZ25lZCBpbnQgYWRkciA9IE1DRElfUkVCT09UX0ZMQUcoZWZ4KTsKIAllZnhfZHdvcmRfdCByZWc7CiAJdWludDMyX3QgdmFsdWU7CiAKIAlpZiAoZWZ4X25pY19yZXYoZWZ4KSA8IEVGWF9SRVZfU0lFTkFfQTApCiAJCXJldHVybiBmYWxzZTsKIAotCWVmeF9yZWFkZChlZngsICZyZWcsIGFkZHIpOworCWVmeF9tY2RpX3JlYWRkKGVmeCwgJnJlZywgYWRkcik7CiAJdmFsdWUgPSBFRlhfRFdPUkRfRklFTEQocmVnLCBFRlhfRFdPUkRfMCk7CiAKIAlpZiAodmFsdWUgPT0gMCkKIAkJcmV0dXJuIDA7CiAKIAlFRlhfWkVST19EV09SRChyZWcpOwotCWVmeF93cml0ZWQoZWZ4LCAmcmVnLCBhZGRyKTsKKwllZnhfbWNkaV93cml0ZWQoZWZ4LCAmcmVnLCBhZGRyKTsKIAogCWlmICh2YWx1ZSA9PSBNQ19TVEFUVVNfRFdPUkRfQVNTRVJUKQogCQlyZXR1cm4gLUVJTlRSOwpAQCAtNDUzLDcgKzQ2NCw3IEBACiAJICoKIAkgKiBUaGVyZSdzIGEgcmFjZSBoZXJlIHdpdGggZWZ4X21jZGlfcnBjKCksIGJlY2F1c2Ugd2UgbWlnaHQgcmVjZWl2ZQogCSAqIGEgUkVCT09UIGV2ZW50ICpiZWZvcmUqIHRoZSByZXF1ZXN0IGhhcyBiZWVuIGNvcGllZCBvdXQuIEluIHBvbGxlZAotCSAqIG1vZGUgKGR1cmluZyBzdGFydHVwKSB0aGlzIGlzIGlycmVsZXZlbnQsIGJlY2F1c2UgZWZ4X21jZGlfY29tcGxldGUoKQorCSAqIG1vZGUgKGR1cmluZyBzdGFydHVwKSB0aGlzIGlzIGlycmVsZXZhbnQsIGJlY2F1c2UgZWZ4X21jZGlfY29tcGxldGUoKQogCSAqIGlzIGlnbm9yZWQuIEluIGV2ZW50IG1vZGUsIHRoaXMgY29uZGl0aW9uIGlzIGp1c3QgYW4gZWRnZS1jYXNlIG9mCiAJICogcmVjZWl2aW5nIGEgUkVCT09UIGV2ZW50IGFmdGVyIHBvc3RpbmcgdGhlIE1DREkgcmVxdWVzdC4gRGlkIHRoZSBtYwogCSAqIHJlYm9vdCBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGNvcHlvdXQ/IFRoZSBiZXN0IHdlIGNhbiBkbyBhbHdheXMgaXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tY2RpX3Bjb2wuaCBiL2RyaXZlcnMvbmV0L3NmYy9tY2RpX3Bjb2wuaAppbmRleCBiODZhMTVmLi40MWZlMDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbWNkaV9wY29sLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL21jZGlfcGNvbC5oCkBAIC0xMDMsNyArMTAzLDcgQEAKICAqCiAgKiBJZiBDb2RlPT1DTURET05FLCB0aGVuIHRoZSBmaWVsZHMgYXJlIGZ1cnRoZXIgaW50ZXJwcmV0ZWQgYXM6CiAgKgotICogICAtIExFVkVMPT1JTkZPICAgIENvbW1hbmQgc3VjY2VkZWQKKyAqICAgLSBMRVZFTD09SU5GTyAgICBDb21tYW5kIHN1Y2NlZWRlZAogICogICAtIExFVkVMPT1FUlIgICAgIENvbW1hbmQgZmFpbGVkCiAgKgogICogICAgMCAgICAgOCAgICAgICAgIDE2ICAgICAgMjQgICAgIDMyCkBAIC01NzIsNyArNTcyLDcgQEAKICAgKDQqKF9udW13b3JkcykpCiAKIC8qIE1DX0NNRF9TRVRfUkFORF9TRUVEOgotICogU2V0IHRoZSAxNmJ5dGUgc2VlZCBmb3IgdGhlIE1DIHBzdWVkby1yYW5kb20gZ2VuZXJhdG9yCisgKiBTZXQgdGhlIDE2Ynl0ZSBzZWVkIGZvciB0aGUgTUMgcHNldWRvLXJhbmRvbSBnZW5lcmF0b3IKICAqLwogI2RlZmluZSBNQ19DTURfU0VUX1JBTkRfU0VFRCAweDFhCiAjZGVmaW5lIE1DX0NNRF9TRVRfUkFORF9TRUVEX0lOX0xFTiAxNgpAQCAtMTE2Miw3ICsxMTYyLDcgQEAKICNkZWZpbmUgTUNfQ01EX01BQ19TVEFUU19DTURfQ0xFQVJfV0lEVEggMQogI2RlZmluZSBNQ19DTURfTUFDX1NUQVRTX0NNRF9QRVJJT0RJQ19DSEFOR0VfTEJOIDIKICNkZWZpbmUgTUNfQ01EX01BQ19TVEFUU19DTURfUEVSSU9ESUNfQ0hBTkdFX1dJRFRIIDEKLS8qIFJlbWFpbmluZyBQRVJJT0QqIGZpZWxkcyBvbmx5IHJlbGV2ZW50IHdoZW4gUEVSSU9ESUNfQ0hBTkdFIGlzIHNldCAqLworLyogUmVtYWluaW5nIFBFUklPRCogZmllbGRzIG9ubHkgcmVsZXZhbnQgd2hlbiBQRVJJT0RJQ19DSEFOR0UgaXMgc2V0ICovCiAjZGVmaW5lIE1DX0NNRF9NQUNfU1RBVFNfQ01EX1BFUklPRElDX0VOQUJMRV9MQk4gMwogI2RlZmluZSBNQ19DTURfTUFDX1NUQVRTX0NNRF9QRVJJT0RJQ19FTkFCTEVfV0lEVEggMQogI2RlZmluZSBNQ19DTURfTUFDX1NUQVRTX0NNRF9QRVJJT0RJQ19DTEVBUl9MQk4gNApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL21jZGlfcGh5LmMgYi9kcml2ZXJzL25ldC9zZmMvbWNkaV9waHkuYwppbmRleCBlYzNmNzQwLi43ZTNjNjViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbWNkaV9waHkuYworKysgYi9kcml2ZXJzL25ldC9zZmMvbWNkaV9waHkuYwpAQCAtNDQ5LDcgKzQ0OSw3IEBACiAJc3RydWN0IGVmeF9tY2RpX3BoeV9kYXRhICpwaHlfY2ZnID0gZWZ4LT5waHlfZGF0YTsKIAl1MzIgcm10YWR2OwogCi0JLyogVGhlIGxpbmsgcGFydG5lciBjYXBhYmlsaXRpZXMgYXJlIG9ubHkgcmVsZXZlbnQgaWYgdGhlCisJLyogVGhlIGxpbmsgcGFydG5lciBjYXBhYmlsaXRpZXMgYXJlIG9ubHkgcmVsZXZhbnQgaWYgdGhlCiAJICogbGluayBzdXBwb3J0cyBmbG93IGNvbnRyb2wgYXV0b25lZ290aWF0aW9uICovCiAJaWYgKH5waHlfY2ZnLT5zdXBwb3J0ZWRfY2FwICYgKDEgPDwgTUNfQ01EX1BIWV9DQVBfQU5fTEJOKSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaCBiL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmgKaW5kZXggMjE1ZDVjNS4uMTkxYTMxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaAorKysgYi9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oCkBAIC0zMzAsNyArMzMwLDYgQEAKICAqIEBldmVudHFfbWFzazogRXZlbnQgcXVldWUgcG9pbnRlciBtYXNrCiAgKiBAZXZlbnRxX3JlYWRfcHRyOiBFdmVudCBxdWV1ZSByZWFkIHBvaW50ZXIKICAqIEBsYXN0X2V2ZW50cV9yZWFkX3B0cjogTGFzdCBldmVudCBxdWV1ZSByZWFkIHBvaW50ZXIgdmFsdWUuCi0gKiBAbWFnaWNfY291bnQ6IEV2ZW50IHF1ZXVlIHRlc3QgZXZlbnQgY291bnQKICAqIEBpcnFfY291bnQ6IE51bWJlciBvZiBJUlFzIHNpbmNlIGxhc3QgYWRhcHRpdmUgbW9kZXJhdGlvbiBkZWNpc2lvbgogICogQGlycV9tb2Rfc2NvcmU6IElSUSBtb2RlcmF0aW9uIHNjb3JlCiAgKiBAcnhfYWxsb2NfbGV2ZWw6IFdhdGVybWFyayBiYXNlZCBoZXVyaXN0aWMgY291bnRlciBmb3IgcHVzaGluZyBkZXNjcmlwdG9ycwpAQCAtMzYwLDcgKzM1OSw2IEBACiAJdW5zaWduZWQgaW50IGV2ZW50cV9tYXNrOwogCXVuc2lnbmVkIGludCBldmVudHFfcmVhZF9wdHI7CiAJdW5zaWduZWQgaW50IGxhc3RfZXZlbnRxX3JlYWRfcHRyOwotCXVuc2lnbmVkIGludCBtYWdpY19jb3VudDsKIAogCXVuc2lnbmVkIGludCBpcnFfY291bnQ7CiAJdW5zaWduZWQgaW50IGlycV9tb2Rfc2NvcmU7CkBAIC02NzAsNyArNjY4LDcgQEAKICAqIEBpcnFfemVyb19jb3VudDogTnVtYmVyIG9mIGxlZ2FjeSBJUlFzIHNlZW4gd2l0aCBxdWV1ZSBmbGFncyA9PSAwCiAgKiBAZmF0YWxfaXJxX2xldmVsOiBJUlEgbGV2ZWwgKGJpdCBudW1iZXIpIHVzZWQgZm9yIHNlcmlvdXMgZXJyb3JzCiAgKiBAbXRkX2xpc3Q6IExpc3Qgb2YgTVREcyBhdHRhY2hlZCB0byB0aGUgTklDCi0gKiBAbmljX2RhdGE6IEhhcmR3YXJlIGRlcGVuZGFudCBzdGF0ZQorICogQG5pY19kYXRhOiBIYXJkd2FyZSBkZXBlbmRlbnQgc3RhdGUKICAqIEBtYWNfbG9jazogTUFDIGFjY2VzcyBsb2NrLiBQcm90ZWN0cyBAcG9ydF9lbmFibGVkLCBAcGh5X21vZGUsCiAgKglAcG9ydF9pbmhpYml0ZWQsIGVmeF9tb25pdG9yKCkgYW5kIGVmeF9yZWNvbmZpZ3VyZV9wb3J0KCkKICAqIEBwb3J0X2VuYWJsZWQ6IFBvcnQgZW5hYmxlZCBpbmRpY2F0b3IuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbmljLmMgYi9kcml2ZXJzL25ldC9zZmMvbmljLmMKaW5kZXggZTgzOTY2MS4uOWIyOWE4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9uaWMuYwpAQCAtODQsNyArODQsOCBAQAogc3RhdGljIGlubGluZSBlZnhfcXdvcmRfdCAqZWZ4X2V2ZW50KHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCwKIAkJCQkgICAgIHVuc2lnbmVkIGludCBpbmRleCkKIHsKLQlyZXR1cm4gKChlZnhfcXdvcmRfdCAqKSAoY2hhbm5lbC0+ZXZlbnRxLmFkZHIpKSArIGluZGV4OworCXJldHVybiAoKGVmeF9xd29yZF90ICopIChjaGFubmVsLT5ldmVudHEuYWRkcikpICsKKwkJKGluZGV4ICYgY2hhbm5lbC0+ZXZlbnRxX21hc2spOwogfQogCiAvKiBTZWUgaWYgYW4gZXZlbnQgaXMgcHJlc2VudApAQCAtNjczLDcgKzY3NCw4IEBACiAJZWZ4X2R3b3JkX3QgcmVnOwogCXN0cnVjdCBlZnhfbmljICplZnggPSBjaGFubmVsLT5lZng7CiAKLQlFRlhfUE9QVUxBVEVfRFdPUkRfMShyZWcsIEZSRl9BWl9FVlFfUlBUUiwgY2hhbm5lbC0+ZXZlbnRxX3JlYWRfcHRyKTsKKwlFRlhfUE9QVUxBVEVfRFdPUkRfMShyZWcsIEZSRl9BWl9FVlFfUlBUUiwKKwkJCSAgICAgY2hhbm5lbC0+ZXZlbnRxX3JlYWRfcHRyICYgY2hhbm5lbC0+ZXZlbnRxX21hc2spOwogCWVmeF93cml0ZWRfdGFibGUoZWZ4LCAmcmVnLCBlZngtPnR5cGUtPmV2cV9ycHRyX3RibF9iYXNlLAogCQkJIGNoYW5uZWwtPmNoYW5uZWwpOwogfQpAQCAtOTA4LDcgKzkxMCw3IEBACiAKIAljb2RlID0gRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwgRlNGX0FaX0RSVl9HRU5fRVZfTUFHSUMpOwogCWlmIChjb2RlID09IEVGWF9DSEFOTkVMX01BR0lDX1RFU1QoY2hhbm5lbCkpCi0JCSsrY2hhbm5lbC0+bWFnaWNfY291bnQ7CisJCTsgLyogaWdub3JlICovCiAJZWxzZSBpZiAoY29kZSA9PSBFRlhfQ0hBTk5FTF9NQUdJQ19GSUxMKGNoYW5uZWwpKQogCQkvKiBUaGUgcXVldWUgbXVzdCBiZSBlbXB0eSwgc28gd2Ugd29uJ3QgcmVjZWl2ZSBhbnkgcngKIAkJICogZXZlbnRzLCBzbyBlZnhfcHJvY2Vzc19jaGFubmVsKCkgd29uJ3QgcmVmaWxsIHRoZQpAQCAtMTAxNSw4ICsxMDE3LDcgQEAKIAkJLyogQ2xlYXIgdGhpcyBldmVudCBieSBtYXJraW5nIGl0IGFsbCBvbmVzICovCiAJCUVGWF9TRVRfUVdPUkQoKnBfZXZlbnQpOwogCi0JCS8qIEluY3JlbWVudCByZWFkIHBvaW50ZXIgKi8KLQkJcmVhZF9wdHIgPSAocmVhZF9wdHIgKyAxKSAmIGNoYW5uZWwtPmV2ZW50cV9tYXNrOworCQkrK3JlYWRfcHRyOwogCiAJCWV2X2NvZGUgPSBFRlhfUVdPUkRfRklFTEQoZXZlbnQsIEZTRl9BWl9FVl9DT0RFKTsKIApAQCAtMTA2MCw2ICsxMDYxLDEzIEBACiAJcmV0dXJuIHNwZW50OwogfQogCisvKiBDaGVjayB3aGV0aGVyIGFuIGV2ZW50IGlzIHByZXNlbnQgaW4gdGhlIGV2ZW50cSBhdCB0aGUgY3VycmVudAorICogcmVhZCBwb2ludGVyLiAgT25seSB1c2VmdWwgZm9yIHNlbGYtdGVzdC4KKyAqLworYm9vbCBlZnhfbmljX2V2ZW50X3ByZXNlbnQoc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsKQoreworCXJldHVybiBlZnhfZXZlbnRfcHJlc2VudChlZnhfZXZlbnQoY2hhbm5lbCwgY2hhbm5lbC0+ZXZlbnRxX3JlYWRfcHRyKSk7Cit9CiAKIC8qIEFsbG9jYXRlIGJ1ZmZlciB0YWJsZSBlbnRyaWVzIGZvciBldmVudCBxdWV1ZSAqLwogaW50IGVmeF9uaWNfcHJvYmVfZXZlbnRxKHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCkKQEAgLTExNjUsNyArMTE3Myw3IEBACiAJc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWU7CiAJc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWU7CiAJdW5zaWduZWQgaW50IHJlYWRfcHRyID0gY2hhbm5lbC0+ZXZlbnRxX3JlYWRfcHRyOwotCXVuc2lnbmVkIGludCBlbmRfcHRyID0gKHJlYWRfcHRyIC0gMSkgJiBjaGFubmVsLT5ldmVudHFfbWFzazsKKwl1bnNpZ25lZCBpbnQgZW5kX3B0ciA9IHJlYWRfcHRyICsgY2hhbm5lbC0+ZXZlbnRxX21hc2sgLSAxOwogCiAJZG8gewogCQllZnhfcXdvcmRfdCAqZXZlbnQgPSBlZnhfZXZlbnQoY2hhbm5lbCwgcmVhZF9wdHIpOwpAQCAtMTIwNSw3ICsxMjEzLDcgQEAKIAkJICogaXQncyBvayB0byB0aHJvdyBhd2F5IGV2ZXJ5IG5vbi1mbHVzaCBldmVudCAqLwogCQlFRlhfU0VUX1FXT1JEKCpldmVudCk7CiAKLQkJcmVhZF9wdHIgPSAocmVhZF9wdHIgKyAxKSAmIGNoYW5uZWwtPmV2ZW50cV9tYXNrOworCQkrK3JlYWRfcHRyOwogCX0gd2hpbGUgKHJlYWRfcHRyICE9IGVuZF9wdHIpOwogCiAJY2hhbm5lbC0+ZXZlbnRxX3JlYWRfcHRyID0gcmVhZF9wdHI7CkBAIC0xOTI5LDYgKzE5MzcsMTMgQEAKIAogCQlzaXplID0gbWluX3Qoc2l6ZV90LCB0YWJsZS0+c3RlcCwgMTYpOwogCisJCWlmICh0YWJsZS0+b2Zmc2V0ID49IGVmeC0+dHlwZS0+bWVtX21hcF9zaXplKSB7CisJCQkvKiBObyBsb25nZXIgbWFwcGVkOyByZXR1cm4gZHVtbXkgZGF0YSAqLworCQkJbWVtY3B5KGJ1ZiwgIlx4ZGVceGMwXHhhZFx4ZGUiLCA0KTsKKwkJCWJ1ZiArPSB0YWJsZS0+cm93cyAqIHNpemU7CisJCQljb250aW51ZTsKKwkJfQorCiAJCWZvciAoaSA9IDA7IGkgPCB0YWJsZS0+cm93czsgaSsrKSB7CiAJCQlzd2l0Y2ggKHRhYmxlLT5zdGVwKSB7CiAJCQljYXNlIDQ6IC8qIDMyLWJpdCByZWdpc3RlciBvciBTUkFNICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbmljLmggYi9kcml2ZXJzL25ldC9zZmMvbmljLmgKaW5kZXggZDlkZTFiNi4uZDkxNzAxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL25pYy5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9uaWMuaApAQCAtMTQzLDEwICsxNDMsMTIgQEAKIC8qKgogICogc3RydWN0IHNpZW5hX25pY19kYXRhIC0gU2llbmEgTklDIHN0YXRlCiAgKiBAbWNkaTogTWFuYWdlbWVudC1Db250cm9sbGVyLXRvLURyaXZlciBJbnRlcmZhY2UKKyAqIEBtY2RpX3NtZW06IE1DREkgc2hhcmVkIG1lbW9yeSBtYXBwaW5nLiBUaGUgbWFwcGluZyBpcyBhbHdheXMgdW5jYWNoZWFibGUuCiAgKiBAd29sX2ZpbHRlcl9pZDogV2FrZS1vbi1MQU4gcGFja2V0IGZpbHRlciBpZAogICovCiBzdHJ1Y3Qgc2llbmFfbmljX2RhdGEgewogCXN0cnVjdCBlZnhfbWNkaV9pZmFjZSBtY2RpOworCXZvaWQgX19pb21lbSAqbWNkaV9zbWVtOwogCWludCB3b2xfZmlsdGVyX2lkOwogfTsKIApAQCAtMTg0LDYgKzE4Niw3IEBACiBleHRlcm4gdm9pZCBlZnhfbmljX3JlbW92ZV9ldmVudHEoc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsKTsKIGV4dGVybiBpbnQgZWZ4X25pY19wcm9jZXNzX2V2ZW50cShzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwsIGludCByeF9xdW90YSk7CiBleHRlcm4gdm9pZCBlZnhfbmljX2V2ZW50cV9yZWFkX2FjayhzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwpOworZXh0ZXJuIGJvb2wgZWZ4X25pY19ldmVudF9wcmVzZW50KHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCk7CiAKIC8qIE1BQy9QSFkgKi8KIGV4dGVybiB2b2lkIGZhbGNvbl9kcmFpbl90eF9maWZvKHN0cnVjdCBlZnhfbmljICplZngpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3NlbGZ0ZXN0LmMgYi9kcml2ZXJzL25ldC9zZmMvc2VsZnRlc3QuYwppbmRleCBhMGY0OWIzLi41MGFkM2JjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvc2VsZnRlc3QuYworKysgYi9kcml2ZXJzL25ldC9zZmMvc2VsZnRlc3QuYwpAQCAtMTMxLDggKzEzMSw2IEBACiBzdGF0aWMgaW50IGVmeF90ZXN0X2ludGVycnVwdHMoc3RydWN0IGVmeF9uaWMgKmVmeCwKIAkJCSAgICAgICBzdHJ1Y3QgZWZ4X3NlbGZfdGVzdHMgKnRlc3RzKQogewotCXN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbDsKLQogCW5ldGlmX2RiZyhlZngsIGRydiwgZWZ4LT5uZXRfZGV2LCAidGVzdGluZyBpbnRlcnJ1cHRzXG4iKTsKIAl0ZXN0cy0+aW50ZXJydXB0ID0gLTE7CiAKQEAgLTE0MCwxNSArMTM4LDYgQEAKIAllZngtPmxhc3RfaXJxX2NwdSA9IC0xOwogCXNtcF93bWIoKTsKIAotCS8qIEFDSyBlYWNoIGludGVycnVwdGluZyBldmVudCBxdWV1ZS4gUmVjZWl2aW5nIGFuIGludGVycnVwdCBkdWUgdG8KLQkgKiB0cmFmZmljIGJlZm9yZSBhIHRlc3QgZXZlbnQgaXMgcmFpc2VkIGlzIGNvbnNpZGVyZWQgYSBwYXNzICovCi0JZWZ4X2Zvcl9lYWNoX2NoYW5uZWwoY2hhbm5lbCwgZWZ4KSB7Ci0JCWlmIChjaGFubmVsLT53b3JrX3BlbmRpbmcpCi0JCQllZnhfcHJvY2Vzc19jaGFubmVsX25vdyhjaGFubmVsKTsKLQkJaWYgKGVmeC0+bGFzdF9pcnFfY3B1ID49IDApCi0JCQlnb3RvIHN1Y2Nlc3M7Ci0JfQotCiAJZWZ4X25pY19nZW5lcmF0ZV9pbnRlcnJ1cHQoZWZ4KTsKIAogCS8qIFdhaXQgZm9yIGFycml2YWwgb2YgdGVzdCBpbnRlcnJ1cHQuICovCkBAIC0xNzMsMTMgKzE2MiwxMyBAQAogCQkJICAgICAgIHN0cnVjdCBlZnhfc2VsZl90ZXN0cyAqdGVzdHMpCiB7CiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IGNoYW5uZWwtPmVmeDsKLQl1bnNpZ25lZCBpbnQgbWFnaWNfY291bnQsIGNvdW50OworCXVuc2lnbmVkIGludCByZWFkX3B0ciwgY291bnQ7CiAKIAl0ZXN0cy0+ZXZlbnRxX2RtYVtjaGFubmVsLT5jaGFubmVsXSA9IC0xOwogCXRlc3RzLT5ldmVudHFfaW50W2NoYW5uZWwtPmNoYW5uZWxdID0gLTE7CiAJdGVzdHMtPmV2ZW50cV9wb2xsW2NoYW5uZWwtPmNoYW5uZWxdID0gLTE7CiAKLQltYWdpY19jb3VudCA9IGNoYW5uZWwtPm1hZ2ljX2NvdW50OworCXJlYWRfcHRyID0gY2hhbm5lbC0+ZXZlbnRxX3JlYWRfcHRyOwogCWNoYW5uZWwtPmVmeC0+bGFzdF9pcnFfY3B1ID0gLTE7CiAJc21wX3dtYigpOwogCkBAIC0xOTAsMTAgKzE3OSw3IEBACiAJZG8gewogCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShIWiAvIDEwMCk7CiAKLQkJaWYgKGNoYW5uZWwtPndvcmtfcGVuZGluZykKLQkJCWVmeF9wcm9jZXNzX2NoYW5uZWxfbm93KGNoYW5uZWwpOwotCi0JCWlmIChjaGFubmVsLT5tYWdpY19jb3VudCAhPSBtYWdpY19jb3VudCkKKwkJaWYgKEFDQ0VTU19PTkNFKGNoYW5uZWwtPmV2ZW50cV9yZWFkX3B0cikgIT0gcmVhZF9wdHIpCiAJCQlnb3RvIGV2ZW50cV9vazsKIAl9IHdoaWxlICgrK2NvdW50IDwgMik7CiAKQEAgLTIxMSw4ICsxOTcsNyBAQAogCX0KIAogCS8qIENoZWNrIHRvIHNlZSBpZiBldmVudCB3YXMgcmVjZWl2ZWQgZXZlbiBpZiBpbnRlcnJ1cHQgd2Fzbid0ICovCi0JZWZ4X3Byb2Nlc3NfY2hhbm5lbF9ub3coY2hhbm5lbCk7Ci0JaWYgKGNoYW5uZWwtPm1hZ2ljX2NvdW50ICE9IG1hZ2ljX2NvdW50KSB7CisJaWYgKGVmeF9uaWNfZXZlbnRfcHJlc2VudChjaGFubmVsKSkgewogCQluZXRpZl9lcnIoZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwKIAkJCSAgImNoYW5uZWwgJWQgZXZlbnQgd2FzIGdlbmVyYXRlZCwgYnV0ICIKIAkJCSAgImZhaWxlZCB0byB0cmlnZ2VyIGFuIGludGVycnVwdFxuIiwgY2hhbm5lbC0+Y2hhbm5lbCk7CkBAIC03NzAsNiArNzU1LDggQEAKIAlfX2VmeF9yZWNvbmZpZ3VyZV9wb3J0KGVmeCk7CiAJbXV0ZXhfdW5sb2NrKCZlZngtPm1hY19sb2NrKTsKIAorCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhlZngtPm5ldF9kZXYpOworCiAJcmV0dXJuIHJjX3Rlc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9zaWVuYS5jIGIvZHJpdmVycy9uZXQvc2ZjL3NpZW5hLmMKaW5kZXggZTRkZDg5OC4uODM3ODY5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3NpZW5hLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3NpZW5hLmMKQEAgLTIyMCwxMiArMjIwLDI2IEBACiAJZWZ4X3JlYWRvKGVmeCwgJnJlZywgRlJfQVpfQ1NfREVCVUcpOwogCWVmeC0+bmV0X2Rldi0+ZGV2X2lkID0gRUZYX09XT1JEX0ZJRUxEKHJlZywgRlJGX0NaX0NTX1BPUlRfTlVNKSAtIDE7CiAKKwkvKiBJbml0aWFsaXNlIE1DREkgKi8KKwluaWNfZGF0YS0+bWNkaV9zbWVtID0gaW9yZW1hcF9ub2NhY2hlKGVmeC0+bWVtYmFzZV9waHlzICsKKwkJCQkJICAgICAgRlJfQ1pfTUNfVFJFR19TTUVNLAorCQkJCQkgICAgICBGUl9DWl9NQ19UUkVHX1NNRU1fU1RFUCAqCisJCQkJCSAgICAgIEZSX0NaX01DX1RSRUdfU01FTV9ST1dTKTsKKwlpZiAoIW5pY19kYXRhLT5tY2RpX3NtZW0pIHsKKwkJbmV0aWZfZXJyKGVmeCwgcHJvYmUsIGVmeC0+bmV0X2RldiwKKwkJCSAgImNvdWxkIG5vdCBtYXAgTUNESSBhdCAlbGx4KyV4XG4iLAorCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWVmeC0+bWVtYmFzZV9waHlzICsKKwkJCSAgRlJfQ1pfTUNfVFJFR19TTUVNLAorCQkJICBGUl9DWl9NQ19UUkVHX1NNRU1fU1RFUCAqIEZSX0NaX01DX1RSRUdfU01FTV9ST1dTKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGZhaWwxOworCX0KIAllZnhfbWNkaV9pbml0KGVmeCk7CiAKIAkvKiBSZWNvdmVyIGZyb20gYSBmYWlsZWQgYXNzZXJ0aW9uIGJlZm9yZSBwcm9iaW5nICovCiAJcmMgPSBlZnhfbWNkaV9oYW5kbGVfYXNzZXJ0aW9uKGVmeCk7CiAJaWYgKHJjKQotCQlnb3RvIGZhaWwxOworCQlnb3RvIGZhaWwyOwogCiAJLyogTGV0IHRoZSBCTUMga25vdyB0aGF0IHRoZSBkcml2ZXIgaXMgbm93IGluIGNoYXJnZSBvZiBsaW5rIGFuZAogCSAqIGZpbHRlciBzZXR0aW5ncy4gV2UgbXVzdCBkbyB0aGlzIGJlZm9yZSB3ZSByZXNldCB0aGUgTklDICovCkBAIC0yODAsNiArMjk0LDcgQEAKIGZhaWwzOgogCWVmeF9tY2RpX2Rydl9hdHRhY2goZWZ4LCBmYWxzZSwgTlVMTCk7CiBmYWlsMjoKKwlpb3VubWFwKG5pY19kYXRhLT5tY2RpX3NtZW0pOwogZmFpbDE6CiAJa2ZyZWUoZWZ4LT5uaWNfZGF0YSk7CiAJcmV0dXJuIHJjOwpAQCAtMzU5LDYgKzM3NCw4IEBACiAKIHN0YXRpYyB2b2lkIHNpZW5hX3JlbW92ZV9uaWMoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKKwlzdHJ1Y3Qgc2llbmFfbmljX2RhdGEgKm5pY19kYXRhID0gZWZ4LT5uaWNfZGF0YTsKKwogCWVmeF9uaWNfZnJlZV9idWZmZXIoZWZ4LCAmZWZ4LT5pcnFfc3RhdHVzKTsKIAogCXNpZW5hX3Jlc2V0X2h3KGVmeCwgUkVTRVRfVFlQRV9BTEwpOwpAQCAtMzY4LDcgKzM4NSw4IEBACiAJCWVmeF9tY2RpX2Rydl9hdHRhY2goZWZ4LCBmYWxzZSwgTlVMTCk7CiAKIAkvKiBUZWFyIGRvd24gdGhlIHByaXZhdGUgbmljIHN0YXRlICovCi0Ja2ZyZWUoZWZ4LT5uaWNfZGF0YSk7CisJaW91bm1hcChuaWNfZGF0YS0+bWNkaV9zbWVtKTsKKwlrZnJlZShuaWNfZGF0YSk7CiAJZWZ4LT5uaWNfZGF0YSA9IE5VTEw7CiB9CiAKQEAgLTYwNiw4ICs2MjQsNyBAQAogCS5kZWZhdWx0X21hY19vcHMgPSAmZWZ4X21jZGlfbWFjX29wZXJhdGlvbnMsCiAKIAkucmV2aXNpb24gPSBFRlhfUkVWX1NJRU5BX0EwLAotCS5tZW1fbWFwX3NpemUgPSAoRlJfQ1pfTUNfVFJFR19TTUVNICsKLQkJCSBGUl9DWl9NQ19UUkVHX1NNRU1fU1RFUCAqIEZSX0NaX01DX1RSRUdfU01FTV9ST1dTKSwKKwkubWVtX21hcF9zaXplID0gRlJfQ1pfTUNfVFJFR19TTUVNLCAvKiBNQ19UUkVHX1NNRU0gbWFwcGVkIHNlcGFyYXRlbHkgKi8KIAkudHhkX3B0cl90YmxfYmFzZSA9IEZSX0JaX1RYX0RFU0NfUFRSX1RCTCwKIAkucnhkX3B0cl90YmxfYmFzZSA9IEZSX0JaX1JYX0RFU0NfUFRSX1RCTCwKIAkuYnVmX3RibF9iYXNlID0gRlJfQlpfQlVGX0ZVTExfVEJMLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3R4LmMgYi9kcml2ZXJzL25ldC9zZmMvdHguYwppbmRleCAxMzk4MDE5Li5kMmM4NWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvdHguYworKysgYi9kcml2ZXJzL25ldC9zZmMvdHguYwpAQCAtNDM1LDcgKzQzNSw4IEBACiAJICogcXVldWUgc3RhdGUuICovCiAJc21wX21iKCk7CiAJaWYgKHVubGlrZWx5KG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhfcXVldWUtPmNvcmVfdHhxKSkgJiYKLQkgICAgbGlrZWx5KGVmeC0+cG9ydF9lbmFibGVkKSkgeworCSAgICBsaWtlbHkoZWZ4LT5wb3J0X2VuYWJsZWQpICYmCisJICAgIGxpa2VseSghZWZ4LT5wb3J0X2luaGliaXRlZCkpIHsKIAkJZmlsbF9sZXZlbCA9IHR4X3F1ZXVlLT5pbnNlcnRfY291bnQgLSB0eF9xdWV1ZS0+cmVhZF9jb3VudDsKIAkJaWYgKGZpbGxfbGV2ZWwgPCBFRlhfVFhRX1RIUkVTSE9MRChlZngpKSB7CiAJCQlFRlhfQlVHX09OX1BBUkFOT0lEKCFlZnhfZGV2X3JlZ2lzdGVyZWQoZWZ4KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZ2lzZWVxLmMgYi9kcml2ZXJzL25ldC9zZ2lzZWVxLmMKaW5kZXggM2EwY2M2My4uZGQwM2JmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2dpc2VlcS5jCisrKyBiL2RyaXZlcnMvbmV0L3NnaXNlZXEuYwpAQCAtMzMsNyArMzMsNyBAQAogICogd2l0aCB0aGF0IGluIG1pbmQsIEkndmUgZGVjaWRlZCB0byBtYWtlIHRoaXMgZHJpdmVyIGxvb2sgY29tcGxldGVseSBsaWtlIGEKICAqIHN0dXBpZCBMYW5jZSBmcm9tIGEgZHJpdmVyIGFyY2hpdGVjdHVyZSBwZXJzcGVjdGl2ZS4gIE9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0CiAgKiBoZXJlIG91ciAicmluZyBidWZmZXIiIGxvb2tzIGFuZCBhY3RzIGxpa2UgYSByZWFsIExhbmNlIG9uZSBkb2VzIGJ1dCBpcwotICogbGF5ZWQgb3V0IGxpa2UgaG93IHRoZSBIUEMgRE1BIGFuZCB0aGUgU2VlcSB3YW50IGl0IHRvLiAgWW91J2QgYmUgc3VycHJpc2VkCisgKiBsYWlkIG91dCBsaWtlIGhvdyB0aGUgSFBDIERNQSBhbmQgdGhlIFNlZXEgd2FudCBpdCB0by4gIFlvdSdkIGJlIHN1cnByaXNlZAogICogaG93IGEgc3R1cGlkIGlkZWEgbGlrZSB0aGlzIGNhbiBwYXkgb2ZmIGluIHBlcmZvcm1hbmNlLCBub3QgdG8gbWVudGlvbgogICogbWFraW5nIHRoaXMgZHJpdmVyIDIsMDAwIHRpbWVzIGVhc2llciB0byB3cml0ZS4gOy0pCiAgKi8KQEAgLTc3LDcgKzc3LDcgQEAKIH07CiAKIC8qCi0gKiBXYXJuaW5nOiBUaGlzIHN0cnVjdHVyZSBpcyBsYXllZCBvdXQgaW4gYSBjZXJ0YWluIHdheSBiZWNhdXNlIEhQQyBkbWEKKyAqIFdhcm5pbmc6IFRoaXMgc3RydWN0dXJlIGlzIGxhaWQgb3V0IGluIGEgY2VydGFpbiB3YXkgYmVjYXVzZSBIUEMgZG1hCiAgKiAgICAgICAgICBkZXNjcmlwdG9ycyBtdXN0IGJlIDgtYnl0ZSBhbGlnbmVkLiAgU28gZG9uJ3QgdG91Y2ggdGhpcyB3aXRob3V0CiAgKiAgICAgICAgICBzb21lIGNhcmUuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NoX2V0aC5jIGIvZHJpdmVycy9uZXQvc2hfZXRoLmMKaW5kZXggZTllN2E1My4uOGE3MmE5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2hfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvc2hfZXRoLmMKQEAgLTE4NzUsNyArMTg3NSw3IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfdW5yZWdpc3RlcjsKIAotCS8qIHByaW50IGRldmljZSBpbmZvbWF0aW9uICovCisJLyogcHJpbnQgZGV2aWNlIGluZm9ybWF0aW9uICovCiAJcHJfaW5mbygiQmFzZSBhZGRyZXNzIGF0IDB4JXgsICVwTSwgSVJRICVkLlxuIiwKIAkgICAgICAgKHUzMiluZGV2LT5iYXNlX2FkZHIsIG5kZXYtPmRldl9hZGRyLCBuZGV2LT5pcnEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaXMxOTAuYyBiL2RyaXZlcnMvbmV0L3NpczE5MC5jCmluZGV4IDM0MDZlZDguLmI0MzZlMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NpczE5MC5jCisrKyBiL2RyaXZlcnMvbmV0L3NpczE5MC5jCkBAIC05Myw3ICs5Myw3IEBACiAJSW50clN0YXR1cwkJPSAweDIwLAogCUludHJNYXNrCQk9IDB4MjQsCiAJSW50ckNvbnRyb2wJCT0gMHgyOCwKLQlJbnRyVGltZXIJCT0gMHgyYywJLy8gdW51c2VkIChJbnRlcnVwdCBUaW1lcikKKwlJbnRyVGltZXIJCT0gMHgyYywJLy8gdW51c2VkIChJbnRlcnJ1cHQgVGltZXIpCiAJUE1Db250cm9sCQk9IDB4MzAsCS8vIHVudXNlZCAoUG93ZXIgTWdtdCBDb250cm9sL1N0YXR1cykKIAlyc3YyCQkJPSAweDM0LAkvLyByZXNlcnZlZAogCVJPTUNvbnRyb2wJCT0gMHgzOCwKQEAgLTIzNCw3ICsyMzQsNyBAQAogCVJ4U2l6ZU1hc2sJPSAweDAwMDBmZmZmCiAJLyoKIAkgKiBUaGUgYXNpYyBjb3VsZCBhcHBhcmVudGx5IGRvIHZsYW4sIFRTTywganVtYm8gKHNpczE5MSBvbmx5KSBhbmQKLQkgKiBwcm92aWRlIHR3byAodW51c2VkIHdpdGggTGludXgpIFR4IHF1ZXVlcy4gTm8gcHVibGljYWxseQorCSAqIHByb3ZpZGUgdHdvICh1bnVzZWQgd2l0aCBMaW51eCkgVHggcXVldWVzLiBObyBwdWJsaWNseQogCSAqIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIGFsYXMuCiAJICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2lzOTAwLmMgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwppbmRleCA4NGQ0MTY3Li40ODRmNzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaXM5MDAuYworKysgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwpAQCAtMjQwLDcgKzI0MCw4IEBACiAgKglAbmV0X2RldjogdGhlIG5ldCBkZXZpY2UgdG8gZ2V0IGFkZHJlc3MgZm9yCiAgKgogICoJT2xkZXIgU2lTOTAwIGFuZCBmcmllbmRzLCB1c2UgRUVQUk9NIHRvIHN0b3JlIE1BQyBhZGRyZXNzLgotICoJTUFDIGFkZHJlc3MgaXMgcmVhZCBmcm9tIHJlYWRfZWVwcm9tKCkgaW50byBAbmV0X2Rldi0+ZGV2X2FkZHIuCisgKglNQUMgYWRkcmVzcyBpcyByZWFkIGZyb20gcmVhZF9lZXByb20oKSBpbnRvIEBuZXRfZGV2LT5kZXZfYWRkciBhbmQKKyAqCUBuZXRfZGV2LT5wZXJtX2FkZHIuCiAgKi8KIAogc3RhdGljIGludCBfX2RldmluaXQgc2lzOTAwX2dldF9tYWNfYWRkcihzdHJ1Y3QgcGNpX2RldiAqIHBjaV9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQpAQCAtMjYxLDYgKzI2Miw5IEBACiAJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKIAkgICAgICAgICgodTE2ICopKG5ldF9kZXYtPmRldl9hZGRyKSlbaV0gPSByZWFkX2VlcHJvbShpb2FkZHIsIGkrRUVQUk9NTUFDQWRkcik7CiAKKwkvKiBTdG9yZSBNQUMgQWRkcmVzcyBpbiBwZXJtX2FkZHIgKi8KKwltZW1jcHkobmV0X2Rldi0+cGVybV9hZGRyLCBuZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCiAJcmV0dXJuIDE7CiB9CiAKQEAgLTI3MSw3ICsyNzUsOCBAQAogICoKICAqCVNpUzYzMEUgbW9kZWwsIHVzZSBBUEMgQ01PUyBSQU0gdG8gc3RvcmUgTUFDIGFkZHJlc3MuCiAgKglBUEMgQ01PUyBSQU0gaXMgYWNjZXNzZWQgdGhyb3VnaCBJU0EgYnJpZGdlLgotICoJTUFDIGFkZHJlc3MgaXMgcmVhZCBpbnRvIEBuZXRfZGV2LT5kZXZfYWRkci4KKyAqCU1BQyBhZGRyZXNzIGlzIHJlYWQgaW50byBAbmV0X2Rldi0+ZGV2X2FkZHIgYW5kCisgKglAbmV0X2Rldi0+cGVybV9hZGRyLgogICovCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNpczYzMGVfZ2V0X21hY19hZGRyKHN0cnVjdCBwY2lfZGV2ICogcGNpX2RldiwKQEAgLTI5Niw2ICszMDEsMTAgQEAKIAkJb3V0YigweDA5ICsgaSwgMHg3MCk7CiAJCSgodTggKikobmV0X2Rldi0+ZGV2X2FkZHIpKVtpXSA9IGluYigweDcxKTsKIAl9CisKKwkvKiBTdG9yZSBNQUMgQWRkcmVzcyBpbiBwZXJtX2FkZHIgKi8KKwltZW1jcHkobmV0X2Rldi0+cGVybV9hZGRyLCBuZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGlzYV9icmlkZ2UsIDB4NDgsIHJlZyAmIH4weDQwKTsKIAlwY2lfZGV2X3B1dChpc2FfYnJpZGdlKTsKIApAQCAtMzEwLDcgKzMxOSw3IEBACiAgKgogICoJU2lTNjM1IG1vZGVsLCBzZXQgTUFDIFJlbG9hZCBCaXQgdG8gbG9hZCBNYWMgYWRkcmVzcyBmcm9tIEFQQwogICoJdG8gcmZkci4gcmZkciBpcyBhY2Nlc3NlZCB0aHJvdWdoIHJmY3IuIE1BQyBhZGRyZXNzIGlzIHJlYWQgaW50bwotICoJQG5ldF9kZXYtPmRldl9hZGRyLgorICoJQG5ldF9kZXYtPmRldl9hZGRyIGFuZCBAbmV0X2Rldi0+cGVybV9hZGRyLgogICovCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNpczYzNV9nZXRfbWFjX2FkZHIoc3RydWN0IHBjaV9kZXYgKiBwY2lfZGV2LApAQCAtMzM0LDYgKzM0Myw5IEBACiAJCSooICgodTE2ICopbmV0X2Rldi0+ZGV2X2FkZHIpICsgaSkgPSBpbncoaW9hZGRyICsgcmZkcik7CiAJfQogCisJLyogU3RvcmUgTUFDIEFkZHJlc3MgaW4gcGVybV9hZGRyICovCisJbWVtY3B5KG5ldF9kZXYtPnBlcm1fYWRkciwgbmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwogCS8qIGVuYWJsZSBwYWNrZXQgZmlsdGVyaW5nICovCiAJb3V0bChyZmNyU2F2ZSB8IFJGRU4sIHJmY3IgKyBpb2FkZHIpOwogCkBAIC0zNTMsNyArMzY1LDcgQEAKICAqCUVFRE9ORSBzaWduYWwgdG8gcmVmdXNlIEVFUFJPTSBhY2Nlc3MgYnkgTEFOLgogICoJVGhlIEVFUFJPTSBtYXAgb2YgU2lTOTYyIG9yIFNpUzk2MyBpcyBkaWZmZXJlbnQgdG8gU2lTOTAwLgogICoJVGhlIHNpZ25hdHVyZSBmaWVsZCBpbiBTaVM5NjIgb3IgU2lTOTYzIHNwZWMgaXMgbWVhbmluZ2xlc3MuCi0gKglNQUMgYWRkcmVzcyBpcyByZWFkIGludG8gQG5ldF9kZXYtPmRldl9hZGRyLgorICoJTUFDIGFkZHJlc3MgaXMgcmVhZCBpbnRvIEBuZXRfZGV2LT5kZXZfYWRkciBhbmQgQG5ldF9kZXYtPnBlcm1fYWRkci4KICAqLwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzaXM5NnhfZ2V0X21hY19hZGRyKHN0cnVjdCBwY2lfZGV2ICogcGNpX2RldiwKQEAgLTM3Miw2ICszODQsOSBAQAogCQkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKIAkJCSAgICAgICAgKCh1MTYgKikobmV0X2Rldi0+ZGV2X2FkZHIpKVtpXSA9IHJlYWRfZWVwcm9tKGlvYWRkciwgaStFRVBST01NQUNBZGRyKTsKIAorCQkJLyogU3RvcmUgTUFDIEFkZHJlc3MgaW4gcGVybV9hZGRyICovCisJCQltZW1jcHkobmV0X2Rldi0+cGVybV9hZGRyLCBuZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCiAJCQlvdXRsKEVFRE9ORSwgZWVfYWRkcik7CiAJCQlyZXR1cm4gMTsKIAkJfSBlbHNlIHsKQEAgLTExODAsNyArMTE5NSw3IEBACiAgKgogICoJNjMwRSBlcXVhbGl6ZXIgd29ya2Fyb3VuZCBydWxlKEN5cnVzIEh1YW5nIDA4LzE1KQogICoJUEhZIHJlZ2lzdGVyIDE0aChUZXN0KQotICoJQml0IDE0OiAwIC0tIEF1dG9tYXRpY2FsbHkgZGVjdGVjdCAoZGVmYXVsdCkKKyAqCUJpdCAxNDogMCAtLSBBdXRvbWF0aWNhbGx5IGRldGVjdCAoZGVmYXVsdCkKICAqCQkxIC0tIE1hbnVhbGx5IHNldCBFcXVhbGl6ZXIgZmlsdGVyCiAgKglCaXQgMTM6IDAgLS0gKERlZmF1bHQpCiAgKgkJMSAtLSBTcGVlZCB1cCBjb252ZXJnZW5jZSBvZiBlcXVhbGl6ZXIgc2V0dGluZwpAQCAtMTE5Miw3ICsxMjA3LDcgQEAKICAqCVRoZW4gc2V0IGVxdWFsaXplciB2YWx1ZSwgYW5kIHNldCBCaXQgMTQgdG8gMSwgQml0IDkgdG8gMAogICoJTGluayBPZmY6U2V0IEJpdCAxMyB0byAxLCBCaXQgMTQgdG8gMAogICoJQ2FsY3VsYXRlIEVxdWFsaXplciB2YWx1ZToKLSAqCVdoZW4gTGluayBpcyBPTiBhbmQgQml0IDE0IGlzIDAsIFNJUzkwMFBIWSB3aWxsIGF1dG8tZGVjdGVjdCBwcm9wZXIgZXF1YWxpemVyIHZhbHVlLgorICoJV2hlbiBMaW5rIGlzIE9OIGFuZCBCaXQgMTQgaXMgMCwgU0lTOTAwUEhZIHdpbGwgYXV0by1kZXRlY3QgcHJvcGVyIGVxdWFsaXplciB2YWx1ZS4KICAqCVdoZW4gdGhlIGVxdWFsaXplciBpcyBzdGFibGUsIHRoaXMgdmFsdWUgaXMgbm90IGEgZml4ZWQgdmFsdWUuIEl0IHdpbGwgYmUgd2l0aGluCiAgKglhIHNtYWxsIHJhbmdlKGVnLiA3fjkpLiBUaGVuIHdlIGdldCBhIG1pbmltdW0gYW5kIGEgbWF4aW11bSB2YWx1ZShlZy4gbWluPTcsIG1heD05KQogICoJMCA8PSBtYXggPD0gNCAgLS0+IHNldCBlcXVhbGl6ZXIgdG8gbWF4CkBAIC0xNzIzLDcgKzE3MzgsNyBAQAogCQlyeF9zaXplID0gZGF0YV9zaXplIC0gQ1JDX1NJWkU7CiAKICNpZiBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRKSB8fCBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRX01PRFVMRSkKLQkJLyogYGBUT09MT05HJycgZmxhZyBtZWFucyBqdW1ibyBwYWNrZXQgcmVjaXZlZC4gKi8KKwkJLyogYGBUT09MT05HJycgZmxhZyBtZWFucyBqdW1ibyBwYWNrZXQgcmVjZWl2ZWQuICovCiAJCWlmICgocnhfc3RhdHVzICYgVE9PTE9ORykgJiYgZGF0YV9zaXplIDw9IE1BWF9GUkFNRV9TSVpFKQogCQkJcnhfc3RhdHVzICY9ICh+ICgodW5zaWduZWQgaW50KVRPT0xPTkcpKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tmcC9lc3MuYyBiL2RyaXZlcnMvbmV0L3NrZnAvZXNzLmMKaW5kZXggODYzOWEwOC4uMmZjNTk4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9lc3MuYworKysgYi9kcml2ZXJzL25ldC9za2ZwL2Vzcy5jCkBAIC0yNDEsNyArMjQxLDcgQEAKIAkJCSE9IFNNVF9SREZfU1VDQ0VTUykgfHwKIAkJCShzbS0+c210X3RpZCAhPSBzbWMtPmVzcy5hbGxvY190cmFuc19pZCkpIHsKIAotCQkJREJfRVNTKCJFU1M6IEFsbG9jYXRpb24gUmVzcG9uY2Ugbm90IGFjY2VwdGVkXG4iLDAsMCkgOworCQkJREJfRVNTKCJFU1M6IEFsbG9jYXRpb24gUmVzcG9uc2Ugbm90IGFjY2VwdGVkXG4iLDAsMCkgOwogCQkJcmV0dXJuIGZzOwogCQl9CiAKQEAgLTM5Myw3ICszOTMsNyBAQAogCSAqCQkgICAgICB8CSBULU5FRwl8CiAJICoJCSAgICAgICAtICAgICAgIC0KICAJICoKLQkgKiBULU5FRyBpcyBkaXNjcmliZWQgYnkgdGhlIGVxdWF0aW9uOgorCSAqIFQtTkVHIGlzIGRlc2NyaWJlZCBieSB0aGUgZXF1YXRpb246CiAJICoKIAkgKgkJICAgICAoLSkgZmRkaU1BQ1QtTkVHCiAJICoJVC1ORUcgPQkgICAgLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDc5LDcgKzQ3OSw3IEBACiAJdm9pZAkJCSpwIDsKIAogCS8qCi0JICogZ2V0IGFuZCBpbml0aWFsaXplIHRoZSByZXNwb25jZSBmcmFtZQorCSAqIGdldCBhbmQgaW5pdGlhbGl6ZSB0aGUgcmVzcG9uc2UgZnJhbWUKIAkgKi8KIAlpZiAoc2JhX2NtZCA9PSBDSEFOR0VfQUxMT0NBVElPTikgewogCQlpZiAoIShtYj1zbXRfYnVpbGRfZnJhbWUoc21jLFNNVF9SQUYsU01UX1JFUExZLApAQCAtNTc4LDcgKzU3OCw3IEBACiAJfQogCQogCS8qCi0JICogZ2V0IGFuZCBpbml0aWFsaXplIHRoZSByZXNwb25jZSBmcmFtZQorCSAqIGdldCBhbmQgaW5pdGlhbGl6ZSB0aGUgcmVzcG9uc2UgZnJhbWUKIAkgKi8KIAlpZiAoIShtYj1zbXRfYnVpbGRfZnJhbWUoc21jLFNNVF9SQUYsU01UX1JFUVVFU1QsCiAJCQlzaXplb2Yoc3RydWN0IHNtdF9zYmFfYWxjX3JlcSkpKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvZnBsdXN0bS5jIGIvZHJpdmVycy9uZXQvc2tmcC9mcGx1c3RtLmMKaW5kZXggY2E0ZTdiYi4uYTIwZWQxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9mcGx1c3RtLmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9mcGx1c3RtLmMKQEAgLTM0MCw3ICszNDAsNyBAQAogCW91dHB3KEZNX0EoRk1fTENOVFIpLDApIDsKIAlvdXRwdyhGTV9BKEZNX0VDTlRSKSwwKSA7CiAJLyoKLQkgKiBjbGVhciBpbnRlcm5hbCBlcnJvciBjb3VudGVyIHN0dWN0dXJlCisJICogY2xlYXIgaW50ZXJuYWwgZXJyb3IgY291bnRlciBzdHJ1Y3R1cmUKIAkgKi8KIAllYyA9ICh1X2xvbmcgKikmc21jLT5ody5mcC5lcnJfc3RhdHMgOwogCWZvciAoaSA9IChzaXplb2Yoc3RydWN0IGVycl9zdCkvc2l6ZW9mKGxvbmcpKSA7IGkgOyBpLS0pCkBAIC0xMjYyLDggKzEyNjIsOCBAQAogCiBQYXJhCW1vZGUgPQkxCVJYX0VOQUJMRV9BTExNVUxUSQllbmFibGUgYWxsIG11bHRpY2FzdHMKIAkJMglSWF9ESVNBQkxFX0FMTE1VTFRJCWRpc2FibGUgImVuYWJsZSBhbGwgbXVsdGljYXN0cyIKLQkJMwlSWF9FTkFCTEVfUFJPTUlTQwllbmFibGUgcHJvbWlzY291cwotCQk0CVJYX0RJU0FCTEVfUFJPTUlTQwlkaXNhYmxlIHByb21pc2NvdXMKKwkJMwlSWF9FTkFCTEVfUFJPTUlTQwllbmFibGUgcHJvbWlzY3VvdXMKKwkJNAlSWF9ESVNBQkxFX1BST01JU0MJZGlzYWJsZSBwcm9taXNjdW91cwogCQk1CVJYX0VOQUJMRV9OU0EJCWVuYWJsZSByZWNlcHRpb24gb2YgTlNBIGZyYW1lcwogCQk2CVJYX0RJU0FCTEVfTlNBCQlkaXNhYmxlIHJlY2VwdGlvbiBvZiBOU0EgZnJhbWVzCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvaC9jbXRkZWYuaCBiL2RyaXZlcnMvbmV0L3NrZnAvaC9jbXRkZWYuaAppbmRleCBmMmY3NzFkLi41YTZjNjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL2gvY210ZGVmLmgKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9oL2NtdGRlZi5oCkBAIC0xOSw3ICsxOSw3IEBACiAKIC8qCiAgKiBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBjb25zdGFudHMKLSAqIE1PRElJRlkgVEhFIEZPTExXT0lORyBUSFJFRSBERUZJTkVTCisgKiBNT0RJSUZZIFRIRSBGT0xMT1dJTkcgVEhSRUUgREVGSU5FUwogICovCiAjZGVmaW5lIEFNRFBMQwkJCS8qIGlmIEFtZCBQTEMgY2hpcCB1c2VkICovCiAjaWZkZWYJQ09OQwpAQCAtNDU2LDcgKzQ1Niw3IEBACiAJdV9sb25nIHNvZnRfZXJyIDsJCS8qIGVycm9yIGNvdW50ZXIgKi8KIAl1X2xvbmcgcGFyaXR5X2VyciA7CQkvKiBlcnJvciBjb3VudGVyICovCiAJdV9sb25nIGVidWZfZXJyIDsJCS8qIGVycm9yIGNvdW50ZXIgKi8KLQl1X2xvbmcgZWJ1Zl9jb250IDsJCS8qIGNvbnRpbm91cyBlcnJvciBjb3VudGVyICovCisJdV9sb25nIGVidWZfY29udCA7CQkvKiBjb250aW51b3VzIGVycm9yIGNvdW50ZXIgKi8KIAl1X2xvbmcgcGh5aW52IDsJCQkvKiBlcnJvciBjb3VudGVyICovCiAJdV9sb25nIHZzeW1fY3RyIDsJCS8qIGVycm9yIGNvdW50ZXIgKi8KIAl1X2xvbmcgbWluaV9jdHIgOwkJLyogZXJyb3IgY291bnRlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tmcC9oL2ZwbHVzdG0uaCBiL2RyaXZlcnMvbmV0L3NrZnAvaC9mcGx1c3RtLmgKaW5kZXggNmQ3MzhlMS4uZDQzMTkxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9oL2ZwbHVzdG0uaAorKysgYi9kcml2ZXJzL25ldC9za2ZwL2gvZnBsdXN0bS5oCkBAIC0yMzcsOCArMjM3LDggQEAKICAqLwogI2RlZmluZSBSWF9FTkFCTEVfQUxMTVVMVEkJMQkvKiBlbmFibGUgYWxsIG11bHRpY2FzdHMgKi8KICNkZWZpbmUgUlhfRElTQUJMRV9BTExNVUxUSQkyCS8qIGRpc2FibGUgImVuYWJsZSBhbGwgbXVsdGljYXN0cyIgKi8KLSNkZWZpbmUgUlhfRU5BQkxFX1BST01JU0MJMwkvKiBlbmFibGUgcHJvbWlzY291cyAqLwotI2RlZmluZSBSWF9ESVNBQkxFX1BST01JU0MJNAkvKiBkaXNhYmxlIHByb21pc2NvdXMgKi8KKyNkZWZpbmUgUlhfRU5BQkxFX1BST01JU0MJMwkvKiBlbmFibGUgcHJvbWlzY3VvdXMgKi8KKyNkZWZpbmUgUlhfRElTQUJMRV9QUk9NSVNDCTQJLyogZGlzYWJsZSBwcm9taXNjdW91cyAqLwogI2RlZmluZSBSWF9FTkFCTEVfTlNBCQk1CS8qIGVuYWJsZSByZWNlcHRpb24gb2YgTlNBIGZyYW1lcyAqLwogI2RlZmluZSBSWF9ESVNBQkxFX05TQQkJNgkvKiBkaXNhYmxlIHJlY2VwdGlvbiBvZiBOU0EgZnJhbWVzICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvaC9zbWMuaCBiL2RyaXZlcnMvbmV0L3NrZnAvaC9zbWMuaAppbmRleCAwMjZhODNiLi5jNzc0YTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL2gvc21jLmgKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9oL3NtYy5oCkBAIC0zODgsNyArMzg4LDcgQEAKIAl1X2xvbmcJcm10X3RfcG9sbCA7CQkvKiBSTVQgOiBjbGFpbS9iZWFjb24gcG9sbGVyICovCiAJdV9sb25nICBybXRfZHVwX21hY19iZWhhdmlvciA7ICAvKiBGbGFnIGZvciB0aGUgYmVhdmlvciBvZiBTTVQgaWYKIAkJCQkJICogYSBEdXBsaWNhdGUgTUFDIEFkZHJlc3Mgd2FzIGRldGVjdGVkLgotCQkJCQkgKiBGQUxTRTogU01UIHdpbGwgbGVhdmUgZmluYWx5IHRoZSByaW5nCisJCQkJCSAqIEZBTFNFOiBTTVQgd2lsbCBsZWF2ZSBmaW5hbGx5IHRoZSByaW5nCiAJCQkJCSAqIFRSVUU6ICBTTVQgd2lsbCByZWluc3RlcnQgaW50byB0aGUgcmluZwogCQkJCQkgKi8KIAl1X2xvbmcJbWFjX2RfbWF4IDsJCS8qIE1BQyA6IERfTWF4IHRpbWVyIHZhbHVlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL2gvc210LmggYi9kcml2ZXJzL25ldC9za2ZwL2gvc210LmgKaW5kZXggMjk3Njc1Ny4uMjAzMGY5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9oL3NtdC5oCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvaC9zbXQuaApAQCAtNzkzLDcgKzc5Myw3IEBACiB9IDsKIAogLyoKLSAqIFNCQSBSZXF1ZXN0IEFsbG9jYXRpb24gUmVzcG9uY2UgRnJhbWUKKyAqIFNCQSBSZXF1ZXN0IEFsbG9jYXRpb24gUmVzcG9uc2UgRnJhbWUKICAqLwogc3RydWN0IHNtdF9zYmFfYWxjX3JlcyB7CiAJc3RydWN0IHNtdF9oZWFkZXIJc210IDsJCS8qIGdlbmVyaWMgaGVhZGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL2gvc3VwZXJuXzIuaCBiL2RyaXZlcnMvbmV0L3NrZnAvaC9zdXBlcm5fMi5oCmluZGV4IDViYTBiODMuLjBiNzM2OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZnAvaC9zdXBlcm5fMi5oCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvaC9zdXBlcm5fMi5oCkBAIC0xNCw3ICsxNCw3IEBACiAKIC8qCiAJZGVmaW5lcyBmb3IgQU1EIFN1cGVybmV0IElJIGNoaXAgc2V0Ci0JdGhlIGNoaXBzIGFyZSByZWZlcmVkIHRvIGFzCisJdGhlIGNoaXBzIGFyZSByZWZlcnJlZCB0byBhcwogCQlGUExVUwlGb3JtYWMgUGx1cwogCQlQTEMJUGh5c2ljYWwgTGF5ZXIKIApAQCAtMzg2LDcgKzM4Niw3IEBACiAjZGVmaW5lCUZNX01ESVNSQ1YJKDQ8PDgpCQkvKiBkaXNhYmxlIHJlY2VpdmUgZnVuY3Rpb24gKi8KICNkZWZpbmUJRk1fTVJFUzAJKDU8PDgpCQkvKiByZXNlcnZlICovCiAjZGVmaW5lCUZNX01MSU1QUk9NCSg2PDw4KQkJLyogbGltaXRlZC1wcm9taXNjdW91cyBtb2RlICovCi0jZGVmaW5lIEZNX01QUk9NSVNDT1VTCSg3PDw4KQkJLyogYWRkcmVzcyBkZXRlY3Rpb24gOiBwcm9taXNjb3VzICovCisjZGVmaW5lIEZNX01QUk9NSVNDT1VTCSg3PDw4KQkJLyogYWRkcmVzcyBkZXRlY3Rpb24gOiBwcm9taXNjdW91cyAqLwogCiAjZGVmaW5lIEZNX1NFTFNBCTB4MDgwMAkJLyogc2VsZWN0LXNob3J0LWFkZHJlc3MgYml0ICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvaHdtdG0uYyBiL2RyaXZlcnMvbmV0L3NrZnAvaHdtdG0uYwppbmRleCBhZjVhNzU1Li5lMjYzOThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL2h3bXRtLmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9od210bS5jCkBAIC02OTEsNyArNjkxLDcgQEAKICAqCQlpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLCBoYW5kbGVzIHRoZSBpbnRlcnJ1cHQgcmVxdWVzdHMKICAqCQlnZW5lcmF0ZWQgYnkgdGhlIEZEREkgYWRhcHRlci4KICAqCi0gKiBOT1RFOglUaGUgb3BlcmF0aW5nIHN5c3RlbSBkZXBlbmRlbnQgbW9kdWxlIG11c3QgZ2FyYW50ZWUgdGhhdCB0aGUKKyAqIE5PVEU6CVRoZSBvcGVyYXRpbmcgc3lzdGVtIGRlcGVuZGVudCBtb2R1bGUgbXVzdCBndWFyYW50ZWUgdGhhdCB0aGUKICAqCQlpbnRlcnJ1cHRzIG9mIHRoZSBhZGFwdGVyIGFyZSBkaXNhYmxlZCB3aGVuIGl0IGNhbGxzIGZkZGlfaXNyLgogICoKICAqCUFib3V0IHRoZSBVU0VfQlJFQUtfSVNSIG1lY2hhbmlzbW46CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL3BjbXBsYy5jIGIvZHJpdmVycy9uZXQvc2tmcC9wY21wbGMuYwppbmRleCAxMTJkMzViLi44OGQwMmQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL3BjbXBsYy5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvcGNtcGxjLmMKQEAgLTE2ODAsNyArMTY4MCw3IEBACiAJCQkgKiBQcmV2ZW50IGNvdW50ZXIgZnJvbSBiZWluZyB3cmFwcGVkIGFmdGVyCiAJCQkgKiBoYW5naW5nIHllYXJzIGluIHRoYXQgaW50ZXJydXB0LgogCQkJICovCi0JCQlwbGMtPmVidWZfY29udCsrIDsJLyogRWJ1ZiBjb250aW5vdXMgZXJyb3IgKi8KKwkJCXBsYy0+ZWJ1Zl9jb250KysgOwkvKiBFYnVmIGNvbnRpbnVvdXMgZXJyb3IgKi8KIAkJfQogCiAjaWZkZWYJU1VQRVJORVRfMwpAQCAtMTcxNyw4ICsxNzE3LDggQEAKIAkJfQogI2VuZGlmCS8qIFNVUEVSTkVUXzMgKi8KIAl9IGVsc2UgewotCQkvKiBSZXNldCB0aGUgY29udGlub3VzIGVycm9yIHZhcmlhYmxlICovCi0JCXBsYy0+ZWJ1Zl9jb250ID0gMCA7CS8qIHJlc2V0IEVidWYgY29udGlub3VzIGVycm9yICovCisJCS8qIFJlc2V0IHRoZSBjb250aW51b3VzIGVycm9yIHZhcmlhYmxlICovCisJCXBsYy0+ZWJ1Zl9jb250ID0gMCA7CS8qIHJlc2V0IEVidWYgY29udGludW91cyBlcnJvciAqLwogCX0KIAlpZiAoY21kICYgUExfUEhZSU5WKSB7CQkvKiBwaHlzaWNhbCBsYXllciBpbnZhbGlkIHNpZ25hbCAqLwogCQlwbGMtPnBoeWludisrIDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvc210LmMgYi9kcml2ZXJzL25ldC9za2ZwL3NtdC5jCmluZGV4IDFlMWJkMGMuLjA4ZDk0MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZnAvc210LmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9zbXQuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAKIAkvKgogCSAqIE9ubHkgd2hlbiByaW5nIGlzIHVwIHdlIHdpbGwgaGF2ZSBhIHRva2VuIGNvdW50LiBUaGUKLQkgKiBmbGFnIGlzIHVuZm9ydHVuYXRseSBhIHNpbmdsZSBpbnN0YW5jZSB2YWx1ZS4gVGhpcworCSAqIGZsYWcgaXMgdW5mb3J0dW5hdGVseSBhIHNpbmdsZSBpbnN0YW5jZSB2YWx1ZS4gVGhpcwogCSAqIGRvZXNuJ3QgbWF0dGVyIG5vdywgYmVjYXVzZSB3ZSBjdXJyZW50bHkgaGF2ZSBvbmx5CiAJICogb25lIE1BQyBpbnN0YW5jZS4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuaCBiL2RyaXZlcnMvbmV0L3NrZ2UuaAppbmRleCA1MDdhZGRjLi41MWMwMjE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmgKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5oCkBAIC0xMDM4LDcgKzEwMzgsNyBAQAogCiAJUEhZX1NUX1BSRV9TVVAJPSAxPDw2LCAvKiBCaXQgIDY6CVByZWFtYmxlIFN1cHByZXNzaW9uICovCiAJUEhZX1NUX0FOX09WRVIJPSAxPDw1LCAvKiBCaXQgIDU6CUF1dG8tTmVnb3RpYXRpb24gT3ZlciAqLwotCVBIWV9TVF9SRU1fRkxUCT0gMTw8NCwgLyogQml0ICA0OglSZW1vdGUgRmF1bHQgQ29uZGl0aW9uIE9jY3VyZWQgKi8KKwlQSFlfU1RfUkVNX0ZMVAk9IDE8PDQsIC8qIEJpdCAgNDoJUmVtb3RlIEZhdWx0IENvbmRpdGlvbiBPY2N1cnJlZCAqLwogCVBIWV9TVF9BTl9DQVAJPSAxPDwzLCAvKiBCaXQgIDM6CUF1dG8tTmVnb3RpYXRpb24gQ2FwYWJpbGl0eSAqLwogCVBIWV9TVF9MU1lOQwk9IDE8PDIsIC8qIEJpdCAgMjoJTGluayBTeW5jaHJvbml6ZWQgKi8KIAlQSFlfU1RfSkFCX0RFVAk9IDE8PDEsIC8qIEJpdCAgMToJSmFiYmVyIERldGVjdGVkICovCkBAIC0xNzIxLDggKzE3MjEsOCBAQAogCUdNX0dQU1JfTElOS19VUAkJPSAxPDwxMiwgLyogQml0IDEyOglMaW5rIFVwIFN0YXR1cyAqLwogCUdNX0dQU1JfUEFVU0UJCT0gMTw8MTEsIC8qIEJpdCAxMToJUGF1c2UgU3RhdGUgKi8KIAlHTV9HUFNSX1RYX0FDVElWRQk9IDE8PDEwLCAvKiBCaXQgMTA6CVR4IGluIFByb2dyZXNzICovCi0JR01fR1BTUl9FWENfQ09MCQk9IDE8PDksCS8qIEJpdCAgOToJRXhjZXNzaXZlIENvbGxpc2lvbnMgT2NjdXJlZCAqLwotCUdNX0dQU1JfTEFUX0NPTAkJPSAxPDw4LAkvKiBCaXQgIDg6CUxhdGUgQ29sbGlzaW9ucyBPY2N1cmVkICovCisJR01fR1BTUl9FWENfQ09MCQk9IDE8PDksCS8qIEJpdCAgOToJRXhjZXNzaXZlIENvbGxpc2lvbnMgT2NjdXJyZWQgKi8KKwlHTV9HUFNSX0xBVF9DT0wJCT0gMTw8OCwJLyogQml0ICA4OglMYXRlIENvbGxpc2lvbnMgT2NjdXJyZWQgKi8KIAogCUdNX0dQU1JfUEhZX1NUX0NICT0gMTw8NSwJLyogQml0ICA1OglQSFkgU3RhdHVzIENoYW5nZSAqLwogCUdNX0dQU1JfR0lHX1NQRUVECT0gMTw8NCwJLyogQml0ICA0OglHaWdhYml0IFNwZWVkICgxID0gMTAwMCBNYnBzKSAqLwpAQCAtMjIyNyw3ICsyMjI3LDcgQEAKIAlYTV9TVF9CQwk9IDE8PDcsCQkvKiBCaXQgIDc6CUJyb2FkY2FzdCBwYWNrZXQgKi8KIAlYTV9TVF9NQwk9IDE8PDYsCQkvKiBCaXQgIDY6CU11bHRpY2FzdCBwYWNrZXQgKi8KIAlYTV9TVF9VQwk9IDE8PDUsCQkvKiBCaXQgIDU6CVVuaWNhc3QgcGFja2V0ICovCi0JWE1fU1RfVFhfVVIJPSAxPDw0LAkJLyogQml0ICA0OglGSUZPIFVuZGVycnVuIG9jY3VyZWQgKi8KKwlYTV9TVF9UWF9VUgk9IDE8PDQsCQkvKiBCaXQgIDQ6CUZJRk8gVW5kZXJydW4gb2NjdXJyZWQgKi8KIAlYTV9TVF9DU19FUlIJPSAxPDwzLAkJLyogQml0ICAzOglDYXJyaWVyIFNlbnNlIEVycm9yICovCiAJWE1fU1RfTEFUX0NPTAk9IDE8PDIsCQkvKiBCaXQgIDI6CUxhdGUgQ29sbGlzaW9uIEVycm9yICovCiAJWE1fU1RfTVVMX0NPTAk9IDE8PDEsCQkvKiBCaXQgIDE6CU11bHRpcGxlIENvbGxpc2lvbnMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuYyBiL2RyaXZlcnMvbmV0L3NreTIuYwppbmRleCAyYTkxODY4Li5mZjhkMjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za3kyLmMKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5jCkBAIC05MzIsNyArOTMyLDcgQEAKIAlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIFRYX0dNRl9DVFJMX1QpLCBHTUZfUlNUX0NMUik7CiAJc2t5Ml93cml0ZTE2KGh3LCBTS19SRUcocG9ydCwgVFhfR01GX0NUUkxfVCksIEdNRl9PUEVSX09OKTsKIAotCS8qIE9uIGNoaXBzIHdpdGhvdXQgcmFtIGJ1ZmZlciwgcGF1c2UgaXMgY29udHJvbGVkIGJ5IE1BQyBsZXZlbCAqLworCS8qIE9uIGNoaXBzIHdpdGhvdXQgcmFtIGJ1ZmZlciwgcGF1c2UgaXMgY29udHJvbGxlZCBieSBNQUMgbGV2ZWwgKi8KIAlpZiAoIShody0+ZmxhZ3MgJiBTS1kyX0hXX1JBTV9CVUZGRVIpKSB7CiAJCS8qIFBhdXNlIHRocmVzaG9sZCBpcyBzY2FsZWQgYnkgOCBpbiBieXRlcyAqLwogCQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9GRV9QICYmCkBAIC0zMjU1LDcgKzMyNTUsNyBAQAogCiAvKiBUYWtlIGRldmljZSBkb3duIChvZmZsaW5lKS4KICAqIEVxdWl2YWxlbnQgdG8gZG9pbmcgZGV2X3N0b3AoKSBidXQgdGhpcyBkb2VzIG5vdAotICogaW5mb3JtIHVwcGVyIGxheWVycyBvZiB0aGUgdHJhbnNpc3Rpb24uCisgKiBpbmZvcm0gdXBwZXIgbGF5ZXJzIG9mIHRoZSB0cmFuc2l0aW9uLgogICovCiBzdGF0aWMgdm9pZCBza3kyX2RldGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2t5Mi5oIGIvZHJpdmVycy9uZXQvc2t5Mi5oCmluZGV4IDY4NjFiMGUuLjBjNmQxMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NreTIuaAorKysgYi9kcml2ZXJzL25ldC9za3kyLmgKQEAgLTExOTQsNyArMTE5NCw3IEBACiAKIAlQSFlfU1RfUFJFX1NVUAk9IDE8PDYsIC8qIEJpdCAgNjoJUHJlYW1ibGUgU3VwcHJlc3Npb24gKi8KIAlQSFlfU1RfQU5fT1ZFUgk9IDE8PDUsIC8qIEJpdCAgNToJQXV0by1OZWdvdGlhdGlvbiBPdmVyICovCi0JUEhZX1NUX1JFTV9GTFQJPSAxPDw0LCAvKiBCaXQgIDQ6CVJlbW90ZSBGYXVsdCBDb25kaXRpb24gT2NjdXJlZCAqLworCVBIWV9TVF9SRU1fRkxUCT0gMTw8NCwgLyogQml0ICA0OglSZW1vdGUgRmF1bHQgQ29uZGl0aW9uIE9jY3VycmVkICovCiAJUEhZX1NUX0FOX0NBUAk9IDE8PDMsIC8qIEJpdCAgMzoJQXV0by1OZWdvdGlhdGlvbiBDYXBhYmlsaXR5ICovCiAJUEhZX1NUX0xTWU5DCT0gMTw8MiwgLyogQml0ICAyOglMaW5rIFN5bmNocm9uaXplZCAqLwogCVBIWV9TVF9KQUJfREVUCT0gMTw8MSwgLyogQml0ICAxOglKYWJiZXIgRGV0ZWN0ZWQgKi8KQEAgLTE3MjUsOCArMTcyNSw4IEBACiAJR01fR1BTUl9MSU5LX1VQCQk9IDE8PDEyLCAvKiBCaXQgMTI6CUxpbmsgVXAgU3RhdHVzICovCiAJR01fR1BTUl9QQVVTRQkJPSAxPDwxMSwgLyogQml0IDExOglQYXVzZSBTdGF0ZSAqLwogCUdNX0dQU1JfVFhfQUNUSVZFCT0gMTw8MTAsIC8qIEJpdCAxMDoJVHggaW4gUHJvZ3Jlc3MgKi8KLQlHTV9HUFNSX0VYQ19DT0wJCT0gMTw8OSwJLyogQml0ICA5OglFeGNlc3NpdmUgQ29sbGlzaW9ucyBPY2N1cmVkICovCi0JR01fR1BTUl9MQVRfQ09MCQk9IDE8PDgsCS8qIEJpdCAgODoJTGF0ZSBDb2xsaXNpb25zIE9jY3VyZWQgKi8KKwlHTV9HUFNSX0VYQ19DT0wJCT0gMTw8OSwJLyogQml0ICA5OglFeGNlc3NpdmUgQ29sbGlzaW9ucyBPY2N1cnJlZCAqLworCUdNX0dQU1JfTEFUX0NPTAkJPSAxPDw4LAkvKiBCaXQgIDg6CUxhdGUgQ29sbGlzaW9ucyBPY2N1cnJlZCAqLwogCiAJR01fR1BTUl9QSFlfU1RfQ0gJPSAxPDw1LAkvKiBCaXQgIDU6CVBIWSBTdGF0dXMgQ2hhbmdlICovCiAJR01fR1BTUl9HSUdfU1BFRUQJPSAxPDw0LAkvKiBCaXQgIDQ6CUdpZ2FiaXQgU3BlZWQgKDEgPSAxMDAwIE1icHMpICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbGlwLmMgYi9kcml2ZXJzL25ldC9zbGlwLmMKaW5kZXggODZjYmI5ZS4uOGVjMWE5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2xpcC5jCisrKyBiL2RyaXZlcnMvbmV0L3NsaXAuYwpAQCAtODUzLDcgKzg1Myw5IEBACiAJLyogRG9uZS4gIFdlIGhhdmUgbGlua2VkIHRoZSBUVFkgbGluZSB0byBhIGNoYW5uZWwuICovCiAJcnRubF91bmxvY2soKTsKIAl0dHktPnJlY2VpdmVfcm9vbSA9IDY1NTM2OwkvKiBXZSBkb24ndCBmbG93IGNvbnRyb2wgKi8KLQlyZXR1cm4gc2wtPmRldi0+YmFzZV9hZGRyOworCisJLyogVFRZIGxheWVyIGV4cGVjdHMgMCBvbiBzdWNjZXNzICovCisJcmV0dXJuIDA7CiAKIGVycl9mcmVlX2J1ZnM6CiAJc2xfZnJlZV9idWZzKHNsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxeC5oIGIvZHJpdmVycy9uZXQvc21jOTF4LmgKaW5kZXggNjhkNDhhYi4uNWY1M2ZiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTF4LmgKKysrIGIvZHJpdmVycy9uZXQvc21jOTF4LmgKQEAgLTkyMSw3ICs5MjEsNyBAQAogICogSGFjayBBbGVydDogU29tZSBzZXR1cHMganVzdCBjYW4ndCB3cml0ZSA4IG9yIDE2IGJpdHMgcmVsaWFibHkgd2hlbiBub3QKICAqIGFsaWduZWQgdG8gYSAzMiBiaXQgYm91bmRhcnkuICBJIHRlbGwgeW91IHRoYXQgZG9lcyBleGlzdCEKICAqIEZvcnR1bmF0ZWx5IHRoZSBhZmZlY3RlZCByZWdpc3RlciBhY2Nlc3NlcyBjYW4gYmUgZWFzaWx5IHdvcmtlZCBhcm91bmQKLSAqIHNpbmNlIHdlIGNhbiB3cml0ZSB6ZXJvZXMgdG8gdGhlIHByZWNlZWRpbmcgMTYgYml0cyB3aXRob3V0IGFkdmVyc2UKKyAqIHNpbmNlIHdlIGNhbiB3cml0ZSB6ZXJvZXMgdG8gdGhlIHByZWNlZGluZyAxNiBiaXRzIHdpdGhvdXQgYWR2ZXJzZQogICogZWZmZWN0cyBhbmQgdXNlIGEgMzItYml0IGFjY2Vzcy4KICAqCiAgKiBFbmZvcmNlIGl0IG9uIGFueSAzMi1iaXQgY2FwYWJsZSBzZXR1cCBmb3Igbm93LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21zYzkxMXguYyBiL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmMKaW5kZXggMTU2NjI1OS4uNGI0MmVjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21zYzkxMXguYworKysgYi9kcml2ZXJzL25ldC9zbXNjOTExeC5jCkBAIC0xNjY5LDcgKzE2NjksNyBAQAogCX0KIAogCWlmIChlMmNtZCAmIEUyUF9DTURfRVBDX1RJTUVPVVRfKSB7Ci0JCVNNU0NfVFJBQ0UoRFJWLCAiRXJyb3Igb2NjdXJlZCBkdXJpbmcgZWVwcm9tIG9wZXJhdGlvbiIpOworCQlTTVNDX1RSQUNFKERSViwgIkVycm9yIG9jY3VycmVkIGR1cmluZyBlZXByb20gb3BlcmF0aW9uIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTgxOCw2ICsxODE4LDcgQEAKIAlTTVNDX1RSQUNFKFBST0JFLCAiUEhZIHdpbGwgYmUgYXV0b2RldGVjdGVkLiIpOwogCiAJc3Bpbl9sb2NrX2luaXQoJnBkYXRhLT5kZXZfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnBkYXRhLT5tYWNfbG9jayk7CiAKIAlpZiAocGRhdGEtPmlvYWRkciA9PSAwKSB7CiAJCVNNU0NfV0FSTklORyhQUk9CRSwgInBkYXRhLT5pb2FkZHI6IDB4MDAwMDAwMDAiKTsKQEAgLTE4OTUsOCArMTg5NiwxMSBAQAogCS8qIHdvcmthcm91bmQgZm9yIHBsYXRmb3JtcyB3aXRob3V0IGFuIGVlcHJvbSwgd2hlcmUgdGhlIG1hYyBhZGRyZXNzCiAJICogaXMgc3RvcmVkIGVsc2V3aGVyZSBhbmQgc2V0IGJ5IHRoZSBib290bG9hZGVyLiAgVGhpcyBzYXZlcyB0aGUKIAkgKiBtYWMgYWRkcmVzcyBiZWZvcmUgcmVzZXR0aW5nIHRoZSBkZXZpY2UgKi8KLQlpZiAocGRhdGEtPmNvbmZpZy5mbGFncyAmIFNNU0M5MTFYX1NBVkVfTUFDX0FERFJFU1MpCisJaWYgKHBkYXRhLT5jb25maWcuZmxhZ3MgJiBTTVNDOTExWF9TQVZFX01BQ19BRERSRVNTKSB7CisJCXNwaW5fbG9ja19pcnEoJnBkYXRhLT5tYWNfbG9jayk7CiAJCXNtc2M5MTF4X3JlYWRfbWFjX2FkZHJlc3MoZGV2KTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZwZGF0YS0+bWFjX2xvY2spOworCX0KIAogCS8qIFJlc2V0IHRoZSBMQU45MTF4ICovCiAJaWYgKHNtc2M5MTF4X3NvZnRfcmVzZXQocGRhdGEpKQpAQCAtMjA1OSw4ICsyMDYzLDYgQEAKIAkJU01TQ19UUkFDRShQUk9CRSwgIk5ldHdvcmsgaW50ZXJmYWNlOiBcIiVzXCIiLCBkZXYtPm5hbWUpOwogCX0KIAotCXNwaW5fbG9ja19pbml0KCZwZGF0YS0+bWFjX2xvY2spOwotCiAJcmV0dmFsID0gc21zYzkxMXhfbWlpX2luaXQocGRldiwgZGV2KTsKIAlpZiAocmV0dmFsKSB7CiAJCVNNU0NfV0FSTklORyhQUk9CRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmMgYi9kcml2ZXJzL25ldC9zbXNjOTQyMC5jCmluZGV4IGIwOWVlMWMuLjRjOTJhZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmMKKysrIGIvZHJpdmVycy9uZXQvc21zYzk0MjAuYwpAQCAtMzY0LDcgKzM2NCw3IEBACiAJfQogCiAJaWYgKGUyY21kICYgRTJQX0NNRF9FUENfVElNRU9VVF8pIHsKLQkJc21zY19pbmZvKEhXLCAiRXJyb3Igb2NjdXJlZCBkdXJpbmcgZWVwcm9tIG9wZXJhdGlvbiIpOworCQlzbXNjX2luZm8oSFcsICJFcnJvciBvY2N1cnJlZCBkdXJpbmcgZWVwcm9tIG9wZXJhdGlvbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hY19saWIuYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hY19saWIuYwppbmRleCBkNjVmYWIxLi5lMjUwOTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWNfbGliLmMKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjX2xpYi5jCkBAIC0yNiw5ICsyNiw5IEBACiAKICN1bmRlZiBEV01BQ19ETUFfREVCVUcKICNpZmRlZiBEV01BQ19ETUFfREVCVUcKLSNkZWZpbmUgREJHKGZtdCwgYXJncy4uLikgIHByaW50ayhmbXQsICMjIGFyZ3MpCisjZGVmaW5lIERXTUFDX0xJQl9EQkcoZm10LCBhcmdzLi4uKSAgcHJpbnRrKGZtdCwgIyMgYXJncykKICNlbHNlCi0jZGVmaW5lIERCRyhmbXQsIGFyZ3MuLi4pICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIERXTUFDX0xJQl9EQkcoZm10LCBhcmdzLi4uKSAgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKIC8qIENTUjEgZW5hYmxlcyB0aGUgdHJhbnNtaXQgRE1BIHRvIGNoZWNrIGZvciBuZXcgZGVzY3JpcHRvciAqLwpAQCAtMTUyLDcgKzE1Miw3IEBACiAJLyogcmVhZCB0aGUgc3RhdHVzIHJlZ2lzdGVyIChDU1I1KSAqLwogCXUzMiBpbnRyX3N0YXR1cyA9IHJlYWRsKGlvYWRkciArIERNQV9TVEFUVVMpOwogCi0JREJHKElORk8sICIlczogW0NTUjU6IDB4JTA4eF1cbiIsIF9fZnVuY19fLCBpbnRyX3N0YXR1cyk7CisJRFdNQUNfTElCX0RCRyhLRVJOX0lORk8gIiVzOiBbQ1NSNTogMHglMDh4XVxuIiwgX19mdW5jX18sIGludHJfc3RhdHVzKTsKICNpZmRlZiBEV01BQ19ETUFfREVCVUcKIAkvKiBJdCBkaXNwbGF5cyB0aGUgRE1BIHByb2Nlc3Mgc3RhdGVzIChDU1I1IHJlZ2lzdGVyKSAqLwogCXNob3dfdHhfcHJvY2Vzc19zdGF0ZShpbnRyX3N0YXR1cyk7CkBAIC0xNjAsNDMgKzE2MCw0MyBAQAogI2VuZGlmCiAJLyogQUJOT1JNQUwgaW50ZXJydXB0cyAqLwogCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfQUlTKSkgewotCQlEQkcoSU5GTywgIkNTUjVbMTVdIERNQSBBQk5PUk1BTCBJUlE6ICIpOworCQlEV01BQ19MSUJfREJHKEtFUk5fSU5GTyAiQ1NSNVsxNV0gRE1BIEFCTk9STUFMIElSUTogIik7CiAJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfVU5GKSkgewotCQkJREJHKElORk8sICJ0cmFuc21pdCB1bmRlcmZsb3dcbiIpOworCQkJRFdNQUNfTElCX0RCRyhLRVJOX0lORk8gInRyYW5zbWl0IHVuZGVyZmxvd1xuIik7CiAJCQlyZXQgPSB0eF9oYXJkX2Vycm9yX2J1bXBfdGM7CiAJCQl4LT50eF91bmRlZmxvd19pcnErKzsKIAkJfQogCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1RKVCkpIHsKLQkJCURCRyhJTkZPLCAidHJhbnNtaXQgamFiYmVyXG4iKTsKKwkJCURXTUFDX0xJQl9EQkcoS0VSTl9JTkZPICJ0cmFuc21pdCBqYWJiZXJcbiIpOwogCQkJeC0+dHhfamFiYmVyX2lycSsrOwogCQl9CiAJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfT1ZGKSkgewotCQkJREJHKElORk8sICJyZWN2IG92ZXJmbG93XG4iKTsKKwkJCURXTUFDX0xJQl9EQkcoS0VSTl9JTkZPICJyZWN2IG92ZXJmbG93XG4iKTsKIAkJCXgtPnJ4X292ZXJmbG93X2lycSsrOwogCQl9CiAJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfUlUpKSB7Ci0JCQlEQkcoSU5GTywgInJlY2VpdmUgYnVmZmVyIHVuYXZhaWxhYmxlXG4iKTsKKwkJCURXTUFDX0xJQl9EQkcoS0VSTl9JTkZPICJyZWNlaXZlIGJ1ZmZlciB1bmF2YWlsYWJsZVxuIik7CiAJCQl4LT5yeF9idWZfdW5hdl9pcnErKzsKIAkJfQogCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1JQUykpIHsKLQkJCURCRyhJTkZPLCAicmVjZWl2ZSBwcm9jZXNzIHN0b3BwZWRcbiIpOworCQkJRFdNQUNfTElCX0RCRyhLRVJOX0lORk8gInJlY2VpdmUgcHJvY2VzcyBzdG9wcGVkXG4iKTsKIAkJCXgtPnJ4X3Byb2Nlc3Nfc3RvcHBlZF9pcnErKzsKIAkJfQogCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1JXVCkpIHsKLQkJCURCRyhJTkZPLCAicmVjZWl2ZSB3YXRjaGRvZ1xuIik7CisJCQlEV01BQ19MSUJfREJHKEtFUk5fSU5GTyAicmVjZWl2ZSB3YXRjaGRvZ1xuIik7CiAJCQl4LT5yeF93YXRjaGRvZ19pcnErKzsKIAkJfQogCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX0VUSSkpIHsKLQkJCURCRyhJTkZPLCAidHJhbnNtaXQgZWFybHkgaW50ZXJydXB0XG4iKTsKKwkJCURXTUFDX0xJQl9EQkcoS0VSTl9JTkZPICJ0cmFuc21pdCBlYXJseSBpbnRlcnJ1cHRcbiIpOwogCQkJeC0+dHhfZWFybHlfaXJxKys7CiAJCX0KIAkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19UUFMpKSB7Ci0JCQlEQkcoSU5GTywgInRyYW5zbWl0IHByb2Nlc3Mgc3RvcHBlZFxuIik7CisJCQlEV01BQ19MSUJfREJHKEtFUk5fSU5GTyAidHJhbnNtaXQgcHJvY2VzcyBzdG9wcGVkXG4iKTsKIAkJCXgtPnR4X3Byb2Nlc3Nfc3RvcHBlZF9pcnErKzsKIAkJCXJldCA9IHR4X2hhcmRfZXJyb3I7CiAJCX0KIAkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19GQkkpKSB7Ci0JCQlEQkcoSU5GTywgImZhdGFsIGJ1cyBlcnJvclxuIik7CisJCQlEV01BQ19MSUJfREJHKEtFUk5fSU5GTyAiZmF0YWwgYnVzIGVycm9yXG4iKTsKIAkJCXgtPmZhdGFsX2J1c19lcnJvcl9pcnErKzsKIAkJCXJldCA9IHR4X2hhcmRfZXJyb3I7CiAJCX0KQEAgLTIxNSw3ICsyMTUsNyBAQAogCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgYnkgd3JpdGluZyBhIGxvZ2ljIDEgdG8gdGhlIENTUjVbMTUtMF0gKi8KIAl3cml0ZWwoKGludHJfc3RhdHVzICYgMHgxZmZmZiksIGlvYWRkciArIERNQV9TVEFUVVMpOwogCi0JREJHKElORk8sICJcblxuIik7CisJRFdNQUNfTElCX0RCRyhLRVJOX0lORk8gIlxuXG4iKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvbm9ybV9kZXNjLmMgYi9kcml2ZXJzL25ldC9zdG1tYWMvbm9ybV9kZXNjLmMKaW5kZXggY2QwY2M3Ni4uMDI5YzJhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL25vcm1fZGVzYy5jCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9ub3JtX2Rlc2MuYwpAQCAtNjcsNyArNjcsNyBAQAogCiAvKiBUaGlzIGZ1bmN0aW9uIHZlcmlmaWVzIGlmIGVhY2ggaW5jb21pbmcgZnJhbWUgaGFzIHNvbWUgZXJyb3JzCiAgKiBhbmQsIGlmIHJlcXVpcmVkLCB1cGRhdGVzIHRoZSBtdWx0aWNhc3Qgc3RhdGlzdGljcy4KLSAqIEluIGNhc2Ugb2Ygc3VjY2VzcywgaXQgcmV0dXJucyBjc3VtX25vbmUgYmVjYXN1ZSB0aGUgZGV2aWNlCisgKiBJbiBjYXNlIG9mIHN1Y2Nlc3MsIGl0IHJldHVybnMgY3N1bV9ub25lIGJlY2F1c2UgdGhlIGRldmljZQogICogaXMgbm90IGFibGUgdG8gY29tcHV0ZSB0aGUgY3N1bSBpbiBIVy4gKi8KIHN0YXRpYyBpbnQgbmRlc2NfZ2V0X3J4X3N0YXR1cyh2b2lkICpkYXRhLCBzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LAogCQkJICAgICAgIHN0cnVjdCBkbWFfZGVzYyAqcCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKaW5kZXggMGU1ZjAzMS4uY2M5NzNmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKQEAgLTc1MCw3ICs3NTAsNiBAQAogCQkJcHJpdi0+aHctPmRtYS0+ZG1hX21vZGUocHJpdi0+aW9hZGRyLCB0YywgU0ZfRE1BX01PREUpOwogCQkJcHJpdi0+eHN0YXRzLnRocmVzaG9sZCA9IHRjOwogCQl9Ci0JCXN0bW1hY190eF9lcnIocHJpdik7CiAJfSBlbHNlIGlmICh1bmxpa2VseShzdGF0dXMgPT0gdHhfaGFyZF9lcnJvcikpCiAJCXN0bW1hY190eF9lcnIocHJpdik7CiB9CkBAIC03ODEsMjEgKzc4MCw2IEBACiAKIAlzdG1tYWNfdmVyaWZ5X2FyZ3MoKTsKIAotCXJldCA9IHN0bW1hY19pbml0X3BoeShkZXYpOwotCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCXByX2VycigiJXM6IENhbm5vdCBhdHRhY2ggdG8gUEhZIChlcnJvcjogJWQpXG4iLCBfX2Z1bmNfXywgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBSZXF1ZXN0IHRoZSBJUlEgbGluZXMgKi8KLQlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgc3RtbWFjX2ludGVycnVwdCwKLQkJCSAgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KTsKLQlpZiAodW5saWtlbHkocmV0IDwgMCkpIHsKLQkJcHJfZXJyKCIlczogRVJST1I6IGFsbG9jYXRpbmcgdGhlIElSUSAlZCAoZXJyb3I6ICVkKVxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBkZXYtPmlycSwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KICNpZmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCiAJcHJpdi0+dG0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RtbWFjX3RpbWVyICopLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkocHJpdi0+dG0gPT0gTlVMTCkpIHsKQEAgLTgxNCw2ICs3OTgsMTEgQEAKIAl9IGVsc2UKIAkJcHJpdi0+dG0tPmVuYWJsZSA9IDE7CiAjZW5kaWYKKwlyZXQgPSBzdG1tYWNfaW5pdF9waHkoZGV2KTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlwcl9lcnIoIiVzOiBDYW5ub3QgYXR0YWNoIHRvIFBIWSAoZXJyb3I6ICVkKVxuIiwgX19mdW5jX18sIHJldCk7CisJCWdvdG8gb3Blbl9lcnJvcjsKKwl9CiAKIAkvKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgdGhlIFRYL1JYIGRlc2NyaXB0b3JzIGNoYWlucy4gKi8KIAlwcml2LT5kbWFfdHhfc2l6ZSA9IFNUTU1BQ19BTElHTihkbWFfdHhzaXplKTsKQEAgLTgyMiwxMiArODExLDExIEBACiAJaW5pdF9kbWFfZGVzY19yaW5ncyhkZXYpOwogCiAJLyogRE1BIGluaXRpYWxpemF0aW9uIGFuZCBTVyByZXNldCAqLwotCWlmICh1bmxpa2VseShwcml2LT5ody0+ZG1hLT5pbml0KHByaXYtPmlvYWRkciwgcHJpdi0+cGxhdC0+cGJsLAotCQkJCQkgcHJpdi0+ZG1hX3R4X3BoeSwKLQkJCQkJIHByaXYtPmRtYV9yeF9waHkpIDwgMCkpIHsKLQorCXJldCA9IHByaXYtPmh3LT5kbWEtPmluaXQocHJpdi0+aW9hZGRyLCBwcml2LT5wbGF0LT5wYmwsCisJCQkJICBwcml2LT5kbWFfdHhfcGh5LCBwcml2LT5kbWFfcnhfcGh5KTsKKwlpZiAocmV0IDwgMCkgewogCQlwcl9lcnIoIiVzOiBETUEgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtMTsKKwkJZ290byBvcGVuX2Vycm9yOwogCX0KIAogCS8qIENvcHkgdGhlIE1BQyBhZGRyIGludG8gdGhlIEhXICAqLwpAQCAtODQ4LDYgKzgzNiwxNSBAQAogCXdyaXRlbCgweGZmZmZmZmZmLCBwcml2LT5pb2FkZHIgKyBNTUNfSElHSF9JTlRSX01BU0spOwogCXdyaXRlbCgweGZmZmZmZmZmLCBwcml2LT5pb2FkZHIgKyBNTUNfTE9XX0lOVFJfTUFTSyk7CiAKKwkvKiBSZXF1ZXN0IHRoZSBJUlEgbGluZXMgKi8KKwlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgc3RtbWFjX2ludGVycnVwdCwKKwkJCSBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOworCWlmICh1bmxpa2VseShyZXQgPCAwKSkgeworCQlwcl9lcnIoIiVzOiBFUlJPUjogYWxsb2NhdGluZyB0aGUgSVJRICVkIChlcnJvcjogJWQpXG4iLAorCQkgICAgICAgX19mdW5jX18sIGRldi0+aXJxLCByZXQpOworCQlnb3RvIG9wZW5fZXJyb3I7CisJfQorCiAJLyogRW5hYmxlIHRoZSBNQUMgUngvVHggKi8KIAlzdG1tYWNfZW5hYmxlX21hYyhwcml2LT5pb2FkZHIpOwogCkBAIC04NzgsNyArODc1LDE3IEBACiAJbmFwaV9lbmFibGUoJnByaXYtPm5hcGkpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnJ4X3JlY3ljbGUpOwogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisKIAlyZXR1cm4gMDsKKworb3Blbl9lcnJvcjoKKyNpZmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCisJa2ZyZWUocHJpdi0+dG0pOworI2VuZGlmCisJaWYgKHByaXYtPnBoeWRldikKKwkJcGh5X2Rpc2Nvbm5lY3QocHJpdi0+cGh5ZGV2KTsKKworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuYm1hYy5oIGIvZHJpdmVycy9uZXQvc3VuYm1hYy5oCmluZGV4IDhkYjg4OTQuLjQ5NDNlOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmJtYWMuaAorKysgYi9kcml2ZXJzL25ldC9zdW5ibWFjLmgKQEAgLTE4NSw3ICsxODUsNyBAQAogI2RlZmluZSBCSUdNQUNfUlhDRkdfRU5BQkxFICAgIDB4MDAwMDAwMDEgLyogRW5hYmxlIHRoZSByZWNlaXZlciAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBCSUdNQUNfUlhDRkdfRklGTyAgICAgIDB4MDAwMDAwMGUgLyogRGVmYXVsdCByeCBmdGhyZXNoLi4uICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBCSUdNQUNfUlhDRkdfUFNUUklQICAgIDB4MDAwMDAwMjAgLyogUGFkIGJ5dGUgc3RyaXAgZW5hYmxlICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBCSUdNQUNfUlhDRkdfUE1JU0MgICAgIDB4MDAwMDAwNDAgLyogRW5hYmxlIHByb21pc2NvdXMgbW9kZSAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBCSUdNQUNfUlhDRkdfUE1JU0MgICAgIDB4MDAwMDAwNDAgLyogRW5hYmxlIHByb21pc2N1b3VzIG1vZGUgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgQklHTUFDX1JYQ0ZHX0RFUlIgICAgICAweDAwMDAwMDgwIC8qIERpc2FibGUgZXJyb3IgY2hlY2tpbmcgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgQklHTUFDX1JYQ0ZHX0RDUkNTICAgICAweDAwMDAwMTAwIC8qIERpc2FibGUgQ1JDIHN0cmlwcGluZyAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgQklHTUFDX1JYQ0ZHX01FICAgICAgICAweDAwMDAwMjAwIC8qIFJlY2VpdmUgcGFja2V0cyBhZGRyZXNzZWQgdG8gbWUgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmdlbS5jIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmMKaW5kZXggYzFhMzQ0OC4uZDNiZTczNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuZ2VtLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmMKQEAgLTExNTAsNyArMTE1MCw3IEBACiAJdmFsICY9IH4oUENTX0NGR19FTkFCTEUgfCBQQ1NfQ0ZHX1RPKTsKIAl3cml0ZWwodmFsLCBncC0+cmVncyArIFBDU19DRkcpOwogCi0JLyogQWR2ZXJ0aXNlIGFsbCBjYXBhYmlsaXRpZXMgZXhjZXB0IGFzc3ltZXRyaWMKKwkvKiBBZHZlcnRpc2UgYWxsIGNhcGFiaWxpdGllcyBleGNlcHQgYXN5bW1ldHJpYwogCSAqIHBhdXNlLgogCSAqLwogCXZhbCA9IHJlYWRsKGdwLT5yZWdzICsgUENTX01JSUFEVik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5obWUuYyBiL2RyaXZlcnMvbmV0L3N1bmhtZS5jCmluZGV4IGViNGY1OWYuLmJmZjJmNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmhtZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmhtZS5jCkBAIC0zMjM3LDE1ICszMjM3LDE4IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TQlVTCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBobWVfc2J1c19tYXRjaFtdOwogc3RhdGljIGludCBfX2RldmluaXQgaG1lX3NidXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3ApCiB7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CiAJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IG9wLT5kZXYub2Zfbm9kZTsKIAljb25zdCBjaGFyICptb2RlbCA9IG9mX2dldF9wcm9wZXJ0eShkcCwgIm1vZGVsIiwgTlVMTCk7CiAJaW50IGlzX3FmZTsKIAotCWlmICghb3AtPmRldi5vZl9tYXRjaCkKKwltYXRjaCA9IG9mX21hdGNoX2RldmljZShobWVfc2J1c19tYXRjaCwgJm9wLT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwotCWlzX3FmZSA9IChvcC0+ZGV2Lm9mX21hdGNoLT5kYXRhICE9IE5VTEwpOworCWlzX3FmZSA9IChtYXRjaC0+ZGF0YSAhPSBOVUxMKTsKIAogCWlmICghaXNfcWZlICYmIG1vZGVsICYmICFzdHJjbXAobW9kZWwsICJTVU5XLHNidXMtcWZlIikpCiAJCWlzX3FmZSA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5obWUuaCBiL2RyaXZlcnMvbmV0L3N1bmhtZS5oCmluZGV4IDc1NmI1YmYuLjY0ZjI3ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmhtZS5oCisrKyBiL2RyaXZlcnMvbmV0L3N1bmhtZS5oCkBAIC0yMjMsNyArMjIzLDcgQEAKIC8qIEJpZ01hYyByZWNlaXZlIGNvbmZpZyByZWdpc3Rlci4gKi8KICNkZWZpbmUgQklHTUFDX1JYQ0ZHX0VOQUJMRSAgIDB4MDAwMDAwMDEgLyogRW5hYmxlIHRoZSByZWNlaXZlciAgICAgICAgICAgICAqLwogI2RlZmluZSBCSUdNQUNfUlhDRkdfUFNUUklQICAgMHgwMDAwMDAyMCAvKiBQYWQgYnl0ZSBzdHJpcCBlbmFibGUgICAgICAgICAgICovCi0jZGVmaW5lIEJJR01BQ19SWENGR19QTUlTQyAgICAweDAwMDAwMDQwIC8qIEVuYWJsZSBwcm9taXNjb3VzIG1vZGUgICAgICAgICAgKi8KKyNkZWZpbmUgQklHTUFDX1JYQ0ZHX1BNSVNDICAgIDB4MDAwMDAwNDAgLyogRW5hYmxlIHByb21pc2N1b3VzIG1vZGUgICAgICAgICAgKi8KICNkZWZpbmUgQklHTUFDX1JYQ0ZHX0RFUlIgICAgIDB4MDAwMDAwODAgLyogRGlzYWJsZSBlcnJvciBjaGVja2luZyAgICAgICAgICAqLwogI2RlZmluZSBCSUdNQUNfUlhDRkdfRENSQ1MgICAgMHgwMDAwMDEwMCAvKiBEaXNhYmxlIENSQyBzdHJpcHBpbmcgICAgICAgICAgICovCiAjZGVmaW5lIEJJR01BQ19SWENGR19SRUpNRSAgICAweDAwMDAwMjAwIC8qIFJlamVjdCBwYWNrZXRzIGFkZHJlc3NlZCB0byBtZSAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RjMzU4MTUuYyBiL2RyaXZlcnMvbmV0L3RjMzU4MTUuYwppbmRleCBiNmVlYzhjLi43Y2E1MWNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90YzM1ODE1LmMKKysrIGIvZHJpdmVycy9uZXQvdGMzNTgxNS5jCkBAIC0xMTksMTMgKzExOSwxMyBAQAogLyoKICAqIEJpdCBhc3NpZ25tZW50cwogICovCi0vKiBETUFfQ3RsIGJpdCBhc2lnbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBETUFfQ3RsIGJpdCBhc3NpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogI2RlZmluZSBETUFfUnhBbGlnbgkgICAgICAgMHgwMGMwMDAwMCAvKiAxOlJlY2VwdGlvbiBBbGlnbm1lbnQJICAgICAqLwogI2RlZmluZSBETUFfUnhBbGlnbl8xCSAgICAgICAweDAwNDAwMDAwCiAjZGVmaW5lIERNQV9SeEFsaWduXzIJICAgICAgIDB4MDA4MDAwMDAKICNkZWZpbmUgRE1BX1J4QWxpZ25fMwkgICAgICAgMHgwMGMwMDAwMAogI2RlZmluZSBETUFfTTY2RW5TdGF0CSAgICAgICAweDAwMDgwMDAwIC8qIDE6NjZNSHogRW5hYmxlIFN0YXRlCSAgICAgKi8KLSNkZWZpbmUgRE1BX0ludE1hc2sJICAgICAgIDB4MDAwNDAwMDAgLyogMTpJbnRlcnVwdCBtYXNrCQkgICAgICovCisjZGVmaW5lIERNQV9JbnRNYXNrCSAgICAgICAweDAwMDQwMDAwIC8qIDE6SW50ZXJydXB0IG1hc2sJCSAgICAgKi8KICNkZWZpbmUgRE1BX1NXSW50UmVxCSAgICAgICAweDAwMDIwMDAwIC8qIDE6U29mdHdhcmUgSW50ZXJydXB0IHJlcXVlc3QgICAgKi8KICNkZWZpbmUgRE1BX1R4V2FrZVVwCSAgICAgICAweDAwMDEwMDAwIC8qIDE6VHJhbnNtaXQgV2FrZSBVcAkJICAgICAqLwogI2RlZmluZSBETUFfUnhCaWdFCSAgICAgICAweDAwMDA4MDAwIC8qIDE6UmVjZWl2ZSBCaWcgRW5kaWFuCSAgICAgKi8KQEAgLTEzNCwxMSArMTM0LDExIEBACiAjZGVmaW5lIERNQV9Qb3dyTWdtbnQJICAgICAgIDB4MDAwMDEwMDAgLyogMTpQb3dlciBNYW5hZ2VtZW50CQkgICAgICovCiAjZGVmaW5lIERNQV9EbUJ1cnN0X01hc2sgICAgICAgMHgwMDAwMDFmYyAvKiBETUEgQnVyc3Qgc2l6ZQkJICAgICAqLwogCi0vKiBSeEZyYWdTaXplIGJpdCBhc2lnbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBSeEZyYWdTaXplIGJpdCBhc3NpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogI2RlZmluZSBSeEZyYWdfRW5QYWNrCSAgICAgICAweDAwMDA4MDAwIC8qIDE6RW5hYmxlIFBhY2tpbmcJCSAgICAgKi8KICNkZWZpbmUgUnhGcmFnX01pbkZyYWdNYXNrICAgICAweDAwMDAwZmZjIC8qIE1pbmltdW0gRnJhZ21lbnQJCSAgICAgKi8KIAotLyogTUFDX0N0bCBiaXQgYXNpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogTUFDX0N0bCBiaXQgYXNzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICNkZWZpbmUgTUFDX0xpbmsxMAkgICAgICAgMHgwMDAwODAwMCAvKiAxOkxpbmsgU3RhdHVzIDEwTWJpdHMJICAgICAqLwogI2RlZmluZSBNQUNfRW5NaXNzUm9sbAkgICAgICAgMHgwMDAwMjAwMCAvKiAxOkVuYWJsZSBNaXNzZWQgUm9sbAkgICAgICovCiAjZGVmaW5lIE1BQ19NaXNzUm9sbAkgICAgICAgMHgwMDAwMDQwMCAvKiAxOk1pc3NlZCBSb2xsCQkgICAgICovCkBAIC0xNTIsNyArMTUyLDcgQEAKICNkZWZpbmUgTUFDX0hhbHRJbW0JICAgICAgIDB4MDAwMDAwMDIgLyogMTpIYWx0IEltbWVkaWF0ZQkJICAgICAqLwogI2RlZmluZSBNQUNfSGFsdFJlcQkgICAgICAgMHgwMDAwMDAwMSAvKiAxOkhhbHQgcmVxdWVzdAkJICAgICAqLwogCi0vKiBQUk9NX0N0bCBiaXQgYXNpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBQUk9NX0N0bCBiaXQgYXNzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogI2RlZmluZSBQUk9NX0J1c3kJICAgICAgIDB4MDAwMDgwMDAgLyogMTpCdXN5IChTdGFydCBPcGVyYXRpb24pCSAgICAgKi8KICNkZWZpbmUgUFJPTV9SZWFkCSAgICAgICAweDAwMDA0MDAwIC8qMTA6UmVhZCBvcGVyYXRpb24JCSAgICAgKi8KICNkZWZpbmUgUFJPTV9Xcml0ZQkgICAgICAgMHgwMDAwMjAwMCAvKjAxOldyaXRlIG9wZXJhdGlvbgkJICAgICAqLwpAQCAtMTYyLDcgKzE2Miw3IEBACiAjZGVmaW5lIFBST01fQWRkcl9FbmEJICAgICAgIDB4MDAwMDAwMzAgLyoxMXh4eHg6UFJPTSBXcml0ZSBlbmFibGUJICAgICAqLwogCQkJCQkgIC8qMDB4eHh4OgkgICAgICBkaXNhYmxlCSAgICAgKi8KIAotLyogQ0FNX0N0bCBiaXQgYXNpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogQ0FNX0N0bCBiaXQgYXNzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICNkZWZpbmUgQ0FNX0NvbXBFbgkgICAgICAgMHgwMDAwMDAxMCAvKiAxOkNBTSBDb21wYXJlIEVuYWJsZQkgICAgICovCiAjZGVmaW5lIENBTV9OZWdDQU0JICAgICAgIDB4MDAwMDAwMDggLyogMTpSZWplY3QgcGFja2V0cyBDQU0gcmVjb2duaXplcywqLwogCQkJCQkgIC8qCQkJYWNjZXB0IG90aGVyICovCkBAIC0xNzAsNyArMTcwLDcgQEAKICNkZWZpbmUgQ0FNX0dyb3VwQWNjCSAgICAgICAweDAwMDAwMDAyIC8qIDE6TXVsdGljYXN0IGFzc2VwdAkJICAgICAqLwogI2RlZmluZSBDQU1fU3RhdGlvbkFjYwkgICAgICAgMHgwMDAwMDAwMSAvKiAxOnVuaWNhc3QgYWNjZXB0CQkgICAgICovCiAKLS8qIENBTV9FbmEgYml0IGFzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIENBTV9FbmEgYml0IGFzc2lnbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAjZGVmaW5lIENBTV9FTlRSWV9NQVgJCSAgICAgICAyMSAgIC8qIENBTSBEYXRhIGVudHJ5IG1heCBjb3VudAkgICAgICovCiAjZGVmaW5lIENBTV9FbmFfTWFzayAoKDE8PENBTV9FTlRSWV9NQVgpLTEpIC8qIENBTSBFbmFibGUgYml0cyAoTWF4IDIxYml0cykgICovCiAjZGVmaW5lIENBTV9FbmFfQml0KGluZGV4KQkoMSA8PCAoaW5kZXgpKQpAQCAtMTc4LDcgKzE3OCw3IEBACiAjZGVmaW5lIENBTV9FTlRSWV9TT1VSQ0UJMQogI2RlZmluZSBDQU1fRU5UUllfTUFDQ1RMCTIwCiAKLS8qIFR4X0N0bCBiaXQgYXNpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFR4X0N0bCBiaXQgYXNzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAjZGVmaW5lIFR4X0VuCQkgICAgICAgMHgwMDAwMDAwMSAvKiAxOlRyYW5zbWl0IGVuYWJsZQkJICAgICAqLwogI2RlZmluZSBUeF9UeEhhbHQJICAgICAgIDB4MDAwMDAwMDIgLyogMTpUcmFuc21pdCBIYWx0IFJlcXVlc3QJICAgICAqLwogI2RlZmluZSBUeF9Ob1BhZAkgICAgICAgMHgwMDAwMDAwNCAvKiAxOlN1cHByZXNzIFBhZGRpbmcJCSAgICAgKi8KQEAgLTE5Miw3ICsxOTIsNyBAQAogI2RlZmluZSBUeF9FblR4UGFyCSAgICAgICAweDAwMDAyMDAwIC8qIDE6RW5hYmxlIFRyYW5zbWl0IFBhcml0eQkgICAgICovCiAjZGVmaW5lIFR4X0VuQ29tcAkgICAgICAgMHgwMDAwNDAwMCAvKiAxOkVuYWJsZSBDb21wbGV0aW9uCSAgICAgKi8KIAotLyogVHhfU3RhdCBiaXQgYXNpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogVHhfU3RhdCBiaXQgYXNzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICNkZWZpbmUgVHhfVHhDb2xsX01BU0sJICAgICAgIDB4MDAwMDAwMEYgLyogVHggQ29sbGlzaW9uIENvdW50CQkgICAgICovCiAjZGVmaW5lIFR4X0V4Q29sbAkgICAgICAgMHgwMDAwMDAxMCAvKiBFeGNlc3NpdmUgQ29sbGlzaW9uCSAgICAgKi8KICNkZWZpbmUgVHhfVFhEZWZlcgkgICAgICAgMHgwMDAwMDAyMCAvKiBUcmFuc21pdCBEZWZlcmVkCQkgICAgICovCkBAIC0yMDgsNyArMjA4LDcgQEAKICNkZWZpbmUgVHhfSGFsdGVkCSAgICAgICAweDAwMDA4MDAwIC8qIFR4IEhhbHRlZAkJCSAgICAgKi8KICNkZWZpbmUgVHhfU1FFcnIJICAgICAgIDB4MDAwMTAwMDAgLyogU2lnbmFsIFF1YWxpdHkgRXJyb3IoU1FFKQkgICAgICovCiAKLS8qIFJ4X0N0bCBiaXQgYXNpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFJ4X0N0bCBiaXQgYXNzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAjZGVmaW5lIFJ4X0VuR29vZAkgICAgICAgMHgwMDAwNDAwMCAvKiAxOkVuYWJsZSBHb29kCQkgICAgICovCiAjZGVmaW5lIFJ4X0VuUnhQYXIJICAgICAgIDB4MDAwMDIwMDAgLyogMTpFbmFibGUgUmVjZWl2ZSBQYXJpdHkJICAgICAqLwogI2RlZmluZSBSeF9FbkxvbmdFcnIJICAgICAgIDB4MDAwMDA4MDAgLyogMTpFbmFibGUgTG9uZyBFcnJvcgkgICAgICovCkBAIC0yMjIsNyArMjIyLDcgQEAKICNkZWZpbmUgUnhfUnhIYWx0CSAgICAgICAweDAwMDAwMDAyIC8qIDE6UmVjZWl2ZSBIYWx0IFJlcXVlc3QJICAgICAqLwogI2RlZmluZSBSeF9SeEVuCQkgICAgICAgMHgwMDAwMDAwMSAvKiAxOlJlY2VpdmUgSW50cnJ1cHQgRW5hYmxlCSAgICAgKi8KIAotLyogUnhfU3RhdCBiaXQgYXNpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogUnhfU3RhdCBiaXQgYXNzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICNkZWZpbmUgUnhfSGFsdGVkCSAgICAgICAweDAwMDA4MDAwIC8qIFJ4IEhhbHRlZAkJCSAgICAgKi8KICNkZWZpbmUgUnhfR29vZAkJICAgICAgIDB4MDAwMDQwMDAgLyogUnggR29vZAkJCSAgICAgKi8KICNkZWZpbmUgUnhfUnhQYXIJICAgICAgIDB4MDAwMDIwMDAgLyogUnggUGFyaXR5IEVycm9yCQkgICAgICovCkBAIC0yMzgsNyArMjM4LDcgQEAKIAogI2RlZmluZSBSeF9TdGF0X01hc2sJICAgICAgIDB4MDAwMEZGRjAgLyogUnggQWxsIFN0YXR1cyBNYXNrCQkgICAgICovCiAKLS8qIEludF9FbiBiaXQgYXNpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIEludF9FbiBiaXQgYXNzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAjZGVmaW5lIEludF9OUkFidEVuCSAgICAgICAweDAwMDAwODAwIC8qIDE6Tm9uLXJlY292ZXJhYmxlIEFib3J0IEVuYWJsZSAgKi8KICNkZWZpbmUgSW50X1R4Q3RsQ21wRW4JICAgICAgIDB4MDAwMDA0MDAgLyogMTpUcmFuc21pdCBDdGwgQ29tcGxldGUgRW5hYmxlICAqLwogI2RlZmluZSBJbnRfRG1QYXJFcnJFbgkgICAgICAgMHgwMDAwMDIwMCAvKiAxOkRNQSBQYXJpdHkgRXJyb3IgRW5hYmxlCSAgICAgKi8KQEAgLTI1Myw3ICsyNTMsNyBAQAogI2RlZmluZSBJbnRfRkRBRXhFbgkgICAgICAgMHgwMDAwMDAwMSAvKiAxOkZyZWUgRGVzY3JpcHRvciBBcmVhCSAgICAgKi8KIAkJCQkJICAvKgkJICAgRXhoYXVzdGVkIEVuYWJsZSAgKi8KIAotLyogSW50X1NyYyBiaXQgYXNpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogSW50X1NyYyBiaXQgYXNzaWduIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICNkZWZpbmUgSW50X05SYWJ0CSAgICAgICAweDAwMDA0MDAwIC8qIDE6Tm9uIFJlY292ZXJhYmxlIGVycm9yCSAgICAgKi8KICNkZWZpbmUgSW50X0RtUGFyRXJyU3RhdCAgICAgICAweDAwMDAyMDAwIC8qIDE6RE1BIFBhcml0eSBFcnJvciAmIENsZWFyCSAgICAgKi8KICNkZWZpbmUgSW50X0JMRXgJICAgICAgIDB4MDAwMDEwMDAgLyogMTpCdWZmZXIgTGlzdCBFbXB0eSAmIENsZWFyICAgICAqLwpAQCAtMjcwLDggKzI3MCw4IEBACiAjZGVmaW5lIEludF9JbnRNYWNSeAkgICAgICAgMHgwMDAwMDAwMiAvKiAxOlJ4IGNvbnRyb2xsZXIgJiBDbGVhcgkgICAgICovCiAjZGVmaW5lIEludF9JbnRNYWNUeAkgICAgICAgMHgwMDAwMDAwMSAvKiAxOlR4IGNvbnRyb2xsZXIgJiBDbGVhcgkgICAgICovCiAKLS8qIE1EX0NBIGJpdCBhc2lnbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNkZWZpbmUgTURfQ0FfUHJlU3VwCSAgICAgICAweDAwMDAxMDAwIC8qIDE6UHJlYW1ibGUgU3VwcmVzcwkJICAgICAqLworLyogTURfQ0EgYml0IGFzc2lnbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgTURfQ0FfUHJlU3VwCSAgICAgICAweDAwMDAxMDAwIC8qIDE6UHJlYW1ibGUgU3VwcHJlc3MJCSAgICAgKi8KICNkZWZpbmUgTURfQ0FfQnVzeQkgICAgICAgMHgwMDAwMDgwMCAvKiAxOkJ1c3kgKFN0YXJ0IE9wZXJhdGlvbikJICAgICAqLwogI2RlZmluZSBNRF9DQV9XcgkgICAgICAgMHgwMDAwMDQwMCAvKiAxOldyaXRlIDA6UmVhZAkJICAgICAqLwogCkBAIC0yOTYsNyArMjk2LDcgQEAKIAogI2RlZmluZSBGRF9BTElHTgkxNgogCi0vKiBGcmFtZSBEZXNjcmlwdGVyIGJpdCBhc2lnbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBGcmFtZSBEZXNjcmlwdGVyIGJpdCBhc3NpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogI2RlZmluZSBGRF9GRExlbmd0aF9NQVNLICAgICAgIDB4MDAwMEZGRkYgLyogTGVuZ3RoIE1BU0sJCSAgICAgKi8KICNkZWZpbmUgRkRfQkRDbnRfTUFTSwkgICAgICAgMHgwMDFGMDAwMCAvKiBCRCBjb3VudCBNQVNLIGluIEZECSAgICAgKi8KICNkZWZpbmUgRkRfRnJtT3B0X01BU0sJICAgICAgIDB4N0MwMDAwMDAgLyogRnJhbWUgb3B0aW9uIE1BU0sJCSAgICAgKi8KQEAgLTMwOSw4ICszMDksOCBAQAogI2RlZmluZSBGRF9OZXh0X0VPTAkgICAgICAgMHgwMDAwMDAwMSAvKiBGRCBFT0wgaW5kaWNhdG9yCQkgICAgICovCiAjZGVmaW5lIEZEX0JEQ250X1NISUZUCSAgICAgICAxNgogCi0vKiBCdWZmZXIgRGVzY3JpcHRlciBiaXQgYXNpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0jZGVmaW5lIEJEX0J1ZmZMZW5ndGhfTUFTSyAgICAgMHgwMDAwRkZGRiAvKiBSZWNpZXZlIERhdGEgU2l6ZQkJICAgICAqLworLyogQnVmZmVyIERlc2NyaXB0ZXIgYml0IGFzc2lnbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgQkRfQnVmZkxlbmd0aF9NQVNLICAgICAweDAwMDBGRkZGIC8qIFJlY2VpdmUgRGF0YSBTaXplCQkgICAgICovCiAjZGVmaW5lIEJEX1J4QkRJRF9NQVNLCSAgICAgICAweDAwRkYwMDAwIC8qIEJEIElEIE51bWJlciBNQVNLCQkgICAgICovCiAjZGVmaW5lIEJEX1J4QkRTZXFOX01BU0sgICAgICAgMHg3RjAwMDAwMCAvKiBSeCBCRCBTZXF1ZW5jZSBOdW1iZXIJICAgICAqLwogI2RlZmluZSBCRF9Db3duc0JECSAgICAgICAweDgwMDAwMDAwIC8qIEJEIENvbnRyb2xsZXIgb3duZXIgYml0CSAgICAgKi8KQEAgLTMzOSw3ICszMzksNyBAQAogI2RlZmluZSBUWF9USFJFU0hPTEQJMTAyNAogLyogdXNlZCB0aHJlc2hvbGQgd2l0aCBwYWNrZXQgbWF4IGJ5dGUgZm9yIGxvdyBwY2kgdHJhbnNmZXIgYWJpbGl0eS4qLwogI2RlZmluZSBUWF9USFJFU0hPTERfTUFYIDE1MzYKLS8qIHNldHRpbmcgdGhyZXNob2xkIG1heCB2YWx1ZSB3aGVuIG92ZXJydW4gZXJyb3Igb2NjdXJlZCB0aGlzIGNvdW50LiAqLworLyogc2V0dGluZyB0aHJlc2hvbGQgbWF4IHZhbHVlIHdoZW4gb3ZlcnJ1biBlcnJvciBvY2N1cnJlZCB0aGlzIGNvdW50LiAqLwogI2RlZmluZSBUWF9USFJFU0hPTERfS0VFUF9MSU1JVCAxMAogCiAvKiAxNiArIFJYX0JVRl9OVU0gKiA4ICsgUlhfRkRfTlVNICogMTYgKyBUWF9GRF9OVU0gKiAzMiA8PSBQQUdFX1NJWkUqRkRfUEFHRV9OVU0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RlaHV0aS5jIGIvZHJpdmVycy9uZXQvdGVodXRpLmMKaW5kZXggMzM5NzYxOC4uODU2NGVjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGVodXRpLmMKKysrIGIvZHJpdmVycy9uZXQvdGVodXRpLmMKQEAgLTY0NSw3ICs2NDUsNyBAQAogCWlmIChjbWQgIT0gU0lPQ0RFVlBSSVZBVEUpIHsKIAkJZXJyb3IgPSBjb3B5X2Zyb21fdXNlcihkYXRhLCBpZnItPmlmcl9kYXRhLCBzaXplb2YoZGF0YSkpOwogCQlpZiAoZXJyb3IpIHsKLQkJCXByX2VycigiY2FudCBjb3B5IGZyb20gdXNlclxuIik7CisJCQlwcl9lcnIoImNhbid0IGNvcHkgZnJvbSB1c2VyXG4iKTsKIAkJCVJFVCgtRUZBVUxUKTsKIAkJfQogCQlEQkcoIiVkIDB4JXggMHgleFxuIiwgZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSk7CkBAIC05OTksNyArOTk5LDcgQEAKICAqCiAgKiBSeEQgZmlmbyBpcyBzbWFsbGVyIHRoYW4gUnhGIGZpZm8gYnkgZGVzaWduLiBVcG9uIGhpZ2ggbG9hZCwgUnhEIHdpbGwgYmUKICAqIGZpbGxlZCBhbmQgcGFja2V0cyB3aWxsIGJlIGRyb3BwZWQgYnkgbmljIHdpdGhvdXQgZ2V0dGluZyBpbnRvIGhvc3Qgb3IKLSAqIGNvdXNpbmcgaW50ZXJydXB0LiBBbnl3YXksIGluIHRoYXQgY29uZGl0aW9uLCBob3N0IGhhcyBubyBjaGFuY2UgdG8gcHJvY2Nlc3MKKyAqIGNvdXNpbmcgaW50ZXJydXB0LiBBbnl3YXksIGluIHRoYXQgY29uZGl0aW9uLCBob3N0IGhhcyBubyBjaGFuY2UgdG8gcHJvY2VzcwogICogYWxsIHBhY2tldHMsIGJ1dCBkcm9wcGluZyBpbiBuaWMgaXMgY2hlYXBlciwgc2luY2UgaXQgdGFrZXMgMCBjcHUgY3ljbGVzCiAgKi8KIApAQCAtMTIwMCw4ICsxMjAwLDggQEAKIAlSRVQoKTsKIH0KIAotLyogYmR4X3J4X3JlY2VpdmUgLSByZWNpZXZlcyBmdWxsIHBhY2tldHMgZnJvbSBSWEQgZmlmbyBhbmQgcGFzcyB0aGVtIHRvIE9TCi0gKiBOT1RFOiBhIHNwZWNpYWwgdHJlYXRtZW50IGlzIGdpdmVuIHRvIG5vbi1jb250aW5vdXMgZGVzY3JpcHRvcnMKKy8qIGJkeF9yeF9yZWNlaXZlIC0gcmVjZWl2ZXMgZnVsbCBwYWNrZXRzIGZyb20gUlhEIGZpZm8gYW5kIHBhc3MgdGhlbSB0byBPUworICogTk9URTogYSBzcGVjaWFsIHRyZWF0bWVudCBpcyBnaXZlbiB0byBub24tY29udGludW91cyBkZXNjcmlwdG9ycwogICogdGhhdCBzdGFydCBuZWFyIHRoZSBlbmQsIHdyYXBzIGFyb3VuZCBhbmQgY29udGludWUgYXQgdGhlIGJlZ2lubmluZy4gYSBzZWNvbmQKICAqIHBhcnQgaXMgY29waWVkIHJpZ2h0IGFmdGVyIHRoZSBmaXJzdCwgYW5kIHRoZW4gZGVzY3JpcHRvciBpcyBpbnRlcnByZXRlZCBhcwogICogbm9ybWFsLiBmaWZvIGhhcyBhbiBleHRyYSBzcGFjZSB0byBhbGxvdyBzdWNoIG9wZXJhdGlvbnMKQEAgLTE1ODQsOSArMTU4NCw5IEBACiB9CiAKIC8qCi0gKiBiZHhfdHhfc3BhY2UgLSBjYWxjdWxhdGVzIGF2YWxhYmxlIHNwYWNlIGluIFRYIGZpZm8KKyAqIGJkeF90eF9zcGFjZSAtIGNhbGN1bGF0ZXMgYXZhaWxhYmxlIHNwYWNlIGluIFRYIGZpZm8KICAqIEBwcml2IC0gTklDIHByaXZhdGUgc3RydWN0dXJlCi0gKiBSZXR1cm5zIGF2YWxpYWJsZSBzcGFjZSBpbiBUWCBmaWZvIGluIGJ5dGVzCisgKiBSZXR1cm5zIGF2YWlsYWJsZSBzcGFjZSBpbiBUWCBmaWZvIGluIGJ5dGVzCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGJkeF90eF9zcGFjZShzdHJ1Y3QgYmR4X3ByaXYgKnByaXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZWh1dGkuaCBiL2RyaXZlcnMvbmV0L3RlaHV0aS5oCmluZGV4IGI2YmE4NjAuLmM1NjQyZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RlaHV0aS5oCisrKyBiL2RyaXZlcnMvbmV0L3RlaHV0aS5oCkBAIC01MDIsNyArNTAyLDcgQEAKICNkZWZpbmUgIEdNQUNfUlhfRklMVEVSX0FDUkMgIDB4MDAxMAkvKiBhY2NlcHQgY3JjIGVycm9yICovCiAjZGVmaW5lICBHTUFDX1JYX0ZJTFRFUl9BTSAgICAweDAwMDgJLyogYWNjZXB0IG11bHRpY2FzdCAqLwogI2RlZmluZSAgR01BQ19SWF9GSUxURVJfQUIgICAgMHgwMDA0CS8qIGFjY2VwdCBicm9hZGNhc3QgKi8KLSNkZWZpbmUgIEdNQUNfUlhfRklMVEVSX1BSTSAgIDB4MDAwMQkvKiBbMDoxXSBwcm9taXNjb3VzIG1vZGUgKi8KKyNkZWZpbmUgIEdNQUNfUlhfRklMVEVSX1BSTSAgIDB4MDAwMQkvKiBbMDoxXSBwcm9taXNjdW91cyBtb2RlICovCiAKICNkZWZpbmUgIE1BWF9GUkFNRV9BQl9WQUwgICAgICAgMHgzZmZmCS8qIDEzOjAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGczLmMgYi9kcml2ZXJzL25ldC90ZzMuYwppbmRleCA3M2M5NDJkLi43YTVkYWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZzMuYworKysgYi9kcml2ZXJzL25ldC90ZzMuYwpAQCAtOTcxMiw3ICs5NzEyLDcgQEAKIAkJZWVwcm9tLT5sZW4gKz0gYl9jb3VudDsKIAl9CiAKLQkvKiByZWFkIGJ5dGVzIHVwdG8gdGhlIGxhc3QgNCBieXRlIGJvdW5kYXJ5ICovCisJLyogcmVhZCBieXRlcyB1cCB0byB0aGUgbGFzdCA0IGJ5dGUgYm91bmRhcnkgKi8KIAlwZCA9ICZkYXRhW2VlcHJvbS0+bGVuXTsKIAlmb3IgKGkgPSAwOyBpIDwgKGxlbiAtIChsZW4gJiAzKSk7IGkgKz0gNCkgewogCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBvZmZzZXQgKyBpLCAmdmFsKTsKQEAgLTEyMzI3LDggKzEyMzI3LDEwIEBACiAJCWlmICh2YWwgJiBWQ1BVX0NGR1NIRFdfQVNQTV9EQk5DKQogCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19BU1BNX1dPUktBUk9VTkQ7CiAJCWlmICgodmFsICYgVkNQVV9DRkdTSERXX1dPTF9FTkFCTEUpICYmCi0JCSAgICAodmFsICYgVkNQVV9DRkdTSERXX1dPTF9NQUdQS1QpKQorCQkgICAgKHZhbCAmIFZDUFVfQ0ZHU0hEV19XT0xfTUFHUEtUKSkgewogCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19XT0xfRU5BQkxFOworCQkJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZ0cC0+cGRldi0+ZGV2LCB0cnVlKTsKKwkJfQogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC0xMjQ2MSw4ICsxMjQ2MywxMCBAQAogCQkJdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfV09MX0NBUDsKIAogCQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19XT0xfQ0FQKSAmJgotCQkgICAgKG5pY19jZmcgJiBOSUNfU1JBTV9EQVRBX0NGR19XT0xfRU5BQkxFKSkKKwkJICAgIChuaWNfY2ZnICYgTklDX1NSQU1fREFUQV9DRkdfV09MX0VOQUJMRSkpIHsKIAkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfV09MX0VOQUJMRTsKKwkJCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmdHAtPnBkZXYtPmRldiwgdHJ1ZSk7CisJCX0KIAogCQlpZiAoY2ZnMiAmICgxIDw8IDE3KSkKIAkJCXRwLT5waHlfZmxhZ3MgfD0gVEczX1BIWUZMR19DQVBBQ0lUSVZFX0NPVVBMSU5HOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGczLmggYi9kcml2ZXJzL25ldC90ZzMuaAppbmRleCA3Mzg4NGI2Li41ZTk2NzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZzMuaAorKysgYi9kcml2ZXJzL25ldC90ZzMuaApAQCAtMjEzMCw3ICsyMTMwLDcgQEAKICNkZWZpbmUgTUlJX1RHM19EU1BfRVhQOTYJCTB4MGY5NgogI2RlZmluZSBNSUlfVEczX0RTUF9FWFA5NwkJMHgwZjk3CiAKLSNkZWZpbmUgTUlJX1RHM19BVVhfQ1RSTAkJMHgxOCAvKiBhdXhpbGxpYXJ5IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlJX1RHM19BVVhfQ1RSTAkJMHgxOCAvKiBhdXhpbGlhcnkgY29udHJvbCByZWdpc3RlciAqLwogCiAjZGVmaW5lIE1JSV9URzNfQVVYQ1RMX1BDVExfMTAwVFhfTFBXUgkweDAwMTAKICNkZWZpbmUgTUlJX1RHM19BVVhDVExfUENUTF9TUFJfSVNPTEFURQkweDAwMjAKQEAgLTIxNDYsNyArMjE0Niw3IEBACiAjZGVmaW5lIE1JSV9URzNfQVVYQ1RMX0FDVExfVFhfNkRCCTB4MDQwMAogI2RlZmluZSBNSUlfVEczX0FVWENUTF9TSERXU0VMX0FVWENUTAkweDAwMDAKIAotI2RlZmluZSBNSUlfVEczX0FVWF9TVEFUCQkweDE5IC8qIGF1eGlsbGlhcnkgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIE1JSV9URzNfQVVYX1NUQVQJCTB4MTkgLyogYXV4aWxpYXJ5IHN0YXR1cyByZWdpc3RlciAqLwogI2RlZmluZSBNSUlfVEczX0FVWF9TVEFUX0xQQVNTCQkweDAwMDQKICNkZWZpbmUgTUlJX1RHM19BVVhfU1RBVF9TUERNQVNLCTB4MDcwMAogI2RlZmluZSBNSUlfVEczX0FVWF9TVEFUXzEwSEFMRgkJMHgwMTAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jCmluZGV4IDEwODAwZjEuLmZmMzJiZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jCkBAIC0yMDgsNyArMjA4LDcgQEAKICAqCXBhc3NpbmcvZ2V0dGluZyB0aGUgbmV4dCB2YWx1ZSBmcm9tIHRoZSBuaWMuIEFzIHdpdGggYWxsIHJlcXVlc3RzCiAgKglvbiB0aGlzIG5pYyBpdCBoYXMgdG8gYmUgZG9uZSBpbiB0d28gc3RhZ2VzLCBhKSB0ZWxsIHRoZSBuaWMgd2hpY2gKICAqCW1lbW9yeSBhZGRyZXNzIHlvdSB3YW50IHRvIGFjY2VzcyBhbmQgYikgcGFzcy9nZXQgdGhlIHZhbHVlIGZyb20gdGhlIG5pYy4KLSAqCVdpdGggdGhlIEVFUHJvbSwgeW91IGhhdmUgdG8gd2FpdCBiZWZvcmUgYW5kIGluYmV0d2VlbiBhY2Nlc3MgYSkgYW5kIGIpLgorICoJV2l0aCB0aGUgRUVQcm9tLCB5b3UgaGF2ZSB0byB3YWl0IGJlZm9yZSBhbmQgYmV0d2VlbiBhY2Nlc3MgYSkgYW5kIGIpLgogICoJQXMgdGhpcyBpcyBvbmx5IHJlYWQgYXQgaW5pdGlhbGl6YXRpb24gdGltZSBhbmQgdGhlIHdhaXQgcGVyaW9kIGlzIHZlcnkgCiAgKglzbWFsbCB3ZSBzaG91bGRuJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBzY2hlZHVsaW5nIGlzc3Vlcy4KICAqLwpAQCAtMTI1MSw3ICsxMjUxLDcgQEAKIC8qIAogICogVGhlIE5JQyBoYXMgdG9sZCB1cyB0aGF0IGEgcGFja2V0IGhhcyBiZWVuIGRvd25sb2FkZWQgb250byB0aGUgY2FyZCwgd2UgbXVzdAogICogZmluZCBvdXQgd2hpY2ggcGFja2V0IGl0IGhhcyBkb25lLCBjbGVhciB0aGUgc2tiIGFuZCBpbmZvcm1hdGlvbiBmb3IgdGhlIHBhY2tldAotICogdGhlbiBhZHZhbmNlIGFyb3VuZCB0aGUgcmluZyBmb3IgYWxsIHRyYW5taXR0ZWQgcGFja2V0cworICogdGhlbiBhZHZhbmNlIGFyb3VuZCB0aGUgcmluZyBmb3IgYWxsIHRyYW5zbWl0dGVkIHBhY2tldHMKICAqLwogCiBzdGF0aWMgdm9pZCB4bF9kbl9jb21wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIApAQCAtMTU2OCw3ICsxNTY4LDcgQEAKIAkJCWlmIChsYW5fc3RhdHVzX2RpZmYgJiBMU0NfU09GVF9FUlIpCiAJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBBZGFwdGVyIHRyYW5zbWl0dGVkIFNvZnQgRXJyb3IgUmVwb3J0IE1hYyBGcmFtZVxuIixkZXYtPm5hbWUpOwogCQkJaWYgKGxhbl9zdGF0dXNfZGlmZiAmIExTQ19UUkFOX0JDTikgCi0JCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBXZSBhcmUgdHJhbm1pdHRpbmcgdGhlIGJlYWNvbiwgYWFhaFxuIixkZXYtPm5hbWUpOworCQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogV2UgYXJlIHRyYW5zbWl0dGluZyB0aGUgYmVhY29uLCBhYWFoXG4iLGRldi0+bmFtZSk7CiAJCQlpZiAobGFuX3N0YXR1c19kaWZmICYgTFNDX1NTKSAKIAkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNpbmdsZSBTdGF0aW9uIG9uIHRoZSByaW5nXG4iLCBkZXYtPm5hbWUpOwogCQkJaWYgKGxhbl9zdGF0dXNfZGlmZiAmIExTQ19SSU5HX1JFQykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMKaW5kZXggNWJkMTQwNy4uOTM1NGNhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMKQEAgLTE2NzUsNyArMTY3NSw3IEBACiAJCQlpZiAobGFuX3N0YXR1c19kaWZmICYgTFNDX1NPRlRfRVJSKQogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBBZGFwdGVyIHRyYW5zbWl0dGVkIFNvZnQgRXJyb3IgUmVwb3J0IE1hYyBGcmFtZVxuIiwgZGV2LT5uYW1lKTsKIAkJCWlmIChsYW5fc3RhdHVzX2RpZmYgJiBMU0NfVFJBTl9CQ04pCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFdlIGFyZSB0cmFubWl0dGluZyB0aGUgYmVhY29uLCBhYWFoXG4iLCBkZXYtPm5hbWUpOworCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBXZSBhcmUgdHJhbnNtaXR0aW5nIHRoZSBiZWFjb24sIGFhYWhcbiIsIGRldi0+bmFtZSk7CiAJCQlpZiAobGFuX3N0YXR1c19kaWZmICYgTFNDX1NTKQogCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTaW5nbGUgU3RhdGlvbiBvbiB0aGUgcmluZ1xuIiwgZGV2LT5uYW1lKTsKIAkJCWlmIChsYW5fc3RhdHVzX2RpZmYgJiBMU0NfUklOR19SRUMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbWFkZ2VtYy5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL21hZGdlbWMuYwppbmRleCA3ODVhZDFhLi4yYmVkYzBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbWFkZ2VtYy5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9tYWRnZW1jLmMKQEAgLTczLDcgKzczLDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBtYWRnZW1jX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogCiAvKgotICogVGhlc2Ugd29yayBhcm91bmQgcGFnaW5nLCBob3dldmVyIHRoZXkgZG9uJ3QgZ3VhcmVudGVlIHlvdSdyZSBvbiB0aGUKKyAqIFRoZXNlIHdvcmsgYXJvdW5kIHBhZ2luZywgaG93ZXZlciB0aGV5IGRvbid0IGd1YXJhbnRlZSB5b3UncmUgb24gdGhlCiAgKiByaWdodCBwYWdlLgogICovCiAjZGVmaW5lIFNJRlJFQURCKHJlZykgKGluYihkZXYtPmJhc2VfYWRkciArICgocmVnPDB4OCk/cmVnOnJlZy0weDgpKSkKQEAgLTM4Nyw3ICszODcsNyBAQAogICogYm90aCB3aXRoIHRoZWlyIG93biBkaXNhZHZhbnRhZ2VzLi4uCiAgKgogICogMSkgIAlSZWFkIGluIHRoZSBTSUZTVFMgcmVnaXN0ZXIgZnJvbSB0aGUgVE1TIGNvbnRyb2xsZXIuICBUaGlzCi0gKglpcyBndWFyZW50ZWVkIHRvIGJlIGFjY3VyYXRlLCBob3dldmVyLCB0aGVyZSdzIGEgZmFpcmx5CisgKglpcyBndWFyYW50ZWVkIHRvIGJlIGFjY3VyYXRlLCBob3dldmVyLCB0aGVyZSdzIGEgZmFpcmx5CiAgKglsYXJnZSBwZXJmb3JtYW5jZSBwZW5hbHR5IGZvciBkb2luZyBzbzogdGhlIE1hZGdlIGNoaXBzCiAgKgltdXN0IHJlcXVlc3QgdGhlIHJlZ2lzdGVyIGZyb20gdGhlIEVhZ2xlLCB0aGUgRWFnbGUgbXVzdAogICoJcmVhZCB0aGVtIGZyb20gaXRzIGludGVybmFsIGJ1cywgYW5kIHRoZW4gdGFrZSB0aGUgcm91dGUKQEAgLTQ1NCw3ICs0NTQsNyBAQAogfQogCiAvKgotICogU2V0IHRoZSBjYXJkIHRvIHRoZSBwcmVmZXJlZCByaW5nIHNwZWVkLgorICogU2V0IHRoZSBjYXJkIHRvIHRoZSBwcmVmZXJyZWQgcmluZyBzcGVlZC4KICAqCiAgKiBVbmxpa2UgbmV3ZXIgY2FyZHMsIHRoZSBNQzE2LzMyIGhhdmUgdGhlaXIgc3BlZWQgc2VsZWN0aW9uCiAgKiBjaXJjdWl0IGNvbm5lY3RlZCB0byB0aGUgTWFkZ2UgQVNJQ3MgYW5kIG5vdCB0byB0aGUgVE1TMzgwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuYwppbmRleCAzZDJmYmU2Li4yNjg0MDAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMKQEAgLTE1MDAsNyArMTUwMCw3IEBACiAJCQlpZiAobGFuX3N0YXR1c19kaWZmICYgTFNDX1NPRlRfRVJSKQogCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQWRhcHRlciB0cmFuc21pdHRlZCBTb2Z0IEVycm9yIFJlcG9ydCBNYWMgRnJhbWVcbiIsZGV2LT5uYW1lKTsKIAkJCWlmIChsYW5fc3RhdHVzX2RpZmYgJiBMU0NfVFJBTl9CQ04pIAotCQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogV2UgYXJlIHRyYW5taXR0aW5nIHRoZSBiZWFjb24sIGFhYWhcbiIsZGV2LT5uYW1lKTsKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFdlIGFyZSB0cmFuc21pdHRpbmcgdGhlIGJlYWNvbiwgYWFhaFxuIixkZXYtPm5hbWUpOwogCQkJaWYgKGxhbl9zdGF0dXNfZGlmZiAmIExTQ19TUykgCiAJCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTaW5nbGUgU3RhdGlvbiBvbiB0aGUgcmluZ1xuIiwgZGV2LT5uYW1lKTsKIAkJCWlmIChsYW5fc3RhdHVzX2RpZmYgJiBMU0NfUklOR19SRUMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvc21jdHIuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5jCmluZGV4IDYzZGI1YTYuLmQ5MDQ0YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5jCkBAIC0zOTMsNyArMzkzLDcgQEAKICAgICAgICAgdHAtPnJ4X2JkYl9lbmRbTk9OX01BQ19RVUVVRV0gPSAoQkRCbG9jayAqKXNtY3RyX21hbGxvYyhkZXYsIDApOwogCiAgICAgICAgIC8qIEFsbG9jYXRlIE1BQyB0cmFuc21pdCBidWZmZXJzLgotICAgICAgICAgKiBNQUMgVHggQnVmZmVycyBkb2VuJ3QgaGF2ZSB0byBiZSBvbiBhbiBPREQgQm91bmRyeS4KKyAgICAgICAgICogTUFDIFR4IEJ1ZmZlcnMgZG9lbid0IGhhdmUgdG8gYmUgb24gYW4gT0REIEJvdW5kYXJ5LgogICAgICAgICAgKi8KICAgICAgICAgdHAtPnR4X2J1ZmZfaGVhZFtNQUNfUVVFVUVdCiAgICAgICAgICAgICAgICAgPSAoX191MTYgKilzbWN0cl9tYWxsb2MoZGV2LCB0cC0+dHhfYnVmZl9zaXplW01BQ19RVUVVRV0pOwpAQCAtNDE1LDcgKzQxNSw3IEBACiAKICAgICAgICAgLyogQWxsb2NhdGUgTm9uLU1BQyB0cmFuc21pdCBidWZmZXJzLgogICAgICAgICAgKiA/PyBGb3IgbWF4aW11bSBOZXR3YXJlIHBlcmZvcm1hbmNlLCBwdXQgVHggQnVmZmVycyBvbgotICAgICAgICAgKiBPREQgQm91bmRyeSBhbmQgdGhlbiByZXN0b3JlIG1hbGxvYyB0byBFdmVuIEJvdW5kcnlzLgorICAgICAgICAgKiBPREQgQm91bmRhcnkgYW5kIHRoZW4gcmVzdG9yZSBtYWxsb2MgdG8gRXZlbiBCb3VuZHJ5cy4KICAgICAgICAgICovCiAgICAgICAgIHNtY3RyX21hbGxvYyhkZXYsIDFMKTsKICAgICAgICAgdHAtPnR4X2J1ZmZfaGVhZFtOT05fTUFDX1FVRVVFXQpAQCAtMTMxMSw3ICsxMzExLDcgQEAKICAgICAgICAgbWVtX3VzZWQgKz0gc2l6ZW9mKEJEQmxvY2spICogdHAtPm51bV9yeF9iZGJzW01BQ19RVUVVRV07CiAKICAgICAgICAgLyogQWxsb2NhdGUgTUFDIHRyYW5zbWl0IGJ1ZmZlcnMuCi0gICAgICAgICAqIE1BQyB0cmFuc21pdCBidWZmZXJzIGRvbid0IGhhdmUgdG8gYmUgb24gYW4gT0REIEJvdW5kcnkuCisgICAgICAgICAqIE1BQyB0cmFuc21pdCBidWZmZXJzIGRvbid0IGhhdmUgdG8gYmUgb24gYW4gT0REIEJvdW5kYXJ5LgogICAgICAgICAgKi8KICAgICAgICAgbWVtX3VzZWQgKz0gdHAtPnR4X2J1ZmZfc2l6ZVtNQUNfUVVFVUVdOwogCkBAIC0xMzI1LDcgKzEzMjUsNyBAQAogCiAgICAgICAgIC8qIEFsbG9jYXRlIE5vbi1NQUMgdHJhbnNtaXQgYnVmZmVycy4KICAgICAgICAgICogRm9yIG1heGltdW0gTmV0d2FyZSBwZXJmb3JtYW5jZSwgcHV0IFR4IEJ1ZmZlcnMgb24KLSAgICAgICAgICogT0REIEJvdW5kcnksYW5kIHRoZW4gcmVzdG9yZSBtYWxsb2MgdG8gRXZlbiBCb3VuZHJ5cy4KKyAgICAgICAgICogT0REIEJvdW5kYXJ5LGFuZCB0aGVuIHJlc3RvcmUgbWFsbG9jIHRvIEV2ZW4gQm91bmRyeXMuCiAgICAgICAgICAqLwogICAgICAgICBtZW1fdXNlZCArPSAxTDsKICAgICAgICAgbWVtX3VzZWQgKz0gdHAtPnR4X2J1ZmZfc2l6ZVtOT05fTUFDX1FVRVVFXTsKQEAgLTMwNjksOCArMzA2OSw4IEBACiAgKiBkaXNhYmxlZC4hPwogICoKICAqIE5PVEUgMjogSWYgdGhlIG1vbml0b3Jfc3RhdGUgaXMgTVNfQkVBQ09OX1RFU1RfU1RBVEUgYW5kIHRoZSByZWNlaXZlX21hc2sKLSAqIGhhcyBhbnkgbXVsdGktY2FzdCBvciBwcm9taXNjb3VzIGJpdHMgc2V0LCB0aGUgcmVjZWl2ZV9tYXNrIG5lZWRzIHRvCi0gKiBiZSBjaGFuZ2VkIHRvIGNsZWFyIHRoZSBtdWx0aS1jYXN0IG9yIHByb21pc2NvdXMgbW9kZSBiaXRzLCB0aGUgbG9iZV90ZXN0CisgKiBoYXMgYW55IG11bHRpLWNhc3Qgb3IgcHJvbWlzY3VvdXMgYml0cyBzZXQsIHRoZSByZWNlaXZlX21hc2sgbmVlZHMgdG8KKyAqIGJlIGNoYW5nZWQgdG8gY2xlYXIgdGhlIG11bHRpLWNhc3Qgb3IgcHJvbWlzY3VvdXMgbW9kZSBiaXRzLCB0aGUgbG9iZV90ZXN0CiAgKiBydW4sIGFuZCB0aGVuIHRoZSByZWNlaXZlIG1hc2sgc2V0IGJhY2sgdG8gaXRzIG9yaWdpbmFsIHZhbHVlIGlmIHRoZSB0ZXN0CiAgKiBpcyBzdWNjZXNzZnVsLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zMzgwdHIuaCBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXMzODB0ci5oCmluZGV4IDYwYjMwZWUuLmU1YTYxN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXMzODB0ci5oCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXMzODB0ci5oCkBAIC00NDIsNyArNDQyLDcgQEAKICNkZWZpbmUgUEFTU19GSVJTVF9CVUZfT05MWQkweDAxMDAJLyogUGFzc2VzIG9ubHkgZmlyc3QgaW50ZXJuYWwgYnVmZmVyCiAJCQkJCSAqIG9mIGVhY2ggcmVjZWl2ZWQgZnJhbWU7IEZyYW1lU2l6ZQogCQkJCQkgKiBvZiBSUExzIG11c3QgY29udGFpbiBpbnRlcm5hbAotCQkJCQkgKiBCVUZGRVJfU0laRSBiaXRzIGZvciBwcm9taXNjb3VzIG1vZGUuCisJCQkJCSAqIEJVRkZFUl9TSVpFIGJpdHMgZm9yIHByb21pc2N1b3VzIG1vZGUuCiAJCQkJCSAqLwogI2RlZmluZSBFTkFCTEVfRlVMTF9EVVBMRVhfU0VMRUNUSU9OCTB4MjAwMCAKICAJCQkJCS8qIEVuYWJsZSB0aGUgdXNlIG9mIGZ1bGwtZHVwbGV4CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmggYi9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmgKaW5kZXggNWE3N2FlNi4uNWZlZTdkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHNpMTA4X2V0aC5oCisrKyBiL2RyaXZlcnMvbmV0L3RzaTEwOF9ldGguaApAQCAtMzA1LDkgKzMwNSw5IEBACiAjZGVmaW5lIFRTSTEwOF9UWF9DUkMJKDEgPDwgNSkJLyogR2VuZXJhdGUgQ1JDIGZvciB0aGlzIHBhY2tldCAqLwogI2RlZmluZSBUU0kxMDhfVFhfSU5UCSgxIDw8IDE0KQkvKiBHZW5lcmF0ZSBhbiBJUlEgYWZ0ZXIgZnJhZy4gcHJvY2Vzc2VkICovCiAjZGVmaW5lIFRTSTEwOF9UWF9SRVRSWQkoMHhmIDw8IDE2KQkvKiA0IGJpdCBmaWVsZCBpbmRpY2F0aW5nIG51bS4gb2YgcmV0cmllcyAqLwotI2RlZmluZSBUU0kxMDhfVFhfQ09MCSgxIDw8IDIwKQkvKiBTZXQgaWYgYSBjb2xsaXNpb24gb2NjdXJlZCAqLwotI2RlZmluZSBUU0kxMDhfVFhfTENPTAkoMSA8PCAyNCkJLyogU2V0IGlmIGEgbGF0ZSBjb2xsaXNpb24gb2NjdXJlZCAqLwotI2RlZmluZSBUU0kxMDhfVFhfVU5ERVIJKDEgPDwgMjUpCS8qIFNldCBpZiBhIEZJRk8gdW5kZXJydW4gb2NjdXJlZCAqLworI2RlZmluZSBUU0kxMDhfVFhfQ09MCSgxIDw8IDIwKQkvKiBTZXQgaWYgYSBjb2xsaXNpb24gb2NjdXJyZWQgKi8KKyNkZWZpbmUgVFNJMTA4X1RYX0xDT0wJKDEgPDwgMjQpCS8qIFNldCBpZiBhIGxhdGUgY29sbGlzaW9uIG9jY3VycmVkICovCisjZGVmaW5lIFRTSTEwOF9UWF9VTkRFUgkoMSA8PCAyNSkJLyogU2V0IGlmIGEgRklGTyB1bmRlcnJ1biBvY2N1cnJlZCAqLwogI2RlZmluZSBUU0kxMDhfVFhfUkxJTQkoMSA8PCAyNikJLyogU2V0IGlmIHRoZSByZXRyeSBsaW1pdCB3YXMgcmVhY2hlZCAqLwogI2RlZmluZSBUU0kxMDhfVFhfT0sJKDEgPDwgMzApCS8qIFNldCBpZiB0aGUgZnJhbWUgVFggd2FzIHN1Y2Nlc3NmdWwgKi8KICNkZWZpbmUgVFNJMTA4X1RYX09XTgkoMSA8PCAzMSkJLyogU2V0IGlmIHRoZSBkZXZpY2Ugb3ducyB0aGUgZGVzY3JpcHRvciAqLwpAQCAtMzMyLDcgKzMzMiw3IEBACiAjZGVmaW5lIFRTSTEwOF9SWF9SVU5UCSgxIDw8IDQpLyogUGFja2V0IGlzIGxlc3MgdGhhbiBtaW5pbXVtIHNpemUgKi8KICNkZWZpbmUgVFNJMTA4X1JYX0hBU0gJKDEgPDwgNykvKiBIYXNoIHRhYmxlIG1hdGNoICovCiAjZGVmaW5lIFRTSTEwOF9SWF9CQUQJKDEgPDwgOCkJLyogQmFkIGZyYW1lICovCi0jZGVmaW5lIFRTSTEwOF9SWF9PVkVSCSgxIDw8IDkpCS8qIEZJRk8gb3ZlcnJ1biBvY2N1cmVkICovCisjZGVmaW5lIFRTSTEwOF9SWF9PVkVSCSgxIDw8IDkpCS8qIEZJRk8gb3ZlcnJ1biBvY2N1cnJlZCAqLwogI2RlZmluZSBUU0kxMDhfUlhfVFJVTkMJKDEgPDwgMTEpCS8qIFBhY2tldCB0cnVuY2F0ZWQgZHVlIHRvIGV4Y2VzcyBsZW5ndGggKi8KICNkZWZpbmUgVFNJMTA4X1JYX0NSQwkoMSA8PCAxMikJLyogUGFja2V0IGhhZCBhIENSQyBlcnJvciAqLwogI2RlZmluZSBUU0kxMDhfUlhfSU5UCSgxIDw8IDEzKQkvKiBHZW5lcmF0ZSBhbiBJUlEgYWZ0ZXIgZnJhZy4gcHJvY2Vzc2VkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuYwppbmRleCA0ZGJkNDkzLi5lZmFhMWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMKQEAgLTc5LDcgKzc5LDcgQEAKICAgICBldmVyeSAgdXNhYmxlIERFQ2NoaXAgYm9hcmQsICBJICBwaW5jaGVkIERvbmFsZCdzICduZXh0X21vZHVsZScgZmllbGQgdG8KICAgICBsaW5rIG15IG1vZHVsZXMgdG9nZXRoZXIuCiAKLSAgICBVcHRvIDE1IEVJU0EgY2FyZHMgY2FuIGJlIHN1cHBvcnRlZCB1bmRlciB0aGlzIGRyaXZlciwgbGltaXRlZCBwcmltYXJpbHkKKyAgICBVcCB0byAxNSBFSVNBIGNhcmRzIGNhbiBiZSBzdXBwb3J0ZWQgdW5kZXIgdGhpcyBkcml2ZXIsIGxpbWl0ZWQgcHJpbWFyaWx5CiAgICAgYnkgdGhlIGF2YWlsYWJsZSBJUlEgbGluZXMuICBJIGhhdmUgIGNoZWNrZWQgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIG9mCiAgICAgbXVsdGlwbGUgZGVwY2EsIEV0aGVyV09SS1MgMyBjYXJkcyBhbmQgZGU0eDUgY2FyZHMgYW5kICBoYXZlIG5vdCBmb3VuZCBhCiAgICAgcHJvYmxlbSB5ZXQgKHByb3ZpZGVkIHlvdSBoYXZlIGF0IGxlYXN0IGRlcGNhLmMgdjAuMzgpIC4uLgpAQCAtNTE3LDcgKzUxNyw3IEBACiAgICAgdV9pbnQgbWNpOyAgICAgICAgICAgICAgLyogMjExNDIgTUlJIENvbm5lY3RvciBJbnRlcnJ1cHQgaW5mbyAgICAgICAgKi8KIH07CiAKLSNkZWZpbmUgREU0WDVfTUFYX1BIWSA4ICAgICAvKiBBbGxvdyB1cHRvIDggYXR0YWNoZWQgUEhZIGRldmljZXMgcGVyIGJvYXJkICovCisjZGVmaW5lIERFNFg1X01BWF9QSFkgOCAgICAgLyogQWxsb3cgdXAgdG8gOCBhdHRhY2hlZCBQSFkgZGV2aWNlcyBwZXIgYm9hcmQgKi8KIAogc3RydWN0IHNpYV9waHkgewogICAgIHVfY2hhciBtYzsgICAgICAgICAgICAgIC8qIE1lZGlhIENvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xNDM2LDcgKzE0MzYsNyBAQAogCiAgICAgLyogUG9sbCBmb3Igc2V0dXAgZnJhbWUgY29tcGxldGlvbiAoYWRhcHRlciBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBub3cpICovCiAKLSAgICBmb3IgKGo9MCwgaT0wOyhpPDUwMCkgJiYgKGo9PTApO2krKykgeyAgICAgICAvKiBVcHRvIDUwMG1zIGRlbGF5ICovCisgICAgZm9yIChqPTAsIGk9MDsoaTw1MDApICYmIChqPT0wKTtpKyspIHsgICAgICAgLyogVXAgdG8gNTAwbXMgZGVsYXkgKi8KIAltZGVsYXkoMSk7CiAJaWYgKChzMzIpbGUzMl90b19jcHUobHAtPnR4X3JpbmdbbHAtPnR4X25ld10uc3RhdHVzKSA+PSAwKSBqPTE7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jCmluZGV4IDcwNjRlMDMuLmZiMDdmNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMKQEAgLTEyMjQsNyArMTIyNCw3IEBACiAKIAogCS8qIElmIGNoaXAgcmVwb3J0cyB0aGF0IGxpbmsgaXMgZmFpbGVkIGl0IGNvdWxkIGJlIGJlY2F1c2UgZXh0ZXJuYWwKLQkJUEhZIGxpbmsgc3RhdHVzIHBpbiBpcyBub3QgY29uZWN0ZWQgY29ycmVjdGx5IHRvIGNoaXAKKwkJUEhZIGxpbmsgc3RhdHVzIHBpbiBpcyBub3QgY29ubmVjdGVkIGNvcnJlY3RseSB0byBjaGlwCiAJCVRvIGJlIHN1cmUgYXNrIFBIWSB0b28uCiAJKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZWVwcm9tLmMgYi9kcml2ZXJzL25ldC90dWxpcC9lZXByb20uYwppbmRleCAzMDMxZWQ5Li4yOTY0ODZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9lZXByb20uYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9lZXByb20uYwpAQCAtMTE1LDcgKzExNSw3IEBACiAJCQkgIDB4MDIsICAgICAgIC8qIHBoeSByZXNldCBzZXF1ZW5jZSBsZW5ndGggKi8KIAkJCSAgMHgwMSwgMHgwMCwgLyogcGh5IHJlc2V0IHNlcXVlbmNlICovCiAJCQkgIDB4MDAsIDB4NzgsIC8qIG1lZGlhIGNhcGFiaWxpdGllcyAqLwotCQkJICAweDAwLCAweGUwLCAvKiBud2F5IGFkdmVydGlzbWVudCAqLworCQkJICAweDAwLCAweGUwLCAvKiBud2F5IGFkdmVydGlzZW1lbnQgKi8KIAkJCSAgMHgwMCwgMHgwNSwgLyogZmR4IGJpdCBtYXAgKi8KIAkJCSAgMHgwMCwgMHgwNiAgLyogdHRtIGJpdCBtYXAgKi8KIAkJCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90eXBob29uLmMgYi9kcml2ZXJzL25ldC90eXBob29uLmMKaW5kZXggN2ZhNWVjMi4uODI2NTNjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHlwaG9vbi5jCisrKyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uYwpAQCAtODQ2LDcgKzg0Niw3IEBACiAJaWYodHlwaG9vbl9udW1fZnJlZV90eCh0eFJpbmcpIDwgKG51bURlc2MgKyAyKSkgewogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKLQkJLyogQSBUeCBjb21wbGV0ZSBJUlEgY291bGQgaGF2ZSBnb3R0ZW4gaW5iZXR3ZWVuLCBtYWtpbmcKKwkJLyogQSBUeCBjb21wbGV0ZSBJUlEgY291bGQgaGF2ZSBnb3R0ZW4gYmV0d2VlbiwgbWFraW5nCiAJCSAqIHRoZSByaW5nIGZyZWUgYWdhaW4uIE9ubHkgbmVlZCB0byByZWNoZWNrIGhlcmUsIHNpbmNlCiAJCSAqIFR4IGlzIHNlcmlhbGl6ZWQuCiAJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGguaCBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmgKaW5kZXggMDU1Yjg3YS4uZDEyZmNhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdWNjX2dldGguaAorKysgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oCkBAIC04MCw3ICs4MCw3IEBACiAJCQkJICAgZnJhbWVzKSByZWNlaXZlZCB0aGF0IHdlcmUgYmV0d2VlbiAxMjgKIAkJCQkgICAoSW5jbHVkaW5nIEZDUyBsZW5ndGg9PTQpIGFuZCAyNTUgb2N0ZXRzICovCiAJdTMyIHR4b2s7CQkvKiBUb3RhbCBudW1iZXIgb2Ygb2N0ZXRzIHJlc2lkaW5nIGluIGZyYW1lcwotCQkJCSAgIHRoYXQgd2hlcmUgaW52b2x2ZWQgaW4gc3VjY2Vzc2Z1bGwKKwkJCQkgICB0aGF0IHdoZXJlIGludm9sdmVkIGluIHN1Y2Nlc3NmdWwKIAkJCQkgICB0cmFuc21pc3Npb24gKi8KIAl1MTYgdHhjZjsJCS8qIFRvdGFsIG51bWJlciBvZiBQQVVTRSBjb250cm9sIGZyYW1lcwogCQkJCSAgIHRyYW5zbWl0dGVkIGJ5IHRoaXMgTUFDICovCkBAIC03NTksNyArNzU5LDcgQEAKIAkJCQkgICBmcmFtZXMpIHJlY2VpdmVkIHRoYXQgd2VyZSBiZXR3ZWVuIDEyOAogCQkJCSAgIChJbmNsdWRpbmcgRkNTIGxlbmd0aD09NCkgYW5kIDI1NSBvY3RldHMgKi8KIAl1MzIgdHhvazsJCS8qIFRvdGFsIG51bWJlciBvZiBvY3RldHMgcmVzaWRpbmcgaW4gZnJhbWVzCi0JCQkJICAgdGhhdCB3aGVyZSBpbnZvbHZlZCBpbiBzdWNjZXNzZnVsbAorCQkJCSAgIHRoYXQgd2hlcmUgaW52b2x2ZWQgaW4gc3VjY2Vzc2Z1bAogCQkJCSAgIHRyYW5zbWlzc2lvbiAqLwogCXUxNiB0eGNmOwkJLyogVG90YWwgbnVtYmVyIG9mIFBBVVNFIGNvbnRyb2wgZnJhbWVzCiAJCQkJICAgdHJhbnNtaXR0ZWQgYnkgdGhpcyBNQUMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jZGNfZWVtLmMgYi9kcml2ZXJzL25ldC91c2IvY2RjX2VlbS5jCmluZGV4IDhmMTI4NTQuLjg4MmY1M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jZGNfZWVtLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2NkY19lZW0uYwpAQCAtMTkwLDcgKzE5MCw3IEBACiAKIAkJLyoKIAkJICogRUVNIHBhY2tldCBoZWFkZXIgZm9ybWF0OgotCQkgKiBiMC4uMTQ6CUVFTSB0eXBlIGRlcGVuZGFudCAoRGF0YSBvciBDb21tYW5kKQorCQkgKiBiMC4uMTQ6CUVFTSB0eXBlIGRlcGVuZGVudCAoRGF0YSBvciBDb21tYW5kKQogCQkgKiBiMTU6CQlibVR5cGUKIAkJICovCiAJCWhlYWRlciA9IGdldF91bmFsaWduZWRfbGUxNihza2ItPmRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NkY19ldGhlci5jIGIvZHJpdmVycy9uZXQvdXNiL2NkY19ldGhlci5jCmluZGV4IDM0MWY3MDUuLmM5MjRlYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jZGNfZXRoZXIuYworKysgYi9kcml2ZXJzL25ldC91c2IvY2RjX2V0aGVyLmMKQEAgLTQ2MCw3ICs0NjAsNyBAQAogCS5tYW5hZ2VfcG93ZXIgPQljZGNfbWFuYWdlX3Bvd2VyLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBtYm1faW5mbyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gd3dhbl9pbmZvID0gewogCS5kZXNjcmlwdGlvbiA9CSJNb2JpbGUgQnJvYWRiYW5kIE5ldHdvcmsgRGV2aWNlIiwKIAkuZmxhZ3MgPQlGTEFHX1dXQU4sCiAJLmJpbmQgPQkJdXNibmV0X2NkY19iaW5kLApAQCAtNDcxLDYgKzQ3MSw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKyNkZWZpbmUgSFVBV0VJX1ZFTkRPUl9JRAkweDEyRDEKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkCXByb2R1Y3RzIFtdID0gewogLyoKQEAgLTU2Niw3ICs1NjcsNyBAQAogewogCVVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MTAwNCwgMHg2MWFhLCBVU0JfQ0xBU1NfQ09NTSwKIAkJCVVTQl9DRENfU1VCQ0xBU1NfRVRIRVJORVQsIFVTQl9DRENfUFJPVE9fTk9ORSksCi0JLmRyaXZlcl9pbmZvCQk9IDAsCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpJnd3YW5faW5mbywKIH0sCiAKIC8qCkBAIC01ODcsOCArNTg4LDE3IEBACiB9LCB7CiAJVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19DT01NLCBVU0JfQ0RDX1NVQkNMQVNTX01ETE0sCiAJCQlVU0JfQ0RDX1BST1RPX05PTkUpLAotCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSZtYm1faW5mbywKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykmd3dhbl9pbmZvLAogCit9LCB7CisJLyogVmFyaW91cyBIdWF3ZWkgbW9kZW1zIHdpdGggYSBuZXR3b3JrIHBvcnQgbGlrZSB0aGUgVU1HMTgzMSAqLworCS5tYXRjaF9mbGFncyAgICA9ICAgVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IKKwkJIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKKwkuaWRWZW5kb3IgICAgICAgICAgICAgICA9IEhVQVdFSV9WRU5ET1JfSUQsCisJLmJJbnRlcmZhY2VDbGFzcwk9IFVTQl9DTEFTU19DT01NLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MJPSBVU0JfQ0RDX1NVQkNMQVNTX0VUSEVSTkVULAorCS5iSW50ZXJmYWNlUHJvdG9jb2wJPSAyNTUsCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpJnd3YW5faW5mbywKIH0sCiAJeyB9LAkJLy8gRU5ECiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYyBiL2RyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMKaW5kZXggOTY3MzcxZi4uMTAzM2VmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYworKysgYi9kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jCkBAIC01NCwxMyArNTQsMTMgQEAKICNpbmNsdWRlIDxsaW51eC91c2IvdXNibmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2NkYy5oPgogCi0jZGVmaW5lCURSSVZFUl9WRVJTSU9OCQkJCSI3LUZlYi0yMDExIgorI2RlZmluZQlEUklWRVJfVkVSU0lPTgkJCQkiMjMtQXByLTIwMTEiCiAKIC8qIENEQyBOQ00gc3ViY2xhc3MgMy4yLjEgKi8KICNkZWZpbmUgVVNCX0NEQ19OQ01fTkRQMTZfTEVOR1RIX01JTgkJMHgxMAogCiAvKiBNYXhpbXVtIE5UQiBsZW5ndGggKi8KLSNkZWZpbmUJQ0RDX05DTV9OVEJfTUFYX1NJWkVfVFgJCQkxNjM4NAkvKiBieXRlcyAqLworI2RlZmluZQlDRENfTkNNX05UQl9NQVhfU0laRV9UWAkJCSgxNjM4NCArIDQpIC8qIGJ5dGVzLCBtdXN0IGJlIHNob3J0IHRlcm1pbmF0ZWQgKi8KICNkZWZpbmUJQ0RDX05DTV9OVEJfTUFYX1NJWkVfUlgJCQkxNjM4NAkvKiBieXRlcyAqLwogCiAvKiBNaW5pbXVtIHZhbHVlIGZvciBNYXhEYXRhZ3JhbVNpemUsIGNoLiA2LjIuOSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jIGIvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jCmluZGV4IDdkNDJmOWEuLjgxMTI2ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9pcGhldGguYworKysgYi9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMKQEAgLTY1LDYgKzY1LDcgQEAKICNkZWZpbmUgSVBIRVRIX1VTQklOVEZfUFJPVE8gICAgMQogCiAjZGVmaW5lIElQSEVUSF9CVUZfU0laRSAgICAgICAgIDE1MTYKKyNkZWZpbmUgSVBIRVRIX0lQX0FMSUdOCQkyCS8qIHBhZGRpbmcgYXQgZnJvbnQgb2YgVVJCICovCiAjZGVmaW5lIElQSEVUSF9UWF9USU1FT1VUICAgICAgICg1ICogSFopCiAKICNkZWZpbmUgSVBIRVRIX0lOVEZOVU0gICAgICAgICAgMgpAQCAtMjAyLDE4ICsyMDMsMjEgQEAKIAkJcmV0dXJuOwogCX0KIAotCWxlbiA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKLQlidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDw9IElQSEVUSF9JUF9BTElHTikgeworCQlkZXYtPm5ldC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQlyZXR1cm47CisJfQorCWxlbiA9IHVyYi0+YWN0dWFsX2xlbmd0aCAtIElQSEVUSF9JUF9BTElHTjsKKwlidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIElQSEVUSF9JUF9BTElHTjsKIAotCXNrYiA9IGRldl9hbGxvY19za2IoTkVUX0lQX0FMSUdOICsgbGVuKTsKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbik7CiAJaWYgKCFza2IpIHsKIAkJZXJyKCIlczogZGV2X2FsbG9jX3NrYjogLUVOT01FTSIsIF9fZnVuY19fKTsKIAkJZGV2LT5uZXQtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuOwogCX0KIAotCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKLQltZW1jcHkoc2tiX3B1dChza2IsIGxlbiksIGJ1ZiArIE5FVF9JUF9BTElHTiwgbGVuIC0gTkVUX0lQX0FMSUdOKTsKKwltZW1jcHkoc2tiX3B1dChza2IsIGxlbiksIGJ1ZiwgbGVuKTsKIAlza2ItPmRldiA9IGRldi0+bmV0OwogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldi0+bmV0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jIGIvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCmluZGV4IDdkYzg0OTcuLmFkMDI5OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYworKysgYi9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKQEAgLTEyMjEsNyArMTIyMSw3IEBACiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwogCWlmICgha2F3ZXRoKSB7Ci0JCWRldl93YXJuKCZpbnRmLT5kZXYsICJ1bnJlZ2lzdGVyaW5nIG5vbi1leGlzdGFudCBkZXZpY2VcbiIpOworCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAidW5yZWdpc3RlcmluZyBub24tZXhpc3RlbnQgZGV2aWNlXG4iKTsKIAkJcmV0dXJuOwogCX0KIAluZXRkZXYgPSBrYXdldGgtPm5ldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jIGIvZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMKaW5kZXggNzI3ODc0ZC4uNDhkNGVmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMKQEAgLTczMCw3ICs3MzAsNyBAQAogCQltc2xlZXAoMTApOwogCQlibWNyID0gc21zYzk1eHhfbWRpb19yZWFkKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9CTUNSKTsKIAkJdGltZW91dCsrOwotCX0gd2hpbGUgKChibWNyICYgTUlJX0JNQ1IpICYmICh0aW1lb3V0IDwgMTAwKSk7CisJfSB3aGlsZSAoKGJtY3IgJiBCTUNSX1JFU0VUKSAmJiAodGltZW91dCA8IDEwMCkpOwogCiAJaWYgKHRpbWVvdXQgPj0gMTAwKSB7CiAJCW5ldGRldl93YXJuKGRldi0+bmV0LCAidGltZW91dCBvbiBQSFkgUmVzZXQiKTsKQEAgLTEzMTMsNiArMTMxMywyMSBAQAogCQlVU0JfREVWSUNFKDB4MDQyNCwgMHg5OTA5KSwKIAkJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZzbXNjOTV4eF9pbmZvLAogCX0sCisJeworCQkvKiBTTVNDIExBTjk1MzAgVVNCIEV0aGVybmV0IERldmljZSAqLworCQlVU0JfREVWSUNFKDB4MDQyNCwgMHg5NTMwKSwKKwkJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZzbXNjOTV4eF9pbmZvLAorCX0sCisJeworCQkvKiBTTVNDIExBTjk3MzAgVVNCIEV0aGVybmV0IERldmljZSAqLworCQlVU0JfREVWSUNFKDB4MDQyNCwgMHg5NzMwKSwKKwkJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZzbXNjOTV4eF9pbmZvLAorCX0sCisJeworCQkvKiBTTVNDIExBTjg5NTMwIFVTQiBFdGhlcm5ldCBEZXZpY2UgKi8KKwkJVVNCX0RFVklDRSgweDA0MjQsIDB4OUUwOCksCisJCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmc21zYzk1eHhfaW5mbywKKwl9LAogCXsgfSwJCS8qIEVORCAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBwcm9kdWN0cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKaW5kZXggMDY5YzFjZi4uOWFiNDM5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwpAQCAtNjQ1LDYgKzY0NSw3IEBACiAJc3RydWN0IGRyaXZlcl9pbmZvCSppbmZvID0gZGV2LT5kcml2ZXJfaW5mbzsKIAlpbnQJCQlyZXR2YWw7CiAKKwljbGVhcl9iaXQoRVZFTlRfREVWX09QRU4sICZkZXYtPmZsYWdzKTsKIAluZXRpZl9zdG9wX3F1ZXVlIChuZXQpOwogCiAJbmV0aWZfaW5mbyhkZXYsIGlmZG93biwgZGV2LT5uZXQsCkBAIC03MzYsNiArNzM3LDcgQEAKIAkJfQogCX0KIAorCXNldF9iaXQoRVZFTlRfREVWX09QRU4sICZkZXYtPmZsYWdzKTsKIAluZXRpZl9zdGFydF9xdWV1ZSAobmV0KTsKIAluZXRpZl9pbmZvKGRldiwgaWZ1cCwgZGV2LT5uZXQsCiAJCSAgICJvcGVuOiBlbmFibGUgcXVldWVpbmcgKHJ4ICVkLCB0eCAlZCkgbXR1ICVkICVzIGZyYW1pbmdcbiIsCkBAIC0xMjU5LDYgKzEyNjEsOSBAQAogCWlmIChkZXYtPmRyaXZlcl9pbmZvLT51bmJpbmQpCiAJCWRldi0+ZHJpdmVyX2luZm8tPnVuYmluZCAoZGV2LCBpbnRmKTsKIAorCXVzYl9raWxsX3VyYihkZXYtPmludGVycnVwdCk7CisJdXNiX2ZyZWVfdXJiKGRldi0+aW50ZXJydXB0KTsKKwogCWZyZWVfbmV0ZGV2KG5ldCk7CiAJdXNiX3B1dF9kZXYgKHhkZXYpOwogfQpAQCAtMTQ5OCw2ICsxNTAzLDEwIEBACiAJaW50ICAgICAgICAgICAgICAgICAgICAgcmV0dmFsOwogCiAJaWYgKCEtLWRldi0+c3VzcGVuZF9jb3VudCkgeworCQkvKiByZXN1bWUgaW50ZXJydXB0IFVSQnMgKi8KKwkJaWYgKGRldi0+aW50ZXJydXB0ICYmIHRlc3RfYml0KEVWRU5UX0RFVl9PUEVOLCAmZGV2LT5mbGFncykpCisJCQl1c2Jfc3VibWl0X3VyYihkZXYtPmludGVycnVwdCwgR0ZQX05PSU8pOworCiAJCXNwaW5fbG9ja19pcnEoJmRldi0+dHhxLmxvY2spOwogCQl3aGlsZSAoKHJlcyA9IHVzYl9nZXRfZnJvbV9hbmNob3IoJmRldi0+ZGVmZXJyZWQpKSkgewogCkBAIC0xNTE2LDkgKzE1MjUsMTIgQEAKIAkJc21wX21iKCk7CiAJCWNsZWFyX2JpdChFVkVOVF9ERVZfQVNMRUVQLCAmZGV2LT5mbGFncyk7CiAJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT50eHEubG9jayk7Ci0JCWlmICghKGRldi0+dHhxLnFsZW4gPj0gVFhfUUxFTihkZXYpKSkKLQkJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldi0+bmV0KTsKLQkJdGFza2xldF9zY2hlZHVsZSAoJmRldi0+YmgpOworCisJCWlmICh0ZXN0X2JpdChFVkVOVF9ERVZfT1BFTiwgJmRldi0+ZmxhZ3MpKSB7CisJCQlpZiAoIShkZXYtPnR4cS5xbGVuID49IFRYX1FMRU4oZGV2KSkpCisJCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2LT5uZXQpOworCQkJdGFza2xldF9zY2hlZHVsZSAoJmRldi0+YmgpOworCQl9CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jCmluZGV4IDJkZTliOTAuLjNiOTlmNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZldGguYworKysgYi9kcml2ZXJzL25ldC92ZXRoLmMKQEAgLTQwMyw2ICs0MDMsMTcgQEAKIAlpZiAodGJbSUZMQV9BRERSRVNTXSA9PSBOVUxMKQogCQlyYW5kb21fZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKTsKIAorCWlmICh0YltJRkxBX0lGTkFNRV0pCisJCW5sYV9zdHJsY3B5KGRldi0+bmFtZSwgdGJbSUZMQV9JRk5BTUVdLCBJRk5BTVNJWik7CisJZWxzZQorCQlzbnByaW50ZihkZXYtPm5hbWUsIElGTkFNU0laLCBEUlZfTkFNRSAiJSVkIik7CisKKwlpZiAoc3RyY2hyKGRldi0+bmFtZSwgJyUnKSkgeworCQllcnIgPSBkZXZfYWxsb2NfbmFtZShkZXYsIGRldi0+bmFtZSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnJfYWxsb2NfbmFtZTsKKwl9CisKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJfcmVnaXN0ZXJfZGV2OwpAQCAtNDIyLDYgKzQzMyw3IEBACiAKIGVycl9yZWdpc3Rlcl9kZXY6CiAJLyogbm90aGluZyB0byBkbyAqLworZXJyX2FsbG9jX25hbWU6CiBlcnJfY29uZmlndXJlX3BlZXI6CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2UocGVlcik7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKaW5kZXggNWU3ZjA2OS4uZWI1ZDc1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKKysrIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKQEAgLTE4NjEsNyArMTg2MSw3IEBACiAJdTMyIGludHJfc3RhdHVzOwogCiAJLyoKLQkgKiBJZiBuZXcgZXJyb3JzIG9jY3VyZWQsIHdlIG5lZWQgdG8gc29ydCB0aGVtIG91dCBiZWZvcmUgZG9pbmcgVHguCisJICogSWYgbmV3IGVycm9ycyBvY2N1cnJlZCwgd2UgbmVlZCB0byBzb3J0IHRoZW0gb3V0IGJlZm9yZSBkb2luZyBUeC4KIAkgKiBJbiB0aGF0IGNhc2UgdGhlIElTUiB3aWxsIGJlIGJhY2sgaGVyZSBSU04gYW55d2F5LgogCSAqLwogCWludHJfc3RhdHVzID0gZ2V0X2ludHJfc3RhdHVzKGRldik7CkBAIC0xODg3LDcgKzE4ODcsNyBAQAogCQkvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KIAkJaWYgKGRlYnVnID4gMSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiByaGluZV9yZXN0YXJ0X3R4KCkgIgotCQkJICAgICAgICJBbm90aGVyIGVycm9yIG9jY3VyZWQgJTguOHguXG4iLAorCQkJICAgICAgICJBbm90aGVyIGVycm9yIG9jY3VycmVkICU4Ljh4LlxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUsIGludHJfc3RhdHVzKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKaW5kZXggMGQ2ZmVjNi4uNGZlMDUxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKKysrIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKQEAgLTI5Miw3ICsyOTIsNyBAQAogLyogSVBfYnl0ZV9hbGlnbltdIGlzIHVzZWQgZm9yIElQIGhlYWRlciBEV09SRCBieXRlIGFsaWduZWQKICAgIDA6IGluZGljYXRlIHRoZSBJUCBoZWFkZXIgd29uJ3QgYmUgRFdPUkQgYnl0ZSBhbGlnbmVkLihEZWZhdWx0KSAuCiAgICAxOiBpbmRpY2F0ZSB0aGUgSVAgaGVhZGVyIHdpbGwgYmUgRFdPUkQgYnl0ZSBhbGlnbmVkLgotICAgICAgSW4gc29tZSBlbnZpcm9tZW50LCB0aGUgSVAgaGVhZGVyIHNob3VsZCBiZSBEV09SRCBieXRlIGFsaWduZWQsCisgICAgICBJbiBzb21lIGVudmlyb25tZW50LCB0aGUgSVAgaGVhZGVyIHNob3VsZCBiZSBEV09SRCBieXRlIGFsaWduZWQsCiAgICAgICBvciB0aGUgcGFja2V0IHdpbGwgYmUgZHJvcGVkIHdoZW4gd2UgcmVjZWl2ZSBpdC4gKGVnOiBJUFZTKQogKi8KIFZFTE9DSVRZX1BBUkFNKElQX2J5dGVfYWxpZ24sICJFbmFibGUgSVAgaGVhZGVyIGR3b3JkIGFsaWduZWQiKTsKQEAgLTE5OTQsNyArMTk5NCw3IEBACiAgKglAZGV2OiBuZXR3b3JrIGRldmljZQogICoKICAqCVJlcGxhY2UgdGhlIGN1cnJlbnQgc2tiIHRoYXQgaXMgc2NoZWR1bGVkIGZvciBSeCBwcm9jZXNzaW5nIGJ5IGEKLSAqCXNob3J0ZXIsIGltbWVkaWF0bHkgYWxsb2NhdGVkIHNrYiwgaWYgdGhlIHJlY2VpdmVkIHBhY2tldCBpcyBzbWFsbAorICoJc2hvcnRlciwgaW1tZWRpYXRlbHkgYWxsb2NhdGVkIHNrYiwgaWYgdGhlIHJlY2VpdmVkIHBhY2tldCBpcyBzbWFsbAogICoJZW5vdWdoLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZSBpZiB0aGUgcmVjZWl2ZWQKICAqCXBhY2tldCBpcyB0b28gYmlnIG9yIGlmIG1lbW9yeSBpcyBleGhhdXN0ZWQuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYwppbmRleCBjYzE0YjRhLi5jMTZlZDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZHJ2LmMKKysrIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2Rydi5jCkBAIC0xNzgsNiArMTc4LDcgQEAKIHZteG5ldDNfcHJvY2Vzc19ldmVudHMoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBldmVudHMgPSBsZTMyX3RvX2NwdShhZGFwdGVyLT5zaGFyZWQtPmVjcik7CiAJaWYgKCFldmVudHMpCiAJCXJldHVybjsKQEAgLTE5MCwxMCArMTkxLDEwIEBACiAKIAkvKiBDaGVjayBpZiB0aGVyZSBpcyBhbiBlcnJvciBvbiB4bWl0L3JlY3YgcXVldWVzICovCiAJaWYgKGV2ZW50cyAmIChWTVhORVQzX0VDUl9UUUVSUiB8IFZNWE5FVDNfRUNSX1JRRVJSKSkgewotCQlzcGluX2xvY2soJmFkYXB0ZXItPmNtZF9sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmNtZF9sb2NrLCBmbGFncyk7CiAJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAogCQkJCSAgICAgICBWTVhORVQzX0NNRF9HRVRfUVVFVUVfU1RBVFVTKTsKLQkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPmNtZF9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQogCQkJaWYgKGFkYXB0ZXItPnRxZF9zdGFydFtpXS5zdGF0dXMuc3RvcHBlZCkKQEAgLTg5Miw3ICs4OTMsNyBAQAogICogVHJhbnNtaXRzIGEgcGt0IHRocnUgYSBnaXZlbiB0cQogICogUmV0dXJuczoKICAqICAgIE5FVERFVl9UWF9PSzogICAgICBkZXNjcmlwdG9ycyBhcmUgc2V0dXAgc3VjY2Vzc2Z1bGx5Ci0gKiAgICBORVRERVZfVFhfT0s6ICAgICAgZXJyb3Igb2NjdXJlZCwgdGhlIHBrdCBpcyBkcm9wcGVkCisgKiAgICBORVRERVZfVFhfT0s6ICAgICAgZXJyb3Igb2NjdXJyZWQsIHRoZSBwa3QgaXMgZHJvcHBlZAogICogICAgTkVUREVWX1RYX0JVU1k6ICAgIHR4IHJpbmcgaXMgZnVsbCwgcXVldWUgaXMgc3RvcHBlZAogICoKICAqIFNpZGUtZWZmZWN0czoKQEAgLTI2ODUsNyArMjY4Niw3IEBACiAgKiBFbmFibGUgTVNJeCB2ZWN0b3JzLgogICogUmV0dXJucyA6CiAgKgkwIG9uIHN1Y2Nlc3NmdWwgZW5hYmxpbmcgb2YgcmVxdWlyZWQgdmVjdG9ycywKLSAqCVZNWE5FVDNfTElOVVhfTUlOX01TSVhfVkVDVCB3aGVuIG9ubHkgbWludW11bSBudW1iZXIgb2YgdmVjdG9ycyByZXF1aXJlZAorICoJVk1YTkVUM19MSU5VWF9NSU5fTVNJWF9WRUNUIHdoZW4gb25seSBtaW5pbXVtIG51bWJlciBvZiB2ZWN0b3JzIHJlcXVpcmVkCiAgKgkgY291bGQgYmUgZW5hYmxlZC4KICAqCW51bWJlciBvZiB2ZWN0b3JzIHdoaWNoIGNhbiBiZSBlbmFibGVkIG90aGVyd2lzZSAodGhpcyBudW1iZXIgaXMgc21hbGxlcgogICoJIHRoYW4gVk1YTkVUM19MSU5VWF9NSU5fTVNJWF9WRUNUKQpAQCAtMjczMywxMyArMjczNCwxNCBAQAogdm14bmV0M19hbGxvY19pbnRyX3Jlc291cmNlcyhzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQogewogCXUzMiBjZmc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIGludHIgc2V0dGluZ3MgKi8KLQlzcGluX2xvY2soJmFkYXB0ZXItPmNtZF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKIAlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwKIAkJCSAgICAgICBWTVhORVQzX0NNRF9HRVRfQ09ORl9JTlRSKTsKIAljZmcgPSBWTVhORVQzX1JFQURfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01EKTsKLQlzcGluX3VubG9jaygmYWRhcHRlci0+Y21kX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZF9sb2NrLCBmbGFncyk7CiAJYWRhcHRlci0+aW50ci50eXBlID0gY2ZnICYgMHgzOwogCWFkYXB0ZXItPmludHIubWFza19tb2RlID0gKGNmZyA+PiAyKSAmIDB4MzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19ldGh0b29sLmMKaW5kZXggNTFmMmVmMS4uOTc2NDY3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZXRodG9vbC5jCkBAIC0zMTEsNiArMzExLDkgQEAKIAkJLyogdG9nZ2xlIHRoZSBMUk8gZmVhdHVyZSovCiAJCW5ldGRldi0+ZmVhdHVyZXMgXj0gTkVUSUZfRl9MUk87CiAKKwkJLyogVXBkYXRlIHByaXZhdGUgTFJPIGZsYWcgKi8KKwkJYWRhcHRlci0+bHJvID0gbHJvX3JlcXVlc3RlZDsKKwogCQkvKiB1cGRhdGUgaGFyd2FyZSBMUk8gY2FwYWJpbGl0eSBhY2NvcmRpbmdseSAqLwogCQlpZiAobHJvX3JlcXVlc3RlZCkKIAkJCWFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5taXNjLnVwdEZlYXR1cmVzIHw9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmMgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmMKaW5kZXggZTc0ZTRiNC4uNDAxYmViZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5jCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuYwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAJCQkJCSAgIFZYR0VfSFdfREVGX0RFVklDRV9QT0xMX01JTExJUyk7CiAKIAkvKiBUaGUgX192eGdlX2h3X2RldmljZV9yZWdpc3Rlcl9wb2xsIGNhbiB1ZGVsYXkgZm9yIGEgc2lnbmlmaWNhbnQKLQkgKiBhbW91bnQgb2YgdGltZSwgYmxvY2tpbmcgb3RoZXIgcHJvY2Nlc3MgZnJvbSB0aGUgQ1BVLiAgSWYgaXQgZGVsYXlzCisJICogYW1vdW50IG9mIHRpbWUsIGJsb2NraW5nIG90aGVyIHByb2Nlc3MgZnJvbSB0aGUgQ1BVLiAgSWYgaXQgZGVsYXlzCiAJICogZm9yIH41c2VjcywgYSBOTUkgZXJyb3IgY2FuIG9jY3VyLiAgQSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8gZ2l2ZSB1cAogCSAqIHRoZSBwcm9jZXNzb3IgdmlhIG1zbGVlcCwgYnV0IHRoaXMgaXMgbm90IGFsbG93ZWQgaXMgdW5kZXIgbG9jay4KIAkgKiBTbywgb25seSBhbGxvdyBpdCB0byBzbGVlcCBmb3IgfjRzZWNzIGlmIG9wZW4uICBPdGhlcndpc2UsIGRlbGF5IGZvcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uYyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmMKaW5kZXggMzk1NDIzYS4uYWZmNjhjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uYworKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5jCkBAIC0yMjgyLDcgKzIyODIsNyBAQAogCQlWWEdFX0hXX1ZQQVRIX01TSVhfQUNUSVZFKSArIFZYR0VfQUxBUk1fTVNJWF9JRDsKIAogCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7Ci0JCS8qIFJlZHVjZSB0aGUgY2hhbmNlIG9mIGxvb3NpbmcgYWxhcm0gaW50ZXJydXB0cyBieSBtYXNraW5nCisJCS8qIFJlZHVjZSB0aGUgY2hhbmNlIG9mIGxvc2luZyBhbGFybSBpbnRlcnJ1cHRzIGJ5IG1hc2tpbmcKIAkJICogdGhlIHZlY3Rvci4gQSBwZW5kaW5nIGJpdCB3aWxsIGJlIHNldCBpZiBhbiBhbGFybSBpcwogCQkgKiBnZW5lcmF0ZWQgYW5kIG9uIHVubWFzayB0aGUgaW50ZXJydXB0IHdpbGwgYmUgZmlyZWQuCiAJCSAqLwpAQCAtMjc4OCw3ICsyNzg4LDcgQEAKIAl9CiAKIAkvKiBFbmFibGUgdnBhdGggdG8gc25pZmYgYWxsIHVuaWNhc3QvbXVsdGljYXN0IHRyYWZmaWMgdGhhdCBub3QKLQkgKiBhZGRyZXNzZWQgdG8gdGhlbS4gV2UgYWxsb3cgcHJvbWlzY291cyBtb2RlIGZvciBQRiBvbmx5CisJICogYWRkcmVzc2VkIHRvIHRoZW0uIFdlIGFsbG93IHByb21pc2N1b3VzIG1vZGUgZm9yIFBGIG9ubHkKIAkgKi8KIAogCXZhbDY0ID0gMDsKQEAgLTI4OTAsNyArMjg5MCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogTG9vcCB0aHJvdWdodCB0aGUgbWFjIGFkZHJlc3MgbGlzdCBhbmQgZGVsZXRlIGFsbCB0aGUgZW50cmllcyAqLworLyogTG9vcCB0aHJvdWdoIHRoZSBtYWMgYWRkcmVzcyBsaXN0IGFuZCBkZWxldGUgYWxsIHRoZSBlbnRyaWVzICovCiBzdGF0aWMgdm9pZCB2eGdlX2ZyZWVfbWFjX2FkZF9saXN0KHN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCkKIHsKIApAQCAtMjk1Nyw3ICsyOTU3LDcgQEAKIAkJCQkJdmFsNjQpOwogCQl9CiAKLQkJLyogUmVtb3ZlIHRoZSBmdW5jdGlvbiAwIGZyb20gcHJvbWlzY291cyBtb2RlICovCisJCS8qIFJlbW92ZSB0aGUgZnVuY3Rpb24gMCBmcm9tIHByb21pc2N1b3VzIG1vZGUgKi8KIAkJdnhnZV9od19tZ210X3JlZ193cml0ZSh2ZGV2LT5kZXZoLAogCQkJdnhnZV9od19tZ210X3JlZ190eXBlX21ycGNpbSwKIAkJCTAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5jIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuYwppbmRleCA4Njc0ZjMzLi4yNjM4YjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5jCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmMKQEAgLTExMTEsNyArMTExMSw3IEBACiAgKiB2eGdlX2h3X2NoYW5uZWxfZHRyX2NvdW50CiAgKiBAY2hhbm5lbDogQ2hhbm5lbCBoYW5kbGUuIE9idGFpbmVkIHZpYSB2eGdlX2h3X2NoYW5uZWxfb3BlbigpLgogICoKLSAqIFJldHJlaXZlIG51bWJlciBvZiBEVFJzIGF2YWlsYWJsZS4gVGhpcyBmdW5jdGlvbiBjYW4gbm90IGJlIGNhbGxlZAorICogUmV0cmlldmUgbnVtYmVyIG9mIERUUnMgYXZhaWxhYmxlLiBUaGlzIGZ1bmN0aW9uIGNhbiBub3QgYmUgY2FsbGVkCiAgKiBmcm9tIGRhdGEgcGF0aC4gcmluZ19pbml0aWFsX3JlcGxlbmlzaGkoKSBpcyB0aGUgb25seSB1c2VyLgogICovCiBpbnQgdnhnZV9od19jaGFubmVsX2R0cl9jb3VudChzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWwpCkBAIC0yMDYwLDcgKzIwNjAsNyBAQAogCiAJdnBhdGggPSB2cC0+dnBhdGg7CiAKLQkvKiBFbmFibGUgcHJvbWlzY291cyBtb2RlIGZvciBmdW5jdGlvbiAwIG9ubHkgKi8KKwkvKiBFbmFibGUgcHJvbWlzY3VvdXMgbW9kZSBmb3IgZnVuY3Rpb24gMCBvbmx5ICovCiAJaWYgKCEodnBhdGgtPmhsZGV2LT5hY2Nlc3NfcmlnaHRzICYKIAkJVlhHRV9IV19ERVZJQ0VfQUNDRVNTX1JJR0hUX01SUENJTSkpCiAJCXJldHVybiBWWEdFX0hXX09LOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuaCBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmgKaW5kZXggOWQ5ZGZkYS4uNmMyZmMwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuaAorKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5oCkBAIC02ODEsNyArNjgxLDcgQEAKICAqIEByeF9yZWRfZGlzY2FyZDogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgYXJlIGRpc2NhcmRlZCBiZWNhdXNlIG9mIFJFRAogICogICAgICAgICAgICAoUmFuZG9tIEVhcmx5IERpc2NhcmQpLgogICogQHJ4X3hnbWlpX2N0cmxfZXJyX2NudDogTWFpbnRhaW5zIGEgY291bnQgb2YgdW5leHBlY3RlZCBvciBtaXNwbGFjZWQgY29udHJvbAotICogICAgICAgICAgICBjaGFyYWN0ZXJzIG9jY3VyaW5nIGJldHdlZW4gdGltZXMgb2Ygbm9ybWFsIGRhdGEgdHJhbnNtaXNzaW9uCisgKiAgICAgICAgICAgIGNoYXJhY3RlcnMgb2NjdXJyaW5nIGJldHdlZW4gdGltZXMgb2Ygbm9ybWFsIGRhdGEgdHJhbnNtaXNzaW9uCiAgKiAgICAgICAgICAgIChpLmUuIG5vdCBpbmNsdWRlZCBpbiBSWF9YR01JSV9EQVRBX0VSUl9DTlQpLiBUaGlzIGNvdW50ZXIgaXMKICAqICAgICAgICAgICAgaW5jcmVtZW50ZWQgd2hlbiBlaXRoZXIgLQogICogICAgICAgICAgICAxKSBUaGUgUmVjb25jaWxpYXRpb24gU3VibGF5ZXIgKFJTKSBpcyBleHBlY3Rpbmcgb25lIGNvbnRyb2wKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMgYi9kcml2ZXJzL25ldC93YW4vY29zYS5jCmluZGV4IDEwYmFmZDUuLjZmYjZmOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYwpAQCAtMzI5LDcgKzMyOSw3IEBACiBzdGF0aWMgaW50IHJlYWRtZW0oc3RydWN0IGNvc2FfZGF0YSAqY29zYSwgY2hhciBfX3VzZXIgKmRhdGEsIGludCBhZGRyLCBpbnQgbGVuKTsKIHN0YXRpYyBpbnQgY29zYV9yZXNldF9hbmRfcmVhZF9pZChzdHJ1Y3QgY29zYV9kYXRhICpjb3NhLCBjaGFyICppZCk7CiAKLS8qIEF1eGlsbGlhcnkgZnVuY3Rpb25zICovCisvKiBBdXhpbGlhcnkgZnVuY3Rpb25zICovCiBzdGF0aWMgaW50IGdldF93YWl0X2RhdGEoc3RydWN0IGNvc2FfZGF0YSAqY29zYSk7CiBzdGF0aWMgaW50IHB1dF93YWl0X2RhdGEoc3RydWN0IGNvc2FfZGF0YSAqY29zYSwgaW50IGRhdGEpOwogc3RhdGljIGludCBwdXRoZXhudW1iZXIoc3RydWN0IGNvc2FfZGF0YSAqY29zYSwgaW50IG51bWJlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vZHNjYzQuYyBiL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jCmluZGV4IDQ1NzhlNWIuLmFjYjllYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jCkBAIC01Niw3ICs1Niw3IEBACiAgKiBJVi4gTm90ZXMKICAqIFRoZSBjdXJyZW50IGVycm9yIChYRFUsIFJGTykgcmVjb3ZlcnkgY29kZSBpcyB1bnRlc3RlZC4KICAqIFNvIGZhciwgUkRPIHRha2VzIGhpcyBSWCBjaGFubmVsIGRvd24gYW5kIHRoZSByaWdodCBzZXF1ZW5jZSB0byBlbmFibGUgaXQKLSAqIGFnYWluIGlzIHN0aWxsIGEgbWlzdGVyeS4gSWYgUkRPIGhhcHBlbnMsIHBsYW4gYSByZWJvb3QuIE1vcmUgZGV0YWlscworICogYWdhaW4gaXMgc3RpbGwgYSBteXN0ZXJ5LiBJZiBSRE8gaGFwcGVucywgcGxhbiBhIHJlYm9vdC4gTW9yZSBkZXRhaWxzCiAgKiBpbiB0aGUgY29kZSAoTkI6IGFzIHRoaXMgaGFwcGVucywgVFggc3RpbGwgd29ya3MpLgogICogRG9uJ3QgbWVzcyB0aGUgY2FibGVzIGR1cmluZyBvcGVyYXRpb24sIGVzcGVjaWFsbHkgb24gRFRFIHBvcnRzLiBJIGRvbid0CiAgKiBzdWdnZXN0IGl0IGZvciBEQ0UgZWl0aGVyIGJ1dCBhdCBsZWFzdCBvbmUgY2FuIGdldCBzb21lIG1lc3NhZ2VzIGluc3RlYWQKQEAgLTEwNjUsNyArMTA2NSw3IEBACiAKIAkvKgogCSAqIER1ZSB0byB2YXJpb3VzIGJ1Z3MsIHRoZXJlIGlzIG5vIHdheSB0byByZWxpYWJseSByZXNldCBhCi0JICogc3BlY2lmaWMgcG9ydCAobWFudWZhY3R1cmVyJ3MgZGVwZW5kYW50IHNwZWNpYWwgUENJICNSU1Qgd2lyaW5nCisJICogc3BlY2lmaWMgcG9ydCAobWFudWZhY3R1cmVyJ3MgZGVwZW5kZW50IHNwZWNpYWwgUENJICNSU1Qgd2lyaW5nCiAJICogYXBhcnQ6IGl0IGFmZmVjdHMgYWxsIHBvcnRzKS4gVGh1cyB0aGUgZGV2aWNlIGdvZXMgaW4gdGhlIGJlc3QKIAkgKiBzaWxlbnQgbW9kZSBwb3NzaWJsZSBhdCBkc2NjNF9jbG9zZSgpIHRpbWUgYW5kIHNpbXBseSBjbGFpbXMgdG8KIAkgKiBiZSB1cCBpZiBpdCdzIG9wZW5lZCBhZ2Fpbi4gSXQgc3RpbGwgaXNuJ3QgcG9zc2libGUgdG8gY2hhbmdlCkBAIC0xMjMwLDkgKzEyMzAsOSBAQAogICogICBzY2FsaW5nLiBPZiBjb3Vyc2Ugc29tZSByb3VuZGluZyBtYXkgdGFrZSBwbGFjZS4KICAqIC0gbm8gaGlnaCBzcGVlZCBtb2RlICg0ME1iL3MpLiBNYXkgYmUgdHJpdmlhbCB0byBkbyBidXQgSSBkb24ndCBoYXZlIGFuCiAgKiAgIGFwcHJvcHJpYXRlIGV4dGVybmFsIGNsb2NraW5nIGRldmljZSBmb3IgdGVzdGluZy4KLSAqIC0gbm8gdGltZS1zbG90L2Nsb2NrIG1vZGUgNTogc2hhbWVsZXNzIGxhenluZXNzLgorICogLSBubyB0aW1lLXNsb3QvY2xvY2sgbW9kZSA1OiBzaGFtZWxlc3MgbGF6aW5lc3MuCiAgKgotICogVGhlIGNsb2NrIHNpZ25hbHMgd2lyaW5nIGNhbiBiZSAoaXMgPykgbWFudWZhY3R1cmVyIGRlcGVuZGFudC4gR29vZCBsdWNrLgorICogVGhlIGNsb2NrIHNpZ25hbHMgd2lyaW5nIGNhbiBiZSAoaXMgPykgbWFudWZhY3R1cmVyIGRlcGVuZGVudC4gR29vZCBsdWNrLgogICoKICAqIEJJRyBGQVQgV0FSTklORzogaWYgdGhlIGRldmljZSBpc24ndCBwcm92aWRlZCBlbm91Z2ggY2xvY2tpbmcgc2lnbmFsLCBpdAogICogd29uJ3QgcGFzcyB0aGUgaW5pdCBzZXF1ZW5jZS4gRm9yIGV4YW1wbGUsIHN0cmFpZ2h0IGJhY2stdG8tYmFjayBEVEUgd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hvc3Rlc3Nfc3YxMS5jIGIvZHJpdmVycy9uZXQvd2FuL2hvc3Rlc3Nfc3YxMS5jCmluZGV4IDQ4ZWRjNWYuLmU4MTc1ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9ob3N0ZXNzX3N2MTEuYworKysgYi9kcml2ZXJzL25ldC93YW4vaG9zdGVzc19zdjExLmMKQEAgLTE1LDcgKzE1LDcgQEAKICAqCVRoZSBoYXJkd2FyZSBkb2VzIHRoZSBidXMgaGFuZGxpbmcgdG8gYXZvaWQgdGhlIG5lZWQgZm9yIGRlbGF5cyBiZXR3ZWVuCiAgKgl0b3VjaGluZyBjb250cm9sIHJlZ2lzdGVycy4KICAqCi0gKglQb3J0IEIgaXNudCB3aXJlZCAod2h5IC0gYmVhdHMgbWUpCisgKglQb3J0IEIgaXNuJ3Qgd2lyZWQgKHdoeSAtIGJlYXRzIG1lKQogICoKICAqCUdlbmVyaWMgSERMQyBwb3J0IENvcHlyaWdodCAoQykgMjAwOCBLcnp5c3p0b2YgSGFsYXNhIDxraGNAcG0ud2F3LnBsPgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jIGIvZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYwppbmRleCA2YzU3MWUxLi5mMWUxNjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmMKQEAgLTE3OCw3ICsxNzgsNyBAQAogICoKICAqIFRoZSByZXN1bHRpbmcgYXZlcmFnZSBjbG9jayBmcmVxdWVuY3kgKGFzc3VtaW5nIDMzLjMzMyBNSHogb3NjaWxsYXRvcikgaXM6CiAgKiBmcmVxID0gNjYuNjY2IE1IeiAvIChBICsgKEIgKyAxKSAvIChDICsgMSkpCi0gKiBtaW51bXVtIGZyZXEgPSA2Ni42NjYgTUh6IC8gKEEgKyAxKQorICogbWluaW11bSBmcmVxID0gNjYuNjY2IE1IeiAvIChBICsgMSkKICAqIG1heGltdW0gZnJlcSA9IDY2LjY2NiBNSHogLyBBCiAgKgogICogRXhhbXBsZTogQSA9IDIsIEIgPSAyLCBDID0gNywgQ0xPQ0tfQ1IgcmVnaXN0ZXIgPSAyIDw8IDIyIHwgMiA8PCAxMiB8IDcKQEAgLTIzMCw3ICsyMzAsNyBAQAogI2RlZmluZSBQS1RfUElQRV9NT0RFX1dSSVRFCQkweDU3CiAKIC8qIEhETEMgcGFja2V0IHN0YXR1cyB2YWx1ZXMgLSBkZXNjLT5zdGF0dXMgKi8KLSNkZWZpbmUgRVJSX1NIVVRET1dOCQkxIC8qIHN0b3Agb3Igc2h1dGRvd24gb2NjdXJyYW5jZSAqLworI2RlZmluZSBFUlJfU0hVVERPV04JCTEgLyogc3RvcCBvciBzaHV0ZG93biBvY2N1cnJlbmNlICovCiAjZGVmaW5lIEVSUl9IRExDX0FMSUdOCQkyIC8qIEhETEMgYWxpZ25tZW50IGVycm9yICovCiAjZGVmaW5lIEVSUl9IRExDX0ZDUwkJMyAvKiBIRExDIEZyYW1lIENoZWNrIFN1bSBlcnJvciAqLwogI2RlZmluZSBFUlJfUlhGUkVFX1FfRU1QVFkJNCAvKiBSWC1mcmVlIHF1ZXVlIGJlY2FtZSBlbXB0eSB3aGlsZSByZWNlaXZpbmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21haW4uYyBiL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21haW4uYwppbmRleCA3MGZlYjg0Li5iN2YyMzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jCkBAIC0yNCw3ICsyNCw3IEBACiAgICoKICAgKiBMaW51eCBkcml2ZXIgbm90ZXM6CiAgICogTGludXggdXNlcyB0aGUgZGV2aWNlIHN0cnVjdCBsbWNfcHJpdmF0ZSB0byBwYXNzIHByaXZhdGUgaW5mb3JtYXRpb24KLSAgKiBhcnJvdW5kLgorICAqIGFyb3VuZC4KICAgKgogICAqIFRoZSBpbml0aWFsaXphdGlvbiBwb3J0aW9uIG9mIHRoaXMgZHJpdmVyICh0aGUgbG1jX3Jlc2V0KCkgYW5kIHRoZQogICAqIGxtY19kZWNfcmVzZXQoKSBmdW5jdGlvbnMsIGFzIHdlbGwgYXMgdGhlIGxlZCBjb250cm9scyBhbmQgdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vbG1jL2xtY192YXIuaCBiL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX3Zhci5oCmluZGV4IDY1ZDAxOTcuLjAxYWQ0NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX3Zhci5oCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX3Zhci5oCkBAIC0xODAsNyArMTgwLDcgQEAKIAogCiAvKgotICogQ2FyZWZ1bGwsIGxvb2sgYXQgdGhlIGRhdGEgc2hlZXQsIHRoZXJlJ3MgbW9yZSB0byB0aGlzCisgKiBDYXJlZnVsLCBsb29rIGF0IHRoZSBkYXRhIHNoZWV0LCB0aGVyZSdzIG1vcmUgdG8gdGhpcwogICogc3RydWN0dXJlIHRoYW4gbWVldHMgdGhlIGV5ZS4gIEl0IHNob3VsZCBwcm9iYWJseSBiZToKICAqCiAgKiBzdHJ1Y3QgdHVsaXBfZGVzY190IHsKQEAgLTM4MCw3ICszODAsNyBAQAogLyogQ1NSNiBzZXR0aW5ncyAqLwogI2RlZmluZSBPUEVSQVRJT05fTU9ERSAgMHgwMDAwMDIwMCAvKiBGdWxsIER1cGxleCAgICAgICovCiAjZGVmaW5lIFBST01JU0NfTU9ERSAgICAweDAwMDAwMDQwIC8qIFByb21pc2N1b3VzIE1vZGUgKi8KLSNkZWZpbmUgUkVDSUVWRV9BTEwgICAgIDB4NDAwMDAwMDAgLyogUmVjaWV2ZSBBbGwgICAgICAqLworI2RlZmluZSBSRUNJRVZFX0FMTCAgICAgMHg0MDAwMDAwMCAvKiBSZWNlaXZlIEFsbCAgICAgICovCiAjZGVmaW5lIFBBU1NfQkFEX0ZSQU1FUyAweDAwMDAwMDA4IC8qIFBhc3MgQmFkIEZyYW1lcyAgKi8KIAogLyogRGVjIGNvbnRyb2wgcmVnaXN0ZXJzICBDU1I2IGFzIHdlbGwgKi8KQEAgLTM5OCw3ICszOTgsNyBAQAogI2RlZmluZSBUVUxJUF9DTURfUkVDRUlWRUFMTCAgICAweDQwMDAwMDAwTCAvKiAoUlcpICBSZWNlaXZlbCBhbGwgZnJhbWVzPyAqLwogI2RlZmluZSBUVUxJUF9DTURfTVVTVEJFT05FICAgICAweDAyMDAwMDAwTCAvKiAoUlcpICBNdXN0IEJlIE9uZSAoMjExNDApICovCiAjZGVmaW5lIFRVTElQX0NNRF9UWFRIUlNITERDVEwgIDB4MDA0MDAwMDBMIC8qIChSVykgIFRyYW5zbWl0IFRocmVzaG9sZCBNb2RlICgyMTE0MCkgKi8KLSNkZWZpbmUgVFVMSVBfQ01EX1NUT1JFRldEICAgICAgMHgwMDIwMDAwMEwgLyogKFJXKSAgU3RvcmUgYW5kIEZvd2FyZCAoMjExNDApICovCisjZGVmaW5lIFRVTElQX0NNRF9TVE9SRUZXRCAgICAgIDB4MDAyMDAwMDBMIC8qIChSVykgIFN0b3JlIGFuZCBGb3J3YXJkICgyMTE0MCkgKi8KICNkZWZpbmUgVFVMSVBfQ01EX05PSEVBUlRCRUFUICAgMHgwMDA4MDAwMEwgLyogKFJXKSAgTm8gSGVhcnRiZWF0ICgyMTE0MCkgKi8KICNkZWZpbmUgVFVMSVBfQ01EX1BPUlRTRUxFQ1QgICAgMHgwMDA0MDAwMEwgLyogKFJXKSAgUG9zdCBTZWxlY3QgKDEwME1iKSAoMjExNDApICovCiAjZGVmaW5lIFRVTElQX0NNRF9GVUxMRFVQTEVYICAgIDB4MDAwMDAyMDBMIC8qIChSVykgIEZ1bGwgRHVwbGV4IE1vZGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi96ODUyMzAuYyBiL2RyaXZlcnMvbmV0L3dhbi96ODUyMzAuYwppbmRleCA5Mzk1Njg2Li4wODA2MjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vejg1MjMwLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3o4NTIzMC5jCkBAIC01NDIsNyArNTQyLDcgQEAKIAkJejg1MzBfdHgoY2hhbik7CiAJCXJldHVybjsKIAl9Ci0JLyogVGhpcyBzaG91bGRudCBvY2N1ciBpbiBETUEgbW9kZSAqLworCS8qIFRoaXMgc2hvdWxkbid0IG9jY3VyIGluIERNQSBtb2RlICovCiAJcHJpbnRrKEtFUk5fRVJSICJETUEgdHggLSBib2d1cyBldmVudCFcbiIpOwogCXo4NTMwX3R4KGNoYW4pOwogfQpAQCAtMTIxOSw3ICsxMjE5LDcgQEAKICAqCUBpbzogdGhlIHBvcnQgdmFsdWUgaW4gcXVlc3Rpb24KICAqCiAgKglEZXNjcmliZSBhIFo4NTMwIGluIGEgc3RhbmRhcmQgZm9ybWF0LiBXZSBtdXN0IHBhc3MgdGhlIEkvTyBhcwotICoJdGhlIHBvcnQgb2Zmc2V0IGlzbnQgcHJlZGljdGFibGUuIFRoZSBtYWluIHJlYXNvbiBmb3IgdGhpcyBmdW5jdGlvbgorICoJdGhlIHBvcnQgb2Zmc2V0IGlzbid0IHByZWRpY3RhYmxlLiBUaGUgbWFpbiByZWFzb24gZm9yIHRoaXMgZnVuY3Rpb24KICAqCWlzIHRvIHRyeSBhbmQgZ2V0IGEgY29tbW9uIGZvcm1hdCBvZiByZXBvcnQuCiAgKi8KIApAQCAtMTU4OCw3ICsxNTg4LDcgQEAKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJCiAJCS8qCi0JCSAqCUNvbXBsZXRlIHRoaXMgRE1BLiBOZWNjZXNzYXJ5IHRvIGZpbmQgdGhlIGxlbmd0aAorCQkgKglDb21wbGV0ZSB0aGlzIERNQS4gTmVjZXNzYXJ5IHRvIGZpbmQgdGhlIGxlbmd0aAogCQkgKi8JCQogCQkgCiAJCWZsYWdzPWNsYWltX2RtYV9sb2NrKCk7CkBAIC0xNjU3LDcgKzE2NTcsNyBAQAogCQkgKglmaWZvIGxlbmd0aCBmb3IgdGhpcy4gVGh1cyB3ZSB3YW50IHRvIGZsaXAgdG8gdGhlIG5ldwogCQkgKglidWZmZXIgYW5kIHRoZW4gbWVzcyBhcm91bmQgY29weWluZyBhbmQgYWxsb2NhdGluZwogCQkgKgl0aGluZ3MuIEZvciB0aGUgY3VycmVudCBjYXNlIGl0IGRvZXNuJ3QgbWF0dGVyIGJ1dAotCQkgKglpZiB5b3UgYnVpbGQgYSBzeXN0ZW0gd2hlcmUgdGhlIHN5bmMgaXJxIGlzbnQgYmxvY2tlZAorCQkgKglpZiB5b3UgYnVpbGQgYSBzeXN0ZW0gd2hlcmUgdGhlIHN5bmMgaXJxIGlzbid0IGJsb2NrZWQKIAkJICoJYnkgdGhlIGtlcm5lbCBJUlEgZGlzYWJsZSB0aGVuIHlvdSBuZWVkIG9ubHkgYmxvY2sgdGhlCiAJCSAqCXN5bmMgSVJRIGZvciB0aGUgUlRfTE9DSyBhcmVhLgogCQkgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2NvbnRyb2wuYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9jb250cm9sLmMKaW5kZXggMTJiODRlZC4uNzI3ZDcyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2NvbnRyb2wuYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vY29udHJvbC5jCkBAIC0zNzgsNyArMzc4LDcgQEAKICAqIHRoZSBkZXZpY2UncyBzdGF0ZSBhcyBzb21ldGltZXMgd2UgbmVlZCB0byBkbyBhIGxpbmstcmVuZXcgKHRoZSBCUwogICogd2FudHMgdXMgdG8gcmVuZXcgYSBESENQIGxlYXNlLCBmb3IgZXhhbXBsZSkuCiAgKgotICogSW4gZmFjdCwgZG9jIHNheXMgdGhhdCBldmVyeXRpbWUgd2UgZ2V0IGEgbGluay11cCwgd2Ugc2hvdWxkIGRvIGEKKyAqIEluIGZhY3QsIGRvYyBzYXlzIHRoYXQgZXZlcnkgdGltZSB3ZSBnZXQgYSBsaW5rLXVwLCB3ZSBzaG91bGQgZG8gYQogICogREhDUCBuZWdvdGlhdGlvbi4uLgogICovCiBzdGF0aWMKQEAgLTY3NSw3ICs2NzUsNyBAQAogICogIC0gdGhlIGFjayBtZXNzYWdlIHdhc24ndCBmb3JtYXR0ZWQgY29ycmVjdGx5CiAgKgogICogVGhlIHJldHVybmVkIHNrYiBoYXMgYmVlbiBhbGxvY2F0ZWQgd2l0aCB3aW1heF9tc2dfdG9fdXNlcl9hbGxvYygpLAotICogaXQgY29udGFpbnMgdGhlIHJlcG9uc2UgaW4gYSBuZXRsaW5rIGF0dHJpYnV0ZSBhbmQgaXMgcmVhZHkgdG8gYmUKKyAqIGl0IGNvbnRhaW5zIHRoZSByZXNwb25zZSBpbiBhIG5ldGxpbmsgYXR0cmlidXRlIGFuZCBpcyByZWFkeSB0byBiZQogICogcGFzc2VkIHVwIHRvIHVzZXIgc3BhY2Ugd2l0aCB3aW1heF9tc2dfdG9fdXNlcl9zZW5kKCkuIFRvIGFjY2VzcwogICogdGhlIHBheWxvYWQgYW5kIGl0cyBsZW5ndGgsIHVzZSB3aW1heF9tc2dfe2RhdGEsbGVufSgpIG9uIHRoZSBza2IuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RyaXZlci5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RyaXZlci5jCmluZGV4IDY1YmMzMzQuLjQ3Y2FlNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9kcml2ZXIuYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZHJpdmVyLmMKQEAgLTY1NCw3ICs2NTQsNyBAQAogCWlmIChyZXN1bHQgPT0gLUVVQ0xFQU4pIHsKIAkJLyoKIAkJICogV2UgY29tZSBoZXJlIGJlY2F1c2UgdGhlIHJlc2V0IGR1cmluZyBvcGVyYXRpb25hbCBtb2RlCi0JCSAqIHdhc24ndCBzdWNjZXNzdWxseSBkb25lIGFuZCBuZWVkIHRvIHByb2NlZWQgdG8gYSBidXMKKwkJICogd2Fzbid0IHN1Y2Nlc3NmdWxseSBkb25lIGFuZCBuZWVkIHRvIHByb2NlZWQgdG8gYSBidXMKIAkJICogcmVzZXQuIEZvciB0aGUgZGV2X3Jlc2V0X2hhbmRsZSgpIHRvIGJlIGFibGUgdG8gaGFuZGxlCiAJCSAqIHRoZSByZXNldCBldmVudCBsYXRlciBwcm9wZXJseSwgd2UgcmVzdG9yZSBib290X21vZGUgYmFjawogCQkgKiB0byB0aGUgc3RhdGUgYmVmb3JlIHByZXZpb3VzIHJlc2V0LiBpZToganVzdCBsaWtlIHdlIGFyZQpAQCAtNzU1LDcgKzc1NSw3IEBACiAgKiBBbGxvYyB0aGUgY29tbWFuZCBhbmQgYWNrIGJ1ZmZlcnMgZm9yIGJvb3QgbW9kZQogICoKICAqIEdldCB0aGUgYnVmZmVycyBuZWVkZWQgdG8gZGVhbCB3aXRoIGJvb3QgbW9kZSBtZXNzYWdlcy4gIFRoZXNlCi0gKiBidWZmZXJzIG5lZWQgdG8gYmUgYWxsb2NhdGVkIGJlZm9yZSB0aGUgc2RpbyByZWNpZXZlIGlycSBpcyBzZXR1cC4KKyAqIGJ1ZmZlcnMgbmVlZCB0byBiZSBhbGxvY2F0ZWQgYmVmb3JlIHRoZSBzZGlvIHJlY2VpdmUgaXJxIGlzIHNldHVwLgogICovCiBzdGF0aWMKIGludCBpMjQwMG1fYm1fYnVmX2FsbG9jKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9mdy5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2Z3LmMKaW5kZXggOGI1NWE1Yi4uODVkYWRkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2Z3LmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2Z3LmMKQEAgLTU0LDcgKzU0LDcgQEAKICAqIGVuZHBvaW50IGFuZCByZWFkIGZyb20gaXQgaW4gdGhlIG5vdGlmaWNhdGlvbiBlbmRwb2ludC4gSW4gU0RJTyB3ZQogICogdGFsayB0byBpdCB2aWEgdGhlIHdyaXRlIGFkZHJlc3MgYW5kIHJlYWQgZnJvbSB0aGUgcmVhZCBhZGRyZXNzLgogICoKLSAqIFVwb24gZW50cmFuY2UgdG8gYm9vdCBtb2RlLCB0aGUgZGV2aWNlIHNlbmRzIChwcmVjZWVkZWQgd2l0aCBhIGZldworICogVXBvbiBlbnRyYW5jZSB0byBib290IG1vZGUsIHRoZSBkZXZpY2Ugc2VuZHMgKHByZWNlZGVkIHdpdGggYSBmZXcKICAqIHplcm8gbGVuZ3RoIHBhY2tldHMgKFpMUHMpIG9uIHRoZSBub3RpZmljYXRpb24gZW5kcG9pbnQgaW4gVVNCKSBhCiAgKiByZWJvb3QgYmFya2VyICg0IGxlMzIgd29yZHMgd2l0aCB0aGUgc2FtZSB2YWx1ZSkuIFdlIGFjayBpdCBieQogICogc2VuZGluZyB0aGUgc2FtZSBiYXJrZXIgdG8gdGhlIGRldmljZS4gVGhlIGRldmljZSBhY2tzIHdpdGggYQpAQCAtMTU4OSw3ICsxNTg5LDcgQEAKIAkJaTI0MDBtLT5md19uYW1lID0gZndfbmFtZTsKIAkJcmV0ID0gaTI0MDBtX2Z3X2Jvb3RzdHJhcChpMjQwMG0sIGZ3LCBmbGFncyk7CiAJCXJlbGVhc2VfZmlybXdhcmUoZncpOwotCQlpZiAocmV0ID49IDApCS8qIGZpcm13YXJlIGxvYWRlZCBzdWNjZXNmdWxseSAqLworCQlpZiAocmV0ID49IDApCS8qIGZpcm13YXJlIGxvYWRlZCBzdWNjZXNzZnVsbHkgKi8KIAkJCWJyZWFrOwogCQlpMjQwMG0tPmZ3X25hbWUgPSBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0tdXNiLmggYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vaTI0MDBtLXVzYi5oCmluZGV4IGViODAyNDMuLjY2NTBmZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0tdXNiLmgKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2kyNDAwbS11c2IuaApAQCAtMTA1LDE0ICsxMDUsMTQgQEAKICAqCiAgKiBAZWRjOiBwb2ludGVyIHRvIGVycm9yIGRlbnNpdHkgY291bnRlci4KICAqIEBtYXhfZXJyOiBtYXhpbXVtIG51bWJlciBvZiBlcnJvcnMgd2UgY2FuIGFjY2VwdCBvdmVyIHRoZSB0aW1lZnJhbWUKLSAqIEB0aW1lZnJhbWU6IGxlbmdodCBvZiB0aGUgdGltZWZyYW1lIChpbiBqaWZmaWVzKS4KKyAqIEB0aW1lZnJhbWU6IGxlbmd0aCBvZiB0aGUgdGltZWZyYW1lIChpbiBqaWZmaWVzKS4KICAqCiAgKiBSZXR1cm5zOiAhMCAxIGlmIG1heGltdW0gYWNjZXB0YWJsZSBlcnJvcnMgcGVyIHRpbWVmcmFtZSBoYXMgYmVlbgogICogICAgIGV4Y2VlZGVkLiAwIG90aGVyd2lzZS4KICAqCiAgKiBUaGlzIGlzIHdheSB0byBkZXRlcm1pbmUgaWYgdGhlIG51bWJlciBvZiBhY2NlcHRhYmxlIGVycm9ycyBwZXIgdGltZQogICogcGVyaW9kIGhhcyBiZWVuIGV4Y2VlZGVkLiBJdCBpcyBub3QgYWNjdXJhdGUgYXMgdGhlcmUgYXJlIGNhc2VzIGluIHdoaWNoCi0gKiB0aGlzIHNjaGVtZSB3aWxsIG5vdCB3b3JrLCBmb3IgZXhhbXBsZSBpZiB0aGVyZSBhcmUgcGVyaW9kaWMgb2NjdXJlbmNlcworICogdGhpcyBzY2hlbWUgd2lsbCBub3Qgd29yaywgZm9yIGV4YW1wbGUgaWYgdGhlcmUgYXJlIHBlcmlvZGljIG9jY3VycmVuY2VzCiAgKiBvZiBlcnJvcnMgdGhhdCBzdHJhZGRsZSB1cGRhdGVzIHRvIHRoZSBzdGFydCB0aW1lLiBUaGlzIHNjaGVtZSBpcwogICogc3VmZmljaWVudCBmb3Igb3VyIHVzYWdlLgogICoKQEAgLTIwNCw3ICsyMDQsNyBAQAogICogICAgIHVzYl9hdXRvcG1fZ2V0L3B1dF9pbnRlcmZhY2UoKSBiYXJyaWVycyB3aGVuIGV4ZWN1dGluZwogICogICAgIGNvbW1hbmRzLiBTZWUgZG9jIGluIGkyNDAwbXVfc3VzcGVuZCgpIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICoKLSAqIEByeF9zaXplX2F1dG9fc2hyaW5rOiBpZiB0cnVlLCB0aGUgcnhfc2l6ZSBpcyBzaHJpbmtlZAorICogQHJ4X3NpemVfYXV0b19zaHJpbms6IGlmIHRydWUsIHRoZSByeF9zaXplIGlzIHNocnVuawogICogICAgIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gdGhlIGF2ZXJhZ2Ugc2l6ZSBvZiB0aGUgcmVjZWl2ZWQKICAqICAgICB0cmFuc2FjdGlvbnMuIFRoaXMgYWxsb3dzIHRoZSByZWNlaXZlIGNvZGUgdG8gYWxsb2NhdGUgc21hbGxlcgogICogICAgIGNodW5rcyBvZiBtZW1vcnkgYW5kIHRodXMgcmVkdWNlIHByZXNzdXJlIG9uIHRoZSBtZW1vcnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0uaCBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0uaAppbmRleCAwMzBjYmZkLi41ZWFjYzY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vaTI0MDBtLmgKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2kyNDAwbS5oCkBAIC01MjYsNyArNTI2LDcgQEAKICAqCiAgKiBAYmFya2VyOiBiYXJrZXIgdHlwZSB0aGF0IHRoZSBkZXZpY2UgdXNlczsgdGhpcyBpcyBpbml0aWFsaXplZCBieQogICogICAgIGkyNDAwbV9pc19ib290X2JhcmtlcigpIHRoZSBmaXJzdCB0aW1lIGl0IGlzIGNhbGxlZC4gVGhlbiBpdAotICogICAgIHdvbid0IGNoYW5nZSBkdXJpbmcgdGhlIGxpZmUgY3ljbGUgb2YgdGhlIGRldmljZSBhbmQgZXZlcnl0aW1lCisgKiAgICAgd29uJ3QgY2hhbmdlIGR1cmluZyB0aGUgbGlmZSBjeWNsZSBvZiB0aGUgZGV2aWNlIGFuZCBldmVyeSB0aW1lCiAgKiAgICAgYSBib290IGJhcmtlciBpcyByZWNlaXZlZCwgaXQgaXMganVzdCB2ZXJpZmllZCBmb3IgaXQgYmVpbmcgdGhlCiAgKiAgICAgc2FtZS4KICAqCkBAIC05MjgsNyArOTI4LDcgQEAKIAlzdHJ1Y3QgaTI0MDBtICosIGNvbnN0IHN0cnVjdCBpMjQwMG1fdGx2X3JmX3N3aXRjaGVzX3N0YXR1cyAqKTsKIAogLyoKLSAqIEhlbHBlcnMgZm9yIGZpcm13YXJlIGJhY2t3YXJkcyBjb21wYWJpbGl0eQorICogSGVscGVycyBmb3IgZmlybXdhcmUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKICAqCiAgKiBBcyB3ZSBhaW0gdG8gc3VwcG9ydCBhdCBsZWFzdCB0aGUgZmlybXdhcmUgdmVyc2lvbiB0aGF0IHdhcwogICogcmVsZWFzZWQgd2l0aCB0aGUgcHJldmlvdXMga2VybmVsL2RyaXZlciByZWxlYXNlLCBzb21lIGNvZGUgd2lsbCBiZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL25ldGRldi5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL25ldGRldi5jCmluZGV4IDk0NzQyZTEuLjJlZGQ4ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vbmV0ZGV2LmMKQEAgLTE2Niw3ICsxNjYsNyBAQAogCWRfZm5zdGFydCgzLCBkZXYsICIod3MgJXAgaTI0MDBtICVwIHNrYiAlcClcbiIsIHdzLCBpMjQwMG0sIHNrYik7CiAJcmVzdWx0ID0gLUVJTlZBTDsKIAlpZiAoc2tiID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJXQUtFJlRYOiBza2IgZGlzc2FwZWFyZWQhXG4iKTsKKwkJZGV2X2VycihkZXYsICJXQUtFJlRYOiBza2IgZGlzYXBwZWFyZWQhXG4iKTsKIAkJZ290byBvdXRfcHV0OwogCX0KIAkvKiBJZiB3ZSBoYXZlLCBzb21laG93LCBsb3N0IHRoZSBjb25uZWN0aW9uIGFmdGVyIHRoaXMgd2FzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vb3AtcmZraWxsLmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vb3AtcmZraWxsLmMKaW5kZXggOWUwMmI5MC4uYjBkYmEzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL29wLXJma2lsbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9vcC1yZmtpbGwuYwpAQCAtMjcsNyArMjcsNyBAQAogICogLSByZXBvcnQgY2hhbmdlcyBpbiB0aGUgSFcgUkYgS2lsbCBzd2l0Y2ggW3dpdGgKICAqICAgd2ltYXhfcmZraWxsX3tzdyxod31fcmVwb3J0KCksIHdoaWNoIGhhcHBlbnMgd2hlbiB3ZSBkZXRlY3QgdGhvc2UKICAqICAgaW5kaWNhdGlvbnMgY29taW5nIHRocm91Z2ggaGFyZHdhcmUgcmVwb3J0c10uIFdlIGFsc28gZG8gaXQgb24KLSAqICAgaW5pdGlhbGl6YXRpb24gdG8gbGV0IHRoZSBzdGFjayBrbm93IHRoZSBpbnRpYWwgSFcgc3RhdGUuCisgKiAgIGluaXRpYWxpemF0aW9uIHRvIGxldCB0aGUgc3RhY2sga25vdyB0aGUgaW5pdGlhbCBIVyBzdGF0ZS4KICAqCiAgKiAtIGltcGxlbWVudCBpbmRpY2F0aW9ucyBmcm9tIHRoZSBzdGFjayB0byBjaGFuZ2UgdGhlIFNXIFJGIEtpbGwKICAqICAgc3dpdGNoIChjb21pbmcgZnJvbSBzeXNmcywgdGhlIHdpbWF4IHN0YWNrIG9yIHVzZXIgc3BhY2UpLgpAQCAtNzMsNyArNzMsNyBAQAogICogR2VuZXJpYyBOZXRsaW5rIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gYSBtZXNzYWdlIGlzIHNlbnQgZnJvbQogICogdXNlcnNwYWNlIHRvIGNoYW5nZSB0aGUgc29mdHdhcmUgUkYtS2lsbCBzd2l0Y2ggc3RhdHVzLgogICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIGRldmljZSdzIHNvZndhcmUgUkYtS2lsbCBzd2l0Y2ggc3RhdGUgdG8KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIGRldmljZSdzIHNvZnR3YXJlIFJGLUtpbGwgc3dpdGNoIHN0YXRlIHRvCiAgKiBtYXRjaCB3aGF0IGlzIHJlcXVlc3RlZC4KICAqCiAgKiBOT1RFOiB0aGUgaTI0MDBtIGhhcyBhIHN0cmljdCBzdGF0ZSBtYWNoaW5lOyB3ZSBjYW4gb25seSBzZXQgdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vcnguYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9yeC5jCmluZGV4IDg0NDEzM2IuLjJmOTRhODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9yeC5jCkBAIC0zNDksNyArMzQ5LDcgQEAKICAqCiAgKiBGb3IgcmVwb3J0czogV2UgY2FuJ3QgY2xvbmUgdGhlIG9yaWdpbmFsIHNrYiB3aGVyZSB0aGUgZGF0YSBpcwogICogYmVjYXVzZSB3ZSBuZWVkIHRvIHNlbmQgdGhpcyB1cCB2aWEgbmV0bGluazsgbmV0bGluayBoYXMgdG8gYWRkCi0gKiBoZWFkZXJzIGFuZCB3ZSBjYW4ndCBvdmVyd3JpdGUgd2hhdCdzIHByZWNlZWRpbmcgdGhlIHBheWxvYWQuLi5hcworICogaGVhZGVycyBhbmQgd2UgY2FuJ3Qgb3ZlcndyaXRlIHdoYXQncyBwcmVjZWRpbmcgdGhlIHBheWxvYWQuLi5hcwogICogaXQgaXMgYW5vdGhlciBtZXNzYWdlLiBTbyB3ZSBqdXN0IGR1cCB0aGVtLgogICovCiBzdGF0aWMKQEAgLTQyNSw3ICs0MjUsNyBAQAogICoKICAqIEFzIGluIGkyNDAwbV9yeF9jdGwoKSwgd2UgY2FuJ3QgY2xvbmUgdGhlIG9yaWdpbmFsIHNrYiB3aGVyZSB0aGUKICAqIGRhdGEgaXMgYmVjYXVzZSB3ZSBuZWVkIHRvIHNlbmQgdGhpcyB1cCB2aWEgbmV0bGluazsgbmV0bGluayBoYXMgdG8KLSAqIGFkZCBoZWFkZXJzIGFuZCB3ZSBjYW4ndCBvdmVyd3JpdGUgd2hhdCdzIHByZWNlZWRpbmcgdGhlCisgKiBhZGQgaGVhZGVycyBhbmQgd2UgY2FuJ3Qgb3ZlcndyaXRlIHdoYXQncyBwcmVjZWRpbmcgdGhlCiAgKiBwYXlsb2FkLi4uYXMgaXQgaXMgYW5vdGhlciBtZXNzYWdlLiBTbyB3ZSBqdXN0IGR1cCB0aGVtLgogICovCiBzdGF0aWMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS90eC5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3R4LmMKaW5kZXggM2Y4MTllZi4uNGIzMGVkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3R4LmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3R4LmMKQEAgLTE0OSw3ICsxNDksNyBAQAogICogKHdpdGggYSBtb3ZlZCBtZXNzYWdlIGhlYWRlciB0byBtYWtlIHN1cmUgaXQgaXMgc2l6ZS1hbGlnbmVkIHRvCiAgKiAxNiksIFRBSUwgcm9vbSB0aGF0IHdhcyB1bnVzYWJsZSAoYW5kIHRodXMgaXMgbWFya2VkIHdpdGggYSBtZXNzYWdlCiAgKiBoZWFkZXIgdGhhdCBzYXlzICdza2lwIHRoaXMnKSBhbmQgYXQgdGhlIGhlYWQgb2YgdGhlIGJ1ZmZlciwgYW4KLSAqIGltY29tcGxldGUgbWVzc2FnZSB3aXRoIGEgY291cGxlIG9mIHBheWxvYWRzLgorICogaW5jb21wbGV0ZSBtZXNzYWdlIHdpdGggYSBjb3VwbGUgb2YgcGF5bG9hZHMuCiAgKgogICogTiAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwogICogICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKQEAgLTgxOSw3ICs4MTksNyBAQAogICogdGhlIEZJRiB0aGF0IGlzIHJlYWR5IGZvciB0cmFuc21pc3Npb24uCiAgKgogICogSXQgc2V0cyB0aGUgc3RhdGUgaW4gQGkyNDAwbSB0byBpbmRpY2F0ZSB0aGUgYnVzLXNwZWNpZmljIGRyaXZlciBpcwotICogdHJhbnNmZXJpbmcgdGhhdCBtZXNzYWdlIChpMjQwMG0tPnR4X21zZ19zaXplKS4KKyAqIHRyYW5zZmVycmluZyB0aGF0IG1lc3NhZ2UgKGkyNDAwbS0+dHhfbXNnX3NpemUpLgogICoKICAqIE9uY2UgdGhlIHRyYW5zZmVyIGlzIGNvbXBsZXRlZCwgY2FsbCBpMjQwMG1fdHhfbXNnX3NlbnQoKS4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdXNiLWZ3LmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdXNiLWZ3LmMKaW5kZXggYjU4ZWM1Ni4uMWZkYTQ2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi1mdy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2ItZncuYwpAQCAtMTY5LDcgKzE2OSw3IEBACiAgKgogICogQ29tbWFuZCBjYW4gYmUgYSByYXcgY29tbWFuZCwgd2hpY2ggcmVxdWlyZXMgbm8gcHJlcGFyYXRpb24gKGFuZAogICogd2hpY2ggbWlnaHQgbm90IGV2ZW4gYmUgZm9sbG93aW5nIHRoZSBjb21tYW5kIGZvcm1hdCkuIENoZWNrcyB0aGF0Ci0gKiB0aGUgcmlnaHQgYW1vdW50IG9mIGRhdGEgd2FzIHRyYW5zZmVyZWQuCisgKiB0aGUgcmlnaHQgYW1vdW50IG9mIGRhdGEgd2FzIHRyYW5zZmVycmVkLgogICoKICAqIFRvIHNhdGlzZnkgVVNCIHJlcXVpcmVtZW50cyAobm8gb25zdGFjaywgdm1hbGxvYyBvciBpbiBkYXRhIHNlZ21lbnQKICAqIGJ1ZmZlcnMpLCB3ZSBjb3B5IHRoZSBjb21tYW5kIHRvIGkyNDAwbS0+Ym1fY21kX2J1ZiBhbmQgc2VuZCBpdCBmcm9tCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdXNiLXJ4LmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdXNiLXJ4LmMKaW5kZXggYTI2NDgzYS4uZTMyNTc2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi1yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2ItcnguYwpAQCAtNTgsNyArNTgsNyBAQAogICogICAgYSB6aWxsaW9uIHJlYWRzOyBieSBzZXJpYWxpemluZywgd2UgYXJlIHRocm90dGxpbmcuCiAgKgogICogIC0gUlggZGF0YSBwcm9jZXNzaW5nIGNhbiBnZXQgaGVhdnkgZW5vdWdoIHNvIHRoYXQgaXQgaXMgbm90Ci0gKiAgICBhcHByb3BpYXRlIGZvciBkb2luZyBpdCBpbiB0aGUgVVNCIGNhbGxiYWNrOyB0aHVzIHdlIHJ1biBpdCBpbiBhCisgKiAgICBhcHByb3ByaWF0ZSBmb3IgZG9pbmcgaXQgaW4gdGhlIFVTQiBjYWxsYmFjazsgdGh1cyB3ZSBydW4gaXQgaW4gYQogICogICAgcHJvY2VzcyBjb250ZXh0LgogICoKICAqIFdlIHByb3ZpZGUgYSByZWFkIGJ1ZmZlciBvZiBhbiBhcmJpdHJhcnkgc2l6ZSAoc2hvcnQgb2YgYSBwYWdlKTsgaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2ItdHguYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2ItdHguYwppbmRleCBjNjViOTk3Li5hYzM1N2FjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdXNiLXR4LmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi10eC5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIC8qCiAgKiBHZXQgdGhlIG5leHQgVFggbWVzc2FnZSBpbiB0aGUgVFggRklGTyBhbmQgc2VuZCBpdCB0byB0aGUgZGV2aWNlCiAgKgotICogTm90ZSB3ZSBleGl0IHRoZSBsb29wIGlmIGkyNDAwbXVfdHgoKSBmYWlsczsgdGhhdCBmdW50aW9uIG9ubHkKKyAqIE5vdGUgd2UgZXhpdCB0aGUgbG9vcCBpZiBpMjQwMG11X3R4KCkgZmFpbHM7IHRoYXQgZnVuY3Rpb24gb25seQogICogZmFpbHMgb24gaGFyZCBlcnJvciAoZmFpbGluZyB0byB0eCBhIGJ1ZmZlciBub3QgYmVpbmcgb25lIG9mIHRoZW0sCiAgKiBzZWUgaXRzIGRvYykuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCmluZGV4IDU3YTc5YjAuLjRlNWM3YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKQEAgLTE4ODQsNyArMTg4NCw3IEBACiAJLyogTWFrZSBzdXJlIHRoZSBjYXJkIGlzIGNvbmZpZ3VyZWQuCiAJICogV2lyZWxlc3MgRXh0ZW5zaW9ucyBtYXkgcG9zdHBvbmUgY29uZmlnIGNoYW5nZXMgdW50aWwgdGhlIGNhcmQKIAkgKiBpcyBvcGVuICh0byBwaXBlbGluZSBjaGFuZ2VzIGFuZCBzcGVlZC11cCBjYXJkIHNldHVwKS4gSWYKLQkgKiB0aG9zZSBjaGFuZ2VzIGFyZSBub3QgeWV0IGNvbW1pdGVkLCBkbyBpdCBub3cgLSBKZWFuIElJICovCisJICogdGhvc2UgY2hhbmdlcyBhcmUgbm90IHlldCBjb21taXR0ZWQsIGRvIGl0IG5vdyAtIEplYW4gSUkgKi8KIAlpZiAodGVzdF9iaXQoRkxBR19DT01NSVQsICZhaS0+ZmxhZ3MpKSB7CiAJCWRpc2FibGVfTUFDKGFpLCAxKTsKIAkJd3JpdGVDb25maWdSaWQoYWksIDEpOwpAQCAtMTk5Miw3ICsxOTkyLDcgQEAKIC8qCiAgKiBNYWdpYywgdGhlIGNhcmRzIGZpcm13YXJlIG5lZWRzIGEgbGVuZ3RoIGNvdW50ICgyIGJ5dGVzKSBpbiB0aGUgaG9zdCBidWZmZXIKICAqIHJpZ2h0IGFmdGVyICBUWEZJRF9IRFIuVGhlIFRYRklEX0hEUiBjb250YWlucyB0aGUgc3RhdHVzIHNob3J0IHNvIHBheWxvYWRsZW4KLSAqIGlzIGltbWVkaWF0bHkgYWZ0ZXIgaXQuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogaXMgaW1tZWRpYXRlbHkgYWZ0ZXIgaXQuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogICAgICAgICAgICAgICAgICAgICAgICAgfFRYRklESERSK1NUQVRVU3xQQVlMT0FETEVOfDgwMi4zSERSfFBBQ0tFVERBVEF8CiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwpAQCAtMjAwNiw3ICsyMDA2LDcgQEAKIAkJc2l6ZW9mKHdpZmljdGxoZHI4MDIzKSArIDIgOwogCiAJLyoKLQkgKiBGaXJtd2FyZSBhdXRvbWF0aWNseSBwdXRzIDgwMiBoZWFkZXIgb24gc28KKwkgKiBGaXJtd2FyZSBhdXRvbWF0aWNhbGx5IHB1dHMgODAyIGhlYWRlciBvbiBzbwogCSAqIHdlIGRvbid0IG5lZWQgdG8gYWNjb3VudCBmb3IgaXQgaW4gdGhlIGxlbmd0aAogCSAqLwogCWlmICh0ZXN0X2JpdChGTEFHX01JQ19DQVBBQkxFLCAmYWktPmZsYWdzKSAmJiBhaS0+bWljc3RhdHMuZW5hYmxlZCAmJgpAQCAtMjUzMSw3ICsyNTMxLDcgQEAKIC8qCiAgKiBXZSBhcmUgc2V0dGluZyB1cCB0aHJlZSB0aGluZ3MgaGVyZToKICAqIDEpIE1hcCBBVVggbWVtb3J5IGZvciBkZXNjcmlwdG9yczogUmlkLCBUeEZpZCwgb3IgUnhGaWQuCi0gKiAyKSBNYXAgUENJIG1lbW9yeSBmb3IgaXNzdWVpbmcgY29tbWFuZHMuCisgKiAyKSBNYXAgUENJIG1lbW9yeSBmb3IgaXNzdWluZyBjb21tYW5kcy4KICAqIDMpIEFsbG9jYXRlIG1lbW9yeSAoc2hhcmVkKSB0byBzZW5kIGFuZCByZWNlaXZlIGV0aGVybmV0IGZyYW1lcy4KICAqLwogc3RhdGljIGludCBtcGlfbWFwX2NhcmQoc3RydWN0IGFpcm9faW5mbyAqYWksIHN0cnVjdCBwY2lfZGV2ICpwY2kpCkBAIC0zOTQ3LDcgKzM5NDcsNyBAQAogCiAJaWYgKCBtYXhfdHJpZXMgPT0gLTEgKSB7CiAJCWFpcm9fcHJpbnRfZXJyKGFpLT5kZXYtPm5hbWUsCi0JCQkiTWF4IHRyaWVzIGV4Y2VlZGVkIHdoZW4gaXNzdWVpbmcgY29tbWFuZCIpOworCQkJIk1heCB0cmllcyBleGNlZWRlZCB3aGVuIGlzc3VpbmcgY29tbWFuZCIpOwogCQlpZiAoSU40NTAwKGFpLCBDT01NQU5EKSAmIENPTU1BTkRfQlVTWSkKIAkJCU9VVDQ1MDAoYWksIEVWQUNLLCBFVl9DTEVBUkNPTU1BTkRCVVNZKTsKIAkJcmV0dXJuIEVSUk9SOwpAQCAtNDE3Myw3ICs0MTczLDcgQEAKIH0KIAogLyogIE5vdGUsIHRoYXQgd2UgYXJlIHVzaW5nIEJBUDEgd2hpY2ggaXMgYWxzbyB1c2VkIGJ5IHRyYW5zbWl0LCBzbwotICogIG1ha2Ugc3VyZSB0aGlzIGlzbnQgY2FsbGVkIHdoZW4gYSB0cmFuc21pdCBpcyBoYXBwZW5pbmcgKi8KKyAqICBtYWtlIHN1cmUgdGhpcyBpc24ndCBjYWxsZWQgd2hlbiBhIHRyYW5zbWl0IGlzIGhhcHBlbmluZyAqLwogc3RhdGljIGludCBQQzQ1MDBfd3JpdGVyaWQoc3RydWN0IGFpcm9faW5mbyAqYWksIHUxNiByaWQsCiAJCQkgICBjb25zdCB2b2lkICpwQnVmLCBpbnQgbGVuLCBpbnQgbG9jaykKIHsKQEAgLTQ3NzYsNyArNDc3Niw3IEBACiAJCWlmICghc3RhdHNMYWJlbHNbaV0pIGNvbnRpbnVlOwogCQlpZiAoaitzdHJsZW4oc3RhdHNMYWJlbHNbaV0pKzE2PjQwOTYpIHsKIAkJCWFpcm9fcHJpbnRfd2FybihhcHJpdi0+ZGV2LT5uYW1lLAotCQkJICAgICAgICJQb3RlbnRpYWxseSBkaXNhc3Rlcm91cyBidWZmZXIgb3ZlcmZsb3cgYXZlcnRlZCEiKTsKKwkJCSAgICAgICAiUG90ZW50aWFsbHkgZGlzYXN0cm91cyBidWZmZXIgb3ZlcmZsb3cgYXZlcnRlZCEiKTsKIAkJCWJyZWFrOwogCQl9CiAJCWorPXNwcmludGYoZGF0YS0+cmJ1ZmZlcitqLCAiJXM6ICV1XG4iLCBzdGF0c0xhYmVsc1tpXSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWluLmMKaW5kZXggYjc2MWZlYy4uY2NjMmVkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWluLmMKQEAgLTk3NCw3ICs5NzQsNyBAQAogCQkJaWYgKGFyLT5yeF9mYWlsb3Zlcl9taXNzaW5nIDw9IDApIHsKIAkJCQkvKgogCQkJCSAqIG5lc3RlZCBhcjkxNzBfcnggY2FsbCEKLQkJCQkgKiB0ZXJtaW5hdGlvbiBpcyBndXJhbnRlZWQsIGV2ZW4gd2hlbiB0aGUKKwkJCQkgKiB0ZXJtaW5hdGlvbiBpcyBndWFyYW50ZWVkLCBldmVuIHdoZW4gdGhlCiAJCQkJICogY29tYmluZWQgZnJhbWUgYWxzbyBoYXZlIGEgZWxlbWVudCB3aXRoCiAJCQkJICogYSBiYWQgdGFnLgogCQkJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvcGh5LmMKaW5kZXggMGRiZmNmNy4uYWE4ZDA2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL3BoeS5jCkBAIC00MjQsNyArNDI0LDcgQEAKIAogLyoKICAqIGluaXRpYWxpemUgc29tZSBwaHkgcmVncyBmcm9tIGVlcHJvbSB2YWx1ZXMgaW4gbW9kYWxfaGVhZGVyW10KLSAqIGFjYy4gdG8gYmFuZCBhbmQgYmFuZHdpdGgKKyAqIGFjYy4gdG8gYmFuZCBhbmQgYmFuZHdpZHRoCiAgKi8KIHN0YXRpYyBpbnQgYXI5MTcwX2luaXRfcGh5X2Zyb21fZWVwcm9tKHN0cnVjdCBhcjkxNzAgKmFyLAogCQkJCWJvb2wgaXNfMmdoeiwgYm9vbCBpc180MG1oeikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hbmkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hbmkuaAppbmRleCBkMGE2NjQwLi4wMzQwMTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYW5pLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2FuaS5oCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIEFUSDVLX0FOSV9SU1NJX1RIUl9ISUdICQk0MAogI2RlZmluZSBBVEg1S19BTklfUlNTSV9USFJfTE9XCQk3CiAKLS8qIG1heGltdW0gYXZhaWxhYmUgbGV2ZWxzICovCisvKiBtYXhpbXVtIGF2YWlsYWJsZSBsZXZlbHMgKi8KICNkZWZpbmUgQVRINUtfQU5JX01BWF9GSVJTVEVQX0xWTAkyCiAjZGVmaW5lIEFUSDVLX0FOSV9NQVhfTk9JU0VfSU1NX0xWTAkxCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jCmluZGV4IDRkN2YyMWUuLjM0OWE1OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYwpAQCAtMTk1Myw3ICsxOTUzLDcgQEAKIAogI2RlZmluZSBGVURHRSBBUjVLX1RVTkVfU1dfQkVBQ09OX1JFU1AgKyAzCiAJLyogV2UgdXNlIEZVREdFIHRvIG1ha2Ugc3VyZSB0aGUgbmV4dCBUQlRUIGlzIGFoZWFkIG9mIHRoZSBjdXJyZW50IFRVLgotCSAqIFNpbmNlIHdlIGxhdGVyIHN1YnN0cmFjdCBBUjVLX1RVTkVfU1dfQkVBQ09OX1JFU1AgKDEwKSBpbiB0aGUgdGltZXIKKwkgKiBTaW5jZSB3ZSBsYXRlciBzdWJ0cmFjdCBBUjVLX1RVTkVfU1dfQkVBQ09OX1JFU1AgKDEwKSBpbiB0aGUgdGltZXIKIAkgKiBjb25maWd1cmF0aW9uIHdlIG5lZWQgdG8gbWFrZSBzdXJlIGl0IGlzIGJpZ2dlciB0aGFuIHRoYXQuICovCiAKIAlpZiAoYmNfdHNmID09IC0xKSB7CkBAIC0xOTcxLDcgKzE5NzEsNyBAQAogCQlpbnR2YWwgfD0gQVI1S19CRUFDT05fUkVTRVRfVFNGOwogCX0gZWxzZSBpZiAoYmNfdHNmID4gaHdfdHNmKSB7CiAJCS8qCi0JCSAqIGJlYWNvbiByZWNlaXZlZCwgU1cgbWVyZ2UgaGFwcGVuZCBidXQgSFcgVFNGIG5vdCB5ZXQgdXBkYXRlZC4KKwkJICogYmVhY29uIHJlY2VpdmVkLCBTVyBtZXJnZSBoYXBwZW5lZCBidXQgSFcgVFNGIG5vdCB5ZXQgdXBkYXRlZC4KIAkJICogbm90IHBvc3NpYmxlIHRvIHJlY29uZmlndXJlIHRpbWVycyB5ZXQsIGJ1dCBuZXh0IHRpbWUgd2UKIAkJICogcmVjZWl2ZSBhIGJlYWNvbiB3aXRoIHRoZSBzYW1lIEJTU0lELCB0aGUgaGFyZHdhcmUgd2lsbAogCQkgKiBhdXRvbWF0aWNhbGx5IHVwZGF0ZSB0aGUgVFNGIGFuZCB0aGVuIHdlIG5lZWQgdG8gcmVjb25maWd1cmUKQEAgLTI2NTEsNyArMjY1MSw3IEBACiAJc3luY2hyb25pemVfaXJxKHNjLT5pcnEpOwogCXN0b3BfdGFza2xldHMoc2MpOwogCi0JLyogU2F2ZSBhbmkgbW9kZSBhbmQgZGlzYWJsZSBBTkkgZHVycmluZworCS8qIFNhdmUgYW5pIG1vZGUgYW5kIGRpc2FibGUgQU5JIGR1cmluZwogCSAqIHJlc2V0LiBJZiB3ZSBkb24ndCB3ZSBtaWdodCBnZXQgZmFsc2UKIAkgKiBQSFkgZXJyb3IgaW50ZXJydXB0cy4gKi8KIAlhbmlfbW9kZSA9IGFoLT5haF9zYy0+YW5pX3N0YXRlLmFuaV9tb2RlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Rlc2MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZXNjLmMKaW5kZXggMTZiNDRmZi4uYThmY2M5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Rlc2MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZGVzYy5jCkBAIC01MSw3ICs1MSw3IEBACiAJLyoKIAkgKiBWYWxpZGF0ZSBpbnB1dAogCSAqIC0gWmVybyByZXRyaWVzIGRvbid0IG1ha2Ugc2Vuc2UuCi0JICogLSBBIHplcm8gcmF0ZSB3aWxsIHB1dCB0aGUgSFcgaW50byBhIG1vZGUgd2hlcmUgaXQgY29udGlub3VzbHkgc2VuZHMKKwkgKiAtIEEgemVybyByYXRlIHdpbGwgcHV0IHRoZSBIVyBpbnRvIGEgbW9kZSB3aGVyZSBpdCBjb250aW51b3VzbHkgc2VuZHMKIAkgKiAgIG5vaXNlIG9uIHRoZSBjaGFubmVsLCBzbyBpdCBpcyBpbXBvcnRhbnQgdG8gYXZvaWQgdGhpcy4KIAkgKi8KIAlpZiAodW5saWtlbHkodHhfdHJpZXMwID09IDApKSB7CkBAIC0xOTAsNyArMTkwLDcgQEAKIAkvKgogCSAqIFZhbGlkYXRlIGlucHV0CiAJICogLSBaZXJvIHJldHJpZXMgZG9uJ3QgbWFrZSBzZW5zZS4KLQkgKiAtIEEgemVybyByYXRlIHdpbGwgcHV0IHRoZSBIVyBpbnRvIGEgbW9kZSB3aGVyZSBpdCBjb250aW5vdXNseSBzZW5kcworCSAqIC0gQSB6ZXJvIHJhdGUgd2lsbCBwdXQgdGhlIEhXIGludG8gYSBtb2RlIHdoZXJlIGl0IGNvbnRpbnVvdXNseSBzZW5kcwogCSAqICAgbm9pc2Ugb24gdGhlIGNoYW5uZWwsIHNvIGl0IGlzIGltcG9ydGFudCB0byBhdm9pZCB0aGlzLgogCSAqLwogCWlmICh1bmxpa2VseSh0eF90cmllczAgPT0gMCkpIHsKQEAgLTMwMCw3ICszMDAsNyBAQAogCS8qCiAJICogUmF0ZXMgY2FuIGJlIDAgYXMgbG9uZyBhcyB0aGUgcmV0cnkgY291bnQgaXMgMCB0b28uCiAJICogQSB6ZXJvIHJhdGUgYW5kIG5vbnplcm8gcmV0cnkgY291bnQgd2lsbCBwdXQgdGhlIEhXIGludG8gYSBtb2RlIHdoZXJlCi0JICogaXQgY29udGlub3VzbHkgc2VuZHMgbm9pc2Ugb24gdGhlIGNoYW5uZWwsIHNvIGl0IGlzIGltcG9ydGFudCB0bworCSAqIGl0IGNvbnRpbnVvdXNseSBzZW5kcyBub2lzZSBvbiB0aGUgY2hhbm5lbCwgc28gaXQgaXMgaW1wb3J0YW50IHRvCiAJICogYXZvaWQgdGhpcy4KIAkgKi8KIAlpZiAodW5saWtlbHkoKHR4X3JhdGUxID09IDAgJiYgdHhfdHJpZXMxICE9IDApIHx8CkBAIC0zNDIsNyArMzQyLDcgQEAKIFwqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIFByb2NjZXNzIHRoZSB0eCBzdGF0dXMgZGVzY3JpcHRvciBvbiA1MjEwLzUyMTEKKyAqIFByb2Nlc3MgdGhlIHR4IHN0YXR1cyBkZXNjcmlwdG9yIG9uIDUyMTAvNTIxMQogICovCiBzdGF0aWMgaW50IGF0aDVrX2h3X3Byb2NfMndvcmRfdHhfc3RhdHVzKHN0cnVjdCBhdGg1a19odyAqYWgsCiAJCXN0cnVjdCBhdGg1a19kZXNjICpkZXNjLCBzdHJ1Y3QgYXRoNWtfdHhfc3RhdHVzICp0cykKQEAgLTM5NCw3ICszOTQsNyBAQAogfQogCiAvKgotICogUHJvY2Nlc3MgYSB0eCBzdGF0dXMgZGVzY3JpcHRvciBvbiA1MjEyCisgKiBQcm9jZXNzIGEgdHggc3RhdHVzIGRlc2NyaXB0b3Igb24gNTIxMgogICovCiBzdGF0aWMgaW50IGF0aDVrX2h3X3Byb2NfNHdvcmRfdHhfc3RhdHVzKHN0cnVjdCBhdGg1a19odyAqYWgsCiAJCXN0cnVjdCBhdGg1a19kZXNjICpkZXNjLCBzdHJ1Y3QgYXRoNWtfdHhfc3RhdHVzICp0cykKQEAgLTUxOSw3ICs1MTksNyBAQAogfQogCiAvKgotICogUHJvY2Nlc3MgdGhlIHJ4IHN0YXR1cyBkZXNjcmlwdG9yIG9uIDUyMTAvNTIxMQorICogUHJvY2VzcyB0aGUgcnggc3RhdHVzIGRlc2NyaXB0b3Igb24gNTIxMC81MjExCiAgKi8KIHN0YXRpYyBpbnQgYXRoNWtfaHdfcHJvY181MjEwX3J4X3N0YXR1cyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLAogCQlzdHJ1Y3QgYXRoNWtfZGVzYyAqZGVzYywgc3RydWN0IGF0aDVrX3J4X3N0YXR1cyAqcnMpCkBAIC02MDIsNyArNjAyLDcgQEAKIH0KIAogLyoKLSAqIFByb2NjZXNzIHRoZSByeCBzdGF0dXMgZGVzY3JpcHRvciBvbiA1MjEyCisgKiBQcm9jZXNzIHRoZSByeCBzdGF0dXMgZGVzY3JpcHRvciBvbiA1MjEyCiAgKi8KIHN0YXRpYyBpbnQgYXRoNWtfaHdfcHJvY181MjEyX3J4X3N0YXR1cyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLAogCQkJCQlzdHJ1Y3QgYXRoNWtfZGVzYyAqZGVzYywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9lZXByb20uYwppbmRleCBiNjU2MWY3Li5lZmI2NzJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2VlcHJvbS5jCkBAIC0xMDgwLDcgKzEwODAsNyBAQAogICoKICAqIFRvIHJlY3JlYXRlIHRoZSBjdXJ2ZXMgd2UgcmVhZCBoZXJlIHRoZSBwb2ludHMgYW5kIGludGVycG9sYXRlCiAgKiBsYXRlci4gTm90ZSB0aGF0IGluIG1vc3QgY2FzZXMgb25seSAyIChoaWdoZXIgYW5kIGxvd2VyKSBjdXJ2ZXMgYXJlCi0gKiB1c2VkIChsaWtlIFJGNTExMikgYnV0IHZlbmRvcnMgaGF2ZSB0aGUgb3BvcnR1bml0eSB0byBpbmNsdWRlIGFsbAorICogdXNlZCAobGlrZSBSRjUxMTIpIGJ1dCB2ZW5kb3JzIGhhdmUgdGhlIG9wcG9ydHVuaXR5IHRvIGluY2x1ZGUgYWxsCiAgKiA0IGN1cnZlcyBvbiBlZXByb20uIFRoZSBmaW5hbCBjdXJ2ZSAoaGlnaGVyIHBvd2VyKSBoYXMgYW4gZXh0cmEKICAqIHBvaW50IGZvciBiZXR0ZXIgYWNjdXJhY3kgbGlrZSBSRjUxMTIuCiAgKi8KQEAgLTEzMDIsNyArMTMwMiw3IEBACiAJCQkvKgogCQkJICogUGQgZ2FpbiAwIGlzIG5vdCB0aGUgbGFzdCBwZCBnYWluCiAJCQkgKiBzbyBpdCBvbmx5IGhhcyAyIHBkIHBvaW50cy4KLQkJCSAqIENvbnRpbnVlIHdpaCBwZCBnYWluIDEuCisJCQkgKiBDb250aW51ZSB3aXRoIHBkIGdhaW4gMS4KIAkJCSAqLwogCQkJcGNpbmZvLT5wd3JfaVsxXSA9ICh2YWwgPj4gMTApICYgMHgxZjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjaS5jCmluZGV4IDY2NTk4YTAuLjNjNDQ2ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGNpLmMKQEAgLTU3LDcgKzU3LDcgQEAKIAkqY3N6ID0gKGludCl1OHRtcDsKIAogCS8qCi0JICogVGhpcyBjaGVjayB3YXMgcHV0IGluIHRvIGF2b2lkICJ1bnBsZXNhbnQiIGNvbnNlcXVlbmNlcyBpZgorCSAqIFRoaXMgY2hlY2sgd2FzIHB1dCBpbiB0byBhdm9pZCAidW5wbGVhc2FudCIgY29uc2VxdWVuY2VzIGlmCiAJICogdGhlIGJvb3Ryb20gaGFzIG5vdCBmdWxseSBpbml0aWFsaXplZCBhbGwgUENJIGRldmljZXMuCiAJICogU29tZXRpbWVzIHRoZSBjYWNoZSBsaW5lIHNpemUgcmVnaXN0ZXIgaXMgbm90IHNldAogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjdS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjdS5jCmluZGV4IGE3MDI4MTcuLmQ5YjNmODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY3UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGN1LmMKQEAgLTQ3Miw3ICs0NzIsNyBAQAogCX0KIAogCS8qCi0JICogVGhlIEFSNTIxMCB1c2VzIHByb21pc2NvdXMgbW9kZSB0byBkZXRlY3QgcmFkYXIgYWN0aXZpdHkKKwkgKiBUaGUgQVI1MjEwIHVzZXMgcHJvbWlzY3VvdXMgbW9kZSB0byBkZXRlY3QgcmFkYXIgYWN0aXZpdHkKIAkgKi8KIAlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTAgJiYKIAkJCShmaWx0ZXIgJiBBUjVLX1JYX0ZJTFRFUl9SQURBUkVSUikpIHsKQEAgLTcwNiw4ICs3MDYsOCBAQAogICogVGhlIG5lZWQgZm9yIHRoaXMgZnVuY3Rpb24gYXJpc2VzIGZyb20gdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIDQgc2VwYXJhdGUKICAqIEhXIHRpbWVyIHJlZ2lzdGVycyAoVElNRVIwIC0gVElNRVIzKSwgd2hpY2ggYXJlIGNsb3NlbHkgcmVsYXRlZCB0byB0aGUKICAqIG5leHQgYmVhY29uIHRhcmdldCB0aW1lIChOQlRUKSwgYW5kIHRoYXQgdGhlIEhXIHVwZGF0ZXMgdGhlc2UgdGltZXJzCi0gKiBzZXBlcmF0ZWx5IGJhc2VkIG9uIHRoZSBjdXJyZW50IFRTRiB2YWx1ZS4gVGhlIGhhcmR3YXJlIGluY3JlbWVudHMgZWFjaAotICogdGltZXIgYnkgdGhlIGJlYWNvbiBpbnRlcnZhbCwgd2hlbiB0aGUgbG9jYWwgVFNGIGNvdmVydGVkIHRvIFRVIGlzIGVxdWFsCisgKiBzZXBhcmF0ZWx5IGJhc2VkIG9uIHRoZSBjdXJyZW50IFRTRiB2YWx1ZS4gVGhlIGhhcmR3YXJlIGluY3JlbWVudHMgZWFjaAorICogdGltZXIgYnkgdGhlIGJlYWNvbiBpbnRlcnZhbCwgd2hlbiB0aGUgbG9jYWwgVFNGIGNvbnZlcnRlZCB0byBUVSBpcyBlcXVhbAogICogdG8gdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGUgdGltZXIuCiAgKgogICogVGhlIHJlY2VwdGlvbiBvZiBhIGJlYWNvbiB3aXRoIHRoZSBzYW1lIEJTU0lEIGNhbiB1cGRhdGUgdGhlIGxvY2FsIEhXIFRTRgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BoeS5jCmluZGV4IDYyY2UyZjQuLjU1NDQxOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGh5LmMKQEAgLTMzNSwxMSArMzM1LDExIEBACiAgKiBodHRwOi8vbWFkd2lmaS1wcm9qZWN0Lm9yZy90aWNrZXQvMTY1OQogICogd2l0aCB2YXJpb3VzIG1lYXN1cmVtZW50cyBhbmQgZGlhZ3JhbXMKICAqCi0gKiBUT0RPOiBEZWFsIHdpdGggcG93ZXIgZHJvcHMgZHVlIHRvIHByb2JlcyBieSBzZXR0aW5nIGFuIGFwcm9wcmlhdGUKKyAqIFRPRE86IERlYWwgd2l0aCBwb3dlciBkcm9wcyBkdWUgdG8gcHJvYmVzIGJ5IHNldHRpbmcgYW4gYXBwcm9wcmlhdGUKICAqIHR4IHBvd2VyIG9uIHRoZSBwcm9iZSBwYWNrZXRzICEgTWFrZSB0aGlzIHBhcnQgb2YgdGhlIGNhbGlicmF0aW9uIHByb2Nlc3MuCiAgKi8KIAotLyogSW5pdGlhbGl6ZSBhaF9nYWluIGR1cnJpbmcgYXR0YWNoICovCisvKiBJbml0aWFsaXplIGFoX2dhaW4gZHVyaW5nIGF0dGFjaCAqLwogaW50IGF0aDVrX2h3X3JmZ2Fpbl9vcHRfaW5pdChzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogewogCS8qIEluaXRpYWxpemUgdGhlIGdhaW4gb3B0aW1pemF0aW9uIHZhbHVlcyAqLwpAQCAtMTA0OSw3ICsxMDQ5LDcgQEAKIFwqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvbnZlcnRpb24gbmVlZGVkIGZvciBSRjUxMTAKKyAqIENvbnZlcnNpb24gbmVlZGVkIGZvciBSRjUxMTAKICAqLwogc3RhdGljIHUzMiBhdGg1a19od19yZjUxMTBfY2hhbjJhdGhjaGFuKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCkKIHsKQEAgLTEwODgsNyArMTA4OCw3IEBACiB9CiAKIC8qCi0gKiBDb252ZXJ0aW9uIG5lZWRlZCBmb3IgNTExMQorICogQ29udmVyc2lvbiBuZWVkZWQgZm9yIDUxMTEKICAqLwogc3RhdGljIGludCBhdGg1a19od19yZjUxMTFfY2hhbjJhdGhjaGFuKHVuc2lnbmVkIGludCBpZWVlLAogCQlzdHJ1Y3QgYXRoNWtfYXRoY2hhbl8yZ2h6ICphdGhjaGFuKQpAQCAtMjIwMSw3ICsyMjAxLDcgQEAKIC8qCiAgKiBHZXQgdGhlIHN1cnJvdW5kaW5nIHBlci1jaGFubmVsIHBvd2VyIGNhbGlicmF0aW9uIHBpZXJzCiAgKiBmb3IgYSBnaXZlbiBmcmVxdWVuY3kgc28gdGhhdCB3ZSBjYW4gaW50ZXJwb2xhdGUgYmV0d2VlbgotICogdGhlbSBhbmQgY29tZSB1cCB3aXRoIGFuIGFwcm9wcmlhdGUgZGF0YXNldCBmb3Igb3VyIGN1cnJlbnQKKyAqIHRoZW0gYW5kIGNvbWUgdXAgd2l0aCBhbiBhcHByb3ByaWF0ZSBkYXRhc2V0IGZvciBvdXIgY3VycmVudAogICogY2hhbm5lbC4KICAqLwogc3RhdGljIHZvaWQKQEAgLTI2MTgsNyArMjYxOCw3IEBACiAvKgogICogU2V0IHRoZSBnYWluIGJvdW5kYXJpZXMgYW5kIGNyZWF0ZSBmaW5hbCBQb3dlciB0byBQREFEQyB0YWJsZQogICoKLSAqIFdlIGNhbiBoYXZlIHVwIHRvIDQgcGQgY3VydmVzLCB3ZSBuZWVkIHRvIGRvIGEgc2ltbWlsYXIgcHJvY2VzcworICogV2UgY2FuIGhhdmUgdXAgdG8gNCBwZCBjdXJ2ZXMsIHdlIG5lZWQgdG8gZG8gYSBzaW1pbGFyIHByb2Nlc3MKICAqIGFzIHdlIGRvIGZvciBSRjUxMTIuIFRoaXMgdGltZSB3ZSBkb24ndCBoYXZlIGFuIGVkZ2VfZmxhZyBidXQgd2UKICAqIHNldCB0aGUgZ2FpbiBib3VuZGFyaWVzIG9uIGEgc2VwYXJhdGUgcmVnaXN0ZXIuCiAgKi8KQEAgLTI4MjYsMTMgKzI4MjYsMTMgQEAKIAl1MzIgdGFyZ2V0ID0gY2hhbm5lbC0+Y2VudGVyX2ZyZXE7CiAJaW50IHBkZywgaTsKIAotCS8qIEdldCBzdXJvdW5kaW5nIGZyZXEgcGllcnMgZm9yIHRoaXMgY2hhbm5lbCAqLworCS8qIEdldCBzdXJyb3VuZGluZyBmcmVxIHBpZXJzIGZvciB0aGlzIGNoYW5uZWwgKi8KIAlhdGg1a19nZXRfY2hhbl9wY2FsX3N1cnJvdW5kaW5nX3BpZXJzKGFoLCBjaGFubmVsLAogCQkJCQkJJnBjaW5mb19MLAogCQkJCQkJJnBjaW5mb19SKTsKIAogCS8qIExvb3Agb3ZlciBwZCBnYWluIGN1cnZlcyBvbgotCSAqIHN1cm91bmRpbmcgZnJlcSBwaWVycyBieSBpbmRleCAqLworCSAqIHN1cnJvdW5kaW5nIGZyZXEgcGllcnMgYnkgaW5kZXggKi8KIAlmb3IgKHBkZyA9IDA7IHBkZyA8IGVlLT5lZV9wZF9nYWluc1tlZV9tb2RlXTsgcGRnKyspIHsKIAogCQkvKiBGaWxsIGN1cnZlcyBpbiByZXZlcnNlIG9yZGVyCkBAIC0yOTIzLDcgKzI5MjMsNyBAQAogCQl9CiAKIAkJLyogSW50ZXJwb2xhdGUgYmV0d2VlbiBjdXJ2ZXMKLQkJICogb2Ygc3Vyb3VuZGluZyBmcmVxIHBpZXJzIHRvCisJCSAqIG9mIHN1cnJvdW5kaW5nIGZyZXEgcGllcnMgdG8KIAkJICogZ2V0IHRoZSBmaW5hbCBjdXJ2ZSBmb3IgdGhpcwogCQkgKiBwZCBnYWluLiBSZS11c2UgdG1wTCBmb3IgaW50ZXJwb2xhdGlvbgogCQkgKiBvdXRwdXQgKi8KQEAgLTI5NDcsNyArMjk0Nyw3IEBACiAKIAkvKiBGaWxsIG1pbiBhbmQgbWF4IHBvd2VyIGxldmVscyBmb3IgdGhpcwogCSAqIGNoYW5uZWwgYnkgaW50ZXJwb2xhdGluZyB0aGUgdmFsdWVzIG9uCi0JICogc3Vyb3VuZGluZyBjaGFubmVscyB0byBjb21wbGV0ZSB0aGUgZGF0YXNldCAqLworCSAqIHN1cnJvdW5kaW5nIGNoYW5uZWxzIHRvIGNvbXBsZXRlIHRoZSBkYXRhc2V0ICovCiAJYWgtPmFoX3R4cG93ZXIudHhwX21pbl9wd3IgPSBhdGg1a19nZXRfaW50ZXJwb2xhdGVkX3ZhbHVlKHRhcmdldCwKIAkJCQkJKHMxNikgcGNpbmZvX0wtPmZyZXEsCiAJCQkJCShzMTYpIHBjaW5mb19SLT5mcmVxLApAQCAtMzE3OSw3ICszMTc5LDcgQEAKIAogCS8qIEZJWE1FOiBUUEMgc2NhbGUgcmVkdWN0aW9uICovCiAKLQkvKiBHZXQgc3Vyb3VuZGluZyBjaGFubmVscyBmb3IgcGVyLXJhdGUgcG93ZXIgdGFibGUKKwkvKiBHZXQgc3Vycm91bmRpbmcgY2hhbm5lbHMgZm9yIHBlci1yYXRlIHBvd2VyIHRhYmxlCiAJICogY2FsaWJyYXRpb24gKi8KIAlhdGg1a19nZXRfcmF0ZV9wY2FsX2RhdGEoYWgsIGNoYW5uZWwsICZyYXRlX2luZm8pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVnLmgKaW5kZXggZTFjOWFiZC4uZDEyYjgyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3JlZy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9yZWcuaApAQCAtMTMyLDggKzEzMiw4IEBACiAgKiBBcyBpIGNhbiBzZWUgaW4gYXI1a19hcjUyMTBfdHhfc3RhcnQgUmV5ayB1c2VzIHNvbWUgb2YgdGhlIHZhbHVlcyBvZiBCQ1IKICAqIGZvciB0aGlzIHJlZ2lzdGVyLCBzbyBpIGd1ZXNzIFRRMVYsVFExRlYgYW5kIEJETUFFIGhhdmUgdGhlIHNhbWUgbWVhbmluZwogICogaGVyZSBhbmQgU05QL1NOQVAgbWVhbnMgInNuYXBzaG90IiAoc28gdGhpcyByZWdpc3RlciBnZXRzIHN5bmNlZCB3aXRoIEJDUikuCi0gKiBTbyBTTkFQUEVEQkNSVkFMSUQgc291bGQgYWxzbyBzdGFuZCBmb3IgInNuYXBwZWQgQkNSIC12YWx1ZXMtIHZhbGlkIiwgc28gaQotICogcmVuYW1lZCBpdCB0byBTTkFQU0hPVFNWQUxJRCB0byBtYWtlIG1vcmUgc2Vuc2UuIEkgcmVhbHkgaGF2ZSBubyBpZGVhIHdoYXQKKyAqIFNvIFNOQVBQRURCQ1JWQUxJRCBzaG91bGQgYWxzbyBzdGFuZCBmb3IgInNuYXBwZWQgQkNSIC12YWx1ZXMtIHZhbGlkIiwgc28gaQorICogcmVuYW1lZCBpdCB0byBTTkFQU0hPVFNWQUxJRCB0byBtYWtlIG1vcmUgc2Vuc2UuIEkgcmVhbGx5IGhhdmUgbm8gaWRlYSB3aGF0CiAgKiBlbHNlIGNhbiBpdCBiZS4gSSBhbHNvIHJlbmFtZWQgU05QQkNNRCB0byBTTlBBREhPQyB0byBtYXRjaCBCQ1IuCiAgKi8KICNkZWZpbmUgQVI1S19CU1IJCTB4MDAyYwkJCS8qIFJlZ2lzdGVyIEFkZHJlc3MgKi8KQEAgLTI4Myw3ICsyODMsNyBAQAogICovCiAjZGVmaW5lIEFSNUtfSVNSCQkweDAwMWMJCQkvKiBSZWdpc3RlciBBZGRyZXNzIFs1MjEwXSAqLwogI2RlZmluZSBBUjVLX1BJU1IJCTB4MDA4MAkJCS8qIFJlZ2lzdGVyIEFkZHJlc3MgWzUyMTErXSAqLwotI2RlZmluZSBBUjVLX0lTUl9SWE9LCQkweDAwMDAwMDAxCS8qIEZyYW1lIHN1Y2Nlc3NmdWx5IHJlY2lldmVkICovCisjZGVmaW5lIEFSNUtfSVNSX1JYT0sJCTB4MDAwMDAwMDEJLyogRnJhbWUgc3VjY2Vzc2Z1bHkgcmVjZWl2ZWQgKi8KICNkZWZpbmUgQVI1S19JU1JfUlhERVNDCQkweDAwMDAwMDAyCS8qIFJYIGRlc2NyaXB0b3IgcmVxdWVzdCAqLwogI2RlZmluZSBBUjVLX0lTUl9SWEVSUgkJMHgwMDAwMDAwNAkvKiBSZWNlaXZlIGVycm9yICovCiAjZGVmaW5lIEFSNUtfSVNSX1JYTk9GUk0JMHgwMDAwMDAwOAkvKiBObyBmcmFtZSByZWNlaXZlZCAocmVjZWl2ZSB0aW1lb3V0KSAqLwpAQCAtMzcyLDEyICszNzIsMTIgQEAKIC8qCiAgKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlcnMKICAqCi0gKiBBcyB3aGl0aCBJU1JzIDUyMTAgaGFzIG9uZSBJTVIgKEFSNUtfSU1SKSBhbmQgNTIxMS81MjEyIGhhcyBvbmUgcHJpbWFyeQorICogQXMgd2l0aCBJU1JzIDUyMTAgaGFzIG9uZSBJTVIgKEFSNUtfSU1SKSBhbmQgNTIxMS81MjEyIGhhcyBvbmUgcHJpbWFyeQogICogKEFSNUtfUElNUikgYW5kIDQgc2Vjb25kYXJ5IElNUnMgKEFSNUtfU0lNUngpLiBOb3RlIHRoYXQgSVNSL0lNUiBmbGFncyBtYXRjaC4KICAqLwogI2RlZmluZQlBUjVLX0lNUgkJMHgwMDIwCQkJLyogUmVnaXN0ZXIgQWRkcmVzcyBbNTIxMF0gKi8KICNkZWZpbmUgQVI1S19QSU1SCQkweDAwYTAJCQkvKiBSZWdpc3RlciBBZGRyZXNzIFs1MjExK10gKi8KLSNkZWZpbmUgQVI1S19JTVJfUlhPSwkJMHgwMDAwMDAwMQkvKiBGcmFtZSBzdWNjZXNzZnVseSByZWNpZXZlZCovCisjZGVmaW5lIEFSNUtfSU1SX1JYT0sJCTB4MDAwMDAwMDEJLyogRnJhbWUgc3VjY2Vzc2Z1bHkgcmVjZWl2ZWQqLwogI2RlZmluZSBBUjVLX0lNUl9SWERFU0MJCTB4MDAwMDAwMDIJLyogUlggZGVzY3JpcHRvciByZXF1ZXN0Ki8KICNkZWZpbmUgQVI1S19JTVJfUlhFUlIJCTB4MDAwMDAwMDQJLyogUmVjZWl2ZSBlcnJvciovCiAjZGVmaW5lIEFSNUtfSU1SX1JYTk9GUk0JMHgwMDAwMDAwOAkvKiBObyBmcmFtZSByZWNlaXZlZCAocmVjZWl2ZSB0aW1lb3V0KSovCkBAIC04OTUsNyArODk1LDcgQEAKICNkZWZpbmUgQVI1S19QQ0lDRkdfU0xfSU5URU4JCTB4MDAwMDA4MDAJLyogRW5hYmxlIGludGVycnVwdHMgd2hlbiBhc2xlZXAgKi8KICNkZWZpbmUgQVI1S19QQ0lDRkdfTEVEX0JDVEwJCTB4MDAwMDEwMDAJLyogTGVkIGJsaW5rICg/KSBbNTIxMF0gKi8KICNkZWZpbmUgQVI1S19QQ0lDRkdfUkVUUllfRklYCQkweDAwMDAxMDAwCS8qIEVuYWJsZSBwY2kgY29yZSByZXRyeSBmaXggKi8KLSNkZWZpbmUgQVI1S19QQ0lDRkdfU0xfSU5QRU4JCTB4MDAwMDIwMDAJLyogU2xlZXAgZXZlbiB3aGl0aCBwZW5kaW5nIGludGVycnVwdHMqLworI2RlZmluZSBBUjVLX1BDSUNGR19TTF9JTlBFTgkJMHgwMDAwMjAwMAkvKiBTbGVlcCBldmVuIHdpdGggcGVuZGluZyBpbnRlcnJ1cHRzKi8KICNkZWZpbmUgQVI1S19QQ0lDRkdfU1BXUl9ETgkJMHgwMDAxMDAwMAkvKiBNYXNrIGZvciBwb3dlciBzdGF0dXMgKi8KICNkZWZpbmUgQVI1S19QQ0lDRkdfTEVETU9ERQkJMHgwMDBlMDAwMAkvKiBMZWRtb2RlIFs1MjExK10gKi8KICNkZWZpbmUgQVI1S19QQ0lDRkdfTEVETU9ERV9QUk9QCTB4MDAwMDAwMDAJLyogQmxpbmsgb24gc3RhbmRhcmQgdHJhZmZpYyBbNTIxMStdICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI1MDA4X3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyNTAwOF9waHkuYwppbmRleCBmZmNmNDRhLi4xMDZjMGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI1MDA4X3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjUwMDhfcGh5LmMKQEAgLTE0Miw3ICsxNDIsNyBAQAogCiAvKioKICAqIGFyNTAwOF9od19zZXRfY2hhbm5lbCAtIHR1bmUgdG8gYSBjaGFubmVsIG9uIHRoZSBleHRlcm5hbCBBUjIxMzMvQVI1MTMzIHJhZGlvcwotICogQGFoOiBhdGhlcm9zIGhhcmR3YXJlIHN0dWN0dXJlCisgKiBAYWg6IGF0aGVyb3MgaGFyZHdhcmUgc3RydWN0dXJlCiAgKiBAY2hhbjoKICAqCiAgKiBGb3IgdGhlIGV4dGVybmFsIEFSMjEzMy9BUjUxMzMgcmFkaW9zLCB0YWtlcyB0aGUgTUh6IGNoYW5uZWwgdmFsdWUgYW5kIHNldApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfZWVwcm9tLmMKaW5kZXggNGE5MjcxOC4uNmVhZGY5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19lZXByb20uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2VlcHJvbS5jCkBAIC0zMjQwLDcgKzMyNDAsNyBAQAogCQkJZWVwID0gYXI5MDAzX2VlcHJvbV9zdHJ1Y3RfZmluZF9ieV9pZChyZWZlcmVuY2UpOwogCQkJaWYgKGVlcCA9PSBOVUxMKSB7CiAJCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfRUVQUk9NLAotCQkJCQkiY2FudCBmaW5kIHJlZmVyZW5jZSBlZXByb20gc3RydWN0ICVkXG4iLAorCQkJCQkiY2FuJ3QgZmluZCByZWZlcmVuY2UgZWVwcm9tIHN0cnVjdCAlZFxuIiwKIAkJCQkJcmVmZXJlbmNlKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYwppbmRleCBmMWI4YWY2Li4yZDEwMjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMKQEAgLTEwNDAsNyArMTA0MCw3IEBACiAJfQogCiAJcmV0ID0gYXRoOWtfaHRjX2h3X2luaXQoaGlmX2Rldi0+aHRjX2hhbmRsZSwKLQkJCQkmaGlmX2Rldi0+dWRldi0+ZGV2LCBoaWZfZGV2LT5kZXZpY2VfaWQsCisJCQkJJmludGVyZmFjZS0+ZGV2LCBoaWZfZGV2LT5kZXZpY2VfaWQsCiAJCQkJaGlmX2Rldi0+dWRldi0+cHJvZHVjdCwgaWQtPmRyaXZlcl9pbmZvKTsKIAlpZiAocmV0KSB7CiAJCXJldCA9IC1FSU5WQUw7CkBAIC0xMTU4LDcgKzExNTgsNyBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhdGg5a19oaWZfdXNiX2RyaXZlciA9IHsKLQkubmFtZSA9ICJhdGg5a19oaWZfdXNiIiwKKwkubmFtZSA9IEtCVUlMRF9NT0ROQU1FLAogCS5wcm9iZSA9IGF0aDlrX2hpZl91c2JfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPSBhdGg5a19oaWZfdXNiX2Rpc2Nvbm5lY3QsCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2hzdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19oc3QuYwppbmRleCBjNDFhYjhjLi42MmUxMzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2hzdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfaHN0LmMKQEAgLTM2MCw3ICszNjAsNyBAQAogICogSFRDIE1lc3NhZ2VzIGFyZSBoYW5kbGVkIGRpcmVjdGx5IGhlcmUgYW5kIHRoZSBvYnRhaW5lZCBTS0IKICAqIGlzIGZyZWVkLgogICoKLSAqIFNldmljZSBtZXNzYWdlcyAoRGF0YSwgV01JKSBwYXNzZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcKKyAqIFNlcnZpY2UgbWVzc2FnZXMgKERhdGEsIFdNSSkgcGFzc2VkIHRvIHRoZSBjb3JyZXNwb25kaW5nCiAgKiBlbmRwb2ludCBSWCBoYW5kbGVycywgd2hpY2ggaGF2ZSB0byBmcmVlIHRoZSBTS0IuCiAgKi8KIHZvaWQgYXRoOWtfaHRjX3J4X21zZyhzdHJ1Y3QgaHRjX3RhcmdldCAqaHRjX2hhbmRsZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMKaW5kZXggMzM4YjA3NS4uYzk1YmM1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMKQEAgLTEyNTQsMTUgKzEyNTQsNiBAQAogCWFoLT50eGNoYWlubWFzayA9IGNvbW1vbi0+dHhfY2hhaW5tYXNrOwogCWFoLT5yeGNoYWlubWFzayA9IGNvbW1vbi0+cnhfY2hhaW5tYXNrOwogCi0JaWYgKChjb21tb24tPmJ1c19vcHMtPmF0aF9idXNfdHlwZSAhPSBBVEhfVVNCKSAmJiAhYWgtPmNoaXBfZnVsbHNsZWVwKSB7Ci0JCWF0aDlrX2h3X2Fib3J0cGN1cmVjdihhaCk7Ci0JCWlmICghYXRoOWtfaHdfc3RvcGRtYXJlY3YoYWgpKSB7Ci0JCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19YTUlULAotCQkJCSJGYWlsZWQgdG8gc3RvcCByZWNlaXZlIGRtYVxuIik7Ci0JCQliQ2hhbm5lbENoYW5nZSA9IGZhbHNlOwotCQl9Ci0JfQotCiAJaWYgKCFhdGg5a19od19zZXRwb3dlcihhaCwgQVRIOUtfUE1fQVdBS0UpKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtMjU0Niw2ICsyNTM3LDcgQEAKIAl7IEFSX1NSRVZfVkVSU0lPTl85Mjg3LCAgICAgICAgICI5Mjg3IiB9LAogCXsgQVJfU1JFVl9WRVJTSU9OXzkyNzEsICAgICAgICAgIjkyNzEiIH0sCiAJeyBBUl9TUkVWX1ZFUlNJT05fOTMwMCwgICAgICAgICAiOTMwMCIgfSwKKwl7IEFSX1NSRVZfVkVSU0lPTl85NDg1LCAgICAgICAgICI5NDg1IiB9LAogfTsKIAogLyogRm9yIGRldmljZXMgd2l0aCBleHRlcm5hbCByYWRpb3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuYwppbmRleCA1NjIyNTdhLi5lZGMxY2JiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5jCkBAIC03NTEsMjggKzc1MSw0NyBAQAogfQogRVhQT1JUX1NZTUJPTChhdGg5a19od19hYm9ydHBjdXJlY3YpOwogCi1ib29sIGF0aDlrX2h3X3N0b3BkbWFyZWN2KHN0cnVjdCBhdGhfaHcgKmFoKQorYm9vbCBhdGg5a19od19zdG9wZG1hcmVjdihzdHJ1Y3QgYXRoX2h3ICphaCwgYm9vbCAqcmVzZXQpCiB7CiAjZGVmaW5lIEFIX1JYX1NUT1BfRE1BX1RJTUVPVVQgMTAwMDAgICAvKiB1c2VjICovCiAjZGVmaW5lIEFIX1JYX1RJTUVfUVVBTlRVTSAgICAgMTAwICAgICAvKiB1c2VjICovCiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CisJdTMyIG1hY19zdGF0dXMsIGxhc3RfbWFjX3N0YXR1cyA9IDA7CiAJaW50IGk7CiAKKwkvKiBFbmFibGUgYWNjZXNzIHRvIHRoZSBETUEgb2JzZXJ2YXRpb24gYnVzICovCisJUkVHX1dSSVRFKGFoLCBBUl9NQUNNSVNDLAorCQkgICgoQVJfTUFDTUlTQ19ETUFfT0JTX0xJTkVfOCA8PCBBUl9NQUNNSVNDX0RNQV9PQlNfUykgfAorCQkgICAoQVJfTUFDTUlTQ19NSVNDX09CU19CVVNfMSA8PAorCQkgICAgQVJfTUFDTUlTQ19NSVNDX09CU19CVVNfTVNCX1MpKSk7CisKIAlSRUdfV1JJVEUoYWgsIEFSX0NSLCBBUl9DUl9SWEQpOwogCiAJLyogV2FpdCBmb3IgcnggZW5hYmxlIGJpdCB0byBnbyBsb3cgKi8KIAlmb3IgKGkgPSBBSF9SWF9TVE9QX0RNQV9USU1FT1VUIC8gQUhfVElNRV9RVUFOVFVNOyBpICE9IDA7IGktLSkgewogCQlpZiAoKFJFR19SRUFEKGFoLCBBUl9DUikgJiBBUl9DUl9SWEUpID09IDApCiAJCQlicmVhazsKKworCQlpZiAoIUFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkpIHsKKwkJCW1hY19zdGF0dXMgPSBSRUdfUkVBRChhaCwgQVJfRE1BREJHXzcpICYgMHg3ZjA7CisJCQlpZiAobWFjX3N0YXR1cyA9PSAweDFjMCAmJiBtYWNfc3RhdHVzID09IGxhc3RfbWFjX3N0YXR1cykgeworCQkJCSpyZXNldCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWxhc3RfbWFjX3N0YXR1cyA9IG1hY19zdGF0dXM7CisJCX0KKwogCQl1ZGVsYXkoQUhfVElNRV9RVUFOVFVNKTsKIAl9CiAKIAlpZiAoaSA9PSAwKSB7CiAJCWF0aF9lcnIoY29tbW9uLAotCQkJIkRNQSBmYWlsZWQgdG8gc3RvcCBpbiAlZCBtcyBBUl9DUj0weCUwOHggQVJfRElBR19TVz0weCUwOHhcbiIsCisJCQkiRE1BIGZhaWxlZCB0byBzdG9wIGluICVkIG1zIEFSX0NSPTB4JTA4eCBBUl9ESUFHX1NXPTB4JTA4eCBETUFEQkdfNz0weCUwOHhcbiIsCiAJCQlBSF9SWF9TVE9QX0RNQV9USU1FT1VUIC8gMTAwMCwKIAkJCVJFR19SRUFEKGFoLCBBUl9DUiksCi0JCQlSRUdfUkVBRChhaCwgQVJfRElBR19TVykpOworCQkJUkVHX1JFQUQoYWgsIEFSX0RJQUdfU1cpLAorCQkJUkVHX1JFQUQoYWgsIEFSX0RNQURCR183KSk7CiAJCXJldHVybiBmYWxzZTsKIAl9IGVsc2UgewogCQlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaAppbmRleCBiMmIyZmY4Li5jMmE1OTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oCkBAIC02OTUsNyArNjk1LDcgQEAKIHZvaWQgYXRoOWtfaHdfcHV0cnhidWYoc3RydWN0IGF0aF9odyAqYWgsIHUzMiByeGRwKTsKIHZvaWQgYXRoOWtfaHdfc3RhcnRwY3VyZWNlaXZlKHN0cnVjdCBhdGhfaHcgKmFoLCBib29sIGlzX3NjYW5uaW5nKTsKIHZvaWQgYXRoOWtfaHdfYWJvcnRwY3VyZWN2KHN0cnVjdCBhdGhfaHcgKmFoKTsKLWJvb2wgYXRoOWtfaHdfc3RvcGRtYXJlY3Yoc3RydWN0IGF0aF9odyAqYWgpOworYm9vbCBhdGg5a19od19zdG9wZG1hcmVjdihzdHJ1Y3QgYXRoX2h3ICphaCwgYm9vbCAqcmVzZXQpOwogaW50IGF0aDlrX2h3X2JlYWNvbnFfc2V0dXAoc3RydWN0IGF0aF9odyAqYWgpOwogCiAvKiBJbnRlcnJ1cHQgSGFuZGxpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCmluZGV4IGRkZGI4NWQuLjE0ODJmYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYwpAQCAtMTM3Niw3ICsxMzc2LDYgQEAKIAogCWF0aDlrX2NhbGN1bGF0ZV9pdGVyX2RhdGEoaHcsIHZpZiwgJml0ZXJfZGF0YSk7CiAKLQlhdGg5a19wc193YWtldXAoc2MpOwogCS8qIFNldCBCU1NJRCBtYXNrLiAqLwogCW1lbWNweShjb21tb24tPmJzc2lkbWFzaywgaXRlcl9kYXRhLm1hc2ssIEVUSF9BTEVOKTsKIAlhdGhfaHdfc2V0YnNzaWRtYXNrKGNvbW1vbik7CkBAIC0xNDExLDcgKzE0MTAsNiBAQAogCX0KIAogCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBhaC0+aW1hc2spOwotCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCiAJLyogU2V0IHVwIEFOSSAqLwogCWlmICgoaXRlcl9kYXRhLm5hcHMgKyBpdGVyX2RhdGEubmFkaG9jcykgPiAwKSB7CkBAIC0xNDU3LDYgKzE0NTUsNyBAQAogCXN0cnVjdCBhdGhfdmlmICphdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAJaW50IHJldCA9IDA7CiAKKwlhdGg5a19wc193YWtldXAoc2MpOwogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAKIAlzd2l0Y2ggKHZpZi0+dHlwZSkgewpAQCAtMTUwMyw2ICsxNTAyLDcgQEAKIAlhdGg5a19kb192aWZfYWRkX3NldHVwKGh3LCB2aWYpOwogb3V0OgogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNTE3LDYgKzE1MTcsNyBAQAogCiAJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLCAiQ2hhbmdlIEludGVyZmFjZVxuIik7CiAJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKwlhdGg5a19wc193YWtldXAoc2MpOwogCiAJLyogU2VlIGlmIG5ldyBpbnRlcmZhY2UgdHlwZSBpcyB2YWxpZC4gKi8KIAlpZiAoKG5ld190eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSAmJgpAQCAtMTU0Niw2ICsxNTQ3LDcgQEAKIAogCWF0aDlrX2RvX3ZpZl9hZGRfc2V0dXAoaHcsIHZpZik7CiBvdXQ6CisJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiAJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xNTU4LDYgKzE1NjAsNyBAQAogCiAJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLCAiRGV0YWNoIEludGVyZmFjZVxuIik7CiAKKwlhdGg5a19wc193YWtldXAoc2MpOwogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAKIAlzYy0+bnZpZnMtLTsKQEAgLTE1NjksNiArMTU3Miw3IEBACiAJYXRoOWtfY2FsY3VsYXRlX3N1bW1hcnlfc3RhdGUoaHcsIE5VTEwpOwogCiAJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogfQogCiBzdGF0aWMgdm9pZCBhdGg5a19lbmFibGVfcHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCkBAIC0xODA5LDYgKzE4MTMsNyBAQAogCiAJdHhxID0gc2MtPnR4LnR4cV9tYXBbcXVldWVdOwogCisJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwogCiAJbWVtc2V0KCZxaSwgMCwgc2l6ZW9mKHN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvKSk7CkBAIC0xODMyLDYgKzE4MzcsNyBAQAogCQkJYXRoX2JlYWNvbnFfY29uZmlnKHNjKTsKIAogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xODk0LDYgKzE5MDAsNyBAQAogCWludCBzbG90dGltZTsKIAlpbnQgZXJyb3I7CiAKKwlhdGg5a19wc193YWtldXAoc2MpOwogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JTU0lEKSB7CkBAIC0xOTk0LDYgKzIwMDEsNyBAQAogCX0KIAogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKIH0KIAogc3RhdGljIHU2NCBhdGg5a19nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQpAQCAtMjEzMyw2ICsyMTQxLDggQEAKIHN0YXRpYyB2b2lkIGF0aDlrX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGRyb3ApCiB7CiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAlpbnQgdGltZW91dCA9IDIwMDsgLyogbXMgKi8KIAlpbnQgaSwgajsKIApAQCAtMjE0MSw2ICsyMTUxLDEyIEBACiAKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT50eF9jb21wbGV0ZV93b3JrKTsKIAorCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9JTlZBTElEKSB7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0FOWSwgIkRldmljZSBub3QgcHJlc2VudFxuIik7CisJCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChkcm9wKQogCQl0aW1lb3V0ID0gMTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BjaS5jCmluZGV4IGU4MzEyOGMuLjljNjU0NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9wY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGNpLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIAkqY3N6ID0gKGludCl1OHRtcDsKIAogCS8qCi0JICogVGhpcyBjaGVjayB3YXMgcHV0IGluIHRvIGF2b2lkICJ1bnBsZXNhbnQiIGNvbnNlcXVlbmNlcyBpZgorCSAqIFRoaXMgY2hlY2sgd2FzIHB1dCBpbiB0byBhdm9pZCAidW5wbGVhc2FudCIgY29uc2VxdWVuY2VzIGlmCiAJICogdGhlIGJvb3Ryb20gaGFzIG5vdCBmdWxseSBpbml0aWFsaXplZCBhbGwgUENJIGRldmljZXMuCiAJICogU29tZXRpbWVzIHRoZSBjYWNoZSBsaW5lIHNpemUgcmVnaXN0ZXIgaXMgbm90IHNldAogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmMuYwppbmRleCBhMzI0MWNkLi40YzBkMzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmMuYwpAQCAtNzkyLDcgKzc5Miw3IEBACiAKIAkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9SQVRFX0NUUkxfUFJPQkU7CiAJfSBlbHNlIHsKLQkJLyogU2V0IHRoZSBjaG9vc2VuIHJhdGUuIE5vIFJUUyBmb3IgZmlyc3Qgc2VyaWVzIGVudHJ5LiAqLworCQkvKiBTZXQgdGhlIGNob3NlbiByYXRlLiBObyBSVFMgZm9yIGZpcnN0IHNlcmllcyBlbnRyeS4gKi8KIAkJYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhyYXRlX3RhYmxlLCAmcmF0ZXNbaSsrXSwgdHhyYywKIAkJCQkgICAgICAgdHJ5X3Blcl9yYXRlLCByaXgsIDApOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jCmluZGV4IGE5YzNmNDYuLmIyOWM4MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYwpAQCAtNDg2LDEyICs0ODYsMTIgQEAKIGJvb2wgYXRoX3N0b3ByZWN2KHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewogCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwotCWJvb2wgc3RvcHBlZDsKKwlib29sIHN0b3BwZWQsIHJlc2V0ID0gZmFsc2U7CiAKIAlzcGluX2xvY2tfYmgoJnNjLT5yeC5yeGJ1ZmxvY2spOwogCWF0aDlrX2h3X2Fib3J0cGN1cmVjdihhaCk7CiAJYXRoOWtfaHdfc2V0cnhmaWx0ZXIoYWgsIDApOwotCXN0b3BwZWQgPSBhdGg5a19od19zdG9wZG1hcmVjdihhaCk7CisJc3RvcHBlZCA9IGF0aDlrX2h3X3N0b3BkbWFyZWN2KGFoLCAmcmVzZXQpOwogCiAJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0VETUEpCiAJCWF0aF9lZG1hX3N0b3BfcmVjdihzYyk7CkBAIC01MDYsNyArNTA2LDcgQEAKIAkJCSJjb25mdXNpbmcgdGhlIERNQSBlbmdpbmUgd2hlbiB3ZSBzdGFydCBSWCB1cFxuIik7CiAJCUFUSF9EQkdfV0FSTl9PTl9PTkNFKCFzdG9wcGVkKTsKIAl9Ci0JcmV0dXJuIHN0b3BwZWQ7CisJcmV0dXJuIHN0b3BwZWQgJiYgIXJlc2V0OwogfQogCiB2b2lkIGF0aF9mbHVzaHJlY3Yoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYwppbmRleCAyNjczNGU1Li44OGZhN2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMKQEAgLTYyOCw4ICs2MjgsOCBAQAogCQkJCSAodTMyKUFUSF9BTVBEVV9MSU1JVF9NQVgpOwogCiAJLyoKLQkgKiBoL3cgY2FuIGFjY2VwdCBhZ2dyZWdhdGVzIHVwdG8gMTYgYml0IGxlbmd0aHMgKDY1NTM1KS4KLQkgKiBUaGUgSUUsIGhvd2V2ZXIgY2FuIGhvbGQgdXB0byA2NTUzNiwgd2hpY2ggc2hvd3MgdXAgaGVyZQorCSAqIGgvdyBjYW4gYWNjZXB0IGFnZ3JlZ2F0ZXMgdXAgdG8gMTYgYml0IGxlbmd0aHMgKDY1NTM1KS4KKwkgKiBUaGUgSUUsIGhvd2V2ZXIgY2FuIGhvbGQgdXAgdG8gNjU1MzYsIHdoaWNoIHNob3dzIHVwIGhlcmUKIAkgKiBhcyB6ZXJvLiBJZ25vcmUgNjU1MzYgc2luY2Ugd2UgIGFyZSBjb25zdHJhaW5lZCBieSBody4KIAkgKi8KIAlpZiAodGlkLT5hbi0+bWF4YW1wZHUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvY2FybDkxNzAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9jYXJsOTE3MC5oCmluZGV4IDljYWQwNjEuLjNkNGVkNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9jYXJsOTE3MC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9jYXJsOTE3MC5oCkBAIC0xNjEsNyArMTYxLDcgQEAKICAqIE5hdHVyYWxseTogVGhlIGhpZ2hlciB0aGUgbGltaXQsIHRoZSBmYXN0ZXIgdGhlIGRldmljZSBDQU4gc2VuZC4KICAqIEhvd2V2ZXIsIGV2ZW4gYSBzbGlnaHQgb3Zlci1jb21taXRtZW50IGF0IHRoZSB3cm9uZyB0aW1lIGFuZCB0aGUKICAqIGhhcmR3YXJlIGlzIGRvb21lZCB0byBzZW5kIGFsbCBhbHJlYWR5LXF1ZXVlZCBmcmFtZXMgYXQgc3Vib3B0aW1hbAotICogcmF0ZXMuIFRoaXMgaW4gdHVybiBsZWFkcyB0byBhbiBlbm91cm1vdXMgYW1vdW50IG9mIHVuc3VjY2Vzc2Z1bAorICogcmF0ZXMuIFRoaXMgaW4gdHVybiBsZWFkcyB0byBhbiBlbm9ybW91cyBhbW91bnQgb2YgdW5zdWNjZXNzZnVsCiAgKiByZXRyaWVzID0+IExhdGVuY3kgZ29lcyB1cCwgd2hlcmVhcyB0aGUgdGhyb3VnaHB1dCBnb2VzIGRvd24uIENSQVNIIQogICovCiAjZGVmaW5lIENBUkw5MTcwX05VTV9UWF9MSU1JVF9IQVJECSgoQVI5MTcwX1RYUV9ERVBUSCAqIDMpIC8gMikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9waHkuYwppbmRleCBiNmIwZGU2Li5iNmFlMGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3BoeS5jCkBAIC00MjcsNyArNDI3LDcgQEAKIAogLyoKICAqIGluaXRpYWxpemUgc29tZSBwaHkgcmVncyBmcm9tIGVlcHJvbSB2YWx1ZXMgaW4gbW9kYWxfaGVhZGVyW10KLSAqIGFjYy4gdG8gYmFuZCBhbmQgYmFuZHdpdGgKKyAqIGFjYy4gdG8gYmFuZCBhbmQgYmFuZHdpZHRoCiAgKi8KIHN0YXRpYyBpbnQgY2FybDkxNzBfaW5pdF9waHlfZnJvbV9lZXByb20oc3RydWN0IGFyOTE3MCAqYXIsCiAJCQkJYm9vbCBpc18yZ2h6LCBib29sIGlzXzQwbWh6KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvcnguYwppbmRleCA4NDg2NmE0Li5lYzIxZWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvcnguYwpAQCAtODQ5LDcgKzg0OSw3IEBACiAJCQkJLyoKIAkJCQkgKiBuZXN0ZWQgY2FybDkxNzBfcnhfc3RyZWFtIGNhbGwhCiAJCQkJICoKLQkJCQkgKiB0ZXJtaW5hdGlvbiBpcyBndXJhbnRlZWQsIGV2ZW4gd2hlbiB0aGUKKwkJCQkgKiB0ZXJtaW5hdGlvbiBpcyBndWFyYW50ZWVkLCBldmVuIHdoZW4gdGhlCiAJCQkJICogY29tYmluZWQgZnJhbWUgYWxzbyBoYXZlIGFuIGVsZW1lbnQgd2l0aAogCQkJCSAqIGEgYmFkIHRhZy4KIAkJCQkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC91c2IuYwppbmRleCBmODJjNDAwLi4yZmI1M2QwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3VzYi5jCkBAIC00MzAsNyArNDMwLDcgQEAKIAkJCSAqIFRoZSBzeXN0ZW0gaXMgdG9vIHNsb3cgdG8gY29wZSB3aXRoCiAJCQkgKiB0aGUgZW5vcm1vdXMgd29ya2xvYWQuIFdlIGhhdmUgc2ltcGx5CiAJCQkgKiBydW4gb3V0IG9mIGFjdGl2ZSByeCB1cmJzIGFuZCB0aGlzCi0JCQkgKiB1bmZvcnR1bmF0bHkgbGVhZHMgdG8gYW4gdW5wcmVkaWN0YWJsZQorCQkJICogdW5mb3J0dW5hdGVseSBsZWFkcyB0byBhbiB1bnByZWRpY3RhYmxlCiAJCQkgKiBkZXZpY2UuCiAJCQkgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvaHcuYwppbmRleCAxODNjMjgyLi5jYzExZDY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvaHcuYwpAQCAtODYsNyArODYsNyBAQAogICogSUZSQU1FLTAxOiAgMDExMAogICoKICAqIEFuIGVhc3kgZXllLWluc3BlY2l0b24gb2YgdGhpcyBhbHJlYWR5IHNob3VsZCB0ZWxsIHlvdSB0aGF0IHRoaXMgZnJhbWUKLSAqIHdpbGwgbm90IHBhc3Mgb3VyIGNoZWNrLiBUaGlzIGlzIGJlYWN1c2UgdGhlIGJzc2lkX21hc2sgdGVsbHMgdGhlCisgKiB3aWxsIG5vdCBwYXNzIG91ciBjaGVjay4gVGhpcyBpcyBiZWNhdXNlIHRoZSBic3NpZF9tYXNrIHRlbGxzIHRoZQogICogaGFyZHdhcmUgdG8gb25seSBsb29rIGF0IHRoZSBzZWNvbmQgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IGFuZCB0aGUKICAqIGNvbW1vbiBiaXQgYW1vbmdzdCB0aGUgTUFDIGFuZCBCU1NJRHMgaXMgMCwgdGhpcyBmcmFtZSBoYXMgdGhlIDJuZCBMU0IKICAqIGFzIDEsIHdoaWNoIGRvZXMgbm90IG1hdGNoIDAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3JlZ2QuYwppbmRleCBmODI4ZjI5Li4wZTFiODc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkLmMKQEAgLTI2OCw3ICsyNjgsNyBAQAogCX0KIAogCS8qCi0JICogSWYgYSBjb3VudHJ5IElFIGhhcyBiZWVuIHJlY2lldmVkIGNoZWNrIGl0cyBydWxlIGZvciB0aGlzCisJICogSWYgYSBjb3VudHJ5IElFIGhhcyBiZWVuIHJlY2VpdmVkIGNoZWNrIGl0cyBydWxlIGZvciB0aGlzCiAJICogY2hhbm5lbCBmaXJzdCBiZWZvcmUgZW5hYmxpbmcgYWN0aXZlIHNjYW4uIFRoZSBwYXNzaXZlIHNjYW4KIAkgKiB3b3VsZCBoYXZlIGJlZW4gZW5mb3JjZWQgYnkgdGhlIGluaXRpYWwgcHJvY2Vzc2luZyBvZiBvdXIKIAkgKiBjdXN0b20gcmVndWxhdG9yeSBkb21haW4uCkBAIC00NzYsNyArNDc2LDcgQEAKIAkJd2lwaHktPmZsYWdzIHw9IFdJUEhZX0ZMQUdfQ1VTVE9NX1JFR1VMQVRPUlk7CiAJfSBlbHNlIHsKIAkJLyoKLQkJICogVGhpcyBnZXRzIGFwcGxpZWQgaW4gdGhlIGNhc2Ugb2YgdGhlIGFic2Vuc2Ugb2YgQ1JEQSwKKwkJICogVGhpcyBnZXRzIGFwcGxpZWQgaW4gdGhlIGNhc2Ugb2YgdGhlIGFic2VuY2Ugb2YgQ1JEQSwKIAkJICogaXQncyBvdXIgb3duIGN1c3RvbSB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbiwgc2ltaWxhciB0bwogCQkgKiBjZmc4MDIxMSdzIGJ1dCB3ZSBlbmFibGUgcGFzc2l2ZSBzY2FubmluZy4KIAkJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZF9jb21tb24uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkX2NvbW1vbi5oCmluZGV4IDI0OGM2NzAuLjVjMmNmZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkX2NvbW1vbi5oCkBAIC0xOTUsNiArMTk1LDcgQEAKIAl7QVBMOV9XT1JMRCwgQ1RMX0VUU0ksIENUTF9FVFNJfSwKIAogCXtBUEwzX0ZDQ0EsIENUTF9GQ0MsIENUTF9GQ0N9LAorCXtBUEw3X0ZDQ0EsIENUTF9GQ0MsIENUTF9GQ0N9LAogCXtBUEwxX0VUU0lDLCBDVExfRkNDLCBDVExfRVRTSX0sCiAJe0FQTDJfRVRTSUMsIENUTF9GQ0MsIENUTF9FVFNJfSwKIAl7QVBMMl9BUExELCBDVExfRkNDLCBOT19DVEx9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKaW5kZXggNDZlMzgyZS4uMzlhMTFlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCkBAIC00MzksNyArNDM5LDcgQEAKIH07CiAKIHN0cnVjdCBhdG1lbF9wcml2YXRlIHsKLQl2b2lkICpjYXJkOyAvKiBCdXMgZGVwZW5kZW50IHN0dWN0dXJlIHZhcmllcyBmb3IgUENjYXJkICovCisJdm9pZCAqY2FyZDsgLyogQnVzIGRlcGVuZGVudCBzdHJ1Y3R1cmUgdmFyaWVzIGZvciBQQ2NhcmQgKi8KIAlpbnQgKCpwcmVzZW50X2NhbGxiYWNrKSh2b2lkICopOyAvKiBBbmQgY2FsbGJhY2sgd2hpY2ggdXNlcyBpdCAqLwogCWNoYXIgZmlybXdhcmVfaWRbMzJdOwogCUF0bWVsRldUeXBlIGZpcm13YXJlX3R5cGU7CkBAIC0zODk1LDcgKzM4OTUsNyBAQAogCiAJICAgVGhpcyByb3V0aW5lIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGluaXRpYWxpc2luZyBzb21lCiAJICAgaGFyZHdhcmUtc3BlY2lmaWMgZmllbGRzIGluIHRoZSBhdG1lbF9wcml2YXRlIHN0cnVjdHVyZSwKLQkgICBpbmNsdWRpbmcgYSBjb3B5IG9mIHRoZSBmaXJtd2FyZSdzIGhvc3RpbmZvIHN0dWN0dXJlCisJICAgaW5jbHVkaW5nIGEgY29weSBvZiB0aGUgZmlybXdhcmUncyBob3N0aW5mbyBzdHJ1Y3R1cmUKIAkgICB3aGljaCBpcyB0aGUgcm91dGUgaW50byB0aGUgcmVzdCBvZiB0aGUgZmlybXdhcmUgZGF0YXN0cnVjdHVyZXMuICovCiAKIAlzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfY3MuYwppbmRleCBjOTZlMTlkLi4wNTI2MzUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX2NzLmMKQEAgLTk5LDcgKzk5LDcgQEAKIH0KIAogLyogQ2FsbC1iYWNrIGZ1bmN0aW9uIHRvIGludGVycm9nYXRlIFBDTUNJQS1zcGVjaWZpYyBpbmZvcm1hdGlvbgotICAgYWJvdXQgdGhlIGN1cnJlbnQgZXhpc3RhbmNlIG9mIHRoZSBjYXJkICovCisgICBhYm91dCB0aGUgY3VycmVudCBleGlzdGVuY2Ugb2YgdGhlIGNhcmQgKi8KIHN0YXRpYyBpbnQgY2FyZF9wcmVzZW50KHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKWFyZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaAppbmRleCBiZDRjYjc1Li4yMjlmNDM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oCkBAIC02NDgsNyArNjQ4LDcgQEAKIAljaGFyIGVycm9yc1tCNDNfTlJfRldUWVBFU11bMTI4XTsKIAkvKiBUZW1wb3JhcnkgYnVmZmVyIGZvciBzdG9yaW5nIHRoZSBmaXJtd2FyZSBuYW1lLiAqLwogCWNoYXIgZnduYW1lWzY0XTsKLQkvKiBBIGZhdGFsIGVycm9yIG9jY3VyZWQgd2hpbGUgcmVxdWVzdGluZy4gRmlybXdhcmUgcmVxZXN0CisJLyogQSBmYXRhbCBlcnJvciBvY2N1cnJlZCB3aGlsZSByZXF1ZXN0aW5nLiBGaXJtd2FyZSByZXFlc3QKIAkgKiBjYW4gbm90IGNvbnRpbnVlLCBhcyBhbnkgb3RoZXIgcmVxZXN0IHdpbGwgYWxzbyBmYWlsLiAqLwogCWludCBmYXRhbF9mYWlsdXJlOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYwppbmRleCAzZDU1NjZlLi5mZjBmNWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5jCkBAIC0xNTM2LDcgKzE1MzYsNyBAQAogCQlkbWFhZGRyID0gbWV0YS0+ZG1hYWRkcjsKIAkJZ290byBkcm9wX3JlY3ljbGVfYnVmZmVyOwogCX0KLQlpZiAodW5saWtlbHkobGVuID4gcmluZy0+cnhfYnVmZmVyc2l6ZSkpIHsKKwlpZiAodW5saWtlbHkobGVuICsgcmluZy0+ZnJhbWVvZmZzZXQgPiByaW5nLT5yeF9idWZmZXJzaXplKSkgewogCQkvKiBUaGUgZGF0YSBkaWQgbm90IGZpdCBpbnRvIG9uZSBkZXNjcmlwdG9yIGJ1ZmZlcgogCQkgKiBhbmQgaXMgc3BsaXQgb3ZlciBtdWx0aXBsZSBidWZmZXJzLgogCQkgKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGFzIHdlIHRyeSB0byBhbGxvY2F0ZSBidWZmZXJzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmgKaW5kZXggYTAxYzIxMC4uZThhODBhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuaApAQCAtMTYzLDcgKzE2Myw3IEBACiAvKiBETUEgZW5naW5lIHR1bmluZyBrbm9icyAqLwogI2RlZmluZSBCNDNfVFhSSU5HX1NMT1RTCQkyNTYKICNkZWZpbmUgQjQzX1JYUklOR19TTE9UUwkJNjQKLSNkZWZpbmUgQjQzX0RNQTBfUlhfQlVGRkVSU0laRQkJSUVFRTgwMjExX01BWF9GUkFNRV9MRU4KKyNkZWZpbmUgQjQzX0RNQTBfUlhfQlVGRkVSU0laRQkJKEI0M19ETUEwX1JYX0ZSQU1FT0ZGU0VUICsgSUVFRTgwMjExX01BWF9GUkFNRV9MRU4pCiAKIC8qIFBvaW50ZXIgcG9pc29uICovCiAjZGVmaW5lIEI0M19ETUFfUFRSX1BPSVNPTgkJKCh2b2lkICopRVJSX1BUUigtRU5PTUVNKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCmluZGV4IDU3ZWI1YjYuLjVhZjQwZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYwpAQCAtNzIsNiArNzIsNyBAQAogTU9EVUxFX0ZJUk1XQVJFKCJiNDMvdWNvZGUxMy5mdyIpOwogTU9EVUxFX0ZJUk1XQVJFKCJiNDMvdWNvZGUxNC5mdyIpOwogTU9EVUxFX0ZJUk1XQVJFKCJiNDMvdWNvZGUxNS5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJiNDMvdWNvZGUxNl9taW1vLmZ3Iik7CiBNT0RVTEVfRklSTVdBUkUoImI0My91Y29kZTUuZnciKTsKIE1PRFVMRV9GSVJNV0FSRSgiYjQzL3Vjb2RlOS5mdyIpOwogCkBAIC00MDEwLDcgKzQwMTEsNyBAQAogCWI0M19tYWNfZW5hYmxlKGRldik7CiAJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19HRU5fSVJRX01BU0ssIGRldi0+aXJxX21hc2spOwogCi0JLyogU3RhcnQgbWFpbnRhaW5hbmNlIHdvcmsgKi8KKwkvKiBTdGFydCBtYWludGVuYW5jZSB3b3JrICovCiAJYjQzX3BlcmlvZGljX3Rhc2tzX3NldHVwKGRldik7CiAKIAliNDNfbGVkc19pbml0KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfZy5oCmluZGV4IDg1NjlmZGQuLjU0MTNjOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfZy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfZy5oCkBAIC0xNjQsNyArMTY0LDcgQEAKIAkvKiBDdXJyZW50IEludGVyZmVyZW5jZSBNaXRpZ2F0aW9uIG1vZGUgKi8KIAlpbnQgaW50ZXJmbW9kZTsKIAkvKiBTdGFjayBvZiBzYXZlZCB2YWx1ZXMgZnJvbSB0aGUgSW50ZXJmZXJlbmNlIE1pdGlnYXRpb24gY29kZS4KLQkgKiBFYWNoIHZhbHVlIGluIHRoZSBzdGFjayBpcyBsYXllZCBvdXQgYXMgZm9sbG93czoKKwkgKiBFYWNoIHZhbHVlIGluIHRoZSBzdGFjayBpcyBsYWlkIG91dCBhcyBmb2xsb3dzOgogCSAqIGJpdCAwLTExOiAgb2Zmc2V0CiAJICogYml0IDEyLTE1OiByZWdpc3RlciBJRAogCSAqIGJpdCAxNi0zMjogdmFsdWUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmgKaW5kZXggMDAxZTg0MS4uZTc4OWE4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmgKQEAgLTcwMyw3ICs3MDMsNyBAQAogI2RlZmluZSBCNDNfTlBIWV9DSEFOX0VTVEhBTkcJCQlCNDNfUEhZX04oMHgyMUQpIC8qIENoYW5uZWwgZXN0aW1hdGUgaGFuZyAqLwogI2RlZmluZSBCNDNfTlBIWV9GSU5FUlgyX0NHQwkJCUI0M19QSFlfTigweDIyMSkgLyogRmluZSBSWCAyIGNsb2NrIGdhdGUgY29udHJvbCAqLwogI2RlZmluZSAgQjQzX05QSFlfRklORVJYMl9DR0NfREVDR0MJCTB4MDAwOCAvKiBEZWNvZGUgZ2F0ZWQgY2xvY2tzICovCi0jZGVmaW5lIEI0M19OUEhZX1RYUENUTF9JTklUCQkJQjQzX1BIWV9OKDB4MjIyKSAvKiBUWCBwb3dlciBjb250cm9sbCBpbml0ICovCisjZGVmaW5lIEI0M19OUEhZX1RYUENUTF9JTklUCQkJQjQzX1BIWV9OKDB4MjIyKSAvKiBUWCBwb3dlciBjb250cm9sIGluaXQgKi8KICNkZWZpbmUgIEI0M19OUEhZX1RYUENUTF9JTklUX1BJRFhJMQkJMHgwMEZGIC8qIFBvd2VyIGluZGV4IGluaXQgMSAqLwogI2RlZmluZSAgQjQzX05QSFlfVFhQQ1RMX0lOSVRfUElEWEkxX1NISUZUCTAKICNkZWZpbmUgQjQzX05QSFlfUEFQRF9FTjAJCQlCNDNfUEhZX04oMHgyOTcpIC8qIFBBUEQgRW5hYmxlMCBUQkQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9iNDNsZWdhY3kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9iNDNsZWdhY3kuaAppbmRleCBjODFiMmY1Li4yMzU4M2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvYjQzbGVnYWN5LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2I0M2xlZ2FjeS5oCkBAIC00ODgsNyArNDg4LDcgQEAKIAkvKiBDdXJyZW50IEludGVyZmVyZW5jZSBNaXRpZ2F0aW9uIG1vZGUgKi8KIAlpbnQgaW50ZXJmbW9kZTsKIAkvKiBTdGFjayBvZiBzYXZlZCB2YWx1ZXMgZnJvbSB0aGUgSW50ZXJmZXJlbmNlIE1pdGlnYXRpb24gY29kZS4KLQkgKiBFYWNoIHZhbHVlIGluIHRoZSBzdGFjayBpcyBsYXllZCBvdXQgYXMgZm9sbG93czoKKwkgKiBFYWNoIHZhbHVlIGluIHRoZSBzdGFjayBpcyBsYWlkIG91dCBhcyBmb2xsb3dzOgogCSAqIGJpdCAwLTExOiAgb2Zmc2V0CiAJICogYml0IDEyLTE1OiByZWdpc3RlciBJRAogCSAqIGJpdCAxNi0zMjogdmFsdWUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuYwppbmRleCAxOGQ2M2Y1Li4zZDA1ZGMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5jCkBAIC0yMzU5LDcgKzIzNTksNyBAQAogfQogCiAKLS8qIFRyYW5zbGF0ZSBvdXIgbGlzdCBvZiBBY2Nlc3MgUG9pbnRzICYgU3RhdGlvbnMgdG8gYSBjYXJkIGluZGVwZW5kYW50CisvKiBUcmFuc2xhdGUgb3VyIGxpc3Qgb2YgQWNjZXNzIFBvaW50cyAmIFN0YXRpb25zIHRvIGEgY2FyZCBpbmRlcGVuZGVudAogICogZm9ybWF0IHRoYXQgdGhlIFdpcmVsZXNzIFRvb2xzIHdpbGwgdW5kZXJzdGFuZCAtIEplYW4gSUkgKi8KIGludCBwcmlzbTJfYXBfdHJhbnNsYXRlX3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgY2hhciAqYnVmZmVyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5oCmluZGV4IDY1NWNlZWIuLjMzNGUyZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmgKQEAgLTExNCw3ICsxMTQsNyBAQAogICogaGFzIHBhc3NlZCBzaW5jZSBsYXN0IHJlY2VpdmVkIGZyYW1lIGZyb20gdGhlIHN0YXRpb24sIGEgbnVsbGZ1bmMgZGF0YQogICogZnJhbWUgaXMgc2VudCB0byB0aGUgc3RhdGlvbi4gSWYgdGhpcyBmcmFtZSBpcyBub3QgYWNrbm93bGVkZ2VkIGFuZCBubyBvdGhlcgogICogZnJhbWVzIGhhdmUgYmVlbiByZWNlaXZlZCwgdGhlIHN0YXRpb24gd2lsbCBiZSBkaXNhc3NvY2lhdGVkIGFmdGVyCi0gKiBBUF9ESVNBU1NPQ19ERUxBWS4gU2ltaWxhcmlseSwgYSB0aGUgc3RhdGlvbiB3aWxsIGJlIGRlYXV0aGVudGljYXRlZCBhZnRlcgorICogQVBfRElTQVNTT0NfREVMQVkuIFNpbWlsYXJseSwgYSB0aGUgc3RhdGlvbiB3aWxsIGJlIGRlYXV0aGVudGljYXRlZCBhZnRlcgogICogQVBfREVBVVRIX0RFTEFZLiBBUF9USU1FT1VUX1JFU09MVVRJT04gaXMgdGhlIHJlc29sdXRpb24gdGhhdCBpcyB1c2VkIHdpdGgKICAqIG1heCBpbmFjdGl2aXR5IHRpbWVyLiAqLwogI2RlZmluZSBBUF9NQVhfSU5BQ1RJVklUWV9TRUMgKDUgKiA2MCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYwppbmRleCA2MDM4NjMzLi4xMmRlNDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jCkBAIC0xOTQ1LDcgKzE5NDUsNyBAQAogfQogCiAKLS8qIFRyYW5zbGF0ZSBzY2FuIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgY2FyZCB0byBhIGNhcmQgaW5kZXBlbmRhbnQKKy8qIFRyYW5zbGF0ZSBzY2FuIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgY2FyZCB0byBhIGNhcmQgaW5kZXBlbmRlbnQKICAqIGZvcm1hdCB0aGF0IHRoZSBXaXJlbGVzcyBUb29scyB3aWxsIHVuZGVyc3RhbmQgLSBKZWFuIElJICovCiBzdGF0aWMgaW5saW5lIGludCBwcmlzbTJfdHJhbnNsYXRlX3NjYW4obG9jYWxfaW5mb190ICpsb2NhbCwKIAkJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKQEAgLTIwNDMsNyArMjA0Myw3IEBACiAJCSAqIHVudGlsIHJlc3VsdHMgYXJlIHJlYWR5IGZvciB2YXJpb3VzIHJlYXNvbnMuCiAJCSAqIEZpcnN0LCBtYW5hZ2luZyB3YWl0IHF1ZXVlcyBpcyBjb21wbGV4IGFuZCByYWN5CiAJCSAqICh0aGVyZSBtYXkgYmUgbXVsdGlwbGUgc2ltdWx0YW5lb3VzIGNhbGxlcnMpLgotCQkgKiBTZWNvbmQsIHdlIGdyYWIgc29tZSBydG5ldGxpbmsgbG9jayBiZWZvcmUgY29tbWluZworCQkgKiBTZWNvbmQsIHdlIGdyYWIgc29tZSBydG5ldGxpbmsgbG9jayBiZWZvcmUgY29taW5nCiAJCSAqIGhlcmUgKGluIGRldl9pb2N0bCgpKS4KIAkJICogVGhpcmQsIHRoZSBjYWxsZXIgY2FuIHdhaXQgb24gdGhlIFdpcmVsZXNzIEV2ZW50CiAJCSAqIC0gSmVhbiBJSSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF93bGFuLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3dsYW4uaAppbmRleCAxYzY2YjNjLi44OGRjNmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3dsYW4uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3dsYW4uaApAQCAtODUzLDcgKzg1Myw3IEBACiAJc3RydWN0IHdvcmtfc3RydWN0IGNvbW1zX3F1YWxfdXBkYXRlOwogCiAJLyogUlNTSSB0byBkQm0gYWRqdXN0bWVudCAoZm9yIFJYIGRlc2NyaXB0b3IgZmllbGRzKSAqLwotCWludCByc3NpX3RvX2RCbTsgLyogc3Vic3RyYWN0IGZyb20gUlNTSSB0byBnZXQgYXBwcm94aW1hdGUgZEJtIHZhbHVlICovCisJaW50IHJzc2lfdG9fZEJtOyAvKiBzdWJ0cmFjdCBmcm9tIFJTU0kgdG8gZ2V0IGFwcHJveGltYXRlIGRCbSB2YWx1ZSAqLwogCiAJLyogQlNTIGxpc3QgLyBwcm90ZWN0ZWQgYnkgbG9jYWwtPmxvY2sgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGJzc19saXN0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuYwppbmRleCA0Yjk3ZjkxLi40NDMwNzc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuYwpAQCAtNjMsNyArNjMsNyBAQAogZmlybXdhcmUgaWYgYSBDb21tYW5kIG9yIERhdGEgaXMgYmVpbmcgc2VudC4gIElmIGl0IGlzIENvbW1hbmQsIGFsbCBvZiB0aGUKIGNvbW1hbmQgaW5mb3JtYXRpb24gaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgcGh5c2ljYWwgYWRkcmVzcyByZWZlcnJlZCB0byBieSB0aGUKIFRCRC4gIElmIGl0IGlzIERhdGEsIHRoZSBmaXJzdCBUQkQgaW5kaWNhdGVzIHRoZSB0eXBlIG9mIGRhdGEgcGFja2V0LCBudW1iZXIKLW9mIGZyYWdtZW50cywgZXRjLiAgVGhlIG5leHQgVEJEIHRoZW4gcmVmZXJycyB0byB0aGUgYWN0dWFsIHBhY2tldCBsb2NhdGlvbi4KK29mIGZyYWdtZW50cywgZXRjLiAgVGhlIG5leHQgVEJEIHRoZW4gcmVmZXJzIHRvIHRoZSBhY3R1YWwgcGFja2V0IGxvY2F0aW9uLgogCiBUaGUgVHggZmxvdyBjeWNsZSBpcyBhcyBmb2xsb3dzOgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjIwMC5jCmluZGV4IDE2MDg4MWYuLjQyYzNmZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjIwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjIwMC5jCkBAIC0xMTgxLDcgKzExODEsNyBAQAogLyoKICAqIFRoZSBmb2xsb3dpbmcgYWRkcyBhIG5ldyBhdHRyaWJ1dGUgdG8gdGhlIHN5c2ZzIHJlcHJlc2VudGF0aW9uCiAgKiBvZiB0aGlzIGRldmljZSBkcml2ZXIgKGkuZS4gYSBuZXcgZmlsZSBpbiAvc3lzL2J1cy9wY2kvZHJpdmVycy9pcHcvKQotICogdXNlZCBmb3IgY29udHJvbGluZyB0aGUgZGVidWcgbGV2ZWwuCisgKiB1c2VkIGZvciBjb250cm9sbGluZyB0aGUgZGVidWcgbGV2ZWwuCiAgKgogICogU2VlIHRoZSBsZXZlbCBkZWZpbml0aW9ucyBpbiBpcHcgZm9yIGRldGFpbHMuCiAgKi8KQEAgLTM3NjMsNyArMzc2Myw3IEBACiAKIAlxLT50eGIgPSBrbWFsbG9jKHNpemVvZihxLT50eGJbMF0pICogY291bnQsIEdGUF9LRVJORUwpOwogCWlmICghcS0+dHhiKSB7Ci0JCUlQV19FUlJPUigidm1hbGxvYyBmb3IgYXV4aWxhcnkgQkQgc3RydWN0dXJlcyBmYWlsZWRcbiIpOworCQlJUFdfRVJST1IoInZtYWxsb2MgZm9yIGF1eGlsaWFyeSBCRCBzdHJ1Y3R1cmVzIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtNTU4MSw3ICs1NTgxLDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyogVmVyaWZ5IHByaXZhY3kgY29tcGF0YWJpbGl0eSAqLworCS8qIFZlcmlmeSBwcml2YWN5IGNvbXBhdGliaWxpdHkgKi8KIAlpZiAoKChwcml2LT5jYXBhYmlsaXR5ICYgQ0FQX1BSSVZBQ1lfT04pID8gMSA6IDApICE9CiAJICAgICgobmV0d29yay0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSA/IDEgOiAwKSkgewogCQlJUFdfREVCVUdfTUVSR0UoIk5ldHdvcmsgJyVzICglcE0pJyBleGNsdWRlZCAiCkBAIC01ODA4LDcgKzU4MDgsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBWZXJpZnkgcHJpdmFjeSBjb21wYXRhYmlsaXR5ICovCisJLyogVmVyaWZ5IHByaXZhY3kgY29tcGF0aWJpbGl0eSAqLwogCWlmICgoKHByaXYtPmNhcGFiaWxpdHkgJiBDQVBfUFJJVkFDWV9PTikgPyAxIDogMCkgIT0KIAkgICAgKChuZXR3b3JrLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpID8gMSA6IDApKSB7CiAJCUlQV19ERUJVR19BU1NPQygiTmV0d29yayAnJXMgKCVwTSknIGV4Y2x1ZGVkICIKQEAgLTgxODQsNyArODE4NCw3IEBACiBzdGF0aWMgaW50IGlzX25ldHdvcmtfcGFja2V0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKIAkJCQkgICAgc3RydWN0IGxpYmlwd19oZHJfNGFkZHIgKmhlYWRlcikKIHsKLQkvKiBGaWx0ZXIgaW5jb21pbmcgcGFja2V0cyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgdGFyZ2V0dGVkIHRvd2FyZAorCS8qIEZpbHRlciBpbmNvbWluZyBwYWNrZXRzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSB0YXJnZXRlZCB0b3dhcmQKIAkgKiB0aGlzIG5ldHdvcmssIGRpc2NhcmRpbmcgcGFja2V0cyBjb21pbmcgZnJvbSBvdXJzZWx2ZXMgKi8KIAlzd2l0Y2ggKHByaXYtPmllZWUtPml3X21vZGUpIHsKIAljYXNlIElXX01PREVfQURIT0M6CS8qIEhlYWRlcjogRGVzdC4gfCBTb3VyY2UgICAgfCBCU1NJRCAqLwpAQCAtODM0MCw5ICs4MzQwLDkgQEAKIH0KIAogLyoKLSAqIE1haW4gZW50cnkgZnVuY3Rpb24gZm9yIHJlY2lldmluZyBhIHBhY2tldCB3aXRoIDgwMjExIGhlYWRlcnMuICBUaGlzCisgKiBNYWluIGVudHJ5IGZ1bmN0aW9uIGZvciByZWNlaXZpbmcgYSBwYWNrZXQgd2l0aCA4MDIxMSBoZWFkZXJzLiAgVGhpcwogICogc2hvdWxkIGJlIGNhbGxlZCB3aGVuIGV2ZXIgdGhlIEZXIGhhcyBub3RpZmllZCB1cyB0aGF0IHRoZXJlIGlzIGEgbmV3Ci0gKiBza2IgaW4gdGhlIHJlY2lldmUgcXVldWUuCisgKiBza2IgaW4gdGhlIHJlY2VpdmUgcXVldWUuCiAgKi8KIHN0YXRpYyB2b2lkIGlwd19yeChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCiB7CkBAIC04NjgzLDcgKzg2ODMsNyBAQAogICogZnVuY3Rpb25zIGRlZmluZWQgaW4gaXB3X21haW4gdG8gcHJvdmlkZSB0aGUgSFcgaW50ZXJhY3Rpb24uCiAgKgogICogVGhlIGV4Y2VwdGlvbiB0byB0aGlzIGlzIHRoZSB1c2Ugb2YgdGhlIGlwd19nZXRfb3JkaW5hbCgpCi0gKiBmdW5jdGlvbiB1c2VkIHRvIHBvbGwgdGhlIGhhcmR3YXJlIHZzLiBtYWtpbmcgdW5lY2Vzc2FyeSBjYWxscy4KKyAqIGZ1bmN0aW9uIHVzZWQgdG8gcG9sbCB0aGUgaGFyZHdhcmUgdnMuIG1ha2luZyB1bm5lY2Vzc2FyeSBjYWxscy4KICAqCiAgKi8KIApAQCAtMTA0MTksNyArMTA0MTksNyBAQAogCiAJbWVtc2V0KCZkdW1teXN0YXRzLCAwLCBzaXplb2YoZHVtbXlzdGF0cykpOwogCi0JLyogRmlsdGVyaW5nIG9mIGZyYWdtZW50IGNoYWlucyBpcyBkb25lIGFnYWlucyB0aGUgZmlyc3QgZnJhZ21lbnQgKi8KKwkvKiBGaWx0ZXJpbmcgb2YgZnJhZ21lbnQgY2hhaW5zIGlzIGRvbmUgYWdhaW5zdCB0aGUgZmlyc3QgZnJhZ21lbnQgKi8KIAloZHIgPSAodm9pZCAqKXR4Yi0+ZnJhZ21lbnRzWzBdLT5kYXRhOwogCWlmIChsaWJpcHdfaXNfbWFuYWdlbWVudChsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpKSkgewogCQlpZiAoZmlsdGVyICYgSVBXX1BST01fTk9fTUdNVCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19yeC5jCmluZGV4IDBkZTFiMTguLmU1YWQ3NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3J4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfcnguYwpAQCAtOTI1LDcgKzkyNSw3IEBACiBzdGF0aWMgdTggcW9zX291aVtRT1NfT1VJX0xFTl0gPSB7IDB4MDAsIDB4NTAsIDB4RjIgfTsKIAogLyoKLSogTWFrZSB0aGVyIHN0cnVjdHVyZSB3ZSByZWFkIGZyb20gdGhlIGJlYWNvbiBwYWNrZXQgaGFzCisqIE1ha2UgdGhlIHN0cnVjdHVyZSB3ZSByZWFkIGZyb20gdGhlIGJlYWNvbiBwYWNrZXQgdG8gaGF2ZQogKiB0aGUgcmlnaHQgdmFsdWVzCiAqLwogc3RhdGljIGludCBsaWJpcHdfdmVyaWZ5X3Fvc19pbmZvKHN0cnVjdCBsaWJpcHdfcW9zX2luZm9ybWF0aW9uX2VsZW1lbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9LY29uZmlnCmluZGV4IDJhNDVkZDQuLmFlZjY1Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvS2NvbmZpZwpAQCAtMSw2ICsxLDUgQEAKIGNvbmZpZyBJV0xXSUZJX0xFR0FDWQotCXRyaXN0YXRlICJJbnRlbCBXaXJlbGVzcyBXaWZpIGxlZ2FjeSBkZXZpY2VzIgotCWRlcGVuZHMgb24gUENJICYmIE1BQzgwMjExCisJdHJpc3RhdGUKIAlzZWxlY3QgRldfTE9BREVSCiAJc2VsZWN0IE5FV19MRURTCiAJc2VsZWN0IExFRFNfQ0xBU1MKQEAgLTY1LDcgKzY0LDggQEAKIAogY29uZmlnIElXTDQ5NjUKIAl0cmlzdGF0ZSAiSW50ZWwgV2lyZWxlc3MgV2lGaSA0OTY1QUdOIChpd2w0OTY1KSIKLQlkZXBlbmRzIG9uIElXTFdJRklfTEVHQUNZCisJZGVwZW5kcyBvbiBQQ0kgJiYgTUFDODAyMTEKKwlzZWxlY3QgSVdMV0lGSV9MRUdBQ1kKIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yCiAKQEAgLTkyLDcgKzkyLDggQEAKIAogY29uZmlnIElXTDM5NDUKIAl0cmlzdGF0ZSAiSW50ZWwgUFJPL1dpcmVsZXNzIDM5NDVBQkcvQkcgTmV0d29yayBDb25uZWN0aW9uIChpd2wzOTQ1KSIKLQlkZXBlbmRzIG9uIElXTFdJRklfTEVHQUNZCisJZGVwZW5kcyBvbiBQQ0kgJiYgTUFDODAyMTEKKwlzZWxlY3QgSVdMV0lGSV9MRUdBQ1kKIAktLS1oZWxwLS0tCiAJICBTZWxlY3QgdG8gYnVpbGQgdGhlIGRyaXZlciBzdXBwb3J0aW5nIHRoZToKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTM5NDUtaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC0zOTQ1LWh3LmgKaW5kZXggNzc5ZDNjYi4uNWMzYTY4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTM5NDUtaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtMzk0NS1ody5oCkBAIC03NCw4ICs3NCw2IEBACiAvKiBSU1NJIHRvIGRCbSAqLwogI2RlZmluZSBJV0wzOV9SU1NJX09GRlNFVAk5NQogCi0jZGVmaW5lIElXTF9ERUZBVUxUX1RYX1BPV0VSCTB4MEYKLQogLyoKICAqIEVFUFJPTSByZWxhdGVkIGNvbnN0YW50cywgZW51bXMsIGFuZCBzdHJ1Y3R1cmVzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS1ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUtaHcuaAppbmRleCAwOGIxODljLi5mYzZmYTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS1ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC00OTY1LWh3LmgKQEAgLTgwNCw5ICs4MDQsNiBAQAogCiAjZGVmaW5lIElXTDQ5NjVfREVGQVVMVF9UWF9SRVRSWSAgMTUKIAotLyogTGltaXQgcmFuZ2Ugb2YgdHhwb3dlciBvdXRwdXQgdGFyZ2V0IHRvIGJlIGJldHdlZW4gdGhlc2UgdmFsdWVzICovCi0jZGVmaW5lIElXTDQ5NjVfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01JTgkoMCkJLyogMCBkQm06IDEgbWlsbGl3YXR0ICovCi0KIC8qIEVFUFJPTSAqLwogI2RlZmluZSBJV0w0OTY1X0ZJUlNUX0FNUERVX1FVRVVFCTEwCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC00OTY1LXR4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS10eC5jCmluZGV4IDVjNDA1MDIuLjc5YWMwODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC00OTY1LXR4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUtdHguYwpAQCAtMzE2LDEyICszMTYsMTggQEAKIAogCWhkcl9sZW4gPSBpZWVlODAyMTFfaGRybGVuKGZjKTsKIAotCS8qIEZpbmQgaW5kZXggaW50byBzdGF0aW9uIHRhYmxlIGZvciBkZXN0aW5hdGlvbiBzdGF0aW9uICovCi0Jc3RhX2lkID0gaXdsX2xlZ2FjeV9zdGFfaWRfb3JfYnJvYWRjYXN0KHByaXYsIGN0eCwgaW5mby0+Y29udHJvbC5zdGEpOwotCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewotCQlJV0xfREVCVUdfRFJPUChwcml2LCAiRHJvcHBpbmcgLSBJTlZBTElEIFNUQVRJT046ICVwTVxuIiwKLQkJCSAgICAgICBoZHItPmFkZHIxKTsKLQkJZ290byBkcm9wX3VubG9jazsKKwkvKiBGb3IgbWFuYWdlbWVudCBmcmFtZXMgdXNlIGJyb2FkY2FzdCBpZCB0byBkbyBub3QgYnJlYWsgYWdncmVnYXRpb24gKi8KKwlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGZjKSkKKwkJc3RhX2lkID0gY3R4LT5iY2FzdF9zdGFfaWQ7CisJZWxzZSB7CisJCS8qIEZpbmQgaW5kZXggaW50byBzdGF0aW9uIHRhYmxlIGZvciBkZXN0aW5hdGlvbiBzdGF0aW9uICovCisJCXN0YV9pZCA9IGl3bF9sZWdhY3lfc3RhX2lkX29yX2Jyb2FkY2FzdChwcml2LCBjdHgsIGluZm8tPmNvbnRyb2wuc3RhKTsKKworCQlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKKwkJCUlXTF9ERUJVR19EUk9QKHByaXYsICJEcm9wcGluZyAtIElOVkFMSUQgU1RBVElPTjogJXBNXG4iLAorCQkJCSAgICAgICBoZHItPmFkZHIxKTsKKwkJCWdvdG8gZHJvcF91bmxvY2s7CisJCX0KIAl9CiAKIAlJV0xfREVCVUdfVFgocHJpdiwgInN0YXRpb24gSWQgJWRcbiIsIHN0YV9pZCk7CkBAIC0xMTI3LDEyICsxMTMzLDE2IEBACiAJICAgICBxLT5yZWFkX3B0ciA9IGl3bF9sZWdhY3lfcXVldWVfaW5jX3dyYXAocS0+cmVhZF9wdHIsIHEtPm5fYmQpKSB7CiAKIAkJdHhfaW5mbyA9ICZ0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdOwotCQlpd2w0OTY1X3R4X3N0YXR1cyhwcml2LCB0eF9pbmZvLAotCQkJCSB0eHFfaWQgPj0gSVdMNDk2NV9GSVJTVF9BTVBEVV9RVUVVRSk7CisKKwkJaWYgKFdBUk5fT05fT05DRSh0eF9pbmZvLT5za2IgPT0gTlVMTCkpCisJCQljb250aW51ZTsKIAogCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0eF9pbmZvLT5za2ItPmRhdGE7Ci0JCWlmIChoZHIgJiYgaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSkKIAkJCW5mcmVlZCsrOworCisJCWl3bDQ5NjVfdHhfc3RhdHVzKHByaXYsIHR4X2luZm8sCisJCQkJIHR4cV9pZCA+PSBJV0w0OTY1X0ZJUlNUX0FNUERVX1FVRVVFKTsKIAkJdHhfaW5mby0+c2tiID0gTlVMTDsKIAogCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfZnJlZV90ZmQocHJpdiwgdHhxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtY29yZS5jCmluZGV4IGEyMDlhMGUuLjQyZGIwZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWNvcmUuYwpAQCAtMTYwLDYgKzE2MCw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpnZW9fY2g7CiAJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlczsKIAlpbnQgaSA9IDA7CisJczggbWF4X3R4X3Bvd2VyID0gMDsKIAogCWlmIChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2JpdHJhdGVzIHx8CiAJICAgIHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fYml0cmF0ZXMpIHsKQEAgLTIzNSw4ICsyMzYsOCBAQAogCiAJCQlnZW9fY2gtPmZsYWdzIHw9IGNoLT5odDQwX2V4dGVuc2lvbl9jaGFubmVsOwogCi0JCQlpZiAoY2gtPm1heF9wb3dlcl9hdmcgPiBwcml2LT50eF9wb3dlcl9kZXZpY2VfbG10KQotCQkJCXByaXYtPnR4X3Bvd2VyX2RldmljZV9sbXQgPSBjaC0+bWF4X3Bvd2VyX2F2ZzsKKwkJCWlmIChjaC0+bWF4X3Bvd2VyX2F2ZyA+IG1heF90eF9wb3dlcikKKwkJCQltYXhfdHhfcG93ZXIgPSBjaC0+bWF4X3Bvd2VyX2F2ZzsKIAkJfSBlbHNlIHsKIAkJCWdlb19jaC0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fRElTQUJMRUQ7CiAJCX0KQEAgLTI0OSw2ICsyNTAsMTAgQEAKIAkJCQkgZ2VvX2NoLT5mbGFncyk7CiAJfQogCisJcHJpdi0+dHhfcG93ZXJfZGV2aWNlX2xtdCA9IG1heF90eF9wb3dlcjsKKwlwcml2LT50eF9wb3dlcl91c2VyX2xtdCA9IG1heF90eF9wb3dlcjsKKwlwcml2LT50eF9wb3dlcl9uZXh0ID0gbWF4X3R4X3Bvd2VyOworCiAJaWYgKChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzID09IDApICYmCiAJICAgICBwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfQSkgewogCQlJV0xfSU5GTyhwcml2LCAiSW5jb3JyZWN0bHkgZGV0ZWN0ZWQgQkcgY2FyZCBhcyBBQkcuICIKQEAgLTEwMzAsNyArMTAzNSw3IEBACiAJLyoKIAkgKiBFbmFibGUgSEFQIElOVEEgKGludGVycnVwdCBmcm9tIG1hbmFnZW1lbnQgYnVzKSB0bwogCSAqIHdha2UgZGV2aWNlJ3MgUENJIEV4cHJlc3MgbGluayBMMWEgLT4gTDBzCi0JICogTk9URTogIFRoaXMgaXMgbm8tb3AgZm9yIDM5NDUgKG5vbi1leGlzdGFudCBiaXQpCisJICogTk9URTogIFRoaXMgaXMgbm8tb3AgZm9yIDM5NDUgKG5vbi1leGlzdGVudCBiaXQpCiAJICovCiAJaXdsX2xlZ2FjeV9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAogCQkJCSAgICBDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfSEFQX1dBS0VfTDFBKTsKQEAgLTExMjQsMTEgKzExMjksMTEgQEAKIAlpZiAoIXByaXYtPmNmZy0+b3BzLT5saWItPnNlbmRfdHhfcG93ZXIpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWlmICh0eF9wb3dlciA8IElXTDQ5NjVfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01JTikgeworCS8qIDAgZEJtIG1lYW4gMSBtaWxsaXdhdHQgKi8KKwlpZiAodHhfcG93ZXIgPCAwKSB7CiAJCUlXTF9XQVJOKHByaXYsCi0JCQkgIlJlcXVlc3RlZCB1c2VyIFRYUE9XRVIgJWQgYmVsb3cgbG93ZXIgbGltaXQgJWQuXG4iLAotCQkJIHR4X3Bvd2VyLAotCQkJIElXTDQ5NjVfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01JTik7CisJCQkgIlJlcXVlc3RlZCB1c2VyIFRYUE9XRVIgJWQgYmVsb3cgMSBtVy5cbiIsCisJCQkgdHhfcG93ZXIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTIxNTAsNiArMjE1NSwxMyBAQAogCQkJZ290byBzZXRfY2hfb3V0OwogCQl9CiAKKwkJaWYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKKwkJICAgICFpd2xfbGVnYWN5X2lzX2NoYW5uZWxfaWJzcyhjaF9pbmZvKSkgeworCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIG5vdCBJQlNTIGNoYW5uZWxcbiIpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gc2V0X2NoX291dDsKKwkJfQorCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAkJZm9yX2VhY2hfY29udGV4dChwcml2LCBjdHgpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1kZXYuaAppbmRleCA5ZWU4NDlkLi5mNDNhYzFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWRldi5oCkBAIC0xNDExLDYgKzE0MTEsMTIgQEAKIAlyZXR1cm4gKCEoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfQUNUSVZFKSkgPyAxIDogMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQKK2l3bF9sZWdhY3lfaXNfY2hhbm5lbF9pYnNzKGNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaCkKK3sKKwlyZXR1cm4gKGNoLT5mbGFncyAmIEVFUFJPTV9DSEFOTkVMX0lCU1MpID8gMSA6IDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZAogX19pd2xfbGVnYWN5X2ZyZWVfcGFnZXMoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1lZXByb20uYwppbmRleCAwNGM1NjQ4Li5jYjM0NmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWVlcHJvbS5jCkBAIC00NzEsMTMgKzQ3MSw2IEBACiAJCQkJCSAgICAgZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9SQURBUikpCiAJCQkJICAgICAgID8gIiIgOiAibm90ICIpOwogCi0JCQkvKiBTZXQgdGhlIHR4X3Bvd2VyX3VzZXJfbG10IHRvIHRoZSBoaWdoZXN0IHBvd2VyCi0JCQkgKiBzdXBwb3J0ZWQgYnkgYW55IGNoYW5uZWwgKi8KLQkJCWlmIChlZXByb21fY2hfaW5mb1tjaF0ubWF4X3Bvd2VyX2F2ZyA+Ci0JCQkJCQlwcml2LT50eF9wb3dlcl91c2VyX2xtdCkKLQkJCQlwcml2LT50eF9wb3dlcl91c2VyX2xtdCA9Ci0JCQkJICAgIGVlcHJvbV9jaF9pbmZvW2NoXS5tYXhfcG93ZXJfYXZnOwotCiAJCQljaF9pbmZvKys7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtZmguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1maC5oCmluZGV4IDRlMjBjN2UuLjZlNjA5MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1maC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1maC5oCkBAIC00MzYsNyArNDM2LDcgQEAKICAqIEBmaW5pc2hlZF9yYl9udW0gWzA6MTFdIC0gSW5kaWNhdGVzIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBSQgogICogCWluIHdoaWNoIHRoZSBsYXN0IGZyYW1lIHdhcyB3cml0dGVuIHRvCiAgKiBAZmluaXNoZWRfZnJfbnVtIFswOjExXSAtIEluZGljYXRlcyB0aGUgaW5kZXggb2YgdGhlIFJYIEZyYW1lCi0gKiAJd2hpY2ggd2FzIHRyYW5zZmVyZWQKKyAqIAl3aGljaCB3YXMgdHJhbnNmZXJyZWQKICAqLwogc3RydWN0IGl3bF9yYl9zdGF0dXMgewogCV9fbGUxNiBjbG9zZWRfcmJfbnVtOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWxlZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWxlZC5jCmluZGV4IDE1ZWI4YjcuLmJkYTBkNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1sZWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtbGVkLmMKQEAgLTQ4LDggKzQ4LDIxIEBACiBNT0RVTEVfUEFSTV9ERVNDKGxlZF9tb2RlLCAiMD1zeXN0ZW0gZGVmYXVsdCwgIgogCQkiMT1PbihSRiBPbikvT2ZmKFJGIE9mZiksIDI9YmxpbmtpbmciKTsKIAorLyogVGhyb3VnaHB1dAkJT0ZGIHRpbWUobXMpCU9OIHRpbWUgKG1zKQorICoJPjMwMAkJCTI1CQkyNQorICoJPjIwMCB0byAzMDAJCTQwCQk0MAorICoJPjEwMCB0byAyMDAJCTU1CQk1NQorICoJPjcwIHRvIDEwMAkJNjUJCTY1CisgKgk+NTAgdG8gNzAJCTc1CQk3NQorICoJPjIwIHRvIDUwCQk4NQkJODUKKyAqCT4xMCB0byAyMAkJOTUJCTk1CisgKgk+NSB0byAxMAkJMTEwCQkxMTAKKyAqCT4xIHRvIDUJCQkxMzAJCTEzMAorICoJPjAgdG8gMQkJCTE2NwkJMTY3CisgKgk8PTAJCQkJCVNPTElEIE9OCisgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3RwdF9ibGluayBpd2xfYmxpbmtbXSA9IHsKLQl7IC50aHJvdWdocHV0ID0gMCAqIDEwMjQgLSAxLCAuYmxpbmtfdGltZSA9IDMzNCB9LAorCXsgLnRocm91Z2hwdXQgPSAwLCAuYmxpbmtfdGltZSA9IDMzNCB9LAogCXsgLnRocm91Z2hwdXQgPSAxICogMTAyNCAtIDEsIC5ibGlua190aW1lID0gMjYwIH0sCiAJeyAudGhyb3VnaHB1dCA9IDUgKiAxMDI0IC0gMSwgLmJsaW5rX3RpbWUgPSAyMjAgfSwKIAl7IC50aHJvdWdocHV0ID0gMTAgKiAxMDI0IC0gMSwgLmJsaW5rX3RpbWUgPSAxOTAgfSwKQEAgLTEwMSw2ICsxMTQsMTEgQEAKIAlpZiAocHJpdi0+Ymxpbmtfb24gPT0gb24gJiYgcHJpdi0+Ymxpbmtfb2ZmID09IG9mZikKIAkJcmV0dXJuIDA7CiAKKwlpZiAob2ZmID09IDApIHsKKwkJLyogbGVkIGlzIFNPTElEX09OICovCisJCW9uID0gSVdMX0xFRF9TT0xJRDsKKwl9CisKIAlJV0xfREVCVUdfTEVEKHByaXYsICJMZWQgYmxpbmsgdGltZSBjb21wZW5zYXRpb249JXVcbiIsCiAJCQlwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5sZWRfY29tcGVuc2F0aW9uKTsKIAlsZWRfY21kLm9uID0gaXdsX2xlZ2FjeV9ibGlua19jb21wZW5zYXRpb24ocHJpdiwgb24sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLXNjYW4uYwppbmRleCA2MGY1OTdmLi4zNTMyMzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtc2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1zY2FuLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCQlJV0xfREVCVUdfU0NBTihwcml2LCAiU2VuZCBzY2FuIGFib3J0IGZhaWxlZCAlZFxuIiwgcmV0KTsKIAkJaXdsX2xlZ2FjeV9mb3JjZV9zY2FuX2VuZChwcml2KTsKIAl9IGVsc2UKLQkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlN1Y2Vzc2Z1bGx5IHNlbmQgc2NhbiBhYm9ydFxuIik7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTdWNjZXNzZnVsbHkgc2VuZCBzY2FuIGFib3J0XG4iKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtc3RhLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtc3RhLmMKaW5kZXggNDdjOWRhMy4uNjZmMGZiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLXN0YS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1zdGEuYwpAQCAtMTEwLDcgKzExMCw3IEBACiAJLyoKIAkgKiBYWFg6IFRoZSBNQUMgYWRkcmVzcyBpbiB0aGUgY29tbWFuZCBidWZmZXIgaXMgb2Z0ZW4gY2hhbmdlZCBmcm9tCiAJICogdGhlIG9yaWdpbmFsIHNlbnQgdG8gdGhlIGRldmljZS4gVGhhdCBpcywgdGhlIE1BQyBhZGRyZXNzCi0JICogd3JpdHRlbiB0byB0aGUgY29tbWFuZCBidWZmZXIgb2Z0ZW4gaXMgbm90IHRoZSBzYW1lIE1BQyBhZHJlc3MKKwkgKiB3cml0dGVuIHRvIHRoZSBjb21tYW5kIGJ1ZmZlciBvZnRlbiBpcyBub3QgdGhlIHNhbWUgTUFDIGFkZHJlc3MKIAkgKiByZWFkIGZyb20gdGhlIGNvbW1hbmQgYnVmZmVyIHdoZW4gdGhlIGNvbW1hbmQgcmV0dXJucy4gVGhpcwogCSAqIGlzc3VlIGhhcyBub3QgeWV0IGJlZW4gcmVzb2x2ZWQgYW5kIHRoaXMgZGVidWdnaW5nIGlzIGxlZnQgdG8KIAkgKiBvYnNlcnZlIHRoZSBwcm9ibGVtLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsMzk0NS1iYXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wzOTQ1LWJhc2UuYwppbmRleCAyOGViM2Q4Li5jYzdlYmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wzOTQ1LWJhc2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wzOTQ1LWJhc2UuYwpAQCAtMzgyNSwxMCArMzgyNSw2IEBACiAJcHJpdi0+Zm9yY2VfcmVzZXRbSVdMX0ZXX1JFU0VUXS5yZXNldF9kdXJhdGlvbiA9CiAJCUlXTF9ERUxBWV9ORVhUX0ZPUkNFX0ZXX1JFTE9BRDsKIAotCi0JcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPSBJV0xfREVGQVVMVF9UWF9QT1dFUjsKLQlwcml2LT50eF9wb3dlcl9uZXh0ID0gSVdMX0RFRkFVTFRfVFhfUE9XRVI7Ci0KIAlpZiAoZWVwcm9tLT52ZXJzaW9uIDwgRUVQUk9NXzM5NDVfRUVQUk9NX1ZFUlNJT04pIHsKIAkJSVdMX1dBUk4ocHJpdiwgIlVuc3VwcG9ydGVkIEVFUFJPTSB2ZXJzaW9uOiAweCUwNFhcbiIsCiAJCQkgZWVwcm9tLT52ZXJzaW9uKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDQ5NjUtYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsNDk2NS1iYXNlLmMKaW5kZXggOTFiM2Q4Yi4uYTYyZmUyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsNDk2NS1iYXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsNDk2NS1iYXNlLmMKQEAgLTI5ODQsMTUgKzI5ODQsMTUgQEAKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bF9wcml2LAogCQkJdHhwb3dlcl93b3JrKTsKIAorCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwogCS8qIElmIGEgc2NhbiBoYXBwZW5lZCB0byBzdGFydCBiZWZvcmUgd2UgZ290IGhlcmUKIAkgKiB0aGVuIGp1c3QgcmV0dXJuOyB0aGUgc3RhdGlzdGljcyBub3RpZmljYXRpb24gd2lsbAogCSAqIGtpY2sgb2ZmIGFub3RoZXIgc2NoZWR1bGVkIHdvcmsgdG8gY29tcGVuc2F0ZSBmb3IKIAkgKiBhbnkgdGVtcGVyYXR1cmUgZGVsdGEgd2UgbWlzc2VkIGhlcmUuICovCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpIHx8CiAJICAgIHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpCi0JCXJldHVybjsKLQotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwkJZ290byBvdXQ7CiAKIAkvKiBSZWdhcmRsZXNzIG9mIGlmIHdlIGFyZSBhc3NvY2lhdGVkLCB3ZSBtdXN0IHJlY29uZmlndXJlIHRoZQogCSAqIFRYIHBvd2VyIHNpbmNlIGZyYW1lcyBjYW4gYmUgc2VudCBvbiBub24tcmFkYXIgY2hhbm5lbHMgd2hpbGUKQEAgLTMwMDIsNyArMzAwMiw3IEBACiAJLyogVXBkYXRlIGxhc3RfdGVtcGVyYXR1cmUgdG8ga2VlcCBpc19jYWxpYl9uZWVkZWQgZnJvbSBydW5uaW5nCiAJICogd2hlbiBpdCBpc24ndCBuZWVkZWQuLi4gKi8KIAlwcml2LT5sYXN0X3RlbXBlcmF0dXJlID0gcHJpdi0+dGVtcGVyYXR1cmU7Ci0KK291dDoKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIApAQCAtMzE0MCwxMiArMzE0MCw2IEBACiAKIAlpd2xfbGVnYWN5X2luaXRfc2Nhbl9wYXJhbXMocHJpdik7CiAKLQkvKiBTZXQgdGhlIHR4X3Bvd2VyX3VzZXJfbG10IHRvIHRoZSBsb3dlc3QgcG93ZXIgbGV2ZWwKLQkgKiB0aGlzIHZhbHVlIHdpbGwgZ2V0IG92ZXJ3cml0dGVuIGJ5IGNoYW5uZWwgbWF4IHBvd2VyIGF2ZwotCSAqIGZyb20gZWVwcm9tICovCi0JcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPSBJV0w0OTY1X1RYX1BPV0VSX1RBUkdFVF9QT1dFUl9NSU47Ci0JcHJpdi0+dHhfcG93ZXJfbmV4dCA9IElXTDQ5NjVfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01JTjsKLQogCXJldCA9IGl3bF9sZWdhY3lfaW5pdF9jaGFubmVsX21hcChwcml2KTsKIAlpZiAocmV0KSB7CiAJCUlXTF9FUlIocHJpdiwgImluaXRpYWxpemluZyByZWd1bGF0b3J5IGZhaWxlZDogJWRcbiIsIHJldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKaW5kZXggM2VhMzFiNi4uMjJlMDQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwpAQCAtNTMwLDYgKzUzMCw5IEBACiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MzAwX2Fnbl9jZmcgPSB7CiAJLm5hbWUgPSAiSW50ZWwoUikgVWx0aW1hdGUgTiBXaUZpIExpbmsgNTMwMCBBR04iLAogCUlXTF9ERVZJQ0VfNTAwMCwKKwkvKiBhdCBsZWFzdCBFRVBST00gMHgxMUEgaGFzIHdyb25nIGluZm8gKi8KKwkudmFsaWRfdHhfYW50ID0gQU5UX0FCQywJLyogLmNmZyBvdmVyd3JpdGUgKi8KKwkudmFsaWRfcnhfYW50ID0gQU5UX0FCQywJLyogLmNmZyBvdmVyd3JpdGUgKi8KIAkuaHRfcGFyYW1zID0gJml3bDUwMDBfaHRfcGFyYW1zLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWljdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWljdC5jCmluZGV4IGI1Y2IzYmUuLmVkMDE0OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1pY3QuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taWN0LmMKQEAgLTY5LDcgKzY5LDcgQEAKIAlpZiAoIXByaXYtPl9hZ24uaWN0X3RibF92aXIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JLyogYWxpZ24gdGFibGUgdG8gUEFHRV9TSVpFIGJvdW5kcnkgKi8KKwkvKiBhbGlnbiB0YWJsZSB0byBQQUdFX1NJWkUgYm91bmRhcnkgKi8KIAlwcml2LT5fYWduLmFsaWduZWRfaWN0X3RibF9kbWEgPSBBTElHTihwcml2LT5fYWduLmljdF90YmxfZG1hLCBQQUdFX1NJWkUpOwogCiAJSVdMX0RFQlVHX0lTUihwcml2LCAiaWN0IGRtYSBhZGRyICVMeCBkbWEgYWxpZ25lZCAlTHggZGlmZiAlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1yeG9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnhvbi5jCmluZGV4IGRmZGJlYTYuLmZiYmRlMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1yeG9uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJ4b24uYwpAQCAtMzM1LDcgKzMzNSw2IEBACiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gY29uZi0+Y2hhbm5lbDsKIAljb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKIAlpbnQgcmV0ID0gMDsKLQlib29sIGh0X2NoYW5nZWRbTlVNX0lXTF9SWE9OX0NUWF0gPSB7fTsKIAogCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiY2hhbmdlZCAlI3giLCBjaGFuZ2VkKTsKIApAQCAtMzgzLDEwICszODIsOCBAQAogCiAJCWZvcl9lYWNoX2NvbnRleHQocHJpdiwgY3R4KSB7CiAJCQkvKiBDb25maWd1cmUgSFQ0MCBjaGFubmVscyAqLwotCQkJaWYgKGN0eC0+aHQuZW5hYmxlZCAhPSBjb25mX2lzX2h0KGNvbmYpKSB7CisJCQlpZiAoY3R4LT5odC5lbmFibGVkICE9IGNvbmZfaXNfaHQoY29uZikpCiAJCQkJY3R4LT5odC5lbmFibGVkID0gY29uZl9pc19odChjb25mKTsKLQkJCQlodF9jaGFuZ2VkW2N0eC0+Y3R4aWRdID0gdHJ1ZTsKLQkJCX0KIAogCQkJaWYgKGN0eC0+aHQuZW5hYmxlZCkgewogCQkJCWlmIChjb25mX2lzX2h0NDBfbWludXMoY29uZikpIHsKQEAgLTQ1NSw4ICs0NTIsNiBAQAogCQlpZiAoIW1lbWNtcCgmY3R4LT5zdGFnaW5nLCAmY3R4LT5hY3RpdmUsIHNpemVvZihjdHgtPnN0YWdpbmcpKSkKIAkJCWNvbnRpbnVlOwogCQlpd2xhZ25fY29tbWl0X3J4b24ocHJpdiwgY3R4KTsKLQkJaWYgKGh0X2NoYW5nZWRbY3R4LT5jdHhpZF0pCi0JCQlpd2xhZ25fdXBkYXRlX3Fvcyhwcml2LCBjdHgpOwogCX0KICBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10eC5jCmluZGV4IGE3MDlkMDUuLjA3MTJiNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10eC5jCkBAIC01NjgsMTIgKzU2OCwxNyBAQAogCiAJaGRyX2xlbiA9IGllZWU4MDIxMV9oZHJsZW4oZmMpOwogCi0JLyogRmluZCBpbmRleCBpbnRvIHN0YXRpb24gdGFibGUgZm9yIGRlc3RpbmF0aW9uIHN0YXRpb24gKi8KLQlzdGFfaWQgPSBpd2xfc3RhX2lkX29yX2Jyb2FkY2FzdChwcml2LCBjdHgsIGluZm8tPmNvbnRyb2wuc3RhKTsKLQlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJSVdMX0RFQlVHX0RST1AocHJpdiwgIkRyb3BwaW5nIC0gSU5WQUxJRCBTVEFUSU9OOiAlcE1cbiIsCi0JCQkgICAgICAgaGRyLT5hZGRyMSk7Ci0JCWdvdG8gZHJvcF91bmxvY2s7CisJLyogRm9yIG1hbmFnZW1lbnQgZnJhbWVzIHVzZSBicm9hZGNhc3QgaWQgdG8gZG8gbm90IGJyZWFrIGFnZ3JlZ2F0aW9uICovCisJaWYgKCFpZWVlODAyMTFfaXNfZGF0YShmYykpCisJCXN0YV9pZCA9IGN0eC0+YmNhc3Rfc3RhX2lkOworCWVsc2UgeworCQkvKiBGaW5kIGluZGV4IGludG8gc3RhdGlvbiB0YWJsZSBmb3IgZGVzdGluYXRpb24gc3RhdGlvbiAqLworCQlzdGFfaWQgPSBpd2xfc3RhX2lkX29yX2Jyb2FkY2FzdChwcml2LCBjdHgsIGluZm8tPmNvbnRyb2wuc3RhKTsKKwkJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7CisJCQlJV0xfREVCVUdfRFJPUChwcml2LCAiRHJvcHBpbmcgLSBJTlZBTElEIFNUQVRJT046ICVwTVxuIiwKKwkJCQkgICAgICAgaGRyLT5hZGRyMSk7CisJCQlnb3RvIGRyb3BfdW5sb2NrOworCQl9CiAJfQogCiAJSVdMX0RFQlVHX1RYKHByaXYsICJzdGF0aW9uIElkICVkXG4iLCBzdGFfaWQpOwpAQCAtMTIyNCwxMiArMTIyOSwxNiBAQAogCSAgICAgcS0+cmVhZF9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+cmVhZF9wdHIsIHEtPm5fYmQpKSB7CiAKIAkJdHhfaW5mbyA9ICZ0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdOwotCQlpd2xhZ25fdHhfc3RhdHVzKHByaXYsIHR4X2luZm8sCi0JCQkJIHR4cV9pZCA+PSBJV0xBR05fRklSU1RfQU1QRFVfUVVFVUUpOworCisJCWlmIChXQVJOX09OX09OQ0UodHhfaW5mby0+c2tiID09IE5VTEwpKQorCQkJY29udGludWU7CiAKIAkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopdHhfaW5mby0+c2tiLT5kYXRhOwotCQlpZiAoaGRyICYmIGllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpKQorCQlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCQluZnJlZWQrKzsKKworCQlpd2xhZ25fdHhfc3RhdHVzKHByaXYsIHR4X2luZm8sCisJCQkJIHR4cV9pZCA+PSBJV0xBR05fRklSU1RfQU1QRFVfUVVFVUUpOwogCQl0eF9pbmZvLT5za2IgPSBOVUxMOwogCiAJCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT50eHFfaW52YWxfYnl0ZV9jbnRfdGJsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCmluZGV4IDZjMzBmYTYuLmJhZmJlNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKQEAgLTEwNDAsNyArMTA0MCw3IEBACiAJLyoKIAkgKiBFbmFibGUgSEFQIElOVEEgKGludGVycnVwdCBmcm9tIG1hbmFnZW1lbnQgYnVzKSB0bwogCSAqIHdha2UgZGV2aWNlJ3MgUENJIEV4cHJlc3MgbGluayBMMWEgLT4gTDBzCi0JICogTk9URTogIFRoaXMgaXMgbm8tb3AgZm9yIDM5NDUgKG5vbi1leGlzdGFudCBiaXQpCisJICogTk9URTogIFRoaXMgaXMgbm8tb3AgZm9yIDM5NDUgKG5vbi1leGlzdGVudCBiaXQpCiAJICovCiAJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCiAJCQkJICAgIENTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9IQVBfV0FLRV9MMUEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaAppbmRleCA5OGFhOGFmLi4yMGI2NjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaApAQCAtMjQxLDcgKzI0MSw3IEBACiAKIC8qIDZ4MDAgU3BlY2lmaWMgKi8KICNkZWZpbmUgRUVQUk9NXzYwMDBfVFhfUE9XRVJfVkVSU0lPTiAgICAoNCkKLSNkZWZpbmUgRUVQUk9NXzYwMDBfRUVQUk9NX1ZFUlNJT04JKDB4NDM0KQorI2RlZmluZSBFRVBST01fNjAwMF9FRVBST01fVkVSU0lPTgkoMHg0MjMpCiAKIC8qIDZ4NTAgU3BlY2lmaWMgKi8KICNkZWZpbmUgRUVQUk9NXzYwNTBfVFhfUE9XRVJfVkVSU0lPTiAgICAoNCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1maC5oCmluZGV4IDU1YjgzNzAuLjQ3NDAwOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZmguaApAQCAtNDM2LDcgKzQzNiw3IEBACiAgKiBAZmluaXNoZWRfcmJfbnVtIFswOjExXSAtIEluZGljYXRlcyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgUkIKICAqIAlpbiB3aGljaCB0aGUgbGFzdCBmcmFtZSB3YXMgd3JpdHRlbiB0bwogICogQGZpbmlzaGVkX2ZyX251bSBbMDoxMV0gLSBJbmRpY2F0ZXMgdGhlIGluZGV4IG9mIHRoZSBSWCBGcmFtZQotICogCXdoaWNoIHdhcyB0cmFuc2ZlcmVkCisgKiAJd2hpY2ggd2FzIHRyYW5zZmVycmVkCiAgKi8KIHN0cnVjdCBpd2xfcmJfc3RhdHVzIHsKIAlfX2xlMTYgY2xvc2VkX3JiX251bTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYwppbmRleCAzYTRkOWU2Li45MTRjNzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIAkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlNlbmQgc2NhbiBhYm9ydCBmYWlsZWQgJWRcbiIsIHJldCk7CiAJCWl3bF9mb3JjZV9zY2FuX2VuZChwcml2KTsKIAl9IGVsc2UKLQkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlN1Y2Vzc2Z1bGx5IHNlbmQgc2NhbiBhYm9ydFxuIik7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTdWNjZXNzZnVsbHkgc2VuZCBzY2FuIGFib3J0XG4iKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvaGFsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvaGFsLmMKaW5kZXggOTA3YWM4OS4uMWNhYmNiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2hhbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9oYWwuYwpAQCAtNTcsNyArNTcsNyBAQAogICogICBUaGlzIGlzIGR1ZSB0byB0aGUgZmFjdCB0aGUgaG9zdCB0YWxrcyBleGNsdXNpdmVseQogICogICB0byB0aGUgVU1BQyBhbmQgc28gdGhlcmUgbmVlZHMgdG8gYmUgYSBzcGVjaWFsIFVNQUMKICAqICAgY29tbWFuZCBmb3IgdGFsa2luZyB0byB0aGUgTE1BQy4KLSAqICAgVGhpcyBpcyBob3cgYSB3aWZpIGNvbW1hbmQgaXMgbGF5ZWQgb3V0OgorICogICBUaGlzIGlzIGhvdyBhIHdpZmkgY29tbWFuZCBpcyBsYWlkIG91dDoKICAqICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogICB8IGl3bV91ZG1hX291dF93aWZpX2hkciAgfAogICogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC03Miw3ICs3Miw3IEBACiAgKiAgIFRob3NlIGNvbW1hbmRzIGFyZSBoYW5kbGVkIGJ5IHRoZSBkZXZpY2UncyBib290cm9tLAogICogICBhbmQgYXJlIHR5cGljYWxseSBzZW50IHdoZW4gdGhlIFVNQUMgYW5kIHRoZSBMTUFDCiAgKiAgIGFyZSBub3QgeWV0IGF2YWlsYWJsZS4KLSAqICAgICogICBUaGlzIGlzIGhvdyBhIG5vbi13aWZpIGNvbW1hbmQgaXMgbGF5ZWQgb3V0OgorICogICAgKiAgIFRoaXMgaXMgaG93IGEgbm9uLXdpZmkgY29tbWFuZCBpcyBsYWlkIG91dDoKICAqICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogICB8IGl3bV91ZG1hX291dF9ub253aWZpX2hkciAgfAogICogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS90eC5jCmluZGV4IDMyMTY2MjEuLmJlOTgwNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS90eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS90eC5jCkBAIC0xOTcsNyArMTk3LDcgQEAKIAlzcGluX2xvY2soJml3bS0+dHhfY3JlZGl0LmxvY2spOwogCiAJaWYgKCFpd21fdHhfY3JlZGl0X29rKGl3bSwgaWQsIG5iKSkgewotCQlJV01fREJHX1RYKGl3bSwgREJHLCAiTm8gY3JlZGl0IGF2YWxpYWJsZSBmb3IgcG9vbFslZF1cbiIsIGlkKTsKKwkJSVdNX0RCR19UWChpd20sIERCRywgIk5vIGNyZWRpdCBhdmFpbGFibGUgZm9yIHBvb2xbJWRdXG4iLCBpZCk7CiAJCXJldCA9IC1FTk9TUEM7CiAJCWdvdG8gb3V0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL1JFQURNRSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL1JFQURNRQppbmRleCA2MGZkMWFmLi4xNDUzZWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9SRUFETUUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvUkVBRE1FCkBAIC03MCw3ICs3MCw3IEBACiAJVGhlc2UgY29tbWFuZHMgYXJlIHVzZWQgdG8gcmVhZCB0aGUgTUFDLCBCQlAgYW5kIFJGIHJlZ2lzdGVycyBmcm9tIHRoZQogCWNhcmQuICBUaGVzZSBjb21tYW5kcyB0YWtlIG9uZSBwYXJhbWV0ZXIgdGhhdCBzcGVjaWZpZXMgdGhlIG9mZnNldAogCWxvY2F0aW9uIHRoYXQgaXMgdG8gYmUgcmVhZC4gIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgc3BlY2lmaWVkIGluCi0JaGV4YWRlY2ltYWwgKGl0cyBwb3NzaWJsZSB0byBwcmVjZWVkIHByZWNlZGluZyB0aGUgbnVtYmVyIHdpdGggYSAiMHgiKS4KKwloZXhhZGVjaW1hbCAoaXRzIHBvc3NpYmxlIHRvIHByZWNlZGUgcHJlY2VkaW5nIHRoZSBudW1iZXIgd2l0aCBhICIweCIpLgogCiAJUGF0aDogL3N5cy9rZXJuZWwvZGVidWcvbGliZXJ0YXNfd2lyZWxlc3MvZXRoWC9yZWdpc3RlcnMvCiAKQEAgLTg0LDcgKzg0LDcgQEAKIAlUaGVzZSBjb21tYW5kcyBhcmUgdXNlZCB0byB3cml0ZSB0aGUgTUFDLCBCQlAgYW5kIFJGIHJlZ2lzdGVycyBpbiB0aGUKIAljYXJkLiAgVGhlc2UgY29tbWFuZHMgdGFrZSB0d28gcGFyYW1ldGVycyB0aGF0IHNwZWNpZnkgdGhlIG9mZnNldAogCWxvY2F0aW9uIGFuZCB0aGUgdmFsdWUgdGhhdCBpcyB0byBiZSB3cml0dGVuLiBUaGlzIHBhcmFtZXRlcnMgbXVzdAotCWJlIHNwZWNpZmllZCBpbiBoZXhhZGVjaW1hbCAoaXRzIHBvc3NpYmxlIHRvIHByZWNlZWQgdGhlIG51bWJlcgorCWJlIHNwZWNpZmllZCBpbiBoZXhhZGVjaW1hbCAoaXRzIHBvc3NpYmxlIHRvIHByZWNlZGUgdGhlIG51bWJlcgogCXdpdGggYSAiMHgiKS4KIAogCVVzYWdlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY2ZnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jZmcuYwppbmRleCAzMGVmMDM1Li41Y2FhMmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jZmcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jZmcuYwpAQCAtMTM1MCw3ICsxMzUwLDcgQEAKIAkJICogd2UgcmVtb3ZlIGFsbCBrZXlzIGxpa2UgaW4gdGhlIFdQQS9XUEEyIHNldHVwLAogCQkgKiB3ZSBqdXN0IGRvbid0IHNldCBSU04uCiAJCSAqCi0JCSAqIFRoZXJlZm9yZTogZmFsbC10aHJvdWdodAorCQkgKiBUaGVyZWZvcmU6IGZhbGwtdGhyb3VnaAogCQkgKi8KIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA6CiAJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYwppbmRleCA3ZThhNjU4Li5mM2FjNjI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYwpAQCAtMTMzOSw4ICsxMzM5LDggQEAKIAkJCQkgICAgY3B1X3RvX2xlMTYoUFNfTU9ERV9BQ1RJT05fRVhJVF9QUykpIHsKIAkJCQkJbGJzX2RlYl9ob3N0KAogCQkJCQkgICAgICAgIkVYRUNfTkVYVF9DTUQ6IGlnbm9yZSBFTlRFUl9QUyBjbWRcbiIpOwotCQkJCQlsaXN0X2RlbCgmY21kbm9kZS0+bGlzdCk7CiAJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOworCQkJCQlsaXN0X2RlbCgmY21kbm9kZS0+bGlzdCk7CiAJCQkJCWxic19jb21wbGV0ZV9jb21tYW5kKHByaXYsIGNtZG5vZGUsIDApOwogCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwogCkBAIC0xMzUyLDggKzEzNTIsOCBAQAogCQkJCSAgICAocHJpdi0+cHNzdGF0ZSA9PSBQU19TVEFURV9QUkVfU0xFRVApKSB7CiAJCQkJCWxic19kZWJfaG9zdCgKIAkJCQkJICAgICAgICJFWEVDX05FWFRfQ01EOiBpZ25vcmUgRVhJVF9QUyBjbWQgaW4gc2xlZXBcbiIpOwotCQkJCQlsaXN0X2RlbCgmY21kbm9kZS0+bGlzdCk7CiAJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOworCQkJCQlsaXN0X2RlbCgmY21kbm9kZS0+bGlzdCk7CiAJCQkJCWxic19jb21wbGV0ZV9jb21tYW5kKHByaXYsIGNtZG5vZGUsIDApOwogCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwogCQkJCQlwcml2LT5uZWVkdG93YWtldXAgPSAxOwpAQCAtMTM2Niw3ICsxMzY2LDkgQEAKIAkJCQkgICAgICAgIkVYRUNfTkVYVF9DTUQ6IHNlbmRpbmcgRVhJVF9QU1xuIik7CiAJCQl9CiAJCX0KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CiAJCWxpc3RfZGVsKCZjbWRub2RlLT5saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAkJbGJzX2RlYl9ob3N0KCJFWEVDX05FWFRfQ01EOiBzZW5kaW5nIGNvbW1hbmQgMHglMDR4XG4iLAogCQkJICAgIGxlMTZfdG9fY3B1KGNtZC0+Y29tbWFuZCkpOwogCQlsYnNfc3VibWl0X2NvbW1hbmQocHJpdiwgY21kbm9kZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYwppbmRleCBmYzgxMjExLi44NzEyY2IyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMKQEAgLTkxMyw3ICs5MTMsNyBAQAogCQlnb3RvIG91dDM7CiAJfQogCi0JLyogQ2xlYXIgYW55IGludGVycnVwdCBjYXVzZSB0aGF0IGhhcHBlbmQgd2hpbGUgc2VuZGluZworCS8qIENsZWFyIGFueSBpbnRlcnJ1cHQgY2F1c2UgdGhhdCBoYXBwZW5lZCB3aGlsZSBzZW5kaW5nCiAJICogZmlybXdhcmUvaW5pdGlhbGl6aW5nIGNhcmQgKi8KIAlpZl9jc193cml0ZTE2KGNhcmQsIElGX0NTX0NBUkRfSU5UX0NBVVNFLCBJRl9DU19CSVRfTUFTSyk7CiAJaWZfY3NfZW5hYmxlX2ludHMoY2FyZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5oCmluZGV4IDhiMTQxN2QuLmQyYWMxZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5oCkBAIC02Niw3ICs2Niw3IEBACiAjZGVmaW5lIElGX1NQSV9IT1NUX0lOVF9DVFJMX1JFRyAweDQwCS8qIEhvc3QgaW50ZXJydXB0IGNvbnRyb2xsZXIgcmVnICovCiAKICNkZWZpbmUgSUZfU1BJX0NBUkRfSU5UX0NBVVNFX1JFRyAweDQ0CS8qIENhcmQgaW50ZXJydXB0IGNhdXNlIHJlZyAqLwotI2RlZmluZSBJRl9TUElfQ0FSRF9JTlRfU1RBVFVTX1JFRyAweDQ4IC8qIENhcmQgaW50ZXJ1cHQgc3RhdHVzIHJlZyAqLworI2RlZmluZSBJRl9TUElfQ0FSRF9JTlRfU1RBVFVTX1JFRyAweDQ4IC8qIENhcmQgaW50ZXJydXB0IHN0YXR1cyByZWcgKi8KICNkZWZpbmUgSUZfU1BJX0NBUkRfSU5UX0VWRU5UX01BU0tfUkVHIDB4NEMgLyogQ2FyZCBpbnRlcnJ1cHQgZXZlbnQgbWFzayAqLwogI2RlZmluZSBJRl9TUElfQ0FSRF9JTlRfU1RBVFVTX01BU0tfUkVHCTB4NTAgLyogQ2FyZCBpbnRlcnJ1cHQgc3RhdHVzIG1hc2sgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMKaW5kZXggNTZmNDM5ZC4uZjRmNDI1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jCkBAIC02Miw3ICs2Miw3IEBACiAgKiAJYW4gaW50ZXJzZWN0aW9uIHRvIG9jY3VyIGJ1dCBlYWNoIGRldmljZSB3aWxsIHN0aWxsIHVzZSB0aGVpcgogICogCXJlc3BlY3RpdmUgcmVndWxhdG9yeSByZXF1ZXN0ZWQgZG9tYWlucy4gU3Vic2VxdWVudCByYWRpb3Mgd2lsbAogICogCXVzZSB0aGUgcmVzdWx0aW5nIGludGVyc2VjdGlvbi4KLSAqIEBIV1NJTV9SRUdURVNUX1dPUkxEX1JPQU06IFVzZWQgZm9yIHRlc3RpbmcgdGhlIHdvcmxkIHJvYW1pbmcuIFdlIGFjb21wbGlzaAorICogQEhXU0lNX1JFR1RFU1RfV09STERfUk9BTTogVXNlZCBmb3IgdGVzdGluZyB0aGUgd29ybGQgcm9hbWluZy4gV2UgYWNjb21wbGlzaAogICoJdGhpcyBieSB1c2luZyBhIGN1c3RvbSBiZWFjb24tY2FwYWJsZSByZWd1bGF0b3J5IGRvbWFpbiBmb3IgdGhlIGZpcnN0CiAgKglyYWRpby4gQWxsIG90aGVyIGRldmljZSB3b3JsZCByb2FtLgogICogQEhXU0lNX1JFR1RFU1RfQ1VTVE9NX1dPUkxEOiBVc2VkIGZvciB0ZXN0aW5nIHRoZSBjdXN0b20gd29ybGQgcmVndWxhdG9yeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMKaW5kZXggMzY5NTIyNy4uYzFjZWI0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jCkBAIC0xMzcsNiArMTM3LDcgQEAKIHN0cnVjdCBtd2w4a19wcml2IHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwlpbnQgaXJxOwogCiAJc3RydWN0IG13bDhrX2RldmljZV9pbmZvICpkZXZpY2VfaW5mbzsKIApAQCAtMzc2MSw5ICszNzYyLDExIEBACiAJcmMgPSByZXF1ZXN0X2lycShwcml2LT5wZGV2LT5pcnEsIG13bDhrX2ludGVycnVwdCwKIAkJCSBJUlFGX1NIQVJFRCwgTVdMOEtfTkFNRSwgaHcpOwogCWlmIChyYykgeworCQlwcml2LT5pcnEgPSAtMTsKIAkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImZhaWxlZCB0byByZWdpc3RlciBJUlEgaGFuZGxlclxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KKwlwcml2LT5pcnEgPSBwcml2LT5wZGV2LT5pcnE7CiAKIAkvKiBFbmFibGUgVFggcmVjbGFpbSBhbmQgUlggdGFza2xldHMuICAqLwogCXRhc2tsZXRfZW5hYmxlKCZwcml2LT5wb2xsX3R4X3Rhc2spOwpAQCAtMzgwMCw2ICszODAzLDcgQEAKIAlpZiAocmMpIHsKIAkJaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKIAkJZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBodyk7CisJCXByaXYtPmlycSA9IC0xOwogCQl0YXNrbGV0X2Rpc2FibGUoJnByaXYtPnBvbGxfdHhfdGFzayk7CiAJCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+cG9sbF9yeF90YXNrKTsKIAl9CkBAIC0zODE4LDcgKzM4MjIsMTAgQEAKIAogCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLwogCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7Ci0JZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBodyk7CisJaWYgKHByaXYtPmlycSAhPSAtMSkgeworCQlmcmVlX2lycShwcml2LT5wZGV2LT5pcnEsIGh3KTsKKwkJcHJpdi0+aXJxID0gLTE7CisJfQogCiAJLyogU3RvcCBmaW5hbGl6ZSBqb2luIHdvcmtlciAqLwogCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPmZpbmFsaXplX2pvaW5fd29ya2VyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuYwppbmRleCBiNDc3MmMxLi4zYzc4NzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5jCkBAIC0xMDMxLDcgKzEwMzEsNyBAQAogCWVsc2UKIAkJYnVmLnRzY1s0XSA9IDB4MTA7CiAKLQkvKiBXYWl0IHVwdG8gMTAwbXMgZm9yIHR4IHF1ZXVlIHRvIGVtcHR5ICovCisJLyogV2FpdCB1cCB0byAxMDBtcyBmb3IgdHggcXVldWUgdG8gZW1wdHkgKi8KIAlmb3IgKGsgPSAxMDA7IGsgPiAwOyBrLS0pIHsKIAkJdWRlbGF5KDEwMDApOwogCQlyZXQgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9UWFFVRVVFRU1QVFksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L21haW4uYwppbmRleCAzNTZlNmJiLi5hOTQ2OTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9tYWluLmMKQEAgLTQ2NSw3ICs0NjUsNyBAQAogCiAJCWlmIChzbG90IDwgMCkgewogCQkJLyoKLQkJCSAqIFRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlIGNob29zZW4gYWxnb3JpdGhtLCBidXQgdGhlCisJCQkgKiBUaGUgZGV2aWNlIHN1cHBvcnRzIHRoZSBjaG9zZW4gYWxnb3JpdGhtLCBidXQgdGhlCiAJCQkgKiBmaXJtd2FyZSBkb2VzIG5vdCBwcm92aWRlIGVub3VnaCBrZXkgc2xvdHMgdG8gc3RvcmUKIAkJCSAqIGFsbCBvZiB0aGVtLgogCQkJICogQnV0IGVuY3J5cHRpb24gb2ZmbG9hZCBmb3Igb3V0Z29pbmcgZnJhbWVzIGlzIGFsd2F5cwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5jCmluZGV4IDdlY2MwYmQuLjZkOTIwNGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5jCkBAIC0yODcsNyArMjg3LDcgQEAKIAllbmFibGVfaXJxKGdwaW9fdG9faXJxKHA1NHNwaV9ncGlvX2lycSkpOwogCiAJLyoKLQkgKiBuZWVkIHRvIHdhaXQgYSB3aGlsZSBiZWZvcmUgZGV2aWNlIGNhbiBiZSBhY2Nlc3NlZCwgdGhlIGxlbmdodAorCSAqIG5lZWQgdG8gd2FpdCBhIHdoaWxlIGJlZm9yZSBkZXZpY2UgY2FuIGJlIGFjY2Vzc2VkLCB0aGUgbGVuZ3RoCiAJICogaXMganVzdCBhIGd1ZXNzCiAJICovCiAJbXNsZWVwKDEwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYwppbmRleCA5YjM0NGE5Li5lMTgzNTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jCkBAIC01Niw2ICs1Niw3IEBACiAJe1VTQl9ERVZJQ0UoMHgwODQ2LCAweDQyMTApfSwJLyogTmV0Z2VhciBXRzEyMSB0aGUgc2Vjb25kID8gKi8KIAl7VVNCX0RFVklDRSgweDA4NDYsIDB4NDIyMCl9LAkvKiBOZXRnZWFyIFdHMTExICovCiAJe1VTQl9ERVZJQ0UoMHgwOWFhLCAweDEwMDApfSwJLyogU3Bpbm5ha2VyIFByb3RvIGJvYXJkICovCisJe1VTQl9ERVZJQ0UoMHgwYmY4LCAweDEwMDcpfSwJLyogRnVqaXRzdSBFLTU0MDAgVVNCICovCiAJe1VTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMDYpfSwJLyogTWVkaW9uIDQwOTAwLCBSb3BlciBFdXJvcGUgKi8KIAl7VVNCX0RFVklDRSgweDBkYjAsIDB4NjgyNil9LAkvKiBNU0kgVUI1NEcgKE1TLTY4MjYpICovCiAJe1VTQl9ERVZJQ0UoMHgxMDdiLCAweDU1ZjIpfSwJLyogR2F0ZXdheSBXR1UtMjEwIChHZW10ZWspICovCkBAIC02OCw2ICs2OSw3IEBACiAJe1VTQl9ERVZJQ0UoMHgxOTE1LCAweDIyMzUpfSwJLyogTGlua3N5cyBXVVNCNTRHIFBvcnRhYmxlIE9FTSAqLwogCXtVU0JfREVWSUNFKDB4MjAwMSwgMHgzNzAxKX0sCS8qIERMaW5rIERXTC1HMTIwIFNwaW5uYWtlciAqLwogCXtVU0JfREVWSUNFKDB4MjAwMSwgMHgzNzAzKX0sCS8qIERMaW5rIERXTC1HMTIyICovCisJe1VTQl9ERVZJQ0UoMHgyMDAxLCAweDM3NjIpfSwJLyogQ29uY2VwdHJvbmljIEM1NFUgKi8KIAl7VVNCX0RFVklDRSgweDUwNDEsIDB4MjIzNCl9LAkvKiBMaW5rc3lzIFdVU0I1NEcgKi8KIAl7VVNCX0RFVklDRSgweDUwNDEsIDB4MjIzNSl9LAkvKiBMaW5rc3lzIFdVU0I1NEcgUG9ydGFibGUgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC90eHJ4LmMKaW5kZXggNzgzNGMyNi4uMDQyODQyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3R4cnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvdHhyeC5jCkBAIC03MDMsNyArNzAzLDcgQEAKIAlzdHJ1Y3QgcDU0X3R4X2luZm8gKnA1NGluZm87CiAJc3RydWN0IHA1NF9oZHIgKmhkcjsKIAlzdHJ1Y3QgcDU0X3R4X2RhdGEgKnR4aGRyOwotCXVuc2lnbmVkIGludCBwYWRkaW5nLCBsZW4sIGV4dHJhX2xlbjsKKwl1bnNpZ25lZCBpbnQgcGFkZGluZywgbGVuLCBleHRyYV9sZW4gPSAwOwogCWludCBpLCBqLCByaWR4OwogCXUxNiBoZHJfZmxhZ3MgPSAwLCBhaWQgPSAwOwogCXU4IHJhdGUsIHF1ZXVlID0gMCwgY3J5cHRfb2Zmc2V0ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMKaW5kZXggZDQ0ZjhlMi4uMjY2ZDQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCSAqIGJlIGFsaWduZWQgb24gYSA0LWJ5dGUgYm91bmRhcnkuIElmIFdEUyBpcyBlbmFibGVkIGFkZCBhbm90aGVyIDYgYnl0ZXMKIAkgKiBhbmQgYWRkIFdEUyBhZGRyZXNzIGluZm9ybWF0aW9uICovCiAJaWYgKGxpa2VseSgoKGxvbmcpIHNrYi0+ZGF0YSAmIDB4MDMpIHwgaW5pdF93ZHMpKSB7Ci0JCS8qIGdldCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGFkZCBhbmQgcmUtYWxsaWduICovCisJCS8qIGdldCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGFkZCBhbmQgcmUtYWxpZ24gKi8KIAkJb2Zmc2V0ID0gKDQgLSAobG9uZykgc2tiLT5kYXRhKSAmIDB4MDM7CiAJCW9mZnNldCArPSBpbml0X3dkcyA/IDYgOiAwOwogCkBAIC0zNDIsNyArMzQyLDcgQEAKIAkJCSBwcml2LT5wY2lfbWFwX3J4X2FkZHJlc3NbaW5kZXhdLAogCQkJIE1BWF9GUkFHTUVOVF9TSVpFX1JYICsgMiwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAotCS8qIHVwZGF0ZSB0aGUgc2tiIHN0cnVjdHVyZSBhbmQgYWxsaWduIHRoZSBidWZmZXIgKi8KKwkvKiB1cGRhdGUgdGhlIHNrYiBzdHJ1Y3R1cmUgYW5kIGFsaWduIHRoZSBidWZmZXIgKi8KIAlza2JfcHV0KHNrYiwgc2l6ZSk7CiAJaWYgKG9mZnNldCkgewogCQkvKiBzaGlmdCB0aGUgYnVmZmVyIGFsbG9jYXRpb24gb2Zmc2V0IGJ5dGVzIHRvIGdldCB0aGUgcmlnaHQgZnJhbWUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheWN0bC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5Y3RsLmgKaW5kZXggNDlkOWIyNi4uZDc2NDZmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5Y3RsLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5Y3RsLmgKQEAgLTU3OCw3ICs1NzgsNyBAQAogICAgIFVDSEFSICB2YXJbMV07CiB9OwogCi0vKioqKioqIEVDRiBSZWNlaXZlIENvbnRyb2wgU3R1Y3R1cmUgKFJDUykgQXJlYSBhdCBTaGFyZWQgUkFNIG9mZnNldCAweDA4MDAgICovCisvKioqKioqIEVDRiBSZWNlaXZlIENvbnRyb2wgU3RydWN0dXJlIChSQ1MpIEFyZWEgYXQgU2hhcmVkIFJBTSBvZmZzZXQgMHgwODAwICAqLwogLyogU3RydWN0dXJlcyBmb3IgY29tbWFuZCBzcGVjaWZpYyBwYXJhbWV0ZXJzIChyY3MudmFyKSAqLwogc3RydWN0IHJ4X3BhY2tldF9jbWQgewogICAgIFVDSEFSIHJ4X2RhdGFfcHRyWzJdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMC5oCmluZGV4IDcwYjlhYmIuLjhmYmM1ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwLmgKQEAgLTYxNiw3ICs2MTYsNyBAQAogICogUkVBRF9DT05UUk9MOiAwIHdyaXRlIEJCUCwgMSByZWFkIEJCUAogICogQlVTWTogQVNJQyBpcyBidXN5IGV4ZWN1dGluZyBCQlAgY29tbWFuZHMKICAqIEJCUF9QQVJfRFVSOiAwIDQgTUFDIGNsb2NrcywgMSA4IE1BQyBjbG9ja3MKLSAqIEJCUF9SV19NT0RFOiAwIHNlcmlhbCwgMSBwYXJhbGVsbAorICogQkJQX1JXX01PREU6IDAgc2VyaWFsLCAxIHBhcmFsbGVsCiAgKi8KICNkZWZpbmUgQkJQX0NTUl9DRkcJCQkweDEwMWMKICNkZWZpbmUgQkJQX0NTUl9DRkdfVkFMVUUJCUZJRUxEMzIoMHgwMDAwMDBmZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBsaWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBsaWIuYwppbmRleCAyZWU2Y2ViLi5kYmY3NGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5jCkBAIC0xNTE4LDcgKzE1MTgsNyBAQAogCWlmIChyZi0+Y2hhbm5lbCA+IDE0KSB7CiAJCS8qCiAJCSAqIFdoZW4gVFggcG93ZXIgaXMgYmVsb3cgMCwgd2Ugc2hvdWxkIGluY3JlYXNlIGl0IGJ5IDcgdG8KLQkJICogbWFrZSBpdCBhIHBvc2l0aXZlIHZhbHVlIChNaW51bXVtIHZhbHVlIGlzIC03KS4KKwkJICogbWFrZSBpdCBhIHBvc2l0aXZlIHZhbHVlIChNaW5pbXVtIHZhbHVlIGlzIC03KS4KIAkJICogSG93ZXZlciB0aGlzIG1lYW5zIHRoYXQgdmFsdWVzIGJldHdlZW4gMCBhbmQgNyBoYXZlCiAJCSAqIGRvdWJsZSBtZWFuaW5nLCBhbmQgd2Ugc2hvdWxkIHNldCBhIDdEQm0gYm9vc3QgZmxhZy4KIAkJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmgKaW5kZXggYTM5NDBkNy4uN2YxMDIzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaApAQCAtNDg0LDEzICs0ODQsMTMgQEAKIAllbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGU7CiAKIAkvKgotCSAqIFRTRiBzeW5jIHZhbHVlLCB0aGlzIGlzIGRlcGVuZGFudCBvbiB0aGUgb3BlcmF0aW9uIHR5cGUuCisJICogVFNGIHN5bmMgdmFsdWUsIHRoaXMgaXMgZGVwZW5kZW50IG9uIHRoZSBvcGVyYXRpb24gdHlwZS4KIAkgKi8KIAllbnVtIHRzZl9zeW5jIHN5bmM7CiAKIAkvKgotCSAqIFRoZSBNQUMgYW5kIEJTU0lEIGFkZHJlc3Nlc3MgYXJlIHNpbXBsZSBhcnJheSBvZiBieXRlcywKLQkgKiB0aGVzZSBhcnJheXMgYXJlIGxpdHRsZSBlbmRpYW4sIHNvIHdoZW4gc2VuZGluZyB0aGUgYWRkcmVzc2VzcworCSAqIFRoZSBNQUMgYW5kIEJTU0lEIGFkZHJlc3NlcyBhcmUgc2ltcGxlIGFycmF5IG9mIGJ5dGVzLAorCSAqIHRoZXNlIGFycmF5cyBhcmUgbGl0dGxlIGVuZGlhbiwgc28gd2hlbiBzZW5kaW5nIHRoZSBhZGRyZXNzZXMKIAkgKiB0byB0aGUgZHJpdmVycywgY29weSB0aGUgaXQgaW50byBhIGVuZGlhbi1zaWduZWQgdmFyaWFibGUuCiAJICoKIAkgKiBOb3RlIHRoYXQgYWxsIGRldmljZXMgKGV4Y2VwdCBydDI1MDB1c2IpIGhhdmUgMzIgYml0cwpAQCAtMTEzMSw3ICsxMTMxLDcgQEAKICAqIEBkcm9wOiBUcnVlIHRvIGRyb3AgYWxsIHBlbmRpbmcgZnJhbWVzLgogICoKICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBmbHVzaCB0aGUgcXVldWUuIEFmdGVyIHRoaXMgY2FsbAotICogdGhlIHF1ZXVlIGlzIGd1YXJlbnRlZWQgdG8gYmUgZW1wdHkuCisgKiB0aGUgcXVldWUgaXMgZ3VhcmFudGVlZCB0byBiZSBlbXB0eS4KICAqLwogdm9pZCBydDJ4MDBxdWV1ZV9mbHVzaF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUsIGJvb2wgZHJvcCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYwppbmRleCBlN2Y2N2Q1Li45NDE2ZTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY29uZmlnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNvbmZpZy5jCkBAIC02MCw3ICs2MCw3IEBACiAJICogTm90ZSB0aGF0IHdoZW4gTlVMTCBpcyBwYXNzZWQgYXMgYWRkcmVzcyB3ZSB3aWxsIHNlbmQKIAkgKiAwMDowMDowMDowMDowMCB0byB0aGUgZGV2aWNlIHRvIGNsZWFyIHRoZSBhZGRyZXNzLgogCSAqIFRoaXMgd2lsbCBwcmV2ZW50IHRoZSBkZXZpY2UgYmVpbmcgY29uZnVzZWQgd2hlbiBpdCB3YW50cwotCSAqIHRvIEFDSyBmcmFtZXMgb3IgY29uc2lkZXJlcyBpdHNlbGYgYXNzb2NpYXRlZC4KKwkgKiB0byBBQ0sgZnJhbWVzIG9yIGNvbnNpZGVycyBpdHNlbGYgYXNzb2NpYXRlZC4KIAkgKi8KIAltZW1zZXQoY29uZi5tYWMsIDAsIHNpemVvZihjb25mLm1hYykpOwogCWlmIChtYWMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY3J5cHRvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY3J5cHRvLmMKaW5kZXggNWU5MDc0Yi4uM2Y1Njg4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNyeXB0by5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjcnlwdG8uYwpAQCAtMjM3LDcgKzIzNyw3IEBACiAJfQogCiAJLyoKLQkgKiBOT1RFOiBBbHdheXMgY291bnQgdGhlIHBheWxvYWQgYXMgdHJhbnNmZXJlZCwKKwkgKiBOT1RFOiBBbHdheXMgY291bnQgdGhlIHBheWxvYWQgYXMgdHJhbnNmZXJyZWQsCiAJICogZXZlbiB3aGVuIGFsaWdubWVudCB3YXMgc2V0IHRvIHplcm8uIFRoaXMgaXMgcmVxdWlyZWQKIAkgKiBmb3IgZGV0ZXJtaW5pbmcgdGhlIGNvcnJlY3Qgb2Zmc2V0IGZvciB0aGUgSUNWIGRhdGEuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMKaW5kZXggOWRlOWRiZS4uODRlYjZhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYwpAQCAtMTA2Miw4ICsxMDYyLDEwIEBACiAJICogU3RvcCBhbGwgd29yay4KIAkgKi8KIAljYW5jZWxfd29ya19zeW5jKCZydDJ4MDBkZXYtPmludGZfd29yayk7Ci0JY2FuY2VsX3dvcmtfc3luYygmcnQyeDAwZGV2LT5yeGRvbmVfd29yayk7Ci0JY2FuY2VsX3dvcmtfc3luYygmcnQyeDAwZGV2LT50eGRvbmVfd29yayk7CisJaWYgKHJ0MngwMF9pc191c2IocnQyeDAwZGV2KSkgeworCQljYW5jZWxfd29ya19zeW5jKCZydDJ4MDBkZXYtPnJ4ZG9uZV93b3JrKTsKKwkJY2FuY2VsX3dvcmtfc3luYygmcnQyeDAwZGV2LT50eGRvbmVfd29yayk7CisJfQogCWRlc3Ryb3lfd29ya3F1ZXVlKHJ0MngwMGRldi0+d29ya3F1ZXVlKTsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZHVtcC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGR1bXAuaAppbmRleCA1ZDZlMGI4Li4wNjNlYmNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZHVtcC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkdW1wLmgKQEAgLTUxLDcgKzUxLDcgQEAKICAqICAgW3J0MngwMGR1bXAgaGVhZGVyXVtoYXJkd2FyZSBkZXNjcmlwdG9yXVtpZWVlODAyLjExIGZyYW1lXQogICoKICAqIHJ0MngwMGR1bXAgaGVhZGVyOiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGR1bXBlZCBmcmFtZSwgYXMgd2VsbCBhcwotICoJYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB1c2VmdWxsIGZvciBkZWJ1Z2dpbmcuIFNlZSAmcnQyeDAwZHVtcF9oZHIuCisgKglhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHVzZWZ1bCBmb3IgZGVidWdnaW5nLiBTZWUgJnJ0MngwMGR1bXBfaGRyLgogICogaGFyZHdhcmUgZGVzY3JpcHRvcjogRGVzY3JpcHRvciB0aGF0IHdhcyB1c2VkIHRvIHJlY2VpdmUgb3IgdHJhbnNtaXQKICAqCXRoZSBmcmFtZS4KICAqIGllZWU4MDIuMTEgZnJhbWU6IFRoZSBhY3R1YWwgZnJhbWUgdGhhdCB3YXMgcmVjZWl2ZWQgb3IgdHJhbnNtaXR0ZWQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGluay5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpbmsuYwppbmRleCBjOTc1YjBhLi4yOWFiZmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGluay5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaW5rLmMKQEAgLTI4Myw3ICsyODMsNyBAQAogCS8qKgogCSAqIFdoaWxlIHNjYW5uaW5nLCBsaW5rIHR1bmluZyBpcyBkaXNhYmxlZC4gQnkgZGVmYXVsdAogCSAqIHRoZSBtb3N0IHNlbnNpdGl2ZSBzZXR0aW5ncyB3aWxsIGJlIHVzZWQgdG8gbWFrZSBzdXJlCi0JICogdGhhdCBhbGwgYmVhY29ucyBhbmQgcHJvYmUgcmVzcG9uc2VzIHdpbGwgYmUgcmVjaWV2ZWQKKwkgKiB0aGF0IGFsbCBiZWFjb25zIGFuZCBwcm9iZSByZXNwb25zZXMgd2lsbCBiZSByZWNlaXZlZAogCSAqIGR1cmluZyB0aGUgc2Nhbi4KIAkgKi8KIAlpZiAodGVzdF9iaXQoREVWSUNFX1NUQVRFX1NDQU5OSU5HLCAmcnQyeDAwZGV2LT5mbGFncykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jCmluZGV4IDRiM2M3MGUuLjQzNTgwNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jCkBAIC01NDYsNyArNTQ2LDcgQEAKIAl9CiAKIAkvKgotCSAqIFdoZW4gRE1BIGFsbG9jYXRpb24gaXMgcmVxdWlyZWQgd2Ugc2hvdWxkIGd1YXJlbnRlZSB0byB0aGUKKwkgKiBXaGVuIERNQSBhbGxvY2F0aW9uIGlzIHJlcXVpcmVkIHdlIHNob3VsZCBndWFyYW50ZWUgdG8gdGhlCiAJICogZHJpdmVyIHRoYXQgdGhlIERNQSBpcyBhbGlnbmVkIHRvIGEgNC1ieXRlIGJvdW5kYXJ5LgogCSAqIEhvd2V2ZXIgc29tZSBkcml2ZXJzIHJlcXVpcmUgTDIgcGFkZGluZyB0byBwYWQgdGhlIHBheWxvYWQKIAkgKiByYXRoZXIgdGhlbiB0aGUgaGVhZGVyLiBUaGlzIGNvdWxkIGJlIGEgcmVxdWlyZW1lbnQgZm9yCkBAIC02ODksNyArNjg5LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxdWV1ZS0+aW5kZXhfbG9jaywgaXJxZmxhZ3MpOwogCiAJLyoKLQkgKiBTdGFydCBmcm9tIHRoZSBUWCBkb25lIHBvaW50ZXIsIHRoaXMgZ3VhcmVudGVlcyB0aGF0IHdlIHdpbGwKKwkgKiBTdGFydCBmcm9tIHRoZSBUWCBkb25lIHBvaW50ZXIsIHRoaXMgZ3VhcmFudGVlcyB0aGF0IHdlIHdpbGwKIAkgKiBzZW5kIG91dCBhbGwgZnJhbWVzIGluIHRoZSBjb3JyZWN0IG9yZGVyLgogCSAqLwogCWlmIChpbmRleF9zdGFydCA8IGluZGV4X2VuZCkgewpAQCAtODgzLDcgKzg4Myw3IEBACiAJfQogCiAJLyoKLQkgKiBDaGVjayBpZiBkcml2ZXIgc3VwcG9ydHMgZmx1c2hpbmcsIHdlIGNhbiBvbmx5IGd1YXJlbnRlZQorCSAqIENoZWNrIGlmIGRyaXZlciBzdXBwb3J0cyBmbHVzaGluZywgd2UgY2FuIG9ubHkgZ3VhcmFudGVlCiAJICogZnVsbCBzdXBwb3J0IGZvciBmbHVzaGluZyBpZiB0aGUgZHJpdmVyIGlzIGFibGUKIAkgKiB0byBjYW5jZWwgYWxsIHBlbmRpbmcgZnJhbWVzIChkcm9wID0gdHJ1ZSkuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5oCmluZGV4IDBjOGIwYzYuLjIxNzg2MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5oCkBAIC0zNDQsOCArMzQ0LDggQEAKICAqCW9ubHkgYmUgdG91Y2hlZCBhZnRlciB0aGUgZGV2aWNlIGhhcyBzaWduYWxlZCBpdCBpcyBkb25lIHdpdGggaXQuCiAgKiBARU5UUllfREFUQV9QRU5ESU5HOiBUaGlzIGVudHJ5IGNvbnRhaW5zIGEgdmFsaWQgZnJhbWUgYW5kIGlzIHdhaXRpbmcKICAqCWZvciB0aGUgc2lnbmFsIHRvIHN0YXJ0IHNlbmRpbmcuCi0gKiBARU5UUllfREFUQV9JT19GQUlMRUQ6IEhhcmR3YXJlIGluZGljYXRlZCB0aGF0IGFuIElPIGVycm9yIG9jY3VyZWQKLSAqCXdoaWxlIHRyYW5zZmVyaW5nIHRoZSBkYXRhIHRvIHRoZSBoYXJkd2FyZS4gTm8gVFggc3RhdHVzIHJlcG9ydCB3aWxsCisgKiBARU5UUllfREFUQV9JT19GQUlMRUQ6IEhhcmR3YXJlIGluZGljYXRlZCB0aGF0IGFuIElPIGVycm9yIG9jY3VycmVkCisgKgl3aGlsZSB0cmFuc2ZlcnJpbmcgdGhlIGRhdGEgdG8gdGhlIGhhcmR3YXJlLiBObyBUWCBzdGF0dXMgcmVwb3J0IHdpbGwKICAqCWJlIGV4cGVjdGVkIGZyb20gdGhlIGhhcmR3YXJlLgogICogQEVOVFJZX0RBVEFfU1RBVFVTX1BFTkRJTkc6IFRoZSBlbnRyeSBoYXMgYmVlbiBzZW5kIHRvIHRoZSBkZXZpY2UgYW5kCiAgKglyZXR1cm5lZC4gSXQgaXMgbm93IHdhaXRpbmcgZm9yIHRoZSBzdGF0dXMgcmVwb3J0aW5nIGJlZm9yZSB0aGUKQEAgLTM2NSw3ICszNjUsNyBAQAogICogQGZsYWdzOiBFbnRyeSBmbGFncywgc2VlICZlbnVtIHF1ZXVlX2VudHJ5X2ZsYWdzLgogICogQHF1ZXVlOiBUaGUgZGF0YSBxdWV1ZSAoJnN0cnVjdCBkYXRhX3F1ZXVlKSB0byB3aGljaCB0aGlzIGVudHJ5IGJlbG9uZ3MuCiAgKiBAc2tiOiBUaGUgYnVmZmVyIHdoaWNoIGlzIGN1cnJlbnRseSBiZWluZyB0cmFuc21pdHRlZCAoZm9yIFRYIHF1ZXVlKSwKLSAqCW9yIHVzZWQgdG8gZGlyZWN0bHkgcmVjaWV2ZSBkYXRhIGluIChmb3IgUlggcXVldWUpLgorICoJb3IgdXNlZCB0byBkaXJlY3RseSByZWNlaXZlIGRhdGEgaW4gKGZvciBSWCBxdWV1ZSkuCiAgKiBAZW50cnlfaWR4OiBUaGUgZW50cnkgaW5kZXggbnVtYmVyLgogICogQHByaXZfZGF0YTogUHJpdmF0ZSBkYXRhIGJlbG9uZ2luZyB0byB0aGlzIHF1ZXVlIGVudHJ5LiBUaGUgcG9pbnRlcgogICoJcG9pbnRzIHRvIGRhdGEgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIGRyaXZlciBhbmQgcXVldWUgdHlwZS4KQEAgLTM4OCw3ICszODgsNyBAQAogICogQFFfSU5ERVg6IEluZGV4IHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZW50cnkgaW4gdGhlIHF1ZXVlLCBpZiB0aGlzIGVudHJ5IGlzCiAgKglvd25lZCBieSB0aGUgaGFyZHdhcmUgdGhlbiB0aGUgcXVldWUgaXMgY29uc2lkZXJlZCB0byBiZSBmdWxsLgogICogQFFfSU5ERVhfRE1BX0RPTkU6IEluZGV4IHBvaW50ZXIgZm9yIHRoZSBuZXh0IGVudHJ5IHdoaWNoIHdpbGwgaGF2ZSBiZWVuCi0gKgl0cmFuc2ZlcmVkIHRvIHRoZSBoYXJkd2FyZS4KKyAqCXRyYW5zZmVycmVkIHRvIHRoZSBoYXJkd2FyZS4KICAqIEBRX0lOREVYX0RPTkU6IEluZGV4IHBvaW50ZXIgdG8gdGhlIG5leHQgZW50cnkgd2hpY2ggd2lsbCBiZSBjb21wbGV0ZWQgYnkKICAqCXRoZSBoYXJkd2FyZSBhbmQgZm9yIHdoaWNoIHdlIG5lZWQgdG8gcnVuIHRoZSB0eGRvbmUgaGFuZGxlci4gSWYgdGhpcwogICoJZW50cnkgaXMgbm90IG93bmVkIGJ5IHRoZSBoYXJkd2FyZSB0aGUgcXVldWUgaXMgY29uc2lkZXJlZCB0byBiZSBlbXB0eS4KQEAgLTYyNyw3ICs2MjcsNyBAQAogfQogCiAvKioKLSAqIHJ0MngwMHF1ZXVlX3N0YXR1c190aW1lb3V0IC0gQ2hlY2sgaWYgYSB0aW1lb3V0IG9jY3VyZWQgZm9yIFNUQVRVUyByZXBvcnRzCisgKiBydDJ4MDBxdWV1ZV9zdGF0dXNfdGltZW91dCAtIENoZWNrIGlmIGEgdGltZW91dCBvY2N1cnJlZCBmb3IgU1RBVFVTIHJlcG9ydHMKICAqIEBxdWV1ZTogUXVldWUgdG8gY2hlY2suCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHJ0MngwMHF1ZXVlX3N0YXR1c190aW1lb3V0KHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKQEAgLTYzNyw3ICs2MzcsNyBAQAogfQogCiAvKioKLSAqIHJ0MngwMHF1ZXVlX3RpbWVvdXQgLSBDaGVjayBpZiBhIHRpbWVvdXQgb2NjdXJlZCBmb3IgRE1BIHRyYW5zZmVycworICogcnQyeDAwcXVldWVfdGltZW91dCAtIENoZWNrIGlmIGEgdGltZW91dCBvY2N1cnJlZCBmb3IgRE1BIHRyYW5zZmVycwogICogQHF1ZXVlOiBRdWV1ZSB0byBjaGVjay4KICAqLwogc3RhdGljIGlubGluZSBpbnQgcnQyeDAwcXVldWVfZG1hX3RpbWVvdXQoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jCmluZGV4IGZiZTczNWYuLjM2ZjM4OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmMKQEAgLTE3Myw3ICsxNzMsNyBAQAogCS8qCiAJICogSWYgdGhlIHRyYW5zZmVyIHRvIGhhcmR3YXJlIHN1Y2NlZWRlZCwgaXQgZG9lcyBub3QgbWVhbiB0aGUKIAkgKiBmcmFtZSB3YXMgc2VuZCBvdXQgY29ycmVjdGx5LiBJdCBvbmx5IG1lYW5zIHRoZSBmcmFtZQotCSAqIHdhcyBzdWNjZXNmdWxseSBwdXNoZWQgdG8gdGhlIGhhcmR3YXJlLCB3ZSBoYXZlIG5vCisJICogd2FzIHN1Y2Nlc3NmdWxseSBwdXNoZWQgdG8gdGhlIGhhcmR3YXJlLCB3ZSBoYXZlIG5vCiAJICogd2F5IHRvIGRldGVybWluZSB0aGUgdHJhbnNtaXNzaW9uIHN0YXR1cyByaWdodCBub3cuCiAJICogKE9ubHkgaW5kaXJlY3RseSBieSBsb29raW5nIGF0IHRoZSBmYWlsZWQgVFggY291bnRlcnMKIAkgKiBpbiB0aGUgcmVnaXN0ZXIpLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5oCmluZGV4IDZhYWY1MWYuLmUxMWM3NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmgKQEAgLTQwMCw3ICs0MDAsNyBAQAogICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYKICAqCiAgKiBDaGVjayB0aGUgaGVhbHRoIG9mIHRoZSBVU0IgY29tbXVuaWNhdGlvbiBhbmQgZGV0ZXJtaW5lCi0gKiBpZiB0aW1lb3V0cyBoYXZlIG9jY3VyZWQuIElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoaXMgZnVuY3Rpb24KKyAqIGlmIHRpbWVvdXRzIGhhdmUgb2NjdXJyZWQuIElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoaXMgZnVuY3Rpb24KICAqIHdpbGwgcmVzZXQgYWxsIGNvbW11bmljYXRpb24gdG8gcmVzdG9yZSBmdW5jdGlvbmFsaXR5IGFnYWluLgogICovCiB2b2lkIHJ0MngwMHVzYl93YXRjaGRvZyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9iYXNlLmMKaW5kZXggYmIwYzc4MS4uMGQ3ZDkzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9iYXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9iYXNlLmMKQEAgLTUyMCw3ICs1MjAsNyBAQAogCQkJICpiZWNhdXNlIGh3IHdpbGwgbmVydmVyIHVzZSBod19yYXRlCiAJCQkgKndoZW4gdGNiX2Rlc2MtPnVzZV9kcml2ZXJfcmF0ZSA9IGZhbHNlCiAJCQkgKnNvIHdlIG5ldmVyIHNldCBoaWdoZXN0IE4gcmF0ZSBoZXJlLAotCQkJICphbmQgTiByYXRlIHdpbGwgYWxsIGJlIGNvbnRyb2xlZCBieSBGVworCQkJICphbmQgTiByYXRlIHdpbGwgYWxsIGJlIGNvbnRyb2xsZWQgYnkgRlcKIAkJCSAqd2hlbiB0Y2JfZGVzYy0+dXNlX2RyaXZlcl9yYXRlID0gZmFsc2UKIAkJCSAqLwogCQkJaWYgKHJ0bG1hYy0+aHRfZW5hYmxlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2VmdXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2VmdXNlLmMKaW5kZXggZjc0YTg3MC4uNTkwZjE0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9lZnVzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvZWZ1c2UuYwpAQCAtNjg1LDcgKzY4NSw3IEBACiAKIAl1OCBlZnVzZV9kYXRhLCB3b3JkX2NudHMgPSAwOwogCXUxNiBlZnVzZV9hZGRyID0gMDsKLQl1OCBod29yZGVuOworCXU4IGh3b3JkZW4gPSAwOwogCXU4IHRtcGRhdGFbOF07CiAKIAlpZiAoZGF0YSA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMKaW5kZXggOWNkNzcwMy4uNTkzOGY2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jCkBAIC0zOTUsNyArMzk1LDcgQEAKIAkgKiAwIC0gRGlzYWJsZSBBU1BNLAogCSAqIDEgLSBFbmFibGUgQVNQTSB3aXRob3V0IENsb2NrIFJlcSwKIAkgKiAyIC0gRW5hYmxlIEFTUE0gd2l0aCBDbG9jayBSZXEsCi0JICogMyAtIEFsd3lhcyBFbmFibGUgQVNQTSB3aXRoIENsb2NrIFJlcSwKKwkgKiAzIC0gQWx3YXlzIEVuYWJsZSBBU1BNIHdpdGggQ2xvY2sgUmVxLAogCSAqIDQgLSBBbHdheXMgRW5hYmxlIEFTUE0gd2l0aG91dCBDbG9jayBSZXEuCiAJICogc2V0IGRlZnVsdCB0byBSVEw4MTkyQ0U6MyBSVEw4MTkyRToyCiAJICogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcmVnZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9yZWdkLmMKaW5kZXggMzMzNmNhOS4uZDI2Zjk1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9yZWdkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9yZWdkLmMKQEAgLTE3OSw3ICsxNzksNyBAQAogCX0KIAogCS8qCi0JICpJZiBhIGNvdW50cnkgSUUgaGFzIGJlZW4gcmVjaWV2ZWQgY2hlY2sgaXRzIHJ1bGUgZm9yIHRoaXMKKwkgKklmIGEgY291bnRyeSBJRSBoYXMgYmVlbiByZWNlaXZlZCBjaGVjayBpdHMgcnVsZSBmb3IgdGhpcwogCSAqY2hhbm5lbCBmaXJzdCBiZWZvcmUgZW5hYmxpbmcgYWN0aXZlIHNjYW4uIFRoZSBwYXNzaXZlIHNjYW4KIAkgKndvdWxkIGhhdmUgYmVlbiBlbmZvcmNlZCBieSB0aGUgaW5pdGlhbCBwcm9jZXNzaW5nIG9mIG91cgogCSAqY3VzdG9tIHJlZ3VsYXRvcnkgZG9tYWluLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyYy9md19jb21tb24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvZndfY29tbW9uLmMKaW5kZXggNWVmOTEzNy4uMjhhNmNlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyYy9md19jb21tb24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjL2Z3X2NvbW1vbi5jCkBAIC0zMDMsNyArMzAzLDcgQEAKIAl1MTYgYm94X3JlZywgYm94X2V4dHJlZzsKIAl1OCB1MWJfdG1wOwogCWJvb2wgaXNmd19yZWFkID0gZmFsc2U7Ci0JdTggYnVmX2luZGV4OworCXU4IGJ1Zl9pbmRleCA9IDA7CiAJYm9vbCBid3JpdGVfc3VjZXNzID0gZmFsc2U7CiAJdTggd2FpdF9oMmNfbGltbWl0ID0gMTAwOwogCXU4IHdhaXRfd3JpdGVoMmNfbGltbWl0ID0gMTAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvdXNiLmMKaW5kZXggYTRiMjYxMy4uZjVkODU3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS91c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3VzYi5jCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAogc3RhdGljIHZvaWQgX3J0bF91c2JfaW9faGFuZGxlcl9yZWxlYXNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3ByaXYgX19tYXliZV91bnVzZWQgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAKIAltdXRleF9kZXN0cm95KCZydGxwcml2LT5pby5iYl9tdXRleCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3dpZmkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvd2lmaS5oCmluZGV4IDAxMjI2ZjguLjA3ZGI5NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvd2lmaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvd2lmaS5oCkBAIC0xNTU1LDcgKzE1NTUsNyBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICBCbHVldG9vdGggQ28tZXhpc3RhbmNlIFJlbGF0ZWQKKyAgICBCbHVldG9vdGggQ28tZXhpc3RlbmNlIFJlbGF0ZWQKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIGVudW0gYnRfYW50X251bSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvY21kLmMKaW5kZXggMGFkZTRiZC4uODFmMTY0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL2NtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9jbWQuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAgKiBAd2w6IHdsIHN0cnVjdAogICogQGlkOiBhY3ggaWQKICAqIEBidWY6IGJ1ZmZlciBmb3IgdGhlIHJlc3BvbnNlLCBpbmNsdWRpbmcgYWxsIGhlYWRlcnMsIG11c3Qgd29yayB3aXRoIGRtYQotICogQGxlbjogbGVuZ2h0IG9mIGJ1ZgorICogQGxlbjogbGVuZ3RoIG9mIGJ1ZgogICovCiBpbnQgd2wxMjUxX2NtZF9pbnRlcnJvZ2F0ZShzdHJ1Y3Qgd2wxMjUxICp3bCwgdTE2IGlkLCB2b2lkICpidWYsIHNpemVfdCBsZW4pCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9yeC5jCmluZGV4IGMxYjNiM2YuLjZhZjM1MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9yeC5jCkBAIC0xNzksNyArMTc5LDcgQEAKIAlyeF9idWZmZXIgPSBza2JfcHV0KHNrYiwgbGVuZ3RoKTsKIAl3bDEyNTFfbWVtX3JlYWQod2wsIHJ4X3BhY2tldF9yaW5nX2FkZHIsIHJ4X2J1ZmZlciwgbGVuZ3RoKTsKIAotCS8qIFRoZSBhY3R1YWwgbGVuZ2h0IGRvZXNuJ3QgaW5jbHVkZSB0aGUgdGFyZ2V0J3MgYWxpZ25tZW50ICovCisJLyogVGhlIGFjdHVhbCBsZW5ndGggZG9lc24ndCBpbmNsdWRlIHRoZSB0YXJnZXQncyBhbGlnbm1lbnQgKi8KIAlza2ItPmxlbiA9IGRlc2MtPmxlbmd0aCAgLSBQTENQX0hFQURFUl9MRU5HVEg7CiAKIAlmYyA9ICh1MTYgKilza2ItPmRhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvY21kLmMKaW5kZXggZjBhYTdhYi4uOTYzMjQzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2NtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9jbWQuYwpAQCAtMzU5LDcgKzM1OSw3IEBACiAgKiBAd2w6IHdsIHN0cnVjdAogICogQGlkOiBhY3ggaWQKICAqIEBidWY6IGJ1ZmZlciBmb3IgdGhlIHJlc3BvbnNlLCBpbmNsdWRpbmcgYWxsIGhlYWRlcnMsIG11c3Qgd29yayB3aXRoIGRtYQotICogQGxlbjogbGVuZ2h0IG9mIGJ1ZgorICogQGxlbjogbGVuZ3RoIG9mIGJ1ZgogICovCiBpbnQgd2wxMjcxX2NtZF9pbnRlcnJvZ2F0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IGlkLCB2b2lkICpidWYsIHNpemVfdCBsZW4pCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvY29uZi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2NvbmYuaAppbmRleCA4NTZhOGEyLi44YTgzMjM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvY29uZi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9jb25mLmgKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogI2RlZmluZSBDT05GX1RYX1JBVEVfUkVUUllfTElNSVQgICAgICAgMTAKIAogLyoKLSAqIFJhdGVzIHN1cHBvcnRlZCBmb3IgZGF0YSBwYWNrZXRzIHdoZW4gb3BlcmF0aW5nIGFzIEFQLiBOb3RlIHRoZSBhYnNlbnNlCisgKiBSYXRlcyBzdXBwb3J0ZWQgZm9yIGRhdGEgcGFja2V0cyB3aGVuIG9wZXJhdGluZyBhcyBBUC4gTm90ZSB0aGUgYWJzZW5jZQogICogb2YgdGhlIDIyTWJwcyByYXRlLiBUaGVyZSBpcyBhIEZXIGxpbWl0YXRpb24gb24gMTIgcmF0ZXMgc28gd2UgbXVzdCBkcm9wCiAgKiBvbmUuIFRoZSByYXRlIGRyb3BwZWQgaXMgbm90IG1hbmRhdG9yeSB1bmRlciBhbnkgb3BlcmF0aW5nIG1vZGUuCiAgKi8KQEAgLTU3Miw3ICs1NzIsNyBAQAogCUNPTkZfVFhfQUNfQksgPSAxLCAgICAgICAgIC8qIGJhY2tncm91bmQgKi8KIAlDT05GX1RYX0FDX1ZJID0gMiwgICAgICAgICAvKiB2aWRlbyAqLwogCUNPTkZfVFhfQUNfVk8gPSAzLCAgICAgICAgIC8qIHZvaWNlICovCi0JQ09ORl9UWF9BQ19DVFMyU0VMRiA9IDQsICAgLyogZmljdGlvdXMgQUMsIGZvbGxvd3MgQUNfVk8gKi8KKwlDT05GX1RYX0FDX0NUUzJTRUxGID0gNCwgICAvKiBmaWN0aXRpb3VzIEFDLCBmb2xsb3dzIEFDX1ZPICovCiAJQ09ORl9UWF9BQ19BTllfVElEID0gMHgxZgogfTsKIApAQCAtMTE2OSw3ICsxMTY5LDcgQEAKIAogCS8qCiAJICogTWluaW11bSByZXF1aXJlZCBmcmVlIHR4IG1lbW9yeSBibG9ja3MgaW4gb3JkZXIgdG8gYXNzdXJlIG9wdGltdW0KLQkgKiBwZXJmb3JtZW5jZQorCSAqIHBlcmZvcm1hbmNlCiAJICoKIAkgKiBSYW5nZTogMC0xMjAKIAkgKi8KQEAgLTExNzcsNyArMTE3Nyw3IEBACiAKIAkvKgogCSAqIE1pbmltdW0gcmVxdWlyZWQgZnJlZSByeCBtZW1vcnkgYmxvY2tzIGluIG9yZGVyIHRvIGFzc3VyZSBvcHRpbXVtCi0JICogcGVyZm9ybWVuY2UKKwkgKiBwZXJmb3JtYW5jZQogCSAqCiAJICogUmFuZ2U6IDAtMTIwCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9pby5oCmluZGV4IGMxYWFjODIuLjAwYzc3MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9pby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9pby5oCkBAIC05NCw3ICs5NCw3IEBACiAJICogdHJhbnNsYXRlZCByZWdpb24uCiAJICoKIAkgKiBUaGUgdHJhbnNsYXRlZCByZWdpb25zIG9jY3VyIG5leHQgdG8gZWFjaCBvdGhlciBpbiBwaHlzaWNhbCBkZXZpY2UKLQkgKiBtZW1vcnksIHNvIGp1c3QgYWRkIHRoZSBzaXplcyBvZiB0aGUgcHJlY2VlZGluZyBhZGRyZXNzIHJlZ2lvbnMgdG8KKwkgKiBtZW1vcnksIHNvIGp1c3QgYWRkIHRoZSBzaXplcyBvZiB0aGUgcHJlY2VkaW5nIGFkZHJlc3MgcmVnaW9ucyB0bwogCSAqIGdldCB0aGUgb2Zmc2V0IHRvIHRoZSBuZXcgcmVnaW9uLgogCSAqCiAJICogQ3VycmVudGx5LCBvbmx5IHRoZSB0d28gZmlyc3QgcmVnaW9ucyBhcmUgYWRkcmVzc2VkLCBhbmQgdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NkaW8uYwppbmRleCA1YjlkYmVhLi5iMWM3ZDAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc2Rpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zZGlvLmMKQEAgLTM0MCw3ICszNDAsNyBAQAogbW9kdWxlX2V4aXQod2wxMjcxX2V4aXQpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPiIpOworTU9EVUxFX0FVVEhPUigiTHVjaWFubyBDb2VsaG8gPGNvZWxob0B0aS5jb20+Iik7CiBNT0RVTEVfQVVUSE9SKCJKdXVzbyBPaWthcmluZW4gPGp1dXNvLm9pa2FyaW5lbkBub2tpYS5jb20+Iik7CiBNT0RVTEVfRklSTVdBUkUoV0wxMjcxX0ZXX05BTUUpOwogTU9EVUxFX0ZJUk1XQVJFKFdMMTI3MV9BUF9GV19OQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zcGkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zcGkuYwppbmRleCAxOGNmMDE3Li5mZmM3NDViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc3BpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NwaS5jCkBAIC00ODcsNyArNDg3LDcgQEAKIG1vZHVsZV9leGl0KHdsMTI3MV9leGl0KTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkx1Y2lhbm8gQ29lbGhvIDxjb2VsaG9AdGkuY29tPiIpOwogTU9EVUxFX0FVVEhPUigiSnV1c28gT2lrYXJpbmVuIDxqdXVzby5vaWthcmluZW5Abm9raWEuY29tPiIpOwogTU9EVUxFX0ZJUk1XQVJFKFdMMTI3MV9GV19OQU1FKTsKIE1PRFVMRV9GSVJNV0FSRShXTDEyNzFfQVBfRldfTkFNRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvdGVzdG1vZGUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC90ZXN0bW9kZS5jCmluZGV4IGU2NDQwM2IuLjZlYzA2YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC90ZXN0bW9kZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC90ZXN0bW9kZS5jCkBAIC0yMDQsNyArMjA0LDEwIEBACiAKIAlrZnJlZSh3bC0+bnZzKTsKIAotCXdsLT5udnMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd2wxMjcxX252c19maWxlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGxlbiAhPSBzaXplb2Yoc3RydWN0IHdsMTI3MV9udnNfZmlsZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJd2wtPm52cyA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXdsLT5udnMpIHsKIAkJd2wxMjcxX2Vycm9yKCJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgbnZzIGZpbGUiKTsKIAkJcmV0ID0gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKaW5kZXggM2U1YmVmZS4uZmMwOGYzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKQEAgLTI5MCw3ICsyOTAsNyBAQAogICogIFwgICAgICAgICAgICAgICBcLSBJRUVFIDgwMi4xMSAtLyBcLS0tLS0tLS0tLS0tLS0gbGVuIC0tLS0tLS0tLS0tLS0tLwogICogICBcLXN0cnVjdCB3bDM1MDFfODAyMTFfdHhfaGRyLS0vICAgXC0tLS0tLS0tIEV0aGVybmV0IEZyYW1lIC0tLS0tLS0vCiAgKgotICogUmV0dXJuID0gUG9zdGlvbiBpbiBDYXJkCisgKiBSZXR1cm4gPSBQb3NpdGlvbiBpbiBDYXJkCiAgKi8KIHN0YXRpYyB1MTYgd2wzNTAxX2dldF90eF9idWZmZXIoc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzLCB1MTYgbGVuKQogewpAQCAtMTkzMiw3ICsxOTMyLDcgQEAKIAl0aGlzLT5iYXNlX2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAogCWlmICghd2wzNTAxX2dldF9mbGFzaF9tYWNfYWRkcih0aGlzKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ2FudCByZWFkIE1BQyBhZGRyIGluIGZsYXNoIFJPTT9cbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDYW4ndCByZWFkIE1BQyBhZGRyIGluIGZsYXNoIFJPTT9cbiIsCiAJCSAgICAgICBkZXYtPm5hbWUpOwogCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCQlnb3RvIGZhaWxlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmX3JmMjk1OS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfcmZfcmYyOTU5LmMKaW5kZXggMDU5N2Q4Ni4uZTM2MTE3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfcmZfcmYyOTU5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfcmZfcmYyOTU5LmMKQEAgLTE2OSw3ICsxNjksNyBAQAogCQl7IENSODUsICAweDAwIH0sIHsgQ1I4NiwgIDB4MTAgfSwgeyBDUjg3LCAgMHgyQSB9LAogCQl7IENSODgsICAweDEwIH0sIHsgQ1I4OSwgIDB4MjQgfSwgeyBDUjkwLCAgMHgxOCB9LAogCQkvKiB7IENSOTEsICAweDE4IH0sICovCi0JCS8qIHNob3VsZCBzb2x2ZSBjb250aW5vdXMgQ1RTIGZyYW1lIHByb2JsZW1zICovCisJCS8qIHNob3VsZCBzb2x2ZSBjb250aW51b3VzIENUUyBmcmFtZSBwcm9ibGVtcyAqLwogCQl7IENSOTEsICAweDAwIH0sCiAJCXsgQ1I5MiwgIDB4MGEgfSwgeyBDUjkzLCAgMHgwMCB9LCB7IENSOTQsICAweDAxIH0sCiAJCXsgQ1I5NSwgIDB4MDAgfSwgeyBDUjk2LCAgMHg0MCB9LCB7IENSOTcsICAweDM3IH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9yZl91dzI0NTMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmX3V3MjQ1My5jCmluZGV4IDllNzRlYjEuLmJhMGEwY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmX3V3MjQ1My5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmX3V3MjQ1My5jCkBAIC0zNTMsNyArMzUzLDcgQEAKIAl9OwogCiAJc3RhdGljIGNvbnN0IHUzMiBydltdID0gewotCQlVVzI0NTNfUkVHV1JJVEUoNCwgMHgyYiksICAgIC8qIGNvbmZpZ3VyZSByZWNpZXZlciBnYWluICovCisJCVVXMjQ1M19SRUdXUklURSg0LCAweDJiKSwgICAgLyogY29uZmlndXJlIHJlY2VpdmVyIGdhaW4gKi8KIAkJVVcyNDUzX1JFR1dSSVRFKDUsIDB4MTllNGYpLCAvKiBjb25maWd1cmUgdHJhbnNtaXR0ZXIgZ2FpbiAqLwogCQlVVzI0NTNfUkVHV1JJVEUoNiwgMHhmODFhZCksIC8qIGVuYWJsZSBSWC9UWCBmaWx0ZXIgdHVuaW5nICovCiAJCVVXMjQ1M19SRUdXUklURSg3LCAweDNmZmZlKSwgLyogZGlzYWJsZSBUWCBnYWluIGluIHRlc3QgbW9kZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYwppbmRleCA1ODIzNmU2Li5hYjYwN2JiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYwpAQCAtNjQzLDcgKzY0Myw3IEBACiAJdXNiID0gdXJiLT5jb250ZXh0OwogCXJ4ID0gJnVzYi0+cng7CiAKLQl6ZF91c2JfcmVzZXRfcnhfaWRsZV90aW1lcih1c2IpOworCXRhc2tsZXRfc2NoZWR1bGUoJnJ4LT5yZXNldF90aW1lcl90YXNrbGV0KTsKIAogCWlmIChsZW5ndGglcngtPnVzYl9wYWNrZXRfc2l6ZSA+IHJ4LT51c2JfcGFja2V0X3NpemUtNCkgewogCQkvKiBJZiB0aGVyZSBpcyBhbiBvbGQgZmlyc3QgZnJhZ21lbnQsIHdlIGRvbid0IGNhcmUuICovCkBAIC04MTIsNiArODEyLDcgQEAKIAlfX3pkX3VzYl9kaXNhYmxlX3J4KHVzYik7CiAJbXV0ZXhfdW5sb2NrKCZyeC0+c2V0dXBfbXV0ZXgpOwogCisJdGFza2xldF9raWxsKCZyeC0+cmVzZXRfdGltZXJfdGFza2xldCk7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZyeC0+aWRsZV93b3JrKTsKIH0KIApAQCAtMTEwNiw2ICsxMTA3LDEzIEBACiAJemRfdXNiX3Jlc2V0X3J4KHVzYik7CiB9CiAKK3N0YXRpYyB2b2lkIHpkX3VzYl9yZXNldF9yeF9pZGxlX3RpbWVyX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBwYXJhbSkKK3sKKwlzdHJ1Y3QgemRfdXNiICp1c2IgPSAoc3RydWN0IHpkX3VzYiAqKXBhcmFtOworCisJemRfdXNiX3Jlc2V0X3J4X2lkbGVfdGltZXIodXNiKTsKK30KKwogdm9pZCB6ZF91c2JfcmVzZXRfcnhfaWRsZV90aW1lcihzdHJ1Y3QgemRfdXNiICp1c2IpCiB7CiAJc3RydWN0IHpkX3VzYl9yeCAqcnggPSAmdXNiLT5yeDsKQEAgLTExMjcsNiArMTEzNSw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF91c2Jfcngoc3RydWN0IHpkX3VzYiAqdXNiKQogewogCXN0cnVjdCB6ZF91c2JfcnggKnJ4ID0gJnVzYi0+cng7CisKIAlzcGluX2xvY2tfaW5pdCgmcngtPmxvY2spOwogCW11dGV4X2luaXQoJnJ4LT5zZXR1cF9tdXRleCk7CiAJaWYgKGludGVyZmFjZV90b191c2JkZXYodXNiLT5pbnRmKS0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIHsKQEAgLTExMzYsMTEgKzExNDUsMTQgQEAKIAl9CiAJWkRfQVNTRVJUKHJ4LT5mcmFnbWVudF9sZW5ndGggPT0gMCk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnJ4LT5pZGxlX3dvcmssIHpkX3J4X2lkbGVfdGltZXJfaGFuZGxlcik7CisJcngtPnJlc2V0X3RpbWVyX3Rhc2tsZXQuZnVuYyA9IHpkX3VzYl9yZXNldF9yeF9pZGxlX3RpbWVyX3Rhc2tsZXQ7CisJcngtPnJlc2V0X3RpbWVyX3Rhc2tsZXQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXVzYjsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGluaXRfdXNiX3R4KHN0cnVjdCB6ZF91c2IgKnVzYikKIHsKIAlzdHJ1Y3QgemRfdXNiX3R4ICp0eCA9ICZ1c2ItPnR4OworCiAJc3Bpbl9sb2NrX2luaXQoJnR4LT5sb2NrKTsKIAlhdG9taWNfc2V0KCZ0eC0+ZW5hYmxlZCwgMCk7CiAJdHgtPnN0b3BwZWQgPSAwOwpAQCAtMTY3MSw2ICsxNjgzLDEwIEBACiAKIAlpZiAodXJiLT5zdGF0dXMgJiYgIXVzYi0+Y21kX2Vycm9yKQogCQl1c2ItPmNtZF9lcnJvciA9IHVyYi0+c3RhdHVzOworCisJaWYgKCF1c2ItPmNtZF9lcnJvciAmJgorCQkJdXJiLT5hY3R1YWxfbGVuZ3RoICE9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkKKwkJdXNiLT5jbWRfZXJyb3IgPSAtRUlPOwogfQogCiBzdGF0aWMgaW50IHpkX3N1Ym1pdF93YWl0aW5nX3VyYihzdHJ1Y3QgemRfdXNiICp1c2IsIGJvb2wgbGFzdCkKQEAgLTE4MDUsNyArMTgyMSw3IEBACiAJdXNiX2ZpbGxfaW50X3VyYih1cmIsIHVkZXYsIHVzYl9zbmRpbnRwaXBlKHVkZXYsIEVQX1JFR1NfT1VUKSwKIAkJCSByZXEsIHJlcV9sZW4sIGlvd3JpdGUxNnZfdXJiX2NvbXBsZXRlLCB1c2IsCiAJCQkgZXAtPmRlc2MuYkludGVydmFsKTsKLQl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9GUkVFX0JVRkZFUiB8IFVSQl9TSE9SVF9OT1RfT0s7CisJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfRlJFRV9CVUZGRVI7CiAKIAkvKiBTdWJtaXQgcHJldmlvdXMgVVJCICovCiAJciA9IHpkX3N1Ym1pdF93YWl0aW5nX3VyYih1c2IsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmgKaW5kZXggYjNkZjJjOC4uMzI1ZDBmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmgKQEAgLTE4Myw2ICsxODMsNyBAQAogCXNwaW5sb2NrX3QgbG9jazsKIAlzdHJ1Y3QgbXV0ZXggc2V0dXBfbXV0ZXg7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBpZGxlX3dvcms7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHJlc2V0X3RpbWVyX3Rhc2tsZXQ7CiAJdTggZnJhZ21lbnRbMiAqIFVTQl9NQVhfUlhfU0laRV07CiAJdW5zaWduZWQgaW50IGZyYWdtZW50X2xlbmd0aDsKIAl1bnNpZ25lZCBpbnQgdXNiX3BhY2tldF9zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGlsaW54X2VtYWNsaXRlLmMgYi9kcml2ZXJzL25ldC94aWxpbnhfZW1hY2xpdGUuYwppbmRleCAyNjQyYWY0Li4zNzI1NzJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC94aWxpbnhfZW1hY2xpdGUuYworKysgYi9kcml2ZXJzL25ldC94aWxpbnhfZW1hY2xpdGUuYwpAQCAtNzg2LDcgKzc4Niw3IEBACiAgKiBAcmVnOglyZWdpc3RlciBudW1iZXIgdG8gd3JpdGUgdG8KICAqIEB2YWw6CXZhbHVlIHRvIHdyaXRlIHRvIHRoZSByZWdpc3RlciBudW1iZXIgc3BlY2lmaWVkIGJ5IHJlZwogICoKLSAqIFRoaXMgZnVjbnRpb24gd2FpdHMgdGlsbCB0aGUgZGV2aWNlIGlzIHJlYWR5IHRvIGFjY2VwdCBhIG5ldyBNRElPCisgKiBUaGlzIGZ1bmN0aW9uIHdhaXRzIHRpbGwgdGhlIGRldmljZSBpcyByZWFkeSB0byBhY2NlcHQgYSBuZXcgTURJTwogICogcmVxdWVzdCBhbmQgdGhlbiB3cml0ZXMgdGhlIHZhbCB0byB0aGUgTURJTyBXcml0ZSBEYXRhIHJlZ2lzdGVyLgogICovCiBzdGF0aWMgaW50IHhlbWFjbGl0ZV9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC96bmV0LmMgYi9kcml2ZXJzL25ldC96bmV0LmMKaW5kZXggYWUwN2IzZC4uZWMyODAwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvem5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3puZXQuYwpAQCAtNjUyLDcgKzY1Miw3IEBACiAJCQkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAKIAkJCQkvKiBUcmFuc2NlaXZlciBtYXkgYmUgc3R1Y2sgaWYgY2FibGUKLQkJCQkgKiB3YXMgcmVtb3ZlZCB3aGlsZSBlbWl0aW5nIGEKKwkJCQkgKiB3YXMgcmVtb3ZlZCB3aGlsZSBlbWl0dGluZyBhCiAJCQkJICogcGFja2V0LiBGbGlwIGl0IG9mZiwgdGhlbiBvbiB0bwogCQkJCSAqIHJlc2V0IGl0LiBUaGlzIGlzIHZlcnkgZW1waXJpY2FsLAogCQkJCSAqIGJ1dCBpdCBzZWVtcyB0byB3b3JrLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvem9ycm84MzkwLmMgYi9kcml2ZXJzL25ldC96b3JybzgzOTAuYwppbmRleCBiNzhhMzhkLi44YzdjNTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC96b3JybzgzOTAuYworKysgYi9kcml2ZXJzL25ldC96b3JybzgzOTAuYwpAQCAtMTI2LDcgKzEyNiw3IEBACiAKICAgICBib2FyZCA9IHotPnJlc291cmNlLnN0YXJ0OwogICAgIGlvYWRkciA9IGJvYXJkK2NhcmRzW2ldLm9mZnNldDsKLSAgICBkZXYgPSBhbGxvY19laV9uZXRkZXYoKTsKKyAgICBkZXYgPSBfX19fYWxsb2NfZWlfbmV0ZGV2KDApOwogICAgIGlmICghZGV2KQogCXJldHVybiAtRU5PTUVNOwogICAgIGlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGlvYWRkciwgTkVfSU9fRVhURU5UKjIsIERSVl9OQU1FKSkgewpAQCAtMTQ2LDE1ICsxNDYsMTUgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgem9ycm84MzkwX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuCQk9IHpvcnJvODM5MF9vcGVuLAogCS5uZG9fc3RvcAkJPSB6b3JybzgzOTBfY2xvc2UsCi0JLm5kb19zdGFydF94bWl0CQk9IGVpX3N0YXJ0X3htaXQsCi0JLm5kb190eF90aW1lb3V0CQk9IGVpX3R4X3RpbWVvdXQsCi0JLm5kb19nZXRfc3RhdHMJCT0gZWlfZ2V0X3N0YXRzLAotCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZWlfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fc3RhcnRfeG1pdAkJPSBfX2VpX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IF9fZWlfdHhfdGltZW91dCwKKwkubmRvX2dldF9zdGF0cwkJPSBfX2VpX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IF9fZWlfc2V0X211bHRpY2FzdF9saXN0LAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAogCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKIAkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQkubmRvX3BvbGxfY29udHJvbGxlcgk9IGVpX3BvbGwsCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBfX2VpX3BvbGwsCiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvZmR0LmMgYi9kcml2ZXJzL29mL2ZkdC5jCmluZGV4IGM5ZGI0OWMuLjhiNjNhNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvZmR0LmMKKysrIGIvZHJpdmVycy9vZi9mZHQuYwpAQCAtNjc2LDcgKzY3Niw3IEBACiAKIAllYXJseV9pbml0X2R0X2NoZWNrX2Zvcl9pbml0cmQobm9kZSk7CiAKLQkvKiBSZXRyZWl2ZSBjb21tYW5kIGxpbmUgKi8KKwkvKiBSZXRyaWV2ZSBjb21tYW5kIGxpbmUgKi8KIAlwID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiYm9vdGFyZ3MiLCAmbCk7CiAJaWYgKHAgIT0gTlVMTCAmJiBsID4gMCkKIAkJc3RybGNweShjbWRfbGluZSwgcCwgbWluKChpbnQpbCwgQ09NTUFORF9MSU5FX1NJWkUpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2Yvb2ZfbWRpby5jIGIvZHJpdmVycy9vZi9vZl9tZGlvLmMKaW5kZXggZGNkNzg1Ny4uZDM1ZTMwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9vZl9tZGlvLmMKKysrIGIvZHJpdmVycy9vZi9vZl9tZGlvLmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogICogQGhuZGxyOiBMaW5rIHN0YXRlIGNhbGxiYWNrIGZvciB0aGUgbmV0d29yayBkZXZpY2UKICAqIEBpZmFjZTogUEhZIGRhdGEgaW50ZXJmYWNlIHR5cGUKICAqCi0gKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcGh5X2RldmljZSBpZiBzdWNjZXNzZnVsbC4gIE5VTEwgb3RoZXJ3aXNlCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcGh5X2RldmljZSBpZiBzdWNjZXNzZnVsLiAgTlVMTCBvdGhlcndpc2UKICAqLwogc3RydWN0IHBoeV9kZXZpY2UgKm9mX3BoeV9jb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBoeV9ucCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL3BkY19zdGFibGUuYyBiL2RyaXZlcnMvcGFyaXNjL3BkY19zdGFibGUuYwppbmRleCAxMDYyYjhmLi4yNDZhOTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9wZGNfc3RhYmxlLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvcGRjX3N0YWJsZS5jCkBAIC0xNDEsNyArMTQxLDcgQEAKICAqIEBlbnRyeTogQSBwb2ludGVyIHRvIGFuIGFsbG9jYXRlZCBwZGNzcGF0aF9lbnRyeS4KICAqIAogICogVGhlIGdlbmVyYWwgaWRlYSBpcyB0aGF0IHlvdSBkb24ndCByZWFkIGZyb20gdGhlIFN0YWJsZSBTdG9yYWdlIGV2ZXJ5IHRpbWUKLSAqIHlvdSBhY2Nlc3MgdGhlIGZpbGVzIHByb3ZpZGVkIGJ5IHRoZSBmYWNpbGl0ZXMuIFdlIHN0b3JlIGEgY29weSBvZiB0aGUKKyAqIHlvdSBhY2Nlc3MgdGhlIGZpbGVzIHByb3ZpZGVkIGJ5IHRoZSBmYWNpbGl0aWVzLiBXZSBzdG9yZSBhIGNvcHkgb2YgdGhlCiAgKiBjb250ZW50IG9mIHRoZSBzdGFibGUgc3RvcmFnZSBXUlQgdmFyaW91cyBwYXRocyBpbiB0aGVzZSBzdHJ1Y3RzLiBXZSByZWFkCiAgKiB0aGVzZSBzdHJ1Y3RzIHdoZW4gcmVhZGluZyB0aGUgZmlsZXMsIGFuZCB3ZSB3aWxsIHdyaXRlIHRvIHRoZXNlIHN0cnVjdHMgd2hlbgogICogd3JpdGluZyB0byB0aGUgZmlsZXMsIGFuZCBvbmx5IHRoZW4gd3JpdGUgdGhlbSBiYWNrIHRvIHRoZSBTdGFibGUgU3RvcmFnZS4KQEAgLTIxMyw3ICsyMTMsNyBAQAogCiAJLyogYWRkciwgZGV2cGF0aCBhbmQgY291bnQgbXVzdCBiZSB3b3JkIGFsaWduZWQgKi8KIAlpZiAocGRjX3N0YWJsZV93cml0ZShlbnRyeS0+YWRkciwgZGV2cGF0aCwgc2l6ZW9mKCpkZXZwYXRoKSkgIT0gUERDX09LKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGFuIGVycm9yIG9jY3VyZWQgd2hlbiB3cml0aW5nIHRvIFBEQy5cbiIKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYW4gZXJyb3Igb2NjdXJyZWQgd2hlbiB3cml0aW5nIHRvIFBEQy5cbiIKIAkJCQkiSXQgaXMgbGlrZWx5IHRoYXQgdGhlIFN0YWJsZSBTdG9yYWdlIGRhdGEgaGFzIGJlZW4gY29ycnVwdGVkLlxuIgogCQkJCSJQbGVhc2UgY2hlY2sgaXQgY2FyZWZ1bGx5IHVwb24gbmV4dCByZWJvb3QuXG4iLCBfX2Z1bmNfXyk7CiAJCVdBUk5fT04oMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvS2NvbmZpZyBiL2RyaXZlcnMvcGFycG9ydC9LY29uZmlnCmluZGV4IDg1NWYzODkuLmQ5MjE4NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGFycG9ydC9LY29uZmlnCkBAIC0xNDIsNyArMTQyLDcgQEAKIAkgIHRoZSBBWDg4Nzk2IG5ldHdvcmsgY29udHJvbGxlciBjaGlwLiBUaGlzIGNvZGUgaXMgYWxzbyBhdmFpbGFibGUKIAkgIGFzIGEgbW9kdWxlIChzYXkgTSksIGNhbGxlZCBwYXJwb3J0X2F4ODg3OTYuCiAKLQkgIFRoZSBkcml2ZXIgaXMgbm90IGRlcGVuZGFudCBvbiB0aGUgQVg4ODc5NiBuZXR3b3JrIGRyaXZlciwgYW5kCisJICBUaGUgZHJpdmVyIGlzIG5vdCBkZXBlbmRlbnQgb24gdGhlIEFYODg3OTYgbmV0d29yayBkcml2ZXIsIGFuZAogCSAgc2hvdWxkIG5vdCBpbnRlcmZlcmUgd2l0aCB0aGUgbmV0d29ya2luZyBmdW5jdGlvbnMgb2YgdGhlIGNoaXAuCiAKIGNvbmZpZyBQQVJQT1JUXzEyODQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFycG9ydC9pZWVlMTI4NC5jIGIvZHJpdmVycy9wYXJwb3J0L2llZWUxMjg0LmMKaW5kZXggODkwMWVjZi4uZjlmZDRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L2llZWUxMjg0LmMKKysrIGIvZHJpdmVycy9wYXJwb3J0L2llZWUxMjg0LmMKQEAgLTM1NSw3ICszNTUsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBHbyB0byBjb21wYWJpbGl0eSBmb3J3YXJkIGlkbGUgbW9kZSAqLworCS8qIEdvIHRvIGNvbXBhdGliaWxpdHkgZm9yd2FyZCBpZGxlIG1vZGUgKi8KIAlpZiAocG9ydC0+aWVlZTEyODQubW9kZSAhPSBJRUVFMTI4NF9NT0RFX0NPTVBBVCkKIAkJcGFycG9ydF9pZWVlMTI4NF90ZXJtaW5hdGUgKHBvcnQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYwppbmRleCA4ZDYyZmI3Li5iYzhjZTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMKQEAgLTE0ODgsNyArMTQ4OCw3IEBACiAKIAlvdXRiKGtleSwgaW8pOwogCW91dGIoa2V5LCBpbyk7ICAgICAvKiBXcml0ZSBNYWdpYyBTZXF1ZW5jZSB0byBFRkVSLCBleHRlbmRlZAotCQkJICAgICAgZnVudGlvbiBlbmFibGUgcmVnaXN0ZXIgKi8KKwkJCSAgICAgIGZ1bmN0aW9uIGVuYWJsZSByZWdpc3RlciAqLwogCW91dGIoMHgyMCwgaW8pOyAgICAvKiBXcml0ZSBFRklSLCBleHRlbmRlZCBmdW5jdGlvbiBpbmRleCByZWdpc3RlciAqLwogCWRldmlkID0gaW5iKGlvICsgMSk7ICAvKiBSZWFkIEVGRFIsIGV4dGVuZGVkIGZ1bmN0aW9uIGRhdGEgcmVnaXN0ZXIgKi8KIAlvdXRiKDB4MjEsIGlvKTsKQEAgLTE1MjcsNyArMTUyNyw3IEBACiAJeF9vbGRpZCA9IGluYihpbyArIDIpOwogCiAJb3V0YihrZXksIGlvKTsgICAgIC8qIFdyaXRlIE1hZ2ljIEJ5dGUgdG8gRUZFUiwgZXh0ZW5kZWQKLQkJCSAgICAgIGZ1bnRpb24gZW5hYmxlIHJlZ2lzdGVyICovCisJCQkgICAgICBmdW5jdGlvbiBlbmFibGUgcmVnaXN0ZXIgKi8KIAlvdXRiKDB4MjAsIGlvICsgMik7ICAvKiBXcml0ZSBFRklSLCBleHRlbmRlZCBmdW5jdGlvbiBpbmRleCByZWdpc3RlciAqLwogCWRldmlkID0gaW5iKGlvICsgMik7ICAvKiBSZWFkIEVGRFIsIGV4dGVuZGVkIGZ1bmN0aW9uIGRhdGEgcmVnaXN0ZXIgKi8KIAlvdXRiKDB4MjEsIGlvICsgMSk7CkBAIC0xNTY5LDcgKzE1NjksNyBAQAogCiAJb3V0YihrZXksIGlvKTsKIAlvdXRiKGtleSwgaW8pOyAgICAgLyogV3JpdGUgTWFnaWMgU2VxdWVuY2UgdG8gRUZFUiwgZXh0ZW5kZWQKLQkJCSAgICAgIGZ1bnRpb24gZW5hYmxlIHJlZ2lzdGVyICovCisJCQkgICAgICBmdW5jdGlvbiBlbmFibGUgcmVnaXN0ZXIgKi8KIAlvdXRiKDB4MGQsIGlvKTsgICAgLyogV3JpdGUgRUZJUiwgZXh0ZW5kZWQgZnVuY3Rpb24gaW5kZXggcmVnaXN0ZXIgKi8KIAlvbGRpZCA9IGluYihpbyArIDEpOyAgLyogUmVhZCBFRkRSLCBleHRlbmRlZCBmdW5jdGlvbiBkYXRhIHJlZ2lzdGVyICovCiAJb3V0YigweDBlLCBpbyk7CkBAIC0yNTUwLDcgKzI1NTAsNiBAQAogCQkJCQkgY29uc3Qgc3RydWN0IHBhcnBvcnRfcGNfdmlhX2RhdGEgKnZpYSkKIHsKIAlzaG9ydCBpbnRhX2FkZHJbNl0gPSB7IDB4MkEwLCAweDJDMCwgMHgyMjAsIDB4MjQwLCAweDFFMCB9OwotCXN0cnVjdCByZXNvdXJjZSAqYmFzZV9yZXM7CiAJdTMyIGl0ZTg4NzJzZXQ7CiAJdTMyIGl0ZTg4NzJfbHB0LCBpdGU4ODcyX2xwdGhpOwogCXU4IGl0ZTg4NzJfaXJxLCB0eXBlOwpAQCAtMjU2MSw4ICsyNTYwLDcgQEAKIAogCS8qIG1ha2Ugc3VyZSB3aGljaCBvbmUgY2hpcCAqLwogCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKLQkJYmFzZV9yZXMgPSByZXF1ZXN0X3JlZ2lvbihpbnRhX2FkZHJbaV0sIDMyLCAiaXQ4ODd4Iik7Ci0JCWlmIChiYXNlX3JlcykgeworCQlpZiAocmVxdWVzdF9yZWdpb24oaW50YV9hZGRyW2ldLCAzMiwgIml0ODg3eCIpKSB7CiAJCQlpbnQgdGVzdDsKIAkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMHg2MCwKIAkJCQkJCTB4ZTUwMDAwMDAgfCBpbnRhX2FkZHJbaV0pOwpAQCAtMjU3MSw3ICsyNTY5LDcgQEAKIAkJCXRlc3QgPSBpbmIoaW50YV9hZGRyW2ldKTsKIAkJCWlmICh0ZXN0ICE9IDB4ZmYpCiAJCQkJYnJlYWs7Ci0JCQlyZWxlYXNlX3JlZ2lvbihpbnRhX2FkZHJbaV0sIDB4OCk7CisJCQlyZWxlYXNlX3JlZ2lvbihpbnRhX2FkZHJbaV0sIDMyKTsKIAkJfQogCX0KIAlpZiAoaSA+PSA1KSB7CkBAIC0yNjM1LDcgKzI2MzMsNyBAQAogCS8qCiAJICogUmVsZWFzZSB0aGUgcmVzb3VyY2Ugc28gdGhhdCBwYXJwb3J0X3BjX3Byb2JlX3BvcnQgY2FuIGdldCBpdC4KIAkgKi8KLQlyZWxlYXNlX3Jlc291cmNlKGJhc2VfcmVzKTsKKwlyZWxlYXNlX3JlZ2lvbihpbnRhX2FkZHJbaV0sIDMyKTsKIAlpZiAocGFycG9ydF9wY19wcm9iZV9wb3J0KGl0ZTg4NzJfbHB0LCBpdGU4ODcyX2xwdGhpLAogCQkJCSAgIGlycSwgUEFSUE9SVF9ETUFfTk9ORSwgJnBkZXYtPmRldiwgMCkpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL0tjb25maWcKaW5kZXggYzhmZjY0Ni4uMGZhNDY2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvS2NvbmZpZworKysgYi9kcml2ZXJzL3BjaS9LY29uZmlnCkBAIC04OCw0ICs4OCw2IEBACiAJZGVwZW5kcyBvbiBIT1RQTFVHCiAJZGVmYXVsdCB5CiAKLXNlbGVjdCBOTFMgaWYgKERNSSB8fCBBQ1BJKQorY29uZmlnIFBDSV9MQUJFTAorCWRlZl9ib29sIHkgaWYgKERNSSB8fCBBQ1BJKQorCXNlbGVjdCBOTFMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL01ha2VmaWxlIGIvZHJpdmVycy9wY2kvTWFrZWZpbGUKaW5kZXggOThkNjFjOC4uYzg1Zjc0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wY2kvTWFrZWZpbGUKQEAgLTU2LDEwICs1NiwxMCBAQAogIyBBQ1BJIFJlbGF0ZWQgUENJIEZXIEZ1bmN0aW9ucwogIyBBQ1BJIF9EU00gcHJvdmlkZWQgZmlybXdhcmUgaW5zdGFuY2UgYW5kIHN0cmluZyBuYW1lCiAjCi1vYmotJChDT05GSUdfQUNQSSkgICAgKz0gcGNpLWFjcGkubyBwY2ktbGFiZWwubworb2JqLSQoQ09ORklHX0FDUEkpICAgICs9IHBjaS1hY3BpLm8KIAogIyBTTUJJT1MgcHJvdmlkZWQgZmlybXdhcmUgaW5zdGFuY2UgYW5kIGxhYmVscwotb2JqLSQoQ09ORklHX0RNSSkgICAgKz0gcGNpLWxhYmVsLm8KK29iai0kKENPTkZJR19QQ0lfTEFCRUwpICs9IHBjaS1sYWJlbC5vCiAKICMgQ2FyZGJ1cyAmIENvbXBhY3RQQ0kgdXNlIHNldHVwLWJ1cwogb2JqLSQoQ09ORklHX0hPVFBMVUcpICs9IHNldHVwLWJ1cy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlfcGNpaHAuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaV9wY2locC5jCmluZGV4IDNiYzcyZDEuLjhmM2ZhZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaV9wY2locC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaV9wY2locC5jCkBAIC0zNTEsNyArMzUxLDcgQEAKIAkgKiBUbyBoYW5kbGUgZGlmZmVyZW50IEJJT1MgYmVoYXZpb3IsIHdlIGxvb2sgZm9yIF9PU0Mgb24gYSByb290CiAJICogYnJpZGdlIHByZWZlcmVudGlhbGx5IChhY2NvcmRpbmcgdG8gUENJIGZ3IHNwZWMpLiBMYXRlciBmb3IKIAkgKiBPU0hQIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhlIGhvdHBsdWcgY29udHJvbGxlciBhbmQgaXRzIHBhcmVudHMsCi0JICogdXB0byB0aGUgaG9zdCBicmlkZ2UgdW5kZXIgd2hpY2ggdGhpcyBjb250cm9sbGVyIGV4aXN0cy4KKwkgKiB1cCB0byB0aGUgaG9zdCBicmlkZ2UgdW5kZXIgd2hpY2ggdGhpcyBjb250cm9sbGVyIGV4aXN0cy4KIAkgKi8KIAloYW5kbGUgPSBhY3BpX2ZpbmRfcm9vdF9icmlkZ2VfaGFuZGxlKHBkZXYpOwogCWlmIChoYW5kbGUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9nbHVlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfZ2x1ZS5jCmluZGV4IGU2MTBjZmUuLjJmNjdlOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9nbHVlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2dsdWUuYwpAQCAtNTg1LDcgKzU4NSw3IEBACiAKIAkvKgogCSAqIE9uIHJvb3QgYnJpZGdlcyB3aXRoIGhvdHBsdWcgc2xvdHMgZGlyZWN0bHkgdW5kZXJuZWF0aCAoaWUsCi0JICogbm8gcDJwIGJyaWRnZSBpbmJldHdlZW4pLCB3ZSBjYWxsIGNsZWFudXBfYnJpZGdlKCkuIAorCSAqIG5vIHAycCBicmlkZ2UgYmV0d2VlbiksIHdlIGNhbGwgY2xlYW51cF9icmlkZ2UoKS4gCiAJICoKIAkgKiBUaGUgZWxzZSBjbGF1c2UgY2xlYW5zIHVwIHJvb3QgYnJpZGdlcyB0aGF0IGVpdGhlciBoYWQgbm8KIAkgKiBob3RwbHVnIHNsb3RzIGF0IGFsbCwgb3IgaGFkIGEgcDJwIGJyaWRnZSB1bmRlcm5lYXRoLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfY29yZS5jCmluZGV4IGVmNzQxMWMuLjc1OGFkYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9jb3JlLmMKQEAgLTI5MCw3ICsyOTAsNyBAQAogICogQGRuOiBkZXZpY2Ugbm9kZSBvZiBzbG90CiAgKgogICogVGhpcyBzdWJyb3V0aW5lIHdpbGwgcmVnaXN0ZXIgYSBob3RwbHVnYWJsZSBzbG90IHdpdGggdGhlCi0gKiBQQ0kgaG90cGx1ZyBpbmZyYXN0cnVjdHVyZS4gVGhpcyByb3V0aW5lIGlzIHR5cGljYWx5IGNhbGxlZAorICogUENJIGhvdHBsdWcgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgcm91dGluZSBpcyB0eXBpY2FsbHkgY2FsbGVkCiAgKiBkdXJpbmcgYm9vdCB0aW1lLCBpZiB0aGUgaG90cGx1ZyBzbG90cyBhcmUgcHJlc2VudCBhdCBib290IHRpbWUsCiAgKiBvciBpcyBjYWxsZWQgbGF0ZXIsIGJ5IHRoZSBkbHBhciBhZGQgY29kZSwgaWYgdGhlIHNsb3QgaXMKICAqIGJlaW5nIGR5bmFtaWNhbGx5IGFkZGVkIGR1cmluZyBydW50aW1lLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKaW5kZXggN2RhM2JlZi4uZDU1MmQyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYworKysgYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCkBAIC0xMjk5LDcgKzEyOTksNyBAQAogc3RhdGljIHN0cnVjdCBpb3ZhX2RvbWFpbiByZXNlcnZlZF9pb3ZhX2xpc3Q7CiBzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHJlc2VydmVkX3JidHJlZV9rZXk7CiAKLXN0YXRpYyB2b2lkIGRtYXJfaW5pdF9yZXNlcnZlZF9yYW5nZXModm9pZCkKK3N0YXRpYyBpbnQgZG1hcl9pbml0X3Jlc2VydmVkX3Jhbmdlcyh2b2lkKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgaW92YSAqaW92YTsKQEAgLTEzMTMsOCArMTMxMywxMCBAQAogCS8qIElPQVBJQyByYW5nZXMgc2hvdWxkbid0IGJlIGFjY2Vzc2VkIGJ5IERNQSAqLwogCWlvdmEgPSByZXNlcnZlX2lvdmEoJnJlc2VydmVkX2lvdmFfbGlzdCwgSU9WQV9QRk4oSU9BUElDX1JBTkdFX1NUQVJUKSwKIAkJSU9WQV9QRk4oSU9BUElDX1JBTkdFX0VORCkpOwotCWlmICghaW92YSkKKwlpZiAoIWlvdmEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJSZXNlcnZlIElPQVBJQyByYW5nZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAkvKiBSZXNlcnZlIGFsbCBQQ0kgTU1JTyB0byBhdm9pZCBwZWVyLXRvLXBlZXIgYWNjZXNzICovCiAJZm9yX2VhY2hfcGNpX2RldihwZGV2KSB7CkBAIC0xMzI3LDExICsxMzI5LDEzIEBACiAJCQlpb3ZhID0gcmVzZXJ2ZV9pb3ZhKCZyZXNlcnZlZF9pb3ZhX2xpc3QsCiAJCQkJCSAgICBJT1ZBX1BGTihyLT5zdGFydCksCiAJCQkJCSAgICBJT1ZBX1BGTihyLT5lbmQpKTsKLQkJCWlmICghaW92YSkKKwkJCWlmICghaW92YSkgewogCQkJCXByaW50ayhLRVJOX0VSUiAiUmVzZXJ2ZSBpb3ZhIGZhaWxlZFxuIik7CisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CiAJCX0KIAl9Ci0KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgZG9tYWluX3Jlc2VydmVfc3BlY2lhbF9yYW5nZXMoc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4pCkBAIC0xODM1LDcgKzE4MzksNyBAQAogCiAJcmV0ID0gaW9tbXVfYXR0YWNoX2RvbWFpbihkb21haW4sIGlvbW11KTsKIAlpZiAocmV0KSB7Ci0JCWRvbWFpbl9leGl0KGRvbWFpbik7CisJCWZyZWVfZG9tYWluX21lbShkb21haW4pOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMjIxMyw3ICsyMjE3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IF9faW5pdCBpbml0X2RtYXJzKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpbml0X2RtYXJzKGludCBmb3JjZV9vbikKIHsKIAlzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKmRyaGQ7CiAJc3RydWN0IGRtYXJfcm1ycl91bml0ICpybXJyOwpAQCAtMjI2NSw3ICsyMjY5LDcgQEAKIAkJLyoKIAkJICogVEJEOgogCQkgKiB3ZSBjb3VsZCBzaGFyZSB0aGUgc2FtZSByb290ICYgY29udGV4dCB0YWJsZXMKLQkJICogYW1vdW5nIGFsbCBJT01NVSdzLiBOZWVkIHRvIFNwbGl0IGl0IGxhdGVyLgorCQkgKiBhbW9uZyBhbGwgSU9NTVUncy4gTmVlZCB0byBTcGxpdCBpdCBsYXRlci4KIAkJICovCiAJCXJldCA9IGlvbW11X2FsbG9jX3Jvb3RfZW50cnkoaW9tbXUpOwogCQlpZiAocmV0KSB7CkBAIC0yMzkzLDggKzIzOTcsMTUgQEAKIAkgKiAgIGVuYWJsZSB0cmFuc2xhdGlvbgogCSAqLwogCWZvcl9lYWNoX2RyaGRfdW5pdChkcmhkKSB7Ci0JCWlmIChkcmhkLT5pZ25vcmVkKQorCQlpZiAoZHJoZC0+aWdub3JlZCkgeworCQkJLyoKKwkJCSAqIHdlIGFsd2F5cyBoYXZlIHRvIGRpc2FibGUgUE1ScyBvciBETUEgbWF5IGZhaWwgb24KKwkJCSAqIHRoaXMgZGV2aWNlCisJCQkgKi8KKwkJCWlmIChmb3JjZV9vbikKKwkJCQlpb21tdV9kaXNhYmxlX3Byb3RlY3RfbWVtX3JlZ2lvbnMoZHJoZC0+aW9tbXUpOwogCQkJY29udGludWU7CisJCX0KIAkJaW9tbXUgPSBkcmhkLT5pb21tdTsKIAogCQlpb21tdV9mbHVzaF93cml0ZV9idWZmZXIoaW9tbXUpOwpAQCAtMzI0MCw5ICszMjUxLDE1IEBACiAJaWYgKCFkb21haW4pCiAJCXJldHVybiAwOwogCi0JaWYgKGFjdGlvbiA9PSBCVVNfTk9USUZZX1VOQk9VTkRfRFJJVkVSICYmICFpb21tdV9wYXNzX3Rocm91Z2gpCisJaWYgKGFjdGlvbiA9PSBCVVNfTk9USUZZX1VOQk9VTkRfRFJJVkVSICYmICFpb21tdV9wYXNzX3Rocm91Z2gpIHsKIAkJZG9tYWluX3JlbW92ZV9vbmVfZGV2X2luZm8oZG9tYWluLCBwZGV2KTsKIAorCQlpZiAoIShkb21haW4tPmZsYWdzICYgRE9NQUlOX0ZMQUdfVklSVFVBTF9NQUNISU5FKSAmJgorCQkgICAgIShkb21haW4tPmZsYWdzICYgRE9NQUlOX0ZMQUdfU1RBVElDX0lERU5USVRZKSAmJgorCQkgICAgbGlzdF9lbXB0eSgmZG9tYWluLT5kZXZpY2VzKSkKKwkJCWRvbWFpbl9leGl0KGRvbWFpbik7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMyNzcsMTIgKzMyOTQsMjEgQEAKIAlpZiAobm9faW9tbXUgfHwgZG1hcl9kaXNhYmxlZCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpb21tdV9pbml0X21lbXBvb2woKTsKLQlkbWFyX2luaXRfcmVzZXJ2ZWRfcmFuZ2VzKCk7CisJaWYgKGlvbW11X2luaXRfbWVtcG9vbCgpKSB7CisJCWlmIChmb3JjZV9vbikKKwkJCXBhbmljKCJ0Ym9vdDogRmFpbGVkIHRvIGluaXRpYWxpemUgaW9tbXUgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIAktRU5PREVWOworCX0KKworCWlmIChkbWFyX2luaXRfcmVzZXJ2ZWRfcmFuZ2VzKCkpIHsKKwkJaWYgKGZvcmNlX29uKQorCQkJcGFuaWMoInRib290OiBGYWlsZWQgdG8gcmVzZXJ2ZSBpb21tdSByYW5nZXNcbiIpOworCQlyZXR1cm4gCS1FTk9ERVY7CisJfQogCiAJaW5pdF9ub19yZW1hcHBpbmdfZGV2aWNlcygpOwogCi0JcmV0ID0gaW5pdF9kbWFycygpOworCXJldCA9IGluaXRfZG1hcnMoZm9yY2Vfb24pOwogCWlmIChyZXQpIHsKIAkJaWYgKGZvcmNlX29uKQogCQkJcGFuaWMoInRib290OiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBETUFSc1xuIik7CkBAIC0zMzkxLDYgKzM0MTcsMTEgQEAKIAkJZG9tYWluLT5pb21tdV9jb3VudC0tOwogCQlkb21haW5fdXBkYXRlX2lvbW11X2NhcChkb21haW4pOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb21haW4tPmlvbW11X2xvY2ssIHRtcF9mbGFncyk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5sb2NrLCB0bXBfZmxhZ3MpOworCQljbGVhcl9iaXQoZG9tYWluLT5pZCwgaW9tbXUtPmRvbWFpbl9pZHMpOworCQlpb21tdS0+ZG9tYWluc1tkb21haW4tPmlkXSA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5sb2NrLCB0bXBfZmxhZ3MpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldmljZV9kb21haW5fbG9jaywgZmxhZ3MpOwpAQCAtMzYwNyw5ICszNjM4LDkgQEAKIAogCQlwdGUgPSBkbWFyX2RvbWFpbi0+cGdkOwogCQlpZiAoZG1hX3B0ZV9wcmVzZW50KHB0ZSkpIHsKLQkJCWZyZWVfcGd0YWJsZV9wYWdlKGRtYXJfZG9tYWluLT5wZ2QpOwogCQkJZG1hcl9kb21haW4tPnBnZCA9IChzdHJ1Y3QgZG1hX3B0ZSAqKQogCQkJCXBoeXNfdG9fdmlydChkbWFfcHRlX2FkZHIocHRlKSk7CisJCQlmcmVlX3BndGFibGVfcGFnZShwdGUpOwogCQl9CiAJCWRtYXJfZG9tYWluLT5hZ2F3LS07CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYyBiL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKaW5kZXggYTIyNTU3Yi4uMzYwN2ZhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYworKysgYi9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCkBAIC0yODksNyArMjg5LDcgQEAKICAqIHNvdXJjZSB2YWxpZGF0aW9uIHR5cGUKICAqLwogI2RlZmluZSBTVlRfTk9fVkVSSUZZCQkweDAgIC8qIG5vIHZlcmlmaWNhdGlvbiBpcyByZXF1aXJlZCAqLwotI2RlZmluZSBTVlRfVkVSSUZZX1NJRF9TUQkweDEgIC8qIHZlcmlmeSB1c2luZyBTSUQgYW5kIFNRIGZpZWxzICovCisjZGVmaW5lIFNWVF9WRVJJRllfU0lEX1NRCTB4MSAgLyogdmVyaWZ5IHVzaW5nIFNJRCBhbmQgU1EgZmllbGRzICovCiAjZGVmaW5lIFNWVF9WRVJJRllfQlVTCQkweDIgIC8qIHZlcmlmeSBidXMgb2YgcmVxdWVzdC1pZCAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW92YS5jIGIvZHJpdmVycy9wY2kvaW92YS5jCmluZGV4IDc5MTQ5NTEuLjk2MDZlNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2lvdmEuYworKysgYi9kcml2ZXJzL3BjaS9pb3ZhLmMKQEAgLTM5MSw3ICszOTEsNyBAQAogCQkJCWJyZWFrOwogCX0KIAotCS8qIFdlIGFyZSBoZXJlIGVpdGhlciBiZWNhc3VlIHRoaXMgaXMgdGhlIGZpcnN0IHJlc2VydmVyIG5vZGUKKwkvKiBXZSBhcmUgaGVyZSBlaXRoZXIgYmVjYXVzZSB0aGlzIGlzIHRoZSBmaXJzdCByZXNlcnZlciBub2RlCiAJICogb3IgbmVlZCB0byBpbnNlcnQgcmVtYWluaW5nIG5vbiBvdmVybGFwIGFkZHIgcmFuZ2UKIAkgKi8KIAlpb3ZhID0gX19pbnNlcnRfbmV3X3JhbmdlKGlvdmFkLCBwZm5fbG8sIHBmbl9oaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKaW5kZXggZDg2ZWE4Yi4uMTM1ZGYxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwpAQCAtNzgxLDcgKzc4MSw3IEBACiAKICNlbmRpZiAvKiAhQ09ORklHX1NVU1BFTkQgKi8KIAotI2lmZGVmIENPTkZJR19ISUJFUk5BVElPTgorI2lmZGVmIENPTkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTCiAKIHN0YXRpYyBpbnQgcGNpX3BtX2ZyZWV6ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC05NzAsNyArOTcwLDcgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLSNlbHNlIC8qICFDT05GSUdfSElCRVJOQVRJT04gKi8KKyNlbHNlIC8qICFDT05GSUdfSElCRVJOQVRFX0NBTExCQUNLUyAqLwogCiAjZGVmaW5lIHBjaV9wbV9mcmVlemUJCU5VTEwKICNkZWZpbmUgcGNpX3BtX2ZyZWV6ZV9ub2lycQlOVUxMCkBAIC05ODEsNyArOTgxLDcgQEAKICNkZWZpbmUgcGNpX3BtX3Jlc3RvcmUJCU5VTEwKICNkZWZpbmUgcGNpX3BtX3Jlc3RvcmVfbm9pcnEJTlVMTAogCi0jZW5kaWYgLyogIUNPTkZJR19ISUJFUk5BVElPTiAqLworI2VuZGlmIC8qICFDT05GSUdfSElCRVJOQVRFX0NBTExCQUNLUyAqLwogCiAjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYwppbmRleCBhOGEyNzdhLi5mOGRlYjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYwpAQCAtNjQ1LDcgKzY0NSw3IEBACiAgKiBhIHBlci1idXMgYmFzaXMuICBUaGlzIHJvdXRpbmUgY3JlYXRlcyB0aGUgZmlsZXMgYW5kIHRpZXMgdGhlbSBpbnRvCiAgKiB0aGVpciBhc3NvY2lhdGVkIHJlYWQsIHdyaXRlIGFuZCBtbWFwIGZpbGVzIGZyb20gcGNpLXN5c2ZzLmMKICAqCi0gKiBPbiBlcnJvciB1bndpbmQsIGJ1dCBkb24ndCBwcm9wb2dhdGUgdGhlIGVycm9yIHRvIHRoZSBjYWxsZXIKKyAqIE9uIGVycm9yIHVud2luZCwgYnV0IGRvbid0IHByb3BhZ2F0ZSB0aGUgZXJyb3IgdG8gdGhlIGNhbGxlcgogICogYXMgaXQgaXMgb2sgdG8gc2V0IHVwIHRoZSBQQ0kgYnVzIHdpdGhvdXQgdGhlc2UgZmlsZXMuCiAgKi8KIHZvaWQgcGNpX2NyZWF0ZV9sZWdhY3lfZmlsZXMoc3RydWN0IHBjaV9idXMgKmIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IGJkODBmNjMuLjUxMjllZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC0yNjMsNyArMjYzLDcgQEAKIAkgKglUaGlzIGhhcHBlbnMgdG8gaW5jbHVkZSB0aGUgSURFIGNvbnRyb2xsZXJzLi4uLgogCSAqCiAJICoJVklBIG9ubHkgYXBwbHkgdGhpcyBmaXggd2hlbiBhbiBTQiBMaXZlISBpcyBwcmVzZW50IGJ1dCB1bmRlcgotCSAqCWJvdGggTGludXggYW5kIFdpbmRvd3MgdGhpcyBpc250IGVub3VnaCwgYW5kIHdlIGhhdmUgc2VlbgorCSAqCWJvdGggTGludXggYW5kIFdpbmRvd3MgdGhpcyBpc24ndCBlbm91Z2gsIGFuZCB3ZSBoYXZlIHNlZW4KIAkgKgljb3JydXB0aW9uIHdpdGhvdXQgU0IgTGl2ZSEgYnV0IHdpdGggdGhpbmdzIGxpa2UgMyBVRE1BIElERQogCSAqCWNvbnRyb2xsZXJzLiBTbyB3ZSBpZ25vcmUgdGhhdCBiaXQgb2YgdGhlIFZJQSByZWNvbW1lbmRhdGlvbi4uCiAJICovCkBAIC0yNjgwLDcgKzI2ODAsNyBAQAogICogVGhpcyBpcyBhIHF1aXJrIGZvciB0aGUgUmljb2ggTU1DIGNvbnRyb2xsZXIgZm91bmQgYXMgYSBwYXJ0IG9mCiAgKiBzb21lIG11bGlmdW5jdGlvbiBjaGlwcy4KIAotICogVGhpcyBpcyB2ZXJ5IHNpbWlsaWFyIGFuZCBiYXNlZCBvbiB0aGUgcmljb2hfbW1jIGRyaXZlciB3cml0dGVuIGJ5CisgKiBUaGlzIGlzIHZlcnkgc2ltaWxhciBhbmQgYmFzZWQgb24gdGhlIHJpY29oX21tYyBkcml2ZXIgd3JpdHRlbiBieQogICogUGhpbGlwIExhbmdkYWxlLiBUaGFuayB5b3UgZm9yIHRoZXNlIG1hZ2ljIHNlcXVlbmNlcy4KICAqCiAgKiBUaGVzZSBjaGlwcyBpbXBsZW1lbnQgdGhlIGZvdXIgbWFpbiBtZW1vcnkgY2FyZCBjb250cm9sbGVycyAoU0QsIE1NQywgTVMsIHhEKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwppbmRleCA4OWQwYTZhLi5hODA2Y2IzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwpAQCAtNTc5LDcgKzU3OSw3IEBACiAJfQogCXNpemUwID0gY2FsY3VsYXRlX2lvc2l6ZShzaXplLCBtaW5fc2l6ZSwgc2l6ZTEsCiAJCQlyZXNvdXJjZV9zaXplKGJfcmVzKSwgNDA5Nik7Ci0Jc2l6ZTEgPSAhYWRkX3NpemU/IHNpemUwOgorCXNpemUxID0gKCFhZGRfaGVhZCB8fCAoYWRkX2hlYWQgJiYgIWFkZF9zaXplKSkgPyBzaXplMCA6CiAJCWNhbGN1bGF0ZV9pb3NpemUoc2l6ZSwgbWluX3NpemUrYWRkX3NpemUsIHNpemUxLAogCQkJcmVzb3VyY2Vfc2l6ZShiX3JlcyksIDQwOTYpOwogCWlmICghc2l6ZTAgJiYgIXNpemUxKSB7CkBAIC02NzYsMTAgKzY3NiwxMCBAQAogCQkJbWluX2FsaWduID0gYWxpZ24xID4+IDE7CiAJCWFsaWduICs9IGFsaWduc1tvcmRlcl07CiAJfQotCXNpemUwID0gY2FsY3VsYXRlX21lbXNpemUoc2l6ZSwgbWluX3NpemUsIDAsIHJlc291cmNlX3NpemUoYl9yZXMpLCBhbGlnbik7Ci0Jc2l6ZTEgPSAhYWRkX3NpemUgPyBzaXplIDoKKwlzaXplMCA9IGNhbGN1bGF0ZV9tZW1zaXplKHNpemUsIG1pbl9zaXplLCAwLCByZXNvdXJjZV9zaXplKGJfcmVzKSwgbWluX2FsaWduKTsKKwlzaXplMSA9ICghYWRkX2hlYWQgfHwgKGFkZF9oZWFkICYmICFhZGRfc2l6ZSkpID8gc2l6ZTAgOgogCQljYWxjdWxhdGVfbWVtc2l6ZShzaXplLCBtaW5fc2l6ZSthZGRfc2l6ZSwgMCwKLQkJCQlyZXNvdXJjZV9zaXplKGJfcmVzKSwgYWxpZ24pOworCQkJCXJlc291cmNlX3NpemUoYl9yZXMpLCBtaW5fYWxpZ24pOwogCWlmICghc2l6ZTAgJiYgIXNpemUxKSB7CiAJCWlmIChiX3Jlcy0+c3RhcnQgfHwgYl9yZXMtPmVuZCkKIAkJCWRldl9pbmZvKCZidXMtPnNlbGYtPmRldiwgImRpc2FibGluZyBicmlkZ2Ugd2luZG93ICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2k4MjA5Mi5jIGIvZHJpdmVycy9wY21jaWEvaTgyMDkyLmMKaW5kZXggZmM3OTA2ZS4uM2U0NDdkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvaTgyMDkyLmMKKysrIGIvZHJpdmVycy9wY21jaWEvaTgyMDkyLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAkuc2V0X21lbV9tYXAJCT0gaTgyMDkyYWFfc2V0X21lbV9tYXAsCiB9OwogCi0vKiBUaGUgY2FyZCBjYW4gZG8gdXB0byA0IHNvY2tldHMsIGFsbG9jYXRlIGEgc3RydWN0dXJlIGZvciBlYWNoIG9mIHRoZW0gKi8KKy8qIFRoZSBjYXJkIGNhbiBkbyB1cCB0byA0IHNvY2tldHMsIGFsbG9jYXRlIGEgc3RydWN0dXJlIGZvciBlYWNoIG9mIHRoZW0gKi8KIAogc3RydWN0IHNvY2tldF9pbmZvIHsKIAlpbnQJbnVtYmVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYwppbmRleCA0MmZiZjFhLi5lOGMxOWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYwpAQCAtMTczLDcgKzE3Myw3IEBACiAJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAKIAlpZiAoIShjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpKSB7Ci0JCWRldl9kYmcoJnBfZGV2LT5kZXYsICJDb25maWd1cmF0aW9uIGlzbnQndCBsb2NrZWRcbiIpOworCQlkZXZfZGJnKCZwX2Rldi0+ZGV2LCAiQ29uZmlndXJhdGlvbiBpc24ndCBsb2NrZWRcbiIpOwogCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCXJldHVybiAtRUFDQ0VTOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYWxsb29uMy5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2JhbGxvb24zLmMKaW5kZXggNDUzYzU0Yy4uNGMzZTk0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2JhbGxvb24zLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2JhbGxvb24zLmMKQEAgLTI1LDYgKzI1LDggQEAKIAogI2luY2x1ZGUgPG1hY2gvYmFsbG9vbjMuaD4KIAorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKICNpbmNsdWRlICJzb2NfY29tbW9uLmgiCiAKIC8qCkBAIC0xMjcsNiArMTI5LDkgQEAKIHsKIAlpbnQgcmV0OwogCisJaWYgKCFtYWNoaW5lX2lzX2JhbGxvb24zKCkpCisJCXJldHVybiAtRU5PREVWOworCiAJYmFsbG9vbjNfcGNtY2lhX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygicHhhMnh4LXBjbWNpYSIsIC0xKTsKIAlpZiAoIWJhbGxvb24zX3BjbWNpYV9kZXZpY2UpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2x1YmJvY2suYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9sdWJib2NrLmMKaW5kZXggMjVhZmU2My4uYzIxODg4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2x1YmJvY2suYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfbHViYm9jay5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAkJCSAqIFdlIG5lZWQgdG8gaGFjayBhcm91bmQgdGhlIGNvbnN0IHF1YWxpZmllciBhcwogCQkJICogd2VsbCB0byBrZWVwIHRoaXMgdWdseSB3b3JrYXJvdW5kIGxvY2FsaXplZCBhbmQKIAkJCSAqIG5vdCBmb3JjZSBpdCB0byB0aGUgcmVzdCBvZiB0aGUgY29kZS4gQmFyZiBiYWdzCi0JCQkgKiBhdmFsaWFibGUgaW4gdGhlIHNlYXQgcG9ja2V0IGluIGZyb250IG9mIHlvdSEKKwkJCSAqIGF2YWlsYWJsZSBpbiB0aGUgc2VhdCBwb2NrZXQgaW4gZnJvbnQgb2YgeW91IQogCQkJICovCiAJCQkoKHNvY2tldF9zdGF0ZV90ICopc3RhdGUpLT5WY2MgPSA1MDsKIAkJCSgoc29ja2V0X3N0YXRlX3QgKilzdGF0ZSktPlZwcCA9IDUwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X3RyaXplcHM0LmMgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfdHJpemVwczQuYwppbmRleCBiN2U1OTY2Li5iODI5ZTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfdHJpemVwczQuYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfdHJpemVwczQuYwpAQCAtNjksMTUgKzY5LDE1IEBACiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXJxcyk7IGkrKykgewogCQlpZiAoaXJxc1tpXS5zb2NrICE9IHNrdC0+bnIpCiAJCQljb250aW51ZTsKLQkJaWYgKGdwaW9fcmVxdWVzdChJUlFfVE9fR1BJTyhpcnFzW2ldLmlycSksIGlycXNbaV0uc3RyKSA8IDApIHsKKwkJaWYgKGdwaW9fcmVxdWVzdChpcnFfdG9fZ3BpbyhpcnFzW2ldLmlycSksIGlycXNbaV0uc3RyKSA8IDApIHsKIAkJCXByX2VycigiJXM6IHNvY2sgJWQgdW5hYmxlIHRvIHJlcXVlc3QgZ3BpbyAlZFxuIiwKLQkJCQlfX2Z1bmNfXywgc2t0LT5uciwgSVJRX1RPX0dQSU8oaXJxc1tpXS5pcnEpKTsKKwkJCQlfX2Z1bmNfXywgc2t0LT5uciwgaXJxX3RvX2dwaW8oaXJxc1tpXS5pcnEpKTsKIAkJCXJldCA9IC1FQlVTWTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KLQkJaWYgKGdwaW9fZGlyZWN0aW9uX2lucHV0KElSUV9UT19HUElPKGlycXNbaV0uaXJxKSkgPCAwKSB7CisJCWlmIChncGlvX2RpcmVjdGlvbl9pbnB1dChpcnFfdG9fZ3BpbyhpcnFzW2ldLmlycSkpIDwgMCkgewogCQkJcHJfZXJyKCIlczogc29jayAlZCB1bmFibGUgdG8gc2V0IGlucHV0IGdwaW8gJWRcbiIsCi0JCQkJX19mdW5jX18sIHNrdC0+bnIsIElSUV9UT19HUElPKGlycXNbaV0uaXJxKSk7CisJCQkJX19mdW5jX18sIHNrdC0+bnIsIGlycV90b19ncGlvKGlycXNbaV0uaXJxKSk7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBlcnJvcjsKIAkJfQpAQCAtODYsNyArODYsNyBAQAogCiBlcnJvcjoKIAlmb3IgKDsgaSA+PSAwOyBpLS0pIHsKLQkJZ3Bpb19mcmVlKElSUV9UT19HUElPKGlycXNbaV0uaXJxKSk7CisJCWdwaW9fZnJlZShpcnFfdG9fZ3BpbyhpcnFzW2ldLmlycSkpOwogCX0KIAlyZXR1cm4gKHJldCk7CiB9CkBAIC05Nyw3ICs5Nyw3IEBACiAJLyogZnJlZSBhbGxvY2F0ZWQgZ3BpbydzICovCiAJZ3Bpb19mcmVlKEdQSU9fUFJEWSk7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXJxcyk7IGkrKykKLQkJZ3Bpb19mcmVlKElSUV9UT19HUElPKGlycXNbaV0uaXJxKSk7CisJCWdwaW9fZnJlZShpcnFfdG9fZ3BpbyhpcnFzW2ldLmlycSkpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB0cml6ZXBzX3BjbWNpYV9zdGF0dXNbMl07CkBAIC0yMjYsNiArMjI2LDkgQEAKIHsKIAlpbnQgcmV0OwogCisJaWYgKCFtYWNoaW5lX2lzX3RyaXplcHM0KCkgJiYgIW1hY2hpbmVfaXNfdHJpemVwczR3bCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCXRyaXplcHNfcGNtY2lhX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygicHhhMnh4LXBjbWNpYSIsIC0xKTsKIAlpZiAoIXRyaXplcHNfcGNtY2lhX2RldmljZSkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS90aTExM3guaCBiL2RyaXZlcnMvcGNtY2lhL3RpMTEzeC5oCmluZGV4IDlmZmE5N2QuLmE3MTc4OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3RpMTEzeC5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL3RpMTEzeC5oCkBAIC02OTEsNyArNjkxLDcgQEAKIAkJLyoKIAkJICogdGhvc2UgYXJlIGVpdGhlciBzaW5nbGUgb3IgZHVhbCBzbG90IENCIHdpdGggYWRkaXRpb25hbCBmdW5jdGlvbnMKIAkJICogbGlrZSAxMzk0LCBzbWFydGNhcmQgcmVhZGVyLCBldGMuIGNoZWNrIHRoZSBUSUVBTEwgZmxhZyBmb3IgdGhlbQotCQkgKiB0aGUgVElFQUxMIGZsYWcgYmluZHMgdGhlIElSUSBvZiBhbGwgZnVuY3Rpb25zIHRvZ2hldGhlci4KKwkJICogdGhlIFRJRUFMTCBmbGFnIGJpbmRzIHRoZSBJUlEgb2YgYWxsIGZ1bmN0aW9ucyB0b2dldGhlci4KIAkJICogd2UgY2F0Y2ggdGhlIHNpbmdsZSBzbG90IHZhcmlhbnRzIGxhdGVyLgogCQkgKi8KIAkJc3lzY3RsID0gY29uZmlnX3JlYWRsKHNvY2tldCwgVEkxMTNYX1NZU1RFTV9DT05UUk9MKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCmluZGV4IDJlZTQ0MmMuLjA0ODVlMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZwpAQCAtMTg3LDcgKzE4Nyw4IEBACiAJZGVwZW5kcyBvbiBBQ1BJCiAJZGVwZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCiAJZGVwZW5kcyBvbiBSRktJTEwKLQlkZXBlbmRzIG9uIFNFUklPX0k4MDQyCisJZGVwZW5kcyBvbiBJTlBVVCAmJiBTRVJJT19JODA0MgorCXNlbGVjdCBJTlBVVF9TUEFSU0VLTUFQCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgbGFwdG9wcyBidWlsdCBieSBNU0kgKE1JQ1JPLVNUQVIKIAkgIElOVEVSTkFUSU9OQUwpOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlci13bWkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMKaW5kZXggNWVhNmMzNC4uYWM0ZTdmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlci13bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCkBAIC04OSw3ICs4OSw3IEBACiAjZGVmaW5lIEFDRVJXTUlEX0VWRU5UX0dVSUQgIjY3NkFBMTVFLTZBNDctNEQ5Ri1BMkNDLTFFNkQxOEQxNDAyNiIKIAogTU9EVUxFX0FMSUFTKCJ3bWk6NjdDMzM3MUQtOTVBMy00QzM3LUJCNjEtREQ0N0I0OTFEQUFCIik7Ci1NT0RVTEVfQUxJQVMoIndtaTo2QUY0RjI1OC1CNDAxLTQyRmQtQkU5MS0zRDRBQzJEN0MwRDMiKTsKK01PRFVMRV9BTElBUygid21pOjZBRjRGMjU4LUI0MDEtNDJGRC1CRTkxLTNENEFDMkQ3QzBEMyIpOwogTU9EVUxFX0FMSUFTKCJ3bWk6Njc2QUExNUUtNkE0Ny00RDlGLUEyQ0MtMUU2RDE4RDE0MDI2Iik7CiAKIGVudW0gYWNlcl93bWlfZXZlbnRfaWRzIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLXdtaS5jCmluZGV4IGVmYzc3NmMuLjgzMmEzZmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLXdtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtd21pLmMKQEAgLTIwMSw4ICsyMDEsOCBAQAogCWlmICghYXN1cy0+aW5wdXRkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JYXN1cy0+aW5wdXRkZXYtPm5hbWUgPSBhc3VzLT5kcml2ZXItPmlucHV0X3BoeXM7Ci0JYXN1cy0+aW5wdXRkZXYtPnBoeXMgPSBhc3VzLT5kcml2ZXItPmlucHV0X25hbWU7CisJYXN1cy0+aW5wdXRkZXYtPm5hbWUgPSBhc3VzLT5kcml2ZXItPmlucHV0X25hbWU7CisJYXN1cy0+aW5wdXRkZXYtPnBoeXMgPSBhc3VzLT5kcml2ZXItPmlucHV0X3BoeXM7CiAJYXN1cy0+aW5wdXRkZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKIAlhc3VzLT5pbnB1dGRldi0+ZGV2LnBhcmVudCA9ICZhc3VzLT5wbGF0Zm9ybV9kZXZpY2UtPmRldjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYwppbmRleCA1ZjJkZDM4Li4yYzFhYmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYwpAQCAtNTg1LDggKzU4NSw5IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIGVlZXBjX3Jma2lsbF9ob3RwbHVnKHN0cnVjdCBlZWVwY19sYXB0b3AgKmVlZXBjKQorc3RhdGljIHZvaWQgZWVlcGNfcmZraWxsX2hvdHBsdWcoc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMsIGFjcGlfaGFuZGxlIGhhbmRsZSkKIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcG9ydDsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCXN0cnVjdCBwY2lfYnVzICpidXM7CiAJYm9vbCBibG9ja2VkID0gZWVlcGNfd2xhbl9yZmtpbGxfYmxvY2tlZChlZWVwYyk7CkBAIC01OTksOSArNjAwLDE2IEBACiAJbXV0ZXhfbG9jaygmZWVlcGMtPmhvdHBsdWdfbG9jayk7CiAKIAlpZiAoZWVlcGMtPmhvdHBsdWdfc2xvdCkgewotCQlidXMgPSBwY2lfZmluZF9idXMoMCwgMSk7CisJCXBvcnQgPSBhY3BpX2dldF9wY2lfZGV2KGhhbmRsZSk7CisJCWlmICghcG9ydCkgeworCQkJcHJfd2FybmluZygiVW5hYmxlIHRvIGZpbmQgcG9ydFxuIik7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKworCQlidXMgPSBwb3J0LT5zdWJvcmRpbmF0ZTsKKwogCQlpZiAoIWJ1cykgewotCQkJcHJfd2FybmluZygiVW5hYmxlIHRvIGZpbmQgUENJIGJ1cyAxP1xuIik7CisJCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gZmluZCBQQ0kgYnVzP1xuIik7CiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KIApAQCAtNjA5LDYgKzYxNyw3IEBACiAJCQlwcl9lcnIoIlVuYWJsZSB0byByZWFkIFBDSSBjb25maWcgc3BhY2U/XG4iKTsKIAkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQorCiAJCWFic2VudCA9IChsID09IDB4ZmZmZmZmZmYpOwogCiAJCWlmIChibG9ja2VkICE9IGFic2VudCkgewpAQCAtNjQ3LDYgKzY1NiwxNyBAQAogCW11dGV4X3VubG9jaygmZWVlcGMtPmhvdHBsdWdfbG9jayk7CiB9CiAKK3N0YXRpYyB2b2lkIGVlZXBjX3Jma2lsbF9ob3RwbHVnX3VwZGF0ZShzdHJ1Y3QgZWVlcGNfbGFwdG9wICplZWVwYywgY2hhciAqbm9kZSkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CisKKwlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoTlVMTCwgbm9kZSwgJmhhbmRsZSk7CisKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCisJCWVlZXBjX3Jma2lsbF9ob3RwbHVnKGVlZXBjLCBoYW5kbGUpOworfQorCiBzdGF0aWMgdm9pZCBlZWVwY19yZmtpbGxfbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBlZWVwY19sYXB0b3AgKmVlZXBjID0gZGF0YTsKQEAgLTY1NCw3ICs2NzQsNyBAQAogCWlmIChldmVudCAhPSBBQ1BJX05PVElGWV9CVVNfQ0hFQ0spCiAJCXJldHVybjsKIAotCWVlZXBjX3Jma2lsbF9ob3RwbHVnKGVlZXBjKTsKKwllZWVwY19yZmtpbGxfaG90cGx1ZyhlZWVwYywgaGFuZGxlKTsKIH0KIAogc3RhdGljIGludCBlZWVwY19yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMsCkBAIC02NzIsNiArNjkyLDExIEBACiAJCQkJCQkgICAgIGVlZXBjKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQkJcHJfd2FybmluZygiRmFpbGVkIHRvIHJlZ2lzdGVyIG5vdGlmeSBvbiAlc1xuIiwgbm9kZSk7CisJCS8qCisJCSAqIFJlZnJlc2ggcGNpIGhvdHBsdWcgaW4gY2FzZSB0aGUgcmZraWxsIHN0YXRlIHdhcworCQkgKiBjaGFuZ2VkIGR1cmluZyBzZXR1cC4KKwkJICovCisJCWVlZXBjX3Jma2lsbF9ob3RwbHVnKGVlZXBjLCBoYW5kbGUpOwogCX0gZWxzZQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtNjkzLDYgKzcxOCwxMiBAQAogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCQlwcl9lcnIoIkVycm9yIHJlbW92aW5nIHJma2lsbCBub3RpZnkgaGFuZGxlciAlc1xuIiwKIAkJCQlub2RlKTsKKwkJCS8qCisJCQkgKiBSZWZyZXNoIHBjaSBob3RwbHVnIGluIGNhc2UgdGhlIHJma2lsbAorCQkJICogc3RhdGUgd2FzIGNoYW5nZWQgYWZ0ZXIKKwkJCSAqIGVlZXBjX3VucmVnaXN0ZXJfcmZraWxsX25vdGlmaWVyKCkKKwkJCSAqLworCQllZWVwY19yZmtpbGxfaG90cGx1ZyhlZWVwYywgaGFuZGxlKTsKIAl9CiB9CiAKQEAgLTgxNiwxMSArODQ3LDcgQEAKIAkJcmZraWxsX2Rlc3Ryb3koZWVlcGMtPndsYW5fcmZraWxsKTsKIAkJZWVlcGMtPndsYW5fcmZraWxsID0gTlVMTDsKIAl9Ci0JLyoKLQkgKiBSZWZyZXNoIHBjaSBob3RwbHVnIGluIGNhc2UgdGhlIHJma2lsbCBzdGF0ZSB3YXMgY2hhbmdlZCBhZnRlcgotCSAqIGVlZXBjX3VucmVnaXN0ZXJfcmZraWxsX25vdGlmaWVyKCkKLQkgKi8KLQllZWVwY19yZmtpbGxfaG90cGx1ZyhlZWVwYyk7CisKIAlpZiAoZWVlcGMtPmhvdHBsdWdfc2xvdCkKIAkJcGNpX2hwX2RlcmVnaXN0ZXIoZWVlcGMtPmhvdHBsdWdfc2xvdCk7CiAKQEAgLTg4OSwxMSArOTE2LDYgQEAKIAllZWVwY19yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoZWVlcGMsICJcXF9TQi5QQ0kwLlAwUDUiKTsKIAllZWVwY19yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoZWVlcGMsICJcXF9TQi5QQ0kwLlAwUDYiKTsKIAllZWVwY19yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoZWVlcGMsICJcXF9TQi5QQ0kwLlAwUDciKTsKLQkvKgotCSAqIFJlZnJlc2ggcGNpIGhvdHBsdWcgaW4gY2FzZSB0aGUgcmZraWxsIHN0YXRlIHdhcyBjaGFuZ2VkIGR1cmluZwotCSAqIHNldHVwLgotCSAqLwotCWVlZXBjX3Jma2lsbF9ob3RwbHVnKGVlZXBjKTsKIAogZXhpdDoKIAlpZiAocmVzdWx0ICYmIHJlc3VsdCAhPSAtRU5PREVWKQpAQCAtOTI4LDggKzk1MCwxMSBAQAogCXN0cnVjdCBlZWVwY19sYXB0b3AgKmVlZXBjID0gZGV2X2dldF9kcnZkYXRhKGRldmljZSk7CiAKIAkvKiBSZWZyZXNoIGJvdGggd2xhbiByZmtpbGwgc3RhdGUgYW5kIHBjaSBob3RwbHVnICovCi0JaWYgKGVlZXBjLT53bGFuX3Jma2lsbCkKLQkJZWVlcGNfcmZraWxsX2hvdHBsdWcoZWVlcGMpOworCWlmIChlZWVwYy0+d2xhbl9yZmtpbGwpIHsKKwkJZWVlcGNfcmZraWxsX2hvdHBsdWdfdXBkYXRlKGVlZXBjLCAiXFxfU0IuUENJMC5QMFA1Iik7CisJCWVlZXBjX3Jma2lsbF9ob3RwbHVnX3VwZGF0ZShlZWVwYywgIlxcX1NCLlBDSTAuUDBQNiIpOworCQllZWVwY19yZmtpbGxfaG90cGx1Z191cGRhdGUoZWVlcGMsICJcXF9TQi5QQ0kwLlAwUDciKTsKKwl9CiAKIAlpZiAoZWVlcGMtPmJsdWV0b290aF9yZmtpbGwpCiAJCXJma2lsbF9zZXRfc3dfc3RhdGUoZWVlcGMtPmJsdWV0b290aF9yZmtpbGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy13bWkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLXdtaS5jCmluZGV4IDBkZGM0MzQuLjY0OWRjYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLXdtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLXdtaS5jCkBAIC02Nyw5ICs2NywxMSBAQAogCXsgS0VfS0VZLCAweDgyLCB7IEtFWV9DQU1FUkEgfSB9LAogCXsgS0VfS0VZLCAweDgzLCB7IEtFWV9DQU1FUkFfWk9PTUlOIH0gfSwKIAl7IEtFX0tFWSwgMHg4OCwgeyBLRVlfV0xBTiB9IH0sCisJeyBLRV9LRVksIDB4YmQsIHsgS0VZX0NBTUVSQSB9IH0sCiAJeyBLRV9LRVksIDB4Y2MsIHsgS0VZX1NXSVRDSFZJREVPTU9ERSB9IH0sCiAJeyBLRV9LRVksIDB4ZTAsIHsgS0VZX1BST0cxIH0gfSwgLyogVGFzayBNYW5hZ2VyICovCiAJeyBLRV9LRVksIDB4ZTEsIHsgS0VZX0YxNCB9IH0sIC8qIENoYW5nZSBSZXNvbHV0aW9uICovCisJeyBLRV9LRVksIDB4ZTgsIHsgS0VZX1NDUkVFTkxPQ0sgfSB9LAogCXsgS0VfS0VZLCAweGU5LCB7IEtFWV9CUklHSFRORVNTX1pFUk8gfSB9LAogCXsgS0VfS0VZLCAweGViLCB7IEtFWV9DQU1FUkFfWk9PTU9VVCB9IH0sCiAJeyBLRV9LRVksIDB4ZWMsIHsgS0VZX0NBTUVSQV9VUCB9IH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9taWRfdGhlcm1hbC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfbWlkX3RoZXJtYWwuYwppbmRleCA2YzEyZGI1Li5jMmY0YmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9taWRfdGhlcm1hbC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX21pZF90aGVybWFsLmMKQEAgLTIwMiw3ICsyMDIsNyBAQAogICAgICAgIGlmIChyZXQpCiAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogCi0gICAgICAgLyogU2hpZnQgYml0cyB0byBhY2NvbW9kYXRlIHRoZSBsb3dlciB0d28gZGF0YSBiaXRzICovCisgICAgICAgLyogU2hpZnQgYml0cyB0byBhY2NvbW1vZGF0ZSB0aGUgbG93ZXIgdHdvIGRhdGEgYml0cyAqLwogICAgICAgIGFkY192YWwgPSAoZGF0YSA8PCAyKTsKICAgICAgICBhZGRyKys7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3BtaWNfZ3Bpby5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfcG1pY19ncGlvLmMKaW5kZXggZDY1MzEwNC4uNDY0YmIzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfcG1pY19ncGlvLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfcG1pY19ncGlvLmMKQEAgLTc0LDYgKzc0LDE5IEBACiAJdTMyCQkJdHJpZ2dlcl90eXBlOwogfTsKIAorc3RhdGljIHZvaWQgcG1pY19wcm9ncmFtX2lycXR5cGUoaW50IGdwaW8sIGludCB0eXBlKQoreworCWlmICh0eXBlICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpCisJCWludGVsX3NjdV9pcGNfdXBkYXRlX3JlZ2lzdGVyKEdQSU8wICsgZ3BpbywgMHgyMCwgMHgyMCk7CisJZWxzZQorCQlpbnRlbF9zY3VfaXBjX3VwZGF0ZV9yZWdpc3RlcihHUElPMCArIGdwaW8sIDB4MDAsIDB4MjApOworCisJaWYgKHR5cGUgJiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpCisJCWludGVsX3NjdV9pcGNfdXBkYXRlX3JlZ2lzdGVyKEdQSU8wICsgZ3BpbywgMHgxMCwgMHgxMCk7CisJZWxzZQorCQlpbnRlbF9zY3VfaXBjX3VwZGF0ZV9yZWdpc3RlcihHUElPMCArIGdwaW8sIDB4MDAsIDB4MTApOworfTsKKwogc3RhdGljIGludCBwbWljX2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKIAlpZiAob2Zmc2V0ID4gOCkgewpAQCAtMTY2LDE2ICsxNzksMzggQEAKIAlyZXR1cm4gcGctPmlycV9iYXNlICsgb2Zmc2V0OwogfQogCitzdGF0aWMgdm9pZCBwbWljX2J1c19sb2NrKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgcG1pY19ncGlvICpwZyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOworCisJbXV0ZXhfbG9jaygmcGctPmJ1c2xvY2spOworfQorCitzdGF0aWMgdm9pZCBwbWljX2J1c19zeW5jX3VubG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IHBtaWNfZ3BpbyAqcGcgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkYXRhKTsKKworCWlmIChwZy0+dXBkYXRlX3R5cGUpIHsKKwkJdW5zaWduZWQgaW50IGdwaW8gPSBwZy0+dXBkYXRlX3R5cGUgJiB+R1BJT19VUERBVEVfVFlQRTsKKworCQlwbWljX3Byb2dyYW1faXJxdHlwZShncGlvLCBwZy0+dHJpZ2dlcl90eXBlKTsKKwkJcGctPnVwZGF0ZV90eXBlID0gMDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZwZy0+YnVzbG9jayk7Cit9CisKIC8qIHRoZSBncGlvaW50ciByZWdpc3RlciBpcyByZWFkLWNsZWFyLCBzbyBqdXN0IGRvIG5vdGhpbmcuICovCiBzdGF0aWMgdm9pZCBwbWljX2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkYXRhKSB7IH0KIAogc3RhdGljIHZvaWQgcG1pY19pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpIHsgfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHBtaWNfaXJxY2hpcCA9IHsKLQkubmFtZQkJPSAiUE1JQy1HUElPIiwKLQkuaXJxX21hc2sJPSBwbWljX2lycV9tYXNrLAotCS5pcnFfdW5tYXNrCT0gcG1pY19pcnFfdW5tYXNrLAotCS5pcnFfc2V0X3R5cGUJPSBwbWljX2lycV90eXBlLAorCS5uYW1lCQkJPSAiUE1JQy1HUElPIiwKKwkuaXJxX21hc2sJCT0gcG1pY19pcnFfbWFzaywKKwkuaXJxX3VubWFzawkJPSBwbWljX2lycV91bm1hc2ssCisJLmlycV9zZXRfdHlwZQkJPSBwbWljX2lycV90eXBlLAorCS5pcnFfYnVzX2xvY2sJCT0gcG1pY19idXNfbG9jaywKKwkuaXJxX2J1c19zeW5jX3VubG9jawk9IHBtaWNfYnVzX3N5bmNfdW5sb2NrLAogfTsKIAogc3RhdGljIGlycXJldHVybl90IHBtaWNfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NhbXN1bmctbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zYW1zdW5nLWxhcHRvcC5jCmluZGV4IGRlNDM0YzYuLmQzNDcxMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NhbXN1bmctbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvc2Ftc3VuZy1sYXB0b3AuYwpAQCAtNTcxLDYgKzU3MSwxNiBAQAogCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2IsCiAJfSwKIAl7CisJCS5pZGVudCA9ICJSNDEwIFBsdXMiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwKKwkJCQkJIlNBTVNVTkcgRUxFQ1RST05JQ1MgQ08uLCBMVEQuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlI0MTBQIiksCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJSNDYwIiksCisJCX0sCisJCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYiwKKwl9LAorCXsKIAkJLmlkZW50ID0gIlI1MTgiLAogCQkubWF0Y2hlcyA9IHsKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwKQEAgLTU5MSwxMiArNjAxLDEyIEBACiAJCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYiwKIAl9LAogCXsKLQkJLmlkZW50ID0gIk4xNTAvTjIxMC9OMjIwIiwKKwkJLmlkZW50ID0gIk4xNTAvTjIxMC9OMjIwL04yMzAiLAogCQkubWF0Y2hlcyA9IHsKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwKIAkJCQkJIlNBTVNVTkcgRUxFQ1RST05JQ1MgQ08uLCBMVEQuIiksCi0JCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk4xNTAvTjIxMC9OMjIwIiksCi0JCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJOMTUwL04yMTAvTjIyMCIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJOMTUwL04yMTAvTjIyMC9OMjMwIiksCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJOMTUwL04yMTAvTjIyMC9OMjMwIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYiwKIAl9LApAQCAtNzcxLDYgKzc4MSw3IEBACiAKIAkvKiBjcmVhdGUgYSBiYWNrbGlnaHQgZGV2aWNlIHRvIHRhbGsgdG8gdGhpcyBvbmUgKi8KIAltZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzKSk7CisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9QTEFURk9STTsKIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IHNhYmlfY29uZmlnLT5tYXhfYnJpZ2h0bmVzczsKIAliYWNrbGlnaHRfZGV2aWNlID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3Rlcigic2Ftc3VuZyIsICZzZGV2LT5kZXYsCiAJCQkJCQkgICAgIE5VTEwsICZiYWNrbGlnaHRfb3BzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKaW5kZXggZTY0MmY1Zi4uNmZlOGNkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCkBAIC0xMzgsNiArMTM4LDggQEAKIAkJICIxIGZvciAzMCBzZWNvbmRzLCAyIGZvciA2MCBzZWNvbmRzIGFuZCAzIHRvIGRpc2FibGUgdGltZW91dCAiCiAJCSAiKGRlZmF1bHQ6IDApIik7CiAKK3N0YXRpYyB2b2lkIHNvbnlfbmNfa2JkX2JhY2tsaWdodF9yZXN1bWUodm9pZCk7CisKIGVudW0gc29ueV9uY19yZmtpbGwgewogCVNPTllfV0lGSSwKIAlTT05ZX0JMVUVUT09USCwKQEAgLTc3MSwxMSArNzczLDYgQEAKIAlpZiAoIWhhbmRsZXMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc3lzZnNfYXR0cl9pbml0KCZoYW5kbGVzLT5kZXZhdHRyLmF0dHIpOwotCWhhbmRsZXMtPmRldmF0dHIuYXR0ci5uYW1lID0gImhhbmRsZXMiOwotCWhhbmRsZXMtPmRldmF0dHIuYXR0ci5tb2RlID0gU19JUlVHTzsKLQloYW5kbGVzLT5kZXZhdHRyLnNob3cgPSBzb255X25jX2hhbmRsZXNfc2hvdzsKLQogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhhbmRsZXMtPmNhcCk7IGkrKykgewogCQlpZiAoIWFjcGlfY2FsbHNldGZ1bmMoc29ueV9uY19hY3BpX2hhbmRsZSwKIAkJCQkJIlNOMDAiLCBpICsgMHgyMCwgJnJlc3VsdCkpIHsKQEAgLTc4NSwxMSArNzgyLDE4IEBACiAJCX0KIAl9CiAKLQkvKiBhbGxvdyByZWFkaW5nIGNhcGFiaWxpdGllcyB2aWEgc3lzZnMgKi8KLQlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKCZwZC0+ZGV2LCAmaGFuZGxlcy0+ZGV2YXR0cikpIHsKLQkJa2ZyZWUoaGFuZGxlcyk7Ci0JCWhhbmRsZXMgPSBOVUxMOwotCQlyZXR1cm4gLTE7CisJaWYgKGRlYnVnKSB7CisJCXN5c2ZzX2F0dHJfaW5pdCgmaGFuZGxlcy0+ZGV2YXR0ci5hdHRyKTsKKwkJaGFuZGxlcy0+ZGV2YXR0ci5hdHRyLm5hbWUgPSAiaGFuZGxlcyI7CisJCWhhbmRsZXMtPmRldmF0dHIuYXR0ci5tb2RlID0gU19JUlVHTzsKKwkJaGFuZGxlcy0+ZGV2YXR0ci5zaG93ID0gc29ueV9uY19oYW5kbGVzX3Nob3c7CisKKwkJLyogYWxsb3cgcmVhZGluZyBjYXBhYmlsaXRpZXMgdmlhIHN5c2ZzICovCisJCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkLT5kZXYsICZoYW5kbGVzLT5kZXZhdHRyKSkgeworCQkJa2ZyZWUoaGFuZGxlcyk7CisJCQloYW5kbGVzID0gTlVMTDsKKwkJCXJldHVybiAtMTsKKwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtNzk4LDcgKzgwMiw4IEBACiBzdGF0aWMgaW50IHNvbnlfbmNfaGFuZGxlc19jbGVhbnVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkKQogewogCWlmIChoYW5kbGVzKSB7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmcGQtPmRldiwgJmhhbmRsZXMtPmRldmF0dHIpOworCQlpZiAoZGVidWcpCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkLT5kZXYsICZoYW5kbGVzLT5kZXZhdHRyKTsKIAkJa2ZyZWUoaGFuZGxlcyk7CiAJCWhhbmRsZXMgPSBOVUxMOwogCX0KQEAgLTgwOCw2ICs4MTMsMTEgQEAKIHN0YXRpYyBpbnQgc29ueV9maW5kX3NuY19oYW5kbGUoaW50IGhhbmRsZSkKIHsKIAlpbnQgaTsKKworCS8qIG5vdCBpbml0aWFsaXplZCB5ZXQsIHJldHVybiBlYXJseSAqLworCWlmICghaGFuZGxlcykKKwkJcmV0dXJuIC0xOworCiAJZm9yIChpID0gMDsgaSA8IDB4MTA7IGkrKykgewogCQlpZiAoaGFuZGxlcy0+Y2FwW2ldID09IGhhbmRsZSkgewogCQkJZHByaW50aygiZm91bmQgaGFuZGxlIDB4JS40eCAob2Zmc2V0OiAweCUuMngpXG4iLApAQCAtOTI0LDYgKzkzNCwxNCBAQAogLyoKICAqIEJhY2tsaWdodCBkZXZpY2UKICAqLworc3RydWN0IHNvbnlfYmFja2xpZ2h0X3Byb3BzIHsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqZGV2OworCWludAkJCWhhbmRsZTsKKwl1OAkJCW9mZnNldDsKKwl1OAkJCW1heGx2bDsKK307CitzdHJ1Y3Qgc29ueV9iYWNrbGlnaHRfcHJvcHMgc29ueV9ibF9wcm9wczsKKwogc3RhdGljIGludCBzb255X2JhY2tsaWdodF91cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKIAlyZXR1cm4gYWNwaV9jYWxsc2V0ZnVuYyhzb255X25jX2FjcGlfaGFuZGxlLCAiU0JSVCIsCkBAIC05NDQsMjEgKzk2MiwyNiBAQAogewogCWludCByZXN1bHQ7CiAJaW50ICpoYW5kbGUgPSAoaW50ICopYmxfZ2V0X2RhdGEoYmQpOworCXN0cnVjdCBzb255X2JhY2tsaWdodF9wcm9wcyAqc2RldiA9CisJCShzdHJ1Y3Qgc29ueV9iYWNrbGlnaHRfcHJvcHMgKilibF9nZXRfZGF0YShiZCk7CiAKLQlzb255X2NhbGxfc25jX2hhbmRsZSgqaGFuZGxlLCAweDAyMDAsICZyZXN1bHQpOworCXNvbnlfY2FsbF9zbmNfaGFuZGxlKHNkZXYtPmhhbmRsZSwgMHgwMjAwLCAmcmVzdWx0KTsKIAotCXJldHVybiByZXN1bHQgJiAweGZmOworCXJldHVybiAocmVzdWx0ICYgMHhmZikgLSBzZGV2LT5vZmZzZXQ7CiB9CiAKIHN0YXRpYyBpbnQgc29ueV9uY191cGRhdGVfc3RhdHVzX25nKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKIAlpbnQgdmFsdWUsIHJlc3VsdDsKIAlpbnQgKmhhbmRsZSA9IChpbnQgKilibF9nZXRfZGF0YShiZCk7CisJc3RydWN0IHNvbnlfYmFja2xpZ2h0X3Byb3BzICpzZGV2ID0KKwkJKHN0cnVjdCBzb255X2JhY2tsaWdodF9wcm9wcyAqKWJsX2dldF9kYXRhKGJkKTsKIAotCXZhbHVlID0gYmQtPnByb3BzLmJyaWdodG5lc3M7Ci0Jc29ueV9jYWxsX3NuY19oYW5kbGUoKmhhbmRsZSwgMHgwMTAwIHwgKHZhbHVlIDw8IDE2KSwgJnJlc3VsdCk7CisJdmFsdWUgPSBiZC0+cHJvcHMuYnJpZ2h0bmVzcyArIHNkZXYtPm9mZnNldDsKKwlpZiAoc29ueV9jYWxsX3NuY19oYW5kbGUoc2Rldi0+aGFuZGxlLCAweDAxMDAgfCAodmFsdWUgPDwgMTYpLCAmcmVzdWx0KSkKKwkJcmV0dXJuIC1FSU87CiAKLQlyZXR1cm4gc29ueV9uY19nZXRfYnJpZ2h0bmVzc19uZyhiZCk7CisJcmV0dXJuIHZhbHVlOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgc29ueV9iYWNrbGlnaHRfb3BzID0gewpAQCAtOTcxLDggKzk5NCw2IEBACiAJLnVwZGF0ZV9zdGF0dXMgPSBzb255X25jX3VwZGF0ZV9zdGF0dXNfbmcsCiAJLmdldF9icmlnaHRuZXNzID0gc29ueV9uY19nZXRfYnJpZ2h0bmVzc19uZywKIH07Ci1zdGF0aWMgaW50IGJhY2tsaWdodF9uZ19oYW5kbGU7Ci1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKnNvbnlfYmFja2xpZ2h0X2RldmljZTsKIAogLyoKICAqIE5ldyBTTkMtb25seSBWYWlvcyBldmVudCBtYXBwaW5nIHRvIGRyaXZlciBrbm93biBrZXlzCkBAIC0xMTY4LDYgKzExODksOSBAQAogCS8qIHJlLXJlYWQgcmZraWxsIHN0YXRlICovCiAJc29ueV9uY19yZmtpbGxfdXBkYXRlKCk7CiAKKwkvKiByZXN0b3JlIGtiZCBiYWNrbGlnaHQgc3RhdGVzICovCisJc29ueV9uY19rYmRfYmFja2xpZ2h0X3Jlc3VtZSgpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNTUsNiArMTM3OSw3IEBACiAjZGVmaW5lIEtCREJMX0hBTkRMRVIJMHgxMzcKICNkZWZpbmUgS0JEQkxfUFJFU0VOVAkweEIwMAogI2RlZmluZQlTRVRfTU9ERQkweEMwMAorI2RlZmluZSBTRVRfU1RBVEUJMHhEMDAKICNkZWZpbmUgU0VUX1RJTUVPVVQJMHhFMDAKIAogc3RydWN0IGtiZF9iYWNrbGlnaHQgewpAQCAtMTM3Nyw2ICsxNDAyLDEwIEBACiAJCQkJKHZhbHVlIDw8IDB4MTApIHwgU0VUX01PREUsICZyZXN1bHQpKQogCQlyZXR1cm4gLUVJTzsKIAorCS8qIFRyeSB0byB0dXJuIHRoZSBsaWdodCBvbi9vZmYgaW1tZWRpYXRlbHkgKi8KKwlzb255X2NhbGxfc25jX2hhbmRsZShLQkRCTF9IQU5ETEVSLCAodmFsdWUgPDwgMHgxMCkgfCBTRVRfU1RBVEUsCisJCQkmcmVzdWx0KTsKKwogCWtiZGJsX2hhbmRsZS0+bW9kZSA9IHZhbHVlOwogCiAJcmV0dXJuIDA7CkBAIC0xNDU4LDcgKzE0ODcsNyBAQAogewogCWludCByZXN1bHQ7CiAKLQlpZiAoc29ueV9jYWxsX3NuY19oYW5kbGUoMHgxMzcsIEtCREJMX1BSRVNFTlQsICZyZXN1bHQpKQorCWlmIChzb255X2NhbGxfc25jX2hhbmRsZShLQkRCTF9IQU5ETEVSLCBLQkRCTF9QUkVTRU5ULCAmcmVzdWx0KSkKIAkJcmV0dXJuIDA7CiAJaWYgKCEocmVzdWx0ICYgMHgwMikpCiAJCXJldHVybiAwOwpAQCAtMTUwMSwxMyArMTUzMCwxMDUgQEAKIHN0YXRpYyBpbnQgc29ueV9uY19rYmRfYmFja2xpZ2h0X2NsZWFudXAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQpCiB7CiAJaWYgKGtiZGJsX2hhbmRsZSkgeworCQlpbnQgcmVzdWx0OworCiAJCWRldmljZV9yZW1vdmVfZmlsZSgmcGQtPmRldiwgJmtiZGJsX2hhbmRsZS0+bW9kZV9hdHRyKTsKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZwZC0+ZGV2LCAma2JkYmxfaGFuZGxlLT50aW1lb3V0X2F0dHIpOworCisJCS8qIHJlc3RvcmUgdGhlIGRlZmF1bHQgaHcgYmVoYXZpb3VyICovCisJCXNvbnlfY2FsbF9zbmNfaGFuZGxlKEtCREJMX0hBTkRMRVIsIDB4MTAwMCB8IFNFVF9NT0RFLCAmcmVzdWx0KTsKKwkJc29ueV9jYWxsX3NuY19oYW5kbGUoS0JEQkxfSEFORExFUiwgU0VUX1RJTUVPVVQsICZyZXN1bHQpOworCiAJCWtmcmVlKGtiZGJsX2hhbmRsZSk7CiAJfQogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBzb255X25jX2tiZF9iYWNrbGlnaHRfcmVzdW1lKHZvaWQpCit7CisJaW50IGlnbm9yZSA9IDA7CisKKwlpZiAoIWtiZGJsX2hhbmRsZSkKKwkJcmV0dXJuOworCisJaWYgKGtiZGJsX2hhbmRsZS0+bW9kZSA9PSAwKQorCQlzb255X2NhbGxfc25jX2hhbmRsZShLQkRCTF9IQU5ETEVSLCBTRVRfTU9ERSwgJmlnbm9yZSk7CisKKwlpZiAoa2JkYmxfaGFuZGxlLT50aW1lb3V0ICE9IDApCisJCXNvbnlfY2FsbF9zbmNfaGFuZGxlKEtCREJMX0hBTkRMRVIsCisJCQkJKGtiZGJsX2hhbmRsZS0+dGltZW91dCA8PCAweDEwKSB8IFNFVF9USU1FT1VULAorCQkJCSZpZ25vcmUpOworfQorCitzdGF0aWMgdm9pZCBzb255X25jX2JhY2tsaWdodF9uZ19yZWFkX2xpbWl0cyhpbnQgaGFuZGxlLAorCQlzdHJ1Y3Qgc29ueV9iYWNrbGlnaHRfcHJvcHMgKnByb3BzKQoreworCWludCBvZmZzZXQ7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXU4IGJybHZsLCBpOworCXU4IG1pbiA9IDB4ZmYsIG1heCA9IDB4MDA7CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgcGFyYW1zOworCXVuaW9uIGFjcGlfb2JqZWN0IGluX29iajsKKwl1bmlvbiBhY3BpX29iamVjdCAqbHZsX2VudW07CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKKworCXByb3BzLT5oYW5kbGUgPSBoYW5kbGU7CisJcHJvcHMtPm9mZnNldCA9IDA7CisJcHJvcHMtPm1heGx2bCA9IDB4ZmY7CisKKwlvZmZzZXQgPSBzb255X2ZpbmRfc25jX2hhbmRsZShoYW5kbGUpOworCWlmIChvZmZzZXQgPCAwKQorCQlyZXR1cm47CisKKwkvKiB0cnkgdG8gcmVhZCB0aGUgYm91bmRhcmllcyBmcm9tIEFDUEkgdGFibGVzLCBpZiB3ZSBmYWlsIHRoZSBhYm92ZQorCSAqIGRlZmF1bHRzIHNob3VsZCBiZSByZWFzb25hYmxlCisJICovCisJcGFyYW1zLmNvdW50ID0gMTsKKwlwYXJhbXMucG9pbnRlciA9ICZpbl9vYmo7CisJaW5fb2JqLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlpbl9vYmouaW50ZWdlci52YWx1ZSA9IG9mZnNldDsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChzb255X25jX2FjcGlfaGFuZGxlLCAiU04wNiIsICZwYXJhbXMsCisJCQkmYnVmZmVyKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybjsKKworCWx2bF9lbnVtID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopIGJ1ZmZlci5wb2ludGVyOworCWlmICghbHZsX2VudW0pIHsKKwkJcHJfZXJyKCJObyBTTjA2IHJldHVybiBvYmplY3QuIik7CisJCXJldHVybjsKKwl9CisJaWYgKGx2bF9lbnVtLT50eXBlICE9IEFDUElfVFlQRV9CVUZGRVIpIHsKKwkJcHJfZXJyKCJJbnZhbGlkIFNOMDYgcmV0dXJuIG9iamVjdCAweCUuMnhcbiIsCisJCSAgICAgICBsdmxfZW51bS0+dHlwZSk7CisJCWdvdG8gb3V0X2ludmFsaWQ7CisJfQorCisJLyogdGhlIGJ1ZmZlciBsaXN0cyBicmlnaHRuZXNzIGxldmVscyBhdmFpbGFibGUsIGJyaWdodG5lc3MgbGV2ZWxzIGFyZQorCSAqIGZyb20gMCB0byA4IGluIHRoZSBhcnJheSwgb3RoZXIgdmFsdWVzIGFyZSB1c2VkIGJ5IEFMUyBjb250cm9sLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCA5ICYmIGkgPCBsdmxfZW51bS0+YnVmZmVyLmxlbmd0aDsgaSsrKSB7CisKKwkJYnJsdmwgPSAqKGx2bF9lbnVtLT5idWZmZXIucG9pbnRlciArIGkpOworCQlkcHJpbnRrKCJCcmlnaHRuZXNzIGxldmVsOiAlZFxuIiwgYnJsdmwpOworCisJCWlmICghYnJsdmwpCisJCQlicmVhazsKKworCQlpZiAoYnJsdmwgPiBtYXgpCisJCQltYXggPSBicmx2bDsKKwkJaWYgKGJybHZsIDwgbWluKQorCQkJbWluID0gYnJsdmw7CisJfQorCXByb3BzLT5vZmZzZXQgPSBtaW47CisJcHJvcHMtPm1heGx2bCA9IG1heDsKKwlkcHJpbnRrKCJCcmlnaHRuZXNzIGxldmVsczogbWluPSVkIG1heD0lZFxuIiwgcHJvcHMtPm9mZnNldCwKKwkJCXByb3BzLT5tYXhsdmwpOworCitvdXRfaW52YWxpZDoKKwlrZnJlZShidWZmZXIucG9pbnRlcik7CisJcmV0dXJuOworfQorCiBzdGF0aWMgdm9pZCBzb255X25jX2JhY2tsaWdodF9zZXR1cCh2b2lkKQogewogCWFjcGlfaGFuZGxlIHVudXNlZDsKQEAgLTE1MTYsMTQgKzE2MzcsMTQgQEAKIAlzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgcHJvcHM7CiAKIAlpZiAoc29ueV9maW5kX3NuY19oYW5kbGUoMHgxMmYpICE9IC0xKSB7Ci0JCWJhY2tsaWdodF9uZ19oYW5kbGUgPSAweDEyZjsKIAkJb3BzID0gJnNvbnlfYmFja2xpZ2h0X25nX29wczsKLQkJbWF4X2JyaWdodG5lc3MgPSAweGZmOworCQlzb255X25jX2JhY2tsaWdodF9uZ19yZWFkX2xpbWl0cygweDEyZiwgJnNvbnlfYmxfcHJvcHMpOworCQltYXhfYnJpZ2h0bmVzcyA9IHNvbnlfYmxfcHJvcHMubWF4bHZsIC0gc29ueV9ibF9wcm9wcy5vZmZzZXQ7CiAKIAl9IGVsc2UgaWYgKHNvbnlfZmluZF9zbmNfaGFuZGxlKDB4MTM3KSAhPSAtMSkgewotCQliYWNrbGlnaHRfbmdfaGFuZGxlID0gMHgxMzc7CiAJCW9wcyA9ICZzb255X2JhY2tsaWdodF9uZ19vcHM7Ci0JCW1heF9icmlnaHRuZXNzID0gMHhmZjsKKwkJc29ueV9uY19iYWNrbGlnaHRfbmdfcmVhZF9saW1pdHMoMHgxMzcsICZzb255X2JsX3Byb3BzKTsKKwkJbWF4X2JyaWdodG5lc3MgPSBzb255X2JsX3Byb3BzLm1heGx2bCAtIHNvbnlfYmxfcHJvcHMub2Zmc2V0OwogCiAJfSBlbHNlIGlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKHNvbnlfbmNfYWNwaV9oYW5kbGUsICJHQlJUIiwKIAkJCQkJCSZ1bnVzZWQpKSkgewpAQCAtMTUzNiwyMiArMTY1NywyMiBAQAogCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMpKTsKIAlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1BMQVRGT1JNOwogCXByb3BzLm1heF9icmlnaHRuZXNzID0gbWF4X2JyaWdodG5lc3M7Ci0Jc29ueV9iYWNrbGlnaHRfZGV2aWNlID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3Rlcigic29ueSIsIE5VTEwsCi0JCQkJCQkJICAmYmFja2xpZ2h0X25nX2hhbmRsZSwKLQkJCQkJCQkgIG9wcywgJnByb3BzKTsKKwlzb255X2JsX3Byb3BzLmRldiA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoInNvbnkiLCBOVUxMLAorCQkJCQkJICAgICAgJnNvbnlfYmxfcHJvcHMsCisJCQkJCQkgICAgICBvcHMsICZwcm9wcyk7CiAKLQlpZiAoSVNfRVJSKHNvbnlfYmFja2xpZ2h0X2RldmljZSkpIHsKLQkJcHJfd2FybmluZyhEUlZfUEZYICJ1bmFibGUgdG8gcmVnaXN0ZXIgYmFja2xpZ2h0IGRldmljZVxuIik7Ci0JCXNvbnlfYmFja2xpZ2h0X2RldmljZSA9IE5VTEw7CisJaWYgKElTX0VSUihzb255X2JsX3Byb3BzLmRldikpIHsKKwkJcHJfd2FybihEUlZfUEZYICJ1bmFibGUgdG8gcmVnaXN0ZXIgYmFja2xpZ2h0IGRldmljZVxuIik7CisJCXNvbnlfYmxfcHJvcHMuZGV2ID0gTlVMTDsKIAl9IGVsc2UKLQkJc29ueV9iYWNrbGlnaHRfZGV2aWNlLT5wcm9wcy5icmlnaHRuZXNzID0KLQkJICAgIG9wcy0+Z2V0X2JyaWdodG5lc3Moc29ueV9iYWNrbGlnaHRfZGV2aWNlKTsKKwkJc29ueV9ibF9wcm9wcy5kZXYtPnByb3BzLmJyaWdodG5lc3MgPQorCQkJb3BzLT5nZXRfYnJpZ2h0bmVzcyhzb255X2JsX3Byb3BzLmRldik7CiB9CiAKIHN0YXRpYyB2b2lkIHNvbnlfbmNfYmFja2xpZ2h0X2NsZWFudXAodm9pZCkKIHsKLQlpZiAoc29ueV9iYWNrbGlnaHRfZGV2aWNlKQotCQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoc29ueV9iYWNrbGlnaHRfZGV2aWNlKTsKKwlpZiAoc29ueV9ibF9wcm9wcy5kZXYpCisJCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3Rlcihzb255X2JsX3Byb3BzLmRldik7CiB9CiAKIHN0YXRpYyBpbnQgc29ueV9uY19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCkBAIC0yNTQ5LDcgKzI2NzAsNyBAQAogCW11dGV4X2xvY2soJnNwaWNfZGV2LmxvY2spOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTT05ZUElfSU9DR0JSVDoKLQkJaWYgKHNvbnlfYmFja2xpZ2h0X2RldmljZSA9PSBOVUxMKSB7CisJCWlmIChzb255X2JsX3Byb3BzLmRldiA9PSBOVUxMKSB7CiAJCQlyZXQgPSAtRUlPOwogCQkJYnJlYWs7CiAJCX0KQEAgLTI1NjIsNyArMjY4Myw3IEBACiAJCQkJcmV0ID0gLUVGQVVMVDsKIAkJYnJlYWs7CiAJY2FzZSBTT05ZUElfSU9DU0JSVDoKLQkJaWYgKHNvbnlfYmFja2xpZ2h0X2RldmljZSA9PSBOVUxMKSB7CisJCWlmIChzb255X2JsX3Byb3BzLmRldiA9PSBOVUxMKSB7CiAJCQlyZXQgPSAtRUlPOwogCQkJYnJlYWs7CiAJCX0KQEAgLTI1NzYsOCArMjY5Nyw4IEBACiAJCQlicmVhazsKIAkJfQogCQkvKiBzeW5jIHRoZSBiYWNrbGlnaHQgZGV2aWNlIHN0YXR1cyAqLwotCQlzb255X2JhY2tsaWdodF9kZXZpY2UtPnByb3BzLmJyaWdodG5lc3MgPQotCQkgICAgc29ueV9iYWNrbGlnaHRfZ2V0X2JyaWdodG5lc3Moc29ueV9iYWNrbGlnaHRfZGV2aWNlKTsKKwkJc29ueV9ibF9wcm9wcy5kZXYtPnByb3BzLmJyaWdodG5lc3MgPQorCQkgICAgc29ueV9iYWNrbGlnaHRfZ2V0X2JyaWdodG5lc3Moc29ueV9ibF9wcm9wcy5kZXYpOwogCQlicmVhazsKIAljYXNlIFNPTllQSV9JT0NHQkFUMUNBUDoKIAkJaWYgKGVjX3JlYWQxNihTT05ZUElfQkFUMV9GVUxMLCAmdmFsMTYpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKaW5kZXggYTA4NTYxZi4uNTYyZmNmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwpAQCAtMTI4LDcgKzEyOCw4IEBACiB9OwogCiAvKiBBQ1BJIEhJRHMgKi8KLSNkZWZpbmUgVFBBQ1BJX0FDUElfSEtFWV9ISUQJCSJJQk0wMDY4IgorI2RlZmluZSBUUEFDUElfQUNQSV9JQk1fSEtFWV9ISUQJIklCTTAwNjgiCisjZGVmaW5lIFRQQUNQSV9BQ1BJX0xFTk9WT19IS0VZX0hJRAkiTEVOMDA2OCIKICNkZWZpbmUgVFBBQ1BJX0FDUElfRUNfSElECQkiUE5QMEMwOSIKIAogLyogSW5wdXQgSURzICovCkBAIC0zODc5LDcgKzM4ODAsOCBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGlibV9odGtfZGV2aWNlX2lkc1tdID0gewotCXtUUEFDUElfQUNQSV9IS0VZX0hJRCwgMH0sCisJe1RQQUNQSV9BQ1BJX0lCTV9IS0VZX0hJRCwgMH0sCisJe1RQQUNQSV9BQ1BJX0xFTk9WT19IS0VZX0hJRCwgMH0sCiAJeyIiLCAwfSwKIH07CiAKQEAgLTg2MTgsOCArODYyMCw3IEBACiAJCXRwYWNwaV9pc19md19kaWdpdChzWzFdKSAmJgogCQlzWzJdID09IHQgJiYgc1szXSA9PSAnVCcgJiYKIAkJdHBhY3BpX2lzX2Z3X2RpZ2l0KHNbNF0pICYmCi0JCXRwYWNwaV9pc19md19kaWdpdChzWzVdKSAmJgotCQlzWzZdID09ICdXJyAmJiBzWzddID09ICdXJzsKKwkJdHBhY3BpX2lzX2Z3X2RpZ2l0KHNbNV0pOwogfQogCiAvKiByZXR1cm5zIDAgLSBwcm9iZSBvaywgb3IgPCAwIC0gcHJvYmUgZXJyb3IuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9jYXJkLmMgYi9kcml2ZXJzL3BucC9jYXJkLmMKaW5kZXggNGE2NTFmNi4uYmMwMDY5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvY2FyZC5jCisrKyBiL2RyaXZlcnMvcG5wL2NhcmQuYwpAQCAtMzIwLDcgKzMyMCw3IEBACiAgKiBwbnBfcmVxdWVzdF9jYXJkX2RldmljZSAtIFNlYXJjaGVzIGZvciBhIFBuUCBkZXZpY2UgdW5kZXIgdGhlIHNwZWNpZmllZCBjYXJkCiAgKiBAY2xpbms6IHBvaW50ZXIgdG8gdGhlIGNhcmQgbGluaywgY2Fubm90IGJlIE5VTEwKICAqIEBpZDogcG9pbnRlciB0byBhIFBuUCBJRCBzdHJ1Y3R1cmUgdGhhdCBleHBsYWlucyB0aGUgcnVsZXMgZm9yIGZpbmRpbmcgdGhlIGRldmljZQotICogQGZyb206IFN0YXJ0aW5nIHBsYWNlIHRvIHNlYXJjaCBmcm9tLiBJZiBOVUxMIGl0IHdpbGwgc3RhcnQgZnJvbSB0aGUgYmVnaW5pbmcuCisgKiBAZnJvbTogU3RhcnRpbmcgcGxhY2UgdG8gc2VhcmNoIGZyb20uIElmIE5VTEwgaXQgd2lsbCBzdGFydCBmcm9tIHRoZSBiZWdpbm5pbmcuCiAgKi8KIHN0cnVjdCBwbnBfZGV2ICpwbnBfcmVxdWVzdF9jYXJkX2RldmljZShzdHJ1Y3QgcG5wX2NhcmRfbGluayAqY2xpbmssCiAJCQkJCWNvbnN0IGNoYXIgKmlkLCBzdHJ1Y3QgcG5wX2RldiAqZnJvbSkKQEAgLTM2OSw3ICszNjksNyBAQAogCiAvKioKICAqIHBucF9yZWxlYXNlX2NhcmRfZGV2aWNlIC0gY2FsbCB0aGlzIHdoZW4gdGhlIGRyaXZlciBubyBsb25nZXIgbmVlZHMgdGhlIGRldmljZQotICogQGRldjogcG9pbnRlciB0byB0aGUgUG5QIGRldmljZSBzdHVjdHVyZQorICogQGRldjogcG9pbnRlciB0byB0aGUgUG5QIGRldmljZSBzdHJ1Y3R1cmUKICAqLwogdm9pZCBwbnBfcmVsZWFzZV9jYXJkX2RldmljZShzdHJ1Y3QgcG5wX2RldiAqZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvcG5wYmlvcy9iaW9zY2FsbHMuYyBiL2RyaXZlcnMvcG5wL3BucGJpb3MvYmlvc2NhbGxzLmMKaW5kZXggODU5MWY2YS4uYjg1OWQxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvcG5wYmlvcy9iaW9zY2FsbHMuYworKysgYi9kcml2ZXJzL3BucC9wbnBiaW9zL2Jpb3NjYWxscy5jCkBAIC0yMTksNyArMjE5LDcgQEAKIAkJICAgICAgIG1vZHVsZSk7CiAJCWJyZWFrOwogCWNhc2UgUE5QX0hBUkRXQVJFX0VSUk9SOgotCQlwcmludGsoS0VSTl9FUlIgIlBuUEJJT1M6ICVzOiBhIGhhcmR3YXJlIGZhaWx1cmUgaGFzIG9jY3VyZWRcbiIsCisJCXByaW50ayhLRVJOX0VSUiAiUG5QQklPUzogJXM6IGEgaGFyZHdhcmUgZmFpbHVyZSBoYXMgb2NjdXJyZWRcbiIsCiAJCSAgICAgICBtb2R1bGUpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wcHMvS2NvbmZpZyBiL2RyaXZlcnMvcHBzL0tjb25maWcKaW5kZXggZjBkMzM3Ni4uMjU4Y2E1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wcHMvS2NvbmZpZworKysgYi9kcml2ZXJzL3Bwcy9LY29uZmlnCkBAIC0zNSw3ICszNSw3IEBACiAJZGVwZW5kcyBvbiBQUFMgJiYgIU5PX0haCiAJaGVscAogCSAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBkaXJlY3QgaW4ta2VybmVsIHRpbWUKLQkgIHN5bmNyb25pemF0aW9uIHVzaW5nIGFuIGV4dGVybmFsIFBQUyBzaWduYWwuCisJICBzeW5jaHJvbml6YXRpb24gdXNpbmcgYW4gZXh0ZXJuYWwgUFBTIHNpZ25hbC4KIAogCSAgSXQgZG9lc24ndCB3b3JrIG9uIHRpY2tsZXNzIHN5c3RlbXMgYXQgdGhlIG1vbWVudC4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wczMvcHMzLWxwbS5jIGIvZHJpdmVycy9wczMvcHMzLWxwbS5jCmluZGV4IDgwMDA5ODUuLjY0MzY5N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHMzL3BzMy1scG0uYworKysgYi9kcml2ZXJzL3BzMy9wczMtbHBtLmMKQEAgLTkxOSw3ICs5MTksNyBAQAogICogQG9mZnNldDogT2Zmc2V0IGluIGJ5dGVzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSB0cmFjZSBidWZmZXIuCiAgKiBAYnVmOiBDb3B5IGRlc3RpbmF0aW9uLgogICogQGNvdW50OiBNYXhpbXVtIGNvdW50IG9mIGJ5dGVzIHRvIGNvcHkuCi0gKiBAYnl0ZXNfY29waWVkOiBQb2ludGVyIHRvIGEgdmFyaWFibGUgdGhhdCB3aWxsIHJlY2lldmUgdGhlIG51bWJlciBvZgorICogQGJ5dGVzX2NvcGllZDogUG9pbnRlciB0byBhIHZhcmlhYmxlIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBudW1iZXIgb2YKICAqICBieXRlcyBjb3BpZWQgdG8gQGJ1Zi4KICAqCiAgKiBPbiBlcnJvciBAYnVmIHdpbGwgY29udGFpbiBhbnkgc3VjY2Vzc2Z1bGx5IGNvcGllZCB0cmFjZSBidWZmZXIgZGF0YQpAQCAtOTc0LDcgKzk3NCw3IEBACiAgKiBAb2Zmc2V0OiBPZmZzZXQgaW4gYnl0ZXMgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHRyYWNlIGJ1ZmZlci4KICAqIEBidWY6IEEgX191c2VyIGNvcHkgZGVzdGluYXRpb24uCiAgKiBAY291bnQ6IE1heGltdW0gY291bnQgb2YgYnl0ZXMgdG8gY29weS4KLSAqIEBieXRlc19jb3BpZWQ6IFBvaW50ZXIgdG8gYSB2YXJpYWJsZSB0aGF0IHdpbGwgcmVjaWV2ZSB0aGUgbnVtYmVyIG9mCisgKiBAYnl0ZXNfY29waWVkOiBQb2ludGVyIHRvIGEgdmFyaWFibGUgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIG51bWJlciBvZgogICogIGJ5dGVzIGNvcGllZCB0byBAYnVmLgogICoKICAqIE9uIGVycm9yIEBidWYgd2lsbCBjb250YWluIGFueSBzdWNjZXNzZnVsbHkgY29waWVkIHRyYWNlIGJ1ZmZlciBkYXRhCkBAIC0xMDc0LDcgKzEwNzQsNyBAQAogCiAvKioKICAqIHBzM19scG1fb3BlbiAtIE9wZW4gdGhlIGxvZ2ljYWwgcGVyZm9ybWFuY2UgbW9uaXRvciBkZXZpY2UuCi0gKiBAdGJfdHlwZTogU3BlY2lmaWVzIHRoZSB0eXBlIG9mIHRyYWNlIGJ1ZmZlciBsdjEgc291bGQgdXNlIGZvciB0aGlzIGxwbQorICogQHRiX3R5cGU6IFNwZWNpZmllcyB0aGUgdHlwZSBvZiB0cmFjZSBidWZmZXIgbHYxIHNob3VsZCB1c2UgZm9yIHRoaXMgbHBtCiAgKiAgaW5zdGFuY2UsIHNwZWNpZmllZCBieSBvbmUgb2YgZW51bSBwczNfbHBtX3RiX3R5cGUuCiAgKiBAdGJfY2FjaGU6IE9wdGlvbmFsIHVzZXIgc3VwcGxpZWQgYnVmZmVyIHRvIHVzZSBhcyB0aGUgdHJhY2UgYnVmZmVyIGNhY2hlLgogICogIElmIE5VTEwsIHRoZSBkcml2ZXIgd2lsbCBhbGxvY2F0ZSBhbmQgbWFuYWdlIGFuIGludGVybmFsIGJ1ZmZlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHMzL3BzMy1zeXMtbWFuYWdlci5jIGIvZHJpdmVycy9wczMvcHMzLXN5cy1tYW5hZ2VyLmMKaW5kZXggZDM3YzQ0NS4uMWI5ODM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wczMvcHMzLXN5cy1tYW5hZ2VyLmMKKysrIGIvZHJpdmVycy9wczMvcHMzLXN5cy1tYW5hZ2VyLmMKQEAgLTgwLDcgKzgwLDcgQEAKICAqCiAgKiBDdXJyZW50bHkgYWxsIG1lc3NhZ2VzIHJlY2VpdmVkIGZyb20gdGhlIHN5c3RlbSBtYW5hZ2VyIGFyZSBlaXRoZXIKICAqICgxNiBieXRlcyBoZWFkZXIgKyA4IGJ5dGVzIHBheWxvYWQgPSAyNCBieXRlcykgb3IgKDE2IGJ5dGVzIGhlYWRlcgotICogKyAxNiBieXRlcyBwYXlsb2FkID0gMzIgYnl0ZXMpLiAgVGhpcyBrbm93bGVnZSBpcyB1c2VkIHRvIHNpbXBsaWZ5CisgKiArIDE2IGJ5dGVzIHBheWxvYWQgPSAzMiBieXRlcykuICBUaGlzIGtub3dsZWRnZSBpcyB1c2VkIHRvIHNpbXBsaWZ5CiAgKiB0aGUgbG9naWMuCiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXBpZGlvL3Jpby1zY2FuLmMgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLXNjYW4uYwppbmRleCAzYTU5ZDVmLi5lZTg5MzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JhcGlkaW8vcmlvLXNjYW4uYworKysgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLXNjYW4uYwpAQCAtMjk1LDcgKzI5NSw3IEBACiB9CiAKIC8qKgotICogcmlvX2VuYWJsZV9yeF90eF9wb3J0IC0gZW5hYmxlIGlucHV0IHJlY2lldmVyIGFuZCBvdXRwdXQgdHJhbnNtaXR0ZXIgb2YKKyAqIHJpb19lbmFibGVfcnhfdHhfcG9ydCAtIGVuYWJsZSBpbnB1dCByZWNlaXZlciBhbmQgb3V0cHV0IHRyYW5zbWl0dGVyIG9mCiAgKiBnaXZlbiBwb3J0CiAgKiBAcG9ydDogTWFzdGVyIHBvcnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBSSU8gbmV0d29yawogICogQGxvY2FsOiBsb2NhbD0xIHNlbGVjdCBsb2NhbCBwb3J0IG90aGVyd2lzZSBhIGZhciBkZXZpY2UgaXMgcmVhY2hlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXBpZGlvL3Jpby5jIGIvZHJpdmVycy9yYXBpZGlvL3Jpby5jCmluZGV4IGMyOTcxOWMuLjg2YzlhMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFwaWRpby9yaW8uYworKysgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLmMKQEAgLTExNzEsMTYgKzExNzEsMTcgQEAKIAogX19zZXR1cCgicmlvaGRpZD0iLCByaW9faGRpZF9zZXR1cCk7CiAKLXZvaWQgcmlvX3JlZ2lzdGVyX21wb3J0KHN0cnVjdCByaW9fbXBvcnQgKnBvcnQpCitpbnQgcmlvX3JlZ2lzdGVyX21wb3J0KHN0cnVjdCByaW9fbXBvcnQgKnBvcnQpCiB7CiAJaWYgKG5leHRfcG9ydGlkID49IFJJT19NQVhfTVBPUlRTKSB7CiAJCXByX2VycigiUklPOiByZWFjaGVkIHNwZWNpZmllZCBtYXggbnVtYmVyIG9mIG1wb3J0c1xuIik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAJfQogCiAJcG9ydC0+aWQgPSBuZXh0X3BvcnRpZCsrOwogCXBvcnQtPmhvc3RfZGV2aWNlaWQgPSByaW9fZ2V0X2hkaWQocG9ydC0+aWQpOwogCWxpc3RfYWRkX3RhaWwoJnBvcnQtPm5vZGUsICZyaW9fbXBvcnRzKTsKKwlyZXR1cm4gMDsKIH0KIAogRVhQT1JUX1NZTUJPTF9HUEwocmlvX2xvY2FsX2dldF9kZXZpY2VfaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXBpZGlvL3N3aXRjaGVzL2lkdF9nZW4yLmMgYi9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvaWR0X2dlbjIuYwppbmRleCAwOTUwMTZhLi4wNDNlZTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvaWR0X2dlbjIuYworKysgYi9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvaWR0X2dlbjIuYwpAQCAtOTUsNiArOTUsOSBAQAogCWVsc2UKIAkJdGFibGUrKzsKIAorCWlmIChyb3V0ZV9wb3J0ID09IFJJT19JTlZBTElEX1JPVVRFKQorCQlyb3V0ZV9wb3J0ID0gSURUX0RFRkFVTFRfUk9VVEU7CisKIAlyaW9fbXBvcnRfd3JpdGVfY29uZmlnXzMyKG1wb3J0LCBkZXN0aWQsIGhvcGNvdW50LAogCQkJCSAgTE9DQUxfUlRFX0NPTkZfREVTVElEX1NFTCwgdGFibGUpOwogCkBAIC00MTEsNiArNDE0LDEyIEBACiAJcmRldi0+cnN3aXRjaC0+ZW1faGFuZGxlID0gaWR0ZzJfZW1faGFuZGxlcjsKIAlyZGV2LT5yc3dpdGNoLT5zd19zeXNmcyA9IGlkdGcyX3N5c2ZzOwogCisJaWYgKGRvX2VudW0pIHsKKwkJLyogRW5zdXJlIHRoYXQgZGVmYXVsdCByb3V0aW5nIGlzIGRpc2FibGVkIG9uIHN0YXJ0dXAgKi8KKwkJcmlvX3dyaXRlX2NvbmZpZ18zMihyZGV2LAorCQkJCSAgICBSSU9fU1REX1JURV9ERUZBVUxUX1BPUlQsIElEVF9OT19ST1VURSk7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQxOCwzICs0MjcsNCBAQAogREVDTEFSRV9SSU9fU1dJVENIX0lOSVQoUklPX1ZJRF9JRFQsIFJJT19ESURfSURUQ1BTMTYxNiwgaWR0ZzJfc3dpdGNoX2luaXQpOwogREVDTEFSRV9SSU9fU1dJVENIX0lOSVQoUklPX1ZJRF9JRFQsIFJJT19ESURfSURUVlBTMTYxNiwgaWR0ZzJfc3dpdGNoX2luaXQpOwogREVDTEFSRV9SSU9fU1dJVENIX0lOSVQoUklPX1ZJRF9JRFQsIFJJT19ESURfSURUU1BTMTYxNiwgaWR0ZzJfc3dpdGNoX2luaXQpOworREVDTEFSRV9SSU9fU1dJVENIX0lOSVQoUklPX1ZJRF9JRFQsIFJJT19ESURfSURUQ1BTMTQzMiwgaWR0ZzJfc3dpdGNoX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXBpZGlvL3N3aXRjaGVzL2lkdGNwcy5jIGIvZHJpdmVycy9yYXBpZGlvL3N3aXRjaGVzL2lkdGNwcy5jCmluZGV4IDNhOTcxMDcuLmQwNmVlMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy9pZHRjcHMuYworKysgYi9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvaWR0Y3BzLmMKQEAgLTI2LDYgKzI2LDkgQEAKIHsKIAl1MzIgcmVzdWx0OwogCisJaWYgKHJvdXRlX3BvcnQgPT0gUklPX0lOVkFMSURfUk9VVEUpCisJCXJvdXRlX3BvcnQgPSBDUFNfREVGQVVMVF9ST1VURTsKKwogCWlmICh0YWJsZSA9PSBSSU9fR0xPQkFMX1RBQkxFKSB7CiAJCXJpb19tcG9ydF93cml0ZV9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCiAJCQkJUklPX1NURF9SVEVfQ09ORl9ERVNUSURfU0VMX0NTUiwgcm91dGVfZGVzdGlkKTsKQEAgLTEzMCw2ICsxMzMsOSBAQAogCQkvKiBzZXQgVFZBTCA9IH41MHVzICovCiAJCXJpb193cml0ZV9jb25maWdfMzIocmRldiwKIAkJCXJkZXYtPnBoeXNfZWZwdHIgKyBSSU9fUE9SVF9MSU5LVE9fQ1RMX0NTUiwgMHg4ZSA8PCA4KTsKKwkJLyogRW5zdXJlIHRoYXQgZGVmYXVsdCByb3V0aW5nIGlzIGRpc2FibGVkIG9uIHN0YXJ0dXAgKi8KKwkJcmlvX3dyaXRlX2NvbmZpZ18zMihyZGV2LAorCQkJCSAgICBSSU9fU1REX1JURV9ERUZBVUxUX1BPUlQsIENQU19OT19ST1VURSk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvdHNpNTd4LmMgYi9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvdHNpNTd4LmMKaW5kZXggMWE2MjkzNC4uZGI4YjgwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXBpZGlvL3N3aXRjaGVzL3RzaTU3eC5jCisrKyBiL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy90c2k1N3guYwpAQCAtMzAzLDYgKzMwMywxMiBAQAogCXJkZXYtPnJzd2l0Y2gtPmVtX2luaXQgPSB0c2k1N3hfZW1faW5pdDsKIAlyZGV2LT5yc3dpdGNoLT5lbV9oYW5kbGUgPSB0c2k1N3hfZW1faGFuZGxlcjsKIAorCWlmIChkb19lbnVtKSB7CisJCS8qIEVuc3VyZSB0aGF0IGRlZmF1bHQgcm91dGluZyBpcyBkaXNhYmxlZCBvbiBzdGFydHVwICovCisJCXJpb193cml0ZV9jb25maWdfMzIocmRldiwgUklPX1NURF9SVEVfREVGQVVMVF9QT1JULAorCQkJCSAgICBSSU9fSU5WQUxJRF9ST1VURSk7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYwppbmRleCAzZmZjNjk3Li4wZmFlNTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCkBAIC0xMzEzLDcgKzEzMTMsNyBAQAogCQkJCXJldHVybiAtRUlOVkFMOwogCiAJCQkvKiBRdWVyeSBiZWZvcmUgZW5hYmxpbmcgaW4gY2FzZSBjb25maWd1cmF0aW9uCi0JCQkgKiBkZXBlbmRhbnQuICAqLworCQkJICogZGVwZW5kZW50LiAgKi8KIAkJCXJldCA9IF9yZWd1bGF0b3JfZ2V0X2VuYWJsZV90aW1lKHJkZXYpOwogCQkJaWYgKHJldCA+PSAwKSB7CiAJCQkJZGVsYXkgPSByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTUyLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4OTUyLmMKaW5kZXggYThmNGVjZi4uZGFmZjdmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODk1Mi5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg5NTIuYwpAQCAtMjYyLDcgKzI2Miw3IEBACiAKIAlpZiAoZXJyKSB7CiAJCWRldl93YXJuKG1heDg5NTItPmRldiwgIlZJRDAvMSBncGlvIGludmFsaWQ6ICIKLQkJCQkiRFZTIG5vdCBhdmlsYWJsZS5cbiIpOworCQkJCSJEVlMgbm90IGF2YWlsYWJsZS5cbiIpOwogCQltYXg4OTUyLT52aWQwID0gMDsKIAkJbWF4ODk1Mi0+dmlkMSA9IDA7CiAJCS8qIE1hcmsgaW52YWxpZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvY2xhc3MuYyBiL2RyaXZlcnMvcnRjL2NsYXNzLmMKaW5kZXggMDliNDQzNy4uMzkwMTM4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvY2xhc3MuYworKysgYi9kcml2ZXJzL3J0Yy9jbGFzcy5jCkBAIC0xNzEsNyArMTcxLDcgQEAKIAllcnIgPSBfX3J0Y19yZWFkX2FsYXJtKHJ0YywgJmFscm0pOwogCiAJaWYgKCFlcnIgJiYgIXJ0Y192YWxpZF90bSgmYWxybS50aW1lKSkKLQkJcnRjX3NldF9hbGFybShydGMsICZhbHJtKTsKKwkJcnRjX2luaXRpYWxpemVfYWxhcm0ocnRjLCAmYWxybSk7CiAKIAlzdHJsY3B5KHJ0Yy0+bmFtZSwgbmFtZSwgUlRDX0RFVklDRV9OQU1FX1NJWkUpOwogCWRldl9zZXRfbmFtZSgmcnRjLT5kZXYsICJydGMlZCIsIGlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jIGIvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMKaW5kZXggOGVjNmIwNi4uZWY2MzE2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMKKysrIGIvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMKQEAgLTM3NSw2ICszNzUsMzIgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0Y19zZXRfYWxhcm0pOwogCisvKiBDYWxsZWQgb25jZSBwZXIgZGV2aWNlIGZyb20gcnRjX2RldmljZV9yZWdpc3RlciAqLworaW50IHJ0Y19pbml0aWFsaXplX2FsYXJtKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gcnRjX3ZhbGlkX3RtKCZhbGFybS0+dGltZSk7CisJaWYgKGVyciAhPSAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZydGMtPm9wc19sb2NrKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcnRjLT5haWVfdGltZXIubm9kZS5leHBpcmVzID0gcnRjX3RtX3RvX2t0aW1lKGFsYXJtLT50aW1lKTsKKwlydGMtPmFpZV90aW1lci5wZXJpb2QgPSBrdGltZV9zZXQoMCwgMCk7CisJaWYgKGFsYXJtLT5lbmFibGVkKSB7CisJCXJ0Yy0+YWllX3RpbWVyLmVuYWJsZWQgPSAxOworCQl0aW1lcnF1ZXVlX2FkZCgmcnRjLT50aW1lcnF1ZXVlLCAmcnRjLT5haWVfdGltZXIubm9kZSk7CisJfQorCW11dGV4X3VubG9jaygmcnRjLT5vcHNfbG9jayk7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0Y19pbml0aWFsaXplX2FsYXJtKTsKKworCisKIGludCBydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKIHsKIAlpbnQgZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZydGMtPm9wc19sb2NrKTsKQEAgLTQ1NCw3ICs0ODAsNyBAQAogICogQHJ0YzogcG9pbnRlciB0byB0aGUgcnRjIGRldmljZQogICoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gQUlFLCBVSUUgb3IgUElFIG1vZGUgaW50ZXJydXB0Ci0gKiBoYXMgb2NjdXJlZCAob3IgYmVlbiBlbXVsYXRlZCkuCisgKiBoYXMgb2NjdXJyZWQgKG9yIGJlZW4gZW11bGF0ZWQpLgogICoKICAqIFRyaWdnZXJzIHRoZSByZWdpc3RlcmVkIGlycV90YXNrIGZ1bmN0aW9uIGNhbGxiYWNrLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFybTkyMDAuYwppbmRleCA1MThhNzZlLi5lMzliNzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAkvKgogCSAqIFRoZSBDYWxlbmRhciBBbGFybSByZWdpc3RlciBkb2VzIG5vdCBoYXZlIGEgZmllbGQgZm9yCiAJICogdGhlIHllYXIgLSBzbyB0aGVzZSB3aWxsIHJldHVybiBhbiBpbnZhbGlkIHZhbHVlLiAgV2hlbiBhbgotCSAqIGFsYXJtIGlzIHNldCwgYXQ5MV9hbGFybV95ZWFyIHdpbGxlIHN0b3JlIHRoZSBjdXJyZW50IHllYXIuCisJICogYWxhcm0gaXMgc2V0LCBhdDkxX2FsYXJtX3llYXIgd2lsbCBzdG9yZSB0aGUgY3VycmVudCB5ZWFyLgogCSAqLwogCXRtLT50bV95ZWFyICA9IGJjZDJiaW4oZGF0ZSAmIEFUOTFfUlRDX0NFTlQpICogMTAwOwkvKiBjZW50dXJ5ICovCiAJdG0tPnRtX3llYXIgKz0gYmNkMmJpbigoZGF0ZSAmIEFUOTFfUlRDX1lFQVIpID4+IDgpOwkvKiB5ZWFyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtYmZpbi5jIGIvZHJpdmVycy9ydGMvcnRjLWJmaW4uYwppbmRleCBjYTljZmY4Li45MGQ4NjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtYmZpbi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1iZmluLmMKQEAgLTIwLDkgKzIwLDkgQEAKICAqIHdyaXRlIHdvdWxkIGJlIGRpc2NhcmRlZCBhbmQgdGhpbmdzIHF1aWNrbHkgZmFsbCBhcGFydC4KICAqCiAgKiBUbyBrZWVwIHRoaXMgZGVsYXkgZnJvbSBzaWduaWZpY2FudGx5IGRlZ3JhZGluZyBwZXJmb3JtYW5jZSAod2UsIGluIHRoZW9yeSwKLSAqIHdvdWxkIGhhdmUgdG8gc2xlZXAgZm9yIHVwIHRvIDEgc2Vjb25kIGV2ZXJ5dGltZSB3ZSB3YW50ZWQgdG8gd3JpdGUgYQorICogd291bGQgaGF2ZSB0byBzbGVlcCBmb3IgdXAgdG8gMSBzZWNvbmQgZXZlcnkgdGltZSB3ZSB3YW50ZWQgdG8gd3JpdGUgYQogICogcmVnaXN0ZXIpLCB3ZSBvbmx5IGNoZWNrIHRoZSB3cml0ZSBwZW5kaW5nIHN0YXR1cyBiZWZvcmUgd2Ugc3RhcnQgdG8gaXNzdWUKLSAqIGEgbmV3IHdyaXRlLiAgV2UgYmFuayBvbiB0aGUgaWRlYSB0aGF0IGl0IGRvZXNudCBtYXR0ZXIgd2hlbiB0aGUgc3luYworICogYSBuZXcgd3JpdGUuICBXZSBiYW5rIG9uIHRoZSBpZGVhIHRoYXQgaXQgZG9lc24ndCBtYXR0ZXIgd2hlbiB0aGUgc3luYwogICogaGFwcGVucyBzbyBsb25nIGFzIHdlIGRvbid0IGF0dGVtcHQgYW5vdGhlciB3cml0ZSBiZWZvcmUgaXQgZG9lcy4gIFRoZSBvbmx5CiAgKiB0aW1lIHVzZXJzcGFjZSB3b3VsZCB0YWtlIHRoaXMgcGVuYWx0eSBpcyB3aGVuIHRoZXkgdHJ5IGFuZCBkbyBtdWx0aXBsZQogICogb3BlcmF0aW9ucyByaWdodCBhZnRlciBhbm90aGVyIC4uLiBidXQgaW4gdGhpcyBjYXNlLCB0aGV5IG5lZWQgdG8gdGFrZSB0aGUKQEAgLTI1MCw2ICsyNTAsOCBAQAogCQliZmluX3J0Y19pbnRfc2V0X2FsYXJtKHJ0Yyk7CiAJZWxzZQogCQliZmluX3J0Y19pbnRfY2xlYXIofihSVENfSVNUQVRfQUxBUk0gfCBSVENfSVNUQVRfQUxBUk1fREFZKSk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBiZmluX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWNvaDkwMTMzMS5jIGIvZHJpdmVycy9ydGMvcnRjLWNvaDkwMTMzMS5jCmluZGV4IDMxNmY0ODQuLjgwZjljODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1jb2g5MDEzMzEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtY29oOTAxMzMxLmMKQEAgLTIyMCw2ICsyMjAsNyBAQAogCX0KIAljbGtfZGlzYWJsZShydGFwLT5jbGspOwogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcnRhcCk7CiAJcnRhcC0+cnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigiY29oOTAxMzMxIiwgJnBkZXYtPmRldiwgJmNvaDkwMTMzMV9vcHMsCiAJCQkJCSBUSElTX01PRFVMRSk7CiAJaWYgKElTX0VSUihydGFwLT5ydGMpKSB7CkBAIC0yMjcsMTEgKzIyOCwxMCBAQAogCQlnb3RvIG91dF9ub19ydGM7CiAJfQogCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcnRhcCk7Ci0KIAlyZXR1cm4gMDsKIAogIG91dF9ub19ydGM6CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAgb3V0X25vX2Nsa19lbmFibGU6CiAJY2xrX3B1dChydGFwLT5jbGspOwogIG91dF9ub19jbGs6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZGF2aW5jaS5jIGIvZHJpdmVycy9ydGMvcnRjLWRhdmluY2kuYwppbmRleCA4ZDQ2ODM4Li43NTVlMWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZGF2aW5jaS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kYXZpbmNpLmMKQEAgLTUyNCw2ICs1MjQsOCBAQAogCQlnb3RvIGZhaWwyOwogCX0KIAorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdmluY2lfcnRjKTsKKwogCWRhdmluY2lfcnRjLT5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsICZwZGV2LT5kZXYsCiAJCQkJICAgICZkYXZpbmNpX3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKIAlpZiAoSVNfRVJSKGRhdmluY2lfcnRjLT5ydGMpKSB7CkBAIC01NTMsOCArNTU1LDYgQEAKIAogCXJ0Y3NzX3dyaXRlKGRhdmluY2lfcnRjLCBQUlRDU1NfUlRDX0NDVFJMX0NBRU4sIFBSVENTU19SVENfQ0NUUkwpOwogCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGF2aW5jaV9ydGMpOwotCiAJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDApOwogCiAJcmV0dXJuIDA7CkBAIC01NjIsNiArNTYyLDcgQEAKIGZhaWw0OgogCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihkYXZpbmNpX3J0Yy0+cnRjKTsKIGZhaWwzOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWlvdW5tYXAoZGF2aW5jaV9ydGMtPmJhc2UpOwogZmFpbDI6CiAJcmVsZWFzZV9tZW1fcmVnaW9uKGRhdmluY2lfcnRjLT5wYmFzZSwgZGF2aW5jaV9ydGMtPmJhc2Vfc2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMjg2LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMjg2LmMKaW5kZXggNjBjZTY5Ni4uNDdlNjgxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTI4Ni5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEyODYuYwpAQCAtMzU1LDYgKzM1NSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CiAJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigiZHMxMjg2IiwgJnBkZXYtPmRldiwKIAkJCQkgICZkczEyODZfb3BzLCBUSElTX01PRFVMRSk7CiAJaWYgKElTX0VSUihydGMpKSB7CkBAIC0zNjIsNyArMzYzLDYgQEAKIAkJZ290byBvdXQ7CiAJfQogCXByaXYtPnJ0YyA9IHJ0YzsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKIAlyZXR1cm4gMDsKIAogb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWVwOTN4eC5jIGIvZHJpdmVycy9ydGMvcnRjLWVwOTN4eC5jCmluZGV4IDExYWU2NGQuLjMzNTU1MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1lcDkzeHguYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZXA5M3h4LmMKQEAgLTE1MSw2ICsxNTEsNyBAQAogCQlyZXR1cm4gLUVOWElPOwogCiAJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBlcDkzeHhfcnRjOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0Yyk7CiAKIAlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsCiAJCQkJJnBkZXYtPmRldiwgJmVwOTN4eF9ydGNfb3BzLCBUSElTX01PRFVMRSk7CkBAIC0xNTksOCArMTYwLDYgQEAKIAkJZ290byBleGl0OwogCX0KIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0Yyk7Ci0KIAllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmZXA5M3h4X3J0Y19zeXNmc19maWxlcyk7CiAJaWYgKGVycikKIAkJZ290byBmYWlsOwpAQCAtMTY4LDkgKzE2Nyw5IEBACiAJcmV0dXJuIDA7CiAKIGZhaWw6Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CiBleGl0OgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gTlVMTDsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWxwYzMyeHguYyBiL2RyaXZlcnMvcnRjL3J0Yy1scGMzMnh4LmMKaW5kZXggZWM4NzAxYy4uYWUxNjI1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWxwYzMyeHguYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbHBjMzJ4eC5jCkBAIC0yNDAsNyArMjQwLDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmcnRjLT5sb2NrKTsKIAogCS8qCi0JICogVGhlIFJUQyBpcyBvbiBhIHNlcGVyYXRlIHBvd2VyIGRvbWFpbiBhbmQgY2FuIGtlZXAgaXQncyBzdGF0ZQorCSAqIFRoZSBSVEMgaXMgb24gYSBzZXBhcmF0ZSBwb3dlciBkb21haW4gYW5kIGNhbiBrZWVwIGl0J3Mgc3RhdGUKIAkgKiBhY3Jvc3MgYSBjaGlwIHBvd2VyIGN5Y2xlLiBJZiB0aGUgUlRDIGhhcyBuZXZlciBiZWVuIHByZXZpb3VzbHkKIAkgKiBzZXR1cCwgdGhlbiBzZXQgaXQgdXAgbm93IGZvciB0aGUgZmlyc3QgdGltZS4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYwppbmRleCA2OWZlNjY0Li5lZGExMjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDgwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00MXQ4MC5jCkBAIC03ODMsNiArNzgzLDkgQEAKIAkJZ290byBleGl0OwogCX0KIAorCWNsaWVudGRhdGEtPmZlYXR1cmVzID0gaWQtPmRyaXZlcl9kYXRhOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGNsaWVudGRhdGEpOworCiAJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihjbGllbnQtPm5hbWUsICZjbGllbnQtPmRldiwKIAkJCQkgICZtNDF0ODBfcnRjX29wcywgVEhJU19NT0RVTEUpOwogCWlmIChJU19FUlIocnRjKSkgewpAQCAtNzkyLDggKzc5NSw2IEBACiAJfQogCiAJY2xpZW50ZGF0YS0+cnRjID0gcnRjOwotCWNsaWVudGRhdGEtPmZlYXR1cmVzID0gaWQtPmRyaXZlcl9kYXRhOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGNsaWVudGRhdGEpOwogCiAJLyogTWFrZSBzdXJlIEhUIChIYWx0IFVwZGF0ZSkgYml0IGlzIGNsZWFyZWQgKi8KIAlyYyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE00MVQ4MF9SRUdfQUxBUk1fSE9VUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbWF4ODkyNS5jIGIvZHJpdmVycy9ydGMvcnRjLW1heDg5MjUuYwppbmRleCAxNzQwMzZkLi4zYmMwNDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbWF4ODkyNS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tYXg4OTI1LmMKQEAgLTI1Nyw2ICsyNTcsMTAgQEAKIAkJZ290byBvdXRfaXJxOwogCX0KIAorCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBpbmZvKTsKKwkvKiBYWFggLSBpc24ndCB0aGlzIHJlZHVuZGFudD8gKi8KKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKKwogCWluZm8tPnJ0Y19kZXYgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJtYXg4OTI1LXJ0YyIsICZwZGV2LT5kZXYsCiAJCQkJCSZtYXg4OTI1X3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKIAlyZXQgPSBQVFJfRVJSKGluZm8tPnJ0Y19kZXYpOwpAQCAtMjY1LDExICsyNjksOSBAQAogCQlnb3RvIG91dF9ydGM7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGluZm8pOwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOwotCiAJcmV0dXJuIDA7CiBvdXRfcnRjOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWZyZWVfaXJxKGNoaXAtPmlycV9iYXNlICsgTUFYODkyNV9JUlFfUlRDX0FMQVJNMCwgaW5mbyk7CiBvdXRfaXJxOgogCWtmcmVlKGluZm8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW1heDg5OTguYyBiL2RyaXZlcnMvcnRjL3J0Yy1tYXg4OTk4LmMKaW5kZXggM2Y3YmM2Yi4uMmU0OGFhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW1heDg5OTguYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbWF4ODk5OC5jCkBAIC0yNjUsNiArMjY1LDggQEAKIAlpbmZvLT5ydGMgPSBtYXg4OTk4LT5ydGM7CiAJaW5mby0+aXJxID0gbWF4ODk5OC0+aXJxX2Jhc2UgKyBNQVg4OTk4X0lSUV9BTEFSTTA7CiAKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKKwogCWluZm8tPnJ0Y19kZXYgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJtYXg4OTk4LXJ0YyIsICZwZGV2LT5kZXYsCiAJCQkmbWF4ODk5OF9ydGNfb3BzLCBUSElTX01PRFVMRSk7CiAKQEAgLTI3NCw4ICsyNzYsNiBAQAogCQlnb3RvIG91dF9ydGM7CiAJfQogCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7Ci0KIAlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShpbmZvLT5pcnEsIE5VTEwsIG1heDg5OThfcnRjX2FsYXJtX2lycSwgMCwKIAkJCSJydGMtYWxhcm0wIiwgaW5mbyk7CiAKQEAgLTI5Myw2ICsyOTMsNyBAQAogCXJldHVybiAwOwogCiBvdXRfcnRjOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWtmcmVlKGluZm8pOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbWMxM3h4eC5jIGIvZHJpdmVycy9ydGMvcnRjLW1jMTN4eHguYwppbmRleCBjNDIwMDY0Li5hMWEyNzhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbWMxM3h4eC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tYzEzeHh4LmMKQEAgLTM0OSwxMSArMzQ5LDE1IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfYWxhcm1faXJxX3JlcXVlc3Q7CiAKKwltYzEzeHh4X3VubG9jayhtYzEzeHh4KTsKKwogCXByaXYtPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIocGRldi0+bmFtZSwKIAkJCSZwZGV2LT5kZXYsICZtYzEzeHh4X3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKIAlpZiAoSVNfRVJSKHByaXYtPnJ0YykpIHsKIAkJcmV0ID0gUFRSX0VSUihwcml2LT5ydGMpOwogCisJCW1jMTN4eHhfbG9jayhtYzEzeHh4KTsKKwogCQltYzEzeHh4X2lycV9mcmVlKG1jMTN4eHgsIE1DMTNYWFhfSVJRX1RPREEsIHByaXYpOwogZXJyX2FsYXJtX2lycV9yZXF1ZXN0OgogCkBAIC0zNjUsMTIgKzM2OSwxMiBAQAogCQltYzEzeHh4X2lycV9mcmVlKG1jMTN4eHgsIE1DMTNYWFhfSVJRX1JUQ1JTVCwgcHJpdik7CiBlcnJfcmVzZXRfaXJxX3JlcXVlc3Q6CiAKKwkJbWMxM3h4eF91bmxvY2sobWMxM3h4eCk7CisKIAkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJCWtmcmVlKHByaXYpOwogCX0KIAotCW1jMTN4eHhfdW5sb2NrKG1jMTN4eHgpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDAxLDYgKzQwNSw3IEBACiAJfSwgewogCQkubmFtZSA9ICJtYzEzODkyLXJ0YyIsCiAJfSwKKwl7IH0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1jMTN4eHhfcnRjX2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tcnN0LmMgYi9kcml2ZXJzL3J0Yy9ydGMtbXJzdC5jCmluZGV4IDMzMmEyYzQuLmIyZjA5NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tcnN0LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW1yc3QuYwpAQCAtMzQyLDYgKzM0Miw4IEBACiAKIAltcnN0X3J0Yy5pcnEgPSBydGNfaXJxOwogCW1yc3RfcnRjLmlvbWVtID0gaW9tZW07CisJbXJzdF9ydGMuZGV2ID0gZGV2OworCWRldl9zZXRfZHJ2ZGF0YShkZXYsICZtcnN0X3J0Yyk7CiAKIAltcnN0X3J0Yy5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKGRyaXZlcl9uYW1lLCBkZXYsCiAJCQkJJm1yc3RfcnRjX29wcywgVEhJU19NT0RVTEUpOwpAQCAtMzUwLDggKzM1Miw2IEBACiAJCWdvdG8gY2xlYW51cDA7CiAJfQogCi0JbXJzdF9ydGMuZGV2ID0gZGV2OwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsICZtcnN0X3J0Yyk7CiAJcmVuYW1lX3JlZ2lvbihpb21lbSwgZGV2X25hbWUoJm1yc3RfcnRjLnJ0Yy0+ZGV2KSk7CiAKIAlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CkBAIC0zNzYsOSArMzc2LDEwIEBACiAJcmV0dXJuIDA7CiAKIGNsZWFudXAxOgotCW1yc3RfcnRjLmRldiA9IE5VTEw7CiAJcnRjX2RldmljZV91bnJlZ2lzdGVyKG1yc3RfcnRjLnJ0Yyk7CiBjbGVhbnVwMDoKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwltcnN0X3J0Yy5kZXYgPSBOVUxMOwogCXJlbGVhc2VfcmVnaW9uKGlvbWVtLT5zdGFydCwgaW9tZW0tPmVuZCArIDEgLSBpb21lbS0+c3RhcnQpOwogCWRldl9lcnIoZGV2LCAicnRjLW1yc3Q6IHVuYWJsZSB0byBpbml0aWFsaXNlXG4iKTsKIAlyZXR1cm4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW1zbTYyNDIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tc202MjQyLmMKaW5kZXggNjc4MjA2Mi4uZmNiMTEzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW1zbTYyNDIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbXNtNjI0Mi5jCkBAIC0yMTQsNiArMjE0LDcgQEAKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9mcmVlX3ByaXY7CiAJfQorCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgcHJpdik7CiAKIAlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJydGMtbXNtNjI0MiIsICZkZXYtPmRldiwgJm1zbTYyNDJfcnRjX29wcywKIAkJCQkgIFRISVNfTU9EVUxFKTsKQEAgLTIyMywxMCArMjI0LDEwIEBACiAJfQogCiAJcHJpdi0+cnRjID0gcnRjOwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgcHJpdik7CiAJcmV0dXJuIDA7CiAKIG91dF91bm1hcDoKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCWlvdW5tYXAocHJpdi0+cmVncyk7CiBvdXRfZnJlZV9wcml2OgogCWtmcmVlKHByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW14Yy5jIGIvZHJpdmVycy9ydGMvcnRjLW14Yy5jCmluZGV4IDgyNmFiNjQuLmQ4MTQ0MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1teGMuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbXhjLmMKQEAgLTQxOCwxNCArNDE4LDYgQEAKIAkJZ290byBleGl0X3B1dF9jbGs7CiAJfQogCi0JcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihwZGV2LT5uYW1lLCAmcGRldi0+ZGV2LCAmbXhjX3J0Y19vcHMsCi0JCQkJICBUSElTX01PRFVMRSk7Ci0JaWYgKElTX0VSUihydGMpKSB7Ci0JCXJldCA9IFBUUl9FUlIocnRjKTsKLQkJZ290byBleGl0X3B1dF9jbGs7Ci0JfQotCi0JcGRhdGEtPnJ0YyA9IHJ0YzsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwZGF0YSk7CiAKIAkvKiBDb25maWd1cmUgYW5kIGVuYWJsZSB0aGUgUlRDICovCkBAIC00MzgsOCArNDMwLDE5IEBACiAJCXBkYXRhLT5pcnEgPSAtMTsKIAl9CiAKKwlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsICZwZGV2LT5kZXYsICZteGNfcnRjX29wcywKKwkJCQkgIFRISVNfTU9EVUxFKTsKKwlpZiAoSVNfRVJSKHJ0YykpIHsKKwkJcmV0ID0gUFRSX0VSUihydGMpOworCQlnb3RvIGV4aXRfY2xyX2RydmRhdGE7CisJfQorCisJcGRhdGEtPnJ0YyA9IHJ0YzsKKwogCXJldHVybiAwOwogCitleGl0X2Nscl9kcnZkYXRhOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogZXhpdF9wdXRfY2xrOgogCWNsa19kaXNhYmxlKHBkYXRhLT5jbGspOwogCWNsa19wdXQocGRhdGEtPmNsayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jIGIvZHJpdmVycy9ydGMvcnRjLW9tYXAuYwppbmRleCBkZTBkZDdiLi5iY2FlOGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKQEAgLTM5NCw3ICszOTQsNyBAQAogCXJldHVybiAwOwogCiBmYWlsMjoKLQlmcmVlX2lycShvbWFwX3J0Y190aW1lciwgTlVMTCk7CisJZnJlZV9pcnEob21hcF9ydGNfdGltZXIsIHJ0Yyk7CiBmYWlsMToKIAlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKIGZhaWwwOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXBjYXAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wY2FwLmMKaW5kZXggYTYzM2FiYy4uY2Q0ZjE5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXBjYXAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcGNhcC5jCkBAIC0xNTEsNiArMTUxLDggQEAKIAogCXBjYXBfcnRjLT5wY2FwID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOwogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGNhcF9ydGMpOworCiAJcGNhcF9ydGMtPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoInBjYXAiLCAmcGRldi0+ZGV2LAogCQkJCSAgJnBjYXBfcnRjX29wcywgVEhJU19NT0RVTEUpOwogCWlmIChJU19FUlIocGNhcF9ydGMtPnJ0YykpIHsKQEAgLTE1OCw3ICsxNjAsNiBAQAogCQlnb3RvIGZhaWxfcnRjOwogCX0KIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBjYXBfcnRjKTsKIAogCXRpbWVyX2lycSA9IHBjYXBfdG9faXJxKHBjYXBfcnRjLT5wY2FwLCBQQ0FQX0lSUV8xSFopOwogCWFsYXJtX2lycSA9IHBjYXBfdG9faXJxKHBjYXBfcnRjLT5wY2FwLCBQQ0FQX0lSUV9UT0RBKTsKQEAgLTE3Nyw2ICsxNzgsNyBAQAogZmFpbF90aW1lcjoKIAlydGNfZGV2aWNlX3VucmVnaXN0ZXIocGNhcF9ydGMtPnJ0Yyk7CiBmYWlsX3J0YzoKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlrZnJlZShwY2FwX3J0Yyk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1ycDVjMDEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1ycDVjMDEuYwppbmRleCA2OTRkYTM5Li4zNTlkYTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcnA1YzAxLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXJwNWMwMS5jCkBAIC0yNDksMTUgKzI0OSwxNSBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOwogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBwcml2KTsKKwogCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoInJ0Yy1ycDVjMDEiLCAmZGV2LT5kZXYsICZycDVjMDFfcnRjX29wcywKIAkJCQkgIFRISVNfTU9EVUxFKTsKIAlpZiAoSVNfRVJSKHJ0YykpIHsKIAkJZXJyb3IgPSBQVFJfRVJSKHJ0Yyk7CiAJCWdvdG8gb3V0X3VubWFwOwogCX0KLQogCXByaXYtPnJ0YyA9IHJ0YzsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIHByaXYpOwogCiAJZXJyb3IgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmRldi0+ZGV2LmtvYmosICZwcml2LT5udnJhbV9hdHRyKTsKIAlpZiAoZXJyb3IpCkBAIC0yNjgsNiArMjY4LDcgQEAKIG91dF91bnJlZ2lzdGVyOgogCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwogb3V0X3VubWFwOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAJaW91bm1hcChwcml2LT5yZWdzKTsKIG91dF9mcmVlX3ByaXY6CiAJa2ZyZWUocHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtczNjLmMgYi9kcml2ZXJzL3J0Yy9ydGMtczNjLmMKaW5kZXggNzE0OTY0OS4uMTY1MTJlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXMzYy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zM2MuYwpAQCAtNDYsNiArNDYsNyBAQAogc3RhdGljIHZvaWQgX19pb21lbSAqczNjX3J0Y19iYXNlOwogc3RhdGljIGludCBzM2NfcnRjX2FsYXJtbm8gPSBOT19JUlE7CiBzdGF0aWMgaW50IHMzY19ydGNfdGlja25vICA9IE5PX0lSUTsKK3N0YXRpYyBib29sIHdha2VfZW47CiBzdGF0aWMgZW51bSBzM2NfY3B1X3R5cGUgczNjX3J0Y19jcHVfdHlwZTsKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhzM2NfcnRjX3BpZV9sb2NrKTsKQEAgLTMzNiw3ICszMzcsNiBAQAogCiAJLyogZG8gbm90IGNsZWFyIEFJRSBoZXJlLCBpdCBtYXkgYmUgbmVlZGVkIGZvciB3YWtlICovCiAKLQlzM2NfcnRjX3NldHBpZShkZXYsIDApOwogCWZyZWVfaXJxKHMzY19ydGNfYWxhcm1ubywgcnRjX2Rldik7CiAJZnJlZV9pcnEoczNjX3J0Y190aWNrbm8sIHJ0Y19kZXYpOwogfQpAQCAtNDA4LDcgKzQwOCw2IEBACiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKIAotCXMzY19ydGNfc2V0cGllKCZkZXYtPmRldiwgMCk7CiAJczNjX3J0Y19zZXRhaWUoJmRldi0+ZGV2LCAwKTsKIAogCWNsa19kaXNhYmxlKHJ0Y19jbGspOwpAQCAtNTY0LDggKzU2MywxMiBAQAogCX0KIAlzM2NfcnRjX2VuYWJsZShwZGV2LCAwKTsKIAotCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKLQkJZW5hYmxlX2lycV93YWtlKHMzY19ydGNfYWxhcm1ubyk7CisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpICYmICF3YWtlX2VuKSB7CisJCWlmIChlbmFibGVfaXJxX3dha2UoczNjX3J0Y19hbGFybW5vKSA9PSAwKQorCQkJd2FrZV9lbiA9IHRydWU7CisJCWVsc2UKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImVuYWJsZV9pcnFfd2FrZSBmYWlsZWRcbiIpOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtNTgxLDggKzU4NCwxMCBAQAogCQl3cml0ZXcodG1wIHwgdGljbnRfZW5fc2F2ZSwgczNjX3J0Y19iYXNlICsgUzNDMjQxMF9SVENDT04pOwogCX0KIAotCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKKwlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikgJiYgd2FrZV9lbikgewogCQlkaXNhYmxlX2lycV93YWtlKHMzY19ydGNfYWxhcm1ubyk7CisJCXdha2VfZW4gPSBmYWxzZTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy14MTIwNS5jIGIvZHJpdmVycy9ydGMvcnRjLXgxMjA1LmMKaW5kZXggOWFhZTQ5MS4uYjAwYWFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXgxMjA1LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXgxMjA1LmMKQEAgLTU3Myw3ICs1NzMsNyBAQAogCiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcnRjKTsKIAotCS8qIENoZWNrIGZvciBwb3dlciBmYWlsdXJlcyBhbmQgZXZlbnR1YWx5IGVuYWJsZSB0aGUgb3NjICovCisJLyogQ2hlY2sgZm9yIHBvd2VyIGZhaWx1cmVzIGFuZCBldmVudHVhbGx5IGVuYWJsZSB0aGUgb3NjICovCiAJaWYgKChlcnIgPSB4MTIwNV9nZXRfc3RhdHVzKGNsaWVudCwgJnNyKSkgPT0gMCkgewogCQlpZiAoc3IgJiBYMTIwNV9TUl9SVENGKSB7CiAJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCmluZGV4IDRkMmRmMmYuLjg2YjZmMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwpAQCAtMTc0MiwxMSArMTc0MiwyMCBAQAogc3RhdGljIGlubGluZSBpbnQgX2Rhc2RfdGVybV9ydW5uaW5nX2NxcihzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CisJaW50IHJjOwogCiAJaWYgKGxpc3RfZW1wdHkoJmRldmljZS0+Y2N3X3F1ZXVlKSkKIAkJcmV0dXJuIDA7CiAJY3FyID0gbGlzdF9lbnRyeShkZXZpY2UtPmNjd19xdWV1ZS5uZXh0LCBzdHJ1Y3QgZGFzZF9jY3dfcmVxLCBkZXZsaXN0KTsKLQlyZXR1cm4gZGV2aWNlLT5kaXNjaXBsaW5lLT50ZXJtX0lPKGNxcik7CisJcmMgPSBkZXZpY2UtPmRpc2NpcGxpbmUtPnRlcm1fSU8oY3FyKTsKKwlpZiAoIXJjKQorCQkvKgorCQkgKiBDUVIgdGVybWluYXRlZCBiZWNhdXNlIGEgbW9yZSBpbXBvcnRhbnQgcmVxdWVzdCBpcyBwZW5kaW5nLgorCQkgKiBVbmRvIGRlY3JlYXNpbmcgb2YgcmV0cnkgY291bnRlciBiZWNhdXNlIHRoaXMgaXMKKwkJICogbm90IGFuIGVycm9yIGNhc2UuCisJCSAqLworCQljcXItPnJldHJpZXMrKzsKKwlyZXR1cm4gcmM7CiB9CiAKIGludCBkYXNkX3NsZWVwX29uX2ltbWVkaWF0bHkoc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyKQpAQCAtMjMxNCwxNSArMjMyMywxNCBAQAogCiBzdGF0aWMgaW50IGRhc2Rfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZTsKIAlpbnQgcmM7CiAKLQlpZiAoIWJsb2NrKQorCWJhc2UgPSBkYXNkX2RldmljZV9mcm9tX2dlbmRpc2soYmRldi0+YmRfZGlzayk7CisJaWYgKCFiYXNlKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWJhc2UgPSBibG9jay0+YmFzZTsKLQlhdG9taWNfaW5jKCZibG9jay0+b3Blbl9jb3VudCk7CisJYXRvbWljX2luYygmYmFzZS0+YmxvY2stPm9wZW5fY291bnQpOwogCWlmICh0ZXN0X2JpdChEQVNEX0ZMQUdfT0ZGTElORSwgJmJhc2UtPmZsYWdzKSkgewogCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gdW5sb2NrOwpAQCAtMjM1NSwyMSArMjM2MywyOCBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlkYXNkX3B1dF9kZXZpY2UoYmFzZSk7CiAJcmV0dXJuIDA7CiAKIG91dDoKIAltb2R1bGVfcHV0KGJhc2UtPmRpc2NpcGxpbmUtPm93bmVyKTsKIHVubG9jazoKLQlhdG9taWNfZGVjKCZibG9jay0+b3Blbl9jb3VudCk7CisJYXRvbWljX2RlYygmYmFzZS0+YmxvY2stPm9wZW5fY291bnQpOworCWRhc2RfcHV0X2RldmljZShiYXNlKTsKIAlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgZGFzZF9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrID0gZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZTsKIAotCWF0b21pY19kZWMoJmJsb2NrLT5vcGVuX2NvdW50KTsKLQltb2R1bGVfcHV0KGJsb2NrLT5iYXNlLT5kaXNjaXBsaW5lLT5vd25lcik7CisJYmFzZSA9IGRhc2RfZGV2aWNlX2Zyb21fZ2VuZGlzayhkaXNrKTsKKwlpZiAoIWJhc2UpCisJCXJldHVybiAtRU5PREVWOworCisJYXRvbWljX2RlYygmYmFzZS0+YmxvY2stPm9wZW5fY291bnQpOworCW1vZHVsZV9wdXQoYmFzZS0+ZGlzY2lwbGluZS0+b3duZXIpOworCWRhc2RfcHV0X2RldmljZShiYXNlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjM3OCwyMCArMjM5MywyMCBAQAogICovCiBzdGF0aWMgaW50IGRhc2RfZ2V0Z2VvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKQogewotCXN0cnVjdCBkYXNkX2Jsb2NrICpibG9jazsKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2U7CiAKLQlibG9jayA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQlpZiAoIWJsb2NrKQorCWJhc2UgPSBkYXNkX2RldmljZV9mcm9tX2dlbmRpc2soYmRldi0+YmRfZGlzayk7CisJaWYgKCFiYXNlKQogCQlyZXR1cm4gLUVOT0RFVjsKLQliYXNlID0gYmxvY2stPmJhc2U7CiAKIAlpZiAoIWJhc2UtPmRpc2NpcGxpbmUgfHwKLQkgICAgIWJhc2UtPmRpc2NpcGxpbmUtPmZpbGxfZ2VvbWV0cnkpCisJICAgICFiYXNlLT5kaXNjaXBsaW5lLT5maWxsX2dlb21ldHJ5KSB7CisJCWRhc2RfcHV0X2RldmljZShiYXNlKTsKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KLQliYXNlLT5kaXNjaXBsaW5lLT5maWxsX2dlb21ldHJ5KGJsb2NrLCBnZW8pOwotCWdlby0+c3RhcnQgPSBnZXRfc3RhcnRfc2VjdChiZGV2KSA+PiBibG9jay0+czJiX3NoaWZ0OworCX0KKwliYXNlLT5kaXNjaXBsaW5lLT5maWxsX2dlb21ldHJ5KGJhc2UtPmJsb2NrLCBnZW8pOworCWdlby0+c3RhcnQgPSBnZXRfc3RhcnRfc2VjdChiZGV2KSA+PiBiYXNlLT5ibG9jay0+czJiX3NoaWZ0OworCWRhc2RfcHV0X2RldmljZShiYXNlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjUyOCw3ICsyNTQzLDYgQEAKIAlkYXNkX3NldF90YXJnZXRfc3RhdGUoZGV2aWNlLCBEQVNEX1NUQVRFX05FVyk7CiAJLyogZGFzZF9kZWxldGVfZGV2aWNlIGRlc3Ryb3lzIHRoZSBkZXZpY2UgcmVmZXJlbmNlLiAqLwogCWJsb2NrID0gZGV2aWNlLT5ibG9jazsKLQlkZXZpY2UtPmJsb2NrID0gTlVMTDsKIAlkYXNkX2RlbGV0ZV9kZXZpY2UoZGV2aWNlKTsKIAkvKgogCSAqIGxpZmUgY3ljbGUgb2YgYmxvY2sgaXMgYm91bmQgdG8gZGV2aWNlLCBzbyBkZWxldGUgaXQgYWZ0ZXIKQEAgLTI2NTAsNyArMjY2NCw2IEBACiAJZGFzZF9zZXRfdGFyZ2V0X3N0YXRlKGRldmljZSwgREFTRF9TVEFURV9ORVcpOwogCS8qIGRhc2RfZGVsZXRlX2RldmljZSBkZXN0cm95cyB0aGUgZGV2aWNlIHJlZmVyZW5jZS4gKi8KIAlibG9jayA9IGRldmljZS0+YmxvY2s7Ci0JZGV2aWNlLT5ibG9jayA9IE5VTEw7CiAJZGFzZF9kZWxldGVfZGV2aWNlKGRldmljZSk7CiAJLyoKIAkgKiBsaWZlIGN5Y2xlIG9mIGJsb2NrIGlzIGJvdW5kIHRvIGRldmljZSwgc28gZGVsZXRlIGl0IGFmdGVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzk5MF9lcnAuYwppbmRleCAxNjU0YTI0Li44N2EwY2YxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMKQEAgLTIyMDcsNyArMjIwNyw3IEBACiAgKiBEQVNEXzM5OTBfRVJQX0NPTlRST0xfQ0hFQ0sKICAqCiAgKiBERVNDUklQVElPTgotICogICBEb2VzIGEgZ2VuZXJpYyBpbnNwZWN0aW9uIGlmIGEgY29udHJvbCBjaGVjayBvY2N1cmVkIGFuZCBzZXRzIHVwCisgKiAgIERvZXMgYSBnZW5lcmljIGluc3BlY3Rpb24gaWYgYSBjb250cm9sIGNoZWNrIG9jY3VycmVkIGFuZCBzZXRzIHVwCiAgKiAgIHRoZSByZWxhdGVkIGVycm9yIHJlY292ZXJ5IHByb2NlZHVyZQogICoKICAqIFBBUkFNRVRFUgpAQCAtMjI1MCw3ICsyMjUwLDcgQEAKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICplcnBfbmV3ID0gTlVMTDsKIAljaGFyICpzZW5zZTsKIAotCS8qIGlmIHRoaXMgcHJvYmxlbSBvY2N1cmVkIG9uIGFuIGFsaWFzIHJldHJ5IG9uIGJhc2UgKi8KKwkvKiBpZiB0aGlzIHByb2JsZW0gb2NjdXJyZWQgb24gYW4gYWxpYXMgcmV0cnkgb24gYmFzZSAqLwogCWVycF9uZXcgPSBkYXNkXzM5OTBfZXJwX2luc3BlY3RfYWxpYXMoZXJwKTsKIAlpZiAoZXJwX25ldykKIAkJcmV0dXJuIGVycF9uZXc7CkBAIC0yMjgyLDcgKzIyODIsNyBAQAogICogREFTRF8zOTkwX0VSUF9BRERfRVJQCiAgKgogICogREVTQ1JJUFRJT04KLSAqICAgVGhpcyBmdW50aW9uIGFkZHMgYW4gYWRkaXRpb25hbCByZXF1ZXN0IGJsb2NrIChFUlApIHRvIHRoZSBoZWFkIG9mCisgKiAgIFRoaXMgZnVuY3Rpb24gYWRkcyBhbiBhZGRpdGlvbmFsIHJlcXVlc3QgYmxvY2sgKEVSUCkgdG8gdGhlIGhlYWQgb2YKICAqICAgdGhlIGdpdmVuIGNxciAob3IgZXJwKS4KICAqICAgRm9yIGEgY29tbWFuZCBtb2RlIGNxciB0aGUgZXJwIGlzIGluaXRpYWxpemVkIGFzIGFuIGRlZmF1bHQgZXJwCiAgKiAgIChyZXRyeSBUSUMpLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYwppbmRleCBjYjZhNjdiLi5kNzE1MTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYwpAQCAtMzAyLDcgKzMwMiw3IEBACiAvKgogICogVHJ5IHRvIGludGVycHJldGUgdGhlIGZpcnN0IGVsZW1lbnQgb24gdGhlIGNvbW1hIHNlcGFyYXRlZCBwYXJzZSBzdHJpbmcKICAqIGFzIGEgZGV2aWNlIG51bWJlciBvciBhIHJhbmdlIG9mIGRldmljZXMuIElmIHRoZSBpbnRlcnByZXRhdGlvbiBpcwotICogc3VjY2Vzc2Z1bGwsIGNyZWF0ZSB0aGUgbWF0Y2hpbmcgZGFzZF9kZXZtYXAgZW50cmllcyBhbmQgcmV0dXJuIGEgcG9pbnRlcgorICogc3VjY2Vzc2Z1bCwgY3JlYXRlIHRoZSBtYXRjaGluZyBkYXNkX2Rldm1hcCBlbnRyaWVzIGFuZCByZXR1cm4gYSBwb2ludGVyCiAgKiB0byB0aGUgcmVzaWR1YWwgc3RyaW5nLgogICogSWYgaW50ZXJwcmV0YXRpb24gZmFpbHMgb3IgaW4gY2FzZSBvZiBhbiBlcnJvciwgcmV0dXJuIGFuIGVycm9yIGNvZGUuCiAgKi8KQEAgLTY3NCw2ICs2NzQsMzYgQEAKIAlyZXR1cm4gZGV2aWNlOwogfQogCit2b2lkIGRhc2RfYWRkX2xpbmtfdG9fZ2VuZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZ2RwLCBzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgZGFzZF9kZXZtYXAgKmRldm1hcDsKKworCWRldm1hcCA9IGRhc2RfZmluZF9idXNpZChkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwlpZiAoSVNfRVJSKGRldm1hcCkpCisJCXJldHVybjsKKwlzcGluX2xvY2soJmRhc2RfZGV2bWFwX2xvY2spOworCWdkcC0+cHJpdmF0ZV9kYXRhID0gZGV2bWFwOworCXNwaW5fdW5sb2NrKCZkYXNkX2Rldm1hcF9sb2NrKTsKK30KKworc3RydWN0IGRhc2RfZGV2aWNlICpkYXNkX2RldmljZV9mcm9tX2dlbmRpc2soc3RydWN0IGdlbmRpc2sgKmdkcCkKK3sKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKKwlzdHJ1Y3QgZGFzZF9kZXZtYXAgKmRldm1hcDsKKworCWlmICghZ2RwLT5wcml2YXRlX2RhdGEpCisJCXJldHVybiBOVUxMOworCWRldmljZSA9IE5VTEw7CisJc3Bpbl9sb2NrKCZkYXNkX2Rldm1hcF9sb2NrKTsKKwlkZXZtYXAgPSBnZHAtPnByaXZhdGVfZGF0YTsKKwlpZiAoZGV2bWFwICYmIGRldm1hcC0+ZGV2aWNlKSB7CisJCWRldmljZSA9IGRldm1hcC0+ZGV2aWNlOworCQlkYXNkX2dldF9kZXZpY2UoZGV2aWNlKTsKKwl9CisJc3Bpbl91bmxvY2soJmRhc2RfZGV2bWFwX2xvY2spOworCXJldHVybiBkZXZpY2U7Cit9CisKIC8qCiAgKiBTRUNUSU9OOiBmaWxlcyBpbiBzeXNmcwogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKaW5kZXggMjkxNDNlZC4uODVkZGRiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYwpAQCAtMjM5LDcgKzIzOSw2IEBACiAJYWRkcl90IGlwOwogCWludCByYzsKIAotCWtzdGF0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpLmlycXNbRVhUSU5UX0RTRF0rKzsKIAlzd2l0Y2ggKGV4dF9pbnRfY29kZSA+PiAyNCkgewogCWNhc2UgREFTRF9ESUFHX0NPREVfMzFCSVQ6CiAJCWlwID0gKGFkZHJfdCkgcGFyYW0zMjsKQEAgLTI1MCw2ICsyNDksNyBAQAogCWRlZmF1bHQ6CiAJCXJldHVybjsKIAl9CisJa3N0YXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSkuaXJxc1tFWFRJTlRfRFNEXSsrOwogCWlmICghaXApIHsJCS8qIG5vIGludHBhcm06IHVuc29saWNpdGVkIGludGVycnVwdCAqLwogCQlEQkZfRVZFTlQoREJGX05PVElDRSwgIiVzIiwgImNhdWdodCB1bnNvbGljaXRlZCAiCiAJCQkgICAgICAiaW50ZXJydXB0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKaW5kZXggNDU5ZjJjYi4uM2ViZGY1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwpAQCAtMjAzNyw3ICsyMDM3LDcgQEAKIAkJcmV0dXJuOwogCiAJLyogc3VtbWFyeSB1bml0IGNoZWNrICovCi0JaWYgKChzZW5zZVs3XSA9PSAweDBEKSAmJgorCWlmICgoc2Vuc2VbMjddICYgREFTRF9TRU5TRV9CSVRfMCkgJiYgKHNlbnNlWzddID09IDB4MEQpICYmCiAJICAgIChzY3N3X2RzdGF0KCZpcmItPnNjc3cpICYgREVWX1NUQVRfVU5JVF9DSEVDSykpIHsKIAkJZGFzZF9hbGlhc19oYW5kbGVfc3VtbWFyeV91bml0X2NoZWNrKGRldmljZSwgaXJiKTsKIAkJcmV0dXJuOwpAQCAtMjA1Myw3ICsyMDUzLDggQEAKIAkvKiBsb3NzIG9mIGRldmljZSByZXNlcnZhdGlvbiBpcyBoYW5kbGVkIHZpYSBiYXNlIGRldmljZXMgb25seQogCSAqIGFzIGFsaWFzIGRldmljZXMgbWF5IGJlIHVzZWQgd2l0aCBzZXZlcmFsIGJhc2VzCiAJICovCi0JaWYgKGRldmljZS0+YmxvY2sgJiYgKHNlbnNlWzddID09IDB4M0YpICYmCisJaWYgKGRldmljZS0+YmxvY2sgJiYgKHNlbnNlWzI3XSAmIERBU0RfU0VOU0VfQklUXzApICYmCisJICAgIChzZW5zZVs3XSA9PSAweDNGKSAmJgogCSAgICAoc2Nzd19kc3RhdCgmaXJiLT5zY3N3KSAmIERFVl9TVEFUX1VOSVRfQ0hFQ0spICYmCiAJICAgIHRlc3RfYml0KERBU0RfRkxBR19JU19SRVNFUlZFRCwgJmRldmljZS0+ZmxhZ3MpKSB7CiAJCWlmIChkZXZpY2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX0ZBSUxPTlNMQ0spCkBAIC0yODU4LDcgKzI4NTksNyBAQAogCS8qCiAJICogc3RydWN0IFBGWF9lY2tkX2RhdGEgaGFzIHVwIHRvIDIgYnl0ZSBhcyBleHRlbmRlZCBwYXJhbWV0ZXIKIAkgKiB0aGlzIGlzIG5lZWRlZCBmb3Igd3JpdGUgZnVsbCB0cmFjayBhbmQgaGFzIHRvIGJlIG1lbnRpb25lZAotCSAqIHNlcGVyYXRlbHkKKwkgKiBzZXBhcmF0ZWx5CiAJICogYWRkIDggaW5zdGVhZCBvZiAyIHRvIGtlZXAgOCBieXRlIGJvdW5kYXJ5CiAJICovCiAJcGZ4X2RhdGFzaXplID0gc2l6ZW9mKHN0cnVjdCBQRlhfZWNrZF9kYXRhKSArIDg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYwppbmRleCA1NTA1YmMwLi4xOWExZmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMKQEAgLTczLDcgKzczLDcgQEAKIAlpZiAoYmFzZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfUkVBRE9OTFkgfHwKIAkgICAgdGVzdF9iaXQoREFTRF9GTEFHX0RFVklDRV9STywgJmJhc2UtPmZsYWdzKSkKIAkJc2V0X2Rpc2tfcm8oZ2RwLCAxKTsKLQlnZHAtPnByaXZhdGVfZGF0YSA9IGJsb2NrOworCWRhc2RfYWRkX2xpbmtfdG9fZ2VuZGlzayhnZHAsIGJhc2UpOwogCWdkcC0+cXVldWUgPSBibG9jay0+cmVxdWVzdF9xdWV1ZTsKIAlibG9jay0+Z2RwID0gZ2RwOwogCXNldF9jYXBhY2l0eShibG9jay0+Z2RwLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKaW5kZXggZGY5ZjY5OS4uZDFlNGYyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKQEAgLTY4Niw2ICs2ODYsOSBAQAogc3RydWN0IGRhc2RfZGV2aWNlICpkYXNkX2RldmljZV9mcm9tX2NkZXZfbG9ja2VkKHN0cnVjdCBjY3dfZGV2aWNlICopOwogc3RydWN0IGRhc2RfZGV2aWNlICpkYXNkX2RldmljZV9mcm9tX2RldmluZGV4KGludCk7CiAKK3ZvaWQgZGFzZF9hZGRfbGlua190b19nZW5kaXNrKHN0cnVjdCBnZW5kaXNrICosIHN0cnVjdCBkYXNkX2RldmljZSAqKTsKK3N0cnVjdCBkYXNkX2RldmljZSAqZGFzZF9kZXZpY2VfZnJvbV9nZW5kaXNrKHN0cnVjdCBnZW5kaXNrICopOworCiBpbnQgZGFzZF9wYXJzZSh2b2lkKTsKIGludCBkYXNkX2J1c2lkX2tub3duKGNvbnN0IGNoYXIgKik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jCmluZGV4IDI2MDc1ZTkuLjcyMjYxZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYwpAQCAtNDIsMTYgKzQyLDIyIEBACiBzdGF0aWMgaW50CiBkYXNkX2lvY3RsX2VuYWJsZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogewotCXN0cnVjdCBkYXNkX2Jsb2NrICpibG9jayA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2U7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwogCi0JZGFzZF9lbmFibGVfZGV2aWNlKGJsb2NrLT5iYXNlKTsKKwliYXNlID0gZGFzZF9kZXZpY2VfZnJvbV9nZW5kaXNrKGJkZXYtPmJkX2Rpc2spOworCWlmICghYmFzZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkYXNkX2VuYWJsZV9kZXZpY2UoYmFzZSk7CiAJLyogRm9ybWF0dGluZyB0aGUgZGFzZCBkZXZpY2UgY2FuIGNoYW5nZSB0aGUgY2FwYWNpdHkuICovCiAJbXV0ZXhfbG9jaygmYmRldi0+YmRfbXV0ZXgpOwotCWlfc2l6ZV93cml0ZShiZGV2LT5iZF9pbm9kZSwgKGxvZmZfdClnZXRfY2FwYWNpdHkoYmxvY2stPmdkcCkgPDwgOSk7CisJaV9zaXplX3dyaXRlKGJkZXYtPmJkX2lub2RlLAorCQkgICAgIChsb2ZmX3QpZ2V0X2NhcGFjaXR5KGJhc2UtPmJsb2NrLT5nZHApIDw8IDkpOwogCW11dGV4X3VubG9jaygmYmRldi0+YmRfbXV0ZXgpOworCWRhc2RfcHV0X2RldmljZShiYXNlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjIsMTEgKzY4LDE0IEBACiBzdGF0aWMgaW50CiBkYXNkX2lvY3RsX2Rpc2FibGUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKIHsKLQlzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2sgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRhc2RfZGV2aWNlICpiYXNlOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKIAorCWJhc2UgPSBkYXNkX2RldmljZV9mcm9tX2dlbmRpc2soYmRldi0+YmRfZGlzayk7CisJaWYgKCFiYXNlKQorCQlyZXR1cm4gLUVOT0RFVjsKIAkvKgogCSAqIE1hbiB0aGlzIGlzIHNpY2suIFdlIGRvbid0IGRvIGEgcmVhbCBkaXNhYmxlIGJ1dCBvbmx5IGRvd25ncmFkZQogCSAqIHRoZSBkZXZpY2UgdG8gREFTRF9TVEFURV9CQVNJQy4gVGhlIHJlYXNvbiBpcyB0aGF0IGRhc2RmbXQgdXNlcwpAQCAtNzUsNyArODQsNyBAQAogCSAqIHVzaW5nIHRoZSBCSU9EQVNERk1UIGlvY3RsLiBUaGVyZWZvcmUgdGhlIGNvcnJlY3Qgc3RhdGUgZm9yIHRoZQogCSAqIGRldmljZSBpcyBEQVNEX1NUQVRFX0JBU0lDIHRoYXQgYWxsb3dzIHRvIGRvIGJhc2ljIGkvby4KIAkgKi8KLQlkYXNkX3NldF90YXJnZXRfc3RhdGUoYmxvY2stPmJhc2UsIERBU0RfU1RBVEVfQkFTSUMpOworCWRhc2Rfc2V0X3RhcmdldF9zdGF0ZShiYXNlLCBEQVNEX1NUQVRFX0JBU0lDKTsKIAkvKgogCSAqIFNldCBpX3NpemUgdG8gemVybywgc2luY2UgcmVhZCwgd3JpdGUsIGV0Yy4gY2hlY2sgYWdhaW5zdCB0aGlzCiAJICogdmFsdWUuCkBAIC04Myw2ICs5Miw3IEBACiAJbXV0ZXhfbG9jaygmYmRldi0+YmRfbXV0ZXgpOwogCWlfc2l6ZV93cml0ZShiZGV2LT5iZF9pbm9kZSwgMCk7CiAJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9tdXRleCk7CisJZGFzZF9wdXRfZGV2aWNlKGJhc2UpOwogCXJldHVybiAwOwogfQogCkBAIC0xOTEsMjYgKzIwMSwzNiBAQAogc3RhdGljIGludAogZGFzZF9pb2N0bF9mb3JtYXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdm9pZCBfX3VzZXIgKmFyZ3ApCiB7Ci0Jc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZTsKIAlzdHJ1Y3QgZm9ybWF0X2RhdGFfdCBmZGF0YTsKKwlpbnQgcmM7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwogCWlmICghYXJncCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoYmxvY2stPmJhc2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX1JFQURPTkxZIHx8Ci0JICAgIHRlc3RfYml0KERBU0RfRkxBR19ERVZJQ0VfUk8sICZibG9jay0+YmFzZS0+ZmxhZ3MpKQorCWJhc2UgPSBkYXNkX2RldmljZV9mcm9tX2dlbmRpc2soYmRldi0+YmRfZGlzayk7CisJaWYgKCFiYXNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoYmFzZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfUkVBRE9OTFkgfHwKKwkgICAgdGVzdF9iaXQoREFTRF9GTEFHX0RFVklDRV9STywgJmJhc2UtPmZsYWdzKSkgeworCQlkYXNkX3B1dF9kZXZpY2UoYmFzZSk7CiAJCXJldHVybiAtRVJPRlM7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKCZmZGF0YSwgYXJncCwgc2l6ZW9mKHN0cnVjdCBmb3JtYXRfZGF0YV90KSkpCisJfQorCWlmIChjb3B5X2Zyb21fdXNlcigmZmRhdGEsIGFyZ3AsIHNpemVvZihzdHJ1Y3QgZm9ybWF0X2RhdGFfdCkpKSB7CisJCWRhc2RfcHV0X2RldmljZShiYXNlKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CisJfQogCWlmIChiZGV2ICE9IGJkZXYtPmJkX2NvbnRhaW5zKSB7CiAJCXByX3dhcm5pbmcoIiVzOiBUaGUgc3BlY2lmaWVkIERBU0QgaXMgYSBwYXJ0aXRpb24gYW5kIGNhbm5vdCAiCiAJCQkgICAiYmUgZm9ybWF0dGVkXG4iLAotCQkJICAgZGV2X25hbWUoJmJsb2NrLT5iYXNlLT5jZGV2LT5kZXYpKTsKKwkJCSAgIGRldl9uYW1lKCZiYXNlLT5jZGV2LT5kZXYpKTsKKwkJZGFzZF9wdXRfZGV2aWNlKGJhc2UpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcmV0dXJuIGRhc2RfZm9ybWF0KGJsb2NrLCAmZmRhdGEpOworCXJjID0gZGFzZF9mb3JtYXQoYmFzZS0+YmxvY2ssICZmZGF0YSk7CisJZGFzZF9wdXRfZGV2aWNlKGJhc2UpOworCXJldHVybiByYzsKIH0KIAogI2lmZGVmIENPTkZJR19EQVNEX1BST0ZJTEUKQEAgLTM0MCw4ICszNjAsOCBAQAogc3RhdGljIGludAogZGFzZF9pb2N0bF9zZXRfcm8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdm9pZCBfX3VzZXIgKmFyZ3ApCiB7Ci0Jc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrID0gIGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQlpbnQgaW50dmFsOworCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZTsKKwlpbnQgaW50dmFsLCByYzsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FQUNDRVM7CkBAIC0zNTAsMTAgKzM3MCwxNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoZ2V0X3VzZXIoaW50dmFsLCAoaW50IF9fdXNlciAqKWFyZ3ApKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoIWludHZhbCAmJiB0ZXN0X2JpdChEQVNEX0ZMQUdfREVWSUNFX1JPLCAmYmxvY2stPmJhc2UtPmZsYWdzKSkKKwliYXNlID0gZGFzZF9kZXZpY2VfZnJvbV9nZW5kaXNrKGJkZXYtPmJkX2Rpc2spOworCWlmICghYmFzZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFpbnR2YWwgJiYgdGVzdF9iaXQoREFTRF9GTEFHX0RFVklDRV9STywgJmJhc2UtPmZsYWdzKSkgeworCQlkYXNkX3B1dF9kZXZpY2UoYmFzZSk7CiAJCXJldHVybiAtRVJPRlM7CisJfQogCXNldF9kaXNrX3JvKGJkZXYtPmJkX2Rpc2ssIGludHZhbCk7Ci0JcmV0dXJuIGRhc2Rfc2V0X2ZlYXR1cmUoYmxvY2stPmJhc2UtPmNkZXYsIERBU0RfRkVBVFVSRV9SRUFET05MWSwgaW50dmFsKTsKKwlyYyA9IGRhc2Rfc2V0X2ZlYXR1cmUoYmFzZS0+Y2RldiwgREFTRF9GRUFUVVJFX1JFQURPTkxZLCBpbnR2YWwpOworCWRhc2RfcHV0X2RldmljZShiYXNlKTsKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgZGFzZF9pb2N0bF9yZWFkYWxsX2NtYihzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2ssIHVuc2lnbmVkIGludCBjbWQsCkBAIC0zNzIsNTkgKzM5OSw3OCBAQAogaW50IGRhc2RfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAogCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2sgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrOworCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZTsKIAl2b2lkIF9fdXNlciAqYXJncDsKKwlpbnQgcmM7CiAKIAlpZiAoaXNfY29tcGF0X3Rhc2soKSkKIAkJYXJncCA9IGNvbXBhdF9wdHIoYXJnKTsKIAllbHNlCiAJCWFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAKLQlpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwotCiAJaWYgKChfSU9DX0RJUihjbWQpICE9IF9JT0NfTk9ORSkgJiYgIWFyZykgewogCQlQUklOVF9ERUJVRygiZW1wdHkgZGF0YSBwdHIiKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJYmFzZSA9IGRhc2RfZGV2aWNlX2Zyb21fZ2VuZGlzayhiZGV2LT5iZF9kaXNrKTsKKwlpZiAoIWJhc2UpCisJCXJldHVybiAtRU5PREVWOworCWJsb2NrID0gYmFzZS0+YmxvY2s7CisJcmMgPSAwOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBCSU9EQVNERElTQUJMRToKLQkJcmV0dXJuIGRhc2RfaW9jdGxfZGlzYWJsZShiZGV2KTsKKwkJcmMgPSBkYXNkX2lvY3RsX2Rpc2FibGUoYmRldik7CisJCWJyZWFrOwogCWNhc2UgQklPREFTREVOQUJMRToKLQkJcmV0dXJuIGRhc2RfaW9jdGxfZW5hYmxlKGJkZXYpOworCQlyYyA9IGRhc2RfaW9jdGxfZW5hYmxlKGJkZXYpOworCQlicmVhazsKIAljYXNlIEJJT0RBU0RRVUlFU0NFOgotCQlyZXR1cm4gZGFzZF9pb2N0bF9xdWllc2NlKGJsb2NrKTsKKwkJcmMgPSBkYXNkX2lvY3RsX3F1aWVzY2UoYmxvY2spOworCQlicmVhazsKIAljYXNlIEJJT0RBU0RSRVNVTUU6Ci0JCXJldHVybiBkYXNkX2lvY3RsX3Jlc3VtZShibG9jayk7CisJCXJjID0gZGFzZF9pb2N0bF9yZXN1bWUoYmxvY2spOworCQlicmVhazsKIAljYXNlIEJJT0RBU0RGTVQ6Ci0JCXJldHVybiBkYXNkX2lvY3RsX2Zvcm1hdChiZGV2LCBhcmdwKTsKKwkJcmMgPSBkYXNkX2lvY3RsX2Zvcm1hdChiZGV2LCBhcmdwKTsKKwkJYnJlYWs7CiAJY2FzZSBCSU9EQVNESU5GTzoKLQkJcmV0dXJuIGRhc2RfaW9jdGxfaW5mb3JtYXRpb24oYmxvY2ssIGNtZCwgYXJncCk7CisJCXJjID0gZGFzZF9pb2N0bF9pbmZvcm1hdGlvbihibG9jaywgY21kLCBhcmdwKTsKKwkJYnJlYWs7CiAJY2FzZSBCSU9EQVNESU5GTzI6Ci0JCXJldHVybiBkYXNkX2lvY3RsX2luZm9ybWF0aW9uKGJsb2NrLCBjbWQsIGFyZ3ApOworCQlyYyA9IGRhc2RfaW9jdGxfaW5mb3JtYXRpb24oYmxvY2ssIGNtZCwgYXJncCk7CisJCWJyZWFrOwogCWNhc2UgQklPREFTRFBSUkQ6Ci0JCXJldHVybiBkYXNkX2lvY3RsX3JlYWRfcHJvZmlsZShibG9jaywgYXJncCk7CisJCXJjID0gZGFzZF9pb2N0bF9yZWFkX3Byb2ZpbGUoYmxvY2ssIGFyZ3ApOworCQlicmVhazsKIAljYXNlIEJJT0RBU0RQUlJTVDoKLQkJcmV0dXJuIGRhc2RfaW9jdGxfcmVzZXRfcHJvZmlsZShibG9jayk7CisJCXJjID0gZGFzZF9pb2N0bF9yZXNldF9wcm9maWxlKGJsb2NrKTsKKwkJYnJlYWs7CiAJY2FzZSBCTEtST1NFVDoKLQkJcmV0dXJuIGRhc2RfaW9jdGxfc2V0X3JvKGJkZXYsIGFyZ3ApOworCQlyYyA9IGRhc2RfaW9jdGxfc2V0X3JvKGJkZXYsIGFyZ3ApOworCQlicmVhazsKIAljYXNlIERBU0RBUElWRVI6Ci0JCXJldHVybiBkYXNkX2lvY3RsX2FwaV92ZXJzaW9uKGFyZ3ApOworCQlyYyA9IGRhc2RfaW9jdGxfYXBpX3ZlcnNpb24oYXJncCk7CisJCWJyZWFrOwogCWNhc2UgQklPREFTRENNRkVOQUJMRToKLQkJcmV0dXJuIGVuYWJsZV9jbWYoYmxvY2stPmJhc2UtPmNkZXYpOworCQlyYyA9IGVuYWJsZV9jbWYoYmFzZS0+Y2Rldik7CisJCWJyZWFrOwogCWNhc2UgQklPREFTRENNRkRJU0FCTEU6Ci0JCXJldHVybiBkaXNhYmxlX2NtZihibG9jay0+YmFzZS0+Y2Rldik7CisJCXJjID0gZGlzYWJsZV9jbWYoYmFzZS0+Y2Rldik7CisJCWJyZWFrOwogCWNhc2UgQklPREFTRFJFQURBTExDTUI6Ci0JCXJldHVybiBkYXNkX2lvY3RsX3JlYWRhbGxfY21iKGJsb2NrLCBjbWQsIGFyZ3ApOworCQlyYyA9IGRhc2RfaW9jdGxfcmVhZGFsbF9jbWIoYmxvY2ssIGNtZCwgYXJncCk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIGlmIHRoZSBkaXNjaXBsaW5lIGhhcyBhbiBpb2N0bCBtZXRob2QgdHJ5IGl0LiAqLwotCQlpZiAoYmxvY2stPmJhc2UtPmRpc2NpcGxpbmUtPmlvY3RsKSB7Ci0JCQlpbnQgcnZhbCA9IGJsb2NrLT5iYXNlLT5kaXNjaXBsaW5lLT5pb2N0bChibG9jaywgY21kLCBhcmdwKTsKLQkJCWlmIChydmFsICE9IC1FTk9JT0NUTENNRCkKLQkJCQlyZXR1cm4gcnZhbDsKLQkJfQotCi0JCXJldHVybiAtRUlOVkFMOworCQlpZiAoYmFzZS0+ZGlzY2lwbGluZS0+aW9jdGwpIHsKKwkJCXJjID0gYmFzZS0+ZGlzY2lwbGluZS0+aW9jdGwoYmxvY2ssIGNtZCwgYXJncCk7CisJCQlpZiAocmMgPT0gLUVOT0lPQ1RMQ01EKQorCQkJCXJjID0gLUVJTlZBTDsKKwkJfSBlbHNlCisJCQlyYyA9IC1FSU5WQUw7CiAJfQorCWRhc2RfcHV0X2RldmljZShiYXNlKTsKKwlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMKaW5kZXggNGMwMjM3Ni4uZTIxYTVjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYwpAQCAtNjA0LDcgKzYwNCw3IEBACiAJLyoKIAkgKiBUbyBkZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlIDMyNzAgZGV2aWNlIHdlIG5lZWQgdG8gZG86CiAJICogMSkgc2VuZCBhICdyZWFkIHBhcnRpdGlvbicgZGF0YSBzdHJlYW0gdG8gdGhlIGRldmljZQotCSAqIDIpIHdhaXQgZm9yIHRoZSBhdHRuIGludGVycnVwdCB0aGF0IHByZWNlZWRzIHRoZSBxdWVyeSByZXBseQorCSAqIDIpIHdhaXQgZm9yIHRoZSBhdHRuIGludGVycnVwdCB0aGF0IHByZWNlZGVzIHRoZSBxdWVyeSByZXBseQogCSAqIDMpIGRvIGEgcmVhZCBtb2RpZmllZCB0byBnZXQgdGhlIHF1ZXJ5IHJlcGx5CiAJICogVG8gbWFrZSB0aGluZ3Mgd29yc2Ugd2UgaGF2ZSB0byBjb3BlIHdpdGggaW50ZXJ2ZW50aW9uCiAJICogcmVxdWlyZWQgKDMyNzAgZGV2aWNlIHN3aXRjaGVkIHRvICdzdGFuZC1ieScpIGFuZCBjb21tYW5kCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2NtZC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9jbWQuYwppbmRleCA0YjYwZWRlLi5iZTU1ZmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2NtZC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfY21kLmMKQEAgLTUxOCw2ICs1MTgsOCBAQAogCQlyZXR1cm47CiAJbmV3X2luY3ItPnJuID0gcm47CiAJbmV3X2luY3ItPnN0YW5kYnkgPSBzdGFuZGJ5OworCWlmICghc3RhbmRieSkKKwkJbmV3X2luY3ItPnVzZWNvdW50ID0gMTsKIAlsYXN0X3JuID0gMDsKIAlwcmV2ID0gJnNjbHBfbWVtX2xpc3Q7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpbmNyLCAmc2NscF9tZW1fbGlzdCwgbGlzdCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCmluZGV4IDgzY2VhOWEuLjFiMzkyNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKQEAgLTIzNiw3ICsyMzYsNiBAQAogCWRpc2stPm1ham9yID0gdGFwZWJsb2NrX21ham9yOwogCWRpc2stPmZpcnN0X21pbm9yID0gZGV2aWNlLT5maXJzdF9taW5vcjsKIAlkaXNrLT5mb3BzID0gJnRhcGVibG9ja19mb3BzOwotCWRpc2stPmV2ZW50cyA9IERJU0tfRVZFTlRfTUVESUFfQ0hBTkdFOwogCWRpc2stPnByaXZhdGVfZGF0YSA9IHRhcGVfZ2V0X2RldmljZShkZXZpY2UpOwogCWRpc2stPnF1ZXVlID0gYmxrZGF0LT5yZXF1ZXN0X3F1ZXVlOwogCXNldF9jYXBhY2l0eShkaXNrLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2hhci5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jaGFyLmMKaW5kZXggZTA5MGEzMC4uODdjZDBhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jaGFyLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jaGFyLmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCS8qCiAJICogSWYgdGhlIHRhcGUgaXNuJ3QgdGVybWluYXRlZCB5ZXQsIGRvIGl0IG5vdy4gQW5kIHNpbmNlIHdlIHRoZW4KIAkgKiBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgdGFwZSB0aGVyZSB3b3VsZG4ndCBiZSBhbnl0aGluZyB0byByZWFkCi0JICogYW55d2F5cy4gU28gd2UgcmV0dXJuIGltbWVkaWF0bHkuCisJICogYW55d2F5cy4gU28gd2UgcmV0dXJuIGltbWVkaWF0ZWx5LgogCSAqLwogCWlmKGRldmljZS0+cmVxdWlyZWRfdGFwZW1hcmtzKSB7CiAJCXJldHVybiB0YXBlX3N0ZF90ZXJtaW5hdGVfd3JpdGUoZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3R0eTMyNzAuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3R0eTMyNzAuYwppbmRleCBkMzM1NTRkZi4uMmRiMTQ4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdHR5MzI3MC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3R0eTMyNzAuYwpAQCAtMzI4LDcgKzMyOCw3IEBACiAKIAl0cCA9IChzdHJ1Y3QgdHR5MzI3MCAqKSBycS0+dmlldzsKIAlpZiAocnEtPnJjICE9IDApIHsKLQkJLyogV3JpdGUgd2Fzbid0IHN1Y2Nlc3NmdWxsLiBSZWZyZXNoIGFsbC4gKi8KKwkJLyogV3JpdGUgd2Fzbid0IHN1Y2Nlc3NmdWwuIFJlZnJlc2ggYWxsLiAqLwogCQl0cC0+dXBkYXRlX2ZsYWdzID0gVFRZX1VQREFURV9BTEw7CiAJCXR0eTMyNzBfc2V0X3RpbWVyKHRwLCAxKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwppbmRleCBkZjE0YzUxLi44ZTA0YzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKQEAgLTU0MSwxNSArNTQxLDI0IEBACiAJaW50IGZvcmNlLCByZXQ7CiAJdW5zaWduZWQgbG9uZyBpOwogCi0JaWYgKCFkZXZfZnNtX2ZpbmFsX3N0YXRlKGNkZXYpICYmCi0JICAgIGNkZXYtPnByaXZhdGUtPnN0YXRlICE9IERFVl9TVEFURV9ESVNDT05ORUNURUQpCi0JCXJldHVybiAtRUFHQUlOOworCS8qIFByZXZlbnQgY29uZmxpY3QgYmV0d2VlbiBtdWx0aXBsZSBvbi0vb2ZmbGluZSBwcm9jZXNzaW5nIHJlcXVlc3RzLiAqLwogCWlmIChhdG9taWNfY21weGNoZygmY2Rldi0+cHJpdmF0ZS0+b25vZmYsIDAsIDEpICE9IDApCiAJCXJldHVybiAtRUFHQUlOOworCS8qIFByZXZlbnQgY29uZmxpY3QgYmV0d2VlbiBpbnRlcm5hbCBJL09zIGFuZCBvbi0vb2ZmbGluZSBwcm9jZXNzaW5nLiAqLworCWlmICghZGV2X2ZzbV9maW5hbF9zdGF0ZShjZGV2KSAmJgorCSAgICBjZGV2LT5wcml2YXRlLT5zdGF0ZSAhPSBERVZfU1RBVEVfRElTQ09OTkVDVEVEKSB7CisJCXJldCA9IC1FQUdBSU47CisJCWdvdG8gb3V0X29ub2ZmOworCX0KKwkvKiBQcmV2ZW50IGNvbmZsaWN0IGJldHdlZW4gcGVuZGluZyB3b3JrIGFuZCBvbi0vb2ZmbGluZSBwcm9jZXNzaW5nLiovCisJaWYgKHdvcmtfcGVuZGluZygmY2Rldi0+cHJpdmF0ZS0+dG9kb193b3JrKSkgeworCQlyZXQgPSAtRUFHQUlOOworCQlnb3RvIG91dF9vbm9mZjsKKwl9CiAKIAlpZiAoY2Rldi0+ZHJ2ICYmICF0cnlfbW9kdWxlX2dldChjZGV2LT5kcnYtPmRyaXZlci5vd25lcikpIHsKLQkJYXRvbWljX3NldCgmY2Rldi0+cHJpdmF0ZS0+b25vZmYsIDApOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXRfb25vZmY7CiAJfQogCWlmICghc3RybmNtcChidWYsICJmb3JjZVxuIiwgY291bnQpKSB7CiAJCWZvcmNlID0gMTsKQEAgLTU3NCw2ICs1ODMsNyBAQAogb3V0OgogCWlmIChjZGV2LT5kcnYpCiAJCW1vZHVsZV9wdXQoY2Rldi0+ZHJ2LT5kcml2ZXIub3duZXIpOworb3V0X29ub2ZmOgogCWF0b21pY19zZXQoJmNkZXYtPnByaXZhdGUtPm9ub2ZmLCAwKTsKIAlyZXR1cm4gKHJldCA8IDApID8gcmV0IDogY291bnQ7CiB9CkBAIC0xMzExLDEwICsxMzIxLDEyIEBACiAKIAlzcGluX2xvY2tfaXJxKGNkZXYtPmNjd2xvY2spOwogCWlmIChpc19ibGFja2xpc3RlZChpZC0+c3NpZCwgaWQtPmRldm5vKSAmJgotCSAgICAoY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPT0gREVWX1NUQVRFX09GRkxJTkUpKSB7CisJICAgIChjZGV2LT5wcml2YXRlLT5zdGF0ZSA9PSBERVZfU1RBVEVfT0ZGTElORSkgJiYKKwkgICAgKGF0b21pY19jbXB4Y2hnKCZjZGV2LT5wcml2YXRlLT5vbm9mZiwgMCwgMSkgPT0gMCkpIHsKIAkJQ0lPX01TR19FVkVOVCgzLCAiY2N3OiBwdXJnaW5nIDAuJXguJTA0eFxuIiwgaWQtPnNzaWQsCiAJCQkgICAgICBpZC0+ZGV2bm8pOwogCQljY3dfZGV2aWNlX3NjaGVkX3RvZG8oY2RldiwgQ0RFVl9UT0RPX1VOUkVHKTsKKwkJYXRvbWljX3NldCgmY2Rldi0+cHJpdmF0ZS0+b25vZmYsIDApOwogCX0KIAlzcGluX3VubG9ja19pcnEoY2Rldi0+Y2N3bG9jayk7CiAJLyogQWJvcnQgbG9vcCBpbiBjYXNlIG9mIHBlbmRpbmcgc2lnbmFsLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYwppbmRleCBhODQ1Njk1Li42MDg0MTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYwpAQCAtMzE4LDcgKzMxOCw3IEBACiAKIC8qKgogICAqIGNjd19kZXZpY2Vfbm90aWZ5KCkgLSBpbmZvcm0gdGhlIGRldmljZSdzIGRyaXZlciBhYm91dCBhbiBldmVudAotICAqIEBjZGV2OiBkZXZpY2UgZm9yIHdoaWNoIGFuIGV2ZW50IG9jY3VyZWQKKyAgKiBAY2RldjogZGV2aWNlIGZvciB3aGljaCBhbiBldmVudCBvY2N1cnJlZAogICAqIEBldmVudDogZXZlbnQgdGhhdCBvY2N1cnJlZAogICAqCiAgICogUmV0dXJuczoKQEAgLTY4OCw3ICs2ODgsNyBAQAogCSAgICAoc2Nzd19zdGN0bCgmY2Rldi0+cHJpdmF0ZS0+aXJiLnNjc3cpICYgU0NTV19TVENUTF9TVEFUVVNfUEVORCkpIHsKIAkJLyoKIAkJICogTm8gZmluYWwgc3RhdHVzIHlldCBvciBmaW5hbCBzdGF0dXMgbm90IHlldCBkZWxpdmVyZWQKLQkJICogdG8gdGhlIGRldmljZSBkcml2ZXIuIENhbid0IGRvIHBhdGggdmVyZmljYXRpb24gbm93LAorCQkgKiB0byB0aGUgZGV2aWNlIGRyaXZlci4gQ2FuJ3QgZG8gcGF0aCB2ZXJpZmljYXRpb24gbm93LAogCQkgKiBkZWxheSB1bnRpbCBmaW5hbCBzdGF0dXMgd2FzIGRlbGl2ZXJlZC4KIAkJICovCiAJCWNkZXYtPnByaXZhdGUtPmZsYWdzLmRvdmVyaWZ5ID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCmluZGV4IDQ3OWM2NjUuLmU4ZjI2N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwpAQCAtNDA3LDggKzQwNywxMSBAQAogCXEtPnFfc3RhdHMubnJfc2JhbHNbcG9zXSsrOwogfQogCi1zdGF0aWMgdm9pZCBhbm5vdW5jZV9idWZmZXJfZXJyb3Ioc3RydWN0IHFkaW9fcSAqcSwgaW50IGNvdW50KQorc3RhdGljIHZvaWQgcHJvY2Vzc19idWZmZXJfZXJyb3Ioc3RydWN0IHFkaW9fcSAqcSwgaW50IGNvdW50KQogeworCXVuc2lnbmVkIGNoYXIgc3RhdGUgPSAocS0+aXNfaW5wdXRfcSkgPyBTTFNCX1BfSU5QVVRfTk9UX0lOSVQgOgorCQkJCQlTTFNCX1BfT1VUUFVUX05PVF9JTklUOworCiAJcS0+cWRpb19lcnJvciB8PSBRRElPX0VSUk9SX1NMU0JfU1RBVEU7CiAKIAkvKiBzcGVjaWFsIGhhbmRsaW5nIGZvciBubyB0YXJnZXQgYnVmZmVyIGVtcHR5ICovCkBAIC00MjYsNiArNDI5LDEyIEBACiAJREJGX0VSUk9SKCJGMTQ6JTJ4IEYxNTolMngiLAogCQkgIHEtPnNiYWxbcS0+Zmlyc3RfdG9fY2hlY2tdLT5lbGVtZW50WzE0XS5mbGFncyAmIDB4ZmYsCiAJCSAgcS0+c2JhbFtxLT5maXJzdF90b19jaGVja10tPmVsZW1lbnRbMTVdLmZsYWdzICYgMHhmZik7CisKKwkvKgorCSAqIEludGVycnVwdHMgbWF5IGJlIGF2b2lkZWQgYXMgbG9uZyBhcyB0aGUgZXJyb3IgaXMgcHJlc2VudAorCSAqIHNvIGNoYW5nZSB0aGUgYnVmZmVyIHN0YXRlIGltbWVkaWF0ZWx5IHRvIGF2b2lkIHN0YXJ2YXRpb24uCisJICovCisJc2V0X2J1Zl9zdGF0ZXMocSwgcS0+Zmlyc3RfdG9fY2hlY2ssIHN0YXRlLCBjb3VudCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbmJvdW5kX3ByaW1lZChzdHJ1Y3QgcWRpb19xICpxLCBpbnQgY291bnQpCkBAIC01MDYsOCArNTE1LDcgQEAKIAkJCWFjY291bnRfc2JhbHMocSwgY291bnQpOwogCQlicmVhazsKIAljYXNlIFNMU0JfUF9JTlBVVF9FUlJPUjoKLQkJYW5ub3VuY2VfYnVmZmVyX2Vycm9yKHEsIGNvdW50KTsKLQkJLyogcHJvY2VzcyB0aGUgYnVmZmVyLCB0aGUgdXBwZXIgbGF5ZXIgd2lsbCB0YWtlIGNhcmUgb2YgaXQgKi8KKwkJcHJvY2Vzc19idWZmZXJfZXJyb3IocSwgY291bnQpOwogCQlxLT5maXJzdF90b19jaGVjayA9IGFkZF9idWYocS0+Zmlyc3RfdG9fY2hlY2ssIGNvdW50KTsKIAkJYXRvbWljX3N1Yihjb3VudCwgJnEtPm5yX2J1Zl91c2VkKTsKIAkJaWYgKHEtPmlycV9wdHItPnBlcmZfc3RhdF9lbmFibGVkKQpAQCAtNjc3LDggKzY4NSw3IEBACiAJCQlhY2NvdW50X3NiYWxzKHEsIGNvdW50KTsKIAkJYnJlYWs7CiAJY2FzZSBTTFNCX1BfT1VUUFVUX0VSUk9SOgotCQlhbm5vdW5jZV9idWZmZXJfZXJyb3IocSwgY291bnQpOwotCQkvKiBwcm9jZXNzIHRoZSBidWZmZXIsIHRoZSB1cHBlciBsYXllciB3aWxsIHRha2UgY2FyZSBvZiBpdCAqLworCQlwcm9jZXNzX2J1ZmZlcl9lcnJvcihxLCBjb3VudCk7CiAJCXEtPmZpcnN0X3RvX2NoZWNrID0gYWRkX2J1ZihxLT5maXJzdF90b19jaGVjaywgY291bnQpOwogCQlhdG9taWNfc3ViKGNvdW50LCAmcS0+bnJfYnVmX3VzZWQpOwogCQlpZiAocS0+aXJxX3B0ci0+cGVyZl9zdGF0X2VuYWJsZWQpCkBAIC0xNjQ5LDI2ICsxNjU2LDI2IEBACiB7CiAJaW50IHJjOwogCi0JcmMgPSBxZGlvX3NldHVwX2luaXQoKTsKKwlyYyA9IHFkaW9fZGVidWdfaW5pdCgpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOworCXJjID0gcWRpb19zZXR1cF9pbml0KCk7CisJaWYgKHJjKQorCQlnb3RvIG91dF9kZWJ1ZzsKIAlyYyA9IHRpcWRpb19hbGxvY2F0ZV9tZW1vcnkoKTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0X2NhY2hlOwotCXJjID0gcWRpb19kZWJ1Z19pbml0KCk7Ci0JaWYgKHJjKQotCQlnb3RvIG91dF90aTsKIAlyYyA9IHRpcWRpb19yZWdpc3Rlcl90aGluaW50cygpOwogCWlmIChyYykKLQkJZ290byBvdXRfZGVidWc7CisJCWdvdG8gb3V0X3RpOwogCXJldHVybiAwOwogCi1vdXRfZGVidWc6Ci0JcWRpb19kZWJ1Z19leGl0KCk7CiBvdXRfdGk6CiAJdGlxZGlvX2ZyZWVfbWVtb3J5KCk7CiBvdXRfY2FjaGU6CiAJcWRpb19zZXR1cF9leGl0KCk7CitvdXRfZGVidWc6CisJcWRpb19kZWJ1Z19leGl0KCk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xNjc2LDggKzE2ODMsOCBAQAogewogCXRpcWRpb191bnJlZ2lzdGVyX3RoaW5pbnRzKCk7CiAJdGlxZGlvX2ZyZWVfbWVtb3J5KCk7Ci0JcWRpb19kZWJ1Z19leGl0KCk7CiAJcWRpb19zZXR1cF9leGl0KCk7CisJcWRpb19kZWJ1Z19leGl0KCk7CiB9CiAKIG1vZHVsZV9pbml0KGluaXRfUURJTyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuaCBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5oCmluZGV4IDg4ZWJkMTEuLjk2ODhmMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5oCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5oCkBAIC03Niw3ICs3Niw3IEBACiAKIC8qKgogICogTGFyZ2UgcmFuZG9tIG51bWJlcnMgYXJlIHB1bGxlZCBpbiA0MDk2IGJ5dGUgY2h1bmtzIGZyb20gdGhlIGNyeXB0byBjYXJkcwotICogYW5kIHN0b3JlZCBpbiBhIHBhZ2UuIEJlIGNhcmVmdWxsIHdoZW4gaW5jcmVhc2luZyB0aGlzIGJ1ZmZlciBkdWUgdG8gc2l6ZQorICogYW5kIHN0b3JlZCBpbiBhIHBhZ2UuIEJlIGNhcmVmdWwgd2hlbiBpbmNyZWFzaW5nIHRoaXMgYnVmZmVyIGR1ZSB0byBzaXplCiAgKiBsaW1pdGF0aW9ucyBmb3IgQVAgcmVxdWVzdHMuCiAgKi8KICNkZWZpbmUgWkNSWVBUX1JOR19CVUZGRVJfU0laRQk0MDk2CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAva3ZtL2t2bV92aXJ0aW8uYyBiL2RyaXZlcnMvczM5MC9rdm0va3ZtX3ZpcnRpby5jCmluZGV4IDQxNDQyN2QuLjYwNzk5OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9rdm0va3ZtX3ZpcnRpby5jCisrKyBiL2RyaXZlcnMvczM5MC9rdm0va3ZtX3ZpcnRpby5jCkBAIC0zODEsMTAgKzM4MSwxMCBAQAogCXUxNiBzdWJjb2RlOwogCXUzMiBwYXJhbTsKIAotCWtzdGF0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpLmlycXNbRVhUSU5UX1ZSVF0rKzsKIAlzdWJjb2RlID0gZXh0X2ludF9jb2RlID4+IDE2OwogCWlmICgoc3ViY29kZSAmIDB4ZmYwMCkgIT0gVklSVElPX1NVQkNPREVfNjQpCiAJCXJldHVybjsKKwlrc3RhdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKS5pcnFzW0VYVElOVF9WUlRdKys7CiAKIAkvKiBUaGUgTFNCIG1pZ2h0IGJlIG92ZXJsb2FkZWQsIHdlIGhhdmUgdG8gbWFzayBpdCAqLwogCXZxID0gKHN0cnVjdCB2aXJ0cXVldWUgKikocGFyYW02NCAmIH4xVUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMgYi9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYwppbmRleCA5ZmViNjJmLi5kYThhYTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYwpAQCAtNzc5LDcgKzc3OSw3IEBACiAJY2FzZSBDTEFXX1NUQVJUX1dSSVRFOgogCQlpZiAocF9jaC0+aXJiLT5zY3N3LmNtZC5kc3RhdCAmIERFVl9TVEFUX1VOSVRfQ0hFQ0spIHsKIAkJCWRldl9pbmZvKCZjZGV2LT5kZXYsCi0JCQkJIiVzOiBVbml0IENoZWNrIE9jY3VyZWQgaW4gIgorCQkJCSIlczogVW5pdCBDaGVjayBPY2N1cnJlZCBpbiAiCiAJCQkJIndyaXRlIGNoYW5uZWxcbiIsIGRldi0+bmFtZSk7CiAJCQljbGVhcl9iaXQoMCwgKHZvaWQgKikmcF9jaC0+SU9fYWN0aXZlKTsKIAkJCWlmIChwX2NoLT5pcmItPmVjd1swXSAmIDB4ODApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9mc21zLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fZnNtcy5jCmluZGV4IDhjOTIxZmMuLjJkNjAyMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9mc21zLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX2ZzbXMuYwpAQCAtMTg0LDcgKzE4NCw3IEBACiBzdGF0aWMgdm9pZCBjdGNtcGNfY2h4X3NlbmRfc3dlZXAoZnNtX2luc3RhbmNlICpmc20sIGludCBldmVudCwgdm9pZCAqYXJnKTsKIAogLyoqCi0gKiBDaGVjayByZXR1cm4gY29kZSBvZiBhIHByZWNlZWRpbmcgY2N3X2RldmljZSBjYWxsLCBoYWx0X0lPIGV0Yy4uLgorICogQ2hlY2sgcmV0dXJuIGNvZGUgb2YgYSBwcmVjZWRpbmcgY2N3X2RldmljZSBjYWxsLCBoYWx0X0lPIGV0Yy4uLgogICoKICAqIGNoCToJVGhlIGNoYW5uZWwsIHRoZSBlcnJvciBiZWxvbmdzIHRvLgogICogUmV0dXJucyB0aGUgZXJyb3IgY29kZSAoIT0gMCkgdG8gaW5zcGVjdC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCmluZGV4IDdmYmM0YWQuLjQ5ZDFjZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9sY3MuYwpAQCAtMTEyMyw3ICsxMTIzLDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXBtLCB0bXAsICZjYXJkLT5pcG1fbGlzdCwgbGlzdCl7CiAJCXN3aXRjaCAoaXBtLT5pcG1fc3RhdGUpIHsKIAkJY2FzZSBMQ1NfSVBNX1NUQVRFX1NFVF9SRVFVSVJFRDoKLQkJCS8qIGRlbCBmcm9tIGlwbV9saXN0IHNvIG5vb25lIGVsc2UgY2FuIHRhbXBlciB3aXRoCisJCQkvKiBkZWwgZnJvbSBpcG1fbGlzdCBzbyBubyBvbmUgZWxzZSBjYW4gdGFtcGVyIHdpdGgKIAkJCSAqIHRoaXMgZW50cnkgKi8KIAkJCWxpc3RfZGVsX2luaXQoJmlwbS0+bGlzdCk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5pcG1fbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCmluZGV4IDEwYTNhM2IuLjg1Y2M1MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKQEAgLTExMDcsNyArMTEwNyw3IEBACiAJSU5JVF9MSVNUX0hFQUQoY2FyZC0+aXBfdGJkX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5jbWRfd2FpdGVyX2xpc3QpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhcmQtPndhaXRfcSk7Ci0JLyogaW50aWFsIG9wdGlvbnMgKi8KKwkvKiBpbml0aWFsIG9wdGlvbnMgKi8KIAlxZXRoX3NldF9pbnRpYWxfb3B0aW9ucyhjYXJkKTsKIAkvKiBJUCBhZGRyZXNzIHRha2VvdmVyICovCiAJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmlwYXRvLmVudHJpZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKaW5kZXggYTBlMDVlZi4uODUxMmI1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCkBAIC0xMDgzLDcgKzEwODMsNyBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgRlNGX1NCQUxfTUlTTUFUQ0g6Ci0JCS8qIHNob3VsZCBuZXZlciBvY2N1cmUsIGF2b2lkZWQgaW4gemZjcF9mc2Zfc2VuZF9lbHMgKi8KKwkJLyogc2hvdWxkIG5ldmVyIG9jY3VyLCBhdm9pZGVkIGluIHpmY3BfZnNmX3NlbmRfZWxzICovCiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWRlZmF1bHQ6CiAJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKaW5kZXggOGRhNWVkNi4uOThlOTdkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKQEAgLTM5MSw3ICszOTEsNyBAQAogCWlmIChkb19RRElPKGNkZXYsIFFESU9fRkxBR19TWU5DX0lOUFVULCAwLCAwLCBRRElPX01BWF9CVUZGRVJTX1BFUl9RKSkKIAkJZ290byBmYWlsZWRfcWRpbzsKIAotCS8qIHNldCBpbmRleCBvZiBmaXJzdCBhdmFsYWJsZSBTQkFMUyAvIG51bWJlciBvZiBhdmFpbGFibGUgU0JBTFMgKi8KKwkvKiBzZXQgaW5kZXggb2YgZmlyc3QgYXZhaWxhYmxlIFNCQUxTIC8gbnVtYmVyIG9mIGF2YWlsYWJsZSBTQkFMUyAqLwogCXFkaW8tPnJlcV9xX2lkeCA9IDA7CiAJYXRvbWljX3NldCgmcWRpby0+cmVxX3FfZnJlZSwgUURJT19NQVhfQlVGRkVSU19QRVJfUSk7CiAJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfUURJT1VQLCAmcWRpby0+YWRhcHRlci0+c3RhdHVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9jaGFyL2pzZmxhc2guYyBiL2RyaXZlcnMvc2J1cy9jaGFyL2pzZmxhc2guYwppbmRleCBlODU2NjIyLi42YjQ2NzhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NidXMvY2hhci9qc2ZsYXNoLmMKKysrIGIvZHJpdmVycy9zYnVzL2NoYXIvanNmbGFzaC5jCkBAIC0xMyw3ICsxMyw3IEBACiAgKiBUT0RPOiBFcmFzZS9wcm9ncmFtIGJvdGggYmFua3Mgb2YgYSA4TUIgU0lNTS4KICAqCiAgKiBJdCBpcyBhbnRpY2lwYXRlZCB0aGF0IHByb2dyYW1taW5nIGFuIE9TIEZsYXNoIHdpbGwgYmUgYSByb3V0aW5lCi0gKiBwcm9jZWR1cmUuIEluIHRoZSBzYW1lIHRpbWUgaXQgaXMgZXhlZWRpbmdseSBkYW5nZXJvdXMgYmVjYXVzZQorICogcHJvY2VkdXJlLiBJbiB0aGUgc2FtZSB0aW1lIGl0IGlzIGV4Y2VlZGluZ2x5IGRhbmdlcm91cyBiZWNhdXNlCiAgKiBhIHVzZXIgY2FuIHByb2dyYW0gaXRzIE9CUCBmbGFzaCB3aXRoIE9TIGltYWdlIGFuZCBlZmZlY3RpdmVseQogICoga2lsbCB0aGUgbWFjaGluZS4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci9tYXgxNjE3LmggYi9kcml2ZXJzL3NidXMvY2hhci9tYXgxNjE3LmgKaW5kZXggMGJiMDljMi4uY2QzMDgxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvbWF4MTYxNy5oCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL21heDE2MTcuaApAQCAtNiw3ICs2LDcgQEAKICNkZWZpbmUgTUFYMTYxN19DUFVfVEVNUAkweDAxIC8qIFByb2Nlc3NvciBkaWUgdGVtcCBpbiBDCSovCiAjZGVmaW5lIE1BWDE2MTdfU1RBVFVTCQkweDAyIC8qIENoaXAgc3RhdHVzIGJpdHMJKi8KIAotLyogUmVhZC1vbmx5IHZlcnNpb25zIG9mIGNoYW5nYWJsZSByZWdpc3RlcnMuICovCisvKiBSZWFkLW9ubHkgdmVyc2lvbnMgb2YgY2hhbmdlYWJsZSByZWdpc3RlcnMuICovCiAjZGVmaW5lIE1BWDE2MTdfUkRfQ0ZHX0JZVEUJMHgwMyAvKiBDb25maWcgcmVnaXN0ZXIJCSovCiAjZGVmaW5lIE1BWDE2MTdfUkRfQ1ZSQVRFX0JZVEUJMHgwNCAvKiBUZW1wIGNvbnZlcnNpb24gcmF0ZQkqLwogI2RlZmluZSBNQVgxNjE3X1JEX0FNQl9ISUdITElNCTB4MDUgLyogQW1iaWVudCBoaWdoIGxpbWl0CSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvM3ctOXh4eC5oIGIvZHJpdmVycy9zY3NpLzN3LTl4eHguaAppbmRleCAzMzQzODI0Li4wNDBmNzIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvM3ctOXh4eC5oCisrKyBiL2RyaXZlcnMvc2NzaS8zdy05eHh4LmgKQEAgLTYxLDcgKzYxLDcgQEAKIAl7MHgwMDAwLCAiQUVOIHF1ZXVlIGVtcHR5In0sCiAJezB4MDAwMSwgIkNvbnRyb2xsZXIgcmVzZXQgb2NjdXJyZWQifSwKIAl7MHgwMDAyLCAiRGVncmFkZWQgdW5pdCBkZXRlY3RlZCJ9LAotCXsweDAwMDMsICJDb250cm9sbGVyIGVycm9yIG9jY3VyZWQifSwKKwl7MHgwMDAzLCAiQ29udHJvbGxlciBlcnJvciBvY2N1cnJlZCJ9LAogCXsweDAwMDQsICJCYWNrZ3JvdW5kIHJlYnVpbGQgZmFpbGVkIn0sCiAJezB4MDAwNSwgIkJhY2tncm91bmQgcmVidWlsZCBkb25lIn0sCiAJezB4MDAwNiwgIkluY29tcGxldGUgdW5pdCBkZXRlY3RlZCJ9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpLzN3LXh4eHguaCBiL2RyaXZlcnMvc2NzaS8zdy14eHh4LmgKaW5kZXggOGI5ZjlkMS4uNDlkY2YwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpLzN3LXh4eHguaAorKysgYi9kcml2ZXJzL3Njc2kvM3cteHh4eC5oCkBAIC04LDcgKzgsNyBAQAogCiAgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAxMCAzd2FyZSBJbmMuCiAKLSAgIEtlcm5lbCBjb21wYXRpYmxpdHkgQnk6CUFuZHJlIEhlZHJpY2sgPGFuZHJlQHN1c2UuY29tPgorICAgS2VybmVsIGNvbXBhdGliaWxpdHkgQnk6CUFuZHJlIEhlZHJpY2sgPGFuZHJlQHN1c2UuY29tPgogICAgTm9uLUNvcHlyaWdodCAoQykgMjAwMAlBbmRyZSBIZWRyaWNrIDxhbmRyZUBzdXNlLmNvbT4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS81M2M3MDAuc2NyIGIvZHJpdmVycy9zY3NpLzUzYzcwMC5zY3IKaW5kZXggYTA2NGEwOS4uZWM4MjJlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpLzUzYzcwMC5zY3IKKysrIGIvZHJpdmVycy9zY3NpLzUzYzcwMC5zY3IKQEAgLTMxLDcgKzMxLDcgQEAKIEFCU09MVVRFCVJlY2VpdmVNc2dBZGRyZXNzID0gMAk7IEFkZHIgdG8gcmVjZWl2ZSBtc2cKIDsKIDsgVGhpcyBpcyB0aGUgbWFnaWMgY29tcG9uZW50IGZvciBoYW5kbGluZyBzY2F0dGVyLWdhdGhlci4gIEVhY2ggb2YgdGhlCi07IFNHIGNvbXBvbmVudHMgaXMgcHJlY2VlZGVkIGJ5IGEgc2NyaXB0IGZyYWdtZW50IHdoaWNoIG1vdmVzIHRoZQorOyBTRyBjb21wb25lbnRzIGlzIHByZWNlZGVkIGJ5IGEgc2NyaXB0IGZyYWdtZW50IHdoaWNoIG1vdmVzIHRoZQogOyBuZWNlc3NhcnkgYW1vdW50IG9mIGRhdGEgYW5kIGp1bXBzIHRvIHRoZSBuZXh0IFNHIHNlZ21lbnQuICBUaGUgZmluYWwKIDsgU0cgc2VnbWVudCBqdW1wcyBiYWNrIHRvIC4gIEhvd2V2ZXIsIHRoaXMgYWRkcmVzcyBpcyB0aGUgZmlyc3QgU0cgc2NyaXB0CiA7IHNlZ21lbnQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvNTNjNzAwX2QuaF9zaGlwcGVkIGIvZHJpdmVycy9zY3NpLzUzYzcwMF9kLmhfc2hpcHBlZAppbmRleCAwYjQyYTUxLi5hYTYyM2RhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvNTNjNzAwX2QuaF9zaGlwcGVkCisrKyBiL2RyaXZlcnMvc2NzaS81M2M3MDBfZC5oX3NoaXBwZWQKQEAgLTM0LDcgKzM0LDcgQEAKIEFCU09MVVRFCVJlY2VpdmVNc2dBZGRyZXNzID0gMAk7IEFkZHIgdG8gcmVjZWl2ZSBtc2cKIDsKIDsgVGhpcyBpcyB0aGUgbWFnaWMgY29tcG9uZW50IGZvciBoYW5kbGluZyBzY2F0dGVyLWdhdGhlci4gIEVhY2ggb2YgdGhlCi07IFNHIGNvbXBvbmVudHMgaXMgcHJlY2VlZGVkIGJ5IGEgc2NyaXB0IGZyYWdtZW50IHdoaWNoIG1vdmVzIHRoZQorOyBTRyBjb21wb25lbnRzIGlzIHByZWNlZGVkIGJ5IGEgc2NyaXB0IGZyYWdtZW50IHdoaWNoIG1vdmVzIHRoZQogOyBuZWNlc3NhcnkgYW1vdW50IG9mIGRhdGEgYW5kIGp1bXBzIHRvIHRoZSBuZXh0IFNHIHNlZ21lbnQuICBUaGUgZmluYWwKIDsgU0cgc2VnbWVudCBqdW1wcyBiYWNrIHRvIC4gIEhvd2V2ZXIsIHRoaXMgYWRkcmVzcyBpcyB0aGUgZmlyc3QgU0cgc2NyaXB0CiA7IHNlZ21lbnQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvRmxhc2hQb2ludC5jIGIvZHJpdmVycy9zY3NpL0ZsYXNoUG9pbnQuYwppbmRleCBlNDBjZGZiLi5kY2Q3MTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvRmxhc2hQb2ludC5jCisrKyBiL2RyaXZlcnMvc2NzaS9GbGFzaFBvaW50LmMKQEAgLTI1MDksNyArMjUwOSw3IEBACiAJCQkJV1JfSEFSUE9PTihwb3J0ICsgaHBfYXV0b3N0YXJ0XzMsCiAJCQkJCSAgIChTRUxFQ1QgKyBTRUxDSEtfU1RSVCkpOwogCi0JCQkJLyogU2V0dXAgb3VyIFNUQVRFIHNvIHdlIGtub3cgd2hhdCBoYXBwZW5kIHdoZW4KKwkJCQkvKiBTZXR1cCBvdXIgU1RBVEUgc28gd2Uga25vdyB3aGF0IGhhcHBlbmVkIHdoZW4KIAkJCQkgICB0aGUgd2hlZWxzIGZhbGwgb2ZmLiAqLwogCQkJCWN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID0gU0VMRUNUX1NUOwogCkBAIC0yOTAwLDcgKzI5MDAsNyBAQAogICoKICAqIEZ1bmN0aW9uOiBGUFRfc2RlY20KICAqCi0gKiBEZXNjcmlwdGlvbjogRGV0ZXJtaW5lIHRoZSBwcm9wZXIgcmVzcG9uY2UgdG8gdGhlIG1lc3NhZ2UgZnJvbSB0aGUKKyAqIERlc2NyaXB0aW9uOiBEZXRlcm1pbmUgdGhlIHByb3BlciByZXNwb25zZSB0byB0aGUgbWVzc2FnZSBmcm9tIHRoZQogICogICAgICAgICAgICAgIHRhcmdldCBkZXZpY2UuCiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL05DUjUzODAuYyBiL2RyaXZlcnMvc2NzaS9OQ1I1MzgwLmMKaW5kZXggZTdjZDJmYy4uMTY1ZTRkZDg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvTkNSNTM4MC5jCisrKyBiL2RyaXZlcnMvc2NzaS9OQ1I1MzgwLmMKQEAgLTExOTgsMTIgKzExOTgsMTIgQEAKIAkJCQkgKi8KIAogCQkJCWlmICgoTkNSNTM4MF9yZWFkKE1PREVfUkVHKSAmIE1SX0RNQSkgJiYgKChiYXNyICYgQkFTUl9FTkRfRE1BX1RSQU5TRkVSKSB8fCAhKGJhc3IgJiBCQVNSX1BIQVNFX01BVENIKSkpIHsKLQkJCQkJaW50IHRyYW5zZmVyZWQ7CisJCQkJCWludCB0cmFuc2ZlcnJlZDsKIAogCQkJCQlpZiAoIWhvc3RkYXRhLT5jb25uZWN0ZWQpCiAJCQkJCQlwYW5pYygic2NzaSVkIDogcmVjZWl2ZWQgZW5kIG9mIERNQSBpbnRlcnJ1cHQgd2l0aCBubyBjb25uZWN0ZWQgY21kXG4iLCBpbnN0YW5jZS0+aG9zdG5vKTsKIAotCQkJCQl0cmFuc2ZlcmVkID0gKGhvc3RkYXRhLT5kbWFsZW4gLSBOQ1I1MzgwX2RtYV9yZXNpZHVhbChpbnN0YW5jZSkpOworCQkJCQl0cmFuc2ZlcnJlZCA9IChob3N0ZGF0YS0+ZG1hbGVuIC0gTkNSNTM4MF9kbWFfcmVzaWR1YWwoaW5zdGFuY2UpKTsKIAkJCQkJaG9zdGRhdGEtPmNvbm5lY3RlZC0+U0NwLnRoaXNfcmVzaWR1YWwgLT0gdHJhbnNmZXJyZWQ7CiAJCQkJCWhvc3RkYXRhLT5jb25uZWN0ZWQtPlNDcC5wdHIgKz0gdHJhbnNmZXJyZWQ7CiAJCQkJCWhvc3RkYXRhLT5kbWFsZW4gPSAwOwpAQCAtMTU2Myw3ICsxNTYzLDcgQEAKICAqICAgICAgYnl0ZXMgdG8gdHJhbnNmZXIsICoqZGF0YSAtIHBvaW50ZXIgdG8gZGF0YSBwb2ludGVyLgogICogCiAgKiBSZXR1cm5zIDogLTEgd2hlbiBkaWZmZXJlbnQgcGhhc2UgaXMgZW50ZXJlZCB3aXRob3V0IHRyYW5zZmVycmluZwotICogICAgICBtYXhpbXVtIG51bWJlciBvZiBieXRlcywgMCBpZiBhbGwgYnl0ZXMgb3IgdHJhbnNmZXJlZCBvciBleGl0CisgKiAgICAgIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzLCAwIGlmIGFsbCBieXRlcyBvciB0cmFuc2ZlcnJlZCBvciBleGl0CiAgKiAgICAgIGlzIGluIHNhbWUgcGhhc2UuCiAgKgogICogICAgICBBbHNvLCAqcGhhc2UsICpjb3VudCwgKmRhdGEgYXJlIG1vZGlmaWVkIGluIHBsYWNlLgpAQCAtMTgwMCw3ICsxODAwLDcgQEAKICAqICAgICAgYnl0ZXMgdG8gdHJhbnNmZXIsICoqZGF0YSAtIHBvaW50ZXIgdG8gZGF0YSBwb2ludGVyLgogICogCiAgKiBSZXR1cm5zIDogLTEgd2hlbiBkaWZmZXJlbnQgcGhhc2UgaXMgZW50ZXJlZCB3aXRob3V0IHRyYW5zZmVycmluZwotICogICAgICBtYXhpbXVtIG51bWJlciBvZiBieXRlcywgMCBpZiBhbGwgYnl0ZXMgb3IgdHJhbnNmZXJlZCBvciBleGl0CisgKiAgICAgIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzLCAwIGlmIGFsbCBieXRlcyBvciB0cmFuc2ZlcnJlZCBvciBleGl0CiAgKiAgICAgIGlzIGluIHNhbWUgcGhhc2UuCiAgKgogICogICAgICBBbHNvLCAqcGhhc2UsICpjb3VudCwgKmRhdGEgYXJlIG1vZGlmaWVkIGluIHBsYWNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjaGJhLmMgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNoYmEuYwppbmRleCAxMThjZTgzLi4wNjE5OTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNoYmEuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNoYmEuYwpAQCAtNzQ3LDggKzc0Nyw4IEBACiAgKiBBcmd1bWVudHM6IFsxXSBwb2ludGVyIHRvIHZvaWQgWzFdIGludAogICoKICAqIFB1cnBvc2U6IFNldHMgU0NTSSBpbnF1aXJ5IGRhdGEgc3RyaW5ncyBmb3IgdmVuZG9yLCBwcm9kdWN0Ci0gKiBhbmQgcmV2aXNpb24gbGV2ZWwuIEFsbG93cyBzdHJpbmdzIHRvIGJlIHNldCBpbiBwbGF0Zm9ybSBkZXBlbmRhbnQKLSAqIGZpbGVzIGluc3RlYWQgb2YgaW4gT1MgZGVwZW5kYW50IGRyaXZlciBzb3VyY2UuCisgKiBhbmQgcmV2aXNpb24gbGV2ZWwuIEFsbG93cyBzdHJpbmdzIHRvIGJlIHNldCBpbiBwbGF0Zm9ybSBkZXBlbmRlbnQKKyAqIGZpbGVzIGluc3RlYWQgb2YgaW4gT1MgZGVwZW5kZW50IGRyaXZlciBzb3VyY2UuCiAgKi8KIAogc3RhdGljIHZvaWQgc2V0aW5xc3RyKHN0cnVjdCBhYWNfZGV2ICpkZXYsIHZvaWQgKmRhdGEsIGludCB0aW5kZXgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNyYWlkLmggYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNyYWlkLmgKaW5kZXggMjlhYjAwMC4uZmZiNTg3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjcmFpZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY3JhaWQuaApAQCAtMTI1OSw3ICsxMjU5LDcgQEAKICNkZWZpbmUgQ0FDSEVfVU5TVEFCTEUJCTIKIAogLyoKLSAqCUxldHMgdGhlIGNsaWVudCBrbm93IGF0IHdoaWNoIGxldmVsIHRoZSBkYXRhIHdhcyBjb21taXRlZCBvbgorICoJTGV0cyB0aGUgY2xpZW50IGtub3cgYXQgd2hpY2ggbGV2ZWwgdGhlIGRhdGEgd2FzIGNvbW1pdHRlZCBvbgogICoJYSB3cml0ZSByZXF1ZXN0CiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbXN1cC5jIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbXN1cC5jCmluZGV4IGRkN2FkM2IuLmU3ZDBkNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1zdXAuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21tc3VwLmMKQEAgLTQyMSw3ICs0MjEsNyBAQAogCWlmICghKGh3X2ZpYi0+aGVhZGVyLlhmZXJTdGF0ZSAmIGNwdV90b19sZTMyKEhvc3RPd25lZCkpKQogCQlyZXR1cm4gLUVCVVNZOwogCS8qCi0JICoJVGhlcmUgYXJlIDUgY2FzZXMgd2l0aCB0aGUgd2FpdCBhbmQgcmVwb25zZSByZXF1ZXN0ZWQgZmxhZ3MuCisJICoJVGhlcmUgYXJlIDUgY2FzZXMgd2l0aCB0aGUgd2FpdCBhbmQgcmVzcG9uc2UgcmVxdWVzdGVkIGZsYWdzLgogCSAqCVRoZSBvbmx5IGludmFsaWQgY2FzZXMgYXJlIGlmIHRoZSBjYWxsZXIgcmVxdWVzdHMgdG8gd2FpdCBhbmQKIAkgKglkb2VzIG5vdCByZXF1ZXN0IGEgcmVzcG9uc2UgYW5kIGlmIHRoZSBjYWxsZXIgZG9lcyBub3Qgd2FudCBhCiAJICoJcmVzcG9uc2UgYW5kIHRoZSBGaWIgaXMgbm90IGFsbG9jYXRlZCBmcm9tIHBvb2wuIElmIGEgcmVzcG9uc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jIGIvZHJpdmVycy9zY3NpL2FkdmFuc3lzLmMKaW5kZXggMDgxYzZkZS4uYmZkNjE4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FkdmFuc3lzLmMKKysrIGIvZHJpdmVycy9zY3NpL2FkdmFuc3lzLmMKQEAgLTQ1NDQsNyArNDU0NCw3IEBACiAgKiBDb3B5IDQgYnl0ZXMgdG8gTFJBTS4KICAqCiAgKiBUaGUgc291cmNlIGRhdGEgaXMgYXNzdW1lZCB0byBiZSBpbiBsaXR0bGUtZW5kaWFuIG9yZGVyIGluIG1lbW9yeQotICogYW5kIGlzIG1haW50YWluZWQgaW4gbGl0dGxlLWVuZGlhbiBvcmRlciB3aGVuIHdyaXRlbiB0byBMUkFNLgorICogYW5kIGlzIG1haW50YWluZWQgaW4gbGl0dGxlLWVuZGlhbiBvcmRlciB3aGVuIHdyaXR0ZW4gdG8gTFJBTS4KICAqLwogc3RhdGljIHZvaWQKIEFzY01lbURXb3JkQ29weVB0clRvTHJhbShQb3J0QWRkciBpb3BfYmFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haGExNzQwLmMgYi9kcml2ZXJzL3Njc2kvYWhhMTc0MC5jCmluZGV4IGQwNThmMWEuLjFjMTBiNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haGExNzQwLmMKKysrIGIvZHJpdmVycy9zY3NpL2FoYTE3NDAuYwpAQCAtNDYxLDcgKzQ2MSw3IEBACiAJLyogVGhlIEFkYXB0ZWMgU3BlYyBzYXlzIHRoZSBjYXJkIGlzIHNvIGZhc3QgdGhhdCB0aGUgbG9vcHMKICAgICAgICAgICAgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIG9uY2UgaW4gdGhlIGNvZGUgYmVsb3cuIEV2ZW4gaWYgdGhpcwogICAgICAgICAgICB3YXMgdHJ1ZSB3aXRoIHRoZSBmYXN0ZXN0IHByb2Nlc3NvcnMgd2hlbiB0aGUgc3BlYyB3YXMKLSAgICAgICAgICAgd3JpdHRlbiwgaXQgZG9lc24ndCBzZWVtIHRvIGJlIHRydWUgd2l0aCB0b2RheXMgZmFzdAorICAgICAgICAgICB3cml0dGVuLCBpdCBkb2Vzbid0IHNlZW0gdG8gYmUgdHJ1ZSB3aXRoIHRvZGF5J3MgZmFzdAogICAgICAgICAgICBwcm9jZXNzb3JzLiBXZSBwcmludCBhIHdhcm5pbmcgaWYgdGhlIGNvZGUgaXMgZXhlY3V0ZWQgbW9yZQogICAgICAgICAgICBvZnRlbiB0aGFuIExPT1BDTlRfV0FSTi4gSWYgdGhpcyBoYXBwZW5zLCBpdCBzaG91bGQgYmUKICAgICAgICAgICAgaW52ZXN0aWdhdGVkLiBJZiB0aGUgY291bnQgcmVhY2hlcyBMT09QQ05UX01BWCwgd2UgYXNzdW1lCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4LmggYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4LmgKaW5kZXggOTVlZTUwMy4uOWIwNTk0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eC5oCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHguaApAQCAtNDczLDcgKzQ3Myw3IEBACiAgKglvIEEgcmVzaWR1YWwgaGFzIG9jY3VycmVkIGlmIFNHX0ZVTExfUkVTSUQgaXMgc2V0IGluIHNncHRyLAogICoJICBvciByZXNpZHVhbF9zZ3B0ciBkb2VzIG5vdCBoYXZlIFNHX0xJU1RfTlVMTCBzZXQuCiAgKgotICoJbyBXZSBhcmUgdHJhbnNmZXJpbmcgdGhlIGxhc3Qgc2VnbWVudCBpZiByZXNpZHVhbF9kYXRhY250IGhhcworICoJbyBXZSBhcmUgdHJhbnNmZXJyaW5nIHRoZSBsYXN0IHNlZ21lbnQgaWYgcmVzaWR1YWxfZGF0YWNudCBoYXMKICAqCSAgdGhlIFNHX0xBU1RfU0VHIGZsYWcgc2V0LgogICoKICAqIEhvc3Q6CkBAIC01MTYsNyArNTE2LDcgQEAKICAqLwogCiAvKgotICogRGVmaW5pdGlvbiBvZiBhIHNjYXR0ZXIvZ2F0aGVyIGVsZW1lbnQgYXMgdHJhbnNmZXJlZCB0byB0aGUgY29udHJvbGxlci4KKyAqIERlZmluaXRpb24gb2YgYSBzY2F0dGVyL2dhdGhlciBlbGVtZW50IGFzIHRyYW5zZmVycmVkIHRvIHRoZSBjb250cm9sbGVyLgogICogVGhlIGFpYzd4eHggY2hpcHMgb25seSBzdXBwb3J0IGEgMjRiaXQgbGVuZ3RoLiAgV2UgdXNlIHRoZSB0b3AgYnl0ZSBvZgogICogdGhlIGxlbmd0aCB0byBzdG9yZSBhZGRpdGlvbmFsIGFkZHJlc3MgYml0cyBhbmQgYSBmbGFnIHRvIGluZGljYXRlCiAgKiB0aGF0IGEgZ2l2ZW4gc2VnbWVudCB0ZXJtaW5hdGVzIHRoZSB0cmFuc2Zlci4gIFRoaXMgZ2l2ZXMgdXMgYW4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHgucmVnIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eC5yZWcKaW5kZXggMDY2NmMyMi4uN2UxMmMzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eC5yZWcKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eC5yZWcKQEAgLTMwNSw3ICszMDUsNyBAQAogfQogCiAvKgotICogU2VxdWVuY2VyIEludGVydXB0IFN0YXR1cworICogU2VxdWVuY2VyIEludGVycnVwdCBTdGF0dXMKICAqLwogcmVnaXN0ZXIgU0VRSU5UU1RBVCB7CiAJYWRkcmVzcwkJCTB4MDBDCkBAIC02ODUsNyArNjg1LDcgQEAKIH0KIAogLyoKLSAqIENNQyBSZWNpZXZlIE1lc3NhZ2UgMAorICogQ01DIFJlY2VpdmUgTWVzc2FnZSAwCiAgKi8KIHJlZ2lzdGVyIENNQ1JYTVNHMCB7CiAJYWRkcmVzcwkJCTB4MDkwCkBAIC02OTYsNyArNjk2LDcgQEAKIH0KIAogLyoKLSAqIE92ZXJsYXkgUmVjaWV2ZSBNZXNzYWdlIDAKKyAqIE92ZXJsYXkgUmVjZWl2ZSBNZXNzYWdlIDAKICAqLwogcmVnaXN0ZXIgT1ZMWVJYTVNHMCB7CiAJYWRkcmVzcwkJCTB4MDkwCkBAIC03MzIsNyArNzMyLDcgQEAKIH0KIAogLyoKLSAqIENNQyBSZWNpZXZlIE1lc3NhZ2UgMQorICogQ01DIFJlY2VpdmUgTWVzc2FnZSAxCiAgKi8KIHJlZ2lzdGVyIENNQ1JYTVNHMSB7CiAJYWRkcmVzcwkJCTB4MDkxCkBAIC03NDIsNyArNzQyLDcgQEAKIH0KIAogLyoKLSAqIE92ZXJsYXkgUmVjaWV2ZSBNZXNzYWdlIDEKKyAqIE92ZXJsYXkgUmVjZWl2ZSBNZXNzYWdlIDEKICAqLwogcmVnaXN0ZXIgT1ZMWVJYTVNHMSB7CiAJYWRkcmVzcwkJCTB4MDkxCkBAIC03NzcsNyArNzc3LDcgQEAKIH0KIAogLyoKLSAqIENNQyBSZWNpZXZlIE1lc3NhZ2UgMgorICogQ01DIFJlY2VpdmUgTWVzc2FnZSAyCiAgKi8KIHJlZ2lzdGVyIENNQ1JYTVNHMiB7CiAJYWRkcmVzcwkJCTB4MDkyCkBAIC03ODcsNyArNzg3LDcgQEAKIH0KIAogLyoKLSAqIE92ZXJsYXkgUmVjaWV2ZSBNZXNzYWdlIDIKKyAqIE92ZXJsYXkgUmVjZWl2ZSBNZXNzYWdlIDIKICAqLwogcmVnaXN0ZXIgT1ZMWVJYTVNHMiB7CiAJYWRkcmVzcwkJCTB4MDkyCkBAIC04MTYsNyArODE2LDcgQEAKIH0KIAogLyoKLSAqIENNQyBSZWNpZXZlIE1lc3NhZ2UgMworICogQ01DIFJlY2VpdmUgTWVzc2FnZSAzCiAgKi8KIHJlZ2lzdGVyIENNQ1JYTVNHMyB7CiAJYWRkcmVzcwkJCTB4MDkzCkBAIC04MjYsNyArODI2LDcgQEAKIH0KIAogLyoKLSAqIE92ZXJsYXkgUmVjaWV2ZSBNZXNzYWdlIDMKKyAqIE92ZXJsYXkgUmVjZWl2ZSBNZXNzYWdlIDMKICAqLwogcmVnaXN0ZXIgT1ZMWVJYTVNHMyB7CiAJYWRkcmVzcwkJCTB4MDkzCkBAIC0xMjQ5LDcgKzEyNDksNyBAQAogCiAvKgogICogTFEgUGFja2V0IEluCi0gKiBUaGUgbGFzdCBMUSBQYWNrZXQgcmVjaWV2ZWQKKyAqIFRoZSBsYXN0IExRIFBhY2tldCByZWNlaXZlZAogICovCiByZWdpc3RlciBMUUlOIHsKIAlhZGRyZXNzCQkJMHgwMjAKQEAgLTI1NzMsNyArMjU3Myw3IEBACiB9CiAKIC8qCi0gKiBTaGFkZG93IEhvc3QgQWRkcmVzcy4KKyAqIFNoYWRvdyBIb3N0IEFkZHJlc3MuCiAgKi8KIHJlZ2lzdGVyIFNIQUREUiB7CiAJYWRkcmVzcwkJCTB4MDYwCkBAIC0zOTgzLDcgKzM5ODMsNyBAQAogCiAJLyoKIAkgKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSB0byB3YWl0LCB3aGVuIGludGVycnVwdCBjb2FsZXNjaW5nCi0JICogaXMgZW5hYmxlZCwgYmVmb3JlIGlzc3VlaW5nIGEgQ01EQ01QTFQgaW50ZXJydXB0IGZvciBhIGNvbXBsZXRlZAorCSAqIGlzIGVuYWJsZWQsIGJlZm9yZSBpc3N1aW5nIGEgQ01EQ01QTFQgaW50ZXJydXB0IGZvciBhIGNvbXBsZXRlZAogCSAqIGNvbW1hbmQuCiAJICovCiAJSU5UX0NPQUxFU0NJTkdfVElNRVIgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eC5zZXEgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4LnNlcQppbmRleCAyZmI3OGUzLi4zYTM2ZDkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4LnNlcQorKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4LnNlcQpAQCAtNTY3LDcgKzU2Nyw3IEBACiAJc2hyCVNFTE9JRCwgNCwgU0NCX1NDU0lJRDsKIAkvKgogCSAqIElmIHdlIHdhbnQgdG8gc2VuZCBhIG1lc3NhZ2UgdG8gdGhlIGRldmljZSwgZW5zdXJlCi0JICogd2UgYXJlIHNlbGVjdGluZyB3aXRoIGF0biBpcnJlZ2FyZGxlc3Mgb2Ygb3VyIHBhY2tldGl6ZWQKKwkgKiB3ZSBhcmUgc2VsZWN0aW5nIHdpdGggYXRuIHJlZ2FyZGxlc3Mgb2Ygb3VyIHBhY2tldGl6ZWQKIAkgKiBhZ3JlZW1lbnQuICBTaW5jZSBTUEk0IG9ubHkgYWxsb3dzIHRhcmdldCByZXNldCBvciBQUFIKIAkgKiBtZXNzYWdlcyBpZiB0aGlzIGlzIGEgcGFja2V0aXplZCBjb25uZWN0aW9uLCB0aGUgY2hhbmdlCiAJICogdG8gb3VyIG5lZ290aWF0aW9uIHRhYmxlIGVudHJ5IGZvciB0aGlzIHNlbGVjdGlvbiB3aWxsCkBAIC05NjAsNyArOTYwLDcgQEAKICAqIFRoaXMgaXMgZG9uZSB0byBhbGxvdyB0aGUgaG9zdCB0byBzZW5kIG1lc3NhZ2VzIG91dHNpZGUgb2YgYW4gaWRlbnRpZnkKICAqIHNlcXVlbmNlIHdoaWxlIHByb3RlY3RpbmcgdGhlIHNlcWVuY2VyIGZyb20gdGVzdGluZyB0aGUgTUtfTUVTU0FHRSBiaXQKICAqIG9uIGFuIFNDQiB0aGF0IG1pZ2h0IG5vdCBiZSBmb3IgdGhlIGN1cnJlbnQgbmV4dXMuIChGb3IgZXhhbXBsZSwgYQotICogQkRSIG1lc3NhZ2UgaW4gcmVzcG9uY2UgdG8gYSBiYWQgcmVzZWxlY3Rpb24gd291bGQgbGVhdmUgdXMgcG9pbnRlZCB0bworICogQkRSIG1lc3NhZ2UgaW4gcmVzcG9uc2UgdG8gYSBiYWQgcmVzZWxlY3Rpb24gd291bGQgbGVhdmUgdXMgcG9pbnRlZCB0bwogICogYW4gU0NCIHRoYXQgZG9lc24ndCBoYXZlIGFueXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgdGFyZ2V0KS4KICAqCiAgKiBPdGhlcndpc2UsIHRyZWF0IE1TR19PVVQgYXMgYSAxIGJ5dGUgbWVzc2FnZSB0byBzZW5kIChhYm9ydCwgYWJvcnQgdGFnLApAQCAtMTUwNyw3ICsxNTA3LDcgQEAKIAkJICogSWYgdGhlIG90aGVyIEZJRk8gbmVlZHMgbG9hZGluZywgdGhlbiBpdAogCQkgKiBtdXN0IG5vdCBoYXZlIGNsYWltZWQgdGhlIFMvRyBjYWNoZSB5ZXQKIAkJICogKFNHX0NBQ0hFX0FWQUlMIHdvdWxkIGhhdmUgYmVlbiBjbGVhcmVkIGluCi0JCSAqIHRoZSBvcmdpbmFsIEZJRk8gbW9kZSBhbmQgd2UgdGVzdCB0aGlzIGFib3ZlKS4KKwkJICogdGhlIG9yaWdpbmFsIEZJRk8gbW9kZSBhbmQgd2UgdGVzdCB0aGlzIGFib3ZlKS4KIAkJICogUmV0dXJuIHRvIHRoZSBpZGxlIGxvb3Agc28gd2UgY2FuIHByb2Nlc3MgdGhlCiAJCSAqIEZJRk8gbm90IGN1cnJlbnRseSBvbiB0aGUgYnVzIGZpcnN0LgogCQkgKi8KQEAgLTE1MjEsNyArMTUyMSw3IEBACiBpZGxlX3NnZmV0Y2hfc3RhcnQ6CiAJLyoKIAkgKiBXZSBmZXRjaCBhICJjYWNoZWxpbmUgYWxpZ25lZCIgYW5kIHNpemVkIGFtb3VudCBvZiBkYXRhCi0JICogc28gd2UgZG9uJ3QgZW5kIHVwIHJlZmVyZW5jaW5nIGEgbm9uLWV4aXN0YW50IHBhZ2UuCisJICogc28gd2UgZG9uJ3QgZW5kIHVwIHJlZmVyZW5jaW5nIGEgbm9uLWV4aXN0ZW50IHBhZ2UuCiAJICogQ2FjaGVsaW5lIGFsaWduZWQgaXMgaW4gcXVvdGVzIGJlY2F1c2UgdGhlIGtlcm5lbCB3aWxsCiAJICogc2V0IHRoZSBwcmVmZXRjaCBhbW91bnQgdG8gYSByZWFzb25hYmxlIGxldmVsIGlmIHRoZQogCSAqIGNhY2hlbGluZSBzaXplIGlzIHVua25vd24uCkBAIC0xNTUxLDcgKzE1NTEsNyBAQAogCXRlc3QJREZTVEFUVVMsIFBSRUxPQURfQVZBSUwganogcmV0dXJuOwogCS8qCiAJICogT24gdGhlIEEsIHByZWxvYWRpbmcgYSBzZWdtZW50IGJlZm9yZSBIRE1BRU5BQ0sKLQkgKiBjb21lcyB0cnVlIGNhbiBjbG9iYmVyIHRoZSBzaGFkZG93IGFkZHJlc3Mgb2YgdGhlCisJICogY29tZXMgdHJ1ZSBjYW4gY2xvYmJlciB0aGUgc2hhZG93IGFkZHJlc3Mgb2YgdGhlCiAJICogZmlyc3Qgc2VnbWVudCBpbiB0aGUgUy9HIEZJRk8uICBXYWl0IHVudGlsIGl0IGlzCiAJICogc2FmZSB0byBwcm9jZWVkLgogCSAqLwpAQCAtMjAwNCwxMCArMjAwNCwxMCBAQAogCSAqIERlZmVyIGhhbmRsaW5nIG9mIHRoaXMgTk9OUEFDS1JFUSB1bnRpbCB3ZQogCSAqIGNhbiBiZSBzdXJlIGl0IHBlcnRhaW5zIHRvIHRoaXMgRklGTy4gIFNBVkVQVFJTCiAJICogd2lsbCBub3QgYmUgYXNzZXJ0ZWQgaWYgdGhlIE5PTlBBQ0tSRVEgaXMgZm9yIHVzLAotCSAqIHNvIHdlIG11c3Qgc2ltdWxhdGUgaXQgaWYgc2hhZGRvdyBpcyB2YWxpZC4gIElmCi0JICogc2hhZGRvdyBpcyBub3QgdmFsaWQsIGtlZXAgcnVubmluZyB0aGlzIEZJRk8gdW50aWwgd2UKKwkgKiBzbyB3ZSBtdXN0IHNpbXVsYXRlIGl0IGlmIHNoYWRvdyBpcyB2YWxpZC4gIElmCisJICogc2hhZG93IGlzIG5vdCB2YWxpZCwga2VlcCBydW5uaW5nIHRoaXMgRklGTyB1bnRpbCB3ZQogCSAqIGhhdmUgc2F0aXNmaWVkIHRoZSB0cmFuc2ZlciBieSBsb2FkaW5nIHNlZ21lbnRzIGFuZAotCSAqIHdhaXRpbmcgZm9yIGVpdGhlciBzaGFkZG93IHZhbGlkIG9yIGxhc3Rfc2VnX2RvbmUuCisJICogd2FpdGluZyBmb3IgZWl0aGVyIHNoYWRvdyB2YWxpZCBvciBsYXN0X3NlZ19kb25lLgogCSAqLwogCXRlc3QJTURGRlNUQVQsIFNIVkFMSUQgam56IHBrdF9zYXZlcHRyczsKIHBrdF9zZXJ2aWNlX2ZpZm86CkBAIC0yMTcxLDcgKzIxNzEsNyBAQAogCS8qCiAJICogVGhlIHVuZXhwZWN0ZWQgbm9ucGt0IHBoYXNlIGhhbmRsZXIgYXNzdW1lcyB0aGF0IGFueQogCSAqIGRhdGEgY2hhbm5lbCB1c2Ugd2lsbCBoYXZlIGEgRklGTyByZWZlcmVuY2UgY291bnQuICBJdAotCSAqIHR1cm5zIG91dCB0aGF0IHRoZSBzdGF0dXMgaGFuZGxlciBkb2Vzbid0IG5lZWQgYSByZWZlcm5jZQorCSAqIHR1cm5zIG91dCB0aGF0IHRoZSBzdGF0dXMgaGFuZGxlciBkb2Vzbid0IG5lZWQgYSByZWZlcmVuY2VzCiAJICogY291bnQgc2luY2UgdGhlIHN0YXR1cyByZWNlaXZlZCBmbGFnLCBhbmQgdGh1cyBjb21wbGV0aW9uCiAJICogcHJvY2Vzc2luZywgY2Fubm90IGJlIHNldCB1bnRpbCB0aGUgaGFuZGxlciBpcyBmaW5pc2hlZC4KIAkgKiBXZSBpbmNyZW1lbnQgdGhlIGNvdW50IGhlcmUgdG8gbWFrZSB0aGUgbm9ucGt0IGhhbmRsZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfY29yZS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9jb3JlLmMKaW5kZXggMzIzM2JmNS4uNWY4NjE3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9jb3JlLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9jb3JlLmMKQEAgLTU2Miw3ICs1NjIsNyBAQAogfQogI2VuZGlmCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKiBNaXNjZWxhbmVvdXMgU3VwcG9ydCBGdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKiogTWlzY2VsbGFuZW91cyBTdXBwb3J0IEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCiAgKiBSZXR1cm4gcG9pbnRlcnMgdG8gdGhlIHRyYW5zZmVyIG5lZ290aWF0aW9uIGluZm9ybWF0aW9uCiAgKiBmb3IgdGhlIHNwZWNpZmllZCBvdXJfaWQvcmVtb3RlX2lkIHBhaXIuCkBAIC01OTksNyArNTk5LDcgQEAKIGFoZF9vdXR3KHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgdV9pbnQgcG9ydCwgdV9pbnQgdmFsdWUpCiB7CiAJLyoKLQkgKiBXcml0ZSBsb3cgYnl0ZSBmaXJzdCB0byBhY2NvbW9kYXRlIHJlZ2lzdGVycworCSAqIFdyaXRlIGxvdyBieXRlIGZpcnN0IHRvIGFjY29tbW9kYXRlIHJlZ2lzdGVycwogCSAqIHN1Y2ggYXMgUFJHTUNOVCB3aGVyZSB0aGUgb3JkZXIgbWF0ZXJzLgogCSAqLwogCWFoZF9vdXRiKGFoZCwgcG9ydCwgdmFsdWUgJiAweEZGKTsKQEAgLTIwNjcsNyArMjA2Nyw3IEBACiAJCSAqIHRoYXQgcmVxdWlyZXMgaG9zdCBhc3Npc3RhbmNlIGZvciBjb21wbGV0aW9uLgogCQkgKiBXaGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZSBwaGFzZShzKSwgd2Ugd2lsbCBiZQogCQkgKiBub3RpZmllZCBieSB0aGUgc2VxdWVuY2VyIGFmdGVyIGVhY2ggYnl0ZSBpcwotCQkgKiB0cmFuc2ZlcmVkIHNvIHdlIGNhbiB0cmFjayBidXMgcGhhc2UgY2hhbmdlcy4KKwkJICogdHJhbnNmZXJyZWQgc28gd2UgY2FuIHRyYWNrIGJ1cyBwaGFzZSBjaGFuZ2VzLgogCQkgKgogCQkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gYSBIT1NUX01TR19MT09QCiAJCSAqIGludGVycnVwdCwgaW5pdGlhbGl6ZSB0aGUgc3RhdGUgb2YgdGhlIGhvc3QgbWVzc2FnZQpAQCAtMjQ4Nyw3ICsyNDg3LDcgQEAKIAkJLyoKIAkJICogQWx0aG91Z2ggdGhlIGRyaXZlciBkb2VzIG5vdCBjYXJlIGFib3V0IHRoZQogCQkgKiAnU2VsZWN0aW9uIGluIFByb2dyZXNzJyBzdGF0dXMgYml0LCB0aGUgYnVzeQotCQkgKiBMRUQgZG9lcy4gIFNFTElOR08gaXMgb25seSBjbGVhcmVkIGJ5IGEgc3VjY2Vzc2Z1bGwKKwkJICogTEVEIGRvZXMuICBTRUxJTkdPIGlzIG9ubHkgY2xlYXJlZCBieSBhIHN1Y2Nlc3NmdWwKIAkJICogc2VsZWN0aW9uLCBzbyB3ZSBtdXN0IG1hbnVhbGx5IGNsZWFyIGl0IHRvIGluc3VyZQogCQkgKiB0aGUgTEVEIHR1cm5zIG9mZiBqdXN0IGluY2FzZSBubyBmdXR1cmUgc3VjY2Vzc2Z1bAogCQkgKiBzZWxlY3Rpb25zIG9jY3VyIChlLmcuIG5vIGRldmljZXMgb24gdGhlIGJ1cykuCkBAIC0zNTQ4LDcgKzM1NDgsNyBAQAogCQlhaGRfb3V0YihhaGQsIFNFUUNUTDAsIGFoZF9pbmIoYWhkLCBTRVFDVEwwKSAmIH5TVEVQKTsKICAgCQlhaGRfb3V0YihhaGQsIFNJTU9ERTEsIHNpbW9kZTEpOwogCQkvKgotCQkgKiBTQ1NJSU5UIHNlZW1zIHRvIGdsaXRjaCBvY2Nhc3Npb25hbGx5IHdoZW4KKwkJICogU0NTSUlOVCBzZWVtcyB0byBnbGl0Y2ggb2NjYXNpb25hbGx5IHdoZW4KIAkJICogdGhlIGludGVycnVwdCBtYXNrcyBhcmUgcmVzdG9yZWQuICBDbGVhciBTQ1NJSU5UCiAJCSAqIG9uZSBtb3JlIHRpbWUgc28gdGhhdCBvbmx5IHBlcnNpc3RlbnQgZXJyb3JzCiAJCSAqIGFyZSBzZWVuIGFzIGEgcmVhbCBpbnRlcnJ1cHQuCkBAIC0zODM4LDcgKzM4MzgsNyBAQAogCiAvKgogICogVXBkYXRlIHRoZSBiaXRtYXNrIG9mIHRhcmdldHMgZm9yIHdoaWNoIHRoZSBjb250cm9sbGVyIHNob3VsZAotICogbmVnb3RpYXRlIHdpdGggYXQgdGhlIG5leHQgY29udmVuaWVudCBvcG9ydHVuaXR5LiAgVGhpcyBjdXJyZW50bHkKKyAqIG5lZ290aWF0ZSB3aXRoIGF0IHRoZSBuZXh0IGNvbnZlbmllbnQgb3Bwb3J0dW5pdHkuICBUaGlzIGN1cnJlbnRseQogICogbWVhbnMgdGhlIG5leHQgdGltZSB3ZSBzZW5kIHRoZSBpbml0aWFsIGlkZW50aWZ5IG1lc3NhZ2VzIGZvcgogICogYSBuZXcgdHJhbnNhY3Rpb24uCiAgKi8KQEAgLTQyMDAsNyArNDIwMCw3IEBACiAKIAkvKgogCSAqIER1cmluZyBwYWNrZXRpemVkIHRyYW5zZmVycywgdGhlIHRhcmdldCB3aWxsCi0JICogZ2l2ZSB1cyB0aGUgb3BvcnR1bml0eSB0byBzZW5kIGNvbW1hbmQgcGFja2V0cworCSAqIGdpdmUgdXMgdGhlIG9wcG9ydHVuaXR5IHRvIHNlbmQgY29tbWFuZCBwYWNrZXRzCiAJICogd2l0aG91dCB1cyBhc3NlcnRpbmcgYXR0ZW50aW9uLgogCSAqLwogCWlmICgodGluZm8tPnBwcl9vcHRpb25zICYgTVNHX0VYVF9QUFJfSVVfUkVRKSA9PSAwKQpAQCAtNTY1MSw3ICs1NjUxLDcgQEAKIAogCQkvKgogCQkgKiBSZXF1ZXVlIGFsbCB0YWdnZWQgY29tbWFuZHMgZm9yIHRoaXMgdGFyZ2V0Ci0JCSAqIGN1cnJlbnRseSBpbiBvdXIgcG9zZXNzaW9uIHNvIHRoZXkgY2FuIGJlCisJCSAqIGN1cnJlbnRseSBpbiBvdXIgcG9zc2Vzc2lvbiBzbyB0aGV5IGNhbiBiZQogCQkgKiBjb252ZXJ0ZWQgdG8gdW50YWdnZWQgY29tbWFuZHMuCiAJCSAqLwogCQlhaGRfc2VhcmNoX3FpbmZpZm8oYWhkLCBTQ0JfR0VUX1RBUkdFVChhaGQsIHNjYiksCkBAIC02MjQ1LDcgKzYyNDUsNyBAQAogLyoKICAqIFJlc2V0IHRoZSBjb250cm9sbGVyIGFuZCByZWNvcmQgc29tZSBpbmZvcm1hdGlvbiBhYm91dCBpdAogICogdGhhdCBpcyBvbmx5IGF2YWlsYWJsZSBqdXN0IGFmdGVyIGEgcmVzZXQuICBJZiAicmVpbml0IiBpcwotICogbm9uLXplcm8sIHRoaXMgcmVzZXQgb2NjdXJlZCBhZnRlciBpbml0aWFsIGNvbmZpZ3VyYXRpb24KKyAqIG5vbi16ZXJvLCB0aGlzIHJlc2V0IG9jY3VycmVkIGFmdGVyIGluaXRpYWwgY29uZmlndXJhdGlvbgogICogYW5kIHRoZSBjYWxsZXIgcmVxdWVzdHMgdGhhdCB0aGUgY2hpcCBiZSBmdWxseSByZWluaXRpYWxpemVkCiAgKiB0byBhIHJ1bmFibGUgc3RhdGUuICBDaGlwIGludGVycnVwdHMgYXJlICpub3QqIGVuYWJsZWQgYWZ0ZXIKICAqIGEgcmVpbml0aWFsaXphdGlvbi4gIFRoZSBjYWxsZXIgbXVzdCBlbmFibGUgaW50ZXJydXB0cyB2aWEKQEAgLTY0OTUsNyArNjQ5NSw3IEBACiAJfQogCiAJLyoKLQkgKiBOb3RlIHRoYXQgd2Ugd2VyZSBzdWNjZXNzZnVsbAorCSAqIE5vdGUgdGhhdCB3ZSB3ZXJlIHN1Y2Nlc3NmdWwKIAkgKi8KIAlyZXR1cm4gKDApOyAKIApAQCAtNzA3OSw3ICs3MDc5LDcgQEAKIAkJcmV0dXJuIChFTk9NRU0pOwogCiAJLyoKLQkgKiBWZXJpZnkgdGhhdCB0aGUgY29tcGlsZXIgaGFzbid0IG92ZXItYWdyZXNzaXZlbHkKKwkgKiBWZXJpZnkgdGhhdCB0aGUgY29tcGlsZXIgaGFzbid0IG92ZXItYWdncmVzc2l2ZWx5CiAJICogcGFkZGVkIGltcG9ydGFudCBzdHJ1Y3R1cmVzLgogCSAqLwogCWlmIChzaXplb2Yoc3RydWN0IGhhcmR3YXJlX3NjYikgIT0gNjQpCkBAIC0xMDA4Nyw3ICsxMDA4Nyw3IEBACiAJCXJldHVybiAoZXJyb3IpOwogCiAJLyoKLQkgKiBXcml0ZSB0aGUgZGF0YS4gIElmIHdlIGRvbid0IGdldCB0aHJvdWdodCB0aGUgbG9vcCBhdAorCSAqIFdyaXRlIHRoZSBkYXRhLiAgSWYgd2UgZG9uJ3QgZ2V0IHRocm91Z2ggdGhlIGxvb3AgYXQKIAkgKiBsZWFzdCBvbmNlLCB0aGUgYXJndW1lbnRzIHdlcmUgaW52YWxpZC4KIAkgKi8KIAlyZXR2YWwgPSBFSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYwppbmRleCAyNWQwNjY2Li43ZDQ4NzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmMKQEAgLTE0NDEsNyArMTQ0MSw3IEBACiAJCXVzZXJ0YWdzID0gYWhkX2xpbnV4X3VzZXJfdGFnZGVwdGgoYWhkLCBkZXZpbmZvKTsKIAkJaWYgKCF3YXNfcXVldWluZykgewogCQkJLyoKLQkJCSAqIFN0YXJ0IG91dCBhZ3Jlc3NpdmVseSBhbmQgYWxsb3cgb3VyCisJCQkgKiBTdGFydCBvdXQgYWdncmVzc2l2ZWx5IGFuZCBhbGxvdyBvdXIKIAkJCSAqIGR5bmFtaWMgcXVldWUgZGVwdGggYWxnb3JpdGhtIHRvIHRha2UKIAkJCSAqIGNhcmUgb2YgdGhlIHJlc3QuCiAJCQkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHguaCBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHguaAppbmRleCAxNzQ0NGJjLi5mNjk1Nzc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4LmgKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eC5oCkBAIC00NDAsNyArNDQwLDcgQEAKICAqCW8gQSByZXNpZHVhbCBoYXMgb2NjdXJyZWQgaWYgU0dfRlVMTF9SRVNJRCBpcyBzZXQgaW4gc2dwdHIsCiAgKgkgIG9yIHJlc2lkdWFsX3NncHRyIGRvZXMgbm90IGhhdmUgU0dfTElTVF9OVUxMIHNldC4KICAqCi0gKglvIFdlIGFyZSB0cmFuc2ZlcmluZyB0aGUgbGFzdCBzZWdtZW50IGlmIHJlc2lkdWFsX2RhdGFjbnQgaGFzCisgKglvIFdlIGFyZSB0cmFuc2ZlcnJpbmcgdGhlIGxhc3Qgc2VnbWVudCBpZiByZXNpZHVhbF9kYXRhY250IGhhcwogICoJICB0aGUgU0dfTEFTVF9TRUcgZmxhZyBzZXQuCiAgKgogICogSG9zdDoKQEAgLTQ5NCw3ICs0OTQsNyBAQAogICovCiAKIC8qCi0gKiBEZWZpbml0aW9uIG9mIGEgc2NhdHRlci9nYXRoZXIgZWxlbWVudCBhcyB0cmFuc2ZlcmVkIHRvIHRoZSBjb250cm9sbGVyLgorICogRGVmaW5pdGlvbiBvZiBhIHNjYXR0ZXIvZ2F0aGVyIGVsZW1lbnQgYXMgdHJhbnNmZXJyZWQgdG8gdGhlIGNvbnRyb2xsZXIuCiAgKiBUaGUgYWljN3h4eCBjaGlwcyBvbmx5IHN1cHBvcnQgYSAyNGJpdCBsZW5ndGguICBXZSB1c2UgdGhlIHRvcCBieXRlIG9mCiAgKiB0aGUgbGVuZ3RoIHRvIHN0b3JlIGFkZGl0aW9uYWwgYWRkcmVzcyBiaXRzIGFuZCBhIGZsYWcgdG8gaW5kaWNhdGUKICAqIHRoYXQgYSBnaXZlbiBzZWdtZW50IHRlcm1pbmF0ZXMgdGhlIHRyYW5zZmVyLiAgVGhpcyBnaXZlcyB1cyBhbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eC5yZWcgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4LnJlZwppbmRleCA5YTk2ZTU1Li5iYTBiNDExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4LnJlZworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4LnJlZwpAQCAtMzUxLDcgKzM1MSw3IEBACiAJYWRkcmVzcwkJCTB4MDBkCiAJYWNjZXNzX21vZGUgUk8KIAlmaWVsZAlPVkVSUlVOCQkweDgwCi0JZmllbGQJU0hWQUxJRAkJMHg0MAkvKiBTaGFkZG93IExheWVyIG5vbi16ZXJvICovCisJZmllbGQJU0hWQUxJRAkJMHg0MAkvKiBTaGFkb3cgTGF5ZXIgbm9uLXplcm8gKi8KIAlmaWVsZAlFWFBfQUNUSVZFCTB4MTAJLyogU0NTSSBFeHBhbmRlciBBY3RpdmUgKi8KIAlmaWVsZAlDUkNWQUxFUlIJMHgwOAkvKiBDUkMgZG9lc24ndCBtYXRjaCAoVTMgb25seSkgKi8KIAlmaWVsZAlDUkNFTkRFUlIJMHgwNAkvKiBObyB0ZXJtaW5hbCBDUkMgcGFja2V0IChVMyBvbmx5KSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eC5zZXEgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4LnNlcQppbmRleCA1YTRjZmM5NS4uZTYwMDQxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eC5zZXEKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eC5zZXEKQEAgLTU3LDEwICs1NywxMCBAQAogICogYSBsYXRlciB0aW1lLiAgVGhpcyBwcm9ibGVtIGNhbm5vdCBiZSByZXNvbHZlZCBieSBob2xkaW5nIGEgc2luZ2xlIGVudHJ5CiAgKiBpbiBzY3JhdGNoIHJhbSBzaW5jZSBhIHJlY29ubmVjdGluZyB0YXJnZXQgY2FuIHJlcXVlc3Qgc2Vuc2UgYW5kIHRoaXMgd2lsbAogICogY3JlYXRlIHlldCBhbm90aGVyIFNDQiB3YWl0aW5nIGZvciBzZWxlY3Rpb24uICBUaGUgc29sdXRpb24gdXNlZCBoZXJlIGlzIHRvIAotICogdXNlIGJ5dGUgMjcgb2YgdGhlIFNDQiBhcyBhIHBzdWVkby1uZXh0IHBvaW50ZXIgYW5kIHRvIHRocmVhZCBhIGxpc3QKKyAqIHVzZSBieXRlIDI3IG9mIHRoZSBTQ0IgYXMgYSBwc2V1ZG8tbmV4dCBwb2ludGVyIGFuZCB0byB0aHJlYWQgYSBsaXN0CiAgKiBvZiBTQ0JzIHRoYXQgYXJlIGF3YWl0aW5nIHNlbGVjdGlvbi4gIFNpbmNlIDAtMHhmZSBhcmUgdmFsaWQgU0NCIGluZGV4ZXMsIAogICogU0NCX0xJU1RfTlVMTCBpcyAweGZmIHdoaWNoIGlzIG91dCBvZiByYW5nZS4gIEFuIGVudHJ5IGlzIGFsc28gYWRkZWQgdG8KLSAqIHRoaXMgbGlzdCBldmVyeXRpbWUgYSByZXF1ZXN0IHNlbnNlIG9jY3VycyBvciBhZnRlciBjb21wbGV0aW5nIGEgbm9uLXRhZ2dlZAorICogdGhpcyBsaXN0IGV2ZXJ5IHRpbWUgYSByZXF1ZXN0IHNlbnNlIG9jY3VycyBvciBhZnRlciBjb21wbGV0aW5nIGEgbm9uLXRhZ2dlZAogICogY29tbWFuZCBmb3Igd2hpY2ggYSBzZWNvbmQgU0NCIGhhcyBiZWVuIHF1ZXVlZC4gIFRoZSBzZXF1ZW5jZXIgd2lsbAogICogYXV0b21hdGljYWxseSBjb25zdW1lIHRoZSBlbnRyaWVzLgogICovCkBAIC03NTIsNyArNzUyLDcgQEAKIAogCS8qCiAJICogV2UgZmV0Y2ggYSAiY2FjaGVsaW5lIGFsaWduZWQiIGFuZCBzaXplZCBhbW91bnQgb2YgZGF0YQotCSAqIHNvIHdlIGRvbid0IGVuZCB1cCByZWZlcmVuY2luZyBhIG5vbi1leGlzdGFudCBwYWdlLgorCSAqIHNvIHdlIGRvbid0IGVuZCB1cCByZWZlcmVuY2luZyBhIG5vbi1leGlzdGVudCBwYWdlLgogCSAqIENhY2hlbGluZSBhbGlnbmVkIGlzIGluIHF1b3RlcyBiZWNhdXNlIHRoZSBrZXJuZWwgd2lsbAogCSAqIHNldCB0aGUgcHJlZmV0Y2ggYW1vdW50IHRvIGEgcmVhc29uYWJsZSBsZXZlbCBpZiB0aGUKIAkgKiBjYWNoZWxpbmUgc2l6ZSBpcyB1bmtub3duLgpAQCAtMTQ4NSw3ICsxNDg1LDcgQEAKICAqIFRoaXMgaXMgZG9uZSB0byBhbGxvdyB0aGUgaG9zdCB0byBzZW5kIG1lc3NhZ2VzIG91dHNpZGUgb2YgYW4gaWRlbnRpZnkKICAqIHNlcXVlbmNlIHdoaWxlIHByb3RlY3RpbmcgdGhlIHNlcWVuY2VyIGZyb20gdGVzdGluZyB0aGUgTUtfTUVTU0FHRSBiaXQKICAqIG9uIGFuIFNDQiB0aGF0IG1pZ2h0IG5vdCBiZSBmb3IgdGhlIGN1cnJlbnQgbmV4dXMuIChGb3IgZXhhbXBsZSwgYQotICogQkRSIG1lc3NhZ2UgaW4gcmVzcG9uY2UgdG8gYSBiYWQgcmVzZWxlY3Rpb24gd291bGQgbGVhdmUgdXMgcG9pbnRlZCB0bworICogQkRSIG1lc3NhZ2UgaW4gcmVzcG9uc2UgdG8gYSBiYWQgcmVzZWxlY3Rpb24gd291bGQgbGVhdmUgdXMgcG9pbnRlZCB0bwogICogYW4gU0NCIHRoYXQgZG9lc24ndCBoYXZlIGFueXRoaW5nIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgdGFyZ2V0KS4KICAqCiAgKiBPdGhlcndpc2UsIHRyZWF0IE1TR19PVVQgYXMgYSAxIGJ5dGUgbWVzc2FnZSB0byBzZW5kIChhYm9ydCwgYWJvcnQgdGFnLApAQCAtMTk5OSw3ICsxOTk5LDcgQEAKICAqIGZyb20gb3V0IHRvIGluLCB3YWl0IGFuIGFkZGl0aW9uYWwgZGF0YSByZWxlYXNlIGRlbGF5IGJlZm9yZSBjb250aW51aW5nLgogICovCiBjaGFuZ2VfcGhhc2U6Ci0JLyogV2FpdCBmb3IgcHJlY2VlZGluZyBJL08gc2Vzc2lvbiB0byBjb21wbGV0ZS4gKi8KKwkvKiBXYWl0IGZvciBwcmVjZWRpbmcgSS9PIHNlc3Npb24gdG8gY29tcGxldGUuICovCiAJdGVzdAlTQ1NJU0lHSSwgQUNLSSBqbnogLjsKIAogCS8qIENoYW5nZSB0aGUgcGhhc2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfY29yZS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9jb3JlLmMKaW5kZXggZTAyMWI0OC4uZGMyOGIwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9jb3JlLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9jb3JlLmMKQEAgLTQyNyw3ICs0MjcsNyBAQAogfQogI2VuZGlmCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKiBNaXNjZWxhbmVvdXMgU3VwcG9ydCBGdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKiogTWlzY2VsbGFuZW91cyBTdXBwb3J0IEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCiAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgc2VxdWVuY2VyIHJlcG9ydGVkIGEgcmVzaWR1YWwKICAqIGZvciB0aGlzIFNDQi90cmFuc2FjdGlvbi4KQEAgLTEyNDMsNyArMTI0Myw3IEBACiAJCSAqIHRoYXQgcmVxdWlyZXMgaG9zdCBhc3Npc3RhbmNlIGZvciBjb21wbGV0aW9uLgogCQkgKiBXaGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZSBwaGFzZShzKSwgd2Ugd2lsbCBiZQogCQkgKiBub3RpZmllZCBieSB0aGUgc2VxdWVuY2VyIGFmdGVyIGVhY2ggYnl0ZSBpcwotCQkgKiB0cmFuc2ZlcmVkIHNvIHdlIGNhbiB0cmFjayBidXMgcGhhc2UgY2hhbmdlcy4KKwkJICogdHJhbnNmZXJyZWQgc28gd2UgY2FuIHRyYWNrIGJ1cyBwaGFzZSBjaGFuZ2VzLgogCQkgKgogCQkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gYSBIT1NUX01TR19MT09QCiAJCSAqIGludGVycnVwdCwgaW5pdGlhbGl6ZSB0aGUgc3RhdGUgb2YgdGhlIGhvc3QgbWVzc2FnZQpAQCAtMTQ4Nyw3ICsxNDg3LDcgQEAKIAkJICAgICAgIHNjYnB0ciwgYWhjX2luYihhaGMsIEFSR18xKSwKIAkJICAgICAgIGFoYy0+c2NiX2RhdGEtPmhzY2JzW3NjYnB0cl0udGFnKTsKIAkJYWhjX2R1bXBfY2FyZF9zdGF0ZShhaGMpOwotCQlwYW5pYygiZm9yIHNhZnRleSIpOworCQlwYW5pYygiZm9yIHNhZmV0eSIpOwogCQlicmVhazsKIAl9CiAJY2FzZSBPVVRfT0ZfUkFOR0U6CkBAIC0xNzMzLDcgKzE3MzMsNyBAQAogCQkvKgogCQkgKiBBbHRob3VnaCB0aGUgZHJpdmVyIGRvZXMgbm90IGNhcmUgYWJvdXQgdGhlCiAJCSAqICdTZWxlY3Rpb24gaW4gUHJvZ3Jlc3MnIHN0YXR1cyBiaXQsIHRoZSBidXN5Ci0JCSAqIExFRCBkb2VzLiAgU0VMSU5HTyBpcyBvbmx5IGNsZWFyZWQgYnkgYSBzdWNjZXNzZnVsbAorCQkgKiBMRUQgZG9lcy4gIFNFTElOR08gaXMgb25seSBjbGVhcmVkIGJ5IGEgc3VjY2Vzc2Z1bAogCQkgKiBzZWxlY3Rpb24sIHNvIHdlIG11c3QgbWFudWFsbHkgY2xlYXIgaXQgdG8gaW5zdXJlCiAJCSAqIHRoZSBMRUQgdHVybnMgb2ZmIGp1c3QgaW5jYXNlIG5vIGZ1dHVyZSBzdWNjZXNzZnVsCiAJCSAqIHNlbGVjdGlvbnMgb2NjdXIgKGUuZy4gbm8gZGV2aWNlcyBvbiB0aGUgYnVzKS4KQEAgLTE5NDMsNyArMTk0Myw3IEBACiAJCQlpZiAobGFzdHBoYXNlICE9IFBfQlVTRlJFRSkgewogCQkJCS8qCiAJCQkJICogUmVuZWdvdGlhdGUgd2l0aCB0aGlzIGRldmljZSBhdCB0aGUKLQkJCQkgKiBuZXh0IG9wb3J0dW5pdHkganVzdCBpbiBjYXNlIHRoaXMgYnVzZnJlZQorCQkJCSAqIG5leHQgb3Bwb3J0dW5pdHkganVzdCBpbiBjYXNlIHRoaXMgYnVzZnJlZQogCQkJCSAqIGlzIGR1ZSB0byBhIG5lZ290aWF0aW9uIG1pc21hdGNoIHdpdGggdGhlCiAJCQkJICogZGV2aWNlLgogCQkJCSAqLwpAQCAtMjQ0Miw3ICsyNDQyLDcgQEAKIAogLyoKICAqIFVwZGF0ZSB0aGUgYml0bWFzayBvZiB0YXJnZXRzIGZvciB3aGljaCB0aGUgY29udHJvbGxlciBzaG91bGQKLSAqIG5lZ290aWF0ZSB3aXRoIGF0IHRoZSBuZXh0IGNvbnZlbmllbnQgb3BvcnR1bml0eS4gIFRoaXMgY3VycmVudGx5CisgKiBuZWdvdGlhdGUgd2l0aCBhdCB0aGUgbmV4dCBjb252ZW5pZW50IG9wcG9ydHVuaXR5LiAgVGhpcyBjdXJyZW50bHkKICAqIG1lYW5zIHRoZSBuZXh0IHRpbWUgd2Ugc2VuZCB0aGUgaW5pdGlhbCBpZGVudGlmeSBtZXNzYWdlcyBmb3IKICAqIGEgbmV3IHRyYW5zYWN0aW9uLgogICovCkBAIC00MTMxLDcgKzQxMzEsNyBAQAogCiAJCS8qCiAJCSAqIFJlcXVldWUgYWxsIHRhZ2dlZCBjb21tYW5kcyBmb3IgdGhpcyB0YXJnZXQKLQkJICogY3VycmVudGx5IGluIG91ciBwb3Nlc3Npb24gc28gdGhleSBjYW4gYmUKKwkJICogY3VycmVudGx5IGluIG91ciBwb3NzZXNzaW9uIHNvIHRoZXkgY2FuIGJlCiAJCSAqIGNvbnZlcnRlZCB0byB1bnRhZ2dlZCBjb21tYW5kcy4KIAkJICovCiAJCWFoY19zZWFyY2hfcWluZmlmbyhhaGMsIFNDQl9HRVRfVEFSR0VUKGFoYywgc2NiKSwKQEAgLTQ1ODEsNyArNDU4MSw3IEBACiAvKgogICogUmVzZXQgdGhlIGNvbnRyb2xsZXIgYW5kIHJlY29yZCBzb21lIGluZm9ybWF0aW9uIGFib3V0IGl0CiAgKiB0aGF0IGlzIG9ubHkgYXZhaWxhYmxlIGp1c3QgYWZ0ZXIgYSByZXNldC4gIElmICJyZWluaXQiIGlzCi0gKiBub24temVybywgdGhpcyByZXNldCBvY2N1cmVkIGFmdGVyIGluaXRpYWwgY29uZmlndXJhdGlvbgorICogbm9uLXplcm8sIHRoaXMgcmVzZXQgb2NjdXJyZWQgYWZ0ZXIgaW5pdGlhbCBjb25maWd1cmF0aW9uCiAgKiBhbmQgdGhlIGNhbGxlciByZXF1ZXN0cyB0aGF0IHRoZSBjaGlwIGJlIGZ1bGx5IHJlaW5pdGlhbGl6ZWQKICAqIHRvIGEgcnVuYWJsZSBzdGF0ZS4gIENoaXAgaW50ZXJydXB0cyBhcmUgKm5vdCogZW5hYmxlZCBhZnRlcgogICogYSByZWluaXRpYWxpemF0aW9uLiAgVGhlIGNhbGxlciBtdXN0IGVuYWJsZSBpbnRlcnJ1cHRzIHZpYQpAQCAtNDg5OSw3ICs0ODk5LDcgQEAKIAlhaGMtPm5leHRfcXVldWVkX3NjYiA9IGFoY19nZXRfc2NiKGFoYyk7CiAKIAkvKgotCSAqIE5vdGUgdGhhdCB3ZSB3ZXJlIHN1Y2Nlc3NmdWxsCisJICogTm90ZSB0aGF0IHdlIHdlcmUgc3VjY2Vzc2Z1bAogCSAqLwogCXJldHVybiAoMCk7IAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uYwppbmRleCA0YTM1OWJiLi5jNjI1MWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmMKQEAgLTI5NCw3ICsyOTQsNyBAQAogICogZHViaW91cyBhdCBiZXN0LiAgVG8gbXkga25vd2xlZGdlLCB0aGlzIG9wdGlvbiBoYXMgbmV2ZXIgYWN0dWFsbHkKICAqIHNvbHZlZCBhIFBDSSBwYXJpdHkgcHJvYmxlbSwgYnV0IG9uIGNlcnRhaW4gbWFjaGluZXMgd2l0aCBicm9rZW4gUENJCiAgKiBjaGlwc2V0IGNvbmZpZ3VyYXRpb25zIHdoZXJlIHN0cmF5IFBDSSB0cmFuc2FjdGlvbnMgd2l0aCBiYWQgcGFyaXR5IGFyZQotICogdGhlIG5vcm0gcmF0aGVyIHRoYW4gdGhlIGV4Y2VwdGlvbiwgdGhlIGVycm9yIG1lc3NhZ2VzIGNhbiBiZSBvdmVyd2VsbWluZy4KKyAqIHRoZSBub3JtIHJhdGhlciB0aGFuIHRoZSBleGNlcHRpb24sIHRoZSBlcnJvciBtZXNzYWdlcyBjYW4gYmUgb3ZlcndoZWxtaW5nLgogICogSXQncyBpbmNsdWRlZCBpbiB0aGUgZHJpdmVyIGZvciBjb21wbGV0ZW5lc3MuCiAgKiAgIDAJICAgPSBTaHV0IG9mZiBQQ0kgcGFyaXR5IGNoZWNrCiAgKiAgIG5vbi0wID0gcmV2ZXJzZSBwb2xhcml0eSBwY2kgcGFyaXR5IGNoZWNraW5nCkBAIC0xMzE4LDcgKzEzMTgsNyBAQAogCQl1c2VydGFncyA9IGFoY19saW51eF91c2VyX3RhZ2RlcHRoKGFoYywgZGV2aW5mbyk7CiAJCWlmICghd2FzX3F1ZXVpbmcpIHsKIAkJCS8qCi0JCQkgKiBTdGFydCBvdXQgYWdyZXNzaXZlbHkgYW5kIGFsbG93IG91cgorCQkJICogU3RhcnQgb3V0IGFnZ3Jlc3NpdmVseSBhbmQgYWxsb3cgb3VyCiAJCQkgKiBkeW5hbWljIHF1ZXVlIGRlcHRoIGFsZ29yaXRobSB0byB0YWtlCiAJCQkgKiBjYXJlIG9mIHRoZSByZXN0LgogCQkJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X3BjaS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9wY2kuYwppbmRleCAyYjExYTQyLi42OTE3YjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X3BjaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfcGNpLmMKQEAgLTc4OSw3ICs3ODksNyBAQAogCWFoYy0+YnVzX2ludHIgPSBhaGNfcGNpX2ludHI7CiAJYWhjLT5idXNfY2hpcF9pbml0ID0gYWhjX3BjaV9jaGlwX2luaXQ7CiAKLQkvKiBSZW1lYmVyIGhvdyB0aGUgY2FyZCB3YXMgc2V0dXAgaW4gY2FzZSB0aGVyZSBpcyBubyBTRUVQUk9NICovCisJLyogUmVtZW1iZXIgaG93IHRoZSBjYXJkIHdhcyBzZXR1cCBpbiBjYXNlIHRoZXJlIGlzIG5vIFNFRVBST00gKi8KIAlpZiAoKGFoY19pbmIoYWhjLCBIQ05UUkwpICYgUE9XUkROKSA9PSAwKSB7CiAJCWFoY19wYXVzZShhaGMpOwogCQlpZiAoKGFoYy0+ZmVhdHVyZXMgJiBBSENfVUxUUkEyKSAhPSAwKQpAQCAtODYwLDcgKzg2MCw3IEBACiAJfQogCiAJLyoKLQkgKiBXZSBjYW5ub3QgcGVyZm9ybSBVTFRSQSBzcGVlZHMgd2l0aG91dCB0aGUgcHJlc2Vuc2UKKwkgKiBXZSBjYW5ub3QgcGVyZm9ybSBVTFRSQSBzcGVlZHMgd2l0aG91dCB0aGUgcHJlc2VuY2UKIAkgKiBvZiB0aGUgZXh0ZXJuYWwgcHJlY2lzaW9uIHJlc2lzdG9yLgogCSAqLwogCWlmICgoYWhjLT5mZWF0dXJlcyAmIEFIQ19VTFRSQSkgIT0gMCkgewpAQCAtOTY5LDcgKzk2OSw3IEBACiB9CiAKIC8qCi0gKiBUZXN0IGZvciB0aGUgcHJlc2Vuc2Ugb2YgZXh0ZXJuYWwgc3JhbSBpbiBhbgorICogVGVzdCBmb3IgdGhlIHByZXNlbmNlIG9mIGV4dGVybmFsIHNyYW0gaW4gYW4KICAqICJ1bnNoYXJlZCIgY29uZmlndXJhdGlvbi4KICAqLwogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbV9ncmFtLnkgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vYWljYXNtX2dyYW0ueQppbmRleCBlNDA2NDQzLi5mMTU4NmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vYWljYXNtX2dyYW0ueQorKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vYWljYXNtX2dyYW0ueQpAQCAtODAzLDcgKzgwMyw3IEBACiB8CW1hY3JvX2FyZ2xpc3QgJywnIFRfQVJHCiAJewogCQlpZiAoJDEgPT0gMCkgewotCQkJc3RvcCgiQ29tbWEgd2l0aG91dCBwcmVjZWVkaW5nIGFyZ3VtZW50IGluIGFyZyBsaXN0IiwKKwkJCXN0b3AoIkNvbW1hIHdpdGhvdXQgcHJlY2VkaW5nIGFyZ3VtZW50IGluIGFyZyBsaXN0IiwKIAkJCSAgICAgRVhfREFUQUVSUik7CiAJCQkvKiBOT1RSRUFDSEVEICovCiAJCX0KQEAgLTEzMTksOCArMTMxOSw4IEBACiA7CiAKIAkvKgotCSAqIFRoaXMgZ3JhbW1lciBkaWZmZXJzIGZyb20gdGhlIG9uZSBpbiB0aGUgYWljN3h4eAotCSAqIHJlZmVyZW5jZSBtYW51YWwgc2luY2UgdGhlIGdyYW1tZXIgbGlzdGVkIHRoZXJlIGlzCisJICogVGhpcyBncmFtbWFyIGRpZmZlcnMgZnJvbSB0aGUgb25lIGluIHRoZSBhaWM3eHh4CisJICogcmVmZXJlbmNlIG1hbnVhbCBzaW5jZSB0aGUgZ3JhbW1hciBsaXN0ZWQgdGhlcmUgaXMKIAkgKiBhbWJpZ3VvdXMgYW5kIGNhdXNlcyBhIHNoaWZ0L3JlZHVjZSBjb25mbGljdC4KIAkgKiBJdCBhbHNvIHNlZW1zIG1vcmUgbG9naWNhbCBhcyB0aGUgImltbWVkaWF0ZSIKIAkgKiBhcmd1bWVudCBpcyBsaXN0ZWQgYXMgdGhlIHNlY29uZCBhcmcgbGlrZSB0aGUKQEAgLTE3OTksNyArMTc5OSw3IEBACiAJaW5zdHIgPSBzZXFfYWxsb2MoKTsKIAlmM19pbnN0ciA9ICZpbnN0ci0+Zm9ybWF0LmZvcm1hdDM7CiAJaWYgKGFkZHJlc3MtPnN5bWJvbCA9PSBOVUxMKSB7Ci0JCS8qICdkb3QnIHJlZmVycmVuY2UuICBVc2UgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gcG9pbnRlciAqLworCQkvKiAnZG90JyByZWZlcmVuY2UuICBVc2UgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gcG9pbnRlciAqLwogCQlhZGRyID0gaW5zdHJ1Y3Rpb25fcHRyICsgYWRkcmVzcy0+b2Zmc2V0OwogCX0gZWxzZSBpZiAoYWRkcmVzcy0+c3ltYm9sLT50eXBlID09IFVOSU5JVElBTElaRUQpIHsKIAkJLyogZm9yd2FyZCByZWZlcmVuY2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9haWNhc21fbWFjcm9fZ3JhbS55IGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbV9tYWNyb19ncmFtLnkKaW5kZXggZmY0NmFhNi4uNzA4MzI2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbV9tYWNyb19ncmFtLnkKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL2FpY2FzbV9tYWNyb19ncmFtLnkKQEAgLTExNSw3ICsxMTUsNyBAQAogfAltYWNyb19hcmdsaXN0ICcsJyBUX0FSRwogCXsKIAkJaWYgKCQxID09IDApIHsKLQkJCXN0b3AoIkNvbW1hIHdpdGhvdXQgcHJlY2VlZGluZyBhcmd1bWVudCBpbiBhcmcgbGlzdCIsCisJCQlzdG9wKCJDb21tYSB3aXRob3V0IHByZWNlZGluZyBhcmd1bWVudCBpbiBhcmcgbGlzdCIsCiAJCQkgICAgIEVYX0RBVEFFUlIpOwogCQkJLyogTk9UUkVBQ0hFRCAqLwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eF9vbGQuYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4X29sZC5jCmluZGV4IDRmZjYwYTAuLjViMjEyZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4X29sZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4X29sZC5jCkBAIC05MDUsNyArOTA1LDcgQEAKICAqIHByb2JsZW1zIHdpdGggYXJjaGl0ZWN0dXJlcyBJIGNhbid0IHRlc3Qgb24gKGJlY2F1c2UgSSBkb24ndCBoYXZlIG9uZSwKICAqIHN1Y2ggYXMgdGhlIEFscGhhIGJhc2VkIHN5c3RlbXMpIHdoaWNoIGhhcHBlbiB0byBnaXZlIGZhdWx0cyBmb3IKICAqIG5vbi1hbGlnbmVkIG1lbW9yeSBhY2Nlc3NlcywgY2FyZSB3YXMgdGFrZW4gdG8gYWxpZ24gdGhpcyBzdHJ1Y3R1cmUKLSAqIGluIGEgd2F5IHRoYXQgZ2F1cmFudGVlZCBhbGwgYWNjZXNzZXMgbGFyZ2VyIHRoYW4gOCBiaXRzIHdlcmUgYWxpZ25lZAorICogaW4gYSB3YXkgdGhhdCBndWFyYW50ZWVkIGFsbCBhY2Nlc3NlcyBsYXJnZXIgdGhhbiA4IGJpdHMgd2VyZSBhbGlnbmVkCiAgKiBvbiB0aGUgYXBwcm9wcmlhdGUgYm91bmRhcnkuICBJdCdzIGFsc28gb3JnYW5pemVkIHRvIHRyeSBhbmQgYmUgbW9yZQogICogY2FjaGUgbGluZSBlZmZpY2llbnQuICBCZSBjYXJlZnVsIHdoZW4gY2hhbmdpbmcgdGhpcyBsZXN0IHlvdSBtaWdodCBodXJ0CiAgKiBvdmVyYWxsIHBlcmZvcm1hbmNlIGFuZCBicmluZyBkb3duIHRoZSB3cmF0aCBvZiB0aGUgbWFzc2VzLgpAQCAtMTE4MCw3ICsxMTgwLDcgQEAKICAqIHRoZSBjYXJkJ3MgcmVnaXN0ZXJzIGluIGEgaGV4IGR1bXAgZm9ybWF0IHRhaWxvcmVkIHRvIGVhY2ggbW9kZWwgb2YKICAqIGNvbnRyb2xsZXIuCiAgKiAKLSAqIE5PVEU6IFRIRSBDT05UUk9MTEVSIElTIExFRlQgSU4gQU4gVU5VU0VBQkxFIFNUQVRFIEJZIFRISVMgT1BUSU9OLgorICogTk9URTogVEhFIENPTlRST0xMRVIgSVMgTEVGVCBJTiBBTiBVTlVTQUJMRSBTVEFURSBCWSBUSElTIE9QVElPTi4KICAqICAgICAgIFlPVSBDQU5OT1QgQk9PVCBVUCBXSVRIIFRISVMgT1BUSU9OLCBJVCBJUyBGT1IgREVCVUdHSU5HIFBVUlBPU0VTCiAgKiAgICAgICBPTkxZCiAgKi8KQEAgLTM0NjcsNyArMzQ2Nyw3IEBACiAgIC8qIFR1cm4gb2ZmIHRoZSBidXMnIGN1cnJlbnQgb3BlcmF0aW9ucywgYWZ0ZXIgYWxsLCB3ZSBzaG91bGRuJ3QgaGF2ZSBhbnkKICAgICogdmFsaWQgY29tbWFuZHMgbGVmdCB0byBjYXVzZSBhIFJTRUxJIGFuZCBTRUxPIG9uY2Ugd2UndmUgdG9zc2VkIHRoZQogICAgKiBidXMgYXdheSB3aXRoIHRoaXMgcmVzZXQsIHNvIHdlIG1pZ2h0IGFzIHdlbGwgc2h1dCBkb3duIHRoZSBzZXF1ZW5jZXIKLSAgICogdW50aWwgdGhlIGJ1cyBpcyByZXN0YXJ0ZWQgYXMgb3Bwb3NzZWQgdG8gc2F2aW5nIHRoZSBjdXJyZW50IHNldHRpbmdzCisgICAqIHVudGlsIHRoZSBidXMgaXMgcmVzdGFydGVkIGFzIG9wcG9zZWQgdG8gc2F2aW5nIHRoZSBjdXJyZW50IHNldHRpbmdzCiAgICAqIGFuZCByZXN0b3JpbmcgdGhlbSAod2hpY2ggbWFrZXMgbm8gc2Vuc2UgdG8gbWUpLiAqLwogCiAgIC8qIFR1cm4gb24gdGhlIGJ1cyByZXNldC4gKi8KQEAgLTQwNzAsNyArNDA3MCw3IEBACiAgICAgICAgICAgICBhaWNfZGV2LT5tYXhfcV9kZXB0aCA9IGFpY19kZXYtPnRlbXBfcV9kZXB0aCA9IDE7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogV2Ugc2V0IHRoaXMgY29tbWFuZCB1cCBhcyBhIGJ1cyBkZXZpY2UgcmVzZXQuICBIb3dldmVyLCB3ZSBoYXZlCi0gICAgICAgICAgICAgKiB0byBjbGVhciB0aGUgdGFnIHR5cGUgYXMgaXQncyBjYXVzaW5nIHVzIHByb2JsZW1zLiAgV2Ugc2hvdWxkbnQKKyAgICAgICAgICAgICAqIHRvIGNsZWFyIHRoZSB0YWcgdHlwZSBhcyBpdCdzIGNhdXNpbmcgdXMgcHJvYmxlbXMuICBXZSBzaG91bGRuJ3QKICAgICAgICAgICAgICAqIGhhdmUgdG8gd29ycnkgYWJvdXQgYW55IG90aGVyIGNvbW1hbmRzIGJlaW5nIGFjdGl2ZSwgc2luY2UgaWYKICAgICAgICAgICAgICAqIHRoZSBkZXZpY2UgaXMgcmVmdXNpbmcgdGFnZ2VkIGNvbW1hbmRzLCB0aGlzIHNob3VsZCBiZSB0aGUKICAgICAgICAgICAgICAqIGZpcnN0IHRhZ2dlZCBjb21tYW5kIHNlbnQgdG8gdGhlIGRldmljZSwgaG93ZXZlciwgd2UgZG8gaGF2ZQpAQCAtOTc0OCw3ICs5NzQ4LDcgQEAKICAgICB9CiAKICAgICAvKgotICAgICAqIFdlIGFyZSBjb21taXRlZCBub3csIGV2ZXJ5dGhpbmcgaGFzIGJlZW4gY2hlY2tlZCBhbmQgdGhpcyBjYXJkCisgICAgICogV2UgYXJlIGNvbW1pdHRlZCBub3csIGV2ZXJ5dGhpbmcgaGFzIGJlZW4gY2hlY2tlZCBhbmQgdGhpcyBjYXJkCiAgICAgICogaGFzIGJlZW4gZm91bmQsIG5vdyB3ZSBqdXN0IHNldCBpdCB1cAogICAgICAqLwogCkBAIC05OTA2LDcgKzk5MDYsNyBAQAogICAgKiAgMjogQWxsIFBDSSBjb250cm9sbGVycyB3aXRoIEJJT1NfRU5BQkxFRCBuZXh0LCBhY2NvcmRpbmcgdG8gQklPUwogICAgKiAgICAgYWRkcmVzcywgZ29pbmcgZnJvbSBsb3dlc3QgdG8gaGlnaGVzdC4KICAgICogIDM6IFJlbWFpbmluZyBWTEIvRUlTQSBjb250cm9sbGVycyBnb2luZyBpbiBzbG90IG9yZGVyLgotICAgKiAgNDogUmVtYWluaW5nIFBDSSBjb250cm9sbGVycywgZ29pbmcgaW4gUENJIGRldmljZSBvcmRlciAocmV2ZXJzYWJsZSkKKyAgICogIDQ6IFJlbWFpbmluZyBQQ0kgY29udHJvbGxlcnMsIGdvaW5nIGluIFBDSSBkZXZpY2Ugb3JkZXIgKHJldmVyc2libGUpCiAgICAqLwogCiAgIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4X29sZC9haWM3eHh4LnNlcSBiL2RyaXZlcnMvc2NzaS9haWM3eHh4X29sZC9haWM3eHh4LnNlcQppbmRleCAxNTY1YmU5Li44MjNmZjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eF9vbGQvYWljN3h4eC5zZXEKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHhfb2xkL2FpYzd4eHguc2VxCkBAIC01MSw3ICs1MSw3IEBACiAgKiB1c2UgYnl0ZSAyNyBvZiB0aGUgU0NCIGFzIGEgcHNldWRvLW5leHQgcG9pbnRlciBhbmQgdG8gdGhyZWFkIGEgbGlzdAogICogb2YgU0NCcyB0aGF0IGFyZSBhd2FpdGluZyBzZWxlY3Rpb24uICBTaW5jZSAwLTB4ZmUgYXJlIHZhbGlkIFNDQiBpbmRleGVzLCAKICAqIFNDQl9MSVNUX05VTEwgaXMgMHhmZiB3aGljaCBpcyBvdXQgb2YgcmFuZ2UuICBBbiBlbnRyeSBpcyBhbHNvIGFkZGVkIHRvCi0gKiB0aGlzIGxpc3QgZXZlcnl0aW1lIGEgcmVxdWVzdCBzZW5zZSBvY2N1cnMgb3IgYWZ0ZXIgY29tcGxldGluZyBhIG5vbi10YWdnZWQKKyAqIHRoaXMgbGlzdCBldmVyeSB0aW1lIGEgcmVxdWVzdCBzZW5zZSBvY2N1cnMgb3IgYWZ0ZXIgY29tcGxldGluZyBhIG5vbi10YWdnZWQKICAqIGNvbW1hbmQgZm9yIHdoaWNoIGEgc2Vjb25kIFNDQiBoYXMgYmVlbiBxdWV1ZWQuICBUaGUgc2VxdWVuY2VyIHdpbGwKICAqIGF1dG9tYXRpY2FsbHkgY29uc3VtZSB0aGUgZW50cmllcy4KICAqLwpAQCAtNjk2LDcgKzY5Niw3IEBACiAgKiBUaGlzIGlzIGRvbmUgdG8gYWxsb3cgdGhlIGhzb3QgdG8gc2VuZCBtZXNzYWdlcyBvdXRzaWRlIG9mIGFuIGlkZW50aWZ5CiAgKiBzZXF1ZW5jZSB3aGlsZSBwcm90ZWN0aW5nIHRoZSBzZXFlbmNlciBmcm9tIHRlc3RpbmcgdGhlIE1LX01FU1NBR0UgYml0CiAgKiBvbiBhbiBTQ0IgdGhhdCBtaWdodCBub3QgYmUgZm9yIHRoZSBjdXJyZW50IG5leHVzLiAoRm9yIGV4YW1wbGUsIGEKLSAqIEJEUiBtZXNzYWdlIGluIHJlc3BvbmNlIHRvIGEgYmFkIHJlc2VsZWN0aW9uIHdvdWxkIGxlYXZlIHVzIHBvaW50ZWQgdG8KKyAqIEJEUiBtZXNzYWdlIGluIHJlc3BvbnNlIHRvIGEgYmFkIHJlc2VsZWN0aW9uIHdvdWxkIGxlYXZlIHVzIHBvaW50ZWQgdG8KICAqIGFuIFNDQiB0aGF0IGRvZXNuJ3QgaGF2ZSBhbnl0aGluZyB0byBkbyB3aXRoIHRoZSBjdXJyZW50IHRhcmdldCkuCiAgKiBPdGhlcndpc2UsIHRyZWF0IE1TR19PVVQgYXMgYSAxIGJ5dGUgbWVzc2FnZSB0byBzZW5kIChhYm9ydCwgYWJvcnQgdGFnLAogICogYnVzIGRldmljZSByZXNldCkuCkBAIC03MTYsOCArNzE2LDggQEAKIAl9IGVsc2UgewogCQlhbmQJU0lOREVYLDB4NyxTQ0JfVENMOwkvKiBsdW4gKi8KIAl9Ci0JYW5kCUEsRElTQ0VOQixTQ0JfQ09OVFJPTDsJLyogbWFzayBvZmYgZGlzY29ubmVjdCBwcml2bGVkZ2UgKi8KLQlvcglTSU5ERVgsQTsJCS8qIG9yIGluIGRpc2Nvbm5lY3QgcHJpdmxlZGdlICovCisJYW5kCUEsRElTQ0VOQixTQ0JfQ09OVFJPTDsJLyogbWFzayBvZmYgZGlzY29ubmVjdCBwcml2aWxlZ2UgKi8KKwlvcglTSU5ERVgsQTsJCS8qIG9yIGluIGRpc2Nvbm5lY3QgcHJpdmlsZWdlICovCiAJb3IJU0lOREVYLE1TR19JREVOVElGWUZMQUc7CiBwX21lc2dvdXRfbWtfbWVzc2FnZToKIAl0ZXN0CVNDQl9DT05UUk9MLE1LX01FU1NBR0UgIGp6IHBfbWVzZ291dF90YWc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X3JlZ19kZWYuaCBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfcmVnX2RlZi5oCmluZGV4IDQwMjczYTcuLmRkNmNjODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfcmVnX2RlZi5oCisrKyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfcmVnX2RlZi5oCkBAIC0yMTM0LDcgKzIxMzQsNyBAQAogKiBUaGUgaG9zdCBhY2Nlc3NlcyB0aGlzIHNjcmF0Y2ggaW4gYSBkaWZmZXJlbnQgbWFubmVyIGZyb20gdGhlCiAqIGxpbmsgc2VxdWVuY2VyLiBUaGUgc2VxdWVuY2VyIGhhcyB0byB1c2UgTFNFUSByZWdpc3RlcnMKICogTG1TQ1JQQUdFIGFuZCBMbU1uU0NSUEFHRSB0byBhY2Nlc3MgdGhlIHNjcmF0Y2ggbWVtb3J5LiBBIGZsYXQKLSogbWFwcGluZyBvZiB0aGUgc2NyYXRjaCBtZW1vcnkgaXMgYXZhbGlhYmxlIGZvciBzb2Z0d2FyZQorKiBtYXBwaW5nIG9mIHRoZSBzY3JhdGNoIG1lbW9yeSBpcyBhdmFpbGFibGUgZm9yIHNvZnR3YXJlCiAqIGNvbnZlbmllbmNlIGFuZCB0byBwcmV2ZW50IGNvcnJ1cHRpb24gd2hpbGUgdGhlIHNlcXVlbmNlciBpcwogKiBydW5uaW5nLiBUaGlzIG1lbW9yeSBpcyBtYXBwZWQgb250byBhZGRyZXNzZXMgODAwaCAtIDlGRmguCiAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL2Fjb3Juc2NzaS5jIGIvZHJpdmVycy9zY3NpL2FybS9hY29ybnNjc2kuYwppbmRleCBlYzE2NjcyLi5jNDU0ZTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2Fjb3Juc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vYWNvcm5zY3NpLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogICovCiAjZGVmaW5lIFRJTUVPVVRfVElNRSAxMAogLyoKLSAqIERlZmluZSB0aGlzIGlmIHlvdSB3YW50IHRvIGhhdmUgdmVyYm9zZSBleHBsYWluYXRpb24gb2YgU0NTSQorICogRGVmaW5lIHRoaXMgaWYgeW91IHdhbnQgdG8gaGF2ZSB2ZXJib3NlIGV4cGxhbmF0aW9uIG9mIFNDU0kKICAqIHN0YXR1cy9tZXNzYWdlcy4KICAqLwogI3VuZGVmIENPTkZJR19BQ09STlNDU0lfQ09OU1RBTlRTCkBAIC0xNTYxLDcgKzE1NjEsNyBAQAogCS8qCiAJICogSWYgd2Ugd2VyZSBuZWdvY2lhdGluZyBzeW5jIHRyYW5zZmVyLCB3ZSBkb24ndCB5ZXQga25vdyBpZgogCSAqIHRoaXMgUkVKRUNUIGlzIGZvciB0aGUgc3luYyB0cmFuc2ZlciBvciBmb3IgdGhlIHRhZ2dlZCBxdWV1ZS93aWRlCi0JICogdHJhbnNmZXIuICBSZS1pbml0aWF0ZSBzeW5jIHRyYW5zZmVyIG5lZ29jaWF0aW9uIG5vdywgYW5kIGlmCisJICogdHJhbnNmZXIuICBSZS1pbml0aWF0ZSBzeW5jIHRyYW5zZmVyIG5lZ290aWF0aW9uIG5vdywgYW5kIGlmCiAJICogd2UgZ290IGEgUkVKRUNUIGluIHJlc3BvbnNlIHRvIFNEVFIsIHRoZW4gaXQnbGwgYmUgc2V0IHRvIERPTkUuCiAJICovCiAJaWYgKGhvc3QtPmRldmljZVtob3N0LT5TQ3BudC0+ZGV2aWNlLT5pZF0uc3luY19zdGF0ZSA9PSBTWU5DX1NFTlRfUkVRVUVTVCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vYWNvcm5zY3NpLmggYi9kcml2ZXJzL3Njc2kvYXJtL2Fjb3Juc2NzaS5oCmluZGV4IDhkMjE3MmEuLjAxYmM3MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vYWNvcm5zY3NpLmgKKysrIGIvZHJpdmVycy9zY3NpL2FybS9hY29ybnNjc2kuaApAQCAtMjIzLDggKzIyMyw4IEBACiAgKiBTeW5jaHJvbm91cyB0cmFuc2ZlciBzdGF0ZQogICovCiB0eXBlZGVmIGVudW0gewkJCQkJLyogU3luY2hyb25vdXMgdHJhbnNmZXIgc3RhdGUJCSovCi0gICAgU1lOQ19BU1lOQ0hST05PVVMsCQkJCS8qIGRvbid0IG5lZ29jaWF0ZSBzeW5jaHJvbm91cyB0cmFuc2ZlcnMqLwotICAgIFNZTkNfTkVHT0NJQVRFLAkJCQkvKiBzdGFydCBuZWdvY2lhdGlvbgkJCSovCisgICAgU1lOQ19BU1lOQ0hST05PVVMsCQkJCS8qIGRvbid0IG5lZ290aWF0ZSBzeW5jaHJvbm91cyB0cmFuc2ZlcnMqLworICAgIFNZTkNfTkVHT0NJQVRFLAkJCQkvKiBzdGFydCBuZWdvdGlhdGlvbgkJCSovCiAgICAgU1lOQ19TRU5UX1JFUVVFU1QsCQkJCS8qIHNlbnQgU0RUUiBtZXNzYWdlCQkJKi8KICAgICBTWU5DX0NPTVBMRVRFRCwJCQkJLyogcmVjZWl2ZWQgU0RUUiByZXBseQkJCSovCiB9IHN5bmN4ZmVyX3Q7CkBAIC0zMjIsNyArMzIyLDcgQEAKICAgICAvKiBwZXItZGV2aWNlIGluZm8gKi8KICAgICBzdHJ1Y3QgewogCXVuc2lnbmVkIGNoYXIJc3luY194ZmVyOwkJLyogc3luY2hyb25vdXMgdHJhbnNmZXIgKFNCSUMgdmFsdWUpCSovCi0Jc3luY3hmZXJfdAlzeW5jX3N0YXRlOwkJLyogc3luYyB4ZmVyIG5lZ29jaWF0aW9uIHN0YXRlCQkqLworCXN5bmN4ZmVyX3QJc3luY19zdGF0ZTsJCS8qIHN5bmMgeGZlciBuZWdvdGlhdGlvbiBzdGF0ZQkJKi8KIAl1bnNpZ25lZCBjaGFyCWRpc2Nvbm5lY3Rfb2s6MTsJLyogZGV2aWNlIGNhbiBkaXNjb25uZWN0CQkqLwogICAgIH0gZGV2aWNlWzhdOwogICAgIHVuc2lnbmVkIGxvbmcJYnVzeWx1bnNbNjQgLyBzaXplb2YodW5zaWduZWQgbG9uZyldOy8qIGFycmF5IG9mIGJpdHMgaW5kaWNhdGluZyBMVU5zIGJ1c3kJKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vYXJ4ZXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9hcm0vYXJ4ZXNjc2kuYwppbmRleCAyODM2ZmUyLi5hNzUwYWE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2FyeGVzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2FybS9hcnhlc2NzaS5jCkBAIC0yMjgsNyArMjI4LDcgQEAKICAqIFBhcmFtcyAgOiBidWZmZXIgLSBhIGJ1ZmZlciB0byB3cml0ZSBpbmZvcm1hdGlvbiB0bwogICoJICAgICBzdGFydCAgLSBhIHBvaW50ZXIgaW50byB0aGlzIGJ1ZmZlciBzZXQgYnkgdGhpcyByb3V0aW5lIHRvIHRoZSBzdGFydAogICoJCSAgICAgIG9mIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbi4KLSAqCSAgICAgb2Zmc2V0IC0gb2Zmc2V0IGludG8gaW5mb3JtYXRpb24gdGhhdCB3ZSBoYXZlIHJlYWQgdXB0by4KKyAqCSAgICAgb2Zmc2V0IC0gb2Zmc2V0IGludG8gaW5mb3JtYXRpb24gdGhhdCB3ZSBoYXZlIHJlYWQgdXAgdG8uCiAgKgkgICAgIGxlbmd0aCAtIGxlbmd0aCBvZiBidWZmZXIKICAqCSAgICAgaG9zdF9ubyAtIGhvc3QgbnVtYmVyIHRvIHJldHVybiBpbmZvcm1hdGlvbiBmb3IKICAqCSAgICAgaW5vdXQgIC0gMCBmb3IgcmVhZGluZywgMSBmb3Igd3JpdGluZy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzIuYyBiL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzIuYwppbmRleCBjOTkwMmI1Li41NDc5ODdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8yLmMKKysrIGIvZHJpdmVycy9zY3NpL2FybS9jdW1hbmFfMi5jCkBAIC0zNDQsNyArMzQ0LDcgQEAKICAqIFBhcmFtcyAgIDogYnVmZmVyIC0gYSBidWZmZXIgdG8gd3JpdGUgaW5mb3JtYXRpb24gdG8KICAqCSAgICAgIHN0YXJ0ICAtIGEgcG9pbnRlciBpbnRvIHRoaXMgYnVmZmVyIHNldCBieSB0aGlzIHJvdXRpbmUgdG8gdGhlIHN0YXJ0CiAgKgkJICAgICAgIG9mIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbi4KLSAqCSAgICAgIG9mZnNldCAtIG9mZnNldCBpbnRvIGluZm9ybWF0aW9uIHRoYXQgd2UgaGF2ZSByZWFkIHVwdG8uCisgKgkgICAgICBvZmZzZXQgLSBvZmZzZXQgaW50byBpbmZvcm1hdGlvbiB0aGF0IHdlIGhhdmUgcmVhZCB1cCB0by4KICAqCSAgICAgIGxlbmd0aCAtIGxlbmd0aCBvZiBidWZmZXIKICAqCSAgICAgIGhvc3Rfbm8gLSBob3N0IG51bWJlciB0byByZXR1cm4gaW5mb3JtYXRpb24gZm9yCiAgKgkgICAgICBpbm91dCAgLSAwIGZvciByZWFkaW5nLCAxIGZvciB3cml0aW5nLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FybS9lZXNveC5jIGIvZHJpdmVycy9zY3NpL2FybS9lZXNveC5jCmluZGV4IGQ4NDM1MTMuLmVkZmQxMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vZWVzb3guYworKysgYi9kcml2ZXJzL3Njc2kvYXJtL2Vlc294LmMKQEAgLTQyOSw3ICs0MjksNyBAQAogICogUGFyYW1zICAgOiBidWZmZXIgLSBhIGJ1ZmZlciB0byB3cml0ZSBpbmZvcm1hdGlvbiB0bwogICoJICAgICAgc3RhcnQgIC0gYSBwb2ludGVyIGludG8gdGhpcyBidWZmZXIgc2V0IGJ5IHRoaXMgcm91dGluZSB0byB0aGUgc3RhcnQKICAqCQkgICAgICAgb2YgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uLgotICoJICAgICAgb2Zmc2V0IC0gb2Zmc2V0IGludG8gaW5mb3JtYXRpb24gdGhhdCB3ZSBoYXZlIHJlYWQgdXB0by4KKyAqCSAgICAgIG9mZnNldCAtIG9mZnNldCBpbnRvIGluZm9ybWF0aW9uIHRoYXQgd2UgaGF2ZSByZWFkIHVwIHRvLgogICoJICAgICAgbGVuZ3RoIC0gbGVuZ3RoIG9mIGJ1ZmZlcgogICoJICAgICAgaG9zdF9ubyAtIGhvc3QgbnVtYmVyIHRvIHJldHVybiBpbmZvcm1hdGlvbiBmb3IKICAqCSAgICAgIGlub3V0ICAtIDAgZm9yIHJlYWRpbmcsIDEgZm9yIHdyaXRpbmcuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL2ZhczIxNi5jIGIvZHJpdmVycy9zY3NpL2FybS9mYXMyMTYuYwppbmRleCAyYjJjZTIxLi5lODVjNDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2ZhczIxNi5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vZmFzMjE2LmMKQEAgLTIxMTksNyArMjExOSw3IEBACiAJICogZXhlY3V0ZWQsIHVubGVzcyBhIHRhcmdldCBjb25uZWN0cyB0byB1cy4KIAkgKi8KIAlpZiAoaW5mby0+cmVxU0NwbnQpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgInNjc2klZC4lYzogbG9vc2luZyByZXF1ZXN0IGNvbW1hbmRcbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNjc2klZC4lYzogbG9zaW5nIHJlcXVlc3QgY29tbWFuZFxuIiwKIAkJCWluZm8tPmhvc3QtPmhvc3Rfbm8sICcwJyArIFNDcG50LT5kZXZpY2UtPmlkKTsKIAlpbmZvLT5yZXFTQ3BudCA9IFNDcG50OwogfQpAQCAtMjI5NCw3ICsyMjk0LDcgQEAKIAkJICogSWYgd2UgZG9uJ3QgaGF2ZSBhbiBJUlEsIHRoZW4gd2UgbXVzdCBwb2xsIHRoZSBjYXJkIGZvcgogCQkgKiBpdCdzIGludGVycnVwdCwgYW5kIHVzZSB0aGF0IHRvIGNhbGwgdGhpcyBkcml2ZXIncwogCQkgKiBpbnRlcnJ1cHQgcm91dGluZS4gIFRoYXQgd2F5LCB3ZSBrZWVwIHRoZSBjb21tYW5kCi0JCSAqIHByb2dyZXNzaW5nLiAgTWF5YmUgd2UgY2FuIGFkZCBzb21lIGludGVsaWdlbmNlIGhlcmUKKwkJICogcHJvZ3Jlc3NpbmcuICBNYXliZSB3ZSBjYW4gYWRkIHNvbWUgaW50ZWxsaWdlbmNlIGhlcmUKIAkJICogYW5kIGdvIHRvIHNsZWVwIGlmIHdlIGtub3cgdGhhdCB0aGUgZGV2aWNlIGlzIGdvaW5nCiAJCSAqIHRvIGJlIHNvbWUgdGltZSAoZWcsIGRpc2Nvbm5lY3RlZCkuCiAJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FybS9mYXMyMTYuaCBiL2RyaXZlcnMvc2NzaS9hcm0vZmFzMjE2LmgKaW5kZXggZjMwZjhkNi4uODRiNzEyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9mYXMyMTYuaAorKysgYi9kcml2ZXJzL3Njc2kvYXJtL2ZhczIxNi5oCkBAIC0yMDMsMTEgKzIwMywxMSBAQAogfSBmYXNkbWF0eXBlX3Q7CiAKIHR5cGVkZWYgZW51bSB7Ci0JbmVnX3dhaXQsCQkJCQkvKiBOZWdvY2lhdGUgd2l0aCBkZXZpY2UJCSovCi0JbmVnX2lucHJvZ3Jlc3MsCQkJCQkvKiBOZWdvY2lhdGlvbiBzZW50CQkJKi8KLQluZWdfY29tcGxldGUsCQkJCQkvKiBOZWdvY2lhdGlvbiBjb21wbGV0ZQkJCSovCi0JbmVnX3Rhcmdjb21wbGV0ZSwJCQkJLyogVGFyZ2V0IGNvbXBsZXRlZCBuZWdvY2lhdGlvbgkJKi8KLQluZWdfaW52YWxpZAkJCQkJLyogTmVnb2NpYXRpb24gbm90IHN1cHBvcnRlZAkJKi8KKwluZWdfd2FpdCwJCQkJCS8qIE5lZ290aWF0ZSB3aXRoIGRldmljZQkJKi8KKwluZWdfaW5wcm9ncmVzcywJCQkJCS8qIE5lZ290aWF0aW9uIHNlbnQJCQkqLworCW5lZ19jb21wbGV0ZSwJCQkJCS8qIE5lZ290aWF0aW9uIGNvbXBsZXRlCQkJKi8KKwluZWdfdGFyZ2NvbXBsZXRlLAkJCQkvKiBUYXJnZXQgY29tcGxldGVkIG5lZ290aWF0aW9uCQkqLworCW5lZ19pbnZhbGlkCQkJCQkvKiBOZWdvdGlhdGlvbiBub3Qgc3VwcG9ydGVkCQkqLwogfSBuZWdfdDsKIAogI2RlZmluZSBNQUdJQwkweDQ0MTI5NmJkVUwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vcG93ZXJ0ZWMuYyBiL2RyaXZlcnMvc2NzaS9hcm0vcG93ZXJ0ZWMuYwppbmRleCBlMjI5N2I0Li45Mjc0YzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL3Bvd2VydGVjLmMKKysrIGIvZHJpdmVycy9zY3NpL2FybS9wb3dlcnRlYy5jCkBAIC0yMzIsNyArMjMyLDcgQEAKICAqIFBhcmFtcyAgIDogYnVmZmVyICAtIGEgYnVmZmVyIHRvIHdyaXRlIGluZm9ybWF0aW9uIHRvCiAgKgkgICAgICBzdGFydCAgIC0gYSBwb2ludGVyIGludG8gdGhpcyBidWZmZXIgc2V0IGJ5IHRoaXMgcm91dGluZSB0byB0aGUgc3RhcnQKICAqCQkgICAgICAgIG9mIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbi4KLSAqCSAgICAgIG9mZnNldCAgLSBvZmZzZXQgaW50byBpbmZvcm1hdGlvbiB0aGF0IHdlIGhhdmUgcmVhZCB1cHRvLgorICoJICAgICAgb2Zmc2V0ICAtIG9mZnNldCBpbnRvIGluZm9ybWF0aW9uIHRoYXQgd2UgaGF2ZSByZWFkIHVwIHRvLgogICoJICAgICAgbGVuZ3RoICAtIGxlbmd0aCBvZiBidWZmZXIKICAqCSAgICAgIGlub3V0ICAgLSAwIGZvciByZWFkaW5nLCAxIGZvciB3cml0aW5nLgogICogUmV0dXJucyAgOiBsZW5ndGggb2YgZGF0YSB3cml0dGVuIHRvIGJ1ZmZlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hdGFyaV9OQ1I1MzgwLmMgYi9kcml2ZXJzL3Njc2kvYXRhcmlfTkNSNTM4MC5jCmluZGV4IDg4YjI5MjguLmVhNDM5ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hdGFyaV9OQ1I1MzgwLmMKKysrIGIvZHJpdmVycy9zY3NpL2F0YXJpX05DUjUzODAuYwpAQCAtNDY0LDcgKzQ2NCw3IEBACiAgKgogICogUGFyYW1ldGVyczogU2NzaV9DbW5kICpjbWQKICAqICAgIFRoZSBjb21tYW5kIHRvIHdvcmsgb24uIFRoZSBmaXJzdCBzY2F0dGVyIGJ1ZmZlcidzIGRhdGEgYXJlCi0gKiAgICBhc3N1bWVkIHRvIGJlIGFscmVhZHkgdHJhbnNmZXJlZCBpbnRvIHB0ci90aGlzX3Jlc2lkdWFsLgorICogICAgYXNzdW1lZCB0byBiZSBhbHJlYWR5IHRyYW5zZmVycmVkIGludG8gcHRyL3RoaXNfcmVzaWR1YWwuCiAgKi8KIAogc3RhdGljIHZvaWQgbWVyZ2VfY29udGlndW91c19idWZmZXJzKFNjc2lfQ21uZCAqY21kKQpAQCAtMTcyMCw3ICsxNzIwLDcgQEAKICAqCWJ5dGVzIHRvIHRyYW5zZmVyLCAqKmRhdGEgLSBwb2ludGVyIHRvIGRhdGEgcG9pbnRlci4KICAqCiAgKiBSZXR1cm5zIDogLTEgd2hlbiBkaWZmZXJlbnQgcGhhc2UgaXMgZW50ZXJlZCB3aXRob3V0IHRyYW5zZmVycmluZwotICoJbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMsIDAgaWYgYWxsIGJ5dGVzIGFyZSB0cmFuc2ZlcmVkIG9yIGV4aXQKKyAqCW1heGltdW0gbnVtYmVyIG9mIGJ5dGVzLCAwIGlmIGFsbCBieXRlcyBhcmUgdHJhbnNmZXJyZWQgb3IgZXhpdAogICoJaXMgaW4gc2FtZSBwaGFzZS4KICAqCiAgKglBbHNvLCAqcGhhc2UsICpjb3VudCwgKmRhdGEgYXJlIG1vZGlmaWVkIGluIHBsYWNlLgpAQCAtMTkxMSw3ICsxOTExLDcgQEAKICAqCWJ5dGVzIHRvIHRyYW5zZmVyLCAqKmRhdGEgLSBwb2ludGVyIHRvIGRhdGEgcG9pbnRlci4KICAqCiAgKiBSZXR1cm5zIDogLTEgd2hlbiBkaWZmZXJlbnQgcGhhc2UgaXMgZW50ZXJlZCB3aXRob3V0IHRyYW5zZmVycmluZwotICoJbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMsIDAgaWYgYWxsIGJ5dGVzIG9yIHRyYW5zZmVyZWQgb3IgZXhpdAorICoJbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMsIDAgaWYgYWxsIGJ5dGVzIG9yIHRyYW5zZmVycmVkIG9yIGV4aXQKICAqCWlzIGluIHNhbWUgcGhhc2UuCiAgKgogICoJQWxzbywgKnBoYXNlLCAqY291bnQsICpkYXRhIGFyZSBtb2RpZmllZCBpbiBwbGFjZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hdHA4NzB1LmMgYi9kcml2ZXJzL3Njc2kvYXRwODcwdS5jCmluZGV4IDc2MDI5ZDUuLjdlNmVjYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hdHA4NzB1LmMKKysrIGIvZHJpdmVycy9zY3NpL2F0cDg3MHUuYwpAQCAtMTIyOCw3ICsxMjI4LDcgQEAKIAlwcmludGsoIiBcbiV4ICV4ICV4ICVzXG4gIixhc3NpZ25pZF9tYXAsbWJ1ZlswXSxtYnVmWzFdLCZtYnVmWzJdKTsgKi8KIAlpID0gMTU7CiAJaiA9IG1idWZbMF07Ci0JaWYgKChqICYgMHgyMCkgIT0gMCkgewkvKiBiaXQ1PTE6SUQgdXB0byA3ICAgICAgKi8KKwlpZiAoKGogJiAweDIwKSAhPSAwKSB7CS8qIGJpdDU9MTpJRCB1cCB0byA3ICAgICAgKi8KIAkJaSA9IDc7CiAJfQogCWlmICgoaiAmIDB4MDYpID09IDApIHsJLyogSUR2YWxpZD8gICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oCmluZGV4IDUyMThkZTQuLmZiZDFkYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuaApAQCAtODc3LDcgKzg3Nyw3IEBACiAJCQkJCQkgKi8KICNkZWZpbmUgQ1hOX0tJTExFRF9QRFVfU0laRV9FWENFRURTX0RTTCAzCS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCiAJCQkJCQkgKiBpbnRlcm5hbGx5Ci0JCQkJCQkgKiBkdWUgdG8gYSByZWNpZXZlZCBQRFUKKwkJCQkJCSAqIGR1ZSB0byBhIHJlY2VpdmVkIFBEVQogCQkJCQkJICogc2l6ZSA+IERTTAogCQkJCQkJICovCiAjZGVmaW5lIENYTl9LSUxMRURfQlVSU1RfTEVOX01JU01BVENIICAgNAkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZApAQCAtODg2LDcgKzg4Niw3IEBACiAJCQkJCQkgKiBGQkwvTUJMLgogCQkJCQkJICovCiAjZGVmaW5lIENYTl9LSUxMRURfQUhTX1JDVkQJCTUJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKLQkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIGEgcmVjaWV2ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIGEgcmVjZWl2ZWQKIAkJCQkJCSAqIFBEVSBIZHIgdGhhdCBoYXMKIAkJCQkJCSAqIEFIUyAqLwogI2RlZmluZSBDWE5fS0lMTEVEX0hEUl9ESUdFU1RfRVJSCTYJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKQEAgLTg5OSwxMiArODk5LDEyIEBACiAJCQkJCQkgKiBwZHUgaGRyCiAJCQkJCQkgKi8KICNkZWZpbmUgQ1hOX0tJTExFRF9TVEFMRV9JVFRfVFRUX1JDVkQJOAkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAotCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gYSByZWNpZXZlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gYSByZWNlaXZlZAogCQkJCQkJICogSVRUL1RUVCB0aGF0IGRvZXMgbm90IGJlbG9uZwogCQkJCQkJICogdG8gdGhpcyBDb25uZWN0aW9uCiAJCQkJCQkgKi8KICNkZWZpbmUgQ1hOX0tJTExFRF9JTlZBTElEX0lUVF9UVFRfUkNWRCA5CS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCi0JCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byByZWNpZXZlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gcmVjZWl2ZWQKIAkJCQkJCSAqIElUVC9UVFQgdmFsdWUgPiBNYXgKIAkJCQkJCSAqIFN1cHBvcnRlZCBJVFRzL1RUVHMKIAkJCQkJCSAqLwpAQCAtOTM2LDIxICs5MzYsMjEgQEAKIAkJCQkJCSAqIGluZGV4LgogCQkJCQkJICovCiAjZGVmaW5lIENYTl9LSUxMRURfT1ZFUl9SVU5fUkVTSURVQUwJMTYJLyogQ29tbWFuZCBnb3QgaW52YWxpZGF0ZWQKLQkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIHJlY2l2ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIHJlY2VpdmVkCiAJCQkJCQkgKiBjb21tYW5kIGhhcyByZXNpZHVhbAogCQkJCQkJICogb3ZlciBydW4gYnl0ZXMuCiAJCQkJCQkgKi8KICNkZWZpbmUgQ1hOX0tJTExFRF9VTkRFUl9SVU5fUkVTSURVQUwJMTcJLyogQ29tbWFuZCBnb3QgaW52YWxpZGF0ZWQKLQkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIHJlY2l2ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIHJlY2VpdmVkCiAJCQkJCQkgKiBjb21tYW5kIGhhcyByZXNpZHVhbCB1bmRlcgogCQkJCQkJICogcnVuIGJ5dGVzLgogCQkJCQkJICovCiAjZGVmaW5lIENNRF9LSUxMRURfSU5WQUxJRF9TVEFUU05fUkNWRAkxOAkvKiBDb21tYW5kIGdvdCBpbnZhbGlkYXRlZAotCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gYSByZWNpZXZlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gYSByZWNlaXZlZAogCQkJCQkJICogUERVIGhhcyBhbiBpbnZhbGlkIFN0YXR1c1NOCiAJCQkJCQkgKi8KICNkZWZpbmUgQ01EX0tJTExFRF9JTlZBTElEX1IyVF9SQ1ZECTE5CS8qIENvbW1hbmQgZ290IGludmFsaWRhdGVkCi0JCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBhIHJlY2lldmVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBhIHJlY2VpdmVkCiAJCQkJCQkgKiBhbiBSMlQgd2l0aCBzb21lIGludmFsaWQKIAkJCQkJCSAqIGZpZWxkcyBpbiBpdAogCQkJCQkJICovCkBAIC05NzMsNyArOTczLDcgQEAKIAkJCQkJCSAqLwogI2RlZmluZSBDTURfQ1hOX0tJTExFRF9JTlZBTElEX0RBVEFTTl9SQ1ZEIDI0CS8qIENvbW1hbmQgZ290IGludmFsaWRhdGVkCiAJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBhCi0JCQkJCQkgKiByZWNpZXZlZCBQRFUgaGFzIGFuIGludmFsaWQKKwkJCQkJCSAqIHJlY2VpdmVkIFBEVSBoYXMgYW4gaW52YWxpZAogCQkJCQkJICogRGF0YVNOCiAJCQkJCQkgKi8KICNkZWZpbmUgQ1hOX0lOVkFMSURBVEVfTk9USUZZCQkyNQkvKiBDb25uZWN0aW9uIGludmFsaWRhdGlvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jCmluZGV4IDFjZDVjOGIuLjkxODM4YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jb3JlLmMKQEAgLTM1NSw3ICszNTUsNyBAQAogCQkJLyoKIAkJCSAqIEVSUl9QU1MgYml0IG5lZWRzIHRvIGJlIGNsZWFyZWQgYXMgd2VsbCBpbiBjYXNlCiAJCQkgKiBpbnRlcnJ1cHMgYXJlIHNoYXJlZCBzbyBkcml2ZXIncyBpbnRlcnJ1cHQgaGFuZGxlciBpcwotCQkJICogc3RpbGwgY2FsbGVkIGV2ZW50aG91Z2ggaXQgaXMgYWxyZWFkeSBtYXNrZWQgb3V0LgorCQkJICogc3RpbGwgY2FsbGVkIGV2ZW4gdGhvdWdoIGl0IGlzIGFscmVhZHkgbWFza2VkIG91dC4KIAkJCSAqLwogCQkJY3Vycl92YWx1ZSA9IHJlYWRsKAogCQkJCQliZmEtPmlvYy5pb2NfcmVncy5wc3NfZXJyX3N0YXR1c19yZWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZGVmc19zdmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2RlZnNfc3ZjLmgKaW5kZXggNjQ4Yzg0MS4uMjA3ZjU5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZGVmc19zdmMuaAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9kZWZzX3N2Yy5oCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAl1MzIJaW9oX2RhdGFfb29yX2V2ZW50OwkvKiAgRGF0YSBvdXQgb2YgcmFuZ2UgKi8KIAl1MzIJaW9oX3JvX29vb19ldmVudDsJLyogIFJlbGF0aXZlIG9mZnNldCBvdXQgb2YgcmFuZ2UgKi8KIAl1MzIJaW9oX2NwdV9vd25lZF9ldmVudDsJLyogIElPSCBoaXQgLWlvc3Qgb3duZWQgYnkgZi93ICovCi0JdTMyCWlvaF91bmV4cF9mcmFtZV9ldmVudDsJLyogIHVuZXhwZWN0ZWQgZnJhbWUgcmVjaWV2ZWQKKwl1MzIJaW9oX3VuZXhwX2ZyYW1lX2V2ZW50OwkvKiAgdW5leHBlY3RlZCBmcmFtZSByZWNlaXZlZAogCQkJCQkJICogICBjb3VudCAqLwogCXUzMglpb2hfZXJyX2ludDsJCS8qICBJT0ggZXJyb3IgaW50IGR1cmluZyBkYXRhLXBoYXNlCiAJCQkJCQkgKiAgIGZvciBzY3NpIHdyaXRlCkBAIC01NjYsOCArNTY2LDggQEAKIAl1MzIJaW5wdXRfcmVxczsJCS8qICBEYXRhIGluLWJvdW5kIHJlcXVlc3RzCSovCiAJdTMyCW91dHB1dF9yZXFzOwkJLyogIERhdGEgb3V0LWJvdW5kIHJlcXVlc3RzCSovCiAJdTMyCWlvX2NvbXBzOwkJLyogIFRvdGFsIElPIENvbXBsZXRpb25zCSovCi0JdTMyCXdyX3Rocm91Z2hwdXQ7CQkvKiAgV3JpdGUgZGF0YSB0cmFuc2ZlcmVkIGluIGJ5dGVzICovCi0JdTMyCXJkX3Rocm91Z2hwdXQ7CQkvKiAgUmVhZCBkYXRhIHRyYW5zZmVyZWQgaW4gYnl0ZXMgICovCisJdTMyCXdyX3Rocm91Z2hwdXQ7CQkvKiAgV3JpdGUgZGF0YSB0cmFuc2ZlcnJlZCBpbiBieXRlcyAqLworCXUzMglyZF90aHJvdWdocHV0OwkJLyogIFJlYWQgZGF0YSB0cmFuc2ZlcnJlZCBpbiBieXRlcyAgKi8KIAogCXUzMglpb2NvbXBfb2s7CQkvKiAgU2xvd3BhdGggSU8gY29tcGxldGlvbnMJKi8KIAl1MzIJaW9jb21wX3VuZGVycnVuOwkvKiAgSU8gdW5kZXJydW4JCSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmMuaAppbmRleCA4ZTc2NGZhLi5iZjAwNjdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjLmgKQEAgLTMxNSw3ICszMTUsNyBAQAogCQkJcXVlcnlfZGJjOjEsCiAJCQloZ19zdXBwOjE7CiAjZW5kaWYKLQlfX2JlMTYJCXJ4c3o7CQkvKiByZWNpZXZlIGRhdGFfZmllbGQgc2l6ZSAqLworCV9fYmUxNgkJcnhzejsJCS8qIHJlY2VpdmUgZGF0YV9maWVsZCBzaXplICovCiAJX19iZTE2CQljb25zZXE7CiAJX19iZTE2CQlyb19iaXRtYXA7CiAJX19iZTMyCQllX2RfdG92OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3MuYwppbmRleCBmNjc0ZjkzLi45YjQzY2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3MuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3MuYwpAQCAtMTAzMyw3ICsxMDMzLDcgQEAKIAogCiAvKgotICogTG9va3VwIGZvciBhIHZwb3J0IHdpdGhpbmcgYSBmYWJyaWMgZ2l2ZW4gaXRzIHB3d24KKyAqIExvb2t1cCBmb3IgYSB2cG9ydCB3aXRoaW4gYSBmYWJyaWMgZ2l2ZW4gaXRzIHB3d24KICAqLwogc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqCiBiZmFfZmNzX2ZhYnJpY192cG9ydF9sb29rdXAoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywgd3duX3QgcHd3bikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzLmgKaW5kZXggMGZkNjMxNi4uNjFjZGNlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzLmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzLmgKQEAgLTcwNSw3ICs3MDUsNyBAQAogCVJQU01fRVZFTlRfQUREUkVTU19DSEFOR0UgPSAxNSwgLyogIFJwb3J0J3MgUElEIGhhcyBjaGFuZ2VkICAgICAqLwogCVJQU01fRVZFTlRfQUREUkVTU19ESVNDID0gMTYsICAgLyogIE5lZWQgdG8gRGlzY292ZXIgcnBvcnQncyBQSUQgKi8KIAlSUFNNX0VWRU5UX1BSTE9fUkNWRCAgID0gMTcsICAgIC8qICBQUkxPIGZyb20gcmVtb3RlIGRldmljZSAgICAgKi8KLQlSUFNNX0VWRU5UX1BMT0dJX1JFVFJZID0gMTgsICAgIC8qICBSZXRyeSBQTE9HSSBjb250aW5vdXNseSAqLworCVJQU01fRVZFTlRfUExPR0lfUkVUUlkgPSAxOCwgICAgLyogIFJldHJ5IFBMT0dJIGNvbnRpbnVvdXNseSAqLwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc19scG9ydC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX2xwb3J0LmMKaW5kZXggNDNmYTk4NmIuLjFkNmJlOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc19scG9ydC5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc19scG9ydC5jCkBAIC0xMTQ5LDcgKzExNDksNyBAQAogCQl9IGVsc2UgewogCQkJLyoKIAkJCSAqIEZvciBhIGJhc2UgcG9ydCwgd2Ugc2hvdWxkIGZpcnN0IHJlZ2lzdGVyIHRoZSBIQkEKLQkJCSAqIGF0cmlidXRlLiBUaGUgSEJBIGF0dHJpYnV0ZSBhbHNvIGNvbnRhaW5zIHRoZSBiYXNlCisJCQkgKiBhdHRyaWJ1dGUuIFRoZSBIQkEgYXR0cmlidXRlIGFsc28gY29udGFpbnMgdGhlIGJhc2UKIAkJCSAqICBwb3J0IHJlZ2lzdHJhdGlvbi4KIAkJCSAqLwogCQkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfc3ZjLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zdmMuYwppbmRleCAxZDM0OTIxLi4xNmQ5YTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zdmMuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zdmMuYwpAQCAtMTAzNSw3ICsxMDM1LDcgQEAKICAqIEBwYXJhbVtpbl0JcnBvcnQJQkZBIHJwb3J0IHBvaW50ZXIuIENvdWxkIGJlIGxlZnQgTlVMTCBmb3IgV0tBIHJwb3J0cwogICogQHBhcmFtW2luXQl2Zl9pZAl2aXJ0dWFsIEZhYnJpYyBJRAogICogQHBhcmFtW2luXQlscF90YWcJbHBvcnQgdGFnCi0gKiBAcGFyYW1baW5dCWN0cwl1c2UgQ29udGlub3VzIHNlcXVlbmNlCisgKiBAcGFyYW1baW5dCWN0cwl1c2UgQ29udGludW91cyBzZXF1ZW5jZQogICogQHBhcmFtW2luXQljb3MJZmMgQ2xhc3Mgb2YgU2VydmljZQogICogQHBhcmFtW2luXQlyZXFsZW4JcmVxdWVzdCBsZW5ndGgsIGRvZXMgbm90IGluY2x1ZGUgRkNIUyBsZW5ndGgKICAqIEBwYXJhbVtpbl0JZmNocwlmYyBIZWFkZXIgUG9pbnRlci4gVGhlIGhlYWRlciBjb250ZW50IHdpbGwgYmUgY29waWVkCkBAIC01MDIyLDcgKzUwMjIsNyBAQAogfQogCiAvKgotICogUmVnaXN0ZXIgaGFuZGxlciBmb3IgYWxsIHVuc29saWN0ZWQgcmVjaWV2ZSBmcmFtZXMuCisgKiBSZWdpc3RlciBoYW5kbGVyIGZvciBhbGwgdW5zb2xpY3RlZCByZWNlaXZlIGZyYW1lcy4KICAqCiAgKiBAcGFyYW1baW5dCWJmYQkJQkZBIGluc3RhbmNlCiAgKiBAcGFyYW1baW5dCXVmcmVjdglyZWNlaXZlIGhhbmRsZXIgZnVuY3Rpb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3N2Yy5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfc3ZjLmgKaW5kZXggMzMxYWQ5OS4uNTkwMmE0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfc3ZjLmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfc3ZjLmgKQEAgLTEyNyw3ICsxMjcsNyBAQAogCQkJCQkgKiBycG9ydCBuZXh1cyBpcyBlc3RhYmxpc2hlZAogCQkJCQkgKi8KIAlzdHJ1Y3QgZmNoc19zCWZjaHM7CS8qICByZXF1ZXN0IEZDIGhlYWRlciBzdHJ1Y3R1cmUgKi8KLQl1OAkJY3RzOwkvKiAgY29udGlub3VzIHNlcXVlbmNlICovCisJdTgJCWN0czsJLyogIGNvbnRpbnVvdXMgc2VxdWVuY2UgKi8KIAl1OAkJY2xhc3M7CS8qICBGQyBjbGFzcyBmb3IgdGhlIHJlcXVlc3QvcmVzcG9uc2UgKi8KIAl1MTYJbWF4X2ZybXN6OwkvKiAgbWF4IHNlbmQgZnJhbWUgc2l6ZSAqLwogCXUxNgl2Zl9pZDsJLyogIHZzYW4gdGFnIGlmIGFwcGxpY2FibGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkLmMKaW5kZXggNDQ1MjRjZi4uMGZkNTEwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkLmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkLmMKQEAgLTEyNzgsNyArMTI3OCw3IEBACiAJCQkgKiBpbnRlcnJ1cHRzIGludG8gb25lIHZlY3Rvciwgc28gZXZlbiBpZiB3ZQogCQkJICogY2FuIHRyeSB0byByZXF1ZXN0IGxlc3MgdmVjdG9ycywgd2UgZG9uJ3QKIAkJCSAqIGtub3cgaG93IHRvIGFzc29jaWF0ZSBpbnRlcnJ1cHQgZXZlbnRzIHRvCi0JCQkgKiAgdmVjdG9ycy4gTGludXggZG9lc24ndCBkdXBpY2F0ZSB2ZWN0b3JzCisJCQkgKiAgdmVjdG9ycy4gTGludXggZG9lc24ndCBkdXBsaWNhdGUgdmVjdG9ycwogCQkJICogaW4gdGhlIE1TSVggdGFibGUgZm9yIHRoaXMgY2FzZS4KIAkJCSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmZjLzU3eHhfaHNpX2JueDJmYy5oIGIvZHJpdmVycy9zY3NpL2JueDJmYy81N3h4X2hzaV9ibngyZmMuaAppbmRleCA2OWQwMzFkLi45N2E2MWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmZjLzU3eHhfaHNpX2JueDJmYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyZmMvNTd4eF9oc2lfYm54MmZjLmgKQEAgLTg5OCw3ICs4OTgsNyBAQAogCiAKIC8qCi0gKiBGQ29FIGNvbmVjdGlvbiBkYXRhIGJhc2UKKyAqIEZDb0UgY29ubmVjdGlvbiBkYXRhIGJhc2UKICAqLwogc3RydWN0IGZjb2VfY29ubl9kYiB7CiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19lbHMuYyBiL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Vscy5jCmluZGV4IDdhMTFhMjUuLjUyYzM1ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Vscy5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Vscy5jCkBAIC0zOTcsNyArMzk3LDcgQEAKIAkJCSAgICAgJmVsc19yZXEtPnJlcV9mbGFncykpIHsKIAkJQk5YMkZDX0VMU19EQkcoIlRpbWVyIGNvbnRleHQgZmluaXNoZWQgcHJvY2Vzc2luZyB0aGlzICIKIAkJCSAgICJlbHMgLSAweCV4XG4iLCBlbHNfcmVxLT54aWQpOwotCQkvKiBUaGlzIElPIGRvZXNudCByZWNlaXZlIGNsZWFudXAgY29tcGxldGlvbiAqLworCQkvKiBUaGlzIElPIGRvZXNuJ3QgcmVjZWl2ZSBjbGVhbnVwIGNvbXBsZXRpb24gKi8KIAkJa3JlZl9wdXQoJmVsc19yZXEtPnJlZmNvdW50LCBibngyZmNfY21kX3JlbGVhc2UpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaW8uYyBiL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2lvLmMKaW5kZXggZDNmYzMwMi4uMWRlY2VmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaW8uYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19pby5jCkBAIC0xMjczLDcgKzEyNzMsNyBAQAogCQkJCQkJIGJueDJmY19jbWRfcmVsZWFzZSk7CiAJCQkJCQkJLyogdGltZXIgaG9sZCAqLwogCQkJCXJjID0gYm54MmZjX2luaXRpYXRlX2FidHMoY21kKTsKLQkJCQkvKiBhYnRzIHNob3VsZG50IGZhaWwgaW4gdGhpcyBjb250ZXh0ICovCisJCQkJLyogYWJ0cyBzaG91bGRuJ3QgZmFpbCBpbiB0aGlzIGNvbnRleHQgKi8KIAkJCQlXQVJOX09OKHJjICE9IFNVQ0NFU1MpOwogCQkJfSBlbHNlCiAJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAibHVuX3JzdDogYWJ0cyBhbHJlYWR5IGluIgpAQCAtMTMwOCw3ICsxMzA4LDcgQEAKIAkJCQlrcmVmX3B1dCgmaW9fcmVxLT5yZWZjb3VudCwKIAkJCQkJIGJueDJmY19jbWRfcmVsZWFzZSk7IC8qIHRpbWVyIGhvbGQgKi8KIAkJCXJjID0gYm54MmZjX2luaXRpYXRlX2FidHMoY21kKTsKLQkJCS8qIGFidHMgc2hvdWxkbnQgZmFpbCBpbiB0aGlzIGNvbnRleHQgKi8KKwkJCS8qIGFidHMgc2hvdWxkbid0IGZhaWwgaW4gdGhpcyBjb250ZXh0ICovCiAJCQlXQVJOX09OKHJjICE9IFNVQ0NFU1MpOwogCiAJCX0gZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfdGd0LmMgYi9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY190Z3QuYwppbmRleCA3Y2MwNWU0Li5hMmUzODMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY190Z3QuYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY190Z3QuYwpAQCAtMzk1LDcgKzM5NSw3IEBACiAJCXJwID0gcnBvcnQtPmRkX2RhdGE7CiAJCWlmIChycG9ydC0+cG9ydF9pZCA9PSBGQ19GSURfRElSX1NFUlYpIHsKIAkJCS8qCi0JCQkgKiBibngyZmNfcnBvcnQgc3RydWN0dXJlIGRvZXNudCBleGlzdCBmb3IKKwkJCSAqIGJueDJmY19ycG9ydCBzdHJ1Y3R1cmUgZG9lc24ndCBleGlzdCBmb3IKIAkJCSAqIGRpcmVjdG9yeSBzZXJ2ZXIuCiAJCQkgKiBXZSBzaG91bGQgbm90IGNvbWUgaGVyZSwgYXMgbHBvcnQgd2lsbAogCQkJICogdGFrZSBjYXJlIG9mIGZhYnJpYyBsb2dpbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2h3aS5jIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2h3aS5jCmluZGV4IDFkYTM0YzAuLmYwYjg5NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9od2kuYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaHdpLmMKQEAgLTE3Myw3ICsxNzMsNyBAQAogCiAvKioKICAqIGJueDJpX2dldF9ycV9idWYgLSBjb3B5IFJRIGJ1ZmZlciBjb250ZW50cyB0byBkcml2ZXIgYnVmZmVyCi0gKiBAY29ubjoJCWlzY3NpIGNvbm5lY3Rpb24gb24gd2hpY2ggUlEgZXZlbnQgb2NjdXJlZAorICogQGNvbm46CQlpc2NzaSBjb25uZWN0aW9uIG9uIHdoaWNoIFJRIGV2ZW50IG9jY3VycmVkCiAgKiBAcHRyOgkJZHJpdmVyIGJ1ZmZlciB0byB3aGljaCBSUSBidWZmZXIgY29udGVudHMgaXMgdG8KICAqCQkJYmUgY29waWVkCiAgKiBAbGVuOgkJbGVuZ3RoIG9mIHZhbGlkIGRhdGEgaW5zaWRlIFJRIGJ1ZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmggYi9kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuaAppbmRleCAwYTIwZmQ1Li45MjY3ODQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuaAorKysgYi9kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuaApAQCAtMjYyLDkgKzI2Miw5IEBACiBlbnVtIGN4Z2JpX3NrY2JfZmxhZ3MgewogCVNLQ0JGX1RYX05FRURfSERSLAkvKiBwYWNrZXQgbmVlZHMgYSBoZWFkZXIgKi8KIAlTS0NCRl9SWF9DT0FMRVNDRUQsCS8qIHJlY2VpdmVkIHdob2xlIHBkdSAqLwotCVNLQ0JGX1JYX0hEUiwJCS8qIHJlY2lldmVkIHBkdSBoZWFkZXIgKi8KLQlTS0NCRl9SWF9EQVRBLAkJLyogcmVjaWV2ZWQgcGR1IHBheWxvYWQgKi8KLQlTS0NCRl9SWF9TVEFUVVMsCS8qIHJlY2lldmVkIGRkcCBzdGF0dXMgKi8KKwlTS0NCRl9SWF9IRFIsCQkvKiByZWNlaXZlZCBwZHUgaGVhZGVyICovCisJU0tDQkZfUlhfREFUQSwJCS8qIHJlY2VpdmVkIHBkdSBwYXlsb2FkICovCisJU0tDQkZfUlhfU1RBVFVTLAkvKiByZWNlaXZlZCBkZHAgc3RhdHVzICovCiAJU0tDQkZfUlhfREFUQV9ERFBELAkvKiBwZHUgcGF5bG9hZCBkZHAnZCAqLwogCVNLQ0JGX1JYX0hDUkNfRVJSLAkvKiBoZWFkZXIgZGlnZXN0IGVycm9yICovCiAJU0tDQkZfUlhfRENSQ19FUlIsCS8qIGRhdGEgZGlnZXN0IGVycm9yICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGMzOTV4LmMgYi9kcml2ZXJzL3Njc2kvZGMzOTV4LmMKaW5kZXggYjBmODUyMy4uYjEwYjM4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RjMzk1eC5jCisrKyBiL2RyaXZlcnMvc2NzaS9kYzM5NXguYwpAQCAtMjM1LDcgKzIzNSw3IEBACiAKIAl1OCBzZ19jb3VudDsJCQkvKiBObyBvZiBIVyBzZyBlbnRyaWVzIGZvciB0aGlzIHJlcXVlc3QgKi8KIAl1OCBzZ19pbmRleDsJCQkvKiBJbmRleCBvZiBIVyBzZyBlbnRyeSBmb3IgdGhpcyByZXF1ZXN0ICovCi0Jc2l6ZV90IHRvdGFsX3hmZXJfbGVuZ3RoOwkvKiBUb3RhbCBudW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5nIHRvIGJlIHRyYW5zZmVyZWQgKi8KKwlzaXplX3QgdG90YWxfeGZlcl9sZW5ndGg7CS8qIFRvdGFsIG51bWJlciBvZiBieXRlcyByZW1haW5pbmcgdG8gYmUgdHJhbnNmZXJyZWQgKi8KIAlzaXplX3QgcmVxdWVzdF9sZW5ndGg7CQkvKiBUb3RhbCBudW1iZXIgb2YgYnl0ZXMgaW4gdGhpcyByZXF1ZXN0ICovCiAJLyoKIAkgKiBUaGUgc2Vuc2UgYnVmZmVyIGhhbmRsaW5nIGZ1bmN0aW9uLCByZXF1ZXN0X3NlbnNlLCB1c2VzCkBAIC0xNzc0LDcgKzE3NzQsNyBAQAogCQlkYzM5NXhfc3RhdGV2KGFjYiwgc3JiLCAmc2NzaV9zdGF0dXMpOwogCiAJCS8qIAotCQkgKiBpZiB0aGVyZSB3ZXJlIGFueSBleGNlcHRpb24gb2NjdXJlZCBzY3NpX3N0YXR1cworCQkgKiBpZiB0aGVyZSB3ZXJlIGFueSBleGNlcHRpb24gb2NjdXJyZWQgc2NzaV9zdGF0dXMKIAkJICogd2lsbCBiZSBtb2RpZnkgdG8gYnVzIGZyZWUgcGhhc2UgbmV3IHNjc2lfc3RhdHVzCiAJCSAqIHRyYW5zZmVyIG91dCBmcm9tIC4uLiBwcmV2aW91cyBkYzM5NXhfc3RhdGV2CiAJCSAqLwpAQCAtMTk1NCwxMSArMTk1NCwxMSBAQAogc3RhdGljIHZvaWQgc2dfdXBkYXRlX2xpc3Qoc3RydWN0IFNjc2lSZXFCbGsgKnNyYiwgdTMyIGxlZnQpCiB7CiAJdTggaWR4OwotCXUzMiB4ZmVycmVkID0gc3JiLT50b3RhbF94ZmVyX2xlbmd0aCAtIGxlZnQ7IC8qIGJ5dGVzIHRyYW5zZmVyZWQgKi8KKwl1MzIgeGZlcnJlZCA9IHNyYi0+dG90YWxfeGZlcl9sZW5ndGggLSBsZWZ0OyAvKiBieXRlcyB0cmFuc2ZlcnJlZCAqLwogCXN0cnVjdCBTR2VudHJ5ICpwc2dlID0gc3JiLT5zZWdtZW50X3ggKyBzcmItPnNnX2luZGV4OwogCiAJZHByaW50a2RiZyhEQkdfMCwKLQkJInNnX3VwZGF0ZV9saXN0OiBUcmFuc2ZlcmVkICVpIG9mICVpIGJ5dGVzLCAlaSByZW1haW5cbiIsCisJCSJzZ191cGRhdGVfbGlzdDogVHJhbnNmZXJyZWQgJWkgb2YgJWkgYnl0ZXMsICVpIHJlbWFpblxuIiwKIAkJeGZlcnJlZCwgc3JiLT50b3RhbF94ZmVyX2xlbmd0aCwgbGVmdCk7CiAJaWYgKHhmZXJyZWQgPT0gMCkgewogCQkvKiBub3RoaW5nIHRvIHVwZGF0ZSBzaW5jZSB3ZSBkaWQgbm90IHRyYW5zZmVyIGFueSBkYXRhICovCkBAIC0xOTkwLDcgKzE5OTAsNyBAQAogCiAKIC8qCi0gKiBXZSBoYXZlIHRyYW5zZmVyZWQgYSBzaW5nbGUgYnl0ZSAoUElPIG1vZGU/KSBhbmQgbmVlZCB0byB1cGRhdGUKKyAqIFdlIGhhdmUgdHJhbnNmZXJyZWQgYSBzaW5nbGUgYnl0ZSAoUElPIG1vZGU/KSBhbmQgbmVlZCB0byB1cGRhdGUKICAqIHRoZSBjb3VudCBvZiBieXRlcyByZW1haW5pbmcgKHRvdGFsX3hmZXJfbGVuZ3RoKSBhbmQgdXBkYXRlIHRoZSBzZwogICogZW50cnkgdG8gZWl0aGVyIHBvaW50IHRvIG5leHQgYnl0ZSBpbiB0aGUgY3VycmVudCBzZyBlbnRyeSwgb3Igb2YKICAqIGFscmVhZHkgYXQgdGhlIGVuZCB0byBwb2ludCB0byB0aGUgc3RhcnQgb2YgdGhlIG5leHQgc2cgZW50cnkKQEAgLTIwMjksNyArMjAyOSw3IEBACiAKIAogLyoKLSAqIFRob3NlIG5vIG9mIGJ5dGVzIHdpbGwgYmUgdHJhbnNmZXJlZCB3LyBQSU8gdGhyb3VnaCB0aGUgU0NTSSBGSUZPCisgKiBUaG9zZSBubyBvZiBieXRlcyB3aWxsIGJlIHRyYW5zZmVycmVkIHcvIFBJTyB0aHJvdWdoIHRoZSBTQ1NJIEZJRk8KICAqIFNlZW1zIHRvIGJlIG5lZWRlZCBmb3IgdW5rbm93biByZWFzb25zOyBjb3VsZCBiZSBhIGhhcmR3YXJlIGJ1ZyA6LSgKICAqLwogI2RlZmluZSBEQzM5NXhfTEFTVFBJTyA0CkBAIC0yMjU2LDcgKzIyNTYsNyBAQAogCQkJREMzOTV4X3JlYWQzMihhY2IsIFRSTV9TMTA0MF9ETUFfQ1hDTlQpLAogCQkJc3JiLT50b3RhbF94ZmVyX2xlbmd0aCwgZF9sZWZ0X2NvdW50ZXIpOwogI2lmIERDMzk1eF9MQVNUUElPCi0JCS8qIEtHOiBMZXNzIHRoYW4gb3IgZXF1YWwgdG8gNCBieXRlcyBjYW4gbm90IGJlIHRyYW5zZmVyZWQgdmlhIERNQSwgaXQgc2VlbXMuICovCisJCS8qIEtHOiBMZXNzIHRoYW4gb3IgZXF1YWwgdG8gNCBieXRlcyBjYW4gbm90IGJlIHRyYW5zZmVycmVkIHZpYSBETUEsIGl0IHNlZW1zLiAqLwogCQlpZiAoZF9sZWZ0X2NvdW50ZXIKIAkJICAgICYmIHNyYi0+dG90YWxfeGZlcl9sZW5ndGggPD0gREMzOTV4X0xBU1RQSU8pIHsKIAkJCXNpemVfdCBsZWZ0X2lvID0gc3JiLT50b3RhbF94ZmVyX2xlbmd0aDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kYzM5NXguaCBiL2RyaXZlcnMvc2NzaS9kYzM5NXguaAppbmRleCBiMzgzNjBlLi5mYmYzNWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGMzOTV4LmgKKysrIGIvZHJpdmVycy9zY3NpL2RjMzk1eC5oCkBAIC02MTcsNyArNjE3LDcgQEAKICNkZWZpbmUgTlRDX0RPX1NFTkRfU1RBUlQJCTB4MDgJLyogU2VuZCBzdGFydCBjb21tYW5kIFNQSU5VUAkJKi8KICNkZWZpbmUgTlRDX0RPX0RJU0NPTk5FQ1QJCTB4MDQJLyogRW5hYmxlIFNDU0kgZGlzY29ubmVjdAkJKi8KICNkZWZpbmUgTlRDX0RPX1NZTkNfTkVHTwkJMHgwMgkvKiBTeW5jIG5lZ290aWF0aW9uCQkJKi8KLSNkZWZpbmUgTlRDX0RPX1BBUklUWV9DSEsJCTB4MDEJLyogKGl0IHNvdWxkIGRlZmluZSBhdCBOQUMpCQkqLworI2RlZmluZSBOVENfRE9fUEFSSVRZX0NISwkJMHgwMQkvKiAoaXQgc2hvdWxkIGRlZmluZSBhdCBOQUMpCQkqLwogCQkJCQkJLyogUGFyaXR5IGNoZWNrIGVuYWJsZQkJCSovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaC5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGguYwppbmRleCA1NjRlNmVjLi4wMTE5YjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoLmMKQEAgLTM5NCwxMiArMzk0LDE0IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CiAJc3RydWN0IHNjc2lfZGV2aWNlX2hhbmRsZXIgKnNjc2lfZGggPSBOVUxMOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IE5VTEw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiAJc2RldiA9IHEtPnF1ZXVlZGF0YTsKIAlpZiAoc2RldiAmJiBzZGV2LT5zY3NpX2RoX2RhdGEpCiAJCXNjc2lfZGggPSBzZGV2LT5zY3NpX2RoX2RhdGEtPnNjc2lfZGg7Ci0JaWYgKCFzY3NpX2RoIHx8ICFnZXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldikgfHwKKwlkZXYgPSBnZXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CisJaWYgKCFzY3NpX2RoIHx8ICFkZXYgfHwKIAkgICAgc2Rldi0+c2Rldl9zdGF0ZSA9PSBTREVWX0NBTkNFTCB8fAogCSAgICBzZGV2LT5zZGV2X3N0YXRlID09IFNERVZfREVMKQogCQllcnIgPSBTQ1NJX0RIX05PU1lTOwpAQCAtNDEwLDEyICs0MTIsMTMgQEAKIAlpZiAoZXJyKSB7CiAJCWlmIChmbikKIAkJCWZuKGRhdGEsIGVycik7Ci0JCXJldHVybiBlcnI7CisJCWdvdG8gb3V0OwogCX0KIAogCWlmIChzY3NpX2RoLT5hY3RpdmF0ZSkKIAkJZXJyID0gc2NzaV9kaC0+YWN0aXZhdGUoc2RldiwgZm4sIGRhdGEpOwotCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKK291dDoKKwlwdXRfZGV2aWNlKGRldik7CiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNjc2lfZGhfYWN0aXZhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jCmluZGV4IDdjYWUwYmMuLjQyZmU1MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMKQEAgLTU0MSw3ICs1NDEsNyBAQAogICoKICAqIEV2YWx1YXRlIHRoZSBUYXJnZXQgUG9ydCBHcm91cCBTdGF0ZS4KICAqIFJldHVybnMgU0NTSV9ESF9ERVZfT0ZGTElORUQgaWYgdGhlIHBhdGggaXMKLSAqIGZvdW5kIHRvIGJlIHVudXNlYWJsZS4KKyAqIGZvdW5kIHRvIGJlIHVudXNhYmxlLgogICovCiBzdGF0aWMgaW50IGFsdWFfcnRwZyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHN0cnVjdCBhbHVhX2RoX2RhdGEgKmgpCiB7CkBAIC02MjAsNyArNjIwLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBUUEdTX1NUQVRFX09GRkxJTkU6CiAJY2FzZSBUUEdTX1NUQVRFX1VOQVZBSUxBQkxFOgotCQkvKiBQYXRoIHVudXNlYWJsZSBmb3IgdW5hdmFpbGFibGUvb2ZmbGluZSAqLworCQkvKiBQYXRoIHVudXNhYmxlIGZvciB1bmF2YWlsYWJsZS9vZmZsaW5lICovCiAJCWVyciA9IFNDU0lfREhfREVWX09GRkxJTkVEOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RwdC9zeXNfaW5mby5oIGIvZHJpdmVycy9zY3NpL2RwdC9zeXNfaW5mby5oCmluZGV4IGE5MGM0Y2IuLmE0YWExYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kcHQvc3lzX2luZm8uaAorKysgYi9kcml2ZXJzL3Njc2kvZHB0L3N5c19pbmZvLmgKQEAgLTc5LDkgKzc5LDkgQEAKICAgIHR5cGVkZWYgc3RydWN0ICB7CiAjZW5kaWYKIAotICAgdVNIT1JUICAgICAgIGN5bGluZGVyczsgICAgICAvKiBVcHRvIDEwMjQgKi8KLSAgIHVDSEFSICAgICAgICBoZWFkczsgICAgICAgICAgLyogVXB0byAyNTUgKi8KLSAgIHVDSEFSICAgICAgICBzZWN0b3JzOyAgICAgICAgLyogVXB0byA2MyAqLworICAgdVNIT1JUICAgICAgIGN5bGluZGVyczsgICAgICAvKiBVcCB0byAxMDI0ICovCisgICB1Q0hBUiAgICAgICAgaGVhZHM7ICAgICAgICAgIC8qIFVwIHRvIDI1NSAqLworICAgdUNIQVIgICAgICAgIHNlY3RvcnM7ICAgICAgICAvKiBVcCB0byA2MyAqLwogCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9lYXRhLmMgYi9kcml2ZXJzL3Njc2kvZWF0YS5jCmluZGV4IDUzOTI1YWMuLjBlYjRmZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9lYXRhLmMKKysrIGIvZHJpdmVycy9zY3NpL2VhdGEuYwpAQCAtNjMsNyArNjMsNyBAQAogICogICAgICAgICAgZXA6W3l8bl0gICAgICBlaXNhX3Byb2JlPVsxfDBdICBDT05GSUdfRUlTQSBkZWZpbmVkCiAgKiAgICAgICAgICBwcDpbeXxuXSAgICAgIHBjaV9wcm9iZT1bMXwwXSAgIENPTkZJR19QQ0kgIGRlZmluZWQKICAqCi0gKiAgICAgICAgICBUaGUgZGVmYXVsdCBhY3Rpb24gaXMgdG8gcGVyZm9ybSBwcm9iaW5nIGlmIHRoZSBjb3JyaXNwb25kaW5nCisgKiAgICAgICAgICBUaGUgZGVmYXVsdCBhY3Rpb24gaXMgdG8gcGVyZm9ybSBwcm9iaW5nIGlmIHRoZSBjb3JyZXNwb25kaW5nCiAgKiAgICAgICAgICBidXMgaXMgY29uZmlndXJlZCBhbmQgdG8gc2tpcCBwcm9iaW5nIG90aGVyd2lzZS4KICAqCiAgKiAgICAgICAgKyBJZiBwY2lfcHJvYmUgaXMgaW4gZWZmZWN0IGFuZCBhIGxpc3Qgb2YgSS9PICBwb3J0cyBpcyBzcGVjaWZpZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2VfY3Rsci5jIGIvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV9jdGxyLmMKaW5kZXggYzkzZjAwNy4uOWQzOGJlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV9jdGxyLmMKKysrIGIvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV9jdGxyLmMKQEAgLTY1Niw3ICs2NTYsNyBAQAogCQkgKiBJZiBub24tRklQLCB3ZSBtYXkgaGF2ZSBnb3R0ZW4gYW4gU0lEIGJ5IGFjY2VwdGluZyBhbiBGTE9HSQogCQkgKiBmcm9tIGEgcG9pbnQtdG8tcG9pbnQgY29ubmVjdGlvbi4gIFN3aXRjaCB0byB1c2luZwogCQkgKiB0aGUgc291cmNlIG1hYyBiYXNlZCBvbiB0aGUgU0lELiAgVGhlIGRlc3RpbmF0aW9uCi0JCSAqIE1BQyBpbiB0aGlzIGNhc2Ugd291bGQgaGF2ZSBiZWVuIHNldCBieSByZWNldmluZyB0aGUKKwkJICogTUFDIGluIHRoaXMgY2FzZSB3b3VsZCBoYXZlIGJlZW4gc2V0IGJ5IHJlY2VpdmluZyB0aGUKIAkJICogRkxPR0kuCiAJCSAqLwogCQlpZiAoZmlwLT5zdGF0ZSA9PSBGSVBfU1RfTk9OX0ZJUCkgewpAQCAtMTg3Niw3ICsxODc2LDcgQEAKICAqIGZjb2VfY3Rscl92bl9ycG9ydF9jYWxsYmFjayAtIEV2ZW50IGhhbmRsZXIgZm9yIHJwb3J0IGV2ZW50cy4KICAqIEBscG9ydDogVGhlIGxwb3J0IHdoaWNoIGlzIHJlY2VpdmluZyB0aGUgZXZlbnQKICAqIEByZGF0YTogcmVtb3RlIHBvcnQgcHJpdmF0ZSBkYXRhCi0gKiBAZXZlbnQ6IFRoZSBldmVudCB0aGF0IG9jY3VyZWQKKyAqIEBldmVudDogVGhlIGV2ZW50IHRoYXQgb2NjdXJyZWQKICAqCiAgKiBMb2NraW5nIE5vdGU6ICBUaGUgcnBvcnQgbG9jayBtdXN0IG5vdCBiZSBoZWxkIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZmRvbWFpbi5jIGIvZHJpdmVycy9zY3NpL2Zkb21haW4uYwppbmRleCA2OWI3YWE1Li42NDNmNmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZmRvbWFpbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9mZG9tYWluLmMKQEAgLTE3NCw3ICsxNzQsNyBAQAogIEZ1dHVyZSBEb21haW4gc29sZCBET1MgQklPUyBzb3VyY2UgZm9yICQyNTAgYW5kIHRoZSBVTipYIGRyaXZlciBzb3VyY2Ugd2FzCiAgJDc1MCwgYnV0IHRoZXNlIHJlcXVpcmVkIGEgbm9uLWRpc2Nsb3N1cmUgYWdyZWVtZW50LCBzbyBldmVuIGlmIEkgY291bGQKICBoYXZlIGFmZm9yZGVkIHRoZW0sIHRoZXkgd291bGQgKm5vdCogaGF2ZSBiZWVuIHVzZWZ1bCBmb3Igd3JpdGluZyB0aGlzCi0gcHVibGljYWxseSBkaXN0cmlidXRhYmxlIGRyaXZlci4gIEZ1dHVyZSBEb21haW4gdGVjaG5pY2FsIHN1cHBvcnQgaGFzCisgcHVibGljbHkgZGlzdHJpYnV0YWJsZSBkcml2ZXIuICBGdXR1cmUgRG9tYWluIHRlY2huaWNhbCBzdXBwb3J0IGhhcwogIHByb3ZpZGVkIHNvbWUgaW5mb3JtYXRpb24gb24gdGhlIHBob25lIGFuZCBoYXZlIHNlbnQgYSBmZXcgdXNlZnVsIEZBWHMuCiAgVGhleSBoYXZlIGJlZW4gbXVjaCBtb3JlIGhlbHBmdWwgc2luY2UgdGhleSBzdGFydGVkIHRvIHJlY29nbml6ZSB0aGF0IHRoZQogIHdvcmQgIkxpbnV4IiByZWZlcnMgdG8gYW4gb3BlcmF0aW5nIHN5c3RlbSA6LSkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX2Zjcy5jIGIvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY19mY3MuYwppbmRleCAyYjQ4ZDc5Li4zYzUzYzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX2Zjcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfZmNzLmMKQEAgLTQxMSw3ICs0MTEsNyBAQAogCQkJZXJyID0gdm5pY19ycV9maWxsKCZmbmljLT5ycVtpXSwgZm5pY19hbGxvY19ycV9mcmFtZSk7CiAJCQlpZiAoZXJyKQogCQkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgZm5pYy0+bHBvcnQtPmhvc3QsCi0JCQkJCSAgICAgImZuaWNfYWxsb2NfcnFfZnJhbWUgY2FudCBhbGxvYyIKKwkJCQkJICAgICAiZm5pY19hbGxvY19ycV9mcmFtZSBjYW4ndCBhbGxvYyIKIAkJCQkJICAgICAiIGZyYW1lXG4iKTsKIAkJfQogCQl0b3RfcnFfd29ya19kb25lICs9IGN1cl93b3JrX2RvbmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfc2NzaS5jCmluZGV4IDIyZDAyNDAuLjUzOGIzMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfc2NzaS5jCkBAIC0xMTIzLDcgKzExMjMsNyBAQAogCQkJCQkgICAgZmNfbHVuLnNjc2lfbHVuLCBpb19yZXEpKSB7CiAJCQkvKgogCQkJICogUmV2ZXJ0IHRoZSBjbWQgc3RhdGUgYmFjayB0byBvbGQgc3RhdGUsIGlmCi0JCQkgKiBpdCBoYXNudCBjaGFuZ2VkIGluIGJldHdlZW4uIFRoaXMgY21kIHdpbGwgZ2V0CisJCQkgKiBpdCBoYXNuJ3QgY2hhbmdlZCBpbiBiZXR3ZWVuLiBUaGlzIGNtZCB3aWxsIGdldAogCQkJICogYWJvcnRlZCBsYXRlciBieSBzY3NpX2VoLCBvciBjbGVhbmVkIHVwIGR1cmluZwogCQkJICogbHVuIHJlc2V0CiAJCQkgKi8KQEAgLTEyMDgsNyArMTIwOCw3IEBACiAJCQkJCSAgICBmY19sdW4uc2NzaV9sdW4sIGlvX3JlcSkpIHsKIAkJCS8qCiAJCQkgKiBSZXZlcnQgdGhlIGNtZCBzdGF0ZSBiYWNrIHRvIG9sZCBzdGF0ZSwgaWYKLQkJCSAqIGl0IGhhc250IGNoYW5nZWQgaW4gYmV0d2Vlbi4gVGhpcyBjbWQgd2lsbCBnZXQKKwkJCSAqIGl0IGhhc24ndCBjaGFuZ2VkIGluIGJldHdlZW4uIFRoaXMgY21kIHdpbGwgZ2V0CiAJCQkgKiBhYm9ydGVkIGxhdGVyIGJ5IHNjc2lfZWgsIG9yIGNsZWFuZWQgdXAgZHVyaW5nCiAJCQkgKiBsdW4gcmVzZXQKIAkJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2dfTkNSNTM4MC5jIGIvZHJpdmVycy9zY3NpL2dfTkNSNTM4MC5jCmluZGV4IDQyN2E1NmQuLjgxMTgyYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9nX05DUjUzODAuYworKysgYi9kcml2ZXJzL3Njc2kvZ19OQ1I1MzgwLmMKQEAgLTU2Niw3ICs1NjYsNyBAQAogICoJQGRzdDogYnVmZmVyIHRvIHJlYWQgaW50bwogICoJQGxlbjogYnVmZmVyIGxlbmd0aAogICoKLSAqCVBlcmZvcm0gYSBwc3VlZG8gRE1BIG1vZGUgcmVhZCBmcm9tIGFuIE5DUjUzQzQwMCBvciBlcXVpdmFsZW50CisgKglQZXJmb3JtIGEgcHNldWRvIERNQSBtb2RlIHJlYWQgZnJvbSBhbiBOQ1I1M0M0MDAgb3IgZXF1aXZhbGVudAogICoJY29udHJvbGxlcgogICovCiAgCkBAIC02NTAsNyArNjUwLDcgQEAKICAqCUBkc3Q6IGJ1ZmZlciB0byByZWFkIGludG8KICAqCUBsZW46IGJ1ZmZlciBsZW5ndGgKICAqCi0gKglQZXJmb3JtIGEgcHN1ZWRvIERNQSBtb2RlIHJlYWQgZnJvbSBhbiBOQ1I1M0M0MDAgb3IgZXF1aXZhbGVudAorICoJUGVyZm9ybSBhIHBzZXVkbyBETUEgbW9kZSByZWFkIGZyb20gYW4gTkNSNTNDNDAwIG9yIGVxdWl2YWxlbnQKICAqCWNvbnRyb2xsZXIKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZ2R0aC5oIGIvZHJpdmVycy9zY3NpL2dkdGguaAppbmRleCAxMjBhMDYyLi5kOTY5ODU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ2R0aC5oCisrKyBiL2RyaXZlcnMvc2NzaS9nZHRoLmgKQEAgLTg5NSw3ICs4OTUsNyBAQAogICAgICAgICB1OCAgICAgICAgICBsZHJfbm87ICAgICAgICAgICAgICAgICAvKiBsb2cuIGRyaXZlIG5vLiAqLwogICAgICAgICB1OCAgICAgICAgICByd19hdHRyaWJzOyAgICAgICAgICAgICAvKiByL3cgYXR0cmlidXRlcyAqLwogICAgICAgICB1OCAgICAgICAgICBjbHVzdGVyX3R5cGU7ICAgICAgICAgICAvKiBjbHVzdGVyIHByb3BlcnRpZXMgKi8KLSAgICAgICAgdTggICAgICAgICAgbWVkaWFfY2hhbmdlZDsgICAgICAgICAgLyogRmxhZzpNT1VOVC9VTk1PVU5UIG9jY3VyZWQgKi8KKyAgICAgICAgdTggICAgICAgICAgbWVkaWFfY2hhbmdlZDsgICAgICAgICAgLyogRmxhZzpNT1VOVC9VTk1PVU5UIG9jY3VycmVkICovCiAgICAgICAgIHUzMiAgICAgICAgIHN0YXJ0X3NlYzsgICAgICAgICAgICAgIC8qIHN0YXJ0IHNlY3RvciAqLwogICAgIH0gaGRyW01BWF9MRFJJVkVTXTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogaG9zdCBkcml2ZXMgKi8KICAgICBzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2d2cDExLmMgYi9kcml2ZXJzL3Njc2kvZ3ZwMTEuYwppbmRleCAyY2UyNmViLi41MGJiNTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ3ZwMTEuYworKysgYi9kcml2ZXJzL3Njc2kvZ3ZwMTEuYwpAQCAtMzAwLDcgKzMwMCw3IEBACiAJLyoKIAkgKiBSdW1vcnMgc3RhdGUgdGhhdCBzb21lIEdWUCByYW0gYm9hcmRzIHVzZSB0aGUgc2FtZSBwcm9kdWN0CiAJICogY29kZSBhcyB0aGUgU0NTSSBjb250cm9sbGVycy4gVGhlcmVmb3JlIGlmIHRoZSBib2FyZC1zaXplCi0JICogaXMgbm90IDY0S0Igd2UgYXN1bWUgaXQgaXMgYSByYW0gYm9hcmQgYW5kIGJhaWwgb3V0LgorCSAqIGlzIG5vdCA2NEtCIHdlIGFzc3VtZSBpdCBpcyBhIHJhbSBib2FyZCBhbmQgYmFpbCBvdXQuCiAJICovCiAJaWYgKHpvcnJvX3Jlc291cmNlX2xlbih6KSAhPSAweDEwMDAwKQogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pbW0uYyBiL2RyaXZlcnMvc2NzaS9pbW0uYwppbmRleCA5OWFhMGU1Li4yNmNkOWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaW1tLmMKKysrIGIvZHJpdmVycy9zY3NpL2ltbS5jCkBAIC0zLDcgKzMsNyBAQAogICogCiAgKiAoVGhlIElNTSBpcyB0aGUgZW1iZWRkZWQgY29udHJvbGxlciBpbiB0aGUgWklQIFBsdXMgZHJpdmUuKQogICogCi0gKiBNeSB1bm9mZmljYWwgY29tcGFueSBhY3JvbnltIGxpc3QgaXMgMjEgcGFnZXMgbG9uZzoKKyAqIE15IHVub2ZmaWNpYWwgY29tcGFueSBhY3JvbnltIGxpc3QgaXMgMjEgcGFnZXMgbG9uZzoKICAqICAgICAgRkxBOiAgICBGb3VyIGxldHRlciBhY3JvbnltIHdpdGggYnVpbHQgaW4gZmFjaWxpdHkgZm9yCiAgKiAgICAgICAgICAgICAgZnV0dXJlIGV4cGFuc2lvbiB0byBmaXZlIGxldHRlcnMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pbml0aW8uYyBiL2RyaXZlcnMvc2NzaS9pbml0aW8uYwppbmRleCA5NjI3ZDA2Li5kZDc0MWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaW5pdGlvLmMKKysrIGIvZHJpdmVycy9zY3NpL2luaXRpby5jCkBAIC0yNDIsNyArMjQyLDcgQEAKIAogc3RhdGljIHU4IGluaXRpb19yYXRlX3RibFs4XSA9CS8qIGZhc3QgMjAgICAgICAqLwogewotCQkJCS8qIG5hbm9zZWNvbmQgZGV2aWRlIGJ5IDQgKi8KKwkJCQkvKiBuYW5vc2Vjb25kIGRpdmlkZSBieSA0ICovCiAJMTIsCQkJLyogNTBucywgIDIwTSAgICovCiAJMTgsCQkJLyogNzVucywgIDEzLjNNICovCiAJMjUsCQkJLyogMTAwbnMsIDEwTSAgICovCkBAIC0xOTE3LDcgKzE5MTcsNyBAQAogfQogCiAvKioKLSAqCWludF9pbml0aW9fc2NzaV9yZXNlbAktCVJlc2VsZWN0aW9uIG9jY3VyZWQKKyAqCWludF9pbml0aW9fc2NzaV9yZXNlbAktCVJlc2VsZWN0aW9uIG9jY3VycmVkCiAgKglAaG9zdDogSW5pdElPIGhvc3QgYWRhcHRlcgogICoKICAqCUEgU0NTSSByZXNlbGVjdGlvbiBldmVudCBoYXMgYmVlbiBzaWduYWxsZWQgYW5kIHRoZSBpbnRlcnJ1cHQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pbml0aW8uaCBiL2RyaXZlcnMvc2NzaS9pbml0aW8uaAppbmRleCBlNThhZjllLi4yMTliOTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaW5pdGlvLmgKKysrIGIvZHJpdmVycy9zY3NpL2luaXRpby5oCkBAIC0xMTYsNyArMTE2LDcgQEAKICNkZWZpbmUgVFVMX1NCdXNJZCAgICAgIDB4ODkJLyogMDkgUiAgIFNDU0kgQlVTIElEICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFRVTF9TVGltZU91dCAgICAweDhBCS8qIDBBIFcgICBTZWwvUmVzZWwgVGltZSBPdXQgUmVnaXN0ZXIgICAqLwogI2RlZmluZSBUVUxfU0lkZW50ICAgICAgMHg4QQkvKiAwQSBSICAgSWRlbnRpZnkgTWVzc2FnZSBSZWdpc3RlciAgICAgKi8KLSNkZWZpbmUgVFVMX1NBdmFpbCAgICAgIDB4OEEJLyogMEEgUiAgIEF2YWlsaWFibGUgQ291bnRlciBSZWdpc3RlciAgICovCisjZGVmaW5lIFRVTF9TQXZhaWwgICAgICAweDhBCS8qIDBBIFIgICBBdmFpbGFibGUgQ291bnRlciBSZWdpc3RlciAgICovCiAjZGVmaW5lIFRVTF9TRGF0YSAgICAgICAweDhCCS8qIDBCIFIvVyBTQ1NJIGRhdGEgaW4vb3V0ICAgICAgICAgICAgICAqLwogI2RlZmluZSBUVUxfU0ZpZm8gICAgICAgMHg4QwkvKiAwQyBSL1cgRklGTyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVFVMX1NTaWduYWwgICAgIDB4OTAJLyogMTAgUi9XIFNDU0kgc2lnbmFsIGluL291dCAgICAgICAgICAgICovCkBAIC0zODksNyArMzg5LDcgQEAKIC8qIEJpdCBEZWZpbml0aW9uIGZvciBzdGF0dXMgKi8KICNkZWZpbmUgU0NCX1JFTlQgICAgICAgIDB4MDEKICNkZWZpbmUgU0NCX1BFTkQgICAgICAgIDB4MDIKLSNkZWZpbmUgU0NCX0NPTlRJRyAgICAgIDB4MDQJLyogQ29udGlnZW50IEFsbGVnaWFuY2UgKi8KKyNkZWZpbmUgU0NCX0NPTlRJRyAgICAgIDB4MDQJLyogQ29udGluZ2VudCBBbGxlZ2lhbmNlICovCiAjZGVmaW5lIFNDQl9TRUxFQ1QgICAgICAweDA4CiAjZGVmaW5lIFNDQl9CVVNZICAgICAgICAweDEwCiAjZGVmaW5lIFNDQl9ET05FICAgICAgICAweDIwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXBzLmMgYi9kcml2ZXJzL3Njc2kvaXBzLmMKaW5kZXggYjI1MTFhYy4uMjE4ZjcxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9pcHMuYwpAQCAtMTM3LDcgKzEzNyw3IEBACiAvKiAgICAgICAgICAtIEZpeCBwYXRoL25hbWUgZm9yIHNjc2lfaG9zdHMuaCBpbmNsdWRlIGZvciAyLjYga2VybmVscyAgICAgICAgICovCiAvKiAgICAgICAgICAtIEZpeCBzb3J0IG9yZGVyIG9mIDdrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAtIFJlbW92ZSAzIHVudXNlZCAiaW5saW5lIiBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA3LjEyLnh4ICAtIFVzZSBTVEFUSUMgZnVuY3Rpb25zIHdoZXJlZXZlciBwb3NzaWJsZSAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA3LjEyLnh4ICAtIFVzZSBTVEFUSUMgZnVuY3Rpb25zIHdoZXJldmVyIHBvc3NpYmxlICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgIC0gQ2xlYW4gdXAgZGVwcmVjYXRlZCBNT0RVTEVfUEFSTSBjYWxscyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIDcuMTIuMDUgIC0gUmVtb3ZlIFZlcnNpb24gTWF0Y2hpbmcgcGVyIElCTSByZXF1ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE2NjUsNyArMTY2NSw3IEBACiAJaW50IGRhdGFzaXplOwogCiAJLyogVHJvbWJvbmUgaXMgdGhlIG9ubHkgY29wcGVyaGVhZCB0aGF0IGNhbiBkbyBwYWNrZXQgZmxhc2gsIGJ1dCBvbmx5Ci0JICogZm9yIGZpcm13YXJlLiBObyBvbmUgc2FpZCBpdCBoYWQgdG8gbWFrZSBzZW5jZS4gKi8KKwkgKiBmb3IgZmlybXdhcmUuIE5vIG9uZSBzYWlkIGl0IGhhZCB0byBtYWtlIHNlbnNlLiAqLwogCWlmIChJUFNfSVNfVFJPTUJPTkUoaGEpICYmIHB0LT5Db3BwQ1AuY21kLmZsYXNoZncudHlwZSA9PSBJUFNfRldfSU1BR0UpIHsKIAkJaWYgKGlwc191c3JjbWQoaGEsIHB0LCBzY2IpKQogCQkJcmV0dXJuIElQU19TVUNDRVNTOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lwcy5oIGIvZHJpdmVycy9zY3NpL2lwcy5oCmluZGV4IDRlNDlmYmMuLmYyZGYwNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pcHMuaAorKysgYi9kcml2ZXJzL3Njc2kvaXBzLmgKQEAgLTExOTMsNyArMTE5Myw3IEBACiAjZGVmaW5lIElQU19WRVJfU0VCUklORyAiNy4xMi4wMiIKICNkZWZpbmUgSVBTX1ZFUl9LRVlXRVNUICI3LjEyLjAyIgogCi0vKiBDb21wYXRhYmlsaXR5IElEcyBmb3IgdmFyaW91cyBhZGFwdGVycyAqLworLyogQ29tcGF0aWJpbGl0eSBJRHMgZm9yIHZhcmlvdXMgYWRhcHRlcnMgKi8KICNkZWZpbmUgSVBTX0NPTVBBVF9VTktOT1dOICIiCiAjZGVmaW5lIElQU19DT01QQVRfQ1VSUkVOVCAiS1c3MTAiCiAjZGVmaW5lIElQU19DT01QQVRfU0VSVkVSQUlEMSAiMi4yNS4wMSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYyBiL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYwppbmRleCBhODYwNDUyLi4zZGY5ODUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKKysrIGIvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCkBAIC0yOTUsNyArMjk1LDcgQEAKIAkJcmMgPSBpc2NzaV9zd190Y3BfeG1pdF9zZWdtZW50KHRjcF9jb25uLCBzZWdtZW50KTsKIAkJLyoKIAkJICogV2UgbWF5IG5vdCBoYXZlIGJlZW4gYWJsZSB0byBzZW5kIGRhdGEgYmVjYXVzZSB0aGUgY29ubgotCQkgKiBpcyBnZXR0aW5nIHN0b3BwZWQuIGxpYmlzY3NpIHdpbGwga25vdyBzbyBwcm9wb2dhdGUgZXJyCisJCSAqIGlzIGdldHRpbmcgc3RvcHBlZC4gbGliaXNjc2kgd2lsbCBrbm93IHNvIHByb3BhZ2F0ZSBlcnIKIAkJICogZm9yIGl0IHRvIGRvIHRoZSByaWdodCB0aGluZy4KIAkJICovCiAJCWlmIChyYyA9PSAtRUFHQUlOKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2V4Y2guYyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19leGNoLmMKaW5kZXggMjgyMzFiYS4uNzcwMzVhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2V4Y2guYworKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZXhjaC5jCkBAIC0xMDQyLDcgKzEwNDIsNyBAQAogfQogCiAvKioKLSAqIGZjX3NlcV9lbHNfcnNwX3NlbmQoKSAtIFNlbmQgYW4gRUxTIHJlc3BvbnNlIHVzaW5nIGluZm9tYXRpb24gZnJvbQorICogZmNfc2VxX2Vsc19yc3Bfc2VuZCgpIC0gU2VuZCBhbiBFTFMgcmVzcG9uc2UgdXNpbmcgaW5mb3JtYXRpb24gZnJvbQogICoJCQkgICB0aGUgZXhpc3Rpbmcgc2VxdWVuY2UvZXhjaGFuZ2UuCiAgKiBAZnA6CSAgICAgIFRoZSByZWNlaXZlZCBmcmFtZQogICogQGVsc19jbWQ6ICBUaGUgRUxTIGNvbW1hbmQgdG8gYmUgc2VudApAQCAtMTE1Myw3ICsxMTUzLDcgQEAKICAqIGZjX2V4Y2hfc2VuZF9iYV9yanQoKSAtIFNlbmQgQkxTIFJlamVjdAogICogQHJ4X2ZwOiAgVGhlIGZyYW1lIGJlaW5nIHJlamVjdGVkCiAgKiBAcmVhc29uOiBUaGUgcmVhc29uIHRoZSBmcmFtZSBpcyBiZWluZyByZWplY3RlZAotICogQGV4cGxhbjogVGhlIGV4cGxhaW5hdGlvbiBmb3IgdGhlIHJlamVjdGlvbgorICogQGV4cGxhbjogVGhlIGV4cGxhbmF0aW9uIGZvciB0aGUgcmVqZWN0aW9uCiAgKgogICogVGhpcyBpcyBmb3IgcmVqZWN0aW5nIEJBX0FCVFMgb25seS4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jCmluZGV4IGIxYjAzYWYuLjViNzk5YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYworKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMKQEAgLTg3MCw3ICs4NzAsNyBAQAogCQkJCWZzcC0+c2NzaV9yZXNpZCA9IG50b2hsKHJwX2V4LT5mcl9yZXNpZCk7CiAJCQkJLyoKIAkJCQkgKiBUaGUgY21uZC0+dW5kZXJmbG93IGlzIHRoZSBtaW5pbXVtIG51bWJlciBvZgotCQkJCSAqIGJ5dGVzIHRoYXQgbXVzdCBiZSB0cmFuc2ZlcmVkIGZvciB0aGlzCisJCQkJICogYnl0ZXMgdGhhdCBtdXN0IGJlIHRyYW5zZmVycmVkIGZvciB0aGlzCiAJCQkJICogY29tbWFuZC4gIFByb3ZpZGVkIGEgc2Vuc2UgY29uZGl0aW9uIGlzIG5vdAogCQkJCSAqIHByZXNlbnQsIG1ha2Ugc3VyZSB0aGUgYWN0dWFsIGFtb3VudAogCQkJCSAqIHRyYW5zZmVycmVkIGlzIGF0IGxlYXN0IHRoZSB1bmRlcmZsb3cgdmFsdWUKQEAgLTEzMDYsNyArMTMwNiw3IEBACiB9CiAKIC8qKgotICogZmNfdG1fZG9uZSgpIC0gVGFzayBNYW5hZ21lbnQgcmVzcG9uc2UgaGFuZGxlcgorICogZmNfdG1fZG9uZSgpIC0gVGFzayBNYW5hZ2VtZW50IHJlc3BvbnNlIGhhbmRsZXIKICAqIEBzZXE6IFRoZSBzZXF1ZW5jZSB0aGF0IHRoZSByZXNwb25zZSBpcyBvbgogICogQGZwOgkgVGhlIHJlc3BvbnNlIGZyYW1lCiAgKiBAYXJnOiBUaGUgRkNQIHBhY2tldCB0aGUgcmVzcG9uc2UgaXMgZm9yCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbHBvcnQuYyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19scG9ydC5jCmluZGV4IDhjMDhiMjEuLjkwNmJiY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19scG9ydC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19scG9ydC5jCkBAIC01Miw3ICs1Miw3IEBACiAgKiB3aGlsZSBtYWtpbmcgdGhlIGNhbGxiYWNrLiBUbyBlbnN1cmUgdGhhdCB0aGUgcnBvcnQgaXMgbm90IGZyZWUnZCB3aGlsZQogICogcHJvY2Vzc2luZyB0aGUgY2FsbGJhY2sgdGhlIHJwb3J0IGNhbGxiYWNrcyBhcmUgc2VyaWFsaXplZCB0aHJvdWdoIGEKICAqIHNpbmdsZS10aHJlYWRlZCB3b3JrcXVldWUuIEFuIHJwb3J0IHdvdWxkIG5ldmVyIGJlIGZyZWUnZCB3aGlsZSBpbiBhCi0gKiBjYWxsYmFjayBoYW5kbGVyIGJlY3Vhc2Ugbm8gb3RoZXIgcnBvcnQgd29yayBpbiB0aGlzIHF1ZXVlIGNhbiBiZSBleGVjdXRlZAorICogY2FsbGJhY2sgaGFuZGxlciBiZWNhdXNlIG5vIG90aGVyIHJwb3J0IHdvcmsgaW4gdGhpcyBxdWV1ZSBjYW4gYmUgZXhlY3V0ZWQKICAqIGF0IHRoZSBzYW1lIHRpbWUuCiAgKgogICogV2hlbiBkaXNjb3Zlcnkgc3VjY2VlZHMgb3IgZmFpbHMgYSBjYWxsYmFjayBpcyBtYWRlIHRvIHRoZSBscG9ydCBhcwpAQCAtMTYzLDcgKzE2Myw3IEBACiAgKiBmY19scG9ydF9ycG9ydF9jYWxsYmFjaygpIC0gRXZlbnQgaGFuZGxlciBmb3IgcnBvcnQgZXZlbnRzCiAgKiBAbHBvcnQ6IFRoZSBscG9ydCB3aGljaCBpcyByZWNlaXZpbmcgdGhlIGV2ZW50CiAgKiBAcmRhdGE6IHByaXZhdGUgcmVtb3RlIHBvcnQgZGF0YQotICogQGV2ZW50OiBUaGUgZXZlbnQgdGhhdCBvY2N1cmVkCisgKiBAZXZlbnQ6IFRoZSBldmVudCB0aGF0IG9jY3VycmVkCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGUgcnBvcnQgbG9jayBzaG91bGQgbm90IGJlIGhlbGQgd2hlbiBjYWxsaW5nCiAgKgkJIHRoaXMgZnVuY3Rpb24uCkBAIC0zNzksNyArMzc5LDcgQEAKIAogLyoqCiAgKiBmY19scG9ydF9yZWN2X3JsaXJfcmVxKCkgLSBIYW5kbGUgcmVjZWl2ZWQgUmVnaXN0ZXJlZCBMaW5rIEluY2lkZW50IFJlcG9ydC4KLSAqIEBscG9ydDogRmlicmUgQ2hhbm5lbCBsb2NhbCBwb3J0IHJlY2lldmluZyB0aGUgUkxJUgorICogQGxwb3J0OiBGaWJyZSBDaGFubmVsIGxvY2FsIHBvcnQgcmVjZWl2aW5nIHRoZSBSTElSCiAgKiBAZnA6CSAgIFRoZSBSTElSIHJlcXVlc3QgZnJhbWUKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoZSBscG9ydCBsb2NrIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKQEAgLTM5Niw3ICszOTYsNyBAQAogCiAvKioKICAqIGZjX2xwb3J0X3JlY3ZfZWNob19yZXEoKSAtIEhhbmRsZSByZWNlaXZlZCBFQ0hPIHJlcXVlc3QKLSAqIEBscG9ydDogVGhlIGxvY2FsIHBvcnQgcmVjaWV2aW5nIHRoZSBFQ0hPCisgKiBAbHBvcnQ6IFRoZSBsb2NhbCBwb3J0IHJlY2VpdmluZyB0aGUgRUNITwogICogQGZwOgkgICBFQ0hPIHJlcXVlc3QgZnJhbWUKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoZSBscG9ydCBsb2NrIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKQEAgLTQzMiw3ICs0MzIsNyBAQAogCiAvKioKICAqIGZjX2xwb3J0X3JlY3Zfcm5pZF9yZXEoKSAtIEhhbmRsZSByZWNlaXZlZCBSZXF1ZXN0IE5vZGUgSUQgZGF0YSByZXF1ZXN0Ci0gKiBAbHBvcnQ6IFRoZSBsb2NhbCBwb3J0IHJlY2lldmluZyB0aGUgUk5JRAorICogQGxwb3J0OiBUaGUgbG9jYWwgcG9ydCByZWNlaXZpbmcgdGhlIFJOSUQKICAqIEBmcDoJICAgVGhlIFJOSUQgcmVxdWVzdCBmcmFtZQogICoKICAqIExvY2tpbmcgTm90ZTogVGhlIGxwb3J0IGxvY2sgaXMgZXhwZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUgY2FsbGluZwpAQCAtNDkxLDcgKzQ5MSw3IEBACiAKIC8qKgogICogZmNfbHBvcnRfcmVjdl9sb2dvX3JlcSgpIC0gSGFuZGxlIHJlY2VpdmVkIGZhYnJpYyBMT0dPIHJlcXVlc3QKLSAqIEBscG9ydDogVGhlIGxvY2FsIHBvcnQgcmVjaWV2aW5nIHRoZSBMT0dPCisgKiBAbHBvcnQ6IFRoZSBsb2NhbCBwb3J0IHJlY2VpdmluZyB0aGUgTE9HTwogICogQGZwOgkgICBUaGUgTE9HTyByZXF1ZXN0IGZyYW1lCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGUgbHBvcnQgbG9jayBpcyBleGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKQEAgLTc3MSw3ICs3NzEsNyBAQAogCiAvKioKICAqIGZjX2xwb3J0X3JlY3ZfZmxvZ2lfcmVxKCkgLSBSZWNlaXZlIGEgRkxPR0kgcmVxdWVzdAotICogQGxwb3J0OiBUaGUgbG9jYWwgcG9ydCB0aGF0IHJlY2lldmVkIHRoZSByZXF1ZXN0CisgKiBAbHBvcnQ6IFRoZSBsb2NhbCBwb3J0IHRoYXQgcmVjZWl2ZWQgdGhlIHJlcXVlc3QKICAqIEByeF9mcDogVGhlIEZMT0dJIGZyYW1lCiAgKgogICogQSByZWNlaXZlZCBGTE9HSSByZXF1ZXN0IGluZGljYXRlcyBhIHBvaW50LXRvLXBvaW50IGNvbm5lY3Rpb24uCkBAIC04NTgsNyArODU4LDcgQEAKICAqIGlmIGFuIHJwb3J0IHNob3VsZCBoYW5kbGUgdGhlIHJlcXVlc3QuCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkIHdpdGggdGhlIGxwb3J0Ci0gKgkJIGxvY2sgaGVsZCBiZWN1YXNlIGl0IHdpbGwgZ3JhYiB0aGUgbG9jay4KKyAqCQkgbG9jayBoZWxkIGJlY2F1c2UgaXQgd2lsbCBncmFiIHRoZSBsb2NrLgogICovCiBzdGF0aWMgdm9pZCBmY19scG9ydF9yZWN2X2Vsc19yZXEoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKIAkJCQkgIHN0cnVjdCBmY19mcmFtZSAqZnApCkBAIC05MjUsNyArOTI1LDcgQEAKICAqIEBmcDogVGhlIGZyYW1lIHRoZSByZXF1ZXN0IGlzIGluCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkIHdpdGggdGhlIGxwb3J0Ci0gKgkJIGxvY2sgaGVsZCBiZWN1YXNlIGl0IG1heSBncmFiIHRoZSBsb2NrLgorICoJCSBsb2NrIGhlbGQgYmVjYXVzZSBpdCBtYXkgZ3JhYiB0aGUgbG9jay4KICAqLwogc3RhdGljIHZvaWQgZmNfbHBvcnRfcmVjdl9yZXEoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKIAkJCSAgICAgIHN0cnVjdCBmY19mcmFtZSAqZnApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZXhwYW5kZXIuYwppbmRleCBmM2Y2OTNiLi44NzRlMjlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmMKQEAgLTI0MCw3ICsyNDAsNyBAQAogCQkJCSAgICAgICBkaXNjX3Jlc3AsIERJU0NPVkVSX1JFU1BfU0laRSk7CiAJCWlmIChyZXMpCiAJCQlyZXR1cm4gcmVzOwotCQkvKiBUaGlzIGlzIGRldGVjdGluZyBhIGZhaWx1cmUgdG8gdHJhbnNtaXQgaW5pdGFsCisJCS8qIFRoaXMgaXMgZGV0ZWN0aW5nIGEgZmFpbHVyZSB0byB0cmFuc21pdCBpbml0aWFsCiAJCSAqIGRldiB0byBob3N0IEZJUyBhcyBkZXNjcmliZWQgaW4gc2VjdGlvbiBHLjUgb2YKIAkJICogc2FzLTIgciAwNGIgKi8KIAkJZHIgPSAmKChzdHJ1Y3Qgc21wX3Jlc3AgKilkaXNjX3Jlc3ApLT5kaXNjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYwppbmRleCA0ZTBmYWEwLi4xN2Q3ODkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYwpAQCAtNDUxNSw3ICs0NTE1LDcgQEAKICAqIERlc2NyaXB0aW9uOgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHRyYW5zcG9ydCBhZnRlciB0aGUgQGZjX3Zwb3J0J3Mgc3ltYm9saWMgbmFtZQogICogaGFzIGJlZW4gY2hhbmdlZC4gVGhpcyBmdW5jdGlvbiByZS1yZWdpc3RlcnMgdGhlIHN5bWJvbGljIG5hbWUgd2l0aCB0aGUKLSAqIHN3aXRjaCB0byBwcm9wb2dhdGUgdGhlIGNoYW5nZSBpbnRvIHRoZSBmYWJyaWMgaWYgdGhlIHZwb3J0IGlzIGFjdGl2ZS4KKyAqIHN3aXRjaCB0byBwcm9wYWdhdGUgdGhlIGNoYW5nZSBpbnRvIHRoZSBmYWJyaWMgaWYgdGhlIHZwb3J0IGlzIGFjdGl2ZS4KICAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX3NldF92cG9ydF9zeW1ib2xpY19uYW1lKHN0cnVjdCBmY192cG9ydCAqZmNfdnBvcnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ic2cuYwppbmRleCA3OTNiOWYxLi43N2IyODcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmMKQEAgLTE5MzksNyArMTkzOSw3IEBACiAgKiBAcnh4cmk6IFJlY2VpdmUgZXhjaGFuZ2UgaWQKICAqIEBsZW46IE51bWJlciBvZiBkYXRhIGJ5dGVzCiAgKgotICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYW5kIHBvc3RzIGEgZGF0YSBidWZmZXIgb2Ygc3VmZmljaWVudCBzaXplIHRvIHJlY2lldmUKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGFuZCBwb3N0cyBhIGRhdGEgYnVmZmVyIG9mIHN1ZmZpY2llbnQgc2l6ZSB0byByZWNlaXZlCiAgKiBhbiB1bnNvbGljdGVkIENUIGNvbW1hbmQuCiAgKiovCiBzdGF0aWMgaW50IGxwZmNkaWFnX2xvb3BfcG9zdF9yeGJ1ZnMoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MTZfdCByeHhyaSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMKaW5kZXggYTc1MzU4MS4uM2Q5Njc3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMKQEAgLTkwOCw3ICs5MDgsNyBAQAogCWlmICghZGVidWcpCiAJCWdvdG8gb3V0OwogCi0JLyogUm91bmQgdG8gcGFnZSBib3VuZHJ5ICovCisJLyogUm91bmQgdG8gcGFnZSBib3VuZGFyeSAqLwogCXByaW50ayhLRVJOX0VSUiAiOTA1OSBCTEtHUkQ6ICAlczogX2R1bXBfYnVmX2RhdGE9MHglcFxuIiwKIAkJCV9fZnVuY19fLCBfZHVtcF9idWZfZGF0YSk7CiAJZGVidWctPmJ1ZmZlciA9IF9kdW1wX2J1Zl9kYXRhOwpAQCAtOTM4LDcgKzkzOCw3IEBACiAJaWYgKCFkZWJ1ZykKIAkJZ290byBvdXQ7CiAKLQkvKiBSb3VuZCB0byBwYWdlIGJvdW5kcnkgKi8KKwkvKiBSb3VuZCB0byBwYWdlIGJvdW5kYXJ5ICovCiAJcHJpbnRrKEtFUk5fRVJSCSI5MDYwIEJMS0dSRDogJXM6IF9kdW1wX2J1Zl9kaWY9MHglcCBmaWxlPSVzXG4iLAogCQlfX2Z1bmNfXywgX2R1bXBfYnVmX2RpZiwgZmlsZS0+Zl9kZW50cnktPmRfbmFtZS5uYW1lKTsKIAlkZWJ1Zy0+YnVmZmVyID0gX2R1bXBfYnVmX2RpZjsKQEAgLTIxNTgsNyArMjE1OCw3IEBACiAJCQlkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmFtZSwgcGhiYS0+aGJhX2RlYnVnZnNfcm9vdCk7CiAJCWlmICghdnBvcnQtPnZwb3J0X2RlYnVnZnNfcm9vdCkgewogCQkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19JTklULAotCQkJCQkgIjA0MTcgQ2FudCBjcmVhdGUgZGVidWdmc1xuIik7CisJCQkJCSAiMDQxNyBDYW4ndCBjcmVhdGUgZGVidWdmc1xuIik7CiAJCQlnb3RvIGRlYnVnX2ZhaWxlZDsKIAkJfQogCQlhdG9taWNfaW5jKCZwaGJhLT5kZWJ1Z2ZzX3Zwb3J0X2NvdW50KTsKQEAgLTIyMTEsNyArMjIxMSw3IEBACiAJCQkJIHZwb3J0LCAmbHBmY19kZWJ1Z2ZzX29wX25vZGVsaXN0KTsKIAlpZiAoIXZwb3J0LT5kZWJ1Z19ub2RlbGlzdCkgewogCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJICIwNDA5IENhbnQgY3JlYXRlIGRlYnVnZnMgbm9kZWxpc3RcbiIpOworCQkJCSAiMDQwOSBDYW4ndCBjcmVhdGUgZGVidWdmcyBub2RlbGlzdFxuIik7CiAJCWdvdG8gZGVidWdfZmFpbGVkOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKaW5kZXggNzM1MDI4Zi4uZDM0YjY5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAkJCSBwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSk7CiAKIAkvKiBDTEVBUl9MQSBzaG91bGQgcmUtZW5hYmxlIGxpbmsgYXR0ZW50aW9uIGV2ZW50cyBhbmQKLQkgKiB3ZSBzaG91bGQgdGhlbiBpbWVkaWF0ZWx5IHRha2UgYSBMQVRUIGV2ZW50LiBUaGUKKwkgKiB3ZSBzaG91bGQgdGhlbiBpbW1lZGlhdGVseSB0YWtlIGEgTEFUVCBldmVudC4gVGhlCiAJICogTEFUVCBwcm9jZXNzaW5nIHNob3VsZCBjYWxsIGxwZmNfbGlua2Rvd24oKSB3aGljaAogCSAqIHdpbGwgY2xlYW51cCBhbnkgbGVmdCBvdmVyIGluLXByb2dyZXNzIGRpc2NvdmVyeQogCSAqIGV2ZW50cy4KQEAgLTE1OTksNyArMTU5OSw3IEBACiAgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGlzc3VpbmcgdGhlIFBvcnQKICAqIExvZ2luIChQTE9HSSkgY29tbWFuZC4gRm9yIFBMT0dJIGNvbXBsZXRpb24sIHRoZXJlIG11c3QgYmUgYW4gYWN0aXZlCiAgKiBuZGxwIG9uIHRoZSB2cG9ydCBub2RlIGxpc3QgdGhhdCBtYXRjaGVzIHRoZSByZW1vdGUgbm9kZSBJRCBmcm9tIHRoZQotICogUExPR0kgcmVwb25zZSBJT0NCLiBJZiBzdWNoIG5kbHAgZG9lcyBub3QgZXhpc3QsIHRoZSBQTE9HSSBpcyBzaW1wbHkKKyAqIFBMT0dJIHJlc3BvbnNlIElPQ0IuIElmIHN1Y2ggbmRscCBkb2VzIG5vdCBleGlzdCwgdGhlIFBMT0dJIGlzIHNpbXBseQogICogaWdub3JlZCBhbmQgY29tbWFuZCBJT0NCIHJlbGVhc2VkLiBUaGUgUExPR0kgcmVzcG9uc2UgSU9DQiBzdGF0dXMgaXMKICAqIGNoZWNrZWQgZm9yIGVycm9yIGNvbmRpdG9ucy4gSWYgdGhlcmUgaXMgZXJyb3Igc3RhdHVzIHJlcG9ydGVkLCBQTE9HSQogICogcmV0cnkgc2hhbGwgYmUgYXR0ZW1wdGVkIGJ5IGludm9raW5nIHRoZSBscGZjX2Vsc19yZXRyeSgpIHJvdXRpbmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCmluZGV4IDE1NGM3MTUuLjMwMTQ5ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCkBAIC03MzksNyArNzM5LDcgQEAKIAogLyoKICAqIFRoaXMgaXMgb25seSBjYWxsZWQgdG8gaGFuZGxlIEZDIHdvcmtlciBldmVudHMuIFNpbmNlIHRoaXMgYSByYXJlCi0gKiBvY2N1cmFuY2UsIHdlIGFsbG9jYXRlIGEgc3RydWN0IGxwZmNfd29ya19ldnQgc3RydWN0dXJlIGhlcmUgaW5zdGVhZCBvZgorICogb2NjdXJyZW5jZSwgd2UgYWxsb2NhdGUgYSBzdHJ1Y3QgbHBmY193b3JrX2V2dCBzdHJ1Y3R1cmUgaGVyZSBpbnN0ZWFkIG9mCiAgKiBlbWJlZGRpbmcgaXQgaW4gdGhlIElPQ0IuCiAgKi8KIGludApAQCAtMTM0OCw3ICsxMzQ4LDcgQEAKIAlpbnQgcmM7CiAKIAlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKLQkvKiBJZiB0aGUgRkNGIGlzIG5vdCBhdmFpbGFiZSBkbyBub3RoaW5nLiAqLworCS8qIElmIHRoZSBGQ0YgaXMgbm90IGF2YWlsYWJsZSBkbyBub3RoaW5nLiAqLwogCWlmICghKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9BVkFJTEFCTEUpKSB7CiAJCXBoYmEtPmhiYV9mbGFnICY9IH4oRkNGX1RTX0lOUFJPRyB8IEZDRl9SUl9JTlBST0cpOwogCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwpAQCAtMTUzOCw3ICsxNTM4LDcgQEAKIAogCQkvKgogCQkgKiBJZiB1c2VyIGRpZCBub3Qgc3BlY2lmeSBhbnkgYWRkcmVzc2luZyBtb2RlLCBvciBpZiB0aGUKLQkJICogcHJlZmVyZWQgYWRkcmVzc2luZyBtb2RlIHNwZWNpZmllZCBieSB1c2VyIGlzIG5vdCBzdXBwb3J0ZWQKKwkJICogcHJlZmVycmVkIGFkZHJlc3NpbmcgbW9kZSBzcGVjaWZpZWQgYnkgdXNlciBpcyBub3Qgc3VwcG9ydGVkCiAJCSAqIGJ5IEZDRiwgYWxsb3cgZmFicmljIHRvIHBpY2sgdGhlIGFkZHJlc3NpbmcgbW9kZS4KIAkJICovCiAJCSphZGRyX21vZGUgPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY19hZGRyX3Byb3YsCkBAIC0xNTUzLDcgKzE1NTMsNyBAQAogCQkJCUZDRkNOQ1RfQU1fU1BNQSkgPwogCQkJCUxQRkNfRkNGX1NQTUEgOiBMUEZDX0ZDRl9GUE1BOwogCQkvKgotCQkgKiBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYSBwcmVmZXJlZCBhZGRyZXNzIG1vZGUsIHVzZSB0aGUKKwkJICogSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEgcHJlZmVycmVkIGFkZHJlc3MgbW9kZSwgdXNlIHRoZQogCQkgKiBhZGRyIG1vZGUgb25seSBpZiBGQ0Ygc3VwcG9ydCB0aGUgYWRkcl9tb2RlLgogCQkgKi8KIAkJZWxzZSBpZiAoKGNvbm5fZW50cnktPmNvbm5fcmVjLmZsYWdzICYgRkNGQ05DVF9BTV9WQUxJRCkgJiYKQEAgLTMxMTcsNyArMzExNyw3IEBACiAJCSAqIGJhY2sgYXQgcmVnIGxvZ2luIHN0YXRlIHNvIHRoaXMKIAkJICogbWJveCBuZWVkcyB0byBiZSBpZ25vcmVkIGJlY2FzZQogCQkgKiB0aGVyZSBpcyBhbm90aGVyIHJlZyBsb2dpbiBpbgotCQkgKiBwcm9jY2Vzcy4KKwkJICogcHJvY2Vzcy4KIAkJICovCiAJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfSUdOUl9SRUdfQ01QTDsKQEAgLTQ0NzcsNyArNDQ3Nyw3IEBACiAJaWYgKCh2cG9ydC0+ZmNfZmxhZyAmIEZDX1JTQ05fTU9ERSkgJiYKIAkgICAgISh2cG9ydC0+ZmNfZmxhZyAmIEZDX05ESVNDX0FDVElWRSkpIHsKIAkJaWYgKGxwZmNfcnNjbl9wYXlsb2FkX2NoZWNrKHZwb3J0LCBkaWQpKSB7Ci0JCQkvKiBJZiB3ZSd2ZSBhbHJlYWR5IHJlY2lldmVkIGEgUExPR0kgZnJvbSB0aGlzIE5Qb3J0CisJCQkvKiBJZiB3ZSd2ZSBhbHJlYWR5IHJlY2VpdmVkIGEgUExPR0kgZnJvbSB0aGlzIE5Qb3J0CiAJCQkgKiB3ZSBkb24ndCBuZWVkIHRvIHRyeSB0byBkaXNjb3ZlciBpdCBhZ2Fpbi4KIAkJCSAqLwogCQkJaWYgKG5kbHAtPm5scF9mbGFnICYgTkxQX1JDVl9QTE9HSSkKQEAgLTQ0OTMsNyArNDQ5Myw3IEBACiAJCX0gZWxzZQogCQkJbmRscCA9IE5VTEw7CiAJfSBlbHNlIHsKLQkJLyogSWYgd2UndmUgYWxyZWFkeSByZWNpZXZlZCBhIFBMT0dJIGZyb20gdGhpcyBOUG9ydCwKKwkJLyogSWYgd2UndmUgYWxyZWFkeSByZWNlaXZlZCBhIFBMT0dJIGZyb20gdGhpcyBOUG9ydCwKIAkJICogb3Igd2UgYXJlIGFscmVhZHkgaW4gdGhlIHByb2Nlc3Mgb2YgZGlzY292ZXJ5IG9uIGl0LAogCQkgKiB3ZSBkb24ndCBuZWVkIHRvIHRyeSB0byBkaXNjb3ZlciBpdCBhZ2Fpbi4KIAkJICovCkBAIC01NzU2LDcgKzU3NTYsNyBAQAogICogQHNpemU6IFNpemUgb2YgdGhlIGRhdGEgYnVmZmVyLgogICogQHJlY190eXBlOiBSZWNvcmQgdHlwZSB0byBiZSBzZWFyY2hlZC4KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIGNvbmZpZyByZWdpb24gZGF0YSB0byBmaW5kIHRoZSBiZWdpbmluZworICogVGhpcyBmdW5jdGlvbiBzZWFyY2hlcyBjb25maWcgcmVnaW9uIGRhdGEgdG8gZmluZCB0aGUgYmVnaW5uaW5nCiAgKiBvZiB0aGUgcmVjb3JkIHNwZWNpZmllZCBieSByZWNvcmRfdHlwZS4gSWYgcmVjb3JkIGZvdW5kLCB0aGlzCiAgKiBmdW5jdGlvbiByZXR1cm4gcG9pbnRlciB0byB0aGUgcmVjb3JkIGVsc2UgcmV0dXJuIE5VTEwuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKaW5kZXggZTZlYmU1MS4uNTA1Zjg4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKQEAgLTQ0NjYsNyArNDQ2Niw3IEBACiB9CiAKIC8qKgotICogbHBmY19pbml0X2FwaV90YWJsZV9zZXR1cCAtIFNldCB1cCBpbml0IGFwaSBmdWNudGlvbiBqdW1wIHRhYmxlCisgKiBscGZjX2luaXRfYXBpX3RhYmxlX3NldHVwIC0gU2V0IHVwIGluaXQgYXBpIGZ1bmN0aW9uIGp1bXAgdGFibGUKICAqIEBwaGJhOiBUaGUgaGJhIHN0cnVjdCBmb3Igd2hpY2ggdGhpcyBjYWxsIGlzIGJlaW5nIGV4ZWN1dGVkLgogICogQGRldl9ncnA6IFRoZSBIQkEgUENJLURldmljZSBncm91cCBudW1iZXIuCiAgKgpAQCAtNDg1MCw3ICs0ODUwLDcgQEAKICAqCiAgKiBSZXR1cm4gY29kZXMKICAqIAkwIC0gc3VjY2Vzc2Z1bAotICogCS1FTk9NRU0gLSBObyBhdmFpbGJsZSBtZW1vcnkKKyAqIAktRU5PTUVNIC0gTm8gYXZhaWxhYmxlIG1lbW9yeQogICogICAgICAtRUlPIC0gVGhlIG1haWxib3ggZmFpbGVkIHRvIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseS4KICAqKi8KIGludApAQCAtNTczMCw3ICs1NzMwLDcgQEAKICAqCiAgKiBSZXR1cm4gY29kZXMKICAqIAkwIC0gc3VjY2Vzc2Z1bAotICogCS1FTk9NRU0gLSBObyBhdmFpbGJsZSBtZW1vcnkKKyAqIAktRU5PTUVNIC0gTm8gYXZhaWxhYmxlIG1lbW9yeQogICogICAgICAtRUlPIC0gVGhlIG1haWxib3ggZmFpbGVkIHRvIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseS4KICAqKi8KIHN0YXRpYyBpbnQKQEAgLTU4MzUsNyArNTgzNSw3IEBACiAgKgogICogUmV0dXJuIGNvZGVzCiAgKiAJMCAtIHN1Y2Nlc3NmdWwKLSAqIAktRU5PTUVNIC0gTm8gYXZhaWxibGUgbWVtb3J5CisgKiAJLUVOT01FTSAtIE5vIGF2YWlsYWJsZSBtZW1vcnkKICAqICAgICAgLUVJTyAtIFRoZSBtYWlsYm94IGZhaWxlZCB0byBjb21wbGV0ZSBzdWNjZXNzZnVsbHkuCiAgKiovCiBzdGF0aWMgaW50CkBAIC01ODk0LDcgKzU4OTQsNyBAQAogICoKICAqIFJldHVybiBjb2RlcwogICogICAgICAwIC0gc3VjY2Vzc2Z1bAotICogICAgICAtRU5PTUVNIC0gTm8gYXZhaWxibGUgbWVtb3J5CisgKiAgICAgIC1FTk9NRU0gLSBObyBhdmFpbGFibGUgbWVtb3J5CiAgKiAgICAgIC1FSU8gLSBUaGUgbWFpbGJveCBmYWlsZWQgdG8gY29tcGxldGUgc3VjY2Vzc2Z1bGx5LgogICoqLwogc3RhdGljIGludApAQCAtNjE4OSw3ICs2MTg5LDcgQEAKICAqCiAgKiBSZXR1cm4gY29kZXMKICAqICAgICAgMCAtIHN1Y2Nlc3NmdWwKLSAqICAgICAgLUVOT01FTSAtIE5vIGF2YWlsYmxlIG1lbW9yeQorICogICAgICAtRU5PTUVNIC0gTm8gYXZhaWxhYmxlIG1lbW9yeQogICogICAgICAtRUlPIC0gVGhlIG1haWxib3ggZmFpbGVkIHRvIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseS4KICAqKi8KIHN0YXRpYyB2b2lkCkBAIC02MjUzLDcgKzYyNTMsNyBAQAogICoKICAqIFJldHVybiBjb2RlcwogICogICAgICAwIC0gc3VjY2Vzc2Z1bAotICogICAgICAtRU5PTUVNIC0gTm8gYXZhaWxibGUgbWVtb3J5CisgKiAgICAgIC1FTk9NRU0gLSBObyBhdmFpbGFibGUgbWVtb3J5CiAgKiAgICAgIC1FSU8gLSBUaGUgbWFpbGJveCBmYWlsZWQgdG8gY29tcGxldGUgc3VjY2Vzc2Z1bGx5LgogICoqLwogaW50CkBAIC02NDk4LDcgKzY0OTgsNyBAQAogICoKICAqIFJldHVybiBjb2RlcwogICogICAgICAwIC0gc3VjY2Vzc2Z1bAotICogICAgICAtRU5PTUVNIC0gTm8gYXZhaWxibGUgbWVtb3J5CisgKiAgICAgIC1FTk9NRU0gLSBObyBhdmFpbGFibGUgbWVtb3J5CiAgKiAgICAgIC1FSU8gLSBUaGUgbWFpbGJveCBmYWlsZWQgdG8gY29tcGxldGUgc3VjY2Vzc2Z1bGx5LgogICoqLwogdm9pZApAQCAtNjU0Myw3ICs2NTQzLDcgQEAKICAqCiAgKiBSZXR1cm4gY29kZXMKICAqICAgICAgMCAtIHN1Y2Nlc3NmdWwKLSAqICAgICAgLUVOT01FTSAtIE5vIGF2YWlsYmxlIG1lbW9yeQorICogICAgICAtRU5PTUVNIC0gTm8gYXZhaWxhYmxlIG1lbW9yeQogICoqLwogc3RhdGljIGludAogbHBmY19zbGk0X2NxX2V2ZW50X3Bvb2xfY3JlYXRlKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKQEAgLTY3MDQsNyArNjcwNCw3IEBACiAgKgogICogUmV0dXJuIGNvZGVzCiAgKiAgICAgIDAgLSBzdWNjZXNzZnVsCi0gKiAgICAgIC1FTk9NRU0gLSBObyBhdmFpbGJsZSBtZW1vcnkKKyAqICAgICAgLUVOT01FTSAtIE5vIGF2YWlsYWJsZSBtZW1vcnkKICAqICAgICAgLUVJTyAtIFRoZSBtYWlsYm94IGZhaWxlZCB0byBjb21wbGV0ZSBzdWNjZXNzZnVsbHkuCiAgKiovCiBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKaW5kZXggZGJhMzJkZi4uZmJhYjk3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKQEAgLTE4MzQsNyArMTgzNCw3IEBACiAgKiBAZmNmX2luZGV4OiBpbmRleCB0byBmY2YgdGFibGUuCiAgKgogICogVGhpcyByb3V0aW5lIHJvdXRpbmUgYWxsb2NhdGVzIGFuZCBjb25zdHJ1Y3RzIG5vbi1lbWJlZGRlZCBtYWlsYm94IGNvbW1hbmQKLSAqIGZvciByZWFkaW5nIGEgRkNGIHRhYmxlIGVudHJ5IHJlZmVyZWQgYnkgQGZjZl9pbmRleC4KKyAqIGZvciByZWFkaW5nIGEgRkNGIHRhYmxlIGVudHJ5IHJlZmVycmVkIGJ5IEBmY2ZfaW5kZXguCiAgKgogICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBtYWlsYm94IGNvbW1hbmQgY29uc3RydWN0ZWQgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlCiAgKiBOVUxMLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ubC5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ubC5oCmluZGV4IGYzY2ZiZTIuLmYyYjFiYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbmwuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25sLmgKQEAgLTUwLDcgKzUwLDcgQEAKICAqIGFuZCBzdWJjYXRlZ29yeS4gVGhlIGV2ZW50IHR5cGUgbXVzdCBjb21lIGZpcnN0LgogICogVGhlIHN1YmNhdGVnb3J5IGZ1cnRoZXIgZGVmaW5lcyB0aGUgZGF0YSB0aGF0IGZvbGxvd3MgaW4gdGhlIHJlc3QKICAqIG9mIHRoZSBwYXlsb2FkLiBFYWNoIGNhdGVnb3J5IHdpbGwgaGF2ZSBpdHMgb3duIHVuaXF1ZSBoZWFkZXIgcGx1cwotICogYW55IGFkZHRpb25hbCBkYXRhIHVuaXF1ZSB0byB0aGUgc3ViY2F0ZWdvcnkuCisgKiBhbnkgYWRkaXRpb25hbCBkYXRhIHVuaXF1ZSB0byB0aGUgc3ViY2F0ZWdvcnkuCiAgKiBUaGUgcGF5bG9hZCBzZW50IHZpYSB0aGUgZmMgdHJhbnNwb3J0IGlzIG9uZS13YXkgZHJpdmVyLT5hcHBsaWNhdGlvbi4KICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYwppbmRleCA1MmIzNTE1Li4wZDkyZDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbnBvcnRkaXNjLmMKQEAgLTY1OCw3ICs2NTgsNyBAQAogCXJldHVybiAwOwogfQogLyoqCi0gKiBscGZjX3JlbGVhc2VfcnBpIC0gUmVsZWFzZSBhIFJQSSBieSBpc3N1ZWluZyB1bnJlZ19sb2dpbiBtYWlsYm94IGNtZC4KKyAqIGxwZmNfcmVsZWFzZV9ycGkgLSBSZWxlYXNlIGEgUlBJIGJ5IGlzc3VpbmcgdW5yZWdfbG9naW4gbWFpbGJveCBjbWQuCiAgKiBAcGhiYSA6IFBvaW50ZXIgdG8gbHBmY19oYmEgc3RydWN0dXJlLgogICogQHZwb3J0OiBQb2ludGVyIHRvIGxwZmNfdnBvcnQgc3RydWN0dXJlLgogICogQHJwaSAgOiBycGkgdG8gYmUgcmVsZWFzZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKaW5kZXggMmI5NjJiMC4uZmU3Y2M4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKQEAgLTU3Nyw3ICs1NzcsNyBAQAogCQkJaW9jYi0+dW4uZmNwaTY0LmJkbC5hZGRySGlnaCA9IDA7CiAJCQlpb2NiLT51bHBCZGVDb3VudCA9IDA7CiAJCQlpb2NiLT51bHBMZSA9IDA7Ci0JCQkvKiBmaWxsIGluIHJlc3BvbmNlIEJERSAqLworCQkJLyogZmlsbCBpbiByZXNwb25zZSBCREUgKi8KIAkJCWlvY2ItPnVuc2xpMy5mY3BfZXh0LnJiZGUudHVzLmYuYmRlRmxhZ3MgPQogCQkJCQkJCUJVRkZfVFlQRV9CREVfNjQ7CiAJCQlpb2NiLT51bnNsaTMuZmNwX2V4dC5yYmRlLnR1cy5mLmJkZVNpemUgPQpAQCAtMTIxNywxMCArMTIxNywxMCBAQAogCQkJCSAgICAgKDIgKiBzaXplb2Yoc3RydWN0IHVscF9iZGU2NCkpKTsKIAkJCWRhdGFfYmRlLT5hZGRySGlnaCA9IHB1dFBhZGRySGlnaChwaHlzYWRkcik7CiAJCQlkYXRhX2JkZS0+YWRkckxvdyA9IHB1dFBhZGRyTG93KHBoeXNhZGRyKTsKLQkJCS8qIGViZGUgY291bnQgaW5jbHVkZXMgdGhlIHJlc3BvbmNlIGJkZSBhbmQgZGF0YSBicGwgKi8KKwkJCS8qIGViZGUgY291bnQgaW5jbHVkZXMgdGhlIHJlc3BvbnNlIGJkZSBhbmQgZGF0YSBicGwgKi8KIAkJCWlvY2JfY21kLT51bnNsaTMuZmNwX2V4dC5lYmRlX2NvdW50ID0gMjsKIAkJfSBlbHNlIHsKLQkJCS8qIGViZGUgY291bnQgaW5jbHVkZXMgdGhlIHJlc3BvbmNlIGJkZSBhbmQgZGF0YSBiZGVzICovCisJCQkvKiBlYmRlIGNvdW50IGluY2x1ZGVzIHRoZSByZXNwb25zZSBiZGUgYW5kIGRhdGEgYmRlcyAqLwogCQkJaW9jYl9jbWQtPnVuc2xpMy5mY3BfZXh0LmViZGVfY291bnQgPSAobnVtX2JkZSArIDEpOwogCQl9CiAJfSBlbHNlIHsKQEAgLTIzODAsNyArMjM4MCw3IEBACiAJCX0KIAkJLyoKIAkJICogVGhlIGNtbmQtPnVuZGVyZmxvdyBpcyB0aGUgbWluaW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBtdXN0Ci0JCSAqIGJlIHRyYW5zZmVyZWQgZm9yIHRoaXMgY29tbWFuZC4gIFByb3ZpZGVkIGEgc2Vuc2UgY29uZGl0aW9uCisJCSAqIGJlIHRyYW5zZmVycmVkIGZvciB0aGlzIGNvbW1hbmQuICBQcm92aWRlZCBhIHNlbnNlIGNvbmRpdGlvbgogCQkgKiBpcyBub3QgcHJlc2VudCwgbWFrZSBzdXJlIHRoZSBhY3R1YWwgYW1vdW50IHRyYW5zZmVycmVkIGlzIGF0CiAJCSAqIGxlYXN0IHRoZSB1bmRlcmZsb3cgdmFsdWUgb3IgZmFpbC4KIAkJICovCkBAIC0yODczLDcgKzI4NzMsNyBAQAogfQogCiAvKioKLSAqIGxwZmNfc2NzaV9hcGlfdGFibGVfc2V0dXAgLSBTZXQgdXAgc2NzaSBhcGkgZnVjbnRpb24ganVtcCB0YWJsZQorICogbHBmY19zY3NpX2FwaV90YWJsZV9zZXR1cCAtIFNldCB1cCBzY3NpIGFwaSBmdW5jdGlvbiBqdW1wIHRhYmxlCiAgKiBAcGhiYTogVGhlIGhiYSBzdHJ1Y3QgZm9yIHdoaWNoIHRoaXMgY2FsbCBpcyBiZWluZyBleGVjdXRlZC4KICAqIEBkZXZfZ3JwOiBUaGUgSEJBIFBDSS1EZXZpY2UgZ3JvdXAgbnVtYmVyLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmgKaW5kZXggNTkzMjI3My4uY2U2NDViMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmgKQEAgLTEzMCw3ICsxMzAsNyBAQAogCWRtYV9hZGRyX3Qgbm9uc2dfcGh5czsJLyogTm9uIHNjYXR0ZXItZ2F0aGVyIHBoeXNpY2FsIGFkZHJlc3MuICovCiAKIAkvKgotCSAqIGRhdGEgYW5kIGRtYV9oYW5kbGUgYXJlIHRoZSBrZXJuZWwgdmlydXRhbCBhbmQgYnVzIGFkZHJlc3Mgb2YgdGhlCisJICogZGF0YSBhbmQgZG1hX2hhbmRsZSBhcmUgdGhlIGtlcm5lbCB2aXJ0dWFsIGFuZCBidXMgYWRkcmVzcyBvZiB0aGUKIAkgKiBkbWEtYWJsZSBidWZmZXIgY29udGFpbmluZyB0aGUgZmNwX2NtZCwgZmNwX3JzcCBhbmQgYSBzY2F0dGVyCiAJICogZ2F0aGVyIGJkZSBsaXN0IHRoYXQgc3VwcG9ydHMgdGhlIHNnX3RhYmxlc2l6ZSB2YWx1ZS4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCmluZGV4IDQ3NDZkY2QuLmRhY2FiYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYwpAQCAtMjgxNyw3ICsyODE3LDcgQEAKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGludGVycnVwdCBjb250ZXh0IHdoZW4gdGhlcmUgaXMgYSByaW5nCiAgKiBldmVudCBmb3IgdGhlIGZjcCByaW5nLiBUaGUgY2FsbGVyIGRvZXMgbm90IGhvbGQgYW55IGxvY2suCiAgKiBUaGUgZnVuY3Rpb24gcHJvY2Vzc2VzIGVhY2ggcmVzcG9uc2UgaW9jYiBpbiB0aGUgcmVzcG9uc2UgcmluZyB1bnRpbCBpdAotICogZmluZHMgYW4gaW9jYiB3aXRoIExFIGJpdCBzZXQgYW5kIGNoYWlucyBhbGwgdGhlIGlvY2JzIHVwdG8gdGhlIGlvY2Igd2l0aAorICogZmluZHMgYW4gaW9jYiB3aXRoIExFIGJpdCBzZXQgYW5kIGNoYWlucyBhbGwgdGhlIGlvY2JzIHVwIHRvIHRoZSBpb2NiIHdpdGgKICAqIExFIGJpdCBzZXQuIFRoZSBmdW5jdGlvbiB3aWxsIGNhbGwgdGhlIGNvbXBsZXRpb24gaGFuZGxlciBvZiB0aGUgY29tbWFuZCBpb2NiCiAgKiBpZiB0aGUgcmVzcG9uc2UgaW9jYiBpbmRpY2F0ZXMgYSBjb21wbGV0aW9uIGZvciBhIGNvbW1hbmQgaW9jYiBvciBpdCBpcwogICogYW4gYWJvcnQgY29tcGxldGlvbi4gVGhlIGZ1bmN0aW9uIHdpbGwgY2FsbCBscGZjX3NsaV9wcm9jZXNzX3Vuc29sX2lvY2IKQEAgLTUxMTcsNyArNTExNyw3IEBACiAKIAkvKiBTZXR0aW5nIHN0YXRlIHVua25vd24gc28gbHBmY19zbGlfYWJvcnRfaW9jYl9yaW5nCiAJICogd291bGQgZ2V0IElPQ0JfRVJST1IgZnJvbSBscGZjX3NsaV9pc3N1ZV9pb2NiLCBhbGxvd2luZwotCSAqIGl0IHRvIGZhaWwgYWxsIG91c3RhbmRpbmcgU0NTSSBJTy4KKwkgKiBpdCB0byBmYWlsIGFsbCBvdXRzdGFuZGluZyBTQ1NJIElPLgogCSAqLwogCXNwaW5fbG9ja19pcnEoJnBoYmEtPnBwb3J0LT53b3JrX3BvcnRfbG9jayk7CiAJcGhiYS0+cHBvcnQtPndvcmtfcG9ydF9ldmVudHMgJj0gfldPUktFUl9NQk9YX1RNTzsKQEAgLTYwMzEsNyArNjAzMSw3IEBACiB9CiAKIC8qKgotICogbHBmY19tYm94X2FwaV90YWJsZV9zZXR1cCAtIFNldCB1cCBtYm94IGFwaSBmdWNudGlvbiBqdW1wIHRhYmxlCisgKiBscGZjX21ib3hfYXBpX3RhYmxlX3NldHVwIC0gU2V0IHVwIG1ib3ggYXBpIGZ1bmN0aW9uIGp1bXAgdGFibGUKICAqIEBwaGJhOiBUaGUgaGJhIHN0cnVjdCBmb3Igd2hpY2ggdGhpcyBjYWxsIGlzIGJlaW5nIGV4ZWN1dGVkLgogICogQGRldl9ncnA6IFRoZSBIQkEgUENJLURldmljZSBncm91cCBudW1iZXIuCiAgKgpAQCAtNjg0Nyw3ICs2ODQ3LDcgQEAKIH0KIAogLyoqCi0gKiBscGZjX3NsaV9hcGlfdGFibGVfc2V0dXAgLSBTZXQgdXAgc2xpIGFwaSBmdWNudGlvbiBqdW1wIHRhYmxlCisgKiBscGZjX3NsaV9hcGlfdGFibGVfc2V0dXAgLSBTZXQgdXAgc2xpIGFwaSBmdW5jdGlvbiBqdW1wIHRhYmxlCiAgKiBAcGhiYTogVGhlIGhiYSBzdHJ1Y3QgZm9yIHdoaWNoIHRoaXMgY2FsbCBpcyBiZWluZyBleGVjdXRlZC4KICAqIEBkZXZfZ3JwOiBUaGUgSEJBIFBDSS1EZXZpY2UgZ3JvdXAgbnVtYmVyLgogICoKQEAgLTc1MjEsNyArNzUyMSw3IEBACiAJc3RydWN0IGxwZmNfZG1hYnVmICptcCwgKm5leHRfbXA7CiAJc3RydWN0IGxpc3RfaGVhZCAqc2xwID0gJnByaW5nLT5wb3N0YnVmcTsKIAotCS8qIFNlYXJjaCBwb3N0YnVmcSwgZnJvbSB0aGUgYmVnaW5pbmcsIGxvb2tpbmcgZm9yIGEgbWF0Y2ggb24gdGFnICovCisJLyogU2VhcmNoIHBvc3RidWZxLCBmcm9tIHRoZSBiZWdpbm5pbmcsIGxvb2tpbmcgZm9yIGEgbWF0Y2ggb24gdGFnICovCiAJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1wLCBuZXh0X21wLCAmcHJpbmctPnBvc3RidWZxLCBsaXN0KSB7CiAJCWlmIChtcC0+YnVmZmVyX3RhZyA9PSB0YWcpIHsKQEAgLTc1NjUsNyArNzU2NSw3IEBACiAJc3RydWN0IGxwZmNfZG1hYnVmICptcCwgKm5leHRfbXA7CiAJc3RydWN0IGxpc3RfaGVhZCAqc2xwID0gJnByaW5nLT5wb3N0YnVmcTsKIAotCS8qIFNlYXJjaCBwb3N0YnVmcSwgZnJvbSB0aGUgYmVnaW5pbmcsIGxvb2tpbmcgZm9yIGEgbWF0Y2ggb24gcGh5cyAqLworCS8qIFNlYXJjaCBwb3N0YnVmcSwgZnJvbSB0aGUgYmVnaW5uaW5nLCBsb29raW5nIGZvciBhIG1hdGNoIG9uIHBoeXMgKi8KIAlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobXAsIG5leHRfbXAsICZwcmluZy0+cG9zdGJ1ZnEsIGxpc3QpIHsKIAkJaWYgKG1wLT5waHlzID09IHBoeXMpIHsKQEAgLTg0MzgsNyArODQzOCw3IEBACiAgKiBmb3IgcG9zc2libGUgZXJyb3IgYXR0ZW50aW9uIGV2ZW50cy4gVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIGhvc3Rsb2NrCiAgKiB3aXRoIHNwaW5fbG9ja19pcnEoKS4KICAqCi0gKiBUaGlzIGZ1Y250aW9uIHJldHVybnMgMSB3aGVuIHRoZXJlIGlzIEVycm9yIEF0dGVudGlvbiBpbiB0aGUgSG9zdCBBdHRlbnRpb24KKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAxIHdoZW4gdGhlcmUgaXMgRXJyb3IgQXR0ZW50aW9uIGluIHRoZSBIb3N0IEF0dGVudGlvbgogICogUmVnaXN0ZXIgYW5kIHJldHVybnMgMCBvdGhlcndpc2UuCiAgKiovCiBzdGF0aWMgaW50CkBAIC04NDkxLDcgKzg0OTEsNyBAQAogICogZm9yIHBvc3NpYmxlIGVycm9yIGF0dGVudGlvbiBldmVudHMuIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBob3N0bG9jawogICogd2l0aCBzcGluX2xvY2tfaXJxKCkuCiAgKgotICogVGhpcyBmdWNudGlvbiByZXR1cm5zIDEgd2hlbiB0aGVyZSBpcyBFcnJvciBBdHRlbnRpb24gaW4gdGhlIEhvc3QgQXR0ZW50aW9uCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMSB3aGVuIHRoZXJlIGlzIEVycm9yIEF0dGVudGlvbiBpbiB0aGUgSG9zdCBBdHRlbnRpb24KICAqIFJlZ2lzdGVyIGFuZCByZXR1cm5zIDAgb3RoZXJ3aXNlLgogICoqLwogc3RhdGljIGludApAQCAtODU4MSw3ICs4NTgxLDcgQEAKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGltZXIgc29mdCBpbnRlcnJ1cHQgY29udGV4dCB0byBjaGVjayBIQkEncwogICogZXJyb3IgYXR0ZW50aW9uIHJlZ2lzdGVyIGJpdCBmb3IgZXJyb3IgYXR0ZW50aW9uIGV2ZW50cy4KICAqCi0gKiBUaGlzIGZ1Y250aW9uIHJldHVybnMgMSB3aGVuIHRoZXJlIGlzIEVycm9yIEF0dGVudGlvbiBpbiB0aGUgSG9zdCBBdHRlbnRpb24KKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAxIHdoZW4gdGhlcmUgaXMgRXJyb3IgQXR0ZW50aW9uIGluIHRoZSBIb3N0IEF0dGVudGlvbgogICogUmVnaXN0ZXIgYW5kIHJldHVybnMgMCBvdGhlcndpc2UuCiAgKiovCiBpbnQKQEAgLTk2ODQsNyArOTY4NCw3IEBACiAgKiBAY3E6IFBvaW50ZXIgdG8gdGhlIGNvbXBsZXRpb24gcXVldWUuCiAgKiBAd2NxZTogUG9pbnRlciB0byBhIGNvbXBsZXRpb24gcXVldWUgZW50cnkuCiAgKgotICogVGhpcyByb3V0aW5lIHByb2Nlc3MgYSBzbG93LXBhdGggd29yay1xdWV1ZSBvciByZWNpZXZlIHF1ZXVlIGNvbXBsZXRpb24gcXVldWUKKyAqIFRoaXMgcm91dGluZSBwcm9jZXNzIGEgc2xvdy1wYXRoIHdvcmstcXVldWUgb3IgcmVjZWl2ZSBxdWV1ZSBjb21wbGV0aW9uIHF1ZXVlCiAgKiBlbnRyeS4KICAqCiAgKiBSZXR1cm46IHRydWUgaWYgd29yayBwb3N0ZWQgdG8gd29ya2VyIHRocmVhZCwgb3RoZXJ3aXNlIGZhbHNlLgpAQCAtMTI5NzEsNyArMTI5NzEsNyBAQAogICogcmVjb3JkIGFuZCBwcm9jZXNzaW5nIGl0IG9uZSBhdCBhIHRpbWUgc3RhcnRpbmcgZnJvbSB0aGUgQGZjZl9pbmRleAogICogZm9yIGluaXRpYWwgRkNGIGRpc2NvdmVyeSBvciBmYXN0IEZDRiBmYWlsb3ZlciByZWRpc2NvdmVyeS4KICAqCi0gKiBSZXR1cm4gMCBpZiB0aGUgbWFpbGJveCBjb21tYW5kIGlzIHN1Ym1pdHRlZCBzdWNlc3NmdWxseSwgbm9uZSAwCisgKiBSZXR1cm4gMCBpZiB0aGUgbWFpbGJveCBjb21tYW5kIGlzIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHksIG5vbmUgMAogICogb3RoZXJ3aXNlLgogICoqLwogaW50CkBAIC0xMzAzMiw3ICsxMzAzMiw3IEBACiAgKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCB0byByZWFkIGFuIEZDRiByZWNvcmQgaW5kaWNhdGVkIGJ5IEBmY2ZfaW5kZXgKICAqIGFuZCB0byB1c2UgaXQgZm9yIEZMT0dJIHJvdW5kcm9iaW4gRkNGIGZhaWxvdmVyLgogICoKLSAqIFJldHVybiAwIGlmIHRoZSBtYWlsYm94IGNvbW1hbmQgaXMgc3VibWl0dGVkIHN1Y2Vzc2Z1bGx5LCBub25lIDAKKyAqIFJldHVybiAwIGlmIHRoZSBtYWlsYm94IGNvbW1hbmQgaXMgc3VibWl0dGVkIHN1Y2Nlc3NmdWxseSwgbm9uZSAwCiAgKiBvdGhlcndpc2UuCiAgKiovCiBpbnQKQEAgLTEzMDc4LDcgKzEzMDc4LDcgQEAKICAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIHRvIHJlYWQgYW4gRkNGIHJlY29yZCBpbmRpY2F0ZWQgYnkgQGZjZl9pbmRleCB0bwogICogZGV0ZXJtaW5lIHdoZXRoZXIgaXQncyBlbGlnaWJsZSBmb3IgRkxPR0kgcm91bmRyb2JpbiBmYWlsb3ZlciBsaXN0LgogICoKLSAqIFJldHVybiAwIGlmIHRoZSBtYWlsYm94IGNvbW1hbmQgaXMgc3VibWl0dGVkIHN1Y2Vzc2Z1bGx5LCBub25lIDAKKyAqIFJldHVybiAwIGlmIHRoZSBtYWlsYm94IGNvbW1hbmQgaXMgc3VibWl0dGVkIHN1Y2Nlc3NmdWxseSwgbm9uZSAwCiAgKiBvdGhlcndpc2UuCiAgKiovCiBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5jIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMKaW5kZXggYzIxMjY5NC4uZjI2ODRkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMKQEAgLTI4NCw3ICsyODQsNyBAQAogCiAJYWRhcHRlci0+aG9zdC0+bWF4X2lkID0gMTY7CS8qIG1heCB0YXJnZXRzIHBlciBjaGFubmVsICovCiAKLQlhZGFwdGVyLT5ob3N0LT5tYXhfbHVuID0gNzsJLyogVXB0byA3IGx1bnMgZm9yIG5vbiBkaXNrIGRldmljZXMgKi8KKwlhZGFwdGVyLT5ob3N0LT5tYXhfbHVuID0gNzsJLyogVXAgdG8gNyBsdW5zIGZvciBub24gZGlzayBkZXZpY2VzICovCiAKIAlhZGFwdGVyLT5ob3N0LT5jbWRfcGVyX2x1biA9IG1heF9jbWRfcGVyX2x1bjsKIApAQCAtMzczNCw3ICszNzM0LDcgQEAKIAkgKiBjaGVjayBpcyB0aGUgYXBwbGljYXRpb24gY29uZm9ybXMgdG8gTklULiBXZSBkbyBub3QgaGF2ZSB0byBkbyBtdWNoCiAJICogaW4gdGhhdCBjYXNlLgogCSAqIFdlIGV4cGxvaXQgdGhlIGZhY3QgdGhhdCB0aGUgc2lnbmF0dXJlIGlzIHN0b3JlZCBpbiB0aGUgdmVyeQotCSAqIGJlZ2luaW5nIG9mIHRoZSBzdHJ1Y3R1cmUuCisJICogYmVnaW5uaW5nIG9mIHRoZSBzdHJ1Y3R1cmUuCiAJICovCiAKIAlpZiggY29weV9mcm9tX3VzZXIoc2lnbmF0dXJlLCBhcmcsIDcpICkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5oIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmgKaW5kZXggODUzNDExOS4uOWE3ODk3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmgKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmgKQEAgLTUzMiw5ICs1MzIsOSBAQAogCiAvKgogICogc3RydWN0IG1jb250cm9sbGVyIGlzIHVzZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29udHJvbGxlcnMgaW4gdGhlCi0gKiBzeXN0ZW0uIEl0cyB1cHRvIHRoZSBhcHBsaWNhdGlvbiBob3cgdG8gdXNlIHRoZSBpbmZvcm1hdGlvbi4gV2UgYXJlIHBhc3NpbmcKKyAqIHN5c3RlbS4gSXRzIHVwIHRvIHRoZSBhcHBsaWNhdGlvbiBob3cgdG8gdXNlIHRoZSBpbmZvcm1hdGlvbi4gV2UgYXJlIHBhc3NpbmcKICAqIGFzIG11Y2ggaW5mbyBhYm91dCB0aGUgY2FyZHMgYXMgcG9zc2libGUgYW5kIHVzZWZ1bC4gQmVmb3JlIGlzc3VpbmcgdGhlCi0gKiBjYWxsIHRvIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNhcmRzLCB0aGUgYXBwbGljYWl0b24gbmVlZHMgdG8gaXNzdWUgYQorICogY2FsbCB0byBmaW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjYXJkcywgdGhlIGFwcGxpY2F0aW9uIG5lZWRzIHRvIGlzc3VlIGEKICAqIGlvY3RsIGZpcnN0IHRvIGZpbmQgb3V0IHRoZSBudW1iZXIgb2YgY29udHJvbGxlcnMgaW4gdGhlIHN5c3RlbS4KICAqLwogI2RlZmluZSBNQVhfQ09OVFJPTExFUlMgMzIKQEAgLTgwNCw3ICs4MDQsNyBAQAogCXVuc2lnbmVkIGxvbmcJCWJhc2U7CiAJdm9pZCBfX2lvbWVtCQkqbW1pb19iYXNlOwogCi0JLyogbWJveDY0IHdpdGggbWJveCBub3QgYWxpZ25lZCBvbiAxNi1ieXRlIGJvdW5kcnkgKi8KKwkvKiBtYm94NjQgd2l0aCBtYm94IG5vdCBhbGlnbmVkIG9uIDE2LWJ5dGUgYm91bmRhcnkgKi8KIAltYm94NjRfdAkqdW5hX21ib3g2NDsKIAlkbWFfYWRkcl90CXVuYV9tYm94NjRfZG1hOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWJveF9kZWZzLmggYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWJveF9kZWZzLmgKaW5kZXggY2UyNDg3YS4uZTAxYzZmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21ib3hfZGVmcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tYm94X2RlZnMuaApAQCAtNjYwLDcgKzY2MCw3IEBACiAgKiBAbHBhcmFtCTogbG9naWNhbCBkcml2ZXMgcGFyYW1ldGVycwogICogQHNwYW4JOiBzcGFuCiAgKgotICogOC1MRCBsb2dpY2FsIGRyaXZlIHdpdGggdXB0byA4IHNwYW5zCisgKiA4LUxEIGxvZ2ljYWwgZHJpdmUgd2l0aCB1cCB0byA4IHNwYW5zCiAgKi8KIHR5cGVkZWYgc3RydWN0IHsKIAlsb2dkcnZfcGFyYW1fdAlscGFyYW07CkBAIC02NzMsNyArNjczLDcgQEAKICAqIEBscGFyYW0JOiBsb2dpY2FsIGRyaXZlcyBwYXJhbWV0ZXJzCiAgKiBAc3Bhbgk6IHNwYW4KICAqCi0gKiA4LUxEIGxvZ2ljYWwgZHJpdmUgd2l0aCB1cHRvIDQgc3BhbnMKKyAqIDgtTEQgbG9naWNhbCBkcml2ZSB3aXRoIHVwIHRvIDQgc3BhbnMKICAqLwogdHlwZWRlZiBzdHJ1Y3QgewogCWxvZ2Rydl9wYXJhbV90CWxwYXJhbTsKQEAgLTcyMCw3ICs3MjAsNyBAQAogICogQGxkcnYJOiBsb2dpY2FsIGRyaXZlcyBpbmZvcm1hdGlvbgogICogQHBkcnYJOiBwaHlzaWNhbCBkcml2ZXMgaW5mb3JtYXRpb24KICAqCi0gKiBEaXNrIGFycmF5IGZvciA4TEQgbG9naWNhbCBkcml2ZXMgd2l0aCB1cHRvIDggc3BhbnMKKyAqIERpc2sgYXJyYXkgZm9yIDhMRCBsb2dpY2FsIGRyaXZlcyB3aXRoIHVwIHRvIDggc3BhbnMKICAqLwogdHlwZWRlZiBzdHJ1Y3QgewogCXVpbnQ4X3QJCQludW1sZHJ2OwpAQCAtNzM3LDcgKzczNyw3IEBACiAgKiBAbGRydgk6IGxvZ2ljYWwgZHJpdmVzIGluZm9ybWF0aW9uCiAgKiBAcGRydgk6IHBoeXNpY2FsIGRyaXZlcyBpbmZvcm1hdGlvbgogICoKLSAqIERpc2sgYXJyYXkgZm9yIDhMRCBsb2dpY2FsIGRyaXZlcyB3aXRoIHVwdG8gNCBzcGFucworICogRGlzayBhcnJheSBmb3IgOExEIGxvZ2ljYWwgZHJpdmVzIHdpdGggdXAgdG8gNCBzcGFucwogICovCiB0eXBlZGVmIHN0cnVjdCB7CiAJdWludDhfdAkJCW51bWxkcnY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5jIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guYwppbmRleCA1NzA4Y2IyLi4xZGJhMzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMKQEAgLTI2ODksNyArMjY4OSw3IEBACiAJCQkJKE1CT1hfUkVTRVRfV0FJVCArIE1CT1hfUkVTRVRfRVhUX1dBSVQpIC0gaSkpOwogCQl9CiAKLQkJLy8gYmFpbG91dCBpZiBubyByZWNvdmVyeSBoYXBwZW5kZWQgaW4gcmVzZXQgdGltZQorCQkvLyBiYWlsb3V0IGlmIG5vIHJlY292ZXJ5IGhhcHBlbmVkIGluIHJlc2V0IHRpbWUKIAkJaWYgKGFkYXB0ZXItPm91dHN0YW5kaW5nX2NtZHMgPT0gMCkgewogCQkJYnJlYWs7CiAJCX0KQEAgLTM0NTIsNyArMzQ1Miw3IEBACiAgKiBtZWdhcmFpZF9tYm94X3NldHVwX2RldmljZV9tYXAgLSBtYW5hZ2UgZGV2aWNlIGlkcwogICogQGFkYXB0ZXIJOiBEcml2ZXIncyBzb2Z0IHN0YXRlCiAgKgotICogTWFuYW5nZSB0aGUgZGV2aWNlIGlkcyB0byBoYXZlIGFuIGFwcHJvcHJhaXRlIG1hcHBpbmcgYmV0d2VlbiB0aGUga2VybmVsCisgKiBNYW5hbmdlIHRoZSBkZXZpY2UgaWRzIHRvIGhhdmUgYW4gYXBwcm9wcmlhdGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBrZXJuZWwKICAqIHNjc2kgYWRkcmVzc2VzIGFuZCBtZWdhcmFpZCBzY3NpIGFuZCBsb2dpY2FsIGRyaXZlIGFkZHJlc3Nlcy4gV2UgZXhwb3J0CiAgKiBzY3NpIGRldmljZXMgb24gdGhlaXIgYWN0dWFsIGFkZHJlc3Nlcywgd2hlcmVhcyB0aGUgbG9naWNhbCBkcml2ZXMgYXJlCiAgKiBleHBvcnRlZCBvbiBhIHZpcnR1YWwgc2NzaSBjaGFubmVsLgpAQCAtMzk3Myw3ICszOTczLDcgQEAKICAqIE5PVEU6IFRoZSBjb21tYW5kcyBpc3N1YW5jZSBmdW5jdGlvbmFsaXR5IGlzIG5vdCBnZW5lcmFsaXplZCBhbmQKICAqIGltcGxlbWVudGVkIGluIGNvbnRleHQgb2YgImdldCBsZCBtYXAiIGNvbW1hbmQgb25seS4gSWYgcmVxdWlyZWQsIHRoZQogICogY29tbWFuZCBpc3N1YW5jZSBsb2dpY2FsIGNhbiBiZSB0cml2aWFsbHkgcHVsbGVkIG91dCBhbmQgaW1wbGVtZW50ZWQgYXMgYQotICogc3RhbmRhbG9uZSBsaWJhcnkuIEZvciBub3csIHRoaXMgc2hvdWxkIHN1ZmZpY2Ugc2luY2UgdGhlcmUgaXMgbm8gb3RoZXIKKyAqIHN0YW5kYWxvbmUgbGlicmFyeS4gRm9yIG5vdywgdGhpcyBzaG91bGQgc3VmZmljZSBzaW5jZSB0aGVyZSBpcyBubyBvdGhlcgogICogdXNlciBvZiB0aGlzIGludGVyZmFjZS4KICAqCiAgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oCmluZGV4IDYzNWIyMjguLjA0NmRjYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaAorKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmgKQEAgLTEzNDcsNyArMTM0Nyw3IEBACiAJc3RydWN0IHRpbWVyX2xpc3QgaW9fY29tcGxldGlvbl90aW1lcjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGludGVybmFsX3Jlc2V0X3BlbmRpbmdfcTsKIAotCS8qIFB0ciB0byBoYmEgc3BlY2ZpYyBpbmZvcm1hdGlvbiAqLworCS8qIFB0ciB0byBoYmEgc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KIAl2b2lkICpjdHJsX2NvbnRleHQ7CiAJdTgJbXNpX2ZsYWc7CiAJc3RydWN0IG1zaXhfZW50cnkgbXNpeGVudHJ5OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19iYXNlLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Jhc2UuYwppbmRleCBiYmQxMGM4Li42NmQ0Y2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Jhc2UuYworKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Jhc2UuYwpAQCAtMTY5OCw3ICsxNjk4LDcgQEAKICAqIG1lZ2FzYXNfd2FpdF9mb3Jfb3V0c3RhbmRpbmcgLQlXYWl0IGZvciBhbGwgb3V0c3RhbmRpbmcgY21kcwogICogQGluc3RhbmNlOgkJCQlBZGFwdGVyIHNvZnQgc3RhdGUKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdhaXRzIGZvciB1cHRvIE1FR0FTQVNfUkVTRVRfV0FJVF9USU1FIHNlY29uZHMgZm9yIEZXIHRvCisgKiBUaGlzIGZ1bmN0aW9uIHdhaXRzIGZvciB1cCB0byBNRUdBU0FTX1JFU0VUX1dBSVRfVElNRSBzZWNvbmRzIGZvciBGVyB0bwogICogY29tcGxldGUgYWxsIGl0cyBvdXRzdGFuZGluZyBjb21tYW5kcy4gUmV0dXJucyBlcnJvciBpZiBvbmUgb3IgbW9yZSBJT3MKICAqIGFyZSBwZW5kaW5nIGFmdGVyIHRoaXMgdGltZSBwZXJpb2QuIEl0IGFsc28gbWFya3MgdGhlIGNvbnRyb2xsZXIgZGVhZC4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW5pdC5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW5pdC5oCmluZGV4IDIwZTZiODguLjE2NTQ1NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2luaXQuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pbml0LmgKQEAgLTIxLDcgKzIxLDcgQEAKICAqICAwNS0yMS0wOCAgMDIuMDAuMDUgIEZpeGVkIHR5cG8gaW4gbmFtZSBvZiBNcGkyU2VwUmVxdWVzdF90LgogICogIDEwLTAyLTA4ICAwMi4wMC4wNiAgUmVtb3ZlZCBVbnRhZ2dlZCBhbmQgTm8gRGlzY29ubmVjdCB2YWx1ZXMgZnJvbSBTQ1NJIElPCiAgKiAgICAgICAgICAgICAgICAgICAgICBDb250cm9sIGZpZWxkIFRhc2sgQXR0cmlidXRlIGZsYWdzLgotICogICAgICAgICAgICAgICAgICAgICAgTW92ZWQgTFVOIGZpZWxkIGRlZmluZXMgdG8gbXBpMi5oIGJlY2FzdWUgdGhleSBhcmUKKyAqICAgICAgICAgICAgICAgICAgICAgIE1vdmVkIExVTiBmaWVsZCBkZWZpbmVzIHRvIG1waTIuaCBiZWNhdXNlIHRoZXkgYXJlCiAgKiAgICAgICAgICAgICAgICAgICAgICBjb21tb24gdG8gbWFueSBzdHJ1Y3R1cmVzLgogICogIDA1LTA2LTA5ICAwMi4wMC4wNyAgQ2hhbmdlZCB0YXNrIG1hbmFnZW1lbnQgdHlwZSBvZiBRdWVyeSBVbml0IEF0dGVudGlvbiB0bwogICogICAgICAgICAgICAgICAgICAgICAgUXVlcnkgQXN5bmNocm9ub3VzIEV2ZW50LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYwppbmRleCA1ZTAwMWZmLi4zMzQ2MzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYwpAQCAtOTI1LDcgKzkyNSw3IEBACiB9CiAKIC8qKgotICogbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlciAtIGNsZWFyIGludGVydXB0IGNhbGxiYWNrIGhhbmRsZXIKKyAqIG1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIgLSBjbGVhciBpbnRlcnJ1cHQgY2FsbGJhY2sgaGFuZGxlcgogICogQGNiX2lkeDogY2FsbGJhY2sgaW5kZXgKICAqCiAgKiBSZXR1cm4gbm90aGluZy4KQEAgLTExMTMsNyArMTExMyw3IEBACiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqCiAgKiBDaGVjayB0byBzZWUgaWYgY2FyZCBpcyBjYXBhYmxlIG9mIE1TSVgsIGFuZCBzZXQgbnVtYmVyCi0gKiBvZiBhdmFsaWFibGUgbXNpeCB2ZWN0b3JzCisgKiBvZiBhdmFpbGFibGUgbXNpeCB2ZWN0b3JzCiAgKi8KIHN0YXRpYyBpbnQKIF9iYXNlX2NoZWNrX2VuYWJsZV9tc2l4KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKQEAgLTE1OTUsNyArMTU5NSw3IEBACiAKIAogLyoqCi0gKiBtcHQyc2FzX2Jhc2VfcHV0X3NtaWRfaGlfcHJpb3JpdHkgLSBzZW5kIFRhc2sgTWFuYWdtZW50IHJlcXVlc3QgdG8gZmlybXdhcmUKKyAqIG1wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eSAtIHNlbmQgVGFzayBNYW5hZ2VtZW50IHJlcXVlc3QgdG8gZmlybXdhcmUKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKICAqCkBAIC0yNTk5LDcgKzI1OTksNyBAQAogCQlpbnRfc3RhdHVzID0gcmVhZGwoJmlvYy0+Y2hpcC0+SG9zdEludGVycnVwdFN0YXR1cyk7CiAJCWlmIChpbnRfc3RhdHVzICYgTVBJMl9ISVNfSU9DMlNZU19EQl9TVEFUVVMpIHsKIAkJCWRoc3ByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogIgotCQkJICAgICJzdWNjZXNzZnVsbCBjb3VudCglZCksIHRpbWVvdXQoJWQpXG4iLCBpb2MtPm5hbWUsCisJCQkgICAgInN1Y2Nlc3NmdWwgY291bnQoJWQpLCB0aW1lb3V0KCVkKVxuIiwgaW9jLT5uYW1lLAogCQkJICAgIF9fZnVuY19fLCBjb3VudCwgdGltZW91dCkpOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTI2NDAsNyArMjY0MCw3IEBACiAJCWludF9zdGF0dXMgPSByZWFkbCgmaW9jLT5jaGlwLT5Ib3N0SW50ZXJydXB0U3RhdHVzKTsKIAkJaWYgKCEoaW50X3N0YXR1cyAmIE1QSTJfSElTX1NZUzJJT0NfREJfU1RBVFVTKSkgewogCQkJZGhzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiAiCi0JCQkgICAgInN1Y2Nlc3NmdWxsIGNvdW50KCVkKSwgdGltZW91dCglZClcbiIsIGlvYy0+bmFtZSwKKwkJCSAgICAic3VjY2Vzc2Z1bCBjb3VudCglZCksIHRpbWVvdXQoJWQpXG4iLCBpb2MtPm5hbWUsCiAJCQkgICAgX19mdW5jX18sIGNvdW50LCB0aW1lb3V0KSk7CiAJCQlyZXR1cm4gMDsKIAkJfSBlbHNlIGlmIChpbnRfc3RhdHVzICYgTVBJMl9ISVNfSU9DMlNZU19EQl9TVEFUVVMpIHsKQEAgLTI2ODgsNyArMjY4OCw3IEBACiAJCWRvb3JiZWxsX3JlZyA9IHJlYWRsKCZpb2MtPmNoaXAtPkRvb3JiZWxsKTsKIAkJaWYgKCEoZG9vcmJlbGxfcmVnICYgTVBJMl9ET09SQkVMTF9VU0VEKSkgewogCQkJZGhzcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiAiCi0JCQkgICAgInN1Y2Nlc3NmdWxsIGNvdW50KCVkKSwgdGltZW91dCglZClcbiIsIGlvYy0+bmFtZSwKKwkJCSAgICAic3VjY2Vzc2Z1bCBjb3VudCglZCksIHRpbWVvdXQoJWQpXG4iLCBpb2MtPm5hbWUsCiAJCQkgICAgX19mdW5jX18sIGNvdW50LCB0aW1lb3V0KSk7CiAJCQlyZXR1cm4gMDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY29uZmlnLmMKaW5kZXggNmFmZDY3Yi4uNjg2MTI0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2NvbmZpZy5jCkBAIC05Myw3ICs5Myw3IEBACiAgKiBAbXBpX3JlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lCiAgKiBDb250ZXh0OiBub25lLgogICoKLSAqIEZ1bmN0aW9uIGZvciBkaXNwbGF5aW5nIGRlYnVnIGluZm8gaGVscGZ1bGwgd2hlbiBkZWJ1Z2dpbmcgaXNzdWVzCisgKiBGdW5jdGlvbiBmb3IgZGlzcGxheWluZyBkZWJ1ZyBpbmZvIGhlbHBmdWwgd2hlbiBkZWJ1Z2dpbmcgaXNzdWVzCiAgKiBpbiB0aGlzIG1vZHVsZS4KICAqLwogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jCmluZGV4IGU5MmI3N2EuLmQ3MmYxZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAgKiBAbXBpX3JlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lCiAgKiBDb250ZXh0OiBub25lLgogICoKLSAqIEZ1bmN0aW9uIGZvciBkaXNwbGF5aW5nIGRlYnVnIGluZm8gaGVscGZ1bGwgd2hlbiBkZWJ1Z2dpbmcgaXNzdWVzCisgKiBGdW5jdGlvbiBmb3IgZGlzcGxheWluZyBkZWJ1ZyBpbmZvIGhlbHBmdWwgd2hlbiBkZWJ1Z2dpbmcgaXNzdWVzCiAgKiBpbiB0aGlzIG1vZHVsZS4KICAqLwogc3RhdGljIHZvaWQKQEAgLTY4OCw2ICs2ODgsMTMgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJLyogQ2hlY2sgZm9yIG92ZXJmbG93IGFuZCB3cmFwYXJvdW5kICovCisJaWYgKGthcmcuZGF0YV9zZ2Vfb2Zmc2V0ICogNCA+IGlvYy0+cmVxdWVzdF9zeiB8fAorCSAgICBrYXJnLmRhdGFfc2dlX29mZnNldCA+IChVSU5UX01BWCAvIDQpKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwogCS8qIGNvcHkgaW4gcmVxdWVzdCBtZXNzYWdlIGZyYW1lIGZyb20gdXNlciAqLwogCWlmIChjb3B5X2Zyb21fdXNlcihtcGlfcmVxdWVzdCwgbWYsIGthcmcuZGF0YV9zZ2Vfb2Zmc2V0KjQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwgX19GSUxFX18sIF9fTElORV9fLApAQCAtMTk2Myw3ICsxOTcwLDcgQEAKIAlNcGkyRGlhZ0J1ZmZlclBvc3RSZXBseV90ICptcGlfcmVwbHk7CiAJaW50IHJjLCBpOwogCXU4IGJ1ZmZlcl90eXBlOwotCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7CisJdW5zaWduZWQgbG9uZyB0aW1lbGVmdCwgcmVxdWVzdF9zaXplLCBjb3B5X3NpemU7CiAJdTE2IHNtaWQ7CiAJdTE2IGlvY19zdGF0dXM7CiAJdTggaXNzdWVfcmVzZXQgPSAwOwpAQCAtMTk5OSw2ICsyMDA2LDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJcmVxdWVzdF9zaXplID0gaW9jLT5kaWFnX2J1ZmZlcl9zeltidWZmZXJfdHlwZV07CisKIAlpZiAoKGthcmcuc3RhcnRpbmdfb2Zmc2V0ICUgNCkgfHwgKGthcmcuYnl0ZXNfdG9fcmVhZCAlIDQpKSB7CiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBlaXRoZXIgdGhlIHN0YXJ0aW5nX29mZnNldCAiCiAJCSAgICAib3IgYnl0ZXNfdG9fcmVhZCBhcmUgbm90IDQgYnl0ZSBhbGlnbmVkXG4iLCBpb2MtPm5hbWUsCkBAIC0yMDA2LDEzICsyMDE1LDIzIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWlmIChrYXJnLnN0YXJ0aW5nX29mZnNldCA+IHJlcXVlc3Rfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlkaWFnX2RhdGEgPSAodm9pZCAqKShyZXF1ZXN0X2RhdGEgKyBrYXJnLnN0YXJ0aW5nX29mZnNldCk7CiAJZGN0bHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogZGlhZ19idWZmZXIoJXApLCAiCiAJICAgICJvZmZzZXQoJWQpLCBzeiglZClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sCiAJICAgIGRpYWdfZGF0YSwga2FyZy5zdGFydGluZ19vZmZzZXQsIGthcmcuYnl0ZXNfdG9fcmVhZCkpOwogCisJLyogVHJ1bmNhdGUgZGF0YSBvbiByZXF1ZXN0cyB0aGF0IGFyZSB0b28gbGFyZ2UgKi8KKwlpZiAoKGRpYWdfZGF0YSArIGthcmcuYnl0ZXNfdG9fcmVhZCA8IGRpYWdfZGF0YSkgfHwKKwkgICAgKGRpYWdfZGF0YSArIGthcmcuYnl0ZXNfdG9fcmVhZCA+IHJlcXVlc3RfZGF0YSArIHJlcXVlc3Rfc2l6ZSkpCisJCWNvcHlfc2l6ZSA9IHJlcXVlc3Rfc2l6ZSAtIGthcmcuc3RhcnRpbmdfb2Zmc2V0OworCWVsc2UKKwkJY29weV9zaXplID0ga2FyZy5ieXRlc190b19yZWFkOworCiAJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKil1YXJnLT5kaWFnbm9zdGljX2RhdGEsCi0JICAgIGRpYWdfZGF0YSwga2FyZy5ieXRlc190b19yZWFkKSkgeworCSAgICBkaWFnX2RhdGEsIGNvcHlfc2l6ZSkpIHsKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IFVuYWJsZSB0byB3cml0ZSAiCiAJCSAgICAibXB0X2RpYWdfcmVhZF9idWZmZXJfdCBkYXRhIEAgJXBcbiIsIGlvYy0+bmFtZSwKIAkJICAgIF9fZnVuY19fLCBkaWFnX2RhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCmluZGV4IDZjZWI3NzUuLmQyMDY0YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKQEAgLTM5Nyw3ICszOTcsNyBAQAogICogQGlzX3JhaWQ6IFtmbGFnXSAxID0gcmFpZCBvYmplY3QsIDAgPSBzYXMgb2JqZWN0CiAgKgogICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoaXMgZGV2aWNlIHNob3VsZCBiZSBmaXJzdCByZXBvcnRlZCBkZXZpY2UgdG8KLSAqIHRvIHNjc2ktbWwgb3Igc2FzIHRyYW5zcG9ydCwgdGhpcyBwdXJwb3NlIGlzIGZvciBwZXJzaXN0YW50IGJvb3QgZGV2aWNlLgorICogdG8gc2NzaS1tbCBvciBzYXMgdHJhbnNwb3J0LCB0aGlzIHB1cnBvc2UgaXMgZm9yIHBlcnNpc3RlbnQgYm9vdCBkZXZpY2UuCiAgKiBUaGVyZSBhcmUgcHJpbWFyeSwgYWx0ZXJuYXRlLCBhbmQgY3VycmVudCBlbnRyaWVzIGluIGJpb3MgcGFnZSAyLiBUaGUgb3JkZXIKICAqIHByaW9yaXR5IGlzIHByaW1hcnksIGFsdGVybmF0ZSwgdGhlbiBjdXJyZW50LiAgVGhpcyByb3V0aW5lIHNhdmVzCiAgKiB0aGUgY29ycmVzcG9uZGluZyBkZXZpY2Ugb2JqZWN0IGFuZCBpc19yYWlkIGZsYWcgaW4gdGhlIGlvYyBvYmplY3QuCkBAIC0yNjcxLDEwICsyNjcxLDEwIEBACiAgKiBAaGFuZGxlOiBkZXZpY2UgaGFuZGxlCiAgKiBDb250ZXh0OiBpbnRlcnJ1cHQgdGltZS4KICAqCi0gKiBUaGlzIGNvZGUgaXMgdG8gaW5pdGlhdGUgdGhlIGRldmljZSByZW1vdmFsIGhhbmRzaGFrZSBwcm90b2NhbAorICogVGhpcyBjb2RlIGlzIHRvIGluaXRpYXRlIHRoZSBkZXZpY2UgcmVtb3ZhbCBoYW5kc2hha2UgcHJvdG9jb2wKICAqIHdpdGggY29udHJvbGxlciBmaXJtd2FyZS4gIFRoaXMgZnVuY3Rpb24gd2lsbCBpc3N1ZSB0YXJnZXQgcmVzZXQKICAqIHVzaW5nIGhpZ2ggcHJpb3JpdHkgcmVxdWVzdCBxdWV1ZS4gIEl0IHdpbGwgc2VuZCBhIHNhcyBpb3VuaXQKLSAqIGNvbnRyb2xsIHJlcXVlc3QgKE1QSTJfU0FTX09QX1JFTU9WRV9ERVZJQ0UpIGZyb20gdGhpcyBjb21wbGV0aW9uLgorICogY29udHJvbCByZXF1ZXN0IChNUEkyX1NBU19PUF9SRU1PVkVfREVWSUNFKSBmcm9tIHRoaXMgY29tcGxldGlvbi4KICAqCiAgKiBUaGlzIGlzIGRlc2lnbmVkIHRvIHNlbmQgbXVsaXBsZSB0YXNrIG1hbmFnZW1lbnQgcmVxdWVzdCBhdCB0aGUgc2FtZQogICogdGltZSB0byB0aGUgZmlmby4gSWYgdGhlIGZpZm8gaXMgZnVsbCwgd2Ugd2lsbCBhcHBlbmQgdGhlIHJlcXVlc3QsCkBAIC0yNzQ5LDkgKzI3NDksOSBAQAogICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCiAgKiBDb250ZXh0OiBpbnRlcnJ1cHQgdGltZS4KICAqCi0gKiBUaGlzIGlzIHRoZSBzYXMgaW91bml0IGNvbnRyb2xsIGNvbXBsZXRpb24gcm91dGluZS4KKyAqIFRoaXMgaXMgdGhlIHNhcyBpb3VuaXQgY29udHJvbCBjb21wbGV0aW9uIHJvdXRpbmUuCiAgKiBUaGlzIGNvZGUgaXMgcGFydCBvZiB0aGUgY29kZSB0byBpbml0aWF0ZSB0aGUgZGV2aWNlIHJlbW92YWwKLSAqIGhhbmRzaGFrZSBwcm90b2NhbCB3aXRoIGNvbnRyb2xsZXIgZmlybXdhcmUuCisgKiBoYW5kc2hha2UgcHJvdG9jb2wgd2l0aCBjb250cm9sbGVyIGZpcm13YXJlLgogICoKICAqIFJldHVybiAxIG1lYW5pbmcgbWYgc2hvdWxkIGJlIGZyZWVkIGZyb20gX2Jhc2VfaW50ZXJydXB0CiAgKiAgICAgICAgMCBtZWFucyB0aGUgbWYgaXMgZnJlZWQgZnJvbSB0aGlzIGZ1bmN0aW9uLgpAQCAtMjg3OCw4ICsyODc4LDggQEAKICAqCiAgKiBUaGlzIGlzIHRoZSB0YXJnZXQgcmVzZXQgY29tcGxldGlvbiByb3V0aW5lLgogICogVGhpcyBjb2RlIGlzIHBhcnQgb2YgdGhlIGNvZGUgdG8gaW5pdGlhdGUgdGhlIGRldmljZSByZW1vdmFsCi0gKiBoYW5kc2hha2UgcHJvdG9jYWwgd2l0aCBjb250cm9sbGVyIGZpcm13YXJlLgotICogSXQgd2lsbCBzZW5kIGEgc2FzIGlvdW5pdCBjb250cm9sbCByZXF1ZXN0IChNUEkyX1NBU19PUF9SRU1PVkVfREVWSUNFKQorICogaGFuZHNoYWtlIHByb3RvY29sIHdpdGggY29udHJvbGxlciBmaXJtd2FyZS4KKyAqIEl0IHdpbGwgc2VuZCBhIHNhcyBpb3VuaXQgY29udHJvbCByZXF1ZXN0IChNUEkyX1NBU19PUF9SRU1PVkVfREVWSUNFKQogICoKICAqIFJldHVybiAxIG1lYW5pbmcgbWYgc2hvdWxkIGJlIGZyZWVkIGZyb20gX2Jhc2VfaW50ZXJydXB0CiAgKiAgICAgICAgMCBtZWFucyB0aGUgbWYgaXMgZnJlZWQgZnJvbSB0aGlzIGZ1bmN0aW9uLgpAQCAtMjk4NCw3ICsyOTg0LDcgQEAKICAqCiAgKiBUaGlzIHJvdXRpbmUgYWRkZWQgdG8gYmV0dGVyIGhhbmRsZSBjYWJsZSBicmVha2VyLgogICoKLSAqIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSBkcml2ZXIgcmVjaWV2ZXMgbXVsdGlwbGUgZXhwYW5kZXIKKyAqIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSBkcml2ZXIgcmVjZWl2ZXMgbXVsdGlwbGUgZXhwYW5kZXIKICAqIGFkZCBhbmQgZGVsZXRlIGV2ZW50cyBpbiBhIHNpbmdsZSBzaG90LiAgV2hlbiB0aGVyZSBpcyBhIGRlbGV0ZSBldmVudAogICogdGhlIHJvdXRpbmUgd2lsbCB2b2lkIGFueSBwZW5kaW5nIGFkZCBldmVudHMgd2FpdGluZyBpbiB0aGUgZXZlbnQgcXVldWUuCiAgKgpAQCAtMzUxMSw3ICszNTExLDcgQEAKIAogI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwogLyoqCi0gKiBfc2NzaWhfc2NzaV9pb2NfaW5mbyAtIHRyYW5zbGF0ZWQgbm9uLXN1Y2Nlc3NmdWxsIFNDU0lfSU8gcmVxdWVzdAorICogX3Njc2loX3Njc2lfaW9jX2luZm8gLSB0cmFuc2xhdGVkIG5vbi1zdWNjZXNzZnVsIFNDU0lfSU8gcmVxdWVzdAogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAc2NtZDogcG9pbnRlciB0byBzY3NpIGNvbW1hbmQgb2JqZWN0CiAgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKQEAgLTUxMzgsNyArNTEzOCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcjsKIAotCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiYnJvYWRjYXN0IHByaW1hdGl2ZTogIgorCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiYnJvYWRjYXN0IHByaW1pdGl2ZTogIgogCSAgICAicGh5IG51bWJlciglZCksIHdpZHRoKCVkKVxuIiwgaW9jLT5uYW1lLCBldmVudF9kYXRhLT5QaHlOdW0sCiAJICAgIGV2ZW50X2RhdGEtPlBvcnRXaWR0aCkpOwogCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogZW50ZXJcbiIsIGlvYy0+bmFtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9uY3I1M2M4eHguYyBiL2RyaXZlcnMvc2NzaS9uY3I1M2M4eHguYwppbmRleCA0NmNjMzgyLi44MzVkOGQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbmNyNTNjOHh4LmMKKysrIGIvZHJpdmVycy9zY3NpL25jcjUzYzh4eC5jCkBAIC0yNjc5LDcgKzI2NzksNyBAQAogfS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwgUkVTRUxfVEFHID4tLS0tLS0tLS0tLS0tLS0tLS0tKi8sewogCS8qCiAJKioJUmVhZCBJREVOVElGWSArIFNJTVBMRSArIFRBRyB1c2luZyBhIHNpbmdsZSBNT1ZFLgotCSoqCUFncmVzc2l2ZSBvcHRpbWl6YXRpb24sIGlzJ250IGl0PworCSoqCUFnZ3Jlc3NpdmUgb3B0aW1pemF0aW9uLCBpcydudCBpdD8KIAkqKglObyBuZWVkIHRvIHRlc3QgdGhlIFNJTVBMRSBUQUcgbWVzc2FnZSwgc2luY2UgdGhlIAogCSoqCWRyaXZlciBvbmx5IHN1cHBvcnRzIGNvbmZvcm1hbnQgZGV2aWNlcyBmb3IgdGFncy4gOy0pCiAJKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9uc3AzMi5jIGIvZHJpdmVycy9zY3NpL25zcDMyLmMKaW5kZXggNmI4YjAyMS4uZjZhNTBjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL25zcDMyLmMKKysrIGIvZHJpdmVycy9zY3NpL25zcDMyLmMKQEAgLTEyODgsNyArMTI4OCw3IEBACiAJCQluc3AzMl9kYmcoTlNQMzJfREVCVUdfSU5UUiwgIlNTQUNLPTB4JWx4IiwgCiAJCQkJICAgIG5zcDMyX3JlYWQ0KGJhc2UsIFNBVkVEX1NBQ0tfQ05UKSk7CiAKLQkJCXNjc2lfc2V0X3Jlc2lkKFNDcG50LCAwKTsgLyogYWxsIGRhdGEgdHJhbnNmZXJlZCEgKi8KKwkJCXNjc2lfc2V0X3Jlc2lkKFNDcG50LCAwKTsgLyogYWxsIGRhdGEgdHJhbnNmZXJyZWQhICovCiAJCX0KIAogCQkvKgpAQCAtMTYzMCw3ICsxNjMwLDcgQEAKIAogCQkJLyoKIAkJCSAqIElmIFNBVkVEU0FDS0NOVCA9PSAwLCBpdCBtZWFucyBTYXZlZERhdGFQb2ludGVyIGlzCi0JCQkgKiBjb21lIGFmdGVyIGRhdGEgdHJhbnNmZXJpbmcuCisJCQkgKiBjb21lIGFmdGVyIGRhdGEgdHJhbnNmZXJyaW5nLgogCQkJICovCiAJCQlpZiAoc19zYWNrbGVuID4gMCkgewogCQkJCS8qCkBAIC0xNzg1LDcgKzE3ODUsNyBAQAogCQkgICB0aGUgaGVhZCBlbGVtZW50IG9mIHRoZSBzZy4gcmVzdGxlbiBpcyBjb3JyZWN0bHkgY2FsY3VsYXRlZC4gKi8KIAl9CiAKLQkvKiBjYWxjdWxhdGUgdGhlIHJlc3QgbGVuZ3RoIGZvciB0cmFuc2ZlcmluZyAqLworCS8qIGNhbGN1bGF0ZSB0aGUgcmVzdCBsZW5ndGggZm9yIHRyYW5zZmVycmluZyAqLwogCXJlc3RsZW4gPSBzZW50bGVuIC0gc19zYWNrbGVuOwogCiAJLyogdXBkYXRlIGFkanVzdGluZyBjdXJyZW50IFNHIHRhYmxlIGVudHJ5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbnNwMzIuaCBiL2RyaXZlcnMvc2NzaS9uc3AzMi5oCmluZGV4IDk1NjVhY2YuLmMwMjIxODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9uc3AzMi5oCisrKyBiL2RyaXZlcnMvc2NzaS9uc3AzMi5oCkBAIC01MDcsNyArNTA3LDcgQEAKIC8qCiAgKiBTQ1NJIFRBUkdFVC9MVU4gZGVmaW5pdGlvbgogICovCi0jZGVmaW5lIE5TUDMyX0hPU1RfU0NTSUlEICAgIDcgIC8qIFNDU0kgaW5pdGlhdG9yIGlzIGV2ZXJ5dGltZSBkZWZpbmVkIGFzIDcgKi8KKyNkZWZpbmUgTlNQMzJfSE9TVF9TQ1NJSUQgICAgNyAgLyogU0NTSSBpbml0aWF0b3IgaXMgZXZlcnkgdGltZSBkZWZpbmVkIGFzIDcgKi8KICNkZWZpbmUgTUFYX1RBUkdFVAkgICAgIDgKICNkZWZpbmUgTUFYX0xVTgkJICAgICA4CS8qIFhYWDogSW4gU1BJMywgbWF4IG51bWJlciBvZiBMVU4gaXMgNjQuICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9vc3N0LmMgYi9kcml2ZXJzL3Njc2kvb3NzdC5jCmluZGV4IDUyMWUyMTguLjU4ZjViZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9vc3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL29zc3QuYwpAQCAtMTM2Niw3ICsxMzY2LDcgQEAKIC8qIFRoZSB2YWx1ZXMgYmVsb3cgYXJlIGJhc2VkIG9uIHRoZSBPblN0cmVhbSBmcmFtZSBwYXlsb2FkIHNpemUgb2YgMzJLID09IDIqKjE1LAogICogdGhhdCBpcywgT1NTVF9GUkFNRV9TSElGVCArIE9TU1RfU0VDVE9SX1NISUZUIG11c3QgYmUgMTUuIFdpdGggYSBtaW5pbXVtIGJsb2NrCiAgKiBzaXplIG9mIDUxMiBieXRlcywgd2UgbmVlZCB0byBiZSBhYmxlIHRvIHJlc29sdmUgMzJLLzUxMiA9PSA2NCA9PSAyKio2IHBvc2l0aW9ucwotICogaW5zaWRlIGVhY2ggZnJhbWUuIEZpbmFseSwgT1NTVF9TRUNUT1JfTUFTSyA9PSAyKipPU1NUX0ZSQU1FX1NISUZUIC0gMS4KKyAqIGluc2lkZSBlYWNoIGZyYW1lLiBGaW5hbGx5LCBPU1NUX1NFQ1RPUl9NQVNLID09IDIqKk9TU1RfRlJBTUVfU0hJRlQgLSAxLgogICovCiAjZGVmaW5lIE9TU1RfRlJBTUVfU0hJRlQgIDYKICNkZWZpbmUgT1NTVF9TRUNUT1JfU0hJRlQgOQpAQCAtMzEzMSw3ICszMTMxLDcgQEAKIAkJfQogI2lmIERFQlVHCiAJCWlmIChkZWJ1Z2dpbmcpCi0JCQlwcmludGsoT1NTVF9ERUJfTVNHICIlczpEOiBGbHVzaGluZyAlZCBieXRlcywgVHJhbnNmZXJpbmcgJWQgYnl0ZXMgaW4gJWQgbGJsb2Nrcy5cbiIsCisJCQlwcmludGsoT1NTVF9ERUJfTVNHICIlczpEOiBGbHVzaGluZyAlZCBieXRlcywgVHJhbnNmZXJyaW5nICVkIGJ5dGVzIGluICVkIGxibG9ja3MuXG4iLAogCQkJICAJCQkgbmFtZSwgb2Zmc2V0LCB0cmFuc2ZlciwgYmxrcyk7CiAjZW5kaWYKIApAQCAtMzgxMSw3ICszODExLDcgQEAKIAogCQkJaWYgKHRyYW5zZmVyID09IDApIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJICAiJXM6VzogTm90aGluZyBjYW4gYmUgdHJhbnNmZXJlZCwgcmVxdWVzdGVkICVaZCwgdGFwZSBibG9jayBzaXplICglZCVjKS5cbiIsCisJCQkJICAiJXM6VzogTm90aGluZyBjYW4gYmUgdHJhbnNmZXJyZWQsIHJlcXVlc3RlZCAlWmQsIHRhcGUgYmxvY2sgc2l6ZSAoJWQlYykuXG4iLAogCQkJICAgCQluYW1lLCBjb3VudCwgU1RwLT5ibG9ja19zaXplIDwgMTAyND8KIAkJCQkJU1RwLT5ibG9ja19zaXplOlNUcC0+YmxvY2tfc2l6ZS8xMDI0LAogCQkJCSAgICAgICAJU1RwLT5ibG9ja19zaXplPDEwMjQ/J2InOidrJyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvb3NzdC5oIGIvZHJpdmVycy9zY3NpL29zc3QuaAppbmRleCAxMWQyNmM1Li5iNGZlYTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvb3NzdC5oCisrKyBiL2RyaXZlcnMvc2NzaS9vc3N0LmgKQEAgLTQxMyw3ICs0MTMsNyBAQAogICogQVVYCiAgKi8KIHR5cGVkZWYgc3RydWN0IG9zX2F1eF9zIHsKLSAgICAgICAgX19iZTMyICAgICAgICAgIGZvcm1hdF9pZDsgICAgICAgICAgICAgIC8qIGhhcmR3YXJlIGNvbXBhYmlsaXR5IEFVWCBpcyBiYXNlZCBvbiAqLworICAgICAgICBfX2JlMzIgICAgICAgICAgZm9ybWF0X2lkOyAgICAgICAgICAgICAgLyogaGFyZHdhcmUgY29tcGF0aWJpbGl0eSBBVVggaXMgYmFzZWQgb24gKi8KICAgICAgICAgY2hhciAgICAgICAgICAgIGFwcGxpY2F0aW9uX3NpZ1s0XTsgICAgIC8qIGRyaXZlciB1c2VkIHRvIHdyaXRlIHRoaXMgbWVkaWEgKi8KICAgICAgICAgX19iZTMyICAgICAgICAgIGhkd3I7ICAgICAgICAgICAgICAgICAgIC8qIHJlc2VydmVkICovCiAgICAgICAgIF9fYmUzMiAgICAgICAgICB1cGRhdGVfZnJhbWVfY250cjsgICAgICAvKiBmb3IgY29uZmlndXJhdGlvbiBmcmFtZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmMKaW5kZXggYmUzZjMzZC4uNTRiZGY2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYworKysgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5jCkBAIC03NDIsNyArNzQyLDcgQEAKIAogCQlyZXMgPSBuc3BfZmlmb19jb3VudChTQ3BudCkgLSBvY291bnQ7CiAJCS8vbnNwX2RiZyhOU1BfREVCVUdfREFUQV9JTywgInB0cj0weCVwIHRoaXM9MHgleCBvY291bnQ9MHgleCByZXM9MHgleCIsIFNDcG50LT5TQ3AucHRyLCBTQ3BudC0+U0NwLnRoaXNfcmVzaWR1YWwsIG9jb3VudCwgcmVzKTsKLQkJaWYgKHJlcyA9PSAwKSB7IC8qIGlmIHNvbWUgZGF0YSBhdmlsYWJsZSA/ICovCisJCWlmIChyZXMgPT0gMCkgeyAvKiBpZiBzb21lIGRhdGEgYXZhaWxhYmxlID8gKi8KIAkJCWlmIChzdGF0ID09IEJVU1BIQVNFX0RBVEFfSU4pIHsgLyogcGhhc2UgY2hhbmdlZD8gKi8KIAkJCQkvL25zcF9kYmcoTlNQX0RFQlVHX0RBVEFfSU8sICIgd2FpdCBmb3IgZGF0YSB0aGlzPSVkIiwgU0NwbnQtPlNDcC50aGlzX3Jlc2lkdWFsKTsKIAkJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2h3aS5jIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaHdpLmMKaW5kZXggMThiNmM1NS4uOGI3ZGIxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaHdpLmMKKysrIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaHdpLmMKQEAgLTMzOSw3ICszMzksNyBAQAogCiAvKioKICAqIGJhcjRfc2hpZnQgLSBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gc2hpZnQgQkFSIGJhc2UgYWRkcmVzcwotICogQHBtODAwMV9oYSA6IG91ciBoYmEgY2FyZCBpbmZvbWF0aW9uCisgKiBAcG04MDAxX2hhIDogb3VyIGhiYSBjYXJkIGluZm9ybWF0aW9uCiAgKiBAc2hpZnRWYWx1ZSA6IHNoaWZ0aW5nIHZhbHVlIGluIG1lbW9yeSBiYXIuCiAgKi8KIHN0YXRpYyBpbnQgYmFyNF9zaGlmdChzdHJ1Y3QgcG04MDAxX2hiYV9pbmZvICpwbTgwMDFfaGEsIHUzMiBzaGlmdFZhbHVlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaHdpLmggYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9od2kuaAppbmRleCA4MzNhNTIwLi45MDkxMzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9od2kuaAorKysgYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9od2kuaApAQCAtMjA5LDcgKzIwOSw3IEBACiAKIC8qCiAgKiBicmllZiB0aGUgZGF0YSBzdHJ1Y3R1cmUgb2YgU0FUQSBDb21wbGV0aW9uIFJlc3BvbnNlCi0gKiB1c2UgdG8gZGlzY3JpYmUgdGhlIHNhdGEgdGFzayByZXNwb25zZSAoNjQgYnl0ZXMpCisgKiB1c2UgdG8gZGVzY3JpYmUgdGhlIHNhdGEgdGFzayByZXNwb25zZSAoNjQgYnl0ZXMpCiAgKi8KIHN0cnVjdCBzYXRhX2NvbXBsZXRpb25fcmVzcCB7CiAJX19sZTMyCXRhZzsKQEAgLTk1MSw3ICs5NTEsNyBAQAogI2RlZmluZSBQQ0lFX0VWRU5UX0lOVEVSUlVQVAkJMHgwMDMwNDQKICNkZWZpbmUgUENJRV9FUlJPUl9JTlRFUlJVUFRfRU5BQkxFCTB4MDAzMDQ4CiAjZGVmaW5lIFBDSUVfRVJST1JfSU5URVJSVVBUCQkweDAwMzA0QwotLyogc2lnbmF0dXJlIGRlZmludGlvbiBmb3IgaG9zdCBzY3JhdGNoIHBhZDAgcmVnaXN0ZXIgKi8KKy8qIHNpZ25hdHVyZSBkZWZpbml0aW9uIGZvciBob3N0IHNjcmF0Y2ggcGFkMCByZWdpc3RlciAqLwogI2RlZmluZSBTUENfU09GVF9SRVNFVF9TSUdOQVRVUkUJMHgyNTJhY2JjZAogLyogU2lnbmF0dXJlIGZvciBTb2Z0IFJlc2V0ICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX3Nhcy5oIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmgKaW5kZXggYmRiNmIyNy4uYWEwNWU2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmgKKysrIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmgKQEAgLTQ0NSw3ICs0NDUsNyBAQAogc3RydWN0IGZ3X2NvbnRyb2xfZXggewogCXN0cnVjdCBmd19jb250cm9sX2luZm8gKmZ3X2NvbnRyb2w7CiAJdm9pZAkJCSpidWZmZXI7Lyoga2VlcCBidWZmZXIgcG9pbnRlciB0byBiZQotCWZyZWVkIHdoZW4gdGhlIHJlc3BvbmNlIGNvbWVzKi8KKwlmcmVlZCB3aGVuIHRoZSByZXNwb25zZSBjb21lcyovCiAJdm9pZAkJCSp2aXJ0QWRkcjsvKiBrZWVwIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgZGF0YSAqLwogCXZvaWQJCQkqdXNyQWRkcjsvKiBrZWVwIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUKIAl1c2VyIGRhdGEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jCmluZGV4IGJjZjg1OGUuLjdmNjM2YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMKKysrIGIvZHJpdmVycy9zY3NpL3BtY3JhaWQuYwpAQCAtMjEzLDcgKzIxMyw3IEBACiAgKiBwbWNyYWlkX3NsYXZlX2NvbmZpZ3VyZSAtIENvbmZpZ3VyZXMgYSBTQ1NJIGRldmljZQogICogQHNjc2lfZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKICAqCi0gKiBUaGlzIGZ1Y250aW9uIGlzIGV4ZWN1dGVkIGJ5IFNDU0kgbWlkIGxheWVyIGp1c3QgYWZ0ZXIgYSBkZXZpY2UgaXMgZmlyc3QKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYnkgU0NTSSBtaWQgbGF5ZXIganVzdCBhZnRlciBhIGRldmljZSBpcyBmaXJzdAogICogc2Nhbm5lZCAoaS5lLiBpdCBoYXMgcmVzcG9uZGVkIHRvIGFuIElOUVVJUlkpLiBGb3IgVlNFVCByZXNvdXJjZXMsIHRoZQogICogdGltZW91dCB2YWx1ZSAoZGVmYXVsdCAzMHMpIHdpbGwgYmUgb3Zlci13cml0dGVuIHRvIGEgaGlnaGVyIHZhbHVlICg2MHMpCiAgKiBhbmQgbWF4X3NlY3RvcnMgdmFsdWUgd2lsbCBiZSBvdmVyLXdyaXR0ZW4gdG8gNTEyLiBJdCBhbHNvIHNldHMgcXVldWUgZGVwdGgKQEAgLTIxMjIsNyArMjEyMiw3IEBACiAgKgogICogVGhpcyBmdW5jdGlvbiBleGVjdXRlcyBtb3N0IG9mIHRoZSBzdGVwcyByZXF1aXJlZCBmb3IgSU9BIHJlc2V0LiBUaGlzIGdldHMKICAqIGNhbGxlZCBieSB1c2VyIHRocmVhZHMgKG1vZHByb2JlL2luc21vZC9ybW1vZCkgdGltZXIsIHRhc2tsZXQgYW5kIG1pZGxheWVyJ3MKLSAqICdlaF8nIHRocmVhZC4gQWNjZXNzIHRvIHZhcmlhYmxlcyB1c2VkIGZvciBjb250cm9saW5nIHRoZSByZXNldCBzZXF1ZW5jZSBpcworICogJ2VoXycgdGhyZWFkLiBBY2Nlc3MgdG8gdmFyaWFibGVzIHVzZWQgZm9yIGNvbnRyb2xsaW5nIHRoZSByZXNldCBzZXF1ZW5jZSBpcwogICogc3luY2hyb25pemVkIHVzaW5nIGhvc3QgbG9jay4gVmFyaW91cyBmdW5jdGlvbnMgY2FsbGVkIGR1cmluZyByZXNldCBwcm9jZXNzCiAgKiB3b3VsZCBtYWtlIHVzZSBvZiBhIHNpbmdsZSBjb21tYW5kIGJsb2NrLCBwb2ludGVyIHRvIHdoaWNoIGlzIGFsc28gc3RvcmVkIGluCiAgKiBhZGFwdGVyIGluc3RhbmNlIHN0cnVjdHVyZS4KQEAgLTI5OTQsNyArMjk5NCw3IEBACiAKIAkvKiBJZiB0aGUgYWJvcnQgdGFzayBpcyBub3QgdGltZWQgb3V0IHdlIHdpbGwgZ2V0IGEgR29vZCBjb21wbGV0aW9uCiAJICogYXMgc2Vuc2Vfa2V5LCBvdGhlcndpc2Ugd2UgbWF5IGdldCBvbmUgdGhlIGZvbGxvd2luZyByZXNwb25zZXMKLQkgKiBkdWUgdG8gc3Vic3F1ZW50IGJ1cyByZXNldCBvciBkZXZpY2UgcmVzZXQuIEluIGNhc2UgSU9BU0MgaXMKKwkgKiBkdWUgdG8gc3Vic2VxdWVudCBidXMgcmVzZXQgb3IgZGV2aWNlIHJlc2V0LiBJbiBjYXNlIElPQVNDIGlzCiAJICogTlJfU1lOQ19SRVFVSVJFRCwgc2V0IHN5bmNfcmVxZCBmbGFnIGZvciB0aGUgY29ycmVzcG9uZGluZyByZXNvdXJjZQogCSAqLwogCWlmIChpb2FzYyA9PSBQTUNSQUlEX0lPQVNDX1VBX0JVU19XQVNfUkVTRVQgfHwKQEAgLTM4MTQsNiArMzgxNCw5IEBACiAJCQlyYyA9IC1FRkFVTFQ7CiAJCQlnb3RvIG91dF9mcmVlX2J1ZmZlcjsKIAkJfQorCX0gZWxzZSBpZiAocmVxdWVzdF9zaXplIDwgMCkgeworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2ZyZWVfYnVmZmVyOwogCX0KIAogCS8qIGNoZWNrIGlmIHdlIGhhdmUgYW55IGFkZGl0aW9uYWwgY29tbWFuZCBwYXJhbWV0ZXJzICovCkBAIC0zOTMzLDcgKzM5MzYsNyBAQAogCiAJCQkvKiBpZiBhYm9ydCB0YXNrIGNvdWxkbid0IGZpbmQgdGhlIGNvbW1hbmQgaS5lIGl0IGdvdAogCQkJICogY29tcGxldGVkIHByaW9yIHRvIGFib3J0aW5nLCByZXR1cm4gZ29vZCBjb21wbGV0aW9uLgotCQkJICogaWYgY29tbWFuZCBnb3QgYWJvcnRlZCBzdWNjZXNmdWxseSBvciB0aGVyZSB3YXMgSU9BCisJCQkgKiBpZiBjb21tYW5kIGdvdCBhYm9ydGVkIHN1Y2Nlc3NmdWxseSBvciB0aGVyZSB3YXMgSU9BCiAJCQkgKiByZXNldCBkdWUgdG8gYWJvcnQgdGFzayBpdHNlbGYgZ2V0dGluZyB0aW1lZG91dCB0aGVuCiAJCQkgKiByZXR1cm4gLUVUSU1FRE9VVAogCQkJICovCkBAIC01OTMyLDcgKzU5MzUsNyBAQAogCSAqIEhvd2V2ZXIsIGZpcm13YXJlIHN1cHBvcnRzIDY0LWJpdCBzdHJlYW1pbmcgRE1BIGJ1ZmZlcnMsIHdoZXJlYXMKIAkgKiBjb2hlcmVudCBidWZmZXJzIGFyZSB0byBiZSAzMi1iaXQuIFNpbmNlIHBjaV9hbGxvY19jb25zaXN0ZW50IGFsd2F5cwogCSAqIHJldHVybnMgbWVtb3J5IHdpdGhpbiA0R0IgKGlmIG5vdCwgY2hhbmdlIHRoaXMgbG9naWMpLCBjb2hlcmVudAotCSAqIGJ1ZmZlcnMgYXJlIHdpdGhpbiBmaXJtd2FyZSBhY2NlcHRpYmxlIGFkZHJlc3MgcmFuZ2VzLgorCSAqIGJ1ZmZlcnMgYXJlIHdpdGhpbiBmaXJtd2FyZSBhY2NlcHRhYmxlIGFkZHJlc3MgcmFuZ2VzLgogCSAqLwogCWlmICgoc2l6ZW9mKGRtYV9hZGRyX3QpID09IDQpIHx8CiAJICAgIHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcG1jcmFpZC5oIGIvZHJpdmVycy9zY3NpL3BtY3JhaWQuaAppbmRleCA0ZGIyMTBkLi4zNGU0YzkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcG1jcmFpZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmgKQEAgLTEwMjQsNyArMTAyNCw3IEBACiAKIAogLyoKLSAqIHBtY3JhaWRfaW9jdGxfaGVhZGVyIC0gZGVmaW5pdGlvbiBvZiBoZWFkZXIgc3RydWN0dXJlIHRoYXQgcHJlY2VlZHMgYWxsIHRoZQorICogcG1jcmFpZF9pb2N0bF9oZWFkZXIgLSBkZWZpbml0aW9uIG9mIGhlYWRlciBzdHJ1Y3R1cmUgdGhhdCBwcmVjZWRlcyBhbGwgdGhlCiAgKiBidWZmZXJzIGdpdmVuIGFzIGlvY3RsIGFyZ3VtZW50cy4KICAqCiAgKiAuc2lnbmF0dXJlICAgICAgICAgICA6IGFsd2F5cyBBU0NJSSBzdHJpbmcsICJQTUNSQUlEIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTEyODAuYyBiL2RyaXZlcnMvc2NzaS9xbGExMjgwLmMKaW5kZXggNWRlYzY4NC4uOGJhNTc0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTEyODAuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMTI4MC5jCkBAIC03OCw3ICs3OCw3IEBACiAJLSBDbGVhbiB1cCB2Y2hhbiBoYW5kbGluZwogICAgIFJldiAgMy4yMy4zMyBKdWx5IDMsIDIwMDMsIEplcyBTb3JlbnNlbgogCS0gRG9uJ3QgZGVmaW5lIHJlZ2lzdGVyIGFjY2VzcyBtYWNyb3MgYmVmb3JlIGRlZmluZSBkZXRlcm1pbmluZyBNTUlPLgotCSAgVGhpcyBqdXN0IGhhcHBlbmQgdG8gd29yayBvdXQgb24gaWE2NCBidXQgbm90IGVsc2V3aGVyZS4KKwkgIFRoaXMganVzdCBoYXBwZW5lZCB0byB3b3JrIG91dCBvbiBpYTY0IGJ1dCBub3QgZWxzZXdoZXJlLgogCS0gRG9uJ3QgdHJ5IGFuZCByZWFkIGZyb20gdGhlIGNhcmQgd2hpbGUgaXQgaXMgaW4gcmVzZXQgYXMKIAkgIGl0IHdvbid0IHJlc3BvbmQgYW5kIGNhdXNlcyBhbiBNQ0EKICAgICBSZXYgIDMuMjMuMzIgSnVuZSAyMywgMjAwMywgSmVzIFNvcmVuc2VuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKaW5kZXggNmM1MWMwYS4uZWUyMDM1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaApAQCAtMjA4Niw3ICsyMDg2LDcgQEAKIH07CiAKIC8qCi0gKiBTTlMgY29tbWFuZCBzdHJ1Y3R1cmVzIC0tIGZvciAyMjAwIGNvbXBhdGFiaWxpdHkuCisgKiBTTlMgY29tbWFuZCBzdHJ1Y3R1cmVzIC0tIGZvciAyMjAwIGNvbXBhdGliaWxpdHkuCiAgKi8KICNkZWZpbmUJUkZUX0lEX1NOU19TQ01EX0xFTgkyMgogI2RlZmluZQlSRlRfSURfU05TX0NNRF9TSVpFCTYwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZncuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9mdy5oCmluZGV4IDYzMWZlZmMuLmY1YmEwOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9mdy5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9mdy5oCkBAIC01MzksNyArNTM5LDcgQEAKIAkgKiBJZiBESUYgRXJyb3IgaXMgc2V0IGluIGNvbXBfc3RhdHVzLCB0aGVzZSBhZGRpdGlvbmFsIGZpZWxkcyBhcmUKIAkgKiBkZWZpbmVkOgogCSAqICZkYXRhWzEwXSA6IHVpbnQ4X3QgcmVwb3J0X3J1bnRfYmdbMl07CS0gY29tcHV0ZWQgZ3VhcmQKLQkgKiAmZGF0YVsxMl0gOiB1aW50OF90IGFjdHVhbF9kaWZbOF07CQktIERJRiBEYXRhIHJlY2lldmVkCisJICogJmRhdGFbMTJdIDogdWludDhfdCBhY3R1YWxfZGlmWzhdOwkJLSBESUYgRGF0YSByZWNlaXZlZAogCSAqICZkYXRhWzIwXSA6IHVpbnQ4X3QgZXhwZWN0ZWRfZGlmWzhdOwkJLSBESUYgRGF0YSBjb21wdXRlZAogCSovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCmluZGV4IGQxN2VkOWEuLjcxMjUxOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKQEAgLTQxNCw3ICs0MTQsNyBAQAogCQkJCSAgICAibWFya2VkIE9GRkxJTkUhXG4iKTsKIAkJCQl2aGEtPmZsYWdzLm9ubGluZSA9IDA7CiAJCQl9IGVsc2UgewotCQkJCS8qIENoZWNrIHRvIHNlZSBpZiBNUEkgdGltZW91dCBvY2N1cmVkICovCisJCQkJLyogQ2hlY2sgdG8gc2VlIGlmIE1QSSB0aW1lb3V0IG9jY3VycmVkICovCiAJCQkJaWYgKChtYnggJiBNQlhfMykgJiYgKGhhLT5mbGFncy5wb3J0MCkpCiAJCQkJCXNldF9iaXQoTVBJX1JFU0VUX05FRURFRCwKIAkJCQkJICAgICZ2aGEtPmRwY19mbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKaW5kZXggN2E3YzBlYy4uMzQ4OTMzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYwpAQCAtMzAzLDcgKzMwMyw3IEBACiAJCQkgICAgIXRlc3RfYml0KElTUF9BQk9SVF9SRVRSWSwgJnZoYS0+ZHBjX2ZsYWdzKSkgewogCiAJCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJCSAgICAiTWFpbGJveCBjb21tYW5kIHRpbWVvdXQgb2NjdXJlZC4gIgorCQkJCSAgICAiTWFpbGJveCBjb21tYW5kIHRpbWVvdXQgb2NjdXJyZWQuICIKIAkJCQkgICAgIlNjaGVkdWxpbmcgSVNQICIgImFib3J0LiBlZWhfYnVzeTogMHgleFxuIiwKIAkJCQkgICAgaGEtPmZsYWdzLmVlaF9idXN5KTsKIAkJCQlzZXRfYml0KElTUF9BQk9SVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CkBAIC0zMjEsNyArMzIxLDcgQEAKIAkJCSAgICAhdGVzdF9iaXQoSVNQX0FCT1JUX1JFVFJZLCAmdmhhLT5kcGNfZmxhZ3MpKSB7CiAKIAkJCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkJICAgICJNYWlsYm94IGNvbW1hbmQgdGltZW91dCBvY2N1cmVkLiAiCisJCQkJICAgICJNYWlsYm94IGNvbW1hbmQgdGltZW91dCBvY2N1cnJlZC4gIgogCQkJCSAgICAiSXNzdWluZyBJU1AgYWJvcnQuXG4iKTsKIAogCQkJCXNldF9iaXQoQUJPUlRfSVNQX0FDVElWRSwgJnZoYS0+ZHBjX2ZsYWdzKTsKQEAgLTM3ODksNyArMzc4OSw3IEBACiAJbWNwLT5tYlsyMF0gPSBMU1coTVNEKG1yZXEtPnNlbmRfZG1hKSk7CiAJbWNwLT5tYlsyMV0gPSBNU1coTVNEKG1yZXEtPnNlbmRfZG1hKSk7CiAKLQkvKiByZWNpZXZlIGRhdGEgYWRkcmVzcyAqLworCS8qIHJlY2VpdmUgZGF0YSBhZGRyZXNzICovCiAJbWNwLT5tYlsxNl0gPSBMU1cobXJlcS0+cmN2X2RtYSk7CiAJbWNwLT5tYlsxN10gPSBNU1cobXJlcS0+cmN2X2RtYSk7CiAJbWNwLT5tYls2XSA9IExTVyhNU0QobXJlcS0+cmN2X2RtYSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX254LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguYwppbmRleCA3NmVjODc2Li40NTVmZTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguYwpAQCAtMjU5OCw3ICsyNTk4LDcgQEAKICAqIHFsYTgyeHhfc3RhcnRfc2NzaSgpIC0gU2VuZCBhIFNDU0kgY29tbWFuZCB0byB0aGUgSVNQCiAgKiBAc3A6IGNvbW1hbmQgdG8gc2VuZCB0byB0aGUgSVNQCiAgKgotICogUmV0dXJucyBub24temVybyBpZiBhIGZhaWx1cmUgb2NjdXJlZCwgZWxzZSB6ZXJvLgorICogUmV0dXJucyBub24temVybyBpZiBhIGZhaWx1cmUgb2NjdXJyZWQsIGVsc2UgemVyby4KICAqLwogaW50CiBxbGE4Mnh4X3N0YXJ0X3Njc2koc3JiX3QgKnNwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwppbmRleCA3NWE5NjZjLi5hYTc3NDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwpAQCAtMTA0Niw3ICsxMDQ2LDcgQEAKIAogZWhfYnVzX3Jlc2V0X2RvbmU6CiAJcWxhX3ByaW50ayhLRVJOX0lORk8sIHZoYS0+aHcsICIlczogcmVzZXQgJXNcbiIsIF9fZnVuY19fLAotCSAgICAocmV0ID09IEZBSUxFRCkgPyAiZmFpbGVkIiA6ICJzdWNjZWRlZCIpOworCSAgICAocmV0ID09IEZBSUxFRCkgPyAiZmFpbGVkIiA6ICJzdWNjZWVkZWQiKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMTM2LDcgKzExMzYsNyBAQAogCiBlaF9ob3N0X3Jlc2V0X2xvY2s6CiAJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiJXM6IHJlc2V0ICVzXG4iLCBfX2Z1bmNfXywKLQkgICAgKHJldCA9PSBGQUlMRUQpID8gImZhaWxlZCIgOiAic3VjY2VkZWQiKTsKKwkgICAgKHJldCA9PSBGQUlMRUQpID8gImZhaWxlZCIgOiAic3VjY2VlZGVkIik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzkwMiw3ICszOTAyLDcgQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAoYXRvbWljX3JlYWQoJm90aGVyX3BkZXYtPmVuYWJsZV9jbnQpKSB7CiAJCQlERUJVRzE3KHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCSAgICAiRm91bmQgUENJIGZ1bmMgYXZhaWxhYmUgYW5kIGVuYWJsZWQgYXQgMHgleFxuIiwKKwkJCSAgICAiRm91bmQgUENJIGZ1bmMgYXZhaWxhYmxlIGFuZCBlbmFibGVkIGF0IDB4JXhcbiIsCiAJCQkgICAgZm4pKTsKIAkJCXBjaV9kZXZfcHV0KG90aGVyX3BkZXYpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZGVmLmggYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZGVmLmgKaW5kZXggYzFmOGQxYi4uNDc1Nzg3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2RlZi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9kZWYuaApAQCAtMTgyLDcgKzE4Miw3IEBACiAJdWludDE2X3QgZmxhZ3M7CQkvKiAoMSkgU3RhdHVzIGZsYWdzLiAqLwogCiAjZGVmaW5lIFNSQl9ETUFfVkFMSUQJCUJJVF8zCS8qIERNQSBCdWZmZXIgbWFwcGVkLiAqLwotI2RlZmluZSBTUkJfR09UX1NFTlNFCQlCSVRfNAkvKiBzZW5zZSBkYXRhIHJlY2lldmVkLiAqLworI2RlZmluZSBTUkJfR09UX1NFTlNFCQlCSVRfNAkvKiBzZW5zZSBkYXRhIHJlY2VpdmVkLiAqLwogCXVpbnQ4X3Qgc3RhdGU7CQkvKiAoMSkgU3RhdHVzIGZsYWdzLiAqLwogCiAjZGVmaW5lIFNSQl9OT19RVUVVRV9TVEFURQkgMAkvKiBSZXF1ZXN0IGlzIGluIGJldHdlZW4gc3RhdGVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW5pdC5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2luaXQuYwppbmRleCBiYmIyZTkwLi40OGUyMjQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pbml0LmMKQEAgLTEzMzgsNyArMTMzOCw3IEBACiAJfQogCiAJREVCVUcyKHByaW50aygic2NzaSVsZDogaW5pdGlhbGl6ZSBhZGFwdGVyOiAlc1xuIiwgaGEtPmhvc3Rfbm8sCi0JICAgIHN0YXR1cyA9PSBRTEFfRVJST1IgPyAiRkFJTEVEIiA6ICJTVUNDRURFRCIpKTsKKwkgICAgc3RhdHVzID09IFFMQV9FUlJPUiA/ICJGQUlMRUQiIDogIlNVQ0NFRURFRCIpKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfbnZyYW0uaCBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9udnJhbS5oCmluZGV4IGIzODMxYmQuLjk0NWNjMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9udnJhbS5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9udnJhbS5oCkBAIC0yOCw3ICsyOCw3IEBACiAjZGVmaW5lCSBGTTkzQzU2QV9FUkFTRQkgICAgICAweDMKICNkZWZpbmUJIEZNOTNDNTZBX0VSQVNFX0FMTCAgIDB4MAogCi0vKiBDb21tYW5kIEV4dGVudGlvbnMgKi8KKy8qIENvbW1hbmQgRXh0ZW5zaW9ucyAqLwogI2RlZmluZQkgRk05M0M1NkFfV0VOX0VYVAkgMHgzCiAjZGVmaW5lCSBGTTkzQzU2QV9XUklURV9BTExfRVhUCSAweDEKICNkZWZpbmUJIEZNOTNDNTZBX1dEU19FWFQJIDB4MApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYwppbmRleCBhNGFjYjBkLi4yMzBiYTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYwpAQCAtMTIxMyw3ICsxMjEzLDcgQEAKIAogCWNsZWFyX2JpdChEUENfUkVTRVRfQUNUSVZFLCAmaGEtPmRwY19mbGFncyk7CiAJREVCVUcyKHByaW50aygic2NzaSVsZDogcmVjb3ZlciBhZGFwdGVyOiAlc1xuIiwgaGEtPmhvc3Rfbm8sCi0JICAgIHN0YXR1cyA9PSBRTEFfRVJST1IgPyAiRkFJTEVEIiA6ICJTVUNDRURFRCIpKTsKKwkgICAgc3RhdHVzID09IFFMQV9FUlJPUiA/ICJGQUlMRUQiIDogIlNVQ0NFRURFRCIpKTsKIAogCXJldHVybiBzdGF0dXM7CiB9CkBAIC0yMTEwLDcgKzIxMTAsNyBAQAogCiAJcWw0X3ByaW50ayhLRVJOX0lORk8sIGhhLAogCSAgICAic2NzaSVsZDolZDolZDogQWJvcnQgY29tbWFuZCAtICVzXG4iLAotCSAgICBoYS0+aG9zdF9ubywgaWQsIGx1biwgKHJldCA9PSBTVUNDRVNTKSA/ICJzdWNjZWRlZCIgOiAiZmFpbGVkIik7CisJICAgIGhhLT5ob3N0X25vLCBpZCwgbHVuLCAocmV0ID09IFNVQ0NFU1MpID8gInN1Y2NlZWRlZCIgOiAiZmFpbGVkIik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjI3OCw3ICsyMjc4LDcgQEAKIAkJcmV0dXJuX3N0YXR1cyA9IFNVQ0NFU1M7CiAKIAlxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJIT1NUIFJFU0VUICVzLlxuIiwKLQkJICAgcmV0dXJuX3N0YXR1cyA9PSBGQUlMRUQgPyAiRkFJTEVEIiA6ICJTVUNDRURFRCIpOworCQkgICByZXR1cm5fc3RhdHVzID09IEZBSUxFRCA/ICJGQUlMRUQiIDogIlNVQ0NFRURFRCIpOwogCiAJcmV0dXJuIHJldHVybl9zdGF0dXM7CiB9CkBAIC0yNDkyLDcgKzI0OTIsNyBAQAogCS8qIEluaXRpYWxpemUgZGV2aWNlIG9yIHJlc3VtZSBpZiBpbiBzdXNwZW5kZWQgc3RhdGUgKi8KIAlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChyYykgewotCQlxbDRfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJzY3NpJWxkOiAlczogQ2FudCByZS1lbmFibGUgIgorCQlxbDRfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJzY3NpJWxkOiAlczogQ2FuJ3QgcmUtZW5hYmxlICIKIAkJICAgICJkZXZpY2UgYWZ0ZXIgcmVzZXRcbiIsIGhhLT5ob3N0X25vLCBfX2Z1bmNfXyk7CiAJCWdvdG8gZXhpdF9zbG90X3Jlc2V0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbG9naWNwdGkuYyBiL2RyaXZlcnMvc2NzaS9xbG9naWNwdGkuYwppbmRleCBlMmQ0NWM5Li45Njg5ZDQxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Fsb2dpY3B0aS5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbG9naWNwdGkuYwpAQCAtMTI5Miw4ICsxMjkyLDEwIEBACiAJLnVzZV9jbHVzdGVyaW5nCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcXB0aV9tYXRjaFtdOwogc3RhdGljIGludCBfX2RldmluaXQgcXB0aV9zYnVzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wKQogeworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCXN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRwbnQ7CiAJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IG9wLT5kZXYub2Zfbm9kZTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwpAQCAtMTMwMSw5ICsxMzAzLDEwIEBACiAJc3RhdGljIGludCBucXB0aXM7CiAJY29uc3QgY2hhciAqZmNvZGU7CiAKLQlpZiAoIW9wLT5kZXYub2ZfbWF0Y2gpCisJbWF0Y2ggPSBvZl9tYXRjaF9kZXZpY2UocXB0aV9tYXRjaCwgJm9wLT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwotCXRwbnQgPSBvcC0+ZGV2Lm9mX21hdGNoLT5kYXRhOworCXRwbnQgPSBtYXRjaC0+ZGF0YTsKIAogCS8qIFNvbWV0aW1lcyBBbnRhcmVzIGNhcmRzIGNvbWUgdXAgbm90IGNvbXBsZXRlbHkKIAkgKiBzZXR1cCwgYW5kIHdlIGdldCBhIHJlcG9ydCBvZiBhIHplcm8gSVJRLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKaW5kZXggZmE1NzU4Yy4uNjg4OGIyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCkBAIC0yNDU0LDcgKzI0NTQsNyBAQAogCQlwcmludGsoS0VSTl9JTkZPICJzY3NpX2RlYnVnOiBzbGF2ZV9kZXN0cm95IDwldSAldSAldSAldT5cbiIsCiAJCSAgICAgICBzZHAtPmhvc3QtPmhvc3Rfbm8sIHNkcC0+Y2hhbm5lbCwgc2RwLT5pZCwgc2RwLT5sdW4pOwogCWlmIChkZXZpcCkgewotCQkvKiBtYWtlIHRoaXMgc2xvdCBhdmFsaWFibGUgZm9yIHJlLXVzZSAqLworCQkvKiBtYWtlIHRoaXMgc2xvdCBhdmFpbGFibGUgZm9yIHJlLXVzZSAqLwogCQlkZXZpcC0+dXNlZCA9IDA7CiAJCXNkcC0+aG9zdGRhdGEgPSBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKaW5kZXggNmQ1YzdmZi4uZWMxODAzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKQEAgLTc0LDggKzc0LDYgQEAKICAqLwogI2RlZmluZSBTQ1NJX1FVRVVFX0RFTEFZCTMKIAotc3RhdGljIHZvaWQgc2NzaV9ydW5fcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwotCiAvKgogICogRnVuY3Rpb246CXNjc2lfdW5wcmVwX3JlcXVlc3QoKQogICoKQEAgLTE2MSw3ICsxNTksNyBAQAogCWJsa19yZXF1ZXVlX3JlcXVlc3QocSwgY21kLT5yZXF1ZXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIAotCXNjc2lfcnVuX3F1ZXVlKHEpOworCWtibG9ja2Rfc2NoZWR1bGVfd29yayhxLCAmZGV2aWNlLT5yZXF1ZXVlX3dvcmspOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MDAsMTAgKzM5OCwxNSBAQAogc3RhdGljIHZvaWQgc2NzaV9ydW5fcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gcS0+cXVldWVkYXRhOwotCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gc2Rldi0+aG9zdDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKIAlMSVNUX0hFQUQoc3RhcnZlZF9saXN0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJLyogaWYgdGhlIGRldmljZSBpcyBkZWFkLCBzZGV2IHdpbGwgYmUgTlVMTCwgc28gbm8gcXVldWUgdG8gcnVuICovCisJaWYgKCFzZGV2KQorCQlyZXR1cm47CisKKwlzaG9zdCA9IHNkZXYtPmhvc3Q7CiAJaWYgKHNjc2lfdGFyZ2V0KHNkZXYpLT5zaW5nbGVfbHVuKQogCQlzY3NpX3NpbmdsZV9sdW5fcnVuKHNkZXYpOwogCkBAIC00MTEsOCArNDE0LDYgQEAKIAlsaXN0X3NwbGljZV9pbml0KCZzaG9zdC0+c3RhcnZlZF9saXN0LCAmc3RhcnZlZF9saXN0KTsKIAogCXdoaWxlICghbGlzdF9lbXB0eSgmc3RhcnZlZF9saXN0KSkgewotCQlpbnQgZmxhZ3NldDsKLQogCQkvKgogCQkgKiBBcyBsb25nIGFzIHNob3N0IGlzIGFjY2VwdGluZyBjb21tYW5kcyBhbmQgd2UgaGF2ZQogCQkgKiBzdGFydmVkIHF1ZXVlcywgY2FsbCBibGtfcnVuX3F1ZXVlLiBzY3NpX3JlcXVlc3RfZm4KQEAgLTQzNiwxOCArNDM3LDkgQEAKIAkJfQogCiAJCXNwaW5fdW5sb2NrKHNob3N0LT5ob3N0X2xvY2spOwotCiAJCXNwaW5fbG9jayhzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrKTsKLQkJZmxhZ3NldCA9IHRlc3RfYml0KFFVRVVFX0ZMQUdfUkVFTlRFUiwgJnEtPnF1ZXVlX2ZsYWdzKSAmJgotCQkJCSF0ZXN0X2JpdChRVUVVRV9GTEFHX1JFRU5URVIsCi0JCQkJCSZzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9mbGFncyk7Ci0JCWlmIChmbGFnc2V0KQotCQkJcXVldWVfZmxhZ19zZXQoUVVFVUVfRkxBR19SRUVOVEVSLCBzZGV2LT5yZXF1ZXN0X3F1ZXVlKTsKLQkJX19ibGtfcnVuX3F1ZXVlKHNkZXYtPnJlcXVlc3RfcXVldWUsIGZhbHNlKTsKLQkJaWYgKGZsYWdzZXQpCi0JCQlxdWV1ZV9mbGFnX2NsZWFyKFFVRVVFX0ZMQUdfUkVFTlRFUiwgc2Rldi0+cmVxdWVzdF9xdWV1ZSk7CisJCV9fYmxrX3J1bl9xdWV1ZShzZGV2LT5yZXF1ZXN0X3F1ZXVlKTsKIAkJc3Bpbl91bmxvY2soc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jayk7Ci0KIAkJc3Bpbl9sb2NrKHNob3N0LT5ob3N0X2xvY2spOwogCX0KIAkvKiBwdXQgYW55IHVucHJvY2Vzc2VkIGVudHJpZXMgYmFjayAqLwpAQCAtNDU3LDYgKzQ0OSwxNiBAQAogCWJsa19ydW5fcXVldWUocSk7CiB9CiAKK3ZvaWQgc2NzaV9yZXF1ZXVlX3J1bl9xdWV1ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxOworCisJc2RldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc2NzaV9kZXZpY2UsIHJlcXVldWVfd29yayk7CisJcSA9IHNkZXYtPnJlcXVlc3RfcXVldWU7CisJc2NzaV9ydW5fcXVldWUocSk7Cit9CisKIC8qCiAgKiBGdW5jdGlvbjoJc2NzaV9yZXF1ZXVlX2NvbW1hbmQoKQogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX25ldGxpbmsuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX25ldGxpbmsuYwppbmRleCBhMmVkMjAxLi4yNmE4YTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9uZXRsaW5rLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfbmV0bGluay5jCkBAIC00OTksNyArNDk5LDcgQEAKIAkJCQlTQ1NJX05MX0dSUF9DTlQsIHNjc2lfbmxfcmN2X21zZywgTlVMTCwKIAkJCQlUSElTX01PRFVMRSk7CiAJaWYgKCFzY3NpX25sX3NvY2spIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVnaXN0ZXIgb2YgcmVjaWV2ZSBoYW5kbGVyIGZhaWxlZFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVnaXN0ZXIgb2YgcmVjZWl2ZSBoYW5kbGVyIGZhaWxlZFxuIiwKIAkJCQlfX2Z1bmNfXyk7CiAJCW5ldGxpbmtfdW5yZWdpc3Rlcl9ub3RpZmllcigmc2NzaV9uZXRsaW5rX25vdGlmaWVyKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCmluZGV4IDA4NzgyMWYuLjU4NTg0ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKQEAgLTI0Miw2ICsyNDIsNyBAQAogCWludCBkaXNwbGF5X2ZhaWx1cmVfbXNnID0gMSwgcmV0OwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KHN0YXJnZXQtPmRldi5wYXJlbnQpOwogCWV4dGVybiB2b2lkIHNjc2lfZXZ0X3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCWV4dGVybiB2b2lkIHNjc2lfcmVxdWV1ZV9ydW5fcXVldWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogCXNkZXYgPSBremFsbG9jKHNpemVvZigqc2RldikgKyBzaG9zdC0+dHJhbnNwb3J0dC0+ZGV2aWNlX3NpemUsCiAJCSAgICAgICBHRlBfQVRPTUlDKTsKQEAgLTI2NCw2ICsyNjUsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZzZGV2LT5ldmVudF9saXN0KTsKIAlzcGluX2xvY2tfaW5pdCgmc2Rldi0+bGlzdF9sb2NrKTsKIAlJTklUX1dPUksoJnNkZXYtPmV2ZW50X3dvcmssIHNjc2lfZXZ0X3RocmVhZCk7CisJSU5JVF9XT1JLKCZzZGV2LT5yZXF1ZXVlX3dvcmssIHNjc2lfcmVxdWV1ZV9ydW5fcXVldWUpOwogCiAJc2Rldi0+c2Rldl9nZW5kZXYucGFyZW50ID0gZ2V0X2RldmljZSgmc3RhcmdldC0+ZGV2KTsKIAlzZGV2LT5zZGV2X3RhcmdldCA9IHN0YXJnZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwppbmRleCBlNDRmZjY0Li5lNjM5MTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKQEAgLTMyMiwxNCArMzIyLDggQEAKIAkJa2ZyZWUoZXZ0KTsKIAl9CiAKLQlpZiAoc2Rldi0+cmVxdWVzdF9xdWV1ZSkgewotCQlzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZWRhdGEgPSBOVUxMOwotCQkvKiB1c2VyIGNvbnRleHQgbmVlZGVkIHRvIGZyZWUgcXVldWUgKi8KLQkJc2NzaV9mcmVlX3F1ZXVlKHNkZXYtPnJlcXVlc3RfcXVldWUpOwotCQkvKiB0ZW1wb3JhcnkgZXhwZWRpZW50LCB0cnkgdG8gY2F0Y2ggdXNlIG9mIHF1ZXVlIGxvY2sKLQkJICogYWZ0ZXIgZnJlZSBvZiBzZGV2ICovCi0JCXNkZXYtPnJlcXVlc3RfcXVldWUgPSBOVUxMOwotCX0KKwkvKiBOVUxMIHF1ZXVlIG1lYW5zIHRoZSBkZXZpY2UgY2FuJ3QgYmUgdXNlZCAqLworCXNkZXYtPnJlcXVlc3RfcXVldWUgPSBOVUxMOwogCiAJc2NzaV90YXJnZXRfcmVhcChzY3NpX3RhcmdldChzZGV2KSk7CiAKQEAgLTkzNyw2ICs5MzEsMTIgQEAKIAlpZiAoc2Rldi0+aG9zdC0+aG9zdHQtPnNsYXZlX2Rlc3Ryb3kpCiAJCXNkZXYtPmhvc3QtPmhvc3R0LT5zbGF2ZV9kZXN0cm95KHNkZXYpOwogCXRyYW5zcG9ydF9kZXN0cm95X2RldmljZShkZXYpOworCisJLyogY2F1c2UgdGhlIHJlcXVlc3QgZnVuY3Rpb24gdG8gcmVqZWN0IGFsbCBJL08gcmVxdWVzdHMgKi8KKwlzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZWRhdGEgPSBOVUxMOworCisJLyogRnJlZWluZyB0aGUgcXVldWUgc2lnbmFscyB0byBibG9jayB0aGF0IHdlJ3JlIGRvbmUgKi8KKwlzY3NpX2ZyZWVfcXVldWUoc2Rldi0+cmVxdWVzdF9xdWV1ZSk7CiAJcHV0X2RldmljZShkZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90Z3RfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90Z3RfbGliLmMKaW5kZXggZjY3MjgyMC4uOGJjYThjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdGd0X2xpYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RndF9saWIuYwpAQCAtOTMsNyArOTMsNyBAQAogCiAJLyoKIAkgKiBUaGUgYmxrIGhlbHBlcnMgYXJlIHVzZWQgdG8gdGhlIFJFQUQvV1JJVEUgcmVxdWVzdHMKLQkgKiB0cmFuc2ZlcmluZyBkYXRhIGZyb20gYSBpbml0aWF0b3IgcG9pbnQgb2Ygdmlldy4gU2luY2UKKwkgKiB0cmFuc2ZlcnJpbmcgZGF0YSBmcm9tIGEgaW5pdGlhdG9yIHBvaW50IG9mIHZpZXcuIFNpbmNlCiAJICogd2UgYXJlIGluIHRhcmdldCBtb2RlIHdlIHdhbnQgdGhlIG9wcG9zaXRlLgogCSAqLwogCXJxID0gYmxrX2dldF9yZXF1ZXN0KHNob3N0LT51c3BhY2VfcmVxX3EsICF3cml0ZSwgZ2ZwX21hc2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwppbmRleCAyOTQxZDJkLi44MTUwNjlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwpAQCAtMjM3OCw3ICsyMzc4LDcgQEAKICAqIGZjX3JlbW92ZV9ob3N0IC0gY2FsbGVkIHRvIHRlcm1pbmF0ZSBhbnkgZmNfdHJhbnNwb3J0LXJlbGF0ZWQgZWxlbWVudHMgZm9yIGEgc2NzaSBob3N0LgogICogQHNob3N0OglXaGljaCAmU2NzaV9Ib3N0CiAgKgotICogVGhpcyByb3V0aW5lIGlzIGV4cGVjdGVkIHRvIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBwcmVjZWVkaW5nIHRoZQorICogVGhpcyByb3V0aW5lIGlzIGV4cGVjdGVkIHRvIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBwcmVjZWRpbmcgdGhlCiAgKiBhIGRyaXZlcidzIGNhbGwgdG8gc2NzaV9yZW1vdmVfaG9zdCgpLgogICoKICAqIFdBUk5JTkc6IEEgZHJpdmVyIHV0aWxpemluZyB0aGUgZmNfdHJhbnNwb3J0LCB3aGljaCBmYWlscyB0byBjYWxsCkBAIC0yNDU4LDcgKzI0NTgsNyBAQAogfQogCiAvKioKLSAqIGZjX3N0YXJnZXRfZGVsZXRlIC0gY2FsbGVkIHRvIGRlbGV0ZSB0aGUgc2NzaSBkZWNlbmRlbnRzIG9mIGFuIHJwb3J0CisgKiBmY19zdGFyZ2V0X2RlbGV0ZSAtIGNhbGxlZCB0byBkZWxldGUgdGhlIHNjc2kgZGVzY2VuZGFudHMgb2YgYW4gcnBvcnQKICAqIEB3b3JrOglyZW1vdGUgcG9ydCB0byBiZSBvcGVyYXRlZCBvbi4KICAqCiAgKiBEZWxldGVzIHRhcmdldCBhbmQgYWxsIHNkZXZzLgpAQCAtMzgxNiwyOCArMzgxNiwxNyBAQAogc3RhdGljIHZvaWQKIGZjX2JzZ19nb29zZV9xdWV1ZShzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KQogewotCWludCBmbGFnc2V0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KIAlpZiAoIXJwb3J0LT5ycXN0X3EpCiAJCXJldHVybjsKIAorCS8qCisJICogVGhpcyBnZXQvcHV0IGRhbmNlIG1ha2VzIG5vIHNlbnNlCisJICovCiAJZ2V0X2RldmljZSgmcnBvcnQtPmRldik7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZShycG9ydC0+cnFzdF9xLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0JZmxhZ3NldCA9IHRlc3RfYml0KFFVRVVFX0ZMQUdfUkVFTlRFUiwgJnJwb3J0LT5ycXN0X3EtPnF1ZXVlX2ZsYWdzKSAmJgotCQkgICF0ZXN0X2JpdChRVUVVRV9GTEFHX1JFRU5URVIsICZycG9ydC0+cnFzdF9xLT5xdWV1ZV9mbGFncyk7Ci0JaWYgKGZsYWdzZXQpCi0JCXF1ZXVlX2ZsYWdfc2V0KFFVRVVFX0ZMQUdfUkVFTlRFUiwgcnBvcnQtPnJxc3RfcSk7Ci0JX19ibGtfcnVuX3F1ZXVlKHJwb3J0LT5ycXN0X3EsIGZhbHNlKTsKLQlpZiAoZmxhZ3NldCkKLQkJcXVldWVfZmxhZ19jbGVhcihRVUVVRV9GTEFHX1JFRU5URVIsIHJwb3J0LT5ycXN0X3EpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocnBvcnQtPnJxc3RfcS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCisJYmxrX3J1bl9xdWV1ZV9hc3luYyhycG9ydC0+cnFzdF9xKTsKIAlwdXRfZGV2aWNlKCZycG9ydC0+ZGV2KTsKIH0KIAotCiAvKioKICAqIGZjX2JzZ19ycG9ydF9kaXNwYXRjaCAtIHByb2Nlc3MgcnBvcnQgYnNnIHJlcXVlc3RzIGFuZCBkaXNwYXRjaCB0byBMTERECiAgKiBAcToJCXJwb3J0IHJlcXVlc3QgcXVldWUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZC5jIGIvZHJpdmVycy9zY3NpL3NkLmMKaW5kZXggYjYxZWJlYy4uYmQwODA2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkLmMKKysrIGIvZHJpdmVycy9zY3NpL3NkLmMKQEAgLTEwNTUsNyArMTA1NSw3IEBACiAgKglAYXJnOiB0aGlzIGlzIHRoaXJkIGFyZ3VtZW50IGdpdmVuIHRvIGlvY3RsKDIpIHN5c3RlbSBjYWxsLgogICoJT2Z0ZW4gY29udGFpbnMgYSBwb2ludGVyLgogICoKLSAqCVJldHVybnMgMCBpZiBzdWNjZXNzZnVsIChzb21lIGlvY3RscyByZXR1cm4gcG9zdGl2ZSBudW1iZXJzIG9uCisgKglSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCAoc29tZSBpb2N0bHMgcmV0dXJuIHBvc2l0aXZlIG51bWJlcnMgb24KICAqCXN1Y2Nlc3MgYXMgd2VsbCkuIFJldHVybnMgYSBuZWdhdGVkIGVycm5vIHZhbHVlIGluIGNhc2Ugb2YgZXJyb3IuCiAgKgogICoJTm90ZTogbW9zdCBpb2N0bHMgYXJlIGZvcndhcmQgb250byB0aGUgYmxvY2sgc3Vic3lzdGVtIG9yIGZ1cnRoZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zci5jIGIvZHJpdmVycy9zY3NpL3NyLmMKaW5kZXggYWVmYWRjNi4uOTUwMTljNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NyLmMKKysrIGIvZHJpdmVycy9zY3NpL3NyLmMKQEAgLTU2Nyw3ICs1NjcsNyBAQAogCS5yZXZhbGlkYXRlX2Rpc2sgPSBzcl9ibG9ja19yZXZhbGlkYXRlX2Rpc2ssCiAJLyogCiAJICogTm8gY29tcGF0X2lvY3RsIGZvciBub3cgYmVjYXVzZSBzcl9ibG9ja19pb2N0bCBuZXZlcgotCSAqIHNlZW1zIHRvIHBhc3MgYXJiaXRhcnkgaW9jdGxzIGRvd24gdG8gaG9zdCBkcml2ZXJzLgorCSAqIHNlZW1zIHRvIHBhc3MgYXJiaXRyYXJ5IGlvY3RscyBkb3duIHRvIGhvc3QgZHJpdmVycy4KIAkgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdW4zX05DUjUzODAuYyBiL2RyaXZlcnMvc2NzaS9zdW4zX05DUjUzODAuYwppbmRleCA0ZjBlNTQ4Li4wN2VhZWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3VuM19OQ1I1MzgwLmMKKysrIGIvZHJpdmVycy9zY3NpL3N1bjNfTkNSNTM4MC5jCkBAIC00NjcsNyArNDY3LDcgQEAKICAqCiAgKiBQYXJhbWV0ZXJzOiBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQKICAqICAgIFRoZSBjb21tYW5kIHRvIHdvcmsgb24uIFRoZSBmaXJzdCBzY2F0dGVyIGJ1ZmZlcidzIGRhdGEgYXJlCi0gKiAgICBhc3N1bWVkIHRvIGJlIGFscmVhZHkgdHJhbnNmZXJlZCBpbnRvIHB0ci90aGlzX3Jlc2lkdWFsLgorICogICAgYXNzdW1lZCB0byBiZSBhbHJlYWR5IHRyYW5zZmVycmVkIGludG8gcHRyL3RoaXNfcmVzaWR1YWwuCiAgKi8KIAogc3RhdGljIHZvaWQgbWVyZ2VfY29udGlndW91c19idWZmZXJzKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKQEAgLTE3MTcsNyArMTcxNyw3IEBACiAgKglieXRlcyB0byB0cmFuc2ZlciwgKipkYXRhIC0gcG9pbnRlciB0byBkYXRhIHBvaW50ZXIuCiAgKiAKICAqIFJldHVybnMgOiAtMSB3aGVuIGRpZmZlcmVudCBwaGFzZSBpcyBlbnRlcmVkIHdpdGhvdXQgdHJhbnNmZXJyaW5nCi0gKgltYXhpbXVtIG51bWJlciBvZiBieXRlcywgMCBpZiBhbGwgYnl0ZXMgYXJlIHRyYW5zZmVyZWQgb3IgZXhpdAorICoJbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMsIDAgaWYgYWxsIGJ5dGVzIGFyZSB0cmFuc2ZlcnJlZCBvciBleGl0CiAgKglpcyBpbiBzYW1lIHBoYXNlLgogICoKICAqIAlBbHNvLCAqcGhhc2UsICpjb3VudCwgKmRhdGEgYXJlIG1vZGlmaWVkIGluIHBsYWNlLgpAQCAtMTkwNCw3ICsxOTA0LDcgQEAKICAqCWJ5dGVzIHRvIHRyYW5zZmVyLCAqKmRhdGEgLSBwb2ludGVyIHRvIGRhdGEgcG9pbnRlci4KICAqIAogICogUmV0dXJucyA6IC0xIHdoZW4gZGlmZmVyZW50IHBoYXNlIGlzIGVudGVyZWQgd2l0aG91dCB0cmFuc2ZlcnJpbmcKLSAqCW1heGltdW0gbnVtYmVyIG9mIGJ5dGVzLCAwIGlmIGFsbCBieXRlcyBvciB0cmFuc2ZlcmVkIG9yIGV4aXQKKyAqCW1heGltdW0gbnVtYmVyIG9mIGJ5dGVzLCAwIGlmIGFsbCBieXRlcyBvciB0cmFuc2ZlcnJlZCBvciBleGl0CiAgKglpcyBpbiBzYW1lIHBoYXNlLgogICoKICAqIAlBbHNvLCAqcGhhc2UsICpjb3VudCwgKmRhdGEgYXJlIG1vZGlmaWVkIGluIHBsYWNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N5bTUzYzQxNi5jIGIvZHJpdmVycy9zY3NpL3N5bTUzYzQxNi5jCmluZGV4IDE5MDEwN2EuLjAxMmM4NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zeW01M2M0MTYuYworKysgYi9kcml2ZXJzL3Njc2kvc3ltNTNjNDE2LmMKQEAgLTc3NCw3ICs3NzQsNyBAQAogCiAJLyogcHJpbnRrKCJzeW01M2M0MTZfcmVzZXRcbiIpOyAqLwogCWJhc2UgPSBTQ3BudC0+ZGV2aWNlLT5ob3N0LT5pb19wb3J0OwotCS8qIHNlYXJjaCBzY3NpX2lkIC0gZml4bWUsIHdlIHNob3VsZG50IG5lZWQgdG8gaXRlcmF0ZSBmb3IgdGhpcyEgKi8KKwkvKiBzZWFyY2ggc2NzaV9pZCAtIGZpeG1lLCB3ZSBzaG91bGRuJ3QgbmVlZCB0byBpdGVyYXRlIGZvciB0aGlzISAqLwogCWZvcihpID0gMDsgaSA8IGhvc3RfaW5kZXggJiYgc2NzaV9pZCA9PSAtMTsgaSsrKQogCQlpZihob3N0c1tpXS5iYXNlID09IGJhc2UpCiAJCQlzY3NpX2lkID0gaG9zdHNbaV0uc2NzaV9pZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZncxLmggYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2Z3MS5oCmluZGV4IDdiMDhkNmMuLjYzOTUyZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZncxLmgKKysrIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9mdzEuaApAQCAtMTQ0OSw3ICsxNDQ5LDcgQEAKIAkJUEFERFJfQiAobXNnX3dlaXJkX3NlZW4pLAogCS8qCiAJICogIFdlIGRvbm5vdCBoYW5kbGUgZXh0ZW5kZWQgbWVzc2FnZXMgZnJvbSBTQ1JJUFRTLgotCSAqICBSZWFkIHRoZSBhbW91bnQgb2YgZGF0YSBjb3JyZXBvbmRpbmcgdG8gdGhlIAorCSAqICBSZWFkIHRoZSBhbW91bnQgb2YgZGF0YSBjb3JyZXNwb25kaW5nIHRvIHRoZSAKIAkgKiAgbWVzc2FnZSBsZW5ndGggYW5kIGNhbGwgdGhlIEMgY29kZS4KIAkgKi8KIAlTQ1JfQ09QWSAoMSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2Z3Mi5oIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9mdzIuaAppbmRleCBhZTFmYjE3Li5jODdkNzI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2Z3Mi5oCisrKyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZncyLmgKQEAgLTEzMjYsNyArMTMyNiw3IEBACiAJCVBBRERSX0IgKG1zZ193ZWlyZF9zZWVuKSwKIAkvKgogCSAqICBXZSBkb25ub3QgaGFuZGxlIGV4dGVuZGVkIG1lc3NhZ2VzIGZyb20gU0NSSVBUUy4KLQkgKiAgUmVhZCB0aGUgYW1vdW50IG9mIGRhdGEgY29ycmVwb25kaW5nIHRvIHRoZSAKKwkgKiAgUmVhZCB0aGUgYW1vdW50IG9mIGRhdGEgY29ycmVzcG9uZGluZyB0byB0aGUgCiAJICogIG1lc3NhZ2UgbGVuZ3RoIGFuZCBjYWxsIHRoZSBDIGNvZGUuCiAJICovCiAJU0NSX1NUT1JFX1JFTCAoc2NyYXRjaGEsIDEpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9oaXBkLmMgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2hpcGQuYwppbmRleCAyYzNlODlkLi5kOTJmZTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2hpcGQuYworKysgYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2hpcGQuYwpAQCAtMjQ1Nyw3ICsyNDU3LDcgQEAKIAkJfQogCiAJCS8qCi0JCSAqICBUaGUgZGF0YSBpbiB0aGUgZG1hIGZpZm8gaGFzIG5vdCBiZWVuIHRyYW5zZmVyZWQgdG8KKwkJICogIFRoZSBkYXRhIGluIHRoZSBkbWEgZmlmbyBoYXMgbm90IGJlZW4gdHJhbnNmZXJyZWQgdG8KIAkJICogIHRoZSB0YXJnZXQgLT4gYWRkIHRoZSBhbW91bnQgdG8gdGhlIHJlc3QKIAkJICogIGFuZCBjbGVhciB0aGUgZGF0YS4KIAkJICogIENoZWNrIHRoZSBzc3RhdDIgcmVnaXN0ZXIgaW4gY2FzZSBvZiB3aWRlIHRyYW5zZmVyLgpAQCAtNTA5NCw3ICs1MDk0LDcgQEAKIH0KIAogLyoKLSAqICBMdW4gY29udHJvbCBibG9jayBkZWFsbG9jYXRpb24uIFJldHVybnMgdGhlIG51bWJlciBvZiB2YWxpZCByZW1haW5nIExDQnMKKyAqICBMdW4gY29udHJvbCBibG9jayBkZWFsbG9jYXRpb24uIFJldHVybnMgdGhlIG51bWJlciBvZiB2YWxpZCByZW1haW5pbmcgTENCcwogICogIGZvciB0aGUgdGFyZ2V0LgogICovCiBpbnQgc3ltX2ZyZWVfbGNiKHN0cnVjdCBzeW1faGNiICpucCwgdV9jaGFyIHRuLCB1X2NoYXIgbG4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX21hbGxvYy5jIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9tYWxsb2MuYwppbmRleCA4ODNjYWMxLi42ZjlhZjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX21hbGxvYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fbWFsbG9jLmMKQEAgLTUwLDcgKzUwLDcgQEAKICAqICBmcm9tIHRoZSBTQ1JJUFRTIGNvZGUuIEluIGFkZGl0aW9uLCBjYWNoZSBsaW5lIGFsaWdubWVudCAKICAqICBpcyBndWFyYW50ZWVkIGZvciBwb3dlciBvZiAyIGNhY2hlIGxpbmUgc2l6ZS4KICAqCi0gKiAgVGhpcyBhbGxvY2F0b3IgaGFzIGJlZW4gZGV2ZWxvcHBlZCBmb3IgdGhlIExpbnV4IHN5bTUzYzh4eCAgCisgKiAgVGhpcyBhbGxvY2F0b3IgaGFzIGJlZW4gZGV2ZWxvcGVkIGZvciB0aGUgTGludXggc3ltNTNjOHh4ICAKICAqICBkcml2ZXIsIHNpbmNlIHRoaXMgTy9TIGRvZXMgbm90IHByb3ZpZGUgbmF0dXJhbGx5IGFsaWduZWQgCiAgKiAgYWxsb2NhdGlvbnMuCiAgKiAgSXQgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YgYWxsb3dpbmcgdGhlIGRyaXZlciB0byB1c2UgcHJpdmF0ZSAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS93ZDMzYzkzLmMgYi9kcml2ZXJzL3Njc2kvd2QzM2M5My5jCmluZGV4IDVmNjk3ZTAuLjQ0NjhhZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS93ZDMzYzkzLmMKKysrIGIvZHJpdmVycy9zY3NpL3dkMzNjOTMuYwpAQCAtMTg0Myw3ICsxODQzLDcgQEAKICAqCiAgKiBUaGUgb3JpZ2luYWwgZHJpdmVyIHVzZWQgdG8gcmVseSBvbiBhIGZpeGVkIHN4X3RhYmxlLCBjb250YWluaW5nIHBlcmlvZHMKICAqIGZvciAob25seSkgdGhlIGxvd2VyIGxpbWl0cyBvZiB0aGUgcmVzcGVjdGl2ZSBpbnB1dC1jbG9jay1mcmVxdWVuY3kgcmFuZ2VzCi0gKiAoOC0xMC8xMi0xNS8xNi0yMCBNSHopLiBBbHRob3VnaCBpdCBzZWVtcywgdGhhdCBubyBwcm9ibGVtcyBvY3VycmVkIHdpdGgKKyAqICg4LTEwLzEyLTE1LzE2LTIwIE1IeikuIEFsdGhvdWdoIGl0IHNlZW1zLCB0aGF0IG5vIHByb2JsZW1zIG9jY3VycmVkIHdpdGgKICAqIHRoaXMgc2V0dGluZyBzbyBmYXIsIGl0IG1pZ2h0IGJlIGRlc2lyYWJsZSB0byBhZGp1c3QgdGhlIHRyYW5zZmVyIHBlcmlvZHMKICAqIGNsb3NlciB0byB0aGUgcmVhbGx5IGF0dGFjaGVkLCBwb3NzaWJseSAyNSUgaGlnaGVyLCBpbnB1dC1jbG9jaywgc2luY2UKICAqIC0gdGhlIHdkMzNjOTMgbWF5IHJlYWxseSB1c2UgYSBzaWduaWZpY2FudCBzaG9ydGVyIHBlcmlvZCwgdGhhbiBpdCBoYXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS93ZDcwMDAuYyBiL2RyaXZlcnMvc2NzaS93ZDcwMDAuYwppbmRleCBkYjQ1MWFlLi45ZWUwYWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvd2Q3MDAwLmMKKysrIGIvZHJpdmVycy9zY3NpL3dkNzAwMC5jCkBAIC04MzcsNyArODM3LDcgQEAKIAkJfQogCX0KIAotCS8qIFRha2UgdGhlIGxvY2ssIHRoZW4gY2hlY2sgd2UgZGlkbnQgZ2V0IGJlYXRlbiwgaWYgc28gdHJ5IGFnYWluICovCisJLyogVGFrZSB0aGUgbG9jaywgdGhlbiBjaGVjayB3ZSBkaWRuJ3QgZ2V0IGJlYXRlbiwgaWYgc28gdHJ5IGFnYWluICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNjYnBvb2xfbG9jaywgZmxhZ3MpOwogCWlmIChmcmVlc2NicyA8IG5lZWRlZCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2Jwb29sX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2ZpL3NmaV9jb3JlLmMgYi9kcml2ZXJzL3NmaS9zZmlfY29yZS5jCmluZGV4IDA0MTEzZTUuLjFlODI0ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2ZpL3NmaV9jb3JlLmMKKysrIGIvZHJpdmVycy9zZmkvc2ZpX2NvcmUuYwpAQCAtNTE1LDcgKzUxNSw3IEBACiB9CiAKIC8qCi0gKiBUaGUgcmVhc29uIHdlIHB1dCBpdCBoZXJlIGJlY2FzdWUgd2UgbmVlZCB3YWl0IHRpbGwgdGhlIC9zeXMvZmlybXdhcmUKKyAqIFRoZSByZWFzb24gd2UgcHV0IGl0IGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHdhaXQgdGlsbCB0aGUgL3N5cy9maXJtd2FyZQogICogaXMgc2V0dXAsIHRoZW4gb3VyIGludGVyZmFjZSBjYW4gYmUgcmVnaXN0ZXJlZCBpbiAvc3lzL2Zpcm13YXJlL3NmaQogICovCiBjb3JlX2luaXRjYWxsKHNmaV9zeXNmc19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYyBiL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYwppbmRleCA1YTRlMGFmLi4wOGRlNThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9hbWJhLXBsMDIyLmMKKysrIGIvZHJpdmVycy9zcGkvYW1iYS1wbDAyMi5jCkBAIC02NjEsNyArNjYxLDcgQEAKIHsKIAogCS8qCi0JICogVGhlIEZJRk8gZGVwdGggaXMgZGlmZmVyZW50IGluYmV0d2VlbiBwcmltZWNlbGwgdmFyaWFudHMuCisJICogVGhlIEZJRk8gZGVwdGggaXMgZGlmZmVyZW50IGJldHdlZW4gcHJpbWVjZWxsIHZhcmlhbnRzLgogCSAqIEkgYmVsaWV2ZSBmaWxsaW5nIGluIHRvbyBtdWNoIGluIHRoZSBGSUZPIG1pZ2h0IGNhdXNlCiAJICogZXJyb25zIGluIDhiaXQgd2lkZSB0cmFuc2ZlcnMgb24gQVJNIHZhcmlhbnRzIChqdXN0IDggd29yZHMKIAkgKiBGSUZPLCBtZWFucyBvbmx5IDh4OCA9IDY0IGJpdHMgaW4gRklGTykgYXQgbGVhc3QuCkBAIC03MjIsNyArNzIyLDcgQEAKIAkJICogVGhpcyBpbm5lciByZWFkZXIgdGFrZXMgY2FyZSBvZiB0aGluZ3MgYXBwZWFyaW5nIGluIHRoZSBSWAogCQkgKiBGSUZPIGFzIHdlJ3JlIHRyYW5zbWl0dGluZy4gVGhpcyB3aWxsIGhhcHBlbiBhIGxvdCBzaW5jZSB0aGUKIAkJICogY2xvY2sgc3RhcnRzIHJ1bm5pbmcgd2hlbiB5b3UgcHV0IHRoaW5ncyBpbnRvIHRoZSBUWCBGSUZPLAotCQkgKiBhbmQgdGhlbiB0aGluZ3MgYXJlIGNvbnRpbm91c2x5IGNsb2NrZWQgaW50byB0aGUgUlggRklGTy4KKwkJICogYW5kIHRoZW4gdGhpbmdzIGFyZSBjb250aW51b3VzbHkgY2xvY2tlZCBpbnRvIHRoZSBSWCBGSUZPLgogCQkgKi8KIAkJd2hpbGUgKChyZWFkdyhTU1BfU1IocGwwMjItPnZpcnRiYXNlKSkgJiBTU1BfU1JfTUFTS19STkUpCiAJCSAgICAgICAmJiAocGwwMjItPnJ4IDwgcGwwMjItPnJ4X2VuZCkpIHsKQEAgLTg0Miw3ICs4NDIsNyBAQAogCiAJdW5tYXBfZnJlZV9kbWFfc2NhdHRlcihwbDAyMik7CiAKLQkvKiBVcGRhdGUgdG90YWwgYnl0ZXMgdHJhbnNmZXJlZCAqLworCS8qIFVwZGF0ZSB0b3RhbCBieXRlcyB0cmFuc2ZlcnJlZCAqLwogCW1zZy0+YWN0dWFsX2xlbmd0aCArPSBwbDAyMi0+Y3VyX3RyYW5zZmVyLT5sZW47CiAJaWYgKHBsMDIyLT5jdXJfdHJhbnNmZXItPmNzX2NoYW5nZSkKIAkJcGwwMjItPmN1cl9jaGlwLT4KQEAgLTEyMjQsNyArMTIyNCw3IEBACiAJCQkJICJudW1iZXIgb2YgYnl0ZXMgb24gYSAxNmJpdCBidXM/KVxuIiwKIAkJCQkgKHUzMikgKHBsMDIyLT5yeCAtIHBsMDIyLT5yeF9lbmQpKTsKIAkJfQotCQkvKiBVcGRhdGUgdG90YWwgYnl0ZXMgdHJhbnNmZXJlZCAqLworCQkvKiBVcGRhdGUgdG90YWwgYnl0ZXMgdHJhbnNmZXJyZWQgKi8KIAkJbXNnLT5hY3R1YWxfbGVuZ3RoICs9IHBsMDIyLT5jdXJfdHJhbnNmZXItPmxlbjsKIAkJaWYgKHBsMDIyLT5jdXJfdHJhbnNmZXItPmNzX2NoYW5nZSkKIAkJCXBsMDIyLT5jdXJfY2hpcC0+CkBAIC0xNDE1LDExICsxNDE1LDExIEBACiAJCSAgICAgICBTU1BfQ1IxKHBsMDIyLT52aXJ0YmFzZSkpOwogCiAJCWRldl9kYmcoJnBsMDIyLT5hZGV2LT5kZXYsICJwb2xsaW5nIHRyYW5zZmVyIG9uZ29pbmcgLi4uXG4iKTsKLQkJLyogRklYTUU6IGluc2VydCBhIHRpbWVvdXQgc28gd2UgZG9uJ3QgaGFuZyBoZXJlIGluZGVmaW5hdGVseSAqLworCQkvKiBGSVhNRTogaW5zZXJ0IGEgdGltZW91dCBzbyB3ZSBkb24ndCBoYW5nIGhlcmUgaW5kZWZpbml0ZWx5ICovCiAJCXdoaWxlIChwbDAyMi0+dHggPCBwbDAyMi0+dHhfZW5kIHx8IHBsMDIyLT5yeCA8IHBsMDIyLT5yeF9lbmQpCiAJCQlyZWFkd3JpdGVyKHBsMDIyKTsKIAotCQkvKiBVcGRhdGUgdG90YWwgYnl0ZSB0cmFuc2ZlcmVkICovCisJCS8qIFVwZGF0ZSB0b3RhbCBieXRlIHRyYW5zZmVycmVkICovCiAJCW1lc3NhZ2UtPmFjdHVhbF9sZW5ndGggKz0gcGwwMjItPmN1cl90cmFuc2Zlci0+bGVuOwogCQlpZiAocGwwMjItPmN1cl90cmFuc2Zlci0+Y3NfY2hhbmdlKQogCQkJcGwwMjItPmN1cl9jaGlwLT5jc19jb250cm9sKFNTUF9DSElQX0RFU0VMRUNUKTsKQEAgLTE1NTUsNyArMTU1NSw3IEBACiAJICogQSB3YWl0X3F1ZXVlIG9uIHRoZSBwbDAyMi0+YnVzeSBjb3VsZCBiZSB1c2VkLCBidXQgdGhlbiB0aGUgY29tbW9uCiAJICogZXhlY3V0aW9uIHBhdGggKHB1bXBfbWVzc2FnZXMpIHdvdWxkIGJlIHJlcXVpcmVkIHRvIGNhbGwgd2FrZV91cCBvcgogCSAqIGZyaWVuZHMgb24gZXZlcnkgU1BJIG1lc3NhZ2UuIERvIHRoaXMgaW5zdGVhZCAqLwotCXdoaWxlICghbGlzdF9lbXB0eSgmcGwwMjItPnF1ZXVlKSAmJiBwbDAyMi0+YnVzeSAmJiBsaW1pdC0tKSB7CisJd2hpbGUgKCghbGlzdF9lbXB0eSgmcGwwMjItPnF1ZXVlKSB8fCBwbDAyMi0+YnVzeSkgJiYgbGltaXQtLSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbDAyMi0+cXVldWVfbG9jaywgZmxhZ3MpOwogCQltc2xlZXAoMTApOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGwwMjItPnF1ZXVlX2xvY2ssIGZsYWdzKTsKQEAgLTIxMjksNyArMjEyOSw3IEBACiAJCQkicHJvYmUgLSBwcm9ibGVtIHJlZ2lzdGVyaW5nIHNwaSBtYXN0ZXJcbiIpOwogCQlnb3RvIGVycl9zcGlfcmVnaXN0ZXI7CiAJfQotCWRldl9kYmcoZGV2LCAicHJvYmUgc3VjY2VkZWRcbiIpOworCWRldl9kYmcoZGV2LCAicHJvYmUgc3VjY2VlZGVkXG4iKTsKIAkvKgogCSAqIERpc2FibGUgdGhlIHNpbGljb24gYmxvY2sgcGNsayBhbmQgYW55IHZvbHRhZ2UgZG9tYWluIGFuZCBqdXN0CiAJICogcG93ZXIgaXQgdXAgYW5kIGNsb2NrIGl0IHdoZW4gaXQncyBuZWVkZWQKQEAgLTIxODQsNyArMjE4NCw3IEBACiAJc3BpX3VucmVnaXN0ZXJfbWFzdGVyKHBsMDIyLT5tYXN0ZXIpOwogCXNwaV9tYXN0ZXJfcHV0KHBsMDIyLT5tYXN0ZXIpOwogCWFtYmFfc2V0X2RydmRhdGEoYWRldiwgTlVMTCk7Ci0JZGV2X2RiZygmYWRldi0+ZGV2LCAicmVtb3ZlIHN1Y2NlZGVkXG4iKTsKKwlkZXZfZGJnKCZhZGV2LT5kZXYsICJyZW1vdmUgc3VjY2VlZGVkXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvYXUxNTUwX3NwaS5jIGIvZHJpdmVycy9zcGkvYXUxNTUwX3NwaS5jCmluZGV4IDNjOWFkZTYuLmI1MDU2M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL2F1MTU1MF9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9hdTE1NTBfc3BpLmMKQEAgLTQ4MCw3ICs0ODAsNyBAQAogCQlhdTF4eHhfZGJkbWFfc3RvcChody0+ZG1hX3J4X2NoKTsKIAkJYXUxeHh4X2RiZG1hX3N0b3AoaHctPmRtYV90eF9jaCk7CiAKLQkJLyogZ2V0IG51bWJlciBvZiB0cmFuc2ZlcmVkIGJ5dGVzICovCisJCS8qIGdldCBudW1iZXIgb2YgdHJhbnNmZXJyZWQgYnl0ZXMgKi8KIAkJaHctPnJ4X2NvdW50ID0gaHctPmxlbiAtIGF1MXh4eF9nZXRfZG1hX3Jlc2lkdWUoaHctPmRtYV9yeF9jaCk7CiAJCWh3LT50eF9jb3VudCA9IGh3LT5sZW4gLSBhdTF4eHhfZ2V0X2RtYV9yZXNpZHVlKGh3LT5kbWFfdHhfY2gpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9kd19zcGkuYyBiL2RyaXZlcnMvc3BpL2R3X3NwaS5jCmluZGV4IDlhNjE5NjQuLjg3MWUzMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL2R3X3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL2R3X3NwaS5jCkBAIC0zNDUsNyArMzQ1LDcgQEAKIAogdm9pZCBkd19zcGlfeGZlcl9kb25lKHN0cnVjdCBkd19zcGkgKmR3cykKIHsKLQkvKiBVcGRhdGUgdG90YWwgYnl0ZSB0cmFuc2ZlcmVkIHJldHVybiBjb3VudCBhY3R1YWwgYnl0ZXMgcmVhZCAqLworCS8qIFVwZGF0ZSB0b3RhbCBieXRlIHRyYW5zZmVycmVkIHJldHVybiBjb3VudCBhY3R1YWwgYnl0ZXMgcmVhZCAqLwogCWR3cy0+Y3VyX21zZy0+YWN0dWFsX2xlbmd0aCArPSBkd3MtPmxlbjsKIAogCS8qIE1vdmUgdG8gbmV4dCB0cmFuc2ZlciAqLwpAQCAtODIxLDcgKzgyMSw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZHdzLT5sb2NrLCBmbGFncyk7CiAJZHdzLT5ydW4gPSBRVUVVRV9TVE9QUEVEOwotCXdoaWxlICghbGlzdF9lbXB0eSgmZHdzLT5xdWV1ZSkgJiYgZHdzLT5idXN5ICYmIGxpbWl0LS0pIHsKKwl3aGlsZSAoKCFsaXN0X2VtcHR5KCZkd3MtPnF1ZXVlKSB8fCBkd3MtPmJ1c3kpICYmIGxpbWl0LS0pIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHdzLT5sb2NrLCBmbGFncyk7CiAJCW1zbGVlcCgxMCk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZkd3MtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2R3X3NwaS5oIGIvZHJpdmVycy9zcGkvZHdfc3BpLmgKaW5kZXggZmIwYmNlNS4uYjIzZTQ1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvZHdfc3BpLmgKKysrIGIvZHJpdmVycy9zcGkvZHdfc3BpLmgKQEAgLTQ2LDcgKzQ2LDcgQEAKICNkZWZpbmUgU1BJX0lOVF9SWEZJCQkJKDEgPDwgNCkKICNkZWZpbmUgU1BJX0lOVF9NU1RJCQkJKDEgPDwgNSkKIAotLyogVFggUlggaW50ZXJydXB0IGxldmVsIHRocmVzaGhvbGQsIG1heCBjYW4gYmUgMjU2ICovCisvKiBUWCBSWCBpbnRlcnJ1cHQgbGV2ZWwgdGhyZXNob2xkLCBtYXggY2FuIGJlIDI1NiAqLwogI2RlZmluZSBTUElfSU5UX1RIUkVTSE9MRAkJMzIKIAogZW51bSBkd19zc2lfdHlwZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9lcDkzeHhfc3BpLmMgYi9kcml2ZXJzL3NwaS9lcDkzeHhfc3BpLmMKaW5kZXggMGJhMzVkZi4uZDM1NzAwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvZXA5M3h4X3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL2VwOTN4eF9zcGkuYwpAQCAtNTEyLDcgKzUxMiw3IEBACiAgKgogICogVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgb25lIFNQSSB0cmFuc2ZlciBnaXZlbiBpbiBAdC4gRnVuY3Rpb24gd2FpdHMgdW50aWwKICAqIHRyYW5zZmVyIGlzIGNvbXBsZXRlIChtYXkgc2xlZXApIGFuZCB1cGRhdGVzIEBtc2ctPnN0YXR1cyBiYXNlZCBvbiB3aGV0aGVyCi0gKiB0cmFuc2ZlciB3YXMgc3VjY2VzZnVsbHkgcHJvY2Vzc2VkIG9yIG5vdC4KKyAqIHRyYW5zZmVyIHdhcyBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIG9yIG5vdC4KICAqLwogc3RhdGljIHZvaWQgZXA5M3h4X3NwaV9wcm9jZXNzX3RyYW5zZmVyKHN0cnVjdCBlcDkzeHhfc3BpICplc3BpLAogCQkJCQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYyBiL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYwppbmRleCBhNDI5YjAxLi5kYzI1YmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCkBAIC03MDAsNyArNzAwLDcgQEAKIAlpZiAoIXB4YTI1eF9zc3BfY29tcChkcnZfZGF0YSkpCiAJCXdyaXRlX1NTVE8oMCwgcmVnKTsKIAotCS8qIFVwZGF0ZSB0b3RhbCBieXRlIHRyYW5zZmVyZWQgcmV0dXJuIGNvdW50IGFjdHVhbCBieXRlcyByZWFkICovCisJLyogVXBkYXRlIHRvdGFsIGJ5dGUgdHJhbnNmZXJyZWQgcmV0dXJuIGNvdW50IGFjdHVhbCBieXRlcyByZWFkICovCiAJZHJ2X2RhdGEtPmN1cl9tc2ctPmFjdHVhbF9sZW5ndGggKz0gZHJ2X2RhdGEtPmxlbiAtCiAJCQkJKGRydl9kYXRhLT5yeF9lbmQgLSBkcnZfZGF0YS0+cngpOwogCkBAIC03NTksNyArNzU5LDcgQEAKIAogCQkvKgogCQkgKiBQWEEyNXhfU1NQIGhhcyBubyB0aW1lb3V0LCBzZXQgdXAgcnggdGhyZXNob3VsZCBmb3IgdGhlCi0JCSAqIHJlbWFpbmcgUlggYnl0ZXMuCisJCSAqIHJlbWFpbmluZyBSWCBieXRlcy4KIAkJICovCiAJCWlmIChweGEyNXhfc3NwX2NvbXAoZHJ2X2RhdGEpKSB7CiAKQEAgLTE0OTMsNyArMTQ5Myw3IEBACiAJICogZXhlY3V0aW9uIHBhdGggKHB1bXBfbWVzc2FnZXMpIHdvdWxkIGJlIHJlcXVpcmVkIHRvIGNhbGwgd2FrZV91cCBvcgogCSAqIGZyaWVuZHMgb24gZXZlcnkgU1BJIG1lc3NhZ2UuIERvIHRoaXMgaW5zdGVhZCAqLwogCWRydl9kYXRhLT5ydW4gPSBRVUVVRV9TVE9QUEVEOwotCXdoaWxlICghbGlzdF9lbXB0eSgmZHJ2X2RhdGEtPnF1ZXVlKSAmJiBkcnZfZGF0YS0+YnVzeSAmJiBsaW1pdC0tKSB7CisJd2hpbGUgKCghbGlzdF9lbXB0eSgmZHJ2X2RhdGEtPnF1ZXVlKSB8fCBkcnZfZGF0YS0+YnVzeSkgJiYgbGltaXQtLSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOwogCQltc2xlZXAoMTApOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2X2RhdGEtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS5jIGIvZHJpdmVycy9zcGkvc3BpLmMKaW5kZXggMzRiYjE3Zi4uODJiOWE0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLmMKQEAgLTk1Nyw3ICs5NTcsNyBAQAogICogZHJpdmVycyBtYXkgRE1BIGRpcmVjdGx5IGludG8gYW5kIG91dCBvZiB0aGUgbWVzc2FnZSBidWZmZXJzLgogICoKICAqIFRoaXMgY2FsbCBzaG91bGQgYmUgdXNlZCBieSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZQotICogU1BJIGJ1cy4gSXQgaGFzIHRvIGJlIHByZWNlZWRlZCBieSBhIHNwaV9idXNfbG9jayBjYWxsLiBUaGUgU1BJIGJ1cyBtdXN0CisgKiBTUEkgYnVzLiBJdCBoYXMgdG8gYmUgcHJlY2VkZWQgYnkgYSBzcGlfYnVzX2xvY2sgY2FsbC4gVGhlIFNQSSBidXMgbXVzdAogICogYmUgcmVsZWFzZWQgYnkgYSBzcGlfYnVzX3VubG9jayBjYWxsIHdoZW4gdGhlIGV4Y2x1c2l2ZSBhY2Nlc3MgaXMgb3Zlci4KICAqCiAgKiBJdCByZXR1cm5zIHplcm8gb24gc3VjY2VzcywgZWxzZSBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfYmZpbjV4eC5jIGIvZHJpdmVycy9zcGkvc3BpX2JmaW41eHguYwppbmRleCBhMjg0NjI0Li5mNzA2ZGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfYmZpbjV4eC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9iZmluNXh4LmMKQEAgLTkwNSw3ICs5MDUsNyBAQAogCQkJIklPIHdyaXRlIGVycm9yIVxuIik7CiAJCW1lc3NhZ2UtPnN0YXRlID0gRVJST1JfU1RBVEU7CiAJfSBlbHNlIHsKLQkJLyogVXBkYXRlIHRvdGFsIGJ5dGUgdHJhbnNmZXJlZCAqLworCQkvKiBVcGRhdGUgdG90YWwgYnl0ZSB0cmFuc2ZlcnJlZCAqLwogCQltZXNzYWdlLT5hY3R1YWxfbGVuZ3RoICs9IGRydl9kYXRhLT5sZW5faW5fYnl0ZXM7CiAJCS8qIE1vdmUgdG8gbmV4dCB0cmFuc2ZlciBvZiB0aGlzIG1zZyAqLwogCQltZXNzYWdlLT5zdGF0ZSA9IGJmaW5fc3BpX25leHRfdHJhbnNmZXIoZHJ2X2RhdGEpOwpAQCAtMTI4NCw3ICsxMjg0LDcgQEAKIAkgKiBmcmllbmRzIG9uIGV2ZXJ5IFNQSSBtZXNzYWdlLiBEbyB0aGlzIGluc3RlYWQKIAkgKi8KIAlkcnZfZGF0YS0+cnVubmluZyA9IGZhbHNlOwotCXdoaWxlICghbGlzdF9lbXB0eSgmZHJ2X2RhdGEtPnF1ZXVlKSAmJiBkcnZfZGF0YS0+YnVzeSAmJiBsaW1pdC0tKSB7CisJd2hpbGUgKCghbGlzdF9lbXB0eSgmZHJ2X2RhdGEtPnF1ZXVlKSB8fCBkcnZfZGF0YS0+YnVzeSkgJiYgbGltaXQtLSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcnZfZGF0YS0+bG9jaywgZmxhZ3MpOwogCQltc2xlZXAoMTApOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2X2RhdGEtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9mc2xfZXNwaS5jIGIvZHJpdmVycy9zcGkvc3BpX2ZzbF9lc3BpLmMKaW5kZXggOTAwZTkyMS4uNDk2Zjg5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX2ZzbF9lc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX2ZzbF9lc3BpLmMKQEAgLTQ3NCw3ICs0NzQsNyBAQAogCW1wYzh4eHhfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CiAJcmVnX2Jhc2UgPSBtcGM4eHh4X3NwaS0+cmVnX2Jhc2U7CiAKLQlod19tb2RlID0gY3MtPmh3X21vZGU7IC8qIFNhdmUgb3JnaW5hbCBzZXR0aW5ncyAqLworCWh3X21vZGUgPSBjcy0+aHdfbW9kZTsgLyogU2F2ZSBvcmlnaW5hbCBzZXR0aW5ncyAqLwogCWNzLT5od19tb2RlID0gbXBjOHh4eF9zcGlfcmVhZF9yZWcoCiAJCQkmcmVnX2Jhc2UtPmNzbW9kZVtzcGktPmNoaXBfc2VsZWN0XSk7CiAJLyogbWFzayBvdXQgYml0cyB3ZSBhcmUgZ29pbmcgdG8gc2V0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9wY2kuYyBiL2RyaXZlcnMvc3NiL3BjaS5jCmluZGV4IGE0NjdiMjAuLjZmMzQ5NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3BjaS5jCisrKyBiL2RyaXZlcnMvc3NiL3BjaS5jCkBAIC02NzAsNyArNjcwLDcgQEAKIAkJc3NiX3ByaW50ayhLRVJOX0VSUiBQRlggIk5vIFNQUk9NIGF2YWlsYWJsZSFcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JaWYgKGJ1cy0+Y2hpcGNvLmRldikgewkvKiBjYW4gYmUgdW5hdmFpbGlibGUhICovCisJaWYgKGJ1cy0+Y2hpcGNvLmRldikgewkvKiBjYW4gYmUgdW5hdmFpbGFibGUhICovCiAJCS8qCiAJCSAqIGdldCBTUFJPTSBvZmZzZXQ6IFNTQl9TUFJPTV9CQVNFMSBleGNlcHQgZm9yCiAJCSAqIGNoaXBjb21tb24gcmV2ID49IDMxIG9yIGNoaXAgSUQgaXMgMHg0MzEyIGFuZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2Ivc3Byb20uYyBiL2RyaXZlcnMvc3NiL3Nwcm9tLmMKaW5kZXggNGY3Y2M4ZC4uNWYzNGQ3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2Ivc3Byb20uYworKysgYi9kcml2ZXJzL3NzYi9zcHJvbS5jCkBAIC0xODUsNyArMTg1LDcgQEAKIAkvKiB0aGlzIHJvdXRpbmUgZGlmZmVycyBmcm9tIHNwZWNzIGFzIHdlIGRvIG5vdCBhY2Nlc3MgU1BST00gZGlyZWN0bHkKIAkgICBvbiBQQ01DSUEgKi8KIAlpZiAoYnVzLT5idXN0eXBlID09IFNTQl9CVVNUWVBFX1BDSSAmJgotCSAgICBidXMtPmNoaXBjby5kZXYgJiYJLyogY2FuIGJlIHVuYXZhaWxpYmxlISAqLworCSAgICBidXMtPmNoaXBjby5kZXYgJiYJLyogY2FuIGJlIHVuYXZhaWxhYmxlISAqLwogCSAgICBidXMtPmNoaXBjby5kZXYtPmlkLnJldmlzaW9uID49IDMxKQogCQlyZXR1cm4gYnVzLT5jaGlwY28uY2FwYWJpbGl0aWVzICYgU1NCX0NISVBDT19DQVBfU1BST007CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKaW5kZXggMThiNDNmYy4uZTM3ODZmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKQEAgLTExNyw4ICsxMTcsNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy92bWUvS2NvbmZpZyIKIAotc291cmNlICJkcml2ZXJzL3N0YWdpbmcvbWVtcmFyL0tjb25maWciCi0KIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3NlcC9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9paW8vS2NvbmZpZyIKQEAgLTEzMyw4ICsxMzEsNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyNS9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9zYW1zdW5nLWxhcHRvcC9LY29uZmlnIgotCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9zbTd4eC9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9kdDMxNTV2NGwvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQppbmRleCBjZmQxM2NkLi5mMGQ1YzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCkBAIC00MCw3ICs0MCw2IEBACiBvYmotJChDT05GSUdfVlQ2NjU2KQkJKz0gdnQ2NjU2Lwogb2JqLSQoQ09ORklHX0hZUEVSVikJCSs9IGh2Lwogb2JqLSQoQ09ORklHX1ZNRV9CVVMpCQkrPSB2bWUvCi1vYmotJChDT05GSUdfTVJTVF9SQVJfSEFORExFUikJKz0gbWVtcmFyLwogb2JqLSQoQ09ORklHX0RYX1NFUCkgICAgICAgICAgICArPSBzZXAvCiBvYmotJChDT05GSUdfSUlPKQkJKz0gaWlvLwogb2JqLSQoQ09ORklHX0NTNTUzNV9HUElPKQkrPSBjczU1MzVfZ3Bpby8KQEAgLTQ5LDcgKzQ4LDYgQEAKIG9iai0kKENPTkZJR19aQ0FDSEUpCQkrPSB6Y2FjaGUvCiBvYmotJChDT05GSUdfV0xBR1M0OV9IMikJKz0gd2xhZ3M0OV9oMi8KIG9iai0kKENPTkZJR19XTEFHUzQ5X0gyNSkJKz0gd2xhZ3M0OV9oMjUvCi1vYmotJChDT05GSUdfU0FNU1VOR19MQVBUT1ApCSs9IHNhbXN1bmctbGFwdG9wLwogb2JqLSQoQ09ORklHX0ZCX1NNN1hYKQkJKz0gc203eHgvCiBvYmotJChDT05GSUdfVklERU9fRFQzMTU1KQkrPSBkdDMxNTV2NGwvCiBvYmotJChDT05GSUdfQ1JZU1RBTEhEKQkJKz0gY3J5c3RhbGhkLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9odGMyL0FSNjAwMC9hcjZrX2dtYm94X2hjaXVhcnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaHRjMi9BUjYwMDAvYXI2a19nbWJveF9oY2l1YXJ0LmMKaW5kZXggYzY0ODhlMC4uNDEyMjNmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9odGMyL0FSNjAwMC9hcjZrX2dtYm94X2hjaXVhcnQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2h0YzIvQVI2MDAwL2FyNmtfZ21ib3hfaGNpdWFydC5jCkBAIC0yMzcsNyArMjM3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBwUHJvdC0+Q3JlZGl0c0N1cnJlbnRTZWVrKSk7CiAgICAgICAgIAogICAgICAgICBpZiAocFByb3QtPkNyZWRpdHNBdmFpbGFibGUgPj0gcFByb3QtPkNyZWRpdHNDdXJyZW50U2VlaykgewotICAgICAgICAgICAgICAgIC8qIHdlIGhhdmUgZW5vdWdoIGNyZWRpdHMgdG8gZnVsbGZpbGwgYXQgbGVhc3QgMSBwYWNrZXQgd2FpdGluZyBpbiB0aGUgcXVldWUgKi8KKyAgICAgICAgICAgICAgICAvKiB3ZSBoYXZlIGVub3VnaCBjcmVkaXRzIHRvIGZ1bGZpbGwgYXQgbGVhc3QgMSBwYWNrZXQgd2FpdGluZyBpbiB0aGUgcXVldWUgKi8KICAgICAgICAgICAgIHBQcm90LT5DcmVkaXRzQ3VycmVudFNlZWsgPSAwOwogICAgICAgICAgICAgcFByb3QtPlNlbmRTdGF0ZUZsYWdzICY9IH5IQ0lfU0VORF9XQUlUX0NSRURJVFM7ICAKICAgICAgICAgICAgIGRvUGVuZGluZ1NlbmRzID0gdHJ1ZTsKQEAgLTI4NSw3ICsyODUsNyBAQAogewogICAgIHN0cnVjdCBnbWJveF9wcm90b19oY2lfdWFydCAgKnBQcm90ID0gKHN0cnVjdCBnbWJveF9wcm90b19oY2lfdWFydCAqKXBDb250ZXh0OyAKICAgICAKLSAgICAgICAgLyogdGFyZ2V0IGFzc2VydGlvbiBvY2N1cmVkICovICAgICAgICAgICAKKyAgICAgICAgLyogdGFyZ2V0IGFzc2VydGlvbiBvY2N1cnJlZCAqLyAgICAgICAgICAgCiAgICAgTm90aWZ5VHJhbnNwb3J0RmFpbHVyZShwUHJvdCwgU3RhdHVzKTsgIAogfQogCkBAIC01MDcsNyArNTA3LDcgQEAKICAgICAgICAgCiAgICAgfSB3aGlsZSAoZmFsc2UpOwogICAgICAgICAKLSAgICAgICAgLyogY2hlY2sgaWYgd2UgbmVlZCB0byBkaXNhYmxlIHRoZSByZWNpZXZlciAqLworICAgICAgICAvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIGRpc2FibGUgdGhlIHJlY2VpdmVyICovCiAgICAgaWYgKHN0YXR1cyB8fCBibG9ja1JlY3YpIHsKICAgICAgICAgRGV2R01ib3hJUlFBY3Rpb24ocFByb3QtPnBEZXYsIEdNQk9YX1JFQ1ZfSVJRX0RJU0FCTEUsIFBST0NfSU9fU1lOQyk7IAogICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9hZ2dyX3JlY3ZfYXBpLmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvYWdncl9yZWN2X2FwaS5oCmluZGV4IDY3YTA1ODQuLjVlYWQ1OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9hZ2dyX3JlY3ZfYXBpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2FnZ3JfcmVjdl9hcGkuaApAQCAtNzIsNyArNzIsNyBAQAogICogVGhpcyBldmVudCBpcyB0byBpbml0aWF0ZS9tb2RpZnkgdGhlIHJlY2VpdmUgc2lkZSB3aW5kb3cuCiAgKiBUYXJnZXQgd2lsbCBzZW5kIFdNSV9BRERCQV9SRVFfRVZFTlRJRCBldmVudCB0byBob3N0IC0gdG8gc2V0dXAgCiAgKiByZWN2IHJlLW9yZGVyaW5nIHF1ZXVlcy4gVGFyZ2V0IHdpbGwgbmVnb3RpYXRlIEFEREJBIHdpdGggcGVlciwgCi0gKiBhbmQgaW5kaWNhdGUgdmlhIHRoaXMgZXZlbnQgYWZ0ZXIgc3VjY2VzZnVsbHkgY29tcGxldGluZyB0aGUgCisgKiBhbmQgaW5kaWNhdGUgdmlhIHRoaXMgZXZlbnQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRpbmcgdGhlIAogICogbmVnb3RpYXRpb24uIFRoaXMgaGFwcGVucyBpbiB0d28gc2l0dWF0aW9uczoKICAqICAxLiBJbml0aWFsIHNldHVwIG9mIGFnZ3JlZ2F0aW9uCiAgKiAgMi4gUmVuZWdvdGlhdGlvbiBvZiBjdXJyZW50IHJlY3Ygd2luZG93LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9hX2hjaS5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9hX2hjaS5oCmluZGV4IDA4Y2IwMTMuLjM3OWQ2NTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL2FfaGNpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9hX2hjaS5oCkBAIC0xMjQsNyArMTI0LDcgQEAKICNkZWZpbmUgUEFMX05VTV9DT01QTF9EQVRBX0JMT0NLX0VWRU5UICAgICAgICAgICAgICAweDQ4CiAjZGVmaW5lIFBBTF9TSE9SVF9SQU5HRV9NT0RFX0NIQU5HRV9DT01QTF9FVkVOVCAgICAgMHg0QwogI2RlZmluZSBQQUxfQU1QX1NUQVRVU19DSEFOR0VfRVZFTlQgICAgICAgICAgICAgICAgIDB4NEQKLS8qPT09PT09PT0gRW5kIG9mIFBBTCBldmVudHMgZGVmaW5pdG9uID09PT09PT09PT09PT09PT09Ki8KKy8qPT09PT09PT0gRW5kIG9mIFBBTCBldmVudHMgZGVmaW5pdGlvbiA9PT09PT09PT09PT09PT09PSovCiAKIAogLyo9PT09PT09PSBUaW1lb3V0cyAobm90IHBhcnQgb2YgSENJIGNtZCwgYnV0IGlucHV0IHRvIFBBTCBlbmdpbmUpID09PT09PT09PSovCkBAIC00MzAsNyArNDMwLDcgQEAKICAgICB1OCBod19lcnJfY29kZTsKIH0gUE9TVFBBQ0sgSENJX0VWRU5UX0hXX0VSUjsKIAotLyogRmx1c2ggb2NjdXJlZCBldmVudCAqLworLyogRmx1c2ggb2NjdXJyZWQgZXZlbnQgKi8KIC8qIFFvcyBWaW9sYXRpb24gZXZlbnQgKi8KIHR5cGVkZWYgc3RydWN0ICBoY2lfZXZlbnRfaGFuZGxlX3QgewogICAgIHU4IGV2ZW50X2NvZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL2RiZ2xvZy5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9kYmdsb2cuaAppbmRleCAzYTNkMDBkLi5iN2ExMjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL2RiZ2xvZy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vZGJnbG9nLmgKQEAgLTQ0LDcgKzQ0LDcgQEAKICNkZWZpbmUgREJHTE9HX01PRFVMRUlEX05VTV9NQVggICAgICAgICAgMTYgLyogVXBwZXIgbGltaXQgaXMgd2lkdGggb2YgbWFzayAqLwogCiAvKgotICogUGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBkZWZpbml0aW9uIG9mIGFueSBuZXcgbW9kdWxlIGludHJkdWNlZCBpcyBjYXB0dXJlZAorICogUGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBkZWZpbml0aW9uIG9mIGFueSBuZXcgbW9kdWxlIGludHJvZHVjZWQgaXMgY2FwdHVyZWQKICAqIGJldHdlZW4gdGhlIERCR0xPR19NT0RVTEVJRF9TVEFSVCBhbmQgREJHTE9HX01PRFVMRUlEX0VORCBkZWZpbmVzLiBUaGUgCiAgKiBzdHJ1Y3R1cmUgaXMgcmVxdWlyZWQgZm9yIHRoZSBwYXJzZXIgdG8gY29ycmVjdGx5IHBpY2sgdXAgdGhlIHZhbHVlcyBmb3IKICAqIGRpZmZlcmVudCBtb2R1bGVzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9lcHBpbmdfdGVzdC5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9lcHBpbmdfdGVzdC5oCmluZGV4IDVjNDBkOGEuLjcwMjdmYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vZXBwaW5nX3Rlc3QuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL2VwcGluZ190ZXN0LmgKQEAgLTkyLDcgKzkyLDcgQEAKICNkZWZpbmUgRVBQSU5HX0NNRF9SRVNFVF9SRUNWX0NOVCAgICAgICAyICAgLyogcmVzZXQgcmVjdiBjb3VudCAqLwogI2RlZmluZSBFUFBJTkdfQ01EX0NBUFRVUkVfUkVDVl9DTlQgICAgIDMgICAvKiBmZXRjaCByZWN2IGNvdW50LCA0LWJ5dGUgY291bnQgcmV0dXJuZWQgaW4gQ21kQnVmZmVyX3QgKi8KICNkZWZpbmUgRVBQSU5HX0NNRF9OT19FQ0hPICAgICAgICAgICAgICA0ICAgLyogbm9uLWVjaG8gcGFja2V0IHRlc3QgKHR4LW9ubHkpICovCi0jZGVmaW5lIEVQUElOR19DTURfQ09OVF9SWF9TVEFSVCAgICAgICAgNSAgIC8qIGNvbnRpbm91cyBSWCBwYWNrZXRzLCBwYXJhbWV0ZXJzIGFyZSBpbiBDbWRCdWZmZXJfaCAqLworI2RlZmluZSBFUFBJTkdfQ01EX0NPTlRfUlhfU1RBUlQgICAgICAgIDUgICAvKiBjb250aW51b3VzIFJYIHBhY2tldHMsIHBhcmFtZXRlcnMgYXJlIGluIENtZEJ1ZmZlcl9oICovCiAjZGVmaW5lIEVQUElOR19DTURfQ09OVF9SWF9TVE9QICAgICAgICAgNiAgIC8qIHN0b3AgY29udGludW91cyBSWCBwYWNrZXQgdHJhbnNtaXNzaW9uICovCiAKICAgICAvKiB0ZXN0IGNvbW1hbmQgcGFyYW1ldGVycyBtYXkgYmUgbm8gbW9yZSB0aGFuIDggYnl0ZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vaW5pX2RzZXQuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vaW5pX2RzZXQuaAppbmRleCA4YmZjNzU5Li5hOWUwNWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL2luaV9kc2V0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi9pbmlfZHNldC5oCkBAIC0zMSw3ICszMSw3IEBACiAgKi8KIHR5cGVkZWYgZW51bSB7CiAjaWYgZGVmaW5lZChBUjYwMDJfUkVWNCkgfHwgZGVmaW5lZChBUjYwMDMpCi0vKiBBZGQgdGhlc2UgZGVmaW5pdGlvbnMgZm9yIGNvbXBhdGFiaWxpdHkgICovCisvKiBBZGQgdGhlc2UgZGVmaW5pdGlvbnMgZm9yIGNvbXBhdGliaWxpdHkgICovCiAjZGVmaW5lIFdIQUxfSU5JX0RBVEFfSURfQkJfUkZHQUlOX0xOQTEgV0hBTF9JTklfREFUQV9JRF9CQl9SRkdBSU4KICNkZWZpbmUgV0hBTF9JTklfREFUQV9JRF9CQl9SRkdBSU5fTE5BMiBXSEFMX0lOSV9EQVRBX0lEX0JCX1JGR0FJTgogICAgIFdIQUxfSU5JX0RBVEFfSURfTlVMTCAgICAgICAgICAgICAgID0wLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi90ZXN0Y21kLmggYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL3Rlc3RjbWQuaAppbmRleCA5Y2ExZjJhLi43ZDk0YWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL3Rlc3RjbWQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL3Rlc3RjbWQuaApAQCAtNDMsOCArNDMsOCBAQAogICAgIFBOMTVfUEFUVEVSTgogfVRYX0RBVEFfUEFUVEVSTjsKIAotLyogQ29udGlub3VzIHR4Ci0gICBtb2RlIDogVENNRF9DT05UX1RYX09GRiAtIERpc2FibGluZyBjb250aW5vdXMgdHgKKy8qIENvbnRpbnVvdXMgdHgKKyAgIG1vZGUgOiBUQ01EX0NPTlRfVFhfT0ZGIC0gRGlzYWJsaW5nIGNvbnRpbnVvdXMgdHgKICAgICAgICAgICBUQ01EX0NPTlRfVFhfU0lORSAtIEVuYWJsZSBjb250aW51b3VzIHVubW9kdWxhdGVkIHR4CiAgICAgICAgICAgVENNRF9DT05UX1RYX0ZSQU1FLSBFbmFibGUgY29udGludW91cyBtb2R1bGF0ZWQgdHgKICAgIGZyZXEgOiBDaGFubmVsIGZyZXEgaW4gTWh6LiAoZS5nIDI0MTIgZm9yIGNoYW5uZWwgMSBpbiAxMSBnKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi93bWkuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vd21pLmgKaW5kZXggYzY0NWFmMy4uNGU2MzQzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi93bWkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvY29tbW9uL3dtaS5oCkBAIC0xNTY4LDggKzE1NjgsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggdG8gcHMtcG9sbCBtb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9IDMgKi8KIAotCXUzMiBzY29Db250U3RvbXBNYXg7ICAgLyogbWF4IG51bWJlciBvZiBjb250aW5vdXMgc3RvbXAgYWxsb3dlZCBpbiBvcHQgbW9kZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXhjZWRkZWQgc3dpdGNoIHRvIHBzcG9sbCBtb2RlCisJdTMyIHNjb0NvbnRTdG9tcE1heDsgICAvKiBtYXggbnVtYmVyIG9mIGNvbnRpbnVvdXMgc3RvbXAgYWxsb3dlZCBpbiBvcHQgbW9kZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXhjZWVkZWQgc3dpdGNoIHRvIHBzcG9sbCBtb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ID0gMyAqLwogCiAJdTMyIHNjb01pbmxvd1JhdGVNYnBzOyAvKiBMb3cgcmF0ZSB0aHJlc2hvbGQgKi8KQEAgLTIwODQsNyArMjA4NCw3IEBACiAvKgogICogQlNTIElORk8gSERSIHZlcnNpb24gMi4wCiAgKiBXaXRoIDYgYnl0ZXMgSFRDIGhlYWRlciBhbmQgNiBieXRlcyBvZiBXTUkgaGVhZGVyCi0gKiBXTUlfQlNTX0lORk9fSERSIGNhbm5vdCBiZSBhY2NvbW9kYXRlZCBpbiB0aGUgcmVtb3ZlZCA4MDIuMTEgbWFuYWdlbWVudAorICogV01JX0JTU19JTkZPX0hEUiBjYW5ub3QgYmUgYWNjb21tb2RhdGVkIGluIHRoZSByZW1vdmVkIDgwMi4xMSBtYW5hZ2VtZW50CiAgKiBoZWFkZXIgc3BhY2UuCiAgKiAtIFJlZHVjZSB0aGUgaWVNYXNrIHRvIDIgYnl0ZXMgYXMgb25seSB0d28gYml0IGZsYWdzIGFyZSB1c2VkCiAgKiAtIFJlbW92ZSByc3NpIGFuZCBjb21wdXRlIGl0IG9uIHRoZSBob3N0LiByc3NpID0gc25yIC0gOTUKQEAgLTI5MTEsNyArMjkxMSw3IEBACiAgICAgdTggcGt0SUQ7IC8qIHBhY2tldCBJRCB0byBpZGVudGlmeSBwYXJlbnQgcGFja2V0ICovCiAgICAgdTggcmF0ZUlkeDsgLyogcmF0ZSBpbmRleCBvbiBzdWNjZXNzZnVsIHRyYW5zbWlzc2lvbiAqLwogICAgIHU4IGFja0ZhaWx1cmVzOyAvKiBudW1iZXIgb2YgQUNLIGZhaWx1cmVzIGluIHR4IGF0dGVtcHQgKi8KLSNpZiAwIC8qIG9wdGlvbmFsIHBhcmFtcyBjdXJyZW50bHkgb21taXR0ZWQuICovCisjaWYgMCAvKiBvcHRpb25hbCBwYXJhbXMgY3VycmVudGx5IG9taXR0ZWQuICovCiAgICAgdTMyIHF1ZXVlRGVsYXk7IC8vIHVzZWMgZGVsYXkgbWVhc3VyZWQgVHggU3RhcnQgdGltZSAtIGhvc3QgZGVsaXZlcnkgdGltZQogICAgIHUzMiBtZWRpYURlbGF5OyAvLyB1c2VjIGRlbGF5IG1lYXN1cmVkIEFDSyByeCB0aW1lIC0gaG9zdCBkZWxpdmVyeSB0aW1lCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9jb21tb24vd21peC5oIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi93bWl4LmgKaW5kZXggNWViYjgyOC4uMzZhY2JhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi93bWl4LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2NvbW1vbi93bWl4LmgKQEAgLTE5MSw3ICsxOTEsNyBAQAogfSBQT1NUUEFDSyBXTUlYX0dQSU9fSU5UUl9BQ0tfQ01EOwogCiAvKgotICogVGFyZ2V0IGluZm9ybXMgSG9zdCBvZiBHUElPIGludGVycnVwdHMgdGhhdCBoYXZlIG9jdXJyZWQgc2luY2UgdGhlCisgKiBUYXJnZXQgaW5mb3JtcyBIb3N0IG9mIEdQSU8gaW50ZXJydXB0cyB0aGF0IGhhdmUgb2NjdXJyZWQgc2luY2UgdGhlCiAgKiBsYXN0IFdNSVhfR0lQT19JTlRSX0FDS19DTUQgd2FzIHJlY2VpdmVkLiAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiAtLQogICogdGhlIGN1cnJlbnQgR1BJTyBpbnB1dCB2YWx1ZXMgaXMgcHJvdmlkZWQgLS0gaW4gb3JkZXIgdG8gc3VwcG9ydAogICogdXNlIG9mIGEgR1BJTyBpbnRlcnJ1cHQgYXMgYSBEYXRhIFZhbGlkIHNpZ25hbCBmb3Igb3RoZXIgR1BJTyBwaW5zLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2h0Y19hcGkuaCBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvaW5jbHVkZS9odGNfYXBpLmgKaW5kZXggMWJjMjQ4OC4uNGZiNzY3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9pbmNsdWRlL2h0Y19hcGkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL2luY2x1ZGUvaHRjX2FwaS5oCkBAIC0yMDksNyArMjA5LDcgQEAKIHR5cGVkZWYgZW51bSBfSFRDX0NSRURJVF9ESVNUX1JFQVNPTiB7CiAgICAgSFRDX0NSRURJVF9ESVNUX1NFTkRfQ09NUExFVEUgPSAwLCAgICAgLyogY3JlZGl0cyBhdmFpbGFibGUgYXMgYSByZXN1bHQgb2YgY29tcGxldGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZCBvcGVyYXRpb25zIChNQU5EQVRPUlkpIHJlc3VsdGluZyBpbiBjcmVkaXQgcmVwb3J0cyAqLwotICAgIEhUQ19DUkVESVRfRElTVF9BQ1RJVklUWV9DSEFOR0UgPSAxLCAgIC8qIGEgY2hhbmdlIGluIGVuZHBvaW50IGFjdGl2aXR5IG9jY3VyZWQgKE9QVElPTkFMKSAqLworICAgIEhUQ19DUkVESVRfRElTVF9BQ1RJVklUWV9DSEFOR0UgPSAxLCAgIC8qIGEgY2hhbmdlIGluIGVuZHBvaW50IGFjdGl2aXR5IG9jY3VycmVkIChPUFRJT05BTCkgKi8KICAgICBIVENfQ1JFRElUX0RJU1RfU0VFS19DUkVESVRTLCAgICAgICAgICAvKiBhbiBlbmRwb2ludCBuZWVkcyB0byAic2VlayIgY3JlZGl0cyAoT1BUSU9OQUwpICovCiAgICAgSFRDX0RVTVBfQ1JFRElUX1NUQVRFICAgICAgICAgICAgICAgICAgLyogZm9yIGRlYnVnZ2luZywgZHVtcCBhbnkgc3RhdGUgaW5mb3JtYXRpb24gdGhhdCBpcyBrZXB0IGJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRpc3RyaWJ1dGlvbiBmdW5jdGlvbiAqLwpAQCAtMjUzLDcgKzI1Myw3IEBACiAgICAgdTMyIFJ4UGFja2V0c0J1bmRsZWQ7ICAgICAgIC8qIGNvdW50IG9mIHJlY3YgcGFja2V0cyByZWNlaXZlZCBpbiBhIGJ1bmRsZSAqLwogICAgIHUzMiBSeEJ1bmRsZUxvb2tBaGVhZHM7ICAgICAvKiBjb3VudCBvZiBudW1iZXIgb2YgYnVuZGxlZCBsb29rYWhlYWRzICovCiAgICAgdTMyIFJ4QnVuZGxlSW5kRnJvbUhkcjsgICAgIC8qIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgYnVuZGxlIGluZGljYXRpb25zIGZyb20gdGhlIEhUQyBoZWFkZXIgKi8KLSAgICB1MzIgUnhBbGxvY1RocmVzaEhpdDsgICAgICAgLyogY291bnQgb2YgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgcmVjdiBhbGxvY2F0aW9uIHRocmVzaGhvbGQgd2FzIGhpdCAqLworICAgIHUzMiBSeEFsbG9jVGhyZXNoSGl0OyAgICAgICAvKiBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSByZWN2IGFsbG9jYXRpb24gdGhyZXNob2xkIHdhcyBoaXQgKi8KICAgICB1MzIgUnhBbGxvY1RocmVzaEJ5dGVzOyAgICAgLyogdG90YWwgbnVtYmVyIG9mIGJ5dGVzICovCiB9OwogCkBAIC0zOTEsNyArMzkxLDcgQEAKICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysqLwogdm9pZCAgICAgICAgSFRDU3RvcChIVENfSEFORExFIEhUQ0hhbmRsZSk7CiAvKisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCi0gIEBkZXNjOiBEZXN0b3J5IEhUQyBzZXJ2aWNlCisgIEBkZXNjOiBEZXN0cm95IEhUQyBzZXJ2aWNlCiAgIEBmdW5jdGlvbiBuYW1lOiBIVENEZXN0cm95CiAgIEBpbnB1dDogSFRDSGFuZGxlIAogICBAb3V0cHV0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9taXNjZHJ2L2NyZWRpdF9kaXN0LmMgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL21pc2NkcnYvY3JlZGl0X2Rpc3QuYwppbmRleCBhZTU0ZTFmLi4zM2ZhMDIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL21pc2NkcnYvY3JlZGl0X2Rpc3QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL21pc2NkcnYvY3JlZGl0X2Rpc3QuYwpAQCAtMzQxLDcgKzM0MSw3IEBACiAgICAgICAgIGNyZWRpdHMgPSBtaW4ocENyZWRJbmZvLT5DdXJyZW50RnJlZUNyZWRpdHMscEVQRGlzdC0+VHhDcmVkaXRzU2Vlayk7CiAKICAgICAgICAgaWYgKGNyZWRpdHMgPj0gcEVQRGlzdC0+VHhDcmVkaXRzU2VlaykgewotICAgICAgICAgICAgICAgIC8qIHdlIGZvdW5kIHNvbWUgdG8gZnVsbGZpbGwgdGhlIHNlZWsgcmVxdWVzdCAqLworICAgICAgICAgICAgICAgIC8qIHdlIGZvdW5kIHNvbWUgdG8gZnVsZmlsbCB0aGUgc2VlayByZXF1ZXN0ICovCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0zNjQsOCArMzY0LDggQEAKIAogICAgICAgICAgICAgaWYgKChwQ3VyRXBEaXN0LT5UeENyZWRpdHNBc3NpZ25lZCAtIG5lZWQpID49IHBDdXJFcERpc3QtPlR4Q3JlZGl0c01pbikgewogICAgICAgICAgICAgICAgICAgICAvKiB0aGUgY3VycmVudCBvbmUgaGFzIGJlZW4gYWxsb2NhdGVkIG1vcmUgdGhhbiBpdCdzIG1pbmltdW0gYW5kIGl0Ci0gICAgICAgICAgICAgICAgICAgICAqIGhhcyBlbm91Z2ggY3JlZGl0cyBhc3NpZ25lZCBhYm92ZSBpdCdzIG1pbmltdW0gdG8gZnVsbGZpbGwgb3VyIG5lZWQKLSAgICAgICAgICAgICAgICAgICAgICogdHJ5IHRvIHRha2UgYXdheSBqdXN0IGVub3VnaCB0byBmdWxsZmlsbCBvdXIgbmVlZCAqLworICAgICAgICAgICAgICAgICAgICAgKiBoYXMgZW5vdWdoIGNyZWRpdHMgYXNzaWduZWQgYWJvdmUgaXQncyBtaW5pbXVtIHRvIGZ1bGZpbGwgb3VyIG5lZWQKKyAgICAgICAgICAgICAgICAgICAgICogdHJ5IHRvIHRha2UgYXdheSBqdXN0IGVub3VnaCB0byBmdWxmaWxsIG91ciBuZWVkICovCiAgICAgICAgICAgICAgICAgUmVkdWNlQ3JlZGl0cyhwQ3JlZEluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQ3VyRXBEaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEN1ckVwRGlzdC0+VHhDcmVkaXRzQXNzaWduZWQgLSBuZWVkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvYXI2MDAwX2FuZHJvaWQuYyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvYXI2MDAwX2FuZHJvaWQuYwppbmRleCBjOTZmNmU5Li40YWE3NWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2FyNjAwMF9hbmRyb2lkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9hcjYwMDBfYW5kcm9pZC5jCkBAIC0zNzIsNyArMzcyLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAobmVlZFdha2UpIHsKLSAgICAgICAgICAgIC8qIGtlZXAgaG9zdCB3YWtlIHVwIGlmIHRoZXJlIGlzIGFueSBldmVudCBhbmQgcGFja2F0ZSBjb21taW5nIGluKi8KKyAgICAgICAgICAgIC8qIGtlZXAgaG9zdCB3YWtlIHVwIGlmIHRoZXJlIGlzIGFueSBldmVudCBhbmQgcGFja2F0ZSBjb21pbmcgaW4qLwogICAgICAgICAgICAgaWYgKHdvd2xlZG9uKSB7CiAgICAgICAgICAgICAgICAgY2hhciBidWZbMzJdOwogICAgICAgICAgICAgICAgIGludCBsZW4gPSBzcHJpbnRmKGJ1ZiwgIm9uIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2FyNjAwMF9kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvYXI2MDAwX2Rydi5jCmluZGV4IDI3Y2IwMmQuLjk3ZDZjZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvYXI2MDAwX2Rydi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvYXI2MDAwX2Rydi5jCkBAIC01MjAsNyArNTIwLDcgQEAKIGludAogYXI2MDAwX2RiZ2xvZ19nZXRfZGVidWdfbG9ncyhzdHJ1Y3QgYXI2X3NvZnRjICphcikKIHsKLSAgICB1MzIgZGF0YVs4XTsgLyogU2hvdWxkIGJlIGFibGUgdG8gYWNjb21vZGF0ZSBzdHJ1Y3QgZGJnbG9nX2J1Zl9zICovCisgICAgdTMyIGRhdGFbOF07IC8qIFNob3VsZCBiZSBhYmxlIHRvIGFjY29tbW9kYXRlIHN0cnVjdCBkYmdsb2dfYnVmX3MgKi8KICAgICB1MzIgYWRkcmVzczsKICAgICB1MzIgbGVuZ3RoOwogICAgIHUzMiBkcm9wcGVkOwpAQCAtMjA2Myw3ICsyMDYzLDcgQEAKICAqIC0gSW4gY2FzZSBvZiBzdXJwcmlzZSByZW1vdmFsLCB0aGUgaGNkIGFscmVhZHkgZnJlZXMgdXAgdGhlIHBlbmRpbmcKICAqICAgZm9yIHRoZSBkZXZpY2UgYW5kIGhlbmNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gdW5yZWdpc3RlciB0aGUgZnVuY3Rpb24KICAqICAgZHJpdmVyIGlub3JkZXIgdG8gZ2V0IHRoZXNlIHJlcXVlc3RzLiBGb3IgcGxhbm5lZCByZW1vdmFsLCB0aGUgZnVuY3Rpb24KLSAqICAgZHJpdmVyIGhhcyB0byBleHBsaWN0bHkgdW5yZWdpc3RlciBpdHNlbGYgdG8gaGF2ZSB0aGUgaGNkIHJldHVybiBhbGwgdGhlCisgKiAgIGRyaXZlciBoYXMgdG8gZXhwbGljaXRseSB1bnJlZ2lzdGVyIGl0c2VsZiB0byBoYXZlIHRoZSBoY2QgcmV0dXJuIGFsbCB0aGUKICAqICAgcGVuZGluZyByZXF1ZXN0cyBiZWZvcmUgdGhlIGRhdGEgc3RydWN0dXJlcyBmb3IgdGhlIGRldmljZXMgYXJlIGZyZWVkIHVwLgogICogICBOb3RlIHRoYXQgYXMgcGVyIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGUgZnVuY3Rpb24gZHJpdmVyIHdpbGwKICAqICAgZW5kIHVwIHJlbGVhc2luZyBhbGwgdGhlIGRldmljZXMgc2luY2UgdGhlcmUgaXMgbm8gQVBJIHRvIHNlbGVjdGl2ZWx5CkBAIC0yOTgyLDcgKzI5ODIsNyBAQAogICAgIC8qIElmIHRhcmdldCBpcyBub3QgYXNzb2NpYXRlZCAqLwogICAgIGlmKCAoIWFyLT5hckNvbm5lY3RlZCAmJiAhYnlwYXNzd21pKQogI2lmZGVmIENPTkZJR19IT1NUX1RDTURfU1VQUE9SVAotICAgICAvKiBUQ01EIGRvZXNudCBzdXBwb3J0IGFueSBkYXRhLCBmcmVlIHRoZSBidWYgYW5kIHJldHVybiAqLworICAgICAvKiBUQ01EIGRvZXNuJ3Qgc3VwcG9ydCBhbnkgZGF0YSwgZnJlZSB0aGUgYnVmIGFuZCByZXR1cm4gKi8KICAgICB8fCAoYXItPmFyVGFyZ2V0TW9kZSA9PSBBUjYwMDBfVENNRF9NT0RFKQogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgewpAQCAtNjM5Myw3ICs2MzkzLDcgQEAKIC8qCiAgKiBBZGQgc3VwcG9ydCBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyBhIHZpcnR1YWwgYWRhcHRlciBmb3Igc29mdCBBUC4KICAqIFNvbWUgT1MgcmVxdWlyZXMgZGlmZmVyZW50IGFkYXB0ZXJzIG5hbWVzIGZvciBzdGF0aW9uIGFuZCBzb2Z0IEFQIG1vZGUuCi0gKiBUbyBzdXBwb3J0IHRoZXNlIHJlcXVpcmVtZW50LCBjcmVhdGUgYW5kIGRlc3RvcnkgYSBuZXRkZXZpY2UgIGluc3RhbmNlCisgKiBUbyBzdXBwb3J0IHRoZXNlIHJlcXVpcmVtZW50LCBjcmVhdGUgYW5kIGRlc3Ryb3kgYSBuZXRkZXZpY2UgIGluc3RhbmNlCiAgKiB3aGVuIHRoZSBBUCBtb2RlIGlzIG9wZXJhdGlvbmFsLiBBIGZ1bGwgZmxlZGdlZCBzdXBwb3J0IGZvciB2aXJ1YWwgZGV2aWNlCiAgKiBpcyBub3QgaW1wbGVtZW50ZWQuIFJhdGhlciBhIHZpcnR1YWwgaW50ZXJmYWNlIGlzIGNyZWF0ZWQgYW5kIGlzIGxpbmtlZAogICogd2l0aCB0aGUgZXhpc3RpbmcgcGh5c2ljYWwgZGV2aWNlIGluc3RhbmNlIGR1cmluZyB0aGUgb3BlcmF0aW9uIG9mIHRoZSAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvd21pL3dtaS5jIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC93bWkvd21pLmMKaW5kZXggMGRkYWVlMi4uYTAwYmYwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC93bWkvd21pLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC93bWkvd21pLmMKQEAgLTQ4NjcsNyArNDg2Nyw3IEBACiAjaWZkZWYgQ09ORklHX0hPU1RfVENNRF9TVVBQT1JUCiAvKiBXTUkgIGxheWVyIGRvZXNuJ3QgbmVlZCB0byBrbm93IHRoZSBkYXRhIHR5cGUgb2YgdGhlIHRlc3QgY21kLgogICAgVGhpcyB3b3VsZCBiZSBiZW5lZmljaWFsIGZvciBjdXN0b21lcnMgbGlrZSBRdWFsY29tbSwgd2hvIG1pZ2h0Ci0gICBoYXZlIGRpZmZlcmVudCB0ZXN0IGNvbW1hbmQgcmVxdWlyZW1lbnRzIGZyb20gZGlmZmVybnQgbWFudWZhY3R1cmVycworICAgaGF2ZSBkaWZmZXJlbnQgdGVzdCBjb21tYW5kIHJlcXVpcmVtZW50cyBmcm9tIGRpZmZlcmVudCBtYW51ZmFjdHVyZXJzCiAgKi8KIGludAogd21pX3Rlc3RfY21kKHN0cnVjdCB3bWlfdCAqd21pcCwgdTggKmJ1ZiwgdTMyIGxlbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iY20vQWRhcHRlci5oIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9BZGFwdGVyLmgKaW5kZXggMzI5MDllMi4uMjBjY2EyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JjbS9BZGFwdGVyLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9BZGFwdGVyLmgKQEAgLTQxMiw3ICs0MTIsNyBAQAogCiAJLy8gdGhpcyB0byBrZWVwIHRyYWNrIG9mIHRoZSBUeCBhbmQgUnggTWFpbEJveCBSZWdpc3RlcnMuCiAJYXRvbWljX3QJCSAgICBDdXJyTnVtRnJlZVR4RGVzYzsKLQkvLyB0byBrZWVwIHRyYWNrIHRoZSBubyBvZiBieXRlIHJlY2lldmVkCisJLy8gdG8ga2VlcCB0cmFjayB0aGUgbm8gb2YgYnl0ZSByZWNlaXZlZAogCVVTSE9SVAkJCQlQcmV2TnVtUmVjdkRlc2NzOwogCVVTSE9SVAkJCQlDdXJyTnVtUmVjdkRlc2NzOwogCVVJTlQJCQkJdTMyVG90YWxEU0Q7CkBAIC01MjcsNyArNTI3LDcgQEAKIAlCT09MRUFOCQkJYlN0YXR1c1dyaXRlOwogCVVJTlQJCQl1aU5WTURTRFNpemU7CiAJVUlOVAkJCXVpVmVuZG9yRXh0bkZsYWc7Ci0JIC8vaXQgd2lsbCBhbHdheXMgcmVwcmVzZW50IGNob29zZWQgRFNEIGF0IGFueSBwb2ludCBvZiB0aW1lLgorCSAvL2l0IHdpbGwgYWx3YXlzIHJlcHJlc2VudCBjaG9zZW4gRFNEIGF0IGFueSBwb2ludCBvZiB0aW1lLgogCSAvLyBHZW5lcmFsbHkgaXQgaXMgQWN0aXZlIERTRCBidXQgaW4gY2FzZSBvZiBOVk0gUkQvV1IgaXQgbWlnaHQgYmUgZGlmZmVyZW50LgogCVVJTlQJCQl1bEZsYXNoQ2FsU3RhcnQ7CiAJVUxPTkcgICAgICAgICAgICAgICAgICAgdWxGbGFzaENvbnRyb2xTZWN0aW9uU3RhcnQ7CkBAIC01NDYsMTAgKzU0NiwxMCBAQAogCVBGTEFTSF9DU19JTkZPIHBzRmxhc2hDU0luZm8gOwogCVBGTEFTSDJYX1ZFTkRPUlNQRUNJRklDX0lORk8gcHNGbGFzaDJ4VmVuZG9ySW5mbzsKIAlVSU5UIHVpRmxhc2hCYXNlQWRkOyAvL0ZsYXNoIHN0YXJ0IGFkZHJlc3MKLQlVSU5UIHVpQWN0aXZlSVNPT2Zmc2V0OyAvL0FjdGl2ZSBJU08gb2Zmc2V0IGNob29zZW4gYmVmb3JlIGYvdyBkb3dubG9hZAorCVVJTlQgdWlBY3RpdmVJU09PZmZzZXQ7IC8vQWN0aXZlIElTTyBvZmZzZXQgY2hvc2VuIGJlZm9yZSBmL3cgZG93bmxvYWQKIAlGTEFTSDJYX1NFQ1RJT05fVkFMIGVBY3RpdmVJU087IC8vQWN0aXZlIElTTyBzZWN0aW9uIHZhbAotCUZMQVNIMlhfU0VDVElPTl9WQUwgZUFjdGl2ZURTRDsJLy9BY3RpdmUgRFNEIHZhbCBjaG9vc2VuIGJlZm9yZSBmL3cgZG93bmxvYWQKLQlVSU5UIHVpQWN0aXZlRFNET2Zmc2V0QXRGd0RsZDsgIC8vRm9yIGFjY2Vzc2luZyBBY3RpdmUgRFNEIGNob29zZW4gYmVmb3JlIGYvdyBkb3dubG9hZAorCUZMQVNIMlhfU0VDVElPTl9WQUwgZUFjdGl2ZURTRDsJLy9BY3RpdmUgRFNEIHZhbCBjaG9zZW4gYmVmb3JlIGYvdyBkb3dubG9hZAorCVVJTlQgdWlBY3RpdmVEU0RPZmZzZXRBdEZ3RGxkOyAgLy9Gb3IgYWNjZXNzaW5nIEFjdGl2ZSBEU0QgY2hvc2VuIGJlZm9yZSBmL3cgZG93bmxvYWQKIAlVSU5UIHVpRmxhc2hMYXlvdXRNYWpvclZlcnNpb24gOwogCVVJTlQgdWlGbGFzaExheW91dE1pbm9yVmVyc2lvbjsKIAlCT09MRUFOIGJBbGxEU0RXcml0ZUFsbG93IDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iY20vQ21Ib3N0LmMgYi9kcml2ZXJzL3N0YWdpbmcvYmNtL0NtSG9zdC5jCmluZGV4IDliZTE4NGYuLmMwZWU5NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iY20vQ21Ib3N0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9DbUhvc3QuYwpAQCAtMzg0LDcgKzM4NCw3IEBACiAJCX0KIAkJaWYocHNmQ1NUeXBlLT5jQ1BhY2tldENsYXNzaWZpY2F0aW9uUnVsZS51OFByb3RvY29sID09IDApCiAJCXsKLQkJCS8vd2UgZGlkbnQgZ2V0IHByb3RvY29sIGZpZWxkIGZpbGxlZCBpbiBieSB0aGUgQlMKKwkJCS8vd2UgZGlkbid0IGdldCBwcm90b2NvbCBmaWVsZCBmaWxsZWQgaW4gYnkgdGhlIEJTCiAJCQlwc3RDbGFzc2lmaWVyRW50cnktPnVjUHJvdG9jb2xMZW5ndGg9MDsKIAkJfQogCQllbHNlCkBAIC04NzksNyArODc5LDcgQEAKIAogCQkJCQkJLyoKIAkJCQkJCQlQYXNzaW5nIHRoZSBhcmd1bWVudCB1OFBIU0kgaW5zdGVhZCBvZiBjbHNpZC4gQmVjYXVzZSBmb3IgREwgd2l0aCBubyBjbGFzc2lmaWVyIHJ1bGUsCi0JCQkJCQkJY2xzaWQgd2lsbCBiZSB6ZXJvIGhlbmNlIHdlIGNhbnQgaGF2ZSBtdWx0aXBsZSBQSFMgcnVsZXMgZm9yIHRoZSBzYW1lIFNGLgorCQkJCQkJCWNsc2lkIHdpbGwgYmUgemVybyBoZW5jZSB3ZSBjYW4ndCBoYXZlIG11bHRpcGxlIFBIUyBydWxlcyBmb3IgdGhlIHNhbWUgU0YuCiAJCQkJCQkJVG8gc3VwcG9ydCBtdWx0aXBsZSBQSFMgcnVsZSwgcGFzc2luZyB1OFBIU0kuCiAJCQkJCQkqLwogCkBAIC0xMTAzLDcgKzExMDMsNyBAQAogCUJDTV9ERUJVR19QUklOVCggQWRhcHRlcixEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwgREJHX0xWTF9BTEwsICAidThUcmFmZmljSW5kaWNhdGlvblByZWZlcmVuY2UJOiAweCVYIiwKIAkJcHN0QWRkSW5kaWNhdGlvbi0+c2ZBdXRob3JpemVkU2V0LnU4VHJhZmZpY0luZGljYXRpb25QcmVmZXJlbmNlKTsKIAotCUJDTV9ERUJVR19QUklOVCggQWRhcHRlcixEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwgREJHX0xWTF9BTEwsICAiIFRvdGFsIENsYXNzaWZpZXJzIFJlY2lldmVkCQk6IDB4JVgiLHBzdEFkZEluZGljYXRpb24tPnNmQXV0aG9yaXplZFNldC51OFRvdGFsQ2xhc3NpZmllcnMpOworCUJDTV9ERUJVR19QUklOVCggQWRhcHRlcixEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwgREJHX0xWTF9BTEwsICAiIFRvdGFsIENsYXNzaWZpZXJzIFJlY2VpdmVkCQk6IDB4JVgiLHBzdEFkZEluZGljYXRpb24tPnNmQXV0aG9yaXplZFNldC51OFRvdGFsQ2xhc3NpZmllcnMpOwogCiAJbkN1ckNsYXNzaWZpZXJDbnQgPSBwc3RBZGRJbmRpY2F0aW9uLT5zZkF1dGhvcml6ZWRTZXQudThUb3RhbENsYXNzaWZpZXJzOwogCkBAIC0xMzA1LDcgKzEzMDUsNyBAQAogCUJDTV9ERUJVR19QUklOVCggQWRhcHRlcixEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwgREJHX0xWTF9BTEwsICAidThUcmFmZmljSW5kaWNhdGlvblByZWZlcmVuY2UJOiAweCUwMlgiLAogCQlwc3RBZGRJbmRpY2F0aW9uLT5zZkFkbWl0dGVkU2V0LnU4VHJhZmZpY0luZGljYXRpb25QcmVmZXJlbmNlKTsKIAotCUJDTV9ERUJVR19QUklOVCggQWRhcHRlcixEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwgREJHX0xWTF9BTEwsICAiIFRvdGFsIENsYXNzaWZpZXJzIFJlY2lldmVkCQk6IDB4JVgiLHBzdEFkZEluZGljYXRpb24tPnNmQWRtaXR0ZWRTZXQudThUb3RhbENsYXNzaWZpZXJzKTsKKwlCQ01fREVCVUdfUFJJTlQoIEFkYXB0ZXIsREJHX1RZUEVfT1RIRVJTLCBEVU1QX0NPTlRST0wsIERCR19MVkxfQUxMLCAgIiBUb3RhbCBDbGFzc2lmaWVycyBSZWNlaXZlZAkJOiAweCVYIixwc3RBZGRJbmRpY2F0aW9uLT5zZkFkbWl0dGVkU2V0LnU4VG90YWxDbGFzc2lmaWVycyk7CiAKIAluQ3VyQ2xhc3NpZmllckNudCA9IHBzdEFkZEluZGljYXRpb24tPnNmQWRtaXR0ZWRTZXQudThUb3RhbENsYXNzaWZpZXJzOwogCkBAIC0xNTAyLDcgKzE1MDIsNyBAQAogCUJDTV9ERUJVR19QUklOVCggQWRhcHRlcixEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwgREJHX0xWTF9BTEwsICAiIHU4VHJhZmZpY0luZGljYXRpb25QcmVmZXJlbmNlCTogMHglWCIsCiAJCXBzdEFkZEluZGljYXRpb24tPnNmQWN0aXZlU2V0LnU4VHJhZmZpY0luZGljYXRpb25QcmVmZXJlbmNlKTsKIAotCUJDTV9ERUJVR19QUklOVCggQWRhcHRlcixEQkdfVFlQRV9PVEhFUlMsIERVTVBfQ09OVFJPTCwgREJHX0xWTF9BTEwsICAiIFRvdGFsIENsYXNzaWZpZXJzIFJlY2lldmVkCQk6IDB4JVgiLHBzdEFkZEluZGljYXRpb24tPnNmQWN0aXZlU2V0LnU4VG90YWxDbGFzc2lmaWVycyk7CisJQkNNX0RFQlVHX1BSSU5UKCBBZGFwdGVyLERCR19UWVBFX09USEVSUywgRFVNUF9DT05UUk9MLCBEQkdfTFZMX0FMTCwgICIgVG90YWwgQ2xhc3NpZmllcnMgUmVjZWl2ZWQJCTogMHglWCIscHN0QWRkSW5kaWNhdGlvbi0+c2ZBY3RpdmVTZXQudThUb3RhbENsYXNzaWZpZXJzKTsKIAogCW5DdXJDbGFzc2lmaWVyQ250ID0gcHN0QWRkSW5kaWNhdGlvbi0+c2ZBY3RpdmVTZXQudThUb3RhbENsYXNzaWZpZXJzOwogCkBAIC0xNjk2LDcgKzE2OTYsNyBAQAogCQkvL05vIFNwZWNpYWwgaGFuZGxpbmcgc2VuZCB0aGUgbWVzc2FnZSBhcyBpdCBpcwogCQlyZXR1cm4gMTsKIAl9Ci0JLy8gRm9yIERTQV9SRVEsIG9ubHkgdXB0byAicHNmQXV0aG9yaXplZFNldCIgcGFyYW1ldGVyIHNob3VsZCBiZSBhY2Nlc3NlZCBieSBkcml2ZXIhCisJLy8gRm9yIERTQV9SRVEsIG9ubHkgdXAgdG8gInBzZkF1dGhvcml6ZWRTZXQiIHBhcmFtZXRlciBzaG91bGQgYmUgYWNjZXNzZWQgYnkgZHJpdmVyIQogCiAJcHN0QWRkSW5kaWNhdGlvbj1rbWFsbG9jKHNpemVvZigqcHN0QWRkSW5kaWNhdGlvbiksIEdGUF9LRVJORUwpOwogCWlmKE5VTEw9PXBzdEFkZEluZGljYXRpb24pCkBAIC0xNzg4LDcgKzE3ODgsNyBAQAogCUJDTV9ERUJVR19QUklOVCggQWRhcHRlcixEQkdfVFlQRV9PVEhFUlMsIENPTk5fTVNHLCBEQkdfTFZMX0FMTCwgIkluc2lkZSBSZXN0b3JlQ21Db250cm9sUmVzcG9uc2VNZXNzYWdlICIpOwogCS8qCiAJLy9OZWVkIHRvIEFsbG9jYXRlIG1lbW9yeSB0byBjb250YWluIHRoZSBTVVBFUiBMYXJnZSBzdHJ1Y3R1cmVzCi0JLy9PdXIgZHJpdmVyIGNhbnQgY3JlYXRlIHRoZXNlIHN0cnVjdHVyZXMgb24gU3RhY2sgOigKKwkvL091ciBkcml2ZXIgY2FuJ3QgY3JlYXRlIHRoZXNlIHN0cnVjdHVyZXMgb24gU3RhY2sgOigKIAkqLwogCXBzdEFkZEluZGljYXRpb25EZXN0PWttYWxsb2Moc2l6ZW9mKHN0TG9jYWxTRkFkZEluZGljYXRpb25BbHQpLCBHRlBfS0VSTkVMKTsKIApAQCAtMTk1Nyw3ICsxOTU3LDcgQEAKIHsKIAkvKgogCS8vTmVlZCB0byBBbGxvY2F0ZSBtZW1vcnkgdG8gY29udGFpbiB0aGUgU1VQRVIgTGFyZ2Ugc3RydWN0dXJlcwotCS8vT3VyIGRyaXZlciBjYW50IGNyZWF0ZSB0aGVzZSBzdHJ1Y3R1cmVzIG9uIFN0YWNrCisJLy9PdXIgZHJpdmVyIGNhbid0IGNyZWF0ZSB0aGVzZSBzdHJ1Y3R1cmVzIG9uIFN0YWNrCiAJKi8KIAlBZGFwdGVyLT5jYURzeFJlcVJlc3A9a21hbGxvYyhzaXplb2Yoc3RMb2NhbFNGQWRkSW5kaWNhdGlvbkFsdCkrTEVBREVSX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmKCFBZGFwdGVyLT5jYURzeFJlcVJlc3ApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmNtL0hvc3RNSUJTSW50ZXJmYWNlLmggYi9kcml2ZXJzL3N0YWdpbmcvYmNtL0hvc3RNSUJTSW50ZXJmYWNlLmgKaW5kZXggZjE3YTRmMS4uZTM0NTMxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JjbS9Ib3N0TUlCU0ludGVyZmFjZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iY20vSG9zdE1JQlNJbnRlcmZhY2UuaApAQCAtNjIsNyArNjIsNyBAQAogCVVMT05HCQkJTnVtRGVzVXNlZDsKIAlVTE9ORwkJCUN1cnJOdW1GcmVlRGVzYzsKIAlVTE9ORwkJCVByZXZOdW1GcmVlRGVzYzsKLQkvLyB0byBrZWVwIHRyYWNrIHRoZSBubyBvZiBieXRlIHJlY2lldmVkCisJLy8gdG8ga2VlcCB0cmFjayB0aGUgbm8gb2YgYnl0ZSByZWNlaXZlZAogCVVMT05HCQkJUHJldk51bVJjZXZCeXRlczsKIAlVTE9ORwkJCUN1cnJOdW1SY2V2Qnl0ZXM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iY20vSVB2NlByb3RvY29sLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmNtL0lQdjZQcm90b2NvbC5jCmluZGV4IDkxYjZmYmUuLjViNGZkMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iY20vSVB2NlByb3RvY29sLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9JUHY2UHJvdG9jb2wuYwpAQCAtMjg3LDcgKzI4Nyw3IEBACiAKIAlmb3IodWlMb29wSW5kZXg9MDt1aUxvb3BJbmRleDx1aUNvdW50SVBTcmNBZGRyZXNzZXM7dWlMb29wSW5kZXgrPXVpSXB2NkFkZHJOb0xvbmdXb3JkcykKIAl7Ci0JCUJDTV9ERUJVR19QUklOVCggQWRhcHRlcixEQkdfVFlQRV9UWCwgSVBWNl9EQkcsIERCR19MVkxfQUxMLCAiXG4gU3JjIElwdjYgQWRkcmVzcyBJbiBSZWNpZXZlZCBQYWNrZXQgOiBcbiAiKTsKKwkJQkNNX0RFQlVHX1BSSU5UKCBBZGFwdGVyLERCR19UWVBFX1RYLCBJUFY2X0RCRywgREJHX0xWTF9BTEwsICJcbiBTcmMgSXB2NiBBZGRyZXNzIEluIFJlY2VpdmVkIFBhY2tldCA6IFxuICIpOwogCQlEdW1wSXB2NkFkZHJlc3MoYXVsU3JjSVApOwogCQlCQ01fREVCVUdfUFJJTlQoIEFkYXB0ZXIsREJHX1RZUEVfVFgsIElQVjZfREJHLCBEQkdfTFZMX0FMTCwgIlxuIFNyYyBJcHY2IE1hc2sgSW4gQ2xhc3NpZmllciBSdWxlOiBcbiIpOwogCQlEdW1wSXB2NkFkZHJlc3MoJnBzdENsYXNzaWZpZXJSdWxlLT5zdFNyY0lwQWRkcmVzcy51bElwdjZNYXNrW3VpTG9vcEluZGV4XSk7CkBAIC0zNDAsNyArMzQwLDcgQEAKIAogCWZvcih1aUxvb3BJbmRleD0wO3VpTG9vcEluZGV4PHVpQ291bnRJUERlc3RpbmF0aW9uQWRkcmVzc2VzO3VpTG9vcEluZGV4Kz11aUlwdjZBZGRyTm9Mb25nV29yZHMpCiAJewotCQlCQ01fREVCVUdfUFJJTlQoIEFkYXB0ZXIsREJHX1RZUEVfVFgsIElQVjZfREJHLCBEQkdfTFZMX0FMTCwgIlxuIERlc3RpbmF0aW9uIElwdjYgQWRkcmVzcyBJbiBSZWNpZXZlZCBQYWNrZXQgOiBcbiAiKTsKKwkJQkNNX0RFQlVHX1BSSU5UKCBBZGFwdGVyLERCR19UWVBFX1RYLCBJUFY2X0RCRywgREJHX0xWTF9BTEwsICJcbiBEZXN0aW5hdGlvbiBJcHY2IEFkZHJlc3MgSW4gUmVjZWl2ZWQgUGFja2V0IDogXG4gIik7CiAJCUR1bXBJcHY2QWRkcmVzcyhhdWxEZXN0SVApOwogCQlCQ01fREVCVUdfUFJJTlQoIEFkYXB0ZXIsREJHX1RZUEVfVFgsIElQVjZfREJHLCBEQkdfTFZMX0FMTCwgIlxuIERlc3RpbmF0aW9uIElwdjYgTWFzayBJbiBDbGFzc2lmaWVyIFJ1bGU6IFxuIik7CiAJCUR1bXBJcHY2QWRkcmVzcygmcHN0Q2xhc3NpZmllclJ1bGUtPnN0RGVzdElwQWRkcmVzcy51bElwdjZNYXNrW3VpTG9vcEluZGV4XSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmNtL0ludGVyZmFjZUlkbGVNb2RlLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmNtL0ludGVyZmFjZUlkbGVNb2RlLmMKaW5kZXggYmY1YzBhZC4uOTZmYTRlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JjbS9JbnRlcmZhY2VJZGxlTW9kZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iY20vSW50ZXJmYWNlSWRsZU1vZGUuYwpAQCAtMTEsNyArMTEsNyBAQAogCiAKIFJldHVybjoJCQkJQkNNX1NUQVRVU19TVUNDRVNTIC0gSWYgV2FrZXVwIG9mIHRoZSBIVyBJbnRlcmZhY2Ugd2FzIHN1Y2Nlc3NmdWwuCi0JCQkJCQlPdGhlciAgICAgICAgICAgLSBJZiBhbiBlcnJvciBvY2N1cmVkLgorCQkJCQkJT3RoZXIgICAgICAgICAgIC0gSWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAqLwogCiAKQEAgLTI2LDcgKzI2LDcgQEAKIAogCiBSZXR1cm46CQkJCUJDTV9TVEFUVVNfU1VDQ0VTUyAtIElmIElkbGUgbW9kZSByZXNwb25zZSByZWxhdGVkIEhXIGNvbmZpZ3VyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCi0JCQkJCQlPdGhlciAgICAgICAgICAgLSBJZiBhbiBlcnJvciBvY2N1cmVkLgorCQkJCQkJT3RoZXIgICAgICAgICAgIC0gSWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JjbS9JbnRlcmZhY2VJc3IuYyBiL2RyaXZlcnMvc3RhZ2luZy9iY20vSW50ZXJmYWNlSXNyLmMKaW5kZXggMjIwZmY5Mi4uNjc3MTlkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JjbS9JbnRlcmZhY2VJc3IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmNtL0ludGVyZmFjZUlzci5jCkBAIC04MCw4ICs4MCw4IEBACiAJCX0KIAkJY2FzZSAtRUlOUFJPR1JFU1M6CiAJCXsKLQkJCS8vVGhpcyBzaXR1YXRpb24gbWF5IGhhcHBlbmQgd2hlbiBVUkJ1bmxpbmsgaXMgdXNlZC4gZm9yIGRldGFpbCBjaGVjayB1c2JfdW5saW5rX3VyYiBkb2N1bWVudGF0aW9uLgotCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsREJHX1RZUEVfT1RIRVJTLCBJTlRGX0lOSVQsIERCR19MVkxfQUxMLCJJbXBvc3NpYmUgY29uZGl0aW9uIGhhcyBvY2N1cmVkLi4uIHNvbWV0aGluZyB2ZXJ5IGJhZCBpcyBnb2luZyBvbiIpOworCQkJLy9UaGlzIHNpdHVhdGlvbiBtYXkgaGFwcGVuZWQgd2hlbiBVUkJ1bmxpbmsgaXMgdXNlZC4gZm9yIGRldGFpbCBjaGVjayB1c2JfdW5saW5rX3VyYiBkb2N1bWVudGF0aW9uLgorCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsREJHX1RZUEVfT1RIRVJTLCBJTlRGX0lOSVQsIERCR19MVkxfQUxMLCJJbXBvc3NpYmUgY29uZGl0aW9uIGhhcyBvY2N1cnJlZC4uLiBzb21ldGhpbmcgdmVyeSBiYWQgaXMgZ29pbmcgb24iKTsKIAkJCWJyZWFrIDsKIAkJCS8vcmV0dXJuOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmNtL0ludGVyZmFjZVJ4LmMgYi9kcml2ZXJzL3N0YWdpbmcvYmNtL0ludGVyZmFjZVJ4LmMKaW5kZXggNTMzZjhlYi4uODA2ZWY1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JjbS9JbnRlcmZhY2VSeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iY20vSW50ZXJmYWNlUnguYwpAQCAtMzQsNyArMzQsNyBAQAogCXJldHVybiBwUmNiOwogfQogCi0vKnRoaXMgaXMgcmVjZWl2ZSBjYWxsIGJhY2sgLSB3aGVuIHBrdCBhdmlsYWJsZSBmb3IgcmVjZWl2ZSAoQlVMSyBJTi0gZW5kIHBvaW50KSovCisvKnRoaXMgaXMgcmVjZWl2ZSBjYWxsIGJhY2sgLSB3aGVuIHBrdCBhdmFpbGFibGUgZm9yIHJlY2VpdmUgKEJVTEsgSU4tIGVuZCBwb2ludCkqLwogc3RhdGljIHZvaWQgcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKQEAgLTEyMyw3ICsxMjMsNyBAQAogCWlmKChudG9ocyhwTGVhZGVyLT5WY2lkKSA9PSBWQ0lEX0NPTlRST0xfUEFDS0VUKSB8fAogCSAgICAoIShwTGVhZGVyLT5TdGF0dXMgPj0gMHgyMCAgJiYgIHBMZWFkZXItPlN0YXR1cyA8PSAweDNGKSkpCiAJewotCSAgICBCQ01fREVCVUdfUFJJTlQocHNJbnRmQWRhcHRlci0+cHNBZGFwdGVyLERCR19UWVBFX1JYLCBSWF9DVFJMLCBEQkdfTFZMX0FMTCwgIlJlY2l2ZWQgY29udHJvbCBwa3QuLi4iKTsKKwkgICAgQkNNX0RFQlVHX1BSSU5UKHBzSW50ZkFkYXB0ZXItPnBzQWRhcHRlcixEQkdfVFlQRV9SWCwgUlhfQ1RSTCwgREJHX0xWTF9BTEwsICJSZWNlaXZlZCBjb250cm9sIHBrdC4uLiIpOwogCQkqKFBVU0hPUlQpc2tiLT5kYXRhID0gcExlYWRlci0+U3RhdHVzOwogICAgICAgIAltZW1jcHkoc2tiLT5kYXRhK3NpemVvZihVU0hPUlQpLCB1cmItPnRyYW5zZmVyX2J1ZmZlciArCiAJCQkoc2l6ZW9mKExFQURFUikpLCBwTGVhZGVyLT5QTGVuZ3RoKTsKQEAgLTE0Miw3ICsxNDIsNyBAQAogCQkgICogRGF0YSBQYWNrZXQsIEZvcm1hdCBhIHByb3BlciBFdGhlcm5ldCBIZWFkZXIKICAgICAgICAgCSAgKiBhbmQgZ2l2ZSBpdCB0byB0aGUgc3RhY2sKIAkJICAqLwotICAgICAgICBCQ01fREVCVUdfUFJJTlQocHNJbnRmQWRhcHRlci0+cHNBZGFwdGVyLERCR19UWVBFX1JYLCBSWF9EQVRBLCBEQkdfTFZMX0FMTCwgIlJlY2l2ZWQgRGF0YSBwa3QuLi4iKTsKKyAgICAgICAgQkNNX0RFQlVHX1BSSU5UKHBzSW50ZkFkYXB0ZXItPnBzQWRhcHRlcixEQkdfVFlQRV9SWCwgUlhfREFUQSwgREJHX0xWTF9BTEwsICJSZWNlaXZlZCBEYXRhIHBrdC4uLiIpOwogCQlza2JfcmVzZXJ2ZShza2IsIDIgKyBTS0JfUkVTRVJWRV9QSFNfQllURVMpOwogCQltZW1jcHkoc2tiLT5kYXRhK0VUSF9ITEVOLCAoUFVDSEFSKXVyYi0+dHJhbnNmZXJfYnVmZmVyICsgc2l6ZW9mKExFQURFUiksIHBMZWFkZXItPlBMZW5ndGgpOwogCQlza2ItPmRldiA9IEFkYXB0ZXItPmRldjsKQEAgLTE1MSw3ICsxNTEsNyBAQAogCQlza2JfcHV0IChza2IsIHBMZWFkZXItPlBMZW5ndGggKyBFVEhfSExFTik7CiAJCUFkYXB0ZXItPlBhY2tJbmZvW1F1ZXVlSW5kZXhdLnVpVG90YWxSeEJ5dGVzKz1wTGVhZGVyLT5QTGVuZ3RoOwogCQlBZGFwdGVyLT5QYWNrSW5mb1tRdWV1ZUluZGV4XS51aVRoaXNQZXJpb2RSeEJ5dGVzKz0gcExlYWRlci0+UExlbmd0aDsKLSAgICAgICAgQkNNX0RFQlVHX1BSSU5UKHBzSW50ZkFkYXB0ZXItPnBzQWRhcHRlcixEQkdfVFlQRV9SWCwgUlhfREFUQSwgREJHX0xWTF9BTEwsICJSZWNpdmVkIERhdGEgcGt0IG9mIGxlbiA6MHglWCIsIHBMZWFkZXItPlBMZW5ndGgpOworICAgICAgICBCQ01fREVCVUdfUFJJTlQocHNJbnRmQWRhcHRlci0+cHNBZGFwdGVyLERCR19UWVBFX1JYLCBSWF9EQVRBLCBEQkdfTFZMX0FMTCwgIlJlY2VpdmVkIERhdGEgcGt0IG9mIGxlbiA6MHglWCIsIHBMZWFkZXItPlBMZW5ndGgpOwogCiAJCWlmKG5ldGlmX3J1bm5pbmcoQWRhcHRlci0+ZGV2KSkKIAkJewpAQCAtMjM3LDcgKzIzNyw3IEBACiAKIAogUmV0dXJuOgkJCQlUUlVFICAtIElmIFJ4IHdhcyBzdWNjZXNzZnVsLgotCQkJCQlPdGhlciAtIElmIGFuIGVycm9yIG9jY3VyZWQuCisJCQkJCU90aGVyIC0gSWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAqLwogCiBCT09MRUFOIEludGVyZmFjZVJ4IChQU19JTlRFUkZBQ0VfQURBUFRFUiBwc0ludGZBZGFwdGVyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JjbS9Jb2N0bC5oIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9Jb2N0bC5oCmluZGV4IGU0ZjhlYjcuLmY4NTljZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iY20vSW9jdGwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmNtL0lvY3RsLmgKQEAgLTI0MSw3ICsyNDEsNyBAQAogCiB0eXBlZGVmIGVudW0gX0ZMQVNIMlhfU0VDVElPTl9WQUwKIHsKLQlOT19TRUNUSU9OX1ZBTCA9IDAsIC8vbm8gc2VjdGlvbiBpcyBjaG9vc2VuIHdoZW4gYWJzb2x1dGUgb2Zmc2V0IGlzIGdpdmVuIGZvciBSRC9XUgorCU5PX1NFQ1RJT05fVkFMID0gMCwgLy9ubyBzZWN0aW9uIGlzIGNob3NlbiB3aGVuIGFic29sdXRlIG9mZnNldCBpcyBnaXZlbiBmb3IgUkQvV1IKIAlJU09fSU1BR0UxLAogCUlTT19JTUFHRTIsCiAJRFNEMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iY20vTGVha3lCdWNrZXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9iY20vTGVha3lCdWNrZXQuYwppbmRleCBmNGNmNDFjLi5hNTVkNDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmNtL0xlYWt5QnVja2V0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9MZWFreUJ1Y2tldC5jCkBAIC0yMTMsNyArMjEzLDcgQEAKIAkJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlcixEQkdfVFlQRV9UWCwgVFhfUEFDS0VUUywgREJHX0xWTF9BTEwsICJGb3IgUXVldWU6ICV6ZFxuIiwgcHNTRi1BZGFwdGVyLT5QYWNrSW5mbyk7CiAJCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsREJHX1RZUEVfVFgsIFRYX1BBQ0tFVFMsIERCR19MVkxfQUxMLCAiXG5BdmFpbGFibGUgVG9rZW5zID0gJWQgcmVxdWlyZWQgPSAlZFxuIiwKIAkJCQkJcHNTRi0+dWlDdXJyZW50VG9rZW5Db3VudCwgaVBhY2tldExlbik7Ci0JCQkJLy90aGlzIHBhcnQgaW5kaWNhdGVzIHRoYXQgYmVjdWFzZSBvZiBub24tYXZhaWxhYmlsaXR5IG9mIHRoZSB0b2tlbnMKKwkJCQkvL3RoaXMgcGFydCBpbmRpY2F0ZXMgdGhhdCBiZWNhdXNlIG9mIG5vbi1hdmFpbGFiaWxpdHkgb2YgdGhlIHRva2VucwogCQkJCS8vcGt0IGhhcyBub3QgYmVlbiBzZW5kIG91dCBoZW5jZSBzZXR0aW5nIHRoZSBwZW5kaW5nIGZsYWcgaW5kaWNhdGluZyB0aGUgaG9zdCB0byBzZW5kIGl0IG91dAogCQkJCS8vZmlyc3QgbmV4dCBpdGVyYXRpb24gIC4KIAkJCQlwc1NGLT51aVBlbmRlZExhc3QgPSBUUlVFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JjbS9NaXNjLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmNtL01pc2MuYwppbmRleCBkNjI0ZjM1Li5jNTAwM2I2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmNtL01pc2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmNtL01pc2MuYwpAQCAtNjAyLDcgKzYwMiw3IEBACiAJCQkJQWRhcHRlci0+TGlua1N0YXR1cz1MSU5LVVBfRE9ORTsKIAkJCQlBZGFwdGVyLT5iUEhTRW5hYmxlZCA9ICoocHVjQnVmZmVyKzMpOwogICAgICAgICAgICAgICAgCUFkYXB0ZXItPmJFVEhDU0VuYWJsZWQgPSAqKHB1Y0J1ZmZlcis0KSAmIEVUSF9DU19NQVNLOwotCQkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLERCR19UWVBFX1BSSU5USywgMCwgMCwgIlBIUyBTdXBwb3J0IFN0YXR1cyBSZWNpZXZlZCBJbiBMaW5rVXAgQWNrIDogJXggXG4iLEFkYXB0ZXItPmJQSFNFbmFibGVkKTsKKwkJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlcixEQkdfVFlQRV9QUklOVEssIDAsIDAsICJQSFMgU3VwcG9ydCBTdGF0dXMgUmVjZWl2ZWQgSW4gTGlua1VwIEFjayA6ICV4IFxuIixBZGFwdGVyLT5iUEhTRW5hYmxlZCk7CiAJCQkJaWYoKEZBTFNFID09IEFkYXB0ZXItPmJTaHV0U3RhdHVzKSYmCiAJCQkJCShGQUxTRSA9PSBBZGFwdGVyLT5JZGxlTW9kZSkpCiAJCQkJewpAQCAtMTE1Myw3ICsxMTUzLDcgQEAKIAogCS8qCiAgICAgICogMS4gSWYgdGhlIExFRCBTZXR0aW5ncyBmYWlscywgZG8gbm90IHN0b3AgYW5kIGRvIHRoZSBGaXJtd2FyZSBkb3dubG9hZC4KLSAgICAgKiAyLiBUaGlzIGluaXQgd291bGQgaGFwcGVuZCBvbmx5IGlmIHRoZSBjZmcgZmlsZSBpcyBwcmVzZW50LCBlbHNlCisgICAgICogMi4gVGhpcyBpbml0IHdvdWxkIGhhcHBlbmVkIG9ubHkgaWYgdGhlIGNmZyBmaWxlIGlzIHByZXNlbnQsIGVsc2UKICAgICAgKiAgICBjYWxsIGZyb20gdGhlIGlvY3RsIGNvbnRleHQuCiAgICAgICovCiAKQEAgLTExODUsNyArMTE4NSw3IEBACiAJCXN0YXR1cyA9IFByb3BhZ2F0ZUNhbFBhcmFtc0Zyb21GbGFzaFRvTWVtb3J5KHBzX2FkYXB0ZXIpOwogCQlpZihzdGF0dXMpCiAJCXsKLQkJCUJDTV9ERUJVR19QUklOVChwc19hZGFwdGVyLERCR19UWVBFX0lOSVRFWElULCBNUF9JTklULCBEQkdfTFZMX0FMTCwiIFByb3BvZ2F0aW9uIG9mIENhbCBwYXJhbSBmYWlsZWQgLi4iICk7CisJCQlCQ01fREVCVUdfUFJJTlQocHNfYWRhcHRlcixEQkdfVFlQRV9JTklURVhJVCwgTVBfSU5JVCwgREJHX0xWTF9BTEwsIiBQcm9wYWdhdGlvbiBvZiBDYWwgcGFyYW0gZmFpbGVkIC4uIiApOwogCQkJZ290byBPVVQ7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmNtL1Fvcy5jIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9Rb3MuYwppbmRleCBmZWFkZTk0Li5jOTcwMjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmNtL1Fvcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iY20vUW9zLmMKQEAgLTcyNyw3ICs3MjcsNyBAQAogCiAJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsIERCR19UWVBFX1RYLCBJUFY0X0RCRywgREJHX0xWTF9BTEwsICAiJXMgIENMUyBVc2VyUHJpbzoleCBDTFMgVkxBTklEOiV4XG4iLF9fRlVOQ1RJT05fXyxudG9ocygqKChVU0hPUlQgKilwc3RDbGFzc2lmaWVyUnVsZS0+dXNVc2VyUHJpb3JpdHkpKSxwc3RDbGFzc2lmaWVyUnVsZS0+dXNWTEFOSUQpOwogCi0JLyogSW4gY2FzZSBGVyBkaWRuJ3QgcmVjaWV2ZSB0aGUgVExWLCB0aGUgcHJpb3JpdHkgZmllbGQgc2hvdWxkIGJlIGlnbm9yZWQgKi8KKwkvKiBJbiBjYXNlIEZXIGRpZG4ndCByZWNlaXZlIHRoZSBUTFYsIHRoZSBwcmlvcml0eSBmaWVsZCBzaG91bGQgYmUgaWdub3JlZCAqLwogCWlmKHBzdENsYXNzaWZpZXJSdWxlLT51c1ZhbGlkaXR5Qml0TWFwICYgKDE8PFBLVF9DTEFTU0lGSUNBVElPTl9VU0VSX1BSSU9SSVRZX1ZBTElEKSkKIAl7CiAJCWlmKHBzdEV0aENzUGt0SW5mby0+ZU53cGt0RXRoRnJhbWVUeXBlIT1lRXRoODAyUVZMQU5GcmFtZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iY20vY250cmxfU2lnbmFsaW5nSW50ZXJmYWNlLmggYi9kcml2ZXJzL3N0YWdpbmcvYmNtL2NudHJsX1NpZ25hbGluZ0ludGVyZmFjZS5oCmluZGV4IDg5MDc3ODQuLmFiMTMxODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iY20vY250cmxfU2lnbmFsaW5nSW50ZXJmYWNlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9jbnRybF9TaWduYWxpbmdJbnRlcmZhY2UuaApAQCAtMjEsNyArMjEsNyBAQAogI2RlZmluZSBWRU5ET1JfUEhTX1BBUkFNX0xFTkdUSCAxMAogI2RlZmluZSBNQVhfTlVNX0FDVElWRV9CUyAxMAogI2RlZmluZSBBVVRIX1RPS0VOX0xFTkdUSAkxMAotI2RlZmluZSBOVU1fSEFSUV9DSEFOTkVMUwkxNgkvL0NoYW5nZWQgZnJvbSAxMCB0byAxNiB0byBhY2NvbW9kYXRlIGFsbCBIQVJRIGNoYW5uZWxzCisjZGVmaW5lIE5VTV9IQVJRX0NIQU5ORUxTCTE2CS8vQ2hhbmdlZCBmcm9tIDEwIHRvIDE2IHRvIGFjY29tbW9kYXRlIGFsbCBIQVJRIGNoYW5uZWxzCiAjZGVmaW5lIFZFTkRPUl9DTEFTU0lGSUVSX1BBUkFNX0xFTkdUSCAxIC8vQ2hhbmdlZCB0aGUgc2l6ZSB0byAxIGJ5dGUgc2luY2Ugd2UgZG50IHVzZSBpdAogI2RlZmluZSAgVkVORE9SX1NQRUNJRl9RT1NfUEFSQU0gMQogI2RlZmluZSBWRU5ET1JfUEhTX1BBUkFNX0xFTkdUSAkxMApAQCAtMTA5LDEzICsxMDksMTMgQEAKICAgICBCX1VJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgIHU4UEhTSTsKIAkvKiogIFBIU0YgTGVuZ3RoIE9mIFRoZSBTZXJ2aWNlIEZsb3cqLwogICAgIEJfVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgdThQSFNGTGVuZ3RoOwotICAgIC8qKiBTdHJpbmcgb2YgYnl0ZXMgY29udGFpbmluZyBoZWFkZXIgaW5mb3JtYXRpb24gdG8gYmUgc3VwcmVzc2VkIGJ5IHRoZSBzZW5kaW5nIENTIGFuZCByZWNvbnN0cnVjdGVkIGJ5IHRoZSByZWNlaXZpbmcgQ1MqLworICAgIC8qKiBTdHJpbmcgb2YgYnl0ZXMgY29udGFpbmluZyBoZWFkZXIgaW5mb3JtYXRpb24gdG8gYmUgc3VwcHJlc3NlZCBieSB0aGUgc2VuZGluZyBDUyBhbmQgcmVjb25zdHJ1Y3RlZCBieSB0aGUgcmVjZWl2aW5nIENTKi8KICAgICBCX1VJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgIHU4UEhTRltNQVhfUEhTX0xFTkdUSFNdOwogCS8qKiAgUEhTTSBMZW5ndGggT2YgVGhlIFNlcnZpY2UgRmxvdyovCiAgICAgQl9VSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICB1OFBIU01MZW5ndGg7CiAJLyoqICBQSFMgTWFzayBmb3IgdGhlIFNGKi8KICAgICBCX1VJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgIHU4UEhTTVtNQVhfUEhTX0xFTkdUSFNdOwotCS8qKiAgOGJpdCBUb3RhbCBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgc3VwcmVzc2VkIGZvciB0aGUgU2VydmljZSBGbG93Ki8KKwkvKiogIDhiaXQgVG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHN1cHByZXNzZWQgZm9yIHRoZSBTZXJ2aWNlIEZsb3cqLwogICAgIEJfVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgdThQSFNTOwogCS8qKiAgOGJpdCBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgUGFja2V0IEhlYWRlciBjb250ZW50cyBuZWVkIHRvIGJlIHZlcmlmaWVkIHByaW9yIHRvIHN1cHJlc3Npb24gKi8KICAgICBCX1VJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgIHU4UEhTVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iY20vbnZtLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmNtL252bS5jCmluZGV4IGM3MjkyMzcuLjRkYTViN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iY20vbnZtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JjbS9udm0uYwpAQCAtMzEzLDcgKzMxMyw3IEBACiAvLwkJdWlOdW1CeXRlcyAtIE51bWJlciBvZiBieXRlcyB0byBiZSByZWFkIGZyb20gdGhlIEVFUFJPTS4KIC8vCiAvLyBSZXR1cm5zOgotLy8JCU9TQUxfU1RBVFVTX1NVQ0NFU1MgLSBpZiBFRVBST00gcmVhZCBpcyBzdWNjZXNzZnVsbC4KKy8vCQlPU0FMX1NUQVRVU19TVUNDRVNTIC0gaWYgRUVQUk9NIHJlYWQgaXMgc3VjY2Vzc2Z1bC4KIC8vCQk8RkFJTFVSRT4JCQktIGlmIGZhaWxlZC4KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNDMxLDcgKzQzMSw3IEBACiAvLwkJdWlOdW1CeXRlcyAtIE51bWJlciBvZiBieXRlcyB0byBiZSByZWFkIGZyb20gdGhlIEZMQVNILgogLy8KIC8vIFJldHVybnM6Ci0vLwkJT1NBTF9TVEFUVVNfU1VDQ0VTUyAtIGlmIEZMQVNIIHJlYWQgaXMgc3VjY2Vzc2Z1bGwuCisvLwkJT1NBTF9TVEFUVVNfU1VDQ0VTUyAtIGlmIEZMQVNIIHJlYWQgaXMgc3VjY2Vzc2Z1bC4KIC8vCQk8RkFJTFVSRT4JCQktIGlmIGZhaWxlZC4KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTE3NCw3ICsxMTc0LDcgQEAKIAlpZihOVUxMID09IHBUZW1wQnVmZikKIAkJZ290byBCZWNlZW1GbGFzaEJ1bGtXcml0ZV9FWElUOwogLy8KLS8vIGNoZWNrIGlmIHRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4gaXMgb3ZlcmxhcHBlZCBhY2Nyb3NzIHNlY3RvcnMKKy8vIGNoZWNrIGlmIHRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4gaXMgb3ZlcmxhcHBlZCBhY3Jvc3Mgc2VjdG9ycwogLy8KIAlpZih1aU9mZnNldCt1aU51bUJ5dGVzIDwgdWlTZWN0Qm91bmRhcnkpCiAJewpAQCAtMTM5MCw3ICsxMzkwLDcgQEAKIAkJZ290byBCZWNlZW1GbGFzaEJ1bGtXcml0ZVN0YXR1c19FWElUOwogCiAvLwotLy8gY2hlY2sgaWYgdGhlIGRhdGEgdG8gYmUgd3JpdHRlbiBpcyBvdmVybGFwcGVkIGFjY3Jvc3Mgc2VjdG9ycworLy8gY2hlY2sgaWYgdGhlIGRhdGEgdG8gYmUgd3JpdHRlbiBpcyBvdmVybGFwcGVkIGFjcm9zcyBzZWN0b3JzCiAvLwogCWlmKHVpT2Zmc2V0K3VpTnVtQnl0ZXMgPCB1aVNlY3RCb3VuZGFyeSkKIAl7CkBAIC0yMDIwLDcgKzIwMjAsNyBAQAogLy8JCXVpTnVtQnl0ZXMgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgcmVhZCBmcm9tIHRoZSBOVk0uCiAvLwogLy8gUmV0dXJuczoKLS8vCQlPU0FMX1NUQVRVU19TVUNDRVNTIC0gaWYgTlZNIHJlYWQgaXMgc3VjY2Vzc2Z1bGwuCisvLwkJT1NBTF9TVEFUVVNfU1VDQ0VTUyAtIGlmIE5WTSByZWFkIGlzIHN1Y2Nlc3NmdWwuCiAvLwkJPEZBSUxVUkU+CQkJLSBpZiBmYWlsZWQuCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTIwODMsNyArMjA4Myw3IEBACiAvLwkJdWlOdW1CeXRlcyAtIE51bWJlciBvZiBieXRlcyB0byBiZSB3cml0dGVuLi4KIC8vCiAvLyBSZXR1cm5zOgotLy8JCU9TQUxfU1RBVFVTX1NVQ0NFU1MgLSBpZiBOVk0gd3JpdGUgaXMgc3VjY2Vzc2Z1bGwuCisvLwkJT1NBTF9TVEFUVVNfU1VDQ0VTUyAtIGlmIE5WTSB3cml0ZSBpcyBzdWNjZXNzZnVsLgogLy8JCTxGQUlMVVJFPgkJCS0gaWYgZmFpbGVkLgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0yMjE4LDcgKzIyMTgsNyBAQAogLy8gICAgICAgICAgdWlTZWN0b3JTaXplIC0gc2VjdG9yIHNpemUKIC8vCiAvLyBSZXR1cm5zOgotLy8JCU9TQUxfU1RBVFVTX1NVQ0NFU1MgLSBpZiBOVk0gd3JpdGUgaXMgc3VjY2Vzc2Z1bGwuCisvLwkJT1NBTF9TVEFUVVNfU1VDQ0VTUyAtIGlmIE5WTSB3cml0ZSBpcyBzdWNjZXNzZnVsLgogLy8JCTxGQUlMVVJFPgkJCS0gaWYgZmFpbGVkLgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0yNDMwLDcgKzI0MzAsNyBAQAogKklucHV0IFBhcmFtZXRlcjoKICoJCUFkYXB0ZXIgZGF0YSBzdHJ1Y3R1cmUKICpSZXR1cm4gVmFsdWUgOgotKgkJMC4gbWVhbnMgc3VjZXNzOworKgkJMC4gbWVhbnMgc3VjY2VzczsKICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC0yOTk4LDcgKzI5OTgsNyBAQAogCS8qCiAJKglDb25zaWRlcmluZyBhbGwgdGhlIHNlY3Rpb24gZm9yIHdoaWNoIGVuZCBvZmZzZXQgY2FuIGJlIGNhbGN1bGF0ZWQgb3IgZGlyZWN0bHkgZ2l2ZW4KIAkqCWluIENTIFN0cnVjdHVyZS4gaWYgbWF0Y2hpbmcgY2FzZSBkb2VzIG5vdCBleGlzdCwgcmV0dXJuIFNUQVRVU19GQUlMVVJFIGluZGljYXRpbmcgc2VjdGlvbgotCSoJZW5kb2Zmc2V0IGNhbid0IGJlIGNhbGN1bGF0ZWQgb3IgZ2l2ZW4gaW4gQ1MgU3R1Y3R1cmUuCisJKgllbmRvZmZzZXQgY2FuJ3QgYmUgY2FsY3VsYXRlZCBvciBnaXZlbiBpbiBDUyBTdHJ1Y3R1cmUuCiAJKi8KIAogCUlOVCBTZWN0U3RhcnRPZmZzZXQgPSAwIDsKQEAgLTMxNzMsNyArMzE3Myw3IEBACiAqCUB1aU51bUJ5dGVzIDogTnVtYmVyIG9mIEJ5dGVzIGZvciBSZWFkCiAqCiAqCVJldHVybiB2YWx1ZTotCi0qCQlyZXR1cm4gdHJ1ZSBvbiBzdWNlc3MgYW5kIFNUQVRVU19GQUlMVVJFIG9uIGZhaWwuCisqCQlyZXR1cm4gdHJ1ZSBvbiBzdWNjZXNzIGFuZCBTVEFUVVNfRkFJTFVSRSBvbiBmYWlsLgogKi8KIAogSU5UIEJjbUZsYXNoMnhCdWxrUmVhZCgKQEAgLTMyNDEsNyArMzI0MSw3IEBACiAqCUB1aU51bUJ5dGVzIDogTnVtYmVyIG9mIEJ5dGVzIGZvciBXcml0ZQogKgogKglSZXR1cm4gdmFsdWU6LQotKgkJcmV0dXJuIHRydWUgb24gc3VjZXNzIGFuZCBTVEFUVVNfRkFJTFVSRSBvbiBmYWlsLgorKgkJcmV0dXJuIHRydWUgb24gc3VjY2VzcyBhbmQgU1RBVFVTX0ZBSUxVUkUgb24gZmFpbC4KICoKICovCiAKQEAgLTMzMDgsNyArMzMwOCw3IEBACiAqCUBBZGFwdGVyIDotRHJpdmVycyBwcml2YXRlIERhdGEgU3RydWN0dXJlCiAqCiAqCVJldHVybiBWYWx1ZTotCi0qCQlSZXR1cm4gU1RBVFVTX1NVQ0VTUyBpZiBnZXQgc3VjZXNzIGluIHNldHRpbmcgdGhlIHJpZ2h0IERTRCBlbHNlIG5lZ2FpdmUgZXJyb3IgY29kZQorKgkJUmV0dXJuIFNUQVRVU19TVUNFU1MgaWYgZ2V0IHN1Y2Nlc3MgaW4gc2V0dGluZyB0aGUgcmlnaHQgRFNEIGVsc2UgbmVnYWl2ZSBlcnJvciBjb2RlCiAqCiAqKi8KIHN0YXRpYyBJTlQgQmNtR2V0QWN0aXZlRFNEKFBNSU5JX0FEQVBURVIgQWRhcHRlcikKQEAgLTMzODQsNyArMzM4NCw3IEBACiAqCUB1aU9mZnNldCA6IE9mZnNldCBwcm92aWRlZCBpbiB0aGUgRmxhc2gKICoKICoJUmV0dXJuIFZhbHVlOi0KLSoJU3VjZXNzOi1UUlVFICwgIG9mZnNldCBpcyB3cml0YWJsZQorKglTdWNjZXNzOi1UUlVFICwgIG9mZnNldCBpcyB3cml0YWJsZQogKglGYWlsdXJlOi1GQUxTRSwgb2Zmc2V0IGlzIFJPCiAqCiAqKi8KQEAgLTM0NDEsNyArMzQ0MSw3IEBACiAJQEFkYXB0ZXI6LURyaXZlciBwcml2YXRlIERhdGEgU3RydWN0dXJlCiAqCiAqCVJldHVybiB2YWx1ZTotCi0qCVN1Y2VzczotIFNUQVRVU19TVUNFU1MKKyoJU3VjY2VzczotIFNUQVRVU19TVUNFU1MKICoJRmFpbHVyZTotIG5lZ2F0aXZlIGVycm9yIGNvZGUKICoqLwogCkBAIC0zNzgzLDcgKzM3ODMsNyBAQAogCQkJCQkvLyBUaGlzIGlzIGEgU1BFQ0lBTCBDYXNlIHdoaWNoIHdpbGwgb25seSBoYXBwZW4gaWYgdGhlIGN1cnJlbnQgaGlnaGVzdCBwcmlvcml0eSBJU08gaGFzIHByaW9yaXR5IHZhbHVlID0gMHg3RkZGRkZGRi4KIAkJCQkJLy8gV2Ugd2lsbCB3cml0ZSAxIHRvIHRoZSBjdXJyZW50IEhpZ2hlc3QgcHJpb3JpdHkgSVNPIEFuZCB0aGVuIHNoYWxsIGluY3JlYXNlIHRoZSBwcmlvcml0eSBvZiB0aGUgcmVxdWVzdGVkIElTTwogCQkJCQkvLyBieSB1c2VyCi0JCQkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLERCR19UWVBFX09USEVSUywgTlZNX1JXLCBEQkdfTFZMX0FMTCwgIlNlY3RJbWFnZVByaW9yaXR5IHdyYXBhcm91bmQgaGFwcGVuZCwgZUZsYXNoMnhTZWN0VmFsOiAweCV4XG4iLGVGbGFzaDJ4U2VjdFZhbCk7CisJCQkJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLERCR19UWVBFX09USEVSUywgTlZNX1JXLCBEQkdfTFZMX0FMTCwgIlNlY3RJbWFnZVByaW9yaXR5IHdyYXBhcm91bmQgaGFwcGVuZWQsIGVGbGFzaDJ4U2VjdFZhbDogMHgleFxuIixlRmxhc2gyeFNlY3RWYWwpOwogCQkJCQlTZWN0SW1hZ2VQcmlvcml0eSA9IGh0b25sKDB4MSk7CiAJCQkJCVN0YXR1cyA9IEJjbUZsYXNoMnhCdWxrV3JpdGUoQWRhcHRlciwKIAkJCQkJCQkJJlNlY3RJbWFnZVByaW9yaXR5LApAQCAtMzg1Myw3ICszODUzLDcgQEAKIAkJCQkJLy8gVGhpcyBpcyBhIFNQRUNJQUwgQ2FzZSB3aGljaCB3aWxsIG9ubHkgaGFwcGVuIGlmIHRoZSBjdXJyZW50IGhpZ2hlc3QgcHJpb3JpdHkgRFNEIGhhcyBwcmlvcml0eSB2YWx1ZSA9IDB4N0ZGRkZGRkYuCiAJCQkJCS8vIFdlIHdpbGwgd3JpdGUgMSB0byB0aGUgY3VycmVudCBIaWdoZXN0IHByaW9yaXR5IERTRCBBbmQgdGhlbiBzaGFsbCBpbmNyZWFzZSB0aGUgcHJpb3JpdHkgb2YgdGhlIHJlcXVlc3RlZCBEU0QKIAkJCQkJLy8gYnkgdXNlcgotCQkJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlcixEQkdfVFlQRV9QUklOVEssIE5WTV9SVywgREJHX0xWTF9BTEwsICJTZWN0SW1hZ2VQcmlvcml0eSB3cmFwYXJvdW5kIGhhcHBlbmQsIGVGbGFzaDJ4U2VjdFZhbDogMHgleFxuIixlRmxhc2gyeFNlY3RWYWwpOworCQkJCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlcixEQkdfVFlQRV9QUklOVEssIE5WTV9SVywgREJHX0xWTF9BTEwsICJTZWN0SW1hZ2VQcmlvcml0eSB3cmFwYXJvdW5kIGhhcHBlbmVkLCBlRmxhc2gyeFNlY3RWYWw6IDB4JXhcbiIsZUZsYXNoMnhTZWN0VmFsKTsKIAkJCQkJU2VjdEltYWdlUHJpb3JpdHkgPSBodG9ubCgweDEpOwogCiAJCQkJCVN0YXR1cyA9IEJjbUZsYXNoMnhCdWxrV3JpdGUoQWRhcHRlciwKQEAgLTQxMTksNyArNDExOSw3IEBACiAJCQkJCQkJCQkJCQlNQVhfUldfU0laRSk7CiAJCQkJSXNUaGlzSGVhZGVyU2VjdG9yID0gRkFMU0UgOwogCQkJfQotCQkJLy9zdWJzdHJhY3RpbmcgdGhlIHdyaXR0ZW4gRGF0YQorCQkJLy9zdWJ0cmFjdGluZyB0aGUgd3JpdHRlbiBEYXRhCiAJCQl1aVRvdGFsRGF0YVRvQ29weSA9IHVpVG90YWxEYXRhVG9Db3B5IC0gQWRhcHRlci0+dWlTZWN0b3JTaXplIDsKIAkJfQogCkBAIC00MjUwLDcgKzQyNTAsNyBAQAogCQkJCUlzVGhpc0hlYWRlclNlY3RvciA9IEZBTFNFIDsKIAkJCX0KIAotCQkJLy9zdWJzdHJhY3RpbmcgdGhlIHdyaXR0ZW4gRGF0YQorCQkJLy9zdWJ0cmFjdGluZyB0aGUgd3JpdHRlbiBEYXRhCiAJCQl1aVRvdGFsRGF0YVRvQ29weSA9IHVpVG90YWxEYXRhVG9Db3B5IC0gQWRhcHRlci0+dWlTZWN0b3JTaXplIDsKIAkJfQogCkBAIC00MjY4LDcgKzQyNjgsNyBAQAogQGVGbGFzaDJ4U2VjdGlvblZhbCA6LSBGbGFzaCBzZWN0aW9uIHZhbCB3aGljaCBoYXMgaGVhZGVyCiAKIFJldHVybiBWYWx1ZSA6LQotCVN1Y2VzcyA6LSBJZiBTZWN0aW9uIGlzIHByZXNlbnQgYW5kIHdyaXRhYmxlLCBjb3JydXB0IHRoZSBzaWcgYW5kIHJldHVybiBTVEFUVVNfU1VDQ0VTUworCVN1Y2Nlc3MgOi0gSWYgU2VjdGlvbiBpcyBwcmVzZW50IGFuZCB3cml0YWJsZSwgY29ycnVwdCB0aGUgc2lnIGFuZCByZXR1cm4gU1RBVFVTX1NVQ0NFU1MKIAlGYWlsdXJlIDotUmV0dXJuIG5lZ2F0aXZlIGVycm9yIGNvZGUKIAogCkBAIC00MzAxLDcgKzQzMDEsNyBAQAogQGVGbGFzaFNlY3Rpb25WYWwgOi0gRmxhc2ggc2VjdGlvbiB2YWwgd2hpY2ggaGFzIGhlYWRlcgogCiBSZXR1cm4gVmFsdWUgOi0KLQlTdWNlc3MgOi0gSWYgU2VjdGlvbiBpcyBwcmVzZW50IGFuZCB3cml0YWJsZSB3cml0ZSB0aGUgc2lnIGFuZCByZXR1cm4gU1RBVFVTX1NVQ0NFU1MKKwlTdWNjZXNzIDotIElmIFNlY3Rpb24gaXMgcHJlc2VudCBhbmQgd3JpdGFibGUgd3JpdGUgdGhlIHNpZyBhbmQgcmV0dXJuIFNUQVRVU19TVUNDRVNTCiAJRmFpbHVyZSA6LVJldHVybiBuZWdhdGl2ZSBlcnJvciBjb2RlCiAKICoqLwpAQCAtNDUwNCw3ICs0NTA0LDcgQEAKIAkJCSAgICAgaW4gY2FzZSBvZiBudW1vZkJ5dGVzICBlcXVhbCB6ZXJvIGNvbXBsZXRlIHNlY3Rpb24gd2lsbCBiZSBjb3BpZWQuCiAKIFJldHVybiBWYWx1ZXMtCi0JU3VjZXNzIDogUmV0dXJuIFNUQVRVU19TVUNDRVNTCisJU3VjY2VzcyA6IFJldHVybiBTVEFUVVNfU1VDQ0VTUwogCUZhaWxsdXJlIDotIHJldHVybiBuZWdhdGl2ZSBlcnJvciBjb2RlCiAKICoqLwpAQCAtNDYyMSw3ICs0NjIxLDcgQEAKIEB1aU9mZnNldCA6LSBGbGFzaCBvZmZzZXQgdGhhdCBoYXMgdG8gYmUgd3JpdHRlbi4KIAogUmV0dXJuIHZhbHVlIDotCi0JU3VjZXNzIDotIE9uIHN1Y2VzcyByZXR1cm4gU1RBVFVTX1NVQ0NFU1MKKwlTdWNjZXNzIDotIE9uIHN1Y2Nlc3MgcmV0dXJuIFNUQVRVU19TVUNDRVNTCiAJRmFpbGx1cmUgOi0gUmV0dXJuIG5lZ2F0aXZlIGVycm9yIGNvZGUKIAogKiovCkBAIC00NjM0LDcgKzQ2MzQsNyBAQAogCVVJTlQgdWlTZWN0QWxpZ25BZGRyID0gMDsKIAlVSU5UIHNpZyA9IDA7CiAKLQkvL21ha2luZyB0aGUgb2Zmc2V0IHNlY3RvciBhbGxpZ25lZAorCS8vbWFraW5nIHRoZSBvZmZzZXQgc2VjdG9yIGFsaWduZWQKIAl1aVNlY3RBbGlnbkFkZHIgPSB1aU9mZnNldCAmIH4oQWRhcHRlci0+dWlTZWN0b3JTaXplIC0gMSk7CiAKIApAQCAtNDY0Myw3ICs0NjQzLDcgQEAKIAkodWlTZWN0QWxpZ25BZGRyID09IEJjbUdldFNlY3Rpb25WYWxFbmRPZmZzZXQoQWRhcHRlcixEU0QwKS0gQWRhcHRlci0+dWlTZWN0b3JTaXplKSkKIAl7CiAKLQkJLy9vZmZzZXQgZnJvbSB0aGUgc2VjdG9yIGJvdW5kcnkgaGF2aW5nIHRoZSBoZWFkZXIgbWFwCisJCS8vb2Zmc2V0IGZyb20gdGhlIHNlY3RvciBib3VuZGFyeSBoYXZpbmcgdGhlIGhlYWRlciBtYXAKIAkJb2Zmc2V0VG9Qcm90ZWN0ID0gQWRhcHRlci0+cHNGbGFzaDJ4Q1NJbmZvLT5PZmZzZXRGcm9tRFNEU3RhcnRGb3JEU0RIZWFkZXIgJSBBZGFwdGVyLT51aVNlY3RvclNpemU7CiAJCUhlYWRlclNpemVUb1Byb3RlY3QgPSBzaXplb2YoRFNEX0hFQURFUik7CiAJCWJIYXNIZWFkZXIgPSBUUlVFIDsKQEAgLTQ2OTcsNyArNDY5Nyw3IEBACiBAQWRhcGF0ZXIgOi0gQmNtIERyaXZlciBQcml2YXRlIERhdGEgU3RydWN0dXJlCiAKIE91dFB1dDotCi0JU2VsZWN0IHRoZSBBcHByb3ByaWF0ZSBjaGlwIGFuZCByZXRybiBzdGF0dXMgU3VjZXNzCisJU2VsZWN0IHRoZSBBcHByb3ByaWF0ZSBjaGlwIGFuZCByZXRybiBzdGF0dXMgU3VjY2VzcwogKiovCiBzdGF0aWMgSU5UIEJjbURvQ2hpcFNlbGVjdChQTUlOSV9BREFQVEVSIEFkYXB0ZXIsIFVJTlQgb2Zmc2V0KQogewpAQCAtNTA4Niw3ICs1MDg2LDcgQEAKIAl7CiAJCWlmKElzU2VjdGlvbldyaXRhYmxlKEFkYXB0ZXIsZUZsYXNoMnhTZWN0aW9uVmFsKSAhPSBUUlVFKQogCQl7Ci0JCQlCQ01fREVCVUdfUFJJTlQoQWRhcHRlcixEQkdfVFlQRV9QUklOVEssIDAsIDAsIlNlY3Rpb24gaXMgbm90IFdyaXRhYmxlLi4uSGVuY2UgY2FudCBDb3JydXB0IHNpZ25hdHVyZSIpOworCQkJQkNNX0RFQlVHX1BSSU5UKEFkYXB0ZXIsREJHX1RZUEVfUFJJTlRLLCAwLCAwLCJTZWN0aW9uIGlzIG5vdCBXcml0YWJsZS4uLkhlbmNlIGNhbid0IENvcnJ1cHQgc2lnbmF0dXJlIik7CiAJCQlyZXR1cm4gU0VDVE9SX0lTX05PVF9XUklUQUJMRTsKIAkJfQogCX0KQEAgLTUxNTUsNyArNTE1NSw3IEBACiAKIAlpZihJc1NlY3Rpb25Xcml0YWJsZShBZGFwdGVyLGVGbGFzaDJ4U2VjdGlvblZhbCkgIT0gVFJVRSkKIAl7Ci0JCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLERCR19UWVBFX1BSSU5USywgMCwgMCwiU2VjdGlvbiBpcyBub3QgV3JpdGFibGUuLi5IZW5jZSBjYW50IENvcnJ1cHQgc2lnbmF0dXJlIik7CisJCUJDTV9ERUJVR19QUklOVChBZGFwdGVyLERCR19UWVBFX1BSSU5USywgMCwgMCwiU2VjdGlvbiBpcyBub3QgV3JpdGFibGUuLi5IZW5jZSBjYW4ndCBDb3JydXB0IHNpZ25hdHVyZSIpOwogCQlyZXR1cm4gU0VDVE9SX0lTX05PVF9XUklUQUJMRTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvUkVBRE1FIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9SRUFETUUKaW5kZXggOTllNjc2Ni4uZjhmYWNiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9SRUFETUUKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9SRUFETUUKQEAgLTcxLDcgKzcxLDcgQEAKIHBhc3NpdmUgb3BlcmF0aW9uLiBUcmFuc21pc3Npb24gb24gdGhvc2UgY2hhbm5lbHMgaXMgc3VwcHJlc3NlZCB1bnRpbAogYXBwcm9wcmlhdGUgb3RoZXIgdHJhZmZpYyBpcyBvYnNlcnZlZCBvbiB0aG9zZSBjaGFubmVscy4KIAotV2l0aGluIHRoZSBkcml2ZXIsIHdlIHVzZSB0aGUgZmljdGljaW91cyBjb3VudHJ5IGNvZGUgIlgyIiB0byByZXByZXNlbnQgdGhpcworV2l0aGluIHRoZSBkcml2ZXIsIHdlIHVzZSB0aGUgZmljdGl0aW91cyBjb3VudHJ5IGNvZGUgIlgyIiB0byByZXByZXNlbnQgdGhpcwogd29ybGR3aWRlIHJlZ3VsYXRvcnkgZG9tYWluLiBUaGVyZSBpcyBjdXJyZW50bHkgbm8gaW50ZXJmYWNlIHRvIGNvbmZpZ3VyZSBhCiBkaWZmZXJlbnQgZG9tYWluLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaF9zZG1tYy5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGhfc2RtbWMuYwppbmRleCA2NTMxM2ZhLi43MWMzNTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaF9zZG1tYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoX3NkbW1jLmMKQEAgLTI2NCw3ICsyNjQsNyBAQAogfQogI2VuZGlmCQkJCS8qIGRlZmluZWQoT09CX0lOVFJfT05MWSkgJiYgZGVmaW5lZChIV19PT0IpICovCiAKLS8qIENvbmZpZ3VyZSBjYWxsYmFjayB0byBjbGllbnQgd2hlbiB3ZSByZWNpZXZlIGNsaWVudCBpbnRlcnJ1cHQgKi8KKy8qIENvbmZpZ3VyZSBjYWxsYmFjayB0byBjbGllbnQgd2hlbiB3ZSByZWNlaXZlIGNsaWVudCBpbnRlcnJ1cHQgKi8KIGV4dGVybiBTRElPSF9BUElfUkMKIHNkaW9oX2ludGVycnVwdF9yZWdpc3RlcihzZGlvaF9pbmZvX3QgKnNkLCBzZGlvaF9jYl9mbl90IGZuLCB2b2lkICphcmdoKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9kaGRfY3VzdG9tX2dwaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvZGhkX2N1c3RvbV9ncGlvLmMKaW5kZXggY2JmYTFjMS4uMWNmNmM1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9kaGRfY3VzdG9tX2dwaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL2RoZF9jdXN0b21fZ3Bpby5jCkBAIC00Niw3ICs0Niw3IEBACiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjZW5kaWYKIAotLyogQ3VzdG9tZXIgc3BlY2lmaWMgSG9zdCBHUElPIGRlZmludGlvbiAgKi8KKy8qIEN1c3RvbWVyIHNwZWNpZmljIEhvc3QgR1BJTyBkZWZpbml0aW9uICAqLwogc3RhdGljIGludCBkaGRfb29iX2dwaW9fbnVtID0gLTE7CS8qIEdHIDE5ICovCiAKIG1vZHVsZV9wYXJhbShkaGRfb29iX2dwaW9fbnVtLCBpbnQsIDA2NDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9kaGRfbGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvZGhkX2xpbnV4LmMKaW5kZXggMDJjNmQ0NC4uZGQwMzc1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9kaGRfbGludXguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL2RoZF9saW51eC5jCkBAIC00NzgsNyArNDc4LDcgQEAKIAkJCWRoZF9zZXRfcGFja2V0X2ZpbHRlcigxLCBkaGQpOwogCiAJCQkvKiBpZiBkdGltIHNraXAgc2V0dXAgYXMgZGVmYXVsdCBmb3JjZSBpdAotCQkJICogdG8gd2FrZSBlYWNoIHRocmlkIGR0aW0KKwkJCSAqIHRvIHdha2UgZWFjaCB0aGlyZCBkdGltCiAJCQkgKiBmb3IgYmV0dGVyIHBvd2VyIHNhdmluZy4KIAkJCSAqIE5vdGUgdGhhdCBzaWRlIGVmZmVjdCBpcyBjaGFuY2UgdG8gbWlzcyBCQy9NQwogCQkJICogcGFja2V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL2RoZF9zZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL2RoZF9zZGlvLmMKaW5kZXggMTA2NjI3MC4uNDY0ZjUyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy9kaGRfc2Rpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvZGhkX3NkaW8uYwpAQCAtMzY1OSw3ICszNjU5LDcgQEAKIAkJCSAqIGNvbnRyb2wgcGt0IHJlY2VpdmVzLgogCQkJICogTGF0ZXIgd2UgdXNlIGJ1ZmZlci1wb2xsIGZvciBkYXRhIGFzIHdlbGwKIAkJCSAqIGFzIGNvbnRyb2wgcGFja2V0cy4KLQkJCSAqIFRoaXMgaXMgcmVxdWlyZWQgYmVjdWFzZSBkaGQgcmVjZWl2ZXMgZnVsbAorCQkJICogVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIGRoZCByZWNlaXZlcyBmdWxsCiAJCQkgKiBmcmFtZSBpbiBnU1BJIHVubGlrZSBTRElPLgogCQkJICogQWZ0ZXIgdGhlIGZyYW1lIGlzIHJlY2VpdmVkIHdlIGhhdmUgdG8KIAkJCSAqIGRpc3Rpbmd1aXNoIHdoZXRoZXIgaXQgaXMgZGF0YQpAQCAtMzc0NCw3ICszNzQ0LDcgQEAKIAkJCQkJYnVzLT5kaGQtPnJ4X2Vycm9ycysrOwogCQkJCQlkaGRfb3Nfc2R1bmxvY2tfcnhxKGJ1cy0+ZGhkKTsKIAkJCQkJLyogRm9yY2UgcmV0cnkgdy9ub3JtYWwgaGVhZGVyIHJlYWQuCi0JCQkJCSAqIERvbid0IGF0dGVtcCBOQUsgZm9yCisJCQkJCSAqIERvbid0IGF0dGVtcHQgTkFLIGZvcgogCQkJCQkgKiBnU1BJCiAJCQkJCSAqLwogCQkJCQlkaGRzZGlvX3J4ZmFpbChidXMsIHRydWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsX21hYzgwMjExLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsX21hYzgwMjExLmMKaW5kZXggNzc0YjRlOS4uYzFiMDdhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bF9tYWM4MDIxMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xfbWFjODAyMTEuYwpAQCAtMTA3OSw3ICsxMDc5LDcgQEAKIAkgKi8KIAlody0+bWF4X3JhdGVzID0gMjsJLyogUHJpbWFyeSByYXRlIGFuZCAxIGZhbGxiYWNrIHJhdGUgKi8KIAotCWh3LT5jaGFubmVsX2NoYW5nZV90aW1lID0gNyAqIDEwMDA7CS8qIGNoYW5uZWwgY2hhbmdlIHRpbWUgaXMgZGVwZW5kYW50IG9uIGNoaXAgYW5kIGJhbmQgICovCisJaHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSA3ICogMTAwMDsJLyogY2hhbm5lbCBjaGFuZ2UgdGltZSBpcyBkZXBlbmRlbnQgb24gY2hpcCBhbmQgYmFuZCAgKi8KIAlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKTsKIAogCWh3LT5yYXRlX2NvbnRyb2xfYWxnb3JpdGhtID0gIm1pbnN0cmVsX2h0IjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX2FtcGR1LmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19hbXBkdS5jCmluZGV4IGM2Y2RjZDkuLmYwMDg2NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX2FtcGR1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfYW1wZHUuYwpAQCAtODksNyArODksNyBAQAogLyogc3RydWN0dXJlIHRvIGhvbGQgdHggZmlmbyBpbmZvcm1hdGlvbiBhbmQgcHJlLWxvYWRpbmcgc3RhdGUKICAqIGNvdW50ZXJzIHNwZWNpZmljIHRvIHR4IHVuZGVyZmxvd3Mgb2YgYW1wZHVzCiAgKiBzb21lIGNvdW50ZXJzIG1pZ2h0IGJlIHJlZHVuZGFudCB3aXRoIHRoZSBvbmVzIGluIHdsYyBvciBhbXBkdSBzdHJ1Y3R1cmVzLgotICogVGhpcyBhbGxvd3MgdG8gbWFpbnRhaW4gYSBzcGVjaWZpYyBzdGF0ZSBpbmRlcGVuZGFudGx5IG9mCisgKiBUaGlzIGFsbG93cyB0byBtYWludGFpbiBhIHNwZWNpZmljIHN0YXRlIGluZGVwZW5kZW50bHkgb2YKICAqIGhvdyBvZnRlbiBhbmQvb3Igd2hlbiB0aGUgd2xjIGNvdW50ZXJzIGFyZSB1cGRhdGVkLgogICovCiB0eXBlZGVmIHN0cnVjdCB3bGNfZmlmb19pbmZvIHsKQEAgLTI2NSw3ICsyNjUsNyBAQAogCiAJc2NiX2FtcGR1LT5tYXhfcGR1ID0gKHU4KSBhbXBkdS0+d2xjLT5wdWItPnR1bmFibGVzLT5hbXBkdW51bW1wZHU7CiAKLQkvKiBnbyBiYWNrIHRvIGxlZ2FjeSBzaXplIGlmIHNvbWUgcHJlbG9hZGluZyBpcyBvY2N1cmluZyAqLworCS8qIGdvIGJhY2sgdG8gbGVnYWN5IHNpemUgaWYgc29tZSBwcmVsb2FkaW5nIGlzIG9jY3VycmluZyAqLwogCWZvciAoaSA9IDA7IGkgPCBOVU1fRkZQTERfRklGTzsgaSsrKSB7CiAJCWlmIChhbXBkdS0+Zmlmb190YltpXS5hbXBkdV9wbGRfc2l6ZSA+IEZGUExEX1BMRF9JTkNSKQogCQkJc2NiX2FtcGR1LT5tYXhfcGR1ID0gQU1QRFVfTlVNX01QRFVfTEVHQUNZOwpAQCAtNDA2LDcgKzQwNiw3IEBACiAJCS8qCiAJCSAgIGNvbXB1dGUgYSBuZXcgZG1hIHhmZXIgcmF0ZSBmb3IgbWF4X21wZHUgQCBtYXggbWNzLgogCQkgICBUaGlzIGlzIHRoZSBtaW5pbXVtIGRtYSByYXRlIHRoYXQKLQkJICAgY2FuIGFjaGVpdmUgbm8gdW5mZXJmbG93IGNvbmRpdGlvbiBmb3IgdGhlIGN1cnJlbnQgbXBkdSBzaXplLgorCQkgICBjYW4gYWNoaWV2ZSBubyB1bmZlcmZsb3cgY29uZGl0aW9uIGZvciB0aGUgY3VycmVudCBtcGR1IHNpemUuCiAJCSAqLwogCQkvKiBub3RlIDogd2UgZGl2aWRlL211bHRpcGx5IGJ5IDEwMCB0byBhdm9pZCBpbnRlZ2VyIG92ZXJmbG93cyAqLwogCQlmaWZvLT5kbWF4ZmVycmF0ZSA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19ibWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19ibWFjLmMKaW5kZXggNWE5NmRjMy4uNGI2ZTE4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfYm1hYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX2JtYWMuYwpAQCAtMTkxNSw3ICsxOTE1LDcgQEAKIAogCXBoeV9id19jbGtiaXRzID0gd2xjX3BoeV9jbGtfYndiaXRzKHdsY19ody0+YmFuZC0+cGkpOwogCi0JLyogU3BlY2ZpYyByZXNldCBzZXF1ZW5jZSByZXF1aXJlZCBmb3IgTlBIWSByZXYgMyBhbmQgNCAqLworCS8qIFNwZWNpZmljIHJlc2V0IHNlcXVlbmNlIHJlcXVpcmVkIGZvciBOUEhZIHJldiAzIGFuZCA0ICovCiAJaWYgKFdMQ0lTTlBIWSh3bGNfaHctPmJhbmQpICYmIE5SRVZfR0Uod2xjX2h3LT5iYW5kLT5waHlyZXYsIDMpICYmCiAJICAgIE5SRVZfTEUod2xjX2h3LT5iYW5kLT5waHlyZXYsIDQpKSB7CiAJCS8qIFNldCB0aGUgUEhZIGJhbmR3aWR0aCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfbWFpbi5jCmluZGV4IDYzOWI1ZDcuLmFiN2FiODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX21haW4uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19tYWluLmMKQEAgLTYyODMsNyArNjI4Myw3IEBACiAJICAgICAgICgocHJlYW1ibGVfdHlwZVsxXSA9PSBXTENfTU1fUFJFQU1CTEUpID09CiAJCSh0eGgtPk1Nb2RlRmJyTGVuICE9IDApKSk7CiAKLQlhYyA9IHdtZV9maWZvMmFjW3F1ZXVlXTsKKwlhYyA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhwKTsKIAlpZiAoU0NCX1dNRShzY2IpICYmIHFvcyAmJiB3bGMtPmVkY2ZfdHhvcFthY10pIHsKIAkJdWludCBmcmFnX2R1ciwgZHVyLCBkdXJfZmFsbGJhY2s7CiAKQEAgLTY5MTksOCArNjkxOSw3IEBACiAJCXByZWFtYmxlID0gMDsKIAkJaWYgKElTX0NDSyhyc3BlYykpIHsKIAkJCWlmIChyeGgtPlBoeVJ4U3RhdHVzXzAgJiBQUlhTMF9TSE9SVEgpCi0JCQkJV0xfRVJST1IoIlNob3J0IENDS1xuIik7Ci0JCQlyeF9zdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19TSE9SVFBSRTsKKwkJCQlyeF9zdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19TSE9SVFBSRTsKIAkJfSBlbHNlIGlmIChJU19PRkRNKHJzcGVjKSkgewogCQkJcnhfc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfU0hPUlRQUkU7CiAJCX0gZWxzZSB7CkBAIC03MDc5LDEwICs3MDc4LDggQEAKIAlpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3JlcShoLT5mcmFtZV9jb250cm9sKSkKIAkJZ290byB0b3NzOwogCi0JaWYgKGlzX2Ftc2R1KSB7Ci0JCVdMX0VSUk9SKCIlczogaXNfYW1zZHUgY2F1c2luZyB0b3NzXG4iLCBfX2Z1bmNfXyk7CisJaWYgKGlzX2Ftc2R1KQogCQlnb3RvIHRvc3M7Ci0JfQogCiAJd2xjX3JlY3ZjdGwod2xjLCByeGgsIHApOwogCXJldHVybjsKQEAgLTgyOTUsNyArODI5Miw3IEBACiAJcmV0dXJuIChxLT5zdG9wcGVkICYgcHJpb19tYXNrKSA9PSBwcmlvX21hc2s7CiB9CiAKLS8qIHByb3BvZ2F0ZSB0aGUgZmxvdyBjb250cm9sIHRvIGFsbCBpbnRlcmZhY2VzIHVzaW5nIHRoZSBnaXZlbiB0eCBxdWV1ZSAqLworLyogcHJvcGFnYXRlIHRoZSBmbG93IGNvbnRyb2wgdG8gYWxsIGludGVyZmFjZXMgdXNpbmcgdGhlIGdpdmVuIHR4IHF1ZXVlICovCiB2b2lkIHdsY190eGZsb3djb250cm9sKHN0cnVjdCB3bGNfaW5mbyAqd2xjLCBzdHJ1Y3Qgd2xjX3R4cV9pbmZvICpxaSwKIAkJICAgICAgIGJvb2wgb24sIGludCBwcmlvKQogewpAQCAtODQ2Miw3ICs4NDU5LDcgQEAKIH0KIAogLyoKLSAqIEZsYWcgJ3NjYW4gaW4gcHJvZ3Jlc3MnIHRvIHdpdGhvbGQgZHluYW1pYyBwaHkgY2FsaWJyYXRpb24KKyAqIEZsYWcgJ3NjYW4gaW4gcHJvZ3Jlc3MnIHRvIHdpdGhob2xkIGR5bmFtaWMgcGh5IGNhbGlicmF0aW9uCiAgKi8KIHZvaWQgd2xjX3NjYW5fc3RhcnQoc3RydWN0IHdsY19pbmZvICp3bGMpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19yYXRlLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3dsY19yYXRlLmMKaW5kZXggMGNmYTM2MC4uZDI4NGYxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy93bGNfcmF0ZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvd2xjX3JhdGUuYwpAQCAtMzMyLDcgKzMzMiw3IEBACiAJCXJldHVybiBmYWxzZTsKIH0KIAotLyogY2FsdWNsYXRlIHRoZSByYXRlIG9mIGEgcngnZCBmcmFtZSBhbmQgcmV0dXJuIGl0IGFzIGEgcmF0ZXNwZWMgKi8KKy8qIGNhbGN1bGF0ZSB0aGUgcmF0ZSBvZiBhIHJ4J2QgZnJhbWUgYW5kIHJldHVybiBpdCBhcyBhIHJhdGVzcGVjICovCiByYXRlc3BlY190IEJDTUZBU1RQQVRIIHdsY19jb21wdXRlX3JzcGVjKGQxMXJ4aGRyX3QgKnJ4aCwgdTggKnBsY3ApCiB7CiAJaW50IHBoeV90eXBlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL2JjbXNyb21fZm10LmggYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvYmNtc3JvbV9mbXQuaAppbmRleCBhZTJiZmY4Li40NzY4OTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvYmNtc3JvbV9mbXQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvYmNtc3JvbV9mbXQuaApAQCAtMTAzLDcgKzEwMyw3IEBACiAKICNkZWZpbmUJU1JPTV9DUkNSRVYJCTYzCiAKLS8qIFNST00gUmV2IDQ6IFJlYWxsb2NhdGUgdGhlIHNvZnR3YXJlIHBhcnQgb2YgdGhlIHNyb20gdG8gYWNjb21vZGF0ZQorLyogU1JPTSBSZXYgNDogUmVhbGxvY2F0ZSB0aGUgc29mdHdhcmUgcGFydCBvZiB0aGUgc3JvbSB0byBhY2NvbW1vZGF0ZQogICogTUlNTyBmZWF0dXJlcy4gSXQgYXNzdW1lcyB1cCB0byB0d28gUENJRSBmdW5jdGlvbnMgYW5kIDQ0MCBieXRlcwogICogb2YgdXNlYWJsZSBzcm9tIGkuZS4gdGhlIHVzZWFibGUgc3RvcmFnZSBpbiBjaGlwcyB3aXRoIE9UUCB0aGF0CiAgKiBpbXBsZW1lbnRzIGhhcmR3YXJlIHJlZHVuZGFuY3kuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvaG5kc29jLmggYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2luY2x1ZGUvaG5kc29jLmgKaW5kZXggOTc0N2NjNC4uNjQzNTY4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9pbmNsdWRlL2huZHNvYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvaW5jbHVkZS9obmRzb2MuaApAQCAtMTgxLDcgKzE4MSw3IEBACiAgKiBjb252ZW50aW9ucyBmb3IgdGhlIHVzZSB0aGUgZmxhc2ggc3BhY2U6CiAgKi8KIAotLyogTWludW11bSBhbW91bnQgb2YgZmxhc2ggd2Ugc3VwcG9ydCAqLworLyogTWluaW11bSBhbW91bnQgb2YgZmxhc2ggd2Ugc3VwcG9ydCAqLwogI2RlZmluZSBGTEFTSF9NSU4JCTB4MDAwMjAwMDAJLyogTWluaW11bSBmbGFzaCBzaXplICovCiAKIC8qIEEgYm9vdC9iaW5hcnkgbWF5IGhhdmUgYW4gZW1iZWRkZWQgYmxvY2sgdGhhdCBkZXNjcmliZXMgaXRzIHNpemUgICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvYmNtb3RwLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvYmNtb3RwLmMKaW5kZXggYmE3MWMxMC4uMTc5OTEyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL2JjbW90cC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9iY21vdHAuYwpAQCAtMjEzLDcgKzIxMyw3IEBACiAJcmV0dXJuIChpbnQpc3Q7CiB9CiAKLS8qIENhbGN1bGF0ZSBtYXggSFcvU1cgcmVnaW9uIGJ5dGUgc2l6ZSBieSBzdWJzdHJhY3RpbmcgZnVzZSByZWdpb24gYW5kIGNoZWNrc3VtIHNpemUsCisvKiBDYWxjdWxhdGUgbWF4IEhXL1NXIHJlZ2lvbiBieXRlIHNpemUgYnkgc3VidHJhY3RpbmcgZnVzZSByZWdpb24gYW5kIGNoZWNrc3VtIHNpemUsCiAgKiBvc2l6ZXcgaXMgb2ktPndzaXplIChPVFAgc2l6ZSAtIEdVIHNpemUpIGluIHdvcmRzCiAgKi8KIHN0YXRpYyBpbnQgaXB4b3RwX21heF9yZ25zeihzaV90ICpzaWgsIGludCBvc2l6ZXcpCkBAIC0yMjksNyArMjI5LDcgQEAKIAkJcmV0ID0gb3NpemV3ICogMiAtIE9UUF9TWl9GVV83MiAtIE9UUF9TWl9DSEVDS1NVTTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJQVNTRVJUKDApOwkvKiBEb24ndCBrb253IGFib3V0IHRoaXMgY2hpcCAqLworCQlBU1NFUlQoMCk7CS8qIERvbid0IGtub3cgYWJvdXQgdGhpcyBjaGlwICovCiAJfQogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9iY21zcm9tLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvYmNtc3JvbS5jCmluZGV4IGVjYTM1YjkuLjg1MGJmYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9iY21zcm9tLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL2JjbXNyb20uYwpAQCAtMTg1OSw3ICsxODU5LDcgQEAKIAogCS8qCiAJICogQXBwbHkgQ1JDIG92ZXIgU1JPTSBjb250ZW50IHJlZ2FyZGxlc3MgU1JPTSBpcyBwcmVzZW50IG9yIG5vdCwKLQkgKiBhbmQgdXNlIHZhcmlhYmxlIDxkZXZwYXRoPnNyb21yZXYncyBleGlzdGFuY2UgaW4gZmxhc2ggdG8gZGVjaWRlCisJICogYW5kIHVzZSB2YXJpYWJsZSA8ZGV2cGF0aD5zcm9tcmV2J3MgZXhpc3RlbmNlIGluIGZsYXNoIHRvIGRlY2lkZQogCSAqIGlmIHdlIHNob3VsZCByZXR1cm4gYW4gZXJyb3Igd2hlbiBDUkMgZmFpbHMgb3IgcmVhZCBTUk9NIHZhcmlhYmxlcwogCSAqIGZyb20gZmxhc2guCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvaG5kZG1hLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvaG5kZG1hLmMKaW5kZXggOGE4MWViOS4uYmUzMzlmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL2huZGRtYS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9obmRkbWEuYwpAQCAtMTE3OSw3ICsxMTc5LDcgQEAKIAkJICAgKHJhbmdlID09IEhORERNQV9SQU5HRV9BTEwpID8gImFsbCIgOgogCQkgICAoKHJhbmdlID09CiAJCSAgICAgSE5ERE1BX1JBTkdFX1RSQU5TTUlUVEVEKSA/ICJ0cmFuc21pdHRlZCIgOgotCQkgICAgInRyYW5zZmVyZWQiKSkpOworCQkgICAgInRyYW5zZmVycmVkIikpKTsKIAogCWlmIChkaS0+dHhpbiA9PSBkaS0+dHhvdXQpCiAJCXJldHVybjsKQEAgLTE1NDksNyArMTU0OSw3IEBACiAgKiBJZiByYW5nZSBpcyBITkRETUFfUkFOR0VfVFJBTlNNSVRURUQsIHJlY2xhaW0gZGVzY3JpcHRvcnMgdGhhdCBoYXZlIGJlCiAgKiB0cmFuc21pdHRlZCBhcyBub3RlZCBieSB0aGUgaGFyZHdhcmUgIkN1cnJEZXNjciIgcG9pbnRlci4KICAqIElmIHJhbmdlIGlzIEhORERNQV9SQU5HRV9UUkFOU0ZFUkVELCByZWNsYWltIGRlc2NyaXB0b3JzIHRoYXQgaGF2ZSBiZQotICogdHJhbnNmZXJlZCBieSB0aGUgRE1BIGFzIG5vdGVkIGJ5IHRoZSBoYXJkd2FyZSAiQWN0aXZlRGVzY3IiIHBvaW50ZXIuCisgKiB0cmFuc2ZlcnJlZCBieSB0aGUgRE1BIGFzIG5vdGVkIGJ5IHRoZSBoYXJkd2FyZSAiQWN0aXZlRGVzY3IiIHBvaW50ZXIuCiAgKiBJZiByYW5nZSBpcyBITkRETUFfUkFOR0VfQUxMLCByZWNsYWltIGFsbCB0eGQocykgcG9zdGVkIHRvIHRoZSByaW5nIGFuZAogICogcmV0dXJuIGFzc29jaWF0ZWQgcGFja2V0IHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIGhhcmR3YXJlIHBvaW50ZXJzLgogICovCkBAIC0xNTYzLDcgKzE1NjMsNyBAQAogCQkgICAocmFuZ2UgPT0gSE5ERE1BX1JBTkdFX0FMTCkgPyAiYWxsIiA6CiAJCSAgICgocmFuZ2UgPT0KIAkJICAgICBITkRETUFfUkFOR0VfVFJBTlNNSVRURUQpID8gInRyYW5zbWl0dGVkIiA6Ci0JCSAgICAidHJhbnNmZXJlZCIpKSk7CisJCSAgICAidHJhbnNmZXJyZWQiKSkpOwogCiAJaWYgKGRpLT5udHhkID09IDApCiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL3NicGNtY2lhLmggYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvc2JwY21jaWEuaAppbmRleCA2Yjk5MjNmNS4uZDRjMTU2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL3NicGNtY2lhLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL3NicGNtY2lhLmgKQEAgLTEwOSw3ICsxMDksNyBAQAogI2RlZmluZQlDSVNUUExfQ0ZUQUJMRQkJMHgxYgkvKiBDb25maWcgdGFibGUgZW50cnkgKi8KICNkZWZpbmUJQ0lTVFBMX0VORAkJMHhmZgkvKiBFbmQgb2YgdGhlIENJUyB0dXBsZSBjaGFpbiAqLwogCi0vKiBGdW5jdGlvbiBpZGVudGlmaWVyIHByb3ZpZGVzIGNvbnRleHQgZm9yIHRoZSBmdW5jdGlvbiBleHRlbnRpb25zIHR1cGxlICovCisvKiBGdW5jdGlvbiBpZGVudGlmaWVyIHByb3ZpZGVzIGNvbnRleHQgZm9yIHRoZSBmdW5jdGlvbiBleHRlbnNpb25zIHR1cGxlICovCiAjZGVmaW5lIENJU1RQTF9GSURfU0RJTwkJMHgwYwkvKiBFeHRlbnNpb25zIGRlZmluZWQgYnkgU0RJTyBzcGVjICovCiAKIC8qIEZ1bmN0aW9uIGV4dGVuc2lvbnMgZm9yIExBTnMgKGFzc3VtZWQgZm9yIGV4dGVuc2lvbnMgb3RoZXIgdGhhbiBTRElPKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL3NpdXRpbHMuYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvdXRpbC9zaXV0aWxzLmMKaW5kZXggZWQxNjhjZS4uNmViZDdmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS91dGlsL3NpdXRpbHMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3V0aWwvc2l1dGlscy5jCkBAIC0xMzE5LDcgKzEzMTksNyBAQAogfQogCiAvKgotICogIGNsb2NrIGNvbnRyb2wgcG9saWN5IGZ1bmN0aW9uIHRocm91Z2h0IGNoaXBjb21tb24KKyAqICBjbG9jayBjb250cm9sIHBvbGljeSBmdW5jdGlvbiB0aHJvdWdoIGNoaXBjb21tb24KICAqCiAgKiAgICBzZXQgZHluYW1pYyBjbGsgY29udHJvbCBtb2RlIChmb3JjZXNsb3csIGZvcmNlZmFzdCwgZHluYW1pYykKICAqICAgIHJldHVybnMgdHJ1ZSBpZiB3ZSBhcmUgZm9yY2luZyBmYXN0IGNsb2NrCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmMKaW5kZXggYTRjZWIyOWMuLmU3ZTcyYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2ZvcHMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmMKQEAgLTIwNjQsNyArMjA2NCw3IEBACiAJCQkgICAgIENPTUVESV9DQl9PVkVSRkxPVykpIHsKIAkJcnVuZmxhZ3NfbWFzayB8PSBTUkZfUlVOTklORzsKIAl9Ci0JLyogcmVtZW1iZXIgaWYgYW4gZXJyb3IgZXZlbnQgaGFzIG9jY3VyZWQsIHNvIGFuIGVycm9yCisJLyogcmVtZW1iZXIgaWYgYW4gZXJyb3IgZXZlbnQgaGFzIG9jY3VycmVkLCBzbyBhbiBlcnJvcgogCSAqIGNhbiBiZSByZXR1cm5lZCB0aGUgbmV4dCB0aW1lIHRoZSB1c2VyIGRvZXMgYSByZWFkKCkgKi8KIAlpZiAocy0+YXN5bmMtPmV2ZW50cyAmIChDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfT1ZFUkZMT1cpKSB7CiAJCXJ1bmZsYWdzX21hc2sgfD0gU1JGX0VSUk9SOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9DaHJvbm8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfQ2hyb25vLmMKaW5kZXggNjQ0YmRhNC4uNDgyYTQxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9DaHJvbm8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0Nocm9uby5jCkBAIC0xMjQsOSArMTI0LDkgQEAKIHwgICAgICAgICAgICAgICAgICAgICAtNTogVGhlIHNlbGVjdGVkIFBDSSBpbnB1dCBjbG9jayBpcyB3cm9uZyAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgIC02OiBUaW1pbmcgdW5pdHkgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgLTc6IEJhc2UgdGltaW5nIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAtODogWW91IGNhbiBub3QgdXNlZCB0aGUgNDBNSHogY2xvY2sgc2VsZWN0aW9uIHdpY2ggICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC04OiBZb3UgY2FuIG5vdCB1c2VkIHRoZSA0ME1IeiBjbG9jayBzZWxlY3Rpb24gd2l0aCAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgYm9hcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAtOTogWW91IGNhbiBub3QgdXNlZCB0aGUgNDBNSHogY2xvY2sgc2VsZWN0aW9uIHdpY2ggICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC05OiBZb3UgY2FuIG5vdCB1c2VkIHRoZSA0ME1IeiBjbG9jayBzZWxlY3Rpb24gd2l0aCAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgQ0hST05PUyB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogKi8KQEAgLTcyMSwxMCArNzIxLDEwIEBACiAJCQkJCQkJCX0KIAkJCQkJCQl9IGVsc2UgewogCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JCQkJCQkJCS8qIFlvdSBjYW4gbm90IHVzZWQgdGhlIDQwTUh6IGNsb2NrIHNlbGVjdGlvbiB3aWNoIHRoaXMgYm9hcmQgKi8KKwkJCQkJCQkJLyogWW91IGNhbiBub3QgdXNlIHRoZSA0ME1IeiBjbG9jayBzZWxlY3Rpb24gd2l0aCB0aGlzIGJvYXJkICovCiAJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotCQkJCQkJCQlEUFJJTlRLKCJZb3UgY2FuIG5vdCB1c2VkIHRoZSA0ME1IeiBjbG9jayBzZWxlY3Rpb24gd2ljaCB0aGlzIGJvYXJkXG4iKTsKKwkJCQkJCQkJRFBSSU5USygiWW91IGNhbiBub3QgdXNlZCB0aGUgNDBNSHogY2xvY2sgc2VsZWN0aW9uIHdpdGggdGhpcyBib2FyZFxuIik7CiAJCQkJCQkJCWlfUmV0dXJuVmFsdWUgPQogCQkJCQkJCQkJLTg7CiAJCQkJCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2FtY2NfUzU5MjAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9hbWNjX1M1OTIwLmMKaW5kZXggOTBlNzFlMS4uYjk3MzA5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2FtY2NfUzU5MjAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfYW1jY19TNTkyMC5jCkBAIC01OSw3ICs1OSw3IEBACiAvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyovCiAvKnwgSW5wdXQgUGFyYW1ldGVycyAgOiBpbnQgICAgaV9OYk9mV29yZHNUb1JlYWQgOiBOYnIuIG9mIHdvcmQgdG8gcmVhZCAgICAgICAgfCovCiAvKnwgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZHdfUENJQm9hcmRFZXByb21BZGRyZXNzIDogQWRkcmVzcyBvZiB0aGUgZWVwcm9tIHwqLwotLyp8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgICB3X0VlcHJvbVN0YXJ0QWRkcmVzcyA6IEVlcHJvbSBzdHJhdCBhZGRyZXNzICAgICB8Ki8KKy8qfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICAgd19FZXByb21TdGFydEFkZHJlc3MgOiBFZXByb20gc3RhcnQgYWRkcmVzcyAgICAgfCovCiAvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyovCiAvKnwgT3V0cHV0IFBhcmFtZXRlcnMgOiB1bnNpZ25lZCBzaG9ydCAqIHB3X0RhdGFSZWFkIDogUmVhZCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICB8Ki8KIC8qKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIwMzIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIwMzIuYwppbmRleCA5ZGQ4NTdkLi4wMDIyOTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kyMDMyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjAzMi5jCkBAIC00OTgsNyArNDk4LDcgQEAKIAlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKIAl1bnNpZ25lZCBpbnQgdWlfRE87CiAKLQl1aV9ETyA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QX0lSUSkgJiAweDE7CS8qIENoZWNrIGlmIFZDQyBPUiBDQyBpbnRlcnJ1cHQgaGFzIG9jY3VyZWQuICovCisJdWlfRE8gPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMzJfRElHSVRBTF9PUF9JUlEpICYgMHgxOwkvKiBDaGVjayBpZiBWQ0MgT1IgQ0MgaW50ZXJydXB0IGhhcyBvY2N1cnJlZC4gKi8KIAogCWlmICh1aV9ETyA9PSAwKSB7CiAJCXByaW50aygiXG5JbnRlcnJ1cHQgZnJvbSB1bktub3duIHNvdXJjZVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMTIwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMTIwLmMKaW5kZXggYTgxM2ZkYi4uZmM2MTIxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzEyMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMxMjAuYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJdW5zaWduZWQgc2hvcnQgdXNfQ29udmVydFRpbWluZywgdXNfVG1wVmFsdWUsIGk7CiAJdW5zaWduZWQgY2hhciBiX1RtcDsKIAotCS8qICBmaXggY29udmVydGlvbiB0aW1lIHRvIDEwIHVzICovCisJLyogIGZpeCBjb252ZXJzaW9uIHRpbWUgdG8gMTAgdXMgKi8KIAlpZiAoIWRldnByaXYtPnVpX0VvY0Vvc0NvbnZlcnNpb25UaW1lKSB7CiAJCXByaW50aygiTm8gdGltZXIwIFZhbHVlIHVzaW5nIDEwIHVzXG4iKTsKIAkJdXNfQ29udmVydFRpbWluZyA9IDEwOwpAQCAtMjUxLDcgKzI1MSw3IEBACiAJCQkJQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzBfV09SRDsKIAkJCW91dGIoYl9UbXAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDApOwogCi0JCQkvKiBTZXQgdGhlIGNvbnZlcnRpb24gdGltZSAqLworCQkJLyogU2V0IHRoZSBjb252ZXJzaW9uIHRpbWUgKi8KIAkJCW91dHcodXNfQ29udmVydFRpbWluZywKIAkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9WQUxVRSk7CiAKQEAgLTMxMSw3ICszMTEsNyBAQAogCQkJCUFQQ0kzMTIwX1NFTEVDVF9USU1FUl8wX1dPUkQ7CiAJCQlvdXRiKGJfVG1wLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQwKTsKIAotCQkJLyogU2V0IHRoZSBjb252ZXJ0aW9uIHRpbWUgKi8KKwkJCS8qIFNldCB0aGUgY29udmVyc2lvbiB0aW1lICovCiAJCQlvdXR3KHVzX0NvbnZlcnRUaW1pbmcsCiAJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfVkFMVUUpOwogCkBAIC0zNTQsOSArMzU0LDkgQEAKIAkJCS8qIFN0YXJ0IGNvbnZlcnNpb24gKi8KIAkJCW91dHcoMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfU1RBUlRfQ09OVkVSU0lPTik7CiAKLQkJCS8qIFdhaXRpbmcgb2YgZW5kIG9mIGNvbnZlcnRpb24gaWYgaW50ZXJydXB0IGlzIG5vdCBpbnN0YWxsZWQgKi8KKwkJCS8qIFdhaXRpbmcgb2YgZW5kIG9mIGNvbnZlcnNpb24gaWYgaW50ZXJydXB0IGlzIG5vdCBpbnN0YWxsZWQgKi8KIAkJCWlmIChkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9PSBBUENJMzEyMF9ESVNBQkxFKSB7Ci0JCQkJLyogV2FpdGluZyB0aGUgZW5kIG9mIGNvbnZlcnRpb24gKi8KKwkJCQkvKiBXYWl0aW5nIHRoZSBlbmQgb2YgY29udmVyc2lvbiAqLwogCQkJCWRvIHsKIAkJCQkJdXNfVG1wVmFsdWUgPQogCQkJCQkJaW53KGRldnByaXYtPmlvYmFzZSArCkBAIC04NTQsNyArODU0LDcgQEAKIAkJCQliX0RpZ2l0YWxPdXRwdXRSZWdpc3RlcikgJiAweEYwKSB8CiAJCQlBUENJMzEyMF9TRUxFQ1RfVElNRVJfMF9XT1JEOwogCQlvdXRiKGJfVG1wLCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDApOwotCQkvKiBTZXQgdGhlIGNvbnZlcnRpb24gdGltZSAqLworCQkvKiBTZXQgdGhlIGNvbnZlcnNpb24gdGltZSAqLwogCQlvdXR3KCgodW5zaWduZWQgc2hvcnQpIHVpX1RpbWVyVmFsdWUwKSwKIAkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfVkFMVUUpOwogCQlicmVhazsKQEAgLTg3Miw3ICs4NzIsNyBAQAogCQkJCWJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyKSAmIDB4RjApIHwKIAkJCUFQQ0kzMTIwX1NFTEVDVF9USU1FUl8xX1dPUkQ7CiAJCW91dGIoYl9UbXAsIGRldi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMCk7Ci0JCS8qIFNldCB0aGUgY29udmVydGlvbiB0aW1lICovCisJCS8qIFNldCB0aGUgY29udmVyc2lvbiB0aW1lICovCiAJCW91dHcoKCh1bnNpZ25lZCBzaG9ydCkgdWlfVGltZXJWYWx1ZTEpLAogCQkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9WQUxVRSk7CiAKQEAgLTg4OSw3ICs4ODksNyBAQAogCQkJQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzBfV09SRDsKIAkJb3V0YihiX1RtcCwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQwKTsKIAotCQkvKiBTZXQgdGhlIGNvbnZlcnRpb24gdGltZSAqLworCQkvKiBTZXQgdGhlIGNvbnZlcnNpb24gdGltZSAqLwogCQlvdXR3KCgodW5zaWduZWQgc2hvcnQpIHVpX1RpbWVyVmFsdWUwKSwKIAkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfVkFMVUUpOwogCQlicmVhazsKQEAgLTExMDQsNyArMTEwNCw3IEBACiAKIC8qCiAgKiA0Ci0gKiBhbW91bnQgb2YgYnl0ZXMgdG8gYmUgdHJhbnNmZXJlZCBzZXQgdHJhbnNmZXIgY291bnQgdXNlZCBBRERPTgorICogYW1vdW50IG9mIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkIHNldCB0cmFuc2ZlciBjb3VudCB1c2VkIEFERE9OCiAgKiBNV1RDIHJlZ2lzdGVyIGNvbW1lbnRlZCB0ZXN0aW5nCiAgKiBvdXRsKGRldnByaXYtPnVpX0RtYUJ1ZmZlclVzZXNpemVbMF0sCiAgKiBkZXZwcml2LT5pX0lvYmFzZUFkZG9uK0FNQ0NfT1BfUkVHX0FNV1RDKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMxMjAuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMxMjAuaAppbmRleCBiM2M4MTk3Li41MGViMGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMTIwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzEyMC5oCkBAIC0xNjksNyArMTY5LDcgQEAKIAogCXVuc2lnbmVkIGNoYXIgYl9UeXBlOwkJLyogRU9DIG9yIEVPUyAqLwogCXVuc2lnbmVkIGNoYXIgYl9JbnRlcnJ1cHRGbGFnOwkvKiBJbnRlcnJ1cHQgdXNlIG9yIG5vdCAgICAgICAgICAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBpbnQgdWlfQ29udmVydFRpbWluZzsJLyogU2VsZWN0aW9uIG9mIHRoZSBjb252ZXJ0aW9uIHRpbWUgICAgICAgICovCisJdW5zaWduZWQgaW50IHVpX0NvbnZlcnRUaW1pbmc7CS8qIFNlbGVjdGlvbiBvZiB0aGUgY29udmVyc2lvbiB0aW1lICAgICAgICAqLwogCXVuc2lnbmVkIGNoYXIgYl9OYnJPZkNoYW5uZWw7CS8qIE51bWJlciBvZiBjaGFubmVsIHRvIHJlYWQgICAgICAgICAgICAgICAqLwogCXVuc2lnbmVkIGludCB1aV9DaGFubmVsTGlzdFtNQVhfQU5BTE9HSU5QVVRfQ0hBTk5FTFNdOwkvKiBOdW1iZXIgb2YgdGhlIGNoYW5uZWwgdG8gYmUgcmVhZCAgICAgICAgKi8KIAl1bnNpZ25lZCBpbnQgdWlfUmFuZ2VMaXN0W01BWF9BTkFMT0dJTlBVVF9DSEFOTkVMU107CS8qIEdhaW4gb2YgZWFjaCBjaGFubmVsICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzIwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzIwMC5jCmluZGV4IGE5M2UyMzQuLmM3NWExYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMyMDAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMjAwLmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLwogLyp8IElucHV0IFBhcmFtZXRlcnMgIDogaW50ICAgIGlfTmJPZldvcmRzVG9SZWFkIDogTmJyLiBvZiB3b3JkIHRvIHJlYWQgICAgICAgIHwqLwogLyp8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyA6IEFkZHJlc3Mgb2YgdGhlIGVlcHJvbSB8Ki8KLS8qfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICAgd19FZXByb21TdGFydEFkZHJlc3MgOiBFZXByb20gc3RyYXQgYWRkcmVzcyAgICAgfCovCisvKnwgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAgIHdfRWVwcm9tU3RhcnRBZGRyZXNzIDogRWVwcm9tIHN0YXJ0IGFkZHJlc3MgICAgIHwqLwogLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLwogLyp8IE91dHB1dCBQYXJhbWV0ZXJzIDogdW5zaWduZWQgc2hvcnQgKiBwd19EYXRhUmVhZCA6IFJlYWQgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgfCovCiAvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyovCkBAIC04NDksNyArODQ5LDcgQEAKICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6U2luZ2xlIFJlYWQKICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6UmVhZCBtb3JlIGNoYW5uZWwKICAgMjpTaW5nbGUgc2NhbgotICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzpDb250aW5vdXMgU2NhbgorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzpDb250aW51b3VzIFNjYW4KICAgZGF0YVsxM10gICAgICAgICAgOk51bWJlciBvZiBjaGFubmVscyB0byByZWFkCiAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMTRdICAgICAgICAgIDpSVEQgY29ubmVjdGlvbiB0eXBlCiAgIDowOlJURCBub3QgdXNlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k5MTE4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTkxMTguYwppbmRleCA3NjYxMDNjLi42MzJkNWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTkxMTguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTkxMTguYwpAQCAtMjMsNyArMjMsNyBAQAogLSBJZiBjbWQtPnNjYW5fYmVnaW5fc3JjPVRSSUdfRVhUIHRoZW4gdHJpZ2dlciBpbnB1dCBpcyBUR0lOIChwaW4gNDYpLgogLSBJZiBjbWQtPmNvbnZlcnRfc3JjPVRSSUdfRVhUIHRoZW4gdHJpZ2dlciBpbnB1dCBpcyBFWFRUUkcgKHBpbiA0NCkuCiAtIElmIGNtZC0+c3RhcnRfc3JjL3N0b3Bfc3JjPVRSSUdfRVhUIHRoZW4gdHJpZ2dlciBpbnB1dCBpcyBUR0lOIChwaW4gNDYpLgotLSBJdCBpcyBub3QgbmVjY2Vzc2FyeSB0byBoYXZlIGNtZC5zY2FuX2VuZF9hcmc9Y21kLmNoYW5saXN0X2xlbiBidXQKKy0gSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBoYXZlIGNtZC5zY2FuX2VuZF9hcmc9Y21kLmNoYW5saXN0X2xlbiBidXQKICAgY21kLnNjYW5fZW5kX2FyZyBtb2R1bG8gY21kLmNoYW5saXN0X2xlbiBtdXN0IGJ5IDAuCiAtIElmIHJldHVybiB2YWx1ZSBvZiBjbWR0ZXN0IGlzIDUgdGhlbiB5b3UndmUgYmFkIGNoYW5uZWwgbGlzdAogICAoaXQgaXNuJ3QgcG9zc2libGUgbWl4dHVyZSBTLkUuIGFuZCBESUZGIGlucHV0cyBvciBiaXBvbGFyIGFuZCB1bmlwb2xhcgpAQCAtODIzLDcgKzgyMyw3IEBACiAJCW1vdmVfYmxvY2tfZnJvbV9kbWEoZGV2LCBzLAogCQkJCSAgICBkZXZwcml2LT5kbWFidWZfdmlydFtkZXZwcml2LT5kbWFfYWN0YnVmXSwKIAkJCQkgICAgc2FtcGxlc2luYnVmKTsKLQkJbSA9IG0gLSBzYW1wbHM7CQkvKiBtPSBob3cgbWFueSBzYW1wbGVzIHdhcyB0cmFuc2ZlcmVkICovCisJCW0gPSBtIC0gc2FtcGxzOwkJLyogbT0gaG93IG1hbnkgc2FtcGxlcyB3YXMgdHJhbnNmZXJyZWQgKi8KIAl9CiAvKiBEUFJJTlRLKCJZWVlcbiIpOyAqLwogCkBAIC0xMjk3LDcgKzEyOTcsNyBAQAogCURQUklOVEsoIjMgZG1hbGVuMD0lZCBkbWFsZW4xPSVkXG4iLCBkbWFsZW4wLCBkbWFsZW4xKTsKIAkvKiB0cmFuc2ZlciB3aXRob3V0IFRSSUdfV0FLRV9FT1MgKi8KIAlpZiAoIShkZXZwcml2LT5haV9mbGFncyAmIFRSSUdfV0FLRV9FT1MpKSB7Ci0JCS8qIGlmIGl0J3MgcG9zc2libGUgdGhlbiBhbGxpZ24gRE1BIGJ1ZmZlcnMgdG8gbGVuZ3RoIG9mIHNjYW4gKi8KKwkJLyogaWYgaXQncyBwb3NzaWJsZSB0aGVuIGFsaWduIERNQSBidWZmZXJzIHRvIGxlbmd0aCBvZiBzY2FuICovCiAJCWkgPSBkbWFsZW4wOwogCQlkbWFsZW4wID0KIAkJICAgIChkbWFsZW4wIC8gKGRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4gPDwgMSkpICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHExMmIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHExMmIuYwppbmRleCA0YjQ3MDAwLi41MzYxZjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRxMTJiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkcTEyYi5jCkBAIC02NSw3ICs2NSw3IEBACiAgICB3cml0dGVuIGJ5IGplcmVteSB0aGVsZXIgPHRoZWxlcmdAaWIuY25lYS5nb3YuYXI+CiAKICAgIGluc3RpdHV0byBiYWxzZWlybwotICAgY29taXNpb24gbmFjaW9uYWwgZGUgZW5lcmdpYSBhdG9taWNhCisgICBjb21taXNzaW9uIG5hY2lvbmFsIGRlIGVuZXJnaWEgYXRvbWljYQogICAgdW5pdmVyc2lkYWQgbmFjaW9uYWwgZGUgY3V5bwogICAgYXJnZW50aW5hCiAKQEAgLTM0Miw3ICszNDIsNyBAQAogCS8qIGNvbnZlcnQgbiBzYW1wbGVzICovCiAJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgewogCi0JCS8qIHdhaXQgZm9yIGVuZCBvZiBjb252ZXJ0aW9uICovCisJCS8qIHdhaXQgZm9yIGVuZCBvZiBjb252ZXJzaW9uICovCiAJCWkgPSAwOwogCQlkbyB7CiAJCQkvKiB1ZGVsYXkoMSk7ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWR2X3BjaTE3MTAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpMTcxMC5jCmluZGV4IDQ2NmU2OWYuLmRhMmI3NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpMTcxMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpMTcxMC5jCkBAIC05OCw3ICs5OCw3IEBACiAjZGVmaW5lCVN0YXR1c19GRQkweDAxMDAJLyogMT1GSUZPIGlzIGVtcHR5ICovCiAjZGVmaW5lIFN0YXR1c19GSAkweDAyMDAJLyogMT1GSUZPIGlzIGhhbGYgZnVsbCAqLwogI2RlZmluZSBTdGF0dXNfRkYJMHgwNDAwCS8qIDE9RklGTyBpcyBmdWxsLCBmYXRhbCBlcnJvciAqLwotI2RlZmluZSBTdGF0dXNfSVJRCTB4MDgwMAkvKiAxPUlSUSBvY2N1cmVkICovCisjZGVmaW5lIFN0YXR1c19JUlEJMHgwODAwCS8qIDE9SVJRIG9jY3VycmVkICovCiAvKiBiaXRzIGZyb20gY29udHJvbCByZWdpc3RlciAoUENJMTcxeF9DT05UUk9MKSAqLwogI2RlZmluZSBDb250cm9sX0NOVDAJMHgwMDQwCS8qIDE9Q05UMCBoYXZlIGV4dGVybmFsIHNvdXJjZSwKIAkJCQkgKiAwPWhhdmUgaW50ZXJuYWwgMTAwa0h6IHNvdXJjZSAqLwpAQCAtMTE2MSw3ICsxMTYxLDcgQEAKIAl9CiAKIAlpZiAobl9jaGFuID4gMSkgewotCQljaGFuc2VnbWVudFswXSA9IGNoYW5saXN0WzBdOwkvKiAgZmlyc3QgY2hhbm5lbCBpcyBldmVyeXRpbWUgb2sgKi8KKwkJY2hhbnNlZ21lbnRbMF0gPSBjaGFubGlzdFswXTsJLyogIGZpcnN0IGNoYW5uZWwgaXMgZXZlcnkgdGltZSBvayAqLwogCQlmb3IgKGkgPSAxLCBzZWdsZW4gPSAxOyBpIDwgbl9jaGFuOyBpKyssIHNlZ2xlbisrKSB7CS8qICBidWlsZCBwYXJ0IG9mIGNoYW5saXN0ICovCiAJCQkvKiAgcHJpbnRrKCIlZC4gJWQgJWRcbiIsaSxDUl9DSEFOKGNoYW5saXN0W2ldKSxDUl9SQU5HRShjaGFubGlzdFtpXSkpOyAqLwogCQkJaWYgKGNoYW5saXN0WzBdID09IGNoYW5saXN0W2ldKQpAQCAtMTE3Niw5ICsxMTc2LDkgQEAKIAkJCSAgICAoQ1JfQ0hBTihjaGFuc2VnbWVudFtpIC0gMV0pICsgMSkgJSBzLT5uX2NoYW47CiAJCQlpZiAoQ1JfQVJFRihjaGFuc2VnbWVudFtpIC0gMV0pID09IEFSRUZfRElGRikKIAkJCQlub3dtdXN0YmVjaGFuID0gKG5vd211c3RiZWNoYW4gKyAxKSAlIHMtPm5fY2hhbjsKLQkJCWlmIChub3dtdXN0YmVjaGFuICE9IENSX0NIQU4oY2hhbmxpc3RbaV0pKSB7CS8qICBjaGFubmVsIGxpc3QgaXNuJ3QgY29udGlub3VzIDotKCAqLworCQkJaWYgKG5vd211c3RiZWNoYW4gIT0gQ1JfQ0hBTihjaGFubGlzdFtpXSkpIHsJLyogIGNoYW5uZWwgbGlzdCBpc24ndCBjb250aW51b3VzIDotKCAqLwogCQkJCXByaW50awotCQkJCSAgICAoImNoYW5uZWwgbGlzdCBtdXN0IGJlIGNvbnRpbm91cyEgY2hhbmxpc3RbJWldPSVkIGJ1dCBtdXN0IGJlICVkIG9yICVkIVxuIiwKKwkJCQkgICAgKCJjaGFubmVsIGxpc3QgbXVzdCBiZSBjb250aW51b3VzISBjaGFubGlzdFslaV09JWQgYnV0IG11c3QgYmUgJWQgb3IgJWQhXG4iLAogCQkJCSAgICAgaSwgQ1JfQ0hBTihjaGFubGlzdFtpXSksIG5vd211c3RiZWNoYW4sCiAJCQkJICAgICBDUl9DSEFOKGNoYW5saXN0WzBdKSk7CiAJCQkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGFzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGFzLmMKaW5kZXggMDk0MTY0My4uNjE5NjhhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkYXMuYwpAQCAtMTE1LDcgKzExNSw3IEBACiAjZGVmaW5lICAgSU5UX01BU0sgMHgzCQkvKiAgbWFzayBvZiBpbnRlcnJ1cHQgc2VsZWN0IGJpdHMgKi8KICNkZWZpbmUgICBJTlRFIDB4NAkJLyogIGludGVycnVwdCBlbmFibGUgKi8KICNkZWZpbmUgICBEQUhGSUUgMHg4CQkvKiAgZGFjIGhhbGYgZnVsbCBpbnRlcnJ1cHQgZW5hYmxlICovCi0jZGVmaW5lICAgRU9BSUUJMHgxMAkJLyogIGVuZCBvZiBhcXVpc2l0aW9uIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgICBFT0FJRQkweDEwCQkvKiAgZW5kIG9mIGFjcXVpc2l0aW9uIGludGVycnVwdCBlbmFibGUgKi8KICNkZWZpbmUgICBEQUhGSQkweDIwCQkvKiAgZGFjIGhhbGYgZnVsbCByZWFkIHN0YXR1cyAvIHdyaXRlIGludGVycnVwdCBjbGVhciAqLwogI2RlZmluZSAgIEVPQUkgMHg0MAkJLyogIHJlYWQgZW5kIG9mIGFjcS4gaW50ZXJydXB0IHN0YXR1cyAvIHdyaXRlIGNsZWFyICovCiAjZGVmaW5lICAgSU5UIDB4ODAJCS8qICByZWFkIGludGVycnVwdCBzdGF0dXMgLyB3cml0ZSBjbGVhciAqLwpAQCAtNDQwLDcgKzQ0MCw3IEBACiAJdW5zaWduZWQgaW50IGRpdmlzb3IxOwogCXVuc2lnbmVkIGludCBkaXZpc29yMjsKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY291bnQ7CS8qICBudW1iZXIgb2YgYW5hbG9nIGlucHV0IHNhbXBsZXMgcmVtYWluaW5nICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IGFkY19maWZvX2JpdHM7CS8qICBiaXRzIHRvIHdyaXRlIHRvIGludGVydXB0L2FkY2ZpZm8gcmVnaXN0ZXIgKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYWRjX2ZpZm9fYml0czsJLyogIGJpdHMgdG8gd3JpdGUgdG8gaW50ZXJydXB0L2FkY2ZpZm8gcmVnaXN0ZXIgKi8KIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgczU5MzNfaW50Y3NyX2JpdHM7CS8qICBiaXRzIHRvIHdyaXRlIHRvIGFtY2MgczU5MzMgaW50ZXJydXB0IGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVyICovCiAJdm9sYXRpbGUgdW5zaWduZWQgaW50IGFvX2NvbnRyb2xfYml0czsJLyogIGJpdHMgdG8gd3JpdGUgdG8gYW8gY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVyICovCiAJc2hvcnQgYWlfYnVmZmVyW0FJX0JVRkZFUl9TSVpFXTsKQEAgLTE2NTMsNyArMTY1Myw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKIAl9IGVsc2UgaWYgKHN0YXR1cyAmIEVPQUkpIHsKIAkJY29tZWRpX2Vycm9yKGRldiwKLQkJCSAgICAgImJ1ZyEgZW5jb3VudGVyZWQgZW5kIG9mIGFxdWlzaXRpb24gaW50ZXJydXB0PyIpOworCQkJICAgICAiYnVnISBlbmNvdW50ZXJlZCBlbmQgb2YgYWNxdWlzaXRpb24gaW50ZXJydXB0PyIpOwogCQkvKiAgY2xlYXIgRU9BIGludGVycnVwdCBsYXRjaCAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOwogCQlvdXR3KGRldnByaXYtPmFkY19maWZvX2JpdHMgfCBFT0FJLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhczY0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGFzNjQuYwppbmRleCAyNTgzZTE2Li4xZTMyNDE5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhczY0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhczY0LmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogI2VuZGlmCiAKICNkZWZpbmUgVElNRVJfQkFTRSAyNQkJLyogIDQwTUh6IG1hc3RlciBjbG9jayAqLwotI2RlZmluZSBQUkVTQ0FMRURfVElNRVJfQkFTRQkxMDAwMAkvKiAgMTAwa0h6ICdwcmVzY2FsZWQnIGNsb2NrIGZvciBzbG93IGFxdWlzaXRpb24sIG1heWJlIEknbGwgc3VwcG9ydCB0aGlzIHNvbWVkYXkgKi8KKyNkZWZpbmUgUFJFU0NBTEVEX1RJTUVSX0JBU0UJMTAwMDAJLyogIDEwMGtIeiAncHJlc2NhbGVkJyBjbG9jayBmb3Igc2xvdyBhY3F1aXNpdGlvbiwgbWF5YmUgSSdsbCBzdXBwb3J0IHRoaXMgc29tZWRheSAqLwogI2RlZmluZSBETUFfQlVGRkVSX1NJWkUgMHgxMDAwCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUwkweDEzMDcKQEAgLTEzNiw3ICsxMzYsNyBAQAogCUFEQ19ERUxBWV9JTlRFUlZBTF9VUFBFUl9SRUcgPSAweDFjLAkvKiAgdXBwZXIgOCBiaXRzIG9mIGRlbGF5IGludGVydmFsIGNvdW50ZXIgKi8KIAlBRENfQ09VTlRfTE9XRVJfUkVHID0gMHgxZSwJLyogIGxvd2VyIDE2IGJpdHMgb2YgaGFyZHdhcmUgY29udmVyc2lvbi9zY2FuIGNvdW50ZXIgKi8KIAlBRENfQ09VTlRfVVBQRVJfUkVHID0gMHgyMCwJLyogIHVwcGVyIDggYml0cyBvZiBoYXJkd2FyZSBjb252ZXJzaW9uL3NjYW4gY291bnRlciAqLwotCUFEQ19TVEFSVF9SRUcgPSAweDIyLAkvKiAgc29mdHdhcmUgdHJpZ2dlciB0byBzdGFydCBhcXVpc2l0aW9uICovCisJQURDX1NUQVJUX1JFRyA9IDB4MjIsCS8qICBzb2Z0d2FyZSB0cmlnZ2VyIHRvIHN0YXJ0IGFjcXVpc2l0aW9uICovCiAJQURDX0NPTlZFUlRfUkVHID0gMHgyNCwJLyogIGluaXRpYXRlcyBzaW5nbGUgY29udmVyc2lvbiAqLwogCUFEQ19RVUVVRV9DTEVBUl9SRUcgPSAweDI2LAkvKiAgY2xlYXJzIGFkYyBxdWV1ZSAqLwogCUFEQ19RVUVVRV9MT0FEX1JFRyA9IDB4MjgsCS8qICBsb2FkcyBhZGMgcXVldWUgKi8KQEAgLTE5OSw3ICsxOTksNyBAQAogCUFEQ19JTlRSX0VPU0NBTl9CSVRTID0gMHgyLAkvKiAgaW50ZXJydXB0IGVuZCBvZiBzY2FuICovCiAJQURDX0lOVFJfRU9TRVFfQklUUyA9IDB4MywJLyogIGludGVycnVwdCBlbmQgb2Ygc2VxdWVuY2UgKHByb2JhYmx5IHdvbnQgdXNlIHRoaXMgaXQncyBwcmV0dHkgZmFuY3kpICovCiAJRU5fQURDX0lOVFJfU1JDX0JJVCA9IDB4NCwJLyogIGVuYWJsZSBhZGMgaW50ZXJydXB0IHNvdXJjZSAqLwotCUVOX0FEQ19ET05FX0lOVFJfQklUID0gMHg4LAkvKiAgZW5hYmxlIGFkYyBhcXVpc2l0aW9uIGRvbmUgaW50ZXJydXB0ICovCisJRU5fQURDX0RPTkVfSU5UUl9CSVQgPSAweDgsCS8qICBlbmFibGUgYWRjIGFjcXVpc2l0aW9uIGRvbmUgaW50ZXJydXB0ICovCiAJREFDX0lOVFJfU1JDX01BU0sgPSAweDMwLAogCURBQ19JTlRSX1FFTVBUWV9CSVRTID0gMHgwLAogCURBQ19JTlRSX0hJR0hfQ0hBTl9CSVRTID0gMHgxMCwKQEAgLTI4NjcsNyArMjg2Nyw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CiAKLQkvKiAgc3RhcnQgYXF1aXNpdGlvbiAqLworCS8qICBzdGFydCBhY3F1aXNpdGlvbiAqLwogCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX05PVykgewogCQl3cml0ZXcoMCwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19TVEFSVF9SRUcpOwogCQlERUJVR19QUklOVCgic29mdCB0cmlnXG4iKTsKQEAgLTI5NDIsNyArMjk0Miw3IEBACiAvKiBSZWFkIGZyb20gMzIgYml0IHdpZGUgYWkgZmlmbyBvZiA0MDIwIC0gZGVhbCB3aXRoIGluc2FuZSBncmV5IGNvZGluZyBvZiBwb2ludGVycy4KICAqIFRoZSBwY2ktNDAyMCBoYXJkd2FyZSBvbmx5IHN1cHBvcnRzCiAgKiBkbWEgdHJhbnNmZXJzIChpdCBvbmx5IHN1cHBvcnRzIHRoZSB1c2Ugb2YgcGlvIGZvciBkcmFpbmluZyB0aGUgbGFzdCByZW1haW5pbmcKLSAqIHBvaW50cyBmcm9tIHRoZSBmaWZvIHdoZW4gYSBkYXRhIGFxdWlzaXRpb24gb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQpLgorICogcG9pbnRzIGZyb20gdGhlIGZpZm8gd2hlbiBhIGRhdGEgYWNxdWlzaXRpb24gb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQpLgogICovCiBzdGF0aWMgdm9pZCBwaW9fZHJhaW5fYWlfZmlmb18zMihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewpAQCAtMzA0Niw3ICszMDQ2LDcgQEAKIAkJY29tZWRpX2Vycm9yKGRldiwgImZpZm8gb3ZlcnJ1biIpOwogCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CiAJfQotCS8qICBzcGluIGxvY2sgbWFrZXMgc3VyZSBub29uZSBlbHNlIGNoYW5nZXMgcGx4IGRtYSBjb250cm9sIHJlZyAqLworCS8qICBzcGluIGxvY2sgbWFrZXMgc3VyZSBubyBvbmUgZWxzZSBjaGFuZ2VzIHBseCBkbWEgY29udHJvbCByZWcgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOwogCWRtYTFfc3RhdHVzID0gcmVhZGIocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUExX0NTX1JFRyk7CiAJaWYgKHBseF9zdGF0dXMgJiBJQ1NfRE1BMV9BKSB7CS8qICBkbWEgY2hhbiAxIGludGVycnVwdCAqLwpAQCAtMzE3MCw3ICszMTcwLDcgQEAKIAlhc3luYyA9IHMtPmFzeW5jOwogCWNtZCA9ICZhc3luYy0+Y21kOwogCi0JLyogIHNwaW4gbG9jayBtYWtlcyBzdXJlIG5vb25lIGVsc2UgY2hhbmdlcyBwbHggZG1hIGNvbnRyb2wgcmVnICovCisJLyogIHNwaW4gbG9jayBtYWtlcyBzdXJlIG5vIG9uZSBlbHNlIGNoYW5nZXMgcGx4IGRtYSBjb250cm9sIHJlZyAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CiAJZG1hMF9zdGF0dXMgPSByZWFkYihwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTBfQ1NfUkVHKTsKIAlpZiAocGx4X3N0YXR1cyAmIElDU19ETUEwX0EpIHsJLyogIGRtYSBjaGFuIDAgaW50ZXJydXB0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX3Rlc3QuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfdGVzdC5jCmluZGV4IGIyMjBiMzAuLmE4MDQ3NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfdGVzdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfdGVzdC5jCkBAIC04MSw3ICs4MSw3IEBACiAvKiBEYXRhIHVuaXF1ZSB0byB0aGlzIGRyaXZlciAqLwogc3RydWN0IHdhdmVmb3JtX3ByaXZhdGUgewogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwotCXN0cnVjdCB0aW1ldmFsIGxhc3Q7CS8qIHRpbWUgYXQgd2hpY2ggbGFzdCB0aW1lciBpbnRlcnJ1cHQgb2NjdXJlZCAqLworCXN0cnVjdCB0aW1ldmFsIGxhc3Q7CS8qIHRpbWUgYXQgd2hpY2ggbGFzdCB0aW1lciBpbnRlcnJ1cHQgb2NjdXJyZWQgKi8KIAl1bnNpZ25lZCBpbnQgdXZvbHRfYW1wbGl0dWRlOwkvKiB3YXZlZm9ybSBhbXBsaXR1ZGUgaW4gbWljcm92b2x0cyAqLwogCXVuc2lnbmVkIGxvbmcgdXNlY19wZXJpb2Q7CS8qIHdhdmVmb3JtIHBlcmlvZCBpbiBtaWNyb3NlY29uZHMgKi8KIAl1bnNpZ25lZCBsb25nIHVzZWNfY3VycmVudDsJLyogY3VycmVudCB0aW1lIChtb2R1bG8gd2F2ZWZvcm0gcGVyaW9kKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE4MDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMxODAwLmMKaW5kZXggNmVhOTNmOS4uNjBjMmIxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE4MDAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTgwMC5jCkBAIC0xMDg3LDcgKzEwODcsNyBAQAogCXJldHVybjsKIH0KIAotLyogZmx1c2hlcyByZW1haW5pbmcgZGF0YSBmcm9tIGJvYXJkIHdoZW4gZXh0ZXJuYWwgdHJpZ2dlciBoYXMgc3RvcHBlZCBhcXVpc2l0aW9uCisvKiBmbHVzaGVzIHJlbWFpbmluZyBkYXRhIGZyb20gYm9hcmQgd2hlbiBleHRlcm5hbCB0cmlnZ2VyIGhhcyBzdG9wcGVkIGFjcXVpc2l0aW9uCiAgKiBhbmQgd2UgYXJlIHVzaW5nIGRtYSB0cmFuc2ZlcnMgKi8KIHN0YXRpYyB2b2lkIGRhczE4MDBfZmx1c2hfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCiAJCQkgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM4MDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM4MDAuYwppbmRleCBhZWNhZWRjLi45NmQ0MWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzODAwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczgwMC5jCkBAIC0zOTEsNyArMzkxLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKIAlvdXRiKENPTlRST0wxLCBkZXYtPmlvYmFzZSArIERBUzgwMF9HQUlOKTsJLyogc2VsZWN0IGJhc2UgYWRkcmVzcyArIDcgdG8gYmUgU1RBVFVTMiByZWdpc3RlciAqLwogCXN0YXR1cyA9IGluYihkZXYtPmlvYmFzZSArIERBUzgwMF9TVEFUVVMyKSAmIFNUQVRVUzJfSENFTjsKLQkvKiBkb24ndCByZWxlYXNlIHNwaW5sb2NrIHlldCBzaW5jZSB3ZSB3YW50IHRvIG1ha2Ugc3VyZSBub29uZSBlbHNlIGRpc2FibGVzIGhhcmR3YXJlIGNvbnZlcnNpb25zICovCisJLyogZG9uJ3QgcmVsZWFzZSBzcGlubG9jayB5ZXQgc2luY2Ugd2Ugd2FudCB0byBtYWtlIHN1cmUgbm8gb25lIGVsc2UgZGlzYWJsZXMgaGFyZHdhcmUgY29udmVyc2lvbnMgKi8KIAlpZiAoc3RhdHVzID09IDApIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RtbTMyYXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kbW0zMmF0LmMKaW5kZXggNjkzNzI4ZS4uMmI0ZTZlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RtbTMyYXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZG1tMzJhdC5jCkBAIC01MzIsNyArNTMyLDcgQEAKIAkJbXNiID0gZG1tX2luYihkZXYsIERNTTMyQVRfQUlNU0IpOwogCiAJCS8qIGludmVydCBzaWduIGJpdCB0byBtYWtlIHJhbmdlIHVuc2lnbmVkLCB0aGlzIGlzIGFuCi0JCSAgIGlkaW9zeW5jcmFjeSBvZiB0aGUgZGlhbW9uZCBib2FyZCwgaXQgcmV0dXJuCisJCSAgIGlkaW9zeW5jcmFzeSBvZiB0aGUgZGlhbW9uZCBib2FyZCwgaXQgcmV0dXJuCiAJCSAgIGNvbnZlcnNpb25zIGFzIGEgc2lnbmVkIHZhbHVlLCBpLmUuIC0zMjc2OCB0bwogCQkgICAzMjc2NywgZmxpcHBpbmcgdGhlIGJpdCBhbmQgaW50ZXJwcmV0aW5nIGl0IGFzCiAJCSAgIHNpZ25lZCBnaXZlcyB5b3UgYSByYW5nZSBvZiAwIHRvIDY1NTM1IHdoaWNoIGlzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODExLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODExLmMKaW5kZXggYTE2NjRjYS4uMDEzMWQ1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTEuYwpAQCAtNTYwLDcgKzU2MCw3IEBACiAJc3dpdGNoIChkZXYtPmlfYWRtb2RlKSB7CiAJY2FzZSBDT01FRElfTURFTUFORDoKIAkJZGV2LT5udHJpZyA9IGFkdHJpZy0+biAtIDE7Ci0JCS8qIG5vdCBuZWNjZXNzYXJ5ICovCisJCS8qIG5vdCBuZWNlc3NhcnkgKi8KIAkJLypwcmludGsoImR0MjgxMTogQUQgc29mdCB0cmlnZ2VyXG4iKTsgKi8KIAkJLypvdXRiKERUMjgxMV9DTFJFUlJPUnxEVDI4MTFfSU5URU5CLAogCQkJZGV2LT5pb2Jhc2UrRFQyODExX0FEQ1NSKTsgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDk4MTIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDk4MTIuYwppbmRleCAwNjA1OTg1Li4zMmQ5YzQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQ5ODEyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0OTgxMi5jCkBAIC03NzMsNyArNzczLDcgQEAKIAkJCXJldHZhbCA9IGR0OTgxMl9yZWFkX2luZm8oZGV2LCAxLCAmZncsIHNpemVvZihmdykpOwogCQkJaWYgKHJldHZhbCA9PSAwKSB7CiAJCQkJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LAotCQkJCQkgInVzYl9yZXNldF9jb25maWd1cmF0aW9uIHN1Y2NlZGVkICIKKwkJCQkJICJ1c2JfcmVzZXRfY29uZmlndXJhdGlvbiBzdWNjZWVkZWQgIgogCQkJCQkgImFmdGVyICVkIGl0ZXJhdGlvbnNcbiIsIGkpOwogCQkJCWJyZWFrOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2dzY19ocGRpLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZ3NjX2hwZGkuYwppbmRleCAxNjYxYjU3Li5iYzAyMGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZ3NjX2hwZGkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZ3NjX2hwZGkuYwpAQCAtMTAzMSw3ICsxMDMxLDcgQEAKIAkJd3JpdGVsKGhwZGlfaW50cl9zdGF0dXMsCiAJCSAgICAgICBwcml2KGRldiktPmhwZGlfaW9iYXNlICsgSU5URVJSVVBUX1NUQVRVU19SRUcpOwogCX0KLQkvKiAgc3BpbiBsb2NrIG1ha2VzIHN1cmUgbm9vbmUgZWxzZSBjaGFuZ2VzIHBseCBkbWEgY29udHJvbCByZWcgKi8KKwkvKiAgc3BpbiBsb2NrIG1ha2VzIHN1cmUgbm8gb25lIGVsc2UgY2hhbmdlcyBwbHggZG1hIGNvbnRyb2wgcmVnICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKIAlkbWEwX3N0YXR1cyA9IHJlYWRiKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMF9DU19SRUcpOwogCWlmIChwbHhfc3RhdHVzICYgSUNTX0RNQTBfQSkgewkvKiAgZG1hIGNoYW4gMCBpbnRlcnJ1cHQgKi8KQEAgLTEwNDUsNyArMTA0NSw3IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKIAotCS8qICBzcGluIGxvY2sgbWFrZXMgc3VyZSBub29uZSBlbHNlIGNoYW5nZXMgcGx4IGRtYSBjb250cm9sIHJlZyAqLworCS8qICBzcGluIGxvY2sgbWFrZXMgc3VyZSBubyBvbmUgZWxzZSBjaGFuZ2VzIHBseCBkbWEgY29udHJvbCByZWcgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOwogCWRtYTFfc3RhdHVzID0gcmVhZGIocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUExX0NTX1JFRyk7CiAJaWYgKHBseF9zdGF0dXMgJiBJQ1NfRE1BMV9BKSB7CS8qICBYWFggKi8vKiAgZG1hIGNoYW4gMSBpbnRlcnJ1cHQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9pY3BfbXVsdGkuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9pY3BfbXVsdGkuYwppbmRleCAwYmFiMzliLi4xMjY1NTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvaWNwX211bHRpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ljcF9tdWx0aS5jCkBAIC03MTUsNyArNzE1LDcgQEAKIAlpcyBidWlsdCBjb3JyZWN0bHkKIAogUGFyYW1ldGVyczoKLQlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBzZXZpY2Ugc3RydWN0dXJlCisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldglQb2ludGVyIHRvIGN1cnJlbnQgc2VydmljZSBzdHJ1Y3R1cmUKIAlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwlQb2ludGVyIHRvIGN1cnJlbnQgc3ViZGV2aWNlIHN0cnVjdHVyZQogCXVuc2lnbmVkIGludCAqY2hhbmxpc3QJUG9pbnRlciB0byBwYWNrZWQgY2hhbm5lbCBsaXN0CiAJdW5zaWduZWQgaW50IG5fY2hhbglOdW1iZXIgb2YgY2hhbm5lbHMgdG8gc2NhbgpAQCAtNzcyLDcgKzc3Miw3IEBACiAJU3RhdHVzIHJlZ2lzdGVyLgogCiBQYXJhbWV0ZXJzOgotCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJUG9pbnRlciB0byBjdXJyZW50IHNldmljZSBzdHJ1Y3R1cmUKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBzZXJ2aWNlIHN0cnVjdHVyZQogCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCVBvaW50ZXIgdG8gY3VycmVudCBzdWJkZXZpY2Ugc3RydWN0dXJlCiAJdW5zaWduZWQgaW50ICpjaGFubGlzdAlQb2ludGVyIHRvIHBhY2tlZCBjaGFubmVsIGxpc3QKIAl1bnNpZ25lZCBpbnQgbl9jaGFuCU51bWJlciBvZiBjaGFubmVscyB0byBzY2FuCkBAIC04NDgsNyArODQ4LDcgQEAKIAlUaGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgaWNwIG11bHRpIGRldmljZSB0byBhICdzYWZlJyBzdGF0ZQogCiBQYXJhbWV0ZXJzOgotCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJUG9pbnRlciB0byBjdXJyZW50IHNldmljZSBzdHJ1Y3R1cmUKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBzZXJ2aWNlIHN0cnVjdHVyZQogCiBSZXR1cm5zOmludAkwID0gc3VjY2VzcwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWU0MDAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWU0MDAwLmMKaW5kZXggNzU1MTFiYS4uYjY5MmZlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lNDAwMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZTQwMDAuYwpAQCAtMTgxMCw3ICsxODEwLDcgQEAKIAkJICAgICAgIGFpX2NvbnRleHQtPmlycV9zdGF0dXNfcmVnKSAmCiAJICAgIE1FNDAwMF9JUlFfU1RBVFVTX0JJVF9BSV9IRikgewogCQlJU1JfUERFQlVHCi0JCSAgICAoIm1lNDAwMF9haV9pc3IoKTogRmlmbyBoYWxmIGZ1bGwgaW50ZXJydXB0IG9jY3VyZWRcbiIpOworCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6IEZpZm8gaGFsZiBmdWxsIGludGVycnVwdCBvY2N1cnJlZFxuIik7CiAKIAkJLyogUmVhZCBzdGF0dXMgcmVnaXN0ZXIgdG8gZmluZCBvdXQgd2hhdCBoYXBwZW5lZCAqLwogCQl0bXAgPSBtZTQwMDBfaW5sKGRldiwgYWlfY29udGV4dC0+Y3RybF9yZWcpOwpAQCAtMTkwMyw3ICsxOTAzLDcgQEAKIAlpZiAobWU0MDAwX2lubChkZXYsCiAJCSAgICAgICBhaV9jb250ZXh0LT5pcnFfc3RhdHVzX3JlZykgJiBNRTQwMDBfSVJRX1NUQVRVU19CSVRfU0MpIHsKIAkJSVNSX1BERUJVRwotCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6IFNhbXBsZSBjb3VudGVyIGludGVycnVwdCBvY2N1cmVkXG4iKTsKKwkJICAgICgibWU0MDAwX2FpX2lzcigpOiBTYW1wbGUgY291bnRlciBpbnRlcnJ1cHQgb2NjdXJyZWRcbiIpOwogCiAJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0JMT0NLIHwgQ09NRURJX0NCX0VPQTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21wYzYyNC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21wYzYyNC5jCmluZGV4IGE4OWVlYmQuLmRkMDlhNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tcGM2MjQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbXBjNjI0LmMKQEAgLTM5LDggKzM5LDggQEAKIAogQ29uZmlndXJhdGlvbiBPcHRpb25zOgogICBbMF0gLSBJL08gYmFzZSBhZGRyZXNzCi0gIFsxXSAtIGNvbnZlcnRpb24gcmF0ZQotCUNvbnZlcnRpb24gcmF0ZSAgUk1TIG5vaXNlICBFZmZlY3RpdmUgTnVtYmVyIE9mIEJpdHMKKyAgWzFdIC0gY29udmVyc2lvbiByYXRlCisJQ29udmVyc2lvbiByYXRlICBSTVMgbm9pc2UgIEVmZmVjdGl2ZSBOdW1iZXIgT2YgQml0cwogCTAgICAgICAzLjUya0h6ICAgICAgICAyM3VWICAgICAgICAgICAgICAgIDE3CiAJMSAgICAgIDEuNzZrSHogICAgICAgMy41dVYgICAgICAgICAgICAgICAgMjAKIAkyICAgICAgIDg4MEh6ICAgICAgICAgMnVWICAgICAgICAgICAgICAgIDIxLjMKQEAgLTkzLDggKzkzLDggQEAKICNkZWZpbmUgTVBDNjI0X0RNWV9CSVQgICAgICAgICAgKDE8PDMwKQogI2RlZmluZSBNUEM2MjRfU0dOX0JJVCAgICAgICAgICAoMTw8MjkpCiAKLS8qIENvbnZlcnRpb24gc3BlZWRzICovCi0vKiBPU1I0IE9TUjMgT1NSMiBPU1IxIE9TUjAgIENvbnZlcnRpb24gcmF0ZSAgUk1TIG5vaXNlICBFTk9CXgorLyogQ29udmVyc2lvbiBzcGVlZHMgKi8KKy8qIE9TUjQgT1NSMyBPU1IyIE9TUjEgT1NSMCAgQ29udmVyc2lvbiByYXRlICBSTVMgbm9pc2UgIEVOT0JeCiAgKiAgWCAgICAwICAgIDAgICAgMCAgICAxICAgICAgICAzLjUya0h6ICAgICAgICAyM3VWICAgICAgMTcKICAqICBYICAgIDAgICAgMCAgICAxICAgIDAgICAgICAgIDEuNzZrSHogICAgICAgMy41dVYgICAgICAyMAogICogIFggICAgMCAgICAwICAgIDEgICAgMSAgICAgICAgIDg4MEh6ICAgICAgICAgMnVWICAgICAgMjEuMwpAQCAtMjI3LDcgKzIyNyw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50awotCQkgICAgKEtFUk5fRVJSICJpbGxlZ2FsIGNvbnZlcnRpb24gcmF0ZSBzZXR0aW5nISIKKwkJICAgIChLRVJOX0VSUiAiaWxsZWdhbCBjb252ZXJzaW9uIHJhdGUgc2V0dGluZyEiCiAJCQkiIFZhbGlkIG51bWJlcnMgYXJlIDAuLjkuIFVzaW5nIDkgPT4gNi44NzUgSHosICIpOwogCQlkZXZwcml2LT51bENvbnZlcnRpb25SYXRlID0gTVBDNjI0X1NQRUVEXzNfNTJfa0h6OwogCX0KQEAgLTI5Niw3ICsyOTYsNyBAQAogCX0KIAogCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKLQkJLyogIFRyaWdnZXIgdGhlIGNvbnZlcnRpb24gKi8KKwkJLyogIFRyaWdnZXIgdGhlIGNvbnZlcnNpb24gKi8KIAkJb3V0YihNUEM2MjRfQURTQ0ssIGRldi0+aW9iYXNlICsgTVBDNjI0X0FEQyk7CiAJCXVkZWxheSgxKTsKIAkJb3V0YihNUEM2MjRfQURDUyB8IE1QQzYyNF9BRFNDSywgZGV2LT5pb2Jhc2UgKyBNUEM2MjRfQURDKTsKQEAgLTMwNCw3ICszMDQsNyBAQAogCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgTVBDNjI0X0FEQyk7CiAJCXVkZWxheSgxKTsKIAotCQkvKiAgV2FpdCBmb3IgdGhlIGNvbnZlcnRpb24gdG8gZW5kICovCisJCS8qICBXYWl0IGZvciB0aGUgY29udmVyc2lvbiB0byBlbmQgKi8KIAkJZm9yIChpID0gMDsgaSA8IFRJTUVPVVQ7IGkrKykgewogCQkJdWNQb3J0ID0gaW5iKGRldi0+aW9iYXNlICsgTVBDNjI0X0FEQyk7CiAJCQlpZiAodWNQb3J0ICYgTVBDNjI0X0FEQlVTWSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdF9hMjE1MC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0X2EyMTUwLmMKaW5kZXggNGQwMDUzZS4uYzE5MmI3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0X2EyMTUwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0X2EyMTUwLmMKQEAgLTEwNCwxMCArMTA0LDEwIEBACiAjZGVmaW5lIFNUQVRVU19SRUcJCTB4MTIJLyogIHJlYWQgb25seSAqLwogI2RlZmluZSAgIEZORV9CSVQJCTB4MQkvKiAgZmlmbyBub3QgZW1wdHkgKi8KICNkZWZpbmUgICBPVkZMX0JJVAkJMHg4CS8qICBmaWZvIG92ZXJmbG93ICovCi0jZGVmaW5lICAgRURBUV9CSVQJCTB4MTAJLyogIGVuZCBvZiBhcXVpc2l0aW9uIGludGVycnVwdCAqLworI2RlZmluZSAgIEVEQVFfQklUCQkweDEwCS8qICBlbmQgb2YgYWNxdWlzaXRpb24gaW50ZXJydXB0ICovCiAjZGVmaW5lICAgRENBTF9CSVQJCTB4MjAJLyogIG9mZnNldCBjYWxpYnJhdGlvbiBpbiBwcm9ncmVzcyAqLwotI2RlZmluZSAgIElOVFJfQklUCQkweDQwCS8qICBpbnRlcnJ1cHQgaGFzIG9jY3VyZWQgKi8KLSNkZWZpbmUgICBETUFfVENfQklUCQkweDgwCS8qICBkbWEgdGVybWluYWwgY291bnQgaW50ZXJydXB0IGhhcyBvY2N1cmVkICovCisjZGVmaW5lICAgSU5UUl9CSVQJCTB4NDAJLyogIGludGVycnVwdCBoYXMgb2NjdXJyZWQgKi8KKyNkZWZpbmUgICBETUFfVENfQklUCQkweDgwCS8qICBkbWEgdGVybWluYWwgY291bnQgaW50ZXJydXB0IGhhcyBvY2N1cnJlZCAqLwogI2RlZmluZSAgIElEX0JJVFMoeCkJKCgoeCkgPj4gOCkgJiAweDMpCiAjZGVmaW5lIElSUV9ETUFfQ05UUkxfUkVHCQkweDEyCS8qICB3cml0ZSBvbmx5ICovCiAjZGVmaW5lICAgRE1BX0NIQU5fQklUUyh4KQkJKCh4KSAmIDB4NykJLyogIHNldHMgZG1hIGNoYW5uZWwgKi8KQEAgLTQzNCw3ICs0MzQsNyBAQAogCXMtPmNhbmNlbCA9IGEyMTUwX2NhbmNlbDsKIAogCS8qIG5lZWQgdG8gZG8gdGhpcyBmb3Igc29mdHdhcmUgY291bnRpbmcgb2YgY29tcGxldGVkIGNvbnZlcnNpb25zLCB0bwotCSAqIHByZXZlbnQgaGFyZHdhcmUgY291bnQgZnJvbSBzdG9wcGluZyBhcXVpc2l0aW9uICovCisJICogcHJldmVudCBoYXJkd2FyZSBjb3VudCBmcm9tIHN0b3BwaW5nIGFjcXVpc2l0aW9uICovCiAJb3V0dyhIV19DT1VOVF9ESVNBQkxFLCBkZXYtPmlvYmFzZSArIEk4MjUzX01PREVfUkVHKTsKIAogCS8qICBzZXQgY2FyZCdzIGlycSBhbmQgZG1hIGxldmVscyAqLwpAQCAtNzI5LDcgKzcyOSw3IEBACiAJLyogIHNlbmQgdHJpZ2dlciBjb25maWcgYml0cyAqLwogCW91dHcodHJpZ2dlcl9iaXRzLCBkZXYtPmlvYmFzZSArIFRSSUdHRVJfUkVHKTsKIAotCS8qICBzdGFydCBhcXVpc2l0aW9uIGZvciBzb2Z0IHRyaWdnZXIgKi8KKwkvKiAgc3RhcnQgYWNxdWlzaXRpb24gZm9yIHNvZnQgdHJpZ2dlciAqLwogCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX05PVykgewogCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgRklGT19TVEFSVF9SRUcpOwogCX0KQEAgLTc2OCw3ICs3NjgsNyBAQAogCS8qICBzZXR1cCBzdGFydCB0cmlnZ2VyaW5nICovCiAJb3V0dygwLCBkZXYtPmlvYmFzZSArIFRSSUdHRVJfUkVHKTsKIAotCS8qICBzdGFydCBhcXVpc2l0aW9uIGZvciBzb2Z0IHRyaWdnZXIgKi8KKwkvKiAgc3RhcnQgYWNxdWlzaXRpb24gZm9yIHNvZnQgdHJpZ2dlciAqLwogCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBGSUZPX1NUQVJUX1JFRyk7CiAKIAkvKiB0aGVyZSBpcyBhIDM1LjYgc2FtcGxlIGRlbGF5IGZvciBkYXRhIHRvIGdldCB0aHJvdWdoIHRoZSBhbnRpYWxpYXMgZmlsdGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwYy5jCmluZGV4IDI0MWZlNTIuLmFiOGYzNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwYy5jCkBAIC0xODMsMTEgKzE4MywxMSBAQAogI2RlZmluZSAgIE9WRVJSVU5fQklUCTB4MgogLyogZmlmbyBvdmVyZmxvdyAqLwogI2RlZmluZSAgIE9WRVJGTE9XX0JJVAkweDQKLS8qIHRpbWVyIGludGVycnVwdCBoYXMgb2NjdXJlZCAqLworLyogdGltZXIgaW50ZXJydXB0IGhhcyBvY2N1cnJlZCAqLwogI2RlZmluZSAgIFRJTUVSX0JJVAkweDgKLS8qIGRtYSB0ZXJtaW5hbCBjb3VudCBoYXMgb2NjdXJlZCAqLworLyogZG1hIHRlcm1pbmFsIGNvdW50IGhhcyBvY2N1cnJlZCAqLwogI2RlZmluZSAgIERNQVRDX0JJVAkweDEwCi0vKiBleHRlcm5hbCB0cmlnZ2VyIGhhcyBvY2N1cmVkICovCisvKiBleHRlcm5hbCB0cmlnZ2VyIGhhcyBvY2N1cnJlZCAqLwogI2RlZmluZSAgIEVYVF9UUklHX0JJVAkweDQwCiAvKiAxMjAwIGJvYXJkcyBvbmx5ICovCiAjZGVmaW5lIFNUQVRVUzJfUkVHCTB4MWQKQEAgLTExNDksNyArMTE0OSw3IEBACiAJcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKTsKIAlhcmVmID0gQ1JfQVJFRihjbWQtPmNoYW5saXN0WzBdKTsKIAotCS8qIG1ha2Ugc3VyZSBib2FyZCBpcyBkaXNhYmxlZCBiZWZvcmUgc2V0dGluZyB1cCBhcXVpc2l0aW9uICovCisJLyogbWFrZSBzdXJlIGJvYXJkIGlzIGRpc2FibGVkIGJlZm9yZSBzZXR0aW5nIHVwIGFjcXVpc2l0aW9uICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKIAlkZXZwcml2LT5jb21tYW5kMl9iaXRzICY9IH5TV1RSSUdfQklUICYgfkhXVFJJR19CSVQgJiB+UFJFVFJJR19CSVQ7CiAJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kMl9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQyX1JFRyk7CkBAIC0xMzQ5LDcgKzEzNDksNyBAQAogCQlkZXZwcml2LT5jb21tYW5kM19iaXRzICY9IH5BRENfRk5FX0lOVFJfRU5fQklUOwogCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDNfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EM19SRUcpOwogCi0JLyogIHN0YXJ0dXAgYXF1aXNpdGlvbiAqLworCS8qICBzdGFydHVwIGFjcXVpc2l0aW9uICovCiAKIAkvKiAgY29tbWFuZDIgcmVnICovCiAJLyogIHVzZSAyIGNhc2NhZGVkIGNvdW50ZXJzIGZvciBwYWNpbmcgKi8KQEAgLTE1NzEsOCArMTU3MSw4IEBACiAJZGV2cHJpdi0+d3JpdGVfYnl0ZSgweDEsIGRldi0+aW9iYXNlICsgRE1BVENfQ0xFQVJfUkVHKTsKIH0KIAotLyogbWFrZXMgc3VyZSBhbGwgZGF0YSBhY3F1aXJlZCBieSBib2FyZCBpcyB0cmFuc2ZlcmVkIHRvIGNvbWVkaSAodXNlZAotICogd2hlbiBhcXVpc2l0aW9uIGlzIHRlcm1pbmF0ZWQgYnkgc3RvcF9zcmMgPT0gVFJJR19FWFQpLiAqLworLyogbWFrZXMgc3VyZSBhbGwgZGF0YSBhY3F1aXJlZCBieSBib2FyZCBpcyB0cmFuc2ZlcnJlZCB0byBjb21lZGkgKHVzZWQKKyAqIHdoZW4gYWNxdWlzaXRpb24gaXMgdGVybWluYXRlZCBieSBzdG9wX3NyYyA9PSBUUklHX0VYVCkuICovCiBzdGF0aWMgdm9pZCBsYWJwY19kcmFpbl9kcmVncyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCWlmIChkZXZwcml2LT5jdXJyZW50X3RyYW5zZmVyID09IGlzYV9kbWFfdHJhbnNmZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKaW5kZXggMDA1ZDJmZS4uOGRkM2EwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYwpAQCAtODIxLDcgKzgyMSw3IEBACiAJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gTUFYX1NQRUVEOwogCQkJZXJyKys7CiAJCX0KLQkJLyogbm8gbWludW11bSBzcGVlZCAqLworCQkvKiBubyBtaW5pbXVtIHNwZWVkICovCiAJfSBlbHNlIHsKIAkJLyogVFJJR19FWFQgKi8KIAkJLyogc2hvdWxkIGJlIGxldmVsL2VkZ2UsIGhpL2xvIHNwZWNpZmljYXRpb24gaGVyZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxMi5jCmluZGV4IGM2ZGNlNGEuLjA5ZmY0NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODEyLmMKQEAgLTM0LDcgKzM0LDcgQEAKICAqCSAgICAgICBhbmQgSSBjYW5uJ3QgdGVzdCBhbGwgZmVhdHVyZXMuKQogICoKICAqIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGluc24gYW5kIGNtZCBpbnRlcmZhY2VzLiBTb21lIGJvYXJkcyBzdXBwb3J0IG9ubHkgaW5zbgotICogYmVjb3VzZSB0aGVpciBoYXJkd2FyZSBkb24ndCBhbGxvdyBtb3JlIChQQ0wtODEzL0IsIEFDTC04MTEzLCBJU08tODEzKS4KKyAqIGJlY2F1c2UgdGhlaXIgaGFyZHdhcmUgZG9uJ3QgYWxsb3cgbW9yZSAoUENMLTgxMy9CLCBBQ0wtODExMywgSVNPLTgxMykuCiAgKiBEYXRhIHRyYW5zZmVyIG92ZXIgRE1BIGlzIHN1cHBvcnRlZCBvbmx5IHdoZW4geW91IG1lYXN1cmUgb25seSBvbmUKICAqIGNoYW5uZWwsIHRoaXMgaXMgdG9vIGhhcmR3YXJlIGxpbWl0YXRpb24gb2YgdGhlc2UgYm9hcmRzLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTYuYwppbmRleCBlZjNjYzRmLi44ZjNmYzZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxNi5jCkBAIC05NTQsNyArOTU0LDcgQEAKIAl9CiAKIAlpZiAoY2hhbmxlbiA+IDEpIHsKLQkJLyogIGZpcnN0IGNoYW5uZWwgaXMgZXZlcnl0aW1lIG9rICovCisJCS8qICBmaXJzdCBjaGFubmVsIGlzIGV2ZXJ5IHRpbWUgb2sgKi8KIAkJY2hhbnNlZ21lbnRbMF0gPSBjaGFubGlzdFswXTsKIAkJZm9yIChpID0gMSwgc2VnbGVuID0gMTsgaSA8IGNoYW5sZW47IGkrKywgc2VnbGVuKyspIHsKIAkJCS8qICBidWlsZCBwYXJ0IG9mIGNoYW5saXN0ICovCkBAIC05NjgsMTAgKzk2OCwxMCBAQAogCQkJbm93bXVzdGJlY2hhbiA9CiAJCQkgICAgKENSX0NIQU4oY2hhbnNlZ21lbnRbaSAtIDFdKSArIDEpICUgY2hhbmxlbjsKIAkJCWlmIChub3dtdXN0YmVjaGFuICE9IENSX0NIQU4oY2hhbmxpc3RbaV0pKSB7Ci0JCQkJLyogIGNoYW5uZWwgbGlzdCBpc24ndCBjb250aW5vdXMgOi0oICovCisJCQkJLyogIGNoYW5uZWwgbGlzdCBpc24ndCBjb250aW51b3VzIDotKCAqLwogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCQkgICAgICAgImNvbWVkaSVkOiBwY2w4MTY6IGNoYW5uZWwgbGlzdCBtdXN0ICIKLQkJCQkgICAgICAgImJlIGNvbnRpbm91cyEgY2hhbmxpc3RbJWldPSVkIGJ1dCAiCisJCQkJICAgICAgICJiZSBjb250aW51b3VzISBjaGFubGlzdFslaV09JWQgYnV0ICIKIAkJCQkgICAgICAgIm11c3QgYmUgJWQgb3IgJWQhXG4iLCBkZXYtPm1pbm9yLAogCQkJCSAgICAgICBpLCBDUl9DSEFOKGNoYW5saXN0W2ldKSwgbm93bXVzdGJlY2hhbiwKIAkJCQkgICAgICAgQ1JfQ0hBTihjaGFubGlzdFswXSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxOC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxOC5jCmluZGV4IGY1OGQ3NWIuLmUzZWVhMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE4LmMKQEAgLTEyMzEsNyArMTIzMSw3IEBACiAJfQogCiAJaWYgKG5fY2hhbiA+IDEpIHsKLQkJLyogIGZpcnN0IGNoYW5uZWwgaXMgZXZlcnl0aW1lIG9rICovCisJCS8qICBmaXJzdCBjaGFubmVsIGlzIGV2ZXJ5IHRpbWUgb2sgKi8KIAkJY2hhbnNlZ21lbnRbMF0gPSBjaGFubGlzdFswXTsKIAkJLyogIGJ1aWxkIHBhcnQgb2YgY2hhbmxpc3QgKi8KIAkJZm9yIChpID0gMSwgc2VnbGVuID0gMTsgaSA8IG5fY2hhbjsgaSsrLCBzZWdsZW4rKykgewpAQCAtMTI0NSw5ICsxMjQ1LDkgQEAKIAkJCQlicmVhazsKIAkJCW5vd211c3RiZWNoYW4gPQogCQkJICAgIChDUl9DSEFOKGNoYW5zZWdtZW50W2kgLSAxXSkgKyAxKSAlIHMtPm5fY2hhbjsKLQkJCWlmIChub3dtdXN0YmVjaGFuICE9IENSX0NIQU4oY2hhbmxpc3RbaV0pKSB7CS8qICBjaGFubmVsIGxpc3QgaXNuJ3QgY29udGlub3VzIDotKCAqLworCQkJaWYgKG5vd211c3RiZWNoYW4gIT0gQ1JfQ0hBTihjaGFubGlzdFtpXSkpIHsJLyogIGNoYW5uZWwgbGlzdCBpc24ndCBjb250aW51b3VzIDotKCAqLwogCQkJCXByaW50awotCQkJCSAgICAoImNvbWVkaSVkOiBwY2w4MTg6IGNoYW5uZWwgbGlzdCBtdXN0IGJlIGNvbnRpbm91cyEgY2hhbmxpc3RbJWldPSVkIGJ1dCBtdXN0IGJlICVkIG9yICVkIVxuIiwKKwkJCQkgICAgKCJjb21lZGklZDogcGNsODE4OiBjaGFubmVsIGxpc3QgbXVzdCBiZSBjb250aW51b3VzISBjaGFubGlzdFslaV09JWQgYnV0IG11c3QgYmUgJWQgb3IgJWQhXG4iLAogCQkJCSAgICAgZGV2LT5taW5vciwgaSwgQ1JfQ0hBTihjaGFubGlzdFtpXSksCiAJCQkJICAgICBub3dtdXN0YmVjaGFuLCBDUl9DSEFOKGNoYW5saXN0WzBdKSk7CiAJCQkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtbWlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtbWlvLmMKaW5kZXggNWM4MzJkNy4uZjJlODhlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbW1pby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21taW8uYwpAQCAtNzMzLDcgKzczMyw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6Ci0JCS8qIHJldHJlaXZlIGZyb20gc2hhZG93IHJlZ2lzdGVyICovCisJCS8qIHJldHJpZXZlIGZyb20gc2hhZG93IHJlZ2lzdGVyICovCiAJCWRhdGFbMV0gPQogCQkgICAgKHMtPmlvX2JpdHMgJiAoMSA8PCBjaGFuKSkgPyBDT01FRElfT1VUUFVUIDogQ09NRURJX0lOUFVUOwogCQlyZXR1cm4gaW5zbi0+bjsKQEAgLTEyNzksNyArMTI3OSw3IEBACiAJICAgIm5vIGJ1c3kgd2FpdGluZyIgcG9saWN5LiBUaGUgZmFjdCBpcyB0aGF0IHRoZSBoYXJkd2FyZSBpcwogCSAgIG5vcm1hbGx5IHNvIGZhc3QgdGhhdCB3ZSB1c3VhbGx5IG9ubHkgbmVlZCBvbmUgdGltZSB0aHJvdWdoIHRoZSBsb29wCiAJICAgYW55d2F5LiBUaGUgbG9uZ2VyIHRpbWVvdXQgaXMgZm9yIHJhcmUgb2NjYXNpb25zIGFuZCBmb3IgZGV0ZWN0aW5nCi0JICAgbm9uLWV4aXN0YW50IGhhcmR3YXJlLiAgKi8KKwkgICBub24tZXhpc3RlbnQgaGFyZHdhcmUuICAqLwogCiAJd2hpbGUgKHJldHJ5LS0pIHsKIAkJaWYgKGluYihpb2Jhc2UgKyAzKSAmIDB4ODApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtdWlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtdWlvLmMKaW5kZXggN2E5Mjg3NC4uYjJjMmM4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbXVpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY211aW8uYwpAQCAtNjA1LDcgKzYwNSw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6Ci0JCS8qIHJldHJlaXZlIGZyb20gc2hhZG93IHJlZ2lzdGVyICovCisJCS8qIHJldHJpZXZlIGZyb20gc2hhZG93IHJlZ2lzdGVyICovCiAJCWRhdGFbMV0gPQogCQkgICAgKHMtPmlvX2JpdHMgJiAoMSA8PCBjaGFuKSkgPyBDT01FRElfT1VUUFVUIDogQ09NRURJX0lOUFVUOwogCQlyZXR1cm4gaW5zbi0+bjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9xdWF0ZWNoX2RhcXBfY3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9xdWF0ZWNoX2RhcXBfY3MuYwppbmRleCBlYmJhOWJiLi44Mjk0MmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcXVhdGVjaF9kYXFwX2NzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3F1YXRlY2hfZGFxcF9jcy5jCkBAIC0zOTAsNyArMzkwLDcgQEAKIAogCW91dGIodiwgZGV2LT5pb2Jhc2UgKyBEQVFQX0NPTlRST0wpOwogCi0JLyogUmVzZXQgYW55IHBlbmRpbmcgaW50ZXJydXB0cyAobXkgY2FyZCBoYXMgYSB0ZW5kYW5jeSB0byByZXF1aXJlCisJLyogUmVzZXQgYW55IHBlbmRpbmcgaW50ZXJydXB0cyAobXkgY2FyZCBoYXMgYSB0ZW5kZW5jeSB0byByZXF1aXJlCiAJICogcmVxdWlyZSBtdWx0aXBsZSByZWFkcyBvbiB0aGUgc3RhdHVzIHJlZ2lzdGVyIHRvIGFjaGlldmUgdGhpcykKIAkgKi8KIApAQCAtNzUyLDcgKzc1Miw3IEBACiAKIAlvdXRiKHYsIGRldi0+aW9iYXNlICsgREFRUF9DT05UUk9MKTsKIAotCS8qIFJlc2V0IGFueSBwZW5kaW5nIGludGVycnVwdHMgKG15IGNhcmQgaGFzIGEgdGVuZGFuY3kgdG8gcmVxdWlyZQorCS8qIFJlc2V0IGFueSBwZW5kaW5nIGludGVycnVwdHMgKG15IGNhcmQgaGFzIGEgdGVuZGVuY3kgdG8gcmVxdWlyZQogCSAqIHJlcXVpcmUgbXVsdGlwbGUgcmVhZHMgb24gdGhlIHN0YXR1cyByZWdpc3RlciB0byBhY2hpZXZlIHRoaXMpCiAJICovCiAJY291bnRlciA9IDEwMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGQ1MjAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGQ1MjAuYwppbmRleCAzNTc4NThkLi43ZjA5ZWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRkNTIwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0ZDUyMC5jCkBAIC03NSw3ICs3NSw3IEBACiAgICAgZGFzMTgwMCwgc2luY2UgdGhleSBoYXZlIHRoZSBiZXN0IGRvY3VtZW50ZWQgY29kZS4gIERyaXZlcgogICAgIGNiX3BjaWRhczY0LmMgdXNlcyB0aGUgc2FtZSBETUEgY29udHJvbGxlci4KIAotICAgIEFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGUgQWJvdXQgaW50ZXJydXB0IGRvZXNudCB3b3JrIGlmIFNhbXBsZSBpcworICAgIEFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGUgQWJvdXQgaW50ZXJydXB0IGRvZXNuJ3Qgd29yayBpZiBTYW1wbGUgaXMKICAgICBhbHNvIGVuYWJsZWQuICBJdCB0dXJucyBvdXQgdGhhdCBBYm91dCByZWFsbHkgaXNuJ3QgbmVlZGVkLCBzaW5jZQogICAgIHdlIGFsd2F5cyBjb3VudCBkb3duIHNhbXBsZXMgcmVhZC4KIApAQCAtMzcwLDcgKzM3MCw3IEBACiAJLyogdGltZXIgZ2F0ZSAod2hlbiBlbmFibGVkKSAqLwogCXU4IHV0Y0dhdGVbNF07CQkvKiAxIGV4dHJhIGFsbG93cyBzaW1wbGUgcmFuZ2UgY2hlY2sgKi8KIAotCS8qIHNoYWRvdyByZWdpc3RlcnMgYWZmZWN0IG90aGVyIHJlZ2lzdGVycywgYnV0IGNhbnQgYmUgcmVhZCBiYWNrICovCisJLyogc2hhZG93IHJlZ2lzdGVycyBhZmZlY3Qgb3RoZXIgcmVnaXN0ZXJzLCBidXQgY2FuJ3QgYmUgcmVhZCBiYWNrICovCiAJLyogVGhlIG1hY3JvcyBiZWxvdyB1cGRhdGUgdGhlc2Ugb24gd3JpdGVzICovCiAJdTE2IGludE1hc2s7CQkvKiBpbnRlcnJ1cHQgbWFzayAqLwogCXUxNiBpbnRDbGVhck1hc2s7CS8qIGludGVycnVwdCBjbGVhciBtYXNrICovCkBAIC00ODUsNyArNDg1LDcgQEAKICNkZWZpbmUgUnRkQWRjRmlmb0dldChkZXYpIFwKIAlyZWFkdyhkZXZwcml2LT5sYXMxK0xBUzFfQURDX0ZJRk8pCiAKLS8qIFJlYWQgdHdvIEFEQyBkYXRhIHZhbHVlcyAoRE9FU05UIFdPUkspICovCisvKiBSZWFkIHR3byBBREMgZGF0YSB2YWx1ZXMgKERPRVNOJ1QgV09SSykgKi8KICNkZWZpbmUgUnRkQWRjRmlmb0dldDIoZGV2KSBcCiAJcmVhZGwoZGV2cHJpdi0+bGFzMStMQVMxX0FEQ19GSUZPKQogCkBAIC04NTcsNyArODU3LDcgQEAKIAkJCURQUklOVEsoInJ0ZDUyMDogUENJIGxhdGVuY3kgPSAlZFxuIiwgcGNpX2xhdGVuY3kpOwogCQl9CiAKLQkJLyogVW5kb2N1bWVudGVkIEVQTEQgdmVyc2lvbiAoZG9lc250IG1hdGNoIFJURCBkcml2ZXIgcmVzdWx0cykgKi8KKwkJLyogVW5kb2N1bWVudGVkIEVQTEQgdmVyc2lvbiAoZG9lc24ndCBtYXRjaCBSVEQgZHJpdmVyIHJlc3VsdHMpICovCiAJCS8qRFBSSU5USyAoInJ0ZDUyMDogUmVhZGluZyBlcGxkIGZyb20gJXBcbiIsCiAJCSAgIGRldnByaXYtPmxhczArMCk7CiAJCSAgIGVwbGRfdmVyc2lvbiA9IHJlYWRsIChkZXZwcml2LT5sYXMwKzApOwpAQCAtMTI5MSw3ICsxMjkxLDcgQEAKIC8qCiAgICJpbnN0cnVjdGlvbnMiIHJlYWQvd3JpdGUgZGF0YSBpbiAib25lLXNob3QiIG9yICJzb2Z0d2FyZS10cmlnZ2VyZWQiCiAgIG1vZGUgKHNpbXBsZXN0IGNhc2UpLgotICBUaGlzIGRvZXNudCB1c2UgaW50ZXJydXB0cy4KKyAgVGhpcyBkb2Vzbid0IHVzZSBpbnRlcnJ1cHRzLgogCiAgIE5vdGUsIHdlIGRvbid0IGRvIGFueSBzZXR0bGluZyBkZWxheXMuICBVc2UgYSBpbnN0cnVjdGlvbiBsaXN0IHRvCiAgIHNlbGVjdCwgZGVsYXksIHRoZW4gcmVhZC4KQEAgLTIxMjAsNyArMjEyMCw3IEBACiB9CiAKIC8qCi0gIFN0b3AgYSBydW5uaW5nIGRhdGEgYXF1aXNpdGlvbi4KKyAgU3RvcCBhIHJ1bm5pbmcgZGF0YSBhY3F1aXNpdGlvbi4KICovCiBzdGF0aWMgaW50IHJ0ZF9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczYyNi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M2MjYuYwppbmRleCBkNWJhM2FiLi4yM2ZjNjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczYyNi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNjI2LmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCWludCBnb3RfcmVnaW9uczsKIAlzaG9ydCBhbGxvY2F0ZWRCdWY7CiAJdWludDhfdCBhaV9jbWRfcnVubmluZzsJLyogIGFpX2NtZCBpcyBydW5uaW5nICovCi0JdWludDhfdCBhaV9jb250aW5vdXM7CS8qICBjb250aW5vdXMgYXF1aXNpdGlvbiAqLworCXVpbnQ4X3QgYWlfY29udGlub3VzOwkvKiAgY29udGlub3VzIGFjcXVpc2l0aW9uICovCiAJaW50IGFpX3NhbXBsZV9jb3VudDsJLyogIG51bWJlciBvZiBzYW1wbGVzIHRvIGFjcXVpcmUgKi8KIAl1bnNpZ25lZCBpbnQgYWlfc2FtcGxlX3RpbWVyOwogCS8qICB0aW1lIGJldHdlZW4gc2FtcGxlcyBpbiAgdW5pdHMgb2YgdGhlIHRpbWVyICovCkBAIC0xMDQ4LDcgKzEwNDgsNyBAQAogCXVpbnQ4X3QgZ3JvdXA7CiAJdWludDE2X3QgaXJxYml0OwogCi0JREVCVUcoInM2MjZfaXJxX2hhbmRsZXI6IGludGVycnVwdCByZXF1ZXN0IHJlY2lldmVkISEhXG4iKTsKKwlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogaW50ZXJydXB0IHJlcXVlc3QgcmVjZWl2ZWQhISFcbiIpOwogCiAJaWYgKGRldi0+YXR0YWNoZWQgPT0gMCkKIAkJcmV0dXJuIElSUV9OT05FOwpAQCAtMTE2NSwxNCArMTE2NSwxNCBAQAogCQkJCQkJCSgxNiAqIGdyb3VwKSkpCiAJCQkJCSAgICA9PSAxICYmIGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUKSB7CiAJCQkJCQlERUJVRwotCQkJCQkJICAgICgiczYyNl9pcnFfaGFuZGxlcjogRWRnZSBjYXB0dXJlIGludGVycnVwdCByZWNpZXZlZCBmcm9tIGNoYW5uZWwgJWRcbiIsCisJCQkJCQkgICAgKCJzNjI2X2lycV9oYW5kbGVyOiBFZGdlIGNhcHR1cmUgaW50ZXJydXB0IHJlY2VpdmVkIGZyb20gY2hhbm5lbCAlZFxuIiwKIAkJCQkJCSAgICAgY21kLT5zdGFydF9hcmcpOwogCiAJCQkJCQkvKiAgU3RhcnQgZXhlY3V0aW5nIHRoZSBSUFMgcHJvZ3JhbS4gKi8KIAkJCQkJCU1DX0VOQUJMRShQX01DMSwgTUMxX0VSUFMxKTsKIAogCQkJCQkJREVCVUcKLQkJCQkJCSAgICAoInM2MjZfaXJxX2hhbmRsZXI6IGFxdWlzaXRpb24gc3RhcnQgdHJpZ2dlcmVkISEhXG4iKTsKKwkJCQkJCSAgICAoInM2MjZfaXJxX2hhbmRsZXI6IGFjcXVpc2l0aW9uIHN0YXJ0IHRyaWdnZXJlZCEhIVxuIik7CiAKIAkJCQkJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09CiAJCQkJCQkgICAgVFJJR19FWFQpIHsKQEAgLTExOTQsNyArMTE5NCw3IEBACiAJCQkJCSAgICAmJiBjbWQtPnNjYW5fYmVnaW5fc3JjID09CiAJCQkJCSAgICBUUklHX0VYVCkgewogCQkJCQkJREVCVUcKLQkJCQkJCSAgICAoInM2MjZfaXJxX2hhbmRsZXI6IEVkZ2UgY2FwdHVyZSBpbnRlcnJ1cHQgcmVjaWV2ZWQgZnJvbSBjaGFubmVsICVkXG4iLAorCQkJCQkJICAgICgiczYyNl9pcnFfaGFuZGxlcjogRWRnZSBjYXB0dXJlIGludGVycnVwdCByZWNlaXZlZCBmcm9tIGNoYW5uZWwgJWRcbiIsCiAJCQkJCQkgICAgIGNtZC0+c2Nhbl9iZWdpbl9hcmcpOwogCiAJCQkJCQkvKiAgVHJpZ2dlciBBREMgc2NhbiBsb29wIHN0YXJ0IGJ5IHNldHRpbmcgUlBTIFNpZ25hbCAwLiAqLwpAQCAtMTIzNiw3ICsxMjM2LDcgQEAKIAkJCQkJICAgID09IDEKIAkJCQkJICAgICYmIGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19FWFQpIHsKIAkJCQkJCURFQlVHCi0JCQkJCQkgICAgKCJzNjI2X2lycV9oYW5kbGVyOiBFZGdlIGNhcHR1cmUgaW50ZXJydXB0IHJlY2lldmVkIGZyb20gY2hhbm5lbCAlZFxuIiwKKwkJCQkJCSAgICAoInM2MjZfaXJxX2hhbmRsZXI6IEVkZ2UgY2FwdHVyZSBpbnRlcnJ1cHQgcmVjZWl2ZWQgZnJvbSBjaGFubmVsICVkXG4iLAogCQkJCQkJICAgICBjbWQtPmNvbnZlcnRfYXJnKTsKIAogCQkJCQkJLyogIFRyaWdnZXIgQURDIHNjYW4gbG9vcCBzdGFydCBieSBzZXR0aW5nIFJQUyBTaWduYWwgMC4gKi8KQEAgLTE4MDUsNyArMTgwNSw3IEBACiAJCURFQlVHKCJzNjI2X2FpX2NtZDogTlVMTCBjb21tYW5kXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfSBlbHNlIHsKLQkJREVCVUcoInM2MjZfYWlfY21kOiBjb21tYW5kIHJlY2lldmVkISEhXG4iKTsKKwkJREVCVUcoInM2MjZfYWlfY21kOiBjb21tYW5kIHJlY2VpdmVkISEhXG4iKTsKIAl9CiAKIAlpZiAoZGV2LT5pcnEgPT0gMCkgewpAQCAtMTg4MCw3ICsxODgwLDcgQEAKIAkJZGV2cHJpdi0+YWlfY29udGlub3VzID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBUUklHX05PTkU6Ci0JCS8qICBjb250aW5vdXMgYXF1aXNpdGlvbiAqLworCQkvKiAgY29udGlub3VzIGFjcXVpc2l0aW9uICovCiAJCWRldnByaXYtPmFpX2NvbnRpbm91cyA9IDE7CiAJCWRldnByaXYtPmFpX3NhbXBsZV9jb3VudCA9IDA7CiAJCWJyZWFrOwpAQCAtMjU3MCw3ICsyNTcwLDcgQEAKIAl3aGlsZSAoKFJSNzE0NihQX0kyQ0NUUkwpICYgKEkyQ19CVVNZIHwgSTJDX0VSUikpID09IEkyQ19CVVNZKQogCQk7CiAKLQkvKiAgUmV0dXJuIG5vbi16ZXJvIGlmIEkyQyBlcnJvciBvY2N1cmVkLiAqLworCS8qICBSZXR1cm4gbm9uLXplcm8gaWYgSTJDIGVycm9yIG9jY3VycmVkLiAqLwogCXJldHVybiBSUjcxNDYoUF9JMkNDVFJMKSAmIEkyQ19FUlI7CiAKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYwppbmRleCBiZTkzYzMwLi5lNTQzZTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eC5jCkBAIC0yODUsNyArMjg1LDcgQEAKIAlzaG9ydCBpbnQgYW9fY21kX3J1bm5pbmc7CiAJLyogcHdtIGlzIHJ1bm5pbmcgKi8KIAlzaG9ydCBpbnQgcHdtX2NtZF9ydW5uaW5nOwotCS8qIGNvbnRpbm91cyBhcXVpc2l0aW9uICovCisJLyogY29udGlub3VzIGFjcXVpc2l0aW9uICovCiAJc2hvcnQgaW50IGFpX2NvbnRpbm91czsKIAlzaG9ydCBpbnQgYW9fY29udGlub3VzOwogCS8qIG51bWJlciBvZiBzYW1wbGVzIHRvIGFjcXVpcmUgKi8KQEAgLTUwMCw3ICs1MDAsNyBAQAogCiAJLyogdGVzdCwgaWYgd2UgdHJhbnNtaXQgb25seSBhIGZpeGVkIG51bWJlciBvZiBzYW1wbGVzICovCiAJaWYgKCEodGhpc191c2JkdXhzdWItPmFpX2NvbnRpbm91cykpIHsKLQkJLyogbm90IGNvbnRpbm91cywgZml4ZWQgbnVtYmVyIG9mIHNhbXBsZXMgKi8KKwkJLyogbm90IGNvbnRpbnVvdXMsIGZpeGVkIG51bWJlciBvZiBzYW1wbGVzICovCiAJCXRoaXNfdXNiZHV4c3ViLT5haV9zYW1wbGVfY291bnQtLTsKIAkJLyogYWxsIHNhbXBsZXMgcmVjZWl2ZWQ/ICovCiAJCWlmICh0aGlzX3VzYmR1eHN1Yi0+YWlfc2FtcGxlX2NvdW50IDwgMCkgewpAQCAtNjUzLDcgKzY1Myw3IEBACiAJCS8qIHRpbWVyIHplcm8gKi8KIAkJdGhpc191c2JkdXhzdWItPmFvX2NvdW50ZXIgPSB0aGlzX3VzYmR1eHN1Yi0+YW9fdGltZXI7CiAKLQkJLyogaGFuZGxlIG5vbiBjb250aW5vdXMgYXF1aXNpdGlvbiAqLworCQkvKiBoYW5kbGUgbm9uIGNvbnRpbm91cyBhY3F1aXNpdGlvbiAqLwogCQlpZiAoISh0aGlzX3VzYmR1eHN1Yi0+YW9fY29udGlub3VzKSkgewogCQkJLyogZml4ZWQgbnVtYmVyIG9mIHNhbXBsZXMgKi8KIAkJCXRoaXNfdXNiZHV4c3ViLT5hb19zYW1wbGVfY291bnQtLTsKQEAgLTk1Nyw3ICs5NTcsNyBAQAogCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKIAkJZXJyKys7CiAKLQkvKiBzY2FubmluZyBpcyBjb250aW5vdXMgKi8KKwkvKiBzY2FubmluZyBpcyBjb250aW51b3VzICovCiAJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKIAljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfTk9XOwogCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKQEAgLTEyMjIsNyArMTIyMiw3IEBACiAJCXVwKCZ0aGlzX3VzYmR1eHN1Yi0+c2VtKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JLyogc2V0IGN1cnJlbnQgY2hhbm5lbCBvZiB0aGUgcnVubmluZyBhcXVpc2l0aW9uIHRvIHplcm8gKi8KKwkvKiBzZXQgY3VycmVudCBjaGFubmVsIG9mIHRoZSBydW5uaW5nIGFjcXVpc2l0aW9uIHRvIHplcm8gKi8KIAlzLT5hc3luYy0+Y3VyX2NoYW4gPSAwOwogCiAJdGhpc191c2JkdXhzdWItPmR1eF9jb21tYW5kc1sxXSA9IGNtZC0+Y2hhbmxpc3RfbGVuOwpAQCAtMTI4NCw3ICsxMjg0LDcgQEAKIAkJdGhpc191c2JkdXhzdWItPmFpX3NhbXBsZV9jb3VudCA9IGNtZC0+c3RvcF9hcmc7CiAJCXRoaXNfdXNiZHV4c3ViLT5haV9jb250aW5vdXMgPSAwOwogCX0gZWxzZSB7Ci0JCS8qIGNvbnRpbm91cyBhcXVpc2l0aW9uICovCisJCS8qIGNvbnRpbm91cyBhY3F1aXNpdGlvbiAqLwogCQl0aGlzX3VzYmR1eHN1Yi0+YWlfY29udGlub3VzID0gMTsKIAkJdGhpc191c2JkdXhzdWItPmFpX3NhbXBsZV9jb3VudCA9IDA7CiAJfQpAQCAtMTUxNSw3ICsxNTE1LDcgQEAKIAkvKiBqdXN0IG5vdyB3ZSBzY2FuIGFsc28gaW4gdGhlIGhpZ2ggc3BlZWQgbW9kZSBldmVyeSBmcmFtZSAqLwogCS8qIHRoaXMgaXMgZHVlIHRvIGVoY2kgZHJpdmVyIGxpbWl0YXRpb25zICovCiAJaWYgKDApIHsJCS8qICh0aGlzX3VzYmR1eHN1Yi0+aGlnaF9zcGVlZCkgKi8KLQkJLyogc3RhcnQgaW1taWRpYXRlbHkgYSBuZXcgc2NhbiAqLworCQkvKiBzdGFydCBpbW1lZGlhdGVseSBhIG5ldyBzY2FuICovCiAJCS8qIHRoZSBzYW1wbGluZyByYXRlIGlzIHNldCBieSB0aGUgY292ZXJzaW9uIHJhdGUgKi8KIAkJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0ZPTExPVzsKIAl9IGVsc2UgewpAQCAtMTUyNSw3ICsxNTI1LDcgQEAKIAlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCiAJCWVycisrOwogCi0JLyogc2Nhbm5pbmcgaXMgY29udGlub3VzICovCisJLyogc2Nhbm5pbmcgaXMgY29udGludW91cyAqLwogCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CiAJLyogd2UgYWx3YXlzIG91dHB1dCBhdCAxa0h6IGp1c3Qgbm93IGFsbCBjaGFubmVscyBhdCBvbmNlICovCiAJaWYgKDApIHsJCS8qICh0aGlzX3VzYmR1eHN1Yi0+aGlnaF9zcGVlZCkgKi8KQEAgLTE2NDUsNyArMTY0NSw3IEBACiAJZGV2X2RiZygmdGhpc191c2JkdXhzdWItPmludGVyZmFjZS0+ZGV2LAogCQkiY29tZWRpJWQ6ICVzXG4iLCBkZXYtPm1pbm9yLCBfX2Z1bmNfXyk7CiAKLQkvKiBzZXQgY3VycmVudCBjaGFubmVsIG9mIHRoZSBydW5uaW5nIGFxdWlzaXRpb24gdG8gemVybyAqLworCS8qIHNldCBjdXJyZW50IGNoYW5uZWwgb2YgdGhlIHJ1bm5pbmcgYWNxdWlzaXRpb24gdG8gemVybyAqLwogCXMtPmFzeW5jLT5jdXJfY2hhbiA9IDA7CiAJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyArK2kpIHsKIAkJY2hhbiA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSk7CkBAIC0xNjk0LDcgKzE2OTQsNyBAQAogCXRoaXNfdXNiZHV4c3ViLT5hb19jb3VudGVyID0gdGhpc191c2JkdXhzdWItPmFvX3RpbWVyOwogCiAJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgewotCQkvKiBub3QgY29udGlub3VzICovCisJCS8qIG5vdCBjb250aW51b3VzICovCiAJCS8qIGNvdW50ZXIgKi8KIAkJLyogaGlnaCBzcGVlZCBhbHNvIHNjYW5zIGV2ZXJ5dGhpbmcgYXQgb25jZSAqLwogCQlpZiAoMCkgewkvKiAodGhpc191c2JkdXhzdWItPmhpZ2hfc3BlZWQpICovCkBAIC0xNzA4LDcgKzE3MDgsNyBAQAogCQl9CiAJCXRoaXNfdXNiZHV4c3ViLT5hb19jb250aW5vdXMgPSAwOwogCX0gZWxzZSB7Ci0JCS8qIGNvbnRpbm91cyBhcXVpc2l0aW9uICovCisJCS8qIGNvbnRpbm91cyBhY3F1aXNpdGlvbiAqLwogCQl0aGlzX3VzYmR1eHN1Yi0+YW9fY29udGlub3VzID0gMTsKIAkJdGhpc191c2JkdXhzdWItPmFvX3NhbXBsZV9jb3VudCA9IDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eGZhc3QuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXhmYXN0LmMKaW5kZXggNWIxNWU2ZC4uMmE4ZTcyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eGZhc3QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4ZmFzdC5jCkBAIC0xODAsNyArMTgwLDcgQEAKIAkvKiBjb21lZGkgZGV2aWNlIGZvciB0aGUgaW50ZXJydXB0IGNvbnRleHQgKi8KIAlzdHJ1Y3QgY29tZWRpX2RldmljZSAqY29tZWRpZGV2OwogCXNob3J0IGludCBhaV9jbWRfcnVubmluZzsJLyogYXN5bmNocm9ub3VzIGNvbW1hbmQgaXMgcnVubmluZyAqLwotCXNob3J0IGludCBhaV9jb250aW5vdXM7CS8qIGNvbnRpbm91cyBhcXVpc2l0aW9uICovCisJc2hvcnQgaW50IGFpX2NvbnRpbm91czsJLyogY29udGlub3VzIGFjcXVpc2l0aW9uICovCiAJbG9uZyBpbnQgYWlfc2FtcGxlX2NvdW50OwkvKiBudW1iZXIgb2Ygc2FtcGxlcyB0byBhY3F1aXJlICovCiAJdWludDhfdCAqZHV4X2NvbW1hbmRzOwkvKiBjb21tYW5kcyAqLwogCWludCBpZ25vcmU7CQkvKiBjb3VudGVyIHdoaWNoIGlnbm9yZXMgdGhlIGZpcnN0CkBAIC0zOTIsNyArMzkyLDcgQEAKIAlwID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CiAJaWYgKCF1ZGZzLT5pZ25vcmUpIHsKIAkJaWYgKCF1ZGZzLT5haV9jb250aW5vdXMpIHsKLQkJCS8qIG5vdCBjb250aW5vdXMsIGZpeGVkIG51bWJlciBvZiBzYW1wbGVzICovCisJCQkvKiBub3QgY29udGludW91cywgZml4ZWQgbnVtYmVyIG9mIHNhbXBsZXMgKi8KIAkJCW4gPSB1cmItPmFjdHVhbF9sZW5ndGggLyBzaXplb2YodWludDE2X3QpOwogCQkJaWYgKHVubGlrZWx5KHVkZnMtPmFpX3NhbXBsZV9jb3VudCA8IG4pKSB7CiAJCQkJLyoKQEAgLTc3NSw3ICs3NzUsNyBAQAogCQl1cCgmdWRmcy0+c2VtKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JLyogc2V0IGN1cnJlbnQgY2hhbm5lbCBvZiB0aGUgcnVubmluZyBhcXVpc2l0aW9uIHRvIHplcm8gKi8KKwkvKiBzZXQgY3VycmVudCBjaGFubmVsIG9mIHRoZSBydW5uaW5nIGFjcXVpc2l0aW9uIHRvIHplcm8gKi8KIAlzLT5hc3luYy0+Y3VyX2NoYW4gPSAwOwogCiAJLyoKQEAgLTExODIsNyArMTE4Miw3IEBACiAJCX0KIAkJdWRmcy0+YWlfY29udGlub3VzID0gMDsKIAl9IGVsc2UgewotCQkvKiBjb250aW5vdXMgYXF1aXNpdGlvbiAqLworCQkvKiBjb250aW5vdXMgYWNxdWlzaXRpb24gKi8KIAkJdWRmcy0+YWlfY29udGlub3VzID0gMTsKIAkJdWRmcy0+YWlfc2FtcGxlX2NvdW50ID0gMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3B0bTEyMTcvY2xlYXJwYWRfdG0xMjE3LmMgYi9kcml2ZXJzL3N0YWdpbmcvY3B0bTEyMTcvY2xlYXJwYWRfdG0xMjE3LmMKaW5kZXggNzZlNGI3OC4uMGZlNzEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NwdG0xMjE3L2NsZWFycGFkX3RtMTIxNy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jcHRtMTIxNy9jbGVhcnBhZF90bTEyMTcuYwpAQCAtNTIsNyArNTIsNyBAQAogI2RlZmluZSBUTUExMjE3X0RFVl9TVEFUVVMJCTB4MTMJLyogRGV2aWNlIFN0YXR1cyAqLwogI2RlZmluZSBUTUExMjE3X0lOVF9TVEFUVVMJCTB4MTQJLyogSW50ZXJydXB0IFN0YXR1cyAqLwogCi0vKiBDb250cm9sbGVyIGNhbiBkZXRlY3QgdXB0byAyIHBvc3NpYmxlIGZpbmdlciB0b3VjaGVzLgorLyogQ29udHJvbGxlciBjYW4gZGV0ZWN0IHVwIHRvIDIgcG9zc2libGUgZmluZ2VyIHRvdWNoZXMuCiAgKiBFYWNoIGZpbmdlciB0b3VjaCBwcm92aWRlcyAgMTIgYml0IFggWSBjby1vcmRpbmF0ZXMsIHRoZSB2YWx1ZXMgYXJlIHNwbGl0CiAgKiBhY3Jvc3MgMiByZWdpc3RlcnMsIGFuZCBhbiA4IGJpdCAgWiB2YWx1ZSAqLwogI2RlZmluZSBUTUExMjE3X0ZJTkdFUl9TVEFURQkJMHgxOCAvKiBGaW5nZXIgU3RhdGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2NtZHMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2NtZHMuYwppbmRleCAxNDI5NjA4NS4uMzczNWVkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfY21kcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2NtZHMuYwpAQCAtOTE0LDcgKzkxNCw3IEBACiAgKiBSZXR1cm46CiAgKglzdGF0dXMKICAqCi0gKiBDbG9zZXIgYXBsaWNhdGlvbiBoYW5kbGUgYW5kIHJlbGVhc2UgYXBwIHNwZWNpZmljCisgKiBDbG9zZXIgYXBwbGljYXRpb24gaGFuZGxlIGFuZCByZWxlYXNlIGFwcCBzcGVjaWZpYwogICogcmVzb3VyY2VzLgogICovCiBlbnVtIEJDX1NUQVRVUyBjcnlzdGFsaGRfdXNlcl9jbG9zZShzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4LCBzdHJ1Y3QgY3J5c3RhbGhkX3VzZXIgKnVjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfaHcuYyBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2h3LmMKaW5kZXggMTNhNTE0ZC4uNWFjZjM5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfaHcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9ody5jCkBAIC0zMDIsNyArMzAyLDcgQEAKIAljcnlzdGFsaGRfZW5hYmxlX2ludGVycnVwdHMoYWRwKTsKIAogCS8qIEVuYWJsZSB0aGUgb3B0aW9uIGZvciBnZXR0aW5nIHRoZSB0b3RhbCBuby4gb2YgRFdPUkRTCi0JICogdGhhdCBoYXZlIGJlZW4gdHJhbnNmZXJlZCBieSB0aGUgUlhETUEgZW5naW5lCisJICogdGhhdCBoYXZlIGJlZW4gdHJhbnNmZXJyZWQgYnkgdGhlIFJYRE1BIGVuZ2luZQogCSAqLwogCWRiZ19vcHRpb25zID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIE1JU0MxX0RNQV9ERUJVR19PUFRJT05TX1JFRyk7CiAJZGJnX29wdGlvbnMgfD0gMHgxMDsKQEAgLTE3NzYsNyArMTc3Niw3IEBACiAJCXJldHVybiBzdHM7CiAJfQogCi0JLypHZXQgdGhlIFJlc3BvbmNlIEFkZHJlc3MqLworCS8qR2V0IHRoZSBSZXNwb25zZSBBZGRyZXNzKi8KIAljbWRfcmVzX2FkZHIgPSBiY19kZWNfcmVnX3JkKGh3LT5hZHAsIENwdTJIc3RNYngxKTsKIAogCS8qUmVhZCB0aGUgUmVzcG9uc2UqLwpAQCAtMjM2Nyw3ICsyMzY3LDcgQEAKIAlCQ01MT0coQkNNTE9HX0lORk8sICJjbG9jayBpcyBtb3ZpbmcgdG8gJWQgd2l0aCBuICVkIHdpdGggdmNvX21nICVkXG4iLAogCSAgICAgICBody0+Y29yZV9jbG9ja19taHosIG4sIHZjb19tZyk7CiAKLQkvKiBDaGFuZ2UgdGhlIERSQU0gcmVmcmVzaCByYXRlIHRvIGFjY29tb2RhdGUgdGhlIG5ldyBmcmVxdWVuY3kgKi8KKwkvKiBDaGFuZ2UgdGhlIERSQU0gcmVmcmVzaCByYXRlIHRvIGFjY29tbW9kYXRlIHRoZSBuZXcgZnJlcXVlbmN5ICovCiAJLyogcmVmcmVzaCByZWcgPSAoKHJlZnJlc2hfcmF0ZSAqIGNsb2NrX3JhdGUpLzE2KSAtIDE7IHJvdW5kaW5nIHVwKi8KIAlyZWZyZXNoX3JlZyA9ICg3ICogaHctPmNvcmVfY2xvY2tfbWh6IC8gMTYpOwogCWJjX2RlY19yZWdfd3IoaHctPmFkcCwgU0RSQU1fUkVGX1BBUkFNLCAoKDEgPDwgMTIpIHwgcmVmcmVzaF9yZWcpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvbXVzeWNjLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL211c3ljYy5jCmluZGV4IGYyNzRjNzcuLjVjYzM0MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvbXVzeWNjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9tdXN5Y2MuYwpAQCAtMTQ1NSw3ICsxNDU1LDcgQEAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBJZiB0aGUgZGVzY3JpcHRvciBoYXMgbm90IHJlY292ZXJlZCwgdGhlbiBsZWF2aW5nIHRoZSBFTVBUWQogICAgICAgICAgICAgICogZW50cnkgc2V0IHdpbGwgbm90IHNpZ25hbCB0byB0aGUgTVVTWUNDIHRoYXQgdGhpcyBkZXNjcmlwdG9yCi0gICAgICAgICAgICAgKiBoYXMgYmVlbiBzZXJ2aWNlZC4gVGhlIEludGVycnVwdCBRdWV1ZSBjYW4gdGhlbiBzdGFydCBsb29zaW5nCisgICAgICAgICAgICAgKiBoYXMgYmVlbiBzZXJ2aWNlZC4gVGhlIEludGVycnVwdCBRdWV1ZSBjYW4gdGhlbiBzdGFydCBsb3NpbmcKICAgICAgICAgICAgICAqIGF2YWlsYWJsZSBkZXNjcmlwdG9ycyBhbmQgTVVTWUNDIGV2ZW50dWFsbHkgZW5jb3VudGVycyBhbmQKICAgICAgICAgICAgICAqIHJlcG9ydHMgdGhlIElOVEZVTEwgY29uZGl0aW9uLiAgUGVyIG1hbnVhbCwgY2hhbmdpbmcgYW55IGJpdAogICAgICAgICAgICAgICogbWFya3MgZGVzY3JpcHRvciBhcyBhdmFpbGFibGUsIHRodXMgdGhlIHVzZSBvZiBkaWZmZXJlbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvbXVzeWNjLmggYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL211c3ljYy5oCmluZGV4IGQyYzkxZWYuLjY4ZjM2NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvbXVzeWNjLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9tdXN5Y2MuaApAQCAtNzQsNyArNzQsNyBAQAogCiAjZGVmaW5lIElOVF9RVUVVRV9TSVpFICAgIE1VU1lDQ19OSVFECiAKLS8qIFJBTSBpbWFnZSBvZiBNVVNZQ0MgcmVnaXN0ZXJzIGxheWVkIG91dCBhcyBhIEMgc3RydWN0dXJlICovCisvKiBSQU0gaW1hZ2Ugb2YgTVVTWUNDIHJlZ2lzdGVycyBsYWlkIG91dCBhcyBhIEMgc3RydWN0dXJlICovCiAgICAgc3RydWN0IG11c3ljY19ncm91cHIKICAgICB7CiAgICAgICAgIFZJTlQzMiAgICAgIHRocFszMl07ICAgIC8qIFRyYW5zbWl0IEhlYWQgUG9pbnRlciBbNS0yOV0gICAgICAgICAgICovCkBAIC05Niw3ICs5Niw3IEBACiAgICAgICAgIFZJTlQzMiAgICAgIHBjZDsgICAgICAgIC8qIFBvcnQgQ29uZmlndXJhdGlvbiBEZXNjcmlwdG9yIFs1LTE5XSAgICovCiAgICAgfTsKIAotLyogaGFyZHdhcmUgTVVTWUNDIHJlZ2lzdGVycyBsYXllZCBvdXQgYXMgYSBDIHN0cnVjdHVyZSAqLworLyogaGFyZHdhcmUgTVVTWUNDIHJlZ2lzdGVycyBsYWlkIG91dCBhcyBhIEMgc3RydWN0dXJlICovCiAgICAgc3RydWN0IG11c3ljY19nbG9iYWxyCiAgICAgewogICAgICAgICBWSU5UMzIgICAgICBnYnA7ICAgICAgICAvKiBHcm91cCBCYXNlIFBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9wbWNjNF9kZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL3BtY2M0X2RlZnMuaAppbmRleCAxODYzNDdiLi5hMzk1MDVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL3BtY2M0X2RlZnMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL3BtY2M0X2RlZnMuaApAQCAtNTQsOCArNTQsOCBAQAogI2RlZmluZSBNVVNZQ0NfTVRVICAgICAgICAgIDIwNDggIC8qIGRlZmF1bHQgKi8KICNkZWZpbmUgTVVTWUNDX1RYREVTQ19NSU4gICAxMCAgICAvKiBIRExDIG1vZGUgZGVmYXVsdCAqLwogI2RlZmluZSBNVVNZQ0NfUlhERVNDX01JTiAgIDE4ICAgIC8qIEhETEMgbW9kZSBkZWZhdWx0ICovCi0jZGVmaW5lIE1VU1lDQ19UWERFU0NfVFJBTlMgNCAgICAgLyogVHJhbnNwYXJlbnQgbW9kZSBtaW51bXVtICMgb2YgVFggZGVzY3JpcHRvcnMgKi8KLSNkZWZpbmUgTVVTWUNDX1JYREVTQ19UUkFOUyAxMiAgICAvKiBUcmFuc3BhcmVudCBtb2RlIG1pbnVtdW0gIyBvZiBSWCBkZXNjcmlwdG9ycyAqLworI2RlZmluZSBNVVNZQ0NfVFhERVNDX1RSQU5TIDQgICAgIC8qIFRyYW5zcGFyZW50IG1vZGUgbWluaW11bSAjIG9mIFRYIGRlc2NyaXB0b3JzICovCisjZGVmaW5lIE1VU1lDQ19SWERFU0NfVFJBTlMgMTIgICAgLyogVHJhbnNwYXJlbnQgbW9kZSBtaW5pbXVtICMgb2YgUlggZGVzY3JpcHRvcnMgKi8KIAogI2RlZmluZSBNQVhfREVGQVVMVF9JRlFMRU4gIDMyICAgIC8qIG5ldHdvcmsgcWxlbiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL3NiZWNyYy5jIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9zYmVjcmMuYwppbmRleCA1MTIzMjk0Li4zZjNjZDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL3NiZWNyYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvc2JlY3JjLmMKQEAgLTk1LDcgKzk1LDcgQEAKIAogICAgIC8qCiAgICAgICogaWYgdGFibGUgbm90IHlldCBjcmVhdGVkLCBkbyBzby4gRG9uJ3QgY2FyZSBhYm91dCAiZXh0cmEiIHRpbWUKLSAgICAgKiBjaGVja2luZyB0aGlzIGV2ZXJ5dGltZSBzYmVDcmMoKSBpcyBjYWxsZWQsIHNpbmNlIENSQyBjYWxjdWxhdGlvbnMgYXJlCisgICAgICogY2hlY2tpbmcgdGhpcyBldmVyeSB0aW1lIHNiZUNyYygpIGlzIGNhbGxlZCwgc2luY2UgQ1JDIGNhbGN1bGF0aW9ucyBhcmUKICAgICAgKiBhbHJlYWR5IHRpbWUgY29uc3VtaW5nCiAgICAgICovCiAgICAgaWYgKCFjcmNUYWJsZUluaXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL3NiZXByb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvc2JlcHJvYy5jCmluZGV4IDcwYjliMzMuLmY0MjUzMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvc2JlcHJvYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvc2JlcHJvYy5jCkBAIC0yMzksNyArMjM5LDcgQEAKICAgICAgKi8KIAogI2lmIDEKLSAgICAvKiAjNCAtIGludGVwcmV0YXRpb24gb2YgYWJvdmUgPSBzZXQgRU9GLCByZXR1cm4gbGVuICovCisgICAgLyogIzQgLSBpbnRlcnByZXRhdGlvbiBvZiBhYm92ZSA9IHNldCBFT0YsIHJldHVybiBsZW4gKi8KICAgICAqZW9mID0gMTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9hZGRyZXNzX21hcC5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfYWRkcmVzc19tYXAuaAppbmRleCBlNmM4Y2IzLi40MjVlOTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9hZGRyZXNzX21hcC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2FkZHJlc3NfbWFwLmgKQEAgLTg1Niw3ICs4NTYsNyBAQAogICovCiAKIC8qCi0gKiBzdHJ1Y3R1cmUgZm9yIHNwYWNlIGF2YWlsaWFibGUgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwLgorICogc3RydWN0dXJlIGZvciBzcGFjZSBhdmFpbGFibGUgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwLgogICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDA5NAogICoKICAqIDMxLTE3OiByZXNlcnZlZApAQCAtMTAzMSw3ICsxMDMxLDcgQEAKICAqIDMxOiByZXNldCBNSUkgbWdtdAogICogMzAtNjogdW51c2VkCiAgKiA1OiBzY2FuIGF1dG8gaW5jcmVtZW50Ci0gKiA0OiBwcmVhbWJsZSBzdXByZXNzCisgKiA0OiBwcmVhbWJsZSBzdXBwcmVzcwogICogMzogdW5kZWZpbmVkCiAgKiAyLTA6IG1nbXQgY2xvY2sgcmVzZXQKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcGh5LmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9waHkuaAppbmRleCA3ODM0OWFkLi45NDZjMGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9waHkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9waHkuaApAQCAtNDY4LDcgKzQ2OCw3IEBACiAjZGVmaW5lIFRSVUVQSFlfQU5FR19DT01QTEVURSAgICAgICAgICAgMQogI2RlZmluZSBUUlVFUEhZX0FORUdfRElTQUJMRUQgICAgICAgICAgIDIKIAotLyogRGVmaW5lIGR1cGxleCBhZHZlcnRpc21lbnQgZmxhZ3MgKi8KKy8qIERlZmluZSBkdXBsZXggYWR2ZXJ0aXNlbWVudCBmbGFncyAqLwogI2RlZmluZSBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSAgICAgICAgIDB4MDAKICNkZWZpbmUgVFJVRVBIWV9BRFZfRFVQTEVYX0ZVTEwgICAgICAgICAweDAxCiAjZGVmaW5lIFRSVUVQSFlfQURWX0RVUExFWF9IQUxGICAgICAgICAgMHgwMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMKaW5kZXggMzM5MTM2Zi4uZmM2YmQ0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jCkBAIC0xMjIsNyArMTIyLDcgQEAKIAkgKiBudW1iZXIgb2YgZW50cmllcyBpbiBGQlIxLgogCSAqCiAJICogRkJSMSBob2xkcyAibGFyZ2UiIGZyYW1lcywgRkJSMCBob2xkcyAic21hbGwiIGZyYW1lcy4gIElmIEZCUjEKLQkgKiBlbnRyaWVzIGFyZSBodWdlIGluIG9yZGVyIHRvIGFjY29tb2RhdGUgYSAianVtYm8iIGZyYW1lLCB0aGVuIGl0CisJICogZW50cmllcyBhcmUgaHVnZSBpbiBvcmRlciB0byBhY2NvbW1vZGF0ZSBhICJqdW1ibyIgZnJhbWUsIHRoZW4gaXQKIAkgKiB3aWxsIGhhdmUgbGVzcyBlbnRyaWVzLiAgQ29udmVyc2VseSwgRkJSMSB3aWxsIG5vdyBiZSByZWxpZWQgdXBvbgogCSAqIHRvIGNhcnJ5IG1vcmUgIm5vcm1hbCIgZnJhbWVzLCB0aHVzIGl0J3MgZW50cnkgc2l6ZSBhbHNvIGluY3JlYXNlcwogCSAqIGFuZCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgZ29lcyB1cCB0b28gKHNpbmNlIGl0IG5vdyBjYXJyaWVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pc3IuYyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2lzci5jCmluZGV4IGNlNGQ5MzAuLmY3MTZlNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2lzci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2lzci5jCkBAIC00NjYsNyArNDY2LDcgQEAKIAkJLyogSGFuZGxlIFNMViBUaW1lb3V0IEludGVycnVwdCAqLwogCQlpZiAoc3RhdHVzICYgRVRfSU5UUl9TTFZfVElNRU9VVCkgewogCQkJLyoKLQkJCSAqIFRoaXMgbWVhbnMgYSB0aW1lb3V0IGhhcyBvY2N1cmVkIG9uIGEgcmVhZCBvcgorCQkJICogVGhpcyBtZWFucyBhIHRpbWVvdXQgaGFzIG9jY3VycmVkIG9uIGEgcmVhZCBvcgogCQkJICogd3JpdGUgcmVxdWVzdCB0byBvbmUgb2YgdGhlIEpBR0NvcmUgcmVnaXN0ZXJzLiBUaGUKIAkJCSAqIEdsb2JhbCBSZXNvdXJjZXMgYmxvY2sgaGFzIHRlcm1pbmF0ZWQgdGhlIHJlcXVlc3QKIAkJCSAqIGFuZCBvbiBhIHJlYWQgcmVxdWVzdCwgcmV0dXJuZWQgYSAiZmFrZSIgdmFsdWUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9uZXRkZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X25ldGRldi5jCmluZGV4IDBjMjk4Y2EuLmIyNWJhZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X25ldGRldi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X25ldGRldi5jCkBAIC00MTUsNyArNDE1LDcgQEAKIAkgKi8KIAlQYWNrZXRGaWx0ZXIgPSBhZGFwdGVyLT5QYWNrZXRGaWx0ZXI7CiAKLQkvKiBDbGVhciB0aGUgJ211bHRpY2FzdCcgZmxhZyBsb2NhbGx5OyBiZWN1YXNlIHdlIG9ubHkgaGF2ZSBhIHNpbmdsZQorCS8qIENsZWFyIHRoZSAnbXVsdGljYXN0JyBmbGFnIGxvY2FsbHk7IGJlY2F1c2Ugd2Ugb25seSBoYXZlIGEgc2luZ2xlCiAJICogZmxhZyB0byBjaGVjayBtdWx0aWNhc3QsIGFuZCBtdWx0aXBsZSBtdWx0aWNhc3QgYWRkcmVzc2VzIGNhbiBiZQogCSAqIHNldCwgdGhpcyBpcyB0aGUgZWFzaWVzdCB3YXkgdG8gZGV0ZXJtaW5lIGlmIG1vcmUgdGhhbiBvbmUKIAkgKiBtdWx0aWNhc3QgYWRkcmVzcyBpcyBiZWluZyBzZXQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC1wY21jaWEvZnQxMDAwX2Rldi5oIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtcGNtY2lhL2Z0MTAwMF9kZXYuaAppbmRleCA0YTg5YmQxLi4wYjYzZjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC1wY21jaWEvZnQxMDAwX2Rldi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXBjbWNpYS9mdDEwMDBfZGV2LmgKQEAgLTMwLDcgKzMwLDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gRnVuY3Rpb246ICAgZnQxMDAwX3JlYWRfcmVnCi0vLyBEZXNjcmlwdG9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCB0aGUgdmFsdWUgb2YgYSBnaXZlbiBBU0lDIHJlZ2lzdGVyLgorLy8gRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIHRoZSB2YWx1ZSBvZiBhIGdpdmVuIEFTSUMgcmVnaXN0ZXIuCiAvLyBJbnB1dDoKIC8vICAgICBkZXYgICAgLSBkZXZpY2Ugc3RydWN0dXJlCiAvLyAgICAgb2Zmc2V0IC0gQVNJQyByZWdpc3RlciBvZmZzZXQKQEAgLTQ5LDcgKzQ5LDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gRnVuY3Rpb246ICAgZnQxMDAwX3dyaXRlX3JlZwotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4gQVNJQyByZWdpc3Rlci4KKy8vIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSB2YWx1ZSBmb3IgYSBnaXZlbiBBU0lDIHJlZ2lzdGVyLgogLy8gSW5wdXQ6CiAvLyAgICAgZGV2ICAgIC0gZGV2aWNlIHN0cnVjdHVyZQogLy8gICAgIG9mZnNldCAtIEFTSUMgcmVnaXN0ZXIgb2Zmc2V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC1wY21jaWEvZnQxMDAwX2RubGQuYyBiL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXBjbWNpYS9mdDEwMDBfZG5sZC5jCmluZGV4IGIwNzI5ZmMuLmZiMzc1ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXBjbWNpYS9mdDEwMDBfZG5sZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXBjbWNpYS9mdDEwMDBfZG5sZC5jCkBAIC05NSw0NyArOTUsNDcgQEAKIFVTSE9SVCBoZHJfY2hlY2tzdW0oUFBTRVVET19IRFIgcEhkcik7CiAKIHR5cGVkZWYgc3RydWN0IF9EU1BfRklMRV9IRFIgewotCWxvbmcgYnVpbGRfZGF0ZTsKLQlsb25nIGRzcF9jb2ZmX2RhdGU7Ci0JbG9uZyBsb2FkZXJfY29kZV9hZGRyZXNzOwotCWxvbmcgbG9hZGVyX2NvZGVfc2l6ZTsKLQlsb25nIGxvYWRlcl9jb2RlX2VuZDsKLQlsb25nIGRzcF9jb2RlX2FkZHJlc3M7Ci0JbG9uZyBkc3BfY29kZV9zaXplOwotCWxvbmcgZHNwX2NvZGVfZW5kOwotCWxvbmcgcmVzZXJ2ZWRbOF07CisJdTMyICBidWlsZF9kYXRlOworCXUzMiAgZHNwX2NvZmZfZGF0ZTsKKwl1MzIgIGxvYWRlcl9jb2RlX2FkZHJlc3M7CisJdTMyICBsb2FkZXJfY29kZV9zaXplOworCXUzMiAgbG9hZGVyX2NvZGVfZW5kOworCXUzMiAgZHNwX2NvZGVfYWRkcmVzczsKKwl1MzIgIGRzcF9jb2RlX3NpemU7CisJdTMyICBkc3BfY29kZV9lbmQ7CisJdTMyICByZXNlcnZlZFs4XTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIERTUF9GSUxFX0hEUiwgKlBEU1BfRklMRV9IRFI7CiAKIHR5cGVkZWYgc3RydWN0IF9EU1BfRklMRV9IRFJfNSB7Ci0JbG9uZyB2ZXJzaW9uX2lkOwkvLyBWZXJzaW9uIElEIG9mIHRoaXMgaW1hZ2UgZm9ybWF0LgotCWxvbmcgcGFja2FnZV9pZDsJLy8gUGFja2FnZSBJRCBvZiBjb2RlIHJlbGVhc2UuCi0JbG9uZyBidWlsZF9kYXRlOwkvLyBEYXRlL3RpbWUgc3RhbXAgd2hlbiBmaWxlIHdhcyBidWlsdC4KLQlsb25nIGNvbW1hbmRzX29mZnNldDsJLy8gT2Zmc2V0IHRvIGF0dGFjaGVkIGNvbW1hbmRzIGluIFBzZXVkbyBIZHIgZm9ybWF0LgotCWxvbmcgbG9hZGVyX29mZnNldDsJLy8gT2Zmc2V0IHRvIGJvb3Rsb2FkZXIgY29kZS4KLQlsb25nIGxvYWRlcl9jb2RlX2FkZHJlc3M7CS8vIFN0YXJ0IGFkZHJlc3Mgb2YgYm9vdGxvYWRlci4KLQlsb25nIGxvYWRlcl9jb2RlX2VuZDsJLy8gV2hlcmUgYm9vdGxvYWRlciBjb2RlIGVuZHMuCi0JbG9uZyBsb2FkZXJfY29kZV9zaXplOwotCWxvbmcgdmVyc2lvbl9kYXRhX29mZnNldDsJLy8gT2Zmc2V0IHdlcmUgc2NyYW1ibGVkIHZlcnNpb24gZGF0YSBiZWdpbnMuCi0JbG9uZyB2ZXJzaW9uX2RhdGFfc2l6ZTsJLy8gU2l6ZSwgaW4gd29yZHMsIG9mIHNjcmFtYmxlZCB2ZXJzaW9uIGRhdGEuCi0JbG9uZyBuRHNwSW1hZ2VzOwkvLyBOdW1iZXIgb2YgRFNQIGltYWdlcyBpbiBmaWxlLgorCXUzMiAgdmVyc2lvbl9pZDsJLy8gVmVyc2lvbiBJRCBvZiB0aGlzIGltYWdlIGZvcm1hdC4KKwl1MzIgIHBhY2thZ2VfaWQ7CS8vIFBhY2thZ2UgSUQgb2YgY29kZSByZWxlYXNlLgorCXUzMiAgYnVpbGRfZGF0ZTsJLy8gRGF0ZS90aW1lIHN0YW1wIHdoZW4gZmlsZSB3YXMgYnVpbHQuCisJdTMyICBjb21tYW5kc19vZmZzZXQ7CS8vIE9mZnNldCB0byBhdHRhY2hlZCBjb21tYW5kcyBpbiBQc2V1ZG8gSGRyIGZvcm1hdC4KKwl1MzIgIGxvYWRlcl9vZmZzZXQ7CS8vIE9mZnNldCB0byBib290bG9hZGVyIGNvZGUuCisJdTMyICBsb2FkZXJfY29kZV9hZGRyZXNzOwkvLyBTdGFydCBhZGRyZXNzIG9mIGJvb3Rsb2FkZXIuCisJdTMyICBsb2FkZXJfY29kZV9lbmQ7CS8vIFdoZXJlIGJvb3Rsb2FkZXIgY29kZSBlbmRzLgorCXUzMiAgbG9hZGVyX2NvZGVfc2l6ZTsKKwl1MzIgIHZlcnNpb25fZGF0YV9vZmZzZXQ7CS8vIE9mZnNldCB3ZXJlIHNjcmFtYmxlZCB2ZXJzaW9uIGRhdGEgYmVnaW5zLgorCXUzMiAgdmVyc2lvbl9kYXRhX3NpemU7CS8vIFNpemUsIGluIHdvcmRzLCBvZiBzY3JhbWJsZWQgdmVyc2lvbiBkYXRhLgorCXUzMiAgbkRzcEltYWdlczsJLy8gTnVtYmVyIG9mIERTUCBpbWFnZXMgaW4gZmlsZS4KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIERTUF9GSUxFX0hEUl81LCAqUERTUF9GSUxFX0hEUl81OwogCiB0eXBlZGVmIHN0cnVjdCBfRFNQX0lNQUdFX0lORk8gewotCWxvbmcgY29mZl9kYXRlOwkJLy8gRGF0ZS90aW1lIHdoZW4gRFNQIENvZmYgaW1hZ2Ugd2FzIGJ1aWx0LgotCWxvbmcgYmVnaW5fb2Zmc2V0OwkvLyBPZmZzZXQgaW4gZmlsZSB3aGVyZSBpbWFnZSBiZWdpbnMuCi0JbG9uZyBlbmRfb2Zmc2V0OwkvLyBPZmZzZXQgaW4gZmlsZSB3aGVyZSBpbWFnZSBiZWdpbnMuCi0JbG9uZyBydW5fYWRkcmVzczsJLy8gT24gY2hpcCBTdGFydCBhZGRyZXNzIG9mIERTUCBjb2RlLgotCWxvbmcgaW1hZ2Vfc2l6ZTsJLy8gU2l6ZSBvZiBpbWFnZS4KLQlsb25nIHZlcnNpb247CQkvLyBFbWJlZGRlZCB2ZXJzaW9uICMgb2YgRFNQIGNvZGUuCisJdTMyICBjb2ZmX2RhdGU7CQkvLyBEYXRlL3RpbWUgd2hlbiBEU1AgQ29mZiBpbWFnZSB3YXMgYnVpbHQuCisJdTMyICBiZWdpbl9vZmZzZXQ7CS8vIE9mZnNldCBpbiBmaWxlIHdoZXJlIGltYWdlIGJlZ2lucy4KKwl1MzIgIGVuZF9vZmZzZXQ7CS8vIE9mZnNldCBpbiBmaWxlIHdoZXJlIGltYWdlIGJlZ2lucy4KKwl1MzIgIHJ1bl9hZGRyZXNzOwkvLyBPbiBjaGlwIFN0YXJ0IGFkZHJlc3Mgb2YgRFNQIGNvZGUuCisJdTMyICBpbWFnZV9zaXplOwkvLyBTaXplIG9mIGltYWdlLgorCXUzMiAgdmVyc2lvbjsJCS8vIEVtYmVkZGVkIHZlcnNpb24gIyBvZiBEU1AgY29kZS4KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIERTUF9JTUFHRV9JTkZPLCAqUERTUF9JTUFHRV9JTkZPOwogCiB0eXBlZGVmIHN0cnVjdCBfRFNQX0lNQUdFX0lORk9fVjYgewotCWxvbmcgY29mZl9kYXRlOwkJLy8gRGF0ZS90aW1lIHdoZW4gRFNQIENvZmYgaW1hZ2Ugd2FzIGJ1aWx0LgotCWxvbmcgYmVnaW5fb2Zmc2V0OwkvLyBPZmZzZXQgaW4gZmlsZSB3aGVyZSBpbWFnZSBiZWdpbnMuCi0JbG9uZyBlbmRfb2Zmc2V0OwkvLyBPZmZzZXQgaW4gZmlsZSB3aGVyZSBpbWFnZSBiZWdpbnMuCi0JbG9uZyBydW5fYWRkcmVzczsJLy8gT24gY2hpcCBTdGFydCBhZGRyZXNzIG9mIERTUCBjb2RlLgotCWxvbmcgaW1hZ2Vfc2l6ZTsJLy8gU2l6ZSBvZiBpbWFnZS4KLQlsb25nIHZlcnNpb247CQkvLyBFbWJlZGRlZCB2ZXJzaW9uICMgb2YgRFNQIGNvZGUuCisJdTMyICBjb2ZmX2RhdGU7CQkvLyBEYXRlL3RpbWUgd2hlbiBEU1AgQ29mZiBpbWFnZSB3YXMgYnVpbHQuCisJdTMyICBiZWdpbl9vZmZzZXQ7CS8vIE9mZnNldCBpbiBmaWxlIHdoZXJlIGltYWdlIGJlZ2lucy4KKwl1MzIgIGVuZF9vZmZzZXQ7CS8vIE9mZnNldCBpbiBmaWxlIHdoZXJlIGltYWdlIGJlZ2lucy4KKwl1MzIgIHJ1bl9hZGRyZXNzOwkvLyBPbiBjaGlwIFN0YXJ0IGFkZHJlc3Mgb2YgRFNQIGNvZGUuCisJdTMyICBpbWFnZV9zaXplOwkvLyBTaXplIG9mIGltYWdlLgorCXUzMiAgdmVyc2lvbjsJCS8vIEVtYmVkZGVkIHZlcnNpb24gIyBvZiBEU1AgY29kZS4KIAl1bnNpZ25lZCBzaG9ydCBjaGVja3N1bTsJLy8gRHNwIEZpbGUgY2hlY2tzdW0KIAl1bnNpZ25lZCBzaG9ydCBwYWQxOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgRFNQX0lNQUdFX0lORk9fVjYsICpQRFNQX0lNQUdFX0lORk9fVjY7CkBAIC04NDYsOCArODQ2LDggQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgU1RBVEVfRE9ORV9EV05MRDoKLQkJCWlmICgoKFVJTlQpIChwVWNGaWxlKSAtIChVSU5UKSBwRmlsZVN0YXJ0KSA+PQotCQkJCShVSU5UKSBGaWxlTGVuZ3RoKSB7CisJCQlpZiAoKCh1bnNpZ25lZCBsb25nKSAocFVjRmlsZSkgLSAodW5zaWduZWQgbG9uZykgcEZpbGVTdGFydCkgPj0KKwkJCQkodW5zaWduZWQgbG9uZykgRmlsZUxlbmd0aCkgewogCQkJCXVpU3RhdGUgPSBTVEFURV9ET05FX0ZJTEU7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC05MDEsMTEgKzkwMSwxMSBAQAogCQkJCQkJCQkgICZpbmZvLT5wcm92X2xpc3QpOwogCQkJCQkJLy8gTW92ZSB0byBuZXh0IGVudHJ5IGlmIGF2YWlsYWJsZQogCQkJCQkJcFVjRmlsZSA9Ci0JCQkJCQkJKFVDSEFSICopICgoVUlOVCkgcFVjRmlsZSArCi0JCQkJCQkJCSAgIChVSU5UKSAoKHVzSGRyTGVuZ3RoICsgMSkgJiAweEZGRkZGRkZFKSArIHNpemVvZihQU0VVRE9fSERSKSk7Ci0JCQkJCQlpZiAoKFVJTlQpIChwVWNGaWxlKSAtCi0JCQkJCQkJKFVJTlQpIChwRmlsZVN0YXJ0KSA+PQotCQkJCQkJCShVSU5UKSBGaWxlTGVuZ3RoKSB7CisJCQkJCQkJKFVDSEFSICopICgodW5zaWduZWQgbG9uZykgcFVjRmlsZSArCisJCQkJCQkJCSAgICh1bnNpZ25lZCBsb25nKSAoKHVzSGRyTGVuZ3RoICsgMSkgJiAweEZGRkZGRkZFKSArIHNpemVvZihQU0VVRE9fSERSKSk7CisJCQkJCQlpZiAoKHVuc2lnbmVkIGxvbmcpIChwVWNGaWxlKSAtCisJCQkJCQkJKHVuc2lnbmVkIGxvbmcpIChwRmlsZVN0YXJ0KSA+PQorCQkJCQkJCSh1bnNpZ25lZCBsb25nKSBGaWxlTGVuZ3RoKSB7CiAJCQkJCQkJdWlTdGF0ZSA9CiAJCQkJCQkJCVNUQVRFX0RPTkVfRklMRTsKIAkJCQkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXBjbWNpYS9mdDEwMDBfaHcuYyBiL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXBjbWNpYS9mdDEwMDBfaHcuYwppbmRleCBmZjY5MWQ5Li44MzA4MjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC1wY21jaWEvZnQxMDAwX2h3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtcGNtY2lhL2Z0MTAwMF9ody5jCkBAIC05MCw3ICs5MCw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KIC8vIEZ1bmN0aW9uOiAgIGZ0MTAwMF9hc2ljX3JlYWQKLS8vIERlc2NyaXB0b246IFRoaXMgZnVuY3Rpb24gd2lsbCByZXRyaWV2ZSB0aGUgdmFsdWUgb2YgYSBzcGVjaWZpYyBBU0lDCisvLyBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHJpZXZlIHRoZSB2YWx1ZSBvZiBhIHNwZWNpZmljIEFTSUMKIC8vICAgICAgICAgICAgIHJlZ2lzdGVyLgogLy8gSW5wdXQ6CiAvLyAgICBkZXYgLSBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTEwNyw3ICsxMDcsNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCiAvLyBGdW5jdGlvbjogICBmdDEwMDBfYXNpY193cml0ZQotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgdmFsdWUgb2YgYSBzcGVjaWZpYyBBU0lDCisvLyBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgdmFsdWUgb2YgYSBzcGVjaWZpYyBBU0lDCiAvLyAgICAgICAgICAgICByZWdpc3Rlci4KIC8vIElucHV0OgogLy8gICAgZGV2IC0gbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlCkBAIC0xMjQsNyArMTI0LDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gRnVuY3Rpb246ICAgZnQxMDAwX3JlYWRfZmlmb19sZW4KLS8vIERlc2NyaXB0b246IFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIHRoZSBBU0lDIFVwbGluayBGSUZPIHN0YXR1cyByZWdpc3RlcgorLy8gRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIHRoZSBBU0lDIFVwbGluayBGSUZPIHN0YXR1cyByZWdpc3RlcgogLy8gICAgICAgICAgICAgd2hpY2ggd2lsbCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyByZW1haW5pbmcgaW4gdGhlIFVwbGluayBGSUZPLgogLy8gICAgICAgICAgICAgU2l4dGVlbiBieXRlcyBhcmUgc3VidHJhY3RlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgQVNJQyBkb2VzIG5vdAogLy8gICAgICAgICAgICAgcmVhY2ggaXRzIHRocmVzaG9sZC4KQEAgLTE0OCw3ICsxNDgsNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCiAvLyBGdW5jdGlvbjogICBmdDEwMDBfcmVhZF9kcHJhbQotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgdGhlIHNwZWNpZmljIGFyZWEgb2YgZHByYW0KKy8vIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCB0aGUgc3BlY2lmaWMgYXJlYSBvZiBkcHJhbQogLy8gICAgICAgICAgICAgKEVsZWN0cmFidXp6IEFTSUMgb25seSkKIC8vIElucHV0OgogLy8gICAgIGRldiAgICAtIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTE3NSw3ICsxNzUsNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCiAvLyBGdW5jdGlvbjogICBmdDEwMDBfd3JpdGVfZHByYW0KLS8vIERlc2NyaXB0b246IFRoaXMgZnVuY3Rpb24gd2lsbCB3cml0ZSB0byBhIHNwZWNpZmljIGFyZWEgb2YgZHByYW0KKy8vIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgd3JpdGUgdG8gYSBzcGVjaWZpYyBhcmVhIG9mIGRwcmFtCiAvLyAgICAgICAgICAgICAoRWxlY3RyYWJ1enogQVNJQyBvbmx5KQogLy8gSW5wdXQ6CiAvLyAgICAgZGV2ICAgIC0gZGV2aWNlIHN0cnVjdHVyZQpAQCAtMjAxLDcgKzIwMSw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KIC8vIEZ1bmN0aW9uOiAgIGZ0MTAwMF9yZWFkX2RwcmFtX21hZ18xNgotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgdGhlIHNwZWNpZmljIGFyZWEgb2YgZHByYW0KKy8vIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCB0aGUgc3BlY2lmaWMgYXJlYSBvZiBkcHJhbQogLy8gICAgICAgICAgICAgKE1hZ25lbWl0ZSBBU0lDIG9ubHkpCiAvLyBJbnB1dDoKIC8vICAgICBkZXYgICAgLSBkZXZpY2Ugc3RydWN0dXJlCkBAIC0yMzMsNyArMjMzLDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gRnVuY3Rpb246ICAgZnQxMDAwX3dyaXRlX2RwcmFtX21hZ18xNgotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHdyaXRlIHRvIGEgc3BlY2lmaWMgYXJlYSBvZiBkcHJhbQorLy8gRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gd2lsbCB3cml0ZSB0byBhIHNwZWNpZmljIGFyZWEgb2YgZHByYW0KIC8vICAgICAgICAgICAgIChNYWduZW1pdGUgQVNJQyBvbmx5KQogLy8gSW5wdXQ6CiAvLyAgICAgZGV2ICAgIC0gZGV2aWNlIHN0cnVjdHVyZQpAQCAtMjYzLDcgKzI2Myw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KIC8vIEZ1bmN0aW9uOiAgIGZ0MTAwMF9yZWFkX2RwcmFtX21hZ18zMgotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgdGhlIHNwZWNpZmljIGFyZWEgb2YgZHByYW0KKy8vIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCB0aGUgc3BlY2lmaWMgYXJlYSBvZiBkcHJhbQogLy8gICAgICAgICAgICAgKE1hZ25lbWl0ZSBBU0lDIG9ubHkpCiAvLyBJbnB1dDoKIC8vICAgICBkZXYgICAgLSBkZXZpY2Ugc3RydWN0dXJlCkBAIC0yOTAsNyArMjkwLDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gRnVuY3Rpb246ICAgZnQxMDAwX3dyaXRlX2RwcmFtX21hZ18zMgotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHdyaXRlIHRvIGEgc3BlY2lmaWMgYXJlYSBvZiBkcHJhbQorLy8gRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gd2lsbCB3cml0ZSB0byBhIHNwZWNpZmljIGFyZWEgb2YgZHByYW0KIC8vICAgICAgICAgICAgIChNYWduZW1pdGUgQVNJQyBvbmx5KQogLy8gSW5wdXQ6CiAvLyAgICAgZGV2ICAgIC0gZGV2aWNlIHN0cnVjdHVyZQpAQCAtMzE1LDcgKzMxNSw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KIC8vIEZ1bmN0aW9uOiAgIGZ0MTAwMF9lbmFibGVfaW50ZXJydXB0cwotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIGVuYWJsZSBpbnRlcnJ1cHRzIGJhc2Ugb24gdGhlIGN1cnJlbnQgaW50ZXJydXB0IG1hc2suCisvLyBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiB3aWxsIGVuYWJsZSBpbnRlcnJ1cHRzIGJhc2Ugb24gdGhlIGN1cnJlbnQgaW50ZXJydXB0IG1hc2suCiAvLyBJbnB1dDoKIC8vICAgICBkZXYgICAgLSBkZXZpY2Ugc3RydWN0dXJlCiAvLyBPdXRwdXQ6CkBAIC0zNDAsNyArMzQwLDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gRnVuY3Rpb246ICAgZnQxMDAwX2Rpc2FibGVfaW50ZXJydXB0cwotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIGRpc2FibGUgYWxsIGludGVycnVwdHMuCisvLyBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiB3aWxsIGRpc2FibGUgYWxsIGludGVycnVwdHMuCiAvLyBJbnB1dDoKIC8vICAgICBkZXYgICAgLSBkZXZpY2Ugc3RydWN0dXJlCiAvLyBPdXRwdXQ6CkBAIC0zNjQsNyArMzY0LDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gRnVuY3Rpb246ICAgZnQxMDAwX3Jlc2V0X2FzaWMKLS8vIERlc2NyaXB0b246IFRoaXMgZnVuY3Rpb24gd2lsbCBjYWxsIHRoZSBDYXJkIFNlcnZpY2UgZnVuY3Rpb24gdG8gcmVzZXQgdGhlCisvLyBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiB3aWxsIGNhbGwgdGhlIENhcmQgU2VydmljZSBmdW5jdGlvbiB0byByZXNldCB0aGUKIC8vICAgICAgICAgICAgIEFTSUMuCiAvLyBJbnB1dDoKIC8vICAgICBkZXYgICAgLSBkZXZpY2Ugc3RydWN0dXJlCkBAIC00MDgsNyArNDA4LDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gRnVuY3Rpb246ICAgZnQxMDAwX3Jlc2V0X2NhcmQKLS8vIERlc2NyaXB0b246IFRoaXMgZnVuY3Rpb24gd2lsbCByZXNldCB0aGUgY2FyZAorLy8gRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gd2lsbCByZXNldCB0aGUgY2FyZAogLy8gSW5wdXQ6CiAvLyAgICAgZGV2ICAgIC0gZGV2aWNlIHN0cnVjdHVyZQogLy8gT3V0cHV0OgpAQCAtNTcxLDcgKzU3MSw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KIC8vIEZ1bmN0aW9uOiAgIGZ0MTAwMF9jaGtjYXJkCi0vLyBEZXNjcmlwdG9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2hlY2sgaWYgdGhlIGRldmljZSBpcyBwcmVzZW50bHkgYXZhaWxhYmxlIG9uCisvLyBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiB3aWxsIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgcHJlc2VudGx5IGF2YWlsYWJsZSBvbgogLy8gICAgICAgICAgICAgdGhlIHN5c3RlbS4KIC8vIElucHV0OgogLy8gICAgIGRldiAgICAtIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTYwNyw3ICs2MDcsNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCiAvLyBGdW5jdGlvbjogICBmdDEwMDBfaGJjaGsKLS8vIERlc2NyaXB0b246IFRoaXMgZnVuY3Rpb24gd2lsbCBwZXJmb3JtIHRoZSBoZWFydCBiZWF0IGNoZWNrIG9mIHRoZSBEU1AgYXMKKy8vIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgcGVyZm9ybSB0aGUgaGVhcnQgYmVhdCBjaGVjayBvZiB0aGUgRFNQIGFzCiAvLyAgICAgICAgICAgICB3ZWxsIGFzIHRoZSBBU0lDLgogLy8gSW5wdXQ6CiAvLyAgICAgZGV2ICAgIC0gZGV2aWNlIHN0cnVjdHVyZQpAQCAtODI4LDcgKzgyOCw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KIC8vIEZ1bmN0aW9uOiAgIGZ0MTAwMF9zZW5kX2NtZAotLy8gRGVzY3JpcHRvbjoKKy8vIERlc2NyaXB0aW9uOgogLy8gSW5wdXQ6CiAvLyBPdXRwdXQ6CiAvLwpAQCAtOTA4LDcgKzkwOCw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KIC8vIEZ1bmN0aW9uOiAgIGZ0MTAwMF9yZWNlaXZlX2NtZAotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgYSBtZXNzYWdlIGZyb20gdGhlIGRwcmFtIGFyZWEuCisvLyBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgYSBtZXNzYWdlIGZyb20gdGhlIGRwcmFtIGFyZWEuCiAvLyBJbnB1dDoKIC8vICAgIGRldiAtIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZQogLy8gICAgcGJ1ZmZlciAtIGNhbGxlciBzdXBwbHkgYWRkcmVzcyB0byBidWZmZXIKQEAgLTEwMDMsNyArMTAwMyw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KIC8vIEZ1bmN0aW9uOiAgIGZ0MTAwMF9wcm9jX2Rydm1zZwotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHByb2Nlc3MgdGhlIHZhcmlvdXMgZHJpdmVyIG1lc3NhZ2VzLgorLy8gRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gd2lsbCBwcm9jZXNzIHRoZSB2YXJpb3VzIGRyaXZlciBtZXNzYWdlcy4KIC8vIElucHV0OgogLy8gICAgIGRldiAgICAtIGRldmljZSBzdHJ1Y3R1cmUKIC8vICAgICBwbnh0cGggLSBwb2ludGVyIHRvIG5leHQgcHNldWRvIGhlYWRlcgpAQCAtMTI4NSw3ICsxMjg1LDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gRnVuY3Rpb246ICAgZnQxMDAwX3BhcnNlX2RwcmFtX21zZwotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHBhcnNlIHRoZSBtZXNzYWdlIHJlY2VpdmVkIGZyb20gdGhlIERTUAorLy8gRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gd2lsbCBwYXJzZSB0aGUgbWVzc2FnZSByZWNlaXZlZCBmcm9tIHRoZSBEU1AKIC8vICAgICAgICAgICAgIHZpYSB0aGUgRFBSQU0gaW50ZXJmYWNlLgogLy8gSW5wdXQ6CiAvLyAgICAgZGV2ICAgIC0gZGV2aWNlIHN0cnVjdHVyZQpAQCAtMTQ0Miw3ICsxNDQyLDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gRnVuY3Rpb246ICAgZnQxMDAwX2ZsdXNoX2ZpZm8KLS8vIERlc2NyaXB0b246IFRoaXMgZnVuY3Rpb24gd2lsbCBmbHVzaCBvbmUgcGFja2V0IGZyb20gdGhlIGRvd25saW5rCisvLyBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiB3aWxsIGZsdXNoIG9uZSBwYWNrZXQgZnJvbSB0aGUgZG93bmxpbmsKIC8vICAgICAgICAgICAgIEZJRk8uCiAvLyBJbnB1dDoKIC8vICAgICBkZXYgICAgICAtIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTE1ODcsNyArMTU4Nyw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KIC8vIEZ1bmN0aW9uOiAgIGZ0MTAwMF9jb3B5X3VwX3BrdAotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHB1bGwgRmxhcmlvbiBwYWNrZXRzIG91dCBvZiB0aGUgRG93bmxpbmsKKy8vIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgcHVsbCBGbGFyaW9uIHBhY2tldHMgb3V0IG9mIHRoZSBEb3dubGluawogLy8gICAgICAgICAgICAgRklGTyBhbmQgY29udmVydCBpdCB0byBhbiBldGhlcm5ldCBwYWNrZXQuICBUaGUgZXRoZXJuZXQgcGFja2V0IHdpbGwKIC8vICAgICAgICAgICAgIHRoZW4gYmUgZGVsaXZlciB0byB0aGUgVENQL0lQIHN0YWNrLgogLy8gSW5wdXQ6CkBAIC0xNzczLDcgKzE3NzMsNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCiAvLyBGdW5jdGlvbjogICBmdDEwMDBfY29weV9kb3duX3BrdAotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgYW4gZXRoZXJuZXQgcGFja2V0IGFuZCBjb252ZXJ0IGl0IHRvCisvLyBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgYW4gZXRoZXJuZXQgcGFja2V0IGFuZCBjb252ZXJ0IGl0IHRvCiAvLyAgICAgICAgICAgICBhIEZsYXJpb24gcGFja2V0IHByaW9yIHRvIHNlbmRpbmcgaXQgdG8gdGhlIEFTSUMgRG93bmxpbmsKIC8vICAgICAgICAgICAgIEZJRk8uCiAvLyBJbnB1dDoKQEAgLTIyODgsNyArMjI4OCwzIEBACiAJZnJlZV9uZXRkZXYoZGV2KTsKIAlyZXR1cm4gTlVMTDsKIH0KLQotRVhQT1JUX1NZTUJPTChpbml0X2Z0MTAwMF9jYXJkKTsKLUVYUE9SVF9TWU1CT0woc3RvcF9mdDEwMDBfY2FyZCk7Ci1FWFBPUlRfU1lNQk9MKGZsYXJpb25fZnQxMDAwX2NudCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC1wY21jaWEvZnQxMDAwX3Byb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXBjbWNpYS9mdDEwMDBfcHJvYy5jCmluZGV4IDkzNTYwOGUuLmJkZmIxYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXBjbWNpYS9mdDEwMDBfcHJvYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXBjbWNpYS9mdDEwMDBfcHJvYy5jCkBAIC0yMTQsNiArMjE0LDMgQEAKIAlyZW1vdmVfcHJvY19lbnRyeShGVDEwMDBfUFJPQywgaW5pdF9uZXQucHJvY19uZXQpOwogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZmdDEwMDBfbmV0ZGV2X25vdGlmaWVyKTsKIH0KLQotRVhQT1JUX1NZTUJPTChmdDEwMDBJbml0UHJvYyk7Ci1FWFBPUlRfU1lNQk9MKGZ0MTAwMENsZWFudXBQcm9jKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXVzYi9mdDEwMDBfZG93bmxvYWQuYyBiL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXVzYi9mdDEwMDBfZG93bmxvYWQuYwppbmRleCA4ZTYyMjQyLi4xOTcyYjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC11c2IvZnQxMDAwX2Rvd25sb2FkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF9kb3dubG9hZC5jCkBAIC00ODgsNyArNDg4LDcgQEAKIC8vIFBhcmFtZXRlcnM6ICBzdHJ1Y3QgZnQxMDAwX2RldmljZSAgLSBkZXZpY2Ugc3RydWN0dXJlCiAvLyAgICAgICAgICAgICAgdTE2ICoqcFVzRmlsZSAtIERTUCBpbWFnZSBmaWxlIHBvaW50ZXIgaW4gdTE2CiAvLyAgICAgICAgICAgICAgdTggICoqcFVjRmlsZSAtIERTUCBpbWFnZSBmaWxlIHBvaW50ZXIgaW4gdTgKLS8vICAgICAgICAgICAgICBsb25nICAgd29yZF9sZW5ndGggLSBsZW5naHQgb2YgdGhlIGJ1ZmZlciB0byBiZSB3cml0dGVuCisvLyAgICAgICAgICAgICAgbG9uZyAgIHdvcmRfbGVuZ3RoIC0gbGVuZ3RoIG9mIHRoZSBidWZmZXIgdG8gYmUgd3JpdHRlbgogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIERQUkFNCiAvLwogLy8gUmV0dXJuczogICAgIFNUQVRVU19TVUNDRVNTIC0gc3VjY2VzcwpAQCAtNjI4LDcgKzYyOCw3IEBACiAvLyBQYXJhbWV0ZXJzOiAgc3RydWN0IGZ0MTAwMF9kZXZpY2UgIC0gZGV2aWNlIHN0cnVjdHVyZQogLy8gICAgICAgICAgICAgIHUxNiAqKnBVc0ZpbGUgLSBEU1AgaW1hZ2UgZmlsZSBwb2ludGVyIGluIHUxNgogLy8gICAgICAgICAgICAgIHU4ICAqKnBVY0ZpbGUgLSBEU1AgaW1hZ2UgZmlsZSBwb2ludGVyIGluIHU4Ci0vLyAgICAgICAgICAgICAgbG9uZyAgIHdvcmRfbGVuZ3RoIC0gbGVuZ2h0IG9mIHRoZSBidWZmZXIgdG8gYmUgd3JpdHRlbgorLy8gICAgICAgICAgICAgIGxvbmcgICB3b3JkX2xlbmd0aCAtIGxlbmd0aCBvZiB0aGUgYnVmZmVyIHRvIGJlIHdyaXR0ZW4KIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBEUFJBTQogLy8KIC8vIFJldHVybnM6ICAgICBTVEFUVVNfU1VDQ0VTUyAtIHN1Y2Nlc3MKQEAgLTgxNyw3ICs4MTcsNyBAQAogCQkJCQkJICogRXJyb3IsIGJleW9uZCBib290IGNvZGUgcmFuZ2UuCiAJCQkJCQkgKi8KIAkJCQkJCURFQlVHCi0JCQkJCQkgICAgKCJGVDEwMDA6ZG93bmxvYWQ6RG93bmxvYWQgZXJyb3I6IFJlcXVlc3RlZCBsZW49JWQgZXhjZWVkcyBCT09UIGNvZGUgYm91bmRyeS5cbiIsCisJCQkJCQkgICAgKCJGVDEwMDA6ZG93bmxvYWQ6RG93bmxvYWQgZXJyb3I6IFJlcXVlc3RlZCBsZW49JWQgZXhjZWVkcyBCT09UIGNvZGUgYm91bmRhcnkuXG4iLAogCQkJCQkJICAgICAoaW50KXdvcmRfbGVuZ3RoKTsKIAkJCQkJCXN0YXR1cyA9IFNUQVRVU19GQUlMVVJFOwogCQkJCQkJYnJlYWs7CkBAIC05NTAsNyArOTUwLDcgQEAKIAkJCQkJCSAqIEVycm9yLCBiZXlvbmQgYm9vdCBjb2RlIHJhbmdlLgogCQkJCQkJICovCiAJCQkJCQlERUJVRwotCQkJCQkJICAgICgiRlQxMDAwOmRvd25sb2FkOkRvd25sb2FkIGVycm9yOiBSZXF1ZXN0ZWQgbGVuPSVkIGV4Y2VlZHMgRFNQIGNvZGUgYm91bmRyeS5cbiIsCisJCQkJCQkgICAgKCJGVDEwMDA6ZG93bmxvYWQ6RG93bmxvYWQgZXJyb3I6IFJlcXVlc3RlZCBsZW49JWQgZXhjZWVkcyBEU1AgY29kZSBib3VuZGFyeS5cbiIsCiAJCQkJCQkgICAgIChpbnQpd29yZF9sZW5ndGgpOwogCQkJCQkJc3RhdHVzID0gU1RBVFVTX0ZBSUxVUkU7CiAJCQkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXVzYi9mdDEwMDBfaHcuYyBiL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXVzYi9mdDEwMDBfaHcuYwppbmRleCA3OGRjZDQ5Li42ODRlNjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC11c2IvZnQxMDAwX2h3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF9ody5jCkBAIC01ODUsNyArNTg1LDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gRnVuY3Rpb246ICAgZnQxMDAwX3Jlc2V0X2FzaWMKLS8vIERlc2NyaXB0b246IFRoaXMgZnVuY3Rpb24gd2lsbCBjYWxsIHRoZSBDYXJkIFNlcnZpY2UgZnVuY3Rpb24gdG8gcmVzZXQgdGhlCisvLyBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiB3aWxsIGNhbGwgdGhlIENhcmQgU2VydmljZSBmdW5jdGlvbiB0byByZXNldCB0aGUKIC8vICAgICAgICAgICAgIEFTSUMuCiAvLyBJbnB1dDoKIC8vICAgICBkZXYgICAgLSBkZXZpY2Ugc3RydWN0dXJlCkBAIC02MjYsNyArNjI2LDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gRnVuY3Rpb246ICAgZnQxMDAwX3Jlc2V0X2NhcmQKLS8vIERlc2NyaXB0b246IFRoaXMgZnVuY3Rpb24gd2lsbCByZXNldCB0aGUgY2FyZAorLy8gRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gd2lsbCByZXNldCB0aGUgY2FyZAogLy8gSW5wdXQ6CiAvLyAgICAgZGV2ICAgIC0gZGV2aWNlIHN0cnVjdHVyZQogLy8gT3V0cHV0OgpAQCAtOTE3LDcgKzkxNyw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KIC8vIEZ1bmN0aW9uOiAgIGZ0MTAwMF9jb3B5X2Rvd25fcGt0Ci0vLyBEZXNjcmlwdG9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhbiBldGhlcm5ldCBwYWNrZXQgYW5kIGNvbnZlcnQgaXQgdG8KKy8vIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhbiBldGhlcm5ldCBwYWNrZXQgYW5kIGNvbnZlcnQgaXQgdG8KIC8vICAgICAgICAgICAgIGEgRmxhcmlvbiBwYWNrZXQgcHJpb3IgdG8gc2VuZGluZyBpdCB0byB0aGUgQVNJQyBEb3dubGluawogLy8gICAgICAgICAgICAgRklGTy4KIC8vIElucHV0OgpAQCAtMTA3NSwxMCArMTA3NSwxMCBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCiAvLyBGdW5jdGlvbjogICBmdDEwMDBfY29weV91cF9wa3QKLS8vIERlc2NyaXB0b246IFRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIGEgcGFja2V0IGZyb20gdGhlIEZJRk8gdXAgbGluayBhbmQKKy8vIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhIHBhY2tldCBmcm9tIHRoZSBGSUZPIHVwIGxpbmsgYW5kCiAvLyAgICAgICAgICAgICBjb252ZXJ0IGl0IGludG8gYW4gZXRoZXJuZXQgcGFja2V0IGFuZCBkZWxpdmVyIGl0IHRvIHRoZSBJUCBzdGFjawogLy8gSW5wdXQ6Ci0vLyAgICAgdXJiIC0gdGhlIHJlY2V2aW5nIHVzYiB1cmIKKy8vICAgICB1cmIgLSB0aGUgcmVjZWl2aW5nIHVzYiB1cmIKIC8vCiAvLyBPdXRwdXQ6CiAvLyAgICAgc3RhdHVzIC0gRkFJTFVSRQpAQCAtMTE4Miw3ICsxMTgyLDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gRnVuY3Rpb246ICAgZnQxMDAwX3N1Ym1pdF9yeF91cmIKLS8vIERlc2NyaXB0b246IHRoZSByZWNlaXZpbmcgZnVuY3Rpb24gb2YgdGhlIG5ldHdvcmsgZHJpdmVyCisvLyBEZXNjcmlwdGlvbjogdGhlIHJlY2VpdmluZyBmdW5jdGlvbiBvZiB0aGUgbmV0d29yayBkcml2ZXIKIC8vCiAvLyBJbnB1dDoKIC8vICAgICBpbmZvIC0gYSBwcml2YXRlIHN0cnVjdHVyZSBjb250YWlucyB0aGUgZGV2aWNlIGluZm9ybWF0aW9uCkBAIC0xMzE2LDcgKzEzMTYsNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCiAvLyBGdW5jdGlvbjogICBmdDEwMDBfY2hrY2FyZAotLy8gRGVzY3JpcHRvbjogVGhpcyBmdW5jdGlvbiB3aWxsIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgcHJlc2VudGx5IGF2YWlsYWJsZSBvbgorLy8gRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gd2lsbCBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIHByZXNlbnRseSBhdmFpbGFibGUgb24KIC8vICAgICAgICAgICAgIHRoZSBzeXN0ZW0uCiAvLyBJbnB1dDoKIC8vICAgICBkZXYgICAgLSBkZXZpY2Ugc3RydWN0dXJlCkBAIC0xMzYzLDcgKzEzNjMsNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCiAvLyBGdW5jdGlvbjogICBmdDEwMDBfcmVjZWl2ZV9jbWQKLS8vIERlc2NyaXB0b246IFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIGEgbWVzc2FnZSBmcm9tIHRoZSBkcHJhbSBhcmVhLgorLy8gRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIGEgbWVzc2FnZSBmcm9tIHRoZSBkcHJhbSBhcmVhLgogLy8gSW5wdXQ6CiAvLyAgICBkZXYgLSBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUKIC8vICAgIHBidWZmZXIgLSBjYWxsZXIgc3VwcGx5IGFkZHJlc3MgdG8gYnVmZmVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC11c2IvZnQxMDAwX2lvY3RsLmggYi9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC11c2IvZnQxMDAwX2lvY3RsLmgKaW5kZXggM2Y3MmQ1Yi4uNmE4YTE5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF9pb2N0bC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXVzYi9mdDEwMDBfaW9jdGwuaApAQCAtNTUsNyArNTUsNyBAQAogICAgdW5zaWduZWQgY2hhciAgICAgc2VxX251bTsgICAgICAgICAgLy9zZXF1ZW5jZSBudW1iZXIKICAgIHVuc2lnbmVkIGNoYXIgICAgIHJzdmQyOyAgICAgICAgICAgIC8vcmVzZXJ2ZWQKICAgIHVuc2lnbmVkIHNob3J0ICAgIHFvc19jbGFzczsgICAgICAgIC8vUXVhbGl0eSBvZiBTZXJ2aWNlIGNsYXNzIChOb3QgYXBwbGljYWJsZSBvbiBNb2JpbGUpCi0gICB1bnNpZ25lZCBzaG9ydCAgICBjaGVja3N1bTsgICAgICAgICAvL1BzdWVkbyBoZWFkZXIgY2hlY2tzdW0KKyAgIHVuc2lnbmVkIHNob3J0ICAgIGNoZWNrc3VtOyAgICAgICAgIC8vUHNldWRvIGhlYWRlciBjaGVja3N1bQogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHR5cGVkZWYgc3RydWN0IF9JT0NUTF9HRVRfVkVSCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC11c2IvZnQxMDAwX3VzYi5oIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtdXNiL2Z0MTAwMF91c2IuaAppbmRleCBlMDQ3YzAzLi5mMmVjYjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC11c2IvZnQxMDAwX3VzYi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXVzYi9mdDEwMDBfdXNiLmgKQEAgLTM2NCw3ICszNjQsNyBAQAogCiAjZGVmaW5lIElTUl9FTVBUWQkJCSh1OCkweDAwIAkgLy8gbm8gYml0cyBzZXQgaW4gSVNSCiAKLSNkZWZpbmUgSVNSX0RPT1JCRUxMX0FDSwkodTgpMHgwMQkJIC8vICB0aGUgZG9vcmJlbGwgaSBzZW50IGhhcyBiZWVuIHJlY2lldmVkLgorI2RlZmluZSBJU1JfRE9PUkJFTExfQUNLCSh1OCkweDAxCQkgLy8gIHRoZSBkb29yYmVsbCBpIHNlbnQgaGFzIGJlZW4gcmVjZWl2ZWQuCiAKICNkZWZpbmUgSVNSX0RPT1JCRUxMX1BFTkQJKHU4KTB4MDIgCSAvLyAgZG9vcmJlbGwgZm9yIG1lCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nZW5lcmljX3NlcmlhbC9nZW5lcmljX3NlcmlhbC5jIGIvZHJpdmVycy9zdGFnaW5nL2dlbmVyaWNfc2VyaWFsL2dlbmVyaWNfc2VyaWFsLmMKaW5kZXggNDY2OTg4ZC4uZjI5ZGRhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dlbmVyaWNfc2VyaWFsL2dlbmVyaWNfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dlbmVyaWNfc2VyaWFsL2dlbmVyaWNfc2VyaWFsLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCiAJCWMgPSBjb3VudDsKICAKLQkJLyogVGhpcyBpcyBzYWZlIGJlY2F1c2Ugd2UgIk9XTiIgdGhlICJoZWFkIi4gTm9vbmUgZWxzZSBjYW4gCisJCS8qIFRoaXMgaXMgc2FmZSBiZWNhdXNlIHdlICJPV04iIHRoZSAiaGVhZCIuIE5vIG9uZSBlbHNlIGNhbiAKIAkJICAgY2hhbmdlIHRoZSAiaGVhZCI6IHdlIG93biB0aGUgcG9ydF93cml0ZV9tdXRleC4gKi8KIAkJLyogRG9uJ3Qgb3ZlcnJ1biB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKi8KIAkJdCA9IFNFUklBTF9YTUlUX1NJWkUgLSBwb3J0LT54bWl0X2hlYWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ2VuZXJpY19zZXJpYWwvcmlvL21hcC5oIGIvZHJpdmVycy9zdGFnaW5nL2dlbmVyaWNfc2VyaWFsL3Jpby9tYXAuaAppbmRleCA4MzY2OTc4Li4yOGE2NjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ2VuZXJpY19zZXJpYWwvcmlvL21hcC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nZW5lcmljX3NlcmlhbC9yaW8vbWFwLmgKQEAgLTg3LDcgKzg3LDcgQEAKICoqIFRoZSBUb3BvbG9neSBhcnJheSBjb250YWlucyB0aGUgSUQgb2YgdGhlIHVuaXQgY29ubmVjdGVkIHRvIGVhY2ggb2YgdGhlCiAqKiBmb3VyIGxpbmtzIG9uIHRoaXMgdW5pdC4gVGhlIGVudHJ5IHdpbGwgYmUgMHhGRkZGIGlmIE5PVEhJTkcgaXMgY29ubmVjdGVkCiAqKiB0byB0aGUgbGluaywgb3Igd2lsbCBiZSAweEZGMDAgaWYgYW4gVU5LTk9XTiB1bml0IGlzIGNvbm5lY3RlZCB0byB0aGUgbGluay4KLSoqIFRoZSBOYW1lIGZpZWxkIGlzIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZywgdXB0byAzMSBjaGFyYWN0ZXJzLCBjb250YWluaW5nCisqKiBUaGUgTmFtZSBmaWVsZCBpcyBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcsIHVwIHRvIDMxIGNoYXJhY3RlcnMsIGNvbnRhaW5pbmcKICoqIHRoZSAnY3V0ZScgbmFtZSB0aGF0IHRoZSBzeXNhZG1pbi91c2VycyBrbm93IHRoZSBSVEEgYnkuIEl0IGlzIHBlcm1pc3NpYmxlCiAqKiBmb3IgdGhpcyBzdHJpbmcgdG8gY29udGFpbiBhbnkgY2hhcmFjdGVyIGluIHRoZSByYW5nZSBcMDQwIHRvIFwxNzYgaW5jbHVzaXZlLgogKiogSW4gcGFydGljdWxhciwgY3RybCBzZXF1ZW5jZXMgYW5kIERFTCAoMHg3RiwgXDE3NykgYXJlIG5vdCBhbGxvd2VkLiBUaGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nZW5lcmljX3NlcmlhbC9yaW8vcmlvYm9vdC5jIGIvZHJpdmVycy9zdGFnaW5nL2dlbmVyaWNfc2VyaWFsL3Jpby9yaW9ib290LmMKaW5kZXggZDk1NmRkMy4uZmZhMDFjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dlbmVyaWNfc2VyaWFsL3Jpby9yaW9ib290LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dlbmVyaWNfc2VyaWFsL3Jpby9yaW9ib290LmMKQEAgLTEwOSw3ICsxMDksNyBAQAogCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiRGF0YSBhdCB1c2VyIGFkZHJlc3MgJXBcbiIsIHJicC0+RGF0YVApOwogCiAJLyoKLQkgKiogQ2hlY2sgdGhhdCB3ZSBoYXZlIHNldCBhc3NpZGUgZW5vdWdoIG1lbW9yeSBmb3IgdGhpcworCSAqKiBDaGVjayB0aGF0IHdlIGhhdmUgc2V0IGFzaWRlIGVub3VnaCBtZW1vcnkgZm9yIHRoaXMKIAkgKi8KIAlpZiAocmJwLT5Db3VudCA+IFNJWFRZX0ZPVVJfSykgewogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIlJUQSBCb290IENvZGUgVG9vIExhcmdlIVxuIik7CkBAIC0yOTMsNyArMjkzLDcgQEAKIAkJLyoKIAkJICoqICAgICAgICAgICAgICAgICAgICAgUyBUIE8gUCAhCiAJCSAqKgotCQkgKiogVXB0byB0aGlzIHBvaW50IHRoZSBjb2RlIGhhcyBiZWVuIGZhaXJseSByYXRpb25hbCwgYW5kIHBvc3NpYmx5CisJCSAqKiBVcCB0byB0aGlzIHBvaW50IHRoZSBjb2RlIGhhcyBiZWVuIGZhaXJseSByYXRpb25hbCwgYW5kIHBvc3NpYmx5CiAJCSAqKiBldmVuIHN0cmFpZ2h0IGZvcndhcmQuIFdoYXQgZm9sbG93cyBpcyBhIHBpbGUgb2YgY3J1ZCB0aGF0IHdpbGwKIAkJICoqIG1hZ2ljYWxseSB0dXJuIGludG8gc2l4IGJ5dGVzIG9mIHRyYW5zcHV0ZXIgYXNzZW1ibGVyLiBOb3JtYWxseQogCQkgKiogeW91IHdvdWxkIGV4cGVjdCBhbiBhcnJheSBvciBzb21ldGhpbmcsIGJ1dCwgYmVpbmcgbWUsIEkgaGF2ZQpAQCAtNDE5LDcgKzQxOSw3IEBACiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiU2V0IGNvbnRyb2wgcG9ydFxuIik7CiAKIAkJLyoKLQkJICoqIE5vdywgd2FpdCBmb3IgdXB0byBmaXZlIHNlY29uZHMgZm9yIHRoZSBUcCB0byBzZXR1cCB0aGUgcGFybW1hcAorCQkgKiogTm93LCB3YWl0IGZvciB1cCB0byBmaXZlIHNlY29uZHMgZm9yIHRoZSBUcCB0byBzZXR1cCB0aGUgcGFybW1hcAogCQkgKiogcG9pbnRlcjoKIAkJICovCiAJCWZvciAod2FpdF9jb3VudCA9IDA7ICh3YWl0X2NvdW50IDwgcC0+UklPQ29uZi5TdGFydHVwVGltZSkgJiYgKHJlYWR3KCZIb3N0UC0+X19QYXJtTWFwUikgPT0gT2xkUGFybU1hcCk7IHdhaXRfY291bnQrKykgewpAQCAtNDc1LDcgKzQ3NSw3IEBACiAKIAkJLyoKIAkJICoqIG5vdyB3YWl0IGZvciB0aGUgY2FyZCB0byBzZXQgYWxsIHRoZSBwYXJtbWFwLT5YWFggc3R1ZmYKLQkJICoqIHRoaXMgaXMgYSB3YWl0IG9mIHVwdG8gdHdvIHNlY29uZHMuLi4uCisJCSAqKiB0aGlzIGlzIGEgd2FpdCBvZiB1cCB0byB0d28gc2Vjb25kcy4uLi4KIAkJICovCiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiTG9va2luZyBmb3IgaW5pdF9kb25lIC0gJWQgdGlja3NcbiIsIHAtPlJJT0NvbmYuU3RhcnR1cFRpbWUpOwogCQlIb3N0UC0+dGltZW91dF9pZCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ2VuZXJpY19zZXJpYWwvcmlvL3Jpb2NtZC5jIGIvZHJpdmVycy9zdGFnaW5nL2dlbmVyaWNfc2VyaWFsL3Jpby9yaW9jbWQuYwppbmRleCBmMTIxMzU3Li42MWVmZDUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ2VuZXJpY19zZXJpYWwvcmlvL3Jpb2NtZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nZW5lcmljX3NlcmlhbC9yaW8vcmlvY21kLmMKQEAgLTg2Myw3ICs4NjMsNyBAQAogCSAqKiBiZWluZyB0cmFuc2ZlcnJlZCBmcm9tIHRoZSB3cml0ZSBxdWV1ZSBpbnRvIHRoZSB0cmFuc21pdCBwYWNrZXRzCiAJICoqIChhZGRfdHJhbnNtaXQpIGFuZCBubyBmdXJ0aHVyIHRyYW5zbWl0IGludGVycnVwdCB3aWxsIGJlIHNlbnQgZm9yIHRoYXQKIAkgKiogZGF0YS4gVGhlIG5leHQgaW50ZXJydXB0IHdpbGwgb2NjdXIgdXAgdG8gNTAwbXMgbGF0ZXIgKFJJT0ludHIgaXMgY2FsbGVkCi0JICoqIHR3aWNlIGEgc2Vjb25kIGFzIGEgc2FmdGV5IG1lYXN1cmUpLiBUaGlzIHdhcyB0aGUgY2FzZSB3aGVuIGtlcm1pdCB3YXMKKwkgKiogdHdpY2UgYSBzZWNvbmQgYXMgYSBzYWZldHkgbWVhc3VyZSkuIFRoaXMgd2FzIHRoZSBjYXNlIHdoZW4ga2VybWl0IHdhcwogCSAqKiB1c2VkIHRvIHNlbmQgZGF0YSBpbnRvIGEgUklPIHBvcnQuIEFmdGVyIGVhY2ggcGFja2V0IHdhcyBzZW50LCBUQ0ZMU0gKIAkgKiogd2FzIGNhbGxlZCB0byBmbHVzaCB0aGUgcmVhZCBxdWV1ZSBwcmVlbXB0aXZlbHkuIFBvcnRQLT5JblVzZSB3YXMKIAkgKiogaW5jcmVtZW50ZWQsIHRoZXJlYnkgYmxvY2tpbmcgdGhlIDYgYnl0ZSBhY2tub3dsZWRnZW1lbnQgcGFja2V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ2VuZXJpY19zZXJpYWwvcmlvL3Jpb3JvdXRlLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ2VuZXJpY19zZXJpYWwvcmlvL3Jpb3JvdXRlLmMKaW5kZXggZjliOTM2YS4uODc1NzM3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dlbmVyaWNfc2VyaWFsL3Jpby9yaW9yb3V0ZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nZW5lcmljX3NlcmlhbC9yaW8vcmlvcm91dGUuYwpAQCAtNDUwLDcgKzQ1MCw3IEBACiAJCSAqKiB3ZSByZXNldCB0aGUgdW5pdCwgYmVjYXVzZSB3ZSBkaWRuJ3QgYm9vdCBpdC4KIAkJICoqIEhvd2V2ZXIsIGlmIHRoZSB0YWJsZSBpcyBmdWxsLCBpdCBjb3VsZCBiZSB0aGF0IHdlIGRpZCBib290CiAJCSAqKiB0aGlzIHVuaXQsIGFuZCBzbyB3ZSB3b24ndCByZWJvb3QgaXQsIGJlY2F1c2UgaXQgaXNuJ3QgcmVhbGx5Ci0JCSAqKiBhbGwgdGhhdCBkaXNhc3Rlcm91cyB0byBrZWVwIHRoZSBvbGQgYmlucyBpbiBtb3N0IGNhc2VzLiBUaGlzCisJCSAqKiBhbGwgdGhhdCBkaXNhc3Ryb3VzIHRvIGtlZXAgdGhlIG9sZCBiaW5zIGluIG1vc3QgY2FzZXMuIFRoaXMKIAkJICoqIGlzIGEgcmF0aGVyIHRhY2t5IGZlYXR1cmUsIGJ1dCB3ZSBhcmUgb24gdGhlIGVkZ2Ugb2YgcmVhbGxpdHkKIAkJICoqIGhlcmUsIGJlY2F1c2UgdGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgc29tZW9uZSBoYXMgY29ubmVjdGVkCiAJCSAqKiAxNitNQVhfRVhUUkFfVU5JVFMgb250byBvbmUgaG9zdC4KQEAgLTY3OCw3ICs2NzgsNyBAQAogCiAJSG9zdFAtPk1hcHBpbmdbVW5pdElkXS5GbGFncyAmPSB+QkVFTl9IRVJFOwogCi0JLyogcmlvX2RwcmludChSSU9fREVCVUdfUk9VVEUsICgiVW5pdCAlZCBET0VTTlQgS05PVyBUSEUgSE9TVCFcbiIsIFVuaXRJZCkpOyAqLworCS8qIHJpb19kcHJpbnQoUklPX0RFQlVHX1JPVVRFLCAoIlVuaXQgJWQgRE9FU04nVCBLTk9XIFRIRSBIT1NUIVxuIiwgVW5pdElkKSk7ICovCiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nZW5lcmljX3NlcmlhbC9yaW8vcmlvdHR5LmMgYi9kcml2ZXJzL3N0YWdpbmcvZ2VuZXJpY19zZXJpYWwvcmlvL3Jpb3R0eS5jCmluZGV4IDhhOTAzOTMuLmU3ZTk5MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nZW5lcmljX3NlcmlhbC9yaW8vcmlvdHR5LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dlbmVyaWNfc2VyaWFsL3Jpby9yaW90dHkuYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAJfQogCiAJLyoKLQkgKiogR3JhYiBwb2ludGVyIHRvIHRoZSBwb3J0IHN0dWN0dXJlCisJICoqIEdyYWIgcG9pbnRlciB0byB0aGUgcG9ydCBzdHJ1Y3R1cmUKIAkgKi8KIAlQb3J0UCA9IHAtPlJJT1BvcnRwW1N5c1BvcnRdOwkvKiBHZXQgY29udHJvbCBzdHJ1YyAqLwogCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJQb3J0UDogJXBcbiIsIFBvcnRQKTsKQEAgLTE2MSw3ICsxNjEsNyBAQAogCX0KIAogCS8qCi0JICoqIElmIHRoZSBSVEEgaGFzIG5vdCBib290ZWQgeWV0IGFuZCB0aGUgdXNlciBoYXMgY2hvb3NlbiB0byBibG9jaworCSAqKiBJZiB0aGUgUlRBIGhhcyBub3QgYm9vdGVkIHlldCBhbmQgdGhlIHVzZXIgaGFzIGNob3NlbiB0byBibG9jawogCSAqKiB1bnRpbCB0aGUgUlRBIGlzIHByZXNlbnQgdGhlbiB3ZSBtdXN0IHNwaW4gaGVyZSB3YWl0aW5nIGZvcgogCSAqKiB0aGUgUlRBIHRvIGJvb3QuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ2VuZXJpY19zZXJpYWwvc3guYyBiL2RyaXZlcnMvc3RhZ2luZy9nZW5lcmljX3NlcmlhbC9zeC5jCmluZGV4IDEyOTE0NjIuLjRmOTRhYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nZW5lcmljX3NlcmlhbC9zeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nZW5lcmljX3NlcmlhbC9zeC5jCkBAIC0xNTgsMTMgKzE1OCwxMyBAQAogICogUmVhZHlpbmcgZm9yIHJlbGVhc2Ugb24gMi4wLnggKHNvcnJ5IERhdmlkLCAxLjAxIGJlY29tZXMgMS4xIGZvciBSQ1MpLiAKICAqCiAgKiBSZXZpc2lvbiAwLjEyICAxOTk5LzAzLzI4IDA5OjIwOjEwICB3b2xmZgotICogRml4ZWQgcHJvYmxlbSBpbiAwLjExLCBjb250aW51ZWluZyBjbGVhbnVwLgorICogRml4ZWQgcHJvYmxlbSBpbiAwLjExLCBjb250aW51aW5nIGNsZWFudXAuCiAgKgogICogUmV2aXNpb24gMC4xMSAgMTk5OS8wMy8yOCAwODo0Njo0NCAgd29sZmYKICAqIGNsZWFudXAuIE5vdCBnb29kLgogICoKICAqIFJldmlzaW9uIDAuMTAgIDE5OTkvMDMvMjggMDg6MDk6NDMgIHdvbGZmCi0gKiBGaXhlZCBsb29zaW5nIGNoYXJhY3RlcnMgb24gY2xvc2UuCisgKiBGaXhlZCBsb3NpbmcgY2hhcmFjdGVycyBvbiBjbG9zZS4KICAqCiAgKiBSZXZpc2lvbiAwLjkgIDE5OTkvMDMvMjEgMjI6NTI6MDEgIHdvbGZmCiAgKiBQb3J0ZWQgYmFjayB0byAyLjIuLi4uIChtaW5vciB0aGluZ3MpCkBAIC0xNTg4LDcgKzE1ODgsNyBAQAogI2RlZmluZSBSMAkJaWYgKHJlYWRfc3hfYnl0ZShib2FyZCwgaSkgIT0gMHg1NSkgcmV0dXJuIDEKICNkZWZpbmUgUjEJCWlmIChyZWFkX3N4X2J5dGUoYm9hcmQsIGkpICE9IDB4YWEpIHJldHVybiAxCiAKLS8qIFRoaXMgbWVtdGVzdCB0YWtlcyBhIGh1bWFuLW5vdGljYWJsZSB0aW1lLiBZb3Ugbm9ybWFsbHkgb25seSBkbyBpdAorLyogVGhpcyBtZW10ZXN0IHRha2VzIGEgaHVtYW4tbm90aWNlYWJsZSB0aW1lLiBZb3Ugbm9ybWFsbHkgb25seSBkbyBpdAogICAgb25jZSBhIGJvb3QsIHNvIEkgZ3Vlc3MgdGhhdCBpdCBpcyB3b3J0aCBpdC4gKi8KIHN0YXRpYyBpbnQgZG9fbWVtdGVzdChzdHJ1Y3Qgc3hfYm9hcmQgKmJvYXJkLCBpbnQgbWluLCBpbnQgbWF4KQogewpAQCAtMTY0NSw3ICsxNjQ1LDcgQEAKICNkZWZpbmUgUjEJCWlmIChyZWFkX3N4X3dvcmQoYm9hcmQsIGkpICE9IDB4YWE1NSkgcmV0dXJuIDEKIAogI2lmIDAKLS8qIFRoaXMgbWVtdGVzdCB0YWtlcyBhIGh1bWFuLW5vdGljYWJsZSB0aW1lLiBZb3Ugbm9ybWFsbHkgb25seSBkbyBpdAorLyogVGhpcyBtZW10ZXN0IHRha2VzIGEgaHVtYW4tbm90aWNlYWJsZSB0aW1lLiBZb3Ugbm9ybWFsbHkgb25seSBkbyBpdAogICAgb25jZSBhIGJvb3QsIHNvIEkgZ3Vlc3MgdGhhdCBpdCBpcyB3b3J0aCBpdC4gKi8KIHN0YXRpYyBpbnQgZG9fbWVtdGVzdF93KHN0cnVjdCBzeF9ib2FyZCAqYm9hcmQsIGludCBtaW4sIGludCBtYXgpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL0tjb25maWcKaW5kZXggNTUwMWViOS4uY2U4YmVkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBEUk1fUFNCCiAJdHJpc3RhdGUgIkludGVsIEdNQTUwMCBLTVMgRnJhbWVidWZmZXIiCi0JZGVwZW5kcyBvbiBEUk0gJiYgUENJCisJZGVwZW5kcyBvbiBEUk0gJiYgUENJICYmIFg4NgogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKICAgICAgICAgc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogICAgICAgICBzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZHJtLmggYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9kcm0uaAppbmRleCBmYjliNDI0Li5hMzM5NDA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9kcm0uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9kcm0uaApAQCAtMTMxLDcgKzEzMSw3IEBACiAJdTMyIHByZV9hZGQ7CS8qIERlc3RpbmF0aW9uIGZvcm1hdDogKi8KIAl1MzIgYmFja2dyb3VuZDsJLyogRGVzdGluYXRpb24gYWRkICovCiAJdTMyIGRzdF9idWZmZXI7CS8qIERlc3RpbmF0aW9uIGJ1ZmZlci4gSW5kZXggaW50byBidWZmZXJfbGlzdCAqLwotCXUzMiBhcmcwOwkJLyogUmVsb2Mtb3AgZGVwZW5kYW50ICovCisJdTMyIGFyZzA7CQkvKiBSZWxvYy1vcCBkZXBlbmRlbnQgKi8KIAl1MzIgYXJnMTsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZHJ2LmMKaW5kZXggNDRjZDA5NS4uZDAxZDQ1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZHJ2LmMKQEAgLTU2MSw3ICs1NjEsNyBAQAogCQlrZnJlZShkZXZfcHJpdik7CiAJCWRldi0+ZGV2X3ByaXZhdGUgPSBOVUxMOwogCi0JCS8qZGVzdG9yeSBWQlQgZGF0YSovCisJCS8qZGVzdHJveSBWQlQgZGF0YSovCiAJCXBzYl9pbnRlbF9kZXN0cm95X2Jpb3MoZGV2KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ludGVsX2Jpb3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ludGVsX2Jpb3MuYwppbmRleCBmNWJjZDExLi40OGFjOGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9pbnRlbF9iaW9zLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfaW50ZWxfYmlvcy5jCkBAIC0yNzEsNyArMjcxLDcgQEAKIH0KIAogLyoqCi0gKiBEZXN0b3J5IGFuZCBmcmVlIFZCVCBkYXRhCisgKiBEZXN0cm95IGFuZCBmcmVlIFZCVCBkYXRhCiAgKi8KIHZvaWQgcHNiX2ludGVsX2Rlc3Ryb3lfYmlvcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfaW50ZWxfc2R2by5jIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfaW50ZWxfc2R2by5jCmluZGV4IDczMWE1YTIuLjFkMmJiMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ludGVsX3Nkdm8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9pbnRlbF9zZHZvLmMKQEAgLTU3Myw3ICs1NzMsNyBAQAogCS8qIE1ha2UgYWxsIGZpZWxkcyBvZiB0aGUgIGFyZ3MvcmV0IHRvIHplcm8gKi8KIAltZW1zZXQoYnlBcmdzLCAwLCBzaXplb2YoYnlBcmdzKSk7CiAKLQkvKiBGaWxsIHVwIHRoZSBhcmd1ZW1lbnQgdmFsdWVzOyAqLworCS8qIEZpbGwgdXAgdGhlIGFyZ3VtZW50IHZhbHVlczsgKi8KIAlieUFyZ3NbMF0gPSAodTgpIChpbjBvdXRwdXRtYXNrICYgMHhGRik7CiAJYnlBcmdzWzFdID0gKHU4KSAoKGluMG91dHB1dG1hc2sgPj4gOCkgJiAweEZGKTsKIAlieUFyZ3NbMl0gPSAodTgpIChpbjFvdXRwdXRtYXNrICYgMHhGRik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9pbnRlbF9zZHZvX3JlZ3MuaCBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ludGVsX3Nkdm9fcmVncy5oCmluZGV4IGExZDE0NzUuLmM3MTA3YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ludGVsX3Nkdm9fcmVncy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ludGVsX3Nkdm9fcmVncy5oCkBAIC0yMTcsNyArMjE3LDcgQEAKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKioKLSAqIFRha2VzIGEgc3RydWN0IHBzYl9pbnRlbF9zZHZvX291dHB1dF9mbGFncyBvZiB3aGljaCBvdXRwdXRzIGFyZSB0YXJnZXR0ZWQgYnkKKyAqIFRha2VzIGEgc3RydWN0IHBzYl9pbnRlbF9zZHZvX291dHB1dF9mbGFncyBvZiB3aGljaCBvdXRwdXRzIGFyZSB0YXJnZXRlZCBieQogICogZnV0dXJlIG91dHB1dCBjb21tYW5kcy4KICAqCiAgKiBBZmZlY3RlZCBjb21tYW5kcyBpbmNsdWUgU0VUX09VVFBVVF9USU1JTkdTX1BBUlRbMTJdLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfdHRtX2ZlbmNlX3VzZXIuaCBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX3R0bV9mZW5jZV91c2VyLmgKaW5kZXggZmMxM2Y4OS4uNzYyYTA1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfdHRtX2ZlbmNlX3VzZXIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl90dG1fZmVuY2VfdXNlci5oCkBAIC0xMzAsNyArMTMwLDcgQEAKIH07CiAKIC8qCi0gKiBJb2N0bCBvZmZzZXRzIGZyb21lIGV4dGVuc3Rpb24gc3RhcnQuCisgKiBJb2N0bCBvZmZzZXRzIGZyb20gZXh0ZW5zdGlvbiBzdGFydC4KICAqLwogCiAjZGVmaW5lIFRUTV9GRU5DRV9TSUdOQUxFRCAweDAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy50eHQgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy50eHQKaW5kZXggMDZhNzZkYS4uOWRiMWYzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDcudHh0CisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LnR4dApAQCAtMiw3ICsyLDcgQEAKIAogUGV0ZSBFYmVybGVpbiA8cGV0ZUBzZW5zb3JheS5jb20+CiAKLVRoZSBkcml2ZXIgd2FzIG9yaWduYWxseSByZWxlYXNlZCB1bmRlciB0aGUgR1BMIGFuZCBpcyBjdXJyZW50bHkgaG9zdGVkIGF0OgorVGhlIGRyaXZlciB3YXMgb3JpZ2luYWxseSByZWxlYXNlZCB1bmRlciB0aGUgR1BMIGFuZCBpcyBjdXJyZW50bHkgaG9zdGVkIGF0OgogaHR0cDovL25pa29zYXBpLm9yZy93aWtpL2luZGV4LnBocC9XSVNfR283MDA3X0xpbnV4X2RyaXZlcgogVGhlIGdvNzAwNyBmaXJtd2FyZSBjYW4gYmUgYWNxdWlyZWQgZnJvbSB0aGUgcGFja2FnZSBvbiB0aGUgc2l0ZSBhYm92ZS4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMKaW5kZXggYWY3ODk5My4uNjhhZDE3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjX2Rydi5jCkBAIC04OTQsNyArODk0LDcgQEAKIAogLyoKICAqIFdlIGJyZWFrIHRoZSByZXF1ZXN0IGludG8gMSBvciBtb3JlIGJsa3ZzY19yZXF1ZXN0cyBhbmQgc3VibWl0Ci0gKiB0aGVtLiAgSWYgd2UgY2FudCBzdWJtaXQgdGhlbSBhbGwsIHdlIHB1dCB0aGVtIG9uIHRoZQorICogdGhlbS4gIElmIHdlIGNhbid0IHN1Ym1pdCB0aGVtIGFsbCwgd2UgcHV0IHRoZW0gb24gdGhlCiAgKiBwZW5kaW5nX2xpc3QuIFRoZSBibGt2c2NfcmVxdWVzdCgpIHdpbGwgd29yayBvbiB0aGUgcGVuZGluZ19saXN0LgogICovCiBzdGF0aWMgaW50IGJsa3ZzY19kb19yZXF1ZXN0KHN0cnVjdCBibG9ja19kZXZpY2VfY29udGV4dCAqYmxrZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L2NoYW5uZWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9jaGFubmVsLmMKaW5kZXggNzc1YTUyYS4uZjdjZTdkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L2NoYW5uZWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvY2hhbm5lbC5jCkBAIC04MSwxNCArODEsMTQgQEAKIAogCWlmIChjaGFubmVsLT5vZmZlcm1zZy5tb25pdG9yX2FsbG9jYXRlZCkgewogCQkvKiBFYWNoIHUzMiByZXByZXNlbnRzIDMyIGNoYW5uZWxzICovCi0JCXNldF9iaXQoY2hhbm5lbC0+b2ZmZXJtc2cuY2hpbGRfcmVsaWQgJiAzMSwKKwkJc3luY19zZXRfYml0KGNoYW5uZWwtPm9mZmVybXNnLmNoaWxkX3JlbGlkICYgMzEsCiAJCQkodW5zaWduZWQgbG9uZyAqKSB2bWJ1c19jb25uZWN0aW9uLnNlbmRfaW50X3BhZ2UgKwogCQkJKGNoYW5uZWwtPm9mZmVybXNnLmNoaWxkX3JlbGlkID4+IDUpKTsKIAogCQltb25pdG9ycGFnZSA9IHZtYnVzX2Nvbm5lY3Rpb24ubW9uaXRvcl9wYWdlczsKIAkJbW9uaXRvcnBhZ2UrKzsgLyogR2V0IHRoZSBjaGlsZCB0byBwYXJlbnQgbW9uaXRvciBwYWdlICovCiAKLQkJc2V0X2JpdChjaGFubmVsLT5tb25pdG9yX2JpdCwKKwkJc3luY19zZXRfYml0KGNoYW5uZWwtPm1vbml0b3JfYml0LAogCQkJKHVuc2lnbmVkIGxvbmcgKikmbW9uaXRvcnBhZ2UtPnRyaWdnZXJfZ3JvdXAKIAkJCQkJW2NoYW5uZWwtPm1vbml0b3JfZ3JwXS5wZW5kaW5nKTsKIApAQCAtMTA0LDcgKzEwNCw3IEBACiAKIAlpZiAoQ2hhbm5lbC0+b2ZmZXJtc2cubW9uaXRvcl9hbGxvY2F0ZWQpIHsKIAkJLyogRWFjaCB1MzIgcmVwcmVzZW50cyAzMiBjaGFubmVscyAqLwotCQljbGVhcl9iaXQoQ2hhbm5lbC0+b2ZmZXJtc2cuY2hpbGRfcmVsaWQgJiAzMSwKKwkJc3luY19jbGVhcl9iaXQoQ2hhbm5lbC0+b2ZmZXJtc2cuY2hpbGRfcmVsaWQgJiAzMSwKIAkJCSAgKHVuc2lnbmVkIGxvbmcgKil2bWJ1c19jb25uZWN0aW9uLnNlbmRfaW50X3BhZ2UgKwogCQkJICAoQ2hhbm5lbC0+b2ZmZXJtc2cuY2hpbGRfcmVsaWQgPj4gNSkpOwogCkBAIC0xMTIsNyArMTEyLDcgQEAKIAkJCXZtYnVzX2Nvbm5lY3Rpb24ubW9uaXRvcl9wYWdlczsKIAkJbW9uaXRvclBhZ2UrKzsgLyogR2V0IHRoZSBjaGlsZCB0byBwYXJlbnQgbW9uaXRvciBwYWdlICovCiAKLQkJY2xlYXJfYml0KENoYW5uZWwtPm1vbml0b3JfYml0LAorCQlzeW5jX2NsZWFyX2JpdChDaGFubmVsLT5tb25pdG9yX2JpdCwKIAkJCSAgKHVuc2lnbmVkIGxvbmcgKikmbW9uaXRvclBhZ2UtPnRyaWdnZXJfZ3JvdXAKIAkJCQkJW0NoYW5uZWwtPm1vbml0b3JfZ3JwXS5QZW5kaW5nKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvY2hhbm5lbF9tZ210LmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvY2hhbm5lbF9tZ210LmMKaW5kZXggYmMwMzkzYS4uMDZiNTczMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L2NoYW5uZWxfbWdtdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9jaGFubmVsX21nbXQuYwpAQCAtMTY2LDcgKzE2Niw3IEBACiAgKiBmcm9tIEh5cGVyLVYuIFRoaXMgc3R1YiByZXNwb25kcyB0byB0aGUgZGVmYXVsdCBuZWdvdGlhdGUgbWVzc2FnZXMKICAqIHRoYXQgY29tZSBpbiBmb3IgZXZlcnkgbm9uIElERS9TQ1NJL05ldHdvcmsgcmVxdWVzdC4KICAqIFRoaXMgYmVoYXZpb3IgaXMgbm9ybWFsbHkgb3ZlcndyaXR0ZW4gaW4gdGhlIGh2X3V0aWxzIGRyaXZlci4gVGhhdAotICogZHJpdmVyIGhhbmRsZXMgcmVxdWVzdHMgbGlrZSBncmFjZWZ1bGwgc2h1dGRvd24sIGhlYXJ0YmVhdHMgZXRjLgorICogZHJpdmVyIGhhbmRsZXMgcmVxdWVzdHMgbGlrZSBncmFjZWZ1bCBzaHV0ZG93biwgaGVhcnRiZWF0cyBldGMuCiAgKgogICogTWFpbmx5IHVzZWQgYnkgSHlwZXItViBkcml2ZXJzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvY29ubmVjdGlvbi5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L2Nvbm5lY3Rpb24uYwppbmRleCA0NGIyMDNiLi5hZmM4MTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvY29ubmVjdGlvbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9jb25uZWN0aW9uLmMKQEAgLTI5Niw3ICsyOTYsNyBAQAogCQlmb3IgKGR3b3JkID0gMDsgZHdvcmQgPCBtYXhkd29yZDsgZHdvcmQrKykgewogCQkJaWYgKHJlY3ZfaW50X3BhZ2VbZHdvcmRdKSB7CiAJCQkJZm9yIChiaXQgPSAwOyBiaXQgPCAzMjsgYml0KyspIHsKLQkJCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChiaXQsCisJCQkJCWlmIChzeW5jX3Rlc3RfYW5kX2NsZWFyX2JpdChiaXQsCiAJCQkJCQkodW5zaWduZWQgbG9uZyAqKQogCQkJCQkJJnJlY3ZfaW50X3BhZ2VbZHdvcmRdKSkgewogCQkJCQkJcmVsaWQgPSAoZHdvcmQgPDwgNSkgKyBiaXQ7CkBAIC0zMzgsNyArMzM4LDcgQEAKIGludCB2bWJ1c19zZXRfZXZlbnQodTMyIGNoaWxkX3JlbGlkKQogewogCS8qIEVhY2ggdTMyIHJlcHJlc2VudHMgMzIgY2hhbm5lbHMgKi8KLQlzZXRfYml0KGNoaWxkX3JlbGlkICYgMzEsCisJc3luY19zZXRfYml0KGNoaWxkX3JlbGlkICYgMzEsCiAJCSh1bnNpZ25lZCBsb25nICopdm1idXNfY29ubmVjdGlvbi5zZW5kX2ludF9wYWdlICsKIAkJKGNoaWxkX3JlbGlkID4+IDUpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L2h2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvaHYuYwppbmRleCAyZDQ5MmFkLi4wYjA2ZjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvaHYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvaHYuYwpAQCAtMzcsNyArMzcsNyBAQAogCiAvKgogICogcXVlcnlfaHlwZXJ2aXNvcl9wcmVzZW5jZQotICogLSBRdWVyeSB0aGUgY3B1aWQgZm9yIHByZXNlbnNlIG9mIHdpbmRvd3MgaHlwZXJ2aXNvcgorICogLSBRdWVyeSB0aGUgY3B1aWQgZm9yIHByZXNlbmNlIG9mIHdpbmRvd3MgaHlwZXJ2aXNvcgogICovCiBzdGF0aWMgaW50IHF1ZXJ5X2h5cGVydmlzb3JfcHJlc2VuY2Uodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9odl9hcGkuaCBiL2RyaXZlcnMvc3RhZ2luZy9odi9odl9hcGkuaAppbmRleCA3MTE0ZmNlLi40M2E3MjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfYXBpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2h2X2FwaS5oCkBAIC01MywxNCArNTMsMTQgQEAKIAogLyoKICAqIEhWX1NUQVRVU19JTlZBTElEX0FMSUdOTUVOVAotICogVGhlIGh5cGVydmlzb3IgY291bGQgbm90IHBlcmZvcm0gdGhlIG9wZXJhdGlvbiBiZWFjdXNlIGEgcGFyYW1ldGVyIGhhcyBhbgorICogVGhlIGh5cGVydmlzb3IgY291bGQgbm90IHBlcmZvcm0gdGhlIG9wZXJhdGlvbiBiZWNhdXNlIGEgcGFyYW1ldGVyIGhhcyBhbgogICogaW52YWxpZCBhbGlnbm1lbnQuCiAgKi8KICNkZWZpbmUgSFZfU1RBVFVTX0lOVkFMSURfQUxJR05NRU5UCQkJKCh1MTYpMHgwMDA0KQogCiAvKgogICogSFZfU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSCi0gKiBUaGUgaHlwZXJ2aXNvciBjb3VsZCBub3QgcGVyZm9ybSB0aGUgb3BlcmF0aW9uIGJlYWN1c2UgYW4gaW52YWxpZCBwYXJhbWV0ZXIKKyAqIFRoZSBoeXBlcnZpc29yIGNvdWxkIG5vdCBwZXJmb3JtIHRoZSBvcGVyYXRpb24gYmVjYXVzZSBhbiBpbnZhbGlkIHBhcmFtZXRlcgogICogd2FzIHNwZWNpZmllZC4KICAqLwogI2RlZmluZSBIVl9TVEFUVVNfSU5WQUxJRF9QQVJBTUVURVIJCQkoKHUxNikweDAwMDUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfa3ZwLmggYi9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfa3ZwLmgKaW5kZXggZTA2OWY1OS4uOGM0MDJmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L2h2X2t2cC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9odl9rdnAuaApAQCAtMzYsNyArMzYsNyBAQAogICogcmVnaXN0cnkuCiAgKgogICogTm90ZTogIFRoaXMgdmFsdWUgaXMgdXNlZCBpbiBkZWZpbmluZyB0aGUgS1ZQIGV4Y2hhbmdlIG1lc3NhZ2UgLSB0aGlzIHZhbHVlCi0gKiBjYW5ub3QgYmUgbW9kaWZpZWQgd2l0aG91dCBhZmZlY3RpbmcgdGhlIG1lc3NhZ2Ugc2l6ZSBhbmQgY29tcGF0YWJpbGl0eS4KKyAqIGNhbm5vdCBiZSBtb2RpZmllZCB3aXRob3V0IGFmZmVjdGluZyB0aGUgbWVzc2FnZSBzaXplIGFuZCBjb21wYXRpYmlsaXR5LgogICovCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfbW91c2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9odl9tb3VzZS5jCmluZGV4IDUwMTQ3ZjguLjExOGM3YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9odl9tb3VzZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9odl9tb3VzZS5jCkBAIC0xNCw2ICsxNCw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMjMsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hpZGRldi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlICJodl9hcGkuaCIKICNpbmNsdWRlICJsb2dnaW5nLmgiCkBAIC0zNzQsNyArMzc2LDcgQEAKIAkgICAgICAgZGVzYy0+ZGVzY1swXS53RGVzY3JpcHRvckxlbmd0aCk7CiAKIAkvKiBTZW5kIHRoZSBhY2sgKi8KLQltZW1zZXQoJmFjaywgc2l6ZW9mKHN0cnVjdCBtb3VzZXZzY19wcnRfbXNnKSwgMCk7CisJbWVtc2V0KCZhY2ssIDAsIHNpemVvZihzdHJ1Y3QgbW91c2V2c2NfcHJ0X21zZykpOwogCiAJYWNrLnR5cGUgPSBQaXBlTWVzc2FnZURhdGE7CiAJYWNrLnNpemUgPSBzaXplb2Yoc3RydWN0IHN5bnRoaGlkX2RldmljZV9pbmZvX2Fjayk7CkBAIC01OTUsNyArNTk3LDcgQEAKIAkvKgogCSAqIE5vdywgaW5pdGlhdGUgdGhlIHZzYy92c3AgaW5pdGlhbGl6YXRpb24gcHJvdG9jb2wgb24gdGhlIG9wZW4gY2hhbm5lbAogCSAqLwotCW1lbXNldChyZXF1ZXN0LCBzaXplb2Yoc3RydWN0IG1vdXNldnNjX3BydF9tc2cpLCAwKTsKKwltZW1zZXQocmVxdWVzdCwgMCwgc2l6ZW9mKHN0cnVjdCBtb3VzZXZzY19wcnRfbXNnKSk7CiAKIAlyZXF1ZXN0LT50eXBlID0gUGlwZU1lc3NhZ2VEYXRhOwogCXJlcXVlc3QtPnNpemUgPSBzaXplb2Yoc3RydWN0IHN5bnRoaGlkX3Byb3RvY29sX3JlcXVlc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L2h2X3V0aWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9odl91dGlsLmMKaW5kZXggNDc5MmYyYy4uMmRmMTU2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L2h2X3V0aWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfdXRpbC5jCkBAIC04MCw3ICs4MCw3IEBACiAJCQkJZXhlY3V0ZV9zaHV0ZG93biA9IHRydWU7CiAKIAkJCQlEUFJJTlRfSU5GTyhWTUJVUywgIlNodXRkb3duIHJlcXVlc3QgcmVjZWl2ZWQgLSIKLQkJCQkJICAgICIgZ3JhY2VmdWxsIHNodXRkb3duIGluaXRpYXRlZCIpOworCQkJCQkgICAgIiBncmFjZWZ1bCBzaHV0ZG93biBpbml0aWF0ZWQiKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJaWNtc2doZHJwLT5zdGF0dXMgPSBIVl9FX0ZBSUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjX2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzY19kcnYuYwppbmRleCAyZDQwZjVmLi4zMzk3MzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjX2Rydi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2NfZHJ2LmMKQEAgLTQ2LDYgKzQ2LDcgQEAKIAkvKiBwb2ludCBiYWNrIHRvIG91ciBkZXZpY2UgY29udGV4dCAqLwogCXN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9jdHg7CiAJdW5zaWduZWQgbG9uZyBhdmFpbDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIH07CiAKIApAQCAtMjE5LDYgKzIyMCw3IEBACiAJCQkJICAgICAgIHVuc2lnbmVkIGludCBzdGF0dXMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldCA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2aWNlX29iai0+ZGV2aWNlKTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9jb250ZXh0ICpuZGV2X2N0eDsKIAogCWlmICghbmV0KSB7CiAJCURQUklOVF9FUlIoTkVUVlNDX0RSViwgImdvdCBsaW5rIHN0YXR1cyBidXQgbmV0IGRldmljZSAiCkBAIC0yMzAsNiArMjMyLDggQEAKIAkJbmV0aWZfY2Fycmllcl9vbihuZXQpOwogCQluZXRpZl93YWtlX3F1ZXVlKG5ldCk7CiAJCW5ldGlmX25vdGlmeV9wZWVycyhuZXQpOworCQluZGV2X2N0eCA9IG5ldGRldl9wcml2KG5ldCk7CisJCXNjaGVkdWxlX3dvcmsoJm5kZXZfY3R4LT53b3JrKTsKIAl9IGVsc2UgewogCQluZXRpZl9jYXJyaWVyX29mZihuZXQpOwogCQluZXRpZl9zdG9wX3F1ZXVlKG5ldCk7CkBAIC0zMjgsNiArMzMyLDI1IEBACiAJLm5kb19zZXRfbWFjX2FkZHJlc3MgPQkJZXRoX21hY19hZGRyLAogfTsKIAorLyoKKyAqIFNlbmQgR0FSUCBwYWNrZXQgdG8gbmV0d29yayBwZWVycyBhZnRlciBtaWdyYXRpb25zLgorICogQWZ0ZXIgUXVpY2sgTWlncmF0aW9uLCB0aGUgbmV0d29yayBpcyBub3QgaW1tZWRpYXRlbHkgb3BlcmF0aW9uYWwgaW4gdGhlCisgKiBjdXJyZW50IGNvbnRleHQgd2hlbiByZWNlaXZpbmcgUk5ESVNfU1RBVFVTX01FRElBX0NPTk5FQ1QgZXZlbnQuIFNvLCBhZGQKKyAqIGFub3RoZXIgbmV0aWZfbm90aWZ5X3BlZXJzKCkgaW50byBhIHNjaGVkdWxlZCB3b3JrLCBvdGhlcndpc2UgR0FSUCBwYWNrZXQKKyAqIHdpbGwgbm90IGJlIHNlbnQgYWZ0ZXIgcXVpY2sgbWlncmF0aW9uLCBhbmQgY2F1c2UgbmV0d29yayBkaXNjb25uZWN0aW9uLgorICovCitzdGF0aWMgdm9pZCBuZXR2c2Nfc2VuZF9nYXJwKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZV9jb250ZXh0ICpuZGV2X2N0eDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0OworCisJbXNsZWVwKDIwKTsKKwluZGV2X2N0eCA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgbmV0X2RldmljZV9jb250ZXh0LCB3b3JrKTsKKwluZXQgPSBkZXZfZ2V0X2RydmRhdGEoJm5kZXZfY3R4LT5kZXZpY2VfY3R4LT5kZXZpY2UpOworCW5ldGlmX25vdGlmeV9wZWVycyhuZXQpOworfQorCisKIHN0YXRpYyBpbnQgbmV0dnNjX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgaHZfZHJpdmVyICpkcnYgPQpAQCAtMzUzLDYgKzM3Niw3IEBACiAJbmV0X2RldmljZV9jdHgtPmRldmljZV9jdHggPSBkZXZpY2Vfb2JqOwogCW5ldF9kZXZpY2VfY3R4LT5hdmFpbCA9IHJpbmdfc2l6ZTsKIAlkZXZfc2V0X2RydmRhdGEoZGV2aWNlLCBuZXQpOworCUlOSVRfV09SSygmbmV0X2RldmljZV9jdHgtPndvcmssIG5ldHZzY19zZW5kX2dhcnApOwogCiAJLyogTm90aWZ5IHRoZSBuZXR2c2MgZHJpdmVyIG9mIHRoZSBuZXcgZGV2aWNlICovCiAJcmV0ID0gbmV0X2Rydl9vYmotPmJhc2UuZGV2X2FkZChkZXZpY2Vfb2JqLCAmZGV2aWNlX2luZm8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L3JuZGlzX2ZpbHRlci5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L3JuZGlzX2ZpbHRlci5jCmluZGV4IGU3MTg5Y2QuLjA0ODM3NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9ybmRpc19maWx0ZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvcm5kaXNfZmlsdGVyLmMKQEAgLTU4NSw3ICs1ODUsNyBAQAogCQlyZXQgPSAtMTsKIAkJRFBSSU5UX0VSUihORVRWU0MsICJ0aW1lb3V0IGJlZm9yZSB3ZSBnb3QgYSBzZXQgcmVzcG9uc2UuLi4iKTsKIAkJLyoKLQkJICogV2UgY2FudCBkZWFsbG9jYXRlIHRoZSByZXF1ZXN0IHNpbmNlIHdlIG1heSBzdGlsbCByZWNlaXZlIGEKKwkJICogV2UgY2FuJ3QgZGVhbGxvY2F0ZSB0aGUgcmVxdWVzdCBzaW5jZSB3ZSBtYXkgc3RpbGwgcmVjZWl2ZSBhCiAJCSAqIHNlbmQgY29tcGxldGlvbiBmb3IgaXQuCiAJCSAqLwogCQlnb3RvIEV4aXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvdG9vbHMvaHZfa3ZwX2RhZW1vbi5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L3Rvb2xzL2h2X2t2cF9kYWVtb24uYwppbmRleCBmNWEyZGQ2Li4zM2YwZjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvdG9vbHMvaHZfa3ZwX2RhZW1vbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi90b29scy9odl9rdnBfZGFlbW9uLmMKQEAgLTEwMiwyMiArMTAyLDIyIEBACiBzdGF0aWMgY2hhciBrdnBfcmVjdl9idWZmZXJbNDA5Nl07CiBzdGF0aWMgc3RydWN0IHNvY2thZGRyX25sIGFkZHI7CiAKLXN0YXRpYyBjaGFyIG9zX25hbWVbMTAwXTsKLXN0YXRpYyBjaGFyIG9zX21ham9yWzUwXTsKLXN0YXRpYyBjaGFyIG9zX21pbm9yWzUwXTsKLXN0YXRpYyBjaGFyIHByb2Nlc3Nvcl9hcmNoWzUwXTsKLXN0YXRpYyBjaGFyIG9zX2J1aWxkWzEwMF07CitzdGF0aWMgY2hhciAqb3NfbmFtZSA9ICIiOworc3RhdGljIGNoYXIgKm9zX21ham9yID0gIiI7CitzdGF0aWMgY2hhciAqb3NfbWlub3IgPSAiIjsKK3N0YXRpYyBjaGFyICpwcm9jZXNzb3JfYXJjaDsKK3N0YXRpYyBjaGFyICpvc19idWlsZDsKIHN0YXRpYyBjaGFyICpsaWNfdmVyc2lvbjsKK3N0YXRpYyBzdHJ1Y3QgdXRzbmFtZSB1dHNfYnVmOwogCiB2b2lkIGt2cF9nZXRfb3NfaW5mbyh2b2lkKQogewogCUZJTEUJKmZpbGU7Ci0JY2hhcgkqZW9sOwotCXN0cnVjdCB1dHNuYW1lIGJ1ZjsKKwljaGFyCSpwLCBidWZbNTEyXTsKIAotCXVuYW1lKCZidWYpOwotCXN0cmNweShvc19idWlsZCwgYnVmLnJlbGVhc2UpOwotCXN0cmNweShwcm9jZXNzb3JfYXJjaCwgYnVmLm1hY2hpbmUpOworCXVuYW1lKCZ1dHNfYnVmKTsKKwlvc19idWlsZCA9IHV0c19idWYucmVsZWFzZTsKKwlwcm9jZXNzb3JfYXJjaD0gdXRzX2J1Zi5tYWNoaW5lOwogCiAJZmlsZSA9IGZvcGVuKCIvZXRjL1N1U0UtcmVsZWFzZSIsICJyIik7CiAJaWYgKGZpbGUgIT0gTlVMTCkKQEAgLTEzMiwyMSArMTMyLDQ2IEBACiAJLyoKIAkgKiBXZSBkb24ndCBoYXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcy4KIAkgKi8KLQlzdHJjcHkob3NfbmFtZSwgIkxpbnV4Iik7Ci0Jc3RyY3B5KG9zX21ham9yLCAiMCIpOwotCXN0cmNweShvc19taW5vciwgIjAiKTsKKwlvc19uYW1lID0gdXRzX2J1Zi5zeXNuYW1lOwogCXJldHVybjsKIAoga3ZwX29zaW5mb19mb3VuZDoKLQlmZ2V0cyhvc19uYW1lLCA5OSwgZmlsZSk7Ci0JZW9sID0gaW5kZXgob3NfbmFtZSwgJ1xuJyk7Ci0JKmVvbCA9ICdcMCc7Ci0JZmdldHMob3NfbWFqb3IsIDQ5LCBmaWxlKTsKLQllb2wgPSBpbmRleChvc19tYWpvciwgJ1xuJyk7Ci0JKmVvbCA9ICdcMCc7Ci0JZmdldHMob3NfbWlub3IsIDQ5LCBmaWxlKTsKLQllb2wgPSBpbmRleChvc19taW5vciwgJ1xuJyk7Ci0JKmVvbCA9ICdcMCc7CisJLyogdXAgdG8gdGhyZWUgbGluZXMgKi8KKwlwID0gZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZmlsZSk7CisJaWYgKHApIHsKKwkJcCA9IHN0cmNocihidWYsICdcbicpOworCQlpZiAocCkKKwkJCSpwID0gJ1wwJzsKKwkJcCA9IHN0cmR1cChidWYpOworCQlpZiAoIXApCisJCQlnb3RvIGRvbmU7CisJCW9zX25hbWUgPSBwOworCisJCS8qIHNlY29uZCBsaW5lICovCisJCXAgPSBmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmaWxlKTsKKwkJaWYgKHApIHsKKwkJCXAgPSBzdHJjaHIoYnVmLCAnXG4nKTsKKwkJCWlmIChwKQorCQkJCSpwID0gJ1wwJzsKKwkJCXAgPSBzdHJkdXAoYnVmKTsKKwkJCWlmICghcCkKKwkJCQlnb3RvIGRvbmU7CisJCQlvc19tYWpvciA9IHA7CisKKwkJCS8qIHRoaXJkIGxpbmUgKi8KKwkJCXAgPSBmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmaWxlKTsKKwkJCWlmIChwKSAgeworCQkJCXAgPSBzdHJjaHIoYnVmLCAnXG4nKTsKKwkJCQlpZiAocCkKKwkJCQkJKnAgPSAnXDAnOworCQkJCXAgPSBzdHJkdXAoYnVmKTsKKwkJCQlpZiAocCkKKwkJCQkJb3NfbWlub3IgPSBwOworCQkJfQorCQl9CisJfQorCitkb25lOgogCWZjbG9zZShmaWxlKTsKIAlyZXR1cm47CiB9CkBAIC0yMDIsNyArMjI3LDcgQEAKIAogCQkJLyoKIAkJCSAqIFdlIG9ubHkgc3VwcG9ydCBBRl9JTkVUIGFuZCBBRl9JTkVUNgotCQkJICogYW5kIHRoZSBsaXN0IG9mIGFkZHJlc3NlcyBpcyBzZXBlcmF0ZWQgYnkgYSAiOyIuCisJCQkgKiBhbmQgdGhlIGxpc3Qgb2YgYWRkcmVzc2VzIGlzIHNlcGFyYXRlZCBieSBhICI7Ii4KIAkJCSAqLwogCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHIgPQogCQkJCShzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGN1cnAtPmlmYV9hZGRyOwpAQCAtMjkzLDcgKzMxOCw3IEBACiAJcmV0dXJuIHNlbmRtc2coZmQsICZtZXNzYWdlLCAwKTsKIH0KIAotbWFpbih2b2lkKQoraW50IG1haW4odm9pZCkKIHsKIAlpbnQgZmQsIGxlbiwgc29ja19vcHQ7CiAJaW50IGVycm9yOwpAQCAtMzAxLDkgKzMyNiwxMCBAQAogCXN0cnVjdCBwb2xsZmQgcGZkOwogCXN0cnVjdCBubG1zZ2hkciAqaW5jb21pbmdfbXNnOwogCXN0cnVjdCBjbl9tc2cJKmluY29taW5nX2NuX21zZzsKKwlzdHJ1Y3QgaHZfa3VfbXNnICpodl9tc2c7CisJY2hhcgkqcDsKIAljaGFyCSprZXlfdmFsdWU7CiAJY2hhcgkqa2V5X25hbWU7Ci0JaW50CSBrZXlfaW5kZXg7CiAKIAlkYWVtb24oMSwgMCk7CiAJb3BlbmxvZygiS1ZQIiwgMCwgTE9HX1VTRVIpOwpAQCAtMzczLDkgKzM5OSwxMCBAQAogCQkJICogRHJpdmVyIGlzIHJlZ2lzdGVyaW5nIHdpdGggdXM7IHN0YXNoIGF3YXkgdGhlIHZlcnNpb24KIAkJCSAqIGluZm9ybWF0aW9uLgogCQkJICovCi0JCQlsaWNfdmVyc2lvbiA9IG1hbGxvYyhzdHJsZW4oaW5jb21pbmdfY25fbXNnLT5kYXRhKSArIDEpOworCQkJcCA9IChjaGFyICopaW5jb21pbmdfY25fbXNnLT5kYXRhOworCQkJbGljX3ZlcnNpb24gPSBtYWxsb2Moc3RybGVuKHApICsgMSk7CiAJCQlpZiAobGljX3ZlcnNpb24pIHsKLQkJCQlzdHJjcHkobGljX3ZlcnNpb24sIGluY29taW5nX2NuX21zZy0+ZGF0YSk7CisJCQkJc3RyY3B5KGxpY192ZXJzaW9uLCBwKTsKIAkJCQlzeXNsb2coTE9HX0lORk8sICJLVlAgTElDIFZlcnNpb246ICVzIiwKIAkJCQkJbGljX3ZlcnNpb24pOwogCQkJfSBlbHNlIHsKQEAgLTM4OSwxNCArNDE2LDExIEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCWtleV9pbmRleCA9Ci0JCSgoc3RydWN0IGh2X2t1X21zZyAqKWluY29taW5nX2NuX21zZy0+ZGF0YSktPmt2cF9pbmRleDsKLQkJa2V5X25hbWUgPQotCQkoKHN0cnVjdCBodl9rdV9tc2cgKilpbmNvbWluZ19jbl9tc2ctPmRhdGEpLT5rdnBfa2V5OwotCQlrZXlfdmFsdWUgPQotCQkoKHN0cnVjdCBodl9rdV9tc2cgKilpbmNvbWluZ19jbl9tc2ctPmRhdGEpLT5rdnBfdmFsdWU7CisJCWh2X21zZyA9IChzdHJ1Y3QgaHZfa3VfbXNnICopaW5jb21pbmdfY25fbXNnLT5kYXRhOworCQlrZXlfbmFtZSA9IChjaGFyICopaHZfbXNnLT5rdnBfa2V5OworCQlrZXlfdmFsdWUgPSAoY2hhciAqKWh2X21zZy0+a3ZwX3ZhbHVlOwogCi0JCXN3aXRjaCAoa2V5X2luZGV4KSB7CisJCXN3aXRjaCAoaHZfbXNnLT5rdnBfaW5kZXgpIHsKIAkJY2FzZSBGdWxseVF1YWxpZmllZERvbWFpbk5hbWU6CiAJCQlrdnBfZ2V0X2RvbWFpbl9uYW1lKGtleV92YWx1ZSwKIAkJCQkJSFZfS1ZQX0VYQ0hBTkdFX01BWF9WQUxVRV9TSVpFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19kcnYuYwppbmRleCBiNDczZjQ2Li43OTA4OWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXNfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX2Rydi5jCkBAIC0yNTQsNyArMjU0LDcgQEAKIAlldmVudCA9ICh1bmlvbiBodl9zeW5pY19ldmVudF9mbGFncyAqKXBhZ2VfYWRkciArIFZNQlVTX01FU1NBR0VfU0lOVDsKIAogCS8qIFNpbmNlIHdlIGFyZSBhIGNoaWxkLCB3ZSBvbmx5IG5lZWQgdG8gY2hlY2sgYml0IDAgKi8KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KDAsICh1bnNpZ25lZCBsb25nICopICZldmVudC0+ZmxhZ3MzMlswXSkpIHsKKwlpZiAoc3luY190ZXN0X2FuZF9jbGVhcl9iaXQoMCwgKHVuc2lnbmVkIGxvbmcgKikgJmV2ZW50LT5mbGFnczMyWzBdKSkgewogCQlEUFJJTlRfREJHKFZNQlVTLCAicmVjZWl2ZWQgZXZlbnQgJWQiLCBldmVudC0+ZmxhZ3MzMlswXSk7CiAJCXJldCB8PSAweDI7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX3ByaXZhdGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19wcml2YXRlLmgKaW5kZXggY2EwNTBhNC4uNmYwZDhkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX3ByaXZhdGUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXNfcHJpdmF0ZS5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiY2hhbm5lbF9tZ210LmgiCiAjaW5jbHVkZSAicmluZ19idWZmZXIuaCIKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8YXNtL3N5bmNfYml0b3BzLmg+CiAKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vRG9jdW1lbnRhdGlvbi9paW9fdXRpbHMuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vRG9jdW1lbnRhdGlvbi9paW9fdXRpbHMuaAppbmRleCA4MDk1NzI3Li5mZDc4ZTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL0RvY3VtZW50YXRpb24vaWlvX3V0aWxzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9Eb2N1bWVudGF0aW9uL2lpb191dGlscy5oCkBAIC01NTYsNyArNTU2LDcgQEAKIAkJaWYgKHN0cmNtcCh0ZW1wLCB2YWwpICE9IDApIHsKIAkJCXByaW50ZigiUG9zc2libGUgZmFpbHVyZSBpbiBzdHJpbmcgd3JpdGUgb2YgJXMgIgogCQkJCSJTaG91bGQgYmUgJXMgIgotCQkJCSJ3cml0ZW4gdG8gJXNcJXNcbiIsCisJCQkJIndyaXR0ZW4gdG8gJXNcJXNcbiIsCiAJCQkJdGVtcCwKIAkJCQl2YWwsCiAJCQkJYmFzZWRpciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjAxLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwMS5oCmluZGV4IGM5YmYyMmMuLjIzZmU1NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjAxLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDEuaApAQCAtNzAsNyArNzAsNyBAQAogICogQGluZGlvX2RldjoJCWluZHVzdHJpYWwgSS9PIGRldmljZSBzdHJ1Y3R1cmUKICAqIEB0cmlnOgkJZGF0YSByZWFkeSB0cmlnZ2VyIHJlZ2lzdGVyZWQgd2l0aCBpaW8KICAqIEB0eDoJCQl0cmFuc21pdCBidWZmZXIKLSAqIEByeDoJCQlyZWNpZXZlIGJ1ZmZlcgorICogQHJ4OgkJCXJlY2VpdmUgYnVmZmVyCiAgKiBAYnVmX2xvY2s6CQltdXRleCB0byBwcm90ZWN0IHR4IGFuZCByeAogICoqLwogc3RydWN0IGFkaXMxNjIwMV9zdGF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwMy5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDMuaAppbmRleCBiMzkzMjNlLi5iODg2ODgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwMy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjAzLmgKQEAgLTY1LDcgKzY1LDcgQEAKICAqIEBpbmRpb19kZXY6CQlpbmR1c3RyaWFsIEkvTyBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAdHJpZzoJCWRhdGEgcmVhZHkgdHJpZ2dlciByZWdpc3RlcmVkIHdpdGggaWlvCiAgKiBAdHg6CQkJdHJhbnNtaXQgYnVmZmVyCi0gKiBAcng6CQkJcmVjaWV2ZSBidWZmZXIKKyAqIEByeDoJCQlyZWNlaXZlIGJ1ZmZlcgogICogQGJ1Zl9sb2NrOgkJbXV0ZXggdG8gcHJvdGVjdCB0eCBhbmQgcngKICAqKi8KIHN0cnVjdCBhZGlzMTYyMDNfc3RhdGUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDQuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA0LmgKaW5kZXggZTllZDdjYi4uZTYxODQ0NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDQuaApAQCAtNzMsNyArNzMsNyBAQAogICogQGluZGlvX2RldjoJCWluZHVzdHJpYWwgSS9PIGRldmljZSBzdHJ1Y3R1cmUKICAqIEB0cmlnOgkJZGF0YSByZWFkeSB0cmlnZ2VyIHJlZ2lzdGVyZWQgd2l0aCBpaW8KICAqIEB0eDoJCQl0cmFuc21pdCBidWZmZXIKLSAqIEByeDoJCQlyZWNpZXZlIGJ1ZmZlcgorICogQHJ4OgkJCXJlY2VpdmUgYnVmZmVyCiAgKiBAYnVmX2xvY2s6CQltdXRleCB0byBwcm90ZWN0IHR4IGFuZCByeAogICoqLwogc3RydWN0IGFkaXMxNjIwNF9zdGF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwOS5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDkuaAppbmRleCA0ZTk3NTk2Li44YjBkYTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwOS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA5LmgKQEAgLTEwOSw3ICsxMDksNyBAQAogICogQGluZGlvX2RldjoJCWluZHVzdHJpYWwgSS9PIGRldmljZSBzdHJ1Y3R1cmUKICAqIEB0cmlnOgkJZGF0YSByZWFkeSB0cmlnZ2VyIHJlZ2lzdGVyZWQgd2l0aCBpaW8KICAqIEB0eDoJCQl0cmFuc21pdCBidWZmZXIKLSAqIEByeDoJCQlyZWNpZXZlIGJ1ZmZlcgorICogQHJ4OgkJCXJlY2VpdmUgYnVmZmVyCiAgKiBAYnVmX2xvY2s6CQltdXRleCB0byBwcm90ZWN0IHR4IGFuZCByeAogICoqLwogc3RydWN0IGFkaXMxNjIwOV9zdGF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIyMC5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMjAuaAppbmRleCA3MDEzMzE0Li40ZDU3NThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIyMC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjIwLmgKQEAgLTEzMiw3ICsxMzIsNyBAQAogICogQGluZGlvX2RldjoJCWluZHVzdHJpYWwgSS9PIGRldmljZSBzdHJ1Y3R1cmUKICAqIEB0cmlnOgkJZGF0YSByZWFkeSB0cmlnZ2VyIHJlZ2lzdGVyZWQgd2l0aCBpaW8KICAqIEB0eDoJCQl0cmFuc21pdCBidWZmZXIKLSAqIEByeDoJCQlyZWNpZXZlIGJ1ZmZlcgorICogQHJ4OgkJCXJlY2VpdmUgYnVmZmVyCiAgKiBAYnVmX2xvY2s6CQltdXRleCB0byBwcm90ZWN0IHR4IGFuZCByeAogICoqLwogc3RydWN0IGFkaXMxNjIyMF9zdGF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjI0MC5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyNDAuaAppbmRleCA1MWE4MDdkLi43NmE0NTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjI0MC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjQwLmgKQEAgLTEzMiw3ICsxMzIsNyBAQAogICogQGluZGlvX2RldjoJCWluZHVzdHJpYWwgSS9PIGRldmljZSBzdHJ1Y3R1cmUKICAqIEB0cmlnOgkJZGF0YSByZWFkeSB0cmlnZ2VyIHJlZ2lzdGVyZWQgd2l0aCBpaW8KICAqIEB0eDoJCQl0cmFuc21pdCBidWZmZXIKLSAqIEByeDoJCQlyZWNpZXZlIGJ1ZmZlcgorICogQHJ4OgkJCXJlY2VpdmUgYnVmZmVyCiAgKiBAYnVmX2xvY2s6CQltdXRleCB0byBwcm90ZWN0IHR4IGFuZCByeAogICoqLwogc3RydWN0IGFkaXMxNjI0MF9zdGF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2xpczNsMDJkcS5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9saXMzbDAyZHEuaAppbmRleCA1NzliM2EyLi4xMTQwMjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2xpczNsMDJkcS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvbGlzM2wwMmRxLmgKQEAgLTU3LDcgKzU3LDcgQEAKIC8qIFJlYm9vdCBtZW1vcnkgY29udGVudCAqLwogI2RlZmluZSBMSVMzTDAyRFFfUkVHX0NUUkxfMl9SRUJPT1RfTUVNT1JZCTB4MTAKIAotLyogSW50ZXJ1cHQgRW5hYmxlIC0gYXBwbGllcyBkYXRhIHJlYWR5IHRvIHRoZSBSRFkgcGFkICovCisvKiBJbnRlcnJ1cHQgRW5hYmxlIC0gYXBwbGllcyBkYXRhIHJlYWR5IHRvIHRoZSBSRFkgcGFkICovCiAjZGVmaW5lIExJUzNMMDJEUV9SRUdfQ1RSTF8yX0VOQUJMRV9JTlRFUlJVUFQJMHgwOAogCiAvKiBFbmFibGUgRGF0YSBSZWFkeSBHZW5lcmF0aW9uIC0gcmVsYXRpb25zaGlwIHdpdGggcHJldmlvdXMgdW5jbGVhciBpbiBkb2NzICovCkBAIC03MCwzNCArNzAsMzQgQEAKICAqIC0gb3B0aW9uIGZvciAxNiBiaXQgbGVmdCBqdXN0aWZpZWQgKi8KICNkZWZpbmUgTElTM0wwMkRRX1JFR19DVFJMXzJfREFUQV9BTElHTk1FTlRfMTZfQklUX0xFRlRfSlVTVElGSUVECTB4MDEKIAotLyogSW50ZXJ1cHQgcmVsYXRlZCBzdHVmZiAqLworLyogSW50ZXJydXB0IHJlbGF0ZWQgc3R1ZmYgKi8KICNkZWZpbmUgTElTM0wwMkRRX1JFR19XQUtFX1VQX0NGR19BRERSCQkJMHgyMwogCiAvKiBTd2l0Y2ggZnJvbSBvciBjb21iaW5hdGlvbiBmbyBjb25kaXRpb25zIHRvIGFuZCAqLwogI2RlZmluZSBMSVMzTDAyRFFfUkVHX1dBS0VfVVBfQ0ZHX0JPT0xFQU5fQU5ECQkweDgwCiAKLS8qIExhdGNoIGludGVydXB0IHJlcXVlc3QsCisvKiBMYXRjaCBpbnRlcnJ1cHQgcmVxdWVzdCwKICAqIGlmIG9uIGFjayBtdXN0IGJlIGdpdmVuIGJ5IHJlYWRpbmcgdGhlIGFjayByZWdpc3RlciAqLwogI2RlZmluZSBMSVMzTDAyRFFfUkVHX1dBS0VfVVBfQ0ZHX0xBVENIX1NSQwkJMHg0MAogCi0vKiBaIEludGVydXB0IG9uIEhpZ2ggKGFib3ZlIHRocmVzaG9sZCkqLworLyogWiBJbnRlcnJ1cHQgb24gSGlnaCAoYWJvdmUgdGhyZXNob2xkKSovCiAjZGVmaW5lIExJUzNMMDJEUV9SRUdfV0FLRV9VUF9DRkdfSU5URVJSVVBUX1pfSElHSAkweDIwCi0vKiBaIEludGVydXB0IG9uIExvdyAqLworLyogWiBJbnRlcnJ1cHQgb24gTG93ICovCiAjZGVmaW5lIExJUzNMMDJEUV9SRUdfV0FLRV9VUF9DRkdfSU5URVJSVVBUX1pfTE9XCTB4MTAKLS8qIFkgSW50ZXJ1cHQgb24gSGlnaCAqLworLyogWSBJbnRlcnJ1cHQgb24gSGlnaCAqLwogI2RlZmluZSBMSVMzTDAyRFFfUkVHX1dBS0VfVVBfQ0ZHX0lOVEVSUlVQVF9ZX0hJR0gJMHgwOAotLyogWSBJbnRlcnVwdCBvbiBMb3cgKi8KKy8qIFkgSW50ZXJydXB0IG9uIExvdyAqLwogI2RlZmluZSBMSVMzTDAyRFFfUkVHX1dBS0VfVVBfQ0ZHX0lOVEVSUlVQVF9ZX0xPVwkweDA0Ci0vKiBYIEludGVydXB0IG9uIEhpZ2ggKi8KKy8qIFggSW50ZXJydXB0IG9uIEhpZ2ggKi8KICNkZWZpbmUgTElTM0wwMkRRX1JFR19XQUtFX1VQX0NGR19JTlRFUlJVUFRfWF9ISUdICTB4MDIKLS8qIFggSW50ZXJ1cHQgb24gTG93ICovCisvKiBYIEludGVycnVwdCBvbiBMb3cgKi8KICNkZWZpbmUgTElTM0wwMkRRX1JFR19XQUtFX1VQX0NGR19JTlRFUlJVUFRfWF9MT1cgMHgwMQogCi0vKiBSZWdpc3RlciB0aGF0IGdpdmVzIGRlc2NyaXB0aW9uIG9mIHdoYXQgY2F1c2VkIGludGVydXB0CisvKiBSZWdpc3RlciB0aGF0IGdpdmVzIGRlc2NyaXB0aW9uIG9mIHdoYXQgY2F1c2VkIGludGVycnVwdAogICogLSBsYXRjaGVkIGlmIHNldCBpbiBDRkdfQUREUkVTICovCiAjZGVmaW5lIExJUzNMMDJEUV9SRUdfV0FLRV9VUF9TUkNfQUREUgkJCTB4MjQKIC8qIHRvcCBiaXQgaWdub3JlZCAqLwotLyogSW50ZXJ1cHQgQWN0aXZlICovCisvKiBJbnRlcnJ1cHQgQWN0aXZlICovCiAjZGVmaW5lIExJUzNMMDJEUV9SRUdfV0FLRV9VUF9TUkNfSU5URVJSVVBUX0FDVElWQVRFRAkweDQwCiAvKiBJbnRlcnVwdHMgdGhhdCBoYXZlIGJlZW4gdHJpZ2dlcmVkICovCiAjZGVmaW5lIExJUzNMMDJEUV9SRUdfV0FLRV9VUF9TUkNfSU5URVJSVVBUX1pfSElHSAkweDIwCkBAIC0xMjMsNyArMTIzLDcgQEAKICNkZWZpbmUgTElTM0wwMkRRX1JFR19TVEFUVVNfWF9ORVdfREFUQQkJCTB4MDEKIAogLyogVGhlIGFjY2VsZXJvbWV0ZXIgcmVhZGluZ3MgLSBsb3cgYW5kIGhpZ2ggYnl0ZXMuCi1Gb3JtIG9mIGhpZ2ggYnl0ZSBkZXBlbmRhbnQgb24ganVzdGlmaWNhdGlvbiBzZXQgaW4gY3RybCByZWcgKi8KK0Zvcm0gb2YgaGlnaCBieXRlIGRlcGVuZGVudCBvbiBqdXN0aWZpY2F0aW9uIHNldCBpbiBjdHJsIHJlZyAqLwogI2RlZmluZSBMSVMzTDAyRFFfUkVHX09VVF9YX0xfQUREUgkJCTB4MjgKICNkZWZpbmUgTElTM0wwMkRRX1JFR19PVVRfWF9IX0FERFIJCQkweDI5CiAjZGVmaW5lIExJUzNMMDJEUV9SRUdfT1VUX1lfTF9BRERSCQkJMHgyQQpAQCAtMTU1LDcgKzE1NSw3IEBACiAgKiBAaW50ZXI6CQl1c2VkIHRvIGNoZWNrIGlmIG5ldyBpbnRlcnJ1cHQgaGFzIGJlZW4gdHJpZ2dlcmVkCiAgKiBAdHJpZzoJCWRhdGEgcmVhZHkgdHJpZ2dlciByZWdpc3RlcmVkIHdpdGggaWlvCiAgKiBAdHg6CQkJdHJhbnNtaXQgYnVmZmVyCi0gKiBAcng6CQkJcmVjaWV2ZSBidWZmZXIKKyAqIEByeDoJCQlyZWNlaXZlIGJ1ZmZlcgogICogQGJ1Zl9sb2NrOgkJbXV0ZXggdG8gcHJvdGVjdCB0eCBhbmQgcngKICAqKi8KIHN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9saXMzbDAyZHFfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9saXMzbDAyZHFfY29yZS5jCmluZGV4IGM0YjRhYjcuLjMwNjdmOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvbGlzM2wwMmRxX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2xpczNsMDJkcV9jb3JlLmMKQEAgLTc3LDcgKzc3LDcgQEAKIC8qKgogICogbGlzM2wwMmRxX3NwaV93cml0ZV9yZWdfOCgpIC0gd3JpdGUgc2luZ2xlIGJ5dGUgdG8gYSByZWdpc3RlcgogICogQGRldjogZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBjaGlsZCBvZiBhY3R1YWwgZGV2aWNlIChpaW9fZGV2IG9yIGlpb190cmlnKQotICogQHJlZ19hZGRyZXNzOiB0aGUgYWRkcmVzcyBvZiB0aGUgcmVnaXN0ZXIgdG8gYmUgd3JpdGVuCisgKiBAcmVnX2FkZHJlc3M6IHRoZSBhZGRyZXNzIG9mIHRoZSByZWdpc3RlciB0byBiZSB3cml0dGVuCiAgKiBAdmFsOiB0aGUgdmFsdWUgdG8gd3JpdGUKICAqKi8KIGludCBsaXMzbDAyZHFfc3BpX3dyaXRlX3JlZ184KHN0cnVjdCBkZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvbGlzM2wwMmRxX3JpbmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvbGlzM2wwMmRxX3JpbmcuYwppbmRleCAyYzQ2MWEzLi41MjlhM2NjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2xpczNsMDJkcV9yaW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9saXMzbDAyZHFfcmluZy5jCkBAIC0yMTcsNyArMjE3LDcgQEAKIC8qKgogICogbGlzM2wwMmRxX3JlYWRfYWxsKCkgUmVhZHMgYWxsIGNoYW5uZWxzIGN1cnJlbnRseSBzZWxlY3RlZAogICogQHN0OgkJZGV2aWNlIHNwZWNpZmljIHN0YXRlCi0gKiBAcnhfYXJyYXk6CShkbWEgY2FwYWJsZSkgcmVjaWV2ZSBhcnJheSwgbXVzdCBiZSBhdCBsZWFzdAorICogQHJ4X2FycmF5OgkoZG1hIGNhcGFibGUpIHJlY2VpdmUgYXJyYXksIG11c3QgYmUgYXQgbGVhc3QKICAqCQk0Km51bWJlciBvZiBjaGFubmVscwogICoqLwogc3RhdGljIGludCBsaXMzbDAyZHFfcmVhZF9hbGwoc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QsIHU4ICpyeF9hcnJheSkKQEAgLTQwOSw3ICs0MDksNyBAQAogICoKICAqIEFzIHRoZSB0cmlnZ2VyIG1heSBvY2N1ciBvbiBhbnkgZGF0YSBlbGVtZW50IGJlaW5nIHVwZGF0ZWQgaXQgaXMKICAqIHJlYWxseSByYXRoZXIgbGlrZWx5IHRvIG9jY3VyIGR1cmluZyB0aGUgcmVhZCBmcm9tIHRoZSBwcmV2aW91cwotICogdHJpZ2dlciBldmVudC4gIFRoZSBvbmx5IHdheSB0byBkaXNjb3ZlciBpZiB0aGlzIGhhcyBvY2N1cmVkIG9uCisgKiB0cmlnZ2VyIGV2ZW50LiAgVGhlIG9ubHkgd2F5IHRvIGRpc2NvdmVyIGlmIHRoaXMgaGFzIG9jY3VycmVkIG9uCiAgKiBib2FyZHMgbm90IHN1cHBvcnRpbmcgbGV2ZWwgaW50ZXJydXB0cyBpcyB0byB0YWtlIGEgbG9vayBhdCB0aGUgbGluZS4KICAqIElmIGl0IGlzIGluZGljYXRpbmcgYW5vdGhlciBpbnRlcnJ1cHQgYW5kIHdlIGRvbid0IHNlZW0gdG8gaGF2ZSBhCiAgKiBoYW5kbGVyIGxvb2tpbmcgYXQgaXQsIHRoZW4gd2UgbmVlZCB0byBub3RpZnkgdGhlIGNvcmUgdGhhdCB3ZSBuZWVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL3NjYTMwMDAuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvc2NhMzAwMC5oCmluZGV4IDIzODkyODQuLmRiNzEwMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvc2NhMzAwMC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvc2NhMzAwMC5oCkBAIC0xODUsNyArMTg1LDcgQEAKIH07CiAKIC8qKgotICogc3RydWN0IHNjYTMwMDBfY2hpcF9pbmZvIC0gbW9kZWwgZGVwZW5kYW50IHBhcmFtZXRlcnMKKyAqIHN0cnVjdCBzY2EzMDAwX2NoaXBfaW5mbyAtIG1vZGVsIGRlcGVuZGVudCBwYXJhbWV0ZXJzCiAgKiBAbmFtZTogCQkJbW9kZWwgaWRlbnRpZmljYXRpb24KICAqIEBzY2FsZToJCQlzdHJpbmcgY29udGFpbmluZyBmbG9hdGluZyBwb2ludCBzY2FsZSBmYWN0b3IKICAqIEB0ZW1wX291dHB1dDoJCXNvbWUgZGV2aWNlcyBoYXZlIHRlbXBlcmF0dXJlIHNlbnNvcnMuCkBAIC0yMTMsNyArMjEzLDcgQEAKICAqIHNjYTMwMDBfcmVhZF9kYXRhKCkgcmVhZCBhIHNlcmllcyBvZiB2YWx1ZXMgZnJvbSB0aGUgZGV2aWNlCiAgKiBAZGV2OgkJZGV2aWNlCiAgKiBAcmVnX2FkZHJlc3NfaGlnaDoJc3RhcnQgYWRkcmVzcyAoZGVjcmVtZW50ZWQgcmVhZCkKLSAqIEByeDoJCQlwb2ludGVyIHdoZXJlIHJlY2lldmVkIGRhdGEgaXMgcGxhY2VkLiBDYWxsZWUKKyAqIEByeDoJCQlwb2ludGVyIHdoZXJlIHJlY2VpdmVkIGRhdGEgaXMgcGxhY2VkLiBDYWxsZWUKICAqCQkJcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgdGhpcy4KICAqIEBsZW46CQludW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvc2NhMzAwMF9yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL3NjYTMwMDBfcmluZy5jCmluZGV4IGM4NzJmZGQuLmE3MzBhNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvc2NhMzAwMF9yaW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9zY2EzMDAwX3JpbmcuYwpAQCAtNDMsNyArNDMsNyBAQAogICoJCQlsZWFkaW5nIGJ5dGUgdXNlZCBpbiBidXMgY29tbXMuCiAgKgogICogQ3VycmVudGx5IGRvZXMgbm90IHByb3ZpZGUgdGltZXN0YW1wcy4gIEFzIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGFkZCB0aGVtIHRoZXkKLSAqIGNhbiBvbmx5IGJlIGluZmVycmVkIGFwcm94aW1hdGVseSBmcm9tIHJpbmcgYnVmZmVyIGV2ZW50cyBzdWNoIGFzIDUwJSBmdWxsCisgKiBjYW4gb25seSBiZSBpbmZlcnJlZCBhcHByb3hpbWF0ZWx5IGZyb20gcmluZyBidWZmZXIgZXZlbnRzIHN1Y2ggYXMgNTAlIGZ1bGwKICAqIGFuZCBrbm93bGVkZ2Ugb2Ygd2hlbiBidWZmZXIgd2FzIGxhc3QgZW1wdGllZC4gIFRoaXMgaXMgbGVmdCB0byB1c2Vyc3BhY2UuCiAgKiovCiBzdGF0aWMgaW50IHNjYTMwMDBfcmlwX2h3X3JiKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDcyOThfcmluZy5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3Mjk4X3JpbmcuYwppbmRleCAxOWQxYWNlLi45MDY4ZDdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDcyOThfcmluZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzI5OF9yaW5nLmMKQEAgLTE1Nyw3ICsxNTcsNyBAQAogLyoqCiAgKiBhZDcyOThfcG9sbF9mdW5jX3RoKCkgdGggb2YgdHJpZ2dlciBsYXVuY2hlZCBwb2xsaW5nIHRvIHJpbmcgYnVmZmVyCiAgKgotICogQXMgc2FtcGxpbmcgb25seSBvY2N1cnMgb24gc3BpIGNvbW1zIG9jY3VyaW5nLCBsZWF2ZSB0aW1lc3RhbXBpbmcgdW50aWwKKyAqIEFzIHNhbXBsaW5nIG9ubHkgb2NjdXJzIG9uIHNwaSBjb21tcyBvY2N1cnJpbmcsIGxlYXZlIHRpbWVzdGFtcGluZyB1bnRpbAogICogdGhlbi4gIFNvbWUgdHJpZ2dlcnMgd2lsbCBnZW5lcmF0ZSB0aGVpciBvd24gdGltZSBzdGFtcC4gIEN1cnJlbnRseQogICogdGhlcmUgaXMgbm8gd2F5IG9mIG5vdGlmeWluZyB0aGVtIHdoZW4gbm8gb25lIGNhcmVzLgogICoqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NDc2X3JpbmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzQ3Nl9yaW5nLmMKaW5kZXggMWQ2NTRjOC4uOTJkOTM3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NDc2X3JpbmcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc0NzZfcmluZy5jCkBAIC0xMTIsNyArMTEyLDcgQEAKIC8qKgogICogYWQ3NDc2X3BvbGxfZnVuY190aCgpIHRoIG9mIHRyaWdnZXIgbGF1bmNoZWQgcG9sbGluZyB0byByaW5nIGJ1ZmZlcgogICoKLSAqIEFzIHNhbXBsaW5nIG9ubHkgb2NjdXJzIG9uIGkyYyBjb21tcyBvY2N1cmluZywgbGVhdmUgdGltZXN0YW1waW5nIHVudGlsCisgKiBBcyBzYW1wbGluZyBvbmx5IG9jY3VycyBvbiBpMmMgY29tbXMgb2NjdXJyaW5nLCBsZWF2ZSB0aW1lc3RhbXBpbmcgdW50aWwKICAqIHRoZW4uICBTb21lIHRyaWdnZXJzIHdpbGwgZ2VuZXJhdGUgdGhlaXIgb3duIHRpbWUgc3RhbXAuICBDdXJyZW50bHkKICAqIHRoZXJlIGlzIG5vIHdheSBvZiBub3RpZnlpbmcgdGhlbSB3aGVuIG5vIG9uZSBjYXJlcy4KICAqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzg4N19yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc4ODdfcmluZy5jCmluZGV4IDJkN2ZlNjUuLmRhNzdmMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzg4N19yaW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3ODg3X3JpbmcuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAvKioKICAqIGFkNzg4N19wb2xsX2Z1bmNfdGgoKSB0aCBvZiB0cmlnZ2VyIGxhdW5jaGVkIHBvbGxpbmcgdG8gcmluZyBidWZmZXIKICAqCi0gKiBBcyBzYW1wbGluZyBvbmx5IG9jY3VycyBvbiBzcGkgY29tbXMgb2NjdXJpbmcsIGxlYXZlIHRpbWVzdGFtcGluZyB1bnRpbAorICogQXMgc2FtcGxpbmcgb25seSBvY2N1cnMgb24gc3BpIGNvbW1zIG9jY3VycmluZywgbGVhdmUgdGltZXN0YW1waW5nIHVudGlsCiAgKiB0aGVuLiAgU29tZSB0cmlnZ2VycyB3aWxsIGdlbmVyYXRlIHRoZWlyIG93biB0aW1lIHN0YW1wLiAgQ3VycmVudGx5CiAgKiB0aGVyZSBpcyBubyB3YXkgb2Ygbm90aWZ5aW5nIHRoZW0gd2hlbiBubyBvbmUgY2FyZXMuCiAgKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc5OXhfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3OTl4X2NvcmUuYwppbmRleCBlNTA4NDFiLi5mMDRlNjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc5OXhfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzk5eF9jb3JlLmMKQEAgLTE4NCw3ICsxODQsNyBAQAogCiAJbXV0ZXhfbG9jaygmZGV2X2luZm8tPm1sb2NrKTsKIAltYXNrID0gMSA8PCB0aGlzX2F0dHItPmFkZHJlc3M7Ci0JLyogSWYgcmluZyBidWZmZXIgY2FwdHVyZSBpcyBvY2N1cmluZywgcXVlcnkgdGhlIGJ1ZmZlciAqLworCS8qIElmIHJpbmcgYnVmZmVyIGNhcHR1cmUgaXMgb2NjdXJyaW5nLCBxdWVyeSB0aGUgYnVmZmVyICovCiAJaWYgKGlpb19yaW5nX2VuYWJsZWQoZGV2X2luZm8pKSB7CiAJCWRhdGEgPSByZXQgPSBhZDc5OXhfc2luZ2xlX2NoYW5uZWxfZnJvbV9yaW5nKHN0LCBtYXNrKTsKIAkJaWYgKHJldCA8IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc5OXhfcmluZy5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3OTl4X3JpbmcuYwppbmRleCA1NmFiYzM5Li4wODc1YTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc5OXhfcmluZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzk5eF9yaW5nLmMKQEAgLTEwMSw3ICsxMDEsNyBAQAogLyoqCiAgKiBhZDc5OXhfcG9sbF9mdW5jX3RoKCkgdGggb2YgdHJpZ2dlciBsYXVuY2hlZCBwb2xsaW5nIHRvIHJpbmcgYnVmZmVyCiAgKgotICogQXMgc2FtcGxpbmcgb25seSBvY2N1cnMgb24gaTJjIGNvbW1zIG9jY3VyaW5nLCBsZWF2ZSB0aW1lc3RhbXBpbmcgdW50aWwKKyAqIEFzIHNhbXBsaW5nIG9ubHkgb2NjdXJzIG9uIGkyYyBjb21tcyBvY2N1cnJpbmcsIGxlYXZlIHRpbWVzdGFtcGluZyB1bnRpbAogICogdGhlbi4gIFNvbWUgdHJpZ2dlcnMgd2lsbCBnZW5lcmF0ZSB0aGVpciBvd24gdGltZSBzdGFtcC4gIEN1cnJlbnRseQogICogdGhlcmUgaXMgbm8gd2F5IG9mIG5vdGlmeWluZyB0aGVtIHdoZW4gbm8gb25lIGNhcmVzLgogICoqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvbWF4MTM2M19jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9tYXgxMzYzX2NvcmUuYwppbmRleCBkZGUwOTdhLi5kZTgzYzNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9tYXgxMzYzX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9tYXgxMzYzX2NvcmUuYwpAQCAtMjU1LDcgKzI1NSw3IEBACiAJCWdvdG8gZXJyb3JfcmV0OwogCX0KIAotCS8qIElmIHJpbmcgYnVmZmVyIGNhcHR1cmUgaXMgb2NjdXJpbmcsIHF1ZXJ5IHRoZSBidWZmZXIgKi8KKwkvKiBJZiByaW5nIGJ1ZmZlciBjYXB0dXJlIGlzIG9jY3VycmluZywgcXVlcnkgdGhlIGJ1ZmZlciAqLwogCWlmIChpaW9fcmluZ19lbmFibGVkKGRldl9pbmZvKSkgewogCQltYXNrID0gbWF4MTM2M19tb2RlX3RhYmxlW3RoaXNfYXR0ci0+YWRkcmVzc10ubW9kZW1hc2s7CiAJCWRhdGEgPSBtYXgxMzYzX3NpbmdsZV9jaGFubmVsX2Zyb21fcmluZyhtYXNrLCBzdCk7CkBAIC0xNDI1LDcgKzE0MjUsNyBAQAogfQogCiAvKgotICogVG8ga2VlcCB0aGlzIG1hbmFnYWJsZSB3ZSBhbHdheXMgdXNlIG9uZSBvZiAzIHNjYW4gbW9kZXMuCisgKiBUbyBrZWVwIHRoaXMgbWFuYWdlYWJsZSB3ZSBhbHdheXMgdXNlIG9uZSBvZiAzIHNjYW4gbW9kZXMuCiAgKiBTY2FuIDAuLi4zLCAwLTEsMi0zIGFuZCAxLTAsMy0yCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IF9fbWF4MTM2M19jaGVja19ldmVudF9tYXNrKGludCB0aGlzbWFzaywgaW50IGNoZWNrbWFzaykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL21heDEzNjNfcmluZy5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvbWF4MTM2M19yaW5nLmMKaW5kZXggNTUzMmYzZS4uZDM2ZmNjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvbWF4MTM2M19yaW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvbWF4MTM2M19yaW5nLmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogLyoqCiAgKiBtYXgxMzYzX3BvbGxfZnVuY190aCgpIC0gdGggb2YgdHJpZ2dlciBsYXVuY2hlZCBwb2xsaW5nIHRvIHJpbmcgYnVmZmVyCiAgKgotICogQXMgc2FtcGxpbmcgb25seSBvY2N1cnMgb24gaTJjIGNvbW1zIG9jY3VyaW5nLCBsZWF2ZSB0aW1lc3RhbXBpbmcgdW50aWwKKyAqIEFzIHNhbXBsaW5nIG9ubHkgb2NjdXJzIG9uIGkyYyBjb21tcyBvY2N1cnJpbmcsIGxlYXZlIHRpbWVzdGFtcGluZyB1bnRpbAogICogdGhlbi4gIFNvbWUgdHJpZ2dlcnMgd2lsbCBnZW5lcmF0ZSB0aGVpciBvd24gdGltZSBzdGFtcC4gIEN1cnJlbnRseQogICogdGhlcmUgaXMgbm8gd2F5IG9mIG5vdGlmeWluZyB0aGVtIHdoZW4gbm8gb25lIGNhcmVzLgogICoqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9jaHJkZXYuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vY2hyZGV2LmgKaW5kZXggOThkMWEyYy4uNGZjYjk5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9jaHJkZXYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2NocmRldi5oCkBAIC0zMyw3ICszMyw3IEBACiAvKioKICAqIHN0cnVjdCBpaW9fZXZlbnRfZGF0YSAtIFRoZSBhY3R1YWwgZXZlbnQgYmVpbmcgcHVzaGVkIHRvIHVzZXJzcGFjZQogICogQGlkOgkJZXZlbnQgaWRlbnRpZmllcgotICogQHRpbWVzdGFtcDoJYmVzdCBlc3RpbWF0ZSBvZiB0aW1lIG9mIGV2ZW50IG9jY3VyYW5jZSAob2Z0ZW4gZnJvbQorICogQHRpbWVzdGFtcDoJYmVzdCBlc3RpbWF0ZSBvZiB0aW1lIG9mIGV2ZW50IG9jY3VycmVuY2UgKG9mdGVuIGZyb20KICAqCQl0aGUgaW50ZXJydXB0IGhhbmRsZXIpCiAgKi8KIHN0cnVjdCBpaW9fZXZlbnRfZGF0YSB7CkBAIC00Miw3ICs0Miw3IEBACiB9OwogCiAvKioKLSAqIHN0cnVjdCBpaW9fZGV0ZWN0ZWRfZXZlbnRfbGlzdCAtIGxpc3QgZWxlbWVudCBmb3IgZXZlbnRzIHRoYXQgaGF2ZSBvY2N1cmVkCisgKiBzdHJ1Y3QgaWlvX2RldGVjdGVkX2V2ZW50X2xpc3QgLSBsaXN0IGVsZW1lbnQgZm9yIGV2ZW50cyB0aGF0IGhhdmUgb2NjdXJyZWQKICAqIEBsaXN0OgkJbGlua2VkIGxpc3QgaGVhZGVyCiAgKiBAZXY6CQkJdGhlIGV2ZW50IGl0c2VsZgogICogQHNoYXJlZF9wb2ludGVyOgl1c2VkIHdoZW4gdGhlIGV2ZW50IGlzIHNoYXJlZCAtIGkuZS4gY2FuIGJlIGVzY2FsbGF0ZWQKQEAgLTk4LDcgKzk4LDcgQEAKICAqIEBsaXN0OgkJbGlzdCBoZWFkZXIKICAqIEByZWZjb3VudDoJCWFzIHRoZSBoYW5kbGVyIG1heSBiZSBzaGFyZWQgYmV0d2VlbiBtdWx0aXBsZSBkZXZpY2UKICAqCQkJc2lkZSBldmVudHMsIHJlZmVyZW5jZSBjb3VudGluZyBlbnN1cmVzIGNsZWFuIHJlbW92YWwKLSAqIEBleGlzdF9sb2NrOgkJcHJldmVudHMgcmFjZSBjb25kaXRpb25zIHJlbGF0ZWQgdG8gcmVmY291bnQgdXNlYWdlLgorICogQGV4aXN0X2xvY2s6CQlwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMgcmVsYXRlZCB0byByZWZjb3VudCB1c2FnZS4KICAqIEBoYW5kbGVyOgkJZXZlbnQgaGFuZGxlciBmdW5jdGlvbiAtIGNhbGxlZCBvbiBldmVudCBpZiB0aGlzCiAgKgkJCWV2ZW50X2hhbmRsZXIgaXMgZW5hYmxlZC4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MDYwX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZGlzMTYwNjBfY29yZS5jCmluZGV4IDcwMGViMzkuLmFlNTNlNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZGlzMTYwNjBfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZGlzMTYwNjBfY29yZS5jCkBAIC0zMCw3ICszMCw3IEBACiAgKiBAdXNfdzoJCWFjdHVhbCBzcGlfZGV2aWNlIHRvIHdyaXRlIGNvbmZpZwogICogQHVzX3I6CQlhY3R1YWwgc3BpX2RldmljZSB0byByZWFkIGJhY2sgZGF0YQogICogQGluZGlvX2RldjoJCWluZHVzdHJpYWwgSS9PIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEBidWY6CQl0cmFuc21pdCBvciByZWNpZXZlIGJ1ZmZlcgorICogQGJ1ZjoJCXRyYW5zbWl0IG9yIHJlY2VpdmUgYnVmZmVyCiAgKiBAYnVmX2xvY2s6CQltdXRleCB0byBwcm90ZWN0IHR4IGFuZCByeAogICoqLwogc3RydWN0IGFkaXMxNjA2MF9zdGF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MDgwX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZGlzMTYwODBfY29yZS5jCmluZGV4IGZiNDMzNmMuLmVmOWUzMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZGlzMTYwODBfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZGlzMTYwODBfY29yZS5jCkBAIC0zNSw3ICszNSw3IEBACiAgKiBzdHJ1Y3QgYWRpczE2MDgwX3N0YXRlIC0gZGV2aWNlIGluc3RhbmNlIHNwZWNpZmljIGRhdGEKICAqIEB1czoJCQlhY3R1YWwgc3BpX2RldmljZSB0byB3cml0ZSBkYXRhCiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQotICogQGJ1ZjoJCXRyYW5zbWl0IG9yIHJlY2lldmUgYnVmZmVyCisgKiBAYnVmOgkJdHJhbnNtaXQgb3IgcmVjZWl2ZSBidWZmZXIKICAqIEBidWZfbG9jazoJCW11dGV4IHRvIHByb3RlY3QgdHggYW5kIHJ4CiAgKiovCiBzdHJ1Y3QgYWRpczE2MDgwX3N0YXRlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZGlzMTYyNjAuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZGlzMTYyNjAuaAppbmRleCBjMWZkNDM2NC4uMTM2OTUwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZGlzMTYyNjAuaApAQCAtOTEsNyArOTEsNyBAQAogICogQGluZGlvX2RldjoJCWluZHVzdHJpYWwgSS9PIGRldmljZSBzdHJ1Y3R1cmUKICAqIEB0cmlnOgkJZGF0YSByZWFkeSB0cmlnZ2VyIHJlZ2lzdGVyZWQgd2l0aCBpaW8KICAqIEB0eDoJCQl0cmFuc21pdCBidWZmZXIKLSAqIEByeDoJCQlyZWNpZXZlIGJ1ZmZlcgorICogQHJ4OgkJCXJlY2VpdmUgYnVmZmVyCiAgKiBAYnVmX2xvY2s6CQltdXRleCB0byBwcm90ZWN0IHR4IGFuZCByeAogICogQG5lZ2F0ZToJCW5lZ2F0ZSB0aGUgc2NhbGUgcGFyYW1ldGVyCiAgKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2lpby5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9paW8uaAppbmRleCAyNDhiZGQyLi43MTI3ZjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2lpby5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaWlvLmgKQEAgLTkyLDcgKzkyLDcgQEAKICAqCQkJY2hhbmdlcwogICogQGF2YWlsYWJsZV9zY2FuX21hc2tzOiBbRFJJVkVSXSBvcHRpb25hbCBhcnJheSBvZiBhbGxvd2VkIGJpdG1hc2tzCiAgKiBAdHJpZzoJCVtJTlRFUk5dIGN1cnJlbnQgZGV2aWNlIHRyaWdnZXIgKHJpbmcgYnVmZmVyIG1vZGVzKQotICogQHBvbGxmdW5jOgkJW0RSSVZFUl0gZnVuY3Rpb24gcnVuIG9uIHRyaWdnZXIgYmVpbmcgcmVjaWV2ZWQKKyAqIEBwb2xsZnVuYzoJCVtEUklWRVJdIGZ1bmN0aW9uIHJ1biBvbiB0cmlnZ2VyIGJlaW5nIHJlY2VpdmVkCiAgKiovCiBzdHJ1Y3QgaWlvX2RldiB7CiAJaW50CQkJCWlkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzAwLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzMDAuaAppbmRleCAxZjI1ZDY4Li5jMDk1NzU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzMDAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzMDAuaApAQCAtOTksNyArOTksNyBAQAogICogQGluZGlvX2RldjoJCWluZHVzdHJpYWwgSS9PIGRldmljZSBzdHJ1Y3R1cmUKICAqIEB0cmlnOgkJZGF0YSByZWFkeSB0cmlnZ2VyIHJlZ2lzdGVyZWQgd2l0aCBpaW8KICAqIEB0eDoJCQl0cmFuc21pdCBidWZmZXIKLSAqIEByeDoJCQlyZWNpZXZlIGJ1ZmZlcgorICogQHJ4OgkJCXJlY2VpdmUgYnVmZmVyCiAgKiBAYnVmX2xvY2s6CQltdXRleCB0byBwcm90ZWN0IHR4IGFuZCByeAogICoqLwogc3RydWN0IGFkaXMxNjMwMF9zdGF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzNTAuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjM1MC5oCmluZGV4IGIwMDAwMWUuLmIxYWQ0ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjM1MC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjM1MC5oCkBAIC0xMDUsNyArMTA1LDcgQEAKICAqIEBpbmRpb19kZXY6CQlpbmR1c3RyaWFsIEkvTyBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAdHJpZzoJCWRhdGEgcmVhZHkgdHJpZ2dlciByZWdpc3RlcmVkIHdpdGggaWlvCiAgKiBAdHg6CQkJdHJhbnNtaXQgYnVmZmVyCi0gKiBAcng6CQkJcmVjaWV2ZSBidWZmZXIKKyAqIEByeDoJCQlyZWNlaXZlIGJ1ZmZlcgogICogQGJ1Zl9sb2NrOgkJbXV0ZXggdG8gcHJvdGVjdCB0eCBhbmQgcngKICAqKi8KIHN0cnVjdCBhZGlzMTYzNTBfc3RhdGUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDAuaAppbmRleCA2ZmYzM2UxLi5lMzI4YmNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDAuaApAQCAtMTcsNyArMTcsOCBAQAogI2lmbmRlZiBTUElfQURJUzE2NDAwX0hfCiAjZGVmaW5lIFNQSV9BRElTMTY0MDBfSF8KIAotI2RlZmluZSBBRElTMTY0MDBfU1RBUlRVUF9ERUxBWQkyMjAgLyogbXMgKi8KKyNkZWZpbmUgQURJUzE2NDAwX1NUQVJUVVBfREVMQVkJMjkwIC8qIG1zICovCisjZGVmaW5lIEFESVMxNjQwMF9NVEVTVF9ERUxBWSA5MCAvKiBtcyAqLwogCiAjZGVmaW5lIEFESVMxNjQwMF9SRUFEX1JFRyhhKSAgICBhCiAjZGVmaW5lIEFESVMxNjQwMF9XUklURV9SRUcoYSkgKChhKSB8IDB4ODApCkBAIC0xMzEsNyArMTMyLDcgQEAKICAqIEBpbmRpb19kZXY6CQlpbmR1c3RyaWFsIEkvTyBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAdHJpZzoJCWRhdGEgcmVhZHkgdHJpZ2dlciByZWdpc3RlcmVkIHdpdGggaWlvCiAgKiBAdHg6CQkJdHJhbnNtaXQgYnVmZmVyCi0gKiBAcng6CQkJcmVjaWV2ZSBidWZmZXIKKyAqIEByeDoJCQlyZWNlaXZlIGJ1ZmZlcgogICogQGJ1Zl9sb2NrOgkJbXV0ZXggdG8gcHJvdGVjdCB0eCBhbmQgcngKICAqKi8KIHN0cnVjdCBhZGlzMTY0MDBfc3RhdGUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMF9jb3JlLmMKaW5kZXggY2ZiMTA4YS4uNTQwYmRlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfY29yZS5jCkBAIC02LDYgKzYsNyBAQAogICoKICAqIENvcHlyaWdodCAoYykgMjAwOSBNYW51ZWwgU3RhaGwgPG1hbnVlbC5zdGFobEBpaXMuZnJhdW5ob2Zlci5kZT4KICAqIENvcHlyaWdodCAoYykgMjAwNyBKb25hdGhhbiBDYW1lcm9uIDxqaWMyM0BjYW0uYWMudWs+CisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtOTMsNyArOTQsNiBAQAogCQkJLnR4X2J1ZiA9IHN0LT50eCArIDIsCiAJCQkuYml0c19wZXJfd29yZCA9IDgsCiAJCQkubGVuID0gMiwKLQkJCS5jc19jaGFuZ2UgPSAxLAogCQl9LAogCX07CiAKQEAgLTEzNyw3ICsxMzcsNiBAQAogCQkJLnJ4X2J1ZiA9IHN0LT5yeCwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAotCQkJLmNzX2NoYW5nZSA9IDEsCiAJCX0sCiAJfTsKIApAQCAtMzc1LDcgKzM3NCw3IEBACiAJCWRldl9lcnIoZGV2LCAicHJvYmxlbSBzdGFydGluZyBzZWxmIHRlc3QiKTsKIAkJZ290byBlcnJfcmV0OwogCX0KLQorCW1zbGVlcChBRElTMTY0MDBfTVRFU1RfREVMQVkpOwogCWFkaXMxNjQwMF9jaGVja19zdGF0dXMoZGV2KTsKIAogZXJyX3JldDoKQEAgLTQ3MSwxMCArNDcwLDExIEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfcmV0OwogCi0JaWYgKHByb2RfaWQgIT0gQURJUzE2NDAwX1BST0RVQ1RfSURfREVGQVVMVCkKKwlpZiAoKHByb2RfaWQgJiAweEYwMDApICE9IEFESVMxNjQwMF9QUk9EVUNUX0lEX0RFRkFVTFQpCiAJCWRldl93YXJuKGRldiwgInVua25vd24gcHJvZHVjdCBpZCIpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiBwcm9kX2lkIDB4JTA0eCBhdCBDUyVkIChpcnEgJWQpXG4iLAorCisJZGV2X2luZm8oZGV2LCAiOiBwcm9kX2lkIDB4JTA0eCBhdCBDUyVkIChpcnEgJWQpXG4iLAogCQkJcHJvZF9pZCwgc3QtPnVzLT5jaGlwX3NlbGVjdCwgc3QtPnVzLT5pcnEpOwogCiAJLyogdXNlIGhpZ2ggc3BpIHNwZWVkIGlmIHBvc3NpYmxlICovCkBAIC00OTcsMTIgKzQ5NywxMiBAQAogCQkJX3JlZykKIAogc3RhdGljIEFESVMxNjQwMF9ERVZfQVRUUl9DQUxJQkJJQVMoR1lST19YLCBBRElTMTY0MDBfWEdZUk9fT0ZGKTsKLXN0YXRpYyBBRElTMTY0MDBfREVWX0FUVFJfQ0FMSUJCSUFTKEdZUk9fWSwgQURJUzE2NDAwX1hHWVJPX09GRik7Ci1zdGF0aWMgQURJUzE2NDAwX0RFVl9BVFRSX0NBTElCQklBUyhHWVJPX1osIEFESVMxNjQwMF9YR1lST19PRkYpOworc3RhdGljIEFESVMxNjQwMF9ERVZfQVRUUl9DQUxJQkJJQVMoR1lST19ZLCBBRElTMTY0MDBfWUdZUk9fT0ZGKTsKK3N0YXRpYyBBRElTMTY0MDBfREVWX0FUVFJfQ0FMSUJCSUFTKEdZUk9fWiwgQURJUzE2NDAwX1pHWVJPX09GRik7CiAKIHN0YXRpYyBBRElTMTY0MDBfREVWX0FUVFJfQ0FMSUJCSUFTKEFDQ0VMX1gsIEFESVMxNjQwMF9YQUNDTF9PRkYpOwotc3RhdGljIEFESVMxNjQwMF9ERVZfQVRUUl9DQUxJQkJJQVMoQUNDRUxfWSwgQURJUzE2NDAwX1hBQ0NMX09GRik7Ci1zdGF0aWMgQURJUzE2NDAwX0RFVl9BVFRSX0NBTElCQklBUyhBQ0NFTF9aLCBBRElTMTY0MDBfWEFDQ0xfT0ZGKTsKK3N0YXRpYyBBRElTMTY0MDBfREVWX0FUVFJfQ0FMSUJCSUFTKEFDQ0VMX1ksIEFESVMxNjQwMF9ZQUNDTF9PRkYpOworc3RhdGljIEFESVMxNjQwMF9ERVZfQVRUUl9DQUxJQkJJQVMoQUNDRUxfWiwgQURJUzE2NDAwX1pBQ0NMX09GRik7CiAKIAogc3RhdGljIElJT19ERVZfQVRUUl9JTl9OQU1FRF9SQVcoMCwgc3VwcGx5LCBhZGlzMTY0MDBfcmVhZF8xNGJpdF9zaWduZWQsCkBAIC02NDcsNyArNjQ3LDcgQEAKIAogCXJldCA9IGlpb19yaW5nX2J1ZmZlcl9yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nLCAwKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIHJpbmdcbiIpOworCQlkZXZfZXJyKCZzcGktPmRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIHRoZSByaW5nXG4iKTsKIAkJZ290byBlcnJvcl91bnJlZ19yaW5nX2Z1bmNzOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwX3JpbmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMF9yaW5nLmMKaW5kZXggMzMyOTNmYi4uZGEyOGNiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwX3JpbmcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfcmluZy5jCkBAIC0xMjIsMTIgKzEyMiwxMCBAQAogCQkJLnR4X2J1ZiA9IHN0LT50eCwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAotCQkJLmNzX2NoYW5nZSA9IDAsCiAJCX0sIHsKIAkJCS5yeF9idWYgPSByeCwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyNCwKLQkJCS5jc19jaGFuZ2UgPSAxLAogCQl9LAogCX07CiAKQEAgLTE2Miw5ICsxNjAsMTAgQEAKIAkJCSAgICAgICB3b3JrX3RyaWdnZXJfdG9fcmluZyk7CiAJc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyA9IHN0LT5pbmRpb19kZXYtPnJpbmc7CiAKLQlpbnQgaSA9IDA7CisJaW50IGkgPSAwLCBqOwogCXMxNiAqZGF0YTsKIAlzaXplX3QgZGF0YXNpemUgPSByaW5nLT5hY2Nlc3MuZ2V0X2J5dGVzX3Blcl9kYXR1bShyaW5nKTsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSByaW5nLT5zY2FuX21hc2s7CiAKIAlkYXRhID0ga21hbGxvYyhkYXRhc2l6ZSAsIEdGUF9LRVJORUwpOwogCWlmIChkYXRhID09IE5VTEwpIHsKQEAgLTE3NCw5ICsxNzMsMTIgQEAKIAogCWlmIChyaW5nLT5zY2FuX2NvdW50KQogCQlpZiAoYWRpczE2NDAwX3NwaV9yZWFkX2J1cnN0KCZzdC0+aW5kaW9fZGV2LT5kZXYsIHN0LT5yeCkgPj0gMCkKLQkJCWZvciAoOyBpIDwgcmluZy0+c2Nhbl9jb3VudDsgaSsrKQorCQkJZm9yICg7IGkgPCByaW5nLT5zY2FuX2NvdW50OyBpKyspIHsKKwkJCQlqID0gX19mZnMobWFzayk7CisJCQkJbWFzayAmPSB+KDEgPDwgaik7CiAJCQkJZGF0YVtpXQk9IGJlMTZfdG9fY3B1cCgKLQkJCQkJKF9fYmUxNiAqKSYoc3QtPnJ4W2kqMl0pKTsKKwkJCQkJKF9fYmUxNiAqKSYoc3QtPnJ4W2oqMl0pKTsKKwkJCX0KIAogCS8qIEd1YXJhbnRlZWQgdG8gYmUgYWxpZ25lZCB3aXRoIDggYnl0ZSBib3VuZGFyeSAqLwogCWlmIChyaW5nLT5zY2FuX3RpbWVzdGFtcCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYwppbmRleCBmM2JmMTExLi4xNzk1ZWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jCkBAIC0yNTgsNyArMjU4LDcgQEAKIAkJCQkJCQkgICAtPmRldF9ldmVudHMubGlzdCkpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJvcl9yZXQ7Ci0JCS8qIFNpbmdsZSBhY2Nlc3MgZGV2aWNlIHNvIG5vb25lIGVsc2UgY2FuIGdldCB0aGUgZGF0YSAqLworCQkvKiBTaW5nbGUgYWNjZXNzIGRldmljZSBzbyBubyBvbmUgZWxzZSBjYW4gZ2V0IHRoZSBkYXRhICovCiAJCW11dGV4X2xvY2soJmV2X2ludC0+ZXZlbnRfbGlzdF9sb2NrKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1My5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3NzUzLmgKaW5kZXggNzBkYWJhZS4uM2I5YzdmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3NzUzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3NzUzLmgKQEAgLTYyLDcgKzYyLDcgQEAKICAqIEB1czoJCQlhY3R1YWwgc3BpX2RldmljZQogICogQGluZGlvX2RldjoJCWluZHVzdHJpYWwgSS9PIGRldmljZSBzdHJ1Y3R1cmUKICAqIEB0eDoJCQl0cmFuc21pdCBidWZmZXIKLSAqIEByeDoJCQlyZWNpZXZlIGJ1ZmZlcgorICogQHJ4OgkJCXJlY2VpdmUgYnVmZmVyCiAgKiBAYnVmX2xvY2s6CQltdXRleCB0byBwcm90ZWN0IHR4IGFuZCByeAogICoqLwogc3RydWN0IGFkZTc3NTNfc3RhdGUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3NzU0LmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NTQuaAppbmRleCA4ZmFhOWIzLi4wYWEwNTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NTQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NTQuaApAQCAtODAsNyArODAsNyBAQAogICogQHVzOgkJCWFjdHVhbCBzcGlfZGV2aWNlCiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQogICogQHR4OgkJCXRyYW5zbWl0IGJ1ZmZlcgotICogQHJ4OgkJCXJlY2lldmUgYnVmZmVyCisgKiBAcng6CQkJcmVjZWl2ZSBidWZmZXIKICAqIEBidWZfbG9jazoJCW11dGV4IHRvIHByb3RlY3QgdHggYW5kIHJ4CiAgKiovCiBzdHJ1Y3QgYWRlNzc1NF9zdGF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NTguaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1OC5oCmluZGV4IGRmNWJiN2IuLmM2ZmQ5NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1OC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1OC5oCkBAIC05OCw3ICs5OCw3IEBACiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQogICogQHRyaWc6CQlkYXRhIHJlYWR5IHRyaWdnZXIgcmVnaXN0ZXJlZCB3aXRoIGlpbwogICogQHR4OgkJCXRyYW5zbWl0IGJ1ZmZlcgotICogQHJ4OgkJCXJlY2lldmUgYnVmZmVyCisgKiBAcng6CQkJcmVjZWl2ZSBidWZmZXIKICAqIEBidWZfbG9jazoJCW11dGV4IHRvIHByb3RlY3QgdHggYW5kIHJ4CiAgKiovCiBzdHJ1Y3QgYWRlNzc1OF9zdGF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL21ldGVyL2FkZTc3NTkuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1OS5oCmluZGV4IGU5ZDFjNDMuLmNjNzZjMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1OS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzc1OS5oCkBAIC00Myw3ICs0Myw3IEBACiAgKiBAdXM6CQkJYWN0dWFsIHNwaV9kZXZpY2UKICAqIEBpbmRpb19kZXY6CQlpbmR1c3RyaWFsIEkvTyBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAdHg6CQkJdHJhbnNtaXQgYnVmZmVyCi0gKiBAcng6CQkJcmVjaWV2ZSBidWZmZXIKKyAqIEByeDoJCQlyZWNlaXZlIGJ1ZmZlcgogICogQGJ1Zl9sb2NrOgkJbXV0ZXggdG8gcHJvdGVjdCB0eCBhbmQgcngKICAqKi8KIHN0cnVjdCBhZGU3NzU5X3N0YXRlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbWV0ZXIvYWRlNzg1NC5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3ODU0LmgKaW5kZXggNGFkODRhMy4uNzlhMjExMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3ODU0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9tZXRlci9hZGU3ODU0LmgKQEAgLTE0OSw3ICsxNDksNyBAQAogICogQHNwaToJCQlhY3R1YWwgc3BpX2RldmljZQogICogQGluZGlvX2RldjoJCWluZHVzdHJpYWwgSS9PIGRldmljZSBzdHJ1Y3R1cmUKICAqIEB0eDoJCQl0cmFuc21pdCBidWZmZXIKLSAqIEByeDoJCQlyZWNpZXZlIGJ1ZmZlcgorICogQHJ4OgkJCXJlY2VpdmUgYnVmZmVyCiAgKiBAYnVmX2xvY2s6CQltdXRleCB0byBwcm90ZWN0IHR4IGFuZCByeAogICoqLwogc3RydWN0IGFkZTc4NTRfc3RhdGUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX2dlbmVyaWMuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vcmluZ19nZW5lcmljLmgKaW5kZXggZjIxYWMwOS4uMzI5NDhlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX2dlbmVyaWMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3JpbmdfZ2VuZXJpYy5oCkBAIC0zMCw3ICszMCw3IEBACiAgKiBAZXZlbnRfY29kZToJCWV2ZW50IGluZGVudGlmaWNhdGlvbiBjb2RlCiAgKiBAdGltZXN0YW1wOgkJdGltZSBvZiBldmVudAogICoKLSAqIFR5cGljYWwgdXNlY2FzZSBpcyB0byBlc2NhbGF0ZSBhIDUwJSByaW5nIGZ1bGwgdG8gNzUlIGZ1bGwgaWYgbm9vbmUgaGFzIHlldAorICogVHlwaWNhbCB1c2VjYXNlIGlzIHRvIGVzY2FsYXRlIGEgNTAlIHJpbmcgZnVsbCB0byA3NSUgZnVsbCBpZiBubyBvbmUgaGFzIHlldAogICogcmVhZCB0aGUgZmlyc3QgZXZlbnQuIENsZWFybHkgdGhlIDUwJSBmdWxsIGlzIG5vIGxvbmdlciBvZiBpbnRlcmVzdCBpbgogICogdHlwaWNhbCB1c2UgY2FzZS4KICAqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvVE9ETwppbmRleCBhMjRlNWVkLi5jNzMzZDcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L1RPRE8KKysrIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9UT0RPCkBAIC0xLDcgKzEsNyBAQAogVE9ETwogLS0tLQogCi1HZXQgdGhlIG1lbXJhciBkcml2ZXIgY2xlYW5lZCB1cCBhbmQgdXBzdHJlYW0gKGRlcGVuZGFuY3kgYmxvY2tpbmcgU1NUKQorR2V0IHRoZSBtZW1yYXIgZHJpdmVyIGNsZWFuZWQgdXAgYW5kIHVwc3RyZWFtIChkZXBlbmRlbmN5IGJsb2NraW5nIFNTVCkKIFJlcGxhY2UgbG9uZy9zaG9ydCBwcmVzcyB3aXRoIHR3byB2aXJ0dWFsIGJ1dHRvbnMKIFJldmlldyB0aGUgcHJpbnRrcyBhbmQga2lsbCBvZmYgYW55IGxlZnQgb3ZlciBTVF9FUlI6IG1lc3NhZ2VzCiBSZXZpZXcgdGhlIG1pc2MgZGV2aWNlIGlvY3RscyBmb3IgMzIvNjRiaXQgc2FmZXR5IGFuZCBzYW5pdHkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0LmMgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdC5jCmluZGV4IGNlNGE5ZjcuLjgxYzI0ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3QuYwpAQCAtMjYzLDcgKzI2Myw3IEBACiAJLyogSW5pdCB0aGUgZGV2aWNlICovCiAJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKIAlpZiAocmV0KSB7Ci0JCXByX2VycigiZGV2aWNlIGNhbnQgYmUgZW5hYmxlZFxuIik7CisJCXByX2VycigiZGV2aWNlIGNhbid0IGJlIGVuYWJsZWRcbiIpOwogCQlnb3RvIGRvX2ZyZWVfbWVtOwogCX0KIAlzc3RfZHJ2X2N0eC0+cGNpID0gcGNpX2Rldl9nZXQocGNpKTsKQEAgLTQ1Myw3ICs0NTMsNyBAQAogCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7CiAJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKIAlpZiAocmV0KQotCQlwcl9lcnIoImRldmljZSBjYW50IGJlIGVuYWJsZWRcbiIpOworCQlwcl9lcnIoImRldmljZSBjYW4ndCBiZSBlbmFibGVkXG4iKTsKIAogCW11dGV4X2xvY2soJnNzdF9kcnZfY3R4LT5zc3RfbG9jayk7CiAJc3N0X2Rydl9jdHgtPnNzdF9zdGF0ZSA9IFNTVF9VTl9JTklUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3RfYXBwX2ludGVyZmFjZS5jIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3RfYXBwX2ludGVyZmFjZS5jCmluZGV4IGEzNjc5OTEuLjFkMDYyMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2FwcF9pbnRlcmZhY2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9hcHBfaW50ZXJmYWNlLmMKQEAgLTIzNiw3ICsyMzYsNyBAQAogCWlmICghc3N0X2Rydl9jdHgtPm1tYXBfbWVtKQogCQlyZXR1cm4gLUVJTzsKIAotCS8qIHJvdW5kIGl0IHVwIHRvIHRoZSBwYWdlIGJvbmRhcnkgICovCisJLyogcm91bmQgaXQgdXAgdG8gdGhlIHBhZ2UgYm91bmRhcnkgICovCiAJLyptZW1fYXJlYSA9ICh2b2lkICopKCgoKHVuc2lnbmVkIGxvbmcpc3N0X2Rydl9jdHgtPm1tYXBfbWVtKQogCQkJCSsgUEFHRV9TSVpFIC0gMSkgJiBQQUdFX01BU0spOyovCiAJbWVtX2FyZWEgPSAodm9pZCAqKSBQQUdFX0FMSUdOKCh1bnNpZ25lZCBpbnQpIHNzdF9kcnZfY3R4LT5tbWFwX21lbSk7CkBAIC04NzEsNyArODcxLDcgQEAKIH0KIAogLyoqCi0gKiBpbnRlbF9zc3RfaW9jdGxfZHNwIC0gcmVjaWV2ZXMgdGhlIGRldmljZSBpb2N0bCdzCisgKiBpbnRlbF9zc3RfaW9jdGxfZHNwIC0gcmVjZWl2ZXMgdGhlIGRldmljZSBpb2N0bCdzCiAgKgogICogQGNtZDpJb2N0bCBjbWQKICAqIEBhcmc6ZGF0YQpAQCAtMTA2Nyw3ICsxMDY3LDcgQEAKIAkJCXJldHZhbCA9IC1FRkFVTFQ7CiAJCQlicmVhazsKIAkJfQotCQlwcl9kZWJ1ZygiU0VUX1ZPTFVNRSByZWNpZXZlZCBmb3IgJWQhXG4iLAorCQlwcl9kZWJ1ZygiU0VUX1ZPTFVNRSByZWNlaXZlZCBmb3IgJWQhXG4iLAogCQkJCXNldF92b2wuc3RyZWFtX2lkKTsKIAkJaWYgKG1pbm9yID09IFNUUkVBTV9NT0RVTEUgJiYgc2V0X3ZvbC5zdHJlYW1faWQgPT0gMCkgewogCQkJcHJfZGVidWcoImludmFsaWQgb3BlcmF0aW9uIVxuIik7CkBAIC0xMDg1LDcgKzEwODUsNyBAQAogCQkJcmV0dmFsID0gLUVGQVVMVDsKIAkJCWJyZWFrOwogCQl9Ci0JCXByX2RlYnVnKCJJT0NUTF9HRVRfVk9MVU1FIHJlY2lldmVkIGZvciBzdHJlYW0gPSAlZCFcbiIsCisJCXByX2RlYnVnKCJJT0NUTF9HRVRfVk9MVU1FIHJlY2VpdmVkIGZvciBzdHJlYW0gPSAlZCFcbiIsCiAJCQkJZ2V0X3ZvbC5zdHJlYW1faWQpOwogCQlpZiAobWlub3IgPT0gU1RSRUFNX01PRFVMRSAmJiBnZXRfdm9sLnN0cmVhbV9pZCA9PSAwKSB7CiAJCQlwcl9kZWJ1ZygiaW52YWxpZCBvcGVyYXRpb24hXG4iKTsKQEAgLTExMTcsNyArMTExNyw3IEBACiAJCQlyZXR2YWwgPSAtRUZBVUxUOwogCQkJYnJlYWs7CiAJCX0KLQkJcHJfZGVidWcoIlNORFJWX1NTVF9TRVRfVk9MVU1FIHJlY2lldmVkIGZvciAlZCFcbiIsCisJCXByX2RlYnVnKCJTTkRSVl9TU1RfU0VUX1ZPTFVNRSByZWNlaXZlZCBmb3IgJWQhXG4iLAogCQkJc2V0X211dGUuc3RyZWFtX2lkKTsKIAkJaWYgKG1pbm9yID09IFNUUkVBTV9NT0RVTEUgJiYgc2V0X211dGUuc3RyZWFtX2lkID09IDApIHsKIAkJCXJldHZhbCA9IC1FUEVSTTsKQEAgLTExNTMsNyArMTE1Myw3IEBACiAJY2FzZSBfSU9DX05SKFNORFJWX1NTVF9NTUFQX0NBUFRVUkUpOiB7CiAJCXN0cnVjdCBzbmRfc3N0X21tYXBfYnVmZnMgbW1hcF9idWY7CiAKLQkJcHJfZGVidWcoIlNORFJWX1NTVF9NTUFQX1BMQVkvQ0FQVFVSRSByZWNpZXZlZCFcbiIpOworCQlwcl9kZWJ1ZygiU05EUlZfU1NUX01NQVBfUExBWS9DQVBUVVJFIHJlY2VpdmVkIVxuIik7CiAJCWlmIChtaW5vciAhPSBTVFJFQU1fTU9EVUxFKSB7CiAJCQlyZXR2YWwgPSAtRUJBRFJRQzsKIAkJCWJyZWFrOwpAQCAtMTIzOSw3ICsxMjM5LDcgQEAKIAljYXNlIF9JT0NfTlIoU05EUlZfU1NUX1NFVF9UQVJHRVRfREVWSUNFKTogewogCQlzdHJ1Y3Qgc25kX3NzdF90YXJnZXRfZGV2aWNlIHRhcmdldF9kZXZpY2U7CiAKLQkJcHJfZGVidWcoIlNFVF9UQVJHRVRfREVWSUNFIHJlY2lldmVkIVxuIik7CisJCXByX2RlYnVnKCJTRVRfVEFSR0VUX0RFVklDRSByZWNlaXZlZCFcbiIpOwogCQlpZiAoY29weV9mcm9tX3VzZXIoJnRhcmdldF9kZXZpY2UsICh2b2lkIF9fdXNlciAqKWFyZywKIAkJCQlzaXplb2YodGFyZ2V0X2RldmljZSkpKSB7CiAJCQlyZXR2YWwgPSAtRUZBVUxUOwpAQCAtMTI1Niw3ICsxMjU2LDcgQEAKIAljYXNlIF9JT0NfTlIoU05EUlZfU1NUX0RSSVZFUl9JTkZPKTogewogCQlzdHJ1Y3Qgc25kX3NzdF9kcml2ZXJfaW5mbyBpbmZvOwogCi0JCXByX2RlYnVnKCJTTkRSVl9TU1RfRFJJVkVSX0lORk8gcmVjaXZlZFxuIik7CisJCXByX2RlYnVnKCJTTkRSVl9TU1RfRFJJVkVSX0lORk8gcmVjZWl2ZWRcbiIpOwogCQlpbmZvLnZlcnNpb24gPSBTU1RfVkVSU0lPTl9OVU07CiAJCS8qIGhhcmQgY29kaW5nLCBzaHVkIGdldCBzdW1ob3cgbGF0ZXIgKi8KIAkJaW5mby5hY3RpdmVfcGNtX3N0cmVhbXMgPSBzc3RfZHJ2X2N0eC0+c3RyZWFtX2NudCAtCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9kcnZfaW50ZXJmYWNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9kcnZfaW50ZXJmYWNlLmMKaW5kZXggZWE4ZTI1MS4uZTljMTgyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3RfZHJ2X2ludGVyZmFjZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2Rydl9pbnRlcmZhY2UuYwpAQCAtMzE1LDcgKzMxNSw3IEBACiAJcG1fcnVudGltZV9nZXRfc3luYygmc3N0X2Rydl9jdHgtPnBjaS0+ZGV2KTsKIAogCWlmIChzc3RfZHJ2X2N0eC0+c3N0X3N0YXRlID09IFNTVF9TVVNQRU5ERUQpIHsKLQkJLyogTFBFIGlzIHN1c3BlbmRlZCwgcmVzdW1lIGl0IGJlZm9yZSBwcm9jZWRpbmcqLworCQkvKiBMUEUgaXMgc3VzcGVuZGVkLCByZXN1bWUgaXQgYmVmb3JlIHByb2NlZWRpbmcqLwogCQlwcl9kZWJ1ZygiUmVzdW1pbmcgZnJvbSBTdXNwZW5kZWQgc3RhdGVcbiIpOwogCQlyZXR2YWwgPSBpbnRlbF9zc3RfcmVzdW1lKHNzdF9kcnZfY3R4LT5wY2kpOwogCQlpZiAocmV0dmFsKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9kc3AuYyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2RzcC5jCmluZGV4IDZlNWM5MTUuLmJmZmU0YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2RzcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2RzcC5jCkBAIC0zNTAsNyArMzUwLDcgQEAKIAogfQogCi0vKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvZXIgZG93bmxvYWRpbmcgdGhlIGNvZGVjL3Bvc3Rwcm9jZXNzaW5nCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgZG93bmxvYWRpbmcgdGhlIGNvZGVjL3Bvc3Rwcm9jZXNzaW5nCiBsaWJyYXJ5IGlzIHNldCBmb3IgZG93bmxvYWQgdG8gU1NUIERTUCovCiBzdGF0aWMgaW50IHNzdF92YWxpZGF0ZV9saWJyYXJ5KGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfbGliLAogCQlzdHJ1Y3QgbGliX3Nsb3RfaW5mbyAqc2xvdCwKQEAgLTQwNSw3ICs0MDUsNyBAQAogCiB9CiAKLS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gRlcgcmVxdWVzdHMgZm9yIGEgcGFydGljdWxhciBsaWJhcnkgZG93bmxvYWQKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gRlcgcmVxdWVzdHMgZm9yIGEgcGFydGljdWxhciBsaWJyYXJ5IGRvd25sb2FkCiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIHRoZSBsaWJyYXJ5IHRvIGRvd25sb2FkKi8KIGludCBzc3RfbG9hZF9saWJyYXJ5KHN0cnVjdCBzbmRfc3N0X2xpYl9kb3dubG9hZCAqbGliLCB1OCBvcHMpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9md19pcGMuaCBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2Z3X2lwYy5oCmluZGV4IDhkZjMxM2QuLjBmMGM1YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2Z3X2lwYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X2Z3X2lwYy5oCkBAIC0xMTEsNyArMTExLDcgQEAKICNkZWZpbmUgSVBDX1NTVF9QRVJJT0RfRUxBUFNFRCAweDk3IC8qIHBlcmlvZCBlbGFwc2VkICovCiAjZGVmaW5lIElQQ19JQV9UQVJHRVRfREVWX0NITkdEIDB4OTggLyogZXJyb3IgaW4gcHJvY2Vzc2luZyBhIHN0cmVhbSAqLwogCi0jZGVmaW5lIElQQ19TU1RfRVJST1JfRVZFTlQgMHg5OSAvKiBCdWZmZXIgb3ZlciBydW4gb2NjdXJlZCAqLworI2RlZmluZSBJUENfU1NUX0VSUk9SX0VWRU5UIDB4OTkgLyogQnVmZmVyIG92ZXIgcnVuIG9jY3VycmVkICovCiAvKiBMMlMgbWVzc2FnZXMgKi8KICNkZWZpbmUgSVBDX1NDX0REUl9MSU5LX1VQIDB4QzAKICNkZWZpbmUgSVBDX1NDX0REUl9MSU5LX0RPV04gMHhDMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3Rfc3RyZWFtLmMgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9zdHJlYW0uYwppbmRleCA3OTVlNDJhLi5kZDU4YmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9zdHJlYW0uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9zdHJlYW0uYwpAQCAtOTgsNyArOTgsNyBAQAogCQlpZiAoc3N0X2Rydl9jdHgtPnN0cmVhbXNbaV0uc3RhdHVzID09IFNUUkVBTV9VTl9JTklUKQogCQkJcmV0dXJuIGk7CiAJfQotCXByX2RlYnVnKCJEaWRudCBmaW5kIGVtcHR5IHN0cmVhbSBmb3IgbXJzdFxuIik7CisJcHJfZGVidWcoIkRpZG4ndCBmaW5kIGVtcHR5IHN0cmVhbSBmb3IgbXJzdFxuIik7CiAJcmV0dXJuIC1FQlVTWTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3Rfc3RyZWFtX2VuY29kZWQuYyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxfc3N0X3N0cmVhbV9lbmNvZGVkLmMKaW5kZXggMjk3NTNjNy4uZDVmMDdiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbF9zc3Rfc3RyZWFtX2VuY29kZWQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsX3NzdF9zdHJlYW1fZW5jb2RlZC5jCkBAIC05MTQsNyArOTE0LDcgQEAKIAkJKHZvaWQgKikgKCh1bnNpZ25lZCBsb25nKSByYXJfYnVmZmVycy5idXNfYWRkcmVzcyk7CiAJCXByX2RlYnVnKCJSQVIgYnVmIGFkZHIgaW4gRG5SIChpbnB1dCBidWZmZXIgZnVuY3Rpb24pMHglbHUiLAogCQkJCSAodW5zaWduZWQgbG9uZykgc3RyX2luZm8tPmRlY29kZV9pYnVmKTsKLQkJcHJfZGVidWcoInJhciBpbiBEblIgZGVjb2RlIGZ1bnRpb24vb3V0cHV0IGJfYWRkIHJhciA9MHglbHUiLAorCQlwcl9kZWJ1ZygicmFyIGluIERuUiBkZWNvZGUgZnVuY3Rpb24vb3V0cHV0IGJfYWRkIHJhciA9MHglbHUiLAogCQkJCSh1bnNpZ25lZCBsb25nKSByYXJfYnVmZmVycy5idXNfYWRkcmVzcyk7CiAJCSppbnB1dF9pbmRleCA9IGkgKyAxOwogCQlzdHJfaW5mby0+ZGVjb2RlX2lzaXplID0gZGJ1ZnMtPmlidWZzLT5idWZmX2VudHJ5W2ldLnNpemU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkLmMgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkLmMKaW5kZXggZmIyMjkyMS4uZDIwNzYzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWQuYwpAQCAtNzczLDcgKzc3Myw3IEBACiAJCWlmIChyZXRfdmFsKQogCQkJcmV0dXJuIHJldF92YWw7CiAJCXNzdF9jYXJkX3ZlbmRvcl9pZCA9ICh2ZW5kb3JfYWRkci52YWx1ZSAmIChNQVNLMnxNQVNLMXxNQVNLMCkpOwotCQlwcl9kZWJ1Zygib3JnaW5hbCBuIGV4dHJhdGVkIHZlbmRvciBpZCA9IDB4JXggJWRcbiIsCisJCXByX2RlYnVnKCJvcmlnaW5hbCBuIGV4dHJhdGVkIHZlbmRvciBpZCA9IDB4JXggJWRcbiIsCiAJCQkJdmVuZG9yX2FkZHIudmFsdWUsIHNzdF9jYXJkX3ZlbmRvcl9pZCk7CiAJCWlmIChzc3RfY2FyZF92ZW5kb3JfaWQgPCAwIHx8IHNzdF9jYXJkX3ZlbmRvcl9pZCA+IDIpIHsKIAkJCXByX2VycigidmVuZG9yIGNhcmQgbm90IHN1cHBvcnRlZCEhXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWQuaCBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWQuaAppbmRleCBjYTg4MWI3Li5lNzdkYTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZC5oCkBAIC05MCw3ICs5MCw3IEBACiAgKiBAY2FyZF9pbmRleDogc291bmQgY2FyZCBpbmRleAogICogQGNhcmRfaWQ6IHNvdW5kIGNhcmQgaWQgZGV0ZWN0ZWQKICAqIEBzc3RkcnZfb3BzOiBwdHIgdG8gc3N0IGRyaXZlciBvcHMKLSAqIEBwZGV2OiBwdHIgdG8gcGxhdGZyb20gZGV2aWNlCisgKiBAcGRldjogcHRyIHRvIHBsYXRmb3JtIGRldmljZQogICogQGlycTogaW50ZXJydXB0IG51bWJlciBkZXRlY3RlZAogICogQHBtaWNfc3RhdHVzOiBEZXZpY2Ugc3RhdHVzIG9mIHNvdW5kIGNhcmQKICAqIEBpbnRfYmFzZTogcHRyIHRvIE1NSU8gaW50ZXJydXB0IHJlZ2lvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF92MV9jb250cm9sLmMgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX3YxX2NvbnRyb2wuYwppbmRleCA5Y2MxNWMxLi4xZWE4MTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX3YxX2NvbnRyb2wuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX3YxX2NvbnRyb2wuYwpAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAogCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8YXNtL21yc3QuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfdjJfY29udHJvbC5jIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF92Ml9jb250cm9sLmMKaW5kZXggMjZkODE1YS4uM2M2YjNhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF92Ml9jb250cm9sLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF92Ml9jb250cm9sLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKIAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgImludGVsX3NzdC5oIgogI2luY2x1ZGUgImludGVsbWlkX3NuZF9jb250cm9sLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcva2V1Y3IvaW5pdC5jIGIvZHJpdmVycy9zdGFnaW5nL2tldWNyL2luaXQuYwppbmRleCA1YzAxZjI4Li44YWY3Yzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcva2V1Y3IvaW5pdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9pbml0LmMKQEAgLTkwLDcgKzkwLDcgQEAKIAogCXJlc3VsdCA9IEVORV9TZW5kU2NzaUNtZCh1cywgRkRJUl9SRUFELCAmYnVmLCAwKTsKIAlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgewotCQlwcmludGsoS0VSTl9FUlIgIkV4ZWN0aW9uIE1TIEluaXQgQ29kZSBGYWlsICEhXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJFeGVjdXRpb24gTVMgSW5pdCBDb2RlIEZhaWwgISFcbiIpOwogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCX0KIApAQCAtMTQ1LDcgKzE0NSw3IEBACiAJcmVzdWx0ID0gRU5FX1NlbmRTY3NpQ21kKHVzLCBGRElSX1JFQUQsICZidWYsIDApOwogCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIkV4ZWN0aW9uIFNNIEluaXQgQ29kZSBGYWlsICEhIHJlc3VsdCA9ICV4XG4iLCByZXN1bHQpOworCQkgICAgICAgIkV4ZWN1dGlvbiBTTSBJbml0IENvZGUgRmFpbCAhISByZXN1bHQgPSAleFxuIiwgcmVzdWx0KTsKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zbWlsbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL2tldWNyL3NtaWxtYWluLmMKaW5kZXggMmNiZTlmOC4uOTVjNjg4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2tldWNyL3NtaWxtYWluLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2tldWNyL3NtaWxtYWluLmMKQEAgLTY0LDcgKzY0LDcgQEAKIGV4dGVybiBzdHJ1Y3QgQUREUkVTUyAgICBNZWRpYTsKIGV4dGVybiBzdHJ1Y3QgQ0lTX0FSRUEgICBDaXNBcmVhOwogCi0vL0JJVCBDb250cm9sbCBNYWNybworLy9CSVQgQ29udHJvbCBNYWNybwogQllURSBCaXREYXRhW10gPSB7IDB4MDEsMHgwMiwweDA0LDB4MDgsMHgxMCwweDIwLDB4NDAsMHg4MCB9IDsKICNkZWZpbmUgU2V0X0RfQml0KGEsYikgICAgKGFbKEJZVEUpKChiKS84KV18PSBCaXREYXRhWyhiKSU4XSkKICNkZWZpbmUgQ2xyX0RfQml0KGEsYikgICAgKGFbKEJZVEUpKChiKS84KV0mPX5CaXREYXRhWyhiKSU4XSkKQEAgLTc2LDcgKzc2LDcgQEAKIAogCiAvLwotLy8vL1Bvd2VyIENvbnRyb2xsICYgTWVkaWEgRXhpc3QgQ2hlY2sgRnVuY3Rpb24KKy8vLy9Qb3dlciBDb250cm9sICYgTWVkaWEgRXhpc3QgQ2hlY2sgRnVuY3Rpb24KIC8vLy8tLS0tLSBJbml0X0RfU21hcnRNZWRpYSgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvL2ludCBJbml0X0RfU21hcnRNZWRpYSh2b2lkKQogLy97CkBAIC01NzUsNyArNTc1LDcgQEAKIC8vICAgIHJldHVybihTVUNDRVNTKTsKIC8vfQogLy8KLS8vLy9Qb3dlciBDb250cm9sbCAmIE1lZGlhIEV4aXN0IENoZWNrIFN1YnJvdXRpbmUKKy8vLy9Qb3dlciBDb250cm9sICYgTWVkaWEgRXhpc3QgQ2hlY2sgU3Vicm91dGluZQogLy8vLy0tLS0tIEluaXRpYWxpemVfRF9NZWRpYSgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vdm9pZCBJbml0aWFsaXplX0RfTWVkaWEodm9pZCkKIC8vewpAQCAtNzM4LDcgKzczOCw3IEBACiAvLyAgICByZXR1cm4oU1VDQ0VTUyk7CiAvL30KICovCi0vL1NtYXJ0TWVkaWEgUGh5c2ljYWwgQWRkcmVzcyBDb250cm9sbCBTdWJyb3V0aW5lCisvL1NtYXJ0TWVkaWEgUGh5c2ljYWwgQWRkcmVzcyBDb250cm9sIFN1YnJvdXRpbmUKIC8vLS0tLS0gQ29udl9EX01lZGlhQWRkcigpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogaW50IENvbnZfRF9NZWRpYUFkZHIoc3RydWN0IHVzX2RhdGEgKnVzLCBEV09SRCBhZGRyKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2tldWNyL3NtaWxzdWIuYyBiL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zbWlsc3ViLmMKaW5kZXggODBkYTYxYy4uNGZlNDc0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2tldWNyL3NtaWxzdWIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcva2V1Y3Ivc21pbHN1Yi5jCkBAIC01Nyw3ICs1Nyw3IEBACiAjZGVmaW5lIE9ERCAgICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgLy8gT2RkIFBhZ2UgZm9yIDI1NmJ5dGUvcGFnZQogCiAKLS8vU21hcnRNZWRpYSBSZWR1bmRhbnQgYnVmZmVyIGRhdGEgQ29udHJvbGwgU3Vicm91dGluZQorLy9TbWFydE1lZGlhIFJlZHVuZGFudCBidWZmZXIgZGF0YSBDb250cm9sIFN1YnJvdXRpbmUKIC8vLS0tLS0gQ2hlY2tfRF9EYXRhQmxhbmsoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogaW50IENoZWNrX0RfRGF0YUJsYW5rKEJZVEUgKnJlZHVuZGFudCkKIHsKQEAgLTEzNjcsNyArMTM2Nyw3IEBACiAgICAgfQogfQogLyoKLS8vLy9TbWFydE1lZGlhIFBvd2VyIENvbnRyb2xsIFN1YnJvdXRpbmUKKy8vLy9TbWFydE1lZGlhIFBvd2VyIENvbnRyb2wgU3Vicm91dGluZQogLy8vLy0tLS0tIENudF9EX1Jlc2V0KCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy92b2lkIENudF9EX1Jlc2V0KHZvaWQpCiAvL3sKQEAgLTE0NzgsNyArMTQ3OCw3IEBACiAvL30KIC8vCiAqLwotLy9TbWFydE1lZGlhIEVDQyBDb250cm9sbCBTdWJyb3V0aW5lCisvL1NtYXJ0TWVkaWEgRUNDIENvbnRyb2wgU3Vicm91dGluZQogLy8tLS0tLSBDaGVja19EX1JlYWRFcnJvcigpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGludCBDaGVja19EX1JlYWRFcnJvcihCWVRFICpyZWR1bmRhbnQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX2VuZTAxMDAuaCBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfZW5lMDEwMC5oCmluZGV4IDc3NmI2OTMuLjA2YmViZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfZW5lMDEwMC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfZW5lMDEwMC5oCkBAIC04MSw3ICs4MSw3IEBACiAKIC8qIENJUiBibG9jayBzZXR0aW5ncyAqLwogI2RlZmluZSBFTkVfQ0lSX0NPTkYxCQkweEZFQzAKLSNkZWZpbmUgRU5FX0NJUl9DT05GMV9BRENfT04JMHg3CSAvKiByZWNpZXZlciBvbiBncGlvNDAgZW5hYmxlZCAqLworI2RlZmluZSBFTkVfQ0lSX0NPTkYxX0FEQ19PTgkweDcJIC8qIHJlY2VpdmVyIG9uIGdwaW80MCBlbmFibGVkICovCiAjZGVmaW5lIEVORV9DSVJfQ09ORjFfTEVBUk4xCSgxIDw8IDMpIC8qIGVuYWJsZWQgb24gbGVhcm5pbmcgbW9kZSAqLwogI2RlZmluZSBFTkVfQ0lSX0NPTkYxX1RYX09OCTB4MzAJIC8qIGVuYWJsZWQgb24gdHJhbnNtaXQgKi8KICNkZWZpbmUgRU5FX0NJUl9DT05GMV9UWF9DQVJSCSgxIDw8IDcpIC8qIHNlbmQgVFggY2FycmllciBvciBub3QgKi8KQEAgLTk2LDcgKzk2LDcgQEAKIAogLyogdHJhbnNtaXR0ZXIgLSBub3QgaW1wbGVtZW50ZWQgeWV0ICovCiAvKiBLQjM5MjZDIGFuZCBoaWdoZXIgKi8KLS8qIHRyYW5zbWlzc2lvbiBpcyB2ZXJ5IHNpbWlsaWFyIHRvIHJlY2lldmluZywgYSBieXRlIGlzIHdyaXR0ZW4gdG8gKi8KKy8qIHRyYW5zbWlzc2lvbiBpcyB2ZXJ5IHNpbWlsYXIgdG8gcmVjZWl2aW5nLCBhIGJ5dGUgaXMgd3JpdHRlbiB0byAqLwogLyogRU5FX1RYX0lOUFVULCBpbiBzYW1lIG1hbm5lciBhcyBpdCBpcyByZWFkIGZyb20gc2FtcGxlIGJ1ZmZlciAqLwogLyogc2FtcGxlIHBlcmlvZCBpcyBmaXhlZCovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZW1yYXIvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9tZW1yYXIvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JlZWJjNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1jb25maWcgTVJTVF9SQVJfSEFORExFUgotCXRyaXN0YXRlICJSQVIgaGFuZGxlciBkcml2ZXIgZm9yIEludGVsIE1vb3Jlc3Rvd24gcGxhdGZvcm0iCi0JZGVwZW5kcyBvbiBSQVJfUkVHSVNURVIKLQktLS1oZWxwLS0tCi0JICBUaGlzIGRyaXZlciBwcm92aWRlcyBhIG1lbW9yeSBtYW5hZ2VtZW50IGludGVyZmFjZSB0bwotCSAgcmVzdHJpY3RlZCBhY2Nlc3MgcmVnaW9ucyAoUkFSKSBhdmFpbGFibGUgb24gdGhlIEludGVsCi0JICBNb29yZXN0b3duIHBsYXRmb3JtLgotCi0JICBPbmNlIGxvY2tlZCBkb3duLCByZXN0cmljdGVkIGFjY2VzcyByZWdpb25zIGFyZSBvbmx5Ci0JICBhY2Nlc3NpYmxlIGJ5IHNwZWNpZmljIGhhcmR3YXJlIG9uIHRoZSBwbGF0Zm9ybS4gIFRoZSB4ODYKLQkgIENQVSBpcyB0eXBpY2FsbHkgbm90IG9uZSBvZiB0aG9zZSBwbGF0Zm9ybXMuICBBcyBzdWNoIHRoaXMKLQkgIGRyaXZlciBkb2VzIG5vdCBhY2Nlc3MgUkFSLCBhbmQgb25seSBwcm92aWRlcyBhIGJ1ZmZlcgotCSAgYWxsb2NhdGlvbi9ib29ra2VlcGluZyBtZWNoYW5pc20uCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL21lbXJhci9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTMzMzZjMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1vYmotJChDT05GSUdfTVJTVF9SQVJfSEFORExFUikJKz0gbWVtcmFyLm8KLW1lbXJhci15CQkJOj0gbWVtcmFyX2FsbG9jYXRvci5vIG1lbXJhcl9oYW5kbGVyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZW1yYXIvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9tZW1yYXIvVE9ETwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM1ZTA5Yi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL1RPRE8KKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi1SQVIgSGFuZGxlciAobWVtcmFyKSBEcml2ZXIgVE9ETyBJdGVtcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotTWFpbnRhaW5lcjogRXVnZW5lIEVwc2h0ZXluIDxldWdlbmUuZXBzaHRleW5AaW50ZWwuY29tPgotCi1tZW1yYXIuaAotLS0tLS0tLS0KLTEuIFRoaXMgaGVhZGVyIGV4cG9zZXMgdGhlIGRyaXZlcidzIHVzZXIgc3BhY2UgYW5kIGtlcm5lbCBzcGFjZQotICAgaW50ZXJmYWNlcy4gIEl0IHNob3VsZCBiZSBtb3ZlZCB0byA8bGludXgvcmFyL21lbXJhci5oPiwgb3IKLSAgIHNvbWV0aGluZyBhbG9uZyB0aG9zZSBsaW5lcywgd2hlbiB0aGlzIG1lbXJhciBkcml2ZXIgaXMgbW92ZWQgb3V0Ci0gICBvZiBgc3RhZ2luZycuCi0gICAgIGEuIEl0IHdvdWxkIGJlIGlkZWFsIGlmIHN0YWdpbmcvcmFyX3JlZ2lzdGVyL3Jhcl9yZWdpc3Rlci5oIHdhcwotICAgICAgICBtb3ZlZCB0byB0aGUgc2FtZSBkaXJlY3RvcnkuCi0KLW1lbXJhcl9hbGxvY2F0b3IuW2NoXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0xLiBBZGRyZXNzIHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIGlzc3VlcyB3aXRoIHRoZSBtZW1yYXJfYWxsb2NhdG9yLgotCi0yLiBIaWRlIHN0cnVjdCBtZW1yYXJfYWxsb2NhdG9yIGRldGFpbHMvZmllbGRzLiAgVGhleSBuZWVkIG5vdCBiZQotICAgZXhwb3NlZCB0byB0aGUgdXNlci4KLSAgICAgYS4gRm9yd2FyZCBkZWNsYXJlIHN0cnVjdCBtZW1yYXJfYWxsb2NhdG9yLgotICAgICBiLiBNb3ZlIGFsbCB0aHJlZSBzdHJ1Y3QgZGVmaW5pdGlvbnMgdG8gYG1lbXJhcl9hbGxvY2F0b3IuYycKLSAgICAgICAgc291cmNlIGZpbGUuCi0gICAgIGMuIEFkZCBhIG1lbXJhcl9hbGxvY2F0b3JfbGFyZ2VzdF9mcmVlX2FyZWEoKSBmdW5jdGlvbiwgb3IKLSAgICAgICAgc29tZXRoaW5nIGxpa2UgdGhhdCB0byBnZXQgYWNjZXNzIHRvIHRoZSB2YWx1ZSBvZiB0aGUgc3RydWN0Ci0gICAgICAgIG1lbXJhcl9hbGxvY2F0b3IgImxhcmdlc3RfZnJlZV9hcmVhIiBmaWVsZC4gIFRoaXMgYWxsb3dzIHRoZQotICAgICAgICBzdHJ1Y3QgbWVtcmFyX2FsbG9jYXRvciBmaWVsZHMgdG8gYmUgY29tcGxldGVseSBoaWRkZW4gZnJvbQotICAgICAgICB0aGUgdXNlci4gIFRoZSBtZW1yYXJfaGFuZGxlciBjb2RlIHJlYWxseSBvbmx5IG5lZWRzIHRoaXMgZm9yCi0gICAgICAgIHN0YXRpc3RpYyBnYXRoZXJpbmcgb24tZGVtYW5kLgotICAgICBkLiBEbyB0aGUgc2FtZSBmb3IgdGhlICJjYXBhY2l0eSIgZmllbGQgYXMgdGhlCi0gICAgICAgICJsYXJnZXN0X2ZyZWVfYXJlYSIgZmllbGQuCi0KLTMuIE1vdmUgbWVtcmFyX2FsbG9jYXRvci4qIHRvIGtlcm5lbCBgbGliJyBkaXJlY3Rvcnkgc2luY2UgaXQgaXMgSFcKLSAgIG5ldXRyYWwuCi0gICAgIGEuIEFsdGVybmF0aXZlbHksIHVzZSBsaWIvZ2VuYWxsb2MuYyBpbnN0ZWFkLgotICAgICBiLiBBIGtlcm5lbCBwb3J0IG9mIERvdWcgTGVhJ3MgbWFsbG9jKCkgaW1wbGVtZW50YXRpb24gbWF5IGFsc28KLSAgICAgICAgYmUgYW4gb3B0aW9uLgotCi1tZW1yYXJfaGFuZGxlci5jCi0tLS0tLS0tLS0tLS0tLS0tCi0xLiBTcGxpdCB1c2VyIHNwYWNlIGludGVyZmFjZSAoaW9jdGwgY29kZSkgZnJvbSBjb3JlL2tlcm5lbCBjb2RlLAotICAgZS5nLjoKLSAgICAgbWVtcmFyX2hhbmRsZXIuYyAtPiBtZW1yYXJfY29yZS5jLCBtZW1yYXJfdXNlci5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL21lbXJhci1hYmkgYi9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL21lbXJhci1hYmkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyM2ZjOTkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lbXJhci9tZW1yYXItYWJpCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotV2hhdDoJCS9kZXYvbWVtcmFyCi1EYXRlOgkJTWFyY2ggMjAxMAotS2VybmVsVmVyc2lvbjoJMi42LjM0Ci1Db250YWN0OglFdWdlbmUgRXBzaHRleW4gPGV1Z2VuZS5lcHNodGV5bkBpbnRlbC5jb20+Ci1EZXNjcmlwdGlvbjoJVGhlIEludGVsIE1vb3Jlc3Rvd24gUmVzdHJpY3RlZCBBY2Nlc3MgUmVnaW9uIChSQVIpCi0JCUhhbmRsZXIgZHJpdmVyIGV4cG9zZXMgYW4gaW9jdGwoKSBiYXNlZCBpbnRlcmZhY2UgdGhhdAotCQlhbGxvd3MgYSB1c2VyIHRvIHJlc2VydmUgYW5kIHJlbGVhc2UgYmxvY2tzIG9mIFJBUgotCQltZW1vcnkuCi0KLQkJTm90ZTogIEEgc3lzZnMgYmFzZWQgb25lIHdhcyBub3QgYXBwcm9wcmlhdGUgZm9yIHRoZQotCQlSQVIgaGFuZGxlcidzIHVzYWdlIG1vZGVsLgotCi0JCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCQkJCWlvY3RsKCkgUmVxdWVzdHMKLQkJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JCVJBUl9IQU5ETEVSX1JFU0VSVkUKLQkJLS0tLS0tLS0tLS0tLS0tLS0tLQotCQlEZXNjcmlwdGlvbjoJUmVzZXJ2ZSBSQVIgYmxvY2suCi0JCVR5cGU6CQlzdHJ1Y3QgUkFSX2Jsb2NrX2luZm8KLQkJRGlyZWN0aW9uOglpbi9vdXQKLQkJRXJyb3JzOgkJRUlOVkFMIChpbnZhbGlkIFJBUiB0eXBlIG9yIHNpemUpCi0JCQkJRU5PTUVNIChub3QgZW5vdWdoIFJBUiBtZW1vcnkpCi0KLQkJUkFSX0hBTkRMRVJfU1RBVAotCQktLS0tLS0tLS0tLS0tLS0tCi0JCURlc2NyaXB0aW9uOglHZXQgUkFSIHN0YXRpc3RpY3MuCi0JCVR5cGU6CQlzdHJ1Y3QgUkFSX3N0YXQKLQkJRGlyZWN0aW9uOglpbi9vdXQKLQkJRXJyb3JzOgkJRUlOVkFMIChpbnZhbGlkIFJBUiB0eXBlKQotCi0JCVJBUl9IQU5ETEVSX1JFTEVBU0UKLQkJLS0tLS0tLS0tLS0tLS0tLS0tLQotCQlEZXNjcmlwdGlvbjoJUmVsZWFzZSBwcmV2aW91c2x5IHJlc2VydmVkIFJBUiBibG9jay4KLQkJVHlwZToJCTMyIGJpdCB1bnNpZ25lZCBpbnRlZ2VyCi0JCQkJKGUuZy4gdWludDMyX3QpLCBpLmUgdGhlIFJBUiAiaGFuZGxlIi4KLQkJRGlyZWN0aW9uOglpbgotCQlFcnJvcnM6CQlFSU5WQUwgKGludmFsaWQgUkFSIGhhbmRsZSkKLQotCi0JCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCQkJaW9jdGwoKSBSZXF1ZXN0IFBhcmFtZXRlciBUeXBlcwotCQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQkJVGhlIHN0cnVjdHVyZXMgcmVmZXJyZWQgdG8gYWJvdmUgYXJlIGRlZmluZWQgYXMKLQkJZm9sbG93czoKLQotCQkvKioKLQkJICogc3RydWN0IFJBUl9ibG9ja19pbmZvIC0gdXNlciBzcGFjZSBzdHJ1Y3QgdGhhdAotCQkgKgkJCSAgIGRlc2NyaWJlcyBSQVIgYnVmZmVyCi0JCSAqIEB0eXBlOglUeXBlIG9mIFJBUiBtZW1vcnkgKGUuZy4sCi0JCSAqCQlSQVJfVFlQRV9WSURFTyBvciBSQVJfVFlQRV9BVURJTykgW2luXQotCQkgKiBAc2l6ZToJUmVxdWVzdGVkIHNpemUgb2YgYSBibG9jayBpbiBieXRlcyB0bwotCQkgKgkJYmUgcmVzZXJ2ZWQgaW4gUkFSLiBbaW5dCi0JCSAqIEBoYW5kbGU6CUhhbmRsZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlZmVyIHRvCi0JCSAqCQlyZXNlcnZlZCBibG9jay4gW291dF0KLQkJICoKLQkJICogVGhpcyBpcyB0aGUgYmFzaWMgc3RydWN0dXJlIGV4cG9zZWQgdG8gdGhlIHVzZXIKLQkJICogc3BhY2UgdGhhdCBkZXNjcmliZXMgYSBnaXZlbiBSQVIgYnVmZmVyLiAgSXQgdXNlZAotCQkgKiBhcyB0aGUgcGFyYW1ldGVyIGZvciB0aGUgUkFSX0hBTkRMRVJfUkVTRVJWRSBpb2N0bC4KLQkJICogVGhlIGJ1ZmZlcidzIHVuZGVybHlpbmcgYnVzIGFkZHJlc3MgaXMgbm90IGV4cG9zZWQKLQkJICogdG8gdGhlIHVzZXIuICBVc2VyIHNwYWNlIGNvZGUgcmVmZXJzIHRvIHRoZSBidWZmZXIKLQkJICogZW50aXJlbHkgYnkgImhhbmRsZSIuCi0JCSAqLwotCQlzdHJ1Y3QgUkFSX2Jsb2NrX2luZm8gewotCQkJX191MzIgdHlwZTsKLQkJCV9fdTMyIHNpemU7Ci0JCQlfX3UzMiBoYW5kbGU7Ci0JCX07Ci0KLQkJLyoqCi0JCSAqIHN0cnVjdCBSQVJfc3RhdCAtIFJBUiBzdGF0aXN0aWNzIHN0cnVjdHVyZQotCQkgKiBAdHlwZToJCVR5cGUgb2YgUkFSIG1lbW9yeSAoZS5nLiwKLQkJICoJCQlSQVJfVFlQRV9WSURFTyBvcgotCQkgKgkJCVJBUl9UWVBFX0FVRElPKSBbaW5dCi0JCSAqIEBjYXBhY2l0eToJCVRvdGFsIHNpemUgb2YgUkFSIG1lbW9yeQotCQkgKgkJCXJlZ2lvbi4gW291dF0KLQkJICogQGxhcmdlc3RfYmxvY2tfc2l6ZToJU2l6ZSBvZiB0aGUgbGFyZ2VzdCByZXNlcnZhYmxlCi0JCSAqCQkJYmxvY2suIFtvdXRdCi0JCSAqCi0JCSAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgZm9yIFJBUl9IQU5ETEVSX1NUQVQgaW9jdGwuCi0JCSAqLwotCQlzdHJ1Y3QgUkFSX3N0YXQgewotCQkJX191MzIgdHlwZTsKLQkJCV9fdTMyIGNhcGFjaXR5OwotCQkJX191MzIgbGFyZ2VzdF9ibG9ja19zaXplOwotCQl9OwotCi0JCUxhc3RseSwgdGhlIFJBUl9IQU5ETEVSX1JFTEVBU0UgaW9jdGwgZXhwZWN0cyBhCi0JCSJoYW5kbGUiIHRvIHRoZSBSQVIgYmxvY2sgb2YgbWVtb3J5LiAgSXQgaXMgYSAzMiBiaXQKLQkJdW5zaWduZWQgaW50ZWdlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZW1yYXIvbWVtcmFyLmggYi9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL21lbXJhci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmViNzNiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZW1yYXIvbWVtcmFyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAsMCBAQAotLyoKLSAqICAgICAgUkFSIEhhbmRsZXIgKC9kZXYvbWVtcmFyKSBpbnRlcm5hbCBkcml2ZXIgQVBJLgotICogICAgICBDb3B5cmlnaHQgKEMpIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbAotICogICAgICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKLSAqICAgICAgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAotICogICAgICB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiAgICAgIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0gKiAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqICAgICAgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgotICogICAgICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzCi0gKiAgICAgIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqLwotCi0KLSNpZm5kZWYgX01FTVJBUl9ICi0jZGVmaW5lIF9NRU1SQVJfSAotCi0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0KLS8qKgotICogc3RydWN0IFJBUl9zdGF0IC0gUkFSIHN0YXRpc3RpY3Mgc3RydWN0dXJlCi0gKiBAdHlwZToJCVR5cGUgb2YgUkFSIG1lbW9yeSAoZS5nLiwgYXVkaW8gdnMuIHZpZGVvKQotICogQGNhcGFjaXR5OgkJVG90YWwgc2l6ZSBvZiBSQVIgbWVtb3J5IHJlZ2lvbi4KLSAqIEBsYXJnZXN0X2Jsb2NrX3NpemU6CVNpemUgb2YgdGhlIGxhcmdlc3QgcmVzZXJ2YWJsZSBibG9jay4KLSAqCi0gKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGZvciBSQVJfSEFORExFUl9TVEFUIGlvY3RsIGFuZCBmb3IgdGhlCi0gKiBSQVJfZ2V0X3N0YXQoKSB1c2VyIHNwYWNlIHdyYXBwZXIgZnVuY3Rpb24uCi0gKi8KLXN0cnVjdCBSQVJfc3RhdCB7Ci0JX191MzIgdHlwZTsKLQlfX3UzMiBjYXBhY2l0eTsKLQlfX3UzMiBsYXJnZXN0X2Jsb2NrX3NpemU7Ci19OwotCi0KLS8qKgotICogc3RydWN0IFJBUl9ibG9ja19pbmZvIC0gdXNlciBzcGFjZSBzdHJ1Y3QgdGhhdCBkZXNjcmliZXMgUkFSIGJ1ZmZlcgotICogQHR5cGU6CVR5cGUgb2YgUkFSIG1lbW9yeSAoZS5nLiwgYXVkaW8gdnMuIHZpZGVvKQotICogQHNpemU6CVJlcXVlc3RlZCBzaXplIG9mIGEgYmxvY2sgdG8gYmUgcmVzZXJ2ZWQgaW4gUkFSLgotICogQGhhbmRsZToJSGFuZGxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVmZXIgdG8gcmVzZXJ2ZWQgYmxvY2suCi0gKgotICogVGhpcyBpcyB0aGUgYmFzaWMgc3RydWN0dXJlIGV4cG9zZWQgdG8gdGhlIHVzZXIgc3BhY2UgdGhhdAotICogZGVzY3JpYmVzIGEgZ2l2ZW4gUkFSIGJ1ZmZlci4gIFRoZSBidWZmZXIncyB1bmRlcmx5aW5nIGJ1cyBhZGRyZXNzCi0gKiBpcyBub3QgZXhwb3NlZCB0byB0aGUgdXNlci4gIFVzZXIgc3BhY2UgY29kZSByZWZlcnMgdG8gdGhlIGJ1ZmZlcgotICogZW50aXJlbHkgYnkgImhhbmRsZSIuCi0gKi8KLXN0cnVjdCBSQVJfYmxvY2tfaW5mbyB7Ci0JX191MzIgdHlwZTsKLQlfX3UzMiBzaXplOwotCV9fdTMyIGhhbmRsZTsKLX07Ci0KLQotI2RlZmluZSBSQVJfSU9DVExfQkFTRSAweEUwCi0KLS8qIFJlc2VydmUgUkFSIGJsb2NrLiAqLwotI2RlZmluZSBSQVJfSEFORExFUl9SRVNFUlZFIF9JT1dSKFJBUl9JT0NUTF9CQVNFLCAweDAwLCBzdHJ1Y3QgUkFSX2Jsb2NrX2luZm8pCi0KLS8qIFJlbGVhc2UgcHJldmlvdXNseSByZXNlcnZlZCBSQVIgYmxvY2suICovCi0jZGVmaW5lIFJBUl9IQU5ETEVSX1JFTEVBU0UgX0lPVyhSQVJfSU9DVExfQkFTRSwgMHgwMSwgX191MzIpCi0KLS8qIEdldCBSQVIgc3RhdHMuICovCi0jZGVmaW5lIFJBUl9IQU5ETEVSX1NUQVQgICAgX0lPV1IoUkFSX0lPQ1RMX0JBU0UsIDB4MDIsIHN0cnVjdCBSQVJfc3RhdCkKLQotCi0jaWZkZWYgX19LRVJORUxfXwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogICAgICAgICAgICAgICBLZXJuZWwgU2lkZSBSQVIgSGFuZGxlciBJbnRlcmZhY2UgICAgICAgICAgICAgICAgKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qKgotICogc3RydWN0IFJBUl9idWZmZXIgLSBrZXJuZWwgc3BhY2Ugc3RydWN0IHRoYXQgZGVzY3JpYmVzIFJBUiBidWZmZXIKLSAqIEBpbmZvOgkJc3RydWN0dXJlIGNvbnRhaW5pbmcgYmFzZSBSQVIgYnVmZmVyIGluZm9ybWF0aW9uCi0gKiBAYnVzX2FkZHJlc3M6CWJ1ZmZlciBidXMgYWRkcmVzcwotICoKLSAqIFN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIGFsbCBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGEgZ2l2ZW4gYmxvY2sgb2YKLSAqIG1lbW9yeSBpbiBSQVIuICBJdCBpcyBnZW5lcmFsbHkgb25seSB1c2VkIHdoZW4gcmV0cmlldmluZyBSQVIKLSAqIHJlbGF0ZWQgYnVzIGFkZHJlc3Nlcy4KLSAqCi0gKiBOb3RlOiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIG9ubHkgYnkgUkFSLWVuYWJsZWQgZHJpdmVycywgYW5kIGlzCi0gKiAgICAgICBub3QgaW50ZW5kZWQgdG8gYmUgZXhwb3NlZCB0byB0aGUgdXNlciBzcGFjZS4KLSAqLwotc3RydWN0IFJBUl9idWZmZXIgewotCXN0cnVjdCBSQVJfYmxvY2tfaW5mbyBpbmZvOwotCWRtYV9hZGRyX3QgYnVzX2FkZHJlc3M7Ci19OwotCi0jaWYgZGVmaW5lZChDT05GSUdfTVJTVF9SQVJfSEFORExFUikKLS8qKgotICogcmFyX3Jlc2VydmUoKSAtIHJlc2VydmUgUkFSIGJ1ZmZlcnMKLSAqIEBidWZmZXJzOglhcnJheSBvZiBSQVJfYnVmZmVycyB3aGVyZSB0eXBlIGFuZCBzaXplIG9mIGJ1ZmZlcnMgdG8KLSAqCQlyZXNlcnZlIGFyZSBwYXNzZWQgaW4sIGhhbmRsZSBhbmQgYnVzIGFkZHJlc3MgYXJlCi0gKgkJcGFzc2VkIG91dAotICogQGNvdW50OgludW1iZXIgb2YgUkFSX2J1ZmZlcnMgaW4gdGhlICJidWZmZXJzIiBhcnJheQotICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXNlcnZlIGJ1ZmZlcnMgaW4gdGhlIHJlc3RyaWN0ZWQgYWNjZXNzIHJlZ2lvbnMKLSAqIG9mIGdpdmVuIHR5cGVzLgotICoKLSAqIEl0IHJldHVybnMgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgcmVzZXJ2ZWQgYnVmZmVycy4gIFN1Y2Nlc3NmdWwKLSAqIGJ1ZmZlciByZXNlcnZhdGlvbnMgd2lsbCBoYXZlIHRoZSBjb3JyZXNwb25kaW5nIGJ1c19hZGRyZXNzIGZpZWxkCi0gKiBzZXQgdG8gYSBub24temVybyB2YWx1ZSBpbiB0aGUgZ2l2ZW4gYnVmZmVycyB2ZWN0b3IuCi0gKi8KLWV4dGVybiBzaXplX3QgcmFyX3Jlc2VydmUoc3RydWN0IFJBUl9idWZmZXIgKmJ1ZmZlcnMsCi0JCQkgIHNpemVfdCBjb3VudCk7Ci0KLS8qKgotICogcmFyX3JlbGVhc2UoKSAtIHJlbGVhc2UgUkFSIGJ1ZmZlcnMKLSAqIEBidWZmZXJzOglhcnJheSBvZiBSQVJfYnVmZmVycyB3aGVyZSBoYW5kbGVzIHRvIGJ1ZmZlcnMgdG8gYmUKLSAqCQlyZWxlYXNlZCBhcmUgcGFzc2VkIGluCi0gKiBAY291bnQ6CW51bWJlciBvZiBSQVJfYnVmZmVycyBpbiB0aGUgImJ1ZmZlcnMiIGFycmF5Ci0gKgotICogVGhpcyBmdW5jdGlvbiB3aWxsIHJlbGVhc2UgUkFSIGJ1ZmZlcnMgdGhhdCB3ZXJlIHJldHJpZXZlZCB0aHJvdWdoCi0gKiBhIGNhbGwgdG8gcmFyX3Jlc2VydmUoKSBvciByYXJfaGFuZGxlX3RvX2J1cygpIGJ5IGRlY3JlbWVudGluZyB0aGUKLSAqIHJlZmVyZW5jZSBjb3VudC4gIFRoZSBSQVIgYnVmZmVyIHdpbGwgYmUgcmVjbGFpbWVkIHdoZW4gdGhlCi0gKiByZWZlcmVuY2UgY291bnQgZHJvcHMgdG8gemVyby4KLSAqCi0gKiBJdCByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IHJlbGVhc2VkIGJ1ZmZlcnMuICBTdWNjZXNzZnVsCi0gKiByZWxlYXNlcyB3aWxsIGhhdmUgdGhlaXIgaGFuZGxlIGZpZWxkIHNldCB0byB6ZXJvIGluIHRoZSBnaXZlbgotICogYnVmZmVycyB2ZWN0b3IuCi0gKi8KLWV4dGVybiBzaXplX3QgcmFyX3JlbGVhc2Uoc3RydWN0IFJBUl9idWZmZXIgKmJ1ZmZlcnMsCi0JCQkgIHNpemVfdCBjb3VudCk7Ci0KLS8qKgotICogcmFyX2hhbmRsZV90b19idXMoKSAtIGNvbnZlcnQgYSB2ZWN0b3Igb2YgUkFSIGhhbmRsZXMgdG8gYnVzIGFkZHJlc3NlcwotICogQGJ1ZmZlcnM6CWFycmF5IG9mIFJBUl9idWZmZXJzIGNvbnRhaW5pbmcgaGFuZGxlcyB0byBiZQotICoJCWNvbnZlcnRlZCB0byBidXNfYWRkcmVzc2VzCi0gKiBAY291bnQ6CW51bWJlciBvZiBSQVJfYnVmZmVycyBpbiB0aGUgImJ1ZmZlcnMiIGFycmF5Ci0KLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXRyaWV2ZSB0aGUgUkFSIGJ1ZmZlciBidXMgYWRkcmVzc2VzLCB0eXBlIGFuZAotICogc2l6ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBSQVIgaGFuZGxlcyBwcm92aWRlZCBpbiB0aGUgYnVmZmVycwotICogdmVjdG9yLgotICoKLSAqIEl0IHJldHVybnMgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgY29udmVydGVkIGJ1ZmZlcnMuICBUaGUgYnVzCi0gKiBhZGRyZXNzIHdpbGwgYmUgc2V0IHRvIDAgZm9yIHVucmVjb2duaXplZCBoYW5kbGVzLgotICoKLSAqIFRoZSByZWZlcmVuY2UgY291bnQgZm9yIGVhY2ggY29ycmVzcG9uZGluZyBidWZmZXIgaW4gUkFSIHdpbGwgYmUKLSAqIGluY3JlbWVudGVkLiAgQ2FsbCByYXJfcmVsZWFzZSgpIHdoZW4gZG9uZSB3aXRoIHRoZSBidWZmZXJzLgotICovCi1leHRlcm4gc2l6ZV90IHJhcl9oYW5kbGVfdG9fYnVzKHN0cnVjdCBSQVJfYnVmZmVyICpidWZmZXJzLAotCQkJCXNpemVfdCBjb3VudCk7Ci0KLSNlbHNlCi0KLWV4dGVybiBpbmxpbmUgc2l6ZV90IHJhcl9yZXNlcnZlKHN0cnVjdCBSQVJfYnVmZmVyICpidWZmZXJzLCBzaXplX3QgY291bnQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLWV4dGVybiBpbmxpbmUgc2l6ZV90IHJhcl9yZWxlYXNlKHN0cnVjdCBSQVJfYnVmZmVyICpidWZmZXJzLCBzaXplX3QgY291bnQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLWV4dGVybiBpbmxpbmUgc2l6ZV90IHJhcl9oYW5kbGVfdG9fYnVzKHN0cnVjdCBSQVJfYnVmZmVyICpidWZmZXJzLAotCQkJCXNpemVfdCBjb3VudCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmICAvKiBNUlNUX1JBUl9IQU5ETEVSICovCi0jZW5kaWYgIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmICAvKiBfTUVNUkFSX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZW1yYXIvbWVtcmFyX2FsbG9jYXRvci5jIGIvZHJpdmVycy9zdGFnaW5nL21lbXJhci9tZW1yYXJfYWxsb2NhdG9yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0ZjhjNTguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lbXJhci9tZW1yYXJfYWxsb2NhdG9yLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MzIgKzAsMCBAQAotLyoKLSAqICAgICAgbWVtcmFyX2FsbG9jYXRvciAxLjA6ICBBbiBhbGxvY2F0b3IgZm9yIEludGVsIFJBUi4KLSAqCi0gKiAgICAgIENvcHlyaWdodCAoQykgMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsCi0gKiAgICAgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQotICogICAgICB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCi0gKiAgICAgIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqICAgICAgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiAgICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAqICAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogICAgICBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCi0gKiAgICAgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMKLSAqICAgICAgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgotICoKLSAqCi0gKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogICAgICBUaGlzIHNpbXBsZSBhbGxvY2F0b3IgaW1wbGVtZW50YXRpb24gcHJvdmlkZXMgYQotICogICAgICBtYWxsb2MoKS9mcmVlKCktbGlrZSBpbnRlcmZhY2UgZm9yIHJlc2VydmluZyBzcGFjZSB3aXRoaW4gYQotICogICAgICBwcmV2aW91c2x5IHJlc2VydmVkIGJsb2NrIG9mIG1lbW9yeS4gIEl0IGlzIG5vdCBzcGVjaWZpYyB0bwotICogICAgICBhbnkgaGFyZHdhcmUsIG5vciBpcyBpdCBjb3VwbGVkIHdpdGggdGhlIGxvd2VyIGxldmVsIHBhZ2luZwotICogICAgICBtZWNoYW5pc20uCi0gKgotICogICAgICBUaGUgcHJpbWFyeSBnb2FsIG9mIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgdG8gcHJvdmlkZSBhIG1lYW5zCi0gKiAgICAgIHRvIHBhcnRpdGlvbiBhbiBhcmJpdHJhcnkgYmxvY2sgb2YgbWVtb3J5IHdpdGhvdXQgYWN0dWFsbHkKLSAqICAgICAgYWNjZXNzaW5nIHRoZSBtZW1vcnkgb3IgaW5jdXJyaW5nIGFueSBoYXJkd2FyZSBzaWRlLWVmZmVjdHMKLSAqICAgICAgKGUuZy4gcGFnaW5nKS4gIEl0IGlzLCBpbiBlZmZlY3QsIGEgYm9va2tlZXBpbmcgbWVjaGFuaXNtIGZvcgotICogICAgICBidWZmZXJzLgotICovCi0KLQotI2luY2x1ZGUgIm1lbXJhcl9hbGxvY2F0b3IuaCIKLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvYnVnLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0KLQotc3RydWN0IG1lbXJhcl9hbGxvY2F0b3IgKm1lbXJhcl9jcmVhdGVfYWxsb2NhdG9yKHVuc2lnbmVkIGxvbmcgYmFzZSwKLQkJCQkJCSBzaXplX3QgY2FwYWNpdHksCi0JCQkJCQkgc2l6ZV90IGJsb2NrX3NpemUpCi17Ci0Jc3RydWN0IG1lbXJhcl9hbGxvY2F0b3IgKmFsbG9jYXRvciAgPSBOVUxMOwotCXN0cnVjdCBtZW1yYXJfYWRkcmVzc19yYW5nZXMgKmZpcnN0X25vZGUgPSBOVUxMOwotCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhlIGJhc2UgYWRkcmVzcyBpcyBhbGlnbmVkIG9uIGEgYmxvY2tfc2l6ZQotCSAqIGJvdW5kYXJ5LgotCSAqCi0JICogQHRvZG8gSXMgdGhpcyBuZWNlc3Nhcnk/Ci0JICovCi0JLyogYmFzZSA9IEFMSUdOKGJhc2UsIGJsb2NrX3NpemUpOyAqLwotCi0JLyogVmFsaWRhdGUgcGFyYW1ldGVycy4KLQkgKgotCSAqIE1ha2Ugc3VyZSB3ZSBjYW4gYWxsb2NhdGUgdGhlIGVudGlyZSBtZW1vcnkgc3BhY2UuICBaZXJvCi0JICogY2FwYWNpdHkgb3IgYmxvY2sgc2l6ZSBhcmUgb2J2aW91c2x5IGludmFsaWQuCi0JICovCi0JaWYgKGJhc2UgPT0gMAotCSAgICB8fCBjYXBhY2l0eSA9PSAwCi0JICAgIHx8IGJsb2NrX3NpemUgPT0gMAotCSAgICB8fCBVTE9OR19NQVggLSBjYXBhY2l0eSA8IGJhc2UKLQkgICAgfHwgY2FwYWNpdHkgPCBibG9ja19zaXplKQotCQlyZXR1cm4gYWxsb2NhdG9yOwotCi0JLyoKLQkgKiBUaGVyZSBpc24ndCBtdWNoIHBvaW50IGluIGNyZWF0aW5nIGEgbWVtb3J5IGFsbG9jYXRvciB0aGF0Ci0JICogaXMgb25seSBjYXBhYmxlIG9mIGhvbGRpbmcgb25lIGJsb2NrIGJ1dCB3ZSdsbCBhbGxvdyBpdCwKLQkgKiBhbmQgaXNzdWUgYSBkaWFnbm9zdGljLgotCSAqLwotCVdBUk4oY2FwYWNpdHkgPCBibG9ja19zaXplICogMiwKLQkgICAgICJtZW1yYXI6IE9ubHkgb25lIGJsb2NrIGF2YWlsYWJsZSB0byBhbGxvY2F0b3IuXG4iKTsKLQotCWFsbG9jYXRvciA9IGttYWxsb2Moc2l6ZW9mKCphbGxvY2F0b3IpLCBHRlBfS0VSTkVMKTsKLQotCWlmIChhbGxvY2F0b3IgPT0gTlVMTCkKLQkJcmV0dXJuIGFsbG9jYXRvcjsKLQotCW11dGV4X2luaXQoJmFsbG9jYXRvci0+bG9jayk7Ci0JYWxsb2NhdG9yLT5iYXNlID0gYmFzZTsKLQotCS8qIFJvdW5kIHRoZSBjYXBhY2l0eSBkb3duIHRvIGEgbXVsdGlwbGUgb2YgYmxvY2tfc2l6ZS4gKi8KLQlhbGxvY2F0b3ItPmNhcGFjaXR5ID0gKGNhcGFjaXR5IC8gYmxvY2tfc2l6ZSkgKiBibG9ja19zaXplOwotCi0JYWxsb2NhdG9yLT5ibG9ja19zaXplID0gYmxvY2tfc2l6ZTsKLQotCWFsbG9jYXRvci0+bGFyZ2VzdF9mcmVlX2FyZWEgPSBhbGxvY2F0b3ItPmNhcGFjaXR5OwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgaGFuZGxlIGFuZCBmcmVlIGxpc3RzLiAqLwotCUlOSVRfTElTVF9IRUFEKCZhbGxvY2F0b3ItPmFsbG9jYXRlZF9saXN0Lmxpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZhbGxvY2F0b3ItPmZyZWVfbGlzdC5saXN0KTsKLQotCWZpcnN0X25vZGUgPSBrbWFsbG9jKHNpemVvZigqZmlyc3Rfbm9kZSksIEdGUF9LRVJORUwpOwotCWlmIChmaXJzdF9ub2RlID09IE5VTEwpCXsKLQkJa2ZyZWUoYWxsb2NhdG9yKTsKLQkJYWxsb2NhdG9yID0gTlVMTDsKLQl9IGVsc2UgewotCQkvKiBGdWxsIHJhbmdlIG9mIGJsb2NrcyBpcyBhdmFpbGFibGUuICovCi0JCWZpcnN0X25vZGUtPnJhbmdlLmJlZ2luID0gYmFzZTsKLQkJZmlyc3Rfbm9kZS0+cmFuZ2UuZW5kICAgPSBiYXNlICsgYWxsb2NhdG9yLT5jYXBhY2l0eTsKLQkJbGlzdF9hZGQoJmZpcnN0X25vZGUtPmxpc3QsCi0JCQkgJmFsbG9jYXRvci0+ZnJlZV9saXN0Lmxpc3QpOwotCX0KLQotCXJldHVybiBhbGxvY2F0b3I7Ci19Ci0KLXZvaWQgbWVtcmFyX2Rlc3Ryb3lfYWxsb2NhdG9yKHN0cnVjdCBtZW1yYXJfYWxsb2NhdG9yICphbGxvY2F0b3IpCi17Ci0JLyoKLQkgKiBBc3N1bWUgdGhhdCB0aGUgbWVtb3J5IGFsbG9jYXRvciBsb2NrIGlzbid0IGhlbGQgYXQgdGhpcwotCSAqIHBvaW50IGluIHRpbWUuICBDYWxsZXIgbXVzdCBlbnN1cmUgdGhhdC4KLQkgKi8KLQotCXN0cnVjdCBtZW1yYXJfYWRkcmVzc19yYW5nZXMgKnBvcyA9IE5VTEw7Ci0Jc3RydWN0IG1lbXJhcl9hZGRyZXNzX3JhbmdlcyAqbiAgID0gTlVMTDsKLQotCWlmIChhbGxvY2F0b3IgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmYWxsb2NhdG9yLT5sb2NrKTsKLQotCS8qIFJlY2xhaW0gZnJlZSBsaXN0IHJlc291cmNlcy4gKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLAotCQkJCSBuLAotCQkJCSAmYWxsb2NhdG9yLT5mcmVlX2xpc3QubGlzdCwKLQkJCQkgbGlzdCkgewotCQlsaXN0X2RlbCgmcG9zLT5saXN0KTsKLQkJa2ZyZWUocG9zKTsKLQl9Ci0KLQltdXRleF91bmxvY2soJmFsbG9jYXRvci0+bG9jayk7Ci0KLQlrZnJlZShhbGxvY2F0b3IpOwotfQotCi11bnNpZ25lZCBsb25nIG1lbXJhcl9hbGxvY2F0b3JfYWxsb2Moc3RydWN0IG1lbXJhcl9hbGxvY2F0b3IgKmFsbG9jYXRvciwKLQkJCQkgICAgIHNpemVfdCBzaXplKQotewotCXN0cnVjdCBtZW1yYXJfYWRkcmVzc19yYW5nZXMgKnBvcyA9IE5VTEw7Ci0KLQlzaXplX3QgbnVtX2Jsb2NrczsKLQl1bnNpZ25lZCBsb25nIHJlc2VydmVkX2J5dGVzOwotCi0JLyoKLQkgKiBBZGRyZXNzIG9mIGFsbG9jYXRlZCBidWZmZXIuICBXZSBhc3N1bWUgdGhhdCB6ZXJvIGlzIG5vdCBhCi0JICogdmFsaWQgYWRkcmVzcy4KLQkgKi8KLQl1bnNpZ25lZCBsb25nIGFkZHIgPSAwOwotCi0JaWYgKGFsbG9jYXRvciA9PSBOVUxMIHx8IHNpemUgPT0gMCkKLQkJcmV0dXJuIGFkZHI7Ci0KLQkvKiBSZXNlcnZlIGVub3VnaCBibG9ja3MgdG8gaG9sZCB0aGUgYW1vdW50IG9mIGJ5dGVzIHJlcXVlc3RlZC4gKi8KLQludW1fYmxvY2tzID0gRElWX1JPVU5EX1VQKHNpemUsIGFsbG9jYXRvci0+YmxvY2tfc2l6ZSk7Ci0KLQlyZXNlcnZlZF9ieXRlcyA9IG51bV9ibG9ja3MgKiBhbGxvY2F0b3ItPmJsb2NrX3NpemU7Ci0KLQltdXRleF9sb2NrKCZhbGxvY2F0b3ItPmxvY2spOwotCi0JaWYgKHJlc2VydmVkX2J5dGVzID4gYWxsb2NhdG9yLT5sYXJnZXN0X2ZyZWVfYXJlYSkgewotCQltdXRleF91bmxvY2soJmFsbG9jYXRvci0+bG9jayk7Ci0JCXJldHVybiBhZGRyOwotCX0KLQotCS8qCi0JICogSXRlcmF0ZSB0aHJvdWdoIHRoZSBmcmVlIGxpc3QgdG8gZmluZCBhIHN1aXRhYmx5IHNpemVkCi0JICogcmFuZ2Ugb2YgZnJlZSBjb250aWd1b3VzIG1lbW9yeSBibG9ja3MuCi0JICoKLQkgKiBXZSBhbHNvIHRha2UgdGhlIG9wcG9ydHVuaXR5IHRvIHJlc2V0IHRoZSBzaXplIG9mIHRoZQotCSAqIGxhcmdlc3QgZnJlZSBhcmVhIHNpemUgc3RhdGlzdGljLgotCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmYWxsb2NhdG9yLT5mcmVlX2xpc3QubGlzdCwgbGlzdCkgewotCQlzdHJ1Y3QgbWVtcmFyX2FkZHJlc3NfcmFuZ2UgKiBjb25zdCBmciA9ICZwb3MtPnJhbmdlOwotCQlzaXplX3QgY29uc3QgY3Vycl9zaXplID0gZnItPmVuZCAtIGZyLT5iZWdpbjsKLQotCQlpZiAoY3Vycl9zaXplID49IHJlc2VydmVkX2J5dGVzICYmIGFkZHIgPT0gMCkgewotCQkJc3RydWN0IG1lbXJhcl9hZGRyZXNzX3JhbmdlICpyYW5nZSA9IE5VTEw7Ci0JCQlzdHJ1Y3QgbWVtcmFyX2FkZHJlc3NfcmFuZ2VzICogY29uc3QgbmV3X25vZGUgPQotCQkJCWttYWxsb2Moc2l6ZW9mKCpuZXdfbm9kZSksIEdGUF9LRVJORUwpOwotCi0JCQlpZiAobmV3X25vZGUgPT0gTlVMTCkKLQkJCQlicmVhazsKLQotCQkJbGlzdF9hZGQoJm5ld19ub2RlLT5saXN0LAotCQkJCSAmYWxsb2NhdG9yLT5hbGxvY2F0ZWRfbGlzdC5saXN0KTsKLQotCQkJLyoKLQkJCSAqIENhcnZlIG91dCBhcmVhIG9mIG1lbW9yeSBmcm9tIGVuZCBvZiBmcmVlCi0JCQkgKiByYW5nZS4KLQkJCSAqLwotCQkJcmFuZ2UgICAgICAgID0gJm5ld19ub2RlLT5yYW5nZTsKLQkJCXJhbmdlLT5lbmQgICA9IGZyLT5lbmQ7Ci0JCQlmci0+ZW5kICAgICAtPSByZXNlcnZlZF9ieXRlczsKLQkJCXJhbmdlLT5iZWdpbiA9IGZyLT5lbmQ7Ci0JCQlhZGRyICAgICAgICAgPSByYW5nZS0+YmVnaW47Ci0KLQkJCS8qCi0JCQkgKiBDaGVjayBpZiBsYXJnZXN0IGFyZWEgaGFzIGRlY3JlYXNlZCBpbgotCQkJICogc2l6ZS4gIFdlJ2xsIG5lZWQgdG8gY29udGludWUgc2Nhbm5pbmcgZm9yCi0JCQkgKiB0aGUgbmV4dCBsYXJnZXN0IGFyZWEgaWYgaXQgaGFzLgotCQkJICovCi0JCQlpZiAoY3Vycl9zaXplID09IGFsbG9jYXRvci0+bGFyZ2VzdF9mcmVlX2FyZWEpCi0JCQkJYWxsb2NhdG9yLT5sYXJnZXN0X2ZyZWVfYXJlYSAtPQotCQkJCQlyZXNlcnZlZF9ieXRlczsKLQkJCWVsc2UKLQkJCQlicmVhazsKLQkJfQotCi0JCS8qCi0JCSAqIFJlc2V0IGxhcmdlc3QgZnJlZSBhcmVhIHNpemUgc3RhdGlzdGljIGFzIG5lZWRlZCwKLQkJICogYnV0IG9ubHkgaWYgd2UndmUgYWN0dWFsbHkgYWxsb2NhdGVkIG1lbW9yeS4KLQkJICovCi0JCWlmIChhZGRyICE9IDAKLQkJICAgICYmIGN1cnJfc2l6ZSA+IGFsbG9jYXRvci0+bGFyZ2VzdF9mcmVlX2FyZWEpIHsKLQkJCWFsbG9jYXRvci0+bGFyZ2VzdF9mcmVlX2FyZWEgPSBjdXJyX3NpemU7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCW11dGV4X3VubG9jaygmYWxsb2NhdG9yLT5sb2NrKTsKLQotCXJldHVybiBhZGRyOwotfQotCi1sb25nIG1lbXJhcl9hbGxvY2F0b3JfZnJlZShzdHJ1Y3QgbWVtcmFyX2FsbG9jYXRvciAqYWxsb2NhdG9yLAotCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKnBvcyA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqdG1wID0gTlVMTDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpkc3QgPSBOVUxMOwotCi0Jc3RydWN0IG1lbXJhcl9hZGRyZXNzX3JhbmdlcyAgICAgICphbGxvY2F0ZWQgPSBOVUxMOwotCXN0cnVjdCBtZW1yYXJfYWRkcmVzc19yYW5nZSBjb25zdCAqaGFuZGxlICAgID0gTlVMTDsKLQotCXVuc2lnbmVkIGxvbmcgb2xkX2VuZCAgICAgICAgPSAwOwotCXVuc2lnbmVkIGxvbmcgbmV3X2NodW5rX3NpemUgPSAwOwotCi0JaWYgKGFsbG9jYXRvciA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChhZGRyID09IDApCi0JCXJldHVybiAwOyAgLyogSWdub3JlICJmcmVlKDApIi4gKi8KLQotCW11dGV4X2xvY2soJmFsbG9jYXRvci0+bG9jayk7Ci0KLQkvKiBGaW5kIHRoZSBjb3JyZXNwb25kaW5nIGhhbmRsZS4gKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFsbG9jYXRlZCwKLQkJCSAgICAmYWxsb2NhdG9yLT5hbGxvY2F0ZWRfbGlzdC5saXN0LAotCQkJICAgIGxpc3QpIHsKLQkJaWYgKGFsbG9jYXRlZC0+cmFuZ2UuYmVnaW4gPT0gYWRkcikgewotCQkJaGFuZGxlID0gJmFsbG9jYXRlZC0+cmFuZ2U7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qIE5vIHN1Y2ggYnVmZmVyIGNyZWF0ZWQgYnkgdGhpcyBhbGxvY2F0b3IuICovCi0JaWYgKGhhbmRsZSA9PSBOVUxMKSB7Ci0JCW11dGV4X3VubG9jaygmYWxsb2NhdG9yLT5sb2NrKTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JLyoKLQkgKiBDb2FsZXNjZSBhZGphY2VudCBjaHVua3Mgb2YgbWVtb3J5IGlmIHBvc3NpYmxlLgotCSAqCi0JICogQG5vdGUgVGhpcyBpc24ndCBmdWxsIGJsb3duIGNvYWxlc2Npbmcgc2luY2Ugd2UncmUgb25seQotCSAqICAgICAgIGNvYWxlc2NpbmcgYXQgbW9zdCB0aHJlZSBjaHVua3Mgb2YgbWVtb3J5LgotCSAqLwotCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgJmFsbG9jYXRvci0+ZnJlZV9saXN0Lmxpc3QpIHsKLQkJLyogQHRvZG8gTyhuKSBwZXJmb3JtYW5jZS4gIE9wdGltaXplLiAqLwotCi0JCXN0cnVjdCBtZW1yYXJfYWRkcmVzc19yYW5nZSAqIGNvbnN0IGNodW5rID0KLQkJCSZsaXN0X2VudHJ5KHBvcywKLQkJCQkgICAgc3RydWN0IG1lbXJhcl9hZGRyZXNzX3JhbmdlcywKLQkJCQkgICAgbGlzdCktPnJhbmdlOwotCi0JCS8qIEV4dGVuZCBzaXplIG9mIGV4aXN0aW5nIGZyZWUgYWRqYWNlbnQgY2h1bmsuICovCi0JCWlmIChjaHVuay0+ZW5kID09IGhhbmRsZS0+YmVnaW4pIHsKLQkJCS8qCi0JCQkgKiBDaHVuayAibGVzcyB0aGFuIiB0aGFuIHRoZSBvbmUgd2UncmUKLQkJCSAqIGZyZWVpbmcgaXMgYWRqYWNlbnQuCi0JCQkgKgotCQkJICogQmVmb3JlOgotCQkJICoKLQkJCSAqICAgKy0tLS0tKy0tLS0tLSsKLQkJCSAqICAgfGNodW5rfGhhbmRsZXwKLQkJCSAqICAgKy0tLS0tKy0tLS0tLSsKLQkJCSAqCi0JCQkgKiBBZnRlcjoKLQkJCSAqCi0JCQkgKiAgICstLS0tLS0tLS0tLS0rCi0JCQkgKiAgIHwgICBjaHVuayAgICB8Ci0JCQkgKiAgICstLS0tLS0tLS0tLS0rCi0JCQkgKi8KLQotCQkJc3RydWN0IG1lbXJhcl9hZGRyZXNzX3JhbmdlcyBjb25zdCAqIGNvbnN0IG5leHQgPQotCQkJCWxpc3RfZW50cnkocG9zLT5uZXh0LAotCQkJCQkgICBzdHJ1Y3QgbWVtcmFyX2FkZHJlc3NfcmFuZ2VzLAotCQkJCQkgICBsaXN0KTsKLQotCQkJY2h1bmstPmVuZCA9IGhhbmRsZS0+ZW5kOwotCi0JCQkvKgotCQkJICogTm93IGNoZWNrIGlmIG5leHQgZnJlZSBjaHVuayBpcyBhZGphY2VudCB0bwotCQkJICogdGhlIGN1cnJlbnQgZXh0ZW5kZWQgZnJlZSBjaHVuay4KLQkJCSAqCi0JCQkgKiBCZWZvcmU6Ci0JCQkgKgotCQkJICogICArLS0tLS0tLS0tLS0tKy0tLS0rCi0JCQkgKiAgIHwgICBjaHVuayAgICB8bmV4dHwKLQkJCSAqICAgKy0tLS0tLS0tLS0tLSstLS0tKwotCQkJICoKLQkJCSAqIEFmdGVyOgotCQkJICoKLQkJCSAqICAgKy0tLS0tLS0tLS0tLS0tLS0tKwotCQkJICogICB8ICAgICAgY2h1bmsgICAgICB8Ci0JCQkgKiAgICstLS0tLS0tLS0tLS0tLS0tLSsKLQkJCSAqLwotCQkJaWYgKCFsaXN0X2lzX3Npbmd1bGFyKHBvcykKLQkJCSAgICAmJiBjaHVuay0+ZW5kID09IG5leHQtPnJhbmdlLmJlZ2luKSB7Ci0JCQkJY2h1bmstPmVuZCA9IG5leHQtPnJhbmdlLmVuZDsKLQkJCQlsaXN0X2RlbChwb3MtPm5leHQpOwotCQkJCWtmcmVlKG5leHQpOwotCQkJfQotCi0JCQlsaXN0X2RlbCgmYWxsb2NhdGVkLT5saXN0KTsKLQotCQkJbmV3X2NodW5rX3NpemUgPSBjaHVuay0+ZW5kIC0gY2h1bmstPmJlZ2luOwotCi0JCQlnb3RvIGV4aXRfbWVtcmFyX2ZyZWU7Ci0KLQkJfSBlbHNlIGlmIChoYW5kbGUtPmVuZCA9PSBjaHVuay0+YmVnaW4pIHsKLQkJCS8qCi0JCQkgKiBDaHVuayAiZ3JlYXRlciB0aGFuIiB0aGFuIHRoZSBvbmUgd2UncmUKLQkJCSAqIGZyZWVpbmcgaXMgYWRqYWNlbnQuCi0JCQkgKgotCQkJICogICArLS0tLS0tKy0tLS0tKwotCQkJICogICB8aGFuZGxlfGNodW5rfAotCQkJICogICArLS0tLS0tKy0tLS0tKwotCQkJICoKLQkJCSAqIEFmdGVyOgotCQkJICoKLQkJCSAqICAgKy0tLS0tLS0tLS0tLSsKLQkJCSAqICAgfCAgIGNodW5rICAgIHwKLQkJCSAqICAgKy0tLS0tLS0tLS0tLSsKLQkJCSAqLwotCi0JCQlzdHJ1Y3QgbWVtcmFyX2FkZHJlc3NfcmFuZ2VzIGNvbnN0ICogY29uc3QgcHJldiA9Ci0JCQkJbGlzdF9lbnRyeShwb3MtPnByZXYsCi0JCQkJCSAgIHN0cnVjdCBtZW1yYXJfYWRkcmVzc19yYW5nZXMsCi0JCQkJCSAgIGxpc3QpOwotCi0JCQljaHVuay0+YmVnaW4gPSBoYW5kbGUtPmJlZ2luOwotCi0JCQkvKgotCQkJICogTm93IGNoZWNrIGlmIHByZXZpb3VzIGZyZWUgY2h1bmsgaXMKLQkJCSAqIGFkamFjZW50IHRvIHRoZSBjdXJyZW50IGV4dGVuZGVkIGZyZWUKLQkJCSAqIGNodW5rLgotCQkJICoKLQkJCSAqCi0JCQkgKiBCZWZvcmU6Ci0JCQkgKgotCQkJICogICArLS0tLSstLS0tLS0tLS0tLS0rCi0JCQkgKiAgIHxwcmV2fCAgIGNodW5rICAgIHwKLQkJCSAqICAgKy0tLS0rLS0tLS0tLS0tLS0tKwotCQkJICoKLQkJCSAqIEFmdGVyOgotCQkJICoKLQkJCSAqICAgKy0tLS0tLS0tLS0tLS0tLS0tKwotCQkJICogICB8ICAgICAgY2h1bmsgICAgICB8Ci0JCQkgKiAgICstLS0tLS0tLS0tLS0tLS0tLSsKLQkJCSAqLwotCQkJaWYgKCFsaXN0X2lzX3Npbmd1bGFyKHBvcykKLQkJCSAgICAmJiBwcmV2LT5yYW5nZS5lbmQgPT0gY2h1bmstPmJlZ2luKSB7Ci0JCQkJY2h1bmstPmJlZ2luID0gcHJldi0+cmFuZ2UuYmVnaW47Ci0JCQkJbGlzdF9kZWwocG9zLT5wcmV2KTsKLQkJCQlrZnJlZShwcmV2KTsKLQkJCX0KLQotCQkJbGlzdF9kZWwoJmFsbG9jYXRlZC0+bGlzdCk7Ci0KLQkJCW5ld19jaHVua19zaXplID0gY2h1bmstPmVuZCAtIGNodW5rLT5iZWdpbjsKLQotCQkJZ290byBleGl0X21lbXJhcl9mcmVlOwotCi0JCX0gZWxzZSBpZiAoY2h1bmstPmVuZCA8IGhhbmRsZS0+YmVnaW4KLQkJCSAgICYmIGNodW5rLT5lbmQgPiBvbGRfZW5kKSB7Ci0JCQkvKiBLZWVwIHRyYWNrIG9mIHdoZXJlIHRoZSBlbnRyeSBjb3VsZCBiZQotCQkJICogcG90ZW50aWFsbHkgbW92ZWQgZnJvbSB0aGUgImFsbG9jYXRlZCIgbGlzdAotCQkJICogdG8gdGhlICJmcmVlIiBsaXN0IGlmIGNvYWxlc2NpbmcgZG9lc24ndAotCQkJICogb2NjdXIsIG1ha2luZyBzdXJlIHRoZSAiZnJlZSIgbGlzdCByZW1haW5zCi0JCQkgKiBzb3J0ZWQuCi0JCQkgKi8KLQkJCW9sZF9lbmQgPSBjaHVuay0+ZW5kOwotCQkJZHN0ID0gcG9zOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBOb3RoaW5nIHRvIGNvYWxlc2NlLgotCSAqCi0JICogTW92ZSB0aGUgZW50cnkgZnJvbSB0aGUgImFsbG9jYXRlZCIgbGlzdCB0byB0aGUgImZyZWUiCi0JICogbGlzdC4KLQkgKi8KLQlsaXN0X21vdmUoJmFsbG9jYXRlZC0+bGlzdCwgZHN0KTsKLQluZXdfY2h1bmtfc2l6ZSA9IGhhbmRsZS0+ZW5kIC0gaGFuZGxlLT5iZWdpbjsKLQlhbGxvY2F0ZWQgPSBOVUxMOwotCi1leGl0X21lbXJhcl9mcmVlOgotCi0JaWYgKG5ld19jaHVua19zaXplID4gYWxsb2NhdG9yLT5sYXJnZXN0X2ZyZWVfYXJlYSkKLQkJYWxsb2NhdG9yLT5sYXJnZXN0X2ZyZWVfYXJlYSA9IG5ld19jaHVua19zaXplOwotCi0JbXV0ZXhfdW5sb2NrKCZhbGxvY2F0b3ItPmxvY2spOwotCi0Ja2ZyZWUoYWxsb2NhdGVkKTsKLQotCXJldHVybiAwOwotfQotCi0KLQotLyoKLSAgTG9jYWwgVmFyaWFibGVzOgotICAgIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICBFbmQ6Ci0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lbXJhci9tZW1yYXJfYWxsb2NhdG9yLmggYi9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL21lbXJhcl9hbGxvY2F0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI4MGRlYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL21lbXJhcl9hbGxvY2F0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKgotICogICAgICBDb3B5cmlnaHQgKEMpIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbAotICogICAgICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKLSAqICAgICAgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAotICogICAgICB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiAgICAgIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0gKiAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqICAgICAgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgotICogICAgICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzCi0gKiAgICAgIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KLSAqLwotCi0jaWZuZGVmIE1FTVJBUl9BTExPQ0FUT1JfSAotI2RlZmluZSBNRU1SQVJfQUxMT0NBVE9SX0gKLQotCi0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLQotCi0vKioKLSAqIHN0cnVjdCBtZW1yYXJfYWRkcmVzc19yYW5nZSAtIHN0cnVjdCB0aGF0IGRlc2NyaWJlcyBhIG1lbW9yeSByYW5nZQotICogQGJlZ2luOglCZWdpbm5pbmcgb2YgYXZhaWxhYmxlIGFkZHJlc3MgcmFuZ2UuCi0gKiBAZW5kOglFbmQgb2YgYXZhaWxhYmxlIGFkZHJlc3MgcmFuZ2UsIG9uZSBwYXN0IHRoZSBlbmQsCi0gKgkJaS5lLiBbYmVnaW4sIGVuZCkuCi0gKi8KLXN0cnVjdCBtZW1yYXJfYWRkcmVzc19yYW5nZSB7Ci0vKiBwcml2YXRlOiBpbnRlcm5hbCB1c2Ugb25seSAqLwotCXVuc2lnbmVkIGxvbmcgYmVnaW47Ci0JdW5zaWduZWQgbG9uZyBlbmQ7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBtZW1yYXJfYWRkcmVzc19yYW5nZXMgLSBsaXN0IG9mIGFyZWFzIG9mIG1lbW9yeS4KLSAqIEBsaXN0OglMaW5rZWQgbGlzdCBvZiBhZGRyZXNzIHJhbmdlcy4KLSAqIEByYW5nZToJTWVtb3J5IGFkZHJlc3MgcmFuZ2UgY29ycmVzcG9uZGluZyB0byBnaXZlbiBsaXN0IG5vZGUuCi0gKi8KLXN0cnVjdCBtZW1yYXJfYWRkcmVzc19yYW5nZXMgewotLyogcHJpdmF0ZTogaW50ZXJuYWwgdXNlIG9ubHkgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IG1lbXJhcl9hZGRyZXNzX3JhbmdlIHJhbmdlOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgbWVtcmFyX2FsbG9jYXRvciAtIGVuY2Fwc3VsYXRpb24gb2YgdGhlIG1lbW9yeSBhbGxvY2F0b3Igc3RhdGUKLSAqIEBsb2NrOgkJTG9jayB1c2VkIHRvIHN5bmNocm9uaXplIGFjY2VzcyB0byB0aGUgbWVtb3J5Ci0gKgkJCWFsbG9jYXRvciBzdGF0ZS4KLSAqIEBiYXNlOgkJQmFzZSAoc3RhcnQpIGFkZHJlc3Mgb2YgdGhlIGFsbG9jYXRvciBtZW1vcnkKLSAqCQkJc3BhY2UuCi0gKiBAY2FwYWNpdHk6CQlTaXplIG9mIHRoZSBhbGxvY2F0b3IgbWVtb3J5IHNwYWNlIGluIGJ5dGVzLgotICogQGJsb2NrX3NpemU6CQlUaGUgc2l6ZSBpbiBieXRlcyBvZiBpbmRpdmlkdWFsIGJsb2NrcyB3aXRoaW4KLSAqCQkJdGhlIGFsbG9jYXRvciBtZW1vcnkgc3BhY2UuCi0gKiBAbGFyZ2VzdF9mcmVlX2FyZWE6CUxhcmdlc3QgZnJlZSBhcmVhIG9mIG1lbW9yeSBpbiB0aGUgYWxsb2NhdG9yCi0gKgkJCWluIGJ5dGVzLgotICogQGFsbG9jYXRlZF9saXN0OglMaXN0IG9mIGFsbG9jYXRlZCBtZW1vcnkgYmxvY2sgYWRkcmVzcwotICoJCQlyYW5nZXMuCi0gKiBAZnJlZV9saXN0OgkJTGlzdCBvZiBmcmVlIGFkZHJlc3MgcmFuZ2VzLgotICoKLSAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGFsbCBtZW1vcnkgYWxsb2NhdG9yIHN0YXRlLCBpbmNsdWRpbmcgdGhlCi0gKiBiYXNlIGFkZHJlc3MsIGNhcGFjaXR5LCBmcmVlIGxpc3QsIGxvY2ssIGV0Yy4KLSAqLwotc3RydWN0IG1lbXJhcl9hbGxvY2F0b3IgewotLyogcHJpdmF0ZTogaW50ZXJuYWwgdXNlIG9ubHkgKi8KLQlzdHJ1Y3QgbXV0ZXggbG9jazsKLQl1bnNpZ25lZCBsb25nIGJhc2U7Ci0Jc2l6ZV90IGNhcGFjaXR5OwotCXNpemVfdCBibG9ja19zaXplOwotCXNpemVfdCBsYXJnZXN0X2ZyZWVfYXJlYTsKLQlzdHJ1Y3QgbWVtcmFyX2FkZHJlc3NfcmFuZ2VzIGFsbG9jYXRlZF9saXN0OwotCXN0cnVjdCBtZW1yYXJfYWRkcmVzc19yYW5nZXMgZnJlZV9saXN0OwotfTsKLQotLyoqCi0gKiBtZW1yYXJfY3JlYXRlX2FsbG9jYXRvcigpIC0gY3JlYXRlIGEgbWVtb3J5IGFsbG9jYXRvcgotICogQGJhc2U6CUFkZHJlc3MgYXQgd2hpY2ggdGhlIG1lbW9yeSBhbGxvY2F0b3IgYmVnaW5zLgotICogQGNhcGFjaXR5OglEZXNpcmVkIHNpemUgb2YgdGhlIG1lbW9yeSBhbGxvY2F0b3IuICBUaGlzIHZhbHVlIG11c3QKLSAqCQliZSBsYXJnZXIgdGhhbiB0aGUgYmxvY2tfc2l6ZSwgaWRlYWxseSBtb3JlIHRoYW4gdHdpY2UKLSAqCQlhcyBsYXJnZSBzaW5jZSB0aGVyZSB3b3VsZG4ndCBiZSBtdWNoIHBvaW50IGluIHVzaW5nIGEKLSAqCQltZW1vcnkgYWxsb2NhdG9yIG90aGVyd2lzZS4KLSAqIEBibG9ja19zaXplOglUaGUgc2l6ZSBvZiBpbmRpdmlkdWFsIGJsb2NrcyB3aXRoaW4gdGhlIG1lbW9yeQotICoJCWFsbG9jYXRvci4gIFRoaXMgdmFsdWUgbXVzdCBzbWFsbGVyIHRoYW4gdGhlCi0gKgkJY2FwYWNpdHkuCi0gKgotICogQ3JlYXRlIGEgbWVtb3J5IGFsbG9jYXRvciB3aXRoIHRoZSBnaXZlbiBjYXBhY2l0eSBhbmQgYmxvY2sgc2l6ZS4KLSAqIFRoZSBjYXBhY2l0eSB3aWxsIGJlIHJlZHVjZWQgdG8gYmUgYSBtdWx0aXBsZSBvZiB0aGUgYmxvY2sgc2l6ZSwgaWYKLSAqIG5lY2Vzc2FyeS4KLSAqCi0gKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSBtZW1vcnkgYWxsb2NhdG9yLCBpZiBjcmVhdGlvbiBzdWNjZWVkcywKLSAqIG90aGVyd2lzZSB6ZXJvIGlmIGNyZWF0aW9uIGZhaWxzLiAgRmFpbHVyZSBtYXkgb2NjdXIgaWYgbm90IGVub3VnaAotICoga2VybmVsIG1lbW9yeSBleGlzdHMgdG8gY3JlYXRlIHRoZSBtZW1yYXJfYWxsb2NhdG9yIGluc3RhbmNlCi0gKiBpdHNlbGYsIG9yIGlmIHRoZSBjYXBhY2l0eSBhbmQgYmxvY2tfc2l6ZSBhcmd1bWVudHMgYXJlIG5vdAotICogY29tcGF0aWJsZSBvciBtYWtlIHNlbnNlLgotICovCi1zdHJ1Y3QgbWVtcmFyX2FsbG9jYXRvciAqbWVtcmFyX2NyZWF0ZV9hbGxvY2F0b3IodW5zaWduZWQgbG9uZyBiYXNlLAotCQkJCQkJIHNpemVfdCBjYXBhY2l0eSwKLQkJCQkJCSBzaXplX3QgYmxvY2tfc2l6ZSk7Ci0KLS8qKgotICogbWVtcmFyX2Rlc3Ryb3lfYWxsb2NhdG9yKCkgLSBkZXN0cm95IGFsbG9jYXRvcgotICogQGFsbG9jYXRvcjoJVGhlIGFsbG9jYXRvciBiZWluZyBkZXN0cm95ZWQuCi0gKgotICogUmVjbGFpbSByZXNvdXJjZXMgaGVsZCBieSB0aGUgbWVtb3J5IGFsbG9jYXRvci4gIFRoZSBjYWxsZXIgbXVzdAotICogZXhwbGljaXRseSBmcmVlIGFsbCBtZW1vcnkgcmVzZXJ2ZWQgYnkgbWVtcmFyX2FsbG9jYXRvcl9hbGxvYygpCi0gKiBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uICBPdGhlcndpc2UgbGVha3Mgd2lsbCBvY2N1ci4KLSAqLwotdm9pZCBtZW1yYXJfZGVzdHJveV9hbGxvY2F0b3Ioc3RydWN0IG1lbXJhcl9hbGxvY2F0b3IgKmFsbG9jYXRvcik7Ci0KLS8qKgotICogbWVtcmFyX2FsbG9jYXRvcl9hbGxvYygpIC0gcmVzZXJ2ZSBhbiBhcmVhIG9mIG1lbW9yeSBvZiBnaXZlbiBzaXplCi0gKiBAYWxsb2NhdG9yOglUaGUgYWxsb2NhdG9yIGluc3RhbmNlIGJlaW5nIHVzZWQgdG8gcmVzZXJ2ZSBidWZmZXIuCi0gKiBAc2l6ZToJVGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGJ1ZmZlciB0byBhbGxvY2F0ZS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9ucyByZXNlcnZlcyBhbiBhcmVhIG9mIG1lbW9yeSBtYW5hZ2VkIGJ5IHRoZSBnaXZlbgotICogYWxsb2NhdG9yLiAgSXQgcmV0dXJucyB6ZXJvIGlmIGFsbG9jYXRpb24gd2FzIG5vdCBwb3NzaWJsZS4KLSAqIEZhaWx1cmUgbWF5IG9jY3VyIGlmIHRoZSBhbGxvY2F0b3Igbm8gbG9uZ2VyIGhhcyBzcGFjZSBhdmFpbGFibGUuCi0gKi8KLXVuc2lnbmVkIGxvbmcgbWVtcmFyX2FsbG9jYXRvcl9hbGxvYyhzdHJ1Y3QgbWVtcmFyX2FsbG9jYXRvciAqYWxsb2NhdG9yLAotCQkJCSAgICAgc2l6ZV90IHNpemUpOwotCi0vKioKLSAqIG1lbXJhcl9hbGxvY2F0b3JfZnJlZSgpIC0gcmVsZWFzZSBidWZmZXIgc3RhcnRpbmcgYXQgZ2l2ZW4gYWRkcmVzcwotICogQGFsbG9jYXRvcjoJVGhlIGFsbG9jYXRvciBpbnN0YW5jZSBiZWluZyB1c2VkIHRvIHJlbGVhc2UgdGhlIGJ1ZmZlci4KLSAqIEBhZGRyZXNzOglUaGUgYWRkcmVzcyBvZiB0aGUgYnVmZmVyIGJlaW5nIHJlbGVhc2VkLgotICoKLSAqIFJlbGVhc2UgYW4gYXJlYSBvZiBtZW1vcnkgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIGFkZHJlc3MuICBGYWlsdXJlCi0gKiBjb3VsZCBvY2N1ciBpZiB0aGUgZ2l2ZW4gYWRkcmVzcyBpcyBub3QgaW4gdGhlIGFkZHJlc3Mgc3BhY2UKLSAqIG1hbmFnZWQgYnkgdGhlIGFsbG9jYXRvci4gIFJldHVybnMgemVybyBvbiBzdWNjZXNzIG9yIGFuIGVycm5vCi0gKiAobmVnYXRpdmUgdmFsdWUpIG9uIGZhaWx1cmUuCi0gKi8KLWxvbmcgbWVtcmFyX2FsbG9jYXRvcl9mcmVlKHN0cnVjdCBtZW1yYXJfYWxsb2NhdG9yICphbGxvY2F0b3IsCi0JCQkgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwotCi0jZW5kaWYgIC8qIE1FTVJBUl9BTExPQ0FUT1JfSCAqLwotCi0KLS8qCi0gIExvY2FsIFZhcmlhYmxlczoKLSAgICBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAgRW5kOgotKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZW1yYXIvbWVtcmFyX2hhbmRsZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZW1yYXIvbWVtcmFyX2hhbmRsZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZjYWE4ZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL21lbXJhcl9oYW5kbGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDA3ICswLDAgQEAKLS8qCi0gKiAgICAgIG1lbXJhcl9oYW5kbGVyIDEuMDogIEFuIEludGVsIHJlc3RyaWN0ZWQgYWNjZXNzIHJlZ2lvbiBoYW5kbGVyIGRldmljZQotICoKLSAqICAgICAgQ29weXJpZ2h0IChDKSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwKLSAqICAgICAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCi0gKiAgICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKLSAqICAgICAgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogICAgICBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICogICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqICAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICogICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiAgICAgIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KLSAqICAgICAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcwotICogICAgICBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCi0gKgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqICAgICAgTW9vcmVzdG93biByZXN0cmljdGVkIGFjY2VzcyByZWdpb25zIChSQVIpIHByb3ZpZGUgaXNvbGF0ZWQKLSAqICAgICAgYXJlYXMgb2YgbWFpbiBtZW1vcnkgdGhhdCBhcmUgb25seSBhY2NlZXNzaWJsZSBieSBhdXRob3JpemVkCi0gKiAgICAgIGRldmljZXMuCi0gKgotICogICAgICBUaGUgSW50ZWwgTW9vcmVzdG93biBSQVIgaGFuZGxlciBtb2R1bGUgZXhwb3NlcyBhIGtlcm5lbCBzcGFjZQotICogICAgICBSQVIgbWVtb3J5IG1hbmFnZW1lbnQgbWVjaGFuaXNtLiAgSXQgaXMgZXNzZW50aWFsbHkgYQotICogICAgICBSQVItc3BlY2lmaWMgYWxsb2NhdG9yLgotICoKLSAqICAgICAgQmVzaWRlcyBwcm92aWRpbmcgUkFSIGJ1ZmZlciBtYW5hZ2VtZW50LCB0aGUgUkFSIGhhbmRsZXIgYWxzbwotICogICAgICBiZWhhdmVzIGluIG1hbnkgd2F5cyBsaWtlIGFuIE9TIHZpcnR1YWwgbWVtb3J5IG1hbmFnZXIuICBGb3IKLSAqICAgICAgZXhhbXBsZSwgdGhlIFJBUiAiaGFuZGxlcyIgY3JlYXRlZCBieSB0aGUgUkFSIGhhbmRsZXIgYXJlCi0gKiAgICAgIGFuYWxvZ291cyB0byB1c2VyIHNwYWNlIHZpcnR1YWwgYWRkcmVzc2VzLgotICoKLSAqICAgICAgUkFSIG1lbW9yeSBpdHNlbGYgaXMgbmV2ZXIgYWNjZXNzZWQgZGlyZWN0bHkgYnkgdGhlIFJBUgotICogICAgICBoYW5kbGVyLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgva3JlZi5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9yYXJfcmVnaXN0ZXIuaD4KLQotI2luY2x1ZGUgIm1lbXJhci5oIgotI2luY2x1ZGUgIm1lbXJhcl9hbGxvY2F0b3IuaCIKLQotCi0jZGVmaW5lIE1FTVJBUl9WRVIgIjEuMCIKLQotLyoKLSAqIE1vb3Jlc3Rvd24gc3VwcG9ydHMgdGhyZWUgcmVzdHJpY3RlZCBhY2Nlc3MgcmVnaW9ucy4KLSAqCi0gKiBXZSBvbmx5IGNhcmUgYWJvdXQgdGhlIGZpcnN0IHR3bywgdmlkZW8gYW5kIGF1ZGlvLiAgVGhlIHRoaXJkLAotICogcmVzZXJ2ZWQgZm9yIENoYWFiaSBhbmQgdGhlIFAtdW5pdCwgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZWlyCi0gKiByZXNwZWN0aXZlIGRyaXZlcnMuCi0gKi8KLSNkZWZpbmUgTVJTVF9OVU1fUkFSIDIKLQotLyogLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qKgotICogc3RydWN0IG1lbXJhcl9idWZmZXJfaW5mbyAtIHN0cnVjdCB0aGF0IGtlZXBzIHRyYWNrIG9mIGFsbCBSQVIgYnVmZmVycwotICogQGxpc3Q6CUxpbmtlZCBsaXN0IG9mIG1lbXJhcl9idWZmZXJfaW5mbyBvYmplY3RzLgotICogQGJ1ZmZlcjoJQ29yZSBSQVIgYnVmZmVyIGluZm9ybWF0aW9uLgotICogQHJlZmNvdW50OglSZWZlcmVuY2UgY291bnQuCi0gKiBAb3duZXI6CUZpbGUgaGFuZGxlIGNvcnJlc3BvbmRpbmcgdG8gcHJvY2VzcyB0aGF0IHJlc2VydmVkIHRoZQotICoJCWJsb2NrIG9mIG1lbW9yeSBpbiBSQVIuICBUaGlzIHdpbGwgYmUgemVybyBmb3IgYnVmZmVycwotICoJCWFsbG9jYXRlZCBieSBvdGhlciBkcml2ZXJzIGluc3RlYWQgb2YgYnkgYSB1c2VyIHNwYWNlCi0gKgkJcHJvY2Vzcy4KLSAqCi0gKiBUaGlzIHN0cnVjdHVyZSBlbmNhcHN1bGF0ZXMgYSBsaW5rIGxpc3Qgb2YgUkFSIGJ1ZmZlcnMsIGFzIHdlbGwgYXMKLSAqIG90aGVyIGNoYXJhY3RlcmlzdGljcyBzcGVjaWZpYyB0byBhIGdpdmVuIGxpc3Qgbm9kZSwgc3VjaCBhcyB0aGUKLSAqIHJlZmVyZW5jZSBjb3VudCBvbiB0aGUgY29ycmVzcG9uZGluZyBSQVIgYnVmZmVyLgotICovCi1zdHJ1Y3QgbWVtcmFyX2J1ZmZlcl9pbmZvIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IFJBUl9idWZmZXIgYnVmZmVyOwotCXN0cnVjdCBrcmVmIHJlZmNvdW50OwotCXN0cnVjdCBmaWxlICpvd25lcjsKLX07Ci0KLS8qKgotICogc3RydWN0IG1lbXJhcl9yYXJfaW5mbyAtIGNoYXJhY3RlcmlzdGljcyBvZiBhIGdpdmVuIFJBUgotICogQGJhc2U6CUJhc2UgYnVzIGFkZHJlc3Mgb2YgdGhlIFJBUi4KLSAqIEBsZW5ndGg6CUxlbmd0aCBvZiB0aGUgUkFSLgotICogQGlvYmFzZToJVmlydHVhbCBhZGRyZXNzIG9mIFJBUiBtYXBwZWQgaW50byBrZXJuZWwuCi0gKiBAYWxsb2NhdG9yOglBbGxvY2F0b3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBSQVIuICBOb3RlIHRoZSBhbGxvY2F0b3IKLSAqCQkiY2FwYWNpdHkiIG1heSBiZSBzbWFsbGVyIHRoYW4gdGhlIFJBUiBsZW5ndGggaWYgdGhlCi0gKgkJbGVuZ3RoIGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBjb25maWd1cmVkIGFsbG9jYXRvcgotICoJCWJsb2NrIHNpemUuCi0gKiBAYnVmZmVyczoJVGFibGUgdGhhdCBrZWVwcyB0cmFjayBvZiBhbGwgcmVzZXJ2ZWQgUkFSIGJ1ZmZlcnMuCi0gKiBAbG9jazoJTG9jayB1c2VkIHRvIHN5bmNocm9uaXplIGFjY2VzcyB0byBSQVItc3BlY2lmaWMgZGF0YQotICoJCXN0cnVjdHVyZXMuCi0gKgotICogRWFjaCBSQVIgaGFzIGFuIGFzc29jaWF0ZWQgbWVtcmFyX3Jhcl9pbmZvIHN0cnVjdHVyZSB0aGF0IGRlc2NyaWJlcwotICogd2hlcmUgaW4gbWVtb3J5IHRoZSBSQVIgaXMgbG9jYXRlZCwgaG93IGxhcmdlIGl0IGlzLCBhbmQgYSBsaXN0IG9mCi0gKiByZXNlcnZlZCBSQVIgYnVmZmVycyBpbnNpZGUgdGhhdCBSQVIuICBFYWNoIFJBUiBhbHNvIGhhcyBhIG11dGV4Ci0gKiBhc3NvY2lhdGVkIHdpdGggaXQgdG8gcmVkdWNlIGxvY2sgY29udGVudGlvbiB3aGVuIG9wZXJhdGlvbnMgb24KLSAqIG11bHRpcGxlIFJBUnMgYXJlIHBlcmZvcm1lZCBpbiBwYXJhbGxlbC4KLSAqLwotc3RydWN0IG1lbXJhcl9yYXJfaW5mbyB7Ci0JZG1hX2FkZHJfdCBiYXNlOwotCXVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotCXZvaWQgX19pb21lbSAqaW9iYXNlOwotCXN0cnVjdCBtZW1yYXJfYWxsb2NhdG9yICphbGxvY2F0b3I7Ci0Jc3RydWN0IG1lbXJhcl9idWZmZXJfaW5mbyBidWZmZXJzOwotCXN0cnVjdCBtdXRleCBsb2NrOwotCWludCBhbGxvY2F0ZWQ7CS8qIFRydWUgaWYgd2Ugb3duIHRoaXMgUkFSICovCi19OwotCi0vKgotICogQXJyYXkgb2YgUkFSIGNoYXJhY3RlcmlzdGljcy4KLSAqLwotc3RhdGljIHN0cnVjdCBtZW1yYXJfcmFyX2luZm8gbWVtcmFyc1tNUlNUX05VTV9SQVJdOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogVmFsaWRhdGUgUkFSIHR5cGUuICovCi1zdGF0aWMgaW5saW5lIGludCBtZW1yYXJfaXNfdmFsaWRfcmFyX3R5cGUodTMyIHR5cGUpCi17Ci0JcmV0dXJuIHR5cGUgPT0gUkFSX1RZUEVfVklERU8gfHwgdHlwZSA9PSBSQVJfVFlQRV9BVURJTzsKLX0KLQotLyogQ2hlY2sgaWYgYW4gYWRkcmVzcy9oYW5kbGUgZmFsbHMgd2l0aCB0aGUgZ2l2ZW4gUkFSIG1lbW9yeSByYW5nZS4gKi8KLXN0YXRpYyBpbmxpbmUgaW50IG1lbXJhcl9oYW5kbGVfaW5fcmFuZ2Uoc3RydWN0IG1lbXJhcl9yYXJfaW5mbyAqcmFyLAotCQkJCQkgdTMyIHZhZGRyKQotewotCXVuc2lnbmVkIGxvbmcgY29uc3QgaW9iYXNlID0gKHVuc2lnbmVkIGxvbmcpIChyYXItPmlvYmFzZSk7Ci0JcmV0dXJuICh2YWRkciA+PSBpb2Jhc2UgJiYgdmFkZHIgPCBpb2Jhc2UgKyByYXItPmxlbmd0aCk7Ci19Ci0KLS8qIFJldHJpZXZlIFJBUiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGhhbmRsZS4gKi8KLXN0YXRpYyBzdHJ1Y3QgbWVtcmFyX3Jhcl9pbmZvICptZW1yYXJfZ2V0X3Jhcl9pbmZvKHUzMiB2YWRkcikKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgTVJTVF9OVU1fUkFSOyArK2kpIHsKLQkJc3RydWN0IG1lbXJhcl9yYXJfaW5mbyAqIGNvbnN0IHJhciA9ICZtZW1yYXJzW2ldOwotCQlpZiAobWVtcmFyX2hhbmRsZV9pbl9yYW5nZShyYXIsIHZhZGRyKSkKLQkJCXJldHVybiByYXI7Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qKgotICoJbWVtcmFyX2dldF9idXMgYWRkcmVzcwkJLQloYW5kbGUgdG8gYnVzIGFkZHJlc3MKLSAqCi0gKglSZXRyaWV2ZSBidXMgYWRkcmVzcyBmcm9tIGdpdmVuIGhhbmRsZS4KLSAqCi0gKglSZXR1cm5zIGFkZHJlc3MgY29ycmVzcG9uZGluZyB0byBnaXZlbiBoYW5kbGUuICBaZXJvIGlmIGhhbmRsZSBpcwotICoJaW52YWxpZC4KLSAqLwotc3RhdGljIGRtYV9hZGRyX3QgbWVtcmFyX2dldF9idXNfYWRkcmVzcygKLQlzdHJ1Y3QgbWVtcmFyX3Jhcl9pbmZvICpyYXIsCi0JdTMyIHZhZGRyKQotewotCXVuc2lnbmVkIGxvbmcgY29uc3QgaW9iYXNlID0gKHVuc2lnbmVkIGxvbmcpIChyYXItPmlvYmFzZSk7Ci0KLQlpZiAoIW1lbXJhcl9oYW5kbGVfaW5fcmFuZ2UocmFyLCB2YWRkcikpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBBbiBhc3N1bXB0aW9uIGlzIG1hZGUgdGhhdCB0aGUgdmlydHVhbCBhZGRyZXNzIG9mZnNldCBpcwotCSAqIHRoZSBzYW1lIGFzIHRoZSBidXMgYWRkcmVzcyBvZmZzZXQsIGF0IGxlYXN0IGJhc2VkIG9uIHRoZQotCSAqIHdheSB0aGlzIGRyaXZlciBpcyBpbXBsZW1lbnRlZC4gIEZvciBleGFtcGxlLCB2YWRkciArIDIgPT0KLQkgKiBiYWRkciArIDIuCi0JICoKLQkgKiBAdG9kbyBJcyB0aGF0IGEgdmFsaWQgYXNzdW1wdGlvbj8KLQkgKi8KLQlyZXR1cm4gcmFyLT5iYXNlICsgKHZhZGRyIC0gaW9iYXNlKTsKLX0KLQotLyoqCi0gKgltZW1yYXJfZ2V0X3BoeXNpY2FsX2FkZHJlc3MJLQloYW5kbGUgdG8gcGh5c2ljYWwgYWRkcmVzcwotICoKLSAqCVJldHJpZXZlIHBoeXNpY2FsIGFkZHJlc3MgZnJvbSBnaXZlbiBoYW5kbGUuCi0gKgotICoJUmV0dXJucyBhZGRyZXNzIGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gaGFuZGxlLiAgWmVybyBpZiBoYW5kbGUgaXMKLSAqCWludmFsaWQuCi0gKi8KLXN0YXRpYyBkbWFfYWRkcl90IG1lbXJhcl9nZXRfcGh5c2ljYWxfYWRkcmVzcygKLQlzdHJ1Y3QgbWVtcmFyX3Jhcl9pbmZvICpyYXIsCi0JdTMyIHZhZGRyKQotewotCS8qCi0JICogQHRvZG8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIGJ1cyBhZGRyZXNzIGFuZCBwaHlzaWNhbAotCSAqICAgICAgIGFkZHJlc3MgYXJlIHRoZSBzYW1lLiAgVGhhdCBpcyB0cnVlIGZvciBNb29yZXN0b3duCi0JICogICAgICAgYnV0IG5vdCBuZWNlc3NhcmlseSBvbiBvdGhlciBwbGF0Zm9ybXMuICBUaGlzCi0JICogICAgICAgZGVmaWNpZW5jeSBzaG91bGQgYmUgYWRkcmVzc2VkIGF0IHNvbWUgcG9pbnQuCi0JICovCi0JcmV0dXJuIG1lbXJhcl9nZXRfYnVzX2FkZHJlc3MocmFyLCB2YWRkcik7Ci19Ci0KLS8qKgotICoJbWVtcmFyX3JlbGVhc2VfYmxvY2sJLQlyZWxlYXNlIGEgYmxvY2sgdG8gdGhlIHBvb2wKLSAqCUBrcmVmOiBrcmVmIG9mIGJsb2NrCi0gKgotICoJQ29yZSBibG9jayByZWxlYXNlIGNvZGUuIEEgbm9kZSBoYXMgaGl0IHplcm8gcmVmZXJlbmNlcyBzbyBjYW4KLSAqCWJlIHJlbGVhc2VkIGFuZCB0aGUgbGlzdHMgbXVzdCBiZSB1cGRhdGVkLgotICoKLSAqCU5vdGU6IFRoaXMgY29kZSByZW1vdmVzIHRoZSBub2RlIGZyb20gYSBsaXN0LiAgTWFrZSBzdXJlIGFueSBsaXN0Ci0gKglpdGVyYXRpb24gaXMgcGVyZm9ybWVkIHVzaW5nIGxpc3RfZm9yX2VhY2hfc2FmZSgpLgotICovCi1zdGF0aWMgdm9pZCBtZW1yYXJfcmVsZWFzZV9ibG9ja19pKHN0cnVjdCBrcmVmICpyZWYpCi17Ci0JLyoKLQkgKiBMYXN0IHJlZmVyZW5jZSBpcyBiZWluZyByZWxlYXNlZC4gIFJlbW92ZSBmcm9tIHRoZSB0YWJsZSwKLQkgKiBhbmQgcmVjbGFpbSByZXNvdXJjZXMuCi0JICovCi0KLQlzdHJ1Y3QgbWVtcmFyX2J1ZmZlcl9pbmZvICogY29uc3Qgbm9kZSA9Ci0JCWNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBtZW1yYXJfYnVmZmVyX2luZm8sIHJlZmNvdW50KTsKLQotCXN0cnVjdCBSQVJfYmxvY2tfaW5mbyAqIGNvbnN0IHVzZXJfaW5mbyA9Ci0JCSZub2RlLT5idWZmZXIuaW5mbzsKLQotCXN0cnVjdCBtZW1yYXJfYWxsb2NhdG9yICogY29uc3QgYWxsb2NhdG9yID0KLQkJbWVtcmFyc1t1c2VyX2luZm8tPnR5cGVdLmFsbG9jYXRvcjsKLQotCWxpc3RfZGVsKCZub2RlLT5saXN0KTsKLQotCW1lbXJhcl9hbGxvY2F0b3JfZnJlZShhbGxvY2F0b3IsIHVzZXJfaW5mby0+aGFuZGxlKTsKLQotCWtmcmVlKG5vZGUpOwotfQotCi0vKioKLSAqCW1lbXJhcl9pbml0X3Jhcl9yZXNvdXJjZXMJLQljb25maWd1cmUgYSBSQVIKLSAqCUByYXJudW06IHJhciB0aGF0IGhhcyBiZWVuIGFsbG9jYXRlZAotICoJQGRldm5hbWU6IG5hbWUgb2Ygb3VyIGRldmljZQotICoKLSAqCUluaXRpYWxpemUgUkFSIHBhcmFtZXRlcnMsIHN1Y2ggYXMgYnVzIGFkZHJlc3NlcywgZXRjIGFuZCBtYWtlCi0gKgl0aGUgcmVzb3VyY2UgYWNjZXNzaWJsZS4KLSAqLwotc3RhdGljIGludCBtZW1yYXJfaW5pdF9yYXJfcmVzb3VyY2VzKGludCByYXJudW0sIGNoYXIgY29uc3QgKmRldm5hbWUpCi17Ci0JLyogLS0tLSBTYW5pdHkgQ2hlY2tzIC0tLS0KLQkgKiAxLiBSQVIgYnVzIGFkZHJlc3NlcyBpbiBib3RoIExpbmNyb2Z0IGFuZCBMYW5nd2VsbCBSQVIKLQkgKiAgICByZWdpc3RlcnMgc2hvdWxkIGJlIHRoZSBzYW1lLgotCSAqICAgIGEuIFRoZXJlJ3Mgbm8gd2F5IHdlIGNhbiBkbyB0aGlzIHRocm91Z2ggSUEuCi0JICoKLQkgKiAyLiBTZWN1cmUgZGV2aWNlIElEIGluIExhbmd3ZWxsIFJBUiByZWdpc3RlcnMgc2hvdWxkIGJlIHNldAotCSAqICAgIGFwcHJvcHJpYXRlbHksIGUuZy4gb25seSBMUEUgRE1BIGZvciB0aGUgYXVkaW8gUkFSLCBhbmQKLQkgKiAgICBzZWN1cml0eSBmb3IgdGhlIG90aGVyIExhbmd3ZWxsIGJhc2VkIFJBUiByZWdpc3RlcnMuCi0JICogICAgYS4gVGhlcmUncyBubyB3YXkgd2UgY2FuIGRvIHRoaXMgdGhyb3VnaCBJQS4KLQkgKgotCSAqIDMuIEF1ZGlvIGFuZCB2aWRlbyBSQVIgcmVnaXN0ZXJzIGFuZCBSQVIgYWNjZXNzIHNob3VsZCBiZQotCSAqICAgIGxvY2tlZCBkb3duLiAgSWYgbm90LCBlbmFibGUgUkFSIGFjY2VzcyBjb250cm9sLiAgRXhjZXB0Ci0JICogICAgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcywgdGhlcmUgaXMgbm8gcmVhc29uIGZvciB0aGVtIHRvCi0JICogICAgYmUgdW5sb2NrZWQuCi0JICogICAgYS4gIFdlIGNhbiBvbmx5IGRvIHRoaXMgZm9yIHRoZSBMaW5jcm9mdCAoSUEpIHNpZGUuCi0JICoKLQkgKiBAdG9kbyBTaG91bGQgdGhlIFJBUiBoYW5kbGVyIGRyaXZlciBldmVuIGJlIGF3YXJlIG9mIGF1ZGlvCi0JICogICAgICAgYW5kIHZpZGVvIFJBUiBzZXR0aW5ncz8KLQkgKi8KLQotCS8qCi0JICogUkFSIGJ1ZmZlciBibG9jayBzaXplLgotCSAqCi0JICogV2UgY2hvb3NlIGl0IHRvIGJlIHRoZSBzaXplIG9mIGEgcGFnZSB0byBzaW1wbGlmeSB0aGUKLQkgKiAvZGV2L21lbXJhciBtbWFwKCkgaW1wbGVtZW50YXRpb24gYW5kIHVzYWdlLiAgT3RoZXJ3aXNlCi0JICogcGFnaW5nIGlzIG5vdCBpbnZvbHZlZCBvbmNlIGFuIFJBUiBpcyBsb2NrZWQgZG93bi4KLQkgKi8KLQlzdGF0aWMgc2l6ZV90IGNvbnN0IFJBUl9CTE9DS19TSVpFID0gUEFHRV9TSVpFOwotCi0JZG1hX2FkZHJfdCBsb3csIGhpZ2g7Ci0Jc3RydWN0IG1lbXJhcl9yYXJfaW5mbyAqIGNvbnN0IHJhciA9ICZtZW1yYXJzW3Jhcm51bV07Ci0KLQlCVUdfT04oTVJTVF9OVU1fUkFSICE9IEFSUkFZX1NJWkUobWVtcmFycykpOwotCUJVR19PTighbWVtcmFyX2lzX3ZhbGlkX3Jhcl90eXBlKHJhcm51bSkpOwotCUJVR19PTihyYXItPmFsbG9jYXRlZCk7Ci0KLQlpZiAocmFyX2dldF9hZGRyZXNzKHJhcm51bSwgJmxvdywgJmhpZ2gpICE9IDApCi0JCS8qIE5vIFJBUiBpcyBhdmFpbGFibGUuICovCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKGxvdyA9PSAwIHx8IGhpZ2ggPT0gMCkgewotCQlyYXItPmJhc2UgICAgICA9IDA7Ci0JCXJhci0+bGVuZ3RoICAgID0gMDsKLQkJcmFyLT5pb2Jhc2UgICAgPSBOVUxMOwotCQlyYXItPmFsbG9jYXRvciA9IE5VTEw7Ci0JCXJldHVybiAtRU5PU1BDOwotCX0KLQotCS8qCi0JICogQHRvZG8gVmVyaWZ5IHRoYXQgTE5DIGFuZCBMTlcgUkFSIHJlZ2lzdGVyIGNvbnRlbnRzCi0JICogICAgICAgYWRkcmVzc2VzLCBzZWN1cml0eSwgZXRjIGFyZSBjb21wYXRpYmxlIGFuZAotCSAqICAgICAgIGNvbnNpc3RlbnQpLgotCSAqLwotCi0JcmFyLT5sZW5ndGggPSBoaWdoIC0gbG93ICsgMTsKLQotCS8qIENsYWltIFJBUiBtZW1vcnkgYXMgb3VyIG93bi4gKi8KLQlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKGxvdywgcmFyLT5sZW5ndGgsIGRldm5hbWUpID09IE5VTEwpIHsKLQkJcmFyLT5sZW5ndGggPSAwOwotCQlwcl9lcnIoIiVzOiBVbmFibGUgdG8gY2xhaW0gUkFSWyVkXSBtZW1vcnkuXG4iLAotCQkgICAgICAgZGV2bmFtZSwgcmFybnVtKTsKLQkJcHJfZXJyKCIlczogUkFSWyVkXSBkaXNhYmxlZC5cbiIsIGRldm5hbWUsIHJhcm51bSk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JcmFyLT5iYXNlID0gbG93OwotCi0JLyoKLQkgKiBOb3cgbWFwIGl0IGludG8gdGhlIGtlcm5lbCBhZGRyZXNzIHNwYWNlLgotCSAqCi0JICogTm90ZSB0aGF0IHRoZSBSQVIgbWVtb3J5IG1heSBvbmx5IGJlIGFjY2Vzc2VkIGJ5IElBCi0JICogd2hlbiBkZWJ1Z2dpbmcuICBPdGhlcndpc2UgYXR0ZW1wdHMgdG8gYWNjZXNzIHRoZQotCSAqIFJBUiBtZW1vcnkgd2hlbiBpdCBpcyBsb2NrZWQgZG93biB3aWxsIHJlc3VsdCBpbgotCSAqIGJlaGF2aW9yIHNpbWlsYXIgdG8gd3JpdGluZyB0byAvZGV2L251bGwgYW5kCi0JICogcmVhZGluZyBmcm9tIC9kZXYvemVyby4gIFRoaXMgYmVoYXZpb3IgaXMgZW5mb3JjZWQKLQkgKiBieSB0aGUgaGFyZHdhcmUuICBFdmVuIGlmIHdlIGRvbid0IGFjY2VzcyB0aGUKLQkgKiBtZW1vcnksIG1hcHBpbmcgaXQgaW50byB0aGUga2VybmVsIHByb3ZpZGVzIHVzIHdpdGgKLQkgKiBhIGNvbnZlbmllbnQgUkFSIGhhbmRsZSB0byBidXMgYWRkcmVzcyBtYXBwaW5nLgotCSAqLwotCXJhci0+aW9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHJhci0+YmFzZSwgcmFyLT5sZW5ndGgpOwotCWlmIChyYXItPmlvYmFzZSA9PSBOVUxMKSB7Ci0JCXByX2VycigiJXM6IFVuYWJsZSB0byBtYXAgUkFSIG1lbW9yeS5cbiIsIGRldm5hbWUpOwotCQlyZWxlYXNlX21lbV9yZWdpb24obG93LCByYXItPmxlbmd0aCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qIEluaXRpYWxpemUgY29ycmVzcG9uZGluZyBtZW1vcnkgYWxsb2NhdG9yLiAqLwotCXJhci0+YWxsb2NhdG9yID0gbWVtcmFyX2NyZWF0ZV9hbGxvY2F0b3IoKHVuc2lnbmVkIGxvbmcpIHJhci0+aW9iYXNlLAotCQkJCQkJcmFyLT5sZW5ndGgsIFJBUl9CTE9DS19TSVpFKTsKLQlpZiAocmFyLT5hbGxvY2F0b3IgPT0gTlVMTCkgewotCQlpb3VubWFwKHJhci0+aW9iYXNlKTsKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKGxvdywgcmFyLT5sZW5ndGgpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlwcl9pbmZvKCIlczogQlJBUlslZF0gYnVzIGFkZHJlc3MgcmFuZ2UgPSBbMHglbHgsIDB4JWx4XVxuIiwKLQkJZGV2bmFtZSwgcmFybnVtLCAodW5zaWduZWQgbG9uZykgbG93LCAodW5zaWduZWQgbG9uZykgaGlnaCk7Ci0KLQlwcl9pbmZvKCIlczogQlJBUlslZF0gc2l6ZSA9ICV6dSBLaUJcbiIsCi0JCQlkZXZuYW1lLCByYXJudW0sIHJhci0+YWxsb2NhdG9yLT5jYXBhY2l0eSAvIDEwMjQpOwotCi0JcmFyLT5hbGxvY2F0ZWQgPSAxOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqCW1lbXJhcl9maW5pX3Jhcl9yZXNvdXJjZXMJLQlmcmVlIHVwIFJBUiByZXNvdXJjZXMKLSAqCi0gKglGaW5hbGl6ZSBSQVIgcmVzb3VyY2VzLiBGcmVlIHVwIHRoZSByZXNvdXJjZSB0YWJsZXMsIGhhbmQgdGhlIG1lbW9yeQotICoJYmFjayB0byB0aGUga2VybmVsLCB1bm1hcCB0aGUgZGV2aWNlIGFuZCByZWxlYXNlIHRoZSBhZGRyZXNzIHNwYWNlLgotICovCi1zdGF0aWMgdm9pZCBtZW1yYXJfZmluaV9yYXJfcmVzb3VyY2VzKHZvaWQpCi17Ci0JaW50IHo7Ci0Jc3RydWN0IG1lbXJhcl9idWZmZXJfaW5mbyAqcG9zOwotCXN0cnVjdCBtZW1yYXJfYnVmZmVyX2luZm8gKnRtcDsKLQotCS8qCi0JICogQHRvZG8gRG8gd2UgbmVlZCB0byBob2xkIGEgbG9jayBhdCB0aGlzIHBvaW50IGluIHRpbWU/Ci0JICogICAgICAgKG1vZHVsZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlIG9yIGV4aXQ/KQotCSAqLwotCi0JZm9yICh6ID0gTVJTVF9OVU1fUkFSOyB6LS0gIT0gMDsgKSB7Ci0JCXN0cnVjdCBtZW1yYXJfcmFyX2luZm8gKiBjb25zdCByYXIgPSAmbWVtcmFyc1t6XTsKLQotCQlpZiAoIXJhci0+YWxsb2NhdGVkKQotCQkJY29udGludWU7Ci0KLQkJLyogQ2xlYW4gdXAgcmVtYWluaW5nIHJlc291cmNlcy4gKi8KLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLAotCQkJCQkgdG1wLAotCQkJCQkgJnJhci0+YnVmZmVycy5saXN0LAotCQkJCQkgbGlzdCkgewotCQkJa3JlZl9wdXQoJnBvcy0+cmVmY291bnQsIG1lbXJhcl9yZWxlYXNlX2Jsb2NrX2kpOwotCQl9Ci0KLQkJbWVtcmFyX2Rlc3Ryb3lfYWxsb2NhdG9yKHJhci0+YWxsb2NhdG9yKTsKLQkJcmFyLT5hbGxvY2F0b3IgPSBOVUxMOwotCi0JCWlvdW5tYXAocmFyLT5pb2Jhc2UpOwotCQlyZWxlYXNlX21lbV9yZWdpb24ocmFyLT5iYXNlLCByYXItPmxlbmd0aCk7Ci0KLQkJcmFyLT5pb2Jhc2UgPSBOVUxMOwotCQlyYXItPmJhc2UgPSAwOwotCQlyYXItPmxlbmd0aCA9IDA7Ci0KLQkJdW5yZWdpc3Rlcl9yYXIoeik7Ci0JfQotfQotCi0vKioKLSAqCW1lbXJhcl9yZXNlcnZlX2Jsb2NrCS0JaGFuZGxlIGFuIGFsbG9jYXRpb24gcmVxdWVzdAotICoJQHJlcXVlc3Q6IGJsb2NrIGJlaW5nIHJlcXVlc3RlZAotICoJQGZpbHA6IG93bmVyIGl0IGlzIHRpZWQgdG8KLSAqCi0gKglBbGxvY2F0ZSBhIGJsb2NrIG9mIHRoZSByZXF1ZXN0ZWQgUkFSLiBJZiBzdWNjZXNzZnVsIHJldHVybiB0aGUKLSAqCXJlcXVlc3Qgb2JqZWN0IGZpbGxlZCBpbiBhbmQgemVybywgaWYgbm90IHJlcG9ydCBhbiBlcnJvciBjb2RlCi0gKi8KLQotc3RhdGljIGxvbmcgbWVtcmFyX3Jlc2VydmVfYmxvY2soc3RydWN0IFJBUl9idWZmZXIgKnJlcXVlc3QsCi0JCQkJIHN0cnVjdCBmaWxlICpmaWxwKQotewotCXN0cnVjdCBSQVJfYmxvY2tfaW5mbyAqIGNvbnN0IHJpbmZvID0gJnJlcXVlc3QtPmluZm87Ci0Jc3RydWN0IFJBUl9idWZmZXIgKmJ1ZmZlcjsKLQlzdHJ1Y3QgbWVtcmFyX2J1ZmZlcl9pbmZvICpidWZmZXJfaW5mbzsKLQl1MzIgaGFuZGxlOwotCXN0cnVjdCBtZW1yYXJfcmFyX2luZm8gKnJhciA9IE5VTEw7Ci0KLQkvKiBQcmV2ZW50IGFycmF5IG92ZXJmbG93LiAqLwotCWlmICghbWVtcmFyX2lzX3ZhbGlkX3Jhcl90eXBlKHJpbmZvLT50eXBlKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyYXIgPSAmbWVtcmFyc1tyaW5mby0+dHlwZV07Ci0JaWYgKCFyYXItPmFsbG9jYXRlZCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKiBSZXNlcnZlIG1lbW9yeSBpbiBSQVIuICovCi0JaGFuZGxlID0gbWVtcmFyX2FsbG9jYXRvcl9hbGxvYyhyYXItPmFsbG9jYXRvciwgcmluZm8tPnNpemUpOwotCWlmIChoYW5kbGUgPT0gMCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlidWZmZXJfaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCpidWZmZXJfaW5mbyksIEdGUF9LRVJORUwpOwotCi0JaWYgKGJ1ZmZlcl9pbmZvID09IE5VTEwpIHsKLQkJbWVtcmFyX2FsbG9jYXRvcl9mcmVlKHJhci0+YWxsb2NhdG9yLCBoYW5kbGUpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlidWZmZXIgPSAmYnVmZmVyX2luZm8tPmJ1ZmZlcjsKLQlidWZmZXItPmluZm8udHlwZSA9IHJpbmZvLT50eXBlOwotCWJ1ZmZlci0+aW5mby5zaXplID0gcmluZm8tPnNpemU7Ci0KLQkvKiBNZW1vcnkgaGFuZGxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJ1cyBhZGRyZXNzLiAqLwotCWJ1ZmZlci0+aW5mby5oYW5kbGUgPSBoYW5kbGU7Ci0JYnVmZmVyLT5idXNfYWRkcmVzcyA9IG1lbXJhcl9nZXRfYnVzX2FkZHJlc3MocmFyLCBoYW5kbGUpOwotCi0JLyoKLQkgKiBLZWVwIHRyYWNrIG9mIG93bmVyIHNvIHRoYXQgd2UgY2FuIGxhdGVyIGNsZWFudXAgaWYKLQkgKiBuZWNlc3NhcnkuCi0JICovCi0JYnVmZmVyX2luZm8tPm93bmVyID0gZmlscDsKLQotCWtyZWZfaW5pdCgmYnVmZmVyX2luZm8tPnJlZmNvdW50KTsKLQotCW11dGV4X2xvY2soJnJhci0+bG9jayk7Ci0JbGlzdF9hZGQoJmJ1ZmZlcl9pbmZvLT5saXN0LCAmcmFyLT5idWZmZXJzLmxpc3QpOwotCW11dGV4X3VubG9jaygmcmFyLT5sb2NrKTsKLQotCXJpbmZvLT5oYW5kbGUgPSBidWZmZXItPmluZm8uaGFuZGxlOwotCXJlcXVlc3QtPmJ1c19hZGRyZXNzID0gYnVmZmVyLT5idXNfYWRkcmVzczsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqCW1lbXJhcl9yZWxlYXNlX2Jsb2NrCQktCXJlbGVhc2UgYSBSQVIgYmxvY2sKLSAqCUBhZGRyOiBhZGRyZXNzIGluIFJBUiBzcGFjZQotICoKLSAqCVJlbGVhc2UgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBibG9jay4gUmVsZWFzZXMgYWN0IG9uIGNvbXBsZXRlCi0gKglibG9ja3MsIHBhcnRpYWxseSBmcmVlaW5nIGEgYmxvY2sgaXMgbm90IHN1cHBvcnRlZAotICovCi0KLXN0YXRpYyBsb25nIG1lbXJhcl9yZWxlYXNlX2Jsb2NrKHUzMiBhZGRyKQotewotCXN0cnVjdCBtZW1yYXJfYnVmZmVyX2luZm8gKnBvczsKLQlzdHJ1Y3QgbWVtcmFyX2J1ZmZlcl9pbmZvICp0bXA7Ci0Jc3RydWN0IG1lbXJhcl9yYXJfaW5mbyAqIGNvbnN0IHJhciA9IG1lbXJhcl9nZXRfcmFyX2luZm8oYWRkcik7Ci0JbG9uZyByZXN1bHQgPSAtRUlOVkFMOwotCi0JaWYgKHJhciA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0VOVDsKLQotCW11dGV4X2xvY2soJnJhci0+bG9jayk7Ci0KLQkvKgotCSAqIEl0ZXJhdGUgdGhyb3VnaCB0aGUgYnVmZmVyIGxpc3QgdG8gZmluZCB0aGUgY29ycmVzcG9uZGluZwotCSAqIGJ1ZmZlciB0byBiZSByZWxlYXNlZC4KLQkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLAotCQkJCSB0bXAsCi0JCQkJICZyYXItPmJ1ZmZlcnMubGlzdCwKLQkJCQkgbGlzdCkgewotCQlzdHJ1Y3QgUkFSX2Jsb2NrX2luZm8gKiBjb25zdCBpbmZvID0KLQkJCSZwb3MtPmJ1ZmZlci5pbmZvOwotCi0JCS8qCi0JCSAqIFRha2UgaW50byBhY2NvdW50IGhhbmRsZSBvZmZzZXRzIHRoYXQgbWF5IGhhdmUgYmVlbgotCQkgKiBhZGRlZCB0byB0aGUgYmFzZSBoYW5kbGUsIHN1Y2ggYXMgaW4gdGhlIGZvbGxvd2luZwotCQkgKiBzY2VuYXJpbzoKLQkJICoKLQkJICogICAgIHUzMiBoYW5kbGUgPSBiYXNlICsgb2Zmc2V0OwotCQkgKiAgICAgcmFyX2hhbmRsZV90b19idXMoaGFuZGxlKTsKLQkJICogICAgIHJhcl9yZWxlYXNlKGhhbmRsZSk7Ci0JCSAqLwotCQlpZiAoYWRkciA+PSBpbmZvLT5oYW5kbGUKLQkJICAgICYmIGFkZHIgPCAoaW5mby0+aGFuZGxlICsgaW5mby0+c2l6ZSkKLQkJICAgICYmIG1lbXJhcl9pc192YWxpZF9yYXJfdHlwZShpbmZvLT50eXBlKSkgewotCQkJa3JlZl9wdXQoJnBvcy0+cmVmY291bnQsIG1lbXJhcl9yZWxlYXNlX2Jsb2NrX2kpOwotCQkJcmVzdWx0ID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZyYXItPmxvY2spOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKgltZW1yYXJfZ2V0X3N0YXRzCS0JcmVhZCBzdGF0aXN0aWNzIGZvciBhIFJBUgotICoJQHI6IHN0YXRpc3RpY3MgdG8gYmUgZmlsbGVkIGluCi0gKgotICoJUmV0dXJucyB0aGUgc3RhdGlzdGljcyBkYXRhIGZvciB0aGUgUkFSLCBvciBhbiBlcnJvciBjb2RlIGlmCi0gKgl0aGUgcmVxdWVzdCBjYW5ub3QgYmUgY29tcGxldGVkCi0gKi8KLXN0YXRpYyBsb25nIG1lbXJhcl9nZXRfc3RhdChzdHJ1Y3QgUkFSX3N0YXQgKnIpCi17Ci0Jc3RydWN0IG1lbXJhcl9hbGxvY2F0b3IgKmFsbG9jYXRvcjsKLQotCWlmICghbWVtcmFyX2lzX3ZhbGlkX3Jhcl90eXBlKHItPnR5cGUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghbWVtcmFyc1tyLT50eXBlXS5hbGxvY2F0ZWQpCi0JCXJldHVybiAtRU5PREVWOwotCi0JYWxsb2NhdG9yID0gbWVtcmFyc1tyLT50eXBlXS5hbGxvY2F0b3I7Ci0KLQlCVUdfT04oYWxsb2NhdG9yID09IE5VTEwpOwotCi0JLyoKLQkgKiBBbGxvY2F0b3IgY2FwYWNpdHkgZG9lc24ndCBjaGFuZ2Ugb3ZlciB0aW1lLiAgTm8KLQkgKiBuZWVkIHRvIHN5bmNocm9uaXplLgotCSAqLwotCXItPmNhcGFjaXR5ID0gYWxsb2NhdG9yLT5jYXBhY2l0eTsKLQotCW11dGV4X2xvY2soJmFsbG9jYXRvci0+bG9jayk7Ci0Jci0+bGFyZ2VzdF9ibG9ja19zaXplID0gYWxsb2NhdG9yLT5sYXJnZXN0X2ZyZWVfYXJlYTsKLQltdXRleF91bmxvY2soJmFsbG9jYXRvci0+bG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICoJbWVtcmFyX2lvY3RsCQktCWlvY3RsIGNhbGxiYWNrCi0gKglAZmlscDogZmlsZSBpc3N1aW5nIHRoZSByZXF1ZXN0Ci0gKglAY21kOiBjb21tYW5kCi0gKglAYXJnOiBwb2ludGVyIHRvIGNvbnRyb2wgaW5mb3JtYXRpb24KLSAqCi0gKglQZXJmb3JtIG9uZSBvZiB0aGUgaW9jdGxzIHN1cHBvcnRlZCBieSB0aGUgbWVtcmFyIGRldmljZQotICovCi0KLXN0YXRpYyBsb25nIG1lbXJhcl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCSB1bnNpZ25lZCBpbnQgY21kLAotCQkJIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwotCWxvbmcgcmVzdWx0ID0gMDsKLQotCXN0cnVjdCBSQVJfYnVmZmVyIGJ1ZmZlcjsKLQlzdHJ1Y3QgUkFSX2Jsb2NrX2luZm8gKiBjb25zdCByZXF1ZXN0ID0gJmJ1ZmZlci5pbmZvOwotCXN0cnVjdCBSQVJfc3RhdCByYXJfaW5mbzsKLQl1MzIgcmFyX2hhbmRsZTsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSQVJfSEFORExFUl9SRVNFUlZFOgotCQlpZiAoY29weV9mcm9tX3VzZXIocmVxdWVzdCwKLQkJCQkgICBhcmdwLAotCQkJCSAgIHNpemVvZigqcmVxdWVzdCkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJcmVzdWx0ID0gbWVtcmFyX3Jlc2VydmVfYmxvY2soJmJ1ZmZlciwgZmlscCk7Ci0JCWlmIChyZXN1bHQgIT0gMCkKLQkJCXJldHVybiByZXN1bHQ7Ci0KLQkJcmV0dXJuIGNvcHlfdG9fdXNlcihhcmdwLCByZXF1ZXN0LCBzaXplb2YoKnJlcXVlc3QpKTsKLQotCWNhc2UgUkFSX0hBTkRMRVJfUkVMRUFTRToKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZyYXJfaGFuZGxlLAotCQkJCSAgIGFyZ3AsCi0JCQkJICAgc2l6ZW9mKHJhcl9oYW5kbGUpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCXJldHVybiBtZW1yYXJfcmVsZWFzZV9ibG9jayhyYXJfaGFuZGxlKTsKLQotCWNhc2UgUkFSX0hBTkRMRVJfU1RBVDoKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZyYXJfaW5mbywKLQkJCQkgICBhcmdwLAotCQkJCSAgIHNpemVvZihyYXJfaW5mbykpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJLyoKLQkJICogUG9wdWxhdGUgdGhlIFJBUl9zdGF0IHN0cnVjdHVyZSBiYXNlZCBvbiB0aGUgUkFSCi0JCSAqIHR5cGUgZ2l2ZW4gYnkgdGhlIHVzZXIKLQkJICovCi0JCWlmIChtZW1yYXJfZ2V0X3N0YXQoJnJhcl9pbmZvKSAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJLyoKLQkJICogQHRvZG8gRG8gd2UgbmVlZCB0byB2ZXJpZnkgZGVzdGluYXRpb24gcG9pbnRlcgotCQkgKiAgICAgICAiYXJncCIgaXMgbm9uLXplcm8/ICBJcyB0aGF0IGFscmVhZHkgZG9uZSBieQotCQkgKiAgICAgICBjb3B5X3RvX3VzZXIoKT8KLQkJICovCi0JCXJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwKLQkJCQkgICAgJnJhcl9pbmZvLAotCQkJCSAgICBzaXplb2YocmFyX2luZm8pKSA/IC1FRkFVTFQgOiAwOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9UVFk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICoJbWVtcmFyX21tYXAJCS0JbW1hcCBoZWxwZXIgZm9yIGRldWJnZ2luZwotICoJQGZpbHA6IGhhbmRsZSBkb2luZyB0aGUgbWFwcGluZwotICoJQHZtYTogbWVtb3J5IGFyZWEKLSAqCi0gKglTdXBwb3J0IHRoZSBtbWFwIG9wZXJhdGlvbiBvbiB0aGUgUkFSIHNwYWNlIGZvciBkZWJ1Z2dpbmcgc3lzdGVtcwotICoJd2hlbiB0aGUgbWVtb3J5IGlzIG5vdCBsb2NrZWQgZG93bi4KLSAqLwotCi1zdGF0aWMgaW50IG1lbXJhcl9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQkvKgotCSAqIFRoaXMgbW1hcCgpIGltcGxlbWVudGF0aW9uIGlzIHByZWRvbWluYW50bHkgdXNlZnVsIGZvcgotCSAqIGRlYnVnZ2luZyBzaW5jZSB0aGUgQ1BVIHdpbGwgYmUgcHJldmVudGVkIGZyb20gYWNjZXNzaW5nCi0JICogUkFSIG1lbW9yeSBieSB0aGUgaGFyZHdhcmUgd2hlbiBSQVIgaXMgcHJvcGVybHkgbG9ja2VkCi0JICogZG93bi4KLQkgKgotCSAqIEluIG9yZGVyIGZvciB0aGlzIGltcGxlbWVudGF0aW9uIHRvIGJlIHVzZWZ1bCBSQVIgbWVtb3J5Ci0JICogbXVzdCBiZSBub3QgYmUgbG9ja2VkIGRvd24uICBIb3dldmVyLCB3ZSBvbmx5IHdhbnQgdG8gZG8KLQkgKiB0aGF0IHdoZW4gZGVidWdnaW5nLiAgRE8gTk9UIGxlYXZlIFJBUiBtZW1vcnkgdW5sb2NrZWQgaW4gYQotCSAqIGRlcGxveWVkIGRldmljZSB0aGF0IHV0aWxpemVzIFJBUi4KLQkgKi8KLQotCXNpemVfdCBjb25zdCBzaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OwotCi0JLyogVXNlcnMgcGFzcyB0aGUgUkFSIGhhbmRsZSBhcyB0aGUgbW1hcCgpIG9mZnNldCBwYXJhbWV0ZXIuICovCi0JdW5zaWduZWQgbG9uZyBjb25zdCBoYW5kbGUgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7Ci0KLQlzdHJ1Y3QgbWVtcmFyX3Jhcl9pbmZvICogY29uc3QgcmFyID0gbWVtcmFyX2dldF9yYXJfaW5mbyhoYW5kbGUpOwotCXVuc2lnbmVkIGxvbmcgcGZuOwotCi0JLyogT25seSBhbGxvdyBwcml2aWxlZGdlZCBhcHBzIHRvIGdvIHBva2luZyBhcm91bmQgdGhpcyB3YXkgKi8KLQlpZiAoIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCi0JCXJldHVybiAtRVBFUk07Ci0KLQkvKiBJbnZhbGlkIFJBUiBoYW5kbGUgb3Igc2l6ZSBwYXNzZWQgdG8gbW1hcCgpLiAqLwotCWlmIChyYXIgPT0gTlVMTAotCSAgICB8fCBoYW5kbGUgPT0gMAotCSAgICB8fCBzaXplID4gKGhhbmRsZSAtICh1bnNpZ25lZCBsb25nKSByYXItPmlvYmFzZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyoKLQkgKiBSZXRyaWV2ZSBwaHlzaWNhbCBhZGRyZXNzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFJBUiBoYW5kbGUsCi0JICogYW5kIGNvbnZlcnQgaXQgdG8gYSBwYWdlIGZyYW1lLgotCSAqLwotCXBmbiA9IG1lbXJhcl9nZXRfcGh5c2ljYWxfYWRkcmVzcyhyYXIsIGhhbmRsZSkgPj4gUEFHRV9TSElGVDsKLQotCi0JcHJfZGVidWcoIm1lbXJhcjogbWFwcGluZyBSQVIgcmFuZ2UgWzB4JWx4LCAweCVseCkgaW50byB1c2VyIHNwYWNlLlxuIiwKLQkJIGhhbmRsZSwKLQkJIGhhbmRsZSArIHNpemUpOwotCi0JLyoKLQkgKiBNYXAgUkFSIG1lbW9yeSBpbnRvIHVzZXIgc3BhY2UuICBUaGlzIGlzIHJlYWxseSBvbmx5IHVzZWZ1bAotCSAqIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgc2luY2UgdGhlIG1lbW9yeSB3b24ndCBiZQotCSAqIGFjY2Vzc2libGUsIGkuZS4gcmVhZHMgcmV0dXJuIHplcm8gYW5kIHdyaXRlcyBhcmUgaWdub3JlZCwKLQkgKiB3aGVuIFJBUiBhY2Nlc3MgY29udHJvbCBpcyBlbmFibGVkLgotCSAqLwotCWlmIChyZW1hcF9wZm5fcmFuZ2Uodm1hLAotCQkJICAgIHZtYS0+dm1fc3RhcnQsCi0JCQkgICAgcGZuLAotCQkJICAgIHNpemUsCi0JCQkgICAgdm1hLT52bV9wYWdlX3Byb3QpKQotCQlyZXR1cm4gLUVBR0FJTjsKLQotCS8qIHZtYS0+dm1fb3BzID0gJm1lbXJhcl9tZW1fb3BzOyAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICoJbWVtcmFyX29wZW4JCS0JZGV2aWNlIG9wZW4gbWV0aG9kCi0gKglAaW5vZGU6IGlub2RlIHRvIG9wZW4KLSAqCUBmaWxwOiBmaWxlIGhhbmRsZQotICoKLSAqCUFzIHdlIHN1cHBvcnQgbXVsdGlwbGUgYXJiaXRhcnkgb3BlbnMgdGhlcmUgaXMgbm8gd29yayB0byBiZSBkb25lCi0gKglyZWFsbHkuCi0gKi8KLQotc3RhdGljIGludCBtZW1yYXJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxwKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKgltZW1yYXJfcmVsZWFzZQkJLQljbG9zZSBtZXRob2QgZm9yIG1pc2NldgotICoJQGlub2RlOiBpbm9kZSBvZiBkZXZpY2UKLSAqCUBmaWxwOiBoYW5kbGUgdGhhdCBpcyBnb2luZyBhd2F5Ci0gKgotICoJRnJlZSB1cCBhbGwgdGhlIHJlZ2lvbnMgdGhhdCBiZWxvbmcgdG8gdGhpcyBmaWxlIGhhbmRsZS4gV2UgdXNlCi0gKgl0aGUgaGFuZGxlIGFzIGEgbmF0dXJhbCBMaW51eCBzdHlsZSAnbGlmZXRpbWUnIGluZGljYXRvciBhbmQgdG8KLSAqCWVuc3VyZSByZXNvdXJjZXMgYXJlIG5vdCBsZWFrZWQgd2hlbiB0aGVpciBvd25lciBleHBsb2RlcyBpbiBhbgotICoJdW5wbGFubmVkIGZhc2hpb24uCi0gKi8KLQotc3RhdGljIGludCBtZW1yYXJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQkvKiBGcmVlIGFsbCByZWdpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gZmlsZSBoYW5kbGUuICovCi0KLQlzdHJ1Y3QgbWVtcmFyX2J1ZmZlcl9pbmZvICpwb3M7Ci0Jc3RydWN0IG1lbXJhcl9idWZmZXJfaW5mbyAqdG1wOwotCWludCB6OwotCi0JZm9yICh6ID0gMDsgeiAhPSBNUlNUX05VTV9SQVI7ICsreikgewotCQlzdHJ1Y3QgbWVtcmFyX3Jhcl9pbmZvICogY29uc3QgcmFyID0gJm1lbXJhcnNbel07Ci0KLQkJbXV0ZXhfbG9jaygmcmFyLT5sb2NrKTsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLAotCQkJCQkgdG1wLAotCQkJCQkgJnJhci0+YnVmZmVycy5saXN0LAotCQkJCQkgbGlzdCkgewotCQkJaWYgKGZpbHAgPT0gcG9zLT5vd25lcikKLQkJCQlrcmVmX3B1dCgmcG9zLT5yZWZjb3VudCwKLQkJCQkJIG1lbXJhcl9yZWxlYXNlX2Jsb2NrX2kpOwotCQl9Ci0KLQkJbXV0ZXhfdW5sb2NrKCZyYXItPmxvY2spOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqCXJhcl9yZXNlcnZlCQktCXJlc2VydmUgUkFSIG1lbW9yeQotICoJQGJ1ZmZlcnM6IGJ1ZmZlcnMgdG8gcmVzZXJ2ZQotICoJQGNvdW50OiBudW1iZXIgd2FudGVkCi0gKgotICoJUmVzZXJ2ZSBhIHNlcmllcyBvZiBidWZmZXJzIGluIHRoZSBSQVIgc3BhY2UuIFJldHVybnMgdGhlIG51bWJlciBvZgotICoJYnVmZmVycyBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkCi0gKi8KLQotc2l6ZV90IHJhcl9yZXNlcnZlKHN0cnVjdCBSQVJfYnVmZmVyICpidWZmZXJzLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IFJBUl9idWZmZXIgKiBjb25zdCBlbmQgPQotCQkoYnVmZmVycyA9PSBOVUxMID8gYnVmZmVycyA6IGJ1ZmZlcnMgKyBjb3VudCk7Ci0Jc3RydWN0IFJBUl9idWZmZXIgKmk7Ci0KLQlzaXplX3QgcmVzZXJ2ZV9jb3VudCA9IDA7Ci0KLQlmb3IgKGkgPSBidWZmZXJzOyBpICE9IGVuZDsgKytpKSB7Ci0JCWlmIChtZW1yYXJfcmVzZXJ2ZV9ibG9jayhpLCBOVUxMKSA9PSAwKQotCQkJKytyZXNlcnZlX2NvdW50OwotCQllbHNlCi0JCQlpLT5idXNfYWRkcmVzcyA9IDA7Ci0JfQotCi0JcmV0dXJuIHJlc2VydmVfY291bnQ7Ci19Ci1FWFBPUlRfU1lNQk9MKHJhcl9yZXNlcnZlKTsKLQotLyoqCi0gKglyYXJfcmVsZWFzZQkJLQlyZXR1cm4gUkFSIGJ1ZmZlcnMKLSAqCUBidWZmZXJzOiBidWZmZXJzIHRvIHJlbGVhc2UKLSAqCUBzaXplOiBzaXplIG9mIHJlbGVhc2VkIGJsb2NrCi0gKgotICoJUmV0dXJuIGEgc2V0IG9mIGJ1ZmZlcnMgdG8gdGhlIFJBUiBwb29sCi0gKi8KLQotc2l6ZV90IHJhcl9yZWxlYXNlKHN0cnVjdCBSQVJfYnVmZmVyICpidWZmZXJzLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IFJBUl9idWZmZXIgKiBjb25zdCBlbmQgPQotCQkoYnVmZmVycyA9PSBOVUxMID8gYnVmZmVycyA6IGJ1ZmZlcnMgKyBjb3VudCk7Ci0Jc3RydWN0IFJBUl9idWZmZXIgKmk7Ci0KLQlzaXplX3QgcmVsZWFzZV9jb3VudCA9IDA7Ci0KLQlmb3IgKGkgPSBidWZmZXJzOyBpICE9IGVuZDsgKytpKSB7Ci0JCXUzMiAqIGNvbnN0IGhhbmRsZSA9ICZpLT5pbmZvLmhhbmRsZTsKLQkJaWYgKG1lbXJhcl9yZWxlYXNlX2Jsb2NrKCpoYW5kbGUpID09IDApIHsKLQkJCS8qCi0JCQkgKiBAdG9kbyBXZSBhc3N1bWUgd2Ugc2hvdWxkIGRvIHRoaXMgZWFjaCB0aW1lCi0JCQkgKiAgICAgICB0aGUgcmVmIGNvdW50IGlzIGRlY3JlbWVudGVkLiAgU2hvdWxkCi0JCQkgKiAgICAgICB3ZSBpbnN0ZWFkIG9ubHkgZG8gdGhpcyB3aGVuIHRoZSByZWYKLQkJCSAqICAgICAgIGNvdW50IGhhcyBkcm9wcGVkIHRvIHplcm8sIGFuZCB0aGUKLQkJCSAqICAgICAgIGJ1ZmZlciBoYXMgYmVlbiBjb21wbGV0ZWx5Ci0JCQkgKiAgICAgICByZWxlYXNlZC91bm1hcHBlZD8KLQkJCSAqLwotCQkJKmhhbmRsZSA9IDA7Ci0JCQkrK3JlbGVhc2VfY291bnQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmVsZWFzZV9jb3VudDsKLX0KLUVYUE9SVF9TWU1CT0wocmFyX3JlbGVhc2UpOwotCi0vKioKLSAqCXJhcl9oYW5kbGVfdG9fYnVzCS0JUkFSIHRvIGJ1cyBhZGRyZXNzCi0gKglAYnVmZmVyczogUkFSIGJ1ZmZlciBzdHJ1Y3R1cmUKLSAqCUBjb3VudDogbnVtYmVyIG9mIGJ1ZmZlcnMgdG8gY29udmVydAotICoKLSAqCVR1cm4gYSBsaXN0IG9mIFJBUiBoYW5kbGUgbWFwcGluZ3MgaW50byBhY3R1YWwgYnVzIGFkZHJlc3Nlcy4gTm90ZQotICoJdGhhdCB3aGVuIHRoZSBkZXZpY2UgaXMgbG9ja2VkIGRvd24gdGhlIGJ1cyBhZGRyZXNzZXMgaW4gcXVlc3Rpb24KLSAqCWFyZSBub3QgQ1BVIGFjY2Vzc2libGUuCi0gKi8KLQotc2l6ZV90IHJhcl9oYW5kbGVfdG9fYnVzKHN0cnVjdCBSQVJfYnVmZmVyICpidWZmZXJzLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IFJBUl9idWZmZXIgKiBjb25zdCBlbmQgPQotCQkoYnVmZmVycyA9PSBOVUxMID8gYnVmZmVycyA6IGJ1ZmZlcnMgKyBjb3VudCk7Ci0Jc3RydWN0IFJBUl9idWZmZXIgKmk7Ci0Jc3RydWN0IG1lbXJhcl9idWZmZXJfaW5mbyAqcG9zOwotCi0Jc2l6ZV90IGNvbnZlcnNpb25fY291bnQgPSAwOwotCi0JLyoKLQkgKiBGaW5kIGFsbCBidXMgYWRkcmVzc2VzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGhhbmRsZXMuCi0JICoKLQkgKiBAdG9kbyBOb3QgbGlraW5nIHRoaXMgbmVzdGVkIGxvb3AuICBPcHRpbWl6ZS4KLQkgKi8KLQlmb3IgKGkgPSBidWZmZXJzOyBpICE9IGVuZDsgKytpKSB7Ci0JCXN0cnVjdCBtZW1yYXJfcmFyX2luZm8gKiBjb25zdCByYXIgPQotCQkJbWVtcmFyX2dldF9yYXJfaW5mbyhpLT5pbmZvLmhhbmRsZSk7Ci0KLQkJLyoKLQkJICogQ2hlY2sgaWYgd2UgaGF2ZSBhIGJvZ3VzIGhhbmRsZSwgYW5kIHRoZW4gY29udGludWUKLQkJICogd2l0aCByZW1haW5pbmcgYnVmZmVycy4KLQkJICovCi0JCWlmIChyYXIgPT0gTlVMTCkgewotCQkJaS0+YnVzX2FkZHJlc3MgPSAwOwotCQkJY29udGludWU7Ci0JCX0KLQotCQltdXRleF9sb2NrKCZyYXItPmxvY2spOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmcmFyLT5idWZmZXJzLmxpc3QsIGxpc3QpIHsKLQkJCXN0cnVjdCBSQVJfYmxvY2tfaW5mbyAqIGNvbnN0IHVzZXJfaW5mbyA9Ci0JCQkJJnBvcy0+YnVmZmVyLmluZm87Ci0KLQkJCS8qCi0JCQkgKiBUYWtlIGludG8gYWNjb3VudCBoYW5kbGUgb2Zmc2V0cyB0aGF0IG1heQotCQkJICogaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBiYXNlIGhhbmRsZSwgc3VjaCBhcwotCQkJICogaW4gdGhlIGZvbGxvd2luZyBzY2VuYXJpbzoKLQkJCSAqCi0JCQkgKiAgICAgdTMyIGhhbmRsZSA9IGJhc2UgKyBvZmZzZXQ7Ci0JCQkgKiAgICAgcmFyX2hhbmRsZV90b19idXMoaGFuZGxlKTsKLQkJCSAqLwotCi0JCQlpZiAoaS0+aW5mby5oYW5kbGUgPj0gdXNlcl9pbmZvLT5oYW5kbGUKLQkJCSAgICAmJiBpLT5pbmZvLmhhbmRsZSA8ICh1c2VyX2luZm8tPmhhbmRsZQotCQkJCQkJICsgdXNlcl9pbmZvLT5zaXplKSkgewotCQkJCXUzMiBjb25zdCBvZmZzZXQgPQotCQkJCQlpLT5pbmZvLmhhbmRsZSAtIHVzZXJfaW5mby0+aGFuZGxlOwotCi0JCQkJaS0+aW5mby50eXBlID0gdXNlcl9pbmZvLT50eXBlOwotCQkJCWktPmluZm8uc2l6ZSA9IHVzZXJfaW5mby0+c2l6ZSAtIG9mZnNldDsKLQkJCQlpLT5idXNfYWRkcmVzcyA9Ci0JCQkJCXBvcy0+YnVmZmVyLmJ1c19hZGRyZXNzCi0JCQkJCSsgb2Zmc2V0OwotCi0JCQkJLyogSW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQuICovCi0JCQkJa3JlZl9nZXQoJnBvcy0+cmVmY291bnQpOwotCi0JCQkJKytjb252ZXJzaW9uX2NvdW50OwotCQkJCWJyZWFrOwotCQkJfSBlbHNlIHsKLQkJCQlpLT5idXNfYWRkcmVzcyA9IDA7Ci0JCQl9Ci0JCX0KLQotCQltdXRleF91bmxvY2soJnJhci0+bG9jayk7Ci0JfQotCi0JcmV0dXJuIGNvbnZlcnNpb25fY291bnQ7Ci19Ci1FWFBPUlRfU1lNQk9MKHJhcl9oYW5kbGVfdG9fYnVzKTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWVtcmFyX2ZvcHMgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLnVubG9ja2VkX2lvY3RsID0gbWVtcmFyX2lvY3RsLAotCS5tbWFwICAgICAgICAgICA9IG1lbXJhcl9tbWFwLAotCS5vcGVuICAgICAgICAgICA9IG1lbXJhcl9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IG1lbXJhcl9yZWxlYXNlLAotCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAotfTsKLQotc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG1lbXJhcl9taXNjZGV2ID0gewotCS5taW5vciA9IE1JU0NfRFlOQU1JQ19NSU5PUiwgICAgLyogZHluYW1pYyBhbGxvY2F0aW9uICovCi0JLm5hbWUgPSAibWVtcmFyIiwgICAgICAgICAgICAgICAvKiAvZGV2L21lbXJhciAqLwotCS5mb3BzID0gJm1lbXJhcl9mb3BzCi19OwotCi1zdGF0aWMgY2hhciBjb25zdCBiYW5uZXJbXSBfX2luaXRkYXRhID0KLQlLRVJOX0lORk8KLQkiSW50ZWwgUkFSIEhhbmRsZXI6ICIgTUVNUkFSX1ZFUiAiIGluaXRpYWxpemVkLlxuIjsKLQotLyoqCi0gKgltZW1yYXJfcmVnaXN0cmF0aW9uX2NhbGxiYWNrCS0JUkFSIG9idGFpbmVkCi0gKglAcmFyOiBSQVIgbnVtYmVyCi0gKgotICoJV2UgaGF2ZSBiZWVuIGdyYW50ZWQgb3duZXJzaGlwIG9mIHRoZSBSQVIuIEFkZCBpdCB0byBvdXIgbWVtb3J5Ci0gKgltYW5hZ2VtZW50IHRhYmxlcwotICovCi0KLXN0YXRpYyBpbnQgbWVtcmFyX3JlZ2lzdHJhdGlvbl9jYWxsYmFjayh1bnNpZ25lZCBsb25nIHJhcikKLXsKLQkvKgotCSAqIFdlIGluaXRpYWxpemUgdGhlIFJBUiBwYXJhbWV0ZXJzIGVhcmx5IG9uIHNvIHRoYXQgd2UgY2FuCi0JICogZGlzY29udGludWUgbWVtcmFyIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgcmVnaXN0cmF0aW9uCi0JICogaWYgc3VpdGFibHkgY29uZmlndXJlZCBSQVJzIGFyZSBub3QgYXZhaWxhYmxlLgotCSAqLwotCXJldHVybiBtZW1yYXJfaW5pdF9yYXJfcmVzb3VyY2VzKHJhciwgbWVtcmFyX21pc2NkZXYubmFtZSk7Ci19Ci0KLS8qKgotICoJbWVtcmFyX2luaXQJLQlpbml0aWFsaXNlIFJBUiBzdXBwb3J0Ci0gKgotICoJSW5pdGlhbGlzZSBzdXBwb3J0IGZvciBSQVIgaGFuZGxlcnMuIFRoaXMgbWF5IGdldCBsb2FkZWQgYmVmb3JlCi0gKgl0aGUgUkFSIHN1cHBvcnQgaXMgYWN0aXZhdGVkLCBidXQgdGhlIGNhbGxiYWNrcyBvbiB0aGUgcmVnaXN0cmF0aW9uCi0gKgl3aWxsIGhhbmRsZSB0aGF0IHNpdHVhdGlvbiBmb3IgdXMgYW55d2F5LgotICovCi0KLXN0YXRpYyBpbnQgX19pbml0IG1lbXJhcl9pbml0KHZvaWQpCi17Ci0JaW50IGVycjsKLQlpbnQgaTsKLQotCXByaW50ayhiYW5uZXIpOwotCi0JLyoKLQkgKiBTb21lIGRlbGF5ZWQgaW5pdGlhbGl6YXRpb24gaXMgcGVyZm9ybWVkIGluIHRoaXMgZHJpdmVyLgotCSAqIE1ha2Ugc3VyZSByZXNvdXJjZXMgdGhhdCBhcmUgdXNlZCBkdXJpbmcgZHJpdmVyIGNsZWFuLXVwCi0JICogKGUuZy4gZHVyaW5nIGRyaXZlcidzIHJlbGVhc2UoKSBmdW5jdGlvbikgYXJlIGZ1bGx5Ci0JICogaW5pdGlhbGl6ZWQgYmVmb3JlIGZpcnN0IHVzZS4gIFRoaXMgaXMgcGFydGljdWxhcmx5Ci0JICogaW1wb3J0YW50IGZvciB0aGUgY2FzZSB3aGVuIHRoZSBkZWxheWVkIGluaXRpYWxpemF0aW9uCi0JICogaXNuJ3QgY29tcGxldGVkLCBsZWF2aW5nIGJlaGluZCBhIHBhcnRpYWxseSBpbml0aWFsaXplZAotCSAqIGRyaXZlci4KLQkgKgotCSAqIFN1Y2ggYSBzY2VuYXJpbyBjYW4gb2NjdXIgd2hlbiBSQVIgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGUKLQkgKiBwbGF0Zm9ybSwgYW5kIHRoZSBkcml2ZXIgaXMgcmVsZWFzZSgpZC4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpICE9IEFSUkFZX1NJWkUobWVtcmFycyk7ICsraSkgewotCQlzdHJ1Y3QgbWVtcmFyX3Jhcl9pbmZvICogY29uc3QgcmFyID0gJm1lbXJhcnNbaV07Ci0JCW11dGV4X2luaXQoJnJhci0+bG9jayk7Ci0JCUlOSVRfTElTVF9IRUFEKCZyYXItPmJ1ZmZlcnMubGlzdCk7Ci0JfQotCi0JZXJyID0gbWlzY19yZWdpc3RlcigmbWVtcmFyX21pc2NkZXYpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQkvKiBOb3cgY2xhaW0gdGhlIHR3byBSQVJzIHdlIHdhbnQgKi8KLQllcnIgPSByZWdpc3Rlcl9yYXIoMCwgbWVtcmFyX3JlZ2lzdHJhdGlvbl9jYWxsYmFjaywgMCk7Ci0JaWYgKGVycikKLQkJZ290byBmYWlsOwotCi0JZXJyID0gcmVnaXN0ZXJfcmFyKDEsIG1lbXJhcl9yZWdpc3RyYXRpb25fY2FsbGJhY2ssIDEpOwotCWlmIChlcnIgPT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBJdCBpcyBwb3NzaWJsZSByYXIgMCByZWdpc3RlcmVkIGFuZCBhbGxvY2F0ZWQgcmVzb3VyY2VzIHRoZW4gcmFyIDEKLQkgICBmYWlsZWQgc28gZG8gYSBmdWxsIHJlc291cmNlIGZyZWUgKi8KLQltZW1yYXJfZmluaV9yYXJfcmVzb3VyY2VzKCk7Ci1mYWlsOgotCW1pc2NfZGVyZWdpc3RlcigmbWVtcmFyX21pc2NkZXYpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qKgotICoJbWVtcmFyX2V4aXQJLQl1bnJlZ2lzdGVyIGFuZCB1bmxvYWQKLSAqCi0gKglVbnJlZ2lzdGVyIHRoZSBkZXZpY2UgYW5kIHRoZW4gdW5sb2FkIGFueSBtYXBwaW5ncyBhbmQgcmVsZWFzZQotICoJdGhlIFJBUiByZXNvdXJjZXMKLSAqLwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgbWVtcmFyX2V4aXQodm9pZCkKLXsKLQltaXNjX2RlcmVnaXN0ZXIoJm1lbXJhcl9taXNjZGV2KTsKLQltZW1yYXJfZmluaV9yYXJfcmVzb3VyY2VzKCk7Ci19Ci0KLQotbW9kdWxlX2luaXQobWVtcmFyX2luaXQpOwotbW9kdWxlX2V4aXQobWVtcmFyX2V4aXQpOwotCi0KLU1PRFVMRV9BVVRIT1IoIk9zc2FtYSBPdGhtYW4gPG9zc2FtYS5vdGhtYW5AaW50ZWwuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbCBSZXN0cmljdGVkIEFjY2VzcyBSZWdpb24gSGFuZGxlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX1ZFUlNJT04oTUVNUkFSX1ZFUik7Ci0KLQotCi0vKgotICBMb2NhbCBWYXJpYWJsZXM6Ci0gICAgYy1maWxlLXN0eWxlOiAibGludXgiCi0gIEVuZDoKLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbXNtL21kcDRfb3ZlcmxheS5jIGIvZHJpdmVycy9zdGFnaW5nL21zbS9tZHA0X292ZXJsYXkuYwppbmRleCBkZTI4NGMyLi5iOWFjZjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbXNtL21kcDRfb3ZlcmxheS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tc20vbWRwNF9vdmVybGF5LmMKQEAgLTY5Niw3ICs2OTYsNyBAQAogCXN0YWdlID0gcGlwZS0+bWl4ZXJfc3RhZ2U7CiAJbWl4ZXIgPSBwaXBlLT5taXhlcl9udW07CiAKLQlpZiAocGlwZSAhPSBjdHJsLT5zdGFnZVttaXhlcl1bc3RhZ2VdKQkvKiBub3QgcnVuaW5nICovCisJaWYgKHBpcGUgIT0gY3RybC0+c3RhZ2VbbWl4ZXJdW3N0YWdlXSkJLyogbm90IHJ1bm5pbmcgKi8KIAkJcmV0dXJuOwogCiAJLyogTURQX0xBWUVSTUlYRVJfSU5fQ0ZHLCBzaGFyZCBieSBib3RoIG1peGVyIDAgYW5kIDEgICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbXNtL21kcF9wcHBfZHEuYyBiL2RyaXZlcnMvc3RhZ2luZy9tc20vbWRwX3BwcF9kcS5jCmluZGV4IDNkYzFjMGMuLjNhNjg3YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tc20vbWRwX3BwcF9kcS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tc20vbWRwX3BwcF9kcS5jCkBAIC0yMDAsNyArMjAwLDcgQEAKIAkJbXNtX2ZiX2Vuc3VyZV9tZW1fY29oZXJlbmN5X2FmdGVyX2RtYShqb2ItPmluZm8sICZqb2ItPnJlcSwgMSk7CiAKIAkJLyogU2NoZWR1bGUgam9icyBmb3IgY2xlYW51cAotCQkgKiBBIHNlcGVyYXRlIHdvcmtlciB0aHJlYWQgZG9lcyB0aGlzICovCisJCSAqIEEgc2VwYXJhdGUgd29ya2VyIHRocmVhZCBkb2VzIHRoaXMgKi8KIAkJcXVldWVfZGVsYXllZF93b3JrKG1kcF9wcHBfZGpvYl9jbG5yLCAmam9iLT5jbGVhbmVyLAogCQkJbWRwX3RpbWVyX2R1cmF0aW9uKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbXNtL21zbV9mYi5jIGIvZHJpdmVycy9zdGFnaW5nL21zbS9tc21fZmIuYwppbmRleCBhMmYyOWQ0Li5lN2VmODM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbXNtL21zbV9mYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tc20vbXNtX2ZiLmMKQEAgLTg1OSw3ICs4NTksNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCU1TTV9GQl9FUlIoIm1zbV9mYl9pbml0OiBmYiAlZCB1bmtvd24gaW1hZ2UgdHlwZSFcbiIsCisJCU1TTV9GQl9FUlIoIm1zbV9mYl9pbml0OiBmYiAlZCB1bmtub3duIGltYWdlIHR5cGUhXG4iLAogCQkJICAgbWZkLT5pbmRleCk7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtMTc5Myw5ICsxNzkzLDkgQEAKIC8qCiAgKiBOT1RFOiBUaGUgdXNlcnNwYWNlIGlzc3VlcyBibGl0IG9wZXJhdGlvbnMgaW4gYSBzZXF1ZW5jZSwgdGhlIHNlcXVlbmNlCiAgKiBzdGFydCB3aXRoIGEgb3BlcmF0aW9uIG1hcmtlZCBTVEFSVCBhbmQgZW5kcyBpbiBhbiBvcGVyYXRpb24gbWFya2VkCi0gKiBFTkQuIEl0IGlzIGd1cmFudGVlZCBieSB0aGUgdXNlcnNwYWNlIHRoYXQgYWxsIHRoZSBibGl0IG9wZXJhdGlvbnMKKyAqIEVORC4gSXQgaXMgZ3VhcmFudGVlZCBieSB0aGUgdXNlcnNwYWNlIHRoYXQgYWxsIHRoZSBibGl0IG9wZXJhdGlvbnMKICAqIGJldHdlZW4gU1RBUlQgYW5kIEVORCBhcmUgb25seSB3aXRoaW4gdGhlIHJlZ2lvbnMgb2YgYXJlYXMgZGVzaWduYXRlZAotICogYnkgdGhlIFNUQVJUIGFuZCBFTkQgb3BlcmF0aW9ucyBhbmQgdGhhdCB0aGUgdXNlcnNwYWNlIGRvZXNudCBtb2RpZnkKKyAqIGJ5IHRoZSBTVEFSVCBhbmQgRU5EIG9wZXJhdGlvbnMgYW5kIHRoYXQgdGhlIHVzZXJzcGFjZSBkb2Vzbid0IG1vZGlmeQogICogdGhvc2UgYXJlYXMuIEhlbmNlIGl0IHdvdWxkIGJlIGVub3VnaCB0byBwZXJmb3JtIGJhcnJpZXIvY2FjaGUgb3BlcmF0aW9ucwogICogb25seSBvbiB0aGUgU1RBUlQgYW5kIEVORCBvcGVyYXRpb25zLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtY21kLXF1ZXVlLmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtY21kLXF1ZXVlLmgKaW5kZXggNTlkMjIxNC4uNjE0NjUzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LWNtZC1xdWV1ZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1jbWQtcXVldWUuaApAQCAtMjE0LDcgKzIxNCw3IEBACiAJLyoKIAkgKiBXYXJuaW5nOiBUaGlzIGNvZGUgY3VycmVudGx5IG9ubHkgd29ya3Mgd2l0aCBkZXZpY2VzIHRoYXQKIAkgKiBoYXZlIDI1NiBxdWV1ZXMgb3IgbGVzcy4gRGV2aWNlcyB3aXRoIG1vcmUgdGhhbiAxNiBxdWV1ZXMKLQkgKiBhcmUgbGF5ZWQgb3V0IGluIG1lbW9yeSB0byBhbGxvdyBjb3JlcyBxdWljayBhY2Nlc3MgdG8KKwkgKiBhcmUgbGFpZCBvdXQgaW4gbWVtb3J5IHRvIGFsbG93IGNvcmVzIHF1aWNrIGFjY2VzcyB0bwogCSAqIGV2ZXJ5IDE2dGggcXVldWUuIFRoaXMgcmVkdWNlcyBjYWNoZSB0aHJhc2hpbmcgd2hlbiB5b3UgYXJlCiAJICogcnVubmluZyAxNiBxdWV1ZXMgcGVyIHBvcnQgdG8gc3VwcG9ydCBsb2NrbGVzcyBvcGVyYXRpb24uCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtZnBhLmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtZnBhLmgKaW5kZXggNTBhOGM5MS4uMWYwNGY5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LWZwYS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1mcGEuaApAQCAtMTk1LDcgKzE5NSw3IEBACiAJY3ZteF9mcGFfaW9iZG1hX2RhdGFfdCBkYXRhOwogCiAJLyoKLQkgKiBIYXJkd2FyZSBvbmx5IHVzZXMgNjQgYml0IGFsbGlnbmVkIGxvY2F0aW9ucywgc28gY29udmVydAorCSAqIEhhcmR3YXJlIG9ubHkgdXNlcyA2NCBiaXQgYWxpZ25lZCBsb2NhdGlvbnMsIHNvIGNvbnZlcnQKIAkgKiBmcm9tIGJ5dGUgYWRkcmVzcyB0byA2NC1iaXQgaW5kZXgKIAkgKi8KIAlkYXRhLnMuc2NyYWRkciA9IHNjcl9hZGRyID4+IDM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtaGVscGVyLWJvYXJkLmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtaGVscGVyLWJvYXJkLmgKaW5kZXggNjExYThlMC4uYjQ2NWJlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LWhlbHBlci1ib2FyZC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1oZWxwZXItYm9hcmQuaApAQCAtODEsNyArODEsNyBAQAogICogQHBoeV9hZGRyOiAgVGhlIGFkZHJlc3Mgb2YgdGhlIFBIWSB0byBwcm9ncmFtCiAgKiBAbGlua19mbGFnczoKICAqICAgICAgICAgICAgICAgICAgRmxhZ3MgdG8gY29udHJvbCBhdXRvbmVnb3RpYXRpb24uICBCaXQgMCBpcyBhdXRvbmVnb3RpYXRpb24KLSAqICAgICAgICAgICAgICAgICAgZW5hYmxlL2Rpc2FibGUgdG8gbWFpbnRhaW4gYmFja3dhcmUgY29tcGF0YWJpbGl0eS4KKyAqICAgICAgICAgICAgICAgICAgZW5hYmxlL2Rpc2FibGUgdG8gbWFpbnRhaW4gYmFja3dhcmUgY29tcGF0aWJpbGl0eS4KICAqIEBsaW5rX2luZm86IExpbmsgc3BlZWQgdG8gcHJvZ3JhbS4gSWYgdGhlIHNwZWVkIGlzIHplcm8gYW5kIGF1dG9uZWdvdGlhdGlvbgogICogICAgICAgICAgICAgICAgICBpcyBlbmFibGVkLCBhbGwgcG9zc2libGUgbmVnb3RpYXRpb24gc3BlZWRzIGFyZSBhZHZlcnRpc2VkLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1oZWxwZXItdXRpbC5jIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LWhlbHBlci11dGlsLmMKaW5kZXggNDFlZjhhNC4uMTMxMTgyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LWhlbHBlci11dGlsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LWhlbHBlci11dGlsLmMKQEAgLTM2Miw3ICszNjIsNyBAQAogfQogCiAvKioKLSAqIFJldHVybnMgdGhlIElQRC9QS08gcG9ydCBudW1iZXIgZm9yIGEgcG9ydCBvbiB0ZWggZ2l2ZW4KKyAqIFJldHVybnMgdGhlIElQRC9QS08gcG9ydCBudW1iZXIgZm9yIGEgcG9ydCBvbiB0aGUgZ2l2ZW4KICAqIGludGVyZmFjZS4KICAqCiAgKiBAaW50ZXJmYWNlOiBJbnRlcmZhY2UgdG8gdXNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtaGVscGVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtaGVscGVyLmMKaW5kZXggNTkxNTA2Ni4uZTljNWM4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LWhlbHBlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1oZWxwZXIuYwpAQCAtNjkxLDcgKzY5MSw3IEBACiAKIAkJaWYgKCFyZXRyeV9jbnQpCiAJCQljdm14X2RwcmludGYoIldBUk5JTkc6IEZJWF9JUERfUFRSX0FMSUdOTUVOVCAiCi0JCQkJICAgICAiZ2V0X3dvcmsoKSB0aW1lb3V0IG9jY3VyZWQuXG4iKTsKKwkJCQkgICAgICJnZXRfd29yaygpIHRpbWVvdXQgb2NjdXJyZWQuXG4iKTsKIAogCQkvKiBGcmVlIHBhY2tldCAqLwogCQlpZiAod29yaykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1tZGlvLmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtbWRpby5oCmluZGV4IGY0NWRjNDkuLmQ4OGFiOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1tZGlvLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LW1kaW8uaApAQCAtMjU0LDcgKzI1NCw3IEBACiAjZGVmaW5lIE1ESU9fQ0xBVVNFXzQ1X1JFQURfSU5DIDIKICNkZWZpbmUgTURJT19DTEFVU0VfNDVfUkVBRCAgICAgMwogCi0vKiBNTUQgaWRlbnRpZmllcnMsIG1vc3RseSBmb3IgYWNjZXNzaW5nIGRldmljZXMgd2l0aGluZyBYRU5QQUsgbW9kdWxlcy4gKi8KKy8qIE1NRCBpZGVudGlmaWVycywgbW9zdGx5IGZvciBhY2Nlc3NpbmcgZGV2aWNlcyB3aXRoaW4gWEVOUEFLIG1vZHVsZXMuICovCiAjZGVmaW5lIENWTVhfTU1EX0RFVklDRV9QTUFfUE1EICAgICAgMQogI2RlZmluZSBDVk1YX01NRF9ERVZJQ0VfV0lTICAgICAgICAgIDIKICNkZWZpbmUgQ1ZNWF9NTURfREVWSUNFX1BDUyAgICAgICAgICAzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtcGtvLmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtcGtvLmgKaW5kZXggZjA2OGMxOS4uZGUzNDEyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LXBrby5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1wa28uaApAQCAtOTgsNyArOTgsNyBAQAogCS8qCiAJICogUEtPIGRvZXNuJ3QgZG8gYW55IGxvY2tpbmcuIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUKIAkgKiBhcHBsaWNhdGlvbiB0byBtYWtlIHN1cmUgdGhhdCBubyBvdGhlciBjb3JlIGlzIGFjY2Vzc2luZwotCSAqIHRoZSBzYW1lIHF1ZXVlIGF0IHRoZSBzbWFlIHRpbWUKKwkgKiB0aGUgc2FtZSBxdWV1ZSBhdCB0aGUgc2FtZSB0aW1lCiAJICovCiAJQ1ZNWF9QS09fTE9DS19OT05FID0gMCwKIAkvKgpAQCAtMzI0LDcgKzMyNCw3IEBACiAgKiAtIENWTVhfUEtPX0xPQ0tfTk9ORQogICogICAgICAtIFBLTyBkb2Vzbid0IGRvIGFueSBsb2NraW5nLiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkKICAqICAgICAgICAgIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBtYWtlIHN1cmUgdGhhdCBubyBvdGhlciBjb3JlCi0gKiAgICAgICAgICBpcyBhY2Nlc3NpbmcgdGhlIHNhbWUgcXVldWUgYXQgdGhlIHNtYWUgdGltZS4KKyAqICAgICAgICAgIGlzIGFjY2Vzc2luZyB0aGUgc2FtZSBxdWV1ZSBhdCB0aGUgc2FtZSB0aW1lLgogICogLSBDVk1YX1BLT19MT0NLX0FUT01JQ19UQUcKICAqICAgICAgLSBQS08gcGVyZm9ybXMgYW4gYXRvbWljIHRhZ3N3aXRjaCB0byBpbnN1cmUgZXhjbHVzaXZlCiAgKiAgICAgICAgICBhY2Nlc3MgdG8gdGhlIG91dHB1dCBxdWV1ZS4gVGhpcyB3aWxsIG1haW50YWluCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtcG93LmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtcG93LmgKaW5kZXggYmY5ZTA2OS4uOTk5YWVmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LXBvdy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1wb3cuaApAQCAtMTQ5Miw4ICsxNDkyLDggQEAKIC8qKgogICogU3dpdGNoIHRvIGEgTlVMTCB0YWcsIHdoaWNoIGVuZHMgYW55IG9yZGVyaW5nIG9yCiAgKiBzeW5jaHJvbml6YXRpb24gcHJvdmlkZWQgYnkgdGhlIFBPVyBmb3IgdGhlIGN1cnJlbnQKLSAqIHdvcmsgcXVldWUgZW50cnkuICBUaGlzIG9wZXJhdGlvbiBjb21wbGV0ZXMgaW1tZWRpYXRseSwKLSAqIHNvIGNvbXBsZXRldGlvbiBzaG91bGQgbm90IGJlIHdhaXRlZCBmb3IuCisgKiB3b3JrIHF1ZXVlIGVudHJ5LiAgVGhpcyBvcGVyYXRpb24gY29tcGxldGVzIGltbWVkaWF0ZWx5LAorICogc28gY29tcGxldGlvbiBzaG91bGQgbm90IGJlIHdhaXRlZCBmb3IuCiAgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgTk9UIHdhaXQgZm9yIHByZXZpb3VzIHRhZyBzd2l0Y2hlcyB0byBjb21wbGV0ZSwKICAqIHNvIHRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCBhbnkgcHJldmlvdXMgdGFnIHN3aXRjaGVzIGhhdmUgY29tcGxldGVkLgogICovCkBAIC0xNTMyLDggKzE1MzIsOCBAQAogLyoqCiAgKiBTd2l0Y2ggdG8gYSBOVUxMIHRhZywgd2hpY2ggZW5kcyBhbnkgb3JkZXJpbmcgb3IKICAqIHN5bmNocm9uaXphdGlvbiBwcm92aWRlZCBieSB0aGUgUE9XIGZvciB0aGUgY3VycmVudAotICogd29yayBxdWV1ZSBlbnRyeS4gIFRoaXMgb3BlcmF0aW9uIGNvbXBsZXRlcyBpbW1lZGlhdGx5LAotICogc28gY29tcGxldGV0aW9uIHNob3VsZCBub3QgYmUgd2FpdGVkIGZvci4KKyAqIHdvcmsgcXVldWUgZW50cnkuICBUaGlzIG9wZXJhdGlvbiBjb21wbGV0ZXMgaW1tZWRpYXRlbHksCisgKiBzbyBjb21wbGV0aW9uIHNob3VsZCBub3QgYmUgd2FpdGVkIGZvci4KICAqIFRoaXMgZnVuY3Rpb24gd2FpdHMgZm9yIGFueSBwZW5kaW5nIHRhZyBzd2l0Y2hlcyB0byBjb21wbGV0ZQogICogYmVmb3JlIHJlcXVlc3RpbmcgdGhlIHN3aXRjaCB0byBOVUxMLgogICovCkBAIC0xNjcyLDcgKzE2NzIsNyBAQAogCiAvKioKICAqIFBlcmZvcm1zIGEgdGFnIHN3aXRjaCBhbmQgdGhlbiBhbiBpbW1lZGlhdGUgZGVzY2hlZHVsZS4gVGhpcyBjb21wbGV0ZXMKLSAqIGltbWVkaWF0bHksIHNvIGNvbXBsZXRpb24gbXVzdCBub3QgYmUgd2FpdGVkIGZvci4gIFRoaXMgZnVuY3Rpb24gZG9lcyBOT1QKKyAqIGltbWVkaWF0ZWx5LCBzbyBjb21wbGV0aW9uIG11c3Qgbm90IGJlIHdhaXRlZCBmb3IuICBUaGlzIGZ1bmN0aW9uIGRvZXMgTk9UCiAgKiB1cGRhdGUgdGhlIHdxZSBpbiBEUkFNIHRvIG1hdGNoIGFyZ3VtZW50cy4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgTk9UIHdhaXQgZm9yIGFueSBwcmlvciB0YWcgc3dpdGNoZXMgdG8gY29tcGxldGUsIHNvIHRoZQpAQCAtMTc1OCw3ICsxNzU4LDcgQEAKIAogLyoqCiAgKiBQZXJmb3JtcyBhIHRhZyBzd2l0Y2ggYW5kIHRoZW4gYW4gaW1tZWRpYXRlIGRlc2NoZWR1bGUuIFRoaXMgY29tcGxldGVzCi0gKiBpbW1lZGlhdGx5LCBzbyBjb21wbGV0aW9uIG11c3Qgbm90IGJlIHdhaXRlZCBmb3IuICBUaGlzIGZ1bmN0aW9uIGRvZXMgTk9UCisgKiBpbW1lZGlhdGVseSwgc28gY29tcGxldGlvbiBtdXN0IG5vdCBiZSB3YWl0ZWQgZm9yLiAgVGhpcyBmdW5jdGlvbiBkb2VzIE5PVAogICogdXBkYXRlIHRoZSB3cWUgaW4gRFJBTSB0byBtYXRjaCBhcmd1bWVudHMuCiAgKgogICogVGhpcyBmdW5jdGlvbiB3YWl0cyBmb3IgYW55IHByaW9yIHRhZyBzd2l0Y2hlcyB0byBjb21wbGV0ZSwgc28gdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXV0aWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdXRpbC5oCmluZGV4IDIzNDY3NTYuLmM3NDVhNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdXRpbC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdXRpbC5oCkBAIC01NSw3ICs1NSw3IEBACiAJCXJldHVybiAyOwogCWVsc2UgaWYgKGlwZF9wb3J0IDwgNDApCS8qIEludGVyZmFjZSAzIGZvciBsb29wYmFjayAqLwogCQlyZXR1cm4gMzsKLQllbHNlIGlmIChpcGRfcG9ydCA9PSA0MCkJLyogTm9uIGV4aXN0YW50IGludGVyZmFjZSBmb3IgUE9XMCAqLworCWVsc2UgaWYgKGlwZF9wb3J0ID09IDQwKQkvKiBOb24gZXhpc3RlbnQgaW50ZXJmYWNlIGZvciBQT1cwICovCiAJCXJldHVybiA0OwogCWVsc2UKIAkJcGFuaWMoIklsbGVnYWwgaXBkX3BvcnQgJWQgcGFzc2VkIHRvIElOVEVSRkFDRVxuIiwgaXBkX3BvcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9LY29uZmlnCmluZGV4IGYxMDgyZjUuLmIwNTMwNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL0tjb25maWcKQEAgLTksNyArOSw3IEBACiAKIGNvbmZpZyBGQl9PTFBDX0RDT05fMQogCWJvb2wgIk9MUEMgWE8tMSBEQ09OIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBGQl9PTFBDX0RDT04KKwlkZXBlbmRzIG9uIEZCX09MUENfRENPTiAmJiBHUElPX0NTNTUzNQogCWRlZmF1bHQgeQogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgRENPTiBpbiBYTy0xIG1vZGVsIGxhcHRvcHMuICBUaGUga2VybmVsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL29scGNfZGNvbl94b18xLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL29scGNfZGNvbl94b18xLmMKaW5kZXggYjE1NGJlNy4uMjJjMDRlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb25feG9fMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uX3hvXzEuYwpAQCAtMTIsNiArMTIsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvY3M1NTM1Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL29scGMuaD4KIAogI2luY2x1ZGUgIm9scGNfZGNvbi5oIgpAQCAtODAsNyArODEsNyBAQAogCWxvYiAmPSB+KDEgPDwgRENPTl9JUlEpOwogCW91dGIobG9iLCAweDRkMCk7CiAKLQkvKiBSZWdpc3RlciB0aGUgaW50ZXJ1cHQgaGFuZGxlciAqLworCS8qIFJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAqLwogCWlmIChyZXF1ZXN0X2lycShEQ09OX0lSUSwgJmRjb25faW50ZXJydXB0LCAwLCAiRENPTiIsIGRjb24pKSB7CiAJCXByaW50ayhLRVJOX0VSUiAib2xwYy1kY29uOiBmYWlsZWQgdG8gcmVxdWVzdCBEQ09OJ3MgaXJxXG4iKTsKIAkJZ290byBlcnJfcmVxX2lycTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uX3hvXzFfNS5jIGIvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb25feG9fMV81LmMKaW5kZXggZTIxM2I2My4uN2FhOWIxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb25feG9fMV81LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb25feG9fMV81LmMKQEAgLTcsNiArNyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxhc20vb2xwYy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2NyeXB0by5jIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2NyeXB0by5jCmluZGV4IDY1NDA4NjQuLjVjY2EyNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9jcnlwdG8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvY3J5cHRvLmMKQEAgLTc0NSw3ICs3NDUsNyBAQAogCiAJLyoKIAkgKiBBdCB0aGlzIHBvaW50IE5FVEZTX0NBUEFCSUxJVElFUyByZXNwb25zZSBjb21tYW5kCi0JICogc2hvdWxkIHNldHVwIHN1cGVyYmxvY2sgaW4gYSB3YXksIHdoaWNoIGlzIGFjY2VwdGlibGUKKwkgKiBzaG91bGQgc2V0dXAgc3VwZXJibG9jayBpbiBhIHdheSwgd2hpY2ggaXMgYWNjZXB0YWJsZQogCSAqIGZvciBib3RoIGNsaWVudCBhbmQgc2VydmVyLCBzbyBpZiBzZXJ2ZXIgcmVmdXNlcyBjb25uZWN0aW9uLAogCSAqIGl0IHdpbGwgc2VuZCBlcnJvciBpbiB0cmFuc2FjdGlvbiByZXNwb25zZS4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9xdWF0ZWNoX3VzYjIvcXVhdGVjaF91c2IyLmMgYi9kcml2ZXJzL3N0YWdpbmcvcXVhdGVjaF91c2IyL3F1YXRlY2hfdXNiMi5jCmluZGV4IGM0NWIwOWUuLmNhMDk4Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9xdWF0ZWNoX3VzYjIvcXVhdGVjaF91c2IyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3F1YXRlY2hfdXNiMi9xdWF0ZWNoX3VzYjIuYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAgKiB2YWx1ZSBvZiB0aGUgbGluZSBzdGF0dXMgZmxhZ3MgZnJvbSB0aGUgcG9ydAogICogQHNoYWRvd01TUjogTGFzdCByZWNlaXZlZCBzdGF0ZSBvZiB0aGUgbW9kZW0gc3RhdHVzIHJlZ2lzdGVyLCBob2xkcwogICogdGhlIHZhbHVlIG9mIHRoZSBtb2RlbSBzdGF0dXMgcmVjZWl2ZWQgZnJvbSB0aGUgcG9ydAotICogQHJjdl9mbHVzaDogRmxhZyBpbmRpY2F0aW5nIHRoYXQgYSByZWNlaXZlIGZsdXNoIGhhcyBvY2N1cmVkIG9uCisgKiBAcmN2X2ZsdXNoOiBGbGFnIGluZGljYXRpbmcgdGhhdCBhIHJlY2VpdmUgZmx1c2ggaGFzIG9jY3VycmVkIG9uCiAgKiB0aGUgaGFyZHdhcmUuCiAgKiBAeG1pdF9mbHVzaDogRmxhZyBpbmRpY2F0aW5nIHRoYXQgYSB0cmFuc21pdCBmbHVzaCBoYXMgYmVlbiBwcm9jZXNzZWQgYnkKICAqIHRoZSBoYXJkd2FyZS4KQEAgLTE1Niw3ICsxNTYsNyBAQAogICogaW5jbHVkZXMgdGhlIHNpemUgKGV4Y2x1ZGluZyBoZWFkZXIpIG9mIFVSQnMgdGhhdCBoYXZlIGJlZW4gc3VibWl0dGVkIGJ1dAogICogaGF2ZSBub3QgeWV0IGJlZW4gc2VudCB0byB0byB0aGUgZGV2aWNlLCBhbmQgYnl0ZXMgdGhhdCBoYXZlIGJlZW4gc2VudCBvdXQKICAqIG9mIHRoZSBwb3J0IGJ1dCBub3QgeWV0IHJlcG9ydGVkIHNlbnQgYnkgdGhlICJ4bWl0X2VtcHR5IiBtZXNzYWdlcyAod2hpY2gKLSAqIGluZGljYXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBlYWNoIHRpbWUgdGhleSBhcmUgcmVjaWV2ZWQsIGRlc3BpdGUgdGhlCisgKiBpbmRpY2F0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgZWFjaCB0aW1lIHRoZXkgYXJlIHJlY2VpdmVkLCBkZXNwaXRlIHRoZQogICogbWlzbGVhZGluZyBuYW1lKS4KICAqIC0gU3RhcnRzIGF0IHplcm8gd2hlbiBwb3J0IGlzIGluaXRpYWxpc2VkLgogICogLSBpcyBpbmNyZW1lbnRlZCBieSB0aGUgc2l6ZSBvZiB0aGUgZGF0YSB0byBiZSB3cml0dGVuIChubyBoZWFkZXJzKQpAQCAtNjQ5LDcgKzY0OSw3IEBACiAJLyogYWx0aG91Z2ggdGhlIFVTQiBzaWRlIGlzIG5vdyBlbXB0eSwgdGhlIFVBUlQgaXRzZWxmIG1heQogCSAqIHN0aWxsIGJlIHB1c2hpbmcgY2hhcmFjdGVycyBvdXQgb3ZlciB0aGUgbGluZSwgc28gd2UgaGF2ZSB0bwogCSAqIHdhaXQgdGVzdGluZyB0aGUgYWN0dWFsIGxpbmUgc3RhdHVzIHVudGlsIHRoZSBsaW5lcyBjaGFuZ2UKLQkgKiBpbmRpY2F0aW5nIHRoYXQgdGhlIGRhdGEgaXMgZG9uZSB0cmFuc2ZlcmluZy4gKi8KKwkgKiBpbmRpY2F0aW5nIHRoYXQgdGhlIGRhdGEgaXMgZG9uZSB0cmFuc2ZlcnJpbmcuICovCiAJLyogRklYTUU6IHNsb3cgdGhpcyBwb2xsaW5nIGRvd24gc28gaXQgZG9lc24ndCBydW4gdGhlIFVTQiBidXMgZmxhdCBvdXQKIAkgKiBpZiBpdCBhY3R1YWxseSBoYXMgdG8gc3BlbmQgYW55IHRpbWUgaW4gdGhpcyBsb29wICh3aGljaCBpdCBub3JtYWxseQogCSAqIGRvZXNuJ3QgYmVjYXVzZSB0aGUgYnVmZmVyIGlzIG5lYXJseSBlbXB0eSkgKi8KQEAgLTcyNiw3ICs3MjYsNyBAQAogCQlyZXR1cm4gMDsKIAl9IGVsc2UgaWYgKHBvcnRfZXh0cmEtPnR4X3BlbmRpbmdfYnl0ZXMgPj0gUVQyX0ZJRk9fREVQVEgpIHsKIAkJLyogYnVmZmVyIGlzIGZ1bGwgKD09KS4gPiBzaG91bGQgbm90IG9jY3VyLCBidXQgd291bGQgaW5kaWNhdGUKLQkJICogdGhhdCBhbiBvdmVyZmxvdyBoYWQgb2NjdXJlZCAqLworCQkgKiB0aGF0IGFuIG92ZXJmbG93IGhhZCBvY2N1cnJlZCAqLwogCQlkYmcoIiVzKCk6IHBvcnQgdHJhbnNtaXQgYnVmZmVyIGlzIGZ1bGwhIiwgX19mdW5jX18pOwogCQkvKiBzY2hlZHVsZV93b3JrKCZwb3J0LT53b3JrKTsgY29tbWVudGVkIGluIHZlbmRvciBkcml2ZXIgKi8KIAkJcmV0dXJuIDA7CkBAIC04MjMsNyArODIzLDcgQEAKIAkgKiByZWR1Y2UgdGhlIGZyZWUgc3BhY2UgY291bnQgYnkgdGhlIHNpemUgb2YgdGhlIGRpc3BhdGNoZWQgd3JpdGUuCiAJICogV2hlbiBhICJ0cmFuc21pdCBlbXB0eSIgbWVzc2FnZSBjb21lcyBiYWNrIHVwIHRoZSBVU0IgcmVhZCBzdHJlYW0sCiAJICogd2UgZGVjcmVtZW50IHRoZSBjb3VudCBieSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlcG9ydGVkIHNlbnQsIHRodXMKLQkgKiBrZWVwaW5nIHRyYWNrIG9mIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gc2VudCBhbmQgcmVjaWV2ZWQgYnl0ZXMuCisJICoga2VlcGluZyB0cmFjayBvZiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHNlbnQgYW5kIHJlY2VpdmVkIGJ5dGVzLgogCSAqLwogCiAJcm9vbSA9IChRVDJfRklGT19ERVBUSCAtIHBvcnRfZXh0cmEtPnR4X3BlbmRpbmdfYnl0ZXMpOwpAQCAtMTc5NSw3ICsxNzk1LDcgQEAKIAl9CiB9CiAKLS8qKiBAYnJpZWYgUmV0cmVpdmUgdGhlIHZhbHVlIG9mIGEgcmVnaXN0ZXIgZnJvbSB0aGUgZGV2aWNlCisvKiogQGJyaWVmIFJldHJpZXZlIHRoZSB2YWx1ZSBvZiBhIHJlZ2lzdGVyIGZyb20gdGhlIGRldmljZQogICoKICAqIElzc3VlcyBhIEdFVF9SRUdJU1RFUiB2ZW5kb3Itc3BjaWZpYyByZXF1ZXN0IG92ZXIgdGhlIFVTQiBjb250cm9sCiAgKiBwaXBlIHRvIG9idGFpbiBhIHZhbHVlIGJhY2sgZnJvbSBhIHNwZWNpZmljIHJlZ2lzdGVyIG9uIGEgc3BlY2lmaWMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY2hpcC9ydG1wX3BoeS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jaGlwL3J0bXBfcGh5LmgKaW5kZXggOTg0NTRkZi4uYTUyMjIxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jaGlwL3J0bXBfcGh5LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jaGlwL3J0bXBfcGh5LmgKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogCQkJREJHUFJJTlRfRVJSKCJCQlAgd3JpdGUgUiVkPTB4JXggZmFpbC4gQnVzeUNudD0gJWQuYlBDSWNsa09mZiA9ICVkLiBcbiIsIF9JLCBCYnBDc3Iud29yZCwgQnVzeUNudCwgKF9BKS0+YlBDSWNsa09mZik7CVwKIAkJfQkJCQkJCQkJCQkJCQkJCQkJXAogCX0gZWxzZSB7CQkJCQkJCVwKLQkJREJHUFJJTlRfRVJSKCIqKioqKiogQkJQX1dyaXRlX0xhdGNoIEJ1ZmZlciBleGNlZWRzIG1heCBib3VuZHJ5ICoqKioqKiBcbiIpOwlcCisJCURCR1BSSU5UX0VSUigiKioqKioqIEJCUF9Xcml0ZV9MYXRjaCBCdWZmZXIgZXhjZWVkcyBtYXggYm91bmRhcnkgKioqKioqIFxuIik7CVwKIAl9CQkJCQkJCQkJCQkJCQkJCQkJXAogfQogI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vYmFfYWN0aW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9iYV9hY3Rpb24uYwppbmRleCA2MmY2ZjZiLi4xMzNiYzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9iYV9hY3Rpb24uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9iYV9hY3Rpb24uYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCi0jZGVmaW5lIEJBX09SSV9JTklUX1NFUQkJKHBFbnRyeS0+VHhTZXFbVElEXSkJLyoxICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5pdGFsIHNlcXVlbmNlIG51bWJlciBvZiBCQSBzZXNzaW9uICovCisjZGVmaW5lIEJBX09SSV9JTklUX1NFUQkJKHBFbnRyeS0+VHhTZXFbVElEXSkJLyoxICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5pdGlhbCBzZXF1ZW5jZSBudW1iZXIgb2YgQkEgc2Vzc2lvbiAqLwogCiAjZGVmaW5lIE9SSV9TRVNTSU9OX01BWF9SRVRSWQk4CiAjZGVmaW5lIE9SSV9CQV9TRVNTSU9OX1RJTUVPVVQJKDIwMDApCS8qIG1zICovCkBAIC0xNDg3LDcgKzE0ODcsNyBAQAogCiAJCS8qCiAJCSAqIGZsdXNoIGFsbCBwZW5kaW5nIHJlb3JkZXJpbmcgbXBkdXMKLQkJICogYW5kIHJlY2V2aW5nIG1wZHUgdG8gdXBwZXIgbGF5ZXIKKwkJICogYW5kIHJlY2VpdmluZyBtcGR1IHRvIHVwcGVyIGxheWVyCiAJCSAqIG1ha2UgdGNwL2lwIHRvIHRha2UgY2FyZSByZW9yZGVyaW5nIG1lY2hhbmlzbQogCQkgKi8KIAkJLypiYV9yZWZyZXNoX3Jlb3JkZXJpbmdfbXBkdXMocEFkLCBwQkFFbnRyeSk7ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fYWVzLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fYWVzLmMKaW5kZXggYTk5ODc5Yi4uZDcwZDIyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2Flcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9hZXMuYwpAQCAtODU4LDcgKzg1OCw3IEBACiBzdGF0aWMgdWludDMyIEtUMlsyNTZdOwogc3RhdGljIHVpbnQzMiBLVDNbMjU2XTsKIAotLyogcGxhdGZvcm0taW5kZXBlbmRhbnQJMzItYml0IGludGVnZXIgbWFuaXB1bGF0aW9uCW1hY3JvcyAqLworLyogcGxhdGZvcm0taW5kZXBlbmRlbnQJMzItYml0IGludGVnZXIgbWFuaXB1bGF0aW9uCW1hY3JvcyAqLwogCiAjZGVmaW5lCUdFVF9VSU5UMzIobixiLGkpCQkJCQkJXAogewkJCQkJCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9jZmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9jZmcuYwppbmRleCAyNGY0MzkzLi43MjdmNzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fY2ZnLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2NmZy5jCkBAIC0yMjMsNyArMjIzLDcgQEAKICAgICAgICAgcEFkYXB0ZXIJUG9pbnRlciB0byBvdXIgYWRhcHRlcgogICAgICAgICBrZXlTdHJpbmcJV1BBIHByZS1zaGFyZWQga2V5IHN0cmluZwogICAgICAgICBwSGFzaFN0cglTdHJpbmcgdXNlZCBmb3IgcGFzc3dvcmQgaGFzaCBmdW5jdGlvbgotICAgICAgICBoYXNoU3RyTGVuCUxlbmdodCBvZiB0aGUgaGFzaCBzdHJpbmcKKyAgICAgICAgaGFzaFN0ckxlbglMZW5ndGggb2YgdGhlIGhhc2ggc3RyaW5nCiAgICAgICAgIHBQTUtCdWYJCU91dHB1dCBidWZmZXIgb2YgV1BBUFNLIGtleQogCiAgICAgUmV0dXJuOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhLmMKaW5kZXggZjZjMTkzYy4uMzM3OTllMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YS5jCkBAIC0zMzcsNyArMzM3LDcgQEAKIAogCS8qICovCiAJLyogSW4gV01NLVVBUFNELCBtbG1lIGZyYW1lIHNob3VsZCBiZSBzZXQgcHNtIGFzIHBvd2VyIHNhdmluZyBidXQgcHJvYmUgcmVxdWVzdCBmcmFtZSAqLwotCS8qIERhdGEtTnVsbCBwYWNrZXRzIGFsc2UgcGFzcyB0aHJvdWdoIE1NUmVxdWVzdCBpbiBSVDI4NjAsIGhvd2V2ZXIsIHdlIGhvcGUgY29udHJvbCB0aGUgcHNtIGJpdCB0byBwYXNzIEFQU0QgKi8KKwkvKiBEYXRhLU51bGwgcGFja2V0cyBhbHNvIHBhc3MgdGhyb3VnaCBNTVJlcXVlc3QgaW4gUlQyODYwLCBob3dldmVyLCB3ZSBob3BlIGNvbnRyb2wgdGhlIHBzbSBiaXQgdG8gcGFzcyBBUFNEICovCiAvKiAgICAgIGlmICgocEhlYWRlcl84MDJfMTEtPkZDLlR5cGUgIT0gQlRZUEVfREFUQSkgJiYgKHBIZWFkZXJfODAyXzExLT5GQy5UeXBlICE9IEJUWVBFX0NOVEwpKSAqLwogCXsKIAkJaWYgKChwSGVhZGVyXzgwMl8xMS0+RkMuU3ViVHlwZSA9PSBTVUJUWVBFX0FDVElPTikgfHwKQEAgLTE5MzMsNyArMTkzMyw3IEBACiAKIAlpZiAoVHlwZUxlbiA8PSAxNTAwKSB7CS8qIDgwMi4zLCA4MDIuMyBMTEMgKi8KIAkJLyoKLQkJICAgRGVzdE1BQyg2KSArIFNyY01BQyg2KSArIExlbmdodCgyKSArCisJCSAgIERlc3RNQUMoNikgKyBTcmNNQUMoNikgKyBMZW5ndGgoMikgKwogCQkgICBEU0FQKDEpICsgU1NBUCgxKSArIENvbnRyb2woMSkgKwogCQkgICBpZiB0aGUgRFNBUCA9IDB4QUEsIFNTQVA9MHhBQSwgQ29udG9ybCA9IDB4MDMsIGl0IGhhcyBhIDUtYnl0ZXMgU05BUCBoZWFkZXIuCiAJCSAgID0+ICsgU05BUCAoNSwgT3JpZ2luYXRpb25JRCgzKSArIGV0aGVyVHlwZSgyKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhX3BjaS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGFfcGNpLmMKaW5kZXggN2FmNTlmZi4uZjAxYTUxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGFfcGNpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGFfcGNpLmMKQEAgLTQzOCwxMyArNDM4LDEzIEBACiAJLyogQWRkIFJ4IHNpemUgdG8gY2hhbm5lbCBsb2FkIGNvdW50ZXIsIHdlIHNob3VsZCBpZ25vcmUgZXJyb3IgY291bnRzICovCiAJcEFkLT5TdGFDZmcuQ0xCdXN5Qnl0ZXMgKz0gKHBSeEQtPlNETDAgKyAxNCk7CiAKLQkvKiBEcm9wIFRvRHMgcHJvbWlzY291cyBmcmFtZSwgaXQgaXMgb3BlbmVkIGR1ZSB0byBDQ1ggMiBjaGFubmVsIGxvYWQgc3RhdGlzdGljcyAqLworCS8qIERyb3AgVG9EcyBwcm9taXNjdW91cyBmcmFtZSwgaXQgaXMgb3BlbmVkIGR1ZSB0byBDQ1ggMiBjaGFubmVsIGxvYWQgc3RhdGlzdGljcyAqLwogCWlmIChwSGVhZGVyICE9IE5VTEwpIHsKIAkJaWYgKHBIZWFkZXItPkZDLlRvRHMpIHsKIAkJCXJldHVybiAoTkRJU19TVEFUVVNfRkFJTFVSRSk7CiAJCX0KIAl9Ci0JLyogRHJvcCBub3QgVTJNIGZyYW1lcywgY2FudCdzIGRyb3AgaGVyZSBiZWNhdXNlIHdlIHdpbGwgZHJvcCBiZWFjb24gaW4gdGhpcyBjYXNlICovCisJLyogRHJvcCBub3QgVTJNIGZyYW1lcywgY2FuJ3QgZHJvcCBoZXJlIGJlY2F1c2Ugd2Ugd2lsbCBkcm9wIGJlYWNvbiBpbiB0aGlzIGNhc2UgKi8KIAkvKiBJIGFtIGtpbmQgb2YgZG91YnRpbmcgdGhlIFUyTSBiaXQgb3BlcmF0aW9uICovCiAJLyogaWYgKHBSeEQtPlUyTSA9PSAwKSAqLwogCS8qICAgICAgcmV0dXJuKE5ESVNfU1RBVFVTX0ZBSUxVUkUpOyAqLwpAQCAtOTM5LDcgKzkzOSw3IEBACiAJLyogKi8KIAkvKiAqLwogCS8qIEluIFdNTS1VQVBTRCwgbWxtZSBmcmFtZSBzaG91bGQgYmUgc2V0IHBzbSBhcyBwb3dlciBzYXZpbmcgYnV0IHByb2JlIHJlcXVlc3QgZnJhbWUgKi8KLQkvKiBEYXRhLU51bGwgcGFja2V0cyBhbHNlIHBhc3MgdGhyb3VnaCBNTVJlcXVlc3QgaW4gUlQyODYwLCBob3dldmVyLCB3ZSBob3BlIGNvbnRyb2wgdGhlIHBzbSBiaXQgdG8gcGFzcyBBUFNEICovCisJLyogRGF0YS1OdWxsIHBhY2tldHMgYWxzbyBwYXNzIHRocm91Z2ggTU1SZXF1ZXN0IGluIFJUMjg2MCwgaG93ZXZlciwgd2UgaG9wZSBjb250cm9sIHRoZSBwc20gYml0IHRvIHBhc3MgQVBTRCAqLwogCWlmIChwSGVhZGVyXzgwMl8xMS0+RkMuVHlwZSAhPSBCVFlQRV9EQVRBKSB7CiAJCWlmICgocEhlYWRlcl84MDJfMTEtPkZDLlN1YlR5cGUgPT0gU1VCVFlQRV9QUk9CRV9SRVEpCiAJCSAgICB8fCAhKHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQ2FwYWJsZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGFfdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV91c2IuYwppbmRleCA3YzU2YzJmLi44M2E2MmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV91c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV91c2IuYwpAQCAtNzAyLDcgKzcwMiw3IEBACiAJKnBSeFBlbmRpbmcJCQlwZW5kaW5nIHJlY2VpdmVkIHBhY2tldCBmbGFnCiAKIFJldHVybiBWYWx1ZToKLSAgICB0aGUgcmVjaWV2ZWQgcGFja2V0CisgICAgdGhlIHJlY2VpdmVkIHBhY2tldAogCiBOb3RlOgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC04NTAsNyArODUwLDcgQEAKIAkvKiBBZGQgUnggc2l6ZSB0byBjaGFubmVsIGxvYWQgY291bnRlciwgd2Ugc2hvdWxkIGlnbm9yZSBlcnJvciBjb3VudHMgKi8KIAlwQWQtPlN0YUNmZy5DTEJ1c3lCeXRlcyArPSAocFJ4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCArIDE0KTsKIAotCS8qIERyb3AgVG9EcyBwcm9taXNjb3VzIGZyYW1lLCBpdCBpcyBvcGVuZWQgZHVlIHRvIENDWCAyIGNoYW5uZWwgbG9hZCBzdGF0aXN0aWNzICovCisJLyogRHJvcCBUb0RzIHByb21pc2N1b3VzIGZyYW1lLCBpdCBpcyBvcGVuZWQgZHVlIHRvIENDWCAyIGNoYW5uZWwgbG9hZCBzdGF0aXN0aWNzICovCiAJaWYgKHBIZWFkZXItPkZDLlRvRHMpIHsKIAkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIkVycjtGQy5Ub0RzXG4iKSk7CiAJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOwpAQCAtODYwLDcgKzg2MCw3IEBACiAJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJyZWNlaXZlZCBwYWNrZXQgdG9vIGxvbmdcbiIpKTsKIAkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CiAJfQotCS8qIERyb3Agbm90IFUyTSBmcmFtZXMsIGNhbnQncyBkcm9wIGhlcmUgYmVjYXVzZSB3ZSB3aWxsIGRyb3AgYmVhY29uIGluIHRoaXMgY2FzZSAqLworCS8qIERyb3Agbm90IFUyTSBmcmFtZXMsIGNhbid0IGRyb3AgaGVyZSBiZWNhdXNlIHdlIHdpbGwgZHJvcCBiZWFjb24gaW4gdGhpcyBjYXNlICovCiAJLyogSSBhbSBraW5kIG9mIGRvdWJ0aW5nIHRoZSBVMk0gYml0IG9wZXJhdGlvbiAqLwogCS8qIGlmIChwUnhELT5VMk0gPT0gMCkgKi8KIAkvKiAgICAgIHJldHVybihORElTX1NUQVRVU19GQUlMVVJFKTsgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9tYWNfcGNpLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fbWFjX3BjaS5jCmluZGV4IDIxZWVkMjUuLmQwNmYwYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9tYWNfcGNpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX21hY19wY2kuYwpAQCAtMTQ0Niw3ICsxNDQ2LDcgQEAKIAkgICBwQWQtPkNoZWNrRG1hQnVzeUNvdW50ID0gMDsKIAkgICB9CiAJICovCi0vKktIIERlYnVnOk15IG9yaWdpbmFsIGNvZGVzIGhhdmUgdGhlIGZvbGx3b2luZyBjb2RlcywgYnV0IGN1cnJlY250IGNvZGVzIGRvIG5vdCBoYXZlIGl0LiAqLworLypLSCBEZWJ1ZzpNeSBvcmlnaW5hbCBjb2RlcyBoYXZlIHRoZSBmb2xsb3dpbmcgY29kZXMsIGJ1dCBjdXJyZWNudCBjb2RlcyBkbyBub3QgaGF2ZSBpdC4gKi8KIC8qIERpc2FibGUgZm9yIHN0YWJpbGl0eS4gSWYgUENJRSBMaW5rIENvbnRyb2wgaXMgbW9kaWZpZWQgZm9yIGFkdmFuY2UgcG93ZXIgc2F2ZSwgcmUtY292ZXJ5IHRoaXMgY29kZSBzZWdtZW50LiAqLwogCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9TWVNfQ1RSTCwgMHgxMjgwKTsKIC8qT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0NMS1NFTEVDVF80ME1IWik7ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fc2FuaXR5LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fc2FuaXR5LmMKaW5kZXggNmIwMDNjOS4uM2JmYjRhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX3Nhbml0eS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9zYW5pdHkuYwpAQCAtNjcsNyArNjcsNyBAQAogCiAJaWYgKChNc2dMZW4gIT0gc2l6ZW9mKHN0cnVjdCBydF9tbG1lX2FkZGJhX3JlcSkpKSB7CiAJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAotCQkJICgiTWxtZUFkZEJBUmVxU2FuaXR5IGZhaWwgLSBtZXNzYWdlIGxlbmdodCBub3QgY29ycmVjdC5cbiIpKTsKKwkJCSAoIk1sbWVBZGRCQVJlcVNhbml0eSBmYWlsIC0gbWVzc2FnZSBsZW5ndGggbm90IGNvcnJlY3QuXG4iKSk7CiAJCXJldHVybiBGQUxTRTsKIAl9CiAKQEAgLTEwNCw3ICsxMDQsNyBAQAogCiAJaWYgKChNc2dMZW4gIT0gc2l6ZW9mKHN0cnVjdCBydF9tbG1lX2RlbGJhX3JlcSkpKSB7CiAJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAotCQkJICgiTWxtZURlbEJBUmVxU2FuaXR5IGZhaWwgLSBtZXNzYWdlIGxlbmdodCBub3QgY29ycmVjdC5cbiIpKTsKKwkJCSAoIk1sbWVEZWxCQVJlcVNhbml0eSBmYWlsIC0gbWVzc2FnZSBsZW5ndGggbm90IGNvcnJlY3QuXG4iKSk7CiAJCXJldHVybiBGQUxTRTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9zeW5jLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fc3luYy5jCmluZGV4IGY4NDE5NGQuLmFlZmUxYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9zeW5jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX3N5bmMuYwpAQCAtNjk0LDcgKzY5NCw3IEBACiAJCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKIAkJCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CiAJCX0KLQkJLyogRm9yIFNDQU5fQ0lTQ09fUEFTU0lWRSwgZG8gbm90aGluZyBhbmQgc2lsZW50bHkgd2FpdCBmb3IgYmVhY29uIG9yIG90aGVyIHByb2JlIHJlcG9uc2UgKi8KKwkJLyogRm9yIFNDQU5fQ0lTQ09fUEFTU0lWRSwgZG8gbm90aGluZyBhbmQgc2lsZW50bHkgd2FpdCBmb3IgYmVhY29uIG9yIG90aGVyIHByb2JlIHJlc3BvbnNlICovCiAKIAkJcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9IFNDQU5fTElTVEVOOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV93cGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV93cGEuYwppbmRleCAwMDQwZjQ1Li42MTZlYmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fd3BhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX3dwYS5jCkBAIC0xMjIyLDcgKzEyMjIsNyBAQAogCiAJTm90ZToKIAkJQWxsIHRoZXNlIGNvbnN0YW50cyBhcmUgZGVmaW5lZCBpbiB3cGEuaAotCQlGb3Igc3VwcGxpY2FudCwgdGhlcmUgaXMgb25seSBFQVBPTCBLZXkgbWVzc2FnZSBhdmFsaWFibGUKKwkJRm9yIHN1cHBsaWNhbnQsIHRoZXJlIGlzIG9ubHkgRUFQT0wgS2V5IG1lc3NhZ2UgYXZhaWxhYmxlCiAKIAk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCkBAIC0xMjY3LDcgKzEyNjcsNyBAQAogCQlpbnQJCXByZWZpeF9sZW4JLQl0aGUgbGVuZ3RoIG9mIHRoZSBsYWJlbAogCQl1OAkqZGF0YQkJLQlhIHNwZWNpZmljIGRhdGEgd2l0aCB2YXJpYWJsZSBsZW5ndGgKIAkJaW50CQlkYXRhX2xlbgktCXRoZSBsZW5ndGggb2YgYSBzcGVjaWZpYyBkYXRhCi0JCWludAkJbGVuCQkJLQl0aGUgb3V0cHV0IGxlbmdodAorCQlpbnQJCWxlbgkJCS0JdGhlIG91dHB1dCBsZW5ndGgKIAogCVJldHVybiBWYWx1ZToKIAkJdTgJKm91dHB1dAkJLQl0aGUgY2FsY3VsYXRlZCByZXN1bHQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL21sbWUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL21sbWUuYwppbmRleCBkOWMzZmQ1Li5lNDhlYWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9tbG1lLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vbWxtZS5jCkBAIC02MzIsNyArNjMyLDcgQEAKIAkJCXBDaGlwT3BzLT5Bc2ljSGFsdEFjdGlvbihwQWQpOwogCX0KIAotCVJUTVB1c2VjRGVsYXkoNTAwMCk7CS8qICA1IG1zZWMgdG8gZ3VyYW50ZWUgQW50IERpdmVyc2l0eSB0aW1lciBjYW5jZWxlZCAqLworCVJUTVB1c2VjRGVsYXkoNTAwMCk7CS8qICA1IG1zZWMgdG8gZ3VhcmFudGVlIEFudCBEaXZlcnNpdHkgdGltZXIgY2FuY2VsZWQgKi8KIAogCU1sbWVRdWV1ZURlc3Ryb3koJnBBZC0+TWxtZS5RdWV1ZSk7CiAJTmRpc0ZyZWVTcGluTG9jaygmcEFkLT5NbG1lLlRhc2tMb2NrKTsKQEAgLTExMDcsMTQgKzExMDcsMTQgQEAKIAkJCQkJKnBJbml0VHhSYXRlSWR4ID0KIAkJCQkJICAgIFJhdGVTd2l0Y2hUYWJsZTExTjFTWzFdOwogCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsCi0JCQkJCQkgICAgICgiRFJTOiB1bmtvd24gbW9kZSxkZWZhdWx0IHVzZSAxMU4gMVMgQVAgXG4iKSk7CisJCQkJCQkgICAgICgiRFJTOiB1bmtub3duIG1vZGUsZGVmYXVsdCB1c2UgMTFOIDFTIEFQIFxuIikpOwogCQkJCX0gZWxzZSB7CiAJCQkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFOMlM7CiAJCQkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFOMlNbMF07CiAJCQkJCSpwSW5pdFR4UmF0ZUlkeCA9CiAJCQkJCSAgICBSYXRlU3dpdGNoVGFibGUxMU4yU1sxXTsKIAkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLAotCQkJCQkJICAgICAoIkRSUzogdW5rb3duIG1vZGUsZGVmYXVsdCB1c2UgMTFOIDJTIEFQIFxuIikpOworCQkJCQkJICAgICAoIkRSUzogdW5rbm93biBtb2RlLGRlZmF1bHQgdXNlIDExTiAyUyBBUCBcbiIpKTsKIAkJCQl9CiAJCQl9IGVsc2UgewogCQkJCWlmIChwQWQtPkNvbW1vbkNmZy5UeFN0cmVhbSA9PSAxKSB7CkBAIC0xMTIzLDcgKzExMjMsNyBAQAogCQkJCQkqcEluaXRUeFJhdGVJZHggPQogCQkJCQkgICAgUmF0ZVN3aXRjaFRhYmxlMTFOMVNbMV07CiAJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwKLQkJCQkJCSAgICAgKCJEUlM6IHVua293biBtb2RlLGRlZmF1bHQgdXNlIDExTiAxUyBBUCBcbiIpKTsKKwkJCQkJCSAgICAgKCJEUlM6IHVua25vd24gbW9kZSxkZWZhdWx0IHVzZSAxMU4gMVMgQVAgXG4iKSk7CiAJCQkJfSBlbHNlIHsKIAkJCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMU4yU0ZvckFCYW5kOwogCQkJCQkqcFRhYmxlU2l6ZSA9CkBAIC0xMTMxLDExICsxMTMxLDExIEBACiAJCQkJCSpwSW5pdFR4UmF0ZUlkeCA9CiAJCQkJCSAgICBSYXRlU3dpdGNoVGFibGUxMU4yU0ZvckFCYW5kWzFdOwogCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsCi0JCQkJCQkgICAgICgiRFJTOiB1bmtvd24gbW9kZSxkZWZhdWx0IHVzZSAxMU4gMlMgQVAgXG4iKSk7CisJCQkJCQkgICAgICgiRFJTOiB1bmtub3duIG1vZGUsZGVmYXVsdCB1c2UgMTFOIDJTIEFQIFxuIikpOwogCQkJCX0KIAkJCX0KIAkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwKLQkJCQkgICAgICgiRFJTOiB1bmtvd24gbW9kZSAoU3VwUmF0ZUxlbj0lZCwgRXh0UmF0ZUxlbj0lZCwgTUNTU2V0WzBdPTB4JXgsIE1DU1NldFsxXT0weCV4KVxuIiwKKwkJCQkgICAgICgiRFJTOiB1bmtub3duIG1vZGUgKFN1cFJhdGVMZW49JWQsIEV4dFJhdGVMZW49JWQsIE1DU1NldFswXT0weCV4LCBNQ1NTZXRbMV09MHgleClcbiIsCiAJCQkJICAgICAgcEFkLT5TdGFBY3RpdmUuU3VwUmF0ZUxlbiwKIAkJCQkgICAgICBwQWQtPlN0YUFjdGl2ZS5FeHRSYXRlTGVuLAogCQkJCSAgICAgIHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzBdLApAQCAtMTM2OCw3ICsxMzY4LDcgQEAKIAkJCQkJaWYgKChwQWQtPlN0YUNmZy5MYXN0U2NhblRpbWUgKwogCQkJCQkgICAgIDEwICogT1NfSFopIDwgcEFkLT5NbG1lLk5vdzMyKSB7CiAJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKLQkJCQkJCQkgKCJNTUNISyAtIFJvYW1pbmcsIE5vIGVsaWdhYmxlIGVudHJ5LCB0cnkgbmV3IHNjYW4hXG4iKSk7CisJCQkJCQkJICgiTU1DSEsgLSBSb2FtaW5nLCBObyBlbGlnaWJsZSBlbnRyeSwgdHJ5IG5ldyBzY2FuIVxuIikpOwogCQkJCQkJcEFkLT5TdGFDZmcuU2NhbkNudCA9IDI7CiAJCQkJCQlwQWQtPlN0YUNmZy5MYXN0U2NhblRpbWUgPQogCQkJCQkJICAgIHBBZC0+TWxtZS5Ob3czMjsKQEAgLTI4MjgsNyArMjgyOCw3IEBACiAKIC8qIElSUUwgPSBQQVNTSVZFX0xFVkVMICovCiAvKiBJUlFMID0gRElTUEFUQ0hfTEVWRUwgKi8KLS8qIGJMaW5rVXAgaXMgdG8gaWRlbnRpZnkgdGhlIGluaXRhbCBsaW5rIHNwZWVkLiAqLworLyogYkxpbmtVcCBpcyB0byBpZGVudGlmeSB0aGUgaW5pdGlhbCBsaW5rIHNwZWVkLiAqLwogLyogVFJVRSBpbmRpY2F0ZXMgdGhlIHJhdGUgdXBkYXRlIGF0IGxpbmt1cCwgd2Ugc2hvdWxkIG5vdCB0cnkgdG8gc2V0IHRoZSByYXRlIGF0IDU0TWJwcy4gKi8KIHZvaWQgTWxtZVVwZGF0ZVR4UmF0ZXMoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLCBJTiBCT09MRUFOIGJMaW5rVXAsIHU4IGFwaWR4KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vcnRtcF9pbml0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9ydG1wX2luaXQuYwppbmRleCBkMzU5YTE0Li41ZmExOTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9ydG1wX2luaXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9ydG1wX2luaXQuYwpAQCAtMjAzNyw3ICsyMDM3LDcgQEAKIAogCQkJcEVudHJ5LT5GSUZPQ291bnQgPSAwOwogCQkJcEVudHJ5LT5PbmVTZWNUeE5vUmV0cnlPa0NvdW50Kys7Ci0JCQkvKiB1cGRhdGUgTm9EYXRhSWRsZUNvdW50IHdoZW4gc3VjZXNzZnVsIHNlbmQgcGFja2V0IHRvIFNUQS4gKi8KKwkJCS8qIHVwZGF0ZSBOb0RhdGFJZGxlQ291bnQgd2hlbiBzdWNjZXNzZnVsIHNlbmQgcGFja2V0IHRvIFNUQS4gKi8KIAkJCXBFbnRyeS0+Tm9EYXRhSWRsZUNvdW50ID0gMDsKIAkJCXBFbnRyeS0+Q29udGludWVUeEZhaWxDbnQgPSAwOwogCQl9CkBAIC0yNTE2LDcgKzI1MTYsNyBAQAogCS8qcEFkLT5UdXJuQWdnckJ1bGtJbkNvdW50ID0gMDsgKi8KIAlwQWQtPmJVc2JUeEJ1bGtBZ2dyZSA9IDA7CiAKLQkvKiBpbml0IGFzIHVuc2VkIHZhbHVlIHRvIGVuc3VyZSBkcml2ZXIgd2lsbCBzZXQgdG8gTUNVIG9uY2UuICovCisJLyogaW5pdCBhcyB1bnVzZWQgdmFsdWUgdG8gZW5zdXJlIGRyaXZlciB3aWxsIHNldCB0byBNQ1Ugb25jZS4gKi8KIAlwQWQtPkxlZEluZGljYXRvclN0cmVuZ3RoID0gMHhGRjsKIAogCXBBZC0+Q29tbW9uQ2ZnLk1heFBrdE9uZVR4QnVsayA9IDI7CkBAIC0zMDc2LDExICszMDc2LDExIEBACiAJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIAlSb3V0aW5lIERlc2NyaXB0aW9uOgotCQlTZXQgTEVEIFNpZ25hbCBTdHJlZ3RoCisJCVNldCBMRUQgU2lnbmFsIFN0cmVuZ3RoCiAKIAlBcmd1bWVudHM6CiAJCXBBZAkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKLQkJRGJtCQkJCQkJU2lnbmFsIFN0cmVndGgKKwkJRGJtCQkJCQkJU2lnbmFsIFN0cmVuZ3RoCiAKIAlSZXR1cm4gVmFsdWU6CiAJCU5vbmUKQEAgLTMwOTAsNyArMzA5MCw3IEBACiAJTm90ZToKIAkJQ2FuIGJlIHJ1biBvbiBhbnkgSVJRTCBsZXZlbC4KIAotCQlBY2NvcmRpbmcgdG8gTWljcm9zb2Z0IFplcm8gQ29uZmlnIFdpcmVsZXNzIFNpZ25hbCBTdHJlZ3RoIGRlZmluaXRpb24gYXMgYmVsb3dzLgorCQlBY2NvcmRpbmcgdG8gTWljcm9zb2Z0IFplcm8gQ29uZmlnIFdpcmVsZXNzIFNpZ25hbCBTdHJlbmd0aCBkZWZpbml0aW9uIGFzIGJlbG93cy4KIAkJPD0gLTkwICBObyBTaWduYWwKIAkJPD0gLTgxICBWZXJ5IExvdwogCQk8PSAtNzEgIExvdwpAQCAtMzExOCw3ICszMTE4LDcgQEAKIAkJCW5MZWQgPSAzMTsKIAogCQkvKiAqLwotCQkvKiBVcGRhdGUgU2lnbmFsIFN0cmVndGggdG8gZmlybXdhcmUgaWYgY2hhbmdlZC4gKi8KKwkJLyogVXBkYXRlIFNpZ25hbCBTdHJlbmd0aCB0byBmaXJtd2FyZSBpZiBjaGFuZ2VkLiAqLwogCQkvKiAqLwogCQlpZiAocEFkLT5MZWRJbmRpY2F0b3JTdHJlbmd0aCAhPSBuTGVkKSB7CiAJCQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4NTEsIDB4ZmYsIG5MZWQsCkBAIC0zMTY2LDcgKzMxNjYsNyBAQAogCQlpZiAocEFkLT5Db21tb25DZmcuUFNQWGxpbmspCiAJCQlyeF9maWx0ZXJfZmxhZyA9IFBTUFhMSU5LOwogCQllbHNlCi0JCQlyeF9maWx0ZXJfZmxhZyA9IFNUQU5PUk1BTDsJLyogU3RhaW9uIG5vdCBkcm9wIGNvbnRyb2wgZnJhbWUgd2lsbCBmYWlsIFdpRmkgQ2VydGlmaWNhdGlvbi4gKi8KKwkJCXJ4X2ZpbHRlcl9mbGFnID0gU1RBTk9STUFMOwkvKiBTdGF0aW9uIG5vdCBkcm9wIGNvbnRyb2wgZnJhbWUgd2lsbCBmYWlsIFdpRmkgQ2VydGlmaWNhdGlvbi4gKi8KIAkJUlRNUF9JT19XUklURTMyKHBBZCwgUlhfRklMVFJfQ0ZHLCByeF9maWx0ZXJfZmxhZyk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9zcGVjdHJ1bS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vc3BlY3RydW0uYwppbmRleCBjMGQyZjQyLi5jZWI2MjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9zcGVjdHJ1bS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3NwZWN0cnVtLmMKQEAgLTEwNTgsOCArMTA1OCw4IEBACiAJCTMuIE1lYXN1cmUgVG9rZW4uCiAJCTQuIE1lYXN1cmUgUmVxdWVzdCBNb2RlLgogCQk1LiBNZWFzdXJlIFJlcXVlc3QgVHlwZS4KLQkJNi4gTGVuZ3RoIG9mIFJlcG9ydCBJbmZvbWF0aW9uCi0JCTcuIFBvaW50ZXIgb2YgUmVwb3J0IEluZm9tYXRpb24gQnVmZmVyLgorCQk2LiBMZW5ndGggb2YgUmVwb3J0IEluZm9ybWF0aW9uCisJCTcuIFBvaW50ZXIgb2YgUmVwb3J0IEluZm9ybWF0aW9uIEJ1ZmZlci4KIAogCVJldHVybgk6IE5vbmUuCiAJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE0MDAsNyArMTQwMCw3IEBACiAJUGFyYW1ldHJzOgogCQkxLiBNTE1FIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgcmVjZWl2ZWQgZnJhbWUKIAkJMi4gbWVzc2FnZSBsZW5ndGguCi0JCTMuIENoYW5uZWwgc3dpdGNoIGFubm91bmNlbWVudCBpbmZvbWF0aW9uIGJ1ZmZlci4KKwkJMy4gQ2hhbm5lbCBzd2l0Y2ggYW5ub3VuY2VtZW50IGluZm9ybWF0aW9uIGJ1ZmZlci4KIAogCVJldHVybgk6IE5vbmUuCiAJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE0NjUsNyArMTQ2NSw3IEBACiAJUGFyYW1ldHJzOgogCQkxLiBNTE1FIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgcmVjZWl2ZWQgZnJhbWUKIAkJMi4gbWVzc2FnZSBsZW5ndGguCi0JCTMuIE1lYXN1cmVtZW50IHJlcXVlc3QgaW5mb21hdGlvbiBidWZmZXIuCisJCTMuIE1lYXN1cmVtZW50IHJlcXVlc3QgaW5mb3JtYXRpb24gYnVmZmVyLgogCiAJUmV0dXJuCTogTm9uZS4KIAk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTUzOCw4ICsxNTM4LDggQEAKIAlQYXJhbWV0cnM6CiAJCTEuIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQogCQkyLiBtZXNzYWdlIGxlbmd0aC4KLQkJMy4gTWVhc3VyZW1lbnQgcmVwb3J0IGluZm9tYXRpb24gYnVmZmVyLgotCQk0LiBiYXNpYyByZXBvcnQgaW5mb21hdGlvbiBidWZmZXIuCisJCTMuIE1lYXN1cmVtZW50IHJlcG9ydCBpbmZvcm1hdGlvbiBidWZmZXIuCisJCTQuIGJhc2ljIHJlcG9ydCBpbmZvcm1hdGlvbiBidWZmZXIuCiAKIAlSZXR1cm4JOiBOb25lLgogCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL21sbWUuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvbWxtZS5oCmluZGV4IGNkMWVlM2QuLmEyODU4NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvbWxtZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvbWxtZS5oCkBAIC0zNzQsNyArMzc0LDcgQEAKIHN0cnVjdCBydF9odF9waHlfaW5mbyB7CiAJQk9PTEVBTiBiSHRFbmFibGU7CS8qIElmIHdlIHNob3VsZCB1c2UgaHQgcmF0ZS4gKi8KIAlCT09MRUFOIGJQcmVOSHQ7CS8qIElmIHdlIHNob3VsZCB1c2UgaHQgcmF0ZS4gKi8KLQkvKlN1YnN0cmFjdCBmcm9tIEhUIENhcGFiaWxpdHkgSUUgKi8KKwkvKlN1YnRyYWN0IGZyb20gSFQgQ2FwYWJpbGl0eSBJRSAqLwogCXU4IE1DU1NldFsxNl07CiB9OwogCkBAIC0zOTIsNyArMzkyLDcgQEAKIAl1MTYgQW1zZHVTaXplOjE7CS8qIE1heCByZWNlaXZpbmcgQS1NU0RVIHNpemUgKi8KIAl1MTYgcnN2OjU7CiAKLQkvKlN1YnN0cmFjdCBmcm9tIEFkZGlvbnQgSFQgSU5GTyBJRSAqLworCS8qU3VidHJhY3QgZnJvbSBBZGRpb250IEhUIElORk8gSUUgKi8KIAl1OCBNYXhSQW1wZHVGYWN0b3I6MjsKIAl1OCBNcGR1RGVuc2l0eTozOwogCXU4IEV4dENoYW5PZmZzZXQ6MjsJLyogUGxlYXNlIG5vdGUgdGhlIGRpZmZlcmVuY2Ugd2l0aCBmb2xsb3dpbmcgICAgIHU4ICAgTmV3RXh0Q2hhbm5lbE9mZnNldDsgZnJvbSA4MDIuMTFuICovCkBAIC00MTAsNyArNDEwLDcgQEAKIAl1OCBCU1NDb2V4aXN0MjA0MDsKIH07CiAKLS8qICAgZmllbGQgaW4gQWRkdGlvbmFsIEhUIEluZm9ybWF0aW9uIElFIC4gKi8KKy8qICAgZmllbGQgaW4gQWRkaXRpb25hbCBIVCBJbmZvcm1hdGlvbiBJRSAuICovCiBzdHJ1Y3QgUEFDS0VEIHJ0X2FkZF9odGluZm8gewogCXU4IEV4dENoYW5PZmZzZXQ6MjsKIAl1OCBSZWNvbVdpZHRoOjE7CkBAIC04NTcsNyArODU3LDcgQEAKIH07CiAKIC8qIE1MTUUgQVVYIGRhdGEgc3RydWN0dXJlIHRoYXQgaG9sZHMgdGVtcG9yYXJsaXkgc2V0dGluZ3MgZHVyaW5nIGEgY29ubmVjdGlvbiBhdHRlbXB0LiAqLwotLyogT25jZSB0aGlzIGF0dGVtcCBzdWNjZWVkcywgYWxsIHNldHRpbmdzIHdpbGwgYmUgY29weSB0byBwQWQtPlN0YUFjdGl2ZS4gKi8KKy8qIE9uY2UgdGhpcyBhdHRlbXB0IHN1Y2NlZWRzLCBhbGwgc2V0dGluZ3Mgd2lsbCBiZSBjb3B5IHRvIHBBZC0+U3RhQWN0aXZlLiAqLwogLyogQSBjb25uZWN0aW9uIGF0dGVtcHQgKHVzZXIgc2V0IE9JRCwgcm9hbWluZywgQ0NYIGZhc3Qgcm9hbWluZywuLikgY29uc2lzdHMgb2YgKi8KIC8qIHNldmVyYWwgc3RlcHMgKEpPSU4sIEFVVEgsIEFTU09DIG9yIFJFQVNTT0MpIGFuZCBtYXkgZmFpbCBhdCBhbnkgc3RlcC4gV2UgcHVycG9zZWx5ICovCiAvKiBzZXBhcmF0ZSB0aGlzIHVuZGVyLXRyaWFsIHNldHRpbmdzIGF3YXkgZnJvbSBwQWQtPlN0YUFjdGl2ZSBzbyB0aGF0IG9uY2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYwppbmRleCBlNWIwNDI3Li4xNTgzMzQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5jCkBAIC0yODMsNyArMjgzLDcgQEAKIAlBcmd1bWVudHM6CiAJCXBBZCAJUG9pbnRlciB0byBvdXIgYWRhcHRlcgogCQlwSW5zQU1TRFVIZHIJRVdDIEEtTVNEVSBmb3JtYXQgaGFzIGV4dHJhIDE0LWJ5dGVzIGhlYWRlci4gaWYgVFJVRSwgaW5zZXJ0IHRoaXMgMTQtYnl0ZSBoZHIgaW4gZnJvbnQgb2YgTVNEVS4KLQkJKnBTcmNUb3RhbExlbgkJCXJldHVybiB0b3RhbCBwYWNrZXQgbGVuZ3RoLiBUaGlzIGxlbmdodCBpcyBjYWxjdWxhdGVkIHdpdGggODAyLjMgZm9ybWF0IHBhY2tldC4KKwkJKnBTcmNUb3RhbExlbgkJCXJldHVybiB0b3RhbCBwYWNrZXQgbGVuZ3RoLiBUaGlzIGxlbmd0aCBpcyBjYWxjdWxhdGVkIHdpdGggODAyLjMgZm9ybWF0IHBhY2tldC4KIAogCVJldHVybiBWYWx1ZToKIAkJTkRJU19TVEFUVVNfU1VDQ0VTUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9wY2lfcmJ1cy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9wY2lfcmJ1cy5jCmluZGV4IGU1ZmI2N2MuLmY4MGFiNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfcGNpX3JidXMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X3BjaV9yYnVzLmMKQEAgLTYxOSw3ICs2MTksNyBAQAogCSAgIE9yIGtlcm5lbCB3aWxsIHBhbmljIGFmdGVyIGlmY29uZmlnIHJhMCBkb3duIHNvbWV0aW1lcyAqLwogCiAJLyogKi8KLQkvKiBJbml0YWwgdGhlIEludGVycnVwdCBzb3VyY2UuICovCisJLyogSW5pdGlhbCB0aGUgSW50ZXJydXB0IHNvdXJjZS4gKi8KIAkvKiAqLwogCUludFNvdXJjZS53b3JkID0gMHgwMDAwMDAwMEw7CiAvKiAgICAgIE1jdUludFNvdXJjZS53b3JkID0gMHgwMDAwMDAwMEw7ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0bXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oCmluZGV4IGQxNmIwNmEuLjNjMzEzNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oCkBAIC03NTYsNyArNzU2LDcgQEAKIC8qICovCiBzdHJ1Y3QgcnRfcHJpdmF0ZSB7CiAJdTMyIFN5c3RlbVJlc2V0Q250OwkvKiBTeXN0ZW0gcmVzZXQgY291bnRlciAqLwotCXUzMiBUeFJpbmdGdWxsQ250OwkvKiBUeCByaW5nIGZ1bGwgb2NjdXJyYW5jZSBudW1iZXIgKi8KKwl1MzIgVHhSaW5nRnVsbENudDsJLyogVHggcmluZyBmdWxsIG9jY3VycmVuY2UgbnVtYmVyICovCiAJdTMyIFBoeVJ4RXJyQ250OwkvKiBQSFkgUnggZXJyb3IgY291bnQsIGZvciBkZWJ1ZyBwdXJwb3NlLCBtaWdodCBtb3ZlIHRvIGdsb2JhbCBjb3VudGVyICovCiAJLyogVmFyaWFibGVzIGZvciBXRVAgZW5jcnlwdGlvbiAvIGRlY3J5cHRpb24gaW4gcnRtcF93ZXAuYyAqLwogCXUzMiBGQ1NDUkMzMjsKQEAgLTkyNSw3ICs5MjUsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0cnVjdCByZW9yZGVyaW5nX21wZHUgewogCXN0cnVjdCByZW9yZGVyaW5nX21wZHUgKm5leHQ7Ci0Jdm9pZCAqcFBhY2tldDsJLyogY292ZXJ0ZWQgdG8gODAyLjMgZnJhbWUgKi8KKwl2b2lkICpwUGFja2V0OwkvKiBjb252ZXJ0ZWQgdG8gODAyLjMgZnJhbWUgKi8KIAlpbnQgU2VxdWVuY2U7CQkvKiBzZXF1ZW5jZSBudW1iZXIgb2YgTVBEVSAqLwogCUJPT0xFQU4gYkFNU0RVOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhX2lvY3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YV9pb2N0bC5jCmluZGV4IDU3MTdlMTIuLjQ5YjEwMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhX2lvY3RsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGFfaW9jdGwuYwpAQCAtMjQ2MCw3ICsyNDYwLDcgQEAKIAkJfQogCX0KIAotCXsJCQkvKiBkZXRlcm1pbmUgdGhpcyBpb2N0bCBjb21tYW5kIGlzIGNvbW1pbmcgZnJvbSB3aGljaCBpbnRlcmZhY2UuICovCisJewkJCS8qIGRldGVybWluZSB0aGlzIGlvY3RsIGNvbW1hbmQgaXMgY29taW5nIGZyb20gd2hpY2ggaW50ZXJmYWNlLiAqLwogCQlwT2JqLT5pb2N0bF9pZl90eXBlID0gSU5UX01BSU47CiAJCXBPYmotPmlvY3RsX2lmID0gTUFJTl9NQlNTSUQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnR1c2JfYnVsay5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnR1c2JfYnVsay5jCmluZGV4IGQyNzQ2ZjguLjY3OWI4MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3J0dXNiX2J1bGsuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydHVzYl9idWxrLmMKQEAgLTI5OCw3ICsyOTgsNyBAQAogCQkJCS8qfHwgKCAoVGhpc0J1bGtTaXplICE9IDApICAmJiAocFR4V0ktPkFNUERVID09IDApKSAqLwogCQkJCSkgewogCQkJCS8qIEZvciBVU0IgMS4xIG9yIHBlZXIgd2hpY2ggZGlkbid0IHN1cHBvcnQgQU1QRFUsIGxpbWl0IHRoZSBCdWxrT3V0IHNpemUuICovCi0JCQkJLyogRm9yIHBlcmZvcm1lbmNlIGluIGIvZyBtb2RlLCBub3cganVzdCBjaGVjayBmb3IgVVNCIDEuMSBhbmQgZGlkbid0IGNhcmUgYWJvdXQgdGhlIEFQTURVIG9yIG5vdCEgMjAwOC8wNi8wNC4gKi8KKwkJCQkvKiBGb3IgcGVyZm9ybWFuY2UgaW4gYi9nIG1vZGUsIG5vdyBqdXN0IGNoZWNrIGZvciBVU0IgMS4xIGFuZCBkaWRuJ3QgY2FyZSBhYm91dCB0aGUgQVBNRFUgb3Igbm90ISAyMDA4LzA2LzA0LiAqLwogCQkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPQogCQkJCSAgICBUbXBCdWxrRW5kUG9zOwogCQkJCWJyZWFrOwpAQCAtMzExLDcgKzMxMSw3IEBACiAJCQkJICAgIFRtcEJ1bGtFbmRQb3M7CiAJCQkJYnJlYWs7CiAJCQl9IGVsc2UgaWYgKCgocEFkLT5CdWxrT3V0TWF4UGFja2V0U2l6ZSA8IDUxMikgJiYgKChUaGlzQnVsa1NpemUgJiAweGZmZmZmODAwKSAhPSAwKSkgLyp8fCAoIChUaGlzQnVsa1NpemUgIT0gMCkgICYmIChwVHhXSS0+QU1QRFUgPT0gMCkpICovKSB7CS8qIEZvciBVU0IgMS4xIG9yIHBlZXIgd2hpY2ggZGlkbid0IHN1cHBvcnQgQU1QRFUsIGxpbWl0IHRoZSBCdWxrT3V0IHNpemUuICovCi0JCQkJLyogRm9yIHBlcmZvcm1lbmNlIGluIGIvZyBtb2RlLCBub3cganVzdCBjaGVjayBmb3IgVVNCIDEuMSBhbmQgZGlkbid0IGNhcmUgYWJvdXQgdGhlIEFQTURVIG9yIG5vdCEgMjAwOC8wNi8wNC4gKi8KKwkJCQkvKiBGb3IgcGVyZm9ybWFuY2UgaW4gYi9nIG1vZGUsIG5vdyBqdXN0IGNoZWNrIGZvciBVU0IgMS4xIGFuZCBkaWRuJ3QgY2FyZSBhYm91dCB0aGUgQVBNRFUgb3Igbm90ISAyMDA4LzA2LzA0LiAqLwogCQkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPQogCQkJCSAgICBUbXBCdWxrRW5kUG9zOwogCQkJCWJyZWFrOwpAQCAtMTAxNiw3ICsxMDE2LDcgQEAKIAkJCQlSVFVTQkJ1bGtPdXROdWxsRnJhbWUocEFkKTsKIAkJCX0KIAkJfQotCQkvKiA4LiBObyBkYXRhIGF2YWxpYWJsZSAqLworCQkvKiA4LiBObyBkYXRhIGF2YWlsYWJsZSAqLwogCQllbHNlCiAJCQk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnR1c2JfZGF0YS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnR1c2JfZGF0YS5jCmluZGV4IDY5MzY4ODYuLjViNzJiY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3J0dXNiX2RhdGEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydHVzYl9kYXRhLmMKQEAgLTcxLDcgKzcxLDcgQEAKIAogCVJvdXRpbmUJRGVzY3JpcHRpb246CiAJCVRoaXMgc3Vicm91dGluZSB3aWxsIHNjYW4gdGhyb3VnaCByZWxlYXRpdmUgcmluZyBkZXNjcmlwdG9yIHRvIGZpbmQKLQkJb3V0IGF2YWxpYWJsZSBmcmVlIHJpbmcgZGVzY3JpcHRvciBhbmQgY29tcGFyZSB3aXRoIHJlcXVlc3Qgc2l6ZS4KKwkJb3V0IGF2YWlsYWJsZSBmcmVlIHJpbmcgZGVzY3JpcHRvciBhbmQgY29tcGFyZSB3aXRoIHJlcXVlc3Qgc2l6ZS4KIAogCUFyZ3VtZW50czoKIAkJcEFkCVBvaW50ZXIJdG8gb3VyIGFkYXB0ZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvS2NvbmZpZwppbmRleCAxYjMxMDNmLi4zMTYyYWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9LY29uZmlnCkBAIC0xLDYgKzEsNyBAQAogY29uZmlnIFI4MTg3U0UKIAl0cmlzdGF0ZSAiUmVhbFRlayBSVEw4MTg3U0UgV2lyZWxlc3MgTEFOIE5JQyBkcml2ZXIiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgV0xBTgorCWRlcGVuZHMgb24gbQogCXNlbGVjdCBXSVJFTEVTU19FWFQKIAlzZWxlY3QgV0VYVF9QUklWCiAJc2VsZWN0IEVFUFJPTV85M0NYNgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTEuaAppbmRleCBkYzYwOGM3Li4xNmFhNmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTEuaApAQCAtMTA5OSw3ICsxMDk5LDcgQEAKIAkgKiBub3Qgc2V0LiBBcyBzb21lIGNhcmRzIG1heSBoYXZlIGRpZmZlcmVudCBIVyBxdWV1ZXMgdGhhdAogCSAqIG9uZSBtaWdodCB3YW50IHRvIHVzZSBmb3IgZGF0YSBhbmQgbWFuYWdlbWVudCBmcmFtZXMKIAkgKiB0aGUgb3B0aW9uIHRvIGhhdmUgdHdvIGNhbGxiYWNrcyBtaWdodCBiZSB1c2VmdWwuCi0JICogVGhpcyBmdWNudGlvbiBjYW4ndCBzbGVlcC4KKwkgKiBUaGlzIGZ1bmN0aW9uIGNhbid0IHNsZWVwLgogCSAqLwogCWludCAoKnNvZnRtYWNfaGFyZF9zdGFydF94bWl0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTEzOCw5ICsxMTM4LDkgQEAKIAkgKiBpdCBpcyBjYWxsZWQgaW4gYSB3b3JrX3F1ZXVlIHdoZW4gc3dpdGhjaW5nIHRvIGFkLWhvYyBtb2RlCiAJICogb3IgaW4gYmVoYWxmIG9mIGl3bGlzdCBzY2FuIHdoZW4gdGhlIGNhcmQgaXMgYXNzb2NpYXRlZAogCSAqIGFuZCByb290IHVzZXIgYXNrIGZvciBhIHNjYW4uCi0JICogdGhlIGZ1Y250aW9uIHN0b3Bfc2NhbiBzaG91bGQgc3RvcCBib3RoIHRoZSBzeW5jcm8gYW5kCisJICogdGhlIGZ1bmN0aW9uIHN0b3Bfc2NhbiBzaG91bGQgc3RvcCBib3RoIHRoZSBzeW5jcm8gYW5kCiAJICogYmFja2dyb3VuZCBzY2FubmluZyBhbmQgY2FuIHNsZWVwLgotCSAqIFRoZSBmdWNudGlvbiBzdGFydF9zY2FuIHNob3VsZCBpbml0aWF0ZSB0aGUgYmFja2dyb3VuZAorCSAqIFRoZSBmdW5jdGlvbiBzdGFydF9zY2FuIHNob3VsZCBpbml0aWF0ZSB0aGUgYmFja2dyb3VuZAogCSAqIHNjYW5uaW5nIGFuZCBjYW4ndCBzbGVlcC4KIAkgKi8KIAl2b2lkICgqc2Nhbl9zeW5jcm8pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKaW5kZXggNzcxZTAxOS4uNzM2YTE0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCkBAIC0xOTU0LDcgKzE5NTQsNyBAQAogCiAKIAotLyogZm9sbG93aW5nIGFyZSBmb3IgYSBzaW1wbGllciBUWCBxdWV1ZSBtYW5hZ2VtZW50LgorLyogZm9sbG93aW5nIGFyZSBmb3IgYSBzaW1wbGVyIFRYIHF1ZXVlIG1hbmFnZW1lbnQuCiAgKiBJbnN0ZWFkIG9mIHVzaW5nIG5ldGlmX1tzdG9wL3dha2VdX3F1ZXVlIHRoZSBkcml2ZXIKICAqIHdpbGwgdXNlcyB0aGVzZSB0d28gZnVuY3Rpb24gKHBsdXMgYSByZXNldCBvbmUpLCB0aGF0CiAgKiB3aWxsIGludGVybmFsbHkgdXNlcyB0aGUga2VybmVsIG5ldGlmXyogYW5kIHRha2VzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfY29yZS5jCmluZGV4IDcwYWIwMDguLjIxNTVhNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfY29yZS5jCkBAIC0xNTkxLDcgKzE1OTEsNyBAQAogCQlwcml2LT5SU1NJID0gUlNTSTsKIAkJLyogU1EgdHJhbnNsYXRpb24gZm9ybXVsYSBpcyBwcm92aWRlZCBieSBTRDMgRFouIDIwMDYuMDYuMjcgKi8KIAkJaWYgKHF1YWxpdHkgPj0gMTI3KQotCQkJcXVhbGl0eSA9IDE7IC8qMDsgKi8gLyogMCB3aWxsIGNhdXNlIGVwYyB0byBzaG93IHNpZ25hbCB6ZXJvICwgd2FsayBhcm91ZCBub3c7ICovCisJCQlxdWFsaXR5ID0gMTsgLyowOyAqLyAvKiAwIHdpbGwgY2F1c2UgZXBjIHRvIHNob3cgc2lnbmFsIHplcm8gLCB3YWxrIGFyb3VuZCBub3c7ICovCiAJCWVsc2UgaWYgKHF1YWxpdHkgPCAyNykKIAkJCXF1YWxpdHkgPSAxMDA7CiAJCWVsc2UKQEAgLTM4ODMsNyArMzg4Myw3IEBACiAJICogSWYgdGhlIHBhY2tldCBwcmV2aW91cyBvZiB0aGUgbmljIHBvaW50ZXIgaGFzIGJlZW4KIAkgKiBwcm9jZXNzZWQgdGhpcyBkb2Vzbid0IG1hdHRlcjogaXQgd2lsbCBiZSBjaGVja2VkCiAJICogaGVyZSBhdCB0aGUgbmV4dCByb3VuZC4gQW55d2F5IGlmIG5vIG1vcmUgcGFja2V0IGFyZQotCSAqIFRYZWQgbm8gbWVtb3J5IGxlYWsgb2Njb3VyIGF0IGFsbC4KKwkgKiBUWGVkIG5vIG1lbW9yeSBsZWFrIG9jY3VyIGF0IGFsbC4KIAkgKi8KIAogCXN3aXRjaCAocHJpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2RtLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2RtLmMKaW5kZXggZmM0OTA3OC4uMjYxMDg1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9kbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfZG0uYwpAQCAtMTIzLDcgKzEyMyw3IEBACiAvLwogLy8JRGVzY3JpcHRpb246CiAvLwkJQ2FsbGJhY2sgZnVuY3Rpb24gb2YgVXBkYXRlVHhQb3dlcldvcmtJdGVtLgotLy8JCUJlY2F1c2Ugb2Ygc29tZSBldmVudCBoYXBwZW5kLCBlLmcuIENDWCBUUEMsIEhpZ2ggUG93ZXIgTWVjaGFuaXNtLAorLy8JCUJlY2F1c2Ugb2Ygc29tZSBldmVudCBoYXBwZW5lZCwgZS5nLiBDQ1ggVFBDLCBIaWdoIFBvd2VyIE1lY2hhbmlzbSwKIC8vCQlXZSB1cGRhdGUgVHggcG93ZXIgb2YgY3VycmVudCBjaGFubmVsIGFnYWluLgogLy8KIHZvaWQgcnRsODE4MF90eF9wd193cSAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtOTg0LDcgKzk4NCw3IEBACiAJCXsKIAkJCXByaXYtPlRyeXVwaW5nQ291bnQgPSAwOwogCQkJLy8KLQkJCS8vIFdoZW4gdHJhbnNmZXJpbmcgZnJvbSBDQ0sgdG8gT0ZETSwgRElHIGlzIGFuIGltcG9ydGFudCBpc3N1ZS4KKwkJCS8vIFdoZW4gdHJhbnNmZXJyaW5nIGZyb20gQ0NLIHRvIE9GRE0sIERJRyBpcyBhbiBpbXBvcnRhbnQgaXNzdWUuCiAJCQkvLwogCQkJaWYocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSAyMikKIAkJCQliVXBkYXRlSW5pdGlhbEdhaW4gPSB0cnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9ydGw4MjI1ejIuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfcnRsODIyNXoyLmMKaW5kZXggMmEyYWZkNS4uM2YwOWY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9ydGw4MjI1ejIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX3J0bDgyMjV6Mi5jCkBAIC0zNzgsNyArMzc4LDcgQEAKIAltYXNrID0gKGxvdzJoaWdoKSA/IDB4MDEgOiAoKCh1MzIpMHgwMSkgPDwgKDEyLTEpKTsKIAogCS8qCi0JICogV2UgbXVzdCBzZXQgZGF0YSBwaW4gdG8gSFcgY29udHJvbGVkLCBvdGhlcndpc2UgUkYgY2FuJ3QgZHJpdmVyIGl0CisJICogV2UgbXVzdCBzZXQgZGF0YSBwaW4gdG8gSFcgY29udHJvbGxlZCwgb3RoZXJ3aXNlIFJGIGNhbid0IGRyaXZlciBpdAogCSAqIGFuZCB2YWx1ZSBSRiByZWdpc3RlciB3b24ndCBiZSBhYmxlIHRvIHJlYWQgYmFjayBwcm9wZXJseS4KIAkgKi8KIAl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc0VuYWJsZSwgKG92YWwyICYgKH4weDAxKSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4NWJfaW5pdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4NWJfaW5pdC5jCmluZGV4IDNiZGY5YjMuLjRiMGI4MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODViX2luaXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTg1Yl9pbml0LmMKQEAgLTEyNzMsNyArMTI3Myw3IEBACiAJLyoKIAkJU3RvcCBCZWFjb24uCiAKLQkJVmlzdGEgYWRkIGEgQWRob2MgcHJvZmlsZSwgSFcgcmFkaW8gb2ZmIHVudGlsbCBPSURfRE9UMTFfUkVTRVRfUkVRVUVTVAorCQlWaXN0YSBhZGQgYSBBZGhvYyBwcm9maWxlLCBIVyByYWRpbyBvZmYgdW50aWwgT0lEX0RPVDExX1JFU0VUX1JFUVVFU1QKIAkJRHJpdmVyIHdvdWxkIHNldCBNU1I9Tk9fTElOSywgdGhlbiBIVyBSYWRpbyBPTiwgTWdudFF1ZXVlIFN0dWNrLgogCQlCZWNhdXNlIEJjbiBETUEgaXNuJ3QgY29tcGxldGUsIG1nbnQgcXVldWUgd291bGQgc3R1Y2sgdW50aWwgQmNuIHBhY2tldCBzZW5kLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9LY29uZmlnCmluZGV4IDJlNjRiMjMuLjc1MGMzNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9LY29uZmlnCkBAIC0xLDYgKzEsNyBAQAogY29uZmlnIFJUTDgxOTJFCiAJdHJpc3RhdGUgIlJlYWxUZWsgUlRMODE5MkUgV2lyZWxlc3MgTEFOIE5JQyBkcml2ZXIiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgV0xBTgorCWRlcGVuZHMgb24gbQogCXNlbGVjdCBXSVJFTEVTU19FWFQKIAlzZWxlY3QgV0VYVF9QUklWCiAJc2VsZWN0IENSWVBUTwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTEuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExLmgKaW5kZXggM2NhMzg4MS4uZGJlMjFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMS5oCkBAIC0xOTY3LDcgKzE5NjcsNyBAQAogICAgICAgICB1MTYgcHJldl9zZXFfY3RsOyAgICAgICAvKiB1c2VkIHRvIGRyb3AgZHVwbGljYXRlIGZyYW1lcyAqLwogCiAJLyogbWFwIG9mIGFsbG93ZWQgY2hhbm5lbHMuIDAgaXMgZHVtbXkgKi8KLQkvLyBGSVhNRTogcmVtZWJlciB0byBkZWZhdWx0IHRvIGEgYmFzaWMgY2hhbm5lbCBwbGFuIGRlcGVuZGluZyBvZiB0aGUgUEhZIHR5cGUKKwkvLyBGSVhNRTogcmVtZW1iZXIgdG8gZGVmYXVsdCB0byBhIGJhc2ljIGNoYW5uZWwgcGxhbiBkZXBlbmRpbmcgb2YgdGhlIFBIWSB0eXBlCiAjaWZkZWYgRU5BQkxFX0RPVDExRAogCXZvaWQqIHBEb3QxMWRJbmZvOwogCWJvb2wgYkdsb2JhbERvbWFpbjsKQEAgLTIxMjEsNyArMjEyMSw3IEBACiAJICogbm90IHNldC4gQXMgc29tZSBjYXJkcyBtYXkgaGF2ZSBkaWZmZXJlbnQgSFcgcXVldWVzIHRoYXQKIAkgKiBvbmUgbWlnaHQgd2FudCB0byB1c2UgZm9yIGRhdGEgYW5kIG1hbmFnZW1lbnQgZnJhbWVzCiAJICogdGhlIG9wdGlvbiB0byBoYXZlIHR3byBjYWxsYmFja3MgbWlnaHQgYmUgdXNlZnVsLgotCSAqIFRoaXMgZnVjbnRpb24gY2FuJ3Qgc2xlZXAuCisJICogVGhpcyBmdW5jdGlvbiBjYW4ndCBzbGVlcC4KIAkgKi8KIAlpbnQgKCpzb2Z0bWFjX2hhcmRfc3RhcnRfeG1pdCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZTgwMjExKTsKQEAgLTIxNjAsOSArMjE2MCw5IEBACiAJICogaXQgaXMgY2FsbGVkIGluIGEgd29ya19xdWV1ZSB3aGVuIHN3aXRoY2luZyB0byBhZC1ob2MgbW9kZQogCSAqIG9yIGluIGJlaGFsZiBvZiBpd2xpc3Qgc2NhbiB3aGVuIHRoZSBjYXJkIGlzIGFzc29jaWF0ZWQKIAkgKiBhbmQgcm9vdCB1c2VyIGFzayBmb3IgYSBzY2FuLgotCSAqIHRoZSBmdWNudGlvbiBzdG9wX3NjYW4gc2hvdWxkIHN0b3AgYm90aCB0aGUgc3luY3JvIGFuZAorCSAqIHRoZSBmdW5jdGlvbiBzdG9wX3NjYW4gc2hvdWxkIHN0b3AgYm90aCB0aGUgc3luY3JvIGFuZAogCSAqIGJhY2tncm91bmQgc2Nhbm5pbmcgYW5kIGNhbiBzbGVlcC4KLQkgKiBUaGUgZnVjbnRpb24gc3RhcnRfc2NhbiBzaG91bGQgaW5pdGlhdGUgdGhlIGJhY2tncm91bmQKKwkgKiBUaGUgZnVuY3Rpb24gc3RhcnRfc2NhbiBzaG91bGQgaW5pdGlhdGUgdGhlIGJhY2tncm91bmQKIAkgKiBzY2FubmluZyBhbmQgY2FuJ3Qgc2xlZXAuCiAJICovCiAJdm9pZCAoKnNjYW5fc3luY3JvKShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZTgwMjExKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCmluZGV4IGFkZDAxNWUuLmVkNWEzODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfcnguYwpAQCAtMTQyNiw3ICsxNDI2LDcgQEAKIHN0YXRpYyB1OCBxb3Nfb3VpW1FPU19PVUlfTEVOXSA9IHsgMHgwMCwgMHg1MCwgMHhGMiB9OwogCiAvKgotKiBNYWtlIHRoZXIgc3RydWN0dXJlIHdlIHJlYWQgZnJvbSB0aGUgYmVhY29uIHBhY2tldCBoYXMKKyogTWFrZSB0aGUgc3RydWN0dXJlIHdlIHJlYWQgZnJvbSB0aGUgYmVhY29uIHBhY2tldCB0byBoYXZlCiAqIHRoZSByaWdodCB2YWx1ZXMKICovCiBzdGF0aWMgaW50IGllZWU4MDIxMV92ZXJpZnlfcW9zX2luZm8oc3RydWN0IGllZWU4MDIxMV9xb3NfaW5mb3JtYXRpb25fZWxlbWVudApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCmluZGV4IGY2OTIyZDQuLjdkNGNiYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKQEAgLTIwMjMsNyArMjAyMyw3IEBACiAJCQkJCQkJcmV0dXJuIDE7CiAJCQkJCQl9CiAJCQkJCQllbHNlCi0JCQkJCQl7CS8vZmlsbGluZyB0aGUgUGVlckhUQ2FwLiAvL21heWJlIG5vdCBuZWNjZXNhcnkgYXMgd2UgY2FuIGdldCBpdHMgaW5mbyBmcm9tIGN1cnJlbnRfbmV0d29yay4KKwkJCQkJCXsJLy9maWxsaW5nIHRoZSBQZWVySFRDYXAuIC8vbWF5YmUgbm90IG5lY2Vzc2FyeSBhcyB3ZSBjYW4gZ2V0IGl0cyBpbmZvIGZyb20gY3VycmVudF9uZXR3b3JrLgogCQkJCQkJCW1lbWNweShpZWVlLT5wSFRJbmZvLT5QZWVySFRDYXBCdWYsIG5ldHdvcmstPmJzc2h0LmJkSFRDYXBCdWYsIG5ldHdvcmstPmJzc2h0LmJkSFRDYXBMZW4pOwogCQkJCQkJCW1lbWNweShpZWVlLT5wSFRJbmZvLT5QZWVySFRJbmZvQnVmLCBuZXR3b3JrLT5ic3NodC5iZEhUSW5mb0J1ZiwgbmV0d29yay0+YnNzaHQuYmRIVEluZm9MZW4pOwogCQkJCQkJfQpAQCAtMjE2Myw3ICsyMTYzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogZm9sbG93aW5nIGFyZSBmb3IgYSBzaW1wbGllciBUWCBxdWV1ZSBtYW5hZ2VtZW50LgorLyogZm9sbG93aW5nIGFyZSBmb3IgYSBzaW1wbGVyIFRYIHF1ZXVlIG1hbmFnZW1lbnQuCiAgKiBJbnN0ZWFkIG9mIHVzaW5nIG5ldGlmX1tzdG9wL3dha2VdX3F1ZXVlIHRoZSBkcml2ZXIKICAqIHdpbGwgdXNlcyB0aGVzZSB0d28gZnVuY3Rpb24gKHBsdXMgYSByZXNldCBvbmUpLCB0aGF0CiAgKiB3aWxsIGludGVybmFsbHkgdXNlcyB0aGUga2VybmVsIG5ldGlmXyogYW5kIHRha2VzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL3J0bDgxOXhfSFQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9IVC5oCmluZGV4IGY5Njg4MTcuLjU2YTEyMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9IVC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9IVC5oCkBAIC02NCw3ICs2NCw3IEBACiB9SFRfQ0hBTk5FTF9XSURUSCwgKlBIVF9DSEFOTkVMX1dJRFRIOwogCiAvLwotLy8gUmVwcmVzZW50IEV4dGVudGlvbiBDaGFubmVsIE9mZnNldCBpbiBIVCBDYXBhYmlsaXRpZXMKKy8vIFJlcHJlc2VudCBFeHRlbnNpb24gQ2hhbm5lbCBPZmZzZXQgaW4gSFQgQ2FwYWJpbGl0aWVzCiAvLyBUaGlzIGlzIGF2YWlsYWJsZSBvbmx5IGluIDQwTWh6IG1vZGUuCiAvLwogdHlwZWRlZiBlbnVtIF9IVF9FWFRDSE5MX09GRlNFVHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYwppbmRleCBhMmE0ZmU5Li5mN2E5ZGEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL3J0bDgxOXhfSFRQcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X0hUUHJvYy5jCkBAIC00NTksNyArNDU5LDcgQEAKIC8qKgogKiBGdW5jdGlvbjoJSFRJT1RBY3RJc0Rpc2FibGVNQ1MxNQogKgotKiBPdmVydmlldzoJQ2hlY2sgd2hldGhlciBkcml2ZXIgc2hvdWxkIGRlY2xhcmUgY2FwYWJpbGl0eSBvZiByZWNldmluZyBNQ1MxNQorKiBPdmVydmlldzoJQ2hlY2sgd2hldGhlciBkcml2ZXIgc2hvdWxkIGRlY2xhcmUgY2FwYWJpbGl0eSBvZiByZWNlaXZpbmcgTUNTMTUKICoKICogSW5wdXQ6CiAqCQkJUEFEQVBURVIJCUFkYXB0ZXIsCkBAIC00OTYsNyArNDk2LDcgQEAKIC8qKgogKiBGdW5jdGlvbjoJSFRJT1RBY3RJc0Rpc2FibGVNQ1NUd29TcGF0aWFsU3RyZWFtCiAqCi0qIE92ZXJ2aWV3OglDaGVjayB3aGV0aGVyIGRyaXZlciBzaG91bGQgZGVjbGFyZSBjYXBhYmlsaXR5IG9mIHJlY2V2aW5nIEFsbCAyIHNzIHBhY2tldHMKKyogT3ZlcnZpZXc6CUNoZWNrIHdoZXRoZXIgZHJpdmVyIHNob3VsZCBkZWNsYXJlIGNhcGFiaWxpdHkgb2YgcmVjZWl2aW5nIEFsbCAyIHNzIHBhY2tldHMKICoKICogSW5wdXQ6CiAqCQkJUEFEQVBURVIJCUFkYXB0ZXIsCkBAIC0xNjgxLDcgKzE2ODEsNyBAQAogCS8vaWYgaW4gaGFsZiBOIG1vZGUsIHNldCB0byAyME0gYmFuZHdpZHRoIHBsZWFzZSAwOS4wOC4yMDA4IFdCLgogCWlmIChCYW5kd2lkdGg9PUhUX0NIQU5ORUxfV0lEVEhfMjBfNDAgJiYgKCFpZWVlLT5HZXRIYWxmTm1vZGVTdXBwb3J0QnlBUHNIYW5kbGVyKGllZWUpKSkKIAkgewotCSAJCS8vIEhhbmRsZSBJbGxlZ2FsIGV4dGVudGlvbiBjaGFubmVsIG9mZnNldCEhCisJIAkJLy8gSGFuZGxlIElsbGVnYWwgZXh0ZW5zaW9uIGNoYW5uZWwgb2Zmc2V0ISEKIAkJaWYoaWVlZS0+Y3VycmVudF9uZXR3b3JrLmNoYW5uZWw8MiAmJiBPZmZzZXQ9PUhUX0VYVENITkxfT0ZGU0VUX0xPV0VSKQogCQkJT2Zmc2V0ID0gSFRfRVhUQ0hOTF9PRkZTRVRfTk9fRVhUOwogCQlpZihPZmZzZXQ9PUhUX0VYVENITkxfT0ZGU0VUX1VQUEVSIHx8IE9mZnNldD09SFRfRVhUQ0hOTF9PRkZTRVRfTE9XRVIpIHsKQEAgLTE2OTgsNyArMTY5OCw3IEBACiAKIAlwSFRJbmZvLT5iU3dCd0luUHJvZ3Jlc3MgPSB0cnVlOwogCi0JLy8gVE9ETzogMjAwNy43LjEzIGJ5IEVtaWx5IFdhaXQgMjAwMG1zICBpbiBvcmRlciB0byBnYXJhbnRlZSB0aGF0IHN3aXRjaGluZworCS8vIFRPRE86IDIwMDcuNy4xMyBieSBFbWlseSBXYWl0IDIwMDBtcyAgaW4gb3JkZXIgdG8gZ3VhcmFudGVlIHRoYXQgc3dpdGNoaW5nCiAJLy8gICBiYW5kd2lkdGggaXMgZXhlY3V0ZWQgYWZ0ZXIgc2NhbiBpcyBmaW5pc2hlZC4gSXQgaXMgYSB0ZW1wb3JhbCBzb2x1dGlvbgogCS8vICAgYmVjYXVzZSBzb2Z0d2FyZSBzaG91bGQgZ2FucmFudGVlIHRoZSBsYXN0IG9wZXJhdGlvbiBvZiBzd2l0Y2hpbmcgYmFuZHdpZHRoCiAJLy8gICBpcyBleGVjdXRlZCBwcm9wZXJsbHkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL3J0bDgxOXhfVFMuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9UUy5oCmluZGV4IGJhYWFjMjEuLmU3ZTI2ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9UUy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9UUy5oCkBAIC00NCw3ICs0NCw3IEBACiAJdTE2CQkJCVJ4VGltZW91dEluZGljYXRlU2VxOwogCXN0cnVjdCBsaXN0X2hlYWQJCVJ4UGVuZGluZ1BrdExpc3Q7CiAJc3RydWN0IHRpbWVyX2xpc3QJCVJ4UGt0UGVuZGluZ1RpbWVyOwotCUJBX1JFQ09SRAkJCVJ4QWRtaXR0ZWRCQVJlY29yZDsJIC8vIEZvciBCQSBSZWNlcGllbnQKKwlCQV9SRUNPUkQJCQlSeEFkbWl0dGVkQkFSZWNvcmQ7CSAvLyBGb3IgQkEgUmVjaXBpZW50CiAJdTE2CQkJCVJ4TGFzdFNlcU51bTsKIAl1OAkJCQlSeExhc3RGcmFnTnVtOwogCXU4CQkJCW51bTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9UU1Byb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9UU1Byb2MuYwppbmRleCAyOWVlY2YwLi5hZDY4NzJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL3J0bDgxOXhfVFNQcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X1RTUHJvYy5jCkBAIC0xMzUsNyArMTM1LDcgQEAKIAlSZXNldFRzQ29tbW9uSW5mbygmcFRTLT5Uc0NvbW1vbkluZm8pOwogCXBUUy0+UnhJbmRpY2F0ZVNlcSA9IDB4ZmZmZjsgLy8gVGhpcyBpbmRpY2F0ZSB0aGUgUnhJbmRpY2F0ZVNlcSBpcyBub3QgdXNlZCBub3chIQogCXBUUy0+UnhUaW1lb3V0SW5kaWNhdGVTZXEgPSAweGZmZmY7IC8vIFRoaXMgaW5kaWNhdGUgdGhlIFJ4VGltZW91dEluZGljYXRlU2VxIGlzIG5vdCB1c2VkIG5vdyEhCi0JUmVzZXRCYUVudHJ5KCZwVFMtPlJ4QWRtaXR0ZWRCQVJlY29yZCk7CSAgLy8gRm9yIEJBIFJlY2VwaWVudAorCVJlc2V0QmFFbnRyeSgmcFRTLT5SeEFkbWl0dGVkQkFSZWNvcmQpOwkgIC8vIEZvciBCQSBSZWNpcGllbnQKIH0KIAogdm9pZCBUU0luaXRpYWxpemUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOXhFX3BoeS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTl4RV9waHkuYwppbmRleCBkZmE0ZTExLi45ZTc4MjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOXhFX3BoeS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5eEVfcGh5LmMKQEAgLTIwMzIsMTMgKzIwMzIsMTMgQEAKIAl7CiAJCWNhc2UgSFRfQ0hBTk5FTF9XSURUSF8yMDoKIAkJCXJlZ0J3T3BNb2RlIHw9IEJXX09QTU9ERV8yME1IWjsKLQkJICAgICAgIC8vIDIwMDcvMDIvMDcgTWFyayBieSBFbWlseSBiZWNhc3VlIHdlIGhhdmUgbm90IHZlcmlmeSB3aGV0aGVyIHRoaXMgcmVnaXN0ZXIgd29ya3MKKwkJICAgICAgIC8vIDIwMDcvMDIvMDcgTWFyayBieSBFbWlseSBiZWNhdXNlIHdlIGhhdmUgbm90IHZlcmlmeSB3aGV0aGVyIHRoaXMgcmVnaXN0ZXIgd29ya3MKIAkJCXdyaXRlX25pY19ieXRlKHByaXYsIEJXX09QTU9ERSwgcmVnQndPcE1vZGUpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBIVF9DSEFOTkVMX1dJRFRIXzIwXzQwOgogCQkJcmVnQndPcE1vZGUgJj0gfkJXX09QTU9ERV8yME1IWjsKLSAgICAgICAgCQkvLyAyMDA3LzAyLzA3IE1hcmsgYnkgRW1pbHkgYmVjYXN1ZSB3ZSBoYXZlIG5vdCB2ZXJpZnkgd2hldGhlciB0aGlzIHJlZ2lzdGVyIHdvcmtzCisgICAgICAgIAkJLy8gMjAwNy8wMi8wNyBNYXJrIGJ5IEVtaWx5IGJlY2F1c2Ugd2UgaGF2ZSBub3QgdmVyaWZ5IHdoZXRoZXIgdGhpcyByZWdpc3RlciB3b3JrcwogCQkJd3JpdGVfbmljX2J5dGUocHJpdiwgQldfT1BNT0RFLCByZWdCd09wTW9kZSk7CiAJCQlicmVhazsKIApAQCAtMjExNiw3ICsyMTE2LDcgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICpmdW5jdGlvbjogIFRoaXMgZnVuY3Rpb24gc2NoZWR1bGVzIGJhbmR3aXRoIHN3aXRjaCB3b3JrLgorICpmdW5jdGlvbjogIFRoaXMgZnVuY3Rpb24gc2NoZWR1bGVzIGJhbmR3aWR0aCBzd2l0Y2ggd29yay4KICAqICAgaW5wdXQ6ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2CiAgKiAgIAkgICAgIEhUX0NIQU5ORUxfV0lEVEgJQmFuZHdpZHRoICAvLzIwTSBvciA0ME0KICAqICAgCSAgICAgSFRfRVhUQ0hOTF9PRkZTRVQgT2Zmc2V0IAkgICAvL1VwcGVyLCBMb3dlciwgb3IgRG9uJ3QgY2FyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvS2NvbmZpZwppbmRleCAyODk2OTE5Li4zZjA1NTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvS2NvbmZpZwpAQCAtMSw2ICsxLDcgQEAKIGNvbmZpZyBSVEw4MTkyVQogCXRyaXN0YXRlICJSZWFsVGVrIFJUTDgxOTJVIFdpcmVsZXNzIExBTiBOSUMgZHJpdmVyIgogCWRlcGVuZHMgb24gUENJICYmIFdMQU4gJiYgVVNCCisJZGVwZW5kcyBvbiBtCiAJc2VsZWN0IFdJUkVMRVNTX0VYVAogCXNlbGVjdCBXRVhUX1BSSVYKIAlzZWxlY3QgQ1JZUFRPCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTEuaAppbmRleCBjMGI4NDRkLi5lNzE2ZjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExLmgKQEAgLTE5NjUsNyArMTk2NSw3IEBACiAJdTE2IHByZXZfc2VxX2N0bDsgICAgICAgLyogdXNlZCB0byBkcm9wIGR1cGxpY2F0ZSBmcmFtZXMgKi8KIAogCS8qIG1hcCBvZiBhbGxvd2VkIGNoYW5uZWxzLiAwIGlzIGR1bW15ICovCi0JLy8gRklYTUU6IHJlbWViZXIgdG8gZGVmYXVsdCB0byBhIGJhc2ljIGNoYW5uZWwgcGxhbiBkZXBlbmRpbmcgb2YgdGhlIFBIWSB0eXBlCisJLy8gRklYTUU6IHJlbWVtYmVyIHRvIGRlZmF1bHQgdG8gYSBiYXNpYyBjaGFubmVsIHBsYW4gZGVwZW5kaW5nIG9mIHRoZSBQSFkgdHlwZQogCXZvaWQqIHBEb3QxMWRJbmZvOwogCWJvb2wgYkdsb2JhbERvbWFpbjsKIAlpbnQgcmF0ZTsgICAgICAgLyogY3VycmVudCByYXRlICovCkBAIC0yMTE5LDcgKzIxMTksNyBAQAogCSAqIG5vdCBzZXQuIEFzIHNvbWUgY2FyZHMgbWF5IGhhdmUgZGlmZmVyZW50IEhXIHF1ZXVlcyB0aGF0CiAJICogb25lIG1pZ2h0IHdhbnQgdG8gdXNlIGZvciBkYXRhIGFuZCBtYW5hZ2VtZW50IGZyYW1lcwogCSAqIHRoZSBvcHRpb24gdG8gaGF2ZSB0d28gY2FsbGJhY2tzIG1pZ2h0IGJlIHVzZWZ1bC4KLQkgKiBUaGlzIGZ1Y250aW9uIGNhbid0IHNsZWVwLgorCSAqIFRoaXMgZnVuY3Rpb24gY2FuJ3Qgc2xlZXAuCiAJICovCiAJaW50ICgqc29mdG1hY19oYXJkX3N0YXJ0X3htaXQpKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0yMTU4LDkgKzIxNTgsOSBAQAogCSAqIGl0IGlzIGNhbGxlZCBpbiBhIHdvcmtfcXVldWUgd2hlbiBzd2l0aGNpbmcgdG8gYWQtaG9jIG1vZGUKIAkgKiBvciBpbiBiZWhhbGYgb2YgaXdsaXN0IHNjYW4gd2hlbiB0aGUgY2FyZCBpcyBhc3NvY2lhdGVkCiAJICogYW5kIHJvb3QgdXNlciBhc2sgZm9yIGEgc2Nhbi4KLQkgKiB0aGUgZnVjbnRpb24gc3RvcF9zY2FuIHNob3VsZCBzdG9wIGJvdGggdGhlIHN5bmNybyBhbmQKKwkgKiB0aGUgZnVuY3Rpb24gc3RvcF9zY2FuIHNob3VsZCBzdG9wIGJvdGggdGhlIHN5bmNybyBhbmQKIAkgKiBiYWNrZ3JvdW5kIHNjYW5uaW5nIGFuZCBjYW4gc2xlZXAuCi0JICogVGhlIGZ1Y250aW9uIHN0YXJ0X3NjYW4gc2hvdWxkIGluaXRpYXRlIHRoZSBiYWNrZ3JvdW5kCisJICogVGhlIGZ1bmN0aW9uIHN0YXJ0X3NjYW4gc2hvdWxkIGluaXRpYXRlIHRoZSBiYWNrZ3JvdW5kCiAJICogc2Nhbm5pbmcgYW5kIGNhbid0IHNsZWVwLgogCSAqLwogCXZvaWQgKCpzY2FuX3N5bmNybykoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYwppbmRleCA0OThiNTIwLi5hNDE0MzAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKQEAgLTEzOTksNyArMTM5OSw3IEBACiBzdGF0aWMgdTggcW9zX291aVtRT1NfT1VJX0xFTl0gPSB7IDB4MDAsIDB4NTAsIDB4RjIgfTsKIAogLyoKLSogTWFrZSB0aGVyIHN0cnVjdHVyZSB3ZSByZWFkIGZyb20gdGhlIGJlYWNvbiBwYWNrZXQgaGFzCisqIE1ha2UgdGhlIHN0cnVjdHVyZSB3ZSByZWFkIGZyb20gdGhlIGJlYWNvbiBwYWNrZXQgdG8gaGF2ZQogKiB0aGUgcmlnaHQgdmFsdWVzCiAqLwogc3RhdGljIGludCBpZWVlODAyMTFfdmVyaWZ5X3Fvc19pbmZvKHN0cnVjdCBpZWVlODAyMTFfcW9zX2luZm9ybWF0aW9uX2VsZW1lbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwppbmRleCA0OTkyZDYzLi40ZWMwYTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCkBAIC0xOTczLDcgKzE5NzMsNyBAQAogCQkJCQkJCXJldHVybiAxOwogCQkJCQkJfQogCQkJCQkJZWxzZQotCQkJCQkJewkvL2ZpbGxpbmcgdGhlIFBlZXJIVENhcC4gLy9tYXliZSBub3QgbmVjY2VzYXJ5IGFzIHdlIGNhbiBnZXQgaXRzIGluZm8gZnJvbSBjdXJyZW50X25ldHdvcmsuCisJCQkJCQl7CS8vZmlsbGluZyB0aGUgUGVlckhUQ2FwLiAvL21heWJlIG5vdCBuZWNlc3NhcnkgYXMgd2UgY2FuIGdldCBpdHMgaW5mbyBmcm9tIGN1cnJlbnRfbmV0d29yay4KIAkJCQkJCQltZW1jcHkoaWVlZS0+cEhUSW5mby0+UGVlckhUQ2FwQnVmLCBuZXR3b3JrLT5ic3NodC5iZEhUQ2FwQnVmLCBuZXR3b3JrLT5ic3NodC5iZEhUQ2FwTGVuKTsKIAkJCQkJCQltZW1jcHkoaWVlZS0+cEhUSW5mby0+UGVlckhUSW5mb0J1ZiwgbmV0d29yay0+YnNzaHQuYmRIVEluZm9CdWYsIG5ldHdvcmstPmJzc2h0LmJkSFRJbmZvTGVuKTsKIAkJCQkJCX0KQEAgLTIxMTMsNyArMjExMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIGZvbGxvd2luZyBhcmUgZm9yIGEgc2ltcGxpZXIgVFggcXVldWUgbWFuYWdlbWVudC4KKy8qIGZvbGxvd2luZyBhcmUgZm9yIGEgc2ltcGxlciBUWCBxdWV1ZSBtYW5hZ2VtZW50LgogICogSW5zdGVhZCBvZiB1c2luZyBuZXRpZl9bc3RvcC93YWtlXV9xdWV1ZSB0aGUgZHJpdmVyCiAgKiB3aWxsIHVzZXMgdGhlc2UgdHdvIGZ1bmN0aW9uIChwbHVzIGEgcmVzZXQgb25lKSwgdGhhdAogICogd2lsbCBpbnRlcm5hbGx5IHVzZXMgdGhlIGtlcm5lbCBuZXRpZl8qIGFuZCB0YWtlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X0hULmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfSFQuaAppbmRleCBjZGU2MDNmLi4wYjFhMWZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfSFQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfSFQuaApAQCAtNjQsNyArNjQsNyBAQAogfUhUX0NIQU5ORUxfV0lEVEgsICpQSFRfQ0hBTk5FTF9XSURUSDsKIAogLy8KLS8vIFJlcHJlc2VudCBFeHRlbnRpb24gQ2hhbm5lbCBPZmZzZXQgaW4gSFQgQ2FwYWJpbGl0aWVzCisvLyBSZXByZXNlbnQgRXh0ZW5zaW9uIENoYW5uZWwgT2Zmc2V0IGluIEhUIENhcGFiaWxpdGllcwogLy8gVGhpcyBpcyBhdmFpbGFibGUgb25seSBpbiA0ME1oeiBtb2RlLgogLy8KIHR5cGVkZWYgZW51bSBfSFRfRVhUQ0hOTF9PRkZTRVR7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfSFRQcm9jLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfSFRQcm9jLmMKaW5kZXggNTBmNGY1OS4uZTg4YTgzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X0hUUHJvYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYwpAQCAtNDIzLDcgKzQyMyw3IEBACiAvKioKICogRnVuY3Rpb246CUhUSU9UQWN0SXNEaXNhYmxlTUNTMTUKICoKLSogT3ZlcnZpZXc6CUNoZWNrIHdoZXRoZXIgZHJpdmVyIHNob3VsZCBkZWNsYXJlIGNhcGFiaWxpdHkgb2YgcmVjZXZpbmcgTUNTMTUKKyogT3ZlcnZpZXc6CUNoZWNrIHdoZXRoZXIgZHJpdmVyIHNob3VsZCBkZWNsYXJlIGNhcGFiaWxpdHkgb2YgcmVjZWl2aW5nIE1DUzE1CiAqCiAqIElucHV0OgogKgkJCVBBREFQVEVSCQlBZGFwdGVyLApAQCAtNDYwLDcgKzQ2MCw3IEBACiAvKioKICogRnVuY3Rpb246CUhUSU9UQWN0SXNEaXNhYmxlTUNTVHdvU3BhdGlhbFN0cmVhbQogKgotKiBPdmVydmlldzoJQ2hlY2sgd2hldGhlciBkcml2ZXIgc2hvdWxkIGRlY2xhcmUgY2FwYWJpbGl0eSBvZiByZWNldmluZyBBbGwgMiBzcyBwYWNrZXRzCisqIE92ZXJ2aWV3OglDaGVjayB3aGV0aGVyIGRyaXZlciBzaG91bGQgZGVjbGFyZSBjYXBhYmlsaXR5IG9mIHJlY2VpdmluZyBBbGwgMiBzcyBwYWNrZXRzCiAqCiAqIElucHV0OgogKgkJCVBBREFQVEVSCQlBZGFwdGVyLApAQCAtMTQwOSw3ICsxNDA5LDcgQEAKIAkvL2lmIGluIGhhbGYgTiBtb2RlLCBzZXQgdG8gMjBNIGJhbmR3aWR0aCBwbGVhc2UgMDkuMDguMjAwOCBXQi4KIAlpZihCYW5kd2lkdGg9PUhUX0NIQU5ORUxfV0lEVEhfMjBfNDAgJiYgKCFpZWVlLT5HZXRIYWxmTm1vZGVTdXBwb3J0QnlBUHNIYW5kbGVyKGllZWUtPmRldikpKQogCSB7Ci0JCQkvLyBIYW5kbGUgSWxsZWdhbCBleHRlbnRpb24gY2hhbm5lbCBvZmZzZXQhIQorCQkJLy8gSGFuZGxlIElsbGVnYWwgZXh0ZW5zaW9uIGNoYW5uZWwgb2Zmc2V0ISEKIAkJaWYoaWVlZS0+Y3VycmVudF9uZXR3b3JrLmNoYW5uZWw8MiAmJiBPZmZzZXQ9PUhUX0VYVENITkxfT0ZGU0VUX0xPV0VSKQogCQkJT2Zmc2V0ID0gSFRfRVhUQ0hOTF9PRkZTRVRfTk9fRVhUOwogCQlpZihPZmZzZXQ9PUhUX0VYVENITkxfT0ZGU0VUX1VQUEVSIHx8IE9mZnNldD09SFRfRVhUQ0hOTF9PRkZTRVRfTE9XRVIpIHsKQEAgLTE0MjYsNyArMTQyNiw3IEBACiAKIAlwSFRJbmZvLT5iU3dCd0luUHJvZ3Jlc3MgPSB0cnVlOwogCi0JLy8gVE9ETzogMjAwNy43LjEzIGJ5IEVtaWx5IFdhaXQgMjAwMG1zICBpbiBvcmRlciB0byBnYXJhbnRlZSB0aGF0IHN3aXRjaGluZworCS8vIFRPRE86IDIwMDcuNy4xMyBieSBFbWlseSBXYWl0IDIwMDBtcyAgaW4gb3JkZXIgdG8gZ3VhcmFudGVlIHRoYXQgc3dpdGNoaW5nCiAJLy8gICBiYW5kd2lkdGggaXMgZXhlY3V0ZWQgYWZ0ZXIgc2NhbiBpcyBmaW5pc2hlZC4gSXQgaXMgYSB0ZW1wb3JhbCBzb2x1dGlvbgogCS8vICAgYmVjYXVzZSBzb2Z0d2FyZSBzaG91bGQgZ2FucmFudGVlIHRoZSBsYXN0IG9wZXJhdGlvbiBvZiBzd2l0Y2hpbmcgYmFuZHdpZHRoCiAJLy8gICBpcyBleGVjdXRlZCBwcm9wZXJsbHkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfVFMuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9UUy5oCmluZGV4IGJhYWFjMjEuLmU3ZTI2ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9UUy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9UUy5oCkBAIC00NCw3ICs0NCw3IEBACiAJdTE2CQkJCVJ4VGltZW91dEluZGljYXRlU2VxOwogCXN0cnVjdCBsaXN0X2hlYWQJCVJ4UGVuZGluZ1BrdExpc3Q7CiAJc3RydWN0IHRpbWVyX2xpc3QJCVJ4UGt0UGVuZGluZ1RpbWVyOwotCUJBX1JFQ09SRAkJCVJ4QWRtaXR0ZWRCQVJlY29yZDsJIC8vIEZvciBCQSBSZWNlcGllbnQKKwlCQV9SRUNPUkQJCQlSeEFkbWl0dGVkQkFSZWNvcmQ7CSAvLyBGb3IgQkEgUmVjaXBpZW50CiAJdTE2CQkJCVJ4TGFzdFNlcU51bTsKIAl1OAkJCQlSeExhc3RGcmFnTnVtOwogCXU4CQkJCW51bTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9UU1Byb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9UU1Byb2MuYwppbmRleCBjM2ZjYWFlLi45NTdjZTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfVFNQcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X1RTUHJvYy5jCkBAIC0xMzUsNyArMTM1LDcgQEAKIAlSZXNldFRzQ29tbW9uSW5mbygmcFRTLT5Uc0NvbW1vbkluZm8pOwogCXBUUy0+UnhJbmRpY2F0ZVNlcSA9IDB4ZmZmZjsgLy8gVGhpcyBpbmRpY2F0ZSB0aGUgUnhJbmRpY2F0ZVNlcSBpcyBub3QgdXNlZCBub3chIQogCXBUUy0+UnhUaW1lb3V0SW5kaWNhdGVTZXEgPSAweGZmZmY7IC8vIFRoaXMgaW5kaWNhdGUgdGhlIFJ4VGltZW91dEluZGljYXRlU2VxIGlzIG5vdCB1c2VkIG5vdyEhCi0JUmVzZXRCYUVudHJ5KCZwVFMtPlJ4QWRtaXR0ZWRCQVJlY29yZCk7CSAgLy8gRm9yIEJBIFJlY2VwaWVudAorCVJlc2V0QmFFbnRyeSgmcFRTLT5SeEFkbWl0dGVkQkFSZWNvcmQpOwkgIC8vIEZvciBCQSBSZWNpcGllbnQKIH0KIAogdm9pZCBUU0luaXRpYWxpemUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3NjYXR0ZXJ3YWxrLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3NjYXR0ZXJ3YWxrLmMKaW5kZXggNDlmNDAxZi4uMzU0M2E2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9zY2F0dGVyd2Fsay5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvc2NhdHRlcndhbGsuYwpAQCAtNzEsNyArNzEsNyBAQAogCQkJCSB1bnNpZ25lZCBpbnQgbW9yZSkKIHsKIAkvKiB3YWxrLT5kYXRhIG1heSBiZSBwb2ludGluZyB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgbmV4dCBwYWdlOwotCSAgIGhvd2V2ZXIsIHdlIGtub3cgd2UgdHJhbnNmZXJlZCBhdCBsZWFzdCBvbmUgYnl0ZS4gIFNvLAorCSAgIGhvd2V2ZXIsIHdlIGtub3cgd2UgdHJhbnNmZXJyZWQgYXQgbGVhc3Qgb25lIGJ5dGUuICBTbywKIAkgICB3YWxrLT5kYXRhIC0gMSB3aWxsIGJlIGEgdmlydHVhbCBhZGRyZXNzIGluIHRoZSBtYXBwZWQgcGFnZS4gKi8KIAogCWlmIChvdXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOTJVX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5MlVfY29yZS5jCmluZGV4IGRhNjEyZTYuLmU4MWI4YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5MlVfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5MlVfY29yZS5jCkBAIC00NjAsNyArNDYwLDcgQEAKIC8qIHU4IHJlYWRfcGh5X2NjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBhZHIpOyAqLwogLyogdTggcmVhZF9waHlfb2ZkbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBhZHIpOyAqLwogLyogdGhpcyBtaWdodCBzdGlsbCBjYWxsZWQgaW4gd2hhdCB3YXMgdGhlIFBIWSBydGw4MTg1L3J0bDgxOTIgY29tbW9uIGNvZGUKLSAqIHBsYW5zIGFyZSB0byBwb3NzaWJpbHR5IHR1cm4gaXQgYWdhaW4gaW4gb25lIGNvbW1vbiBjb2RlLi4uCisgKiBwbGFucyBhcmUgdG8gcG9zc2liaWxpdHkgdHVybiBpdCBhZ2FpbiBpbiBvbmUgY29tbW9uIGNvZGUuLi4KICAqLwogaW5saW5lIHZvaWQgZm9yY2VfcGNpX3Bvc3Rpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTEzNzgsNyArMTM3OCw3IEBACiAJCS8vdHhfYWdnX2Rlc2MtPkxJTklQID0gMDsKIAkJLy90eF9hZ2dfZGVzYy0+Q21kSW5pdCA9IDE7CiAJCXR4X2FnZ19kZXNjLT5PZmZzZXQgPSAgc2l6ZW9mKHR4X2Z3aW5mb184MTl4X3VzYikgKyA4OwotCQkvKiBhbHJlYWR5IHJhdyBkYXRhLCBuZWVkIG5vdCB0byBzdWJzdHJhY3QgaGVhZGVyIGxlbmd0aCAqLworCQkvKiBhbHJlYWR5IHJhdyBkYXRhLCBuZWVkIG5vdCB0byBzdWJ0cmFjdCBoZWFkZXIgbGVuZ3RoICovCiAJCXR4X2FnZ19kZXNjLT5Qa3RTaXplID0gc2tiLT5sZW4gJiAweGZmZmY7CiAKIAkJLypEV09SRCAxKi8KQEAgLTI4ODgsNyArMjg4OCw3IEBACiAJUlRfVFJBQ0UoQ09NUF9FUFJPTSwgIjw9PT09PT09PT09PSVzKCksIGVwcm9tdHlwZTolZFxuIiwgX19GVU5DVElPTl9fLCBwcml2LT5lcHJvbXR5cGUpOwogfQogCi0vL3VzZWQgdG8gc3dhcCBlbmRpYW4uIGFzIG50b2hsICYgaHRvbmwgYXJlIG5vdCBuZWNjZXNzYXJ5IHRvIHN3YXAgZW5kaWFuLCBzbyB1c2UgdGhpcyBpbnN0ZWFkLgorLy91c2VkIHRvIHN3YXAgZW5kaWFuLiBhcyBudG9obCAmIGh0b25sIGFyZSBub3QgbmVjZXNzYXJ5IHRvIHN3YXAgZW5kaWFuLCBzbyB1c2UgdGhpcyBpbnN0ZWFkLgogc3RhdGljIGlubGluZSB1MTYgZW5kaWFuX3N3YXAodTE2KiBkYXRhKQogewogCXUxNiB0bXAgPSAqZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5eFVfSFRUeXBlLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOXhVX0hUVHlwZS5oCmluZGV4IDAxZjU4YjkuLjJhYzQyMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5eFVfSFRUeXBlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTl4VV9IVFR5cGUuaApAQCAtNjUsNyArNjUsNyBAQAogfUhUX0NIQU5ORUxfV0lEVEgsICpQSFRfQ0hBTk5FTF9XSURUSDsKIAogLy8KLS8vIFJlcHJlc2VudCBFeHRlbnRpb24gQ2hhbm5lbCBPZmZzZXQgaW4gSFQgQ2FwYWJpbGl0aWVzCisvLyBSZXByZXNlbnQgRXh0ZW5zaW9uIENoYW5uZWwgT2Zmc2V0IGluIEhUIENhcGFiaWxpdGllcwogLy8gVGhpcyBpcyBhdmFpbGFibGUgb25seSBpbiA0ME1oeiBtb2RlLgogLy8KIHR5cGVkZWYgZW51bSBfSFRfRVhUQ0hOTF9PRkZTRVR7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOXhVX3BoeS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTl4VV9waHkuYwppbmRleCA0MTY4NGU4Li5jNDU4NmIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOXhVX3BoeS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5eFVfcGh5LmMKQEAgLTE1MzEsMTMgKzE1MzEsMTMgQEAKIAl7CiAJCWNhc2UgSFRfQ0hBTk5FTF9XSURUSF8yMDoKIAkJCXJlZ0J3T3BNb2RlIHw9IEJXX09QTU9ERV8yME1IWjsKLQkJICAgICAgIC8vIDIwMDcvMDIvMDcgTWFyayBieSBFbWlseSBiZWNhc3VlIHdlIGhhdmUgbm90IHZlcmlmeSB3aGV0aGVyIHRoaXMgcmVnaXN0ZXIgd29ya3MKKwkJICAgICAgIC8vIDIwMDcvMDIvMDcgTWFyayBieSBFbWlseSBiZWNhdXNlIHdlIGhhdmUgbm90IHZlcmlmeSB3aGV0aGVyIHRoaXMgcmVnaXN0ZXIgd29ya3MKIAkJCXdyaXRlX25pY19ieXRlKGRldiwgQldfT1BNT0RFLCByZWdCd09wTW9kZSk7CiAJCQlicmVhazsKIAogCQljYXNlIEhUX0NIQU5ORUxfV0lEVEhfMjBfNDA6CiAJCQlyZWdCd09wTW9kZSAmPSB+QldfT1BNT0RFXzIwTUhaOwotCQkJLy8gMjAwNy8wMi8wNyBNYXJrIGJ5IEVtaWx5IGJlY2FzdWUgd2UgaGF2ZSBub3QgdmVyaWZ5IHdoZXRoZXIgdGhpcyByZWdpc3RlciB3b3JrcworCQkJLy8gMjAwNy8wMi8wNyBNYXJrIGJ5IEVtaWx5IGJlY2F1c2Ugd2UgaGF2ZSBub3QgdmVyaWZ5IHdoZXRoZXIgdGhpcyByZWdpc3RlciB3b3JrcwogCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBCV19PUE1PREUsIHJlZ0J3T3BNb2RlKTsKIAkJCWJyZWFrOwogCkBAIC0xNjQ3LDcgKzE2NDcsNyBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKmZ1bmN0aW9uOiAgVGhpcyBmdW5jdGlvbiBzY2hlZHVsZXMgYmFuZHdpdGggc3dpdGNoIHdvcmsuCisgKmZ1bmN0aW9uOiAgVGhpcyBmdW5jdGlvbiBzY2hlZHVsZXMgYmFuZHdpZHRoIHN3aXRjaCB3b3JrLgogICogICBpbnB1dDogIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYKICAqICAgCSAgICAgSFRfQ0hBTk5FTF9XSURUSAlCYW5kd2lkdGggIC8vMjBNIG9yIDQwTQogICogICAJICAgICBIVF9FWFRDSE5MX09GRlNFVCBPZmZzZXQgCSAgIC8vVXBwZXIsIExvd2VyLCBvciBEb24ndCBjYXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X2NtZC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9jbWQuaAppbmRleCAzYTk0NWI1Li4yZGM3ODQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X2NtZC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfY21kLmgKQEAgLTY1Niw3ICs2NTYsNyBAQAogLyoKICAqIFJlc3VsdDoKICAqIDB4MDA6IHN1Y2Nlc3MKLSAqIDB4MDE6IHN1Y2VzcywgYW5kIGNoZWNrIFJlc3BvbnNlLgorICogMHgwMTogc3VjY2VzcywgYW5kIGNoZWNrIFJlc3BvbnNlLgogICogMHgwMjogY21kIGlnbm9yZWQgZHVlIHRvIGR1cGxpY2F0ZWQgc2VxdWNuZSBudW1iZXIKICAqIDB4MDM6IGNtZCBkcm9wcGVkIGR1ZSB0byBpbnZhbGlkIGNtZCBjb2RlCiAgKiAweDA0OiByZXNlcnZlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfbGVkLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X2xlZC5oCmluZGV4IDk5NGVmODIuLjgwODVlNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfbGVkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9sZWQuaApAQCAtNzgsMTQgKzc4LDE0IEBACiB9OwogCiBzdHJ1Y3QgbGVkX3ByaXYgewotCS8qIGFkZCBmb3IgbGVkIGNvbnRyb2xsICovCisJLyogYWRkIGZvciBsZWQgY29udHJvbCAqLwogCXN0cnVjdCBMRURfODcxeAkJU3dMZWQwOwogCXN0cnVjdCBMRURfODcxeAkJU3dMZWQxOwogCWVudW0gTEVEX1NUUkFURUdZXzg3MXgJTGVkU3RyYXRlZ3k7CiAJdTgJCQliUmVnVXNlTGVkOwogCXZvaWQgKCpMZWRDb250cm9sSGFuZGxlcikoc3RydWN0IF9hZGFwdGVyICpwYWRhcHRlciwKIAkJCQkgIGVudW0gTEVEX0NUTF9NT0RFIExlZEFjdGlvbik7Ci0JLyogYWRkIGZvciBsZWQgY29udHJvbGwgKi8KKwkvKiBhZGQgZm9yIGxlZCBjb250cm9sICovCiB9OwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9tbG1lLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X21sbWUuYwppbmRleCA5OGJhNzYwLi44NjY1NTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X21sbWUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X21sbWUuYwpAQCAtMTY2Myw3ICsxNjYzLDcgQEAKIAkJCSAgICAgIChzdHJ1Y3QgbmRpc193bGFuX2Jzc2lkX2V4ICopcGRldl9uZXR3b3JrKTsKIH0KIAotLyp0aGUgZnVjbnRpb24gaXMgYXQgcGFzc2l2ZV9sZXZlbCovCisvKnRoZSBmdW5jdGlvbiBpcyBhdCBwYXNzaXZlX2xldmVsKi8KIHZvaWQgcjg3MTJfam9pbmJzc19yZXNldChzdHJ1Y3QgX2FkYXB0ZXIgKnBhZGFwdGVyKQogewogCWludCBpOwpAQCAtMTcyNiw3ICsxNzI2LDcgQEAKIAlyZXR1cm4gcGh0cHJpdi0+aHRfb3B0aW9uOwogfQogCi0vKiB0aGUgZnVjbnRpb24gaXMgPiBwYXNzaXZlX2xldmVsIChpbiBjcml0aWNhbF9zZWN0aW9uKSAqLworLyogdGhlIGZ1bmN0aW9uIGlzID4gcGFzc2l2ZV9sZXZlbCAoaW4gY3JpdGljYWxfc2VjdGlvbikgKi8KIHN0YXRpYyB2b2lkIHVwZGF0ZV9odF9jYXAoc3RydWN0IF9hZGFwdGVyICpwYWRhcHRlciwgdTggKnBpZSwgdWludCBpZV9sZW4pCiB7CiAJdTggKnAsIG1heF9hbXBkdV9zejsKQEAgLTE4MDMsNyArMTgwMyw3IEBACiAJfQogfQogCi0vKnRoZSBmdWNudGlvbiBpcyA+PSBwYXNzaXZlX2xldmVsKi8KKy8qdGhlIGZ1bmN0aW9uIGlzID49IHBhc3NpdmVfbGV2ZWwqLwogdW5zaWduZWQgaW50IHI4NzEyX2FkZF9odF9hZGR0X2luZm8oc3RydWN0IF9hZGFwdGVyICpwYWRhcHRlciwKIAkJCSAgICAgIHU4ICppbl9pZSwgdTggKm91dF9pZSwKIAkJCSAgICAgIHVpbnQgaW5fbGVuLCB1aW50ICpwb3V0X2xlbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfbWxtZS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9tbG1lLmgKaW5kZXggMmIzNWI3NC4uMjc5NDgwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9tbG1lLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvcnRsODcxeF9tbG1lLmgKQEAgLTI5LDcgKzI5LDcgQEAKIAkJCQkJCSAqICBzaW5nbGUtdG9uZSovCiAjZGVmaW5lCVdJRklfTVBfQ1RYX0JBQ0tHUk9VTkRfUEVORElORwkweDAwMDgwMDAwIC8qIHBlbmRpbmcgaW4gY29udCwgdHgKIAkJCQkJKiBiYWNrZ3JvdW5kIGR1ZSB0byBvdXQgb2Ygc2tiKi8KLSNkZWZpbmUJV0lGSV9NUF9DVFhfQ0NLX0hXCTB4MDAxMDAwMDAJLyogaW4gY29udGlub3VzIHR4Ki8KKyNkZWZpbmUJV0lGSV9NUF9DVFhfQ0NLX0hXCTB4MDAxMDAwMDAJLyogaW4gY29udGludW91cyB0eCovCiAjZGVmaW5lCVdJRklfTVBfQ1RYX0NDS19DUwkweDAwMjAwMDAwCS8qIGluIGNvbnQsIHR4IHdpdGggY2FycmllcgogCQkJCQkJICogc3VwcHJlc3Npb24qLwogI2RlZmluZSAgIFdJRklfTVBfTFBCS19TVEFURQkweDAwNDAwMDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9ydGw4NzF4X21wX3BoeV9yZWdkZWYuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfbXBfcGh5X3JlZ2RlZi5oCmluZGV4IGUzODZmYjAuLjIzNTMyYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfbXBfcGh5X3JlZ2RlZi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3J0bDg3MXhfbXBfcGh5X3JlZ2RlZi5oCkBAIC0zOCw3ICszOCw3IEBACiAgKiAyLiAweDgwMC8weDkwMC8weEEwMC8weEMwMC8weEQwMC8weEUwMAogICogMy4gUkYgcmVnaXN0ZXIgMHgwMC0yRQogICogNC4gQml0IE1hc2sgZm9yIEJCL1JGIHJlZ2lzdGVyCi0gKiA1LiBPdGhlciBkZWZpbnRpb24gZm9yIEJCL1JGIFIvVworICogNS4gT3RoZXIgZGVmaW5pdGlvbiBmb3IgQkIvUkYgUi9XCiAgKgogICogMS4gUE1BQyBkdXBsaWNhdGUgcmVnaXN0ZXIgZHVlIHRvIGNvbm5lY3Rpb246IFJGX01vZGUsIFRSeFJOLCBOdW1PZiBMLVNURgogICogMS4gUGFnZTEoMHgxMDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi91c2JfaGFsaW5pdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvdXNiX2hhbGluaXQuYwppbmRleCAwZTk0ODNiLi40NjI4N2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi91c2JfaGFsaW5pdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3VzYl9oYWxpbml0LmMKQEAgLTExMiw3ICsxMTIsNyBAQAogCQkvKiBJbml0aWFsaXphdGlvbiBmb3IgcG93ZXIgb24gc2VxdWVuY2UsICovCiAJCXI4NzEyX3dyaXRlOChwYWRhcHRlciwgU1BTMF9DVFJMICsgMSwgMHg1Myk7CiAJCXI4NzEyX3dyaXRlOChwYWRhcHRlciwgU1BTMF9DVFJMLCAweDU3KTsKLQkJLyogRW5hYmxlIEFGRSBNYWNybyBCbG9jaydzIEJhbmRnYXAgYWRuIEVuYWJsZSBBRkUgTWFjcm8KKwkJLyogRW5hYmxlIEFGRSBNYWNybyBCbG9jaydzIEJhbmRnYXAgYW5kIEVuYWJsZSBBRkUgTWFjcm8KIAkJICogQmxvY2sncyBNYmlhcwogCQkgKi8KIAkJdmFsOCA9IHI4NzEyX3JlYWQ4KHBhZGFwdGVyLCBBRkVfTUlTQyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL2RlYnVnLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL2RlYnVnLmgKaW5kZXggZTE0MDhiMC4uYWIzMDViZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvZGVidWcuaApAQCAtMjgsNyArMjgsNyBAQAogCiAjZGVmaW5lIFJUU1hfU1RPUiAicnRzX3BzdG9yOiAiCiAKLSNpZiBDT05GSUdfUlRTX1BTVE9SX0RFQlVHCisjaWZkZWYgQ09ORklHX1JUU19QU1RPUl9ERUJVRwogI2RlZmluZSBSVFNYX0RFQlVHUCh4Li4uKSBwcmludGsoS0VSTl9ERUJVRyBSVFNYX1NUT1IgeCkKICNkZWZpbmUgUlRTWF9ERUJVR1BOKHguLi4pIHByaW50ayhLRVJOX0RFQlVHIHgpCiAjZGVmaW5lIFJUU1hfREVCVUdQWCh4Li4uKSBwcmludGsoeCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvbXMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvbXMuYwppbmRleCA4MTBlMTcwLi5kODk3OTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL21zLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9tcy5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAjaW5jbHVkZSAicnRzeC5oIgogI2luY2x1ZGUgInJ0c3hfdHJhbnNwb3J0LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3J0c3guYyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeC5jCmluZGV4IDQ1MTQ0MTkuLjAyNTI1ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeC5jCkBAIC04MjQsMTMgKzgyNCwxMyBAQAogCWNoaXAtPmZwZ2FfbXNfaGdfY2xrID0gQ0xLXzgwOwogCWNoaXAtPmZwZ2FfbXNfNGJpdF9jbGsgPSBDTEtfODA7CiAJY2hpcC0+ZnBnYV9tc18xYml0X2NsayA9IENMS180MDsKLQljaGlwLT5hc2ljX3NkX3NkcjEwNF9jbGsgPSAyMDc7Ci0JY2hpcC0+YXNpY19zZF9zZHI1MF9jbGsgPSA5OTsKLQljaGlwLT5hc2ljX3NkX2RkcjUwX2NsayA9IDk5OwotCWNoaXAtPmFzaWNfc2RfaHNfY2xrID0gOTk7Ci0JY2hpcC0+YXNpY19tbWNfNTJtX2NsayA9IDk5OwotCWNoaXAtPmFzaWNfbXNfaGdfY2xrID0gMTE5OwotCWNoaXAtPmFzaWNfbXNfNGJpdF9jbGsgPSA3OTsKKwljaGlwLT5hc2ljX3NkX3NkcjEwNF9jbGsgPSAyMDM7CisJY2hpcC0+YXNpY19zZF9zZHI1MF9jbGsgPSA5ODsKKwljaGlwLT5hc2ljX3NkX2RkcjUwX2NsayA9IDk4OworCWNoaXAtPmFzaWNfc2RfaHNfY2xrID0gOTg7CisJY2hpcC0+YXNpY19tbWNfNTJtX2NsayA9IDk4OworCWNoaXAtPmFzaWNfbXNfaGdfY2xrID0gMTE3OworCWNoaXAtPmFzaWNfbXNfNGJpdF9jbGsgPSA3ODsKIAljaGlwLT5hc2ljX21zXzFiaXRfY2xrID0gMzk7CiAJY2hpcC0+c3NjX2RlcHRoX3NkX3NkcjEwNCA9IFNTQ19ERVBUSF8yTTsKIAljaGlwLT5zc2NfZGVwdGhfc2Rfc2RyNTAgPSBTU0NfREVQVEhfMk07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3J0c3hfY2hpcC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9ydHN4X2NoaXAuYwppbmRleCBmNDQzZDk3Li40ZTYwNzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3J0c3hfY2hpcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeF9jaGlwLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKICNpbmNsdWRlICJydHN4LmgiCiAjaW5jbHVkZSAicnRzeF90cmFuc3BvcnQuaCIKQEAgLTY4NCw2ICs2ODUsMTEgQEAKIAlSVFNYX0RFQlVHUCgiZHcgaW4gMHg3MjQ6IDB4JXhcbiIsIGx2YWwpOwogCXZhbCA9ICh1OClsdmFsOwogCWlmICghKHZhbCAmIDB4ODApKSB7CisJCWlmICh2YWwgJiAweDA4KQorCQkJY2hpcC0+bHVuX21vZGUgPSBERUZBVUxUX1NJTkdMRTsKKwkJZWxzZQorCQkJY2hpcC0+bHVuX21vZGUgPSBTRF9NU18yTFVOOworCiAJCWlmICh2YWwgJiAweDA0KSB7CiAJCQlTRVRfU0RJT19FWElTVChjaGlwKTsKIAkJfSBlbHNlIHsKQEAgLTcwNSwxMiArNzExLDYgQEAKIAogCQljaGlwLT5hc3BtX2wwc19sMV9lbiA9ICh2YWwgPj4gNSkgJiAweDAzOwogCi0JCWlmICh2YWwgJiAweDA4KSB7Ci0JCQljaGlwLT5sdW5fbW9kZSA9IERFRkFVTFRfU0lOR0xFOwotCQl9IGVsc2UgewotCQkJY2hpcC0+bHVuX21vZGUgPSBTRF9NU18yTFVOOwotCQl9Ci0KIAkJdmFsID0gKHU4KShsdmFsID4+IDgpOwogCiAJCWNsayA9ICh2YWwgPj4gNSkgJiAweDA3OwpAQCAtMTMxMiwxMSArMTMxMiwxMSBAQAogCiAjaWZkZWYgU1VQUE9SVF9PQ1AKIAlpZiAoQ0hFQ0tfTFVOX01PREUoY2hpcCwgU0RfTVNfMkxVTikpIHsKLQkJI2lmIENPTkZJR19SVFNfUFNUT1JfREVCVUcKKyNpZmRlZiBDT05GSUdfUlRTX1BTVE9SX0RFQlVHCiAJCWlmIChjaGlwLT5vY3Bfc3RhdCAmIChTRF9PQ19OT1cgfCBTRF9PQ19FVkVSIHwgTVNfT0NfTk9XIHwgTVNfT0NfRVZFUikpIHsKIAkJCVJUU1hfREVCVUdQKCJPdmVyIGN1cnJlbnQsIE9DUFNUQVQgaXMgMHgleFxuIiwgY2hpcC0+b2NwX3N0YXQpOwogCQl9Ci0JCSNlbmRpZgorI2VuZGlmCiAKIAkJaWYgKGNoaXAtPm9jcF9zdGF0ICYgKFNEX09DX05PVyB8IFNEX09DX0VWRVIpKSB7CiAJCQlpZiAoY2hpcC0+Y2FyZF9leGlzdCAmIFNEX0NBUkQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeF9jaGlwLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3J0c3hfY2hpcC5oCmluZGV4IDcxM2M1ZWEuLjlmN2NkODJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3J0c3hfY2hpcC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeF9jaGlwLmgKQEAgLTE4MCw4ICsxODAsOCBAQAogI2RlZmluZSBDVVJfRVJSICAgICAgICAgICAgICAgICAweDcwICAgIC8qIGN1cnJlbnQgZXJyb3IgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIERFRl9FUlIgICAgICAgICAgICAgICAgIDB4NzEgICAgLyogc3BlY2lmaWMgY29tbWFuZCBlcnJvciAgICAgICAgICAgKi8KIAotLyotLS0tIHNlbnNlIGtleSBJbmZvbWF0aW9uIC0tLS0qLwotI2RlZmluZSBTTlNLRVlJTkZPX0xFTiAgICAgICAgICAzICAgICAgIC8qIGxlbmd0aCBvZiBzZW5zZSBrZXkgaW5mb21hdGlvbiAgICovCisvKi0tLS0gc2Vuc2Uga2V5IEluZm9ybWF0aW9uIC0tLS0qLworI2RlZmluZSBTTlNLRVlJTkZPX0xFTiAgICAgICAgICAzICAgICAgIC8qIGxlbmd0aCBvZiBzZW5zZSBrZXkgaW5mb3JtYXRpb24gICAqLwogCiAjZGVmaW5lIFNLU1YgICAgICAgICAgICAgICAgICAgIDB4ODAKICNkZWZpbmUgQ0RCX0lMTEVHQUwgICAgICAgICAgICAgMHg0MApAQCAtMjM1LDEzICsyMzUsMTMgQEAKICAgICB1bnNpZ25lZCBjaGFyICAgc2VnX25vOwkJLyogc2VnbWVudCBOby4gICAgICAgICAgICAgICAgICAgICAgKi8KICAgICB1bnNpZ25lZCBjaGFyICAgc2Vuc2Vfa2V5OwkJLyogYnl0ZTUgOiBJTEkgICAgICAgICAgICAgICAgICAgICAgKi8KIAkJCQkJCS8qIGJpdDMtMCA6IHNlbnNlIGtleSAgICAgICAgICAgICAgKi8KLSAgICB1bnNpZ25lZCBjaGFyICAgaW5mb1s0XTsJCS8qIGluZm9tYXRpb24gICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciAgIGluZm9bNF07CQkvKiBpbmZvcm1hdGlvbiAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICB1bnNpZ25lZCBjaGFyICAgYWRfc2Vuc2VfbGVuOwkvKiBhZGRpdGlvbmFsIHNlbnNlIGRhdGEgbGVuZ3RoICAgICAqLwotICAgIHVuc2lnbmVkIGNoYXIgICBjbWRfaW5mb1s0XTsJLyogY29tbWFuZCBzcGVjaWZpYyBpbmZvbWF0aW9uICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyICAgY21kX2luZm9bNF07CS8qIGNvbW1hbmQgc3BlY2lmaWMgaW5mb3JtYXRpb24gICAgICAqLwogICAgIHVuc2lnbmVkIGNoYXIgICBhc2M7CQkvKiBBU0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIHVuc2lnbmVkIGNoYXIgICBhc2NxOwkJLyogQVNDUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICB1bnNpZ25lZCBjaGFyICAgcmZ1OwkJLyogRlJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICB1bnNpZ25lZCBjaGFyICAgc25zX2tleV9pbmZvWzNdOwkvKiBzZW5zZSBrZXkgc3BlY2lmaWMgaW5mb21hdGlvbiAgICAqLworICAgIHVuc2lnbmVkIGNoYXIgICBzbnNfa2V5X2luZm9bM107CS8qIHNlbnNlIGtleSBzcGVjaWZpYyBpbmZvcm1hdGlvbiAgICAqLwogfTsKIAogLyogUENJIE9wZXJhdGlvbiBSZWdpc3RlciBBZGRyZXNzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3J0c3hfc2NzaS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9ydHN4X3Njc2kuYwppbmRleCAyMGMyNDY0Li43ZGUxZmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3J0c3hfc2NzaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeF9zY3NpLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKICNpbmNsdWRlICJydHN4LmgiCiAjaW5jbHVkZSAicnRzeF90cmFuc3BvcnQuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeF9zY3NpLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3J0c3hfc2NzaS5oCmluZGV4IGZhYzEyMmMuLjY0Yjg0OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeF9zY3NpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9ydHN4X3Njc2kuaApAQCAtODUsNyArODUsNyBAQAogI2RlZmluZSBDSElQX05PUk1BTE1PREUJCTB4MDAKICNkZWZpbmUgQ0hJUF9ERUJVR01PREUJCTB4MDEKIAotLyogU0QgUGFzcyBUaHJvdWdoIENvbW1hbmQgRXh0ZW50aW9uICovCisvKiBTRCBQYXNzIFRocm91Z2ggQ29tbWFuZCBFeHRlbnNpb24gKi8KICNkZWZpbmUgU0RfUEFTU19USFJVX01PREUJMHhEMAogI2RlZmluZSBTRF9FWEVDVVRFX05PX0RBVEEJMHhEMQogI2RlZmluZSBTRF9FWEVDVVRFX1JFQUQJCTB4RDIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3Ivc2QuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3Ivc2QuYwppbmRleCAyMWJmYTU3Li5iMTI3N2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3NkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9zZC5jCkBAIC05MDksNyArOTA5LDcgQEAKIAkJUlRTWF9XUklURV9SRUcoY2hpcCwgU0RfVlBDTEswX0NUTCwgUEhBU0VfTk9UX1JFU0VULCBQSEFTRV9OT1RfUkVTRVQpOwogCQlSVFNYX1dSSVRFX1JFRyhjaGlwLCBDTEtfQ1RMLCBDSEFOR0VfQ0xLLCAwKTsKIAl9IGVsc2UgewotI2lmIENPTkZJR19SVFNfUFNUT1JfREVCVUcKKyNpZmRlZiBDT05GSUdfUlRTX1BTVE9SX0RFQlVHCiAJCXJ0c3hfcmVhZF9yZWdpc3RlcihjaGlwLCBTRF9WUF9DVEwsICZ2YWwpOwogCQlSVFNYX0RFQlVHUCgiU0RfVlBfQ1RMOiAweCV4XG4iLCB2YWwpOwogCQlydHN4X3JlYWRfcmVnaXN0ZXIoY2hpcCwgU0RfRENNUFNfQ1RMLCAmdmFsKTsKQEAgLTk1OCw3ICs5NTgsNyBAQAogCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKIAogRmFpbDoKLSNpZiBDT05GSUdfUlRTX1BTVE9SX0RFQlVHCisjaWZkZWYgQ09ORklHX1JUU19QU1RPUl9ERUJVRwogCXJ0c3hfcmVhZF9yZWdpc3RlcihjaGlwLCBTRF9WUF9DVEwsICZ2YWwpOwogCVJUU1hfREVCVUdQKCJTRF9WUF9DVEw6IDB4JXhcbiIsIHZhbCk7CiAJcnRzeF9yZWFkX3JlZ2lzdGVyKGNoaXAsIFNEX0RDTVBTX0NUTCwgJnZhbCk7CkBAIC0xNzE5LDcgKzE3MTksNyBAQAogCX0KIAogU2VhcmNoX0ZpbmlzaDoKLQlSVFNYX0RFQlVHUCgiRmluYWwgY2hvb3NlbiBwaGFzZTogJWRcbiIsIGZpbmFsX3BoYXNlKTsKKwlSVFNYX0RFQlVHUCgiRmluYWwgY2hvc2VuIHBoYXNlOiAlZFxuIiwgZmluYWxfcGhhc2UpOwogCXJldHVybiBmaW5hbF9waGFzZTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci90cmFjZS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci90cmFjZS5oCmluZGV4IDJjNjY4YmEuLmJjODNiNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvdHJhY2UuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3RyYWNlLmgKQEAgLTgyLDcgKzgyLDcgQEAKICNkZWZpbmUgVFJBQ0VfR09UTyhjaGlwLCBsYWJlbCkJZ290byBsYWJlbAogI2VuZGlmCiAKLSNpZiBDT05GSUdfUlRTX1BTVE9SX0RFQlVHCisjaWZkZWYgQ09ORklHX1JUU19QU1RPUl9ERUJVRwogc3RhdGljIGlubGluZSB2b2lkIHJ0c3hfZHVtcCh1OCAqYnVmLCBpbnQgYnVmX2xlbikKIHsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IveGQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IveGQuYwppbmRleCA3YmNkNDY4Li45ZjNhZGQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3hkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci94ZC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAjaW5jbHVkZSAicnRzeC5oIgogI2luY2x1ZGUgInJ0c3hfdHJhbnNwb3J0LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2Ftc3VuZy1sYXB0b3AvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9zYW1zdW5nLWxhcHRvcC9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjdjNjA4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zYW1zdW5nLWxhcHRvcC9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotY29uZmlnIFNBTVNVTkdfTEFQVE9QCi0JdHJpc3RhdGUgIlNhbXN1bmcgTGFwdG9wIGRyaXZlciIKLQlkZWZhdWx0IG4KLQlkZXBlbmRzIG9uIFJGS0lMTCAmJiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFICYmIFg4NgotCWhlbHAKLQkgIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBkcml2ZXIgZm9yIHRoZSBOMTI4IFNhbXN1bmcgTGFwdG9wCi0JICBwcm92aWRpbmcgY29udHJvbCBvdmVyIHRoZSBXaXJlbGVzcyBMRUQgYW5kIHRoZSBMQ0QgYmFja2xpZ2h0Ci0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZQotCSAgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNhbXN1bmctbGFwdG9wLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NhbXN1bmctbGFwdG9wL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3NhbXN1bmctbGFwdG9wL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzZmNDIwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zYW1zdW5nLWxhcHRvcC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLW9iai0kKENPTkZJR19TQU1TVU5HX0xBUFRPUCkJKz0gc2Ftc3VuZy1sYXB0b3AubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NhbXN1bmctbGFwdG9wL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvc2Ftc3VuZy1sYXB0b3AvVE9ETwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdhNmQ1OC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2Ftc3VuZy1sYXB0b3AvVE9ETworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotVE9ETzoKLQktIHJldmlldyBmcm9tIG90aGVyIGRldmVsb3BlcnMKLQktIGZpZ3VyZSBvdXQgQUNQSSB2aWRlbyBpc3N1ZXMKLQotUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NhbXN1bmctbGFwdG9wL3NhbXN1bmctbGFwdG9wLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2Ftc3VuZy1sYXB0b3Avc2Ftc3VuZy1sYXB0b3AuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUyOTQ0Ni4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2Ftc3VuZy1sYXB0b3Avc2Ftc3VuZy1sYXB0b3AuYworKysgL2Rldi9udWxsCkBAIC0xLDg0MyArMCwwIEBACi0vKgotICogU2Ftc3VuZyBMYXB0b3AgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5LDIwMTEgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVna2hAc3VzZS5kZSkKLSAqIENvcHlyaWdodCAoQykgMjAwOSwyMDExIE5vdmVsbCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKi8KLSNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1pLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcmZraWxsLmg+Ci0KLS8qCi0gKiBUaGlzIGRyaXZlciBpcyBuZWVkZWQgYmVjYXVzZSBhIG51bWJlciBvZiBTYW1zdW5nIGxhcHRvcHMgZG8gbm90IGhvb2sKLSAqIHRoZWlyIGNvbnRyb2wgc2V0dGluZ3MgdGhyb3VnaCBBQ1BJLiAgU28gd2UgaGF2ZSB0byBwb2tlIGFyb3VuZCBpbiB0aGUKLSAqIEJJT1MgdG8gZG8gdGhpbmdzIGxpa2UgYnJpZ2h0bmVzcyB2YWx1ZXMsIGFuZCAic3BlY2lhbCIga2V5IGNvbnRyb2xzLgotICovCi0KLS8qCi0gKiBXZSBoYXZlIDAgLSA4IGFzIHZhbGlkIGJyaWdodG5lc3MgbGV2ZWxzLiAgVGhlIHNwZWNzIHNheSB0aGF0IGxldmVsIDAgc2hvdWxkCi0gKiBiZSByZXNlcnZlZCBieSB0aGUgQklPUyAod2hpY2ggcmVhbGx5IGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlKSwgd2UgdGVsbAotICogdXNlcnNwYWNlIHRoYXQgdGhlIHZhbHVlIGlzIDAgLSA3IGFuZCB0aGVuIGp1c3QgdGVsbCB0aGUgaGFyZHdhcmUgMSAtIDgKLSAqLwotI2RlZmluZSBNQVhfQlJJR0hUCTB4MDcKLQotCi0jZGVmaW5lIFNBQklfSUZBQ0VfTUFJTgkJCTB4MDAKLSNkZWZpbmUgU0FCSV9JRkFDRV9TVUIJCQkweDAyCi0jZGVmaW5lIFNBQklfSUZBQ0VfQ09NUExFVEUJCTB4MDQKLSNkZWZpbmUgU0FCSV9JRkFDRV9EQVRBCQkJMHgwNQotCi0vKiBTdHJ1Y3R1cmUgdG8gZ2V0IGRhdGEgYmFjayB0byB0aGUgY2FsbGluZyBmdW5jdGlvbiAqLwotc3RydWN0IHNhYmlfcmV0dmFsIHsKLQl1OCByZXR2YWxbMjBdOwotfTsKLQotc3RydWN0IHNhYmlfaGVhZGVyX29mZnNldHMgewotCXU4IHBvcnQ7Ci0JdTggcmVfbWVtOwotCXU4IGlmYWNlX2Z1bmM7Ci0JdTggZW5fbWVtOwotCXU4IGRhdGFfb2Zmc2V0OwotCXU4IGRhdGFfc2VnbWVudDsKLX07Ci0KLXN0cnVjdCBzYWJpX2NvbW1hbmRzIHsKLQkvKgotCSAqIEJyaWdodG5lc3MgaXMgMCAtIDgsIGFzIGRlc2NyaWJlZCBhYm92ZS4KLQkgKiBWYWx1ZSAwIGlzIGZvciB0aGUgQklPUyB0byB1c2UKLQkgKi8KLQl1OCBnZXRfYnJpZ2h0bmVzczsKLQl1OCBzZXRfYnJpZ2h0bmVzczsKLQotCS8qCi0JICogZmlyc3QgYnl0ZToKLQkgKiAweDAwIC0gd2lyZWxlc3MgaXMgb2ZmCi0JICogMHgwMSAtIHdpcmVsZXNzIGlzIG9uCi0JICogc2Vjb25kIGJ5dGU6Ci0JICogMHgwMiAtIDNHIGlzIG9mZgotCSAqIDB4MDMgLSAzRyBpcyBvbgotCSAqIFRPRE8sIHZlcmlmeSAzRyBpcyBjb3JyZWN0LCB0aGF0IGRvZXNuJ3Qgc2VlbSByaWdodC4uLgotCSAqLwotCXU4IGdldF93aXJlbGVzc19idXR0b247Ci0JdTggc2V0X3dpcmVsZXNzX2J1dHRvbjsKLQotCS8qIDAgaXMgb2ZmLCAxIGlzIG9uICovCi0JdTggZ2V0X2JhY2tsaWdodDsKLQl1OCBzZXRfYmFja2xpZ2h0OwotCi0JLyoKLQkgKiAweDgwIG9yIDB4MDAgLSBubyBhY3Rpb24KLQkgKiAweDgxIC0gcmVjb3Zlcnkga2V5IHByZXNzZWQKLQkgKi8KLQl1OCBnZXRfcmVjb3ZlcnlfbW9kZTsKLQl1OCBzZXRfcmVjb3ZlcnlfbW9kZTsKLQotCS8qCi0JICogb24gc2VjbGludXg6IDAgaXMgbG93LCAxIGlzIGhpZ2gsCi0JICogb24gc3dzbWk6IDAgaXMgbm9ybWFsLCAxIGlzIHNpbGVudCwgMiBpcyB0dXJibwotCSAqLwotCXU4IGdldF9wZXJmb3JtYW5jZV9sZXZlbDsKLQl1OCBzZXRfcGVyZm9ybWFuY2VfbGV2ZWw7Ci0KLQkvKgotCSAqIFRlbGwgdGhlIEJJT1MgdGhhdCBMaW51eCBpcyBydW5uaW5nIG9uIHRoaXMgbWFjaGluZS4KLQkgKiA4MSBpcyBvbiwgODAgaXMgb2ZmCi0JICovCi0JdTggc2V0X2xpbnV4OwotfTsKLQotc3RydWN0IHNhYmlfcGVyZm9ybWFuY2VfbGV2ZWwgewotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JdTggdmFsdWU7Ci19OwotCi1zdHJ1Y3Qgc2FiaV9jb25maWcgewotCWNvbnN0IGNoYXIgKnRlc3Rfc3RyaW5nOwotCXUxNiBtYWluX2Z1bmN0aW9uOwotCWNvbnN0IHN0cnVjdCBzYWJpX2hlYWRlcl9vZmZzZXRzIGhlYWRlcl9vZmZzZXRzOwotCWNvbnN0IHN0cnVjdCBzYWJpX2NvbW1hbmRzIGNvbW1hbmRzOwotCWNvbnN0IHN0cnVjdCBzYWJpX3BlcmZvcm1hbmNlX2xldmVsIHBlcmZvcm1hbmNlX2xldmVsc1s0XTsKLQl1OCBtaW5fYnJpZ2h0bmVzczsKLQl1OCBtYXhfYnJpZ2h0bmVzczsKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2FiaV9jb25maWcgc2FiaV9jb25maWdzW10gPSB7Ci0JewotCQkudGVzdF9zdHJpbmcgPSAiU0VDTElOVVgiLAotCi0JCS5tYWluX2Z1bmN0aW9uID0gMHg0YzQ5LAotCi0JCS5oZWFkZXJfb2Zmc2V0cyA9IHsKLQkJCS5wb3J0ID0gMHgwMCwKLQkJCS5yZV9tZW0gPSAweDAyLAotCQkJLmlmYWNlX2Z1bmMgPSAweDAzLAotCQkJLmVuX21lbSA9IDB4MDQsCi0JCQkuZGF0YV9vZmZzZXQgPSAweDA1LAotCQkJLmRhdGFfc2VnbWVudCA9IDB4MDcsCi0JCX0sCi0KLQkJLmNvbW1hbmRzID0gewotCQkJLmdldF9icmlnaHRuZXNzID0gMHgwMCwKLQkJCS5zZXRfYnJpZ2h0bmVzcyA9IDB4MDEsCi0KLQkJCS5nZXRfd2lyZWxlc3NfYnV0dG9uID0gMHgwMiwKLQkJCS5zZXRfd2lyZWxlc3NfYnV0dG9uID0gMHgwMywKLQotCQkJLmdldF9iYWNrbGlnaHQgPSAweDA0LAotCQkJLnNldF9iYWNrbGlnaHQgPSAweDA1LAotCi0JCQkuZ2V0X3JlY292ZXJ5X21vZGUgPSAweDA2LAotCQkJLnNldF9yZWNvdmVyeV9tb2RlID0gMHgwNywKLQotCQkJLmdldF9wZXJmb3JtYW5jZV9sZXZlbCA9IDB4MDgsCi0JCQkuc2V0X3BlcmZvcm1hbmNlX2xldmVsID0gMHgwOSwKLQotCQkJLnNldF9saW51eCA9IDB4MGEsCi0JCX0sCi0KLQkJLnBlcmZvcm1hbmNlX2xldmVscyA9IHsKLQkJCXsKLQkJCQkubmFtZSA9ICJzaWxlbnQiLAotCQkJCS52YWx1ZSA9IDAsCi0JCQl9LAotCQkJewotCQkJCS5uYW1lID0gIm5vcm1hbCIsCi0JCQkJLnZhbHVlID0gMSwKLQkJCX0sCi0JCQl7IH0sCi0JCX0sCi0JCS5taW5fYnJpZ2h0bmVzcyA9IDEsCi0JCS5tYXhfYnJpZ2h0bmVzcyA9IDgsCi0JfSwKLQl7Ci0JCS50ZXN0X3N0cmluZyA9ICJTd1NtaUAiLAotCi0JCS5tYWluX2Z1bmN0aW9uID0gMHg1ODQzLAotCi0JCS5oZWFkZXJfb2Zmc2V0cyA9IHsKLQkJCS5wb3J0ID0gMHgwMCwKLQkJCS5yZV9tZW0gPSAweDA0LAotCQkJLmlmYWNlX2Z1bmMgPSAweDAyLAotCQkJLmVuX21lbSA9IDB4MDMsCi0JCQkuZGF0YV9vZmZzZXQgPSAweDA1LAotCQkJLmRhdGFfc2VnbWVudCA9IDB4MDcsCi0JCX0sCi0KLQkJLmNvbW1hbmRzID0gewotCQkJLmdldF9icmlnaHRuZXNzID0gMHgxMCwKLQkJCS5zZXRfYnJpZ2h0bmVzcyA9IDB4MTEsCi0KLQkJCS5nZXRfd2lyZWxlc3NfYnV0dG9uID0gMHgxMiwKLQkJCS5zZXRfd2lyZWxlc3NfYnV0dG9uID0gMHgxMywKLQotCQkJLmdldF9iYWNrbGlnaHQgPSAweDJkLAotCQkJLnNldF9iYWNrbGlnaHQgPSAweDJlLAotCi0JCQkuZ2V0X3JlY292ZXJ5X21vZGUgPSAweGZmLAotCQkJLnNldF9yZWNvdmVyeV9tb2RlID0gMHhmZiwKLQotCQkJLmdldF9wZXJmb3JtYW5jZV9sZXZlbCA9IDB4MzEsCi0JCQkuc2V0X3BlcmZvcm1hbmNlX2xldmVsID0gMHgzMiwKLQotCQkJLnNldF9saW51eCA9IDB4ZmYsCi0JCX0sCi0KLQkJLnBlcmZvcm1hbmNlX2xldmVscyA9IHsKLQkJCXsKLQkJCQkubmFtZSA9ICJub3JtYWwiLAotCQkJCS52YWx1ZSA9IDAsCi0JCQl9LAotCQkJewotCQkJCS5uYW1lID0gInNpbGVudCIsCi0JCQkJLnZhbHVlID0gMSwKLQkJCX0sCi0JCQl7Ci0JCQkJLm5hbWUgPSAib3ZlcmNsb2NrIiwKLQkJCQkudmFsdWUgPSAyLAotCQkJfSwKLQkJCXsgfSwKLQkJfSwKLQkJLm1pbl9icmlnaHRuZXNzID0gMCwKLQkJLm1heF9icmlnaHRuZXNzID0gOCwKLQl9LAotCXsgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2FiaV9jb25maWcgKnNhYmlfY29uZmlnOwotCi1zdGF0aWMgdm9pZCBfX2lvbWVtICpzYWJpOwotc3RhdGljIHZvaWQgX19pb21lbSAqc2FiaV9pZmFjZTsKLXN0YXRpYyB2b2lkIF9faW9tZW0gKmYwMDAwX3NlZ21lbnQ7Ci1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodF9kZXZpY2U7Ci1zdGF0aWMgc3RydWN0IG11dGV4IHNhYmlfbXV0ZXg7Ci1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2RldjsKLXN0YXRpYyBzdHJ1Y3QgcmZraWxsICpyZms7Ci0KLXN0YXRpYyBpbnQgZm9yY2U7Ci1tb2R1bGVfcGFyYW0oZm9yY2UsIGJvb2wsIDApOwotTU9EVUxFX1BBUk1fREVTQyhmb3JjZSwKLQkJIkRpc2FibGUgdGhlIERNSSBjaGVjayBhbmQgZm9yY2VzIHRoZSBkcml2ZXIgdG8gYmUgbG9hZGVkIik7Ci0KLXN0YXRpYyBpbnQgZGVidWc7Ci1tb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwotCi1zdGF0aWMgaW50IHNhYmlfZ2V0X2NvbW1hbmQodTggY29tbWFuZCwgc3RydWN0IHNhYmlfcmV0dmFsICpzcmV0dmFsKQotewotCWludCByZXR2YWwgPSAwOwotCXUxNiBwb3J0ID0gcmVhZHcoc2FiaSArIHNhYmlfY29uZmlnLT5oZWFkZXJfb2Zmc2V0cy5wb3J0KTsKLQl1OCBjb21wbGV0ZSwgaWZhY2VfZGF0YTsKLQotCW11dGV4X2xvY2soJnNhYmlfbXV0ZXgpOwotCi0JLyogZW5hYmxlIG1lbW9yeSB0byBiZSBhYmxlIHRvIHdyaXRlIHRvIGl0ICovCi0Jb3V0YihyZWFkYihzYWJpICsgc2FiaV9jb25maWctPmhlYWRlcl9vZmZzZXRzLmVuX21lbSksIHBvcnQpOwotCi0JLyogd3JpdGUgb3V0IHRoZSBjb21tYW5kICovCi0Jd3JpdGV3KHNhYmlfY29uZmlnLT5tYWluX2Z1bmN0aW9uLCBzYWJpX2lmYWNlICsgU0FCSV9JRkFDRV9NQUlOKTsKLQl3cml0ZXcoY29tbWFuZCwgc2FiaV9pZmFjZSArIFNBQklfSUZBQ0VfU1VCKTsKLQl3cml0ZWIoMCwgc2FiaV9pZmFjZSArIFNBQklfSUZBQ0VfQ09NUExFVEUpOwotCW91dGIocmVhZGIoc2FiaSArIHNhYmlfY29uZmlnLT5oZWFkZXJfb2Zmc2V0cy5pZmFjZV9mdW5jKSwgcG9ydCk7Ci0KLQkvKiB3cml0ZSBwcm90ZWN0IG1lbW9yeSB0byBtYWtlIGl0IHNhZmUgKi8KLQlvdXRiKHJlYWRiKHNhYmkgKyBzYWJpX2NvbmZpZy0+aGVhZGVyX29mZnNldHMucmVfbWVtKSwgcG9ydCk7Ci0KLQkvKiBzZWUgaWYgdGhlIGNvbW1hbmQgYWN0dWFsbHkgc3VjY2VlZGVkICovCi0JY29tcGxldGUgPSByZWFkYihzYWJpX2lmYWNlICsgU0FCSV9JRkFDRV9DT01QTEVURSk7Ci0JaWZhY2VfZGF0YSA9IHJlYWRiKHNhYmlfaWZhY2UgKyBTQUJJX0lGQUNFX0RBVEEpOwotCWlmIChjb21wbGV0ZSAhPSAweGFhIHx8IGlmYWNlX2RhdGEgPT0gMHhmZikgewotCQlwcl93YXJuKCJTQUJJIGdldCBjb21tYW5kIDB4JTAyeCBmYWlsZWQgd2l0aCBjb21wbGV0aW9uIGZsYWcgMHglMDJ4IGFuZCBkYXRhIDB4JTAyeFxuIiwKLQkJICAgICAgICBjb21tYW5kLCBjb21wbGV0ZSwgaWZhY2VfZGF0YSk7Ci0JCXJldHZhbCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JLyoKLQkgKiBTYXZlIG9mZiB0aGUgZGF0YSBpbnRvIGEgc3RydWN0dXJlIHNvIHRoZSBjYWxsZXIgdXNlIGl0LgotCSAqIFJpZ2h0IG5vdyB3ZSBvbmx5IHdhbnQgdGhlIGZpcnN0IDQgYnl0ZXMsCi0JICogVGhlcmUgYXJlIGNvbW1hbmRzIHRoYXQgbmVlZCBtb3JlLCBidXQgbm90IGZvciB0aGUgb25lcyB3ZQotCSAqIGN1cnJlbnRseSBjYXJlIGFib3V0LgotCSAqLwotCXNyZXR2YWwtPnJldHZhbFswXSA9IHJlYWRiKHNhYmlfaWZhY2UgKyBTQUJJX0lGQUNFX0RBVEEpOwotCXNyZXR2YWwtPnJldHZhbFsxXSA9IHJlYWRiKHNhYmlfaWZhY2UgKyBTQUJJX0lGQUNFX0RBVEEgKyAxKTsKLQlzcmV0dmFsLT5yZXR2YWxbMl0gPSByZWFkYihzYWJpX2lmYWNlICsgU0FCSV9JRkFDRV9EQVRBICsgMik7Ci0Jc3JldHZhbC0+cmV0dmFsWzNdID0gcmVhZGIoc2FiaV9pZmFjZSArIFNBQklfSUZBQ0VfREFUQSArIDMpOwotCi1leGl0OgotCW11dGV4X3VubG9jaygmc2FiaV9tdXRleCk7Ci0JcmV0dXJuIHJldHZhbDsKLQotfQotCi1zdGF0aWMgaW50IHNhYmlfc2V0X2NvbW1hbmQodTggY29tbWFuZCwgdTggZGF0YSkKLXsKLQlpbnQgcmV0dmFsID0gMDsKLQl1MTYgcG9ydCA9IHJlYWR3KHNhYmkgKyBzYWJpX2NvbmZpZy0+aGVhZGVyX29mZnNldHMucG9ydCk7Ci0JdTggY29tcGxldGUsIGlmYWNlX2RhdGE7Ci0KLQltdXRleF9sb2NrKCZzYWJpX211dGV4KTsKLQotCS8qIGVuYWJsZSBtZW1vcnkgdG8gYmUgYWJsZSB0byB3cml0ZSB0byBpdCAqLwotCW91dGIocmVhZGIoc2FiaSArIHNhYmlfY29uZmlnLT5oZWFkZXJfb2Zmc2V0cy5lbl9tZW0pLCBwb3J0KTsKLQotCS8qIHdyaXRlIG91dCB0aGUgY29tbWFuZCAqLwotCXdyaXRldyhzYWJpX2NvbmZpZy0+bWFpbl9mdW5jdGlvbiwgc2FiaV9pZmFjZSArIFNBQklfSUZBQ0VfTUFJTik7Ci0Jd3JpdGV3KGNvbW1hbmQsIHNhYmlfaWZhY2UgKyBTQUJJX0lGQUNFX1NVQik7Ci0Jd3JpdGViKDAsIHNhYmlfaWZhY2UgKyBTQUJJX0lGQUNFX0NPTVBMRVRFKTsKLQl3cml0ZWIoZGF0YSwgc2FiaV9pZmFjZSArIFNBQklfSUZBQ0VfREFUQSk7Ci0Jb3V0YihyZWFkYihzYWJpICsgc2FiaV9jb25maWctPmhlYWRlcl9vZmZzZXRzLmlmYWNlX2Z1bmMpLCBwb3J0KTsKLQotCS8qIHdyaXRlIHByb3RlY3QgbWVtb3J5IHRvIG1ha2UgaXQgc2FmZSAqLwotCW91dGIocmVhZGIoc2FiaSArIHNhYmlfY29uZmlnLT5oZWFkZXJfb2Zmc2V0cy5yZV9tZW0pLCBwb3J0KTsKLQotCS8qIHNlZSBpZiB0aGUgY29tbWFuZCBhY3R1YWxseSBzdWNjZWVkZWQgKi8KLQljb21wbGV0ZSA9IHJlYWRiKHNhYmlfaWZhY2UgKyBTQUJJX0lGQUNFX0NPTVBMRVRFKTsKLQlpZmFjZV9kYXRhID0gcmVhZGIoc2FiaV9pZmFjZSArIFNBQklfSUZBQ0VfREFUQSk7Ci0JaWYgKGNvbXBsZXRlICE9IDB4YWEgfHwgaWZhY2VfZGF0YSA9PSAweGZmKSB7Ci0JCXByX3dhcm4oIlNBQkkgc2V0IGNvbW1hbmQgMHglMDJ4IGZhaWxlZCB3aXRoIGNvbXBsZXRpb24gZmxhZyAweCUwMnggYW5kIGRhdGEgMHglMDJ4XG4iLAotCQkgICAgICAgY29tbWFuZCwgY29tcGxldGUsIGlmYWNlX2RhdGEpOwotCQlyZXR2YWwgPSAtRUlOVkFMOwotCX0KLQotCW11dGV4X3VubG9jaygmc2FiaV9tdXRleCk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9iYWNrbGlnaHQodm9pZCkKLXsKLQlzdHJ1Y3Qgc2FiaV9yZXR2YWwgc3JldHZhbDsKLQotCXNhYmlfZ2V0X2NvbW1hbmQoc2FiaV9jb25maWctPmNvbW1hbmRzLmdldF9iYWNrbGlnaHQsICZzcmV0dmFsKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiYmFja2xpZ2h0ID0gMHglMDJ4XG4iLCBzcmV0dmFsLnJldHZhbFswXSk7Ci0KLQlzYWJpX3NldF9jb21tYW5kKHNhYmlfY29uZmlnLT5jb21tYW5kcy5zZXRfYmFja2xpZ2h0LCAwKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiYmFja2xpZ2h0IHNob3VsZCBiZSBvZmZcbiIpOwotCi0Jc2FiaV9nZXRfY29tbWFuZChzYWJpX2NvbmZpZy0+Y29tbWFuZHMuZ2V0X2JhY2tsaWdodCwgJnNyZXR2YWwpOwotCXByaW50ayhLRVJOX0RFQlVHICJiYWNrbGlnaHQgPSAweCUwMnhcbiIsIHNyZXR2YWwucmV0dmFsWzBdKTsKLQotCW1zbGVlcCgxMDAwKTsKLQotCXNhYmlfc2V0X2NvbW1hbmQoc2FiaV9jb25maWctPmNvbW1hbmRzLnNldF9iYWNrbGlnaHQsIDEpOwotCXByaW50ayhLRVJOX0RFQlVHICJiYWNrbGlnaHQgc2hvdWxkIGJlIG9uXG4iKTsKLQotCXNhYmlfZ2V0X2NvbW1hbmQoc2FiaV9jb25maWctPmNvbW1hbmRzLmdldF9iYWNrbGlnaHQsICZzcmV0dmFsKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiYmFja2xpZ2h0ID0gMHglMDJ4XG4iLCBzcmV0dmFsLnJldHZhbFswXSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2lyZWxlc3Modm9pZCkKLXsKLQlzdHJ1Y3Qgc2FiaV9yZXR2YWwgc3JldHZhbDsKLQotCXNhYmlfZ2V0X2NvbW1hbmQoc2FiaV9jb25maWctPmNvbW1hbmRzLmdldF93aXJlbGVzc19idXR0b24sICZzcmV0dmFsKTsKLQlwcmludGsoS0VSTl9ERUJVRyAid2lyZWxlc3MgbGVkID0gMHglMDJ4XG4iLCBzcmV0dmFsLnJldHZhbFswXSk7Ci0KLQlzYWJpX3NldF9jb21tYW5kKHNhYmlfY29uZmlnLT5jb21tYW5kcy5zZXRfd2lyZWxlc3NfYnV0dG9uLCAwKTsKLQlwcmludGsoS0VSTl9ERUJVRyAid2lyZWxlc3MgbGVkIHNob3VsZCBiZSBvZmZcbiIpOwotCi0Jc2FiaV9nZXRfY29tbWFuZChzYWJpX2NvbmZpZy0+Y29tbWFuZHMuZ2V0X3dpcmVsZXNzX2J1dHRvbiwgJnNyZXR2YWwpOwotCXByaW50ayhLRVJOX0RFQlVHICJ3aXJlbGVzcyBsZWQgPSAweCUwMnhcbiIsIHNyZXR2YWwucmV0dmFsWzBdKTsKLQotCW1zbGVlcCgxMDAwKTsKLQotCXNhYmlfc2V0X2NvbW1hbmQoc2FiaV9jb25maWctPmNvbW1hbmRzLnNldF93aXJlbGVzc19idXR0b24sIDEpOwotCXByaW50ayhLRVJOX0RFQlVHICJ3aXJlbGVzcyBsZWQgc2hvdWxkIGJlIG9uXG4iKTsKLQotCXNhYmlfZ2V0X2NvbW1hbmQoc2FiaV9jb25maWctPmNvbW1hbmRzLmdldF93aXJlbGVzc19idXR0b24sICZzcmV0dmFsKTsKLQlwcmludGsoS0VSTl9ERUJVRyAid2lyZWxlc3MgbGVkID0gMHglMDJ4XG4iLCBzcmV0dmFsLnJldHZhbFswXSk7Ci19Ci0KLXN0YXRpYyB1OCByZWFkX2JyaWdodG5lc3Modm9pZCkKLXsKLQlzdHJ1Y3Qgc2FiaV9yZXR2YWwgc3JldHZhbDsKLQlpbnQgdXNlcl9icmlnaHRuZXNzID0gMDsKLQlpbnQgcmV0dmFsOwotCi0JcmV0dmFsID0gc2FiaV9nZXRfY29tbWFuZChzYWJpX2NvbmZpZy0+Y29tbWFuZHMuZ2V0X2JyaWdodG5lc3MsCi0JCQkJICAmc3JldHZhbCk7Ci0JaWYgKCFyZXR2YWwpIHsKLQkJdXNlcl9icmlnaHRuZXNzID0gc3JldHZhbC5yZXR2YWxbMF07Ci0JCWlmICh1c2VyX2JyaWdodG5lc3MgIT0gMCkKLQkJCXVzZXJfYnJpZ2h0bmVzcyAtPSBzYWJpX2NvbmZpZy0+bWluX2JyaWdodG5lc3M7Ci0JfQotCXJldHVybiB1c2VyX2JyaWdodG5lc3M7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9icmlnaHRuZXNzKHU4IHVzZXJfYnJpZ2h0bmVzcykKLXsKLQl1OCB1c2VyX2xldmVsID0gdXNlcl9icmlnaHRuZXNzIC0gc2FiaV9jb25maWctPm1pbl9icmlnaHRuZXNzOwotCi0Jc2FiaV9zZXRfY29tbWFuZChzYWJpX2NvbmZpZy0+Y29tbWFuZHMuc2V0X2JyaWdodG5lc3MsIHVzZXJfbGV2ZWwpOwotfQotCi1zdGF0aWMgaW50IGdldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKLXsKLQlyZXR1cm4gKGludClyZWFkX2JyaWdodG5lc3MoKTsKLX0KLQotc3RhdGljIGludCB1cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKLXsKLQlzZXRfYnJpZ2h0bmVzcyhiZC0+cHJvcHMuYnJpZ2h0bmVzcyk7Ci0KLQlpZiAoYmQtPnByb3BzLnBvd2VyID09IEZCX0JMQU5LX1VOQkxBTkspCi0JCXNhYmlfc2V0X2NvbW1hbmQoc2FiaV9jb25maWctPmNvbW1hbmRzLnNldF9iYWNrbGlnaHQsIDEpOwotCWVsc2UKLQkJc2FiaV9zZXRfY29tbWFuZChzYWJpX2NvbmZpZy0+Y29tbWFuZHMuc2V0X2JhY2tsaWdodCwgMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBiYWNrbGlnaHRfb3BzID0gewotCS5nZXRfYnJpZ2h0bmVzcwk9IGdldF9icmlnaHRuZXNzLAotCS51cGRhdGVfc3RhdHVzCT0gdXBkYXRlX3N0YXR1cywKLX07Ci0KLXN0YXRpYyBpbnQgcmZraWxsX3NldCh2b2lkICpkYXRhLCBib29sIGJsb2NrZWQpCi17Ci0JLyogRG8gc29tZXRoaW5nIHdpdGggYmxvY2tlZC4uLiovCi0JLyoKLQkgKiBibG9ja2VkID09IGZhbHNlIGlzIG9uCi0JICogYmxvY2tlZCA9PSB0cnVlIGlzIG9mZgotCSAqLwotCWlmIChibG9ja2VkKQotCQlzYWJpX3NldF9jb21tYW5kKHNhYmlfY29uZmlnLT5jb21tYW5kcy5zZXRfd2lyZWxlc3NfYnV0dG9uLCAwKTsKLQllbHNlCi0JCXNhYmlfc2V0X2NvbW1hbmQoc2FiaV9jb25maWctPmNvbW1hbmRzLnNldF93aXJlbGVzc19idXR0b24sIDEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmZraWxsX29wcyByZmtpbGxfb3BzID0gewotCS5zZXRfYmxvY2sgPSByZmtpbGxfc2V0LAotfTsKLQotc3RhdGljIGludCBpbml0X3dpcmVsZXNzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNkZXYpCi17Ci0JaW50IHJldHZhbDsKLQotCXJmayA9IHJma2lsbF9hbGxvYygic2Ftc3VuZy13aWZpIiwgJnNkZXYtPmRldiwgUkZLSUxMX1RZUEVfV0xBTiwKLQkJCSAgICZyZmtpbGxfb3BzLCBOVUxMKTsKLQlpZiAoIXJmaykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXR2YWwgPSByZmtpbGxfcmVnaXN0ZXIocmZrKTsKLQlpZiAocmV0dmFsKSB7Ci0JCXJma2lsbF9kZXN0cm95KHJmayk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBkZXN0cm95X3dpcmVsZXNzKHZvaWQpCi17Ci0JcmZraWxsX3VucmVnaXN0ZXIocmZrKTsKLQlyZmtpbGxfZGVzdHJveShyZmspOwotfQotCi1zdGF0aWMgc3NpemVfdCBnZXRfcGVyZm9ybWFuY2VfbGV2ZWwoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3Qgc2FiaV9yZXR2YWwgc3JldHZhbDsKLQlpbnQgcmV0dmFsOwotCWludCBpOwotCi0JLyogUmVhZCB0aGUgc3RhdGUgKi8KLQlyZXR2YWwgPSBzYWJpX2dldF9jb21tYW5kKHNhYmlfY29uZmlnLT5jb21tYW5kcy5nZXRfcGVyZm9ybWFuY2VfbGV2ZWwsCi0JCQkJICAmc3JldHZhbCk7Ci0JaWYgKHJldHZhbCkKLQkJcmV0dXJuIHJldHZhbDsKLQotCS8qIFRoZSBsb2dpYyBpcyBiYWNrd2FyZHMsIHllYWgsIGxvdHMgb2YgZnVuLi4uICovCi0JZm9yIChpID0gMDsgc2FiaV9jb25maWctPnBlcmZvcm1hbmNlX2xldmVsc1tpXS5uYW1lOyArK2kpIHsKLQkJaWYgKHNyZXR2YWwucmV0dmFsWzBdID09IHNhYmlfY29uZmlnLT5wZXJmb3JtYW5jZV9sZXZlbHNbaV0udmFsdWUpCi0JCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgc2FiaV9jb25maWctPnBlcmZvcm1hbmNlX2xldmVsc1tpXS5uYW1lKTsKLQl9Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsICJ1bmtub3duIik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNldF9wZXJmb3JtYW5jZV9sZXZlbChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCQlzaXplX3QgY291bnQpCi17Ci0JaWYgKGNvdW50ID49IDEpIHsKLQkJaW50IGk7Ci0JCWZvciAoaSA9IDA7IHNhYmlfY29uZmlnLT5wZXJmb3JtYW5jZV9sZXZlbHNbaV0ubmFtZTsgKytpKSB7Ci0JCQljb25zdCBzdHJ1Y3Qgc2FiaV9wZXJmb3JtYW5jZV9sZXZlbCAqbGV2ZWwgPQotCQkJCSZzYWJpX2NvbmZpZy0+cGVyZm9ybWFuY2VfbGV2ZWxzW2ldOwotCQkJaWYgKCFzdHJuY2FzZWNtcChsZXZlbC0+bmFtZSwgYnVmLCBzdHJsZW4obGV2ZWwtPm5hbWUpKSkgewotCQkJCXNhYmlfc2V0X2NvbW1hbmQoc2FiaV9jb25maWctPmNvbW1hbmRzLnNldF9wZXJmb3JtYW5jZV9sZXZlbCwKLQkJCQkJCSBsZXZlbC0+dmFsdWUpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmICghc2FiaV9jb25maWctPnBlcmZvcm1hbmNlX2xldmVsc1tpXS5uYW1lKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiBjb3VudDsKLX0KLXN0YXRpYyBERVZJQ0VfQVRUUihwZXJmb3JtYW5jZV9sZXZlbCwgU19JV1VTUiB8IFNfSVJVR08sCi0JCSAgIGdldF9wZXJmb3JtYW5jZV9sZXZlbCwgc2V0X3BlcmZvcm1hbmNlX2xldmVsKTsKLQotCi1zdGF0aWMgaW50IF9faW5pdCBkbWlfY2hlY2tfY2IoY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQotewotCXByX2luZm8oImZvdW5kIGxhcHRvcCBtb2RlbCAnJXMnXG4iLAotCQlpZC0+aWRlbnQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19pbml0ZGF0YSBzYW1zdW5nX2RtaV90YWJsZVtdID0gewotCXsKLQkJLmlkZW50ID0gIk4xMjgiLAotCQkubWF0Y2hlcyA9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwKLQkJCQkJIlNBTVNVTkcgRUxFQ1RST05JQ1MgQ08uLCBMVEQuIiksCi0JCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk4xMjgiKSwKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIk4xMjgiKSwKLQkJfSwKLQkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiLAotCX0sCi0JewotCQkuaWRlbnQgPSAiTjEzMCIsCi0JCS5tYXRjaGVzID0gewotCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLAotCQkJCQkiU0FNU1VORyBFTEVDVFJPTklDUyBDTy4sIExURC4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTjEzMCIpLAotCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiTjEzMCIpLAotCQl9LAotCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2IsCi0JfSwKLQl7Ci0JCS5pZGVudCA9ICJYMTI1IiwKLQkJLm1hdGNoZXMgPSB7Ci0JCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsCi0JCQkJCSJTQU1TVU5HIEVMRUNUUk9OSUNTIENPLiwgTFRELiIpLAotCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJYMTI1IiksCi0JCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJYMTI1IiksCi0JCX0sCi0JCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYiwKLQl9LAotCXsKLQkJLmlkZW50ID0gIlgxMjAvWDE3MCIsCi0JCS5tYXRjaGVzID0gewotCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLAotCQkJCQkiU0FNU1VORyBFTEVDVFJPTklDUyBDTy4sIExURC4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiWDEyMC9YMTcwIiksCi0JCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJYMTIwL1gxNzAiKSwKLQkJfSwKLQkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiLAotCX0sCi0JewotCQkuaWRlbnQgPSAiTkMxMCIsCi0JCS5tYXRjaGVzID0gewotCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLAotCQkJCQkiU0FNU1VORyBFTEVDVFJPTklDUyBDTy4sIExURC4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTkMxMCIpLAotCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiTkMxMCIpLAotCQl9LAotCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2IsCi0JfSwKLQkJewotCQkuaWRlbnQgPSAiTlAtUTQ1IiwKLQkJLm1hdGNoZXMgPSB7Ci0JCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsCi0JCQkJCSJTQU1TVU5HIEVMRUNUUk9OSUNTIENPLiwgTFRELiIpLAotCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJTUTQ1UzcwUyIpLAotCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiU1E0NVM3MFMiKSwKLQkJfSwKLQkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiLAotCQl9LAotCXsKLQkJLmlkZW50ID0gIlgzNjAiLAotCQkubWF0Y2hlcyA9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwKLQkJCQkJIlNBTVNVTkcgRUxFQ1RST05JQ1MgQ08uLCBMVEQuIiksCi0JCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlgzNjAiKSwKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIlgzNjAiKSwKLQkJfSwKLQkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiLAotCX0sCi0JewotCQkuaWRlbnQgPSAiUjQxMCBQbHVzIiwKLQkJLm1hdGNoZXMgPSB7Ci0JCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsCi0JCQkJCSJTQU1TVU5HIEVMRUNUUk9OSUNTIENPLiwgTFRELiIpLAotCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJSNDEwUCIpLAotCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiUjQ2MCIpLAotCQl9LAotCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2IsCi0JfSwKLQl7Ci0JCS5pZGVudCA9ICJSNTE4IiwKLQkJLm1hdGNoZXMgPSB7Ci0JCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsCi0JCQkJCSJTQU1TVU5HIEVMRUNUUk9OSUNTIENPLiwgTFRELiIpLAotCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJSNTE4IiksCi0JCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJSNTE4IiksCi0JCX0sCi0JCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYiwKLQl9LAotCXsKLQkJLmlkZW50ID0gIlI1MTkvUjcxOSIsCi0JCS5tYXRjaGVzID0gewotCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLAotCQkJCQkiU0FNU1VORyBFTEVDVFJPTklDUyBDTy4sIExURC4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiUjUxOS9SNzE5IiksCi0JCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJSNTE5L1I3MTkiKSwKLQkJfSwKLQkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiLAotCX0sCi0JewotCQkuaWRlbnQgPSAiTjE1MC9OMjEwL04yMjAvTjIzMCIsCi0JCS5tYXRjaGVzID0gewotCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLAotCQkJCQkiU0FNU1VORyBFTEVDVFJPTklDUyBDTy4sIExURC4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTjE1MC9OMjEwL04yMjAvTjIzMCIpLAotCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiTjE1MC9OMjEwL04yMjAvTjIzMCIpLAotCQl9LAotCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2IsCi0JfSwKLQl7Ci0JCS5pZGVudCA9ICJOMTUwUC9OMjEwUC9OMjIwUCIsCi0JCS5tYXRjaGVzID0gewotCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLAotCQkJCQkiU0FNU1VORyBFTEVDVFJPTklDUyBDTy4sIExURC4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTjE1MFAvTjIxMFAvTjIyMFAiKSwKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIk4xNTBQL04yMTBQL04yMjBQIiksCi0JCX0sCi0JCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYiwKLQl9LAotCXsKLQkJLmlkZW50ID0gIlI1MzAvUjczMCIsCi0JCS5tYXRjaGVzID0gewotCQkgICAgICBETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJTQU1TVU5HIEVMRUNUUk9OSUNTIENPLiwgTFRELiIpLAotCQkgICAgICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlI1MzAvUjczMCIpLAotCQkgICAgICBETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJSNTMwL1I3MzAiKSwKLQkJfSwKLQkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiLAotCX0sCi0JewotCQkuaWRlbnQgPSAiTkYxMTAvTkYyMTAvTkYzMTAiLAotCQkubWF0Y2hlcyA9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlNBTVNVTkcgRUxFQ1RST05JQ1MgQ08uLCBMVEQuIiksCi0JCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk5GMTEwL05GMjEwL05GMzEwIiksCi0JCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJORjExMC9ORjIxMC9ORjMxMCIpLAotCQl9LAotCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2IsCi0JfSwKLQl7Ci0JCS5pZGVudCA9ICJOMTQ1UC9OMjUwUC9OMjYwUCIsCi0JCS5tYXRjaGVzID0gewotCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiU0FNU1VORyBFTEVDVFJPTklDUyBDTy4sIExURC4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTjE0NVAvTjI1MFAvTjI2MFAiKSwKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIk4xNDVQL04yNTBQL04yNjBQIiksCi0JCX0sCi0JCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYiwKLQl9LAotCXsKLQkJLmlkZW50ID0gIlI3MC9SNzEiLAotCQkubWF0Y2hlcyA9IHsKLQkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwKLQkJCQkJIlNBTVNVTkcgRUxFQ1RST05JQ1MgQ08uLCBMVEQuIiksCi0JCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlI3MC9SNzEiKSwKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIlI3MC9SNzEiKSwKLQkJfSwKLQkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiLAotCX0sCi0JewotCQkuaWRlbnQgPSAiUDQ2MCIsCi0JCS5tYXRjaGVzID0gewotCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiU0FNU1VORyBFTEVDVFJPTklDUyBDTy4sIExURC4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiUDQ2MCIpLAotCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiUDQ2MCIpLAotCQl9LAotCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2IsCi0JfSwKLQl7IH0sCi19OwotTU9EVUxFX0RFVklDRV9UQUJMRShkbWksIHNhbXN1bmdfZG1pX3RhYmxlKTsKLQotc3RhdGljIGludCBmaW5kX3NpZ25hdHVyZSh2b2lkIF9faW9tZW0gKm1lbWNoZWNrLCBjb25zdCBjaGFyICp0ZXN0U3RyKQotewotCWludCBpID0gMDsKLQlpbnQgbG9jYTsKLQotCWZvciAobG9jYSA9IDA7IGxvY2EgPCAweGZmZmY7IGxvY2ErKykgewotCQljaGFyIHRlbXAgPSByZWFkYihtZW1jaGVjayArIGxvY2EpOwotCi0JCWlmICh0ZW1wID09IHRlc3RTdHJbaV0pIHsKLQkJCWlmIChpID09IHN0cmxlbih0ZXN0U3RyKS0xKQotCQkJCWJyZWFrOwotCQkJKytpOwotCQl9IGVsc2UgewotCQkJaSA9IDA7Ci0JCX0KLQl9Ci0JcmV0dXJuIGxvY2E7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNhbXN1bmdfaW5pdCh2b2lkKQotewotCXN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyBwcm9wczsKLQlzdHJ1Y3Qgc2FiaV9yZXR2YWwgc3JldHZhbDsKLQl1bnNpZ25lZCBpbnQgaWZhY2VQOwotCWludCBpOwotCWludCBsb2NhOwotCWludCByZXR2YWw7Ci0KLQltdXRleF9pbml0KCZzYWJpX211dGV4KTsKLQotCWlmICghZm9yY2UgJiYgIWRtaV9jaGVja19zeXN0ZW0oc2Ftc3VuZ19kbWlfdGFibGUpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWYwMDAwX3NlZ21lbnQgPSBpb3JlbWFwX25vY2FjaGUoMHhmMDAwMCwgMHhmZmZmKTsKLQlpZiAoIWYwMDAwX3NlZ21lbnQpIHsKLQkJcHJfZXJyKCJDYW4ndCBtYXAgdGhlIHNlZ21lbnQgYXQgMHhmMDAwMFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIFRyeSB0byBmaW5kIG9uZSBvZiB0aGUgc2lnbmF0dXJlcyBpbiBtZW1vcnkgdG8gZmluZCB0aGUgaGVhZGVyICovCi0JZm9yIChpID0gMDsgc2FiaV9jb25maWdzW2ldLnRlc3Rfc3RyaW5nICE9IDA7ICsraSkgewotCQlzYWJpX2NvbmZpZyA9ICZzYWJpX2NvbmZpZ3NbaV07Ci0JCWxvY2EgPSBmaW5kX3NpZ25hdHVyZShmMDAwMF9zZWdtZW50LCBzYWJpX2NvbmZpZy0+dGVzdF9zdHJpbmcpOwotCQlpZiAobG9jYSAhPSAweGZmZmYpCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAobG9jYSA9PSAweGZmZmYpIHsKLQkJcHJfZXJyKCJUaGlzIGNvbXB1dGVyIGRvZXMgbm90IHN1cHBvcnQgU0FCSVxuIik7Ci0JCWdvdG8gZXJyb3Jfbm9fc2lnbmF0dXJlOwotCX0KLQotCS8qIHBvaW50IHRvIHRoZSBTTUkgcG9ydCBOdW1iZXIgKi8KLQlsb2NhICs9IDE7Ci0Jc2FiaSA9IChmMDAwMF9zZWdtZW50ICsgbG9jYSk7Ci0KLQlpZiAoZGVidWcpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlRoaXMgY29tcHV0ZXIgc3VwcG9ydHMgU0FCST09JXhcbiIsCi0JCQlsb2NhICsgMHhmMDAwMCAtIDYpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiU0FCSSBoZWFkZXI6XG4iKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiBTTUkgUG9ydCBOdW1iZXIgPSAweCUwNHhcbiIsCi0JCQlyZWFkdyhzYWJpICsgc2FiaV9jb25maWctPmhlYWRlcl9vZmZzZXRzLnBvcnQpKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiBTTUkgSW50ZXJmYWNlIEZ1bmN0aW9uID0gMHglMDJ4XG4iLAotCQkJcmVhZGIoc2FiaSArIHNhYmlfY29uZmlnLT5oZWFkZXJfb2Zmc2V0cy5pZmFjZV9mdW5jKSk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIgU01JIGVuYWJsZSBtZW1vcnkgYnVmZmVyID0gMHglMDJ4XG4iLAotCQkJcmVhZGIoc2FiaSArIHNhYmlfY29uZmlnLT5oZWFkZXJfb2Zmc2V0cy5lbl9tZW0pKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiBTTUkgcmVzdG9yZSBtZW1vcnkgYnVmZmVyID0gMHglMDJ4XG4iLAotCQkJcmVhZGIoc2FiaSArIHNhYmlfY29uZmlnLT5oZWFkZXJfb2Zmc2V0cy5yZV9tZW0pKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiBTQUJJIGRhdGEgb2Zmc2V0ID0gMHglMDR4XG4iLAotCQkJcmVhZHcoc2FiaSArIHNhYmlfY29uZmlnLT5oZWFkZXJfb2Zmc2V0cy5kYXRhX29mZnNldCkpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiIFNBQkkgZGF0YSBzZWdtZW50ID0gMHglMDR4XG4iLAotCQkJcmVhZHcoc2FiaSArIHNhYmlfY29uZmlnLT5oZWFkZXJfb2Zmc2V0cy5kYXRhX3NlZ21lbnQpKTsKLQl9Ci0KLQkvKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBTQUJJIEludGVyZmFjZSAqLwotCWlmYWNlUCA9IChyZWFkdyhzYWJpICsgc2FiaV9jb25maWctPmhlYWRlcl9vZmZzZXRzLmRhdGFfc2VnbWVudCkgJiAweDBmZmZmKSA8PCA0OwotCWlmYWNlUCArPSByZWFkdyhzYWJpICsgc2FiaV9jb25maWctPmhlYWRlcl9vZmZzZXRzLmRhdGFfb2Zmc2V0KSAmIDB4MGZmZmY7Ci0Jc2FiaV9pZmFjZSA9IGlvcmVtYXBfbm9jYWNoZShpZmFjZVAsIDE2KTsKLQlpZiAoIXNhYmlfaWZhY2UpIHsKLQkJcHJfZXJyKCJDYW4ndCByZW1hcCAleFxuIiwgaWZhY2VQKTsKLQkJZ290byBleGl0OwotCX0KLQlpZiAoZGVidWcpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgImlmYWNlUCA9IDB4JTA4eFxuIiwgaWZhY2VQKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgInNhYmlfaWZhY2UgPSAlcFxuIiwgc2FiaV9pZmFjZSk7Ci0KLQkJdGVzdF9iYWNrbGlnaHQoKTsKLQkJdGVzdF93aXJlbGVzcygpOwotCi0JCXJldHZhbCA9IHNhYmlfZ2V0X2NvbW1hbmQoc2FiaV9jb25maWctPmNvbW1hbmRzLmdldF9icmlnaHRuZXNzLAotCQkJCQkgICZzcmV0dmFsKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgImJyaWdodG5lc3MgPSAweCUwMnhcbiIsIHNyZXR2YWwucmV0dmFsWzBdKTsKLQl9Ci0KLQkvKiBUdXJuIG9uICJMaW51eCIgbW9kZSBpbiB0aGUgQklPUyAqLwotCWlmIChzYWJpX2NvbmZpZy0+Y29tbWFuZHMuc2V0X2xpbnV4ICE9IDB4ZmYpIHsKLQkJcmV0dmFsID0gc2FiaV9zZXRfY29tbWFuZChzYWJpX2NvbmZpZy0+Y29tbWFuZHMuc2V0X2xpbnV4LAotCQkJCQkgIDB4ODEpOwotCQlpZiAocmV0dmFsKSB7Ci0JCQlwcl93YXJuKCJMaW51eCBtb2RlIHdhcyBub3Qgc2V0IVxuIik7Ci0JCQlnb3RvIGVycm9yX25vX3BsYXRmb3JtOwotCQl9Ci0JfQotCi0JLyoga25vY2sgdXAgYSBwbGF0Zm9ybSBkZXZpY2UgdG8gaGFuZyBzdHVmZiBvZmYgb2YgKi8KLQlzZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgic2Ftc3VuZyIsIC0xLCBOVUxMLCAwKTsKLQlpZiAoSVNfRVJSKHNkZXYpKQotCQlnb3RvIGVycm9yX25vX3BsYXRmb3JtOwotCi0JLyogY3JlYXRlIGEgYmFja2xpZ2h0IGRldmljZSB0byB0YWxrIHRvIHRoaXMgb25lICovCi0JbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcykpOwotCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUExBVEZPUk07Ci0JcHJvcHMubWF4X2JyaWdodG5lc3MgPSBzYWJpX2NvbmZpZy0+bWF4X2JyaWdodG5lc3M7Ci0JYmFja2xpZ2h0X2RldmljZSA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoInNhbXN1bmciLCAmc2Rldi0+ZGV2LAotCQkJCQkJICAgICBOVUxMLCAmYmFja2xpZ2h0X29wcywKLQkJCQkJCSAgICAgJnByb3BzKTsKLQlpZiAoSVNfRVJSKGJhY2tsaWdodF9kZXZpY2UpKQotCQlnb3RvIGVycm9yX25vX2JhY2tsaWdodDsKLQotCWJhY2tsaWdodF9kZXZpY2UtPnByb3BzLmJyaWdodG5lc3MgPSByZWFkX2JyaWdodG5lc3MoKTsKLQliYWNrbGlnaHRfZGV2aWNlLT5wcm9wcy5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7Ci0JYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmFja2xpZ2h0X2RldmljZSk7Ci0KLQlyZXR2YWwgPSBpbml0X3dpcmVsZXNzKHNkZXYpOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXJyb3Jfbm9fcmZrOwotCi0JcmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZzZGV2LT5kZXYsICZkZXZfYXR0cl9wZXJmb3JtYW5jZV9sZXZlbCk7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBlcnJvcl9maWxlX2NyZWF0ZTsKLQotZXhpdDoKLQlyZXR1cm4gMDsKLQotZXJyb3JfZmlsZV9jcmVhdGU6Ci0JZGVzdHJveV93aXJlbGVzcygpOwotCi1lcnJvcl9ub19yZms6Ci0JYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGJhY2tsaWdodF9kZXZpY2UpOwotCi1lcnJvcl9ub19iYWNrbGlnaHQ6Ci0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoc2Rldik7Ci0KLWVycm9yX25vX3BsYXRmb3JtOgotCWlvdW5tYXAoc2FiaV9pZmFjZSk7Ci0KLWVycm9yX25vX3NpZ25hdHVyZToKLQlpb3VubWFwKGYwMDAwX3NlZ21lbnQpOwotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgc2Ftc3VuZ19leGl0KHZvaWQpCi17Ci0JLyogVHVybiBvZmYgIkxpbnV4IiBtb2RlIGluIHRoZSBCSU9TICovCi0JaWYgKHNhYmlfY29uZmlnLT5jb21tYW5kcy5zZXRfbGludXggIT0gMHhmZikKLQkJc2FiaV9zZXRfY29tbWFuZChzYWJpX2NvbmZpZy0+Y29tbWFuZHMuc2V0X2xpbnV4LCAweDgwKTsKLQotCWRldmljZV9yZW1vdmVfZmlsZSgmc2Rldi0+ZGV2LCAmZGV2X2F0dHJfcGVyZm9ybWFuY2VfbGV2ZWwpOwotCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihiYWNrbGlnaHRfZGV2aWNlKTsKLQlkZXN0cm95X3dpcmVsZXNzKCk7Ci0JaW91bm1hcChzYWJpX2lmYWNlKTsKLQlpb3VubWFwKGYwMDAwX3NlZ21lbnQpOwotCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHNkZXYpOwotfQotCi1tb2R1bGVfaW5pdChzYW1zdW5nX2luaXQpOwotbW9kdWxlX2V4aXQoc2Ftc3VuZ19leGl0KTsKLQotTU9EVUxFX0FVVEhPUigiR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiU2Ftc3VuZyBCYWNrbGlnaHQgZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2VwL3NlcF9kcml2ZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9zZXAvc2VwX2RyaXZlci5jCmluZGV4IDcxYTVmYmMuLjg5MGVlZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zZXAvc2VwX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zZXAvc2VwX2RyaXZlci5jCkBAIC01NSw4ICs1NSw2IEBACiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Jhcl9yZWdpc3Rlci5oPgogCi0jaW5jbHVkZSAiLi4vbWVtcmFyL21lbXJhci5oIgotCiAjaW5jbHVkZSAic2VwX2RyaXZlcl9od19kZWZzLmgiCiAjaW5jbHVkZSAic2VwX2RyaXZlcl9jb25maWcuaCIKICNpbmNsdWRlICJzZXBfZHJpdmVyX2FwaS5oIgpAQCAtNTg2LDcgKzU4NCw3IEBACiAJZGV2X2RiZygmc2VwLT5wZGV2LT5kZXYsICJwb2xsOiBzZW5kX2N0IGlzICVseCByZXBseSBjdCBpcyAlbHhcbiIsCiAJCXNlcC0+c2VuZF9jdCwgc2VwLT5yZXBseV9jdCk7CiAKLQkvKiBDaGVjayBpZiBlcnJvciBvY2N1cmVkIGR1cmluZyBwb2xsICovCisJLyogQ2hlY2sgaWYgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHBvbGwgKi8KIAlyZXR2YWwyID0gc2VwX3JlYWRfcmVnKHNlcCwgSFdfSE9TVF9TRVBfSE9TVF9HUFIzX1JFR19BRERSKTsKIAlpZiAocmV0dmFsMiAhPSAweDApIHsKIAkJZGV2X3dhcm4oJnNlcC0+cGRldi0+ZGV2LCAicG9sbDsgcG9sbCBlcnJvciAleFxuIiwgcmV0dmFsMik7CkBAIC0xMTA2LDcgKzExMDQsNyBAQAogCQkJbGxpX2FycmF5W2NvdW50XS5ibG9ja19zaXplKTsKIAl9CiAKLQkvKiBTZXQgb3V0cHV0IHBhcmFtcyBhY29yZGluZyB0byB0aGUgaW5fb3V0IGZsYWcgKi8KKwkvKiBTZXQgb3V0cHV0IHBhcmFtcyBhY2NvcmRpbmcgdG8gdGhlIGluX291dCBmbGFnICovCiAJaWYgKGluX291dF9mbGFnID09IFNFUF9EUklWRVJfSU5fRkxBRykgewogCQkqbGxpX2FycmF5X3B0ciA9IGxsaV9hcnJheTsKIAkJc2VwLT5kbWFfcmVzX2FycltzZXAtPm5yX2RjYl9jcmVhdF0uaW5fbnVtX3BhZ2VzID0gbnVtX3BhZ2VzOwpAQCAtMTU3Nyw3ICsxNTc1LDcgQEAKIAogCQkvKgogCQkgKiBJZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCB0YWJsZSAtCi0JCSAqIHRoZW4gYWxsaWduIGl0IHRvIHRoZSBibG9jayBzaXplCisJCSAqIHRoZW4gYWxpZ24gaXQgdG8gdGhlIGJsb2NrIHNpemUKIAkJICovCiAJCWlmICghbGFzdF90YWJsZV9mbGFnKQogCQkJdGFibGVfZGF0YV9zaXplID0KQEAgLTE5NzQsNyArMTk3Miw3IEBACiAJZGV2X2RiZygmc2VwLT5wZGV2LT5kZXYsICJTRVBfRFJJVkVSX0VOVFJJRVNfUEVSX1RBQkxFX0lOX1NFUCBpcyAleFxuIiwKIAkJU0VQX0RSSVZFUl9FTlRSSUVTX1BFUl9UQUJMRV9JTl9TRVApOwogCi0JLyogQ2FsbCB0aGUgZnVjbnRpb24gdGhhdCBjcmVhdGVzIHRhYmxlIGZyb20gdGhlIGxsaSBhcnJheXMgKi8KKwkvKiBDYWxsIHRoZSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgdGFibGUgZnJvbSB0aGUgbGxpIGFycmF5cyAqLwogCWVycm9yID0gc2VwX2NvbnN0cnVjdF9kbWFfdGFibGVzX2Zyb21fbGxpKHNlcCwgbGxpX2luX2FycmF5LAogCQlzZXAtPmRtYV9yZXNfYXJyW3NlcC0+bnJfZGNiX2NyZWF0XS5pbl9udW1fcGFnZXMsCiAJCWxsaV9vdXRfYXJyYXksCkBAIC0yMzcyLDcgKzIzNzAsNiBAQAogCWludCBlcnJvciA9IDA7CiAJLyogQ29tbWFuZCBhcmdzICovCiAJc3RydWN0IHJhcl9obmRsX3RvX2J1c19zdHJ1Y3QgY29tbWFuZF9hcmdzOwotCXN0cnVjdCBSQVJfYnVmZmVyIHJhcl9idWY7CiAJLyogQnVzIGFkZHJlc3MgKi8KIAlkbWFfYWRkcl90ICByYXJfYnVzID0gMDsKIAkvKiBIb2xkcyB0aGUgUkFSIGFkZHJlc3MgaW4gdGhlIHN5c3RlbSBtZW1vcnkgb2Zmc2V0ICovCkBAIC0yMzg2LDE2ICsyMzgzLDggQEAKIAl9CiAKIAkvKiBDYWxsIHRvIHRyYW5zbGF0aW9uIGZ1bmN0aW9uIG9ubHkgaWYgdXNlciBoYW5kbGUgaXMgbm90IE5VTEwgKi8KLQlpZiAoY29tbWFuZF9hcmdzLnJhcl9oYW5kbGUpIHsKLQkJbWVtc2V0KCZyYXJfYnVmLCAwLCBzaXplb2YocmFyX2J1ZikpOwotCQlyYXJfYnVmLmluZm8uaGFuZGxlID0gKHUzMiljb21tYW5kX2FyZ3MucmFyX2hhbmRsZTsKLQotCQlpZiAocmFyX2hhbmRsZV90b19idXMoJnJhcl9idWYsIDEpICE9IDEpIHsKLQkJCWVycm9yID0gLUVGQVVMVDsKLQkJCWdvdG8gZW5kX2Z1bmN0aW9uOwotCQl9Ci0JCXJhcl9idXMgPSByYXJfYnVmLmJ1c19hZGRyZXNzOwotCX0KKwlpZiAoY29tbWFuZF9hcmdzLnJhcl9oYW5kbGUpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAlkZXZfZGJnKCZzZXAtPnBkZXYtPmRldiwgInJhciBtc2c7IHJhcl9hZGRyX2J1cyA9ICV4XG4iLCAodTMyKXJhcl9idXMpOwogCiAJLyogU2V0IHZhbHVlIGluIHRoZSBTWVNURU0gTUVNT1JZIG9mZnNldCAqLwpAQCAtMjQxNiw3ICsyNDA1LDcgQEAKICAqCUBjbWQ6IGNvbW1hbmQKICAqCUBhcmc6IHBvaW50ZXIgdG8gYXJndW1lbnQgc3RydWN0dXJlCiAgKgotICoJSW1wbGVtZW50IHRoZSBpb2N0bCBtZXRob2RzIGF2YWlsYmxlIG9uIHRoZSBTRVAgZGV2aWNlLgorICoJSW1wbGVtZW50IHRoZSBpb2N0bCBtZXRob2RzIGF2YWlsYWJsZSBvbiB0aGUgU0VQIGRldmljZS4KICAqLwogc3RhdGljIGxvbmcgc2VwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zZXAvc2VwX2RyaXZlcl9jb25maWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9zZXAvc2VwX2RyaXZlcl9jb25maWcuaAppbmRleCBkM2I5MjIwLi4xMDMzNDI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2VwL3NlcF9kcml2ZXJfY29uZmlnLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfZHJpdmVyX2NvbmZpZy5oCkBAIC02NSwxMSArNjUsMTEgQEAKICNkZWZpbmUgU0VQX0RSSVZFUl9NSU5fREFUQV9TSVpFX1BFUl9UQUJMRQkJMTYKIAogLyogZmxhZyB0aGF0IHNpZ25pZmllcyB0YWggdGhlIGxvY2sgaXMKLWN1cnJlbnRseSBoZWxkIGJ5IHRoZSBwcm9jY2VzcyAoc3RydWN0IGZpbGUpICovCitjdXJyZW50bHkgaGVsZCBieSB0aGUgcHJvY2VzcyAoc3RydWN0IGZpbGUpICovCiAjZGVmaW5lIFNFUF9EUklWRVJfT1dOX0xPQ0tfRkxBRyAgICAgICAgICAgICAgICAgICAgICAgIDEKIAogLyogZmxhZyB0aGF0IHNpZ25pZmllcyB0YWggdGhlIGxvY2sgaXMgY3VycmVudGx5IE5PVAotaGVsZCBieSB0aGUgcHJvY2Nlc3MgKHN0cnVjdCBmaWxlKSAqLworaGVsZCBieSB0aGUgcHJvY2VzcyAoc3RydWN0IGZpbGUpICovCiAjZGVmaW5lIFNFUF9EUklWRVJfRElTT1dOX0xPQ0tfRkxBRyAgICAgICAgICAgICAgICAgICAgIDAKIAogLyogaW5kaWNhdGVzIHdoZXRoZXIgZHJpdmVyIGhhcyBtYXBwZWQvdW5tYXBwZWQgc2hhcmVkIGFyZWEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL1JFQURNRSBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL1JFQURNRQppbmRleCA3MGY0OTA5Li5iODNiYmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9SRUFETUUKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvUkVBRE1FCkBAIC0zMyw3ICszMyw3IEBACiAJLSBOQVBJPwogCS0gd2FzdGVkIG92ZXJoZWFkIG9mIGV4dHJhIHN0YXRzCiAJLSBzdGF0ZSB2YXJpYWJsZXMgZm9yIHRoaW5ncyB0aGF0IGFyZQotCSAgZWFzaWx5IGF2YWlsYmxlIGFuZCBzaG91bGRuJ3QgYmUga2VwdCBpbiBjYXJkIHN0cnVjdHVyZSwgY2FyZG51bSwgLi4uCisJICBlYXNpbHkgYXZhaWxhYmxlIGFuZCBzaG91bGRuJ3QgYmUga2VwdCBpbiBjYXJkIHN0cnVjdHVyZSwgY2FyZG51bSwgLi4uCiAJICBzbG90bnVtYmVyLCBldmVudHMsIC4uLgogCS0gZ2V0IHJpZCBvZiBzbGljX3NwaW5sb2NrIHdyYXBwZXIKIAktIHZvbGF0aWxlID09IGJhZCBkZXNpZ24gPT4gYmFkIGNvZGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYwppbmRleCBkMDA3ZTRhLi4zZTIyMzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5jCkBAIC0yNiwxMCArMjYsNiBAQAogICoJQm95b2QueWFuZyA8Ym95b2QueWFuZ0BzaWxpY29ubW90aW9uLmNvbS5jbj4KICAqLwogCi0jaWZuZGVmIF9fS0VSTkVMX18KLSNkZWZpbmUgX19LRVJORUxfXwotI2VuZGlmCi0KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CkBAIC05NjUsNyArOTYxLDcgQEAKIAkJZ290byBmYWlsZWQ7CiAKIAlzbXRjZmJfc2V0bW9kZShzZmIpOwotCS8qIFByaW1hcnkgZGlzcGxheSBzdGFydGluZyBmcm9tIDAgcG9zdGlvbiAqLworCS8qIFByaW1hcnkgZGlzcGxheSBzdGFydGluZyBmcm9tIDAgcG9zaXRpb24gKi8KIAlody5CYXNlQWRkcmVzc0luVlJBTSA9IDA7CiAJc2ZiLT5mYi5wYXIgPSAmaHc7CiAKQEAgLTEwMTksNiArMTAxNSw3IEBACiAJc210Y19mcmVlX2ZiX2luZm8oc2ZiKTsKIH0KIAorI2lmZGVmIENPTkZJR19QTQogLyogSmFzb24gKDA4LzE0LzIwMDkpCiAgKiBzdXNwZW5kIGZ1bmN0aW9uLCBjYWxsZWQgd2hlbiB0aGUgc3VzcGVuZCBldmVudCBpcyB0cmlnZ2VyZWQKICAqLwpAQCAtMTA1NSw3ICsxMDUyLDcgQEAKIAogCXBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IG1zZzsKIAotCS8qIGFkZGl0aW9uYWx5IHR1cm4gb2ZmIGFsbCBmdW5jdGlvbiBibG9ja3MgaW5jbHVkaW5nIGludGVybmFsIFBMTHMgKi8KKwkvKiBhZGRpdGlvbmFsbHkgdHVybiBvZmYgYWxsIGZ1bmN0aW9uIGJsb2NrcyBpbmNsdWRpbmcgaW50ZXJuYWwgUExMcyAqLwogCXNtdGNfc2VxdygweDIxLCAweGZmKTsKIAogCXJldHVybiAwOwpAQCAtMTExMSw2ICsxMTA4LDcgQEAKIAogCXJldHVybiAwOwogfQorI2VuZGlmCiAKIC8qIEphc29uICgwOC8xMy8yMDA5KQogICogcGNpX2RyaXZlciBzdHJ1Y3QgdXNlZCB0byB3cmFwIHRoZSBvcmlnaW5hbCBkcml2ZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL0tjb25maWcKaW5kZXggMmNmNzdjOS4uMDNkY2FjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL0tjb25maWcKQEAgLTIsNiArMiw3IEBACiAJdHJpc3RhdGUgIlNvZnRsb2dpYyA2eDEwIE1QRUcgY29kZWMgY2FyZHMiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgVklERU9fREVWICYmIFNORCAmJiBJMkMKIAlzZWxlY3QgVklERU9CVUZfRE1BX1NHCisJc2VsZWN0IFNORF9QQ00KIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgU29mdGxvZ2ljIGJhc2VkIE1QRUctNCBhbmQgaC4yNjQgY29kZWMKIAkgIGNvZGVjIGNhcmRzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAva2V5aGVscC5jIGIvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAva2V5aGVscC5jCmluZGV4IDIzY2Y3ZjQuLjE3MGYzODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL2tleWhlbHAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9rZXloZWxwLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAltZW1zZXQoa2V5X29mZnNldHMsIDAsIHNpemVvZihrZXlfb2Zmc2V0cykpOwogCWtwID0gc3RhdGVfdGJsICsgbnN0YXRlcyArIDE7CiAJd2hpbGUgKCprcCsrKSB7Ci0JCS8qIGNvdW50IG9jY3VycmFuY2VzIG9mIGVhY2ggZnVuY3Rpb24gKi8KKwkJLyogY291bnQgb2NjdXJyZW5jZXMgb2YgZWFjaCBmdW5jdGlvbiAqLwogCQlmb3IgKGkgPSAwOyBpIDwgbnN0YXRlczsgaSsrLCBrcCsrKSB7CiAJCQlpZiAoISprcCkKIAkJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3Nwa2d1aWRlLnR4dCBiL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL3Nwa2d1aWRlLnR4dAppbmRleCAyNDM2MmViLi5mMzIxMDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9zcGtndWlkZS50eHQKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvc3BrZ3VpZGUudHh0CkBAIC0xMDkxLDcgKzEwOTEsNyBAQAogCiBUaGVyZSBpcyBubyB3YXkgdG8gc2F2ZSB0aGVzZSB3aW5kb3cgc2V0dGluZ3MsIGFuZCB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUKIHdpbmRvdyBkZWZpbmVkIGZvciBlYWNoIHZpcnR1YWwgY29uc29sZS4gIFRoZXJlIGlzIGFsc28gbm8gd2F5IHRvIGhhdmUKLXdpbmRvd3MgYXV0b21hdGljbHkgZGVmaW5lZCBmb3Igc3BlY2lmaWMgYXBwbGljYXRpb25zLgord2luZG93cyBhdXRvbWF0aWNhbGx5IGRlZmluZWQgZm9yIHNwZWNpZmljIGFwcGxpY2F0aW9ucy4KIAogSW4gb3JkZXIgdG8gZGVmaW5lIGEgd2luZG93LCB1c2UgdGhlIHJldmlldyBrZXlzIHRvIG1vdmUgeW91ciByZWFkaW5nCiBjdXJzb3IgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJlYSB5b3Ugd2FudCB0byBkZWZpbmUuICBUaGVuIHByZXNzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9mZnNwb3J0LmMgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9mZnNwb3J0LmMKaW5kZXggMDA3YjI0Yi4uNTA2NTQ3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvZmZzcG9ydC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2Zmc3BvcnQuYwpAQCAtMzgsNyArMzgsNyBAQAogKiBPdXRwdXRzOiAgICAgIE51bWJlciBvZiBVc2VkIEJpdHMKICogICAgICAgICAgICAgICAwLCBpZiB0aGUgYXJndW1lbnQgaXMgMAogKiBEZXNjcmlwdGlvbjogIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGJpdHMgdXNlZCBieSBhIGdpdmVuIHBvd2VyIG9mIDIgbnVtYmVyCi0qICAgICAgICAgICAgICAgTnVtYmVyIGNhbiBiZSB1cHRvIDMyIGJpdAorKiAgICAgICAgICAgICAgIE51bWJlciBjYW4gYmUgdXAgdG8gMzIgYml0CiAqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwogaW50IEdMT0JfQ2FsY19Vc2VkX0JpdHModTMyIG4pCiB7CkBAIC02NTMsNyArNjUzLDcgQEAKIAl9CiAJZGV2LT5xdWV1ZS0+cXVldWVkYXRhID0gZGV2OwogCi0JLyogQXMgTGludXggYmxvY2sgbGF5ZXIgZG9lbnMndCBzdXBwb3J0ID40S0IgaGFyZHdhcmUgc2VjdG9yLCAgKi8KKwkvKiBBcyBMaW51eCBibG9jayBsYXllciBkb2Vzbid0IHN1cHBvcnQgPjRLQiBoYXJkd2FyZSBzZWN0b3IsICAqLwogCS8qIEhlcmUgd2UgZm9yY2UgcmVwb3J0IDUxMiBieXRlIGhhcmR3YXJlIHNlY3RvciBzaXplIHRvIEtlcm5lbCAqLwogCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUoZGV2LT5xdWV1ZSwgNTEyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvZmxhc2guYyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2ZsYXNoLmMKaW5kZXggYTJmODIwMC4uYWVhZDM1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvZmxhc2guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9mbGFzaC5jCkBAIC05NjUsNyArOTY1LDcgQEAKIAlpZiAoMCA9PSAqZmlyc3RfZmFpbGVkX2NtZCkKIAkJKmZpcnN0X2ZhaWxlZF9jbWQgPSBQZW5kaW5nQ01EW2lkeF0uU0JEQ21kSW5kZXg7CiAKLQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlVuY29ycmVjdGFibGUgZXJyb3IgaGFzIG9jY3VyZWQgIgorCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiVW5jb3JyZWN0YWJsZSBlcnJvciBoYXMgb2NjdXJyZWQgIgogCQkid2hpbGUgZXhlY3V0aW5nICV1IENvbW1hbmQgJXUgYWNjZXNpbmcgQmxvY2sgJXVcbiIsCiAJCSh1bnNpZ25lZCBpbnQpcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250LAogCQlQZW5kaW5nQ01EW2lkeF0uQ01ELApAQCAtMTg3OSw3ICsxODc5LDcgQEAKIH0KIAogLyoKLSAqIFNlYWNoIGluIHRoZSBMZXZlbDIgQ2FjaGUgdGFibGUgdG8gZmluZCB0aGUgY2FjaGUgaXRlbS4KKyAqIFNlYXJjaCBpbiB0aGUgTGV2ZWwyIENhY2hlIHRhYmxlIHRvIGZpbmQgdGhlIGNhY2hlIGl0ZW0uCiAgKiBJZiBmaW5kLCByZWFkIHRoZSBkYXRhIGZyb20gdGhlIE5BTkQgcGFnZSBvZiBMMiBDYWNoZSwKICAqIE90aGVyd2lzZSwgcmV0dXJuIEZBSUwuCiAgKi8KQEAgLTM5ODksNyArMzk4OSw3IEBACiAqIElucHV0czogICAgICAgaW5kZXggdG8gYmxvY2sgdGhhdCB3YXMganVzdCBpbmNyZW1lbnRlZCBhbmQgaXMgYXQgdGhlIG1heAogKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAvIEZBSUw9MQogKiBEZXNjcmlwdGlvbjogIElmIGFueSBlcmFzZSBjb3VudHMgYXQgTUFYLCBhZGp1c3RzIGVyYXNlIGNvdW50IG9mIGV2ZXJ5Ci0qICAgICAgICAgICAgICAgYmxvY2sgYnkgc3Vic3RyYWN0aW5nIGxlYXN0IHdvcm4KKyogICAgICAgICAgICAgICBibG9jayBieSBzdWJ0cmFjdGluZyBsZWFzdCB3b3JuCiAqICAgICAgICAgICAgICAgY291bnRlciBmcm9tIGNvdW50ZXIgdmFsdWUgb2YgZXZlcnkgZW50cnkgaW4gd2VhciB0YWJsZQogKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KIHN0YXRpYyBpbnQgRlRMX0FkanVzdF9SZWxhdGl2ZV9FcmFzZV9Db3VudCh1MzIgSW5kZXhfb2ZfTUFYKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N0ZV9ybWk0L3N5bmFwdGljc19pMmNfcm1pNC5jIGIvZHJpdmVycy9zdGFnaW5nL3N0ZV9ybWk0L3N5bmFwdGljc19pMmNfcm1pNC5jCmluZGV4IGQ1NWE4ZTQuLjNlNjhkNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zdGVfcm1pNC9zeW5hcHRpY3NfaTJjX3JtaTQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3RlX3JtaTQvc3luYXB0aWNzX2kyY19ybWk0LmMKQEAgLTcxLDcgKzcxLDcgQEAKICNkZWZpbmUgU1lOQVBUSUNTX1JNSTRfREVWSUNFX0NPTlRST0xfRlVOQ19OVU0JKDB4MDEpCiAKIC8qKgotICogc3RydWN0IHN5bmFwdGljc19ybWk0X2ZuX2Rlc2MgLSBjb250YWlucyB0aGUgZnVudGlvbiBkZXNjcmlwdG9yIGluZm9ybWF0aW9uCisgKiBzdHJ1Y3Qgc3luYXB0aWNzX3JtaTRfZm5fZGVzYyAtIGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBkZXNjcmlwdG9yIGluZm9ybWF0aW9uCiAgKiBAcXVlcnlfYmFzZV9hZGRyOiBiYXNlIGFkZHJlc3MgZm9yIHF1ZXJ5CiAgKiBAY21kX2Jhc2VfYWRkcjogYmFzZSBhZGRyZXNzIGZvciBjb21tYW5kCiAgKiBAY3RybF9iYXNlX2FkZHI6IGJhc2UgYWRkcmVzcyBmb3IgY29udHJvbApAQCAtOTIsNyArOTIsNyBAQAogfTsKIAogLyoqCi0gKiBzdHJ1Y3Qgc3luYXB0aWNzX3JtaTRfZm4gLSBjb250YWlucyB0aGUgZnVudGlvbiBpbmZvcm1hdGlvbgorICogc3RydWN0IHN5bmFwdGljc19ybWk0X2ZuIC0gY29udGFpbnMgdGhlIGZ1bmN0aW9uIGluZm9ybWF0aW9uCiAgKiBAZm5fbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIKICAqIEBudW1fb2ZfZGF0YV9zb3VyY2VzOiBudW1iZXIgb2YgZGF0YSBzb3VyY2VzCiAgKiBAbnVtX29mX2RhdGFfcG9pbnRzOiBudW1iZXIgb2YgZmluZ2VycyB0b3VjaGVkCkBAIC0xNTEsNyArMTUxLDcgQEAKICAqIEBpbnB1dF9kZXY6IHBvaW50ZXIgZm9yIGlucHV0IGRldmljZQogICogQGkyY19jbGllbnQ6IHBvaW50ZXIgZm9yIGkyYyBjbGllbnQKICAqIEBib2FyZDogY29uc3RhbnQgcG9pbnRlciBmb3IgdG91Y2ggcGxhdGZvcm0gZGF0YQotICogQGZuX2xpc3RfbXV0ZXg6IG11dGV4IGZvciBmdW50aW9uIGxpc3QKKyAqIEBmbl9saXN0X211dGV4OiBtdXRleCBmb3IgZnVuY3Rpb24gbGlzdAogICogQHJtaTRfcGFnZV9tdXRleDogbXV0ZXggZm9yIHJtaTQgcGFnZQogICogQGN1cnJlbnRfcGFnZTogdmFyaWFibGUgZm9yIGludGVnZXIKICAqIEBudW1iZXJfb2ZfaW50ZXJydXB0X3JlZ2lzdGVyOiBpbnRlcnJ1cHQgcmVnaXN0ZXJzIGNvdW50CkBAIC0yNzgsNyArMjc4LDcgQEAKIAl0eGJ1ZlswXQk9IGFkZHJlc3MgJiBNQVNLXzhCSVQ7CiAJdHhidWZbMV0JPSBkYXRhOwogCXJldHZhbAkJPSBpMmNfbWFzdGVyX3NlbmQocGRhdGEtPmkyY19jbGllbnQsIHR4YnVmLCAyKTsKLQkvKiBBZGQgaW4gcmV0cnkgb24gd3JpdGVzIG9ubHkgaW4gY2VydGlhbiBlcnJvciByZXR1cm4gdmFsdWVzICovCisJLyogQWRkIGluIHJldHJ5IG9uIHdyaXRlcyBvbmx5IGluIGNlcnRhaW4gZXJyb3IgcmV0dXJuIHZhbHVlcyAqLwogCWlmIChyZXR2YWwgIT0gMikgewogCQlkZXZfZXJyKCZpMmMtPmRldiwgIiVzOmZhaWxlZDolZFxuIiwgX19mdW5jX18sIHJldHZhbCk7CiAJCXJldHZhbCA9IC1FSU87CkBAIC01NjEsNyArNTYxLDcgQEAKIAl9CiAJLyoKIAkgKiAyRCBkYXRhIHNvdXJjZXMgaGF2ZSBvbmx5IDMgYml0cyBmb3IgdGhlIG51bWJlciBvZiBmaW5nZXJzCi0JICogc3VwcG9ydGVkIC0gc28gdGhlIGVuY29kaW5nIGlzIGEgYml0IHdpZXJkLgorCSAqIHN1cHBvcnRlZCAtIHNvIHRoZSBlbmNvZGluZyBpcyBhIGJpdCB3ZWlyZC4KIAkgKi8KIAlpZiAoKHF1ZXJpZXNbMV0gJiBNQVNLXzNCSVQpIDw9IDQpCiAJCS8qIGFkZCAxIHNpbmNlIHplcm8gYmFzZWQgKi8KQEAgLTEwMjcsNyArMTAyNyw3IEBACiAgKiBzeW5hcHRpY3Nfcm1pNF9yZW1vdmUoKSAtIFJlbW92ZXMgdGhlIGkyYy1jbGllbnQgdG91Y2hzY3JlZW4gZHJpdmVyCiAgKiBAY2xpZW50OiBpMmMgY2xpZW50IHN0cnVjdHVyZSBwb2ludGVyCiAgKgotICogVGhpcyBmdW50aW9uIHVzZXMgdG8gcmVtb3ZlIHRoZSBpMmMtY2xpZW50CisgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgdG8gcmVtb3ZlIHRoZSBpMmMtY2xpZW50CiAgKiB0b3VjaHNjcmVlbiBkcml2ZXIgYW5kIHJldHVybnMgaW50ZWdlci4KICAqLwogc3RhdGljIGludCBfX2RldmV4aXQgc3luYXB0aWNzX3JtaTRfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCkBAIC0xMDUzLDcgKzEwNTMsNyBAQAogICogc3luYXB0aWNzX3JtaTRfc3VzcGVuZCgpIC0gc3VzcGVuZCB0aGUgdG91Y2ggc2NyZWVuIGNvbnRyb2xsZXIKICAqIEBkZXY6IHBvaW50ZXIgdG8gZGV2aWNlIHN0cnVjdHVyZQogICoKLSAqIFRoaXMgZnVudGlvbiBpcyB1c2VkIHRvIHN1c3BlbmQgdGhlCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc3VzcGVuZCB0aGUKICAqIHRvdWNoIHBhbmVsIGNvbnRyb2xsZXIgYW5kIHJldHVybnMgaW50ZWdlcgogICovCiBzdGF0aWMgaW50IHN5bmFwdGljc19ybWk0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMTA4OSw3ICsxMDg5LDcgQEAKICAqIHN5bmFwdGljc19ybWk0X3Jlc3VtZSgpIC0gcmVzdW1lIHRoZSB0b3VjaCBzY3JlZW4gY29udHJvbGxlcgogICogQGRldjogcG9pbnRlciB0byBkZXZpY2Ugc3RydWN0dXJlCiAgKgotICogVGhpcyBmdW50aW9uIGlzIHVzZWQgdG8gcmVzdW1lIHRoZSB0b3VjaCBwYW5lbAorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlc3VtZSB0aGUgdG91Y2ggcGFuZWwKICAqIGNvbnRyb2xsZXIgYW5kIHJldHVybnMgaW50ZWdlci4KICAqLwogc3RhdGljIGludCBzeW5hcHRpY3Nfcm1pNF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMTE0OCw3ICsxMTQ4LDcgQEAKIC8qKgogICogc3luYXB0aWNzX3JtaTRfaW5pdCgpIC0gSW5pdGlhbGl6ZSB0aGUgdG91Y2hzY3JlZW4gZHJpdmVyCiAgKgotICogVGhpcyBmdW50aW9uIHVzZXMgdG8gaW5pdGlhbGl6ZXMgdGhlIHN5bmFwdGljcworICogVGhpcyBmdW5jdGlvbiB1c2VzIHRvIGluaXRpYWxpemVzIHRoZSBzeW5hcHRpY3MKICAqIHRvdWNoc2NyZWVuIGRyaXZlciBhbmQgcmV0dXJucyBpbnRlZ2VyLgogICovCiBzdGF0aWMgaW50IF9faW5pdCBzeW5hcHRpY3Nfcm1pNF9pbml0KHZvaWQpCkBAIC0xMTU4LDcgKzExNTgsNyBAQAogLyoqCiAgKiBzeW5hcHRpY3Nfcm1pNF9leGl0KCkgLSBEZS1pbml0aWFsaXplIHRoZSB0b3VjaHNjcmVlbiBkcml2ZXIKICAqCi0gKiBUaGlzIGZ1bnRpb24gdXNlcyB0byBkZS1pbml0aWFsaXplIHRoZSBzeW5hcHRpY3MKKyAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0byBkZS1pbml0aWFsaXplIHRoZSBzeW5hcHRpY3MKICAqIHRvdWNoc2NyZWVuIGRyaXZlciBhbmQgcmV0dXJucyBub25lLgogICovCiBzdGF0aWMgdm9pZCBfX2V4aXQgc3luYXB0aWNzX3JtaTRfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvX3Rpb21hcC5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvX3Rpb21hcC5oCmluZGV4IDFlMDI3M2UuLjdjYjU4NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL190aW9tYXAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9fdGlvbWFwLmgKQEAgLTM2Niw3ICszNjYsNyBAQAogICogID09PT09PT09IHNtX2ludGVycnVwdF9kc3AgPT09PT09PT0KICAqICBQdXJwb3NlOgogICogICAgICBTZXQgaW50ZXJydXB0IHZhbHVlICYgc2VuZCBhbiBpbnRlcnJ1cHQgdG8gdGhlIERTUCBwcm9jZXNzb3IocykuCi0gKiAgICAgIFRoaXMgaXMgdHlwaWNhbHkgdXNlZCB3aGVuIG1haWxib3ggaW50ZXJydXB0IG1lY2hhbmlzbXMgYWxsb3cgZGF0YQorICogICAgICBUaGlzIGlzIHR5cGljYWxseSB1c2VkIHdoZW4gbWFpbGJveCBpbnRlcnJ1cHQgbWVjaGFuaXNtcyBhbGxvdyBkYXRhCiAgKiAgICAgIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBpbnRlcnJ1cHQgc3VjaCBhcyBmb3IgT01BUCdzIENNRC9EQVRBIHJlZ3MuCiAgKiAgUGFyYW1ldGVyczoKICAqICAgICAgZGV2X2NvbnRleHQ6ICAgIEhhbmRsZSB0byBCcmlkZ2UgZHJpdmVyIGRlZmluZWQgZGV2aWNlIGluZm8uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9jaG5sX3NtLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9jaG5sX3NtLmMKaW5kZXggODM4MTEzMC4uNmQ2NmU3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvY2hubF9zbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2Nobmxfc20uYwpAQCAtNTc4LDcgKzU3OCw3IEBACiAJCX0gZWxzZSBpZiAoc3RhdF9zeW5jID09IC1FUEVSTSkgewogCQkJLyogVGhpcyBjYW4gb2NjdXIgd2hlbiB0aGUgdXNlciBtb2RlIHRocmVhZCBpcwogCQkJICogYWJvcnRlZCAoXkMpLCBvciB3aGVuIF9WV0lOMzJfV2FpdFNpbmdsZU9iamVjdCgpCi0JCQkgKiBmYWlscyBkdWUgdG8gdW5rb3duIGNhdXNlcy4gKi8KKwkJCSAqIGZhaWxzIGR1ZSB0byB1bmtub3duIGNhdXNlcy4gKi8KIAkJCS8qIEV2ZW4gdGhvdWdoIFdhaXQgZmFpbGVkLCB0aGVyZSBtYXkgYmUgc29tZXRoaW5nIGluCiAJCQkgKiB0aGUgUTogKi8KIAkJCWlmIChsaXN0X2VtcHR5KCZwY2hubC0+aW9fY29tcGxldGlvbnMpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9jbG9hZC5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvY2xvYWQuYwppbmRleCAzOTAwNDA5Li5mZTFlZjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9jbG9hZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL2Nsb2FkLmMKQEAgLTcxOCw3ICs3MTgsNyBAQAogCSAqIGFzIGEgdGVtcG9yYXJ5IGZvciAuZGxsdmlldyByZWNvcmQgY29uc3RydWN0aW9uLgogCSAqIEFsbG9jYXRlIHN0b3JhZ2UgZm9yIHRoZSB3aG9sZSB0YWJsZS4gIEFkZCAxIHRvIHRoZSBzZWN0aW9uIGNvdW50CiAJICogaW4gY2FzZSBhIHRyYW1wb2xpbmUgc2VjdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBhcyB3ZWxsIGFzIHRoZQotCSAqIHNpemUgb2YgdGhlIHRyYW1wb2xpbmUgc2VjdGlvbiBuYW1lIHNvIERMTFZpZXcgZG9lbnMndCBnZXQgbG9zdC4KKwkgKiBzaXplIG9mIHRoZSB0cmFtcG9saW5lIHNlY3Rpb24gbmFtZSBzbyBETExWaWV3IGRvZXNuJ3QgZ2V0IGxvc3QuCiAJICovCiAKIAlzaXogPSBzeW1fY291bnQgKiBzaXplb2Yoc3RydWN0IGxvY2FsX3N5bWJvbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaHcvaHdfbW11LmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaHcvaHdfbW11LmMKaW5kZXggMDE0ZjVkNS4uYzIxNGRmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2h3L2h3X21tdS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ody9od19tbXUuYwpAQCAtNTksNyArNTksNyBAQAogICogUkVUVVJOUzoKICAqCiAgKiAgICAgICBUeXBlCQk6IGh3X3N0YXR1cwotICogICAgICAgRGVzY3JpcHRpb24gICAgIDogMAkJIC0tIE5vIGVycm9ycyBvY2N1cmVkCisgKiAgICAgICBEZXNjcmlwdGlvbiAgICAgOiAwCQkgLS0gTm8gZXJyb3JzIG9jY3VycmVkCiAgKgkJCSBSRVRfQkFEX05VTExfUEFSQU0gICAgIC0tIEEgUG9pbnRlcgogICoJCQkJCQlQYXJhbWF0ZXIgd2FzIHNldCB0byBOVUxMCiAgKgpAQCAtMTAyLDcgKzEwMiw3IEBACiAgKiBSRVRVUk5TOgogICoKICAqICAgICAgIFR5cGUJICAgIAk6IGh3X3N0YXR1cwotICogICAgICAgRGVzY3JpcHRpb24gICAgIDogMAkJIC0tIE5vIGVycm9ycyBvY2N1cmVkCisgKiAgICAgICBEZXNjcmlwdGlvbiAgICAgOiAwCQkgLS0gTm8gZXJyb3JzIG9jY3VycmVkCiAgKgkJCSBSRVRfQkFEX05VTExfUEFSQU0gICAgIC0tIEEgUG9pbnRlciBQYXJhbWF0ZXIKICAqCQkJCQkJICAgd2FzIHNldCB0byBOVUxMCiAgKgkJCSBSRVRfUEFSQU1fT1VUX09GX1JBTkdFIC0tIElucHV0IFBhcmFtZXRlciBvdXQKQEAgLTE0Nyw3ICsxNDcsNyBAQAogICogUkVUVVJOUzoKICAqCiAgKiAgICAgICBUeXBlCSAgICAJOiBod19zdGF0dXMKLSAqICAgICAgIERlc2NyaXB0aW9uICAgICA6IDAJCSAtLSBObyBlcnJvcnMgb2NjdXJlZAorICogICAgICAgRGVzY3JpcHRpb24gICAgIDogMAkJIC0tIE5vIGVycm9ycyBvY2N1cnJlZAogICoJCQkgUkVUX0JBRF9OVUxMX1BBUkFNICAgICAtLSBBIFBvaW50ZXIgUGFyYW1hdGVyCiAgKgkJCQkJCQl3YXMgc2V0IHRvIE5VTEwKICAqCQkJIFJFVF9QQVJBTV9PVVRfT0ZfUkFOR0UgLS0gSW5wdXQgUGFyYW1ldGVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvX2Nobmxfc20uaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9fY2hubF9zbS5oCmluZGV4IGQ2MGUyNTIuLjZlN2FiNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9fY2hubF9zbS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9fY2hubF9zbS5oCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAlzOCBjaG5sX21vZGU7CQkvKiBDaG5sIG1vZGUgYW5kIGF0dHJpYnV0ZXMgKi8KIAkvKiBDaG5sIEkvTyBjb21wbGV0aW9uIGV2ZW50ICh1c2VyIG1vZGUpICovCiAJdm9pZCAqdXNlcl9ldmVudDsKLQkvKiBBYnN0cmFjdCBzeW5jcm9uaXphdGlvbiBvYmplY3QgKi8KKwkvKiBBYnN0cmFjdCBzeW5jaHJvbml6YXRpb24gb2JqZWN0ICovCiAJc3RydWN0IHN5bmNfb2JqZWN0ICpzeW5jX2V2ZW50OwogCXUzMiBwcm9jZXNzOwkJLyogUHJvY2VzcyB3aGljaCBjcmVhdGVkIHRoaXMgY2hhbm5lbCAqLwogCXUzMiBjYl9hcmc7CQkvKiBBcmd1bWVudCB0byB1c2Ugd2l0aCBjYWxsYmFjayAqLwpAQCAtMTU2LDcgKzE1Niw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCBpb19jb21wbGV0aW9uczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfcGFja2V0c19saXN0OwkvKiBMaXN0IG9mIGZyZWUgSXJwcyAqLwogCXN0cnVjdCBudGZ5X29iamVjdCAqbnRmeV9vYmo7Ci0JdTMyIGJ5dGVzX21vdmVkOwkvKiBUb3RhbCBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJlZCAqLworCXUzMiBieXRlc19tb3ZlZDsJLyogVG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkICovCiAKIAkvKiBGb3IgRFNQLURNQSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY2xrLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY2xrLmgKaW5kZXggYjIzOTUwMy4uNjg1MzQxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Nsay5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jbGsuaApAQCAtNTUsNyArNTUsNyBAQAogICogICAgICBJbml0aWFsaXplcyBwcml2YXRlIHN0YXRlIG9mIENMSyBtb2R1bGUuCiAgKiAgUGFyYW1ldGVyczoKICAqICBSZXR1cm5zOgotICogICAgICBUUlVFIGlmIGluaXRpYWxpemVkOyBGQUxTRSBpZiBlcnJvciBvY2N1cmVkLgorICogICAgICBUUlVFIGlmIGluaXRpYWxpemVkOyBGQUxTRSBpZiBlcnJvciBvY2N1cnJlZC4KICAqICBSZXF1aXJlczoKICAqICBFbnN1cmVzOgogICogICAgICBDTEsgaW5pdGlhbGl6ZWQuCkBAIC03MSw3ICs3MSw3IEBACiAgKiAgUGFyYW1ldGVyczoKICAqICBSZXR1cm5zOgogICogICAgICAwOglTdWNjZXNzLgotICoJLUVQRVJNOglFcnJvciBvY2N1cmVkIHdoaWxlIGVuYWJsaW5nIHRoZSBjbG9jay4KKyAqCS1FUEVSTToJRXJyb3Igb2NjdXJyZWQgd2hpbGUgZW5hYmxpbmcgdGhlIGNsb2NrLgogICogIFJlcXVpcmVzOgogICogIEVuc3VyZXM6CiAgKi8KQEAgLTg2LDcgKzg2LDcgQEAKICAqICBQYXJhbWV0ZXJzOgogICogIFJldHVybnM6CiAgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgotICogICAgICAtRVBFUk06ICAgICAgRXJyb3Igb2NjdXJlZCB3aGlsZSBkaXNhYmxpbmcgdGhlIGNsb2NrLgorICogICAgICAtRVBFUk06ICAgICAgRXJyb3Igb2NjdXJyZWQgd2hpbGUgZGlzYWJsaW5nIHRoZSBjbG9jay4KICAqICBSZXF1aXJlczoKICAqICBFbnN1cmVzOgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY21tLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY21tLmgKaW5kZXggMjdhMjFiNS4uYWZmMjIwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NtbS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jbW0uaApAQCAtMTkwLDcgKzE5MCw3IEBACiAgKiAgICAgIEluaXRpYWxpemVzIHByaXZhdGUgc3RhdGUgb2YgQ01NIG1vZHVsZS4KICAqICBQYXJhbWV0ZXJzOgogICogIFJldHVybnM6Ci0gKiAgICAgIFRSVUUgaWYgaW5pdGlhbGl6ZWQ7IEZBTFNFIGlmIGVycm9yIG9jY3VyZWQuCisgKiAgICAgIFRSVUUgaWYgaW5pdGlhbGl6ZWQ7IEZBTFNFIGlmIGVycm9yIG9jY3VycmVkLgogICogIFJlcXVpcmVzOgogICogIEVuc3VyZXM6CiAgKiAgICAgIENNTSBpbml0aWFsaXplZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jb2QuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jb2QuaAppbmRleCA1M2JkNGJiLi5jYjY4NGMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY29kLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NvZC5oCkBAIC0yNDksNyArMjQ5LDcgQEAKICAqICBQYXJhbWV0ZXJzOgogICogICAgICBOb25lLgogICogIFJldHVybnM6Ci0gKiAgICAgIFRSVUUgaWYgaW5pdGlhbGl6ZWQ7IEZBTFNFIGlmIGVycm9yIG9jY3VyZWQuCisgKiAgICAgIFRSVUUgaWYgaW5pdGlhbGl6ZWQ7IEZBTFNFIGlmIGVycm9yIG9jY3VycmVkLgogICogIFJlcXVpcmVzOgogICogIEVuc3VyZXM6CiAgKiAgICAgIEEgcmVxdWlyZW1lbnQgZm9yIGVhY2ggb2YgdGhlIG90aGVyIHB1YmxpYyBDT0QgZnVuY3Rpb25zLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Rldi5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Rldi5oCmluZGV4IGY0MWU0NzguLmY5MmI0YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kZXYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGV2LmgKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogICogICAgICBJbml0aWFsaXplIERFVidzIHByaXZhdGUgc3RhdGUsIGtlZXBpbmcgYSByZWZlcmVuY2UgY291bnQgb24gZWFjaCBjYWxsLgogICogIFBhcmFtZXRlcnM6CiAgKiAgUmV0dXJuczoKLSAqICAgICAgVFJVRSBpZiBpbml0aWFsaXplZDsgRkFMU0UgaWYgZXJyb3Igb2NjdXJlZC4KKyAqICAgICAgVFJVRSBpZiBpbml0aWFsaXplZDsgRkFMU0UgaWYgZXJyb3Igb2NjdXJyZWQuCiAgKiAgUmVxdWlyZXM6CiAgKiAgRW5zdXJlczoKICAqICAgICAgVFJVRTogQSByZXF1aXJlbWVudCBmb3IgdGhlIG90aGVyIHB1YmxpYyBERVYgZnVuY3Rpb25zLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Rydi5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Rydi5oCmluZGV4IDI1ZWYxYTIuLjljZGJkOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kcnYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHJ2LmgKQEAgLTE1NCw3ICsxNTQsNyBAQAogICogIFBhcmFtZXRlcnM6CiAgKiAgICAgIGRydl9vYmo6ICAgICAgICBMb2NhdGlvbiB0byBzdG9yZSBjcmVhdGVkIERSViBPYmplY3QgaGFuZGxlLgogICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICBTdWNlc3MKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MKICAqICAgICAgLUVOT01FTTogICAgRmFpbGVkIGluIE1lbW9yeSBhbGxvY2F0aW9uCiAgKiAgICAgIC1FUEVSTTogICAgICBHZW5lcmFsIEZhaWx1cmUKICAqICBSZXF1aXJlczoKQEAgLTE3MCw3ICsxNzAsNyBAQAogICogICAgICBUaGVyZSBpcyBvbmUgRHJpdmVyIE9iamVjdCBmb3IgdGhlIERyaXZlciByZXByZXNlbnRpbmcKICAqICAgICAgdGhlIGRyaXZlciBpdHNlbGYuIEl0IGNvbnRhaW5zIHRoZSBsaXN0IG9mIGRldmljZQogICogICAgICBPYmplY3RzIGFuZCB0aGUgbGlzdCBvZiBEZXZpY2UgRXh0ZW5zaW9ucyBpbiB0aGUgc3lzdGVtLgotICogICAgICBBbHNvIGl0IGNhbiBob2xkIG90aGVyIG5lY2Nlc3NhcnkKKyAqICAgICAgQWxzbyBpdCBjYW4gaG9sZCBvdGhlciBuZWNlc3NhcnkKICAqICAgICAgaW5mb3JtYXRpb24gaW4gaXRzIHN0b3JhZ2UgYXJlYS4KICAqLwogZXh0ZXJuIGludCBkcnZfY3JlYXRlKHN0cnVjdCBkcnZfb2JqZWN0ICoqZHJ2X29iaik7CkBAIC0xODAsNyArMTgwLDcgQEAKICAqICBQdXJwb3NlOgogICogICAgICBkZXN0cm95cyB0aGUgRGV2IE9iamVjdCBsaXN0LCBEcnZFeHQgbGlzdAogICogICAgICBhbmQgZGVzdHJveSB0aGUgRFJWIG9iamVjdAotICogICAgICBDYWxsZWQgdXBvbiBkcml2ZXIgdW5Mb2FkaW5nLm9yIHVuc3VjY2VzZnVsIGxvYWRpbmcgb2YgdGhlIGRyaXZlci4KKyAqICAgICAgQ2FsbGVkIHVwb24gZHJpdmVyIHVuTG9hZGluZy5vciB1bnN1Y2Nlc3NmdWwgbG9hZGluZyBvZiB0aGUgZHJpdmVyLgogICogIFBhcmFtZXRlcnM6CiAgKiAgICAgIGRyaXZlcl9vYmo6ICAgICBIYW5kbGUgdG8gRHJpdmVyIG9iamVjdCAuCiAgKiAgUmV0dXJuczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3BkZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwZGVmcy5oCmluZGV4IGMyYmEyNmMuLmVkMzJiZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3BkZWZzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGRlZnMuaApAQCAtNTIsNyArNTIsNyBAQAogICogICAgICBkZXZfY3R4dDogICAgSGFuZGxlIHRvIEJyaWRnZSBkcml2ZXIgZGVmaW5lZCBkZXZpY2UgY29udGV4dC4KICAqICBSZXR1cm5zOgogICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KLSAqICAgICAgLUVUSU1FRE9VVDogIFRpbWVvdXQgb2NjdXJlZCB3YWl0aW5nIGZvciBhIHJlc3BvbnNlIGZyb20gaGFyZHdhcmUuCisgKiAgICAgIC1FVElNRURPVVQ6ICBUaW1lb3V0IG9jY3VycmVkIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgZnJvbSBoYXJkd2FyZS4KICAqICAgICAgLUVQRVJNOiAgICAgIE90aGVyLCB1bnNwZWNpZmllZCBlcnJvci4KICAqICBSZXF1aXJlczoKICAqICAgICAgZGV2X2N0eHQgIT0gTlVMTApAQCAtOTEsNyArOTEsNyBAQAogICogICAgICBkc3BfYWRkcjogICAgICAgRFNQIGFkZHJlc3MgYXQgd2hpY2ggdG8gc3RhcnQgZXhlY3V0aW9uLgogICogIFJldHVybnM6CiAgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgotICogICAgICAtRVRJTUVET1VUOiAgVGltZW91dCBvY2N1cmVkIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgZnJvbSBoYXJkd2FyZS4KKyAqICAgICAgLUVUSU1FRE9VVDogIFRpbWVvdXQgb2NjdXJyZWQgd2FpdGluZyBmb3IgYSByZXNwb25zZSBmcm9tIGhhcmR3YXJlLgogICogICAgICAtRVBFUk06ICAgICAgT3RoZXIsIHVuc3BlY2lmaWVkIGVycm9yLgogICogIFJlcXVpcmVzOgogICogICAgICBkZXZfY3R4dCAhPSBOVUxMCkBAIC0xNDIsNyArMTQyLDcgQEAKICAqICAgICAgbWVtX3R5cGU6ICAgICAgIE1lbW9yeSBzcGFjZSBvbiBEU1AgdG8gd2hpY2ggdG8gdHJhbnNmZXIuCiAgKiAgUmV0dXJuczoKICAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FVElNRURPVVQ6ICBUaW1lb3V0IG9jY3VyZWQgd2FpdGluZyBmb3IgYSByZXNwb25zZSBmcm9tIGhhcmR3YXJlLgorICogICAgICAtRVRJTUVET1VUOiAgVGltZW91dCBvY2N1cnJlZCB3YWl0aW5nIGZvciBhIHJlc3BvbnNlIGZyb20gaGFyZHdhcmUuCiAgKiAgICAgIC1FUEVSTTogICAgICBPdGhlciwgdW5zcGVjaWZpZWQgZXJyb3IuCiAgKiAgUmVxdWlyZXM6CiAgKiAgICAgIGRldl9jdHh0ICE9IE5VTEw7CkBAIC0yMDUsNyArMjA1LDcgQEAKICAqICAgICAgZGV2X2N0eHQ6ICAgIEhhbmRsZSB0byBCcmlkZ2UgZHJpdmVyIGRlZmluZWQgZGV2aWNlIGNvbnRleHQuCiAgKiAgUmV0dXJuczoKICAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCi0gKiAgICAgIC1FVElNRURPVVQ6ICBUaW1lb3V0IG9jY3VyZWQgd2FpdGluZyBmb3IgYSByZXNwb25zZSBmcm9tIGhhcmR3YXJlLgorICogICAgICAtRVRJTUVET1VUOiAgVGltZW91dCBvY2N1cnJlZCB3YWl0aW5nIGZvciBhIHJlc3BvbnNlIGZyb20gaGFyZHdhcmUuCiAgKiAgICAgIC1FUEVSTTogICAgICBPdGhlciwgdW5zcGVjaWZpZWQgZXJyb3IuCiAgKiAgUmVxdWlyZXM6CiAgKiAgICAgIGRldl9jdHh0ICE9IE5VTEwKQEAgLTI0OCw3ICsyNDgsNyBAQAogICogICAgICBtZW1fdHlwZTogICAgICAgTWVtb3J5IHNwYWNlIG9uIERTUCBmcm9tIHdoaWNoIHRvIHRyYW5zZmVyLgogICogIFJldHVybnM6CiAgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgotICogICAgICAtRVRJTUVET1VUOiAgVGltZW91dCBvY2N1cmVkIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgZnJvbSBoYXJkd2FyZS4KKyAqICAgICAgLUVUSU1FRE9VVDogIFRpbWVvdXQgb2NjdXJyZWQgd2FpdGluZyBmb3IgYSByZXNwb25zZSBmcm9tIGhhcmR3YXJlLgogICogICAgICAtRVBFUk06ICAgICAgT3RoZXIsIHVuc3BlY2lmaWVkIGVycm9yLgogICogIFJlcXVpcmVzOgogICogICAgICBkZXZfY3R4dCAhPSBOVUxMOwpAQCAtMjc0LDcgKzI3NCw3IEBACiAgKiAgICAgIG1lbV90eXBlOiAgICAgICBNZW1vcnkgc3BhY2Ugb24gRFNQIHRvIHdoaWNoIHRvIHRyYW5zZmVyLgogICogIFJldHVybnM6CiAgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgotICogICAgICAtRVRJTUVET1VUOiAgVGltZW91dCBvY2N1cmVkIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgZnJvbSBoYXJkd2FyZS4KKyAqICAgICAgLUVUSU1FRE9VVDogIFRpbWVvdXQgb2NjdXJyZWQgd2FpdGluZyBmb3IgYSByZXNwb25zZSBmcm9tIGhhcmR3YXJlLgogICogICAgICAtRVBFUk06ICAgICAgT3RoZXIsIHVuc3BlY2lmaWVkIGVycm9yLgogICogIFJlcXVpcmVzOgogICogICAgICBkZXZfY3R4dCAhPSBOVUxMOwpAQCAtNjAxLDcgKzYwMSw3IEBACiAgKiAgUmV0dXJuczoKICAqICAgICAgMDogICAgICAgICAgICBTdWNjZXNzOwogICogICAgICAtRUZBVUxUOiAgICAgICAgSW52YWxpZCBjaG5sX29iai4KLSAqICAgICAgLUVUSU1FRE9VVDogVGltZW91dCBvY2N1cmVkIGJlZm9yZSBjaGFubmVsIGNvdWxkIGJlIGlkbGVkLgorICogICAgICAtRVRJTUVET1VUOiBUaW1lb3V0IG9jY3VycmVkIGJlZm9yZSBjaGFubmVsIGNvdWxkIGJlIGlkbGVkLgogICogIFJlcXVpcmVzOgogICogIEVuc3VyZXM6CiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9tZ3IuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9tZ3IuaAppbmRleCBlNTA2YzRkLi40N2IwMzE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbWdyLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL21nci5oCkBAIC0xNzYsNyArMTc2LDcgQEAKICAqICAgICAgbWdyX2hhbmRsZTogICAgIEhhbmRsZSB0byB0aGUgTWFuYWdlciBPYmplY3QKICAqICAgICAgZGNkX2hhbmRsZTogICAgIFB0ciB0byByZWNlaXZlIHRoZSBEQ0QgSGFuZGxlLgogICogIFJldHVybnM6Ci0gKiAgICAgIDA6ICAgICAgICBTdWNlc3MKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MKICAqICAgICAgLUVQRVJNOiAgICAgIEZhaWx1cmUgdG8gZ2V0IHRoZSBIYW5kbGUKICAqICBSZXF1aXJlczoKICAqICAgICAgTUdSIGlzIGluaXRpYWxpemVkLgpAQCAtMTk1LDcgKzE5NSw3IEBACiAgKiAgICAgIGNhbGwuIEluaXRpYWxpemVzIHRoZSBEQ0QuCiAgKiAgUGFyYW1ldGVyczoKICAqICBSZXR1cm5zOgotICogICAgICBUUlVFIGlmIGluaXRpYWxpemVkOyBGQUxTRSBpZiBlcnJvciBvY2N1cmVkLgorICogICAgICBUUlVFIGlmIGluaXRpYWxpemVkOyBGQUxTRSBpZiBlcnJvciBvY2N1cnJlZC4KICAqICBSZXF1aXJlczoKICAqICBFbnN1cmVzOgogICogICAgICBUUlVFOiBBIHJlcXVpcmVtZW50IGZvciB0aGUgb3RoZXIgcHVibGljIE1HUiBmdW5jdGlvbnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvbm9kZS5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL25vZGUuaAppbmRleCA1M2RhMGVmLi4xNjM3MWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvbm9kZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ub2RlLmgKQEAgLTQ0LDcgKzQ0LDcgQEAKICAqICAgICAgLUVTUElQRTogICAgICAgIGlBbGcgZnVuY3Rpb25zIG5vdCBmb3VuZCBmb3IgYSBEQUlTIG5vZGUuCiAgKiAgICAgIC1FRE9NOiAgICAgICAgIGF0dHJfaW4gIT0gTlVMTCBhbmQgYXR0cl9pbi0+cHJpbyBvdXQgb2YKICAqICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZS4KLSAqICAgICAgLUVQRVJNOiAgICAgICAgICBBIGZhaWx1cmUgb2NjdXJlZCwgdW5hYmxlIHRvIGFsbG9jYXRlIG5vZGUuCisgKiAgICAgIC1FUEVSTTogICAgICAgICAgQSBmYWlsdXJlIG9jY3VycmVkLCB1bmFibGUgdG8gYWxsb2NhdGUgbm9kZS4KICAqICAgICAgLUVCQURSOiAgICBQcm9jY2Vzc29yIGlzIG5vdCBpbiB0aGUgcnVubmluZyBzdGF0ZS4KICAqICBSZXF1aXJlczoKICAqICAgICAgbm9kZV9pbml0KHZvaWQpIGNhbGxlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9wcm9jLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvcHJvYy5oCmluZGV4IDVlMDlmZDEuLmYwMGRmZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9wcm9jLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3Byb2MuaApAQCAtODksNyArODksNyBAQAogICogIFJldHVybnM6CiAgKiAgICAgIDAgICAgIDogICAgICAgU1VDQ0VTUwogICogICAgICAtRUZBVUxUIDogICAgICAgSW52YWxpZCBwcm9jZXNzb3IgaGFuZGxlLgotICogICAgICAtRVRJTUU6ICAgICAgIEEgVGltZW91dCBPY2N1cmVkIGJlZm9yZSB0aGUgQ29udHJvbCBpbmZvcm1hdGlvbgorICogICAgICAtRVRJTUU6ICAgICAgIEEgVGltZW91dCBPY2N1cnJlZCBiZWZvcmUgdGhlIENvbnRyb2wgaW5mb3JtYXRpb24KICAqCQkJICBjb3VsZCBiZSBzZW50LgogICogICAgICAtRVBFUk0gICA6ICAgICAgIEdlbmVyYWwgRmFpbHVyZS4KICAqICBSZXF1aXJlczoKQEAgLTE2OSw3ICsxNjksNyBAQAogICogICAgICAwICAgICA6ICAgICAgIFN1Y2Nlc3MuCiAgKiAgICAgIC1FRkFVTFQgOiAgICAgICBJbnZhbGlkIHByb2Nlc3NvciBoYW5kbGUuCiAgKiAgICAgIC1FQkFEUjogICAgVGhlIHByb2Nlc3NvciBpcyBub3QgaW4gdGhlIFBST0NfUlVOTklORyBzdGF0ZS4KLSAqICAgICAgLUVUSU1FOiAgICAgICBBIHRpbWVvdXQgb2NjdXJlZCBiZWZvcmUgdGhlIERTUCByZXNwb25kZWQgdG8gdGhlCisgKiAgICAgIC1FVElNRTogICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGJlZm9yZSB0aGUgRFNQIHJlc3BvbmRlZCB0byB0aGUKICAqCQkJICBxdWVycnkuCiAgKiAgICAgIC1FUEVSTSAgIDogICAgICAgVW5hYmxlIHRvIGdldCBSZXNvdXJjZSBJbmZvcm1hdGlvbgogICogIFJlcXVpcmVzOgpAQCAtMjI5LDcgKzIyOSw3IEBACiAgKiAgICAgIGNhbGwuCiAgKiAgUGFyYW1ldGVyczoKICAqICBSZXR1cm5zOgotICogICAgICBUUlVFIGlmIGluaXRpYWxpemVkOyBGQUxTRSBpZiBlcnJvciBvY2N1cmVkLgorICogICAgICBUUlVFIGlmIGluaXRpYWxpemVkOyBGQUxTRSBpZiBlcnJvciBvY2N1cnJlZC4KICAqICBSZXF1aXJlczoKICAqICBFbnN1cmVzOgogICogICAgICBUUlVFOiBBIHJlcXVpcmVtZW50IGZvciB0aGUgb3RoZXIgcHVibGljIFBST0MgZnVuY3Rpb25zLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3B3ci5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3B3ci5oCmluZGV4IDVlM2FiMjEuLjBmYjA2NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9wd3IuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvcHdyLmgKQEAgLTQ2LDcgKzQ2LDcgQEAKICAqICAgICAgMDogICAgICAgICAgICBTdWNjZXNzLgogICogICAgICAwOiBTdWNjZXNzLCBidXQgdGhlIERTUCB3YXMgYWxyZWFkeSBhc2xlZXAuCiAgKiAgICAgIC1FSU5WQUw6ICAgIFRoZSBzcGVjaWZpZWQgc2xlZXBfY29kZSBpcyBub3Qgc3VwcG9ydGVkLgotICogICAgICAtRVRJTUU6ICAgICAgIEEgdGltZW91dCBvY2N1cmVkIHdoaWxlIHdhaXRpbmcgZm9yIERTUCBzbGVlcAorICogICAgICAtRVRJTUU6ICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCB3aGlsZSB3YWl0aW5nIGZvciBEU1Agc2xlZXAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtYXRpb24uCiAgKiAgICAgIC1FUEVSTTogICAgICAgICAgR2VuZXJhbCBmYWlsdXJlLCB1bmFibGUgdG8gc2VuZCBzbGVlcCBjb21tYW5kIHRvCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIERTUC4KQEAgLTY3LDcgKzY3LDcgQEAKICAqICBSZXR1cm5zOgogICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCiAgKiAgICAgIDA6ICBTdWNjZXNzLCBidXQgdGhlIERTUCB3YXMgYWxyZWFkeSBhd2FrZS4KLSAqICAgICAgLUVUSU1FOiAgICAgICBBIHRpbWVvdXQgb2NjdXJlZCB3aGlsZSB3YWl0aW5nIGZvciB3YWtlCisgKiAgICAgIC1FVElNRTogICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIHdoaWxlIHdhaXRpbmcgZm9yIHdha2UKICAqICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtYXRpb24uCiAgKiAgICAgIC1FUEVSTTogICAgICAgICAgR2VuZXJhbCBmYWlsdXJlLCB1bmFibGUgdG8gc2VuZCB3YWtlIGNvbW1hbmQgdG8KICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgRFNQLgpAQCAtODUsNyArODUsNyBAQAogICogIFJldHVybnM6CiAgKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2Vzcy4KICAqICAgICAgMDogIFN1Y2Nlc3MsIGJ1dCB0aGUgRFNQIHdhcyBhbHJlYWR5IGF3YWtlLgotICogICAgICAtRVRJTUU6ICAgICAgIEEgdGltZW91dCBvY2N1cmVkIHdoaWxlIHdhaXRpbmcgZm9yIHdha2UKKyAqICAgICAgLUVUSU1FOiAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgd2hpbGUgd2FpdGluZyBmb3Igd2FrZQogICogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1hdGlvbi4KICAqICAgICAgLUVQRVJNOiAgICAgICAgICBHZW5lcmFsIGZhaWx1cmUsIHVuYWJsZSB0byBzZW5kIHdha2UgY29tbWFuZCB0bwogICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBEU1AuCkBAIC0xMDMsNyArMTAzLDcgQEAKICAqICBSZXR1cm5zOgogICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCiAgKiAgICAgIDA6ICBTdWNjZXNzLCBidXQgdGhlIERTUCB3YXMgYWxyZWFkeSBhd2FrZS4KLSAqICAgICAgLUVUSU1FOiAgICAgICBBIHRpbWVvdXQgb2NjdXJlZCB3aGlsZSB3YWl0aW5nIGZvciB3YWtlCisgKiAgICAgIC1FVElNRTogICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIHdoaWxlIHdhaXRpbmcgZm9yIHdha2UKICAqICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtYXRpb24uCiAgKiAgICAgIC1FUEVSTTogICAgICAgICAgR2VuZXJhbCBmYWlsdXJlLCB1bmFibGUgdG8gc2VuZCB3YWtlIGNvbW1hbmQgdG8KICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgRFNQLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvZGV2LmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9kZXYuYwppbmRleCA5YTM4ZDg2Li41MjI4MTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9kZXYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9kZXYuYwpAQCAtNzg3LDcgKzc4Nyw3IEBACiAKIAkvKgogCSAqIEZJWE1FOiB0aGlzIGNvZGUgbmVlZHMgc3RydWN0IHByb2Nfb2JqZWN0IHRvIGhhdmUgYSBsaXN0X2hlYWQKLQkgKiBhdCB0aGUgYmVnaW5pbmcuIElmIG5vdCwgdGhpcyBjYW4gZ28gaG9ycmlibHkgd3JvbmcuCisJICogYXQgdGhlIGJlZ2lubmluZy4gSWYgbm90LCB0aGlzIGNhbiBnbyBob3JyaWJseSB3cm9uZy4KIAkgKi8KIAlsaXN0X2Zvcl9lYWNoKGN1cnIsICZkZXZfb2JqLT5wcm9jX2xpc3QpCiAJCXByb2Nfbm90aWZ5X2NsaWVudHMoKHZvaWQgKiljdXJyLCByZXQpOwpAQCAtODEwLDcgKzgxMCw3IEBACiAJaWYgKCFkZXZfbm9kZV9vYmopCiAJCXN0YXR1cyA9IC1FRkFVTFQ7CiAKLQkvKiBSZXRyaWV2ZSB0aGUgZGV2aWNlIG9iamVjdCBoYW5kbGUgb3JpZ2luYWx5IHN0b3JlZCB3aXRoCisJLyogUmV0cmlldmUgdGhlIGRldmljZSBvYmplY3QgaGFuZGxlIG9yaWdpbmFsbHkgc3RvcmVkIHdpdGgKIAkgKiB0aGUgZGV2X25vZGU6ICovCiAJaWYgKCFzdGF0dXMpIHsKIAkJLyogY2hlY2sgdGhlIGRldmljZSBzdHJpbmcgYW5kIHRoZW4gc3RvcmUgZGV2IG9iamVjdCAqLwpAQCAtOTg2LDcgKzk4Niw3IEBACiAJLyogQWRkIERldk9iamVjdCB0byB0YWlsLiAqLwogCS8qCiAJICogRklYTUU6IHRoaXMgY29kZSBuZWVkcyBzdHJ1Y3QgcHJvY19vYmplY3QgdG8gaGF2ZSBhIGxpc3RfaGVhZAotCSAqIGF0IHRoZSBiZWdpbmluZy4gSWYgbm90LCB0aGlzIGNhbiBnbyBob3JyaWJseSB3cm9uZy4KKwkgKiBhdCB0aGUgYmVnaW5uaW5nLiBJZiBub3QsIHRoaXMgY2FuIGdvIGhvcnJpYmx5IHdyb25nLgogCSAqLwogCWxpc3RfYWRkX3RhaWwoKHN0cnVjdCBsaXN0X2hlYWQgKilwcm9jX29iaiwgJmRldl9vYmotPnByb2NfbGlzdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZHJ2LmMKaW5kZXggOGM4ODU4My4uZGI4MjE1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZHJ2LmMKQEAgLTYwOSw3ICs2MDksNyBAQAogCURCQ19SRVFVSVJFKGRldl9ub2RlX3N0cmcgIT0gTlVMTCk7CiAKIAkvKgotCSAqICBBbGxvY2F0ZSBtZW1vcnkgdG8gaG9sZCB0aGUgc3RyaW5nLiBUaGlzIHdpbGwgbGl2ZSB1bnRpbGwKKwkgKiAgQWxsb2NhdGUgbWVtb3J5IHRvIGhvbGQgdGhlIHN0cmluZy4gVGhpcyB3aWxsIGxpdmUgdW50aWwKIAkgKiAgaXQgaXMgZnJlZWQgaW4gdGhlIFJlbGVhc2UgcmVzb3VyY2VzLiBVcGRhdGUgdGhlIGRyaXZlciBvYmplY3QKIAkgKiAgbGlzdC4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL25sZHIuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL25sZHIuYwppbmRleCBmYjVjMmJhLi4wZTcwY2JhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9ubGRyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3Ivbmxkci5jCkBAIC01Nyw5ICs1Nyw5IEBACiAgKiAgIHV1dXV1dXV1fGZ1ZWVlZWVlfGZ1ZGRkZGRkfGZ1Y2NjY2NjfAogICogIHdoZXJlCiAgKiAgICAgIHUgPSB1bnVzZWQKLSAqICAgICAgY2NjY2NjID0gcHJlZmVyZWQvcmVxdWlyZWQgZHluYW1pYyBtZW0gc2VnaWQgZm9yIGNyZWF0ZSBwaGFzZSBkYXRhL2NvZGUKLSAqICAgICAgZGRkZGRkID0gcHJlZmVyZWQvcmVxdWlyZWQgZHluYW1pYyBtZW0gc2VnaWQgZm9yIGRlbGV0ZSBwaGFzZSBkYXRhL2NvZGUKLSAqICAgICAgZWVlZWVlID0gcHJlZmVyZWQvcmVxLiBkeW5hbWljIG1lbSBzZWdpZCBmb3IgZXhlY3V0ZSBwaGFzZSBkYXRhL2NvZGUKKyAqICAgICAgY2NjY2NjID0gcHJlZmVycmVkL3JlcXVpcmVkIGR5bmFtaWMgbWVtIHNlZ2lkIGZvciBjcmVhdGUgcGhhc2UgZGF0YS9jb2RlCisgKiAgICAgIGRkZGRkZCA9IHByZWZlcnJlZC9yZXF1aXJlZCBkeW5hbWljIG1lbSBzZWdpZCBmb3IgZGVsZXRlIHBoYXNlIGRhdGEvY29kZQorICogICAgICBlZWVlZWUgPSBwcmVmZXJyZWQvcmVxLiBkeW5hbWljIG1lbSBzZWdpZCBmb3IgZXhlY3V0ZSBwaGFzZSBkYXRhL2NvZGUKICAqICAgICAgZiA9IGZsYWcgaW5kaWNhdGluZyBpZiBtZW1vcnkgaXMgcHJlZmVycmVkIG9yIHJlcXVpcmVkOgogICoJICBmID0gMSBpZiByZXF1aXJlZCwgZiA9IDAgaWYgcHJlZmVycmVkLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL3Byb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL3Byb2MuYwppbmRleCBjNGU1YzRlLi4yNDJkZDEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9wcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvcHJvYy5jCkBAIC0xNjcwLDcgKzE2NzAsNyBAQAogCWlmICghc3RhdHVzKSB7CiAJCWRldl9kYmcoYnJpZGdlLCAiJXM6IHByb2Nlc3NvciBpbiBzdGFuZGJ5IG1vZGVcbiIsIF9fZnVuY19fKTsKIAkJcF9wcm9jX29iamVjdC0+cHJvY19zdGF0ZSA9IFBST0NfU1RPUFBFRDsKLQkJLyogRGVzdG9yeSB0aGUgTm9kZSBNYW5hZ2VyLCBtc2dfY3RybCBNYW5hZ2VyICovCisJCS8qIERlc3Ryb3kgdGhlIE5vZGUgTWFuYWdlciwgbXNnX2N0cmwgTWFuYWdlciAqLwogCQlpZiAoIShkZXZfZGVzdHJveTIocF9wcm9jX29iamVjdC0+ZGV2X29iaikpKSB7CiAJCQkvKiBEZXN0cm95IHRoZSBtc2dfY3RybCBieSBjYWxsaW5nIG1zZ19kZWxldGUgKi8KIAkJCWRldl9nZXRfbXNnX21ncihwX3Byb2Nfb2JqZWN0LT5kZXZfb2JqLCAmaG1zZ19tZ3IpOwpAQCAtMTgyNyw3ICsxODI3LDcgQEAKIAogCS8qIFRoaXMgaXMgbmVlZGVkIG9ubHkgd2hlbiBEZXZpY2UgaXMgbG9hZGVkIHdoZW4gaXQgaXMKIAkgKiBhbHJlYWR5ICdBQ1RJVkUnICovCi0JLyogRGVzdG9yeSB0aGUgTm9kZSBNYW5hZ2VyLCBtc2dfY3RybCBNYW5hZ2VyICovCisJLyogRGVzdHJveSB0aGUgTm9kZSBNYW5hZ2VyLCBtc2dfY3RybCBNYW5hZ2VyICovCiAJaWYgKCFkZXZfZGVzdHJveTIocHJvY19vYmotPmRldl9vYmopKSB7CiAJCS8qIERlc3Ryb3kgdGhlIG1zZ19jdHJsIGJ5IGNhbGxpbmcgbXNnX2RlbGV0ZSAqLwogCQlkZXZfZ2V0X21zZ19tZ3IocHJvY19vYmotPmRldl9vYmosICZobXNnX21ncik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL3RtNjAwMC12aWRlby5jIGIvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtdmlkZW8uYwppbmRleCBjODBhMzE2Li4xN2RiNjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL3RtNjAwMC12aWRlby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvdG02MDAwLXZpZGVvLmMKQEAgLTE4Miw3ICsxODIsNyBAQAogCWlmICghYnVmKQogCQlyZXR1cm47CiAKLQkvKiBDbGVhbnMgdXAgYnVmZmVyIC0gVXNlZnVsbCBmb3IgdGVzdGluZyBmb3IgZnJhbWUvVVJCIGxvc3MgKi8KKwkvKiBDbGVhbnMgdXAgYnVmZmVyIC0gVXNlZnVsIGZvciB0ZXN0aW5nIGZvciBmcmFtZS9VUkIgbG9zcyAqLwogCW91dHAgPSB2aWRlb2J1Zl90b192bWFsbG9jKCYoKmJ1ZiktPnZiKTsKIAogCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90dHkvY2QxODY1LmggYi9kcml2ZXJzL3N0YWdpbmcvdHR5L2NkMTg2NS5oCmluZGV4IDk5NDA5NjYuLjhjMmFkNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90dHkvY2QxODY1LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3R0eS9jZDE4NjUuaApAQCAtOSw3ICs5LDcgQEAKICAqICAgICAgUGxlYXNlIERPIGNvbnRhY3QgaW84LWxpbnV4QHNwZWNpYWxpeC5jby51ayBpZiB5b3UgcmVxdWlyZQogICogICAgICBzdXBwb3J0LgogICoKLSAqICAgICAgVGhpcyBkcml2ZXIgd2FzIGRldmVsb3BwZWQgaW4gdGhlIEJpdFdpemFyZCBsaW51eCBkZXZpY2UKKyAqICAgICAgVGhpcyBkcml2ZXIgd2FzIGRldmVsb3BlZCBpbiB0aGUgQml0V2l6YXJkIGxpbnV4IGRldmljZQogICogICAgICBkcml2ZXIgc2VydmljZS4gSWYgeW91IHJlcXVpcmUgYSBsaW51eCBkZXZpY2UgZHJpdmVyIGZvciB5b3VyCiAgKiAgICAgIHByb2R1Y3QsIHBsZWFzZSBjb250YWN0IGRldmljZXNAQml0V2l6YXJkLm5sIGZvciBhIHF1b3RlLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90dHkvZXBjYS5jIGIvZHJpdmVycy9zdGFnaW5nL3R0eS9lcGNhLmMKaW5kZXggN2FkMzYzOC4uN2YxMzY5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3R0eS9lcGNhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3R0eS9lcGNhLmMKQEAgLTcsNyArNyw3IEBACiAJKiogVGhpcyBkcml2ZXIgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBEaWdpICoqCiAKIAlNdWNoIG9mIHRoaXMgZGVzaWduIGFuZCBjb2RlIGNhbWUgZnJvbSBlcGNhLmMgd2hpY2ggd2FzCi0JY29weXJpZ2h0IChDKSAxOTk0LCAxOTk1IFRyb3kgRGUgSm9uZ2gsIGFuZCBzdWJzcXVlbnRseQorCWNvcHlyaWdodCAoQykgMTk5NCwgMTk5NSBUcm95IERlIEpvbmdoLCBhbmQgc3Vic2VxdWVudGx5CiAJbW9kaWZpZWQgYnkgRGF2aWQgTnVnZW50LCBDaHJpc3RvcGggTGFtZXRlciwgTWlrZSBNY0xhZ2FuLgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTQ3MSw3ICs0NzEsNyBAQAogCW1lbW9mZihjaCk7CiAKIAkvKgotCSAqIFRoZSBjaGFubmVsIGhhcyBvZmZpY2lhbHkgYmVlbiBjbG9zZWQuIFRoZSBuZXh0IHRpbWUgaXQgaXMgb3BlbmVkIGl0CisJICogVGhlIGNoYW5uZWwgaGFzIG9mZmljaWFsbHkgYmVlbiBjbG9zZWQuIFRoZSBuZXh0IHRpbWUgaXQgaXMgb3BlbmVkIGl0CiAJICogd2lsbCBoYXZlIHRvIHJlaW5pdGlhbGl6ZWQuIFNldCBhIGZsYWcgdG8gaW5kaWNhdGUgdGhpcy4KIAkgKi8KIAkvKiBQcmV2ZW50IGZ1dHVyZSBEaWdpIHByb2dyYW1tZWQgaW50ZXJydXB0cyBmcm9tIGNvbWluZyBhY3RpdmUgKi8KQEAgLTk3NSw3ICs5NzUsNyBAQAogCiAJLyoKIAkgKiBOb3RlIDogSWYgbGlsbyB3YXMgdXNlZCB0byBjb25maWd1cmUgdGhlIGRyaXZlciBhbmQgdGhlIGlnbm9yZQotCSAqIGVwY2Fjb25maWcgb3B0aW9uIHdhcyBjaG9vc2VuIChkaWdpZXBjYT0yKSB0aGVuIG5iZGV2cyBhbmQgbnVtX2NhcmRzCisJICogZXBjYWNvbmZpZyBvcHRpb24gd2FzIGNob3NlbiAoZGlnaWVwY2E9MikgdGhlbiBuYmRldnMgYW5kIG51bV9jYXJkcwogCSAqIHdpbGwgZXF1YWwgMCBhdCB0aGlzIHBvaW50LiBUaGlzIGlzIG9rYXk7IFBDSSBjYXJkcyB3aWxsIHN0aWxsIGJlCiAJICogcGlja2VkIHVwIGlmIGRldGVjdGVkLgogCSAqLwpAQCAtMTIzMCwxNCArMTIzMCwxNCBAQAogCW1lbWFkZHIgPSBiZC0+cmVfbWFwX21lbWJhc2U7CiAKIAkvKgotCSAqIFRoZSBiZWxvdyBhc3NpZ25tZW50IHdpbGwgc2V0IGJjIHRvIHBvaW50IGF0IHRoZSBCRUdJTklORyBvZiB0aGUKKwkgKiBUaGUgYmVsb3cgYXNzaWdubWVudCB3aWxsIHNldCBiYyB0byBwb2ludCBhdCB0aGUgQkVHSU5OSU5HIG9mIHRoZQogCSAqIGNhcmRzIGNoYW5uZWwgc3RydWN0dXJlcy4gRm9yIDEgY2FyZCB0aGVyZSB3aWxsIGJlIGJldHdlZW4gOCBhbmQgNjQKIAkgKiBvZiB0aGVzZSBzdHJ1Y3R1cmVzLgogCSAqLwogCWJjID0gbWVtYWRkciArIENIQU5TVFJVQ1Q7CiAKIAkvKgotCSAqIFRoZSBiZWxvdyBhc3NpZ25tZW50IHdpbGwgc2V0IGdkIHRvIHBvaW50IGF0IHRoZSBCRUdJTklORyBvZiBnbG9iYWwKKwkgKiBUaGUgYmVsb3cgYXNzaWdubWVudCB3aWxsIHNldCBnZCB0byBwb2ludCBhdCB0aGUgQkVHSU5OSU5HIG9mIGdsb2JhbAogCSAqIG1lbW9yeSBhZGRyZXNzIDB4YzAwLiBUaGUgZmlyc3QgZGF0YSBpbiB0aGF0IGdsb2JhbCBtZW1vcnkgYWN0dWFsbHkKIAkgKiBzdGFydHMgYXQgYWRkcmVzcyAweGMxYS4gVGhlIGNvbW1hbmQgaW4gcG9pbnRlciBiZWdpbnMgYXQgMHhkMTAuCiAJICovCkBAIC0xNDkyLDcgKzE0OTIsNyBAQAogCQkvKgogCQkgKiBUaGUgdHdvIGFzc2lnbm1lbnRzIGJlbG93IGdldCB0aGUgY3VycmVudCBtb2RlbSBzdGF0dXMKIAkJICogKG1zdGF0KSBhbmQgdGhlIHByZXZpb3VzIG1vZGVtIHN0YXR1cyAobHN0YXQpLiBUaGVzZSBhcmUKLQkJICogdXNlZnVsIGJlY3Vhc2UgYW4gZXZlbnQgY291bGQgc2lnbmFsIGEgY2hhbmdlIGluIG1vZGVtCisJCSAqIHVzZWZ1bCBiZWNhdXNlIGFuIGV2ZW50IGNvdWxkIHNpZ25hbCBhIGNoYW5nZSBpbiBtb2RlbQogCQkgKiBzaWduYWxzIGl0c2VsZi4KIAkJICovCiAJCW1zdGF0ID0gcmVhZGIoZXZlbnRidWYgKyAyKTsKQEAgLTE4OTcsNyArMTg5Nyw3IEBACiAJCS8qCiAJCSAqIEV2ZW4gaWYgaGVhZCBoYXMgd3JhcHBlZCBhcm91bmQgb25seSByZXBvcnQgdGhlIGFtb3VudCBvZgogCQkgKiBkYXRhIHRvIGJlIGVxdWFsIHRvIHRoZSBzaXplIC0gdGFpbC4gUmVtZW1iZXIgbWVtY3B5IGNhbid0Ci0JCSAqIGF1dG9tYXRpY2x5IHdyYXAgYXJvdW5kIHRoZSByZWNlaXZlIGJ1ZmZlci4KKwkJICogYXV0b21hdGljYWxseSB3cmFwIGFyb3VuZCB0aGUgcmVjZWl2ZSBidWZmZXIuCiAJCSAqLwogCQlkYXRhVG9SZWFkID0gKHdyYXBnYXAgPCBieXRlc0F2YWlsYWJsZSkgPyB3cmFwZ2FwCiAJCQkJCQkJOiBieXRlc0F2YWlsYWJsZTsKQEAgLTI1NDMsNyArMjU0Myw3IEBACiAJCQkJCWJyZWFrOwogCQkJLyoKIAkJCSAqIElmIHRoZSBpbmRleCBpbmNyZW1lbnRlZCBhYm92ZSByZWZlcnMgdG8gYQotCQkJICogbGVnaXRhbWF0ZSBib2FyZCB0eXBlIHNldCBpdCBoZXJlLgorCQkJICogbGVnaXRpbWF0ZSBib2FyZCB0eXBlIHNldCBpdCBoZXJlLgogCQkJICovCiAJCQlpZiAoaW5kZXggPCBFUENBX05VTV9UWVBFUykKIAkJCQlib2FyZC50eXBlID0gbG9vcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90dHkvaXAyL2kyaHcuaCBiL2RyaXZlcnMvc3RhZ2luZy90dHkvaXAyL2kyaHcuaAppbmRleCBjMGJhNmMwLi44ZGYyZjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdHR5L2lwMi9pMmh3LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3R0eS9pcDIvaTJody5oCkBAIC0zMzUsNyArMzM1LDcgQEAKIGluIGZhY3QgZ2VuZXJhdGVzIGEgcmVzZXQgcHVsc2Ugb24gdGhlIGJvYXJkLiBUaGlzIHB1bHNlIGlzIGd1YXJhbnRlZWQgdG8gbGFzdAogbGVzcyB0aGFuIDEwIG1pbGxpc2Vjb25kcy4gVGhlIGFkZGl0aW9uYWwgZGVsYXkgZW5zdXJlcyB0aGUgMTQwMCBoYXMgaGFkIHRoZQogY2hhbmNlIHRvIHJlc3BvbmQgc3VmZmljaWVudGx5IHRvIHRoZSBmaXJzdCByZXNldC4gV2h5IG5vdCBhIGxvbmdlciBkZWxheT8gTXVjaAotbW9yZSB0aGFuIDUwIG1pbGxpc2Vjb25kcyBnZXRzIHRvIGJlIG5vdGljYWJsZSwgYnV0IHRoZSBib2FyZCB3b3VsZCBzdGlsbCB3b3JrLgorbW9yZSB0aGFuIDUwIG1pbGxpc2Vjb25kcyBnZXRzIHRvIGJlIG5vdGljZWFibGUsIGJ1dCB0aGUgYm9hcmQgd291bGQgc3RpbGwgd29yay4KIAogT25jZSBhbGwgMTYgYnl0ZXMgb2YgdGhlIFBvd2VyLW9uIFJlc2V0IE1lc3NhZ2UgaGF2ZSBiZWVuIHJlYWQsIHRoZSBib290c3RyYXAKIGZpcm13YXJlIGlzIHJlYWR5IHRvIHJlY2VpdmUgbG9hZHdhcmUuCkBAIC0zOTksNyArMzk5LDcgQEAKIAkJLy8gZXhwYW5kYWJsZSBwcm9kdWN0cyBtdXN0IHJlcG9ydCBhIE1BUCBvZiBhdmFpbGFibGUgY2hhbm5lbHMuIFNpbmNlIAogCQkvLyBlYWNoIFVBUlQgc3VwcG9ydHMgZm91ciBwb3J0cywgd2UgcmVwcmVzZW50IGVhY2ggVUFSVCBmb3VuZCBieSBhCiAJCS8vIHNpbmdsZSBiaXQuIFVzaW5nIHR3byBieXRlcyB0byBzdXBwbHkgdGhlIG1hcHBpbmcgaW5mb3JtYXRpb24gd2UKLQkJLy8gcmVwb3J0IHRoZSBwcmVzZW5zZSBvciBhYnNlbnNlIG9mIHVwIHRvIDE2IFVBUlRTLCBvciA2NCBwb3J0cyBpbgorCQkvLyByZXBvcnQgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdXAgdG8gMTYgVUFSVFMsIG9yIDY0IHBvcnRzIGluCiAJCS8vIHN0ZXBzIG9mIDQgcG9ydHMuIEZvciAtSUlFWCBwcm9kdWN0cywgdGhlIHBvcnRzIGFyZSBudW1iZXJlZAogCQkvLyBzdGFydGluZyBhdCB0aGUgYm94IGNsb3Nlc3QgdG8gdGhlIGNvbnRyb2xsZXIgaW4gdGhlICJjaGFpbiIuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90dHkvaXAyL2kybGliLmMgYi9kcml2ZXJzL3N0YWdpbmcvdHR5L2lwMi9pMmxpYi5jCmluZGV4IDBkMTBiODkuLjEzYTNjYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90dHkvaXAyL2kybGliLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3R0eS9pcDIvaTJsaWIuYwpAQCAtODIxLDcgKzgyMSw3IEBACiAvLwogLy8gRGVzY3JpcHRpb246CiAvLyBTdHJpcHMgZGF0YSBmcm9tIHRoZSBpbnB1dCBidWZmZXIgYW5kIHdyaXRlcyBpdCB0byBwRGVzdC4gSWYgdGhlcmUgaXMgYQotLy8gY29sbG9zYWwgYmx1bmRlciwgKGludmFsaWQgc3RydWN0dXJlIHBvaW50ZXJzIG9yIHRoZSBsaWtlKSwgcmV0dXJucyAtMS4KKy8vIGNvbG9zc2FsIGJsdW5kZXIsIChpbnZhbGlkIHN0cnVjdHVyZSBwb2ludGVycyBvciB0aGUgbGlrZSksIHJldHVybnMgLTEuCiAvLyBPdGhlcndpc2UsIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkLgogLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIHN0YXRpYyBpbnQKQEAgLTkwOSw3ICs5MDksNyBAQAogLy8gUmV0dXJuczogICAgTnVtYmVyIG9mIGJ5dGVzIHN0cmlwcGVkLCBvciAtMSBmb3IgZXJyb3IKIC8vCiAvLyBEZXNjcmlwdGlvbjoKLS8vIFN0cmlwcyBhbnkgZGF0YSBmcm9tIHRoZSBpbnB1dCBidWZmZXIuIElmIHRoZXJlIGlzIGEgY29sbG9zYWwgYmx1bmRlciwKKy8vIFN0cmlwcyBhbnkgZGF0YSBmcm9tIHRoZSBpbnB1dCBidWZmZXIuIElmIHRoZXJlIGlzIGEgY29sb3NzYWwgYmx1bmRlciwKIC8vIChpbnZhbGlkIHN0cnVjdHVyZSBwb2ludGVycyBvciB0aGUgbGlrZSksIHJldHVybnMgLTEuIE90aGVyd2lzZSwgcmV0dXJucyB0aGUKIC8vIG51bWJlciBvZiBieXRlcyBzdHJpcHBlZC4KIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC05NjMsNyArOTYzLDcgQEAKIC8vIFJldHVybnM6ICAgIE51bWJlciBvZiBieXRlcyBhdmFpbGFibGUsIG9yIC0xIGZvciBlcnJvcgogLy8KIC8vIERlc2NyaXB0aW9uOgotLy8gSWYgdGhlcmUgaXMgYSBjb2xsb3NhbCBibHVuZGVyLCAoaW52YWxpZCBzdHJ1Y3R1cmUgcG9pbnRlcnMgb3IgdGhlIGxpa2UpLAorLy8gSWYgdGhlcmUgaXMgYSBjb2xvc3NhbCBibHVuZGVyLCAoaW52YWxpZCBzdHJ1Y3R1cmUgcG9pbnRlcnMgb3IgdGhlIGxpa2UpLAogLy8gcmV0dXJucyAtMS4gT3RoZXJ3aXNlLCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgc3RyaXBwZWQuIE90aGVyd2lzZSwKIC8vIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ1ZmZlci4KIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMDAxLDcgKzEwMDEsNyBAQAogLy8KIC8vIERlc2NyaXB0aW9uOgogLy8gUXVldWVzIHRoZSBkYXRhIGF0IHBTb3VyY2UgdG8gYmUgc2VudCBhcyBkYXRhIHBhY2tldHMgdG8gdGhlIGJvYXJkLiBJZiB0aGVyZQotLy8gaXMgYSBjb2xsb3NhbCBibHVuZGVyLCAoaW52YWxpZCBzdHJ1Y3R1cmUgcG9pbnRlcnMgb3IgdGhlIGxpa2UpLCByZXR1cm5zIC0xLgorLy8gaXMgYSBjb2xvc3NhbCBibHVuZGVyLCAoaW52YWxpZCBzdHJ1Y3R1cmUgcG9pbnRlcnMgb3IgdGhlIGxpa2UpLCByZXR1cm5zIC0xLgogLy8gT3RoZXJ3aXNlLCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4gV2hhdCBpZiB0aGVyZSBpcyBub3QgZW5vdWdoCiAvLyByb29tIGZvciBhbGwgdGhlIGRhdGE/IElmIHBDaC0+Y2hhbm5lbE9wdGlvbnMgJiBDT19OQkxPQ0tfV1JJVEUgaXMgc2V0LCB0aGVuCiAvLyB3ZSB0cmFuc2ZlciBhcyBtYW55IGNoYXJhY3RlcnMgYXMgd2UgY2FuIG5vdywgdGhlbiByZXR1cm4uIElmIHRoaXMgYml0IGlzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdHR5L2lwMi9pcDJtYWluLmMgYi9kcml2ZXJzL3N0YWdpbmcvdHR5L2lwMi9pcDJtYWluLmMKaW5kZXggZWE3YThmYi4uYmEwNzRmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3R0eS9pcDIvaXAybWFpbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90dHkvaXAyL2lwMm1haW4uYwpAQCAtMTgyNCw3ICsxODI0LDcgQEAKIC8vCQlpcDJ0cmFjZSAoQ0hBTk4sIElUUkNfUFVUQywgMTAsIDEsIHN0cmlwICk7CiAKIAkJLy8KLQkJLy8gV2UgbWF5IG5lZWQgdG8gcmVzdGFydCBpMk91dHB1dCBpZiBpdCBkb2VzIG5vdCBmdWxsZmlsbCB0aGlzIHJlcXVlc3QKKwkJLy8gV2UgbWF5IG5lZWQgdG8gcmVzdGFydCBpMk91dHB1dCBpZiBpdCBkb2VzIG5vdCBmdWxmaWxsIHRoaXMgcmVxdWVzdAogCQkvLwogCQlzdHJpcCA9IGkyT3V0cHV0KCBwQ2gsIHBDaC0+UGJ1ZiwgcENoLT5QYnVmX3N0dWZmKTsKIAkJaWYgKCBzdHJpcCAhPSBwQ2gtPlBidWZfc3R1ZmYgKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdHR5L3NwZWNpYWxpeC5jIGIvZHJpdmVycy9zdGFnaW5nL3R0eS9zcGVjaWFsaXguYwppbmRleCAxN2ExYmU1Li41YzM1OThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdHR5L3NwZWNpYWxpeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90dHkvc3BlY2lhbGl4LmMKQEAgLTksNyArOSw3IEBACiAgKiAgICAgIHN1cHBvcnQuIEJ1dCBwbGVhc2UgcmVhZCB0aGUgZG9jdW1lbnRhdGlvbiAoc3BlY2lhbGl4LnR4dCkKICAqICAgICAgZmlyc3QuCiAgKgotICogICAgICBUaGlzIGRyaXZlciB3YXMgZGV2ZWxvcHBlZCBpbiB0aGUgQml0V2l6YXJkIGxpbnV4IGRldmljZQorICogICAgICBUaGlzIGRyaXZlciB3YXMgZGV2ZWxvcGVkIGluIHRoZSBCaXRXaXphcmQgbGludXggZGV2aWNlCiAgKiAgICAgIGRyaXZlciBzZXJ2aWNlLiBJZiB5b3UgcmVxdWlyZSBhIGxpbnV4IGRldmljZSBkcml2ZXIgZm9yIHlvdXIKICAqICAgICAgcHJvZHVjdCwgcGxlYXNlIGNvbnRhY3QgZGV2aWNlc0BCaXRXaXphcmQubmwgZm9yIGEgcXVvdGUuCiAgKgpAQCAtOTc4LDcgKzk3OCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJwLT5sb2NrLCBmbGFncyk7CiAJc3hfb3V0KGJwLCBDRDE4NnhfQ0FSLCBwb3J0X05vKHBvcnQpKTsKIAotCS8qIFRoZSBTcGVjaWFsaXggYm9hcmQgZG9lbnMndCBpbXBsZW1lbnQgdGhlIFJUUyBsaW5lcy4KKwkvKiBUaGUgU3BlY2lhbGl4IGJvYXJkIGRvZXNuJ3QgaW1wbGVtZW50IHRoZSBSVFMgbGluZXMuCiAJICAgVGhleSBhcmUgdXNlZCB0byBzZXQgdGhlIElSUSBsZXZlbC4gRG9uJ3QgdG91Y2ggdGhlbS4gKi8KIAlpZiAoc3hfY3J0c2N0cyh0dHkpKQogCQlwb3J0LT5NU1ZSID0gTVNWUl9EVFIgfCAoc3hfaW4oYnAsIENEMTg2eF9NU1ZSKSAmIE1TVlJfUlRTKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90dHkvc3BlY2lhbGl4X2lvOC5oIGIvZHJpdmVycy9zdGFnaW5nL3R0eS9zcGVjaWFsaXhfaW84LmgKaW5kZXggYzYzMDA1Mi4uMTIxNWQ3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3R0eS9zcGVjaWFsaXhfaW84LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3R0eS9zcGVjaWFsaXhfaW84LmgKQEAgLTEwLDcgKzEwLDcgQEAKICAqICAgICAgUGxlYXNlIERPIGNvbnRhY3QgaW84LWxpbnV4QHNwZWNpYWxpeC5jby51ayBpZiB5b3UgcmVxdWlyZQogICogICAgICBzdXBwb3J0LgogICoKLSAqICAgICAgVGhpcyBkcml2ZXIgd2FzIGRldmVsb3BwZWQgaW4gdGhlIEJpdFdpemFyZCBsaW51eCBkZXZpY2UKKyAqICAgICAgVGhpcyBkcml2ZXIgd2FzIGRldmVsb3BlZCBpbiB0aGUgQml0V2l6YXJkIGxpbnV4IGRldmljZQogICogICAgICBkcml2ZXIgc2VydmljZS4gSWYgeW91IHJlcXVpcmUgYSBsaW51eCBkZXZpY2UgZHJpdmVyIGZvciB5b3VyCiAgKiAgICAgIHByb2R1Y3QsIHBsZWFzZSBjb250YWN0IGRldmljZXNAQml0V2l6YXJkLm5sIGZvciBhIHF1b3RlLgogICoKQEAgLTc5LDcgKzc5LDcgQEAKIAogI2RlZmluZSBTUEVDSUFMSVhfTUFHSUMJCTB4MDkwNwogCi0jZGVmaW5lIFNYX0NDUl9USU1FT1VUIDEwMDAwICAgLyogQ0NSIHRpbWVvdXQuIFlvdSBtYXkgbmVlZCB0byB3YWl0IHVwdG8KKyNkZWZpbmUgU1hfQ0NSX1RJTUVPVVQgMTAwMDAgICAvKiBDQ1IgdGltZW91dC4gWW91IG1heSBuZWVkIHRvIHdhaXQgdXAgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMCBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSBpbnRlcm5hbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NvciBpcyBhdmFpbGFibGUgYWdhaW4gYWZ0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgZ2l2ZSBpdCBhIGNvbW1hbmQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMKaW5kZXggODIxNGMzNS4uYmNlN2QwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMKQEAgLTIyMCw4ICsyMjAsMTAgQEAKIAl9CiAKIAkvKiAxLiBzdG9wIHRocmVhZHMgKi8KLQlrdGhyZWFkX3N0b3AodWQtPnRjcF9yeCk7Ci0Ja3RocmVhZF9zdG9wKHVkLT50Y3BfdHgpOworCWlmICh1ZC0+dGNwX3J4ICYmICF0YXNrX2lzX2RlYWQodWQtPnRjcF9yeCkpCisJCWt0aHJlYWRfc3RvcCh1ZC0+dGNwX3J4KTsKKwlpZiAodWQtPnRjcF90eCAmJiAhdGFza19pc19kZWFkKHVkLT50Y3BfdHgpKQorCQlrdGhyZWFkX3N0b3AodWQtPnRjcF90eCk7CiAKIAkvKiAyLiBjbG9zZSB0aGUgc29ja2V0ICovCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9yeC5jCmluZGV4IDY0NDVmMTIuLjUxZmJkMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYwpAQCAtMTcxLDMzICsxNzEsMjMgQEAKIAogc3RhdGljIGludCB0d2Vha19yZXNldF9kZXZpY2VfY21kKHN0cnVjdCB1cmIgKnVyYikKIHsKLQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXE7Ci0JX191MTYgdmFsdWU7Ci0JX191MTYgaW5kZXg7Ci0JaW50IHJldDsKKwlzdHJ1Y3Qgc3R1Yl9wcml2ICpwcml2ID0gKHN0cnVjdCBzdHViX3ByaXYgKikgdXJiLT5jb250ZXh0OworCXN0cnVjdCBzdHViX2RldmljZSAqc2RldiA9IHByaXYtPnNkZXY7CiAKLQlyZXEgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSB1cmItPnNldHVwX3BhY2tldDsKLQl2YWx1ZSA9IGxlMTZfdG9fY3B1KHJlcS0+d1ZhbHVlKTsKLQlpbmRleCA9IGxlMTZfdG9fY3B1KHJlcS0+d0luZGV4KTsKKwl1c2JpcF91aW5mbygicmVzZXRfZGV2aWNlICVzXG4iLCBkZXZfbmFtZSgmdXJiLT5kZXYtPmRldikpOwogCi0JdXNiaXBfdWluZm8oInJlc2V0X2RldmljZSAocG9ydCAlZCkgdG8gJXNcbiIsIGluZGV4LAotCQkJCQkJZGV2X25hbWUoJnVyYi0+ZGV2LT5kZXYpKTsKLQotCS8qIGFsbCBpbnRlcmZhY2VzIHNob3VsZCBiZSBvd25lZCBieSB1c2JpcCBkcml2ZXIsIHNvIGp1c3QgcmVzZXQgaXQuICAqLwotCXJldCA9IHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQodXJiLT5kZXYsIE5VTEwpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICJsb2NrIGZvciByZXNldFxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyogdHJ5IHRvIHJlc2V0IHRoZSBkZXZpY2UgKi8KLQlyZXQgPSB1c2JfcmVzZXRfZGV2aWNlKHVyYi0+ZGV2KTsKLQlpZiAocmV0IDwgMCkKLQkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgImRldmljZSByZXNldFxuIik7Ci0KLQl1c2JfdW5sb2NrX2RldmljZSh1cmItPmRldik7Ci0KLQlyZXR1cm4gcmV0OworCS8qCisJICogdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldCBjYXVzZWQgYSBkZWFkbG9jazogaXQgY2F1c2VzIHRoZSBkcml2ZXIKKwkgKiB0byB1bmJpbmQuIEluIHRoZSBzaHV0ZG93biB0aGUgcnggdGhyZWFkIGlzIHNpZ25hbGxlZCB0byBzaHV0IGRvd24KKwkgKiBidXQgdGhpcyB0aHJlYWQgaXMgcGVuZGluZyBpbiB0aGUgdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldC4KKwkgKgorCSAqIEluc3RlYWQgcXVldWUgdGhlIHJlc2V0LgorCSAqCisJICogVW5mb3J0dW5hdGx5IGFuIGV4aXN0aW5nIHVzYmlwIGNvbm5lY3Rpb24gd2lsbCBiZSBkcm9wcGVkIGR1ZSB0bworCSAqIGRyaXZlciB1bmJpbmRpbmcuCisJICovCisJdXNiX3F1ZXVlX3Jlc2V0X2RldmljZShzZGV2LT5pbnRlcmZhY2UpOworCXJldHVybiAwOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfdHguYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3R4LmMKaW5kZXggNTUyM2YyNS4uNjRhNTJiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfdHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl90eC5jCkBAIC0xNzAsNyArMTcwLDYgQEAKIAlzdHJ1Y3Qgc3R1Yl9wcml2ICpwcml2LCAqdG1wOwogCiAJc3RydWN0IG1zZ2hkciBtc2c7Ci0Jc3RydWN0IGt2ZWMgaW92WzNdOwogCXNpemVfdCB0eHNpemU7CiAKIAlzaXplX3QgdG90YWxfc2l6ZSA9IDA7CkBAIC0xODAsMjggKzE3OSw3MyBAQAogCQlzdHJ1Y3QgdXJiICp1cmIgPSBwcml2LT51cmI7CiAJCXN0cnVjdCB1c2JpcF9oZWFkZXIgcGR1X2hlYWRlcjsKIAkJdm9pZCAqaXNvX2J1ZmZlciA9IE5VTEw7CisJCXN0cnVjdCBrdmVjICppb3YgPSBOVUxMOworCQlpbnQgaW92bnVtID0gMDsKIAogCQl0eHNpemUgPSAwOwogCQltZW1zZXQoJnBkdV9oZWFkZXIsIDAsIHNpemVvZihwZHVfaGVhZGVyKSk7CiAJCW1lbXNldCgmbXNnLCAwLCBzaXplb2YobXNnKSk7Ci0JCW1lbXNldCgmaW92LCAwLCBzaXplb2YoaW92KSk7CiAKLQkJdXNiaXBfZGJnX3N0dWJfdHgoInNldHVwIHR4ZGF0YSB1cmIgJXBcbiIsIHVyYik7CisJCWlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0lTT0NIUk9OT1VTKQorCQkJaW92bnVtID0gMiArIHVyYi0+bnVtYmVyX29mX3BhY2tldHM7CisJCWVsc2UKKwkJCWlvdm51bSA9IDI7CiAKKwkJaW92ID0ga3phbGxvYyhpb3ZudW0gKiBzaXplb2Yoc3RydWN0IGt2ZWMpLCBHRlBfS0VSTkVMKTsKKworCQlpZiAoIWlvdikgeworCQkJdXNiaXBfZXZlbnRfYWRkKCZzZGV2LT51ZCwgU0RFVl9FVkVOVF9FUlJPUl9NQUxMT0MpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaW92bnVtID0gMDsKIAogCQkvKiAxLiBzZXR1cCB1c2JpcF9oZWFkZXIgKi8KIAkJc2V0dXBfcmV0X3N1Ym1pdF9wZHUoJnBkdV9oZWFkZXIsIHVyYik7CisJCXVzYmlwX2RiZ19zdHViX3R4KCJzZXR1cCB0eGRhdGEgc2VxbnVtOiAlZCB1cmI6ICVwXG4iLAorCQkJCQkJcGR1X2hlYWRlci5iYXNlLnNlcW51bSwgdXJiKTsKKwkJLyp1c2JpcF9kdW1wX2hlYWRlcihwZHVfaGVhZGVyKTsqLwogCQl1c2JpcF9oZWFkZXJfY29ycmVjdF9lbmRpYW4oJnBkdV9oZWFkZXIsIDEpOwogCi0JCWlvdlswXS5pb3ZfYmFzZSA9ICZwZHVfaGVhZGVyOwotCQlpb3ZbMF0uaW92X2xlbiAgPSBzaXplb2YocGR1X2hlYWRlcik7CisJCWlvdltpb3ZudW1dLmlvdl9iYXNlID0gJnBkdV9oZWFkZXI7CisJCWlvdltpb3ZudW1dLmlvdl9sZW4gID0gc2l6ZW9mKHBkdV9oZWFkZXIpOworCQlpb3ZudW0rKzsKIAkJdHhzaXplICs9IHNpemVvZihwZHVfaGVhZGVyKTsKIAogCQkvKiAyLiBzZXR1cCB0cmFuc2ZlciBidWZmZXIgKi8KLQkJaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSAmJiB1cmItPmFjdHVhbF9sZW5ndGggPiAwKSB7Ci0JCQlpb3ZbMV0uaW92X2Jhc2UgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQkJCWlvdlsxXS5pb3ZfbGVuICA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSAmJgorCQkJCXVzYl9waXBldHlwZSh1cmItPnBpcGUpICE9IFBJUEVfSVNPQ0hST05PVVMgJiYKKwkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoID4gMCkgeworCQkJaW92W2lvdm51bV0uaW92X2Jhc2UgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwkJCWlvdltpb3ZudW1dLmlvdl9sZW4gID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCQkJaW92bnVtKys7CiAJCQl0eHNpemUgKz0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCQl9IGVsc2UgaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSAmJgorCQkJCXVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJCS8qCisJCQkgKiBGb3IgaXNvY2hyb25vdXMgcGFja2V0czogYWN0dWFsIGxlbmd0aCBpcyB0aGUgc3VtIG9mCisJCQkgKiB0aGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUgaW5kaXZpZHVhbCwgcGFja2V0cywgYnV0IGFzCisJCQkgKiB0aGUgcGFja2V0IG9mZnNldHMgYXJlIG5vdCBjaGFuZ2VkIHRoZXJlIHdpbGwgYmUKKwkJCSAqIHBhZGRpbmcgYmV0d2VlbiB0aGUgcGFja2V0cy4gVG8gb3B0aW1hbGx5IHVzZSB0aGUKKwkJCSAqIGJhbmR3aWR0aCB0aGUgcGFkZGluZyBpcyBub3QgdHJhbnNtaXR0ZWQuCisJCQkgKi8KKworCQkJaW50IGk7CisJCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CisJCQkJaW92W2lvdm51bV0uaW92X2Jhc2UgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0OworCQkJCWlvdltpb3ZudW1dLmlvdl9sZW4gPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGg7CisJCQkJaW92bnVtKys7CisJCQkJdHhzaXplICs9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsKKwkJCX0KKworCQkJaWYgKHR4c2l6ZSAhPSBzaXplb2YocGR1X2hlYWRlcikgKyB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJCQlkZXZfZXJyKCZzZGV2LT5pbnRlcmZhY2UtPmRldiwKKwkJCQkJImFjdHVhbCBsZW5ndGggb2YgdXJiICglZCkgZG9lcyBub3QgbWF0Y2ggaXNvIHBhY2tldCBzaXplcyAoJWQpXG4iLAorCQkJCQl1cmItPmFjdHVhbF9sZW5ndGgsIHR4c2l6ZS1zaXplb2YocGR1X2hlYWRlcikpOworCQkJCWtmcmVlKGlvdik7CisJCQkJdXNiaXBfZXZlbnRfYWRkKCZzZGV2LT51ZCwgU0RFVl9FVkVOVF9FUlJPUl9UQ1ApOworCQkJICAgcmV0dXJuIC0xOworCQkJfQogCQl9CiAKIAkJLyogMy4gc2V0dXAgaXNvX3BhY2tldF9kZXNjcmlwdG9yICovCkBAIC0yMTIsMzIgKzI1NiwzNCBAQAogCQkJaWYgKCFpc29fYnVmZmVyKSB7CiAJCQkJdXNiaXBfZXZlbnRfYWRkKCZzZGV2LT51ZCwKIAkJCQkJCVNERVZfRVZFTlRfRVJST1JfTUFMTE9DKTsKKwkJCQlrZnJlZShpb3YpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KIAotCQkJaW92WzJdLmlvdl9iYXNlID0gaXNvX2J1ZmZlcjsKLQkJCWlvdlsyXS5pb3ZfbGVuICA9IGxlbjsKKwkJCWlvdltpb3ZudW1dLmlvdl9iYXNlID0gaXNvX2J1ZmZlcjsKKwkJCWlvdltpb3ZudW1dLmlvdl9sZW4gID0gbGVuOwogCQkJdHhzaXplICs9IGxlbjsKKwkJCWlvdm51bSsrOwogCQl9CiAKLQkJcmV0ID0ga2VybmVsX3NlbmRtc2coc2Rldi0+dWQudGNwX3NvY2tldCwgJm1zZywgaW92LAotCQkJCSAgICAgMywgdHhzaXplKTsKKwkJcmV0ID0ga2VybmVsX3NlbmRtc2coc2Rldi0+dWQudGNwX3NvY2tldCwgJm1zZywKKwkJCQkJCWlvdiwgIGlvdm51bSwgdHhzaXplKTsKIAkJaWYgKHJldCAhPSB0eHNpemUpIHsKIAkJCWRldl9lcnIoJnNkZXYtPmludGVyZmFjZS0+ZGV2LAogCQkJCSJzZW5kbXNnIGZhaWxlZCEsIHJldHZhbCAlZCBmb3IgJXpkXG4iLAogCQkJCXJldCwgdHhzaXplKTsKKwkJCWtmcmVlKGlvdik7CiAJCQlrZnJlZShpc29fYnVmZmVyKTsKIAkJCXVzYmlwX2V2ZW50X2FkZCgmc2Rldi0+dWQsIFNERVZfRVZFTlRfRVJST1JfVENQKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCisJCWtmcmVlKGlvdik7CiAJCWtmcmVlKGlzb19idWZmZXIpOwotCQl1c2JpcF9kYmdfc3R1Yl90eCgic2VuZCB0eGRhdGFcbiIpOwogCiAJCXRvdGFsX3NpemUgKz0gdHhzaXplOwogCX0KIAotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHByaXYsIHRtcCwgJnNkZXYtPnByaXZfZnJlZSwgbGlzdCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5jCmluZGV4IDMzN2FiYzQuLjdiMWZlNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfY29tbW9uLmMKQEAgLTMzMywxMCArMzMzLDExIEBACiAJCXVzYmlwX3VkYmcoIkNNRF9VTkxJTks6IHNlcSAldVxuIiwgcGR1LT51LmNtZF91bmxpbmsuc2VxbnVtKTsKIAkJYnJlYWs7CiAJY2FzZSBVU0JJUF9SRVRfU1VCTUlUOgotCQl1c2JpcF91ZGJnKCJSRVRfU1VCTUlUOiBzdCAlZCBhbCAldSBzZiAlZCBlYyAlZFxuIiwKKwkJdXNiaXBfdWRiZygiUkVUX1NVQk1JVDogc3QgJWQgYWwgJXUgc2YgJWQgI3AgJWQgZWMgJWRcbiIsCiAJCQkJcGR1LT51LnJldF9zdWJtaXQuc3RhdHVzLAogCQkJCXBkdS0+dS5yZXRfc3VibWl0LmFjdHVhbF9sZW5ndGgsCiAJCQkJcGR1LT51LnJldF9zdWJtaXQuc3RhcnRfZnJhbWUsCisJCQkJcGR1LT51LnJldF9zdWJtaXQubnVtYmVyX29mX3BhY2tldHMsCiAJCQkJcGR1LT51LnJldF9zdWJtaXQuZXJyb3JfY291bnQpOwogCWNhc2UgVVNCSVBfUkVUX1VOTElOSzoKIAkJdXNiaXBfdWRiZygiUkVUX1VOTElOSzogc3RhdHVzICVkXG4iLCBwZHUtPnUucmV0X3VubGluay5zdGF0dXMpOwpAQCAtNTIwLDYgKzUyMSw3IEBACiAJCXJwZHUtPnN0YXR1cwkJPSB1cmItPnN0YXR1czsKIAkJcnBkdS0+YWN0dWFsX2xlbmd0aAk9IHVyYi0+YWN0dWFsX2xlbmd0aDsKIAkJcnBkdS0+c3RhcnRfZnJhbWUJPSB1cmItPnN0YXJ0X2ZyYW1lOworCQlycGR1LT5udW1iZXJfb2ZfcGFja2V0cyA9IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7CiAJCXJwZHUtPmVycm9yX2NvdW50CT0gdXJiLT5lcnJvcl9jb3VudDsKIAl9IGVsc2UgewogCQkvKiB2aGNpX3J4LmMgKi8KQEAgLTUyNyw2ICs1MjksNyBAQAogCQl1cmItPnN0YXR1cwkJPSBycGR1LT5zdGF0dXM7CiAJCXVyYi0+YWN0dWFsX2xlbmd0aAk9IHJwZHUtPmFjdHVhbF9sZW5ndGg7CiAJCXVyYi0+c3RhcnRfZnJhbWUJPSBycGR1LT5zdGFydF9mcmFtZTsKKwkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IHJwZHUtPm51bWJlcl9vZl9wYWNrZXRzOwogCQl1cmItPmVycm9yX2NvdW50CT0gcnBkdS0+ZXJyb3JfY291bnQ7CiAJfQogfQpAQCAtNTk1LDExICs1OTgsMTMgQEAKIAkJY3B1X3RvX2JlMzJzKCZwZHUtPnN0YXR1cyk7CiAJCWNwdV90b19iZTMycygmcGR1LT5hY3R1YWxfbGVuZ3RoKTsKIAkJY3B1X3RvX2JlMzJzKCZwZHUtPnN0YXJ0X2ZyYW1lKTsKKwkJY3B1X3RvX2JlMzJzKCZwZHUtPm51bWJlcl9vZl9wYWNrZXRzKTsKIAkJY3B1X3RvX2JlMzJzKCZwZHUtPmVycm9yX2NvdW50KTsKIAl9IGVsc2UgewogCQliZTMyX3RvX2NwdXMoJnBkdS0+c3RhdHVzKTsKIAkJYmUzMl90b19jcHVzKCZwZHUtPmFjdHVhbF9sZW5ndGgpOwogCQliZTMyX3RvX2NwdXMoJnBkdS0+c3RhcnRfZnJhbWUpOworCQljcHVfdG9fYmUzMnMoJnBkdS0+bnVtYmVyX29mX3BhY2tldHMpOwogCQliZTMyX3RvX2NwdXMoJnBkdS0+ZXJyb3JfY291bnQpOwogCX0KIH0KQEAgLTcyNSw2ICs3MzAsNyBAQAogCWludCBzaXplID0gbnAgKiBzaXplb2YoKmlzbyk7CiAJaW50IGk7CiAJaW50IHJldDsKKwlpbnQgdG90YWxfbGVuZ3RoID0gMDsKIAogCWlmICghdXNiX3BpcGVpc29jKHVyYi0+cGlwZSkpCiAJCXJldHVybiAwOwpAQCAtNzU0LDE5ICs3NjAsNzUgQEAKIAkJcmV0dXJuIC1FUElQRTsKIAl9CiAKKwogCWZvciAoaSA9IDA7IGkgPCBucDsgaSsrKSB7CiAJCWlzbyA9IGJ1ZmYgKyAoaSAqIHNpemVvZigqaXNvKSk7CiAKIAkJdXNiaXBfaXNvX3Bha2NldF9jb3JyZWN0X2VuZGlhbihpc28sIDApOwogCQl1c2JpcF9wYWNrX2lzbyhpc28sICZ1cmItPmlzb19mcmFtZV9kZXNjW2ldLCAwKTsKKwkJdG90YWxfbGVuZ3RoICs9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsKIAl9CiAKIAlrZnJlZShidWZmKTsKIAorCWlmICh0b3RhbF9sZW5ndGggIT0gdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsCisJCSAgInRvdGFsIGxlbmd0aCBvZiBpc28gcGFja2V0cyAoJWQpIG5vdCBlcXVhbCB0byBhY3R1YWwgbGVuZ3RoIG9mIGJ1ZmZlciAoJWQpXG4iLAorCQkgIHRvdGFsX2xlbmd0aCwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKworCQlpZiAodWQtPnNpZGUgPT0gVVNCSVBfU1RVQikKKwkJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgU0RFVl9FVkVOVF9FUlJPUl9UQ1ApOworCQllbHNlCisJCQl1c2JpcF9ldmVudF9hZGQodWQsIFZERVZfRVZFTlRfRVJST1JfVENQKTsKKworCQlyZXR1cm4gLUVQSVBFOworCX0KKwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF9yZWN2X2lzbyk7CiAKKy8qCisgKiBUaGlzIGZ1bmN0aW9ucyByZXN0b3JlcyB0aGUgcGFkZGluZyB3aGljaCB3YXMgcmVtb3ZlZCBmb3Igb3B0aW1pemluZworICogdGhlIGJhbmR3aWR0aCBkdXJpbmcgdHJhbnNmZXIgb3ZlciB0Y3AvaXAKKyAqCisgKiBidWZmZXIgYW5kIGlzbyBwYWNrZXRzIG5lZWQgdG8gYmUgc3RvcmVkIGFuZCBiZSBpbiBwcm9wZXBlciBlbmRpYW4gaW4gdXJiCisgKiBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCisgKi8KK2ludCB1c2JpcF9wYWRfaXNvKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50IG5wID0gdXJiLT5udW1iZXJfb2ZfcGFja2V0czsKKwlpbnQgaTsKKwlpbnQgcmV0OworCWludCBhY3R1YWxvZmZzZXQgPSB1cmItPmFjdHVhbF9sZW5ndGg7CisKKwlpZiAoIXVzYl9waXBlaXNvYyh1cmItPnBpcGUpKQorCQlyZXR1cm4gMDsKKworCS8qIGlmIG5vIHBhY2tldHMgb3IgbGVuZ3RoIG9mIGRhdGEgaXMgMCwgdGhlbiBub3RoaW5nIHRvIHVucGFjayAqLworCWlmIChucCA9PSAwIHx8IHVyYi0+YWN0dWFsX2xlbmd0aCA9PSAwKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogaWYgYWN0dWFsX2xlbmd0aCBpcyB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIHRoZW4gbm8gcGFkZGluZyBpcworCSAqIHByZXNlbnQuCisJKi8KKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID09IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIGxvb3Agb3ZlciBhbGwgcGFja2V0cyBmcm9tIGxhc3QgdG8gZmlyc3QgKHRvIHByZXZlbnQgb3ZlcndyaXR0aW5nCisJICogbWVtb3J5IHdoZW4gcGFkZGluZykgYW5kIG1vdmUgdGhlbSBpbnRvIHRoZSBwcm9wZXIgcGxhY2UKKwkgKi8KKwlmb3IgKGkgPSBucC0xOyBpID4gMDsgaS0tKSB7CisJCWFjdHVhbG9mZnNldCAtPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGg7CisJCW1lbW1vdmUodXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCwKKwkJCQkgIHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgYWN0dWFsb2Zmc2V0LAorCQkJCSAgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoKTsKKwl9CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX3BhZF9pc28pOwogCiAvKiBzb21lIG1lbWJlcnMgb2YgdXJiIG11c3QgYmUgc3Vic3RpdHV0ZWQgYmVmb3JlLiAqLwogaW50IHVzYmlwX3JlY3ZfeGJ1ZmYoc3RydWN0IHVzYmlwX2RldmljZSAqdWQsIHN0cnVjdCB1cmIgKnVyYikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uaCBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uaAppbmRleCA5ZjgwOWMzLi5jNzY3ZjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfY29tbW9uLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5oCkBAIC0zNzksNiArMzc5LDggQEAKIGludCB1c2JpcF9yZWN2X3hidWZmKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkLCBzdHJ1Y3QgdXJiICp1cmIpOwogLyogc29tZSBtZW1iZXJzIG9mIHVyYiBtdXN0IGJlIHN1YnN0aXR1dGVkIGJlZm9yZS4gKi8KIGludCB1c2JpcF9yZWN2X2lzbyhzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCwgc3RydWN0IHVyYiAqdXJiKTsKKy8qIHNvbWUgbWVtYmVycyBvZiB1cmIgbXVzdCBiZSBzdWJzdGl0dXRlZCBiZWZvcmUuICovCitpbnQgdXNiaXBfcGFkX2lzbyhzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCwgc3RydWN0IHVyYiAqdXJiKTsKIHZvaWQgKnVzYmlwX2FsbG9jX2lzb19kZXNjX3BkdShzdHJ1Y3QgdXJiICp1cmIsIHNzaXplX3QgKmJ1ZmZsZW4pOwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX2hjZC5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMKaW5kZXggZTIzNDg0OS4uNGY0ZjEzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMKQEAgLTE5NCw3ICsxOTQsNyBAQAogICoKICAqIFNvLCB0aGUgbWF4aW11bSBudW1iZXIgb2YgcG9ydHMgaXMgMzEgKCBwb3J0IDAgdG8gcG9ydCAzMCkgPwogICoKLSAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIGFjdHVhbCB0cmFuc2ZlcmVkIGxlbmd0aCBpbiBieXRlLiBJZiBub3RoaW5nIGhhcworICogVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgYWN0dWFsIHRyYW5zZmVycmVkIGxlbmd0aCBpbiBieXRlLiBJZiBub3RoaW5nIGhhcwogICogYmVlbiBjaGFuZ2VkLCByZXR1cm4gMC4gSW4gdGhlIGNhc2UgdGhhdCB0aGUgbnVtYmVyIG9mIHBvcnRzIGlzIGxlc3MgdGhhbiBvcgogICogZXF1YWwgdG8gNiAoVkhDSV9OUE9SVFM9PTcpLCByZXR1cm4gMS4KICAqCkBAIC04NzYsOCArODc2LDEwIEBACiAJfQogCiAJLyoga2lsbCB0aHJlYWRzIHJlbGF0ZWQgdG8gdGhpcyBzZGV2LCBpZiB2LmMuIGV4aXN0cyAqLwotCWt0aHJlYWRfc3RvcCh2ZGV2LT51ZC50Y3BfcngpOwotCWt0aHJlYWRfc3RvcCh2ZGV2LT51ZC50Y3BfdHgpOworCWlmICh2ZGV2LT51ZC50Y3BfcngpCisJCWt0aHJlYWRfc3RvcCh2ZGV2LT51ZC50Y3BfcngpOworCWlmICh2ZGV2LT51ZC50Y3BfdHgpCisJCWt0aHJlYWRfc3RvcCh2ZGV2LT51ZC50Y3BfdHgpOwogCiAJdXNiaXBfdWluZm8oInN0b3AgdGhyZWFkc1xuIik7CiAKQEAgLTk0OSw5ICs5NTEsNiBAQAogewogCW1lbXNldCh2ZGV2LCAwLCBzaXplb2YoKnZkZXYpKTsKIAotCXZkZXYtPnVkLnRjcF9yeCA9IGt0aHJlYWRfY3JlYXRlKHZoY2lfcnhfbG9vcCwgJnZkZXYtPnVkLCAidmhjaV9yeCIpOwotCXZkZXYtPnVkLnRjcF90eCA9IGt0aHJlYWRfY3JlYXRlKHZoY2lfdHhfbG9vcCwgJnZkZXYtPnVkLCAidmhjaV90eCIpOwotCiAJdmRldi0+dWQuc2lkZSAgID0gVVNCSVBfVkhDSTsKIAl2ZGV2LT51ZC5zdGF0dXMgPSBWREVWX1NUX05VTEw7CiAJLyogdmRldi0+dWQubG9jayAgID0gU1BJTl9MT0NLX1VOTE9DS0VEOyAqLwpAQCAtMTEzOSw3ICsxMTM4LDcgQEAKIAkJdXNiaXBfdWVycigiY3JlYXRlIGhjZCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0KKwloY2QtPmhhc190dCA9IDE7CiAKIAkvKiB0aGlzIGlzIHByaXZhdGUgZGF0YSBmb3IgdmhjaV9oY2QgKi8KIAl0aGVfY29udHJvbGxlciA9IGhjZF90b192aGNpKGhjZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfcnguYwppbmRleCAwOWJmMjM1Li4yZmZjOTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3J4LmMKQEAgLTEwMCw2ICsxMDAsOSBAQAogCWlmICh1c2JpcF9yZWN2X2lzbyh1ZCwgdXJiKSA8IDApCiAJCXJldHVybjsKIAorCS8qIHJlc3RvcmUgdGhlIHBhZGRpbmcgaW4gaXNvIHBhY2tldHMgKi8KKwlpZiAodXNiaXBfcGFkX2lzbyh1ZCwgdXJiKSA8IDApCisJCXJldHVybjsKIAogCWlmICh1c2JpcF9kYmdfZmxhZ192aGNpX3J4KQogCQl1c2JpcF9kdW1wX3VyYih1cmIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfc3lzZnMuYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3N5c2ZzLmMKaW5kZXggM2YyNDU5Zi4uZTJkYWRiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfc3lzZnMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9zeXNmcy5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAidmhjaS5oIgogCiAjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAKIC8qIFRPRE86IHJlZmluZSBsb2NraW5nID8qLwogCkBAIC0yMjAsMTMgKzIyMSwxMyBAQAogCXZkZXYtPnVkLnRjcF9zb2NrZXQgPSBzb2NrZXQ7CiAJdmRldi0+dWQuc3RhdHVzICAgICA9IFZERVZfU1RfTk9UQVNTSUdORUQ7CiAKLQl3YWtlX3VwX3Byb2Nlc3ModmRldi0+dWQudGNwX3J4KTsKLQl3YWtlX3VwX3Byb2Nlc3ModmRldi0+dWQudGNwX3R4KTsKLQogCXNwaW5fdW5sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsKIAlzcGluX3VubG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOwogCS8qIGVuZCB0aGUgbG9jayAqLwogCisJdmRldi0+dWQudGNwX3J4ID0ga3RocmVhZF9ydW4odmhjaV9yeF9sb29wLCAmdmRldi0+dWQsICJ2aGNpX3J4Iik7CisJdmRldi0+dWQudGNwX3R4ID0ga3RocmVhZF9ydW4odmhjaV90eF9sb29wLCAmdmRldi0+dWQsICJ2aGNpX3R4Iik7CisKIAlyaF9wb3J0X2Nvbm5lY3Qocmhwb3J0LCBzcGVlZCk7CiAKIAlyZXR1cm4gY291bnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX2NhOTFjeDQyLmMgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX2NhOTFjeDQyLmMKaW5kZXggZDRhNDhjNC4uYTQwMDcyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV9jYTkxY3g0Mi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfY2E5MWN4NDIuYwpAQCAtNjIxLDcgKzYyMSw3IEBACiAKIAkvKgogCSAqIExldCdzIGFsbG9jYXRlIHRoZSByZXNvdXJjZSBoZXJlIHJhdGhlciB0aGFuIGZ1cnRoZXIgdXAgdGhlIHN0YWNrIGFzCi0JICogaXQgYXZvaWRzIHB1c2hpbmcgbG9hZHMgb2YgYnVzIGRlcGVuZGFudCBzdHVmZiB1cCB0aGUgc3RhY2sKKwkgKiBpdCBhdm9pZHMgcHVzaGluZyBsb2FkcyBvZiBidXMgZGVwZW5kZW50IHN0dWZmIHVwIHRoZSBzdGFjawogCSAqLwogCXJldHZhbCA9IGNhOTFjeDQyX2FsbG9jX3Jlc291cmNlKGltYWdlLCBzaXplKTsKIAlpZiAocmV0dmFsKSB7CkBAIC0xMDUyLDcgKzEwNTIsNyBAQAogCQlwY2lfYXR0ciA9IGRlc3QtPnByaXZhdGU7CiAJfQogCi0JLyogQ2hlY2sgd2UgY2FuIGRvIGZ1bGxmaWxsIHJlcXVpcmVkIGF0dHJpYnV0ZXMgKi8KKwkvKiBDaGVjayB3ZSBjYW4gZG8gZnVsZmlsbCByZXF1aXJlZCBhdHRyaWJ1dGVzICovCiAJaWYgKCh2bWVfYXR0ci0+YXNwYWNlICYgfihWTUVfQTE2IHwgVk1FX0EyNCB8IFZNRV9BMzIgfCBWTUVfVVNFUjEgfAogCQlWTUVfVVNFUjIpKSAhPSAwKSB7CiAKQEAgLTEwNjksNyArMTA2OSw3IEBACiAJCWdvdG8gZXJyX2N5Y2xlOwogCX0KIAotCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gZnVsbGZpbGwgc291cmNlIGFuZCBkZXN0aW5hdGlvbiAqLworCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gZnVsZmlsbCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uICovCiAJaWYgKCEoKChzcmMtPnR5cGUgPT0gVk1FX0RNQV9QQ0kpICYmIChkZXN0LT50eXBlID09IFZNRV9ETUFfVk1FKSkgfHwKIAkJKChzcmMtPnR5cGUgPT0gVk1FX0RNQV9WTUUpICYmIChkZXN0LT50eXBlID09IFZNRV9ETUFfUENJKSkpKSB7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfdHNpMTQ4LmMgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX3RzaTE0OC5jCmluZGV4IGIwMGE1M2UuLjEwNmFhOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfdHNpMTQ4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV90c2kxNDguYwpAQCAtOTI4LDcgKzkyOCw3IEBACiAJc3Bpbl9sb2NrKCZpbWFnZS0+bG9jayk7CiAKIAkvKiBMZXQncyBhbGxvY2F0ZSB0aGUgcmVzb3VyY2UgaGVyZSByYXRoZXIgdGhhbiBmdXJ0aGVyIHVwIHRoZSBzdGFjayBhcwotCSAqIGl0IGF2b2lkcyBwdXNoaW5nIGxvYWRzIG9mIGJ1cyBkZXBlbmRhbnQgc3R1ZmYgdXAgdGhlIHN0YWNrLiBJZiBzaXplCisJICogaXQgYXZvaWRzIHB1c2hpbmcgbG9hZHMgb2YgYnVzIGRlcGVuZGVudCBzdHVmZiB1cCB0aGUgc3RhY2suIElmIHNpemUKIAkgKiBpcyB6ZXJvLCBhbnkgZXhpc3RpbmcgcmVzb3VyY2Ugd2lsbCBiZSBmcmVlZC4KIAkgKi8KIAlyZXR2YWwgPSB0c2kxNDhfYWxsb2NfcmVzb3VyY2UoaW1hZ2UsIHNpemUpOwpAQCAtMTMyMCw3ICsxMzIwLDcgQEAKIAogCS8qCiAJICogV3JpdGVzIGFyZSBwb3N0ZWQuIFdlIG5lZWQgdG8gZG8gYSByZWFkIG9uIHRoZSBWTUUgYnVzIHRvIGZsdXNoIG91dAotCSAqIGFsbCBvZiB0aGUgd3JpdGVzIGJlZm9yZSB3ZSBjaGVjayBmb3IgZXJyb3JzLiBXZSBjYW4ndCBndWFyZW50ZWUKKwkgKiBhbGwgb2YgdGhlIHdyaXRlcyBiZWZvcmUgd2UgY2hlY2sgZm9yIGVycm9ycy4gV2UgY2FuJ3QgZ3VhcmFudGVlCiAJICogdGhhdCByZWFkaW5nIHRoZSBkYXRhIHdlIGhhdmUganVzdCB3cml0dGVuIGlzIHNhZmUuIEl0IGlzIGJlbGlldmVkCiAJICogdGhhdCB0aGVyZSBpc24ndCBhbnkgcmVhZCwgd3JpdGUgcmUtb3JkZXJpbmcsIHNvIHdlIGNhbiByZWFkIGFueQogCSAqIGxvY2F0aW9uIGluIFZNRSBzcGFjZSwgc28gbGV0cyByZWFkIHRoZSBEZXZpY2UgSUQgZnJvbSB0aGUgdHNpMTQ4J3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfdHNpMTQ4LmggYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX3RzaTE0OC5oCmluZGV4IDlmOTdmYTguLmEzYWMyZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfdHNpMTQ4LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV90c2kxNDguaApAQCAtMjEyLDcgKzIxMiw3IEBACiAjZGVmaW5lIFRTSTE0OF9MQ1NSX09GRlNFVF9PVEFUCQkweDFDCiAKIC8qCi0gKiBWTUVidXMgaW50ZXJ1cHQgYWNrCisgKiBWTUVidXMgaW50ZXJydXB0IGFjawogICogb2Zmc2V0ICAyMDAKICAqLwogI2RlZmluZSBUU0kxNDhfTENTUl9WSUFDSzEJMHgyMDQKQEAgLTYxMyw3ICs2MTMsNyBAQAogLyoKICAqICBQQ0ktWCBTdGF0dXMgUmVnaXN0ZXIgKENSRyArJDA1NCkKICAqLwotI2RlZmluZSBUU0kxNDhfUENGU19QQ0lYU1RBVF9SU0NFTSAgICAgKDE8PDI5KQkvKiBSZWNpZXZlZCBTcGxpdCBDb21wIEVycm9yICovCisjZGVmaW5lIFRTSTE0OF9QQ0ZTX1BDSVhTVEFUX1JTQ0VNICAgICAoMTw8MjkpCS8qIFJlY2VpdmVkIFNwbGl0IENvbXAgRXJyb3IgKi8KICNkZWZpbmUgVFNJMTQ4X1BDRlNfUENJWFNUQVRfRE1DUlNfTSAgICg3PDwyNikJLyogbWF4IEN1bXVsYXRpdmUgUmVhZCBTaXplICovCiAjZGVmaW5lIFRTSTE0OF9QQ0ZTX1BDSVhTVEFUX0RNT1NUX00gICAoNzw8MjMpCS8qIG1heCBvdXRzdGFuZGluZyBTcGxpdCBUcmFucwogCQkJCQkJICovCkBAIC05ODIsOCArOTgyLDggQEAKICNkZWZpbmUgVFNJMTQ4X0xDU1JfVklDUl9DTlRTX0lSUTEgICAgICgyPDwyMikJLyogSVJRMSB0byBDbnRyICovCiAjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZJQ1JfQ05UU19JUlEyICAgICAoMzw8MjIpCS8qIElSUTIgdG8gQ250ciAqLwogCi0jZGVmaW5lIFRTSTE0OF9MQ1NSX1ZJQ1JfRURHSVNfTSAgICAgICAoMzw8MjApCS8qIEVkZ2UgaW50ZXJ1cHQgTUFTSyAqLwotI2RlZmluZSBUU0kxNDhfTENTUl9WSUNSX0VER0lTX0RJUyAgICAgKDE8PDIwKQkvKiBFZGdlIGludGVydXB0IERpc2FibGUgKi8KKyNkZWZpbmUgVFNJMTQ4X0xDU1JfVklDUl9FREdJU19NICAgICAgICgzPDwyMCkJLyogRWRnZSBpbnRlcnJ1cHQgTUFTSyAqLworI2RlZmluZSBUU0kxNDhfTENTUl9WSUNSX0VER0lTX0RJUyAgICAgKDE8PDIwKQkvKiBFZGdlIGludGVycnVwdCBEaXNhYmxlICovCiAjZGVmaW5lIFRTSTE0OF9MQ1NSX1ZJQ1JfRURHSVNfSVJRMSAgICAoMjw8MjApCS8qIElSUTEgdG8gRWRnZSAqLwogI2RlZmluZSBUU0kxNDhfTENTUl9WSUNSX0VER0lTX0lSUTIgICAgKDM8PDIwKQkvKiBJUlEyIHRvIEVkZ2UgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3ZtZS92bWVfYXBpLnR4dCBiL2RyaXZlcnMvc3RhZ2luZy92bWUvdm1lX2FwaS50eHQKaW5kZXggYTkxMGEwYy4uNDkxMGU5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3ZtZS92bWVfYXBpLnR4dAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL3ZtZV9hcGkudHh0CkBAIC02LDcgKzYsNyBAQAogCiBBcyB3aXRoIG90aGVyIHN1YnN5c3RlbXMgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIFZNRSBkZXZpY2UgZHJpdmVycyByZWdpc3Rlcgogd2l0aCB0aGUgVk1FIHN1YnN5c3RlbSwgdHlwaWNhbGx5IGNhbGxlZCBmcm9tIHRoZSBkZXZpY2VzIGluaXQgcm91dGluZS4gIFRoaXMgaXMKLWFjaGlldmVkIHZpYSBhIGNhbGwgdG8gdGhlIGZvbGx3b2luZyBmdW5jdGlvbjoKK2FjaGlldmVkIHZpYSBhIGNhbGwgdG8gdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKIAogCWludCB2bWVfcmVnaXN0ZXJfZHJpdmVyIChzdHJ1Y3Qgdm1lX2RyaXZlciAqZHJpdmVyKTsKIApAQCAtMTA4LDcgKzEwOCw3IEBACiA9PT09PT09PT09PT09PQogCiBNYXN0ZXIgd2luZG93cyBwcm92aWRlIGFjY2VzcyBmcm9tIHRoZSBsb2NhbCBwcm9jZXNzb3Jbc10gb3V0IG9udG8gdGhlIFZNRSBidXMuCi1UaGUgbnVtYmVyIG9mIHdpbmRvd3MgYXZhaWxhYmxlIGFuZCB0aGUgYXZhaWxhYmxlIGFjY2VzcyBtb2RlcyBpcyBkZXBlbmRhbnQgb24KK1RoZSBudW1iZXIgb2Ygd2luZG93cyBhdmFpbGFibGUgYW5kIHRoZSBhdmFpbGFibGUgYWNjZXNzIG1vZGVzIGlzIGRlcGVuZGVudCBvbgogdGhlIHVuZGVybHlpbmcgY2hpcHNldC4gQSB3aW5kb3cgbXVzdCBiZSBjb25maWd1cmVkIGJlZm9yZSBpdCBjYW4gYmUgdXNlZC4KIAogCkBAIC0xNjMsNyArMTYzLDcgQEAKIAogU2xhdmUgd2luZG93cyBwcm92aWRlIGRldmljZXMgb24gdGhlIFZNRSBidXMgYWNjZXNzIGludG8gbWFwcGVkIHBvcnRpb25zIG9mIHRoZQogbG9jYWwgbWVtb3J5LiBUaGUgbnVtYmVyIG9mIHdpbmRvd3MgYXZhaWxhYmxlIGFuZCB0aGUgYWNjZXNzIG1vZGVzIHRoYXQgY2FuIGJlCi11c2VkIGlzIGRlcGVuZGFudCBvbiB0aGUgdW5kZXJseWluZyBjaGlwc2V0LiBBIHdpbmRvdyBtdXN0IGJlIGNvbmZpZ3VyZWQgYmVmb3JlCit1c2VkIGlzIGRlcGVuZGVudCBvbiB0aGUgdW5kZXJseWluZyBjaGlwc2V0LiBBIHdpbmRvdyBtdXN0IGJlIGNvbmZpZ3VyZWQgYmVmb3JlCiBpdCBjYW4gYmUgdXNlZC4KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L0tjb25maWcKaW5kZXggMDYxZTczMC4uYzNiYTY5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBWVDY2NTUKICAgIHRyaXN0YXRlICJWSUEgVGVjaG5vbG9naWVzIFZUNjY1NSBzdXBwb3J0IgotICAgZGVwZW5kcyBvbiBQQ0kgJiYgV0xBTgorICAgZGVwZW5kcyBvbiBQQ0kgJiYgV0xBTiAmJiBtCiAgICBzZWxlY3QgV0lSRUxFU1NfRVhUCiAgICBzZWxlY3QgV0VYVF9QUklWCiAgICAtLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvY2FyZC5jCmluZGV4IDk1MWEzYTguLjI3MjFlMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvY2FyZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvY2FyZC5jCkBAIC0xMTg2LDcgKzExODYsNyBAQAogICAgICAgICAgICAgd0R1cmF0aW9uICs9IDE7IC8vIDEgVFUgZm9yIGNoYW5uZWwgc3dpdGNoaW5nCiAKICAgICAgICAgICAgIGlmICgoTE9EV09SRChxd1N0YXJ0VFNGKSA9PSAwKSAmJiAoSElEV09SRChxd1N0YXJ0VFNGKSA9PSAwKSkgewotICAgICAgICAgICAgICAgIC8vIHN0YXJ0IGltZWRpYXRlbHkgYnkgc2V0dGluZyBzdGFydCBUU0YgPT0gY3VycmVudCBUU0YgKyAyIFRVCisgICAgICAgICAgICAgICAgLy8gc3RhcnQgaW1tZWRpYXRlbHkgYnkgc2V0dGluZyBzdGFydCBUU0YgPT0gY3VycmVudCBUU0YgKyAyIFRVCiAgICAgICAgICAgICAgICAgTE9EV09SRChxd1N0YXJ0VFNGKSA9IExPRFdPUkQocXdDdXJyVFNGKSArIDIwNDg7CiAgICAgICAgICAgICAgICAgSElEV09SRChxd1N0YXJ0VFNGKSA9IEhJRFdPUkQocXdDdXJyVFNGKTsKICAgICAgICAgICAgICAgICBpZiAoTE9EV09SRChxd0N1cnJUU0YpID4gTE9EV09SRChxd1N0YXJ0VFNGKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2VfbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2VfbWFpbi5jCmluZGV4IGVmYWYxOWIuLmFkMzljODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGV2aWNlX21haW4uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZV9tYWluLmMKQEAgLTEzNyw3ICsxMzcsNyBAQAogLyogSVBfYnl0ZV9hbGlnbltdIGlzIHVzZWQgZm9yIElQIGhlYWRlciB1bnNpZ25lZCBsb25nIGJ5dGUgYWxpZ25lZAogICAgMDogaW5kaWNhdGUgdGhlIElQIGhlYWRlciB3b24ndCBiZSB1bnNpZ25lZCBsb25nIGJ5dGUgYWxpZ25lZC4oRGVmYXVsdCkgLgogICAgMTogaW5kaWNhdGUgdGhlIElQIGhlYWRlciB3aWxsIGJlIHVuc2lnbmVkIGxvbmcgYnl0ZSBhbGlnbmVkLgotICAgICAgSW4gc29tZSBlbnZpcm9tZW50LCB0aGUgSVAgaGVhZGVyIHNob3VsZCBiZSB1bnNpZ25lZCBsb25nIGJ5dGUgYWxpZ25lZCwKKyAgICAgIEluIHNvbWUgZW52aXJvbm1lbnQsIHRoZSBJUCBoZWFkZXIgc2hvdWxkIGJlIHVuc2lnbmVkIGxvbmcgYnl0ZSBhbGlnbmVkLAogICAgICAgb3IgdGhlIHBhY2tldCB3aWxsIGJlIGRyb3BlZCB3aGVuIHdlIHJlY2VpdmUgaXQuIChlZzogSVBWUykKICovCiBERVZJQ0VfUEFSQU0oSVBfYnl0ZV9hbGlnbiwiRW5hYmxlIElQIGhlYWRlciBkd29yZCBhbGlnbmVkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3djbWQuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd2NtZC5jCmluZGV4IGFiZDY3NDUuLmMzMDE3MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd2NtZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd2NtZC5jCkBAIC01ODcsNyArNTg3LDcgQEAKICAgICAgICAgICAgIGlmICgocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX1NUQSkgJiYgKHBNZ210LT5lQ3VyclN0YXRlID09IFdNQUNfU1RBVEVfSk9JTlRFRCkpIHsKIAogCQkvLyBDYWxsIG1nciB0byBiZWdpbiB0aGUgZGVhdXRoZW50aWNhdGlvbgotICAgICAgICAgICAgICAgIC8vIHJlYXNvbiA9ICgzKSBiZWFjdXNlIHN0YSBoYXMgbGVmdCBFU1MKKyAgICAgICAgICAgICAgICAvLyByZWFzb24gPSAoMykgYmVjYXVzZSBzdGEgaGFzIGxlZnQgRVNTCiAgICAgICAgICAgICAgICAgaWYgKHBNZ210LT5lQ3VyclN0YXRlPj0gV01BQ19TVEFURV9BVVRIKSB7CiAgICAgICAgICAgICAgICAgICAgIHZNZ3JEZUF1dGhlbkJlZ2luU3RhKCh2b2lkICopcERldmljZSwgcE1nbXQsIHBNZ210LT5hYnlDdXJyQlNTSUQsICgzKSwgJlN0YXR1cyk7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93bWdyLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dtZ3IuaAppbmRleCAxNDFlODBiLi5lM2FlNTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dtZ3IuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dtZ3IuaApAQCAtMjIwLDcgKzIyMCw3IEBACiAqLwogCiAKLS8vIFR4IE1hbmFnbWVudCBQYWNrZXQgZGVzY3JpcHRvcgorLy8gVHggTWFuYWdlbWVudCBQYWNrZXQgZGVzY3JpcHRvcgogdHlwZWRlZiBzdHJ1Y3QgdGFnU1R4TWdtdFBhY2tldCB7CiAKICAgICBQVVdMQU5fODAyMTFIRFIgICAgIHA4MDIxMUhlYWRlcjsKQEAgLTIzMCw3ICsyMzAsNyBAQAogfSBTVHhNZ210UGFja2V0LCAqUFNUeE1nbXRQYWNrZXQ7CiAKIAotLy8gUnggTWFuYWdtZW50IFBhY2tldCBkZXNjcmlwdG9yCisvLyBSeCBNYW5hZ2VtZW50IFBhY2tldCBkZXNjcmlwdG9yCiB0eXBlZGVmIHN0cnVjdCB0YWdTUnhNZ210UGFja2V0IHsKIAogICAgIFBVV0xBTl84MDIxMUhEUiAgICAgcDgwMjExSGVhZGVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9LY29uZmlnCmluZGV4IGE0NDFiYTUuLmY4OWFiMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgVlQ2NjU2CiAJdHJpc3RhdGUgIlZJQSBUZWNobm9sb2dpZXMgVlQ2NjU2IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgV0xBTgorCWRlcGVuZHMgb24gVVNCICYmIFdMQU4gJiYgbQogCXNlbGVjdCBXSVJFTEVTU19FWFQKIAlzZWxlY3QgV0VYVF9QUklWCiAJc2VsZWN0IEZXX0xPQURFUgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9yeHR4LmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3J4dHguYwppbmRleCA4ZjE4NTc4Li41MTg1ZDYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3J4dHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3J4dHguYwpAQCAtMTkzOCw3ICsxOTM4LDcgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IENNRF9TVEFUVVNfUEVORElORyBpZiBNQUMgVHggcmVzb3VyY2UgYXZhbGlhYmxlOyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogQ01EX1NUQVRVU19QRU5ESU5HIGlmIE1BQyBUeCByZXNvdXJjZSBhdmFpbGFibGU7IG90aGVyd2lzZSBGQUxTRQogICoKIC0qLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3djbWQuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd2NtZC5jCmluZGV4IGI4M2I2NjAuLjAxOWZiNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd2NtZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd2NtZC5jCkBAIC00MjEsNyArNDIxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPmVTY2FuU3RhdGUgPSBXTUFDX0lTX1NDQU5OSU5HOwogICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieVNjYW5CQlR5cGUgPSBwRGV2aWNlLT5ieUJCVHlwZTsgIC8vbHVjYXMKICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YlN0b3BEYXRhUGt0ID0gVFJVRTsKLSAgICAgICAgICAgICAgICAgICAgLy8gVHVybiBvZmYgUkNSX0JTU0lEIGZpbHRlciBldmVyeXRpbWUKKyAgICAgICAgICAgICAgICAgICAgLy8gVHVybiBvZmYgUkNSX0JTU0lEIGZpbHRlciBldmVyeSB0aW1lCiAgICAgICAgICAgICAgICAgICAgIE1BQ3ZSZWdCaXRzT2ZmKHBEZXZpY2UsIE1BQ19SRUdfUkNSLCBSQ1JfQlNTSUQpOwogICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieVJ4TW9kZSAmPSB+UkNSX0JTU0lEOwogCkBAIC02MDQsNyArNjA0LDcgQEAKICAgICAgICAgICAgIC8vIGlmIEluZnJhIG1vZGUKICAgICAgICAgICAgIGlmICgocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX1NUQSkgJiYgKHBNZ210LT5lQ3VyclN0YXRlID09IFdNQUNfU1RBVEVfSk9JTlRFRCkpIHsKICAgICAgICAgICAgICAgICAvLyBDYWxsIG1nciB0byBiZWdpbiB0aGUgZGVhdXRoZW50aWNhdGlvbgotICAgICAgICAgICAgICAgIC8vIHJlYXNvbiA9ICgzKSBiZWFjdXNlIHN0YSBoYXMgbGVmdCBFU1MKKyAgICAgICAgICAgICAgICAvLyByZWFzb24gPSAoMykgYmVjYXVzZSBzdGEgaGFzIGxlZnQgRVNTCiAJICAgICAgaWYgKHBNZ210LT5lQ3VyclN0YXRlID49IFdNQUNfU1RBVEVfQVVUSCkgewogCQl2TWdyRGVBdXRoZW5CZWdpblN0YSgodm9pZCAqKXBEZXZpY2UsCiAJCQkJICAgICBwTWdtdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd21nci5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93bWdyLmgKaW5kZXggNTk0ZjNhOC4uMTNkZmIzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93bWdyLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93bWdyLmgKQEAgLTIxOCw3ICsyMTgsNyBAQAogCiAKIAotLy8gVHggTWFuYWdtZW50IFBhY2tldCBkZXNjcmlwdG9yCisvLyBUeCBNYW5hZ2VtZW50IFBhY2tldCBkZXNjcmlwdG9yCiB0eXBlZGVmIHN0cnVjdCB0YWdTVHhNZ210UGFja2V0IHsKIAogICAgIFBVV0xBTl84MDIxMUhEUiAgICAgcDgwMjExSGVhZGVyOwpAQCAtMjI4LDcgKzIyOCw3IEBACiB9IFNUeE1nbXRQYWNrZXQsICpQU1R4TWdtdFBhY2tldDsKIAogCi0vLyBSeCBNYW5hZ21lbnQgUGFja2V0IGRlc2NyaXB0b3IKKy8vIFJ4IE1hbmFnZW1lbnQgUGFja2V0IGRlc2NyaXB0b3IKIHR5cGVkZWYgc3RydWN0IHRhZ1NSeE1nbXRQYWNrZXQgewogCiAgICAgUFVXTEFOXzgwMjExSERSICAgICBwODAyMTFIZWFkZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FwaS9zcmMvY3lhc2RtYS5jIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9hcGkvc3JjL2N5YXNkbWEuYwppbmRleCAxNmI4ZWMxLi5jNDYxZDRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FwaS9zcmMvY3lhc2RtYS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXBpL3NyYy9jeWFzZG1hLmMKQEAgLTEwODIsNyArMTA4Miw3IEBACiAJLyoKIAkgKiBpZiB0aGUgZGF0YSByZWNlaXZlZCBleGNlZWRzIHRoZSBzaXplIG9mIHRoZSBETUEgYnVmZmVyLAogCSAqIGNsaXAgdGhlIGRhdGEgdG8gdGhlIHNpemUgb2YgdGhlIGJ1ZmZlci4gIHRoaXMgY2FuIGxlYWQKLQkgKiB0byBsb29zaW5nIHNvbWUgZGF0YSwgYnV0IGlzIG5vdCBkaWZmZXJlbnQgdGhhbiBkb2luZworCSAqIHRvIGxvc2luZyBzb21lIGRhdGEsIGJ1dCBpcyBub3QgZGlmZmVyZW50IHRoYW4gZG9pbmcKIAkgKiBub24tcGFja2V0IHJlYWRzIG9uIHRoZSBvdGhlciBlbmRwb2ludHMuCiAJICovCiAJaWYgKGRzaXplID4gZG1hX3AtPnNpemUgLSBkbWFfcC0+b2Zmc2V0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9hcGkvc3JjL2N5YXNsZXAycGVwLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FwaS9zcmMvY3lhc2xlcDJwZXAuYwppbmRleCA2MGI2ZjM1Li43NjgyMWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FwaS9zcmMvY3lhc2xlcDJwZXAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FwaS9zcmMvY3lhc2xlcDJwZXAuYwpAQCAtMTI2LDcgKzEyNiw3IEBACiAJY3lfYXNfcGh5c2ljYWxfZW5kcG9pbnRfc3RhdGUgZGVzaXJlZDsKIAogCS8qCi0JICogbm90ZSwgdGhlcmUgaXMgbm8gZXJyb3IgY2hlY2tpbmcgaGVyZSBiZWN1YXNlCisJICogbm90ZSwgdGhlcmUgaXMgbm8gZXJyb3IgY2hlY2tpbmcgaGVyZSBiZWNhdXNlCiAJICogSVNPIGVycm9yIGNoZWNraW5nIGhhcHBlbnMgd2hlbiB0aGUgQVBJIGlzIGNhbGxlZC4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9hcGkvc3JjL2N5YXNsb3dsZXZlbC5jIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9hcGkvc3JjL2N5YXNsb3dsZXZlbC5jCmluZGV4IGQ0M2RkODUuLjk2YTg2ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXBpL3NyYy9jeWFzbG93bGV2ZWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FwaS9zcmMvY3lhc2xvd2xldmVsLmMKQEAgLTQzMiw3ICs0MzIsNyBAQAogKiBpcyByZWNlaXZlZC4gIFdoZW4gYSBjb21wbGV0ZSByZXF1ZXN0IGlzIHJlY2VpdmVkLCB0aGUgY2FsbGJhY2sKICogYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3RzIG9uIHRoYXQgY29udGV4dCBpcyBjYWxsZWQuICBXaGVuIGEgY29tcGxldGUKICogcmVzcG9uc2UgaXMgcmVjZXZpZWQsIHRoZSBjYWxsYmFjayBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QgdGhhdAotKiBnZW5lcmF0ZWQgdGhlIHJlcG9uc2UgaXMgY2FsbGVkLgorKiBnZW5lcmF0ZWQgdGhlIHJlc3BvbnNlIGlzIGNhbGxlZC4KICovCiB2b2lkCiBjeV9hc19tYWlsX2JveF9pbnRlcnJ1cHRfaGFuZGxlcihjeV9hc19kZXZpY2UgKmRldl9wKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9hcGkvc3JjL2N5YXNtaXNjLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FwaS9zcmMvY3lhc21pc2MuYwppbmRleCA3ODUyNDEwLi40NTY0ZmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FwaS9zcmMvY3lhc21pc2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FwaS9zcmMvY3lhc21pc2MuYwpAQCAtNDI4LDcgKzQyOCw3IEBACiAJCQkJaWYgKHYgJiBDWV9BU19NRU1fUDBfVk1fU0VUX0NGR01PREUpCiAJCQkJCWN5X2FzX2hhbF9wcmludF9tZXNzYWdlKAogCQkJCQkiaW5pdGlhbGl6YXRpb24gbWVzc2FnZSAiCi0JCQkJCSJyZWNpZXZlZCwgYnV0IGNvbmZpZyBiaXQgIgorCQkJCQkicmVjZWl2ZWQsIGJ1dCBjb25maWcgYml0ICIKIAkJCQkJInN0aWxsIHNldFxuIik7CiAKIAkJCQl2ID0gY3lfYXNfaGFsX3JlYWRfcmVnaXN0ZXIoZGV2X3AtPnRhZywKQEAgLTQzNiw3ICs0MzYsNyBAQAogCQkJCWlmICgodiAmIENZX0FTX01FTV9SU1RfUlNUQ01QVCkgPT0gMCkKIAkJCQkJY3lfYXNfaGFsX3ByaW50X21lc3NhZ2UoCiAJCQkJCSJpbml0aWFsaXphdGlvbiBtZXNzYWdlICIKLQkJCQkJInJlY2lldmVkLCBidXQgcmVzZXQgY29tcGxldGUgIgorCQkJCQkicmVjZWl2ZWQsIGJ1dCByZXNldCBjb21wbGV0ZSAiCiAJCQkJCSJiaXQgc3RpbGwgbm90IHNldFxuIik7CiAJCQl9CiAJCQlicmVhazsKQEAgLTIzODEsNyArMjM4MSw3IEBACiAJLyoKIAkgKiByZWxlYXNlIHRoZSB3ZXN0IGJyaWRnZSBtaWNyby1fY29udHJvbGxlciBmcm9tIHJlc2V0LAogCSAqIHNvIHRoYXQgZmlybXdhcmUgaW5pdGlhbGl6YXRpb24gY2FuIGNvbXBsZXRlLiB0aGUgYXR0ZW1wdAotCSAqIHRvIHJlbGVhc2UgYW50aW9jaCByZXNldCBpcyBtYWRlIHVwdG8gOCB0aW1lcy4KKwkgKiB0byByZWxlYXNlIGFudGlvY2ggcmVzZXQgaXMgbWFkZSB1cCB0byA4IHRpbWVzLgogCSAqLwogCXYgPSAweDAzOwogCWNvdW50ID0gMHgwODsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXBpL3NyYy9jeWFzbXRwLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FwaS9zcmMvY3lhc210cC5jCmluZGV4IDM2ODk4NDYuLjg1OTgzNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXBpL3NyYy9jeWFzbXRwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9hcGkvc3JjL2N5YXNtdHAuYwpAQCAtMzQ2LDcgKzM0Niw3IEBACiAKIAkJZGV2X3AtPm10cF9ldmVudF9jYiA9IGV2ZW50X2NfYjsKIAkJLyoKLQkJKiB3ZSByZWdpc3RlciBoZXJlIGJlY3Vhc2UgdGhlIHN0YXJ0IHJlcXVlc3QgbWF5IGNhdXNlCisJCSogd2UgcmVnaXN0ZXIgaGVyZSBiZWNhdXNlIHRoZSBzdGFydCByZXF1ZXN0IG1heSBjYXVzZQogCQkqIGV2ZW50cyB0byBvY2N1ciBiZWZvcmUgdGhlIHJlc3BvbnNlIHRvIHRoZSBzdGFydCByZXF1ZXN0LgogCQkqLwogCQljeV9hc19sbF9yZWdpc3Rlcl9yZXF1ZXN0X2NhbGxiYWNrKGRldl9wLApAQCAtNDI0LDcgKzQyNCw3IEBACiAJCWdvdG8gZGVzdHJveTsKIAogCS8qCi0JKiB3ZSBzdWNlc3NmdWxseSBzaHV0ZG93biB0aGUgc3RhY2ssIHNvIGRlY3JlbWVudAorCSogd2Ugc3VjY2Vzc2Z1bGx5IHNodXRkb3duIHRoZSBzdGFjaywgc28gZGVjcmVtZW50CiAJKiB0byBtYWtlIHRoZSBjb3VudCB6ZXJvLgogCSovCiAJZGV2X3AtPm10cF9jb3VudC0tOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9hcGkvc3JjL2N5YXNzdG9yYWdlLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FwaS9zcmMvY3lhc3N0b3JhZ2UuYwppbmRleCAyNDUxNDA0Li43YWJkNmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FwaS9zcmMvY3lhc3N0b3JhZ2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FwaS9zcmMvY3lhc3N0b3JhZ2UuYwpAQCAtMTc3Myw3ICsxNzczLDcgQEAKIAlpZiAodW5pdCA+IDI1NSkKIAkJcmV0dXJuIENZX0FTX0VSUk9SX05PX1NVQ0hfVU5JVDsKIAotCS8qIFdlIGFyZSBzdXBwb3NlZCB0byByZXR1cm4gc3VjZXNzIGlmIHRoZSBudW1iZXIgb2YKKwkvKiBXZSBhcmUgc3VwcG9zZWQgdG8gcmV0dXJuIHN1Y2Nlc3MgaWYgdGhlIG51bWJlciBvZgogCSogYmxvY2tzIGlzIHplcm8KIAkqLwogCWlmIChudW1fYmxvY2tzID09IDApIHsKQEAgLTE5NjksNyArMTk2OSw3IEBACiAJaWYgKGN5X2FzX2RldmljZV9pc191c2JfYXN5bmNfcGVuZGluZyhkZXZfcCwgNikpCiAJCXJldHVybiBDWV9BU19FUlJPUl9BU1lOQ19QRU5ESU5HOwogCi0JLyogV2UgYXJlIHN1cHBvc2VkIHRvIHJldHVybiBzdWNlc3MgaWYgdGhlIG51bWJlciBvZgorCS8qIFdlIGFyZSBzdXBwb3NlZCB0byByZXR1cm4gc3VjY2VzcyBpZiB0aGUgbnVtYmVyIG9mCiAJKiBibG9ja3MgaXMgemVybwogCSovCiAJaWYgKG51bV9ibG9ja3MgPT0gMCkKQEAgLTMyODUsNyArMzI4NSw3IEBACiAJaWYgKGNhbGxiYWNrID09IDApCiAJCXJldHVybiBDWV9BU19FUlJPUl9OVUxMX0NBTExCQUNLOwogCi0JLyogV2UgYXJlIHN1cHBvc2VkIHRvIHJldHVybiBzdWNlc3MgaWYgdGhlIG51bWJlciBvZgorCS8qIFdlIGFyZSBzdXBwb3NlZCB0byByZXR1cm4gc3VjY2VzcyBpZiB0aGUgbnVtYmVyIG9mCiAJICogYmxvY2tzIGlzIHplcm8KIAkgKi8KIAlpZiAoKChtaXNjX2J1ZiZDWV9TRElPX0JMT0NLTU9ERSkgIT0gMCkgJiYgKGFyZ3VtZW50ID09IDApKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FwaS9zcmMvY3lhc3VzYi5jIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9hcGkvc3JjL2N5YXN1c2IuYwppbmRleCA5MmVhNDI1Li4xYjU1ZTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FwaS9zcmMvY3lhc3VzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXBpL3NyYy9jeWFzdXNiLmMKQEAgLTczOSw3ICs3MzksNyBAQAogCQljeV9hc191c2JfcmVzZXRfZV9wMF9zdGF0ZShkZXZfcCk7CiAKIAkJLyoKLQkJKiB3ZSByZWdpc3RlciBoZXJlIGJlY3Vhc2UgdGhlIHN0YXJ0IHJlcXVlc3QgbWF5IGNhdXNlCisJCSogd2UgcmVnaXN0ZXIgaGVyZSBiZWNhdXNlIHRoZSBzdGFydCByZXF1ZXN0IG1heSBjYXVzZQogCQkqIGV2ZW50cyB0byBvY2N1ciBiZWZvcmUgdGhlIHJlc3BvbnNlIHRvIHRoZSBzdGFydCByZXF1ZXN0LgogCQkqLwogCQljeV9hc19sbF9yZWdpc3Rlcl9yZXF1ZXN0X2NhbGxiYWNrKGRldl9wLApAQCAtODY3LDcgKzg2Nyw3IEBACiAJCWdvdG8gZGVzdHJveTsKIAogCS8qCi0JICogd2Ugc3VjZXNzZnVsbHkgc2h1dGRvd24gdGhlIHN0YWNrLCBzbworCSAqIHdlIHN1Y2Nlc3NmdWxseSBzaHV0ZG93biB0aGUgc3RhY2ssIHNvCiAJICogZGVjcmVtZW50IHRvIG1ha2UgdGhlIGNvdW50IHplcm8uCiAJICovCiAJY3lfYXNfdXNiX2NsZWFudXAoZGV2X3ApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9hcmNoL2FybS9tYWNoLW9tYXAyL2N5YXNoYWxvbWFwX2tlcm5lbC5jIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9hcmNoL2FybS9tYWNoLW9tYXAyL2N5YXNoYWxvbWFwX2tlcm5lbC5jCmluZGV4IDIxY2RiMDYuLjNiY2VkY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jeWFzaGFsb21hcF9rZXJuZWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FyY2gvYXJtL21hY2gtb21hcDIvY3lhc2hhbG9tYXBfa2VybmVsLmMKQEAgLTg3LDcgKzg3LDcgQEAKIAogCiAvKgotICogRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIHdlIGhhbmRsZSBzdG9yYWdlIGVuZHBvaW50IHRyYW5zZmVycyB1cHRvIDQgS0IKKyAqIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCB3ZSBoYW5kbGUgc3RvcmFnZSBlbmRwb2ludCB0cmFuc2ZlcnMgdXAgdG8gNCBLQgogICogd2l0aGluIHRoZSBIQUwgaXRzZWxmLgogICovCiAgI2RlZmluZSBDWUFTU1RPUkFHRV9XUklURV9FUF9OVU0JKDQpCkBAIC0xMDgsMTIgKzEwOCwxMiBAQAogCQkJCSgoZXApID09IDYpIHx8ICgoZXApID09IDgpKQogCiAvKgotICogcGVyc2lzdGFudCwgc3RvcmVzIGN1cnJlbnQgR1BNQyBpbnRlcmZhY2UgY2ZnIG1vZGUKKyAqIHBlcnNpc3RlbnQsIHN0b3JlcyBjdXJyZW50IEdQTUMgaW50ZXJmYWNlIGNmZyBtb2RlCiAgKi8KIHN0YXRpYyB1aW50OF90IHBuYW5kXzE2Yml0OwogCiAvKgotICoga2VlcCBwcm9jZXNzaW5nIG5ldyBXQiBEUlEgaW4gSVNSIHVudGlsbCBhbGwgaGFuZGxlZCAocGVyZm9ybWFuY2UgZmVhdHVyZSkKKyAqIGtlZXAgcHJvY2Vzc2luZyBuZXcgV0IgRFJRIGluIElTUiB1bnRpbCBhbGwgaGFuZGxlZCAocGVyZm9ybWFuY2UgZmVhdHVyZSkKICAqLwogI2RlZmluZSBQUk9DRVNTX01VTFRJUExFX0RSUV9JTl9JU1IgKDEpCiAKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCSAqIGRtYV94ZmVyX3N6IC0gc2l6ZSBvZiB0aGUgbmV4dCBkbWEgeGZlciBvbiBQIHBvcnQKIAkgKiBzZWdfeGZlcl9jbnQgLSAgY291bnRzIHhmZXJlZCBieXRlcyBmb3IgaW4gY3VycmVudCBzZ19saXN0CiAJICoJCW1lbW9yeSBzZWdtZW50Ci0JICogcmVxX3hmZXJfY250IC0gdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVyZWQgc28gZmFyIGluCisJICogcmVxX3hmZXJfY250IC0gdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIHNvIGZhciBpbgogCSAqCQljdXJyZW50IHJlcXVlc3QKIAkgKiByZXFfbGVuZ3RoIC0gdG90YWwgcmVxdWVzdCBsZW5ndGgKIAkgKi8KQEAgLTIxNjAsNyArMjE2MCw3IEBACiAvKgogICogVGhpcyBmdW5jdGlvbiBpcyBleHBlY3RlZCB0byBjcmVhdGUgYSBzbGVlcCBjaGFubmVsLgogICogVGhlIGRhdGEgc3RydWN0dXJlIHRoYXQgcmVwcmVzZW50cyB0aGUgc2xlZXAgY2hhbm5lbCBvYmplY3QKLSAqIHNsZWVwIGNoYW5uZWwgKHdoaWNoIGlzIExpbnV4ICJ3YWl0X3F1ZXVlX2hlYWRfdCB3cSIgZm9yIHRoaXMgcGF0aWN1bGFyIEhBTCkKKyAqIHNsZWVwIGNoYW5uZWwgKHdoaWNoIGlzIExpbnV4ICJ3YWl0X3F1ZXVlX2hlYWRfdCB3cSIgZm9yIHRoaXMgcGFydGljdWxhciBIQUwpCiAgKiBwYXNzZWQgYXMgYSBwb2ludGVyLCBhbmQgYWxscG9jYXRlZCBieSB0aGUgY2FsbGVyCiAgKiAodHlwaWNhbGx5IGFzIGEgbG9jYWwgdmFyIG9uIHRoZSBzdGFjaykgIkNyZWF0ZSIgd29yZCBzaG91bGQgcmVhZCBhcwogICogIlNsZWVwT24iLCB0aGlzIGZ1bmMgZG9lc24ndCBhY3R1YWxseSBjcmVhdGUgYW55dGhpbmcKQEAgLTIzNjQsNyArMjM2NCw3IEBACiAJICovCiAJY3lfYXNfaGFsX2dwbWNfZW5hYmxlXzE2Yml0X2J1cyhjeV90cnVlKTsKICNlbHNlCi0gICAvKiBBc3RvcmlhIGFuZCBHUE1DIGFyZSBhbHJlYWR5IGluIDggYml0IG1vZGUsIGpzdXQgaW5pdGlhbGl6ZSBQTkFORF9DRkcgKi8KKyAgIC8qIEFzdG9yaWEgYW5kIEdQTUMgYXJlIGFscmVhZHkgaW4gOCBiaXQgbW9kZSwganVzdCBpbml0aWFsaXplIFBOQU5EX0NGRyAqLwogCWFzdF9wX25hbmRfY2FzZGlfd3JpdGUoQ1lfQVNfTUVNX1BOQU5EX0NGRywgMHgwMDAwKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvd2VzdGJyaWRnZS93ZXN0YnJpZGdlLW9tYXAzLXBuYW5kLWhhbC9jeWFzaGFsb21hcF9rZXJuZWwuaCBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC93ZXN0YnJpZGdlL3dlc3RicmlkZ2Utb21hcDMtcG5hbmQtaGFsL2N5YXNoYWxvbWFwX2tlcm5lbC5oCmluZGV4IDgwZGQ1MzAuLjY0MjZlYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC93ZXN0YnJpZGdlL3dlc3RicmlkZ2Utb21hcDMtcG5hbmQtaGFsL2N5YXNoYWxvbWFwX2tlcm5lbC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC93ZXN0YnJpZGdlL3dlc3RicmlkZ2Utb21hcDMtcG5hbmQtaGFsL2N5YXNoYWxvbWFwX2tlcm5lbC5oCkBAIC0yMCw3ICsyMCw3IEBACiAqLwogCiAvKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbnRpb24gb2YgdGhlIGhhcmR3YXJlIGFic3RyYWN0aW9uCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb24gb2YgdGhlIGhhcmR3YXJlIGFic3RyYWN0aW9uCiAgKiBsYXllciBvbiBPTUFQMzQzMCB0YWxraW5nIHRvIHRoZSBXZXN0IEJyaWRnZSBBc3RvcmlhIGRldmljZQogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC93ZXN0YnJpZGdlL3dlc3RicmlkZ2Utb21hcDMtcG5hbmQtaGFsL2N5YXNtZW1tYXAuaCBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC93ZXN0YnJpZGdlL3dlc3RicmlkZ2Utb21hcDMtcG5hbmQtaGFsL2N5YXNtZW1tYXAuaAppbmRleCAzZWVlMTkyLi40NmYwNmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvd2VzdGJyaWRnZS93ZXN0YnJpZGdlLW9tYXAzLXBuYW5kLWhhbC9jeWFzbWVtbWFwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3dlc3RicmlkZ2Uvd2VzdGJyaWRnZS1vbWFwMy1wbmFuZC1oYWwvY3lhc21lbW1hcC5oCkBAIC01MSw3ICs1MSw3IEBACiAgKiAJCQkJCQkJR1BNQ19BRERSCiAgKgkJCQkJCQlbQTg6QTFdLT51cERbNzowXQogICogSU5UIwktR1BNQ19uV1BfR1BJT182MgotICogREFDSwktTi9DCQkJCSBub3QgY29uZWN0ZWQKKyAqIERBQ0sJLU4vQwkJCQkgbm90IGNvbm5lY3RlZAogICogV0FLRVVQLUdQSU9fMTY3CiAgKiBSRVNFVC1HUElPXzEyNgogICogUi9CCS1HUE1DX1dBSVQyX0dQSU9fNjQKQEAgLTEwOCw3ICsxMDgsNyBAQAogCSAqCQkJCQl3aWxsIGJlIG1vbml0b3JlZAogCSAqIFBGX0VOX0VOR0lORSAtIDEtIEVOQUJMRVMgRU5HSU5FLCBidXQgaXQgbmVlZHMgdG8gYmUgc3RhcnRlZCBhZnRlcgogCSAqCQkJCQl0aGF0IEMgY3RybCByZWcgYml0IDAKLQkgKiBQRl9GSUZPX1RIUkVTSE9MRCAtIEZJRk8gdGhyZXNoaG9sZCBpbiBudW1iZXIgb2YgQlVTKDggb3IgMTYpIHdvcmRzCisJICogUEZfRklGT19USFJFU0hPTEQgLSBGSUZPIHRocmVzaG9sZCBpbiBudW1iZXIgb2YgQlVTKDggb3IgMTYpIHdvcmRzCiAJICogUEZfV0VJR0hURURfUFJJTyAgLSBOVU0gb2YgY3ljbGVzIGdyYW50ZWQgdG8gUEZFIGlmIFJORF9ST0JJTgogCSAqCQkJCQlwcmlvcml0aXphdGlvbiBpcyBlbmFibGVkCiAJICogUEZfUk9VTkRfUk9CSU4gIC0gaWYgZW5hYmxlZCwgZ2l2ZXMgcHJpb3JpdHkgdG8gb3RoZXIgQ1MsIGJ1dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9ibG9jay9jeWFzYmxrZGV2X3F1ZXVlLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2Jsb2NrL2N5YXNibGtkZXZfcXVldWUuYwppbmRleCAwYmJiOGEzLi5kMTk5NmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2Jsb2NrL2N5YXNibGtkZXZfcXVldWUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2Jsb2NrL2N5YXNibGtkZXZfcXVldWUuYwpAQCAtMjIyLDcgKzIyMiw3IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCS8qIG5ldyByZXEgcmVjaWV2ZWQsIGlzc3VlIGl0IHRvIHRoZSBkcml2ZXIgICovCisJCS8qIG5ldyByZXEgcmVjZWl2ZWQsIGlzc3VlIGl0IHRvIHRoZSBkcml2ZXIgICovCiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAKIAkJI2lmbmRlZiBXRVNUQlJJREdFX05ERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9nYWRnZXQvY3lhc2dhZGdldC5jIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9nYWRnZXQvY3lhc2dhZGdldC5jCmluZGV4IGRlZmEwNWMuLmJlODUxY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvZ2FkZ2V0L2N5YXNnYWRnZXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2dhZGdldC9jeWFzZ2FkZ2V0LmMKQEAgLTU4Nyw2ICs1ODcsNyBAQAogCQkJImN5X2FzX3VzYl9lbmRfcG9pbnRfY29uZmlnIEVQICVzIG1pc21hdGNoICIKIAkJCSJvbiBlbmFibGVkXG4iLCBhbl9lcC0+dXNiX2VwX2luc3QubmFtZSk7CiAJCSNlbmRpZgorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbl9kZXYtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2luY2x1ZGUvbGludXgvd2VzdGJyaWRnZS9jeWFzZGV2aWNlLmggYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2luY2x1ZGUvbGludXgvd2VzdGJyaWRnZS9jeWFzZGV2aWNlLmgKaW5kZXggMGMwNzI2YjYuLjY0NTJhOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXNkZXZpY2UuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2luY2x1ZGUvbGludXgvd2VzdGJyaWRnZS9jeWFzZGV2aWNlLmgKQEAgLTExOSw3ICsxMTksNyBAQAogI2RlZmluZSBDWV9BU19SRVFVRVNUX0xJU1RfU1RBVEVfUVVFVUVEICgweDAwKQogLyogVGhlIHJlcXVlc3QgaXMgc2VudCwgd2FpdGluZyBmb3IgcmVzcG9uc2UgKi8KICNkZWZpbmUgQ1lfQVNfUkVRVUVTVF9MSVNUX1NUQVRFX1dBSVRJTkcgKDB4MDEpCi0vKiBUaGUgcmVzcG9uc2UgaGFzIGJlZW4gcmVjZWl2ZWQsIHByb2Nlc3NpbmcgcmVwb25zZSAqLworLyogVGhlIHJlc3BvbnNlIGhhcyBiZWVuIHJlY2VpdmVkLCBwcm9jZXNzaW5nIHJlc3BvbnNlICovCiAjZGVmaW5lIENZX0FTX1JFUVVFU1RfTElTVF9TVEFURV9SRUNFSVZFRCAoMHgwMikKIC8qIFRoZSByZXF1ZXN0L3Jlc3BvbnNlIGlzIGJlaW5nIGNhbmNlbGVkICovCiAjZGVmaW5lIENZX0FTX1JFUVVFU1RfTElTVF9TVEFURV9DQU5DRUxJTkcgKDB4MDMpCkBAIC01MTcsNyArNTE3LDcgQEAKIAljeV9hc19sbF9yZXF1ZXN0X2xpc3Rfbm9kZSAqcmVxdWVzdF9xdWV1ZV9wOwogCS8qIFRoZSBsaXN0IG5vZGUgaW4gdGhlIHJlcXVlc3QgcXVldWUgKi8KIAljeV9hc19sbF9yZXF1ZXN0X2xpc3Rfbm9kZSAqbGFzdF9ub2RlX3A7Ci0JLyogSW5kZXggdXB0byB3aGljaCBkYXRhIGlzIHN0b3JlZC4gKi8KKwkvKiBJbmRleCB1cCB0byB3aGljaCBkYXRhIGlzIHN0b3JlZC4gKi8KIAl1aW50MTZfdCBxdWV1ZV9pbmRleDsKIAkvKiBJbmRleCB0byB0aGUgbmV4dCByZXF1ZXN0IGluIHRoZSBxdWV1ZS4gKi8KIAl1aW50MTZfdCBycXRfaW5kZXg7CkBAIC03NjgsNyArNzY4LDcgQEAKIAl1aW50MzJfdCBtdHBfY291bnQ7CiAJLyogVGhlIE1UUCBldmVudCBjYWxsYmFjayBzdXBwbGllZCBieSB0aGUgY2xpZW50ICovCiAJY3lfYXNfbXRwX2V2ZW50X2NhbGxiYWNrIG10cF9ldmVudF9jYjsKLQkvKiBUaGUgY3VycmVudCBibG9jayB0YWJsZSB0byBiZSB0cmFuc2ZlcmVkICovCisJLyogVGhlIGN1cnJlbnQgYmxvY2sgdGFibGUgdG8gYmUgdHJhbnNmZXJyZWQgKi8KIAljeV9hc19tdHBfYmxvY2tfdGFibGUgKnRwX2Jsa190Ymw7CiAKIAljeV9hc19jX2JfcXVldWUgKmZ1bmNfY2JzX210cDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXNkbWEuaCBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXNkbWEuaAppbmRleCA4ZGFiNWU5Li4xNmRjOWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2luY2x1ZGUvbGludXgvd2VzdGJyaWRnZS9jeWFzZG1hLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9pbmNsdWRlL2xpbnV4L3dlc3RicmlkZ2UvY3lhc2RtYS5oCkBAIC0xMDgsNyArMTA4LDcgQEAKICAgIGNvbXBsZXRlcyBhIHJlcXVlc3RlZCBETUEgb3BlcmF0aW9uLgogCiAgICBSZXR1cm5zCi0gICBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhlIG1vZHVsZSBpbml0aWFsaXplZCBzdWNlc3NmdWxseQorICAgQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoZSBtb2R1bGUgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5CiAgICBDWV9BU19FUlJPUl9PVVRfT0ZfTUVNT1JZIC0gbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGR1cmluZwogCQlpbml0aWFsaXphdGlvbgogICAgQ1lfQVNfRVJST1JfQUxSRUFEWV9SVU5OSU5HIC0gdGhlIERNQSBtb2R1bGUgd2FzIGFscmVhZHkgcnVubmluZwpAQCAtMTMxLDcgKzEzMSw3IEBACiAgICB0aGVuIGZyZWVpbmcgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBETUEgZW5kcG9pbnQuCiAKICAgIFJldHVybnMKLSAgIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGUgbW9kdWxlIHNodXRkb3duIHN1Y2Vzc2Z1bGx5CisgICBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhlIG1vZHVsZSBzaHV0ZG93biBzdWNjZXNzZnVsbHkKICAgIENZX0FTX0VSUk9SX05PVF9SVU5OSU5HIC0gdGhlIERNQSBtb2R1bGUgd2FzIG5vdCBydW5uaW5nCiAKICAgIFNlZSBBbHNvCkBAIC0xNjEsNyArMTYxLDcgQEAKIAogICAgUmV0dXJucwogICAgQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoZSB0cmFmZmljIG9uIHRoZSBlbmRwb2ludCBpcyBjYW5jZWxlZAotCXN1Y2Vzc2Z1bGx5CisJc3VjY2Vzc2Z1bGx5CiAKICAgIFNlZSBBbHNvCiAqLwpAQCAtMjY2LDcgKzI2Niw3IEBACiAgICB3aWxsIGhhdmUgdG8gbWFpbnRhaW4gYSBsaXN0IG9mIHNsZWVwIGNoYW5uZWxzIHRvIHdha2UuCiAKICAgIFJldHVybnMKLSAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoZSBxdWV1ZSBoYXMgZHJhaW5lZCBzdWNlc3NmdWxseQorICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhlIHF1ZXVlIGhhcyBkcmFpbmVkIHN1Y2Nlc3NmdWxseQogICAgKiBDWV9BU19FUlJPUl9JTlZBTElEX0VORFBPSU5UIC0gdGhlIGVuZHBvaW50IGdpdmVuIGlzIG5vdCB2YWxpZAogICAgKiBDWV9BU19FUlJPUl9ORVNURURfU0xFRVAgLSBDeUFzRG1hUXVldWVSZXF1ZXN0KCkgd2FzIHJlcXVlc3RlZAogICAgKglvbiBhbiBlbmRwb2ludCB3aGVyZSBDeUFzRG1hUXVldWVSZXF1ZXN0IHdhcyBhbHJlYWR5IGNhbGxlZApAQCAtMjk1LDcgKzI5NSw3IEBACiAgICBDeUFzSGFsRG1hU2V0dXBSZWFkKCkgZnVuY3RvaW5zLgogCiAgICBSZXR1cm5zCi0gICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGUgdmFsdWUgd2FzIHNldCBzdWNlc3NmdWxseQorICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhlIHZhbHVlIHdhcyBzZXQgc3VjY2Vzc2Z1bGx5CiAgICAqIENZX0FTX0VSUk9SX0lOVkFMSURfU0laRSAtIHRoZSBzaXplIHZhbHVlIHdhcyBub3QgdmFsaWQKICovCiBleHRlcm4gY3lfYXNfcmV0dXJuX3N0YXR1c190CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2luY2x1ZGUvbGludXgvd2VzdGJyaWRnZS9jeWFzZXJyLmggYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2luY2x1ZGUvbGludXgvd2VzdGJyaWRnZS9jeWFzZXJyLmgKaW5kZXggZjc4ZDYwMi4uMmNkMGFmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9pbmNsdWRlL2xpbnV4L3dlc3RicmlkZ2UvY3lhc2Vyci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXNlcnIuaApAQCAtMjksNyArMjksNyBAQAogKi8KIAogLyogU3VtbWFyeQotICAgVGhlIGZ1bmN0aW9uIGNvbXBsZXRlZCBzdWNlc3NmdWxseQorICAgVGhlIGZ1bmN0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKICovCiAjZGVmaW5lIENZX0FTX0VSUk9SX1NVQ0NFU1MJICgwKQogCkBAIC03OTYsNyArNzk2LDcgQEAKICAgIERlc2NyaXB0aW9uCiAgICBUaGlzIGVycm9yIGlzIHJldHVybmVkIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGF0dGVtcHRlZCB0aGF0IGNhbm5vdCBiZQogICAgY29tcGxldGVkIHdoaWxlIHRoZSBVU0Igc3RhY2sgaXMgY29ubmVjdGVkIHRvIGEgVVNCIGhvc3QuICBJbiBvcmRlcgotICAgdG8gc3VjZXNzZnVsbHkgY29tcGxldGUgdGhlIGRlc2lyZWQgb3BlcmF0aW9uLCBDeUFzVXNiRGlzY29ubmVjdCgpCisgICB0byBzdWNjZXNzZnVsbHkgY29tcGxldGUgdGhlIGRlc2lyZWQgb3BlcmF0aW9uLCBDeUFzVXNiRGlzY29ubmVjdCgpCiAgICBtdXN0IGJlIGNhbGxlZCB0byBkaXNjb25uZWN0IGZyb20gdGhlIGhvc3QuCiAqLwogI2RlZmluZSBDWV9BU19FUlJPUl9VU0JfQ09OTkVDVEVEICg1MykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXNoYWxkb2MuaCBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXNoYWxkb2MuaAppbmRleCAyODEzNmFkLi41YmNiZTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2luY2x1ZGUvbGludXgvd2VzdGJyaWRnZS9jeWFzaGFsZG9jLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9pbmNsdWRlL2xpbnV4L3dlc3RicmlkZ2UvY3lhc2hhbGRvYy5oCkBAIC01OTcsNyArNTk3LDcgQEAKICAgIEN5QXNIYWxTbGVlcENoYW5uZWwuCiAKICAgIFJldHVybnMKLSAgIEN5VHJ1ZSBpcyB0aGUgaW5pdGlhbGl6YXRpb24gd2FzIHN1Y2Vzc2Z1bCwgYW5kIEN5RmFsc2Ugb3RoZXJ3aXNlCisgICBDeVRydWUgaXMgdGhlIGluaXRpYWxpemF0aW9uIHdhcyBzdWNjZXNzZnVsLCBhbmQgQ3lGYWxzZSBvdGhlcndpc2UKIAogICAgU2VlIEFsc28KICAgICogQ3lBc0hhbFNsZWVwQ2hhbm5lbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9pbmNsdWRlL2xpbnV4L3dlc3RicmlkZ2UvY3lhc2ludHIuaCBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXNpbnRyLmgKaW5kZXggM2Q3MDYzZS4uNjBhNmZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9pbmNsdWRlL2xpbnV4L3dlc3RicmlkZ2UvY3lhc2ludHIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2luY2x1ZGUvbGludXgvd2VzdGJyaWRnZS9jeWFzaW50ci5oCkBAIC02OSw3ICs2OSw3IEBACiAKICAgIFJldHVybnMKICAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoZSBpbnRlcnJ1cHQgbW9kdWxlIHdhcyBzdG9wcGVkCi0gICAqCXN1Y2Vzc2Z1bGx5CisgICAqCXN1Y2Nlc3NmdWxseQogICAgKiBDWV9BU19FUlJPUl9OT1RfUlVOTklORyAtIHRoZSBpbnRlcnJ1cHQgbW9kdWxlIHdhcyBub3QKICAgICoJcnVubmluZwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2luY2x1ZGUvbGludXgvd2VzdGJyaWRnZS9jeWFzbWlzYy5oIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9pbmNsdWRlL2xpbnV4L3dlc3RicmlkZ2UvY3lhc21pc2MuaAppbmRleCAyZjA3MDE4Li5kZjdjMmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2luY2x1ZGUvbGludXgvd2VzdGJyaWRnZS9jeWFzbWlzYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXNtaXNjLmgKQEAgLTYyMCw3ICs2MjAsNyBAQAogICAgKiBOZXN0YWJsZTogWUVTCiAKICAgIFJldHVybnMKLSAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoZSBmaXJtd2FyZSB3YXMgc3VjZXNzZnVsbHkgZG93bmxvYWRlZAorICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhlIGZpcm13YXJlIHdhcyBzdWNjZXNzZnVsbHkgZG93bmxvYWRlZAogICAgKiBDWV9BU19FUlJPUl9JTlZBTElEX0hBTkRMRQogICAgKiBDWV9BU19FUlJPUl9OT1RfQ09ORklHVVJFRCAtIHRoZSBXZXN0IEJyaWRnZSBkZXZpY2UKICAgICoJd2FzIG5vdCBjb25maWd1cmVkCkBAIC04MzYsNyArODM2LDcgQEAKICAgIG93bmVyc2hpcC4KIAogICAgUmV0dXJucwotICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhlIHAgcG9ydCBzdWNlc3NmdWxseSBhY3F1aXJlZCB0aGUKKyAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoZSBwIHBvcnQgc3VjY2Vzc2Z1bGx5IGFjcXVpcmVkIHRoZQogICAgKiAJcmVzb3VyY2Ugb2YgaW50ZXJlc3QKICAgICogQ1lfQVNfRVJST1JfSU5WQUxJRF9IQU5ETEUKICAgICogQ1lfQVNfRVJST1JfTk9UX0NPTkZJR1VSRUQKQEAgLTg3OSw3ICs4NzksNyBAQAogICAgKiBWYWxpZCBJbiBBc3luY2hyb25vdXMgQ2FsbGJhY2s6IE5PCiAKICAgIFJldHVybnMKLSAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoZSBwIHBvcnQgc3VjZXNzZnVsbHkgcmVsZWFzZWQKKyAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoZSBwIHBvcnQgc3VjY2Vzc2Z1bGx5IHJlbGVhc2VkCiAgICAqCXRoZSByZXNvdXJjZSBvZiBpbnRlcmVzdAogICAgKiBDWV9BU19FUlJPUl9JTlZBTElEX0hBTkRMRQogICAgKiBDWV9BU19FUlJPUl9OT1RfQ09ORklHVVJFRApAQCAtOTI5LDcgKzkyOSw3IEBACiAKICAgIFJldHVybnMKICAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoZSB0cmFjZSBjb25maWd1cmF0aW9uIGhhcyBiZWVuCi0gICAqCXN1Y2Vzc2Z1bGx5IGNoYW5nZWQKKyAgICoJc3VjY2Vzc2Z1bGx5IGNoYW5nZWQKICAgICogQ1lfQVNfRVJST1JfTk9fU1VDSF9CVVMgLSB0aGUgYnVzIHNwZWNpZmllZCBkb2VzIG5vdCBleGlzdAogICAgKiBDWV9BU19FUlJPUl9OT19TVUNIX0RFVklDRSAtIHRoZSBzcGVjaWZpZWQgbWVkaWEvZGV2aWNlCiAgICAqCXBhaXIgZG9lcyBub3QgZXhpc3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXNwcm90b2NvbC5oIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9pbmNsdWRlL2xpbnV4L3dlc3RicmlkZ2UvY3lhc3Byb3RvY29sLmgKaW5kZXggMzE3ODA1Zi4uNzczYjY0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9pbmNsdWRlL2xpbnV4L3dlc3RicmlkZ2UvY3lhc3Byb3RvY29sLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9pbmNsdWRlL2xpbnV4L3dlc3RicmlkZ2UvY3lhc3Byb3RvY29sLmgKQEAgLTc1Niw3ICs3NTYsNyBAQAogCSAqIDEgOiBEZWJ1ZyBtb2RlCiAKICAgIERlc2NyaXB0aW9uCi0gICBUaGlzIHJlcG9uc2UgaXMgc2VudCB0byByZXR1cm4gdGhlIGZpcm13YXJlIHZlcnNpb24KKyAgIFRoaXMgcmVzcG9uc2UgaXMgc2VudCB0byByZXR1cm4gdGhlIGZpcm13YXJlIHZlcnNpb24KICAgIG51bWJlciB0byB0aGUgcmVxdWVzdG9yLgogICovCiAjZGVmaW5lIENZX1JFU1BfRklSTVdBUkVfVkVSU0lPTiAoMTYpCkBAIC0zNjU1LDcgKzM2NTUsNyBAQAogICAgVGhpcyByZXF1ZXN0IGlzIHNlbnQgdG8gdGhlIFdlc3QgQnJpZGdlIHdoZW4gdGhlIFAgcG9ydAogICAgbmVlZHMgdG8gc2VuZCBkYXRhIHRvIHRoZSBIb3N0IGluIGEgVHVyYm8gRW5kcG9pbnQuCiAgICBVcG9uIHJlY2VpdmluZyB0aGlzIGV2ZW50LCBGaXJtd2FyZSB3aWxsIG1ha2UgdGhlIGVuZCBwb2ludAotICAgYXZpbGFibGUgZm9yIHRoZSBQIHBvcnQuIElmIHRoZSBsZW5ndGggaXMgemVybywgdGhlbgorICAgYXZhaWxhYmxlIGZvciB0aGUgUCBwb3J0LiBJZiB0aGUgbGVuZ3RoIGlzIHplcm8sIHRoZW4KICAgIGZpcm13YXJlIHdpbGwgc2VuZCBhIHplcm8gbGVuZ3RoIHBhY2tldC4KIAogICAgRGlyZWN0aW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2luY2x1ZGUvbGludXgvd2VzdGJyaWRnZS9jeWFzc3RvcmFnZS5oIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9pbmNsdWRlL2xpbnV4L3dlc3RicmlkZ2UvY3lhc3N0b3JhZ2UuaAppbmRleCA2NGYwNzhjLi41MmI5M2MzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2luY2x1ZGUvbGludXgvd2VzdGJyaWRnZS9jeWFzc3RvcmFnZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXNzdG9yYWdlLmgKQEAgLTgzMiw3ICs4MzIsNyBAQAogICAgKiBDWV9BU19FUlJPUl9OT19GSVJNV0FSRSAtIHRoZSBmaXJtd2FyZSBoYXMgbm90IGJlZW4KICAgICoJbG9hZGVkIGludG8gV2VzdCBCcmlkZ2UKICAgICogQ1lfQVNfRVJST1JfSU5WQUxJRF9IQU5ETEUgLSBhbiBpbnZhbGlkIGhhbmRsZSB3YXMgcGFzc2VkIGluCi0gICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGUgbW9kdWxlIHN0YXJ0ZWQgc3VjZXNzZnVsbHkKKyAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoZSBtb2R1bGUgc3RhcnRlZCBzdWNjZXNzZnVsbHkKICAgICogQ1lfQVNfRVJST1JfVElNRU9VVCAtIGEgdGltZW91dCBvY2N1cnJlZCBjb21tdW5pY2F0aW5nCiAgICAqCXdpdGggdGhlIFdlc3QgQnJpZGdlIGRldmljZQogICAgKiBDWV9BU19FUlJPUl9PVVRfT0ZfTUVNT1JZCkBAIC04ODIsNyArODgyLDcgQEAKICAgICogQ1lfQVNfRVJST1JfSU5WQUxJRF9IQU5ETEUgLSBhbiBpbnZhbGlkIGhhbmRsZSB3YXMKICAgICoJcGFzc2VkIGluCiAgICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGlzIG1vZHVsZSB3YXMgc2h1dAotICAgKglkb3duIHN1Y2Vzc2Z1bGx5CisgICAqCWRvd24gc3VjY2Vzc2Z1bGx5CiAgICAqIENZX0FTX0VSUk9SX1RJTUVPVVQgLSBhIHRpbWVvdXQgb2NjdXJyZWQKICAgICoJY29tbXVuaWNhdGluZyB3aXRoIHRoZSBXZXN0IEJyaWRnZSBkZXZpY2UKICAgICogQ1lfQVNfRVJST1JfTk9UX1JVTk5JTkcKQEAgLTkzNCw3ICs5MzQsNyBAQAogICAgKiBDWV9BU19FUlJPUl9JTlZBTElEX0hBTkRMRSAtIGFuIGludmFsaWQgaGFuZGxlCiAgICAqCXdhcyBwYXNzZWQgaW4KICAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoZSBmdW5jdGlvbiB3YXMgcmVnaXN0ZXJlZAotICAgKglzdWNlc3NmdWxseQorICAgKglzdWNjZXNzZnVsbHkKICAgICogQ1lfQVNfRVJST1JfTk9UX1JVTk5JTkcgLSB0aGUgc3RhY2sgaXMgbm90IHJ1bm5pbmcKIAogICAgU2VlIEFsc28KQEAgLTk4MSw3ICs5ODEsNyBAQAogICAgKgliZWVuIHN0YXJ0ZWQKICAgICogQ1lfQVNfRVJST1JfSU5WQUxJRF9IQU5ETEUgLSBhbiBpbnZhbGlkIGhhbmRsZSB3YXMKICAgICoJcGFzc2VkIGluCi0gICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGlzIHJlcXVlc3Qgd2FzIHN1Y2Vzc2Z1bGx5CisgICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGlzIHJlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWxseQogICAgKgl0cmFuc21pdHRlZCB0byB0aGUgV2VzdCBCcmlkZ2UgZGV2aWNlCiAgICAqIENZX0FTX0VSUk9SX1RJTUVPVVQgLSBhIHRpbWVvdXQgb2NjdXJyZWQgY29tbXVuaWNhdGluZwogICAgKgl3aXRoIHRoZSBXZXN0IEJyaWRnZSBkZXZpY2UKQEAgLTEwMzQsNyArMTAzNCw3IEBACiAgICAqCWJlZW4gc3RhcnRlZAogICAgKiBDWV9BU19FUlJPUl9JTlZBTElEX0hBTkRMRSAtIGFuIGludmFsaWQgaGFuZGxlCiAgICAqCXdhcyBwYXNzZWQgaW4KLSAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoZSBtZWRpYSB3YXMgc3VjZXNzZnVsbHkKKyAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoZSBtZWRpYSB3YXMgc3VjY2Vzc2Z1bGx5CiAgICAqCXJlbGVhc2VkCiAgICAqIENZX0FTX0VSUk9SX01FRElBX05PVF9DTEFJTUVEIC0gdGhlIG1lZGlhIHdhcyBub3QKICAgICoJY2xhaW1lZCBieSB0aGUgUCBwb3J0CkBAIC0xOTA1LDcgKzE5MDUsNyBAQAogICAgZGlmZmVyIGJldHdlZW4gU0QgY2FyZHMuCiAKICAgIEEgbGFyZ2UgZXJhc2UgY2FuIHRha2UgYSB3aGlsZSB0byBjb21wbGV0ZSBkZXBlbmRpbmcgb24gdGhlIFNECi0gICBjYXJkLiBJbiBzdWNoIGEgY2FzZSBpdCBpcyByZWNjb21lbmRlZCB0aGF0IGFuIGFzeW5jIGNhbGwgaXMgbWFkZS4KKyAgIGNhcmQuIEluIHN1Y2ggYSBjYXNlIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYW4gYXN5bmMgY2FsbCBpcyBtYWRlLgogCiAgICBSZXR1cm5zCiAgICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSBBUEkgY2FsbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5CkBAIC0xOTI2LDcgKzE5MjYsNyBAQAogICAgKglyZXF1aXJlZCBiZWZvcmUgZXJhc2UgaXMgYWxsb3dlZAogICAgKiBDWV9BU19FUlJPUl9OT19TVUNIX0JVUwogICAgKiBDWV9BU19FUlJPUl9OT19TVUNIX0RFVklDRQotICAgKiBDWV9BU19FUlJPUl9OT1RfU1VQUE9SVEVEIC0gRXJhc2UgaXMgY3VycmVubHkgb25seSBzdXBwb3J0ZWQKKyAgICogQ1lfQVNfRVJST1JfTk9UX1NVUFBPUlRFRCAtIEVyYXNlIGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZAogICAgKglvbiBTRCBhbmQgdXNpbmcgU0Qgb25seSBmaXJtd2FyZQogICAgKiBDWV9BU19FUlJPUl9PVVRfT0ZfTUVNT1JZCiAKQEAgLTE5ODUsNyArMTk4NSw3IEBACiAgICAqCXR5cGUgd2FzIG1hZGUKICAgICogQ1lfQVNfRVJST1JfT1VUX09GX01FTU9SWSAtIGluc3VmZmljaWVudCBtZW1vcnkgYXZhaWxhYmxlCiAgICAqIENZX0FTX0VSUk9SX0lOVkFMSURfUkVTUE9OU0UgLSBhbiBlcnJvciBtZXNzYWdlIHdhcwotICAgKglyZWNpZXZlZCBmcm9tIHRoZSBmaXJtd2FyZQorICAgKglyZWNlaXZlZCBmcm9tIHRoZSBmaXJtd2FyZQogICAgKiBDWV9BU19FUlJPUl9NRURJQV9BQ0NFU1NfRkFJTFVSRSAtIHRoZXJlIHdhcyBlcnJvciBpbgogICAgKglyZWFkaW5nIGZyb20gdGhlIG1lZGlhCiAgICAqIENZX0FTX0VSUk9SX0lOVkFMSURfRlVOQ1RJT04gLSBBbiBJTyBhdHRlbXB0IHdhcyBtYWRlIHRvCkBAIC0yMDQ3LDcgKzIwNDcsNyBAQAogICAgKglwYWlyIGRvZXMgbm90IGV4aXN0CiAgICAqIENZX0FTX0VSUk9SX09VVF9PRl9NRU1PUlkgLSBpbnN1ZmZpY2llbnQgbWVtb3J5IGF2YWlsYWJsZQogICAgKiBDWV9BU19FUlJPUl9JTlZBTElEX1JFU1BPTlNFIC0gYW4gZXJyb3IgbWVzc2FnZSB3YXMKLSAgICoJcmVjaWV2ZWQgZnJvbSB0aGUgZmlybXdhcmUKKyAgICoJcmVjZWl2ZWQgZnJvbSB0aGUgZmlybXdhcmUKIAogKi8KIGN5X2FzX3JldHVybl9zdGF0dXNfdApAQCAtMjA5NSw3ICsyMDk1LDcgQEAKICAgICoJcGFpciBkb2VzIG5vdCBleGlzdAogICAgKiBDWV9BU19FUlJPUl9PVVRfT0ZfTUVNT1JZIC0gaW5zdWZmaWNpZW50IG1lbW9yeSBhdmFpbGFibGUKICAgICogQ1lfQVNfRVJST1JfSU5WQUxJRF9SRVNQT05TRSAtIGFuIGVycm9yIG1lc3NhZ2Ugd2FzCi0gICAqCXJlY2lldmVkIGZyb20gdGhlIGZpcm13YXJlCisgICAqCXJlY2VpdmVkIGZyb20gdGhlIGZpcm13YXJlCiAgICAqLwogY3lfYXNfcmV0dXJuX3N0YXR1c190CiBjeV9hc19zZGlvX3Jlc2V0X2NhcmQoCkBAIC0yMTM5LDcgKzIxMzksNyBAQAogICAgKiBDWV9BU19FUlJPUl9OT19TVUNIX0RFVklDRSAtIHRoZSBzcGVjaWZpZWQgbWVkaWEvZGV2aWNlIHBhaXIKICAgICoJZG9lcyBub3QgZXhpc3QKICAgICogQ1lfQVNfRVJST1JfT1VUX09GX01FTU9SWSAtIGluc3VmZmljaWVudCBtZW1vcnkgYXZhaWxhYmxlCi0gICAqIENZX0FTX0VSUk9SX0lOVkFMSURfUkVTUE9OU0UgLSBhbiBlcnJvciBtZXNzYWdlIHdhcyByZWNpZXZlZAorICAgKiBDWV9BU19FUlJPUl9JTlZBTElEX1JFU1BPTlNFIC0gYW4gZXJyb3IgbWVzc2FnZSB3YXMgcmVjZWl2ZWQKICAgICoJZnJvbSB0aGUgZmlybXdhcmUKICAgICogQ1lfQVNfRVJST1JfTUVESUFfQUNDRVNTX0ZBSUxVUkUgLSB0aGVyZSB3YXMgZXJyb3IgaW4gcmVhZGluZwogICAgKglmcm9tIHRoZSBtZWRpYQpAQCAtMjE5OCw3ICsyMTk4LDcgQEAKICAgICogQ1lfQVNfRVJST1JfTk9fU1VDSF9ERVZJQ0UgLSB0aGUgc3BlY2lmaWVkIG1lZGlhL2RldmljZQogICAgKiBwYWlyIGRvZXMgbm90IGV4aXN0CiAgICAqIENZX0FTX0VSUk9SX09VVF9PRl9NRU1PUlkgLSBpbnN1ZmZpY2llbnQgbWVtb3J5IGF2YWlsYWJsZQotICAgKiBDWV9BU19FUlJPUl9JTlZBTElEX1JFU1BPTlNFIC0gYW4gZXJyb3IgbWVzc2FnZSB3YXMgcmVjaWV2ZWQKKyAgICogQ1lfQVNfRVJST1JfSU5WQUxJRF9SRVNQT05TRSAtIGFuIGVycm9yIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkCiAgICAqIGZyb20gdGhlIGZpcm13YXJlCiAgICAqIENZX0FTX0VSUk9SX01FRElBX0FDQ0VTU19GQUlMVVJFIC0gdGhlcmUgd2FzIGVycm9yIGluCiAgICAqIHJlYWRpbmcgZnJvbSB0aGUgbWVkaWEKQEAgLTIyNjIsNyArMjI2Miw3IEBACiAgICAqIENZX0FTX0VSUk9SX09VVF9PRl9NRU1PUlkgLSBpbnN1ZmZpY2llbnQgbWVtb3J5CiAgICAqCWF2YWlsYWJsZQogICAgKiBDWV9BU19FUlJPUl9JTlZBTElEX1JFU1BPTlNFIC0gYW4gZXJyb3IgbWVzc2FnZSB3YXMKLSAgICoJcmVjaWV2ZWQgZnJvbSB0aGUgZmlybXdhcmUKKyAgICoJcmVjZWl2ZWQgZnJvbSB0aGUgZmlybXdhcmUKICAgICogQ1lfQVNfRVJST1JfTUVESUFfQUNDRVNTX0ZBSUxVUkUgLSB0aGVyZSB3YXMgZXJyb3IgaW4KICAgICoJcmVhZGluZyBmcm9tIHRoZSBtZWRpYQogICAgKiBDWV9BU19FUlJPUl9JTlZBTElEX0ZVTkNUSU9OIC0gQW4gSU8gYXR0ZW1wdCB3YXMgbWFkZQpAQCAtMjMxOSw3ICsyMzE5LDcgQEAKICAgICoJcGFpciBkb2VzIG5vdCBleGlzdAogICAgKiBDWV9BU19FUlJPUl9BU1lOQ19QRU5ESU5HIC0gYW4gYXN5bmMgb3BlcmF0aW9uIGlzIHBlbmRpbmcKICAgICogQ1lfQVNfRVJST1JfT1VUX09GX01FTU9SWSAtIGluc3VmZmljaWVudCBtZW1vcnkgYXZhaWxhYmxlCi0gICAqIENZX0FTX0VSUk9SX0lOVkFMSURfUkVTUE9OU0UgLSBhbiBlcnJvciBtZXNzYWdlIHdhcyByZWNpZXZlZAorICAgKiBDWV9BU19FUlJPUl9JTlZBTElEX1JFU1BPTlNFIC0gYW4gZXJyb3IgbWVzc2FnZSB3YXMgcmVjZWl2ZWQKICAgICoJZnJvbSB0aGUgZmlybXdhcmUKICAgICogQ1lfQVNfRVJST1JfTUVESUFfQUNDRVNTX0ZBSUxVUkUgLSB0aGVyZSB3YXMgZXJyb3IgaW4KICAgICoJcmVhZGluZyBmcm9tIHRoZSBtZWRpYQpAQCAtMjM5Niw3ICsyMzk2LDcgQEAKICAgICogQ1lfQVNfRVJST1JfQVNZTkNfUEVORElORyAtIGFuIGFzeW5jIG9wZXJhdGlvbiBpcyBwZW5kaW5nCiAgICAqIENZX0FTX0VSUk9SX09VVF9PRl9NRU1PUlkgLSBpbnN1ZmZpY2llbnQgbWVtb3J5IGF2YWlsYWJsZQogICAgKiBDWV9BU19FUlJPUl9JTlZBTElEX1JFU1BPTlNFIC0gYW4gZXJyb3IgbWVzc2FnZSB3YXMKLSAgICoJcmVjaWV2ZWQgZnJvbSB0aGUgZmlybXdhcmUKKyAgICoJcmVjZWl2ZWQgZnJvbSB0aGUgZmlybXdhcmUKICAgICogQ1lfQVNfRVJST1JfTUVESUFfQUNDRVNTX0ZBSUxVUkUgLSB0aGVyZSB3YXMgZXJyb3IgaW4KICAgICoJcmVhZGluZyBmcm9tIHRoZSBtZWRpYQogICAgKiBDWV9BU19FUlJPUl9JTlZBTElEX0ZVTkNUSU9OIC0gQW4gSU8gYXR0ZW1wdCB3YXMgbWFkZQpAQCAtMjQ3MSw3ICsyNDcxLDcgQEAKICAgICogcGFpciBkb2VzIG5vdCBleGlzdAogICAgKiBDWV9BU19FUlJPUl9PVVRfT0ZfTUVNT1JZIC0gaW5zdWZmaWNpZW50IG1lbW9yeSBhdmFpbGFibGUKICAgICogQ1lfQVNfRVJST1JfSU5WQUxJRF9SRVNQT05TRSAtIGFuIGVycm9yIG1lc3NhZ2Ugd2FzCi0gICAqCXJlY2lldmVkIGZyb20gdGhlIGZpcm13YXJlCisgICAqCXJlY2VpdmVkIGZyb20gdGhlIGZpcm13YXJlCiAgICAqIENZX0FTX0VSUk9SX01FRElBX0FDQ0VTU19GQUlMVVJFIC0gdGhlcmUgd2FzIGVycm9yIGluCiAgICAqCXJlYWRpbmcgZnJvbSB0aGUgbWVkaWEKICAgICogQ1lfQVNfRVJST1JfSU5WQUxJRF9GVU5DVElPTiAtIEFuIElPIGF0dGVtcHQgd2FzIG1hZGUKQEAgLTI3MTQsNyArMjcxNCw3IEBACiAgICAqIENZX0FTX0VSUk9SX09VVF9PRl9NRU1PUlkgLSBpbnN1ZmZpY2llbnQgbWVtb3J5CiAgICAqCWF2YWlsYWJsZQogICAgKiBDWV9BU19FUlJPUl9JTlZBTElEX1JFU1BPTlNFIC0gYW4gZXJyb3IgbWVzc2FnZSB3YXMKLSAgICoJcmVjaWV2ZWQgZnJvbSB0aGUgZmlybXdhcmUKKyAgICoJcmVjZWl2ZWQgZnJvbSB0aGUgZmlybXdhcmUKICAgICogQ1lfQVNfRVJST1JfTUVESUFfQUNDRVNTX0ZBSUxVUkUgLSB0aGVyZSB3YXMgZXJyb3IKICAgICoJaW4gcmVhZGluZyBmcm9tIHRoZSBtZWRpYQogICAgKiBDWV9BU19FUlJPUl9JTlZBTElEX0ZVTkNUSU9OIC0gQW4gSU8gYXR0ZW1wdCB3YXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXN1c2IuaCBiL2RyaXZlcnMvc3RhZ2luZy93ZXN0YnJpZGdlL2FzdG9yaWEvaW5jbHVkZS9saW51eC93ZXN0YnJpZGdlL2N5YXN1c2IuaAppbmRleCA0YTU0OWUxLi5lM2JhOWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2VzdGJyaWRnZS9hc3RvcmlhL2luY2x1ZGUvbGludXgvd2VzdGJyaWRnZS9jeWFzdXNiLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dlc3RicmlkZ2UvYXN0b3JpYS9pbmNsdWRlL2xpbnV4L3dlc3RicmlkZ2UvY3lhc3VzYi5oCkBAIC00NjQsNyArNDY0LDcgQEAKICAgIGJlIHNlbGVjdGVkIG9uIGEgcGFydGl0aW9uZWQgc3RvcmFnZSBkZXZpY2UuCiAKICAgIERlc2NyaXB0aW9uCi0gICBXZXN0IEJyaWRnZSBmaXJtd2FyZSBzdXBwb3J0cyBjcmVhdGluZyB1cHRvIHR3bworICAgV2VzdCBCcmlkZ2UgZmlybXdhcmUgc3VwcG9ydHMgY3JlYXRpbmcgdXAgdG8gdHdvCiAgICBwYXJ0aXRpb25zIG9uIG1hc3Mgc3RvcmFnZSBkZXZpY2VzIGNvbm5lY3RlZCB0bwogICAgV2VzdCBCcmlkZ2UuICBXaGVuIHRoZXJlIGFyZSB0d28gcGFydGl0aW9ucyBvbiBhIGRldmljZSwKICAgIHRoZSB1c2VyIGNhbiBjaG9vc2Ugd2hpY2ggb2YgdGhlc2UgcGFydGl0aW9ucyBzaG91bGQgYmUKQEAgLTY5OCw3ICs2OTgsNyBAQAogICAgKgliZWVuIGNvbmZpZ3VyZWQKICAgICogQ1lfQVNfRVJST1JfTk9fRklSTVdBUkUgLSB0aGUgZmlybXdhcmUgaGFzIG5vdCBiZWVuIGxvYWRlZAogICAgKglpbnRvIFdlc3QgQnJpZGdlCi0gICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGlzIG1vZHVsZSB3YXMgc2h1dCBkb3duIHN1Y2Vzc2Z1bGx5CisgICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGlzIG1vZHVsZSB3YXMgc2h1dCBkb3duIHN1Y2Nlc3NmdWxseQogICAgKiBDWV9BU19FUlJPUl9USU1FT1VUIC0gYSB0aW1lb3V0IG9jY3VycmVkIGNvbW11bmljYXRpbmcgd2l0aAogICAgKgl0aGUgV2VzdCBCcmlkZ2UgZGV2aWNlCiAKQEAgLTc1Miw3ICs3NTIsNyBAQAogICAgKiBOZXN0YWJsZTogWUVTCiAKICAgIFJldHVybnMKLSAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoaXMgbW9kdWxlIHdhcyBzaHV0IGRvd24gc3VjZXNzZnVsbHkKKyAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoaXMgbW9kdWxlIHdhcyBzaHV0IGRvd24gc3VjY2Vzc2Z1bGx5CiAgICAqIENZX0FTX0VSUk9SX05PVF9DT05GSUdVUkVEIC0gdGhlIFdlc3QgQnJpZGdlIGRldmljZSBoYXMgbm90CiAgICAqCWJlZW4gY29uZmlndXJlZAogICAgKiBDWV9BU19FUlJPUl9OT19GSVJNV0FSRSAtIHRoZSBmaXJtd2FyZSBoYXMgbm90IGJlZW4gbG9hZGVkCkBAIC03OTEsNyArNzkxLDcgQEAKICAgICogTmVzdGFibGU6IFlFUwogCiAgICBSZXR1cm5zCi0gICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGlzIG1vZHVsZSB3YXMgc2h1dCBkb3duIHN1Y2Vzc2Z1bGx5CisgICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGlzIG1vZHVsZSB3YXMgc2h1dCBkb3duIHN1Y2Nlc3NmdWxseQogICAgKiBDWV9BU19FUlJPUl9OT1RfQ09ORklHVVJFRCAtIHRoZSBXZXN0IEJyaWRnZSBkZXZpY2UgaGFzIG5vdAogICAgKgliZWVuIGNvbmZpZ3VyZWQKICAgICogQ1lfQVNfRVJST1JfTk9fRklSTVdBUkUgLSB0aGUgZmlybXdhcmUgaGFzIG5vdCBiZWVuIGxvYWRlZApAQCAtODI1LDcgKzgyNSw3IEBACiAgICAqIFZhbGlkIEluIEFzeW5jaHJvbm91cyBDYWxsYmFjazogWWVzIChpZiBjYiBzdXBwbGllZCkKIAogICAgUmV0dXJucwotICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhpcyBtb2R1bGUgd2FzIHNodXQgZG93biBzdWNlc3NmdWxseQorICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhpcyBtb2R1bGUgd2FzIHNodXQgZG93biBzdWNjZXNzZnVsbHkKICAgICogQ1lfQVNfRVJST1JfTk9UX0NPTkZJR1VSRUQgLSB0aGUgV2VzdCBCcmlkZ2UgZGV2aWNlIGhhcyBub3QKICAgICoJYmVlbiBjb25maWd1cmVkCiAgICAqIENZX0FTX0VSUk9SX05PX0ZJUk1XQVJFIC0gdGhlIGZpcm13YXJlIGhhcyBub3QgYmVlbiBsb2FkZWQKQEAgLTg1NSwxMyArODU1LDEzIEBACiAgICB0aGUgVVNCIHN0YWNrCiAKICAgIERlc2NyaXB0aW9uCi0gICBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgcmVxdWVzdCB0byBXZXN0IEJyaWRnZSB0byByZXRyZWl2ZQorICAgVGhpcyBmdW5jdGlvbiBzZW5kcyBhIHJlcXVlc3QgdG8gV2VzdCBCcmlkZ2UgdG8gcmV0cmlldmUKICAgIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24KIAogICAgKiBWYWxpZCBJbiBBc3luY2hyb25vdXMgQ2FsbGJhY2s6IFllcyAoaWYgY2Igc3VwcGxpZWQpCiAKICAgIFJldHVybnMKLSAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoaXMgbW9kdWxlIHdhcyBzaHV0IGRvd24gc3VjZXNzZnVsbHkKKyAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoaXMgbW9kdWxlIHdhcyBzaHV0IGRvd24gc3VjY2Vzc2Z1bGx5CiAgICAqIENZX0FTX0VSUk9SX05PVF9DT05GSUdVUkVEIC0gdGhlIFdlc3QgQnJpZGdlIGRldmljZSBoYXMgbm90CiAgICAqCWJlZW4gY29uZmlndXJlZAogICAgKiBDWV9BU19FUlJPUl9OT19GSVJNV0FSRSAtIHRoZSBmaXJtd2FyZSBoYXMgbm90IGJlZW4gbG9hZGVkCkBAIC05MDYsNyArOTA2LDcgQEAKICAgIENoYXB0ZXIgOS4KIAogICAgUmV0dXJucwotICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhpcyBtb2R1bGUgd2FzIHNodXQgZG93biBzdWNlc3NmdWxseQorICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhpcyBtb2R1bGUgd2FzIHNodXQgZG93biBzdWNjZXNzZnVsbHkKICAgICogQ1lfQVNfRVJST1JfTk9UX0NPTkZJR1VSRUQgLSB0aGUgV2VzdCBCcmlkZ2UgZGV2aWNlIGhhcyBub3QKICAgICoJYmVlbiBjb25maWd1cmVkCiAgICAqIENZX0FTX0VSUk9SX05PX0ZJUk1XQVJFIC0gdGhlIGZpcm13YXJlIGhhcyBub3QgYmVlbiBsb2FkZWQKQEAgLTk5Myw3ICs5OTMsNyBAQAogICAgRGVzY3JpcHRpb24KICAgIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgdGhlIGJ1ZmZlciB0byBob2xkIHRoZSBkZXNjcmlwdG9yCiAgICBkYXRhLCBhbmQgYW4gaW4vb3V0IHBhcmFtZXRlciB0aSBpbmRpY2F0ZSB0aGUKLSAgIGxlbmdodCBvZiB0aGUgYnVmZmVyIGFuZCBkZXNjcmlwdG9yIGRhdGEgaW4gYnl0ZXMuCisgICBsZW5ndGggb2YgdGhlIGJ1ZmZlciBhbmQgZGVzY3JpcHRvciBkYXRhIGluIGJ5dGVzLgogCiAgICBTZWUgQWxzbwogICAgKiBDeUFzVXNiR2V0RGVzY3JpcHRvcgpAQCAtMTAyNyw3ICsxMDI3LDcgQEAKICAgIENoYXB0ZXIgOS4KIAogICAgUmV0dXJucwotICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhpcyBtb2R1bGUgd2FzIHNodXQgZG93biBzdWNlc3NmdWxseQorICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhpcyBtb2R1bGUgd2FzIHNodXQgZG93biBzdWNjZXNzZnVsbHkKICAgICogQ1lfQVNfRVJST1JfTk9UX0NPTkZJR1VSRUQgLSB0aGUgV2VzdCBCcmlkZ2UgZGV2aWNlIGhhcyBub3QKICAgICoJYmVlbiBjb25maWd1cmVkCiAgICAqIENZX0FTX0VSUk9SX05PX0ZJUk1XQVJFIC0gdGhlIGZpcm13YXJlIGhhcyBub3QgYmVlbiBsb2FkZWQKQEAgLTExMDYsNyArMTEwNiw3IEBACiAgICAqIFZhbGlkIEluIEFzeW5jaHJvbm91cyBDYWxsYmFjazogTk8KIAogICAgUmV0dXJucwotICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhpcyBtb2R1bGUgd2FzIHNodXQgZG93biBzdWNlc3NmdWxseQorICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhpcyBtb2R1bGUgd2FzIHNodXQgZG93biBzdWNjZXNzZnVsbHkKICAgICogQ1lfQVNfRVJST1JfTk9UX0NPTkZJR1VSRUQgLSB0aGUgV2VzdCBCcmlkZ2UgZGV2aWNlIGhhcyBub3QKICAgICoJYmVlbiBjb25maWd1cmVkCiAgICAqIENZX0FTX0VSUk9SX05PX0ZJUk1XQVJFIC0gdGhlIGZpcm13YXJlIGhhcyBub3QgYmVlbiBsb2FkZWQKQEAgLTExNDAsNyArMTE0MCw3IEBACiAgICBBZGQgZG9jdW1lbnRhdGlvbiBhYm91dCBlbmRwb2ludCBjb25maWd1cmF0aW9uIGxpbWl0YXRpb25zCiAKICAgIFJldHVybnMKLSAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoaXMgbW9kdWxlIHdhcyBzaHV0IGRvd24gc3VjZXNzZnVsbHkKKyAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoaXMgbW9kdWxlIHdhcyBzaHV0IGRvd24gc3VjY2Vzc2Z1bGx5CiAgICAqIENZX0FTX0VSUk9SX05PVF9DT05GSUdVUkVEIC0gdGhlIFdlc3QgQnJpZGdlIGRldmljZSBoYXMgbm90CiAgICAqCWJlZW4gY29uZmlndXJlZAogICAgKiBDWV9BU19FUlJPUl9OT19GSVJNV0FSRSAtIHRoZSBmaXJtd2FyZSBoYXMgbm90IGJlZW4gbG9hZGVkCkBAIC0xMTgxLDcgKzExODEsNyBAQAogICAgKiBWYWxpZCBJbiBBc3luY2hyb25vdXMgQ2FsbGJhY2s6IE5PCiAKICAgIFJldHVybnMKLSAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoaXMgbW9kdWxlIHdhcyBzaHV0IGRvd24gc3VjZXNzZnVsbHkKKyAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoaXMgbW9kdWxlIHdhcyBzaHV0IGRvd24gc3VjY2Vzc2Z1bGx5CiAgICAqIENZX0FTX0VSUk9SX05PVF9DT05GSUdVUkVEIC0gdGhlIFdlc3QgQnJpZGdlIGRldmljZSBoYXMgbm90CiAgICAqCWJlZW4gY29uZmlndXJlZAogICAgKiBDWV9BU19FUlJPUl9OT19GSVJNV0FSRSAtIHRoZSBmaXJtd2FyZSBoYXMgbm90IGJlZW4gbG9hZGVkCkBAIC0xMjE5LDcgKzEyMTksNyBAQAogICAgZnVuY3Rpb25zIHN0b3JlIGF3YXkgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYW5kIHRoaXMKICAgIEN5QXNVc2JDb21taXRDb25maWcoKSBhY3R1YWxseSBmaW5kcyB0aGUKICAgIGJlc3QgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBiYXNlZCBvbiB0aGUgcmVxdWVzdGVkIGVuZHBvaW50Ci0gICBjb25maWd1cmF0aW9uIGFuZCBzZW5kcyB0aHNpIG9wdGltYWwKKyAgIGNvbmZpZ3VyYXRpb24gYW5kIHNlbmRzIHRoaXMgb3B0aW1hbAogICAgY29uZml1cmF0aW9uIGRvd24gdG8gdGhlIFdlc3QgQnJpZGdlIGRldmljZS4KIAogICAgKiBWYWxpZCBJbiBBc3luY2hyb25vdXMgQ2FsbGJhY2s6IFlFUyAoaWYgY2Igc3VwcGxpZWQpCkBAIC0xMjY4LDcgKzEyNjgsNyBAQAogICAgKiBWYWxpZCBJbiBBc3luY2hyb25vdXMgQ2FsbGJhY2s6IE5PCiAKICAgIFJldHVybnMKLSAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoaXMgbW9kdWxlIHdhcyBzaHV0IGRvd24gc3VjZXNzZnVsbHkKKyAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoaXMgbW9kdWxlIHdhcyBzaHV0IGRvd24gc3VjY2Vzc2Z1bGx5CiAgICAqIENZX0FTX0VSUk9SX1RJTUVPVVQgLSBhIHRpbWVvdXQgb2NjdXJyZWQgY29tbXVuaWNhdGluZyB3aXRoCiAgICAqCXRoZSBXZXN0IEJyaWRnZSBkZXZpY2UKICAgICogQ1lfQVNfRVJST1JfTk9UX1JVTk5JTkcgLSB0aGUgVVNCIHN0YWNrIGlzIG5vdCBydW5uaW5nCkBAIC0xMzExLDcgKzEzMTEsNyBAQAogICAgKiBWYWxpZCBJbiBBc3luY2hyb25vdXMgQ2FsbGJhY2s6IFlFUwogCiAgICBSZXR1cm5zCi0gICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGlzIG1vZHVsZSB3YXMgc2h1dCBkb3duIHN1Y2Vzc2Z1bGx5CisgICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGlzIG1vZHVsZSB3YXMgc2h1dCBkb3duIHN1Y2Nlc3NmdWxseQogICAgKiBDWV9BU19FUlJPUl9USU1FT1VUIC0gYSB0aW1lb3V0IG9jY3VycmVkIGNvbW11bmljYXRpbmcgd2l0aAogICAgKgl0aGUgV2VzdCBCcmlkZ2UgZGV2aWNlCiAgICAqIENZX0FTX0VSUk9SX05PVF9SVU5OSU5HIC0gdGhlIFVTQiBzdGFjayBpcyBub3QgcnVubmluZwpAQCAtMTM1NSw3ICsxMzU1LDcgQEAKICAgIGEgemVybyBsZW5ndGggcGFja2V0IHRyYW5zbWl0dGVkIHRvIHRoZSBVU0IgaG9zdC4KIAogICAgUmV0dXJucwotICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhpcyBtb2R1bGUgd2FzIHNodXQgZG93biBzdWNlc3NmdWxseQorICAgKiBDWV9BU19FUlJPUl9TVUNDRVNTIC0gdGhpcyBtb2R1bGUgd2FzIHNodXQgZG93biBzdWNjZXNzZnVsbHkKICAgICogQ1lfQVNfRVJST1JfVElNRU9VVCAtIGEgdGltZW91dCBvY2N1cnJlZCBjb21tdW5pY2F0aW5nIHdpdGgKICAgICoJdGhlIFdlc3QgQnJpZGdlIGRldmljZQogICAgKiBDWV9BU19FUlJPUl9OT1RfUlVOTklORyAtIHRoZSBVU0Igc3RhY2sgaXMgbm90IHJ1bm5pbmcKQEAgLTEzOTUsNyArMTM5NSw3IEBACiAgICBpbiBhIHplcm8gbGVuZ3RoIHBhY2tldCB0cmFuc21pdHRlZCB0byB0aGUgVVNCIGhvc3QuCiAKICAgIFJldHVybnMKLSAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoaXMgbW9kdWxlIHdhcyBzaHV0IGRvd24gc3VjZXNzZnVsbHkKKyAgICogQ1lfQVNfRVJST1JfU1VDQ0VTUyAtIHRoaXMgbW9kdWxlIHdhcyBzaHV0IGRvd24gc3VjY2Vzc2Z1bGx5CiAgICAqIENZX0FTX0VSUk9SX1RJTUVPVVQgLSBhIHRpbWVvdXQgb2NjdXJyZWQgY29tbXVuaWNhdGluZyB3aXRoCiAgICAqCXRoZSBXZXN0IEJyaWRnZSBkZXZpY2UKICAgICogQ1lfQVNfRVJST1JfTk9UX1JVTk5JTkcgLSB0aGUgVVNCIHN0YWNrIGlzIG5vdCBydW5uaW5nCkBAIC0xNDM1LDcgKzE0MzUsNyBAQAogCiAgICBSZXR1cm5zCiAgICAqIENZX0FTX0VSUk9SX1NVQ0NFU1MgLSB0aGlzIG1vZHVsZSB3YXMgc2h1dCBkb3duCi0gICAqCXN1Y2Vzc2Z1bGx5CisgICAqCXN1Y2Nlc3NmdWxseQogICAgKiBDWV9BU19FUlJPUl9OT1RfUlVOTklORyAtIHRoZSBVU0Igc3RhY2sgaXMgbm90CiAgICAqCXJ1bm5pbmcKICAgICogQ1lfQVNfRVJST1JfQVNZTkNfTk9UX1BFTkRJTkcgLSBubyBhc3luY2hyb25vdXMgVVNCCkBAIC0xNzkxLDcgKzE3OTEsNyBAQAogICAgZGV2aWNlIHNob3VsZCBiZSBtYWRlIHZpc2libGUgdG8gVVNCLgogCiAgICBEZXNjcmlwdGlvbgotICAgV2VzdCBCcmlkZ2UgZmlybXdhcmUgc3VwcG9ydHMgdGhlIGNyZWF0aW9uIG9mIHVwdG8gdHdvCisgICBXZXN0IEJyaWRnZSBmaXJtd2FyZSBzdXBwb3J0cyB0aGUgY3JlYXRpb24gb2YgdXAgdG8gdHdvCiAgICBwYXJ0aXRpb25zIG9uIG1hc3Mgc3RvcmFnZSBkZXZpY2VzIGNvbm5lY3RlZCB0byB0aGUgV2VzdCBCcmlkZ2UKICAgIGRldmljZS4gIFdoZW4gdGhlcmUgYXJlIHR3byBwYXJ0aXRpb25zIG9uIGEgZGV2aWNlLCB0aGUgdXNlciBjYW4KICAgIGNob29zZSB3aGljaCBvZiB0aGVzZSBwYXJ0aXRpb25zIHNob3VsZCBiZSBtYWRlIHZpc2libGUgdG8gdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHMuYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kcy5jCmluZGV4IDljZmVhOTQuLmM5ZjBlOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kcy5jCkBAIC00OTIsNyArNDkyLDcgQEAKIAogCQkJVHhEZXNJbmRleCA9IHBNZHMtPlR4RGVzSW5kZXg7IC8qIEdldCB0aGUgY3VycmVudCBJRCAqLwogCQkJcFR4RGVzLT5EZXNjcmlwdG9yX0lEID0gVHhEZXNJbmRleDsKLQkJCXBNZHMtPlR4RGVzRnJvbVtUeERlc0luZGV4XSA9IDI7IC8qIFN0b3JpbmcgdGhlIGluZm9ybWF0aW9uIG9mIHNvdXJjZSBjb21taW5nIGZyb20gKi8KKwkJCXBNZHMtPlR4RGVzRnJvbVtUeERlc0luZGV4XSA9IDI7IC8qIFN0b3JpbmcgdGhlIGluZm9ybWF0aW9uIG9mIHNvdXJjZSBjb21pbmcgZnJvbSAqLwogCQkJcE1kcy0+VHhEZXNJbmRleCsrOwogCQkJcE1kcy0+VHhEZXNJbmRleCAlPSBNQVhfVVNCX1RYX0RFU0NSSVBUT1I7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL1JFQURNRS51YnVudHUgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi9SRUFETUUudWJ1bnR1CmluZGV4IDQ3YmVhZWMuLmVkZWU4YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL1JFQURNRS51YnVudHUKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvUkVBRE1FLnVidW50dQpAQCAtMTE2LDcgKzExNiw3IEBACiAKIFRoZSBBZ2VyZSBTeXN0ZW1zIGxpY2Vuc2UgYXBwbGllcy4gVGhpcyBpcyB3aHkgSSBpbmNsdWRlIHRoZSBvcmlnaW5hbAogUkVBRE1FLndsYWdzNDkuIFRoZSBpbnN0cnVjdGlvbnMgaW4gdGhhdCBmaWxlIGFyZSBib2d1cyBub3cuIEkgYWxzbwotaW5jbHVkZSB0aGUgbWFuIHBhZ2UuIEV2ZW50aG91Z2ggc2V0dGluZyBwYXJhbWV0ZXJzIG9uIHRoZSBtb2R1bGUKK2luY2x1ZGUgdGhlIG1hbiBwYWdlLiBFdmVuIHRob3VnaCBzZXR0aW5nIHBhcmFtZXRlcnMgb24gdGhlIG1vZHVsZQogZG9lcyBub3Qgd29yayBhbnltb3JlIGJ1dCBpdCBwcm92aWRlcyBzb21lIGluZm9ybWF0aW9uIGFib3V0IGFsbCB0aGUKIHNldHRpbmdzLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvVE9ETwppbmRleCAxNGFhNDE1Li45NDAzMmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL1RPRE8KQEAgLTEsNyArMSw3IEBACiBGaXJzdCBvZiBhbGwsIHRoZSBiZXN0IHRoaW5nIHdvdWxkIGJlIHRoYXQgdGhpcyBkcml2ZXIgYmVjb21lcyBvYnNvbHRlIGJ5CiBhZGRpbmcgc3VwcG9ydCBmb3IgSGVybWVzIElJIGFuZCBIZXJtZXMgSUkuNSBjYXJkcyB0byB0aGUgZXhpc3Rpbmcgb3Jpbm9jbwogZHJpdmVyLiBUaGUgb3Jpbm9jbyBkcml2ZXIgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgSGVybWVzIEkgYmFzZWQgY2FyZHMuCi1TaW5jZSB0aGlzIHdpbGwgbm90IGhhcHBlbiBieSBtYWdpYyBhbmQgaGFzIG5vdCBoYXBwZW5kIHVudGlsIG5vdyB0aGlzCitTaW5jZSB0aGlzIHdpbGwgbm90IGhhcHBlbiBieSBtYWdpYyBhbmQgaGFzIG5vdCBoYXBwZW5lZCB1bnRpbCBub3cgdGhpcwogZHJpdmVyIHByb3ZpZGVzIGEgc3RvcC1nYXAgc29sdXRpb24gZm9yIHRoZXNlIHR5cGUgb2YgY2FyZHMuCiAKIEhhdmluZyBzYWlkIHRoYXQsIHRoZSBmb2xsb3dpbmcgd2lzaGxpc3QgY29tZXMgdG8gbWluZCB0byBtYWtlIHRoZSBkcml2ZXIKQEAgLTE4LDcgKzE4LDcgQEAKIAktIHRoZSBkcml2ZXIgaXMgc3BsaXQgaW50byBhIEhlcm1lcyBJSSBhbmQgYSBIZXJtZXMgSUkuNSBwYXJ0LCBpdAogCSAgd291bGQgYmUgbmljZSB0byBoYW5kbGUgYm90aCB3aXRoIG9uZSBtb2R1bGUgaW5zdGVhZCBvZiB0d28KIAktIHJldmlldyBieSB0aGUgd2lyZWxlc3MgZGV2ZWxvcGVyIGNvbW11bml0eQotCS0gdmVyaWZ5IHRoZSBjb2RlIGFnYWluc3QgdGhlIGNvZGluZyBzdGFuZGFyZHMgZm9yIGEgcHJvcHBlciBsaW51eAorCS0gdmVyaWZ5IHRoZSBjb2RlIGFnYWluc3QgdGhlIGNvZGluZyBzdGFuZGFyZHMgZm9yIGEgcHJvcGVyIGxpbnV4CiAJICBkcml2ZXIKIAktIHJlc29sdmUgbGljZW5zZSBpc3N1ZXMgKD8pCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL2hjZi5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvaGNmLmMKaW5kZXggZDRiZGQzZS4uYTczMzE3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvaGNmLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvaGNmLmMKQEAgLTU0MCw3ICs1NDAsNyBAQAogKgogKi5DT05ESVRJT05TCiAqIEV4Y2VwdCBmb3IgaGNmX2FjdGlvbiB3aXRoIEhDRl9BQ1RfSU5UX0ZPUkNFX09OIG9yIEhDRl9BQ1RfSU5UX09GRiBhcyBwYXJhbWV0ZXIgb3IgaGNmX2Nvbm5lY3Qgd2l0aCBhbiBJL08KLSogYWRkcmVzcyAoaS5lLiBub3QgSENGX0RJU0NPTk5FQ1QpLCBhbGwgaGNmLWZ1bmN0aW9uIGNhbGxzIE1VU1QgYmUgcHJlY2VlZGVkIGJ5IGEgY2FsbCBvZiBoY2ZfYWN0aW9uIHdpdGgKKyogYWRkcmVzcyAoaS5lLiBub3QgSENGX0RJU0NPTk5FQ1QpLCBhbGwgaGNmLWZ1bmN0aW9uIGNhbGxzIE1VU1QgYmUgcHJlY2VkZWQgYnkgYSBjYWxsIG9mIGhjZl9hY3Rpb24gd2l0aAogKiBIQ0ZfQUNUX0lOVF9PRkYgYXMgcGFyYW1ldGVyLgogKiBOb3RlIHRoYXQgaGNmX2Nvbm5lY3QgZGVmYXVsdHMgdG8gTklDIGludGVycnVwdCBkaXNhYmxlZCBtb2RlLCBpLmUuIGFzIGlmIGhjZl9hY3Rpb24oIEhDRl9BQ1RfSU5UX09GRiApCiAqIHdhcyBjYWxsZWQuCkBAIC04NDMsNyArODQzLDcgQEAKICouTU9EVUxFCQlpbnQgaGNmX2NudGwoIElGQlAgaWZicCwgaGNmXzE2IGNtZCApCiAqLlBVUlBPU0UJCUNvbm5lY3Qgb3IgZGlzY29ubmVjdCBhIHNwZWNpZmljIHBvcnQgdG8gYSBzcGVjaWZpYyBuZXR3b3JrLgogKiEhICA7Pz8/Pz8/Pz8/Pz8/Pz8/PyBjb250aW51ZSBuZWVkcyBtb3JlIGV4cGxhbmF0aW9uCi0qCQkJCXJlY292ZXJzIGJ5IG1lYW5zIG9mICJjb250aW51ZSIgd2hlbiB0aGUgY29ubmVjdCBwcm9jZXMgaW4gQ0NYIG1vZGUgZmFpbHMKKyoJCQkJcmVjb3ZlcnMgYnkgbWVhbnMgb2YgImNvbnRpbnVlIiB3aGVuIHRoZSBjb25uZWN0IHByb2Nlc3MgaW4gQ0NYIG1vZGUgZmFpbHMKICoJCQkJRW5hYmxlcyBvciBkaXNhYmxlcyBkYXRhIHRyYW5zbWlzc2lvbiBhbmQgcmVjZXB0aW9uIGZvciB0aGUgTklDLgogKgkJCQlBY3RpdmF0ZXMgc3RhdGljIE5JQyBjb25maWd1cmF0aW9uIGZvciBhIHNwZWNpZmljIHBvcnQgYXQgY29ubmVjdC4KICoJCQkJQWN0aXZhdGVzIHN0YXRpYyBjb25maWd1cmF0aW9uIGZvciBhbGwgcG9ydHMgYXQgZW5hYmxlLgpAQCAtMTE3MCwxMiArMTE3MCwxMiBAQAogCQlpb19hZGRyID0gaW9fYmFzZTsKIAl9CiAKLSNpZiAwIC8vOz8gaWYgYSBzdWJzZXF1ZW50IGhjZl9jb25uZWN0IGlzIHByZWNlZWRlZCBieSBhbiBoY2ZfZGlzY29ubmVjdCB0aGUgd2FrZXVwIGlzIG5vdCBuZWVkZWQgISEKKyNpZiAwIC8vOz8gaWYgYSBzdWJzZXF1ZW50IGhjZl9jb25uZWN0IGlzIHByZWNlZGVkIGJ5IGFuIGhjZl9kaXNjb25uZWN0IHRoZSB3YWtldXAgaXMgbm90IG5lZWRlZCAhIQogI2lmIEhDRl9TTEVFUAogICAgIE9VVF9QT1JUX1dPUkQoIC4uLi4uK0hSRUdfSU8sIEhSRUdfSU9fV0FLRVVQX0FTWU5DICk7IAkgICAgLy9PUFcgbm90IHlldCB1c2VhYmxlCiAJTVNGX1dBSVQoODAwKTsJCQkJCQkJCS8vIE1TRi1kZWZpbmVkIGZ1bmN0aW9uIHRvIHdhaXQgbiBtaWNyb3NlY29uZHMuCiAJbm90ZSB0aGF0IE1TRl9XQUlUIHVzZXMgbm90IHlldCBkZWZpbmVkISEhISBJRkJfSU9CYXNlIGFuZCBJRkJfVGlja0luaSAodmlhIFBST1RfQ05UX0lOSSkKLQlzbyBiZSBjYXJlZnVsbCBpZiB0aGlzIGNvZGUgaXMgcmVzdG9yZWQKKwlzbyBiZSBjYXJlZnVsIGlmIHRoaXMgY29kZSBpcyByZXN0b3JlZAogI2VuZGlmIC8vIEhDRl9TTEVFUAogI2VuZGlmIC8vIDAKIApAQCAtMTU2Myw3ICsxNTYzLDcgQEAKICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIE1TRiB0byBzdXBwbHkgdGhlIEhDRiB3aXRoIG5ldy9tb3JlIGJ1ZmZlcnMgZm9yIHJlY2VpdmUgcHVycG9zZXMuCiAqIFRoZSBIQ0YgY2FuIGJlIHVzZWQgaW4gMiBmYXNoaW9uczogd2l0aCBhbmQgd2l0aG91dCBlbmNhcHN1bGF0aW9uIGZvciBkYXRhIHRyYW5zZmVyLgogKiBUaGlzIGlzIGNvbnRyb2xsZWQgYXQgY29tcGlsZSB0aW1lIGJ5IHRoZSBIQ0ZfRU5DIGJpdCBvZiB0aGUgSENGX0VOQ0FQIHN5c3RlbSBjb25zdGFudC4KLSogQXMgYSBjb25zZXF1ZW5jZSwgc29tZSBhZGRpdGlvbmFsIGNvbnN0YWludHMgYXBwbHkgdG8gdGhlIG51bWJlciBvZiBkZXNjcmlwdG9yIGFuZCB0aGUgYnVmZmVycyBhc3NvY2lhdGVkCisqIEFzIGEgY29uc2VxdWVuY2UsIHNvbWUgYWRkaXRpb25hbCBjb25zdHJhaW50cyBhcHBseSB0byB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3IgYW5kIHRoZSBidWZmZXJzIGFzc29jaWF0ZWQKICogd2l0aCB0aGUgZmlyc3QgMiBkZXNjcmlwdG9ycy4gSW5kZXBlbmRlbnQgb2YgdGhlIGVuY2Fwc3VsYXRpb24gZmVhdHVyZSwgdGhlIENPVU5UIGZpZWxkcyBhcmUgaWdub3JlZC4KICogQSBzcGVjaWFsIGNhc2UgaXMgdGhlIHN1cHBseWluZyBvZiB0aGUgREVMV0EgZGVzY3JpcHRvciwgd2hpY2ggbXVzdCBiZSBzdXBwbGllZCBhcyB0aGUgZmlyc3QgZGVzY3JpcHRvci4KICoKQEAgLTE3MzUsNyArMTczNSw3IEBACiAqIC0gaW4gY2FzZSBlbmNhcHN1bGF0aW9uIGJ5IHRoZSBIQ0YgaXMgc2VsZWN0ZWQ6CiAqCSAgLQlUaGUgRnJhbWVMaXN0IGRvZXMgbm90IGNvbnNpc3RzIG9mIGF0IGxlYXN0IDIgRGVzY3JpcHRvcnMuCiAqCSAgLQlUaGUgZmlyc3QgZGF0YWJ1ZmZlciBkb2VzIG5vdCBjb250YWluIGV4YWN0bHkgdGhlIChzcGFjZSBmb3IpIHRoZSA4MDIuMTEgaGVhZGVyICg9PSAyOCB3b3JkcykKLSoJICAtCVRoZSBmaXJzdCBkYXRhYnVmZmVyIGRvZXMgbm90IGhhdmUgYSBzaXplIHRvIGFkZGl0aW9uYWxseSBhY2NvbW9kYXRlIHRoZSA4MDIuMyBoZWFkZXIgYW5kIHRoZQorKgkgIC0JVGhlIGZpcnN0IGRhdGFidWZmZXIgZG9lcyBub3QgaGF2ZSBhIHNpemUgdG8gYWRkaXRpb25hbGx5IGFjY29tbW9kYXRlIHRoZSA4MDIuMyBoZWFkZXIgYW5kIHRoZQogKgkJU05BUCBoZWFkZXIgb2YgdGhlIGZyYW1lIGFmdGVyIGVuY2Fwc3VsYXRpb24gKD09IDM5IHdvcmRzKS4KICoJICAtCVRoZSBzZWNvbmQgZGF0YWJ1ZmZlciBkb2VzIG5vdCBjb250YWluIGF0IGxlYXN0IERBLCBTQSBhbmQgJ3R5cGUvbGVuZ3RoJyAoPT0xNCBieXRlcyBvciA3IHdvcmRzKQogKiEhIFRoZSAybmQgcGFydCBvZiB0aGUgbGlzdCBvZiBhc3NlcnRzIHNob3VsZCBiZSBrZXB0IGluIHN5bmMgd2l0aCBwdXRfZnJhbWVfbHN0LCBpbiBvcmRlciB0byBnZXQKQEAgLTE3NjIsMTQgKzE3NjIsMTQgQEAKICoJLSBDb3B5IERBL1NBIGZpZWxkcyBmcm9tIHRoZSAybmQgYnVmZmVyCiAqICAgLSBDYWxjdWxhdGUgdG90YWwgbGVuZ3RoIG9mIHRoZSBtZXNzYWdlIChzbmFwLWhlYWRlciArIHR5cGUtZmllbGQgKyB0aGUgbGVuZ3RoIG9mIGFsbCBidWZmZXIgZnJhZ21lbnRzCiAqICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIDgwMi4zIGZyYW1lIChpLmUgYWxsIGRlc2NyaXB0b3JzIGV4Y2VwdCB0aGUgZmlyc3QpLCBidXQgbm90IHRoZSBEZXN0aW5hdGlvbkFkZHJlc3MsCi0qICAgICBTb3VyY2VBZGRyZXNzIGFuZCBsZW5naHQtZmllbGQpCisqICAgICBTb3VyY2VBZGRyZXNzIGFuZCBsZW5ndGgtZmllbGQpCiAqICAgICBBc3NlcnQgdGhlIG1lc3NhZ2UgbGVuZ3RoCiAqCSAgV3JpdGUgbGVuZ3RoLiBOb3RlIHRoYXQgdGhlIG1lc3NhZ2UgaXMgaW4gQkUgZm9ybWF0LCBoZW5jZSBvbiBMRSBwbGF0Zm9ybXMgdGhlIGxlbmd0aCBtdXN0IGJlIGNvbnZlcnRlZAogKgkgIDs/IFRISVMgSVMgTk9UIFdIQVQgQ1VSUkVOVExZIElTIElNUExFTUVOVEVECiAqCS0gV3JpdGUgc25hcCBoZWFkZXIuIE5vdGUgdGhhdCB0aGUgbGFzdCBieXRlIG9mIHRoZSBzbmFwIGhlYWRlciBpcyBOT1QgY29waWVkLCB0aGF0IGJ5dGUgaXMgYWxyZWFkeSBpbgogKgkgIHBsYWNlIGFzIHJlc3VsdCBvZiB0aGUgY2FsbCB0byBoY2ZfZW5jYXAuCiAqCU5vdGUgdGhhdCB0aGVyZSBhcmUgbWFueSB3YXlzIHRvIHNraW4gYSBjYXQuIFRvIGV4cHJlc3MgdGhlIG9mZnNldHMgaW4gdGhlIDFzdCBidWZmZXIgd2hpbGUgd3JpdGluZwotKgl0aGUgc25hcCBoZWFkZXIsIEhGU19UWVBFIGlzIGNob29zZW4gYXMgYSByZWZlcmVuY2UgcG9pbnQgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZ3Jhc3AgdGhhdCB0aGUgc25hcCBoZWFkZXIKKyoJdGhlIHNuYXAgaGVhZGVyLCBIRlNfVFlQRSBpcyBjaG9zZW4gYXMgYSByZWZlcmVuY2UgcG9pbnQgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZ3Jhc3AgdGhhdCB0aGUgc25hcCBoZWFkZXIKICoJYW5kIGVuY2Fwc3VhbHRpb24gdHlwZSBhcmUgYXQgbGVhc3QgcmVsYXRpdmUgaW4gdGhlIHJpZ2h0LgogKjg6CW1vZGlmeSAxc3QgZGVzY3JpcHRvciB0byByZWZsZWN0IG1vdmVkIHBhcnQgb2YgdGhlIDgwMi4zIGhlYWRlciArIFNuYXAtaGVhZGVyCiAqCW1vZGlmeSAybmQgZGVzY3JpcHRvciB0byBza2lwIHRoZSBtb3ZlZCBwYXJ0IG9mIHRoZSA4MDIuMyBoZWFkZXIgKERBL1NBCkBAIC0xOTMzLDcgKzE5MzMsNyBAQAogKglIQ0ZfU1VDQ0VTUwkJCVN1Y2Nlc3MKICohIQl2aWEgY21kX2V4ZSAoIHR5cGUgPj0gQ0ZHX1JJRF9GV19NSU4gKQogKglIQ0ZfRVJSX05PX05JQwkJTklDIHJlbW92ZWQgZHVyaW5nIHJldHJpZXZhbAotKglIQ0ZfRVJSX1RJTUVfT1VUCUV4cGVjdGVkIEhlcm1lcyBldmVudCBkaWQgbm90IG9jY3VyZSBpbiBleHBlY3RlZCB0aW1lCisqCUhDRl9FUlJfVElNRV9PVVQJRXhwZWN0ZWQgSGVybWVzIGV2ZW50IGRpZCBub3Qgb2NjdXIgaW4gZXhwZWN0ZWQgdGltZQogKiEhCXZpYSBjbWRfZXhlIGFuZCBzZXR1cF9iYXAgKHR5cGUgPj0gQ0ZHX1JJRF9GV19NSU4gKQogKglIQ0ZfRVJSX0RFRlVOQ1RfLi4uCUhDRiBpcyBpbiBkZWZ1bmN0IG1vZGUgKGJpdHMgMHg3RiByZWZsZWN0IGNhdXNlKQogKgpAQCAtMjk1OCw3ICsyOTU4LDcgQEAKICoJaGNmX3NlcnZpY2VfbmljIGlzIGFsc28gc2tpcHBlZCBpbiB0aG9zZSBjYXNlcy4KICoJVG8gcHJldmVudCB0aGF0IGhjZl9zZXJ2aWNlX25pYyByZXBvcnRzIGJvZ3VzIGluZm9ybWF0aW9uIHRvIHRoZSBNU0Ygd2l0aCBhbGwgLSBwb3NzaWJseSBkaWZmaWN1bHQgdG8KICoJZGVidWcgLSB1bmRlc2lyYWJsZSBzaWRlIGVmZmVjdHMsIGl0IGlzIHBhcmFtb3VudCB0byBjaGVjayB0aGUgTklDIHByZXNlbmNlLiBJbiBmb3JtZXIgZGF5cyB0aGUgcHJlc2VuY2UKLSoJdGVzdCB3YXMgYmFzZWQgb24gdGhlIEhlcm1lcyByZWdpc3RlciBIUkVHX1NXXzAuIFNpbmNlIGluIEhDRl9BQ1RfSU5UX09GRiBpcyBjaG9vc2VuIGZvciBzdHJhdGVneSBiYXNlZCBvbgorKgl0ZXN0IHdhcyBiYXNlZCBvbiB0aGUgSGVybWVzIHJlZ2lzdGVyIEhSRUdfU1dfMC4gU2luY2UgaW4gSENGX0FDVF9JTlRfT0ZGIGlzIGNob3NlbiBmb3Igc3RyYXRlZ3kgYmFzZWQgb24KICoJSFJFR19FVl9TVEFULCB0aGlzIGlzIG5vdyBhbHNvIHVzZWQgaW4gaGNmX3NlcnZpY2VfbmljLiBUaGUgbW90aXZhdGlvbiB0byBjaGFuZ2Ugc3RyYXRlZ3kgaXMgcGFydGx5CiAqCWR1ZSB0byBpbmNvbnNpc3RlbnQgRi9XIGltcGxlbWVudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gSFJFR19TV18wIG1hbmlwdWxhdGlvbiBhcm91bmQgcmVzZXQgYW5kIGRvd25sb2FkLgogKglOb3RlIHRoYXQgaW4gcG9sbGVkIGVudmlyb25tZW50cyBDYXJkIFJlbW92YWwgaXMgbm90IGRldGVjdGVkIGJ5IElOVF9PRkYgd2hpY2ggbWFrZXMgdGhlIGNoZWNrIGluCkBAIC00MDQ4LDcgKzQwNDgsNyBAQAogCUhDRkFTU0VSVCggd29yZF9sZW4gPT0gMCB8fCB3b3JkX2xlbiA9PSAyIHx8IHdvcmRfbGVuID09IDQsIHdvcmRfbGVuICkKIAlIQ0ZBU1NFUlQoIHdvcmRfbGVuID09IDAgfHwgKChoY2ZfMzIpYnVmcCAmIDEgKSA9PSAwLCAoaGNmXzMyKWJ1ZnAgKQogCUhDRkFTU0VSVCggd29yZF9sZW4gPD0gbGVuLCBNRVJHRTIoIHdvcmRfbGVuLCBsZW4gKSApCi0JLy9zZWUgcHV0X2ZyYWcgZm9yIGFuIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgYmUgY2FyZWZ1bGwgYWJvdXQgd2hhdCBhcmUgaW50J3MgYW5kIHdoYXQgYXJlCisJLy9zZWUgcHV0X2ZyYWcgZm9yIGFuIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uLCBidXQgYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGFyZSBpbnQncyBhbmQgd2hhdCBhcmUKIAkvL2hjZl8xNidzCiAJaWYgKCB3b3JkX2xlbiApIHsJCQkJCQkJCS8vLiAgaWYgdGhlcmUgaXMgYW55dGhpbmcgdG8gY29udmVydAogaGNmXzggYzsKQEAgLTQ3MTIsNyArNDcxMiw3IEBACiAqCU5vdGUgdGhhdCBsZW4gaXMgdW5zaWduZWQsIHNvIGV2ZW4gTVNGIEkvRiB2aW9sYXRpb24gd29ya3Mgb3V0IE8uSy4KICoJVGhlICcyJyBpbiB0aGUgZXhwcmVzc2lvbiAibGVuKzIiIGlzIHVzZWQgYmVjYXVzZSAxIHdvcmQgaXMgbmVlZGVkIGZvciBMIGl0c2VsZiBhbmQgMSB3b3JkIGlzIG5lZWRlZAogKglmb3IgdGhlIHplcm8tc2VudGluZWwKLSo4Ogl1cGRhdGUgTWFpbEJveCBJbmZvIGxlbmd0aCByZXBvcnQgdG8gTVNGIHdpdGggIm9sZGVzdCIgTUIgSW5mbyBCbG9jayBzaXplLiBCZSBjYXJlZnVsbCBoZXJlLCBpZiB5b3UgZ2V0CisqODoJdXBkYXRlIE1haWxCb3ggSW5mbyBsZW5ndGggcmVwb3J0IHRvIE1TRiB3aXRoICJvbGRlc3QiIE1CIEluZm8gQmxvY2sgc2l6ZS4gQmUgY2FyZWZ1bCBoZXJlLCBpZiB5b3UgZ2V0CiAqCWhlcmUgYmVmb3JlIHRoZSBNYWlsQm94IGlzIHJlZ2lzdGVyZWQsIHlvdSBjYW4ndCByZWFkIGZyb20gdGhlIGJ1ZmZlciBhZGRyZXNzZWQgYnkgSUZCX01CcCAoaXQgaXMgdGhlCiAqCU51bGwgYnVmZmVyKSBzbyBkb24ndCBtb3ZlIHRoaXMgY29kZSB0aWxsIHRoZSBlbmQgb2YgdGhpcyByb3V0aW5lIGJ1dCBrZWVwIGl0IHdoZXJlIHRoZXJlIGlzIGdhcnVhbnRlZWQKICoJYSBidWZmZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi9oY2ZkZWYuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL2hjZmRlZi5oCmluZGV4IDRlMjAxNzEuLmNiMTk2NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL2hjZmRlZi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL2hjZmRlZi5oCkBAIC0zMTUsNyArMzE1LDcgQEAKIAogI2lmIEhDRl9ETUEKIC8vKioqKioqKioqKioqKioqKioqKioqKioqKiBETUEgKGJ1cyBtYXN0ZXJpbmcpCi0JLy8gQmUgY2FyZWZ1bGwgdG8gdXNlIHRoZXNlIHJlZ2lzdGVycyBvbmx5IGF0IGEgZ2VudWluZSAzMiBiaXRzIE5JQworCS8vIEJlIGNhcmVmdWwgdG8gdXNlIHRoZXNlIHJlZ2lzdGVycyBvbmx5IGF0IGEgZ2VudWluZSAzMiBiaXRzIE5JQwogCS8vIE9uIDE2IGJpdHMgTklDcywgdGhlc2UgYWRkcmVzc2VzIGFyZSBtYXBwZWQgaW50byB0aGUgcmFuZ2UgMHgwMCB0aHJvdWdoIDB4M0Ygd2l0aCBhbGwgY29uc2VxdWVuY2VzCiAJLy8gdGhlcmVvZiwgZS5nLiAgSFJFR19ETUFfQ1RSTCByZWdpc3RlciBtYXBzIHRvIEhSRUdfQ01ELgogI2RlZmluZSBIUkVHX0RNQV9DVFJMCQkJCQkJMHgwMDQwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF93ZXh0LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF93ZXh0LmMKaW5kZXggOWU1ZGEwOC4uNTIyYTMxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfd2V4dC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3dleHQuYwpAQCAtMjU3NSw3ICsyNTc1LDcgQEAKICAgICAgICAgICogVGhpcyBsb29rcyBsaWtlIGEgbmljZSBwbGFjZSB0byB0ZXN0IGlmIHRoZSBIQ0YgaXMgc3RpbGwKICAgICAgICAgICogY29tbXVuaWNhdGluZyB3aXRoIHRoZSBjYXJkLiBJdCBzZWVtcyB0aGF0IHNvbWV0aW1lcyBCQVBfMQogICAgICAgICAgKiBnZXRzIGNvcnJ1cHRlZC4gQnkgbG9va2luZyBhdCB0aGUgY29tbWVudHMgaW4gSENGIHRoZQotICAgICAgICAgKiBjYXVzZSBpcyBzdGlsbCBhIG1pc3RlcnkuIE9rYXksIHRoZSBjb21tdW5pY2F0aW9uIHRvIHRoZQorICAgICAgICAgKiBjYXVzZSBpcyBzdGlsbCBhIG15c3RlcnkuIE9rYXksIHRoZSBjb21tdW5pY2F0aW9uIHRvIHRoZQogICAgICAgICAgKiBjYXJkIGlzIGRlYWQsIHJlc2V0IHRoZSBjYXJkIHRvIHJldml2ZS4KICAgICAgICAgICovCiAJaWYoKGxwLT5oY2ZDdHguSUZCX0NhcmRTdGF0ICYgQ0FSRF9TVEFUX0RFRlVOQ1QpICE9IDApCkBAIC0zOTI0LDcgKzM5MjQsNyBAQAogCW1lbXNldCggbXNnLCAwLCBzaXplb2YoIG1zZyApKTsKIAogCi0JLyogQmVjdWFzZSBNSUMgZmFpbHVyZXMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBXaXJlbGVzcyBFeHRlbnNpb25zIHlldCwgdGhleQorCS8qIEJlY2F1c2UgTUlDIGZhaWx1cmVzIGFyZSBub3QgcGFydCBvZiB0aGUgV2lyZWxlc3MgRXh0ZW5zaW9ucyB5ZXQsIHRoZXkKIAkgICBtdXN0IGJlIHBhc3NlZCBhcyBhIHN0cmluZyB1c2luZyBhbiBJV0VWQ1VTVE9NIGV2ZW50LiBJbiBvcmRlciBmb3IgdGhlCiAJICAgZXZlbnQgdG8gYmUgZWZmZWN0aXZlLCB0aGUgc3RyaW5nIGZvcm1hdCBtdXN0IGJlIGtub3duIGJ5IGJvdGggdGhlCiAJICAgZHJpdmVyIGFuZCB0aGUgc3VwcGxpY2FudC4gVGhlIGZvbGxvd2luZyBpcyB0aGUgc3RyaW5nIGZvcm1hdCB1c2VkIGJ5IHRoZQpAQCAtMzk5OSw3ICszOTk5LDcgQEAKIAkJbWVtY3B5KCAmZGF0YS5yYXdEYXRhLCAmKCBscC0+bHR2UmVjb3JkLnUudThbMV0gKSwgODggKTsKIAkJd3BhX2llID0gd2xfcGFyc2Vfd3BhX2llKCAmZGF0YSwgJmxlbmd0aCApOwogCi0JCS8qIEJlY3Vhc2UgdGhpcyBldmVudCAoQXNzb2NpYXRpb24gV1BBLUlFKSBpcyBub3QgcGFydCBvZiB0aGUgV2lyZWxlc3MKKwkJLyogQmVjYXVzZSB0aGlzIGV2ZW50IChBc3NvY2lhdGlvbiBXUEEtSUUpIGlzIG5vdCBwYXJ0IG9mIHRoZSBXaXJlbGVzcwogCQlFeHRlbnNpb25zIHlldCwgaXQgbXVzdCBiZSBwYXNzZWQgYXMgYSBzdHJpbmcgdXNpbmcgYW4gSVdFVkNVU1RPTSBldmVudC4KIAkJSW4gb3JkZXIgZm9yIHRoZSBldmVudCB0byBiZSBlZmZlY3RpdmUsIHRoZSBzdHJpbmcgZm9ybWF0IG11c3QgYmUga25vd24KIAkJYnkgYm90aCB0aGUgZHJpdmVyIGFuZCB0aGUgc3VwcGxpY2FudC4gVGhlIGZvbGxvd2luZyBpcyB0aGUgc3RyaW5nIGZvcm1hdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDI1L1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMjUvVE9ETwppbmRleCAxNGFhNDE1Li45NDAzMmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMjUvVE9ETworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMjUvVE9ETwpAQCAtMSw3ICsxLDcgQEAKIEZpcnN0IG9mIGFsbCwgdGhlIGJlc3QgdGhpbmcgd291bGQgYmUgdGhhdCB0aGlzIGRyaXZlciBiZWNvbWVzIG9ic29sdGUgYnkKIGFkZGluZyBzdXBwb3J0IGZvciBIZXJtZXMgSUkgYW5kIEhlcm1lcyBJSS41IGNhcmRzIHRvIHRoZSBleGlzdGluZyBvcmlub2NvCiBkcml2ZXIuIFRoZSBvcmlub2NvIGRyaXZlciBjdXJyZW50bHkgb25seSBzdXBwb3J0cyBIZXJtZXMgSSBiYXNlZCBjYXJkcy4KLVNpbmNlIHRoaXMgd2lsbCBub3QgaGFwcGVuIGJ5IG1hZ2ljIGFuZCBoYXMgbm90IGhhcHBlbmQgdW50aWwgbm93IHRoaXMKK1NpbmNlIHRoaXMgd2lsbCBub3QgaGFwcGVuIGJ5IG1hZ2ljIGFuZCBoYXMgbm90IGhhcHBlbmVkIHVudGlsIG5vdyB0aGlzCiBkcml2ZXIgcHJvdmlkZXMgYSBzdG9wLWdhcCBzb2x1dGlvbiBmb3IgdGhlc2UgdHlwZSBvZiBjYXJkcy4KIAogSGF2aW5nIHNhaWQgdGhhdCwgdGhlIGZvbGxvd2luZyB3aXNobGlzdCBjb21lcyB0byBtaW5kIHRvIG1ha2UgdGhlIGRyaXZlcgpAQCAtMTgsNyArMTgsNyBAQAogCS0gdGhlIGRyaXZlciBpcyBzcGxpdCBpbnRvIGEgSGVybWVzIElJIGFuZCBhIEhlcm1lcyBJSS41IHBhcnQsIGl0CiAJICB3b3VsZCBiZSBuaWNlIHRvIGhhbmRsZSBib3RoIHdpdGggb25lIG1vZHVsZSBpbnN0ZWFkIG9mIHR3bwogCS0gcmV2aWV3IGJ5IHRoZSB3aXJlbGVzcyBkZXZlbG9wZXIgY29tbXVuaXR5Ci0JLSB2ZXJpZnkgdGhlIGNvZGUgYWdhaW5zdCB0aGUgY29kaW5nIHN0YW5kYXJkcyBmb3IgYSBwcm9wcGVyIGxpbnV4CisJLSB2ZXJpZnkgdGhlIGNvZGUgYWdhaW5zdCB0aGUgY29kaW5nIHN0YW5kYXJkcyBmb3IgYSBwcm9wZXIgbGludXgKIAkgIGRyaXZlcgogCS0gcmVzb2x2ZSBsaWNlbnNlIGlzc3VlcyAoPykKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvY2ZnODAyMTEuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2NmZzgwMjExLmMKaW5kZXggNmE3MWY1Mi4uNzYzNzgzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvY2ZnODAyMTEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9jZmc4MDIxMS5jCkBAIC0yNzMsNyArMjczLDcgQEAKIH0KIAogaW50IHByaXNtMl9zZXRfZGVmYXVsdF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgIHU4IGtleV9pbmRleCkKKwkJCSAgIHU4IGtleV9pbmRleCwgYm9vbCB1bmljYXN0LCBib29sIG11bHRpY2FzdCkKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnN0YS5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yc3RhLmMKaW5kZXggZWQ3NTFmNC4uMjFmMjVhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yc3RhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yc3RhLmMKQEAgLTE5NzYsNyArMTk3Niw3IEBACiAKIAl3bGFuZGV2LT5uc2RjYXBzID0gUDgwMjExX05TRENBUF9IV0ZSQUdNRU5UIHwgUDgwMjExX05TRENBUF9BVVRPSk9JTjsKIAotCS8qIEluaXRpYWxpemUgdGhlIGRldmljZSBwcml2YXRlIGRhdGEgc3R1Y3R1cmUuICovCisJLyogSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUuICovCiAJaHctPmRvdDExX2Rlc2lyZWRfYnNzX3R5cGUgPSAxOwogCiAJcmV0dXJuIHdsYW5kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfc2V0bW9kZS5jIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3NldG1vZGUuYwppbmRleCA4NzYyYTUzLi45NjY5YzIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfc2V0bW9kZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9zZXRtb2RlLmMKQEAgLTc4MzQsNyArNzgzNCw3IEBACiAJCQkJCQk9PSA2MDApKSB7CiAJCQlpbmRleCsrOwogCQl9Ci0JCS8qIEFsYW4gMTAvMTkvMjAwNzsgZG8gdGhlIHNpbWlsaWFyIGFkanVzdG1lbnQgbGlrZSBYR0lTZWFyY2hDUlQxUmF0ZSgpICovCisJCS8qIEFsYW4gMTAvMTkvMjAwNzsgZG8gdGhlIHNpbWlsYXIgYWRqdXN0bWVudCBsaWtlIFhHSVNlYXJjaENSVDFSYXRlKCkgKi8KIAkJaWYgKChwVkJJbmZvLT5SZWZJbmRleFtSZWZyZXNoUmF0ZVRhYmxlSW5kZXhdLlhSZXMgPT0gMTAyNCkKIAkJCQkmJiAocFZCSW5mby0+UmVmSW5kZXhbUmVmcmVzaFJhdGVUYWJsZUluZGV4XS5ZUmVzCiAJCQkJCQk9PSA3NjgpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmdhdHlwZXMuaCBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Z2F0eXBlcy5oCmluZGV4IDRiODc5NTEuLmQ2MTNlODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Z2F0eXBlcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Z2F0eXBlcy5oCkBAIC04NSw3ICs4NSw3IEBACiAJCQkJCSAgICB1bnNpZ25lZCBsb25nICopOwogfTsKIAotLyogQWRkdGlvbmFsIElPQ1RMIGZvciBjb21tdW5pY2F0aW9uIHhnaWZiIDw+IFggZHJpdmVyICAgICAgICAqLworLyogQWRkaXRpb25hbCBJT0NUTCBmb3IgY29tbXVuaWNhdGlvbiB4Z2lmYiA8PiBYIGRyaXZlciAgICAgICAgKi8KIC8qIElmIGNoYW5naW5nIHRoaXMsIHhnaWZiLmggbXVzdCBhbHNvIGJlIGNoYW5nZWQgKGZvciB4Z2lmYikgKi8KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9hbHVhLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9hbHVhLmMKaW5kZXggMmM1ZmNmZS4uMzBjYmI3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfYWx1YS5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2FsdWEuYwpAQCAtNDk2LDggKzQ5Niw4IEBACiAJbm9ub3BfZGVsYXlfbXNlY3MgPSB0Z19wdF9ncC0+dGdfcHRfZ3Bfbm9ub3BfZGVsYXlfbXNlY3M7CiAJc3Bpbl91bmxvY2soJnRnX3B0X2dwX21lbS0+dGdfcHRfZ3BfbWVtX2xvY2spOwogCS8qCi0JICogUHJvY2VzcyBBTFVBX0FDQ0VTU19TVEFURV9BQ1RJVkVfT1BUTUlaRUQgaW4gYSBzZXBlcmF0ZSBjb25kaXRpb25hbAotCSAqIHN0YXRlbWVudCBzbyB0aGUgY29tcGxpZXIga25vd3MgZXhwbGljdGx5IHRvIGNoZWNrIHRoaXMgY2FzZSBmaXJzdC4KKwkgKiBQcm9jZXNzIEFMVUFfQUNDRVNTX1NUQVRFX0FDVElWRV9PUFRNSVpFRCBpbiBhIHNlcGFyYXRlIGNvbmRpdGlvbmFsCisJICogc3RhdGVtZW50IHNvIHRoZSBjb21waWxlciBrbm93cyBleHBsaWNpdGx5IHRvIGNoZWNrIHRoaXMgY2FzZSBmaXJzdC4KIAkgKiBGb3IgdGhlIE9wdGltaXplZCBBTFVBIGFjY2VzcyBzdGF0ZSBjYXNlLCB3ZSB3YW50IHRvIHByb2Nlc3MgdGhlCiAJICogaW5jb21pbmcgZmFicmljIGNtZCBBU0FQLi4KIAkgKi8KQEAgLTExNTcsNyArMTE1Nyw3IEBACiAJCXNwaW5fdW5sb2NrKCZsdV9ncC0+bHVfZ3BfbG9jayk7CiAJCS8qCiAJCSAqCi0JCSAqIGx1X2dwX21lbSBpcyBhc3NvaWNhdGVkIHdpdGggYSBzaW5nbGUKKwkJICogbHVfZ3BfbWVtIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHNpbmdsZQogCQkgKiBzdHJ1Y3Qgc2VfZGV2aWNlLT5kZXZfYWx1YV9sdV9ncF9tZW0sIGFuZCBpcyByZWxlYXNlZCB3aGVuCiAJCSAqIHN0cnVjdCBzZV9kZXZpY2UgaXMgcmVsZWFzZWQgdmlhIGNvcmVfYWx1YV9mcmVlX2x1X2dwX21lbSgpLgogCQkgKgpAQCAtMTQyOSw3ICsxNDI5LDcgQEAKIAkJfQogCQlzcGluX3VubG9jaygmdGdfcHRfZ3AtPnRnX3B0X2dwX2xvY2spOwogCQkvKgotCQkgKiB0Z19wdF9ncF9tZW0gaXMgYXNzb2ljYXRlZCB3aXRoIGEgc2luZ2xlCisJCSAqIHRnX3B0X2dwX21lbSBpcyBhc3NvY2lhdGVkIHdpdGggYSBzaW5nbGUKIAkJICogc2VfcG9ydC0+c2VwX2FsdWFfdGdfcHRfZ3BfbWVtLCBhbmQgaXMgcmVsZWFzZWQgdmlhCiAJCSAqIGNvcmVfYWx1YV9mcmVlX3RnX3B0X2dwX21lbSgpLgogCQkgKgpAQCAtMTk2Myw3ICsxOTYzLDcgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVuYWJsaW5nIEFMVUEgRW11bGF0aW9uIGZvciBTUEMtMyIKIAkJCSIgZGV2aWNlXG4iLCBUUkFOU1BPUlQoZGV2KS0+bmFtZSk7CiAJCS8qCi0JCSAqIEFzc29pY2F0ZSB0aGlzIHN0cnVjdCBzZV9kZXZpY2Ugd2l0aCB0aGUgZGVmYXVsdCBBTFVBCisJCSAqIEFzc29jaWF0ZSB0aGlzIHN0cnVjdCBzZV9kZXZpY2Ugd2l0aCB0aGUgZGVmYXVsdCBBTFVBCiAJCSAqIExVTiBHcm91cC4KIAkJICovCiAJCWx1X2dwX21lbSA9IGNvcmVfYWx1YV9hbGxvY2F0ZV9sdV9ncF9tZW0oZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2RldmljZS5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZGV2aWNlLmMKaW5kZXggM2ZiOGUzMi4uZDI1ZTIwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZGV2aWNlLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZGV2aWNlLmMKQEAgLTM3MSw3ICszNzEsNyBAQAogCWlmICghKGVuYWJsZSkpIHsKIAkJLyoKIAkJICogZGV2ZS0+c2VfbHVuX2FjbCB3aWxsIGJlIE5VTEwgZm9yIGRlbW8tbW9kZSBjcmVhdGVkIExVTnMKLQkJICogdGhhdCBoYXZlIG5vdCBiZWVuIGV4cGxpY3RseSBjb25jZXJ0ZWQgdG8gTWFwcGVkTFVOcyAtPgorCQkgKiB0aGF0IGhhdmUgbm90IGJlZW4gZXhwbGljaXRseSBjb25jZXJ0ZWQgdG8gTWFwcGVkTFVOcyAtPgogCQkgKiBzdHJ1Y3Qgc2VfbHVuX2FjbCwgYnV0IHdlIHJlbW92ZSBkZXZlLT5hbHVhX3BvcnRfbGlzdCBmcm9tCiAJCSAqIHBvcnQtPnNlcF9hbHVhX2xpc3QuIFRoaXMgYWxzbyBtZWFucyB0aGF0IGFjdGl2ZSBVQXMgYW5kCiAJCSAqIE5vZGVBQ0wgY29udGV4dCBzcGVjaWZpYyBQUiBtZXRhZGF0YSBmb3IgZGVtby1tb2RlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9mYWJyaWNfbGliLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9mYWJyaWNfbGliLmMKaW5kZXggZDU3YWQ2Ny4uMWUxOTNmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZmFicmljX2xpYi5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZhYnJpY19saWIuYwpAQCAtNDMzLDcgKzQzMyw3IEBACiAJCS8qCiAJCSAqIEdvIGFoZWFkIGFuZCBkbyB0aGUgbG93ZXIgY2FzZSBjb252ZXJzaW9uIG9mIHRoZSByZWNlaXZlZAogCQkgKiAxMiBBU0NJSSBjaGFyYWN0ZXJzIHJlcHJlc2VudGluZyB0aGUgSVNJRCBpbiB0aGUgVHJhbnNwb3J0SUQKLQkJICogZm9yIGNvbXBhcmlzaW9uIGFnYWluc3QgdGhlIHJ1bm5pbmcgaVNDU0kgc2Vzc2lvbidzIElTSUQgZnJvbQorCQkgKiBmb3IgY29tcGFyaXNvbiBhZ2FpbnN0IHRoZSBydW5uaW5nIGlTQ1NJIHNlc3Npb24ncyBJU0lEIGZyb20KIAkJICogaXNjc2lfdGFyZ2V0LmM6bGlvX3Nlc3NfZ2V0X2luaXRpYXRvcl9zaWQoKQogCQkgKi8KIAkJZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZpbGUuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZpbGUuYwppbmRleCAwMmY1NTNhLi4xNTBjNDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9maWxlLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZmlsZS5jCkBAIC0xNTksNyArMTU5LDcgQEAKICNlbmRpZgogLyoJZmxhZ3MgfD0gT19ESVJFQ1Q7ICovCiAJLyoKLQkgKiBJZiBmZF9idWZmZXJlZF9pbz0xIGhhcyBub3QgYmVlbiBzZXQgZXhwbGljdGx5ICh0aGUgZGVmYXVsdCksCisJICogSWYgZmRfYnVmZmVyZWRfaW89MSBoYXMgbm90IGJlZW4gc2V0IGV4cGxpY2l0bHkgKHRoZSBkZWZhdWx0KSwKIAkgKiB1c2UgT19TWU5DIHRvIGZvcmNlIEZJTEVJTyB3cml0ZXMgdG8gZGlzay4KIAkgKi8KIAlpZiAoIShmZF9kZXYtPmZiZF9mbGFncyAmIEZEQkRfVVNFX0JVRkZFUkVEX0lPKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3ByLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9wci5jCmluZGV4IDI1MjFmNzUuLmE3OWY1MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3ByLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfcHIuYwpAQCAtNDc4LDcgKzQ3OCw3IEBACiAJCWJyZWFrOwogCX0KIAkvKgotCSAqIENhc2Ugd2hlcmUgdGhlIENEQiBpcyBleHBsaWN0bHkgYWxsb3dlZCBpbiB0aGUgYWJvdmUgc3dpdGNoCisJICogQ2FzZSB3aGVyZSB0aGUgQ0RCIGlzIGV4cGxpY2l0bHkgYWxsb3dlZCBpbiB0aGUgYWJvdmUgc3dpdGNoCiAJICogc3RhdGVtZW50LgogCSAqLwogCWlmICghKHJldCkgJiYgIShvdGhlcl9jZGIpKSB7CkBAIC0zNzM1LDcgKzM3MzUsNyBAQAogCQlyZXR1cm4gUFlYX1RSQU5TUE9SVF9MVV9DT01NX0ZBSUxVUkU7CiAKIAlpZiAoY21kLT5kYXRhX2xlbmd0aCA8IDI0KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlNQQy1QUjogUmVjaWV2ZWQgUFIgT1VUIHBhcmFtZXRlciBsaXN0IgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJTUEMtUFI6IFJlY2VpdmVkIFBSIE9VVCBwYXJhbWV0ZXIgbGlzdCIKIAkJCSIgbGVuZ3RoIHRvbyBzbWFsbDogJXVcbiIsIGNtZC0+ZGF0YV9sZW5ndGgpOwogCQlyZXR1cm4gUFlYX1RSQU5TUE9SVF9JTlZBTElEX1BBUkFNRVRFUl9MSVNUOwogCX0KQEAgLTM3NzgsNyArMzc3OCw3IEBACiAJICovCiAJaWYgKCEoc3BlY19pX3B0KSAmJiAoKGNkYlsxXSAmIDB4MWYpICE9IFBST19SRUdJU1RFUl9BTkRfTU9WRSkgJiYKIAkgICAgKGNtZC0+ZGF0YV9sZW5ndGggIT0gMjQpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlNQQy1QUjogUmVjaWV2ZWQgUFIgT1VUIGlsbGVnYWwgcGFyYW1ldGVyIgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJTUEMtUFI6IFJlY2VpdmVkIFBSIE9VVCBpbGxlZ2FsIHBhcmFtZXRlciIKIAkJCSIgbGlzdCBsZW5ndGg6ICV1XG4iLCBjbWQtPmRhdGFfbGVuZ3RoKTsKIAkJcmV0dXJuIFBZWF9UUkFOU1BPUlRfSU5WQUxJRF9QQVJBTUVURVJfTElTVDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5jCmluZGV4IGJmNmFhOGEuLjk1ODNiMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5jCkBAIC03MTksNyArNzE5LDcgQEAKIAkJCWNtZC0+c2VfbHVuID0gTlVMTDsKIAkJCS8qCiAJCQkgKiBTb21lIGZhYnJpYyBtb2R1bGVzIGxpa2UgdGNtX2xvb3AgY2FuIHJlbGVhc2UKLQkJCSAqIHRoZWlyIGludGVybmFsbHkgYWxsb2NhdGVkIEkvTyByZWZyZW5jZSBub3cgYW5kCisJCQkgKiB0aGVpciBpbnRlcm5hbGx5IGFsbG9jYXRlZCBJL08gcmVmZXJlbmNlIG5vdyBhbmQKIAkJCSAqIHN0cnVjdCBzZV9jbWQgbm93LgogCQkJICovCiAJCQlpZiAoQ01EX1RGTyhjbWQpLT5jaGVja19zdG9wX2ZyZWUgIT0gTlVMTCkgewpAQCAtMjAyOSw3ICsyMDI5LDcgQEAKIAkgKiBJZiB0aGUgcmVjZWl2ZWQgQ0RCIGhhcyBhbGVhZHkgYmVlbiBBQk9SVEVEIGJ5IHRoZSBnZW5lcmljCiAJICogdGFyZ2V0IGVuZ2luZSwgd2Ugbm93IGNhbGwgdHJhbnNwb3J0X2NoZWNrX2Fib3J0ZWRfc3RhdHVzKCkKIAkgKiB0byBxdWV1ZSBhbnkgZGVsYXRlZCBUQVNLX0FCT1JURUQgc3RhdHVzIGZvciB0aGUgcmVjZWl2ZWQgQ0RCIHRvIHRoZQotCSAqIGZhYnJpYyBtb2R1bGUgYXMgd2UgYXJlIGV4cGVjdGluZyBubyBmdXRoZXIgaW5jb21pbmcgREFUQSBPVVQKKwkgKiBmYWJyaWMgbW9kdWxlIGFzIHdlIGFyZSBleHBlY3Rpbmcgbm8gZnVydGhlciBpbmNvbWluZyBEQVRBIE9VVAogCSAqIHNlcXVlbmNlcyBhdCB0aGlzIHBvaW50LgogCSAqLwogCWlmICh0cmFuc3BvcnRfY2hlY2tfYWJvcnRlZF9zdGF0dXMoY21kLCAxKSAhPSAwKQpAQCAtMjUwMSw3ICsyNTAxLDcgQEAKIAlpZiAoU0VfREVWKGNtZCktPmRldl90YXNrX2F0dHJfdHlwZSAhPSBTQU1fVEFTS19BVFRSX0VNVUxBVEVEKQogCQlyZXR1cm4gMTsKIAkvKgotCSAqIENoZWNrIGZvciB0aGUgZXhpc3RhbmNlIG9mIEhFQURfT0ZfUVVFVUUsIGFuZCBpZiB0cnVlIHJldHVybiAxCisJICogQ2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgSEVBRF9PRl9RVUVVRSwgYW5kIGlmIHRydWUgcmV0dXJuIDEKIAkgKiB0byBhbGxvdyB0aGUgcGFzc2VkIHN0cnVjdCBzZV9jbWQgbGlzdCBvZiB0YXNrcyB0byB0aGUgZnJvbnQgb2YgdGhlIGxpc3QuCiAJICovCiAJIGlmIChjbWQtPnNhbV90YXNrX2F0dHIgPT0gVEFTS19BVFRSX0hPUSkgewpAQCAtMjU0Nyw3ICsyNTQ3LDcgQEAKIAlpZiAoYXRvbWljX3JlYWQoJlNFX0RFVihjbWQpLT5kZXZfb3JkZXJlZF9zeW5jKSAhPSAwKSB7CiAJCS8qCiAJCSAqIE90aGVyd2lzZSwgYWRkIGNtZCB3LyB0YXNrcyB0byBkZWxheWVkIGNtZCBxdWV1ZSB0aGF0Ci0JCSAqIHdpbGwgYmUgZHJhaW5lZCB1cG9uIGNvbXBldGlvbiBvZiBIRUFEX09GX1FVRVVFIHRhc2suCisJCSAqIHdpbGwgYmUgZHJhaW5lZCB1cG9uIGNvbXBsZXRpb24gb2YgSEVBRF9PRl9RVUVVRSB0YXNrLgogCQkgKi8KIAkJc3Bpbl9sb2NrKCZTRV9ERVYoY21kKS0+ZGVsYXllZF9jbWRfbG9jayk7CiAJCWNtZC0+c2VfY21kX2ZsYWdzIHw9IFNDRl9ERUxBWUVEX0NNRF9GUk9NX1NBTV9BVFRSOwpAQCAtMjU4OSw3ICsyNTg5LDcgQEAKIAl9CiAJLyoKIAkgKiBDYWxsIHRyYW5zcG9ydF9jbWRfY2hlY2tfc3RvcCgpIHRvIHNlZSBpZiBhIGZhYnJpYyBleGNlcHRpb24KLQkgKiBoYXMgb2NjdXJlZCB0aGF0IHByZXZlbnRzIGV4ZWN1dGlvbi4KKwkgKiBoYXMgb2NjdXJyZWQgdGhhdCBwcmV2ZW50cyBleGVjdXRpb24uCiAJICovCiAJaWYgKCEodHJhbnNwb3J0X2NtZF9jaGVja19zdG9wKGNtZCwgMCwgVFJBTlNQT1JUX1BST0NFU1NJTkcpKSkgewogCQkvKgpAQCAtMzEwOSw3ICszMTA5LDcgQEAKIAlpZiAocmV0ICE9IDApIHsKIAkJY21kLT50cmFuc3BvcnRfd2FpdF9mb3JfdGFza3MgPSAmdHJhbnNwb3J0X25vcF93YWl0X2Zvcl90YXNrczsKIAkJLyoKLQkJICogU2V0IFNDU0kgYWRkaXRpb25hbCBzZW5zZSBjb2RlIChBU0MpIHRvICdMVU4gTm90IEFjY2Vzc2FibGUnOworCQkgKiBTZXQgU0NTSSBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKEFTQykgdG8gJ0xVTiBOb3QgQWNjZXNzaWJsZSc7CiAJCSAqIFRoZSBBTFVBIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKEFTQ1EpIGlzIGRldGVybWluZWQKIAkJICogYnkgdGhlIEFMVUEgcHJpbWFyeSBvciBzZWNvbmRhcnkgYWNjZXNzIHN0YXRlLi4KIAkJICovCkBAIC0zODY3LDcgKzM4NjcsNyBAQAogCQl9CiAJfQogCS8qCi0JICogQ2hlY2sgZm9yIGEgY2FsbGJhY2ssIHVzZWQgYnkgYW1vdW5nc3Qgb3RoZXIgdGhpbmdzCisJICogQ2hlY2sgZm9yIGEgY2FsbGJhY2ssIHVzZWQgYnkgYW1vbmdzdCBvdGhlciB0aGluZ3MKIAkgKiBYRFdSSVRFX1JFQURfMTAgZW11bGF0aW9uLgogCSAqLwogCWlmIChjbWQtPnRyYW5zcG9ydF9jb21wbGV0ZV9jYWxsYmFjaykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3VhLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV91YS5jCmluZGV4IGEyZWYzNDYuLmRmMzU1MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3VhLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdWEuYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJCX0KIAkJLyoKIAkJICogT3RoZXJ3aXNlIGZvciB0aGUgZGVmYXVsdCAwMGIsIHJlbGVhc2UgdGhlIFVOSVQgQVRURU5USU9OCi0JCSAqIGNvbmRpdGlvbi4gIFJldHVybiB0aGUgQVNDL0FTQ1Egb2YgdGhlIGhpZ2VzdCBwcmlvcml0eSBVQQorCQkgKiBjb25kaXRpb24uICBSZXR1cm4gdGhlIEFTQy9BU0NRIG9mIHRoZSBoaWdoZXN0IHByaW9yaXR5IFVBCiAJCSAqIChoZWFkIG9mIHRoZSBsaXN0KSBpbiB0aGUgb3V0Z29pbmcgQ0hFQ0tfQ09ORElUSU9OICsgc2Vuc2UuCiAJCSAqLwogCQlpZiAoaGVhZCkgewpAQCAtMzA0LDcgKzMwNCw3IEBACiAJICogbWF0Y2hpbmcgc3RydWN0IHNlX2x1bi4KIAkgKgogCSAqIE9uY2UgdGhlIHJldHVybmluZyBBU0MvQVNDUSB2YWx1ZXMgYXJlIHNldCwgd2UgZ28gYWhlYWQgYW5kCi0JICogcmVsZWFzZSBhbGwgb2YgdGhlIFVuaXQgQXR0ZW50aW9uIGNvbmRpdGlvbnMgZm9yIHRoZSBhc3NvaWNhdGVkCisJICogcmVsZWFzZSBhbGwgb2YgdGhlIFVuaXQgQXR0ZW50aW9uIGNvbmRpdGlvbnMgZm9yIHRoZSBhc3NvY2lhdGVkCiAJICogc3RydWN0IHNlX2x1bi4KIAkgKi8KIAlzcGluX2xvY2soJmRldmUtPnVhX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90ZWxlcGhvbnkvaXhqLmMgYi9kcml2ZXJzL3RlbGVwaG9ueS9peGouYwppbmRleCBiMDAxMDE5Li5kNWY5MjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RlbGVwaG9ueS9peGouYworKysgYi9kcml2ZXJzL3RlbGVwaG9ueS9peGouYwpAQCAtMTY5LDcgKzE2OSw3IEBACiAgKiBBZGRlZCBzdXBwb3J0IGZvciBMaW51eCAyLjQueCBrZXJuZWxzLgogICoKICAqIFJldmlzaW9uIDMuNzcgIDIwMDEvMDEvMDkgMDQ6MDA6NTIgIGVva2Vyc29uCi0gKiBMaW5ldGVzdCB3aWxsIG5vdyB0ZXN0IHRoZSBsaW5lLCBldmVuIGlmIGl0IGhhcyBwcmV2aW91c2x5IHN1Y2NlZGVkLgorICogTGluZXRlc3Qgd2lsbCBub3cgdGVzdCB0aGUgbGluZSwgZXZlbiBpZiBpdCBoYXMgcHJldmlvdXNseSBzdWNjZWVkZWQuCiAgKgogICogUmV2aXNpb24gMy43NiAgMjAwMS8wMS8wOCAxOToyNzowMCAgZW9rZXJzb24KICAqIEZpeGVkIHByb2JsZW0gd2l0aCBzdGFuZGFyZCBjYWJsZSBvbiBJbnRlcm5ldCBQaG9uZUNBUkQuCkBAIC0zNTIsNyArMzUyLDcgQEAKIAkJfSBlbHNlIHsKIAkJCWotPmZza3NpemUgPSA4MDAwOwogCQkJaWYoaXhqZGVidWcgJiAweDAyMDApIHsKLQkJCQlwcmludGsoIklYSiBwaG9uZSVkIC0gYWxsb2NhdGUgc3VjY2VkZWRcbiIsIGotPmJvYXJkKTsKKwkJCQlwcmludGsoIklYSiBwaG9uZSVkIC0gYWxsb2NhdGUgc3VjY2VlZGVkXG4iLCBqLT5ib2FyZCk7CiAJCQl9CiAJCX0KIAl9CkBAIC00ODcsNyArNDg3LDcgQEAKIDgtOQkJSGFyZHdhcmUgU3RhdHVzIFJlZ2lzdGVyCQkJUmVhZCBPbmx5CiBBLUIJCUhhcmR3YXJlIENvbnRyb2wgUmVnaXN0ZXIJCQlSZWFkIFdyaXRlCiBDLUQgSG9zdCBUcmFuc21pdCAoV3JpdGUpIERhdGEgQnVmZmVyIEFjY2VzcyBQb3J0IChidWZmZXIgaW5wdXQpV3JpdGUgT25seQotRS1GIEhvc3QgUmVjaWV2ZSAoUmVhZCkgRGF0YSBCdWZmZXIgQWNjZXNzIFBvcnQgKGJ1ZmZlciBpbnB1dCkJUmVhZCBPbmx5CitFLUYgSG9zdCBSZWNlaXZlIChSZWFkKSBEYXRhIEJ1ZmZlciBBY2Nlc3MgUG9ydCAoYnVmZmVyIGlucHV0KQlSZWFkIE9ubHkKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGlubGluZSB2b2lkIGl4al9yZWFkX0hTUihJWEogKmopCkBAIC00MTk1LDcgKzQxOTUsNyBAQAogCQkJaXhqX1dyaXRlRFNQQ29tbWFuZCgweEUzMzgsIGopOwkvKiBTZXQgRWNobyBTdXBwcmVzc2VyIEF0dGVudWF0aW9uIHRvIDBkQiAqLwogCiAJCQkvKiBOb3cgd2UgY2FuIHNldCB0aGUgQUdDIGluaXRpYWwgcGFyYW1ldGVycyBhbmQgdHVybiBpdCBvbiAqLwotCQkJaXhqX1dyaXRlRFNQQ29tbWFuZCgweENGOTAsIGopOwkvKiBTZXQgQUdDIE1pbnVtdW0gZ2FpbiAqLworCQkJaXhqX1dyaXRlRFNQQ29tbWFuZCgweENGOTAsIGopOwkvKiBTZXQgQUdDIE1pbmltdW0gZ2FpbiAqLwogCQkJaXhqX1dyaXRlRFNQQ29tbWFuZCgweDAwMjAsIGopOwkvKiB0byAwLjEyNSAoLTE4ZEIpICovCiAJCiAJCQlpeGpfV3JpdGVEU1BDb21tYW5kKDB4Q0Y5MSwgaik7CS8qIFNldCBBR0MgTWF4aW11bSBnYWluICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlbGVwaG9ueS9peGouaCBiL2RyaXZlcnMvdGVsZXBob255L2l4ai5oCmluZGV4IDRjMzJhNDMuLjJjODQxMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGVsZXBob255L2l4ai5oCisrKyBiL2RyaXZlcnMvdGVsZXBob255L2l4ai5oCkBAIC0xMTQ5LDcgKzExNDksNyBAQAogCXVuc2lnbmVkIGludCBmaXJzdHJpbmc6MTsgLyogRmlyc3QgcmluZyBjYWRlbmNlIGlzIGNvbXBsZXRlICovCiAJdW5zaWduZWQgaW50IHBzdG5jaGVjazoxOwkvKiBDdXJyZW50bHkgY2hlY2tpbmcgdGhlIFBTVE4gTGluZSAqLwogCXVuc2lnbmVkIGludCBwc3RuX3JtcjoxOwotCXVuc2lnbmVkIGludCB4OjM7CS8qIHVuc2VkIGJpdHMgKi8KKwl1bnNpZ25lZCBpbnQgeDozOwkvKiB1bnVzZWQgYml0cyAqLwogCiB9IElYSl9GTEFHUzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvaHZjL2h2Y19pdWN2LmMgYi9kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYwppbmRleCBjMzQyNWJiLi5iNmY3ZDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYworKysgYi9kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYwpAQCAtMjU1LDcgKzI1NSw3IEBACiAJCWRlZmF1bHQ6CiAJCQl3cml0dGVuID0gLUVJTzsKIAkJfQotCQkvKiByZW1vdmUgYnVmZmVyIGlmIGFuIGVycm9yIGhhcyBvY2N1cmVkIG9yIHJlY2VpdmVkIGRhdGEKKwkJLyogcmVtb3ZlIGJ1ZmZlciBpZiBhbiBlcnJvciBoYXMgb2NjdXJyZWQgb3IgcmVjZWl2ZWQgZGF0YQogCQkgKiBpcyBub3QgY29ycmVjdCAqLwogCQlpZiAocmMgfHwgKHJiLT5tYnVmLT52ZXJzaW9uICE9IE1TR19WRVJTSU9OKSB8fAogCQkJICAocmItPm1zZy5sZW5ndGggICAgIT0gTVNHX1NJWkUocmItPm1idWYtPmRhdGFsZW4pKSkKQEAgLTYyMCw3ICs2MjAsNyBAQAogICoJCXRoZSBpbmRleCBvZiBhbiBzdHJ1Y3QgaHZjX2l1Y3ZfcHJpdmF0ZSBpbnN0YW5jZS4KICAqCiAgKiBUaGlzIHJvdXRpbmUgbm90aWZpZXMgdGhlIEhWQyBiYWNrLWVuZCB0aGF0IGEgdHR5IGhhbmd1cCAoY2FycmllciBsb3NzLAotICogdmlydHVhbCBvciBvdGhlcndpc2UpIGhhcyBvY2N1cmVkLgorICogdmlydHVhbCBvciBvdGhlcndpc2UpIGhhcyBvY2N1cnJlZC4KICAqIFRoZSB6L1ZNIElVQ1YgSFZDIGRldmljZSBkcml2ZXIgaWdub3JlcyB2aXJ0dWFsIGhhbmd1cHMgKHZoYW5ndXAoKSkKICAqIHRvIGtlZXAgYW4gZXhpc3RpbmcgSVVDViBjb21tdW5pY2F0aW9uIHBhdGggZXN0YWJsaXNoZWQuCiAgKiAoQmFja2dyb3VuZDogdmhhbmd1cCgpIGlzIGNhbGxlZCBmcm9tIHVzZXIgc3BhY2UgKGJ5IGdldHR5IG9yIGxvZ2luKSB0bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvaHZjL2h2Y192aW8uYyBiL2RyaXZlcnMvdHR5L2h2Yy9odmNfdmlvLmMKaW5kZXggNWUyZjUyYi4uZTZlZWExNCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvaHZjL2h2Y192aW8uYworKysgYi9kcml2ZXJzL3R0eS9odmMvaHZjX3Zpby5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIHZpbyBkcml2ZXIgaW50ZXJmYWNlIHRvIGh2Y19jb25zb2xlLmMKICAqCi0gKiBUaGlzIGNvZGUgd2FzIG1vdmVkIGhlcmUgdG8gYWxsb3cgdGhlIHJlbWFpbmcgY29kZSB0byBiZSByZXVzZWQgYXMgYQorICogVGhpcyBjb2RlIHdhcyBtb3ZlZCBoZXJlIHRvIGFsbG93IHRoZSByZW1haW5pbmcgY29kZSB0byBiZSByZXVzZWQgYXMgYQogICogZ2VuZXJpYyBwb2xsaW5nIG1vZGUgd2l0aCBzZW1pLXJlbGlhYmxlIHRyYW5zcG9ydCBkcml2ZXIgY29yZSB0byB0aGUKICAqIGNvbnNvbGUgYW5kIHR0eSBzdWJzeXN0ZW1zLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L2h2Yy9odmNzLmMgYi9kcml2ZXJzL3R0eS9odmMvaHZjcy5jCmluZGV4IGJlZjIzOGYuLjRjOGI2NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L2h2Yy9odmNzLmMKKysrIGIvZHJpdmVycy90dHkvaHZjL2h2Y3MuYwpAQCAtMTE4LDcgKzExOCw3IEBACiAgKiBhcmNoL3Bvd2VyZXBjL2luY2x1ZGUvYXNtL2h2Y3NlcnZlci5oCiAgKgogICogMS4zLjIgLT4gMS4zLjMgUmVwbGFjZWQgeWllbGQoKSBpbiBodmNzX2Nsb3NlKCkgd2l0aCB0dHlfd2FpdF91bnRpbF9zZW50KCkgdG8KLSAqIHByZXZlbnQgcG9zc2libGUgbG9ja3VwIHdpdGggcmVhbHRpbWUgc2NoZWR1bGluZyBhcyBzaW1pbGFyaWx5IHBvaW50ZWQgb3V0IGJ5CisgKiBwcmV2ZW50IHBvc3NpYmxlIGxvY2t1cCB3aXRoIHJlYWx0aW1lIHNjaGVkdWxpbmcgYXMgc2ltaWxhcmx5IHBvaW50ZWQgb3V0IGJ5CiAgKiBha3BtIGluIGh2Y19jb25zb2xlLiAgQ2hhbmdlZCByZXN1bHRlZCBpbiB0aGUgcmVtb3ZhbCBvZiBodmNzX2ZpbmFsX2Nsb3NlKCkKICAqIHRvIHJlb3JkZXIgY2xlYW51cCBvcGVyYXRpb25zIGFuZCBwcmV2ZW50IGRpc2NhcmRpbmcgb2YgcGVuZGluZyBkYXRhIGR1cmluZwogICogYW4gaHZjc19jbG9zZSgpLiAgUmVtb3ZlZCBzcGlubG9jayBwcm90ZWN0aW9uIG9mIGh2Y3Nfc3RydWN0IGRhdGEgbWVtYmVycyBpbgpAQCAtNTgxLDcgKzU4MSw3IEBACiAJCQkvKgogCQkJICogV2UgYXJlIHN0aWxsIG9ibGlnYXRlZCB0byBkZWxpdmVyIHRoZSBkYXRhIHRvIHRoZQogCQkJICogaHlwZXJ2aXNvciBldmVuIGlmIHRoZSB0dHkgaGFzIGJlZW4gY2xvc2VkIGJlY2F1c2UKLQkJCSAqIHdlIGNvbW1pdGVkIHRvIGRlbGl2ZXJpbmcgaXQuICBCdXQgZG9uJ3QgdHJ5IHRvIHdha2UKKwkJCSAqIHdlIGNvbW1pdHRlZCB0byBkZWxpdmVyaW5nIGl0LiAgQnV0IGRvbid0IHRyeSB0byB3YWtlCiAJCQkgKiBhIG5vbi1leGlzdGVudCB0dHkuCiAJCQkgKi8KIAkJCWlmICh0dHkpIHsKQEAgLTEzNDksNyArMTM0OSw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmh2Y3NkLT5sb2NrLCBmbGFncyk7CiAKIAkvKgotCSAqIFNvbWVob3cgYW4gb3BlbiBzdWNjZWRkZWQgYnV0IHRoZSBkZXZpY2Ugd2FzIHJlbW92ZWQgb3IgdGhlCisJICogU29tZWhvdyBhbiBvcGVuIHN1Y2NlZWRlZCBidXQgdGhlIGRldmljZSB3YXMgcmVtb3ZlZCBvciB0aGUKIAkgKiBjb25uZWN0aW9uIHRlcm1pbmF0ZWQgYmV0d2VlbiB0aGUgdnR5LXNlcnZlciBhbmQgcGFydG5lciB2dHkgZHVyaW5nCiAJICogdGhlIG1pZGRsZSBvZiBhIHdyaXRlIG9wZXJhdGlvbj8gIFRoaXMgaXMgYSBjcnVtbXkgcGxhY2UgdG8gZG8gdGhpcwogCSAqIGJ1dCB3ZSB3YW50IHRvIGtlZXAgaXQgYWxsIGluIHRoZSBzcGlubG9jay4KQEAgLTE0MjAsNyArMTQyMCw3IEBACiB9CiAKIC8qCi0gKiBUaGlzIGlzIHJlYWxseSBhc2tpbmcgaG93IG11Y2ggY2FuIHdlIGd1YXJlbnRlZSB0aGF0IHdlIGNhbiBzZW5kIG9yIHRoYXQgd2UKKyAqIFRoaXMgaXMgcmVhbGx5IGFza2luZyBob3cgbXVjaCBjYW4gd2UgZ3VhcmFudGVlIHRoYXQgd2UgY2FuIHNlbmQgb3IgdGhhdCB3ZQogICogYWJzb2x1dGVseSBXSUxMIEJVRkZFUiBpZiB3ZSBjYW4ndCBzZW5kIGl0LiAgVGhpcyBkcml2ZXIgTVVTVCBob25vciB0aGUKICAqIHJldHVybiB2YWx1ZSwgaGVuY2UgdGhlIHJlYXNvbiBmb3IgaHZjc19zdHJ1Y3QgYnVmZmVyaW5nLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9teHNlci5oIGIvZHJpdmVycy90dHkvbXhzZXIuaAppbmRleCA0MTg3OGE2Li4wYmY3OTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9teHNlci5oCisrKyBiL2RyaXZlcnMvdHR5L214c2VyLmgKQEAgLTExMyw3ICsxMTMsNyBAQAogI2RlZmluZSBNT1hBX01VU1RfSUlSX1JUTwkJMHgwQwogI2RlZmluZSBNT1hBX01VU1RfSUlSX0xTUgkJMHgwNgogCi0vKiByZWNpZXZlZCBYb24vWG9mZiBvciBzcGVjaWNhbCBpbnRlcnJ1cHQgcGVuZGluZyAqLworLyogcmVjZWl2ZWQgWG9uL1hvZmYgb3Igc3BlY2ljYWwgaW50ZXJydXB0IHBlbmRpbmcgKi8KICNkZWZpbmUgTU9YQV9NVVNUX0lJUl9YU0MJCTB4MTAKIAogLyogUlRTL0NUUyBjaGFuZ2Ugc3RhdGUgaW50ZXJydXB0IHBlbmRpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L25fZ3NtLmMgYi9kcml2ZXJzL3R0eS9uX2dzbS5jCmluZGV4IDE3NmY2MzIuLjc0MjczZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L25fZ3NtLmMKKysrIGIvZHJpdmVycy90dHkvbl9nc20uYwpAQCAtNzQsNyArNzQsNyBAQAogI2VuZGlmCiAKIC8qCi0gKiBTZW1pLWFyYml0YXJ5IGJ1ZmZlciBzaXplIGxpbWl0cy4gMDcxMCBpcyBub3JtYWxseSBydW4gd2l0aCAzMi02NCBieXRlCisgKiBTZW1pLWFyYml0cmFyeSBidWZmZXIgc2l6ZSBsaW1pdHMuIDA3MTAgaXMgbm9ybWFsbHkgcnVuIHdpdGggMzItNjQgYnl0ZQogICogbGltaXRzIHNvIHRoaXMgaXMgcGxlbnR5CiAgKi8KICNkZWZpbmUgTUFYX01SVSA1MTIKQEAgLTgyLDcgKzgyLDcgQEAKIAogLyoKICAqCUVhY2ggYmxvY2sgb2YgZGF0YSB3ZSBoYXZlIHF1ZXVlZCB0byBnbyBvdXQgaXMgaW4gdGhlIGZvcm0gb2YKLSAqCWEgZ3NtX21zZyB3aGljaCBob2xkcyBldmVyeXRoaW5nIHdlIG5lZWQgaW4gYSBsaW5rIGxheWVyIGluZGVwZW5kYW50CisgKglhIGdzbV9tc2cgd2hpY2ggaG9sZHMgZXZlcnl0aGluZyB3ZSBuZWVkIGluIGEgbGluayBsYXllciBpbmRlcGVuZGVudAogICoJZm9ybWF0CiAgKi8KIApAQCAtMTE5Myw4ICsxMTkzLDggQEAKIAkJYnJlYWs7CiAJCS8qIE9wdGlvbmFsIHVuc3VwcG9ydGVkIGNvbW1hbmRzICovCiAJY2FzZSBDTURfUE46CS8qIFBhcmFtZXRlciBuZWdvdGlhdGlvbiAqLwotCWNhc2UgQ01EX1JQTjoJLyogUmVtb3RlIHBvcnQgbmVnb3RhdGlvbiAqLwotCWNhc2UgQ01EX1NOQzoJLyogU2VydmljZSBuZWdvdGF0aW9uIGNvbW1hbmQgKi8KKwljYXNlIENNRF9SUE46CS8qIFJlbW90ZSBwb3J0IG5lZ290aWF0aW9uICovCisJY2FzZSBDTURfU05DOgkvKiBTZXJ2aWNlIG5lZ290aWF0aW9uIGNvbW1hbmQgKi8KIAlkZWZhdWx0OgogCQkvKiBSZXBseSB0byBiYWQgY29tbWFuZHMgd2l0aCBhbiBOU0MgKi8KIAkJYnVmWzBdID0gY29tbWFuZDsKQEAgLTE2NTgsOCArMTY1OCwxMiBAQAogCiAJaWYgKChnc20tPmNvbnRyb2wgJiB+UEYpID09IFVJKQogCQlnc20tPmZjcyA9IGdzbV9mY3NfYWRkX2Jsb2NrKGdzbS0+ZmNzLCBnc20tPmJ1ZiwgZ3NtLT5sZW4pOwotCS8qIGdlbmVyYXRlIGZpbmFsIENSQyB3aXRoIHJlY2VpdmVkIEZDUyAqLwotCWdzbS0+ZmNzID0gZ3NtX2Zjc19hZGQoZ3NtLT5mY3MsIGdzbS0+cmVjZWl2ZWRfZmNzKTsKKwlpZiAoZ3NtLT5lbmNvZGluZyA9PSAwKXsKKwkJLyogV0FSTklORzogZ3NtLT5yZWNlaXZlZF9mY3MgaXMgdXNlZCBmb3IgZ3NtLT5lbmNvZGluZyA9IDAgb25seS4KKwkJICAgICAgICAgICAgSW4gdGhpcyBjYXNlIGl0IGNvbnRhaW4gdGhlIGxhc3QgcGllY2Ugb2YgZGF0YQorCQkgICAgICAgICAgICByZXF1aXJlZCB0byBnZW5lcmF0ZSBmaW5hbCBDUkMgKi8KKwkJZ3NtLT5mY3MgPSBnc21fZmNzX2FkZChnc20tPmZjcywgZ3NtLT5yZWNlaXZlZF9mY3MpOworCX0KIAlpZiAoZ3NtLT5mY3MgIT0gR09PRF9GQ1MpIHsKIAkJZ3NtLT5iYWRfZmNzKys7CiAJCWlmIChkZWJ1ZyAmIDQpCkBAIC0yMDI2LDcgKzIwMzAsNyBAQAogICoJQG11eDogbXV4IHRvIGZyZWUKICAqCiAgKglEaXNwb3NlIG9mIGFsbG9jYXRlZCByZXNvdXJjZXMgZm9yIGEgZGVhZCBtdXguIE5vIHJlZmNvdW50aW5nCi0gKglhdCBwcmVzZW50IHNvIHRoZSBtdXggbXVzdCBiZSB0cnVlbHkgZGVhZC4KKyAqCWF0IHByZXNlbnQgc28gdGhlIG11eCBtdXN0IGJlIHRydWx5IGRlYWQuCiAgKi8KIHZvaWQgZ3NtX2ZyZWVfbXV4KHN0cnVjdCBnc21fbXV4ICpnc20pCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9ub3pvbWkuYyBiL2RyaXZlcnMvdHR5L25vem9taS5jCmluZGV4IGY0ZjExMTYuLmZkMGE5ODUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9ub3pvbWkuYworKysgYi9kcml2ZXJzL3R0eS9ub3pvbWkuYwpAQCAtMTY3Myw3ICsxNjczLDcgQEAKIAogLyoKICAqIGNhbGxlZCB3aGVuIHRoZSB1c2Vyc3BhY2UgcHJvY2VzcyB3cml0ZXMgdG8gdGhlIHR0eSAoL2Rldi9ub3oqKS4KLSAqIERhdGEgaXMgaW5zZXJ0ZWQgaW50byBhIGZpZm8sIHdoaWNoIGlzIHRoZW4gcmVhZCBhbmQgdHJhbnNmZXJlZCB0byB0aGUgbW9kZW0uCisgKiBEYXRhIGlzIGluc2VydGVkIGludG8gYSBmaWZvLCB3aGljaCBpcyB0aGVuIHJlYWQgYW5kIHRyYW5zZmVycmVkIHRvIHRoZSBtb2RlbS4KICAqLwogc3RhdGljIGludCBudHR5X3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKIAkJICAgICAgaW50IGNvdW50KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvcm9ja2V0LmMgYi9kcml2ZXJzL3R0eS9yb2NrZXQuYwppbmRleCAzNzgwZGE4Li4wMzZmZWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9yb2NrZXQuYworKysgYi9kcml2ZXJzL3R0eS9yb2NrZXQuYwpAQCAtMjA2MCw3ICsyMDYwLDcgQEAKIAkJCXNDbG9ja1ByZXNjYWxlID0gMHgxOTsKIAkJCXJwX2JhdWRfYmFzZVtpXSA9IDIzMDQwMDsKIAkJfSBlbHNlIHsKLQkJCS8qIG1vZCA0IChkZXZpZGUgYnkgNSkgcHJlc2NhbGUgKi8KKwkJCS8qIG1vZCA0IChkaXZpZGUgYnkgNSkgcHJlc2NhbGUgKi8KIAkJCXNDbG9ja1ByZXNjYWxlID0gMHgxNDsKIAkJCXJwX2JhdWRfYmFzZVtpXSA9IDQ2MDgwMDsKIAkJfQpAQCAtMjE4Myw3ICsyMTgzLDcgQEAKIAkJc0Nsb2NrUHJlc2NhbGUgPSAweDE5OwkvKiBtb2QgOSAoZGl2aWRlIGJ5IDEwKSBwcmVzY2FsZSAqLwogCQlycF9iYXVkX2Jhc2VbaV0gPSAyMzA0MDA7CiAJfSBlbHNlIHsKLQkJc0Nsb2NrUHJlc2NhbGUgPSAweDE0OwkvKiBtb2QgNCAoZGV2aWRlIGJ5IDUpIHByZXNjYWxlICovCisJCXNDbG9ja1ByZXNjYWxlID0gMHgxNDsJLyogbW9kIDQgKGRpdmlkZSBieSA1KSBwcmVzY2FsZSAqLwogCQlycF9iYXVkX2Jhc2VbaV0gPSA0NjA4MDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC5jIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAuYwppbmRleCBiM2I4ODFiLi42NjExNTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLmMKQEAgLTE2MjksNyArMTYyOSw3IEBACiAJCQkgICAgdXAtPnBvcnQuaW90eXBlID09IFVQSU9fRFdBUEIzMikgJiYKIAkJCSAgKGlpciAmIFVBUlRfSUlSX0JVU1kpID09IFVBUlRfSUlSX0JVU1kpIHsKIAkJCS8qIFRoZSBEZXNpZ25XYXJlIEFQQiBVQVJUIGhhcyBhbiBCdXN5IERldGVjdCAoMHgwNykKLQkJCSAqIGludGVycnVwdCBtZWFuaW5nIGFuIExDUiB3cml0ZSBhdHRlbXB0IG9jY3VyZWQgd2hpbGUgdGhlCisJCQkgKiBpbnRlcnJ1cHQgbWVhbmluZyBhbiBMQ1Igd3JpdGUgYXR0ZW1wdCBvY2N1cnJlZCB3aGlsZSB0aGUKIAkJCSAqIFVBUlQgd2FzIGJ1c3kuIFRoZSBpbnRlcnJ1cHQgbXVzdCBiZSBjbGVhcmVkIGJ5IHJlYWRpbmcKIAkJCSAqIHRoZSBVQVJUIHN0YXR1cyByZWdpc3RlciAoVVNSKSBhbmQgdGhlIExDUiByZS13cml0dGVuLiAqLwogCQkJdW5zaWduZWQgaW50IHN0YXR1czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwX3BjaS5jIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTBfcGNpLmMKaW5kZXggOGI4OTMwZi4uNzM4Y2VjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTBfcGNpLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTBfcGNpLmMKQEAgLTQzMyw3ICs0MzMsNyBAQAogLyoKICAqIFNJSUcgc2VyaWFsIGNhcmRzIGhhdmUgYW4gUENJIGludGVyZmFjZSBjaGlwIHdoaWNoIGFsc28gY29udHJvbHMKICAqIHRoZSBVQVJUIGNsb2NraW5nIGZyZXF1ZW5jeS4gRWFjaCBVQVJUIGNhbiBiZSBjbG9ja2VkIGluZGVwZW5kZW50bHkKLSAqIChleGNlcHQgY2FyZHMgZXF1aXBlZCB3aXRoIDQgVUFSVHMpIGFuZCBpbml0aWFsIGNsb2NraW5nIHNldHRpbmdzCisgKiAoZXhjZXB0IGNhcmRzIGVxdWlwcGVkIHdpdGggNCBVQVJUcykgYW5kIGluaXRpYWwgY2xvY2tpbmcgc2V0dGluZ3MKICAqIGFyZSBzdG9yZWQgaW4gdGhlIEVFUFJPTSBjaGlwLiBJdCBjYW4gY2F1c2UgcHJvYmxlbXMgYmVjYXVzZSB0aGlzCiAgKiB2ZXJzaW9uIG9mIHNlcmlhbCBkcml2ZXIgZG9lc24ndCBzdXBwb3J0IGRpZmZlcmVudGx5IGNsb2NrZWQgVUFSVCdzCiAgKiBvbiBzaW5nbGUgUENJIGNhcmQuIFRvIHByZXZlbnQgdGhpcywgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIHNldApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL2FtYmEtcGwwMTEuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9hbWJhLXBsMDExLmMKaW5kZXggNTc3MzFlOC4uNmRlZWU0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL2FtYmEtcGwwMTEuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvYW1iYS1wbDAxMS5jCkBAIC01MjAsNyArNTIwLDcgQEAKIAogCS8qCiAJICogV2UgZG9uJ3QgaGF2ZSBhIFRYIGJ1ZmZlciBxdWV1ZWQsIHNvIHRyeSB0byBxdWV1ZSBvbmUuCi0JICogSWYgd2Ugc3VjY2VzZnVsbHkgcXVldWVkIGEgYnVmZmVyLCBtYXNrIHRoZSBUWCBJUlEuCisJICogSWYgd2Ugc3VjY2Vzc2Z1bGx5IHF1ZXVlZCBhIGJ1ZmZlciwgbWFzayB0aGUgVFggSVJRLgogCSAqLwogCWlmIChwbDAxMV9kbWFfdHhfcmVmaWxsKHVhcCkgPiAwKSB7CiAJCXVhcC0+aW0gJj0gflVBUlQwMTFfVFhJTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9pY29tLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvaWNvbS5jCmluZGV4IDUzYTQ2ODIuLjhhODY5ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9pY29tLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL2ljb20uYwpAQCAtMTI0OCw3ICsxMjQ4LDcgQEAKIAkJfQogCX0KIAotCS8qIEVuYWJsZSBUcmFuc21pdHRlciBhbmQgUmVjaWV2ZXIgKi8KKwkvKiBFbmFibGUgVHJhbnNtaXR0ZXIgYW5kIFJlY2VpdmVyICovCiAJb2Zmc2V0ID0KIAkgICAgKHVuc2lnbmVkIGxvbmcpICZJQ09NX1BPUlQtPnN0YXRTdGctPnJjdlswXSAtCiAJICAgICh1bnNpZ25lZCBsb25nKSBJQ09NX1BPUlQtPnN0YXRTdGc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvaW14LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvaW14LmMKaW5kZXggZGZjZjRiMS4uNjJkZjcyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL2lteC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9pbXguYwpAQCAtNzgsNyArNzgsNyBAQAogI2RlZmluZSAgVVJYRF9GUk1FUlIgICAgICgxPDwxMikKICNkZWZpbmUgIFVSWERfQlJLICAgICAgICAoMTw8MTEpCiAjZGVmaW5lICBVUlhEX1BSRVJSICAgICAgKDE8PDEwKQotI2RlZmluZSAgVUNSMV9BREVOICAgICAgICgxPDwxNSkgLyogQXV0byBkZWN0ZWN0IGludGVycnVwdCAqLworI2RlZmluZSAgVUNSMV9BREVOICAgICAgICgxPDwxNSkgLyogQXV0byBkZXRlY3QgaW50ZXJydXB0ICovCiAjZGVmaW5lICBVQ1IxX0FEQlIgICAgICAgKDE8PDE0KSAvKiBBdXRvIGRldGVjdCBiYXVkIHJhdGUgKi8KICNkZWZpbmUgIFVDUjFfVFJEWUVOICAgICAoMTw8MTMpIC8qIFRyYW5zbWl0dGVyIHJlYWR5IGludGVycnVwdCBlbmFibGUgKi8KICNkZWZpbmUgIFVDUjFfSURFTiAgICAgICAoMTw8MTIpIC8qIElkbGUgY29uZGl0aW9uIGludGVycnVwdCAqLwpAQCAtMzgyLDEyICszODIsMTMgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpbXhfcnRzaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgaW14X3BvcnQgKnNwb3J0ID0gZGV2X2lkOwotCXVuc2lnbmVkIGludCB2YWwgPSByZWFkbChzcG9ydC0+cG9ydC5tZW1iYXNlICsgVVNSMSkgJiBVU1IxX1JUU1M7CisJdW5zaWduZWQgaW50IHZhbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNwb3J0LT5wb3J0LmxvY2ssIGZsYWdzKTsKIAogCXdyaXRlbChVU1IxX1JUU0QsIHNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBVU1IxKTsKKwl2YWwgPSByZWFkbChzcG9ydC0+cG9ydC5tZW1iYXNlICsgVVNSMSkgJiBVU1IxX1JUU1M7CiAJdWFydF9oYW5kbGVfY3RzX2NoYW5nZSgmc3BvcnQtPnBvcnQsICEhdmFsKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnNwb3J0LT5wb3J0LnN0YXRlLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL2lwMjJ6aWxvZy5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2lwMjJ6aWxvZy5jCmluZGV4IGViZmY0YTEuLjdiMWNkYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9pcDIyemlsb2cuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvaXAyMnppbG9nLmMKQEAgLTM3NSw3ICszNzUsNyBAQAogCQkgKiBiZSBuaWNlIHRvIHRyYW5zbWl0IGNvbnNvbGUgd3JpdGVzIGp1c3QgbGlrZSB3ZSBub3JtYWxseSB3b3VsZCBmb3IKIAkJICogYSBUVFkgbGluZS4gKGllLiBidWZmZXJlZCBhbmQgVFggaW50ZXJydXB0IGRyaXZlbikuICBUaGF0IGlzIG5vdAogCQkgKiBlYXN5IGJlY2F1c2UgY29uc29sZSB3cml0ZXMgY2Fubm90IHNsZWVwLiAgT25lIHNvbHV0aW9uIG1pZ2h0IGJlCi0JCSAqIHRvIHBvbGwgb24gZW5vdWdoIHBvcnQtPnhtaXQgc3BhY2UgYmVjb21taW5nIGZyZWUuICAtRGF2ZU0KKwkJICogdG8gcG9sbCBvbiBlbm91Z2ggcG9ydC0+eG1pdCBzcGFjZSBiZWNvbWluZyBmcmVlLiAgLURhdmVNCiAJCSAqLwogCQlpZiAoIShzdGF0dXMgJiBUeF9CVUZfRU1QKSkKIAkJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9qc20vanNtLmggYi9kcml2ZXJzL3R0eS9zZXJpYWwvanNtL2pzbS5oCmluZGV4IDM4YTUwOWMuLmI3MDRjOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9qc20vanNtLmgKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL2pzbS9qc20uaApAQCAtMjczLDcgKzI3Myw3IEBACiAJIHU4IGZjdHI7CQkvKiBXUglGQ1RSIC0gRmVhdHVyZSBDb250cm9sIFJlZyAqLwogCSB1OCBlZnI7CQkvKiBXUglFRlIgLSBFbmhhbmNlZCBGdW5jdGlvbiBSZWcgKi8KIAkgdTggdGZpZm87CQkvKiBXUglUWENOVC9UWFRSRyAtIFRyYW5zbWl0IEZJRk8gUmVnICovCi0JIHU4IHJmaWZvOwkJLyogV1IJUlhDTlQvUlhUUkcgLSBSZWNpZXZlIEZJRk8gUmVnICovCisJIHU4IHJmaWZvOwkJLyogV1IJUlhDTlQvUlhUUkcgLSBSZWNlaXZlIEZJRk8gUmVnICovCiAJIHU4IHhvZmZjaGFyMTsJLyogV1IJWE9GRiAxIC0gWE9mZiBDaGFyYWN0ZXIgMSBSZWcgKi8KIAkgdTggeG9mZmNoYXIyOwkvKiBXUglYT0ZGIDIgLSBYT2ZmIENoYXJhY3RlciAyIFJlZyAqLwogCSB1OCB4b25jaGFyMTsJLyogV1IJWE9OIDEgLSBYb24gQ2hhcmFjdGVyIDEgUmVnICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvanNtL2pzbV9uZW8uYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9qc20vanNtX25lby5jCmluZGV4IDc5NjBkOTYuLjQ1MzhjM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9qc20vanNtX25lby5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9qc20vanNtX25lby5jCkBAIC0zODEsNyArMzgxLDcgQEAKIAkJLyogQ29weSBkYXRhIGZyb20gdWFydCB0byB0aGUgcXVldWUgKi8KIAkJbWVtY3B5X2Zyb21pbyhjaC0+Y2hfcnF1ZXVlICsgaGVhZCwgJmNoLT5jaF9uZW9fdWFydC0+dHhyeGJ1cnN0LCBuKTsKIAkJLyoKLQkJICogU2luY2UgUlhfRklGT19EQVRBX0VSUk9SIHdhcyAwLCB3ZSBhcmUgZ3VhcmVudGVlZAorCQkgKiBTaW5jZSBSWF9GSUZPX0RBVEFfRVJST1Igd2FzIDAsIHdlIGFyZSBndWFyYW50ZWVkCiAJCSAqIHRoYXQgYWxsIHRoZSBkYXRhIGN1cnJlbnRseSBpbiB0aGUgRklGTyBpcyBmcmVlIG9mCiAJCSAqIGJyZWFrcyBhbmQgcGFyaXR5L2ZyYW1lL29ydW4gZXJyb3JzLgogCQkgKi8KQEAgLTEyMTAsNyArMTIxMCw3IEBACiAJCQkgKiBXaHkgd291bGQgSSBjaGVjayBFVkVSWSBwb3NzaWJpbGl0eSBvZiB0eXBlIG9mCiAJCQkgKiBpbnRlcnJ1cHQsIHdoZW4gd2Uga25vdyBpdHMgVFhSRFk/Pz8KIAkJCSAqIEJlY3V6IGZvciBzb21lIHJlYXNvbiwgZXZlbiB0aG8gd2UgZ290IHRyaWdnZXJlZCBmb3IgVFhSRFksCi0JCQkgKiBpdCBzZWVtcyB0byBiZSBvY2Nhc3Npb25hbGx5IHdyb25nLiBJbnN0ZWFkIG9mIFRYLCB3aGljaAorCQkJICogaXQgc2VlbXMgdG8gYmUgb2NjYXNpb25hbGx5IHdyb25nLiBJbnN0ZWFkIG9mIFRYLCB3aGljaAogCQkJICogaXQgc2hvdWxkIGJlLCBJIHdhcyBnZXR0aW5nIHRoaW5ncyBsaWtlIFJYRFkgdG9vLiBXZWlyZC4KIAkJCSAqLwogCQkJbmVvX3BhcnNlX2lzcihicmQsIHBvcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL21heDMxMDcuaCBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tYXgzMTA3LmgKaW5kZXggN2FiNjMyMzkuLjg0MTVmYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tYXgzMTA3LmgKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL21heDMxMDcuaApAQCAtMzY5LDcgKzM2OSw3IEBACiAJc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0dQSU9MSUIpCi0JLyogR1BJTyBjaGlwIHN0dWN0dXJlICovCisJLyogR1BJTyBjaGlwIHN0cnVjdHVyZSAqLwogCXN0cnVjdCBncGlvX2NoaXAgY2hpcDsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvbXJzdF9tYXgzMTEwLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbXJzdF9tYXgzMTEwLmMKaW5kZXggMzdlMTNjMy4uMmY1NDhhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL21yc3RfbWF4MzExMC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tcnN0X21heDMxMTAuYwpAQCAtMjMsNyArMjMsNyBAQAogICogICAgMSB3b3JkLiBJZiBTUEkgbWFzdGVyIGNvbnRyb2xsZXIgZG9lc24ndCBzdXBwb3J0IHNjbGsgZnJlcXVlbmN5IGNoYW5nZSwKICAqICAgIHRoZW4gdGhlIGNoYXIgbmVlZCBiZSBzZW50IG91dCBvbmUgYnkgb25lIHdpdGggc29tZSBkZWxheQogICoKLSAqIDIuIEN1cnJlbnRseSBvbmx5IFJYIGF2YWlsYWJlIGludGVycnJ1cHQgaXMgdXNlZCwgbm8gbmVlZCBmb3Igd2FpdGluZyBUWEUKKyAqIDIuIEN1cnJlbnRseSBvbmx5IFJYIGF2YWlsYWJsZSBpbnRlcnJydXB0IGlzIHVzZWQsIG5vIG5lZWQgZm9yIHdhaXRpbmcgVFhFCiAgKiAgICBpbnRlcnJ1cHQgZm9yIGEgbG93IHNwZWVkIFVBUlQgZGV2aWNlCiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL21yc3RfbWF4MzExMC5oIGIvZHJpdmVycy90dHkvc2VyaWFsL21yc3RfbWF4MzExMC5oCmluZGV4IGQxZWY0M2EuLmMzN2VhNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tcnN0X21heDMxMTAuaAorKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbXJzdF9tYXgzMTEwLmgKQEAgLTIxLDcgKzIxLDcgQEAKIAogI2RlZmluZSBXQ19JUlFfTUFTSwkJKDB4RiA8PCA4KQogI2RlZmluZSBXQ19UWEVfSVJRX0VOQUJMRQkoMSA8PCAxMSkJLyogVFggZW1wdHkgaXJxICovCi0jZGVmaW5lIFdDX1JYQV9JUlFfRU5BQkxFCSgxIDw8IDEwKQkvKiBSWCBhdmFpbGFiZSBpcnEgKi8KKyNkZWZpbmUgV0NfUlhBX0lSUV9FTkFCTEUJKDEgPDwgMTApCS8qIFJYIGF2YWlsYWJsZSBpcnEgKi8KICNkZWZpbmUgV0NfUEFSX0hJR0hfSVJRX0VOQUJMRQkoMSA8PCA5KQogI2RlZmluZSBXQ19SRUNfQUNUX0lSUV9FTkFCTEUJKDEgPDwgOCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL21zbV9zZXJpYWxfaHMuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tc21fc2VyaWFsX2hzLmMKaW5kZXggYjkwNmYxMS4uNjI0NzAxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL21zbV9zZXJpYWxfaHMuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbXNtX3NlcmlhbF9ocy5jCkBAIC00OTUsNyArNDk1LDcgQEAKICAqCiAgKiBJbnRlcnJ1cHRzIHNob3VsZCBiZSBkaXNhYmxlZCBiZWZvcmUgd2UgYXJlIGNhbGxlZCwgYXMKICAqIHdlIG1vZGlmeSBTZXQgQmF1ZCByYXRlCi0gKiBTZXQgcmVjZWl2ZSBzdGFsZSBpbnRlcnJ1cHQgbGV2ZWwsIGRlcGVuZGFudCBvbiBCaXQgUmF0ZQorICogU2V0IHJlY2VpdmUgc3RhbGUgaW50ZXJydXB0IGxldmVsLCBkZXBlbmRlbnQgb24gQml0IFJhdGUKICAqIEdvYWwgaXMgdG8gaGF2ZSBhcm91bmQgOCBtcyBiZWZvcmUgaW5kaWNhdGUgc3RhbGUuCiAgKiByb3VuZHVwICgoKEJpdCBSYXRlICogLjAwOCkgLyAxMCkgKyAxCiAgKi8KQEAgLTEzNTAsNyArMTM1MCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdXBvcnQtPmxvY2ssIGZsYWdzKTsKIAlpZiAobXNtX3Vwb3J0LT5jbGtfc3RhdGUgPT0gTVNNX0hTX0NMS19PRkYpIHsKLQkJLyogaWdub3JlIHRoZSBmaXJzdCBpcnEgLSBpdCBpcyBhIHBlbmRpbmcgaXJxIHRoYXQgb2NjdXJlZAorCQkvKiBpZ25vcmUgdGhlIGZpcnN0IGlycSAtIGl0IGlzIGEgcGVuZGluZyBpcnEgdGhhdCBvY2N1cnJlZAogCQkgKiBiZWZvcmUgZW5hYmxlX2lycSgpICovCiAJCWlmIChtc21fdXBvcnQtPnJ4X3dha2V1cC5pZ25vcmUpCiAJCQltc21fdXBvcnQtPnJ4X3dha2V1cC5pZ25vcmUgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL29mX3NlcmlhbC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL29mX3NlcmlhbC5jCmluZGV4IDBlOGVlYzUuLmM5MTFiMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9vZl9zZXJpYWwuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvb2Zfc2VyaWFsLmMKQEAgLTgwLDE0ICs4MCwxNyBAQAogLyoKICAqIFRyeSB0byByZWdpc3RlciBhIHNlcmlhbCBwb3J0CiAgKi8KK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX3BsYXRmb3JtX3NlcmlhbF90YWJsZVtdOwogc3RhdGljIGludCBfX2RldmluaXQgb2ZfcGxhdGZvcm1fc2VyaWFsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KQogeworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCXN0cnVjdCBvZl9zZXJpYWxfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgdWFydF9wb3J0IHBvcnQ7CiAJaW50IHBvcnRfdHlwZTsKIAlpbnQgcmV0OwogCi0JaWYgKCFvZmRldi0+ZGV2Lm9mX21hdGNoKQorCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKG9mX3BsYXRmb3JtX3NlcmlhbF90YWJsZSwgJm9mZGV2LT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKG9mX2ZpbmRfcHJvcGVydHkob2ZkZXYtPmRldi5vZl9ub2RlLCAidXNlZC1ieS1ydGFzIiwgTlVMTCkpCkBAIC05Nyw3ICsxMDAsNyBAQAogCWlmIChpbmZvID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcG9ydF90eXBlID0gKHVuc2lnbmVkIGxvbmcpb2ZkZXYtPmRldi5vZl9tYXRjaC0+ZGF0YTsKKwlwb3J0X3R5cGUgPSAodW5zaWduZWQgbG9uZyltYXRjaC0+ZGF0YTsKIAlyZXQgPSBvZl9wbGF0Zm9ybV9zZXJpYWxfc2V0dXAob2ZkZXYsIHBvcnRfdHlwZSwgJnBvcnQpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL29tYXAtc2VyaWFsLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvb21hcC1zZXJpYWwuYwppbmRleCA3NjM1Mzc5Li40N2NhZGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvb21hcC1zZXJpYWwuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvb21hcC1zZXJpYWwuYwpAQCAtMTMsNyArMTMsNyBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogTm90ZTogVGhpcyBkcml2ZXIgaXMgbWFkZSBzZXBlcmF0ZSBmcm9tIDgyNTAgZHJpdmVyIGFzIHdlIGNhbm5vdAorICogTm90ZTogVGhpcyBkcml2ZXIgaXMgbWFkZSBzZXBhcmF0ZSBmcm9tIDgyNTAgZHJpdmVyIGFzIHdlIGNhbm5vdAogICogb3ZlciBsb2FkIDgyNTAgZHJpdmVyIHdpdGggb21hcCBwbGF0Zm9ybSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvcgogICogZmVhdHVyZXMgbGlrZSBETUEsIGl0IG1ha2VzIGVhc2llciB0byBpbXBsZW1lbnQgZmVhdHVyZXMgbGlrZSBETUEgYW5kCiAgKiBoYXJkd2FyZSBmbG93IGNvbnRyb2wgYW5kIHNvZnR3YXJlIGZsb3cgY29udHJvbCBjb25maWd1cmF0aW9uIHdpdGgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9wbWFjX3ppbG9nLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvcG1hY196aWxvZy5jCmluZGV4IDViOWNkZTcuLmUxYzhkNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9wbWFjX3ppbG9nLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL3BtYWNfemlsb2cuYwpAQCAtMzMwLDcgKzMzMCw3IEBACiAJCSAqIFdoZW4gdGhhdCBoYXBwZW5zLCBJIGRpc2FibGUgdGhlIHJlY2VpdmUgc2lkZSBvZiB0aGUgZHJpdmVyLgogCQkgKiBOb3RlIHRoYXQgd2hhdCBJJ3ZlIGJlZW4gZXhwZXJpZW5jaW5nIGlzIGEgcmVhbCBpcnEgbG9vcCB3aGVyZQogCQkgKiBJJ20gZ2V0dGluZyBmbG9vZGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIGFjdHVhbCBwb3J0IHNwZWVkLgotCQkgKiBTb21ldGhpbmcgc3RhbmdlIGlzIGdvaW5nIG9uIHdpdGggdGhlIEhXCisJCSAqIFNvbWV0aGluZyBzdHJhbmdlIGlzIGdvaW5nIG9uIHdpdGggdGhlIEhXCiAJCSAqLwogCQlpZiAoKCsrbG9vcHMpID4gMTAwMCkKIAkJCWdvdG8gZmxvb2Q7CkBAIC0zOTYsNyArMzk2LDcgQEAKIAkJICogYmUgbmljZSB0byB0cmFuc21pdCBjb25zb2xlIHdyaXRlcyBqdXN0IGxpa2Ugd2Ugbm9ybWFsbHkgd291bGQgZm9yCiAJCSAqIGEgVFRZIGxpbmUuIChpZS4gYnVmZmVyZWQgYW5kIFRYIGludGVycnVwdCBkcml2ZW4pLiAgVGhhdCBpcyBub3QKIAkJICogZWFzeSBiZWNhdXNlIGNvbnNvbGUgd3JpdGVzIGNhbm5vdCBzbGVlcC4gIE9uZSBzb2x1dGlvbiBtaWdodCBiZQotCQkgKiB0byBwb2xsIG9uIGVub3VnaCBwb3J0LT54bWl0IHNwYWNlIGJlY29tbWluZyBmcmVlLiAgLURhdmVNCisJCSAqIHRvIHBvbGwgb24gZW5vdWdoIHBvcnQtPnhtaXQgc3BhY2UgYmVjb21pbmcgZnJlZS4gIC1EYXZlTQogCQkgKi8KIAkJaWYgKCEoc3RhdHVzICYgVHhfQlVGX0VNUCkpCiAJCQlyZXR1cm47CkBAIC04MDksNyArODA5LDcgQEAKICNlbmRpZiAvKiAhQ09ORklHX1BQQ19QTUFDICovCiAKIC8qCi0gKiBGaXhaZXJvQnVnLi4uLldvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgU0NDIHJlY2V2aW5nIGNoYW5uZWwuCisgKiBGaXhaZXJvQnVnLi4uLldvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgU0NDIHJlY2VpdmluZyBjaGFubmVsLgogICogSW5zcGlyZWQgZnJvbSBEYXJ3aW4gY29kZSwgMTUgU2VwdC4gMjAwMCAgLURhbk0KICAqCiAgKiBUaGUgZm9sbG93aW5nIHNlcXVlbmNlIHByZXZlbnRzIGEgcHJvYmxlbSB0aGF0IGlzIHNlZW4gd2l0aCBPJ0hhcmUgQVNJQ3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zYW1zdW5nLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2Ftc3VuZy5jCmluZGV4IDIzMzVlZGEuLjllMmZhOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zYW1zdW5nLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL3NhbXN1bmcuYwpAQCAtNjQsNyArNjQsNyBAQAogI2RlZmluZSB0eF9lbmFibGVkKHBvcnQpICgocG9ydCktPnVudXNlZFswXSkKICNkZWZpbmUgcnhfZW5hYmxlZChwb3J0KSAoKHBvcnQpLT51bnVzZWRbMV0pCiAKLS8qIGZsYWcgdG8gaWdub3JlIGFsbCBjaGFyYWN0ZXJzIGNvbW1pbmcgaW4gKi8KKy8qIGZsYWcgdG8gaWdub3JlIGFsbCBjaGFyYWN0ZXJzIGNvbWluZyBpbiAqLwogI2RlZmluZSBSWFNUQVRfRFVNTVlfUkVBRCAoMHgxMDAwMDAwMCkKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjMjR4eF91YXJ0X3BvcnQgKnRvX291cnBvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKQEAgLTI5MSw3ICsyOTEsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQkvKiBpZiB0aGVyZSBpc250IGFueXRoaW5nIG1vcmUgdG8gdHJhbnNtaXQsIG9yIHRoZSB1YXJ0IGlzIG5vdworCS8qIGlmIHRoZXJlIGlzbid0IGFueXRoaW5nIG1vcmUgdG8gdHJhbnNtaXQsIG9yIHRoZSB1YXJ0IGlzIG5vdwogCSAqIHN0b3BwZWQsIGRpc2FibGUgdGhlIHVhcnQgYW5kIGV4aXQKIAkqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2gtc2NpLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2gtc2NpLmMKaW5kZXggZWI3OTU4Yy4uOTIwYTZmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL3NoLXNjaS5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zaC1zY2kuYwpAQCAtODEyLDcgKzgxMiw3IEBACiB9CiAKIC8qCi0gKiBIZXJlIHdlIGRlZmluZSBhIHRyYW5zaXN0aW9uIG5vdGlmaWVyIHNvIHRoYXQgd2UgY2FuIHVwZGF0ZSBhbGwgb2Ygb3VyCisgKiBIZXJlIHdlIGRlZmluZSBhIHRyYW5zaXRpb24gbm90aWZpZXIgc28gdGhhdCB3ZSBjYW4gdXBkYXRlIGFsbCBvZiBvdXIKICAqIHBvcnRzJyBiYXVkIHJhdGUgd2hlbiB0aGUgcGVyaXBoZXJhbCBjbG9jayBjaGFuZ2VzLgogICovCiBzdGF0aWMgaW50IHNjaV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCkBAIC0xODM2LDYgKzE4MzYsMTIgQEAKIAlzY2lfcG9ydCA9ICZzY2lfcG9ydHNbY28tPmluZGV4XTsKIAlwb3J0ID0gJnNjaV9wb3J0LT5wb3J0OwogCisJLyoKKwkgKiBSZWZ1c2UgdG8gaGFuZGxlIHVuaW5pdGlhbGl6ZWQgcG9ydHMuCisJICovCisJaWYgKCFwb3J0LT5vcHMpCisJCXJldHVybiAtRU5PREVWOworCiAJcmV0ID0gc2NpX3JlbWFwX3BvcnQocG9ydCk7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJcmV0dXJuIHJldDsKQEAgLTE4NjYsMTMgKzE4NzIsNiBAQAogCS5kYXRhCQk9ICZzY2lfdWFydF9kcml2ZXIsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBzY2lfY29uc29sZV9pbml0KHZvaWQpCi17Ci0JcmVnaXN0ZXJfY29uc29sZSgmc2VyaWFsX2NvbnNvbGUpOwotCXJldHVybiAwOwotfQotY29uc29sZV9pbml0Y2FsbChzY2lfY29uc29sZV9pbml0KTsKLQogc3RhdGljIHN0cnVjdCBjb25zb2xlIGVhcmx5X3NlcmlhbF9jb25zb2xlID0gewogCS5uYW1lICAgICAgICAgICA9ICJlYXJseV90dHlTQyIsCiAJLndyaXRlICAgICAgICAgID0gc2VyaWFsX2NvbnNvbGVfd3JpdGUsCkBAIC0xOTAxLDE4ICsxOTAwLDE4IEBACiAJcmVnaXN0ZXJfY29uc29sZSgmZWFybHlfc2VyaWFsX2NvbnNvbGUpOwogCXJldHVybiAwOwogfQorCisjZGVmaW5lIFNDSV9DT05TT0xFCSgmc2VyaWFsX2NvbnNvbGUpCisKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBfX2RldmluaXQgc2NpX3Byb2JlX2Vhcmx5cHJpbnRrKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRSAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFKQotI2RlZmluZSBTQ0lfQ09OU09MRQkoJnNlcmlhbF9jb25zb2xlKQotI2Vsc2UKLSNkZWZpbmUgU0NJX0NPTlNPTEUJMAotI2VuZGlmCisjZGVmaW5lIFNDSV9DT05TT0xFCU5VTEwKKworI2VuZGlmIC8qIENPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEUgKi8KIAogc3RhdGljIGNoYXIgYmFubmVyW10gX19pbml0ZGF0YSA9CiAJS0VSTl9JTkZPICJTdXBlckggU0NJKEYpIGRyaXZlciBpbml0aWFsaXplZFxuIjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zbl9jb25zb2xlLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc25fY29uc29sZS5jCmluZGV4IGNmZjlhMzA2Li4zNzdhZTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvc25fY29uc29sZS5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zbl9jb25zb2xlLmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogfTsKIAogLyogdGhlIGNvbnNvbGUgZG9lcyBvdXRwdXQgaW4gdHdvIGRpc3RpbmN0bHkgZGlmZmVyZW50IHdheXM6Ci0gKiBzeW5jaHJvbm91cyAocmF3KSBhbmQgYXN5bmNocm9ub3VzIChidWZmZXJlZCkuICBpbml0YWxseSwgZWFybHlfcHJpbnRrCisgKiBzeW5jaHJvbm91cyAocmF3KSBhbmQgYXN5bmNocm9ub3VzIChidWZmZXJlZCkuICBpbml0aWFsbHksIGVhcmx5X3ByaW50awogICogZG9lcyBzeW5jaHJvbm91cyBvdXRwdXQuICBhbnkgZGF0YSB3cml0dGVuIGdvZXMgZGlyZWN0bHkgdG8gdGhlIFNBTAogICogdG8gYmUgb3V0cHV0IChpbmNpZGVudGFsbHksIGl0IGlzIGludGVybmFsbHkgYnVmZmVyZWQgYnkgdGhlIFNBTCkKICAqIGFmdGVyIGludGVycnVwdHMgYW5kIHRpbWVycyBhcmUgaW5pdGlhbGl6ZWQgYW5kIGF2YWlsYWJsZSBmb3IgdXNlLApAQCAtNDgxLDcgKzQ4MSw3IEBACiAJd2hpbGUgKHBvcnQtPnNjX29wcy0+c2FsX2lucHV0X3BlbmRpbmcoKSkgewogCQljaCA9IHBvcnQtPnNjX29wcy0+c2FsX2dldGMoKTsKIAkJaWYgKGNoIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJzbl9jb25zb2xlOiBBbiBlcnJvciBvY2N1cmVkIHdoaWxlICIKKwkJCXByaW50ayhLRVJOX0VSUiAic25fY29uc29sZTogQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgIgogCQkJICAgICAgICJvYnRhaW5pbmcgZGF0YSBmcm9tIHRoZSBjb25zb2xlICgweCUweClcbiIsIGNoKTsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvc3Vuemlsb2cuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zdW56aWxvZy5jCmluZGV4IDk5ZmY5YWIuLjhlOTE2ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zdW56aWxvZy5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zdW56aWxvZy5jCkBAIC00NzQsNyArNDc0LDcgQEAKIAkJICogYmUgbmljZSB0byB0cmFuc21pdCBjb25zb2xlIHdyaXRlcyBqdXN0IGxpa2Ugd2Ugbm9ybWFsbHkgd291bGQgZm9yCiAJCSAqIGEgVFRZIGxpbmUuIChpZS4gYnVmZmVyZWQgYW5kIFRYIGludGVycnVwdCBkcml2ZW4pLiAgVGhhdCBpcyBub3QKIAkJICogZWFzeSBiZWNhdXNlIGNvbnNvbGUgd3JpdGVzIGNhbm5vdCBzbGVlcC4gIE9uZSBzb2x1dGlvbiBtaWdodCBiZQotCQkgKiB0byBwb2xsIG9uIGVub3VnaCBwb3J0LT54bWl0IHNwYWNlIGJlY29tbWluZyBmcmVlLiAgLURhdmVNCisJCSAqIHRvIHBvbGwgb24gZW5vdWdoIHBvcnQtPnhtaXQgc3BhY2UgYmVjb21pbmcgZnJlZS4gIC1EYXZlTQogCQkgKi8KIAkJaWYgKCEoc3RhdHVzICYgVHhfQlVGX0VNUCkpCiAJCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zeW5jbGluay5jIGIvZHJpdmVycy90dHkvc3luY2xpbmsuYwppbmRleCAxODg4OGQwLi4yN2RhMjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zeW5jbGluay5jCisrKyBiL2RyaXZlcnMvdHR5L3N5bmNsaW5rLmMKQEAgLTQwNzIsNyArNDA3Miw3IEBACiAJCiAJaWYgKCByZXF1ZXN0X2lycShpbmZvLT5pcnFfbGV2ZWwsbWdzbF9pbnRlcnJ1cHQsaW5mby0+aXJxX2ZsYWdzLAogCQlpbmZvLT5kZXZpY2VfbmFtZSwgaW5mbyApIDwgMCApIHsKLQkJcHJpbnRrKCAiJXMoJWQpOkNhbnQgcmVxdWVzdCBpbnRlcnJ1cHQgb24gZGV2aWNlICVzIElSUT0lZFxuIiwKKwkJcHJpbnRrKCAiJXMoJWQpOkNhbid0IHJlcXVlc3QgaW50ZXJydXB0IG9uIGRldmljZSAlcyBJUlE9JWRcbiIsCiAJCQlfX0ZJTEVfXyxfX0xJTkVfXyxpbmZvLT5kZXZpY2VfbmFtZSwgaW5mby0+aXJxX2xldmVsICk7CiAJCWdvdG8gZXJyb3V0OwogCX0KQEAgLTQwOTUsNyArNDA5NSw3IEBACiAJCWluZm8tPm1lbW9yeV9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKGluZm8tPnBoeXNfbWVtb3J5X2Jhc2UsCiAJCQkJCQkJCTB4NDAwMDApOwogCQlpZiAoIWluZm8tPm1lbW9yeV9iYXNlKSB7Ci0JCQlwcmludGsoICIlcyglZCk6Q2FudCBtYXAgc2hhcmVkIG1lbW9yeSBvbiBkZXZpY2UgJXMgTWVtQWRkcj0lMDhYXG4iLAorCQkJcHJpbnRrKCAiJXMoJWQpOkNhbid0IG1hcCBzaGFyZWQgbWVtb3J5IG9uIGRldmljZSAlcyBNZW1BZGRyPSUwOFhcbiIsCiAJCQkJX19GSUxFX18sX19MSU5FX18saW5mby0+ZGV2aWNlX25hbWUsIGluZm8tPnBoeXNfbWVtb3J5X2Jhc2UgKTsKIAkJCWdvdG8gZXJyb3V0OwogCQl9CkBAIC00MTA5LDcgKzQxMDksNyBAQAogCQlpbmZvLT5sY3JfYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShpbmZvLT5waHlzX2xjcl9iYXNlLAogCQkJCQkJCQlQQUdFX1NJWkUpOwogCQlpZiAoIWluZm8tPmxjcl9iYXNlKSB7Ci0JCQlwcmludGsoICIlcyglZCk6Q2FudCBtYXAgTENSIG1lbW9yeSBvbiBkZXZpY2UgJXMgTWVtQWRkcj0lMDhYXG4iLAorCQkJcHJpbnRrKCAiJXMoJWQpOkNhbid0IG1hcCBMQ1IgbWVtb3J5IG9uIGRldmljZSAlcyBNZW1BZGRyPSUwOFhcbiIsCiAJCQkJX19GSUxFX18sX19MSU5FX18saW5mby0+ZGV2aWNlX25hbWUsIGluZm8tPnBoeXNfbGNyX2Jhc2UgKTsKIAkJCWdvdG8gZXJyb3V0OwogCQl9CkBAIC00MTE5LDcgKzQxMTksNyBAQAogCQkvKiBjbGFpbSBETUEgY2hhbm5lbCAqLwogCQkKIAkJaWYgKHJlcXVlc3RfZG1hKGluZm8tPmRtYV9sZXZlbCxpbmZvLT5kZXZpY2VfbmFtZSkgPCAwKXsKLQkJCXByaW50ayggIiVzKCVkKTpDYW50IHJlcXVlc3QgRE1BIGNoYW5uZWwgb24gZGV2aWNlICVzIERNQT0lZFxuIiwKKwkJCXByaW50ayggIiVzKCVkKTpDYW4ndCByZXF1ZXN0IERNQSBjaGFubmVsIG9uIGRldmljZSAlcyBETUE9JWRcbiIsCiAJCQkJX19GSUxFX18sX19MSU5FX18saW5mby0+ZGV2aWNlX25hbWUsIGluZm8tPmRtYV9sZXZlbCApOwogCQkJbWdzbF9yZWxlYXNlX3Jlc291cmNlcyggaW5mbyApOwogCQkJcmV0dXJuIC1FTk9ERVY7CkBAIC00MTMyLDcgKzQxMzIsNyBAQAogCX0KIAkKIAlpZiAoIG1nc2xfYWxsb2NhdGVfZG1hX2J1ZmZlcnMoaW5mbykgPCAwICkgewotCQlwcmludGsoICIlcyglZCk6Q2FudCBhbGxvY2F0ZSBETUEgYnVmZmVycyBvbiBkZXZpY2UgJXMgRE1BPSVkXG4iLAorCQlwcmludGsoICIlcyglZCk6Q2FuJ3QgYWxsb2NhdGUgRE1BIGJ1ZmZlcnMgb24gZGV2aWNlICVzIERNQT0lZFxuIiwKIAkJCV9fRklMRV9fLF9fTElORV9fLGluZm8tPmRldmljZV9uYW1lLCBpbmZvLT5kbWFfbGV2ZWwgKTsKIAkJZ290byBlcnJvdXQ7CiAJfQkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3N5bmNsaW5rX2d0LmMgYi9kcml2ZXJzL3R0eS9zeW5jbGlua19ndC5jCmluZGV4IGEzNWRkNTQuLjE4YjQ4Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3N5bmNsaW5rX2d0LmMKKysrIGIvZHJpdmVycy90dHkvc3luY2xpbmtfZ3QuYwpAQCAtMzQ5MSw3ICszNDkxLDcgQEAKIAogCWluZm8tPnJlZ19hZGRyID0gaW9yZW1hcF9ub2NhY2hlKGluZm8tPnBoeXNfcmVnX2FkZHIsIFNMR1RfUkVHX1NJWkUpOwogCWlmICghaW5mby0+cmVnX2FkZHIpIHsKLQkJREJHRVJSKCgiJXMgY2FudCBtYXAgZGV2aWNlIHJlZ2lzdGVycywgYWRkcj0lMDhYXG4iLAorCQlEQkdFUlIoKCIlcyBjYW4ndCBtYXAgZGV2aWNlIHJlZ2lzdGVycywgYWRkcj0lMDhYXG4iLAogCQkJaW5mby0+ZGV2aWNlX25hbWUsIGluZm8tPnBoeXNfcmVnX2FkZHIpKTsKIAkJaW5mby0+aW5pdF9lcnJvciA9IERpYWdTdGF0dXNfQ2FudEFzc2lnblBjaVJlc291cmNlczsKIAkJZ290byBlcnJvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zeW5jbGlua21wLmMgYi9kcml2ZXJzL3R0eS9zeW5jbGlua21wLmMKaW5kZXggMzI3MzQzNi4uYzc3ODMxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc3luY2xpbmttcC5jCisrKyBiL2RyaXZlcnMvdHR5L3N5bmNsaW5rbXAuYwpAQCAtMzU5NSw3ICszNTk1LDcgQEAKIAlpbmZvLT5tZW1vcnlfYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShpbmZvLT5waHlzX21lbW9yeV9iYXNlLAogCQkJCQkJCQlTQ0FfTUVNX1NJWkUpOwogCWlmICghaW5mby0+bWVtb3J5X2Jhc2UpIHsKLQkJcHJpbnRrKCAiJXMoJWQpOiVzIENhbnQgbWFwIHNoYXJlZCBtZW1vcnksIE1lbUFkZHI9JTA4WFxuIiwKKwkJcHJpbnRrKCAiJXMoJWQpOiVzIENhbid0IG1hcCBzaGFyZWQgbWVtb3J5LCBNZW1BZGRyPSUwOFhcbiIsCiAJCQlfX0ZJTEVfXyxfX0xJTkVfXyxpbmZvLT5kZXZpY2VfbmFtZSwgaW5mby0+cGh5c19tZW1vcnlfYmFzZSApOwogCQlpbmZvLT5pbml0X2Vycm9yID0gRGlhZ1N0YXR1c19DYW50QXNzaWduUGNpUmVzb3VyY2VzOwogCQlnb3RvIGVycm91dDsKQEAgLTM2MDMsNyArMzYwMyw3IEBACiAKIAlpbmZvLT5sY3JfYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShpbmZvLT5waHlzX2xjcl9iYXNlLCBQQUdFX1NJWkUpOwogCWlmICghaW5mby0+bGNyX2Jhc2UpIHsKLQkJcHJpbnRrKCAiJXMoJWQpOiVzIENhbnQgbWFwIExDUiBtZW1vcnksIE1lbUFkZHI9JTA4WFxuIiwKKwkJcHJpbnRrKCAiJXMoJWQpOiVzIENhbid0IG1hcCBMQ1IgbWVtb3J5LCBNZW1BZGRyPSUwOFhcbiIsCiAJCQlfX0ZJTEVfXyxfX0xJTkVfXyxpbmZvLT5kZXZpY2VfbmFtZSwgaW5mby0+cGh5c19sY3JfYmFzZSApOwogCQlpbmZvLT5pbml0X2Vycm9yID0gRGlhZ1N0YXR1c19DYW50QXNzaWduUGNpUmVzb3VyY2VzOwogCQlnb3RvIGVycm91dDsKQEAgLTM2MTIsNyArMzYxMiw3IEBACiAKIAlpbmZvLT5zY2FfYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShpbmZvLT5waHlzX3NjYV9iYXNlLCBQQUdFX1NJWkUpOwogCWlmICghaW5mby0+c2NhX2Jhc2UpIHsKLQkJcHJpbnRrKCAiJXMoJWQpOiVzIENhbnQgbWFwIFNDQSBtZW1vcnksIE1lbUFkZHI9JTA4WFxuIiwKKwkJcHJpbnRrKCAiJXMoJWQpOiVzIENhbid0IG1hcCBTQ0EgbWVtb3J5LCBNZW1BZGRyPSUwOFhcbiIsCiAJCQlfX0ZJTEVfXyxfX0xJTkVfXyxpbmZvLT5kZXZpY2VfbmFtZSwgaW5mby0+cGh5c19zY2FfYmFzZSApOwogCQlpbmZvLT5pbml0X2Vycm9yID0gRGlhZ1N0YXR1c19DYW50QXNzaWduUGNpUmVzb3VyY2VzOwogCQlnb3RvIGVycm91dDsKQEAgLTM2MjIsNyArMzYyMiw3IEBACiAJaW5mby0+c3RhdGN0cmxfYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShpbmZvLT5waHlzX3N0YXRjdHJsX2Jhc2UsCiAJCQkJCQkJCVBBR0VfU0laRSk7CiAJaWYgKCFpbmZvLT5zdGF0Y3RybF9iYXNlKSB7Ci0JCXByaW50ayggIiVzKCVkKTolcyBDYW50IG1hcCBTQ0EgU3RhdHVzL0NvbnRyb2wgbWVtb3J5LCBNZW1BZGRyPSUwOFhcbiIsCisJCXByaW50ayggIiVzKCVkKTolcyBDYW4ndCBtYXAgU0NBIFN0YXR1cy9Db250cm9sIG1lbW9yeSwgTWVtQWRkcj0lMDhYXG4iLAogCQkJX19GSUxFX18sX19MSU5FX18saW5mby0+ZGV2aWNlX25hbWUsIGluZm8tPnBoeXNfc3RhdGN0cmxfYmFzZSApOwogCQlpbmZvLT5pbml0X2Vycm9yID0gRGlhZ1N0YXR1c19DYW50QXNzaWduUGNpUmVzb3VyY2VzOwogCQlnb3RvIGVycm91dDsKQEAgLTM4NjksNyArMzg2OSw3IEBACiAJCQkJCXBvcnRfYXJyYXlbMF0tPmlycV9mbGFncywKIAkJCQkJcG9ydF9hcnJheVswXS0+ZGV2aWNlX25hbWUsCiAJCQkJCXBvcnRfYXJyYXlbMF0pIDwgMCApIHsKLQkJCXByaW50ayggIiVzKCVkKTolcyBDYW50IHJlcXVlc3QgaW50ZXJydXB0LCBJUlE9JWRcbiIsCisJCQlwcmludGsoICIlcyglZCk6JXMgQ2FuJ3QgcmVxdWVzdCBpbnRlcnJ1cHQsIElSUT0lZFxuIiwKIAkJCQlfX0ZJTEVfXyxfX0xJTkVfXywKIAkJCQlwb3J0X2FycmF5WzBdLT5kZXZpY2VfbmFtZSwKIAkJCQlwb3J0X2FycmF5WzBdLT5pcnFfbGV2ZWwgKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3R0eV9pby5jIGIvZHJpdmVycy90dHkvdHR5X2lvLmMKaW5kZXggOTM2YTRlYS4uZDdkNTBiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdHR5X2lvLmMKKysrIGIvZHJpdmVycy90dHkvdHR5X2lvLmMKQEAgLTIxMzQsNyArMjEzNCw3IEBACiAgKglhY3R1YWxseSBoYXMgZHJpdmVyIGxldmVsIG1lYW5pbmcgYW5kIHRyaWdnZXJzIGEgVkMgcmVzaXplLgogICoKICAqCUxvY2tpbmc6Ci0gKgkJRHJpdmVyIGRlcGVuZGFudC4gVGhlIGRlZmF1bHQgZG9fcmVzaXplIG1ldGhvZCB0YWtlcyB0aGUKKyAqCQlEcml2ZXIgZGVwZW5kZW50LiBUaGUgZGVmYXVsdCBkb19yZXNpemUgbWV0aG9kIHRha2VzIHRoZQogICoJdHR5IHRlcm1pb3MgbXV0ZXggYW5kIGN0cmxfbG9jay4gVGhlIGNvbnNvbGUgdGFrZXMgaXRzIG93biBsb2NrCiAgKgl0aGVuIGNhbGxzIGludG8gdGhlIGRlZmF1bHQgbWV0aG9kLgogICovCkBAIC0yMTU1LDcgKzIxNTUsNyBAQAogICoJdGlvY2NvbnMJLQlhbGxvdyBhZG1pbiB0byBtb3ZlIGxvZ2ljYWwgY29uc29sZQogICoJQGZpbGU6IHRoZSBmaWxlIHRvIGJlY29tZSBjb25zb2xlCiAgKgotICoJQWxsb3cgdGhlIGFkbWluc3RyYXRvciB0byBtb3ZlIHRoZSByZWRpcmVjdGVkIGNvbnNvbGUgZGV2aWNlCisgKglBbGxvdyB0aGUgYWRtaW5pc3RyYXRvciB0byBtb3ZlIHRoZSByZWRpcmVjdGVkIGNvbnNvbGUgZGV2aWNlCiAgKgogICoJTG9ja2luZzogdXNlcyByZWRpcmVjdF9sb2NrIHRvIGd1YXJkIHRoZSByZWRpcmVjdCBpbmZvcm1hdGlvbgogICovCkBAIC0yMjkwLDcgKzIyOTAsNyBAQAogLyoqCiAgKgl0aW9jZ3BncnAJCS0JZ2V0IHByb2Nlc3MgZ3JvdXAKICAqCUB0dHk6IHR0eSBwYXNzZWQgYnkgdXNlcgotICoJQHJlYWxfdHR5OiB0dHkgc2lkZSBvZiB0aGUgdHR5IHBhc2VkIGJ5IHRoZSB1c2VyIGlmIGEgcHR5IGVsc2UgdGhlIHR0eQorICoJQHJlYWxfdHR5OiB0dHkgc2lkZSBvZiB0aGUgdHR5IHBhc3NlZCBieSB0aGUgdXNlciBpZiBhIHB0eSBlbHNlIHRoZSB0dHkKICAqCUBwOiByZXR1cm5lZCBwaWQKICAqCiAgKglPYnRhaW4gdGhlIHByb2Nlc3MgZ3JvdXAgb2YgdGhlIHR0eS4gSWYgdGhlcmUgaXMgbm8gcHJvY2VzcyBncm91cApAQCAtMjM2Nyw3ICsyMzY3LDcgQEAKIC8qKgogICoJdGlvY2dzaWQJCS0JZ2V0IHNlc3Npb24gaWQKICAqCUB0dHk6IHR0eSBwYXNzZWQgYnkgdXNlcgotICoJQHJlYWxfdHR5OiB0dHkgc2lkZSBvZiB0aGUgdHR5IHBhc2VkIGJ5IHRoZSB1c2VyIGlmIGEgcHR5IGVsc2UgdGhlIHR0eQorICoJQHJlYWxfdHR5OiB0dHkgc2lkZSBvZiB0aGUgdHR5IHBhc3NlZCBieSB0aGUgdXNlciBpZiBhIHB0eSBlbHNlIHRoZSB0dHkKICAqCUBwOiBwb2ludGVyIHRvIHJldHVybmVkIHNlc3Npb24gaWQKICAqCiAgKglPYnRhaW4gdGhlIHNlc3Npb24gaWQgb2YgdGhlIHR0eS4gSWYgdGhlcmUgaXMgbm8gc2Vzc2lvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdHR5X2lvY3RsLmMgYi9kcml2ZXJzL3R0eS90dHlfaW9jdGwuYwppbmRleCAxYTExMzVkLi4yMTU3NGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS90dHlfaW9jdGwuYworKysgYi9kcml2ZXJzL3R0eS90dHlfaW9jdGwuYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJY2JhdWQgPSB0ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQ7CiAKICNpZmRlZiBCT1RIRVIKLQkvKiBNYWdpYyB0b2tlbiBmb3IgYXJiaXRhcnkgc3BlZWQgdmlhIGNfaXNwZWVkL2Nfb3NwZWVkICovCisJLyogTWFnaWMgdG9rZW4gZm9yIGFyYml0cmFyeSBzcGVlZCB2aWEgY19pc3BlZWQvY19vc3BlZWQgKi8KIAlpZiAoY2JhdWQgPT0gQk9USEVSKQogCQlyZXR1cm4gdGVybWlvcy0+Y19vc3BlZWQ7CiAjZW5kaWYKQEAgLTI4Myw3ICsyODMsNyBAQAogCWlmIChjYmF1ZCA9PSBCMCkKIAkJcmV0dXJuIHR0eV90ZXJtaW9zX2JhdWRfcmF0ZSh0ZXJtaW9zKTsKIAotCS8qIE1hZ2ljIHRva2VuIGZvciBhcmJpdGFyeSBzcGVlZCB2aWEgY19pc3BlZWQqLworCS8qIE1hZ2ljIHRva2VuIGZvciBhcmJpdHJhcnkgc3BlZWQgdmlhIGNfaXNwZWVkKi8KIAlpZiAoY2JhdWQgPT0gQk9USEVSKQogCQlyZXR1cm4gdGVybWlvcy0+Y19pc3BlZWQ7CiAKQEAgLTQ0OSw3ICs0NDksNyBAQAogICoJQG5ldzogTmV3IHRlcm1pb3MKICAqCUBvbGQ6IE9sZCB0ZXJtaW9zCiAgKgotICoJUHJvcG9nYXRlIHRoZSBoYXJkd2FyZSBzcGVjaWZpYyB0ZXJtaW5hbCBzZXR0aW5nIGJpdHMgZnJvbQorICoJUHJvcGFnYXRlIHRoZSBoYXJkd2FyZSBzcGVjaWZpYyB0ZXJtaW5hbCBzZXR0aW5nIGJpdHMgZnJvbQogICoJdGhlIG9sZCB0ZXJtaW9zIHN0cnVjdHVyZSB0byB0aGUgbmV3IG9uZS4gVGhpcyBpcyB1c2VkIGluIGNhc2VzCiAgKgl3aGVyZSB0aGUgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCByZWNvbmZpZ3VyYXRpb24gb3IgYXMgYSBoZWxwZXIKICAqCWluIHNvbWUgY2FzZXMgd2hlcmUgb25seSBtaW5pbWFsIHJlY29uZmlndXJhdGlvbiBpcyBzdXBwb3J0ZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3Z0L3Z0LmMgYi9kcml2ZXJzL3R0eS92dC92dC5jCmluZGV4IGM4M2NkZmIuLjRiZWExZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3Z0L3Z0LmMKKysrIGIvZHJpdmVycy90dHkvdnQvdnQuYwpAQCAtMzk2Myw3ICszOTYzLDcgQEAKICAqICBvZiAzMiBwaXhlbHMuIFVzZXJzcGFjZSBmb250ZGF0YSBpcyBzdG9yZWQgd2l0aCAzMiBieXRlcyAoc2hvcnRzL2ludHMsIAogICogIGRlcGVuZGluZyBvbiB3aWR0aCkgcmVzZXJ2ZWQgZm9yIGVhY2ggY2hhcmFjdGVyIHdoaWNoIGlzIGtpbmRhIHdhc3R5LCBidXQgCiAgKiAgdGhpcyBpcyBkb25lIGluIG9yZGVyIHRvIG1haW50YWluIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgRUdBL1ZHQSBmb250cy4gSXQgCi0gKiAgaXMgdXB0byB0aGUgYWN0dWFsIGxvdy1sZXZlbCBjb25zb2xlLWRyaXZlciBjb252ZXJ0IGRhdGEgaW50byBpdHMgZmF2b3JpdGUKKyAqICBpcyB1cCB0byB0aGUgYWN0dWFsIGxvdy1sZXZlbCBjb25zb2xlLWRyaXZlciBjb252ZXJ0IGRhdGEgaW50byBpdHMgZmF2b3JpdGUKICAqICBmb3JtYXQgKG1heWJlIHdlIHNob3VsZCBhZGQgYSBgZm9udG9mZnNldCcgZmllbGQgdG8gdGhlIGBkaXNwbGF5JwogICogIHN0cnVjdHVyZSBzbyB3ZSB3b24ndCBoYXZlIHRvIGNvbnZlcnQgdGhlIGZvbnRkYXRhIGFsbCB0aGUgdGltZS4KICAqICAvSmVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vpby91aW9fcHJ1c3MuYyBiL2RyaXZlcnMvdWlvL3Vpb19wcnVzcy5jCmluZGV4IGRhZjZlNzcuLmU2N2I1NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdWlvL3Vpb19wcnVzcy5jCisrKyBiL2RyaXZlcnMvdWlvL3Vpb19wcnVzcy5jCkBAIC0zOSw3ICszOSw3IEBACiBNT0RVTEVfUEFSTV9ERVNDKGV4dHJhbV9wb29sX3N6LCAiZXh0ZXJuYWwgcmFtIHBvb2wgc2l6ZSB0byBhbGxvY2F0ZSIpOwogCiAvKgotICogSG9zdCBldmVudCBJUlEgbnVtYmVycyBmcm9tIFBSVVNTIC0gUFJVU1MgY2FuIGdlbmVyYXRlIHVwdG8gOCBpbnRlcnJ1cHQKKyAqIEhvc3QgZXZlbnQgSVJRIG51bWJlcnMgZnJvbSBQUlVTUyAtIFBSVVNTIGNhbiBnZW5lcmF0ZSB1cCB0byA4IGludGVycnVwdAogICogZXZlbnRzIHRvIEFJTlRDIG9mIEFSTSBob3N0IHByb2Nlc3NvciAtIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBJUEMgYi93IFBSVVNTCiAgKiBmaXJtd2FyZSBhbmQgdXNlciBzcGFjZSBhcHBsaWNhdGlvbiwgYXN5bmMgbm90aWZpY2F0aW9uIGZyb20gUFJVIGZpcm13YXJlCiAgKiB0byB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9LY29uZmlnIGIvZHJpdmVycy91c2IvS2NvbmZpZwppbmRleCA0MWI2ZTUxLi4wMDY0ODlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL0tjb25maWcKQEAgLTY2LDYgKzY2LDcgQEAKIAlkZWZhdWx0IHkgaWYgQVJDSF9WVDg1MDAKIAlkZWZhdWx0IHkgaWYgUExBVF9TUEVBUgogCWRlZmF1bHQgeSBpZiBBUkNIX01TTQorCWRlZmF1bHQgeSBpZiBNSUNST0JMQVpFCiAJZGVmYXVsdCBQQ0kKIAogIyBBUk0gU0ExMTExIGNoaXBzIGhhdmUgYSBub24tUENJIGJhc2VkICJPSENJLWNvbXBhdGlibGUiIFVTQiBob3N0IGludGVyZmFjZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMgYi9kcml2ZXJzL3VzYi9hdG0vdWVhZ2xlLWF0bS5jCmluZGV4IGIyNjhlOWYuLmU3MTUyMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMKKysrIGIvZHJpdmVycy91c2IvYXRtL3VlYWdsZS1hdG0uYwpAQCAtMTI4Myw3ICsxMjgzLDcgQEAKIAogCS8qIGluIGJ1bGsgbW9kZSB0aGUgbW9kZW0gaGF2ZSBwcm9ibGVtIHdpdGggaGlnaCByYXRlCiAJICogY2hhbmdpbmcgaW50ZXJuYWwgdGltaW5nIGNvdWxkIGltcHJvdmUgdGhpbmdzLCBidXQgdGhlCi0JICogdmFsdWUgaXMgbWlzdGVyaW91cy4KKwkgKiB2YWx1ZSBpcyBteXN0ZXJpb3VzLgogCSAqIEFESTkzMCBkb24ndCBzdXBwb3J0IGl0ICgtRVBJUEUgZXJyb3IpLgogCSAqLwogCkBAIC0xNzQzLDcgKzE3NDMsNyBAQAogCQkJCWdvdG8gb3V0OwogCQl9CiAJfSBlbHNlIHsKLQkJLyogVGhpcyByZWFseSBzaG91bGQgbm90IGhhcHBlbiAqLworCQkvKiBUaGlzIHJlYWxseSBzaG91bGQgbm90IGhhcHBlbiAqLwogCQl1ZWFfZXJyKElOU19UT19VU0JERVYoc2MpLCAiYmFkIGNtdnMgdmVyc2lvbiAlZFxuIiwgdmVyKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTc5OCw3ICsxNzk4LDcgQEAKIAkJCQlnb3RvIG91dDsKIAkJfQogCX0gZWxzZSB7Ci0JCS8qIFRoaXMgcmVhbHkgc2hvdWxkIG5vdCBoYXBwZW4gKi8KKwkJLyogVGhpcyByZWFsbHkgc2hvdWxkIG5vdCBoYXBwZW4gKi8KIAkJdWVhX2VycihJTlNfVE9fVVNCREVWKHNjKSwgImJhZCBjbXZzIHZlcnNpb24gJWRcbiIsIHZlcik7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE4MjksNyArMTgyOSw3IEBACiAKIAkvKiBtYXNrIGludGVycnVwdCAqLwogCXNjLT5ib290aW5nID0gMTsKLQkvKiBXZSBuZWVkIHRvIHNldCB0aGlzIGhlcmUgYmVjYXVzZSwgYSBhY2sgdGltZW91dCBjb3VsZCBoYXZlIG9jY3VyZWQsCisJLyogV2UgbmVlZCB0byBzZXQgdGhpcyBoZXJlIGJlY2F1c2UsIGEgYWNrIHRpbWVvdXQgY291bGQgaGF2ZSBvY2N1cnJlZCwKIAkgKiBidXQgYmVmb3JlIHdlIHN0YXJ0IHRoZSByZWJvb3QsIHRoZSBhY2sgb2NjdXJzIGFuZCBzZXQgdGhpcyB0byAxLgogCSAqIFNvIHdlIHdpbGwgZmFpbGVkIHRvIHdhaXQgUmVhZHkgQ01WLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYzY3eDAwL2M2N3gwMC1kcnYuYyBiL2RyaXZlcnMvdXNiL2M2N3gwMC9jNjd4MDAtZHJ2LmMKaW5kZXggYjZkNDkyMy4uNjIwNTBmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvYzY3eDAwL2M2N3gwMC1kcnYuYworKysgYi9kcml2ZXJzL3VzYi9jNjd4MDAvYzY3eDAwLWRydi5jCkBAIC0yNyw3ICsyNyw3IEBACiAgKiB0aGUgbGluayBiZXR3ZWVuIHRoZSBjb21tb24gaGFyZHdhcmUgcGFydHMgYW5kIHRoZSBzdWJkcml2ZXJzIChlLmcuCiAgKiBpbnRlcnJ1cHQgaGFuZGxpbmcpLgogICoKLSAqIFRoZSBjNjd4MDAgaGFzIDIgU0lFJ3MgKHNlcmlhbCBpbnRlcmZhY2UgZW5naW5lKSB3aWNoIGNhbiBiZSBjb25maWd1cmVkCisgKiBUaGUgYzY3eDAwIGhhcyAyIFNJRSdzIChzZXJpYWwgaW50ZXJmYWNlIGVuZ2luZSkgd2hpY2ggY2FuIGJlIGNvbmZpZ3VyZWQKICAqIHRvIGJlIGhvc3QsIGRldmljZSBvciBPVEcgKHdpdGggc29tZSBsaW1pdGF0aW9ucywgRS5HLiBvbmx5IFNJRTEgY2FuIGJlIE9URykuCiAgKgogICogRGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybSBjb25maWd1cmF0aW9uLCB0aGUgU0lFJ3MgYXJlIGNyZWF0ZWQgYW5kCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jNjd4MDAvYzY3eDAwLWhjZC5oIGIvZHJpdmVycy91c2IvYzY3eDAwL2M2N3gwMC1oY2QuaAppbmRleCA3NGU0NDYyLi5lM2Q0OTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jNjd4MDAvYzY3eDAwLWhjZC5oCisrKyBiL2RyaXZlcnMvdXNiL2M2N3gwMC9jNjd4MDAtaGNkLmgKQEAgLTM0LDcgKzM0LDcgQEAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgZGVwZW5kIG9uIHRoZSBDUFUgc3BlZWQsIGJ1cyBzcGVlZCwgLi4uCiAgKiBUaGVzZSBjYW4gYmUgdHVuZWQgZm9yIHNwZWNpZmljIHVzZSBjYXNlcywgZS5nLiBpZiBpc29jaHJvbm91cyB0cmFuc2ZlcnMKLSAqIGFyZSB2ZXJ5IGltcG9ydGFudCwgYmFuZHdpdGggY2FuIGJlIHNhY3JpZmljZWQgdG8gZ3VhcmFudGVlIHRoYXQgdGhlCisgKiBhcmUgdmVyeSBpbXBvcnRhbnQsIGJhbmR3aWR0aCBjYW4gYmUgc2FjcmlmaWNlZCB0byBndWFyYW50ZWUgdGhhdCB0aGUKICAqIDFtcyBkZWFkbGluZSB3aWxsIGJlIG1ldC4KICAqIElmIGJ1bGsgdHJhbnNmZXJzIGFyZSBpbXBvcnRhbnQsIHRoZSBNQVhfRlJBTUVfQlcgY2FuIGJlIGluY3JlYXNlZCwKICAqIGJ1dCBzb21lIChvciBtYW55KSBpc29jaHJvbm91cyBkZWFkbGluZXMgbWlnaHQgbm90IGJlIG1ldC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2M2N3gwMC9jNjd4MDAtc2NoZWQuYyBiL2RyaXZlcnMvdXNiL2M2N3gwMC9jNjd4MDAtc2NoZWQuYwppbmRleCBmNmIzYzI1Li5hMDNmYmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jNjd4MDAvYzY3eDAwLXNjaGVkLmMKKysrIGIvZHJpdmVycy91c2IvYzY3eDAwL2M2N3gwMC1zY2hlZC5jCkBAIC05MDcsNyArOTA3LDcgQEAKIAogLyogUmVtb3ZlIGFsbCB0ZCdzIGZyb20gdGhlIGxpc3Qgd2hpY2ggY29tZQogICogYWZ0ZXIgbGFzdF90ZCBhbmQgYXJlIG1lYW50IGZvciB0aGUgc2FtZSBwaXBlLgotICogVGhpcyBpcyB1c2VkIHdoZW4gYSBzaG9ydCBwYWNrZXQgaGFzIG9jY3VyZWQgKi8KKyAqIFRoaXMgaXMgdXNlZCB3aGVuIGEgc2hvcnQgcGFja2V0IGhhcyBvY2N1cnJlZCAqLwogc3RhdGljIGlubGluZSB2b2lkIGM2N3gwMF9jbGVhcl9waXBlKHN0cnVjdCBjNjd4MDBfaGNkICpjNjd4MDAsCiAJCQkJICAgICBzdHJ1Y3QgYzY3eDAwX3RkICpsYXN0X3RkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5oIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5oCmluZGV4IDVlZWI1NzAuLmI0ZWE1NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uaAorKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmgKQEAgLTUyLDcgKzUyLDcgQEAKICAqLwogCiAvKgotICogVGhlIG9ubHkgcmVhc29uIHRvIGhhdmUgc2V2ZXJhbCBidWZmZXJzIGlzIHRvIGFjY29tb2RhdGUgYXNzdW1wdGlvbnMKKyAqIFRoZSBvbmx5IHJlYXNvbiB0byBoYXZlIHNldmVyYWwgYnVmZmVycyBpcyB0byBhY2NvbW1vZGF0ZSBhc3N1bXB0aW9ucwogICogaW4gbGluZSBkaXNjaXBsaW5lcy4gVGhleSBhc2sgZm9yIGVtcHR5IHNwYWNlIGFtb3VudCwgcmVjZWl2ZSBvdXIgVVJCIHNpemUsCiAgKiBhbmQgcHJvY2VlZCB0byBpc3N1ZSBzZXZlcmFsIDEtY2hhcmFjdGVyIHdyaXRlcywgYXNzdW1pbmcgdGhleSB3aWxsIGZpdC4KICAqIFRoZSB2ZXJ5IGZpcnN0IHdyaXRlIHRha2VzIGEgY29tcGxldGUgVVJCLiBGb3J0dW5hdGVseSwgdGhpcyBvbmx5IGhhcHBlbnMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jIGIvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMKaW5kZXggNmE1NDYzNC4uMzg1YWNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMKQEAgLTQ4Myw3ICs0ODMsNyBAQAogCQl9CiAKIAkJZG9uZSArPSBuX2NoYXJhY3RlcnM7Ci0JCS8qIFRlcm1pbmF0ZSBpZiBlbmQtb2YtbWVzc2FnZSBiaXQgcmVjaWV2ZWQgZnJvbSBkZXZpY2UgKi8KKwkJLyogVGVybWluYXRlIGlmIGVuZC1vZi1tZXNzYWdlIGJpdCByZWNlaXZlZCBmcm9tIGRldmljZSAqLwogCQlpZiAoKGJ1ZmZlcls4XSAmICAweDAxKSAmJiAoYWN0dWFsID49IG5fY2hhcmFjdGVycyArIDEyKSkKIAkJCXJlbWFpbmluZyA9IDA7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jIGIvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMKaW5kZXggYTNkMmUyMy4uOTZmZGZiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMKQEAgLTIyMSw3ICsyMjEsNyBAQAogCQlicmVhazsKIAljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lOVDoKIAkJdHlwZSA9ICJJbnQuIjsKLQkJaWYgKHNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQorCQlpZiAoc3BlZWQgPT0gVVNCX1NQRUVEX0hJR0ggfHwgc3BlZWQgPT0gVVNCX1NQRUVEX1NVUEVSKQogCQkJaW50ZXJ2YWwgPSAxIDw8IChkZXNjLT5iSW50ZXJ2YWwgLSAxKTsKIAkJZWxzZQogCQkJaW50ZXJ2YWwgPSBkZXNjLT5iSW50ZXJ2YWw7CkBAIC0yMjksNyArMjI5LDggQEAKIAlkZWZhdWx0OgkvKiAiY2FuJ3QgaGFwcGVuIiAqLwogCQlyZXR1cm4gc3RhcnQ7CiAJfQotCWludGVydmFsICo9IChzcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgPyAxMjUgOiAxMDAwOworCWludGVydmFsICo9IChzcGVlZCA9PSBVU0JfU1BFRURfSElHSCB8fAorCQkgICAgIHNwZWVkID09IFVTQl9TUEVFRF9TVVBFUikgPyAxMjUgOiAxMDAwOwogCWlmIChpbnRlcnZhbCAlIDEwMDApCiAJCXVuaXQgPSAndSc7CiAJZWxzZSB7CkBAIC01NDIsOCArNTQzLDkgQEAKIAlpZiAobGV2ZWwgPT0gMCkgewogCQlpbnQJbWF4OwogCi0JCS8qIGhpZ2ggc3BlZWQgcmVzZXJ2ZXMgODAlLCBmdWxsL2xvdyByZXNlcnZlcyA5MCUgKi8KLQkJaWYgKHVzYmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCisJCS8qIHN1cGVyL2hpZ2ggc3BlZWQgcmVzZXJ2ZXMgODAlLCBmdWxsL2xvdyByZXNlcnZlcyA5MCUgKi8KKwkJaWYgKHVzYmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0ggfHwKKwkJICAgIHVzYmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX1NVUEVSKQogCQkJbWF4ID0gODAwOwogCQllbHNlCiAJCQltYXggPSBGUkFNRV9USU1FX01BWF9VU0VDU19BTExPQzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCmluZGV4IDAyYjRkYmYuLjc3YTdmYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwpAQCAtNzAwLDcgKzcwMCw3IEBACiAJLyogVGhlIFVTQiAyLjAgc3BlYyBzYXlzIDI1NiBtcy4gIFRoaXMgaXMgY2xvc2UgZW5vdWdoIGFuZCB3b24ndAogCSAqIGV4Y2VlZCB0aGF0IGxpbWl0IGlmIEhaIGlzIDEwMC4gVGhlIG1hdGggaXMgbW9yZSBjbHVua3kgdGhhbgogCSAqIG1heWJlIGV4cGVjdGVkLCB0aGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCB0aW1lcnMgZm9yIFVTQiBkZXZpY2VzCi0JICogZmlyZSBhdCB0aGUgc2FtZSB0aW1lIHRvIGdpdmUgdGhlIENQVSBhIGJyZWFrIGluYmV0d2VlbiAqLworCSAqIGZpcmUgYXQgdGhlIHNhbWUgdGltZSB0byBnaXZlIHRoZSBDUFUgYSBicmVhayBpbiBiZXR3ZWVuICovCiAJaWYgKGhjZC0+dXNlc19uZXdfcG9sbGluZyA/IEhDRF9QT0xMX1JIKGhjZCkgOgogCQkJKGxlbmd0aCA9PSAwICYmIGhjZC0+c3RhdHVzX3VyYiAhPSBOVUxMKSkKIAkJbW9kX3RpbWVyICgmaGNkLT5yaF90aW1lciwgKGppZmZpZXMvKEhaLzQpICsgMSkgKiAoSFovNCkpOwpAQCAtMTkwOCw3ICsxOTA4LDcgQEAKIAogCS8qIFN0cmVhbXMgb25seSBhcHBseSB0byBidWxrIGVuZHBvaW50cy4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2VwczsgaSsrKQotCQlpZiAoIXVzYl9lbmRwb2ludF94ZmVyX2J1bGsoJmVwc1tpXS0+ZGVzYykpCisJCWlmICghZXBzW2ldIHx8ICF1c2JfZW5kcG9pbnRfeGZlcl9idWxrKCZlcHNbaV0tPmRlc2MpKQogCQkJcmV0dXJuOwogCiAJaGNkLT5kcml2ZXItPmZyZWVfc3RyZWFtcyhoY2QsIGRldiwgZXBzLCBudW1fZXBzLCBtZW1fZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9odWIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKaW5kZXggNTY0ZWFhNS4uOTM3MjBiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9odWIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCkBAIC0xNjQ5LDcgKzE2NDksNyBAQAogCiAJLyogbWFyayB0aGUgZGV2aWNlIGFzIGluYWN0aXZlLCBzbyBhbnkgZnVydGhlciB1cmIgc3VibWlzc2lvbnMgZm9yCiAJICogdGhpcyBkZXZpY2UgKGFuZCBhbnkgb2YgaXRzIGNoaWxkcmVuKSB3aWxsIGZhaWwgaW1tZWRpYXRlbHkuCi0JICogdGhpcyBxdWllc2NlcyBldmVyeXRpbmcgZXhjZXB0IHBlbmRpbmcgdXJicy4KKwkgKiB0aGlzIHF1aWVzY2VzIGV2ZXJ5dGhpbmcgZXhjZXB0IHBlbmRpbmcgdXJicy4KIAkgKi8KIAl1c2Jfc2V0X2RldmljZV9zdGF0ZSh1ZGV2LCBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpOwogCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICJVU0IgZGlzY29ubmVjdCwgZGV2aWNlIG51bWJlciAlZFxuIiwKQEAgLTIyODUsNyArMjI4NSwxNyBAQAogCX0KIAogCS8qIHNlZSA3LjEuNy42ICovCi0Jc3RhdHVzID0gc2V0X3BvcnRfZmVhdHVyZShodWItPmhkZXYsIHBvcnQxLCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQpOworCS8qIENsZWFyIFBPUlRfUE9XRVIgaWYgaXQncyBhIFVTQjMuMCBkZXZpY2UgY29ubmVjdGVkIHRvIFVTQiAzLjAKKwkgKiBleHRlcm5hbCBodWIuCisJICogRklYTUU6IHRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCB0byBtYWtlIHRoZSBzeXN0ZW0gYWJsZQorCSAqIHRvIHN1c3BlbmQvcmVzdW1lLgorCSAqLworCWlmICgoaHViLT5oZGV2LT5wYXJlbnQgIT0gTlVMTCkgJiYgaHViX2lzX3N1cGVyc3BlZWQoaHViLT5oZGV2KSkKKwkJc3RhdHVzID0gY2xlYXJfcG9ydF9mZWF0dXJlKGh1Yi0+aGRldiwgcG9ydDEsCisJCQkJCQlVU0JfUE9SVF9GRUFUX1BPV0VSKTsKKwllbHNlCisJCXN0YXR1cyA9IHNldF9wb3J0X2ZlYXR1cmUoaHViLT5oZGV2LCBwb3J0MSwKKwkJCQkJCVVTQl9QT1JUX0ZFQVRfU1VTUEVORCk7CiAJaWYgKHN0YXR1cykgewogCQlkZXZfZGJnKGh1Yi0+aW50ZmRldiwgImNhbid0IHN1c3BlbmQgcG9ydCAlZCwgc3RhdHVzICVkXG4iLAogCQkJCXBvcnQxLCBzdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZWFybHkvZWhjaS1kYmdwLmMgYi9kcml2ZXJzL3VzYi9lYXJseS9laGNpLWRiZ3AuYwppbmRleCAwYmMwNmUyLi5hNmEzNTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9lYXJseS9laGNpLWRiZ3AuYworKysgYi9kcml2ZXJzL3VzYi9lYXJseS9laGNpLWRiZ3AuYwpAQCAtNjQ4LDcgKzY0OCw3IEBACiAJCWlmICghKHBvcnRzYyAmIFBPUlRfQ09OTkVDVCkpCiAJCQlyZXR1cm4gLUVOT1RDT05OOwogCi0JCS8qIGJvbWIgb3V0IGNvbXBsZXRlbHkgaWYgc29tZXRoaW5nIHdlaXJkIGhhcHBlbmQgKi8KKwkJLyogYm9tYiBvdXQgY29tcGxldGVseSBpZiBzb21ldGhpbmcgd2VpcmQgaGFwcGVuZWQgKi8KIAkJaWYgKChwb3J0c2MgJiBQT1JUX0NTQykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMKaW5kZXggZjhkZDcyNi4uNmU0MmFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jCkBAIC0yNzgsNyArMjc4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogQ2FsY3VsYXRlcyBmaWZvIHN0YXJ0IG9mIGVuZHBvaW50IGJhc2VkIG9uIHByZWNlZWRpbmcgZW5kcG9pbnRzICovCisvKiBDYWxjdWxhdGVzIGZpZm8gc3RhcnQgb2YgZW5kcG9pbnQgYmFzZWQgb24gcHJlY2VkaW5nIGVuZHBvaW50cyAqLwogc3RhdGljIGludCB1ZGNfc2V0X3R4Zmlmb19hZGRyKHN0cnVjdCB1ZGNfZXAgKmVwKQogewogCXN0cnVjdCB1ZGMJKmRldjsKQEAgLTIxMzcsNyArMjEzNyw3IEBACiAJaWYgKHVzZV9kbWEpIHsKIAkJLyogQk5BIGV2ZW50ID8gKi8KIAkJaWYgKHRtcCAmIEFNRF9CSVQoVURDX0VQU1RTX0JOQSkpIHsKLQkJCURCRyhkZXYsICJCTkEgZXAlZG91dCBvY2N1cmVkIC0gREVTUFRSID0gJXggXG4iLAorCQkJREJHKGRldiwgIkJOQSBlcCVkb3V0IG9jY3VycmVkIC0gREVTUFRSID0gJXggXG4iLAogCQkJCQllcC0+bnVtLCByZWFkbCgmZXAtPnJlZ3MtPmRlc3B0cikpOwogCQkJLyogY2xlYXIgQk5BICovCiAJCQl3cml0ZWwodG1wIHwgQU1EX0JJVChVRENfRVBTVFNfQk5BKSwgJmVwLT5yZWdzLT5zdHMpOwpAQCAtMjE1MSw3ICsyMTUxLDcgQEAKIAl9CiAJLyogSEUgZXZlbnQgPyAqLwogCWlmICh0bXAgJiBBTURfQklUKFVEQ19FUFNUU19IRSkpIHsKLQkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsICJIRSBlcCVkb3V0IG9jY3VyZWRcbiIsIGVwLT5udW0pOworCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgIkhFIGVwJWRvdXQgb2NjdXJyZWRcbiIsIGVwLT5udW0pOwogCiAJCS8qIGNsZWFyIEhFICovCiAJCXdyaXRlbCh0bXAgfCBBTURfQklUKFVEQ19FUFNUU19IRSksICZlcC0+cmVncy0+c3RzKTsKQEAgLTIzNTQsNyArMjM1NCw3IEBACiAJCS8qIEJOQSA/ICovCiAJCWlmIChlcHN0cyAmIEFNRF9CSVQoVURDX0VQU1RTX0JOQSkpIHsKIAkJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LAotCQkJCSJCTkEgZXAlZGluIG9jY3VyZWQgLSBERVNQVFIgPSAlMDhseCBcbiIsCisJCQkJIkJOQSBlcCVkaW4gb2NjdXJyZWQgLSBERVNQVFIgPSAlMDhseCBcbiIsCiAJCQkJZXAtPm51bSwKIAkJCQkodW5zaWduZWQgbG9uZykgcmVhZGwoJmVwLT5yZWdzLT5kZXNwdHIpKTsKIApAQCAtMjM2Nyw3ICsyMzY3LDcgQEAKIAkvKiBIRSBldmVudCA/ICovCiAJaWYgKGVwc3RzICYgQU1EX0JJVChVRENfRVBTVFNfSEUpKSB7CiAJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LAotCQkJIkhFIGVwJWRuIG9jY3VyZWQgLSBERVNQVFIgPSAlMDhseCBcbiIsCisJCQkiSEUgZXAlZG4gb2NjdXJyZWQgLSBERVNQVFIgPSAlMDhseCBcbiIsCiAJCQllcC0+bnVtLCAodW5zaWduZWQgbG9uZykgcmVhZGwoJmVwLT5yZWdzLT5kZXNwdHIpKTsKIAogCQkvKiBjbGVhciBIRSAqLwpAQCAtMjM4NCw3ICsyMzg0LDcgQEAKIAkJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsCiAJCQkJCXN0cnVjdCB1ZGNfcmVxdWVzdCwgcXVldWUpOwogCQkJLyoKLQkJCSAqIGxlbmd0aCBieXRlcyB0cmFuc2ZlcmVkCisJCQkgKiBsZW5ndGggYnl0ZXMgdHJhbnNmZXJyZWQKIAkJCSAqIGNoZWNrIGRtYSBkb25lIG9mIGxhc3QgZGVzYy4gaW4gUFBCRFUgbW9kZQogCQkJICovCiAJCQlpZiAodXNlX2RtYV9wcGJfZHUpIHsKQEAgLTI3ODQsNyArMjc4NCw3IEBACiAJCQkJCS8qIHdyaXRlIGZpZm8gKi8KIAkJCQkJdWRjX3R4Zmlmb193cml0ZShlcCwgJnJlcS0+cmVxKTsKIAotCQkJCQkvKiBsZW5naCBieXRlcyB0cmFuc2ZlcmVkICovCisJCQkJCS8qIGxlbmdoIGJ5dGVzIHRyYW5zZmVycmVkICovCiAJCQkJCWxlbiA9IHJlcS0+cmVxLmxlbmd0aCAtIHJlcS0+cmVxLmFjdHVhbDsKIAkJCQkJaWYgKGxlbiA+IGVwLT5lcC5tYXhwYWNrZXQpCiAJCQkJCQlsZW4gPSBlcC0+ZXAubWF4cGFja2V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmgKaW5kZXggNGJiYWJiYi4uMWQxYzc1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5oCkBAIC01ODQsNyArNTg0LDcgQEAKICAqIFNFVCBhbmQgR0VUIGJpdGZpZWxkcyBpbiB1MzIgdmFsdWVzCiAgKiB2aWEgY29uc3RhbnRzIGZvciBtYXNrL29mZnNldDoKICAqIDxiaXRfZmllbGRfc3R1Yl9uYW1lPiBpcyB0aGUgdGV4dCBiZXR3ZWVuCi0gKiBVRENfIGFuZCBfTUFTS3xfT0ZTIG9mIGFwcHJvcGlhdGUKKyAqIFVEQ18gYW5kIF9NQVNLfF9PRlMgb2YgYXBwcm9wcmlhdGUKICAqIGNvbnN0YW50CiAgKgogICogc2V0IGJpdGZpZWxkIHZhbHVlIGluIHUzMiB1MzJWYWwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKaW5kZXggYmI4ZGRmMC4uOWI3Y2RiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKQEAgLTgyNiw3ICs4MjYsNyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLS8qIHJlaW5pdCA9PSByZXN0b3JlIGluaXRhbCBzb2Z0d2FyZSBzdGF0ZSAqLworLyogcmVpbml0ID09IHJlc3RvcmUgaW5pdGlhbCBzb2Z0d2FyZSBzdGF0ZSAqLwogc3RhdGljIHZvaWQgdWRjX3JlaW5pdChzdHJ1Y3QgYXQ5MV91ZGMgKnVkYykKIHsKIAl1MzIgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYwppbmRleCBjMjI1MWM0Li44MjMxNGVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCkBAIC00Miw3ICs0Miw3IEBACiBzdGF0aWMgc3RydWN0IHVzYl9jb21wb3NpdGVfZHJpdmVyICpjb21wb3NpdGU7CiBzdGF0aWMgaW50ICgqY29tcG9zaXRlX2dhZGdldF9iaW5kKShzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpOwogCi0vKiBTb21lIHN5c3RlbXMgd2lsbCBuZWVkIHJ1bnRpbWUgb3ZlcnJpZGVzIGZvciB0aGUgIHByb2R1Y3QgaWRlbnRpZmVycworLyogU29tZSBzeXN0ZW1zIHdpbGwgbmVlZCBydW50aW1lIG92ZXJyaWRlcyBmb3IgdGhlICBwcm9kdWN0IGlkZW50aWZpZXJzCiAgKiBwdWJsaXNoZWQgaW4gdGhlIGRldmljZSBkZXNjcmlwdG9yLCBlaXRoZXIgbnVtYmVycyBvciBzdHJpbmdzIG9yIGJvdGguCiAgKiBTdHJpbmcgcGFyYW1ldGVycyBhcmUgaW4gVVRGLTggKHN1cGVyc2V0IG9mIEFTQ0lJJ3MgNyBiaXQgY2hhcmFjdGVycykuCiAgKi8KQEAgLTIwNSwxNCArMjA1LDE0IEBACiAgKiB1c2JfaW50ZXJmYWNlX2lkKCkgaXMgY2FsbGVkIGZyb20gdXNiX2Z1bmN0aW9uLmJpbmQoKSBjYWxsYmFja3MgdG8KICAqIGFsbG9jYXRlIG5ldyBpbnRlcmZhY2UgSURzLiAgVGhlIGZ1bmN0aW9uIGRyaXZlciB3aWxsIHRoZW4gc3RvcmUgdGhhdAogICogSUQgaW4gaW50ZXJmYWNlLCBhc3NvY2lhdGlvbiwgQ0RDIHVuaW9uLCBhbmQgb3RoZXIgZGVzY3JpcHRvcnMuICBJdAotICogd2lsbCBhbHNvIGhhbmRsZSBhbnkgY29udHJvbCByZXF1ZXN0cyB0YXJnZXR0ZWQgYXQgdGhhdCBpbnRlcmZhY2UsCisgKiB3aWxsIGFsc28gaGFuZGxlIGFueSBjb250cm9sIHJlcXVlc3RzIHRhcmdldGVkIGF0IHRoYXQgaW50ZXJmYWNlLAogICogcGFydGljdWxhcmx5IGNoYW5naW5nIGl0cyBhbHRzZXR0aW5nIHZpYSBzZXRfYWx0KCkuICBUaGVyZSBtYXkKICAqIGFsc28gYmUgY2xhc3Mtc3BlY2lmaWMgb3IgdmVuZG9yLXNwZWNpZmljIHJlcXVlc3RzIHRvIGhhbmRsZS4KICAqCiAgKiBBbGwgaW50ZXJmYWNlIGlkZW50aWZpZXIgc2hvdWxkIGJlIGFsbG9jYXRlZCB1c2luZyB0aGlzIHJvdXRpbmUsIHRvCiAgKiBlbnN1cmUgdGhhdCBmb3IgZXhhbXBsZSBkaWZmZXJlbnQgZnVuY3Rpb25zIGRvbid0IHdyb25nbHkgYXNzaWduCiAgKiBkaWZmZXJlbnQgbWVhbmluZ3MgdG8gdGhlIHNhbWUgaWRlbnRpZmllci4gIE5vdGUgdGhhdCBzaW5jZSBpbnRlcmZhY2UKLSAqIGlkZW50aWZlcnMgYXJlIGNvbmZpZ3VyYXRpb24tc3BlY2lmaWMsIGZ1bmN0aW9ucyB1c2VkIGluIG1vcmUgdGhhbgorICogaWRlbnRpZmllcnMgYXJlIGNvbmZpZ3VyYXRpb24tc3BlY2lmaWMsIGZ1bmN0aW9ucyB1c2VkIGluIG1vcmUgdGhhbgogICogb25lIGNvbmZpZ3VyYXRpb24gKG9yIG1vcmUgdGhhbiBvbmNlIGluIGEgZ2l2ZW4gY29uZmlndXJhdGlvbikgbmVlZAogICogbXVsdGlwbGUgdmVyc2lvbnMgb2YgdGhlIHJlbGV2YW50IGRlc2NyaXB0b3JzLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2F1ZGlvLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hdWRpby5jCmluZGV4IDAwOTc1ZWQuLjAxMTFmOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2F1ZGlvLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYXVkaW8uYwpAQCAtNzA2LDYgKzcwNiw3IEBACiAJc3RydWN0IGZfYXVkaW8JCSphdWRpbyA9IGZ1bmNfdG9fYXVkaW8oZik7CiAKIAl1c2JfZnJlZV9kZXNjcmlwdG9ycyhmLT5kZXNjcmlwdG9ycyk7CisJdXNiX2ZyZWVfZGVzY3JpcHRvcnMoZi0+aHNfZGVzY3JpcHRvcnMpOwogCWtmcmVlKGF1ZGlvKTsKIH0KIApAQCAtNzQyLDcgKzc0Myw3IEBACiB9CiAKIC8qKgotICogYXVkaW9fYmluZF9jb25maWcgLSBhZGQgVVNCIGF1ZGlvIGZ1Y250aW9uIHRvIGEgY29uZmlndXJhdGlvbgorICogYXVkaW9fYmluZF9jb25maWcgLSBhZGQgVVNCIGF1ZGlvIGZ1bmN0aW9uIHRvIGEgY29uZmlndXJhdGlvbgogICogQGM6IHRoZSBjb25maWd1cmF0aW9uIHRvIHN1cGNhcmQgdGhlIFVTQiBhdWRpbyBmdW5jdGlvbgogICogQ29udGV4dDogc2luZ2xlIHRocmVhZGVkIGR1cmluZyBnYWRnZXQgc2V0dXAKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lZW0uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VlbS5jCmluZGV4IDk1ZGQ0NjYuLmIzYzMwNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VlbS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VlbS5jCkBAIC0zMTQsNiArMzE0LDkgQEAKIAogc3RhdGljIHZvaWQgZWVtX2NtZF9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCiB7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXJlcS0+Y29udGV4dDsKKworCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiB9CiAKIC8qCkBAIC00MjgsMTAgKzQzMSwxMSBAQAogCQkJCXNrYl90cmltKHNrYjIsIGxlbik7CiAJCQkJcHV0X3VuYWxpZ25lZF9sZTE2KEJJVCgxNSkgfCBCSVQoMTEpIHwgbGVuLAogCQkJCQkJCXNrYl9wdXNoKHNrYjIsIDIpKTsKLQkJCQlza2JfY29weV9iaXRzKHNrYiwgMCwgcmVxLT5idWYsIHNrYi0+bGVuKTsKLQkJCQlyZXEtPmxlbmd0aCA9IHNrYi0+bGVuOworCQkJCXNrYl9jb3B5X2JpdHMoc2tiMiwgMCwgcmVxLT5idWYsIHNrYjItPmxlbik7CisJCQkJcmVxLT5sZW5ndGggPSBza2IyLT5sZW47CiAJCQkJcmVxLT5jb21wbGV0ZSA9IGVlbV9jbWRfY29tcGxldGU7CiAJCQkJcmVxLT56ZXJvID0gMTsKKwkJCQlyZXEtPmNvbnRleHQgPSBza2IyOwogCQkJCWlmICh1c2JfZXBfcXVldWUocG9ydC0+aW5fZXAsIHJlcSwgR0ZQX0FUT01JQykpCiAJCQkJCURCRyhjZGV2LCAiZWNobyByZXNwb25zZSBxdWV1ZSBmYWlsXG4iKTsKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX25jbS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbmNtLmMKaW5kZXggMTMwZWVlNi4uODY5MDJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbmNtLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbmNtLmMKQEAgLTExMSw3ICsxMTEsNyBAQAogI2RlZmluZSBOVEJfT1VUX1NJWkUJCTE2Mzg0CiAKIC8qCi0gKiBza2JzIG9mIHNpemUgbGVzcyB0aGFuIHRoYXQgd2lsbCBub3QgYmUgYWxsaWduZWQKKyAqIHNrYnMgb2Ygc2l6ZSBsZXNzIHRoYW4gdGhhdCB3aWxsIG5vdCBiZSBhbGlnbmVkCiAgKiB0byBOQ00ncyBkd050YkluTWF4U2l6ZSB0byBzYXZlIGJ1cyBiYW5kd2lkdGgKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuYwppbmRleCBhZWU3ZTNjLi4zYTY4ZTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmMKQEAgLTExNDgsNiArMTE0OCwxMiBAQAogc3RhdGljIGludCB0eGNvbXBsZXRlKHN0cnVjdCBxZV9lcCAqZXAsIHVuc2lnbmVkIGNoYXIgcmVzdGFydCkKIHsKIAlpZiAoZXAtPnR4X3JlcSAhPSBOVUxMKSB7CisJCXN0cnVjdCBxZV9yZXEgKnJlcSA9IGVwLT50eF9yZXE7CisJCXVuc2lnbmVkIHpscCA9IDAsIGxhc3RfbGVuID0gMDsKKworCQlsYXN0X2xlbiA9IG1pbl90KHVuc2lnbmVkLCByZXEtPnJlcS5sZW5ndGggLSBlcC0+c2VudCwKKwkJCQllcC0+ZXAubWF4cGFja2V0KTsKKwogCQlpZiAoIXJlc3RhcnQpIHsKIAkJCWludCBhc2VudCA9IGVwLT5sYXN0OwogCQkJZXAtPnNlbnQgKz0gYXNlbnQ7CkBAIC0xMTU2LDkgKzExNjIsMTggQEAKIAkJCWVwLT5sYXN0ID0gMDsKIAkJfQogCisJCS8qIHpscCBuZWVkZWQgd2hlbiByZXEtPnJlLnplcm8gaXMgc2V0ICovCisJCWlmIChyZXEtPnJlcS56ZXJvKSB7CisJCQlpZiAobGFzdF9sZW4gPT0gMCB8fAorCQkJCShyZXEtPnJlcS5sZW5ndGggJSBlcC0+ZXAubWF4cGFja2V0KSAhPSAwKQorCQkJCXpscCA9IDA7CisJCQllbHNlCisJCQkJemxwID0gMTsKKwkJfSBlbHNlCisJCQl6bHAgPSAwOworCiAJCS8qIGEgcmVxdWVzdCBhbHJlYWR5IHdlcmUgdHJhbnNtaXR0ZWQgY29tcGxldGVseSAqLwotCQlpZiAoKGVwLT50eF9yZXEtPnJlcS5sZW5ndGggLSBlcC0+c2VudCkgPD0gMCkgewotCQkJZXAtPnR4X3JlcS0+cmVxLmFjdHVhbCA9ICh1bnNpZ25lZCBpbnQpZXAtPnNlbnQ7CisJCWlmICgoKGVwLT50eF9yZXEtPnJlcS5sZW5ndGggLSBlcC0+c2VudCkgPD0gMCkgJiYgIXpscCkgewogCQkJZG9uZShlcCwgZXAtPnR4X3JlcSwgMCk7CiAJCQllcC0+dHhfcmVxID0gTlVMTDsKIAkJCWVwLT5sYXN0ID0gMDsKQEAgLTExOTEsNiArMTIwNiw3IEBACiAJYnVmID0gKHU4ICopZXAtPnR4X3JlcS0+cmVxLmJ1ZiArIGVwLT5zZW50OwogCWlmIChidWYgJiYgc2l6ZSkgewogCQllcC0+bGFzdCA9IHNpemU7CisJCWVwLT50eF9yZXEtPnJlcS5hY3R1YWwgKz0gc2l6ZTsKIAkJZnJhbWVfc2V0X2RhdGEoZnJhbWUsIGJ1Zik7CiAJCWZyYW1lX3NldF9sZW5ndGgoZnJhbWUsIHNpemUpOwogCQlmcmFtZV9zZXRfc3RhdHVzKGZyYW1lLCBGUkFNRV9PSyk7CkBAIC0yNTIzLDE1ICsyNTM5LDE4IEBACiB9CiAKIC8qIERyaXZlciBwcm9iZSBmdW5jdGlvbnMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHFlX3VkY19tYXRjaFtdOwogc3RhdGljIGludCBfX2RldmluaXQgcWVfdWRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KQogeworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZmRldi0+ZGV2Lm9mX25vZGU7CiAJc3RydWN0IHFlX2VwICplcDsKIAl1bnNpZ25lZCBpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBpbnQgaTsKIAljb25zdCB2b2lkICpwcm9wOwogCi0JaWYgKCFvZmRldi0+ZGV2Lm9mX21hdGNoKQorCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKHFlX3VkY19tYXRjaCwgJm9mZGV2LT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgIm1vZGUiLCBOVUxMKTsKQEAgLTI1NDUsNyArMjU2NCw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXVkY19jb250cm9sbGVyLT5zb2NfdHlwZSA9ICh1bnNpZ25lZCBsb25nKW9mZGV2LT5kZXYub2ZfbWF0Y2gtPmRhdGE7CisJdWRjX2NvbnRyb2xsZXItPnNvY190eXBlID0gKHVuc2lnbmVkIGxvbmcpbWF0Y2gtPmRhdGE7CiAJdWRjX2NvbnRyb2xsZXItPnVzYl9yZWdzID0gb2ZfaW9tYXAobnAsIDApOwogCWlmICghdWRjX2NvbnRyb2xsZXItPnVzYl9yZWdzKSB7CiAJCXJldCA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuaAppbmRleCBiZWE1YjgyLi5lMzVlMjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmgKQEAgLTIwOCwxNCArMjA4LDE0IEBACiAvKiBGcmFtZSBzdGF0dXMgZmllbGQgKi8KIC8qIFJlY2VpdmUgc2lkZSAqLwogI2RlZmluZSBGUkFNRV9PSyAgICAgICAgICAgICAgIDB4MDAwMDAwMDAgLyogRnJhbWUgdHJhbm1pdHRlZCBvciByZWNlaXZlZCBPSyAqLwotI2RlZmluZSBGUkFNRV9FUlJPUiAgICAgICAgICAgIDB4ODAwMDAwMDAgLyogRXJyb3Igb2NjdXJlZCBvbiBmcmFtZSAqLworI2RlZmluZSBGUkFNRV9FUlJPUiAgICAgICAgICAgIDB4ODAwMDAwMDAgLyogRXJyb3Igb2NjdXJyZWQgb24gZnJhbWUgKi8KICNkZWZpbmUgU1RBUlRfRlJBTUVfTE9TVCAgICAgICAweDQwMDAwMDAwIC8qIFNUQVJUX0ZSQU1FX0xPU1QgKi8KICNkZWZpbmUgRU5EX0ZSQU1FX0xPU1QgICAgICAgICAweDIwMDAwMDAwIC8qIEVORF9GUkFNRV9MT1NUICovCiAjZGVmaW5lIFJYX0VSX05PTk9DVCAgICAgICAgICAgMHgxMDAwMDAwMCAvKiBSeCBOb24gT2N0ZXQgQWxpZ25lZCBQYWNrZXQgKi8KICNkZWZpbmUgUlhfRVJfQklUU1RVRkYgICAgICAgICAweDA4MDAwMDAwIC8qIEZyYW1lIEFib3J0ZWQgLS1SZWNlaXZlZCBwYWNrZXQKIAkJCQkJICAgICB3aXRoIGJpdCBzdHVmZiBlcnJvciAqLwogI2RlZmluZSBSWF9FUl9DUkMgICAgICAgICAgICAgIDB4MDQwMDAwMDAgLyogUmVjZWl2ZWQgcGFja2V0IHdpdGggQ1JDIGVycm9yICovCi0jZGVmaW5lIFJYX0VSX09WRVJVTiAgICAgICAgICAgMHgwMjAwMDAwMCAvKiBPdmVyLXJ1biBvY2N1cmVkIG9uIHJlY2VwdGlvbiAqLworI2RlZmluZSBSWF9FUl9PVkVSVU4gICAgICAgICAgIDB4MDIwMDAwMDAgLyogT3Zlci1ydW4gb2NjdXJyZWQgb24gcmVjZXB0aW9uICovCiAjZGVmaW5lIFJYX0VSX1BJRCAgICAgICAgICAgICAgMHgwMTAwMDAwMCAvKiBXcm9uZyBQSUQgcmVjZWl2ZWQgKi8KIC8qIFRyYW5taXQgc2lkZSAqLwogI2RlZmluZSBUWF9FUl9OQUsgICAgICAgICAgICAgIDB4MDA4MDAwMDAgLyogUmVjZWl2ZWQgTkFLIGhhbmRzaGFrZSAqLwpAQCAtMzc5LDcgKzM3OSw3IEBACiAjZGVmaW5lIFRfTFNQICAgICAgICAgMHgwMTAwMDAwMCAgICAgICAgIC8qIExvdy1zcGVlZCB0cmFuc2FjdGlvbiAqLwogI2RlZmluZSBUX1BJRCAgICAgICAgIDB4MDBjMDAwMDAgICAgICAgICAvKiBwYWNrZXQgaWQgKi8KICNkZWZpbmUgVF9OQUsgICAgICAgICAweDAwMTAwMDAwICAgICAgICAgLyogTm8gYWNrLiAqLwotI2RlZmluZSBUX1NUQUwgICAgICAgIDB4MDAwODAwMDAgICAgICAgICAvKiBTdGFsbCByZWNpZXZlZCAqLworI2RlZmluZSBUX1NUQUwgICAgICAgIDB4MDAwODAwMDAgICAgICAgICAvKiBTdGFsbCByZWNlaXZlZCAqLwogI2RlZmluZSBUX1RPICAgICAgICAgIDB4MDAwNDAwMDAgICAgICAgICAvKiB0aW1lIG91dCAqLwogI2RlZmluZSBUX1VOICAgICAgICAgIDB4MDAwMjAwMDAgICAgICAgICAvKiB1bmRlcnJ1biAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VkY19jb3JlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VkY19jb3JlLmMKaW5kZXggOTEyY2I4ZS4uMDc0OTljMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91ZGNfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdWRjX2NvcmUuYwpAQCAtNDY0LDcgKzQ2NCw3IEBACiAKIAltYXggPSBsZTE2X3RvX2NwdShkZXNjLT53TWF4UGFja2V0U2l6ZSk7CiAKLQkvKiBEaXNhYmxlIGF1dG9tYXRpYyB6bHAgZ2VuZXJhdGlvbi4gIERyaXZlciBpcyByZXBvbnNpYmxlIHRvIGluZGljYXRlCisJLyogRGlzYWJsZSBhdXRvbWF0aWMgemxwIGdlbmVyYXRpb24uICBEcml2ZXIgaXMgcmVzcG9uc2libGUgdG8gaW5kaWNhdGUKIAkgKiBleHBsaWNpdGx5IHRocm91Z2ggcmVxLT5yZXEuemVyby4gIFRoaXMgaXMgbmVlZGVkIHRvIGVuYWJsZSBtdWx0aS10ZAogCSAqIHJlcXVlc3QuICovCiAJemx0ID0gMTsKQEAgLTY0OCw3ICs2NDgsNyBAQAogCQkJfCBFUF9RVUVVRV9IRUFEX1NUQVRVU19IQUxUKSk7CiAJZFFILT5zaXplX2lvY19pbnRfc3RzICY9IHRlbXA7CiAKLQkvKiBFbnN1cmUgdGhhdCB1cGRhdGVzIHRvIHRoZSBRSCB3aWxsIG9jY3VyZSBiZWZvcmUgcHJpbWluZy4gKi8KKwkvKiBFbnN1cmUgdGhhdCB1cGRhdGVzIHRvIHRoZSBRSCB3aWxsIG9jY3VyIGJlZm9yZSBwcmltaW5nLiAqLwogCXdtYigpOwogCiAJLyogUHJpbWUgZW5kcG9pbnQgYnkgd3JpdGluZyAxIHRvIEVORFBUUFJJTUUgKi8KQEAgLTE0NTksNyArMTQ1OSw3IEBACiAJCQkJc3RhdHVzID0gLUVJTFNFUTsKIAkJCQlicmVhazsKIAkJCX0gZWxzZQotCQkJCUVSUigiVW5rbm93biBlcnJvciBoYXMgb2NjdXJlZCAoMHgleCkhXG4iLAorCQkJCUVSUigiVW5rbm93biBlcnJvciBoYXMgb2NjdXJyZWQgKDB4JXgpIVxuIiwKIAkJCQkJZXJyb3JzKTsKIAogCQl9IGVsc2UgaWYgKGxlMzJfdG9fY3B1KGN1cnJfdGQtPnNpemVfaW9jX3N0cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuaAppbmRleCAyMGFlY2VlLi5lODhjY2U1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5oCkBAIC0xNSw3ICsxNSw3IEBACiAJdTggcmVzMVsyNTZdOwogCXUxNiBjYXBsZW5ndGg7CQkvKiBDYXBhYmlsaXR5IFJlZ2lzdGVyIExlbmd0aCAqLwogCXUxNiBoY2l2ZXJzaW9uOwkJLyogSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBWZXJzaW9uICovCi0JdTMyIGhjc3BhcmFtczsJCS8qIEhvc3QgQ29udHJvbGxlciBTdHJ1Y3R1YWwgUGFyYW1ldGVycyAqLworCXUzMiBoY3NwYXJhbXM7CQkvKiBIb3N0IENvbnRyb2xsZXIgU3RydWN0dXJhbCBQYXJhbWV0ZXJzICovCiAJdTMyIGhjY3BhcmFtczsJCS8qIEhvc3QgQ29udHJvbGxlciBDYXBhYmlsaXR5IFBhcmFtZXRlcnMgKi8KIAl1OCByZXMyWzIwXTsKIAl1MzIgZGNpdmVyc2lvbjsJCS8qIERldmljZSBDb250cm9sbGVyIEludGVyZmFjZSBWZXJzaW9uICovCkBAIC01Miw3ICs1Miw3IEBACiAJdTggcmVzMVsyNTZdOwogCXUxNiBjYXBsZW5ndGg7CQkvKiBDYXBhYmlsaXR5IFJlZ2lzdGVyIExlbmd0aCAqLwogCXUxNiBoY2l2ZXJzaW9uOwkJLyogSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBWZXJzaW9uICovCi0JdTMyIGhjc3BhcmFtczsJCS8qIEhvc3QgQ29udHJvbGxlciBTdHJ1Y3R1YWwgUGFyYW1ldGVycyAqLworCXUzMiBoY3NwYXJhbXM7CQkvKiBIb3N0IENvbnRyb2xsZXIgU3RydWN0dXJhbCBQYXJhbWV0ZXJzICovCiAJdTMyIGhjY3BhcmFtczsJCS8qIEhvc3QgQ29udHJvbGxlciBDYXBhYmlsaXR5IFBhcmFtZXRlcnMgKi8KIAl1OCByZXMyWzIwXTsKIAl1MzIgZGNpdmVyc2lvbjsJCS8qIERldmljZSBDb250cm9sbGVyIEludGVyZmFjZSBWZXJzaW9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCmluZGV4IDBhYjdlMTQuLjQ3Yjg2YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCkBAIC02Nyw3ICs2Nyw3IEBACiBtb2R1bGVfcGFyYW0oaWQsIGNoYXJwLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yIHRoZSBVU0IgTUlESSBHYWRnZXQgYWRhcHRlci4iKTsKIAotLyogU29tZSBzeXN0ZW1zIHdpbGwgd2FudCBkaWZmZXJlbnQgcHJvZHVjdCBpZGVudGlmZXJzIHB1Ymxpc2hlZCBpbiB0aGUKKy8qIFNvbWUgc3lzdGVtcyB3aWxsIHdhbnQgZGlmZmVyZW50IHByb2R1Y3QgaWRlbnRpZmllcnMgcHVibGlzaGVkIGluIHRoZQogICogZGV2aWNlIGRlc2NyaXB0b3IsIGVpdGhlciBudW1iZXJzIG9yIHN0cmluZ3Mgb3IgYm90aC4gIFRoZXNlIHN0cmluZwogICogcGFyYW1ldGVycyBhcmUgaW4gVVRGLTggKHN1cGVyc2V0IG9mIEFTQ0lJJ3MgNyBiaXQgY2hhcmFjdGVycykuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKaW5kZXggM2VkNzNmNC4uYTAxMzgzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKQEAgLTM4Niw4ICszODYsMTAgQEAKIAogCS8qIGhhbHQgYW55IGVuZHBvaW50IGJ5IGRvaW5nIGEgIndyb25nIGRpcmVjdGlvbiIgaS9vIGNhbGwgKi8KIAlpZiAodXNiX2VuZHBvaW50X2Rpcl9pbigmZGF0YS0+ZGVzYykpIHsKLQkJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoJmRhdGEtPmRlc2MpKQorCQlpZiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYygmZGF0YS0+ZGVzYykpIHsKKwkJCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCQlEQkcgKGRhdGEtPmRldiwgIiVzIGhhbHRcbiIsIGRhdGEtPm5hbWUpOwogCQlzcGluX2xvY2tfaXJxICgmZGF0YS0+ZGV2LT5sb2NrKTsKIAkJaWYgKGxpa2VseSAoZGF0YS0+ZXAgIT0gTlVMTCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGFuZ3dlbGxfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGFuZ3dlbGxfdWRjLmMKaW5kZXggMWVjYThiNC4uOWNlZTg4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xhbmd3ZWxsX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sYW5nd2VsbF91ZGMuYwpAQCAtNjQyLDcgKzY0Miw3IEBACiAJZHFoLT5kdGRfc3RhdHVzICY9IGR0ZF9zdGF0dXM7CiAJZGV2X3ZkYmcoJmRldi0+cGRldi0+ZGV2LCAiZHFoLT5kdGRfc3RhdHVzID0gMHgleFxuIiwgZHFoLT5kdGRfc3RhdHVzKTsKIAotCS8qIGVuc3VyZSB0aGF0IHVwZGF0ZXMgdG8gdGhlIGRRSCB3aWxsIG9jY3VyZSBiZWZvcmUgcHJpbWluZyAqLworCS8qIGVuc3VyZSB0aGF0IHVwZGF0ZXMgdG8gdGhlIGRRSCB3aWxsIG9jY3VyIGJlZm9yZSBwcmltaW5nICovCiAJd21iKCk7CiAKIAkvKiB3cml0ZSAxIHRvIGVuZHB0cHJpbWUgcmVnaXN0ZXIgdG8gUFJJTUUgZW5kcG9pbnQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9tdl91ZGNfY29yZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L212X3VkY19jb3JlLmMKaW5kZXggZDU0NjhhNy4uYjYyYjI2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L212X3VkY19jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L212X3VkY19jb3JlLmMKQEAgLTMyNSw3ICszMjUsNyBAQAogCiAJCQkvKgogCQkJICogRW5zdXJlIHRoYXQgdXBkYXRlcyB0byB0aGUgUUggd2lsbAotCQkJICogb2NjdXJlIGJlZm9yZSBwcmltaW5nLgorCQkJICogb2NjdXIgYmVmb3JlIHByaW1pbmcuCiAJCQkgKi8KIAkJCXdtYigpOwogCkBAIC0zMzgsNyArMzM4LDcgQEAKIAkJCSYgRVBfUVVFVUVfSEVBRF9ORVhUX1BPSU5URVJfTUFTSzs7CiAJCWRxaC0+c2l6ZV9pb2NfaW50X3N0cyA9IDA7CiAKLQkJLyogRW5zdXJlIHRoYXQgdXBkYXRlcyB0byB0aGUgUUggd2lsbCBvY2N1cmUgYmVmb3JlIHByaW1pbmcuICovCisJCS8qIEVuc3VyZSB0aGF0IHVwZGF0ZXMgdG8gdGhlIFFIIHdpbGwgb2NjdXIgYmVmb3JlIHByaW1pbmcuICovCiAJCXdtYigpOwogCiAJCS8qIFByaW1lIHRoZSBFbmRwb2ludCAqLwpAQCAtMTg0NSw3ICsxODQ1LDcgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KIAotCS8qIENsZWFyIGFsbCB0aGUgaW50ZXJydXB0cyBvY2N1cmVkICovCisJLyogQ2xlYXIgYWxsIHRoZSBpbnRlcnJ1cHRzIG9jY3VycmVkICovCiAJd3JpdGVsKHN0YXR1cywgJnVkYy0+b3BfcmVncy0+dXNic3RzKTsKIAogCWlmIChzdGF0dXMgJiBVU0JTVFNfRVJSKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKaW5kZXggZDA5MTU1Yi4uMjQ2OTZmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCkBAIC0xMTcsNyArMTE3LDcgQEAKIAogLyogZW5hYmxlX3N1c3BlbmQgLS0gV2hlbiBlbmFibGVkLCB0aGUgZHJpdmVyIHdpbGwgcmVzcG9uZCB0bwogICogVVNCIHN1c3BlbmQgcmVxdWVzdHMgYnkgcG93ZXJpbmcgZG93biB0aGUgTkVUMjI4MC4gIE90aGVyd2lzZSwKLSAqIFVTQiBzdXNwZW5kIHJlcXVlc3RzIHdpbGwgYmUgaWdub3JlZC4gIFRoaXMgaXMgYWNjZXB0aWJsZSBmb3IKKyAqIFVTQiBzdXNwZW5kIHJlcXVlc3RzIHdpbGwgYmUgaWdub3JlZC4gIFRoaXMgaXMgYWNjZXB0YWJsZSBmb3IKICAqIHNlbGYtcG93ZXJlZCBkZXZpY2VzCiAgKi8KIHN0YXRpYyBpbnQgZW5hYmxlX3N1c3BlbmQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L25va2lhLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbm9raWEuYwppbmRleCBiNTM2NGY5ZC4uNTVjYTYzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L25va2lhLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25va2lhLmMKQEAgLTIwMyw3ICsyMDMsNyBAQAogCQlnb3RvIGVycl91c2I7CiAJfQogCi0JLyogZmluYWx5IHJlZ2lzdGVyIHRoZSBjb25maWd1cmF0aW9uICovCisJLyogZmluYWxseSByZWdpc3RlciB0aGUgY29uZmlndXJhdGlvbiAqLwogCXN0YXR1cyA9IHVzYl9hZGRfY29uZmlnKGNkZXYsICZub2tpYV9jb25maWdfNTAwbWFfZHJpdmVyLAogCQkJbm9raWFfYmluZF9jb25maWcpOwogCWlmIChzdGF0dXMgPCAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3BjaF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wY2hfdWRjLmMKaW5kZXggM2U0YjM1ZS4uNjhkYmNjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3BjaF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcGNoX3VkYy5jCkBAIC0xNjA4LDcgKzE2MDgsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoIWRldi0+ZHJpdmVyIHx8IChkZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikpCiAJCXJldHVybiAtRVNIVVRET1dOOwotCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+ZGV2LT5sb2NrLCBpZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGlmbGFncyk7CiAJLyogbWFwIHRoZSBidWZmZXIgZm9yIGRtYSAqLwogCWlmICh1c2JyZXEtPmxlbmd0aCAmJgogCSAgICAoKHVzYnJlcS0+ZG1hID09IERNQV9BRERSX0lOVkFMSUQpIHx8ICF1c2JyZXEtPmRtYSkpIHsKQEAgLTE2MjUsOCArMTYyNSwxMCBAQAogCQkJCQkJCSAgICAgRE1BX0ZST01fREVWSUNFKTsKIAkJfSBlbHNlIHsKIAkJCXJlcS0+YnVmID0ga3phbGxvYyh1c2JyZXEtPmxlbmd0aCwgR0ZQX0FUT01JQyk7Ci0JCQlpZiAoIXJlcS0+YnVmKQotCQkJCXJldHVybiAtRU5PTUVNOworCQkJaWYgKCFyZXEtPmJ1ZikgeworCQkJCXJldHZhbCA9IC1FTk9NRU07CisJCQkJZ290byBwcm9iZV9lbmQ7CisJCQl9CiAJCQlpZiAoZXAtPmluKSB7CiAJCQkJbWVtY3B5KHJlcS0+YnVmLCB1c2JyZXEtPmJ1ZiwgdXNicmVxLT5sZW5ndGgpOwogCQkJCXJlcS0+ZG1hID0gZG1hX21hcF9zaW5nbGUoJmRldi0+cGRldi0+ZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKaW5kZXggMTJmZjZjZi4uYzNmMmJkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCkBAIC0xMjYsNyArMTI2LDcgQEAKICNkZWZpbmUgUFJJTlRFUl9WRU5ET1JfTlVNCTB4MDUyNQkJLyogTmV0Q2hpcCAqLwogI2RlZmluZSBQUklOVEVSX1BST0RVQ1RfTlVNCTB4YTRhOAkJLyogTGludXgtVVNCIFByaW50ZXIgR2FkZ2V0ICovCiAKLS8qIFNvbWUgc3lzdGVtcyB3aWxsIHdhbnQgZGlmZmVyZW50IHByb2R1Y3QgaWRlbnRpZmVycyBwdWJsaXNoZWQgaW4gdGhlCisvKiBTb21lIHN5c3RlbXMgd2lsbCB3YW50IGRpZmZlcmVudCBwcm9kdWN0IGlkZW50aWZpZXJzIHB1Ymxpc2hlZCBpbiB0aGUKICAqIGRldmljZSBkZXNjcmlwdG9yLCBlaXRoZXIgbnVtYmVycyBvciBzdHJpbmdzIG9yIGJvdGguICBUaGVzZSBzdHJpbmcKICAqIHBhcmFtZXRlcnMgYXJlIGluIFVURi04IChzdXBlcnNldCBvZiBBU0NJSSdzIDcgYml0IGNoYXJhY3RlcnMpLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYwppbmRleCAyZWZkNjczLi43OGEzOWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMKQEAgLTYwMiw3ICs2MDIsNyBAQAogLyoqCiAgKiBpbmNfZXBfc3RhdHNfYnl0ZXMgLSBVcGRhdGUgZXAgc3RhdHMgY291bnRzCiAgKiBAZXA6IHBoeXNpY2FsIGVuZHBvaW50Ci0gKiBAY291bnQ6IGJ5dGVzIHRyYW5zZmVyZWQgb24gZW5kcG9pbnQKKyAqIEBjb3VudDogYnl0ZXMgdHJhbnNmZXJyZWQgb24gZW5kcG9pbnQKICAqIEBpc19pbjogZXAgZGlyZWN0aW9uIChVU0JfRElSX0lOIG9yIDApCiAgKi8KIHN0YXRpYyB2b2lkIGluY19lcF9zdGF0c19ieXRlcyhzdHJ1Y3QgcHhhX2VwICplcCwgaW50IGNvdW50LCBpbnQgaXNfaW4pCkBAIC04NzcsNyArODc3LDcgQEAKICAqIElmIHRoZXJlIGlzIGxlc3Mgc3BhY2UgaW4gcmVxdWVzdCB0aGFuIGJ5dGVzIHJlY2VpdmVkIGluIE9VVCBlbmRwb2ludCwKICAqIGJ5dGVzIGFyZSBsZWZ0IGluIHRoZSBPVVQgZW5kcG9pbnQuCiAgKgotICogUmV0dXJucyBob3cgbWFueSBieXRlcyB3ZXJlIGFjdHVhbGx5IHRyYW5zZmVyZWQKKyAqIFJldHVybnMgaG93IG1hbnkgYnl0ZXMgd2VyZSBhY3R1YWxseSB0cmFuc2ZlcnJlZAogICovCiBzdGF0aWMgaW50IHJlYWRfcGFja2V0KHN0cnVjdCBweGFfZXAgKmVwLCBzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QgKnJlcSkKIHsKQEAgLTkxNCw3ICs5MTQsNyBAQAogICogZW5kcG9pbnQuIElmIHRoZXJlIGFyZSBubyBieXRlcyB0byB0cmFuc2ZlciwgZG9lc24ndCB3cml0ZSBhbnl0aGluZwogICogdG8gcGh5c2ljYWwgZW5kcG9pbnQuCiAgKgotICogUmV0dXJucyBob3cgbWFueSBieXRlcyB3ZXJlIGFjdHVhbGx5IHRyYW5zZmVyZWQuCisgKiBSZXR1cm5zIGhvdyBtYW55IGJ5dGVzIHdlcmUgYWN0dWFsbHkgdHJhbnNmZXJyZWQuCiAgKi8KIHN0YXRpYyBpbnQgd3JpdGVfcGFja2V0KHN0cnVjdCBweGFfZXAgKmVwLCBzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QgKnJlcSwKIAkJCXVuc2lnbmVkIGludCBtYXgpCkBAIC05OTEsNyArOTkxLDcgQEAKICAqIGNhbGxlciBndWFyYW50ZWVzIGF0IGxlYXN0IG9uZSBwYWNrZXQgYnVmZmVyIGlzIHJlYWR5IChvciBhIHpscCkuCiAgKiBEb2Vzbid0IGNvbXBsZXRlIHRoZSByZXF1ZXN0LCB0aGF0J3MgdGhlIGNhbGxlcidzIGpvYgogICoKLSAqIFJldHVybnMgMSBpZiByZXF1ZXN0IGZ1bGx5IHRyYW5zZmVyZWQsIDAgaWYgcGFydGlhbCB0cmFuc2ZlcgorICogUmV0dXJucyAxIGlmIHJlcXVlc3QgZnVsbHkgdHJhbnNmZXJyZWQsIDAgaWYgcGFydGlhbCB0cmFuc2ZlcgogICovCiBzdGF0aWMgaW50IHdyaXRlX2ZpZm8oc3RydWN0IHB4YV9lcCAqZXAsIHN0cnVjdCBweGEyN3hfcmVxdWVzdCAqcmVxKQogewpAQCAtMTA5NCw3ICsxMDk0LDcgQEAKICAqIFNlbmRzIGEgcmVxdWVzdCAob3IgYSBwYXJ0IG9mIHRoZSByZXF1ZXN0KSB0byB0aGUgY29udHJvbCBlbmRwb2ludCAoZXAwIGluKS4KICAqIElmIHRoZSByZXF1ZXN0IGRvZXNuJ3QgZml0LCB0aGUgcmVtYWluaW5nIHBhcnQgd2lsbCBiZSBzZW50IGZyb20gaXJxLgogICogVGhlIHJlcXVlc3QgaXMgY29uc2lkZXJlZCBmdWxseSB3cml0dGVuIG9ubHkgaWYgZWl0aGVyIDoKLSAqICAgLSBsYXN0IHdyaXRlIHRyYW5zZmVyZWQgYWxsIHJlbWFpbmluZyBieXRlcywgYnV0IGZpZm8gd2FzIG5vdCBmdWxseSBmaWxsZWQKKyAqICAgLSBsYXN0IHdyaXRlIHRyYW5zZmVycmVkIGFsbCByZW1haW5pbmcgYnl0ZXMsIGJ1dCBmaWZvIHdhcyBub3QgZnVsbHkgZmlsbGVkCiAgKiAgIC0gbGFzdCB3cml0ZSB3YXMgYSAwIGxlbmd0aCB3cml0ZQogICoKICAqIFJldHVybnMgMSBpZiByZXF1ZXN0IGZ1bGx5IHdyaXR0ZW4sIDAgaWYgcmVxdWVzdCBvbmx5IHBhcnRpYWxseSBzZW50CkBAIC0xNTQ4LDcgKzE1NDgsNyBAQAogICogcHhhX3VkY193YWtldXAgLSBGb3JjZSB1ZGMgZGV2aWNlIG91dCBvZiBzdXNwZW5kCiAgKiBAX2dhZGdldDogdXNiIGdhZGdldAogICoKLSAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsbCwgZXJyb3IgY29kZSBvdGhlcndpc2UKKyAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBlcnJvciBjb2RlIG90aGVyd2lzZQogICovCiBzdGF0aWMgaW50IHB4YV91ZGNfd2FrZXVwKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3I4YTY2NTk3LXVkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3I4YTY2NTk3LXVkYy5jCmluZGV4IDAxNTExODUuLjZkY2MxZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9yOGE2NjU5Ny11ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcjhhNjY1OTctdWRjLmMKQEAgLTEwODMsNyArMTA4Myw5IEBACiAKIAlpZiAoZHZzcSA9PSBEU19ERkxUKSB7CiAJCS8qIGJ1cyByZXNldCAqLworCQlzcGluX3VubG9jaygmcjhhNjY1OTctPmxvY2spOwogCQlyOGE2NjU5Ny0+ZHJpdmVyLT5kaXNjb25uZWN0KCZyOGE2NjU5Ny0+Z2FkZ2V0KTsKKwkJc3Bpbl9sb2NrKCZyOGE2NjU5Ny0+bG9jayk7CiAJCXI4YTY2NTk3X3VwZGF0ZV91c2Jfc3BlZWQocjhhNjY1OTcpOwogCX0KIAlpZiAocjhhNjY1OTctPm9sZF9kdnNxID09IERTX0NORkcgJiYgZHZzcSAhPSBEU19DTkZHKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jCmluZGV4IGVmODI1YzMuLjA5MTI2NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHNvdGcuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzb3RnLmMKQEAgLTQxLDggKzQxLDggQEAKIC8qIEVQMF9NUFNfTElNSVQKICAqCiAgKiBVbmZvcnR1bmF0ZWx5IHRoZXJlIHNlZW1zIHRvIGJlIGEgbGltaXQgb2YgdGhlIGFtb3VudCBvZiBkYXRhIHRoYXQgY2FuCi0gKiBiZSB0cmFuc2ZlcmVkIGJ5IElOIHRyYW5zYWN0aW9ucyBvbiBFUDAuIFRoaXMgaXMgZWl0aGVyIDEyNyBieXRlcyBvciAzCi0gKiBwYWNrZXRzICh3aGljaCBwcmFjdGlhbGx5IG1lYW5zIDEgcGFja2V0IGFuZCA2MyBieXRlcyBvZiBkYXRhKSB3aGVuIHRoZQorICogYmUgdHJhbnNmZXJyZWQgYnkgSU4gdHJhbnNhY3Rpb25zIG9uIEVQMC4gVGhpcyBpcyBlaXRoZXIgMTI3IGJ5dGVzIG9yIDMKKyAqIHBhY2tldHMgKHdoaWNoIHByYWN0aWNhbGx5IG1lYW5zIDEgcGFja2V0IGFuZCA2MyBieXRlcyBvZiBkYXRhKSB3aGVuIHRoZQogICogTVBTIGlzIHNldCB0byA2NC4KICAqCiAgKiBUaGlzIG1lYW5zIGlmIHdlIGFyZSB3YW50aW5nIHRvIG1vdmUgPjEyNyBieXRlcyBvZiBkYXRhLCB3ZSBuZWVkIHRvCkBAIC03ODMsNyArNzgzLDcgQEAKIAkJICAgICAgIGhzb3RnLT5yZWdzICsgUzNDX0RJRVBJTlQoaW5kZXgpKTsKIAogCS8qIE5vdGUsIHRyeWluZyB0byBjbGVhciB0aGUgTkFLIGhlcmUgY2F1c2VzIHByb2JsZW1zIHdpdGggdHJhbnNtaXQKLQkgKiBvbiB0aGUgUzNDNjQwMCBlbmRpbmcgdXAgd2l0aCB0aGUgVFhGSUZPIGJlY29tbWluZyBmdWxsLiAqLworCSAqIG9uIHRoZSBTM0M2NDAwIGVuZGluZyB1cCB3aXRoIHRoZSBUWEZJRk8gYmVjb21pbmcgZnVsbC4gKi8KIAogCS8qIGNoZWNrIGVwIGlzIGVuYWJsZWQgKi8KIAlpZiAoIShyZWFkbChoc290Zy0+cmVncyArIGVwY3RybF9yZWcpICYgUzNDX0R4RVBDVExfRVBFbmEpKQpAQCAtMTE3NiwxMCArMTE3NiwxMCBAQAogCQl3cml0ZWwoY3RybCwgaHNvdGctPnJlZ3MgKyByZWcpOwogCiAJCWRldl9kYmcoaHNvdGctPmRldiwKLQkJCSJ3cml0ZW4gRHhFUENUTD0weCUwOHggdG8gJTA4eCAoRHhFUENUTD0weCUwOHgpXG4iLAorCQkJIndyaXR0ZW4gRHhFUENUTD0weCUwOHggdG8gJTA4eCAoRHhFUENUTD0weCUwOHgpXG4iLAogCQkJY3RybCwgcmVnLCByZWFkbChoc290Zy0+cmVncyArIHJlZykpOwogCi0JCS8qIGRvbid0IGJlbGl2ZSB3ZSBuZWVkIHRvIGFueXRoaW5nIG1vcmUgdG8gZ2V0IHRoZSBFUAorCQkvKiBkb24ndCBiZWxpZXZlIHdlIG5lZWQgdG8gYW55dGhpbmcgbW9yZSB0byBnZXQgdGhlIEVQCiAJCSAqIHRvIHJlcGx5IHdpdGggYSBTVEFMTCBwYWNrZXQgKi8KIAl9CiB9CkBAIC0xNDE2LDcgKzE0MTYsNyBAQAogICogdHJhbnNhY3Rpb24uCiAgKgogICogTm90ZSwgc2luY2Ugd2UgZG9uJ3Qgd3JpdGUgYW55IGRhdGEgdG8gdGhlIFR4RklGTywgdGhlbiBpdCBpcwotICogY3VycmVudGx5IGJlbGl2ZWQgdGhhdCB3ZSBkbyBub3QgbmVlZCB0byB3YWl0IGZvciBhbnkgc3BhY2UgaW4KKyAqIGN1cnJlbnRseSBiZWxpZXZlZCB0aGF0IHdlIGRvIG5vdCBuZWVkIHRvIHdhaXQgZm9yIGFueSBzcGFjZSBpbgogICogdGhlIFR4RklGTy4KICAqLwogc3RhdGljIHZvaWQgczNjX2hzb3RnX3NlbmRfemxwKHN0cnVjdCBzM2NfaHNvdGcgKmhzb3RnLApAQCAtMTU0MCw3ICsxNTQwLDcgQEAKICAqIHRoYXQgcmVxdWlyZXMgcHJvY2Vzc2luZywgc28gZmluZCBvdXQgd2hhdCBpcyBpbiB0aGVyZSBhbmQgZG8gdGhlCiAgKiBhcHByb3ByaWF0ZSByZWFkLgogICoKLSAqIFRoZSBSWEZJRk8gaXMgYSB0cnVlIEZJRk8sIHRoZSBwYWNrZXRzIGNvbW1pbmcgb3V0IGFyZSBzdGlsbCBpbiBwYWNrZXQKKyAqIFRoZSBSWEZJRk8gaXMgYSB0cnVlIEZJRk8sIHRoZSBwYWNrZXRzIGNvbWluZyBvdXQgYXJlIHN0aWxsIGluIHBhY2tldAogICogY2h1bmtzLCBzbyBpZiB5b3UgaGF2ZSB4IHBhY2tldHMgcmVjZWl2ZWQgb24gYW4gZW5kcG9pbnQgeW91J2xsIGdldCB4CiAgKiBGSUZPIGV2ZW50cyBkZWxpdmVyZWQsIGVhY2ggd2l0aCBhIHBhY2tldCdzIHdvcnRoIG9mIGRhdGEgaW4gaXQuCiAgKgpAQCAtMjE4OCw3ICsyMTg4LDcgQEAKIAogCS8qIHRoZXNlIG5leHQgdHdvIHNlZW0gdG8gY3JvcC11cCBvY2Nhc2lvbmFsbHkgY2F1c2luZyB0aGUgY29yZQogCSAqIHRvIHNodXRkb3duIHRoZSBVU0IgdHJhbnNmZXIsIHNvIHRyeSBjbGVhcmluZyB0aGVtIGFuZCBsb2dnaW5nCi0JICogdGhlIG9jY3VyZW5jZS4gKi8KKwkgKiB0aGUgb2NjdXJyZW5jZS4gKi8KIAogCWlmIChnaW50c3RzICYgUzNDX0dJTlRTVFNfR09VVE5ha0VmZikgewogCQlkZXZfaW5mbyhoc290Zy0+ZGV2LCAiR09VVE5ha0VmZiB0cmlnZ2VyZWRcbiIpOwpAQCAtMjQ2OSw3ICsyNDY5LDcgQEAKIAkucXVldWUJCT0gczNjX2hzb3RnX2VwX3F1ZXVlLAogCS5kZXF1ZXVlCT0gczNjX2hzb3RnX2VwX2RlcXVldWUsCiAJLnNldF9oYWx0CT0gczNjX2hzb3RnX2VwX3NldGhhbHQsCi0JLyogbm90ZSwgZG9uJ3QgYmVsaXZlIHdlIGhhdmUgYW55IGNhbGwgZm9yIHRoZSBmaWZvIHJvdXRpbmVzICovCisJLyogbm90ZSwgZG9uJ3QgYmVsaWV2ZSB3ZSBoYXZlIGFueSBjYWxsIGZvciB0aGUgZmlmbyByb3V0aW5lcyAqLwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKaW5kZXggOTQ4M2FjZC4uZTBlMDc4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwpAQCAtNDAyLDcgKzQwMiw3IEBACiAJZGVwZW5kcyBvbiBVU0JfRkhDSV9IQ0QgJiYgREVCVUdfRlMKIAloZWxwCiAJICBTYXkgInkiIHRvIHNlZSBzb21lIEZIQ0kgZGVidWcgaW5mb3JtYXRpb24gYW5kIHN0YXRpc3RpY3MKLQkgIHRocm91Z2h0IGRlYnVnZnMuCisJICB0aHJvdWdoIGRlYnVnZnMuCiAKIGNvbmZpZyBVU0JfVTEzMl9IQ0QKIAl0cmlzdGF0ZSAiRWxhbiBVMTMyIEFkYXB0ZXIgSG9zdCBDb250cm9sbGVyIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW9tYXAuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vbWFwLmMKaW5kZXggN2U0MWE5NS4uNjI3ZjNhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW9tYXAuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb21hcC5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi91bHBpLmg+CiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KIAogLyogRUhDSSBSZWdpc3RlciBTZXQgKi8KICNkZWZpbmUgRUhDSV9JTlNOUkVHMDQJCQkJCSgweEEwKQpAQCAtMTE4LDYgKzExOSw4IEBACiAJc3RydWN0IGVoY2lfaGNkCQkJCSpvbWFwX2VoY2k7CiAJaW50CQkJCQlyZXQgPSAtRU5PREVWOwogCWludAkJCQkJaXJxOworCWludAkJCQkJaTsKKwljaGFyCQkJCQlzdXBwbHlbN107CiAKIAlpZiAodXNiX2Rpc2FibGVkKCkpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTU4LDYgKzE2MSwyMyBAQAogCWhjZC0+cnNyY19sZW4gPSByZXNvdXJjZV9zaXplKHJlcyk7CiAJaGNkLT5yZWdzID0gcmVnczsKIAorCS8qIGdldCBlaGNpIHJlZ3VsYXRvciBhbmQgZW5hYmxlICovCisJZm9yIChpID0gMCA7IGkgPCBPTUFQM19IU19VU0JfUE9SVFMgOyBpKyspIHsKKwkJaWYgKHBkYXRhLT5wb3J0X21vZGVbaV0gIT0gT01BUF9FSENJX1BPUlRfTU9ERV9QSFkpIHsKKwkJCXBkYXRhLT5yZWd1bGF0b3JbaV0gPSBOVUxMOworCQkJY29udGludWU7CisJCX0KKwkJc25wcmludGYoc3VwcGx5LCBzaXplb2Yoc3VwcGx5KSwgImhzdXNiJWQiLCBpKTsKKwkJcGRhdGEtPnJlZ3VsYXRvcltpXSA9IHJlZ3VsYXRvcl9nZXQoZGV2LCBzdXBwbHkpOworCQlpZiAoSVNfRVJSKHBkYXRhLT5yZWd1bGF0b3JbaV0pKSB7CisJCQlwZGF0YS0+cmVndWxhdG9yW2ldID0gTlVMTDsKKwkJCWRldl9kYmcoZGV2LAorCQkJImZhaWxlZCB0byBnZXQgZWhjaSBwb3J0JWQgcmVndWxhdG9yXG4iLCBpKTsKKwkJfSBlbHNlIHsKKwkJCXJlZ3VsYXRvcl9lbmFibGUocGRhdGEtPnJlZ3VsYXRvcltpXSk7CisJCX0KKwl9CisKIAlyZXQgPSBvbWFwX3VzYmhzX2VuYWJsZShkZXYpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gc3RhcnQgdXNiaHMgd2l0aCBlcnIgJWRcbiIsIHJldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYwppbmRleCA5OGRlZDY2Li40MmFiZDBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMKQEAgLTEyNDcsMjQgKzEyNDcsMjcgQEAKIAogc3RhdGljIHZvaWQgc2Nhbl9hc3luYyAoc3RydWN0IGVoY2lfaGNkICplaGNpKQogeworCWJvb2wJCQlzdG9wcGVkOwogCXN0cnVjdCBlaGNpX3FoCQkqcWg7CiAJZW51bSBlaGNpX3RpbWVyX2FjdGlvbglhY3Rpb24gPSBUSU1FUl9JT19XQVRDSERPRzsKIAogCWVoY2ktPnN0YW1wID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+ZnJhbWVfaW5kZXgpOwogCXRpbWVyX2FjdGlvbl9kb25lIChlaGNpLCBUSU1FUl9BU1lOQ19TSFJJTkspOwogcmVzY2FuOgorCXN0b3BwZWQgPSAhSENfSVNfUlVOTklORyhlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUpOwogCXFoID0gZWhjaS0+YXN5bmMtPnFoX25leHQucWg7CiAJaWYgKGxpa2VseSAocWggIT0gTlVMTCkpIHsKIAkJZG8gewogCQkJLyogY2xlYW4gYW55IGZpbmlzaGVkIHdvcmsgZm9yIHRoaXMgcWggKi8KLQkJCWlmICghbGlzdF9lbXB0eSAoJnFoLT5xdGRfbGlzdCkKLQkJCQkJJiYgcWgtPnN0YW1wICE9IGVoY2ktPnN0YW1wKSB7CisJCQlpZiAoIWxpc3RfZW1wdHkoJnFoLT5xdGRfbGlzdCkgJiYgKHN0b3BwZWQgfHwKKwkJCQkJcWgtPnN0YW1wICE9IGVoY2ktPnN0YW1wKSkgewogCQkJCWludCB0ZW1wOwogCiAJCQkJLyogdW5saW5rcyBjb3VsZCBoYXBwZW4gaGVyZTsgY29tcGxldGlvbgogCQkJCSAqIHJlcG9ydGluZyBkcm9wcyB0aGUgbG9jay4gIHJlc2NhbiB1c2luZwogCQkJCSAqIHRoZSBsYXRlc3Qgc2NoZWR1bGUsIGJ1dCBkb24ndCByZXNjYW4KLQkJCQkgKiBxaHMgd2UgYWxyZWFkeSBmaW5pc2hlZCAobm8gbG9vcGluZykuCisJCQkJICogcWhzIHdlIGFscmVhZHkgZmluaXNoZWQgKG5vIGxvb3BpbmcpCisJCQkJICogdW5sZXNzIHRoZSBjb250cm9sbGVyIGlzIHN0b3BwZWQuCiAJCQkJICovCiAJCQkJcWggPSBxaF9nZXQgKHFoKTsKIAkJCQlxaC0+c3RhbXAgPSBlaGNpLT5zdGFtcDsKQEAgLTEyODUsOSArMTI4OCw5IEBACiAJCQkgKi8KIAkJCWlmIChsaXN0X2VtcHR5KCZxaC0+cXRkX2xpc3QpCiAJCQkJCSYmIHFoLT5xaF9zdGF0ZSA9PSBRSF9TVEFURV9MSU5LRUQpIHsKLQkJCQlpZiAoIWVoY2ktPnJlY2xhaW0KLQkJCQkJJiYgKChlaGNpLT5zdGFtcCAtIHFoLT5zdGFtcCkgJiAweDFmZmYpCi0JCQkJCQk+PSAoRUhDSV9TSFJJTktfRlJBTUVTICogOCkpCisJCQkJaWYgKCFlaGNpLT5yZWNsYWltICYmIChzdG9wcGVkIHx8CisJCQkJCSgoZWhjaS0+c3RhbXAgLSBxaC0+c3RhbXApICYgMHgxZmZmKQorCQkJCQkJPj0gRUhDSV9TSFJJTktfRlJBTUVTICogOCkpCiAJCQkJCXN0YXJ0X3VubGlua19hc3luYyhlaGNpLCBxaCk7CiAJCQkJZWxzZQogCQkJCQlhY3Rpb24gPSBUSU1FUl9BU1lOQ19TSFJJTks7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCmluZGV4IGY4NmQzZmEuLjMzM2RkYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCkBAIC02NDQsNyArNjQ0LDcgQEAKIC8qCiAgKiBPbiBjZXJ0YWluIHBwYy00NHggU29DIHRoZXJlIGlzIGEgSFcgaXNzdWUsIHRoYXQgY291bGQgb25seSB3b3JrZWQgYXJvdW5kIHdpdGgKICAqIGV4cGxpY2l0IHN1c3BlbmQvb3BlcmF0ZSBvZiBPSENJLiBUaGlzIGZ1bmN0aW9uIGhlcmVieSBtYWtlcyBzZW5zZSBvbmx5IG9uIHRoYXQgYXJjaC4KLSAqIE90aGVyIGNvbW1vbiBiaXRzIGFyZSBkZXBlbmRhbnQgb24gaGFzX2FtY2NfdXNiMjMgcXVpcmsgZmxhZy4KKyAqIE90aGVyIGNvbW1vbiBiaXRzIGFyZSBkZXBlbmRlbnQgb24gaGFzX2FtY2NfdXNiMjMgcXVpcmsgZmxhZy4KICAqLwogI2lmZGVmIENPTkZJR180NHgKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfb2hjaV9oY2ZzKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgaW50IG9wZXJhdGlvbmFsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9maGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9maGNpLWhjZC5jCmluZGV4IGI4NGZmN2UuLjE5MjIzYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktaGNkLmMKQEAgLTQwMSw3ICs0MDEsNyBAQAogCQkvKiAxIHRkIGZybyBzZXR1cCwxIGZvciBhY2sgKi8KIAkJc2l6ZSA9IDI7CiAJY2FzZSBQSVBFX0JVTEs6Ci0JCS8qIG9uZSB0ZCBmb3IgZXZlcnkgNDA5NiBieXRlcyhjYW4gYmUgdXB0byA4aykgKi8KKwkJLyogb25lIHRkIGZvciBldmVyeSA0MDk2IGJ5dGVzKGNhbiBiZSB1cCB0byA4aykgKi8KIAkJc2l6ZSArPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLyA0MDk2OwogCQkvKiAuLi5hZGQgZm9yIGFueSByZW1haW5pbmcgYnl0ZXMuLi4gKi8KIAkJaWYgKCh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggJSA0MDk2KSAhPSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9maGNpLXRkcy5jIGIvZHJpdmVycy91c2IvaG9zdC9maGNpLXRkcy5jCmluZGV4IDM4ZmUwNTguLjBlYTU3N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS10ZHMuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktdGRzLmMKQEAgLTQwLDcgKzQwLDcgQEAKICNkZWZpbmUgVERfUlhFUgkJMHgwMDIwIC8qIFJ4IGVycm9yIG9yIG5vdCAqLwogCiAjZGVmaW5lIFREX05BSwkJMHgwMDEwIC8qIE5vIGFjay4gKi8KLSNkZWZpbmUgVERfU1RBTAkJMHgwMDA4IC8qIFN0YWxsIHJlY2lldmVkICovCisjZGVmaW5lIFREX1NUQUwJCTB4MDAwOCAvKiBTdGFsbCByZWNlaXZlZCAqLwogI2RlZmluZSBURF9UTwkJMHgwMDA0IC8qIHRpbWUgb3V0ICovCiAjZGVmaW5lIFREX1VOCQkweDAwMDIgLyogdW5kZXJydW4gKi8KICNkZWZpbmUgVERfTk8JCTB4MDAxMCAvKiBSeCBOb24gT2N0ZXQgQWxpZ25lZCBQYWNrZXQgKi8KQEAgLTI3NCw3ICsyNzQsNyBAQAogICogSXQgaXMgYWxzbyBwcmVwYXJpbmcgdGhlIFREcyBmb3IgbmV3IGZyYW1lcy4gSWYgdGhlIFR4IGludGVycnVwdHMKICAqIGFyZSBkaXNhYmxlZCwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBjYWxsIHRoYXQgcm91dGluZSB0byBnZXQKICAqIGNvbmZpcm1hdGlvbiBhYm91dCB0aGUgc3VibWl0dGVkIGZyYW1lcy4gT3RoZXJ3aXNlLCB0aGUgcm91dGluZSBpcwotICogY2FsbGVkIGZyb21lIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGR1cmluZyB0aGUgVHggaW50ZXJydXB0LgorICogY2FsbGVkIGZyb20gdGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgZHVyaW5nIHRoZSBUeCBpbnRlcnJ1cHQuCiAgKiBJbiB0aGF0IGNhc2UgdGhlIGFwcGxpY2F0aW9uIGlzIGluZm9ybWVkIGJ5IGNhbGxpbmcgdGhlIGFwcGxpY2F0aW9uCiAgKiBzcGVjaWZpYyAnZmhjaV90cmFuc2FjdGlvbl9jb25maXJtJyByb3V0aW5lCiAgKi8KQEAgLTMzNyw3ICszMzcsNyBAQAogCQkJCQlwa3QtPnN0YXR1cyA9IFVTQl9URF9SWF9FUl9OT05PQ1Q7CiAJCQkJZWxzZQogCQkJCQlmaGNpX2Vycih1c2ItPmZoY2ksICJpbGxlZ2FsIGVycm9yICIKLQkJCQkJCSAib2NjdXJlZFxuIik7CisJCQkJCQkgIm9jY3VycmVkXG4iKTsKIAkJCX0gZWxzZSBpZiAodGRfc3RhdHVzICYgVERfTkFLKQogCQkJCXBrdC0+c3RhdHVzID0gVVNCX1REX1RYX0VSX05BSzsKIAkJCWVsc2UgaWYgKHRkX3N0YXR1cyAmIFREX1RPKQpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAJCQllbHNlIGlmICh0ZF9zdGF0dXMgJiBURF9TVEFMKQogCQkJCXBrdC0+c3RhdHVzID0gVVNCX1REX1RYX0VSX1NUQUxMOwogCQkJZWxzZQotCQkJCWZoY2lfZXJyKHVzYi0+ZmhjaSwgImlsbGVnYWwgZXJyb3Igb2NjdXJlZFxuIik7CisJCQkJZmhjaV9lcnIodXNiLT5maGNpLCAiaWxsZWdhbCBlcnJvciBvY2N1cnJlZFxuIik7CiAJCX0gZWxzZSBpZiAoKGV4dHJhX2RhdGEgJiBURF9UT0tfSU4pICYmCiAJCQkJcGt0LT5sZW4gPiB0ZF9sZW5ndGggLSBDUkNfU0laRSkgewogCQkJcGt0LT5zdGF0dXMgPSBVU0JfVERfUlhfREFUQV9VTkRFUlVOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9maGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2kuaAppbmRleCA3MWMzY2FhLi5kYzY5MzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2kuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2kuaApAQCAtODIsNyArODIsNyBAQAogI2RlZmluZSBVU0JfVERfUlhfRVJfTk9OT0NUCTB4NDAwMDAwMDAgLyogVHggTm9uIE9jdGV0IEFsaWduZWQgUGFja2V0ICovCiAjZGVmaW5lIFVTQl9URF9SWF9FUl9CSVRTVFVGRgkweDIwMDAwMDAwIC8qIEZyYW1lIEFib3J0ZWQtUmVjZWl2ZWQgcGt0ICovCiAjZGVmaW5lIFVTQl9URF9SWF9FUl9DUkMJMHgxMDAwMDAwMCAvKiBDUkMgZXJyb3IgKi8KLSNkZWZpbmUgVVNCX1REX1JYX0VSX09WRVJVTgkweDA4MDAwMDAwIC8qIE92ZXIgLSBydW4gb2NjdXJlZCAqLworI2RlZmluZSBVU0JfVERfUlhfRVJfT1ZFUlVOCTB4MDgwMDAwMDAgLyogT3ZlciAtIHJ1biBvY2N1cnJlZCAqLwogI2RlZmluZSBVU0JfVERfUlhfRVJfUElECTB4MDQwMDAwMDAgLyogd3JvbmcgUElEIHJlY2VpdmVkICovCiAjZGVmaW5lIFVTQl9URF9SWF9EQVRBX1VOREVSVU4JMHgwMjAwMDAwMCAvKiBzaG9ydGVyIHRoYW4gZXhwZWN0ZWQgKi8KICNkZWZpbmUgVVNCX1REX1JYX0RBVEFfT1ZFUlVOCTB4MDEwMDAwMDAgLyogbG9uZ2VyIHRoYW4gZXhwZWN0ZWQgKi8KQEAgLTM2Myw3ICszNjMsNyBAQAogc3RydWN0IHRkIHsKIAl2b2lkICpkYXRhOwkJIC8qIGEgcG9pbnRlciB0byB0aGUgZGF0YSBidWZmZXIgKi8KIAl1bnNpZ25lZCBpbnQgbGVuOwkgLyogbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIGJlIHN1Ym1pdHRlZCAqLwotCXVuc2lnbmVkIGludCBhY3R1YWxfbGVuOyAvKiBhY3R1YWwgYnl0ZXMgdHJhbnNmZXJlZCBvbiB0aGlzIHRkICovCisJdW5zaWduZWQgaW50IGFjdHVhbF9sZW47IC8qIGFjdHVhbCBieXRlcyB0cmFuc2ZlcnJlZCBvbiB0aGlzIHRkICovCiAJZW51bSBmaGNpX3RhX3R5cGUgdHlwZTsJIC8qIHRyYW5zYWN0aW9uIHR5cGUgKi8KIAl1OCB0b2dnbGU7CQkgLyogdG9nZ2xlIGZvciBuZXh0IHRyYW5zLiB3aXRoaW4gdGhpcyBURCAqLwogCXUxNiBpc29faW5kZXg7CQkgLyogSVNPIHRyYW5zYWN0aW9uIGluZGV4ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lteDIxLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9pbXgyMS1oY2QuYwppbmRleCAyNTYyZTkyLi5hZjA1NzE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lteDIxLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaW14MjEtaGNkLmMKQEAgLTEzMjMsNyArMTMyMyw3IEBACiAgKiAoYW5kIGhlbmNlIG5vIGludGVycnVwdCBvY2N1cnMpLgogICogVGhpcyBjYXVzZXMgdGhlIHRyYW5zZmVyIGluIHF1ZXN0aW9uIHRvIGhhbmcuCiAgKiBUaGUga2x1ZGdlIGJlbG93IGNoZWNrcyBmb3IgdGhpcyBjb25kaXRpb24gYXQgZWFjaCBTT0YgYW5kIHByb2Nlc3NlcyBhbnkKLSAqIGJsb2NrZWQgRVREcyAoYWZ0ZXIgYW4gYXJiaXRhcnkgMTAgZnJhbWUgd2FpdCkKKyAqIGJsb2NrZWQgRVREcyAoYWZ0ZXIgYW4gYXJiaXRyYXJ5IDEwIGZyYW1lIHdhaXQpCiAgKgogICogV2l0aCBhIHNpbmdsZSBhY3RpdmUgdHJhbnNmZXIgdGhlIHVzYnRlc3QgdGVzdCBzdWl0ZSB3aWxsIHJ1biBmb3IgZGF5cwogICogd2l0aG91dCB0aGUga2x1ZGdlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LmggYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNnguaAppbmRleCAxMmRiOTYxLi45YTJjNDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNnguaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNnguaApAQCAtMTMsNyArMTMsNyBAQAogCiAvKiBGdWxsIHNwZWVkOiBtYXggIyBvZiBieXRlcyB0byB0cmFuc2ZlciBmb3IgYSBzaW5nbGUgdXJiCiAgICBhdCBhIHRpbWUgbXVzdCBiZSA8IDEwMjQgJiYgbXVzdCBiZSBtdWx0aXBsZSBvZiA2NC4KLSAgIDgzMiBhbGxvd3MgdHJhbnNmZXJpbmcgNGtpQiB3aXRoaW4gNSBmcmFtZXMuICovCisgICA4MzIgYWxsb3dzIHRyYW5zZmVycmluZyA0a2lCIHdpdGhpbiA1IGZyYW1lcy4gKi8KICNkZWZpbmUgTUFYX1RSQU5TRkVSX1NJWkVfRlVMTFNQRUVECTgzMgogCiAvKiBMb3cgc3BlZWQ6IHRoZXJlIGlzIG5vIHJlYXNvbiB0byBzY2hlZHVsZSBpbiB2ZXJ5IGJpZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMzYyLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMzYyLWhjZC5jCmluZGV4IDY2MmNkMDAuLmY5NzU3MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjItaGNkLmMKQEAgLTU0Niw3ICs1NDYsNyBAQAogCQkJaWYgKHVzYl9waXBlY29udHJvbCh1cmItPnBpcGUpKSB7CiAJCQkJZXAtPm5leHRwaWQgPSBVU0JfUElEX0FDSzsKIAkJCQkvKiBzYXZlIHRoZSBkYXRhIHVuZGVycnVuIGVycm9yIGNvZGUgZm9yIGxhdGVyIGFuZAotCQkJCSAqIHByb2NlZGUgd2l0aCB0aGUgc3RhdHVzIHN0YWdlCisJCQkJICogcHJvY2VlZCB3aXRoIHRoZSBzdGF0dXMgc3RhZ2UKIAkJCQkgKi8KIAkJCQl1cmItPmFjdHVhbF9sZW5ndGggKz0gUFREX0dFVF9DT1VOVChwdGQpOwogCQkJCUJVR19PTih1cmItPmFjdHVhbF9sZW5ndGggPiB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5jCmluZGV4IGY1MGU4NGEuLjdiMmU2OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMKQEAgLTI5NSw3ICsyOTUsNyBAQAogCX0KIAogCWRldl9lcnIoaGNkLT5zZWxmLmNvbnRyb2xsZXIsCi0JCQkJIiVzOiBDYW4gbm90IGFsbG9jYXRlICVsdSBieXRlcyBvZiBtZW1vcnlcbiIKKwkJCQkiJXM6IENhbm5vdCBhbGxvY2F0ZSAlenUgYnl0ZXMgb2YgbWVtb3J5XG4iCiAJCQkJIkN1cnJlbnQgbWVtb3J5IG1hcDpcbiIsCiAJCQkJX19mdW5jX18sIHF0ZC0+bGVuZ3RoKTsKIAlmb3IgKGkgPSAwOyBpIDwgQkxPQ0tTOyBpKyspIHsKQEAgLTE2MzMsNiArMTYzMyw3IEBACiAJCQlpbnRzW2ldLnFoID0gTlVMTDsKIAkJCWludHNbaV0ucXRkID0gTlVMTDsKIAorCQkJdXJiLT5zdGF0dXMgPSBzdGF0dXM7CiAJCQlpc3AxNzYwX3VyYl9kb25lKGhjZCwgdXJiKTsKIAkJCWlmIChxdGQpCiAJCQkJcGUoaGNkLCBxaCwgcXRkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdTF4eHguYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdTF4eHguYwppbmRleCAxN2E2MDQzLi45NThkOTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXUxeHh4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jCkBAIC0zMyw3ICszMyw3IEBACiAKICNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KICNkZWZpbmUgVVNCSF9FTkFCTEVfSU5JVCAoVVNCSF9FTkFCTEVfQ0UgfCBVU0JIX0VOQUJMRV9FIHwgVVNCSF9FTkFCTEVfQykKLSNlbGlmIF9fQklHX0VORElBTgorI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCiAjZGVmaW5lIFVTQkhfRU5BQkxFX0lOSVQgKFVTQkhfRU5BQkxFX0NFIHwgVVNCSF9FTkFCTEVfRSB8IFVTQkhfRU5BQkxFX0MgfCBcCiAJCQkgIFVTQkhfRU5BQkxFX0JFKQogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwppbmRleCBlNzI4ODYzLi5kNTU3MjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCkBAIC0xNjIsNyArMTYyLDcgQEAKIAkJLy8gY2FzZSBQSVBFX0lOVEVSUlVQVDoKIAkJLy8gY2FzZSBQSVBFX0JVTEs6CiAJCWRlZmF1bHQ6Ci0JCQkvKiBvbmUgVEQgZm9yIGV2ZXJ5IDQwOTYgQnl0ZXMgKGNhbiBiZSB1cHRvIDhLKSAqLworCQkJLyogb25lIFREIGZvciBldmVyeSA0MDk2IEJ5dGVzIChjYW4gYmUgdXAgdG8gOEspICovCiAJCQlzaXplICs9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAvIDQwOTY7CiAJCQkvKiAuLi4gYW5kIGZvciBhbnkgcmVtYWluaW5nIGJ5dGVzIC4uLiAqLwogCQkJaWYgKCh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggJSA0MDk2KSAhPSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAtaGNkLmMKaW5kZXggNDRlNGRlYi4uNGE3NzFmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L294dTIxMGhwLWhjZC5jCkBAIC0yODc5LDcgKzI4NzksNyBAQAogCS8qIE9rLCB3ZSBoYXZlIG1vcmUgam9iIHRvIGRvISA6KSAqLwogCiAJZm9yIChpID0gMDsgaSA8IG51bSAtIDE7IGkrKykgewotCQkvKiBHZXQgZnJlZSBtaWNybyBVUkIgcG9sbCB0aWxsIGEgZnJlZSB1cmIgaXMgcmVjaWV2ZWQgKi8KKwkJLyogR2V0IGZyZWUgbWljcm8gVVJCIHBvbGwgdGlsbCBhIGZyZWUgdXJiIGlzIHJlY2VpdmVkICovCiAKIAkJZG8gewogCQkJbXVyYiA9IChzdHJ1Y3QgdXJiICopIG94dV9tdXJiX2FsbG9jKG94dSk7CkBAIC0yOTExLDcgKzI5MTEsNyBAQAogCiAJLyogTGFzdCB1cmIgcmVxdWlyZXMgc3BlY2lhbCBoYW5kbGluZyAgKi8KIAotCS8qIEdldCBmcmVlIG1pY3JvIFVSQiBwb2xsIHRpbGwgYSBmcmVlIHVyYiBpcyByZWNpZXZlZCAqLworCS8qIEdldCBmcmVlIG1pY3JvIFVSQiBwb2xsIHRpbGwgYSBmcmVlIHVyYiBpcyByZWNlaXZlZCAqLwogCWRvIHsKIAkJbXVyYiA9IChzdHJ1Y3QgdXJiICopIG94dV9tdXJiX2FsbG9jKG94dSk7CiAJCWlmICghbXVyYikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jIGIvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKaW5kZXggMWQ1ODZkNC4uOWIxNjZkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKQEAgLTg0LDY1ICs4NCw5MiBAQAogewogCXU4IHJldiA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgYW1kX2NoaXBzZXRfaW5mbyBpbmZvOworCWludCByZXQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1kX2xvY2ssIGZsYWdzKTsKIAotCWFtZF9jaGlwc2V0LnByb2JlX2NvdW50Kys7CiAJLyogcHJvYmUgb25seSBvbmNlICovCi0JaWYgKGFtZF9jaGlwc2V0LnByb2JlX2NvdW50ID4gMSkgeworCWlmIChhbWRfY2hpcHNldC5wcm9iZV9jb3VudCA+IDApIHsKKwkJYW1kX2NoaXBzZXQucHJvYmVfY291bnQrKzsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1kX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIGFtZF9jaGlwc2V0LnByb2JlX3Jlc3VsdDsKIAl9CisJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtZF9sb2NrLCBmbGFncyk7CiAKLQlhbWRfY2hpcHNldC5zbWJ1c19kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FUSSwgMHg0Mzg1LCBOVUxMKTsKLQlpZiAoYW1kX2NoaXBzZXQuc21idXNfZGV2KSB7Ci0JCXJldiA9IGFtZF9jaGlwc2V0LnNtYnVzX2Rldi0+cmV2aXNpb247CisJaW5mby5zbWJ1c19kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FUSSwgMHg0Mzg1LCBOVUxMKTsKKwlpZiAoaW5mby5zbWJ1c19kZXYpIHsKKwkJcmV2ID0gaW5mby5zbWJ1c19kZXYtPnJldmlzaW9uOwogCQlpZiAocmV2ID49IDB4NDApCi0JCQlhbWRfY2hpcHNldC5zYl90eXBlID0gMTsKKwkJCWluZm8uc2JfdHlwZSA9IDE7CiAJCWVsc2UgaWYgKHJldiA+PSAweDMwICYmIHJldiA8PSAweDNiKQotCQkJYW1kX2NoaXBzZXQuc2JfdHlwZSA9IDM7CisJCQlpbmZvLnNiX3R5cGUgPSAzOwogCX0gZWxzZSB7Ci0JCWFtZF9jaGlwc2V0LnNtYnVzX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQU1ELAotCQkJCQkJCTB4NzgwYiwgTlVMTCk7Ci0JCWlmICghYW1kX2NoaXBzZXQuc21idXNfZGV2KSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbWRfbG9jaywgZmxhZ3MpOwotCQkJcmV0dXJuIDA7CisJCWluZm8uc21idXNfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTUQsCisJCQkJCQkweDc4MGIsIE5VTEwpOworCQlpZiAoIWluZm8uc21idXNfZGV2KSB7CisJCQlyZXQgPSAwOworCQkJZ290byBjb21taXQ7CiAJCX0KLQkJcmV2ID0gYW1kX2NoaXBzZXQuc21idXNfZGV2LT5yZXZpc2lvbjsKKworCQlyZXYgPSBpbmZvLnNtYnVzX2Rldi0+cmV2aXNpb247CiAJCWlmIChyZXYgPj0gMHgxMSAmJiByZXYgPD0gMHgxOCkKLQkJCWFtZF9jaGlwc2V0LnNiX3R5cGUgPSAyOworCQkJaW5mby5zYl90eXBlID0gMjsKIAl9CiAKLQlpZiAoYW1kX2NoaXBzZXQuc2JfdHlwZSA9PSAwKSB7Ci0JCWlmIChhbWRfY2hpcHNldC5zbWJ1c19kZXYpIHsKLQkJCXBjaV9kZXZfcHV0KGFtZF9jaGlwc2V0LnNtYnVzX2Rldik7Ci0JCQlhbWRfY2hpcHNldC5zbWJ1c19kZXYgPSBOVUxMOworCWlmIChpbmZvLnNiX3R5cGUgPT0gMCkgeworCQlpZiAoaW5mby5zbWJ1c19kZXYpIHsKKwkJCXBjaV9kZXZfcHV0KGluZm8uc21idXNfZGV2KTsKKwkJCWluZm8uc21idXNfZGV2ID0gTlVMTDsKIAkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbWRfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gMDsKKwkJcmV0ID0gMDsKKwkJZ290byBjb21taXQ7CiAJfQogCi0JYW1kX2NoaXBzZXQubmJfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTUQsIDB4OTYwMSwgTlVMTCk7Ci0JaWYgKGFtZF9jaGlwc2V0Lm5iX2RldikgewotCQlhbWRfY2hpcHNldC5uYl90eXBlID0gMTsKKwlpbmZvLm5iX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQU1ELCAweDk2MDEsIE5VTEwpOworCWlmIChpbmZvLm5iX2RldikgeworCQlpbmZvLm5iX3R5cGUgPSAxOwogCX0gZWxzZSB7Ci0JCWFtZF9jaGlwc2V0Lm5iX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQU1ELAotCQkJCQkJCTB4MTUxMCwgTlVMTCk7Ci0JCWlmIChhbWRfY2hpcHNldC5uYl9kZXYpIHsKLQkJCWFtZF9jaGlwc2V0Lm5iX3R5cGUgPSAyOwotCQl9IGVsc2UgIHsKLQkJCWFtZF9jaGlwc2V0Lm5iX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQU1ELAotCQkJCQkJCQkweDk2MDAsIE5VTEwpOwotCQkJaWYgKGFtZF9jaGlwc2V0Lm5iX2RldikKLQkJCQlhbWRfY2hpcHNldC5uYl90eXBlID0gMzsKKwkJaW5mby5uYl9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNRCwgMHgxNTEwLCBOVUxMKTsKKwkJaWYgKGluZm8ubmJfZGV2KSB7CisJCQlpbmZvLm5iX3R5cGUgPSAyOworCQl9IGVsc2UgeworCQkJaW5mby5uYl9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNRCwKKwkJCQkJCSAgICAgMHg5NjAwLCBOVUxMKTsKKwkJCWlmIChpbmZvLm5iX2RldikKKwkJCQlpbmZvLm5iX3R5cGUgPSAzOwogCQl9CiAJfQogCi0JYW1kX2NoaXBzZXQucHJvYmVfcmVzdWx0ID0gMTsKKwlyZXQgPSBpbmZvLnByb2JlX3Jlc3VsdCA9IDE7CiAJcHJpbnRrKEtFUk5fREVCVUcgIlFVSVJLOiBFbmFibGUgQU1EIFBMTCBmaXhcbiIpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1kX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gYW1kX2NoaXBzZXQucHJvYmVfcmVzdWx0OworY29tbWl0OgorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFtZF9sb2NrLCBmbGFncyk7CisJaWYgKGFtZF9jaGlwc2V0LnByb2JlX2NvdW50ID4gMCkgeworCQkvKiByYWNlIC0gc29tZW9uZSBlbHNlIHdhcyBmYXN0ZXIgLSBkcm9wIGRldmljZXMgKi8KKworCQkvKiBNYXJrIHRoYXQgd2Ugd2hlcmUgaGVyZSAqLworCQlhbWRfY2hpcHNldC5wcm9iZV9jb3VudCsrOworCQlyZXQgPSBhbWRfY2hpcHNldC5wcm9iZV9yZXN1bHQ7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1kX2xvY2ssIGZsYWdzKTsKKworCQlpZiAoaW5mby5uYl9kZXYpCisJCQlwY2lfZGV2X3B1dChpbmZvLm5iX2Rldik7CisJCWlmIChpbmZvLnNtYnVzX2RldikKKwkJCXBjaV9kZXZfcHV0KGluZm8uc21idXNfZGV2KTsKKworCX0gZWxzZSB7CisJCS8qIG5vIHJhY2UgLSBjb21taXQgdGhlIHJlc3VsdCAqLworCQlpbmZvLnByb2JlX2NvdW50Kys7CisJCWFtZF9jaGlwc2V0ID0gaW5mbzsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1kX2xvY2ssIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2FtZF9maW5kX2NoaXBzZXRfaW5mbyk7CiAKQEAgLTI4NCw2ICszMTEsNyBAQAogCiB2b2lkIHVzYl9hbWRfZGV2X3B1dCh2b2lkKQogeworCXN0cnVjdCBwY2lfZGV2ICpuYiwgKnNtYnVzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1kX2xvY2ssIGZsYWdzKTsKQEAgLTI5NCwyMCArMzIyLDIzIEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoYW1kX2NoaXBzZXQubmJfZGV2KSB7Ci0JCXBjaV9kZXZfcHV0KGFtZF9jaGlwc2V0Lm5iX2Rldik7Ci0JCWFtZF9jaGlwc2V0Lm5iX2RldiA9IE5VTEw7Ci0JfQotCWlmIChhbWRfY2hpcHNldC5zbWJ1c19kZXYpIHsKLQkJcGNpX2Rldl9wdXQoYW1kX2NoaXBzZXQuc21idXNfZGV2KTsKLQkJYW1kX2NoaXBzZXQuc21idXNfZGV2ID0gTlVMTDsKLQl9CisJLyogc2F2ZSB0aGVtIHRvIHBjaV9kZXZfcHV0IG91dHNpZGUgb2Ygc3BpbmxvY2sgKi8KKwluYiAgICA9IGFtZF9jaGlwc2V0Lm5iX2RldjsKKwlzbWJ1cyA9IGFtZF9jaGlwc2V0LnNtYnVzX2RldjsKKworCWFtZF9jaGlwc2V0Lm5iX2RldiA9IE5VTEw7CisJYW1kX2NoaXBzZXQuc21idXNfZGV2ID0gTlVMTDsKIAlhbWRfY2hpcHNldC5uYl90eXBlID0gMDsKIAlhbWRfY2hpcHNldC5zYl90eXBlID0gMDsKIAlhbWRfY2hpcHNldC5pc29jX3JlcXMgPSAwOwogCWFtZF9jaGlwc2V0LnByb2JlX3Jlc3VsdCA9IDA7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbWRfbG9jaywgZmxhZ3MpOworCisJaWYgKG5iKQorCQlwY2lfZGV2X3B1dChuYik7CisJaWYgKHNtYnVzKQorCQlwY2lfZGV2X3B1dChzbWJ1cyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfYW1kX2Rldl9wdXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvcXNldC5jIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL3FzZXQuYwppbmRleCBkYzBhYjgzLi5kNmUxNzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvcXNldC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9xc2V0LmMKQEAgLTczOSw3ICs3MzksNyBAQAogICogcHJvY2Vzc19pbmFjdGl2ZV9xdGQgLSBwcm9jZXNzIGFuIGluYWN0aXZlIChidXQgbm90IGhhbHRlZCkgcVRELgogICoKICAqIFVwZGF0ZSB0aGUgdXJiIHdpdGggdGhlIHRyYW5zZmVyIGJ5dGVzIGZyb20gdGhlIHFURCwgaWYgdGhlIHVyYiBpcwotICogY29tcGxldGVseSB0cmFuc2ZlcmVkIG9yIChpbiB0aGUgY2FzZSBvZiBhbiBJTiBvbmx5KSB0aGUgTFBGIGlzCisgKiBjb21wbGV0ZWx5IHRyYW5zZmVycmVkIG9yIChpbiB0aGUgY2FzZSBvZiBhbiBJTiBvbmx5KSB0aGUgTFBGIGlzCiAgKiBzZXQsIHRoZW4gdGhlIHRyYW5zZmVyIGlzIGNvbXBsZXRlIGFuZCB0aGUgdXJiIHNob3VsZCBiZSByZXR1cm5lZAogICogdG8gdGhlIHN5c3RlbS4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWh1Yi5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWh1Yi5jCmluZGV4IGE3OGYyZWIuLjczZjc1ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaHViLmMKQEAgLTc3Nyw3ICs3NzcsNyBAQAogCQlpZiAodDEgIT0gdDIpCiAJCQl4aGNpX3dyaXRlbCh4aGNpLCB0MiwgcG9ydF9hcnJheVtwb3J0X2luZGV4XSk7CiAKLQkJaWYgKERFVl9ISUdIU1BFRUQodDEpKSB7CisJCWlmIChoY2QtPnNwZWVkICE9IEhDRF9VU0IzKSB7CiAJCQkvKiBlbmFibGUgcmVtb3RlIHdha2UgdXAgZm9yIFVTQiAyLjAgKi8KIAkJCXUzMiBfX2lvbWVtICphZGRyOwogCQkJdTMyIHRtcDsKQEAgLTg2Niw2ICs4NjYsMjEgQEAKIAkJCQl0ZW1wIHw9IFBPUlRfTElOS19TVFJPQkUgfCBYREVWX1UwOwogCQkJCXhoY2lfd3JpdGVsKHhoY2ksIHRlbXAsIHBvcnRfYXJyYXlbcG9ydF9pbmRleF0pOwogCQkJfQorCQkJLyogd2FpdCBmb3IgdGhlIHBvcnQgdG8gZW50ZXIgVTAgYW5kIHJlcG9ydCBwb3J0IGxpbmsKKwkJCSAqIHN0YXRlIGNoYW5nZS4KKwkJCSAqLworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCQkJbXNsZWVwKDIwKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CisKKwkJCS8qIENsZWFyIFBMQyAqLworCQkJdGVtcCA9IHhoY2lfcmVhZGwoeGhjaSwgcG9ydF9hcnJheVtwb3J0X2luZGV4XSk7CisJCQlpZiAodGVtcCAmIFBPUlRfUExDKSB7CisJCQkJdGVtcCA9IHhoY2lfcG9ydF9zdGF0ZV90b19uZXV0cmFsKHRlbXApOworCQkJCXRlbXAgfD0gUE9SVF9QTEM7CisJCQkJeGhjaV93cml0ZWwoeGhjaSwgdGVtcCwgcG9ydF9hcnJheVtwb3J0X2luZGV4XSk7CisJCQl9CisKIAkJCXNsb3RfaWQgPSB4aGNpX2ZpbmRfc2xvdF9pZF9ieV9wb3J0KGhjZCwKIAkJCQkJeGhjaSwgcG9ydF9pbmRleCArIDEpOwogCQkJaWYgKHNsb3RfaWQpCkBAIC04NzMsNyArODg4LDcgQEAKIAkJfSBlbHNlCiAJCQl4aGNpX3dyaXRlbCh4aGNpLCB0ZW1wLCBwb3J0X2FycmF5W3BvcnRfaW5kZXhdKTsKIAotCQlpZiAoREVWX0hJR0hTUEVFRCh0ZW1wKSkgeworCQlpZiAoaGNkLT5zcGVlZCAhPSBIQ0RfVVNCMykgewogCQkJLyogZGlzYWJsZSByZW1vdGUgd2FrZSB1cCBmb3IgVVNCIDIuMCAqLwogCQkJdTMyIF9faW9tZW0gKmFkZHI7CiAJCQl1MzIgdG1wOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jCmluZGV4IGEwMDNlNzkuLjYyN2YzNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMKQEAgLTg0Niw3ICs4NDYsNyBAQAogCQkgKiBTa2lwIHBvcnRzIHRoYXQgZG9uJ3QgaGF2ZSBrbm93biBzcGVlZHMsIG9yIGhhdmUgZHVwbGljYXRlCiAJCSAqIEV4dGVuZGVkIENhcGFiaWxpdGllcyBwb3J0IHNwZWVkIGVudHJpZXMuCiAJCSAqLwotCQlpZiAocG9ydF9zcGVlZCA9PSAwIHx8IHBvcnRfc3BlZWQgPT0gLTEpCisJCWlmIChwb3J0X3NwZWVkID09IDAgfHwgcG9ydF9zcGVlZCA9PSBEVVBMSUNBVEVfRU5UUlkpCiAJCQljb250aW51ZTsKIAogCQkvKgpAQCAtOTc0LDYgKzk3NCw0NyBAQAogCXJldHVybiAwOwogfQogCisvKgorICogQ29udmVydCBpbnRlcnZhbCBleHByZXNzZWQgYXMgMl4oYkludGVydmFsIC0gMSkgPT0gaW50ZXJ2YWwgaW50bworICogc3RyYWlnaHQgZXhwb25lbnQgdmFsdWUgMl5uID09IGludGVydmFsLgorICoKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCB4aGNpX3BhcnNlX2V4cG9uZW50X2ludGVydmFsKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKQoreworCXVuc2lnbmVkIGludCBpbnRlcnZhbDsKKworCWludGVydmFsID0gY2xhbXBfdmFsKGVwLT5kZXNjLmJJbnRlcnZhbCwgMSwgMTYpIC0gMTsKKwlpZiAoaW50ZXJ2YWwgIT0gZXAtPmRlc2MuYkludGVydmFsIC0gMSkKKwkJZGV2X3dhcm4oJnVkZXYtPmRldiwKKwkJCSAiZXAgJSN4IC0gcm91bmRpbmcgaW50ZXJ2YWwgdG8gJWQgbWljcm9mcmFtZXNcbiIsCisJCQkgZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcywKKwkJCSAxIDw8IGludGVydmFsKTsKKworCXJldHVybiBpbnRlcnZhbDsKK30KKworLyoKKyAqIENvbnZlcnQgYkludGVydmFsIGV4cHJlc3NlZCBpbiBmcmFtZXMgKGluIDEtMjU1IHJhbmdlKSB0byBleHBvbmVudCBvZgorICogbWljcm9mcmFtZXMsIHJvdW5kZWQgZG93biB0byBuZWFyZXN0IHBvd2VyIG9mIDIuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgeGhjaV9wYXJzZV9mcmFtZV9pbnRlcnZhbChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCkKK3sKKwl1bnNpZ25lZCBpbnQgaW50ZXJ2YWw7CisKKwlpbnRlcnZhbCA9IGZscyg4ICogZXAtPmRlc2MuYkludGVydmFsKSAtIDE7CisJaW50ZXJ2YWwgPSBjbGFtcF92YWwoaW50ZXJ2YWwsIDMsIDEwKTsKKwlpZiAoKDEgPDwgaW50ZXJ2YWwpICE9IDggKiBlcC0+ZGVzYy5iSW50ZXJ2YWwpCisJCWRldl93YXJuKCZ1ZGV2LT5kZXYsCisJCQkgImVwICUjeCAtIHJvdW5kaW5nIGludGVydmFsIHRvICVkIG1pY3JvZnJhbWVzLCBlcCBkZXNjIHNheXMgJWQgbWljcm9mcmFtZXNcbiIsCisJCQkgZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcywKKwkJCSAxIDw8IGludGVydmFsLAorCQkJIDggKiBlcC0+ZGVzYy5iSW50ZXJ2YWwpOworCisJcmV0dXJuIGludGVydmFsOworfQorCiAvKiBSZXR1cm4gdGhlIHBvbGxpbmcgb3IgTkFLIGludGVydmFsLgogICoKICAqIFRoZSBwb2xsaW5nIGludGVydmFsIGlzIGV4cHJlc3NlZCBpbiAibWljcm9mcmFtZXMiLiAgSWYgeEhDSSdzIEludGVydmFsIGZpZWxkCkBAIC05ODIsNyArMTAyMyw3IEBACiAgKiBUaGUgTkFLIGludGVydmFsIGlzIG9uZSBOQUsgcGVyIDEgdG8gMjU1IG1pY3JvZnJhbWVzLCBvciBubyBOQUtzIGlmIGludGVydmFsCiAgKiBpcyBzZXQgdG8gMC4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgeGhjaV9nZXRfZW5kcG9pbnRfaW50ZXJ2YWwoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCitzdGF0aWMgdW5zaWduZWQgaW50IHhoY2lfZ2V0X2VuZHBvaW50X2ludGVydmFsKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAogCQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKQogewogCXVuc2lnbmVkIGludCBpbnRlcnZhbCA9IDA7CkBAIC05OTEsNDUgKzEwMzIsMzggQEAKIAljYXNlIFVTQl9TUEVFRF9ISUdIOgogCQkvKiBNYXggTkFLIHJhdGUgKi8KIAkJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woJmVwLT5kZXNjKSB8fAotCQkJCXVzYl9lbmRwb2ludF94ZmVyX2J1bGsoJmVwLT5kZXNjKSkKKwkJICAgIHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoJmVwLT5kZXNjKSkgewogCQkJaW50ZXJ2YWwgPSBlcC0+ZGVzYy5iSW50ZXJ2YWw7CisJCQlicmVhazsKKwkJfQogCQkvKiBGYWxsIHRocm91Z2ggLSBTUyBhbmQgSFMgaXNvYy9pbnQgaGF2ZSBzYW1lIGRlY29kaW5nICovCisKIAljYXNlIFVTQl9TUEVFRF9TVVBFUjoKIAkJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2ludCgmZXAtPmRlc2MpIHx8Ci0JCQkJdXNiX2VuZHBvaW50X3hmZXJfaXNvYygmZXAtPmRlc2MpKSB7Ci0JCQlpZiAoZXAtPmRlc2MuYkludGVydmFsID09IDApCi0JCQkJaW50ZXJ2YWwgPSAwOwotCQkJZWxzZQotCQkJCWludGVydmFsID0gZXAtPmRlc2MuYkludGVydmFsIC0gMTsKLQkJCWlmIChpbnRlcnZhbCA+IDE1KQotCQkJCWludGVydmFsID0gMTU7Ci0JCQlpZiAoaW50ZXJ2YWwgIT0gZXAtPmRlc2MuYkludGVydmFsICsgMSkKLQkJCQlkZXZfd2FybigmdWRldi0+ZGV2LCAiZXAgJSN4IC0gcm91bmRpbmcgaW50ZXJ2YWwgdG8gJWQgbWljcm9mcmFtZXNcbiIsCi0JCQkJCQllcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLCAxIDw8IGludGVydmFsKTsKKwkJICAgIHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoJmVwLT5kZXNjKSkgeworCQkJaW50ZXJ2YWwgPSB4aGNpX3BhcnNlX2V4cG9uZW50X2ludGVydmFsKHVkZXYsIGVwKTsKIAkJfQogCQlicmVhazsKLQkvKiBDb252ZXJ0IGJJbnRlcnZhbCAoaW4gMS0yNTUgZnJhbWVzKSB0byBtaWNyb2ZyYW1lcyBhbmQgcm91bmQgZG93biB0bwotCSAqIG5lYXJlc3QgcG93ZXIgb2YgMi4KLQkgKi8KKwogCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CisJCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9pbnQoJmVwLT5kZXNjKSkgeworCQkJaW50ZXJ2YWwgPSB4aGNpX3BhcnNlX2V4cG9uZW50X2ludGVydmFsKHVkZXYsIGVwKTsKKwkJCWJyZWFrOworCQl9CisJCS8qCisJCSAqIEZhbGwgdGhyb3VnaCBmb3IgaXNvY2hyb25vdXMgZW5kcG9pbnQgaW50ZXJ2YWwgZGVjb2RpbmcKKwkJICogc2luY2UgaXQgdXNlcyB0aGUgc2FtZSBydWxlcyBhcyBsb3cgc3BlZWQgaW50ZXJydXB0CisJCSAqIGVuZHBvaW50cy4KKwkJICovCisKIAljYXNlIFVTQl9TUEVFRF9MT1c6CiAJCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9pbnQoJmVwLT5kZXNjKSB8fAotCQkJCXVzYl9lbmRwb2ludF94ZmVyX2lzb2MoJmVwLT5kZXNjKSkgewotCQkJaW50ZXJ2YWwgPSBmbHMoOCplcC0+ZGVzYy5iSW50ZXJ2YWwpIC0gMTsKLQkJCWlmIChpbnRlcnZhbCA+IDEwKQotCQkJCWludGVydmFsID0gMTA7Ci0JCQlpZiAoaW50ZXJ2YWwgPCAzKQotCQkJCWludGVydmFsID0gMzsKLQkJCWlmICgoMSA8PCBpbnRlcnZhbCkgIT0gOCplcC0+ZGVzYy5iSW50ZXJ2YWwpCi0JCQkJZGV2X3dhcm4oJnVkZXYtPmRldiwKLQkJCQkJCSJlcCAlI3ggLSByb3VuZGluZyBpbnRlcnZhbCIKLQkJCQkJCSIgdG8gJWQgbWljcm9mcmFtZXMsICIKLQkJCQkJCSJlcCBkZXNjIHNheXMgJWQgbWljcm9mcmFtZXNcbiIsCi0JCQkJCQllcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLAotCQkJCQkJMSA8PCBpbnRlcnZhbCwKLQkJCQkJCTgqZXAtPmRlc2MuYkludGVydmFsKTsKKwkJICAgIHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoJmVwLT5kZXNjKSkgeworCisJCQlpbnRlcnZhbCA9IHhoY2lfcGFyc2VfZnJhbWVfaW50ZXJ2YWwodWRldiwgZXApOwogCQl9CiAJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJQlVHKCk7CiAJfQpAQCAtMTA0MSw3ICsxMDc1LDcgQEAKICAqIHRyYW5zYWN0aW9uIG9wcG9ydHVuaXRpZXMgcGVyIG1pY3JvZnJhbWUiLCBidXQgdGhhdCBnb2VzIGluIHRoZSBNYXggQnVyc3QKICAqIGVuZHBvaW50IGNvbnRleHQgZmllbGQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdTMyIHhoY2lfZ2V0X2VuZHBvaW50X211bHQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCitzdGF0aWMgdTMyIHhoY2lfZ2V0X2VuZHBvaW50X211bHQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCiAJCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXApCiB7CiAJaWYgKHVkZXYtPnNwZWVkICE9IFVTQl9TUEVFRF9TVVBFUiB8fApAQCAtMTA1MCw3ICsxMDg0LDcgQEAKIAlyZXR1cm4gZXAtPnNzX2VwX2NvbXAuYm1BdHRyaWJ1dGVzOwogfQogCi1zdGF0aWMgaW5saW5lIHUzMiB4aGNpX2dldF9lbmRwb2ludF90eXBlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorc3RhdGljIHUzMiB4aGNpX2dldF9lbmRwb2ludF90eXBlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAogCQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKQogewogCWludCBpbjsKQEAgLTEwODQsNyArMTExOCw3IEBACiAgKiBCYXNpY2FsbHksIHRoaXMgaXMgdGhlIG1heHBhY2tldCBzaXplLCBtdWx0aXBsaWVkIGJ5IHRoZSBidXJzdCBzaXplCiAgKiBhbmQgbXVsdCBzaXplLgogICovCi1zdGF0aWMgaW5saW5lIHUzMiB4aGNpX2dldF9tYXhfZXNpdF9wYXlsb2FkKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKK3N0YXRpYyB1MzIgeGhjaV9nZXRfbWF4X2VzaXRfcGF5bG9hZChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCiAJCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAogCQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKQogewpAQCAtMTcyNywxMiArMTc2MSwxMiBAQAogCQkJICogZm91bmQgYSBzaW1pbGFyIGR1cGxpY2F0ZS4KIAkJCSAqLwogCQkJaWYgKHhoY2ktPnBvcnRfYXJyYXlbaV0gIT0gbWFqb3JfcmV2aXNpb24gJiYKLQkJCQl4aGNpLT5wb3J0X2FycmF5W2ldICE9ICh1OCkgLTEpIHsKKwkJCQl4aGNpLT5wb3J0X2FycmF5W2ldICE9IERVUExJQ0FURV9FTlRSWSkgewogCQkJCWlmICh4aGNpLT5wb3J0X2FycmF5W2ldID09IDB4MDMpCiAJCQkJCXhoY2ktPm51bV91c2IzX3BvcnRzLS07CiAJCQkJZWxzZQogCQkJCQl4aGNpLT5udW1fdXNiMl9wb3J0cy0tOwotCQkJCXhoY2ktPnBvcnRfYXJyYXlbaV0gPSAodTgpIC0xOworCQkJCXhoY2ktPnBvcnRfYXJyYXlbaV0gPSBEVVBMSUNBVEVfRU5UUlk7CiAJCQl9CiAJCQkvKiBGSVhNRTogU2hvdWxkIHdlIGRpc2FibGUgdGhlIHBvcnQ/ICovCiAJCQljb250aW51ZTsKQEAgLTE4MzEsNyArMTg2NSw3IEBACiAJCWZvciAoaSA9IDA7IGkgPCBudW1fcG9ydHM7IGkrKykgewogCQkJaWYgKHhoY2ktPnBvcnRfYXJyYXlbaV0gPT0gMHgwMyB8fAogCQkJCQl4aGNpLT5wb3J0X2FycmF5W2ldID09IDAgfHwKLQkJCQkJeGhjaS0+cG9ydF9hcnJheVtpXSA9PSAtMSkKKwkJCQkJeGhjaS0+cG9ydF9hcnJheVtpXSA9PSBEVVBMSUNBVEVfRU5UUlkpCiAJCQkJY29udGludWU7CiAKIAkJCXhoY2ktPnVzYjJfcG9ydHNbcG9ydF9pbmRleF0gPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXBjaS5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXBjaS5jCmluZGV4IGNlZWE5ZjMuLmExMDQ5NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMKQEAgLTExNCw2ICsxMTQsMTAgQEAKIAlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfTkVDKQogCQl4aGNpLT5xdWlya3MgfD0gWEhDSV9ORUNfSE9TVDsKIAorCS8qIEFNRCBQTEwgcXVpcmsgKi8KKwlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQU1EICYmIHVzYl9hbWRfZmluZF9jaGlwc2V0X2luZm8oKSkKKwkJeGhjaS0+cXVpcmtzIHw9IFhIQ0lfQU1EX1BMTF9GSVg7CisKIAkvKiBNYWtlIHN1cmUgdGhlIEhDIGlzIGhhbHRlZC4gKi8KIAlyZXR2YWwgPSB4aGNpX2hhbHQoeGhjaSk7CiAJaWYgKHJldHZhbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCmluZGV4IGNmYzFhZDkuLjc0MzczODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYwpAQCAtOTMsNyArOTMsNyBAQAogLyogRG9lcyB0aGlzIGxpbmsgVFJCIHBvaW50IHRvIHRoZSBmaXJzdCBzZWdtZW50IGluIGEgcmluZywKICAqIG9yIHdhcyB0aGUgcHJldmlvdXMgVFJCIHRoZSBsYXN0IFRSQiBvbiB0aGUgbGFzdCBzZWdtZW50IGluIHRoZSBFUlNUPwogICovCi1zdGF0aWMgaW5saW5lIGJvb2wgbGFzdF90cmJfb25fbGFzdF9zZWcoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV9yaW5nICpyaW5nLAorc3RhdGljIGJvb2wgbGFzdF90cmJfb25fbGFzdF9zZWcoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV9yaW5nICpyaW5nLAogCQlzdHJ1Y3QgeGhjaV9zZWdtZW50ICpzZWcsIHVuaW9uIHhoY2lfdHJiICp0cmIpCiB7CiAJaWYgKHJpbmcgPT0geGhjaS0+ZXZlbnRfcmluZykKQEAgLTEwNyw3ICsxMDcsNyBAQAogICogc2VnbWVudD8gIEkuZS4gd291bGQgdGhlIHVwZGF0ZWQgZXZlbnQgVFJCIHBvaW50ZXIgc3RlcCBvZmYgdGhlIGVuZCBvZiB0aGUKICAqIGV2ZW50IHNlZz8KICAqLwotc3RhdGljIGlubGluZSBpbnQgbGFzdF90cmIoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV9yaW5nICpyaW5nLAorc3RhdGljIGludCBsYXN0X3RyYihzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX3JpbmcgKnJpbmcsCiAJCXN0cnVjdCB4aGNpX3NlZ21lbnQgKnNlZywgdW5pb24geGhjaV90cmIgKnRyYikKIHsKIAlpZiAocmluZyA9PSB4aGNpLT5ldmVudF9yaW5nKQpAQCAtMTE2LDcgKzExNiw3IEBACiAJCXJldHVybiAodHJiLT5saW5rLmNvbnRyb2wgJiBUUkJfVFlQRV9CSVRNQVNLKSA9PSBUUkJfVFlQRShUUkJfTElOSyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGVucXVldWVfaXNfbGlua190cmIoc3RydWN0IHhoY2lfcmluZyAqcmluZykKK3N0YXRpYyBpbnQgZW5xdWV1ZV9pc19saW5rX3RyYihzdHJ1Y3QgeGhjaV9yaW5nICpyaW5nKQogewogCXN0cnVjdCB4aGNpX2xpbmtfdHJiICpsaW5rID0gJnJpbmctPmVucXVldWUtPmxpbms7CiAJcmV0dXJuICgobGluay0+Y29udHJvbCAmIFRSQl9UWVBFX0JJVE1BU0spID09IFRSQl9UWVBFKFRSQl9MSU5LKSk7CkBAIC01OTIsNyArNTkyLDcgQEAKIAllcC0+ZXBfc3RhdGUgfD0gU0VUX0RFUV9QRU5ESU5HOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgeGhjaV9zdG9wX3dhdGNoZG9nX3RpbWVyX2luX2lycShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCitzdGF0aWMgdm9pZCB4aGNpX3N0b3Bfd2F0Y2hkb2dfdGltZXJfaW5faXJxKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKIAkJc3RydWN0IHhoY2lfdmlydF9lcCAqZXApCiB7CiAJZXAtPmVwX3N0YXRlICY9IH5FUF9IQUxUX1BFTkRJTkc7CkBAIC02MTksNiArNjE5LDEzIEBACiAKIAkvKiBPbmx5IGdpdmViYWNrIHVyYiB3aGVuIHRoaXMgaXMgdGhlIGxhc3QgdGQgaW4gdXJiICovCiAJaWYgKHVyYl9wcml2LT50ZF9jbnQgPT0gdXJiX3ByaXYtPmxlbmd0aCkgeworCQlpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JU09DSFJPTk9VUykgeworCQkJeGhjaV90b19oY2QoeGhjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcy0tOworCQkJaWYgKHhoY2lfdG9faGNkKHhoY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMJPT0gMCkgeworCQkJCWlmICh4aGNpLT5xdWlya3MgJiBYSENJX0FNRF9QTExfRklYKQorCQkJCQl1c2JfYW1kX3F1aXJrX3BsbF9lbmFibGUoKTsKKwkJCX0KKwkJfQogCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcChoY2QsIHVyYik7CiAJCXhoY2lfZGJnKHhoY2ksICJHaXZlYmFjayAlcyBVUkIgJXBcbiIsIGFkamVjdGl2ZSwgdXJiKTsKIApAQCAtMTIwOSw3ICsxMjE2LDcgQEAKIAkJICogU2tpcCBwb3J0cyB0aGF0IGRvbid0IGhhdmUga25vd24gc3BlZWRzLCBvciBoYXZlIGR1cGxpY2F0ZQogCQkgKiBFeHRlbmRlZCBDYXBhYmlsaXRpZXMgcG9ydCBzcGVlZCBlbnRyaWVzLgogCQkgKi8KLQkJaWYgKHBvcnRfc3BlZWQgPT0gMCB8fCBwb3J0X3NwZWVkID09IC0xKQorCQlpZiAocG9ydF9zcGVlZCA9PSAwIHx8IHBvcnRfc3BlZWQgPT0gRFVQTElDQVRFX0VOVFJZKQogCQkJY29udGludWU7CiAKIAkJLyoKQEAgLTEyMzUsNiArMTI0Miw3IEBACiAJdTggbWFqb3JfcmV2aXNpb247CiAJc3RydWN0IHhoY2lfYnVzX3N0YXRlICpidXNfc3RhdGU7CiAJdTMyIF9faW9tZW0gKipwb3J0X2FycmF5OworCWJvb2wgYm9ndXNfcG9ydF9zdGF0dXMgPSBmYWxzZTsKIAogCS8qIFBvcnQgc3RhdHVzIGNoYW5nZSBldmVudHMgYWx3YXlzIGhhdmUgYSBzdWNjZXNzZnVsIGNvbXBsZXRpb24gY29kZSAqLwogCWlmIChHRVRfQ09NUF9DT0RFKGV2ZW50LT5nZW5lcmljLmZpZWxkWzJdKSAhPSBDT01QX1NVQ0NFU1MpIHsKQEAgLTEyNDcsNiArMTI1NSw3IEBACiAJbWF4X3BvcnRzID0gSENTX01BWF9QT1JUUyh4aGNpLT5oY3NfcGFyYW1zMSk7CiAJaWYgKChwb3J0X2lkIDw9IDApIHx8IChwb3J0X2lkID4gbWF4X3BvcnRzKSkgewogCQl4aGNpX3dhcm4oeGhjaSwgIkludmFsaWQgcG9ydCBpZCAlZFxuIiwgcG9ydF9pZCk7CisJCWJvZ3VzX3BvcnRfc3RhdHVzID0gdHJ1ZTsKIAkJZ290byBjbGVhbnVwOwogCX0KIApAQCAtMTI1OCwxMiArMTI2NywxNCBAQAogCQl4aGNpX3dhcm4oeGhjaSwgIkV2ZW50IGZvciBwb3J0ICV1IG5vdCBpbiAiCiAJCQkJIkV4dGVuZGVkIENhcGFiaWxpdGllcywgaWdub3JpbmcuXG4iLAogCQkJCXBvcnRfaWQpOworCQlib2d1c19wb3J0X3N0YXR1cyA9IHRydWU7CiAJCWdvdG8gY2xlYW51cDsKIAl9Ci0JaWYgKG1ham9yX3JldmlzaW9uID09ICh1OCkgLTEpIHsKKwlpZiAobWFqb3JfcmV2aXNpb24gPT0gRFVQTElDQVRFX0VOVFJZKSB7CiAJCXhoY2lfd2Fybih4aGNpLCAiRXZlbnQgZm9yIHBvcnQgJXUgZHVwbGljYXRlZCBpbiIKIAkJCQkiRXh0ZW5kZWQgQ2FwYWJpbGl0aWVzLCBpZ25vcmluZy5cbiIsCiAJCQkJcG9ydF9pZCk7CisJCWJvZ3VzX3BvcnRfc3RhdHVzID0gdHJ1ZTsKIAkJZ290byBjbGVhbnVwOwogCX0KIApAQCAtMTMzNSw2ICsxMzQ2LDEzIEBACiAJLyogVXBkYXRlIGV2ZW50IHJpbmcgZGVxdWV1ZSBwb2ludGVyIGJlZm9yZSBkcm9wcGluZyB0aGUgbG9jayAqLwogCWluY19kZXEoeGhjaSwgeGhjaS0+ZXZlbnRfcmluZywgdHJ1ZSk7CiAKKwkvKiBEb24ndCBtYWtlIHRoZSBVU0IgY29yZSBwb2xsIHRoZSByb290aHViIGlmIHdlIGdvdCBhIGJhZCBwb3J0IHN0YXR1cworCSAqIGNoYW5nZSBldmVudC4gIEJlc2lkZXMsIGF0IHRoYXQgcG9pbnQgd2UgY2FuJ3QgdGVsbCB3aGljaCByb290aHViCisJICogKFVTQiAyLjAgb3IgVVNCIDMuMCkgdG8ga2ljay4KKwkgKi8KKwlpZiAoYm9ndXNfcG9ydF9zdGF0dXMpCisJCXJldHVybjsKKwogCXNwaW5fdW5sb2NrKCZ4aGNpLT5sb2NrKTsKIAkvKiBQYXNzIHRoaXMgdXAgdG8gdGhlIGNvcmUgKi8KIAl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzKGhjZCk7CkBAIC0xNTU0LDggKzE1NzIsMTcgQEAKIAogCQl1cmJfcHJpdi0+dGRfY250Kys7CiAJCS8qIEdpdmViYWNrIHRoZSB1cmIgd2hlbiBhbGwgdGhlIHRkcyBhcmUgY29tcGxldGVkICovCi0JCWlmICh1cmJfcHJpdi0+dGRfY250ID09IHVyYl9wcml2LT5sZW5ndGgpCisJCWlmICh1cmJfcHJpdi0+dGRfY250ID09IHVyYl9wcml2LT5sZW5ndGgpIHsKIAkJCXJldCA9IDE7CisJCQlpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JU09DSFJPTk9VUykgeworCQkJCXhoY2lfdG9faGNkKHhoY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMtLTsKKwkJCQlpZiAoeGhjaV90b19oY2QoeGhjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcworCQkJCQk9PSAwKSB7CisJCQkJCWlmICh4aGNpLT5xdWlya3MgJiBYSENJX0FNRF9QTExfRklYKQorCQkJCQkJdXNiX2FtZF9xdWlya19wbGxfZW5hYmxlKCk7CisJCQkJfQorCQkJfQorCQl9CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTE2NzUsNzEgKzE3MDIsNTIgQEAKIAlzdHJ1Y3QgdXJiX3ByaXYgKnVyYl9wcml2OwogCWludCBpZHg7CiAJaW50IGxlbiA9IDA7Ci0JaW50IHNraXBfdGQgPSAwOwogCXVuaW9uIHhoY2lfdHJiICpjdXJfdHJiOwogCXN0cnVjdCB4aGNpX3NlZ21lbnQgKmN1cl9zZWc7CisJc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKmZyYW1lOwogCXUzMiB0cmJfY29tcF9jb2RlOworCWJvb2wgc2tpcF90ZCA9IGZhbHNlOwogCiAJZXBfcmluZyA9IHhoY2lfZG1hX3RvX3RyYW5zZmVyX3JpbmcoZXAsIGV2ZW50LT5idWZmZXIpOwogCXRyYl9jb21wX2NvZGUgPSBHRVRfQ09NUF9DT0RFKGV2ZW50LT50cmFuc2Zlcl9sZW4pOwogCXVyYl9wcml2ID0gdGQtPnVyYi0+aGNwcml2OwogCWlkeCA9IHVyYl9wcml2LT50ZF9jbnQ7CisJZnJhbWUgPSAmdGQtPnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaWR4XTsKIAotCWlmIChlcC0+c2tpcCkgewotCQkvKiBUaGUgdHJhbnNmZXIgaXMgcGFydGx5IGRvbmUgKi8KLQkJKnN0YXR1cyA9IC1FWERFVjsKLQkJdGQtPnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaWR4XS5zdGF0dXMgPSAtRVhERVY7Ci0JfSBlbHNlIHsKLQkJLyogaGFuZGxlIGNvbXBsZXRpb24gY29kZSAqLwotCQlzd2l0Y2ggKHRyYl9jb21wX2NvZGUpIHsKLQkJY2FzZSBDT01QX1NVQ0NFU1M6Ci0JCQl0ZC0+dXJiLT5pc29fZnJhbWVfZGVzY1tpZHhdLnN0YXR1cyA9IDA7Ci0JCQl4aGNpX2RiZyh4aGNpLCAiU3VjY2Vzc2Z1bCBpc29jIHRyYW5zZmVyIVxuIik7Ci0JCQlicmVhazsKLQkJY2FzZSBDT01QX1NIT1JUX1RYOgotCQkJaWYgKHRkLT51cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1NIT1JUX05PVF9PSykKLQkJCQl0ZC0+dXJiLT5pc29fZnJhbWVfZGVzY1tpZHhdLnN0YXR1cyA9Ci0JCQkJCSAtRVJFTU9URUlPOwotCQkJZWxzZQotCQkJCXRkLT51cmItPmlzb19mcmFtZV9kZXNjW2lkeF0uc3RhdHVzID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIENPTVBfQldfT1ZFUjoKLQkJCXRkLT51cmItPmlzb19mcmFtZV9kZXNjW2lkeF0uc3RhdHVzID0gLUVDT01NOwotCQkJc2tpcF90ZCA9IDE7Ci0JCQlicmVhazsKLQkJY2FzZSBDT01QX0JVRkZfT1ZFUjoKLQkJY2FzZSBDT01QX0JBQkJMRToKLQkJCXRkLT51cmItPmlzb19mcmFtZV9kZXNjW2lkeF0uc3RhdHVzID0gLUVPVkVSRkxPVzsKLQkJCXNraXBfdGQgPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ09NUF9TVEFMTDoKLQkJCXRkLT51cmItPmlzb19mcmFtZV9kZXNjW2lkeF0uc3RhdHVzID0gLUVQUk9UTzsKLQkJCXNraXBfdGQgPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ09NUF9TVE9QOgotCQljYXNlIENPTVBfU1RPUF9JTlZBTDoKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJdGQtPnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaWR4XS5zdGF0dXMgPSAtMTsKLQkJCWJyZWFrOwotCQl9CisJLyogaGFuZGxlIGNvbXBsZXRpb24gY29kZSAqLworCXN3aXRjaCAodHJiX2NvbXBfY29kZSkgeworCWNhc2UgQ09NUF9TVUNDRVNTOgorCQlmcmFtZS0+c3RhdHVzID0gMDsKKwkJeGhjaV9kYmcoeGhjaSwgIlN1Y2Nlc3NmdWwgaXNvYyB0cmFuc2ZlciFcbiIpOworCQlicmVhazsKKwljYXNlIENPTVBfU0hPUlRfVFg6CisJCWZyYW1lLT5zdGF0dXMgPSB0ZC0+dXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0sgPworCQkJCS1FUkVNT1RFSU8gOiAwOworCQlicmVhazsKKwljYXNlIENPTVBfQldfT1ZFUjoKKwkJZnJhbWUtPnN0YXR1cyA9IC1FQ09NTTsKKwkJc2tpcF90ZCA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgQ09NUF9CVUZGX09WRVI6CisJY2FzZSBDT01QX0JBQkJMRToKKwkJZnJhbWUtPnN0YXR1cyA9IC1FT1ZFUkZMT1c7CisJCXNraXBfdGQgPSB0cnVlOworCQlicmVhazsKKwljYXNlIENPTVBfU1RBTEw6CisJCWZyYW1lLT5zdGF0dXMgPSAtRVBST1RPOworCQlza2lwX3RkID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSBDT01QX1NUT1A6CisJY2FzZSBDT01QX1NUT1BfSU5WQUw6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZyYW1lLT5zdGF0dXMgPSAtMTsKKwkJYnJlYWs7CiAJfQogCi0JLyogY2FsYyBhY3R1YWwgbGVuZ3RoICovCi0JaWYgKGVwLT5za2lwKSB7Ci0JCXRkLT51cmItPmlzb19mcmFtZV9kZXNjW2lkeF0uYWN0dWFsX2xlbmd0aCA9IDA7Ci0JCS8qIFVwZGF0ZSByaW5nIGRlcXVldWUgcG9pbnRlciAqLwotCQl3aGlsZSAoZXBfcmluZy0+ZGVxdWV1ZSAhPSB0ZC0+bGFzdF90cmIpCi0JCQlpbmNfZGVxKHhoY2ksIGVwX3JpbmcsIGZhbHNlKTsKLQkJaW5jX2RlcSh4aGNpLCBlcF9yaW5nLCBmYWxzZSk7Ci0JCXJldHVybiBmaW5pc2hfdGQoeGhjaSwgdGQsIGV2ZW50X3RyYiwgZXZlbnQsIGVwLCBzdGF0dXMsIHRydWUpOwotCX0KLQotCWlmICh0cmJfY29tcF9jb2RlID09IENPTVBfU1VDQ0VTUyB8fCBza2lwX3RkID09IDEpIHsKLQkJdGQtPnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaWR4XS5hY3R1YWxfbGVuZ3RoID0KLQkJCXRkLT51cmItPmlzb19mcmFtZV9kZXNjW2lkeF0ubGVuZ3RoOwotCQl0ZC0+dXJiLT5hY3R1YWxfbGVuZ3RoICs9Ci0JCQl0ZC0+dXJiLT5pc29fZnJhbWVfZGVzY1tpZHhdLmxlbmd0aDsKKwlpZiAodHJiX2NvbXBfY29kZSA9PSBDT01QX1NVQ0NFU1MgfHwgc2tpcF90ZCkgeworCQlmcmFtZS0+YWN0dWFsX2xlbmd0aCA9IGZyYW1lLT5sZW5ndGg7CisJCXRkLT51cmItPmFjdHVhbF9sZW5ndGggKz0gZnJhbWUtPmxlbmd0aDsKIAl9IGVsc2UgewogCQlmb3IgKGN1cl90cmIgPSBlcF9yaW5nLT5kZXF1ZXVlLAogCQkgICAgIGN1cl9zZWcgPSBlcF9yaW5nLT5kZXFfc2VnOyBjdXJfdHJiICE9IGV2ZW50X3RyYjsKQEAgLTE3NTUsNyArMTc2Myw3IEBACiAJCQlUUkJfTEVOKGV2ZW50LT50cmFuc2Zlcl9sZW4pOwogCiAJCWlmICh0cmJfY29tcF9jb2RlICE9IENPTVBfU1RPUF9JTlZBTCkgewotCQkJdGQtPnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaWR4XS5hY3R1YWxfbGVuZ3RoID0gbGVuOworCQkJZnJhbWUtPmFjdHVhbF9sZW5ndGggPSBsZW47CiAJCQl0ZC0+dXJiLT5hY3R1YWxfbGVuZ3RoICs9IGxlbjsKIAkJfQogCX0KQEAgLTE3NjYsNiArMTc3NCwzNSBAQAogCXJldHVybiBmaW5pc2hfdGQoeGhjaSwgdGQsIGV2ZW50X3RyYiwgZXZlbnQsIGVwLCBzdGF0dXMsIGZhbHNlKTsKIH0KIAorc3RhdGljIGludCBza2lwX2lzb2NfdGQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV90ZCAqdGQsCisJCQlzdHJ1Y3QgeGhjaV90cmFuc2Zlcl9ldmVudCAqZXZlbnQsCisJCQlzdHJ1Y3QgeGhjaV92aXJ0X2VwICplcCwgaW50ICpzdGF0dXMpCit7CisJc3RydWN0IHhoY2lfcmluZyAqZXBfcmluZzsKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYl9wcml2OworCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICpmcmFtZTsKKwlpbnQgaWR4OworCisJZXBfcmluZyA9IHhoY2lfZG1hX3RvX3RyYW5zZmVyX3JpbmcoZXAsIGV2ZW50LT5idWZmZXIpOworCXVyYl9wcml2ID0gdGQtPnVyYi0+aGNwcml2OworCWlkeCA9IHVyYl9wcml2LT50ZF9jbnQ7CisJZnJhbWUgPSAmdGQtPnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaWR4XTsKKworCS8qIFRoZSB0cmFuc2ZlciBpcyBwYXJ0bHkgZG9uZSAqLworCSpzdGF0dXMgPSAtRVhERVY7CisJZnJhbWUtPnN0YXR1cyA9IC1FWERFVjsKKworCS8qIGNhbGMgYWN0dWFsIGxlbmd0aCAqLworCWZyYW1lLT5hY3R1YWxfbGVuZ3RoID0gMDsKKworCS8qIFVwZGF0ZSByaW5nIGRlcXVldWUgcG9pbnRlciAqLworCXdoaWxlIChlcF9yaW5nLT5kZXF1ZXVlICE9IHRkLT5sYXN0X3RyYikKKwkJaW5jX2RlcSh4aGNpLCBlcF9yaW5nLCBmYWxzZSk7CisJaW5jX2RlcSh4aGNpLCBlcF9yaW5nLCBmYWxzZSk7CisKKwlyZXR1cm4gZmluaXNoX3RkKHhoY2ksIHRkLCBOVUxMLCBldmVudCwgZXAsIHN0YXR1cywgdHJ1ZSk7Cit9CisKIC8qCiAgKiBQcm9jZXNzIGJ1bGsgYW5kIGludGVycnVwdCB0ZHMsIHVwZGF0ZSB1cmIgc3RhdHVzIGFuZCBhY3R1YWxfbGVuZ3RoLgogICovCkBAIC0yMDI0LDM2ICsyMDYxLDQyIEBACiAJCX0KIAogCQl0ZCA9IGxpc3RfZW50cnkoZXBfcmluZy0+dGRfbGlzdC5uZXh0LCBzdHJ1Y3QgeGhjaV90ZCwgdGRfbGlzdCk7CisKIAkJLyogSXMgdGhpcyBhIFRSQiBpbiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBURD8gKi8KIAkJZXZlbnRfc2VnID0gdHJiX2luX3RkKGVwX3JpbmctPmRlcV9zZWcsIGVwX3JpbmctPmRlcXVldWUsCiAJCQkJdGQtPmxhc3RfdHJiLCBldmVudF9kbWEpOwotCQlpZiAoZXZlbnRfc2VnICYmIGVwLT5za2lwKSB7CisJCWlmICghZXZlbnRfc2VnKSB7CisJCQlpZiAoIWVwLT5za2lwIHx8CisJCQkgICAgIXVzYl9lbmRwb2ludF94ZmVyX2lzb2MoJnRkLT51cmItPmVwLT5kZXNjKSkgeworCQkJCS8qIEhDIGlzIGJ1c3RlZCwgZ2l2ZSB1cCEgKi8KKwkJCQl4aGNpX2Vycih4aGNpLAorCQkJCQkiRVJST1IgVHJhbnNmZXIgZXZlbnQgVFJCIERNQSBwdHIgbm90ICIKKwkJCQkJInBhcnQgb2YgY3VycmVudCBURFxuIik7CisJCQkJcmV0dXJuIC1FU0hVVERPV047CisJCQl9CisKKwkJCXJldCA9IHNraXBfaXNvY190ZCh4aGNpLCB0ZCwgZXZlbnQsIGVwLCAmc3RhdHVzKTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCisJCWlmIChlcC0+c2tpcCkgewogCQkJeGhjaV9kYmcoeGhjaSwgIkZvdW5kIHRkLiBDbGVhciBza2lwIGZsYWcuXG4iKTsKIAkJCWVwLT5za2lwID0gZmFsc2U7CiAJCX0KLQkJaWYgKCFldmVudF9zZWcgJiYKLQkJICAgKCFlcC0+c2tpcCB8fCAhdXNiX2VuZHBvaW50X3hmZXJfaXNvYygmdGQtPnVyYi0+ZXAtPmRlc2MpKSkgewotCQkJLyogSEMgaXMgYnVzdGVkLCBnaXZlIHVwISAqLwotCQkJeGhjaV9lcnIoeGhjaSwgIkVSUk9SIFRyYW5zZmVyIGV2ZW50IFRSQiBETUEgcHRyIG5vdCAiCi0JCQkJCSJwYXJ0IG9mIGN1cnJlbnQgVERcbiIpOwotCQkJcmV0dXJuIC1FU0hVVERPV047Ci0JCX0KIAotCQlpZiAoZXZlbnRfc2VnKSB7Ci0JCQlldmVudF90cmIgPSAmZXZlbnRfc2VnLT50cmJzWyhldmVudF9kbWEgLQotCQkJCQkgZXZlbnRfc2VnLT5kbWEpIC8gc2l6ZW9mKCpldmVudF90cmIpXTsKLQkJCS8qCi0JCQkgKiBOby1vcCBUUkIgc2hvdWxkIG5vdCB0cmlnZ2VyIGludGVycnVwdHMuCi0JCQkgKiBJZiBldmVudF90cmIgaXMgYSBuby1vcCBUUkIsIGl0IG1lYW5zIHRoZQotCQkJICogY29ycmVzcG9uZGluZyBURCBoYXMgYmVlbiBjYW5jZWxsZWQuIEp1c3QgaWdub3JlCi0JCQkgKiB0aGUgVEQuCi0JCQkgKi8KLQkJCWlmICgoZXZlbnRfdHJiLT5nZW5lcmljLmZpZWxkWzNdICYgVFJCX1RZUEVfQklUTUFTSykKLQkJCQkJID09IFRSQl9UWVBFKFRSQl9UUl9OT09QKSkgewotCQkJCXhoY2lfZGJnKHhoY2ksICJldmVudF90cmIgaXMgYSBuby1vcCBUUkIuICIKLQkJCQkJCSJTa2lwIGl0XG4iKTsKLQkJCQlnb3RvIGNsZWFudXA7Ci0JCQl9CisJCWV2ZW50X3RyYiA9ICZldmVudF9zZWctPnRyYnNbKGV2ZW50X2RtYSAtIGV2ZW50X3NlZy0+ZG1hKSAvCisJCQkJCQlzaXplb2YoKmV2ZW50X3RyYildOworCQkvKgorCQkgKiBOby1vcCBUUkIgc2hvdWxkIG5vdCB0cmlnZ2VyIGludGVycnVwdHMuCisJCSAqIElmIGV2ZW50X3RyYiBpcyBhIG5vLW9wIFRSQiwgaXQgbWVhbnMgdGhlCisJCSAqIGNvcnJlc3BvbmRpbmcgVEQgaGFzIGJlZW4gY2FuY2VsbGVkLiBKdXN0IGlnbm9yZQorCQkgKiB0aGUgVEQuCisJCSAqLworCQlpZiAoKGV2ZW50X3RyYi0+Z2VuZXJpYy5maWVsZFszXSAmIFRSQl9UWVBFX0JJVE1BU0spCisJCQkJID09IFRSQl9UWVBFKFRSQl9UUl9OT09QKSkgeworCQkJeGhjaV9kYmcoeGhjaSwKKwkJCQkgImV2ZW50X3RyYiBpcyBhIG5vLW9wIFRSQi4gU2tpcCBpdFxuIik7CisJCQlnb3RvIGNsZWFudXA7CiAJCX0KIAogCQkvKiBOb3cgdXBkYXRlIHRoZSB1cmIncyBhY3R1YWxfbGVuZ3RoIGFuZCBnaXZlIGJhY2sgdG8KQEAgLTMxMjYsNiArMzE2OSwxMiBAQAogCQl9CiAJfQogCisJaWYgKHhoY2lfdG9faGNkKHhoY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMgPT0gMCkgeworCQlpZiAoeGhjaS0+cXVpcmtzICYgWEhDSV9BTURfUExMX0ZJWCkKKwkJCXVzYl9hbWRfcXVpcmtfcGxsX2Rpc2FibGUoKTsKKwl9CisJeGhjaV90b19oY2QoeGhjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcysrOworCiAJZ2l2ZWJhY2tfZmlyc3RfdHJiKHhoY2ksIHNsb3RfaWQsIGVwX2luZGV4LCB1cmItPnN0cmVhbV9pZCwKIAkJCXN0YXJ0X2N5Y2xlLCBzdGFydF90cmIpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwppbmRleCA5YTM2NDVmLi44MWI5NzZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwpAQCAtNTUwLDYgKzU1MCw5IEBACiAJZGVsX3RpbWVyX3N5bmMoJnhoY2ktPmV2ZW50X3JpbmdfdGltZXIpOwogI2VuZGlmCiAKKwlpZiAoeGhjaS0+cXVpcmtzICYgWEhDSV9BTURfUExMX0ZJWCkKKwkJdXNiX2FtZF9kZXZfcHV0KCk7CisKIAl4aGNpX2RiZyh4aGNpLCAiLy8gRGlzYWJsaW5nIGV2ZW50IHJpbmcgaW50ZXJydXB0c1xuIik7CiAJdGVtcCA9IHhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPm9wX3JlZ3MtPnN0YXR1cyk7CiAJeGhjaV93cml0ZWwoeGhjaSwgdGVtcCAmIH5TVFNfRUlOVCwgJnhoY2ktPm9wX3JlZ3MtPnN0YXR1cyk7CkBAIC03NDEsNyArNzQ0LDcgQEAKIAlpbnQJCQlyZXR2YWw7CiAKIAkvKiBXYWl0IGEgYml0IGlmIGVpdGhlciBvZiB0aGUgcm9vdGh1YnMgbmVlZCB0byBzZXR0bGUgZnJvbSB0aGUKLQkgKiB0cmFuc2lzdGlvbiBpbnRvIGJ1cyBzdXNwZW5kLgorCSAqIHRyYW5zaXRpb24gaW50byBidXMgc3VzcGVuZC4KIAkgKi8KIAlpZiAodGltZV9iZWZvcmUoamlmZmllcywgeGhjaS0+YnVzX3N0YXRlWzBdLm5leHRfc3RhdGVjaGFuZ2UpIHx8CiAJCQl0aW1lX2JlZm9yZShqaWZmaWVzLApAQCAtNzcxLDcgKzc3NCw5IEBACiAKIAkvKiBJZiByZXN0b3JlIG9wZXJhdGlvbiBmYWlscywgcmUtaW5pdGlhbGl6ZSB0aGUgSEMgZHVyaW5nIHJlc3VtZSAqLwogCWlmICgodGVtcCAmIFNUU19TUkUpIHx8IGhpYmVybmF0ZWQpIHsKLQkJdXNiX3Jvb3RfaHViX2xvc3RfcG93ZXIoaGNkLT5zZWxmLnJvb3RfaHViKTsKKwkJLyogTGV0IHRoZSBVU0IgY29yZSBrbm93IF9ib3RoXyByb290aHVicyBsb3N0IHBvd2VyLiAqLworCQl1c2Jfcm9vdF9odWJfbG9zdF9wb3dlcih4aGNpLT5tYWluX2hjZC0+c2VsZi5yb290X2h1Yik7CisJCXVzYl9yb290X2h1Yl9sb3N0X3Bvd2VyKHhoY2ktPnNoYXJlZF9oY2QtPnNlbGYucm9vdF9odWIpOwogCiAJCXhoY2lfZGJnKHhoY2ksICJTdG9wIEhDRFxuIik7CiAJCXhoY2lfaGFsdCh4aGNpKTsKQEAgLTIwNzIsNyArMjA3Nyw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAl2ZGV2ID0geGhjaS0+ZGV2c1t1ZGV2LT5zbG90X2lkXTsKLQkvKiBNYXJrIGVhY2ggZW5kcG9pbnQgYXMgYmVpbmcgaW4gdHJhbnNpc3Rpb24sIHNvCisJLyogTWFyayBlYWNoIGVuZHBvaW50IGFzIGJlaW5nIGluIHRyYW5zaXRpb24sIHNvCiAJICogeGhjaV91cmJfZW5xdWV1ZSgpIHdpbGwgcmVqZWN0IGFsbCBVUkJzLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fZXBzOyBpKyspIHsKQEAgLTIzODYsMTAgKzIzOTEsMTggQEAKIAkvKiBFdmVyeXRoaW5nIGJ1dCBlbmRwb2ludCAwIGlzIGRpc2FibGVkLCBzbyBmcmVlIG9yIGNhY2hlIHRoZSByaW5ncy4gKi8KIAlsYXN0X2ZyZWVkX2VuZHBvaW50ID0gMTsKIAlmb3IgKGkgPSAxOyBpIDwgMzE7ICsraSkgewotCQlpZiAoIXZpcnRfZGV2LT5lcHNbaV0ucmluZykKLQkJCWNvbnRpbnVlOwotCQl4aGNpX2ZyZWVfb3JfY2FjaGVfZW5kcG9pbnRfcmluZyh4aGNpLCB2aXJ0X2RldiwgaSk7Ci0JCWxhc3RfZnJlZWRfZW5kcG9pbnQgPSBpOworCQlzdHJ1Y3QgeGhjaV92aXJ0X2VwICplcCA9ICZ2aXJ0X2Rldi0+ZXBzW2ldOworCisJCWlmIChlcC0+ZXBfc3RhdGUgJiBFUF9IQVNfU1RSRUFNUykgeworCQkJeGhjaV9mcmVlX3N0cmVhbV9pbmZvKHhoY2ksIGVwLT5zdHJlYW1faW5mbyk7CisJCQllcC0+c3RyZWFtX2luZm8gPSBOVUxMOworCQkJZXAtPmVwX3N0YXRlICY9IH5FUF9IQVNfU1RSRUFNUzsKKwkJfQorCisJCWlmIChlcC0+cmluZykgeworCQkJeGhjaV9mcmVlX29yX2NhY2hlX2VuZHBvaW50X3JpbmcoeGhjaSwgdmlydF9kZXYsIGkpOworCQkJbGFzdF9mcmVlZF9lbmRwb2ludCA9IGk7CisJCX0KIAl9CiAJeGhjaV9kYmcoeGhjaSwgIk91dHB1dCBjb250ZXh0IGFmdGVyIHN1Y2Nlc3NmdWwgcmVzZXQgZGV2aWNlIGNtZDpcbiIpOwogCXhoY2lfZGJnX2N0eCh4aGNpLCB2aXJ0X2Rldi0+b3V0X2N0eCwgbGFzdF9mcmVlZF9lbmRwb2ludCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oCmluZGV4IDcxMWRlMjUuLmJhMWJlNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oCkBAIC0zMCw2ICszMCw3IEBACiAKIC8qIENvZGUgc2hhcmluZyBiZXR3ZWVuIHBjaS1xdWlya3MgYW5kIHhoY2kgaGNkICovCiAjaW5jbHVkZQkieGhjaS1leHQtY2Fwcy5oIgorI2luY2x1ZGUgInBjaS1xdWlya3MuaCIKIAogLyogeEhDSSBQQ0kgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgKi8KICNkZWZpbmUgWEhDSV9TQlJOX09GRlNFVAkoMHg2MCkKQEAgLTIzMiw3ICsyMzMsNyBAQAogICogbm90aWZpY2F0aW9uIHR5cGUgdGhhdCBtYXRjaGVzIGEgYml0IHNldCBpbiB0aGlzIGJpdCBmaWVsZC4KICAqLwogI2RlZmluZQlERVZfTk9URV9NQVNLCQkoMHhmZmZmKQotI2RlZmluZSBFTkFCTEVfREVWX05PVEUoeCkJKDEgPDwgeCkKKyNkZWZpbmUgRU5BQkxFX0RFVl9OT1RFKHgpCSgxIDw8ICh4KSkKIC8qIE1vc3Qgb2YgdGhlIGRldmljZSBub3RpZmljYXRpb24gdHlwZXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGVidWcuCiAgKiBTVyBkb2VzIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byBmdW5jdGlvbiB3YWtlIG5vdGlmaWNhdGlvbnMuCiAgKi8KQEAgLTM0OCw2ICszNDksOSBAQAogLyogSW5pdGlhdGUgYSB3YXJtIHBvcnQgcmVzZXQgLSBjb21wbGV0ZSB3aGVuIFBPUlRfV1JDIGlzICcxJyAqLwogI2RlZmluZSBQT1JUX1dSCQkoMSA8PCAzMSkKIAorLyogV2UgbWFyayBkdXBsaWNhdGUgZW50cmllcyB3aXRoIC0xICovCisjZGVmaW5lIERVUExJQ0FURV9FTlRSWSAoKHU4KSgtMSkpCisKIC8qIFBvcnQgUG93ZXIgTWFuYWdlbWVudCBTdGF0dXMgYW5kIENvbnRyb2wgLSBwb3J0X3Bvd2VyX2Jhc2UgYml0bWFza3MgKi8KIC8qIEluYWN0aXZpdHkgdGltZXIgdmFsdWUgZm9yIHRyYW5zaXRpb25zIGludG8gVTEsIGluIG1pY3Jvc2Vjb25kcy4KICAqIFRpbWVvdXQgY2FuIGJlIHVwIHRvIDEyN3VzLiAgMHhGRiBtZWFucyBhbiBpbmZpbml0ZSB0aW1lb3V0LgpAQCAtNjAxLDExICs2MDUsMTEgQEAKICNkZWZpbmUgRVBfU1RBVEVfU1RPUFBFRAkzCiAjZGVmaW5lIEVQX1NUQVRFX0VSUk9SCQk0CiAvKiBNdWx0IC0gTWF4IG51bWJlciBvZiBidXJ0c3Qgd2l0aGluIGFuIGludGVydmFsLCBpbiBFUCBjb21wYW5pb24gZGVzYy4gKi8KLSNkZWZpbmUgRVBfTVVMVChwKQkJKChwICYgMHgzKSA8PCA4KQorI2RlZmluZSBFUF9NVUxUKHApCQkoKChwKSAmIDB4MykgPDwgOCkKIC8qIGJpdHMgMTA6MTQgYXJlIE1heCBQcmltYXJ5IFN0cmVhbXMgKi8KIC8qIGJpdCAxNSBpcyBMaW5lYXIgU3RyZWFtIEFycmF5ICovCiAvKiBJbnRlcnZhbCAtIHBlcmlvZCBiZXR3ZWVuIHJlcXVlc3RzIHRvIGFuIGVuZHBvaW50IC0gMTI1dSBpbmNyZW1lbnRzLiAqLwotI2RlZmluZSBFUF9JTlRFUlZBTChwKQkJKChwICYgMHhmZikgPDwgMTYpCisjZGVmaW5lIEVQX0lOVEVSVkFMKHApCQkoKChwKSAmIDB4ZmYpIDw8IDE2KQogI2RlZmluZSBFUF9JTlRFUlZBTF9UT19VRlJBTUVTKHApCQkoMSA8PCAoKChwKSA+PiAxNikgJiAweGZmKSkKICNkZWZpbmUgRVBfTUFYUFNUUkVBTVNfTUFTSwkoMHgxZiA8PCAxMCkKICNkZWZpbmUgRVBfTUFYUFNUUkVBTVMocCkJKCgocCkgPDwgMTApICYgRVBfTUFYUFNUUkVBTVNfTUFTSykKQEAgLTg3Myw3ICs4NzcsNyBAQAogI2RlZmluZSBDT01QX0NNRF9BQk9SVAkyNQogLyogU3RvcHBlZCAtIHRyYW5zZmVyIHdhcyB0ZXJtaW5hdGVkIGJ5IGEgc3RvcCBlbmRwb2ludCBjb21tYW5kICovCiAjZGVmaW5lIENPTVBfU1RPUAkyNgotLyogU2FtZSBhcyBDT01QX0VQX1NUT1BQRUQsIGJ1dCB0aGUgdHJhbnNmZXJlZCBsZW5ndGggaW4gdGhlIGV2ZW50IGlzIGludmFsaWQgKi8KKy8qIFNhbWUgYXMgQ09NUF9FUF9TVE9QUEVELCBidXQgdGhlIHRyYW5zZmVycmVkIGxlbmd0aCBpbiB0aGUgZXZlbnQgaXMgaW52YWxpZCAqLwogI2RlZmluZSBDT01QX1NUT1BfSU5WQUwJMjcKIC8qIENvbnRyb2wgQWJvcnQgRXJyb3IgLSBEZWJ1ZyBDYXBhYmlsaXR5IC0gY29udHJvbCBwaXBlIGFib3J0ZWQgKi8KICNkZWZpbmUgQ09NUF9EQkdfQUJPUlQJMjgKQEAgLTEyNzYsNiArMTI4MCw3IEBACiAjZGVmaW5lCVhIQ0lfTElOS19UUkJfUVVJUksJKDEgPDwgMCkKICNkZWZpbmUgWEhDSV9SRVNFVF9FUF9RVUlSSwkoMSA8PCAxKQogI2RlZmluZSBYSENJX05FQ19IT1NUCQkoMSA8PCAyKQorI2RlZmluZSBYSENJX0FNRF9QTExfRklYCSgxIDw8IDMpCiAJLyogVGhlcmUgYXJlIHR3byByb290aHVicyB0byBrZWVwIHRyYWNrIG9mIGJ1cyBzdXNwZW5kIGluZm8gZm9yICovCiAJc3RydWN0IHhoY2lfYnVzX3N0YXRlICAgYnVzX3N0YXRlWzJdOwogCS8qIElzIGVhY2ggeEhDSSByb290aHViIHBvcnQgYSBVU0IgMy4wLCBVU0IgMi4wLCBvciBVU0IgMS4xIHBvcnQ/ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5jIGIvZHJpdmVycy91c2IvaW1hZ2UvbWljcm90ZWsuYwppbmRleCBjOTBjODlkLi5hMDAzNzk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5jCisrKyBiL2RyaXZlcnMvdXNiL2ltYWdlL21pY3JvdGVrLmMKQEAgLTY5LDcgKzY5LDcgQEAKICAqCTIwMDAwNTEzIGFkZGVkIElEcyBmb3IgYWxsIHByb2R1Y3RzIHN1cHBvcnRlZCBieSBXaW5kb3dzIGRyaXZlciAoam9obikKICAqCTIwMDAwNTE0IFJld3JvdGUgbXRzX3Njc2lfcXVldWVjb21tYW5kIHRvIHVzZSBVUkJzIChqb2huKQogICoJMjAwMDA1MTQgVmVyc2lvbiAwLjAuOGoKLSAqICAgICAgMjAwMDA1MTQgRml4IHJlcG9ydGluZyBvZiBub24tZXhpc3RhbnQgZGV2aWNlcyB0byBTQ1NJIGxheWVyIChqb2huKQorICogICAgICAyMDAwMDUxNCBGaXggcmVwb3J0aW5nIG9mIG5vbi1leGlzdGVudCBkZXZpY2VzIHRvIFNDU0kgbGF5ZXIgKGpvaG4pCiAgKgkyMDAwMDUxNCBBZGRlZCBNVFNfREVCVUdfSU5UIChqb2huKQogICoJMjAwMDA1MTQgQ2hhbmdlZCAidXNiLW1pY3JvdGVrIiB0byAibWljcm90ZWsiIGZvciBjb25zaXN0ZW5jeSAoam9obikKICAqCTIwMDAwNTE0IFN0dXBpZCBidWcgZml4ZXMgKGpvaG4pCkBAIC01NTcsMTQgKzU1NywxNCBAQAogCiAJaWYgKCAhbWVtY21wKCBzcmItPmNtbmQsIG10c19yZWFkX2ltYWdlX3NpZywgbXRzX3JlYWRfaW1hZ2Vfc2lnX2xlbiApCiApIHsgCQlwaXBlID0gdXNiX3JjdmJ1bGtwaXBlKGRlc2MtPnVzYl9kZXYsZGVzYy0+ZXBfaW1hZ2UpOwotCQlNVFNfREVCVUcoICJ0cmFuc2ZlcmluZyBmcm9tIGRlc2MtPmVwX2ltYWdlID09ICVkXG4iLAorCQlNVFNfREVCVUcoICJ0cmFuc2ZlcnJpbmcgZnJvbSBkZXNjLT5lcF9pbWFnZSA9PSAlZFxuIiwKIAkJCSAgIChpbnQpZGVzYy0+ZXBfaW1hZ2UgKTsKIAl9IGVsc2UgaWYgKCBNVFNfRElSRUNUSU9OX0lTX0lOKHNyYi0+Y21uZFswXSkgKSB7CiAJCQlwaXBlID0gdXNiX3JjdmJ1bGtwaXBlKGRlc2MtPnVzYl9kZXYsZGVzYy0+ZXBfcmVzcG9uc2UpOwotCQkJTVRTX0RFQlVHKCAidHJhbnNmZXJpbmcgZnJvbSBkZXNjLT5lcF9yZXNwb25zZSA9PSAlZFxuIiwKKwkJCU1UU19ERUJVRyggInRyYW5zZmVycmluZyBmcm9tIGRlc2MtPmVwX3Jlc3BvbnNlID09ICVkXG4iLAogCQkJCSAgIChpbnQpZGVzYy0+ZXBfcmVzcG9uc2UpOwogCX0gZWxzZSB7Ci0JCU1UU19ERUJVRygidHJhbnNmZXJpbmcgdG8gZGVzYy0+ZXBfb3V0ID09ICVkXG4iLAorCQlNVFNfREVCVUcoInRyYW5zZmVycmluZyB0byBkZXNjLT5lcF9vdXQgPT0gJWRcbiIsCiAJCQkgIChpbnQpZGVzYy0+ZXBfb3V0KTsKIAkJcGlwZSA9IHVzYl9zbmRidWxrcGlwZShkZXNjLT51c2JfZGV2LGRlc2MtPmVwX291dCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9pb3dhcnJpb3IuYyBiL2RyaXZlcnMvdXNiL21pc2MvaW93YXJyaW9yLmMKaW5kZXggZTU3M2U0Ny4uYTIxOTBiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9pb3dhcnJpb3IuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2lvd2Fycmlvci5jCkBAIC00MCw3ICs0MCw3IEBACiAjaWZkZWYgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUwogI2RlZmluZSBJT1dBUlJJT1JfTUlOT1JfQkFTRQkwCiAjZWxzZQotI2RlZmluZSBJT1dBUlJJT1JfTUlOT1JfQkFTRQkyMDgJLy8gU0tFTEVUT05fTUlOT1JfQkFTRSAxOTIgKyAxNiwgbm90IG9mZmljYWwgeWV0CisjZGVmaW5lIElPV0FSUklPUl9NSU5PUl9CQVNFCTIwOAkvLyBTS0VMRVRPTl9NSU5PUl9CQVNFIDE5MiArIDE2LCBub3Qgb2ZmaWNpYWwgeWV0CiAjZW5kaWYKIAogLyogaW50ZXJydXB0IGlucHV0IHF1ZXVlIHNpemUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwppbmRleCA0Y2JiN2U0Li43NDA3M2IzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCkBAIC0xNCw3ICsxNCw3IEBACiAJc2VsZWN0IFRXTDQwMzBfVVNCIGlmIE1BQ0hfT01BUF8zNDMwU0RQCiAJc2VsZWN0IFRXTDYwMzBfVVNCIGlmIE1BQ0hfT01BUF80NDMwU0RQIHx8IE1BQ0hfT01BUDRfUEFOREEKIAlzZWxlY3QgVVNCX09UR19VVElMUwotCXRyaXN0YXRlICdJbnZlbnRyYSBIaWdoc3BlZWQgRHVhbCBSb2xlIENvbnRyb2xsZXIgKFRJLCBBREksIC4uLiknCisJYm9vbCAnSW52ZW50cmEgSGlnaHNwZWVkIER1YWwgUm9sZSBDb250cm9sbGVyIChUSSwgQURJLCAuLi4pJwogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91ciBzeXN0ZW0gaGFzIGEgZHVhbCByb2xlIGhpZ2ggc3BlZWQgVVNCCiAJICBjb250cm9sbGVyIGJhc2VkIG9uIHRoZSBNZW50b3IgR3JhcGhpY3Mgc2lsaWNvbiBJUC4gIFRoZW4KQEAgLTMwLDggKzMwLDggQEAKIAogCSAgSWYgeW91IGRvIG5vdCBrbm93IHdoYXQgdGhpcyBpcywgcGxlYXNlIHNheSBOLgogCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOyB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAibXVzYi1oZHJjIi4KKyMJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOyB0aGUKKyMJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgIm11c2ItaGRyYyIuCiAKIGNob2ljZQogCXByb21wdCAiUGxhdGZvcm0gR2x1ZSBMYXllciIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYyBiL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYwppbmRleCA1MjMxMmU4Li44ZTJhMWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAogI2luY2x1ZGUgIm11c2JfY29yZS5oIgorI2luY2x1ZGUgIm11c2Joc2RtYS5oIgogI2luY2x1ZGUgImJsYWNrZmluLmgiCiAKIHN0cnVjdCBiZmluX2dsdWUgewpAQCAtMzMyLDYgKzMzMywyNyBAQAogCXJldHVybiAtRUlPOwogfQogCitzdGF0aWMgaW50IGJmaW5fbXVzYl9hZGp1c3RfY2hhbm5lbF9wYXJhbXMoc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsLAorCQkJCXUxNiBwYWNrZXRfc3osIHU4ICptb2RlLAorCQkJCWRtYV9hZGRyX3QgKmRtYV9hZGRyLCB1MzIgKmxlbikKK3sKKwlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqbXVzYl9jaGFubmVsID0gY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCisJLyoKKwkgKiBBbm9tYWx5IDA1MDAwNDUwIG1pZ2h0IGNhdXNlIGRhdGEgY29ycnVwdGlvbiB3aGVuIHVzaW5nIERNQQorCSAqIE1PREUgMSB0cmFuc21pdHMgd2l0aCBzaG9ydCBwYWNrZXQuICBTbyB0byB3b3JrIGFyb3VuZCB0aGlzLAorCSAqIHdlIHRydW5jYXRlIGFsbCBNT0RFIDEgdHJhbnNmZXJzIGRvd24gdG8gYSBtdWx0aXBsZSBvZiB0aGUKKwkgKiBtYXggcGFja2V0IHNpemUsIGFuZCB0aGVuIGRvIHRoZSBsYXN0IHNob3J0IHBhY2tldCB0cmFuc2ZlcgorCSAqIChpZiB0aGVyZSBpcyBhbnkpIHVzaW5nIE1PREUgMC4KKwkgKi8KKwlpZiAoQU5PTUFMWV8wNTAwMDQ1MCkgeworCQlpZiAobXVzYl9jaGFubmVsLT50cmFuc21pdCAmJiAqbW9kZSA9PSAxKQorCQkJKmxlbiA9ICpsZW4gLSAoKmxlbiAlIHBhY2tldF9zeik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIGJmaW5fbXVzYl9yZWdfaW5pdChzdHJ1Y3QgbXVzYiAqbXVzYikKIHsKIAlpZiAoQU5PTUFMWV8wNTAwMDM0NikgewpAQCAtNDMwLDYgKzQ1Miw4IEBACiAKIAkudmJ1c19zdGF0dXMJPSBiZmluX211c2JfdmJ1c19zdGF0dXMsCiAJLnNldF92YnVzCT0gYmZpbl9tdXNiX3NldF92YnVzLAorCisJLmFkanVzdF9jaGFubmVsX3BhcmFtcyA9IGJmaW5fbXVzYl9hZGp1c3RfY2hhbm5lbF9wYXJhbXMsCiB9OwogCiBzdGF0aWMgdTY0IGJmaW5fZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmMgYi9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmMKaW5kZXggZGU1NWEzYy4uYWI0MzRmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9jcHBpX2RtYS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuYwpAQCAtNTk3LDEyICs1OTcsMTIgQEAKIAkJbGVuZ3RoID0gbWluKG5fYmRzICogbWF4cGFja2V0LCBsZW5ndGgpOwogCX0KIAotCURCRyg0LCAiVFggRE1BJWQsIHBrdFN6ICVkICVzIGJkcyAlZCBkbWEgMHgleCBsZW4gJXVcbiIsCisJREJHKDQsICJUWCBETUElZCwgcGt0U3ogJWQgJXMgYmRzICVkIGRtYSAweCVsbHggbGVuICV1XG4iLAogCQkJdHgtPmluZGV4LAogCQkJbWF4cGFja2V0LAogCQkJcm5kaXMgPyAicm5kaXMiIDogInRyYW5zcGFyZW50IiwKIAkJCW5fYmRzLAotCQkJYWRkciwgbGVuZ3RoKTsKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpYWRkciwgbGVuZ3RoKTsKIAogCWNwcGlfcm5kaXNfdXBkYXRlKHR4LCAwLCBtdXNiLT5jdHJsX2Jhc2UsIHJuZGlzKTsKIApAQCAtODIwLDcgKzgyMCw3IEBACiAJbGVuZ3RoID0gbWluKG5fYmRzICogbWF4cGFja2V0LCBsZW5ndGgpOwogCiAJREJHKDQsICJSWCBETUElZCBzZWcsIG1heHAgJWQgJXMgYmRzICVkIChjbnQgJWQpICIKLQkJCSJkbWEgMHgleCBsZW4gJXUgJXUvJXVcbiIsCisJCQkiZG1hIDB4JWxseCBsZW4gJXUgJXUvJXVcbiIsCiAJCQlyeC0+aW5kZXgsIG1heHBhY2tldCwKIAkJCW9uZXBhY2tldAogCQkJCT8gKGlzX3JuZGlzID8gInJuZGlzIiA6ICJvbmVwYWNrZXQiKQpAQCAtODI5LDcgKzgyOSw4IEBACiAJCQltdXNiX3JlYWRsKHRpYmFzZSwKIAkJCQlEQVZJTkNJX1JYQ1BQSV9CVUZDTlQwX1JFRyArIChyeC0+aW5kZXggKiA0KSkKIAkJCQkJJiAweGZmZmYsCi0JCQlhZGRyLCBsZW5ndGgsIHJ4LT5jaGFubmVsLmFjdHVhbF9sZW4sIHJ4LT5idWZfbGVuKTsKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpYWRkciwgbGVuZ3RoLAorCQkJcngtPmNoYW5uZWwuYWN0dWFsX2xlbiwgcngtPmJ1Zl9sZW4pOwogCiAJLyogb25seSBxdWV1ZSBvbmUgc2VnbWVudCBhdCBhIHRpbWUsIHNpbmNlIHRoZSBoYXJkd2FyZSBwcmV2ZW50cwogCSAqIGNvcnJlY3QgcXVldWUgc2h1dGRvd24gYWZ0ZXIgdW5leHBlY3RlZCBzaG9ydCBwYWNrZXRzCkBAIC0xMDM5LDkgKzEwNDAsOSBAQAogCQlpZiAoIWNvbXBsZXRlZCAmJiAoYmQtPmh3X29wdGlvbnMgJiBDUFBJX09XTl9TRVQpKQogCQkJYnJlYWs7CiAKLQkJREJHKDUsICJDL1JYQkQgJTA4eDogbnh0ICUwOHggYnVmICUwOHggIgorCQlEQkcoNSwgIkMvUlhCRCAlbGx4OiBueHQgJTA4eCBidWYgJTA4eCAiCiAJCQkib2ZmLmxlbiAlMDh4IG9wdC5sZW4gJTA4eCAoJWQpXG4iLAotCQkJYmQtPmRtYSwgYmQtPmh3X25leHQsIGJkLT5od19idWZwLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyliZC0+ZG1hLCBiZC0+aHdfbmV4dCwgYmQtPmh3X2J1ZnAsCiAJCQliZC0+aHdfb2ZmX2xlbiwgYmQtPmh3X29wdGlvbnMsCiAJCQlyeC0+Y2hhbm5lbC5hY3R1YWxfbGVuKTsKIApAQCAtMTExMSwxMSArMTExMiwxMiBAQAogCQltdXNiX2VwX3NlbGVjdChjcHBpLT5tcmVncywgcngtPmluZGV4ICsgMSk7CiAJCWNzciA9IG11c2JfcmVhZHcocmVncywgTVVTQl9SWENTUik7CiAJCWlmIChjc3IgJiBNVVNCX1JYQ1NSX0RNQUVOQUIpIHsKLQkJCURCRyg0LCAibGlzdCVkICVwLyVwLCBsYXN0ICUwOHglcywgY3NyICUwNHhcbiIsCisJCQlEQkcoNCwgImxpc3QlZCAlcC8lcCwgbGFzdCAlbGx4JXMsIGNzciAlMDR4XG4iLAogCQkJCXJ4LT5pbmRleCwKIAkJCQlyeC0+aGVhZCwgcngtPnRhaWwsCiAJCQkJcngtPmxhc3RfcHJvY2Vzc2VkCi0JCQkJCT8gcngtPmxhc3RfcHJvY2Vzc2VkLT5kbWEKKwkJCQkJPyAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJCQkJcngtPmxhc3RfcHJvY2Vzc2VkLT5kbWEKIAkJCQkJOiAwLAogCQkJCWNvbXBsZXRlZCA/ICIsIGNvbXBsZXRlZCIgOiAiIiwKIAkJCQljc3IpOwpAQCAtMTE2Nyw4ICsxMTY5LDExIEBACiAJdHggPSBtdXNiX3JlYWRsKHRpYmFzZSwgREFWSU5DSV9UWENQUElfTUFTS0VEX1JFRyk7CiAJcnggPSBtdXNiX3JlYWRsKHRpYmFzZSwgREFWSU5DSV9SWENQUElfTUFTS0VEX1JFRyk7CiAKLQlpZiAoIXR4ICYmICFyeCkKKwlpZiAoIXR4ICYmICFyeCkgeworCQlpZiAoY3BwaS0+aXJxKQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gSVJRX05PTkU7CisJfQogCiAJREJHKDQsICJDUFBJIElSUSBUeCV4IFJ4JXhcbiIsIHR4LCByeCk7CiAKQEAgLTExOTksNyArMTIwNCw3IEBACiAJCSAqLwogCQlpZiAoTlVMTCA9PSBiZCkgewogCQkJREJHKDEsICJudWxsIEJEXG4iKTsKLQkJCXR4X3JhbS0+dHhfY29tcGxldGUgPSAwOworCQkJbXVzYl93cml0ZWwoJnR4X3JhbS0+dHhfY29tcGxldGUsIDAsIDApOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtMTQ1Miw3ICsxNDU3LDcgQEAKIAkJICogICAgY29tcGFyZSBtb2RlIGJ5IHdyaXRpbmcgMSB0byB0aGUgdHhfY29tcGxldGUgcmVnaXN0ZXIuCiAJCSAqLwogCQljcHBpX3Jlc2V0X3R4KHR4X3JhbSwgMSk7Ci0JCWNwcGlfY2gtPmhlYWQgPSAwOworCQljcHBpX2NoLT5oZWFkID0gTlVMTDsKIAkJbXVzYl93cml0ZWwoJnR4X3JhbS0+dHhfY29tcGxldGUsIDAsIDEpOwogCQljcHBpX2R1bXBfdHgoNSwgY3BwaV9jaCwgIiAoZG9uZSB0ZWFyZG93bikiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKaW5kZXggNjMwYWU3Zi4uZjEwZmYwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCkBAIC0xMDMwLDYgKzEwMzAsNyBAQAogCXN0cnVjdCBtdXNiCSptdXNiID0gZGV2X3RvX211c2IoJnBkZXYtPmRldik7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAorCXBtX3J1bnRpbWVfZ2V0X3N5bmMobXVzYi0+Y29udHJvbGxlcik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJm11c2ItPmxvY2ssIGZsYWdzKTsKIAltdXNiX3BsYXRmb3JtX2Rpc2FibGUobXVzYik7CiAJbXVzYl9nZW5lcmljX2Rpc2FibGUobXVzYik7CkBAIC0xMDQwLDYgKzEwNDEsNyBAQAogCW11c2Jfd3JpdGViKG11c2ItPm1yZWdzLCBNVVNCX0RFVkNUTCwgMCk7CiAJbXVzYl9wbGF0Zm9ybV9leGl0KG11c2IpOwogCisJcG1fcnVudGltZV9wdXQobXVzYi0+Y29udHJvbGxlcik7CiAJLyogRklYTUUgcG93ZXIgZG93biAqLwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaAppbmRleCA0YmQ5ZTIxLi4wZTA1M2I1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKQEAgLTI2MSw2ICsyNjEsNyBAQAogICogQHRyeV9pbGRlOgl0cmllcyB0byBpZGxlIHRoZSBJUAogICogQHZidXNfc3RhdHVzOiByZXR1cm5zIHZidXMgc3RhdHVzIGlmIHBvc3NpYmxlCiAgKiBAc2V0X3ZidXM6CWZvcmNlcyB2YnVzIHN0YXR1cworICogQGNoYW5uZWxfcHJvZ3JhbTogcHJlIGNoZWNrIGZvciBzdGFuZGFyZCBkbWEgY2hhbm5lbF9wcm9ncmFtIGZ1bmMKICAqLwogc3RydWN0IG11c2JfcGxhdGZvcm1fb3BzIHsKIAlpbnQJKCppbml0KShzdHJ1Y3QgbXVzYiAqbXVzYik7CkBAIC0yNzQsNiArMjc1LDEwIEBACiAKIAlpbnQJKCp2YnVzX3N0YXR1cykoc3RydWN0IG11c2IgKm11c2IpOwogCXZvaWQJKCpzZXRfdmJ1cykoc3RydWN0IG11c2IgKm11c2IsIGludCBvbik7CisKKwlpbnQJKCphZGp1c3RfY2hhbm5lbF9wYXJhbXMpKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCQl1MTYgcGFja2V0X3N6LCB1OCAqbW9kZSwKKwkJCQlkbWFfYWRkcl90ICpkbWFfYWRkciwgdTMyICpsZW4pOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYwppbmRleCA5ODUxOWM1Li5mNDdjMjAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jCkBAIC01MzUsNyArNTM1LDcgQEAKIAkJCWlzX2RtYSA9IDE7CiAJCQljc3IgfD0gTVVTQl9UWENTUl9QX1daQ19CSVRTOwogCQkJY3NyICY9IH4oTVVTQl9UWENTUl9ETUFFTkFCIHwgTVVTQl9UWENTUl9QX1VOREVSUlVOIHwKLQkJCQkgTVVTQl9UWENTUl9UWFBLVFJEWSk7CisJCQkJIE1VU0JfVFhDU1JfVFhQS1RSRFkgfCBNVVNCX1RYQ1NSX0FVVE9TRVQpOwogCQkJbXVzYl93cml0ZXcoZXBpbywgTVVTQl9UWENTUiwgY3NyKTsKIAkJCS8qIEVuc3VyZSB3cml0ZWJ1ZmZlciBpcyBlbXB0eS4gKi8KIAkJCWNzciA9IG11c2JfcmVhZHcoZXBpbywgTVVTQl9UWENTUik7CkBAIC0xMjk2LDcgKzEyOTYsNyBAQAogCX0KIAogCS8qIGlmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGhhdmUgdGhlIHJlcXVlc3QsIGVhc3kgLi4uICovCi0JaWYgKG11c2JfZXAtPnJlcV9saXN0Lm5leHQgIT0gJnJlcXVlc3QtPmxpc3QgfHwgbXVzYl9lcC0+YnVzeSkKKwlpZiAobXVzYl9lcC0+cmVxX2xpc3QubmV4dCAhPSAmcmVxLT5saXN0IHx8IG11c2JfZXAtPmJ1c3kpCiAJCW11c2JfZ19naXZlYmFjayhtdXNiX2VwLCByZXF1ZXN0LCAtRUNPTk5SRVNFVCk7CiAKIAkvKiAuLi4gZWxzZSBhYm9ydCB0aGUgZG1hIHRyYW5zZmVyIC4uLiAqLwpAQCAtMTg4NywxMSArMTg4Nyw5IEBACiAJCQlvdGdfc2V0X3ZidXMobXVzYi0+eGNlaXYsIDEpOwogCiAJCWhjZC0+c2VsZi51c2VzX3Bpb19mb3JfY29udHJvbCA9IDE7Ci0KLQkJaWYgKG11c2ItPnhjZWl2LT5sYXN0X2V2ZW50ID09IFVTQl9FVkVOVF9OT05FKQotCQkJcG1fcnVudGltZV9wdXQobXVzYi0+Y29udHJvbGxlcik7Ci0KIAl9CisJaWYgKG11c2ItPnhjZWl2LT5sYXN0X2V2ZW50ID09IFVTQl9FVkVOVF9OT05FKQorCQlwbV9ydW50aW1lX3B1dChtdXNiLT5jb250cm9sbGVyKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuYwppbmRleCAwMTQ0YTJkLi5kMjgxNzkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmMKQEAgLTE2OSw2ICsxNjksMTQgQEAKIAlCVUdfT04oY2hhbm5lbC0+c3RhdHVzID09IE1VU0JfRE1BX1NUQVRVU19VTktOT1dOIHx8CiAJCWNoYW5uZWwtPnN0YXR1cyA9PSBNVVNCX0RNQV9TVEFUVVNfQlVTWSk7CiAKKwkvKiBMZXQgdGFyZ2V0cyBjaGVjay90d2VhayB0aGUgYXJndW1lbnRzICovCisJaWYgKG11c2ItPm9wcy0+YWRqdXN0X2NoYW5uZWxfcGFyYW1zKSB7CisJCWludCByZXQgPSBtdXNiLT5vcHMtPmFkanVzdF9jaGFubmVsX3BhcmFtcyhjaGFubmVsLAorCQkJcGFja2V0X3N6LCAmbW9kZSwgJmRtYV9hZGRyLCAmbGVuKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCiAJLyoKIAkgKiBUaGUgRE1BIGVuZ2luZSBpbiBSVEwxLjggYW5kIGFib3ZlIGNhbm5vdCBoYW5kbGUKIAkgKiBETUEgYWRkcmVzc2VzIHRoYXQgYXJlIG5vdCBhbGlnbmVkIHRvIGEgNCBieXRlIGJvdW5kYXJ5LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9vbWFwMjQzMC5jIGIvZHJpdmVycy91c2IvbXVzYi9vbWFwMjQzMC5jCmluZGV4IDI1Y2I4YjAuLmU5ZTYwYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2Ivb21hcDI0MzAuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL29tYXAyNDMwLmMKQEAgLTI1OSw5ICsyNTksMTAgQEAKIAljYXNlIFVTQl9FVkVOVF9WQlVTOgogCQlEQkcoNCwgIlZCVVMgQ29ubmVjdFxuIik7CiAKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMKIAkJaWYgKG11c2ItPmdhZGdldF9kcml2ZXIpCiAJCQlwbV9ydW50aW1lX2dldF9zeW5jKG11c2ItPmNvbnRyb2xsZXIpOwotCisjZW5kaWYKIAkJb3RnX2luaXQobXVzYi0+eGNlaXYpOwogCQlicmVhazsKIApAQCAtMjY5LDcgKzI3MCw3IEBACiAJCURCRyg0LCAiVkJVUyBEaXNjb25uZWN0XG4iKTsKIAogI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQwotCQlpZiAoaXNfb3RnX2VuYWJsZWQobXVzYikpCisJCWlmIChpc19vdGdfZW5hYmxlZChtdXNiKSB8fCBpc19wZXJpcGhlcmFsX2VuYWJsZWQobXVzYikpCiAJCQlpZiAobXVzYi0+Z2FkZ2V0X2RyaXZlcikKICNlbmRpZgogCQkJewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi91eDUwMC5jIGIvZHJpdmVycy91c2IvbXVzYi91eDUwMC5jCmluZGV4IGQ2Mzg0ZTQuLmY3ZTA0YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvdXg1MDAuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL3V4NTAwLmMKQEAgLTkzLDYgKzkzLDggQEAKIAl9CiAKIAltdXNiLT5kZXYucGFyZW50CQk9ICZwZGV2LT5kZXY7CisJbXVzYi0+ZGV2LmRtYV9tYXNrCQk9IHBkZXYtPmRldi5kbWFfbWFzazsKKwltdXNiLT5kZXYuY29oZXJlbnRfZG1hX21hc2sJPSBwZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2s7CiAKIAlnbHVlLT5kZXYJCQk9ICZwZGV2LT5kZXY7CiAJZ2x1ZS0+bXVzYgkJCT0gbXVzYjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy9pc3AxMzAxX29tYXAuYyBiL2RyaXZlcnMvdXNiL290Zy9pc3AxMzAxX29tYXAuYwppbmRleCA4YzZmZGVmLi5lMjU3MDBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9vdGcvaXNwMTMwMV9vbWFwLmMKKysrIGIvZHJpdmVycy91c2Ivb3RnL2lzcDEzMDFfb21hcC5jCkBAIC0xNTMxLDcgKzE1MzEsNyBAQAogCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGlzcCk7CiAJaXNwLT5jbGllbnQgPSBpMmM7CiAKLQkvKiB2ZXJpZnkgdGhlIGNoaXAgKHNob3VsZG4ndCBiZSBuZWNlc2FyeSkgKi8KKwkvKiB2ZXJpZnkgdGhlIGNoaXAgKHNob3VsZG4ndCBiZSBuZWNlc3NhcnkpICovCiAJc3RhdHVzID0gaXNwMTMwMV9nZXRfdTE2KGlzcCwgSVNQMTMwMV9WRU5ET1JfSUQpOwogCWlmIChzdGF0dXMgIT0gSTJDX1ZFTkRPUl9JRF9QSElMSVBTKSB7CiAJCWRldl9kYmcoJmkyYy0+ZGV2LCAibm90IHBoaWxpcHMgaWQ6ICVkXG4iLCBzdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL2xhbmd3ZWxsX290Zy5jIGIvZHJpdmVycy91c2Ivb3RnL2xhbmd3ZWxsX290Zy5jCmluZGV4IDdmOWI4Y2QuLmU5NzNmZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL290Zy9sYW5nd2VsbF9vdGcuYworKysgYi9kcml2ZXJzL3VzYi9vdGcvbGFuZ3dlbGxfb3RnLmMKQEAgLTU4MCw3ICs1ODAsNyBAQAogCQl0aW1lID0gVEJfQlVTX1NVU1BFTkQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWRldl9kYmcobG53LT5kZXYsICJ1bmtvd24gdGltZXIsIGNhbm5vdCBlbmFibGUgaXRcbiIpOworCQlkZXZfZGJnKGxudy0+ZGV2LCAidW5rbm93biB0aW1lciwgY2Fubm90IGVuYWJsZSBpdFxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEzODEsNyArMTM4MSw3IEBACiAJCQl9IGVsc2UgaWYgKCFpb3RnLT5oc20uYV9idXNfcmVxICYmIGlvdGctPm90Zy5ob3N0ICYmCiAJCQkJCWlvdGctPm90Zy5ob3N0LT5iX2hucF9lbmFibGUpIHsKIAkJCQkvKiBJdCBpcyBub3Qgc2FmZSBlbm91Z2ggdG8gZG8gYSBmYXN0Ci0JCQkJICogdHJhbnNpc3Rpb24gZnJvbSBBX1dBSVRfQkNPTiB0bworCQkJCSAqIHRyYW5zaXRpb24gZnJvbSBBX1dBSVRfQkNPTiB0bwogCQkJCSAqIEFfU1VTUEVORCAqLwogCQkJCW1zbGVlcCgxMDAwMCk7CiAJCQkJaWYgKGlvdGctPmhzbS5hX2J1c19yZXEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvYWlyY2FibGUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJjYWJsZS5jCmluZGV4IDBkYjZhY2UuLmFiYTIwMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJjYWJsZS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJjYWJsZS5jCkBAIC0xNiw3ICsxNiw3IEBACiAgKiBXaGVuIHJlYWRpbmcgdGhlIHByb2Nlc3MgaXMgYWxtb3N0IGVxdWFsIGV4Y2VwdCB0aGF0IHRoZSBoZWFkZXIgc3RhcnRzIHdpdGgKICAqIDB4MDAgMHgyMC4KICAqCi0gKiBUaGUgZGV2aWNlIHNpbXBseSBuZWVkIHNvbWUgc3R1ZmYgdG8gdW5kZXJzdGFuZCBkYXRhIGNvbW1pbmcgZnJvbSB0aGUgdXNiCisgKiBUaGUgZGV2aWNlIHNpbXBseSBuZWVkIHNvbWUgc3R1ZmYgdG8gdW5kZXJzdGFuZCBkYXRhIGNvbWluZyBmcm9tIHRoZSB1c2IKICAqIGJ1ZmZlcjogVGhlIEZpcnN0IGFuZCBTZWNvbmQgYnl0ZSBpcyB1c2VkIGZvciBhIEhlYWRlciwgdGhlIFRoaXJkIGFuZCBGb3VydGgKICAqIHRlbGxzIHRoZSAgZGV2aWNlIHRoZSBhbW91bnQgb2YgaW5mb3JtYXRpb24gdGhlIHBhY2thZ2UgaG9sZHMuCiAgKiBQYWNrYWdlcyBhcmUgNjAgYnl0ZXMgbG9uZyBIZWFkZXIgU3R1ZmYuCkBAIC0zMCw3ICszMCw3IEBACiAgKiBvbmUuCiAgKgogICogVGhlIGRyaXZlciByZWdpc3RlcnMgaGltc2VsZiB3aXRoIHRoZSBVU0Itc2VyaWFsIGNvcmUgYW5kIHRoZSBVU0IgQ29yZS4gSSBoYWQKLSAqIHRvIGltcGxlbWVudCBhIHByb2JlIGZ1bmN0aW9uIGFnYWlucyBVU0Itc2VyaWFsLCBiZWNhdXNlIG90aGVyIHdheSwgdGhlCisgKiB0byBpbXBsZW1lbnQgYSBwcm9iZSBmdW5jdGlvbiBhZ2FpbnN0IFVTQi1zZXJpYWwsIGJlY2F1c2Ugb3RoZXIgd2F5LCB0aGUKICAqIGRyaXZlciB3YXMgYXR0YWNoaW5nIGhpbXNlbGYgdG8gYm90aCBpbnRlcmZhY2VzLiBJIGhhdmUgdHJ5ZWQgd2l0aCBkaWZmZXJlbnQKICAqIGNvbmZpZ3VyYXRpb25zIG9mIHVzYl9zZXJpYWxfZHJpdmVyIHdpdGggb3V0IGV4aXQsIG9ubHkgdGhlIHByb2JlIGZ1bmN0aW9uCiAgKiBjb3VsZCBoYW5kbGUgdGhpcyBjb3JyZWN0bHkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKaW5kZXggNGRmM2UwYy4uMGYxMWFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwpAQCAtMTAxLDcgKzEwMSw3IEBACiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MUYyKSB9LCAvKiBDMTAwNyBIRiBiYW5kIFJGSUQgY29udHJvbGxlciAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODIxOCkgfSwgLyogTGlwb3dza3kgSW5kdXN0cmllIEVsZWt0cm9uaWsgR21iSCwgSEFSUC0xICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MjJCKSB9LCAvKiBNb2RlbSBFREdFKEdTTSkgQ29tYW5kZXIgMiAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODI2QikgfSwgLyogQ3lnbmFsIEludGVncmF0ZWQgUHJvZHVjdHMsIEluYy4sIEZhc3R0cmF4IEdQUyBkZW1vc3RyYXRpb24gbW9kdWxlICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MjZCKSB9LCAvKiBDeWduYWwgSW50ZWdyYXRlZCBQcm9kdWN0cywgSW5jLiwgRmFzdHRyYXggR1BTIGRlbW9uc3RyYXRpb24gbW9kdWxlICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MjkzKSB9LCAvKiBUZWxlZ2VzeXMgRVRSWDJVU0IgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgyRjkpIH0sIC8qIFByb2N5b24gQVZTICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MzQxKSB9LCAvKiBTaWVtZW5zIE1DMzVQVSBHUFJTIE1vZGVtICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYwppbmRleCA5ODdlOWJmLi5kOTkwNmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKQEAgLTM1LDcgKzM1LDcgQEAKICAqCiAgKiAgTG9ubmllIE1lbmRleiA8ZGlnbm9tZUBnbWFpbC5jb20+CiAgKiAgMDQtMTAtMjAwNAotICoJRHJpdmVyIG1vZGlmaWVkIHRvIHN1cHBvcnQgZHluYW1pYyBsaW5lIHNldHRpbmdzLiAgVmFyaW91cyBpbXByb3ZtZW50cworICoJRHJpdmVyIG1vZGlmaWVkIHRvIHN1cHBvcnQgZHluYW1pYyBsaW5lIHNldHRpbmdzLiAgVmFyaW91cyBpbXByb3ZlbWVudHMKICAqICAgICAgYW5kIGZlYXR1cmVzLgogICoKICAqICBOZWlsIFdoZWxjaGVsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCmluZGV4IDY1OTY3YjMuLjRkZTZlZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCkBAIC0xNyw3ICsxNyw3IEBACiAgKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcwogICogZHJpdmVyCiAgKgotICogU2VlIGh0dHA6Ly9mdGRpLXVzYi1zaW8uc291cmNlZm9yZ2UubmV0IGZvciB1cHRvIGRhdGUgdGVzdGluZyBpbmZvCisgKiBTZWUgaHR0cDovL2Z0ZGktdXNiLXNpby5zb3VyY2Vmb3JnZS5uZXQgZm9yIHVwIHRvIGRhdGUgdGVzdGluZyBpbmZvCiAgKglhbmQgZXh0cmEgZG9jdW1lbnRhdGlvbgogICoKICAqIENoYW5nZSBlbnRyaWVzIGZyb20gMjAwNCBhbmQgZWFybGllciBjYW4gYmUgZm91bmQgaW4gdmVyc2lvbnMgb2YgdGhpcwpAQCAtMTUxLDYgKzE1MSw4IEBACiAgKiAvc3lzL2J1cy91c2IvZnRkaV9zaW8vbmV3X2lkLCB0aGVuIHNlbmQgcGF0Y2gvcmVwb3J0IQogICovCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfY29tYmluZWQgW10gPSB7CisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0NUSV9NSU5JX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfQ1RJX05BTk9fUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9BTUMyMzJfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9DQU5VU0JfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9DQU5EQVBURVJfUElEKSB9LApAQCAtNTI1LDYgKzUyNyw3IEBACiAJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM184X1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoSURURUNIX1ZJRCwgSURURUNIX0lEVDEyMjFVX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoT0NUX1ZJRCwgT0NUX1VTMTAxX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoT0NUX1ZJRCwgT0NUX0RLMjAxX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfSEVfVElSQTFfUElEKSwKIAkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZmdGRpX0hFX1RJUkExX3F1aXJrIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1VTQl9VSVJUX1BJRCksCkBAIC03ODcsNiArNzkwLDggQEAKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIE1BUlZFTExfT1BFTlJEX1BJRCksCiAJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmZnRkaV9qdGFnX3F1aXJrIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBIQU1FR19ITzgyMF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBIQU1FR19ITzcyMF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBIQU1FR19ITzczMF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBIQU1FR19ITzg3MF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBNSlNHX0dFTkVSSUNfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgTUpTR19TUl9SQURJT19QSUQpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKaW5kZXggYzU0M2U1NS4uZWZmZmMyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaApAQCAtMzAwLDYgKzMwMCw4IEBACiAgKiBIYW1lZyBITzgyMCBhbmQgSE84NzAgaW50ZXJmYWNlICh1c2luZyBWSUQgMHgwNDAzKQogICovCiAjZGVmaW5lIEhBTUVHX0hPODIwX1BJRAkJCTB4ZWQ3NAorI2RlZmluZSBIQU1FR19ITzczMF9QSUQJCQkweGVkNzMKKyNkZWZpbmUgSEFNRUdfSE83MjBfUElECQkJMHhlZDcyCiAjZGVmaW5lIEhBTUVHX0hPODcwX1BJRAkJCTB4ZWQ3MQogCiAvKgpAQCAtNTcyLDYgKzU3NCw3IEBACiAvKiBOb3RlOiBPQ1QgVVMxMDEgaXMgYWxzbyByZWJhZGdlZCBhcyBEaWNrIFNtaXRoIEVsZWN0cm9uaWNzIChOWikgWEg2MzgxICovCiAvKiBBbHNvIHJlYmFkZ2VkIGFzIERpY2sgU21pdGggRWxlY3Ryb25pY3MgKEF1cykgWEg2NDUxICovCiAvKiBBbHNvIHJlYmFkZ2VkIGFzIFNJSUcgSW5jLiBtb2RlbCBVUzIzMDggaGFyZHdhcmUgdmVyc2lvbiAxICovCisjZGVmaW5lIE9DVF9ESzIwMV9QSUQJCTB4MDEwMwkvKiBPQ1QgREsyMDEgVVNCIGRvY2tpbmcgc3RhdGlvbiAqLwogI2RlZmluZSBPQ1RfVVMxMDFfUElECQkweDA0MjEJLyogT0NUIFVTMTAxIFVTQiB0byBSUy0yMzIgKi8KIAogLyoKQEAgLTExNDEsMyArMTE0NCwxMiBAQAogI2RlZmluZSBRSUhBUkRXQVJFX1ZJRAkJCTB4MjBCNwogI2RlZmluZSBNSUxLWU1JU1RPTkVfSlRBR1NFUklBTF9QSUQJMHgwNzEzCiAKKy8qCisgKiBDVEkgR21iSCBSUzQ4NSBDb252ZXJ0ZXIgaHR0cDovL3d3dy5jdGktbGVhbi5jb20vCisgKi8KKy8qIFVTQi00ODUtTWluaSovCisjZGVmaW5lIEZURElfQ1RJX01JTklfUElECTB4RjYwOAorLyogVVNCLU5hbm8tNDg1Ki8KKyNkZWZpbmUgRlRESV9DVElfTkFOT19QSUQJMHhGNjBCCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYwppbmRleCBmMWFlZGZhLi5hYmYwOTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYwpAQCAtMTk4MSw3ICsxOTgxLDcgQEAKIAlpZiAoY29kZSA9PSBJT1NQX1NUQVRVU19PUEVOX1JTUCkgewogCQllZGdlX3BvcnQtPnR4Q3JlZGl0cyA9IEdFVF9UWF9CVUZGRVJfU0laRShieXRlMyk7CiAJCWVkZ2VfcG9ydC0+bWF4VHhDcmVkaXRzID0gZWRnZV9wb3J0LT50eENyZWRpdHM7Ci0JCWRiZygiJXMgLSBQb3J0ICV1IE9wZW4gUmVzcG9uc2UgSW5pdGFsIE1TUiA9ICUwMnggVHhCdWZmZXJTaXplID0gJWQiLCBfX2Z1bmNfXywgZWRnZV9zZXJpYWwtPnJ4UG9ydCwgYnl0ZTIsIGVkZ2VfcG9ydC0+dHhDcmVkaXRzKTsKKwkJZGJnKCIlcyAtIFBvcnQgJXUgT3BlbiBSZXNwb25zZSBJbml0aWFsIE1TUiA9ICUwMnggVHhCdWZmZXJTaXplID0gJWQiLCBfX2Z1bmNfXywgZWRnZV9zZXJpYWwtPnJ4UG9ydCwgYnl0ZTIsIGVkZ2VfcG9ydC0+dHhDcmVkaXRzKTsKIAkJaGFuZGxlX25ld19tc3IoZWRnZV9wb3J0LCBieXRlMik7CiAKIAkJLyogc2VuZCB0aGUgY3VycmVudCBsaW5lIHNldHRpbmdzIHRvIHRoZSBwb3J0IHNvIHdlIGFyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuaAppbmRleCBkY2VkN2VjLi5hZDljMWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuaApAQCAtNjgsNyArNjgsNyBAQAogI2RlZmluZSBQUk9DX1NFVF9DT01fRU5UUlkJCTIKIAogCi0vKiBUaGUgZm9sbG93aW5nIHN0dXJjdHVyZSBpcyBwYXNzZWQgdG8gdGhlIHdyaXRlICovCisvKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpcyBwYXNzZWQgdG8gdGhlIHdyaXRlICovCiBzdHJ1Y3QgcHJvY1dyaXRlIHsKIAlpbnQJQ29tbWFuZDsKIAl1bmlvbiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCmluZGV4IGQ4NDM0OTEuLjBhYWMwMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCkBAIC00MzMsNyArNDMzLDcgQEAKIAogCS8qIFdlIGNhbiBvbmx5IHNlbmQgYSBtYXhpbXVtIG9mIDEgYWxpZ25lZCBieXRlIHBhZ2UgYXQgYSB0aW1lICovCiAKLQkvKiBjYWx1bGF0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIGxlZnQgaW4gdGhlIGZpcnN0IHBhZ2UgKi8KKwkvKiBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBieXRlcyBsZWZ0IGluIHRoZSBmaXJzdCBwYWdlICovCiAJd3JpdGVfbGVuZ3RoID0gRVBST01fUEFHRV9TSVpFIC0KIAkJCQkoc3RhcnRfYWRkcmVzcyAmIChFUFJPTV9QQUdFX1NJWkUgLSAxKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpY29uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jCmluZGV4IGExZGQ0ZDQuLjFiNTYzM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpY29uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGljb24uYwpAQCAtMTE2LDcgKzExNiw3IEBACiAJCX0gZWxzZSB7CiAJCQlpZiAoKGRhdGFbMF0gPT0gMHgwMCkgJiYgKGRhdGFbMV0gPT0gMHgwMSkpIHsKIAkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQkJCS8qIENUUyBzdGF0dXMgaW5mb21hdGlvbiBwYWNrYWdlICovCisJCQkJLyogQ1RTIHN0YXR1cyBpbmZvcm1hdGlvbiBwYWNrYWdlICovCiAJCQkJaWYgKGRhdGFbMl0gPT0gMHgwMCkKIAkJCQkJcHJpdi0+Y3RzID0gZmFsc2U7CiAJCQkJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCmluZGV4IDc1YzdmNDUuLmQ3N2ZmMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKQEAgLTQwNyw2ICs0MDcsMTAgQEAKIC8qIE9OREEgTVQ4MjVVUCBIU0RQQSAxNC4yIG1vZGVtICovCiAjZGVmaW5lIE9OREFfTVQ4MjVVUCAgICAgICAgIDB4MDAwYgogCisvKiBTYW1zdW5nIHByb2R1Y3RzICovCisjZGVmaW5lIFNBTVNVTkdfVkVORE9SX0lEICAgICAgICAgICAgICAgICAgICAgICAweDA0ZTgKKyNkZWZpbmUgU0FNU1VOR19QUk9EVUNUX0dUX0IzNzMwICAgICAgICAgICAgICAgIDB4Njg4OQorCiAvKiBzb21lIGRldmljZXMgaW50ZXJmYWNlcyBuZWVkIHNwZWNpYWwgaGFuZGxpbmcgZHVlIHRvIGEgbnVtYmVyIG9mIHJlYXNvbnMgKi8KIGVudW0gb3B0aW9uX2JsYWNrbGlzdF9yZWFzb24gewogCQlPUFRJT05fQkxBQ0tMSVNUX05PTkUgPSAwLApAQCAtOTY4LDYgKzk3Miw3IEBACiAJeyBVU0JfREVWSUNFKE9MSVZFVFRJX1ZFTkRPUl9JRCwgT0xJVkVUVElfUFJPRFVDVF9PTElDQVJEMTAwKSB9LAogCXsgVVNCX0RFVklDRShDRUxPVF9WRU5ET1JfSUQsIENFTE9UX1BST0RVQ1RfQ1Q2ODBNKSB9LCAvKiBDVC02NTAgQ0RNQSA0NTAgMXhFVkRPIG1vZGVtICovCiAJeyBVU0JfREVWSUNFKE9OREFfVkVORE9SX0lELCBPTkRBX01UODI1VVApIH0sIC8qIE9OREEgTVQ4MjVVUCBtb2RlbSAqLworCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oU0FNU1VOR19WRU5ET1JfSUQsIFNBTVNVTkdfUFJPRFVDVF9HVF9CMzczMCwgVVNCX0NMQVNTX0NEQ19EQVRBLCAweDAwLCAweDAwKSB9LCAvKiBTYW1zdW5nIEdULUIzNzMwL0dULUIzNzEwIExURSBVU0IgbW9kZW0uKi8KIAl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgb3B0aW9uX2lkcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcWNzZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9xY3NlcmlhbC5jCmluZGV4IDg4NTgyMDEuLjU0YTlkYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9xY3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9xY3NlcmlhbC5jCkBAIC0xMTEsNyArMTExLDcgQEAKIAlpZm51bSA9IGludGYtPmRlc2MuYkludGVyZmFjZU51bWJlcjsKIAlkYmcoIlRoaXMgSW50ZXJmYWNlID0gJWQiLCBpZm51bSk7CiAKLQlkYXRhID0gc2VyaWFsLT5wcml2YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVzYl93d2FuX2ludGZfcHJpdmF0ZSksCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2Jfd3dhbl9pbnRmX3ByaXZhdGUpLAogCQkJCQkgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTEzNCw4ICsxMzQsMTAgQEAKIAkJICAgIHVzYl9lbmRwb2ludF9pc19idWxrX291dCgmaW50Zi0+ZW5kcG9pbnRbMV0uZGVzYykpIHsKIAkJCWRiZygiUURMIHBvcnQgZm91bmQiKTsKIAotCQkJaWYgKHNlcmlhbC0+aW50ZXJmYWNlLT5udW1fYWx0c2V0dGluZyA9PSAxKQotCQkJCXJldHVybiAwOworCQkJaWYgKHNlcmlhbC0+aW50ZXJmYWNlLT5udW1fYWx0c2V0dGluZyA9PSAxKSB7CisJCQkJcmV0dmFsID0gMDsgLyogU3VjY2VzcyAqLworCQkJCWJyZWFrOworCQkJfQogCiAJCQlyZXR2YWwgPSB1c2Jfc2V0X2ludGVyZmFjZShzZXJpYWwtPmRldiwgaWZudW0sIDEpOwogCQkJaWYgKHJldHZhbCA8IDApIHsKQEAgLTE0NSw3ICsxNDcsNiBAQAogCQkJCXJldHZhbCA9IC1FTk9ERVY7CiAJCQkJa2ZyZWUoZGF0YSk7CiAJCQl9Ci0JCQlyZXR1cm4gcmV0dmFsOwogCQl9CiAJCWJyZWFrOwogCkBAIC0xNjYsNiArMTY3LDcgQEAKIAkJCQkJIkNvdWxkIG5vdCBzZXQgaW50ZXJmYWNlLCBlcnJvciAlZFxuIiwKIAkJCQkJcmV0dmFsKTsKIAkJCQlyZXR2YWwgPSAtRU5PREVWOworCQkJCWtmcmVlKGRhdGEpOwogCQkJfQogCQl9IGVsc2UgaWYgKGlmbnVtID09IDIpIHsKIAkJCWRiZygiTW9kZW0gcG9ydCBmb3VuZCIpOwpAQCAtMTc3LDcgKzE3OSw2IEBACiAJCQkJcmV0dmFsID0gLUVOT0RFVjsKIAkJCQlrZnJlZShkYXRhKTsKIAkJCX0KLQkJCXJldHVybiByZXR2YWw7CiAJCX0gZWxzZSBpZiAoaWZudW09PTMpIHsKIAkJCS8qCiAJCQkgKiBOTUVBIChzZXJpYWwgbGluZSA5NjAwIDhOMSkKQEAgLTE5MSw2ICsxOTIsNyBAQAogCQkJCQkiQ291bGQgbm90IHNldCBpbnRlcmZhY2UsIGVycm9yICVkXG4iLAogCQkJCQlyZXR2YWwpOwogCQkJCXJldHZhbCA9IC1FTk9ERVY7CisJCQkJa2ZyZWUoZGF0YSk7CiAJCQl9CiAJCX0KIAkJYnJlYWs7CkBAIC0xOTksMTIgKzIwMSwyNyBAQAogCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAogCQkJInVua25vd24gbnVtYmVyIG9mIGludGVyZmFjZXM6ICVkXG4iLCBuaW50Zik7CiAJCWtmcmVlKGRhdGEpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dmFsID0gLUVOT0RFVjsKIAl9CiAKKwkvKiBTZXQgc2VyaWFsLT5wcml2YXRlIGlmIG5vdCByZXR1cm5pbmcgLUVOT0RFViAqLworCWlmIChyZXR2YWwgIT0gLUVOT0RFVikKKwkJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIGRhdGEpOwogCXJldHVybiByZXR2YWw7CiB9CiAKK3N0YXRpYyB2b2lkIHFjX3JlbGVhc2Uoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgdXNiX3d3YW5faW50Zl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCisJZGJnKCIlcyIsIF9fZnVuY19fKTsKKworCS8qIENhbGwgdXNiX3d3YW4gcmVsZWFzZSAmIGZyZWUgdGhlIHByaXZhdGUgZGF0YSBhbGxvY2F0ZWQgaW4gcWNwcm9iZSAqLworCXVzYl93d2FuX3JlbGVhc2Uoc2VyaWFsKTsKKwl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgTlVMTCk7CisJa2ZyZWUocHJpdik7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgcWNkZXZpY2UgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm93bmVyICAgICA9IFRISVNfTU9EVUxFLApAQCAtMjIyLDcgKzIzOSw3IEBACiAJLmNoYXJzX2luX2J1ZmZlciAgICAgPSB1c2Jfd3dhbl9jaGFyc19pbl9idWZmZXIsCiAJLmF0dGFjaAkJICAgICA9IHVzYl93d2FuX3N0YXJ0dXAsCiAJLmRpc2Nvbm5lY3QJICAgICA9IHVzYl93d2FuX2Rpc2Nvbm5lY3QsCi0JLnJlbGVhc2UJICAgICA9IHVzYl93d2FuX3JlbGVhc2UsCisJLnJlbGVhc2UJICAgICA9IHFjX3JlbGVhc2UsCiAjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQJICAgICA9IHVzYl93d2FuX3N1c3BlbmQsCiAJLnJlc3VtZQkJICAgICA9IHVzYl93d2FuX3Jlc3VtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZW5lX3ViNjI1MC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9lbmVfdWI2MjUwLmMKaW5kZXggMDhlMDM3NC4uMGU1YWFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9lbmVfdWI2MjUwLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9lbmVfdWI2MjUwLmMKQEAgLTU2Miw3ICs1NjIsNyBAQAogCiAJcmVzdWx0ID0gZW5lX3NlbmRfc2NzaV9jbWQodXMsIEZESVJfUkVBRCwgTlVMTCwgMCk7CiAJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKLQkJVVNfREVCVUdQKCJFeGVjdGlvbiBTRCBJbml0IENvZGUgRmFpbCAhIVxuIik7CisJCVVTX0RFQlVHUCgiRXhlY3V0aW9uIFNEIEluaXQgQ29kZSBGYWlsICEhXG4iKTsKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAl9CiAKQEAgLTU4MSw3ICs1ODEsNyBAQAogCiAJcmVzdWx0ID0gZW5lX3NlbmRfc2NzaV9jbWQodXMsIEZESVJfUkVBRCwgJmJ1ZiwgMCk7CiAJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKLQkJVVNfREVCVUdQKCJFeGVjdGlvbiBTRCBJbml0IENvZGUgRmFpbCAhIVxuIik7CisJCVVTX0RFQlVHUCgiRXhlY3V0aW9uIFNEIEluaXQgQ29kZSBGYWlsICEhXG4iKTsKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jCmluZGV4IDZiOTk4MmMuLjA5ZTUyYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYwpAQCAtMTUxMCw3ICsxNTEwLDcgQEAKICAqIFByb3RvY29sIGFuZCBUcmFuc3BvcnQgZm9yIHRoZSBJU0QyMDAgQVNJQwogICoKICAqIFRoaXMgcHJvdG9jb2wgYW5kIHRyYW5zcG9ydCBhcmUgZm9yIEFUQSBkZXZpY2VzIGNvbm5lY3RlZCB0byBhbiBJU0QyMDAKLSAqIEFTSUMuICBBbiBBVEFQSSBkZXZpY2UgdGhhdCBpcyBjb25lY3RlZCBhcyBhIHNsYXZlIGRldmljZSB3aWxsIGJlCisgKiBBU0lDLiAgQW4gQVRBUEkgZGV2aWNlIHRoYXQgaXMgY29ubmVjdGVkIGFzIGEgc2xhdmUgZGV2aWNlIHdpbGwgYmUKICAqIGRldGVjdGVkIGluIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gYW5kIHRoZSBwcm90b2NvbCB3aWxsCiAgKiBiZSBjaGFuZ2VkIHRvIGFuIEFUQVBJIHByb3RvY29sIChUcmFuc3BhcmVudCBTQ1NJKS4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMKaW5kZXggNjg5ZWUxZi4uMTNiOGJjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYwpAQCAtMTIzLDcgKzEyMyw3IEBACiB7CiAJc3RydWN0IHVzX2RhdGEgKnVzID0gaG9zdF90b191cyhzZGV2LT5ob3N0KTsKIAotCS8qIE1hbnkgZGV2aWNlcyBoYXZlIHRyb3VibGUgdHJhbnNmZXJpbmcgbW9yZSB0aGFuIDMyS0IgYXQgYSB0aW1lLAorCS8qIE1hbnkgZGV2aWNlcyBoYXZlIHRyb3VibGUgdHJhbnNmZXJyaW5nIG1vcmUgdGhhbiAzMktCIGF0IGEgdGltZSwKIAkgKiB3aGlsZSBvdGhlcnMgaGF2ZSB0cm91YmxlIHdpdGggbW9yZSB0aGFuIDY0Sy4gQXQgdGhpcyB0aW1lIHdlCiAJICogYXJlIGxpbWl0aW5nIGJvdGggdG8gMzJLICg2NCBzZWN0b3JlcykuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jCmluZGV4IGJkM2Y0MTUuLjBiMDAwOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jCkBAIC0zNDAsNyArMzQwLDcgQEAKIH0KIAogLyoKLSAqIFN0b3JlcyBjcml0aWNhbCBpbmZvcm1hdGlvbiBpbiBpbnRlcm5hbCByZWdpc3RlcnMgaW4gcHJlcGFydGlvbiBmb3IgdGhlIGV4ZWN1dGlvbgorICogU3RvcmVzIGNyaXRpY2FsIGluZm9ybWF0aW9uIGluIGludGVybmFsIHJlZ2lzdGVycyBpbiBwcmVwYXJhdGlvbiBmb3IgdGhlIGV4ZWN1dGlvbgogICogb2YgYSBjb25kaXRpb25hbCB1c2JhdF9yZWFkX2Jsb2NrcyBvciB1c2JhdF93cml0ZV9ibG9ja3MgY2FsbC4KICAqLwogc3RhdGljIGludCB1c2JhdF9zZXRfc2h1dHRsZV9mZWF0dXJlcyhzdHJ1Y3QgdXNfZGF0YSAqdXMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS9jcnlwdG8uYyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2NyeXB0by5jCmluZGV4IDgyN2M4N2YuLjdlNGJmOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2NyeXB0by5jCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2NyeXB0by5jCkBAIC0xODAsNyArMTgwLDcgQEAKICAqICAgICB1c2luZyB0aGUgMTQgYnl0ZXMgb2YgQGEgdG8gZmlsbCB1cAogICogICAgIGIxLnttYWNfaGVhZGVyLGUwLHNlY3VyaXR5X3Jlc2VydmVkLHBhZGRpbmd9LgogICoKLSAqIE5PVEU6IFRoZSBkZWZpbml0b24gb2YgbChhKSBpbiBXVVNCMS4wWzYuNV0gdnMgdGhlIGRlZmluaXRpb24gb2YKKyAqIE5PVEU6IFRoZSBkZWZpbml0aW9uIG9mIGwoYSkgaW4gV1VTQjEuMFs2LjVdIHZzIHRoZSBkZWZpbml0aW9uIG9mCiAgKiAgICAgICBsKG0pIGlzIG9ydGhvZ29uYWwsIHRoZXkgYmVhciBubyByZWxhdGlvbnNoaXAsIHNvIGl0IGlzIG5vdAogICogICAgICAgaW4gY29uZmxpY3Qgd2l0aCB0aGUgcGFyYW1ldGVyJ3MgcmVsYXRpb24gdGhhdAogICogICAgICAgV1VTQjEuMFs2LjQuMl0pIGRlZmluZXMuCkBAIC0yNzIsNyArMjcyLDcgQEAKIAogCS8qIE5vdyB3ZSBjcnlwdCB0aGUgTUlDIFRhZyAoKml2KSB3aXRoIEF4IC0tIHZhbHVlcyBwZXIgV1VTQjEuMFs2LjVdCiAJICogVGhlIHByb2NlZHVyZSBpcyB0byBBRVMgY3J5cHQgdGhlIEEwIGJsb2NrIGFuZCBYT1IgdGhlIE1JQwotCSAqIFRhZyBhZ2FpbnMgaXQ7IHdlIG9ubHkgZG8gdGhlIGZpcnN0IDggYnl0ZXMgYW5kIHBsYWNlIGl0CisJICogVGFnIGFnYWluc3QgaXQ7IHdlIG9ubHkgZG8gdGhlIGZpcnN0IDggYnl0ZXMgYW5kIHBsYWNlIGl0CiAJICogZGlyZWN0bHkgaW4gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KIAkgKgogCSAqIFBPUyBDcnlwdG8gQVBJOiBzaXplIGlzIGFzc3VtZWQgdG8gYmUgQUVTJ3MgYmxvY2sgc2l6ZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3Jlc2VydmF0aW9uLmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9yZXNlcnZhdGlvbi5jCmluZGV4IDRlZDk3MzYuLjZmNGZhZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3Jlc2VydmF0aW9uLmMKKysrIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvcmVzZXJ2YXRpb24uYwpAQCAtNzEsNyArNzEsNyBAQAogCiAvKioKICAqIHd1c2JoY19yc3ZfZXN0YWJsaXNoIC0gZXN0YWJsaXNoIGEgcmVzZXJ2YXRpb24gZm9yIHRoZSBjbHVzdGVyCi0gKiBAd3VzYmhjOiB0aGUgV1VTQiBIQyByZXF1ZXN0aW5nIGEgYmFuZHdpdGggcmVzZXJ2YXRpb24KKyAqIEB3dXNiaGM6IHRoZSBXVVNCIEhDIHJlcXVlc3RpbmcgYSBiYW5kd2lkdGggcmVzZXJ2YXRpb24KICAqLwogaW50IHd1c2JoY19yc3ZfZXN0YWJsaXNoKHN0cnVjdCB3dXNiaGMgKnd1c2JoYykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3JoLmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9yaC5jCmluZGV4IGMxNzViNzMuLjM5ZGUzOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3JoLmMKKysrIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvcmguYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAgKiAgICAgICAgICAgYmlnIG9mIGEgcHJvYmxlbSBbYW5kIHdlIGNhbid0IG1ha2UgaXQgYW4gc3BpbmxvY2sKICAqICAgICAgICAgICBiZWNhdXNlIG90aGVyIHBhcnRzIG5lZWQgdG8gdGFrZSBpdCBhbmQgc2xlZXBdIC4KICAqCi0gKiAgICAgICAgICAgQHVzYl9oY2QgaXMgcmVmY291bnRlZCwgc28gaXQgd29uJ3QgZGlzc2FwZWFyIHVuZGVyIHVzCisgKiAgICAgICAgICAgQHVzYl9oY2QgaXMgcmVmY291bnRlZCwgc28gaXQgd29uJ3QgZGlzYXBwZWFyIHVuZGVyIHVzCiAgKiAgICAgICAgICAgYW5kIGJlZm9yZSBraWxsaW5nIGEgaG9zdCwgdGhlIHBvbGxpbmcgb2YgdGhlIHJvb3QgaHViCiAgKiAgICAgICAgICAgd291bGQgYmUgc3RvcHBlZCBhbnl3YXkuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3dhLXJwaXBlLmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS93YS1ycGlwZS5jCmluZGV4IDhjYjlkODAuLmNhODAxNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3dhLXJwaXBlLmMKKysrIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvd2EtcnBpcGUuYwpAQCAtMjQsNyArMjQsNyBAQAogICoKICAqIFJQSVBFCiAgKgotICogICBUYXJnZXR0ZWQgYXQgZGlmZmVyZW50IGRvd25zdHJlYW0gZW5kcG9pbnRzCisgKiAgIFRhcmdldGVkIGF0IGRpZmZlcmVudCBkb3duc3RyZWFtIGVuZHBvaW50cwogICoKICAqICAgRGVzY3JpcHRvcjogdXNlIHRvIGNvbmZpZyB0aGUgcmVtb3RlIHBpcGUuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvd2EteGZlci5jIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvd2EteGZlci5jCmluZGV4IDg0Yjc0NGMuLjZjY2Q5M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3dhLXhmZXIuYworKysgYi9kcml2ZXJzL3VzYi93dXNiY29yZS93YS14ZmVyLmMKQEAgLTYxLDcgKzYxLDcgQEAKICAqCiAgKiAgICAgVHdvIG1ldGhvZHMgaXQgY291bGQgYmUgZG9uZToKICAqCi0gKiAgICAgKGEpIHNldCB1cCBhIHRpbWVyIGV2ZXJ5dGltZSBhbiBycGlwZSdzIHVzZSBjb3VudCBkcm9wcyB0byAxCisgKiAgICAgKGEpIHNldCB1cCBhIHRpbWVyIGV2ZXJ5IHRpbWUgYW4gcnBpcGUncyB1c2UgY291bnQgZHJvcHMgdG8gMQogICogICAgICAgICAod2hpY2ggbWVhbnMgdW51c2VkKSBvciB3aGVuIGEgdHJhbnNmZXIgZW5kcy4gUmVzZXQgdGhlCiAgKiAgICAgICAgIHRpbWVyIHdoZW4gYSB4ZmVyIGlzIHF1ZXVlZC4gSWYgdGhlIHRpbWVyIGV4cGlyZXMsIHJlbGVhc2UKICAqICAgICAgICAgdGhlIHJwaXBlIFtzZWUgcnBpcGVfZXBfZGlzYWJsZSgpXS4KQEAgLTE0MCw3ICsxNDAsNyBAQAogCiAJc3RydWN0IHdhaGMgKndhOwkJLyogV2lyZSBhZGFwdGVyIHdlIGFyZSBwbHVnZ2VkIHRvICovCiAJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKLQlzdHJ1Y3QgdXJiICp1cmI7CQkvKiBVUkIgd2UgYXJlIHRyYW5zZmVyaW5nIGZvciAqLworCXN0cnVjdCB1cmIgKnVyYjsJCS8qIFVSQiB3ZSBhcmUgdHJhbnNmZXJyaW5nIGZvciAqLwogCXN0cnVjdCB3YV9zZWcgKipzZWc7CQkvKiB0cmFuc2ZlciBzZWdtZW50cyAqLwogCXU4IHNlZ3MsIHNlZ3Nfc3VibWl0dGVkLCBzZWdzX2RvbmU7CiAJdW5zaWduZWQgaXNfaW5ib3VuZDoxOwpAQCAtMTYxLDcgKzE2MSw3IEBACiB9CiAKIC8qCi0gKiBEZXN0b3J5IGEgdHJhbnNmZXIgc3RydWN0dXJlCisgKiBEZXN0cm95IGEgdHJhbnNmZXIgc3RydWN0dXJlCiAgKgogICogTm90ZSB0aGF0IHRoZSB4ZmVyLT5zZWdbaW5kZXhdIHRoaW5naWVzIGZvbGxvdyB0aGUgVVJCIGxpZmUgY3ljbGUsCiAgKiBzbyB3ZSBuZWVkIHRvIHB1dCB0aGVtLCBub3QgZnJlZSB0aGVtLgpAQCAtNDk0LDcgKzQ5NCw3IEBACiAgKiBmdW5jdGlvbiBkb2VzIGFsbW9zdCB0aGUgc2FtZSB0aGluZyBhbmQgdGhleSB3b3JrIGNsb3NlbHkKICAqIHRvZ2V0aGVyLgogICoKLSAqIElmIHRoZSBzZWcgcmVxdWVzdCBoYXMgZmFpbGVkIGJ1dCB0aGlzIERUTyBwaGFzZSBoYXMgc3VjZWVkZWQsCisgKiBJZiB0aGUgc2VnIHJlcXVlc3QgaGFzIGZhaWxlZCBidXQgdGhpcyBEVE8gcGhhc2UgaGFzIHN1Y2NlZWRlZCwKICAqIHdhX3NlZ19jYigpIGhhcyBhbHJlYWR5IGZhaWxlZCB0aGUgc2VnbWVudCBhbmQgbW92ZWQgdGhlCiAgKiBzdGF0dXMgdG8gV0FfU0VHX0VSUk9SLCBzbyB0aGlzIHdpbGwgZ28gdGhyb3VnaCAnY2FzZSAwJyBhbmQKICAqIGVmZmVjdGl2ZWx5IGRvIG5vdGhpbmcuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS93dXNiaGMuaCBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3d1c2JoYy5oCmluZGV4IDZiZDQyNmIuLjNhMmQwOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3d1c2JoYy5oCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3d1c2JoYy5oCkBAIC0yMzEsNyArMjMxLDcgQEAKICAqCiAgKiAgICBNb3N0IG9mIHRoZSB0aW1lcyB3aGVuIHlvdSBuZWVkIHRvIHVzZSBpdCwgaXQgd2lsbCBiZSBub24tTlVMTCwKICAqICAgIHNvIHRoZXJlIGlzIG5vIHJlYWwgbmVlZCB0byBjaGVjayBmb3IgaXQgKHd1c2JfZGV2IHdpbGwKLSAqICAgIGRpc3NhcGVhciBiZWZvcmUgdXNiX2RldikuCisgKiAgICBkaXNhcHBlYXIgYmVmb3JlIHVzYl9kZXYpLgogICoKICAqICAtIFRoZSBmb2xsb3dpbmcgZmllbGRzIG5lZWQgdG8gYmUgZmlsbGVkIG91dCBiZWZvcmUgY2FsbGluZwogICogICAgd3VzYmhjX2NyZWF0ZSgpOiBwb3J0c19tYXgsIG1tY2llc19tYXgsIG1tY2llX3thZGQscm19LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvZHJpdmVyLmMgYi9kcml2ZXJzL3V3Yi9kcml2ZXIuYwppbmRleCAwOGJkNmRiLi4zZTU0NTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3V3Yi9kcml2ZXIuYworKysgYi9kcml2ZXJzL3V3Yi9kcml2ZXIuYwpAQCAtNjEsNyArNjEsNyBAQAogCiAKIC8qKgotICogSWYgYSBiZWFjb24gZGlzc2FwZWFycyBmb3IgbG9uZ2VyIHRoYW4gdGhpcywgdGhlbiB3ZSBjb25zaWRlciB0aGUKKyAqIElmIGEgYmVhY29uIGRpc2FwcGVhcnMgZm9yIGxvbmdlciB0aGFuIHRoaXMsIHRoZW4gd2UgY29uc2lkZXIgdGhlCiAgKiBkZXZpY2Ugd2hvIHdhcyByZXByZXNlbnRlZCBieSB0aGF0IGJlYWNvbiB0byBiZSBnb25lLgogICoKICAqIEVDTUEtMzY4WzE3LjIuMywgbGFzdCBwYXJhXSBlc3RhYmxpc2hlcyB0aGF0IGEgZGV2aWNlIG11c3Qgbm90CmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi9kcnAuYyBiL2RyaXZlcnMvdXdiL2RycC5jCmluZGV4IGE4ZDgzZTIuLjNmYmNmNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXdiL2RycC5jCisrKyBiL2RyaXZlcnMvdXdiL2RycC5jCkBAIC0yNyw3ICsyNyw3IEBACiAKIC8qIERSUCBDb25mbGljdCBBY3Rpb25zIChbRUNNQS0zNjggMm5kIEVkaXRpb25dIDE3LjQuNikgKi8KIGVudW0gdXdiX2RycF9jb25mbGljdF9hY3Rpb24gewotCS8qIFJlc2VydmF0aW9uIGlzIG1hbnRhaW5lZCwgbm8gYWN0aW9uIG5lZWRlZCAqLworCS8qIFJlc2VydmF0aW9uIGlzIG1haW50YWluZWQsIG5vIGFjdGlvbiBuZWVkZWQgKi8KIAlVV0JfRFJQX0NPTkZMSUNUX01BTlRBSU4gPSAwLAogCQogCS8qIHRoZSBkZXZpY2Ugc2hhbGwgbm90IHRyYW5zbWl0IGZyYW1lcyBpbiBjb25mbGljdGluZyBNQVNzIGluCkBAIC03NDEsMTIgKzc0MSwxMiBAQAogICogRFJQIG5vdGlmaWNhdGlvbnMgY2FuIG9jY3VyIGZvciB0aHJlZSBkaWZmZXJlbnQgcmVhc29uczoKICAqCiAgKiAtIFVXQl9EUlBfTk9USUZfRFJQX0lFX1JFQ1ZEOiBvbmUgb3IgbW9yZSBEUlAgSUVzIHdpdGggdGhlIFJDIGFzCi0gKiAgIHRoZSB0YXJnZXQgb3Igc291cmNlIGhhdmUgYmVlbiByZWNpZXZlZC4KKyAqICAgdGhlIHRhcmdldCBvciBzb3VyY2UgaGF2ZSBiZWVuIHJlY2VpdmVkLgogICoKICAqICAgVGhlc2UgRFJQIElFcyBjb3VsZCBiZSBuZXcgb3IgZm9yIGFuIGV4aXN0aW5nIHJlc2VydmF0aW9uLgogICoKICAqICAgSWYgdGhlIERSUCBJRSBmb3IgYW4gZXhpc3RpbmcgcmVzZXJ2YXRpb24gY2Vhc2VzIHRvIGJlIHRvCi0gKiAgIHJlY2lldmVkIGZvciBhdCBsZWFzdCBtTWF4TG9zdEJlYWNvbnMsIHRoZSByZXNlcnZhdGlvbiBzaG91bGQgYmUKKyAqICAgcmVjZWl2ZWQgZm9yIGF0IGxlYXN0IG1NYXhMb3N0QmVhY29ucywgdGhlIHJlc2VydmF0aW9uIHNob3VsZCBiZQogICogICBjb25zaWRlcmVkIHRvIGJlIHRlcm1pbmF0ZWQuICBOb3RlIHRoYXQgdGhlIFRFUk1JTkFURSByZWFzb24gKHNlZQogICogICBiZWxvdykgbWF5IG5vdCBhbHdheXMgYmUgc2lnbmFsbGVkIChlLmcuLCB0aGUgcmVtb3RlIGRldmljZSBoYXMKICAqICAgdHdvIG9yIG1vcmUgcmVzZXJ2YXRpb25zIGVzdGFibGlzaGVkIHdpdGggdGhlIFJDKS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL2xjLXJjLmMgYi9kcml2ZXJzL3V3Yi9sYy1yYy5jCmluZGV4IGIwMDkxYzcuLmI0Mzk1ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXdiL2xjLXJjLmMKKysrIGIvZHJpdmVycy91d2IvbGMtcmMuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiAJfQogCiAJaWYgKHV3Yl9tYWNfYWRkcl91bnNldCgmYWRkcikgfHwgdXdiX21hY19hZGRyX2JjYXN0KCZhZGRyKSkgewotCQlhZGRyLmRhdGFbMF0gPSAweDAyOyAvKiBsb2NhbGx5IGFkbWluc3RlcmVkIGFuZCB1bmljYXN0ICovCisJCWFkZHIuZGF0YVswXSA9IDB4MDI7IC8qIGxvY2FsbHkgYWRtaW5pc3RlcmVkIGFuZCB1bmljYXN0ICovCiAJCWdldF9yYW5kb21fYnl0ZXMoJmFkZHIuZGF0YVsxXSwgc2l6ZW9mKGFkZHIuZGF0YSktMSk7CiAKIAkJcmVzdWx0ID0gdXdiX3JjX21hY19hZGRyX3NldChyYywgJmFkZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvcmVzZXQuYyBiL2RyaXZlcnMvdXdiL3Jlc2V0LmMKaW5kZXggMjc4NDkyOS4uM2RlNjMwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91d2IvcmVzZXQuYworKysgYi9kcml2ZXJzL3V3Yi9yZXNldC5jCkBAIC01Miw3ICs1Miw3IEBACiAJImNhbmNlbGxlZCIsCiAJImludmFsaWQgc3RhdGUiLAogCSJpbnZhbGlkIHNpemUiLAotCSJhY2sgbm90IHJlY2lldmVkIiwKKwkiYWNrIG5vdCByZWNlaXZlZCIsCiAJIm5vIG1vcmUgYXNpZSBub3RpZmljYXRpb24iLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvdW1jLWRldi5jIGIvZHJpdmVycy91d2IvdW1jLWRldi5jCmluZGV4IGNjZDIxODQuLmIyOTQ4ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXdiL3VtYy1kZXYuYworKysgYi9kcml2ZXJzL3V3Yi91bWMtZGV2LmMKQEAgLTc4LDcgKzc4LDcgQEAKICAqIEZpcnN0IHdlIHVucmVnaXN0ZXIgdGhlIGRldmljZSwgbWFrZSBzdXJlIHRoZSBkcml2ZXIgY2FuIGRvIGl0J3MKICAqIHJlc291cmNlIHJlbGVhc2UgdGhpbmcgYW5kIHRoZW4gd2UgdHJ5IHRvIHJlbGVhc2UgYW55IGxlZnQgb3ZlcgogICogcmVzb3VyY2VzLiBXZSB0YWtlIGEgcmVmIHRvIHRoZSBkZXZpY2UsIHRvIG1ha2Ugc3VyZSBpdCBkb2Vzbid0Ci0gKiBkaXNzYXBlYXIgdW5kZXIgb3VyIGZlZXQuCisgKiBkaXNhcHBlYXIgdW5kZXIgb3VyIGZlZXQuCiAgKi8KIHZvaWQgdW1jX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCB1bWNfZGV2ICp1bWMpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2Fjb3JuZmIuYyBiL2RyaXZlcnMvdmlkZW8vYWNvcm5mYi5jCmluZGV4IDgyYWNiOGQuLjYxODNhNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYWNvcm5mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYWNvcm5mYi5jCkBAIC02Niw3ICs2Niw3IEBACiAgKiBoYXZlLiAgQWxsb3cgMSUgZWl0aGVyIHdheSBvbiB0aGUgbm9taW5hbCBmb3IgVFZzLgogICovCiAjZGVmaW5lIE5SX01PTlRZUEVTCTYKLXN0YXRpYyBzdHJ1Y3QgZmJfbW9uc3BlY3MgbW9uc3BlY3NbTlJfTU9OVFlQRVNdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IGZiX21vbnNwZWNzIG1vbnNwZWNzW05SX01PTlRZUEVTXSBfX2RldmluaXRkYXRhID0gewogCXsJLyogVFYJCSovCiAJCS5oZm1pbgk9IDE1NDY5LAogCQkuaGZtYXgJPSAxNTc4MSwKQEAgLTg3Myw3ICs4NzMsNyBAQAogLyoKICAqIEV2ZXJ5dGhpbmcgYWZ0ZXIgaGVyZSBpcyBpbml0aWFsaXNhdGlvbiEhIQogICovCi1zdGF0aWMgc3RydWN0IGZiX3ZpZGVvbW9kZSBtb2RlZGJbXSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgbW9kZWRiW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7CS8qIDMyMHgyNTYgQCA1MEh6ICovCiAJCU5VTEwsIDUwLCAgMzIwLCAgMjU2LCAxMjUwMDAsICA5MiwgIDYyLCAgMzUsIDE5LCAgMzgsIDIsCiAJCUZCX1NZTkNfQ09NUF9ISUdIX0FDVCwKQEAgLTkyNSw4ICs5MjUsNyBAQAogCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmJfdmlkZW9tb2RlIF9faW5pdGRhdGEKLWFjb3JuZmJfZGVmYXVsdF9tb2RlID0geworc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgYWNvcm5mYl9kZWZhdWx0X21vZGUgX19kZXZpbml0ZGF0YSA9IHsKIAkubmFtZSA9CQlOVUxMLAogCS5yZWZyZXNoID0JNjAsCiAJLnhyZXMgPQkJNjQwLApAQCAtOTQyLDcgKzk0MSw3IEBACiAJLnZtb2RlID0JRkJfVk1PREVfTk9OSU5URVJMQUNFRAogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IGFjb3JuZmJfaW5pdF9mYmluZm8odm9pZCkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBhY29ybmZiX2luaXRfZmJpbmZvKHZvaWQpCiB7CiAJc3RhdGljIGludCBmaXJzdCA9IDE7CiAKQEAgLTEwMTgsOCArMTAxNyw3IEBACiAgKglzaXplIGNhbiBvcHRpb25hbGx5IGJlIGZvbGxvd2VkIGJ5ICdNJyBvciAnSycgZm9yCiAgKglNQiBvciBLQiByZXNwZWN0aXZlbHkuCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdAotYWNvcm5mYl9wYXJzZV9tb24oY2hhciAqb3B0KQorc3RhdGljIHZvaWQgX19kZXZpbml0IGFjb3JuZmJfcGFyc2VfbW9uKGNoYXIgKm9wdCkKIHsKIAljaGFyICpwID0gb3B0OwogCkBAIC0xMDY2LDggKzEwNjQsNyBAQAogCWN1cnJlbnRfcGFyLm1vbnR5cGUgPSAtMTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0Ci1hY29ybmZiX3BhcnNlX21vbnR5cGUoY2hhciAqb3B0KQorc3RhdGljIHZvaWQgX19kZXZpbml0IGFjb3JuZmJfcGFyc2VfbW9udHlwZShjaGFyICpvcHQpCiB7CiAJY3VycmVudF9wYXIubW9udHlwZSA9IC0yOwogCkBAIC0xMTA4LDggKzExMDUsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgX19pbml0Ci1hY29ybmZiX3BhcnNlX2RyYW0oY2hhciAqb3B0KQorc3RhdGljIHZvaWQgX19kZXZpbml0IGFjb3JuZmJfcGFyc2VfZHJhbShjaGFyICpvcHQpCiB7CiAJdW5zaWduZWQgaW50IHNpemU7CiAKQEAgLTExMzQsMTUgKzExMzAsMTQgQEAKIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9ucyB7CiAJY2hhciAqbmFtZTsKIAl2b2lkICgqcGFyc2UpKGNoYXIgKm9wdCk7Ci19IG9wdF90YWJsZVtdIF9faW5pdGRhdGEgPSB7Cit9IG9wdF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJeyAibW9uIiwgICAgIGFjb3JuZmJfcGFyc2VfbW9uICAgICB9LAogCXsgIm1vbnR5cGUiLCBhY29ybmZiX3BhcnNlX21vbnR5cGUgfSwKIAl7ICJkcmFtIiwgICAgYWNvcm5mYl9wYXJzZV9kcmFtICAgIH0sCiAJeyBOVUxMLCBOVUxMIH0KIH07CiAKLWludCBfX2luaXQKLWFjb3JuZmJfc2V0dXAoY2hhciAqb3B0aW9ucykKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFjb3JuZmJfc2V0dXAoY2hhciAqb3B0aW9ucykKIHsKIAlzdHJ1Y3Qgb3B0aW9ucyAqb3B0cDsKIAljaGFyICpvcHQ7CkBAIC0xMTc5LDggKzExNzQsNyBAQAogICogRGV0ZWN0IHR5cGUgb2YgbW9uaXRvciBjb25uZWN0ZWQKICAqICBGb3Igbm93LCB3ZSBqdXN0IGFzc3VtZSBTVkdBCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0Ci1hY29ybmZiX2RldGVjdF9tb25pdG9ydHlwZSh2b2lkKQorc3RhdGljIGludCBfX2RldmluaXQgYWNvcm5mYl9kZXRlY3RfbW9uaXRvcnR5cGUodm9pZCkKIHsKIAlyZXR1cm4gNDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXRtZWxfbGNkZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXRtZWxfbGNkZmIuYwppbmRleCBjY2VjZjk5Li40NDg0YzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0bWVsX2xjZGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdG1lbF9sY2RmYi5jCkBAIC02MzcsNyArNjM3LDcgQEAKICAqICAJbWFnbml0dWRlIHdoaWNoIG5lZWRzIHRvIGJlIHNjYWxlZCBpbiB0aGlzIGZ1bmN0aW9uIGZvciB0aGUgaGFyZHdhcmUuCiAgKglUaGluZ3MgdG8gdGFrZSBpbnRvIGNvbnNpZGVyYXRpb24gYXJlIGhvdyBtYW55IGNvbG9yIHJlZ2lzdGVycywgaWYKICAqCWFueSwgYXJlIHN1cHBvcnRlZCB3aXRoIHRoZSBjdXJyZW50IGNvbG9yIHZpc3VhbC4gV2l0aCB0cnVlY29sb3IgbW9kZQotICoJbm8gY29sb3IgcGFsZXR0ZXMgYXJlIHN1cHBvcnRlZC4gSGVyZSBhIHBzdWVkbyBwYWxldHRlIGlzIGNyZWF0ZWQKKyAqCW5vIGNvbG9yIHBhbGV0dGVzIGFyZSBzdXBwb3J0ZWQuIEhlcmUgYSBwc2V1ZG8gcGFsZXR0ZSBpcyBjcmVhdGVkCiAgKgl3aGljaCB3ZSBzdG9yZSB0aGUgdmFsdWUgaW4gcHNldWRvX3BhbGV0dGUgaW4gc3RydWN0IGZiX2luZm8uIEZvcgogICoJcHNldWRvY29sb3IgbW9kZSB3ZSBoYXZlIGEgbGltaXRlZCBjb2xvciBwYWxldHRlLiBUbyBkZWFsIHdpdGggdGhpcwogICoJd2UgY2FuIHByb2dyYW0gd2hhdCBjb2xvciBpcyBkaXNwbGF5ZWQgZm9yIGEgcGFydGljdWxhciBwaXhlbCB2YWx1ZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYwppbmRleCBkNDM3YjNkLi5lYmI4OTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCkBAIC0zMTI0LDEyICszMTI0LDEyIEBACiAJCU0gPSBwbGxfcmVnc1syXTsKIAogCQkvKgotCQkgKiBQTEwgRmVlZGJhY2sgRGl2aWRlciBOIChEZXBlbmRhbnQgb24gQ0xPQ0tfQ05UTCk6CisJCSAqIFBMTCBGZWVkYmFjayBEaXZpZGVyIE4gKERlcGVuZGVudCBvbiBDTE9DS19DTlRMKToKIAkJICovCiAJCU4gPSBwbGxfcmVnc1s3ICsgKGNsb2NrX2NudGwgJiAzKV07CiAKIAkJLyoKLQkJICogUExMIFBvc3QgRGl2aWRlciBQIChEZXBlbmRhbnQgb24gQ0xPQ0tfQ05UTCk6CisJCSAqIFBMTCBQb3N0IERpdmlkZXIgUCAoRGVwZW5kZW50IG9uIENMT0NLX0NOVEwpOgogCQkgKi8KIAkJUCA9IDEgPDwgKHBsbF9yZWdzWzZdID4+ICgoY2xvY2tfY250bCAmIDMpIDw8IDEpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvbWFjaDY0X2N1cnNvci5jIGIvZHJpdmVycy92aWRlby9hdHkvbWFjaDY0X2N1cnNvci5jCmluZGV4IDJiYThiM2MuLjQ2ZjcyZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L21hY2g2NF9jdXJzb3IuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9tYWNoNjRfY3Vyc29yLmMKQEAgLTUxLDcgKzUxLDcgQEAKICAqIHRvIGEgbGFyZ2VyIG51bWJlciBhbmQgc2F0dXJhdGUgQ1VSX0hPUlpfUE9TTiB0byB6ZXJvLgogICoKICAqIGlmIFkgYmVjb21lcyBuZWdhdGl2ZSwgQ1VSX1ZFUlRfT0ZGU0VUIG11c3QgYmUgYWRqdXN0ZWQgdG8gYSBsYXJnZXIgbnVtYmVyLAotICogQ1VSX09GRlNFVCBtdXN0IGJlIGFkanVzdGVkIHRvIGEgcG9pbnQgdG8gdGhlIGFwcHJvcHJhaXRlIGxpbmUgaW4gdGhlIGN1cnNvcgorICogQ1VSX09GRlNFVCBtdXN0IGJlIGFkanVzdGVkIHRvIGEgcG9pbnQgdG8gdGhlIGFwcHJvcHJpYXRlIGxpbmUgaW4gdGhlIGN1cnNvcgogICogZGVmaW5pdGF0aW9uIGFuZCBDVVJfVkVSVF9QT1NOIG11c3QgYmUgc2F0dXJhdGVkIHRvIHplcm8uCiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdTEyMDBmYi5jIGIvZHJpdmVycy92aWRlby9hdTEyMDBmYi5jCmluZGV4IDRlYTE4N2QuLjVkZmYzMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXUxMjAwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F1MTIwMGZiLmMKQEAgLTE1NzIsNyArMTU3Miw3IEBACiAJLyogQ29weSBtb25pdG9yIHNwZWNzIGZyb20gcGFuZWwgZGF0YSAqLwogCS8qIGZpeG1lOiB3ZSdyZSBzZXR0aW5nIHVwIExDRCBjb250cm9sbGVyIHdpbmRvd3MsIHNvIHRoZXNlIGRvbnQgZ2l2ZSBhCiAJZGFtbiBhcyB0byB3aGF0IHRoZSBtb25pdG9yIHNwZWNzIGFyZSAodGhlIHBhbmVsIGl0c2VsZiBkb2VzLCBidXQgdGhhdAotCWlzbnQgZG9uZSBoZXJlLi4uc28gbWF5YmUgbmVlZCBhIGdlbmVyaWMgY2F0Y2hhbGwgbW9uaXRvciBzZXR0aW5nPz8/ICovCisJaXNuJ3QgZG9uZSBoZXJlLi4uc28gbWF5YmUgbmVlZCBhIGdlbmVyaWMgY2F0Y2hhbGwgbW9uaXRvciBzZXR0aW5nPz8/ICovCiAJbWVtY3B5KCZmYmktPm1vbnNwZWNzLCAmcGFuZWwtPm1vbnNwZWNzLCBzaXplb2Yoc3RydWN0IGZiX21vbnNwZWNzKSk7CiAKIAkvKiBXZSBmaXJzdCB0cnkgdGhlIHVzZXIgbW9kZSBwYXNzZWQgaW4gYXJndW1lbnQuIElmIHRoYXQgZmFpbGVkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9sY2QuYwppbmRleCBhZjYwOTgzLi5jNjUzM2JhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9sY2QuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9sY2QuYwpAQCAtMTA5LDcgKzEwOSw3IEBACiAjZGVmaW5lIENPUkdJQkxfQkFUVExPVyAgICAgICAweDAyCiAKIC8qCi0gKiBUaGlzIGlzIG9ubHkgYSBwc3VlZG8gSTJDIGludGVyZmFjZS4gV2UgY2FuJ3QgdXNlIHRoZSBzdGFuZGFyZCBrZXJuZWwKKyAqIFRoaXMgaXMgb25seSBhIHBzZXVkbyBJMkMgaW50ZXJmYWNlLiBXZSBjYW4ndCB1c2UgdGhlIHN0YW5kYXJkIGtlcm5lbAogICogcm91dGluZXMgYXMgdGhlIGludGVyZmFjZSBpcyB3cml0ZSBvbmx5LiBXZSBqdXN0IGFzc3VtZSB0aGUgZGF0YSBpcyBhY2tlZC4uLgogICovCiBzdGF0aWMgdm9pZCBsY2R0Z19zc3BfaTJjX3NlbmQoc3RydWN0IGNvcmdpX2xjZCAqbGNkLCB1aW50OF90IGRhdGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sb2NvbW9sY2QuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xvY29tb2xjZC5jCmluZGV4IGJiY2EzMTIuLmJlMjBiNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xvY29tb2xjZC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xvY29tb2xjZC5jCkBAIC02LDcgKzYsNyBAQAogICogR1BMIHYyCiAgKgogICogVGhpcyBkcml2ZXIgYXNzdW1lcyBzaW5nbGUgQ1BVLiBUaGF0J3Mgb2theSwgYmVjYXVzZSBjb2xsaWUgaXMKLSAqIHNsaWdodGx5IG9sZCBoYXJkd2FyZSwgYW5kIG5vb25lIGlzIGdvaW5nIHRvIHJldHJvZml0IHNlY29uZCBDUFUgdG8KKyAqIHNsaWdodGx5IG9sZCBoYXJkd2FyZSwgYW5kIG5vIG9uZSBpcyBnb2luZyB0byByZXRyb2ZpdCBzZWNvbmQgQ1BVIHRvCiAgKiBvbGQgUERBLgogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmZpbi1scTAzNXExLWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2JmaW4tbHEwMzVxMS1mYi5jCmluZGV4IGM4ZTFmMDQuLjIzYjZjNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmZpbi1scTAzNXExLWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9iZmluLWxxMDM1cTEtZmIuYwpAQCAtMTU0LDggKzE1NCwxMCBAQAogCiAJcmV0ID0gbHEwMzVxMV9jb250cm9sKHNwaSwgTFEwMzVfU0hVVF9DVEwsIExRMDM1X09OKTsKIAlyZXQgfD0gbHEwMzVxMV9jb250cm9sKHNwaSwgTFEwMzVfRFJJVkVSX09VVFBVVF9DVEwsIGN0bC0+bW9kZSk7Ci0JaWYgKHJldCkKKwlpZiAocmV0KSB7CisJCWtmcmVlKGN0bCk7CiAJCXJldHVybiByZXQ7CisJfQogCiAJc3BpX3NldF9kcnZkYXRhKHNwaSwgY3RsKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iZmluX2FkdjczOTNmYi5oIGIvZHJpdmVycy92aWRlby9iZmluX2FkdjczOTNmYi5oCmluZGV4IDhjN2Y5ZTQuLmNkNTkxYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmZpbl9hZHY3MzkzZmIuaAorKysgYi9kcml2ZXJzL3ZpZGVvL2JmaW5fYWR2NzM5M2ZiLmgKQEAgLTg3LDEyICs4NywxMiBAQAogCiBzdGF0aWMgY29uc3QgdTggaW5pdF9OVFNDW10gPSB7CiAJMHgwMCwgMHgxRSwJLyogUG93ZXIgdXAgYWxsIERBQ3MgYW5kIFBMTCAqLwotCTB4QzMsIDB4MjYsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJ0aW9uIG1hdHJpeCAqLwotCTB4QzUsIDB4MTIsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJ0aW9uIG1hdHJpeCAqLwotCTB4QzIsIDB4NEEsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJ0aW9uIG1hdHJpeCAqLwotCTB4QzYsIDB4NUUsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJ0aW9uIG1hdHJpeCAqLwotCTB4QkQsIDB4MTksCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJ0aW9uIG1hdHJpeCAqLwotCTB4QkYsIDB4NDIsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJ0aW9uIG1hdHJpeCAqLworCTB4QzMsIDB4MjYsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJzaW9uIG1hdHJpeCAqLworCTB4QzUsIDB4MTIsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJzaW9uIG1hdHJpeCAqLworCTB4QzIsIDB4NEEsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJzaW9uIG1hdHJpeCAqLworCTB4QzYsIDB4NUUsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJzaW9uIG1hdHJpeCAqLworCTB4QkQsIDB4MTksCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJzaW9uIG1hdHJpeCAqLworCTB4QkYsIDB4NDIsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJzaW9uIG1hdHJpeCAqLwogCTB4OEMsIDB4MUYsCS8qIE5UU0MgU3ViY2FycmllciBGcmVxdWVuY3kgKi8KIAkweDhELCAweDdDLAkvKiBOVFNDIFN1YmNhcnJpZXIgRnJlcXVlbmN5ICovCiAJMHg4RSwgMHhGMCwJLyogTlRTQyBTdWJjYXJyaWVyIEZyZXF1ZW5jeSAqLwpAQCAtMTA5LDEyICsxMDksMTIgQEAKIAogc3RhdGljIGNvbnN0IHU4IGluaXRfUEFMW10gPSB7CiAJMHgwMCwgMHgxRSwJLyogUG93ZXIgdXAgYWxsIERBQ3MgYW5kIFBMTCAqLwotCTB4QzMsIDB4MjYsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJ0aW9uIG1hdHJpeCAqLwotCTB4QzUsIDB4MTIsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJ0aW9uIG1hdHJpeCAqLwotCTB4QzIsIDB4NEEsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJ0aW9uIG1hdHJpeCAqLwotCTB4QzYsIDB4NUUsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJ0aW9uIG1hdHJpeCAqLwotCTB4QkQsIDB4MTksCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJ0aW9uIG1hdHJpeCAqLwotCTB4QkYsIDB4NDIsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJ0aW9uIG1hdHJpeCAqLworCTB4QzMsIDB4MjYsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJzaW9uIG1hdHJpeCAqLworCTB4QzUsIDB4MTIsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJzaW9uIG1hdHJpeCAqLworCTB4QzIsIDB4NEEsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJzaW9uIG1hdHJpeCAqLworCTB4QzYsIDB4NUUsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJzaW9uIG1hdHJpeCAqLworCTB4QkQsIDB4MTksCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJzaW9uIG1hdHJpeCAqLworCTB4QkYsIDB4NDIsCS8qIFByb2dyYW0gUkdCLT5ZQ3JDYiBDb2xvciBTcGFjZSBjb252ZXJzaW9uIG1hdHJpeCAqLwogCTB4OEMsIDB4Q0IsCS8qIFBBTCBTdWJjYXJyaWVyIEZyZXF1ZW5jeSAqLwogCTB4OEQsIDB4OEEsCS8qIFBBTCBTdWJjYXJyaWVyIEZyZXF1ZW5jeSAqLwogCTB4OEUsIDB4MDksCS8qIFBBTCBTdWJjYXJyaWVyIEZyZXF1ZW5jeSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwppbmRleCBjNTgzOTM0Li44NzQ1NjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwpAQCAtMzcwLDcgKzM3MCw2IEBACiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGZiX2luZm8sIHF1ZXVlKTsKIAlzdHJ1Y3QgZmJjb25fb3BzICpvcHMgPSBpbmZvLT5mYmNvbl9wYXI7Ci0Jc3RydWN0IGRpc3BsYXkgKnA7CiAJc3RydWN0IHZjX2RhdGEgKnZjID0gTlVMTDsKIAlpbnQgYzsKIAlpbnQgbW9kZTsKQEAgLTM4Niw3ICszODUsNiBAQAogCQlyZXR1cm47CiAJfQogCi0JcCA9ICZmYl9kaXNwbGF5W3ZjLT52Y19udW1dOwogCWMgPSBzY3JfcmVhZHcoKHUxNiAqKSB2Yy0+dmNfcG9zKTsKIAltb2RlID0gKCFvcHMtPmN1cnNvcl9mbGFzaCB8fCBvcHMtPmN1cnNvcl9zdGF0ZS5lbmFibGUpID8KIAkJQ01fRVJBU0UgOiBDTV9EUkFXOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRfbWluaV80eDYuYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mb250X21pbmlfNHg2LmMKaW5kZXggYTE5YTdmMy4uZmE2ZTY5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRfbWluaV80eDYuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF9taW5pXzR4Ni5jCkBAIC0xLDUgKzEsNSBAQAogCi0vKiBIYW5kIGNvbXBvc2VkICJNaW5pc2N1bGUiIDR4NiBmb250LCB3aXRoIGJpbmFyeSBkYXRhIGdlbmVyYXRlZCB1c2luZworLyogSGFuZCBjb21wb3NlZCAiTWludXNjdWxlIiA0eDYgZm9udCwgd2l0aCBiaW5hcnkgZGF0YSBnZW5lcmF0ZWQgdXNpbmcKICAqIFBlcmwgc3R1Yi4KICAqCiAgKiBVc2UgJ3BlcmwgLXggbWluaV80eDYuYyA8IG1pbmlfNHg2LmMgPiBuZXdfdmVyc2lvbi5jJyB0byByZWdlbmVyYXRlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2RhOHh4LWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2RhOHh4LWZiLmMKaW5kZXggOGQ2MWVmOS4uOGI3ZDQ3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9kYTh4eC1mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZGE4eHgtZmIuYwpAQCAtNzYzLDcgKzc2Myw3IEBACiAKIAkvKgogCSAqIFNldCBmbGFnIHRvIDAgYW5kIHdhaXQgZm9yIGlzciB0byBzZXQgdG8gMS4gSXQgd291bGQgc2VlbSB0aGVyZSBpcyBhCi0JICogcmFjZSBjb25kaXRpb24gaGVyZSB3aGVyZSB0aGUgSVNSIGNvdWxkIGhhdmUgb2NjdXJlZCBqdXN0IGJlZm9yZSBvcgorCSAqIHJhY2UgY29uZGl0aW9uIGhlcmUgd2hlcmUgdGhlIElTUiBjb3VsZCBoYXZlIG9jY3VycmVkIGp1c3QgYmVmb3JlIG9yCiAJICoganVzdCBhZnRlciB0aGlzIHNldC4gQnV0IHNpbmNlIHdlIGFyZSBqdXN0IGNvYXJzZWx5IHdhaXRpbmcgZm9yCiAJICogYSBmcmFtZSB0byBjb21wbGV0ZSB0aGVuIHRoYXQncyBPSy4gaS5lLiBpZiB0aGUgZnJhbWUgY29tcGxldGVkCiAJICoganVzdCBiZWZvcmUgdGhpcyBjb2RlIGV4ZWN1dGVkIHRoZW4gd2UgaGF2ZSB0byB3YWl0IGFub3RoZXIgZnVsbApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9kaXNwbGF5L2Rpc3BsYXktc3lzZnMuYyBiL2RyaXZlcnMvdmlkZW8vZGlzcGxheS9kaXNwbGF5LXN5c2ZzLmMKaW5kZXggZjZhMDlhYi4uMGM2NDdkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9kaXNwbGF5L2Rpc3BsYXktc3lzZnMuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Rpc3BsYXkvZGlzcGxheS1zeXNmcy5jCkBAIC0xODIsNyArMTgyLDcgQEAKIAltdXRleF9sb2NrKCZkZGV2LT5sb2NrKTsKIAlkZXZpY2VfdW5yZWdpc3RlcihkZGV2LT5kZXYpOwogCW11dGV4X3VubG9jaygmZGRldi0+bG9jayk7Ci0JLy8gTWFyayBkZXZpY2UgaW5kZXggYXMgYXZhbGlhYmxlCisJLy8gTWFyayBkZXZpY2UgaW5kZXggYXMgYXZhaWxhYmxlCiAJbXV0ZXhfbG9jaygmYWxsb2NhdGVkX2RzcF9sb2NrKTsKIAlpZHJfcmVtb3ZlKCZhbGxvY2F0ZWRfZHNwLCBkZGV2LT5pZHgpOwogCW11dGV4X3VubG9jaygmYWxsb2NhdGVkX2RzcF9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZWZpZmIuYyBiL2RyaXZlcnMvdmlkZW8vZWZpZmIuYwppbmRleCA3MDQ3N2MyLi40ZWIzOGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2VmaWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9lZmlmYi5jCkBAIC01Myw2ICs1Myw3IEBACiAJTV9NQl83XzEsCS8qIE1hY0Jvb2ssIDd0aCByZXYuICovCiAJTV9NQl9TUiwJLyogTWFjQm9vaywgMm5kIGdlbiwgKFNhbnRhIFJvc2EpICovCiAJTV9NQkEsCQkvKiBNYWNCb29rIEFpciAqLworCU1fTUJBXzMsCS8qIE1hY2Jvb2sgQWlyLCAzcmQgcmV2ICovCiAJTV9NQlAsCQkvKiBNYWNCb29rIFBybyAqLwogCU1fTUJQXzIsCS8qIE1hY0Jvb2sgUHJvIDJuZCBnZW4gKi8KIAlNX01CUF8yXzIsCS8qIE1hY0Jvb2sgUHJvIDIsMm5kIGdlbiAqLwpAQCAtNjQsNDMgKzY1LDU0IEBACiAJTV9NQlBfNl8xLAkvKiBNYWNCb29rIFBybywgNiwxdGggZ2VuICovCiAJTV9NQlBfNl8yLAkvKiBNYWNCb29rIFBybywgNiwydGggZ2VuICovCiAJTV9NQlBfN18xLAkvKiBNYWNCb29rIFBybywgNywxdGggZ2VuICovCisJTV9NQlBfOF8yLAkvKiBNYWNCb29rIFBybywgOCwybmQgZ2VuICovCiAJTV9VTktOT1dOCS8qIHBsYWNlaG9sZGVyICovCiB9OwogCisjZGVmaW5lIE9WRVJSSURFX05PTkUJMHgwCisjZGVmaW5lIE9WRVJSSURFX0JBU0UJMHgxCisjZGVmaW5lIE9WRVJSSURFX1NUUklERQkweDIKKyNkZWZpbmUgT1ZFUlJJREVfSEVJR0hUCTB4NAorI2RlZmluZSBPVkVSUklERV9XSURUSAkweDgKKwogc3RhdGljIHN0cnVjdCBlZmlmYl9kbWlfaW5mbyB7CiAJY2hhciAqb3B0bmFtZTsKIAl1bnNpZ25lZCBsb25nIGJhc2U7CiAJaW50IHN0cmlkZTsKIAlpbnQgd2lkdGg7CiAJaW50IGhlaWdodDsKKwlpbnQgZmxhZ3M7CiB9IGRtaV9saXN0W10gX19pbml0ZGF0YSA9IHsKLQlbTV9JMTddID0geyAiaTE3IiwgMHg4MDAxMDAwMCwgMTQ3MiAqIDQsIDE0NDAsIDkwMCB9LAotCVtNX0kyMF0gPSB7ICJpMjAiLCAweDgwMDEwMDAwLCAxNzI4ICogNCwgMTY4MCwgMTA1MCB9LCAvKiBndWVzcyAqLwotCVtNX0kyMF9TUl0gPSB7ICJpbWFjNyIsIDB4NDAwMTAwMDAsIDE3MjggKiA0LCAxNjgwLCAxMDUwIH0sCi0JW01fSTI0XSA9IHsgImkyNCIsIDB4ODAwMTAwMDAsIDIwNDggKiA0LCAxOTIwLCAxMjAwIH0sIC8qIGd1ZXNzICovCi0JW01fSTI0XzhfMV0gPSB7ICJpbWFjOCIsIDB4YzAwNjAwMDAsIDIwNDggKiA0LCAxOTIwLCAxMjAwIH0sCi0JW01fSTI0XzEwXzFdID0geyAiaW1hYzEwIiwgMHhjMDAxMDAwMCwgMjA0OCAqIDQsIDE5MjAsIDEwODAgfSwKLQlbTV9JMjdfMTFfMV0gPSB7ICJpbWFjMTEiLCAweGMwMDEwMDAwLCAyNTYwICogNCwgMjU2MCwgMTQ0MCB9LAotCVtNX01JTkldPSB7ICJtaW5pIiwgMHg4MDAwMDAwMCwgMjA0OCAqIDQsIDEwMjQsIDc2OCB9LAotCVtNX01JTklfM18xXSA9IHsgIm1pbmkzMSIsIDB4NDAwMTAwMDAsIDEwMjQgKiA0LCAxMDI0LCA3NjggfSwKLQlbTV9NSU5JXzRfMV0gPSB7ICJtaW5pNDEiLCAweGMwMDEwMDAwLCAyMDQ4ICogNCwgMTkyMCwgMTIwMCB9LAotCVtNX01CXSA9IHsgIm1hY2Jvb2siLCAweDgwMDAwMDAwLCAyMDQ4ICogNCwgMTI4MCwgODAwIH0sCi0JW01fTUJfNV8xXSA9IHsgIm1hY2Jvb2s1MSIsIDB4ODAwMTAwMDAsIDIwNDggKiA0LCAxMjgwLCA4MDAgfSwKLQlbTV9NQl82XzFdID0geyAibWFjYm9vazYxIiwgMHg4MDAxMDAwMCwgMjA0OCAqIDQsIDEyODAsIDgwMCB9LAotCVtNX01CXzdfMV0gPSB7ICJtYWNib29rNzEiLCAweDgwMDEwMDAwLCAyMDQ4ICogNCwgMTI4MCwgODAwIH0sCi0JW01fTUJBXSA9IHsgIm1iYSIsIDB4ODAwMDAwMDAsIDIwNDggKiA0LCAxMjgwLCA4MDAgfSwKLQlbTV9NQlBdID0geyAibWJwIiwgMHg4MDAxMDAwMCwgMTQ3MiAqIDQsIDE0NDAsIDkwMCB9LAotCVtNX01CUF8yXSA9IHsgIm1icDIiLCAwLCAwLCAwLCAwIH0sIC8qIHBsYWNlaG9sZGVyICovCi0JW01fTUJQXzJfMl0gPSB7ICJtYnAyMiIsIDB4ODAwMTAwMDAsIDE0NzIgKiA0LCAxNDQwLCA5MDAgfSwKLQlbTV9NQlBfU1JdID0geyAibWJwMyIsIDB4ODAwMzAwMDAsIDIwNDggKiA0LCAxNDQwLCA5MDAgfSwKLQlbTV9NQlBfNF0gPSB7ICJtYnA0IiwgMHhjMDA2MDAwMCwgMjA0OCAqIDQsIDE5MjAsIDEyMDAgfSwKLQlbTV9NQlBfNV8xXSA9IHsgIm1icDUxIiwgMHhjMDAxMDAwMCwgMjA0OCAqIDQsIDE0NDAsIDkwMCB9LAotCVtNX01CUF81XzJdID0geyAibWJwNTIiLCAweGMwMDEwMDAwLCAyMDQ4ICogNCwgMTkyMCwgMTIwMCB9LAotCVtNX01CUF81XzNdID0geyAibWJwNTMiLCAweGQwMDEwMDAwLCAyMDQ4ICogNCwgMTQ0MCwgOTAwIH0sCi0JW01fTUJQXzZfMV0gPSB7ICJtYnA2MSIsIDB4OTAwMzAwMDAsIDIwNDggKiA0LCAxOTIwLCAxMjAwIH0sCi0JW01fTUJQXzZfMl0gPSB7ICJtYnA2MiIsIDB4OTAwMzAwMDAsIDIwNDggKiA0LCAxNjgwLCAxMDUwIH0sCi0JW01fTUJQXzdfMV0gPSB7ICJtYnA3MSIsIDB4YzAwMTAwMDAsIDIwNDggKiA0LCAxMjgwLCA4MDAgfSwKLQlbTV9VTktOT1dOXSA9IHsgTlVMTCwgMCwgMCwgMCwgMCB9CisJW01fSTE3XSA9IHsgImkxNyIsIDB4ODAwMTAwMDAsIDE0NzIgKiA0LCAxNDQwLCA5MDAsIE9WRVJSSURFX05PTkUgfSwKKwlbTV9JMjBdID0geyAiaTIwIiwgMHg4MDAxMDAwMCwgMTcyOCAqIDQsIDE2ODAsIDEwNTAsIE9WRVJSSURFX05PTkUgfSwgLyogZ3Vlc3MgKi8KKwlbTV9JMjBfU1JdID0geyAiaW1hYzciLCAweDQwMDEwMDAwLCAxNzI4ICogNCwgMTY4MCwgMTA1MCwgT1ZFUlJJREVfTk9ORSB9LAorCVtNX0kyNF0gPSB7ICJpMjQiLCAweDgwMDEwMDAwLCAyMDQ4ICogNCwgMTkyMCwgMTIwMCwgT1ZFUlJJREVfTk9ORSB9LCAvKiBndWVzcyAqLworCVtNX0kyNF84XzFdID0geyAiaW1hYzgiLCAweGMwMDYwMDAwLCAyMDQ4ICogNCwgMTkyMCwgMTIwMCwgT1ZFUlJJREVfTk9ORSB9LAorCVtNX0kyNF8xMF8xXSA9IHsgImltYWMxMCIsIDB4YzAwMTAwMDAsIDIwNDggKiA0LCAxOTIwLCAxMDgwLCBPVkVSUklERV9OT05FIH0sCisJW01fSTI3XzExXzFdID0geyAiaW1hYzExIiwgMHhjMDAxMDAwMCwgMjU2MCAqIDQsIDI1NjAsIDE0NDAsIE9WRVJSSURFX05PTkUgfSwKKwlbTV9NSU5JXT0geyAibWluaSIsIDB4ODAwMDAwMDAsIDIwNDggKiA0LCAxMDI0LCA3NjgsIE9WRVJSSURFX05PTkUgfSwKKwlbTV9NSU5JXzNfMV0gPSB7ICJtaW5pMzEiLCAweDQwMDEwMDAwLCAxMDI0ICogNCwgMTAyNCwgNzY4LCBPVkVSUklERV9OT05FIH0sCisJW01fTUlOSV80XzFdID0geyAibWluaTQxIiwgMHhjMDAxMDAwMCwgMjA0OCAqIDQsIDE5MjAsIDEyMDAsIE9WRVJSSURFX05PTkUgfSwKKwlbTV9NQl0gPSB7ICJtYWNib29rIiwgMHg4MDAwMDAwMCwgMjA0OCAqIDQsIDEyODAsIDgwMCwgT1ZFUlJJREVfTk9ORSB9LAorCVtNX01CXzVfMV0gPSB7ICJtYWNib29rNTEiLCAweDgwMDEwMDAwLCAyMDQ4ICogNCwgMTI4MCwgODAwLCBPVkVSUklERV9OT05FIH0sCisJW01fTUJfNl8xXSA9IHsgIm1hY2Jvb2s2MSIsIDB4ODAwMTAwMDAsIDIwNDggKiA0LCAxMjgwLCA4MDAsIE9WRVJSSURFX05PTkUgfSwKKwlbTV9NQl83XzFdID0geyAibWFjYm9vazcxIiwgMHg4MDAxMDAwMCwgMjA0OCAqIDQsIDEyODAsIDgwMCwgT1ZFUlJJREVfTk9ORSB9LAorCVtNX01CQV0gPSB7ICJtYmEiLCAweDgwMDAwMDAwLCAyMDQ4ICogNCwgMTI4MCwgODAwLCBPVkVSUklERV9OT05FIH0sCisJLyogMTEiIE1hY2Jvb2sgQWlyIDMsMSBwYXNzZXMgdGhlIHdyb25nIHN0cmlkZSAqLworCVtNX01CQV8zXSA9IHsgIm1iYTMiLCAwLCAyMDQ4ICogNCwgMCwgMCwgT1ZFUlJJREVfU1RSSURFIH0sCisJW01fTUJQXSA9IHsgIm1icCIsIDB4ODAwMTAwMDAsIDE0NzIgKiA0LCAxNDQwLCA5MDAsIE9WRVJSSURFX05PTkUgfSwKKwlbTV9NQlBfMl0gPSB7ICJtYnAyIiwgMCwgMCwgMCwgMCwgT1ZFUlJJREVfTk9ORSB9LCAvKiBwbGFjZWhvbGRlciAqLworCVtNX01CUF8yXzJdID0geyAibWJwMjIiLCAweDgwMDEwMDAwLCAxNDcyICogNCwgMTQ0MCwgOTAwLCBPVkVSUklERV9OT05FIH0sCisJW01fTUJQX1NSXSA9IHsgIm1icDMiLCAweDgwMDMwMDAwLCAyMDQ4ICogNCwgMTQ0MCwgOTAwLCBPVkVSUklERV9OT05FIH0sCisJW01fTUJQXzRdID0geyAibWJwNCIsIDB4YzAwNjAwMDAsIDIwNDggKiA0LCAxOTIwLCAxMjAwLCBPVkVSUklERV9OT05FIH0sCisJW01fTUJQXzVfMV0gPSB7ICJtYnA1MSIsIDB4YzAwMTAwMDAsIDIwNDggKiA0LCAxNDQwLCA5MDAsIE9WRVJSSURFX05PTkUgfSwKKwlbTV9NQlBfNV8yXSA9IHsgIm1icDUyIiwgMHhjMDAxMDAwMCwgMjA0OCAqIDQsIDE5MjAsIDEyMDAsIE9WRVJSSURFX05PTkUgfSwKKwlbTV9NQlBfNV8zXSA9IHsgIm1icDUzIiwgMHhkMDAxMDAwMCwgMjA0OCAqIDQsIDE0NDAsIDkwMCwgT1ZFUlJJREVfTk9ORSB9LAorCVtNX01CUF82XzFdID0geyAibWJwNjEiLCAweDkwMDMwMDAwLCAyMDQ4ICogNCwgMTkyMCwgMTIwMCwgT1ZFUlJJREVfTk9ORSB9LAorCVtNX01CUF82XzJdID0geyAibWJwNjIiLCAweDkwMDMwMDAwLCAyMDQ4ICogNCwgMTY4MCwgMTA1MCwgT1ZFUlJJREVfTk9ORSB9LAorCVtNX01CUF83XzFdID0geyAibWJwNzEiLCAweGMwMDEwMDAwLCAyMDQ4ICogNCwgMTI4MCwgODAwLCBPVkVSUklERV9OT05FIH0sCisJW01fTUJQXzhfMl0gPSB7ICJtYnA4MiIsIDB4OTAwMTAwMDAsIDE0NzIgKiA0LCAxNDQwLCA5MDAsIE9WRVJSSURFX05PTkUgfSwKKwlbTV9VTktOT1dOXSA9IHsgTlVMTCwgMCwgMCwgMCwgMCwgT1ZFUlJJREVfTk9ORSB9CiB9OwogCiBzdGF0aWMgaW50IHNldF9zeXN0ZW0oY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKTsKQEAgLTEzOCw2ICsxNTAsNyBAQAogCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIEluYy4iLCAiTWFjQm9vazYsMSIsIE1fTUJfNl8xKSwKIAlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBJbmMuIiwgIk1hY0Jvb2s3LDEiLCBNX01CXzdfMSksCiAJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgSW5jLiIsICJNYWNCb29rQWlyMSwxIiwgTV9NQkEpLAorCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIEluYy4iLCAiTWFjQm9va0FpcjMsMSIsIE1fTUJBXzMpLAogCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIENvbXB1dGVyLCBJbmMuIiwgIk1hY0Jvb2tQcm8xLDEiLCBNX01CUCksCiAJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgQ29tcHV0ZXIsIEluYy4iLCAiTWFjQm9va1BybzIsMSIsIE1fTUJQXzIpLAogCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIENvbXB1dGVyLCBJbmMuIiwgIk1hY0Jvb2tQcm8yLDIiLCBNX01CUF8yXzIpLApAQCAtMTUxLDE5ICsxNjQsMjYgQEAKIAlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBJbmMuIiwgIk1hY0Jvb2tQcm82LDEiLCBNX01CUF82XzEpLAogCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIEluYy4iLCAiTWFjQm9va1BybzYsMiIsIE1fTUJQXzZfMiksCiAJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgSW5jLiIsICJNYWNCb29rUHJvNywxIiwgTV9NQlBfN18xKSwKKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBJbmMuIiwgIk1hY0Jvb2tQcm84LDIiLCBNX01CUF84XzIpLAogCXt9LAogfTsKIAorI2RlZmluZSBjaG9vc2VfdmFsdWUoZG1pdmFsdWUsIGZ3dmFsdWUsIGZpZWxkLCBmbGFncykgKHsJXAorCQl0eXBlb2YoZnd2YWx1ZSkgX3JldF8gPSBmd3ZhbHVlOwkJXAorCQlpZiAoKGZsYWdzKSAmIChmaWVsZCkpCQkJCVwKKwkJCV9yZXRfID0gZG1pdmFsdWU7CQkJXAorCQllbHNlIGlmICgoZnd2YWx1ZSkgPT0gMCkJCQlcCisJCQlfcmV0XyA9IGRtaXZhbHVlOwkJCVwKKwkJX3JldF87CQkJCQkJXAorCX0pCisKIHN0YXRpYyBpbnQgc2V0X3N5c3RlbShjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCiB7CiAJc3RydWN0IGVmaWZiX2RtaV9pbmZvICppbmZvID0gaWQtPmRyaXZlcl9kYXRhOwotCWlmIChpbmZvLT5iYXNlID09IDApCi0JCXJldHVybiAwOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiZWZpZmI6IGRtaSBkZXRlY3RlZCAlcyAtIGZyYW1lYnVmZmVyIGF0ICVwICIKLQkJCSAiKCVkeCVkLCBzdHJpZGUgJWQpXG4iLCBpZC0+aWRlbnQsCi0JCQkgKHZvaWQgKilpbmZvLT5iYXNlLCBpbmZvLT53aWR0aCwgaW5mby0+aGVpZ2h0LAotCQkJIGluZm8tPnN0cmlkZSk7CisJaWYgKGluZm8tPmJhc2UgPT0gMCAmJiBpbmZvLT5oZWlnaHQgPT0gMCAmJiBpbmZvLT53aWR0aCA9PSAwCisJCQkmJiBpbmZvLT5zdHJpZGUgPT0gMCkKKwkJcmV0dXJuIDA7CiAKIAkvKiBUcnVzdCB0aGUgYm9vdGxvYWRlciBvdmVyIHRoZSBETUkgdGFibGVzICovCiAJaWYgKHNjcmVlbl9pbmZvLmxmYl9iYXNlID09IDApIHsKQEAgLTE3MSw0MCArMTkxLDQ3IEBACiAJCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOwogCQlpbnQgZm91bmRfYmFyID0gMDsKICNlbmRpZgotCQlzY3JlZW5faW5mby5sZmJfYmFzZSA9IGluZm8tPmJhc2U7CisJCWlmIChpbmZvLT5iYXNlKSB7CisJCQlzY3JlZW5faW5mby5sZmJfYmFzZSA9IGNob29zZV92YWx1ZShpbmZvLT5iYXNlLAorCQkJCXNjcmVlbl9pbmZvLmxmYl9iYXNlLCBPVkVSUklERV9CQVNFLAorCQkJCWluZm8tPmZsYWdzKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKLQkJLyogbWFrZSBzdXJlIHRoYXQgdGhlIGFkZHJlc3MgaW4gdGhlIHRhYmxlIGlzIGFjdHVhbGx5IG9uIGEKLQkJICogVkdBIGRldmljZSdzIFBDSSBCQVIgKi8KKwkJCS8qIG1ha2Ugc3VyZSB0aGF0IHRoZSBhZGRyZXNzIGluIHRoZSB0YWJsZSBpcyBhY3R1YWxseQorCQkJICogb24gYSBWR0EgZGV2aWNlJ3MgUENJIEJBUiAqLwogCi0JCWZvcl9lYWNoX3BjaV9kZXYoZGV2KSB7Ci0JCQlpbnQgaTsKLQkJCWlmICgoZGV2LT5jbGFzcyA+PiA4KSAhPSBQQ0lfQ0xBU1NfRElTUExBWV9WR0EpCi0JCQkJY29udGludWU7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgREVWSUNFX0NPVU5UX1JFU09VUkNFOyBpKyspIHsKLQkJCQlyZXNvdXJjZV9zaXplX3Qgc3RhcnQsIGVuZDsKKwkJCWZvcl9lYWNoX3BjaV9kZXYoZGV2KSB7CisJCQkJaW50IGk7CisJCQkJaWYgKChkZXYtPmNsYXNzID4+IDgpICE9IFBDSV9DTEFTU19ESVNQTEFZX1ZHQSkKKwkJCQkJY29udGludWU7CisJCQkJZm9yIChpID0gMDsgaSA8IERFVklDRV9DT1VOVF9SRVNPVVJDRTsgaSsrKSB7CisJCQkJCXJlc291cmNlX3NpemVfdCBzdGFydCwgZW5kOwogCi0JCQkJc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCBpKTsKLQkJCQlpZiAoc3RhcnQgPT0gMCkKLQkJCQkJYnJlYWs7Ci0JCQkJZW5kID0gcGNpX3Jlc291cmNlX2VuZChkZXYsIGkpOwotCQkJCWlmIChzY3JlZW5faW5mby5sZmJfYmFzZSA+PSBzdGFydCAmJgotCQkJCQkJc2NyZWVuX2luZm8ubGZiX2Jhc2UgPCBlbmQpIHsKLQkJCQkJZm91bmRfYmFyID0gMTsKKwkJCQkJc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCBpKTsKKwkJCQkJaWYgKHN0YXJ0ID09IDApCisJCQkJCQlicmVhazsKKwkJCQkJZW5kID0gcGNpX3Jlc291cmNlX2VuZChkZXYsIGkpOworCQkJCQlpZiAoc2NyZWVuX2luZm8ubGZiX2Jhc2UgPj0gc3RhcnQgJiYKKwkJCQkJICAgIHNjcmVlbl9pbmZvLmxmYl9iYXNlIDwgZW5kKSB7CisJCQkJCQlmb3VuZF9iYXIgPSAxOworCQkJCQl9CiAJCQkJfQogCQkJfQotCQl9Ci0JCWlmICghZm91bmRfYmFyKQotCQkJc2NyZWVuX2luZm8ubGZiX2Jhc2UgPSAwOworCQkJaWYgKCFmb3VuZF9iYXIpCisJCQkJc2NyZWVuX2luZm8ubGZiX2Jhc2UgPSAwOwogI2VuZGlmCisJCX0KIAl9CiAJaWYgKHNjcmVlbl9pbmZvLmxmYl9iYXNlKSB7Ci0JCWlmIChzY3JlZW5faW5mby5sZmJfbGluZWxlbmd0aCA9PSAwKQotCQkJc2NyZWVuX2luZm8ubGZiX2xpbmVsZW5ndGggPSBpbmZvLT5zdHJpZGU7Ci0JCWlmIChzY3JlZW5faW5mby5sZmJfd2lkdGggPT0gMCkKLQkJCXNjcmVlbl9pbmZvLmxmYl93aWR0aCA9IGluZm8tPndpZHRoOwotCQlpZiAoc2NyZWVuX2luZm8ubGZiX2hlaWdodCA9PSAwKQotCQkJc2NyZWVuX2luZm8ubGZiX2hlaWdodCA9IGluZm8tPmhlaWdodDsKKwkJc2NyZWVuX2luZm8ubGZiX2xpbmVsZW5ndGggPSBjaG9vc2VfdmFsdWUoaW5mby0+c3RyaWRlLAorCQkJc2NyZWVuX2luZm8ubGZiX2xpbmVsZW5ndGgsIE9WRVJSSURFX1NUUklERSwKKwkJCWluZm8tPmZsYWdzKTsKKwkJc2NyZWVuX2luZm8ubGZiX3dpZHRoID0gY2hvb3NlX3ZhbHVlKGluZm8tPndpZHRoLAorCQkJc2NyZWVuX2luZm8ubGZiX3dpZHRoLCBPVkVSUklERV9XSURUSCwKKwkJCWluZm8tPmZsYWdzKTsKKwkJc2NyZWVuX2luZm8ubGZiX2hlaWdodCA9IGNob29zZV92YWx1ZShpbmZvLT5oZWlnaHQsCisJCQlzY3JlZW5faW5mby5sZmJfaGVpZ2h0LCBPVkVSUklERV9IRUlHSFQsCisJCQlpbmZvLT5mbGFncyk7CiAJCWlmIChzY3JlZW5faW5mby5vcmlnX3ZpZGVvX2lzVkdBID09IDApCiAJCQlzY3JlZW5faW5mby5vcmlnX3ZpZGVvX2lzVkdBID0gVklERU9fVFlQRV9FRkk7CiAJfSBlbHNlIHsKQEAgLTIxNCw2ICsyNDEsMTMgQEAKIAkJc2NyZWVuX2luZm8ub3JpZ192aWRlb19pc1ZHQSA9IDA7CiAJCXJldHVybiAwOwogCX0KKworCXByaW50ayhLRVJOX0lORk8gImVmaWZiOiBkbWkgZGV0ZWN0ZWQgJXMgLSBmcmFtZWJ1ZmZlciBhdCAlcCAiCisJCQkgIiglZHglZCwgc3RyaWRlICVkKVxuIiwgaWQtPmlkZW50LAorCQkJICh2b2lkICopc2NyZWVuX2luZm8ubGZiX2Jhc2UsIHNjcmVlbl9pbmZvLmxmYl93aWR0aCwKKwkJCSBzY3JlZW5faW5mby5sZmJfaGVpZ2h0LCBzY3JlZW5faW5mby5sZmJfbGluZWxlbmd0aCk7CisKKwogCXJldHVybiAxOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2VwOTN4eC1mYi5jIGIvZHJpdmVycy92aWRlby9lcDkzeHgtZmIuYwppbmRleCBiMzU4ZDA0Li5jYmRiMWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2VwOTN4eC1mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZXA5M3h4LWZiLmMKQEAgLTQ1Niw3ICs0NTYsNyBAQAogCSAqIFRoZXJlIGlzIGEgYnVnIGluIHRoZSBlcDkzeHggZnJhbWVidWZmZXIgd2hpY2ggY2F1c2VzIHByb2JsZW1zCiAJICogaWYgYml0IDI3IG9mIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGlzIHNldC4KIAkgKiBTZWU6IGh0dHA6Ly9tYXJjLmluZm8vP2w9bGludXgtYXJtLWtlcm5lbCZtPTExMDA2MTI0NTUwMjAwMCZ3PTIKLQkgKiBUaGVyZSBkb2VzIG5vdCBzZWVtIHRvIGJlIGFueSBvZmZpY2FsIGVycmF0YSBmb3IgdGhpcywgYnV0IEkKKwkgKiBUaGVyZSBkb2VzIG5vdCBzZWVtIHRvIGJlIGFueSBvZmZpY2lhbCBlcnJhdGEgZm9yIHRoaXMsIGJ1dCBJCiAJICogaGF2ZSBjb25maXJtZWQgdGhlIHByb2JsZW0gZXhpc3RzIG9uIG15IGhhcmR3YXJlIChlcDkzMTUpIGF0CiAJICogbGVhc3QuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKaW5kZXggZTJiZjk1My4uNWFhYzAwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYm1lbS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwpAQCAtNDIsOSArNDIsMzQgQEAKIAogI2RlZmluZSBGQlBJWE1BUFNJWkUJKDEwMjQgKiA4KQogCitzdGF0aWMgREVGSU5FX01VVEVYKHJlZ2lzdHJhdGlvbl9sb2NrKTsKIHN0cnVjdCBmYl9pbmZvICpyZWdpc3RlcmVkX2ZiW0ZCX01BWF0gX19yZWFkX21vc3RseTsKIGludCBudW1fcmVnaXN0ZXJlZF9mYiBfX3JlYWRfbW9zdGx5OwogCitzdGF0aWMgc3RydWN0IGZiX2luZm8gKmdldF9mYl9pbmZvKHVuc2lnbmVkIGludCBpZHgpCit7CisJc3RydWN0IGZiX2luZm8gKmZiX2luZm87CisKKwlpZiAoaWR4ID49IEZCX01BWCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisKKwltdXRleF9sb2NrKCZyZWdpc3RyYXRpb25fbG9jayk7CisJZmJfaW5mbyA9IHJlZ2lzdGVyZWRfZmJbaWR4XTsKKwlpZiAoZmJfaW5mbykKKwkJYXRvbWljX2luYygmZmJfaW5mby0+Y291bnQpOworCW11dGV4X3VubG9jaygmcmVnaXN0cmF0aW9uX2xvY2spOworCisJcmV0dXJuIGZiX2luZm87Cit9CisKK3N0YXRpYyB2b2lkIHB1dF9mYl9pbmZvKHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKQoreworCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmZmJfaW5mby0+Y291bnQpKQorCQlyZXR1cm47CisJaWYgKGZiX2luZm8tPmZib3BzLT5mYl9kZXN0cm95KQorCQlmYl9pbmZvLT5mYm9wcy0+ZmJfZGVzdHJveShmYl9pbmZvKTsKK30KKwogaW50IGxvY2tfZmJfaW5mbyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAltdXRleF9sb2NrKCZpbmZvLT5sb2NrKTsKQEAgLTY0Nyw2ICs2NzIsNyBAQAogCiBzdGF0aWMgdm9pZCAqZmJfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCiB7CisJbXV0ZXhfbG9jaygmcmVnaXN0cmF0aW9uX2xvY2spOwogCXJldHVybiAoKnBvcyA8IEZCX01BWCkgPyBwb3MgOiBOVUxMOwogfQogCkBAIC02NTgsNiArNjg0LDcgQEAKIAogc3RhdGljIHZvaWQgZmJfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogeworCW11dGV4X3VubG9jaygmcmVnaXN0cmF0aW9uX2xvY2spOwogfQogCiBzdGF0aWMgaW50IGZiX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKQEAgLTY5MCwxMyArNzE3LDMwIEBACiAJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKIH07CiAKKy8qCisgKiBXZSBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBmYl9pbmZvIGluIGZpbGUtPnByaXZhdGVfZGF0YSwKKyAqIGJ1dCBpZiB0aGUgY3VycmVudCByZWdpc3RlcmVkIGZiIGhhcyBjaGFuZ2VkLCB3ZSBkb24ndAorICogYWN0dWFsbHkgd2FudCB0byB1c2UgaXQuCisgKgorICogU28gbG9vayB1cCB0aGUgZmJfaW5mbyB1c2luZyB0aGUgaW5vZGUgbWlub3IgbnVtYmVyLAorICogYW5kIGp1c3QgdmVyaWZ5IGl0IGFnYWluc3QgdGhlIHJlZmVyZW5jZSB3ZSBoYXZlLgorICovCitzdGF0aWMgc3RydWN0IGZiX2luZm8gKmZpbGVfZmJfaW5mbyhzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwlpbnQgZmJpZHggPSBpbWlub3IoaW5vZGUpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07CisKKwlpZiAoaW5mbyAhPSBmaWxlLT5wcml2YXRlX2RhdGEpCisJCWluZm8gPSBOVUxMOworCXJldHVybiBpbmZvOworfQorCiBzdGF0aWMgc3NpemVfdAogZmJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJdW5zaWduZWQgbG9uZyBwID0gKnBwb3M7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0JaW50IGZiaWR4ID0gaW1pbm9yKGlub2RlKTsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZmlsZV9mYl9pbmZvKGZpbGUpOwogCXU4ICpidWZmZXIsICpkc3Q7CiAJdTggX19pb21lbSAqc3JjOwogCWludCBjLCBjbnQgPSAwLCBlcnIgPSAwOwpAQCAtNzYxLDkgKzgwNSw3IEBACiBmYl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJdW5zaWduZWQgbG9uZyBwID0gKnBwb3M7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0JaW50IGZiaWR4ID0gaW1pbm9yKGlub2RlKTsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZmlsZV9mYl9pbmZvKGZpbGUpOwogCXU4ICpidWZmZXIsICpzcmM7CiAJdTggX19pb21lbSAqZHN0OwogCWludCBjLCBjbnQgPSAwLCBlcnIgPSAwOwpAQCAtMTE0MSwxMCArMTE4MywxMCBAQAogCiBzdGF0aWMgbG9uZyBmYl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0JaW50IGZiaWR4ID0gaW1pbm9yKGlub2RlKTsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZmlsZV9mYl9pbmZvKGZpbGUpOwogCisJaWYgKCFpbmZvKQorCQlyZXR1cm4gLUVOT0RFVjsKIAlyZXR1cm4gZG9fZmJfaW9jdGwoaW5mbywgY21kLCBhcmcpOwogfQogCkBAIC0xMjY1LDEyICsxMzA3LDEzIEBACiBzdGF0aWMgbG9uZyBmYl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkgICAgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0JaW50IGZiaWR4ID0gaW1pbm9yKGlub2RlKTsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdOwotCXN0cnVjdCBmYl9vcHMgKmZiID0gaW5mby0+ZmJvcHM7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBmaWxlX2ZiX2luZm8oZmlsZSk7CisJc3RydWN0IGZiX29wcyAqZmI7CiAJbG9uZyByZXQgPSAtRU5PSU9DVExDTUQ7CiAKKwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PREVWOworCWZiID0gaW5mby0+ZmJvcHM7CiAJc3dpdGNoKGNtZCkgewogCWNhc2UgRkJJT0dFVF9WU0NSRUVOSU5GTzoKIAljYXNlIEZCSU9QVVRfVlNDUkVFTklORk86CkBAIC0xMzAzLDE2ICsxMzQ2LDE4IEBACiBzdGF0aWMgaW50CiBmYl9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpCiB7Ci0JaW50IGZiaWR4ID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07Ci0Jc3RydWN0IGZiX29wcyAqZmIgPSBpbmZvLT5mYm9wczsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGZpbGVfZmJfaW5mbyhmaWxlKTsKKwlzdHJ1Y3QgZmJfb3BzICpmYjsKIAl1bnNpZ25lZCBsb25nIG9mZjsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0OwogCXUzMiBsZW47CiAKKwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PREVWOwogCWlmICh2bWEtPnZtX3Bnb2ZmID4gKH4wVUwgPj4gUEFHRV9TSElGVCkpCiAJCXJldHVybiAtRUlOVkFMOwogCW9mZiA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKKwlmYiA9IGluZm8tPmZib3BzOwogCWlmICghZmIpCiAJCXJldHVybiAtRU5PREVWOwogCW11dGV4X2xvY2soJmluZm8tPm1tX2xvY2spOwpAQCAtMTM2MSwxNCArMTQwNiwxNiBAQAogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCWludCByZXMgPSAwOwogCi0JaWYgKGZiaWR4ID49IEZCX01BWCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdOwotCWlmICghaW5mbykKKwlpbmZvID0gZ2V0X2ZiX2luZm8oZmJpZHgpOworCWlmICghaW5mbykgewogCQlyZXF1ZXN0X21vZHVsZSgiZmIlZCIsIGZiaWR4KTsKLQlpbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07Ci0JaWYgKCFpbmZvKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJaW5mbyA9IGdldF9mYl9pbmZvKGZiaWR4KTsKKwkJaWYgKCFpbmZvKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlmIChJU19FUlIoaW5mbykpCisJCXJldHVybiBQVFJfRVJSKGluZm8pOworCiAJbXV0ZXhfbG9jaygmaW5mby0+bG9jayk7CiAJaWYgKCF0cnlfbW9kdWxlX2dldChpbmZvLT5mYm9wcy0+b3duZXIpKSB7CiAJCXJlcyA9IC1FTk9ERVY7CkBAIC0xMzg2LDYgKzE0MzMsOCBAQAogI2VuZGlmCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwlpZiAocmVzKQorCQlwdXRfZmJfaW5mbyhpbmZvKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC0xNDAxLDYgKzE0NTAsNyBAQAogCQlpbmZvLT5mYm9wcy0+ZmJfcmVsZWFzZShpbmZvLDEpOwogCW1vZHVsZV9wdXQoaW5mby0+ZmJvcHMtPm93bmVyKTsKIAltdXRleF91bmxvY2soJmluZm8tPmxvY2spOworCXB1dF9mYl9pbmZvKGluZm8pOwogCXJldHVybiAwOwogfQogCkBAIC0xNDg3LDggKzE1MzcsMTAgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKK3N0YXRpYyBpbnQgZG9fdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyk7CisKICNkZWZpbmUgVkdBX0ZCX1BIWVMgMHhBMDAwMAotdm9pZCByZW1vdmVfY29uZmxpY3RpbmdfZnJhbWVidWZmZXJzKHN0cnVjdCBhcGVydHVyZXNfc3RydWN0ICphLAorc3RhdGljIHZvaWQgZG9fcmVtb3ZlX2NvbmZsaWN0aW5nX2ZyYW1lYnVmZmVycyhzdHJ1Y3QgYXBlcnR1cmVzX3N0cnVjdCAqYSwKIAkJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgcHJpbWFyeSkKIHsKIAlpbnQgaTsKQEAgLTE1MDcsNDYgKzE1NTksMzUgQEAKIAkJCShwcmltYXJ5ICYmIGdlbl9hcGVyICYmIGdlbl9hcGVyLT5jb3VudCAmJgogCQkJIGdlbl9hcGVyLT5yYW5nZXNbMF0uYmFzZSA9PSBWR0FfRkJfUEhZUykpIHsKIAotCQkJcHJpbnRrKEtFUk5fRVJSICJmYjogY29uZmxpY3RpbmcgZmIgaHcgdXNhZ2UgIgorCQkJcHJpbnRrKEtFUk5fSU5GTyAiZmI6IGNvbmZsaWN0aW5nIGZiIGh3IHVzYWdlICIKIAkJCSAgICAgICAiJXMgdnMgJXMgLSByZW1vdmluZyBnZW5lcmljIGRyaXZlclxuIiwKIAkJCSAgICAgICBuYW1lLCByZWdpc3RlcmVkX2ZiW2ldLT5maXguaWQpOwotCQkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihyZWdpc3RlcmVkX2ZiW2ldKTsKKwkJCWRvX3VucmVnaXN0ZXJfZnJhbWVidWZmZXIocmVnaXN0ZXJlZF9mYltpXSk7CiAJCX0KIAl9CiB9Ci1FWFBPUlRfU1lNQk9MKHJlbW92ZV9jb25mbGljdGluZ19mcmFtZWJ1ZmZlcnMpOwogCi0vKioKLSAqCXJlZ2lzdGVyX2ZyYW1lYnVmZmVyIC0gcmVnaXN0ZXJzIGEgZnJhbWUgYnVmZmVyIGRldmljZQotICoJQGZiX2luZm86IGZyYW1lIGJ1ZmZlciBpbmZvIHN0cnVjdHVyZQotICoKLSAqCVJlZ2lzdGVycyBhIGZyYW1lIGJ1ZmZlciBkZXZpY2UgQGZiX2luZm8uCi0gKgotICoJUmV0dXJucyBuZWdhdGl2ZSBlcnJubyBvbiBlcnJvciwgb3IgemVybyBmb3Igc3VjY2Vzcy4KLSAqCi0gKi8KLQotaW50Ci1yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbykKK3N0YXRpYyBpbnQgZG9fcmVnaXN0ZXJfZnJhbWVidWZmZXIoc3RydWN0IGZiX2luZm8gKmZiX2luZm8pCiB7CiAJaW50IGk7CiAJc3RydWN0IGZiX2V2ZW50IGV2ZW50OwogCXN0cnVjdCBmYl92aWRlb21vZGUgbW9kZTsKIAotCWlmIChudW1fcmVnaXN0ZXJlZF9mYiA9PSBGQl9NQVgpCi0JCXJldHVybiAtRU5YSU87Ci0KIAlpZiAoZmJfY2hlY2tfZm9yZWlnbm5lc3MoZmJfaW5mbykpCiAJCXJldHVybiAtRU5PU1lTOwogCi0JcmVtb3ZlX2NvbmZsaWN0aW5nX2ZyYW1lYnVmZmVycyhmYl9pbmZvLT5hcGVydHVyZXMsIGZiX2luZm8tPmZpeC5pZCwKKwlkb19yZW1vdmVfY29uZmxpY3RpbmdfZnJhbWVidWZmZXJzKGZiX2luZm8tPmFwZXJ0dXJlcywgZmJfaW5mby0+Zml4LmlkLAogCQkJCQkgZmJfaXNfcHJpbWFyeV9kZXZpY2UoZmJfaW5mbykpOwogCisJaWYgKG51bV9yZWdpc3RlcmVkX2ZiID09IEZCX01BWCkKKwkJcmV0dXJuIC1FTlhJTzsKKwogCW51bV9yZWdpc3RlcmVkX2ZiKys7CiAJZm9yIChpID0gMCA7IGkgPCBGQl9NQVg7IGkrKykKIAkJaWYgKCFyZWdpc3RlcmVkX2ZiW2ldKQogCQkJYnJlYWs7CiAJZmJfaW5mby0+bm9kZSA9IGk7CisJYXRvbWljX3NldCgmZmJfaW5mby0+Y291bnQsIDEpOwogCW11dGV4X2luaXQoJmZiX2luZm8tPmxvY2spOwogCW11dGV4X2luaXQoJmZiX2luZm8tPm1tX2xvY2spOwogCkBAIC0xNTkyLDYgKzE2MzMsNjkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBkb191bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKQoreworCXN0cnVjdCBmYl9ldmVudCBldmVudDsKKwlpbnQgaSwgcmV0ID0gMDsKKworCWkgPSBmYl9pbmZvLT5ub2RlOworCWlmIChpIDwgMCB8fCBpID49IEZCX01BWCB8fCByZWdpc3RlcmVkX2ZiW2ldICE9IGZiX2luZm8pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFsb2NrX2ZiX2luZm8oZmJfaW5mbykpCisJCXJldHVybiAtRU5PREVWOworCWV2ZW50LmluZm8gPSBmYl9pbmZvOworCXJldCA9IGZiX25vdGlmaWVyX2NhbGxfY2hhaW4oRkJfRVZFTlRfRkJfVU5CSU5ELCAmZXZlbnQpOworCXVubG9ja19mYl9pbmZvKGZiX2luZm8pOworCisJaWYgKHJldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZmJfaW5mby0+cGl4bWFwLmFkZHIgJiYKKwkgICAgKGZiX2luZm8tPnBpeG1hcC5mbGFncyAmIEZCX1BJWE1BUF9ERUZBVUxUKSkKKwkJa2ZyZWUoZmJfaW5mby0+cGl4bWFwLmFkZHIpOworCWZiX2Rlc3Ryb3lfbW9kZWxpc3QoJmZiX2luZm8tPm1vZGVsaXN0KTsKKwlyZWdpc3RlcmVkX2ZiW2ldID0gTlVMTDsKKwludW1fcmVnaXN0ZXJlZF9mYi0tOworCWZiX2NsZWFudXBfZGV2aWNlKGZiX2luZm8pOworCWRldmljZV9kZXN0cm95KGZiX2NsYXNzLCBNS0RFVihGQl9NQUpPUiwgaSkpOworCWV2ZW50LmluZm8gPSBmYl9pbmZvOworCWZiX25vdGlmaWVyX2NhbGxfY2hhaW4oRkJfRVZFTlRfRkJfVU5SRUdJU1RFUkVELCAmZXZlbnQpOworCisJLyogdGhpcyBtYXkgZnJlZSBmYiBpbmZvICovCisJcHV0X2ZiX2luZm8oZmJfaW5mbyk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmVtb3ZlX2NvbmZsaWN0aW5nX2ZyYW1lYnVmZmVycyhzdHJ1Y3QgYXBlcnR1cmVzX3N0cnVjdCAqYSwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgcHJpbWFyeSkKK3sKKwltdXRleF9sb2NrKCZyZWdpc3RyYXRpb25fbG9jayk7CisJZG9fcmVtb3ZlX2NvbmZsaWN0aW5nX2ZyYW1lYnVmZmVycyhhLCBuYW1lLCBwcmltYXJ5KTsKKwltdXRleF91bmxvY2soJnJlZ2lzdHJhdGlvbl9sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0wocmVtb3ZlX2NvbmZsaWN0aW5nX2ZyYW1lYnVmZmVycyk7CisKKy8qKgorICoJcmVnaXN0ZXJfZnJhbWVidWZmZXIgLSByZWdpc3RlcnMgYSBmcmFtZSBidWZmZXIgZGV2aWNlCisgKglAZmJfaW5mbzogZnJhbWUgYnVmZmVyIGluZm8gc3RydWN0dXJlCisgKgorICoJUmVnaXN0ZXJzIGEgZnJhbWUgYnVmZmVyIGRldmljZSBAZmJfaW5mby4KKyAqCisgKglSZXR1cm5zIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yLCBvciB6ZXJvIGZvciBzdWNjZXNzLgorICoKKyAqLworaW50CityZWdpc3Rlcl9mcmFtZWJ1ZmZlcihzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbykKK3sKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmcmVnaXN0cmF0aW9uX2xvY2spOworCXJldCA9IGRvX3JlZ2lzdGVyX2ZyYW1lYnVmZmVyKGZiX2luZm8pOworCW11dGV4X3VubG9jaygmcmVnaXN0cmF0aW9uX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KIAogLyoqCiAgKgl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyIC0gcmVsZWFzZXMgYSBmcmFtZSBidWZmZXIgZGV2aWNlCkBAIC0xNjA5LDQ2ICsxNzEzLDE1IEBACiAgKiAgICAgIHRoYXQgdGhlIGRyaXZlciBpbXBsZW1lbnRzIGZiX29wZW4oKSBhbmQgZmJfcmVsZWFzZSgpIHRvCiAgKiAgICAgIGNoZWNrIHRoYXQgbm8gcHJvY2Vzc2VzIGFyZSB1c2luZyB0aGUgZGV2aWNlLgogICovCi0KIGludAogdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbykKIHsKLQlzdHJ1Y3QgZmJfZXZlbnQgZXZlbnQ7Ci0JaW50IGksIHJldCA9IDA7CisJaW50IHJldDsKIAotCWkgPSBmYl9pbmZvLT5ub2RlOwotCWlmICghcmVnaXN0ZXJlZF9mYltpXSkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGRvbmU7Ci0JfQorCW11dGV4X2xvY2soJnJlZ2lzdHJhdGlvbl9sb2NrKTsKKwlyZXQgPSBkb191bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGZiX2luZm8pOworCW11dGV4X3VubG9jaygmcmVnaXN0cmF0aW9uX2xvY2spOwogCi0KLQlpZiAoIWxvY2tfZmJfaW5mbyhmYl9pbmZvKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JZXZlbnQuaW5mbyA9IGZiX2luZm87Ci0JcmV0ID0gZmJfbm90aWZpZXJfY2FsbF9jaGFpbihGQl9FVkVOVF9GQl9VTkJJTkQsICZldmVudCk7Ci0JdW5sb2NrX2ZiX2luZm8oZmJfaW5mbyk7Ci0KLQlpZiAocmV0KSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlpZiAoZmJfaW5mby0+cGl4bWFwLmFkZHIgJiYKLQkgICAgKGZiX2luZm8tPnBpeG1hcC5mbGFncyAmIEZCX1BJWE1BUF9ERUZBVUxUKSkKLQkJa2ZyZWUoZmJfaW5mby0+cGl4bWFwLmFkZHIpOwotCWZiX2Rlc3Ryb3lfbW9kZWxpc3QoJmZiX2luZm8tPm1vZGVsaXN0KTsKLQlyZWdpc3RlcmVkX2ZiW2ldPU5VTEw7Ci0JbnVtX3JlZ2lzdGVyZWRfZmItLTsKLQlmYl9jbGVhbnVwX2RldmljZShmYl9pbmZvKTsKLQlkZXZpY2VfZGVzdHJveShmYl9jbGFzcywgTUtERVYoRkJfTUFKT1IsIGkpKTsKLQlldmVudC5pbmZvID0gZmJfaW5mbzsKLQlmYl9ub3RpZmllcl9jYWxsX2NoYWluKEZCX0VWRU5UX0ZCX1VOUkVHSVNURVJFRCwgJmV2ZW50KTsKLQotCS8qIHRoaXMgbWF5IGZyZWUgZmIgaW5mbyAqLwotCWlmIChmYl9pbmZvLT5mYm9wcy0+ZmJfZGVzdHJveSkKLQkJZmJfaW5mby0+ZmJvcHMtPmZiX2Rlc3Ryb3koZmJfaW5mbyk7Ci1kb25lOgogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJzeXNmcy5jIGIvZHJpdmVycy92aWRlby9mYnN5c2ZzLmMKaW5kZXggZjRhMzI3Ny4uMDQyNTFjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYnN5c2ZzLmMKKysrIGIvZHJpdmVycy92aWRlby9mYnN5c2ZzLmMKQEAgLTMzLDcgKzMzLDcgQEAKICAqIGZvciBkcml2ZXIgcHJpdmF0ZSBkYXRhIChpbmZvLT5wYXIpLiBpbmZvLT5wYXIgKGlmIGFueSkgd2lsbCBiZQogICogYWxpZ25lZCB0byBzaXplb2YobG9uZykuCiAgKgotICogUmV0dXJucyB0aGUgbmV3IHN0cnVjdHVyZSwgb3IgTlVMTCBpZiBhbiBlcnJvciBvY2N1cmVkLgorICogUmV0dXJucyB0aGUgbmV3IHN0cnVjdHVyZSwgb3IgTlVMTCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICAqCiAgKi8KIHN0cnVjdCBmYl9pbmZvICpmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplX3Qgc2l6ZSwgc3RydWN0IGRldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mbTJmYi5jIGIvZHJpdmVycy92aWRlby9mbTJmYi5jCmluZGV4IDFiMGZlYjguLmQwNTMzYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZm0yZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZtMmZiLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKICAqCWJ1ZmZlciBuZWVkcyBhbiBhbW91bnQgb2YgbWVtb3J5IG9mIDEuNzY5LjQ3MiBieXRlcyB3aGljaAogICoJaXMgbmVhciB0byAyIE1CeXRlICh0aGUgYWxsb2NhdGVkIGFkZHJlc3Mgc3BhY2Ugb2YgWm9ycm8yKS4KICAqCVRoZSBtZW1vcnkgaXMgY2hhbm5lbCBpbnRlcmxlYXZlZC4gVGhhdCBtZWFucyBldmVyeSBjaGFubmVsCi0gKglvd25zIGZvdXIgVlJBTXMuIFVuZm9ydHVuYXRseSBtb3N0IEZyYW1lTWFzdGVycyBJSSBhcmUKKyAqCW93bnMgZm91ciBWUkFNcy4gVW5mb3J0dW5hdGVseSBtb3N0IEZyYW1lTWFzdGVycyBJSSBhcmUKICAqCW5vdCBhc3NlbWJsZWQgd2l0aCBtZW1vcnkgZm9yIHRoZSBhbHBoYSBjaGFubmVsLiBJbiB0aGlzCiAgKgljYXNlIGl0IGNvdWxkIGJlIHBvc3NpYmxlIHRvIGFkZCB0aGUgZnJhbWUgYnVmZmVyIGludG8gdGhlCiAgKglub3JtYWwgbWVtb3J5IHBvb2wuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZzbC1kaXUtZmIuYyBiL2RyaXZlcnMvdmlkZW8vZnNsLWRpdS1mYi5jCmluZGV4IDkwNDhmODcuLmJlZGY1YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZnNsLWRpdS1mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZnNsLWRpdS1mYi5jCkBAIC04ODIsNyArODgyLDcgQEAKICAqIHdoaWNoIG5lZWRzIHRvIGJlIHNjYWxlZCBpbiB0aGlzIGZ1bmN0aW9uIGZvciB0aGUgaGFyZHdhcmUuIFRoaW5ncyB0byB0YWtlCiAgKiBpbnRvIGNvbnNpZGVyYXRpb24gYXJlIGhvdyBtYW55IGNvbG9yIHJlZ2lzdGVycywgaWYgYW55LCBhcmUgc3VwcG9ydGVkIHdpdGgKICAqIHRoZSBjdXJyZW50IGNvbG9yIHZpc3VhbC4gV2l0aCB0cnVlY29sb3IgbW9kZSBubyBjb2xvciBwYWxldHRlcyBhcmUKLSAqIHN1cHBvcnRlZC4gSGVyZSBhIHBzdWVkbyBwYWxldHRlIGlzIGNyZWF0ZWQgd2hpY2ggd2Ugc3RvcmUgdGhlIHZhbHVlIGluCisgKiBzdXBwb3J0ZWQuIEhlcmUgYSBwc2V1ZG8gcGFsZXR0ZSBpcyBjcmVhdGVkIHdoaWNoIHdlIHN0b3JlIHRoZSB2YWx1ZSBpbgogICogcHNldWRvX3BhbGV0dGUgaW4gc3RydWN0IGZiX2luZm8uIEZvciBwc2V1ZG9jb2xvciBtb2RlIHdlIGhhdmUgYSBsaW1pdGVkCiAgKiBjb2xvciBwYWxldHRlLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2diZWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2diZWZiLmMKaW5kZXggOTMzODk5ZC4uN2U3YjdhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9nYmVmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZ2JlZmIuYwpAQCAtNzIxLDcgKzcyMSw3IEBACiAKIAkgICBUaWxlcyBoYXZlIHRoZSBhZHZhbnRhZ2UgdGhhdCB0aGV5IGNhbiBiZSBhbGxvY2F0ZWQgaW5kaXZpZHVhbGx5IGluCiAJICAgbWVtb3J5LiBIb3dldmVyLCB0aGlzIG1hcHBpbmcgaXMgbm90IGxpbmVhciBhdCBhbGwsIHdoaWNoIGlzIG5vdAotCSAgIHJlYWxseSBjb252aWVuaWVudC4gSW4gb3JkZXIgdG8gc3VwcG9ydCBsaW5lYXIgYWRkcmVzc2luZywgdGhlIEdCRQorCSAgIHJlYWxseSBjb252ZW5pZW50LiBJbiBvcmRlciB0byBzdXBwb3J0IGxpbmVhciBhZGRyZXNzaW5nLCB0aGUgR0JFCiAJICAgRE1BIGhhcmR3YXJlIGlzIGZvb2xlZCBpbnRvIHRoaW5raW5nIHRoZSBzY3JlZW4gaXMgb25seSBvbmUgdGlsZQogCSAgIGxhcmdlIGFuZCBidXQgaGFzIGEgZ3JlYXRlciBoZWlnaHQsIHNvIHRoYXQgdGhlIERNQSB0cmFuc2ZlciBjb3ZlcnMKIAkgICB0aGUgc2FtZSByZWdpb24uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2dlb2RlL2x4ZmIuaCBiL2RyaXZlcnMvdmlkZW8vZ2VvZGUvbHhmYi5oCmluZGV4IGJlOGNjYjQuLmNmY2Q4MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZ2VvZGUvbHhmYi5oCisrKyBiL2RyaXZlcnMvdmlkZW8vZ2VvZGUvbHhmYi5oCkBAIC0xMTcsNyArMTE3LDcgQEAKIH07CiAKICNkZWZpbmUgR1BfQkxUX1NUQVRVU19DRQkJKDEgPDwgNCkJLyogY21kIGJ1ZiBlbXB0eSAqLwotI2RlZmluZSBHUF9CTFRfU1RBVFVTX1BCCQkoMSA8PCAwKQkvKiBwcmltYXRpdmUgYnVzeSAqLworI2RlZmluZSBHUF9CTFRfU1RBVFVTX1BCCQkoMSA8PCAwKQkvKiBwcmltaXRpdmUgYnVzeSAqLwogCiAKIC8qIERpc3BsYXkgQ29udHJvbGxlciByZWdpc3RlcnMgKHRhYmxlIDYtNDcgZnJvbSB0aGUgZGF0YSBib29rKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pODEwL2k4MTBfYWNjZWwuYyBiL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwX2FjY2VsLmMKaW5kZXggZjViZWRlZS4uNzY3MmQyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pODEwL2k4MTBfYWNjZWwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9hY2NlbC5jCkBAIC0xMTIsNyArMTEyLDcgQEAKICAqIEBwYXI6IHBvaW50ZXIgdG8gaTgxMGZiX3BhciBzdHJ1Y3R1cmUKICAqCiAgKiBERVNDUklQVElPTjoKLSAqIENoZWNrcy93YWl0cyBmb3Igc3VmZmljZW50IHNwYWNlIGluIHJpbmdidWZmZXIgb2Ygc2l6ZQorICogQ2hlY2tzL3dhaXRzIGZvciBzdWZmaWNpZW50IHNwYWNlIGluIHJpbmdidWZmZXIgb2Ygc2l6ZQogICogc3BhY2UuICBSZXR1cm5zIHRoZSB0YWlsIG9mIHRoZSBidWZmZXIKICAqLyAKIHN0YXRpYyBpbmxpbmUgdTMyIGJlZ2luX2lyaW5nKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1MzIgc3BhY2UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2t5cm8vU1RHNDAwME92ZXJsYXlEZXZpY2UuYyBiL2RyaXZlcnMvdmlkZW8va3lyby9TVEc0MDAwT3ZlcmxheURldmljZS5jCmluZGV4IGE4Yzk3MTMuLjBhZWVhYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8va3lyby9TVEc0MDAwT3ZlcmxheURldmljZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8va3lyby9TVEc0MDAwT3ZlcmxheURldmljZS5jCkBAIC00MTcsNyArNDE3LDcgQEAKIAkvKioqKioqKioqKioqKioqKiogSG9yaXpvbnRhbCBkZWNpbWF0aW9uL3NjYWxpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAJLyoKLQkgKiBOb3cgd2UgaGFuZGxlIHRoZSBob3Jpem9udGFsIGNhc2UsIHRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcmlzb24gb2YKKwkgKiBOb3cgd2UgaGFuZGxlIHRoZSBob3Jpem9udGFsIGNhc2UsIHRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YKIAkgKiB0aGUgdmVydGljYWwgY2FzZSBpbiB0aGF0IHdlIGRlY2ltYXRlIGJ5IGZhY3RvcnMgb2YgMi4gIGFzIHdlIGFyZQogCSAqIHdvcmtpbmcgaW4gd29yZHMgd2Ugc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRvIGRlY2ltYXRlIGJ5IHRoZXNlCiAJICogZmFjdG9ycy4gIGFzIHdlIGFsd2F5cyBoYXZlIHRvIGhhdmUgYSBidWZmZXIgd2hpY2ggaXMgYWxpZ25lZCB0byBhCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2t5cm8vU1RHNDAwMFJlZy5oIGIvZHJpdmVycy92aWRlby9reXJvL1NURzQwMDBSZWcuaAppbmRleCAyNDQ1NDllLi41ZDYyNjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2t5cm8vU1RHNDAwMFJlZy5oCisrKyBiL2RyaXZlcnMvdmlkZW8va3lyby9TVEc0MDAwUmVnLmgKQEAgLTE2LDcgKzE2LDcgQEAKIAogLyoKICAqIE1hY3JvcyB0aGF0IGFjY2VzcyBtZW1vcnkgbWFwcGVkIGNhcmQgcmVnaXN0ZXJzIGluIFBDSSBzcGFjZQotICogQWRkIGFuIGFwcHJvcHJhaXRlIHNlY3Rpb24gZm9yIHlvdXIgT1Mgb3IgcHJvY2Vzc29yIGFyY2hpdGVjdHVyZS4KKyAqIEFkZCBhbiBhcHByb3ByaWF0ZSBzZWN0aW9uIGZvciB5b3VyIE9TIG9yIHByb2Nlc3NvciBhcmNoaXRlY3R1cmUuCiAgKi8KICNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX0RBQzEwNjQuaCBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX0RBQzEwNjQuaAppbmRleCBjNmVkNzgwLi4xZTZlNDViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9EQUMxMDY0LmgKKysrIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfREFDMTA2NC5oCkBAIC00Niw3ICs0Niw3IEBACiAjZGVmaW5lICAgICAgTTEwNjRfWERWSUNMS0NUUkxfRFZJTE9PUENUTCAgICAgICAweDMwCiAJLyogQ1JUQzIgcGl4ZWwgY2xvY2sgYWxsb3dlZCB0bygwKS9ibG9ja2VkIGZyb20oMSkgZHJpdmluZyBDUlRDMiAqLwogI2RlZmluZSAgICAgIE0xMDY0X1hEVklDTEtDVFJMX0MyRFZJQ0xLRU4gICAgICAgMHg0MAotCS8qIFAxUExMIGxvb3AgZmlsdGVyIGJhbmR3aXRoIHNlbGVjdGlvbiAqLworCS8qIFAxUExMIGxvb3AgZmlsdGVyIGJhbmR3aWR0aCBzZWxlY3Rpb24gKi8KICNkZWZpbmUgICAgICBNMTA2NF9YRFZJQ0xLQ1RSTF9QMUxPT1BCV0RUQ1RMICAgIDB4ODAKICNkZWZpbmUgTTEwNjRfWENVUkNPTDBSRUQJMHgwOAogI2RlZmluZSBNMTA2NF9YQ1VSQ09MMEdSRUVOCTB4MDkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX1RpMzAyNi5jIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfVGkzMDI2LmMKaW5kZXggODM1YWFhYS4uOWE0NGNlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfVGkzMDI2LmMKKysrIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfVGkzMDI2LmMKQEAgLTM4Nyw3ICszODcsNyBAQAogCQkJaHctPkRBQ3JlZ1tQT1MzMDI2X1hNSVNDQ1RSTF0gPSBUVlAzMDI2X1hNSVNDQ1RSTF9EQUNfUFVQIHwgVFZQMzAyNl9YTUlTQ0NUUkxfREFDXzhCSVQgfCBUVlAzMDI2X1hNSVNDQ1RSTF9QU0VMX0RJUyB8IFRWUDMwMjZfWE1JU0NDVFJMX1BTRUxfTE9XOwogCQkJYnJlYWs7CiAJCWNhc2UgMTY6Ci0JCQkvKiBYTEFUQ0hDVFJMIHNob3VsZCBiZSBfNF8xIC8gXzJfMS4uLiBXaHkgaXMgbm90PyAoXzJfMSBpcyB1c2VkIGV2ZXJ5dGltZSkgKi8KKwkJCS8qIFhMQVRDSENUUkwgc2hvdWxkIGJlIF80XzEgLyBfMl8xLi4uIFdoeSBpcyBub3Q/IChfMl8xIGlzIHVzZWQgZXZlcnkgdGltZSkgKi8KIAkJCWh3LT5EQUNyZWdbUE9TMzAyNl9YVFJVRUNPTE9SQ1RSTF0gPSAobWluZm8tPmZiY29uLnZhci5ncmVlbi5sZW5ndGggPT0gNSkgPyAoVFZQMzAyNl9YVFJVRUNPTE9SQ1RSTF9ESVJFQ1RDT0xPUiB8IFRWUDMwMjZfWFRSVUVDT0xPUkNUUkxfT1JHQl8xNTU1KSA6IChUVlAzMDI2X1hUUlVFQ09MT1JDVFJMX0RJUkVDVENPTE9SIHwgVFZQMzAyNl9YVFJVRUNPTE9SQ1RSTF9SR0JfNTY1KTsKIAkJCWh3LT5EQUNyZWdbUE9TMzAyNl9YTVVYQ1RSTF0gPSBtdXhjdHJsIHwgVFZQMzAyNl9YTVVYQ1RSTF9QSVhFTF8xNkJJVDsKIAkJCWh3LT5EQUNyZWdbUE9TMzAyNl9YQ0xLQ1RSTF0gPSBUVlAzMDI2X1hDTEtDVFJMX1NSQ19QTEwgfCBUVlAzMDI2X1hDTEtDVFJMX0RJVjI7CkBAIC0zOTksNyArMzk5LDcgQEAKIAkJCWh3LT5EQUNyZWdbUE9TMzAyNl9YQ0xLQ1RSTF0gPSBUVlAzMDI2X1hDTEtDVFJMX1NSQ19QTEwgfCBUVlAzMDI2X1hDTEtDVFJMX0RJVjQ7CiAJCQlicmVhazsKIAkJY2FzZSAzMjoKLQkJCS8qIFhMQVRDSENUUkwgc2hvdWxkIGJlIF8yXzEgLyBfMV8xLi4uIFdoeSBpcyBub3Q/IChfMl8xIGlzIHVzZWQgZXZlcnl0aW1lKSAqLworCQkJLyogWExBVENIQ1RSTCBzaG91bGQgYmUgXzJfMSAvIF8xXzEuLi4gV2h5IGlzIG5vdD8gKF8yXzEgaXMgdXNlZCBldmVyeSB0aW1lKSAqLwogCQkJaHctPkRBQ3JlZ1tQT1MzMDI2X1hNVVhDVFJMXSA9IG11eGN0cmwgfCBUVlAzMDI2X1hNVVhDVFJMX1BJWEVMXzMyQklUOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9iYXNlLmMgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9iYXNlLmMKaW5kZXggNWNlNmZhNi4uNDRiZjhkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuYwpAQCAtNjIxLDcgKzYyMSw3IEBACiAJCXZhci0+eW9mZnNldCA9IHZhci0+eXJlc192aXJ0dWFsIC0gdmFyLT55cmVzOwogCiAJaWYgKGJwcCA9PSAxNiAmJiB2YXItPmdyZWVuLmxlbmd0aCA9PSA1KSB7Ci0JCWJwcC0tOyAvKiBhbiBhcnRpZmljYWwgdmFsdWUgLSAxNSAqLworCQlicHAtLTsgLyogYW4gYXJ0aWZpY2lhbCB2YWx1ZSAtIDE1ICovCiAJfQogCiAJZm9yIChyZ2J0ID0gdGFibGU7IHJnYnQtPmJwcCA8IGJwcDsgcmdidCsrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuaCBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuaAppbmRleCBmOTZhNDcxLi4xMWVkNTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9iYXNlLmgKKysrIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5oCkBAIC0xMiw3ICsxMiw3IEBACiAjdW5kZWYgTUFUUk9YRkJfREVCVUcKIAogLyogaGVhdnkgZGVidWdnaW5nOiAqLwotLyogLS0gbG9ncyBwdXRjW3NdLCBzbyBldmVyeXRpbWUgYSBjaGFyIGlzIGRpc3BsYXllZCwgaXQncyBsb2dnZWQgKi8KKy8qIC0tIGxvZ3MgcHV0Y1tzXSwgc28gZXZlcnkgdGltZSBhIGNoYXIgaXMgZGlzcGxheWVkLCBpdCdzIGxvZ2dlZCAqLwogI3VuZGVmIE1BVFJPWEZCX0RFQlVHX0hFQVZZCiAKIC8qIFRoaXMgb25lIF9jb3VsZF8gY2F1c2UgaW5maW5pdGUgbG9vcHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbnVjOTAwZmIuaCBiL2RyaXZlcnMvdmlkZW8vbnVjOTAwZmIuaAppbmRleCA2YzIzYWEzLi5iYzdjOTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL251YzkwMGZiLmgKKysrIGIvZHJpdmVycy92aWRlby9udWM5MDBmYi5oCkBAIC04LDcgKzgsNyBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogICBBdXRoZXI6CisgKiAgIEF1dGhvcjoKICAqICAgICAgICBXYW5nIFFpYW5nKHJ1cmFsaXR5LmxpbnV4QGdtYWlsLmNvbSkgIDIwMDkvMTIvMTYKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vb21hcC9LY29uZmlnCmluZGV4IDE1ZTdmMTkuLjE5NmZhMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9LY29uZmlnCkBAIC02NCw3ICs2NCw3IEBACiAJZGVwZW5kcyBvbiBGQl9PTUFQICYmIEZCX09NQVBfTENEQ19FWFRFUk5BTAogCWhlbHAKIAkgIFNheSBZIGhlcmUsIGlmIHlvdXIgdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMgYXJlIGNhcGFibGUgb2YKLQkgIG5vdGlmeWluZyB0aGUgZnJhbWUgYnVmZmVyIGRyaXZlciB3aGVuIGEgY2hhbmdlIGhhcyBvY2N1cmVkIGluCisJICBub3RpZnlpbmcgdGhlIGZyYW1lIGJ1ZmZlciBkcml2ZXIgd2hlbiBhIGNoYW5nZSBoYXMgb2NjdXJyZWQgaW4KIAkgIHRoZSBmcmFtZSBidWZmZXIgY29udGVudCBhbmQgdGh1cyBhIHJlbG9hZCBvZiB0aGUgaW1hZ2UgZGF0YSB0bwogCSAgdGhlIGV4dGVybmFsIGZyYW1lIGJ1ZmZlciBpcyByZXF1aXJlZC4gSWYgdW5zdXJlLCBzYXkgTi4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvaGRtaS5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvaGRtaS5jCmluZGV4IDBkNDRmMDcuLmE5ODFkZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2hkbWkuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9oZG1pLmMKQEAgLTU4Nyw3ICs1ODcsNyBAQAogCXN0cnVjdCBoZG1pX2NtIGNtOwogCXN0cnVjdCBvbWFwX3ZpZGVvX3RpbWluZ3MgZWRpZF90aW1pbmdzOwogCi0JLyogc2VhY2ggYmxvY2sgMCwgdGhlcmUgYXJlIDQgRFREcyBhcnJhbmdlZCBpbiBwcmlvcml0eSBvcmRlciAqLworCS8qIHNlYXJjaCBibG9jayAwLCB0aGVyZSBhcmUgNCBEVERzIGFycmFuZ2VkIGluIHByaW9yaXR5IG9yZGVyICovCiAJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgRURJRF9TSVpFX0JMT0NLMF9USU1JTkdfREVTQ1JJUFRPUjsgY291bnQrKykgewogCQljdXJyZW50X2Rlc2NyaXB0b3JfYWRkcnMgPQogCQkJRURJRF9ERVNDUklQVE9SX0JMT0NLMF9BRERSRVNTICsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcHhhM3h4LWdjdS5jIGIvZHJpdmVycy92aWRlby9weGEzeHgtZ2N1LmMKaW5kZXggY2Y0YmViOS4uMDI4M2M3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9weGEzeHgtZ2N1LmMKKysrIGIvZHJpdmVycy92aWRlby9weGEzeHgtZ2N1LmMKQEAgLTI1LDcgKzI1LDcgQEAKIAogLyoKICAqIFdBUk5JTkc6IFRoaXMgY29udHJvbGxlciBpcyBhdHRhY2hlZCB0byBTeXN0ZW0gQnVzIDIgb2YgdGhlIFBYQSB3aGljaAotICogbmVlZHMgaXRzIGFyYml0ZXIgdG8gYmUgZW5hYmxlZCBleHBsaWN0bHkgKENLRU5CICYgMTw8OSkuCisgKiBuZWVkcyBpdHMgYXJiaXRlciB0byBiZSBlbmFibGVkIGV4cGxpY2l0bHkgKENLRU5CICYgMTw8OSkuCiAgKiBUaGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IHRvIGRvIHRoaXMgZnJvbSBMaW51eCwgc28geW91IG5lZWQgdG8gdGVhY2gKICAqIHlvdXIgYm9vdGxvYWRlciBmb3Igbm93LgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKaW5kZXggYTJlNWI1MS4uMGY0ZThjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9weGFmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcHhhZmIuYwpAQCAtMTY0OCw3ICsxNjQ4LDkgQEAKIAogCXN3aXRjaCAodmFsKSB7CiAJY2FzZSBDUFVGUkVRX1BSRUNIQU5HRToKLQkJaWYgKCFmYmktPm92ZXJsYXlbMF0udXNhZ2UgJiYgIWZiaS0+b3ZlcmxheVsxXS51c2FnZSkKKyNpZmRlZiBDT05GSUdfRkJfUFhBX09WRVJMQVkKKwkJaWYgKCEoZmJpLT5vdmVybGF5WzBdLnVzYWdlIHx8IGZiaS0+b3ZlcmxheVsxXS51c2FnZSkpCisjZW5kaWYKIAkJCXNldF9jdHJscl9zdGF0ZShmYmksIENfRElTQUJMRV9DTEtDSEFOR0UpOwogCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zM2MtZmIuYyBiL2RyaXZlcnMvdmlkZW8vczNjLWZiLmMKaW5kZXggNjgxN2QxOC4uM2I2Y2RjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zM2MtZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3MzYy1mYi5jCkBAIC00OCw3ICs0OCw3IEBACiAjdW5kZWYgd3JpdGVsCiAjZGVmaW5lIHdyaXRlbCh2LCByKSBkbyB7IFwKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICUwOHggPT4gJXBcbiIsIF9fZnVuY19fLCAodW5zaWduZWQgaW50KXYsIHIpOyBcCi0JX19yYXdfd3JpdGVsKHYsIHIpOyB9IHdoaWxlKDApCisJX19yYXdfd3JpdGVsKHYsIHIpOyB9IHdoaWxlICgwKQogI2VuZGlmIC8qIEZCX1MzQ19ERUJVR19SRUdXUklURSAqLwogCiAvKiBpcnFfZmxhZ3MgYml0cyAqLwpAQCAtNTE4LDcgKzUxOCw3IEBACiAKIAkJZGF0YSA9IFZJRFRDT04yX0xJTkVWQUwodmFyLT55cmVzIC0gMSkgfAogCQkgICAgICAgVklEVENPTjJfSE9aVkFMKHZhci0+eHJlcyAtIDEpOwotCQl3cml0ZWwoZGF0YSwgcmVncyArc2ZiLT52YXJpYW50LnZpZHRjb24gKyA4ICk7CisJCXdyaXRlbChkYXRhLCByZWdzICsgc2ZiLT52YXJpYW50LnZpZHRjb24gKyA4KTsKIAl9CiAKIAkvKiB3cml0ZSB0aGUgYnVmZmVyIGFkZHJlc3MgKi8KQEAgLTEzMDQsNiArMTMwNCw3IEBACiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHMzY19mYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCWNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgKnBsYXRpZDsKIAlzdHJ1Y3QgczNjX2ZiX2RyaXZlcmRhdGEgKmZiZHJ2OwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CiAJc3RydWN0IHMzY19mYl9wbGF0ZGF0YSAqcGQ7CkBAIC0xMzEyLDcgKzEzMTMsOCBAQAogCWludCB3aW47CiAJaW50IHJldCA9IDA7CiAKLQlmYmRydiA9IChzdHJ1Y3QgczNjX2ZiX2RyaXZlcmRhdGEgKilwbGF0Zm9ybV9nZXRfZGV2aWNlX2lkKHBkZXYpLT5kcml2ZXJfZGF0YTsKKwlwbGF0aWQgPSBwbGF0Zm9ybV9nZXRfZGV2aWNlX2lkKHBkZXYpOworCWZiZHJ2ID0gKHN0cnVjdCBzM2NfZmJfZHJpdmVyZGF0YSAqKXBsYXRpZC0+ZHJpdmVyX2RhdGE7CiAKIAlpZiAoZmJkcnYtPnZhcmlhbnQubnJfd2luZG93cyA+IFMzQ19GQl9NQVhfV0lOKSB7CiAJCWRldl9lcnIoZGV2LCAidG9vIG1hbnkgd2luZG93cywgY2Fubm90IGF0dGFjaFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3MzZmIuYyBiL2RyaXZlcnMvdmlkZW8vczNmYi5jCmluZGV4IGRkZWRhZDkuLmM0NDgyZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vczNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vczNmYi5jCkBAIC03MSw5ICs3MSw5IEBACiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgczNfbmFtZXNbXSA9IHsiUzMgVW5rbm93biIsICJTMyBUcmlvMzIiLCAiUzMgVHJpbzY0IiwgIlMzIFRyaW82NFYrIiwKIAkJCSJTMyBUcmlvNjRVVisiLCAiUzMgVHJpbzY0VjIvRFgiLCAiUzMgVHJpbzY0VjIvR1giLAotCQkJIlMzIFBsYXRvL1BYIiwgIlMzIEF1cm9yYTY0VlAiLCAiUzMgVmlyZ2UiLAorCQkJIlMzIFBsYXRvL1BYIiwgIlMzIEF1cm9yYTY0VisiLCAiUzMgVmlyZ2UiLAogCQkJIlMzIFZpcmdlL1ZYIiwgIlMzIFZpcmdlL0RYIiwgIlMzIFZpcmdlL0dYIiwKLQkJCSJTMyBWaXJnZS9HWDIiLCAiUzMgVmlyZ2UvR1gyUCIsICJTMyBWaXJnZS9HWDJQIiwKKwkJCSJTMyBWaXJnZS9HWDIiLCAiUzMgVmlyZ2UvR1gyKyIsICIiLAogCQkJIlMzIFRyaW8zRC8xWCIsICJTMyBUcmlvM0QvMlgiLCAiUzMgVHJpbzNELzJYIiwKIAkJCSJTMyBUcmlvM0QifTsKIApAQCAtOTAsOSArOTAsOCBAQAogI2RlZmluZSBDSElQXzk4OF9WSVJHRV9WWAkweDBBCiAjZGVmaW5lIENISVBfMzc1X1ZJUkdFX0RYCTB4MEIKICNkZWZpbmUgQ0hJUF8zODVfVklSR0VfR1gJMHgwQwotI2RlZmluZSBDSElQXzM1Nl9WSVJHRV9HWDIJMHgwRAotI2RlZmluZSBDSElQXzM1N19WSVJHRV9HWDJQCTB4MEUKLSNkZWZpbmUgQ0hJUF8zNTlfVklSR0VfR1gyUAkweDBGCisjZGVmaW5lIENISVBfMzU3X1ZJUkdFX0dYMgkweDBECisjZGVmaW5lIENISVBfMzU5X1ZJUkdFX0dYMlAJMHgwRQogI2RlZmluZSBDSElQXzM2MF9UUklPM0RfMVgJMHgxMAogI2RlZmluZSBDSElQXzM2Ml9UUklPM0RfMlgJMHgxMQogI2RlZmluZSBDSElQXzM2OF9UUklPM0RfMlgJMHgxMgpAQCAtMzU5LDcgKzM1OCw5IEBACiAJdmdhX3cocGFyLT5zdGF0ZS52Z2FiYXNlLCBWR0FfTUlTX1csIHJlZ3ZhbCB8IFZHQV9NSVNfRU5CX1BMTF9MT0FEKTsKIAogCS8qIFNldCBTMyBjbG9jayByZWdpc3RlcnMgKi8KLQlpZiAocGFyLT5jaGlwID09IENISVBfMzYwX1RSSU8zRF8xWCB8fAorCWlmIChwYXItPmNoaXAgPT0gQ0hJUF8zNTdfVklSR0VfR1gyIHx8CisJICAgIHBhci0+Y2hpcCA9PSBDSElQXzM1OV9WSVJHRV9HWDJQIHx8CisJICAgIHBhci0+Y2hpcCA9PSBDSElQXzM2MF9UUklPM0RfMVggfHwKIAkgICAgcGFyLT5jaGlwID09IENISVBfMzYyX1RSSU8zRF8yWCB8fAogCSAgICBwYXItPmNoaXAgPT0gQ0hJUF8zNjhfVFJJTzNEXzJYKSB7CiAJCXZnYV93c2VxKHBhci0+c3RhdGUudmdhYmFzZSwgMHgxMiwgKG4gLSAyKSB8ICgociAmIDMpIDw8IDYpKTsJLyogbiBhbmQgdHdvIGJpdHMgb2YgciAqLwpAQCAtNTYwLDcgKzU2MSw5IEBACiAJcHJfZGVidWcoImZiJWQ6IG9mZnNldCByZWdpc3RlciAgICAgICA6ICVkXG4iLCBpbmZvLT5ub2RlLCBvZmZzZXRfdmFsdWUpOwogCXN2Z2Ffd2NydF9tdWx0aShwYXItPnN0YXRlLnZnYWJhc2UsIHMzX29mZnNldF9yZWdzLCBvZmZzZXRfdmFsdWUpOwogCi0JaWYgKHBhci0+Y2hpcCAhPSBDSElQXzM2MF9UUklPM0RfMVggJiYKKwlpZiAocGFyLT5jaGlwICE9IENISVBfMzU3X1ZJUkdFX0dYMiAmJgorCSAgICBwYXItPmNoaXAgIT0gQ0hJUF8zNTlfVklSR0VfR1gyUCAmJgorCSAgICBwYXItPmNoaXAgIT0gQ0hJUF8zNjBfVFJJTzNEXzFYICYmCiAJICAgIHBhci0+Y2hpcCAhPSBDSElQXzM2Ml9UUklPM0RfMlggJiYKIAkgICAgcGFyLT5jaGlwICE9IENISVBfMzY4X1RSSU8zRF8yWCkgewogCQl2Z2Ffd2NydChwYXItPnN0YXRlLnZnYWJhc2UsIDB4NTQsIDB4MTgpOyAvKiBNIHBhcmFtZXRlciAqLwpAQCAtNjA0LDcgKzYwNyw5IEBACiAJCXZnYV93Y3J0KHBhci0+c3RhdGUudmdhYmFzZSwgMHg2NiwgMHg5MCk7CiAJfQogCi0JaWYgKHBhci0+Y2hpcCA9PSBDSElQXzM2MF9UUklPM0RfMVggfHwKKwlpZiAocGFyLT5jaGlwID09IENISVBfMzU3X1ZJUkdFX0dYMiB8fAorCSAgICBwYXItPmNoaXAgPT0gQ0hJUF8zNTlfVklSR0VfR1gyUCB8fAorCSAgICBwYXItPmNoaXAgPT0gQ0hJUF8zNjBfVFJJTzNEXzFYIHx8CiAJICAgIHBhci0+Y2hpcCA9PSBDSElQXzM2Ml9UUklPM0RfMlggfHwKIAkgICAgcGFyLT5jaGlwID09IENISVBfMzY4X1RSSU8zRF8yWCB8fAogCSAgICBwYXItPmNoaXAgPT0gQ0hJUF8zNjVfVFJJTzNEICAgIHx8CkBAIC02MTcsOCArNjIyLDcgQEAKIAkJdmdhX3djcnQocGFyLT5zdGF0ZS52Z2FiYXNlLCAweDY2LCAweDgxKTsKIAl9CiAKLQlpZiAocGFyLT5jaGlwID09IENISVBfMzU2X1ZJUkdFX0dYMiAgfHwKLQkgICAgcGFyLT5jaGlwID09IENISVBfMzU3X1ZJUkdFX0dYMlAgfHwKKwlpZiAocGFyLT5jaGlwID09IENISVBfMzU3X1ZJUkdFX0dYMiAgfHwKIAkgICAgcGFyLT5jaGlwID09IENISVBfMzU5X1ZJUkdFX0dYMlAgfHwKIAkgICAgcGFyLT5jaGlwID09IENISVBfMzYwX1RSSU8zRF8xWCB8fAogCSAgICBwYXItPmNoaXAgPT0gQ0hJUF8zNjJfVFJJTzNEXzJYIHx8CkBAIC02NzQsNiArNjc4LDggQEAKIAkJcHJfZGVidWcoImZiJWQ6IDggYml0IHBzZXVkb2NvbG9yXG4iLCBpbmZvLT5ub2RlKTsKIAkJc3ZnYV93Y3J0X21hc2socGFyLT5zdGF0ZS52Z2FiYXNlLCAweDUwLCAweDAwLCAweDMwKTsKIAkJaWYgKGluZm8tPnZhci5waXhjbG9jayA+IDIwMDAwIHx8CisJCSAgICBwYXItPmNoaXAgPT0gQ0hJUF8zNTdfVklSR0VfR1gyIHx8CisJCSAgICBwYXItPmNoaXAgPT0gQ0hJUF8zNTlfVklSR0VfR1gyUCB8fAogCQkgICAgcGFyLT5jaGlwID09IENISVBfMzYwX1RSSU8zRF8xWCB8fAogCQkgICAgcGFyLT5jaGlwID09IENISVBfMzYyX1RSSU8zRF8yWCB8fAogCQkgICAgcGFyLT5jaGlwID09IENISVBfMzY4X1RSSU8zRF8yWCkKQEAgLTcwMiw3ICs3MDgsOSBAQAogCQl9IGVsc2UgewogCQkJc3ZnYV93Y3J0X21hc2socGFyLT5zdGF0ZS52Z2FiYXNlLCAweDUwLCAweDEwLCAweDMwKTsKIAkJCXN2Z2Ffd2NydF9tYXNrKHBhci0+c3RhdGUudmdhYmFzZSwgMHg2NywgMHgzMCwgMHhGMCk7Ci0JCQlpZiAocGFyLT5jaGlwICE9IENISVBfMzYwX1RSSU8zRF8xWCAmJgorCQkJaWYgKHBhci0+Y2hpcCAhPSBDSElQXzM1N19WSVJHRV9HWDIgJiYKKwkJCSAgICBwYXItPmNoaXAgIT0gQ0hJUF8zNTlfVklSR0VfR1gyUCAmJgorCQkJICAgIHBhci0+Y2hpcCAhPSBDSElQXzM2MF9UUklPM0RfMVggJiYKIAkJCSAgICBwYXItPmNoaXAgIT0gQ0hJUF8zNjJfVFJJTzNEXzJYICYmCiAJCQkgICAgcGFyLT5jaGlwICE9IENISVBfMzY4X1RSSU8zRF8yWCkKIAkJCQlobXVsID0gMjsKQEAgLTcyNyw3ICs3MzUsOSBAQAogCQl9IGVsc2UgewogCQkJc3ZnYV93Y3J0X21hc2socGFyLT5zdGF0ZS52Z2FiYXNlLCAweDUwLCAweDEwLCAweDMwKTsKIAkJCXN2Z2Ffd2NydF9tYXNrKHBhci0+c3RhdGUudmdhYmFzZSwgMHg2NywgMHg1MCwgMHhGMCk7Ci0JCQlpZiAocGFyLT5jaGlwICE9IENISVBfMzYwX1RSSU8zRF8xWCAmJgorCQkJaWYgKHBhci0+Y2hpcCAhPSBDSElQXzM1N19WSVJHRV9HWDIgJiYKKwkJCSAgICBwYXItPmNoaXAgIT0gQ0hJUF8zNTlfVklSR0VfR1gyUCAmJgorCQkJICAgIHBhci0+Y2hpcCAhPSBDSElQXzM2MF9UUklPM0RfMVggJiYKIAkJCSAgICBwYXItPmNoaXAgIT0gQ0hJUF8zNjJfVFJJTzNEXzJYICYmCiAJCQkgICAgcGFyLT5jaGlwICE9IENISVBfMzY4X1RSSU8zRF8yWCkKIAkJCQlobXVsID0gMjsKQEAgLTEwNjksNiArMTA3OSwxNiBAQAogCQkJaW5mby0+c2NyZWVuX3NpemUgPSAyIDw8IDIwOwogCQkJYnJlYWs7CiAJCX0KKwl9IGVsc2UgaWYgKHBhci0+Y2hpcCA9PSBDSElQXzM1N19WSVJHRV9HWDIgfHwKKwkJICAgcGFyLT5jaGlwID09IENISVBfMzU5X1ZJUkdFX0dYMlApIHsKKwkJc3dpdGNoICgocmVndmFsICYgMHhDMCkgPj4gNikgeworCQljYXNlIDE6IC8qIDRNQiAqLworCQkJaW5mby0+c2NyZWVuX3NpemUgPSA0IDw8IDIwOworCQkJYnJlYWs7CisJCWNhc2UgMzogLyogMk1CICovCisJCQlpbmZvLT5zY3JlZW5fc2l6ZSA9IDIgPDwgMjA7CisJCQlicmVhazsKKwkJfQogCX0gZWxzZQogCQlpbmZvLT5zY3JlZW5fc2l6ZSA9IHMzX21lbXNpemVzW3JlZ3ZhbCA+PiA1XSA8PCAxMDsKIAlpbmZvLT5maXguc21lbV9sZW4gPSBpbmZvLT5zY3JlZW5fc2l6ZTsKQEAgLTEyNjgsOCArMTI4OCw4IEBACiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TMywgMHg1NjMxKSwgLmRyaXZlcl9kYXRhID0gQ0hJUF8zMjVfVklSR0V9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUzMsIDB4ODgzRCksIC5kcml2ZXJfZGF0YSA9IENISVBfOTg4X1ZJUkdFX1ZYfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1MzLCAweDhBMDEpLCAuZHJpdmVyX2RhdGEgPSBDSElQX1hYWF9WSVJHRV9EWEdYfSwKLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1MzLCAweDhBMTApLCAuZHJpdmVyX2RhdGEgPSBDSElQXzM1Nl9WSVJHRV9HWDJ9LAotCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUzMsIDB4OEExMSksIC5kcml2ZXJfZGF0YSA9IENISVBfMzU3X1ZJUkdFX0dYMlB9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUzMsIDB4OEExMCksIC5kcml2ZXJfZGF0YSA9IENISVBfMzU3X1ZJUkdFX0dYMn0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TMywgMHg4QTExKSwgLmRyaXZlcl9kYXRhID0gQ0hJUF8zNTlfVklSR0VfR1gyUH0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TMywgMHg4QTEyKSwgLmRyaXZlcl9kYXRhID0gQ0hJUF8zNTlfVklSR0VfR1gyUH0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TMywgMHg4QTEzKSwgLmRyaXZlcl9kYXRhID0gQ0hJUF8zNlhfVFJJTzNEXzFYXzJYfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1MzLCAweDg5MDQpLCAuZHJpdmVyX2RhdGEgPSBDSElQXzM2NV9UUklPM0R9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmItaTJjLmMgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYi1pMmMuYwppbmRleCBiMTZlNjEzLi5iYjcxZmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYi1pMmMuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYi1pMmMuYwpAQCAtMTU5LDggKzE1OSw3IEBACiAJCWVsc2UKIAkJCWRldl93YXJuKCZjaGFuLT5wYXItPnBjaWRldi0+ZGV2LAogCQkJCSAiRmFpbGVkIHRvIHJlZ2lzdGVyIEkyQyBidXMgJXMuXG4iLCBuYW1lKTsKLQl9IGVsc2UKLQkJY2hhbi0+cGFyID0gTlVMTDsKKwl9CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC0xNzAsOSArMTY5LDggQEAKIAlzdHJ1Y3Qgc2F2YWdlZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CiAJcGFyLT5jaGFuLnBhcgk9IHBhcjsKIAotCXN3aXRjaChpbmZvLT5maXguYWNjZWwpIHsKLQljYXNlIEZCX0FDQ0VMX1BST1NBVkFHRV9ERFJLOgotCWNhc2UgRkJfQUNDRUxfUFJPU0FWQUdFX1BNOgorCXN3aXRjaCAocGFyLT5jaGlwKSB7CisJY2FzZSBTM19QUk9TQVZBR0U6CiAJCXBhci0+Y2hhbi5yZWcgICAgICAgICA9IENSX1NFUklBTDI7CiAJCXBhci0+Y2hhbi5pb2FkZHIgICAgICA9IHBhci0+bW1pby52YmFzZTsKIAkJcGFyLT5jaGFuLmFsZ28uc2V0c2RhID0gcHJvc2F2YWdlX2dwaW9fc2V0c2RhOwpAQCAtMTgwLDcgKzE3OCw3IEBACiAJCXBhci0+Y2hhbi5hbGdvLmdldHNkYSA9IHByb3NhdmFnZV9ncGlvX2dldHNkYTsKIAkJcGFyLT5jaGFuLmFsZ28uZ2V0c2NsID0gcHJvc2F2YWdlX2dwaW9fZ2V0c2NsOwogCQlicmVhazsKLQljYXNlIEZCX0FDQ0VMX1NBVkFHRTQ6CisJY2FzZSBTM19TQVZBR0U0OgogCQlwYXItPmNoYW4ucmVnID0gQ1JfU0VSSUFMMTsKIAkJaWYgKHBhci0+cGNpZGV2LT5yZXZpc2lvbiA+IDEgJiYgIShWR0FyQ1IoMHhhNiwgcGFyKSAmIDB4NDApKQogCQkJcGFyLT5jaGFuLnJlZyA9IENSX1NFUklBTDI7CkBAIC0xOTAsOCArMTg4LDggQEAKIAkJcGFyLT5jaGFuLmFsZ28uZ2V0c2RhID0gcHJvc2F2YWdlX2dwaW9fZ2V0c2RhOwogCQlwYXItPmNoYW4uYWxnby5nZXRzY2wgPSBwcm9zYXZhZ2VfZ3Bpb19nZXRzY2w7CiAJCWJyZWFrOwotCWNhc2UgRkJfQUNDRUxfU0FWQUdFMjAwMDoKLQkJcGFyLT5jaGFuLnJlZyAgICAgICAgID0gMHhmZjIwOworCWNhc2UgUzNfU0FWQUdFMjAwMDoKKwkJcGFyLT5jaGFuLnJlZyAgICAgICAgID0gTU1fU0VSSUFMMTsKIAkJcGFyLT5jaGFuLmlvYWRkciAgICAgID0gcGFyLT5tbWlvLnZiYXNlOwogCQlwYXItPmNoYW4uYWxnby5zZXRzZGEgPSBzYXZhZ2U0X2dwaW9fc2V0c2RhOwogCQlwYXItPmNoYW4uYWxnby5zZXRzY2wgPSBzYXZhZ2U0X2dwaW9fc2V0c2NsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmIuaCBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiLmgKaW5kZXggZTRjM2YyMS4uNGU5NDkwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmIuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYi5oCkBAIC0xNTMsNyArMTUzLDcgQEAKIAl1bnNpZ25lZCBjaGFyIENSVENbMjVdOyAgICAgICAvKiBDcnRjIENvbnRyb2xsZXIgKi8KIAl1bnNpZ25lZCBjaGFyIFNlcXVlbmNlcls1XTsgICAvKiBWaWRlbyBTZXF1ZW5jZXIgKi8KIAl1bnNpZ25lZCBjaGFyIEdyYXBoaWNzWzldOyAgICAvKiBWaWRlbyBHcmFwaGljcyAqLwotCXVuc2lnbmVkIGNoYXIgQXR0cmlidXRlWzIxXTsgIC8qIFZpZGVvIEF0cmlidXRlICovCisJdW5zaWduZWQgY2hhciBBdHRyaWJ1dGVbMjFdOyAgLyogVmlkZW8gQXR0cmlidXRlICovCiAKIAl1bnNpZ25lZCBpbnQgbW9kZSwgcmVmcmVzaDsKIAl1bnNpZ25lZCBjaGFyIFNSMDgsIFNSMEUsIFNSMEY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCmluZGV4IDQ4NzkxMWUuLmEyZGMxYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCkBAIC0zODUsNyArMzg1LDcgQEAKIAlCQ0lfU0VORChHbG9iYWxCaXRtYXBEZXNjcmlwdG9yKTsKIAogCS8qCi0JICogSSBkb24ndCBrbm93IHdoeSwgc2VuZGluZyB0aGlzIHR3aWNlIGZpeGVzIHRoZSBpbnRpYWwgYmxhY2sgc2NyZWVuLAorCSAqIEkgZG9uJ3Qga25vdyB3aHksIHNlbmRpbmcgdGhpcyB0d2ljZSBmaXhlcyB0aGUgaW5pdGlhbCBibGFjayBzY3JlZW4sCiAJICogcHJldmVudHMgWCBmcm9tIGNyYXNoaW5nIGF0IGxlYXN0IGluIFRvc2hpYmEgbGFwdG9wcyB3aXRoIFNhdmFnZUlYLgogCSAqIC0tVG9ueQogCSAqLwpAQCAtMjIxMSw3ICsyMjExLDcgQEAKIAkJZ290byBmYWlsZWRfbW1pbzsKIAogCXZpZGVvX2xlbiA9IHNhdmFnZV9pbml0X2h3KHBhcik7Ci0JLyogRklYTUU6IGNhbnQgYmUgbmVnYXRpdmUgKi8KKwkvKiBGSVhNRTogY2FuJ3QgYmUgbmVnYXRpdmUgKi8KIAlpZiAodmlkZW9fbGVuIDwgMCkgewogCQllcnIgPSB2aWRlb19sZW47CiAJCWdvdG8gZmFpbGVkX21taW87CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCmluZGV4IDc1NzY2NWIuLjliY2M2MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCkBAIC02NDMsNyArNjQzLDcgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWJvYXJkX2NmZyA9ICZjaC0+Y2ZnLmJvYXJkX2NmZzsKLQkJaWYgKHRyeV9tb2R1bGVfZ2V0KGJvYXJkX2NmZy0+b3duZXIpICYmIGJvYXJkX2NmZy0+ZGlzcGxheV9vbikgeworCQlpZiAoYm9hcmRfY2ZnLT5kaXNwbGF5X29uICYmIHRyeV9tb2R1bGVfZ2V0KGJvYXJkX2NmZy0+b3duZXIpKSB7CiAJCQlib2FyZF9jZmctPmRpc3BsYXlfb24oYm9hcmRfY2ZnLT5ib2FyZF9kYXRhLCBjaC0+aW5mbyk7CiAJCQltb2R1bGVfcHV0KGJvYXJkX2NmZy0+b3duZXIpOwogCQl9CkBAIC02ODgsNyArNjg4LDcgQEAKIAkJfQogCiAJCWJvYXJkX2NmZyA9ICZjaC0+Y2ZnLmJvYXJkX2NmZzsKLQkJaWYgKHRyeV9tb2R1bGVfZ2V0KGJvYXJkX2NmZy0+b3duZXIpICYmIGJvYXJkX2NmZy0+ZGlzcGxheV9vZmYpIHsKKwkJaWYgKGJvYXJkX2NmZy0+ZGlzcGxheV9vZmYgJiYgdHJ5X21vZHVsZV9nZXQoYm9hcmRfY2ZnLT5vd25lcikpIHsKIAkJCWJvYXJkX2NmZy0+ZGlzcGxheV9vZmYoYm9hcmRfY2ZnLT5ib2FyZF9kYXRhKTsKIAkJCW1vZHVsZV9wdXQoYm9hcmRfY2ZnLT5vd25lcik7CiAJCX0KQEAgLTEwMzIsNiArMTAzMiw0OSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogU2NyZWVuIGJsYW5raW5nLiBCZWhhdmlvciBpcyBhcyBmb2xsb3dzOgorICogRkJfQkxBTktfVU5CTEFOSzogc2NyZWVuIHVuYmxhbmtlZCwgY2xvY2tzIGVuYWJsZWQKKyAqIEZCX0JMQU5LX05PUk1BTDogc2NyZWVuIGJsYW5rZWQsIGNsb2NrcyBlbmFibGVkCisgKiBGQl9CTEFOS19WU1lOQywKKyAqIEZCX0JMQU5LX0hTWU5DLAorICogRkJfQkxBTktfUE9XRVJPRkY6IHNjcmVlbiBibGFua2VkLCBjbG9ja3MgZGlzYWJsZWQKKyAqLworc3RhdGljIGludCBzaF9tb2JpbGVfbGNkY19ibGFuayhpbnQgYmxhbmssIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuICpjaCA9IGluZm8tPnBhcjsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfcHJpdiAqcCA9IGNoLT5sY2RjOworCisJLyogYmxhbmsgdGhlIHNjcmVlbj8gKi8KKwlpZiAoYmxhbmsgPiBGQl9CTEFOS19VTkJMQU5LICYmIGNoLT5ibGFua19zdGF0dXMgPT0gRkJfQkxBTktfVU5CTEFOSykgeworCQlzdHJ1Y3QgZmJfZmlsbHJlY3QgcmVjdCA9IHsKKwkJCS53aWR0aCA9IGluZm8tPnZhci54cmVzLAorCQkJLmhlaWdodCA9IGluZm8tPnZhci55cmVzLAorCQl9OworCQlzaF9tb2JpbGVfbGNkY19maWxscmVjdChpbmZvLCAmcmVjdCk7CisJfQorCS8qIHR1cm4gY2xvY2tzIG9uPyAqLworCWlmIChibGFuayA8PSBGQl9CTEFOS19OT1JNQUwgJiYgY2gtPmJsYW5rX3N0YXR1cyA+IEZCX0JMQU5LX05PUk1BTCkgeworCQlzaF9tb2JpbGVfbGNkY19jbGtfb24ocCk7CisJfQorCS8qIHR1cm4gY2xvY2tzIG9mZj8gKi8KKwlpZiAoYmxhbmsgPiBGQl9CTEFOS19OT1JNQUwgJiYgY2gtPmJsYW5rX3N0YXR1cyA8PSBGQl9CTEFOS19OT1JNQUwpIHsKKwkJLyogbWFrZSBzdXJlIHRoZSBzY3JlZW4gaXMgdXBkYXRlZCB3aXRoIHRoZSBibGFjayBmaWxsIGJlZm9yZQorCQkgKiBzd2l0Y2hpbmcgdGhlIGNsb2NrcyBvZmYuIG9uZSB2c3luYyBpcyBub3QgZW5vdWdoIHNpbmNlCisJCSAqIGJsYW5raW5nIG1heSBvY2N1ciBpbiB0aGUgbWlkZGxlIG9mIGEgcmVmcmVzaC4gZGVmZXJyZWQgaW8KKwkJICogbW9kZSB3aWxsIHJlZW5hYmxlIHRoZSBjbG9ja3MgYW5kIHVwZGF0ZSB0aGUgc2NyZWVuIGluIHRpbWUsCisJCSAqIHNvIGl0IGRvZXMgbm90IG5lZWQgdGhpcy4gKi8KKwkJaWYgKCFpbmZvLT5mYmRlZmlvKSB7CisJCQlzaF9tb2JpbGVfd2FpdF9mb3JfdnN5bmMoaW5mbyk7CisJCQlzaF9tb2JpbGVfd2FpdF9mb3JfdnN5bmMoaW5mbyk7CisJCX0KKwkJc2hfbW9iaWxlX2xjZGNfY2xrX29mZihwKTsKKwl9CisKKwljaC0+Ymxhbmtfc3RhdHVzID0gYmxhbms7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZmJfb3BzIHNoX21vYmlsZV9sY2RjX29wcyA9IHsKIAkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKIAkuZmJfc2V0Y29scmVnCT0gc2hfbW9iaWxlX2xjZGNfc2V0Y29scmVnLApAQCAtMTA0MCw2ICsxMDgzLDcgQEAKIAkuZmJfZmlsbHJlY3QJPSBzaF9tb2JpbGVfbGNkY19maWxscmVjdCwKIAkuZmJfY29weWFyZWEJPSBzaF9tb2JpbGVfbGNkY19jb3B5YXJlYSwKIAkuZmJfaW1hZ2VibGl0CT0gc2hfbW9iaWxlX2xjZGNfaW1hZ2VibGl0LAorCS5mYl9ibGFuawk9IHNoX21vYmlsZV9sY2RjX2JsYW5rLAogCS5mYl9wYW5fZGlzcGxheSA9IHNoX21vYmlsZV9mYl9wYW5fZGlzcGxheSwKIAkuZmJfaW9jdGwgICAgICAgPSBzaF9tb2JpbGVfaW9jdGwsCiAJLmZiX29wZW4JPSBzaF9tb2JpbGVfb3BlbiwKQEAgLTEyNTQsNyArMTI5OCw3IEBACiAKIAlzd2l0Y2goYWN0aW9uKSB7CiAJY2FzZSBGQl9FVkVOVF9TVVNQRU5EOgotCQlpZiAodHJ5X21vZHVsZV9nZXQoYm9hcmRfY2ZnLT5vd25lcikgJiYgYm9hcmRfY2ZnLT5kaXNwbGF5X29mZikgeworCQlpZiAoYm9hcmRfY2ZnLT5kaXNwbGF5X29mZiAmJiB0cnlfbW9kdWxlX2dldChib2FyZF9jZmctPm93bmVyKSkgewogCQkJYm9hcmRfY2ZnLT5kaXNwbGF5X29mZihib2FyZF9jZmctPmJvYXJkX2RhdGEpOwogCQkJbW9kdWxlX3B1dChib2FyZF9jZmctPm93bmVyKTsKIAkJfQpAQCAtMTI2Nyw3ICsxMzExLDcgQEAKIAkJbXV0ZXhfdW5sb2NrKCZjaC0+b3Blbl9sb2NrKTsKIAogCQkvKiBIRE1JIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgTENEQyBjb25maWd1cmF0aW9uICovCi0JCWlmICh0cnlfbW9kdWxlX2dldChib2FyZF9jZmctPm93bmVyKSAmJiBib2FyZF9jZmctPmRpc3BsYXlfb24pIHsKKwkJaWYgKGJvYXJkX2NmZy0+ZGlzcGxheV9vbiAmJiB0cnlfbW9kdWxlX2dldChib2FyZF9jZmctPm93bmVyKSkgewogCQkJYm9hcmRfY2ZnLT5kaXNwbGF5X29uKGJvYXJkX2NmZy0+Ym9hcmRfZGF0YSwgaW5mbyk7CiAJCQltb2R1bGVfcHV0KGJvYXJkX2NmZy0+b3duZXIpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuaCBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5oCmluZGV4IDQ2MzVlZWQuLmYxNmNiNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5oCisrKyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5oCkBAIC0zNyw2ICszNyw3IEBACiAJc3RydWN0IGNvbXBsZXRpb24gdnN5bmNfY29tcGxldGlvbjsKIAlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gZGlzcGxheV92YXI7CiAJaW50IHVzZV9jb3VudDsKKwlpbnQgYmxhbmtfc3RhdHVzOwogCXN0cnVjdCBtdXRleCBvcGVuX2xvY2s7CQkvKiBwcm90ZWN0cyB0aGUgdXNlIGNvdW50ZXIgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc201MDFmYi5jIGIvZHJpdmVycy92aWRlby9zbTUwMWZiLmMKaW5kZXggNDZkMWE2NC4uNTZlZjZiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zbTUwMWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zbTUwMWZiLmMKQEAgLTI2NSw3ICsyNjUsNyBAQAogCXJldHVybiAodW5zaWduZWQgbG9uZyludW1lcmF0b3I7CiB9CiAKLS8qIHNtNTAxZmJfaHpfdG9fcHMgaXMgaWRlbnRpY2FsIHRvIHRoZSBvcG9zaXRlIHRyYW5zZm9ybSAqLworLyogc201MDFmYl9oel90b19wcyBpcyBpZGVudGljYWwgdG8gdGhlIG9wcG9zaXRlIHRyYW5zZm9ybSAqLwogCiAjZGVmaW5lIHNtNTAxZmJfaHpfdG9fcHMoeCkgc201MDFmYl9wc190b19oeih4KQogCkBAIC0xNzE5LDcgKzE3MTksNyBAQAogCSAgICAgICAoaGVhZCA9PSBIRUFEX0NSVCkgPyAmc201MDFmYl9vcHNfY3J0IDogJnNtNTAxZmJfb3BzX3BubCwKIAkgICAgICAgc2l6ZW9mKHN0cnVjdCBmYl9vcHMpKTsKIAotCS8qIHVwZGF0ZSBvcHMgZGVwZW5kYW50IG9uIHdoYXQgd2UndmUgYmVlbiBwYXNzZWQgKi8KKwkvKiB1cGRhdGUgb3BzIGRlcGVuZGVudCBvbiB3aGF0IHdlJ3ZlIGJlZW4gcGFzc2VkICovCiAKIAlpZiAoKHBkLT5mbGFncyAmIFNNNTAxRkJfRkxBR19VU0VfSFdDVVJTT1IpID09IDApCiAJCXBhci0+b3BzLmZiX2N1cnNvciA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NzdGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NzdGZiLmMKaW5kZXggMmFiNzA0MS4uMjMwMWMyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zc3RmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc3N0ZmIuYwpAQCAtMjIxLDcgKzIyMSw3IEBACiAJd2hpbGUoMSkgewogCQlpZiAoX19zc3RfcmVhZCh2YmFzZSwgU1RBVFVTKSAmIFNUQVRVU19GQklfQlVTWSkgewogCQkJZl9kZGRwcmludGsoInN0YXR1czogYnVzeVxuIik7Ci0vKiBGSVhNRSBiYXNpY2FseSwgdGhpcyBpcyBhIGJ1c3kgd2FpdC4gbWF5YmUgbm90IHRoYXQgZ29vZC4gb2ggd2VsbDsKKy8qIEZJWE1FIGJhc2ljYWxseSwgdGhpcyBpcyBhIGJ1c3kgd2FpdC4gbWF5YmUgbm90IHRoYXQgZ29vZC4gb2ggd2VsbDsKICAqIHRoaXMgaXMgYSBzbWFsbCBsb29wIGFmdGVyIGFsbC4KICAqIE9yIG1heWJlIHdlIHNob3VsZCB1c2UgbWRlbGF5KCkgb3IgdWRlbGF5KCkgaGVyZSBpbnN0ZWFkID8gKi8KIAkJCWNvdW50ID0gMDsKQEAgLTUwMSw3ICs1MDEsNyBAQAogCX0KIAogCWlmIChJU19WT09ET08yKHBhcikpIHsKLQkJLyogdm9vZG9vMiBoYXMgMzIgcGl4ZWwgd2lkZSB0aWxlcyAsIEJVVCBzdGFuZ2UgdGhpbmdzCisJCS8qIHZvb2RvbzIgaGFzIDMyIHBpeGVsIHdpZGUgdGlsZXMgLCBCVVQgc3RyYW5nZSB0aGluZ3MKIAkJICAgaGFwcGVuIHdpdGggb2RkIG51bWJlciBvZiB0aWxlcyAqLwogCQlwYXItPnRpbGVzX2luX1ggPSAoaW5mby0+dmFyLnhyZXMgKyA2MyApIC8gNjQgKiAyOwogCX0gZWxzZSB7CkBAIC05MjAsMTEgKzkyMCwxMSBAQAogICogd2UgZ2V0IHRoZSAxc3QgYnl0ZSAoTSB2YWx1ZSkgb2YgcHJlc2V0IGYxLGY3IGFuZCBmQgogICogd2h5IHRob3NlIDMgPyBtbW1oLi4uIGZvciBub3csIGknbGwgZG8gaXQgdGhlIGdsaWRlIHdheS4uLgogICogYW5kIGFzayBxdWVzdGlvbnMgbGF0ZXIuIGFueXdheSwgaXQgc2VlbXMgdGhhdCBhbGwgdGhlIGZyZXEgcmVnaXN0ZXJzIGFyZQotICogcmVhbHkgYXQgdGhlaXIgZGVmYXVsdCBzdGF0ZSAoY2Ygc3BlY3MpIHNvIGkgYXNrIGFnYWluLCB3aHkgdGhvc2UgMyByZWdzID8KKyAqIHJlYWxseSBhdCB0aGVpciBkZWZhdWx0IHN0YXRlIChjZiBzcGVjcykgc28gaSBhc2sgYWdhaW4sIHdoeSB0aG9zZSAzIHJlZ3MgPwogICogbW1tbWguLiBpdCBzZWVtcyB0aGF0J3MgbXVjaCBtb3JlIHVnbHkgdGhhbiBpIHRob3VnaHQuIHdlIHVzZSBmMCBhbmQgZkEgZm9yCiAgKiBwbGwgcHJvZ3JhbW1pbmcsIHNvIGluIGZhY3QsIHdlICpob3BlKiB0aGF0IHRoZSBmMSwgZjcgJiBmQiB3b24ndCBiZQogICogdG91Y2hlZC4uLgotICogaXMgaXQgcmVhbHkgc2FmZSA/IGhvdyBjYW4gaSByZXNldCB0aGlzIHJhbWRhYyA/IGdlZWUuLi4KKyAqIGlzIGl0IHJlYWxseSBzYWZlID8gaG93IGNhbiBpIHJlc2V0IHRoaXMgcmFtZGFjID8gZ2VlZS4uLgogICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzc3RfZGV0ZWN0X2ljcyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc3RpY29yZS5oIGIvZHJpdmVycy92aWRlby9zdGljb3JlLmgKaW5kZXggN2ZlNWJlNC4uYWRkZjdiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zdGljb3JlLmgKKysrIGIvZHJpdmVycy92aWRlby9zdGljb3JlLmgKQEAgLTc5LDcgKzc5LDcgQEAKIAkgdTggY3Vycl9tb247CQkJLyogY3VycmVudCBtb25pdG9yIGNvbmZpZ3VyZWQgKi8KIAkgdTggZnJpZW5kbHlfYm9vdDsJCS8qIGluIGZyaWVuZGx5IGJvb3QgbW9kZSAqLwogCXMxNiBwb3dlcjsJCQkvKiBwb3dlciBjYWxjdWxhdGlvbiAoaW4gV2F0dHMpICovCi0JczMyIGZyZXFfcmVmOwkJCS8qIGZyZXF1ZW5jeSByZWZyZW5jZSAqLworCXMzMiBmcmVxX3JlZjsJCQkvKiBmcmVxdWVuY3kgcmVmZXJlbmNlICovCiAJdTMyIHN0aV9tZW1fYWRkcjsJCS8qIHBvaW50ZXIgdG8gZ2xvYmFsIHN0aSBtZW1vcnkgKHNpemU9c3RpX21lbV9yZXF1ZXN0KSAqLwogCXUzMiBmdXR1cmVfcHRyOyAJCS8qIHBvaW50ZXIgdG8gZnV0dXJlIGRhdGEgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3RkZnhmYi5jIGIvZHJpdmVycy92aWRlby90ZGZ4ZmIuYwppbmRleCAzZWU1ZTYzLi5hOTliOTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3RkZnhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdGRmeGZiLmMKQEAgLTg3NywxMiArODc3LDEyIEBACiAJZWxzZQogCQl0ZGZ4X3JvcCA9IFRERlhfUk9QX1hPUjsKIAotCS8qIGFzdW1lIGFsd2F5cyByZWN0LT5oZWlnaHQgPCA0MDk2ICovCisJLyogYXNzdW1lIGFsd2F5cyByZWN0LT5oZWlnaHQgPCA0MDk2ICovCiAJaWYgKGR5ICsgcmVjdC0+aGVpZ2h0ID4gNDA5NSkgewogCQlkc3RiYXNlID0gc3RyaWRlICogZHk7CiAJCWR5ID0gMDsKIAl9Ci0JLyogYXN1bWUgYWx3YXlzIHJlY3QtPndpZHRoIDwgNDA5NiAqLworCS8qIGFzc3VtZSBhbHdheXMgcmVjdC0+d2lkdGggPCA0MDk2ICovCiAJaWYgKGR4ICsgcmVjdC0+d2lkdGggPiA0MDk1KSB7CiAJCWRzdGJhc2UgKz0gZHggKiBicHAgPj4gMzsKIAkJZHggPSAwOwpAQCAtOTE1LDIyICs5MTUsMjIgQEAKIAl1MzIgZHN0YmFzZSA9IDA7CiAJdTMyIHNyY2Jhc2UgPSAwOwogCi0JLyogYXN1bWUgYWx3YXlzIGFyZWEtPmhlaWdodCA8IDQwOTYgKi8KKwkvKiBhc3N1bWUgYWx3YXlzIGFyZWEtPmhlaWdodCA8IDQwOTYgKi8KIAlpZiAoc3kgKyBhcmVhLT5oZWlnaHQgPiA0MDk1KSB7CiAJCXNyY2Jhc2UgPSBzdHJpZGUgKiBzeTsKIAkJc3kgPSAwOwogCX0KLQkvKiBhc3VtZSBhbHdheXMgYXJlYS0+d2lkdGggPCA0MDk2ICovCisJLyogYXNzdW1lIGFsd2F5cyBhcmVhLT53aWR0aCA8IDQwOTYgKi8KIAlpZiAoc3ggKyBhcmVhLT53aWR0aCA+IDQwOTUpIHsKIAkJc3JjYmFzZSArPSBzeCAqIGJwcCA+PiAzOwogCQlzeCA9IDA7CiAJfQotCS8qIGFzdW1lIGFsd2F5cyBhcmVhLT5oZWlnaHQgPCA0MDk2ICovCisJLyogYXNzdW1lIGFsd2F5cyBhcmVhLT5oZWlnaHQgPCA0MDk2ICovCiAJaWYgKGR5ICsgYXJlYS0+aGVpZ2h0ID4gNDA5NSkgewogCQlkc3RiYXNlID0gc3RyaWRlICogZHk7CiAJCWR5ID0gMDsKIAl9Ci0JLyogYXN1bWUgYWx3YXlzIGFyZWEtPndpZHRoIDwgNDA5NiAqLworCS8qIGFzc3VtZSBhbHdheXMgYXJlYS0+d2lkdGggPCA0MDk2ICovCiAJaWYgKGR4ICsgYXJlYS0+d2lkdGggPiA0MDk1KSB7CiAJCWRzdGJhc2UgKz0gZHggKiBicHAgPj4gMzsKIAkJZHggPSAwOwpAQCAtMTAwMywxMiArMTAwMywxMiBAQAogI2Vsc2UKIAlzcmNmbXQgPSAweDQwMDAwMDsKICNlbmRpZgotCS8qIGFzdW1lIGFsd2F5cyBpbWFnZS0+aGVpZ2h0IDwgNDA5NiAqLworCS8qIGFzc3VtZSBhbHdheXMgaW1hZ2UtPmhlaWdodCA8IDQwOTYgKi8KIAlpZiAoZHkgKyBpbWFnZS0+aGVpZ2h0ID4gNDA5NSkgewogCQlkc3RiYXNlID0gc3RyaWRlICogZHk7CiAJCWR5ID0gMDsKIAl9Ci0JLyogYXN1bWUgYWx3YXlzIGltYWdlLT53aWR0aCA8IDQwOTYgKi8KKwkvKiBhc3N1bWUgYWx3YXlzIGltYWdlLT53aWR0aCA8IDQwOTYgKi8KIAlpZiAoZHggKyBpbWFnZS0+d2lkdGggPiA0MDk1KSB7CiAJCWRzdGJhc2UgKz0gZHggKiBicHAgPj4gMzsKIAkJZHggPSAwOwpAQCAtMTEyNCw3ICsxMTI0LDcgQEAKIAkJICogbG93ZXIgaGFsZiAobGVhc3Qgc2lnbmlmaWNhbnQgNjQgYml0cykgb2YgYSAxMjggYml0IHdvcmQKIAkJICogYW5kIHBhdHRlcm4gMSB0aGUgdXBwZXIgaGFsZi4gSWYgeW91IGV4YW1pbmUgdGhlIGRhdGEgb2YKIAkJICogdGhlIGN1cnNvciBpbWFnZSB0aGUgZ3JhcGhpY3MgY2FyZCB1c2VzIHRoZW4gZnJvbSB0aGUKLQkJICogYmVnaW5pbmcgeW91IHNlZSBsaW5lIG9uZSBvZiBwYXR0ZXJuIDAsIGxpbmUgb25lIG9mCisJCSAqIGJlZ2lubmluZyB5b3Ugc2VlIGxpbmUgb25lIG9mIHBhdHRlcm4gMCwgbGluZSBvbmUgb2YKIAkJICogcGF0dGVybiAxLCBsaW5lIHR3byBvZiBwYXR0ZXJuIDAsIGxpbmUgdHdvIG9mIHBhdHRlcm4gMSwKIAkJICogZXRjIGV0Yy4gVGhlIGxpbmVhciBzdHJpZGUgZm9yIHRoZSBjdXJzb3IgaXMgYWx3YXlzIDE2IGJ5dGVzCiAJCSAqICgxMjggYml0cykgd2hpY2ggaXMgdGhlIG1heGltdW0gY3Vyc29yIHdpZHRoIHRpbWVzIHR3byBmb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdG1pb2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3RtaW9mYi5jCmluZGV4IDk3MTBiZjguLjBjMzQxZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdG1pb2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby90bWlvZmIuYwpAQCAtMzU5LDcgKzM1OSw3IEBACiB7CiAJc3RydWN0IHRtaW9mYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAkvKgotCSAqIFRoaXMgY29kZSBjYW4gYmUgY2FsbGVkIHdoaXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisJICogVGhpcyBjb2RlIGNhbiBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgogCSAqIFNvIGluc3RlYWQgb2YgcmVsYXlpbmcgb24gaXJxIHRvIHRyaWdnZXIgdGhlIGV2ZW50LAogCSAqIHBvbGwgdGhlIHN0YXRlIHRpbGwgdGhlIG5lY2Vzc2FyeSBjb21tYW5kIGlzIGV4ZWN1dGVkLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby91ZGxmYi5jIGIvZHJpdmVycy92aWRlby91ZGxmYi5jCmluZGV4IDJjODM2NGUuLjY4MDQxZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdWRsZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3VkbGZiLmMKQEAgLTc2OSw3ICs3NjksNyBAQAogCiAJCS8qCiAJCSAqIElmIHdlIGhhdmUgYSBkYW1hZ2UtYXdhcmUgY2xpZW50LCB0dXJuIGZiX2RlZmlvICJvZmYiCi0JCSAqIFRvIGF2b2lkIHBlcmYgaW1hY3Qgb2YgdW5lY2Vzc2FyeSBwYWdlIGZhdWx0IGhhbmRsaW5nLgorCQkgKiBUbyBhdm9pZCBwZXJmIGltYWN0IG9mIHVubmVjZXNzYXJ5IHBhZ2UgZmF1bHQgaGFuZGxpbmcuCiAJCSAqIERvbmUgYnkgcmVzZXR0aW5nIHRoZSBkZWxheSBmb3IgdGhpcyBmYl9pbmZvIHRvIGEgdmVyeQogCQkgKiBsb25nIHBlcmlvZC4gUGFnZXMgd2lsbCBiZWNvbWUgd3JpdGFibGUgYW5kIHN0YXkgdGhhdCB3YXkuCiAJCSAqIFJlc2V0IHRvIG5vcm1hbCB2YWx1ZSB3aGVuIGFsbCBjbGllbnRzIGhhdmUgY2xvc2VkIHRoaXMgZmIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZnYTE2ZmIuYyBiL2RyaXZlcnMvdmlkZW8vdmdhMTZmYi5jCmluZGV4IDI4Y2NhYjQuLjUzYjJjNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmdhMTZmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmdhMTZmYi5jCkBAIC0xNTIsNyArMTUyLDcgQEAKIH0KIAogLyogU2V0IHRoZSBFbmFibGUgU2V0L1Jlc2V0IFJlZ2lzdGVyIGFuZCByZXR1cm4gaXRzIG9sZCB2YWx1ZS4gIAotICAgVGhlIGNvZGUgaGVyZSBhbHdheXMgdXNlcyB2YWx1ZSAweGYgZm9yIHRoc2kgcmVnaXN0ZXIuICovCisgICBUaGUgY29kZSBoZXJlIGFsd2F5cyB1c2VzIHZhbHVlIDB4ZiBmb3IgdGhpcyByZWdpc3Rlci4gKi8KIHN0YXRpYyBpbmxpbmUgaW50IHNldHNyKGludCBzcikKIHsKIAlpbnQgb2xkc3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9jaGlwLmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9jaGlwLmgKaW5kZXggNzgxZjNhYS4uMjlkNzAyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvY2hpcC5oCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2NoaXAuaApAQCAtMTM5LDcgKzEzOSw2IEBACiAKIHN0cnVjdCBjcnRfc2V0dGluZ19pbmZvcm1hdGlvbiB7CiAJaW50IGlnYV9wYXRoOwotCWludCByZWZyZXNoX3JhdGU7CiB9OwogCiBzdHJ1Y3QgdG1kc19zZXR0aW5nX2luZm9ybWF0aW9uIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9ody5jCmluZGV4IDU3MjhmZDcuLmRjNGM3NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmMKKysrIGIvZHJpdmVycy92aWRlby92aWEvaHcuYwpAQCAtMjAwMiwxMyArMjAwMiwxNSBAQAogCWludCBpOwogCWludCBpbmRleCA9IDA7CiAJaW50IGhfYWRkciwgdl9hZGRyOwotCXUzMiBwbGxfRF9OLCBjbG9jazsKKwl1MzIgcGxsX0RfTiwgY2xvY2ssIHJlZnJlc2ggPSB2aWFmYl9yZWZyZXNoOworCisJaWYgKHZpYWZiX1NBTU1fT04gJiYgc2V0X2lnYSA9PSBJR0EyKQorCQlyZWZyZXNoID0gdmlhZmJfcmVmcmVzaDE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgdmlkZW9fbW9kZS0+bW9kZV9hcnJheTsgaSsrKSB7CiAJCWluZGV4ID0gaTsKIAotCQlpZiAoY3J0X3RhYmxlW2ldLnJlZnJlc2hfcmF0ZSA9PSB2aWFwYXJpbmZvLT4KLQkJCWNydF9zZXR0aW5nX2luZm8tPnJlZnJlc2hfcmF0ZSkKKwkJaWYgKGNydF90YWJsZVtpXS5yZWZyZXNoX3JhdGUgPT0gcmVmcmVzaCkKIAkJCWJyZWFrOwogCX0KIApAQCAtMjAxOSw3ICsyMDIxLDcgQEAKIAlpZiAoKHZpYWZiX0xDRF9PTiB8IHZpYWZiX0RWSV9PTikKIAkgICAgJiYgdmlkZW9fbW9kZS0+Y3J0Y1swXS5jcnRjLmhvcl9hZGRyID09IDY0MAogCSAgICAmJiB2aWRlb19tb2RlLT5jcnRjWzBdLmNydGMudmVyX2FkZHIgPT0gNDgwCi0JICAgICYmIHZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPnJlZnJlc2hfcmF0ZSA9PSA2MCkgeworCSAgICAmJiByZWZyZXNoID09IDYwKSB7CiAJCS8qIFRoZSBib3JkZXIgaXMgOCBwaXhlbHMuICovCiAJCWNydF9yZWcuaG9yX2JsYW5rX3N0YXJ0ID0gY3J0X3JlZy5ob3JfYmxhbmtfc3RhcnQgLSA4OwogCkBAIC0yMDcwLDcgKzIwNzIsNiBAQAogCWluaXRfbHZkc19jaGlwX2luZm8oKTsKIAogCXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMTsKLQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5yZWZyZXNoX3JhdGUgPSB2aWFmYl9yZWZyZXNoOwogCiAJLypTZXQgSUdBIHBhdGggZm9yIGVhY2ggZGV2aWNlICovCiAJdmlhZmJfc2V0X2lnYV9wYXRoKCk7CkBAIC0yMDgzLDEzICsyMDg0LDkgQEAKIAkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9tb2RlOwogfQogCi12b2lkIHZpYWZiX3VwZGF0ZV9kZXZpY2Vfc2V0dGluZyhpbnQgaHJlcywgaW50IHZyZXMsCi0JaW50IGJwcCwgaW50IHZtb2RlX3JlZnJlc2gsIGludCBmbGFnKQordm9pZCB2aWFmYl91cGRhdGVfZGV2aWNlX3NldHRpbmcoaW50IGhyZXMsIGludCB2cmVzLCBpbnQgYnBwLCBpbnQgZmxhZykKIHsKIAlpZiAoZmxhZyA9PSAwKSB7Ci0JCXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPnJlZnJlc2hfcmF0ZSA9Ci0JCQl2bW9kZV9yZWZyZXNoOwotCiAJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5oX2FjdGl2ZSA9IGhyZXM7CiAJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT52X2FjdGl2ZSA9IHZyZXM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9ody5oCmluZGV4IDcyOTUyNjMuLjg4NTg1OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmgKKysrIGIvZHJpdmVycy92aWRlby92aWEvaHcuaApAQCAtOTQ5LDggKzk0OSw3IEBACiB2b2lkIF9fZGV2aW5pdCB2aWFmYl9pbml0X2RhYyhpbnQgc2V0X2lnYSk7CiBpbnQgdmlhZmJfZ2V0X3BpeGNsb2NrKGludCBocmVzLCBpbnQgdnJlcywgaW50IHZtb2RlX3JlZnJlc2gpOwogaW50IHZpYWZiX2dldF9yZWZyZXNoKGludCBocmVzLCBpbnQgdnJlcywgdTMyIGZsb2F0X3JlZnJlc2gpOwotdm9pZCB2aWFmYl91cGRhdGVfZGV2aWNlX3NldHRpbmcoaW50IGhyZXMsIGludCB2cmVzLCBpbnQgYnBwLAotCQkJICAgaW50IHZtb2RlX3JlZnJlc2gsIGludCBmbGFnKTsKK3ZvaWQgdmlhZmJfdXBkYXRlX2RldmljZV9zZXR0aW5nKGludCBocmVzLCBpbnQgdnJlcywgaW50IGJwcCwgaW50IGZsYWcpOwogCiB2b2lkIHZpYWZiX3NldF9pZ2FfcGF0aCh2b2lkKTsKIHZvaWQgdmlhZmJfc2V0X3ByaW1hcnlfY29sb3JfcmVnaXN0ZXIodTggaW5kZXgsIHU4IHJlZCwgdTggZ3JlZW4sIHU4IGJsdWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdmlhX3V0aWxpdHkuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYV91dGlsaXR5LmMKaW5kZXggZDA1Y2NiNi4uMzU0NThhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvdmlhX3V0aWxpdHkuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfdXRpbGl0eS5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIAl9CiAKIAkvKiBJZiBhZGp1c3QgR2FtbWEgdmFsdWUgaW4gU0FNTSwgZmlsbCBJR0ExLAotCSAgIElHQTIgR2FtbWEgdGFibGUgc2ltdWx0YW5vdXMuICovCisJICAgSUdBMiBHYW1tYSB0YWJsZSBzaW11bHRhbmVvdXMuICovCiAJLyogU3dpdGNoIHRvIElHQTIgR2FtbWEgVGFibGUgKi8KIAlpZiAoKGFjdGl2ZV9kZXZpY2VfYW1vdW50ID4gMSkgJiYKIAkJISgodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfdXRpbGl0eS5oIGIvZHJpdmVycy92aWRlby92aWEvdmlhX3V0aWxpdHkuaAppbmRleCAxNjcwYmE4Li5mMjNiZTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfdXRpbGl0eS5oCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYV91dGlsaXR5LmgKQEAgLTIxLDcgKzIxLDcgQEAKICNpZm5kZWYgX19WSUFVVElMSVRZX0hfXwogI2RlZmluZSBfX1ZJQVVUSUxJVFlfSF9fCiAKLS8qIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBnZXQgaW5mb21hdGlvbiBhYm91dCBkZXZpY2UncyBzdGF0ZSAqLworLyogVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCBkZXZpY2UncyBzdGF0ZSAqLwogdm9pZCB2aWFmYl9nZXRfZGV2aWNlX3N1cHBvcnRfc3RhdGUodTMyICpzdXBwb3J0X3N0YXRlKTsKIHZvaWQgdmlhZmJfZ2V0X2RldmljZV9jb25uZWN0X3N0YXRlKHUzMiAqY29ubmVjdF9zdGF0ZSk7CiBib29sIHZpYWZiX2xjZF9nZXRfc3VwcG9ydF9leHBhbmRfc3RhdGUodTMyIHhyZXMsIHUzMiB5cmVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jCmluZGV4IGY1NTViODkuLmE1NDJiZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMKKysrIGIvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYwpAQCAtMTgyLDEzICsxODIsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgZ2V0X3Zhcl9yZWZyZXNoKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQoreworCXUzMiBodG90YWwsIHZ0b3RhbDsKKworCWh0b3RhbCA9IHZhci0+bGVmdF9tYXJnaW4gKyB2YXItPnhyZXMgKyB2YXItPnJpZ2h0X21hcmdpbgorCQkrIHZhci0+aHN5bmNfbGVuOworCXZ0b3RhbCA9IHZhci0+dXBwZXJfbWFyZ2luICsgdmFyLT55cmVzICsgdmFyLT5sb3dlcl9tYXJnaW4KKwkJKyB2YXItPnZzeW5jX2xlbjsKKwlyZXR1cm4gUElDT1MyS0haKHZhci0+cGl4Y2xvY2spICogMTAwMCAvIChodG90YWwgKiB2dG90YWwpOworfQorCiBzdGF0aWMgaW50IHZpYWZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQlpbnQgaHRvdGFsLCB2dG90YWwsIGRlcHRoOworCWludCBkZXB0aCwgcmVmcmVzaDsKIAlzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgKnZtb2RlX2VudHJ5OwogCXN0cnVjdCB2aWFmYl9wYXIgKnBwYXIgPSBpbmZvLT5wYXI7Ci0JdTMyIGxvbmdfcmVmcmVzaCwgbGluZTsKKwl1MzIgbGluZTsKIAogCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX2NoZWNrX3ZhciFcbiIpOwogCS8qIFNhbml0eSBjaGVjayAqLwpAQCAtMjMxLDE3ICsyNDIsMTEgQEAKIAkvKiBCYXNlZCBvbiB2YXIgcGFzc2VkIGluIHRvIGNhbGN1bGF0ZSB0aGUgcmVmcmVzaCwKIAkgKiBiZWNhdXNlIG91ciBkcml2ZXIgdXNlIHNvbWUgbW9kZXMgc3BlY2lhbC4KIAkgKi8KLQlodG90YWwgPSB2YXItPnhyZXMgKyB2YXItPmxlZnRfbWFyZ2luICsKLQl2YXItPnJpZ2h0X21hcmdpbiArIHZhci0+aHN5bmNfbGVuOwotCXZ0b3RhbCA9IHZhci0+eXJlcyArIHZhci0+dXBwZXJfbWFyZ2luICsKLQkJdmFyLT5sb3dlcl9tYXJnaW4gKyB2YXItPnZzeW5jX2xlbjsKLQlsb25nX3JlZnJlc2ggPSAxMDAwMDAwMDAwVUwgLyB2YXItPnBpeGNsb2NrICogMTAwMDsKLQlsb25nX3JlZnJlc2ggLz0gKGh0b3RhbCAqIHZ0b3RhbCk7Ci0KLQl2aWFmYl9yZWZyZXNoID0gdmlhZmJfZ2V0X3JlZnJlc2godmFyLT54cmVzLCB2YXItPnlyZXMsIGxvbmdfcmVmcmVzaCk7CisJcmVmcmVzaCA9IHZpYWZiX2dldF9yZWZyZXNoKHZhci0+eHJlcywgdmFyLT55cmVzLAorCQlnZXRfdmFyX3JlZnJlc2godmFyKSk7CiAKIAkvKiBBZGp1c3QgdmFyIGFjY29yZGluZyB0byBvdXIgZHJpdmVyJ3Mgb3duIHRhYmxlICovCi0JdmlhZmJfZmlsbF92YXJfdGltaW5nX2luZm8odmFyLCB2aWFmYl9yZWZyZXNoLCB2bW9kZV9lbnRyeSk7CisJdmlhZmJfZmlsbF92YXJfdGltaW5nX2luZm8odmFyLCByZWZyZXNoLCB2bW9kZV9lbnRyeSk7CiAJaWYgKHZhci0+YWNjZWxfZmxhZ3MgJiBGQl9BQ0NFTEZfVEVYVCAmJgogCQkhcHBhci0+c2hhcmVkLT52ZGV2LT5lbmdpbmVfbW1pbykKIAkJdmFyLT5hY2NlbF9mbGFncyA9IDA7CkBAIC0yNTMsMTIgKzI1OCwxMyBAQAogewogCXN0cnVjdCB2aWFmYl9wYXIgKnZpYXBhciA9IGluZm8tPnBhcjsKIAlzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgKnZtb2RlX2VudHJ5LCAqdm1vZGVfZW50cnkxID0gTlVMTDsKKwlpbnQgcmVmcmVzaDsKIAlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9zZXRfcGFyIVxuIik7CiAKIAl2aWFmYl91cGRhdGVfZml4KGluZm8pOwogCXZpYXBhci0+ZGVwdGggPSBmYl9nZXRfY29sb3JfZGVwdGgoJmluZm8tPnZhciwgJmluZm8tPmZpeCk7CiAJdmlhZmJfdXBkYXRlX2RldmljZV9zZXR0aW5nKHZpYWZiaW5mby0+dmFyLnhyZXMsIHZpYWZiaW5mby0+dmFyLnlyZXMsCi0JCXZpYWZiaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsLCB2aWFmYl9yZWZyZXNoLCAwKTsKKwkJdmlhZmJpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwsIDApOwogCiAJdm1vZGVfZW50cnkgPSB2aWFmYl9nZXRfbW9kZSh2aWFmYmluZm8tPnZhci54cmVzLCB2aWFmYmluZm8tPnZhci55cmVzKTsKIAlpZiAodmlhZmJfZHVhbF9mYikgewpAQCAtMjY2LDcgKzI3Miw3IEBACiAJCQl2aWFmYmluZm8xLT52YXIueXJlcyk7CiAJCXZpYWZiX3VwZGF0ZV9kZXZpY2Vfc2V0dGluZyh2aWFmYmluZm8xLT52YXIueHJlcywKIAkJCXZpYWZiaW5mbzEtPnZhci55cmVzLCB2aWFmYmluZm8xLT52YXIuYml0c19wZXJfcGl4ZWwsCi0JCQl2aWFmYl9yZWZyZXNoMSwgMSk7CisJCQkxKTsKIAl9IGVsc2UgaWYgKHZpYWZiX1NBTU1fT04gPT0gMSkgewogCQlERUJVR19NU0coS0VSTl9JTkZPCiAJCSJ2aWFmYl9zZWNvbmRfeHJlcyA9ICVkLCB2aWFmYl9zZWNvbmRfeXJlcyA9ICVkLCBicHAgPSAlZFxuIiwKQEAgLTI3NSwxNCArMjgxLDE5IEBACiAJCQl2aWFmYl9zZWNvbmRfeXJlcyk7CiAKIAkJdmlhZmJfdXBkYXRlX2RldmljZV9zZXR0aW5nKHZpYWZiX3NlY29uZF94cmVzLAotCQkJdmlhZmJfc2Vjb25kX3lyZXMsIHZpYWZiX2JwcDEsIHZpYWZiX3JlZnJlc2gxLCAxKTsKKwkJCXZpYWZiX3NlY29uZF95cmVzLCB2aWFmYl9icHAxLCAxKTsKIAl9CiAKKwlyZWZyZXNoID0gdmlhZmJfZ2V0X3JlZnJlc2goaW5mby0+dmFyLnhyZXMsIGluZm8tPnZhci55cmVzLAorCQlnZXRfdmFyX3JlZnJlc2goJmluZm8tPnZhcikpOwogCWlmICh2bW9kZV9lbnRyeSkgewotCQlpZiAodmlhZmJfZHVhbF9mYiAmJiB2aWFwYXItPmlnYV9wYXRoID09IElHQTIpCisJCWlmICh2aWFmYl9kdWFsX2ZiICYmIHZpYXBhci0+aWdhX3BhdGggPT0gSUdBMikgewogCQkJdmlhZmJfYnBwMSA9IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbDsKLQkJZWxzZQorCQkJdmlhZmJfcmVmcmVzaDEgPSByZWZyZXNoOworCQl9IGVsc2UgewogCQkJdmlhZmJfYnBwID0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsOworCQkJdmlhZmJfcmVmcmVzaCA9IHJlZnJlc2g7CisJCX0KIAogCQlpZiAoaW5mby0+dmFyLmFjY2VsX2ZsYWdzICYgRkJfQUNDRUxGX1RFWFQpCiAJCQlpbmZvLT5mbGFncyAmPSB+RkJJTkZPX0hXQUNDRUxfRElTQUJMRUQ7CkBAIC0xNzk1LDE0ICsxODA2LDkgQEAKIAlkZWZhdWx0X3Zhci54cmVzX3ZpcnR1YWwgPSBkZWZhdWx0X3hyZXM7CiAJZGVmYXVsdF92YXIueXJlc192aXJ0dWFsID0gZGVmYXVsdF95cmVzOwogCWRlZmF1bHRfdmFyLmJpdHNfcGVyX3BpeGVsID0gdmlhZmJfYnBwOwotCWRlZmF1bHRfdmFyLnBpeGNsb2NrID0KLQkgICAgdmlhZmJfZ2V0X3BpeGNsb2NrKGRlZmF1bHRfeHJlcywgZGVmYXVsdF95cmVzLCB2aWFmYl9yZWZyZXNoKTsKLQlkZWZhdWx0X3Zhci5sZWZ0X21hcmdpbiA9IChkZWZhdWx0X3hyZXMgPj4gMykgJiAweGY4OwotCWRlZmF1bHRfdmFyLnJpZ2h0X21hcmdpbiA9IDMyOwotCWRlZmF1bHRfdmFyLnVwcGVyX21hcmdpbiA9IDE2OwotCWRlZmF1bHRfdmFyLmxvd2VyX21hcmdpbiA9IDQ7Ci0JZGVmYXVsdF92YXIuaHN5bmNfbGVuID0gZGVmYXVsdF92YXIubGVmdF9tYXJnaW47Ci0JZGVmYXVsdF92YXIudnN5bmNfbGVuID0gNDsKKwl2aWFmYl9maWxsX3Zhcl90aW1pbmdfaW5mbygmZGVmYXVsdF92YXIsIHZpYWZiX2dldF9yZWZyZXNoKAorCQlkZWZhdWx0X3Zhci54cmVzLCBkZWZhdWx0X3Zhci55cmVzLCB2aWFmYl9yZWZyZXNoKSwKKwkJdmlhZmJfZ2V0X21vZGUoZGVmYXVsdF92YXIueHJlcywgZGVmYXVsdF92YXIueXJlcykpOwogCXZpYWZiX3NldHVwX2ZpeGluZm8oJnZpYWZiaW5mby0+Zml4LCB2aWFwYXJpbmZvKTsKIAl2aWFmYmluZm8tPnZhciA9IGRlZmF1bHRfdmFyOwogCkBAIC0xODQxLDE1ICsxODQ3LDkgQEAKIAkJZGVmYXVsdF92YXIueHJlc192aXJ0dWFsID0gdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlczsKIAkJZGVmYXVsdF92YXIueXJlc192aXJ0dWFsID0gdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeXJlczsKIAkJZGVmYXVsdF92YXIuYml0c19wZXJfcGl4ZWwgPSB2aWFmYl9icHAxOwotCQlkZWZhdWx0X3Zhci5waXhjbG9jayA9Ci0JCSAgICB2aWFmYl9nZXRfcGl4Y2xvY2sodmlhZmJfc2Vjb25kX3hyZXMsIHZpYWZiX3NlY29uZF95cmVzLAotCQkgICAgdmlhZmJfcmVmcmVzaCk7Ci0JCWRlZmF1bHRfdmFyLmxlZnRfbWFyZ2luID0gKHZpYWZiX3NlY29uZF94cmVzID4+IDMpICYgMHhmODsKLQkJZGVmYXVsdF92YXIucmlnaHRfbWFyZ2luID0gMzI7Ci0JCWRlZmF1bHRfdmFyLnVwcGVyX21hcmdpbiA9IDE2OwotCQlkZWZhdWx0X3Zhci5sb3dlcl9tYXJnaW4gPSA0OwotCQlkZWZhdWx0X3Zhci5oc3luY19sZW4gPSBkZWZhdWx0X3Zhci5sZWZ0X21hcmdpbjsKLQkJZGVmYXVsdF92YXIudnN5bmNfbGVuID0gNDsKKwkJdmlhZmJfZmlsbF92YXJfdGltaW5nX2luZm8oJmRlZmF1bHRfdmFyLCB2aWFmYl9nZXRfcmVmcmVzaCgKKwkJCWRlZmF1bHRfdmFyLnhyZXMsIGRlZmF1bHRfdmFyLnlyZXMsIHZpYWZiX3JlZnJlc2gxKSwKKwkJCXZpYWZiX2dldF9tb2RlKGRlZmF1bHRfdmFyLnhyZXMsIGRlZmF1bHRfdmFyLnlyZXMpKTsKIAogCQl2aWFmYl9zZXR1cF9maXhpbmZvKCZ2aWFmYmluZm8xLT5maXgsIHZpYXBhcmluZm8xKTsKIAkJdmlhZmJfY2hlY2tfdmFyKCZkZWZhdWx0X3ZhciwgdmlhZmJpbmZvMSk7CkBAIC0yMDA0LDIyICsyMDA0LDI0IEBACiAgKi8KIGludCBfX2luaXQgdmlhZmJfaW5pdCh2b2lkKQogewotCXUzMiBkdW1teTsKKwl1MzIgZHVtbXlfeCwgZHVtbXlfeTsKICNpZm5kZWYgTU9EVUxFCiAJY2hhciAqb3B0aW9uID0gTlVMTDsKIAlpZiAoZmJfZ2V0X29wdGlvbnMoInZpYWZiIiwgJm9wdGlvbikpCiAJCXJldHVybiAtRU5PREVWOwogCXZpYWZiX3NldHVwKG9wdGlvbik7CiAjZW5kaWYKLQlpZiAocGFyc2VfbW9kZSh2aWFmYl9tb2RlLCAmZHVtbXksICZkdW1teSkKLQkJfHwgcGFyc2VfbW9kZSh2aWFmYl9tb2RlMSwgJmR1bW15LCAmZHVtbXkpCisJaWYgKHBhcnNlX21vZGUodmlhZmJfbW9kZSwgJmR1bW15X3gsICZkdW1teV95KQorCQl8fCAhdmlhZmJfZ2V0X21vZGUoZHVtbXlfeCwgZHVtbXlfeSkKKwkJfHwgcGFyc2VfbW9kZSh2aWFmYl9tb2RlMSwgJmR1bW15X3gsICZkdW1teV95KQorCQl8fCAhdmlhZmJfZ2V0X21vZGUoZHVtbXlfeCwgZHVtbXlfeSkKIAkJfHwgdmlhZmJfYnBwIDwgMCB8fCB2aWFmYl9icHAgPiAzMgogCQl8fCB2aWFmYl9icHAxIDwgMCB8fCB2aWFmYl9icHAxID4gMzIKIAkJfHwgcGFyc2VfYWN0aXZlX2RldigpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXByaW50ayhLRVJOX0lORk8KLSAgICAgICAiVklBIEdyYXBoaWNzIEludGVyZ3JhdGlvbiBDaGlwc2V0IGZyYW1lYnVmZmVyICVkLiVkIGluaXRpYWxpemluZ1xuIiwKKyAgICAgICAiVklBIEdyYXBoaWNzIEludGVncmF0aW9uIENoaXBzZXQgZnJhbWVidWZmZXIgJWQuJWQgaW5pdGlhbGl6aW5nXG4iLAogCSAgICAgICBWRVJTSU9OX01BSk9SLCBWRVJTSU9OX01JTk9SKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdzEwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3cxMDBmYi5jCmluZGV4IGQ4YjEyYzMuLmM4YmU4YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdzEwMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby93MTAwZmIuYwpAQCAtMTMwNiw3ICsxMzA2LDcgQEAKIAl1bmlvbiBncmFwaGljX3ZfZGlzcF91IGdyYXBoaWNfdl9kaXNwOwogCXVuaW9uIGNydGNfdG90YWxfdSBjcnRjX3RvdGFsOwogCi0JLyogdzMyMDAgZG9lc250IGxpa2UgdW5kZWZpbmVkIGJpdHMgYmVpbmcgc2V0IHNvIHplcm8gcmVnaXN0ZXIgdmFsdWVzIGZpcnN0ICovCisJLyogdzMyMDAgZG9lc24ndCBsaWtlIHVuZGVmaW5lZCBiaXRzIGJlaW5nIHNldCBzbyB6ZXJvIHJlZ2lzdGVyIHZhbHVlcyBmaXJzdCAqLwogCiAJYWN0aXZlX2hfZGlzcC52YWwgPSAwOwogCWFjdGl2ZV9oX2Rpc3AuZi5hY3RpdmVfaF9zdGFydD1tb2RlLT5sZWZ0X21hcmdpbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYwppbmRleCA0ZmI1YjJiLi40YmNjOGI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCkBAIC01OTAsMTUgKzU5MCwxMCBAQAogCiBzdGF0aWMgdm9pZCB2aXJ0aW9fcGNpX3JlbGVhc2VfZGV2KHN0cnVjdCBkZXZpY2UgKl9kKQogewotCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoX2QsIHN0cnVjdCB2aXJ0aW9fZGV2aWNlLCBkZXYpOworCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoX2QsIHN0cnVjdCB2aXJ0aW9fZGV2aWNlLAorCQkJCQkJIGRldik7CiAJc3RydWN0IHZpcnRpb19wY2lfZGV2aWNlICp2cF9kZXYgPSB0b192cF9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IHZwX2Rldi0+cGNpX2RldjsKIAotCXZwX2RlbF92cXMoZGV2KTsKLQlwY2lfc2V0X2RydmRhdGEocGNpX2RldiwgTlVMTCk7Ci0JcGNpX2lvdW5tYXAocGNpX2RldiwgdnBfZGV2LT5pb2FkZHIpOwotCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGNpX2Rldik7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBjaV9kZXYpOwogCWtmcmVlKHZwX2Rldik7CiB9CiAKQEAgLTY4MSw2ICs2NzYsMTIgQEAKIAlzdHJ1Y3QgdmlydGlvX3BjaV9kZXZpY2UgKnZwX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKIAogCXVucmVnaXN0ZXJfdmlydGlvX2RldmljZSgmdnBfZGV2LT52ZGV2KTsKKworCXZwX2RlbF92cXMoJnZwX2Rldi0+dmRldik7CisJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIE5VTEwpOworCXBjaV9pb3VubWFwKHBjaV9kZXYsIHZwX2Rldi0+aW9hZGRyKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBjaV9kZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwY2lfZGV2KTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKaW5kZXggY2MyZjczZS4uYjAwNDNmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYworKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCkBAIC0zNzEsNiArMzcxLDcgQEAKIAkJLyogZGV0YWNoX2J1ZiBjbGVhcnMgZGF0YSwgc28gZ3JhYiBpdCBub3cuICovCiAJCWJ1ZiA9IHZxLT5kYXRhW2ldOwogCQlkZXRhY2hfYnVmKHZxLCBpKTsKKwkJdnEtPnZyaW5nLmF2YWlsLT5pZHgtLTsKIAkJRU5EX1VTRSh2cSk7CiAJCXJldHVybiBidWY7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9tYXN0ZXJzL29tYXBfaGRxLmMgYi9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYwppbmRleCAzOGU5NmFiLi41ZWYzODViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYworKysgYi9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYwpAQCAtNTQ1LDcgKzU0NSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQkvKiBTZWNvbmQgd3JpdGUsIGRhdGEgdHJhbnNmZXJlZC4gUmVsZWFzZSB0aGUgbW9kdWxlICovCisJLyogU2Vjb25kIHdyaXRlLCBkYXRhIHRyYW5zZmVycmVkLiBSZWxlYXNlIHRoZSBtb2R1bGUgKi8KIAlpZiAoaGRxX2RhdGEtPmluaXRfdHJhbnMgPiAxKSB7CiAJCW9tYXBfaGRxX3B1dChoZHFfZGF0YSk7CiAJCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaGRxX2RhdGEtPmhkcV9tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcgYi9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKaW5kZXggYjY5ZDcxNC4uMWIwZjk4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwpAQCAtOTMzLDcgKzkzMyw3IEBACiAJZGVwZW5kcyBvbiBTT0NfUE5YODMzNQogCWhlbHAKIAkgIEhhcmR3YXJlIGRyaXZlciBmb3IgdGhlIFBOWDgzM3gncyB3YXRjaGRvZy4gVGhpcyBpcyBhCi0JICB3YXRjaGRvZyB0aW1lciB0aGF0IHdpbGwgcmVib290IHRoZSBtYWNoaW5lIGFmdGVyIGEgcHJvZ3JhbWFibGUKKwkgIHdhdGNoZG9nIHRpbWVyIHRoYXQgd2lsbCByZWJvb3QgdGhlIG1hY2hpbmUgYWZ0ZXIgYSBwcm9ncmFtbWFibGUKIAkgIHRpbWVyIGhhcyBleHBpcmVkIGFuZCBubyBwcm9jZXNzIGhhcyB3cml0dGVuIHRvIC9kZXYvd2F0Y2hkb2cgZHVyaW5nCiAJICB0aGF0IHRpbWUuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUgYi9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlCmluZGV4IGQ1MjBiZjkuLjNmODYwOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUKKysrIGIvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAogIyBPbmx5IG9uZSB3YXRjaGRvZyBjYW4gc3VjY2VlZC4gV2UgcHJvYmUgdGhlIElTQS9QQ0kvVVNCIGJhc2VkCiAjIHdhdGNoZG9nLWNhcmRzIGZpcnN0LCB0aGVuIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgd2F0Y2hkb2cKLSMgZHJpdmVycyBhbmQgdGhlbiB0aGUgYXJjaGl0ZWN0dXJlIGluZGVwZW5kYW50ICJzb2Z0ZG9nIiBkcml2ZXIuCisjIGRyaXZlcnMgYW5kIHRoZW4gdGhlIGFyY2hpdGVjdHVyZSBpbmRlcGVuZGVudCAic29mdGRvZyIgZHJpdmVyLgogIyBUaGlzIG1lYW5zIHRoYXQgaWYgeW91ciBJU0EvUENJL1VTQiBjYXJkIGlzbid0IGRldGVjdGVkIHRoYXQKICMgeW91IGNhbiBmYWxsIGJhY2sgdG8gYW4gYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGRyaXZlciBhbmQgaWYKICMgdGhhdCBhbHNvIGZhaWxzIHRoZW4geW91IGNhbiBmYWxsIGJhY2sgdG8gdGhlIHNvZnR3YXJlIHdhdGNoZG9nCkBAIC0xNTMsNyArMTUzLDcgQEAKICMgWGVuCiBvYmotJChDT05GSUdfWEVOX1dEVCkgKz0geGVuX3dkdC5vCiAKLSMgQXJjaGl0ZWN0dXJlIEluZGVwZW5kYW50CisjIEFyY2hpdGVjdHVyZSBJbmRlcGVuZGVudAogb2JqLSQoQ09ORklHX1dNODMxWF9XQVRDSERPRykgKz0gd204MzF4X3dkdC5vCiBvYmotJChDT05GSUdfV004MzUwX1dBVENIRE9HKSArPSB3bTgzNTBfd2R0Lm8KIG9iai0kKENPTkZJR19NQVg2M1hYX1dBVENIRE9HKSArPSBtYXg2M3h4X3dkdC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2FjcXVpcmV3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWNxdWlyZXdkdC5jCmluZGV4IDJmZmNlNGQuLmI2YTJiNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvYWNxdWlyZXdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWNxdWlyZXdkdC5jCkBAIC0yNiw3ICsyNiw3IEBACiAgKglUaGVvcnkgb2YgT3BlcmF0aW9uOgogICoJCVRoZSBXYXRjaC1Eb2cgVGltZXIgaXMgcHJvdmlkZWQgdG8gZW5zdXJlIHRoYXQgc3RhbmRhbG9uZQogICoJCVN5c3RlbXMgY2FuIGFsd2F5cyByZWNvdmVyIGZyb20gY2F0YXN0cm9waGljIGNvbmRpdGlvbnMgdGhhdAotICoJCWNhdXNlZCB0aGUgQ1BVIHRvIGNyYXNoLiBUaGlzIGNvbmRpdGlvbiBtYXkgaGF2ZSBvY2N1cmVkIGJ5CisgKgkJY2F1c2VkIHRoZSBDUFUgdG8gY3Jhc2guIFRoaXMgY29uZGl0aW9uIG1heSBoYXZlIG9jY3VycmVkIGJ5CiAgKgkJZXh0ZXJuYWwgRU1JIG9yIGEgc29mdHdhcmUgYnVnLiBXaGVuIHRoZSBDUFUgc3RvcHMgd29ya2luZwogICoJCWNvcnJlY3RseSwgaGFyZHdhcmUgb24gdGhlIGJvYXJkIHdpbGwgZWl0aGVyIHBlcmZvcm0gYSBoYXJkd2FyZQogICoJCXJlc2V0IChjb2xkIGJvb3QpIG9yIGEgbm9uLW1hc2thYmxlIGludGVycnVwdCAoTk1JKSB0byBicmluZyB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT193ZHQuYwppbmRleCAzNWEwZDEyLi41ZmQwMjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9pVENPX3dkdC5jCkBAIC0zNSw2ICszNSw3IEBACiAgKglkb2N1bWVudCBudW1iZXIgMzI0NjQ1LTAwMSwgMzI0NjQ2LTAwMTogQ291Z2FyIFBvaW50IChDUFQpCiAgKglkb2N1bWVudCBudW1iZXIgVEJEICAgICAgICAgICAgICAgICAgIDogUGF0c2J1cmcgKFBCRykKICAqCWRvY3VtZW50IG51bWJlciBUQkQgICAgICAgICAgICAgICAgICAgOiBESDg5eHhDQworICoJZG9jdW1lbnQgbnVtYmVyIFRCRCAgICAgICAgICAgICAgICAgICA6IFBhbnRoZXIgUG9pbnQKICAqLwogCiAvKgpAQCAtMTUzLDYgKzE1NCwzOCBAQAogCVRDT19QQkcxLAkvKiBQYXRzYnVyZyAqLwogCVRDT19QQkcyLAkvKiBQYXRzYnVyZyAqLwogCVRDT19ESDg5WFhDQywJLyogREg4OXh4Q0MgKi8KKwlUQ09fUFBUMCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxLAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDIsCS8qIFBhbnRoZXIgUG9pbnQgKi8KKwlUQ09fUFBUMywJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQ0LAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDUsCS8qIFBhbnRoZXIgUG9pbnQgKi8KKwlUQ09fUFBUNiwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQ3LAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDgsCS8qIFBhbnRoZXIgUG9pbnQgKi8KKwlUQ09fUFBUOSwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxMCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxMSwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxMiwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxMywJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxNCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxNSwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxNiwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxNywJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxOCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxOSwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyMCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyMSwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyMiwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyMywJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyNCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyNSwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyNiwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyNywJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyOCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyOSwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQzMCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQzMSwJLyogUGFudGhlciBQb2ludCAqLwogfTsKIAogc3RhdGljIHN0cnVjdCB7CkBAIC0yNDQsNiArMjc3LDM4IEBACiAJeyJQYXRzYnVyZyIsIDJ9LAogCXsiUGF0c2J1cmciLCAyfSwKIAl7IkRIODl4eENDIiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCiAJe05VTEwsIDB9CiB9OwogCkBAIC0zNjMsNiArNDI4LDM4IEBACiAJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZDQwLAkJCQlUQ09fUEJHMSl9LAogCXsgSVRDT19QQ0lfREVWSUNFKDB4MWQ0MSwJCQkJVENPX1BCRzIpfSwKIAl7IElUQ09fUENJX0RFVklDRSgweDIzMTAsCQkJCVRDT19ESDg5WFhDQyl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU0MCwJCQkJVENPX1BQVDApfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNDEsCQkJCVRDT19QUFQxKX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTQyLAkJCQlUQ09fUFBUMil9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU0MywJCQkJVENPX1BQVDMpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNDQsCQkJCVRDT19QUFQ0KX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTQ1LAkJCQlUQ09fUFBUNSl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU0NiwJCQkJVENPX1BQVDYpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNDcsCQkJCVRDT19QUFQ3KX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTQ4LAkJCQlUQ09fUFBUOCl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU0OSwJCQkJVENPX1BQVDkpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNGEsCQkJCVRDT19QUFQxMCl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU0YiwJCQkJVENPX1BQVDExKX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTRjLAkJCQlUQ09fUFBUMTIpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNGQsCQkJCVRDT19QUFQxMyl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU0ZSwJCQkJVENPX1BQVDE0KX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTRmLAkJCQlUQ09fUFBUMTUpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNTAsCQkJCVRDT19QUFQxNil9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU1MSwJCQkJVENPX1BQVDE3KX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTUyLAkJCQlUQ09fUFBUMTgpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNTMsCQkJCVRDT19QUFQxOSl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU1NCwJCQkJVENPX1BQVDIwKX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTU1LAkJCQlUQ09fUFBUMjEpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNTYsCQkJCVRDT19QUFQyMil9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU1NywJCQkJVENPX1BQVDIzKX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTU4LAkJCQlUQ09fUFBUMjQpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNTksCQkJCVRDT19QUFQyNSl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU1YSwJCQkJVENPX1BQVDI2KX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTViLAkJCQlUQ09fUFBUMjcpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNWMsCQkJCVRDT19QUFQyOCl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU1ZCwJCQkJVENPX1BQVDI5KX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTVlLAkJCQlUQ09fUFBUMzApfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNWYsCQkJCVRDT19QUFQzMSl9LAogCXsgMCwgfSwJCQkvKiBFbmQgb2YgbGlzdCAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpVENPX3dkdF9wY2lfdGJsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvbXBjOHh4eF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXBjOHh4eF93ZHQuYwppbmRleCA2NzA5ZDcyLi5lZWQ1NDM2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9tcGM4eHh4X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXBjOHh4eF93ZHQuYwpAQCAtMTg1LDE1ICsxODUsMTggQEAKIAkuZm9wcwk9ICZtcGM4eHh4X3dkdF9mb3BzLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjOHh4eF93ZHRfbWF0Y2hbXTsKIHN0YXRpYyBpbnQgX19kZXZpbml0IG1wYzh4eHhfd2R0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KQogewogCWludCByZXQ7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mZGV2LT5kZXYub2Zfbm9kZTsKIAlzdHJ1Y3QgbXBjOHh4eF93ZHRfdHlwZSAqd2R0X3R5cGU7CiAJdTMyIGZyZXEgPSBmc2xfZ2V0X3N5c19mcmVxKCk7CiAJYm9vbCBlbmFibGVkOwogCi0JaWYgKCFvZmRldi0+ZGV2Lm9mX21hdGNoKQorCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKG1wYzh4eHhfd2R0X21hdGNoLCAmb2ZkZXYtPmRldik7CisJaWYgKCFtYXRjaCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJd2R0X3R5cGUgPSBtYXRjaC0+ZGF0YTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wYzg3NDEzX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9wYzg3NDEzX3dkdC5jCmluZGV4IDEzOWQ3NzMuLmI3YzEzOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcGM4NzQxM193ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3BjODc0MTNfd2R0LmMKQEAgLTQ5LDcgKzQ5LDcgQEAKICNkZWZpbmUgV0RUX0RBVEFfSU9fUE9SVCAgICAoV0RUX0lOREVYX0lPX1BPUlQrMSkKICNkZWZpbmUgU1dDX0xETiAgICAgICAgICAgICAweDA0CiAjZGVmaW5lIFNJT0NGRzIgICAgICAgICAgICAgMHgyMgkvKiBTZXJpYWwgSU8gcmVnaXN0ZXIgKi8KLSNkZWZpbmUgV0RDVEwgICAgICAgICAgICAgICAweDEwCS8qIFdhdGNoZG9nLVRpbWVyLUNvbnRyb2xsLVJlZ2lzdGVyICovCisjZGVmaW5lIFdEQ1RMICAgICAgICAgICAgICAgMHgxMAkvKiBXYXRjaGRvZy1UaW1lci1Db250cm9sLVJlZ2lzdGVyICovCiAjZGVmaW5lIFdEVE8gICAgICAgICAgICAgICAgMHgxMQkvKiBXYXRjaGRvZyB0aW1lb3V0IHJlZ2lzdGVyICovCiAjZGVmaW5lIFdEQ0ZHICAgICAgICAgICAgICAgMHgxMgkvKiBXYXRjaGRvZyBjb25maWcgcmVnaXN0ZXIgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zYmM3MjQwX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9zYmM3MjQwX3dkdC5jCmluZGV4IDY3ZGRlYjEuLmZmMTE1MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2JjNzI0MF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NiYzcyNDBfd2R0LmMKQEAgLTI3Myw3ICsyNzMsNyBAQAogCiAJLyogVGhlIElPIHBvcnQgMHgwNDMgdXNlZCB0byBkaXNhYmxlIHRoZSB3YXRjaGRvZwogCSAqIGlzIGFscmVhZHkgY2xhaW1lZCBieSB0aGUgc3lzdGVtIHRpbWVyLCBzbyB3ZQotCSAqIGNhbnQgcmVxdWVzdF9yZWdpb24oKSBpdCAuLi4qLworCSAqIGNhbid0IHJlcXVlc3RfcmVnaW9uKCkgaXQgLi4uKi8KIAogCWlmICh0aW1lb3V0IDwgMSB8fCB0aW1lb3V0ID4gU0JDNzI0MF9NQVhfVElNRU9VVCkgewogCQl0aW1lb3V0ID0gU0JDNzI0MF9USU1FT1VUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zY2gzMTF4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9zY2gzMTF4X3dkdC5jCmluZGV4IGI2MWFiMWMuLmM3Y2Y0YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2NoMzExeF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NjaDMxMXhfd2R0LmMKQEAgLTIwMSw3ICsyMDEsNyBAQAogCXNwaW5fbG9jaygmc2NoMzExeF93ZHRfZGF0YS5pb19sb2NrKTsKIAogCS8qIC0tIFdhdGNoZG9nIHRpbWVyIGNvbnRyb2wgLS0KLQkgKiBCaXQgMCAgIFN0YXR1cyBCaXQ6IDAgPSBUaW1lciBjb3VudGluZywgMSA9IFRpbWVvdXQgb2NjdXJlZAorCSAqIEJpdCAwICAgU3RhdHVzIEJpdDogMCA9IFRpbWVyIGNvdW50aW5nLCAxID0gVGltZW91dCBvY2N1cnJlZAogCSAqIEJpdCAxICAgUmVzZXJ2ZWQKIAkgKiBCaXQgMiAgIEZvcmNlIFRpbWVvdXQ6IDEgPSBGb3JjZXMgV0QgdGltZW91dCBldmVudCAoc2VsZi1jbGVhbmluZykKIAkgKiBCaXQgMyAgIFAyMCBGb3JjZSBUaW1lb3V0IGVuYWJsZWQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3Nod2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3Nod2R0LmMKaW5kZXggNGUzZTdlYi4uZGI4NGYyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zaHdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2h3ZHQuYwpAQCAtNTAsNyArNTAsNyBAQAogICogbmVjc3NhcnkuCiAgKgogICogQXMgYSByZXN1bHQgb2YgdGhpcyB0aW1pbmcgcHJvYmxlbSwgdGhlIG9ubHkgbW9kZXMgdGhhdCBhcmUgcGFydGljdWxhcmx5Ci0gKiBmZWFzaWJsZSBhcmUgdGhlIDQwOTYgYW5kIHRoZSAyMDQ4IGRpdmlzb3JzLCB3aGljaCB5ZWlsZCA1LjI1IGFuZCAyLjYybXMKKyAqIGZlYXNpYmxlIGFyZSB0aGUgNDA5NiBhbmQgdGhlIDIwNDggZGl2aXNvcnMsIHdoaWNoIHlpZWxkIDUuMjUgYW5kIDIuNjJtcwogICogb3ZlcmZsb3cgcGVyaW9kcyByZXNwZWN0aXZlbHkuCiAgKgogICogQWxzbywgc2luY2Ugd2UgY2FuJ3QgcmVhbGx5IGV4cGVjdCB1c2Vyc3BhY2UgdG8gYmUgcmVzcG9uc2l2ZSBlbm91Z2gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc21zYzM3Yjc4N193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc21zYzM3Yjc4N193ZHQuYwppbmRleCBkZjg4Y2ZhLi5lOTdiMDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3Ntc2MzN2I3ODdfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zbXNjMzdiNzg3X3dkdC5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB3ZHRfdGltZXJfY3RybCh1bnNpZ25lZCBjaGFyIHJlZykKIHsKIAkvKiAtLSBXYXRjaGRvZyB0aW1lciBjb250cm9sIC0tCi0JICogQml0IDAgICBTdGF0dXMgQml0OiAwID0gVGltZXIgY291bnRpbmcsIDEgPSBUaW1lb3V0IG9jY3VyZWQKKwkgKiBCaXQgMCAgIFN0YXR1cyBCaXQ6IDAgPSBUaW1lciBjb3VudGluZywgMSA9IFRpbWVvdXQgb2NjdXJyZWQKIAkgKiBCaXQgMSAgIFBvd2VyIExFRCBUb2dnbGU6IDAgPSBEaXNhYmxlIFRvZ2dsZSwgMSA9IFRvZ2dsZSBhdCAxIEh6CiAJICogQml0IDIgICBGb3JjZSBUaW1lb3V0OiAxID0gRm9yY2VzIFdEIHRpbWVvdXQgZXZlbnQgKHNlbGYtY2xlYW5pbmcpCiAJICogQml0IDMgICBQMjAgRm9yY2UgVGltZW91dCBlbmFibGVkOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zcDgwNV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc3A4MDVfd2R0LmMKaW5kZXggMGEwZWZlNy4uMGQ4MGUwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zcDgwNV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NwODA1X3dkdC5jCkBAIC05MCw3ICs5MCw3IEBACiAJLyoKIAkgKiBzcDgwNSBydW5zIGNvdW50ZXIgd2l0aCBnaXZlbiB2YWx1ZSB0d2ljZSwgYWZ0ZXIgdGhlIGVuZCBvZiBmaXJzdAogCSAqIGNvdW50ZXIgaXQgZ2l2ZXMgYW4gaW50ZXJydXB0IGFuZCB0aGVuIHN0YXJ0cyBjb3VudGVyIGFnYWluLiBJZgotCSAqIGludGVycnVwdCBhbHJlYWR5IG9jY3VyZWQgdGhlbiBpdCByZXNldHMgdGhlIHN5c3RlbS4gVGhpcyBpcyB3aHkKKwkgKiBpbnRlcnJ1cHQgYWxyZWFkeSBvY2N1cnJlZCB0aGVuIGl0IHJlc2V0cyB0aGUgc3lzdGVtLiBUaGlzIGlzIHdoeQogCSAqIGxvYWQgaXMgaGFsZiBvZiB3aGF0IHNob3VsZCBiZSByZXF1aXJlZC4KIAkgKi8KIAlsb2FkID0gZGl2X3U2NChyYXRlLCAyKSAqIHRpbWVvdXQgLSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vZXZlbnRzLmMgYi9kcml2ZXJzL3hlbi9ldmVudHMuYwppbmRleCAwMzYzNDNiYS4uMzMxNjdiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vZXZlbnRzLmMKKysrIGIvZHJpdmVycy94ZW4vZXZlbnRzLmMKQEAgLTUsNyArNSw3IEBACiAgKiBkb21haW4gZ2V0cyAxMDI0IGV2ZW50IGNoYW5uZWxzLCBidXQgTlJfSVJRIGlzIG5vdCB0aGF0IGxhcmdlLCB3ZQogICogbXVzdCBkeW5hbWljYWxseSBtYXAgaXJxczwtPmV2ZW50IGNoYW5uZWxzLiAgVGhlIGV2ZW50IGNoYW5uZWxzCiAgKiBpbnRlcmZhY2Ugd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsIGJ5IGRlZmluaW5nIGEgeGVuIGludGVycnVwdAotICogY2hpcC4gIFdoZW4gYW4gZXZlbnQgaXMgcmVjaWV2ZWQsIGl0IGlzIG1hcHBlZCB0byBhbiBpcnEgYW5kIHNlbnQKKyAqIGNoaXAuICBXaGVuIGFuIGV2ZW50IGlzIHJlY2VpdmVkLCBpdCBpcyBtYXBwZWQgdG8gYW4gaXJxIGFuZCBzZW50CiAgKiB0aHJvdWdoIHRoZSBub3JtYWwgaW50ZXJydXB0IHByb2Nlc3NpbmcgcGF0aC4KICAqCiAgKiBUaGVyZSBhcmUgZm91ciBraW5kcyBvZiBldmVudHMgd2hpY2ggY2FuIGJlIG1hcHBlZCB0byBhbiBldmVudApAQCAtNDE2LDcgKzQxNiw3IEBACiAjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCiAJLyoKIAkgKiBGb3IgYW4gSFZNIGd1ZXN0IG9yIGRvbWFpbiAwIHdoaWNoIHNlZSAicmVhbCIgKGVtdWxhdGVkIG9yCi0JICogYWN0dWFsIHJlcGVjdGl2ZWx5KSBHU0lzIHdlIGFsbG9jYXRlIGR5bmFtaWMgSVJRcworCSAqIGFjdHVhbCByZXNwZWN0aXZlbHkpIEdTSXMgd2UgYWxsb2NhdGUgZHluYW1pYyBJUlFzCiAJICogZS5nLiB0aG9zZSBjb3JyZXNwb25kaW5nIHRvIGV2ZW50IGNoYW5uZWxzIG9yIE1TSXMKIAkgKiBldGMuIGZyb20gdGhlIHJhbmdlIGFib3ZlIHRob3NlICJyZWFsIiBHU0lzIHRvIGF2b2lkCiAJICogY29sbGlzaW9ucy4KQEAgLTkxMiw4ICs5MTIsNyBAQAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBpcnFmbGFncywKIAkJCSAgICAgIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgaXJxOwotCWludCByZXR2YWw7CisJaW50IGlycSwgcmV0dmFsOwogCiAJaXJxID0gYmluZF9ldnRjaG5fdG9faXJxKGV2dGNobik7CiAJaWYgKGlycSA8IDApCkBAIC05NTUsOCArOTU0LDcgQEAKIAkJCSAgICBpcnFfaGFuZGxlcl90IGhhbmRsZXIsCiAJCQkgICAgdW5zaWduZWQgbG9uZyBpcnFmbGFncywgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKQogewotCXVuc2lnbmVkIGludCBpcnE7Ci0JaW50IHJldHZhbDsKKwlpbnQgaXJxLCByZXR2YWw7CiAKIAlpcnEgPSBiaW5kX3ZpcnFfdG9faXJxKHZpcnEsIGNwdSk7CiAJaWYgKGlycSA8IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9tYW5hZ2UuYyBiL2RyaXZlcnMveGVuL21hbmFnZS5jCmluZGV4IDk1MTQzZGQuLmEyZWVlNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL21hbmFnZS5jCisrKyBiL2RyaXZlcnMveGVuL21hbmFnZS5jCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+CiAjaW5jbHVkZSA8bGludXgvc3RvcF9tYWNoaW5lLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAKICNpbmNsdWRlIDx4ZW4veGVuLmg+CiAjaW5jbHVkZSA8eGVuL3hlbmJ1cy5oPgpAQCAtNjEsNyArNjIsNyBAQAogCXhlbl9tbV91bnBpbl9hbGwoKTsKIH0KIAotI2lmZGVmIENPTkZJR19ISUJFUk5BVElPTgorI2lmZGVmIENPTkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTCiBzdGF0aWMgaW50IHhlbl9zdXNwZW5kKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHN1c3BlbmRfaW5mbyAqc2kgPSBkYXRhOwpAQCAtNzAsOCArNzEsMTMgQEAKIAlCVUdfT04oIWlycXNfZGlzYWJsZWQoKSk7CiAKIAllcnIgPSBzeXNkZXZfc3VzcGVuZChQTVNHX0ZSRUVaRSk7CisJaWYgKCFlcnIpIHsKKwkJZXJyID0gc3lzY29yZV9zdXNwZW5kKCk7CisJCWlmIChlcnIpCisJCQlzeXNkZXZfcmVzdW1lKCk7CisJfQogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ4ZW5fc3VzcGVuZDogc3lzZGV2X3N1c3BlbmQgZmFpbGVkOiAlZFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICJ4ZW5fc3VzcGVuZDogc3lzdGVtIGNvcmUgc3VzcGVuZCBmYWlsZWQ6ICVkXG4iLAogCQkJZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC05NSw2ICsxMDEsNyBAQAogCQl4ZW5fdGltZXJfcmVzdW1lKCk7CiAJfQogCisJc3lzY29yZV9yZXN1bWUoKTsKIAlzeXNkZXZfcmVzdW1lKCk7CiAKIAlyZXR1cm4gMDsKQEAgLTE3Myw3ICsxODAsNyBAQAogI2VuZGlmCiAJc2h1dHRpbmdfZG93biA9IFNIVVRET1dOX0lOVkFMSUQ7CiB9Ci0jZW5kaWYJLyogQ09ORklHX0hJQkVSTkFUSU9OICovCisjZW5kaWYJLyogQ09ORklHX0hJQkVSTkFURV9DQUxMQkFDS1MgKi8KIAogc3RydWN0IHNodXRkb3duX2hhbmRsZXIgewogCWNvbnN0IGNoYXIgKmNvbW1hbmQ7CkBAIC0yMDIsNyArMjA5LDcgQEAKIAkJeyAicG93ZXJvZmYiLAlkb19wb3dlcm9mZiB9LAogCQl7ICJoYWx0IiwJZG9fcG93ZXJvZmYgfSwKIAkJeyAicmVib290IiwJZG9fcmVib290ICAgfSwKLSNpZmRlZiBDT05GSUdfSElCRVJOQVRJT04KKyNpZmRlZiBDT05GSUdfSElCRVJOQVRFX0NBTExCQUNLUwogCQl7ICJzdXNwZW5kIiwJZG9fc3VzcGVuZCAgfSwKICNlbmRpZgogCQl7TlVMTCwgTlVMTH0sCmRpZmYgLS1naXQgYS9mcy85cC9maWQuYyBiL2ZzLzlwL2ZpZC5jCmluZGV4IDBlZTU5NDUuLjg1YjY3ZmYgMTAwNjQ0Ci0tLSBhL2ZzLzlwL2ZpZC5jCisrKyBiL2ZzLzlwL2ZpZC5jCkBAIC0yODYsMTEgKzI4Niw5IEBACiAKIHN0cnVjdCBwOV9maWQgKnY5ZnNfd3JpdGViYWNrX2ZpZChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7Ci0JaW50IGVyciwgZmxhZ3M7CisJaW50IGVycjsKIAlzdHJ1Y3QgcDlfZmlkICpmaWQ7Ci0Jc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKIAotCXY5c2VzID0gdjlmc19kZW50cnkydjlzZXMoZGVudHJ5KTsKIAlmaWQgPSB2OWZzX2ZpZF9jbG9uZV93aXRoX3VpZChkZW50cnksIDApOwogCWlmIChJU19FUlIoZmlkKSkKIAkJZ290byBlcnJvcl9vdXQ7CkBAIC0yOTksMTcgKzI5Nyw4IEBACiAJICogZGlydHkgcGFnZXMuIFdlIGFsd2F5cyByZXF1ZXN0IGZvciB0aGUgb3BlbiBmaWQgaW4gcmVhZC13cml0ZQogCSAqIG1vZGUgc28gdGhhdCBhIHBhcnRpYWwgcGFnZSB3cml0ZSB3aGljaCByZXN1bHQgaW4gcGFnZQogCSAqIHJlYWQgY2FuIHdvcmsuCi0JICoKLQkgKiB3ZSBkb24ndCBoYXZlIGEgdHN5bmNmcyBvcGVyYXRpb24gZm9yIG9sZGVyIHZlcnNpb24KLQkgKiBvZiBwcm90b2NvbC4gU28gbWFrZSBzdXJlIHRoZSB3cml0ZSBiYWNrIGZpZCBpcwotCSAqIG9wZW5lZCBpbiBPX1NZTkMgbW9kZS4KIAkgKi8KLQlpZiAoIXY5ZnNfcHJvdG9fZG90bCh2OXNlcykpCi0JCWZsYWdzID0gT19SRFdSIHwgT19TWU5DOwotCWVsc2UKLQkJZmxhZ3MgPSBPX1JEV1I7Ci0KLQllcnIgPSBwOV9jbGllbnRfb3BlbihmaWQsIGZsYWdzKTsKKwllcnIgPSBwOV9jbGllbnRfb3BlbihmaWQsIE9fUkRXUik7CiAJaWYgKGVyciA8IDApIHsKIAkJcDlfY2xpZW50X2NsdW5rKGZpZCk7CiAJCWZpZCA9IEVSUl9QVFIoZXJyKTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Y5ZnMuaCBiL2ZzLzlwL3Y5ZnMuaAppbmRleCA5NjY1YzJiLi5lNWViZWRmIDEwMDY0NAotLS0gYS9mcy85cC92OWZzLmgKKysrIGIvZnMvOXAvdjlmcy5oCkBAIC0xMTYsNyArMTE2LDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNsaXN0OyAvKiBsaXN0IG9mIHNlc3Npb25zIHJlZ2lzdGVyZWQgd2l0aCB2OWZzICovCiAJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gYmRpOwogCXN0cnVjdCByd19zZW1hcGhvcmUgcmVuYW1lX3NlbTsKLQlzdHJ1Y3QgcDlfZmlkICpyb290X2ZpZDsgLyogVXNlZCBmb3IgZmlsZSBzeXN0ZW0gc3luYyAqLwogfTsKIAogLyogY2FjaGVfdmFsaWRpdHkgZmxhZ3MgKi8KZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19kZW50cnkuYyBiL2ZzLzlwL3Zmc19kZW50cnkuYwppbmRleCBiNmEzYjlmLi5lMDIyODkwIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfZGVudHJ5LmMKKysrIGIvZnMvOXAvdmZzX2RlbnRyeS5jCkBAIC0xMjYsNyArMTI2LDkgQEAKIAkJCXJldHZhbCA9IHY5ZnNfcmVmcmVzaF9pbm9kZV9kb3RsKGZpZCwgaW5vZGUpOwogCQllbHNlCiAJCQlyZXR2YWwgPSB2OWZzX3JlZnJlc2hfaW5vZGUoZmlkLCBpbm9kZSk7Ci0JCWlmIChyZXR2YWwgPD0gMCkKKwkJaWYgKHJldHZhbCA9PSAtRU5PRU5UKQorCQkJcmV0dXJuIDA7CisJCWlmIChyZXR2YWwgPCAwKQogCQkJcmV0dXJuIHJldHZhbDsKIAl9CiBvdXRfdmFsaWQ6CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuYwppbmRleCBmZmJiMTEzLi44MmE3YzM4IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jCisrKyBiL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMKQEAgLTgxMSw3ICs4MTEsNyBAQAogCWZpZCA9IHY5ZnNfZmlkX2xvb2t1cChkZW50cnkpOwogCWlmIChJU19FUlIoZmlkKSkgewogCQlfX3B1dG5hbWUobGluayk7Ci0JCWxpbmsgPSBFUlJfUFRSKFBUUl9FUlIoZmlkKSk7CisJCWxpbmsgPSBFUlJfQ0FTVChmaWQpOwogCQlnb3RvIG5kc2V0OwogCX0KIAlyZXR2YWwgPSBwOV9jbGllbnRfcmVhZGxpbmsoZmlkLCAmdGFyZ2V0KTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19zdXBlci5jIGIvZnMvOXAvdmZzX3N1cGVyLmMKaW5kZXggZjNlZWQzMy4uZmVlZjZjZCAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX3N1cGVyLmMKKysrIGIvZnMvOXAvdmZzX3N1cGVyLmMKQEAgLTE1NCw2ICsxNTQsNyBAQAogCQlyZXR2YWwgPSBQVFJfRVJSKGlub2RlKTsKIAkJZ290byByZWxlYXNlX3NiOwogCX0KKwogCXJvb3QgPSBkX2FsbG9jX3Jvb3QoaW5vZGUpOwogCWlmICghcm9vdCkgewogCQlpcHV0KGlub2RlKTsKQEAgLTE4NSwyMSArMTg2LDEwIEBACiAJCXA5c3RhdF9mcmVlKHN0KTsKIAkJa2ZyZWUoc3QpOwogCX0KLQl2OWZzX2ZpZF9hZGQocm9vdCwgZmlkKTsKIAlyZXR2YWwgPSB2OWZzX2dldF9hY2woaW5vZGUsIGZpZCk7CiAJaWYgKHJldHZhbCkKIAkJZ290byByZWxlYXNlX3NiOwotCS8qCi0JICogQWRkIHRoZSByb290IGZpZCB0byBzZXNzaW9uIGluZm8uIFRoaXMgaXMgdXNlZAotCSAqIGZvciBmaWxlIHN5c3RlbSBzeW5jLiBXZSB3YW50IGEgY2xvbmVkIGZpZCBoZXJlCi0JICogc28gdGhhdCB3ZSBjYW4gZG8gYSBzeW5jX2ZpbGVzeXN0ZW0gYWZ0ZXIgYQotCSAqIHNocmlua19kY2FjaGVfZm9yX3Vtb3VudAotCSAqLwotCXY5c2VzLT5yb290X2ZpZCA9IHY5ZnNfZmlkX2Nsb25lKHJvb3QpOwotCWlmIChJU19FUlIodjlzZXMtPnJvb3RfZmlkKSkgewotCQlyZXR2YWwgPSBQVFJfRVJSKHY5c2VzLT5yb290X2ZpZCk7Ci0JCWdvdG8gcmVsZWFzZV9zYjsKLQl9CisJdjlmc19maWRfYWRkKHJvb3QsIGZpZCk7CiAKIAlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIiBzaW1wbGUgc2V0IG1vdW50LCByZXR1cm4gMFxuIik7CiAJcmV0dXJuIGRnZXQoc2ItPnNfcm9vdCk7CkBAIC0yMTAsMTEgKzIwMCwxNSBAQAogCXY5ZnNfc2Vzc2lvbl9jbG9zZSh2OXNlcyk7CiAJa2ZyZWUodjlzZXMpOwogCXJldHVybiBFUlJfUFRSKHJldHZhbCk7CisKIHJlbGVhc2Vfc2I6CiAJLyoKLQkgKiB3ZSB3aWxsIGRvIHRoZSBzZXNzaW9uX2Nsb3NlIGFuZCByb290IGRlbnRyeQotCSAqIHJlbGVhc2UgaW4gdGhlIGJlbG93IGNhbGwuCisJICogd2Ugd2lsbCBkbyB0aGUgc2Vzc2lvbl9jbG9zZSBhbmQgcm9vdCBkZW50cnkgcmVsZWFzZQorCSAqIGluIHRoZSBiZWxvdyBjYWxsLiBCdXQgd2UgbmVlZCB0byBjbHVuayBmaWQsIGJlY2F1c2Ugd2UgaGF2ZW4ndAorCSAqIGF0dGFjaGVkIHRoZSBmaWQgdG8gZGVudHJ5IHNvIGl0IHdvbid0IGdldCBjbHVua2VkCisJICogYXV0b21hdGljYWxseS4KIAkgKi8KKwlwOV9jbGllbnRfY2x1bmsoZmlkKTsKIAlkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzYik7CiAJcmV0dXJuIEVSUl9QVFIocmV0dmFsKTsKIH0KQEAgLTIzMiw3ICsyMjYsNyBAQAogCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiICVwXG4iLCBzKTsKIAogCWtpbGxfYW5vbl9zdXBlcihzKTsKLQlwOV9jbGllbnRfY2x1bmsodjlzZXMtPnJvb3RfZmlkKTsKKwogCXY5ZnNfc2Vzc2lvbl9jYW5jZWwodjlzZXMpOwogCXY5ZnNfc2Vzc2lvbl9jbG9zZSh2OXNlcyk7CiAJa2ZyZWUodjlzZXMpOwpAQCAtMjg1LDE0ICsyNzksNiBAQAogCXJldHVybiByZXM7CiB9CiAKLXN0YXRpYyBpbnQgdjlmc19zeW5jX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB3YWl0KQotewotCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMgPSBzYi0+c19mc19pbmZvOwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJ2OWZzX3N5bmNfZnM6IHN1cGVyX2Jsb2NrICVwXG4iLCBzYik7Ci0JcmV0dXJuIHA5X2NsaWVudF9zeW5jX2ZzKHY5c2VzLT5yb290X2ZpZCk7Ci19Ci0KIHN0YXRpYyBpbnQgdjlmc19kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKQEAgLTMwNyw2ICsyOTMsNTEgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGludCB2OWZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgcDlfd3N0YXQgd3N0YXQ7CisJc3RydWN0IHY5ZnNfaW5vZGUgKnY5aW5vZGU7CisJLyoKKwkgKiBzZW5kIGFuIGZzeW5jIHJlcXVlc3QgdG8gc2VydmVyIGlycmVzcGVjdGl2ZSBvZgorCSAqIHdiYy0+c3luY19tb2RlLgorCSAqLworCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiJXM6IGlub2RlICVwXG4iLCBfX2Z1bmNfXywgaW5vZGUpOworCXY5aW5vZGUgPSBWOUZTX0koaW5vZGUpOworCWlmICghdjlpbm9kZS0+d3JpdGViYWNrX2ZpZCkKKwkJcmV0dXJuIDA7CisJdjlmc19ibGFua193c3RhdCgmd3N0YXQpOworCisJcmV0ID0gcDlfY2xpZW50X3dzdGF0KHY5aW5vZGUtPndyaXRlYmFja19maWQsICZ3c3RhdCk7CisJaWYgKHJldCA8IDApIHsKKwkJX19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBJX0RJUlRZX0RBVEFTWU5DKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdjlmc193cml0ZV9pbm9kZV9kb3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQoreworCWludCByZXQ7CisJc3RydWN0IHY5ZnNfaW5vZGUgKnY5aW5vZGU7CisJLyoKKwkgKiBzZW5kIGFuIGZzeW5jIHJlcXVlc3QgdG8gc2VydmVyIGlycmVzcGVjdGl2ZSBvZgorCSAqIHdiYy0+c3luY19tb2RlLgorCSAqLworCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiJXM6IGlub2RlICVwXG4iLCBfX2Z1bmNfXywgaW5vZGUpOworCXY5aW5vZGUgPSBWOUZTX0koaW5vZGUpOworCWlmICghdjlpbm9kZS0+d3JpdGViYWNrX2ZpZCkKKwkJcmV0dXJuIDA7CisJcmV0ID0gcDlfY2xpZW50X2ZzeW5jKHY5aW5vZGUtPndyaXRlYmFja19maWQsIDApOworCWlmIChyZXQgPCAwKSB7CisJCV9fbWFya19pbm9kZV9kaXJ0eShpbm9kZSwgSV9ESVJUWV9EQVRBU1lOQyk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgdjlmc19zdXBlcl9vcHMgPSB7CiAJLmFsbG9jX2lub2RlID0gdjlmc19hbGxvY19pbm9kZSwKIAkuZGVzdHJveV9pbm9kZSA9IHY5ZnNfZGVzdHJveV9pbm9kZSwKQEAgLTMxNCwxNyArMzQ1LDE4IEBACiAJLmV2aWN0X2lub2RlID0gdjlmc19ldmljdF9pbm9kZSwKIAkuc2hvd19vcHRpb25zID0gZ2VuZXJpY19zaG93X29wdGlvbnMsCiAJLnVtb3VudF9iZWdpbiA9IHY5ZnNfdW1vdW50X2JlZ2luLAorCS53cml0ZV9pbm9kZSA9IHY5ZnNfd3JpdGVfaW5vZGUsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgdjlmc19zdXBlcl9vcHNfZG90bCA9IHsKIAkuYWxsb2NfaW5vZGUgPSB2OWZzX2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlID0gdjlmc19kZXN0cm95X2lub2RlLAotCS5zeW5jX2ZzID0gdjlmc19zeW5jX2ZzLAogCS5zdGF0ZnMgPSB2OWZzX3N0YXRmcywKIAkuZHJvcF9pbm9kZSA9IHY5ZnNfZHJvcF9pbm9kZSwKIAkuZXZpY3RfaW5vZGUgPSB2OWZzX2V2aWN0X2lub2RlLAogCS5zaG93X29wdGlvbnMgPSBnZW5lcmljX3Nob3dfb3B0aW9ucywKIAkudW1vdW50X2JlZ2luID0gdjlmc191bW91bnRfYmVnaW4sCisJLndyaXRlX2lub2RlID0gdjlmc193cml0ZV9pbm9kZV9kb3RsLAogfTsKIAogc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgdjlmc19mc190eXBlID0gewpkaWZmIC0tZ2l0IGEvZnMvYWRmcy9tYXAuYyBiL2ZzL2FkZnMvbWFwLmMKaW5kZXggZDFhNTkzMi4uNjkzNWYwNSAxMDA2NDQKLS0tIGEvZnMvYWRmcy9tYXAuYworKysgYi9mcy9hZGZzL21hcC5jCkBAIC01MSw3ICs1MSw3IEBACiAKIC8qCiAgKiBUaGlzIGlzIGZ1bi4gIFdlIG5lZWQgdG8gbG9hZCB1cCB0byAxOSBiaXRzIGZyb20gdGhlIG1hcCBhdCBhbgotICogYXJiaXRhcnkgYml0IGFsaWdubWVudC4gIChXZSdyZSBsaW1pdGVkIHRvIDE5IGJpdHMgYnkgRisgdmVyc2lvbiAyKS4KKyAqIGFyYml0cmFyeSBiaXQgYWxpZ25tZW50LiAgKFdlJ3JlIGxpbWl0ZWQgdG8gMTkgYml0cyBieSBGKyB2ZXJzaW9uIDIpLgogICovCiAjZGVmaW5lIEdFVF9GUkFHX0lEKF9tYXAsX3N0YXJ0LF9pZG1hc2spCQkJCVwKIAkoewkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvZnMvYWZzL2NhY2hlLmMgYi9mcy9hZnMvY2FjaGUuYwppbmRleCAwZmIzMTVkLi41Nzc3NjNjIDEwMDY0NAotLS0gYS9mcy9hZnMvY2FjaGUuYworKysgYi9mcy9hZnMvY2FjaGUuYwpAQCAtOTgsNyArOTgsNyBAQAogfQogCiAvKgotICogcHJvdmlkZSBuZXcgYXV4aWxsaWFyeSBjYWNoZSBkYXRhCisgKiBwcm92aWRlIG5ldyBhdXhpbGlhcnkgY2FjaGUgZGF0YQogICovCiBzdGF0aWMgdWludDE2X3QgYWZzX2NlbGxfY2FjaGVfZ2V0X2F1eChjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKIAkJCQkgICAgICAgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZtYXgpCkBAIC0xMTcsNyArMTE3LDcgQEAKIH0KIAogLyoKLSAqIGNoZWNrIHRoYXQgdGhlIGF1eGlsbGlhcnkgZGF0YSBpbmRpY2F0ZXMgdGhhdCB0aGUgZW50cnkgaXMgc3RpbGwgdmFsaWQKKyAqIGNoZWNrIHRoYXQgdGhlIGF1eGlsaWFyeSBkYXRhIGluZGljYXRlcyB0aGF0IHRoZSBlbnRyeSBpcyBzdGlsbCB2YWxpZAogICovCiBzdGF0aWMgZW51bSBmc2NhY2hlX2NoZWNrYXV4IGFmc19jZWxsX2NhY2hlX2NoZWNrX2F1eCh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKIAkJCQkJCSAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwKQEAgLTE1MCw3ICsxNTAsNyBAQAogfQogCiAvKgotICogcHJvdmlkZSBuZXcgYXV4aWxsaWFyeSBjYWNoZSBkYXRhCisgKiBwcm92aWRlIG5ldyBhdXhpbGlhcnkgY2FjaGUgZGF0YQogICovCiBzdGF0aWMgdWludDE2X3QgYWZzX3Zsb2NhdGlvbl9jYWNoZV9nZXRfYXV4KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAogCQkJCQkgICAgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZtYXgpCkBAIC0xNzIsNyArMTcyLDcgQEAKIH0KIAogLyoKLSAqIGNoZWNrIHRoYXQgdGhlIGF1eGlsbGlhcnkgZGF0YSBpbmRpY2F0ZXMgdGhhdCB0aGUgZW50cnkgaXMgc3RpbGwgdmFsaWQKKyAqIGNoZWNrIHRoYXQgdGhlIGF1eGlsaWFyeSBkYXRhIGluZGljYXRlcyB0aGF0IHRoZSBlbnRyeSBpcyBzdGlsbCB2YWxpZAogICovCiBzdGF0aWMKIGVudW0gZnNjYWNoZV9jaGVja2F1eCBhZnNfdmxvY2F0aW9uX2NhY2hlX2NoZWNrX2F1eCh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKQEAgLTI4Myw3ICsyODMsNyBAQAogfQogCiAvKgotICogcHJvdmlkZSBuZXcgYXV4aWxsaWFyeSBjYWNoZSBkYXRhCisgKiBwcm92aWRlIG5ldyBhdXhpbGlhcnkgY2FjaGUgZGF0YQogICovCiBzdGF0aWMgdWludDE2X3QgYWZzX3Zub2RlX2NhY2hlX2dldF9hdXgoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCiAJCQkJCXZvaWQgKmJ1ZmZlciwgdWludDE2X3QgYnVmbWF4KQpAQCAtMzA5LDcgKzMwOSw3IEBACiB9CiAKIC8qCi0gKiBjaGVjayB0aGF0IHRoZSBhdXhpbGxpYXJ5IGRhdGEgaW5kaWNhdGVzIHRoYXQgdGhlIGVudHJ5IGlzIHN0aWxsIHZhbGlkCisgKiBjaGVjayB0aGF0IHRoZSBhdXhpbGlhcnkgZGF0YSBpbmRpY2F0ZXMgdGhhdCB0aGUgZW50cnkgaXMgc3RpbGwgdmFsaWQKICAqLwogc3RhdGljIGVudW0gZnNjYWNoZV9jaGVja2F1eCBhZnNfdm5vZGVfY2FjaGVfY2hlY2tfYXV4KHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAogCQkJCQkJICAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9jZWxsLmMgYi9mcy9hZnMvY2VsbC5jCmluZGV4IDBkNWVlYWQuLjNjMDkwYjcgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9jZWxsLmMKKysrIGIvZnMvYWZzL2NlbGwuYwpAQCAtMjkzLDcgKzI5Myw3IEBACiAJCWlmICghY2VsbCkgewogCQkJLyogdGhpcyBzaG91bGQgbm90IGhhcHBlbiB1bmxlc3MgdXNlciB0cmllcyB0byBtb3VudAogCQkJICogd2hlbiByb290IGNlbGwgaXMgbm90IHNldC4gUmV0dXJuIGFuIGltcG9zc2libHkKLQkJCSAqIGJpenphcmUgZXJybm8gdG8gYWxlcnQgdGhlIHVzZXIuIFRoaW5ncyBsaWtlCisJCQkgKiBiaXphcnJlIGVycm5vIHRvIGFsZXJ0IHRoZSB1c2VyLiBUaGluZ3MgbGlrZQogCQkJICogRU5PRU5UIG1pZ2h0IGJlICJtb3JlIGFwcHJvcHJpYXRlIiBidXQgdGhleSBoYXBwZW4KIAkJCSAqIGZvciBvdGhlciByZWFzb25zLgogCQkJICovCmRpZmYgLS1naXQgYS9mcy9hdHRyLmMgYi9mcy9hdHRyLmMKaW5kZXggMTAwN2VkNi4uOTFkYmUyYSAxMDA2NDQKLS0tIGEvZnMvYXR0ci5jCisrKyBiL2ZzL2F0dHIuYwpAQCAtMTI4LDcgKzEyOCw3IEBACiAgKiBzZXRhdHRyX2NvcHkgbXVzdCBiZSBjYWxsZWQgd2l0aCBpX211dGV4IGhlbGQuCiAgKgogICogc2V0YXR0cl9jb3B5IHVwZGF0ZXMgdGhlIGlub2RlJ3MgbWV0YWRhdGEgd2l0aCB0aGF0IHNwZWNpZmllZAotICogaW4gYXR0ci4gTm90aWNhYmx5IG1pc3NpbmcgaXMgaW5vZGUgc2l6ZSB1cGRhdGUsIHdoaWNoIGlzIG1vcmUgY29tcGxleAorICogaW4gYXR0ci4gTm90aWNlYWJseSBtaXNzaW5nIGlzIGlub2RlIHNpemUgdXBkYXRlLCB3aGljaCBpcyBtb3JlIGNvbXBsZXgKICAqIGFzIGl0IHJlcXVpcmVzIHBhZ2VjYWNoZSB1cGRhdGVzLgogICoKICAqIFRoZSBpbm9kZSBpcyBub3QgbWFya2VkIGFzIGRpcnR5IGFmdGVyIHRoaXMgb3BlcmF0aW9uLiBUaGUgcmF0aW9uYWxlIGlzCmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L3Jvb3QuYyBiL2ZzL2F1dG9mczQvcm9vdC5jCmluZGV4IDk2ODA0YTEuLmY1NWFlMjMgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvcm9vdC5jCisrKyBiL2ZzL2F1dG9mczQvcm9vdC5jCkBAIC02MTIsNyArNjEyLDcgQEAKICAqIHNldCB0aGUgRE1BTkFHRURfQVVUT01PVU5UIGFuZCBETUFOQUdFRF9UUkFOU0lUIGZsYWdzIG9uIHRoZSBsZWF2ZXMKICAqIG9mIHRoZSBkaXJlY3RvcnkgdHJlZS4gVGhlcmUgaXMgbm8gbmVlZCB0byBjbGVhciB0aGUgYXV0b21vdW50IGZsYWcKICAqIGZvbGxvd2luZyBhIG1vdW50IG9yIHJlc3RvcmUgaXQgYWZ0ZXIgYW4gZXhwaXJlIGJlY2F1c2UgdGhlc2UgbW91bnRzCi0gKiBhcmUgYWx3YXlzIGNvdmVyZWQuIEhvd2V2ZXIsIGl0IGlzIG5lY2Nlc3NhcnkgdG8gZW5zdXJlIHRoYXQgdGhlc2UKKyAqIGFyZSBhbHdheXMgY292ZXJlZC4gSG93ZXZlciwgaXQgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IHRoZXNlCiAgKiBmbGFncyBhcmUgY2xlYXIgb24gbm9uLWVtcHR5IGRpcmVjdG9yaWVzIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGNhbGxzCiAgKiBkdXJpbmcgcGF0aCB3YWxrcy4KICAqLwpkaWZmIC0tZ2l0IGEvZnMvYmVmcy9DaGFuZ2VMb2cgYi9mcy9iZWZzL0NoYW5nZUxvZwppbmRleCBjZThjNzg3Li43NWE0NjFjIDEwMDY0NAotLS0gYS9mcy9iZWZzL0NoYW5nZUxvZworKysgYi9mcy9iZWZzL0NoYW5nZUxvZwpAQCAtMjQsNyArMjQsNyBAQAogCiBWZXJzaW9uIDAuNjQgKDIwMDItMDItMDcpCiA9PT09PT09PT09Ci0qIERpZCB0aGUgc3RyaW5nIGNvbXBhcmlzaW9uIHJlYWxseSByaWdodCB0aGlzIHRpbWUgKGJ0cmVlLmMpIFtXRF0KKyogRGlkIHRoZSBzdHJpbmcgY29tcGFyaXNvbiByZWFsbHkgcmlnaHQgdGhpcyB0aW1lIChidHJlZS5jKSBbV0RdCiAKICogRml4ZWQgdXAgc29tZSBwbGFjZXMgd2hlcmUgSSBhc3N1bWVkIHRoYXQgYSBsb25nIGludCBjb3VsZCBob2xkCiAJYSBwb2ludGVyIHZhbHVlLiAoYnRyZWUuYykgW1dEXQpAQCAtMTE0LDcgKzExNCw3IEBACiAJTW9yZSBmbGV4aWJsZS4gV2lsbCBzb29uIGJlIGNvbnRyb2xsYWJsZSBhdCBtb3VudCB0aW1lIAogCShzZWUgVE9ETykuIFtXRF0KIAotKiBSZXdyb3RlIGRhdGFzdHJlYW0gcG9zaXRvbiBsb29rdXBzLgorKiBSZXdyb3RlIGRhdGFzdHJlYW0gcG9zaXRpb24gbG9va3Vwcy4KIAkoZGF0YXN0cmVhbS5jKSBbV0RdCiAKICogTW92ZWQgdGhlIFRPRE8gbGlzdCB0byBpdHMgb3duIGZpbGUuCkBAIC0xNTAsNyArMTUwLDcgQEAKICogQW50b24gYWxzbyB0b2xkIG1lIHRoYXQgdGhlIGJsb2Nrc2l6ZSBpcyBub3QgYWxsb3dlZCB0byBiZSBsYXJnZXIgdGhhbiAKIAl0aGUgcGFnZSBzaXplIGluIGxpbnV4LCB3aGljaCBpcyA0ayBpMzg2LiBPb3BzLiBBZGRlZCBhIHRlc3QgZm9yIAogCShibG9ja3NpemUgPiBQQUdFX1NJWkUpLCBhbmQgcmVmdXNlIHRvIG1vdW50IGluIHRoYXQgY2FzZS4gV2hhdCB0aGlzIAotCXByYWN0aWNhbHkgbWVhbnMgaXMgdGhhdCA4ayBibG9ja3NpemUgdm9sdW1lcyB3b24ndCB3b3JrIHdpdGhvdXQgYSBtYWpvcgorCXByYWN0aWNhbGx5IG1lYW5zIGlzIHRoYXQgOGsgYmxvY2tzaXplIHZvbHVtZXMgd29uJ3Qgd29yayB3aXRob3V0IGEgbWFqb3IKIAlyZXN0cnVjdHVyaW5nIG9mIHRoZSBkcml2ZXIgKG9yIGFuIGFscGhhIG9yIG90aGVyIDY0Yml0IGhhcmR3YXJlKS4gW1dEXQogCiAqIENsZWFuZWQgdXAgdGhlIGJlZnNfY291bnRfYmxvY2tzKCkgZnVuY3Rpb24uIE11Y2ggc21hcnRlciBub3cuIApAQCAtMTgzLDcgKzE4Myw3IEBACiAJc3RydWN0dXJlcyBpbnRvIHRoZSBnZW5lcmljIHBvaW50ZXIgZmllbGRzIG9mIHRoZSBwdWJsaWMgc3RydWN0dXJlcyAKIAl3aXRoIGttYWxsb2MoKS4gcHV0X3N1cGVyIGFuZCBwdXRfaW5vZGUgZnJlZSB0aGVtLiBUaGlzIGFsbG93cyB1cyBub3QgCiAJdG8gaGF2ZSB0byB0b3VjaCB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIHB1YmxpYyBzdHJ1Y3R1cmVzIGluIAotCWluY2x1ZGUvbGludXgvZnMuaC4gQWxzbywgYmVmc19pbm9kZV9pbmZvIGlzIGh1Z2UgKGJlY3Vhc2Ugb2YgdGhlIAorCWluY2x1ZGUvbGludXgvZnMuaC4gQWxzbywgYmVmc19pbm9kZV9pbmZvIGlzIGh1Z2UgKGJlY2F1c2Ugb2YgdGhlIAogCXN5bWxpbmsgc3RyaW5nKS4gKHN1cGVyLmMsIGlub2RlLmMsIGJlZnNfZnMuaCkgW1dEXQogCiAqIEZpeGVkIGEgdGhpbmtvIHRoYXQgd2FzIGNvcnJ1cHRpbmcgZmlsZSByZWFkcyBhZnRlciB0aGUgZmlyc3QgYmxvY2tfcnVuIApAQCAtNDA0LDcgKzQwNCw3IEBACiAKICogRml4ZWQgY29tcGlsZSBlcnJvcnMgb24gMi40LjEga2VybmVsIChXRCkKIAlSZXNvbHZlIHJlamVjdGVkIHBhdGNoZXMKLQlBY2NvbW9kYXRlIGNoYW5nZWQgTkxTIGludGVyZmFjZSAodXRpbC5oKQorCUFjY29tbW9kYXRlIGNoYW5nZWQgTkxTIGludGVyZmFjZSAodXRpbC5oKQogCU5lZWRlZCB0byBpbmNsdWRlIDxsaW51eC9zbGFiLmg+IGluIG1vc3QgZmlsZXMKIAlNYWtlZmlsZSBjaGFuZ2VzCiAJZnMvQ29uZmlnLmluIGNoYW5nZXMKZGlmZiAtLWdpdCBhL2ZzL2JlZnMvYmVmc19mc190eXBlcy5oIGIvZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmgKaW5kZXggNzg5M2VhYS4uZWI1NTdkOSAxMDA2NDQKLS0tIGEvZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmgKKysrIGIvZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmgKQEAgLTIzNCw3ICsyMzQsNyBAQAogfSBQQUNLRUQgYmVmc19idHJlZV9zdXBlcjsKIAogLyoKLSAqIEhlYWRlciBzdHVjdHVyZSBvZiBlYWNoIGJ0cmVlIG5vZGUKKyAqIEhlYWRlciBzdHJ1Y3R1cmUgb2YgZWFjaCBidHJlZSBub2RlCiAgKi8KIHR5cGVkZWYgc3RydWN0IHsKIAlmczY0IGxlZnQ7CmRpZmYgLS1naXQgYS9mcy9iZWZzL2J0cmVlLmMgYi9mcy9iZWZzL2J0cmVlLmMKaW5kZXggNDIwMmRiNy4uYTY2YzliMSAxMDA2NDQKLS0tIGEvZnMvYmVmcy9idHJlZS5jCisrKyBiL2ZzL2JlZnMvYnRyZWUuYwpAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR05VIEdQTC4gU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIGRldGFpbHMuCiAgKgotICogMjAwMi0wMi0wNTogU2VyZ2V5IFMuIEtvc3R5bGlvdiBhZGRlZCBiaW5hcnkgc2VhcmNoIHdpdGhpbmcKKyAqIDIwMDItMDItMDU6IFNlcmdleSBTLiBLb3N0eWxpb3YgYWRkZWQgYmluYXJ5IHNlYXJjaCB3aXRoaW4KICAqIAkJYnRyZWUgbm9kZXMuCiAgKgogICogTWFueSB0aGFua3MgdG86CmRpZmYgLS1naXQgYS9mcy9iZWZzL2xpbnV4dmZzLmMgYi9mcy9iZWZzL2xpbnV4dmZzLmMKaW5kZXggMDY0NTdlZC4uNTRiOGMyOCAxMDA2NDQKLS0tIGEvZnMvYmVmcy9saW51eHZmcy5jCisrKyBiL2ZzL2JlZnMvbGludXh2ZnMuYwpAQCAtNzM0LDcgKzczNCw3IEBACiAKIC8qIFRoaXMgZnVuY3Rpb24gaGFzIHRoZSByZXNwb25zaWJpbHRpeSBvZiBnZXR0aW5nIHRoZQogICogZmlsZXN5c3RlbSByZWFkeSBmb3IgdW5tb3VudGluZy4gCi0gKiBCYXNpY2x5LCB3ZSBmcmVlIGV2ZXJ5dGhpbmcgdGhhdCB3ZSBhbGxvY2F0ZWQgaW4KKyAqIEJhc2ljYWxseSwgd2UgZnJlZSBldmVyeXRoaW5nIHRoYXQgd2UgYWxsb2NhdGVkIGluCiAgKiBiZWZzX3JlYWRfaW5vZGUKICAqLwogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9lbGYuYyBiL2ZzL2JpbmZtdF9lbGYuYwppbmRleCBmMzQwNzhkLi4zMDM5ODNmIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZWxmLmMKKysrIGIvZnMvYmluZm10X2VsZi5jCkBAIC05NDEsOSArOTQxLDEzIEBACiAJY3VycmVudC0+bW0tPnN0YXJ0X3N0YWNrID0gYnBybS0+cDsKIAogI2lmZGVmIGFyY2hfcmFuZG9taXplX2JyawotCWlmICgoY3VycmVudC0+ZmxhZ3MgJiBQRl9SQU5ET01JWkUpICYmIChyYW5kb21pemVfdmFfc3BhY2UgPiAxKSkKKwlpZiAoKGN1cnJlbnQtPmZsYWdzICYgUEZfUkFORE9NSVpFKSAmJiAocmFuZG9taXplX3ZhX3NwYWNlID4gMSkpIHsKIAkJY3VycmVudC0+bW0tPmJyayA9IGN1cnJlbnQtPm1tLT5zdGFydF9icmsgPQogCQkJYXJjaF9yYW5kb21pemVfYnJrKGN1cnJlbnQtPm1tKTsKKyNpZmRlZiBDT05GSUdfQ09NUEFUX0JSSworCQljdXJyZW50LT5icmtfcmFuZG9taXplZCA9IDE7CisjZW5kaWYKKwl9CiAjZW5kaWYKIAogCWlmIChjdXJyZW50LT5wZXJzb25hbGl0eSAmIE1NQVBfUEFHRV9aRVJPKSB7CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZmxhdC5jIGIvZnMvYmluZm10X2ZsYXQuYwppbmRleCA4MTEzODRiLi4zOTdkMzA1IDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZmxhdC5jCisrKyBiL2ZzL2JpbmZtdF9mbGF0LmMKQEAgLTcxNyw3ICs3MTcsNyBAQAogCSAqIGhlbHAgc2ltcGxpZnkgYWxsIHRoaXMgbXVtYm8ganVtYm8KIAkgKgogCSAqIFdlJ3ZlIGdvdCB0d28gZGlmZmVyZW50IHNlY3Rpb25zIG9mIHJlbG9jYXRpb24gZW50cmllcy4KLQkgKiBUaGUgZmlyc3QgaXMgdGhlIEdPVCB3aGljaCByZXNpZGVzIGF0IHRoZSBiZWdpbmluZyBvZiB0aGUgZGF0YSBzZWdtZW50CisJICogVGhlIGZpcnN0IGlzIHRoZSBHT1Qgd2hpY2ggcmVzaWRlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkYXRhIHNlZ21lbnQKIAkgKiBhbmQgaXMgdGVybWluYXRlZCB3aXRoIGEgLTEuICBUaGlzIG9uZSBjYW4gYmUgcmVsb2NhdGVkIGluIHBsYWNlLgogCSAqIFRoZSBzZWNvbmQgaXMgdGhlIGV4dHJhIHJlbG9jYXRpb24gZW50cmllcyB0YWNrZWQgYWZ0ZXIgdGhlIGltYWdlJ3MKIAkgKiBkYXRhIHNlZ21lbnQuIFRoZXNlIHJlcXVpcmUgYSBsaXR0bGUgbW9yZSBwcm9jZXNzaW5nIGFzIHRoZSBlbnRyeSBpcwpkaWZmIC0tZ2l0IGEvZnMvYmlvLmMgYi9mcy9iaW8uYwppbmRleCA0ZDZkNGI2Li44NDBhMGQ3IDEwMDY0NAotLS0gYS9mcy9iaW8uYworKysgYi9mcy9iaW8uYwpAQCAtMTQzNiw3ICsxNDM2LDcgQEAKICAqICAgcHJlZmVycmVkIHdheSB0byBlbmQgSS9PIG9uIGEgYmlvLCBpdCB0YWtlcyBjYXJlIG9mIGNsZWFyaW5nCiAgKiAgIEJJT19VUFRPREFURSBvbiBlcnJvci4gQGVycm9yIGlzIDAgb24gc3VjY2VzcywgYW5kIGFuZCBvbmUgb2YgdGhlCiAgKiAgIGVzdGFibGlzaGVkIC1FeHh4eCAoLUVJTywgZm9yIGluc3RhbmNlKSBlcnJvciB2YWx1ZXMgaW4gY2FzZQotICogICBzb21ldGhpbmcgd2VudCB3cm9uZy4gTm9vbmUgc2hvdWxkIGNhbGwgYmlfZW5kX2lvKCkgZGlyZWN0bHkgb24gYQorICogICBzb21ldGhpbmcgd2VudCB3cm9uZy4gTm8gb25lIHNob3VsZCBjYWxsIGJpX2VuZF9pbygpIGRpcmVjdGx5IG9uIGEKICAqICAgYmlvIHVubGVzcyB0aGV5IG93biBpdCBhbmQgdGh1cyBrbm93IHRoYXQgaXQgaGFzIGFuIGVuZF9pbwogICogICBmdW5jdGlvbi4KICAqKi8KZGlmZiAtLWdpdCBhL2ZzL2Jsb2NrX2Rldi5jIGIvZnMvYmxvY2tfZGV2LmMKaW5kZXggYzE1MTFjNi4uMjU3YjAwZSAxMDA2NDQKLS0tIGEvZnMvYmxvY2tfZGV2LmMKKysrIGIvZnMvYmxvY2tfZGV2LmMKQEAgLTY1Myw3ICs2NTMsNyBAQAogICogQHdob2xlOiB3aG9sZSBibG9jayBkZXZpY2UgY29udGFpbmluZyBAYmRldiwgbWF5IGVxdWFsIEBiZGV2CiAgKiBAaG9sZGVyOiBob2xkZXIgdHJ5aW5nIHRvIGNsYWltIEBiZGV2CiAgKgotICogVGVzdCB3aHRoZXIgQGJkZXYgY2FuIGJlIGNsYWltZWQgYnkgQGhvbGRlci4KKyAqIFRlc3Qgd2hldGhlciBAYmRldiBjYW4gYmUgY2xhaW1lZCBieSBAaG9sZGVyLgogICoKICAqIENPTlRFWFQ6CiAgKiBzcGluX2xvY2soJmJkZXZfbG9jaykuCkBAIC0xMTAyLDYgKzExMDIsNyBAQAogCQkJaWYgKCFiZGV2LT5iZF9wYXJ0KQogCQkJCWdvdG8gb3V0X2NsZWFyOwogCisJCQlyZXQgPSAwOwogCQkJaWYgKGRpc2stPmZvcHMtPm9wZW4pIHsKIAkJCQlyZXQgPSBkaXNrLT5mb3BzLT5vcGVuKGJkZXYsIG1vZGUpOwogCQkJCWlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKSB7CkBAIC0xMTE4LDkgKzExMTksMTggQEAKIAkJCQkJcHV0X2Rpc2soZGlzayk7CiAJCQkJCWdvdG8gcmVzdGFydDsKIAkJCQl9Ci0JCQkJaWYgKHJldCkKLQkJCQkJZ290byBvdXRfY2xlYXI7CiAJCQl9CisJCQkvKgorCQkJICogSWYgdGhlIGRldmljZSBpcyBpbnZhbGlkYXRlZCwgcmVzY2FuIHBhcnRpdGlvbgorCQkJICogaWYgb3BlbiBzdWNjZWVkZWQgb3IgZmFpbGVkIHdpdGggLUVOT01FRElVTS4KKwkJCSAqIFRoZSBsYXR0ZXIgaXMgbmVjZXNzYXJ5IHRvIHByZXZlbnQgZ2hvc3QKKwkJCSAqIHBhcnRpdGlvbnMgb24gYSByZW1vdmVkIG1lZGl1bS4KKwkJCSAqLworCQkJaWYgKGJkZXYtPmJkX2ludmFsaWRhdGVkICYmICghcmV0IHx8IHJldCA9PSAtRU5PTUVESVVNKSkKKwkJCQlyZXNjYW5fcGFydGl0aW9ucyhkaXNrLCBiZGV2KTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBvdXRfY2xlYXI7CisKIAkJCWlmICghYmRldi0+YmRfb3BlbmVycykgewogCQkJCWJkX3NldF9zaXplKGJkZXYsKGxvZmZfdClnZXRfY2FwYWNpdHkoZGlzayk8PDkpOwogCQkJCWJkaSA9IGJsa19nZXRfYmFja2luZ19kZXZfaW5mbyhiZGV2KTsKQEAgLTExMjgsOCArMTEzOCw2IEBACiAJCQkJCWJkaSA9ICZkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm87CiAJCQkJYmRldl9pbm9kZV9zd2l0Y2hfYmRpKGJkZXYtPmJkX2lub2RlLCBiZGkpOwogCQkJfQotCQkJaWYgKGJkZXYtPmJkX2ludmFsaWRhdGVkKQotCQkJCXJlc2Nhbl9wYXJ0aXRpb25zKGRpc2ssIGJkZXYpOwogCQl9IGVsc2UgewogCQkJc3RydWN0IGJsb2NrX2RldmljZSAqd2hvbGU7CiAJCQl3aG9sZSA9IGJkZ2V0X2Rpc2soZGlzaywgMCk7CkBAIC0xMTUzLDEzICsxMTYxLDE0IEBACiAJCX0KIAl9IGVsc2UgewogCQlpZiAoYmRldi0+YmRfY29udGFpbnMgPT0gYmRldikgewotCQkJaWYgKGJkZXYtPmJkX2Rpc2stPmZvcHMtPm9wZW4pIHsKKwkJCXJldCA9IDA7CisJCQlpZiAoYmRldi0+YmRfZGlzay0+Zm9wcy0+b3BlbikKIAkJCQlyZXQgPSBiZGV2LT5iZF9kaXNrLT5mb3BzLT5vcGVuKGJkZXYsIG1vZGUpOwotCQkJCWlmIChyZXQpCi0JCQkJCWdvdG8gb3V0X3VubG9ja19iZGV2OwotCQkJfQotCQkJaWYgKGJkZXYtPmJkX2ludmFsaWRhdGVkKQorCQkJLyogdGhlIHNhbWUgYXMgZmlyc3Qgb3BlbmVyIGNhc2UsIHJlYWQgY29tbWVudCB0aGVyZSAqLworCQkJaWYgKGJkZXYtPmJkX2ludmFsaWRhdGVkICYmICghcmV0IHx8IHJldCA9PSAtRU5PTUVESVVNKSkKIAkJCQlyZXNjYW5fcGFydGl0aW9ucyhiZGV2LT5iZF9kaXNrLCBiZGV2KTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBvdXRfdW5sb2NrX2JkZXY7CiAJCX0KIAkJLyogb25seSBvbmUgb3BlbmVyIGhvbGRzIHJlZnMgdG8gdGhlIG1vZHVsZSBhbmQgZGlzayAqLwogCQltb2R1bGVfcHV0KGRpc2stPmZvcHMtPm93bmVyKTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2FjbC5jIGIvZnMvYnRyZnMvYWNsLmMKaW5kZXggZGUzNGJmYS4uNDRlYTViOSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvYWNsLmMKKysrIGIvZnMvYnRyZnMvYWNsLmMKQEAgLTE3OCwxNiArMTc4LDE4IEBACiAKIAlpZiAodmFsdWUpIHsKIAkJYWNsID0gcG9zaXhfYWNsX2Zyb21feGF0dHIodmFsdWUsIHNpemUpOwotCQlpZiAoYWNsID09IE5VTEwpIHsKLQkJCXZhbHVlID0gTlVMTDsKLQkJCXNpemUgPSAwOwotCQl9IGVsc2UgaWYgKElTX0VSUihhY2wpKSB7CisJCWlmIChJU19FUlIoYWNsKSkKIAkJCXJldHVybiBQVFJfRVJSKGFjbCk7CisKKwkJaWYgKGFjbCkgeworCQkJcmV0ID0gcG9zaXhfYWNsX3ZhbGlkKGFjbCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0OwogCQl9CiAJfQogCiAJcmV0ID0gYnRyZnNfc2V0X2FjbChOVUxMLCBkZW50cnktPmRfaW5vZGUsIGFjbCwgdHlwZSk7Ci0KK291dDoKIAlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2N0cmVlLmggYi9mcy9idHJmcy9jdHJlZS5oCmluZGV4IDM0NThiNTcuLjhmNGI4MWQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2N0cmVlLmgKKysrIGIvZnMvYnRyZnMvY3RyZWUuaApAQCAtNzE4LDcgKzcxOCw3IEBACiAJdTY0IHRvdGFsX2J5dGVzOwkvKiB0b3RhbCBieXRlcyBpbiB0aGUgc3BhY2UsCiAJCQkJICAgdGhpcyBkb2Vzbid0IHRha2UgbWlycm9ycyBpbnRvIGFjY291bnQgKi8KIAl1NjQgYnl0ZXNfdXNlZDsJCS8qIHRvdGFsIGJ5dGVzIHVzZWQsCi0JCQkJICAgdGhpcyBkb2VzJ3QgdGFrZSBtaXJyb3JzIGludG8gYWNjb3VudCAqLworCQkJCSAgIHRoaXMgZG9lc24ndCB0YWtlIG1pcnJvcnMgaW50byBhY2NvdW50ICovCiAJdTY0IGJ5dGVzX3Bpbm5lZDsJLyogdG90YWwgYnl0ZXMgcGlubmVkLCB3aWxsIGJlIGZyZWVkIHdoZW4gdGhlCiAJCQkJICAgdHJhbnNhY3Rpb24gZmluaXNoZXMgKi8KIAl1NjQgYnl0ZXNfcmVzZXJ2ZWQ7CS8qIHRvdGFsIGJ5dGVzIHRoZSBhbGxvY2F0b3IgaGFzIHJlc2VydmVkIGZvcgpAQCAtNzQwLDggKzc0MCwxMCBAQAogCSAqLwogCXVuc2lnbmVkIGxvbmcgcmVzZXJ2YXRpb25fcHJvZ3Jlc3M7CiAKLQlpbnQgZnVsbDsJCS8qIGluZGljYXRlcyB0aGF0IHdlIGNhbm5vdCBhbGxvY2F0ZSBhbnkgbW9yZQorCWludCBmdWxsOjE7CQkvKiBpbmRpY2F0ZXMgdGhhdCB3ZSBjYW5ub3QgYWxsb2NhdGUgYW55IG1vcmUKIAkJCQkgICBjaHVua3MgZm9yIHRoaXMgc3BhY2UgKi8KKwlpbnQgY2h1bmtfYWxsb2M6MTsJLyogc2V0IGlmIHdlIGFyZSBhbGxvY2F0aW5nIGEgY2h1bmsgKi8KKwogCWludCBmb3JjZV9hbGxvYzsJLyogc2V0IGlmIHdlIG5lZWQgdG8gZm9yY2UgYSBjaHVuayBhbGxvYyBmb3IKIAkJCQkgICB0aGlzIHNwYWNlICovCiAKQEAgLTI1NzYsNiArMjU3OCwxMSBAQAogaW50IGJ0cmZzX21hcmtfZXh0ZW50X3dyaXR0ZW4oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgc3RhcnQsIHU2NCBlbmQpOwogaW50IGJ0cmZzX3JlbGVhc2VfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Cit2b2lkIGJ0cmZzX2Ryb3BfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgc2l6ZV90IG51bV9wYWdlcyk7CitpbnQgYnRyZnNfZGlydHlfcGFnZXMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCSAgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHNpemVfdCBudW1fcGFnZXMsCisJCSAgICAgIGxvZmZfdCBwb3MsIHNpemVfdCB3cml0ZV9ieXRlcywKKwkJICAgICAgc3RydWN0IGV4dGVudF9zdGF0ZSAqKmNhY2hlZCk7CiAKIC8qIHRyZWUtZGVmcmFnLmMgKi8KIGludCBidHJmc19kZWZyYWdfbGVhdmVzKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZGlzay1pby5jIGIvZnMvYnRyZnMvZGlzay1pby5jCmluZGV4IDhmMWQ0NGIuLjIyOGNmMzYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2Rpc2staW8uYworKysgYi9mcy9idHJmcy9kaXNrLWlvLmMKQEAgLTI4MjQsNiArMjgyNCw3IEBACiAKIAlzcGluX2xvY2soJmRlbGF5ZWRfcmVmcy0+bG9jayk7CiAJaWYgKGRlbGF5ZWRfcmVmcy0+bnVtX2VudHJpZXMgPT0gMCkgeworCQlzcGluX3VubG9jaygmZGVsYXllZF9yZWZzLT5sb2NrKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiZGVsYXllZF9yZWZzIGhhcyBOTyBlbnRyeVxuIik7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtMzA1Nyw3ICszMDU4LDcgQEAKIAkJYnRyZnNfZGVzdHJveV9waW5uZWRfZXh0ZW50KHJvb3QsCiAJCQkJCSAgICByb290LT5mc19pbmZvLT5waW5uZWRfZXh0ZW50cyk7CiAKLQkJdC0+dXNlX2NvdW50ID0gMDsKKwkJYXRvbWljX3NldCgmdC0+dXNlX2NvdW50LCAwKTsKIAkJbGlzdF9kZWxfaW5pdCgmdC0+bGlzdCk7CiAJCW1lbXNldCh0LCAwLCBzaXplb2YoKnQpKTsKIAkJa21lbV9jYWNoZV9mcmVlKGJ0cmZzX3RyYW5zYWN0aW9uX2NhY2hlcCwgdCk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jIGIvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYwppbmRleCBmNjE5YzNjLi45ZWU2YmQ1IDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKQEAgLTMzLDYgKzMzLDI1IEBACiAjaW5jbHVkZSAibG9ja2luZy5oIgogI2luY2x1ZGUgImZyZWUtc3BhY2UtY2FjaGUuaCIKIAorLyogY29udHJvbCBmbGFncyBmb3IgZG9fY2h1bmtfYWxsb2MncyBmb3JjZSBmaWVsZAorICogQ0hVTktfQUxMT0NfTk9fRk9SQ0UgbWVhbnMgdG8gb25seSBhbGxvY2F0ZSBhIGNodW5rCisgKiBpZiB3ZSByZWFsbHkgbmVlZCBvbmUuCisgKgorICogQ0hVTktfQUxMT0NfRk9SQ0UgbWVhbnMgaXQgbXVzdCB0cnkgdG8gYWxsb2NhdGUgb25lCisgKgorICogQ0hVTktfQUxMT0NfTElNSVRFRCBtZWFucyB0byBvbmx5IHRyeSBhbmQgYWxsb2NhdGUgb25lCisgKiBpZiB3ZSBoYXZlIHZlcnkgZmV3IGNodW5rcyBhbHJlYWR5IGFsbG9jYXRlZC4gIFRoaXMgaXMKKyAqIHVzZWQgYXMgcGFydCBvZiB0aGUgY2x1c3RlcmluZyBjb2RlIHRvIGhlbHAgbWFrZSBzdXJlCisgKiB3ZSBoYXZlIGEgZ29vZCBwb29sIG9mIHN0b3JhZ2UgdG8gY2x1c3RlciBpbiwgd2l0aG91dAorICogZmlsbGluZyB0aGUgRlMgd2l0aCBlbXB0eSBjaHVua3MKKyAqCisgKi8KK2VudW0geworCUNIVU5LX0FMTE9DX05PX0ZPUkNFID0gMCwKKwlDSFVOS19BTExPQ19GT1JDRSA9IDEsCisJQ0hVTktfQUxMT0NfTElNSVRFRCA9IDIsCit9OworCiBzdGF0aWMgaW50IHVwZGF0ZV9ibG9ja19ncm91cChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCSAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJICAgICAgdTY0IGJ5dGVuciwgdTY0IG51bV9ieXRlcywgaW50IGFsbG9jKTsKQEAgLTMwMTksNyArMzAzOCw4IEBACiAJZm91bmQtPmJ5dGVzX3JlYWRvbmx5ID0gMDsKIAlmb3VuZC0+Ynl0ZXNfbWF5X3VzZSA9IDA7CiAJZm91bmQtPmZ1bGwgPSAwOwotCWZvdW5kLT5mb3JjZV9hbGxvYyA9IDA7CisJZm91bmQtPmZvcmNlX2FsbG9jID0gQ0hVTktfQUxMT0NfTk9fRk9SQ0U7CisJZm91bmQtPmNodW5rX2FsbG9jID0gMDsKIAkqc3BhY2VfaW5mbyA9IGZvdW5kOwogCWxpc3RfYWRkX3JjdSgmZm91bmQtPmxpc3QsICZpbmZvLT5zcGFjZV9pbmZvKTsKIAlhdG9taWNfc2V0KCZmb3VuZC0+Y2FjaGluZ190aHJlYWRzLCAwKTsKQEAgLTMxNTAsNyArMzE3MCw3IEBACiAJCWlmICghZGF0YV9zaW5mby0+ZnVsbCAmJiBhbGxvY19jaHVuaykgewogCQkJdTY0IGFsbG9jX3RhcmdldDsKIAotCQkJZGF0YV9zaW5mby0+Zm9yY2VfYWxsb2MgPSAxOworCQkJZGF0YV9zaW5mby0+Zm9yY2VfYWxsb2MgPSBDSFVOS19BTExPQ19GT1JDRTsKIAkJCXNwaW5fdW5sb2NrKCZkYXRhX3NpbmZvLT5sb2NrKTsKIGFsbG9jOgogCQkJYWxsb2NfdGFyZ2V0ID0gYnRyZnNfZ2V0X2FsbG9jX3Byb2ZpbGUocm9vdCwgMSk7CkBAIC0zMTYwLDcgKzMxODAsOCBAQAogCiAJCQlyZXQgPSBkb19jaHVua19hbGxvYyh0cmFucywgcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3QsCiAJCQkJCSAgICAgYnl0ZXMgKyAyICogMTAyNCAqIDEwMjQsCi0JCQkJCSAgICAgYWxsb2NfdGFyZ2V0LCAwKTsKKwkJCQkJICAgICBhbGxvY190YXJnZXQsCisJCQkJCSAgICAgQ0hVTktfQUxMT0NfTk9fRk9SQ0UpOwogCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJCWlmIChyZXQgPCAwKSB7CiAJCQkJaWYgKHJldCAhPSAtRU5PU1BDKQpAQCAtMzIzOSwzMSArMzI2MCw1NiBAQAogCXJjdV9yZWFkX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShmb3VuZCwgaGVhZCwgbGlzdCkgewogCQlpZiAoZm91bmQtPmZsYWdzICYgQlRSRlNfQkxPQ0tfR1JPVVBfTUVUQURBVEEpCi0JCQlmb3VuZC0+Zm9yY2VfYWxsb2MgPSAxOworCQkJZm91bmQtPmZvcmNlX2FsbG9jID0gQ0hVTktfQUxMT0NfRk9SQ0U7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiBzdGF0aWMgaW50IHNob3VsZF9hbGxvY19jaHVuayhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKLQkJCSAgICAgIHN0cnVjdCBidHJmc19zcGFjZV9pbmZvICpzaW5mbywgdTY0IGFsbG9jX2J5dGVzKQorCQkJICAgICAgc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKnNpbmZvLCB1NjQgYWxsb2NfYnl0ZXMsCisJCQkgICAgICBpbnQgZm9yY2UpCiB7CiAJdTY0IG51bV9ieXRlcyA9IHNpbmZvLT50b3RhbF9ieXRlcyAtIHNpbmZvLT5ieXRlc19yZWFkb25seTsKKwl1NjQgbnVtX2FsbG9jYXRlZCA9IHNpbmZvLT5ieXRlc191c2VkICsgc2luZm8tPmJ5dGVzX3Jlc2VydmVkOwogCXU2NCB0aHJlc2g7CiAKLQlpZiAoc2luZm8tPmJ5dGVzX3VzZWQgKyBzaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQgKwotCSAgICBhbGxvY19ieXRlcyArIDI1NiAqIDEwMjQgKiAxMDI0IDwgbnVtX2J5dGVzKQorCWlmIChmb3JjZSA9PSBDSFVOS19BTExPQ19GT1JDRSkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIGluIGxpbWl0ZWQgbW9kZSwgd2Ugd2FudCB0byBoYXZlIHNvbWUgZnJlZSBzcGFjZSB1cCB0bworCSAqIGFib3V0IDElIG9mIHRoZSBGUyBzaXplLgorCSAqLworCWlmIChmb3JjZSA9PSBDSFVOS19BTExPQ19MSU1JVEVEKSB7CisJCXRocmVzaCA9IGJ0cmZzX3N1cGVyX3RvdGFsX2J5dGVzKCZyb290LT5mc19pbmZvLT5zdXBlcl9jb3B5KTsKKwkJdGhyZXNoID0gbWF4X3QodTY0LCA2NCAqIDEwMjQgKiAxMDI0LAorCQkJICAgICAgIGRpdl9mYWN0b3JfZmluZSh0aHJlc2gsIDEpKTsKKworCQlpZiAobnVtX2J5dGVzIC0gbnVtX2FsbG9jYXRlZCA8IHRocmVzaCkKKwkJCXJldHVybiAxOworCX0KKworCS8qCisJICogd2UgaGF2ZSB0d28gc2ltaWxhciBjaGVja3MgaGVyZSwgb25lIGJhc2VkIG9uIHBlcmNlbnRhZ2UKKwkgKiBhbmQgb25jZSBiYXNlZCBvbiBhIGhhcmQgbnVtYmVyIG9mIDI1Nk1CLiAgVGhlIGlkZWEKKwkgKiBpcyB0aGF0IGlmIHdlIGhhdmUgYSBnb29kIGFtb3VudCBvZiBmcmVlCisJICogcm9vbSwgZG9uJ3QgYWxsb2NhdGUgYSBjaHVuay4gIEEgZ29vZCBtb3VudCBpcworCSAqIGxlc3MgdGhhbiA4MCUgdXRpbGl6ZWQgb2YgdGhlIGNodW5rcyB3ZSBoYXZlIGFsbG9jYXRlZCwKKwkgKiBvciBtb3JlIHRoYW4gMjU2TUIgZnJlZQorCSAqLworCWlmIChudW1fYWxsb2NhdGVkICsgYWxsb2NfYnl0ZXMgKyAyNTYgKiAxMDI0ICogMTAyNCA8IG51bV9ieXRlcykKIAkJcmV0dXJuIDA7CiAKLQlpZiAoc2luZm8tPmJ5dGVzX3VzZWQgKyBzaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQgKwotCSAgICBhbGxvY19ieXRlcyA8IGRpdl9mYWN0b3IobnVtX2J5dGVzLCA4KSkKKwlpZiAobnVtX2FsbG9jYXRlZCArIGFsbG9jX2J5dGVzIDwgZGl2X2ZhY3RvcihudW1fYnl0ZXMsIDgpKQogCQlyZXR1cm4gMDsKIAogCXRocmVzaCA9IGJ0cmZzX3N1cGVyX3RvdGFsX2J5dGVzKCZyb290LT5mc19pbmZvLT5zdXBlcl9jb3B5KTsKKworCS8qIDI1Nk1CIG9yIDUlIG9mIHRoZSBGUyAqLwogCXRocmVzaCA9IG1heF90KHU2NCwgMjU2ICogMTAyNCAqIDEwMjQsIGRpdl9mYWN0b3JfZmluZSh0aHJlc2gsIDUpKTsKIAogCWlmIChudW1fYnl0ZXMgPiB0aHJlc2ggJiYgc2luZm8tPmJ5dGVzX3VzZWQgPCBkaXZfZmFjdG9yKG51bV9ieXRlcywgMykpCiAJCXJldHVybiAwOwotCiAJcmV0dXJuIDE7CiB9CiAKQEAgLTMyNzMsMTAgKzMzMTksOSBAQAogewogCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICpzcGFjZV9pbmZvOwogCXN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvID0gZXh0ZW50X3Jvb3QtPmZzX2luZm87CisJaW50IHdhaXRfZm9yX2FsbG9jID0gMDsKIAlpbnQgcmV0ID0gMDsKIAotCW11dGV4X2xvY2soJmZzX2luZm8tPmNodW5rX211dGV4KTsKLQogCWZsYWdzID0gYnRyZnNfcmVkdWNlX2FsbG9jX3Byb2ZpbGUoZXh0ZW50X3Jvb3QsIGZsYWdzKTsKIAogCXNwYWNlX2luZm8gPSBfX2ZpbmRfc3BhY2VfaW5mbyhleHRlbnRfcm9vdC0+ZnNfaW5mbywgZmxhZ3MpOwpAQCAtMzI4NywyMSArMzMzMiw0MCBAQAogCX0KIAlCVUdfT04oIXNwYWNlX2luZm8pOwogCithZ2FpbjoKIAlzcGluX2xvY2soJnNwYWNlX2luZm8tPmxvY2spOwogCWlmIChzcGFjZV9pbmZvLT5mb3JjZV9hbGxvYykKLQkJZm9yY2UgPSAxOworCQlmb3JjZSA9IHNwYWNlX2luZm8tPmZvcmNlX2FsbG9jOwogCWlmIChzcGFjZV9pbmZvLT5mdWxsKSB7CiAJCXNwaW5fdW5sb2NrKCZzcGFjZV9pbmZvLT5sb2NrKTsKLQkJZ290byBvdXQ7CisJCXJldHVybiAwOwogCX0KIAotCWlmICghZm9yY2UgJiYgIXNob3VsZF9hbGxvY19jaHVuayhleHRlbnRfcm9vdCwgc3BhY2VfaW5mbywKLQkJCQkJICBhbGxvY19ieXRlcykpIHsKKwlpZiAoIXNob3VsZF9hbGxvY19jaHVuayhleHRlbnRfcm9vdCwgc3BhY2VfaW5mbywgYWxsb2NfYnl0ZXMsIGZvcmNlKSkgewogCQlzcGluX3VubG9jaygmc3BhY2VfaW5mby0+bG9jayk7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKHNwYWNlX2luZm8tPmNodW5rX2FsbG9jKSB7CisJCXdhaXRfZm9yX2FsbG9jID0gMTsKKwl9IGVsc2UgeworCQlzcGFjZV9pbmZvLT5jaHVua19hbGxvYyA9IDE7CiAJfQorCiAJc3Bpbl91bmxvY2soJnNwYWNlX2luZm8tPmxvY2spOwogCisJbXV0ZXhfbG9jaygmZnNfaW5mby0+Y2h1bmtfbXV0ZXgpOworCisJLyoKKwkgKiBUaGUgY2h1bmtfbXV0ZXggaXMgaGVsZCB0aHJvdWdob3V0IHRoZSBlbnRpcmV0eSBvZiBhIGNodW5rCisJICogYWxsb2NhdGlvbiwgc28gb25jZSB3ZSd2ZSBhY3F1aXJlZCB0aGUgY2h1bmtfbXV0ZXggd2Uga25vdyB0aGF0IHRoZQorCSAqIG90aGVyIGd1eSBpcyBkb25lIGFuZCB3ZSBuZWVkIHRvIHJlY2hlY2sgYW5kIHNlZSBpZiB3ZSBzaG91bGQKKwkgKiBhbGxvY2F0ZS4KKwkgKi8KKwlpZiAod2FpdF9mb3JfYWxsb2MpIHsKKwkJbXV0ZXhfdW5sb2NrKCZmc19pbmZvLT5jaHVua19tdXRleCk7CisJCXdhaXRfZm9yX2FsbG9jID0gMDsKKwkJZ290byBhZ2FpbjsKKwl9CisKIAkvKgogCSAqIElmIHdlIGhhdmUgbWl4ZWQgZGF0YS9tZXRhZGF0YSBjaHVua3Mgd2Ugd2FudCB0byBtYWtlIHN1cmUgd2Uga2VlcAogCSAqIGFsbG9jYXRpbmcgbWl4ZWQgY2h1bmtzIGluc3RlYWQgb2YgaW5kaXZpZHVhbCBjaHVua3MuCkBAIC0zMzI3LDkgKzMzOTEsMTAgQEAKIAkJc3BhY2VfaW5mby0+ZnVsbCA9IDE7CiAJZWxzZQogCQlyZXQgPSAxOwotCXNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID0gMDsKKworCXNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID0gQ0hVTktfQUxMT0NfTk9fRk9SQ0U7CisJc3BhY2VfaW5mby0+Y2h1bmtfYWxsb2MgPSAwOwogCXNwaW5fdW5sb2NrKCZzcGFjZV9pbmZvLT5sb2NrKTsKLW91dDoKIAltdXRleF91bmxvY2soJmV4dGVudF9yb290LT5mc19pbmZvLT5jaHVua19tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTUzMDMsMTEgKzUzNjgsMTMgQEAKIAogCQlpZiAoYWxsb3dlZF9jaHVua19hbGxvYykgewogCQkJcmV0ID0gZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QsIG51bV9ieXRlcyArCi0JCQkJCSAgICAgMiAqIDEwMjQgKiAxMDI0LCBkYXRhLCAxKTsKKwkJCQkJICAgICAyICogMTAyNCAqIDEwMjQsIGRhdGEsCisJCQkJCSAgICAgQ0hVTktfQUxMT0NfTElNSVRFRCk7CiAJCQlhbGxvd2VkX2NodW5rX2FsbG9jID0gMDsKIAkJCWRvbmVfY2h1bmtfYWxsb2MgPSAxOwotCQl9IGVsc2UgaWYgKCFkb25lX2NodW5rX2FsbG9jKSB7Ci0JCQlzcGFjZV9pbmZvLT5mb3JjZV9hbGxvYyA9IDE7CisJCX0gZWxzZSBpZiAoIWRvbmVfY2h1bmtfYWxsb2MgJiYKKwkJCSAgIHNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID09IENIVU5LX0FMTE9DX05PX0ZPUkNFKSB7CisJCQlzcGFjZV9pbmZvLT5mb3JjZV9hbGxvYyA9IENIVU5LX0FMTE9DX0xJTUlURUQ7CiAJCX0KIAogCQlpZiAobG9vcCA8IExPT1BfTk9fRU1QVFlfU0laRSkgewpAQCAtNTM5Myw3ICs1NDYwLDggQEAKIAkgKi8KIAlpZiAoZW1wdHlfc2l6ZSB8fCByb290LT5yZWZfY293cykKIAkJcmV0ID0gZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290LAotCQkJCSAgICAgbnVtX2J5dGVzICsgMiAqIDEwMjQgKiAxMDI0LCBkYXRhLCAwKTsKKwkJCQkgICAgIG51bV9ieXRlcyArIDIgKiAxMDI0ICogMTAyNCwgZGF0YSwKKwkJCQkgICAgIENIVU5LX0FMTE9DX05PX0ZPUkNFKTsKIAogCVdBUk5fT04obnVtX2J5dGVzIDwgcm9vdC0+c2VjdG9yc2l6ZSk7CiAJcmV0ID0gZmluZF9mcmVlX2V4dGVudCh0cmFucywgcm9vdCwgbnVtX2J5dGVzLCBlbXB0eV9zaXplLApAQCAtNTQwNSw3ICs1NDczLDcgQEAKIAkJbnVtX2J5dGVzID0gbnVtX2J5dGVzICYgfihyb290LT5zZWN0b3JzaXplIC0gMSk7CiAJCW51bV9ieXRlcyA9IG1heChudW1fYnl0ZXMsIG1pbl9hbGxvY19zaXplKTsKIAkJZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290LAotCQkJICAgICAgIG51bV9ieXRlcywgZGF0YSwgMSk7CisJCQkgICAgICAgbnVtX2J5dGVzLCBkYXRhLCBDSFVOS19BTExPQ19GT1JDRSk7CiAJCWdvdG8gYWdhaW47CiAJfQogCWlmIChyZXQgPT0gLUVOT1NQQyAmJiBidHJmc190ZXN0X29wdChyb290LCBFTk9TUENfREVCVUcpKSB7CkBAIC03OTkxLDYgKzgwNTksMTAgQEAKIAkJCQl1NjQgZ3JvdXBfc3RhcnQgPSBncm91cC0+a2V5Lm9iamVjdGlkOwogCQkJCW5ld19leHRlbnRzID0ga21hbGxvYyhzaXplb2YoKm5ld19leHRlbnRzKSwKIAkJCQkJCSAgICAgIEdGUF9OT0ZTKTsKKwkJCQlpZiAoIW5ld19leHRlbnRzKSB7CisJCQkJCXJldCA9IC1FTk9NRU07CisJCQkJCWdvdG8gb3V0OworCQkJCX0KIAkJCQlucl9leHRlbnRzID0gMTsKIAkJCQlyZXQgPSBnZXRfbmV3X2xvY2F0aW9ucyhyZWxvY19pbm9kZSwKIAkJCQkJCQlleHRlbnRfa2V5LApAQCAtODEwOSwxMyArODE4MSwxNSBAQAogCiAJYWxsb2NfZmxhZ3MgPSB1cGRhdGVfYmxvY2tfZ3JvdXBfZmxhZ3Mocm9vdCwgY2FjaGUtPmZsYWdzKTsKIAlpZiAoYWxsb2NfZmxhZ3MgIT0gY2FjaGUtPmZsYWdzKQotCQlkb19jaHVua19hbGxvYyh0cmFucywgcm9vdCwgMiAqIDEwMjQgKiAxMDI0LCBhbGxvY19mbGFncywgMSk7CisJCWRvX2NodW5rX2FsbG9jKHRyYW5zLCByb290LCAyICogMTAyNCAqIDEwMjQsIGFsbG9jX2ZsYWdzLAorCQkJICAgICAgIENIVU5LX0FMTE9DX0ZPUkNFKTsKIAogCXJldCA9IHNldF9ibG9ja19ncm91cF9ybyhjYWNoZSk7CiAJaWYgKCFyZXQpCiAJCWdvdG8gb3V0OwogCWFsbG9jX2ZsYWdzID0gZ2V0X2FsbG9jX3Byb2ZpbGUocm9vdCwgY2FjaGUtPnNwYWNlX2luZm8tPmZsYWdzKTsKLQlyZXQgPSBkb19jaHVua19hbGxvYyh0cmFucywgcm9vdCwgMiAqIDEwMjQgKiAxMDI0LCBhbGxvY19mbGFncywgMSk7CisJcmV0ID0gZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QsIDIgKiAxMDI0ICogMTAyNCwgYWxsb2NfZmxhZ3MsCisJCQkgICAgIENIVU5LX0FMTE9DX0ZPUkNFKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAJcmV0ID0gc2V0X2Jsb2NrX2dyb3VwX3JvKGNhY2hlKTsKQEAgLTgxMjgsNyArODIwMiw4IEBACiAJCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCB0eXBlKQogewogCXU2NCBhbGxvY19mbGFncyA9IGdldF9hbGxvY19wcm9maWxlKHJvb3QsIHR5cGUpOwotCXJldHVybiBkb19jaHVua19hbGxvYyh0cmFucywgcm9vdCwgMiAqIDEwMjQgKiAxMDI0LCBhbGxvY19mbGFncywgMSk7CisJcmV0dXJuIGRvX2NodW5rX2FsbG9jKHRyYW5zLCByb290LCAyICogMTAyNCAqIDEwMjQsIGFsbG9jX2ZsYWdzLAorCQkJICAgICAgQ0hVTktfQUxMT0NfRk9SQ0UpOwogfQogCiAvKgpAQCAtODc4MSwyMyArODg1NiwzOCBAQAogaW50IGJ0cmZzX2luaXRfc3BhY2VfaW5mbyhzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbykKIHsKIAlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqc3BhY2VfaW5mbzsKKwlzdHJ1Y3QgYnRyZnNfc3VwZXJfYmxvY2sgKmRpc2tfc3VwZXI7CisJdTY0IGZlYXR1cmVzOworCXU2NCBmbGFnczsKKwlpbnQgbWl4ZWQgPSAwOwogCWludCByZXQ7CiAKLQlyZXQgPSB1cGRhdGVfc3BhY2VfaW5mbyhmc19pbmZvLCBCVFJGU19CTE9DS19HUk9VUF9TWVNURU0sIDAsIDAsCi0JCQkJCQkJCSAmc3BhY2VfaW5mbyk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwlkaXNrX3N1cGVyID0gJmZzX2luZm8tPnN1cGVyX2NvcHk7CisJaWYgKCFidHJmc19zdXBlcl9yb290KGRpc2tfc3VwZXIpKQorCQlyZXR1cm4gMTsKIAotCXJldCA9IHVwZGF0ZV9zcGFjZV9pbmZvKGZzX2luZm8sIEJUUkZTX0JMT0NLX0dST1VQX01FVEFEQVRBLCAwLCAwLAotCQkJCQkJCQkgJnNwYWNlX2luZm8pOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJZmVhdHVyZXMgPSBidHJmc19zdXBlcl9pbmNvbXBhdF9mbGFncyhkaXNrX3N1cGVyKTsKKwlpZiAoZmVhdHVyZXMgJiBCVFJGU19GRUFUVVJFX0lOQ09NUEFUX01JWEVEX0dST1VQUykKKwkJbWl4ZWQgPSAxOwogCi0JcmV0ID0gdXBkYXRlX3NwYWNlX2luZm8oZnNfaW5mbywgQlRSRlNfQkxPQ0tfR1JPVVBfREFUQSwgMCwgMCwKLQkJCQkJCQkJICZzcGFjZV9pbmZvKTsKKwlmbGFncyA9IEJUUkZTX0JMT0NLX0dST1VQX1NZU1RFTTsKKwlyZXQgPSB1cGRhdGVfc3BhY2VfaW5mbyhmc19pbmZvLCBmbGFncywgMCwgMCwgJnNwYWNlX2luZm8pOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0OwogCisJaWYgKG1peGVkKSB7CisJCWZsYWdzID0gQlRSRlNfQkxPQ0tfR1JPVVBfTUVUQURBVEEgfCBCVFJGU19CTE9DS19HUk9VUF9EQVRBOworCQlyZXQgPSB1cGRhdGVfc3BhY2VfaW5mbyhmc19pbmZvLCBmbGFncywgMCwgMCwgJnNwYWNlX2luZm8pOworCX0gZWxzZSB7CisJCWZsYWdzID0gQlRSRlNfQkxPQ0tfR1JPVVBfTUVUQURBVEE7CisJCXJldCA9IHVwZGF0ZV9zcGFjZV9pbmZvKGZzX2luZm8sIGZsYWdzLCAwLCAwLCAmc3BhY2VfaW5mbyk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKworCQlmbGFncyA9IEJUUkZTX0JMT0NLX0dST1VQX0RBVEE7CisJCXJldCA9IHVwZGF0ZV9zcGFjZV9pbmZvKGZzX2luZm8sIGZsYWdzLCAwLCAwLCAmc3BhY2VfaW5mbyk7CisJfQorb3V0OgogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudF9pby5jIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKaW5kZXggMjBkZGIyOC4uYmE0MWRhNSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X2lvLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKQEAgLTY5MCw2ICs2OTAsMTUgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHVuY2FjaGVfc3RhdGUoc3RydWN0IGV4dGVudF9zdGF0ZSAqKmNhY2hlZF9wdHIpCit7CisJaWYgKGNhY2hlZF9wdHIgJiYgKCpjYWNoZWRfcHRyKSkgeworCQlzdHJ1Y3QgZXh0ZW50X3N0YXRlICpzdGF0ZSA9ICpjYWNoZWRfcHRyOworCQkqY2FjaGVkX3B0ciA9IE5VTEw7CisJCWZyZWVfZXh0ZW50X3N0YXRlKHN0YXRlKTsKKwl9Cit9CisKIC8qCiAgKiBzZXQgc29tZSBiaXRzIG9uIGEgcmFuZ2UgaW4gdGhlIHRyZWUuICBUaGlzIG1heSByZXF1aXJlIGFsbG9jYXRpb25zIG9yCiAgKiBzbGVlcGluZywgc28gdGhlIGdmcCBtYXNrIGlzIHVzZWQgdG8gaW5kaWNhdGUgd2hhdCBpcyBhbGxvd2VkLgpAQCAtOTQwLDEwICs5NDksMTAgQEAKIH0KIAogaW50IHNldF9leHRlbnRfdXB0b2RhdGUoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLCB1NjQgc3RhcnQsIHU2NCBlbmQsCi0JCQlnZnBfdCBtYXNrKQorCQkJc3RydWN0IGV4dGVudF9zdGF0ZSAqKmNhY2hlZF9zdGF0ZSwgZ2ZwX3QgbWFzaykKIHsKLQlyZXR1cm4gc2V0X2V4dGVudF9iaXQodHJlZSwgc3RhcnQsIGVuZCwgRVhURU5UX1VQVE9EQVRFLCAwLCBOVUxMLAotCQkJICAgICAgTlVMTCwgbWFzayk7CisJcmV0dXJuIHNldF9leHRlbnRfYml0KHRyZWUsIHN0YXJ0LCBlbmQsIEVYVEVOVF9VUFRPREFURSwgMCwKKwkJCSAgICAgIE5VTEwsIGNhY2hlZF9zdGF0ZSwgbWFzayk7CiB9CiAKIHN0YXRpYyBpbnQgY2xlYXJfZXh0ZW50X3VwdG9kYXRlKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwgdTY0IHN0YXJ0LApAQCAtMTAxMiw4ICsxMDIxLDcgQEAKIAkJCQltYXNrKTsKIH0KIAotaW50IHVubG9ja19leHRlbnQoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLCB1NjQgc3RhcnQsIHU2NCBlbmQsCi0JCSAgZ2ZwX3QgbWFzaykKK2ludCB1bmxvY2tfZXh0ZW50KHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLCBnZnBfdCBtYXNrKQogewogCXJldHVybiBjbGVhcl9leHRlbnRfYml0KHRyZWUsIHN0YXJ0LCBlbmQsIEVYVEVOVF9MT0NLRUQsIDEsIDAsIE5VTEwsCiAJCQkJbWFzayk7CkBAIC0xNzM1LDYgKzE3NDMsOSBAQAogCiAJZG8gewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGJ2ZWMtPmJ2X3BhZ2U7CisJCXN0cnVjdCBleHRlbnRfc3RhdGUgKmNhY2hlZCA9IE5VTEw7CisJCXN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlOworCiAJCXRyZWUgPSAmQlRSRlNfSShwYWdlLT5tYXBwaW5nLT5ob3N0KS0+aW9fdHJlZTsKIAogCQlzdGFydCA9ICgodTY0KXBhZ2UtPmluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQpICsKQEAgLTE3NDksOSArMTc2MCwyMCBAQAogCQlpZiAoKytidmVjIDw9IGJ2ZWNfZW5kKQogCQkJcHJlZmV0Y2h3KCZidmVjLT5idl9wYWdlLT5mbGFncyk7CiAKKwkJc3Bpbl9sb2NrKCZ0cmVlLT5sb2NrKTsKKwkJc3RhdGUgPSBmaW5kX2ZpcnN0X2V4dGVudF9iaXRfc3RhdGUodHJlZSwgc3RhcnQsIEVYVEVOVF9MT0NLRUQpOworCQlpZiAoc3RhdGUgJiYgc3RhdGUtPnN0YXJ0ID09IHN0YXJ0KSB7CisJCQkvKgorCQkJICogdGFrZSBhIHJlZmVyZW5jZSBvbiB0aGUgc3RhdGUsIHVubG9jayB3aWxsIGRyb3AKKwkJCSAqIHRoZSByZWYKKwkJCSAqLworCQkJY2FjaGVfc3RhdGUoc3RhdGUsICZjYWNoZWQpOworCQl9CisJCXNwaW5fdW5sb2NrKCZ0cmVlLT5sb2NrKTsKKwogCQlpZiAodXB0b2RhdGUgJiYgdHJlZS0+b3BzICYmIHRyZWUtPm9wcy0+cmVhZHBhZ2VfZW5kX2lvX2hvb2spIHsKIAkJCXJldCA9IHRyZWUtPm9wcy0+cmVhZHBhZ2VfZW5kX2lvX2hvb2socGFnZSwgc3RhcnQsIGVuZCwKLQkJCQkJCQkgICAgICBOVUxMKTsKKwkJCQkJCQkgICAgICBzdGF0ZSk7CiAJCQlpZiAocmV0KQogCQkJCXVwdG9kYXRlID0gMDsKIAkJfQpAQCAtMTc2NCwxNSArMTc4NiwxNiBAQAogCQkJCQl0ZXN0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKIAkJCQlpZiAoZXJyKQogCQkJCQl1cHRvZGF0ZSA9IDA7CisJCQkJdW5jYWNoZV9zdGF0ZSgmY2FjaGVkKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJfQogCiAJCWlmICh1cHRvZGF0ZSkgewotCQkJc2V0X2V4dGVudF91cHRvZGF0ZSh0cmVlLCBzdGFydCwgZW5kLAorCQkJc2V0X2V4dGVudF91cHRvZGF0ZSh0cmVlLCBzdGFydCwgZW5kLCAmY2FjaGVkLAogCQkJCQkgICAgR0ZQX0FUT01JQyk7CiAJCX0KLQkJdW5sb2NrX2V4dGVudCh0cmVlLCBzdGFydCwgZW5kLCBHRlBfQVRPTUlDKTsKKwkJdW5sb2NrX2V4dGVudF9jYWNoZWQodHJlZSwgc3RhcnQsIGVuZCwgJmNhY2hlZCwgR0ZQX0FUT01JQyk7CiAKIAkJaWYgKHdob2xlX3BhZ2UpIHsKIAkJCWlmICh1cHRvZGF0ZSkgewpAQCAtMTgxMSw2ICsxODM0LDcgQEAKIAogCWRvIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBidmVjLT5idl9wYWdlOworCQlzdHJ1Y3QgZXh0ZW50X3N0YXRlICpjYWNoZWQgPSBOVUxMOwogCQl0cmVlID0gJkJUUkZTX0kocGFnZS0+bWFwcGluZy0+aG9zdCktPmlvX3RyZWU7CiAKIAkJc3RhcnQgPSAoKHU2NClwYWdlLT5pbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZUKSArCkBAIC0xODIxLDEzICsxODQ1LDE0IEBACiAJCQlwcmVmZXRjaHcoJmJ2ZWMtPmJ2X3BhZ2UtPmZsYWdzKTsKIAogCQlpZiAodXB0b2RhdGUpIHsKLQkJCXNldF9leHRlbnRfdXB0b2RhdGUodHJlZSwgc3RhcnQsIGVuZCwgR0ZQX0FUT01JQyk7CisJCQlzZXRfZXh0ZW50X3VwdG9kYXRlKHRyZWUsIHN0YXJ0LCBlbmQsICZjYWNoZWQsCisJCQkJCSAgICBHRlBfQVRPTUlDKTsKIAkJfSBlbHNlIHsKIAkJCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOwogCQkJU2V0UGFnZUVycm9yKHBhZ2UpOwogCQl9CiAKLQkJdW5sb2NrX2V4dGVudCh0cmVlLCBzdGFydCwgZW5kLCBHRlBfQVRPTUlDKTsKKwkJdW5sb2NrX2V4dGVudF9jYWNoZWQodHJlZSwgc3RhcnQsIGVuZCwgJmNhY2hlZCwgR0ZQX0FUT01JQyk7CiAKIAl9IHdoaWxlIChidmVjID49IGJpby0+YmlfaW9fdmVjKTsKIApAQCAtMjAxNiwxNCArMjA0MSwxNyBAQAogCXdoaWxlIChjdXIgPD0gZW5kKSB7CiAJCWlmIChjdXIgPj0gbGFzdF9ieXRlKSB7CiAJCQljaGFyICp1c2VycGFnZTsKKwkJCXN0cnVjdCBleHRlbnRfc3RhdGUgKmNhY2hlZCA9IE5VTEw7CisKIAkJCWlvc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRSAtIHBhZ2Vfb2Zmc2V0OwogCQkJdXNlcnBhZ2UgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CiAJCQltZW1zZXQodXNlcnBhZ2UgKyBwYWdlX29mZnNldCwgMCwgaW9zaXplKTsKIAkJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCQkJa3VubWFwX2F0b21pYyh1c2VycGFnZSwgS01fVVNFUjApOwogCQkJc2V0X2V4dGVudF91cHRvZGF0ZSh0cmVlLCBjdXIsIGN1ciArIGlvc2l6ZSAtIDEsCi0JCQkJCSAgICBHRlBfTk9GUyk7Ci0JCQl1bmxvY2tfZXh0ZW50KHRyZWUsIGN1ciwgY3VyICsgaW9zaXplIC0gMSwgR0ZQX05PRlMpOworCQkJCQkgICAgJmNhY2hlZCwgR0ZQX05PRlMpOworCQkJdW5sb2NrX2V4dGVudF9jYWNoZWQodHJlZSwgY3VyLCBjdXIgKyBpb3NpemUgLSAxLAorCQkJCQkgICAgICZjYWNoZWQsIEdGUF9OT0ZTKTsKIAkJCWJyZWFrOwogCQl9CiAJCWVtID0gZ2V0X2V4dGVudChpbm9kZSwgcGFnZSwgcGFnZV9vZmZzZXQsIGN1ciwKQEAgLTIwNjMsMTQgKzIwOTEsMTcgQEAKIAkJLyogd2UndmUgZm91bmQgYSBob2xlLCBqdXN0IHplcm8gYW5kIGdvIG9uICovCiAJCWlmIChibG9ja19zdGFydCA9PSBFWFRFTlRfTUFQX0hPTEUpIHsKIAkJCWNoYXIgKnVzZXJwYWdlOworCQkJc3RydWN0IGV4dGVudF9zdGF0ZSAqY2FjaGVkID0gTlVMTDsKKwogCQkJdXNlcnBhZ2UgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CiAJCQltZW1zZXQodXNlcnBhZ2UgKyBwYWdlX29mZnNldCwgMCwgaW9zaXplKTsKIAkJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCQkJa3VubWFwX2F0b21pYyh1c2VycGFnZSwgS01fVVNFUjApOwogCiAJCQlzZXRfZXh0ZW50X3VwdG9kYXRlKHRyZWUsIGN1ciwgY3VyICsgaW9zaXplIC0gMSwKLQkJCQkJICAgIEdGUF9OT0ZTKTsKLQkJCXVubG9ja19leHRlbnQodHJlZSwgY3VyLCBjdXIgKyBpb3NpemUgLSAxLCBHRlBfTk9GUyk7CisJCQkJCSAgICAmY2FjaGVkLCBHRlBfTk9GUyk7CisJCQl1bmxvY2tfZXh0ZW50X2NhY2hlZCh0cmVlLCBjdXIsIGN1ciArIGlvc2l6ZSAtIDEsCisJCQkgICAgICAgICAgICAgICAgICAgICAmY2FjaGVkLCBHRlBfTk9GUyk7CiAJCQljdXIgPSBjdXIgKyBpb3NpemU7CiAJCQlwYWdlX29mZnNldCArPSBpb3NpemU7CiAJCQljb250aW51ZTsKQEAgLTI2NTAsNyArMjY4MSw3IEBACiAJCXByZWZldGNodygmcGFnZS0+ZmxhZ3MpOwogCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKIAkJaWYgKCFhZGRfdG9fcGFnZV9jYWNoZV9scnUocGFnZSwgbWFwcGluZywKLQkJCQkJcGFnZS0+aW5kZXgsIEdGUF9LRVJORUwpKSB7CisJCQkJCXBhZ2UtPmluZGV4LCBHRlBfTk9GUykpIHsKIAkJCV9fZXh0ZW50X3JlYWRfZnVsbF9wYWdlKHRyZWUsIHBhZ2UsIGdldF9leHRlbnQsCiAJCQkJCQkmYmlvLCAwLCAmYmlvX2ZsYWdzKTsKIAkJfQpAQCAtMjc4OSw5ICsyODIwLDEyIEBACiAJCQlpb2NvdW50Kys7CiAJCQlibG9ja19zdGFydCA9IGJsb2NrX3N0YXJ0ICsgaW9zaXplOwogCQl9IGVsc2UgewotCQkJc2V0X2V4dGVudF91cHRvZGF0ZSh0cmVlLCBibG9ja19zdGFydCwgY3VyX2VuZCwKKwkJCXN0cnVjdCBleHRlbnRfc3RhdGUgKmNhY2hlZCA9IE5VTEw7CisKKwkJCXNldF9leHRlbnRfdXB0b2RhdGUodHJlZSwgYmxvY2tfc3RhcnQsIGN1cl9lbmQsICZjYWNoZWQsCiAJCQkJCSAgICBHRlBfTk9GUyk7Ci0JCQl1bmxvY2tfZXh0ZW50KHRyZWUsIGJsb2NrX3N0YXJ0LCBjdXJfZW5kLCBHRlBfTk9GUyk7CisJCQl1bmxvY2tfZXh0ZW50X2NhY2hlZCh0cmVlLCBibG9ja19zdGFydCwgY3VyX2VuZCwKKwkJCQkJICAgICAmY2FjaGVkLCBHRlBfTk9GUyk7CiAJCQlibG9ja19zdGFydCA9IGN1cl9lbmQgKyAxOwogCQl9CiAJCXBhZ2Vfb2Zmc2V0ID0gYmxvY2tfc3RhcnQgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CkBAIC0zNDU3LDcgKzM0OTEsNyBAQAogCW51bV9wYWdlcyA9IG51bV9leHRlbnRfcGFnZXMoZWItPnN0YXJ0LCBlYi0+bGVuKTsKIAogCXNldF9leHRlbnRfdXB0b2RhdGUodHJlZSwgZWItPnN0YXJ0LCBlYi0+c3RhcnQgKyBlYi0+bGVuIC0gMSwKLQkJCSAgICBHRlBfTk9GUyk7CisJCQkgICAgTlVMTCwgR0ZQX05PRlMpOwogCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykgewogCQlwYWdlID0gZXh0ZW50X2J1ZmZlcl9wYWdlKGViLCBpKTsKIAkJaWYgKChpID09IDAgJiYgKGViLT5zdGFydCAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKSkpIHx8CkBAIC0zODg1LDYgKzM5MTksMTIgQEAKIAlrdW5tYXBfYXRvbWljKGRzdF9rYWRkciwgS01fVVNFUjApOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgYXJlYXNfb3ZlcmxhcCh1bnNpZ25lZCBsb25nIHNyYywgdW5zaWduZWQgbG9uZyBkc3QsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXVuc2lnbmVkIGxvbmcgZGlzdGFuY2UgPSAoc3JjID4gZHN0KSA/IHNyYyAtIGRzdCA6IGRzdCAtIHNyYzsKKwlyZXR1cm4gZGlzdGFuY2UgPCBsZW47Cit9CisKIHN0YXRpYyB2b2lkIGNvcHlfcGFnZXMoc3RydWN0IHBhZ2UgKmRzdF9wYWdlLCBzdHJ1Y3QgcGFnZSAqc3JjX3BhZ2UsCiAJCSAgICAgICB1bnNpZ25lZCBsb25nIGRzdF9vZmYsIHVuc2lnbmVkIGxvbmcgc3JjX29mZiwKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuKQpAQCAtMzg5MiwxMCArMzkzMiwxMiBAQAogCWNoYXIgKmRzdF9rYWRkciA9IGttYXBfYXRvbWljKGRzdF9wYWdlLCBLTV9VU0VSMCk7CiAJY2hhciAqc3JjX2thZGRyOwogCi0JaWYgKGRzdF9wYWdlICE9IHNyY19wYWdlKQorCWlmIChkc3RfcGFnZSAhPSBzcmNfcGFnZSkgewogCQlzcmNfa2FkZHIgPSBrbWFwX2F0b21pYyhzcmNfcGFnZSwgS01fVVNFUjEpOwotCWVsc2UKKwl9IGVsc2UgewogCQlzcmNfa2FkZHIgPSBkc3Rfa2FkZHI7CisJCUJVR19PTihhcmVhc19vdmVybGFwKHNyY19vZmYsIGRzdF9vZmYsIGxlbikpOworCX0KIAogCW1lbWNweShkc3Rfa2FkZHIgKyBkc3Rfb2ZmLCBzcmNfa2FkZHIgKyBzcmNfb2ZmLCBsZW4pOwogCWt1bm1hcF9hdG9taWMoZHN0X2thZGRyLCBLTV9VU0VSMCk7CkBAIC0zOTcwLDcgKzQwMTIsNyBAQAogCQkgICAgICAgImxlbiAlbHUgbGVuICVsdVxuIiwgZHN0X29mZnNldCwgbGVuLCBkc3QtPmxlbik7CiAJCUJVR19PTigxKTsKIAl9Ci0JaWYgKGRzdF9vZmZzZXQgPCBzcmNfb2Zmc2V0KSB7CisJaWYgKCFhcmVhc19vdmVybGFwKHNyY19vZmZzZXQsIGRzdF9vZmZzZXQsIGxlbikpIHsKIAkJbWVtY3B5X2V4dGVudF9idWZmZXIoZHN0LCBkc3Rfb2Zmc2V0LCBzcmNfb2Zmc2V0LCBsZW4pOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50X2lvLmggYi9mcy9idHJmcy9leHRlbnRfaW8uaAppbmRleCBmNjJjNTQ0Li5hZjJkNzE3IDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnRfaW8uaAorKysgYi9mcy9idHJmcy9leHRlbnRfaW8uaApAQCAtMjA4LDcgKzIwOCw3IEBACiAJCSAgIGludCBiaXRzLCBpbnQgZXhjbHVzaXZlX2JpdHMsIHU2NCAqZmFpbGVkX3N0YXJ0LAogCQkgICBzdHJ1Y3QgZXh0ZW50X3N0YXRlICoqY2FjaGVkX3N0YXRlLCBnZnBfdCBtYXNrKTsKIGludCBzZXRfZXh0ZW50X3VwdG9kYXRlKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLAotCQkJZ2ZwX3QgbWFzayk7CisJCQlzdHJ1Y3QgZXh0ZW50X3N0YXRlICoqY2FjaGVkX3N0YXRlLCBnZnBfdCBtYXNrKTsKIGludCBzZXRfZXh0ZW50X25ldyhzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsIHU2NCBzdGFydCwgdTY0IGVuZCwKIAkJICAgZ2ZwX3QgbWFzayk7CiBpbnQgc2V0X2V4dGVudF9kaXJ0eShzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsIHU2NCBzdGFydCwgdTY0IGVuZCwKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudF9tYXAuYyBiL2ZzL2J0cmZzL2V4dGVudF9tYXAuYwppbmRleCAyYjZjMTJlLi5hMjRhM2YyIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnRfbWFwLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50X21hcC5jCkBAIC0yNDMsNyArMjQzLDcgQEAKICAqIEluc2VydCBAZW0gaW50byBAdHJlZSBvciBwZXJmb3JtIGEgc2ltcGxlIGZvcndhcmQvYmFja3dhcmQgbWVyZ2Ugd2l0aAogICogZXhpc3RpbmcgbWFwcGluZ3MuICBUaGUgZXh0ZW50X21hcCBzdHJ1Y3QgcGFzc2VkIGluIHdpbGwgYmUgaW5zZXJ0ZWQKICAqIGludG8gdGhlIHRyZWUgZGlyZWN0bHksIHdpdGggYW4gYWRkaXRpb25hbCByZWZlcmVuY2UgdGFrZW4sIG9yIGEKLSAqIHJlZmVyZW5jZSBkcm9wcGVkIGlmIHRoZSBtZXJnZSBhdHRlbXB0IHdhcyBzdWNjZXNzZnVsbC4KKyAqIHJlZmVyZW5jZSBkcm9wcGVkIGlmIHRoZSBtZXJnZSBhdHRlbXB0IHdhcyBzdWNjZXNzZnVsLgogICovCiBpbnQgYWRkX2V4dGVudF9tYXBwaW5nKHN0cnVjdCBleHRlbnRfbWFwX3RyZWUgKnRyZWUsCiAJCSAgICAgICBzdHJ1Y3QgZXh0ZW50X21hcCAqZW0pCmRpZmYgLS1naXQgYS9mcy9idHJmcy9maWxlLmMgYi9mcy9idHJmcy9maWxlLmMKaW5kZXggZTYyMWVhNS4uNzU4OTlhMCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZmlsZS5jCisrKyBiL2ZzL2J0cmZzL2ZpbGUuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAvKgogICogdW5sb2NrcyBwYWdlcyBhZnRlciBidHJmc19maWxlX3dyaXRlIGlzIGRvbmUgd2l0aCB0aGVtCiAgKi8KLXN0YXRpYyBub2lubGluZSB2b2lkIGJ0cmZzX2Ryb3BfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgc2l6ZV90IG51bV9wYWdlcykKK3ZvaWQgYnRyZnNfZHJvcF9wYWdlcyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzaXplX3QgbnVtX3BhZ2VzKQogewogCXNpemVfdCBpOwogCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykgewpAQCAtMTI3LDE2ICsxMjcsMTMgQEAKICAqIHRoaXMgYWxzbyBtYWtlcyB0aGUgZGVjaXNpb24gYWJvdXQgY3JlYXRpbmcgYW4gaW5saW5lIGV4dGVudCB2cwogICogZG9pbmcgcmVhbCBkYXRhIGV4dGVudHMsIG1hcmtpbmcgcGFnZXMgZGlydHkgYW5kIGRlbGFsbG9jIGFzIHJlcXVpcmVkLgogICovCi1zdGF0aWMgbm9pbmxpbmUgaW50IGRpcnR5X2FuZF9yZWxlYXNlX3BhZ2VzKHN0cnVjdCBidHJmc19yb290ICpyb290LAotCQkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJCSAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAotCQkJCQkgICAgc2l6ZV90IG51bV9wYWdlcywKLQkJCQkJICAgIGxvZmZfdCBwb3MsCi0JCQkJCSAgICBzaXplX3Qgd3JpdGVfYnl0ZXMpCitpbnQgYnRyZnNfZGlydHlfcGFnZXMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCSAgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHNpemVfdCBudW1fcGFnZXMsCisJCSAgICAgIGxvZmZfdCBwb3MsIHNpemVfdCB3cml0ZV9ieXRlcywKKwkJICAgICAgc3RydWN0IGV4dGVudF9zdGF0ZSAqKmNhY2hlZCkKIHsKIAlpbnQgZXJyID0gMDsKIAlpbnQgaTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmRlbnRyeShmaWxlKS0+ZF9pbm9kZTsKIAl1NjQgbnVtX2J5dGVzOwogCXU2NCBzdGFydF9wb3M7CiAJdTY0IGVuZF9vZl9sYXN0X2Jsb2NrOwpAQCAtMTQ5LDcgKzE0Niw3IEBACiAKIAllbmRfb2ZfbGFzdF9ibG9jayA9IHN0YXJ0X3BvcyArIG51bV9ieXRlcyAtIDE7CiAJZXJyID0gYnRyZnNfc2V0X2V4dGVudF9kZWxhbGxvYyhpbm9kZSwgc3RhcnRfcG9zLCBlbmRfb2ZfbGFzdF9ibG9jaywKLQkJCQkJTlVMTCk7CisJCQkJCWNhY2hlZCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtOTkyLDkgKzk4OSw5IEBACiAJCX0KIAogCQlpZiAoY29waWVkID4gMCkgewotCQkJcmV0ID0gZGlydHlfYW5kX3JlbGVhc2VfcGFnZXMocm9vdCwgZmlsZSwgcGFnZXMsCi0JCQkJCQkgICAgICBkaXJ0eV9wYWdlcywgcG9zLAotCQkJCQkJICAgICAgY29waWVkKTsKKwkJCXJldCA9IGJ0cmZzX2RpcnR5X3BhZ2VzKHJvb3QsIGlub2RlLCBwYWdlcywKKwkJCQkJCWRpcnR5X3BhZ2VzLCBwb3MsIGNvcGllZCwKKwkJCQkJCU5VTEwpOwogCQkJaWYgKHJldCkgewogCQkJCWJ0cmZzX2RlbGFsbG9jX3JlbGVhc2Vfc3BhY2UoaW5vZGUsCiAJCQkJCWRpcnR5X3BhZ2VzIDw8IFBBR0VfQ0FDSEVfU0hJRlQpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jIGIvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCmluZGV4IGY1NjFjOTUuLjYzNzMxYTEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYworKysgYi9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKQEAgLTUwOCw2ICs1MDgsNyBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IHJiX25vZGUgKm5vZGU7CiAJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqbjsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCXN0cnVjdCBleHRlbnRfc3RhdGUgKmNhY2hlZF9zdGF0ZSA9IE5VTEw7CiAJc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciAqY2x1c3RlciA9IE5VTEw7CkBAIC01MTcsMTMgKzUxOCwxMyBAQAogCXU2NCBzdGFydCwgZW5kLCBsZW47CiAJdTY0IGJ5dGVzID0gMDsKIAl1MzIgKmNyYywgKmNoZWNrc3VtczsKLQlwZ29mZl90IGluZGV4ID0gMCwgbGFzdF9pbmRleCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmaXJzdF9wYWdlX29mZnNldDsKLQlpbnQgbnVtX2NoZWNrc3VtczsKKwlpbnQgaW5kZXggPSAwLCBudW1fcGFnZXMgPSAwOwogCWludCBlbnRyaWVzID0gMDsKIAlpbnQgYml0bWFwcyA9IDA7CiAJaW50IHJldCA9IDA7CiAJYm9vbCBuZXh0X3BhZ2UgPSBmYWxzZTsKKwlib29sIG91dF9vZl9zcGFjZSA9IGZhbHNlOwogCiAJcm9vdCA9IHJvb3QtPmZzX2luZm8tPnRyZWVfcm9vdDsKIApAQCAtNTUxLDI0ICs1NTIsMzEgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JbGFzdF9pbmRleCA9IChpX3NpemVfcmVhZChpbm9kZSkgLSAxKSA+PiBQQUdFX0NBQ0hFX1NISUZUOworCW51bV9wYWdlcyA9IChpX3NpemVfcmVhZChpbm9kZSkgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PgorCQlQQUdFX0NBQ0hFX1NISUZUOwogCWZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoaW5vZGUtPmlfbWFwcGluZyk7CiAJYnRyZnNfd2FpdF9vcmRlcmVkX3JhbmdlKGlub2RlLCBpbm9kZS0+aV9zaXplICYKIAkJCQkgfihyb290LT5zZWN0b3JzaXplIC0gMSksICh1NjQpLTEpOwogCiAJLyogV2UgbmVlZCBhIGNoZWNrc3VtIHBlciBwYWdlLiAqLwotCW51bV9jaGVja3N1bXMgPSBpX3NpemVfcmVhZChpbm9kZSkgLyBQQUdFX0NBQ0hFX1NJWkU7Ci0JY3JjID0gY2hlY2tzdW1zICA9IGt6YWxsb2Moc2l6ZW9mKHUzMikgKiBudW1fY2hlY2tzdW1zLCBHRlBfTk9GUyk7CisJY3JjID0gY2hlY2tzdW1zID0ga3phbGxvYyhzaXplb2YodTMyKSAqIG51bV9wYWdlcywgR0ZQX05PRlMpOwogCWlmICghY3JjKSB7CiAJCWlwdXQoaW5vZGUpOwogCQlyZXR1cm4gMDsKIAl9CiAKKwlwYWdlcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwYWdlICopICogbnVtX3BhZ2VzLCBHRlBfTk9GUyk7CisJaWYgKCFwYWdlcykgeworCQlrZnJlZShjcmMpOworCQlpcHV0KGlub2RlKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJLyogU2luY2UgdGhlIGZpcnN0IHBhZ2UgaGFzIGFsbCBvZiBvdXIgY2hlY2tzdW1zIGFuZCBvdXIgZ2VuZXJhdGlvbiB3ZQogCSAqIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBvZmZzZXQgaW50byB0aGUgcGFnZSB0aGF0IHdlIGNhbiBzdGFydCB3cml0aW5nCiAJICogb3VyIGVudHJpZXMuCiAJICovCi0JZmlyc3RfcGFnZV9vZmZzZXQgPSAoc2l6ZW9mKHUzMikgKiBudW1fY2hlY2tzdW1zKSArIHNpemVvZih1NjQpOworCWZpcnN0X3BhZ2Vfb2Zmc2V0ID0gKHNpemVvZih1MzIpICogbnVtX3BhZ2VzKSArIHNpemVvZih1NjQpOwogCiAJLyogR2V0IHRoZSBjbHVzdGVyIGZvciB0aGlzIGJsb2NrX2dyb3VwIGlmIGl0IGV4aXN0cyAqLwogCWlmICghbGlzdF9lbXB0eSgmYmxvY2tfZ3JvdXAtPmNsdXN0ZXJfbGlzdCkpCkBAIC01OTAsMjAgKzU5OCwxOCBAQAogCSAqIGFmdGVyIGZpbmRfZ2V0X3BhZ2UgYXQgdGhpcyBwb2ludC4gIEp1c3QgcHV0dGluZyB0aGlzIGhlcmUgc28gcGVvcGxlCiAJICoga25vdyBhbmQgZG9uJ3QgZnJlYWsgb3V0LgogCSAqLwotCXdoaWxlIChpbmRleCA8PSBsYXN0X2luZGV4KSB7CisJd2hpbGUgKGluZGV4IDwgbnVtX3BhZ2VzKSB7CiAJCXBhZ2UgPSBncmFiX2NhY2hlX3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgaW5kZXgpOwogCQlpZiAoIXBhZ2UpIHsKLQkJCXBnb2ZmX3QgaSA9IDA7CisJCQlpbnQgaTsKIAotCQkJd2hpbGUgKGkgPCBpbmRleCkgewotCQkJCXBhZ2UgPSBmaW5kX2dldF9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGkpOwotCQkJCXVubG9ja19wYWdlKHBhZ2UpOwotCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQkJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JCQkJaSsrOworCQkJZm9yIChpID0gMDsgaSA8IG51bV9wYWdlczsgaSsrKSB7CisJCQkJdW5sb2NrX3BhZ2UocGFnZXNbaV0pOworCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlc1tpXSk7CiAJCQl9CiAJCQlnb3RvIG91dF9mcmVlOwogCQl9CisJCXBhZ2VzW2luZGV4XSA9IHBhZ2U7CiAJCWluZGV4Kys7CiAJfQogCkBAIC02MzEsNyArNjM3LDEyIEBACiAJCQlvZmZzZXQgPSBzdGFydF9vZmZzZXQ7CiAJCX0KIAotCQlwYWdlID0gZmluZF9nZXRfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpbmRleCk7CisJCWlmIChpbmRleCA+PSBudW1fcGFnZXMpIHsKKwkJCW91dF9vZl9zcGFjZSA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCisJCXBhZ2UgPSBwYWdlc1tpbmRleF07CiAKIAkJYWRkciA9IGttYXAocGFnZSk7CiAJCWVudHJ5ID0gYWRkciArIHN0YXJ0X29mZnNldDsKQEAgLTcwOCwyMyArNzE5LDYgQEAKIAogCQlieXRlcyArPSBQQUdFX0NBQ0hFX1NJWkU7CiAKLQkJQ2xlYXJQYWdlQ2hlY2tlZChwYWdlKTsKLQkJc2V0X3BhZ2VfZXh0ZW50X21hcHBlZChwYWdlKTsKLQkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwotCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKLQotCQkvKgotCQkgKiBXZSBuZWVkIHRvIHJlbGVhc2Ugb3VyIHJlZmVyZW5jZSB3ZSBnb3QgZm9yIGdyYWJfY2FjaGVfcGFnZSwKLQkJICogZXhjZXB0IGZvciB0aGUgZmlyc3QgcGFnZSB3aGljaCB3aWxsIGhvbGQgb3VyIGNoZWNrc3Vtcywgd2UKLQkJICogZG8gdGhhdCBiZWxvdy4KLQkJICovCi0JCWlmIChpbmRleCAhPSAwKSB7Ci0JCQl1bmxvY2tfcGFnZShwYWdlKTsKLQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQkJfQotCi0JCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQogCQlpbmRleCsrOwogCX0gd2hpbGUgKG5vZGUgfHwgbmV4dF9wYWdlKTsKIApAQCAtNzM0LDcgKzcyOCwxMSBAQAogCQlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqZW50cnkgPQogCQkJbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlLCBsaXN0KTsKIAotCQlwYWdlID0gZmluZF9nZXRfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpbmRleCk7CisJCWlmIChpbmRleCA+PSBudW1fcGFnZXMpIHsKKwkJCW91dF9vZl9zcGFjZSA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCQlwYWdlID0gcGFnZXNbaW5kZXhdOwogCiAJCWFkZHIgPSBrbWFwKHBhZ2UpOwogCQltZW1jcHkoYWRkciwgZW50cnktPmJpdG1hcCwgUEFHRV9DQUNIRV9TSVpFKTsKQEAgLTc0NSw2NCArNzQzLDU4IEBACiAJCWNyYysrOwogCQlieXRlcyArPSBQQUdFX0NBQ0hFX1NJWkU7CiAKLQkJQ2xlYXJQYWdlQ2hlY2tlZChwYWdlKTsKLQkJc2V0X3BhZ2VfZXh0ZW50X21hcHBlZChwYWdlKTsKLQkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwotCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKLQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCQlsaXN0X2RlbF9pbml0KCZlbnRyeS0+bGlzdCk7CiAJCWluZGV4Kys7CiAJfQogCisJaWYgKG91dF9vZl9zcGFjZSkgeworCQlidHJmc19kcm9wX3BhZ2VzKHBhZ2VzLCBudW1fcGFnZXMpOworCQl1bmxvY2tfZXh0ZW50X2NhY2hlZCgmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsIDAsCisJCQkJICAgICBpX3NpemVfcmVhZChpbm9kZSkgLSAxLCAmY2FjaGVkX3N0YXRlLAorCQkJCSAgICAgR0ZQX05PRlMpOworCQlyZXQgPSAwOworCQlnb3RvIG91dF9mcmVlOworCX0KKwogCS8qIFplcm8gb3V0IHRoZSByZXN0IG9mIHRoZSBwYWdlcyBqdXN0IHRvIG1ha2Ugc3VyZSAqLwotCXdoaWxlIChpbmRleCA8PSBsYXN0X2luZGV4KSB7CisJd2hpbGUgKGluZGV4IDwgbnVtX3BhZ2VzKSB7CiAJCXZvaWQgKmFkZHI7CiAKLQkJcGFnZSA9IGZpbmRfZ2V0X3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgaW5kZXgpOwotCisJCXBhZ2UgPSBwYWdlc1tpbmRleF07CiAJCWFkZHIgPSBrbWFwKHBhZ2UpOwogCQltZW1zZXQoYWRkciwgMCwgUEFHRV9DQUNIRV9TSVpFKTsKIAkJa3VubWFwKHBhZ2UpOwotCQlDbGVhclBhZ2VDaGVja2VkKHBhZ2UpOwotCQlzZXRfcGFnZV9leHRlbnRfbWFwcGVkKHBhZ2UpOwotCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7Ci0JCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwotCQl1bmxvY2tfcGFnZShwYWdlKTsKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJCWJ5dGVzICs9IFBBR0VfQ0FDSEVfU0laRTsKIAkJaW5kZXgrKzsKIAl9CiAKLQlidHJmc19zZXRfZXh0ZW50X2RlbGFsbG9jKGlub2RlLCAwLCBieXRlcyAtIDEsICZjYWNoZWRfc3RhdGUpOwotCiAJLyogV3JpdGUgdGhlIGNoZWNrc3VtcyBhbmQgdHJhbnMgaWQgdG8gdGhlIGZpcnN0IHBhZ2UgKi8KIAl7CiAJCXZvaWQgKmFkZHI7CiAJCXU2NCAqZ2VuOwogCi0JCXBhZ2UgPSBmaW5kX2dldF9wYWdlKGlub2RlLT5pX21hcHBpbmcsIDApOworCQlwYWdlID0gcGFnZXNbMF07CiAKIAkJYWRkciA9IGttYXAocGFnZSk7Ci0JCW1lbWNweShhZGRyLCBjaGVja3N1bXMsIHNpemVvZih1MzIpICogbnVtX2NoZWNrc3Vtcyk7Ci0JCWdlbiA9IGFkZHIgKyAoc2l6ZW9mKHUzMikgKiBudW1fY2hlY2tzdW1zKTsKKwkJbWVtY3B5KGFkZHIsIGNoZWNrc3Vtcywgc2l6ZW9mKHUzMikgKiBudW1fcGFnZXMpOworCQlnZW4gPSBhZGRyICsgKHNpemVvZih1MzIpICogbnVtX3BhZ2VzKTsKIAkJKmdlbiA9IHRyYW5zLT50cmFuc2lkOwogCQlrdW5tYXAocGFnZSk7Ci0JCUNsZWFyUGFnZUNoZWNrZWQocGFnZSk7Ci0JCXNldF9wYWdlX2V4dGVudF9tYXBwZWQocGFnZSk7Ci0JCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKLQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7Ci0JCXVubG9ja19wYWdlKHBhZ2UpOwotCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAl9Ci0JQlRSRlNfSShpbm9kZSktPmdlbmVyYXRpb24gPSB0cmFucy0+dHJhbnNpZDsKIAorCXJldCA9IGJ0cmZzX2RpcnR5X3BhZ2VzKHJvb3QsIGlub2RlLCBwYWdlcywgbnVtX3BhZ2VzLCAwLAorCQkJCQkgICAgYnl0ZXMsICZjYWNoZWRfc3RhdGUpOworCWJ0cmZzX2Ryb3BfcGFnZXMocGFnZXMsIG51bV9wYWdlcyk7CiAJdW5sb2NrX2V4dGVudF9jYWNoZWQoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLCAwLAogCQkJICAgICBpX3NpemVfcmVhZChpbm9kZSkgLSAxLCAmY2FjaGVkX3N0YXRlLCBHRlBfTk9GUyk7CiAKKwlpZiAocmV0KSB7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJQlRSRlNfSShpbm9kZSktPmdlbmVyYXRpb24gPSB0cmFucy0+dHJhbnNpZDsKKwogCWZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoaW5vZGUtPmlfbWFwcGluZyk7CiAKIAlrZXkub2JqZWN0aWQgPSBCVFJGU19GUkVFX1NQQUNFX09CSkVDVElEOwpAQCAtODUzLDYgKzg0NSw3IEBACiAJCUJUUkZTX0koaW5vZGUpLT5nZW5lcmF0aW9uID0gMDsKIAl9CiAJa2ZyZWUoY2hlY2tzdW1zKTsKKwlrZnJlZShwYWdlcyk7CiAJYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7CiAJaXB1dChpbm9kZSk7CiAJcmV0dXJuIHJldDsKQEAgLTE3NzUsMTAgKzE3NjgsMTMgQEAKIAogCXdoaWxlICgobm9kZSA9IHJiX2xhc3QoJmJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX29mZnNldCkpICE9IE5VTEwpIHsKIAkJaW5mbyA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlLCBvZmZzZXRfaW5kZXgpOwotCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgaW5mbyk7Ci0JCWlmIChpbmZvLT5iaXRtYXApCi0JCQlrZnJlZShpbmZvLT5iaXRtYXApOwotCQlrbWVtX2NhY2hlX2ZyZWUoYnRyZnNfZnJlZV9zcGFjZV9jYWNoZXAsIGluZm8pOworCQlpZiAoIWluZm8tPmJpdG1hcCkgeworCQkJdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGluZm8pOworCQkJa21lbV9jYWNoZV9mcmVlKGJ0cmZzX2ZyZWVfc3BhY2VfY2FjaGVwLCBpbmZvKTsKKwkJfSBlbHNlIHsKKwkJCWZyZWVfYml0bWFwKGJsb2NrX2dyb3VwLCBpbmZvKTsKKwkJfQorCiAJCWlmIChuZWVkX3Jlc2NoZWQoKSkgewogCQkJc3Bpbl91bmxvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOwogCQkJY29uZF9yZXNjaGVkKCk7CkBAIC0yMzA4LDcgKzIzMDQsNyBAQAogCQkJc3RhcnQgPSBlbnRyeS0+b2Zmc2V0OwogCQkJYnl0ZXMgPSBtaW4oZW50cnktPmJ5dGVzLCBlbmQgLSBzdGFydCk7CiAJCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgZW50cnkpOwotCQkJa2ZyZWUoZW50cnkpOworCQkJa21lbV9jYWNoZV9mcmVlKGJ0cmZzX2ZyZWVfc3BhY2VfY2FjaGVwLCBlbnRyeSk7CiAJCX0KIAogCQlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9pbm9kZS5jIGIvZnMvYnRyZnMvaW5vZGUuYwppbmRleCA2NTQxMzM5Li43Y2Q4YWIwIDEwMDY0NAotLS0gYS9mcy9idHJmcy9pbm9kZS5jCisrKyBiL2ZzL2J0cmZzL2lub2RlLmMKQEAgLTk1NCw2ICs5NTQsNyBAQAogCQkJIDEsIDAsIE5VTEwsIEdGUF9OT0ZTKTsKIAl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKIAkJYXN5bmNfY293ID0ga21hbGxvYyhzaXplb2YoKmFzeW5jX2NvdyksIEdGUF9OT0ZTKTsKKwkJQlVHX09OKCFhc3luY19jb3cpOwogCQlhc3luY19jb3ctPmlub2RlID0gaW5vZGU7CiAJCWFzeW5jX2Nvdy0+cm9vdCA9IHJvb3Q7CiAJCWFzeW5jX2Nvdy0+bG9ja2VkX3BhZ2UgPSBsb2NrZWRfcGFnZTsKQEAgLTE3NzAsOSArMTc3MSwxMiBAQAogCWFkZF9wZW5kaW5nX2NzdW1zKHRyYW5zLCBpbm9kZSwgb3JkZXJlZF9leHRlbnQtPmZpbGVfb2Zmc2V0LAogCQkJICAmb3JkZXJlZF9leHRlbnQtPmxpc3QpOwogCi0JYnRyZnNfb3JkZXJlZF91cGRhdGVfaV9zaXplKGlub2RlLCAwLCBvcmRlcmVkX2V4dGVudCk7Ci0JcmV0ID0gYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7Ci0JQlVHX09OKHJldCk7CisJcmV0ID0gYnRyZnNfb3JkZXJlZF91cGRhdGVfaV9zaXplKGlub2RlLCAwLCBvcmRlcmVkX2V4dGVudCk7CisJaWYgKCFyZXQpIHsKKwkJcmV0ID0gYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7CisJCUJVR19PTihyZXQpOworCX0KKwlyZXQgPSAwOwogb3V0OgogCWlmIChub2xvY2spIHsKIAkJaWYgKHRyYW5zKQpAQCAtMjMyMSw3ICsyMzI1LDcgQEAKIAogCQkvKgogCQkgKiBpZiByZXQgPT0gMCBtZWFucyB3ZSBmb3VuZCB3aGF0IHdlIHdlcmUgc2VhcmNoaW5nIGZvciwgd2hpY2gKLQkJICogaXMgd2VpcmQsIGJ1dCBwb3NzaWJsZSwgc28gb25seSBzY3JldyB3aXRoIHBhdGggaWYgd2UgZGlkbnQKKwkJICogaXMgd2VpcmQsIGJ1dCBwb3NzaWJsZSwgc28gb25seSBzY3JldyB3aXRoIHBhdGggaWYgd2UgZGlkbid0CiAJCSAqIGZpbmQgdGhlIGtleSBhbmQgc2VlIGlmIHdlIGhhdmUgc3R1ZmYgdGhhdCBtYXRjaGVzCiAJCSAqLwogCQlpZiAocmV0ID4gMCkgewpAQCAtMjU5MCw2ICsyNTk0LDEzIEBACiAJCQkgICAgc3RydWN0IGJ0cmZzX2lub2RlX2l0ZW0gKml0ZW0sCiAJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSkKIHsKKwlpZiAoIWxlYWYtPm1hcF90b2tlbikKKwkJbWFwX3ByaXZhdGVfZXh0ZW50X2J1ZmZlcihsZWFmLCAodW5zaWduZWQgbG9uZylpdGVtLAorCQkJCQkgIHNpemVvZihzdHJ1Y3QgYnRyZnNfaW5vZGVfaXRlbSksCisJCQkJCSAgJmxlYWYtPm1hcF90b2tlbiwgJmxlYWYtPmthZGRyLAorCQkJCQkgICZsZWFmLT5tYXBfc3RhcnQsICZsZWFmLT5tYXBfbGVuLAorCQkJCQkgIEtNX1VTRVIxKTsKKwogCWJ0cmZzX3NldF9pbm9kZV91aWQobGVhZiwgaXRlbSwgaW5vZGUtPmlfdWlkKTsKIAlidHJmc19zZXRfaW5vZGVfZ2lkKGxlYWYsIGl0ZW0sIGlub2RlLT5pX2dpZCk7CiAJYnRyZnNfc2V0X2lub2RlX3NpemUobGVhZiwgaXRlbSwgQlRSRlNfSShpbm9kZSktPmRpc2tfaV9zaXplKTsKQEAgLTI2MTgsNiArMjYyOSwxMSBAQAogCWJ0cmZzX3NldF9pbm9kZV9yZGV2KGxlYWYsIGl0ZW0sIGlub2RlLT5pX3JkZXYpOwogCWJ0cmZzX3NldF9pbm9kZV9mbGFncyhsZWFmLCBpdGVtLCBCVFJGU19JKGlub2RlKS0+ZmxhZ3MpOwogCWJ0cmZzX3NldF9pbm9kZV9ibG9ja19ncm91cChsZWFmLCBpdGVtLCBCVFJGU19JKGlub2RlKS0+YmxvY2tfZ3JvdXApOworCisJaWYgKGxlYWYtPm1hcF90b2tlbikgeworCQl1bm1hcF9leHRlbnRfYnVmZmVyKGxlYWYsIGxlYWYtPm1hcF90b2tlbiwgS01fVVNFUjEpOworCQlsZWFmLT5tYXBfdG9rZW4gPSBOVUxMOworCX0KIH0KIAogLyoKQEAgLTQyMDcsMTAgKzQyMjMsOCBAQAogCXN0cnVjdCBidHJmc19rZXkgZm91bmRfa2V5OwogCXN0cnVjdCBidHJmc19wYXRoICpwYXRoOwogCWludCByZXQ7Ci0JdTMyIG5yaXRlbXM7CiAJc3RydWN0IGV4dGVudF9idWZmZXIgKmxlYWY7CiAJaW50IHNsb3Q7Ci0JaW50IGFkdmFuY2U7CiAJdW5zaWduZWQgY2hhciBkX3R5cGU7CiAJaW50IG92ZXIgPSAwOwogCXUzMiBkaV9jdXI7CkBAIC00MjUzLDI3ICs0MjY3LDE5IEBACiAJcmV0ID0gYnRyZnNfc2VhcmNoX3Nsb3QoTlVMTCwgcm9vdCwgJmtleSwgcGF0aCwgMCwgMCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyOwotCWFkdmFuY2UgPSAwOwogCiAJd2hpbGUgKDEpIHsKIAkJbGVhZiA9IHBhdGgtPm5vZGVzWzBdOwotCQlucml0ZW1zID0gYnRyZnNfaGVhZGVyX25yaXRlbXMobGVhZik7CiAJCXNsb3QgPSBwYXRoLT5zbG90c1swXTsKLQkJaWYgKGFkdmFuY2UgfHwgc2xvdCA+PSBucml0ZW1zKSB7Ci0JCQlpZiAoc2xvdCA+PSBucml0ZW1zIC0gMSkgewotCQkJCXJldCA9IGJ0cmZzX25leHRfbGVhZihyb290LCBwYXRoKTsKLQkJCQlpZiAocmV0KQotCQkJCQlicmVhazsKLQkJCQlsZWFmID0gcGF0aC0+bm9kZXNbMF07Ci0JCQkJbnJpdGVtcyA9IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGxlYWYpOwotCQkJCXNsb3QgPSBwYXRoLT5zbG90c1swXTsKLQkJCX0gZWxzZSB7Ci0JCQkJc2xvdCsrOwotCQkJCXBhdGgtPnNsb3RzWzBdKys7Ci0JCQl9CisJCWlmIChzbG90ID49IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGxlYWYpKSB7CisJCQlyZXQgPSBidHJmc19uZXh0X2xlYWYocm9vdCwgcGF0aCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIGVycjsKKwkJCWVsc2UgaWYgKHJldCA+IDApCisJCQkJYnJlYWs7CisJCQljb250aW51ZTsKIAkJfQogCi0JCWFkdmFuY2UgPSAxOwogCQlpdGVtID0gYnRyZnNfaXRlbV9ucihsZWFmLCBzbG90KTsKIAkJYnRyZnNfaXRlbV9rZXlfdG9fY3B1KGxlYWYsICZmb3VuZF9rZXksIHNsb3QpOwogCkBAIC00MjgyLDcgKzQyODgsNyBAQAogCQlpZiAoYnRyZnNfa2V5X3R5cGUoJmZvdW5kX2tleSkgIT0ga2V5X3R5cGUpCiAJCQlicmVhazsKIAkJaWYgKGZvdW5kX2tleS5vZmZzZXQgPCBmaWxwLT5mX3BvcykKLQkJCWNvbnRpbnVlOworCQkJZ290byBuZXh0OwogCiAJCWZpbHAtPmZfcG9zID0gZm91bmRfa2V5Lm9mZnNldDsKIApAQCAtNDMzNSw2ICs0MzQxLDggQEAKIAkJCWRpX2N1ciArPSBkaV9sZW47CiAJCQlkaSA9IChzdHJ1Y3QgYnRyZnNfZGlyX2l0ZW0gKikoKGNoYXIgKilkaSArIGRpX2xlbik7CiAJCX0KK25leHQ6CisJCXBhdGgtPnNsb3RzWzBdKys7CiAJfQogCiAJLyogUmVhY2hlZCBlbmQgb2YgZGlyZWN0b3J5L3Jvb3QuIEJ1bXAgcG9zIHBhc3QgdGhlIGxhc3QgaXRlbS4gKi8KQEAgLTQ1MjcsMTQgKzQ1MzUsMTcgQEAKIAlCVUdfT04oIXBhdGgpOwogCiAJaW5vZGUgPSBuZXdfaW5vZGUocm9vdC0+ZnNfaW5mby0+c2IpOwotCWlmICghaW5vZGUpCisJaWYgKCFpbm9kZSkgeworCQlidHJmc19mcmVlX3BhdGgocGF0aCk7CiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KIAogCWlmIChkaXIpIHsKIAkJdHJhY2VfYnRyZnNfaW5vZGVfcmVxdWVzdChkaXIpOwogCiAJCXJldCA9IGJ0cmZzX3NldF9pbm9kZV9pbmRleChkaXIsIGluZGV4KTsKIAkJaWYgKHJldCkgeworCQkJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwogCQkJaXB1dChpbm9kZSk7CiAJCQlyZXR1cm4gRVJSX1BUUihyZXQpOwogCQl9CkBAIC00NzIxLDkgKzQ3MzIsMTAgQEAKIAlpbm9kZSA9IGJ0cmZzX25ld19pbm9kZSh0cmFucywgcm9vdCwgZGlyLCBkZW50cnktPmRfbmFtZS5uYW1lLAogCQkJCWRlbnRyeS0+ZF9uYW1lLmxlbiwgZGlyLT5pX2lubywgb2JqZWN0aWQsCiAJCQkJQlRSRlNfSShkaXIpLT5ibG9ja19ncm91cCwgbW9kZSwgJmluZGV4KTsKLQllcnIgPSBQVFJfRVJSKGlub2RlKTsKLQlpZiAoSVNfRVJSKGlub2RlKSkKKwlpZiAoSVNfRVJSKGlub2RlKSkgeworCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKIAkJZ290byBvdXRfdW5sb2NrOworCX0KIAogCWVyciA9IGJ0cmZzX2luaXRfaW5vZGVfc2VjdXJpdHkodHJhbnMsIGlub2RlLCBkaXIsICZkZW50cnktPmRfbmFtZSk7CiAJaWYgKGVycikgewpAQCAtNDc4Miw5ICs0Nzk0LDEwIEBACiAJaW5vZGUgPSBidHJmc19uZXdfaW5vZGUodHJhbnMsIHJvb3QsIGRpciwgZGVudHJ5LT5kX25hbWUubmFtZSwKIAkJCQlkZW50cnktPmRfbmFtZS5sZW4sIGRpci0+aV9pbm8sIG9iamVjdGlkLAogCQkJCUJUUkZTX0koZGlyKS0+YmxvY2tfZ3JvdXAsIG1vZGUsICZpbmRleCk7Ci0JZXJyID0gUFRSX0VSUihpbm9kZSk7Ci0JaWYgKElTX0VSUihpbm9kZSkpCisJaWYgKElTX0VSUihpbm9kZSkpIHsKKwkJZXJyID0gUFRSX0VSUihpbm9kZSk7CiAJCWdvdG8gb3V0X3VubG9jazsKKwl9CiAKIAllcnIgPSBidHJmc19pbml0X2lub2RlX3NlY3VyaXR5KHRyYW5zLCBpbm9kZSwgZGlyLCAmZGVudHJ5LT5kX25hbWUpOwogCWlmIChlcnIpIHsKQEAgLTQ4MzQsOSArNDg0Nyw2IEBACiAJaWYgKGlub2RlLT5pX25saW5rID09IH4wVSkKIAkJcmV0dXJuIC1FTUxJTks7CiAKLQlidHJmc19pbmNfbmxpbmsoaW5vZGUpOwotCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwotCiAJZXJyID0gYnRyZnNfc2V0X2lub2RlX2luZGV4KGRpciwgJmluZGV4KTsKIAlpZiAoZXJyKQogCQlnb3RvIGZhaWw7CkBAIC00ODUyLDYgKzQ4NjIsOSBAQAogCQlnb3RvIGZhaWw7CiAJfQogCisJYnRyZnNfaW5jX25saW5rKGlub2RlKTsKKwlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKKwogCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgZGlyKTsKIAlpaG9sZChpbm9kZSk7CiAKQEAgLTQ5ODksNiArNTAwMiw4IEBACiAJaW5saW5lX3NpemUgPSBidHJmc19maWxlX2V4dGVudF9pbmxpbmVfaXRlbV9sZW4obGVhZiwKIAkJCQkJYnRyZnNfaXRlbV9ucihsZWFmLCBwYXRoLT5zbG90c1swXSkpOwogCXRtcCA9IGttYWxsb2MoaW5saW5lX3NpemUsIEdGUF9OT0ZTKTsKKwlpZiAoIXRtcCkKKwkJcmV0dXJuIC1FTk9NRU07CiAJcHRyID0gYnRyZnNfZmlsZV9leHRlbnRfaW5saW5lX3N0YXJ0KGl0ZW0pOwogCiAJcmVhZF9leHRlbnRfYnVmZmVyKGxlYWYsIHRtcCwgcHRyLCBpbmxpbmVfc2l6ZSk7CkBAIC01MjIxLDcgKzUyMzYsNyBAQAogCQkJYnRyZnNfbWFya19idWZmZXJfZGlydHkobGVhZik7CiAJCX0KIAkJc2V0X2V4dGVudF91cHRvZGF0ZShpb190cmVlLCBlbS0+c3RhcnQsCi0JCQkJICAgIGV4dGVudF9tYXBfZW5kKGVtKSAtIDEsIEdGUF9OT0ZTKTsKKwkJCQkgICAgZXh0ZW50X21hcF9lbmQoZW0pIC0gMSwgTlVMTCwgR0ZQX05PRlMpOwogCQlnb3RvIGluc2VydDsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgImJ0cmZzIHVua25vd24gZm91bmRfdHlwZSAlZFxuIiwgZm91bmRfdHlwZSk7CkBAIC01NDI4LDE3ICs1NDQzLDMwIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZXh0ZW50X21hcCAqYnRyZnNfbmV3X2V4dGVudF9kaXJlY3Qoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJCSAgc3RydWN0IGV4dGVudF9tYXAgKmVtLAogCQkJCQkJICB1NjQgc3RhcnQsIHU2NCBsZW4pCiB7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKIAlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFuczsKLQlzdHJ1Y3QgZXh0ZW50X21hcCAqZW07CiAJc3RydWN0IGV4dGVudF9tYXBfdHJlZSAqZW1fdHJlZSA9ICZCVFJGU19JKGlub2RlKS0+ZXh0ZW50X3RyZWU7CiAJc3RydWN0IGJ0cmZzX2tleSBpbnM7CiAJdTY0IGFsbG9jX2hpbnQ7CiAJaW50IHJldDsKKwlib29sIGluc2VydCA9IGZhbHNlOwogCi0JYnRyZnNfZHJvcF9leHRlbnRfY2FjaGUoaW5vZGUsIHN0YXJ0LCBzdGFydCArIGxlbiAtIDEsIDApOworCS8qCisJICogT2sgaWYgdGhlIGV4dGVudCBtYXAgd2UgbG9va2VkIHVwIGlzIGEgaG9sZSBhbmQgaXMgZm9yIHRoZSBleGFjdAorCSAqIHJhbmdlIHdlIHdhbnQsIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBhbGxvY2F0ZSBhIG5ldyBvbmUsIGhvd2V2ZXIgaWYKKwkgKiBpdCBpcyBub3QgcmlnaHQgdGhlbiB3ZSBuZWVkIHRvIGZyZWUgdGhpcyBvbmUgYW5kIGRyb3AgdGhlIGNhY2hlIGZvcgorCSAqIG91ciByYW5nZS4KKwkgKi8KKwlpZiAoZW0tPmJsb2NrX3N0YXJ0ICE9IEVYVEVOVF9NQVBfSE9MRSB8fCBlbS0+c3RhcnQgIT0gc3RhcnQgfHwKKwkgICAgZW0tPmxlbiAhPSBsZW4pIHsKKwkJZnJlZV9leHRlbnRfbWFwKGVtKTsKKwkJZW0gPSBOVUxMOworCQlpbnNlcnQgPSB0cnVlOworCQlidHJmc19kcm9wX2V4dGVudF9jYWNoZShpbm9kZSwgc3RhcnQsIHN0YXJ0ICsgbGVuIC0gMSwgMCk7CisJfQogCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDApOwogCWlmIChJU19FUlIodHJhbnMpKQpAQCAtNTQ1NCwxMCArNTQ4MiwxMiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQllbSA9IGFsbG9jX2V4dGVudF9tYXAoR0ZQX05PRlMpOwogCWlmICghZW0pIHsKLQkJZW0gPSBFUlJfUFRSKC1FTk9NRU0pOwotCQlnb3RvIG91dDsKKwkJZW0gPSBhbGxvY19leHRlbnRfbWFwKEdGUF9OT0ZTKTsKKwkJaWYgKCFlbSkgeworCQkJZW0gPSBFUlJfUFRSKC1FTk9NRU0pOworCQkJZ290byBvdXQ7CisJCX0KIAl9CiAKIAllbS0+c3RhcnQgPSBzdGFydDsKQEAgLTU0NjcsOSArNTQ5NywxNSBAQAogCWVtLT5ibG9ja19zdGFydCA9IGlucy5vYmplY3RpZDsKIAllbS0+YmxvY2tfbGVuID0gaW5zLm9mZnNldDsKIAllbS0+YmRldiA9IHJvb3QtPmZzX2luZm8tPmZzX2RldmljZXMtPmxhdGVzdF9iZGV2OworCisJLyoKKwkgKiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVjYXVzZSBpZiB3ZSdyZSB1c2luZyB0aGUgb3JpZ2luYWwgZW0gd2Ugc2VhcmNoZWQKKwkgKiBmb3IsIHdlIGNvdWxkIGhhdmUgRVhURU5UX0ZMQUdfVkFDQU5DWSBzZXQsIGFuZCB3ZSBkb24ndCB3YW50IHRoYXQuCisJICovCisJZW0tPmZsYWdzID0gMDsKIAlzZXRfYml0KEVYVEVOVF9GTEFHX1BJTk5FRCwgJmVtLT5mbGFncyk7CiAKLQl3aGlsZSAoMSkgeworCXdoaWxlIChpbnNlcnQpIHsKIAkJd3JpdGVfbG9jaygmZW1fdHJlZS0+bG9jayk7CiAJCXJldCA9IGFkZF9leHRlbnRfbWFwcGluZyhlbV90cmVlLCBlbSk7CiAJCXdyaXRlX3VubG9jaygmZW1fdHJlZS0+bG9jayk7CkBAIC01Njg3LDggKzU3MjMsNyBAQAogCSAqIGl0IGFib3ZlCiAJICovCiAJbGVuID0gYmhfcmVzdWx0LT5iX3NpemU7Ci0JZnJlZV9leHRlbnRfbWFwKGVtKTsKLQllbSA9IGJ0cmZzX25ld19leHRlbnRfZGlyZWN0KGlub2RlLCBzdGFydCwgbGVuKTsKKwllbSA9IGJ0cmZzX25ld19leHRlbnRfZGlyZWN0KGlub2RlLCBlbSwgc3RhcnQsIGxlbik7CiAJaWYgKElTX0VSUihlbSkpCiAJCXJldHVybiBQVFJfRVJSKGVtKTsKIAlsZW4gPSBtaW4obGVuLCBlbS0+bGVuIC0gKHN0YXJ0IC0gZW0tPnN0YXJ0KSk7CkBAIC01ODUxLDggKzU4ODYsMTAgQEAKIAl9CiAKIAlhZGRfcGVuZGluZ19jc3Vtcyh0cmFucywgaW5vZGUsIG9yZGVyZWQtPmZpbGVfb2Zmc2V0LCAmb3JkZXJlZC0+bGlzdCk7Ci0JYnRyZnNfb3JkZXJlZF91cGRhdGVfaV9zaXplKGlub2RlLCAwLCBvcmRlcmVkKTsKLQlidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKKwlyZXQgPSBidHJmc19vcmRlcmVkX3VwZGF0ZV9pX3NpemUoaW5vZGUsIDAsIG9yZGVyZWQpOworCWlmICghcmV0KQorCQlidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKKwlyZXQgPSAwOwogb3V0X3VubG9jazoKIAl1bmxvY2tfZXh0ZW50X2NhY2hlZCgmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsIG9yZGVyZWQtPmZpbGVfb2Zmc2V0LAogCQkJICAgICBvcmRlcmVkLT5maWxlX29mZnNldCArIG9yZGVyZWQtPmxlbiAtIDEsCkBAIC01OTM4LDcgKzU5NzUsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBfX2J0cmZzX3N1Ym1pdF9kaW9fYmlvKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJIGludCBydywgdTY0IGZpbGVfb2Zmc2V0LCBpbnQgc2tpcF9zdW0sCi0JCQkJCSB1MzIgKmNzdW1zKQorCQkJCQkgdTMyICpjc3VtcywgaW50IGFzeW5jX3N1Ym1pdCkKIHsKIAlpbnQgd3JpdGUgPSBydyAmIFJFUV9XUklURTsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OwpAQCAtNTk0OSwxMyArNTk4NiwyNCBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCi0JaWYgKHdyaXRlICYmICFza2lwX3N1bSkgeworCWlmIChza2lwX3N1bSkKKwkJZ290byBtYXA7CisKKwlpZiAod3JpdGUgJiYgYXN5bmNfc3VibWl0KSB7CiAJCXJldCA9IGJ0cmZzX3dxX3N1Ym1pdF9iaW8ocm9vdC0+ZnNfaW5mbywKIAkJCQkgICBpbm9kZSwgcncsIGJpbywgMCwgMCwKIAkJCQkgICBmaWxlX29mZnNldCwKIAkJCQkgICBfX2J0cmZzX3N1Ym1pdF9iaW9fc3RhcnRfZGlyZWN0X2lvLAogCQkJCSAgIF9fYnRyZnNfc3VibWl0X2Jpb19kb25lKTsKIAkJZ290byBlcnI7CisJfSBlbHNlIGlmICh3cml0ZSkgeworCQkvKgorCQkgKiBJZiB3ZSBhcmVuJ3QgZG9pbmcgYXN5bmMgc3VibWl0LCBjYWxjdWxhdGUgdGhlIGNzdW0gb2YgdGhlCisJCSAqIGJpbyBub3cuCisJCSAqLworCQlyZXQgPSBidHJmc19jc3VtX29uZV9iaW8ocm9vdCwgaW5vZGUsIGJpbywgZmlsZV9vZmZzZXQsIDEpOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CiAJfSBlbHNlIGlmICghc2tpcF9zdW0pIHsKIAkJcmV0ID0gYnRyZnNfbG9va3VwX2Jpb19zdW1zX2Rpbyhyb290LCBpbm9kZSwgYmlvLAogCQkJCQkgIGZpbGVfb2Zmc2V0LCBjc3Vtcyk7CkBAIC01OTYzLDcgKzYwMTEsOCBAQAogCQkJZ290byBlcnI7CiAJfQogCi0JcmV0ID0gYnRyZnNfbWFwX2Jpbyhyb290LCBydywgYmlvLCAwLCAxKTsKK21hcDoKKwlyZXQgPSBidHJmc19tYXBfYmlvKHJvb3QsIHJ3LCBiaW8sIDAsIGFzeW5jX3N1Ym1pdCk7CiBlcnI6CiAJYmlvX3B1dChiaW8pOwogCXJldHVybiByZXQ7CkBAIC01OTg1LDggKzYwMzQsMjMgQEAKIAlpbnQgbnJfcGFnZXMgPSAwOwogCXUzMiAqY3N1bXMgPSBkaXAtPmNzdW1zOwogCWludCByZXQgPSAwOworCWludCBhc3luY19zdWJtaXQgPSAwOwogCWludCB3cml0ZSA9IHJ3ICYgUkVRX1dSSVRFOwogCisJbWFwX2xlbmd0aCA9IG9yaWdfYmlvLT5iaV9zaXplOworCXJldCA9IGJ0cmZzX21hcF9ibG9jayhtYXBfdHJlZSwgUkVBRCwgc3RhcnRfc2VjdG9yIDw8IDksCisJCQkgICAgICAmbWFwX2xlbmd0aCwgTlVMTCwgMCk7CisJaWYgKHJldCkgeworCQliaW9fcHV0KG9yaWdfYmlvKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKG1hcF9sZW5ndGggPj0gb3JpZ19iaW8tPmJpX3NpemUpIHsKKwkJYmlvID0gb3JpZ19iaW87CisJCWdvdG8gc3VibWl0OworCX0KKworCWFzeW5jX3N1Ym1pdCA9IDE7CiAJYmlvID0gYnRyZnNfZGlvX2Jpb19hbGxvYyhvcmlnX2Jpby0+YmlfYmRldiwgc3RhcnRfc2VjdG9yLCBHRlBfTk9GUyk7CiAJaWYgKCFiaW8pCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNTk5NCwxNCArNjA1OCw2IEBACiAJYmlvLT5iaV9lbmRfaW8gPSBidHJmc19lbmRfZGlvX2JpbzsKIAlhdG9taWNfaW5jKCZkaXAtPnBlbmRpbmdfYmlvcyk7CiAKLQltYXBfbGVuZ3RoID0gb3JpZ19iaW8tPmJpX3NpemU7Ci0JcmV0ID0gYnRyZnNfbWFwX2Jsb2NrKG1hcF90cmVlLCBSRUFELCBzdGFydF9zZWN0b3IgPDwgOSwKLQkJCSAgICAgICZtYXBfbGVuZ3RoLCBOVUxMLCAwKTsKLQlpZiAocmV0KSB7Ci0JCWJpb19wdXQoYmlvKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCiAJd2hpbGUgKGJ2ZWMgPD0gKG9yaWdfYmlvLT5iaV9pb192ZWMgKyBvcmlnX2Jpby0+YmlfdmNudCAtIDEpKSB7CiAJCWlmICh1bmxpa2VseShtYXBfbGVuZ3RoIDwgc3VibWl0X2xlbiArIGJ2ZWMtPmJ2X2xlbiB8fAogCQkgICAgYmlvX2FkZF9wYWdlKGJpbywgYnZlYy0+YnZfcGFnZSwgYnZlYy0+YnZfbGVuLApAQCAtNjAxNSw3ICs2MDcxLDcgQEAKIAkJCWF0b21pY19pbmMoJmRpcC0+cGVuZGluZ19iaW9zKTsKIAkJCXJldCA9IF9fYnRyZnNfc3VibWl0X2Rpb19iaW8oYmlvLCBpbm9kZSwgcncsCiAJCQkJCQkgICAgIGZpbGVfb2Zmc2V0LCBza2lwX3N1bSwKLQkJCQkJCSAgICAgY3N1bXMpOworCQkJCQkJICAgICBjc3VtcywgYXN5bmNfc3VibWl0KTsKIAkJCWlmIChyZXQpIHsKIAkJCQliaW9fcHV0KGJpbyk7CiAJCQkJYXRvbWljX2RlYygmZGlwLT5wZW5kaW5nX2Jpb3MpOwpAQCAtNjA1Miw4ICs2MTA4LDkgQEAKIAkJfQogCX0KIAorc3VibWl0OgogCXJldCA9IF9fYnRyZnNfc3VibWl0X2Rpb19iaW8oYmlvLCBpbm9kZSwgcncsIGZpbGVfb2Zmc2V0LCBza2lwX3N1bSwKLQkJCQkgICAgIGNzdW1zKTsKKwkJCQkgICAgIGNzdW1zLCBhc3luY19zdWJtaXQpOwogCWlmICghcmV0KQogCQlyZXR1cm4gMDsKIApAQCAtNjE0OCw2ICs2MjA1LDcgQEAKIAkJCXVuc2lnbmVkIGxvbmcgbnJfc2VncykKIHsKIAlpbnQgc2VnOworCWludCBpOwogCXNpemVfdCBzaXplOwogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAl1bnNpZ25lZCBibG9ja3NpemVfbWFzayA9IHJvb3QtPnNlY3RvcnNpemUgLSAxOwpAQCAtNjE2Miw4ICs2MjIwLDIyIEBACiAJCWFkZHIgPSAodW5zaWduZWQgbG9uZylpb3Zbc2VnXS5pb3ZfYmFzZTsKIAkJc2l6ZSA9IGlvdltzZWddLmlvdl9sZW47CiAJCWVuZCArPSBzaXplOwotCQlpZiAoKGFkZHIgJiBibG9ja3NpemVfbWFzaykgfHwgKHNpemUgJiBibG9ja3NpemVfbWFzaykpIAorCQlpZiAoKGFkZHIgJiBibG9ja3NpemVfbWFzaykgfHwgKHNpemUgJiBibG9ja3NpemVfbWFzaykpCiAJCQlnb3RvIG91dDsKKworCQkvKiBJZiB0aGlzIGlzIGEgd3JpdGUgd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBhbnltb3JlICovCisJCWlmIChydyAmIFdSSVRFKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGhhdmUgZHVwbGljYXRlIGlvdl9iYXNlJ3MgaW4gdGhpcworCQkgKiBpb3ZlYywgaWYgc28gcmV0dXJuIEVJTlZBTCwgb3RoZXJ3aXNlIHdlJ2xsIGdldCBjc3VtIGVycm9ycworCQkgKiB3aGVuIHJlYWRpbmcgYmFjay4KKwkJICovCisJCWZvciAoaSA9IHNlZyArIDE7IGkgPCBucl9zZWdzOyBpKyspIHsKKwkJCWlmIChpb3Zbc2VnXS5pb3ZfYmFzZSA9PSBpb3ZbaV0uaW92X2Jhc2UpCisJCQkJZ290byBvdXQ7CisJCX0KIAl9CiAJcmV0dmFsID0gMDsKIG91dDoKQEAgLTcyMDYsOSArNzI3OCwxMCBAQAogCQkJCWRlbnRyeS0+ZF9uYW1lLmxlbiwgZGlyLT5pX2lubywgb2JqZWN0aWQsCiAJCQkJQlRSRlNfSShkaXIpLT5ibG9ja19ncm91cCwgU19JRkxOS3xTX0lSV1hVR08sCiAJCQkJJmluZGV4KTsKLQllcnIgPSBQVFJfRVJSKGlub2RlKTsKLQlpZiAoSVNfRVJSKGlub2RlKSkKKwlpZiAoSVNfRVJSKGlub2RlKSkgeworCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKIAkJZ290byBvdXRfdW5sb2NrOworCX0KIAogCWVyciA9IGJ0cmZzX2luaXRfaW5vZGVfc2VjdXJpdHkodHJhbnMsIGlub2RlLCBkaXIsICZkZW50cnktPmRfbmFtZSk7CiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW9jdGwuYyBiL2ZzL2J0cmZzL2lvY3RsLmMKaW5kZXggY2ZjMjY0Zi4uMjYxNmY3ZSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW9jdGwuYworKysgYi9mcy9idHJmcy9pb2N0bC5jCkBAIC04MSw2ICs4MSwxMyBAQAogCQlpZmxhZ3MgfD0gRlNfTk9BVElNRV9GTDsKIAlpZiAoZmxhZ3MgJiBCVFJGU19JTk9ERV9ESVJTWU5DKQogCQlpZmxhZ3MgfD0gRlNfRElSU1lOQ19GTDsKKwlpZiAoZmxhZ3MgJiBCVFJGU19JTk9ERV9OT0RBVEFDT1cpCisJCWlmbGFncyB8PSBGU19OT0NPV19GTDsKKworCWlmICgoZmxhZ3MgJiBCVFJGU19JTk9ERV9DT01QUkVTUykgJiYgIShmbGFncyAmIEJUUkZTX0lOT0RFX05PQ09NUFJFU1MpKQorCQlpZmxhZ3MgfD0gRlNfQ09NUFJfRkw7CisJZWxzZSBpZiAoZmxhZ3MgJiBCVFJGU19JTk9ERV9OT0NPTVBSRVNTKQorCQlpZmxhZ3MgfD0gRlNfTk9DT01QX0ZMOwogCiAJcmV0dXJuIGlmbGFnczsKIH0KQEAgLTE0NCwxNiArMTUxLDEzIEBACiAJaWYgKGZsYWdzICYgfihGU19JTU1VVEFCTEVfRkwgfCBGU19BUFBFTkRfRkwgfCBcCiAJCSAgICAgIEZTX05PQVRJTUVfRkwgfCBGU19OT0RVTVBfRkwgfCBcCiAJCSAgICAgIEZTX1NZTkNfRkwgfCBGU19ESVJTWU5DX0ZMIHwgXAotCQkgICAgICBGU19OT0NPTVBfRkwgfCBGU19DT01QUl9GTCB8IFwKLQkJICAgICAgRlNfTk9DT1dfRkwgfCBGU19DT1dfRkwpKQorCQkgICAgICBGU19OT0NPTVBfRkwgfCBGU19DT01QUl9GTCB8CisJCSAgICAgIEZTX05PQ09XX0ZMKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKChmbGFncyAmIEZTX05PQ09NUF9GTCkgJiYgKGZsYWdzICYgRlNfQ09NUFJfRkwpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICgoZmxhZ3MgJiBGU19OT0NPV19GTCkgJiYgKGZsYWdzICYgRlNfQ09XX0ZMKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjE4LDYgKzIyMiwxMCBAQAogCQlpcC0+ZmxhZ3MgfD0gQlRSRlNfSU5PREVfRElSU1lOQzsKIAllbHNlCiAJCWlwLT5mbGFncyAmPSB+QlRSRlNfSU5PREVfRElSU1lOQzsKKwlpZiAoZmxhZ3MgJiBGU19OT0NPV19GTCkKKwkJaXAtPmZsYWdzIHw9IEJUUkZTX0lOT0RFX05PREFUQUNPVzsKKwllbHNlCisJCWlwLT5mbGFncyAmPSB+QlRSRlNfSU5PREVfTk9EQVRBQ09XOwogCiAJLyoKIAkgKiBUaGUgQ09NUFJFU1MgZmxhZyBjYW4gb25seSBiZSBjaGFuZ2VkIGJ5IHVzZXJzLCB3aGlsZSB0aGUgTk9DT01QUkVTUwpAQCAtMjMwLDExICsyMzgsOSBAQAogCX0gZWxzZSBpZiAoZmxhZ3MgJiBGU19DT01QUl9GTCkgewogCQlpcC0+ZmxhZ3MgfD0gQlRSRlNfSU5PREVfQ09NUFJFU1M7CiAJCWlwLT5mbGFncyAmPSB+QlRSRlNfSU5PREVfTk9DT01QUkVTUzsKKwl9IGVsc2UgeworCQlpcC0+ZmxhZ3MgJj0gfihCVFJGU19JTk9ERV9DT01QUkVTUyB8IEJUUkZTX0lOT0RFX05PQ09NUFJFU1MpOwogCX0KLQlpZiAoZmxhZ3MgJiBGU19OT0NPV19GTCkKLQkJaXAtPmZsYWdzIHw9IEJUUkZTX0lOT0RFX05PREFUQUNPVzsKLQllbHNlIGlmIChmbGFncyAmIEZTX0NPV19GTCkKLQkJaXAtPmZsYWdzICY9IH5CVFJGU19JTk9ERV9OT0RBVEFDT1c7CiAKIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CiAJQlVHX09OKElTX0VSUih0cmFucykpOwpAQCAtMjI4Nyw3ICsyMjkzLDcgQEAKIAlzdHJ1Y3QgYnRyZnNfaW9jdGxfc3BhY2VfaW5mbyBzcGFjZTsKIAlzdHJ1Y3QgYnRyZnNfaW9jdGxfc3BhY2VfaW5mbyAqZGVzdDsKIAlzdHJ1Y3QgYnRyZnNfaW9jdGxfc3BhY2VfaW5mbyAqZGVzdF9vcmlnOwotCXN0cnVjdCBidHJmc19pb2N0bF9zcGFjZV9pbmZvICp1c2VyX2Rlc3Q7CisJc3RydWN0IGJ0cmZzX2lvY3RsX3NwYWNlX2luZm8gX191c2VyICp1c2VyX2Rlc3Q7CiAJc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKmluZm87CiAJdTY0IHR5cGVzW10gPSB7QlRSRlNfQkxPQ0tfR1JPVVBfREFUQSwKIAkJICAgICAgIEJUUkZTX0JMT0NLX0dST1VQX1NZU1RFTSwKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3JlbG9jYXRpb24uYyBiL2ZzL2J0cmZzL3JlbG9jYXRpb24uYwppbmRleCA1ODI1MGUwLi4xOTlhODAxIDEwMDY0NAotLS0gYS9mcy9idHJmcy9yZWxvY2F0aW9uLmMKKysrIGIvZnMvYnRyZnMvcmVsb2NhdGlvbi5jCkBAIC0yMzQ2LDcgKzIzNDYsNyBAQAogCQlyb290ID0gbmV4dC0+cm9vdDsKIAkJQlVHX09OKCFyb290KTsKIAotCQkvKiBubyBvdGhlciBjaG9pY2UgZm9yIG5vbi1yZWZlcm5jZSBjb3VudGVkIHRyZWUgKi8KKwkJLyogbm8gb3RoZXIgY2hvaWNlIGZvciBub24tcmVmZXJlbmNlcyBjb3VudGVkIHRyZWUgKi8KIAkJaWYgKCFyb290LT5yZWZfY293cykKIAkJCXJldHVybiByb290OwogCmRpZmYgLS1naXQgYS9mcy9idHJmcy9zdXBlci5jIGIvZnMvYnRyZnMvc3VwZXIuYwppbmRleCA1OGU3ZGU5Li4wYWM3MTJlIDEwMDY0NAotLS0gYS9mcy9idHJmcy9zdXBlci5jCisrKyBiL2ZzL2J0cmZzL3N1cGVyLmMKQEAgLTE1OSw3ICsxNTksNyBAQAogCU9wdF9jb21wcmVzc190eXBlLCBPcHRfY29tcHJlc3NfZm9yY2UsIE9wdF9jb21wcmVzc19mb3JjZV90eXBlLAogCU9wdF9ub3RyZWVsb2csIE9wdF9yYXRpbywgT3B0X2ZsdXNob25jb21taXQsIE9wdF9kaXNjYXJkLAogCU9wdF9zcGFjZV9jYWNoZSwgT3B0X2NsZWFyX2NhY2hlLCBPcHRfdXNlcl9zdWJ2b2xfcm1fYWxsb3dlZCwKLQlPcHRfZW5vc3BjX2RlYnVnLCBPcHRfZXJyLAorCU9wdF9lbm9zcGNfZGVidWcsIE9wdF9zdWJ2b2xyb290aWQsIE9wdF9lcnIsCiB9OwogCiBzdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CkBAIC0xODksNiArMTg5LDcgQEAKIAl7T3B0X2NsZWFyX2NhY2hlLCAiY2xlYXJfY2FjaGUifSwKIAl7T3B0X3VzZXJfc3Vidm9sX3JtX2FsbG93ZWQsICJ1c2VyX3N1YnZvbF9ybV9hbGxvd2VkIn0sCiAJe09wdF9lbm9zcGNfZGVidWcsICJlbm9zcGNfZGVidWcifSwKKwl7T3B0X3N1YnZvbHJvb3RpZCwgInN1YnZvbHJvb3RpZD0lZCJ9LAogCXtPcHRfZXJyLCBOVUxMfSwKIH07CiAKQEAgLTIzMiw2ICsyMzMsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X3N1YnZvbDoKIAkJY2FzZSBPcHRfc3Vidm9saWQ6CisJCWNhc2UgT3B0X3N1YnZvbHJvb3RpZDoKIAkJY2FzZSBPcHRfZGV2aWNlOgogCQkJLyoKIAkJCSAqIFRoZXNlIGFyZSBwYXJzZWQgYnkgYnRyZnNfcGFyc2VfZWFybHlfb3B0aW9ucwpAQCAtMzg4LDcgKzM5MCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgYnRyZnNfcGFyc2VfZWFybHlfb3B0aW9ucyhjb25zdCBjaGFyICpvcHRpb25zLCBmbW9kZV90IGZsYWdzLAogCQl2b2lkICpob2xkZXIsIGNoYXIgKipzdWJ2b2xfbmFtZSwgdTY0ICpzdWJ2b2xfb2JqZWN0aWQsCi0JCXN0cnVjdCBidHJmc19mc19kZXZpY2VzICoqZnNfZGV2aWNlcykKKwkJdTY0ICpzdWJ2b2xfcm9vdGlkLCBzdHJ1Y3QgYnRyZnNfZnNfZGV2aWNlcyAqKmZzX2RldmljZXMpCiB7CiAJc3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdOwogCWNoYXIgKm9wdHMsICpvcmlnLCAqcDsKQEAgLTQyOSw2ICs0MzEsMTggQEAKIAkJCQkJKnN1YnZvbF9vYmplY3RpZCA9IGludGFyZzsKIAkJCX0KIAkJCWJyZWFrOworCQljYXNlIE9wdF9zdWJ2b2xyb290aWQ6CisJCQlpbnRhcmcgPSAwOworCQkJZXJyb3IgPSBtYXRjaF9pbnQoJmFyZ3NbMF0sICZpbnRhcmcpOworCQkJaWYgKCFlcnJvcikgeworCQkJCS8qIHdlIHdhbnQgdGhlIG9yaWdpbmFsIGZzX3RyZWUgKi8KKwkJCQlpZiAoIWludGFyZykKKwkJCQkJKnN1YnZvbF9yb290aWQgPQorCQkJCQkJQlRSRlNfRlNfVFJFRV9PQkpFQ1RJRDsKKwkJCQllbHNlCisJCQkJCSpzdWJ2b2xfcm9vdGlkID0gaW50YXJnOworCQkJfQorCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2RldmljZToKIAkJCWVycm9yID0gYnRyZnNfc2Nhbl9vbmVfZGV2aWNlKG1hdGNoX3N0cmR1cCgmYXJnc1swXSksCiAJCQkJCWZsYWdzLCBob2xkZXIsIGZzX2RldmljZXMpOwpAQCAtNzM2LDYgKzc1MCw3IEBACiAJZm1vZGVfdCBtb2RlID0gRk1PREVfUkVBRDsKIAljaGFyICpzdWJ2b2xfbmFtZSA9IE5VTEw7CiAJdTY0IHN1YnZvbF9vYmplY3RpZCA9IDA7CisJdTY0IHN1YnZvbF9yb290aWQgPSAwOwogCWludCBlcnJvciA9IDA7CiAKIAlpZiAoIShmbGFncyAmIE1TX1JET05MWSkpCkBAIC03NDMsNyArNzU4LDcgQEAKIAogCWVycm9yID0gYnRyZnNfcGFyc2VfZWFybHlfb3B0aW9ucyhkYXRhLCBtb2RlLCBmc190eXBlLAogCQkJCQkgICZzdWJ2b2xfbmFtZSwgJnN1YnZvbF9vYmplY3RpZCwKLQkJCQkJICAmZnNfZGV2aWNlcyk7CisJCQkJCSAgJnN1YnZvbF9yb290aWQsICZmc19kZXZpY2VzKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKIApAQCAtODA3LDE1ICs4MjIsMTcgQEAKIAkJcy0+c19mbGFncyB8PSBNU19BQ1RJVkU7CiAJfQogCi0Jcm9vdCA9IGdldF9kZWZhdWx0X3Jvb3Qocywgc3Vidm9sX29iamVjdGlkKTsKLQlpZiAoSVNfRVJSKHJvb3QpKSB7Ci0JCWVycm9yID0gUFRSX0VSUihyb290KTsKLQkJZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIocyk7Ci0JCWdvdG8gZXJyb3JfZnJlZV9zdWJ2b2xfbmFtZTsKLQl9CiAJLyogaWYgdGhleSBnYXZlIHVzIGEgc3Vidm9sdW1lIG5hbWUgYmluZCBtb3VudCBpbnRvIHRoYXQgKi8KIAlpZiAoc3RyY21wKHN1YnZvbF9uYW1lLCAiLiIpKSB7CiAJCXN0cnVjdCBkZW50cnkgKm5ld19yb290OworCisJCXJvb3QgPSBnZXRfZGVmYXVsdF9yb290KHMsIHN1YnZvbF9yb290aWQpOworCQlpZiAoSVNfRVJSKHJvb3QpKSB7CisJCQllcnJvciA9IFBUUl9FUlIocm9vdCk7CisJCQlkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzKTsKKwkJCWdvdG8gZXJyb3JfZnJlZV9zdWJ2b2xfbmFtZTsKKwkJfQorCiAJCW11dGV4X2xvY2soJnJvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOwogCQluZXdfcm9vdCA9IGxvb2t1cF9vbmVfbGVuKHN1YnZvbF9uYW1lLCByb290LAogCQkJCSAgICAgIHN0cmxlbihzdWJ2b2xfbmFtZSkpOwpAQCAtODM2LDYgKzg1MywxMyBAQAogCQl9CiAJCWRwdXQocm9vdCk7CiAJCXJvb3QgPSBuZXdfcm9vdDsKKwl9IGVsc2UgeworCQlyb290ID0gZ2V0X2RlZmF1bHRfcm9vdChzLCBzdWJ2b2xfb2JqZWN0aWQpOworCQlpZiAoSVNfRVJSKHJvb3QpKSB7CisJCQllcnJvciA9IFBUUl9FUlIocm9vdCk7CisJCQlkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzKTsKKwkJCWdvdG8gZXJyb3JfZnJlZV9zdWJ2b2xfbmFtZTsKKwkJfQogCX0KIAogCWtmcmVlKHN1YnZvbF9uYW1lKTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMgYi9mcy9idHJmcy90cmFuc2FjdGlvbi5jCmluZGV4IDViMTU4ZGEuLmM1NzE3MzQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYwpAQCAtMzIsMTAgKzMyLDggQEAKIAogc3RhdGljIG5vaW5saW5lIHZvaWQgcHV0X3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc190cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24pCiB7Ci0JV0FSTl9PTih0cmFuc2FjdGlvbi0+dXNlX2NvdW50ID09IDApOwotCXRyYW5zYWN0aW9uLT51c2VfY291bnQtLTsKLQlpZiAodHJhbnNhY3Rpb24tPnVzZV9jb3VudCA9PSAwKSB7Ci0JCWxpc3RfZGVsX2luaXQoJnRyYW5zYWN0aW9uLT5saXN0KTsKKwlXQVJOX09OKGF0b21pY19yZWFkKCZ0cmFuc2FjdGlvbi0+dXNlX2NvdW50KSA9PSAwKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmdHJhbnNhY3Rpb24tPnVzZV9jb3VudCkpIHsKIAkJbWVtc2V0KHRyYW5zYWN0aW9uLCAwLCBzaXplb2YoKnRyYW5zYWN0aW9uKSk7CiAJCWttZW1fY2FjaGVfZnJlZShidHJmc190cmFuc2FjdGlvbl9jYWNoZXAsIHRyYW5zYWN0aW9uKTsKIAl9CkBAIC02MCwxNCArNTgsMTQgQEAKIAkJaWYgKCFjdXJfdHJhbnMpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJcm9vdC0+ZnNfaW5mby0+Z2VuZXJhdGlvbisrOwotCQljdXJfdHJhbnMtPm51bV93cml0ZXJzID0gMTsKKwkJYXRvbWljX3NldCgmY3VyX3RyYW5zLT5udW1fd3JpdGVycywgMSk7CiAJCWN1cl90cmFucy0+bnVtX2pvaW5lZCA9IDA7CiAJCWN1cl90cmFucy0+dHJhbnNpZCA9IHJvb3QtPmZzX2luZm8tPmdlbmVyYXRpb247CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN1cl90cmFucy0+d3JpdGVyX3dhaXQpOwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjdXJfdHJhbnMtPmNvbW1pdF93YWl0KTsKIAkJY3VyX3RyYW5zLT5pbl9jb21taXQgPSAwOwogCQljdXJfdHJhbnMtPmJsb2NrZWQgPSAwOwotCQljdXJfdHJhbnMtPnVzZV9jb3VudCA9IDE7CisJCWF0b21pY19zZXQoJmN1cl90cmFucy0+dXNlX2NvdW50LCAxKTsKIAkJY3VyX3RyYW5zLT5jb21taXRfZG9uZSA9IDA7CiAJCWN1cl90cmFucy0+c3RhcnRfdGltZSA9IGdldF9zZWNvbmRzKCk7CiAKQEAgLTg4LDcgKzg2LDcgQEAKIAkJcm9vdC0+ZnNfaW5mby0+cnVubmluZ190cmFuc2FjdGlvbiA9IGN1cl90cmFuczsKIAkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPm5ld190cmFuc19sb2NrKTsKIAl9IGVsc2UgewotCQljdXJfdHJhbnMtPm51bV93cml0ZXJzKys7CisJCWF0b21pY19pbmMoJmN1cl90cmFucy0+bnVtX3dyaXRlcnMpOwogCQljdXJfdHJhbnMtPm51bV9qb2luZWQrKzsKIAl9CiAKQEAgLTE0NSw3ICsxNDMsNyBAQAogCWN1cl90cmFucyA9IHJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb247CiAJaWYgKGN1cl90cmFucyAmJiBjdXJfdHJhbnMtPmJsb2NrZWQpIHsKIAkJREVGSU5FX1dBSVQod2FpdCk7Ci0JCWN1cl90cmFucy0+dXNlX2NvdW50Kys7CisJCWF0b21pY19pbmMoJmN1cl90cmFucy0+dXNlX2NvdW50KTsKIAkJd2hpbGUgKDEpIHsKIAkJCXByZXBhcmVfdG9fd2FpdCgmcm9vdC0+ZnNfaW5mby0+dHJhbnNhY3Rpb25fd2FpdCwgJndhaXQsCiAJCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKQEAgLTE4MSw2ICsxNzksNyBAQAogewogCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmg7CiAJc3RydWN0IGJ0cmZzX3RyYW5zYWN0aW9uICpjdXJfdHJhbnM7CisJaW50IHJldHJpZXMgPSAwOwogCWludCByZXQ7CiAKIAlpZiAocm9vdC0+ZnNfaW5mby0+ZnNfc3RhdGUgJiBCVFJGU19TVVBFUl9GTEFHX0VSUk9SKQpAQCAtMjA0LDcgKzIwMyw3IEBACiAJfQogCiAJY3VyX3RyYW5zID0gcm9vdC0+ZnNfaW5mby0+cnVubmluZ190cmFuc2FjdGlvbjsKLQljdXJfdHJhbnMtPnVzZV9jb3VudCsrOworCWF0b21pY19pbmMoJmN1cl90cmFucy0+dXNlX2NvdW50KTsKIAlpZiAodHlwZSAhPSBUUkFOU19KT0lOX05PTE9DSykKIAkJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAKQEAgLTIyNCwxMCArMjIzLDE4IEBACiAKIAlpZiAobnVtX2l0ZW1zID4gMCkgewogCQlyZXQgPSBidHJmc190cmFuc19yZXNlcnZlX21ldGFkYXRhKGgsIHJvb3QsIG51bV9pdGVtcyk7Ci0JCWlmIChyZXQgPT0gLUVBR0FJTikgeworCQlpZiAocmV0ID09IC1FQUdBSU4gJiYgIXJldHJpZXMpIHsKKwkJCXJldHJpZXMrKzsKIAkJCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbihoLCByb290KTsKIAkJCWdvdG8gYWdhaW47CisJCX0gZWxzZSBpZiAocmV0ID09IC1FQUdBSU4pIHsKKwkJCS8qCisJCQkgKiBXZSBoYXZlIGFscmVhZHkgcmV0cmllZCBhbmQgZ290IEVBR0FJTiwgc28gcmVhbGx5IHdlCisJCQkgKiBkb24ndCBoYXZlIHNwYWNlLCBzbyBzZXQgcmV0IHRvIC1FTk9TUEMuCisJCQkgKi8KKwkJCXJldCA9IC1FTk9TUEM7CiAJCX0KKwogCQlpZiAocmV0IDwgMCkgewogCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKGgsIHJvb3QpOwogCQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKQEAgLTMyNyw3ICszMzQsNyBAQAogCQkJZ290byBvdXRfdW5sb2NrOyAgLyogbm90aGluZyBjb21taXR0aW5nfGNvbW1pdHRlZCAqLwogCX0KIAotCWN1cl90cmFucy0+dXNlX2NvdW50Kys7CisJYXRvbWljX2luYygmY3VyX3RyYW5zLT51c2VfY291bnQpOwogCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCiAJd2FpdF9mb3JfY29tbWl0KHJvb3QsIGN1cl90cmFucyk7CkBAIC00NTcsMTggKzQ2NCwxNCBAQAogCQkJd2FrZV91cF9wcm9jZXNzKGluZm8tPnRyYW5zYWN0aW9uX2t0aHJlYWQpOwogCX0KIAotCWlmIChsb2NrKQotCQltdXRleF9sb2NrKCZpbmZvLT50cmFuc19tdXRleCk7CiAJV0FSTl9PTihjdXJfdHJhbnMgIT0gaW5mby0+cnVubmluZ190cmFuc2FjdGlvbik7Ci0JV0FSTl9PTihjdXJfdHJhbnMtPm51bV93cml0ZXJzIDwgMSk7Ci0JY3VyX3RyYW5zLT5udW1fd3JpdGVycy0tOworCVdBUk5fT04oYXRvbWljX3JlYWQoJmN1cl90cmFucy0+bnVtX3dyaXRlcnMpIDwgMSk7CisJYXRvbWljX2RlYygmY3VyX3RyYW5zLT5udW1fd3JpdGVycyk7CiAKIAlzbXBfbWIoKTsKIAlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmY3VyX3RyYW5zLT53cml0ZXJfd2FpdCkpCiAJCXdha2VfdXAoJmN1cl90cmFucy0+d3JpdGVyX3dhaXQpOwogCXB1dF90cmFuc2FjdGlvbihjdXJfdHJhbnMpOwotCWlmIChsb2NrKQotCQltdXRleF91bmxvY2soJmluZm8tPnRyYW5zX211dGV4KTsKIAogCWlmIChjdXJyZW50LT5qb3VybmFsX2luZm8gPT0gdHJhbnMpCiAJCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IE5VTEw7CkBAIC0xMTc4LDcgKzExODEsNyBAQAogCS8qIHRha2UgdHJhbnNhY3Rpb24gcmVmZXJlbmNlICovCiAJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCWN1cl90cmFucyA9IHRyYW5zLT50cmFuc2FjdGlvbjsKLQljdXJfdHJhbnMtPnVzZV9jb3VudCsrOworCWF0b21pY19pbmMoJmN1cl90cmFucy0+dXNlX2NvdW50KTsKIAltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CkBAIC0xMjM3LDcgKzEyNDAsNyBAQAogCiAJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCWlmIChjdXJfdHJhbnMtPmluX2NvbW1pdCkgewotCQljdXJfdHJhbnMtPnVzZV9jb3VudCsrOworCQlhdG9taWNfaW5jKCZjdXJfdHJhbnMtPnVzZV9jb3VudCk7CiAJCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCkBAIC0xMjU5LDcgKzEyNjIsNyBAQAogCQlwcmV2X3RyYW5zID0gbGlzdF9lbnRyeShjdXJfdHJhbnMtPmxpc3QucHJldiwKIAkJCQkJc3RydWN0IGJ0cmZzX3RyYW5zYWN0aW9uLCBsaXN0KTsKIAkJaWYgKCFwcmV2X3RyYW5zLT5jb21taXRfZG9uZSkgewotCQkJcHJldl90cmFucy0+dXNlX2NvdW50Kys7CisJCQlhdG9taWNfaW5jKCZwcmV2X3RyYW5zLT51c2VfY291bnQpOwogCQkJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAKIAkJCXdhaXRfZm9yX2NvbW1pdChyb290LCBwcmV2X3RyYW5zKTsKQEAgLTEzMDAsMTQgKzEzMDMsMTQgQEAKIAkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAKIAkJc21wX21iKCk7Ci0JCWlmIChjdXJfdHJhbnMtPm51bV93cml0ZXJzID4gMSkKKwkJaWYgKGF0b21pY19yZWFkKCZjdXJfdHJhbnMtPm51bV93cml0ZXJzKSA+IDEpCiAJCQlzY2hlZHVsZV90aW1lb3V0KE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKIAkJZWxzZSBpZiAoc2hvdWxkX2dyb3cpCiAJCQlzY2hlZHVsZV90aW1lb3V0KDEpOwogCiAJCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAkJZmluaXNoX3dhaXQoJmN1cl90cmFucy0+d3JpdGVyX3dhaXQsICZ3YWl0KTsKLQl9IHdoaWxlIChjdXJfdHJhbnMtPm51bV93cml0ZXJzID4gMSB8fAorCX0gd2hpbGUgKGF0b21pY19yZWFkKCZjdXJfdHJhbnMtPm51bV93cml0ZXJzKSA+IDEgfHwKIAkJIChzaG91bGRfZ3JvdyAmJiBjdXJfdHJhbnMtPm51bV9qb2luZWQgIT0gam9pbmVkKSk7CiAKIAlyZXQgPSBjcmVhdGVfcGVuZGluZ19zbmFwc2hvdHModHJhbnMsIHJvb3QtPmZzX2luZm8pOwpAQCAtMTM5NCw2ICsxMzk3LDcgQEAKIAogCXdha2VfdXAoJmN1cl90cmFucy0+Y29tbWl0X3dhaXQpOwogCisJbGlzdF9kZWxfaW5pdCgmY3VyX3RyYW5zLT5saXN0KTsKIAlwdXRfdHJhbnNhY3Rpb24oY3VyX3RyYW5zKTsKIAlwdXRfdHJhbnNhY3Rpb24oY3VyX3RyYW5zKTsKIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uaCBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmgKaW5kZXggMjI5YTU5NC4uZTQ0MWFjYyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uaAorKysgYi9mcy9idHJmcy90cmFuc2FjdGlvbi5oCkBAIC0yNywxMSArMjcsMTEgQEAKIAkgKiB0b3RhbCB3cml0ZXJzIGluIHRoaXMgdHJhbnNhY3Rpb24sIGl0IG11c3QgYmUgemVybyBiZWZvcmUgdGhlCiAJICogdHJhbnNhY3Rpb24gY2FuIGVuZAogCSAqLwotCXVuc2lnbmVkIGxvbmcgbnVtX3dyaXRlcnM7CisJYXRvbWljX3QgbnVtX3dyaXRlcnM7CiAKIAl1bnNpZ25lZCBsb25nIG51bV9qb2luZWQ7CiAJaW50IGluX2NvbW1pdDsKLQlpbnQgdXNlX2NvdW50OworCWF0b21pY190IHVzZV9jb3VudDsKIAlpbnQgY29tbWl0X2RvbmU7CiAJaW50IGJsb2NrZWQ7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJlZS1sb2cuYyBiL2ZzL2J0cmZzL3RyZWUtbG9nLmMKaW5kZXggYzUwMjcxYS4uZjk5N2VjMCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJlZS1sb2cuYworKysgYi9mcy9idHJmcy90cmVlLWxvZy5jCkBAIC0yMjA5LDggKzIyMDksMTAgQEAKIAogCWxvZyA9IHJvb3QtPmxvZ19yb290OwogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7Ci0JaWYgKCFwYXRoKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoIXBhdGgpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KIAogCWRpID0gYnRyZnNfbG9va3VwX2Rpcl9pdGVtKHRyYW5zLCBsb2csIHBhdGgsIGRpci0+aV9pbm8sCiAJCQkJICAgbmFtZSwgbmFtZV9sZW4sIC0xKTsKQEAgLTIyNzEsNiArMjI3Myw3IEBACiAJfQogZmFpbDoKIAlidHJmc19mcmVlX3BhdGgocGF0aCk7CitvdXRfdW5sb2NrOgogCW11dGV4X3VubG9jaygmQlRSRlNfSShkaXIpLT5sb2dfbXV0ZXgpOwogCWlmIChyZXQgPT0gLUVOT1NQQykgewogCQlyb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2xvZ19mdWxsX2NvbW1pdCA9IHRyYW5zLT50cmFuc2lkOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdm9sdW1lcy5jIGIvZnMvYnRyZnMvdm9sdW1lcy5jCmluZGV4IDMwOWE1N2IuLmM3MzY3YWUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3ZvbHVtZXMuYworKysgYi9mcy9idHJmcy92b2x1bWVzLmMKQEAgLTE1NSw2ICsxNTUsMTUgQEAKIAl1bnNpZ25lZCBsb25nIGxpbWl0OwogCXVuc2lnbmVkIGxvbmcgbGFzdF93YWl0ZWQgPSAwOwogCWludCBmb3JjZV9yZWcgPSAwOworCXN0cnVjdCBibGtfcGx1ZyBwbHVnOworCisJLyoKKwkgKiB0aGlzIGZ1bmN0aW9uIHJ1bnMgYWxsIHRoZSBiaW9zIHdlJ3ZlIGNvbGxlY3RlZCBmb3IKKwkgKiBhIHBhcnRpY3VsYXIgZGV2aWNlLiAgV2UgZG9uJ3Qgd2FudCB0byB3YW5kZXIgb2ZmIHRvCisJICogYW5vdGhlciBkZXZpY2Ugd2l0aG91dCBmaXJzdCBzZW5kaW5nIGFsbCBvZiB0aGVzZSBkb3duLgorCSAqIFNvLCBzZXR1cCBhIHBsdWcgaGVyZSBhbmQgZmluaXNoIGl0IG9mZiBiZWZvcmUgd2UgcmV0dXJuCisJICovCisJYmxrX3N0YXJ0X3BsdWcoJnBsdWcpOwogCiAJYmRpID0gYmxrX2dldF9iYWNraW5nX2Rldl9pbmZvKGRldmljZS0+YmRldik7CiAJZnNfaW5mbyA9IGRldmljZS0+ZGV2X3Jvb3QtPmZzX2luZm87CkBAIC0yOTQsNiArMzAzLDcgQEAKIAlzcGluX3VubG9jaygmZGV2aWNlLT5pb19sb2NrKTsKIAogZG9uZToKKwlibGtfZmluaXNoX3BsdWcoJnBsdWcpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9idHJmcy94YXR0ci5jIGIvZnMvYnRyZnMveGF0dHIuYwppbmRleCBhNTMwM2I4Li5jZmQ2NjA1IDEwMDY0NAotLS0gYS9mcy9idHJmcy94YXR0ci5jCisrKyBiL2ZzL2J0cmZzL3hhdHRyLmMKQEAgLTE4MCwxMSArMTgwLDEwIEBACiAJc3RydWN0IGJ0cmZzX3BhdGggKnBhdGg7CiAJc3RydWN0IGV4dGVudF9idWZmZXIgKmxlYWY7CiAJc3RydWN0IGJ0cmZzX2Rpcl9pdGVtICpkaTsKLQlpbnQgcmV0ID0gMCwgc2xvdCwgYWR2YW5jZTsKKwlpbnQgcmV0ID0gMCwgc2xvdDsKIAlzaXplX3QgdG90YWxfc2l6ZSA9IDAsIHNpemVfbGVmdCA9IHNpemU7CiAJdW5zaWduZWQgbG9uZyBuYW1lX3B0cjsKIAlzaXplX3QgbmFtZV9sZW47Ci0JdTMyIG5yaXRlbXM7CiAKIAkvKgogCSAqIG9rIHdlIHdhbnQgYWxsIG9iamVjdHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaWQuCkBAIC0yMDQsMzQgKzIwMywyNCBAQAogCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KE5VTEwsIHJvb3QsICZrZXksIHBhdGgsIDAsIDApOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycjsKLQlhZHZhbmNlID0gMDsKKwogCXdoaWxlICgxKSB7CiAJCWxlYWYgPSBwYXRoLT5ub2Rlc1swXTsKLQkJbnJpdGVtcyA9IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGxlYWYpOwogCQlzbG90ID0gcGF0aC0+c2xvdHNbMF07CiAKIAkJLyogdGhpcyBpcyB3aGVyZSB3ZSBzdGFydCB3YWxraW5nIHRocm91Z2ggdGhlIHBhdGggKi8KLQkJaWYgKGFkdmFuY2UgfHwgc2xvdCA+PSBucml0ZW1zKSB7CisJCWlmIChzbG90ID49IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGxlYWYpKSB7CiAJCQkvKgogCQkJICogaWYgd2UndmUgcmVhY2hlZCB0aGUgbGFzdCBzbG90IGluIHRoaXMgbGVhZiB3ZSBuZWVkCiAJCQkgKiB0byBnbyB0byB0aGUgbmV4dCBsZWFmIGFuZCByZXNldCBldmVyeXRoaW5nCiAJCQkgKi8KLQkJCWlmIChzbG90ID49IG5yaXRlbXMtMSkgewotCQkJCXJldCA9IGJ0cmZzX25leHRfbGVhZihyb290LCBwYXRoKTsKLQkJCQlpZiAocmV0KQotCQkJCQlicmVhazsKLQkJCQlsZWFmID0gcGF0aC0+bm9kZXNbMF07Ci0JCQkJbnJpdGVtcyA9IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGxlYWYpOwotCQkJCXNsb3QgPSBwYXRoLT5zbG90c1swXTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyoKLQkJCQkgKiBqdXN0IHdhbGtpbmcgdGhyb3VnaCB0aGUgc2xvdHMgb24gdGhpcyBsZWFmCi0JCQkJICovCi0JCQkJc2xvdCsrOwotCQkJCXBhdGgtPnNsb3RzWzBdKys7Ci0JCQl9CisJCQlyZXQgPSBidHJmc19uZXh0X2xlYWYocm9vdCwgcGF0aCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIGVycjsKKwkJCWVsc2UgaWYgKHJldCA+IDApCisJCQkJYnJlYWs7CisJCQljb250aW51ZTsKIAkJfQotCQlhZHZhbmNlID0gMTsKIAogCQlidHJmc19pdGVtX2tleV90b19jcHUobGVhZiwgJmZvdW5kX2tleSwgc2xvdCk7CiAKQEAgLTI1MCw3ICsyMzksNyBAQAogCiAJCS8qIHdlIGFyZSBqdXN0IGxvb2tpbmcgZm9yIGhvdyBiaWcgb3VyIGJ1ZmZlciBuZWVkcyB0byBiZSAqLwogCQlpZiAoIXNpemUpCi0JCQljb250aW51ZTsKKwkJCWdvdG8gbmV4dDsKIAogCQlpZiAoIWJ1ZmZlciB8fCAobmFtZV9sZW4gKyAxKSA+IHNpemVfbGVmdCkgewogCQkJcmV0ID0gLUVSQU5HRTsKQEAgLTI2Myw2ICsyNTIsOCBAQAogCiAJCXNpemVfbGVmdCAtPSBuYW1lX2xlbiArIDE7CiAJCWJ1ZmZlciArPSBuYW1lX2xlbiArIDE7CituZXh0OgorCQlwYXRoLT5zbG90c1swXSsrOwogCX0KIAlyZXQgPSB0b3RhbF9zaXplOwogCmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jIGIvZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYwppbmRleCAzN2ZlMTAxLi4xMDY0ODA1IDEwMDY0NAotLS0gYS9mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jCisrKyBiL2ZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogfQogCiAvKgotICogdXBkYXRlIHRoZSBhdXhpbGxpYXJ5IGRhdGEgZm9yIGFuIG9iamVjdCBvYmplY3Qgb24gZGlzaworICogdXBkYXRlIHRoZSBhdXhpbGlhcnkgZGF0YSBmb3IgYW4gb2JqZWN0IG9iamVjdCBvbiBkaXNrCiAgKi8KIHN0YXRpYyB2b2lkIGNhY2hlZmlsZXNfdXBkYXRlX29iamVjdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKl9vYmplY3QpCiB7CmRpZmYgLS1naXQgYS9mcy9jZXBoL2FkZHIuYyBiL2ZzL2NlcGgvYWRkci5jCmluZGV4IDM3MzY4YmEuLjM4YjhhYjUgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvYWRkci5jCisrKyBiL2ZzL2NlcGgvYWRkci5jCkBAIC0yNCw3ICsyNCw3IEBACiAgKiBjb250ZXh0IG5lZWRzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3NkIHdyaXRlIGR1cmluZyB3cml0ZWJhY2suCiAgKgogICogU2ltaWxhcmx5LCBzdHJ1Y3QgY2VwaF9pbm9kZV9pbmZvIG1haW50YWlucyBhIHNldCBvZiBjb3VudGVycyB0bwotICogY291bnQgZGlydHkgcGFnZXMgb24gdGhlIGlub2RlLiAgSW4gdGhlIGFic2Vuc2Ugb2Ygc25hcHNob3RzLAorICogY291bnQgZGlydHkgcGFnZXMgb24gdGhlIGlub2RlLiAgSW4gdGhlIGFic2VuY2Ugb2Ygc25hcHNob3RzLAogICogaV93cmJ1ZmZlcl9yZWYgPT0gaV93cmJ1ZmZlcl9yZWZfaGVhZCA9PSB0aGUgZGlydHkgcGFnZSBjb3VudC4KICAqCiAgKiBXaGVuIGEgc25hcHNob3QgaXMgdGFrZW4gKHRoYXQgaXMsIHdoZW4gdGhlIGNsaWVudCByZWNlaXZlcwpAQCAtNzc1LDYgKzc3NSwxMyBAQAogCQkJCQkgICAgY2ktPmlfdHJ1bmNhdGVfc2VxLAogCQkJCQkgICAgY2ktPmlfdHJ1bmNhdGVfc2l6ZSwKIAkJCQkJICAgICZpbm9kZS0+aV9tdGltZSwgdHJ1ZSwgMSwgMCk7CisKKwkJCQlpZiAoIXJlcSkgeworCQkJCQlyYyA9IC1FTk9NRU07CisJCQkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkJCQlicmVhazsKKwkJCQl9CisKIAkJCQltYXhfcGFnZXMgPSByZXEtPnJfbnVtX3BhZ2VzOwogCiAJCQkJYWxsb2NfcGFnZV92ZWMoZnNjLCByZXEpOwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9jYXBzLmMgYi9mcy9jZXBoL2NhcHMuYwppbmRleCA2YjYxZGVkLi4yYTU0MDRjIDEwMDY0NAotLS0gYS9mcy9jZXBoL2NhcHMuYworKysgYi9mcy9jZXBoL2NhcHMuYwpAQCAtNzY1LDcgKzc2NSw3IEBACiAJCQlpZiAodG91Y2gpIHsKIAkJCQlzdHJ1Y3QgcmJfbm9kZSAqcTsKIAotCQkJCS8qIHRvdWNoIHRoaXMgKyBwcmVjZWVkaW5nIGNhcHMgKi8KKwkJCQkvKiB0b3VjaCB0aGlzICsgcHJlY2VkaW5nIGNhcHMgKi8KIAkJCQlfX3RvdWNoX2NhcChjYXApOwogCQkJCWZvciAocSA9IHJiX2ZpcnN0KCZjaS0+aV9jYXBzKTsgcSAhPSBwOwogCQkJCSAgICAgcSA9IHJiX25leHQocSkpIHsKQEAgLTgxOSw3ICs4MTksNyBAQAogCQl1c2VkIHw9IENFUEhfQ0FQX0ZJTEVfQ0FDSEU7CiAJaWYgKGNpLT5pX3dyX3JlZikKIAkJdXNlZCB8PSBDRVBIX0NBUF9GSUxFX1dSOwotCWlmIChjaS0+aV93cmJ1ZmZlcl9yZWYpCisJaWYgKGNpLT5pX3diX3JlZiB8fCBjaS0+aV93cmJ1ZmZlcl9yZWYpCiAJCXVzZWQgfD0gQ0VQSF9DQVBfRklMRV9CVUZGRVI7CiAJcmV0dXJuIHVzZWQ7CiB9CkBAIC0xMzMxLDEwICsxMzMxLDExIEBACiB9CiAKIC8qCi0gKiBNYXJrIGNhcHMgZGlydHkuICBJZiBpbm9kZSBpcyBuZXdseSBkaXJ0eSwgYWRkIHRvIHRoZSBnbG9iYWwgZGlydHkKLSAqIGxpc3QuCisgKiBNYXJrIGNhcHMgZGlydHkuICBJZiBpbm9kZSBpcyBuZXdseSBkaXJ0eSwgcmV0dXJuIHRoZSBkaXJ0eSBmbGFncy4KKyAqIENhbGxlciBpcyB0aGVuIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIF9fbWFya19pbm9kZV9kaXJ0eSB3aXRoIHRoZQorICogcmV0dXJuZWQgZmxhZ3MgdmFsdWUuCiAgKi8KLXZvaWQgX19jZXBoX21hcmtfZGlydHlfY2FwcyhzdHJ1Y3QgY2VwaF9pbm9kZV9pbmZvICpjaSwgaW50IG1hc2spCitpbnQgX19jZXBoX21hcmtfZGlydHlfY2FwcyhzdHJ1Y3QgY2VwaF9pbm9kZV9pbmZvICpjaSwgaW50IG1hc2spCiB7CiAJc3RydWN0IGNlcGhfbWRzX2NsaWVudCAqbWRzYyA9CiAJCWNlcGhfc2JfdG9fY2xpZW50KGNpLT52ZnNfaW5vZGUuaV9zYiktPm1kc2M7CkBAIC0xMzU3LDcgKzEzNTgsNyBAQAogCQlsaXN0X2FkZCgmY2ktPmlfZGlydHlfaXRlbSwgJm1kc2MtPmNhcF9kaXJ0eSk7CiAJCXNwaW5fdW5sb2NrKCZtZHNjLT5jYXBfZGlydHlfbG9jayk7CiAJCWlmIChjaS0+aV9mbHVzaGluZ19jYXBzID09IDApIHsKLQkJCWlncmFiKGlub2RlKTsKKwkJCWlob2xkKGlub2RlKTsKIAkJCWRpcnR5IHw9IElfRElSVFlfU1lOQzsKIAkJfQogCX0KQEAgLTEzNjUsOSArMTM2Niw4IEBACiAJaWYgKCgod2FzIHwgY2ktPmlfZmx1c2hpbmdfY2FwcykgJiBDRVBIX0NBUF9GSUxFX0JVRkZFUikgJiYKIAkgICAgKG1hc2sgJiBDRVBIX0NBUF9GSUxFX0JVRkZFUikpCiAJCWRpcnR5IHw9IElfRElSVFlfREFUQVNZTkM7Ci0JaWYgKGRpcnR5KQotCQlfX21hcmtfaW5vZGVfZGlydHkoaW5vZGUsIGRpcnR5KTsKIAlfX2NhcF9kZWxheV9yZXF1ZXVlKG1kc2MsIGNpKTsKKwlyZXR1cm4gZGlydHk7CiB9CiAKIC8qCkBAIC0xOTkwLDExICsxOTkwLDExIEBACiAJaWYgKGdvdCAmIENFUEhfQ0FQX0ZJTEVfV1IpCiAJCWNpLT5pX3dyX3JlZisrOwogCWlmIChnb3QgJiBDRVBIX0NBUF9GSUxFX0JVRkZFUikgewotCQlpZiAoY2ktPmlfd3JidWZmZXJfcmVmID09IDApCi0JCQlpZ3JhYigmY2ktPnZmc19pbm9kZSk7Ci0JCWNpLT5pX3dyYnVmZmVyX3JlZisrOwotCQlkb3V0KCJfX3Rha2VfY2FwX3JlZnMgJXAgd3JidWZmZXIgJWQgLT4gJWQgKD8pXG4iLAotCQkgICAgICZjaS0+dmZzX2lub2RlLCBjaS0+aV93cmJ1ZmZlcl9yZWYtMSwgY2ktPmlfd3JidWZmZXJfcmVmKTsKKwkJaWYgKGNpLT5pX3diX3JlZiA9PSAwKQorCQkJaWhvbGQoJmNpLT52ZnNfaW5vZGUpOworCQljaS0+aV93Yl9yZWYrKzsKKwkJZG91dCgiX190YWtlX2NhcF9yZWZzICVwIHdiICVkIC0+ICVkICg/KVxuIiwKKwkJICAgICAmY2ktPnZmc19pbm9kZSwgY2ktPmlfd2JfcmVmLTEsIGNpLT5pX3diX3JlZik7CiAJfQogfQogCkBAIC0yMTY5LDEyICsyMTY5LDEyIEBACiAJCWlmICgtLWNpLT5pX3JkY2FjaGVfcmVmID09IDApCiAJCQlsYXN0Kys7CiAJaWYgKGhhZCAmIENFUEhfQ0FQX0ZJTEVfQlVGRkVSKSB7Ci0JCWlmICgtLWNpLT5pX3dyYnVmZmVyX3JlZiA9PSAwKSB7CisJCWlmICgtLWNpLT5pX3diX3JlZiA9PSAwKSB7CiAJCQlsYXN0Kys7CiAJCQlwdXQrKzsKIAkJfQotCQlkb3V0KCJwdXRfY2FwX3JlZnMgJXAgd3JidWZmZXIgJWQgLT4gJWQgKD8pXG4iLAotCQkgICAgIGlub2RlLCBjaS0+aV93cmJ1ZmZlcl9yZWYrMSwgY2ktPmlfd3JidWZmZXJfcmVmKTsKKwkJZG91dCgicHV0X2NhcF9yZWZzICVwIHdiICVkIC0+ICVkICg/KVxuIiwKKwkJICAgICBpbm9kZSwgY2ktPmlfd2JfcmVmKzEsIGNpLT5pX3diX3JlZik7CiAJfQogCWlmIChoYWQgJiBDRVBIX0NBUF9GSUxFX1dSKQogCQlpZiAoLS1jaS0+aV93cl9yZWYgPT0gMCkgewpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9maWxlLmMgYi9mcy9jZXBoL2ZpbGUuYwppbmRleCAxNTliNTEyLi4yMDMyNTJkIDEwMDY0NAotLS0gYS9mcy9jZXBoL2ZpbGUuYworKysgYi9mcy9jZXBoL2ZpbGUuYwpAQCAtNzM0LDkgKzczNCwxMiBAQAogCQl9CiAJfQogCWlmIChyZXQgPj0gMCkgeworCQlpbnQgZGlydHk7CiAJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JCV9fY2VwaF9tYXJrX2RpcnR5X2NhcHMoY2ksIENFUEhfQ0FQX0ZJTEVfV1IpOworCQlkaXJ0eSA9IF9fY2VwaF9tYXJrX2RpcnR5X2NhcHMoY2ksIENFUEhfQ0FQX0ZJTEVfV1IpOwogCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJCWlmIChkaXJ0eSkKKwkJCV9fbWFya19pbm9kZV9kaXJ0eShpbm9kZSwgZGlydHkpOwogCX0KIAogb3V0OgpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9pbm9kZS5jIGIvZnMvY2VwaC9pbm9kZS5jCmluZGV4IGI1NGM5N2QuLjcwYjZhNDggMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvaW5vZGUuYworKysgYi9mcy9jZXBoL2lub2RlLmMKQEAgLTM1NSw2ICszNTUsNyBAQAogCWNpLT5pX3JkX3JlZiA9IDA7CiAJY2ktPmlfcmRjYWNoZV9yZWYgPSAwOwogCWNpLT5pX3dyX3JlZiA9IDA7CisJY2ktPmlfd2JfcmVmID0gMDsKIAljaS0+aV93cmJ1ZmZlcl9yZWYgPSAwOwogCWNpLT5pX3dyYnVmZmVyX3JlZl9oZWFkID0gMDsKIAljaS0+aV9zaGFyZWRfZ2VuID0gMDsKQEAgLTE1NjcsNiArMTU2OCw3IEBACiAJaW50IHJlbGVhc2UgPSAwLCBkaXJ0aWVkID0gMDsKIAlpbnQgbWFzayA9IDA7CiAJaW50IGVyciA9IDA7CisJaW50IGlub2RlX2RpcnR5X2ZsYWdzID0gMDsKIAogCWlmIChjZXBoX3NuYXAoaW5vZGUpICE9IENFUEhfTk9TTkFQKQogCQlyZXR1cm4gLUVST0ZTOwpAQCAtMTcyNSwxMyArMTcyNywxNiBAQAogCQlkb3V0KCJzZXRhdHRyICVwIEFUVFJfRklMRSAuLi4gaHJtIVxuIiwgaW5vZGUpOwogCiAJaWYgKGRpcnRpZWQpIHsKLQkJX19jZXBoX21hcmtfZGlydHlfY2FwcyhjaSwgZGlydGllZCk7CisJCWlub2RlX2RpcnR5X2ZsYWdzID0gX19jZXBoX21hcmtfZGlydHlfY2FwcyhjaSwgZGlydGllZCk7CiAJCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCX0KIAogCXJlbGVhc2UgJj0gaXNzdWVkOwogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAorCWlmIChpbm9kZV9kaXJ0eV9mbGFncykKKwkJX19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBpbm9kZV9kaXJ0eV9mbGFncyk7CisKIAlpZiAobWFzaykgewogCQlyZXEtPnJfaW5vZGUgPSBpZ3JhYihpbm9kZSk7CiAJCXJlcS0+cl9pbm9kZV9kcm9wID0gcmVsZWFzZTsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvbWRzX2NsaWVudC5jIGIvZnMvY2VwaC9tZHNfY2xpZW50LmMKaW5kZXggZjYwYjA3Yi4uZDBmYWU0YyAxMDA2NDQKLS0tIGEvZnMvY2VwaC9tZHNfY2xpZW50LmMKKysrIGIvZnMvY2VwaC9tZHNfY2xpZW50LmMKQEAgLTMzMDQsOCArMzMwNCw4IEBACiB7CiAJc3RydWN0IGNlcGhfbWRzX3Nlc3Npb24gKnMgPSBjb24tPnByaXZhdGU7CiAKKwlkb3V0KCJtZHNjIGNvbl9wdXQgJXAgKCVkKVxuIiwgcywgYXRvbWljX3JlYWQoJnMtPnNfcmVmKSAtIDEpOwogCWNlcGhfcHV0X21kc19zZXNzaW9uKHMpOwotCWRvdXQoIm1kc2MgY29uX3B1dCAlcCAoJWQpXG4iLCBzLCBhdG9taWNfcmVhZCgmcy0+c19yZWYpKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvc25hcC5jIGIvZnMvY2VwaC9zbmFwLmMKaW5kZXggMGFlZTY2Yi4uMjQwNjdkNiAxMDA2NDQKLS0tIGEvZnMvY2VwaC9zbmFwLmMKKysrIGIvZnMvY2VwaC9zbmFwLmMKQEAgLTIwNiw3ICsyMDYsNyBAQAogCQl1cF93cml0ZSgmbWRzYy0+c25hcF9yd3NlbSk7CiAJfSBlbHNlIHsKIAkJc3Bpbl9sb2NrKCZtZHNjLT5zbmFwX2VtcHR5X2xvY2spOwotCQlsaXN0X2FkZCgmbWRzYy0+c25hcF9lbXB0eSwgJnJlYWxtLT5lbXB0eV9pdGVtKTsKKwkJbGlzdF9hZGQoJnJlYWxtLT5lbXB0eV9pdGVtLCAmbWRzYy0+c25hcF9lbXB0eSk7CiAJCXNwaW5fdW5sb2NrKCZtZHNjLT5zbmFwX2VtcHR5X2xvY2spOwogCX0KIH0KQEAgLTM0Miw3ICszNDIsNyBAQAogCW51bSA9IDA7CiAJc25hcGMtPnNlcSA9IHJlYWxtLT5zZXE7CiAJaWYgKHBhcmVudCkgewotCQkvKiBpbmNsdWRlIGFueSBvZiBwYXJlbnQncyBzbmFwcyBvY2N1cmluZyBfYWZ0ZXJfIG15CisJCS8qIGluY2x1ZGUgYW55IG9mIHBhcmVudCdzIHNuYXBzIG9jY3VycmluZyBfYWZ0ZXJfIG15CiAJCSAgIHBhcmVudCBiZWNhbWUgbXkgcGFyZW50ICovCiAJCWZvciAoaSA9IDA7IGkgPCBwYXJlbnQtPmNhY2hlZF9jb250ZXh0LT5udW1fc25hcHM7IGkrKykKIAkJCWlmIChwYXJlbnQtPmNhY2hlZF9jb250ZXh0LT5zbmFwc1tpXSA+PQpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9zdXBlci5oIGIvZnMvY2VwaC9zdXBlci5oCmluZGV4IDYxOWZlNzEuLmY1Y2FiZWYgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvc3VwZXIuaAorKysgYi9mcy9jZXBoL3N1cGVyLmgKQEAgLTI5Myw3ICsyOTMsNyBAQAogCiAJLyogaGVsZCByZWZlcmVuY2VzIHRvIGNhcHMgKi8KIAlpbnQgaV9waW5fcmVmOwotCWludCBpX3JkX3JlZiwgaV9yZGNhY2hlX3JlZiwgaV93cl9yZWY7CisJaW50IGlfcmRfcmVmLCBpX3JkY2FjaGVfcmVmLCBpX3dyX3JlZiwgaV93Yl9yZWY7CiAJaW50IGlfd3JidWZmZXJfcmVmLCBpX3dyYnVmZmVyX3JlZl9oZWFkOwogCXUzMiBpX3NoYXJlZF9nZW47ICAgICAgIC8qIGluY3JlbWVudCBlYWNoIHRpbWUgd2UgZ2V0IEZJTEVfU0hBUkVEICovCiAJdTMyIGlfcmRjYWNoZV9nZW47ICAgICAgLyogaW5jcmVtZW50ZWQgZWFjaCB0aW1lIHdlIGdldCBGSUxFX0NBQ0hFLiAqLwpAQCAtNTA2LDcgKzUwNiw3IEBACiB7CiAJcmV0dXJuIGNpLT5pX2RpcnR5X2NhcHMgfCBjaS0+aV9mbHVzaGluZ19jYXBzOwogfQotZXh0ZXJuIHZvaWQgX19jZXBoX21hcmtfZGlydHlfY2FwcyhzdHJ1Y3QgY2VwaF9pbm9kZV9pbmZvICpjaSwgaW50IG1hc2spOworZXh0ZXJuIGludCBfX2NlcGhfbWFya19kaXJ0eV9jYXBzKHN0cnVjdCBjZXBoX2lub2RlX2luZm8gKmNpLCBpbnQgbWFzayk7CiAKIGV4dGVybiBpbnQgY2VwaF9jYXBzX3Jldm9raW5nKHN0cnVjdCBjZXBoX2lub2RlX2luZm8gKmNpLCBpbnQgbWFzayk7CiBleHRlcm4gaW50IF9fY2VwaF9jYXBzX3VzZWQoc3RydWN0IGNlcGhfaW5vZGVfaW5mbyAqY2kpOwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC94YXR0ci5jIGIvZnMvY2VwaC94YXR0ci5jCmluZGV4IDhjOWViYTYuLmYyYjYyODYgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgveGF0dHIuYworKysgYi9mcy9jZXBoL3hhdHRyLmMKQEAgLTcwMyw2ICs3MDMsNyBAQAogCXN0cnVjdCBjZXBoX2lub2RlX3hhdHRyICp4YXR0ciA9IE5VTEw7CiAJaW50IGlzc3VlZDsKIAlpbnQgcmVxdWlyZWRfYmxvYl9zaXplOworCWludCBkaXJ0eTsKIAogCWlmIChjZXBoX3NuYXAoaW5vZGUpICE9IENFUEhfTk9TTkFQKQogCQlyZXR1cm4gLUVST0ZTOwpAQCAtNzYzLDExICs3NjQsMTIgQEAKIAlkb3V0KCJzZXR4YXR0ciAlcCBpc3N1ZWQgJXNcbiIsIGlub2RlLCBjZXBoX2NhcF9zdHJpbmcoaXNzdWVkKSk7CiAJZXJyID0gX19zZXRfeGF0dHIoY2ksIG5ld25hbWUsIG5hbWVfbGVuLCBuZXd2YWwsCiAJCQkgIHZhbF9sZW4sIDEsIDEsIDEsICZ4YXR0cik7Ci0JX19jZXBoX21hcmtfZGlydHlfY2FwcyhjaSwgQ0VQSF9DQVBfWEFUVFJfRVhDTCk7CisJZGlydHkgPSBfX2NlcGhfbWFya19kaXJ0eV9jYXBzKGNpLCBDRVBIX0NBUF9YQVRUUl9FWENMKTsKIAljaS0+aV94YXR0cnMuZGlydHkgPSB0cnVlOwogCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQorCWlmIChkaXJ0eSkKKwkJX19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBkaXJ0eSk7CiAJcmV0dXJuIGVycjsKIAogZG9fc3luYzoKQEAgLTgxMCw2ICs4MTIsNyBAQAogCXN0cnVjdCBjZXBoX3Z4YXR0cl9jYiAqdnhhdHRycyA9IGNlcGhfaW5vZGVfdnhhdHRycyhpbm9kZSk7CiAJaW50IGlzc3VlZDsKIAlpbnQgZXJyOworCWludCBkaXJ0eTsKIAogCWlmIChjZXBoX3NuYXAoaW5vZGUpICE9IENFUEhfTk9TTkFQKQogCQlyZXR1cm4gLUVST0ZTOwpAQCAtODMzLDEyICs4MzYsMTMgQEAKIAkJZ290byBkb19zeW5jOwogCiAJZXJyID0gX19yZW1vdmVfeGF0dHJfYnlfbmFtZShjZXBoX2lub2RlKGlub2RlKSwgbmFtZSk7Ci0JX19jZXBoX21hcmtfZGlydHlfY2FwcyhjaSwgQ0VQSF9DQVBfWEFUVFJfRVhDTCk7CisJZGlydHkgPSBfX2NlcGhfbWFya19kaXJ0eV9jYXBzKGNpLCBDRVBIX0NBUF9YQVRUUl9FWENMKTsKIAljaS0+aV94YXR0cnMuZGlydHkgPSB0cnVlOwogCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCisJaWYgKGRpcnR5KQorCQlfX21hcmtfaW5vZGVfZGlydHkoaW5vZGUsIGRpcnR5KTsKIAlyZXR1cm4gZXJyOwogZG9fc3luYzoKIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL0FVVEhPUlMgYi9mcy9jaWZzL0FVVEhPUlMKaW5kZXggN2Y3ZmEzYy4uZWE5NDBiMSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9BVVRIT1JTCisrKyBiL2ZzL2NpZnMvQVVUSE9SUwpAQCAtMzUsNyArMzUsNyBAQAogTWlrbG9zIFN6ZXJlZGkgCiBLYXplb24gdGVhbSBmb3IgdmFyaW91cyBmaXhlcyBlc3BlY2lhbGx5IGZvciAyLjQgdmVyc2lvbi4KIEFzc2VyIEZlcm5vIChDaGFuZ2UgTm90aWZ5IHN1cHBvcnQpCi1TaGFnZ3kgKERhdmUgS2xlaWthbXApIGZvciBpbnVtZXJhYmxlIHNtYWxsIGZzIHN1Z2dlc3Rpb25zIGFuZCBzb21lIGdvb2QgY2xlYW51cAorU2hhZ2d5IChEYXZlIEtsZWlrYW1wKSBmb3IgaW5udW1lcmFibGUgc21hbGwgZnMgc3VnZ2VzdGlvbnMgYW5kIHNvbWUgZ29vZCBjbGVhbnVwCiBHdW50ZXIgS3Vra3VrayAodGVzdGluZyBhbmQgc3VnZ2VzdGlvbnMgZm9yIHN1cHBvcnQgb2Ygb2xkIHNlcnZlcnMpCiBJZ29yIE1hbW1lZG92IChERlMgc3VwcG9ydCkKIEplZmYgTGF5dG9uIChtYW55LCBtYW55IGZpeGVzLCBhcyB3ZWxsIGFzIGdyZWF0IHdvcmsgb24gdGhlIGNpZnMgS2VyYmVyb3MgY29kZSkKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvUkVBRE1FIGIvZnMvY2lmcy9SRUFETUUKaW5kZXggZmUxNjgzNS4uNzRhYjE2NWYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvUkVBRE1FCisrKyBiL2ZzL2NpZnMvUkVBRE1FCkBAIC02ODUsMjIgKzY4NSw2IEBACiAJCQlzdXBwb3J0IGFuZCB3YW50IHRvIG1hcCB0aGUgdWlkIGFuZCBnaWQgZmllbGRzIAogCQkJdG8gdmFsdWVzIHN1cHBsaWVkIGF0IG1vdW50IChyYXRoZXIgdGhhbiB0aGUgCiAJCQlhY3R1YWwgdmFsdWVzLCB0aGVuIHNldCB0aGlzIHRvIHplcm8uIChkZWZhdWx0IDEpCi1FeHBlcmltZW50YWwgICAgICAgICAgICBXaGVuIHNldCB0byAxIHVzZWQgdG8gZW5hYmxlIGNlcnRhaW4gZXhwZXJpbWVudGFsCi0JCQlmZWF0dXJlcyAoY3VycmVudGx5IGVuYWJsZXMgbXVsdGlwYWdlIHdyaXRlcwotCQkJd2hlbiBzaWduaW5nIGlzIGVuYWJsZWQsIHRoZSBtdWx0aXBhZ2Ugd3JpdGUKLQkJCXBlcmZvcm1hbmNlIGVuaGFuY2VtZW50IHdhcyBkaXNhYmxlZCB3aGVuCi0JCQlzaWduaW5nIHR1cm5lZCBvbiBpbiBjYXNlIGJ1ZmZlciB3YXMgbW9kaWZpZWQKLQkJCWp1c3QgYmVmb3JlIGl0IHdhcyBzZW50LCBhbHNvIHRoaXMgZmxhZyB3aWxsCi0JCQliZSB1c2VkIHRvIHVzZSB0aGUgbmV3IGV4cGVyaW1lbnRhbCBkaXJlY3RvcnkgY2hhbmdlIAotCQkJbm90aWZpY2F0aW9uIGNvZGUpLiAgV2hlbiBzZXQgdG8gMiBlbmFibGVzCi0JCQlhbiBhZGRpdGlvbmFsIGV4cGVyaW1lbnRhbCBmZWF0dXJlLCAicmF3IG50bG1zc3AiCi0JCQlzZXNzaW9uIGVzdGFibGlzaG1lbnQgc3VwcG9ydCAod2hpY2ggYWxsb3dzCi0JCQlzcGVjaWZ5aW5nICJzZWM9bnRsbXNzcCIgb24gbW91bnQpLiBUaGUgTGludXggY2lmcwotCQkJbW9kdWxlIHdpbGwgdXNlIG50bG12MiBhdXRoZW50aWNhdGlvbiBlbmNhcHN1bGF0ZWQKLQkJCWluICJyYXcgbnRsbXNzcCIgKG5vdCB1c2luZyBTUE5FR08pIHdoZW4KLQkJCSJzZWM9bnRsbXNzcCIgaXMgc3BlY2lmaWVkIG9uIG1vdW50LgotCQkJVGhpcyBzdXBwb3J0IGFsc28gcmVxdWlyZXMgYnVpbGRpbmcgY2lmcyB3aXRoCi0JCQl0aGUgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGNvbmZpZ3VyYXRpb24gZmxhZy4KIAogVGhlc2UgZXhwZXJpbWVudGFsIGZlYXR1cmVzIGFuZCB0cmFjaW5nIGNhbiBiZSBlbmFibGVkIGJ5IGNoYW5naW5nIGZsYWdzIGluIAogL3Byb2MvZnMvY2lmcyAoYWZ0ZXIgdGhlIGNpZnMgbW9kdWxlIGhhcyBiZWVuIGluc3RhbGxlZCBvciBidWlsdCBpbnRvIHRoZSAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2FjaGUuYyBiL2ZzL2NpZnMvY2FjaGUuYwppbmRleCBlNjU0ZGZkLi41M2Q1N2EzIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NhY2hlLmMKKysrIGIvZnMvY2lmcy9jYWNoZS5jCkBAIC01MCw3ICs1MCw3IEBACiAgKi8KIHN0cnVjdCBjaWZzX3NlcnZlcl9rZXkgewogCXVpbnQxNl90CWZhbWlseTsJCS8qIGFkZHJlc3MgZmFtaWx5ICovCi0JdWludDE2X3QJcG9ydDsJCS8qIElQIHBvcnQgKi8KKwlfX2JlMTYJCXBvcnQ7CQkvKiBJUCBwb3J0ICovCiAJdW5pb24gewogCQlzdHJ1Y3QgaW5fYWRkcglpcHY0X2FkZHI7CiAJCXN0cnVjdCBpbjZfYWRkcglpcHY2X2FkZHI7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfZGVidWcuYyBiL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jCmluZGV4IDY1ODI5ZDMuLjMwZDAxYmMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jCisrKyBiL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jCkBAIC00MjMsNyArNDIzLDYgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNlU01CX3Byb2NfZm9wczsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNpZnNfbXVsdGl1c2VyX21vdW50X3Byb2NfZm9wczsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNpZnNfc2VjdXJpdHlfZmxhZ3NfcHJvY19mb3BzOwotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2lmc19leHBlcmltZW50YWxfcHJvY19mb3BzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2lmc19saW51eF9leHRfcHJvY19mb3BzOwogCiB2b2lkCkBAIC00NDEsOCArNDQwLDYgQEAKIAlwcm9jX2NyZWF0ZSgiY2lmc0ZZSSIsIDAsIHByb2NfZnNfY2lmcywgJmNpZnNGWUlfcHJvY19mb3BzKTsKIAlwcm9jX2NyZWF0ZSgidHJhY2VTTUIiLCAwLCBwcm9jX2ZzX2NpZnMsICZ0cmFjZVNNQl9wcm9jX2ZvcHMpOwogCXByb2NfY3JlYXRlKCJPcGxvY2tFbmFibGVkIiwgMCwgcHJvY19mc19jaWZzLCAmY2lmc19vcGxvY2tfcHJvY19mb3BzKTsKLQlwcm9jX2NyZWF0ZSgiRXhwZXJpbWVudGFsIiwgMCwgcHJvY19mc19jaWZzLAotCQkgICAgJmNpZnNfZXhwZXJpbWVudGFsX3Byb2NfZm9wcyk7CiAJcHJvY19jcmVhdGUoIkxpbnV4RXh0ZW5zaW9uc0VuYWJsZWQiLCAwLCBwcm9jX2ZzX2NpZnMsCiAJCSAgICAmY2lmc19saW51eF9leHRfcHJvY19mb3BzKTsKIAlwcm9jX2NyZWF0ZSgiTXVsdGl1c2VyTW91bnQiLCAwLCBwcm9jX2ZzX2NpZnMsCkBAIC00NjksNyArNDY2LDYgQEAKIAlyZW1vdmVfcHJvY19lbnRyeSgiT3Bsb2NrRW5hYmxlZCIsIHByb2NfZnNfY2lmcyk7CiAJcmVtb3ZlX3Byb2NfZW50cnkoIlNlY3VyaXR5RmxhZ3MiLCBwcm9jX2ZzX2NpZnMpOwogCXJlbW92ZV9wcm9jX2VudHJ5KCJMaW51eEV4dGVuc2lvbnNFbmFibGVkIiwgcHJvY19mc19jaWZzKTsKLQlyZW1vdmVfcHJvY19lbnRyeSgiRXhwZXJpbWVudGFsIiwgcHJvY19mc19jaWZzKTsKIAlyZW1vdmVfcHJvY19lbnRyeSgiTG9va3VwQ2FjaGVFbmFibGVkIiwgcHJvY19mc19jaWZzKTsKIAlyZW1vdmVfcHJvY19lbnRyeSgiZnMvY2lmcyIsIE5VTEwpOwogfQpAQCAtNTUwLDQ1ICs1NDYsNiBAQAogCS53cml0ZQkJPSBjaWZzX29wbG9ja19wcm9jX3dyaXRlLAogfTsKIAotc3RhdGljIGludCBjaWZzX2V4cGVyaW1lbnRhbF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQotewotCXNlcV9wcmludGYobSwgIiVkXG4iLCBleHBlcmltRW5hYmxlZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY2lmc19leHBlcmltZW50YWxfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBjaWZzX2V4cGVyaW1lbnRhbF9wcm9jX3Nob3csIE5VTEwpOwotfQotCi1zdGF0aWMgc3NpemVfdCBjaWZzX2V4cGVyaW1lbnRhbF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAotCQljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQljaGFyIGM7Ci0JaW50IHJjOwotCi0JcmMgPSBnZXRfdXNlcihjLCBidWZmZXIpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCWlmIChjID09ICcwJyB8fCBjID09ICduJyB8fCBjID09ICdOJykKLQkJZXhwZXJpbUVuYWJsZWQgPSAwOwotCWVsc2UgaWYgKGMgPT0gJzEnIHx8IGMgPT0gJ3knIHx8IGMgPT0gJ1knKQotCQlleHBlcmltRW5hYmxlZCA9IDE7Ci0JZWxzZSBpZiAoYyA9PSAnMicpCi0JCWV4cGVyaW1FbmFibGVkID0gMjsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2lmc19leHBlcmltZW50YWxfcHJvY19mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbgkJPSBjaWZzX2V4cGVyaW1lbnRhbF9wcm9jX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKLQkud3JpdGUJCT0gY2lmc19leHBlcmltZW50YWxfcHJvY193cml0ZSwKLX07Ci0KIHN0YXRpYyBpbnQgY2lmc19saW51eF9leHRfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAlzZXFfcHJpbnRmKG0sICIlZFxuIiwgbGludXhFeHRFbmFibGVkKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMgYi9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jCmluZGV4IDBhMjY1YWQuLjJiNjhhYzUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMKKysrIGIvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYwpAQCAtNTMsNyArNTMsNyBAQAogICoKICAqIEV4dHJhY3RzIHNoYXJlbmFtZSBmb3JtIGZ1bGwgVU5DLgogICogaS5lLiBzdHJpcHMgZnJvbSBVTkMgdHJhaWxpbmcgcGF0aCB0aGF0IGlzIG5vdCBwYXJ0IG9mIHNoYXJlCi0gKiBuYW1lIGFuZCBmaXh1cCBtaXNzaW5nICdcJyBpbiB0aGUgYmVnaW5pbmcgb2YgREZTIG5vZGUgcmVmZmVyYWwKKyAqIG5hbWUgYW5kIGZpeHVwIG1pc3NpbmcgJ1wnIGluIHRoZSBiZWdpbm5pbmcgb2YgREZTIG5vZGUgcmVmZmVyYWwKICAqIGlmIG5lY2Vzc2FyeS4KICAqIFJldHVybnMgcG9pbnRlciB0byBzaGFyZSBuYW1lIG9uIHN1Y2Nlc3Mgb3IgRVJSX1BUUiBvbiBlcnJvci4KICAqIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyByZXR1cm5lZCBzdHJpbmcuCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfc3BuZWdvLmMgYi9mcy9jaWZzL2NpZnNfc3BuZWdvLmMKaW5kZXggNGRmYmE4Mi4uMzNkMjIxMyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX3NwbmVnby5jCisrKyBiL2ZzL2NpZnMvY2lmc19zcG5lZ28uYwpAQCAtMTEzLDcgKzExMyw3IEBACiAJCSAgIE1BWF9NRUNIX1NUUl9MRU4gKwogCQkgICBVSURfS0VZX0xFTiArIChzaXplb2YodWlkX3QpICogMikgKwogCQkgICBDUkVEVUlEX0tFWV9MRU4gKyAoc2l6ZW9mKHVpZF90KSAqIDIpICsKLQkJICAgVVNFUl9LRVlfTEVOICsgc3RybGVuKHNlc0luZm8tPnVzZXJOYW1lKSArCisJCSAgIFVTRVJfS0VZX0xFTiArIHN0cmxlbihzZXNJbmZvLT51c2VyX25hbWUpICsKIAkJICAgUElEX0tFWV9MRU4gKyAoc2l6ZW9mKHBpZF90KSAqIDIpICsgMTsKIAogCXNwbmVnb19rZXkgPSBFUlJfUFRSKC1FTk9NRU0pOwpAQCAtMTUzLDcgKzE1Myw3IEBACiAJc3ByaW50ZihkcCwgIjtjcmVkdWlkPTB4JXgiLCBzZXNJbmZvLT5jcmVkX3VpZCk7CiAKIAlkcCA9IGRlc2NyaXB0aW9uICsgc3RybGVuKGRlc2NyaXB0aW9uKTsKLQlzcHJpbnRmKGRwLCAiO3VzZXI9JXMiLCBzZXNJbmZvLT51c2VyTmFtZSk7CisJc3ByaW50ZihkcCwgIjt1c2VyPSVzIiwgc2VzSW5mby0+dXNlcl9uYW1lKTsKIAogCWRwID0gZGVzY3JpcHRpb24gKyBzdHJsZW4oZGVzY3JpcHRpb24pOwogCXNwcmludGYoZHAsICI7cGlkPTB4JXgiLCBjdXJyZW50LT5waWQpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzX3VuaWNvZGUuYyBiL2ZzL2NpZnMvY2lmc191bmljb2RlLmMKaW5kZXggZmMwZmQ0Zi4uMWIyZTE4MCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX3VuaWNvZGUuYworKysgYi9mcy9jaWZzL2NpZnNfdW5pY29kZS5jCkBAIC05MCw3ICs5MCw3IEBACiAJY2FzZSBVTklfQ09MT046CiAJCSp0YXJnZXQgPSAnOic7CiAJCWJyZWFrOwotCWNhc2UgVU5JX0FTVEVSSUs6CisJY2FzZSBVTklfQVNURVJJU0s6CiAJCSp0YXJnZXQgPSAnKic7CiAJCWJyZWFrOwogCWNhc2UgVU5JX1FVRVNUSU9OOgpAQCAtMjY0LDQwICsyNjQsNDEgQEAKICAqIG5hbWVzIGFyZSBsaXR0bGUgZW5kaWFuIDE2IGJpdCBVbmljb2RlIG9uIHRoZSB3aXJlCiAgKi8KIGludAotY2lmc0NvbnZlcnRUb1VDUyhfX2xlMTYgKnRhcmdldCwgY29uc3QgY2hhciAqc291cmNlLCBpbnQgbWF4bGVuLAorY2lmc0NvbnZlcnRUb1VDUyhfX2xlMTYgKnRhcmdldCwgY29uc3QgY2hhciAqc291cmNlLCBpbnQgc3JjbGVuLAogCQkgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqY3AsIGludCBtYXBDaGFycykKIHsKIAlpbnQgaSwgaiwgY2hhcmxlbjsKLQlpbnQgbGVuX3JlbWFpbmluZyA9IG1heGxlbjsKIAljaGFyIHNyY19jaGFyOwotCV9fdTE2IHRlbXA7CisJX19sZTE2IGRzdF9jaGFyOworCXdjaGFyX3QgdG1wOwogCiAJaWYgKCFtYXBDaGFycykKIAkJcmV0dXJuIGNpZnNfc3RydG9VQ1ModGFyZ2V0LCBzb3VyY2UsIFBBVEhfTUFYLCBjcCk7CiAKLQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IG1heGxlbjsgaisrKSB7CisJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBzcmNsZW47IGorKykgewogCQlzcmNfY2hhciA9IHNvdXJjZVtpXTsKKwkJY2hhcmxlbiA9IDE7CiAJCXN3aXRjaCAoc3JjX2NoYXIpIHsKIAkJY2FzZSAwOgotCQkJcHV0X3VuYWxpZ25lZF9sZTE2KDAsICZ0YXJnZXRbal0pOworCQkJcHV0X3VuYWxpZ25lZCgwLCAmdGFyZ2V0W2pdKTsKIAkJCWdvdG8gY3RvVUNTX291dDsKIAkJY2FzZSAnOic6Ci0JCQl0ZW1wID0gVU5JX0NPTE9OOworCQkJZHN0X2NoYXIgPSBjcHVfdG9fbGUxNihVTklfQ09MT04pOwogCQkJYnJlYWs7CiAJCWNhc2UgJyonOgotCQkJdGVtcCA9IFVOSV9BU1RFUklLOworCQkJZHN0X2NoYXIgPSBjcHVfdG9fbGUxNihVTklfQVNURVJJU0spOwogCQkJYnJlYWs7CiAJCWNhc2UgJz8nOgotCQkJdGVtcCA9IFVOSV9RVUVTVElPTjsKKwkJCWRzdF9jaGFyID0gY3B1X3RvX2xlMTYoVU5JX1FVRVNUSU9OKTsKIAkJCWJyZWFrOwogCQljYXNlICc8JzoKLQkJCXRlbXAgPSBVTklfTEVTU1RIQU47CisJCQlkc3RfY2hhciA9IGNwdV90b19sZTE2KFVOSV9MRVNTVEhBTik7CiAJCQlicmVhazsKIAkJY2FzZSAnPic6Ci0JCQl0ZW1wID0gVU5JX0dSVFJUSEFOOworCQkJZHN0X2NoYXIgPSBjcHVfdG9fbGUxNihVTklfR1JUUlRIQU4pOwogCQkJYnJlYWs7CiAJCWNhc2UgJ3wnOgotCQkJdGVtcCA9IFVOSV9QSVBFOworCQkJZHN0X2NoYXIgPSBjcHVfdG9fbGUxNihVTklfUElQRSk7CiAJCQlicmVhazsKIAkJLyoKIAkJICogRklYTUU6IFdlIGNhbiBub3QgaGFuZGxlIHJlbWFwcGluZyBiYWNrc2xhc2ggKFVOSV9TTEFTSCkKQEAgLTMwNSwyOCArMzA2LDI0IEBACiAJCSAqIGFzIHRoZXkgdXNlIGJhY2tzbGFzaCBhcyBzZXBhcmF0b3IuCiAJCSAqLwogCQlkZWZhdWx0OgotCQkJY2hhcmxlbiA9IGNwLT5jaGFyMnVuaShzb3VyY2UraSwgbGVuX3JlbWFpbmluZywKLQkJCQkJCSZ0ZW1wKTsKKwkJCWNoYXJsZW4gPSBjcC0+Y2hhcjJ1bmkoc291cmNlICsgaSwgc3JjbGVuIC0gaSwgJnRtcCk7CisJCQlkc3RfY2hhciA9IGNwdV90b19sZTE2KHRtcCk7CisKIAkJCS8qCiAJCQkgKiBpZiBubyBtYXRjaCwgdXNlIHF1ZXN0aW9uIG1hcmssIHdoaWNoIGF0IGxlYXN0IGluCiAJCQkgKiBzb21lIGNhc2VzIHNlcnZlcyBhcyB3aWxkIGNhcmQKIAkJCSAqLwogCQkJaWYgKGNoYXJsZW4gPCAxKSB7Ci0JCQkJdGVtcCA9IDB4MDAzZjsKKwkJCQlkc3RfY2hhciA9IGNwdV90b19sZTE2KDB4MDAzZik7CiAJCQkJY2hhcmxlbiA9IDE7CiAJCQl9Ci0JCQlsZW5fcmVtYWluaW5nIC09IGNoYXJsZW47Ci0JCQkvKgotCQkJICogY2hhcmFjdGVyIG1heSB0YWtlIG1vcmUgdGhhbiBvbmUgYnl0ZSBpbiB0aGUgc291cmNlCi0JCQkgKiBzdHJpbmcsIGJ1dCB3aWxsIHRha2UgZXhhY3RseSB0d28gYnl0ZXMgaW4gdGhlCi0JCQkgKiB0YXJnZXQgc3RyaW5nCi0JCQkgKi8KLQkJCWkgKz0gY2hhcmxlbjsKLQkJCWNvbnRpbnVlOwogCQl9Ci0JCXB1dF91bmFsaWduZWRfbGUxNih0ZW1wLCAmdGFyZ2V0W2pdKTsKLQkJaSsrOyAvKiBtb3ZlIHRvIG5leHQgY2hhciBpbiBzb3VyY2Ugc3RyaW5nICovCi0JCWxlbl9yZW1haW5pbmctLTsKKwkJLyoKKwkJICogY2hhcmFjdGVyIG1heSB0YWtlIG1vcmUgdGhhbiBvbmUgYnl0ZSBpbiB0aGUgc291cmNlIHN0cmluZywKKwkJICogYnV0IHdpbGwgdGFrZSBleGFjdGx5IHR3byBieXRlcyBpbiB0aGUgdGFyZ2V0IHN0cmluZworCQkgKi8KKwkJaSArPSBjaGFybGVuOworCQlwdXRfdW5hbGlnbmVkKGRzdF9jaGFyLCAmdGFyZ2V0W2pdKTsKIAl9CiAKIGN0b1VDU19vdXQ6CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfdW5pY29kZS5oIGIvZnMvY2lmcy9jaWZzX3VuaWNvZGUuaAppbmRleCA3ZmU2YjUyLi42NDRkZDg4MiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX3VuaWNvZGUuaAorKysgYi9mcy9jaWZzL2NpZnNfdW5pY29kZS5oCkBAIC00NCw3ICs0NCw3IEBACiAgKiByZXNlcnZlZCBzeW1ib2xzIChhbG9uZyB3aXRoIFwgYW5kIC8pLCBvdGhlcndpc2UgaWxsZWdhbCB0byBzdG9yZQogICogaW4gZmlsZW5hbWVzIGluIE5URlMKICAqLwotI2RlZmluZSBVTklfQVNURVJJSyAgICAgKF9fdTE2KSAoJyonICsgMHhGMDAwKQorI2RlZmluZSBVTklfQVNURVJJU0sgICAgKF9fdTE2KSAoJyonICsgMHhGMDAwKQogI2RlZmluZSBVTklfUVVFU1RJT04gICAgKF9fdTE2KSAoJz8nICsgMHhGMDAwKQogI2RlZmluZSBVTklfQ09MT04gICAgICAgKF9fdTE2KSAoJzonICsgMHhGMDAwKQogI2RlZmluZSBVTklfR1JUUlRIQU4gICAgKF9fdTE2KSAoJz4nICsgMHhGMDAwKQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZW5jcnlwdC5jIGIvZnMvY2lmcy9jaWZzZW5jcnlwdC5jCmluZGV4IGE1MTU4NWYuLmQxYTAxNmIgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYworKysgYi9mcy9jaWZzL2NpZnNlbmNyeXB0LmMKQEAgLTMwLDEyICszMCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAKLS8qIENhbGN1bGF0ZSBhbmQgcmV0dXJuIHRoZSBDSUZTIHNpZ25hdHVyZSBiYXNlZCBvbiB0aGUgbWFjIGtleSBhbmQgU01CIFBEVSAqLwotLyogdGhlIDE2IGJ5dGUgc2lnbmF0dXJlIG11c3QgYmUgYWxsb2NhdGVkIGJ5IHRoZSBjYWxsZXIgICovCi0vKiBOb3RlIHdlIG9ubHkgdXNlIHRoZSAxc3QgZWlnaHQgYnl0ZXMgKi8KLS8qIE5vdGUgdGhhdCB0aGUgc21iIGhlYWRlciBzaWduYXR1cmUgZmllbGQgb24gaW5wdXQgY29udGFpbnMgdGhlCi0Jc2VxdWVuY2UgbnVtYmVyIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCAqLwotCisvKgorICogQ2FsY3VsYXRlIGFuZCByZXR1cm4gdGhlIENJRlMgc2lnbmF0dXJlIGJhc2VkIG9uIHRoZSBtYWMga2V5IGFuZCBTTUIgUERVLgorICogVGhlIDE2IGJ5dGUgc2lnbmF0dXJlIG11c3QgYmUgYWxsb2NhdGVkIGJ5IHRoZSBjYWxsZXIuIE5vdGUgd2Ugb25seSB1c2UgdGhlCisgKiAxc3QgZWlnaHQgYnl0ZXMgYW5kIHRoYXQgdGhlIHNtYiBoZWFkZXIgc2lnbmF0dXJlIGZpZWxkIG9uIGlucHV0IGNvbnRhaW5zCisgKiB0aGUgc2VxdWVuY2UgbnVtYmVyIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gQWxzbywgdGhpcyBmdW5jdGlvbgorICogc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBzZXJ2ZXItPnNydl9tdXRleCBoZWxkLgorICovCiBzdGF0aWMgaW50IGNpZnNfY2FsY3VsYXRlX3NpZ25hdHVyZShjb25zdCBzdHJ1Y3Qgc21iX2hkciAqY2lmc19wZHUsCiAJCQkJc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLCBjaGFyICpzaWduYXR1cmUpCiB7CkBAIC0yMDksOCArMjEwLDEwIEBACiAJCQkJCWNwdV90b19sZTMyKGV4cGVjdGVkX3NlcXVlbmNlX251bWJlcik7CiAJY2lmc19wZHUtPlNpZ25hdHVyZS5TZXF1ZW5jZS5SZXNlcnZlZCA9IDA7CiAKKwltdXRleF9sb2NrKCZzZXJ2ZXItPnNydl9tdXRleCk7CiAJcmMgPSBjaWZzX2NhbGN1bGF0ZV9zaWduYXR1cmUoY2lmc19wZHUsIHNlcnZlciwKIAkJd2hhdF93ZV90aGlua19zaWdfc2hvdWxkX2JlKTsKKwltdXRleF91bmxvY2soJnNlcnZlci0+c3J2X211dGV4KTsKIAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwpAQCAtNDY5LDE1ICs0NzIsMTUgQEAKIAkJcmV0dXJuIHJjOwogCX0KIAotCS8qIGNvbnZlcnQgc2VzLT51c2VyTmFtZSB0byB1bmljb2RlIGFuZCB1cHBlcmNhc2UgKi8KLQlsZW4gPSBzdHJsZW4oc2VzLT51c2VyTmFtZSk7CisJLyogY29udmVydCBzZXMtPnVzZXJfbmFtZSB0byB1bmljb2RlIGFuZCB1cHBlcmNhc2UgKi8KKwlsZW4gPSBzdHJsZW4oc2VzLT51c2VyX25hbWUpOwogCXVzZXIgPSBrbWFsbG9jKDIgKyAobGVuICogMiksIEdGUF9LRVJORUwpOwogCWlmICh1c2VyID09IE5VTEwpIHsKIAkJY0VSUk9SKDEsICJjYWxjX250bG12Ml9oYXNoOiB1c2VyIG1lbSBhbGxvYyBmYWlsdXJlXG4iKTsKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGNhbGNfZXhpdF8yOwogCX0KLQlsZW4gPSBjaWZzX3N0cnRvVUNTKChfX2xlMTYgKil1c2VyLCBzZXMtPnVzZXJOYW1lLCBsZW4sIG5sc19jcCk7CisJbGVuID0gY2lmc19zdHJ0b1VDUygoX19sZTE2ICopdXNlciwgc2VzLT51c2VyX25hbWUsIGxlbiwgbmxzX2NwKTsKIAlVbmlTdHJ1cHIodXNlcik7CiAKIAljcnlwdG9fc2hhc2hfdXBkYXRlKCZzZXMtPnNlcnZlci0+c2VjbWVjaC5zZGVzY2htYWNtZDUtPnNoYXNoLApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuYyBiL2ZzL2NpZnMvY2lmc2ZzLmMKaW5kZXggZjI5NzAxMy4uNWM0MTJiMyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuYworKysgYi9mcy9jaWZzL2NpZnNmcy5jCkBAIC01Myw3ICs1Myw2IEBACiBpbnQgY2lmc0VSUk9SID0gMTsKIGludCB0cmFjZVNNQiA9IDA7CiB1bnNpZ25lZCBpbnQgb3Bsb2NrRW5hYmxlZCA9IDE7Ci11bnNpZ25lZCBpbnQgZXhwZXJpbUVuYWJsZWQgPSAwOwogdW5zaWduZWQgaW50IGxpbnV4RXh0RW5hYmxlZCA9IDE7CiB1bnNpZ25lZCBpbnQgbG9va3VwQ2FjaGVFbmFibGVkID0gMTsKIHVuc2lnbmVkIGludCBtdWx0aXVzZXJfbW91bnQgPSAwOwpAQCAtMTI3LDYgKzEyNiw3IEBACiAJCWtmcmVlKGNpZnNfc2IpOwogCQlyZXR1cm4gcmM7CiAJfQorCWNpZnNfc2ItPmJkaS5yYV9wYWdlcyA9IGRlZmF1bHRfYmFja2luZ19kZXZfaW5mby5yYV9wYWdlczsKIAogI2lmZGVmIENPTkZJR19DSUZTX0RGU19VUENBTEwKIAkvKiBjb3B5IG1vdW50IHBhcmFtcyB0byBzYiBmb3IgdXNlIGluIHN1Ym1vdW50cyAqLwpAQCAtNDA5LDggKzQwOSw4IEBACiAKIAlpZiAoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX01VTFRJVVNFUikKIAkJc2VxX3ByaW50ZihzLCAiLG11bHRpdXNlciIpOwotCWVsc2UgaWYgKHRjb24tPnNlcy0+dXNlck5hbWUpCi0JCXNlcV9wcmludGYocywgIix1c2VybmFtZT0lcyIsIHRjb24tPnNlcy0+dXNlck5hbWUpOworCWVsc2UgaWYgKHRjb24tPnNlcy0+dXNlcl9uYW1lKQorCQlzZXFfcHJpbnRmKHMsICIsdXNlcm5hbWU9JXMiLCB0Y29uLT5zZXMtPnVzZXJfbmFtZSk7CiAKIAlpZiAodGNvbi0+c2VzLT5kb21haW5OYW1lKQogCQlzZXFfcHJpbnRmKHMsICIsZG9tYWluPSVzIiwgdGNvbi0+c2VzLT5kb21haW5OYW1lKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2dsb2IuaCBiL2ZzL2NpZnMvY2lmc2dsb2IuaAppbmRleCAxN2FmYjBmLi5hNWQxMTA2IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNnbG9iLmgKKysrIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCkBAIC0zNywxMCArMzcsOSBAQAogCiAjZGVmaW5lIE1BWF9UUkVFX1NJWkUgKDIgKyBNQVhfU0VSVkVSX1NJWkUgKyAxICsgTUFYX1NIQVJFX1NJWkUgKyAxKQogI2RlZmluZSBNQVhfU0VSVkVSX1NJWkUgMTUKLSNkZWZpbmUgTUFYX1NIQVJFX1NJWkUgIDY0CS8qIHVzZWQgdG8gYmUgMjAsIHRoaXMgc2hvdWxkIHN0aWxsIGJlIGVub3VnaCAqLwotI2RlZmluZSBNQVhfVVNFUk5BTUVfU0laRSAzMgkvKiAzMiBpcyB0byBhbGxvdyBmb3IgMTUgY2hhciBuYW1lcyArIG51bGwKLQkJCQkgICB0ZXJtaW5hdGlvbiB0aGVuICoyIGZvciB1bmljb2RlIHZlcnNpb25zICovCi0jZGVmaW5lIE1BWF9QQVNTV09SRF9TSVpFIDUxMiAgLyogbWF4IGZvciB3aW5kb3dzIHNlZW1zIHRvIGJlIDI1NiB3aWRlIGNoYXJzICovCisjZGVmaW5lIE1BWF9TSEFSRV9TSVpFIDgwCisjZGVmaW5lIE1BWF9VU0VSTkFNRV9TSVpFIDI1NgkvKiByZWFzb25hYmxlIG1heGltdW0gZm9yIGN1cnJlbnQgc2VydmVycyAqLworI2RlZmluZSBNQVhfUEFTU1dPUkRfU0laRSA1MTIJLyogbWF4IGZvciB3aW5kb3dzIHNlZW1zIHRvIGJlIDI1NiB3aWRlIGNoYXJzICovCiAKICNkZWZpbmUgQ0lGU19NSU5fUkNWX1BPT0wgNAogCkBAIC05Miw3ICs5MSw4IEBACiAJQ2lmc05ldyA9IDAsCiAJQ2lmc0dvb2QsCiAJQ2lmc0V4aXRpbmcsCi0JQ2lmc05lZWRSZWNvbm5lY3QKKwlDaWZzTmVlZFJlY29ubmVjdCwKKwlDaWZzTmVlZE5lZ290aWF0ZQogfTsKIAogZW51bSBzZWN1cml0eUVudW0gewpAQCAtMjc0LDcgKzI3NCw3IEBACiAJaW50IGNhcGFiaWxpdGllczsKIAljaGFyIHNlcnZlck5hbWVbU0VSVkVSX05BTUVfTEVOX1dJVEhfTlVMTCAqIDJdOwkvKiBCQiBtYWtlIGJpZ2dlciBmb3IKIAkJCQlUQ1AgbmFtZXMgLSB3aWxsIGlwdjYgYW5kIHNjdHAgYWRkcmVzc2VzIGZpdD8gKi8KLQljaGFyIHVzZXJOYW1lW01BWF9VU0VSTkFNRV9TSVpFICsgMV07CisJY2hhciAqdXNlcl9uYW1lOwogCWNoYXIgKmRvbWFpbk5hbWU7CiAJY2hhciAqcGFzc3dvcmQ7CiAJc3RydWN0IHNlc3Npb25fa2V5IGF1dGhfa2V5OwpAQCAtODE3LDcgKzgxNyw2IEBACiAJCQkJaGF2ZSB0aGUgdWlkL3Bhc3N3b3JkIG9yIEtlcmJlcm9zIGNyZWRlbnRpYWwKIAkJCQlvciBlcXVpdmFsZW50IGZvciBjdXJyZW50IHVzZXIgKi8KIEdMT0JBTF9FWFRFUk4gdW5zaWduZWQgaW50IG9wbG9ja0VuYWJsZWQ7Ci1HTE9CQUxfRVhURVJOIHVuc2lnbmVkIGludCBleHBlcmltRW5hYmxlZDsKIEdMT0JBTF9FWFRFUk4gdW5zaWduZWQgaW50IGxvb2t1cENhY2hlRW5hYmxlZDsKIEdMT0JBTF9FWFRFUk4gdW5zaWduZWQgaW50IGdsb2JhbF9zZWNmbGFnczsJLyogaWYgb24sIHNlc3Npb24gc2V0dXAgc2VudAogCQkJCXdpdGggbW9yZSBzZWN1cmUgbnRsbXNzcDIgY2hhbGxlbmdlL3Jlc3AgKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3NtYi5jIGIvZnMvY2lmcy9jaWZzc21iLmMKaW5kZXggOTA0YWE0Ny4uZGY5NTliYSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzc21iLmMKKysrIGIvZnMvY2lmcy9jaWZzc21iLmMKQEAgLTE0Miw5ICsxNDIsOSBAQAogCSAqLwogCXdoaWxlIChzZXJ2ZXItPnRjcFN0YXR1cyA9PSBDaWZzTmVlZFJlY29ubmVjdCkgewogCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChzZXJ2ZXItPnJlc3BvbnNlX3EsCi0JCQkoc2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc0dvb2QpLCAxMCAqIEhaKTsKKwkJCShzZXJ2ZXItPnRjcFN0YXR1cyAhPSBDaWZzTmVlZFJlY29ubmVjdCksIDEwICogSFopOwogCi0JCS8qIGlzIFRDUCBzZXNzaW9uIGlzIHJlZXN0YWJsaXNoZWQgbm93ID8qLworCQkvKiBhcmUgd2Ugc3RpbGwgdHJ5aW5nIHRvIHJlY29ubmVjdD8gKi8KIAkJaWYgKHNlcnZlci0+dGNwU3RhdHVzICE9IENpZnNOZWVkUmVjb25uZWN0KQogCQkJYnJlYWs7CiAKQEAgLTcyOSw3ICs3MjksNyBAQAogCQlyZXR1cm4gcmM7CiAKIAkvKiBzZXQgdXAgZWNobyByZXF1ZXN0ICovCi0Jc21iLT5oZHIuVGlkID0gY3B1X3RvX2xlMTYoMHhmZmZmKTsKKwlzbWItPmhkci5UaWQgPSAweGZmZmY7CiAJc21iLT5oZHIuV29yZENvdW50ID0gMTsKIAlwdXRfdW5hbGlnbmVkX2xlMTYoMSwgJnNtYi0+RWNob0NvdW50KTsKIAlwdXRfYmNjX2xlKDEsICZzbWItPmhkcik7CkBAIC0xODg0LDEwICsxODg0LDEwIEBACiAJCQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoQ0lGU19XUkxDSykpCiAJCQkJcExvY2tEYXRhLT5mbF90eXBlID0gRl9XUkxDSzsKIAotCQkJcExvY2tEYXRhLT5mbF9zdGFydCA9IHBhcm1fZGF0YS0+c3RhcnQ7Ci0JCQlwTG9ja0RhdGEtPmZsX2VuZCA9IHBhcm1fZGF0YS0+c3RhcnQgKwotCQkJCQkJcGFybV9kYXRhLT5sZW5ndGggLSAxOwotCQkJcExvY2tEYXRhLT5mbF9waWQgPSBwYXJtX2RhdGEtPnBpZDsKKwkJCXBMb2NrRGF0YS0+Zmxfc3RhcnQgPSBsZTY0X3RvX2NwdShwYXJtX2RhdGEtPnN0YXJ0KTsKKwkJCXBMb2NrRGF0YS0+ZmxfZW5kID0gcExvY2tEYXRhLT5mbF9zdGFydCArCisJCQkJCWxlNjRfdG9fY3B1KHBhcm1fZGF0YS0+bGVuZ3RoKSAtIDE7CisJCQlwTG9ja0RhdGEtPmZsX3BpZCA9IGxlMzJfdG9fY3B1KHBhcm1fZGF0YS0+cGlkKTsKIAkJfQogCX0KIApAQCAtNTI0Nyw3ICs1MjQ3LDcgQEAKIAkgKiBTYW1iYSBzZXJ2ZXIgaWdub3JlcyBzZXQgb2YgZmlsZSBzaXplIHRvIHplcm8gZHVlIHRvIGJ1Z3MgaW4gc29tZQogCSAqIG9sZGVyIGNsaWVudHMsIGJ1dCB3ZSBzaG91bGQgYmUgcHJlY2lzZSAtIHdlIHVzZSBTZXRGaWxlU2l6ZSB0bwogCSAqIHNldCBmaWxlIHNpemUgYW5kIGRvIG5vdCB3YW50IHRvIHRydW5jYXRlIGZpbGUgc2l6ZSB0byB6ZXJvCi0JICogYWNjaWRlbnRseSBhcyBoYXBwZW5lZCBvbiBvbmUgU2FtYmEgc2VydmVyIGJldGEgYnkgcHV0dGluZworCSAqIGFjY2lkZW50YWxseSBhcyBoYXBwZW5lZCBvbiBvbmUgU2FtYmEgc2VydmVyIGJldGEgYnkgcHV0dGluZwogCSAqIHplcm8gaW5zdGVhZCBvZiAtMSBoZXJlCiAJICovCiAJZGF0YV9vZmZzZXQtPkVuZE9mRmlsZSA9IGNwdV90b19sZTY0KE5PX0NIQU5HRV82NCk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2Nvbm5lY3QuYyBiL2ZzL2NpZnMvY29ubmVjdC5jCmluZGV4IDhkNmMxN2EuLjI3NzI2MmEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY29ubmVjdC5jCisrKyBiL2ZzL2NpZnMvY29ubmVjdC5jCkBAIC0xOTksOCArMTk5LDcgQEAKIAl9CiAJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKIAotCXdoaWxlICgoc2VydmVyLT50Y3BTdGF0dXMgIT0gQ2lmc0V4aXRpbmcpICYmCi0JICAgICAgIChzZXJ2ZXItPnRjcFN0YXR1cyAhPSBDaWZzR29vZCkpIHsKKwl3aGlsZSAoc2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc05lZWRSZWNvbm5lY3QpIHsKIAkJdHJ5X3RvX2ZyZWV6ZSgpOwogCiAJCS8qIHdlIHNob3VsZCB0cnkgb25seSB0aGUgcG9ydCB3ZSBjb25uZWN0ZWQgdG8gYmVmb3JlICovCkBAIC0yMTIsNyArMjExLDcgQEAKIAkJCWF0b21pY19pbmMoJnRjcFNlc1JlY29ubmVjdENvdW50KTsKIAkJCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOwogCQkJaWYgKHNlcnZlci0+dGNwU3RhdHVzICE9IENpZnNFeGl0aW5nKQotCQkJCXNlcnZlci0+dGNwU3RhdHVzID0gQ2lmc0dvb2Q7CisJCQkJc2VydmVyLT50Y3BTdGF0dXMgPSBDaWZzTmVlZE5lZ290aWF0ZTsKIAkJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAJCX0KIAl9CkBAIC0yNDgsMjQgKzI0NywyNCBAQAogCXRvdGFsX2RhdGFfc2l6ZSA9IGdldF91bmFsaWduZWRfbGUxNigmcFNNQnQtPnQyX3JzcC5Ub3RhbERhdGFDb3VudCk7CiAJZGF0YV9pbl90aGlzX3JzcCA9IGdldF91bmFsaWduZWRfbGUxNigmcFNNQnQtPnQyX3JzcC5EYXRhQ291bnQpOwogCi0JcmVtYWluaW5nID0gdG90YWxfZGF0YV9zaXplIC0gZGF0YV9pbl90aGlzX3JzcDsKLQotCWlmIChyZW1haW5pbmcgPT0gMCkKKwlpZiAodG90YWxfZGF0YV9zaXplID09IGRhdGFfaW5fdGhpc19yc3ApCiAJCXJldHVybiAwOwotCWVsc2UgaWYgKHJlbWFpbmluZyA8IDApIHsKKwllbHNlIGlmICh0b3RhbF9kYXRhX3NpemUgPCBkYXRhX2luX3RoaXNfcnNwKSB7CiAJCWNGWUkoMSwgInRvdGFsIGRhdGEgJWQgc21hbGxlciB0aGFuIGRhdGEgaW4gZnJhbWUgJWQiLAogCQkJdG90YWxfZGF0YV9zaXplLCBkYXRhX2luX3RoaXNfcnNwKTsKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlIHsKLQkJY0ZZSSgxLCAibWlzc2luZyAlZCBieXRlcyBmcm9tIHRyYW5zYWN0MiwgY2hlY2sgbmV4dCByZXNwb25zZSIsCi0JCQlyZW1haW5pbmcpOwotCQlpZiAodG90YWxfZGF0YV9zaXplID4gbWF4QnVmU2l6ZSkgewotCQkJY0VSUk9SKDEsICJUb3RhbERhdGFTaXplICVkIGlzIG92ZXIgbWF4aW11bSBidWZmZXIgJWQiLAotCQkJCXRvdGFsX2RhdGFfc2l6ZSwgbWF4QnVmU2l6ZSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlyZXR1cm4gcmVtYWluaW5nOwogCX0KKworCXJlbWFpbmluZyA9IHRvdGFsX2RhdGFfc2l6ZSAtIGRhdGFfaW5fdGhpc19yc3A7CisKKwljRllJKDEsICJtaXNzaW5nICVkIGJ5dGVzIGZyb20gdHJhbnNhY3QyLCBjaGVjayBuZXh0IHJlc3BvbnNlIiwKKwkJcmVtYWluaW5nKTsKKwlpZiAodG90YWxfZGF0YV9zaXplID4gbWF4QnVmU2l6ZSkgeworCQljRVJST1IoMSwgIlRvdGFsRGF0YVNpemUgJWQgaXMgb3ZlciBtYXhpbXVtIGJ1ZmZlciAlZCIsCisJCQl0b3RhbF9kYXRhX3NpemUsIG1heEJ1ZlNpemUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIHJlbWFpbmluZzsKIH0KIAogc3RhdGljIGludCBjb2FsZXNjZV90MihzdHJ1Y3Qgc21iX2hkciAqcHNlY29uZCwgc3RydWN0IHNtYl9oZHIgKnBUYXJnZXRTTUIpCkBAIC0yNzUsNyArMjc0LDggQEAKIAljaGFyICpkYXRhX2FyZWFfb2ZfdGFyZ2V0OwogCWNoYXIgKmRhdGFfYXJlYV9vZl9idWYyOwogCWludCByZW1haW5pbmc7Ci0JX191MTYgYnl0ZV9jb3VudCwgdG90YWxfZGF0YV9zaXplLCB0b3RhbF9pbl9idWYsIHRvdGFsX2luX2J1ZjI7CisJdW5zaWduZWQgaW50IGJ5dGVfY291bnQsIHRvdGFsX2luX2J1ZjsKKwlfX3UxNiB0b3RhbF9kYXRhX3NpemUsIHRvdGFsX2luX2J1ZjI7CiAKIAl0b3RhbF9kYXRhX3NpemUgPSBnZXRfdW5hbGlnbmVkX2xlMTYoJnBTTUJ0LT50Ml9yc3AuVG90YWxEYXRhQ291bnQpOwogCkBAIC0yODgsNyArMjg4LDcgQEAKIAlyZW1haW5pbmcgPSB0b3RhbF9kYXRhX3NpemUgLSB0b3RhbF9pbl9idWY7CiAKIAlpZiAocmVtYWluaW5nIDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAtRVBST1RPOwogCiAJaWYgKHJlbWFpbmluZyA9PSAwKSAvKiBub3RoaW5nIHRvIGRvLCBpZ25vcmUgKi8KIAkJcmV0dXJuIDA7CkBAIC0zMDksMjAgKzMwOSwyOSBAQAogCWRhdGFfYXJlYV9vZl90YXJnZXQgKz0gdG90YWxfaW5fYnVmOwogCiAJLyogY29weSBzZWNvbmQgYnVmZmVyIGludG8gZW5kIG9mIGZpcnN0IGJ1ZmZlciAqLwotCW1lbWNweShkYXRhX2FyZWFfb2ZfdGFyZ2V0LCBkYXRhX2FyZWFfb2ZfYnVmMiwgdG90YWxfaW5fYnVmMik7CiAJdG90YWxfaW5fYnVmICs9IHRvdGFsX2luX2J1ZjI7CisJLyogaXMgdGhlIHJlc3VsdCB0b28gYmlnIGZvciB0aGUgZmllbGQ/ICovCisJaWYgKHRvdGFsX2luX2J1ZiA+IFVTSFJUX01BWCkKKwkJcmV0dXJuIC1FUFJPVE87CiAJcHV0X3VuYWxpZ25lZF9sZTE2KHRvdGFsX2luX2J1ZiwgJnBTTUJ0LT50Ml9yc3AuRGF0YUNvdW50KTsKKworCS8qIGZpeCB1cCB0aGUgQkNDICovCiAJYnl0ZV9jb3VudCA9IGdldF9iY2NfbGUocFRhcmdldFNNQik7CiAJYnl0ZV9jb3VudCArPSB0b3RhbF9pbl9idWYyOworCS8qIGlzIHRoZSByZXN1bHQgdG9vIGJpZyBmb3IgdGhlIGZpZWxkPyAqLworCWlmIChieXRlX2NvdW50ID4gVVNIUlRfTUFYKQorCQlyZXR1cm4gLUVQUk9UTzsKIAlwdXRfYmNjX2xlKGJ5dGVfY291bnQsIHBUYXJnZXRTTUIpOwogCiAJYnl0ZV9jb3VudCA9IHBUYXJnZXRTTUItPnNtYl9idWZfbGVuZ3RoOwogCWJ5dGVfY291bnQgKz0gdG90YWxfaW5fYnVmMjsKLQotCS8qIEJCIGFsc28gYWRkIGNoZWNrIHRoYXQgd2UgYXJlIG5vdCBiZXlvbmQgbWF4aW11bSBidWZmZXIgc2l6ZSAqLwotCisJLyogZG9uJ3QgYWxsb3cgYnVmZmVyIHRvIG92ZXJmbG93ICovCisJaWYgKGJ5dGVfY291bnQgPiBDSUZTTWF4QnVmU2l6ZSkKKwkJcmV0dXJuIC1FTk9CVUZTOwogCXBUYXJnZXRTTUItPnNtYl9idWZfbGVuZ3RoID0gYnl0ZV9jb3VudDsKIAorCW1lbWNweShkYXRhX2FyZWFfb2ZfdGFyZ2V0LCBkYXRhX2FyZWFfb2ZfYnVmMiwgdG90YWxfaW5fYnVmMik7CisKIAlpZiAocmVtYWluaW5nID09IHRvdGFsX2luX2J1ZjIpIHsKIAkJY0ZZSSgxLCAiZm91bmQgdGhlIGxhc3Qgc2Vjb25kYXJ5IHJlc3BvbnNlIik7CiAJCXJldHVybiAwOyAvKiB3ZSBhcmUgZG9uZSAqLwpAQCAtNDIxLDcgKzQzMCw3IEBACiAJCXBkdV9sZW5ndGggPSA0OyAvKiBlbm91Z2ggdG8gZ2V0IFJGQzEwMDEgaGVhZGVyICovCiAKIGluY29tcGxldGVfcmN2OgotCQlpZiAoZWNob19yZXRyaWVzID4gMCAmJgorCQlpZiAoZWNob19yZXRyaWVzID4gMCAmJiBzZXJ2ZXItPnRjcFN0YXR1cyA9PSBDaWZzR29vZCAmJgogCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBzZXJ2ZXItPmxzdHJwICsKIAkJCQkJKGVjaG9fcmV0cmllcyAqIFNNQl9FQ0hPX0lOVEVSVkFMKSkpIHsKIAkJCWNFUlJPUigxLCAiU2VydmVyICVzIGhhcyBub3QgcmVzcG9uZGVkIGluICVkIHNlY29uZHMuICIKQEAgLTYwOCw1OSArNjE3LDYzIEBACiAJCWxpc3RfZm9yX2VhY2hfc2FmZSh0bXAsIHRtcDIsICZzZXJ2ZXItPnBlbmRpbmdfbWlkX3EpIHsKIAkJCW1pZF9lbnRyeSA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgbWlkX3FfZW50cnksIHFoZWFkKTsKIAotCQkJaWYgKChtaWRfZW50cnktPm1pZCA9PSBzbWJfYnVmZmVyLT5NaWQpICYmCi0JCQkgICAgKG1pZF9lbnRyeS0+bWlkU3RhdGUgPT0gTUlEX1JFUVVFU1RfU1VCTUlUVEVEKSAmJgotCQkJICAgIChtaWRfZW50cnktPmNvbW1hbmQgPT0gc21iX2J1ZmZlci0+Q29tbWFuZCkpIHsKLQkJCQlpZiAobGVuZ3RoID09IDAgJiYKLQkJCQkgICBjaGVjazJuZFQyKHNtYl9idWZmZXIsIHNlcnZlci0+bWF4QnVmKSA+IDApIHsKLQkJCQkJLyogV2UgaGF2ZSBhIG11bHRpcGFydCB0cmFuc2FjdDIgcmVzcCAqLwotCQkJCQlpc011bHRpUnNwID0gdHJ1ZTsKLQkJCQkJaWYgKG1pZF9lbnRyeS0+cmVzcF9idWYpIHsKLQkJCQkJCS8qIG1lcmdlIHJlc3BvbnNlIC0gZml4IHVwIDFzdCovCi0JCQkJCQlpZiAoY29hbGVzY2VfdDIoc21iX2J1ZmZlciwKLQkJCQkJCQltaWRfZW50cnktPnJlc3BfYnVmKSkgewotCQkJCQkJCW1pZF9lbnRyeS0+bXVsdGlSc3AgPQotCQkJCQkJCQkgdHJ1ZTsKLQkJCQkJCQlicmVhazsKLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJLyogYWxsIHBhcnRzIHJlY2VpdmVkICovCi0JCQkJCQkJbWlkX2VudHJ5LT5tdWx0aUVuZCA9Ci0JCQkJCQkJCSB0cnVlOwotCQkJCQkJCWdvdG8gbXVsdGlfdDJfZm5kOwotCQkJCQkJfQorCQkJaWYgKG1pZF9lbnRyeS0+bWlkICE9IHNtYl9idWZmZXItPk1pZCB8fAorCQkJICAgIG1pZF9lbnRyeS0+bWlkU3RhdGUgIT0gTUlEX1JFUVVFU1RfU1VCTUlUVEVEIHx8CisJCQkgICAgbWlkX2VudHJ5LT5jb21tYW5kICE9IHNtYl9idWZmZXItPkNvbW1hbmQpIHsKKwkJCQltaWRfZW50cnkgPSBOVUxMOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAobGVuZ3RoID09IDAgJiYKKwkJCSAgICBjaGVjazJuZFQyKHNtYl9idWZmZXIsIHNlcnZlci0+bWF4QnVmKSA+IDApIHsKKwkJCQkvKiBXZSBoYXZlIGEgbXVsdGlwYXJ0IHRyYW5zYWN0MiByZXNwICovCisJCQkJaXNNdWx0aVJzcCA9IHRydWU7CisJCQkJaWYgKG1pZF9lbnRyeS0+cmVzcF9idWYpIHsKKwkJCQkJLyogbWVyZ2UgcmVzcG9uc2UgLSBmaXggdXAgMXN0Ki8KKwkJCQkJbGVuZ3RoID0gY29hbGVzY2VfdDIoc21iX2J1ZmZlciwKKwkJCQkJCQltaWRfZW50cnktPnJlc3BfYnVmKTsKKwkJCQkJaWYgKGxlbmd0aCA+IDApIHsKKwkJCQkJCWxlbmd0aCA9IDA7CisJCQkJCQltaWRfZW50cnktPm11bHRpUnNwID0gdHJ1ZTsKKwkJCQkJCWJyZWFrOwogCQkJCQl9IGVsc2UgewotCQkJCQkJaWYgKCFpc0xhcmdlQnVmKSB7Ci0JCQkJCQkJY0VSUk9SKDEsICIxc3QgdHJhbnMyIHJlc3AgbmVlZHMgYmlnYnVmIik7Ci0JCQkJCS8qIEJCIG1heWJlIHdlIGNhbiBmaXggdGhpcyB1cCwgIHN3aXRjaAotCQkJCQkgICB0byBhbHJlYWR5IGFsbG9jYXRlZCBsYXJnZSBidWZmZXI/ICovCi0JCQkJCQl9IGVsc2UgewotCQkJCQkJCS8qIEhhdmUgZmlyc3QgYnVmZmVyICovCi0JCQkJCQkJbWlkX2VudHJ5LT5yZXNwX2J1ZiA9Ci0JCQkJCQkJCSBzbWJfYnVmZmVyOwotCQkJCQkJCW1pZF9lbnRyeS0+bGFyZ2VCdWYgPQotCQkJCQkJCQkgdHJ1ZTsKLQkJCQkJCQliaWdidWYgPSBOVUxMOwotCQkJCQkJfQorCQkJCQkJLyogYWxsIHBhcnRzIHJlY2VpdmVkIG9yCisJCQkJCQkgKiBwYWNrZXQgaXMgbWFsZm9ybWVkCisJCQkJCQkgKi8KKwkJCQkJCW1pZF9lbnRyeS0+bXVsdGlFbmQgPSB0cnVlOworCQkJCQkJZ290byBtdWx0aV90Ml9mbmQ7CiAJCQkJCX0KLQkJCQkJYnJlYWs7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKCFpc0xhcmdlQnVmKSB7CisJCQkJCQkvKgorCQkJCQkJICogRklYTUU6IHN3aXRjaCB0byBhbHJlYWR5CisJCQkJCQkgKiAgICAgICAgYWxsb2NhdGVkIGxhcmdlYnVmPworCQkJCQkJICovCisJCQkJCQljRVJST1IoMSwgIjFzdCB0cmFuczIgcmVzcCAiCisJCQkJCQkJICAibmVlZHMgYmlnYnVmIik7CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvKiBIYXZlIGZpcnN0IGJ1ZmZlciAqLworCQkJCQkJbWlkX2VudHJ5LT5yZXNwX2J1ZiA9CisJCQkJCQkJIHNtYl9idWZmZXI7CisJCQkJCQltaWRfZW50cnktPmxhcmdlQnVmID0gdHJ1ZTsKKwkJCQkJCWJpZ2J1ZiA9IE5VTEw7CisJCQkJCX0KIAkJCQl9Ci0JCQkJbWlkX2VudHJ5LT5yZXNwX2J1ZiA9IHNtYl9idWZmZXI7Ci0JCQkJbWlkX2VudHJ5LT5sYXJnZUJ1ZiA9IGlzTGFyZ2VCdWY7Ci1tdWx0aV90Ml9mbmQ6Ci0JCQkJaWYgKGxlbmd0aCA9PSAwKQotCQkJCQltaWRfZW50cnktPm1pZFN0YXRlID0KLQkJCQkJCQlNSURfUkVTUE9OU0VfUkVDRUlWRUQ7Ci0JCQkJZWxzZQotCQkJCQltaWRfZW50cnktPm1pZFN0YXRlID0KLQkJCQkJCQlNSURfUkVTUE9OU0VfTUFMRk9STUVEOwotI2lmZGVmIENPTkZJR19DSUZTX1NUQVRTMgotCQkJCW1pZF9lbnRyeS0+d2hlbl9yZWNlaXZlZCA9IGppZmZpZXM7Ci0jZW5kaWYKLQkJCQlsaXN0X2RlbF9pbml0KCZtaWRfZW50cnktPnFoZWFkKTsKLQkJCQltaWRfZW50cnktPmNhbGxiYWNrKG1pZF9lbnRyeSk7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQltaWRfZW50cnkgPSBOVUxMOworCQkJbWlkX2VudHJ5LT5yZXNwX2J1ZiA9IHNtYl9idWZmZXI7CisJCQltaWRfZW50cnktPmxhcmdlQnVmID0gaXNMYXJnZUJ1ZjsKK211bHRpX3QyX2ZuZDoKKwkJCWlmIChsZW5ndGggPT0gMCkKKwkJCQltaWRfZW50cnktPm1pZFN0YXRlID0gTUlEX1JFU1BPTlNFX1JFQ0VJVkVEOworCQkJZWxzZQorCQkJCW1pZF9lbnRyeS0+bWlkU3RhdGUgPSBNSURfUkVTUE9OU0VfTUFMRk9STUVEOworI2lmZGVmIENPTkZJR19DSUZTX1NUQVRTMgorCQkJbWlkX2VudHJ5LT53aGVuX3JlY2VpdmVkID0gamlmZmllczsKKyNlbmRpZgorCQkJbGlzdF9kZWxfaW5pdCgmbWlkX2VudHJ5LT5xaGVhZCk7CisJCQltaWRfZW50cnktPmNhbGxiYWNrKG1pZF9lbnRyeSk7CisJCQlicmVhazsKIAkJfQogCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOwogCkBAIC04MDgsOCArODIxLDcgQEAKIGNpZnNfcGFyc2VfbW91bnRfb3B0aW9ucyhjaGFyICpvcHRpb25zLCBjb25zdCBjaGFyICpkZXZuYW1lLAogCQkJIHN0cnVjdCBzbWJfdm9sICp2b2wpCiB7Ci0JY2hhciAqdmFsdWU7Ci0JY2hhciAqZGF0YTsKKwljaGFyICp2YWx1ZSwgKmRhdGEsICplbmQ7CiAJdW5zaWduZWQgaW50ICB0ZW1wX2xlbiwgaSwgajsKIAljaGFyIHNlcGFyYXRvclsyXTsKIAlzaG9ydCBpbnQgb3ZlcnJpZGVfdWlkID0gLTE7CkBAIC04NTIsNiArODY0LDcgQEAKIAlpZiAoIW9wdGlvbnMpCiAJCXJldHVybiAxOwogCisJZW5kID0gb3B0aW9ucyArIHN0cmxlbihvcHRpb25zKTsKIAlpZiAoc3RybmNtcChvcHRpb25zLCAic2VwPSIsIDQpID09IDApIHsKIAkJaWYgKG9wdGlvbnNbNF0gIT0gMCkgewogCQkJc2VwYXJhdG9yWzBdID0gb3B0aW9uc1s0XTsKQEAgLTg4MSw3ICs4OTQsOCBAQAogCQkJCS8qIG51bGwgdXNlciwgaWUgYW5vbnltb3VzLCBhdXRoZW50aWNhdGlvbiAqLwogCQkJCXZvbC0+bnVsbGF1dGggPSAxOwogCQkJfQotCQkJaWYgKHN0cm5sZW4odmFsdWUsIDIwMCkgPCAyMDApIHsKKwkJCWlmIChzdHJubGVuKHZhbHVlLCBNQVhfVVNFUk5BTUVfU0laRSkgPAorCQkJCQkJTUFYX1VTRVJOQU1FX1NJWkUpIHsKIAkJCQl2b2wtPnVzZXJuYW1lID0gdmFsdWU7CiAJCQl9IGVsc2UgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNJRlM6IHVzZXJuYW1lIHRvbyBsb25nXG4iKTsKQEAgLTkxNiw2ICs5MzAsNyBAQAogCQkJdGhlIG9ubHkgaWxsZWdhbCBjaGFyYWN0ZXIgaW4gYSBwYXNzd29yZCBpcyBudWxsICovCiAKIAkJCWlmICgodmFsdWVbdGVtcF9sZW5dID09IDApICYmCisJCQkgICAgKHZhbHVlICsgdGVtcF9sZW4gPCBlbmQpICYmCiAJCQkgICAgKHZhbHVlW3RlbXBfbGVuKzFdID09IHNlcGFyYXRvclswXSkpIHsKIAkJCQkvKiByZWluc2VydCBjb21tYSAqLwogCQkJCXZhbHVlW3RlbXBfbGVuXSA9IHNlcGFyYXRvclswXTsKQEAgLTE0NzIsNyArMTQ4Nyw3IEBACiBzdGF0aWMgYm9vbAogbWF0Y2hfcG9ydChzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsIHN0cnVjdCBzb2NrYWRkciAqYWRkcikKIHsKLQl1bnNpZ25lZCBzaG9ydCBpbnQgcG9ydCwgKnNwb3J0OworCV9fYmUxNiBwb3J0LCAqc3BvcnQ7CiAKIAlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgewogCWNhc2UgQUZfSU5FVDoKQEAgLTE1NzIsNyArMTU4Nyw3IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQkvKiBub3cgY2hlY2sgaWYgc2lnbmluZyBtb2RlIGlzIGFjY2VwdGlibGUgKi8KKwkvKiBub3cgY2hlY2sgaWYgc2lnbmluZyBtb2RlIGlzIGFjY2VwdGFibGUgKi8KIAlpZiAoKHNlY0ZsYWdzICYgQ0lGU1NFQ19NQVlfU0lHTikgPT0gMCAmJgogCSAgICAoc2VydmVyLT5zZWNNb2RlICYgU0VDTU9ERV9TSUdOX1JFUVVJUkVEKSkKIAkJCXJldHVybiBmYWxzZTsKQEAgLTE3NjUsNiArMTc4MCw3IEBACiAJCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwogCQlnb3RvIG91dF9lcnJfY3J5cHRvX3JlbGVhc2U7CiAJfQorCXRjcF9zZXMtPnRjcFN0YXR1cyA9IENpZnNOZWVkTmVnb3RpYXRlOwogCiAJLyogdGhyZWFkIHNwYXduZWQsIHB1dCBpdCBvbiB0aGUgbGlzdCAqLwogCXNwaW5fbG9jaygmY2lmc190Y3Bfc2VzX2xvY2spOwpAQCAtMTgwOCw3ICsxODI0LDkgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJLyogYW55dGhpbmcgZWxzZSB0YWtlcyB1c2VybmFtZS9wYXNzd29yZCAqLwotCQkJaWYgKHN0cm5jbXAoc2VzLT51c2VyTmFtZSwgdm9sLT51c2VybmFtZSwKKwkJCWlmIChzZXMtPnVzZXJfbmFtZSA9PSBOVUxMKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHN0cm5jbXAoc2VzLT51c2VyX25hbWUsIHZvbC0+dXNlcm5hbWUsCiAJCQkJICAgIE1BWF9VU0VSTkFNRV9TSVpFKSkKIAkJCQljb250aW51ZTsKIAkJCWlmIChzdHJsZW4odm9sLT51c2VybmFtZSkgIT0gMCAmJgpAQCAtMTg1MSw2ICsxODY5LDggQEAKIAljaWZzX3B1dF90Y3Bfc2Vzc2lvbihzZXJ2ZXIpOwogfQogCitzdGF0aWMgYm9vbCB3YXJuZWRfb25fbnRsbTsgIC8qIGdsb2JhbHMgaW5pdCB0byBmYWxzZSBhdXRvbWF0aWNhbGx5ICovCisKIHN0YXRpYyBzdHJ1Y3QgY2lmc1Nlc0luZm8gKgogY2lmc19nZXRfc21iX3NlcyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsIHN0cnVjdCBzbWJfdm9sICp2b2x1bWVfaW5mbykKIHsKQEAgLTE5MDYsOSArMTkyNiwxMSBAQAogCWVsc2UKIAkJc3ByaW50ZihzZXMtPnNlcnZlck5hbWUsICIlcEk0IiwgJmFkZHItPnNpbl9hZGRyKTsKIAotCWlmICh2b2x1bWVfaW5mby0+dXNlcm5hbWUpCi0JCXN0cm5jcHkoc2VzLT51c2VyTmFtZSwgdm9sdW1lX2luZm8tPnVzZXJuYW1lLAotCQkJTUFYX1VTRVJOQU1FX1NJWkUpOworCWlmICh2b2x1bWVfaW5mby0+dXNlcm5hbWUpIHsKKwkJc2VzLT51c2VyX25hbWUgPSBrc3RyZHVwKHZvbHVtZV9pbmZvLT51c2VybmFtZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghc2VzLT51c2VyX25hbWUpCisJCQlnb3RvIGdldF9zZXNfZmFpbDsKKwl9CiAKIAkvKiB2b2x1bWVfaW5mby0+cGFzc3dvcmQgZnJlZWQgYXQgdW5tb3VudCAqLwogCWlmICh2b2x1bWVfaW5mby0+cGFzc3dvcmQpIHsKQEAgLTE5MjMsNiArMTk0NSwxNSBAQAogCX0KIAlzZXMtPmNyZWRfdWlkID0gdm9sdW1lX2luZm8tPmNyZWRfdWlkOwogCXNlcy0+bGludXhfdWlkID0gdm9sdW1lX2luZm8tPmxpbnV4X3VpZDsKKworCS8qIG50bG12MiBpcyBtdWNoIHN0cm9uZ2VyIHRoYW4gbnRsbSBzZWN1cml0eSwgYW5kIGhhcyBiZWVuIGJyb2FkbHkKKwlzdXBwb3J0ZWQgZm9yIG1hbnkgeWVhcnMsIHRpbWUgdG8gdXBkYXRlIGRlZmF1bHQgc2VjdXJpdHkgbWVjaGFuaXNtICovCisJaWYgKCh2b2x1bWVfaW5mby0+c2VjRmxnID09IDApICYmIHdhcm5lZF9vbl9udGxtID09IGZhbHNlKSB7CisJCXdhcm5lZF9vbl9udGxtID0gdHJ1ZTsKKwkJY0VSUk9SKDEsICJkZWZhdWx0IHNlY3VyaXR5IG1lY2hhbmlzbSByZXF1ZXN0ZWQuICBUaGUgZGVmYXVsdCAiCisJCQkic2VjdXJpdHkgbWVjaGFuaXNtIHdpbGwgYmUgdXBncmFkZWQgZnJvbSBudGxtIHRvICIKKwkJCSJudGxtdjIgaW4ga2VybmVsIHJlbGVhc2UgMi42LjQxIik7CisJfQogCXNlcy0+b3ZlcnJpZGVTZWNGbGcgPSB2b2x1bWVfaW5mby0+c2VjRmxnOwogCiAJbXV0ZXhfbG9jaygmc2VzLT5zZXNzaW9uX211dGV4KTsKQEAgLTIyNzYsNyArMjMwNyw3IEBACiBnZW5lcmljX2lwX2Nvbm5lY3Qoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyKQogewogCWludCByYyA9IDA7Ci0JdW5zaWduZWQgc2hvcnQgaW50IHNwb3J0OworCV9fYmUxNiBzcG9ydDsKIAlpbnQgc2xlbiwgc2ZhbWlseTsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQgPSBzZXJ2ZXItPnNzb2NrZXQ7CiAJc3RydWN0IHNvY2thZGRyICpzYWRkcjsKQEAgLTIzNjEsNyArMjM5Miw3IEBACiBzdGF0aWMgaW50CiBpcF9jb25uZWN0KHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcikKIHsKLQl1bnNpZ25lZCBzaG9ydCBpbnQgKnNwb3J0OworCV9fYmUxNiAqc3BvcnQ7CiAJc3RydWN0IHNvY2thZGRyX2luNiAqYWRkcjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZzZXJ2ZXItPmRzdGFkZHI7CiAJc3RydWN0IHNvY2thZGRyX2luICphZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZzZXJ2ZXItPmRzdGFkZHI7CiAKQEAgLTI2NDIsNiArMjY3MywxMSBAQAogCQkJICAgICAgMCAvKiBub3QgbGVnYWN5ICovLCBjaWZzX3NiLT5sb2NhbF9ubHMsCiAJCQkgICAgICBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCiAJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOworCisJaWYgKHJjID09IC1FT1BOT1RTVVBQIHx8IHJjID09IC1FSU5WQUwpCisJCXJjID0gU01CUXVlcnlJbmZvcm1hdGlvbih4aWQsIHRjb24sIGZ1bGxfcGF0aCwgcGZpbGVfaW5mbywKKwkJCQljaWZzX3NiLT5sb2NhbF9ubHMsIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKKwkJCQkgIENJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIAlrZnJlZShwZmlsZV9pbmZvKTsKIAlyZXR1cm4gcmM7CiB9CkBAIC0yODI2LDcgKzI4NjIsNyBAQAogCiByZW1vdGVfcGF0aF9jaGVjazoKIAkvKiBjaGVjayBpZiBhIHdob2xlIHBhdGggKGluY2x1ZGluZyBwcmVwYXRoKSBpcyBub3QgcmVtb3RlICovCi0JaWYgKCFyYyAmJiBjaWZzX3NiLT5wcmVwYXRobGVuICYmIHRjb24pIHsKKwlpZiAoIXJjICYmIHRjb24pIHsKIAkJLyogYnVpbGRfcGF0aF90b19yb290IHdvcmtzIG9ubHkgd2hlbiB3ZSBoYXZlIGEgdmFsaWQgdGNvbiAqLwogCQlmdWxsX3BhdGggPSBjaWZzX2J1aWxkX3BhdGhfdG9fcm9vdChjaWZzX3NiLCB0Y29uKTsKIAkJaWYgKGZ1bGxfcGF0aCA9PSBOVUxMKSB7CkBAIC0yOTMzLDcgKzI5NjksNyBAQAogCQlpZiAobW91bnRfZGF0YSAhPSBtb3VudF9kYXRhX2dsb2JhbCkKIAkJCWtmcmVlKG1vdW50X2RhdGEpOwogCQkvKiBJZiBmaW5kX3VuYyBzdWNjZWVkZWQgdGhlbiByYyA9PSAwIHNvIHdlIGNhbiBub3QgZW5kICovCi0JCS8qIHVwIGFjY2lkZW50bHkgZnJlZWluZyBzb21lb25lIGVsc2VzIHRjb24gc3RydWN0ICovCisJCS8qIHVwIGFjY2lkZW50YWxseSBmcmVlaW5nIHNvbWVvbmUgZWxzZXMgdGNvbiBzdHJ1Y3QgKi8KIAkJaWYgKHRjb24pCiAJCQljaWZzX3B1dF90Y29uKHRjb24pOwogCQllbHNlIGlmIChwU2VzSW5mbykKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZGlyLmMgYi9mcy9jaWZzL2Rpci5jCmluZGV4IGRkNWYyMjkuLjllYTY1Y2YgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZGlyLmMKKysrIGIvZnMvY2lmcy9kaXIuYwpAQCAtMTg5LDcgKzE4OSw3IEBACiAJCQlpbm9kZS0+aV9zYiwgbW9kZSwgb2ZsYWdzLCAmb3Bsb2NrLCAmZmlsZUhhbmRsZSwgeGlkKTsKIAkJLyogRUlPIGNvdWxkIGluZGljYXRlIHRoYXQgKHBvc2l4IG9wZW4pIG9wZXJhdGlvbiBpcyBub3QKIAkJICAgc3VwcG9ydGVkLCBkZXNwaXRlIHdoYXQgc2VydmVyIGNsYWltZWQgaW4gY2FwYWJpbGl0eQotCQkgICBuZWdvdGF0aW9uLiAgRVJFTU9URSBpbmRpY2F0ZXMgREZTIGp1bmN0aW9uLCB3aGljaCBpcyBub3QKKwkJICAgbmVnb3RpYXRpb24uICBFUkVNT1RFIGluZGljYXRlcyBERlMganVuY3Rpb24sIHdoaWNoIGlzIG5vdAogCQkgICBoYW5kbGVkIGluIHBvc2l4IG9wZW4gKi8KIAogCQlpZiAocmMgPT0gMCkgewpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9maWxlLmMgYi9mcy9jaWZzL2ZpbGUuYwppbmRleCBjMjdkMjM2Li5mYWY1OTUyIDEwMDY0NAotLS0gYS9mcy9jaWZzL2ZpbGUuYworKysgYi9mcy9jaWZzL2ZpbGUuYwpAQCAtNTc1LDggKzU3NSwxMCBAQAogCiBpbnQgY2lmc19jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQljaWZzRmlsZUluZm9fcHV0KGZpbGUtPnByaXZhdGVfZGF0YSk7Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhICE9IE5VTEwpIHsKKwkJY2lmc0ZpbGVJbmZvX3B1dChmaWxlLT5wcml2YXRlX2RhdGEpOworCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCX0KIAogCS8qIHJldHVybiBjb2RlIGZyb20gdGhlIC0+cmVsZWFzZSBvcCBpcyBhbHdheXMgaWdub3JlZCAqLwogCXJldHVybiAwOwpAQCAtOTcwLDYgKzk3Miw5IEBACiAJICAgICB0b3RhbF93cml0dGVuICs9IGJ5dGVzX3dyaXR0ZW4pIHsKIAkJcmMgPSAtRUFHQUlOOwogCQl3aGlsZSAocmMgPT0gLUVBR0FJTikgeworCQkJc3RydWN0IGt2ZWMgaW92WzJdOworCQkJdW5zaWduZWQgaW50IGxlbjsKKwogCQkJaWYgKG9wZW5fZmlsZS0+aW52YWxpZEhhbmRsZSkgewogCQkJCS8qIHdlIGNvdWxkIGRlYWRsb2NrIGlmIHdlIGNhbGxlZAogCQkJCSAgIGZpbGVtYXBfZmRhdGF3YWl0IGZyb20gaGVyZSBzbyB0ZWxsCkBAIC05NzksMzEgKzk4NCwxNCBAQAogCQkJCWlmIChyYyAhPSAwKQogCQkJCQlicmVhazsKIAkJCX0KLQkJCWlmIChleHBlcmltRW5hYmxlZCB8fCAocFRjb24tPnNlcy0+c2VydmVyICYmCi0JCQkJKChwVGNvbi0+c2VzLT5zZXJ2ZXItPnNlY01vZGUgJgotCQkJCShTRUNNT0RFX1NJR05fUkVRVUlSRUQgfCBTRUNNT0RFX1NJR05fRU5BQkxFRCkpCi0JCQkJPT0gMCkpKSB7Ci0JCQkJc3RydWN0IGt2ZWMgaW92WzJdOwotCQkJCXVuc2lnbmVkIGludCBsZW47CiAKLQkJCQlsZW4gPSBtaW4oKHNpemVfdCljaWZzX3NiLT53c2l6ZSwKLQkJCQkJICB3cml0ZV9zaXplIC0gdG90YWxfd3JpdHRlbik7Ci0JCQkJLyogaW92WzBdIGlzIHJlc2VydmVkIGZvciBzbWIgaGVhZGVyICovCi0JCQkJaW92WzFdLmlvdl9iYXNlID0gKGNoYXIgKil3cml0ZV9kYXRhICsKLQkJCQkJCSAgdG90YWxfd3JpdHRlbjsKLQkJCQlpb3ZbMV0uaW92X2xlbiA9IGxlbjsKLQkJCQlyYyA9IENJRlNTTUJXcml0ZTIoeGlkLCBwVGNvbiwKLQkJCQkJCW9wZW5fZmlsZS0+bmV0ZmlkLCBsZW4sCi0JCQkJCQkqcG9mZnNldCwgJmJ5dGVzX3dyaXR0ZW4sCi0JCQkJCQlpb3YsIDEsIDApOwotCQkJfSBlbHNlCi0JCQkJcmMgPSBDSUZTU01CV3JpdGUoeGlkLCBwVGNvbiwKLQkJCQkJIG9wZW5fZmlsZS0+bmV0ZmlkLAotCQkJCQkgbWluX3QoY29uc3QgaW50LCBjaWZzX3NiLT53c2l6ZSwKLQkJCQkJICAgICAgIHdyaXRlX3NpemUgLSB0b3RhbF93cml0dGVuKSwKLQkJCQkJICpwb2Zmc2V0LCAmYnl0ZXNfd3JpdHRlbiwKLQkJCQkJIHdyaXRlX2RhdGEgKyB0b3RhbF93cml0dGVuLAotCQkJCQkgTlVMTCwgMCk7CisJCQlsZW4gPSBtaW4oKHNpemVfdCljaWZzX3NiLT53c2l6ZSwKKwkJCQkgIHdyaXRlX3NpemUgLSB0b3RhbF93cml0dGVuKTsKKwkJCS8qIGlvdlswXSBpcyByZXNlcnZlZCBmb3Igc21iIGhlYWRlciAqLworCQkJaW92WzFdLmlvdl9iYXNlID0gKGNoYXIgKil3cml0ZV9kYXRhICsgdG90YWxfd3JpdHRlbjsKKwkJCWlvdlsxXS5pb3ZfbGVuID0gbGVuOworCQkJcmMgPSBDSUZTU01CV3JpdGUyKHhpZCwgcFRjb24sIG9wZW5fZmlsZS0+bmV0ZmlkLCBsZW4sCisJCQkJCSAgICpwb2Zmc2V0LCAmYnl0ZXNfd3JpdHRlbiwgaW92LCAxLCAwKTsKIAkJfQogCQlpZiAocmMgfHwgKGJ5dGVzX3dyaXR0ZW4gPT0gMCkpIHsKIAkJCWlmICh0b3RhbF93cml0dGVuKQpAQCAtMTI0MCwxMiArMTIyOCw2IEBACiAJfQogCiAJdGNvbiA9IHRsaW5rX3Rjb24ob3Blbl9maWxlLT50bGluayk7Ci0JaWYgKCFleHBlcmltRW5hYmxlZCAmJiB0Y29uLT5zZXMtPnNlcnZlci0+c2VjTW9kZSAmCi0JCQkoU0VDTU9ERV9TSUdOX1JFUVVJUkVEIHwgU0VDTU9ERV9TSUdOX0VOQUJMRUQpKSB7Ci0JCWNpZnNGaWxlSW5mb19wdXQob3Blbl9maWxlKTsKLQkJa2ZyZWUoaW92KTsKLQkJcmV0dXJuIGdlbmVyaWNfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMpOwotCX0KIAljaWZzRmlsZUluZm9fcHV0KG9wZW5fZmlsZSk7CiAKIAl4aWQgPSBHZXRYaWQoKTsKQEAgLTE5ODAsNiArMTk2MiwyNCBAQAogCXJldHVybiB0b3RhbF9yZWFkOwogfQogCisvKgorICogSWYgdGhlIHBhZ2UgaXMgbW1hcCdlZCBpbnRvIGEgcHJvY2VzcycgcGFnZSB0YWJsZXMsIHRoZW4gd2UgbmVlZCB0byBtYWtlCisgKiBzdXJlIHRoYXQgaXQgZG9lc24ndCBjaGFuZ2Ugd2hpbGUgYmVpbmcgd3JpdHRlbiBiYWNrLgorICovCitzdGF0aWMgaW50CitjaWZzX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2bWYtPnBhZ2U7CisKKwlsb2NrX3BhZ2UocGFnZSk7CisJcmV0dXJuIFZNX0ZBVUxUX0xPQ0tFRDsKK30KKworc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBjaWZzX2ZpbGVfdm1fb3BzID0geworCS5mYXVsdCA9IGZpbGVtYXBfZmF1bHQsCisJLnBhZ2VfbWt3cml0ZSA9IGNpZnNfcGFnZV9ta3dyaXRlLAorfTsKKwogaW50IGNpZnNfZmlsZV9zdHJpY3RfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJaW50IHJjLCB4aWQ7CkBAIC0xOTkxLDYgKzE5OTEsOCBAQAogCQljaWZzX2ludmFsaWRhdGVfbWFwcGluZyhpbm9kZSk7CiAKIAlyYyA9IGdlbmVyaWNfZmlsZV9tbWFwKGZpbGUsIHZtYSk7CisJaWYgKHJjID09IDApCisJCXZtYS0+dm1fb3BzID0gJmNpZnNfZmlsZV92bV9vcHM7CiAJRnJlZVhpZCh4aWQpOwogCXJldHVybiByYzsKIH0KQEAgLTIwMDcsNiArMjAwOSw4IEBACiAJCXJldHVybiByYzsKIAl9CiAJcmMgPSBnZW5lcmljX2ZpbGVfbW1hcChmaWxlLCB2bWEpOworCWlmIChyYyA9PSAwKQorCQl2bWEtPnZtX29wcyA9ICZjaWZzX2ZpbGVfdm1fb3BzOwogCUZyZWVYaWQoeGlkKTsKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9mcy9jaWZzL2xpbmsuYyBiL2ZzL2NpZnMvbGluay5jCmluZGV4IGU4ODA0ZDMuLmNlNDE3YTkgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvbGluay5jCisrKyBiL2ZzL2NpZnMvbGluay5jCkBAIC0yMzksNyArMjM5LDcgQEAKIAlpZiAocmMgIT0gMCkKIAkJcmV0dXJuIHJjOwogCi0JaWYgKGZpbGVfaW5mby5FbmRPZkZpbGUgIT0gQ0lGU19NRl9TWU1MSU5LX0ZJTEVfU0laRSkgeworCWlmIChmaWxlX2luZm8uRW5kT2ZGaWxlICE9IGNwdV90b19sZTY0KENJRlNfTUZfU1lNTElOS19GSUxFX1NJWkUpKSB7CiAJCUNJRlNTTUJDbG9zZSh4aWQsIHRjb24sIG5ldGZpZCk7CiAJCS8qIGl0J3Mgbm90IGEgc3ltbGluayAqLwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTMxNiw3ICszMTYsNyBAQAogCWlmIChyYyAhPSAwKQogCQlnb3RvIG91dDsKIAotCWlmIChmaWxlX2luZm8uRW5kT2ZGaWxlICE9IENJRlNfTUZfU1lNTElOS19GSUxFX1NJWkUpIHsKKwlpZiAoZmlsZV9pbmZvLkVuZE9mRmlsZSAhPSBjcHVfdG9fbGU2NChDSUZTX01GX1NZTUxJTktfRklMRV9TSVpFKSkgewogCQlDSUZTU01CQ2xvc2UoeGlkLCBwVGNvbiwgbmV0ZmlkKTsKIAkJLyogaXQncyBub3QgYSBzeW1saW5rICovCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9taXNjLmMgYi9mcy9jaWZzL21pc2MuYwppbmRleCAyYTkzMGE3Li4wYzY4NGFlIDEwMDY0NAotLS0gYS9mcy9jaWZzL21pc2MuYworKysgYi9mcy9jaWZzL21pc2MuYwpAQCAtMTAwLDYgKzEwMCw3IEBACiAJCW1lbXNldChidWZfdG9fZnJlZS0+cGFzc3dvcmQsIDAsIHN0cmxlbihidWZfdG9fZnJlZS0+cGFzc3dvcmQpKTsKIAkJa2ZyZWUoYnVmX3RvX2ZyZWUtPnBhc3N3b3JkKTsKIAl9CisJa2ZyZWUoYnVmX3RvX2ZyZWUtPnVzZXJfbmFtZSk7CiAJa2ZyZWUoYnVmX3RvX2ZyZWUtPmRvbWFpbk5hbWUpOwogCWtmcmVlKGJ1Zl90b19mcmVlKTsKIH0KQEAgLTUyMCw3ICs1MjEsNyBAQAogCQkJKHN0cnVjdCBzbWJfY29tX3RyYW5zYWN0aW9uX2NoYW5nZV9ub3RpZnlfcnNwICopYnVmOwogCQlzdHJ1Y3QgZmlsZV9ub3RpZnlfaW5mb3JtYXRpb24gKnBub3RpZnk7CiAJCV9fdTMyIGRhdGFfb2Zmc2V0ID0gMDsKLQkJaWYgKHBTTUJyLT5CeXRlQ291bnQgPiBzaXplb2Yoc3RydWN0IGZpbGVfbm90aWZ5X2luZm9ybWF0aW9uKSkgeworCQlpZiAoZ2V0X2JjY19sZShidWYpID4gc2l6ZW9mKHN0cnVjdCBmaWxlX25vdGlmeV9pbmZvcm1hdGlvbikpIHsKIAkJCWRhdGFfb2Zmc2V0ID0gbGUzMl90b19jcHUocFNNQnItPkRhdGFPZmZzZXQpOwogCiAJCQlwbm90aWZ5ID0gKHN0cnVjdCBmaWxlX25vdGlmeV9pbmZvcm1hdGlvbiAqKQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9zZXNzLmMgYi9mcy9jaWZzL3Nlc3MuYwppbmRleCAxNjc2NTcwLi42NDUxMTRhIDEwMDY0NAotLS0gYS9mcy9jaWZzL3Nlc3MuYworKysgYi9mcy9jaWZzL3Nlc3MuYwpAQCAtMjE5LDEyICsyMTksMTIgQEAKIAkJYmNjX3B0cisrOwogCX0gKi8KIAkvKiBjb3B5IHVzZXIgKi8KLQlpZiAoc2VzLT51c2VyTmFtZSA9PSBOVUxMKSB7CisJaWYgKHNlcy0+dXNlcl9uYW1lID09IE5VTEwpIHsKIAkJLyogbnVsbCB1c2VyIG1vdW50ICovCiAJCSpiY2NfcHRyID0gMDsKIAkJKihiY2NfcHRyKzEpID0gMDsKIAl9IGVsc2UgewotCQlieXRlc19yZXQgPSBjaWZzX3N0cnRvVUNTKChfX2xlMTYgKikgYmNjX3B0ciwgc2VzLT51c2VyTmFtZSwKKwkJYnl0ZXNfcmV0ID0gY2lmc19zdHJ0b1VDUygoX19sZTE2ICopIGJjY19wdHIsIHNlcy0+dXNlcl9uYW1lLAogCQkJCQkgIE1BWF9VU0VSTkFNRV9TSVpFLCBubHNfY3ApOwogCX0KIAliY2NfcHRyICs9IDIgKiBieXRlc19yZXQ7CkBAIC0yNDQsMTIgKzI0NCwxMSBAQAogCS8qIGNvcHkgdXNlciAqLwogCS8qIEJCIHdoYXQgYWJvdXQgbnVsbCB1c2VyIG1vdW50cyAtIGNoZWNrIHRoYXQgd2UgZG8gdGhpcyBCQiAqLwogCS8qIGNvcHkgdXNlciAqLwotCWlmIChzZXMtPnVzZXJOYW1lID09IE5VTEwpIHsKLQkJLyogQkIgd2hhdCBhYm91dCBudWxsIHVzZXIgbW91bnRzIC0gY2hlY2sgdGhhdCB3ZSBkbyB0aGlzIEJCICovCi0JfSBlbHNlIHsKLQkJc3RybmNweShiY2NfcHRyLCBzZXMtPnVzZXJOYW1lLCBNQVhfVVNFUk5BTUVfU0laRSk7Ci0JfQotCWJjY19wdHIgKz0gc3RybmxlbihzZXMtPnVzZXJOYW1lLCBNQVhfVVNFUk5BTUVfU0laRSk7CisJaWYgKHNlcy0+dXNlcl9uYW1lICE9IE5VTEwpCisJCXN0cm5jcHkoYmNjX3B0ciwgc2VzLT51c2VyX25hbWUsIE1BWF9VU0VSTkFNRV9TSVpFKTsKKwkvKiBlbHNlIG51bGwgdXNlciBtb3VudCAqLworCisJYmNjX3B0ciArPSBzdHJubGVuKHNlcy0+dXNlcl9uYW1lLCBNQVhfVVNFUk5BTUVfU0laRSk7CiAJKmJjY19wdHIgPSAwOwogCWJjY19wdHIrKzsgLyogYWNjb3VudCBmb3IgbnVsbCB0ZXJtaW5hdGlvbiAqLwogCkBAIC0yNzcsNyArMjc2LDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLWRlY29kZV91bmljb2RlX3NzZXR1cChjaGFyICoqcGJjY19hcmVhLCBfX3UxNiBibGVmdCwgc3RydWN0IGNpZnNTZXNJbmZvICpzZXMsCitkZWNvZGVfdW5pY29kZV9zc2V0dXAoY2hhciAqKnBiY2NfYXJlYSwgaW50IGJsZWZ0LCBzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlcywKIAkJICAgICAgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NwKQogewogCWludCBsZW47CkBAIC0yODUsMTkgKzI4NCw2IEBACiAKIAljRllJKDEsICJibGVmdCAlZCIsIGJsZWZ0KTsKIAotCS8qCi0JICogV2luZG93cyBzZXJ2ZXJzIGRvIG5vdCBhbHdheXMgZG91YmxlIG51bGwgdGVybWluYXRlIHRoZWlyIGZpbmFsCi0JICogVW5pY29kZSBzdHJpbmcuIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW4gdW5ldmVuIG51bWJlciBvZiBieXRlcwotCSAqIGxlZnQuIElmIHNvLCB0aGVuIGFkZCBhbiBleHRyYSBOVUxMIHBhZCBieXRlIHRvIHRoZSBlbmQgb2YgdGhlCi0JICogcmVzcG9uc2UuCi0JICoKLQkgKiBTZWUgc2VjdGlvbiAyLjcuMiBpbiAiSW1wbGVtZW50aW5nIENJRlMiIGZvciBkZXRhaWxzCi0JICovCi0JaWYgKGJsZWZ0ICUgMikgewotCQlkYXRhW2JsZWZ0XSA9IDA7Ci0JCSsrYmxlZnQ7Ci0JfQotCiAJa2ZyZWUoc2VzLT5zZXJ2ZXJPUyk7CiAJc2VzLT5zZXJ2ZXJPUyA9IGNpZnNfc3RybmR1cF9mcm9tX3VjcyhkYXRhLCBibGVmdCwgdHJ1ZSwgbmxzX2NwKTsKIAljRllJKDEsICJzZXJ2ZXJPUz0lcyIsIHNlcy0+c2VydmVyT1MpOwpAQCAtNDA1LDggKzM5MSw4IEBACiAJLyogQkIgc3BlYyBzYXlzIHRoYXQgaWYgQXZJZCBmaWVsZCBvZiBNc3ZBdlRpbWVzdGFtcCBpcyBwb3B1bGF0ZWQgdGhlbgogCQl3ZSBtdXN0IHNldCB0aGUgTUlDIGZpZWxkIG9mIHRoZSBBVVRIRU5USUNBVEVfTUVTU0FHRSAqLwogCXNlcy0+bnRsbXNzcC0+c2VydmVyX2ZsYWdzID0gbGUzMl90b19jcHUocGJsb2ItPk5lZ290aWF0ZUZsYWdzKTsKLQl0aW9mZnNldCA9IGNwdV90b19sZTE2KHBibG9iLT5UYXJnZXRJbmZvQXJyYXkuQnVmZmVyT2Zmc2V0KTsKLQl0aWxlbiA9IGNwdV90b19sZTE2KHBibG9iLT5UYXJnZXRJbmZvQXJyYXkuTGVuZ3RoKTsKKwl0aW9mZnNldCA9IGxlMzJfdG9fY3B1KHBibG9iLT5UYXJnZXRJbmZvQXJyYXkuQnVmZmVyT2Zmc2V0KTsKKwl0aWxlbiA9IGxlMTZfdG9fY3B1KHBibG9iLT5UYXJnZXRJbmZvQXJyYXkuTGVuZ3RoKTsKIAlpZiAodGlsZW4pIHsKIAkJc2VzLT5hdXRoX2tleS5yZXNwb25zZSA9IGttYWxsb2ModGlsZW4sIEdGUF9LRVJORUwpOwogCQlpZiAoIXNlcy0+YXV0aF9rZXkucmVzcG9uc2UpIHsKQEAgLTUyMywxNCArNTA5LDE0IEBACiAJCXRtcCArPSBsZW47CiAJfQogCi0JaWYgKHNlcy0+dXNlck5hbWUgPT0gTlVMTCkgeworCWlmIChzZXMtPnVzZXJfbmFtZSA9PSBOVUxMKSB7CiAJCXNlY19ibG9iLT5Vc2VyTmFtZS5CdWZmZXJPZmZzZXQgPSBjcHVfdG9fbGUzMih0bXAgLSBwYnVmZmVyKTsKIAkJc2VjX2Jsb2ItPlVzZXJOYW1lLkxlbmd0aCA9IDA7CiAJCXNlY19ibG9iLT5Vc2VyTmFtZS5NYXhpbXVtTGVuZ3RoID0gMDsKIAkJdG1wICs9IDI7CiAJfSBlbHNlIHsKIAkJaW50IGxlbjsKLQkJbGVuID0gY2lmc19zdHJ0b1VDUygoX19sZTE2ICopdG1wLCBzZXMtPnVzZXJOYW1lLAorCQlsZW4gPSBjaWZzX3N0cnRvVUNTKChfX2xlMTYgKil0bXAsIHNlcy0+dXNlcl9uYW1lLAogCQkJCSAgICBNQVhfVVNFUk5BTUVfU0laRSwgbmxzX2NwKTsKIAkJbGVuICo9IDI7IC8qIHVuaWNvZGUgaXMgMiBieXRlcyBlYWNoICovCiAJCXNlY19ibG9iLT5Vc2VyTmFtZS5CdWZmZXJPZmZzZXQgPSBjcHVfdG9fbGUzMih0bXAgLSBwYnVmZmVyKTsKQEAgLTkzMCw3ICs5MTYsOSBAQAogCX0KIAogCS8qIEJCIGNoZWNrIGlmIFVuaWNvZGUgYW5kIGRlY29kZSBzdHJpbmdzICovCi0JaWYgKHNtYl9idWYtPkZsYWdzMiAmIFNNQkZMRzJfVU5JQ09ERSkgeworCWlmIChieXRlc19yZW1haW5pbmcgPT0gMCkgeworCQkvKiBubyBzdHJpbmcgYXJlYSB0byBkZWNvZGUsIGRvIG5vdGhpbmcgKi8KKwl9IGVsc2UgaWYgKHNtYl9idWYtPkZsYWdzMiAmIFNNQkZMRzJfVU5JQ09ERSkgewogCQkvKiB1bmljb2RlIHN0cmluZyBhcmVhIG11c3QgYmUgd29yZC1hbGlnbmVkICovCiAJCWlmICgoKHVuc2lnbmVkIGxvbmcpIGJjY19wdHIgLSAodW5zaWduZWQgbG9uZykgc21iX2J1ZikgJSAyKSB7CiAJCQkrK2JjY19wdHI7CmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9kaXIuYyBiL2ZzL2NvbmZpZ2ZzL2Rpci5jCmluZGV4IDkwZmYzY2IuLjlhMzdhOWIgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL2Rpci5jCisrKyBiL2ZzL2NvbmZpZ2ZzL2Rpci5jCkBAIC01MywxMSArNTMsMTQgQEAKIHN0YXRpYyB2b2lkIGNvbmZpZ2ZzX2RfaXB1dChzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LAogCQkJICAgIHN0cnVjdCBpbm9kZSAqIGlub2RlKQogewotCXN0cnVjdCBjb25maWdmc19kaXJlbnQgKiBzZCA9IGRlbnRyeS0+ZF9mc2RhdGE7CisJc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2QgPSBkZW50cnktPmRfZnNkYXRhOwogCiAJaWYgKHNkKSB7CiAJCUJVR19PTihzZC0+c19kZW50cnkgIT0gZGVudHJ5KTsKKwkJLyogQ29vcmRpbmF0ZSB3aXRoIGNvbmZpZ2ZzX3JlYWRkaXIgKi8KKwkJc3Bpbl9sb2NrKCZjb25maWdmc19kaXJlbnRfbG9jayk7CiAJCXNkLT5zX2RlbnRyeSA9IE5VTEw7CisJCXNwaW5fdW5sb2NrKCZjb25maWdmc19kaXJlbnRfbG9jayk7CiAJCWNvbmZpZ2ZzX3B1dChzZCk7CiAJfQogCWlwdXQoaW5vZGUpOwpAQCAtNjg5LDcgKzY5Miw4IEBACiAJCQlzZCA9IGNoaWxkLT5kX2ZzZGF0YTsKIAkJCXNkLT5zX3R5cGUgfD0gQ09ORklHRlNfVVNFVF9ERUZBVUxUOwogCQl9IGVsc2UgewotCQkJZF9kZWxldGUoY2hpbGQpOworCQkJQlVHX09OKGNoaWxkLT5kX2lub2RlKTsKKwkJCWRfZHJvcChjaGlsZCk7CiAJCQlkcHV0KGNoaWxkKTsKIAkJfQogCX0KQEAgLTk5MCw3ICs5OTQsNyBAQAogICogVGhpcyBkZXNjcmliZXMgdGhlc2UgZnVuY3Rpb25zIGFuZCB0aGVpciBoZWxwZXJzLgogICoKICAqIEFsbG93IGFub3RoZXIga2VybmVsIHN5c3RlbSB0byBkZXBlbmQgb24gYSBjb25maWdfaXRlbS4gIElmIHRoaXMKLSAqIGhhcHBlbnMsIHRoZSBpdGVtIGNhbm5vdCBnbyBhd2F5IHVudGlsIHRoZSBkZXBlbmRhbnQgY2FuIGxpdmUgd2l0aG91dAorICogaGFwcGVucywgdGhlIGl0ZW0gY2Fubm90IGdvIGF3YXkgdW50aWwgdGhlIGRlcGVuZGVudCBjYW4gbGl2ZSB3aXRob3V0CiAgKiBpdC4gIFRoZSBpZGVhIGlzIHRvIGdpdmUgY2xpZW50IG1vZHVsZXMgYXMgc2ltcGxlIGFuIGludGVyZmFjZSBhcwogICogcG9zc2libGUuICBXaGVuIGEgc3lzdGVtIGFza3MgdGhlbSB0byBkZXBlbmQgb24gYW4gaXRlbSwgdGhleSBqdXN0CiAgKiBjYWxsIGNvbmZpZ2ZzX2RlcGVuZF9pdGVtKCkuICBJZiB0aGUgaXRlbSBpcyBsaXZlIGFuZCB0aGUgY2xpZW50CkBAIC0xNTQ1LDcgKzE1NDksNyBAQAogCXN0cnVjdCBjb25maWdmc19kaXJlbnQgKiBwYXJlbnRfc2QgPSBkZW50cnktPmRfZnNkYXRhOwogCXN0cnVjdCBjb25maWdmc19kaXJlbnQgKmN1cnNvciA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqcSA9ICZjdXJzb3ItPnNfc2libGluZzsKLQlpbm9fdCBpbm87CisJaW5vX3QgaW5vID0gMDsKIAlpbnQgaSA9IGZpbHAtPmZfcG9zOwogCiAJc3dpdGNoIChpKSB7CkBAIC0xNTczLDYgKzE1NzcsNyBAQAogCQkJCXN0cnVjdCBjb25maWdmc19kaXJlbnQgKm5leHQ7CiAJCQkJY29uc3QgY2hhciAqIG5hbWU7CiAJCQkJaW50IGxlbjsKKwkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKIAogCQkJCW5leHQgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBjb25maWdmc19kaXJlbnQsCiAJCQkJCQkgICBzX3NpYmxpbmcpOwpAQCAtMTU4MSw5ICsxNTg2LDI4IEBACiAKIAkJCQluYW1lID0gY29uZmlnZnNfZ2V0X25hbWUobmV4dCk7CiAJCQkJbGVuID0gc3RybGVuKG5hbWUpOwotCQkJCWlmIChuZXh0LT5zX2RlbnRyeSkKLQkJCQkJaW5vID0gbmV4dC0+c19kZW50cnktPmRfaW5vZGUtPmlfaW5vOwotCQkJCWVsc2UKKworCQkJCS8qCisJCQkJICogV2UnbGwgaGF2ZSBhIGRlbnRyeSBhbmQgYW4gaW5vZGUgZm9yCisJCQkJICogUElOTkVEIGl0ZW1zIGFuZCBmb3Igb3BlbiBhdHRyaWJ1dGUKKwkJCQkgKiBmaWxlcy4gIFdlIGxvY2sgaGVyZSB0byBwcmV2ZW50IGEgcmFjZQorCQkJCSAqIHdpdGggY29uZmlnZnNfZF9pcHV0KCkgY2xlYXJpbmcKKwkJCQkgKiBzX2RlbnRyeSBiZWZvcmUgY2FsbGluZyBpcHV0KCkuCisJCQkJICoKKwkJCQkgKiBXaHkgZG8gd2UgZ28gdG8gdGhlIHRyb3VibGU/ICBJZgorCQkJCSAqIHNvbWVvbmUgaGFzIGFuIGF0dHJpYnV0ZSBmaWxlIG9wZW4sCisJCQkJICogdGhlIGlub2RlIG51bWJlciBzaG91bGQgbWF0Y2ggdW50aWwKKwkJCQkgKiB0aGV5IGNsb3NlIGl0LiAgQmV5b25kIHRoYXQsIHdlIGRvbid0CisJCQkJICogY2FyZS4KKwkJCQkgKi8KKwkJCQlzcGluX2xvY2soJmNvbmZpZ2ZzX2RpcmVudF9sb2NrKTsKKwkJCQlkZW50cnkgPSBuZXh0LT5zX2RlbnRyeTsKKwkJCQlpZiAoZGVudHJ5KQorCQkJCQlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwkJCQlpZiAoaW5vZGUpCisJCQkJCWlubyA9IGlub2RlLT5pX2lubzsKKwkJCQlzcGluX3VubG9jaygmY29uZmlnZnNfZGlyZW50X2xvY2spOworCQkJCWlmICghaW5vZGUpCiAJCQkJCWlubyA9IGl1bmlxdWUoY29uZmlnZnNfc2IsIDIpOwogCiAJCQkJaWYgKGZpbGxkaXIoZGlyZW50LCBuYW1lLCBsZW4sIGZpbHAtPmZfcG9zLCBpbm8sCkBAIC0xNjgzLDcgKzE3MDcsOCBAQAogCQllcnIgPSBjb25maWdmc19hdHRhY2hfZ3JvdXAoc2QtPnNfZWxlbWVudCwgJmdyb3VwLT5jZ19pdGVtLAogCQkJCQkgICAgZGVudHJ5KTsKIAkJaWYgKGVycikgewotCQkJZF9kZWxldGUoZGVudHJ5KTsKKwkJCUJVR19PTihkZW50cnktPmRfaW5vZGUpOworCQkJZF9kcm9wKGRlbnRyeSk7CiAJCQlkcHV0KGRlbnRyeSk7CiAJCX0gZWxzZSB7CiAJCQlzcGluX2xvY2soJmNvbmZpZ2ZzX2RpcmVudF9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmMKaW5kZXggYWQyNWM0Yy4uMjJhMGVmNCAxMDA2NDQKLS0tIGEvZnMvZGNhY2hlLmMKKysrIGIvZnMvZGNhY2hlLmMKQEAgLTk5LDEyICs5OSw5IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGRfaGFzaF9tYXNrIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgdW5zaWduZWQgaW50IGRfaGFzaF9zaGlmdCBfX3JlYWRfbW9zdGx5OwogCi1zdHJ1Y3QgZGNhY2hlX2hhc2hfYnVja2V0IHsKLQlzdHJ1Y3QgaGxpc3RfYmxfaGVhZCBoZWFkOwotfTsKLXN0YXRpYyBzdHJ1Y3QgZGNhY2hlX2hhc2hfYnVja2V0ICpkZW50cnlfaGFzaHRhYmxlIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgc3RydWN0IGhsaXN0X2JsX2hlYWQgKmRlbnRyeV9oYXNodGFibGUgX19yZWFkX21vc3RseTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZGNhY2hlX2hhc2hfYnVja2V0ICpkX2hhc2goc3RydWN0IGRlbnRyeSAqcGFyZW50LAorc3RhdGljIGlubGluZSBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqZF9oYXNoKHN0cnVjdCBkZW50cnkgKnBhcmVudCwKIAkJCQkJdW5zaWduZWQgbG9uZyBoYXNoKQogewogCWhhc2ggKz0gKCh1bnNpZ25lZCBsb25nKSBwYXJlbnQgXiBHT0xERU5fUkFUSU9fUFJJTUUpIC8gTDFfQ0FDSEVfQllURVM7CkBAIC0xMTIsMTYgKzEwOSw2IEBACiAJcmV0dXJuIGRlbnRyeV9oYXNodGFibGUgKyAoaGFzaCAmIERfSEFTSE1BU0spOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3Bpbl9sb2NrX2J1Y2tldChzdHJ1Y3QgZGNhY2hlX2hhc2hfYnVja2V0ICpiKQotewotCWJpdF9zcGluX2xvY2soMCwgKHVuc2lnbmVkIGxvbmcgKikmYi0+aGVhZC5maXJzdCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzcGluX3VubG9ja19idWNrZXQoc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCAqYikKLXsKLQlfX2JpdF9zcGluX3VubG9jaygwLCAodW5zaWduZWQgbG9uZyAqKSZiLT5oZWFkLmZpcnN0KTsKLX0KLQogLyogU3RhdGlzdGljcyBnYXRoZXJpbmcuICovCiBzdHJ1Y3QgZGVudHJ5X3N0YXRfdCBkZW50cnlfc3RhdCA9IHsKIAkuYWdlX2xpbWl0ID0gNDUsCkBAIC0xNjcsOCArMTU0LDggQEAKIAlpZiAoZGVudHJ5LT5kX29wICYmIGRlbnRyeS0+ZF9vcC0+ZF9yZWxlYXNlKQogCQlkZW50cnktPmRfb3AtPmRfcmVsZWFzZShkZW50cnkpOwogCi0JLyogaWYgZGVudHJ5IHdhcyBuZXZlciBpbnNlcnRlZCBpbnRvIGhhc2gsIGltbWVkaWF0ZSBmcmVlIGlzIE9LICovCi0JaWYgKGhsaXN0X2JsX3VuaGFzaGVkKCZkZW50cnktPmRfaGFzaCkpCisJLyogaWYgZGVudHJ5IHdhcyBuZXZlciB2aXNpYmxlIHRvIFJDVSwgaW1tZWRpYXRlIGZyZWUgaXMgT0sgKi8KKwlpZiAoIShkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfUkNVQUNDRVNTKSkKIAkJX19kX2ZyZWUoJmRlbnRyeS0+ZF91LmRfcmN1KTsKIAllbHNlCiAJCWNhbGxfcmN1KCZkZW50cnktPmRfdS5kX3JjdSwgX19kX2ZyZWUpOwpAQCAtMzMwLDI4ICszMTcsMTkgQEAKICAqLwogdm9pZCBfX2RfZHJvcChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7Ci0JaWYgKCEoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX1VOSEFTSEVEKSkgewotCQlpZiAodW5saWtlbHkoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX0RJU0NPTk5FQ1RFRCkpIHsKLQkJCWJpdF9zcGluX2xvY2soMCwKLQkJCQkodW5zaWduZWQgbG9uZyAqKSZkZW50cnktPmRfc2ItPnNfYW5vbi5maXJzdCk7Ci0JCQlkZW50cnktPmRfZmxhZ3MgfD0gRENBQ0hFX1VOSEFTSEVEOwotCQkJaGxpc3RfYmxfZGVsX2luaXQoJmRlbnRyeS0+ZF9oYXNoKTsKLQkJCV9fYml0X3NwaW5fdW5sb2NrKDAsCi0JCQkJKHVuc2lnbmVkIGxvbmcgKikmZGVudHJ5LT5kX3NiLT5zX2Fub24uZmlyc3QpOwotCQl9IGVsc2UgewotCQkJc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCAqYjsKKwlpZiAoIWRfdW5oYXNoZWQoZGVudHJ5KSkgeworCQlzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqYjsKKwkJaWYgKHVubGlrZWx5KGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9ESVNDT05ORUNURUQpKQorCQkJYiA9ICZkZW50cnktPmRfc2ItPnNfYW5vbjsKKwkJZWxzZQogCQkJYiA9IGRfaGFzaChkZW50cnktPmRfcGFyZW50LCBkZW50cnktPmRfbmFtZS5oYXNoKTsKLQkJCXNwaW5fbG9ja19idWNrZXQoYik7Ci0JCQkvKgotCQkJICogV2UgbWF5IG5vdCBhY3R1YWxseSBuZWVkIHRvIHB1dCBEQ0FDSEVfVU5IQVNIRUQKLQkJCSAqIG1hbmlwdWxhdGlvbnMgdW5kZXIgdGhlIGhhc2ggbG9jaywgYnV0IGZvbGxvdwotCQkJICogdGhlIHByaW5jaXBsZSBvZiBsZWFzdCBzdXJwcmlzZS4KLQkJCSAqLwotCQkJZGVudHJ5LT5kX2ZsYWdzIHw9IERDQUNIRV9VTkhBU0hFRDsKLQkJCWhsaXN0X2JsX2RlbF9yY3UoJmRlbnRyeS0+ZF9oYXNoKTsKLQkJCXNwaW5fdW5sb2NrX2J1Y2tldChiKTsKLQkJCWRlbnRyeV9yY3V3YWxrX2JhcnJpZXIoZGVudHJ5KTsKLQkJfQorCisJCWhsaXN0X2JsX2xvY2soYik7CisJCV9faGxpc3RfYmxfZGVsKCZkZW50cnktPmRfaGFzaCk7CisJCWRlbnRyeS0+ZF9oYXNoLnBwcmV2ID0gTlVMTDsKKwkJaGxpc3RfYmxfdW5sb2NrKGIpOworCisJCWRlbnRyeV9yY3V3YWxrX2JhcnJpZXIoZGVudHJ5KTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKF9fZF9kcm9wKTsKQEAgLTEzMDQsNyArMTI4Miw3IEBACiAJZG5hbWVbbmFtZS0+bGVuXSA9IDA7CiAKIAlkZW50cnktPmRfY291bnQgPSAxOwotCWRlbnRyeS0+ZF9mbGFncyA9IERDQUNIRV9VTkhBU0hFRDsKKwlkZW50cnktPmRfZmxhZ3MgPSAwOwogCXNwaW5fbG9ja19pbml0KCZkZW50cnktPmRfbG9jayk7CiAJc2VxY291bnRfaW5pdCgmZGVudHJ5LT5kX3NlcSk7CiAJZGVudHJ5LT5kX2lub2RlID0gTlVMTDsKQEAgLTE2MDYsMTAgKzE1ODQsOSBAQAogCXRtcC0+ZF9pbm9kZSA9IGlub2RlOwogCXRtcC0+ZF9mbGFncyB8PSBEQ0FDSEVfRElTQ09OTkVDVEVEOwogCWxpc3RfYWRkKCZ0bXAtPmRfYWxpYXMsICZpbm9kZS0+aV9kZW50cnkpOwotCWJpdF9zcGluX2xvY2soMCwgKHVuc2lnbmVkIGxvbmcgKikmdG1wLT5kX3NiLT5zX2Fub24uZmlyc3QpOwotCXRtcC0+ZF9mbGFncyAmPSB+RENBQ0hFX1VOSEFTSEVEOworCWhsaXN0X2JsX2xvY2soJnRtcC0+ZF9zYi0+c19hbm9uKTsKIAlobGlzdF9ibF9hZGRfaGVhZCgmdG1wLT5kX2hhc2gsICZ0bXAtPmRfc2ItPnNfYW5vbik7Ci0JX19iaXRfc3Bpbl91bmxvY2soMCwgKHVuc2lnbmVkIGxvbmcgKikmdG1wLT5kX3NiLT5zX2Fub24uZmlyc3QpOworCWhsaXN0X2JsX3VubG9jaygmdG1wLT5kX3NiLT5zX2Fub24pOwogCXNwaW5fdW5sb2NrKCZ0bXAtPmRfbG9jayk7CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCXNlY3VyaXR5X2RfaW5zdGFudGlhdGUodG1wLCBpbm9kZSk7CkBAIC0xNzg5LDcgKzE3NjYsNyBAQAogCXVuc2lnbmVkIGludCBsZW4gPSBuYW1lLT5sZW47CiAJdW5zaWduZWQgaW50IGhhc2ggPSBuYW1lLT5oYXNoOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0ciA9IG5hbWUtPm5hbWU7Ci0Jc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCAqYiA9IGRfaGFzaChwYXJlbnQsIGhhc2gpOworCXN0cnVjdCBobGlzdF9ibF9oZWFkICpiID0gZF9oYXNoKHBhcmVudCwgaGFzaCk7CiAJc3RydWN0IGhsaXN0X2JsX25vZGUgKm5vZGU7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCkBAIC0xODEzLDcgKzE3OTAsNyBAQAogCSAqCiAJICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcGF0aC1sb29rdXAudHh0IGZvciBtb3JlIGRldGFpbHMuCiAJICovCi0JaGxpc3RfYmxfZm9yX2VhY2hfZW50cnlfcmN1KGRlbnRyeSwgbm9kZSwgJmItPmhlYWQsIGRfaGFzaCkgeworCWhsaXN0X2JsX2Zvcl9lYWNoX2VudHJ5X3JjdShkZW50cnksIG5vZGUsIGIsIGRfaGFzaCkgewogCQlzdHJ1Y3QgaW5vZGUgKmk7CiAJCWNvbnN0IGNoYXIgKnRuYW1lOwogCQlpbnQgdGxlbjsKQEAgLTE5MDgsNyArMTg4NSw3IEBACiAJdW5zaWduZWQgaW50IGxlbiA9IG5hbWUtPmxlbjsKIAl1bnNpZ25lZCBpbnQgaGFzaCA9IG5hbWUtPmhhc2g7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqc3RyID0gbmFtZS0+bmFtZTsKLQlzdHJ1Y3QgZGNhY2hlX2hhc2hfYnVja2V0ICpiID0gZF9oYXNoKHBhcmVudCwgaGFzaCk7CisJc3RydWN0IGhsaXN0X2JsX2hlYWQgKmIgPSBkX2hhc2gocGFyZW50LCBoYXNoKTsKIAlzdHJ1Y3QgaGxpc3RfYmxfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgZGVudHJ5ICpmb3VuZCA9IE5VTEw7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwpAQCAtMTkzNSw3ICsxOTEyLDcgQEAKIAkgKi8KIAlyY3VfcmVhZF9sb2NrKCk7CiAJCi0JaGxpc3RfYmxfZm9yX2VhY2hfZW50cnlfcmN1KGRlbnRyeSwgbm9kZSwgJmItPmhlYWQsIGRfaGFzaCkgeworCWhsaXN0X2JsX2Zvcl9lYWNoX2VudHJ5X3JjdShkZW50cnksIG5vZGUsIGIsIGRfaGFzaCkgewogCQljb25zdCBjaGFyICp0bmFtZTsKIAkJaW50IHRsZW47CiAKQEAgLTIwODYsMTMgKzIwNjMsMTMgQEAKIH0KIEVYUE9SVF9TWU1CT0woZF9kZWxldGUpOwogCi1zdGF0aWMgdm9pZCBfX2RfcmVoYXNoKHN0cnVjdCBkZW50cnkgKiBlbnRyeSwgc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCAqYikKK3N0YXRpYyB2b2lkIF9fZF9yZWhhc2goc3RydWN0IGRlbnRyeSAqIGVudHJ5LCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqYikKIHsKIAlCVUdfT04oIWRfdW5oYXNoZWQoZW50cnkpKTsKLQlzcGluX2xvY2tfYnVja2V0KGIpOwotIAllbnRyeS0+ZF9mbGFncyAmPSB+RENBQ0hFX1VOSEFTSEVEOwotCWhsaXN0X2JsX2FkZF9oZWFkX3JjdSgmZW50cnktPmRfaGFzaCwgJmItPmhlYWQpOwotCXNwaW5fdW5sb2NrX2J1Y2tldChiKTsKKwlobGlzdF9ibF9sb2NrKGIpOworCWVudHJ5LT5kX2ZsYWdzIHw9IERDQUNIRV9SQ1VBQ0NFU1M7CisJaGxpc3RfYmxfYWRkX2hlYWRfcmN1KCZlbnRyeS0+ZF9oYXNoLCBiKTsKKwlobGlzdF9ibF91bmxvY2soYik7CiB9CiAKIHN0YXRpYyB2b2lkIF9kX3JlaGFzaChzdHJ1Y3QgZGVudHJ5ICogZW50cnkpCkBAIC0yMTMxLDcgKzIxMDgsNyBAQAogICovCiB2b2lkIGRlbnRyeV91cGRhdGVfbmFtZV9jYXNlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHFzdHIgKm5hbWUpCiB7Ci0JQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCkpOworCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZkZW50cnktPmRfcGFyZW50LT5kX2lub2RlLT5pX211dGV4KSk7CiAJQlVHX09OKGRlbnRyeS0+ZF9uYW1lLmxlbiAhPSBuYW1lLT5sZW4pOyAvKiBkX2xvb2t1cCBnaXZlcyB0aGlzICovCiAKIAlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKQEAgLTMwMjUsNyArMzAwMiw3IEBACiAKIAlkZW50cnlfaGFzaHRhYmxlID0KIAkJYWxsb2NfbGFyZ2Vfc3lzdGVtX2hhc2goIkRlbnRyeSBjYWNoZSIsCi0JCQkJCXNpemVvZihzdHJ1Y3QgZGNhY2hlX2hhc2hfYnVja2V0KSwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBobGlzdF9ibF9oZWFkKSwKIAkJCQkJZGhhc2hfZW50cmllcywKIAkJCQkJMTMsCiAJCQkJCUhBU0hfRUFSTFksCkBAIC0zMDM0LDcgKzMwMTEsNyBAQAogCQkJCQkwKTsKIAogCWZvciAobG9vcCA9IDA7IGxvb3AgPCAoMSA8PCBkX2hhc2hfc2hpZnQpOyBsb29wKyspCi0JCUlOSVRfSExJU1RfQkxfSEVBRCgmZGVudHJ5X2hhc2h0YWJsZVtsb29wXS5oZWFkKTsKKwkJSU5JVF9ITElTVF9CTF9IRUFEKGRlbnRyeV9oYXNodGFibGUgKyBsb29wKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGRjYWNoZV9pbml0KHZvaWQpCkBAIC0zMDU3LDcgKzMwMzQsNyBAQAogCiAJZGVudHJ5X2hhc2h0YWJsZSA9CiAJCWFsbG9jX2xhcmdlX3N5c3RlbV9oYXNoKCJEZW50cnkgY2FjaGUiLAotCQkJCQlzaXplb2Yoc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCksCisJCQkJCXNpemVvZihzdHJ1Y3QgaGxpc3RfYmxfaGVhZCksCiAJCQkJCWRoYXNoX2VudHJpZXMsCiAJCQkJCTEzLAogCQkJCQkwLApAQCAtMzA2Niw3ICszMDQzLDcgQEAKIAkJCQkJMCk7CiAKIAlmb3IgKGxvb3AgPSAwOyBsb29wIDwgKDEgPDwgZF9oYXNoX3NoaWZ0KTsgbG9vcCsrKQotCQlJTklUX0hMSVNUX0JMX0hFQUQoJmRlbnRyeV9oYXNodGFibGVbbG9vcF0uaGVhZCk7CisJCUlOSVRfSExJU1RfQkxfSEVBRChkZW50cnlfaGFzaHRhYmxlICsgbG9vcCk7CiB9CiAKIC8qIFNMQUIgY2FjaGUgZm9yIF9fZ2V0bmFtZSgpIGNvbnN1bWVycyAqLwpkaWZmIC0tZ2l0IGEvZnMvZGxtL2xvY2suYyBiL2ZzL2RsbS9sb2NrLmMKaW5kZXggMDRiOGM0NC4uNTZkNmJmYyAxMDA2NDQKLS0tIGEvZnMvZGxtL2xvY2suYworKysgYi9mcy9kbG0vbG9jay5jCkBAIC01MTksNyArNTE5LDcgQEAKIAl9CiB9CiAKLS8qIFdoZW4gYWxsIHJlZmVyZW5jZXMgdG8gdGhlIHJzYiBhcmUgZ29uZSBpdCdzIHRyYW5zZmVyZWQgdG8KKy8qIFdoZW4gYWxsIHJlZmVyZW5jZXMgdG8gdGhlIHJzYiBhcmUgZ29uZSBpdCdzIHRyYW5zZmVycmVkIHRvCiAgICB0aGUgdG9zc2VkIGxpc3QgZm9yIGxhdGVyIGRpc3Bvc2FsLiAqLwogCiBzdGF0aWMgdm9pZCBwdXRfcnNiKHN0cnVjdCBkbG1fcnNiICpyKQpkaWZmIC0tZ2l0IGEvZnMvZGxtL2xvd2NvbW1zLmMgYi9mcy9kbG0vbG93Y29tbXMuYwppbmRleCBiZmZhMWU3Li41ZTJjNzFmIDEwMDY0NAotLS0gYS9mcy9kbG0vbG93Y29tbXMuYworKysgYi9mcy9kbG0vbG93Y29tbXMuYwpAQCAtODEwLDcgKzgxMCw3IEBACiAKIAkvKgogCSAqIEFkZCBpdCB0byB0aGUgYWN0aXZlIHF1ZXVlIGluIGNhc2Ugd2UgZ290IGRhdGEKLQkgKiBiZXdlZW4gcHJvY2Vzc2luZyB0aGUgYWNjZXB0IGFkZGluZyB0aGUgc29ja2V0CisJICogYmV0d2VlbiBwcm9jZXNzaW5nIHRoZSBhY2NlcHQgYWRkaW5nIHRoZSBzb2NrZXQKIAkgKiB0byB0aGUgcmVhZF9zb2NrZXRzIGxpc3QKIAkgKi8KIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoQ0ZfUkVBRF9QRU5ESU5HLCAmYWRkY29uLT5mbGFncykpCmRpZmYgLS1naXQgYS9mcy9kbG0vcmVjb3Zlci5jIGIvZnMvZGxtL3JlY292ZXIuYwppbmRleCBlZGE0M2YzLi4xNDYzODIzIDEwMDY0NAotLS0gYS9mcy9kbG0vcmVjb3Zlci5jCisrKyBiL2ZzL2RsbS9yZWNvdmVyLmMKQEAgLTMwNCw3ICszMDQsNyBAQAogfQogCiAvKgotICogUHJvcG9nYXRlIHRoZSBuZXcgbWFzdGVyIG5vZGVpZCB0byBsb2NrcworICogUHJvcGFnYXRlIHRoZSBuZXcgbWFzdGVyIG5vZGVpZCB0byBsb2NrcwogICogVGhlIE5FV19NQVNURVIgZmxhZyB0ZWxscyBkbG1fcmVjb3Zlcl9sb2NrcygpIHdoaWNoIHJzYidzIHRvIGNvbnNpZGVyLgogICogVGhlIE5FV19NQVNURVIyIGZsYWcgdGVsbHMgcmVjb3Zlcl9sdmIoKSBhbmQgc2V0X2xvY2tzX3B1cmdlZCgpIHdoaWNoCiAgKiByc2IncyB0byBjb25zaWRlci4KZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2NyeXB0by5jIGIvZnMvZWNyeXB0ZnMvY3J5cHRvLmMKaW5kZXggZDJhNzBhNC4uYjhkNWM4MCAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvY3J5cHRvLmMKKysrIGIvZnMvZWNyeXB0ZnMvY3J5cHRvLmMKQEAgLTE0NTIsNiArMTQ1MiwyNSBAQAogCWNyeXB0X3N0YXQtPm1ldGFkYXRhX3NpemUgPSBFQ1JZUFRGU19NSU5JTVVNX0hFQURFUl9FWFRFTlRfU0laRTsKIH0KIAordm9pZCBlY3J5cHRmc19pX3NpemVfaW5pdChjb25zdCBjaGFyICpwYWdlX3ZpcnQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGVjcnlwdGZzX21vdW50X2NyeXB0X3N0YXQgKm1vdW50X2NyeXB0X3N0YXQ7CisJc3RydWN0IGVjcnlwdGZzX2NyeXB0X3N0YXQgKmNyeXB0X3N0YXQ7CisJdTY0IGZpbGVfc2l6ZTsKKworCWNyeXB0X3N0YXQgPSAmZWNyeXB0ZnNfaW5vZGVfdG9fcHJpdmF0ZShpbm9kZSktPmNyeXB0X3N0YXQ7CisJbW91bnRfY3J5cHRfc3RhdCA9CisJCSZlY3J5cHRmc19zdXBlcmJsb2NrX3RvX3ByaXZhdGUoaW5vZGUtPmlfc2IpLT5tb3VudF9jcnlwdF9zdGF0OworCWlmIChtb3VudF9jcnlwdF9zdGF0LT5mbGFncyAmIEVDUllQVEZTX0VOQ1JZUFRFRF9WSUVXX0VOQUJMRUQpIHsKKwkJZmlsZV9zaXplID0gaV9zaXplX3JlYWQoZWNyeXB0ZnNfaW5vZGVfdG9fbG93ZXIoaW5vZGUpKTsKKwkJaWYgKGNyeXB0X3N0YXQtPmZsYWdzICYgRUNSWVBURlNfTUVUQURBVEFfSU5fWEFUVFIpCisJCQlmaWxlX3NpemUgKz0gY3J5cHRfc3RhdC0+bWV0YWRhdGFfc2l6ZTsKKwl9IGVsc2UKKwkJZmlsZV9zaXplID0gZ2V0X3VuYWxpZ25lZF9iZTY0KHBhZ2VfdmlydCk7CisJaV9zaXplX3dyaXRlKGlub2RlLCAobG9mZl90KWZpbGVfc2l6ZSk7CisJY3J5cHRfc3RhdC0+ZmxhZ3MgfD0gRUNSWVBURlNfSV9TSVpFX0lOSVRJQUxJWkVEOworfQorCiAvKioKICAqIGVjcnlwdGZzX3JlYWRfaGVhZGVyc192aXJ0CiAgKiBAcGFnZV92aXJ0OiBUaGUgdmlydHVhbCBhZGRyZXNzIGludG8gd2hpY2ggdG8gcmVhZCB0aGUgaGVhZGVycwpAQCAtMTQ4Miw2ICsxNTAxLDggQEAKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CisJaWYgKCEoY3J5cHRfc3RhdC0+ZmxhZ3MgJiBFQ1JZUFRGU19JX1NJWkVfSU5JVElBTElaRUQpKQorCQllY3J5cHRmc19pX3NpemVfaW5pdChwYWdlX3ZpcnQsIGVjcnlwdGZzX2RlbnRyeS0+ZF9pbm9kZSk7CiAJb2Zmc2V0ICs9IE1BR0lDX0VDUllQVEZTX01BUktFUl9TSVpFX0JZVEVTOwogCXJjID0gZWNyeXB0ZnNfcHJvY2Vzc19mbGFncyhjcnlwdF9zdGF0LCAocGFnZV92aXJ0ICsgb2Zmc2V0KSwKIAkJCQkgICAgJmJ5dGVzX3JlYWQpOwpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmggYi9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaAppbmRleCBiZDNjYWZkLi5lNzAyODI3IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaAorKysgYi9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaApAQCAtMjY5LDYgKzI2OSw3IEBACiAjZGVmaW5lIEVDUllQVEZTX0VOQ0ZOX1VTRV9NT1VOVF9GTkVLIDB4MDAwMDA4MDAKICNkZWZpbmUgRUNSWVBURlNfRU5DRk5fVVNFX0ZFSyAgICAgICAgMHgwMDAwMTAwMAogI2RlZmluZSBFQ1JZUFRGU19VTkxJTktfU0lHUyAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIEVDUllQVEZTX0lfU0laRV9JTklUSUFMSVpFRCAgIDB4MDAwMDQwMDAKIAl1MzIgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGZpbGVfdmVyc2lvbjsKIAlzaXplX3QgaXZfYnl0ZXM7CkBAIC0yOTUsNiArMjk2LDggQEAKIHN0cnVjdCBlY3J5cHRmc19pbm9kZV9pbmZvIHsKIAlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwogCXN0cnVjdCBpbm9kZSAqd2lpX2lub2RlOworCXN0cnVjdCBtdXRleCBsb3dlcl9maWxlX211dGV4OworCWF0b21pY190IGxvd2VyX2ZpbGVfY291bnQ7CiAJc3RydWN0IGZpbGUgKmxvd2VyX2ZpbGU7CiAJc3RydWN0IGVjcnlwdGZzX2NyeXB0X3N0YXQgY3J5cHRfc3RhdDsKIH07CkBAIC02MjYsNiArNjI5LDcgQEAKIGludCBlY3J5cHRmc19pbnRlcnBvc2Uoc3RydWN0IGRlbnRyeSAqaGlkZGVuX2RlbnRyeSwKIAkJICAgICAgIHN0cnVjdCBkZW50cnkgKnRoaXNfZGVudHJ5LCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkgICAgICAgdTMyIGZsYWdzKTsKK3ZvaWQgZWNyeXB0ZnNfaV9zaXplX2luaXQoY29uc3QgY2hhciAqcGFnZV92aXJ0LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludCBlY3J5cHRmc19sb29rdXBfYW5kX2ludGVycG9zZV9sb3dlcihzdHJ1Y3QgZGVudHJ5ICplY3J5cHRmc19kZW50cnksCiAJCQkJCXN0cnVjdCBkZW50cnkgKmxvd2VyX2RlbnRyeSwKIAkJCQkJc3RydWN0IGlub2RlICplY3J5cHRmc19kaXJfaW5vZGUpOwpAQCAtNzU3LDcgKzc2MSw4IEBACiAJCQkgICAgIHN0cnVjdCBkZW50cnkgKmxvd2VyX2RlbnRyeSwKIAkJCSAgICAgc3RydWN0IHZmc21vdW50ICpsb3dlcl9tbnQsCiAJCQkgICAgIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKTsKLWludCBlY3J5cHRmc19pbml0X3BlcnNpc3RlbnRfZmlsZShzdHJ1Y3QgZGVudHJ5ICplY3J5cHRmc19kZW50cnkpOworaW50IGVjcnlwdGZzX2dldF9sb3dlcl9maWxlKHN0cnVjdCBkZW50cnkgKmVjcnlwdGZzX2RlbnRyeSk7Cit2b2lkIGVjcnlwdGZzX3B1dF9sb3dlcl9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogaW50CiBlY3J5cHRmc193cml0ZV90YWdfNzBfcGFja2V0KGNoYXIgKmRlc3QsIHNpemVfdCAqcmVtYWluaW5nX2J5dGVzLAogCQkJICAgICBzaXplX3QgKnBhY2tldF9zaXplLApkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvZmlsZS5jIGIvZnMvZWNyeXB0ZnMvZmlsZS5jCmluZGV4IGNlZGM5MTMuLjU2NmU1NDcgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2ZpbGUuYworKysgYi9mcy9lY3J5cHRmcy9maWxlLmMKQEAgLTE5MSwxMCArMTkxLDEwIEBACiAJCQkJICAgICAgfCBFQ1JZUFRGU19FTkNSWVBURUQpOwogCX0KIAltdXRleF91bmxvY2soJmNyeXB0X3N0YXQtPmNzX211dGV4KTsKLQlyYyA9IGVjcnlwdGZzX2luaXRfcGVyc2lzdGVudF9maWxlKGVjcnlwdGZzX2RlbnRyeSk7CisJcmMgPSBlY3J5cHRmc19nZXRfbG93ZXJfZmlsZShlY3J5cHRmc19kZW50cnkpOwogCWlmIChyYykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBhdHRlbXB0aW5nIHRvIGluaXRpYWxpemUgIgotCQkJInRoZSBwZXJzaXN0ZW50IGZpbGUgZm9yIHRoZSBkZW50cnkgd2l0aCBuYW1lICIKKwkJCSJ0aGUgbG93ZXIgZmlsZSBmb3IgdGhlIGRlbnRyeSB3aXRoIG5hbWUgIgogCQkJIlslc107IHJjID0gWyVkXVxuIiwgX19mdW5jX18sCiAJCQllY3J5cHRmc19kZW50cnktPmRfbmFtZS5uYW1lLCByYyk7CiAJCWdvdG8gb3V0X2ZyZWU7CkBAIC0yMDIsOSArMjAyLDkgQEAKIAlpZiAoKGVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoaW5vZGUpLT5sb3dlcl9maWxlLT5mX2ZsYWdzICYgT19BQ0NNT0RFKQogCSAgICA9PSBPX1JET05MWSAmJiAoZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgIT0gT19SRE9OTFkpIHsKIAkJcmMgPSAtRVBFUk07Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBMb3dlciBwZXJzaXN0ZW50IGZpbGUgaXMgUk87IGVDcnlwdGZzICIKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IExvd2VyIGZpbGUgaXMgUk87IGVDcnlwdGZzICIKIAkJICAgICAgICJmaWxlIG11c3QgaGVuY2UgYmUgb3BlbmVkIFJPXG4iLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gb3V0X2ZyZWU7CisJCWdvdG8gb3V0X3B1dDsKIAl9CiAJZWNyeXB0ZnNfc2V0X2ZpbGVfbG93ZXIoCiAJCWZpbGUsIGVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoaW5vZGUpLT5sb3dlcl9maWxlKTsKQEAgLTIzMiwxMCArMjMyLDExIEBACiAJCQkJICAgICAgICJQbGFpbnRleHQgcGFzc3Rocm91Z2ggbW9kZSBpcyBub3QgIgogCQkJCSAgICAgICAiZW5hYmxlZDsgcmV0dXJuaW5nIC1FSU9cbiIpOwogCQkJCW11dGV4X3VubG9jaygmY3J5cHRfc3RhdC0+Y3NfbXV0ZXgpOwotCQkJCWdvdG8gb3V0X2ZyZWU7CisJCQkJZ290byBvdXRfcHV0OwogCQkJfQogCQkJcmMgPSAwOwotCQkJY3J5cHRfc3RhdC0+ZmxhZ3MgJj0gfihFQ1JZUFRGU19FTkNSWVBURUQpOworCQkJY3J5cHRfc3RhdC0+ZmxhZ3MgJj0gfihFQ1JZUFRGU19JX1NJWkVfSU5JVElBTElaRUQKKwkJCQkJICAgICAgIHwgRUNSWVBURlNfRU5DUllQVEVEKTsKIAkJCW11dGV4X3VubG9jaygmY3J5cHRfc3RhdC0+Y3NfbXV0ZXgpOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTI0NSw2ICsyNDYsOCBAQAogCQkJIlsweCUuMTZseF0gc2l6ZTogWzB4JS4xNmxseF1cbiIsIGlub2RlLCBpbm9kZS0+aV9pbm8sCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKWlfc2l6ZV9yZWFkKGlub2RlKSk7CiAJZ290byBvdXQ7CitvdXRfcHV0OgorCWVjcnlwdGZzX3B1dF9sb3dlcl9maWxlKGlub2RlKTsKIG91dF9mcmVlOgogCWttZW1fY2FjaGVfZnJlZShlY3J5cHRmc19maWxlX2luZm9fY2FjaGUsCiAJCQllY3J5cHRmc19maWxlX3RvX3ByaXZhdGUoZmlsZSkpOwpAQCAtMjU0LDE3ICsyNTcsMTMgQEAKIAogc3RhdGljIGludCBlY3J5cHRmc19mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgZmxfb3duZXJfdCB0ZCkKIHsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBmaWxlICpsb3dlcl9maWxlID0gTlVMTDsKLQotCWxvd2VyX2ZpbGUgPSBlY3J5cHRmc19maWxlX3RvX2xvd2VyKGZpbGUpOwotCWlmIChsb3dlcl9maWxlLT5mX29wICYmIGxvd2VyX2ZpbGUtPmZfb3AtPmZsdXNoKQotCQlyYyA9IGxvd2VyX2ZpbGUtPmZfb3AtPmZsdXNoKGxvd2VyX2ZpbGUsIHRkKTsKLQlyZXR1cm4gcmM7CisJcmV0dXJuIGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFCisJICAgICAgID8gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChmaWxlLT5mX21hcHBpbmcpIDogMDsKIH0KIAogc3RhdGljIGludCBlY3J5cHRmc19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogeworCWVjcnlwdGZzX3B1dF9sb3dlcl9maWxlKGlub2RlKTsKIAlrbWVtX2NhY2hlX2ZyZWUoZWNyeXB0ZnNfZmlsZV9pbmZvX2NhY2hlLAogCQkJZWNyeXB0ZnNfZmlsZV90b19wcml2YXRlKGZpbGUpKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2lub2RlLmMgYi9mcy9lY3J5cHRmcy9pbm9kZS5jCmluZGV4IGY5OTA1MWIuLjRkNGNjNmEgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2lub2RlLmMKKysrIGIvZnMvZWNyeXB0ZnMvaW5vZGUuYwpAQCAtMTY4LDE5ICsxNjgsMTggQEAKIAkJCQkiY29udGV4dDsgcmMgPSBbJWRdXG4iLCByYyk7CiAJCWdvdG8gb3V0OwogCX0KLQlyYyA9IGVjcnlwdGZzX2luaXRfcGVyc2lzdGVudF9maWxlKGVjcnlwdGZzX2RlbnRyeSk7CisJcmMgPSBlY3J5cHRmc19nZXRfbG93ZXJfZmlsZShlY3J5cHRmc19kZW50cnkpOwogCWlmIChyYykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBhdHRlbXB0aW5nIHRvIGluaXRpYWxpemUgIgotCQkJInRoZSBwZXJzaXN0ZW50IGZpbGUgZm9yIHRoZSBkZW50cnkgd2l0aCBuYW1lICIKKwkJCSJ0aGUgbG93ZXIgZmlsZSBmb3IgdGhlIGRlbnRyeSB3aXRoIG5hbWUgIgogCQkJIlslc107IHJjID0gWyVkXVxuIiwgX19mdW5jX18sCiAJCQllY3J5cHRmc19kZW50cnktPmRfbmFtZS5uYW1lLCByYyk7CiAJCWdvdG8gb3V0OwogCX0KIAlyYyA9IGVjcnlwdGZzX3dyaXRlX21ldGFkYXRhKGVjcnlwdGZzX2RlbnRyeSk7Ci0JaWYgKHJjKSB7CisJaWYgKHJjKQogCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHdyaXRpbmcgaGVhZGVyczsgcmMgPSBbJWRdXG4iLCByYyk7Ci0JCWdvdG8gb3V0OwotCX0KKwllY3J5cHRmc19wdXRfbG93ZXJfZmlsZShlY3J5cHRmc19kZW50cnktPmRfaW5vZGUpOwogb3V0OgogCXJldHVybiByYzsKIH0KQEAgLTIyNiwxMSArMjI1LDkgQEAKIAlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kaXJfZGVudHJ5OwogCXN0cnVjdCB2ZnNtb3VudCAqbG93ZXJfbW50OwogCXN0cnVjdCBpbm9kZSAqbG93ZXJfaW5vZGU7Ci0Jc3RydWN0IGVjcnlwdGZzX21vdW50X2NyeXB0X3N0YXQgKm1vdW50X2NyeXB0X3N0YXQ7CiAJc3RydWN0IGVjcnlwdGZzX2NyeXB0X3N0YXQgKmNyeXB0X3N0YXQ7CiAJY2hhciAqcGFnZV92aXJ0ID0gTlVMTDsKLQl1NjQgZmlsZV9zaXplOwotCWludCByYyA9IDA7CisJaW50IHB1dF9sb3dlciA9IDAsIHJjID0gMDsKIAogCWxvd2VyX2Rpcl9kZW50cnkgPSBsb3dlcl9kZW50cnktPmRfcGFyZW50OwogCWxvd2VyX21udCA9IG1udGdldChlY3J5cHRmc19kZW50cnlfdG9fbG93ZXJfbW50KApAQCAtMjc3LDE0ICsyNzQsMTUgQEAKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9Ci0JcmMgPSBlY3J5cHRmc19pbml0X3BlcnNpc3RlbnRfZmlsZShlY3J5cHRmc19kZW50cnkpOworCXJjID0gZWNyeXB0ZnNfZ2V0X2xvd2VyX2ZpbGUoZWNyeXB0ZnNfZGVudHJ5KTsKIAlpZiAocmMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgYXR0ZW1wdGluZyB0byBpbml0aWFsaXplICIKLQkJCSJ0aGUgcGVyc2lzdGVudCBmaWxlIGZvciB0aGUgZGVudHJ5IHdpdGggbmFtZSAiCisJCQkidGhlIGxvd2VyIGZpbGUgZm9yIHRoZSBkZW50cnkgd2l0aCBuYW1lICIKIAkJCSJbJXNdOyByYyA9IFslZF1cbiIsIF9fZnVuY19fLAogCQkJZWNyeXB0ZnNfZGVudHJ5LT5kX25hbWUubmFtZSwgcmMpOwogCQlnb3RvIG91dF9mcmVlX2ttZW07CiAJfQorCXB1dF9sb3dlciA9IDE7CiAJY3J5cHRfc3RhdCA9ICZlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKAogCQkJCQllY3J5cHRmc19kZW50cnktPmRfaW5vZGUpLT5jcnlwdF9zdGF0OwogCS8qIFRPRE86IGxvY2sgZm9yIGNyeXB0X3N0YXQgY29tcGFyaXNvbiAqLwpAQCAtMzAyLDE4ICszMDAsNyBAQAogCQl9CiAJCWNyeXB0X3N0YXQtPmZsYWdzIHw9IEVDUllQVEZTX01FVEFEQVRBX0lOX1hBVFRSOwogCX0KLQltb3VudF9jcnlwdF9zdGF0ID0gJmVjcnlwdGZzX3N1cGVyYmxvY2tfdG9fcHJpdmF0ZSgKLQkJZWNyeXB0ZnNfZGVudHJ5LT5kX3NiKS0+bW91bnRfY3J5cHRfc3RhdDsKLQlpZiAobW91bnRfY3J5cHRfc3RhdC0+ZmxhZ3MgJiBFQ1JZUFRGU19FTkNSWVBURURfVklFV19FTkFCTEVEKSB7Ci0JCWlmIChjcnlwdF9zdGF0LT5mbGFncyAmIEVDUllQVEZTX01FVEFEQVRBX0lOX1hBVFRSKQotCQkJZmlsZV9zaXplID0gKGNyeXB0X3N0YXQtPm1ldGFkYXRhX3NpemUKLQkJCQkgICAgICsgaV9zaXplX3JlYWQobG93ZXJfZGVudHJ5LT5kX2lub2RlKSk7Ci0JCWVsc2UKLQkJCWZpbGVfc2l6ZSA9IGlfc2l6ZV9yZWFkKGxvd2VyX2RlbnRyeS0+ZF9pbm9kZSk7Ci0JfSBlbHNlIHsKLQkJZmlsZV9zaXplID0gZ2V0X3VuYWxpZ25lZF9iZTY0KHBhZ2VfdmlydCk7Ci0JfQotCWlfc2l6ZV93cml0ZShlY3J5cHRmc19kZW50cnktPmRfaW5vZGUsIChsb2ZmX3QpZmlsZV9zaXplKTsKKwllY3J5cHRmc19pX3NpemVfaW5pdChwYWdlX3ZpcnQsIGVjcnlwdGZzX2RlbnRyeS0+ZF9pbm9kZSk7CiBvdXRfZnJlZV9rbWVtOgogCWttZW1fY2FjaGVfZnJlZShlY3J5cHRmc19oZWFkZXJfY2FjaGVfMiwgcGFnZV92aXJ0KTsKIAlnb3RvIG91dDsKQEAgLTMyMiw2ICszMDksOCBAQAogCW1udHB1dChsb3dlcl9tbnQpOwogCWRfZHJvcChlY3J5cHRmc19kZW50cnkpOwogb3V0OgorCWlmIChwdXRfbG93ZXIpCisJCWVjcnlwdGZzX3B1dF9sb3dlcl9maWxlKGVjcnlwdGZzX2RlbnRyeS0+ZF9pbm9kZSk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC01MzgsOCArNTI3LDYgQEAKIAlkZ2V0KGxvd2VyX2RlbnRyeSk7CiAJcmMgPSB2ZnNfcm1kaXIobG93ZXJfZGlyX2RlbnRyeS0+ZF9pbm9kZSwgbG93ZXJfZGVudHJ5KTsKIAlkcHV0KGxvd2VyX2RlbnRyeSk7Ci0JaWYgKCFyYykKLQkJZF9kZWxldGUobG93ZXJfZGVudHJ5KTsKIAlmc3N0YWNrX2NvcHlfYXR0cl90aW1lcyhkaXIsIGxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUpOwogCWRpci0+aV9ubGluayA9IGxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUtPmlfbmxpbms7CiAJdW5sb2NrX2Rpcihsb3dlcl9kaXJfZGVudHJ5KTsKQEAgLTYxMCw4ICs1OTcsOCBAQAogCQlmc3N0YWNrX2NvcHlfYXR0cl9hbGwob2xkX2RpciwgbG93ZXJfb2xkX2Rpcl9kZW50cnktPmRfaW5vZGUpOwogb3V0X2xvY2s6CiAJdW5sb2NrX3JlbmFtZShsb3dlcl9vbGRfZGlyX2RlbnRyeSwgbG93ZXJfbmV3X2Rpcl9kZW50cnkpOwotCWRwdXQobG93ZXJfbmV3X2RlbnRyeS0+ZF9wYXJlbnQpOwotCWRwdXQobG93ZXJfb2xkX2RlbnRyeS0+ZF9wYXJlbnQpOworCWRwdXQobG93ZXJfbmV3X2Rpcl9kZW50cnkpOworCWRwdXQobG93ZXJfb2xkX2Rpcl9kZW50cnkpOwogCWRwdXQobG93ZXJfbmV3X2RlbnRyeSk7CiAJZHB1dChsb3dlcl9vbGRfZGVudHJ5KTsKIAlyZXR1cm4gcmM7CkBAIC03NTksOCArNzQ2LDExIEBACiAKIAlpZiAodW5saWtlbHkoKGlhLT5pYV9zaXplID09IGlfc2l6ZSkpKSB7CiAJCWxvd2VyX2lhLT5pYV92YWxpZCAmPSB+QVRUUl9TSVpFOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuIDA7CiAJfQorCXJjID0gZWNyeXB0ZnNfZ2V0X2xvd2VyX2ZpbGUoZGVudHJ5KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAljcnlwdF9zdGF0ID0gJmVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoZGVudHJ5LT5kX2lub2RlKS0+Y3J5cHRfc3RhdDsKIAkvKiBTd2l0Y2ggb24gZ3Jvd2luZyBvciBzaHJpbmtpbmcgZmlsZSAqLwogCWlmIChpYS0+aWFfc2l6ZSA+IGlfc2l6ZSkgewpAQCAtODM4LDYgKzgyOCw3IEBACiAJCQlsb3dlcl9pYS0+aWFfdmFsaWQgJj0gfkFUVFJfU0laRTsKIAl9CiBvdXQ6CisJZWNyeXB0ZnNfcHV0X2xvd2VyX2ZpbGUoaW5vZGUpOwogCXJldHVybiByYzsKIH0KIApAQCAtOTEzLDcgKzkwNCwxMyBAQAogCiAJCW1vdW50X2NyeXB0X3N0YXQgPSAmZWNyeXB0ZnNfc3VwZXJibG9ja190b19wcml2YXRlKAogCQkJZGVudHJ5LT5kX3NiKS0+bW91bnRfY3J5cHRfc3RhdDsKKwkJcmMgPSBlY3J5cHRmc19nZXRfbG93ZXJfZmlsZShkZW50cnkpOworCQlpZiAocmMpIHsKKwkJCW11dGV4X3VubG9jaygmY3J5cHRfc3RhdC0+Y3NfbXV0ZXgpOworCQkJZ290byBvdXQ7CisJCX0KIAkJcmMgPSBlY3J5cHRmc19yZWFkX21ldGFkYXRhKGRlbnRyeSk7CisJCWVjcnlwdGZzX3B1dF9sb3dlcl9maWxlKGlub2RlKTsKIAkJaWYgKHJjKSB7CiAJCQlpZiAoIShtb3VudF9jcnlwdF9zdGF0LT5mbGFncwogCQkJICAgICAgJiBFQ1JZUFRGU19QTEFJTlRFWFRfUEFTU1RIUk9VR0hfRU5BQkxFRCkpIHsKQEAgLTkyNywxMCArOTI0LDE3IEBACiAJCQkJZ290byBvdXQ7CiAJCQl9CiAJCQlyYyA9IDA7Ci0JCQljcnlwdF9zdGF0LT5mbGFncyAmPSB+KEVDUllQVEZTX0VOQ1JZUFRFRCk7CisJCQljcnlwdF9zdGF0LT5mbGFncyAmPSB+KEVDUllQVEZTX0lfU0laRV9JTklUSUFMSVpFRAorCQkJCQkgICAgICAgfCBFQ1JZUFRGU19FTkNSWVBURUQpOwogCQl9CiAJfQogCW11dGV4X3VubG9jaygmY3J5cHRfc3RhdC0+Y3NfbXV0ZXgpOworCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7CisJCXJjID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChpbm9kZS0+aV9tYXBwaW5nKTsKKwkJaWYgKHJjKQorCQkJZ290byBvdXQ7CisJCWZzc3RhY2tfY29weV9hdHRyX2FsbChpbm9kZSwgbG93ZXJfaW5vZGUpOworCX0KIAltZW1jcHkoJmxvd2VyX2lhLCBpYSwgc2l6ZW9mKGxvd2VyX2lhKSk7CiAJaWYgKGlhLT5pYV92YWxpZCAmIEFUVFJfRklMRSkKIAkJbG93ZXJfaWEuaWFfZmlsZSA9IGVjcnlwdGZzX2ZpbGVfdG9fbG93ZXIoaWEtPmlhX2ZpbGUpOwpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMva3RocmVhZC5jIGIvZnMvZWNyeXB0ZnMva3RocmVhZC5jCmluZGV4IDA4NTFhYjYuLjY5Zjk5NGEgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2t0aHJlYWQuYworKysgYi9mcy9lY3J5cHRmcy9rdGhyZWFkLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKICAqIEBpZ25vcmVkOiBpZ25vcmVkCiAgKgogICogVGhlIGVDcnlwdGZzIGtlcm5lbCB0aHJlYWQgdGhhdCBoYXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGdldHRpbmcKLSAqIHRoZSBsb3dlciBwZXJzaXN0ZW50IGZpbGUgd2l0aCBSVyBwZXJtaXNzaW9ucy4KKyAqIHRoZSBsb3dlciBmaWxlIHdpdGggUlcgcGVybWlzc2lvbnMuCiAgKgogICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3M7IG5vbi16ZXJvIG90aGVyd2lzZQogICovCkBAIC0xNDEsOCArMTQxLDggQEAKIAlpbnQgcmMgPSAwOwogCiAJLyogQ29ycmVzcG9uZGluZyBkcHV0KCkgYW5kIG1udHB1dCgpIGFyZSBkb25lIHdoZW4gdGhlCi0JICogcGVyc2lzdGVudCBmaWxlIGlzIGZwdXQoKSB3aGVuIHRoZSBlQ3J5cHRmcyBpbm9kZSBpcwotCSAqIGRlc3Ryb3llZC4gKi8KKwkgKiBsb3dlciBmaWxlIGlzIGZwdXQoKSB3aGVuIGFsbCBlQ3J5cHRmcyBmaWxlcyBmb3IgdGhlIGlub2RlIGFyZQorCSAqIHJlbGVhc2VkLiAqLwogCWRnZXQobG93ZXJfZGVudHJ5KTsKIAltbnRnZXQobG93ZXJfbW50KTsKIAlmbGFncyB8PSBJU19SRE9OTFkobG93ZXJfZGVudHJ5LT5kX2lub2RlKSA/IE9fUkRPTkxZIDogT19SRFdSOwpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvbWFpbi5jIGIvZnMvZWNyeXB0ZnMvbWFpbi5jCmluZGV4IGMyN2MwZWMuLjg5YjkzMzggMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL21haW4uYworKysgYi9mcy9lY3J5cHRmcy9tYWluLmMKQEAgLTk2LDcgKzk2LDcgQEAKIH0KIAogLyoqCi0gKiBlY3J5cHRmc19pbml0X3BlcnNpc3RlbnRfZmlsZQorICogZWNyeXB0ZnNfaW5pdF9sb3dlcl9maWxlCiAgKiBAZWNyeXB0ZnNfZGVudHJ5OiBGdWxseSBpbml0aWFsaXplZCBlQ3J5cHRmcyBkZW50cnkgb2JqZWN0LCB3aXRoCiAgKiAgICAgICAgICAgICAgICAgICB0aGUgbG93ZXIgZGVudHJ5IGFuZCB0aGUgbG93ZXIgbW91bnQgc2V0CiAgKgpAQCAtMTA0LDQyICsxMDQsNzAgQEAKICAqIGlub2RlLiBBbGwgSS9PIG9wZXJhdGlvbnMgdG8gdGhlIGxvd2VyIGlub2RlIG9jY3VyIHRocm91Z2ggdGhhdAogICogZmlsZS4gV2hlbiB0aGUgZmlyc3QgZUNyeXB0ZnMgZGVudHJ5IHRoYXQgaW50ZXJwb3NlcyB3aXRoIHRoZSBmaXJzdAogICogbG93ZXIgZGVudHJ5IGZvciB0aGF0IGlub2RlIGlzIGNyZWF0ZWQsIHRoaXMgZnVuY3Rpb24gY3JlYXRlcyB0aGUKLSAqIHBlcnNpc3RlbnQgZmlsZSBzdHJ1Y3QgYW5kIGFzc29jaWF0ZXMgaXQgd2l0aCB0aGUgZUNyeXB0ZnMKLSAqIGlub2RlLiBXaGVuIHRoZSBlQ3J5cHRmcyBpbm9kZSBpcyBkZXN0cm95ZWQsIHRoZSBmaWxlIGlzIGNsb3NlZC4KKyAqIGxvd2VyIGZpbGUgc3RydWN0IGFuZCBhc3NvY2lhdGVzIGl0IHdpdGggdGhlIGVDcnlwdGZzCisgKiBpbm9kZS4gV2hlbiBhbGwgZUNyeXB0ZnMgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbm9kZSBhcmUgcmVsZWFzZWQsIHRoZQorICogZmlsZSBpcyBjbG9zZWQuCiAgKgotICogVGhlIHBlcnNpc3RlbnQgZmlsZSB3aWxsIGJlIG9wZW5lZCB3aXRoIHJlYWQvd3JpdGUgcGVybWlzc2lvbnMsIGlmCisgKiBUaGUgbG93ZXIgZmlsZSB3aWxsIGJlIG9wZW5lZCB3aXRoIHJlYWQvd3JpdGUgcGVybWlzc2lvbnMsIGlmCiAgKiBwb3NzaWJsZS4gT3RoZXJ3aXNlLCBpdCBpcyBvcGVuZWQgcmVhZC1vbmx5LgogICoKLSAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nIGlmIGEgbG93ZXIgcGVyc2lzdGVudCBmaWxlIGlzIGFscmVhZHkKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nIGlmIGEgbG93ZXIgZmlsZSBpcyBhbHJlYWR5CiAgKiBhc3NvY2lhdGVkIHdpdGggdGhlIGVDcnlwdGZzIGlub2RlLgogICoKICAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzOyBub24temVybyBvdGhlcndpc2UKICAqLwotaW50IGVjcnlwdGZzX2luaXRfcGVyc2lzdGVudF9maWxlKHN0cnVjdCBkZW50cnkgKmVjcnlwdGZzX2RlbnRyeSkKK3N0YXRpYyBpbnQgZWNyeXB0ZnNfaW5pdF9sb3dlcl9maWxlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCQkgICAgc3RydWN0IGZpbGUgKipsb3dlcl9maWxlKQogewogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7Ci0Jc3RydWN0IGVjcnlwdGZzX2lub2RlX2luZm8gKmlub2RlX2luZm8gPQotCQllY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGVjcnlwdGZzX2RlbnRyeS0+ZF9pbm9kZSk7Ci0JaW50IHJjID0gMDsKKwlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnkgPSBlY3J5cHRmc19kZW50cnlfdG9fbG93ZXIoZGVudHJ5KTsKKwlzdHJ1Y3QgdmZzbW91bnQgKmxvd2VyX21udCA9IGVjcnlwdGZzX2RlbnRyeV90b19sb3dlcl9tbnQoZGVudHJ5KTsKKwlpbnQgcmM7CiAKLQlpZiAoIWlub2RlX2luZm8tPmxvd2VyX2ZpbGUpIHsKLQkJc3RydWN0IGRlbnRyeSAqbG93ZXJfZGVudHJ5OwotCQlzdHJ1Y3QgdmZzbW91bnQgKmxvd2VyX21udCA9Ci0JCQllY3J5cHRmc19kZW50cnlfdG9fbG93ZXJfbW50KGVjcnlwdGZzX2RlbnRyeSk7Ci0KLQkJbG93ZXJfZGVudHJ5ID0gZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyKGVjcnlwdGZzX2RlbnRyeSk7Ci0JCXJjID0gZWNyeXB0ZnNfcHJpdmlsZWdlZF9vcGVuKCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlLAotCQkJCQkgICAgICBsb3dlcl9kZW50cnksIGxvd2VyX21udCwgY3JlZCk7Ci0JCWlmIChyYykgewotCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBvcGVuaW5nIGxvd2VyIHBlcnNpc3RlbnQgZmlsZSAiCi0JCQkgICAgICAgImZvciBsb3dlcl9kZW50cnkgWzB4JXBdIGFuZCBsb3dlcl9tbnQgWzB4JXBdOyAiCi0JCQkgICAgICAgInJjID0gWyVkXVxuIiwgbG93ZXJfZGVudHJ5LCBsb3dlcl9tbnQsIHJjKTsKLQkJCWlub2RlX2luZm8tPmxvd2VyX2ZpbGUgPSBOVUxMOwotCQl9CisJcmMgPSBlY3J5cHRmc19wcml2aWxlZ2VkX29wZW4obG93ZXJfZmlsZSwgbG93ZXJfZGVudHJ5LCBsb3dlcl9tbnQsCisJCQkJICAgICAgY3JlZCk7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igb3BlbmluZyBsb3dlciBmaWxlICIKKwkJICAgICAgICJmb3IgbG93ZXJfZGVudHJ5IFsweCVwXSBhbmQgbG93ZXJfbW50IFsweCVwXTsgIgorCQkgICAgICAgInJjID0gWyVkXVxuIiwgbG93ZXJfZGVudHJ5LCBsb3dlcl9tbnQsIHJjKTsKKwkJKCpsb3dlcl9maWxlKSA9IE5VTEw7CiAJfQogCXJldHVybiByYzsKIH0KIAoraW50IGVjcnlwdGZzX2dldF9sb3dlcl9maWxlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgZWNyeXB0ZnNfaW5vZGVfaW5mbyAqaW5vZGVfaW5mbyA9CisJCWVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoZGVudHJ5LT5kX2lub2RlKTsKKwlpbnQgY291bnQsIHJjID0gMDsKKworCW11dGV4X2xvY2soJmlub2RlX2luZm8tPmxvd2VyX2ZpbGVfbXV0ZXgpOworCWNvdW50ID0gYXRvbWljX2luY19yZXR1cm4oJmlub2RlX2luZm8tPmxvd2VyX2ZpbGVfY291bnQpOworCWlmIChXQVJOX09OX09OQ0UoY291bnQgPCAxKSkKKwkJcmMgPSAtRUlOVkFMOworCWVsc2UgaWYgKGNvdW50ID09IDEpIHsKKwkJcmMgPSBlY3J5cHRmc19pbml0X2xvd2VyX2ZpbGUoZGVudHJ5LAorCQkJCQkgICAgICAmaW5vZGVfaW5mby0+bG93ZXJfZmlsZSk7CisJCWlmIChyYykKKwkJCWF0b21pY19zZXQoJmlub2RlX2luZm8tPmxvd2VyX2ZpbGVfY291bnQsIDApOworCX0KKwltdXRleF91bmxvY2soJmlub2RlX2luZm8tPmxvd2VyX2ZpbGVfbXV0ZXgpOworCXJldHVybiByYzsKK30KKwordm9pZCBlY3J5cHRmc19wdXRfbG93ZXJfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBlY3J5cHRmc19pbm9kZV9pbmZvICppbm9kZV9pbmZvOworCisJaW5vZGVfaW5mbyA9IGVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoaW5vZGUpOworCWlmIChhdG9taWNfZGVjX2FuZF9tdXRleF9sb2NrKCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX2NvdW50LAorCQkJCSAgICAgICZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX211dGV4KSkgeworCQlmcHV0KGlub2RlX2luZm8tPmxvd2VyX2ZpbGUpOworCQlpbm9kZV9pbmZvLT5sb3dlcl9maWxlID0gTlVMTDsKKwkJbXV0ZXhfdW5sb2NrKCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX211dGV4KTsKKwl9Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmVjcnlwdGZzX2dldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmxvd2VyX2lub2RlLAogCQkgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKQEAgLTI3Niw3ICszMDQsNyBAQAogLyoqCiAgKiBlY3J5cHRmc19wYXJzZV9vcHRpb25zCiAgKiBAc2I6IFRoZSBlY3J5cHRmcyBzdXBlciBibG9jawotICogQG9wdGlvbnM6IFRoZSBvcHRpb25zIHBhc2VkIHRvIHRoZSBrZXJuZWwKKyAqIEBvcHRpb25zOiBUaGUgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIGtlcm5lbAogICoKICAqIFBhcnNlIG1vdW50IG9wdGlvbnM6CiAgKiBkZWJ1Zz1OIAkgICAtIGVjcnlwdGZzX3ZlcmJvc2l0eSBsZXZlbCBmb3IgZGVidWcgb3V0cHV0CkBAIC04NDAsNyArODY4LDcgQEAKIAl9CiAJcmMgPSBlY3J5cHRmc19pbml0X21lc3NhZ2luZygpOwogCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIkZhaWx1cmUgb2NjdXJlZCB3aGlsZSBhdHRlbXB0aW5nIHRvICIKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsdXJlIG9jY3VycmVkIHdoaWxlIGF0dGVtcHRpbmcgdG8gIgogCQkJCSJpbml0aWFsaXplIHRoZSBjb21tdW5pY2F0aW9ucyBjaGFubmVsIHRvICIKIAkJCQkiZWNyeXB0ZnNkXG4iKTsKIAkJZ290byBvdXRfZGVzdHJveV9rdGhyZWFkOwpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvc3VwZXIuYyBiL2ZzL2VjcnlwdGZzL3N1cGVyLmMKaW5kZXggYmFjYzg4Mi4uMjQ1YjUxNyAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvc3VwZXIuYworKysgYi9mcy9lY3J5cHRmcy9zdXBlci5jCkBAIC01NSw2ICs1NSw4IEBACiAJaWYgKHVubGlrZWx5KCFpbm9kZV9pbmZvKSkKIAkJZ290byBvdXQ7CiAJZWNyeXB0ZnNfaW5pdF9jcnlwdF9zdGF0KCZpbm9kZV9pbmZvLT5jcnlwdF9zdGF0KTsKKwltdXRleF9pbml0KCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX211dGV4KTsKKwlhdG9taWNfc2V0KCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX2NvdW50LCAwKTsKIAlpbm9kZV9pbmZvLT5sb3dlcl9maWxlID0gTlVMTDsKIAlpbm9kZSA9ICZpbm9kZV9pbmZvLT52ZnNfaW5vZGU7CiBvdXQ6CkBAIC03Nyw4ICs3OSw3IEBACiAgKgogICogVGhpcyBpcyB1c2VkIGR1cmluZyB0aGUgZmluYWwgZGVzdHJ1Y3Rpb24gb2YgdGhlIGlub2RlLiAgQWxsCiAgKiBhbGxvY2F0aW9uIG9mIG1lbW9yeSByZWxhdGVkIHRvIHRoZSBpbm9kZSwgaW5jbHVkaW5nIGFsbG9jYXRlZAotICogbWVtb3J5IGluIHRoZSBjcnlwdF9zdGF0IHN0cnVjdCwgd2lsbCBiZSByZWxlYXNlZCBoZXJlLiBUaGlzCi0gKiBmdW5jdGlvbiBhbHNvIGZwdXQoKSdzIHRoZSBwZXJzaXN0ZW50IGZpbGUgZm9yIHRoZSBsb3dlciBpbm9kZS4KKyAqIG1lbW9yeSBpbiB0aGUgY3J5cHRfc3RhdCBzdHJ1Y3QsIHdpbGwgYmUgcmVsZWFzZWQgaGVyZS4KICAqIFRoZXJlIHNob3VsZCBiZSBubyBjaGFuY2UgdGhhdCB0aGlzIGRlYWxsb2NhdGlvbiB3aWxsIGJlIG1pc3NlZC4KICAqLwogc3RhdGljIHZvaWQgZWNyeXB0ZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQpAQCAtODYsMTYgKzg3LDcgQEAKIAlzdHJ1Y3QgZWNyeXB0ZnNfaW5vZGVfaW5mbyAqaW5vZGVfaW5mbzsKIAogCWlub2RlX2luZm8gPSBlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGlub2RlKTsKLQlpZiAoaW5vZGVfaW5mby0+bG93ZXJfZmlsZSkgewotCQlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnkgPQotCQkJaW5vZGVfaW5mby0+bG93ZXJfZmlsZS0+Zl9kZW50cnk7Ci0KLQkJQlVHX09OKCFsb3dlcl9kZW50cnkpOwotCQlpZiAobG93ZXJfZGVudHJ5LT5kX2lub2RlKSB7Ci0JCQlmcHV0KGlub2RlX2luZm8tPmxvd2VyX2ZpbGUpOwotCQkJaW5vZGVfaW5mby0+bG93ZXJfZmlsZSA9IE5VTEw7Ci0JCX0KLQl9CisJQlVHX09OKGlub2RlX2luZm8tPmxvd2VyX2ZpbGUpOwogCWVjcnlwdGZzX2Rlc3Ryb3lfY3J5cHRfc3RhdCgmaW5vZGVfaW5mby0+Y3J5cHRfc3RhdCk7CiAJY2FsbF9yY3UoJmlub2RlLT5pX3JjdSwgZWNyeXB0ZnNfaV9jYWxsYmFjayk7CiB9CmRpZmYgLS1naXQgYS9mcy9ldmVudHBvbGwuYyBiL2ZzL2V2ZW50cG9sbC5jCmluZGV4IGVkMzg4MDEuLmY5Y2ZkMTYgMTAwNjQ0Ci0tLSBhL2ZzL2V2ZW50cG9sbC5jCisrKyBiL2ZzL2V2ZW50cG9sbC5jCkBAIC0xODEsNyArMTgxLDcgQEAKIAogCS8qCiAJICogVGhpcyBpcyBhIHNpbmdsZSBsaW5rZWQgbGlzdCB0aGF0IGNoYWlucyBhbGwgdGhlICJzdHJ1Y3QgZXBpdGVtIiB0aGF0Ci0JICogaGFwcGVuZWQgd2hpbGUgdHJhbnNmZXJpbmcgcmVhZHkgZXZlbnRzIHRvIHVzZXJzcGFjZSB3L291dAorCSAqIGhhcHBlbmVkIHdoaWxlIHRyYW5zZmVycmluZyByZWFkeSBldmVudHMgdG8gdXNlcnNwYWNlIHcvb3V0CiAJICogaG9sZGluZyAtPmxvY2suCiAJICovCiAJc3RydWN0IGVwaXRlbSAqb3ZmbGlzdDsKQEAgLTYwNiw3ICs2MDYsNyBAQAogCSAqIFdlIGRvIG5vdCBuZWVkIHRvIGhvbGQgImVwLT5tdHgiIGhlcmUgYmVjYXVzZSB0aGUgZXBvbGwgZmlsZQogCSAqIGlzIG9uIHRoZSB3YXkgdG8gYmUgcmVtb3ZlZCBhbmQgbm8gb25lIGhhcyByZWZlcmVuY2VzIHRvIGl0CiAJICogYW55bW9yZS4gVGhlIG9ubHkgaGl0IG1pZ2h0IGNvbWUgZnJvbSBldmVudHBvbGxfcmVsZWFzZV9maWxlKCkgYnV0Ci0JICogaG9sZGluZyAiZXBtdXRleCIgaXMgc3VmZmljZW50IGhlcmUuCisJICogaG9sZGluZyAiZXBtdXRleCIgaXMgc3VmZmljaWVudCBoZXJlLgogCSAqLwogCW11dGV4X2xvY2soJmVwbXV0ZXgpOwogCkBAIC03MjAsNyArNzIwLDcgQEAKIAkvKgogCSAqIFdlIGRvbid0IHdhbnQgdG8gZ2V0ICJmaWxlLT5mX2xvY2siIGJlY2F1c2UgaXQgaXMgbm90CiAJICogbmVjZXNzYXJ5LiBJdCBpcyBub3QgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UncmUgaW4gdGhlICJzdHJ1Y3QgZmlsZSIKLQkgKiBjbGVhbnVwIHBhdGgsIGFuZCB0aGlzIG1lYW5zIHRoYXQgbm9vbmUgaXMgdXNpbmcgdGhpcyBmaWxlIGFueW1vcmUuCisJICogY2xlYW51cCBwYXRoLCBhbmQgdGhpcyBtZWFucyB0aGF0IG5vIG9uZSBpcyB1c2luZyB0aGlzIGZpbGUgYW55bW9yZS4KIAkgKiBTbywgZm9yIGV4YW1wbGUsIGVwb2xsX2N0bCgpIGNhbm5vdCBoaXQgaGVyZSBzaW5jZSBpZiB3ZSByZWFjaCB0aGlzCiAJICogcG9pbnQsIHRoZSBmaWxlIGNvdW50ZXIgYWxyZWFkeSB3ZW50IHRvIHplcm8gYW5kIGZnZXQoKSB3b3VsZCBmYWlsLgogCSAqIFRoZSBvbmx5IGhpdCBtaWdodCBjb21lIGZyb20gZXBfZnJlZSgpIGJ1dCBieSBob2xkaW5nIHRoZSBtdXRleApAQCAtMTExMiw3ICsxMTEyLDcgQEAKIAkJCQkgKiBUcmlnZ2VyIG1vZGUsIHdlIG5lZWQgdG8gaW5zZXJ0IGJhY2sgaW5zaWRlCiAJCQkJICogdGhlIHJlYWR5IGxpc3QsIHNvIHRoYXQgdGhlIG5leHQgY2FsbCB0bwogCQkJCSAqIGVwb2xsX3dhaXQoKSB3aWxsIGNoZWNrIGFnYWluIHRoZSBldmVudHMKLQkJCQkgKiBhdmFpbGFiaWxpdHkuIEF0IHRoaXMgcG9pbnQsIG5vb25lIGNhbiBpbnNlcnQKKwkJCQkgKiBhdmFpbGFiaWxpdHkuIEF0IHRoaXMgcG9pbnQsIG5vIG9uZSBjYW4gaW5zZXJ0CiAJCQkJICogaW50byBlcC0+cmRsbGlzdCBiZXNpZGVzIHVzLiBUaGUgZXBvbGxfY3RsKCkKIAkJCQkgKiBjYWxsZXJzIGFyZSBsb2NrZWQgb3V0IGJ5CiAJCQkJICogZXBfc2Nhbl9yZWFkeV9saXN0KCkgaG9sZGluZyAibXR4IiBhbmQgdGhlCmRpZmYgLS1naXQgYS9mcy9leG9mcy9jb21tb24uaCBiL2ZzL2V4b2ZzL2NvbW1vbi5oCmluZGV4IDVlNzRhZDMuLjNiYmQ0NjkgMTAwNjQ0Ci0tLSBhL2ZzL2V4b2ZzL2NvbW1vbi5oCisrKyBiL2ZzL2V4b2ZzL2NvbW1vbi5oCkBAIC0xMTUsNyArMTE1LDcgQEAKICAqIERlc2NyaWJlcyB0aGUgcmFpZCB1c2VkIGluIHRoZSBGUy4gSXQgaXMgcGFydCBvZiB0aGUgZGV2aWNlIHRhYmxlLgogICogVGhpcyBoZXJlIGlzIHRha2VuIGZyb20gdGhlIHBORlMtb2JqZWN0cyBkZWZpbml0aW9uLiBJbiBleG9mcyB3ZQogICogdXNlIG9uZSByYWlkIHBvbGljeSB0aHJvdWdoLW91dCB0aGUgZmlsZXN5c3RlbS4gKE5PVEU6IHRoZSBmdW5ueQotICogYWxpZ25tZW50IGF0IGJlZ2luaW5nLiBXZSB0YWtlIGNhcmUgb2YgaXQgYXQgZXhvZnNfZGV2aWNlX3RhYmxlLgorICogYWxpZ25tZW50IGF0IGJlZ2lubmluZy4gV2UgdGFrZSBjYXJlIG9mIGl0IGF0IGV4b2ZzX2RldmljZV90YWJsZS4KICAqLwogc3RydWN0IGV4b2ZzX2R0X2RhdGFfbWFwIHsKIAlfX2xlMzIJY2JfbnVtX2NvbXBzOwpAQCAtMTM2LDcgKzEzNiw3IEBACiAJdTgJc3lzdGVtaWRbT1NEX1NZU1RFTUlEX0xFTl07CiAJX19sZTY0CWxvbmdfbmFtZV9vZmZzZXQ7CS8qIElmICEwIHRoZW4gb2Zmc2V0LWluLWZpbGUgKi8KIAlfX2xlMzIJb3NkbmFtZV9sZW47CQkvKiAqLwotCXU4CW9zZG5hbWVbNDRdOwkJLyogRW1iYmVkZWQsIFVzdXNhbGx5IGFuIGFzY2kgdXVpZCAqLworCXU4CW9zZG5hbWVbNDRdOwkJLyogRW1iYmVkZWQsIFVzdWFsbHkgYW4gYXNjaSB1dWlkICovCiB9IF9fcGFja2VkOwogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9iYWxsb2MuYyBiL2ZzL2V4dDIvYmFsbG9jLmMKaW5kZXggMGQwNmY0ZS4uOGY0NGNlZiAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9iYWxsb2MuYworKysgYi9mcy9leHQyL2JhbGxvYy5jCkBAIC04NTAsNyArODUwLDcgQEAKIAkJcnN2X3dpbmRvd19yZW1vdmUoc2IsIG15X3Jzdik7CiAKIAkvKgotCSAqIExldCdzIGJvb2sgdGhlIHdob2xlIGF2YWxpYWJsZSB3aW5kb3cgZm9yIG5vdy4gIFdlIHdpbGwgY2hlY2sgdGhlCisJICogTGV0J3MgYm9vayB0aGUgd2hvbGUgYXZhaWxhYmxlIHdpbmRvdyBmb3Igbm93LiAgV2Ugd2lsbCBjaGVjayB0aGUKIAkgKiBkaXNrIGJpdG1hcCBsYXRlciBhbmQgdGhlbiwgaWYgdGhlcmUgYXJlIGZyZWUgYmxvY2tzIHRoZW4gd2UgYWRqdXN0CiAJICogdGhlIHdpbmRvdyBzaXplIGlmIGl0J3MgbGFyZ2VyIHRoYW4gcmVxdWVzdGVkLgogCSAqIE90aGVyd2lzZSwgd2Ugd2lsbCByZW1vdmUgdGhpcyBub2RlIGZyb20gdGhlIHRyZWUgbmV4dCB0aW1lCkBAIC0xMzU3LDkgKzEzNTcsOSBAQAogCQkJZ290byBhbGxvY2F0ZWQ7CiAJfQogCS8qCi0JICogV2UgbWF5IGVuZCB1cCBhIGJvZ3VzIGVhbGllciBFTk9TUEMgZXJyb3IgZHVlIHRvCisJICogV2UgbWF5IGVuZCB1cCBhIGJvZ3VzIGVhcmxpZXIgRU5PU1BDIGVycm9yIGR1ZSB0bwogCSAqIGZpbGVzeXN0ZW0gaXMgImZ1bGwiIG9mIHJlc2VydmF0aW9ucywgYnV0Ci0JICogdGhlcmUgbWF5YmUgaW5kZWVkIGZyZWUgYmxvY2tzIGF2YWxpYWJsZSBvbiBkaXNrCisJICogdGhlcmUgbWF5YmUgaW5kZWVkIGZyZWUgYmxvY2tzIGF2YWlsYWJsZSBvbiBkaXNrCiAJICogSW4gdGhpcyBjYXNlLCB3ZSBqdXN0IGZvcmdldCBhYm91dCB0aGUgcmVzZXJ2YXRpb25zCiAJICoganVzdCBkbyBibG9jayBhbGxvY2F0aW9uIGFzIHdpdGhvdXQgcmVzZXJ2YXRpb25zLgogCSAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9pbm9kZS5jIGIvZnMvZXh0Mi9pbm9kZS5jCmluZGV4IGM0N2Y3MDYuLjc4OGUwOWEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvaW5vZGUuYworKysgYi9mcy9leHQyL2lub2RlLmMKQEAgLTMwNSw3ICszMDUsNyBAQAogCQlyZXR1cm4gaW5kLT5iaC0+Yl9ibG9ja25yOwogCiAJLyoKLQkgKiBJdCBpcyBnb2luZyB0byBiZSByZWZlcmVkIGZyb20gaW5vZGUgaXRzZWxmPyBPSywganVzdCBwdXQgaXQgaW50bworCSAqIEl0IGlzIGdvaW5nIHRvIGJlIHJlZmVycmVkIGZyb20gaW5vZGUgaXRzZWxmPyBPSywganVzdCBwdXQgaXQgaW50bwogCSAqIHRoZSBzYW1lIGN5bGluZGVyIGdyb3VwIHRoZW4uCiAJICovCiAJYmdfc3RhcnQgPSBleHQyX2dyb3VwX2ZpcnN0X2Jsb2NrX25vKGlub2RlLT5pX3NiLCBlaS0+aV9ibG9ja19ncm91cCk7CkBAIC05MTMsNyArOTEzLDcgQEAKICAqCiAgKglXaGVuIHdlIGRvIHRydW5jYXRlKCkgd2UgbWF5IGhhdmUgdG8gY2xlYW4gdGhlIGVuZHMgb2Ygc2V2ZXJhbCBpbmRpcmVjdAogICoJYmxvY2tzIGJ1dCBsZWF2ZSB0aGUgYmxvY2tzIHRoZW1zZWx2ZXMgYWxpdmUuIEJsb2NrIGlzIHBhcnRpYWxseQotICoJdHJ1bmNhdGVkIGlmIHNvbWUgZGF0YSBiZWxvdyB0aGUgbmV3IGlfc2l6ZSBpcyByZWZlcmVkIGZyb20gaXQgKGFuZAorICoJdHJ1bmNhdGVkIGlmIHNvbWUgZGF0YSBiZWxvdyB0aGUgbmV3IGlfc2l6ZSBpcyByZWZlcnJlZCBmcm9tIGl0IChhbmQKICAqCWl0IGlzIG9uIHRoZSBwYXRoIHRvIHRoZSBmaXJzdCBjb21wbGV0ZWx5IHRydW5jYXRlZCBkYXRhIGJsb2NrLCBpbmRlZWQpLgogICoJV2UgaGF2ZSB0byBmcmVlIHRoZSB0b3Agb2YgdGhhdCBwYXRoIGFsb25nIHdpdGggZXZlcnl0aGluZyB0byB0aGUgcmlnaHQKICAqCW9mIHRoZSBwYXRoLiBTaW5jZSBubyBhbGxvY2F0aW9uIHBhc3QgdGhlIHRydW5jYXRpb24gcG9pbnQgaXMgcG9zc2libGUKQEAgLTk5MCw3ICs5OTAsNyBAQAogICoJQHA6CWFycmF5IG9mIGJsb2NrIG51bWJlcnMKICAqCUBxOglwb2ludHMgaW1tZWRpYXRlbHkgcGFzdCB0aGUgZW5kIG9mIGFycmF5CiAgKgotICoJV2UgYXJlIGZyZWVpbmcgYWxsIGJsb2NrcyByZWZlcmVkIGZyb20gdGhhdCBhcnJheSAobnVtYmVycyBhcmUKKyAqCVdlIGFyZSBmcmVlaW5nIGFsbCBibG9ja3MgcmVmZXJyZWQgZnJvbSB0aGF0IGFycmF5IChudW1iZXJzIGFyZQogICoJc3RvcmVkIGFzIGxpdHRsZS1lbmRpYW4gMzItYml0KSBhbmQgdXBkYXRpbmcgQGlub2RlLT5pX2Jsb2NrcwogICoJYXBwcm9wcmlhdGVseS4KICAqLwpAQCAtMTAzMCw3ICsxMDMwLDcgQEAKICAqCUBxOglwb2ludGVyIGltbWVkaWF0ZWx5IHBhc3QgdGhlIGVuZCBvZiBhcnJheQogICoJQGRlcHRoOglkZXB0aCBvZiB0aGUgYnJhbmNoZXMgdG8gZnJlZQogICoKLSAqCVdlIGFyZSBmcmVlaW5nIGFsbCBibG9ja3MgcmVmZXJlZCBmcm9tIHRoZXNlIGJyYW5jaGVzIChudW1iZXJzIGFyZQorICoJV2UgYXJlIGZyZWVpbmcgYWxsIGJsb2NrcyByZWZlcnJlZCBmcm9tIHRoZXNlIGJyYW5jaGVzIChudW1iZXJzIGFyZQogICoJc3RvcmVkIGFzIGxpdHRsZS1lbmRpYW4gMzItYml0KSBhbmQgdXBkYXRpbmcgQGlub2RlLT5pX2Jsb2NrcwogICoJYXBwcm9wcmlhdGVseS4KICAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9zdXBlci5jIGIvZnMvZXh0Mi9zdXBlci5jCmluZGV4IDc3MzE2OTUuLjBhNzhkYWUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvc3VwZXIuYworKysgYi9mcy9leHQyL3N1cGVyLmMKQEAgLTEzODIsNyArMTM4Miw3IEBACiAKIC8qIFJlYWQgZGF0YSBmcm9tIHF1b3RhZmlsZSAtIGF2b2lkIHBhZ2VjYWNoZSBhbmQgc3VjaCBiZWNhdXNlIHdlIGNhbm5vdCBhZmZvcmQKICAqIGFjcXVpcmluZyB0aGUgbG9ja3MuLi4gQXMgcXVvdGEgZmlsZXMgYXJlIG5ldmVyIHRydW5jYXRlZCBhbmQgcXVvdGEgY29kZQotICogaXRzZWxmIHNlcmlhbGl6ZXMgdGhlIG9wZXJhdGlvbnMgKGFuZCBub29uZSBlbHNlIHNob3VsZCB0b3VjaCB0aGUgZmlsZXMpCisgKiBpdHNlbGYgc2VyaWFsaXplcyB0aGUgb3BlcmF0aW9ucyAoYW5kIG5vIG9uZSBlbHNlIHNob3VsZCB0b3VjaCB0aGUgZmlsZXMpCiAgKiB3ZSBkb24ndCBoYXZlIHRvIGJlIGFmcmFpZCBvZiByYWNlcyAqLwogc3RhdGljIHNzaXplX3QgZXh0Ml9xdW90YV9yZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBjaGFyICpkYXRhLAogCQkJICAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCBvZmYpCmRpZmYgLS1naXQgYS9mcy9leHQyL3hhdHRyLmMgYi9mcy9leHQyL3hhdHRyLmMKaW5kZXggYzJlNGRjZS4uNTI5OTcwNiAxMDA2NDQKLS0tIGEvZnMvZXh0Mi94YXR0ci5jCisrKyBiL2ZzL2V4dDIveGF0dHIuYwpAQCAtMzUsNyArMzUsNyBAQAogICogICArLS0tLS0tLS0tLS0tLS0tLS0tKwogICoKICAqIFRoZSBibG9jayBoZWFkZXIgaXMgZm9sbG93ZWQgYnkgbXVsdGlwbGUgZW50cnkgZGVzY3JpcHRvcnMuIFRoZXNlIGVudHJ5Ci0gKiBkZXNjcmlwdG9ycyBhcmUgdmFyaWFibGUgaW4gc2l6ZSwgYW5kIGFsbGlnbmVkIHRvIEVYVDJfWEFUVFJfUEFECisgKiBkZXNjcmlwdG9ycyBhcmUgdmFyaWFibGUgaW4gc2l6ZSwgYW5kIGFsaWduZWQgdG8gRVhUMl9YQVRUUl9QQUQKICAqIGJ5dGUgYm91bmRhcmllcy4gVGhlIGVudHJ5IGRlc2NyaXB0b3JzIGFyZSBzb3J0ZWQgYnkgYXR0cmlidXRlIG5hbWUsCiAgKiBzbyB0aGF0IHR3byBleHRlbmRlZCBhdHRyaWJ1dGUgYmxvY2tzIGNhbiBiZSBjb21wYXJlZCBlZmZpY2llbnRseS4KICAqCmRpZmYgLS1naXQgYS9mcy9leHQzL2JhbGxvYy5jIGIvZnMvZXh0My9iYWxsb2MuYwppbmRleCAxNTMyNDIxLi5mZTUyMjk3IDEwMDY0NAotLS0gYS9mcy9leHQzL2JhbGxvYy5jCisrKyBiL2ZzL2V4dDMvYmFsbG9jLmMKQEAgLTU5MCw3ICs1OTAsNyBAQAogCQkJCUJVRkZFUl9UUkFDRShkZWJ1Z19iaCwgIkRlbGV0ZWQhIik7CiAJCQkJaWYgKCFiaDJqaChiaXRtYXBfYmgpLT5iX2NvbW1pdHRlZF9kYXRhKQogCQkJCQlCVUZGRVJfVFJBQ0UoZGVidWdfYmgsCi0JCQkJCQkiTm8gY29tbWl0ZWQgZGF0YSBpbiBiaXRtYXAiKTsKKwkJCQkJCSJObyBjb21taXR0ZWQgZGF0YSBpbiBiaXRtYXAiKTsKIAkJCQlCVUZGRVJfVFJBQ0UyKGRlYnVnX2JoLCBiaXRtYXBfYmgsICJiaXRtYXAiKTsKIAkJCQlfX2JyZWxzZShkZWJ1Z19iaCk7CiAJCQl9CkBAIC0xMDYzLDcgKzEwNjMsNyBAQAogCQlyc3Zfd2luZG93X3JlbW92ZShzYiwgbXlfcnN2KTsKIAogCS8qCi0JICogTGV0J3MgYm9vayB0aGUgd2hvbGUgYXZhbGlhYmxlIHdpbmRvdyBmb3Igbm93LiAgV2Ugd2lsbCBjaGVjayB0aGUKKwkgKiBMZXQncyBib29rIHRoZSB3aG9sZSBhdmFpbGFibGUgd2luZG93IGZvciBub3cuICBXZSB3aWxsIGNoZWNrIHRoZQogCSAqIGRpc2sgYml0bWFwIGxhdGVyIGFuZCB0aGVuLCBpZiB0aGVyZSBhcmUgZnJlZSBibG9ja3MgdGhlbiB3ZSBhZGp1c3QKIAkgKiB0aGUgd2luZG93IHNpemUgaWYgaXQncyBsYXJnZXIgdGhhbiByZXF1ZXN0ZWQuCiAJICogT3RoZXJ3aXNlLCB3ZSB3aWxsIHJlbW92ZSB0aGlzIG5vZGUgZnJvbSB0aGUgdHJlZSBuZXh0IHRpbWUKQEAgLTE0NTYsNyArMTQ1Niw3IEBACiAgKgogICogZXh0M19zaG91bGRfcmV0cnlfYWxsb2MoKSBpcyBjYWxsZWQgd2hlbiBFTk9TUEMgaXMgcmV0dXJuZWQsIGFuZCBpZgogICogaXQgaXMgcHJvZml0YWJsZSB0byByZXRyeSB0aGUgb3BlcmF0aW9uLCB0aGlzIGZ1bmN0aW9uIHdpbGwgd2FpdAotICogZm9yIHRoZSBjdXJyZW50IG9yIGNvbW1pdGluZyB0cmFuc2FjdGlvbiB0byBjb21wbGV0ZSwgYW5kIHRoZW4KKyAqIGZvciB0aGUgY3VycmVudCBvciBjb21taXR0aW5nIHRyYW5zYWN0aW9uIHRvIGNvbXBsZXRlLCBhbmQgdGhlbgogICogcmV0dXJuIFRSVUUuCiAgKgogICogaWYgdGhlIHRvdGFsIG51bWJlciBvZiByZXRyaWVzIGV4Y2VlZCB0aHJlZSB0aW1lcywgcmV0dXJuIEZBTFNFLgpAQCAtMTYzMiw5ICsxNjMyLDkgQEAKIAkJCWdvdG8gYWxsb2NhdGVkOwogCX0KIAkvKgotCSAqIFdlIG1heSBlbmQgdXAgYSBib2d1cyBlYWxpZXIgRU5PU1BDIGVycm9yIGR1ZSB0bworCSAqIFdlIG1heSBlbmQgdXAgYSBib2d1cyBlYXJsaWVyIEVOT1NQQyBlcnJvciBkdWUgdG8KIAkgKiBmaWxlc3lzdGVtIGlzICJmdWxsIiBvZiByZXNlcnZhdGlvbnMsIGJ1dAotCSAqIHRoZXJlIG1heWJlIGluZGVlZCBmcmVlIGJsb2NrcyBhdmFsaWFibGUgb24gZGlzaworCSAqIHRoZXJlIG1heWJlIGluZGVlZCBmcmVlIGJsb2NrcyBhdmFpbGFibGUgb24gZGlzawogCSAqIEluIHRoaXMgY2FzZSwgd2UganVzdCBmb3JnZXQgYWJvdXQgdGhlIHJlc2VydmF0aW9ucwogCSAqIGp1c3QgZG8gYmxvY2sgYWxsb2NhdGlvbiBhcyB3aXRob3V0IHJlc2VydmF0aW9ucy4KIAkgKi8KZGlmZiAtLWdpdCBhL2ZzL2V4dDMvaW5vZGUuYyBiL2ZzL2V4dDMvaW5vZGUuYwppbmRleCBmZTI1NDFkLi42OGIyZTQzIDEwMDY0NAotLS0gYS9mcy9leHQzL2lub2RlLmMKKysrIGIvZnMvZXh0My9pbm9kZS5jCkBAIC0yMDU1LDcgKzIwNTUsNyBAQAogICoKICAqCVdoZW4gd2UgZG8gdHJ1bmNhdGUoKSB3ZSBtYXkgaGF2ZSB0byBjbGVhbiB0aGUgZW5kcyBvZiBzZXZlcmFsCiAgKglpbmRpcmVjdCBibG9ja3MgYnV0IGxlYXZlIHRoZSBibG9ja3MgdGhlbXNlbHZlcyBhbGl2ZS4gQmxvY2sgaXMKLSAqCXBhcnRpYWxseSB0cnVuY2F0ZWQgaWYgc29tZSBkYXRhIGJlbG93IHRoZSBuZXcgaV9zaXplIGlzIHJlZmVyZWQKKyAqCXBhcnRpYWxseSB0cnVuY2F0ZWQgaWYgc29tZSBkYXRhIGJlbG93IHRoZSBuZXcgaV9zaXplIGlzIHJlZmVycmVkCiAgKglmcm9tIGl0IChhbmQgaXQgaXMgb24gdGhlIHBhdGggdG8gdGhlIGZpcnN0IGNvbXBsZXRlbHkgdHJ1bmNhdGVkCiAgKglkYXRhIGJsb2NrLCBpbmRlZWQpLiAgV2UgaGF2ZSB0byBmcmVlIHRoZSB0b3Agb2YgdGhhdCBwYXRoIGFsb25nCiAgKgl3aXRoIGV2ZXJ5dGhpbmcgdG8gdGhlIHJpZ2h0IG9mIHRoZSBwYXRoLiBTaW5jZSBubyBhbGxvY2F0aW9uCkBAIC0yMTg0LDcgKzIxODQsNyBAQAogICogQGZpcnN0OglhcnJheSBvZiBibG9jayBudW1iZXJzCiAgKiBAbGFzdDoJcG9pbnRzIGltbWVkaWF0ZWx5IHBhc3QgdGhlIGVuZCBvZiBhcnJheQogICoKLSAqIFdlIGFyZSBmcmVlaW5nIGFsbCBibG9ja3MgcmVmZXJlZCBmcm9tIHRoYXQgYXJyYXkgKG51bWJlcnMgYXJlIHN0b3JlZCBhcworICogV2UgYXJlIGZyZWVpbmcgYWxsIGJsb2NrcyByZWZlcnJlZCBmcm9tIHRoYXQgYXJyYXkgKG51bWJlcnMgYXJlIHN0b3JlZCBhcwogICogbGl0dGxlLWVuZGlhbiAzMi1iaXQpIGFuZCB1cGRhdGluZyBAaW5vZGUtPmlfYmxvY2tzIGFwcHJvcHJpYXRlbHkuCiAgKgogICogV2UgYWNjdW11bGF0ZSBjb250aWd1b3VzIHJ1bnMgb2YgYmxvY2tzIHRvIGZyZWUuICBDb252ZW5pZW50bHksIGlmIHRoZXNlCkBAIC0yMjcyLDcgKzIyNzIsNyBAQAogICoJQGxhc3Q6CXBvaW50ZXIgaW1tZWRpYXRlbHkgcGFzdCB0aGUgZW5kIG9mIGFycmF5CiAgKglAZGVwdGg6CWRlcHRoIG9mIHRoZSBicmFuY2hlcyB0byBmcmVlCiAgKgotICoJV2UgYXJlIGZyZWVpbmcgYWxsIGJsb2NrcyByZWZlcmVkIGZyb20gdGhlc2UgYnJhbmNoZXMgKG51bWJlcnMgYXJlCisgKglXZSBhcmUgZnJlZWluZyBhbGwgYmxvY2tzIHJlZmVycmVkIGZyb20gdGhlc2UgYnJhbmNoZXMgKG51bWJlcnMgYXJlCiAgKglzdG9yZWQgYXMgbGl0dGxlLWVuZGlhbiAzMi1iaXQpIGFuZCB1cGRhdGluZyBAaW5vZGUtPmlfYmxvY2tzCiAgKglhcHByb3ByaWF0ZWx5LgogICovCkBAIC0zMjkxLDcgKzMyOTEsNyBAQAogCWlmIChleHQzX3Nob3VsZF9qb3VybmFsX2RhdGEoaW5vZGUpKQogCQlyZXQgPSAzICogKGJwcCArIGluZGlyZWN0cykgKyAyOwogCWVsc2UKLQkJcmV0ID0gMiAqIChicHAgKyBpbmRpcmVjdHMpICsgMjsKKwkJcmV0ID0gMiAqIChicHAgKyBpbmRpcmVjdHMpICsgaW5kaXJlY3RzICsgMjsKIAogI2lmZGVmIENPTkZJR19RVU9UQQogCS8qIFdlIGtub3cgdGhhdCBzdHJ1Y3R1cmUgd2FzIGFscmVhZHkgYWxsb2NhdGVkIGR1cmluZyBkcXVvdF9pbml0aWFsaXplIHNvCmRpZmYgLS1naXQgYS9mcy9leHQzL3Jlc2l6ZS5jIGIvZnMvZXh0My9yZXNpemUuYwppbmRleCAxMDhiMTQyLi43OTE2ZTRjZSAxMDA2NDQKLS0tIGEvZnMvZXh0My9yZXNpemUuYworKysgYi9mcy9leHQzL3Jlc2l6ZS5jCkBAIC0xMDA5LDcgKzEwMDksNyBAQAogCiAJaWYgKHRlc3Rfb3B0KHNiLCBERUJVRykpCiAJCXByaW50ayhLRVJOX0RFQlVHICJFWFQzLWZzOiBleHRlbmRpbmcgbGFzdCBncm91cCBmcm9tICJFM0ZTQkxLCi0JCSAgICAgICAiIHVwdG8gIkUzRlNCTEsiIGJsb2Nrc1xuIiwKKwkJICAgICAgICIgdXAgdG8gIkUzRlNCTEsiIGJsb2Nrc1xuIiwKIAkJICAgICAgIG9fYmxvY2tzX2NvdW50LCBuX2Jsb2Nrc19jb3VudCk7CiAKIAlpZiAobl9ibG9ja3NfY291bnQgPT0gMCB8fCBuX2Jsb2Nrc19jb3VudCA9PSBvX2Jsb2Nrc19jb3VudCkKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvc3VwZXIuYyBiL2ZzL2V4dDMvc3VwZXIuYwppbmRleCAwNzE2ODlmLi4zYzZhOWUwIDEwMDY0NAotLS0gYS9mcy9leHQzL3N1cGVyLmMKKysrIGIvZnMvZXh0My9zdXBlci5jCkBAIC0yOTI1LDcgKzI5MjUsNyBAQAogCiAvKiBSZWFkIGRhdGEgZnJvbSBxdW90YWZpbGUgLSBhdm9pZCBwYWdlY2FjaGUgYW5kIHN1Y2ggYmVjYXVzZSB3ZSBjYW5ub3QgYWZmb3JkCiAgKiBhY3F1aXJpbmcgdGhlIGxvY2tzLi4uIEFzIHF1b3RhIGZpbGVzIGFyZSBuZXZlciB0cnVuY2F0ZWQgYW5kIHF1b3RhIGNvZGUKLSAqIGl0c2VsZiBzZXJpYWxpemVzIHRoZSBvcGVyYXRpb25zIChhbmQgbm9vbmUgZWxzZSBzaG91bGQgdG91Y2ggdGhlIGZpbGVzKQorICogaXRzZWxmIHNlcmlhbGl6ZXMgdGhlIG9wZXJhdGlvbnMgKGFuZCBubyBvbmUgZWxzZSBzaG91bGQgdG91Y2ggdGhlIGZpbGVzKQogICogd2UgZG9uJ3QgaGF2ZSB0byBiZSBhZnJhaWQgb2YgcmFjZXMgKi8KIHN0YXRpYyBzc2l6ZV90IGV4dDNfcXVvdGFfcmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgY2hhciAqZGF0YSwKIAkJCSAgICAgICBzaXplX3QgbGVuLCBsb2ZmX3Qgb2ZmKQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9iYWxsb2MuYyBiL2ZzL2V4dDQvYmFsbG9jLmMKaW5kZXggOTdiOTcwZS4uMWM2NzEzOSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9iYWxsb2MuYworKysgYi9mcy9leHQ0L2JhbGxvYy5jCkBAIC01NDcsNyArNTQ3LDcgQEAKICAqCiAgKiBleHQ0X3Nob3VsZF9yZXRyeV9hbGxvYygpIGlzIGNhbGxlZCB3aGVuIEVOT1NQQyBpcyByZXR1cm5lZCwgYW5kIGlmCiAgKiBpdCBpcyBwcm9maXRhYmxlIHRvIHJldHJ5IHRoZSBvcGVyYXRpb24sIHRoaXMgZnVuY3Rpb24gd2lsbCB3YWl0Ci0gKiBmb3IgdGhlIGN1cnJlbnQgb3IgY29tbWl0aW5nIHRyYW5zYWN0aW9uIHRvIGNvbXBsZXRlLCBhbmQgdGhlbgorICogZm9yIHRoZSBjdXJyZW50IG9yIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24gdG8gY29tcGxldGUsIGFuZCB0aGVuCiAgKiByZXR1cm4gVFJVRS4KICAqCiAgKiBpZiB0aGUgdG90YWwgbnVtYmVyIG9mIHJldHJpZXMgZXhjZWVkIHRocmVlIHRpbWVzLCByZXR1cm4gRkFMU0UuCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfamJkMi5oIGIvZnMvZXh0NC9leHQ0X2piZDIuaAppbmRleCBlMjVlOTliLi5kMGY1MzUzIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDRfamJkMi5oCisrKyBiL2ZzL2V4dDQvZXh0NF9qYmQyLmgKQEAgLTg2LDggKzg2LDggQEAKIAogI2lmZGVmIENPTkZJR19RVU9UQQogLyogQW1vdW50IG9mIGJsb2NrcyBuZWVkZWQgZm9yIHF1b3RhIHVwZGF0ZSAtIHdlIGtub3cgdGhhdCB0aGUgc3RydWN0dXJlIHdhcwotICogYWxsb2NhdGVkIHNvIHdlIG5lZWQgdG8gdXBkYXRlIG9ubHkgaW5vZGUrZGF0YSAqLwotI2RlZmluZSBFWFQ0X1FVT1RBX1RSQU5TX0JMT0NLUyhzYikgKHRlc3Rfb3B0KHNiLCBRVU9UQSkgPyAyIDogMCkKKyAqIGFsbG9jYXRlZCBzbyB3ZSBuZWVkIHRvIHVwZGF0ZSBvbmx5IGRhdGEgYmxvY2sgKi8KKyNkZWZpbmUgRVhUNF9RVU9UQV9UUkFOU19CTE9DS1Moc2IpICh0ZXN0X29wdChzYiwgUVVPVEEpID8gMSA6IDApCiAvKiBBbW91bnQgb2YgYmxvY2tzIG5lZWRlZCBmb3IgcXVvdGEgaW5zZXJ0L2RlbGV0ZSAtIHdlIGRvIHNvbWUgYmxvY2sgd3JpdGVzCiAgKiBidXQgaW5vZGUsIHNiIGFuZCBncm91cCB1cGRhdGVzIGFyZSBkb25lIG9ubHkgb25jZSAqLwogI2RlZmluZSBFWFQ0X1FVT1RBX0lOSVRfQkxPQ0tTKHNiKSAodGVzdF9vcHQoc2IsIFFVT1RBKSA/IChEUVVPVF9JTklUX0FMTE9DKlwKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50cy5jIGIvZnMvZXh0NC9leHRlbnRzLmMKaW5kZXggZGQyY2I1MC4uNDg5MGQ2ZiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHRlbnRzLmMKKysrIGIvZnMvZXh0NC9leHRlbnRzLmMKQEAgLTE3MjksNyArMTcyOSw3IEBACiAJCUJVR19PTihucGF0aC0+cF9kZXB0aCAhPSBwYXRoLT5wX2RlcHRoKTsKIAkJZWggPSBucGF0aFtkZXB0aF0ucF9oZHI7CiAJCWlmIChsZTE2X3RvX2NwdShlaC0+ZWhfZW50cmllcykgPCBsZTE2X3RvX2NwdShlaC0+ZWhfbWF4KSkgewotCQkJZXh0X2RlYnVnKCJuZXh0IGxlYWYgaXNudCBmdWxsKCVkKVxuIiwKKwkJCWV4dF9kZWJ1ZygibmV4dCBsZWFmIGlzbid0IGZ1bGwoJWQpXG4iLAogCQkJCSAgbGUxNl90b19jcHUoZWgtPmVoX2VudHJpZXMpKTsKIAkJCXBhdGggPSBucGF0aDsKIAkJCWdvdG8gcmVwZWF0OwpAQCAtMjUzMyw3ICsyNTMzLDcgQEAKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBleHQ0X2V4dF9tYXBfYmxvY2tzKCkgaWYgc29tZW9uZSB0cmllcyB0byB3cml0ZQogICogdG8gYW4gdW5pbml0aWFsaXplZCBleHRlbnQuIEl0IG1heSByZXN1bHQgaW4gc3BsaXR0aW5nIHRoZSB1bmluaXRpYWxpemVkCi0gKiBleHRlbnQgaW50byBtdWx0aXBsZSBleHRlbnRzICh1cHRvIHRocmVlIC0gb25lIGluaXRpYWxpemVkIGFuZCB0d28KKyAqIGV4dGVudCBpbnRvIG11bHRpcGxlIGV4dGVudHMgKHVwIHRvIHRocmVlIC0gb25lIGluaXRpYWxpemVkIGFuZCB0d28KICAqIHVuaW5pdGlhbGl6ZWQpLgogICogVGhlcmUgYXJlIHRocmVlIHBvc3NpYmlsaXRpZXM6CiAgKiAgIGE+IFRoZXJlIGlzIG5vIHNwbGl0IHJlcXVpcmVkOiBFbnRpcmUgZXh0ZW50IHNob3VsZCBiZSBpbml0aWFsaXplZApAQCAtMzE3NCw3ICszMTc0LDcgQEAKIAkJCQkJCSAgIHBhdGgsIGZsYWdzKTsKIAkJLyoKIAkJICogRmxhZyB0aGUgaW5vZGUobm9uIGFpbyBjYXNlKSBvciBlbmRfaW8gc3RydWN0IChhaW8gY2FzZSkKLQkJICogdGhhdCB0aGlzIElPIG5lZWRzIHRvIGNvbnZlcnRpb24gdG8gd3JpdHRlbiB3aGVuIElPIGlzCisJCSAqIHRoYXQgdGhpcyBJTyBuZWVkcyB0byBjb252ZXJzaW9uIHRvIHdyaXR0ZW4gd2hlbiBJTyBpcwogCQkgKiBjb21wbGV0ZWQKIAkJICovCiAJCWlmIChpbyAmJiAhKGlvLT5mbGFnICYgRVhUNF9JT19FTkRfVU5XUklUVEVOKSkgewpAQCAtMzQ2MCwxMCArMzQ2MCwxMCBAQAogCQlleHQ0X2V4dF9tYXJrX3VuaW5pdGlhbGl6ZWQoJm5ld2V4KTsKIAkJLyoKIAkJICogaW9fZW5kIHN0cnVjdHVyZSB3YXMgY3JlYXRlZCBmb3IgZXZlcnkgSU8gd3JpdGUgdG8gYW4KLQkJICogdW5pbml0aWFsaXplZCBleHRlbnQuIFRvIGF2b2lkIHVuZWNlc3NhcnkgY29udmVyc2lvbiwKKwkJICogdW5pbml0aWFsaXplZCBleHRlbnQuIFRvIGF2b2lkIHVubmVjZXNzYXJ5IGNvbnZlcnNpb24sCiAJCSAqIGhlcmUgd2UgZmxhZyB0aGUgSU8gdGhhdCByZWFsbHkgbmVlZHMgdGhlIGNvbnZlcnNpb24uCiAJCSAqIEZvciBub24gYXN5Y24gZGlyZWN0IElPIGNhc2UsIGZsYWcgdGhlIGlub2RlIHN0YXRlCi0JCSAqIHRoYXQgd2UgbmVlZCB0byBwZXJmb3JtIGNvbnZlcnRpb24gd2hlbiBJTyBpcyBkb25lLgorCQkgKiB0aGF0IHdlIG5lZWQgdG8gcGVyZm9ybSBjb252ZXJzaW9uIHdoZW4gSU8gaXMgZG9uZS4KIAkJICovCiAJCWlmICgoZmxhZ3MgJiBFWFQ0X0dFVF9CTE9DS1NfUFJFX0lPKSkgewogCQkJaWYgKGlvICYmICEoaW8tPmZsYWcgJiBFWFQ0X0lPX0VORF9VTldSSVRURU4pKSB7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2ZzeW5jLmMgYi9mcy9leHQ0L2ZzeW5jLmMKaW5kZXggN2Y3NDAxOS4uZTk0NzNjYiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9mc3luYy5jCisrKyBiL2ZzL2V4dDQvZnN5bmMuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiAJCSAqIHRvIHRoZSB3b3JrLXRvLWJlIHNjaGVkdWxlIGlzIGZyZWVkLgogCQkgKgogCQkgKiBUaHVzIHdlIG5lZWQgdG8ga2VlcCB0aGUgaW8gc3RydWN0dXJlIHN0aWxsIHZhbGlkIGhlcmUgYWZ0ZXIKLQkJICogY29udmVydGlvbiBmaW5pc2hlZC4gVGhlIGlvIHN0cnVjdHVyZSBoYXMgYSBmbGFnIHRvCisJCSAqIGNvbnZlcnNpb24gZmluaXNoZWQuIFRoZSBpbyBzdHJ1Y3R1cmUgaGFzIGEgZmxhZyB0bwogCQkgKiBhdm9pZCBkb3VibGUgY29udmVydGluZyBmcm9tIGJvdGggZnN5bmMgYW5kIGJhY2tncm91bmQgd29yawogCQkgKiBxdWV1ZSB3b3JrLgogCQkgKi8KQEAgLTEyNSw5ICsxMjUsMTEgQEAKICAqIHRoZSBwYXJlbnQgZGlyZWN0b3J5J3MgcGFyZW50IGFzIHdlbGwsIGFuZCBzbyBvbiByZWN1cnNpdmVseSwgaWYKICAqIHRoZXkgYXJlIGFsc28gZnJlc2hseSBjcmVhdGVkLgogICovCi1zdGF0aWMgdm9pZCBleHQ0X3N5bmNfcGFyZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdGF0aWMgaW50IGV4dDRfc3luY19wYXJlbnQoc3RydWN0IGlub2RlICppbm9kZSkKIHsKKwlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjOwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IE5VTEw7CisJaW50IHJldCA9IDA7CiAKIAl3aGlsZSAoaW5vZGUgJiYgZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX05FV0VOVFJZKSkgewogCQlleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX05FV0VOVFJZKTsKQEAgLTEzNiw4ICsxMzgsMTcgQEAKIAkJaWYgKCFkZW50cnkgfHwgIWRlbnRyeS0+ZF9wYXJlbnQgfHwgIWRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGUpCiAJCQlicmVhazsKIAkJaW5vZGUgPSBkZW50cnktPmRfcGFyZW50LT5kX2lub2RlOwotCQlzeW5jX21hcHBpbmdfYnVmZmVycyhpbm9kZS0+aV9tYXBwaW5nKTsKKwkJcmV0ID0gc3luY19tYXBwaW5nX2J1ZmZlcnMoaW5vZGUtPmlfbWFwcGluZyk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwkJbWVtc2V0KCZ3YmMsIDAsIHNpemVvZih3YmMpKTsKKwkJd2JjLnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMOworCQl3YmMubnJfdG9fd3JpdGUgPSAwOyAgICAgICAgIC8qIG9ubHkgd3JpdGUgb3V0IHRoZSBpbm9kZSAqLworCQlyZXQgPSBzeW5jX2lub2RlKGlub2RlLCAmd2JjKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOwogCX0KKwlyZXR1cm4gcmV0OwogfQogCiAvKgpAQCAtMTc2LDcgKzE4Nyw3IEBACiAJaWYgKCFqb3VybmFsKSB7CiAJCXJldCA9IGdlbmVyaWNfZmlsZV9mc3luYyhmaWxlLCBkYXRhc3luYyk7CiAJCWlmICghcmV0ICYmICFsaXN0X2VtcHR5KCZpbm9kZS0+aV9kZW50cnkpKQotCQkJZXh0NF9zeW5jX3BhcmVudChpbm9kZSk7CisJCQlyZXQgPSBleHQ0X3N5bmNfcGFyZW50KGlub2RlKTsKIAkJZ290byBvdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggMWE4NjI4Mi4uZjJmYTVlOCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCisrKyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtMjUwMiw2ICsyNTAyLDcgQEAKIAkJICogZm9yIHBhcnRpYWwgd3JpdGUuCiAJCSAqLwogCQlzZXRfYnVmZmVyX25ldyhiaCk7CisJCXNldF9idWZmZXJfbWFwcGVkKGJoKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yNTg4LDcgKzI1ODksNyBAQAogICogYmVjYXVzZSB3ZSBzaG91bGQgaGF2ZSBob2xlcyBmaWxsZWQgZnJvbSBleHQ0X3BhZ2VfbWt3cml0ZSgpLiBXZSBldmVuIGRvbid0CiAgKiBuZWVkIHRvIGZpbGUgdGhlIGlub2RlIHRvIHRoZSB0cmFuc2FjdGlvbidzIGxpc3QgaW4gb3JkZXJlZCBtb2RlIGJlY2F1c2UgaWYKICAqIHdlIGFyZSB3cml0aW5nIGJhY2sgZGF0YSBhZGRlZCBieSB3cml0ZSgpLCB0aGUgaW5vZGUgaXMgYWxyZWFkeSB0aGVyZSBhbmQgaWYKLSAqIHdlIGFyZSB3cml0aW5nIGJhY2sgZGF0YSBtb2RpZmllZCB2aWEgbW1hcCgpLCBub29uZSBndWFyYW50ZWVzIGluIHdoaWNoCisgKiB3ZSBhcmUgd3JpdGluZyBiYWNrIGRhdGEgbW9kaWZpZWQgdmlhIG1tYXAoKSwgbm8gb25lIGd1YXJhbnRlZXMgaW4gd2hpY2gKICAqIHRyYW5zYWN0aW9uIHRoZSBkYXRhIHdpbGwgaGl0IHRoZSBkaXNrLiBJbiBjYXNlIHdlIGFyZSBqb3VybmFsaW5nIGRhdGEsIHdlCiAgKiBjYW5ub3Qgc3RhcnQgdHJhbnNhY3Rpb24gZGlyZWN0bHkgYmVjYXVzZSB0cmFuc2FjdGlvbiBzdGFydCByYW5rcyBhYm92ZSBwYWdlCiAgKiBsb2NrIHNvIHdlIGhhdmUgdG8gZG8gc29tZSBtYWdpYy4KQEAgLTI2OTAsNyArMjY5MSw3IEBACiAKIC8qCiAgKiBUaGlzIGlzIGNhbGxlZCB2aWEgZXh0NF9kYV93cml0ZXBhZ2VzKCkgdG8KLSAqIGNhbHVsYXRlIHRoZSB0b3RhbCBudW1iZXIgb2YgY3JlZGl0cyB0byByZXNlcnZlIHRvIGZpdAorICogY2FsY3VsYXRlIHRoZSB0b3RhbCBudW1iZXIgb2YgY3JlZGl0cyB0byByZXNlcnZlIHRvIGZpdAogICogYSBzaW5nbGUgZXh0ZW50IGFsbG9jYXRpb24gaW50byBhIHNpbmdsZSB0cmFuc2FjdGlvbiwKICAqIGV4dDRfZGFfd3JpdHBlYWdlcygpIHdpbGwgbG9vcCBjYWxsaW5nIHRoaXMgYmVmb3JlCiAgKiB0aGUgYmxvY2sgYWxsb2NhdGlvbi4KQEAgLTMzMDQsNyArMzMwNSw3IEBACiAJICogdGhlIHBhZ2VzIGJ5IGNhbGxpbmcgcmVkaXJ0eV9wYWdlX2Zvcl93cml0ZXBhZ2UoKSBidXQgdGhhdAogCSAqIHdvdWxkIGJlIHVnbHkgaW4gdGhlIGV4dHJlbWUuICBTbyBpbnN0ZWFkIHdlIHdvdWxkIG5lZWQgdG8KIAkgKiByZXBsaWNhdGUgcGFydHMgb2YgdGhlIGNvZGUgaW4gdGhlIGFib3ZlIGZ1bmN0aW9ucywKLQkgKiBzaW1wbGlmeWluZyB0aGVtIGJlY3Vhc2Ugd2Ugd291bGRuJ3QgYWN0dWFsbHkgaW50ZW5kIHRvCisJICogc2ltcGxpZnlpbmcgdGhlbSBiZWNhdXNlIHdlIHdvdWxkbid0IGFjdHVhbGx5IGludGVuZCB0bwogCSAqIHdyaXRlIG91dCB0aGUgcGFnZXMsIGJ1dCByYXRoZXIgb25seSBjb2xsZWN0IGNvbnRpZ3VvdXMKIAkgKiBsb2dpY2FsIGJsb2NrIGV4dGVudHMsIGNhbGwgdGhlIG11bHRpLWJsb2NrIGFsbG9jYXRvciwgYW5kCiAJICogdGhlbiB1cGRhdGUgdGhlIGJ1ZmZlciBoZWFkcyB3aXRoIHRoZSBibG9jayBhbGxvY2F0aW9ucy4KQEAgLTM2OTQsNyArMzY5NSw3IEBACiAgKgogICogVGhlIHVud3JyaXR0ZW4gZXh0ZW50cyB3aWxsIGJlIGNvbnZlcnRlZCB0byB3cml0dGVuIHdoZW4gRElPIGlzIGNvbXBsZXRlZC4KICAqIEZvciBhc3luYyBkaXJlY3QgSU8sIHNpbmNlIHRoZSBJTyBtYXkgc3RpbGwgcGVuZGluZyB3aGVuIHJldHVybiwgd2UKLSAqIHNldCB1cCBhbiBlbmRfaW8gY2FsbCBiYWNrIGZ1bmN0aW9uLCB3aGljaCB3aWxsIGRvIHRoZSBjb252ZXJ0aW9uCisgKiBzZXQgdXAgYW4gZW5kX2lvIGNhbGwgYmFjayBmdW5jdGlvbiwgd2hpY2ggd2lsbCBkbyB0aGUgY29udmVyc2lvbgogICogd2hlbiBhc3luYyBkaXJlY3QgSU8gY29tcGxldGVkLgogICoKICAqIElmIHRoZSBPX0RJUkVDVCB3cml0ZSB3aWxsIGV4dGVuZCB0aGUgZmlsZSB0aGVuIGFkZCB0aGlzIGlub2RlIHRvIHRoZQpAQCAtMzcxNyw3ICszNzE4LDcgQEAKICAJCSAqIFdlIGNvdWxkIGRpcmVjdCB3cml0ZSB0byBob2xlcyBhbmQgZmFsbG9jYXRlLgogCQkgKgogIAkJICogQWxsb2NhdGVkIGJsb2NrcyB0byBmaWxsIHRoZSBob2xlIGFyZSBtYXJrZWQgYXMgdW5pbml0aWFsaXplZAotIAkJICogdG8gcHJldmVudCBwYXJhbGVsIGJ1ZmZlcmVkIHJlYWQgdG8gZXhwb3NlIHRoZSBzdGFsZSBkYXRhCisgCQkgKiB0byBwcmV2ZW50IHBhcmFsbGVsIGJ1ZmZlcmVkIHJlYWQgdG8gZXhwb3NlIHRoZSBzdGFsZSBkYXRhCiAgCQkgKiBiZWZvcmUgRElPIGNvbXBsZXRlIHRoZSBkYXRhIElPLgogCQkgKgogIAkJICogQXMgdG8gcHJldmlvdXNseSBmYWxsb2NhdGVkIGV4dGVudHMsIGV4dDQgZ2V0X2Jsb2NrCkBAIC0zNzc4LDcgKzM3NzksNyBAQAogCQkJaW50IGVycjsKIAkJCS8qCiAJCQkgKiBmb3Igbm9uIEFJTyBjYXNlLCBzaW5jZSB0aGUgSU8gaXMgYWxyZWFkeQotCQkJICogY29tcGxldGVkLCB3ZSBjb3VsZCBkbyB0aGUgY29udmVydGlvbiByaWdodCBoZXJlCisJCQkgKiBjb21wbGV0ZWQsIHdlIGNvdWxkIGRvIHRoZSBjb252ZXJzaW9uIHJpZ2h0IGhlcmUKIAkJCSAqLwogCQkJZXJyID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGlub2RlLAogCQkJCQkJCSAgICAgb2Zmc2V0LCByZXQpOwpAQCAtNDAyNSw3ICs0MDI2LDcgQEAKICAqCiAgKglXaGVuIHdlIGRvIHRydW5jYXRlKCkgd2UgbWF5IGhhdmUgdG8gY2xlYW4gdGhlIGVuZHMgb2Ygc2V2ZXJhbAogICoJaW5kaXJlY3QgYmxvY2tzIGJ1dCBsZWF2ZSB0aGUgYmxvY2tzIHRoZW1zZWx2ZXMgYWxpdmUuIEJsb2NrIGlzCi0gKglwYXJ0aWFsbHkgdHJ1bmNhdGVkIGlmIHNvbWUgZGF0YSBiZWxvdyB0aGUgbmV3IGlfc2l6ZSBpcyByZWZlcmVkCisgKglwYXJ0aWFsbHkgdHJ1bmNhdGVkIGlmIHNvbWUgZGF0YSBiZWxvdyB0aGUgbmV3IGlfc2l6ZSBpcyByZWZlcnJlZAogICoJZnJvbSBpdCAoYW5kIGl0IGlzIG9uIHRoZSBwYXRoIHRvIHRoZSBmaXJzdCBjb21wbGV0ZWx5IHRydW5jYXRlZAogICoJZGF0YSBibG9jaywgaW5kZWVkKS4gIFdlIGhhdmUgdG8gZnJlZSB0aGUgdG9wIG9mIHRoYXQgcGF0aCBhbG9uZwogICoJd2l0aCBldmVyeXRoaW5nIHRvIHRoZSByaWdodCBvZiB0aGUgcGF0aC4gU2luY2Ugbm8gYWxsb2NhdGlvbgpAQCAtNDE2OSw3ICs0MTcwLDcgQEAKICAqIEBmaXJzdDoJYXJyYXkgb2YgYmxvY2sgbnVtYmVycwogICogQGxhc3Q6CXBvaW50cyBpbW1lZGlhdGVseSBwYXN0IHRoZSBlbmQgb2YgYXJyYXkKICAqCi0gKiBXZSBhcmUgZnJlZWluZyBhbGwgYmxvY2tzIHJlZmVyZWQgZnJvbSB0aGF0IGFycmF5IChudW1iZXJzIGFyZSBzdG9yZWQgYXMKKyAqIFdlIGFyZSBmcmVlaW5nIGFsbCBibG9ja3MgcmVmZXJyZWQgZnJvbSB0aGF0IGFycmF5IChudW1iZXJzIGFyZSBzdG9yZWQgYXMKICAqIGxpdHRsZS1lbmRpYW4gMzItYml0KSBhbmQgdXBkYXRpbmcgQGlub2RlLT5pX2Jsb2NrcyBhcHByb3ByaWF0ZWx5LgogICoKICAqIFdlIGFjY3VtdWxhdGUgY29udGlndW91cyBydW5zIG9mIGJsb2NrcyB0byBmcmVlLiAgQ29udmVuaWVudGx5LCBpZiB0aGVzZQpAQCAtNDI2MSw3ICs0MjYyLDcgQEAKICAqCUBsYXN0Oglwb2ludGVyIGltbWVkaWF0ZWx5IHBhc3QgdGhlIGVuZCBvZiBhcnJheQogICoJQGRlcHRoOglkZXB0aCBvZiB0aGUgYnJhbmNoZXMgdG8gZnJlZQogICoKLSAqCVdlIGFyZSBmcmVlaW5nIGFsbCBibG9ja3MgcmVmZXJlZCBmcm9tIHRoZXNlIGJyYW5jaGVzIChudW1iZXJzIGFyZQorICoJV2UgYXJlIGZyZWVpbmcgYWxsIGJsb2NrcyByZWZlcnJlZCBmcm9tIHRoZXNlIGJyYW5jaGVzIChudW1iZXJzIGFyZQogICoJc3RvcmVkIGFzIGxpdHRsZS1lbmRpYW4gMzItYml0KSBhbmQgdXBkYXRpbmcgQGlub2RlLT5pX2Jsb2NrcwogICoJYXBwcm9wcmlhdGVseS4KICAqLwpAQCAtNDQyOSw4ICs0NDMwLDggQEAKIAlJbmRpcmVjdCBjaGFpbls0XTsKIAlJbmRpcmVjdCAqcGFydGlhbDsKIAlfX2xlMzIgbnIgPSAwOwotCWludCBuOwotCWV4dDRfbGJsa190IGxhc3RfYmxvY2s7CisJaW50IG4gPSAwOworCWV4dDRfbGJsa190IGxhc3RfYmxvY2ssIG1heF9ibG9jazsKIAl1bnNpZ25lZCBibG9ja3NpemUgPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CiAKIAl0cmFjZV9leHQ0X3RydW5jYXRlX2VudGVyKGlub2RlKTsKQEAgLTQ0NTUsMTQgKzQ0NTYsMTggQEAKIAogCWxhc3RfYmxvY2sgPSAoaW5vZGUtPmlfc2l6ZSArIGJsb2Nrc2l6ZS0xKQogCQkJCQk+PiBFWFQ0X0JMT0NLX1NJWkVfQklUUyhpbm9kZS0+aV9zYik7CisJbWF4X2Jsb2NrID0gKEVYVDRfU0IoaW5vZGUtPmlfc2IpLT5zX2JpdG1hcF9tYXhieXRlcyArIGJsb2Nrc2l6ZS0xKQorCQkJCQk+PiBFWFQ0X0JMT0NLX1NJWkVfQklUUyhpbm9kZS0+aV9zYik7CiAKIAlpZiAoaW5vZGUtPmlfc2l6ZSAmIChibG9ja3NpemUgLSAxKSkKIAkJaWYgKGV4dDRfYmxvY2tfdHJ1bmNhdGVfcGFnZShoYW5kbGUsIG1hcHBpbmcsIGlub2RlLT5pX3NpemUpKQogCQkJZ290byBvdXRfc3RvcDsKIAotCW4gPSBleHQ0X2Jsb2NrX3RvX3BhdGgoaW5vZGUsIGxhc3RfYmxvY2ssIG9mZnNldHMsIE5VTEwpOwotCWlmIChuID09IDApCi0JCWdvdG8gb3V0X3N0b3A7CS8qIGVycm9yICovCisJaWYgKGxhc3RfYmxvY2sgIT0gbWF4X2Jsb2NrKSB7CisJCW4gPSBleHQ0X2Jsb2NrX3RvX3BhdGgoaW5vZGUsIGxhc3RfYmxvY2ssIG9mZnNldHMsIE5VTEwpOworCQlpZiAobiA9PSAwKQorCQkJZ290byBvdXRfc3RvcDsJLyogZXJyb3IgKi8KKwl9CiAKIAkvKgogCSAqIE9LLiAgVGhpcyB0cnVuY2F0ZSBpcyBnb2luZyB0byBoYXBwZW4uICBXZSBhZGQgdGhlIGlub2RlIHRvIHRoZQpAQCAtNDQ5Myw3ICs0NDk4LDEzIEBACiAJICovCiAJZWktPmlfZGlza3NpemUgPSBpbm9kZS0+aV9zaXplOwogCi0JaWYgKG4gPT0gMSkgewkJLyogZGlyZWN0IGJsb2NrcyAqLworCWlmIChsYXN0X2Jsb2NrID09IG1heF9ibG9jaykgeworCQkvKgorCQkgKiBJdCBpcyB1bm5lY2Vzc2FyeSB0byBmcmVlIGFueSBkYXRhIGJsb2NrcyBpZiBsYXN0X2Jsb2NrIGlzCisJCSAqIGVxdWFsIHRvIHRoZSBpbmRpcmVjdCBibG9jayBsaW1pdC4KKwkJICovCisJCWdvdG8gb3V0X3VubG9jazsKKwl9IGVsc2UgaWYgKG4gPT0gMSkgewkJLyogZGlyZWN0IGJsb2NrcyAqLwogCQlleHQ0X2ZyZWVfZGF0YShoYW5kbGUsIGlub2RlLCBOVUxMLCBpX2RhdGErb2Zmc2V0c1swXSwKIAkJCSAgICAgICBpX2RhdGEgKyBFWFQ0X05ESVJfQkxPQ0tTKTsKIAkJZ290byBkb19pbmRpcmVjdHM7CkBAIC00NTUzLDYgKzQ1NjQsNyBAQAogCQk7CiAJfQogCitvdXRfdW5sb2NrOgogCXVwX3dyaXRlKCZlaS0+aV9kYXRhX3NlbSk7CiAJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IGV4dDRfY3VycmVudF90aW1lKGlub2RlKTsKIAlleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7CkBAIC01Mzk4LDEzICs1NDEwLDEyIEBACiAJLyogaWYgbnJibG9ja3MgYXJlIGNvbnRpZ3VvdXMgKi8KIAlpZiAoY2h1bmspIHsKIAkJLyoKLQkJICogV2l0aCBOIGNvbnRpZ3VvdXMgZGF0YSBibG9ja3MsIGl0IG5lZWQgYXQgbW9zdAotCQkgKiBOL0VYVDRfQUREUl9QRVJfQkxPQ0soaW5vZGUtPmlfc2IpIGluZGlyZWN0IGJsb2NrcwotCQkgKiAyIGRpbmRpcmVjdCBibG9ja3MKLQkJICogMSB0aW5kaXJlY3QgYmxvY2sKKwkJICogV2l0aCBOIGNvbnRpZ3VvdXMgZGF0YSBibG9ja3MsIHdlIG5lZWQgYXQgbW9zdAorCQkgKiBOL0VYVDRfQUREUl9QRVJfQkxPQ0soaW5vZGUtPmlfc2IpICsgMSBpbmRpcmVjdCBibG9ja3MsCisJCSAqIDIgZGluZGlyZWN0IGJsb2NrcywgYW5kIDEgdGluZGlyZWN0IGJsb2NrCiAJCSAqLwotCQlpbmRpcmVjdHMgPSBucmJsb2NrcyAvIEVYVDRfQUREUl9QRVJfQkxPQ0soaW5vZGUtPmlfc2IpOwotCQlyZXR1cm4gaW5kaXJlY3RzICsgMzsKKwkJcmV0dXJuIERJVl9ST1VORF9VUChucmJsb2NrcywKKwkJCQkgICAgRVhUNF9BRERSX1BFUl9CTE9DSyhpbm9kZS0+aV9zYikpICsgNDsKIAl9CiAJLyoKIAkgKiBpZiBucmJsb2NrcyBhcmUgbm90IGNvbnRpZ3VvdXMsIHdvcnNlIGNhc2UsIGVhY2ggYmxvY2sgdG91Y2gKQEAgLTU0NzgsNyArNTQ4OSw3IEBACiB9CiAKIC8qCi0gKiBDYWx1bGF0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIGNyZWRpdHMgdG8gcmVzZXJ2ZSB0byBmaXQKKyAqIENhbGN1bGF0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIGNyZWRpdHMgdG8gcmVzZXJ2ZSB0byBmaXQKICAqIHRoZSBtb2RpZmljYXRpb24gb2YgYSBzaW5nbGUgcGFnZXMgaW50byBhIHNpbmdsZSB0cmFuc2FjdGlvbiwKICAqIHdoaWNoIG1heSBpbmNsdWRlIG11bHRpcGxlIGNodW5rcyBvZiBibG9jayBhbGxvY2F0aW9ucy4KICAqCmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jCmluZGV4IGE1ODM3YTguLmQ4YTE2ZWUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jCisrKyBiL2ZzL2V4dDQvbWJhbGxvYy5jCkBAIC05Miw3ICs5Miw3IEBACiAgKiBiZXR3ZWVuIENQVXMuIEl0IGlzIHBvc3NpYmxlIHRvIGdldCBzY2hlZHVsZWQgYXQgdGhpcyBwb2ludC4KICAqCiAgKiBUaGUgbG9jYWxpdHkgZ3JvdXAgcHJlYWxsb2Mgc3BhY2UgaXMgdXNlZCBsb29raW5nIGF0IHdoZXRoZXIgd2UgaGF2ZQotICogZW5vdWdoIGZyZWUgc3BhY2UgKHBhX2ZyZWUpIHdpdGhpbmcgdGhlIHByZWFsbG9jIHNwYWNlLgorICogZW5vdWdoIGZyZWUgc3BhY2UgKHBhX2ZyZWUpIHdpdGhpbiB0aGUgcHJlYWxsb2Mgc3BhY2UuCiAgKgogICogSWYgd2UgY2FuJ3QgYWxsb2NhdGUgYmxvY2tzIHZpYSBpbm9kZSBwcmVhbGxvYyBvci9hbmQgbG9jYWxpdHkgZ3JvdXAKICAqIHByZWFsbG9jIHRoZW4gd2UgbG9vayBhdCB0aGUgYnVkZHkgY2FjaGUuIFRoZSBidWRkeSBjYWNoZSBpcyByZXByZXNlbnRlZApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9taWdyYXRlLmMgYi9mcy9leHQ0L21pZ3JhdGUuYwppbmRleCBkMWJhZmE1Li45MjgxNmI0IDEwMDY0NAotLS0gYS9mcy9leHQ0L21pZ3JhdGUuYworKysgYi9mcy9leHQ0L21pZ3JhdGUuYwpAQCAtNTE3LDcgKzUxNyw3IEBACiAJICogc3RhcnQgd2l0aCBvbmUgY3JlZGl0IGFjY291bnRlZCBmb3IKIAkgKiBzdXBlcmJsb2NrIG1vZGlmaWNhdGlvbi4KIAkgKgotCSAqIEZvciB0aGUgdG1wX2lub2RlIHdlIGFscmVhZHkgaGF2ZSBjb21taXRlZCB0aGUKKwkgKiBGb3IgdGhlIHRtcF9pbm9kZSB3ZSBhbHJlYWR5IGhhdmUgY29tbWl0dGVkIHRoZQogCSAqIHRyYXNjYXRpb24gdGhhdCBjcmVhdGVkIHRoZSBpbm9kZS4gTGF0ZXIgYXMgYW5kCiAJICogd2hlbiB3ZSBhZGQgZXh0ZW50cyB3ZSBleHRlbnQgdGhlIGpvdXJuYWwKIAkgKi8KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCAyMjU0NmFkLi44NTUzZGZiIDEwMDY0NAotLS0gYS9mcy9leHQ0L3N1cGVyLmMKKysrIGIvZnMvZXh0NC9zdXBlci5jCkBAIC0yNDIsMjcgKzI0Miw0NCBAQAogICogam91cm5hbF9lbmQgY2FsbHMgcmVzdWx0IGluIHRoZSBzdXBlcmJsb2NrIGJlaW5nIG1hcmtlZCBkaXJ0eSwgc28KICAqIHRoYXQgc3luYygpIHdpbGwgY2FsbCB0aGUgZmlsZXN5c3RlbSdzIHdyaXRlX3N1cGVyIGNhbGxiYWNrIGlmCiAgKiBhcHByb3ByaWF0ZS4KKyAqCisgKiBUbyBhdm9pZCBqX2JhcnJpZXIgaG9sZCBpbiB1c2Vyc3BhY2Ugd2hlbiBhIHVzZXIgY2FsbHMgZnJlZXplKCksCisgKiBleHQ0IHByZXZlbnRzIGEgbmV3IGhhbmRsZSBmcm9tIGJlaW5nIHN0YXJ0ZWQgYnkgc19mcm96ZW4sIHdoaWNoCisgKiBpcyBpbiBhbiB1cHBlciBsYXllci4KICAqLwogaGFuZGxlX3QgKmV4dDRfam91cm5hbF9zdGFydF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbmJsb2NrcykKIHsKIAlqb3VybmFsX3QgKmpvdXJuYWw7CisJaGFuZGxlX3QgICpoYW5kbGU7CiAKIAlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCiAJCXJldHVybiBFUlJfUFRSKC1FUk9GUyk7CiAKLQl2ZnNfY2hlY2tfZnJvemVuKHNiLCBTQl9GUkVFWkVfVFJBTlMpOwotCS8qIFNwZWNpYWwgY2FzZSBoZXJlOiBpZiB0aGUgam91cm5hbCBoYXMgYWJvcnRlZCBiZWhpbmQgb3VyCi0JICogYmFja3MgKGVnLiBFSU8gaW4gdGhlIGNvbW1pdCB0aHJlYWQpLCB0aGVuIHdlIHN0aWxsIG5lZWQgdG8KLQkgKiB0YWtlIHRoZSBGUyBpdHNlbGYgcmVhZG9ubHkgY2xlYW5seS4gKi8KIAlqb3VybmFsID0gRVhUNF9TQihzYiktPnNfam91cm5hbDsKLQlpZiAoam91cm5hbCkgewotCQlpZiAoaXNfam91cm5hbF9hYm9ydGVkKGpvdXJuYWwpKSB7Ci0JCQlleHQ0X2Fib3J0KHNiLCAiRGV0ZWN0ZWQgYWJvcnRlZCBqb3VybmFsIik7Ci0JCQlyZXR1cm4gRVJSX1BUUigtRVJPRlMpOwotCQl9Ci0JCXJldHVybiBqYmQyX2pvdXJuYWxfc3RhcnQoam91cm5hbCwgbmJsb2Nrcyk7CisJaGFuZGxlID0gZXh0NF9qb3VybmFsX2N1cnJlbnRfaGFuZGxlKCk7CisKKwkvKgorCSAqIElmIGEgaGFuZGxlIGhhcyBiZWVuIHN0YXJ0ZWQsIGl0IHNob3VsZCBiZSBhbGxvd2VkIHRvCisJICogZmluaXNoLCBvdGhlcndpc2UgZGVhZGxvY2sgY291bGQgaGFwcGVuIGJldHdlZW4gZnJlZXplCisJICogYW5kIG90aGVycyhlLmcuIHRydW5jYXRlKSBkdWUgdG8gdGhlIHJlc3RhcnQgb2YgdGhlCisJICogam91cm5hbCBoYW5kbGUgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgZm9yemVuIGFuZCBhY3RpdmUKKwkgKiBoYW5kbGVzIGFyZSBub3Qgc3RvcHBlZC4KKwkgKi8KKwlpZiAoIWhhbmRsZSkKKwkJdmZzX2NoZWNrX2Zyb3plbihzYiwgU0JfRlJFRVpFX1RSQU5TKTsKKworCWlmICgham91cm5hbCkKKwkJcmV0dXJuIGV4dDRfZ2V0X25vam91cm5hbCgpOworCS8qCisJICogU3BlY2lhbCBjYXNlIGhlcmU6IGlmIHRoZSBqb3VybmFsIGhhcyBhYm9ydGVkIGJlaGluZCBvdXIKKwkgKiBiYWNrcyAoZWcuIEVJTyBpbiB0aGUgY29tbWl0IHRocmVhZCksIHRoZW4gd2Ugc3RpbGwgbmVlZCB0bworCSAqIHRha2UgdGhlIEZTIGl0c2VsZiByZWFkb25seSBjbGVhbmx5LgorCSAqLworCWlmIChpc19qb3VybmFsX2Fib3J0ZWQoam91cm5hbCkpIHsKKwkJZXh0NF9hYm9ydChzYiwgIkRldGVjdGVkIGFib3J0ZWQgam91cm5hbCIpOworCQlyZXR1cm4gRVJSX1BUUigtRVJPRlMpOwogCX0KLQlyZXR1cm4gZXh0NF9nZXRfbm9qb3VybmFsKCk7CisJcmV0dXJuIGpiZDJfam91cm5hbF9zdGFydChqb3VybmFsLCBuYmxvY2tzKTsKIH0KIAogLyoKQEAgLTYxNyw3ICs2MzQsNyBAQAogCSAqIGZpbGVzeXN0ZW0gd2lsbCBoYXZlIGFscmVhZHkgYmVlbiBtYXJrZWQgcmVhZC9vbmx5IGFuZCB0aGUKIAkgKiBqb3VybmFsIGhhcyBiZWVuIGFib3J0ZWQuICBXZSByZXR1cm4gMSBhcyBhIGhpbnQgdG8gY2FsbGVycwogCSAqIHdobyBtaWdodCB3aGF0IHRvIHVzZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20KLQkgKiBleHQ0X2dycF9sb2NrZWRfZXJyb3IoKSB0byBkaXN0aW5ndWlzaCBiZXdlZW4gdGhlCisJICogZXh0NF9ncnBfbG9ja2VkX2Vycm9yKCkgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUKIAkgKiBFUlJPUlNfQ09OVCBhbmQgRVJST1JTX1JPIGNhc2UsIGFuZCBwZXJoYXBzIHJldHVybiBtb3JlCiAJICogYWdncmVzc2l2ZWx5IGZyb20gdGhlIGV4dDQgZnVuY3Rpb24gaW4gcXVlc3Rpb24sIHdpdGggYQogCSAqIG1vcmUgYXBwcm9wcmlhdGUgZXJyb3IgY29kZS4KQEAgLTI5NzUsNiArMjk5MiwxMiBAQAogCW11dGV4X3VubG9jaygmZXh0NF9saV9pbmZvLT5saV9saXN0X210eCk7CiAKIAlzYmktPnNfbGlfcmVxdWVzdCA9IGVscjsKKwkvKgorCSAqIHNldCBlbHIgdG8gTlVMTCBoZXJlIHNpbmNlIGl0IGhhcyBiZWVuIGluc2VydGVkIHRvCisJICogdGhlIHJlcXVlc3RfbGlzdCBhbmQgdGhlIHJlbW92YWwgYW5kIGZyZWUgb2YgaXQgaXMKKwkgKiBoYW5kbGVkIGJ5IGV4dDRfY2xlYXJfcmVxdWVzdF9saXN0IGZyb20gbm93IG9uLgorCSAqLworCWVsciA9IE5VTEw7CiAKIAlpZiAoIShleHQ0X2xpX2luZm8tPmxpX3N0YXRlICYgRVhUNF9MQVpZSU5JVF9SVU5OSU5HKSkgewogCQlyZXQgPSBleHQ0X3J1bl9sYXp5aW5pdF90aHJlYWQoKTsKQEAgLTMzODUsNiArMzQwOCwxMCBAQAogCWdldF9yYW5kb21fYnl0ZXMoJnNiaS0+c19uZXh0X2dlbmVyYXRpb24sIHNpemVvZih1MzIpKTsKIAlzcGluX2xvY2tfaW5pdCgmc2JpLT5zX25leHRfZ2VuX2xvY2spOwogCisJaW5pdF90aW1lcigmc2JpLT5zX2Vycl9yZXBvcnQpOworCXNiaS0+c19lcnJfcmVwb3J0LmZ1bmN0aW9uID0gcHJpbnRfZGFpbHlfZXJyb3JfaW5mbzsKKwlzYmktPnNfZXJyX3JlcG9ydC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHNiOworCiAJZXJyID0gcGVyY3B1X2NvdW50ZXJfaW5pdCgmc2JpLT5zX2ZyZWVibG9ja3NfY291bnRlciwKIAkJCWV4dDRfY291bnRfZnJlZV9ibG9ja3Moc2IpKTsKIAlpZiAoIWVycikgewpAQCAtMzY0Niw5ICszNjczLDYgQEAKIAkJICJPcHRzOiAlcyVzJXMiLCBkZXNjciwgc2JpLT5zX2VzLT5zX21vdW50X29wdHMsCiAJCSAqc2JpLT5zX2VzLT5zX21vdW50X29wdHMgPyAiOyAiIDogIiIsIG9yaWdfZGF0YSk7CiAKLQlpbml0X3RpbWVyKCZzYmktPnNfZXJyX3JlcG9ydCk7Ci0Jc2JpLT5zX2Vycl9yZXBvcnQuZnVuY3Rpb24gPSBwcmludF9kYWlseV9lcnJvcl9pbmZvOwotCXNiaS0+c19lcnJfcmVwb3J0LmRhdGEgPSAodW5zaWduZWQgbG9uZykgc2I7CiAJaWYgKGVzLT5zX2Vycm9yX2NvdW50KQogCQltb2RfdGltZXIoJnNiaS0+c19lcnJfcmVwb3J0LCBqaWZmaWVzICsgMzAwKkhaKTsgLyogNSBtaW51dGVzICovCiAKQEAgLTM2NzIsNiArMzY5Niw3IEBACiAJCXNiaS0+c19qb3VybmFsID0gTlVMTDsKIAl9CiBmYWlsZWRfbW91bnQzOgorCWRlbF90aW1lcigmc2JpLT5zX2Vycl9yZXBvcnQpOwogCWlmIChzYmktPnNfZmxleF9ncm91cHMpIHsKIAkJaWYgKGlzX3ZtYWxsb2NfYWRkcihzYmktPnNfZmxleF9ncm91cHMpKQogCQkJdmZyZWUoc2JpLT5zX2ZsZXhfZ3JvdXBzKTsKQEAgLTQxMzgsNiArNDE2MywxMSBAQAogLyoKICAqIExWTSBjYWxscyB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBhIChyZWFkLW9ubHkpIHNuYXBzaG90IGlzIGNyZWF0ZWQuICBUaGlzCiAgKiBnaXZlcyB1cyBhIGNoYW5jZSB0byBmbHVzaCB0aGUgam91cm5hbCBjb21wbGV0ZWx5IGFuZCBtYXJrIHRoZSBmcyBjbGVhbi4KKyAqCisgKiBOb3RlIHRoYXQgb25seSB0aGlzIGZ1bmN0aW9uIGNhbm5vdCBicmluZyBhIGZpbGVzeXN0ZW0gdG8gYmUgaW4gYSBjbGVhbgorICogc3RhdGUgaW5kZXBlbmRlbnRseSwgYmVjYXVzZSBleHQ0IHByZXZlbnRzIGEgbmV3IGhhbmRsZSBmcm9tIGJlaW5nIHN0YXJ0ZWQKKyAqIGJ5IEBzYi0+c19mcm96ZW4sIHdoaWNoIHN0YXlzIGluIGFuIHVwcGVyIGxheWVyLiAgSXQgdGh1cyBuZWVkcyBoZWxwIGZyb20KKyAqIHRoZSB1cHBlciBsYXllci4KICAqLwogc3RhdGljIGludCBleHQ0X2ZyZWV6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewpAQCAtNDYxNCwxNyArNDY0NCwzMCBAQAogCiBzdGF0aWMgaW50IGV4dDRfcXVvdGFfb2ZmKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQogeworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBzYl9kcW9wdChzYiktPmZpbGVzW3R5cGVdOworCWhhbmRsZV90ICpoYW5kbGU7CisKIAkvKiBGb3JjZSBhbGwgZGVsYXllZCBhbGxvY2F0aW9uIGJsb2NrcyB0byBiZSBhbGxvY2F0ZWQuCiAJICogQ2FsbGVyIGFscmVhZHkgaG9sZHMgc191bW91bnQgc2VtICovCiAJaWYgKHRlc3Rfb3B0KHNiLCBERUxBTExPQykpCiAJCXN5bmNfZmlsZXN5c3RlbShzYik7CiAKKwkvKiBVcGRhdGUgbW9kaWZpY2F0aW9uIHRpbWVzIG9mIHF1b3RhIGZpbGVzIHdoZW4gdXNlcnNwYWNlIGNhbgorCSAqIHN0YXJ0IGxvb2tpbmcgYXQgdGhlbSAqLworCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgMSk7CisJaWYgKElTX0VSUihoYW5kbGUpKQorCQlnb3RvIG91dDsKKwlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCWV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKKwlleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOworCitvdXQ6CiAJcmV0dXJuIGRxdW90X3F1b3RhX29mZihzYiwgdHlwZSk7CiB9CiAKIC8qIFJlYWQgZGF0YSBmcm9tIHF1b3RhZmlsZSAtIGF2b2lkIHBhZ2VjYWNoZSBhbmQgc3VjaCBiZWNhdXNlIHdlIGNhbm5vdCBhZmZvcmQKICAqIGFjcXVpcmluZyB0aGUgbG9ja3MuLi4gQXMgcXVvdGEgZmlsZXMgYXJlIG5ldmVyIHRydW5jYXRlZCBhbmQgcXVvdGEgY29kZQotICogaXRzZWxmIHNlcmlhbGl6ZXMgdGhlIG9wZXJhdGlvbnMgKGFuZCBub29uZSBlbHNlIHNob3VsZCB0b3VjaCB0aGUgZmlsZXMpCisgKiBpdHNlbGYgc2VyaWFsaXplcyB0aGUgb3BlcmF0aW9ucyAoYW5kIG5vIG9uZSBlbHNlIHNob3VsZCB0b3VjaCB0aGUgZmlsZXMpCiAgKiB3ZSBkb24ndCBoYXZlIHRvIGJlIGFmcmFpZCBvZiByYWNlcyAqLwogc3RhdGljIHNzaXplX3QgZXh0NF9xdW90YV9yZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBjaGFyICpkYXRhLAogCQkJICAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCBvZmYpCkBAIC00NzE0LDkgKzQ3NTcsOCBAQAogCWlmIChpbm9kZS0+aV9zaXplIDwgb2ZmICsgbGVuKSB7CiAJCWlfc2l6ZV93cml0ZShpbm9kZSwgb2ZmICsgbGVuKTsKIAkJRVhUNF9JKGlub2RlKS0+aV9kaXNrc2l6ZSA9IGlub2RlLT5pX3NpemU7CisJCWV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKIAl9Ci0JaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKLQlleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIGxlbjsKIH0KZGlmZiAtLWdpdCBhL2ZzL2ZoYW5kbGUuYyBiL2ZzL2ZoYW5kbGUuYwppbmRleCBiZjkzYWQyLi42YjA4ODY0IDEwMDY0NAotLS0gYS9mcy9maGFuZGxlLmMKKysrIGIvZnMvZmhhbmRsZS5jCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydGZzLmg+CiAjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIApkaWZmIC0tZ2l0IGEvZnMvZmlsZS5jIGIvZnMvZmlsZS5jCmluZGV4IDBiZTM0NDcuLjRjNjk5MmQgMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGUuYworKysgYi9mcy9maWxlLmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTM5LDE0ICs0MCwxNyBAQAogICovCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGZkdGFibGVfZGVmZXIsIGZkdGFibGVfZGVmZXJfbGlzdCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqYWxsb2NfZmRtZW0odW5zaWduZWQgaW50IHNpemUpCitzdGF0aWMgdm9pZCAqYWxsb2NfZmRtZW0odW5zaWduZWQgaW50IHNpemUpCiB7Ci0Jdm9pZCAqZGF0YTsKLQotCWRhdGEgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUx8X19HRlBfTk9XQVJOKTsKLQlpZiAoZGF0YSAhPSBOVUxMKQotCQlyZXR1cm4gZGF0YTsKLQorCS8qCisJICogVmVyeSBsYXJnZSBhbGxvY2F0aW9ucyBjYW4gc3RyZXNzIHBhZ2UgcmVjbGFpbSwgc28gZmFsbCBiYWNrIHRvCisJICogdm1hbGxvYygpIGlmIHRoZSBhbGxvY2F0aW9uIHNpemUgd2lsbCBiZSBjb25zaWRlcmVkICJsYXJnZSIgYnkgdGhlIFZNLgorCSAqLworCWlmIChzaXplIDw9IChQQUdFX1NJWkUgPDwgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpKSB7CisJCXZvaWQgKmRhdGEgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUx8X19HRlBfTk9XQVJOKTsKKwkJaWYgKGRhdGEgIT0gTlVMTCkKKwkJCXJldHVybiBkYXRhOworCX0KIAlyZXR1cm4gdm1hbGxvYyhzaXplKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZmlsZXN5c3RlbXMuYyBiL2ZzL2ZpbGVzeXN0ZW1zLmMKaW5kZXggNzUxZDZiMi4uMDg0NWY4NCAxMDA2NDQKLS0tIGEvZnMvZmlsZXN5c3RlbXMuYworKysgYi9mcy9maWxlc3lzdGVtcy5jCkBAIC0xMTAsMTQgKzExMCwxMyBAQAogCQkJKnRtcCA9IGZzLT5uZXh0OwogCQkJZnMtPm5leHQgPSBOVUxMOwogCQkJd3JpdGVfdW5sb2NrKCZmaWxlX3N5c3RlbXNfbG9jayk7CisJCQlzeW5jaHJvbml6ZV9yY3UoKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCXRtcCA9ICYoKnRtcCktPm5leHQ7CiAJfQogCXdyaXRlX3VubG9jaygmZmlsZV9zeXN0ZW1zX2xvY2spOwogCi0Jc3luY2hyb25pemVfcmN1KCk7Ci0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZnJlZXZ4ZnMvdnhmc19mc2hlYWQuYyBiL2ZzL2ZyZWV2eGZzL3Z4ZnNfZnNoZWFkLmMKaW5kZXggNzg5NDhiNC4uYzlhNmE5NCAxMDA2NDQKLS0tIGEvZnMvZnJlZXZ4ZnMvdnhmc19mc2hlYWQuYworKysgYi9mcy9mcmVldnhmcy92eGZzX2ZzaGVhZC5jCkBAIC0xNjQsNyArMTY0LDcgQEAKIAkJZ290byBvdXRfZnJlZV9wZnA7CiAJfQogCWlmICghVlhGU19JU0lMVChWWEZTX0lOTyhpbmZwLT52c2lfc3RpbGlzdCkpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidnhmczogc3RydWN0dWFsIGxpc3QgaW5vZGUgaXMgb2Ygd3JvbmcgdHlwZSAoJXgpXG4iLAorCQlwcmludGsoS0VSTl9FUlIgInZ4ZnM6IHN0cnVjdHVyYWwgbGlzdCBpbm9kZSBpcyBvZiB3cm9uZyB0eXBlICgleClcbiIsCiAJCQkJVlhGU19JTk8oaW5mcC0+dnNpX3N0aWxpc3QpLT52aWlfbW9kZSAmIFZYRlNfVFlQRV9NQVNLKTsgCiAJCWdvdG8gb3V0X2lwdXRfc3RpbGlzdDsKIAl9CmRpZmYgLS1naXQgYS9mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jIGIvZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYwppbmRleCA2YzUxMzFkLi4zMzYwZjFlIDEwMDY0NAotLS0gYS9mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jCisrKyBiL2ZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMKQEAgLTE2Miw3ICsxNjIsNyBAQAogLyoqCiAgKiB2eGZzX2lub2RlX2J5X25hbWUgLSBmaW5kIGlub2RlIG51bWJlciBmb3IgZGVudHJ5CiAgKiBAZGlwOglkaXJlY3RvcnkgdG8gc2VhcmNoIGluCi0gKiBAZHA6CQlkZW50cnkgd2Ugc2VhY2ggZm9yCisgKiBAZHA6CQlkZW50cnkgd2Ugc2VhcmNoIGZvcgogICoKICAqIERlc2NyaXB0aW9uOgogICogICB2eGZzX2lub2RlX2J5X25hbWUgZmluZHMgb3V0IHRoZSBpbm9kZSBudW1iZXIgb2YKZGlmZiAtLWdpdCBhL2ZzL2ZyZWV2eGZzL3Z4ZnNfb2x0LmggYi9mcy9mcmVldnhmcy92eGZzX29sdC5oCmluZGV4IGQ4MzI0MjkuLmI3YjNhZjUgMTAwNjQ0Ci0tLSBhL2ZzL2ZyZWV2eGZzL3Z4ZnNfb2x0LmgKKysrIGIvZnMvZnJlZXZ4ZnMvdnhmc19vbHQuaApAQCAtNjAsNyArNjAsNyBAQAogICoKICAqIFRoZSBPYmplY3QgTG9jYXRpb24gVGFibGUgaGVhZGVyIGlzIHBsYWNlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2gKICAqIE9MVCBleHRlbnQuICBJdCBpcyB1c2VkIHRvIGZpbmcgY2VydGFpbiBmaWxlc3lzdGVtLXdpZGUgbWV0YWRhdGEsIGUuZy4KLSAqIHRoZSBpbml0YWwgaW5vZGUgbGlzdCwgdGhlIGZpbGVzZXQgaGVhZGVyIG9yIHRoZSBkZXZpY2UgY29uZmlndXJhdGlvbi4KKyAqIHRoZSBpbml0aWFsIGlub2RlIGxpc3QsIHRoZSBmaWxlc2V0IGhlYWRlciBvciB0aGUgZGV2aWNlIGNvbmZpZ3VyYXRpb24uCiAgKi8KIHN0cnVjdCB2eGZzX29sdCB7CiAJdV9pbnQzMl90CW9sdF9tYWdpYzsJLyogbWFnaWMgbnVtYmVyCQkJKi8KZGlmZiAtLWdpdCBhL2ZzL2ZzLXdyaXRlYmFjay5jIGIvZnMvZnMtd3JpdGViYWNrLmMKaW5kZXggYjVlZDU0MS4uMzQ1OTFlZTggMTAwNjQ0Ci0tLSBhL2ZzL2ZzLXdyaXRlYmFjay5jCisrKyBiL2ZzL2ZzLXdyaXRlYmFjay5jCkBAIC0xNDQsNyArMTQ0LDcgQEAKICAqCiAgKiBEZXNjcmlwdGlvbjoKICAqICAgVGhpcyBkb2VzIFdCX1NZTkNfTk9ORSBvcHBvcnR1bmlzdGljIHdyaXRlYmFjay4gVGhlIElPIGlzIG9ubHkKLSAqICAgc3RhcnRlZCB3aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucywgd2UgbWFrZSBubyBndWFyZW50ZWVzIG9uCisgKiAgIHN0YXJ0ZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMsIHdlIG1ha2Ugbm8gZ3VhcmFudGVlcyBvbgogICogICBjb21wbGV0aW9uLiBDYWxsZXIgbmVlZCBub3QgaG9sZCBzYiBzX3Vtb3VudCBzZW1hcGhvcmUuCiAgKgogICovCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuYwppbmRleCBjNmJhNDliLi5iMzJlYjI5IDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rpci5jCisrKyBiL2ZzL2Z1c2UvZGlyLmMKQEAgLTE3NCw3ICsxNzQsNyBAQAogCQlpZiAoIWlub2RlKQogCQkJcmV0dXJuIDA7CiAKLQkJaWYgKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpCisJCWlmIChuZCAmJiAobmQtPmZsYWdzICYgTE9PS1VQX1JDVSkpCiAJCQlyZXR1cm4gLUVDSElMRDsKIAogCQlmYyA9IGdldF9mdXNlX2Nvbm4oaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9maWxlLmMgYi9mcy9mdXNlL2ZpbGUuYwppbmRleCA2ZWEwMDczLi44MmE2NjQ2IDEwMDY0NAotLS0gYS9mcy9mdXNlL2ZpbGUuYworKysgYi9mcy9mdXNlL2ZpbGUuYwpAQCAtNTIzLDcgKzUyMyw3IEBACiAJCWdvdG8gb3V0OwogCiAJLyoKLQkgKiBQYWdlIHdyaXRlYmFjayBjYW4gZXh0ZW5kIGJleW9uZCB0aGUgbGlmdGltZSBvZiB0aGUKKwkgKiBQYWdlIHdyaXRlYmFjayBjYW4gZXh0ZW5kIGJleW9uZCB0aGUgbGlmZXRpbWUgb2YgdGhlCiAJICogcGFnZS1jYWNoZSBwYWdlLCBzbyBtYWtlIHN1cmUgd2UgcmVhZCBhIHByb3Blcmx5IHN5bmNlZAogCSAqIHBhZ2UuCiAJICovCmRpZmYgLS1naXQgYS9mcy9nZnMyL2FvcHMuYyBiL2ZzL2dmczIvYW9wcy5jCmluZGV4IGM3MTk5NWIuLjBmNWM0ZjkgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvYW9wcy5jCisrKyBiL2ZzL2dmczIvYW9wcy5jCkBAIC04ODQsOCArODg0LDggQEAKIAl9CiAKIAlicmVsc2UoZGliaCk7Ci0JZ2ZzMl90cmFuc19lbmQoc2RwKTsKIGZhaWxlZDoKKwlnZnMyX3RyYW5zX2VuZChzZHApOwogCWlmIChhbCkgewogCQlnZnMyX2lucGxhY2VfcmVsZWFzZShpcCk7CiAJCWdmczJfcXVvdGFfdW5sb2NrKGlwKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvYm1hcC5jIGIvZnMvZ2ZzMi9ibWFwLmMKaW5kZXggZWYzZGM0Yi4uNzRhZGQyZCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9ibWFwLmMKKysrIGIvZnMvZ2ZzMi9ibWFwLmMKQEAgLTExMzYsNyArMTEzNiw3IEBACiAgKiBlYXJsaWVyIHZlcnNpb25zIG9mIEdGUzIgaGF2ZSBhIGJ1ZyBpbiB0aGUgc3R1ZmZlZCBmaWxlIHJlYWRpbmcKICAqIGNvZGUgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBidWZmZXIgb3ZlcnJ1biBpZiB0aGUgc2l6ZSBpcyBsYXJnZXIKICAqIHRoYW4gdGhlIG1heCBzdHVmZmVkIGZpbGUgc2l6ZS4gSW4gb3JkZXIgdG8gcHJldmVudCB0aGlzIGZyb20KLSAqIG9jY3VyaW5nLCBzdWNoIGZpbGVzIGFyZSB1bnN0dWZmZWQsIGJ1dCBpbiBvdGhlciBjYXNlcyB3ZSBjYW4KKyAqIG9jY3VycmluZywgc3VjaCBmaWxlcyBhcmUgdW5zdHVmZmVkLCBidXQgaW4gb3RoZXIgY2FzZXMgd2UgY2FuCiAgKiBqdXN0IHVwZGF0ZSB0aGUgaW5vZGUgc2l6ZSBkaXJlY3RseS4KICAqCiAgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG9yIC12ZSBvbiBlcnJvcgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9kaXIuYyBiL2ZzL2dmczIvZGlyLmMKaW5kZXggNWMzNTZkMC4uZjc4OWM1NyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9kaXIuYworKysgYi9mcy9nZnMyL2Rpci5jCkBAIC0xNTA2LDcgKzE1MDYsNyBAQAogCQlpbm9kZSA9IGdmczJfaW5vZGVfbG9va3VwKGRpci0+aV9zYiwgCiAJCQkJYmUxNl90b19jcHUoZGVudC0+ZGVfdHlwZSksCiAJCQkJYmU2NF90b19jcHUoZGVudC0+ZGVfaW51bS5ub19hZGRyKSwKLQkJCQliZTY0X3RvX2NwdShkZW50LT5kZV9pbnVtLm5vX2Zvcm1hbF9pbm8pKTsKKwkJCQliZTY0X3RvX2NwdShkZW50LT5kZV9pbnVtLm5vX2Zvcm1hbF9pbm8pLCAwKTsKIAkJYnJlbHNlKGJoKTsKIAkJcmV0dXJuIGlub2RlOwogCX0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvZmlsZS5jIGIvZnMvZ2ZzMi9maWxlLmMKaW5kZXggYjI2ODJlMDcuLmU0ODMxMDggMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZmlsZS5jCisrKyBiL2ZzL2dmczIvZmlsZS5jCkBAIC02MTcsMTggKzYxNyw1MSBAQAogCXJldHVybiBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlKGlvY2IsIGlvdiwgbnJfc2VncywgcG9zKTsKIH0KIAotc3RhdGljIHZvaWQgZW1wdHlfd3JpdGVfZW5kKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBmcm9tLAotCQkJICAgdW5zaWduZWQgdG8pCitzdGF0aWMgaW50IGVtcHR5X3dyaXRlX2VuZChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgZnJvbSwKKwkJCSAgIHVuc2lnbmVkIHRvLCBpbnQgbW9kZSkKIHsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0kocGFnZS0+bWFwcGluZy0+aG9zdCk7CisJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CisJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCXVuc2lnbmVkIG9mZnNldCwgYmxrc2l6ZSA9IDEgPDwgaW5vZGUtPmlfYmxrYml0czsKKwlwZ29mZl90IGVuZF9pbmRleCA9IGlfc2l6ZV9yZWFkKGlub2RlKSA+PiBQQUdFX0NBQ0hFX1NISUZUOwogCiAJemVyb191c2VyKHBhZ2UsIGZyb20sIHRvLWZyb20pOwogCW1hcmtfcGFnZV9hY2Nlc3NlZChwYWdlKTsKIAotCWlmICghZ2ZzMl9pc193cml0ZWJhY2soaXApKQotCQlnZnMyX3BhZ2VfYWRkX2RhdGFidWZzKGlwLCBwYWdlLCBmcm9tLCB0byk7CisJaWYgKHBhZ2UtPmluZGV4IDwgZW5kX2luZGV4IHx8ICEobW9kZSAmIEZBTExPQ19GTF9LRUVQX1NJWkUpKSB7CisJCWlmICghZ2ZzMl9pc193cml0ZWJhY2soaXApKQorCQkJZ2ZzMl9wYWdlX2FkZF9kYXRhYnVmcyhpcCwgcGFnZSwgZnJvbSwgdG8pOwogCi0JYmxvY2tfY29tbWl0X3dyaXRlKHBhZ2UsIGZyb20sIHRvKTsKKwkJYmxvY2tfY29tbWl0X3dyaXRlKHBhZ2UsIGZyb20sIHRvKTsKKwkJcmV0dXJuIDA7CisJfQorCisJb2Zmc2V0ID0gMDsKKwliaCA9IHBhZ2VfYnVmZmVycyhwYWdlKTsKKwl3aGlsZSAob2Zmc2V0IDwgdG8pIHsKKwkJaWYgKG9mZnNldCA+PSBmcm9tKSB7CisJCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKKwkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKKwkJCWNsZWFyX2J1ZmZlcl9uZXcoYmgpOworCQkJd3JpdGVfZGlydHlfYnVmZmVyKGJoLCBXUklURSk7CisJCX0KKwkJb2Zmc2V0ICs9IGJsa3NpemU7CisJCWJoID0gYmgtPmJfdGhpc19wYWdlOworCX0KKworCW9mZnNldCA9IDA7CisJYmggPSBwYWdlX2J1ZmZlcnMocGFnZSk7CisJd2hpbGUgKG9mZnNldCA8IHRvKSB7CisJCWlmIChvZmZzZXQgPj0gZnJvbSkgeworCQkJd2FpdF9vbl9idWZmZXIoYmgpOworCQkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKQorCQkJCXJldHVybiAtRUlPOworCQl9CisJCW9mZnNldCArPSBibGtzaXplOworCQliaCA9IGJoLT5iX3RoaXNfcGFnZTsKKwl9CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbmVlZHNfZW1wdHlfd3JpdGUoc2VjdG9yX3QgYmxvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpCkBAIC02NDMsNyArNjc2LDggQEAKIAlyZXR1cm4gIWJ1ZmZlcl9tYXBwZWQoJmJoX21hcCk7CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVfZW1wdHlfYmxvY2tzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykKK3N0YXRpYyBpbnQgd3JpdGVfZW1wdHlfYmxvY2tzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywKKwkJCSAgICAgIGludCBtb2RlKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OwogCXVuc2lnbmVkIHN0YXJ0LCBlbmQsIG5leHQsIGJsa3NpemU7CkBAIC02NjgsNyArNzAyLDkgQEAKIAkJCQkJCQkgIGdmczJfYmxvY2tfbWFwKTsKIAkJCQlpZiAodW5saWtlbHkocmV0KSkKIAkJCQkJcmV0dXJuIHJldDsKLQkJCQllbXB0eV93cml0ZV9lbmQocGFnZSwgc3RhcnQsIGVuZCk7CisJCQkJcmV0ID0gZW1wdHlfd3JpdGVfZW5kKHBhZ2UsIHN0YXJ0LCBlbmQsIG1vZGUpOworCQkJCWlmICh1bmxpa2VseShyZXQpKQorCQkJCQlyZXR1cm4gcmV0OwogCQkJCWVuZCA9IDA7CiAJCQl9CiAJCQlzdGFydCA9IG5leHQ7CkBAIC02ODIsNyArNzE4LDkgQEAKIAkJcmV0ID0gX19ibG9ja193cml0ZV9iZWdpbihwYWdlLCBzdGFydCwgZW5kIC0gc3RhcnQsIGdmczJfYmxvY2tfbWFwKTsKIAkJaWYgKHVubGlrZWx5KHJldCkpCiAJCQlyZXR1cm4gcmV0OwotCQllbXB0eV93cml0ZV9lbmQocGFnZSwgc3RhcnQsIGVuZCk7CisJCXJldCA9IGVtcHR5X3dyaXRlX2VuZChwYWdlLCBzdGFydCwgZW5kLCBtb2RlKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpCisJCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldHVybiAwOwpAQCAtNzMxLDcgKzc2OSw3IEBACiAKIAkJaWYgKGN1cnIgPT0gZW5kKQogCQkJdG8gPSBlbmRfb2Zmc2V0OwotCQllcnJvciA9IHdyaXRlX2VtcHR5X2Jsb2NrcyhwYWdlLCBmcm9tLCB0byk7CisJCWVycm9yID0gd3JpdGVfZW1wdHlfYmxvY2tzKHBhZ2UsIGZyb20sIHRvLCBtb2RlKTsKIAkJaWYgKCFlcnJvciAmJiBvZmZzZXQgKyB0byA+IGlub2RlLT5pX3NpemUgJiYKIAkJICAgICEobW9kZSAmIEZBTExPQ19GTF9LRUVQX1NJWkUpKSB7CiAJCQlpX3NpemVfd3JpdGUoaW5vZGUsIG9mZnNldCArIHRvKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZ2xvY2suYyBiL2ZzL2dmczIvZ2xvY2suYwppbmRleCBlMjQzMTMxLi43YTRmYjYzIDEwMDY0NAotLS0gYS9mcy9nZnMyL2dsb2NrLmMKKysrIGIvZnMvZ2ZzMi9nbG9jay5jCkBAIC05MywxNCArOTMsMTIgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHNwaW5fbG9ja19idWNrZXQodW5zaWduZWQgaW50IGhhc2gpCiB7Ci0Jc3RydWN0IGhsaXN0X2JsX2hlYWQgKmJsID0gJmdsX2hhc2hfdGFibGVbaGFzaF07Ci0JYml0X3NwaW5fbG9jaygwLCAodW5zaWduZWQgbG9uZyAqKWJsKTsKKwlobGlzdF9ibF9sb2NrKCZnbF9oYXNoX3RhYmxlW2hhc2hdKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNwaW5fdW5sb2NrX2J1Y2tldCh1bnNpZ25lZCBpbnQgaGFzaCkKIHsKLQlzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqYmwgPSAmZ2xfaGFzaF90YWJsZVtoYXNoXTsKLQlfX2JpdF9zcGluX3VubG9jaygwLCAodW5zaWduZWQgbG9uZyAqKWJsKTsKKwlobGlzdF9ibF91bmxvY2soJmdsX2hhc2hfdGFibGVbaGFzaF0pOwogfQogCiBzdGF0aWMgdm9pZCBnZnMyX2dsb2NrX2RlYWxsb2Moc3RydWN0IHJjdV9oZWFkICpyY3UpCkBAIC0xMTIzLDcgKzExMjEsNyBAQAogICogQG51bWJlcjogdGhlIGxvY2sgbnVtYmVyCiAgKiBAZ2xvcHM6IHRoZSBnbG9jayBvcGVyYXRpb25zIGZvciB0aGUgdHlwZSBvZiBnbG9jawogICogQHN0YXRlOiB0aGUgc3RhdGUgdG8gYWNxdWlyZSB0aGUgZ2xvY2sgaW4KLSAqIEBmbGFnczogbW9kaWZpZXIgZmxhZ3MgZm9yIHRoZSBhcXVpc2l0aW9uCisgKiBAZmxhZ3M6IG1vZGlmaWVyIGZsYWdzIGZvciB0aGUgYWNxdWlzaXRpb24KICAqIEBnaDogdGhlIHN0cnVjdCBnZnMyX2hvbGRlcgogICoKICAqIFJldHVybnM6IGVycm5vCmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb3BzLmMgYi9mcy9nZnMyL2dsb3BzLmMKaW5kZXggMzc1NGUzYy4uMjVlZWIyYiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9wcy5jCisrKyBiL2ZzL2dmczIvZ2xvcHMuYwpAQCAtMzg1LDYgKzM4NSwxMCBAQAogc3RhdGljIHZvaWQgaW9wZW5fZ29fY2FsbGJhY2soc3RydWN0IGdmczJfZ2xvY2sgKmdsKQogewogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqKWdsLT5nbF9vYmplY3Q7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBnbC0+Z2xfc2JkOworCisJaWYgKHNkcC0+c2RfdmZzLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQorCQlyZXR1cm47CiAKIAlpZiAoZ2wtPmdsX2RlbW90ZV9zdGF0ZSA9PSBMTV9TVF9VTkxPQ0tFRCAmJgogCSAgICBnbC0+Z2xfc3RhdGUgPT0gTE1fU1RfU0hBUkVEICYmIGlwKSB7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2lub2RlLmMgYi9mcy9nZnMyL2lub2RlLmMKaW5kZXggOTdkNTRhMi4uOTEzNGRjYiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jCisrKyBiL2ZzL2dmczIvaW5vZGUuYwpAQCAtNDAsMzcgKzQwLDYxIEBACiAJdTY0IGlyX2xlbmd0aDsKIH07CiAKK3N0cnVjdCBnZnMyX3NraXBfZGF0YSB7CisJdTY0IG5vX2FkZHI7CisJaW50IHNraXBwZWQ7CisJaW50IG5vbl9ibG9jazsKK307CisKIHN0YXRpYyBpbnQgaWdldF90ZXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKm9wYXF1ZSkKIHsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOwotCXU2NCAqbm9fYWRkciA9IG9wYXF1ZTsKKwlzdHJ1Y3QgZ2ZzMl9za2lwX2RhdGEgKmRhdGEgPSBvcGFxdWU7CiAKLQlpZiAoaXAtPmlfbm9fYWRkciA9PSAqbm9fYWRkcikKKwlpZiAoaXAtPmlfbm9fYWRkciA9PSBkYXRhLT5ub19hZGRyKSB7CisJCWlmIChkYXRhLT5ub25fYmxvY2sgJiYKKwkJICAgIGlub2RlLT5pX3N0YXRlICYgKElfRlJFRUlOR3xJX0NMRUFSfElfV0lMTF9GUkVFKSkgeworCQkJZGF0YS0+c2tpcHBlZCA9IDE7CisJCQlyZXR1cm4gMDsKKwkJfQogCQlyZXR1cm4gMTsKLQorCX0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBpZ2V0X3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpvcGFxdWUpCiB7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKLQl1NjQgKm5vX2FkZHIgPSBvcGFxdWU7CisJc3RydWN0IGdmczJfc2tpcF9kYXRhICpkYXRhID0gb3BhcXVlOwogCi0JaW5vZGUtPmlfaW5vID0gKHVuc2lnbmVkIGxvbmcpKm5vX2FkZHI7Ci0JaXAtPmlfbm9fYWRkciA9ICpub19hZGRyOworCWlmIChkYXRhLT5za2lwcGVkKQorCQlyZXR1cm4gLUVOT0VOVDsKKwlpbm9kZS0+aV9pbm8gPSAodW5zaWduZWQgbG9uZykoZGF0YS0+bm9fYWRkcik7CisJaXAtPmlfbm9fYWRkciA9IGRhdGEtPm5vX2FkZHI7CiAJcmV0dXJuIDA7CiB9CiAKIHN0cnVjdCBpbm9kZSAqZ2ZzMl9pbG9va3VwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBub19hZGRyKQogewogCXVuc2lnbmVkIGxvbmcgaGFzaCA9ICh1bnNpZ25lZCBsb25nKW5vX2FkZHI7Ci0JcmV0dXJuIGlsb29rdXA1KHNiLCBoYXNoLCBpZ2V0X3Rlc3QsICZub19hZGRyKTsKKwlzdHJ1Y3QgZ2ZzMl9za2lwX2RhdGEgZGF0YTsKKworCWRhdGEubm9fYWRkciA9IG5vX2FkZHI7CisJZGF0YS5za2lwcGVkID0gMDsKKwlkYXRhLm5vbl9ibG9jayA9IDA7CisJcmV0dXJuIGlsb29rdXA1KHNiLCBoYXNoLCBpZ2V0X3Rlc3QsICZkYXRhKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpbm9kZSAqZ2ZzMl9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBub19hZGRyKQorc3RhdGljIHN0cnVjdCBpbm9kZSAqZ2ZzMl9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBub19hZGRyLAorCQkJICAgICAgIGludCBub25fYmxvY2spCiB7CisJc3RydWN0IGdmczJfc2tpcF9kYXRhIGRhdGE7CiAJdW5zaWduZWQgbG9uZyBoYXNoID0gKHVuc2lnbmVkIGxvbmcpbm9fYWRkcjsKLQlyZXR1cm4gaWdldDVfbG9ja2VkKHNiLCBoYXNoLCBpZ2V0X3Rlc3QsIGlnZXRfc2V0LCAmbm9fYWRkcik7CisKKwlkYXRhLm5vX2FkZHIgPSBub19hZGRyOworCWRhdGEuc2tpcHBlZCA9IDA7CisJZGF0YS5ub25fYmxvY2sgPSBub25fYmxvY2s7CisJcmV0dXJuIGlnZXQ1X2xvY2tlZChzYiwgaGFzaCwgaWdldF90ZXN0LCBpZ2V0X3NldCwgJmRhdGEpOwogfQogCiAvKioKQEAgLTExMSwxOSArMTM1LDIwIEBACiAgKiBAc2I6IFRoZSBzdXBlciBibG9jawogICogQG5vX2FkZHI6IFRoZSBpbm9kZSBudW1iZXIKICAqIEB0eXBlOiBUaGUgdHlwZSBvZiB0aGUgaW5vZGUKKyAqIG5vbl9ibG9jazogQ2FuIHdlIGJsb2NrIG9uIGlub2RlcyB0aGF0IGFyZSBiZWluZyBmcmVlZD8KICAqCiAgKiBSZXR1cm5zOiBBIFZGUyBpbm9kZSwgb3IgYW4gZXJyb3IKICAqLwogCiBzdHJ1Y3QgaW5vZGUgKmdmczJfaW5vZGVfbG9va3VwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGludCB0eXBlLAotCQkJCXU2NCBub19hZGRyLCB1NjQgbm9fZm9ybWFsX2lubykKKwkJCQl1NjQgbm9fYWRkciwgdTY0IG5vX2Zvcm1hbF9pbm8sIGludCBub25fYmxvY2spCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXA7CiAJc3RydWN0IGdmczJfZ2xvY2sgKmlvX2dsID0gTlVMTDsKIAlpbnQgZXJyb3I7CiAKLQlpbm9kZSA9IGdmczJfaWdldChzYiwgbm9fYWRkcik7CisJaW5vZGUgPSBnZnMyX2lnZXQoc2IsIG5vX2FkZHIsIG5vbl9ibG9jayk7CiAJaXAgPSBHRlMyX0koaW5vZGUpOwogCiAJaWYgKCFpbm9kZSkKQEAgLTE4NSwxMSArMjEwLDEyIEBACiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHNkcC0+c2RfdmZzOwogCXN0cnVjdCBnZnMyX2hvbGRlciBpX2doOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7CiAJaW50IGVycm9yOwogCisJLyogTXVzdCBub3QgcmVhZCBpbiBibG9jayB1bnRpbCBibG9jayB0eXBlIGlzIHZlcmlmaWVkICovCiAJZXJyb3IgPSBnZnMyX2dsb2NrX25xX251bShzZHAsIG5vX2FkZHIsICZnZnMyX2lub2RlX2dsb3BzLAotCQkJCSAgTE1fU1RfU0hBUkVELCBMTV9GTEFHX0FOWSwgJmlfZ2gpOworCQkJCSAgTE1fU1RfRVhDTFVTSVZFLCBHTF9TS0lQLCAmaV9naCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiAKQEAgLTE5Nyw3ICsyMjMsNyBAQAogCWlmIChlcnJvcikKIAkJZ290byBmYWlsOwogCi0JaW5vZGUgPSBnZnMyX2lub2RlX2xvb2t1cChzYiwgRFRfVU5LTk9XTiwgbm9fYWRkciwgMCk7CisJaW5vZGUgPSBnZnMyX2lub2RlX2xvb2t1cChzYiwgRFRfVU5LTk9XTiwgbm9fYWRkciwgMCwgMSk7CiAJaWYgKElTX0VSUihpbm9kZSkpCiAJCWdvdG8gZmFpbDsKIApAQCAtODQzLDcgKzg2OSw3IEBACiAJCWdvdG8gZmFpbF9ndW5sb2NrMjsKIAogCWlub2RlID0gZ2ZzMl9pbm9kZV9sb29rdXAoZGlyLT5pX3NiLCBJRjJEVChtb2RlKSwgaW51bS5ub19hZGRyLAotCQkJCSAgaW51bS5ub19mb3JtYWxfaW5vKTsKKwkJCQkgIGludW0ubm9fZm9ybWFsX2lubywgMCk7CiAJaWYgKElTX0VSUihpbm9kZSkpCiAJCWdvdG8gZmFpbF9ndW5sb2NrMjsKIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5oIGIvZnMvZ2ZzMi9pbm9kZS5oCmluZGV4IDNlMDBhNjYuLjA5OWNhMzAgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvaW5vZGUuaAorKysgYi9mcy9nZnMyL2lub2RlLmgKQEAgLTk3LDcgKzk3LDggQEAKIH0KIAogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZ2ZzMl9pbm9kZV9sb29rdXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgdHlwZSwgCi0JCQkJICAgICAgIHU2NCBub19hZGRyLCB1NjQgbm9fZm9ybWFsX2lubyk7CisJCQkJICAgICAgIHU2NCBub19hZGRyLCB1NjQgbm9fZm9ybWFsX2lubywKKwkJCQkgICAgICAgaW50IG5vbl9ibG9jayk7CiBleHRlcm4gc3RydWN0IGlub2RlICpnZnMyX2xvb2t1cF9ieV9pbnVtKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1NjQgbm9fYWRkciwKIAkJCQkJIHU2NCAqbm9fZm9ybWFsX2lubywKIAkJCQkJIHVuc2lnbmVkIGludCBibGt0eXBlKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2ZzdHlwZS5jIGIvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKaW5kZXggNDJlZjI0My4uZDNjNjllYiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKKysrIGIvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKQEAgLTQzMCw3ICs0MzAsNyBAQAogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCi0JaW5vZGUgPSBnZnMyX2lub2RlX2xvb2t1cChzYiwgRFRfRElSLCBub19hZGRyLCAwKTsKKwlpbm9kZSA9IGdmczJfaW5vZGVfbG9va3VwKHNiLCBEVF9ESVIsIG5vX2FkZHIsIDAsIDApOwogCWlmIChJU19FUlIoaW5vZGUpKSB7CiAJCWZzX2VycihzZHAsICJjYW4ndCByZWFkIGluICVzIGlub2RlOiAlbGRcbiIsIG5hbWUsIFBUUl9FUlIoaW5vZGUpKTsKIAkJcmV0dXJuIFBUUl9FUlIoaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9yZ3JwLmMgYi9mcy9nZnMyL3JncnAuYwppbmRleCBjZjkzMGNkLi42ZmNhZTg0IDEwMDY0NAotLS0gYS9mcy9nZnMyL3JncnAuYworKysgYi9mcy9nZnMyL3JncnAuYwpAQCAtOTQ1LDcgKzk0NSw3IEBACiAJCS8qIHJnYmxrX3NlYXJjaCBjYW4gcmV0dXJuIGEgYmxvY2sgPCBnb2FsLCBzbyB3ZSBuZWVkIHRvCiAJCSAgIGtlZXAgaXQgbWFyY2hpbmcgZm9yd2FyZC4gKi8KIAkJbm9fYWRkciA9IGJsb2NrICsgcmdkLT5yZF9kYXRhMDsKLQkJZ29hbCsrOworCQlnb2FsID0gbWF4KGJsb2NrICsgMSwgZ29hbCArIDEpOwogCQlpZiAoKmxhc3RfdW5saW5rZWQgIT0gTk9fQkxPQ0sgJiYgbm9fYWRkciA8PSAqbGFzdF91bmxpbmtlZCkKIAkJCWNvbnRpbnVlOwogCQlpZiAobm9fYWRkciA9PSBza2lwKQpAQCAtOTcxLDcgKzk3MSw3IEBACiAJCQlmb3VuZCsrOwogCiAJCS8qIExpbWl0IHJlY2xhaW0gdG8gc2Vuc2libGUgbnVtYmVyIG9mIHRhc2tzICovCi0JCWlmIChmb3VuZCA+IDIqTlJfQ1BVUykKKwkJaWYgKGZvdW5kID4gTlJfQ1BVUykKIAkJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvc3VwZXIuYyBiL2ZzL2dmczIvc3VwZXIuYwppbmRleCBlYzczZWQ3Li5iOWYyOGU2IDEwMDY0NAotLS0gYS9mcy9nZnMyL3N1cGVyLmMKKysrIGIvZnMvZ2ZzMi9zdXBlci5jCkBAIC02NTcsNyArNjU3LDcgQEAKICAqIEBzZHA6IHRoZSBmaWxlIHN5c3RlbQogICoKICAqIFRoaXMgZnVuY3Rpb24gZmx1c2hlcyBkYXRhIGFuZCBtZXRhIGRhdGEgZm9yIGFsbCBtYWNoaW5lcyBieQotICogYXF1aXJpbmcgdGhlIHRyYW5zYWN0aW9uIGxvZyBleGNsdXNpdmVseS4gIEFsbCBqb3VybmFscyBhcmUKKyAqIGFjcXVpcmluZyB0aGUgdHJhbnNhY3Rpb24gbG9nIGV4Y2x1c2l2ZWx5LiAgQWxsIGpvdXJuYWxzIGFyZQogICogZW5zdXJlZCB0byBiZSBpbiBhIGNsZWFuIHN0YXRlIGFzIHdlbGwuCiAgKgogICogUmV0dXJuczogZXJybm8KQEAgLTEzMTgsMTUgKzEzMTgsMTcgQEAKIAogc3RhdGljIHZvaWQgZ2ZzMl9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gaW5vZGUtPmlfc2ItPnNfZnNfaW5mbzsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBzYi0+c19mc19pbmZvOwogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CiAJc3RydWN0IGdmczJfaG9sZGVyIGdoOwogCWludCBlcnJvcjsKIAotCWlmIChpbm9kZS0+aV9ubGluaykKKwlpZiAoaW5vZGUtPmlfbmxpbmsgfHwgKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkKIAkJZ290byBvdXQ7CiAKLQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChpcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCAmZ2gpOworCS8qIE11c3Qgbm90IHJlYWQgaW5vZGUgYmxvY2sgdW50aWwgYmxvY2sgdHlwZSBoYXMgYmVlbiB2ZXJpZmllZCAqLworCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIEdMX1NLSVAsICZnaCk7CiAJaWYgKHVubGlrZWx5KGVycm9yKSkgewogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmaXAtPmlfaW9wZW5fZ2gpOwogCQlnb3RvIG91dDsKQEAgLTEzMzYsNiArMTMzOCwxMiBAQAogCWlmIChlcnJvcikKIAkJZ290byBvdXRfdHJ1bmNhdGU7CiAKKwlpZiAodGVzdF9iaXQoR0lGX0lOVkFMSUQsICZpcC0+aV9mbGFncykpIHsKKwkJZXJyb3IgPSBnZnMyX2lub2RlX3JlZnJlc2goaXApOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dF90cnVuY2F0ZTsKKwl9CisKIAlpcC0+aV9pb3Blbl9naC5naF9mbGFncyB8PSBHTF9OT0NBQ0hFOwogCWdmczJfZ2xvY2tfZHFfd2FpdCgmaXAtPmlfaW9wZW5fZ2gpOwogCWdmczJfaG9sZGVyX3JlaW5pdChMTV9TVF9FWENMVVNJVkUsIExNX0ZMQUdfVFJZXzFDQiB8IEdMX05PQ0FDSEUsICZpcC0+aV9pb3Blbl9naCk7CmRpZmYgLS1naXQgYS9mcy9ocGZzL0tjb25maWcgYi9mcy9ocGZzL0tjb25maWcKaW5kZXggMGMzOWRjMy4uNTZiZDE1YyAxMDA2NDQKLS0tIGEvZnMvaHBmcy9LY29uZmlnCisrKyBiL2ZzL2hwZnMvS2NvbmZpZwpAQCAtMSw3ICsxLDYgQEAKIGNvbmZpZyBIUEZTX0ZTCiAJdHJpc3RhdGUgIk9TLzIgSFBGUyBmaWxlIHN5c3RlbSBzdXBwb3J0IgogCWRlcGVuZHMgb24gQkxPQ0sKLQlkZXBlbmRzIG9uIEJST0tFTiB8fCAhUFJFRU1QVAogCWhlbHAKIAkgIE9TLzIgaXMgSUJNJ3Mgb3BlcmF0aW5nIHN5c3RlbSBmb3IgUEMncywgdGhlIHNhbWUgYXMgV2FycCwgYW5kIEhQRlMKIAkgIGlzIHRoZSBmaWxlIHN5c3RlbSB1c2VkIGZvciBvcmdhbml6aW5nIGZpbGVzIG9uIE9TLzIgaGFyZCBkaXNrCmRpZmYgLS1naXQgYS9mcy9ocGZzL2FsbG9jLmMgYi9mcy9ocGZzL2FsbG9jLmMKaW5kZXggNTUwM2UyYy4uN2E1ZWIyYyAxMDA2NDQKLS0tIGEvZnMvaHBmcy9hbGxvYy5jCisrKyBiL2ZzL2hwZnMvYWxsb2MuYwpAQCAtOCw4ICs4LDYgQEAKIAogI2luY2x1ZGUgImhwZnNfZm4uaCIKIAotc3RhdGljIGludCBocGZzX2FsbG9jX2lmX3Bvc3NpYmxlX25vbG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHNlY25vIHNlYyk7Ci0KIC8qCiAgKiBDaGVjayBpZiBhIHNlY3RvciBpcyBhbGxvY2F0ZWQgaW4gYml0bWFwCiAgKiBUaGlzIGlzIHJlYWxseSBzbG93LiBUdXJuZWQgb24gb25seSBpZiBjaGs9PTIKQEAgLTE4LDkgKzE2LDkgQEAKIHN0YXRpYyBpbnQgY2hrX2lmX2FsbG9jYXRlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHNlY25vIHNlYywgY2hhciAqbXNnKQogewogCXN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkIHFiaDsKLQl1bnNpZ25lZCAqYm1wOworCXUzMiAqYm1wOwogCWlmICghKGJtcCA9IGhwZnNfbWFwX2JpdG1hcChzLCBzZWMgPj4gMTQsICZxYmgsICJjaGsiKSkpIGdvdG8gZmFpbDsKLQlpZiAoKGJtcFsoc2VjICYgMHgzZmZmKSA+PiA1XSA+PiAoc2VjICYgMHgxZikpICYgMSkgeworCWlmICgoY3B1X3RvX2xlMzIoYm1wWyhzZWMgJiAweDNmZmYpID4+IDVdKSA+PiAoc2VjICYgMHgxZikpICYgMSkgewogCQlocGZzX2Vycm9yKHMsICJzZWN0b3IgJyVzJyAtICUwOHggbm90IGFsbG9jYXRlZCBpbiBiaXRtYXAiLCBtc2csIHNlYyk7CiAJCWdvdG8gZmFpbDE7CiAJfQpAQCAtMjgsNyArMjYsNyBAQAogCWlmIChzZWMgPj0gaHBmc19zYihzKS0+c2JfZGlyYmFuZF9zdGFydCAmJiBzZWMgPCBocGZzX3NiKHMpLT5zYl9kaXJiYW5kX3N0YXJ0ICsgaHBmc19zYihzKS0+c2JfZGlyYmFuZF9zaXplKSB7CiAJCXVuc2lnbmVkIHNzZWMgPSAoc2VjIC0gaHBmc19zYihzKS0+c2JfZGlyYmFuZF9zdGFydCkgLyA0OwogCQlpZiAoIShibXAgPSBocGZzX21hcF9kbm9kZV9iaXRtYXAocywgJnFiaCkpKSBnb3RvIGZhaWw7Ci0JCWlmICgoYm1wW3NzZWMgPj4gNV0gPj4gKHNzZWMgJiAweDFmKSkgJiAxKSB7CisJCWlmICgobGUzMl90b19jcHUoYm1wW3NzZWMgPj4gNV0pID4+IChzc2VjICYgMHgxZikpICYgMSkgewogCQkJaHBmc19lcnJvcihzLCAic2VjdG9yICclcycgLSAlMDh4IG5vdCBhbGxvY2F0ZWQgaW4gZGlyZWN0b3J5IGJpdG1hcCIsIG1zZywgc2VjKTsKIAkJCWdvdG8gZmFpbDE7CiAJCX0KQEAgLTc1LDcgKzczLDYgQEAKIAkJaHBmc19lcnJvcihzLCAiQmFkIGFsbG9jYXRpb24gc2l6ZTogJWQiLCBuKTsKIAkJcmV0dXJuIDA7CiAJfQotCWxvY2tfc3VwZXIocyk7CiAJaWYgKGJzICE9IH4weDNmZmYpIHsKIAkJaWYgKCEoYm1wID0gaHBmc19tYXBfYml0bWFwKHMsIG5lYXIgPj4gMTQsICZxYmgsICJhaWIiKSkpIGdvdG8gdWxzOwogCX0gZWxzZSB7CkBAIC04NSwxMCArODIsNiBAQAogCQlyZXQgPSBicyArIG5yOwogCQlnb3RvIHJ0OwogCX0KLQkvKmlmICghdHN0Yml0cyhibXAsIG5yICsgbiwgbiArIGZvcndhcmQpKSB7Ci0JCXJldCA9IGJzICsgbnIgKyBuOwotCQlnb3RvIHJ0OwotCX0qLwogCXEgPSBuciArIG47IGIgPSAwOwogCXdoaWxlICgoYSA9IHRzdGJpdHMoYm1wLCBxLCBuICsgZm9yd2FyZCkpICE9IDApIHsKIAkJcSArPSBhOwpAQCAtMTA1LDE0ICs5OCwxNCBAQAogCQlnb3RvIHJ0OwogCX0KIAluciA+Pj0gNTsKLQkvKmZvciAoaSA9IG5yICsgMTsgaSAhPSBucjsgaSsrLCBpICY9IDB4MWZmKSB7Ki8KKwkvKmZvciAoaSA9IG5yICsgMTsgaSAhPSBucjsgaSsrLCBpICY9IDB4MWZmKSAqLwogCWkgPSBucjsKIAlkbyB7Ci0JCWlmICghYm1wW2ldKSBnb3RvIGNvbnQ7Ci0JCWlmIChuICsgZm9yd2FyZCA+PSAweDNmICYmIGJtcFtpXSAhPSAtMSkgZ290byBjb250OworCQlpZiAoIWxlMzJfdG9fY3B1KGJtcFtpXSkpIGdvdG8gY29udDsKKwkJaWYgKG4gKyBmb3J3YXJkID49IDB4M2YgJiYgbGUzMl90b19jcHUoYm1wW2ldKSAhPSAweGZmZmZmZmZmKSBnb3RvIGNvbnQ7CiAJCXEgPSBpPDw1OwogCQlpZiAoaSA+IDApIHsKLQkJCXVuc2lnbmVkIGsgPSBibXBbaS0xXTsKKwkJCXVuc2lnbmVkIGsgPSBsZTMyX3RvX2NwdShibXBbaS0xXSk7CiAJCQl3aGlsZSAoayAmIDB4ODAwMDAwMDApIHsKIAkJCQlxLS07IGsgPDw9IDE7CiAJCQl9CkBAIC0xMzIsMTggKzEyNSwxNyBAQAogCX0gd2hpbGUgKGkgIT0gbnIpOwogCXJ0OgogCWlmIChyZXQpIHsKLQkJaWYgKGhwZnNfc2IocyktPnNiX2NoayAmJiAoKHJldCA+PiAxNCkgIT0gKGJzID4+IDE0KSB8fCAoYm1wWyhyZXQgJiAweDNmZmYpID4+IDVdIHwgfigoKDEgPDwgbikgLSAxKSA8PCAocmV0ICYgMHgxZikpKSAhPSAweGZmZmZmZmZmKSkgeworCQlpZiAoaHBmc19zYihzKS0+c2JfY2hrICYmICgocmV0ID4+IDE0KSAhPSAoYnMgPj4gMTQpIHx8IChsZTMyX3RvX2NwdShibXBbKHJldCAmIDB4M2ZmZikgPj4gNV0pIHwgfigoKDEgPDwgbikgLSAxKSA8PCAocmV0ICYgMHgxZikpKSAhPSAweGZmZmZmZmZmKSkgewogCQkJaHBmc19lcnJvcihzLCAiQWxsb2NhdGlvbiBkb2Vzbid0IHdvcmshIFdhbnRlZCAlZCwgYWxsb2NhdGVkIGF0ICUwOHgiLCBuLCByZXQpOwogCQkJcmV0ID0gMDsKIAkJCWdvdG8gYjsKIAkJfQotCQlibXBbKHJldCAmIDB4M2ZmZikgPj4gNV0gJj0gfigoKDEgPDwgbikgLSAxKSA8PCAocmV0ICYgMHgxZikpOworCQlibXBbKHJldCAmIDB4M2ZmZikgPj4gNV0gJj0gY3B1X3RvX2xlMzIofigoKDEgPDwgbikgLSAxKSA8PCAocmV0ICYgMHgxZikpKTsKIAkJaHBmc19tYXJrXzRidWZmZXJzX2RpcnR5KCZxYmgpOwogCX0KIAliOgogCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAl1bHM6Ci0JdW5sb2NrX3N1cGVyKHMpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE1NSw3ICsxNDcsNyBAQAogICoJCQkJc2VjdG9ycwogICovCiAKLXNlY25vIGhwZnNfYWxsb2Nfc2VjdG9yKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc2Vjbm8gbmVhciwgdW5zaWduZWQgbiwgaW50IGZvcndhcmQsIGludCBsb2NrKQorc2Vjbm8gaHBmc19hbGxvY19zZWN0b3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzZWNubyBuZWFyLCB1bnNpZ25lZCBuLCBpbnQgZm9yd2FyZCkKIHsKIAlzZWNubyBzZWM7CiAJaW50IGk7CkBAIC0xNjcsNyArMTU5LDYgQEAKIAkJZm9yd2FyZCA9IC1mb3J3YXJkOwogCQlmX3AgPSAxOwogCX0KLQlpZiAobG9jaykgaHBmc19sb2NrX2NyZWF0aW9uKHMpOwogCW5fYm1wcyA9IChzYmktPnNiX2ZzX3NpemUgKyAweDQwMDAgLSAxKSA+PiAxNDsKIAlpZiAobmVhciAmJiBuZWFyIDwgc2JpLT5zYl9mc19zaXplKSB7CiAJCWlmICgoc2VjID0gYWxsb2NfaW5fYm1wKHMsIG5lYXIsIG4sIGZfcCA/IGZvcndhcmQgOiBmb3J3YXJkLzQpKSkgZ290byByZXQ7CkBAIC0yMTQsMTggKzIwNSwxNyBAQAogCXJldDoKIAlpZiAoc2VjICYmIGZfcCkgewogCQlmb3IgKGkgPSAwOyBpIDwgZm9yd2FyZDsgaSsrKSB7Ci0JCQlpZiAoIWhwZnNfYWxsb2NfaWZfcG9zc2libGVfbm9sb2NrKHMsIHNlYyArIGkgKyAxKSkgeworCQkJaWYgKCFocGZzX2FsbG9jX2lmX3Bvc3NpYmxlKHMsIHNlYyArIGkgKyAxKSkgewogCQkJCWhwZnNfZXJyb3IocywgIlByZWFsbG9jIGRvZXNuJ3Qgd29yayEgV2FudGVkICVkLCBhbGxvY2F0ZWQgYXQgJTA4eCwgY2FuJ3QgYWxsb2NhdGUgJWQiLCBmb3J3YXJkLCBzZWMsIGkpOwogCQkJCXNlYyA9IDA7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAl9Ci0JaWYgKGxvY2spIGhwZnNfdW5sb2NrX2NyZWF0aW9uKHMpOwogCXJldHVybiBzZWM7CiB9CiAKLXN0YXRpYyBzZWNubyBhbGxvY19pbl9kaXJiYW5kKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc2Vjbm8gbmVhciwgaW50IGxvY2spCitzdGF0aWMgc2Vjbm8gYWxsb2NfaW5fZGlyYmFuZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHNlY25vIG5lYXIpCiB7CiAJdW5zaWduZWQgbnIgPSBuZWFyOwogCXNlY25vIHNlYzsKQEAgLTIzNiw0OSArMjI2LDM1IEBACiAJCW5yID0gc2JpLT5zYl9kaXJiYW5kX3N0YXJ0ICsgc2JpLT5zYl9kaXJiYW5kX3NpemUgLSA0OwogCW5yIC09IHNiaS0+c2JfZGlyYmFuZF9zdGFydDsKIAluciA+Pj0gMjsKLQlpZiAobG9jaykgaHBmc19sb2NrX2NyZWF0aW9uKHMpOwogCXNlYyA9IGFsbG9jX2luX2JtcChzLCAofjB4M2ZmZikgfCBuciwgMSwgMCk7Ci0JaWYgKGxvY2spIGhwZnNfdW5sb2NrX2NyZWF0aW9uKHMpOwogCWlmICghc2VjKSByZXR1cm4gMDsKIAlyZXR1cm4gKChzZWMgJiAweDNmZmYpIDw8IDIpICsgc2JpLT5zYl9kaXJiYW5kX3N0YXJ0OwogfQogCiAvKiBBbGxvYyBzZWN0b3IgaWYgaXQncyBmcmVlICovCiAKLXN0YXRpYyBpbnQgaHBmc19hbGxvY19pZl9wb3NzaWJsZV9ub2xvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzZWNubyBzZWMpCitpbnQgaHBmc19hbGxvY19pZl9wb3NzaWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHNlY25vIHNlYykKIHsKIAlzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCBxYmg7Ci0JdW5zaWduZWQgKmJtcDsKLQlsb2NrX3N1cGVyKHMpOworCXUzMiAqYm1wOwogCWlmICghKGJtcCA9IGhwZnNfbWFwX2JpdG1hcChzLCBzZWMgPj4gMTQsICZxYmgsICJhaXAiKSkpIGdvdG8gZW5kOwotCWlmIChibXBbKHNlYyAmIDB4M2ZmZikgPj4gNV0gJiAoMSA8PCAoc2VjICYgMHgxZikpKSB7Ci0JCWJtcFsoc2VjICYgMHgzZmZmKSA+PiA1XSAmPSB+KDEgPDwgKHNlYyAmIDB4MWYpKTsKKwlpZiAobGUzMl90b19jcHUoYm1wWyhzZWMgJiAweDNmZmYpID4+IDVdKSAmICgxIDw8IChzZWMgJiAweDFmKSkpIHsKKwkJYm1wWyhzZWMgJiAweDNmZmYpID4+IDVdICY9IGNwdV90b19sZTMyKH4oMSA8PCAoc2VjICYgMHgxZikpKTsKIAkJaHBmc19tYXJrXzRidWZmZXJzX2RpcnR5KCZxYmgpOwogCQlocGZzX2JyZWxzZTQoJnFiaCk7Ci0JCXVubG9ja19zdXBlcihzKTsKIAkJcmV0dXJuIDE7CiAJfQogCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAllbmQ6Ci0JdW5sb2NrX3N1cGVyKHMpOwogCXJldHVybiAwOwogfQogCi1pbnQgaHBmc19hbGxvY19pZl9wb3NzaWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHNlY25vIHNlYykKLXsKLQlpbnQgcjsKLQlocGZzX2xvY2tfY3JlYXRpb24ocyk7Ci0JciA9IGhwZnNfYWxsb2NfaWZfcG9zc2libGVfbm9sb2NrKHMsIHNlYyk7Ci0JaHBmc191bmxvY2tfY3JlYXRpb24ocyk7Ci0JcmV0dXJuIHI7Ci19Ci0KIC8qIEZyZWUgc2VjdG9ycyBpbiBiaXRtYXBzICovCiAKIHZvaWQgaHBmc19mcmVlX3NlY3RvcnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzZWNubyBzZWMsIHVuc2lnbmVkIG4pCiB7CiAJc3RydWN0IHF1YWRfYnVmZmVyX2hlYWQgcWJoOwotCXVuc2lnbmVkICpibXA7CisJdTMyICpibXA7CiAJc3RydWN0IGhwZnNfc2JfaW5mbyAqc2JpID0gaHBmc19zYihzKTsKIAkvKnByaW50aygiMiAtICIpOyovCiAJaWYgKCFuKSByZXR1cm47CkBAIC0yODYsMjYgKzI2MiwyMiBAQAogCQlocGZzX2Vycm9yKHMsICJUcnlpbmcgdG8gZnJlZSByZXNlcnZlZCBzZWN0b3IgJTA4eCIsIHNlYyk7CiAJCXJldHVybjsKIAl9Ci0JbG9ja19zdXBlcihzKTsKIAlzYmktPnNiX21heF9md2RfYWxsb2MgKz0gbiA+IDB4ZmZmZiA/IDB4ZmZmZiA6IG47CiAJaWYgKHNiaS0+c2JfbWF4X2Z3ZF9hbGxvYyA+IDB4ZmZmZmZmKSBzYmktPnNiX21heF9md2RfYWxsb2MgPSAweGZmZmZmZjsKIAluZXdfbWFwOgogCWlmICghKGJtcCA9IGhwZnNfbWFwX2JpdG1hcChzLCBzZWMgPj4gMTQsICZxYmgsICJmcmVlIikpKSB7Ci0JCXVubG9ja19zdXBlcihzKTsKIAkJcmV0dXJuOwogCX0JCiAJbmV3X3RzdDoKLQlpZiAoKGJtcFsoc2VjICYgMHgzZmZmKSA+PiA1XSA+PiAoc2VjICYgMHgxZikgJiAxKSkgeworCWlmICgobGUzMl90b19jcHUoYm1wWyhzZWMgJiAweDNmZmYpID4+IDVdKSA+PiAoc2VjICYgMHgxZikgJiAxKSkgewogCQlocGZzX2Vycm9yKHMsICJzZWN0b3IgJTA4eCBub3QgYWxsb2NhdGVkIiwgc2VjKTsKIAkJaHBmc19icmVsc2U0KCZxYmgpOwotCQl1bmxvY2tfc3VwZXIocyk7CiAJCXJldHVybjsKIAl9Ci0JYm1wWyhzZWMgJiAweDNmZmYpID4+IDVdIHw9IDEgPDwgKHNlYyAmIDB4MWYpOworCWJtcFsoc2VjICYgMHgzZmZmKSA+PiA1XSB8PSBjcHVfdG9fbGUzMigxIDw8IChzZWMgJiAweDFmKSk7CiAJaWYgKCEtLW4pIHsKIAkJaHBmc19tYXJrXzRidWZmZXJzX2RpcnR5KCZxYmgpOwogCQlocGZzX2JyZWxzZTQoJnFiaCk7Ci0JCXVubG9ja19zdXBlcihzKTsKIAkJcmV0dXJuOwogCX0JCiAJaWYgKCEoKytzZWMgJiAweDNmZmYpKSB7CkBAIC0zMjcsMTMgKzI5OSwxMyBAQAogCWludCBuX2JtcHMgPSAoaHBmc19zYihzKS0+c2JfZnNfc2l6ZSArIDB4NDAwMCAtIDEpID4+IDE0OwogCWludCBiID0gaHBmc19zYihzKS0+c2JfY19iaXRtYXAgJiAweDBmZmZmZmZmOwogCWludCBpLCBqOwotCXVuc2lnbmVkICpibXA7CisJdTMyICpibXA7CiAJc3RydWN0IHF1YWRfYnVmZmVyX2hlYWQgcWJoOwogCWlmICgoYm1wID0gaHBmc19tYXBfZG5vZGVfYml0bWFwKHMsICZxYmgpKSkgewogCQlmb3IgKGogPSAwOyBqIDwgNTEyOyBqKyspIHsKIAkJCXVuc2lnbmVkIGs7Ci0JCQlpZiAoIWJtcFtqXSkgY29udGludWU7Ci0JCQlmb3IgKGsgPSBibXBbal07IGs7IGsgPj49IDEpIGlmIChrICYgMSkgaWYgKCEtLW4pIHsKKwkJCWlmICghbGUzMl90b19jcHUoYm1wW2pdKSkgY29udGludWU7CisJCQlmb3IgKGsgPSBsZTMyX3RvX2NwdShibXBbal0pOyBrOyBrID4+PSAxKSBpZiAoayAmIDEpIGlmICghLS1uKSB7CiAJCQkJaHBmc19icmVsc2U0KCZxYmgpOwogCQkJCXJldHVybiAwOwogCQkJfQpAQCAtMzUyLDEwICszMjQsMTAgQEAKIAljaGtfYm1wOgogCWlmIChibXApIHsKIAkJZm9yIChqID0gMDsgaiA8IDUxMjsgaisrKSB7Ci0JCQl1bnNpZ25lZCBrOwotCQkJaWYgKCFibXBbal0pIGNvbnRpbnVlOworCQkJdTMyIGs7CisJCQlpZiAoIWxlMzJfdG9fY3B1KGJtcFtqXSkpIGNvbnRpbnVlOwogCQkJZm9yIChrID0gMHhmOyBrOyBrIDw8PSA0KQotCQkJCWlmICgoYm1wW2pdICYgaykgPT0gaykgeworCQkJCWlmICgobGUzMl90b19jcHUoYm1wW2pdKSAmIGspID09IGspIHsKIAkJCQkJaWYgKCEtLW4pIHsKIAkJCQkJCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAkJCQkJCXJldHVybiAwOwpAQCAtMzc5LDQ0ICszNTEsNDAgQEAKIAkJaHBmc19mcmVlX3NlY3RvcnMocywgZG5vLCA0KTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCBxYmg7Ci0JCXVuc2lnbmVkICpibXA7CisJCXUzMiAqYm1wOwogCQl1bnNpZ25lZCBzc2VjID0gKGRubyAtIGhwZnNfc2IocyktPnNiX2RpcmJhbmRfc3RhcnQpIC8gNDsKLQkJbG9ja19zdXBlcihzKTsKIAkJaWYgKCEoYm1wID0gaHBmc19tYXBfZG5vZGVfYml0bWFwKHMsICZxYmgpKSkgewotCQkJdW5sb2NrX3N1cGVyKHMpOwogCQkJcmV0dXJuOwogCQl9Ci0JCWJtcFtzc2VjID4+IDVdIHw9IDEgPDwgKHNzZWMgJiAweDFmKTsKKwkJYm1wW3NzZWMgPj4gNV0gfD0gY3B1X3RvX2xlMzIoMSA8PCAoc3NlYyAmIDB4MWYpKTsKIAkJaHBmc19tYXJrXzRidWZmZXJzX2RpcnR5KCZxYmgpOwogCQlocGZzX2JyZWxzZTQoJnFiaCk7Ci0JCXVubG9ja19zdXBlcihzKTsKIAl9CiB9CiAKIHN0cnVjdCBkbm9kZSAqaHBmc19hbGxvY19kbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHNlY25vIG5lYXIsCi0JCQkgZG5vZGVfc2Vjbm8gKmRubywgc3RydWN0IHF1YWRfYnVmZmVyX2hlYWQgKnFiaCwKLQkJCSBpbnQgbG9jaykKKwkJCSBkbm9kZV9zZWNubyAqZG5vLCBzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCAqcWJoKQogewogCXN0cnVjdCBkbm9kZSAqZDsKIAlpZiAoaHBmc19jb3VudF9vbmVfYml0bWFwKHMsIGhwZnNfc2IocyktPnNiX2RtYXApID4gRlJFRV9ETk9ERVNfQUREKSB7Ci0JCWlmICghKCpkbm8gPSBhbGxvY19pbl9kaXJiYW5kKHMsIG5lYXIsIGxvY2spKSkKLQkJCWlmICghKCpkbm8gPSBocGZzX2FsbG9jX3NlY3RvcihzLCBuZWFyLCA0LCAwLCBsb2NrKSkpIHJldHVybiBOVUxMOworCQlpZiAoISgqZG5vID0gYWxsb2NfaW5fZGlyYmFuZChzLCBuZWFyKSkpCisJCQlpZiAoISgqZG5vID0gaHBmc19hbGxvY19zZWN0b3IocywgbmVhciwgNCwgMCkpKSByZXR1cm4gTlVMTDsKIAl9IGVsc2UgewotCQlpZiAoISgqZG5vID0gaHBmc19hbGxvY19zZWN0b3IocywgbmVhciwgNCwgMCwgbG9jaykpKQotCQkJaWYgKCEoKmRubyA9IGFsbG9jX2luX2RpcmJhbmQocywgbmVhciwgbG9jaykpKSByZXR1cm4gTlVMTDsKKwkJaWYgKCEoKmRubyA9IGhwZnNfYWxsb2Nfc2VjdG9yKHMsIG5lYXIsIDQsIDApKSkKKwkJCWlmICghKCpkbm8gPSBhbGxvY19pbl9kaXJiYW5kKHMsIG5lYXIpKSkgcmV0dXJuIE5VTEw7CiAJfQogCWlmICghKGQgPSBocGZzX2dldF80c2VjdG9ycyhzLCAqZG5vLCBxYmgpKSkgewogCQlocGZzX2ZyZWVfZG5vZGUocywgKmRubyk7CiAJCXJldHVybiBOVUxMOwogCX0KIAltZW1zZXQoZCwgMCwgMjA0OCk7Ci0JZC0+bWFnaWMgPSBETk9ERV9NQUdJQzsKLQlkLT5maXJzdF9mcmVlID0gNTI7CisJZC0+bWFnaWMgPSBjcHVfdG9fbGUzMihETk9ERV9NQUdJQyk7CisJZC0+Zmlyc3RfZnJlZSA9IGNwdV90b19sZTMyKDUyKTsKIAlkLT5kaXJlbnRbMF0gPSAzMjsKIAlkLT5kaXJlbnRbMl0gPSA4OwogCWQtPmRpcmVudFszMF0gPSAxOwogCWQtPmRpcmVudFszMV0gPSAyNTU7Ci0JZC0+c2VsZiA9ICpkbm87CisJZC0+c2VsZiA9IGNwdV90b19sZTMyKCpkbm8pOwogCXJldHVybiBkOwogfQogCkBAIC00MjQsMTYgKzM5MiwxNiBAQAogCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCkKIHsKIAlzdHJ1Y3QgZm5vZGUgKmY7Ci0JaWYgKCEoKmZubyA9IGhwZnNfYWxsb2Nfc2VjdG9yKHMsIG5lYXIsIDEsIEZOT0RFX0FMTE9DX0ZXRCwgMSkpKSByZXR1cm4gTlVMTDsKKwlpZiAoISgqZm5vID0gaHBmc19hbGxvY19zZWN0b3IocywgbmVhciwgMSwgRk5PREVfQUxMT0NfRldEKSkpIHJldHVybiBOVUxMOwogCWlmICghKGYgPSBocGZzX2dldF9zZWN0b3IocywgKmZubywgYmgpKSkgewogCQlocGZzX2ZyZWVfc2VjdG9ycyhzLCAqZm5vLCAxKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQkKIAltZW1zZXQoZiwgMCwgNTEyKTsKLQlmLT5tYWdpYyA9IEZOT0RFX01BR0lDOwotCWYtPmVhX29mZnMgPSAweGM0OworCWYtPm1hZ2ljID0gY3B1X3RvX2xlMzIoRk5PREVfTUFHSUMpOworCWYtPmVhX29mZnMgPSBjcHVfdG9fbGUxNigweGM0KTsKIAlmLT5idHJlZS5uX2ZyZWVfbm9kZXMgPSA4OwotCWYtPmJ0cmVlLmZpcnN0X2ZyZWUgPSA4OworCWYtPmJ0cmVlLmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUxNig4KTsKIAlyZXR1cm4gZjsKIH0KIApAQCAtNDQxLDE2ICs0MDksMTYgQEAKIAkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgpCiB7CiAJc3RydWN0IGFub2RlICphOwotCWlmICghKCphbm8gPSBocGZzX2FsbG9jX3NlY3RvcihzLCBuZWFyLCAxLCBBTk9ERV9BTExPQ19GV0QsIDEpKSkgcmV0dXJuIE5VTEw7CisJaWYgKCEoKmFubyA9IGhwZnNfYWxsb2Nfc2VjdG9yKHMsIG5lYXIsIDEsIEFOT0RFX0FMTE9DX0ZXRCkpKSByZXR1cm4gTlVMTDsKIAlpZiAoIShhID0gaHBmc19nZXRfc2VjdG9yKHMsICphbm8sIGJoKSkpIHsKIAkJaHBmc19mcmVlX3NlY3RvcnMocywgKmFubywgMSk7CiAJCXJldHVybiBOVUxMOwogCX0KIAltZW1zZXQoYSwgMCwgNTEyKTsKLQlhLT5tYWdpYyA9IEFOT0RFX01BR0lDOwotCWEtPnNlbGYgPSAqYW5vOworCWEtPm1hZ2ljID0gY3B1X3RvX2xlMzIoQU5PREVfTUFHSUMpOworCWEtPnNlbGYgPSBjcHVfdG9fbGUzMigqYW5vKTsKIAlhLT5idHJlZS5uX2ZyZWVfbm9kZXMgPSA0MDsKIAlhLT5idHJlZS5uX3VzZWRfbm9kZXMgPSAwOwotCWEtPmJ0cmVlLmZpcnN0X2ZyZWUgPSA4OworCWEtPmJ0cmVlLmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUxNig4KTsKIAlyZXR1cm4gYTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2hwZnMvYW5vZGUuYyBiL2ZzL2hwZnMvYW5vZGUuYwppbmRleCA2YTJmMDRiLi4wOGI1MDNlIDEwMDY0NAotLS0gYS9mcy9ocGZzL2Fub2RlLmMKKysrIGIvZnMvaHBmcy9hbm9kZS5jCkBAIC0yMiw4ICsyMiw4IEBACiAJaWYgKGhwZnNfc2IocyktPnNiX2NoaykgaWYgKGhwZnNfc3RvcF9jeWNsZXMocywgYSwgJmMxLCAmYzIsICJocGZzX2JwbHVzX2xvb2t1cCIpKSByZXR1cm4gLTE7CiAJaWYgKGJ0cmVlLT5pbnRlcm5hbCkgewogCQlmb3IgKGkgPSAwOyBpIDwgYnRyZWUtPm5fdXNlZF9ub2RlczsgaSsrKQotCQkJaWYgKGJ0cmVlLT51LmludGVybmFsW2ldLmZpbGVfc2Vjbm8gPiBzZWMpIHsKLQkJCQlhID0gYnRyZWUtPnUuaW50ZXJuYWxbaV0uZG93bjsKKwkJCWlmIChsZTMyX3RvX2NwdShidHJlZS0+dS5pbnRlcm5hbFtpXS5maWxlX3NlY25vKSA+IHNlYykgeworCQkJCWEgPSBsZTMyX3RvX2NwdShidHJlZS0+dS5pbnRlcm5hbFtpXS5kb3duKTsKIAkJCQlicmVsc2UoYmgpOwogCQkJCWlmICghKGFub2RlID0gaHBmc19tYXBfYW5vZGUocywgYSwgJmJoKSkpIHJldHVybiAtMTsKIAkJCQlidHJlZSA9ICZhbm9kZS0+YnRyZWU7CkBAIC0zNCwxOCArMzQsMTggQEAKIAkJcmV0dXJuIC0xOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgYnRyZWUtPm5fdXNlZF9ub2RlczsgaSsrKQotCQlpZiAoYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZmlsZV9zZWNubyA8PSBzZWMgJiYKLQkJICAgIGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm8gKyBidHJlZS0+dS5leHRlcm5hbFtpXS5sZW5ndGggPiBzZWMpIHsKLQkJCWEgPSBidHJlZS0+dS5leHRlcm5hbFtpXS5kaXNrX3NlY25vICsgc2VjIC0gYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZmlsZV9zZWNubzsKKwkJaWYgKGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm8pIDw9IHNlYyAmJgorCQkgICAgbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZmlsZV9zZWNubykgKyBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5sZW5ndGgpID4gc2VjKSB7CisJCQlhID0gbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZGlza19zZWNubykgKyBzZWMgLSBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vKTsKIAkJCWlmIChocGZzX3NiKHMpLT5zYl9jaGspIGlmIChocGZzX2Noa19zZWN0b3JzKHMsIGEsIDEsICJkYXRhIikpIHsKIAkJCQlicmVsc2UoYmgpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KIAkJCWlmIChpbm9kZSkgewogCQkJCXN0cnVjdCBocGZzX2lub2RlX2luZm8gKmhwZnNfaW5vZGUgPSBocGZzX2koaW5vZGUpOwotCQkJCWhwZnNfaW5vZGUtPmlfZmlsZV9zZWMgPSBidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vOwotCQkJCWhwZnNfaW5vZGUtPmlfZGlza19zZWMgPSBidHJlZS0+dS5leHRlcm5hbFtpXS5kaXNrX3NlY25vOwotCQkJCWhwZnNfaW5vZGUtPmlfbl9zZWNzID0gYnRyZWUtPnUuZXh0ZXJuYWxbaV0ubGVuZ3RoOworCQkJCWhwZnNfaW5vZGUtPmlfZmlsZV9zZWMgPSBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vKTsKKwkJCQlocGZzX2lub2RlLT5pX2Rpc2tfc2VjID0gbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZGlza19zZWNubyk7CisJCQkJaHBmc19pbm9kZS0+aV9uX3NlY3MgPSBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5sZW5ndGgpOwogCQkJfQogCQkJYnJlbHNlKGJoKTsKIAkJCXJldHVybiBhOwpAQCAtODMsOCArODMsOCBAQAogCQlyZXR1cm4gLTE7CiAJfQogCWlmIChidHJlZS0+aW50ZXJuYWwpIHsKLQkJYSA9IGJ0cmVlLT51LmludGVybmFsW25dLmRvd247Ci0JCWJ0cmVlLT51LmludGVybmFsW25dLmZpbGVfc2Vjbm8gPSAtMTsKKwkJYSA9IGxlMzJfdG9fY3B1KGJ0cmVlLT51LmludGVybmFsW25dLmRvd24pOworCQlidHJlZS0+dS5pbnRlcm5hbFtuXS5maWxlX3NlY25vID0gY3B1X3RvX2xlMzIoLTEpOwogCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCWJyZWxzZShiaCk7CiAJCWlmIChocGZzX3NiKHMpLT5zYl9jaGspCkBAIC05NCwxNSArOTQsMTUgQEAKIAkJZ290byBnb19kb3duOwogCX0KIAlpZiAobiA+PSAwKSB7Ci0JCWlmIChidHJlZS0+dS5leHRlcm5hbFtuXS5maWxlX3NlY25vICsgYnRyZWUtPnUuZXh0ZXJuYWxbbl0ubGVuZ3RoICE9IGZzZWNubykgeworCQlpZiAobGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbbl0uZmlsZV9zZWNubykgKyBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtuXS5sZW5ndGgpICE9IGZzZWNubykgewogCQkJaHBmc19lcnJvcihzLCAiYWxsb2NhdGVkIHNpemUgJTA4eCwgdHJ5aW5nIHRvIGFkZCBzZWN0b3IgJTA4eCwgJWNub2RlICUwOHgiLAotCQkJCWJ0cmVlLT51LmV4dGVybmFsW25dLmZpbGVfc2Vjbm8gKyBidHJlZS0+dS5leHRlcm5hbFtuXS5sZW5ndGgsIGZzZWNubywKKwkJCQlsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtuXS5maWxlX3NlY25vKSArIGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW25dLmxlbmd0aCksIGZzZWNubywKIAkJCQlmbm9kPydmJzonYScsIG5vZGUpOwogCQkJYnJlbHNlKGJoKTsKIAkJCXJldHVybiAtMTsKIAkJfQotCQlpZiAoaHBmc19hbGxvY19pZl9wb3NzaWJsZShzLCBzZSA9IGJ0cmVlLT51LmV4dGVybmFsW25dLmRpc2tfc2Vjbm8gKyBidHJlZS0+dS5leHRlcm5hbFtuXS5sZW5ndGgpKSB7Ci0JCQlidHJlZS0+dS5leHRlcm5hbFtuXS5sZW5ndGgrKzsKKwkJaWYgKGhwZnNfYWxsb2NfaWZfcG9zc2libGUocywgc2UgPSBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtuXS5kaXNrX3NlY25vKSArIGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW25dLmxlbmd0aCkpKSB7CisJCQlidHJlZS0+dS5leHRlcm5hbFtuXS5sZW5ndGggPSBjcHVfdG9fbGUzMihsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtuXS5sZW5ndGgpICsgMSk7CiAJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCQlicmVsc2UoYmgpOwogCQkJcmV0dXJuIHNlOwpAQCAtMTE1LDIwICsxMTUsMjAgQEAKIAkJfQogCQlzZSA9ICFmbm9kID8gbm9kZSA6IChub2RlICsgMTYzODQpICYgfjE2MzgzOwogCX0JCi0JaWYgKCEoc2UgPSBocGZzX2FsbG9jX3NlY3RvcihzLCBzZSwgMSwgZnNlY25vKkFMTE9DX00+QUxMT0NfRldEX01BWCA/IEFMTE9DX0ZXRF9NQVggOiBmc2Vjbm8qQUxMT0NfTTxBTExPQ19GV0RfTUlOID8gQUxMT0NfRldEX01JTiA6IGZzZWNubypBTExPQ19NLCAxKSkpIHsKKwlpZiAoIShzZSA9IGhwZnNfYWxsb2Nfc2VjdG9yKHMsIHNlLCAxLCBmc2Vjbm8qQUxMT0NfTT5BTExPQ19GV0RfTUFYID8gQUxMT0NfRldEX01BWCA6IGZzZWNubypBTExPQ19NPEFMTE9DX0ZXRF9NSU4gPyBBTExPQ19GV0RfTUlOIDogZnNlY25vKkFMTE9DX00pKSkgewogCQlicmVsc2UoYmgpOwogCQlyZXR1cm4gLTE7CiAJfQotCWZzID0gbiA8IDAgPyAwIDogYnRyZWUtPnUuZXh0ZXJuYWxbbl0uZmlsZV9zZWNubyArIGJ0cmVlLT51LmV4dGVybmFsW25dLmxlbmd0aDsKKwlmcyA9IG4gPCAwID8gMCA6IGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW25dLmZpbGVfc2Vjbm8pICsgbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbbl0ubGVuZ3RoKTsKIAlpZiAoIWJ0cmVlLT5uX2ZyZWVfbm9kZXMpIHsKLQkJdXAgPSBhICE9IG5vZGUgPyBhbm9kZS0+dXAgOiAtMTsKKwkJdXAgPSBhICE9IG5vZGUgPyBsZTMyX3RvX2NwdShhbm9kZS0+dXApIDogLTE7CiAJCWlmICghKGFub2RlID0gaHBmc19hbGxvY19hbm9kZShzLCBhLCAmbmEsICZiaDEpKSkgewogCQkJYnJlbHNlKGJoKTsKIAkJCWhwZnNfZnJlZV9zZWN0b3JzKHMsIHNlLCAxKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCQlpZiAoYSA9PSBub2RlICYmIGZub2QpIHsKLQkJCWFub2RlLT51cCA9IG5vZGU7CisJCQlhbm9kZS0+dXAgPSBjcHVfdG9fbGUzMihub2RlKTsKIAkJCWFub2RlLT5idHJlZS5mbm9kZV9wYXJlbnQgPSAxOwogCQkJYW5vZGUtPmJ0cmVlLm5fdXNlZF9ub2RlcyA9IGJ0cmVlLT5uX3VzZWRfbm9kZXM7CiAJCQlhbm9kZS0+YnRyZWUuZmlyc3RfZnJlZSA9IGJ0cmVlLT5maXJzdF9mcmVlOwpAQCAtMTM3LDkgKzEzNyw5IEBACiAJCQlidHJlZS0+aW50ZXJuYWwgPSAxOwogCQkJYnRyZWUtPm5fZnJlZV9ub2RlcyA9IDExOwogCQkJYnRyZWUtPm5fdXNlZF9ub2RlcyA9IDE7Ci0JCQlidHJlZS0+Zmlyc3RfZnJlZSA9IChjaGFyICopJihidHJlZS0+dS5pbnRlcm5hbFsxXSkgLSAoY2hhciAqKWJ0cmVlOwotCQkJYnRyZWUtPnUuaW50ZXJuYWxbMF0uZmlsZV9zZWNubyA9IC0xOwotCQkJYnRyZWUtPnUuaW50ZXJuYWxbMF0uZG93biA9IG5hOworCQkJYnRyZWUtPmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUxNigoY2hhciAqKSYoYnRyZWUtPnUuaW50ZXJuYWxbMV0pIC0gKGNoYXIgKilidHJlZSk7CisJCQlidHJlZS0+dS5pbnRlcm5hbFswXS5maWxlX3NlY25vID0gY3B1X3RvX2xlMzIoLTEpOworCQkJYnRyZWUtPnUuaW50ZXJuYWxbMF0uZG93biA9IGNwdV90b19sZTMyKG5hKTsKIAkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJfSBlbHNlIGlmICghKHJhbm9kZSA9IGhwZnNfYWxsb2NfYW5vZGUocywgLyphKi8wLCAmcmEsICZiaDIpKSkgewogCQkJYnJlbHNlKGJoKTsKQEAgLTE1MywxNSArMTUzLDE1IEBACiAJCWJ0cmVlID0gJmFub2RlLT5idHJlZTsKIAl9CiAJYnRyZWUtPm5fZnJlZV9ub2Rlcy0tOyBuID0gYnRyZWUtPm5fdXNlZF9ub2RlcysrOwotCWJ0cmVlLT5maXJzdF9mcmVlICs9IDEyOwotCWJ0cmVlLT51LmV4dGVybmFsW25dLmRpc2tfc2Vjbm8gPSBzZTsKLQlidHJlZS0+dS5leHRlcm5hbFtuXS5maWxlX3NlY25vID0gZnM7Ci0JYnRyZWUtPnUuZXh0ZXJuYWxbbl0ubGVuZ3RoID0gMTsKKwlidHJlZS0+Zmlyc3RfZnJlZSA9IGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGJ0cmVlLT5maXJzdF9mcmVlKSArIDEyKTsKKwlidHJlZS0+dS5leHRlcm5hbFtuXS5kaXNrX3NlY25vID0gY3B1X3RvX2xlMzIoc2UpOworCWJ0cmVlLT51LmV4dGVybmFsW25dLmZpbGVfc2Vjbm8gPSBjcHVfdG9fbGUzMihmcyk7CisJYnRyZWUtPnUuZXh0ZXJuYWxbbl0ubGVuZ3RoID0gY3B1X3RvX2xlMzIoMSk7CiAJbWFya19idWZmZXJfZGlydHkoYmgpOwogCWJyZWxzZShiaCk7CiAJaWYgKChhID09IG5vZGUgJiYgZm5vZCkgfHwgbmEgPT0gLTEpIHJldHVybiBzZTsKIAljMiA9IDA7Ci0Jd2hpbGUgKHVwICE9IC0xKSB7CisJd2hpbGUgKHVwICE9IChhbm9kZV9zZWNubyktMSkgewogCQlzdHJ1Y3QgYW5vZGUgKm5ld19hbm9kZTsKIAkJaWYgKGhwZnNfc2IocyktPnNiX2NoaykKIAkJCWlmIChocGZzX3N0b3BfY3ljbGVzKHMsIHVwLCAmYzEsICZjMiwgImhwZnNfYWRkX3NlY3Rvcl90b19idHJlZSAjMiIpKSByZXR1cm4gLTE7CkBAIC0xNzQsNDcgKzE3NCw0NyBAQAogCQl9CiAJCWlmIChidHJlZS0+bl9mcmVlX25vZGVzKSB7CiAJCQlidHJlZS0+bl9mcmVlX25vZGVzLS07IG4gPSBidHJlZS0+bl91c2VkX25vZGVzKys7Ci0JCQlidHJlZS0+Zmlyc3RfZnJlZSArPSA4OwotCQkJYnRyZWUtPnUuaW50ZXJuYWxbbl0uZmlsZV9zZWNubyA9IC0xOwotCQkJYnRyZWUtPnUuaW50ZXJuYWxbbl0uZG93biA9IG5hOwotCQkJYnRyZWUtPnUuaW50ZXJuYWxbbi0xXS5maWxlX3NlY25vID0gZnM7CisJCQlidHJlZS0+Zmlyc3RfZnJlZSA9IGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGJ0cmVlLT5maXJzdF9mcmVlKSArIDgpOworCQkJYnRyZWUtPnUuaW50ZXJuYWxbbl0uZmlsZV9zZWNubyA9IGNwdV90b19sZTMyKC0xKTsKKwkJCWJ0cmVlLT51LmludGVybmFsW25dLmRvd24gPSBjcHVfdG9fbGUzMihuYSk7CisJCQlidHJlZS0+dS5pbnRlcm5hbFtuLTFdLmZpbGVfc2Vjbm8gPSBjcHVfdG9fbGUzMihmcyk7CiAJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCQlicmVsc2UoYmgpOwogCQkJYnJlbHNlKGJoMik7CiAJCQlocGZzX2ZyZWVfc2VjdG9ycyhzLCByYSwgMSk7CiAJCQlpZiAoKGFub2RlID0gaHBmc19tYXBfYW5vZGUocywgbmEsICZiaCkpKSB7Ci0JCQkJYW5vZGUtPnVwID0gdXA7CisJCQkJYW5vZGUtPnVwID0gY3B1X3RvX2xlMzIodXApOwogCQkJCWFub2RlLT5idHJlZS5mbm9kZV9wYXJlbnQgPSB1cCA9PSBub2RlICYmIGZub2Q7CiAJCQkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQkJCWJyZWxzZShiaCk7CiAJCQl9CiAJCQlyZXR1cm4gc2U7CiAJCX0KLQkJdXAgPSB1cCAhPSBub2RlID8gYW5vZGUtPnVwIDogLTE7Ci0JCWJ0cmVlLT51LmludGVybmFsW2J0cmVlLT5uX3VzZWRfbm9kZXMgLSAxXS5maWxlX3NlY25vID0gLypmcyovLTE7CisJCXVwID0gdXAgIT0gbm9kZSA/IGxlMzJfdG9fY3B1KGFub2RlLT51cCkgOiAtMTsKKwkJYnRyZWUtPnUuaW50ZXJuYWxbYnRyZWUtPm5fdXNlZF9ub2RlcyAtIDFdLmZpbGVfc2Vjbm8gPSBjcHVfdG9fbGUzMigvKmZzKi8tMSk7CiAJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJYnJlbHNlKGJoKTsKIAkJYSA9IG5hOwogCQlpZiAoKG5ld19hbm9kZSA9IGhwZnNfYWxsb2NfYW5vZGUocywgYSwgJm5hLCAmYmgpKSkgewogCQkJYW5vZGUgPSBuZXdfYW5vZGU7Ci0JCQkvKmFub2RlLT51cCA9IHVwICE9IC0xID8gdXAgOiByYTsqLworCQkJLyphbm9kZS0+dXAgPSBjcHVfdG9fbGUzMih1cCAhPSAtMSA/IHVwIDogcmEpOyovCiAJCQlhbm9kZS0+YnRyZWUuaW50ZXJuYWwgPSAxOwogCQkJYW5vZGUtPmJ0cmVlLm5fdXNlZF9ub2RlcyA9IDE7CiAJCQlhbm9kZS0+YnRyZWUubl9mcmVlX25vZGVzID0gNTk7Ci0JCQlhbm9kZS0+YnRyZWUuZmlyc3RfZnJlZSA9IDE2OwotCQkJYW5vZGUtPmJ0cmVlLnUuaW50ZXJuYWxbMF0uZG93biA9IGE7Ci0JCQlhbm9kZS0+YnRyZWUudS5pbnRlcm5hbFswXS5maWxlX3NlY25vID0gLTE7CisJCQlhbm9kZS0+YnRyZWUuZmlyc3RfZnJlZSA9IGNwdV90b19sZTE2KDE2KTsKKwkJCWFub2RlLT5idHJlZS51LmludGVybmFsWzBdLmRvd24gPSBjcHVfdG9fbGUzMihhKTsKKwkJCWFub2RlLT5idHJlZS51LmludGVybmFsWzBdLmZpbGVfc2Vjbm8gPSBjcHVfdG9fbGUzMigtMSk7CiAJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCQlicmVsc2UoYmgpOwogCQkJaWYgKChhbm9kZSA9IGhwZnNfbWFwX2Fub2RlKHMsIGEsICZiaCkpKSB7Ci0JCQkJYW5vZGUtPnVwID0gbmE7CisJCQkJYW5vZGUtPnVwID0gY3B1X3RvX2xlMzIobmEpOwogCQkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJCQlicmVsc2UoYmgpOwogCQkJfQogCQl9IGVsc2UgbmEgPSBhOwogCX0KIAlpZiAoKGFub2RlID0gaHBmc19tYXBfYW5vZGUocywgbmEsICZiaCkpKSB7Ci0JCWFub2RlLT51cCA9IG5vZGU7CisJCWFub2RlLT51cCA9IGNwdV90b19sZTMyKG5vZGUpOwogCQlpZiAoZm5vZCkgYW5vZGUtPmJ0cmVlLmZub2RlX3BhcmVudCA9IDE7CiAJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJYnJlbHNlKGJoKTsKQEAgLTIzMiwxNCArMjMyLDE0IEBACiAJCX0KIAkJYnRyZWUgPSAmZm5vZGUtPmJ0cmVlOwogCX0KLQlyYW5vZGUtPnVwID0gbm9kZTsKLQltZW1jcHkoJnJhbm9kZS0+YnRyZWUsIGJ0cmVlLCBidHJlZS0+Zmlyc3RfZnJlZSk7CisJcmFub2RlLT51cCA9IGNwdV90b19sZTMyKG5vZGUpOworCW1lbWNweSgmcmFub2RlLT5idHJlZSwgYnRyZWUsIGxlMTZfdG9fY3B1KGJ0cmVlLT5maXJzdF9mcmVlKSk7CiAJaWYgKGZub2QpIHJhbm9kZS0+YnRyZWUuZm5vZGVfcGFyZW50ID0gMTsKIAlyYW5vZGUtPmJ0cmVlLm5fZnJlZV9ub2RlcyA9IChyYW5vZGUtPmJ0cmVlLmludGVybmFsID8gNjAgOiA0MCkgLSByYW5vZGUtPmJ0cmVlLm5fdXNlZF9ub2RlczsKIAlpZiAocmFub2RlLT5idHJlZS5pbnRlcm5hbCkgZm9yIChuID0gMDsgbiA8IHJhbm9kZS0+YnRyZWUubl91c2VkX25vZGVzOyBuKyspIHsKIAkJc3RydWN0IGFub2RlICp1bm9kZTsKLQkJaWYgKCh1bm9kZSA9IGhwZnNfbWFwX2Fub2RlKHMsIHJhbm9kZS0+dS5pbnRlcm5hbFtuXS5kb3duLCAmYmgxKSkpIHsKLQkJCXVub2RlLT51cCA9IHJhOworCQlpZiAoKHVub2RlID0gaHBmc19tYXBfYW5vZGUocywgbGUzMl90b19jcHUocmFub2RlLT51LmludGVybmFsW25dLmRvd24pLCAmYmgxKSkpIHsKKwkJCXVub2RlLT51cCA9IGNwdV90b19sZTMyKHJhKTsKIAkJCXVub2RlLT5idHJlZS5mbm9kZV9wYXJlbnQgPSAwOwogCQkJbWFya19idWZmZXJfZGlydHkoYmgxKTsKIAkJCWJyZWxzZShiaDEpOwpAQCAtMjQ4LDExICsyNDgsMTEgQEAKIAlidHJlZS0+aW50ZXJuYWwgPSAxOwogCWJ0cmVlLT5uX2ZyZWVfbm9kZXMgPSBmbm9kID8gMTAgOiA1ODsKIAlidHJlZS0+bl91c2VkX25vZGVzID0gMjsKLQlidHJlZS0+Zmlyc3RfZnJlZSA9IChjaGFyICopJmJ0cmVlLT51LmludGVybmFsWzJdIC0gKGNoYXIgKilidHJlZTsKLQlidHJlZS0+dS5pbnRlcm5hbFswXS5maWxlX3NlY25vID0gZnM7Ci0JYnRyZWUtPnUuaW50ZXJuYWxbMF0uZG93biA9IHJhOwotCWJ0cmVlLT51LmludGVybmFsWzFdLmZpbGVfc2Vjbm8gPSAtMTsKLQlidHJlZS0+dS5pbnRlcm5hbFsxXS5kb3duID0gbmE7CisJYnRyZWUtPmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUxNigoY2hhciAqKSZidHJlZS0+dS5pbnRlcm5hbFsyXSAtIChjaGFyICopYnRyZWUpOworCWJ0cmVlLT51LmludGVybmFsWzBdLmZpbGVfc2Vjbm8gPSBjcHVfdG9fbGUzMihmcyk7CisJYnRyZWUtPnUuaW50ZXJuYWxbMF0uZG93biA9IGNwdV90b19sZTMyKHJhKTsKKwlidHJlZS0+dS5pbnRlcm5hbFsxXS5maWxlX3NlY25vID0gY3B1X3RvX2xlMzIoLTEpOworCWJ0cmVlLT51LmludGVybmFsWzFdLmRvd24gPSBjcHVfdG9fbGUzMihuYSk7CiAJbWFya19idWZmZXJfZGlydHkoYmgpOwogCWJyZWxzZShiaCk7CiAJbWFya19idWZmZXJfZGlydHkoYmgyKTsKQEAgLTI3OSw3ICsyNzksNyBAQAogCWdvX2Rvd246CiAJZDIgPSAwOwogCXdoaWxlIChidHJlZTEtPmludGVybmFsKSB7Ci0JCWFubyA9IGJ0cmVlMS0+dS5pbnRlcm5hbFtwb3NdLmRvd247CisJCWFubyA9IGxlMzJfdG9fY3B1KGJ0cmVlMS0+dS5pbnRlcm5hbFtwb3NdLmRvd24pOwogCQlpZiAobGV2ZWwpIGJyZWxzZShiaCk7CiAJCWlmIChocGZzX3NiKHMpLT5zYl9jaGspCiAJCQlpZiAoaHBmc19zdG9wX2N5Y2xlcyhzLCBhbm8sICZkMSwgJmQyLCAiaHBmc19yZW1vdmVfYnRyZWUgIzEiKSkKQEAgLTI5MCw3ICsyOTAsNyBAQAogCQlwb3MgPSAwOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgYnRyZWUxLT5uX3VzZWRfbm9kZXM7IGkrKykKLQkJaHBmc19mcmVlX3NlY3RvcnMocywgYnRyZWUxLT51LmV4dGVybmFsW2ldLmRpc2tfc2Vjbm8sIGJ0cmVlMS0+dS5leHRlcm5hbFtpXS5sZW5ndGgpOworCQlocGZzX2ZyZWVfc2VjdG9ycyhzLCBsZTMyX3RvX2NwdShidHJlZTEtPnUuZXh0ZXJuYWxbaV0uZGlza19zZWNubyksIGxlMzJfdG9fY3B1KGJ0cmVlMS0+dS5leHRlcm5hbFtpXS5sZW5ndGgpKTsKIAlnb191cDoKIAlpZiAoIWxldmVsKSByZXR1cm47CiAJYnJlbHNlKGJoKTsKQEAgLTI5OCwxMyArMjk4LDEzIEBACiAJCWlmIChocGZzX3N0b3BfY3ljbGVzKHMsIGFubywgJmMxLCAmYzIsICJocGZzX3JlbW92ZV9idHJlZSAjMiIpKSByZXR1cm47CiAJaHBmc19mcmVlX3NlY3RvcnMocywgYW5vLCAxKTsKIAlvYW5vID0gYW5vOwotCWFubyA9IGFub2RlLT51cDsKKwlhbm8gPSBsZTMyX3RvX2NwdShhbm9kZS0+dXApOwogCWlmICgtLWxldmVsKSB7CiAJCWlmICghKGFub2RlID0gaHBmc19tYXBfYW5vZGUocywgYW5vLCAmYmgpKSkgcmV0dXJuOwogCQlidHJlZTEgPSAmYW5vZGUtPmJ0cmVlOwogCX0gZWxzZSBidHJlZTEgPSBidHJlZTsKIAlmb3IgKGkgPSAwOyBpIDwgYnRyZWUxLT5uX3VzZWRfbm9kZXM7IGkrKykgewotCQlpZiAoYnRyZWUxLT51LmludGVybmFsW2ldLmRvd24gPT0gb2FubykgeworCQlpZiAobGUzMl90b19jcHUoYnRyZWUxLT51LmludGVybmFsW2ldLmRvd24pID09IG9hbm8pIHsKIAkJCWlmICgocG9zID0gaSArIDEpIDwgYnRyZWUxLT5uX3VzZWRfbm9kZXMpCiAJCQkJZ290byBnb19kb3duOwogCQkJZWxzZQpAQCAtNDExLDcgKzQxMSw3IEBACiAJCWlmIChmbm8pIHsKIAkJCWJ0cmVlLT5uX2ZyZWVfbm9kZXMgPSA4OwogCQkJYnRyZWUtPm5fdXNlZF9ub2RlcyA9IDA7Ci0JCQlidHJlZS0+Zmlyc3RfZnJlZSA9IDg7CisJCQlidHJlZS0+Zmlyc3RfZnJlZSA9IGNwdV90b19sZTE2KDgpOwogCQkJYnRyZWUtPmludGVybmFsID0gMDsKIAkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJfSBlbHNlIGhwZnNfZnJlZV9zZWN0b3JzKHMsIGYsIDEpOwpAQCAtNDIxLDIyICs0MjEsMjIgQEAKIAl3aGlsZSAoYnRyZWUtPmludGVybmFsKSB7CiAJCW5vZGVzID0gYnRyZWUtPm5fdXNlZF9ub2RlcyArIGJ0cmVlLT5uX2ZyZWVfbm9kZXM7CiAJCWZvciAoaSA9IDA7IGkgPCBidHJlZS0+bl91c2VkX25vZGVzOyBpKyspCi0JCQlpZiAoYnRyZWUtPnUuaW50ZXJuYWxbaV0uZmlsZV9zZWNubyA+PSBzZWNzKSBnb3RvIGY7CisJCQlpZiAobGUzMl90b19jcHUoYnRyZWUtPnUuaW50ZXJuYWxbaV0uZmlsZV9zZWNubykgPj0gc2VjcykgZ290byBmOwogCQlicmVsc2UoYmgpOwogCQlocGZzX2Vycm9yKHMsICJpbnRlcm5hbCBidHJlZSAlMDh4IGRvZXNuJ3QgZW5kIHdpdGggLTEiLCBub2RlKTsKIAkJcmV0dXJuOwogCQlmOgogCQlmb3IgKGogPSBpICsgMTsgaiA8IGJ0cmVlLT5uX3VzZWRfbm9kZXM7IGorKykKLQkJCWhwZnNfZWFfcmVtb3ZlKHMsIGJ0cmVlLT51LmludGVybmFsW2pdLmRvd24sIDEsIDApOworCQkJaHBmc19lYV9yZW1vdmUocywgbGUzMl90b19jcHUoYnRyZWUtPnUuaW50ZXJuYWxbal0uZG93biksIDEsIDApOwogCQlidHJlZS0+bl91c2VkX25vZGVzID0gaSArIDE7CiAJCWJ0cmVlLT5uX2ZyZWVfbm9kZXMgPSBub2RlcyAtIGJ0cmVlLT5uX3VzZWRfbm9kZXM7Ci0JCWJ0cmVlLT5maXJzdF9mcmVlID0gOCArIDggKiBidHJlZS0+bl91c2VkX25vZGVzOworCQlidHJlZS0+Zmlyc3RfZnJlZSA9IGNwdV90b19sZTE2KDggKyA4ICogYnRyZWUtPm5fdXNlZF9ub2Rlcyk7CiAJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKLQkJaWYgKGJ0cmVlLT51LmludGVybmFsW2ldLmZpbGVfc2Vjbm8gPT0gc2VjcykgeworCQlpZiAoYnRyZWUtPnUuaW50ZXJuYWxbaV0uZmlsZV9zZWNubyA9PSBjcHVfdG9fbGUzMihzZWNzKSkgewogCQkJYnJlbHNlKGJoKTsKIAkJCXJldHVybjsKIAkJfQotCQlub2RlID0gYnRyZWUtPnUuaW50ZXJuYWxbaV0uZG93bjsKKwkJbm9kZSA9IGxlMzJfdG9fY3B1KGJ0cmVlLT51LmludGVybmFsW2ldLmRvd24pOwogCQlicmVsc2UoYmgpOwogCQlpZiAoaHBmc19zYihzKS0+c2JfY2hrKQogCQkJaWYgKGhwZnNfc3RvcF9jeWNsZXMocywgbm9kZSwgJmMxLCAmYzIsICJocGZzX3RydW5jYXRlX2J0cmVlIikpCkBAIC00NDYsMjUgKzQ0NiwyNSBAQAogCX0JCiAJbm9kZXMgPSBidHJlZS0+bl91c2VkX25vZGVzICsgYnRyZWUtPm5fZnJlZV9ub2RlczsKIAlmb3IgKGkgPSAwOyBpIDwgYnRyZWUtPm5fdXNlZF9ub2RlczsgaSsrKQotCQlpZiAoYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZmlsZV9zZWNubyArIGJ0cmVlLT51LmV4dGVybmFsW2ldLmxlbmd0aCA+PSBzZWNzKSBnb3RvIGZmOworCQlpZiAobGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZmlsZV9zZWNubykgKyBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5sZW5ndGgpID49IHNlY3MpIGdvdG8gZmY7CiAJYnJlbHNlKGJoKTsKIAlyZXR1cm47CiAJZmY6Ci0JaWYgKHNlY3MgPD0gYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZmlsZV9zZWNubykgeworCWlmIChzZWNzIDw9IGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm8pKSB7CiAJCWhwZnNfZXJyb3IocywgInRoZXJlIGlzIGFuIGFsbG9jYXRpb24gZXJyb3IgaW4gZmlsZSAlMDh4LCBzZWN0b3IgJTA4eCIsIGYsIHNlY3MpOwogCQlpZiAoaSkgaS0tOwogCX0KLQllbHNlIGlmIChidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vICsgYnRyZWUtPnUuZXh0ZXJuYWxbaV0ubGVuZ3RoID4gc2VjcykgewotCQlocGZzX2ZyZWVfc2VjdG9ycyhzLCBidHJlZS0+dS5leHRlcm5hbFtpXS5kaXNrX3NlY25vICsgc2VjcyAtCi0JCQlidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vLCBidHJlZS0+dS5leHRlcm5hbFtpXS5sZW5ndGgKLQkJCS0gc2VjcyArIGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm8pOyAvKiBJIGhvcGUgZ2NjIG9wdGltaXplcyB0aGlzIDotKSAqLwotCQlidHJlZS0+dS5leHRlcm5hbFtpXS5sZW5ndGggPSBzZWNzIC0gYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZmlsZV9zZWNubzsKKwllbHNlIGlmIChsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vKSArIGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmxlbmd0aCkgPiBzZWNzKSB7CisJCWhwZnNfZnJlZV9zZWN0b3JzKHMsIGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmRpc2tfc2Vjbm8pICsgc2VjcyAtCisJCQlsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vKSwgbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbaV0ubGVuZ3RoKQorCQkJLSBzZWNzICsgbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZmlsZV9zZWNubykpOyAvKiBJIGhvcGUgZ2NjIG9wdGltaXplcyB0aGlzIDotKSAqLworCQlidHJlZS0+dS5leHRlcm5hbFtpXS5sZW5ndGggPSBjcHVfdG9fbGUzMihzZWNzIC0gbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZmlsZV9zZWNubykpOwogCX0KIAlmb3IgKGogPSBpICsgMTsgaiA8IGJ0cmVlLT5uX3VzZWRfbm9kZXM7IGorKykKLQkJaHBmc19mcmVlX3NlY3RvcnMocywgYnRyZWUtPnUuZXh0ZXJuYWxbal0uZGlza19zZWNubywgYnRyZWUtPnUuZXh0ZXJuYWxbal0ubGVuZ3RoKTsKKwkJaHBmc19mcmVlX3NlY3RvcnMocywgbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbal0uZGlza19zZWNubyksIGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2pdLmxlbmd0aCkpOwogCWJ0cmVlLT5uX3VzZWRfbm9kZXMgPSBpICsgMTsKIAlidHJlZS0+bl9mcmVlX25vZGVzID0gbm9kZXMgLSBidHJlZS0+bl91c2VkX25vZGVzOwotCWJ0cmVlLT5maXJzdF9mcmVlID0gOCArIDEyICogYnRyZWUtPm5fdXNlZF9ub2RlczsKKwlidHJlZS0+Zmlyc3RfZnJlZSA9IGNwdV90b19sZTE2KDggKyAxMiAqIGJ0cmVlLT5uX3VzZWRfbm9kZXMpOwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAlicmVsc2UoYmgpOwogfQpAQCAtNDgwLDEyICs0ODAsMTIgQEAKIAlzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICplYV9lbmQ7CiAJaWYgKCEoZm5vZGUgPSBocGZzX21hcF9mbm9kZShzLCBmbm8sICZiaCkpKSByZXR1cm47CiAJaWYgKCFmbm9kZS0+ZGlyZmxhZykgaHBmc19yZW1vdmVfYnRyZWUocywgJmZub2RlLT5idHJlZSk7Ci0JZWxzZSBocGZzX3JlbW92ZV9kdHJlZShzLCBmbm9kZS0+dS5leHRlcm5hbFswXS5kaXNrX3NlY25vKTsKKwllbHNlIGhwZnNfcmVtb3ZlX2R0cmVlKHMsIGxlMzJfdG9fY3B1KGZub2RlLT51LmV4dGVybmFsWzBdLmRpc2tfc2Vjbm8pKTsKIAllYV9lbmQgPSBmbm9kZV9lbmRfZWEoZm5vZGUpOwogCWZvciAoZWEgPSBmbm9kZV9lYShmbm9kZSk7IGVhIDwgZWFfZW5kOyBlYSA9IG5leHRfZWEoZWEpKQogCQlpZiAoZWEtPmluZGlyZWN0KQogCQkJaHBmc19lYV9yZW1vdmUocywgZWFfc2VjKGVhKSwgZWEtPmFub2RlLCBlYV9sZW4oZWEpKTsKLQlocGZzX2VhX2V4dF9yZW1vdmUocywgZm5vZGUtPmVhX3NlY25vLCBmbm9kZS0+ZWFfYW5vZGUsIGZub2RlLT5lYV9zaXplX2wpOworCWhwZnNfZWFfZXh0X3JlbW92ZShzLCBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2Vjbm8pLCBmbm9kZS0+ZWFfYW5vZGUsIGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zaXplX2wpKTsKIAlicmVsc2UoYmgpOwogCWhwZnNfZnJlZV9zZWN0b3JzKHMsIGZubywgMSk7CiB9CmRpZmYgLS1naXQgYS9mcy9ocGZzL2J1ZmZlci5jIGIvZnMvaHBmcy9idWZmZXIuYwppbmRleCA3OTNjYjlkLi45ZWNkZTI3IDEwMDY0NAotLS0gYS9mcy9ocGZzL2J1ZmZlci5jCisrKyBiL2ZzL2hwZnMvYnVmZmVyLmMKQEAgLTksMjIgKzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlICJocGZzX2ZuLmgiCiAKLXZvaWQgaHBmc19sb2NrX2NyZWF0aW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqcykKLXsKLSNpZmRlZiBERUJVR19MT0NLUwotCXByaW50aygibG9jayBjcmVhdGlvblxuIik7Ci0jZW5kaWYKLQltdXRleF9sb2NrKCZocGZzX3NiKHMpLT5ocGZzX2NyZWF0aW9uX2RlKTsKLX0KLQotdm9pZCBocGZzX3VubG9ja19jcmVhdGlvbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCi17Ci0jaWZkZWYgREVCVUdfTE9DS1MKLQlwcmludGsoInVubG9jayBjcmVhdGlvblxuIik7Ci0jZW5kaWYKLQltdXRleF91bmxvY2soJmhwZnNfc2IocyktPmhwZnNfY3JlYXRpb25fZGUpOwotfQotCiAvKiBNYXAgYSBzZWN0b3IgaW50byBhIGJ1ZmZlciBhbmQgcmV0dXJuIHBvaW50ZXJzIHRvIGl0IGFuZCB0byB0aGUgYnVmZmVyLiAqLwogCiB2b2lkICpocGZzX21hcF9zZWN0b3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzLCB1bnNpZ25lZCBzZWNubywgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhwLApAQCAtMzIsNiArMTYsOCBAQAogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAKKwlocGZzX2xvY2tfYXNzZXJ0KHMpOworCiAJY29uZF9yZXNjaGVkKCk7CiAKIAkqYmhwID0gYmggPSBzYl9icmVhZChzLCBzZWNubyk7CkBAIC01MCw2ICszNiw4IEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAkvKnJldHVybiBocGZzX21hcF9zZWN0b3Iocywgc2Vjbm8sIGJocCwgMCk7Ki8KIAorCWhwZnNfbG9ja19hc3NlcnQocyk7CisKIAljb25kX3Jlc2NoZWQoKTsKIAogCWlmICgoKmJocCA9IGJoID0gc2JfZ2V0YmxrKHMsIHNlY25vKSkgIT0gTlVMTCkgewpAQCAtNzAsNiArNTgsOCBAQAogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJY2hhciAqZGF0YTsKIAorCWhwZnNfbG9ja19hc3NlcnQocyk7CisKIAljb25kX3Jlc2NoZWQoKTsKIAogCWlmIChzZWNubyAmIDMpIHsKQEAgLTEyNSw2ICsxMTUsOCBAQAogewogCWNvbmRfcmVzY2hlZCgpOwogCisJaHBmc19sb2NrX2Fzc2VydChzKTsKKwogCWlmIChzZWNubyAmIDMpIHsKIAkJcHJpbnRrKCJIUEZTOiBocGZzX2dldF80c2VjdG9yczogdW5hbGlnbmVkIHJlYWRcbiIpOwogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvZGlyLmMgYi9mcy9ocGZzL2Rpci5jCmluZGV4IGIzZDdjMGQuLmY0NmFlMDIgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvZGlyLmMKKysrIGIvZnMvaHBmcy9kaXIuYwpAQCAtODgsOSArODgsOSBAQAogCQkJaHBmc19lcnJvcihpbm9kZS0+aV9zYiwgIm5vdCBhIGRpcmVjdG9yeSwgZm5vZGUgJTA4bHgiLAogCQkJCQkodW5zaWduZWQgbG9uZylpbm9kZS0+aV9pbm8pOwogCQl9Ci0JCWlmIChocGZzX2lub2RlLT5pX2RubyAhPSBmbm8tPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubykgeworCQlpZiAoaHBmc19pbm9kZS0+aV9kbm8gIT0gbGUzMl90b19jcHUoZm5vLT51LmV4dGVybmFsWzBdLmRpc2tfc2Vjbm8pKSB7CiAJCQllID0gMTsKLQkJCWhwZnNfZXJyb3IoaW5vZGUtPmlfc2IsICJjb3JydXB0ZWQgaW5vZGU6IGlfZG5vID09ICUwOHgsIGZub2RlIC0+IGRub2RlID09ICUwOHgiLCBocGZzX2lub2RlLT5pX2RubywgZm5vLT51LmV4dGVybmFsWzBdLmRpc2tfc2Vjbm8pOworCQkJaHBmc19lcnJvcihpbm9kZS0+aV9zYiwgImNvcnJ1cHRlZCBpbm9kZTogaV9kbm8gPT0gJTA4eCwgZm5vZGUgLT4gZG5vZGUgPT0gJTA4eCIsIGhwZnNfaW5vZGUtPmlfZG5vLCBsZTMyX3RvX2NwdShmbm8tPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubykpOwogCQl9CiAJCWJyZWxzZShiaCk7CiAJCWlmIChlKSB7CkBAIC0xNTYsNyArMTU2LDcgQEAKIAkJCWdvdG8gYWdhaW47CiAJCX0KIAkJdGVtcG5hbWUgPSBocGZzX3RyYW5zbGF0ZV9uYW1lKGlub2RlLT5pX3NiLCBkZS0+bmFtZSwgZGUtPm5hbWVsZW4sIGxjLCBkZS0+bm90Xzh4Myk7Ci0JCWlmIChmaWxsZGlyKGRpcmVudCwgdGVtcG5hbWUsIGRlLT5uYW1lbGVuLCBvbGRfcG9zLCBkZS0+Zm5vZGUsIERUX1VOS05PV04pIDwgMCkgeworCQlpZiAoZmlsbGRpcihkaXJlbnQsIHRlbXBuYW1lLCBkZS0+bmFtZWxlbiwgb2xkX3BvcywgbGUzMl90b19jcHUoZGUtPmZub2RlKSwgRFRfVU5LTk9XTikgPCAwKSB7CiAJCQlmaWxwLT5mX3BvcyA9IG9sZF9wb3M7CiAJCQlpZiAodGVtcG5hbWUgIT0gZGUtPm5hbWUpIGtmcmVlKHRlbXBuYW1lKTsKIAkJCWhwZnNfYnJlbHNlNCgmcWJoKTsKQEAgLTIyMSw3ICsyMjEsNyBAQAogCSAqIEdldCBpbm9kZSBudW1iZXIsIHdoYXQgd2UncmUgYWZ0ZXIuCiAJICovCiAKLQlpbm8gPSBkZS0+Zm5vZGU7CisJaW5vID0gbGUzMl90b19jcHUoZGUtPmZub2RlKTsKIAogCS8qCiAJICogR28gZmluZCBvciBtYWtlIGFuIGlub2RlLgpAQCAtMjM2LDcgKzIzNiw3IEBACiAJCWhwZnNfaW5pdF9pbm9kZShyZXN1bHQpOwogCQlpZiAoZGUtPmRpcmVjdG9yeSkKIAkJCWhwZnNfcmVhZF9pbm9kZShyZXN1bHQpOwotCQllbHNlIGlmIChkZS0+ZWFfc2l6ZSAmJiBocGZzX3NiKGRpci0+aV9zYiktPnNiX2VhcykKKwkJZWxzZSBpZiAobGUzMl90b19jcHUoZGUtPmVhX3NpemUpICYmIGhwZnNfc2IoZGlyLT5pX3NiKS0+c2JfZWFzKQogCQkJaHBmc19yZWFkX2lub2RlKHJlc3VsdCk7CiAJCWVsc2UgewogCQkJcmVzdWx0LT5pX21vZGUgfD0gU19JRlJFRzsKQEAgLTI1MCw4ICsyNTAsNiBAQAogCWhwZnNfcmVzdWx0ID0gaHBmc19pKHJlc3VsdCk7CiAJaWYgKCFkZS0+ZGlyZWN0b3J5KSBocGZzX3Jlc3VsdC0+aV9wYXJlbnRfZGlyID0gZGlyLT5pX2lubzsKIAotCWhwZnNfZGVjaWRlX2NvbnYocmVzdWx0LCBuYW1lLCBsZW4pOwotCiAJaWYgKGRlLT5oYXNfYWNsIHx8IGRlLT5oYXNfeHRkX3Blcm0pIGlmICghKGRpci0+aV9zYi0+c19mbGFncyAmIE1TX1JET05MWSkpIHsKIAkJaHBmc19lcnJvcihyZXN1bHQtPmlfc2IsICJBQ0xzIG9yIFhQRVJNIGZvdW5kLiBUaGlzIGlzIHByb2JhYmx5IEhQRlMzODYuIFRoaXMgZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCBpdCBub3cuIFNlbmQgbWUgc29tZSBpbmZvIG9uIHRoZXNlIHN0cnVjdHVyZXMiKTsKIAkJZ290byBiYWlsMTsKQEAgLTI2MywxOSArMjYxLDE5IEBACiAJICovCiAKIAlpZiAoIXJlc3VsdC0+aV9jdGltZS50dl9zZWMpIHsKLQkJaWYgKCEocmVzdWx0LT5pX2N0aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChkaXItPmlfc2IsIGRlLT5jcmVhdGlvbl9kYXRlKSkpCisJCWlmICghKHJlc3VsdC0+aV9jdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQoZGlyLT5pX3NiLCBsZTMyX3RvX2NwdShkZS0+Y3JlYXRpb25fZGF0ZSkpKSkKIAkJCXJlc3VsdC0+aV9jdGltZS50dl9zZWMgPSAxOwogCQlyZXN1bHQtPmlfY3RpbWUudHZfbnNlYyA9IDA7Ci0JCXJlc3VsdC0+aV9tdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQoZGlyLT5pX3NiLCBkZS0+d3JpdGVfZGF0ZSk7CisJCXJlc3VsdC0+aV9tdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQoZGlyLT5pX3NiLCBsZTMyX3RvX2NwdShkZS0+d3JpdGVfZGF0ZSkpOwogCQlyZXN1bHQtPmlfbXRpbWUudHZfbnNlYyA9IDA7Ci0JCXJlc3VsdC0+aV9hdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQoZGlyLT5pX3NiLCBkZS0+cmVhZF9kYXRlKTsKKwkJcmVzdWx0LT5pX2F0aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChkaXItPmlfc2IsIGxlMzJfdG9fY3B1KGRlLT5yZWFkX2RhdGUpKTsKIAkJcmVzdWx0LT5pX2F0aW1lLnR2X25zZWMgPSAwOwotCQlocGZzX3Jlc3VsdC0+aV9lYV9zaXplID0gZGUtPmVhX3NpemU7CisJCWhwZnNfcmVzdWx0LT5pX2VhX3NpemUgPSBsZTMyX3RvX2NwdShkZS0+ZWFfc2l6ZSk7CiAJCWlmICghaHBmc19yZXN1bHQtPmlfZWFfbW9kZSAmJiBkZS0+cmVhZF9vbmx5KQogCQkJcmVzdWx0LT5pX21vZGUgJj0gfjAyMjI7CiAJCWlmICghZGUtPmRpcmVjdG9yeSkgewogCQkJaWYgKHJlc3VsdC0+aV9zaXplID09IC0xKSB7Ci0JCQkJcmVzdWx0LT5pX3NpemUgPSBkZS0+ZmlsZV9zaXplOworCQkJCXJlc3VsdC0+aV9zaXplID0gbGUzMl90b19jcHUoZGUtPmZpbGVfc2l6ZSk7CiAJCQkJcmVzdWx0LT5pX2RhdGEuYV9vcHMgPSAmaHBmc19hb3BzOwogCQkJCWhwZnNfaShyZXN1bHQpLT5tbXVfcHJpdmF0ZSA9IHJlc3VsdC0+aV9zaXplOwogCQkJLyoKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvZG5vZGUuYyBiL2ZzL2hwZnMvZG5vZGUuYwppbmRleCA5YjJmZmFkLi4xZTBlMmFjIDEwMDY0NAotLS0gYS9mcy9ocGZzL2Rub2RlLmMKKysrIGIvZnMvaHBmcy9kbm9kZS5jCkBAIC0xNCwxMSArMTQsMTEgQEAKIAlzdHJ1Y3QgaHBmc19kaXJlbnQgKmRlX2VuZCA9IGRub2RlX2VuZF9kZShkKTsKIAlpbnQgaSA9IDE7CiAJZm9yIChkZSA9IGRub2RlX2ZpcnN0X2RlKGQpOyBkZSA8IGRlX2VuZDsgZGUgPSBkZV9uZXh0X2RlKGRlKSkgewotCQlpZiAoZGUgPT0gZmRlKSByZXR1cm4gKChsb2ZmX3QpIGQtPnNlbGYgPDwgNCkgfCAobG9mZl90KWk7CisJCWlmIChkZSA9PSBmZGUpIHJldHVybiAoKGxvZmZfdCkgbGUzMl90b19jcHUoZC0+c2VsZikgPDwgNCkgfCAobG9mZl90KWk7CiAJCWkrKzsKIAl9CiAJcHJpbnRrKCJIUEZTOiBnZXRfcG9zOiBub3RfZm91bmRcbiIpOwotCXJldHVybiAoKGxvZmZfdClkLT5zZWxmIDw8IDQpIHwgKGxvZmZfdCkxOworCXJldHVybiAoKGxvZmZfdClsZTMyX3RvX2NwdShkLT5zZWxmKSA8PCA0KSB8IChsb2ZmX3QpMTsKIH0KIAogdm9pZCBocGZzX2FkZF9wb3Moc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90ICpwb3MpCkBAIC0xMzAsMjkgKzEzMCwzMCBAQAogewogCXN0cnVjdCBocGZzX2RpcmVudCAqZGU7CiAJaWYgKCEoZGUgPSBkbm9kZV9sYXN0X2RlKGQpKSkgewotCQlocGZzX2Vycm9yKHMsICJzZXRfbGFzdF9wb2ludGVyOiBlbXB0eSBkbm9kZSAlMDh4IiwgZC0+c2VsZik7CisJCWhwZnNfZXJyb3IocywgInNldF9sYXN0X3BvaW50ZXI6IGVtcHR5IGRub2RlICUwOHgiLCBsZTMyX3RvX2NwdShkLT5zZWxmKSk7CiAJCXJldHVybjsKIAl9CiAJaWYgKGhwZnNfc2IocyktPnNiX2NoaykgewogCQlpZiAoZGUtPmRvd24pIHsKIAkJCWhwZnNfZXJyb3IocywgInNldF9sYXN0X3BvaW50ZXI6IGRub2RlICUwOHggaGFzIGFscmVhZHkgbGFzdCBwb2ludGVyICUwOHgiLAotCQkJCWQtPnNlbGYsIGRlX2Rvd25fcG9pbnRlcihkZSkpOworCQkJCWxlMzJfdG9fY3B1KGQtPnNlbGYpLCBkZV9kb3duX3BvaW50ZXIoZGUpKTsKIAkJCXJldHVybjsKIAkJfQotCQlpZiAoZGUtPmxlbmd0aCAhPSAzMikgewotCQkJaHBmc19lcnJvcihzLCAic2V0X2xhc3RfcG9pbnRlcjogYmFkIGxhc3QgZGlyZW50IGluIGRub2RlICUwOHgiLCBkLT5zZWxmKTsKKwkJaWYgKGxlMTZfdG9fY3B1KGRlLT5sZW5ndGgpICE9IDMyKSB7CisJCQlocGZzX2Vycm9yKHMsICJzZXRfbGFzdF9wb2ludGVyOiBiYWQgbGFzdCBkaXJlbnQgaW4gZG5vZGUgJTA4eCIsIGxlMzJfdG9fY3B1KGQtPnNlbGYpKTsKIAkJCXJldHVybjsKIAkJfQogCX0KIAlpZiAocHRyKSB7Ci0JCWlmICgoZC0+Zmlyc3RfZnJlZSArPSA0KSA+IDIwNDgpIHsKLQkJCWhwZnNfZXJyb3Iocywic2V0X2xhc3RfcG9pbnRlcjogdG9vIGxvbmcgZG5vZGUgJTA4eCIsIGQtPnNlbGYpOwotCQkJZC0+Zmlyc3RfZnJlZSAtPSA0OworCQlkLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMzIobGUzMl90b19jcHUoZC0+Zmlyc3RfZnJlZSkgKyA0KTsKKwkJaWYgKGxlMzJfdG9fY3B1KGQtPmZpcnN0X2ZyZWUpID4gMjA0OCkgeworCQkJaHBmc19lcnJvcihzLCAic2V0X2xhc3RfcG9pbnRlcjogdG9vIGxvbmcgZG5vZGUgJTA4eCIsIGxlMzJfdG9fY3B1KGQtPnNlbGYpKTsKKwkJCWQtPmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUzMihsZTMyX3RvX2NwdShkLT5maXJzdF9mcmVlKSAtIDQpOwogCQkJcmV0dXJuOwogCQl9Ci0JCWRlLT5sZW5ndGggPSAzNjsKKwkJZGUtPmxlbmd0aCA9IGNwdV90b19sZTE2KDM2KTsKIAkJZGUtPmRvd24gPSAxOwotCQkqKGRub2RlX3NlY25vICopKChjaGFyICopZGUgKyAzMikgPSBwdHI7CisJCSooZG5vZGVfc2Vjbm8gKikoKGNoYXIgKilkZSArIDMyKSA9IGNwdV90b19sZTMyKHB0cik7CiAJfQogfQogCkBAIC0xNjgsNyArMTY5LDcgQEAKIAlmb3IgKGRlID0gZG5vZGVfZmlyc3RfZGUoZCk7IGRlIDwgZGVfZW5kOyBkZSA9IGRlX25leHRfZGUoZGUpKSB7CiAJCWludCBjID0gaHBmc19jb21wYXJlX25hbWVzKHMsIG5hbWUsIG5hbWVsZW4sIGRlLT5uYW1lLCBkZS0+bmFtZWxlbiwgZGUtPmxhc3QpOwogCQlpZiAoIWMpIHsKLQkJCWhwZnNfZXJyb3IocywgIm5hbWUgKCVjLCVkKSBhbHJlYWR5IGV4aXN0cyBpbiBkbm9kZSAlMDh4IiwgKm5hbWUsIG5hbWVsZW4sIGQtPnNlbGYpOworCQkJaHBmc19lcnJvcihzLCAibmFtZSAoJWMsJWQpIGFscmVhZHkgZXhpc3RzIGluIGRub2RlICUwOHgiLCAqbmFtZSwgbmFtZWxlbiwgbGUzMl90b19jcHUoZC0+c2VsZikpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAkJaWYgKGMgPCAwKSBicmVhazsKQEAgLTE3NiwxNSArMTc3LDE0IEBACiAJbWVtbW92ZSgoY2hhciAqKWRlICsgZF9zaXplLCBkZSwgKGNoYXIgKilkZV9lbmQgLSAoY2hhciAqKWRlKTsKIAltZW1zZXQoZGUsIDAsIGRfc2l6ZSk7CiAJaWYgKGRvd25fcHRyKSB7Ci0JCSooaW50ICopKChjaGFyICopZGUgKyBkX3NpemUgLSA0KSA9IGRvd25fcHRyOworCQkqKGRub2RlX3NlY25vICopKChjaGFyICopZGUgKyBkX3NpemUgLSA0KSA9IGNwdV90b19sZTMyKGRvd25fcHRyKTsKIAkJZGUtPmRvd24gPSAxOwogCX0KLQlkZS0+bGVuZ3RoID0gZF9zaXplOwotCWlmIChkb3duX3B0cikgZGUtPmRvd24gPSAxOworCWRlLT5sZW5ndGggPSBjcHVfdG9fbGUxNihkX3NpemUpOwogCWRlLT5ub3RfOHgzID0gaHBmc19pc19uYW1lX2xvbmcobmFtZSwgbmFtZWxlbik7CiAJZGUtPm5hbWVsZW4gPSBuYW1lbGVuOwogCW1lbWNweShkZS0+bmFtZSwgbmFtZSwgbmFtZWxlbik7Ci0JZC0+Zmlyc3RfZnJlZSArPSBkX3NpemU7CisJZC0+Zmlyc3RfZnJlZSA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGQtPmZpcnN0X2ZyZWUpICsgZF9zaXplKTsKIAlyZXR1cm4gZGU7CiB9CiAKQEAgLTE5NCwyNSArMTk0LDI1IEBACiAJCQkgICBzdHJ1Y3QgaHBmc19kaXJlbnQgKmRlKQogewogCWlmIChkZS0+bGFzdCkgewotCQlocGZzX2Vycm9yKHMsICJhdHRlbXB0IHRvIGRlbGV0ZSBsYXN0IGRpcmVudCBpbiBkbm9kZSAlMDh4IiwgZC0+c2VsZik7CisJCWhwZnNfZXJyb3IocywgImF0dGVtcHQgdG8gZGVsZXRlIGxhc3QgZGlyZW50IGluIGRub2RlICUwOHgiLCBsZTMyX3RvX2NwdShkLT5zZWxmKSk7CiAJCXJldHVybjsKIAl9Ci0JZC0+Zmlyc3RfZnJlZSAtPSBkZS0+bGVuZ3RoOwotCW1lbW1vdmUoZGUsIGRlX25leHRfZGUoZGUpLCBkLT5maXJzdF9mcmVlICsgKGNoYXIgKilkIC0gKGNoYXIgKilkZSk7CisJZC0+Zmlyc3RfZnJlZSA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGQtPmZpcnN0X2ZyZWUpIC0gbGUxNl90b19jcHUoZGUtPmxlbmd0aCkpOworCW1lbW1vdmUoZGUsIGRlX25leHRfZGUoZGUpLCBsZTMyX3RvX2NwdShkLT5maXJzdF9mcmVlKSArIChjaGFyICopZCAtIChjaGFyICopZGUpOwogfQogCiBzdGF0aWMgdm9pZCBmaXhfdXBfcHRycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBkbm9kZSAqZCkKIHsKIAlzdHJ1Y3QgaHBmc19kaXJlbnQgKmRlOwogCXN0cnVjdCBocGZzX2RpcmVudCAqZGVfZW5kID0gZG5vZGVfZW5kX2RlKGQpOwotCWRub2RlX3NlY25vIGRubyA9IGQtPnNlbGY7CisJZG5vZGVfc2Vjbm8gZG5vID0gbGUzMl90b19jcHUoZC0+c2VsZik7CiAJZm9yIChkZSA9IGRub2RlX2ZpcnN0X2RlKGQpOyBkZSA8IGRlX2VuZDsgZGUgPSBkZV9uZXh0X2RlKGRlKSkKIAkJaWYgKGRlLT5kb3duKSB7CiAJCQlzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCBxYmg7CiAJCQlzdHJ1Y3QgZG5vZGUgKmRkOwogCQkJaWYgKChkZCA9IGhwZnNfbWFwX2Rub2RlKHMsIGRlX2Rvd25fcG9pbnRlcihkZSksICZxYmgpKSkgewotCQkJCWlmIChkZC0+dXAgIT0gZG5vIHx8IGRkLT5yb290X2Rub2RlKSB7Ci0JCQkJCWRkLT51cCA9IGRubzsKKwkJCQlpZiAobGUzMl90b19jcHUoZGQtPnVwKSAhPSBkbm8gfHwgZGQtPnJvb3RfZG5vZGUpIHsKKwkJCQkJZGQtPnVwID0gY3B1X3RvX2xlMzIoZG5vKTsKIAkJCQkJZGQtPnJvb3RfZG5vZGUgPSAwOwogCQkJCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaCk7CiAJCQkJfQpAQCAtMjYyLDcgKzI2Miw3IEBACiAJCQlrZnJlZShubmFtZSk7CiAJCQlyZXR1cm4gMTsKIAkJfQotCWlmIChkLT5maXJzdF9mcmVlICsgZGVfc2l6ZShuYW1lbGVuLCBkb3duX3B0cikgPD0gMjA0OCkgeworCWlmIChsZTMyX3RvX2NwdShkLT5maXJzdF9mcmVlKSArIGRlX3NpemUobmFtZWxlbiwgZG93bl9wdHIpIDw9IDIwNDgpIHsKIAkJbG9mZl90IHQ7CiAJCWNvcHlfZGUoZGU9aHBmc19hZGRfZGUoaS0+aV9zYiwgZCwgbmFtZSwgbmFtZWxlbiwgZG93bl9wdHIpLCBuZXdfZGUpOwogCQl0ID0gZ2V0X3BvcyhkLCBkZSk7CkBAIC0yODYsMTEgKzI4NiwxMSBAQAogCQlrZnJlZShubmFtZSk7CiAJCXJldHVybiAxOwogCX0JCi0JbWVtY3B5KG5kLCBkLCBkLT5maXJzdF9mcmVlKTsKKwltZW1jcHkobmQsIGQsIGxlMzJfdG9fY3B1KGQtPmZpcnN0X2ZyZWUpKTsKIAljb3B5X2RlKGRlID0gaHBmc19hZGRfZGUoaS0+aV9zYiwgbmQsIG5hbWUsIG5hbWVsZW4sIGRvd25fcHRyKSwgbmV3X2RlKTsKIAlmb3JfYWxsX3Bvc3MoaSwgaHBmc19wb3NfaW5zLCBnZXRfcG9zKG5kLCBkZSksIDEpOwogCWggPSAoKGNoYXIgKilkbm9kZV9sYXN0X2RlKG5kKSAtIChjaGFyICopbmQpIC8gMiArIDEwOwotCWlmICghKGFkID0gaHBmc19hbGxvY19kbm9kZShpLT5pX3NiLCBkLT51cCwgJmFkbm8sICZxYmgxLCAwKSkpIHsKKwlpZiAoIShhZCA9IGhwZnNfYWxsb2NfZG5vZGUoaS0+aV9zYiwgbGUzMl90b19jcHUoZC0+dXApLCAmYWRubywgJnFiaDEpKSkgewogCQlocGZzX2Vycm9yKGktPmlfc2IsICJ1bmFibGUgdG8gYWxsb2MgZG5vZGUgLSBkbm9kZSB0cmVlIHdpbGwgYmUgY29ycnVwdGVkIik7CiAJCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAkJa2ZyZWUobmQpOwpAQCAtMzEzLDIwICszMTMsMjEgQEAKIAlkb3duX3B0ciA9IGFkbm87CiAJc2V0X2xhc3RfcG9pbnRlcihpLT5pX3NiLCBhZCwgZGUtPmRvd24gPyBkZV9kb3duX3BvaW50ZXIoZGUpIDogMCk7CiAJZGUgPSBkZV9uZXh0X2RlKGRlKTsKLQltZW1tb3ZlKChjaGFyICopbmQgKyAyMCwgZGUsIG5kLT5maXJzdF9mcmVlICsgKGNoYXIgKiluZCAtIChjaGFyICopZGUpOwotCW5kLT5maXJzdF9mcmVlIC09IChjaGFyICopZGUgLSAoY2hhciAqKW5kIC0gMjA7Ci0JbWVtY3B5KGQsIG5kLCBuZC0+Zmlyc3RfZnJlZSk7CisJbWVtbW92ZSgoY2hhciAqKW5kICsgMjAsIGRlLCBsZTMyX3RvX2NwdShuZC0+Zmlyc3RfZnJlZSkgKyAoY2hhciAqKW5kIC0gKGNoYXIgKilkZSk7CisJbmQtPmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUzMihsZTMyX3RvX2NwdShuZC0+Zmlyc3RfZnJlZSkgLSAoKGNoYXIgKilkZSAtIChjaGFyICopbmQgLSAyMCkpOworCW1lbWNweShkLCBuZCwgbGUzMl90b19jcHUobmQtPmZpcnN0X2ZyZWUpKTsKIAlmb3JfYWxsX3Bvc3MoaSwgaHBmc19wb3NfZGVsLCAobG9mZl90KWRubyA8PCA0LCBwb3MpOwogCWZpeF91cF9wdHJzKGktPmlfc2IsIGFkKTsKIAlpZiAoIWQtPnJvb3RfZG5vZGUpIHsKLQkJZG5vID0gYWQtPnVwID0gZC0+dXA7CisJCWFkLT51cCA9IGQtPnVwOworCQlkbm8gPSBsZTMyX3RvX2NwdShhZC0+dXApOwogCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaCk7CiAJCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAkJaHBmc19tYXJrXzRidWZmZXJzX2RpcnR5KCZxYmgxKTsKIAkJaHBmc19icmVsc2U0KCZxYmgxKTsKIAkJZ290byBnb191cDsKIAl9Ci0JaWYgKCEocmQgPSBocGZzX2FsbG9jX2Rub2RlKGktPmlfc2IsIGQtPnVwLCAmcmRubywgJnFiaDIsIDApKSkgeworCWlmICghKHJkID0gaHBmc19hbGxvY19kbm9kZShpLT5pX3NiLCBsZTMyX3RvX2NwdShkLT51cCksICZyZG5vLCAmcWJoMikpKSB7CiAJCWhwZnNfZXJyb3IoaS0+aV9zYiwgInVuYWJsZSB0byBhbGxvYyBkbm9kZSAtIGRub2RlIHRyZWUgd2lsbCBiZSBjb3JydXB0ZWQiKTsKIAkJaHBmc19icmVsc2U0KCZxYmgpOwogCQlocGZzX2JyZWxzZTQoJnFiaDEpOwpAQCAtMzM4LDcgKzMzOSw3IEBACiAJaS0+aV9ibG9ja3MgKz0gNDsKIAlyZC0+cm9vdF9kbm9kZSA9IDE7CiAJcmQtPnVwID0gZC0+dXA7Ci0JaWYgKCEoZm5vZGUgPSBocGZzX21hcF9mbm9kZShpLT5pX3NiLCBkLT51cCwgJmJoKSkpIHsKKwlpZiAoIShmbm9kZSA9IGhwZnNfbWFwX2Zub2RlKGktPmlfc2IsIGxlMzJfdG9fY3B1KGQtPnVwKSwgJmJoKSkpIHsKIAkJaHBmc19mcmVlX2Rub2RlKGktPmlfc2IsIHJkbm8pOwogCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJCWhwZnNfYnJlbHNlNCgmcWJoMSk7CkBAIC0zNDcsMTAgKzM0OCwxMSBAQAogCQlrZnJlZShubmFtZSk7CiAJCXJldHVybiAxOwogCX0KLQlmbm9kZS0+dS5leHRlcm5hbFswXS5kaXNrX3NlY25vID0gcmRubzsKKwlmbm9kZS0+dS5leHRlcm5hbFswXS5kaXNrX3NlY25vID0gY3B1X3RvX2xlMzIocmRubyk7CiAJbWFya19idWZmZXJfZGlydHkoYmgpOwogCWJyZWxzZShiaCk7Ci0JZC0+dXAgPSBhZC0+dXAgPSBocGZzX2koaSktPmlfZG5vID0gcmRubzsKKwlocGZzX2koaSktPmlfZG5vID0gcmRubzsKKwlkLT51cCA9IGFkLT51cCA9IGNwdV90b19sZTMyKHJkbm8pOwogCWQtPnJvb3RfZG5vZGUgPSBhZC0+cm9vdF9kbm9kZSA9IDA7CiAJaHBmc19tYXJrXzRidWZmZXJzX2RpcnR5KCZxYmgpOwogCWhwZnNfYnJlbHNlNCgmcWJoKTsKQEAgLTM3Myw3ICszNzUsNyBAQAogCiBpbnQgaHBmc19hZGRfZGlyZW50KHN0cnVjdCBpbm9kZSAqaSwKIAkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIHVuc2lnbmVkIG5hbWVsZW4sCi0JCSAgICBzdHJ1Y3QgaHBmc19kaXJlbnQgKm5ld19kZSwgaW50IGNkZXB0aCkKKwkJICAgIHN0cnVjdCBocGZzX2RpcmVudCAqbmV3X2RlKQogewogCXN0cnVjdCBocGZzX2lub2RlX2luZm8gKmhwZnNfaW5vZGUgPSBocGZzX2koaSk7CiAJc3RydWN0IGRub2RlICpkOwpAQCAtNDAzLDcgKzQwNSw2IEBACiAJCX0KIAl9CiAJaHBmc19icmVsc2U0KCZxYmgpOwotCWlmICghY2RlcHRoKSBocGZzX2xvY2tfY3JlYXRpb24oaS0+aV9zYik7CiAJaWYgKGhwZnNfY2hlY2tfZnJlZV9kbm9kZXMoaS0+aV9zYiwgRlJFRV9ETk9ERVNfQUREKSkgewogCQljID0gMTsKIAkJZ290byByZXQ7CkBAIC00MTEsNyArNDEyLDYgQEAKIAlpLT5pX3ZlcnNpb24rKzsKIAljID0gaHBmc19hZGRfdG9fZG5vZGUoaSwgZG5vLCBuYW1lLCBuYW1lbGVuLCBuZXdfZGUsIDApOwogCXJldDoKLQlpZiAoIWNkZXB0aCkgaHBmc191bmxvY2tfY3JlYXRpb24oaS0+aV9zYik7CiAJcmV0dXJuIGM7CiB9CiAKQEAgLTQzNyw5ICs0MzcsOSBAQAogCQkJCXJldHVybiAwOwogCQlpZiAoIShkbm9kZSA9IGhwZnNfbWFwX2Rub2RlKGktPmlfc2IsIGRubywgJnFiaCkpKSByZXR1cm4gMDsKIAkJaWYgKGhwZnNfc2IoaS0+aV9zYiktPnNiX2NoaykgewotCQkJaWYgKGRub2RlLT51cCAhPSBjaGtfdXApIHsKKwkJCWlmIChsZTMyX3RvX2NwdShkbm9kZS0+dXApICE9IGNoa191cCkgewogCQkJCWhwZnNfZXJyb3IoaS0+aV9zYiwgIm1vdmVfdG9fdG9wOiB1cCBwb2ludGVyIGZyb20gJTA4eCBzaG91bGQgYmUgJTA4eCwgaXMgJTA4eCIsCi0JCQkJCWRubywgY2hrX3VwLCBkbm9kZS0+dXApOworCQkJCQlkbm8sIGNoa191cCwgbGUzMl90b19jcHUoZG5vZGUtPnVwKSk7CiAJCQkJaHBmc19icmVsc2U0KCZxYmgpOwogCQkJCXJldHVybiAwOwogCQkJfQpAQCAtNDU1LDcgKzQ1NSw3IEBACiAJCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAl9CiAJd2hpbGUgKCEoZGUgPSBkbm9kZV9wcmVfbGFzdF9kZShkbm9kZSkpKSB7Ci0JCWRub2RlX3NlY25vIHVwID0gZG5vZGUtPnVwOworCQlkbm9kZV9zZWNubyB1cCA9IGxlMzJfdG9fY3B1KGRub2RlLT51cCk7CiAJCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAkJaHBmc19mcmVlX2Rub2RlKGktPmlfc2IsIGRubyk7CiAJCWktPmlfc2l6ZSAtPSAyMDQ4OwpAQCAtNDc0LDggKzQ3NCw4IEBACiAJCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQlkbm9kZS0+Zmlyc3RfZnJlZSAtPSA0OwotCQlkZS0+bGVuZ3RoIC09IDQ7CisJCWRub2RlLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMzIobGUzMl90b19jcHUoZG5vZGUtPmZpcnN0X2ZyZWUpIC0gNCk7CisJCWRlLT5sZW5ndGggPSBjcHVfdG9fbGUxNihsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKSAtIDQpOwogCQlkZS0+ZG93biA9IDA7CiAJCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoKTsKIAkJZG5vID0gdXA7CkBAIC00ODMsMTIgKzQ4MywxMiBAQAogCXQgPSBnZXRfcG9zKGRub2RlLCBkZSk7CiAJZm9yX2FsbF9wb3NzKGksIGhwZnNfcG9zX3N1YnN0LCB0LCA0KTsKIAlmb3JfYWxsX3Bvc3MoaSwgaHBmc19wb3Nfc3Vic3QsIHQgKyAxLCA1KTsKLQlpZiAoIShuZGUgPSBrbWFsbG9jKGRlLT5sZW5ndGgsIEdGUF9OT0ZTKSkpIHsKKwlpZiAoIShuZGUgPSBrbWFsbG9jKGxlMTZfdG9fY3B1KGRlLT5sZW5ndGgpLCBHRlBfTk9GUykpKSB7CiAJCWhwZnNfZXJyb3IoaS0+aV9zYiwgIm91dCBvZiBtZW1vcnkgZm9yIGRpcmVudCAtIGRpcmVjdG9yeSB3aWxsIGJlIGNvcnJ1cHRlZCIpOwogCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJCXJldHVybiAwOwogCX0KLQltZW1jcHkobmRlLCBkZSwgZGUtPmxlbmd0aCk7CisJbWVtY3B5KG5kZSwgZGUsIGxlMTZfdG9fY3B1KGRlLT5sZW5ndGgpKTsKIAlkZG5vID0gZGUtPmRvd24gPyBkZV9kb3duX3BvaW50ZXIoZGUpIDogMDsKIAlocGZzX2RlbGV0ZV9kZShpLT5pX3NiLCBkbm9kZSwgZGUpOwogCXNldF9sYXN0X3BvaW50ZXIoaS0+aV9zYiwgZG5vZGUsIGRkbm8pOwpAQCAtNTE3LDExICs1MTcsMTEgQEAKIAl0cnlfaXRfYWdhaW46CiAJaWYgKGhwZnNfc3RvcF9jeWNsZXMoaS0+aV9zYiwgZG5vLCAmYzEsICZjMiwgImRlbGV0ZV9lbXB0eV9kbm9kZSIpKSByZXR1cm47CiAJaWYgKCEoZG5vZGUgPSBocGZzX21hcF9kbm9kZShpLT5pX3NiLCBkbm8sICZxYmgpKSkgcmV0dXJuOwotCWlmIChkbm9kZS0+Zmlyc3RfZnJlZSA+IDU2KSBnb3RvIGVuZDsKLQlpZiAoZG5vZGUtPmZpcnN0X2ZyZWUgPT0gNTIgfHwgZG5vZGUtPmZpcnN0X2ZyZWUgPT0gNTYpIHsKKwlpZiAobGUzMl90b19jcHUoZG5vZGUtPmZpcnN0X2ZyZWUpID4gNTYpIGdvdG8gZW5kOworCWlmIChsZTMyX3RvX2NwdShkbm9kZS0+Zmlyc3RfZnJlZSkgPT0gNTIgfHwgbGUzMl90b19jcHUoZG5vZGUtPmZpcnN0X2ZyZWUpID09IDU2KSB7CiAJCXN0cnVjdCBocGZzX2RpcmVudCAqZGVfZW5kOwogCQlpbnQgcm9vdCA9IGRub2RlLT5yb290X2Rub2RlOwotCQl1cCA9IGRub2RlLT51cDsKKwkJdXAgPSBsZTMyX3RvX2NwdShkbm9kZS0+dXApOwogCQlkZSA9IGRub2RlX2ZpcnN0X2RlKGRub2RlKTsKIAkJZG93biA9IGRlLT5kb3duID8gZGVfZG93bl9wb2ludGVyKGRlKSA6IDA7CiAJCWlmIChocGZzX3NiKGktPmlfc2IpLT5zYl9jaGspIGlmIChyb290ICYmICFkb3duKSB7CkBAIC01NDUsMTMgKzU0NSwxMyBAQAogCQkJCXJldHVybjsKIAkJCSAgICB9CiAJCQlpZiAoKGQxID0gaHBmc19tYXBfZG5vZGUoaS0+aV9zYiwgZG93biwgJnFiaDEpKSkgewotCQkJCWQxLT51cCA9IHVwOworCQkJCWQxLT51cCA9IGNwdV90b19sZTMyKHVwKTsKIAkJCQlkMS0+cm9vdF9kbm9kZSA9IDE7CiAJCQkJaHBmc19tYXJrXzRidWZmZXJzX2RpcnR5KCZxYmgxKTsKIAkJCQlocGZzX2JyZWxzZTQoJnFiaDEpOwogCQkJfQogCQkJaWYgKChmbm9kZSA9IGhwZnNfbWFwX2Zub2RlKGktPmlfc2IsIHVwLCAmYmgpKSkgewotCQkJCWZub2RlLT51LmV4dGVybmFsWzBdLmRpc2tfc2Vjbm8gPSBkb3duOworCQkJCWZub2RlLT51LmV4dGVybmFsWzBdLmRpc2tfc2Vjbm8gPSBjcHVfdG9fbGUzMihkb3duKTsKIAkJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCQkJYnJlbHNlKGJoKTsKIAkJCX0KQEAgLTU3MCwyMiArNTcwLDIyIEBACiAJCWZvcl9hbGxfcG9zcyhpLCBocGZzX3Bvc19zdWJzdCwgKChsb2ZmX3QpZG5vIDw8IDQpIHwgMSwgKChsb2ZmX3QpdXAgPDwgNCkgfCBwKTsKIAkJaWYgKCFkb3duKSB7CiAJCQlkZS0+ZG93biA9IDA7Ci0JCQlkZS0+bGVuZ3RoIC09IDQ7Ci0JCQlkbm9kZS0+Zmlyc3RfZnJlZSAtPSA0OworCQkJZGUtPmxlbmd0aCA9IGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGRlLT5sZW5ndGgpIC0gNCk7CisJCQlkbm9kZS0+Zmlyc3RfZnJlZSA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGRub2RlLT5maXJzdF9mcmVlKSAtIDQpOwogCQkJbWVtbW92ZShkZV9uZXh0X2RlKGRlKSwgKGNoYXIgKilkZV9uZXh0X2RlKGRlKSArIDQsCi0JCQkJKGNoYXIgKilkbm9kZSArIGRub2RlLT5maXJzdF9mcmVlIC0gKGNoYXIgKilkZV9uZXh0X2RlKGRlKSk7CisJCQkJKGNoYXIgKilkbm9kZSArIGxlMzJfdG9fY3B1KGRub2RlLT5maXJzdF9mcmVlKSAtIChjaGFyICopZGVfbmV4dF9kZShkZSkpOwogCQl9IGVsc2UgewogCQkJc3RydWN0IGRub2RlICpkMTsKIAkJCXN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkIHFiaDE7Ci0JCQkqKGRub2RlX3NlY25vICopICgodm9pZCAqKSBkZSArIGRlLT5sZW5ndGggLSA0KSA9IGRvd247CisJCQkqKGRub2RlX3NlY25vICopICgodm9pZCAqKSBkZSArIGxlMTZfdG9fY3B1KGRlLT5sZW5ndGgpIC0gNCkgPSBkb3duOwogCQkJaWYgKChkMSA9IGhwZnNfbWFwX2Rub2RlKGktPmlfc2IsIGRvd24sICZxYmgxKSkpIHsKLQkJCQlkMS0+dXAgPSB1cDsKKwkJCQlkMS0+dXAgPSBjcHVfdG9fbGUzMih1cCk7CiAJCQkJaHBmc19tYXJrXzRidWZmZXJzX2RpcnR5KCZxYmgxKTsKIAkJCQlocGZzX2JyZWxzZTQoJnFiaDEpOwogCQkJfQogCQl9CiAJfSBlbHNlIHsKLQkJaHBmc19lcnJvcihpLT5pX3NiLCAiZGVsZXRlX2VtcHR5X2Rub2RlOiBkbm9kZSAlMDh4LCBmaXJzdF9mcmVlID09ICUwM3giLCBkbm8sIGRub2RlLT5maXJzdF9mcmVlKTsKKwkJaHBmc19lcnJvcihpLT5pX3NiLCAiZGVsZXRlX2VtcHR5X2Rub2RlOiBkbm9kZSAlMDh4LCBmaXJzdF9mcmVlID09ICUwM3giLCBkbm8sIGxlMzJfdG9fY3B1KGRub2RlLT5maXJzdF9mcmVlKSk7CiAJCWdvdG8gZW5kOwogCX0KIApAQCAtNTk2LDE4ICs1OTYsMTggQEAKIAkJc3RydWN0IHF1YWRfYnVmZmVyX2hlYWQgcWJoMTsKIAkJaWYgKCFkZV9uZXh0LT5kb3duKSBnb3RvIGVuZG07CiAJCW5kb3duID0gZGVfZG93bl9wb2ludGVyKGRlX25leHQpOwotCQlpZiAoIShkZV9jcCA9IGttYWxsb2MoZGUtPmxlbmd0aCwgR0ZQX05PRlMpKSkgeworCQlpZiAoIShkZV9jcCA9IGttYWxsb2MobGUxNl90b19jcHUoZGUtPmxlbmd0aCksIEdGUF9OT0ZTKSkpIHsKIAkJCXByaW50aygiSFBGUzogb3V0IG9mIG1lbW9yeSBmb3IgZHRyZWUgYmFsYW5jaW5nXG4iKTsKIAkJCWdvdG8gZW5kbTsKIAkJfQotCQltZW1jcHkoZGVfY3AsIGRlLCBkZS0+bGVuZ3RoKTsKKwkJbWVtY3B5KGRlX2NwLCBkZSwgbGUxNl90b19jcHUoZGUtPmxlbmd0aCkpOwogCQlocGZzX2RlbGV0ZV9kZShpLT5pX3NiLCBkbm9kZSwgZGUpOwogCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaCk7CiAJCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAkJZm9yX2FsbF9wb3NzKGksIGhwZnNfcG9zX3N1YnN0LCAoKGxvZmZfdCl1cCA8PCA0KSB8IHAsIDQpOwogCQlmb3JfYWxsX3Bvc3MoaSwgaHBmc19wb3NfZGVsLCAoKGxvZmZfdCl1cCA8PCA0KSB8IHAsIDEpOwogCQlpZiAoZGVfY3AtPmRvd24pIGlmICgoZDEgPSBocGZzX21hcF9kbm9kZShpLT5pX3NiLCBkZV9kb3duX3BvaW50ZXIoZGVfY3ApLCAmcWJoMSkpKSB7Ci0JCQlkMS0+dXAgPSBuZG93bjsKKwkJCWQxLT51cCA9IGNwdV90b19sZTMyKG5kb3duKTsKIAkJCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoMSk7CiAJCQlocGZzX2JyZWxzZTQoJnFiaDEpOwogCQl9CkBAIC02MzUsNyArNjM1LDcgQEAKIAkJCXN0cnVjdCBocGZzX2RpcmVudCAqZGVsID0gZG5vZGVfbGFzdF9kZShkMSk7CiAJCQlkbHAgPSBkZWwtPmRvd24gPyBkZV9kb3duX3BvaW50ZXIoZGVsKSA6IDA7CiAJCQlpZiAoIWRscCAmJiBkb3duKSB7Ci0JCQkJaWYgKGQxLT5maXJzdF9mcmVlID4gMjA0NCkgeworCQkJCWlmIChsZTMyX3RvX2NwdShkMS0+Zmlyc3RfZnJlZSkgPiAyMDQ0KSB7CiAJCQkJCWlmIChocGZzX3NiKGktPmlfc2IpLT5zYl9jaGsgPj0gMikgewogCQkJCQkJcHJpbnRrKCJIUEZTOiB3YXJuaW5nOiB1bmJhbGFuY2VkIGRub2RlIHRyZWUsIHNlZSBocGZzLnR4dCA0IG1vcmUgaW5mb1xuIik7CiAJCQkJCQlwcmludGsoIkhQRlM6IHdhcm5pbmc6IHRlcm1pbmF0aW5nIGJhbGFuY2luZyBvcGVyYXRpb25cbiIpOwpAQCAtNjQ3LDM4ICs2NDcsMzggQEAKIAkJCQkJcHJpbnRrKCJIUEZTOiB3YXJuaW5nOiB1bmJhbGFuY2VkIGRub2RlIHRyZWUsIHNlZSBocGZzLnR4dCA0IG1vcmUgaW5mb1xuIik7CiAJCQkJCXByaW50aygiSFBGUzogd2FybmluZzogZ29pbidvblxuIik7CiAJCQkJfQotCQkJCWRlbC0+bGVuZ3RoICs9IDQ7CisJCQkJZGVsLT5sZW5ndGggPSBjcHVfdG9fbGUxNihsZTE2X3RvX2NwdShkZWwtPmxlbmd0aCkgKyA0KTsKIAkJCQlkZWwtPmRvd24gPSAxOwotCQkJCWQxLT5maXJzdF9mcmVlICs9IDQ7CisJCQkJZDEtPmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUzMihsZTMyX3RvX2NwdShkMS0+Zmlyc3RfZnJlZSkgKyA0KTsKIAkJCX0KIAkJCWlmIChkbHAgJiYgIWRvd24pIHsKLQkJCQlkZWwtPmxlbmd0aCAtPSA0OworCQkJCWRlbC0+bGVuZ3RoID0gY3B1X3RvX2xlMTYobGUxNl90b19jcHUoZGVsLT5sZW5ndGgpIC0gNCk7CiAJCQkJZGVsLT5kb3duID0gMDsKLQkJCQlkMS0+Zmlyc3RfZnJlZSAtPSA0OworCQkJCWQxLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMzIobGUzMl90b19jcHUoZDEtPmZpcnN0X2ZyZWUpIC0gNCk7CiAJCQl9IGVsc2UgaWYgKGRvd24pCi0JCQkJKihkbm9kZV9zZWNubyAqKSAoKHZvaWQgKikgZGVsICsgZGVsLT5sZW5ndGggLSA0KSA9IGRvd247CisJCQkJKihkbm9kZV9zZWNubyAqKSAoKHZvaWQgKikgZGVsICsgbGUxNl90b19jcHUoZGVsLT5sZW5ndGgpIC0gNCkgPSBjcHVfdG9fbGUzMihkb3duKTsKIAkJfSBlbHNlIGdvdG8gZW5kbTsKLQkJaWYgKCEoZGVfY3AgPSBrbWFsbG9jKGRlX3ByZXYtPmxlbmd0aCwgR0ZQX05PRlMpKSkgeworCQlpZiAoIShkZV9jcCA9IGttYWxsb2MobGUxNl90b19jcHUoZGVfcHJldi0+bGVuZ3RoKSwgR0ZQX05PRlMpKSkgewogCQkJcHJpbnRrKCJIUEZTOiBvdXQgb2YgbWVtb3J5IGZvciBkdHJlZSBiYWxhbmNpbmdcbiIpOwogCQkJaHBmc19icmVsc2U0KCZxYmgxKTsKIAkJCWdvdG8gZW5kbTsKIAkJfQogCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaDEpOwogCQlocGZzX2JyZWxzZTQoJnFiaDEpOwotCQltZW1jcHkoZGVfY3AsIGRlX3ByZXYsIGRlX3ByZXYtPmxlbmd0aCk7CisJCW1lbWNweShkZV9jcCwgZGVfcHJldiwgbGUxNl90b19jcHUoZGVfcHJldi0+bGVuZ3RoKSk7CiAJCWhwZnNfZGVsZXRlX2RlKGktPmlfc2IsIGRub2RlLCBkZV9wcmV2KTsKIAkJaWYgKCFkZV9wcmV2LT5kb3duKSB7Ci0JCQlkZV9wcmV2LT5sZW5ndGggKz0gNDsKKwkJCWRlX3ByZXYtPmxlbmd0aCA9IGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGRlX3ByZXYtPmxlbmd0aCkgKyA0KTsKIAkJCWRlX3ByZXYtPmRvd24gPSAxOwotCQkJZG5vZGUtPmZpcnN0X2ZyZWUgKz0gNDsKKwkJCWRub2RlLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMzIobGUzMl90b19jcHUoZG5vZGUtPmZpcnN0X2ZyZWUpICsgNCk7CiAJCX0KLQkJKihkbm9kZV9zZWNubyAqKSAoKHZvaWQgKikgZGVfcHJldiArIGRlX3ByZXYtPmxlbmd0aCAtIDQpID0gbmRvd247CisJCSooZG5vZGVfc2Vjbm8gKikgKCh2b2lkICopIGRlX3ByZXYgKyBsZTE2X3RvX2NwdShkZV9wcmV2LT5sZW5ndGgpIC0gNCkgPSBjcHVfdG9fbGUzMihuZG93bik7CiAJCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoKTsKIAkJaHBmc19icmVsc2U0KCZxYmgpOwogCQlmb3JfYWxsX3Bvc3MoaSwgaHBmc19wb3Nfc3Vic3QsICgobG9mZl90KXVwIDw8IDQpIHwgKHAgLSAxKSwgNCk7CiAJCWZvcl9hbGxfcG9zcyhpLCBocGZzX3Bvc19zdWJzdCwgKChsb2ZmX3QpdXAgPDwgNCkgfCBwLCAoKGxvZmZfdCl1cCA8PCA0KSB8IChwIC0gMSkpOwogCQlpZiAoZG93bikgaWYgKChkMSA9IGhwZnNfbWFwX2Rub2RlKGktPmlfc2IsIGRlX2Rvd25fcG9pbnRlcihkZSksICZxYmgxKSkpIHsKLQkJCWQxLT51cCA9IG5kb3duOworCQkJZDEtPnVwID0gY3B1X3RvX2xlMzIobmRvd24pOwogCQkJaHBmc19tYXJrXzRidWZmZXJzX2RpcnR5KCZxYmgxKTsKIAkJCWhwZnNfYnJlbHNlNCgmcWJoMSk7CiAJCX0KQEAgLTcwMSw3ICs3MDEsNiBAQAogewogCXN0cnVjdCBkbm9kZSAqZG5vZGUgPSBxYmgtPmRhdGE7CiAJZG5vZGVfc2Vjbm8gZG93biA9IDA7Ci0JaW50IGxvY2sgPSAwOwogCWxvZmZfdCB0OwogCWlmIChkZS0+Zmlyc3QgfHwgZGUtPmxhc3QpIHsKIAkJaHBmc19lcnJvcihpLT5pX3NiLCAiaHBmc19yZW1vdmVfZGlyZW50OiBhdHRlbXB0IHRvIGRlbGV0ZSBmaXJzdCBvciBsYXN0IGRpcmVudCBpbiBkbm9kZSAlMDh4IiwgZG5vKTsKQEAgLTcxMCwxMSArNzA5LDggQEAKIAl9CiAJaWYgKGRlLT5kb3duKSBkb3duID0gZGVfZG93bl9wb2ludGVyKGRlKTsKIAlpZiAoZGVwdGggJiYgKGRlLT5kb3duIHx8IChkZSA9PSBkbm9kZV9maXJzdF9kZShkbm9kZSkgJiYgZGVfbmV4dF9kZShkZSktPmxhc3QpKSkgewotCQlsb2NrID0gMTsKLQkJaHBmc19sb2NrX2NyZWF0aW9uKGktPmlfc2IpOwogCQlpZiAoaHBmc19jaGVja19mcmVlX2Rub2RlcyhpLT5pX3NiLCBGUkVFX0ROT0RFU19ERUwpKSB7CiAJCQlocGZzX2JyZWxzZTQocWJoKTsKLQkJCWhwZnNfdW5sb2NrX2NyZWF0aW9uKGktPmlfc2IpOwogCQkJcmV0dXJuIDI7CiAJCX0KIAl9CkBAIC03MjcsMTEgKzcyMyw5IEBACiAJCWRub2RlX3NlY25vIGEgPSBtb3ZlX3RvX3RvcChpLCBkb3duLCBkbm8pOwogCQlmb3JfYWxsX3Bvc3MoaSwgaHBmc19wb3Nfc3Vic3QsIDUsIHQpOwogCQlpZiAoYSkgZGVsZXRlX2VtcHR5X2Rub2RlKGksIGEpOwotCQlpZiAobG9jaykgaHBmc191bmxvY2tfY3JlYXRpb24oaS0+aV9zYik7CiAJCXJldHVybiAhYTsKIAl9CiAJZGVsZXRlX2VtcHR5X2Rub2RlKGksIGRubyk7Ci0JaWYgKGxvY2spIGhwZnNfdW5sb2NrX2NyZWF0aW9uKGktPmlfc2IpOwogCXJldHVybiAwOwogfQogCkBAIC03NTEsOCArNzQ1LDggQEAKIAlwdHIgPSAwOwogCWdvX3VwOgogCWlmICghKGRub2RlID0gaHBmc19tYXBfZG5vZGUocywgZG5vLCAmcWJoKSkpIHJldHVybjsKLQlpZiAoaHBmc19zYihzKS0+c2JfY2hrKSBpZiAob2RubyAmJiBvZG5vICE9IC0xICYmIGRub2RlLT51cCAhPSBvZG5vKQotCQlocGZzX2Vycm9yKHMsICJocGZzX2NvdW50X2Rub2RlczogYmFkIHVwIHBvaW50ZXI7IGRub2RlICUwOHgsIGRvd24gJTA4eCBwb2ludHMgdG8gJTA4eCIsIG9kbm8sIGRubywgZG5vZGUtPnVwKTsKKwlpZiAoaHBmc19zYihzKS0+c2JfY2hrKSBpZiAob2RubyAmJiBvZG5vICE9IC0xICYmIGxlMzJfdG9fY3B1KGRub2RlLT51cCkgIT0gb2RubykKKwkJaHBmc19lcnJvcihzLCAiaHBmc19jb3VudF9kbm9kZXM6IGJhZCB1cCBwb2ludGVyOyBkbm9kZSAlMDh4LCBkb3duICUwOHggcG9pbnRzIHRvICUwOHgiLCBvZG5vLCBkbm8sIGxlMzJfdG9fY3B1KGRub2RlLT51cCkpOwogCWRlID0gZG5vZGVfZmlyc3RfZGUoZG5vZGUpOwogCWlmIChwdHIpIHdoaWxlKDEpIHsKIAkJaWYgKGRlLT5kb3duKSBpZiAoZGVfZG93bl9wb2ludGVyKGRlKSA9PSBwdHIpIGdvdG8gcHJvY2Vzc19kZTsKQEAgLTc3Niw3ICs3NzAsNyBAQAogCWlmICghZGUtPmZpcnN0ICYmICFkZS0+bGFzdCAmJiBuX2l0ZW1zKSAoKm5faXRlbXMpKys7CiAJaWYgKChkZSA9IGRlX25leHRfZGUoZGUpKSA8IGRub2RlX2VuZF9kZShkbm9kZSkpIGdvdG8gbmV4dF9kZTsKIAlwdHIgPSBkbm87Ci0JZG5vID0gZG5vZGUtPnVwOworCWRubyA9IGxlMzJfdG9fY3B1KGRub2RlLT51cCk7CiAJaWYgKGRub2RlLT5yb290X2Rub2RlKSB7CiAJCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAkJcmV0dXJuOwpAQCAtODI0LDggKzgxOCw4IEBACiAJCQlyZXR1cm4gZDsKIAlpZiAoIShkZSA9IG1hcF9udGhfZGlyZW50KHMsIGQsIDEsICZxYmgsIE5VTEwpKSkgcmV0dXJuIGRubzsKIAlpZiAoaHBmc19zYihzKS0+c2JfY2hrKQotCQlpZiAodXAgJiYgKChzdHJ1Y3QgZG5vZGUgKilxYmguZGF0YSktPnVwICE9IHVwKQotCQkJaHBmc19lcnJvcihzLCAiaHBmc19kZV9hc19kb3duX2FzX3Bvc3NpYmxlOiBiYWQgdXAgcG9pbnRlcjsgZG5vZGUgJTA4eCwgZG93biAlMDh4IHBvaW50cyB0byAlMDh4IiwgdXAsIGQsICgoc3RydWN0IGRub2RlICopcWJoLmRhdGEpLT51cCk7CisJCWlmICh1cCAmJiBsZTMyX3RvX2NwdSgoKHN0cnVjdCBkbm9kZSAqKXFiaC5kYXRhKS0+dXApICE9IHVwKQorCQkJaHBmc19lcnJvcihzLCAiaHBmc19kZV9hc19kb3duX2FzX3Bvc3NpYmxlOiBiYWQgdXAgcG9pbnRlcjsgZG5vZGUgJTA4eCwgZG93biAlMDh4IHBvaW50cyB0byAlMDh4IiwgdXAsIGQsIGxlMzJfdG9fY3B1KCgoc3RydWN0IGRub2RlICopcWJoLmRhdGEpLT51cCkpOwogCWlmICghZGUtPmRvd24pIHsKIAkJaHBmc19icmVsc2U0KCZxYmgpOwogCQlyZXR1cm4gZDsKQEAgLTg3NCw3ICs4NjgsNyBAQAogCS8qIEdvaW5nIHVwICovCiAJaWYgKGRub2RlLT5yb290X2Rub2RlKSBnb3RvIGJhaWw7CiAKLQlpZiAoISh1cF9kbm9kZSA9IGhwZnNfbWFwX2Rub2RlKGlub2RlLT5pX3NiLCBkbm9kZS0+dXAsICZxYmgwKSkpCisJaWYgKCEodXBfZG5vZGUgPSBocGZzX21hcF9kbm9kZShpbm9kZS0+aV9zYiwgbGUzMl90b19jcHUoZG5vZGUtPnVwKSwgJnFiaDApKSkKIAkJZ290byBiYWlsOwogCiAJZW5kX3VwX2RlID0gZG5vZGVfZW5kX2RlKHVwX2Rub2RlKTsKQEAgLTg4MiwxNiArODc2LDE2IEBACiAJZm9yICh1cF9kZSA9IGRub2RlX2ZpcnN0X2RlKHVwX2Rub2RlKTsgdXBfZGUgPCBlbmRfdXBfZGU7CiAJICAgICB1cF9kZSA9IGRlX25leHRfZGUodXBfZGUpKSB7CiAJCWlmICghKCsrYyAmIDA3NykpIGhwZnNfZXJyb3IoaW5vZGUtPmlfc2IsCi0JCQkibWFwX3Bvc19kaXJlbnQ6IHBvcyBjcm9zc2VkIGRub2RlIGJvdW5kYXJ5OyBkbm9kZSA9ICUwOHgiLCBkbm9kZS0+dXApOworCQkJIm1hcF9wb3NfZGlyZW50OiBwb3MgY3Jvc3NlZCBkbm9kZSBib3VuZGFyeTsgZG5vZGUgPSAlMDh4IiwgbGUzMl90b19jcHUoZG5vZGUtPnVwKSk7CiAJCWlmICh1cF9kZS0+ZG93biAmJiBkZV9kb3duX3BvaW50ZXIodXBfZGUpID09IGRubykgewotCQkJKnBvc3AgPSAoKGxvZmZfdCkgZG5vZGUtPnVwIDw8IDQpICsgYzsKKwkJCSpwb3NwID0gKChsb2ZmX3QpIGxlMzJfdG9fY3B1KGRub2RlLT51cCkgPDwgNCkgKyBjOwogCQkJaHBmc19icmVsc2U0KCZxYmgwKTsKIAkJCXJldHVybiBkZTsKIAkJfQogCX0KIAkKIAlocGZzX2Vycm9yKGlub2RlLT5pX3NiLCAibWFwX3Bvc19kaXJlbnQ6IHBvaW50ZXIgdG8gZG5vZGUgJTA4eCBub3QgZm91bmQgaW4gcGFyZW50IGRub2RlICUwOHgiLAotCQlkbm8sIGRub2RlLT51cCk7CisJCWRubywgbGUzMl90b19jcHUoZG5vZGUtPnVwKSk7CiAJaHBmc19icmVsc2U0KCZxYmgwKTsKIAkKIAliYWlsOgpAQCAtMTAxNywxNyArMTAxMSwxNyBAQAogCQkvKm5hbWUyWzE1XSA9IDB4ZmY7Ki8KIAkJbmFtZTFsZW4gPSAxNTsgbmFtZTJsZW4gPSAyNTY7CiAJfQotCWlmICghKHVwZiA9IGhwZnNfbWFwX2Zub2RlKHMsIGYtPnVwLCAmYmgpKSkgeworCWlmICghKHVwZiA9IGhwZnNfbWFwX2Zub2RlKHMsIGxlMzJfdG9fY3B1KGYtPnVwKSwgJmJoKSkpIHsKIAkJa2ZyZWUobmFtZTIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CQogCWlmICghdXBmLT5kaXJmbGFnKSB7CiAJCWJyZWxzZShiaCk7Ci0JCWhwZnNfZXJyb3IocywgImZub2RlICUwOHggaGFzIG5vbi1kaXJlY3RvcnkgcGFyZW50ICUwOHgiLCBmbm8sIGYtPnVwKTsKKwkJaHBmc19lcnJvcihzLCAiZm5vZGUgJTA4eCBoYXMgbm9uLWRpcmVjdG9yeSBwYXJlbnQgJTA4eCIsIGZubywgbGUzMl90b19jcHUoZi0+dXApKTsKIAkJa2ZyZWUobmFtZTIpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JZG5vID0gdXBmLT51LmV4dGVybmFsWzBdLmRpc2tfc2Vjbm87CisJZG5vID0gbGUzMl90b19jcHUodXBmLT51LmV4dGVybmFsWzBdLmRpc2tfc2Vjbm8pOwogCWJyZWxzZShiaCk7CiAJZ29fZG93bjoKIAlkb3duZCA9IDA7CkBAIC0xMDQ5LDcgKzEwNDMsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAJbmV4dF9kZToKLQlpZiAoZGUtPmZub2RlID09IGZubykgeworCWlmIChsZTMyX3RvX2NwdShkZS0+Zm5vZGUpID09IGZubykgewogCQlrZnJlZShuYW1lMik7CiAJCXJldHVybiBkZTsKIAl9CkBAIC0xMDY1LDcgKzEwNTksNyBAQAogCQlnb3RvIGdvX2Rvd247CiAJfQogCWY6Ci0JaWYgKGRlLT5mbm9kZSA9PSBmbm8pIHsKKwlpZiAobGUzMl90b19jcHUoZGUtPmZub2RlKSA9PSBmbm8pIHsKIAkJa2ZyZWUobmFtZTIpOwogCQlyZXR1cm4gZGU7CiAJfQpAQCAtMTA3NCw3ICsxMDY4LDcgQEAKIAlpZiAoKGRlID0gZGVfbmV4dF9kZShkZSkpIDwgZGVfZW5kKSBnb3RvIG5leHRfZGU7CiAJaWYgKGQtPnJvb3RfZG5vZGUpIGdvdG8gbm90X2ZvdW5kOwogCWRvd25kID0gZG5vOwotCWRubyA9IGQtPnVwOworCWRubyA9IGxlMzJfdG9fY3B1KGQtPnVwKTsKIAlocGZzX2JyZWxzZTQocWJoKTsKIAlpZiAoaHBmc19zYihzKS0+c2JfY2hrKQogCQlpZiAoaHBmc19zdG9wX2N5Y2xlcyhzLCBkb3duZCwgJmQxLCAmZDIsICJtYXBfZm5vZGVfZGlyZW50ICMyIikpIHsKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvZWEuYyBiL2ZzL2hwZnMvZWEuYwppbmRleCA0NWU1M2Q5Li5kOGI4NGQxIDEwMDY0NAotLS0gYS9mcy9ocGZzL2VhLmMKKysrIGIvZnMvaHBmcy9lYS5jCkBAIC0yNCw3ICsyNCw3IEBACiAJCX0KIAkJaWYgKGhwZnNfZWFfcmVhZChzLCBhLCBhbm8sIHBvcywgNCwgZXgpKSByZXR1cm47CiAJCWlmIChlYS0+aW5kaXJlY3QpIHsKLQkJCWlmIChlYS0+dmFsdWVsZW4gIT0gOCkgeworCQkJaWYgKGVhX3ZhbHVlbGVuKGVhKSAhPSA4KSB7CiAJCQkJaHBmc19lcnJvcihzLCAiZWEtPmluZGlyZWN0IHNldCB3aGlsZSBlYS0+dmFsdWVsZW4hPTgsICVzICUwOHgsIHBvcyAlMDh4IiwKIAkJCQkJYW5vID8gImFub2RlIiA6ICJzZWN0b3JzIiwgYSwgcG9zKTsKIAkJCQlyZXR1cm47CkBAIC0zMyw3ICszMyw3IEBACiAJCQkJcmV0dXJuOwogCQkJaHBmc19lYV9yZW1vdmUocywgZWFfc2VjKGVhKSwgZWEtPmFub2RlLCBlYV9sZW4oZWEpKTsKIAkJfQotCQlwb3MgKz0gZWEtPm5hbWVsZW4gKyBlYS0+dmFsdWVsZW4gKyA1OworCQlwb3MgKz0gZWEtPm5hbWVsZW4gKyBlYV92YWx1ZWxlbihlYSkgKyA1OwogCX0KIAlpZiAoIWFubykgaHBmc19mcmVlX3NlY3RvcnMocywgYSwgKGxlbis1MTEpID4+IDkpOwogCWVsc2UgewpAQCAtNzYsMjQgKzc2LDI0IEBACiAJdW5zaWduZWQgcG9zOwogCWludCBhbm8sIGxlbjsKIAlzZWNubyBhOworCWNoYXIgZXhbNCArIDI1NSArIDEgKyA4XTsKIAlzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICplYTsKIAlzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICplYV9lbmQgPSBmbm9kZV9lbmRfZWEoZm5vZGUpOwogCWZvciAoZWEgPSBmbm9kZV9lYShmbm9kZSk7IGVhIDwgZWFfZW5kOyBlYSA9IG5leHRfZWEoZWEpKQogCQlpZiAoIXN0cmNtcChlYS0+bmFtZSwga2V5KSkgewogCQkJaWYgKGVhLT5pbmRpcmVjdCkKIAkJCQlnb3RvIGluZGlyZWN0OwotCQkJaWYgKGVhLT52YWx1ZWxlbiA+PSBzaXplKQorCQkJaWYgKGVhX3ZhbHVlbGVuKGVhKSA+PSBzaXplKQogCQkJCXJldHVybiAtRUlOVkFMOwotCQkJbWVtY3B5KGJ1ZiwgZWFfZGF0YShlYSksIGVhLT52YWx1ZWxlbik7Ci0JCQlidWZbZWEtPnZhbHVlbGVuXSA9IDA7CisJCQltZW1jcHkoYnVmLCBlYV9kYXRhKGVhKSwgZWFfdmFsdWVsZW4oZWEpKTsKKwkJCWJ1ZltlYV92YWx1ZWxlbihlYSldID0gMDsKIAkJCXJldHVybiAwOwogCQl9Ci0JYSA9IGZub2RlLT5lYV9zZWNubzsKLQlsZW4gPSBmbm9kZS0+ZWFfc2l6ZV9sOworCWEgPSBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2Vjbm8pOworCWxlbiA9IGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zaXplX2wpOwogCWFubyA9IGZub2RlLT5lYV9hbm9kZTsKIAlwb3MgPSAwOwogCXdoaWxlIChwb3MgPCBsZW4pIHsKLQkJY2hhciBleFs0ICsgMjU1ICsgMSArIDhdOwogCQllYSA9IChzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICopZXg7CiAJCWlmIChwb3MgKyA0ID4gbGVuKSB7CiAJCQlocGZzX2Vycm9yKHMsICJFQXMgZG9uJ3QgZW5kIGNvcnJlY3RseSwgJXMgJTA4eCwgbGVuICUwOHgiLApAQCAtMTA2LDE0ICsxMDYsMTQgQEAKIAkJaWYgKCFzdHJjbXAoZWEtPm5hbWUsIGtleSkpIHsKIAkJCWlmIChlYS0+aW5kaXJlY3QpCiAJCQkJZ290byBpbmRpcmVjdDsKLQkJCWlmIChlYS0+dmFsdWVsZW4gPj0gc2l6ZSkKKwkJCWlmIChlYV92YWx1ZWxlbihlYSkgPj0gc2l6ZSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWlmIChocGZzX2VhX3JlYWQocywgYSwgYW5vLCBwb3MgKyA0ICsgZWEtPm5hbWVsZW4gKyAxLCBlYS0+dmFsdWVsZW4sIGJ1ZikpCisJCQlpZiAoaHBmc19lYV9yZWFkKHMsIGEsIGFubywgcG9zICsgNCArIGVhLT5uYW1lbGVuICsgMSwgZWFfdmFsdWVsZW4oZWEpLCBidWYpKQogCQkJCXJldHVybiAtRUlPOwotCQkJYnVmW2VhLT52YWx1ZWxlbl0gPSAwOworCQkJYnVmW2VhX3ZhbHVlbGVuKGVhKV0gPSAwOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJcG9zICs9IGVhLT5uYW1lbGVuICsgZWEtPnZhbHVlbGVuICsgNTsKKwkJcG9zICs9IGVhLT5uYW1lbGVuICsgZWFfdmFsdWVsZW4oZWEpICsgNTsKIAl9CiAJcmV0dXJuIC1FTk9FTlQ7CiBpbmRpcmVjdDoKQEAgLTEzOCwxNiArMTM4LDE2IEBACiAJCWlmICghc3RyY21wKGVhLT5uYW1lLCBrZXkpKSB7CiAJCQlpZiAoZWEtPmluZGlyZWN0KQogCQkJCXJldHVybiBnZXRfaW5kaXJlY3RfZWEocywgZWEtPmFub2RlLCBlYV9zZWMoZWEpLCAqc2l6ZSA9IGVhX2xlbihlYSkpOwotCQkJaWYgKCEocmV0ID0ga21hbGxvYygoKnNpemUgPSBlYS0+dmFsdWVsZW4pICsgMSwgR0ZQX05PRlMpKSkgeworCQkJaWYgKCEocmV0ID0ga21hbGxvYygoKnNpemUgPSBlYV92YWx1ZWxlbihlYSkpICsgMSwgR0ZQX05PRlMpKSkgewogCQkJCXByaW50aygiSFBGUzogb3V0IG9mIG1lbW9yeSBmb3IgRUFcbiIpOwogCQkJCXJldHVybiBOVUxMOwogCQkJfQotCQkJbWVtY3B5KHJldCwgZWFfZGF0YShlYSksIGVhLT52YWx1ZWxlbik7Ci0JCQlyZXRbZWEtPnZhbHVlbGVuXSA9IDA7CisJCQltZW1jcHkocmV0LCBlYV9kYXRhKGVhKSwgZWFfdmFsdWVsZW4oZWEpKTsKKwkJCXJldFtlYV92YWx1ZWxlbihlYSldID0gMDsKIAkJCXJldHVybiByZXQ7CiAJCX0KLQlhID0gZm5vZGUtPmVhX3NlY25vOwotCWxlbiA9IGZub2RlLT5lYV9zaXplX2w7CisJYSA9IGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zZWNubyk7CisJbGVuID0gbGUzMl90b19jcHUoZm5vZGUtPmVhX3NpemVfbCk7CiAJYW5vID0gZm5vZGUtPmVhX2Fub2RlOwogCXBvcyA9IDA7CiAJd2hpbGUgKHBvcyA8IGxlbikgewpAQCAtMTY0LDE4ICsxNjQsMTggQEAKIAkJaWYgKCFzdHJjbXAoZWEtPm5hbWUsIGtleSkpIHsKIAkJCWlmIChlYS0+aW5kaXJlY3QpCiAJCQkJcmV0dXJuIGdldF9pbmRpcmVjdF9lYShzLCBlYS0+YW5vZGUsIGVhX3NlYyhlYSksICpzaXplID0gZWFfbGVuKGVhKSk7Ci0JCQlpZiAoIShyZXQgPSBrbWFsbG9jKCgqc2l6ZSA9IGVhLT52YWx1ZWxlbikgKyAxLCBHRlBfTk9GUykpKSB7CisJCQlpZiAoIShyZXQgPSBrbWFsbG9jKCgqc2l6ZSA9IGVhX3ZhbHVlbGVuKGVhKSkgKyAxLCBHRlBfTk9GUykpKSB7CiAJCQkJcHJpbnRrKCJIUEZTOiBvdXQgb2YgbWVtb3J5IGZvciBFQVxuIik7CiAJCQkJcmV0dXJuIE5VTEw7CiAJCQl9Ci0JCQlpZiAoaHBmc19lYV9yZWFkKHMsIGEsIGFubywgcG9zICsgNCArIGVhLT5uYW1lbGVuICsgMSwgZWEtPnZhbHVlbGVuLCByZXQpKSB7CisJCQlpZiAoaHBmc19lYV9yZWFkKHMsIGEsIGFubywgcG9zICsgNCArIGVhLT5uYW1lbGVuICsgMSwgZWFfdmFsdWVsZW4oZWEpLCByZXQpKSB7CiAJCQkJa2ZyZWUocmV0KTsKIAkJCQlyZXR1cm4gTlVMTDsKIAkJCX0KLQkJCXJldFtlYS0+dmFsdWVsZW5dID0gMDsKKwkJCXJldFtlYV92YWx1ZWxlbihlYSldID0gMDsKIAkJCXJldHVybiByZXQ7CiAJCX0KLQkJcG9zICs9IGVhLT5uYW1lbGVuICsgZWEtPnZhbHVlbGVuICsgNTsKKwkJcG9zICs9IGVhLT5uYW1lbGVuICsgZWFfdmFsdWVsZW4oZWEpICsgNTsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0yMDIsMTMgKzIwMiwxMyBAQAogCQkJaWYgKGVhLT5pbmRpcmVjdCkgewogCQkJCWlmIChlYV9sZW4oZWEpID09IHNpemUpCiAJCQkJCXNldF9pbmRpcmVjdF9lYShzLCBlYS0+YW5vZGUsIGVhX3NlYyhlYSksIGRhdGEsIHNpemUpOwotCQkJfSBlbHNlIGlmIChlYS0+dmFsdWVsZW4gPT0gc2l6ZSkgeworCQkJfSBlbHNlIGlmIChlYV92YWx1ZWxlbihlYSkgPT0gc2l6ZSkgewogCQkJCW1lbWNweShlYV9kYXRhKGVhKSwgZGF0YSwgc2l6ZSk7CiAJCQl9CiAJCQlyZXR1cm47CiAJCX0KLQlhID0gZm5vZGUtPmVhX3NlY25vOwotCWxlbiA9IGZub2RlLT5lYV9zaXplX2w7CisJYSA9IGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zZWNubyk7CisJbGVuID0gbGUzMl90b19jcHUoZm5vZGUtPmVhX3NpemVfbCk7CiAJYW5vID0gZm5vZGUtPmVhX2Fub2RlOwogCXBvcyA9IDA7CiAJd2hpbGUgKHBvcyA8IGxlbikgewpAQCAtMjI4LDY4ICsyMjgsNzAgQEAKIAkJCQkJc2V0X2luZGlyZWN0X2VhKHMsIGVhLT5hbm9kZSwgZWFfc2VjKGVhKSwgZGF0YSwgc2l6ZSk7CiAJCQl9CiAJCQllbHNlIHsKLQkJCQlpZiAoZWEtPnZhbHVlbGVuID09IHNpemUpCisJCQkJaWYgKGVhX3ZhbHVlbGVuKGVhKSA9PSBzaXplKQogCQkJCQlocGZzX2VhX3dyaXRlKHMsIGEsIGFubywgcG9zICsgNCArIGVhLT5uYW1lbGVuICsgMSwgc2l6ZSwgZGF0YSk7CiAJCQl9CiAJCQlyZXR1cm47CiAJCX0KLQkJcG9zICs9IGVhLT5uYW1lbGVuICsgZWEtPnZhbHVlbGVuICsgNTsKKwkJcG9zICs9IGVhLT5uYW1lbGVuICsgZWFfdmFsdWVsZW4oZWEpICsgNTsKIAl9Ci0JaWYgKCFmbm9kZS0+ZWFfb2ZmcykgewotCQkvKmlmIChmbm9kZS0+ZWFfc2l6ZV9zKSB7CisJaWYgKCFsZTE2X3RvX2NwdShmbm9kZS0+ZWFfb2ZmcykpIHsKKwkJLyppZiAobGUxNl90b19jcHUoZm5vZGUtPmVhX3NpemVfcykpIHsKIAkJCWhwZnNfZXJyb3IocywgImZub2RlICUwOHg6IGVhX3NpemVfcyA9PSAlMDN4LCBlYV9vZmZzID09IDAiLAotCQkJCWlub2RlLT5pX2lubywgZm5vZGUtPmVhX3NpemVfcyk7CisJCQkJaW5vZGUtPmlfaW5vLCBsZTE2X3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9zKSk7CiAJCQlyZXR1cm47CiAJCX0qLwotCQlmbm9kZS0+ZWFfb2ZmcyA9IDB4YzQ7CisJCWZub2RlLT5lYV9vZmZzID0gY3B1X3RvX2xlMTYoMHhjNCk7CiAJfQotCWlmIChmbm9kZS0+ZWFfb2ZmcyA8IDB4YzQgfHwgZm5vZGUtPmVhX29mZnMgKyBmbm9kZS0+YWNsX3NpemVfcyArIGZub2RlLT5lYV9zaXplX3MgPiAweDIwMCkgeworCWlmIChsZTE2X3RvX2NwdShmbm9kZS0+ZWFfb2ZmcykgPCAweGM0IHx8IGxlMTZfdG9fY3B1KGZub2RlLT5lYV9vZmZzKSArIGxlMTZfdG9fY3B1KGZub2RlLT5hY2xfc2l6ZV9zKSArIGxlMTZfdG9fY3B1KGZub2RlLT5lYV9zaXplX3MpID4gMHgyMDApIHsKIAkJaHBmc19lcnJvcihzLCAiZm5vZGUgJTA4bHg6IGVhX29mZnMgPT0gJTAzeCwgZWFfc2l6ZV9zID09ICUwM3giLAogCQkJKHVuc2lnbmVkIGxvbmcpaW5vZGUtPmlfaW5vLAotCQkJZm5vZGUtPmVhX29mZnMsIGZub2RlLT5lYV9zaXplX3MpOworCQkJbGUzMl90b19jcHUoZm5vZGUtPmVhX29mZnMpLCBsZTE2X3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9zKSk7CiAJCXJldHVybjsKIAl9Ci0JaWYgKChmbm9kZS0+ZWFfc2l6ZV9zIHx8ICFmbm9kZS0+ZWFfc2l6ZV9sKSAmJgotCSAgICAgZm5vZGUtPmVhX29mZnMgKyBmbm9kZS0+YWNsX3NpemVfcyArIGZub2RlLT5lYV9zaXplX3MgKyBzdHJsZW4oa2V5KSArIHNpemUgKyA1IDw9IDB4MjAwKSB7CisJaWYgKChsZTE2X3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9zKSB8fCAhbGUzMl90b19jcHUoZm5vZGUtPmVhX3NpemVfbCkpICYmCisJICAgICBsZTE2X3RvX2NwdShmbm9kZS0+ZWFfb2ZmcykgKyBsZTE2X3RvX2NwdShmbm9kZS0+YWNsX3NpemVfcykgKyBsZTE2X3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9zKSArIHN0cmxlbihrZXkpICsgc2l6ZSArIDUgPD0gMHgyMDApIHsKIAkJZWEgPSBmbm9kZV9lbmRfZWEoZm5vZGUpOwogCQkqKGNoYXIgKillYSA9IDA7CiAJCWVhLT5uYW1lbGVuID0gc3RybGVuKGtleSk7Ci0JCWVhLT52YWx1ZWxlbiA9IHNpemU7CisJCWVhLT52YWx1ZWxlbl9sbyA9IHNpemU7CisJCWVhLT52YWx1ZWxlbl9oaSA9IHNpemUgPj4gODsKIAkJc3RyY3B5KGVhLT5uYW1lLCBrZXkpOwogCQltZW1jcHkoZWFfZGF0YShlYSksIGRhdGEsIHNpemUpOwotCQlmbm9kZS0+ZWFfc2l6ZV9zICs9IHN0cmxlbihrZXkpICsgc2l6ZSArIDU7CisJCWZub2RlLT5lYV9zaXplX3MgPSBjcHVfdG9fbGUxNihsZTE2X3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9zKSArIHN0cmxlbihrZXkpICsgc2l6ZSArIDUpOwogCQlnb3RvIHJldDsKIAl9CiAJLyogTW9zdCB0aGUgY29kZSBoZXJlIGlzIDk5Ljk5OTM0MjIlIHVudXNlZC4gSSBob3BlIHRoZXJlIGFyZSBubyBidWdzLgogCSAgIEJ1dCB3aGF0IC4uIEhQRlMuSUZTIGhhcyBhbHNvIGJ1Z3MgaW4gZWEgbWFuYWdlbWVudC4gKi8KLQlpZiAoZm5vZGUtPmVhX3NpemVfcyAmJiAhZm5vZGUtPmVhX3NpemVfbCkgeworCWlmIChsZTE2X3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9zKSAmJiAhbGUzMl90b19jcHUoZm5vZGUtPmVhX3NpemVfbCkpIHsKIAkJc2Vjbm8gbjsKIAkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAkJY2hhciAqZGF0YTsKLQkJaWYgKCEobiA9IGhwZnNfYWxsb2Nfc2VjdG9yKHMsIGZubywgMSwgMCwgMSkpKSByZXR1cm47CisJCWlmICghKG4gPSBocGZzX2FsbG9jX3NlY3RvcihzLCBmbm8sIDEsIDApKSkgcmV0dXJuOwogCQlpZiAoIShkYXRhID0gaHBmc19nZXRfc2VjdG9yKHMsIG4sICZiaCkpKSB7CiAJCQlocGZzX2ZyZWVfc2VjdG9ycyhzLCBuLCAxKTsKIAkJCXJldHVybjsKIAkJfQotCQltZW1jcHkoZGF0YSwgZm5vZGVfZWEoZm5vZGUpLCBmbm9kZS0+ZWFfc2l6ZV9zKTsKLQkJZm5vZGUtPmVhX3NpemVfbCA9IGZub2RlLT5lYV9zaXplX3M7Ci0JCWZub2RlLT5lYV9zaXplX3MgPSAwOwotCQlmbm9kZS0+ZWFfc2Vjbm8gPSBuOwotCQlmbm9kZS0+ZWFfYW5vZGUgPSAwOworCQltZW1jcHkoZGF0YSwgZm5vZGVfZWEoZm5vZGUpLCBsZTE2X3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9zKSk7CisJCWZub2RlLT5lYV9zaXplX2wgPSBjcHVfdG9fbGUzMihsZTE2X3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9zKSk7CisJCWZub2RlLT5lYV9zaXplX3MgPSBjcHVfdG9fbGUxNigwKTsKKwkJZm5vZGUtPmVhX3NlY25vID0gY3B1X3RvX2xlMzIobik7CisJCWZub2RlLT5lYV9hbm9kZSA9IGNwdV90b19sZTMyKDApOwogCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCWJyZWxzZShiaCk7CiAJfQotCXBvcyA9IGZub2RlLT5lYV9zaXplX2wgKyA1ICsgc3RybGVuKGtleSkgKyBzaXplOwotCWxlbiA9IChmbm9kZS0+ZWFfc2l6ZV9sICsgNTExKSA+PiA5OworCXBvcyA9IGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zaXplX2wpICsgNSArIHN0cmxlbihrZXkpICsgc2l6ZTsKKwlsZW4gPSAobGUzMl90b19jcHUoZm5vZGUtPmVhX3NpemVfbCkgKyA1MTEpID4+IDk7CiAJaWYgKHBvcyA+PSAzMDAwMCkgZ290byBiYWlsOwogCXdoaWxlICgoKHBvcyArIDUxMSkgPj4gOSkgPiBsZW4pIHsKIAkJaWYgKCFsZW4pIHsKLQkJCWlmICghKGZub2RlLT5lYV9zZWNubyA9IGhwZnNfYWxsb2Nfc2VjdG9yKHMsIGZubywgMSwgMCwgMSkpKQotCQkJCWdvdG8gYmFpbDsKKwkJCXNlY25vIHEgPSBocGZzX2FsbG9jX3NlY3RvcihzLCBmbm8sIDEsIDApOworCQkJaWYgKCFxKSBnb3RvIGJhaWw7CisJCQlmbm9kZS0+ZWFfc2Vjbm8gPSBjcHVfdG9fbGUzMihxKTsKIAkJCWZub2RlLT5lYV9hbm9kZSA9IDA7CiAJCQlsZW4rKzsKIAkJfSBlbHNlIGlmICghZm5vZGUtPmVhX2Fub2RlKSB7Ci0JCQlpZiAoaHBmc19hbGxvY19pZl9wb3NzaWJsZShzLCBmbm9kZS0+ZWFfc2Vjbm8gKyBsZW4pKSB7CisJCQlpZiAoaHBmc19hbGxvY19pZl9wb3NzaWJsZShzLCBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2Vjbm8pICsgbGVuKSkgewogCQkJCWxlbisrOwogCQkJfSBlbHNlIHsKIAkJCQkvKiBBYXJnaC4uLiBkb24ndCBrbm93IGhvdyB0byBjcmVhdGUgZWEgYW5vZGVzIDotKCAqLwpAQCAtMjk4LDI2ICszMDAsMjYgQEAKIAkJCQlhbm9kZV9zZWNubyBhX3M7CiAJCQkJaWYgKCEoYW5vZGUgPSBocGZzX2FsbG9jX2Fub2RlKHMsIGZubywgJmFfcywgJmJoKSkpCiAJCQkJCWdvdG8gYmFpbDsKLQkJCQlhbm9kZS0+dXAgPSBmbm87CisJCQkJYW5vZGUtPnVwID0gY3B1X3RvX2xlMzIoZm5vKTsKIAkJCQlhbm9kZS0+YnRyZWUuZm5vZGVfcGFyZW50ID0gMTsKIAkJCQlhbm9kZS0+YnRyZWUubl9mcmVlX25vZGVzLS07CiAJCQkJYW5vZGUtPmJ0cmVlLm5fdXNlZF9ub2RlcysrOwotCQkJCWFub2RlLT5idHJlZS5maXJzdF9mcmVlICs9IDEyOwotCQkJCWFub2RlLT51LmV4dGVybmFsWzBdLmRpc2tfc2Vjbm8gPSBmbm9kZS0+ZWFfc2Vjbm87Ci0JCQkJYW5vZGUtPnUuZXh0ZXJuYWxbMF0uZmlsZV9zZWNubyA9IDA7Ci0JCQkJYW5vZGUtPnUuZXh0ZXJuYWxbMF0ubGVuZ3RoID0gbGVuOworCQkJCWFub2RlLT5idHJlZS5maXJzdF9mcmVlID0gY3B1X3RvX2xlMTYobGUxNl90b19jcHUoYW5vZGUtPmJ0cmVlLmZpcnN0X2ZyZWUpICsgMTIpOworCQkJCWFub2RlLT51LmV4dGVybmFsWzBdLmRpc2tfc2Vjbm8gPSBjcHVfdG9fbGUzMihsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2Vjbm8pKTsKKwkJCQlhbm9kZS0+dS5leHRlcm5hbFswXS5maWxlX3NlY25vID0gY3B1X3RvX2xlMzIoMCk7CisJCQkJYW5vZGUtPnUuZXh0ZXJuYWxbMF0ubGVuZ3RoID0gY3B1X3RvX2xlMzIobGVuKTsKIAkJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCQkJYnJlbHNlKGJoKTsKIAkJCQlmbm9kZS0+ZWFfYW5vZGUgPSAxOwotCQkJCWZub2RlLT5lYV9zZWNubyA9IGFfczsqLworCQkJCWZub2RlLT5lYV9zZWNubyA9IGNwdV90b19sZTMyKGFfcyk7Ki8KIAkJCQlzZWNubyBuZXdfc2VjOwogCQkJCWludCBpOwotCQkJCWlmICghKG5ld19zZWMgPSBocGZzX2FsbG9jX3NlY3RvcihzLCBmbm8sIDEsIDEgLSAoKHBvcyArIDUxMSkgPj4gOSksIDEpKSkKKwkJCQlpZiAoIShuZXdfc2VjID0gaHBmc19hbGxvY19zZWN0b3IocywgZm5vLCAxLCAxIC0gKChwb3MgKyA1MTEpID4+IDkpKSkpCiAJCQkJCWdvdG8gYmFpbDsKIAkJCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKIAkJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDEsICpiaDI7CiAJCQkJCXZvaWQgKmIxLCAqYjI7Ci0JCQkJCWlmICghKGIxID0gaHBmc19tYXBfc2VjdG9yKHMsIGZub2RlLT5lYV9zZWNubyArIGksICZiaDEsIGxlbiAtIGkgLSAxKSkpIHsKKwkJCQkJaWYgKCEoYjEgPSBocGZzX21hcF9zZWN0b3IocywgbGUzMl90b19jcHUoZm5vZGUtPmVhX3NlY25vKSArIGksICZiaDEsIGxlbiAtIGkgLSAxKSkpIHsKIAkJCQkJCWhwZnNfZnJlZV9zZWN0b3JzKHMsIG5ld19zZWMsIChwb3MgKyA1MTEpID4+IDkpOwogCQkJCQkJZ290byBiYWlsOwogCQkJCQl9CkBAIC0zMzEsMTMgKzMzMywxMyBAQAogCQkJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaDIpOwogCQkJCQlicmVsc2UoYmgyKTsKIAkJCQl9Ci0JCQkJaHBmc19mcmVlX3NlY3RvcnMocywgZm5vZGUtPmVhX3NlY25vLCBsZW4pOwotCQkJCWZub2RlLT5lYV9zZWNubyA9IG5ld19zZWM7CisJCQkJaHBmc19mcmVlX3NlY3RvcnMocywgbGUzMl90b19jcHUoZm5vZGUtPmVhX3NlY25vKSwgbGVuKTsKKwkJCQlmbm9kZS0+ZWFfc2Vjbm8gPSBjcHVfdG9fbGUzMihuZXdfc2VjKTsKIAkJCQlsZW4gPSAocG9zICsgNTExKSA+PiA5OwogCQkJfQogCQl9CiAJCWlmIChmbm9kZS0+ZWFfYW5vZGUpIHsKLQkJCWlmIChocGZzX2FkZF9zZWN0b3JfdG9fYnRyZWUocywgZm5vZGUtPmVhX3NlY25vLAorCQkJaWYgKGhwZnNfYWRkX3NlY3Rvcl90b19idHJlZShzLCBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2Vjbm8pLAogCQkJCQkJICAgICAwLCBsZW4pICE9IC0xKSB7CiAJCQkJbGVuKys7CiAJCQl9IGVsc2UgewpAQCAtMzQ5LDE3ICszNTEsMTcgQEAKIAloWzFdID0gc3RybGVuKGtleSk7CiAJaFsyXSA9IHNpemUgJiAweGZmOwogCWhbM10gPSBzaXplID4+IDg7Ci0JaWYgKGhwZnNfZWFfd3JpdGUocywgZm5vZGUtPmVhX3NlY25vLCBmbm9kZS0+ZWFfYW5vZGUsIGZub2RlLT5lYV9zaXplX2wsIDQsIGgpKSBnb3RvIGJhaWw7Ci0JaWYgKGhwZnNfZWFfd3JpdGUocywgZm5vZGUtPmVhX3NlY25vLCBmbm9kZS0+ZWFfYW5vZGUsIGZub2RlLT5lYV9zaXplX2wgKyA0LCBoWzFdICsgMSwga2V5KSkgZ290byBiYWlsOwotCWlmIChocGZzX2VhX3dyaXRlKHMsIGZub2RlLT5lYV9zZWNubywgZm5vZGUtPmVhX2Fub2RlLCBmbm9kZS0+ZWFfc2l6ZV9sICsgNSArIGhbMV0sIHNpemUsIGRhdGEpKSBnb3RvIGJhaWw7Ci0JZm5vZGUtPmVhX3NpemVfbCA9IHBvczsKKwlpZiAoaHBmc19lYV93cml0ZShzLCBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2Vjbm8pLCBmbm9kZS0+ZWFfYW5vZGUsIGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zaXplX2wpLCA0LCBoKSkgZ290byBiYWlsOworCWlmIChocGZzX2VhX3dyaXRlKHMsIGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zZWNubyksIGZub2RlLT5lYV9hbm9kZSwgbGUzMl90b19jcHUoZm5vZGUtPmVhX3NpemVfbCkgKyA0LCBoWzFdICsgMSwga2V5KSkgZ290byBiYWlsOworCWlmIChocGZzX2VhX3dyaXRlKHMsIGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zZWNubyksIGZub2RlLT5lYV9hbm9kZSwgbGUzMl90b19jcHUoZm5vZGUtPmVhX3NpemVfbCkgKyA1ICsgaFsxXSwgc2l6ZSwgZGF0YSkpIGdvdG8gYmFpbDsKKwlmbm9kZS0+ZWFfc2l6ZV9sID0gY3B1X3RvX2xlMzIocG9zKTsKIAlyZXQ6CiAJaHBmc19pKGlub2RlKS0+aV9lYV9zaXplICs9IDUgKyBzdHJsZW4oa2V5KSArIHNpemU7CiAJcmV0dXJuOwogCWJhaWw6Ci0JaWYgKGZub2RlLT5lYV9zZWNubykKLQkJaWYgKGZub2RlLT5lYV9hbm9kZSkgaHBmc190cnVuY2F0ZV9idHJlZShzLCBmbm9kZS0+ZWFfc2Vjbm8sIDEsIChmbm9kZS0+ZWFfc2l6ZV9sICsgNTExKSA+PiA5KTsKLQkJZWxzZSBocGZzX2ZyZWVfc2VjdG9ycyhzLCBmbm9kZS0+ZWFfc2Vjbm8gKyAoKGZub2RlLT5lYV9zaXplX2wgKyA1MTEpID4+IDkpLCBsZW4gLSAoKGZub2RlLT5lYV9zaXplX2wgKyA1MTEpID4+IDkpKTsKLQllbHNlIGZub2RlLT5lYV9zZWNubyA9IGZub2RlLT5lYV9zaXplX2wgPSAwOworCWlmIChsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2Vjbm8pKQorCQlpZiAoZm5vZGUtPmVhX2Fub2RlKSBocGZzX3RydW5jYXRlX2J0cmVlKHMsIGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zZWNubyksIDEsIChsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9sKSArIDUxMSkgPj4gOSk7CisJCWVsc2UgaHBmc19mcmVlX3NlY3RvcnMocywgbGUzMl90b19jcHUoZm5vZGUtPmVhX3NlY25vKSArICgobGUzMl90b19jcHUoZm5vZGUtPmVhX3NpemVfbCkgKyA1MTEpID4+IDkpLCBsZW4gLSAoKGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zaXplX2wpICsgNTExKSA+PiA5KSk7CisJZWxzZSBmbm9kZS0+ZWFfc2Vjbm8gPSBmbm9kZS0+ZWFfc2l6ZV9sID0gY3B1X3RvX2xlMzIoMCk7CiB9CiAJCmRpZmYgLS1naXQgYS9mcy9ocGZzL2ZpbGUuYyBiL2ZzL2hwZnMvZmlsZS5jCmluZGV4IDliOWViNjkuLjg5YzUwMGUgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvZmlsZS5jCisrKyBiL2ZzL2hwZnMvZmlsZS5jCkBAIC0yMCw4ICsyMCw4IEBACiAKIGludCBocGZzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGludCBkYXRhc3luYykKIHsKLQkvKnJldHVybiBmaWxlX2ZzeW5jKGZpbGUsIGRhdGFzeW5jKTsqLwotCXJldHVybiAwOyAvKiBEb24ndCBmc3luYyA6LSkgKi8KKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9tYXBwaW5nLT5ob3N0OworCXJldHVybiBzeW5jX2Jsb2NrZGV2KGlub2RlLT5pX3NiLT5zX2JkZXYpOwogfQogCiAvKgpAQCAtNDgsMzggKzQ4LDQ2IEBACiBzdGF0aWMgdm9pZCBocGZzX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaSkKIHsKIAlpZiAoSVNfSU1NVVRBQkxFKGkpKSByZXR1cm4gLyotRVBFUk0qLzsKLQlocGZzX2xvY2soaS0+aV9zYik7CisJaHBmc19sb2NrX2Fzc2VydChpLT5pX3NiKTsKKwogCWhwZnNfaShpKS0+aV9uX3NlY3MgPSAwOwogCWktPmlfYmxvY2tzID0gMSArICgoaS0+aV9zaXplICsgNTExKSA+PiA5KTsKIAlocGZzX2koaSktPm1tdV9wcml2YXRlID0gaS0+aV9zaXplOwogCWhwZnNfdHJ1bmNhdGVfYnRyZWUoaS0+aV9zYiwgaS0+aV9pbm8sIDEsICgoaS0+aV9zaXplICsgNTExKSA+PiA5KSk7CiAJaHBmc193cml0ZV9pbm9kZShpKTsKIAlocGZzX2koaSktPmlfbl9zZWNzID0gMDsKLQlocGZzX3VubG9jayhpLT5pX3NiKTsKIH0KIAogc3RhdGljIGludCBocGZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQogeworCWludCByOwogCXNlY25vIHM7CisJaHBmc19sb2NrKGlub2RlLT5pX3NiKTsKIAlzID0gaHBmc19ibWFwKGlub2RlLCBpYmxvY2spOwogCWlmIChzKSB7CiAJCW1hcF9iaChiaF9yZXN1bHQsIGlub2RlLT5pX3NiLCBzKTsKLQkJcmV0dXJuIDA7CisJCWdvdG8gcmV0XzA7CiAJfQotCWlmICghY3JlYXRlKSByZXR1cm4gMDsKKwlpZiAoIWNyZWF0ZSkgZ290byByZXRfMDsKIAlpZiAoaWJsb2NrPDw5ICE9IGhwZnNfaShpbm9kZSktPm1tdV9wcml2YXRlKSB7CiAJCUJVRygpOwotCQlyZXR1cm4gLUVJTzsKKwkJciA9IC1FSU87CisJCWdvdG8gcmV0X3I7CiAJfQogCWlmICgocyA9IGhwZnNfYWRkX3NlY3Rvcl90b19idHJlZShpbm9kZS0+aV9zYiwgaW5vZGUtPmlfaW5vLCAxLCBpbm9kZS0+aV9ibG9ja3MgLSAxKSkgPT0gLTEpIHsKIAkJaHBmc190cnVuY2F0ZV9idHJlZShpbm9kZS0+aV9zYiwgaW5vZGUtPmlfaW5vLCAxLCBpbm9kZS0+aV9ibG9ja3MgLSAxKTsKLQkJcmV0dXJuIC1FTk9TUEM7CisJCXIgPSAtRU5PU1BDOworCQlnb3RvIHJldF9yOwogCX0KIAlpbm9kZS0+aV9ibG9ja3MrKzsKIAlocGZzX2koaW5vZGUpLT5tbXVfcHJpdmF0ZSArPSA1MTI7CiAJc2V0X2J1ZmZlcl9uZXcoYmhfcmVzdWx0KTsKIAltYXBfYmgoYmhfcmVzdWx0LCBpbm9kZS0+aV9zYiwgcyk7Ci0JcmV0dXJuIDA7CisJcmV0XzA6CisJciA9IDA7CisJcmV0X3I6CisJaHBmc191bmxvY2soaW5vZGUtPmlfc2IpOworCXJldHVybiByOwogfQogCiBzdGF0aWMgaW50IGhwZnNfd3JpdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKQEAgLTEzMCw4ICsxMzgsMTEgQEAKIAlzc2l6ZV90IHJldHZhbDsKIAogCXJldHZhbCA9IGRvX3N5bmNfd3JpdGUoZmlsZSwgYnVmLCBjb3VudCwgcHBvcyk7Ci0JaWYgKHJldHZhbCA+IDApCisJaWYgKHJldHZhbCA+IDApIHsKKwkJaHBmc19sb2NrKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfc2IpOwogCQlocGZzX2koZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmlfZGlydHkgPSAxOworCQlocGZzX3VubG9jayhmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3NiKTsKKwl9CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvaHBmcy9ocGZzLmggYi9mcy9ocGZzL2hwZnMuaAppbmRleCAwZTg0YzczLi44YjA2NTBhIDEwMDY0NAotLS0gYS9mcy9ocGZzL2hwZnMuaAorKysgYi9mcy9ocGZzL2hwZnMuaApAQCAtMTksOSArMTksMTMgQEAKICAgIEZvciBkZWZpbml0aXZlIGluZm9ybWF0aW9uIG9uIEhQRlMsIGFzayBzb21lYm9keSBlbHNlIC0tIHRoaXMgaXMgZ3Vlc3N3b3JrLgogICAgVGhlcmUgYXJlIGNlcnRhaW4gdG8gYmUgbWFueSBtaXN0YWtlcy4gKi8KIAorI2lmICFkZWZpbmVkKF9fTElUVExFX0VORElBTikgJiYgIWRlZmluZWQoX19CSUdfRU5ESUFOKQorI2Vycm9yIHVua25vd24gZW5kaWFuCisjZW5kaWYKKwogLyogTm90YXRpb24gKi8KIAotdHlwZWRlZiB1bnNpZ25lZCBzZWNubzsJCQkvKiBzZWN0b3IgbnVtYmVyLCBwYXJ0aXRpb24gcmVsYXRpdmUgKi8KK3R5cGVkZWYgdTMyIHNlY25vOwkJCS8qIHNlY3RvciBudW1iZXIsIHBhcnRpdGlvbiByZWxhdGl2ZSAqLwogCiB0eXBlZGVmIHNlY25vIGRub2RlX3NlY25vOwkJLyogc2VjdG9yIG51bWJlciBvZiBhIGRub2RlICovCiB0eXBlZGVmIHNlY25vIGZub2RlX3NlY25vOwkJLyogc2VjdG9yIG51bWJlciBvZiBhbiBmbm9kZSAqLwpAQCAtMzgsMjggKzQyLDI4IEBACiAKIHN0cnVjdCBocGZzX2Jvb3RfYmxvY2sKIHsKLSAgdW5zaWduZWQgY2hhciBqbXBbM107Ci0gIHVuc2lnbmVkIGNoYXIgb2VtX2lkWzhdOwotICB1bnNpZ25lZCBjaGFyIGJ5dGVzX3Blcl9zZWN0b3JbMl07CS8qIDUxMiAqLwotICB1bnNpZ25lZCBjaGFyIHNlY3RvcnNfcGVyX2NsdXN0ZXI7Ci0gIHVuc2lnbmVkIGNoYXIgbl9yZXNlcnZlZF9zZWN0b3JzWzJdOwotICB1bnNpZ25lZCBjaGFyIG5fZmF0czsKLSAgdW5zaWduZWQgY2hhciBuX3Jvb3RkaXJfZW50cmllc1syXTsKLSAgdW5zaWduZWQgY2hhciBuX3NlY3RvcnNfc1syXTsKLSAgdW5zaWduZWQgY2hhciBtZWRpYV9ieXRlOwotICB1bnNpZ25lZCBzaG9ydCBzZWN0b3JzX3Blcl9mYXQ7Ci0gIHVuc2lnbmVkIHNob3J0IHNlY3RvcnNfcGVyX3RyYWNrOwotICB1bnNpZ25lZCBzaG9ydCBoZWFkc19wZXJfY3lsOwotICB1bnNpZ25lZCBpbnQgbl9oaWRkZW5fc2VjdG9yczsKLSAgdW5zaWduZWQgaW50IG5fc2VjdG9yc19sOwkJLyogc2l6ZSBvZiBwYXJ0aXRpb24gKi8KLSAgdW5zaWduZWQgY2hhciBkcml2ZV9udW1iZXI7Ci0gIHVuc2lnbmVkIGNoYXIgbWJ6OwotICB1bnNpZ25lZCBjaGFyIHNpZ18yOGg7CQkvKiAyOGggKi8KLSAgdW5zaWduZWQgY2hhciB2b2xfc2Vybm9bNF07Ci0gIHVuc2lnbmVkIGNoYXIgdm9sX2xhYmVsWzExXTsKLSAgdW5zaWduZWQgY2hhciBzaWdfaHBmc1s4XTsJCS8qICJIUEZTICAgICIgKi8KLSAgdW5zaWduZWQgY2hhciBwYWRbNDQ4XTsKLSAgdW5zaWduZWQgc2hvcnQgbWFnaWM7CQkJLyogYWE1NSAqLworICB1OCBqbXBbM107CisgIHU4IG9lbV9pZFs4XTsKKyAgdTggYnl0ZXNfcGVyX3NlY3RvclsyXTsJLyogNTEyICovCisgIHU4IHNlY3RvcnNfcGVyX2NsdXN0ZXI7CisgIHU4IG5fcmVzZXJ2ZWRfc2VjdG9yc1syXTsKKyAgdTggbl9mYXRzOworICB1OCBuX3Jvb3RkaXJfZW50cmllc1syXTsKKyAgdTggbl9zZWN0b3JzX3NbMl07CisgIHU4IG1lZGlhX2J5dGU7CisgIHUxNiBzZWN0b3JzX3Blcl9mYXQ7CisgIHUxNiBzZWN0b3JzX3Blcl90cmFjazsKKyAgdTE2IGhlYWRzX3Blcl9jeWw7CisgIHUzMiBuX2hpZGRlbl9zZWN0b3JzOworICB1MzIgbl9zZWN0b3JzX2w7CQkvKiBzaXplIG9mIHBhcnRpdGlvbiAqLworICB1OCBkcml2ZV9udW1iZXI7CisgIHU4IG1iejsKKyAgdTggc2lnXzI4aDsJCQkvKiAyOGggKi8KKyAgdTggdm9sX3Nlcm5vWzRdOworICB1OCB2b2xfbGFiZWxbMTFdOworICB1OCBzaWdfaHBmc1s4XTsJCS8qICJIUEZTICAgICIgKi8KKyAgdTggcGFkWzQ0OF07CisgIHUxNiBtYWdpYzsJCQkvKiBhYTU1ICovCiB9OwogCiAKQEAgLTcxLDMxICs3NSwyOSBAQAogCiBzdHJ1Y3QgaHBmc19zdXBlcl9ibG9jawogewotICB1bnNpZ25lZCBtYWdpYzsJCQkvKiBmOTk1IGU4NDkgKi8KLSAgdW5zaWduZWQgbWFnaWMxOwkJCS8qIGZhNTMgZTljNSwgbW9yZSBtYWdpYz8gKi8KLSAgLyp1bnNpZ25lZCBodWgyMDI7Ki8JCQkvKiA/PyAyMDIgPSBOLiBvZiBCLiBpbiAxLjAwMzkwNjI1IFMuKi8KLSAgY2hhciB2ZXJzaW9uOwkJCQkvKiB2ZXJzaW9uIG9mIGEgZmlsZXN5c3RlbSAgdXN1YWxseSAyICovCi0gIGNoYXIgZnVuY3ZlcnNpb247CQkJLyogZnVuY3Rpb25hbCB2ZXJzaW9uIC0gb2xkZXN0IHZlcnNpb24KKyAgdTMyIG1hZ2ljOwkJCQkvKiBmOTk1IGU4NDkgKi8KKyAgdTMyIG1hZ2ljMTsJCQkJLyogZmE1MyBlOWM1LCBtb3JlIG1hZ2ljPyAqLworICB1OCB2ZXJzaW9uOwkJCQkvKiB2ZXJzaW9uIG9mIGEgZmlsZXN5c3RlbSAgdXN1YWxseSAyICovCisgIHU4IGZ1bmN2ZXJzaW9uOwkJCS8qIGZ1bmN0aW9uYWwgdmVyc2lvbiAtIG9sZGVzdCB2ZXJzaW9uCiAgIAkJCQkJICAgb2YgZmlsZXN5c3RlbSB0aGF0IGNhbiB1bmRlcnN0YW5kCiAJCQkJCSAgIHRoaXMgZGlzayAqLwotICB1bnNpZ25lZCBzaG9ydCBpbnQgemVybzsJCS8qIDAgKi8KKyAgdTE2IHplcm87CQkJCS8qIDAgKi8KICAgZm5vZGVfc2Vjbm8gcm9vdDsJCQkvKiBmbm9kZSBvZiByb290IGRpcmVjdG9yeSAqLwogICBzZWNubyBuX3NlY3RvcnM7CQkJLyogc2l6ZSBvZiBmaWxlc3lzdGVtICovCi0gIHVuc2lnbmVkIG5fYmFkYmxvY2tzOwkJCS8qIG51bWJlciBvZiBiYWQgYmxvY2tzICovCisgIHUzMiBuX2JhZGJsb2NrczsJCQkvKiBudW1iZXIgb2YgYmFkIGJsb2NrcyAqLwogICBzZWNubyBiaXRtYXBzOwkJCS8qIHBvaW50ZXJzIHRvIGZyZWUgc3BhY2UgYml0IG1hcHMgKi8KLSAgdW5zaWduZWQgemVybzE7CQkJLyogMCAqLworICB1MzIgemVybzE7CQkJCS8qIDAgKi8KICAgc2Vjbm8gYmFkYmxvY2tzOwkJCS8qIGJhZCBibG9jayBsaXN0ICovCi0gIHVuc2lnbmVkIHplcm8zOwkJCS8qIDAgKi8KKyAgdTMyIHplcm8zOwkJCQkvKiAwICovCiAgIHRpbWUzMl90IGxhc3RfY2hrZHNrOwkJCS8qIGRhdGUgbGFzdCBjaGVja2VkLCAwIGlmIG5ldmVyICovCi0gIC8qdW5zaWduZWQgemVybzQ7Ki8JCQkvKiAwICovCi0gIHRpbWUzMl90IGxhc3Rfb3B0aW1pemU7CQkJLyogZGF0ZSBsYXN0IG9wdGltaXplZCwgMCBpZiBuZXZlciAqLworICB0aW1lMzJfdCBsYXN0X29wdGltaXplOwkJLyogZGF0ZSBsYXN0IG9wdGltaXplZCwgMCBpZiBuZXZlciAqLwogICBzZWNubyBuX2Rpcl9iYW5kOwkJCS8qIG51bWJlciBvZiBzZWN0b3JzIGluIGRpciBiYW5kICovCiAgIHNlY25vIGRpcl9iYW5kX3N0YXJ0OwkJCS8qIGZpcnN0IHNlY3RvciBpbiBkaXIgYmFuZCAqLwogICBzZWNubyBkaXJfYmFuZF9lbmQ7CQkJLyogbGFzdCBzZWN0b3IgaW4gZGlyIGJhbmQgKi8KICAgc2Vjbm8gZGlyX2JhbmRfYml0bWFwOwkJLyogZnJlZSBzcGFjZSBtYXAsIDEgZG5vZGUgcGVyIGJpdCAqLwotICBjaGFyIHZvbHVtZV9uYW1lWzMyXTsJCQkvKiBub3QgdXNlZCAqLworICB1OCB2b2x1bWVfbmFtZVszMl07CQkJLyogbm90IHVzZWQgKi8KICAgc2Vjbm8gdXNlcl9pZF90YWJsZTsJCQkvKiA4IHByZWFsbG9jYXRlZCBzZWN0b3JzIC0gdXNlciBpZCAqLwotICB1bnNpZ25lZCB6ZXJvNlsxMDNdOwkJCS8qIDAgKi8KKyAgdTMyIHplcm82WzEwM107CQkJLyogMCAqLwogfTsKIAogCkBAIC0xMDcsNDQgKzEwOSw2NSBAQAogCiBzdHJ1Y3QgaHBmc19zcGFyZV9ibG9jawogewotICB1bnNpZ25lZCBtYWdpYzsJCQkvKiBmOTkxIDE4NDkgKi8KLSAgdW5zaWduZWQgbWFnaWMxOwkJCS8qIGZhNTIgMjljNSwgbW9yZSBtYWdpYz8gKi8KKyAgdTMyIG1hZ2ljOwkJCQkvKiBmOTkxIDE4NDkgKi8KKyAgdTMyIG1hZ2ljMTsJCQkJLyogZmE1MiAyOWM1LCBtb3JlIG1hZ2ljPyAqLwogCi0gIHVuc2lnbmVkIGRpcnR5OiAxOwkJCS8qIDAgY2xlYW4sIDEgImltcHJvcGVybHkgc3RvcHBlZCIgKi8KLSAgLyp1bnNpZ25lZCBmbGFnMTIzNDogNDsqLwkJLyogdW5rbm93biBmbGFncyAqLwotICB1bnNpZ25lZCBzcGFyZWRpcl91c2VkOiAxOwkJLyogc3BhcmUgZGlyYmxrcyB1c2VkICovCi0gIHVuc2lnbmVkIGhvdGZpeGVzX3VzZWQ6IDE7CQkvKiBob3RmaXhlcyB1c2VkICovCi0gIHVuc2lnbmVkIGJhZF9zZWN0b3I6IDE7CQkvKiBiYWQgc2VjdG9yLCBjb3JydXB0ZWQgZGlzayAoPz8/KSAqLwotICB1bnNpZ25lZCBiYWRfYml0bWFwOiAxOwkJLyogYmFkIGJpdG1hcCAqLwotICB1bnNpZ25lZCBmYXN0OiAxOwkJCS8qIHBhcnRpdGlvbiB3YXMgZmFzdCBmb3JtYXR0ZWQgKi8KLSAgdW5zaWduZWQgb2xkX3dyb3RlOiAxOwkJLyogb2xkIHZlcnNpb24gd3JvdGUgdG8gcGFydGlvbiAqLwotICB1bnNpZ25lZCBvbGRfd3JvdGVfMTogMTsJCS8qIG9sZCB2ZXJzaW9uIHdyb3RlIHRvIHBhcnRpb24gKD8pICovCi0gIHVuc2lnbmVkIGluc3RhbGxfZGFzZF9saW1pdHM6IDE7CS8qIEhQRlMzODYgZmxhZ3MgKi8KLSAgdW5zaWduZWQgcmVzeW5jaF9kYXNkX2xpbWl0czogMTsKLSAgdW5zaWduZWQgZGFzZF9saW1pdHNfb3BlcmF0aW9uYWw6IDE7Ci0gIHVuc2lnbmVkIG11bHRpbWVkaWFfYWN0aXZlOiAxOwotICB1bnNpZ25lZCBkY2VfYWNsc19hY3RpdmU6IDE7Ci0gIHVuc2lnbmVkIGRhc2RfbGltaXRzX2RpcnR5OiAxOwotICB1bnNpZ25lZCBmbGFnNjc6IDI7Ci0gIHVuc2lnbmVkIGNoYXIgbW1fY29udGxndWx0eTsKLSAgdW5zaWduZWQgY2hhciB1bnVzZWQ7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOCisgIHU4IGRpcnR5OiAxOwkJCQkvKiAwIGNsZWFuLCAxICJpbXByb3Blcmx5IHN0b3BwZWQiICovCisgIHU4IHNwYXJlZGlyX3VzZWQ6IDE7CQkJLyogc3BhcmUgZGlyYmxrcyB1c2VkICovCisgIHU4IGhvdGZpeGVzX3VzZWQ6IDE7CQkJLyogaG90Zml4ZXMgdXNlZCAqLworICB1OCBiYWRfc2VjdG9yOiAxOwkJCS8qIGJhZCBzZWN0b3IsIGNvcnJ1cHRlZCBkaXNrICg/Pz8pICovCisgIHU4IGJhZF9iaXRtYXA6IDE7CQkJLyogYmFkIGJpdG1hcCAqLworICB1OCBmYXN0OiAxOwkJCQkvKiBwYXJ0aXRpb24gd2FzIGZhc3QgZm9ybWF0dGVkICovCisgIHU4IG9sZF93cm90ZTogMTsJCQkvKiBvbGQgdmVyc2lvbiB3cm90ZSB0byBwYXJ0aW9uICovCisgIHU4IG9sZF93cm90ZV8xOiAxOwkJCS8qIG9sZCB2ZXJzaW9uIHdyb3RlIHRvIHBhcnRpb24gKD8pICovCisjZWxzZQorICB1OCBvbGRfd3JvdGVfMTogMTsJCQkvKiBvbGQgdmVyc2lvbiB3cm90ZSB0byBwYXJ0aW9uICg/KSAqLworICB1OCBvbGRfd3JvdGU6IDE7CQkJLyogb2xkIHZlcnNpb24gd3JvdGUgdG8gcGFydGlvbiAqLworICB1OCBmYXN0OiAxOwkJCQkvKiBwYXJ0aXRpb24gd2FzIGZhc3QgZm9ybWF0dGVkICovCisgIHU4IGJhZF9iaXRtYXA6IDE7CQkJLyogYmFkIGJpdG1hcCAqLworICB1OCBiYWRfc2VjdG9yOiAxOwkJCS8qIGJhZCBzZWN0b3IsIGNvcnJ1cHRlZCBkaXNrICg/Pz8pICovCisgIHU4IGhvdGZpeGVzX3VzZWQ6IDE7CQkJLyogaG90Zml4ZXMgdXNlZCAqLworICB1OCBzcGFyZWRpcl91c2VkOiAxOwkJCS8qIHNwYXJlIGRpcmJsa3MgdXNlZCAqLworICB1OCBkaXJ0eTogMTsJCQkJLyogMCBjbGVhbiwgMSAiaW1wcm9wZXJseSBzdG9wcGVkIiAqLworI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKyAgdTggaW5zdGFsbF9kYXNkX2xpbWl0czogMTsJCS8qIEhQRlMzODYgZmxhZ3MgKi8KKyAgdTggcmVzeW5jaF9kYXNkX2xpbWl0czogMTsKKyAgdTggZGFzZF9saW1pdHNfb3BlcmF0aW9uYWw6IDE7CisgIHU4IG11bHRpbWVkaWFfYWN0aXZlOiAxOworICB1OCBkY2VfYWNsc19hY3RpdmU6IDE7CisgIHU4IGRhc2RfbGltaXRzX2RpcnR5OiAxOworICB1OCBmbGFnNjc6IDI7CisjZWxzZQorICB1OCBmbGFnNjc6IDI7CisgIHU4IGRhc2RfbGltaXRzX2RpcnR5OiAxOworICB1OCBkY2VfYWNsc19hY3RpdmU6IDE7CisgIHU4IG11bHRpbWVkaWFfYWN0aXZlOiAxOworICB1OCBkYXNkX2xpbWl0c19vcGVyYXRpb25hbDogMTsKKyAgdTggcmVzeW5jaF9kYXNkX2xpbWl0czogMTsKKyAgdTggaW5zdGFsbF9kYXNkX2xpbWl0czogMTsJCS8qIEhQRlMzODYgZmxhZ3MgKi8KKyNlbmRpZgorCisgIHU4IG1tX2NvbnRsZ3VsdHk7CisgIHU4IHVudXNlZDsKIAogICBzZWNubyBob3RmaXhfbWFwOwkJCS8qIGluZm8gYWJvdXQgcmVtYXBwZWQgYmFkIHNlY3RvcnMgKi8KLSAgdW5zaWduZWQgbl9zcGFyZXNfdXNlZDsJCS8qIG51bWJlciBvZiBob3RmaXhlcyAqLwotICB1bnNpZ25lZCBuX3NwYXJlczsJCQkvKiBudW1iZXIgb2Ygc3BhcmVzIGluIGhvdGZpeCBtYXAgKi8KLSAgdW5zaWduZWQgbl9kbm9kZV9zcGFyZXNfZnJlZTsJCS8qIHNwYXJlIGRub2RlcyB1bnVzZWQgKi8KLSAgdW5zaWduZWQgbl9kbm9kZV9zcGFyZXM7CQkvKiBsZW5ndGggb2Ygc3BhcmVfZG5vZGVzW10gbGlzdCwKKyAgdTMyIG5fc3BhcmVzX3VzZWQ7CQkJLyogbnVtYmVyIG9mIGhvdGZpeGVzICovCisgIHUzMiBuX3NwYXJlczsJCQkJLyogbnVtYmVyIG9mIHNwYXJlcyBpbiBob3RmaXggbWFwICovCisgIHUzMiBuX2Rub2RlX3NwYXJlc19mcmVlOwkJLyogc3BhcmUgZG5vZGVzIHVudXNlZCAqLworICB1MzIgbl9kbm9kZV9zcGFyZXM7CQkJLyogbGVuZ3RoIG9mIHNwYXJlX2Rub2Rlc1tdIGxpc3QsCiAJCQkJCSAgIGZvbGxvd3MgaW4gdGhpcyBibG9jayovCiAgIHNlY25vIGNvZGVfcGFnZV9kaXI7CQkJLyogY29kZSBwYWdlIGRpcmVjdG9yeSBibG9jayAqLwotICB1bnNpZ25lZCBuX2NvZGVfcGFnZXM7CQkvKiBudW1iZXIgb2YgY29kZSBwYWdlcyAqLwotICAvKnVuc2lnbmVkIGxhcmdlX251bWJlcnNbMl07Ki8JLyogPz8gKi8KLSAgdW5zaWduZWQgc3VwZXJfY3JjOwkJCS8qIG9uIEhQRlMzODYgYW5kIExBTiBTZXJ2ZXIgdGhpcyBpcworICB1MzIgbl9jb2RlX3BhZ2VzOwkJCS8qIG51bWJlciBvZiBjb2RlIHBhZ2VzICovCisgIHUzMiBzdXBlcl9jcmM7CQkJLyogb24gSFBGUzM4NiBhbmQgTEFOIFNlcnZlciB0aGlzIGlzCiAgIAkJCQkJICAgY2hlY2tzdW0gb2Ygc3VwZXJibG9jaywgb24gbm9ybWFsCiAJCQkJCSAgIE9TLzIgdW51c2VkICovCi0gIHVuc2lnbmVkIHNwYXJlX2NyYzsJCQkvKiBvbiBIUEZTMzg2IGNoZWNrc3VtIG9mIHNwYXJlYmxvY2sgKi8KLSAgdW5zaWduZWQgemVybzFbMTVdOwkJCS8qIHVudXNlZCAqLworICB1MzIgc3BhcmVfY3JjOwkJCS8qIG9uIEhQRlMzODYgY2hlY2tzdW0gb2Ygc3BhcmVibG9jayAqLworICB1MzIgemVybzFbMTVdOwkJCS8qIHVudXNlZCAqLwogICBkbm9kZV9zZWNubyBzcGFyZV9kbm9kZXNbMTAwXTsJLyogZW1lcmdlbmN5IGZyZWUgZG5vZGUgbGlzdCAqLwotICB1bnNpZ25lZCB6ZXJvMlsxXTsJCQkvKiByb29tIGZvciBtb3JlPyAqLworICB1MzIgemVybzJbMV07CQkJCS8qIHJvb20gZm9yIG1vcmU/ICovCiB9OwogCiAvKiBUaGUgYmFkIGJsb2NrIGxpc3QgaXMgNCBzZWN0b3JzIGxvbmcuICBUaGUgZmlyc3Qgd29yZCBtdXN0IGJlIHplcm8sCkBAIC0xNzksMTggKzIwMiwxOCBAQAogCiBzdHJ1Y3QgY29kZV9wYWdlX2RpcmVjdG9yeQogewotICB1bnNpZ25lZCBtYWdpYzsJCQkvKiA0OTQ1IDIxZjcgKi8KLSAgdW5zaWduZWQgbl9jb2RlX3BhZ2VzOwkJLyogbnVtYmVyIG9mIHBvaW50ZXJzIGZvbGxvd2luZyAqLwotICB1bnNpZ25lZCB6ZXJvMVsyXTsKKyAgdTMyIG1hZ2ljOwkJCQkvKiA0OTQ1IDIxZjcgKi8KKyAgdTMyIG5fY29kZV9wYWdlczsJCQkvKiBudW1iZXIgb2YgcG9pbnRlcnMgZm9sbG93aW5nICovCisgIHUzMiB6ZXJvMVsyXTsKICAgc3RydWN0IHsKLSAgICB1bnNpZ25lZCBzaG9ydCBpeDsJCQkvKiBpbmRleCAqLwotICAgIHVuc2lnbmVkIHNob3J0IGNvZGVfcGFnZV9udW1iZXI7CS8qIGNvZGUgcGFnZSBudW1iZXIgKi8KLSAgICB1bnNpZ25lZCBib3VuZHM7CQkJLyogbWF0Y2hlcyBjb3JyZXNwb25kaW5nIHdvcmQKKyAgICB1MTYgaXg7CQkJCS8qIGluZGV4ICovCisgICAgdTE2IGNvZGVfcGFnZV9udW1iZXI7CQkvKiBjb2RlIHBhZ2UgbnVtYmVyICovCisgICAgdTMyIGJvdW5kczsJCQkJLyogbWF0Y2hlcyBjb3JyZXNwb25kaW5nIHdvcmQKIAkJCQkJICAgaW4gZGF0YSBibG9jayAqLwogICAgIHNlY25vIGNvZGVfcGFnZV9kYXRhOwkJLyogc2VjdG9yIG51bWJlciBvZiBhIGNvZGVfcGFnZV9kYXRhCiAJCQkJCSAgIGNvbnRhaW5pbmcgYy5wLiBhcnJheSAqLwotICAgIHVuc2lnbmVkIHNob3J0IGluZGV4OwkJLyogaW5kZXggaW4gYy5wLiBhcnJheSBpbiB0aGF0IHNlY3RvciovCi0gICAgdW5zaWduZWQgc2hvcnQgdW5rbm93bjsJCS8qIHNvbWUgdW5rbm93biB2YWx1ZTsgdXN1YWxseSAwOworICAgIHUxNiBpbmRleDsJCQkJLyogaW5kZXggaW4gYy5wLiBhcnJheSBpbiB0aGF0IHNlY3RvciovCisgICAgdTE2IHVua25vd247CQkJLyogc29tZSB1bmtub3duIHZhbHVlOyB1c3VhbGx5IDA7CiAgICAgCQkJCQkgICAyIGluIEphcGFuZXNlIHZlcnNpb24gKi8KICAgfSBhcnJheVszMV07CQkJCS8qIHVua25vd24gbGVuZ3RoICovCiB9OwpAQCAtMjAxLDIxICsyMjQsMjEgQEAKIAogc3RydWN0IGNvZGVfcGFnZV9kYXRhCiB7Ci0gIHVuc2lnbmVkIG1hZ2ljOwkJCS8qIDg5NDUgMjFmNyAqLwotICB1bnNpZ25lZCBuX3VzZWQ7CQkJLyogIyBlbGVtZW50cyB1c2VkIGluIGNfcF9kYXRhW10gKi8KLSAgdW5zaWduZWQgYm91bmRzWzNdOwkJCS8qIGxvb2tzIGEgYml0IGxpa2UKKyAgdTMyIG1hZ2ljOwkJCQkvKiA4OTQ1IDIxZjcgKi8KKyAgdTMyIG5fdXNlZDsJCQkJLyogIyBlbGVtZW50cyB1c2VkIGluIGNfcF9kYXRhW10gKi8KKyAgdTMyIGJvdW5kc1szXTsJCQkvKiBsb29rcyBhIGJpdCBsaWtlCiAJCQkJCSAgICAgKGJlZzEsZW5kMSksIChiZWcyLGVuZDIpCiAJCQkJCSAgIG9uZSBieXRlIGVhY2ggKi8KLSAgdW5zaWduZWQgc2hvcnQgb2Zmc1szXTsJCS8qIG9mZnNldHMgZnJvbSBzdGFydCBvZiBzZWN0b3IKKyAgdTE2IG9mZnNbM107CQkJCS8qIG9mZnNldHMgZnJvbSBzdGFydCBvZiBzZWN0b3IKIAkJCQkJICAgdG8gc3RhcnQgb2YgY19wX2RhdGFbaXhdICovCiAgIHN0cnVjdCB7Ci0gICAgdW5zaWduZWQgc2hvcnQgaXg7CQkJLyogaW5kZXggKi8KLSAgICB1bnNpZ25lZCBzaG9ydCBjb2RlX3BhZ2VfbnVtYmVyOwkvKiBjb2RlIHBhZ2UgbnVtYmVyICovCi0gICAgdW5zaWduZWQgc2hvcnQgdW5rbm93bjsJCS8qIHRoZSBzYW1lIGFzIGluIGNwIGRpcmVjdG9yeSAqLwotICAgIHVuc2lnbmVkIGNoYXIgbWFwWzEyOF07CQkvKiB1cGNhc2UgdGFibGUgZm9yIGNoYXJzIDgwLi5mZiAqLwotICAgIHVuc2lnbmVkIHNob3J0IHplcm8yOworICAgIHUxNiBpeDsJCQkJLyogaW5kZXggKi8KKyAgICB1MTYgY29kZV9wYWdlX251bWJlcjsJCS8qIGNvZGUgcGFnZSBudW1iZXIgKi8KKyAgICB1MTYgdW5rbm93bjsJCQkvKiB0aGUgc2FtZSBhcyBpbiBjcCBkaXJlY3RvcnkgKi8KKyAgICB1OCBtYXBbMTI4XTsJCQkvKiB1cGNhc2UgdGFibGUgZm9yIGNoYXJzIDgwLi5mZiAqLworICAgIHUxNiB6ZXJvMjsKICAgfSBjb2RlX3BhZ2VbM107Ci0gIHVuc2lnbmVkIGNoYXIgaW5jb2duaXRhWzc4XTsKKyAgdTggaW5jb2duaXRhWzc4XTsKIH07CiAKIApAQCAtMjU1LDUwICsyNzgsODQgQEAKICNkZWZpbmUgRE5PREVfTUFHSUMgICAweDc3ZTQwYWFlCiAKIHN0cnVjdCBkbm9kZSB7Ci0gIHVuc2lnbmVkIG1hZ2ljOwkJCS8qIDc3ZTQgMGFhZSAqLwotICB1bnNpZ25lZCBmaXJzdF9mcmVlOwkJCS8qIG9mZnNldCBmcm9tIHN0YXJ0IG9mIGRub2RlIHRvCisgIHUzMiBtYWdpYzsJCQkJLyogNzdlNCAwYWFlICovCisgIHUzMiBmaXJzdF9mcmVlOwkJCS8qIG9mZnNldCBmcm9tIHN0YXJ0IG9mIGRub2RlIHRvCiAJCQkJCSAgIGZpcnN0IGZyZWUgZGlyIGVudHJ5ICovCi0gIHVuc2lnbmVkIHJvb3RfZG5vZGU6MTsJCS8qIElzIGl0IHJvb3QgZG5vZGU/ICovCi0gIHVuc2lnbmVkIGluY3JlbWVudF9tZTozMTsJCS8qIHNvbWUga2luZCBvZiBhY3Rpdml0eSBjb3VudGVyPwotCQkJCQkgICBOZWl0aGVyIEhQRlMuSUZTIG5vciBDSEtEU0sgY2FyZXMKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKyAgdTggcm9vdF9kbm9kZTogMTsJCQkvKiBJcyBpdCByb290IGRub2RlPyAqLworICB1OCBpbmNyZW1lbnRfbWU6IDc7CQkJLyogc29tZSBraW5kIG9mIGFjdGl2aXR5IGNvdW50ZXI/ICovCisJCQkJCS8qIE5laXRoZXIgSFBGUy5JRlMgbm9yIENIS0RTSyBjYXJlcwogCQkJCQkgICBpZiB5b3UgY2hhbmdlIHRoaXMgd29yZCAqLworI2Vsc2UKKyAgdTggaW5jcmVtZW50X21lOiA3OwkJCS8qIHNvbWUga2luZCBvZiBhY3Rpdml0eSBjb3VudGVyPyAqLworCQkJCQkvKiBOZWl0aGVyIEhQRlMuSUZTIG5vciBDSEtEU0sgY2FyZXMKKwkJCQkJICAgaWYgeW91IGNoYW5nZSB0aGlzIHdvcmQgKi8KKyAgdTggcm9vdF9kbm9kZTogMTsJCQkvKiBJcyBpdCByb290IGRub2RlPyAqLworI2VuZGlmCisgIHU4IGluY3JlbWVudF9tZTJbM107CiAgIHNlY25vIHVwOwkJCQkvKiAocm9vdCBkbm9kZSkgZGlyZWN0b3J5J3MgZm5vZGUKIAkJCQkJICAgKG5vbnJvb3QpIHBhcmVudCBkbm9kZSAqLwogICBkbm9kZV9zZWNubyBzZWxmOwkJCS8qIHBvaW50ZXIgdG8gdGhpcyBkbm9kZSAqLwotICB1bnNpZ25lZCBjaGFyIGRpcmVudFsyMDI4XTsJCS8qIG9uZSBvciBtb3JlIGRpcmVudHMgKi8KKyAgdTggZGlyZW50WzIwMjhdOwkJCS8qIG9uZSBvciBtb3JlIGRpcmVudHMgKi8KIH07CiAKIHN0cnVjdCBocGZzX2RpcmVudCB7Ci0gIHVuc2lnbmVkIHNob3J0IGxlbmd0aDsJCS8qIG9mZnNldCB0byBuZXh0IGRpcmVudCAqLwotICB1bnNpZ25lZCBmaXJzdDogMTsJCQkvKiBzZXQgb24gcGhvbnkgXkFeQSAoIi4iKSBlbnRyeSAqLwotICB1bnNpZ25lZCBoYXNfYWNsOiAxOwotICB1bnNpZ25lZCBkb3duOiAxOwkJCS8qIGRvd24gcG9pbnRlciBwcmVzZW50IChhZnRlciBuYW1lKSAqLwotICB1bnNpZ25lZCBsYXN0OiAxOwkJCS8qIHNldCBvbiBwaG9ueSBcMzc3IGVudHJ5ICovCi0gIHVuc2lnbmVkIGhhc19lYTogMTsJCQkvKiBlbnRyeSBoYXMgRUEgKi8KLSAgdW5zaWduZWQgaGFzX3h0ZF9wZXJtOiAxOwkJLyogaGFzIGV4dGVuZGVkIHBlcm0gbGlzdCAoPz8/KSAqLwotICB1bnNpZ25lZCBoYXNfZXhwbGljaXRfYWNsOiAxOwotICB1bnNpZ25lZCBoYXNfbmVlZGVhOiAxOwkJLyogPz8gc29tZSBFQSBoYXMgTkVFREVBIHNldAorICB1MTYgbGVuZ3RoOwkJCQkvKiBvZmZzZXQgdG8gbmV4dCBkaXJlbnQgKi8KKworI2lmZGVmIF9fTElUVExFX0VORElBTgorICB1OCBmaXJzdDogMTsJCQkJLyogc2V0IG9uIHBob255IF5BXkEgKCIuIikgZW50cnkgKi8KKyAgdTggaGFzX2FjbDogMTsKKyAgdTggZG93bjogMTsJCQkJLyogZG93biBwb2ludGVyIHByZXNlbnQgKGFmdGVyIG5hbWUpICovCisgIHU4IGxhc3Q6IDE7CQkJCS8qIHNldCBvbiBwaG9ueSBcMzc3IGVudHJ5ICovCisgIHU4IGhhc19lYTogMTsJCQkJLyogZW50cnkgaGFzIEVBICovCisgIHU4IGhhc194dGRfcGVybTogMTsJCQkvKiBoYXMgZXh0ZW5kZWQgcGVybSBsaXN0ICg/Pz8pICovCisgIHU4IGhhc19leHBsaWNpdF9hY2w6IDE7CisgIHU4IGhhc19uZWVkZWE6IDE7CQkJLyogPz8gc29tZSBFQSBoYXMgTkVFREVBIHNldAogCQkJCQkgICBJIGhhdmUgbm8gaWRlYSB3aHkgdGhpcyBpcwogCQkJCQkgICBpbnRlcmVzdGluZyBpbiBhIGRpciBlbnRyeSAqLwotICB1bnNpZ25lZCByZWFkX29ubHk6IDE7CQkvKiBkb3MgYXR0cmliICovCi0gIHVuc2lnbmVkIGhpZGRlbjogMTsJCQkvKiBkb3MgYXR0cmliICovCi0gIHVuc2lnbmVkIHN5c3RlbTogMTsJCQkvKiBkb3MgYXR0cmliICovCi0gIHVuc2lnbmVkIGZsYWcxMTogMTsJCQkvKiB3b3VsZCBiZSB2b2x1bWUgbGFiZWwgZG9zIGF0dHJpYiAqLwotICB1bnNpZ25lZCBkaXJlY3Rvcnk6IDE7CQkvKiBkb3MgYXR0cmliICovCi0gIHVuc2lnbmVkIGFyY2hpdmU6IDE7CQkJLyogZG9zIGF0dHJpYiAqLwotICB1bnNpZ25lZCBub3RfOHgzOiAxOwkJCS8qIG5hbWUgaXMgbm90IDguMyAqLwotICB1bnNpZ25lZCBmbGFnMTU6IDE7CisjZWxzZQorICB1OCBoYXNfbmVlZGVhOiAxOwkJCS8qID8/IHNvbWUgRUEgaGFzIE5FRURFQSBzZXQKKwkJCQkJICAgSSBoYXZlIG5vIGlkZWEgd2h5IHRoaXMgaXMKKwkJCQkJICAgaW50ZXJlc3RpbmcgaW4gYSBkaXIgZW50cnkgKi8KKyAgdTggaGFzX2V4cGxpY2l0X2FjbDogMTsKKyAgdTggaGFzX3h0ZF9wZXJtOiAxOwkJCS8qIGhhcyBleHRlbmRlZCBwZXJtIGxpc3QgKD8/PykgKi8KKyAgdTggaGFzX2VhOiAxOwkJCQkvKiBlbnRyeSBoYXMgRUEgKi8KKyAgdTggbGFzdDogMTsJCQkJLyogc2V0IG9uIHBob255IFwzNzcgZW50cnkgKi8KKyAgdTggZG93bjogMTsJCQkJLyogZG93biBwb2ludGVyIHByZXNlbnQgKGFmdGVyIG5hbWUpICovCisgIHU4IGhhc19hY2w6IDE7CisgIHU4IGZpcnN0OiAxOwkJCQkvKiBzZXQgb24gcGhvbnkgXkFeQSAoIi4iKSBlbnRyeSAqLworI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKyAgdTggcmVhZF9vbmx5OiAxOwkJCS8qIGRvcyBhdHRyaWIgKi8KKyAgdTggaGlkZGVuOiAxOwkJCQkvKiBkb3MgYXR0cmliICovCisgIHU4IHN5c3RlbTogMTsJCQkJLyogZG9zIGF0dHJpYiAqLworICB1OCBmbGFnMTE6IDE7CQkJCS8qIHdvdWxkIGJlIHZvbHVtZSBsYWJlbCBkb3MgYXR0cmliICovCisgIHU4IGRpcmVjdG9yeTogMTsJCQkvKiBkb3MgYXR0cmliICovCisgIHU4IGFyY2hpdmU6IDE7CQkJLyogZG9zIGF0dHJpYiAqLworICB1OCBub3RfOHgzOiAxOwkJCS8qIG5hbWUgaXMgbm90IDguMyAqLworICB1OCBmbGFnMTU6IDE7CisjZWxzZQorICB1OCBmbGFnMTU6IDE7CisgIHU4IG5vdF84eDM6IDE7CQkJLyogbmFtZSBpcyBub3QgOC4zICovCisgIHU4IGFyY2hpdmU6IDE7CQkJLyogZG9zIGF0dHJpYiAqLworICB1OCBkaXJlY3Rvcnk6IDE7CQkJLyogZG9zIGF0dHJpYiAqLworICB1OCBmbGFnMTE6IDE7CQkJCS8qIHdvdWxkIGJlIHZvbHVtZSBsYWJlbCBkb3MgYXR0cmliICovCisgIHU4IHN5c3RlbTogMTsJCQkJLyogZG9zIGF0dHJpYiAqLworICB1OCBoaWRkZW46IDE7CQkJCS8qIGRvcyBhdHRyaWIgKi8KKyAgdTggcmVhZF9vbmx5OiAxOwkJCS8qIGRvcyBhdHRyaWIgKi8KKyNlbmRpZgorCiAgIGZub2RlX3NlY25vIGZub2RlOwkJCS8qIGZub2RlIGdpdmluZyBhbGxvY2F0aW9uIGluZm8gKi8KICAgdGltZTMyX3Qgd3JpdGVfZGF0ZTsJCQkvKiBtdGltZSAqLwotICB1bnNpZ25lZCBmaWxlX3NpemU7CQkJLyogZmlsZSBsZW5ndGgsIGJ5dGVzICovCisgIHUzMiBmaWxlX3NpemU7CQkJLyogZmlsZSBsZW5ndGgsIGJ5dGVzICovCiAgIHRpbWUzMl90IHJlYWRfZGF0ZTsJCQkvKiBhdGltZSAqLwogICB0aW1lMzJfdCBjcmVhdGlvbl9kYXRlOwkJCS8qIGN0aW1lICovCi0gIHVuc2lnbmVkIGVhX3NpemU7CQkJLyogdG90YWwgRUEgbGVuZ3RoLCBieXRlcyAqLwotICB1bnNpZ25lZCBjaGFyIG5vX29mX2FjbHMgOiAzOwkJLyogbnVtYmVyIG9mIEFDTCdzICovCi0gIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZXIgOiA1OwotICB1bnNpZ25lZCBjaGFyIGl4OwkJCS8qIGNvZGUgcGFnZSBpbmRleCAob2YgZmlsZW5hbWUpLCBzZWUKKyAgdTMyIGVhX3NpemU7CQkJCS8qIHRvdGFsIEVBIGxlbmd0aCwgYnl0ZXMgKi8KKyAgdTggbm9fb2ZfYWNsczsJCQkvKiBudW1iZXIgb2YgQUNMJ3MgKGxvdyAzIGJpdHMpICovCisgIHU4IGl4OwkJCQkvKiBjb2RlIHBhZ2UgaW5kZXggKG9mIGZpbGVuYW1lKSwgc2VlCiAJCQkJCSAgIHN0cnVjdCBjb2RlX3BhZ2VfZGF0YSAqLwotICB1bnNpZ25lZCBjaGFyIG5hbWVsZW4sIG5hbWVbMV07CS8qIGZpbGUgbmFtZSAqLworICB1OCBuYW1lbGVuLCBuYW1lWzFdOwkJCS8qIGZpbGUgbmFtZSAqLwogICAvKiBkbm9kZV9zZWNubyBkb3duOwkgIGJ0cmVlIGRvd24gcG9pbnRlciwgaWYgcHJlc2VudCwKICAgICAgCQkJICBmb2xsb3dzIG5hbWUgb24gbmV4dCB3b3JkIGJvdW5kYXJ5LCBvciBtYXliZSBpdAogCQkJICBwcmVjZWRlcyBuZXh0IGRpcmVudCwgd2hpY2ggaXMgb24gYSB3b3JkIGJvdW5kYXJ5LiAqLwpAQCAtMzE4LDM4ICszNzUsNTAgQEAKIAogc3RydWN0IGJwbHVzX2xlYWZfbm9kZQogewotICB1bnNpZ25lZCBmaWxlX3NlY25vOwkJCS8qIGZpcnN0IGZpbGUgc2VjdG9yIGluIGV4dGVudCAqLwotICB1bnNpZ25lZCBsZW5ndGg7CQkJLyogbGVuZ3RoLCBzZWN0b3JzICovCisgIHUzMiBmaWxlX3NlY25vOwkJCS8qIGZpcnN0IGZpbGUgc2VjdG9yIGluIGV4dGVudCAqLworICB1MzIgbGVuZ3RoOwkJCQkvKiBsZW5ndGgsIHNlY3RvcnMgKi8KICAgc2Vjbm8gZGlza19zZWNubzsJCQkvKiBmaXJzdCBjb3JyZXNwb25kaW5nIGRpc2sgc2VjdG9yICovCiB9OwogCiBzdHJ1Y3QgYnBsdXNfaW50ZXJuYWxfbm9kZQogewotICB1bnNpZ25lZCBmaWxlX3NlY25vOwkJCS8qIHN1YnRyZWUgbWFwcyBzZWN0b3JzIDwgdGhpcyAgKi8KKyAgdTMyIGZpbGVfc2Vjbm87CQkJLyogc3VidHJlZSBtYXBzIHNlY3RvcnMgPCB0aGlzICAqLwogICBhbm9kZV9zZWNubyBkb3duOwkJCS8qIHBvaW50ZXIgdG8gc3VidHJlZSAqLwogfTsKIAogc3RydWN0IGJwbHVzX2hlYWRlcgogewotICB1bnNpZ25lZCBoYmZmOiAxOwkvKiBoaWdoIGJpdCBvZiBmaXJzdCBmcmVlIGVudHJ5IG9mZnNldCAqLwotICB1bnNpZ25lZCBmbGFnMTogMTsKLSAgdW5zaWduZWQgZmxhZzI6IDE7Ci0gIHVuc2lnbmVkIGZsYWczOiAxOwotICB1bnNpZ25lZCBmbGFnNDogMTsKLSAgdW5zaWduZWQgZm5vZGVfcGFyZW50OiAxOwkJLyogPyB3ZSdyZSBwb2ludGVkIHRvIGJ5IGFuIGZub2RlLAorI2lmZGVmIF9fTElUVExFX0VORElBTgorICB1OCBoYmZmOiAxOwkJCS8qIGhpZ2ggYml0IG9mIGZpcnN0IGZyZWUgZW50cnkgb2Zmc2V0ICovCisgIHU4IGZsYWcxMjM0OiA0OworICB1OCBmbm9kZV9wYXJlbnQ6IDE7CQkJLyogPyB3ZSdyZSBwb2ludGVkIHRvIGJ5IGFuIGZub2RlLAogCQkJCQkgICB0aGUgZGF0YSBidHJlZSBvciBzb21lIGVhIG9yIHRoZQogCQkJCQkgICBtYWluIGVhIGJvb3RhZ2UgcG9pbnRlciBlYV9zZWNubyAqLwogCQkJCQkvKiBhbHNvIGNhbiBnZXQgc2V0IGluIGZub2Rlcywgd2hpY2gKIAkJCQkJICAgbWF5IGJlIGEgY2hrZHNrIGdsaXRjaCBvciBtYXkgbWVhbgogCQkJCQkgICB0aGlzIGJpdCBpcyBpcnJlbGV2YW50IGluIGZub2RlcywKIAkJCQkJICAgb3IgdGhpcyBpbnRlcnByZXRhdGlvbiBpcyBhbGwgd2V0ICovCi0gIHVuc2lnbmVkIGJpbmFyeV9zZWFyY2g6IDE7CQkvKiBzdWdnZXN0IGJpbmFyeSBzZWFyY2ggKHVudXNlZCkgKi8KLSAgdW5zaWduZWQgaW50ZXJuYWw6IDE7CQkJLyogMSAtPiAoaW50ZXJuYWwpIHRyZWUgb2YgYW5vZGVzCisgIHU4IGJpbmFyeV9zZWFyY2g6IDE7CQkJLyogc3VnZ2VzdCBiaW5hcnkgc2VhcmNoICh1bnVzZWQpICovCisgIHU4IGludGVybmFsOiAxOwkJCS8qIDEgLT4gKGludGVybmFsKSB0cmVlIG9mIGFub2RlcwogCQkJCQkgICAwIC0+IChsZWFmKSBsaXN0IG9mIGV4dGVudHMgKi8KLSAgdW5zaWduZWQgY2hhciBmaWxsWzNdOwotICB1bnNpZ25lZCBjaGFyIG5fZnJlZV9ub2RlczsJCS8qIGZyZWUgbm9kZXMgaW4gZm9sbG93aW5nIGFycmF5ICovCi0gIHVuc2lnbmVkIGNoYXIgbl91c2VkX25vZGVzOwkJLyogdXNlZCBub2RlcyBpbiBmb2xsb3dpbmcgYXJyYXkgKi8KLSAgdW5zaWduZWQgc2hvcnQgZmlyc3RfZnJlZTsJCS8qIG9mZnNldCBmcm9tIHN0YXJ0IG9mIGhlYWRlciB0bworI2Vsc2UKKyAgdTggaW50ZXJuYWw6IDE7CQkJLyogMSAtPiAoaW50ZXJuYWwpIHRyZWUgb2YgYW5vZGVzCisJCQkJCSAgIDAgLT4gKGxlYWYpIGxpc3Qgb2YgZXh0ZW50cyAqLworICB1OCBiaW5hcnlfc2VhcmNoOiAxOwkJCS8qIHN1Z2dlc3QgYmluYXJ5IHNlYXJjaCAodW51c2VkKSAqLworICB1OCBmbm9kZV9wYXJlbnQ6IDE7CQkJLyogPyB3ZSdyZSBwb2ludGVkIHRvIGJ5IGFuIGZub2RlLAorCQkJCQkgICB0aGUgZGF0YSBidHJlZSBvciBzb21lIGVhIG9yIHRoZQorCQkJCQkgICBtYWluIGVhIGJvb3RhZ2UgcG9pbnRlciBlYV9zZWNubyAqLworCQkJCQkvKiBhbHNvIGNhbiBnZXQgc2V0IGluIGZub2Rlcywgd2hpY2gKKwkJCQkJICAgbWF5IGJlIGEgY2hrZHNrIGdsaXRjaCBvciBtYXkgbWVhbgorCQkJCQkgICB0aGlzIGJpdCBpcyBpcnJlbGV2YW50IGluIGZub2RlcywKKwkJCQkJICAgb3IgdGhpcyBpbnRlcnByZXRhdGlvbiBpcyBhbGwgd2V0ICovCisgIHU4IGZsYWcxMjM0OiA0OworICB1OCBoYmZmOiAxOwkJCS8qIGhpZ2ggYml0IG9mIGZpcnN0IGZyZWUgZW50cnkgb2Zmc2V0ICovCisjZW5kaWYKKyAgdTggZmlsbFszXTsKKyAgdTggbl9mcmVlX25vZGVzOwkJCS8qIGZyZWUgbm9kZXMgaW4gZm9sbG93aW5nIGFycmF5ICovCisgIHU4IG5fdXNlZF9ub2RlczsJCQkvKiB1c2VkIG5vZGVzIGluIGZvbGxvd2luZyBhcnJheSAqLworICB1MTYgZmlyc3RfZnJlZTsJCQkvKiBvZmZzZXQgZnJvbSBzdGFydCBvZiBoZWFkZXIgdG8KIAkJCQkJICAgZmlyc3QgZnJlZSBub2RlIGluIGFycmF5ICovCiAgIHVuaW9uIHsKICAgICBzdHJ1Y3QgYnBsdXNfaW50ZXJuYWxfbm9kZSBpbnRlcm5hbFswXTsgLyogKGludGVybmFsKSAyLXdvcmQgZW50cmllcyBnaXZpbmcKQEAgLTM2OSwzNyArNDM4LDM4IEBACiAKIHN0cnVjdCBmbm9kZQogewotICB1bnNpZ25lZCBtYWdpYzsJCQkvKiBmN2U0IDBhYWUgKi8KLSAgdW5zaWduZWQgemVybzFbMl07CQkJLyogcmVhZCBoaXN0b3J5ICovCi0gIHVuc2lnbmVkIGNoYXIgbGVuLCBuYW1lWzE1XTsJCS8qIHRydWUgbGVuZ3RoLCB0cnVuY2F0ZWQgbmFtZSAqLworICB1MzIgbWFnaWM7CQkJCS8qIGY3ZTQgMGFhZSAqLworICB1MzIgemVybzFbMl07CQkJCS8qIHJlYWQgaGlzdG9yeSAqLworICB1OCBsZW4sIG5hbWVbMTVdOwkJCS8qIHRydWUgbGVuZ3RoLCB0cnVuY2F0ZWQgbmFtZSAqLwogICBmbm9kZV9zZWNubyB1cDsJCQkvKiBwb2ludGVyIHRvIGZpbGUncyBkaXJlY3RvcnkgZm5vZGUgKi8KLSAgLyp1bnNpZ25lZCB6ZXJvMlszXTsqLwogICBzZWNubyBhY2xfc2l6ZV9sOwogICBzZWNubyBhY2xfc2Vjbm87Ci0gIHVuc2lnbmVkIHNob3J0IGFjbF9zaXplX3M7Ci0gIGNoYXIgYWNsX2Fub2RlOwotICBjaGFyIHplcm8yOwkJCQkvKiBoaXN0b3J5IGJpdCBjb3VudCAqLwotICB1bnNpZ25lZCBlYV9zaXplX2w7CQkJLyogbGVuZ3RoIG9mIGRpc2stcmVzaWRlbnQgZWEncyAqLworICB1MTYgYWNsX3NpemVfczsKKyAgdTggYWNsX2Fub2RlOworICB1OCB6ZXJvMjsJCQkJLyogaGlzdG9yeSBiaXQgY291bnQgKi8KKyAgdTMyIGVhX3NpemVfbDsJCQkvKiBsZW5ndGggb2YgZGlzay1yZXNpZGVudCBlYSdzICovCiAgIHNlY25vIGVhX3NlY25vOwkJCS8qIGZpcnN0IHNlY3RvciBvZiBkaXNrLXJlc2lkZW50IGVhJ3MqLwotICB1bnNpZ25lZCBzaG9ydCBlYV9zaXplX3M7CQkvKiBsZW5ndGggb2YgZm5vZGUtcmVzaWRlbnQgZWEncyAqLworICB1MTYgZWFfc2l6ZV9zOwkJCS8qIGxlbmd0aCBvZiBmbm9kZS1yZXNpZGVudCBlYSdzICovCiAKLSAgdW5zaWduZWQgZmxhZzA6IDE7Ci0gIHVuc2lnbmVkIGVhX2Fub2RlOiAxOwkJCS8qIDEgLT4gZWFfc2Vjbm8gaXMgYW4gYW5vZGUgKi8KLSAgdW5zaWduZWQgZmxhZzI6IDE7Ci0gIHVuc2lnbmVkIGZsYWczOiAxOwotICB1bnNpZ25lZCBmbGFnNDogMTsKLSAgdW5zaWduZWQgZmxhZzU6IDE7Ci0gIHVuc2lnbmVkIGZsYWc2OiAxOwotICB1bnNpZ25lZCBmbGFnNzogMTsKLSAgdW5zaWduZWQgZGlyZmxhZzogMTsJCQkvKiAxIC0+IGRpcmVjdG9yeS4gIGZpcnN0ICYgb25seSBleHRlbnQKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKyAgdTggZmxhZzA6IDE7CisgIHU4IGVhX2Fub2RlOiAxOwkJCS8qIDEgLT4gZWFfc2Vjbm8gaXMgYW4gYW5vZGUgKi8KKyAgdTggZmxhZzIzNDU2NzogNjsKKyNlbHNlCisgIHU4IGZsYWcyMzQ1Njc6IDY7CisgIHU4IGVhX2Fub2RlOiAxOwkJCS8qIDEgLT4gZWFfc2Vjbm8gaXMgYW4gYW5vZGUgKi8KKyAgdTggZmxhZzA6IDE7CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTgorICB1OCBkaXJmbGFnOiAxOwkJCS8qIDEgLT4gZGlyZWN0b3J5LiAgZmlyc3QgJiBvbmx5IGV4dGVudAogCQkJCQkgICBwb2ludHMgdG8gZG5vZGUuICovCi0gIHVuc2lnbmVkIGZsYWc5OiAxOwotICB1bnNpZ25lZCBmbGFnMTA6IDE7Ci0gIHVuc2lnbmVkIGZsYWcxMTogMTsKLSAgdW5zaWduZWQgZmxhZzEyOiAxOwotICB1bnNpZ25lZCBmbGFnMTM6IDE7Ci0gIHVuc2lnbmVkIGZsYWcxNDogMTsKLSAgdW5zaWduZWQgZmxhZzE1OiAxOworICB1OCBmbGFnOTAxMjM0NTogNzsKKyNlbHNlCisgIHU4IGZsYWc5MDEyMzQ1OiA3OworICB1OCBkaXJmbGFnOiAxOwkJCS8qIDEgLT4gZGlyZWN0b3J5LiAgZmlyc3QgJiBvbmx5IGV4dGVudAorCQkJCQkgICBwb2ludHMgdG8gZG5vZGUuICovCisjZW5kaWYKIAogICBzdHJ1Y3QgYnBsdXNfaGVhZGVyIGJ0cmVlOwkJLyogYisgdHJlZSwgOCBleHRlbnRzIG9yIDEyIHN1YnRyZWVzICovCiAgIHVuaW9uIHsKQEAgLTQwNywxNyArNDc3LDE2IEBACiAgICAgc3RydWN0IGJwbHVzX2ludGVybmFsX25vZGUgaW50ZXJuYWxbMTJdOwogICB9IHU7CiAKLSAgdW5zaWduZWQgZmlsZV9zaXplOwkJCS8qIGZpbGUgbGVuZ3RoLCBieXRlcyAqLwotICB1bnNpZ25lZCBuX25lZWRlYTsJCQkvKiBudW1iZXIgb2YgRUEncyB3aXRoIE5FRURFQSBzZXQgKi8KLSAgY2hhciB1c2VyX2lkWzE2XTsJCQkvKiB1bnVzZWQgKi8KLSAgdW5zaWduZWQgc2hvcnQgZWFfb2ZmczsJCS8qIG9mZnNldCBmcm9tIHN0YXJ0IG9mIGZub2RlCisgIHUzMiBmaWxlX3NpemU7CQkJLyogZmlsZSBsZW5ndGgsIGJ5dGVzICovCisgIHUzMiBuX25lZWRlYTsJCQkJLyogbnVtYmVyIG9mIEVBJ3Mgd2l0aCBORUVERUEgc2V0ICovCisgIHU4IHVzZXJfaWRbMTZdOwkJCS8qIHVudXNlZCAqLworICB1MTYgZWFfb2ZmczsJCQkJLyogb2Zmc2V0IGZyb20gc3RhcnQgb2YgZm5vZGUKIAkJCQkJICAgdG8gZmlyc3QgZm5vZGUtcmVzaWRlbnQgZWEgKi8KLSAgY2hhciBkYXNkX2xpbWl0X3RyZXNoaG9sZDsKLSAgY2hhciBkYXNkX2xpbWl0X2RlbHRhOwotICB1bnNpZ25lZCBkYXNkX2xpbWl0OwotICB1bnNpZ25lZCBkYXNkX3VzYWdlOwotICAvKnVuc2lnbmVkIHplcm81WzJdOyovCi0gIHVuc2lnbmVkIGNoYXIgZWFbMzE2XTsJCS8qIHplcm8gb3IgbW9yZSBFQSdzLCBwYWNrZWQgdG9nZXRoZXIKKyAgdTggZGFzZF9saW1pdF90cmVzaGhvbGQ7CisgIHU4IGRhc2RfbGltaXRfZGVsdGE7CisgIHUzMiBkYXNkX2xpbWl0OworICB1MzIgZGFzZF91c2FnZTsKKyAgdTggZWFbMzE2XTsJCQkJLyogemVybyBvciBtb3JlIEVBJ3MsIHBhY2tlZCB0b2dldGhlcgogCQkJCQkgICB3aXRoIG5vIGFsaWdubWVudCBwYWRkaW5nLgogCQkJCQkgICAoRG8gbm90IHVzZSB0aGlzIG5hbWUsIGdldCBoZXJlCiAJCQkJCSAgIHZpYSBmbm9kZSArIGVhX29mZnMuIEkgdGhpbmsuKSAqLwpAQCAtNDMwLDcgKzQ5OSw3IEBACiAKIHN0cnVjdCBhbm9kZQogewotICB1bnNpZ25lZCBtYWdpYzsJCQkvKiAzN2U0IDBhYWUgKi8KKyAgdTMyIG1hZ2ljOwkJCQkvKiAzN2U0IDBhYWUgKi8KICAgYW5vZGVfc2Vjbm8gc2VsZjsJCQkvKiBwb2ludGVyIHRvIHRoaXMgYW5vZGUgKi8KICAgc2Vjbm8gdXA7CQkJCS8qIHBhcmVudCBhbm9kZSBvciBmbm9kZSAqLwogCkBAIC00NDAsNyArNTA5LDcgQEAKICAgICBzdHJ1Y3QgYnBsdXNfaW50ZXJuYWxfbm9kZSBpbnRlcm5hbFs2MF07CiAgIH0gdTsKIAotICB1bnNpZ25lZCBmaWxsWzNdOwkJCS8qIHVudXNlZCAqLworICB1MzIgZmlsbFszXTsJCQkJLyogdW51c2VkICovCiB9OwogCiAKQEAgLTQ2MSwyNSArNTMwLDMxIEBACiAKIHN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUKIHsKLSAgdW5zaWduZWQgaW5kaXJlY3Q6IDE7CQkJLyogMSAtPiB2YWx1ZSBnaXZlcyBzZWN0b3IgbnVtYmVyCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOCisgIHU4IGluZGlyZWN0OiAxOwkJCS8qIDEgLT4gdmFsdWUgZ2l2ZXMgc2VjdG9yIG51bWJlcgogCQkJCQkgICB3aGVyZSByZWFsIHZhbHVlIHN0YXJ0cyAqLwotICB1bnNpZ25lZCBhbm9kZTogMTsJCQkvKiAxIC0+IHNlY3RvciBpcyBhbiBhbm9kZQorICB1OCBhbm9kZTogMTsJCQkJLyogMSAtPiBzZWN0b3IgaXMgYW4gYW5vZGUKIAkJCQkJICAgdGhhdCBwb2ludHMgdG8gZnJhZ21lbnRlZCB2YWx1ZSAqLwotICB1bnNpZ25lZCBmbGFnMjogMTsKLSAgdW5zaWduZWQgZmxhZzM6IDE7Ci0gIHVuc2lnbmVkIGZsYWc0OiAxOwotICB1bnNpZ25lZCBmbGFnNTogMTsKLSAgdW5zaWduZWQgZmxhZzY6IDE7Ci0gIHVuc2lnbmVkIG5lZWRlYTogMTsJCQkvKiByZXF1aXJlZCBlYSAqLwotICB1bnNpZ25lZCBjaGFyIG5hbWVsZW47CQkvKiBsZW5ndGggb2YgbmFtZSwgYnl0ZXMgKi8KLSAgdW5zaWduZWQgc2hvcnQgdmFsdWVsZW47CQkvKiBsZW5ndGggb2YgdmFsdWUsIGJ5dGVzICovCi0gIHVuc2lnbmVkIGNoYXIgbmFtZVswXTsKKyAgdTggZmxhZzIzNDU2OiA1OworICB1OCBuZWVkZWE6IDE7CQkJCS8qIHJlcXVpcmVkIGVhICovCisjZWxzZQorICB1OCBuZWVkZWE6IDE7CQkJCS8qIHJlcXVpcmVkIGVhICovCisgIHU4IGZsYWcyMzQ1NjogNTsKKyAgdTggYW5vZGU6IDE7CQkJCS8qIDEgLT4gc2VjdG9yIGlzIGFuIGFub2RlCisJCQkJCSAgIHRoYXQgcG9pbnRzIHRvIGZyYWdtZW50ZWQgdmFsdWUgKi8KKyAgdTggaW5kaXJlY3Q6IDE7CQkJLyogMSAtPiB2YWx1ZSBnaXZlcyBzZWN0b3IgbnVtYmVyCisJCQkJCSAgIHdoZXJlIHJlYWwgdmFsdWUgc3RhcnRzICovCisjZW5kaWYKKyAgdTggbmFtZWxlbjsJCQkJLyogbGVuZ3RoIG9mIG5hbWUsIGJ5dGVzICovCisgIHU4IHZhbHVlbGVuX2xvOwkJCS8qIGxlbmd0aCBvZiB2YWx1ZSwgYnl0ZXMgKi8KKyAgdTggdmFsdWVsZW5faGk7CQkJLyogbGVuZ3RoIG9mIHZhbHVlLCBieXRlcyAqLworICB1OCBuYW1lWzBdOwogICAvKgotICAgIHVuc2lnbmVkIGNoYXIgbmFtZVtuYW1lbGVuXTsJYXNjaWkgYXR0cmliIG5hbWUKLSAgICB1bnNpZ25lZCBjaGFyIG51bDsJCQl0ZXJtaW5hdGluZyAnXDAnLCBub3QgY291bnRlZAotICAgIHVuc2lnbmVkIGNoYXIgdmFsdWVbdmFsdWVsZW5dOwl2YWx1ZSwgYXJiaXRyYXJ5CisgICAgdTggbmFtZVtuYW1lbGVuXTsJCQlhc2NpaSBhdHRyaWIgbmFtZQorICAgIHU4IG51bDsJCQkJdGVybWluYXRpbmcgJ1wwJywgbm90IGNvdW50ZWQKKyAgICB1OCB2YWx1ZVt2YWx1ZWxlbl07CQkJdmFsdWUsIGFyYml0cmFyeQogICAgICAgaWYgdGhpcy5pbmRpcmVjdCwgdmFsdWVsZW4gaXMgOCBhbmQgdGhlIHZhbHVlIGlzCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aDsJCXJlYWwgbGVuZ3RoIG9mIHZhbHVlLCBieXRlcworICAgICAgICB1MzIgbGVuZ3RoOwkJCXJlYWwgbGVuZ3RoIG9mIHZhbHVlLCBieXRlcwogICAgICAgICBzZWNubyBzZWNubzsJCQlzZWN0b3IgYWRkcmVzcyB3aGVyZSBpdCBzdGFydHMKICAgICAgIGlmIHRoaXMuYW5vZGUsIHRoZSBhYm92ZSBzZWN0b3IgbnVtYmVyIGlzIHRoZSByb290IG9mIGFuIGFub2RlIHRyZWUKICAgICAgICAgd2hpY2ggcG9pbnRzIHRvIHRoZSB2YWx1ZS4KZGlmZiAtLWdpdCBhL2ZzL2hwZnMvaHBmc19mbi5oIGIvZnMvaHBmcy9ocGZzX2ZuLmgKaW5kZXggYzE1YWRiYy4uZGQ1NTJmOCAxMDA2NDQKLS0tIGEvZnMvaHBmcy9ocGZzX2ZuLmgKKysrIGIvZnMvaHBmcy9ocGZzX2ZuLmgKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiAjaW5jbHVkZSAiaHBmcy5oIgogCkBAIC01MSwxOCArNTIsMTYgQEAKIAl1bnNpZ25lZCBpX2Rpc2tfc2VjOwkvKiAoZmlsZXMpIG1pbmltYWxpc3QgY2FjaGUgb2YgYWxsb2MgaW5mbyAqLwogCXVuc2lnbmVkIGlfbl9zZWNzOwkvKiAoZmlsZXMpIG1pbmltYWxpc3QgY2FjaGUgb2YgYWxsb2MgaW5mbyAqLwogCXVuc2lnbmVkIGlfZWFfc2l6ZTsJLyogc2l6ZSBvZiBleHRlbmRlZCBhdHRyaWJ1dGVzICovCi0JdW5zaWduZWQgaV9jb252IDogMjsJLyogKGZpbGVzKSBjcmxmLT5uZXdsaW5lIGhhY2tlcnkgKi8KIAl1bnNpZ25lZCBpX2VhX21vZGUgOiAxOwkvKiBmaWxlJ3MgcGVybWlzc2lvbiBpcyBzdG9yZWQgaW4gZWEgKi8KIAl1bnNpZ25lZCBpX2VhX3VpZCA6IDE7CS8qIGZpbGUncyB1aWQgaXMgc3RvcmVkIGluIGVhICovCiAJdW5zaWduZWQgaV9lYV9naWQgOiAxOwkvKiBmaWxlJ3MgZ2lkIGlzIHN0b3JlZCBpbiBlYSAqLwogCXVuc2lnbmVkIGlfZGlydHkgOiAxOwotCXN0cnVjdCBtdXRleCBpX211dGV4OwotCXN0cnVjdCBtdXRleCBpX3BhcmVudF9tdXRleDsKIAlsb2ZmX3QgKippX3JkZGlyX29mZjsKIAlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwogfTsKIAogc3RydWN0IGhwZnNfc2JfaW5mbyB7CisJc3RydWN0IG11dGV4IGhwZnNfbXV0ZXg7CS8qIGdsb2JhbCBocGZzIGxvY2sgKi8KIAlpbm9fdCBzYl9yb290OwkJCS8qIGlub2RlIG51bWJlciBvZiByb290IGRpciAqLwogCXVuc2lnbmVkIHNiX2ZzX3NpemU7CQkvKiBmaWxlIHN5c3RlbSBzaXplLCBzZWN0b3JzICovCiAJdW5zaWduZWQgc2JfYml0bWFwczsJCS8qIHNlY3RvciBudW1iZXIgb2YgYml0bWFwIGxpc3QgKi8KQEAgLTc0LDcgKzczLDYgQEAKIAl1aWRfdCBzYl91aWQ7CQkJLyogdWlkIGZyb20gbW91bnQgb3B0aW9ucyAqLwogCWdpZF90IHNiX2dpZDsJCQkvKiBnaWQgZnJvbSBtb3VudCBvcHRpb25zICovCiAJdW1vZGVfdCBzYl9tb2RlOwkJLyogbW9kZSBmcm9tIG1vdW50IG9wdGlvbnMgKi8KLQl1bnNpZ25lZCBzYl9jb252IDogMjsJCS8qIGNybGYtPm5ld2xpbmUgaGFja2VyeSAqLwogCXVuc2lnbmVkIHNiX2VhcyA6IDI7CQkvKiBlYXM6IDAtaWdub3JlLCAxLXJvLCAyLXJ3ICovCiAJdW5zaWduZWQgc2JfZXJyIDogMjsJCS8qIG9uIGVycnM6IDAtY29udCwgMS1ybywgMi1wYW5pYyAqLwogCXVuc2lnbmVkIHNiX2NoayA6IDI7CQkvKiBjaGVja3M6IDAtbm8sIDEtbm9ybWFsLCAyLXN0cmljdCAqLwpAQCAtODcsMjAgKzg1LDkgQEAKIAl1bnNpZ25lZCAqc2JfYm1wX2RpcjsJCS8qIG1haW4gYml0bWFwIGRpcmVjdG9yeSAqLwogCXVuc2lnbmVkIHNiX2NfYml0bWFwOwkJLyogY3VycmVudCBiaXRtYXAgKi8KIAl1bnNpZ25lZCBzYl9tYXhfZndkX2FsbG9jOwkvKiBtYXggZm9yd2FkIGFsbG9jYXRpb24gKi8KLQlzdHJ1Y3QgbXV0ZXggaHBmc19jcmVhdGlvbl9kZTsJLyogd2hlbiBjcmVhdGluZyBkaXJlbnRzLCBub2JvZHkgZWxzZQotCQkJCQkgICBjYW4gYWxsb2MgYmxvY2tzICovCi0JLyp1bnNpZ25lZCBzYl9tb3VudGluZyA6IDE7Ki8KIAlpbnQgc2JfdGltZXNoaWZ0OwogfTsKIAotLyoKLSAqIGNvbnY9IG9wdGlvbnMKLSAqLwotCi0jZGVmaW5lIENPTlZfQklOQVJZIDAJCQkvKiBubyBjb252ZXJzaW9uICovCi0jZGVmaW5lIENPTlZfVEVYVCAxCQkJLyogY3JsZi0+bmV3bGluZSAqLwotI2RlZmluZSBDT05WX0FVVE8gMgkJCS8qIGRlY2lkZSBiYXNlZCBvbiBmaWxlIGNvbnRlbnRzICovCi0KIC8qIEZvdXIgNTEyLWJ5dGUgYnVmZmVycyBhbmQgdGhlIDJrIGJsb2NrIG9idGFpbmVkIGJ5IGNvbmNhdGVuYXRpbmcgdGhlbSAqLwogCiBzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCB7CkBAIC0xMTMsNyArMTAwLDcgQEAKIHN0YXRpYyBpbmxpbmUgZG5vZGVfc2Vjbm8gZGVfZG93bl9wb2ludGVyIChzdHJ1Y3QgaHBmc19kaXJlbnQgKmRlKQogewogICBDSEtDT05EKGRlLT5kb3duLCgiSFBGUzogZGVfZG93bl9wb2ludGVyOiAhZGUtPmRvd25cbiIpKTsKLSAgcmV0dXJuICooZG5vZGVfc2Vjbm8gKikgKCh2b2lkICopIGRlICsgZGUtPmxlbmd0aCAtIDQpOworICByZXR1cm4gbGUzMl90b19jcHUoKihkbm9kZV9zZWNubyAqKSAoKHZvaWQgKikgZGUgKyBsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKSAtIDQpKTsKIH0KIAogLyogVGhlIGZpcnN0IGRpciBlbnRyeSBpbiBhIGRub2RlICovCkBAIC0xMjcsNDEgKzExNCw0NiBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBocGZzX2RpcmVudCAqZG5vZGVfZW5kX2RlIChzdHJ1Y3QgZG5vZGUgKmRub2RlKQogewotICBDSEtDT05EKGRub2RlLT5maXJzdF9mcmVlPj0weDE0ICYmIGRub2RlLT5maXJzdF9mcmVlPD0weGEwMCwoIkhQRlM6IGRub2RlX2VuZF9kZTogZG5vZGUtPmZpcnN0X2ZyZWUgPSAlZFxuIiwoaW50KWRub2RlLT5maXJzdF9mcmVlKSk7Ci0gIHJldHVybiAodm9pZCAqKSBkbm9kZSArIGRub2RlLT5maXJzdF9mcmVlOworICBDSEtDT05EKGxlMzJfdG9fY3B1KGRub2RlLT5maXJzdF9mcmVlKT49MHgxNCAmJiBsZTMyX3RvX2NwdShkbm9kZS0+Zmlyc3RfZnJlZSk8PTB4YTAwLCgiSFBGUzogZG5vZGVfZW5kX2RlOiBkbm9kZS0+Zmlyc3RfZnJlZSA9ICV4XG4iLCh1bnNpZ25lZClsZTMyX3RvX2NwdShkbm9kZS0+Zmlyc3RfZnJlZSkpKTsKKyAgcmV0dXJuICh2b2lkICopIGRub2RlICsgbGUzMl90b19jcHUoZG5vZGUtPmZpcnN0X2ZyZWUpOwogfQogCiAvKiBUaGUgZGlyIGVudHJ5IGFmdGVyIGRpciBlbnRyeSBkZSAqLwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBocGZzX2RpcmVudCAqZGVfbmV4dF9kZSAoc3RydWN0IGhwZnNfZGlyZW50ICpkZSkKIHsKLSAgQ0hLQ09ORChkZS0+bGVuZ3RoPj0weDIwICYmIGRlLT5sZW5ndGg8MHg4MDAsKCJIUEZTOiBkZV9uZXh0X2RlOiBkZS0+bGVuZ3RoID0gJWRcbiIsKGludClkZS0+bGVuZ3RoKSk7Ci0gIHJldHVybiAodm9pZCAqKSBkZSArIGRlLT5sZW5ndGg7CisgIENIS0NPTkQobGUxNl90b19jcHUoZGUtPmxlbmd0aCk+PTB4MjAgJiYgbGUxNl90b19jcHUoZGUtPmxlbmd0aCk8MHg4MDAsKCJIUEZTOiBkZV9uZXh0X2RlOiBkZS0+bGVuZ3RoID0gJXhcbiIsKHVuc2lnbmVkKWxlMTZfdG9fY3B1KGRlLT5sZW5ndGgpKSk7CisgIHJldHVybiAodm9pZCAqKSBkZSArIGxlMTZfdG9fY3B1KGRlLT5sZW5ndGgpOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKmZub2RlX2VhKHN0cnVjdCBmbm9kZSAqZm5vZGUpCiB7Ci0JcmV0dXJuIChzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICopKChjaGFyICopZm5vZGUgKyBmbm9kZS0+ZWFfb2ZmcyArIGZub2RlLT5hY2xfc2l6ZV9zKTsKKwlyZXR1cm4gKHN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKikoKGNoYXIgKilmbm9kZSArIGxlMTZfdG9fY3B1KGZub2RlLT5lYV9vZmZzKSArIGxlMTZfdG9fY3B1KGZub2RlLT5hY2xfc2l6ZV9zKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqZm5vZGVfZW5kX2VhKHN0cnVjdCBmbm9kZSAqZm5vZGUpCiB7Ci0JcmV0dXJuIChzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICopKChjaGFyICopZm5vZGUgKyBmbm9kZS0+ZWFfb2ZmcyArIGZub2RlLT5hY2xfc2l6ZV9zICsgZm5vZGUtPmVhX3NpemVfcyk7CisJcmV0dXJuIChzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICopKChjaGFyICopZm5vZGUgKyBsZTE2X3RvX2NwdShmbm9kZS0+ZWFfb2ZmcykgKyBsZTE2X3RvX2NwdShmbm9kZS0+YWNsX3NpemVfcykgKyBsZTE2X3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9zKSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBlYV92YWx1ZWxlbihzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICplYSkKK3sKKwlyZXR1cm4gZWEtPnZhbHVlbGVuX2xvICsgMjU2ICogZWEtPnZhbHVlbGVuX2hpOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKm5leHRfZWEoc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqZWEpCiB7Ci0JcmV0dXJuIChzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICopKChjaGFyICopZWEgKyA1ICsgZWEtPm5hbWVsZW4gKyBlYS0+dmFsdWVsZW4pOworCXJldHVybiAoc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqKSgoY2hhciAqKWVhICsgNSArIGVhLT5uYW1lbGVuICsgZWFfdmFsdWVsZW4oZWEpKTsKIH0KIAogc3RhdGljIGlubGluZSBzZWNubyBlYV9zZWMoc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqZWEpCiB7Ci0JcmV0dXJuICooc2Vjbm8gKikoKGNoYXIgKillYSArIDkgKyBlYS0+bmFtZWxlbik7CisJcmV0dXJuIGxlMzJfdG9fY3B1KGdldF91bmFsaWduZWQoKHNlY25vICopKChjaGFyICopZWEgKyA5ICsgZWEtPm5hbWVsZW4pKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc2Vjbm8gZWFfbGVuKHN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKmVhKQogewotCXJldHVybiAqKHNlY25vICopKChjaGFyICopZWEgKyA1ICsgZWEtPm5hbWVsZW4pOworCXJldHVybiBsZTMyX3RvX2NwdShnZXRfdW5hbGlnbmVkKChzZWNubyAqKSgoY2hhciAqKWVhICsgNSArIGVhLT5uYW1lbGVuKSkpOwogfQogCiBzdGF0aWMgaW5saW5lIGNoYXIgKmVhX2RhdGEoc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqZWEpCkBAIC0xODYsMTMgKzE3OCwxMyBAQAogCWRzdC0+bm90Xzh4MyA9IG47CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgdHN0Yml0cyh1bnNpZ25lZCAqYm1wLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBuKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCB0c3RiaXRzKHUzMiAqYm1wLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBuKQogewogCWludCBpOwogCWlmICgoYiA+PSAweDQwMDApIHx8IChiICsgbiAtIDEgPj0gMHg0MDAwKSkgcmV0dXJuIG47Ci0JaWYgKCEoKGJtcFsoYiAmIDB4M2ZmZikgPj4gNV0gPj4gKGIgJiAweDFmKSkgJiAxKSkgcmV0dXJuIDE7CisJaWYgKCEoKGxlMzJfdG9fY3B1KGJtcFsoYiAmIDB4M2ZmZikgPj4gNV0pID4+IChiICYgMHgxZikpICYgMSkpIHJldHVybiAxOwogCWZvciAoaSA9IDE7IGkgPCBuOyBpKyspCi0JCWlmICgvKmIraSA8IDB4NDAwMCAmJiovICEoKGJtcFsoKGIraSkgJiAweDNmZmYpID4+IDVdID4+ICgoYitpKSAmIDB4MWYpKSAmIDEpKQorCQlpZiAoISgobGUzMl90b19jcHUoYm1wWygoYitpKSAmIDB4M2ZmZikgPj4gNV0pID4+ICgoYitpKSAmIDB4MWYpKSAmIDEpKQogCQkJcmV0dXJuIGkgKyAxOwogCXJldHVybiAwOwogfQpAQCAtMjAwLDEyICsxOTIsMTIgQEAKIC8qIGFsbG9jLmMgKi8KIAogaW50IGhwZnNfY2hrX3NlY3RvcnMoc3RydWN0IHN1cGVyX2Jsb2NrICosIHNlY25vLCBpbnQsIGNoYXIgKik7Ci1zZWNubyBocGZzX2FsbG9jX3NlY3RvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc2Vjbm8sIHVuc2lnbmVkLCBpbnQsIGludCk7CitzZWNubyBocGZzX2FsbG9jX3NlY3RvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc2Vjbm8sIHVuc2lnbmVkLCBpbnQpOwogaW50IGhwZnNfYWxsb2NfaWZfcG9zc2libGUoc3RydWN0IHN1cGVyX2Jsb2NrICosIHNlY25vKTsKIHZvaWQgaHBmc19mcmVlX3NlY3RvcnMoc3RydWN0IHN1cGVyX2Jsb2NrICosIHNlY25vLCB1bnNpZ25lZCk7CiBpbnQgaHBmc19jaGVja19mcmVlX2Rub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50KTsKIHZvaWQgaHBmc19mcmVlX2Rub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzZWNubyk7Ci1zdHJ1Y3QgZG5vZGUgKmhwZnNfYWxsb2NfZG5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICosIHNlY25vLCBkbm9kZV9zZWNubyAqLCBzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCAqLCBpbnQpOworc3RydWN0IGRub2RlICpocGZzX2FsbG9jX2Rub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzZWNubywgZG5vZGVfc2Vjbm8gKiwgc3RydWN0IHF1YWRfYnVmZmVyX2hlYWQgKik7CiBzdHJ1Y3QgZm5vZGUgKmhwZnNfYWxsb2NfZm5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICosIHNlY25vLCBmbm9kZV9zZWNubyAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiopOwogc3RydWN0IGFub2RlICpocGZzX2FsbG9jX2Fub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzZWNubywgYW5vZGVfc2Vjbm8gKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqKTsKIApAQCAtMjIyLDggKzIxNCw2IEBACiAKIC8qIGJ1ZmZlci5jICovCiAKLXZvaWQgaHBmc19sb2NrX2NyZWF0aW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKLXZvaWQgaHBmc191bmxvY2tfY3JlYXRpb24oc3RydWN0IHN1cGVyX2Jsb2NrICopOwogdm9pZCAqaHBmc19tYXBfc2VjdG9yKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqLCBpbnQpOwogdm9pZCAqaHBmc19nZXRfc2VjdG9yKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqKTsKIHZvaWQgKmhwZnNfbWFwXzRzZWN0b3JzKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCwgc3RydWN0IHF1YWRfYnVmZmVyX2hlYWQgKiwgaW50KTsKQEAgLTI0Nyw3ICsyMzcsNyBAQAogc3RydWN0IGhwZnNfZGlyZW50ICpocGZzX2FkZF9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGRub2RlICosCiAJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCwgc2Vjbm8pOwogaW50IGhwZnNfYWRkX2RpcmVudChzdHJ1Y3QgaW5vZGUgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCwKLQkJICAgIHN0cnVjdCBocGZzX2RpcmVudCAqLCBpbnQpOworCQkgICAgc3RydWN0IGhwZnNfZGlyZW50ICopOwogaW50IGhwZnNfcmVtb3ZlX2RpcmVudChzdHJ1Y3QgaW5vZGUgKiwgZG5vZGVfc2Vjbm8sIHN0cnVjdCBocGZzX2RpcmVudCAqLCBzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCAqLCBpbnQpOwogdm9pZCBocGZzX2NvdW50X2Rub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgZG5vZGVfc2Vjbm8sIGludCAqLCBpbnQgKiwgaW50ICopOwogZG5vZGVfc2Vjbm8gaHBmc19kZV9hc19kb3duX2FzX3Bvc3NpYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBkbm9kZV9zZWNubyBkbm8pOwpAQCAtMzAzLDcgKzI5Myw2IEBACiAJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkLCBpbnQpOwogaW50IGhwZnNfaXNfbmFtZV9sb25nKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQpOwogdm9pZCBocGZzX2FkanVzdF9sZW5ndGgoY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCAqKTsKLXZvaWQgaHBmc19kZWNpZGVfY29udihzdHJ1Y3QgaW5vZGUgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCk7CiAKIC8qIG5hbWVpLmMgKi8KIApAQCAtMzQ2LDIxICszMzUsMjYgQEAKIC8qCiAgKiBMb2NraW5nOgogICoKLSAqIGhwZnNfbG9jaygpIGlzIGEgbGVmdG92ZXIgZnJvbSB0aGUgYmlnIGtlcm5lbCBsb2NrLgotICogUmlnaHQgbm93LCB0aGVzZSBmdW5jdGlvbnMgYXJlIGVtcHR5IGFuZCBvbmx5IGxlZnQKLSAqIGZvciBkb2N1bWVudGF0aW9uIHB1cnBvc2VzLiBUaGUgZmlsZSBzeXN0ZW0gbm8gbG9uZ2VyCi0gKiB3b3JrcyBvbiBTTVAgc3lzdGVtcywgc28gdGhlIGxvY2sgaXMgbm90IG5lZWRlZAotICogYW55IG1vcmUuCisgKiBocGZzX2xvY2soKSBsb2NrcyB0aGUgd2hvbGUgZmlsZXN5c3RlbS4gSXQgbXVzdCBiZSB0YWtlbgorICogb24gYW55IG1ldGhvZCBjYWxsZWQgYnkgdGhlIFZGUy4KICAqCi0gKiBJZiBzb21lb25lIGlzIGludGVyZXN0ZWQgaW4gbWFraW5nIGl0IHdvcmsgYWdhaW4sIHRoaXMKLSAqIHdvdWxkIGJlIHRoZSBwbGFjZSB0byBzdGFydCBieSBhZGRpbmcgYSBwZXItc3VwZXJibG9jawotICogbXV0ZXggYW5kIGZpeGluZyBhbGwgdGhlIGJ1Z3MgYW5kIHBlcmZvcm1hbmNlIGlzc3VlcwotICogY2F1c2VkIGJ5IHRoYXQuCisgKiBXZSBkb24ndCBkbyBhbnkgcGVyLWZpbGUgbG9ja2luZyBhbnltb3JlLCBpdCBpcyBoYXJkIHRvCisgKiByZXZpZXcgYW5kIEhQRlMgaXMgbm90IHBlcmZvcm1hbmNlLXNlbnNpdGl2ZSBhbnl3YXkuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBocGZzX2xvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzKQogeworCXN0cnVjdCBocGZzX3NiX2luZm8gKnNiaSA9IGhwZnNfc2Iocyk7CisJbXV0ZXhfbG9jaygmc2JpLT5ocGZzX211dGV4KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGhwZnNfdW5sb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqcykKIHsKKwlzdHJ1Y3QgaHBmc19zYl9pbmZvICpzYmkgPSBocGZzX3NiKHMpOworCW11dGV4X3VubG9jaygmc2JpLT5ocGZzX211dGV4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhwZnNfbG9ja19hc3NlcnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzKQoreworCXN0cnVjdCBocGZzX3NiX2luZm8gKnNiaSA9IGhwZnNfc2Iocyk7CisJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZzYmktPmhwZnNfbXV0ZXgpKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2hwZnMvaW5vZGUuYyBiL2ZzL2hwZnMvaW5vZGUuYwppbmRleCA4N2YxZjc4Li4zMzhjZDgzIDEwMDY0NAotLS0gYS9mcy9ocGZzL2lub2RlLmMKKysrIGIvZnMvaHBmcy9pbm9kZS5jCkBAIC0xNyw3ICsxNyw2IEBACiAJaS0+aV91aWQgPSBocGZzX3NiKHNiKS0+c2JfdWlkOwogCWktPmlfZ2lkID0gaHBmc19zYihzYiktPnNiX2dpZDsKIAlpLT5pX21vZGUgPSBocGZzX3NiKHNiKS0+c2JfbW9kZTsKLQlocGZzX2lub2RlLT5pX2NvbnYgPSBocGZzX3NiKHNiKS0+c2JfY29udjsKIAlpLT5pX3NpemUgPSAtMTsKIAlpLT5pX2Jsb2NrcyA9IC0xOwogCQpAQCAtMTE2LDggKzExNSw4IEBACiAJCWktPmlfbW9kZSB8PSBTX0lGRElSOwogCQlpLT5pX29wID0gJmhwZnNfZGlyX2lvcHM7CiAJCWktPmlfZm9wID0gJmhwZnNfZGlyX29wczsKLQkJaHBmc19pbm9kZS0+aV9wYXJlbnRfZGlyID0gZm5vZGUtPnVwOwotCQlocGZzX2lub2RlLT5pX2RubyA9IGZub2RlLT51LmV4dGVybmFsWzBdLmRpc2tfc2Vjbm87CisJCWhwZnNfaW5vZGUtPmlfcGFyZW50X2RpciA9IGxlMzJfdG9fY3B1KGZub2RlLT51cCk7CisJCWhwZnNfaW5vZGUtPmlfZG5vID0gbGUzMl90b19jcHUoZm5vZGUtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubyk7CiAJCWlmIChocGZzX3NiKHNiKS0+c2JfY2hrID49IDIpIHsKIAkJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmgwOwogCQkJaWYgKGhwZnNfbWFwX2Zub2RlKHNiLCBocGZzX2lub2RlLT5pX3BhcmVudF9kaXIsICZiaDApKSBicmVsc2UoYmgwKTsKQEAgLTEzMyw3ICsxMzIsNyBAQAogCQlpLT5pX29wID0gJmhwZnNfZmlsZV9pb3BzOwogCQlpLT5pX2ZvcCA9ICZocGZzX2ZpbGVfb3BzOwogCQlpLT5pX25saW5rID0gMTsKLQkJaS0+aV9zaXplID0gZm5vZGUtPmZpbGVfc2l6ZTsKKwkJaS0+aV9zaXplID0gbGUzMl90b19jcHUoZm5vZGUtPmZpbGVfc2l6ZSk7CiAJCWktPmlfYmxvY2tzID0gKChpLT5pX3NpemUgKyA1MTEpID4+IDkpICsgMTsKIAkJaS0+aV9kYXRhLmFfb3BzID0gJmhwZnNfYW9wczsKIAkJaHBmc19pKGkpLT5tbXVfcHJpdmF0ZSA9IGktPmlfc2l6ZTsKQEAgLTE0NCw3ICsxNDMsNyBAQAogc3RhdGljIHZvaWQgaHBmc193cml0ZV9pbm9kZV9lYShzdHJ1Y3QgaW5vZGUgKmksIHN0cnVjdCBmbm9kZSAqZm5vZGUpCiB7CiAJc3RydWN0IGhwZnNfaW5vZGVfaW5mbyAqaHBmc19pbm9kZSA9IGhwZnNfaShpKTsKLQkvKmlmIChmbm9kZS0+YWNsX3NpemVfbCB8fCBmbm9kZS0+YWNsX3NpemVfcykgeworCS8qaWYgKGxlMzJfdG9fY3B1KGZub2RlLT5hY2xfc2l6ZV9sKSB8fCBsZTE2X3RvX2NwdShmbm9kZS0+YWNsX3NpemVfcykpIHsKIAkJICAgU29tZSB1bmtub3duIHN0cnVjdHVyZXMgbGlrZSBBQ0wgbWF5IGJlIGluIGZub2RlLAogCQkgICB3ZSdkIGJldHRlciBub3Qgb3ZlcndyaXRlIHRoZW0KIAkJaHBmc19lcnJvcihpLT5pX3NiLCAiZm5vZGUgJTA4eCBoYXMgc29tZSB1bmtub3duIEhQRlMzODYgc3R1Y3R1cmVzIiwgaS0+aV9pbm8pOwpAQCAtMTg3LDkgKzE4Niw3IEBACiAJCWtmcmVlKGhwZnNfaW5vZGUtPmlfcmRkaXJfb2ZmKTsKIAkJaHBmc19pbm9kZS0+aV9yZGRpcl9vZmYgPSBOVUxMOwogCX0KLQltdXRleF9sb2NrKCZocGZzX2lub2RlLT5pX3BhcmVudF9tdXRleCk7CiAJaWYgKCFpLT5pX25saW5rKSB7Ci0JCW11dGV4X3VubG9jaygmaHBmc19pbm9kZS0+aV9wYXJlbnRfbXV0ZXgpOwogCQlyZXR1cm47CiAJfQogCXBhcmVudCA9IGlnZXRfbG9ja2VkKGktPmlfc2IsIGhwZnNfaW5vZGUtPmlfcGFyZW50X2Rpcik7CkBAIC0yMDAsMTQgKzE5Nyw5IEBACiAJCQlocGZzX3JlYWRfaW5vZGUocGFyZW50KTsKIAkJCXVubG9ja19uZXdfaW5vZGUocGFyZW50KTsKIAkJfQotCQltdXRleF9sb2NrKCZocGZzX2lub2RlLT5pX211dGV4KTsKIAkJaHBmc193cml0ZV9pbm9kZV9ub2xvY2soaSk7Ci0JCW11dGV4X3VubG9jaygmaHBmc19pbm9kZS0+aV9tdXRleCk7CiAJCWlwdXQocGFyZW50KTsKLQl9IGVsc2UgewotCQltYXJrX2lub2RlX2RpcnR5KGkpOwogCX0KLQltdXRleF91bmxvY2soJmhwZnNfaW5vZGUtPmlfcGFyZW50X211dGV4KTsKIH0KIAogdm9pZCBocGZzX3dyaXRlX2lub2RlX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmkpCkBAIC0yMjYsMzAgKzIxOCwzMCBAQAogCQl9CiAJfSBlbHNlIGRlID0gTlVMTDsKIAlpZiAoU19JU1JFRyhpLT5pX21vZGUpKSB7Ci0JCWZub2RlLT5maWxlX3NpemUgPSBpLT5pX3NpemU7Ci0JCWlmIChkZSkgZGUtPmZpbGVfc2l6ZSA9IGktPmlfc2l6ZTsKKwkJZm5vZGUtPmZpbGVfc2l6ZSA9IGNwdV90b19sZTMyKGktPmlfc2l6ZSk7CisJCWlmIChkZSkgZGUtPmZpbGVfc2l6ZSA9IGNwdV90b19sZTMyKGktPmlfc2l6ZSk7CiAJfSBlbHNlIGlmIChTX0lTRElSKGktPmlfbW9kZSkpIHsKLQkJZm5vZGUtPmZpbGVfc2l6ZSA9IDA7Ci0JCWlmIChkZSkgZGUtPmZpbGVfc2l6ZSA9IDA7CisJCWZub2RlLT5maWxlX3NpemUgPSBjcHVfdG9fbGUzMigwKTsKKwkJaWYgKGRlKSBkZS0+ZmlsZV9zaXplID0gY3B1X3RvX2xlMzIoMCk7CiAJfQogCWhwZnNfd3JpdGVfaW5vZGVfZWEoaSwgZm5vZGUpOwogCWlmIChkZSkgewotCQlkZS0+d3JpdGVfZGF0ZSA9IGdtdF90b19sb2NhbChpLT5pX3NiLCBpLT5pX210aW1lLnR2X3NlYyk7Ci0JCWRlLT5yZWFkX2RhdGUgPSBnbXRfdG9fbG9jYWwoaS0+aV9zYiwgaS0+aV9hdGltZS50dl9zZWMpOwotCQlkZS0+Y3JlYXRpb25fZGF0ZSA9IGdtdF90b19sb2NhbChpLT5pX3NiLCBpLT5pX2N0aW1lLnR2X3NlYyk7CisJCWRlLT53cml0ZV9kYXRlID0gY3B1X3RvX2xlMzIoZ210X3RvX2xvY2FsKGktPmlfc2IsIGktPmlfbXRpbWUudHZfc2VjKSk7CisJCWRlLT5yZWFkX2RhdGUgPSBjcHVfdG9fbGUzMihnbXRfdG9fbG9jYWwoaS0+aV9zYiwgaS0+aV9hdGltZS50dl9zZWMpKTsKKwkJZGUtPmNyZWF0aW9uX2RhdGUgPSBjcHVfdG9fbGUzMihnbXRfdG9fbG9jYWwoaS0+aV9zYiwgaS0+aV9jdGltZS50dl9zZWMpKTsKIAkJZGUtPnJlYWRfb25seSA9ICEoaS0+aV9tb2RlICYgMDIyMik7Ci0JCWRlLT5lYV9zaXplID0gaHBmc19pbm9kZS0+aV9lYV9zaXplOworCQlkZS0+ZWFfc2l6ZSA9IGNwdV90b19sZTMyKGhwZnNfaW5vZGUtPmlfZWFfc2l6ZSk7CiAJCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoKTsKIAkJaHBmc19icmVsc2U0KCZxYmgpOwogCX0KIAlpZiAoU19JU0RJUihpLT5pX21vZGUpKSB7CiAJCWlmICgoZGUgPSBtYXBfZGlyZW50KGksIGhwZnNfaW5vZGUtPmlfZG5vLCAiXDAwMVwwMDEiLCAyLCBOVUxMLCAmcWJoKSkpIHsKLQkJCWRlLT53cml0ZV9kYXRlID0gZ210X3RvX2xvY2FsKGktPmlfc2IsIGktPmlfbXRpbWUudHZfc2VjKTsKLQkJCWRlLT5yZWFkX2RhdGUgPSBnbXRfdG9fbG9jYWwoaS0+aV9zYiwgaS0+aV9hdGltZS50dl9zZWMpOwotCQkJZGUtPmNyZWF0aW9uX2RhdGUgPSBnbXRfdG9fbG9jYWwoaS0+aV9zYiwgaS0+aV9jdGltZS50dl9zZWMpOworCQkJZGUtPndyaXRlX2RhdGUgPSBjcHVfdG9fbGUzMihnbXRfdG9fbG9jYWwoaS0+aV9zYiwgaS0+aV9tdGltZS50dl9zZWMpKTsKKwkJCWRlLT5yZWFkX2RhdGUgPSBjcHVfdG9fbGUzMihnbXRfdG9fbG9jYWwoaS0+aV9zYiwgaS0+aV9hdGltZS50dl9zZWMpKTsKKwkJCWRlLT5jcmVhdGlvbl9kYXRlID0gY3B1X3RvX2xlMzIoZ210X3RvX2xvY2FsKGktPmlfc2IsIGktPmlfY3RpbWUudHZfc2VjKSk7CiAJCQlkZS0+cmVhZF9vbmx5ID0gIShpLT5pX21vZGUgJiAwMjIyKTsKLQkJCWRlLT5lYV9zaXplID0gLypocGZzX2lub2RlLT5pX2VhX3NpemUqLzA7Ci0JCQlkZS0+ZmlsZV9zaXplID0gMDsKKwkJCWRlLT5lYV9zaXplID0gY3B1X3RvX2xlMzIoLypocGZzX2lub2RlLT5pX2VhX3NpemUqLzApOworCQkJZGUtPmZpbGVfc2l6ZSA9IGNwdV90b19sZTMyKDApOwogCQkJaHBmc19tYXJrXzRidWZmZXJzX2RpcnR5KCZxYmgpOwogCQkJaHBmc19icmVsc2U0KCZxYmgpOwogCQl9IGVsc2UKQEAgLTI2OSw2ICsyNjEsMTAgQEAKIAlocGZzX2xvY2soaW5vZGUtPmlfc2IpOwogCWlmIChpbm9kZS0+aV9pbm8gPT0gaHBmc19zYihpbm9kZS0+aV9zYiktPnNiX3Jvb3QpCiAJCWdvdG8gb3V0X3VubG9jazsKKwlpZiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9VSUQpICYmIGF0dHItPmlhX3VpZCA+PSAweDEwMDAwKQorCQlnb3RvIG91dF91bmxvY2s7CisJaWYgKChhdHRyLT5pYV92YWxpZCAmIEFUVFJfR0lEKSAmJiBhdHRyLT5pYV9naWQgPj0gMHgxMDAwMCkKKwkJZ290byBvdXRfdW5sb2NrOwogCWlmICgoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpICYmIGF0dHItPmlhX3NpemUgPiBpbm9kZS0+aV9zaXplKQogCQlnb3RvIG91dF91bmxvY2s7CiAKQEAgLTI4NCw3ICsyODAsNiBAQAogCX0KIAogCXNldGF0dHJfY29weShpbm9kZSwgYXR0cik7Ci0JbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAKIAlocGZzX3dyaXRlX2lub2RlKGlub2RlKTsKIApkaWZmIC0tZ2l0IGEvZnMvaHBmcy9tYXAuYyBiL2ZzL2hwZnMvbWFwLmMKaW5kZXggODQwZDAzMy4uYTc5MDgyMSAxMDA2NDQKLS0tIGEvZnMvaHBmcy9tYXAuYworKysgYi9mcy9ocGZzL21hcC5jCkBAIC0yMSw3ICsyMSw3IEBACiAJCWhwZnNfZXJyb3IocywgImhwZnNfbWFwX2JpdG1hcCBjYWxsZWQgd2l0aCBiYWQgcGFyYW1ldGVyOiAlMDh4IGF0ICVzIiwgYm1wX2Jsb2NrLCBpZCk7CiAJCXJldHVybiBOVUxMOwogCX0KLQlzZWMgPSBocGZzX3NiKHMpLT5zYl9ibXBfZGlyW2JtcF9ibG9ja107CisJc2VjID0gbGUzMl90b19jcHUoaHBmc19zYihzKS0+c2JfYm1wX2RpcltibXBfYmxvY2tdKTsKIAlpZiAoIXNlYyB8fCBzZWMgPiBocGZzX3NiKHMpLT5zYl9mc19zaXplLTQpIHsKIAkJaHBmc19lcnJvcihzLCAiaW52YWxpZCBiaXRtYXAgYmxvY2sgcG9pbnRlciAlMDh4IC0+ICUwOHggYXQgJXMiLCBibXBfYmxvY2ssIHNlYywgaWQpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTQ2LDE4ICs0NiwxOCBAQAogCXN0cnVjdCBjb2RlX3BhZ2VfZGF0YSAqY3BkOwogCXN0cnVjdCBjb2RlX3BhZ2VfZGlyZWN0b3J5ICpjcCA9IGhwZnNfbWFwX3NlY3RvcihzLCBjcHMsICZiaCwgMCk7CiAJaWYgKCFjcCkgcmV0dXJuIE5VTEw7Ci0JaWYgKGNwLT5tYWdpYyAhPSBDUF9ESVJfTUFHSUMpIHsKLQkJcHJpbnRrKCJIUEZTOiBDb2RlIHBhZ2UgZGlyZWN0b3J5IG1hZ2ljIGRvZXNuJ3QgbWF0Y2ggKG1hZ2ljID0gJTA4eClcbiIsIGNwLT5tYWdpYyk7CisJaWYgKGxlMzJfdG9fY3B1KGNwLT5tYWdpYykgIT0gQ1BfRElSX01BR0lDKSB7CisJCXByaW50aygiSFBGUzogQ29kZSBwYWdlIGRpcmVjdG9yeSBtYWdpYyBkb2Vzbid0IG1hdGNoIChtYWdpYyA9ICUwOHgpXG4iLCBsZTMyX3RvX2NwdShjcC0+bWFnaWMpKTsKIAkJYnJlbHNlKGJoKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCWlmICghY3AtPm5fY29kZV9wYWdlcykgeworCWlmICghbGUzMl90b19jcHUoY3AtPm5fY29kZV9wYWdlcykpIHsKIAkJcHJpbnRrKCJIUEZTOiBuX2NvZGVfcGFnZXMgPT0gMFxuIik7CiAJCWJyZWxzZShiaCk7CiAJCXJldHVybiBOVUxMOwogCX0KLQljcGRzID0gY3AtPmFycmF5WzBdLmNvZGVfcGFnZV9kYXRhOwotCWNwaSA9IGNwLT5hcnJheVswXS5pbmRleDsKKwljcGRzID0gbGUzMl90b19jcHUoY3AtPmFycmF5WzBdLmNvZGVfcGFnZV9kYXRhKTsKKwljcGkgPSBsZTE2X3RvX2NwdShjcC0+YXJyYXlbMF0uaW5kZXgpOwogCWJyZWxzZShiaCk7CiAKIAlpZiAoY3BpID49IDMpIHsKQEAgLTY2LDEyICs2NiwxMiBAQAogCX0KIAkKIAlpZiAoIShjcGQgPSBocGZzX21hcF9zZWN0b3IocywgY3BkcywgJmJoLCAwKSkpIHJldHVybiBOVUxMOwotCWlmICgodW5zaWduZWQpY3BkLT5vZmZzW2NwaV0gPiAweDE3OCkgeworCWlmIChsZTE2X3RvX2NwdShjcGQtPm9mZnNbY3BpXSkgPiAweDE3OCkgewogCQlwcmludGsoIkhQRlM6IENvZGUgcGFnZSBpbmRleCBvdXQgb2Ygc2VjdG9yXG4iKTsKIAkJYnJlbHNlKGJoKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCXB0ciA9ICh1bnNpZ25lZCBjaGFyICopY3BkICsgY3BkLT5vZmZzW2NwaV0gKyA2OworCXB0ciA9ICh1bnNpZ25lZCBjaGFyICopY3BkICsgbGUxNl90b19jcHUoY3BkLT5vZmZzW2NwaV0pICsgNjsKIAlpZiAoIShjcF90YWJsZSA9IGttYWxsb2MoMjU2LCBHRlBfS0VSTkVMKSkpIHsKIAkJcHJpbnRrKCJIUEZTOiBvdXQgb2YgbWVtb3J5IGZvciBjb2RlIHBhZ2UgdGFibGVcbiIpOwogCQlicmVsc2UoYmgpOwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJCWlmIChocGZzX3NiKHMpLT5zYl9jaGspIHsKIAkJCXN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKmVhOwogCQkJc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqZWFfZW5kOwotCQkJaWYgKGZub2RlLT5tYWdpYyAhPSBGTk9ERV9NQUdJQykgeworCQkJaWYgKGxlMzJfdG9fY3B1KGZub2RlLT5tYWdpYykgIT0gRk5PREVfTUFHSUMpIHsKIAkJCQlocGZzX2Vycm9yKHMsICJiYWQgbWFnaWMgb24gZm5vZGUgJTA4bHgiLAogCQkJCQkodW5zaWduZWQgbG9uZylpbm8pOwogCQkJCWdvdG8gYmFpbDsKQEAgLTEzOCw3ICsxMzgsNyBAQAogCQkJCQkgICAgKHVuc2lnbmVkIGxvbmcpaW5vKTsKIAkJCQkJZ290byBiYWlsOwogCQkJCX0KLQkJCQlpZiAoZm5vZGUtPmJ0cmVlLmZpcnN0X2ZyZWUgIT0KKwkJCQlpZiAobGUxNl90b19jcHUoZm5vZGUtPmJ0cmVlLmZpcnN0X2ZyZWUpICE9CiAJCQkJICAgIDggKyBmbm9kZS0+YnRyZWUubl91c2VkX25vZGVzICogKGZub2RlLT5idHJlZS5pbnRlcm5hbCA/IDggOiAxMikpIHsKIAkJCQkJaHBmc19lcnJvcihzLAogCQkJCQkgICAgImJhZCBmaXJzdF9mcmVlIHBvaW50ZXIgaW4gZm5vZGUgJTA4bHgiLApAQCAtMTQ2LDEyICsxNDYsMTIgQEAKIAkJCQkJZ290byBiYWlsOwogCQkJCX0KIAkJCX0KLQkJCWlmIChmbm9kZS0+ZWFfc2l6ZV9zICYmICgoc2lnbmVkIGludClmbm9kZS0+ZWFfb2ZmcyA8IDB4YzQgfHwKLQkJCSAgIChzaWduZWQgaW50KWZub2RlLT5lYV9vZmZzICsgZm5vZGUtPmFjbF9zaXplX3MgKyBmbm9kZS0+ZWFfc2l6ZV9zID4gMHgyMDApKSB7CisJCQlpZiAobGUxNl90b19jcHUoZm5vZGUtPmVhX3NpemVfcykgJiYgKGxlMTZfdG9fY3B1KGZub2RlLT5lYV9vZmZzKSA8IDB4YzQgfHwKKwkJCSAgIGxlMTZfdG9fY3B1KGZub2RlLT5lYV9vZmZzKSArIGxlMTZfdG9fY3B1KGZub2RlLT5hY2xfc2l6ZV9zKSArIGxlMTZfdG9fY3B1KGZub2RlLT5lYV9zaXplX3MpID4gMHgyMDApKSB7CiAJCQkJaHBmc19lcnJvcihzLAogCQkJCQkiYmFkIEVBIGluZm8gaW4gZm5vZGUgJTA4bHg6IGVhX29mZnMgPT0gJTA0eCBlYV9zaXplX3MgPT0gJTA0eCIsCiAJCQkJCSh1bnNpZ25lZCBsb25nKWlubywKLQkJCQkJZm5vZGUtPmVhX29mZnMsIGZub2RlLT5lYV9zaXplX3MpOworCQkJCQlsZTE2X3RvX2NwdShmbm9kZS0+ZWFfb2ZmcyksIGxlMTZfdG9fY3B1KGZub2RlLT5lYV9zaXplX3MpKTsKIAkJCQlnb3RvIGJhaWw7CiAJCQl9CiAJCQllYSA9IGZub2RlX2VhKGZub2RlKTsKQEAgLTE3OCwxNiArMTc4LDIwIEBACiAJaWYgKGhwZnNfc2IocyktPnNiX2NoaykgaWYgKGhwZnNfY2hrX3NlY3RvcnMocywgYW5vLCAxLCAiYW5vZGUiKSkgcmV0dXJuIE5VTEw7CiAJaWYgKChhbm9kZSA9IGhwZnNfbWFwX3NlY3RvcihzLCBhbm8sIGJocCwgQU5PREVfUkRfQUhFQUQpKSkKIAkJaWYgKGhwZnNfc2IocyktPnNiX2NoaykgewotCQkJaWYgKGFub2RlLT5tYWdpYyAhPSBBTk9ERV9NQUdJQyB8fCBhbm9kZS0+c2VsZiAhPSBhbm8pIHsKKwkJCWlmIChsZTMyX3RvX2NwdShhbm9kZS0+bWFnaWMpICE9IEFOT0RFX01BR0lDKSB7CiAJCQkJaHBmc19lcnJvcihzLCAiYmFkIG1hZ2ljIG9uIGFub2RlICUwOHgiLCBhbm8pOwogCQkJCWdvdG8gYmFpbDsKIAkJCX0KKwkJCWlmIChsZTMyX3RvX2NwdShhbm9kZS0+c2VsZikgIT0gYW5vKSB7CisJCQkJaHBmc19lcnJvcihzLCAic2VsZiBwb2ludGVyIGludmFsaWQgb24gYW5vZGUgJTA4eCIsIGFubyk7CisJCQkJZ290byBiYWlsOworCQkJfQogCQkJaWYgKCh1bnNpZ25lZClhbm9kZS0+YnRyZWUubl91c2VkX25vZGVzICsgKHVuc2lnbmVkKWFub2RlLT5idHJlZS5uX2ZyZWVfbm9kZXMgIT0KIAkJCSAgICAoYW5vZGUtPmJ0cmVlLmludGVybmFsID8gNjAgOiA0MCkpIHsKIAkJCQlocGZzX2Vycm9yKHMsICJiYWQgbnVtYmVyIG9mIG5vZGVzIGluIGFub2RlICUwOHgiLCBhbm8pOwogCQkJCWdvdG8gYmFpbDsKIAkJCX0KLQkJCWlmIChhbm9kZS0+YnRyZWUuZmlyc3RfZnJlZSAhPQorCQkJaWYgKGxlMTZfdG9fY3B1KGFub2RlLT5idHJlZS5maXJzdF9mcmVlKSAhPQogCQkJICAgIDggKyBhbm9kZS0+YnRyZWUubl91c2VkX25vZGVzICogKGFub2RlLT5idHJlZS5pbnRlcm5hbCA/IDggOiAxMikpIHsKIAkJCQlocGZzX2Vycm9yKHMsICJiYWQgZmlyc3RfZnJlZSBwb2ludGVyIGluIGFub2RlICUwOHgiLCBhbm8pOwogCQkJCWdvdG8gYmFpbDsKQEAgLTIxOSwyNiArMjIzLDI2IEBACiAJCQl1bnNpZ25lZCBwLCBwcCA9IDA7CiAJCQl1bnNpZ25lZCBjaGFyICpkID0gKHVuc2lnbmVkIGNoYXIgKilkbm9kZTsKIAkJCWludCBiID0gMDsKLQkJCWlmIChkbm9kZS0+bWFnaWMgIT0gRE5PREVfTUFHSUMpIHsKKwkJCWlmIChsZTMyX3RvX2NwdShkbm9kZS0+bWFnaWMpICE9IEROT0RFX01BR0lDKSB7CiAJCQkJaHBmc19lcnJvcihzLCAiYmFkIG1hZ2ljIG9uIGRub2RlICUwOHgiLCBzZWNubyk7CiAJCQkJZ290byBiYWlsOwogCQkJfQotCQkJaWYgKGRub2RlLT5zZWxmICE9IHNlY25vKQotCQkJCWhwZnNfZXJyb3IocywgImJhZCBzZWxmIHBvaW50ZXIgb24gZG5vZGUgJTA4eCBzZWxmID0gJTA4eCIsIHNlY25vLCBkbm9kZS0+c2VsZik7CisJCQlpZiAobGUzMl90b19jcHUoZG5vZGUtPnNlbGYpICE9IHNlY25vKQorCQkJCWhwZnNfZXJyb3IocywgImJhZCBzZWxmIHBvaW50ZXIgb24gZG5vZGUgJTA4eCBzZWxmID0gJTA4eCIsIHNlY25vLCBsZTMyX3RvX2NwdShkbm9kZS0+c2VsZikpOwogCQkJLyogQ2hlY2sgZGlyZW50cyAtIGJhZCBkaXJlbnRzIHdvdWxkIGNhdXNlIGluZmluaXRlCiAJCQkgICBsb29wcyBvciBzaG9vdGluZyB0byBtZW1vcnkgKi8KLQkJCWlmIChkbm9kZS0+Zmlyc3RfZnJlZSA+IDIwNDgvKiB8fCBkbm9kZS0+Zmlyc3RfZnJlZSA8IDg0Ki8pIHsKLQkJCQlocGZzX2Vycm9yKHMsICJkbm9kZSAlMDh4IGhhcyBmaXJzdF9mcmVlID09ICUwOHgiLCBzZWNubywgZG5vZGUtPmZpcnN0X2ZyZWUpOworCQkJaWYgKGxlMzJfdG9fY3B1KGRub2RlLT5maXJzdF9mcmVlKSA+IDIwNDgpIHsKKwkJCQlocGZzX2Vycm9yKHMsICJkbm9kZSAlMDh4IGhhcyBmaXJzdF9mcmVlID09ICUwOHgiLCBzZWNubywgbGUzMl90b19jcHUoZG5vZGUtPmZpcnN0X2ZyZWUpKTsKIAkJCQlnb3RvIGJhaWw7CiAJCQl9Ci0JCQlmb3IgKHAgPSAyMDsgcCA8IGRub2RlLT5maXJzdF9mcmVlOyBwICs9IGRbcF0gKyAoZFtwKzFdIDw8IDgpKSB7CisJCQlmb3IgKHAgPSAyMDsgcCA8IGxlMzJfdG9fY3B1KGRub2RlLT5maXJzdF9mcmVlKTsgcCArPSBkW3BdICsgKGRbcCsxXSA8PCA4KSkgewogCQkJCXN0cnVjdCBocGZzX2RpcmVudCAqZGUgPSAoc3RydWN0IGhwZnNfZGlyZW50ICopKChjaGFyICopZG5vZGUgKyBwKTsKLQkJCQlpZiAoZGUtPmxlbmd0aCA+IDI5MiB8fCAoZGUtPmxlbmd0aCA8IDMyKSB8fCAoZGUtPmxlbmd0aCAmIDMpIHx8IHAgKyBkZS0+bGVuZ3RoID4gMjA0OCkgeworCQkJCWlmIChsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKSA+IDI5MiB8fCAobGUxNl90b19jcHUoZGUtPmxlbmd0aCkgPCAzMikgfHwgKGxlMTZfdG9fY3B1KGRlLT5sZW5ndGgpICYgMykgfHwgcCArIGxlMTZfdG9fY3B1KGRlLT5sZW5ndGgpID4gMjA0OCkgewogCQkJCQlocGZzX2Vycm9yKHMsICJiYWQgZGlyZW50IHNpemUgaW4gZG5vZGUgJTA4eCwgZGlyZW50ICUwM3gsIGxhc3QgJTAzeCIsIHNlY25vLCBwLCBwcCk7CiAJCQkJCWdvdG8gYmFpbDsKIAkJCQl9Ci0JCQkJaWYgKCgoMzEgKyBkZS0+bmFtZWxlbiArIGRlLT5kb3duKjQgKyAzKSAmIH4zKSAhPSBkZS0+bGVuZ3RoKSB7Ci0JCQkJCWlmICgoKDMxICsgZGUtPm5hbWVsZW4gKyBkZS0+ZG93bio0ICsgMykgJiB+MykgPCBkZS0+bGVuZ3RoICYmIHMtPnNfZmxhZ3MgJiBNU19SRE9OTFkpIGdvdG8gb2s7CisJCQkJaWYgKCgoMzEgKyBkZS0+bmFtZWxlbiArIGRlLT5kb3duKjQgKyAzKSAmIH4zKSAhPSBsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKSkgeworCQkJCQlpZiAoKCgzMSArIGRlLT5uYW1lbGVuICsgZGUtPmRvd24qNCArIDMpICYgfjMpIDwgbGUxNl90b19jcHUoZGUtPmxlbmd0aCkgJiYgcy0+c19mbGFncyAmIE1TX1JET05MWSkgZ290byBvazsKIAkJCQkJaHBmc19lcnJvcihzLCAibmFtZWxlbiBkb2VzIG5vdCBtYXRjaCBkaXJlbnQgc2l6ZSBpbiBkbm9kZSAlMDh4LCBkaXJlbnQgJTAzeCwgbGFzdCAlMDN4Iiwgc2Vjbm8sIHAsIHBwKTsKIAkJCQkJZ290byBiYWlsOwogCQkJCX0KQEAgLTI1MSw3ICsyNTUsNyBAQAogCQkJCXBwID0gcDsKIAkJCQkKIAkJCX0KLQkJCWlmIChwICE9IGRub2RlLT5maXJzdF9mcmVlKSB7CisJCQlpZiAocCAhPSBsZTMyX3RvX2NwdShkbm9kZS0+Zmlyc3RfZnJlZSkpIHsKIAkJCQlocGZzX2Vycm9yKHMsICJzaXplIG9uIGxhc3QgZGlyZW50IGRvZXMgbm90IG1hdGNoIGZpcnN0X2ZyZWU7IGRub2RlICUwOHgiLCBzZWNubyk7CiAJCQkJZ290byBiYWlsOwogCQkJfQpAQCAtMjc3LDcgKzI4MSw3IEBACiAJaWYgKCFmbm9kZSkKIAkJcmV0dXJuIDA7CiAKLQlkbm8gPSBmbm9kZS0+dS5leHRlcm5hbFswXS5kaXNrX3NlY25vOworCWRubyA9IGxlMzJfdG9fY3B1KGZub2RlLT51LmV4dGVybmFsWzBdLmRpc2tfc2Vjbm8pOwogCWJyZWxzZShiaCk7CiAJcmV0dXJuIGRubzsKIH0KZGlmZiAtLWdpdCBhL2ZzL2hwZnMvbmFtZS5jIGIvZnMvaHBmcy9uYW1lLmMKaW5kZXggZjI0NzM2ZC4uOWFjZGYzMyAxMDA2NDQKLS0tIGEvZnMvaHBmcy9uYW1lLmMKKysrIGIvZnMvaHBmcy9uYW1lLmMKQEAgLTgsMzkgKzgsNiBAQAogCiAjaW5jbHVkZSAiaHBmc19mbi5oIgogCi1zdGF0aWMgY29uc3QgY2hhciAqdGV4dF9wb3N0Zml4W109ewotIi5BU00iLCAiLkJBUyIsICIuQkFUIiwgIi5DIiwgIi5DQyIsICIuQ0ZHIiwgIi5DTUQiLCAiLkNPTiIsICIuQ1BQIiwgIi5ERUYiLAotIi5ET0MiLCAiLkRQUiIsICIuRVJYIiwgIi5IIiwgIi5IUFAiLCAiLkhUTSIsICIuSFRNTCIsICIuSkFWQSIsICIuTE9HIiwgIi5QQVMiLAotIi5SQyIsICIuVEVYIiwgIi5UWFQiLCAiLlkiLCAiIn07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICp0ZXh0X3ByZWZpeFtdPXsKLSJBVVRPRVhFQy4iLCAiQ0hBTkdFUyIsICJDT1BZSU5HIiwgIkNPTkZJRy4iLCAiQ1JFRElUUyIsICJGQVEiLCAiRklMRV9JRC5ESVoiLAotIk1BS0VGSUxFIiwgIlJFQUQuTUUiLCAiUkVBRE1FIiwgIlRFUk1DQVAiLCAiIn07Ci0KLXZvaWQgaHBmc19kZWNpZGVfY29udihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsZW4pCi17Ci0Jc3RydWN0IGhwZnNfaW5vZGVfaW5mbyAqaHBmc19pbm9kZSA9IGhwZnNfaShpbm9kZSk7Ci0JaW50IGk7Ci0JaWYgKGhwZnNfaW5vZGUtPmlfY29udiAhPSBDT05WX0FVVE8pIHJldHVybjsKLQlmb3IgKGkgPSAwOyAqdGV4dF9wb3N0Zml4W2ldOyBpKyspIHsKLQkJaW50IGwgPSBzdHJsZW4odGV4dF9wb3N0Zml4W2ldKTsKLQkJaWYgKGwgPD0gbGVuKQotCQkJaWYgKCFocGZzX2NvbXBhcmVfbmFtZXMoaW5vZGUtPmlfc2IsIHRleHRfcG9zdGZpeFtpXSwgbCwgbmFtZSArIGxlbiAtIGwsIGwsIDApKQotCQkJCWdvdG8gdGV4dDsKLQl9Ci0JZm9yIChpID0gMDsgKnRleHRfcHJlZml4W2ldOyBpKyspIHsKLQkJaW50IGwgPSBzdHJsZW4odGV4dF9wcmVmaXhbaV0pOwotCQlpZiAobCA8PSBsZW4pCi0JCQlpZiAoIWhwZnNfY29tcGFyZV9uYW1lcyhpbm9kZS0+aV9zYiwgdGV4dF9wcmVmaXhbaV0sIGwsIG5hbWUsIGwsIDApKQotCQkJCWdvdG8gdGV4dDsKLQl9Ci0JaHBmc19pbm9kZS0+aV9jb252ID0gQ09OVl9CSU5BUlk7Ci0JcmV0dXJuOwotCXRleHQ6Ci0JaHBmc19pbm9kZS0+aV9jb252ID0gQ09OVl9URVhUOwotCXJldHVybjsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgbm90X2FsbG93ZWRfY2hhcih1bnNpZ25lZCBjaGFyIGMpCiB7CiAJcmV0dXJuIGM8JyAnIHx8IGM9PSciJyB8fCBjPT0nKicgfHwgYz09Jy8nIHx8IGM9PSc6JyB8fCBjPT0nPCcgfHwKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvbmFtZWkuYyBiL2ZzL2hwZnMvbmFtZWkuYwppbmRleCBkNWY4YzhhLi4xZjA1ODM5IDEwMDY0NAotLS0gYS9mcy9ocGZzL25hbWVpLmMKKysrIGIvZnMvaHBmcy9uYW1laS5jCkBAIC0yOSw3ICsyOSw3IEBACiAJZm5vZGUgPSBocGZzX2FsbG9jX2Zub2RlKGRpci0+aV9zYiwgaHBmc19pKGRpciktPmlfZG5vLCAmZm5vLCAmYmgpOwogCWlmICghZm5vZGUpCiAJCWdvdG8gYmFpbDsKLQlkbm9kZSA9IGhwZnNfYWxsb2NfZG5vZGUoZGlyLT5pX3NiLCBmbm8sICZkbm8sICZxYmgwLCAxKTsKKwlkbm9kZSA9IGhwZnNfYWxsb2NfZG5vZGUoZGlyLT5pX3NiLCBmbm8sICZkbm8sICZxYmgwKTsKIAlpZiAoIWRub2RlKQogCQlnb3RvIGJhaWwxOwogCW1lbXNldCgmZGVlLCAwLCBzaXplb2YgZGVlKTsKQEAgLTM3LDggKzM3LDggQEAKIAlpZiAoIShtb2RlICYgMDIyMikpIGRlZS5yZWFkX29ubHkgPSAxOwogCS8qZGVlLmFyY2hpdmUgPSAwOyovCiAJZGVlLmhpZGRlbiA9IG5hbWVbMF0gPT0gJy4nOwotCWRlZS5mbm9kZSA9IGZubzsKLQlkZWUuY3JlYXRpb25fZGF0ZSA9IGRlZS53cml0ZV9kYXRlID0gZGVlLnJlYWRfZGF0ZSA9IGdtdF90b19sb2NhbChkaXItPmlfc2IsIGdldF9zZWNvbmRzKCkpOworCWRlZS5mbm9kZSA9IGNwdV90b19sZTMyKGZubyk7CisJZGVlLmNyZWF0aW9uX2RhdGUgPSBkZWUud3JpdGVfZGF0ZSA9IGRlZS5yZWFkX2RhdGUgPSBjcHVfdG9fbGUzMihnbXRfdG9fbG9jYWwoZGlyLT5pX3NiLCBnZXRfc2Vjb25kcygpKSk7CiAJcmVzdWx0ID0gbmV3X2lub2RlKGRpci0+aV9zYik7CiAJaWYgKCFyZXN1bHQpCiAJCWdvdG8gYmFpbDI7CkBAIC00Niw3ICs0Niw3IEBACiAJcmVzdWx0LT5pX2lubyA9IGZubzsKIAlocGZzX2kocmVzdWx0KS0+aV9wYXJlbnRfZGlyID0gZGlyLT5pX2lubzsKIAlocGZzX2kocmVzdWx0KS0+aV9kbm8gPSBkbm87Ci0JcmVzdWx0LT5pX2N0aW1lLnR2X3NlYyA9IHJlc3VsdC0+aV9tdGltZS50dl9zZWMgPSByZXN1bHQtPmlfYXRpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KGRpci0+aV9zYiwgZGVlLmNyZWF0aW9uX2RhdGUpOworCXJlc3VsdC0+aV9jdGltZS50dl9zZWMgPSByZXN1bHQtPmlfbXRpbWUudHZfc2VjID0gcmVzdWx0LT5pX2F0aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChkaXItPmlfc2IsIGxlMzJfdG9fY3B1KGRlZS5jcmVhdGlvbl9kYXRlKSk7CiAJcmVzdWx0LT5pX2N0aW1lLnR2X25zZWMgPSAwOyAKIAlyZXN1bHQtPmlfbXRpbWUudHZfbnNlYyA9IDA7IAogCXJlc3VsdC0+aV9hdGltZS50dl9uc2VjID0gMDsgCkBAIC02MCw4ICs2MCw3IEBACiAJaWYgKGRlZS5yZWFkX29ubHkpCiAJCXJlc3VsdC0+aV9tb2RlICY9IH4wMjIyOwogCi0JbXV0ZXhfbG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOwotCXIgPSBocGZzX2FkZF9kaXJlbnQoZGlyLCBuYW1lLCBsZW4sICZkZWUsIDApOworCXIgPSBocGZzX2FkZF9kaXJlbnQoZGlyLCBuYW1lLCBsZW4sICZkZWUpOwogCWlmIChyID09IDEpCiAJCWdvdG8gYmFpbDM7CiAJaWYgKHIgPT0gLTEpIHsKQEAgLTcwLDIxICs2OSwyMSBAQAogCX0KIAlmbm9kZS0+bGVuID0gbGVuOwogCW1lbWNweShmbm9kZS0+bmFtZSwgbmFtZSwgbGVuID4gMTUgPyAxNSA6IGxlbik7Ci0JZm5vZGUtPnVwID0gZGlyLT5pX2lubzsKKwlmbm9kZS0+dXAgPSBjcHVfdG9fbGUzMihkaXItPmlfaW5vKTsKIAlmbm9kZS0+ZGlyZmxhZyA9IDE7CiAJZm5vZGUtPmJ0cmVlLm5fZnJlZV9ub2RlcyA9IDc7CiAJZm5vZGUtPmJ0cmVlLm5fdXNlZF9ub2RlcyA9IDE7Ci0JZm5vZGUtPmJ0cmVlLmZpcnN0X2ZyZWUgPSAweDE0OwotCWZub2RlLT51LmV4dGVybmFsWzBdLmRpc2tfc2Vjbm8gPSBkbm87Ci0JZm5vZGUtPnUuZXh0ZXJuYWxbMF0uZmlsZV9zZWNubyA9IC0xOworCWZub2RlLT5idHJlZS5maXJzdF9mcmVlID0gY3B1X3RvX2xlMTYoMHgxNCk7CisJZm5vZGUtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubyA9IGNwdV90b19sZTMyKGRubyk7CisJZm5vZGUtPnUuZXh0ZXJuYWxbMF0uZmlsZV9zZWNubyA9IGNwdV90b19sZTMyKC0xKTsKIAlkbm9kZS0+cm9vdF9kbm9kZSA9IDE7Ci0JZG5vZGUtPnVwID0gZm5vOworCWRub2RlLT51cCA9IGNwdV90b19sZTMyKGZubyk7CiAJZGUgPSBocGZzX2FkZF9kZShkaXItPmlfc2IsIGRub2RlLCAiXDAwMVwwMDEiLCAyLCAwKTsKLQlkZS0+Y3JlYXRpb25fZGF0ZSA9IGRlLT53cml0ZV9kYXRlID0gZGUtPnJlYWRfZGF0ZSA9IGdtdF90b19sb2NhbChkaXItPmlfc2IsIGdldF9zZWNvbmRzKCkpOworCWRlLT5jcmVhdGlvbl9kYXRlID0gZGUtPndyaXRlX2RhdGUgPSBkZS0+cmVhZF9kYXRlID0gY3B1X3RvX2xlMzIoZ210X3RvX2xvY2FsKGRpci0+aV9zYiwgZ2V0X3NlY29uZHMoKSkpOwogCWlmICghKG1vZGUgJiAwMjIyKSkgZGUtPnJlYWRfb25seSA9IDE7CiAJZGUtPmZpcnN0ID0gZGUtPmRpcmVjdG9yeSA9IDE7CiAJLypkZS0+aGlkZGVuID0gZGUtPnN5c3RlbSA9IDA7Ki8KLQlkZS0+Zm5vZGUgPSBmbm87CisJZGUtPmZub2RlID0gY3B1X3RvX2xlMzIoZm5vKTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJYnJlbHNlKGJoKTsKIAlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaDApOwpAQCAtMTAxLDExICsxMDAsOSBAQAogCQlocGZzX3dyaXRlX2lub2RlX25vbG9jayhyZXN1bHQpOwogCX0KIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgcmVzdWx0KTsKLQltdXRleF91bmxvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKIAlocGZzX3VubG9jayhkaXItPmlfc2IpOwogCXJldHVybiAwOwogYmFpbDM6Ci0JbXV0ZXhfdW5sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7CiAJaXB1dChyZXN1bHQpOwogYmFpbDI6CiAJaHBmc19icmVsc2U0KCZxYmgwKTsKQEAgLTE0MCw4ICsxMzcsOCBAQAogCWlmICghKG1vZGUgJiAwMjIyKSkgZGVlLnJlYWRfb25seSA9IDE7CiAJZGVlLmFyY2hpdmUgPSAxOwogCWRlZS5oaWRkZW4gPSBuYW1lWzBdID09ICcuJzsKLQlkZWUuZm5vZGUgPSBmbm87Ci0JZGVlLmNyZWF0aW9uX2RhdGUgPSBkZWUud3JpdGVfZGF0ZSA9IGRlZS5yZWFkX2RhdGUgPSBnbXRfdG9fbG9jYWwoZGlyLT5pX3NiLCBnZXRfc2Vjb25kcygpKTsKKwlkZWUuZm5vZGUgPSBjcHVfdG9fbGUzMihmbm8pOworCWRlZS5jcmVhdGlvbl9kYXRlID0gZGVlLndyaXRlX2RhdGUgPSBkZWUucmVhZF9kYXRlID0gY3B1X3RvX2xlMzIoZ210X3RvX2xvY2FsKGRpci0+aV9zYiwgZ2V0X3NlY29uZHMoKSkpOwogCiAJcmVzdWx0ID0gbmV3X2lub2RlKGRpci0+aV9zYik7CiAJaWYgKCFyZXN1bHQpCkBAIC0xNTQsOSArMTUxLDggQEAKIAlyZXN1bHQtPmlfb3AgPSAmaHBmc19maWxlX2lvcHM7CiAJcmVzdWx0LT5pX2ZvcCA9ICZocGZzX2ZpbGVfb3BzOwogCXJlc3VsdC0+aV9ubGluayA9IDE7Ci0JaHBmc19kZWNpZGVfY29udihyZXN1bHQsIG5hbWUsIGxlbik7CiAJaHBmc19pKHJlc3VsdCktPmlfcGFyZW50X2RpciA9IGRpci0+aV9pbm87Ci0JcmVzdWx0LT5pX2N0aW1lLnR2X3NlYyA9IHJlc3VsdC0+aV9tdGltZS50dl9zZWMgPSByZXN1bHQtPmlfYXRpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KGRpci0+aV9zYiwgZGVlLmNyZWF0aW9uX2RhdGUpOworCXJlc3VsdC0+aV9jdGltZS50dl9zZWMgPSByZXN1bHQtPmlfbXRpbWUudHZfc2VjID0gcmVzdWx0LT5pX2F0aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChkaXItPmlfc2IsIGxlMzJfdG9fY3B1KGRlZS5jcmVhdGlvbl9kYXRlKSk7CiAJcmVzdWx0LT5pX2N0aW1lLnR2X25zZWMgPSAwOwogCXJlc3VsdC0+aV9tdGltZS50dl9uc2VjID0gMDsKIAlyZXN1bHQtPmlfYXRpbWUudHZfbnNlYyA9IDA7CkBAIC0xNjgsOCArMTY0LDcgQEAKIAlyZXN1bHQtPmlfZGF0YS5hX29wcyA9ICZocGZzX2FvcHM7CiAJaHBmc19pKHJlc3VsdCktPm1tdV9wcml2YXRlID0gMDsKIAotCW11dGV4X2xvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKLQlyID0gaHBmc19hZGRfZGlyZW50KGRpciwgbmFtZSwgbGVuLCAmZGVlLCAwKTsKKwlyID0gaHBmc19hZGRfZGlyZW50KGRpciwgbmFtZSwgbGVuLCAmZGVlKTsKIAlpZiAociA9PSAxKQogCQlnb3RvIGJhaWwyOwogCWlmIChyID09IC0xKSB7CkBAIC0xNzgsNyArMTczLDcgQEAKIAl9CiAJZm5vZGUtPmxlbiA9IGxlbjsKIAltZW1jcHkoZm5vZGUtPm5hbWUsIG5hbWUsIGxlbiA+IDE1ID8gMTUgOiBsZW4pOwotCWZub2RlLT51cCA9IGRpci0+aV9pbm87CisJZm5vZGUtPnVwID0gY3B1X3RvX2xlMzIoZGlyLT5pX2lubyk7CiAJbWFya19idWZmZXJfZGlydHkoYmgpOwogCWJyZWxzZShiaCk7CiAKQEAgLTE5MywxMiArMTg4LDEwIEBACiAJCWhwZnNfd3JpdGVfaW5vZGVfbm9sb2NrKHJlc3VsdCk7CiAJfQogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCByZXN1bHQpOwotCW11dGV4X3VubG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOwogCWhwZnNfdW5sb2NrKGRpci0+aV9zYik7CiAJcmV0dXJuIDA7CiAKIGJhaWwyOgotCW11dGV4X3VubG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOwogCWlwdXQocmVzdWx0KTsKIGJhaWwxOgogCWJyZWxzZShiaCk7CkBAIC0yMzIsOCArMjI1LDggQEAKIAlpZiAoIShtb2RlICYgMDIyMikpIGRlZS5yZWFkX29ubHkgPSAxOwogCWRlZS5hcmNoaXZlID0gMTsKIAlkZWUuaGlkZGVuID0gbmFtZVswXSA9PSAnLic7Ci0JZGVlLmZub2RlID0gZm5vOwotCWRlZS5jcmVhdGlvbl9kYXRlID0gZGVlLndyaXRlX2RhdGUgPSBkZWUucmVhZF9kYXRlID0gZ210X3RvX2xvY2FsKGRpci0+aV9zYiwgZ2V0X3NlY29uZHMoKSk7CisJZGVlLmZub2RlID0gY3B1X3RvX2xlMzIoZm5vKTsKKwlkZWUuY3JlYXRpb25fZGF0ZSA9IGRlZS53cml0ZV9kYXRlID0gZGVlLnJlYWRfZGF0ZSA9IGNwdV90b19sZTMyKGdtdF90b19sb2NhbChkaXItPmlfc2IsIGdldF9zZWNvbmRzKCkpKTsKIAogCXJlc3VsdCA9IG5ld19pbm9kZShkaXItPmlfc2IpOwogCWlmICghcmVzdWx0KQpAQCAtMjQyLDcgKzIzNSw3IEBACiAJaHBmc19pbml0X2lub2RlKHJlc3VsdCk7CiAJcmVzdWx0LT5pX2lubyA9IGZubzsKIAlocGZzX2kocmVzdWx0KS0+aV9wYXJlbnRfZGlyID0gZGlyLT5pX2lubzsKLQlyZXN1bHQtPmlfY3RpbWUudHZfc2VjID0gcmVzdWx0LT5pX210aW1lLnR2X3NlYyA9IHJlc3VsdC0+aV9hdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQoZGlyLT5pX3NiLCBkZWUuY3JlYXRpb25fZGF0ZSk7CisJcmVzdWx0LT5pX2N0aW1lLnR2X3NlYyA9IHJlc3VsdC0+aV9tdGltZS50dl9zZWMgPSByZXN1bHQtPmlfYXRpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KGRpci0+aV9zYiwgbGUzMl90b19jcHUoZGVlLmNyZWF0aW9uX2RhdGUpKTsKIAlyZXN1bHQtPmlfY3RpbWUudHZfbnNlYyA9IDA7CiAJcmVzdWx0LT5pX210aW1lLnR2X25zZWMgPSAwOwogCXJlc3VsdC0+aV9hdGltZS50dl9uc2VjID0gMDsKQEAgLTI1NCw4ICsyNDcsNyBAQAogCXJlc3VsdC0+aV9ibG9ja3MgPSAxOwogCWluaXRfc3BlY2lhbF9pbm9kZShyZXN1bHQsIG1vZGUsIHJkZXYpOwogCi0JbXV0ZXhfbG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOwotCXIgPSBocGZzX2FkZF9kaXJlbnQoZGlyLCBuYW1lLCBsZW4sICZkZWUsIDApOworCXIgPSBocGZzX2FkZF9kaXJlbnQoZGlyLCBuYW1lLCBsZW4sICZkZWUpOwogCWlmIChyID09IDEpCiAJCWdvdG8gYmFpbDI7CiAJaWYgKHIgPT0gLTEpIHsKQEAgLTI2NCwxOSArMjU2LDE3IEBACiAJfQogCWZub2RlLT5sZW4gPSBsZW47CiAJbWVtY3B5KGZub2RlLT5uYW1lLCBuYW1lLCBsZW4gPiAxNSA/IDE1IDogbGVuKTsKLQlmbm9kZS0+dXAgPSBkaXItPmlfaW5vOworCWZub2RlLT51cCA9IGNwdV90b19sZTMyKGRpci0+aV9pbm8pOwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAogCWluc2VydF9pbm9kZV9oYXNoKHJlc3VsdCk7CiAKIAlocGZzX3dyaXRlX2lub2RlX25vbG9jayhyZXN1bHQpOwogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCByZXN1bHQpOwotCW11dGV4X3VubG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOwogCWJyZWxzZShiaCk7CiAJaHBmc191bmxvY2soZGlyLT5pX3NiKTsKIAlyZXR1cm4gMDsKIGJhaWwyOgotCW11dGV4X3VubG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOwogCWlwdXQocmVzdWx0KTsKIGJhaWwxOgogCWJyZWxzZShiaCk7CkBAIC0zMTAsOCArMzAwLDggQEAKIAltZW1zZXQoJmRlZSwgMCwgc2l6ZW9mIGRlZSk7CiAJZGVlLmFyY2hpdmUgPSAxOwogCWRlZS5oaWRkZW4gPSBuYW1lWzBdID09ICcuJzsKLQlkZWUuZm5vZGUgPSBmbm87Ci0JZGVlLmNyZWF0aW9uX2RhdGUgPSBkZWUud3JpdGVfZGF0ZSA9IGRlZS5yZWFkX2RhdGUgPSBnbXRfdG9fbG9jYWwoZGlyLT5pX3NiLCBnZXRfc2Vjb25kcygpKTsKKwlkZWUuZm5vZGUgPSBjcHVfdG9fbGUzMihmbm8pOworCWRlZS5jcmVhdGlvbl9kYXRlID0gZGVlLndyaXRlX2RhdGUgPSBkZWUucmVhZF9kYXRlID0gY3B1X3RvX2xlMzIoZ210X3RvX2xvY2FsKGRpci0+aV9zYiwgZ2V0X3NlY29uZHMoKSkpOwogCiAJcmVzdWx0ID0gbmV3X2lub2RlKGRpci0+aV9zYik7CiAJaWYgKCFyZXN1bHQpCkBAIC0zMTksNyArMzA5LDcgQEAKIAlyZXN1bHQtPmlfaW5vID0gZm5vOwogCWhwZnNfaW5pdF9pbm9kZShyZXN1bHQpOwogCWhwZnNfaShyZXN1bHQpLT5pX3BhcmVudF9kaXIgPSBkaXItPmlfaW5vOwotCXJlc3VsdC0+aV9jdGltZS50dl9zZWMgPSByZXN1bHQtPmlfbXRpbWUudHZfc2VjID0gcmVzdWx0LT5pX2F0aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChkaXItPmlfc2IsIGRlZS5jcmVhdGlvbl9kYXRlKTsKKwlyZXN1bHQtPmlfY3RpbWUudHZfc2VjID0gcmVzdWx0LT5pX210aW1lLnR2X3NlYyA9IHJlc3VsdC0+aV9hdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQoZGlyLT5pX3NiLCBsZTMyX3RvX2NwdShkZWUuY3JlYXRpb25fZGF0ZSkpOwogCXJlc3VsdC0+aV9jdGltZS50dl9uc2VjID0gMDsKIAlyZXN1bHQtPmlfbXRpbWUudHZfbnNlYyA9IDA7CiAJcmVzdWx0LT5pX2F0aW1lLnR2X25zZWMgPSAwOwpAQCAtMzMzLDggKzMyMyw3IEBACiAJcmVzdWx0LT5pX29wID0gJnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwogCXJlc3VsdC0+aV9kYXRhLmFfb3BzID0gJmhwZnNfc3ltbGlua19hb3BzOwogCi0JbXV0ZXhfbG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOwotCXIgPSBocGZzX2FkZF9kaXJlbnQoZGlyLCBuYW1lLCBsZW4sICZkZWUsIDApOworCXIgPSBocGZzX2FkZF9kaXJlbnQoZGlyLCBuYW1lLCBsZW4sICZkZWUpOwogCWlmIChyID09IDEpCiAJCWdvdG8gYmFpbDI7CiAJaWYgKHIgPT0gLTEpIHsKQEAgLTM0Myw3ICszMzIsNyBAQAogCX0KIAlmbm9kZS0+bGVuID0gbGVuOwogCW1lbWNweShmbm9kZS0+bmFtZSwgbmFtZSwgbGVuID4gMTUgPyAxNSA6IGxlbik7Ci0JZm5vZGUtPnVwID0gZGlyLT5pX2lubzsKKwlmbm9kZS0+dXAgPSBjcHVfdG9fbGUzMihkaXItPmlfaW5vKTsKIAlocGZzX3NldF9lYShyZXN1bHQsIGZub2RlLCAiU1lNTElOSyIsIHN5bWxpbmssIHN0cmxlbihzeW1saW5rKSk7CiAJbWFya19idWZmZXJfZGlydHkoYmgpOwogCWJyZWxzZShiaCk7CkBAIC0zNTIsMTEgKzM0MSw5IEBACiAKIAlocGZzX3dyaXRlX2lub2RlX25vbG9jayhyZXN1bHQpOwogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCByZXN1bHQpOwotCW11dGV4X3VubG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOwogCWhwZnNfdW5sb2NrKGRpci0+aV9zYik7CiAJcmV0dXJuIDA7CiBiYWlsMjoKLQltdXRleF91bmxvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKIAlpcHV0KHJlc3VsdCk7CiBiYWlsMToKIAlicmVsc2UoYmgpOwpAQCAtMzc0LDcgKzM2MSw2IEBACiAJc3RydWN0IGhwZnNfZGlyZW50ICpkZTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWRub2RlX3NlY25vIGRubzsKLQlmbm9kZV9zZWNubyBmbm87CiAJaW50IHI7CiAJaW50IHJlcCA9IDA7CiAJaW50IGVycjsKQEAgLTM4Miw4ICszNjgsNiBAQAogCWhwZnNfbG9jayhkaXItPmlfc2IpOwogCWhwZnNfYWRqdXN0X2xlbmd0aChuYW1lLCAmbGVuKTsKIGFnYWluOgotCW11dGV4X2xvY2soJmhwZnNfaShpbm9kZSktPmlfcGFyZW50X211dGV4KTsKLQltdXRleF9sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7CiAJZXJyID0gLUVOT0VOVDsKIAlkZSA9IG1hcF9kaXJlbnQoZGlyLCBocGZzX2koZGlyKS0+aV9kbm8sIG5hbWUsIGxlbiwgJmRubywgJnFiaCk7CiAJaWYgKCFkZSkKQEAgLTM5Nyw3ICszODEsNiBAQAogCWlmIChkZS0+ZGlyZWN0b3J5KQogCQlnb3RvIG91dDE7CiAKLQlmbm8gPSBkZS0+Zm5vZGU7CiAJciA9IGhwZnNfcmVtb3ZlX2RpcmVudChkaXIsIGRubywgZGUsICZxYmgsIDEpOwogCXN3aXRjaCAocikgewogCWNhc2UgMToKQEAgLTQxMCw4ICszOTMsNiBAQAogCQlpZiAocmVwKyspCiAJCQlicmVhazsKIAotCQltdXRleF91bmxvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKLQkJbXV0ZXhfdW5sb2NrKCZocGZzX2koaW5vZGUpLT5pX3BhcmVudF9tdXRleCk7CiAJCWRlbnRyeV91bmhhc2goZGVudHJ5KTsKIAkJaWYgKCFkX3VuaGFzaGVkKGRlbnRyeSkpIHsKIAkJCWRwdXQoZGVudHJ5KTsKQEAgLTQ0NSw4ICs0MjYsNiBAQAogb3V0MToKIAlocGZzX2JyZWxzZTQoJnFiaCk7CiBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7Ci0JbXV0ZXhfdW5sb2NrKCZocGZzX2koaW5vZGUpLT5pX3BhcmVudF9tdXRleCk7CiAJaHBmc191bmxvY2soZGlyLT5pX3NiKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNDU5LDE1ICs0MzgsMTIgQEAKIAlzdHJ1Y3QgaHBmc19kaXJlbnQgKmRlOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJZG5vZGVfc2Vjbm8gZG5vOwotCWZub2RlX3NlY25vIGZubzsKIAlpbnQgbl9pdGVtcyA9IDA7CiAJaW50IGVycjsKIAlpbnQgcjsKIAogCWhwZnNfYWRqdXN0X2xlbmd0aChuYW1lLCAmbGVuKTsKIAlocGZzX2xvY2soZGlyLT5pX3NiKTsKLQltdXRleF9sb2NrKCZocGZzX2koaW5vZGUpLT5pX3BhcmVudF9tdXRleCk7Ci0JbXV0ZXhfbG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOwogCWVyciA9IC1FTk9FTlQ7CiAJZGUgPSBtYXBfZGlyZW50KGRpciwgaHBmc19pKGRpciktPmlfZG5vLCBuYW1lLCBsZW4sICZkbm8sICZxYmgpOwogCWlmICghZGUpCkBAIC00ODYsNyArNDYyLDYgQEAKIAlpZiAobl9pdGVtcykKIAkJZ290byBvdXQxOwogCi0JZm5vID0gZGUtPmZub2RlOwogCXIgPSBocGZzX3JlbW92ZV9kaXJlbnQoZGlyLCBkbm8sIGRlLCAmcWJoLCAxKTsKIAlzd2l0Y2ggKHIpIHsKIAljYXNlIDE6CkBAIC01MDUsOCArNDgwLDYgQEAKIG91dDE6CiAJaHBmc19icmVsc2U0KCZxYmgpOwogb3V0OgotCW11dGV4X3VubG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOwotCW11dGV4X3VubG9jaygmaHBmc19pKGlub2RlKS0+aV9wYXJlbnRfbXV0ZXgpOwogCWhwZnNfdW5sb2NrKGRpci0+aV9zYik7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTU2OCwxMiArNTQxLDYgQEAKIAogCWhwZnNfbG9jayhpLT5pX3NiKTsKIAkvKiBvcmRlciBkb2Vzbid0IG1hdHRlciwgZHVlIHRvIFZGUyBleGNsdXNpb24gKi8KLQltdXRleF9sb2NrKCZocGZzX2koaSktPmlfcGFyZW50X211dGV4KTsKLQlpZiAobmV3X2lub2RlKQotCQltdXRleF9sb2NrKCZocGZzX2kobmV3X2lub2RlKS0+aV9wYXJlbnRfbXV0ZXgpOwotCW11dGV4X2xvY2soJmhwZnNfaShvbGRfZGlyKS0+aV9tdXRleCk7Ci0JaWYgKG5ld19kaXIgIT0gb2xkX2RpcikKLQkJbXV0ZXhfbG9jaygmaHBmc19pKG5ld19kaXIpLT5pX211dGV4KTsKIAkKIAkvKiBFcm0/IE1vdmluZyBvdmVyIHRoZSBlbXB0eSBub24tYnVzeSBkaXJlY3RvcnkgaXMgcGVyZmVjdGx5IGxlZ2FsICovCiAJaWYgKG5ld19pbm9kZSAmJiBTX0lTRElSKG5ld19pbm9kZS0+aV9tb2RlKSkgewpAQCAtNjEwLDkgKzU3Nyw3IEBACiAKIAlpZiAobmV3X2RpciA9PSBvbGRfZGlyKSBocGZzX2JyZWxzZTQoJnFiaCk7CiAKLQlocGZzX2xvY2tfY3JlYXRpb24oaS0+aV9zYik7Ci0JaWYgKChyID0gaHBmc19hZGRfZGlyZW50KG5ld19kaXIsIG5ld19uYW1lLCBuZXdfbGVuLCAmZGUsIDEpKSkgewotCQlocGZzX3VubG9ja19jcmVhdGlvbihpLT5pX3NiKTsKKwlpZiAoKHIgPSBocGZzX2FkZF9kaXJlbnQobmV3X2RpciwgbmV3X25hbWUsIG5ld19sZW4sICZkZSkpKSB7CiAJCWlmIChyID09IC0xKSBocGZzX2Vycm9yKG5ld19kaXItPmlfc2IsICJocGZzX3JlbmFtZTogZGlyZW50IGFscmVhZHkgZXhpc3RzISIpOwogCQllcnIgPSByID09IDEgPyAtRU5PU1BDIDogLUVGU0VSUk9SOwogCQlpZiAobmV3X2RpciAhPSBvbGRfZGlyKSBocGZzX2JyZWxzZTQoJnFiaCk7CkBAIC02MjEsMjAgKzU4NiwxNyBAQAogCQogCWlmIChuZXdfZGlyID09IG9sZF9kaXIpCiAJCWlmICghKGRlcCA9IG1hcF9kaXJlbnQob2xkX2RpciwgaHBmc19pKG9sZF9kaXIpLT5pX2Rubywgb2xkX25hbWUsIG9sZF9sZW4sICZkbm8sICZxYmgpKSkgewotCQkJaHBmc191bmxvY2tfY3JlYXRpb24oaS0+aV9zYik7CiAJCQlocGZzX2Vycm9yKGktPmlfc2IsICJsb29rdXAgc3VjY2VlZGVkIGJ1dCBtYXAgZGlyZW50IGZhaWxlZCBhdCAjMiIpOwogCQkJZXJyID0gLUVOT0VOVDsKIAkJCWdvdG8gZW5kMTsKIAkJfQogCiAJaWYgKChyID0gaHBmc19yZW1vdmVfZGlyZW50KG9sZF9kaXIsIGRubywgZGVwLCAmcWJoLCAwKSkpIHsKLQkJaHBmc191bmxvY2tfY3JlYXRpb24oaS0+aV9zYik7CiAJCWhwZnNfZXJyb3IoaS0+aV9zYiwgImhwZnNfcmVuYW1lOiBjb3VsZCBub3QgcmVtb3ZlIGRpcmVudCIpOwogCQllcnIgPSByID09IDIgPyAtRU5PU1BDIDogLUVGU0VSUk9SOwogCQlnb3RvIGVuZDE7CiAJfQotCWhwZnNfdW5sb2NrX2NyZWF0aW9uKGktPmlfc2IpOwotCQorCiAJZW5kOgogCWhwZnNfaShpKS0+aV9wYXJlbnRfZGlyID0gbmV3X2Rpci0+aV9pbm87CiAJaWYgKFNfSVNESVIoaS0+aV9tb2RlKSkgewpAQCAtNjQyLDIyICs2MDQsMTQgQEAKIAkJZHJvcF9ubGluayhvbGRfZGlyKTsKIAl9CiAJaWYgKChmbm9kZSA9IGhwZnNfbWFwX2Zub2RlKGktPmlfc2IsIGktPmlfaW5vLCAmYmgpKSkgewotCQlmbm9kZS0+dXAgPSBuZXdfZGlyLT5pX2lubzsKKwkJZm5vZGUtPnVwID0gY3B1X3RvX2xlMzIobmV3X2Rpci0+aV9pbm8pOwogCQlmbm9kZS0+bGVuID0gbmV3X2xlbjsKIAkJbWVtY3B5KGZub2RlLT5uYW1lLCBuZXdfbmFtZSwgbmV3X2xlbj4xNT8xNTpuZXdfbGVuKTsKIAkJaWYgKG5ld19sZW4gPCAxNSkgbWVtc2V0KCZmbm9kZS0+bmFtZVtuZXdfbGVuXSwgMCwgMTUgLSBuZXdfbGVuKTsKIAkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQlicmVsc2UoYmgpOwogCX0KLQlocGZzX2koaSktPmlfY29udiA9IGhwZnNfc2IoaS0+aV9zYiktPnNiX2NvbnY7Ci0JaHBmc19kZWNpZGVfY29udihpLCBuZXdfbmFtZSwgbmV3X2xlbik7CiBlbmQxOgotCWlmIChvbGRfZGlyICE9IG5ld19kaXIpCi0JCW11dGV4X3VubG9jaygmaHBmc19pKG5ld19kaXIpLT5pX211dGV4KTsKLQltdXRleF91bmxvY2soJmhwZnNfaShvbGRfZGlyKS0+aV9tdXRleCk7Ci0JbXV0ZXhfdW5sb2NrKCZocGZzX2koaSktPmlfcGFyZW50X211dGV4KTsKLQlpZiAobmV3X2lub2RlKQotCQltdXRleF91bmxvY2soJmhwZnNfaShuZXdfaW5vZGUpLT5pX3BhcmVudF9tdXRleCk7CiAJaHBmc191bmxvY2soaS0+aV9zYik7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2ZzL2hwZnMvc3VwZXIuYyBiL2ZzL2hwZnMvc3VwZXIuYwppbmRleCBjODliNDA4Li45ODU4MGEzIDEwMDY0NAotLS0gYS9mcy9ocGZzL3N1cGVyLmMKKysrIGIvZnMvaHBmcy9zdXBlci5jCkBAIC0xOCwxNSArMTgsMTYgQEAKIAogLyogTWFyayB0aGUgZmlsZXN5c3RlbSBkaXJ0eSwgc28gdGhhdCBjaGtkc2sgY2hlY2tzIGl0IHdoZW4gb3MvMiBib290ZWQgKi8KIAotc3RhdGljIHZvaWQgbWFya19kaXJ0eShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCitzdGF0aWMgdm9pZCBtYXJrX2RpcnR5KHN0cnVjdCBzdXBlcl9ibG9jayAqcywgaW50IHJlbW91bnQpCiB7Ci0JaWYgKGhwZnNfc2IocyktPnNiX2Noa2RzayAmJiAhKHMtPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CisJaWYgKGhwZnNfc2IocyktPnNiX2Noa2RzayAmJiAocmVtb3VudCB8fCAhKHMtPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSkgewogCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCQlzdHJ1Y3QgaHBmc19zcGFyZV9ibG9jayAqc2I7CiAJCWlmICgoc2IgPSBocGZzX21hcF9zZWN0b3IocywgMTcsICZiaCwgMCkpKSB7CiAJCQlzYi0+ZGlydHkgPSAxOwogCQkJc2ItPm9sZF93cm90ZSA9IDA7CiAJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CisJCQlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiAJCQlicmVsc2UoYmgpOwogCQl9CiAJfQpAQCAtNDAsMTAgKzQxLDEyIEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlzdHJ1Y3QgaHBmc19zcGFyZV9ibG9jayAqc2I7CiAJaWYgKHMtPnNfZmxhZ3MgJiBNU19SRE9OTFkpIHJldHVybjsKKwlzeW5jX2Jsb2NrZGV2KHMtPnNfYmRldik7CiAJaWYgKChzYiA9IGhwZnNfbWFwX3NlY3RvcihzLCAxNywgJmJoLCAwKSkpIHsKIAkJc2ItPmRpcnR5ID0gaHBmc19zYihzKS0+c2JfY2hrZHNrID4gMSAtIGhwZnNfc2IocyktPnNiX3dhc19lcnJvcjsKIAkJc2ItPm9sZF93cm90ZSA9IGhwZnNfc2IocyktPnNiX2Noa2RzayA+PSAyICYmICFocGZzX3NiKHMpLT5zYl93YXNfZXJyb3I7CiAJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKKwkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwogCQlicmVsc2UoYmgpOwogCX0KIH0KQEAgLTYzLDEzICs2NiwxMyBAQAogCWlmICghaHBmc19zYihzKS0+c2Jfd2FzX2Vycm9yKSB7CiAJCWlmIChocGZzX3NiKHMpLT5zYl9lcnIgPT0gMikgewogCQkJcHJpbnRrKCI7IGNyYXNoaW5nIHRoZSBzeXN0ZW0gYmVjYXVzZSB5b3Ugd2FudGVkIGl0XG4iKTsKLQkJCW1hcmtfZGlydHkocyk7CisJCQltYXJrX2RpcnR5KHMsIDApOwogCQkJcGFuaWMoIkhQRlMgcGFuaWMiKTsKIAkJfSBlbHNlIGlmIChocGZzX3NiKHMpLT5zYl9lcnIgPT0gMSkgewogCQkJaWYgKHMtPnNfZmxhZ3MgJiBNU19SRE9OTFkpIHByaW50aygiOyBhbHJlYWR5IG1vdW50ZWQgcmVhZC1vbmx5XG4iKTsKIAkJCWVsc2UgewogCQkJCXByaW50aygiOyByZW1vdW50aW5nIHJlYWQtb25seVxuIik7Ci0JCQkJbWFya19kaXJ0eShzKTsKKwkJCQltYXJrX2RpcnR5KHMsIDApOwogCQkJCXMtPnNfZmxhZ3MgfD0gTVNfUkRPTkxZOwogCQkJfQogCQl9IGVsc2UgaWYgKHMtPnNfZmxhZ3MgJiBNU19SRE9OTFkpIHByaW50aygiOyBnb2luZyBvbiAtIGJ1dCBhbnl0aGluZyB3b24ndCBiZSBkZXN0cm95ZWQgYmVjYXVzZSBpdCdzIHJlYWQtb25seVxuIik7CkBAIC0xMDIsOSArMTA1LDEyIEBACiB7CiAJc3RydWN0IGhwZnNfc2JfaW5mbyAqc2JpID0gaHBmc19zYihzKTsKIAorCWhwZnNfbG9jayhzKTsKKwl1bm1hcmtfZGlydHkocyk7CisJaHBmc191bmxvY2socyk7CisKIAlrZnJlZShzYmktPnNiX2NwX3RhYmxlKTsKIAlrZnJlZShzYmktPnNiX2JtcF9kaXIpOwotCXVubWFya19kaXJ0eShzKTsKIAlzLT5zX2ZzX2luZm8gPSBOVUxMOwogCWtmcmVlKHNiaSk7CiB9CkBAIC0xMjksNyArMTM1LDcgQEAKIAluX2JhbmRzID0gKGhwZnNfc2IocyktPnNiX2ZzX3NpemUgKyAweDNmZmYpID4+IDE0OwogCWNvdW50ID0gMDsKIAlmb3IgKG4gPSAwOyBuIDwgbl9iYW5kczsgbisrKQotCQljb3VudCArPSBocGZzX2NvdW50X29uZV9iaXRtYXAocywgaHBmc19zYihzKS0+c2JfYm1wX2RpcltuXSk7CisJCWNvdW50ICs9IGhwZnNfY291bnRfb25lX2JpdG1hcChzLCBsZTMyX3RvX2NwdShocGZzX3NiKHMpLT5zYl9ibXBfZGlyW25dKSk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0xODgsOCArMTk0LDYgQEAKIHsKIAlzdHJ1Y3QgaHBmc19pbm9kZV9pbmZvICplaSA9IChzdHJ1Y3QgaHBmc19pbm9kZV9pbmZvICopIGZvbzsKIAotCW11dGV4X2luaXQoJmVpLT5pX211dGV4KTsKLQltdXRleF9pbml0KCZlaS0+aV9wYXJlbnRfbXV0ZXgpOwogCWlub2RlX2luaXRfb25jZSgmZWktPnZmc19pbm9kZSk7CiB9CiAKQEAgLTIxOCw3ICsyMjIsNiBAQAogCiBlbnVtIHsKIAlPcHRfaGVscCwgT3B0X3VpZCwgT3B0X2dpZCwgT3B0X3VtYXNrLCBPcHRfY2FzZV9sb3dlciwgT3B0X2Nhc2VfYXNpcywKLQlPcHRfY29udl9iaW5hcnksIE9wdF9jb252X3RleHQsIE9wdF9jb252X2F1dG8sCiAJT3B0X2NoZWNrX25vbmUsIE9wdF9jaGVja19ub3JtYWwsIE9wdF9jaGVja19zdHJpY3QsCiAJT3B0X2Vycl9jb250LCBPcHRfZXJyX3JvLCBPcHRfZXJyX3BhbmljLAogCU9wdF9lYXNfbm8sIE9wdF9lYXNfcm8sIE9wdF9lYXNfcncsCkBAIC0yMzMsOSArMjM2LDYgQEAKIAl7T3B0X3VtYXNrLCAidW1hc2s9JW8ifSwKIAl7T3B0X2Nhc2VfbG93ZXIsICJjYXNlPWxvd2VyIn0sCiAJe09wdF9jYXNlX2FzaXMsICJjYXNlPWFzaXMifSwKLQl7T3B0X2NvbnZfYmluYXJ5LCAiY29udj1iaW5hcnkifSwKLQl7T3B0X2NvbnZfdGV4dCwgImNvbnY9dGV4dCJ9LAotCXtPcHRfY29udl9hdXRvLCAiY29udj1hdXRvIn0sCiAJe09wdF9jaGVja19ub25lLCAiY2hlY2s9bm9uZSJ9LAogCXtPcHRfY2hlY2tfbm9ybWFsLCAiY2hlY2s9bm9ybWFsIn0sCiAJe09wdF9jaGVja19zdHJpY3QsICJjaGVjaz1zdHJpY3QifSwKQEAgLTI1Myw3ICsyNTMsNyBAQAogfTsKIAogc3RhdGljIGludCBwYXJzZV9vcHRzKGNoYXIgKm9wdHMsIHVpZF90ICp1aWQsIGdpZF90ICpnaWQsIHVtb2RlX3QgKnVtYXNrLAotCQkgICAgICBpbnQgKmxvd2VyY2FzZSwgaW50ICpjb252LCBpbnQgKmVhcywgaW50ICpjaGssIGludCAqZXJycywKKwkJICAgICAgaW50ICpsb3dlcmNhc2UsIGludCAqZWFzLCBpbnQgKmNoaywgaW50ICplcnJzLAogCQkgICAgICBpbnQgKmNoa2RzaywgaW50ICp0aW1lc2hpZnQpCiB7CiAJY2hhciAqcDsKQEAgLTI5NSwxNSArMjk1LDYgQEAKIAkJY2FzZSBPcHRfY2FzZV9hc2lzOgogCQkJKmxvd2VyY2FzZSA9IDA7CiAJCQlicmVhazsKLQkJY2FzZSBPcHRfY29udl9iaW5hcnk6Ci0JCQkqY29udiA9IENPTlZfQklOQVJZOwotCQkJYnJlYWs7Ci0JCWNhc2UgT3B0X2NvbnZfdGV4dDoKLQkJCSpjb252ID0gQ09OVl9URVhUOwotCQkJYnJlYWs7Ci0JCWNhc2UgT3B0X2NvbnZfYXV0bzoKLQkJCSpjb252ID0gQ09OVl9BVVRPOwotCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2NoZWNrX25vbmU6CiAJCQkqY2hrID0gMDsKIAkJCWJyZWFrOwpAQCAtMzcwLDkgKzM2MSw2IEBACiAgICAgICB1bWFzaz14eHggICAgICAgICBzZXQgbW9kZSBvZiBmaWxlcyB0aGF0IGRvbid0IGhhdmUgbW9kZSBzcGVjaWZpZWQgaW4gZWFzXG5cCiAgICAgICBjYXNlPWxvd2VyICAgICAgICBsb3dlcmNhc2UgYWxsIGZpbGVzXG5cCiAgICAgICBjYXNlPWFzaXMgICAgICAgICBkbyBub3QgbG93ZXJjYXNlIGZpbGVzIChkZWZhdWx0KVxuXAotICAgICAgY29udj1iaW5hcnkgICAgICAgZG8gbm90IGNvbnZlcnQgQ1IvTEYgLT4gTEYgKGRlZmF1bHQpXG5cCi0gICAgICBjb252PWF1dG8gICAgICAgICBjb252ZXJ0IG9ubHkgZmlsZXMgd2l0aCBrbm93biB0ZXh0IGV4dGVuc2lvbnNcblwKLSAgICAgIGNvbnY9dGV4dCAgICAgICAgIGNvbnZlcnQgYWxsIGZpbGVzXG5cCiAgICAgICBjaGVjaz1ub25lICAgICAgICBubyBmcyBjaGVja3MgLSBrZXJuZWwgbWF5IGNyYXNoIG9uIGNvcnJ1cHRlZCBmaWxlc3lzdGVtXG5cCiAgICAgICBjaGVjaz1ub3JtYWwgICAgICBkbyBzb21lIGNoZWNrcyAtIGl0IHNob3VsZCBub3QgY3Jhc2ggKGRlZmF1bHQpXG5cCiAgICAgICBjaGVjaz1zdHJpY3QgICAgICBkbyBleHRyYSB0aW1lLWNvbnN1bWluZyBjaGVja3MsIHVzZWQgZm9yIGRlYnVnZ2luZ1xuXApAQCAtMzk0LDcgKzM4Miw3IEBACiAJdWlkX3QgdWlkOwogCWdpZF90IGdpZDsKIAl1bW9kZV90IHVtYXNrOwotCWludCBsb3dlcmNhc2UsIGNvbnYsIGVhcywgY2hrLCBlcnJzLCBjaGtkc2ssIHRpbWVzaGlmdDsKKwlpbnQgbG93ZXJjYXNlLCBlYXMsIGNoaywgZXJycywgY2hrZHNrLCB0aW1lc2hpZnQ7CiAJaW50IG87CiAJc3RydWN0IGhwZnNfc2JfaW5mbyAqc2JpID0gaHBmc19zYihzKTsKIAljaGFyICpuZXdfb3B0cyA9IGtzdHJkdXAoZGF0YSwgR0ZQX0tFUk5FTCk7CkBAIC00MDUsMTEgKzM5MywxMSBAQAogCWxvY2tfc3VwZXIocyk7CiAJdWlkID0gc2JpLT5zYl91aWQ7IGdpZCA9IHNiaS0+c2JfZ2lkOwogCXVtYXNrID0gMDc3NyAmIH5zYmktPnNiX21vZGU7Ci0JbG93ZXJjYXNlID0gc2JpLT5zYl9sb3dlcmNhc2U7IGNvbnYgPSBzYmktPnNiX2NvbnY7CisJbG93ZXJjYXNlID0gc2JpLT5zYl9sb3dlcmNhc2U7CiAJZWFzID0gc2JpLT5zYl9lYXM7IGNoayA9IHNiaS0+c2JfY2hrOyBjaGtkc2sgPSBzYmktPnNiX2Noa2RzazsKIAllcnJzID0gc2JpLT5zYl9lcnI7IHRpbWVzaGlmdCA9IHNiaS0+c2JfdGltZXNoaWZ0OwogCi0JaWYgKCEobyA9IHBhcnNlX29wdHMoZGF0YSwgJnVpZCwgJmdpZCwgJnVtYXNrLCAmbG93ZXJjYXNlLCAmY29udiwKKwlpZiAoIShvID0gcGFyc2Vfb3B0cyhkYXRhLCAmdWlkLCAmZ2lkLCAmdW1hc2ssICZsb3dlcmNhc2UsCiAJICAgICZlYXMsICZjaGssICZlcnJzLCAmY2hrZHNrLCAmdGltZXNoaWZ0KSkpIHsKIAkJcHJpbnRrKCJIUEZTOiBiYWQgbW91bnQgb3B0aW9ucy5cbiIpOwogCQlnb3RvIG91dF9lcnI7CkBAIC00MjcsMTEgKzQxNSwxMSBAQAogCiAJc2JpLT5zYl91aWQgPSB1aWQ7IHNiaS0+c2JfZ2lkID0gZ2lkOwogCXNiaS0+c2JfbW9kZSA9IDA3NzcgJiB+dW1hc2s7Ci0Jc2JpLT5zYl9sb3dlcmNhc2UgPSBsb3dlcmNhc2U7IHNiaS0+c2JfY29udiA9IGNvbnY7CisJc2JpLT5zYl9sb3dlcmNhc2UgPSBsb3dlcmNhc2U7CiAJc2JpLT5zYl9lYXMgPSBlYXM7IHNiaS0+c2JfY2hrID0gY2hrOyBzYmktPnNiX2Noa2RzayA9IGNoa2RzazsKIAlzYmktPnNiX2VyciA9IGVycnM7IHNiaS0+c2JfdGltZXNoaWZ0ID0gdGltZXNoaWZ0OwogCi0JaWYgKCEoKmZsYWdzICYgTVNfUkRPTkxZKSkgbWFya19kaXJ0eShzKTsKKwlpZiAoISgqZmxhZ3MgJiBNU19SRE9OTFkpKSBtYXJrX2RpcnR5KHMsIDEpOwogCiAJcmVwbGFjZV9tb3VudF9vcHRpb25zKHMsIG5ld19vcHRzKTsKIApAQCAtNDcxLDcgKzQ1OSw3IEBACiAJdWlkX3QgdWlkOwogCWdpZF90IGdpZDsKIAl1bW9kZV90IHVtYXNrOwotCWludCBsb3dlcmNhc2UsIGNvbnYsIGVhcywgY2hrLCBlcnJzLCBjaGtkc2ssIHRpbWVzaGlmdDsKKwlpbnQgbG93ZXJjYXNlLCBlYXMsIGNoaywgZXJycywgY2hrZHNrLCB0aW1lc2hpZnQ7CiAKIAlkbm9kZV9zZWNubyByb290X2RubzsKIAlzdHJ1Y3QgaHBmc19kaXJlbnQgKmRlID0gTlVMTDsKQEAgLTQ3OSwxMSArNDY3LDYgQEAKIAogCWludCBvOwogCi0JaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPiAxKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSFBGUyBpcyBub3QgU01QIHNhZmVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlzYXZlX21vdW50X29wdGlvbnMocywgb3B0aW9ucyk7CiAKIAlzYmkgPSBremFsbG9jKHNpemVvZigqc2JpKSwgR0ZQX0tFUk5FTCk7CkBAIC00OTUsMjAgKzQ3OCwyMCBAQAogCXNiaS0+c2JfYm1wX2RpciA9IE5VTEw7CiAJc2JpLT5zYl9jcF90YWJsZSA9IE5VTEw7CiAKLQltdXRleF9pbml0KCZzYmktPmhwZnNfY3JlYXRpb25fZGUpOworCW11dGV4X2luaXQoJnNiaS0+aHBmc19tdXRleCk7CisJaHBmc19sb2NrKHMpOwogCiAJdWlkID0gY3VycmVudF91aWQoKTsKIAlnaWQgPSBjdXJyZW50X2dpZCgpOwogCXVtYXNrID0gY3VycmVudF91bWFzaygpOwogCWxvd2VyY2FzZSA9IDA7Ci0JY29udiA9IENPTlZfQklOQVJZOwogCWVhcyA9IDI7CiAJY2hrID0gMTsKIAllcnJzID0gMTsKIAljaGtkc2sgPSAxOwogCXRpbWVzaGlmdCA9IDA7CiAKLQlpZiAoIShvID0gcGFyc2Vfb3B0cyhvcHRpb25zLCAmdWlkLCAmZ2lkLCAmdW1hc2ssICZsb3dlcmNhc2UsICZjb252LAorCWlmICghKG8gPSBwYXJzZV9vcHRzKG9wdGlvbnMsICZ1aWQsICZnaWQsICZ1bWFzaywgJmxvd2VyY2FzZSwKIAkgICAgJmVhcywgJmNoaywgJmVycnMsICZjaGtkc2ssICZ0aW1lc2hpZnQpKSkgewogCQlwcmludGsoIkhQRlM6IGJhZCBtb3VudCBvcHRpb25zLlxuIik7CiAJCWdvdG8gYmFpbDA7CkBAIC01MjYsOSArNTA5LDkgQEAKIAlpZiAoIShzcGFyZWJsb2NrID0gaHBmc19tYXBfc2VjdG9yKHMsIDE3LCAmYmgyLCAwKSkpIGdvdG8gYmFpbDM7CiAKIAkvKiBDaGVjayBtYWdpY3MgKi8KLQlpZiAoLypib290YmxvY2stPm1hZ2ljICE9IEJCX01BR0lDCi0JICAgIHx8Ki8gc3VwZXJibG9jay0+bWFnaWMgIT0gU0JfTUFHSUMKLQkgICAgfHwgc3BhcmVibG9jay0+bWFnaWMgIT0gU1BfTUFHSUMpIHsKKwlpZiAoLypsZTE2X3RvX2NwdShib290YmxvY2stPm1hZ2ljKSAhPSBCQl9NQUdJQworCSAgICB8fCovIGxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPm1hZ2ljKSAhPSBTQl9NQUdJQworCSAgICB8fCBsZTMyX3RvX2NwdShzcGFyZWJsb2NrLT5tYWdpYykgIT0gU1BfTUFHSUMpIHsKIAkJaWYgKCFzaWxlbnQpIHByaW50aygiSFBGUzogQmFkIG1hZ2ljIC4uLiBwcm9iYWJseSBub3QgSFBGU1xuIik7CiAJCWdvdG8gYmFpbDQ7CiAJfQpAQCAtNTQ5LDE5ICs1MzIsMTggQEAKIAlzLT5zX29wID0gJmhwZnNfc29wczsKIAlzLT5zX2Rfb3AgPSAmaHBmc19kZW50cnlfb3BlcmF0aW9uczsKIAotCXNiaS0+c2Jfcm9vdCA9IHN1cGVyYmxvY2stPnJvb3Q7Ci0Jc2JpLT5zYl9mc19zaXplID0gc3VwZXJibG9jay0+bl9zZWN0b3JzOwotCXNiaS0+c2JfYml0bWFwcyA9IHN1cGVyYmxvY2stPmJpdG1hcHM7Ci0Jc2JpLT5zYl9kaXJiYW5kX3N0YXJ0ID0gc3VwZXJibG9jay0+ZGlyX2JhbmRfc3RhcnQ7Ci0Jc2JpLT5zYl9kaXJiYW5kX3NpemUgPSBzdXBlcmJsb2NrLT5uX2Rpcl9iYW5kOwotCXNiaS0+c2JfZG1hcCA9IHN1cGVyYmxvY2stPmRpcl9iYW5kX2JpdG1hcDsKKwlzYmktPnNiX3Jvb3QgPSBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5yb290KTsKKwlzYmktPnNiX2ZzX3NpemUgPSBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5uX3NlY3RvcnMpOworCXNiaS0+c2JfYml0bWFwcyA9IGxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPmJpdG1hcHMpOworCXNiaS0+c2JfZGlyYmFuZF9zdGFydCA9IGxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPmRpcl9iYW5kX3N0YXJ0KTsKKwlzYmktPnNiX2RpcmJhbmRfc2l6ZSA9IGxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPm5fZGlyX2JhbmQpOworCXNiaS0+c2JfZG1hcCA9IGxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPmRpcl9iYW5kX2JpdG1hcCk7CiAJc2JpLT5zYl91aWQgPSB1aWQ7CiAJc2JpLT5zYl9naWQgPSBnaWQ7CiAJc2JpLT5zYl9tb2RlID0gMDc3NyAmIH51bWFzazsKIAlzYmktPnNiX25fZnJlZSA9IC0xOwogCXNiaS0+c2Jfbl9mcmVlX2Rub2RlcyA9IC0xOwogCXNiaS0+c2JfbG93ZXJjYXNlID0gbG93ZXJjYXNlOwotCXNiaS0+c2JfY29udiA9IGNvbnY7CiAJc2JpLT5zYl9lYXMgPSBlYXM7CiAJc2JpLT5zYl9jaGsgPSBjaGs7CiAJc2JpLT5zYl9jaGtkc2sgPSBjaGtkc2s7CkBAIC01NzMsNyArNTU1LDcgQEAKIAlzYmktPnNiX21heF9md2RfYWxsb2MgPSAweGZmZmZmZjsKIAkKIAkvKiBMb2FkIGJpdG1hcCBkaXJlY3RvcnkgKi8KLQlpZiAoIShzYmktPnNiX2JtcF9kaXIgPSBocGZzX2xvYWRfYml0bWFwX2RpcmVjdG9yeShzLCBzdXBlcmJsb2NrLT5iaXRtYXBzKSkpCisJaWYgKCEoc2JpLT5zYl9ibXBfZGlyID0gaHBmc19sb2FkX2JpdG1hcF9kaXJlY3RvcnkocywgbGUzMl90b19jcHUoc3VwZXJibG9jay0+Yml0bWFwcykpKSkKIAkJZ290byBiYWlsNDsKIAkKIAkvKiBDaGVjayBmb3IgZ2VuZXJhbCBmcyBlcnJvcnMqLwpAQCAtNTkxLDIwICs1NzMsMjAgQEAKIAkJbWFya19idWZmZXJfZGlydHkoYmgyKTsKIAl9CiAKLQlpZiAoc3BhcmVibG9jay0+aG90Zml4ZXNfdXNlZCB8fCBzcGFyZWJsb2NrLT5uX3NwYXJlc191c2VkKSB7CisJaWYgKGxlMzJfdG9fY3B1KHNwYXJlYmxvY2stPmhvdGZpeGVzX3VzZWQpIHx8IGxlMzJfdG9fY3B1KHNwYXJlYmxvY2stPm5fc3BhcmVzX3VzZWQpKSB7CiAJCWlmIChlcnJzID49IDIpIHsKIAkJCXByaW50aygiSFBGUzogSG90Zml4ZXMgbm90IHN1cHBvcnRlZCBoZXJlLCB0cnkgY2hrZHNrXG4iKTsKLQkJCW1hcmtfZGlydHkocyk7CisJCQltYXJrX2RpcnR5KHMsIDApOwogCQkJZ290byBiYWlsNDsKIAkJfQogCQlocGZzX2Vycm9yKHMsICJob3RmaXhlcyBub3Qgc3VwcG9ydGVkIGhlcmUsIHRyeSBjaGtkc2siKTsKIAkJaWYgKGVycnMgPT0gMCkgcHJpbnRrKCJIUEZTOiBQcm9jZWVkaW5nLCBidXQgeW91ciBmaWxlc3lzdGVtIHdpbGwgYmUgcHJvYmFibHkgY29ycnVwdGVkIGJ5IHRoaXMgZHJpdmVyLi4uXG4iKTsKIAkJZWxzZSBwcmludGsoIkhQRlM6IFRoaXMgZHJpdmVyIG1heSByZWFkIGJhZCBmaWxlcyBvciBjcmFzaCB3aGVuIG9wZXJhdGluZyBvbiBkaXNrIHdpdGggaG90Zml4ZXMuXG4iKTsKIAl9Ci0JaWYgKHNwYXJlYmxvY2stPm5fZG5vZGVfc3BhcmVzICE9IHNwYXJlYmxvY2stPm5fZG5vZGVfc3BhcmVzX2ZyZWUpIHsKKwlpZiAobGUzMl90b19jcHUoc3BhcmVibG9jay0+bl9kbm9kZV9zcGFyZXMpICE9IGxlMzJfdG9fY3B1KHNwYXJlYmxvY2stPm5fZG5vZGVfc3BhcmVzX2ZyZWUpKSB7CiAJCWlmIChlcnJzID49IDIpIHsKIAkJCXByaW50aygiSFBGUzogU3BhcmUgZG5vZGVzIHVzZWQsIHRyeSBjaGtkc2tcbiIpOwotCQkJbWFya19kaXJ0eShzKTsKKwkJCW1hcmtfZGlydHkocywgMCk7CiAJCQlnb3RvIGJhaWw0OwogCQl9CiAJCWhwZnNfZXJyb3IocywgIndhcm5pbmc6IHNwYXJlIGRub2RlcyB1c2VkLCB0cnkgY2hrZHNrIik7CkBAIC02MTIsMjYgKzU5NCwyNiBAQAogCX0KIAlpZiAoY2hrKSB7CiAJCXVuc2lnbmVkIGE7Ci0JCWlmIChzdXBlcmJsb2NrLT5kaXJfYmFuZF9lbmQgLSBzdXBlcmJsb2NrLT5kaXJfYmFuZF9zdGFydCArIDEgIT0gc3VwZXJibG9jay0+bl9kaXJfYmFuZCB8fAotCQkgICAgc3VwZXJibG9jay0+ZGlyX2JhbmRfZW5kIDwgc3VwZXJibG9jay0+ZGlyX2JhbmRfc3RhcnQgfHwgc3VwZXJibG9jay0+bl9kaXJfYmFuZCA+IDB4NDAwMCkgeworCQlpZiAobGUzMl90b19jcHUoc3VwZXJibG9jay0+ZGlyX2JhbmRfZW5kKSAtIGxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPmRpcl9iYW5kX3N0YXJ0KSArIDEgIT0gbGUzMl90b19jcHUoc3VwZXJibG9jay0+bl9kaXJfYmFuZCkgfHwKKwkJICAgIGxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPmRpcl9iYW5kX2VuZCkgPCBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5kaXJfYmFuZF9zdGFydCkgfHwgbGUzMl90b19jcHUoc3VwZXJibG9jay0+bl9kaXJfYmFuZCkgPiAweDQwMDApIHsKIAkJCWhwZnNfZXJyb3IocywgImRpciBiYW5kIHNpemUgbWlzbWF0Y2g6IGRpcl9iYW5kX3N0YXJ0PT0lMDh4LCBkaXJfYmFuZF9lbmQ9PSUwOHgsIG5fZGlyX2JhbmQ9PSUwOHgiLAotCQkJCXN1cGVyYmxvY2stPmRpcl9iYW5kX3N0YXJ0LCBzdXBlcmJsb2NrLT5kaXJfYmFuZF9lbmQsIHN1cGVyYmxvY2stPm5fZGlyX2JhbmQpOworCQkJCWxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPmRpcl9iYW5kX3N0YXJ0KSwgbGUzMl90b19jcHUoc3VwZXJibG9jay0+ZGlyX2JhbmRfZW5kKSwgbGUzMl90b19jcHUoc3VwZXJibG9jay0+bl9kaXJfYmFuZCkpOwogCQkJZ290byBiYWlsNDsKIAkJfQogCQlhID0gc2JpLT5zYl9kaXJiYW5kX3NpemU7CiAJCXNiaS0+c2JfZGlyYmFuZF9zaXplID0gMDsKLQkJaWYgKGhwZnNfY2hrX3NlY3RvcnMocywgc3VwZXJibG9jay0+ZGlyX2JhbmRfc3RhcnQsIHN1cGVyYmxvY2stPm5fZGlyX2JhbmQsICJkaXJfYmFuZCIpIHx8Ci0JCSAgICBocGZzX2Noa19zZWN0b3JzKHMsIHN1cGVyYmxvY2stPmRpcl9iYW5kX2JpdG1hcCwgNCwgImRpcl9iYW5kX2JpdG1hcCIpIHx8Ci0JCSAgICBocGZzX2Noa19zZWN0b3JzKHMsIHN1cGVyYmxvY2stPmJpdG1hcHMsIDQsICJiaXRtYXBzIikpIHsKLQkJCW1hcmtfZGlydHkocyk7CisJCWlmIChocGZzX2Noa19zZWN0b3JzKHMsIGxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPmRpcl9iYW5kX3N0YXJ0KSwgbGUzMl90b19jcHUoc3VwZXJibG9jay0+bl9kaXJfYmFuZCksICJkaXJfYmFuZCIpIHx8CisJCSAgICBocGZzX2Noa19zZWN0b3JzKHMsIGxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPmRpcl9iYW5kX2JpdG1hcCksIDQsICJkaXJfYmFuZF9iaXRtYXAiKSB8fAorCQkgICAgaHBmc19jaGtfc2VjdG9ycyhzLCBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5iaXRtYXBzKSwgNCwgImJpdG1hcHMiKSkgeworCQkJbWFya19kaXJ0eShzLCAwKTsKIAkJCWdvdG8gYmFpbDQ7CiAJCX0KIAkJc2JpLT5zYl9kaXJiYW5kX3NpemUgPSBhOwogCX0gZWxzZSBwcmludGsoIkhQRlM6IFlvdSByZWFsbHkgZG9uJ3Qgd2FudCBhbnkgY2hlY2tzPyBZb3UgYXJlIGNyYXp5Li4uXG4iKTsKIAogCS8qIExvYWQgY29kZSBwYWdlIHRhYmxlICovCi0JaWYgKHNwYXJlYmxvY2stPm5fY29kZV9wYWdlcykKLQkJaWYgKCEoc2JpLT5zYl9jcF90YWJsZSA9IGhwZnNfbG9hZF9jb2RlX3BhZ2Uocywgc3BhcmVibG9jay0+Y29kZV9wYWdlX2RpcikpKQorCWlmIChsZTMyX3RvX2NwdShzcGFyZWJsb2NrLT5uX2NvZGVfcGFnZXMpKQorCQlpZiAoIShzYmktPnNiX2NwX3RhYmxlID0gaHBmc19sb2FkX2NvZGVfcGFnZShzLCBsZTMyX3RvX2NwdShzcGFyZWJsb2NrLT5jb2RlX3BhZ2VfZGlyKSkpKQogCQkJcHJpbnRrKCJIUEZTOiBXYXJuaW5nOiBjb2RlIHBhZ2Ugc3VwcG9ydCBpcyBkaXNhYmxlZFxuIik7CiAKIAlicmVsc2UoYmgyKTsKQEAgLTY2MCwxMyArNjQyLDEzIEBACiAJaWYgKCFkZSkKIAkJaHBmc19lcnJvcihzLCAidW5hYmxlIHRvIGZpbmQgcm9vdCBkaXIiKTsKIAllbHNlIHsKLQkJcm9vdC0+aV9hdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQocywgZGUtPnJlYWRfZGF0ZSk7CisJCXJvb3QtPmlfYXRpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KHMsIGxlMzJfdG9fY3B1KGRlLT5yZWFkX2RhdGUpKTsKIAkJcm9vdC0+aV9hdGltZS50dl9uc2VjID0gMDsKLQkJcm9vdC0+aV9tdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQocywgZGUtPndyaXRlX2RhdGUpOworCQlyb290LT5pX210aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChzLCBsZTMyX3RvX2NwdShkZS0+d3JpdGVfZGF0ZSkpOwogCQlyb290LT5pX210aW1lLnR2X25zZWMgPSAwOwotCQlyb290LT5pX2N0aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChzLCBkZS0+Y3JlYXRpb25fZGF0ZSk7CisJCXJvb3QtPmlfY3RpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KHMsIGxlMzJfdG9fY3B1KGRlLT5jcmVhdGlvbl9kYXRlKSk7CiAJCXJvb3QtPmlfY3RpbWUudHZfbnNlYyA9IDA7Ci0JCWhwZnNfaShyb290KS0+aV9lYV9zaXplID0gZGUtPmVhX3NpemU7CisJCWhwZnNfaShyb290KS0+aV9lYV9zaXplID0gbGUxNl90b19jcHUoZGUtPmVhX3NpemUpOwogCQlocGZzX2kocm9vdCktPmlfcGFyZW50X2RpciA9IHJvb3QtPmlfaW5vOwogCQlpZiAocm9vdC0+aV9zaXplID09IC0xKQogCQkJcm9vdC0+aV9zaXplID0gMjA0ODsKQEAgLTY3NCw2ICs2NTYsNyBAQAogCQkJcm9vdC0+aV9ibG9ja3MgPSA1OwogCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJfQorCWhwZnNfdW5sb2NrKHMpOwogCXJldHVybiAwOwogCiBiYWlsNDoJYnJlbHNlKGJoMik7CkBAIC02ODEsNiArNjY0LDcgQEAKIGJhaWwyOglicmVsc2UoYmgwKTsKIGJhaWwxOgogYmFpbDA6CisJaHBmc191bmxvY2socyk7CiAJa2ZyZWUoc2JpLT5zYl9ibXBfZGlyKTsKIAlrZnJlZShzYmktPnNiX2NwX3RhYmxlKTsKIAlzLT5zX2ZzX2luZm8gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZnMvamJkL2NvbW1pdC5jIGIvZnMvamJkL2NvbW1pdC5jCmluZGV4IGRhODcxZWUuLjY5YjE4MDQgMTAwNjQ0Ci0tLSBhL2ZzL2piZC9jb21taXQuYworKysgYi9mcy9qYmQvY29tbWl0LmMKQEAgLTM2Miw3ICszNjIsNyBAQAogCSAqIHdlIGRvIG5vdCByZXF1aXJlIGl0IHRvIHJlbWVtYmVyIGV4YWN0bHkgd2hpY2ggb2xkIGJ1ZmZlcnMgaXQKIAkgKiBoYXMgcmVzZXJ2ZWQuICBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgZXhpc3RpbmcgYmVoYXZpb3VyCiAJICogdGhhdCBtdWx0aXBsZSBqb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoKSBjYWxscyB0byB0aGUgc2FtZQotCSAqIGJ1ZmZlciBhcmUgcGVyZmVjdGx5IHBlcm1pc3NhYmxlLgorCSAqIGJ1ZmZlciBhcmUgcGVyZmVjdGx5IHBlcm1pc3NpYmxlLgogCSAqLwogCXdoaWxlIChjb21taXRfdHJhbnNhY3Rpb24tPnRfcmVzZXJ2ZWRfbGlzdCkgewogCQlqaCA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9yZXNlcnZlZF9saXN0OwpkaWZmIC0tZ2l0IGEvZnMvamJkL2pvdXJuYWwuYyBiL2ZzL2piZC9qb3VybmFsLmMKaW5kZXggZWIxMTYwMS4uYjM3MTNhZiAxMDA2NDQKLS0tIGEvZnMvamJkL2pvdXJuYWwuYworKysgYi9mcy9qYmQvam91cm5hbC5jCkBAIC03NzAsNyArNzcwLDcgQEAKIAlqb3VybmFsLT5qX3didWZzaXplID0gbjsKIAlqb3VybmFsLT5qX3didWYgPSBrbWFsbG9jKG4gKiBzaXplb2Yoc3RydWN0IGJ1ZmZlcl9oZWFkKiksIEdGUF9LRVJORUwpOwogCWlmICgham91cm5hbC0+al93YnVmKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbnQgYWxsb2NhdGUgYmhzIGZvciBjb21taXQgdGhyZWFkXG4iLAorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW4ndCBhbGxvY2F0ZSBiaHMgZm9yIGNvbW1pdCB0aHJlYWRcbiIsCiAJCQlfX2Z1bmNfXyk7CiAJCWdvdG8gb3V0X2VycjsKIAl9CkBAIC04MzEsNyArODMxLDcgQEAKIAlqb3VybmFsLT5qX3didWZzaXplID0gbjsKIAlqb3VybmFsLT5qX3didWYgPSBrbWFsbG9jKG4gKiBzaXplb2Yoc3RydWN0IGJ1ZmZlcl9oZWFkKiksIEdGUF9LRVJORUwpOwogCWlmICgham91cm5hbC0+al93YnVmKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbnQgYWxsb2NhdGUgYmhzIGZvciBjb21taXQgdGhyZWFkXG4iLAorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW4ndCBhbGxvY2F0ZSBiaHMgZm9yIGNvbW1pdCB0aHJlYWRcbiIsCiAJCQlfX2Z1bmNfXyk7CiAJCWdvdG8gb3V0X2VycjsKIAl9CmRpZmYgLS1naXQgYS9mcy9qYmQvcmV2b2tlLmMgYi9mcy9qYmQvcmV2b2tlLmMKaW5kZXggZDI5MDE4My4uMzA1YTkwNyAxMDA2NDQKLS0tIGEvZnMvamJkL3Jldm9rZS5jCisrKyBiL2ZzL2piZC9yZXZva2UuYwpAQCAtNzEsNyArNzEsNyBAQAogICogc3dpdGNoaW5nIGhhc2ggdGFibGVzIHVuZGVyIHRoZW0uIEZvciBvcGVyYXRpb25zIG9uIHRoZSBsaXN0cyBvZiBlbnRyaWVzIGluCiAgKiB0aGUgaGFzaCB0YWJsZSBqX3Jldm9rZV9sb2NrIGlzIHVzZWQuCiAgKgotICogRmluYWxseSwgYWxzbyByZXBsYXkgY29kZSB1c2VzIHRoZSBoYXNoIHRhYmxlcyBidXQgYXQgdGhpcyBtb21lbnQgbm9vbmUgZWxzZQorICogRmluYWxseSwgYWxzbyByZXBsYXkgY29kZSB1c2VzIHRoZSBoYXNoIHRhYmxlcyBidXQgYXQgdGhpcyBtb21lbnQgbm8gb25lIGVsc2UKICAqIGNhbiB0b3VjaCB0aGVtIChmaWxlc3lzdGVtIGlzbid0IG1vdW50ZWQgeWV0KSBhbmQgaGVuY2Ugbm8gbG9ja2luZyBpcwogICogbmVlZGVkLgogICovCmRpZmYgLS1naXQgYS9mcy9qYmQvdHJhbnNhY3Rpb24uYyBiL2ZzL2piZC90cmFuc2FjdGlvbi5jCmluZGV4IDViMmU0YzMuLjYwZDIzMTkgMTAwNjQ0Ci0tLSBhL2ZzL2piZC90cmFuc2FjdGlvbi5jCisrKyBiL2ZzL2piZC90cmFuc2FjdGlvbi5jCkBAIC0xMzkyLDcgKzEzOTIsNyBAQAogCSAqIGJ5IDMweCBvciBtb3JlLi4uCiAJICoKIAkgKiBXZSB0cnkgYW5kIG9wdGltaXplIHRoZSBzbGVlcCB0aW1lIGFnYWluc3Qgd2hhdCB0aGUgdW5kZXJseWluZyBkaXNrCi0JICogY2FuIGRvLCBpbnN0ZWFkIG9mIGhhdmluZyBhIHN0YXRpYyBzbGVlcCB0aW1lLiAgVGhpcyBpcyB1c2VmdWxsIGZvcgorCSAqIGNhbiBkbywgaW5zdGVhZCBvZiBoYXZpbmcgYSBzdGF0aWMgc2xlZXAgdGltZS4gIFRoaXMgaXMgdXNlZnVsIGZvcgogCSAqIHRoZSBjYXNlIHdoZXJlIG91ciBzdG9yYWdlIGlzIHNvIGZhc3QgdGhhdCBpdCBpcyBtb3JlIG9wdGltYWwgdG8gZ28KIAkgKiBhaGVhZCBhbmQgZm9yY2UgYSBmbHVzaCBhbmQgd2FpdCBmb3IgdGhlIHRyYW5zYWN0aW9uIHRvIGJlIGNvbW1pdHRlZAogCSAqIHRoYW4gaXQgaXMgdG8gd2FpdCBmb3IgYW4gYXJiaXRyYXJ5IGFtb3VudCBvZiB0aW1lIGZvciBuZXcgd3JpdGVycyB0bwpkaWZmIC0tZ2l0IGEvZnMvamJkMi9jb21taXQuYyBiL2ZzL2piZDIvY29tbWl0LmMKaW5kZXggZmEzNmQ3Ni4uNmUyODAwMCAxMDA2NDQKLS0tIGEvZnMvamJkMi9jb21taXQuYworKysgYi9mcy9qYmQyL2NvbW1pdC5jCkBAIC0xMDUsNiArMTA1LDggQEAKIAlpbnQgcmV0OwogCXN0cnVjdCB0aW1lc3BlYyBub3cgPSBjdXJyZW50X2tlcm5lbF90aW1lKCk7CiAKKwkqY2JoID0gTlVMTDsKKwogCWlmIChpc19qb3VybmFsX2Fib3J0ZWQoam91cm5hbCkpCiAJCXJldHVybiAwOwogCkBAIC00MDMsNyArNDA1LDcgQEAKIAkgKiB3ZSBkbyBub3QgcmVxdWlyZSBpdCB0byByZW1lbWJlciBleGFjdGx5IHdoaWNoIG9sZCBidWZmZXJzIGl0CiAJICogaGFzIHJlc2VydmVkLiAgVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGV4aXN0aW5nIGJlaGF2aW91cgogCSAqIHRoYXQgbXVsdGlwbGUgamJkMl9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoKSBjYWxscyB0byB0aGUgc2FtZQotCSAqIGJ1ZmZlciBhcmUgcGVyZmVjdGx5IHBlcm1pc3NhYmxlLgorCSAqIGJ1ZmZlciBhcmUgcGVyZmVjdGx5IHBlcm1pc3NpYmxlLgogCSAqLwogCXdoaWxlIChjb21taXRfdHJhbnNhY3Rpb24tPnRfcmVzZXJ2ZWRfbGlzdCkgewogCQlqaCA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9yZXNlcnZlZF9saXN0OwpAQCAtODA2LDcgKzgwOCw3IEBACiAJCWlmIChlcnIpCiAJCQlfX2piZDJfam91cm5hbF9hYm9ydF9oYXJkKGpvdXJuYWwpOwogCX0KLQlpZiAoIWVyciAmJiAhaXNfam91cm5hbF9hYm9ydGVkKGpvdXJuYWwpKQorCWlmIChjYmgpCiAJCWVyciA9IGpvdXJuYWxfd2FpdF9vbl9jb21taXRfcmVjb3JkKGpvdXJuYWwsIGNiaCk7CiAJaWYgKEpCRDJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoam91cm5hbCwKIAkJCQkgICAgICBKQkQyX0ZFQVRVUkVfSU5DT01QQVRfQVNZTkNfQ09NTUlUKSAmJgpkaWZmIC0tZ2l0IGEvZnMvamJkMi9qb3VybmFsLmMgYi9mcy9qYmQyL2pvdXJuYWwuYwppbmRleCA5MDQwN2I4Li5lMGVjM2RiIDEwMDY0NAotLS0gYS9mcy9qYmQyL2pvdXJuYWwuYworKysgYi9mcy9qYmQyL2pvdXJuYWwuYwpAQCAtOTE3LDcgKzkxNyw3IEBACiAJam91cm5hbC0+al93YnVmc2l6ZSA9IG47CiAJam91cm5hbC0+al93YnVmID0ga21hbGxvYyhuICogc2l6ZW9mKHN0cnVjdCBidWZmZXJfaGVhZCopLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWpvdXJuYWwtPmpfd2J1ZikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW50IGFsbG9jYXRlIGJocyBmb3IgY29tbWl0IHRocmVhZFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2FuJ3QgYWxsb2NhdGUgYmhzIGZvciBjb21taXQgdGhyZWFkXG4iLAogCQkJX19mdW5jX18pOwogCQlnb3RvIG91dF9lcnI7CiAJfQpAQCAtOTgzLDcgKzk4Myw3IEBACiAJam91cm5hbC0+al93YnVmc2l6ZSA9IG47CiAJam91cm5hbC0+al93YnVmID0ga21hbGxvYyhuICogc2l6ZW9mKHN0cnVjdCBidWZmZXJfaGVhZCopLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWpvdXJuYWwtPmpfd2J1ZikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW50IGFsbG9jYXRlIGJocyBmb3IgY29tbWl0IHRocmVhZFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2FuJ3QgYWxsb2NhdGUgYmhzIGZvciBjb21taXQgdGhyZWFkXG4iLAogCQkJX19mdW5jX18pOwogCQlnb3RvIG91dF9lcnI7CiAJfQpAQCAtMjQxMywxMCArMjQxMywxMiBAQAogCW5ld19kZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGV2bmFtZV9jYWNoZSksIEdGUF9LRVJORUwpOwogCWlmICghbmV3X2RldikKIAkJcmV0dXJuICJOT0RFVi1BTExPQ0ZBSUxVUkUiOyAvKiBTb21ldGhpbmcgbm9uLU5VTEwgKi8KKwliZCA9IGJkZ2V0KGRldmljZSk7CiAJc3Bpbl9sb2NrKCZkZXZuYW1lX2NhY2hlX2xvY2spOwogCWlmIChkZXZjYWNoZVtpXSkgewogCQlpZiAoZGV2Y2FjaGVbaV0tPmRldmljZSA9PSBkZXZpY2UpIHsKIAkJCWtmcmVlKG5ld19kZXYpOworCQkJYmRwdXQoYmQpOwogCQkJcmV0ID0gZGV2Y2FjaGVbaV0tPmRldm5hbWU7CiAJCQlzcGluX3VubG9jaygmZGV2bmFtZV9jYWNoZV9sb2NrKTsKIAkJCXJldHVybiByZXQ7CkBAIC0yNDI1LDcgKzI0MjcsNiBAQAogCX0KIAlkZXZjYWNoZVtpXSA9IG5ld19kZXY7CiAJZGV2Y2FjaGVbaV0tPmRldmljZSA9IGRldmljZTsKLQliZCA9IGJkZ2V0KGRldmljZSk7CiAJaWYgKGJkKSB7CiAJCWJkZXZuYW1lKGJkLCBkZXZjYWNoZVtpXS0+ZGV2bmFtZSk7CiAJCWJkcHV0KGJkKTsKZGlmZiAtLWdpdCBhL2ZzL2piZDIvcmV2b2tlLmMgYi9mcy9qYmQyL3Jldm9rZS5jCmluZGV4IDlhZDMyMWYuLjY5ZmQ5MzUgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvcmV2b2tlLmMKKysrIGIvZnMvamJkMi9yZXZva2UuYwpAQCAtNzEsNyArNzEsNyBAQAogICogc3dpdGNoaW5nIGhhc2ggdGFibGVzIHVuZGVyIHRoZW0uIEZvciBvcGVyYXRpb25zIG9uIHRoZSBsaXN0cyBvZiBlbnRyaWVzIGluCiAgKiB0aGUgaGFzaCB0YWJsZSBqX3Jldm9rZV9sb2NrIGlzIHVzZWQuCiAgKgotICogRmluYWxseSwgYWxzbyByZXBsYXkgY29kZSB1c2VzIHRoZSBoYXNoIHRhYmxlcyBidXQgYXQgdGhpcyBtb21lbnQgbm9vbmUgZWxzZQorICogRmluYWxseSwgYWxzbyByZXBsYXkgY29kZSB1c2VzIHRoZSBoYXNoIHRhYmxlcyBidXQgYXQgdGhpcyBtb21lbnQgbm8gb25lIGVsc2UKICAqIGNhbiB0b3VjaCB0aGVtIChmaWxlc3lzdGVtIGlzbid0IG1vdW50ZWQgeWV0KSBhbmQgaGVuY2Ugbm8gbG9ja2luZyBpcwogICogbmVlZGVkLgogICovCmRpZmYgLS1naXQgYS9mcy9qYmQyL3RyYW5zYWN0aW9uLmMgYi9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKaW5kZXggMWQxMTkxMC4uMDVmYTc3YSAxMDA2NDQKLS0tIGEvZnMvamJkMi90cmFuc2FjdGlvbi5jCisrKyBiL2ZzL2piZDIvdHJhbnNhY3Rpb24uYwpAQCAtMTQwMyw3ICsxNDAzLDcgQEAKIAogCS8qCiAJICogT25jZSB3ZSBkcm9wIHRfdXBkYXRlcywgaWYgaXQgZ29lcyB0byB6ZXJvIHRoZSB0cmFuc2FjdGlvbgotCSAqIGNvdWxkIHN0YXJ0IGNvbW1pdGluZyBvbiB1cyBhbmQgZXZlbnR1YWxseSBkaXNhcHBlYXIuICBTbworCSAqIGNvdWxkIHN0YXJ0IGNvbW1pdHRpbmcgb24gdXMgYW5kIGV2ZW50dWFsbHkgZGlzYXBwZWFyLiAgU28KIAkgKiBvbmNlIHdlIGRvIHRoaXMsIHdlIG11c3Qgbm90IGRlcmVmZXJlbmNlIHRyYW5zYWN0aW9uCiAJICogcG9pbnRlciBhZ2Fpbi4KIAkgKi8KZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL1RPRE8gYi9mcy9qZmZzMi9UT0RPCmluZGV4IDVkM2VhNDAuLmNhMjg5NjQgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL1RPRE8KKysrIGIvZnMvamZmczIvVE9ETwpAQCAtMTEsNyArMTEsNyBAQAogIC0gY2hlY2twb2ludGluZyAoZG8gd2UgbmVlZCB0aGlzPyBzY2FuIGlzIHF1aXRlIGZhc3QpCiAgLSBtYWtlIHRoZSBzY2FuIGNvZGUgcG9wdWxhdGUgcmVhbCBpbm9kZXMgc28gcmVhZF9pbm9kZSBqdXN0IGFmdGVyIAogCW1vdW50IGRvZXNuJ3QgaGF2ZSB0byByZWFkIHRoZSBmbGFzaCB0d2ljZSBmb3IgbGFyZ2UgZmlsZXMuCi0JTWFrZSB0aGlzIGEgcGVyLWlub2RlIG9wdGlvbiwgY2hhbmdhYmxlIHdpdGggY2hhdHRyLCBzbyB5b3UgY2FuCisJTWFrZSB0aGlzIGEgcGVyLWlub2RlIG9wdGlvbiwgY2hhbmdlYWJsZSB3aXRoIGNoYXR0ciwgc28geW91IGNhbgogCWRlY2lkZSB3aGljaCBpbm9kZXMgc2hvdWxkIGJlIGluLWNvcmUgaW1tZWRpYXRlbHkgYWZ0ZXIgbW91bnQuCiAgLSB0ZXN0LCB0ZXN0LCB0ZXN0CiAKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3JlYWRpbm9kZS5jIGIvZnMvamZmczIvcmVhZGlub2RlLmMKaW5kZXggZDMyZWU5NC4uMmFiMWEwZCAxMDA2NDQKLS0tIGEvZnMvamZmczIvcmVhZGlub2RlLmMKKysrIGIvZnMvamZmczIvcmVhZGlub2RlLmMKQEAgLTI0LDcgKzI0LDcgQEAKICAqCiAgKiBSZXR1cm5zOiAwIGlmIHRoZSBkYXRhIENSQyBpcyBjb3JyZWN0OwogICogCSAgICAxIC0gaWYgaW5jb3JyZWN0OwotICoJICAgIGVycm9yIGNvZGUgaWYgYW4gZXJyb3Igb2NjdXJlZC4KKyAqCSAgICBlcnJvciBjb2RlIGlmIGFuIGVycm9yIG9jY3VycmVkLgogICovCiBzdGF0aWMgaW50IGNoZWNrX25vZGVfZGF0YShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX3RtcF9kbm9kZV9pbmZvICp0bikKIHsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3N1bW1hcnkuYyBiL2ZzL2pmZnMyL3N1bW1hcnkuYwppbmRleCA4MDAxNzFkLi5lNTM3ZmIwIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9zdW1tYXJ5LmMKKysrIGIvZnMvamZmczIvc3VtbWFyeS5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAl0ZW1wLT5ub2RldHlwZSA9IHJpLT5ub2RldHlwZTsKIAl0ZW1wLT5pbm9kZSA9IHJpLT5pbm87CiAJdGVtcC0+dmVyc2lvbiA9IHJpLT52ZXJzaW9uOwotCXRlbXAtPm9mZnNldCA9IGNwdV90b19qZTMyKG9mcyk7IC8qIHJlbGF0aXZlIG9mZnNldCBmcm9tIHRoZSBiZWdpbmluZyBvZiB0aGUgamViICovCisJdGVtcC0+b2Zmc2V0ID0gY3B1X3RvX2plMzIob2ZzKTsgLyogcmVsYXRpdmUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgamViICovCiAJdGVtcC0+dG90bGVuID0gcmktPnRvdGxlbjsKIAl0ZW1wLT5uZXh0ID0gTlVMTDsKIApAQCAtMTM5LDcgKzEzOSw3IEBACiAKIAl0ZW1wLT5ub2RldHlwZSA9IHJkLT5ub2RldHlwZTsKIAl0ZW1wLT50b3RsZW4gPSByZC0+dG90bGVuOwotCXRlbXAtPm9mZnNldCA9IGNwdV90b19qZTMyKG9mcyk7CS8qIHJlbGF0aXZlIGZyb20gdGhlIGJlZ2luaW5nIG9mIHRoZSBqZWIgKi8KKwl0ZW1wLT5vZmZzZXQgPSBjcHVfdG9famUzMihvZnMpOwkvKiByZWxhdGl2ZSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGplYiAqLwogCXRlbXAtPnBpbm8gPSByZC0+cGlubzsKIAl0ZW1wLT52ZXJzaW9uID0gcmQtPnZlcnNpb247CiAJdGVtcC0+aW5vID0gcmQtPmlubzsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3didWYuYyBiL2ZzL2pmZnMyL3didWYuYwppbmRleCAwN2VlMTU0Li40NTE1YmVhIDEwMDY0NAotLS0gYS9mcy9qZmZzMi93YnVmLmMKKysrIGIvZnMvamZmczIvd2J1Zi5jCkBAIC0xMTE2LDcgKzExMTYsNyBAQAogCiAvKgogICogT24gTkFORCB3ZSB0cnkgdG8gbWFyayB0aGlzIGJsb2NrIGJhZC4gSWYgdGhlIGJsb2NrIHdhcyBlcmFzZWQgbW9yZQotICogdGhhbiBNQVhfRVJBU0VfRkFJTFVSRVMgd2UgbWFyayBpdCBmaW5hbHkgYmFkLgorICogdGhhbiBNQVhfRVJBU0VfRkFJTFVSRVMgd2UgbWFyayBpdCBmaW5hbGx5IGJhZC4KICAqIERvbid0IGNhcmUgYWJvdXQgZmFpbHVyZXMuIFRoaXMgYmxvY2sgcmVtYWlucyBvbiB0aGUgZXJhc2UtcGVuZGluZwogICogb3IgYmFkYmxvY2sgbGlzdCBhcyBsb25nIGFzIG5vYm9keSBtYW5pcHVsYXRlcyB0aGUgZmxhc2ggd2l0aAogICogYSBib290bG9hZGVyIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2RtYXAuYyBiL2ZzL2pmcy9qZnNfZG1hcC5jCmluZGV4IGM5MmVhM2IuLjQ0OTY4NzIgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfZG1hcC5jCisrKyBiL2ZzL2pmcy9qZnNfZG1hcC5jCkBAIC0xNjQ5LDcgKzE2NDksNyBAQAogCQl9CiAKIAkJLyogc2VhcmNoIHRoZSB0cmVlIHdpdGhpbiB0aGUgZG1hcCBjb250cm9sIHBhZ2UgZm9yCi0JCSAqIHN1ZmZpY2VudCBmcmVlIHNwYWNlLiAgaWYgc3VmZmljaWVudCBmcmVlIHNwYWNlIGlzIGZvdW5kLAorCQkgKiBzdWZmaWNpZW50IGZyZWUgc3BhY2UuICBpZiBzdWZmaWNpZW50IGZyZWUgc3BhY2UgaXMgZm91bmQsCiAJCSAqIGRiRmluZExlYWYoKSByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGVhZiBhdCB3aGljaAogCQkgKiBmcmVlIHNwYWNlIHdhcyBmb3VuZC4KIAkJICovCkBAIC0yNzQ0LDcgKzI3NDQsNyBAQAogCQkJLyogY2hlY2sgd2hpY2ggKGxlYWZubyBvciBidWRkeSkgaXMgdGhlIGxlZnQgYnVkZHkuCiAJCQkgKiB0aGUgbGVmdCBidWRkeSBnZXRzIHRvIGNsYWltIHRoZSBibG9ja3MgcmVzdWx0aW5nCiAJCQkgKiBmcm9tIHRoZSBqb2luIHdoaWxlIHRoZSByaWdodCBnZXRzIHRvIGNsYWltIG5vbmUuCi0JCQkgKiB0aGUgbGVmdCBidWRkeSBpcyBhbHNvIGVsaWdhYmxlIHRvIHBhcnRpY2lwYXRlIGluCisJCQkgKiB0aGUgbGVmdCBidWRkeSBpcyBhbHNvIGVsaWdpYmxlIHRvIHBhcnRpY2lwYXRlIGluCiAJCQkgKiBhIGpvaW4gYXQgdGhlIG5leHQgaGlnaGVyIGxldmVsIHdoaWxlIHRoZSByaWdodAogCQkJICogaXMgbm90LgogCQkJICoKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfZXh0ZW50LmMgYi9mcy9qZnMvamZzX2V4dGVudC5jCmluZGV4IDVkM2JiZDEuLmU1ZmU4NTAgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfZXh0ZW50LmMKKysrIGIvZnMvamZzL2pmc19leHRlbnQuYwpAQCAtMTI2LDcgKzEyNiw3IEBACiAKIAkvKiBhbGxvY2F0ZSB0aGUgZGlzayBibG9ja3MgZm9yIHRoZSBleHRlbnQuICBpbml0aWFsbHksIGV4dEJhbGxvYygpCiAJICogd2lsbCB0cnkgdG8gYWxsb2NhdGUgZGlzayBibG9ja3MgZm9yIHRoZSByZXF1ZXN0ZWQgc2l6ZSAoeGxlbikuCi0JICogaWYgdGhpcyBmYWlscyAoeGxlbiBjb250aWd1b3VzIGZyZWUgYmxvY2tzIG5vdCBhdmFsaWFibGUpLCBpdCdsbAorCSAqIGlmIHRoaXMgZmFpbHMgKHhsZW4gY29udGlndW91cyBmcmVlIGJsb2NrcyBub3QgYXZhaWxhYmxlKSwgaXQnbGwKIAkgKiB0cnkgdG8gYWxsb2NhdGUgYSBzbWFsbGVyIG51bWJlciBvZiBibG9ja3MgKHByb2R1Y2luZyBhIHNtYWxsZXIKIAkgKiBleHRlbnQpLCB3aXRoIHRoaXMgc21hbGxlciBudW1iZXIgb2YgYmxvY2tzIGNvbnNpc3Rpbmcgb2YgdGhlCiAJICogcmVxdWVzdGVkIG51bWJlciBvZiBibG9ja3Mgcm91bmRlZCBkb3duIHRvIHRoZSBuZXh0IHNtYWxsZXIKQEAgLTQ4MSw3ICs0ODEsNyBAQAogICoKICAqCQlpbml0aWFsbHksIHdlIHdpbGwgdHJ5IHRvIGFsbG9jYXRlIGRpc2sgYmxvY2tzIGZvciB0aGUKICAqCQlyZXF1ZXN0ZWQgc2l6ZSAobmJsb2NrcykuICBpZiB0aGlzIGZhaWxzIChuYmxvY2tzCi0gKgkJY29udGlndW91cyBmcmVlIGJsb2NrcyBub3QgYXZhbGlhYmxlKSwgd2UnbGwgdHJ5IHRvIGFsbG9jYXRlCisgKgkJY29udGlndW91cyBmcmVlIGJsb2NrcyBub3QgYXZhaWxhYmxlKSwgd2UnbGwgdHJ5IHRvIGFsbG9jYXRlCiAgKgkJYSBzbWFsbGVyIG51bWJlciBvZiBibG9ja3MgKHByb2R1Y2luZyBhIHNtYWxsZXIgZXh0ZW50KSwgd2l0aAogICoJCXRoaXMgc21hbGxlciBudW1iZXIgb2YgYmxvY2tzIGNvbnNpc3Rpbmcgb2YgdGhlIHJlcXVlc3RlZAogICoJCW51bWJlciBvZiBibG9ja3Mgcm91bmRlZCBkb3duIHRvIHRoZSBuZXh0IHNtYWxsZXIgcG93ZXIgb2YgMgpAQCAtNTc1LDcgKzU3NSw3IEBACiAgKgkJdG8gYSBuZXcgc2V0IG9mIGJsb2Nrcy4gIElmIG1vdmluZyB0aGUgZXh0ZW50LCB3ZSBpbml0aWFsbHkKICAqCQl3aWxsIHRyeSB0byBhbGxvY2F0ZSBkaXNrIGJsb2NrcyBmb3IgdGhlIHJlcXVlc3RlZCBzaXplCiAgKgkJKG5ld25ibGtzKS4gIGlmIHRoaXMgZmFpbHMgKG5ldyBjb250aWd1b3VzIGZyZWUgYmxvY2tzIG5vdAotICoJCWF2YWxpYWJsZSksIHdlJ2xsIHRyeSB0byBhbGxvY2F0ZSBhIHNtYWxsZXIgbnVtYmVyIG9mCisgKgkJYXZhaWxhYmxlKSwgd2UnbGwgdHJ5IHRvIGFsbG9jYXRlIGEgc21hbGxlciBudW1iZXIgb2YKICAqCQlibG9ja3MgKHByb2R1Y2luZyBhIHNtYWxsZXIgZXh0ZW50KSwgd2l0aCB0aGlzIHNtYWxsZXIKICAqCQludW1iZXIgb2YgYmxvY2tzIGNvbnNpc3Rpbmcgb2YgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YKICAqCQlibG9ja3Mgcm91bmRlZCBkb3duIHRvIHRoZSBuZXh0IHNtYWxsZXIgcG93ZXIgb2YgMgpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19pbWFwLmMgYi9mcy9qZnMvamZzX2ltYXAuYwppbmRleCAzYTA5NDIzLi5lZDUzYTQ3IDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2ltYXAuYworKysgYi9mcy9qZnMvamZzX2ltYXAuYwpAQCAtMTA2OSw3ICsxMDY5LDcgQEAKIAkJICovCiAJCWlmIChpYWdwLT5uZnJlZWV4dHMgPT0gY3B1X3RvX2xlMzIoRVhUU1BFUklBRyAtIDEpKSB7CiAJCQkvKiBpbiBwcmVwYXJhdGlvbiBmb3IgcmVtb3ZpbmcgdGhlIGlhZyBmcm9tIHRoZQotCQkJICogYWcgZXh0ZW50IGZyZWUgbGlzdCwgcmVhZCB0aGUgaWFncyBwcmVjZWVkaW5nCisJCQkgKiBhZyBleHRlbnQgZnJlZSBsaXN0LCByZWFkIHRoZSBpYWdzIHByZWNlZGluZwogCQkJICogYW5kIGZvbGxvd2luZyB0aGUgaWFnIG9uIHRoZSBhZyBleHRlbnQgZnJlZQogCQkJICogbGlzdC4KIAkJCSAqLwpAQCAtMTA5NSw3ICsxMDk1LDcgQEAKIAkJaW50IGlub2ZyZWVmd2QgPSBsZTMyX3RvX2NwdShpYWdwLT5pbm9mcmVlZndkKTsKIAogCQkvKiBpbiBwcmVwYXJhdGlvbiBmb3IgcmVtb3ZpbmcgdGhlIGlhZyBmcm9tIHRoZQotCQkgKiBhZyBpbm9kZSBmcmVlIGxpc3QsIHJlYWQgdGhlIGlhZ3MgcHJlY2VlZGluZworCQkgKiBhZyBpbm9kZSBmcmVlIGxpc3QsIHJlYWQgdGhlIGlhZ3MgcHJlY2VkaW5nCiAJCSAqIGFuZCBmb2xsb3dpbmcgdGhlIGlhZyBvbiB0aGUgYWcgaW5vZGUgZnJlZQogCQkgKiBsaXN0LiAgYmVmb3JlIHJlYWRpbmcgdGhlc2UgaWFncywgd2UgbXVzdCBtYWtlCiAJCSAqIHN1cmUgdGhhdCB3ZSBhbHJlYWR5IGRvbid0IGhhdmUgdGhlbSBpbiBoYW5kCkBAIC0xNjgxLDcgKzE2ODEsNyBAQAogCSAqIHRyeSB0byBhbGxvY2F0ZSBhIG5ldyBleHRlbnQgb2YgZnJlZSBpbm9kZXMuCiAJICovCiAJaWYgKGFkZGV4dCkgewotCQkvKiBpZiBmcmVlIHNwYWNlIGlzIG5vdCBhdmFsaWFibGUgZm9yIHRoaXMgbmV3IGV4dGVudCwgdHJ5CisJCS8qIGlmIGZyZWUgc3BhY2UgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyBuZXcgZXh0ZW50LCB0cnkKIAkJICogYmVsb3cgdG8gYWxsb2NhdGUgYSBmcmVlIGFuZCBleGlzdGluZyAoYWxyZWFkeSBiYWNrZWQpCiAJCSAqIGlub2RlIGZyb20gdGhlIGFnLgogCQkgKi8KQEAgLTIwMzYsNyArMjAzNiw3IEBACiAKIAkvKiBjaGVjayBpZiB0aGlzIGlzIHRoZSBsYXN0IGZyZWUgaW5vZGUgd2l0aGluIHRoZSBpYWcuCiAJICogaWYgc28sIGl0IHdpbGwgaGF2ZSB0byBiZSByZW1vdmVkIGZyb20gdGhlIGFnIGZyZWUKLQkgKiBpbm9kZSBsaXN0LCBzbyBnZXQgdGhlIGlhZ3MgcHJlY2VlZGluZyBhbmQgZm9sbG93aW5nCisJICogaW5vZGUgbGlzdCwgc28gZ2V0IHRoZSBpYWdzIHByZWNlZGluZyBhbmQgZm9sbG93aW5nCiAJICogaXQgb24gdGhlIGxpc3QuCiAJICovCiAJaWYgKGlhZ3AtPm5mcmVlaW5vcyA9PSBjcHVfdG9fbGUzMigxKSkgewpAQCAtMjIwOCw3ICsyMjA4LDcgQEAKIAogCS8qIGNoZWNrIGlmIHRoaXMgaXMgdGhlIGxhc3QgZnJlZSBleHRlbnQgd2l0aGluIHRoZQogCSAqIGlhZy4gIGlmIHNvLCB0aGUgaWFnIG11c3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBhZwotCSAqIGZyZWUgZXh0ZW50IGxpc3QsIHNvIGdldCB0aGUgaWFncyBwcmVjZWVkaW5nIGFuZAorCSAqIGZyZWUgZXh0ZW50IGxpc3QsIHNvIGdldCB0aGUgaWFncyBwcmVjZWRpbmcgYW5kCiAJICogZm9sbG93aW5nIHRoZSBpYWcgb24gdGhpcyBsaXN0LgogCSAqLwogCWlmIChpYWdwLT5uZnJlZWV4dHMgPT0gY3B1X3RvX2xlMzIoMSkpIHsKQEAgLTI1MDQsNyArMjUwNCw3IEBACiAJCX0KIAogCi0JCS8qIGdldCB0aGUgbmV4dCBhdmFsaWFibGUgaWFnIG51bWJlciAqLworCQkvKiBnZXQgdGhlIG5leHQgYXZhaWxhYmxlIGlhZyBudW1iZXIgKi8KIAkJaWFnbm8gPSBpbWFwLT5pbV9uZXh0aWFnOwogCiAJCS8qIG1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgbm90IGV4Y2VlZGVkIHRoZSBtYXhpbXVtIGlub2RlCkBAIC0yNjE1LDcgKzI2MTUsNyBAQAogCiAJCWR1cGxpY2F0ZUlYdHJlZShzYiwgYmxrbm8sIHhsZW4sICZ4YWRkcik7CiAKLQkJLyogdXBkYXRlIHRoZSBuZXh0IGF2YWxpYWJsZSBpYWcgbnVtYmVyICovCisJCS8qIHVwZGF0ZSB0aGUgbmV4dCBhdmFpbGFibGUgaWFnIG51bWJlciAqLwogCQlpbWFwLT5pbV9uZXh0aWFnICs9IDE7CiAKIAkJLyogQWRkIHRoZSBpYWcgdG8gdGhlIGlhZyBmcmVlIGxpc3Qgc28gd2UgZG9uJ3QgbG9zZSB0aGUgaWFnCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2xvZ21nci5oIGIvZnMvamZzL2pmc19sb2dtZ3IuaAppbmRleCA5MjM2YmM0Li5lMzhjMjE1IDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2xvZ21nci5oCisrKyBiL2ZzL2pmcy9qZnNfbG9nbWdyLmgKQEAgLTI4OCw3ICsyODgsNyBAQAogCQkvKgogCQkgKglTWU5DUFQ6IGxvZyBzeW5jIHBvaW50CiAJCSAqCi0JCSAqIHJlcGxheSBsb2cgdXB0byBzeW5jcHQgYWRkcmVzcyBzcGVjaWZpZWQ7CisJCSAqIHJlcGxheSBsb2cgdXAgdG8gc3luY3B0IGFkZHJlc3Mgc3BlY2lmaWVkOwogCQkgKi8KIAkJc3RydWN0IHsKIAkJCV9fbGUzMiBzeW5jOwkvKiA0OiBzeW5jcHQgYWRkcmVzcyAoMCA9IGhlcmUpICovCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX21ldGFwYWdlLmggYi9mcy9qZnMvamZzX21ldGFwYWdlLmgKaW5kZXggZDk0ZjhkOS4uYTc4YmVkYSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19tZXRhcGFnZS5oCisrKyBiL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuaApAQCAtNzUsNyArNzUsNyBAQAogZXh0ZXJuIHZvaWQgZm9yY2VfbWV0YXBhZ2Uoc3RydWN0IG1ldGFwYWdlICopOwogCiAvKgotICogaG9sZF9tZXRhcGFnZSBhbmQgcHV0X21ldGFwYWdlIGFyZSB1c2VkIGluIGNvbmp1Y3Rpb24uICBUaGUgcGFnZSBsb2NrCisgKiBob2xkX21ldGFwYWdlIGFuZCBwdXRfbWV0YXBhZ2UgYXJlIHVzZWQgaW4gY29uanVuY3Rpb24uICBUaGUgcGFnZSBsb2NrCiAgKiBpcyBub3QgZHJvcHBlZCBiZXR3ZWVuIHRoZSB0d28sIHNvIG5vIG90aGVyIHRocmVhZHMgY2FuIGdldCBvciByZWxlYXNlCiAgKiB0aGUgbWV0YXBhZ2UKICAqLwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc190eG5tZ3IuYyBiL2ZzL2pmcy9qZnNfdHhubWdyLmMKaW5kZXggOTQ2Njk1Ny4uZjZjYzBjMCAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc190eG5tZ3IuYworKysgYi9mcy9qZnMvamZzX3R4bm1nci5jCkBAIC02MzYsNyArNjM2LDcgQEAKIAkgKiB0aGUgaW5vZGUgb2YgdGhlIHBhZ2UgYW5kIGF2YWlsYWJsZSB0byBhbGwgYW5vbnltb3VzCiAJICogdHJhbnNhY3Rpb25zIHVudGlsIHR4Q29tbWl0KCkgdGltZSBhdCB3aGljaCBwb2ludAogCSAqIHRoZXkgYXJlIHRyYW5zZmVycmVkIHRvIHRoZSB0cmFuc2FjdGlvbiB0bG9jayBsaXN0IG9mCi0JICogdGhlIGNvbW1pdGluZyB0cmFuc2FjdGlvbiBvZiB0aGUgaW5vZGUpCisJICogdGhlIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24gb2YgdGhlIGlub2RlKQogCSAqLwogCWlmICh4dGlkID09IDApIHsKIAkJdGxjay0+dGlkID0gdGlkOwpkaWZmIC0tZ2l0IGEvZnMvamZzL3Jlc2l6ZS5jIGIvZnMvamZzL3Jlc2l6ZS5jCmluZGV4IDFhYmEwMDMuLjhlYTVlZmIgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9yZXNpemUuYworKysgYi9mcy9qZnMvcmVzaXplLmMKQEAgLTU3LDcgKzU3LDcgQEAKICAqIDIuIGNvbXB1dGUgbmV3IEZTQ0tTaXplIGZyb20gbmV3IExWU2l6ZTsKICAqIDMuIHNldCBuZXcgRlNTaXplIGFzIE1JTihGU1NpemUsIExWU2l6ZS0oTG9nU2l6ZStGU0NLU2l6ZSkpIHdoZXJlCiAgKiAgICBhc3NlcnQobmV3IEZTU2l6ZSA+PSBvbGQgRlNTaXplKSwKLSAqICAgIGkuZS4sIGZpbGUgc3lzdGVtIG11c3Qgbm90IGJlIHNocmlua2VkOworICogICAgaS5lLiwgZmlsZSBzeXN0ZW0gbXVzdCBub3QgYmUgc2hydW5rOwogICovCiBpbnQgamZzX2V4dGVuZGZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHM2NCBuZXdMVlNpemUsIGludCBuZXdMb2dTaXplKQogewpAQCAtMTgyLDcgKzE4Miw3IEBACiAJICovCiAJbmV3RlNTaXplID0gbmV3TFZTaXplIC0gbmV3TG9nU2l6ZSAtIG5ld0ZTQ0tTaXplOwogCi0JLyogZmlsZSBzeXN0ZW0gY2Fubm90IGJlIHNocmlua2VkICovCisJLyogZmlsZSBzeXN0ZW0gY2Fubm90IGJlIHNocnVuayAqLwogCWlmIChuZXdGU1NpemUgPCBibXAtPmRiX21hcHNpemUpIHsKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9zdXBlci5jIGIvZnMvamZzL3N1cGVyLmMKaW5kZXggZWVjYTQ4YS4uMDZjOGE2NyAxMDA2NDQKLS0tIGEvZnMvamZzL3N1cGVyLmMKKysrIGIvZnMvamZzL3N1cGVyLmMKQEAgLTY0NCw3ICs2NDQsNyBAQAogCiAvKiBSZWFkIGRhdGEgZnJvbSBxdW90YWZpbGUgLSBhdm9pZCBwYWdlY2FjaGUgYW5kIHN1Y2ggYmVjYXVzZSB3ZSBjYW5ub3QgYWZmb3JkCiAgKiBhY3F1aXJpbmcgdGhlIGxvY2tzLi4uIEFzIHF1b3RhIGZpbGVzIGFyZSBuZXZlciB0cnVuY2F0ZWQgYW5kIHF1b3RhIGNvZGUKLSAqIGl0c2VsZiBzZXJpYWxpemVzIHRoZSBvcGVyYXRpb25zIChhbmQgbm9vbmUgZWxzZSBzaG91bGQgdG91Y2ggdGhlIGZpbGVzKQorICogaXRzZWxmIHNlcmlhbGl6ZXMgdGhlIG9wZXJhdGlvbnMgKGFuZCBubyBvbmUgZWxzZSBzaG91bGQgdG91Y2ggdGhlIGZpbGVzKQogICogd2UgZG9uJ3QgaGF2ZSB0byBiZSBhZnJhaWQgb2YgcmFjZXMgKi8KIHN0YXRpYyBzc2l6ZV90IGpmc19xdW90YV9yZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBjaGFyICpkYXRhLAogCQkJICAgICAgc2l6ZV90IGxlbiwgbG9mZl90IG9mZikKZGlmZiAtLWdpdCBhL2ZzL2xvZ2ZzL2Rldl9tdGQuYyBiL2ZzL2xvZ2ZzL2Rldl9tdGQuYwppbmRleCA3NDY2ZTlkLi4zMzllMTdlIDEwMDY0NAotLS0gYS9mcy9sb2dmcy9kZXZfbXRkLmMKKysrIGIvZnMvbG9nZnMvZGV2X210ZC5jCkBAIC02MCw3ICs2MCw3IEBACiAgKiBhc3luY2hyb25vdXMgcHJvcGVydGllcy4gIFNvIGp1c3QgdG8gcHJldmVudCB0aGUgZmlyc3QgaW1wbGVtZW50b3Igb2Ygc3VjaAogICogYSB0aGluZyBmcm9tIGJyZWFraW5nIGxvZ2ZzIGluIDIzNTAsIHdlIGRvIHRoZSB1c3VhbCBwb2ludGxlc3MgZGFuY2UgdG8KICAqIGRlY2xhcmUgYSBjb21wbGV0aW9uIHZhcmlhYmxlIGFuZCB3YWl0IGZvciBjb21wbGV0aW9uIGJlZm9yZSByZXR1cm5pbmcKLSAqIGZyb20gbXRkX2VyYXNlKCkuICBXaGF0IGFuIGV4Y2VyY2lzZSBpbiBmdXRpbGl0eSEKKyAqIGZyb20gbXRkX2VyYXNlKCkuICBXaGF0IGFuIGV4ZXJjaXNlIGluIGZ1dGlsaXR5IQogICovCiBzdGF0aWMgdm9pZCBsb2dmc19lcmFzZV9jYWxsYmFjayhzdHJ1Y3QgZXJhc2VfaW5mbyAqZWkpCiB7CmRpZmYgLS1naXQgYS9mcy9sb2dmcy9kaXIuYyBiL2ZzL2xvZ2ZzL2Rpci5jCmluZGV4IGY5ZGRmMGMuLjllZDg5ZDEgMTAwNjQ0Ci0tLSBhL2ZzL2xvZ2ZzL2Rpci5jCisrKyBiL2ZzL2xvZ2ZzL2Rpci5jCkBAIC05Miw3ICs5Miw3IEBACiAgKiBzbyBzaG9ydCBuYW1lcyAobGVuIDw9IDkpIGRvbid0IGV2ZW4gb2NjdXB5IHRoZSBjb21wbGV0ZSAzMmJpdCBuYW1lCiAgKiBzcGFjZS4gIEEgcHJpbWUgPjI1NiBlbnN1cmVzIHNob3J0IG5hbWVzIHF1aWNrbHkgc3ByZWFkIHRoZSAzMmJpdAogICogbmFtZSBzcGFjZS4gIEFkZCBhYm91dCAyNiBmb3IgdGhlIGVzdGltYXRlZCBhbW91bnQgb2YgaW5mb3JtYXRpb24KLSAqIG9mIGVhY2ggY2hhcmFjdGVyIGFuZCBwaWNrIGEgcHJpbWUgbmVhcmJ5LCBwcmVmZXJyYWJseSBhIGJpdC1zcGFyc2UKKyAqIG9mIGVhY2ggY2hhcmFjdGVyIGFuZCBwaWNrIGEgcHJpbWUgbmVhcmJ5LCBwcmVmZXJhYmx5IGEgYml0LXNwYXJzZQogICogb25lLgogICovCiBzdGF0aWMgdTMyIGhhc2hfMzIoY29uc3QgY2hhciAqcywgaW50IGxlbiwgdTMyIHNlZWQpCmRpZmYgLS1naXQgYS9mcy9sb2dmcy9yZWFkd3JpdGUuYyBiL2ZzL2xvZ2ZzL3JlYWR3cml0ZS5jCmluZGV4IGVlOTlhOWYuLjllMjIwODUgMTAwNjQ0Ci0tLSBhL2ZzL2xvZ2ZzL3JlYWR3cml0ZS5jCisrKyBiL2ZzL2xvZ2ZzL3JlYWR3cml0ZS5jCkBAIC0xNjE2LDcgKzE2MTYsNyBAQAogCQllcnIgPSBsb2dmc193cml0ZV9idWYoaW5vZGUsIHBhZ2UsIGZsYWdzKTsKIAkJaWYgKCFlcnIgJiYgc2hyaW5rX2xldmVsKGdjX2xldmVsKSA9PSAwKSB7CiAJCQkvKiBSZXdyaXRlIGNhbm5vdCBtYXJrIHRoZSBpbm9kZSBkaXJ0eSBidXQgaGFzIHRvCi0JCQkgKiB3cml0ZSBpdCBpbW1lZGlhdGx5LgorCQkJICogd3JpdGUgaXQgaW1tZWRpYXRlbHkuCiAJCQkgKiBROiBDYW4ndCB3ZSBqdXN0IGNyZWF0ZSBhbiBhbGlhcyBmb3IgdGhlIGlub2RlCiAJCQkgKiBpbnN0ZWFkPyAgQW5kIGlmIG5vdCwgd2h5IG5vdD8KIAkJCSAqLwpkaWZmIC0tZ2l0IGEvZnMvbG9nZnMvc3VwZXIuYyBiL2ZzL2xvZ2ZzL3N1cGVyLmMKaW5kZXggMzM0MzVlNC4uY2UwM2ExOCAxMDA2NDQKLS0tIGEvZnMvbG9nZnMvc3VwZXIuYworKysgYi9mcy9sb2dmcy9zdXBlci5jCkBAIC00ODAsMTAgKzQ4MCw2IEBACiAJCQkhcmVhZF9vbmx5KQogCQlyZXR1cm4gLUVJTzsKIAotCW11dGV4X2luaXQoJnN1cGVyLT5zX2Rpcm9wX211dGV4KTsKLQltdXRleF9pbml0KCZzdXBlci0+c19vYmplY3RfYWxpYXNfbXV0ZXgpOwotCUlOSVRfTElTVF9IRUFEKCZzdXBlci0+c19mcmVlaW5nX2xpc3QpOwotCiAJcmV0ID0gbG9nZnNfaW5pdF9ydyhzYik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTYwMSw2ICs1OTcsMTAgQEAKIAlpZiAoIXN1cGVyKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAorCW11dGV4X2luaXQoJnN1cGVyLT5zX2Rpcm9wX211dGV4KTsKKwltdXRleF9pbml0KCZzdXBlci0+c19vYmplY3RfYWxpYXNfbXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZzdXBlci0+c19mcmVlaW5nX2xpc3QpOworCiAJaWYgKCFkZXZuYW1lKQogCQllcnIgPSBsb2dmc19nZXRfc2JfYmRldihzdXBlciwgdHlwZSwgZGV2bmFtZSk7CiAJZWxzZSBpZiAoc3RybmNtcChkZXZuYW1lLCAibXRkIiwgMykpCmRpZmYgLS1naXQgYS9mcy9tYmNhY2hlLmMgYi9mcy9tYmNhY2hlLmMKaW5kZXggYTI1NDQ0YWIuLjJmMTc0YmUgMTAwNjQ0Ci0tLSBhL2ZzL21iY2FjaGUuYworKysgYi9mcy9tYmNhY2hlLmMKQEAgLTU0Miw3ICs1NDIsNyBAQAogICogbWJfY2FjaGVfZW50cnlfZmluZF9maXJzdCgpCiAgKgogICogRmluZCB0aGUgZmlyc3QgY2FjaGUgZW50cnkgb24gYSBnaXZlbiBkZXZpY2Ugd2l0aCBhIGNlcnRhaW4ga2V5IGluCi0gKiBhbiBhZGRpdGlvbmFsIGluZGV4LiBBZGRpdG9uYWwgbWF0Y2hlcyBjYW4gYmUgZm91bmQgd2l0aAorICogYW4gYWRkaXRpb25hbCBpbmRleC4gQWRkaXRpb25hbCBtYXRjaGVzIGNhbiBiZSBmb3VuZCB3aXRoCiAgKiBtYl9jYWNoZV9lbnRyeV9maW5kX25leHQoKS4gUmV0dXJucyBOVUxMIGlmIG5vIG1hdGNoIHdhcyBmb3VuZC4gVGhlCiAgKiByZXR1cm5lZCBjYWNoZSBlbnRyeSBpcyBsb2NrZWQgZm9yIHNoYXJlZCBhY2Nlc3MgKCJtdWx0aXBsZSByZWFkZXJzIikuCiAgKgpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggM2NiNjE2ZC4uZTNjNGYxMSAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC03MCw3ICs3MCw3IEBACiAgKiBuYW1lIGluZGljYXRlZCBieSB0aGUgc3ltbGluay4gVGhlIG9sZCBjb2RlIGFsd2F5cyBjb21wbGFpbmVkIHRoYXQgdGhlCiAgKiBuYW1lIGFscmVhZHkgZXhpc3RzLCBkdWUgdG8gbm90IGZvbGxvd2luZyB0aGUgc3ltbGluayBldmVuIGlmIGl0cyB0YXJnZXQKICAqIGlzIG5vbmV4aXN0ZW50LiAgVGhlIG5ldyBzZW1hbnRpY3MgYWZmZWN0cyBhbHNvIG1rbm9kKCkgYW5kIGxpbmsoKSB3aGVuCi0gKiB0aGUgbmFtZSBpcyBhIHN5bWxpbmsgcG9pbnRpbmcgdG8gYSBub24tZXhpc3RhbnQgbmFtZS4KKyAqIHRoZSBuYW1lIGlzIGEgc3ltbGluayBwb2ludGluZyB0byBhIG5vbi1leGlzdGVudCBuYW1lLgogICoKICAqIEkgZG9uJ3Qga25vdyB3aGljaCBzZW1hbnRpY3MgaXMgdGhlIHJpZ2h0IG9uZSwgc2luY2UgSSBoYXZlIG5vIGFjY2VzcwogICogdG8gc3RhbmRhcmRzLiBCdXQgSSBmb3VuZCBieSB0cmlhbCB0aGF0IEhQLVVYIDkuMCBoYXMgdGhlIGZ1bGwgIm5ldyIKQEAgLTE3OSw3ICsxNzksNyBAQAogc3RhdGljIGludCBhY2xfcGVybWlzc2lvbl9jaGVjayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGZsYWdzLAogCQlpbnQgKCpjaGVja19hY2wpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpKQogewotCXVtb2RlX3QJCQltb2RlID0gaW5vZGUtPmlfbW9kZTsKKwl1bnNpZ25lZCBpbnQgbW9kZSA9IGlub2RlLT5pX21vZGU7CiAKIAltYXNrICY9IE1BWV9SRUFEIHwgTUFZX1dSSVRFIHwgTUFZX0VYRUM7CiAKQEAgLTY5Nyw2ICs2OTcsNyBAQAogCQlkbyB7CiAJCQlzZXEgPSByZWFkX3NlcWNvdW50X2JlZ2luKCZmcy0+c2VxKTsKIAkJCW5kLT5yb290ID0gZnMtPnJvb3Q7CisJCQluZC0+c2VxID0gX19yZWFkX3NlcWNvdW50X2JlZ2luKCZuZC0+cm9vdC5kZW50cnktPmRfc2VxKTsKIAkJfSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeSgmZnMtPnNlcSwgc2VxKSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZnMvbmFtZXNwYWNlLmMgYi9mcy9uYW1lc3BhY2UuYwppbmRleCA3ZGJhMmVkLi5kOTliY2Y1IDEwMDY0NAotLS0gYS9mcy9uYW1lc3BhY2UuYworKysgYi9mcy9uYW1lc3BhY2UuYwpAQCAtMTAzMCwxOCArMTAzMCw2IEBACiAJLnNob3cJPSBzaG93X3Zmc21udAogfTsKIAotc3RhdGljIGludCB1dWlkX2lzX25pbCh1OCAqdXVpZCkKLXsKLQlpbnQgaTsKLQl1OCAgKmNwID0gKHU4ICopdXVpZDsKLQotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCWlmICgqY3ArKykKLQkJCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIGludCBzaG93X21vdW50aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJc3RydWN0IHByb2NfbW91bnRzICpwID0gbS0+cHJpdmF0ZTsKQEAgLTEwODUsMTAgKzEwNzMsNiBAQAogCWlmIChJU19NTlRfVU5CSU5EQUJMRShtbnQpKQogCQlzZXFfcHV0cyhtLCAiIHVuYmluZGFibGUiKTsKIAotCWlmICghdXVpZF9pc19uaWwobW50LT5tbnRfc2ItPnNfdXVpZCkpCi0JCS8qIHByaW50IHRoZSB1dWlkICovCi0JCXNlcV9wcmludGYobSwgIiB1dWlkOiVwVSIsIG1udC0+bW50X3NiLT5zX3V1aWQpOwotCiAJLyogRmlsZXN5c3RlbSBzcGVjaWZpYyBkYXRhICovCiAJc2VxX3B1dHMobSwgIiAtICIpOwogCXNob3dfdHlwZShtLCBzYik7CmRpZmYgLS1naXQgYS9mcy9uY3Bmcy9pbm9kZS5jIGIvZnMvbmNwZnMvaW5vZGUuYwppbmRleCAwMGExZDFjLi4wMjUwZTRjIDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9pbm9kZS5jCisrKyBiL2ZzL25jcGZzL2lub2RlLmMKQEAgLTU5Niw3ICs1OTYsNyBAQAogLyoJc2VydmVyLT5wcml2LmRhdGEgPSBOVUxMOwkJKi8KIAogCXNlcnZlci0+bSA9IGRhdGE7Ci0JLyogQWx0aG91Z2h0IGFueXRoaW5nIHByb2R1Y2luZyB0aGlzIGlzIGJ1Z2d5LCBpdCBoYXBwZW5zCisJLyogQWx0aG91Z2ggYW55dGhpbmcgcHJvZHVjaW5nIHRoaXMgaXMgYnVnZ3ksIGl0IGhhcHBlbnMKIAkgICBub3cgYmVjYXVzZSBvZiBQQVRIX01BWCBjaGFuZ2VzLi4gKi8KIAlpZiAoc2VydmVyLT5tLnRpbWVfb3V0IDwgMSkgewogCQlzZXJ2ZXItPm0udGltZV9vdXQgPSAxMDsKZGlmZiAtLWdpdCBhL2ZzL25mcy9jYWxsYmFja194ZHIuYyBiL2ZzL25mcy9jYWxsYmFja194ZHIuYwppbmRleCAxNGUwZjkzLi4wMGVjZjYyIDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2tfeGRyLmMKKysrIGIvZnMvbmZzL2NhbGxiYWNrX3hkci5jCkBAIC0yNDEsNyArMjQxLDcgQEAKIAogCWFyZ3MtPmNibF9sYXlvdXRfdHlwZSA9IG50b2hsKCpwKyspOwogCS8qIERlcGl0ZSB0aGUgc3BlYydzIHhkciwgaW9tb2RlIHJlYWxseSBiZWxvbmdzIGluIHRoZSBGSUxFIHN3aXRjaCwKLQkgKiBhcyBpdCBpcyB1bnVzZWFibGUgYW5kIGlnbm9yZWQgd2l0aCB0aGUgb3RoZXIgdHlwZXMuCisJICogYXMgaXQgaXMgdW51c2FibGUgYW5kIGlnbm9yZWQgd2l0aCB0aGUgb3RoZXIgdHlwZXMuCiAJICovCiAJaW9tb2RlID0gbnRvaGwoKnArKyk7CiAJYXJncy0+Y2JsX2xheW91dGNoYW5nZWQgPSBudG9obCgqcCsrKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9maWxlLmMgYi9mcy9uZnMvZmlsZS5jCmluZGV4IDNhYzViZDYuLjJmMDkzZWQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9maWxlLmMKKysrIGIvZnMvbmZzL2ZpbGUuYwpAQCAtMzAxLDcgKzMwMSw3IEBACiAgKiBkaXNrLCBidXQgaXQgcmV0cmlldmVzIGFuZCBjbGVhcnMgY3R4LT5lcnJvciBhZnRlciBzeW5jaGluZywgZGVzcGl0ZQogICogdGhlIHR3byBiZWluZyBzZXQgYXQgdGhlIHNhbWUgdGltZSBpbiBuZnNfY29udGV4dF9zZXRfd3JpdGVfZXJyb3IoKS4KICAqIFRoaXMgaXMgYmVjYXVzZSB0aGUgZm9ybWVyIGlzIHVzZWQgdG8gbm90aWZ5IHRoZSBfbmV4dF8gY2FsbCB0bwotICogbmZzX2ZpbGVfd3JpdGUoKSB0aGF0IGEgd3JpdGUgZXJyb3Igb2NjdXJlZCwgYW5kIGhlbmNlIGNhdXNlIGl0IHRvCisgKiBuZnNfZmlsZV93cml0ZSgpIHRoYXQgYSB3cml0ZSBlcnJvciBvY2N1cnJlZCwgYW5kIGhlbmNlIGNhdXNlIGl0IHRvCiAgKiBmYWxsIGJhY2sgdG8gZG9pbmcgYSBzeW5jaHJvbm91cyB3cml0ZS4KICAqLwogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvZnMvbmZzL25hbWVzcGFjZS5jIGIvZnMvbmZzL25hbWVzcGFjZS5jCmluZGV4IDkxNjZmY2IuLjFmMDYzYmEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uYW1lc3BhY2UuYworKysgYi9mcy9uZnMvbmFtZXNwYWNlLmMKQEAgLTExOSw3ICsxMTksNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX05GU19WNAotc3RhdGljIHJwY19hdXRoZmxhdm9yX3QgbmZzX2ZpbmRfYmVzdF9zZWMoc3RydWN0IG5mczRfc2VjaW5mb19mbGF2b3JzICpmbGF2b3JzLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIHJwY19hdXRoZmxhdm9yX3QgbmZzX2ZpbmRfYmVzdF9zZWMoc3RydWN0IG5mczRfc2VjaW5mb19mbGF2b3JzICpmbGF2b3JzKQogewogCXN0cnVjdCBnc3NfYXBpX21lY2ggKm1lY2g7CiAJc3RydWN0IHhkcl9uZXRvYmogb2lkOwpAQCAtMTQ4LDY3ICsxNDgsNjQgQEAKIAlyZXR1cm4gcHNldWRvZmxhdm9yOwogfQogCi1zdGF0aWMgcnBjX2F1dGhmbGF2b3JfdCBuZnNfbmVnb3RpYXRlX3NlY3VyaXR5KGNvbnN0IHN0cnVjdCBkZW50cnkgKnBhcmVudCwgY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQorc3RhdGljIGludCBuZnNfbmVnb3RpYXRlX3NlY3VyaXR5KGNvbnN0IHN0cnVjdCBkZW50cnkgKnBhcmVudCwKKwkJCQkgIGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCQkgIHJwY19hdXRoZmxhdm9yX3QgKmZsYXZvcikKIHsKLQlpbnQgc3RhdHVzID0gMDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzdHJ1Y3QgbmZzNF9zZWNpbmZvX2ZsYXZvcnMgKmZsYXZvcnM7CiAJaW50ICgqc2VjaW5mbykoc3RydWN0IGlub2RlICosIGNvbnN0IHN0cnVjdCBxc3RyICosIHN0cnVjdCBuZnM0X3NlY2luZm9fZmxhdm9ycyAqKTsKLQlycGNfYXV0aGZsYXZvcl90IGZsYXZvciA9IFJQQ19BVVRIX1VOSVg7CisJaW50IHJldCA9IC1FUEVSTTsKIAogCXNlY2luZm8gPSBORlNfUFJPVE8ocGFyZW50LT5kX2lub2RlKS0+c2VjaW5mbzsKIAlpZiAoc2VjaW5mbyAhPSBOVUxMKSB7CiAJCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwogCQlpZiAoIXBhZ2UpIHsKLQkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlyZXQgPSAtRU5PTUVNOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJZmxhdm9ycyA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKLQkJc3RhdHVzID0gc2VjaW5mbyhwYXJlbnQtPmRfaW5vZGUsICZkZW50cnktPmRfbmFtZSwgZmxhdm9ycyk7Ci0JCWZsYXZvciA9IG5mc19maW5kX2Jlc3Rfc2VjKGZsYXZvcnMsIGRlbnRyeS0+ZF9pbm9kZSk7CisJCXJldCA9IHNlY2luZm8ocGFyZW50LT5kX2lub2RlLCAmZGVudHJ5LT5kX25hbWUsIGZsYXZvcnMpOworCQkqZmxhdm9yID0gbmZzX2ZpbmRfYmVzdF9zZWMoZmxhdm9ycyk7CiAJCXB1dF9wYWdlKHBhZ2UpOwogCX0KIAotCXJldHVybiBmbGF2b3I7Ci0KIG91dDoKLQlzdGF0dXMgPSAtRU5PTUVNOwotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHJwY19hdXRoZmxhdm9yX3QgbmZzX2xvb2t1cF93aXRoX3NlYyhzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCi0JCQkJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBwYXRoICpwYXRoLAotCQkJCSAgICAgc3RydWN0IG5mc19maCAqZmgsIHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKQorc3RhdGljIGludCBuZnNfbG9va3VwX3dpdGhfc2VjKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBkZW50cnkgKnBhcmVudCwKKwkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBwYXRoICpwYXRoLAorCQkJICAgICAgIHN0cnVjdCBuZnNfZmggKmZoLCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0ciwKKwkJCSAgICAgICBycGNfYXV0aGZsYXZvcl90ICpmbGF2b3IpCiB7Ci0JcnBjX2F1dGhmbGF2b3JfdCBmbGF2b3I7CiAJc3RydWN0IHJwY19jbG50ICpjbG9uZTsKIAlzdHJ1Y3QgcnBjX2F1dGggKmF1dGg7CiAJaW50IGVycjsKIAotCWZsYXZvciA9IG5mc19uZWdvdGlhdGVfc2VjdXJpdHkocGFyZW50LCBwYXRoLT5kZW50cnkpOwotCWlmIChmbGF2b3IgPCAwKQorCWVyciA9IG5mc19uZWdvdGlhdGVfc2VjdXJpdHkocGFyZW50LCBwYXRoLT5kZW50cnksIGZsYXZvcik7CisJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwogCWNsb25lICA9IHJwY19jbG9uZV9jbGllbnQoc2VydmVyLT5jbGllbnQpOwotCWF1dGggICA9IHJwY2F1dGhfY3JlYXRlKGZsYXZvciwgY2xvbmUpOworCWF1dGggICA9IHJwY2F1dGhfY3JlYXRlKCpmbGF2b3IsIGNsb25lKTsKIAlpZiAoIWF1dGgpIHsKLQkJZmxhdm9yID0gLUVJTzsKKwkJZXJyID0gLUVJTzsKIAkJZ290byBvdXRfc2h1dGRvd247CiAJfQogCWVyciA9IHNlcnZlci0+bmZzX2NsaWVudC0+cnBjX29wcy0+bG9va3VwKGNsb25lLCBwYXJlbnQtPmRfaW5vZGUsCiAJCQkJCQkgICZwYXRoLT5kZW50cnktPmRfbmFtZSwKIAkJCQkJCSAgZmgsIGZhdHRyKTsKLQlpZiAoZXJyIDwgMCkKLQkJZmxhdm9yID0gZXJyOwogb3V0X3NodXRkb3duOgogCXJwY19zaHV0ZG93bl9jbGllbnQoY2xvbmUpOwogb3V0OgotCXJldHVybiBmbGF2b3I7CisJcmV0dXJuIGVycjsKIH0KICNlbHNlIC8qIENPTkZJR19ORlNfVjQgKi8KLXN0YXRpYyBpbmxpbmUgcnBjX2F1dGhmbGF2b3JfdCBuZnNfbG9va3VwX3dpdGhfc2VjKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsCi0JCQkJICAgICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkgICAgIHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgbmZzX2ZoICpmaCwKLQkJCQkgICAgIHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKQorc3RhdGljIGlubGluZSBpbnQgbmZzX2xvb2t1cF93aXRoX3NlYyhzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLAorCQkJCSAgICAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJCSAgICAgIHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgbmZzX2ZoICpmaCwKKwkJCQkgICAgICBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0ciwKKwkJCQkgICAgICBycGNfYXV0aGZsYXZvcl90ICpmbGF2b3IpCiB7CiAJcmV0dXJuIC1FUEVSTTsKIH0KQEAgLTIzNCw3ICsyMzEsNyBAQAogCXN0cnVjdCBuZnNfZmggKmZoID0gTlVMTDsKIAlzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0ciA9IE5VTEw7CiAJaW50IGVycjsKLQlycGNfYXV0aGZsYXZvcl90IGZsYXZvciA9IDE7CisJcnBjX2F1dGhmbGF2b3JfdCBmbGF2b3IgPSBSUENfQVVUSF9VTklYOwogCiAJZHByaW50aygiLS0+IG5mc19kX2F1dG9tb3VudCgpXG4iKTsKIApAQCAtMjU1LDEzICsyNTIsOCBAQAogCWVyciA9IHNlcnZlci0+bmZzX2NsaWVudC0+cnBjX29wcy0+bG9va3VwKHNlcnZlci0+Y2xpZW50LCBwYXJlbnQtPmRfaW5vZGUsCiAJCQkJCQkgICZwYXRoLT5kZW50cnktPmRfbmFtZSwKIAkJCQkJCSAgZmgsIGZhdHRyKTsKLQlpZiAoZXJyID09IC1FUEVSTSkgewotCQlmbGF2b3IgPSBuZnNfbG9va3VwX3dpdGhfc2VjKHNlcnZlciwgcGFyZW50LCBwYXRoLT5kZW50cnksIHBhdGgsIGZoLCBmYXR0cik7Ci0JCWlmIChmbGF2b3IgPCAwKQotCQkJZXJyID0gZmxhdm9yOwotCQllbHNlCi0JCQllcnIgPSAwOwotCX0KKwlpZiAoZXJyID09IC1FUEVSTSAmJiBORlNfUFJPVE8ocGFyZW50LT5kX2lub2RlKS0+c2VjaW5mbyAhPSBOVUxMKQorCQllcnIgPSBuZnNfbG9va3VwX3dpdGhfc2VjKHNlcnZlciwgcGFyZW50LCBwYXRoLT5kZW50cnksIHBhdGgsIGZoLCBmYXR0ciwgJmZsYXZvcik7CiAJZHB1dChwYXJlbnQpOwogCWlmIChlcnIgIT0gMCkgewogCQltbnQgPSBFUlJfUFRSKGVycik7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNF9mcy5oIGIvZnMvbmZzL25mczRfZnMuaAppbmRleCBlMWMyNjFkLi5jNGE2OTgzIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNF9mcy5oCisrKyBiL2ZzL25mcy9uZnM0X2ZzLmgKQEAgLTQ3LDYgKzQ3LDcgQEAKIAlORlM0Q0xOVF9MQVlPVVRSRUNBTEwsCiAJTkZTNENMTlRfU0VTU0lPTl9SRVNFVCwKIAlORlM0Q0xOVF9SRUNBTExfU0xPVCwKKwlORlM0Q0xOVF9MRUFTRV9DT05GSVJNLAogfTsKIAogZW51bSBuZnM0X3Nlc3Npb25fc3RhdGUgewpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRmaWxlbGF5b3V0LmMgYi9mcy9uZnMvbmZzNGZpbGVsYXlvdXQuYwppbmRleCA2ZjgxOTJmLi5iZTc5ZGM5IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNGZpbGVsYXlvdXQuYworKysgYi9mcy9uZnMvbmZzNGZpbGVsYXlvdXQuYwpAQCAtMTE3LDYgKzExNyw4IEBACiAJY2FzZSAtRUtFWUVYUElSRUQ6CiAJCXJwY19kZWxheSh0YXNrLCBGSUxFTEFZT1VUX1BPTExfUkVUUllfTUFYKTsKIAkJYnJlYWs7CisJY2FzZSAtTkZTNEVSUl9SRVRSWV9VTkNBQ0hFRF9SRVA6CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRwcmludGsoIiVzIERTIGVycm9yLiBSZXRyeSB0aHJvdWdoIE1EUyAlZFxuIiwgX19mdW5jX18sCiAJCQl0YXNrLT50a19zdGF0dXMpOwpAQCAtNDE2LDcgKzQxOCw4IEBACiBmaWxlbGF5b3V0X2NoZWNrX2xheW91dChzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbywKIAkJCXN0cnVjdCBuZnM0X2ZpbGVsYXlvdXRfc2VnbWVudCAqZmwsCiAJCQlzdHJ1Y3QgbmZzNF9sYXlvdXRnZXRfcmVzICpsZ3IsCi0JCQlzdHJ1Y3QgbmZzNF9kZXZpY2VpZCAqaWQpCisJCQlzdHJ1Y3QgbmZzNF9kZXZpY2VpZCAqaWQsCisJCQlnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJc3RydWN0IG5mczRfZmlsZV9sYXlvdXRfZHNhZGRyICpkc2FkZHI7CiAJaW50IHN0YXR1cyA9IC1FSU5WQUw7CkBAIC00MzksNyArNDQyLDcgQEAKIAkvKiBmaW5kIGFuZCByZWZlcmVuY2UgdGhlIGRldmljZWlkICovCiAJZHNhZGRyID0gbmZzNF9mbF9maW5kX2dldF9kZXZpY2VpZChpZCk7CiAJaWYgKGRzYWRkciA9PSBOVUxMKSB7Ci0JCWRzYWRkciA9IGdldF9kZXZpY2VfaW5mbyhsby0+cGxoX2lub2RlLCBpZCk7CisJCWRzYWRkciA9IGdldF9kZXZpY2VfaW5mbyhsby0+cGxoX2lub2RlLCBpZCwgZ2ZwX2ZsYWdzKTsKIAkJaWYgKGRzYWRkciA9PSBOVUxMKQogCQkJZ290byBvdXQ7CiAJfQpAQCAtNTAwLDcgKzUwMyw4IEBACiBmaWxlbGF5b3V0X2RlY29kZV9sYXlvdXQoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqZmxvLAogCQkJIHN0cnVjdCBuZnM0X2ZpbGVsYXlvdXRfc2VnbWVudCAqZmwsCiAJCQkgc3RydWN0IG5mczRfbGF5b3V0Z2V0X3JlcyAqbGdyLAotCQkJIHN0cnVjdCBuZnM0X2RldmljZWlkICppZCkKKwkJCSBzdHJ1Y3QgbmZzNF9kZXZpY2VpZCAqaWQsCisJCQkgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCB4ZHJfc3RyZWFtIHN0cmVhbTsKIAlzdHJ1Y3QgeGRyX2J1ZiBidWYgPSB7CkBAIC01MTYsNyArNTIwLDcgQEAKIAogCWRwcmludGsoIiVzOiBzZXRfbGF5b3V0X21hcCBCZWdpblxuIiwgX19mdW5jX18pOwogCi0Jc2NyYXRjaCA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CisJc2NyYXRjaCA9IGFsbG9jX3BhZ2UoZ2ZwX2ZsYWdzKTsKIAlpZiAoIXNjcmF0Y2gpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC01NTQsMTMgKzU1OCwxMyBAQAogCQlnb3RvIG91dF9lcnI7CiAKIAlmbC0+ZmhfYXJyYXkgPSBremFsbG9jKGZsLT5udW1fZmggKiBzaXplb2Yoc3RydWN0IG5mc19maCAqKSwKLQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwkJCSAgICAgICBnZnBfZmxhZ3MpOwogCWlmICghZmwtPmZoX2FycmF5KQogCQlnb3RvIG91dF9lcnI7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZmwtPm51bV9maDsgaSsrKSB7CiAJCS8qIERvIHdlIHdhbnQgdG8gdXNlIGEgbWVtcG9vbCBoZXJlPyAqLwotCQlmbC0+ZmhfYXJyYXlbaV0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbmZzX2ZoKSwgR0ZQX0tFUk5FTCk7CisJCWZsLT5maF9hcnJheVtpXSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBuZnNfZmgpLCBnZnBfZmxhZ3MpOwogCQlpZiAoIWZsLT5maF9hcnJheVtpXSkKIAkJCWdvdG8gb3V0X2Vycl9mcmVlOwogCkBAIC02MDUsMTkgKzYwOSwyMCBAQAogCiBzdGF0aWMgc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKgogZmlsZWxheW91dF9hbGxvY19sc2VnKHN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxheW91dGlkLAotCQkgICAgICBzdHJ1Y3QgbmZzNF9sYXlvdXRnZXRfcmVzICpsZ3IpCisJCSAgICAgIHN0cnVjdCBuZnM0X2xheW91dGdldF9yZXMgKmxnciwKKwkJICAgICAgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBuZnM0X2ZpbGVsYXlvdXRfc2VnbWVudCAqZmw7CiAJaW50IHJjOwogCXN0cnVjdCBuZnM0X2RldmljZWlkIGlkOwogCiAJZHByaW50aygiLS0+ICVzXG4iLCBfX2Z1bmNfXyk7Ci0JZmwgPSBremFsbG9jKHNpemVvZigqZmwpLCBHRlBfS0VSTkVMKTsKKwlmbCA9IGt6YWxsb2Moc2l6ZW9mKCpmbCksIGdmcF9mbGFncyk7CiAJaWYgKCFmbCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyYyA9IGZpbGVsYXlvdXRfZGVjb2RlX2xheW91dChsYXlvdXRpZCwgZmwsIGxnciwgJmlkKTsKLQlpZiAocmMgIT0gMCB8fCBmaWxlbGF5b3V0X2NoZWNrX2xheW91dChsYXlvdXRpZCwgZmwsIGxnciwgJmlkKSkgeworCXJjID0gZmlsZWxheW91dF9kZWNvZGVfbGF5b3V0KGxheW91dGlkLCBmbCwgbGdyLCAmaWQsIGdmcF9mbGFncyk7CisJaWYgKHJjICE9IDAgfHwgZmlsZWxheW91dF9jaGVja19sYXlvdXQobGF5b3V0aWQsIGZsLCBsZ3IsICZpZCwgZ2ZwX2ZsYWdzKSkgewogCQlfZmlsZWxheW91dF9mcmVlX2xzZWcoZmwpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC02MzMsNyArNjM4LDcgQEAKIAkJaW50IHNpemUgPSAoZmwtPnN0cmlwZV90eXBlID09IFNUUklQRV9TUEFSU0UpID8KIAkJCWZsLT5kc2FkZHItPmRzX251bSA6IGZsLT5kc2FkZHItPnN0cmlwZV9jb3VudDsKIAotCQlmbC0+Y29tbWl0X2J1Y2tldHMgPSBrY2FsbG9jKHNpemUsIHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSwgR0ZQX0tFUk5FTCk7CisJCWZsLT5jb21taXRfYnVja2V0cyA9IGtjYWxsb2Moc2l6ZSwgc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpLCBnZnBfZmxhZ3MpOwogCQlpZiAoIWZsLT5jb21taXRfYnVja2V0cykgewogCQkJZmlsZWxheW91dF9mcmVlX2xzZWcoJmZsLT5nZW5lcmljX2hkcik7CiAJCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0ZmlsZWxheW91dC5oIGIvZnMvbmZzL25mczRmaWxlbGF5b3V0LmgKaW5kZXggMDg1YTM1NC4uMmI0NjFkNyAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRmaWxlbGF5b3V0LmgKKysrIGIvZnMvbmZzL25mczRmaWxlbGF5b3V0LmgKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJwbmZzLmgiCiAKIC8qCi0gKiBGaWVsZCB0ZXN0aW5nIHNob3dzIHdlIG5lZWQgdG8gc3VwcG9ydCB1cHRvIDQwOTYgc3RyaXBlIGluZGljZXMuCisgKiBGaWVsZCB0ZXN0aW5nIHNob3dzIHdlIG5lZWQgdG8gc3VwcG9ydCB1cCB0byA0MDk2IHN0cmlwZSBpbmRpY2VzLgogICogV2Ugc3RvcmUgZWFjaCBpbmRleCBhcyBhIHU4ICh1MzIgb24gdGhlIHdpcmUpIHRvIGtlZXAgdGhlIG1lbW9yeSBmb290cHJpbnQKICAqIHJlYXNvbmFibGUuIFRoaXMgaW4gdHVybiBtZWFucyB3ZSBzdXBwb3J0IGEgbWF4aW11bSBvZiAyNTYKICAqIFJGQyA1NjYxIG11bHRpcGF0aF9saXN0NCBzdHJ1Y3R1cmVzLgpAQCAtMTA0LDYgKzEwNCw2IEBACiBuZnM0X2ZsX2ZpbmRfZ2V0X2RldmljZWlkKHN0cnVjdCBuZnM0X2RldmljZWlkICpkZXZfaWQpOwogZXh0ZXJuIHZvaWQgbmZzNF9mbF9wdXRfZGV2aWNlaWQoc3RydWN0IG5mczRfZmlsZV9sYXlvdXRfZHNhZGRyICpkc2FkZHIpOwogc3RydWN0IG5mczRfZmlsZV9sYXlvdXRfZHNhZGRyICoKLWdldF9kZXZpY2VfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmZzNF9kZXZpY2VpZCAqZGV2X2lkKTsKK2dldF9kZXZpY2VfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmZzNF9kZXZpY2VpZCAqZGV2X2lkLCBnZnBfdCBnZnBfZmxhZ3MpOwogCiAjZW5kaWYgLyogRlNfTkZTX05GUzRGSUxFTEFZT1VUX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0ZmlsZWxheW91dGRldi5jIGIvZnMvbmZzL25mczRmaWxlbGF5b3V0ZGV2LmMKaW5kZXggZGU1MzUwZi4uZGIwN2M3YSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRmaWxlbGF5b3V0ZGV2LmMKKysrIGIvZnMvbmZzL25mczRmaWxlbGF5b3V0ZGV2LmMKQEAgLTIyNSwxMSArMjI1LDExIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmZzNF9wbmZzX2RzICoKLW5mczRfcG5mc19kc19hZGQoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGlwX2FkZHIsIHUzMiBwb3J0KQorbmZzNF9wbmZzX2RzX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgaXBfYWRkciwgdTMyIHBvcnQsIGdmcF90IGdmcF9mbGFncykKIHsKIAlzdHJ1Y3QgbmZzNF9wbmZzX2RzICp0bXBfZHMsICpkczsKIAotCWRzID0ga3phbGxvYyhzaXplb2YoKnRtcF9kcyksIEdGUF9LRVJORUwpOworCWRzID0ga3phbGxvYyhzaXplb2YoKnRtcF9kcyksIGdmcF9mbGFncyk7CiAJaWYgKCFkcykKIAkJZ290byBvdXQ7CiAKQEAgLTI2MSw3ICsyNjEsNyBAQAogICogQ3VycmVudGx5IG9ubHkgc3VwcG9ydCBpcHY0LCBhbmQgb25lIG11bHRpLXBhdGggYWRkcmVzcy4KICAqLwogc3RhdGljIHN0cnVjdCBuZnM0X3BuZnNfZHMgKgotZGVjb2RlX2FuZF9hZGRfZHMoc3RydWN0IHhkcl9zdHJlYW0gKnN0cmVhbXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCitkZWNvZGVfYW5kX2FkZF9kcyhzdHJ1Y3QgeGRyX3N0cmVhbSAqc3RyZWFtcCwgc3RydWN0IGlub2RlICppbm9kZSwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBuZnM0X3BuZnNfZHMgKmRzID0gTlVMTDsKIAljaGFyICpidWY7CkBAIC0zMDMsNyArMzAzLDcgQEAKIAkJCXJsZW4pOwogCQlnb3RvIG91dF9lcnI7CiAJfQotCWJ1ZiA9IGttYWxsb2MocmxlbiArIDEsIEdGUF9LRVJORUwpOworCWJ1ZiA9IGttYWxsb2MocmxlbiArIDEsIGdmcF9mbGFncyk7CiAJaWYgKCFidWYpIHsKIAkJZHByaW50aygiJXM6IE5vdCBlbm91Z2ggbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gb3V0X2VycjsKQEAgLTMzMyw3ICszMzMsNyBAQAogCXNzY2FuZihwc3RyLCAiLSVkLSVkIiwgJnRtcFswXSwgJnRtcFsxXSk7CiAJcG9ydCA9IGh0b25zKCh0bXBbMF0gPDwgOCkgfCAodG1wWzFdKSk7CiAKLQlkcyA9IG5mczRfcG5mc19kc19hZGQoaW5vZGUsIGlwX2FkZHIsIHBvcnQpOworCWRzID0gbmZzNF9wbmZzX2RzX2FkZChpbm9kZSwgaXBfYWRkciwgcG9ydCwgZ2ZwX2ZsYWdzKTsKIAlkcHJpbnRrKCIlczogRGVjb2RlZCBhZGRyZXNzIGFuZCBwb3J0ICVzXG4iLCBfX2Z1bmNfXywgYnVmKTsKIG91dF9mcmVlOgogCWtmcmVlKGJ1Zik7CkBAIC0zNDMsNyArMzQzLDcgQEAKIAogLyogRGVjb2RlIG9wYXF1ZSBkZXZpY2UgZGF0YSBhbmQgcmV0dXJuIHRoZSByZXN1bHQgKi8KIHN0YXRpYyBzdHJ1Y3QgbmZzNF9maWxlX2xheW91dF9kc2FkZHIqCi1kZWNvZGVfZGV2aWNlKHN0cnVjdCBpbm9kZSAqaW5vLCBzdHJ1Y3QgcG5mc19kZXZpY2UgKnBkZXYpCitkZWNvZGVfZGV2aWNlKHN0cnVjdCBpbm9kZSAqaW5vLCBzdHJ1Y3QgcG5mc19kZXZpY2UgKnBkZXYsIGdmcF90IGdmcF9mbGFncykKIHsKIAlpbnQgaTsKIAl1MzIgY250LCBudW07CkBAIC0zNjIsNyArMzYyLDcgQEAKIAlzdHJ1Y3QgcGFnZSAqc2NyYXRjaDsKIAogCS8qIHNldCB1cCB4ZHIgc3RyZWFtICovCi0Jc2NyYXRjaCA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CisJc2NyYXRjaCA9IGFsbG9jX3BhZ2UoZ2ZwX2ZsYWdzKTsKIAlpZiAoIXNjcmF0Y2gpCiAJCWdvdG8gb3V0X2VycjsKIApAQCAtMzg0LDcgKzM4NCw3IEBACiAJfQogCiAJLyogcmVhZCBzdHJpcGUgaW5kaWNlcyAqLwotCXN0cmlwZV9pbmRpY2VzID0ga2NhbGxvYyhjbnQsIHNpemVvZih1OCksIEdGUF9LRVJORUwpOworCXN0cmlwZV9pbmRpY2VzID0ga2NhbGxvYyhjbnQsIHNpemVvZih1OCksIGdmcF9mbGFncyk7CiAJaWYgKCFzdHJpcGVfaW5kaWNlcykKIAkJZ290byBvdXRfZXJyX2ZyZWVfc2NyYXRjaDsKIApAQCAtNDIzLDcgKzQyMyw3IEBACiAKIAlkc2FkZHIgPSBremFsbG9jKHNpemVvZigqZHNhZGRyKSArCiAJCQkoc2l6ZW9mKHN0cnVjdCBuZnM0X3BuZnNfZHMgKikgKiAobnVtIC0gMSkpLAotCQkJR0ZQX0tFUk5FTCk7CisJCQlnZnBfZmxhZ3MpOwogCWlmICghZHNhZGRyKQogCQlnb3RvIG91dF9lcnJfZnJlZV9zdHJpcGVfaW5kaWNlczsKIApAQCAtNDUyLDcgKzQ1Miw3IEBACiAJCWZvciAoaiA9IDA7IGogPCBtcF9jb3VudDsgaisrKSB7CiAJCQlpZiAoaiA9PSAwKSB7CiAJCQkJZHNhZGRyLT5kc19saXN0W2ldID0gZGVjb2RlX2FuZF9hZGRfZHMoJnN0cmVhbSwKLQkJCQkJaW5vKTsKKwkJCQkJaW5vLCBnZnBfZmxhZ3MpOwogCQkJCWlmIChkc2FkZHItPmRzX2xpc3RbaV0gPT0gTlVMTCkKIAkJCQkJZ290byBvdXRfZXJyX2ZyZWVfZGV2aWNlaWQ7CiAJCQl9IGVsc2UgewpAQCAtNTAzLDEyICs1MDMsMTIgQEAKICAqIGF2YWlsYWJsZSBkZXZpY2VzLgogICovCiBzdGF0aWMgc3RydWN0IG5mczRfZmlsZV9sYXlvdXRfZHNhZGRyICoKLWRlY29kZV9hbmRfYWRkX2RldmljZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcG5mc19kZXZpY2UgKmRldikKK2RlY29kZV9hbmRfYWRkX2RldmljZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcG5mc19kZXZpY2UgKmRldiwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBuZnM0X2ZpbGVfbGF5b3V0X2RzYWRkciAqZCwgKm5ldzsKIAlsb25nIGhhc2g7CiAKLQluZXcgPSBkZWNvZGVfZGV2aWNlKGlub2RlLCBkZXYpOworCW5ldyA9IGRlY29kZV9kZXZpY2UoaW5vZGUsIGRldiwgZ2ZwX2ZsYWdzKTsKIAlpZiAoIW5ldykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ291bGQgbm90IGRlY29kZSBvciBhZGQgZGV2aWNlXG4iLAogCQkJX19mdW5jX18pOwpAQCAtNTM3LDcgKzUzNyw3IEBACiAgKiBvZiBhdmFpbGFibGUgZGV2aWNlcywgYW5kIHJldHVybiBpdC4KICAqLwogc3RydWN0IG5mczRfZmlsZV9sYXlvdXRfZHNhZGRyICoKLWdldF9kZXZpY2VfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmZzNF9kZXZpY2VpZCAqZGV2X2lkKQorZ2V0X2RldmljZV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZnM0X2RldmljZWlkICpkZXZfaWQsIGdmcF90IGdmcF9mbGFncykKIHsKIAlzdHJ1Y3QgcG5mc19kZXZpY2UgKnBkZXYgPSBOVUxMOwogCXUzMiBtYXhfcmVzcF9zejsKQEAgLTU1NiwxNyArNTU2LDE3IEBACiAJZHByaW50aygiJXMgaW5vZGUgJXAgbWF4X3Jlc3Bfc3ogJXUgbWF4X3BhZ2VzICVkXG4iLAogCQlfX2Z1bmNfXywgaW5vZGUsIG1heF9yZXNwX3N6LCBtYXhfcGFnZXMpOwogCi0JcGRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbmZzX2RldmljZSksIEdGUF9LRVJORUwpOworCXBkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG5mc19kZXZpY2UpLCBnZnBfZmxhZ3MpOwogCWlmIChwZGV2ID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCi0JcGFnZXMgPSBremFsbG9jKG1heF9wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CisJcGFnZXMgPSBremFsbG9jKG1heF9wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgZ2ZwX2ZsYWdzKTsKIAlpZiAocGFnZXMgPT0gTlVMTCkgewogCQlrZnJlZShwZGV2KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCWZvciAoaSA9IDA7IGkgPCBtYXhfcGFnZXM7IGkrKykgewotCQlwYWdlc1tpXSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCXBhZ2VzW2ldID0gYWxsb2NfcGFnZShnZnBfZmxhZ3MpOwogCQlpZiAoIXBhZ2VzW2ldKQogCQkJZ290byBvdXRfZnJlZTsKIAl9CkBAIC01ODcsNyArNTg3LDcgQEAKIAkgKiBGb3VuZCBuZXcgZGV2aWNlLCBuZWVkIHRvIGRlY29kZSBpdCBhbmQgdGhlbiBhZGQgaXQgdG8gdGhlCiAJICogbGlzdCBvZiBrbm93biBkZXZpY2VzIGZvciB0aGlzIG1vdW50cG9pbnQuCiAJICovCi0JZHNhZGRyID0gZGVjb2RlX2FuZF9hZGRfZGV2aWNlKGlub2RlLCBwZGV2KTsKKwlkc2FkZHIgPSBkZWNvZGVfYW5kX2FkZF9kZXZpY2UoaW5vZGUsIHBkZXYsIGdmcF9mbGFncyk7CiBvdXRfZnJlZToKIAlmb3IgKGkgPSAwOyBpIDwgbWF4X3BhZ2VzOyBpKyspCiAJCV9fZnJlZV9wYWdlKHBhZ2VzW2ldKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0cHJvYy5jIGIvZnMvbmZzL25mczRwcm9jLmMKaW5kZXggZGZkMWU2ZC4uY2YxYjMzOSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRwcm9jLmMKKysrIGIvZnMvbmZzL25mczRwcm9jLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZnM0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmZzX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbmZzX3BhZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnNfbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0yOTksNiArMzAwLDcgQEAKIAkJCXJldCA9IG5mczRfZGVsYXkoc2VydmVyLT5jbGllbnQsICZleGNlcHRpb24tPnRpbWVvdXQpOwogCQkJaWYgKHJldCAhPSAwKQogCQkJCWJyZWFrOworCQljYXNlIC1ORlM0RVJSX1JFVFJZX1VOQ0FDSEVEX1JFUDoKIAkJY2FzZSAtTkZTNEVSUl9PTERfU1RBVEVJRDoKIAkJCWV4Y2VwdGlvbi0+cmV0cnkgPSAxOwogCQkJYnJlYWs7CkBAIC00NDMsOCArNDQ1LDggQEAKIAlpZiAocmVzLT5zcl9zdGF0dXMgPT0gMSkKIAkJcmVzLT5zcl9zdGF0dXMgPSBORlNfT0s7CiAKLQkvKiAtRVJFU1RBUlRTWVMgY2FuIHJlc3VsdCBpbiBza2lwcGluZyBuZnM0MV9zZXF1ZW5jZV9zZXR1cCAqLwotCWlmICghcmVzLT5zcl9zbG90KQorCS8qIGRvbid0IGluY3JlbWVudCB0aGUgc2VxdWVuY2UgbnVtYmVyIGlmIHRoZSB0YXNrIHdhc24ndCBzZW50ICovCisJaWYgKCFSUENfV0FTX1NFTlQodGFzaykpCiAJCWdvdG8gb3V0OwogCiAJLyogQ2hlY2sgdGhlIFNFUVVFTkNFIG9wZXJhdGlvbiBzdGF0dXMgKi8KQEAgLTIxODUsOSArMjE4NywxNCBAQAogCXN0cnVjdCBuZnM0X2V4Y2VwdGlvbiBleGNlcHRpb24gPSB7IH07CiAJaW50IGVycjsKIAlkbyB7Ci0JCWVyciA9IG5mczRfaGFuZGxlX2V4Y2VwdGlvbihzZXJ2ZXIsCi0JCQkJX25mczRfbG9va3VwX3Jvb3Qoc2VydmVyLCBmaGFuZGxlLCBpbmZvKSwKLQkJCQkmZXhjZXB0aW9uKTsKKwkJZXJyID0gX25mczRfbG9va3VwX3Jvb3Qoc2VydmVyLCBmaGFuZGxlLCBpbmZvKTsKKwkJc3dpdGNoIChlcnIpIHsKKwkJY2FzZSAwOgorCQljYXNlIC1ORlM0RVJSX1dST05HU0VDOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllcnIgPSBuZnM0X2hhbmRsZV9leGNlcHRpb24oc2VydmVyLCBlcnIsICZleGNlcHRpb24pOworCQl9CiAJfSB3aGlsZSAoZXhjZXB0aW9uLnJldHJ5KTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMjIwNCwzMSArMjIxMSw1MSBAQAogCQlnb3RvIG91dDsKIAl9CiAJcmV0ID0gbmZzNF9sb29rdXBfcm9vdChzZXJ2ZXIsIGZoYW5kbGUsIGluZm8pOwotCWlmIChyZXQgPCAwKQotCQlyZXQgPSAtRUFHQUlOOwogb3V0OgogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgbmZzNF9maW5kX3Jvb3Rfc2VjKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBuZnNfZmggKmZoYW5kbGUsCisJCQkgICAgICBzdHJ1Y3QgbmZzX2ZzaW5mbyAqaW5mbykKK3sKKwlpbnQgaSwgbGVuLCBzdGF0dXMgPSAwOworCXJwY19hdXRoZmxhdm9yX3QgZmxhdl9hcnJheVtORlNfTUFYX1NFQ0ZMQVZPUlNdOworCisJbGVuID0gZ3NzX21lY2hfbGlzdF9wc2V1ZG9mbGF2b3JzKCZmbGF2X2FycmF5WzBdKTsKKwlmbGF2X2FycmF5W2xlbl0gPSBSUENfQVVUSF9OVUxMOworCWxlbiArPSAxOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCXN0YXR1cyA9IG5mczRfbG9va3VwX3Jvb3Rfc2VjKHNlcnZlciwgZmhhbmRsZSwgaW5mbywgZmxhdl9hcnJheVtpXSk7CisJCWlmIChzdGF0dXMgPT0gLU5GUzRFUlJfV1JPTkdTRUMgfHwgc3RhdHVzID09IC1FQUNDRVMpCisJCQljb250aW51ZTsKKwkJYnJlYWs7CisJfQorCS8qCisJICogLUVBQ0NFU1MgY291bGQgbWVhbiB0aGF0IHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZSBjb3JyZWN0IHBlcm1pc3Npb25zCisJICogdG8gYWNjZXNzIHRoZSBtb3VudC4gIEl0IGNvdWxkIGFsc28gbWVhbiB0aGF0IHdlIHRyaWVkIHRvIG1vdW50CisJICogd2l0aCBhIGdzcyBhdXRoIGZsYXZvciwgYnV0IHJwYy5nc3NkIGlzbid0IHJ1bm5pbmcuICBFaXRoZXIgd2F5LAorCSAqIGV4aXN0aW5nIG1vdW50IHByb2dyYW1zIGRvbid0IGhhbmRsZSAtRUFDQ0VTIHZlcnkgd2VsbCBzbyBpdCBzaG91bGQKKwkgKiBiZSBtYXBwZWQgdG8gLUVQRVJNIGluc3RlYWQuCisJICovCisJaWYgKHN0YXR1cyA9PSAtRUFDQ0VTKQorCQlzdGF0dXMgPSAtRVBFUk07CisJcmV0dXJuIHN0YXR1czsKK30KKwogLyoKICAqIGdldCB0aGUgZmlsZSBoYW5kbGUgZm9yIHRoZSAiLyIgZGlyZWN0b3J5IG9uIHRoZSBzZXJ2ZXIKICAqLwogc3RhdGljIGludCBuZnM0X3Byb2NfZ2V0X3Jvb3Qoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IG5mc19maCAqZmhhbmRsZSwKIAkJCSAgICAgIHN0cnVjdCBuZnNfZnNpbmZvICppbmZvKQogewotCWludCBpLCBsZW4sIHN0YXR1cyA9IDA7Ci0JcnBjX2F1dGhmbGF2b3JfdCBmbGF2X2FycmF5W05GU19NQVhfU0VDRkxBVk9SUyArIDJdOwotCi0JZmxhdl9hcnJheVswXSA9IFJQQ19BVVRIX1VOSVg7Ci0JbGVuID0gZ3NzX21lY2hfbGlzdF9wc2V1ZG9mbGF2b3JzKCZmbGF2X2FycmF5WzFdKTsKLQlmbGF2X2FycmF5WzErbGVuXSA9IFJQQ19BVVRIX05VTEw7Ci0JbGVuICs9IDI7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJc3RhdHVzID0gbmZzNF9sb29rdXBfcm9vdF9zZWMoc2VydmVyLCBmaGFuZGxlLCBpbmZvLCBmbGF2X2FycmF5W2ldKTsKLQkJaWYgKHN0YXR1cyA9PSAwKQotCQkJYnJlYWs7Ci0JfQorCWludCBzdGF0dXMgPSBuZnM0X2xvb2t1cF9yb290KHNlcnZlciwgZmhhbmRsZSwgaW5mbyk7CisJaWYgKChzdGF0dXMgPT0gLU5GUzRFUlJfV1JPTkdTRUMpICYmICEoc2VydmVyLT5mbGFncyAmIE5GU19NT1VOVF9TRUNGTEFWT1VSKSkKKwkJLyoKKwkJICogQSBzdGF0dXMgb2YgLU5GUzRFUlJfV1JPTkdTRUMgd2lsbCBiZSBtYXBwZWQgdG8gLUVQRVJNCisJCSAqIGJ5IG5mczRfbWFwX2Vycm9ycygpIGFzIHRoaXMgZnVuY3Rpb24gZXhpdHMuCisJCSAqLworCQlzdGF0dXMgPSBuZnM0X2ZpbmRfcm9vdF9zZWMoc2VydmVyLCBmaGFuZGxlLCBpbmZvKTsKIAlpZiAoc3RhdHVzID09IDApCiAJCXN0YXR1cyA9IG5mczRfc2VydmVyX2NhcGFiaWxpdGllcyhzZXJ2ZXIsIGZoYW5kbGUpOwogCWlmIChzdGF0dXMgPT0gMCkKQEAgLTM2NjksNiArMzY5Niw3IEBACiAJCQlycGNfZGVsYXkodGFzaywgTkZTNF9QT0xMX1JFVFJZX01BWCk7CiAJCQl0YXNrLT50a19zdGF0dXMgPSAwOwogCQkJcmV0dXJuIC1FQUdBSU47CisJCWNhc2UgLU5GUzRFUlJfUkVUUllfVU5DQUNIRURfUkVQOgogCQljYXNlIC1ORlM0RVJSX09MRF9TVEFURUlEOgogCQkJdGFzay0+dGtfc3RhdHVzID0gMDsKIAkJCXJldHVybiAtRUFHQUlOOwpAQCAtMzcyNSwyMSArMzc1MywyMCBAQAogCQkJCXNpemVvZihzZXRjbGllbnRpZC5zY191YWRkciksICIlcy4ldS4ldSIsCiAJCQkJY2xwLT5jbF9pcGFkZHIsIHBvcnQgPj4gOCwgcG9ydCAmIDI1NSk7CiAKLQkJc3RhdHVzID0gcnBjX2NhbGxfc3luYyhjbHAtPmNsX3JwY2NsaWVudCwgJm1zZywgMCk7CisJCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoY2xwLT5jbF9ycGNjbGllbnQsICZtc2csIFJQQ19UQVNLX1RJTUVPVVQpOwogCQlpZiAoc3RhdHVzICE9IC1ORlM0RVJSX0NMSURfSU5VU0UpCiAJCQlicmVhazsKLQkJaWYgKHNpZ25hbGxlZCgpKQorCQlpZiAobG9vcCAhPSAwKSB7CisJCQkrK2NscC0+Y2xfaWRfdW5pcXVpZmllcjsKIAkJCWJyZWFrOwotCQlpZiAobG9vcCsrICYgMSkKLQkJCXNzbGVlcChjbHAtPmNsX2xlYXNlX3RpbWUgLyBIWiArIDEpOwotCQllbHNlCi0JCQlpZiAoKytjbHAtPmNsX2lkX3VuaXF1aWZpZXIgPT0gMCkKLQkJCQlicmVhazsKKwkJfQorCQkrK2xvb3A7CisJCXNzbGVlcChjbHAtPmNsX2xlYXNlX3RpbWUgLyBIWiArIDEpOwogCX0KIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IF9uZnM0X3Byb2Nfc2V0Y2xpZW50aWRfY29uZmlybShzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLAoraW50IG5mczRfcHJvY19zZXRjbGllbnRpZF9jb25maXJtKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsCiAJCXN0cnVjdCBuZnM0X3NldGNsaWVudGlkX3JlcyAqYXJnLAogCQlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQpCiB7CkBAIC0zNzU0LDcgKzM3ODEsNyBAQAogCWludCBzdGF0dXM7CiAKIAlub3cgPSBqaWZmaWVzOwotCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoY2xwLT5jbF9ycGNjbGllbnQsICZtc2csIDApOworCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoY2xwLT5jbF9ycGNjbGllbnQsICZtc2csIFJQQ19UQVNLX1RJTUVPVVQpOwogCWlmIChzdGF0dXMgPT0gMCkgewogCQlzcGluX2xvY2soJmNscC0+Y2xfbG9jayk7CiAJCWNscC0+Y2xfbGVhc2VfdGltZSA9IGZzaW5mby5sZWFzZV90aW1lICogSFo7CkBAIC0zNzY0LDI2ICszNzkxLDYgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1pbnQgbmZzNF9wcm9jX3NldGNsaWVudGlkX2NvbmZpcm0oc3RydWN0IG5mc19jbGllbnQgKmNscCwKLQkJc3RydWN0IG5mczRfc2V0Y2xpZW50aWRfcmVzICphcmcsCi0JCXN0cnVjdCBycGNfY3JlZCAqY3JlZCkKLXsKLQlsb25nIHRpbWVvdXQgPSAwOwotCWludCBlcnI7Ci0JZG8gewotCQllcnIgPSBfbmZzNF9wcm9jX3NldGNsaWVudGlkX2NvbmZpcm0oY2xwLCBhcmcsIGNyZWQpOwotCQlzd2l0Y2ggKGVycikgewotCQkJY2FzZSAwOgotCQkJCXJldHVybiBlcnI7Ci0JCQljYXNlIC1ORlM0RVJSX1JFU09VUkNFOgotCQkJCS8qIFRoZSBJQk0gbGF3eWVycyBtaXNyZWFkIGFub3RoZXIgZG9jdW1lbnQhICovCi0JCQljYXNlIC1ORlM0RVJSX0RFTEFZOgotCQkJCWVyciA9IG5mczRfZGVsYXkoY2xwLT5jbF9ycGNjbGllbnQsICZ0aW1lb3V0KTsKLQkJfQotCX0gd2hpbGUgKGVyciA9PSAwKTsKLQlyZXR1cm4gZXJyOwotfQotCiBzdHJ1Y3QgbmZzNF9kZWxlZ3JldHVybmRhdGEgewogCXN0cnVjdCBuZnM0X2RlbGVncmV0dXJuYXJncyBhcmdzOwogCXN0cnVjdCBuZnM0X2RlbGVncmV0dXJucmVzIHJlczsKQEAgLTQ3ODgsNyArNDc5NSw3IEBACiAJCQkJaW5pdF91dHNuYW1lKCktPmRvbWFpbm5hbWUsCiAJCQkJY2xwLT5jbF9ycGNjbGllbnQtPmNsX2F1dGgtPmF1X2ZsYXZvcik7CiAKLQlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKGNscC0+Y2xfcnBjY2xpZW50LCAmbXNnLCAwKTsKKwlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKGNscC0+Y2xfcnBjY2xpZW50LCAmbXNnLCBSUENfVEFTS19USU1FT1VUKTsKIAlpZiAoIXN0YXR1cykKIAkJc3RhdHVzID0gbmZzNF9jaGVja19jbF9leGNoYW5nZV9mbGFncyhjbHAtPmNsX2V4Y2hhbmdlX2ZsYWdzKTsKIAlkcHJpbnRrKCI8LS0gJXMgc3RhdHVzPSAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CkBAIC00ODM5LDYgKzQ4NDYsOCBAQAogCQlkcHJpbnRrKCIlcyBSZXRyeTogdGtfc3RhdHVzICVkXG4iLCBfX2Z1bmNfXywgdGFzay0+dGtfc3RhdHVzKTsKIAkJcnBjX2RlbGF5KHRhc2ssIE5GUzRfUE9MTF9SRVRSWV9NSU4pOwogCQl0YXNrLT50a19zdGF0dXMgPSAwOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIC1ORlM0RVJSX1JFVFJZX1VOQ0FDSEVEX1JFUDoKIAkJbmZzX3Jlc3RhcnRfcnBjKHRhc2ssIGRhdGEtPmNscCk7CiAJCXJldHVybjsKIAl9CkBAIC00ODcxLDcgKzQ4ODAsOCBAQAogCQkucnBjX2NsaWVudCA9IGNscC0+Y2xfcnBjY2xpZW50LAogCQkucnBjX21lc3NhZ2UgPSAmbXNnLAogCQkuY2FsbGJhY2tfb3BzID0gJm5mczRfZ2V0X2xlYXNlX3RpbWVfb3BzLAotCQkuY2FsbGJhY2tfZGF0YSA9ICZkYXRhCisJCS5jYWxsYmFja19kYXRhID0gJmRhdGEsCisJCS5mbGFncyA9IFJQQ19UQVNLX1RJTUVPVVQsCiAJfTsKIAlpbnQgc3RhdHVzOwogCkBAIC01MTczLDcgKzUxODMsNyBAQAogCW5mczRfaW5pdF9jaGFubmVsX2F0dHJzKCZhcmdzKTsKIAlhcmdzLmZsYWdzID0gKFNFU1NJT040X1BFUlNJU1QgfCBTRVNTSU9ONF9CQUNLX0NIQU4pOwogCi0Jc3RhdHVzID0gcnBjX2NhbGxfc3luYyhzZXNzaW9uLT5jbHAtPmNsX3JwY2NsaWVudCwgJm1zZywgMCk7CisJc3RhdHVzID0gcnBjX2NhbGxfc3luYyhzZXNzaW9uLT5jbHAtPmNsX3JwY2NsaWVudCwgJm1zZywgUlBDX1RBU0tfVElNRU9VVCk7CiAKIAlpZiAoIXN0YXR1cykKIAkJLyogVmVyaWZ5IHRoZSBzZXNzaW9uJ3MgbmVnb3RpYXRlZCBjaGFubmVsX2F0dHJzIHZhbHVlcyAqLwpAQCAtNTE5NiwyMCArNTIwNiwxMCBAQAogCWludCBzdGF0dXM7CiAJdW5zaWduZWQgKnB0cjsKIAlzdHJ1Y3QgbmZzNF9zZXNzaW9uICpzZXNzaW9uID0gY2xwLT5jbF9zZXNzaW9uOwotCWxvbmcgdGltZW91dCA9IDA7Ci0JaW50IGVycjsKIAogCWRwcmludGsoIi0tPiAlcyBjbHA9JXAgc2Vzc2lvbj0lcFxuIiwgX19mdW5jX18sIGNscCwgc2Vzc2lvbik7CiAKLQlkbyB7Ci0JCXN0YXR1cyA9IF9uZnM0X3Byb2NfY3JlYXRlX3Nlc3Npb24oY2xwKTsKLQkJaWYgKHN0YXR1cyA9PSAtTkZTNEVSUl9ERUxBWSkgewotCQkJZXJyID0gbmZzNF9kZWxheShjbHAtPmNsX3JwY2NsaWVudCwgJnRpbWVvdXQpOwotCQkJaWYgKGVycikKLQkJCQlzdGF0dXMgPSBlcnI7Ci0JCX0KLQl9IHdoaWxlIChzdGF0dXMgPT0gLU5GUzRFUlJfREVMQVkpOwotCisJc3RhdHVzID0gX25mczRfcHJvY19jcmVhdGVfc2Vzc2lvbihjbHApOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwogCkBAIC01MjUwLDcgKzUyNTAsNyBAQAogCW1zZy5ycGNfYXJncCA9IHNlc3Npb247CiAJbXNnLnJwY19yZXNwID0gTlVMTDsKIAltc2cucnBjX2NyZWQgPSBOVUxMOwotCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoc2Vzc2lvbi0+Y2xwLT5jbF9ycGNjbGllbnQsICZtc2csIDApOworCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoc2Vzc2lvbi0+Y2xwLT5jbF9ycGNjbGllbnQsICZtc2csIFJQQ19UQVNLX1RJTUVPVVQpOwogCiAJaWYgKHN0YXR1cykKIAkJcHJpbnRrKEtFUk5fV0FSTklORwpAQCAtNTQ4Myw2ICs1NDgzLDggQEAKIAkJYnJlYWs7CiAJY2FzZSAtTkZTNEVSUl9ERUxBWToKIAkJcnBjX2RlbGF5KHRhc2ssIE5GUzRfUE9MTF9SRVRSWV9NQVgpOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIC1ORlM0RVJSX1JFVFJZX1VOQ0FDSEVEX1JFUDoKIAkJcmV0dXJuIC1FQUdBSU47CiAJZGVmYXVsdDoKIAkJbmZzNF9zY2hlZHVsZV9sZWFzZV9yZWNvdmVyeShjbHApOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRzdGF0ZS5jIGIvZnMvbmZzL25mczRzdGF0ZS5jCmluZGV4IGE2ODA0ZjcuLjAzNmY1YWQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0c3RhdGUuYworKysgYi9mcy9uZnMvbmZzNHN0YXRlLmMKQEAgLTY0LDEwICs2NCwxNSBAQAogCiBpbnQgbmZzNF9pbml0X2NsaWVudGlkKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIHN0cnVjdCBycGNfY3JlZCAqY3JlZCkKIHsKLQlzdHJ1Y3QgbmZzNF9zZXRjbGllbnRpZF9yZXMgY2xpZDsKKwlzdHJ1Y3QgbmZzNF9zZXRjbGllbnRpZF9yZXMgY2xpZCA9IHsKKwkJLmNsaWVudGlkID0gY2xwLT5jbF9jbGllbnRpZCwKKwkJLmNvbmZpcm0gPSBjbHAtPmNsX2NvbmZpcm0sCisJfTsKIAl1bnNpZ25lZCBzaG9ydCBwb3J0OwogCWludCBzdGF0dXM7CiAKKwlpZiAodGVzdF9iaXQoTkZTNENMTlRfTEVBU0VfQ09ORklSTSwgJmNscC0+Y2xfc3RhdGUpKQorCQlnb3RvIGRvX2NvbmZpcm07CiAJcG9ydCA9IG5mc19jYWxsYmFja190Y3Bwb3J0OwogCWlmIChjbHAtPmNsX2FkZHIuc3NfZmFtaWx5ID09IEFGX0lORVQ2KQogCQlwb3J0ID0gbmZzX2NhbGxiYWNrX3RjcHBvcnQ2OwpAQCAtNzUsMTAgKzgwLDE0IEBACiAJc3RhdHVzID0gbmZzNF9wcm9jX3NldGNsaWVudGlkKGNscCwgTkZTNF9DQUxMQkFDSywgcG9ydCwgY3JlZCwgJmNsaWQpOwogCWlmIChzdGF0dXMgIT0gMCkKIAkJZ290byBvdXQ7CisJY2xwLT5jbF9jbGllbnRpZCA9IGNsaWQuY2xpZW50aWQ7CisJY2xwLT5jbF9jb25maXJtID0gY2xpZC5jb25maXJtOworCXNldF9iaXQoTkZTNENMTlRfTEVBU0VfQ09ORklSTSwgJmNscC0+Y2xfc3RhdGUpOworZG9fY29uZmlybToKIAlzdGF0dXMgPSBuZnM0X3Byb2Nfc2V0Y2xpZW50aWRfY29uZmlybShjbHAsICZjbGlkLCBjcmVkKTsKIAlpZiAoc3RhdHVzICE9IDApCiAJCWdvdG8gb3V0OwotCWNscC0+Y2xfY2xpZW50aWQgPSBjbGlkLmNsaWVudGlkOworCWNsZWFyX2JpdChORlM0Q0xOVF9MRUFTRV9DT05GSVJNLCAmY2xwLT5jbF9zdGF0ZSk7CiAJbmZzNF9zY2hlZHVsZV9zdGF0ZV9yZW5ld2FsKGNscCk7CiBvdXQ6CiAJcmV0dXJuIHN0YXR1czsKQEAgLTIzMCwxMyArMjM5LDE4IEBACiB7CiAJaW50IHN0YXR1czsKIAorCWlmICh0ZXN0X2JpdChORlM0Q0xOVF9MRUFTRV9DT05GSVJNLCAmY2xwLT5jbF9zdGF0ZSkpCisJCWdvdG8gZG9fY29uZmlybTsKIAluZnM0X2JlZ2luX2RyYWluX3Nlc3Npb24oY2xwKTsKIAlzdGF0dXMgPSBuZnM0X3Byb2NfZXhjaGFuZ2VfaWQoY2xwLCBjcmVkKTsKIAlpZiAoc3RhdHVzICE9IDApCiAJCWdvdG8gb3V0OworCXNldF9iaXQoTkZTNENMTlRfTEVBU0VfQ09ORklSTSwgJmNscC0+Y2xfc3RhdGUpOworZG9fY29uZmlybToKIAlzdGF0dXMgPSBuZnM0X3Byb2NfY3JlYXRlX3Nlc3Npb24oY2xwKTsKIAlpZiAoc3RhdHVzICE9IDApCiAJCWdvdG8gb3V0OworCWNsZWFyX2JpdChORlM0Q0xOVF9MRUFTRV9DT05GSVJNLCAmY2xwLT5jbF9zdGF0ZSk7CiAJbmZzNDFfc2V0dXBfc3RhdGVfcmVuZXdhbChjbHApOwogCW5mc19tYXJrX2NsaWVudF9yZWFkeShjbHAsIE5GU19DU19SRUFEWSk7CiBvdXQ6CkBAIC0xNTg0LDIwICsxNTk4LDIzIEBACiAgKi8KIHN0YXRpYyB2b2lkIG5mczRfc2V0X2xlYXNlX2V4cGlyZWQoc3RydWN0IG5mc19jbGllbnQgKmNscCwgaW50IHN0YXR1cykKIHsKLQlpZiAobmZzNF9oYXNfc2Vzc2lvbihjbHApKSB7Ci0JCXN3aXRjaCAoc3RhdHVzKSB7Ci0JCWNhc2UgLU5GUzRFUlJfREVMQVk6Ci0JCWNhc2UgLU5GUzRFUlJfQ0xJRF9JTlVTRToKLQkJY2FzZSAtRUFHQUlOOgotCQkJYnJlYWs7CisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIC1ORlM0RVJSX0NMSURfSU5VU0U6CisJY2FzZSAtTkZTNEVSUl9TVEFMRV9DTElFTlRJRDoKKwkJY2xlYXJfYml0KE5GUzRDTE5UX0xFQVNFX0NPTkZJUk0sICZjbHAtPmNsX3N0YXRlKTsKKwkJYnJlYWs7CisJY2FzZSAtTkZTNEVSUl9ERUxBWToKKwljYXNlIC1FVElNRURPVVQ6CisJY2FzZSAtRUFHQUlOOgorCQlzc2xlZXAoMSk7CisJCWJyZWFrOwogCi0JCWNhc2UgLUVLRVlFWFBJUkVEOgotCQkJbmZzNF93YXJuX2tleWV4cGlyZWQoY2xwLT5jbF9ob3N0bmFtZSk7Ci0JCWNhc2UgLU5GUzRFUlJfTk9UX1NBTUU6IC8qIEZpeE1lOiBpbXBsZW1lbnQgcmVjb3ZlcnkKLQkJCQkJICogaW4gbmZzNF9leGNoYW5nZV9pZCAqLwotCQlkZWZhdWx0OgotCQkJcmV0dXJuOwotCQl9CisJY2FzZSAtRUtFWUVYUElSRUQ6CisJCW5mczRfd2Fybl9rZXlleHBpcmVkKGNscC0+Y2xfaG9zdG5hbWUpOworCWNhc2UgLU5GUzRFUlJfTk9UX1NBTUU6IC8qIEZpeE1lOiBpbXBsZW1lbnQgcmVjb3ZlcnkKKwkJCQkgKiBpbiBuZnM0X2V4Y2hhbmdlX2lkICovCisJZGVmYXVsdDoKKwkJcmV0dXJuOwogCX0KIAlzZXRfYml0KE5GUzRDTE5UX0xFQVNFX0VYUElSRUQsICZjbHAtPmNsX3N0YXRlKTsKIH0KQEAgLTE2MDcsNyArMTYyNCw3IEBACiAJaW50IHN0YXR1cyA9IDA7CiAKIAkvKiBFbnN1cmUgZXhjbHVzaXZlIGFjY2VzcyB0byBORlN2NCBzdGF0ZSAqLwotCWZvcig7OykgeworCWRvIHsKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChORlM0Q0xOVF9MRUFTRV9FWFBJUkVELCAmY2xwLT5jbF9zdGF0ZSkpIHsKIAkJCS8qIFdlJ3JlIGdvaW5nIHRvIGhhdmUgdG8gcmUtZXN0YWJsaXNoIGEgY2xpZW50aWQgKi8KIAkJCXN0YXR1cyA9IG5mczRfcmVjbGFpbV9sZWFzZShjbHApOwpAQCAtMTY5MSw3ICsxNzA4LDcgQEAKIAkJCWJyZWFrOwogCQlpZiAodGVzdF9hbmRfc2V0X2JpdChORlM0Q0xOVF9NQU5BR0VSX1JVTk5JTkcsICZjbHAtPmNsX3N0YXRlKSAhPSAwKQogCQkJYnJlYWs7Ci0JfQorCX0gd2hpbGUgKGF0b21pY19yZWFkKCZjbHAtPmNsX2NvdW50KSA+IDEpOwogCXJldHVybjsKIG91dF9lcnJvcjoKIAlwcmludGsoS0VSTl9XQVJOSU5HICJFcnJvcjogc3RhdGUgbWFuYWdlciBmYWlsZWQgb24gTkZTdjQgc2VydmVyICVzIgpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczR4ZHIuYyBiL2ZzL25mcy9uZnM0eGRyLmMKaW5kZXggZGRkZmI1Ny4uYzNjY2QyYyAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczR4ZHIuYworKysgYi9mcy9uZnMvbmZzNHhkci5jCkBAIC0xNDUyLDI2ICsxNDUyLDI1IEBACiAKIHN0YXRpYyB2b2lkIGVuY29kZV9yZWFkZGlyKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIGNvbnN0IHN0cnVjdCBuZnM0X3JlYWRkaXJfYXJnICpyZWFkZGlyLCBzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgc3RydWN0IGNvbXBvdW5kX2hkciAqaGRyKQogewotCXVpbnQzMl90IGF0dHJzWzJdID0gezAsIDB9OworCXVpbnQzMl90IGF0dHJzWzJdID0geworCQlGQVRUUjRfV09SRDBfUkRBVFRSX0VSUk9SLAorCQlGQVRUUjRfV09SRDFfTU9VTlRFRF9PTl9GSUxFSUQsCisJfTsKIAl1aW50MzJfdCBkaXJjb3VudCA9IHJlYWRkaXItPmNvdW50ID4+IDE7CiAJX19iZTMyICpwOwogCiAJaWYgKHJlYWRkaXItPnBsdXMpIHsKIAkJYXR0cnNbMF0gfD0gRkFUVFI0X1dPUkQwX1RZUEV8RkFUVFI0X1dPUkQwX0NIQU5HRXxGQVRUUjRfV09SRDBfU0laRXwKLQkJCUZBVFRSNF9XT1JEMF9GU0lEfEZBVFRSNF9XT1JEMF9GSUxFSEFORExFOworCQkJRkFUVFI0X1dPUkQwX0ZTSUR8RkFUVFI0X1dPUkQwX0ZJTEVIQU5ETEV8RkFUVFI0X1dPUkQwX0ZJTEVJRDsKIAkJYXR0cnNbMV0gfD0gRkFUVFI0X1dPUkQxX01PREV8RkFUVFI0X1dPUkQxX05VTUxJTktTfEZBVFRSNF9XT1JEMV9PV05FUnwKIAkJCUZBVFRSNF9XT1JEMV9PV05FUl9HUk9VUHxGQVRUUjRfV09SRDFfUkFXREVWfAogCQkJRkFUVFI0X1dPUkQxX1NQQUNFX1VTRUR8RkFUVFI0X1dPUkQxX1RJTUVfQUNDRVNTfAogCQkJRkFUVFI0X1dPUkQxX1RJTUVfTUVUQURBVEF8RkFUVFI0X1dPUkQxX1RJTUVfTU9ESUZZOwogCQlkaXJjb3VudCA+Pj0gMTsKIAl9Ci0JYXR0cnNbMF0gfD0gRkFUVFI0X1dPUkQwX1JEQVRUUl9FUlJPUnxGQVRUUjRfV09SRDBfRklMRUlEOwotCWF0dHJzWzFdIHw9IEZBVFRSNF9XT1JEMV9NT1VOVEVEX09OX0ZJTEVJRDsKLQkvKiBTd2l0Y2ggdG8gbW91bnRlZF9vbl9maWxlaWQgaWYgdGhlIHNlcnZlciBzdXBwb3J0cyBpdCAqLwotCWlmIChyZWFkZGlyLT5iaXRtYXNrWzFdICYgRkFUVFI0X1dPUkQxX01PVU5URURfT05fRklMRUlEKQotCQlhdHRyc1swXSAmPSB+RkFUVFI0X1dPUkQwX0ZJTEVJRDsKLQllbHNlCi0JCWF0dHJzWzFdICY9IH5GQVRUUjRfV09SRDFfTU9VTlRFRF9PTl9GSUxFSUQ7CisJLyogVXNlIG1vdW50ZWRfb25fZmlsZWlkIG9ubHkgaWYgdGhlIHNlcnZlciBzdXBwb3J0cyBpdCAqLworCWlmICghKHJlYWRkaXItPmJpdG1hc2tbMV0gJiBGQVRUUjRfV09SRDFfTU9VTlRFRF9PTl9GSUxFSUQpKQorCQlhdHRyc1swXSB8PSBGQVRUUjRfV09SRDBfRklMRUlEOwogCiAJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCAxMitORlM0X1ZFUklGSUVSX1NJWkUrMjApOwogCSpwKysgPSBjcHVfdG9fYmUzMihPUF9SRUFERElSKTsKQEAgLTMxNDAsNyArMzEzOSw3IEBACiAJCQlnb3RvIG91dF9vdmVyZmxvdzsKIAkJeGRyX2RlY29kZV9oeXBlcihwLCBmaWxlaWQpOwogCQliaXRtYXBbMV0gJj0gfkZBVFRSNF9XT1JEMV9NT1VOVEVEX09OX0ZJTEVJRDsKLQkJcmV0ID0gTkZTX0FUVFJfRkFUVFJfRklMRUlEOworCQlyZXQgPSBORlNfQVRUUl9GQVRUUl9NT1VOVEVEX09OX0ZJTEVJRDsKIAl9CiAJZHByaW50aygiJXM6IGZpbGVpZD0lTHVcbiIsIF9fZnVuY19fLCAodW5zaWduZWQgbG9uZyBsb25nKSpmaWxlaWQpOwogCXJldHVybiByZXQ7CkBAIC00MDAyLDcgKzQwMDEsNiBAQAogewogCWludCBzdGF0dXM7CiAJdW1vZGVfdCBmbW9kZSA9IDA7Ci0JdWludDY0X3QgZmlsZWlkOwogCXVpbnQzMl90IHR5cGU7CiAKIAlzdGF0dXMgPSBkZWNvZGVfYXR0cl90eXBlKHhkciwgYml0bWFwLCAmdHlwZSk7CkBAIC00MTAxLDEzICs0MDk5LDEwIEBACiAJCWdvdG8geGRyX2Vycm9yOwogCWZhdHRyLT52YWxpZCB8PSBzdGF0dXM7CiAKLQlzdGF0dXMgPSBkZWNvZGVfYXR0cl9tb3VudGVkX29uX2ZpbGVpZCh4ZHIsIGJpdG1hcCwgJmZpbGVpZCk7CisJc3RhdHVzID0gZGVjb2RlX2F0dHJfbW91bnRlZF9vbl9maWxlaWQoeGRyLCBiaXRtYXAsICZmYXR0ci0+bW91bnRlZF9vbl9maWxlaWQpOwogCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIHhkcl9lcnJvcjsKLQlpZiAoc3RhdHVzICE9IDAgJiYgIShmYXR0ci0+dmFsaWQgJiBzdGF0dXMpKSB7Ci0JCWZhdHRyLT5maWxlaWQgPSBmaWxlaWQ7Ci0JCWZhdHRyLT52YWxpZCB8PSBzdGF0dXM7Ci0JfQorCWZhdHRyLT52YWxpZCB8PSBzdGF0dXM7CiAKIHhkcl9lcnJvcjoKIAlkcHJpbnRrKCIlczogeGRyIHJldHVybmVkICVkXG4iLCBfX2Z1bmNfXywgLXN0YXR1cyk7CkBAIC00ODM4LDE3ICs0ODMzLDIxIEBACiAJc3RydWN0IG5mczRfc2VjaW5mb19mbGF2b3IgKnNlY19mbGF2b3I7CiAJaW50IHN0YXR1czsKIAlfX2JlMzIgKnA7Ci0JaW50IGk7CisJaW50IGksIG51bV9mbGF2b3JzOwogCiAJc3RhdHVzID0gZGVjb2RlX29wX2hkcih4ZHIsIE9QX1NFQ0lORk8pOworCWlmIChzdGF0dXMpCisJCWdvdG8gb3V0OwogCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOwogCWlmICh1bmxpa2VseSghcCkpCiAJCWdvdG8gb3V0X292ZXJmbG93OwotCXJlcy0+Zmxhdm9ycy0+bnVtX2ZsYXZvcnMgPSBiZTMyX3RvX2NwdXAocCk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgcmVzLT5mbGF2b3JzLT5udW1fZmxhdm9yczsgaSsrKSB7CisJcmVzLT5mbGF2b3JzLT5udW1fZmxhdm9ycyA9IDA7CisJbnVtX2ZsYXZvcnMgPSBiZTMyX3RvX2NwdXAocCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2ZsYXZvcnM7IGkrKykgewogCQlzZWNfZmxhdm9yID0gJnJlcy0+Zmxhdm9ycy0+Zmxhdm9yc1tpXTsKLQkJaWYgKChjaGFyICopJnNlY19mbGF2b3JbMV0gLSAoY2hhciAqKXJlcyA+IFBBR0VfU0laRSkKKwkJaWYgKChjaGFyICopJnNlY19mbGF2b3JbMV0gLSAoY2hhciAqKXJlcy0+Zmxhdm9ycyA+IFBBR0VfU0laRSkKIAkJCWJyZWFrOwogCiAJCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOwpAQCAtNDg1NywxMyArNDg1NiwxNSBAQAogCQlzZWNfZmxhdm9yLT5mbGF2b3IgPSBiZTMyX3RvX2NwdXAocCk7CiAKIAkJaWYgKHNlY19mbGF2b3ItPmZsYXZvciA9PSBSUENfQVVUSF9HU1MpIHsKLQkJCWlmIChkZWNvZGVfc2VjaW5mb19nc3MoeGRyLCBzZWNfZmxhdm9yKSkKLQkJCQlicmVhazsKKwkJCXN0YXR1cyA9IGRlY29kZV9zZWNpbmZvX2dzcyh4ZHIsIHNlY19mbGF2b3IpOworCQkJaWYgKHN0YXR1cykKKwkJCQlnb3RvIG91dDsKIAkJfQorCQlyZXMtPmZsYXZvcnMtPm51bV9mbGF2b3JzKys7CiAJfQogCi0JcmV0dXJuIDA7Ci0KK291dDoKKwlyZXR1cm4gc3RhdHVzOwogb3V0X292ZXJmbG93OgogCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKIAlyZXR1cm4gLUVJTzsKQEAgLTY0MDgsNyArNjQwOSw5IEBACiAJaWYgKGRlY29kZV9nZXRmYXR0cl9hdHRycyh4ZHIsIGJpdG1hcCwgZW50cnktPmZhdHRyLCBlbnRyeS0+ZmgsCiAJCQkJCWVudHJ5LT5zZXJ2ZXIsIDEpIDwgMCkKIAkJZ290byBvdXRfb3ZlcmZsb3c7Ci0JaWYgKGVudHJ5LT5mYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9GSUxFSUQpCisJaWYgKGVudHJ5LT5mYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9NT1VOVEVEX09OX0ZJTEVJRCkKKwkJZW50cnktPmlubyA9IGVudHJ5LT5mYXR0ci0+bW91bnRlZF9vbl9maWxlaWQ7CisJZWxzZSBpZiAoZW50cnktPmZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0ZJTEVJRCkKIAkJZW50cnktPmlubyA9IGVudHJ5LT5mYXR0ci0+ZmlsZWlkOwogCiAJZW50cnktPmRfdHlwZSA9IERUX1VOS05PV047CmRpZmYgLS1naXQgYS9mcy9uZnMvcG5mcy5jIGIvZnMvbmZzL3BuZnMuYwppbmRleCBkOWFiOTcyLi5mNTdmNTI4IDEwMDY0NAotLS0gYS9mcy9uZnMvcG5mcy5jCisrKyBiL2ZzL25mcy9wbmZzLmMKQEAgLTM4Myw2ICszODMsNyBAQAogCQkJCXBsaF9sYXlvdXRzKTsKIAkJZHByaW50aygiJXMgZnJlZWluZyBsYXlvdXQgZm9yIGlub2RlICVsdVxuIiwgX19mdW5jX18sCiAJCQlsby0+cGxoX2lub2RlLT5pX2lubyk7CisJCWxpc3RfZGVsX2luaXQoJmxvLT5wbGhfbGF5b3V0cyk7CiAJCXBuZnNfZGVzdHJveV9sYXlvdXQoTkZTX0kobG8tPnBsaF9pbm9kZSkpOwogCX0KIH0KQEAgLTQ2Niw3ICs0NjcsOCBAQAogc3RhdGljIHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICoKIHNlbmRfbGF5b3V0Z2V0KHN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvLAogCSAgIHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsCi0JICAgdTMyIGlvbW9kZSkKKwkgICB1MzIgaW9tb2RlLAorCSAgIGdmcF90IGdmcF9mbGFncykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlubyA9IGxvLT5wbGhfaW5vZGU7CiAJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IE5GU19TRVJWRVIoaW5vKTsKQEAgLTQ3OSw3ICs0ODEsNyBAQAogCWRwcmludGsoIi0tPiAlc1xuIiwgX19mdW5jX18pOwogCiAJQlVHX09OKGN0eCA9PSBOVUxMKTsKLQlsZ3AgPSBremFsbG9jKHNpemVvZigqbGdwKSwgR0ZQX0tFUk5FTCk7CisJbGdwID0ga3phbGxvYyhzaXplb2YoKmxncCksIGdmcF9mbGFncyk7CiAJaWYgKGxncCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtNDg3LDEyICs0ODksMTIgQEAKIAltYXhfcmVzcF9zeiA9IHNlcnZlci0+bmZzX2NsaWVudC0+Y2xfc2Vzc2lvbi0+ZmNfYXR0cnMubWF4X3Jlc3Bfc3o7CiAJbWF4X3BhZ2VzID0gbWF4X3Jlc3Bfc3ogPj4gUEFHRV9TSElGVDsKIAotCXBhZ2VzID0ga3phbGxvYyhtYXhfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOworCXBhZ2VzID0ga3phbGxvYyhtYXhfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIGdmcF9mbGFncyk7CiAJaWYgKCFwYWdlcykKIAkJZ290byBvdXRfZXJyX2ZyZWU7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbWF4X3BhZ2VzOyBpKyspIHsKLQkJcGFnZXNbaV0gPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCQlwYWdlc1tpXSA9IGFsbG9jX3BhZ2UoZ2ZwX2ZsYWdzKTsKIAkJaWYgKCFwYWdlc1tpXSkKIAkJCWdvdG8gb3V0X2Vycl9mcmVlOwogCX0KQEAgLTUwOCw2ICs1MTAsNyBAQAogCWxncC0+YXJncy5sYXlvdXQucGFnZXMgPSBwYWdlczsKIAlsZ3AtPmFyZ3MubGF5b3V0LnBnbGVuID0gbWF4X3BhZ2VzICogUEFHRV9TSVpFOwogCWxncC0+bHNlZ3BwID0gJmxzZWc7CisJbGdwLT5nZnBfZmxhZ3MgPSBnZnBfZmxhZ3M7CiAKIAkvKiBTeW5jaHJvbm91c2x5IHJldHJpZXZlIGxheW91dCBpbmZvcm1hdGlvbiBmcm9tIHNlcnZlciBhbmQKIAkgKiBzdG9yZSBpbiBsc2VnLgpAQCAtNjY1LDExICs2NjgsMTEgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwbmZzX2xheW91dF9oZHIgKgotYWxsb2NfaW5pdF9sYXlvdXRfaGRyKHN0cnVjdCBpbm9kZSAqaW5vKQorYWxsb2NfaW5pdF9sYXlvdXRfaGRyKHN0cnVjdCBpbm9kZSAqaW5vLCBnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG87CiAKLQlsbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbmZzX2xheW91dF9oZHIpLCBHRlBfS0VSTkVMKTsKKwlsbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbmZzX2xheW91dF9oZHIpLCBnZnBfZmxhZ3MpOwogCWlmICghbG8pCiAJCXJldHVybiBOVUxMOwogCWF0b21pY19zZXQoJmxvLT5wbGhfcmVmY291bnQsIDEpOwpAQCAtNjgxLDcgKzY4NCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICoKLXBuZnNfZmluZF9hbGxvY19sYXlvdXQoc3RydWN0IGlub2RlICppbm8pCitwbmZzX2ZpbmRfYWxsb2NfbGF5b3V0KHN0cnVjdCBpbm9kZSAqaW5vLCBnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlubyk7CiAJc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbmV3ID0gTlVMTDsKQEAgLTY5Niw3ICs2OTksNyBAQAogCQkJcmV0dXJuIG5mc2ktPmxheW91dDsKIAl9CiAJc3Bpbl91bmxvY2soJmluby0+aV9sb2NrKTsKLQluZXcgPSBhbGxvY19pbml0X2xheW91dF9oZHIoaW5vKTsKKwluZXcgPSBhbGxvY19pbml0X2xheW91dF9oZHIoaW5vLCBnZnBfZmxhZ3MpOwogCXNwaW5fbG9jaygmaW5vLT5pX2xvY2spOwogCiAJaWYgKGxpa2VseShuZnNpLT5sYXlvdXQgPT0gTlVMTCkpCS8qIFdvbiB0aGUgcmFjZT8gKi8KQEAgLTc1Niw3ICs3NTksOCBAQAogc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKgogcG5mc191cGRhdGVfbGF5b3V0KHN0cnVjdCBpbm9kZSAqaW5vLAogCQkgICBzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LAotCQkgICBlbnVtIHBuZnNfaW9tb2RlIGlvbW9kZSkKKwkJICAgZW51bSBwbmZzX2lvbW9kZSBpb21vZGUsCisJCSAgIGdmcF90IGdmcF9mbGFncykKIHsKIAlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vKTsKIAlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwID0gTkZTX1NFUlZFUihpbm8pLT5uZnNfY2xpZW50OwpAQCAtNzY3LDcgKzc3MSw3IEBACiAJaWYgKCFwbmZzX2VuYWJsZWRfc2IoTkZTX1NFUlZFUihpbm8pKSkKIAkJcmV0dXJuIE5VTEw7CiAJc3Bpbl9sb2NrKCZpbm8tPmlfbG9jayk7Ci0JbG8gPSBwbmZzX2ZpbmRfYWxsb2NfbGF5b3V0KGlubyk7CisJbG8gPSBwbmZzX2ZpbmRfYWxsb2NfbGF5b3V0KGlubywgZ2ZwX2ZsYWdzKTsKIAlpZiAobG8gPT0gTlVMTCkgewogCQlkcHJpbnRrKCIlcyBFUlJPUjogY2FuJ3QgZ2V0IHBuZnNfbGF5b3V0X2hkclxuIiwgX19mdW5jX18pOwogCQlnb3RvIG91dF91bmxvY2s7CkBAIC04MDcsNyArODExLDcgQEAKIAkJc3Bpbl91bmxvY2soJmNscC0+Y2xfbG9jayk7CiAJfQogCi0JbHNlZyA9IHNlbmRfbGF5b3V0Z2V0KGxvLCBjdHgsIGlvbW9kZSk7CisJbHNlZyA9IHNlbmRfbGF5b3V0Z2V0KGxvLCBjdHgsIGlvbW9kZSwgZ2ZwX2ZsYWdzKTsKIAlpZiAoIWxzZWcgJiYgZmlyc3QpIHsKIAkJc3Bpbl9sb2NrKCZjbHAtPmNsX2xvY2spOwogCQlsaXN0X2RlbF9pbml0KCZsby0+cGxoX2xheW91dHMpOwpAQCAtODQ2LDcgKzg1MCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAkvKiBJbmplY3QgbGF5b3V0IGJsb2IgaW50byBJL08gZGV2aWNlIGRyaXZlciAqLwotCWxzZWcgPSBORlNfU0VSVkVSKGlubyktPnBuZnNfY3Vycl9sZC0+YWxsb2NfbHNlZyhsbywgcmVzKTsKKwlsc2VnID0gTkZTX1NFUlZFUihpbm8pLT5wbmZzX2N1cnJfbGQtPmFsbG9jX2xzZWcobG8sIHJlcywgbGdwLT5nZnBfZmxhZ3MpOwogCWlmICghbHNlZyB8fCBJU19FUlIobHNlZykpIHsKIAkJaWYgKCFsc2VnKQogCQkJc3RhdHVzID0gLUVOT01FTTsKQEAgLTg5OSw3ICs5MDMsOCBAQAogCQkvKiBUaGlzIGlzIGZpcnN0IGNvZWxlc2NlIGNhbGwgZm9yIGEgc2VyaWVzIG9mIG5mc19wYWdlcyAqLwogCQlwZ2lvLT5wZ19sc2VnID0gcG5mc191cGRhdGVfbGF5b3V0KHBnaW8tPnBnX2lub2RlLAogCQkJCQkJICAgcHJldi0+d2JfY29udGV4dCwKLQkJCQkJCSAgIElPTU9ERV9SRUFEKTsKKwkJCQkJCSAgIElPTU9ERV9SRUFELAorCQkJCQkJICAgR0ZQX0tFUk5FTCk7CiAJfQogCXJldHVybiBORlNfU0VSVkVSKHBnaW8tPnBnX2lub2RlKS0+cG5mc19jdXJyX2xkLT5wZ190ZXN0KHBnaW8sIHByZXYsIHJlcSk7CiB9CkBAIC05MjEsNyArOTI2LDggQEAKIAkJLyogVGhpcyBpcyBmaXJzdCBjb2VsZXNjZSBjYWxsIGZvciBhIHNlcmllcyBvZiBuZnNfcGFnZXMgKi8KIAkJcGdpby0+cGdfbHNlZyA9IHBuZnNfdXBkYXRlX2xheW91dChwZ2lvLT5wZ19pbm9kZSwKIAkJCQkJCSAgIHByZXYtPndiX2NvbnRleHQsCi0JCQkJCQkgICBJT01PREVfUlcpOworCQkJCQkJICAgSU9NT0RFX1JXLAorCQkJCQkJICAgR0ZQX05PRlMpOwogCX0KIAlyZXR1cm4gTkZTX1NFUlZFUihwZ2lvLT5wZ19pbm9kZSktPnBuZnNfY3Vycl9sZC0+cGdfdGVzdChwZ2lvLCBwcmV2LCByZXEpOwogfQpAQCAtMTAwNCw2ICsxMDEwLDcgQEAKIHsKIAlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0kod2RhdGEtPmlub2RlKTsKIAlsb2ZmX3QgZW5kX3BvcyA9IHdkYXRhLT5hcmdzLm9mZnNldCArIHdkYXRhLT5yZXMuY291bnQ7CisJYm9vbCBtYXJrX2FzX2RpcnR5ID0gZmFsc2U7CiAKIAlzcGluX2xvY2soJm5mc2ktPnZmc19pbm9kZS5pX2xvY2spOwogCWlmICghdGVzdF9hbmRfc2V0X2JpdChORlNfSU5PX0xBWU9VVENPTU1JVCwgJm5mc2ktPmZsYWdzKSkgewpAQCAtMTAxMSwxMyArMTAxOCwxOCBAQAogCQlnZXRfbHNlZyh3ZGF0YS0+bHNlZyk7CiAJCXdkYXRhLT5sc2VnLT5wbHNfbGNfY3JlZCA9CiAJCQlnZXRfcnBjY3JlZCh3ZGF0YS0+YXJncy5jb250ZXh0LT5zdGF0ZS0+b3duZXItPnNvX2NyZWQpOwotCQltYXJrX2lub2RlX2RpcnR5X3N5bmMod2RhdGEtPmlub2RlKTsKKwkJbWFya19hc19kaXJ0eSA9IHRydWU7CiAJCWRwcmludGsoIiVzOiBTZXQgbGF5b3V0Y29tbWl0IGZvciBpbm9kZSAlbHUgIiwKIAkJCV9fZnVuY19fLCB3ZGF0YS0+aW5vZGUtPmlfaW5vKTsKIAl9CiAJaWYgKGVuZF9wb3MgPiB3ZGF0YS0+bHNlZy0+cGxzX2VuZF9wb3MpCiAJCXdkYXRhLT5sc2VnLT5wbHNfZW5kX3BvcyA9IGVuZF9wb3M7CiAJc3Bpbl91bmxvY2soJm5mc2ktPnZmc19pbm9kZS5pX2xvY2spOworCisJLyogaWYgcG5mc19sYXlvdXRjb21taXRfaW5vZGUoKSBydW5zIGJldHdlZW4gaW5vZGUgbG9ja3MsIHRoZSBuZXh0IG9uZQorCSAqIHdpbGwgYmUgYSBub29wIGJlY2F1c2UgTkZTX0lOT19MQVlPVVRDT01NSVQgd2lsbCBub3QgYmUgc2V0ICovCisJaWYgKG1hcmtfYXNfZGlydHkpCisJCW1hcmtfaW5vZGVfZGlydHlfc3luYyh3ZGF0YS0+aW5vZGUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocG5mc19zZXRfbGF5b3V0Y29tbWl0KTsKIApkaWZmIC0tZ2l0IGEvZnMvbmZzL3BuZnMuaCBiL2ZzL25mcy9wbmZzLmgKaW5kZXggYmM0ODI3Mi4uMGMwMTViYSAxMDA2NDQKLS0tIGEvZnMvbmZzL3BuZnMuaAorKysgYi9mcy9uZnMvcG5mcy5oCkBAIC03MCw3ICs3MCw3IEBACiAJY29uc3QgdTMyIGlkOwogCWNvbnN0IGNoYXIgKm5hbWU7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7Ci0Jc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKiAoKmFsbG9jX2xzZWcpIChzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsYXlvdXRpZCwgc3RydWN0IG5mczRfbGF5b3V0Z2V0X3JlcyAqbGdyKTsKKwlzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqICgqYWxsb2NfbHNlZykgKHN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxheW91dGlkLCBzdHJ1Y3QgbmZzNF9sYXlvdXRnZXRfcmVzICpsZ3IsIGdmcF90IGdmcF9mbGFncyk7CiAJdm9pZCAoKmZyZWVfbHNlZykgKHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnKTsKIAogCS8qIHRlc3QgZm9yIG5mcyBwYWdlIGNhY2hlIGNvYWxlc2NpbmcgKi8KQEAgLTEyNiw3ICsxMjYsNyBAQAogdm9pZCBwdXRfbHNlZyhzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZyk7CiBzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqCiBwbmZzX3VwZGF0ZV9sYXlvdXQoc3RydWN0IGlub2RlICppbm8sIHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsCi0JCSAgIGVudW0gcG5mc19pb21vZGUgYWNjZXNzX3R5cGUpOworCQkgICBlbnVtIHBuZnNfaW9tb2RlIGFjY2Vzc190eXBlLCBnZnBfdCBnZnBfZmxhZ3MpOwogdm9pZCBzZXRfcG5mc19sYXlvdXRkcml2ZXIoc3RydWN0IG5mc19zZXJ2ZXIgKiwgdTMyIGlkKTsKIHZvaWQgdW5zZXRfcG5mc19sYXlvdXRkcml2ZXIoc3RydWN0IG5mc19zZXJ2ZXIgKik7CiBlbnVtIHBuZnNfdHJ5X3N0YXR1cyBwbmZzX3RyeV90b193cml0ZV9kYXRhKHN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqLApAQCAtMjQ1LDcgKzI0NSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKgogcG5mc191cGRhdGVfbGF5b3V0KHN0cnVjdCBpbm9kZSAqaW5vLCBzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LAotCQkgICBlbnVtIHBuZnNfaW9tb2RlIGFjY2Vzc190eXBlKQorCQkgICBlbnVtIHBuZnNfaW9tb2RlIGFjY2Vzc190eXBlLCBnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnMvcmVhZC5jIGIvZnMvbmZzL3JlYWQuYwppbmRleCA3Y2RlZDJiLi4yYmNmMGRjIDEwMDY0NAotLS0gYS9mcy9uZnMvcmVhZC5jCisrKyBiL2ZzL25mcy9yZWFkLmMKQEAgLTI4OCw3ICsyODgsNyBAQAogCWF0b21pY19zZXQoJnJlcS0+d2JfY29tcGxldGUsIHJlcXVlc3RzKTsKIAogCUJVR19PTihkZXNjLT5wZ19sc2VnICE9IE5VTEwpOwotCWxzZWcgPSBwbmZzX3VwZGF0ZV9sYXlvdXQoZGVzYy0+cGdfaW5vZGUsIHJlcS0+d2JfY29udGV4dCwgSU9NT0RFX1JFQUQpOworCWxzZWcgPSBwbmZzX3VwZGF0ZV9sYXlvdXQoZGVzYy0+cGdfaW5vZGUsIHJlcS0+d2JfY29udGV4dCwgSU9NT0RFX1JFQUQsIEdGUF9LRVJORUwpOwogCUNsZWFyUGFnZUVycm9yKHBhZ2UpOwogCW9mZnNldCA9IDA7CiAJbmJ5dGVzID0gZGVzYy0+cGdfY291bnQ7CkBAIC0zNTEsNyArMzUxLDcgQEAKIAl9CiAJcmVxID0gbmZzX2xpc3RfZW50cnkoZGF0YS0+cGFnZXMubmV4dCk7CiAJaWYgKCghbHNlZykgJiYgbGlzdF9pc19zaW5ndWxhcigmZGF0YS0+cGFnZXMpKQotCQlsc2VnID0gcG5mc191cGRhdGVfbGF5b3V0KGRlc2MtPnBnX2lub2RlLCByZXEtPndiX2NvbnRleHQsIElPTU9ERV9SRUFEKTsKKwkJbHNlZyA9IHBuZnNfdXBkYXRlX2xheW91dChkZXNjLT5wZ19pbm9kZSwgcmVxLT53Yl9jb250ZXh0LCBJT01PREVfUkVBRCwgR0ZQX0tFUk5FTCk7CiAKIAlyZXQgPSBuZnNfcmVhZF9ycGNzZXR1cChyZXEsIGRhdGEsICZuZnNfcmVhZF9mdWxsX29wcywgZGVzYy0+cGdfY291bnQsCiAJCQkJMCwgbHNlZyk7CmRpZmYgLS1naXQgYS9mcy9uZnMvc3VwZXIuYyBiL2ZzL25mcy9zdXBlci5jCmluZGV4IDJiOGU5YTUuLmUyODhmMDYgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9zdXBlci5jCisrKyBiL2ZzL25mcy9zdXBlci5jCkBAIC0xMDA0LDYgKzEwMDQsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwltbnQtPmZsYWdzIHw9IE5GU19NT1VOVF9TRUNGTEFWT1VSOwogCW1udC0+YXV0aF9mbGF2b3JfbGVuID0gMTsKIAlyZXR1cm4gMTsKIH0KQEAgLTE5NzYsNiArMTk3NywxNSBAQAogCWlmIChlcnJvciA8IDApCiAJCWdvdG8gb3V0OwogCisJLyoKKwkgKiBub2FjIGlzIGEgc3BlY2lhbCBjYXNlLiBJdCBpbXBsaWVzIC1vIHN5bmMsIGJ1dCB0aGF0J3Mgbm90CisJICogbmVjZXNzYXJpbHkgcmVmbGVjdGVkIGluIHRoZSBtdGFiIG9wdGlvbnMuIGRvX3JlbW91bnRfc2IKKwkgKiB3aWxsIGNsZWFyIE1TX1NZTkNIUk9OT1VTIGlmIC1vIHN5bmMgd2Fzbid0IHNwZWNpZmllZCBpbiB0aGUKKwkgKiByZW1vdW50IG9wdGlvbnMsIHNvIHdlIGhhdmUgdG8gZXhwbGljaXRseSByZXNldCBpdC4KKwkgKi8KKwlpZiAoZGF0YS0+ZmxhZ3MgJiBORlNfTU9VTlRfTk9BQykKKwkJKmZsYWdzIHw9IE1TX1NZTkNIUk9OT1VTOworCiAJLyogY29tcGFyZSBuZXcgbW91bnQgb3B0aW9ucyB3aXRoIG9sZCBvbmVzICovCiAJZXJyb3IgPSBuZnNfY29tcGFyZV9yZW1vdW50X2RhdGEobmZzcywgZGF0YSk7CiBvdXQ6CkBAIC0yMjM1LDggKzIyNDUsNyBAQAogCWlmICghcy0+c19yb290KSB7CiAJCS8qIGluaXRpYWwgc3VwZXJibG9jay9yb290IGNyZWF0aW9uICovCiAJCW5mc19maWxsX3N1cGVyKHMsIGRhdGEpOwotCQluZnNfZnNjYWNoZV9nZXRfc3VwZXJfY29va2llKAotCQkJcywgZGF0YSA/IGRhdGEtPmZzY2FjaGVfdW5pcSA6IE5VTEwsIE5VTEwpOworCQluZnNfZnNjYWNoZV9nZXRfc3VwZXJfY29va2llKHMsIGRhdGEtPmZzY2FjaGVfdW5pcSwgTlVMTCk7CiAJfQogCiAJbW50cm9vdCA9IG5mc19nZXRfcm9vdChzLCBtbnRmaCwgZGV2X25hbWUpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3dyaXRlLmMgYi9mcy9uZnMvd3JpdGUuYwppbmRleCBhZjBjNjI3Li40OWM3MTViIDEwMDY0NAotLS0gYS9mcy9uZnMvd3JpdGUuYworKysgYi9mcy9uZnMvd3JpdGUuYwpAQCAtNTQyLDExICs1NDIsMTUgQEAKIAlpZiAoIW5mc19uZWVkX2NvbW1pdChuZnNpKSkKIAkJcmV0dXJuIDA7CiAKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwogCXJldCA9IG5mc19zY2FuX2xpc3QobmZzaSwgZHN0LCBpZHhfc3RhcnQsIG5wYWdlcywgTkZTX1BBR0VfVEFHX0NPTU1JVCk7CiAJaWYgKHJldCA+IDApCiAJCW5mc2ktPm5jb21taXQgLT0gcmV0OworCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwogCWlmIChuZnNfbmVlZF9jb21taXQoTkZTX0koaW5vZGUpKSkKIAkJX19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBJX0RJUlRZX0RBVEFTWU5DKTsKKwogCXJldHVybiByZXQ7CiB9CiAjZWxzZQpAQCAtNjc2LDcgKzY4MCw2IEBACiAJcmVxID0gbmZzX3NldHVwX3dyaXRlX3JlcXVlc3QoY3R4LCBwYWdlLCBvZmZzZXQsIGNvdW50KTsKIAlpZiAoSVNfRVJSKHJlcSkpCiAJCXJldHVybiBQVFJfRVJSKHJlcSk7Ci0JbmZzX21hcmtfcmVxdWVzdF9kaXJ0eShyZXEpOwogCS8qIFVwZGF0ZSBmaWxlIGxlbmd0aCAqLwogCW5mc19ncm93X2ZpbGUocGFnZSwgb2Zmc2V0LCBjb3VudCk7CiAJbmZzX21hcmtfdXB0b2RhdGUocGFnZSwgcmVxLT53Yl9wZ2Jhc2UsIHJlcS0+d2JfYnl0ZXMpOwpAQCAtOTM2LDcgKzkzOSw3IEBACiAJYXRvbWljX3NldCgmcmVxLT53Yl9jb21wbGV0ZSwgcmVxdWVzdHMpOwogCiAJQlVHX09OKGRlc2MtPnBnX2xzZWcpOwotCWxzZWcgPSBwbmZzX3VwZGF0ZV9sYXlvdXQoZGVzYy0+cGdfaW5vZGUsIHJlcS0+d2JfY29udGV4dCwgSU9NT0RFX1JXKTsKKwlsc2VnID0gcG5mc191cGRhdGVfbGF5b3V0KGRlc2MtPnBnX2lub2RlLCByZXEtPndiX2NvbnRleHQsIElPTU9ERV9SVywgR0ZQX05PRlMpOwogCUNsZWFyUGFnZUVycm9yKHBhZ2UpOwogCW9mZnNldCA9IDA7CiAJbmJ5dGVzID0gZGVzYy0+cGdfY291bnQ7CkBAIC0xMDEwLDcgKzEwMTMsNyBAQAogCX0KIAlyZXEgPSBuZnNfbGlzdF9lbnRyeShkYXRhLT5wYWdlcy5uZXh0KTsKIAlpZiAoKCFsc2VnKSAmJiBsaXN0X2lzX3Npbmd1bGFyKCZkYXRhLT5wYWdlcykpCi0JCWxzZWcgPSBwbmZzX3VwZGF0ZV9sYXlvdXQoZGVzYy0+cGdfaW5vZGUsIHJlcS0+d2JfY29udGV4dCwgSU9NT0RFX1JXKTsKKwkJbHNlZyA9IHBuZnNfdXBkYXRlX2xheW91dChkZXNjLT5wZ19pbm9kZSwgcmVxLT53Yl9jb250ZXh0LCBJT01PREVfUlcsIEdGUF9OT0ZTKTsKIAogCWlmICgoZGVzYy0+cGdfaW9mbGFncyAmIEZMVVNIX0NPTkRfU1RBQkxFKSAmJgogCSAgICAoZGVzYy0+cGdfbW9yZWlvIHx8IE5GU19JKGRlc2MtPnBnX2lub2RlKS0+bmNvbW1pdCkpCkBAIC0xNDE0LDggKzE0MTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLT50a19waWQsIHRhc2stPnRrX3N0YXR1cyk7CiAKIAkvKiBDYWxsIHRoZSBORlMgdmVyc2lvbi1zcGVjaWZpYyBjb2RlICovCi0JaWYgKE5GU19QUk9UTyhkYXRhLT5pbm9kZSktPmNvbW1pdF9kb25lKHRhc2ssIGRhdGEpICE9IDApCi0JCXJldHVybjsKKwlORlNfUFJPVE8oZGF0YS0+aW5vZGUpLT5jb21taXRfZG9uZSh0YXNrLCBkYXRhKTsKIH0KIAogdm9pZCBuZnNfY29tbWl0X3JlbGVhc2VfcGFnZXMoc3RydWN0IG5mc193cml0ZV9kYXRhICpkYXRhKQpAQCAtMTQ4Myw5ICsxNDg1LDcgQEAKIAlyZXMgPSBuZnNfY29tbWl0X3NldF9sb2NrKE5GU19JKGlub2RlKSwgbWF5X3dhaXQpOwogCWlmIChyZXMgPD0gMCkKIAkJZ290byBvdXRfbWFya19kaXJ0eTsKLQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwogCXJlcyA9IG5mc19zY2FuX2NvbW1pdChpbm9kZSwgJmhlYWQsIDAsIDApOwotCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAlpZiAocmVzKSB7CiAJCWludCBlcnJvcjsKIApkaWZmIC0tZ2l0IGEvZnMvbmZzX2NvbW1vbi9uZnNhY2wuYyBiL2ZzL25mc19jb21tb24vbmZzYWNsLmMKaW5kZXggZWMwZjI3Ny4uNjk0MDQzOSAxMDA2NDQKLS0tIGEvZnMvbmZzX2NvbW1vbi9uZnNhY2wuYworKysgYi9mcy9uZnNfY29tbW9uL25mc2FjbC5jCkBAIC0xNzMsNyArMTczLDcgQEAKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQljYXNlIEFDTF9NQVNLOgotCQkJLyogU29sYXJpcyBzb21ldGltZXMgc2V0cyBhZGRpdG9uYWwgYml0cyBpbiB0aGUgbWFzayAqLworCQkJLyogU29sYXJpcyBzb21ldGltZXMgc2V0cyBhZGRpdGlvbmFsIGJpdHMgaW4gdGhlIG1hc2sgKi8KIAkJCWVudHJ5LT5lX3Blcm0gJj0gU19JUldYTzsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9sb2NrZC5jIGIvZnMvbmZzZC9sb2NrZC5jCmluZGV4IDBjNmQ4MTYuLjdjODMxYTIgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbG9ja2QuYworKysgYi9mcy9uZnNkL2xvY2tkLmMKQEAgLTM4LDcgKzM4LDYgQEAKIAlleHBfcmVhZGxvY2soKTsKIAluZnNlcnIgPSBuZnNkX29wZW4ocnFzdHAsICZmaCwgU19JRlJFRywgTkZTRF9NQVlfTE9DSywgZmlscCk7CiAJZmhfcHV0KCZmaCk7Ci0JcnFzdHAtPnJxX2NsaWVudCA9IE5VTEw7CiAJZXhwX3JlYWR1bmxvY2soKTsKICAJLyogV2UgcmV0dXJuIG5sbSBlcnJvciBjb2RlcyBhcyBubG0gZG9lc24ndCBrbm93CiAJICogYWJvdXQgbmZzZCwgYnV0IG5mc2QgZG9lcyBrbm93IGFib3V0IG5sbS4uCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczN4ZHIuYyBiL2ZzL25mc2QvbmZzM3hkci5jCmluZGV4IDdlODRhODUuLmFkNDhmYWMgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzM3hkci5jCisrKyBiL2ZzL25mc2QvbmZzM3hkci5jCkBAIC03MDIsNyArNzAyLDcgQEAKIAkJKnArKyA9IGh0b25sKHJlc3AtPmVvZik7CiAJCSpwKysgPSBodG9ubChyZXNwLT5jb3VudCk7CS8qIHhkciBvcGFxdWUgY291bnQgKi8KIAkJeGRyX3Jlc3NpemVfY2hlY2socnFzdHAsIHApOwotCQkvKiBub3cgdXBkYXRlIHJxc3RwLT5ycV9yZXMgdG8gcmVmbGVjdCBkYXRhIGFzd2VsbCAqLworCQkvKiBub3cgdXBkYXRlIHJxc3RwLT5ycV9yZXMgdG8gcmVmbGVjdCBkYXRhIGFzIHdlbGwgKi8KIAkJcnFzdHAtPnJxX3Jlcy5wYWdlX2xlbiA9IHJlc3AtPmNvdW50OwogCQlpZiAocmVzcC0+Y291bnQgJiAzKSB7CiAJCQkvKiBuZWVkIHRvIHBhZCB0aGUgdGFpbCAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0c3RhdGUuYyBiL2ZzL25mc2QvbmZzNHN0YXRlLmMKaW5kZXggZmJkZTZmNy4uNGNmMDRlMSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0c3RhdGUuYworKysgYi9mcy9uZnNkL25mczRzdGF0ZS5jCkBAIC0yNTgsNiArMjU4LDcgQEAKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZnAtPmZpX2RlbGVnZWVzKSkgewogCQl2ZnNfc2V0bGVhc2UoZnAtPmZpX2RlbGVnX2ZpbGUsIEZfVU5MQ0ssICZmcC0+ZmlfbGVhc2UpOwogCQlmcC0+ZmlfbGVhc2UgPSBOVUxMOworCQlmcHV0KGZwLT5maV9kZWxlZ19maWxlKTsKIAkJZnAtPmZpX2RlbGVnX2ZpbGUgPSBOVUxMOwogCX0KIH0KQEAgLTM5Nyw5ICszOTgsMTIgQEAKIAogc3RhdGljIHZvaWQgZnJlZV9nZW5lcmljX3N0YXRlaWQoc3RydWN0IG5mczRfc3RhdGVpZCAqc3RwKQogewotCWludCBvZmxhZyA9IG5mczRfYWNjZXNzX2JtYXBfdG9fb21vZGUoc3RwKTsKKwlpbnQgb2ZsYWc7CiAKLQluZnM0X2ZpbGVfcHV0X2FjY2VzcyhzdHAtPnN0X2ZpbGUsIG9mbGFnKTsKKwlpZiAoc3RwLT5zdF9hY2Nlc3NfYm1hcCkgeworCQlvZmxhZyA9IG5mczRfYWNjZXNzX2JtYXBfdG9fb21vZGUoc3RwKTsKKwkJbmZzNF9maWxlX3B1dF9hY2Nlc3Moc3RwLT5zdF9maWxlLCBvZmxhZyk7CisJfQogCXB1dF9uZnM0X2ZpbGUoc3RwLT5zdF9maWxlKTsKIAlrbWVtX2NhY2hlX2ZyZWUoc3RhdGVpZF9zbGFiLCBzdHApOwogfQpAQCAtMzA1NSw3ICszMDU5LDcgQEAKIAlpZiAoT05FX1NUQVRFSUQoc3RhdGVpZCkgJiYgKGZsYWdzICYgUkRfU1RBVEUpKQogCQlyZXR1cm4gbmZzX29rOwogCWVsc2UgaWYgKGxvY2tzX2luX2dyYWNlKCkpIHsKLQkJLyogQW5zd2VyIGluIHJlbWFpbmluZyBjYXNlcyBkZXBlbmRzIG9uIGV4aXN0YW5jZSBvZgorCQkvKiBBbnN3ZXIgaW4gcmVtYWluaW5nIGNhc2VzIGRlcGVuZHMgb24gZXhpc3RlbmNlIG9mCiAJCSAqIGNvbmZsaWN0aW5nIHN0YXRlOyBzbyB3ZSBtdXN0IHdhaXQgb3V0IHRoZSBncmFjZSBwZXJpb2QuICovCiAJCXJldHVybiBuZnNlcnJfZ3JhY2U7CiAJfSBlbHNlIGlmIChmbGFncyAmIFdSX1NUQVRFKQpAQCAtMzY3NSw3ICszNjc5LDcgQEAKIC8qCiAgKiBBbGxvYyBhIGxvY2sgb3duZXIgc3RydWN0dXJlLgogICogQ2FsbGVkIGluIG5mc2Q0X2xvY2sgLSB0aGVyZWZvcmUsIE9QRU4gYW5kIE9QRU5fQ09ORklSTSAoaWYgbmVlZGVkKSBoYXMgCi0gKiBvY2N1cmVkLiAKKyAqIG9jY3VycmVkLiAKICAqCiAgKiBzdHJoYXNodmFsID0gbG9ja19vd25lcnN0cl9oYXNodmFsIAogICovCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc3hkci5jIGIvZnMvbmZzZC9uZnN4ZHIuYwppbmRleCA0Y2UwMDVkLi42NWVjNTk1IDEwMDY0NAotLS0gYS9mcy9uZnNkL25mc3hkci5jCisrKyBiL2ZzL25mc2QvbmZzeGRyLmMKQEAgLTQ1MSw3ICs0NTEsNyBAQAogCSpwKysgPSBodG9ubChyZXNwLT5jb3VudCk7CiAJeGRyX3Jlc3NpemVfY2hlY2socnFzdHAsIHApOwogCi0JLyogbm93IHVwZGF0ZSBycXN0cC0+cnFfcmVzIHRvIHJlZmxlY3QgZGF0YSBhc3dlbGwgKi8KKwkvKiBub3cgdXBkYXRlIHJxc3RwLT5ycV9yZXMgdG8gcmVmbGVjdCBkYXRhIGFzIHdlbGwgKi8KIAlycXN0cC0+cnFfcmVzLnBhZ2VfbGVuID0gcmVzcC0+Y291bnQ7CiAJaWYgKHJlc3AtPmNvdW50ICYgMykgewogCQkvKiBuZWVkIHRvIHBhZCB0aGUgdGFpbCAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC92ZnMuYyBiL2ZzL25mc2QvdmZzLmMKaW5kZXggMmUxY2ViZC4uMTI5ZjNjOSAxMDA2NDQKLS0tIGEvZnMvbmZzZC92ZnMuYworKysgYi9mcy9uZnNkL3Zmcy5jCkBAIC0xMzYzLDcgKzEzNjMsNyBAQAogCQlnb3RvIG91dDsKIAlpZiAoIShpYXAtPmlhX3ZhbGlkICYgQVRUUl9NT0RFKSkKIAkJaWFwLT5pYV9tb2RlID0gMDsKLQllcnIgPSBmaF92ZXJpZnkocnFzdHAsIGZocCwgU19JRkRJUiwgTkZTRF9NQVlfQ1JFQVRFKTsKKwllcnIgPSBmaF92ZXJpZnkocnFzdHAsIGZocCwgU19JRkRJUiwgTkZTRF9NQVlfRVhFQyk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKQEAgLTEzODUsNiArMTM4NSwxMyBAQAogCWlmIChJU19FUlIoZGNoaWxkKSkKIAkJZ290byBvdXRfbmZzZXJyOwogCisJLyogSWYgZmlsZSBkb2Vzbid0IGV4aXN0LCBjaGVjayBmb3IgcGVybWlzc2lvbnMgdG8gY3JlYXRlIG9uZSAqLworCWlmICghZGNoaWxkLT5kX2lub2RlKSB7CisJCWVyciA9IGZoX3ZlcmlmeShycXN0cCwgZmhwLCBTX0lGRElSLCBORlNEX01BWV9DUkVBVEUpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisJfQorCiAJZXJyID0gZmhfY29tcG9zZShyZXNmaHAsIGZocC0+ZmhfZXhwb3J0LCBkY2hpbGQsIGZocCk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvYWxsb2MuYyBiL2ZzL25pbGZzMi9hbGxvYy5jCmluZGV4IDBhMGE2NmQuLmY3Njg0NDggMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9hbGxvYy5jCisrKyBiL2ZzL25pbGZzMi9hbGxvYy5jCkBAIC02NDYsNyArNjQ2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGdyb3VwLCBncm91cF9vZmZzZXQ7CiAJaW50IGksIGosIG4sIHJldDsKIAotCWZvciAoaSA9IDA7IGkgPCBuaXRlbXM7IGkgKz0gbikgeworCWZvciAoaSA9IDA7IGkgPCBuaXRlbXM7IGkgPSBqKSB7CiAJCWdyb3VwID0gbmlsZnNfcGFsbG9jX2dyb3VwKGlub2RlLCBlbnRyeV9ucnNbaV0sICZncm91cF9vZmZzZXQpOwogCQlyZXQgPSBuaWxmc19wYWxsb2NfZ2V0X2Rlc2NfYmxvY2soaW5vZGUsIGdyb3VwLCAwLCAmZGVzY19iaCk7CiAJCWlmIChyZXQgPCAwKQpkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYyBiL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMKaW5kZXggNmIxMzA1ZC4uOWZkZTFjMCAxMDA2NDQKLS0tIGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYworKysgYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jCkBAIC0xNjQsNyArMTY0LDcgQEAKIAkJIGZkLCByZXNwb25zZSk7CiAJLyoKIAkgKiBtYWtlIHN1cmUgdGhlIHJlc3BvbnNlIGlzIHZhbGlkLCBpZiBpbnZhbGlkIHdlIGRvIG5vdGhpbmcgYW5kIGVpdGhlcgotCSAqIHVzZXJzcGFjZSBjYW4gc2VuZCBhIHZhbGlkIHJlc3BvbmNlIG9yIHdlIHdpbGwgY2xlYW4gaXQgdXAgYWZ0ZXIgdGhlCisJICogdXNlcnNwYWNlIGNhbiBzZW5kIGEgdmFsaWQgcmVzcG9uc2Ugb3Igd2Ugd2lsbCBjbGVhbiBpdCB1cCBhZnRlciB0aGUKIAkgKiB0aW1lb3V0CiAJICovCiAJc3dpdGNoIChyZXNwb25zZSkgewpkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV9mc25vdGlmeS5jIGIvZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV9mc25vdGlmeS5jCmluZGV4IDAzNDhkMGMuLmUzY2JkNzQgMTAwNjQ0Ci0tLSBhL2ZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfZnNub3RpZnkuYworKysgYi9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X2Zzbm90aWZ5LmMKQEAgLTE5NCw3ICsxOTQsNyBAQAogCiBzdGF0aWMgdm9pZCBpbm90aWZ5X2ZyZWVfZ3JvdXBfcHJpdihzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwKQogewotCS8qIGlkZWFsbHkgdGhlIGlkciBpcyBlbXB0eSBhbmQgd2Ugd29uJ3QgaGl0IHRoZSBCVUcgaW4gdGVoIGNhbGxiYWNrICovCisJLyogaWRlYWxseSB0aGUgaWRyIGlzIGVtcHR5IGFuZCB3ZSB3b24ndCBoaXQgdGhlIEJVRyBpbiB0aGUgY2FsbGJhY2sgKi8KIAlpZHJfZm9yX2VhY2goJmdyb3VwLT5pbm90aWZ5X2RhdGEuaWRyLCBpZHJfY2FsbGJhY2ssIGdyb3VwKTsKIAlpZHJfcmVtb3ZlX2FsbCgmZ3JvdXAtPmlub3RpZnlfZGF0YS5pZHIpOwogCWlkcl9kZXN0cm95KCZncm91cC0+aW5vdGlmeV9kYXRhLmlkcik7CmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvbWFyay5jIGIvZnMvbm90aWZ5L21hcmsuYwppbmRleCA1MGMwMDg1Li4yNTJhYjFmIDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvbWFyay5jCisrKyBiL2ZzL25vdGlmeS9tYXJrLmMKQEAgLTI0LDcgKzI0LDcgQEAKICAqIHJlZmVyZW5jaW5nIHRoaXMgb2JqZWN0LiAgVGhlIG9iamVjdCB0eXBpY2FsbHkgd2lsbCBsaXZlIGluc2lkZSB0aGUga2VybmVsCiAgKiB3aXRoIGEgcmVmY250IG9mIDIsIG9uZSBmb3IgZWFjaCBsaXN0IGl0IGlzIG9uIChpX2xpc3QsIGdfbGlzdCkuICBBbnkgdGFzawogICogd2hpY2ggY2FuIGZpbmQgdGhpcyBvYmplY3QgaG9sZGluZyB0aGUgYXBwcm9wcmlldGUgbG9ja3MsIGNhbiB0YWtlIGEgcmVmZXJlbmNlCi0gKiBhbmQgdGhlIG9iamVjdCBpdHNlbGYgaXMgZ3VhcmVudGVlZCB0byBzdXJ2aXZlIHVudGlsIHRoZSByZWZlcmVuY2UgaXMgZHJvcHBlZC4KKyAqIGFuZCB0aGUgb2JqZWN0IGl0c2VsZiBpcyBndWFyYW50ZWVkIHRvIHN1cnZpdmUgdW50aWwgdGhlIHJlZmVyZW5jZSBpcyBkcm9wcGVkLgogICoKICAqIExPQ0tJTkc6CiAgKiBUaGVyZSBhcmUgMyBzcGlubG9ja3MgaW52b2x2ZWQgd2l0aCBmc25vdGlmeSBpbm9kZSBtYXJrcyBhbmQgdGhleSBNVVNUCmRpZmYgLS1naXQgYS9mcy9udGZzL2F0dHJpYi5jIGIvZnMvbnRmcy9hdHRyaWIuYwppbmRleCBmNTA5NGVlLi5mMTRmZGUyIDEwMDY0NAotLS0gYS9mcy9udGZzL2F0dHJpYi5jCisrKyBiL2ZzL250ZnMvYXR0cmliLmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCX0gZWxzZSBpZiAoY3R4X25lZWRzX3Jlc2V0KSB7CiAJCS8qCiAJCSAqIElmIHRoZXJlIGlzIG5vIGF0dHJpYnV0ZSBsaXN0LCByZXN0b3JpbmcgdGhlIHNlYXJjaCBjb250ZXh0Ci0JCSAqIGlzIGFjb21wbGlzaGVkIHNpbXBseSBieSBjb3B5aW5nIHRoZSBzYXZlZCBjb250ZXh0IGJhY2sgb3ZlcgorCQkgKiBpcyBhY2NvbXBsaXNoZWQgc2ltcGx5IGJ5IGNvcHlpbmcgdGhlIHNhdmVkIGNvbnRleHQgYmFjayBvdmVyCiAJCSAqIHRoZSBjYWxsZXIgc3VwcGxpZWQgY29udGV4dC4gIElmIHRoZXJlIGlzIGFuIGF0dHJpYnV0ZSBsaXN0LAogCQkgKiB0aGluZ3MgYXJlIG1vcmUgY29tcGxpY2F0ZWQgYXMgd2UgbmVlZCB0byBkZWFsIHdpdGggbWFwcGluZwogCQkgKiBvZiBtZnQgcmVjb3JkcyBhbmQgcmVzdWx0aW5nIHBvdGVudGlhbCBjaGFuZ2VzIGluIHBvaW50ZXJzLgpAQCAtMTE4MSw3ICsxMTgxLDcgQEAKICAqIGZvciwgaS5lLiBpZiBvbmUgd2FudHMgdG8gYWRkIHRoZSBhdHRyaWJ1dGUgdG8gdGhlIG1mdCByZWNvcmQgdGhpcyBpcyB0aGUKICAqIGNvcnJlY3QgcGxhY2UgdG8gaW5zZXJ0IGl0cyBhdHRyaWJ1dGUgbGlzdCBlbnRyeSBpbnRvLgogICoKLSAqIFdoZW4gLWVycm5vICE9IC1FTk9FTlQsIGFuIGVycm9yIG9jY3VyZWQgZHVyaW5nIHRoZSBsb29rdXAuICBAY3R4LT5hdHRyIGlzCisgKiBXaGVuIC1lcnJubyAhPSAtRU5PRU5ULCBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdGhlIGxvb2t1cC4gIEBjdHgtPmF0dHIgaXMKICAqIHRoZW4gdW5kZWZpbmVkIGFuZCBpbiBwYXJ0aWN1bGFyIHlvdSBzaG91bGQgbm90IHJlbHkgb24gaXQgbm90IGNoYW5naW5nLgogICovCiBpbnQgbnRmc19hdHRyX2xvb2t1cChjb25zdCBBVFRSX1RZUEUgdHlwZSwgY29uc3QgbnRmc2NoYXIgKm5hbWUsCmRpZmYgLS1naXQgYS9mcy9udGZzL2NvbXByZXNzLmMgYi9mcy9udGZzL2NvbXByZXNzLmMKaW5kZXggZWY5ZWQ4NS4uZWU0MTQ0YyAxMDA2NDQKLS0tIGEvZnMvbnRmcy9jb21wcmVzcy5jCisrKyBiL2ZzL250ZnMvY29tcHJlc3MuYwpAQCAtNTAxLDcgKzUwMSw3IEBACiAJVkNOIHN0YXJ0X3ZjbiA9ICgoKHM2NClpbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZUKSAmIH5jYl9zaXplX21hc2spID4+CiAJCQl2b2wtPmNsdXN0ZXJfc2l6ZV9iaXRzOwogCS8qCi0JICogVGhlIGZpcnN0IHZjbiBhZnRlciB0aGUgbGFzdCB3YW50ZWQgdmNuIChtaW51bXVtIGFsaWdubWVudCBpcyBhZ2FpbgorCSAqIFRoZSBmaXJzdCB2Y24gYWZ0ZXIgdGhlIGxhc3Qgd2FudGVkIHZjbiAobWluaW11bSBhbGlnbm1lbnQgaXMgYWdhaW4KIAkgKiBQQUdFX0NBQ0hFX1NJWkUuCiAJICovCiAJVkNOIGVuZF92Y24gPSAoKCgoczY0KShpbmRleCArIDFVTCkgPDwgUEFHRV9DQUNIRV9TSElGVCkgKyBjYl9zaXplIC0gMSkKZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW5vZGUuYyBiL2ZzL250ZnMvaW5vZGUuYwppbmRleCAwYjU2YzZiLi5jMDVkNmRjIDEwMDY0NAotLS0gYS9mcy9udGZzL2lub2RlLmMKKysrIGIvZnMvbnRmcy9pbm9kZS5jCkBAIC02MjIsNyArNjIyLDcgQEAKIAkgKi8KIAkvKiBFdmVyeW9uZSBnZXRzIGFsbCBwZXJtaXNzaW9ucy4gKi8KIAl2aS0+aV9tb2RlIHw9IFNfSVJXWFVHTzsKLQkvKiBJZiByZWFkLW9ubHksIG5vb25lIGdldHMgd3JpdGUgcGVybWlzc2lvbnMuICovCisJLyogSWYgcmVhZC1vbmx5LCBubyBvbmUgZ2V0cyB3cml0ZSBwZXJtaXNzaW9ucy4gKi8KIAlpZiAoSVNfUkRPTkxZKHZpKSkKIAkJdmktPmlfbW9kZSAmPSB+U19JV1VHTzsKIAlpZiAobS0+ZmxhZ3MgJiBNRlRfUkVDT1JEX0lTX0RJUkVDVE9SWSkgewpAQCAtMjUyOSw3ICsyNTI5LDcgQEAKIAkJICogc3BlY2lmaWVzIHRoYXQgdGhlIGJlaGF2aW91ciBpcyB1bnNwZWNpZmllZCB0aHVzIHdlIGRvIG5vdAogCQkgKiBoYXZlIHRvIGRvIGFueXRoaW5nLiAgVGhpcyBtZWFucyB0aGF0IGluIG91ciBpbXBsZW1lbnRhdGlvbgogCQkgKiBpbiB0aGUgcmFyZSBjYXNlIHRoYXQgdGhlIGZpbGUgaXMgbW1hcCgpcGVkIGFuZCBhIHdyaXRlCi0JCSAqIG9jY3VyZWQgaW50byB0aGUgbW1hcCgpcGVkIHJlZ2lvbiBqdXN0IGJleW9uZCB0aGUgZmlsZSBzaXplCisJCSAqIG9jY3VycmVkIGludG8gdGhlIG1tYXAoKXBlZCByZWdpb24ganVzdCBiZXlvbmQgdGhlIGZpbGUgc2l6ZQogCQkgKiBhbmQgd3JpdGVwYWdlIGhhcyBub3QgeWV0IGJlZW4gY2FsbGVkIHRvIHdyaXRlIG91dCB0aGUgcGFnZQogCQkgKiAod2hpY2ggd291bGQgY2xlYXIgdGhlIGFyZWEgYmV5b25kIHRoZSBmaWxlIHNpemUpIGFuZCB3ZSBub3cKIAkJICogZXh0ZW5kIHRoZSBmaWxlIHNpemUgdG8gaW5jb3Jwb3JhdGUgdGhpcyBkaXJ0eSByZWdpb24KZGlmZiAtLWdpdCBhL2ZzL250ZnMvbGF5b3V0LmggYi9mcy9udGZzL2xheW91dC5oCmluZGV4IDhiMjU0OWYuLmZhZWNlNzEgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvbGF5b3V0LmgKKysrIGIvZnMvbnRmcy9sYXlvdXQuaApAQCAtMjg2LDcgKzI4Niw3IEBACiAgKiBmcmFnbWVudGVkLiBWb2x1bWUgZnJlZSBzcGFjZSBpbmNsdWRlcyB0aGUgZW1wdHkgcGFydCBvZiB0aGUgbWZ0IHpvbmUgYW5kCiAgKiB3aGVuIHRoZSB2b2x1bWUncyBmcmVlIDg4JSBhcmUgdXNlZCB1cCwgdGhlIG1mdCB6b25lIGlzIHNocnVuayBieSBhIGZhY3RvcgogICogb2YgMiwgdGh1cyBtYWtpbmcgbW9yZSBzcGFjZSBhdmFpbGFibGUgZm9yIG1vcmUgZmlsZXMvZGF0YS4gVGhpcyBwcm9jZXNzIGlzCi0gKiByZXBlYXRlZCBldmVyeXRpbWUgdGhlcmUgaXMgbm8gbW9yZSBmcmVlIHNwYWNlIGV4Y2VwdCBmb3IgdGhlIG1mdCB6b25lIHVudGlsCisgKiByZXBlYXRlZCBldmVyeSB0aW1lIHRoZXJlIGlzIG5vIG1vcmUgZnJlZSBzcGFjZSBleGNlcHQgZm9yIHRoZSBtZnQgem9uZSB1bnRpbAogICogdGhlcmUgcmVhbGx5IGlzIG5vIG1vcmUgZnJlZSBzcGFjZS4KICAqLwogCkBAIC0xNjU3LDEzICsxNjU3LDEzIEBACiAgKglwb2ludGVkIHRvIGJ5IHRoZSBPd25lciBmaWVsZCB3YXMgcHJvdmlkZWQgYnkgYSBkZWZhdWx0aW5nIG1lY2hhbmlzbQogICoJcmF0aGVyIHRoYW4gZXhwbGljaXRseSBwcm92aWRlZCBieSB0aGUgb3JpZ2luYWwgcHJvdmlkZXIgb2YgdGhlCiAgKglzZWN1cml0eSBkZXNjcmlwdG9yLiAgVGhpcyBtYXkgYWZmZWN0IHRoZSB0cmVhdG1lbnQgb2YgdGhlIFNJRCB3aXRoCi0gKglyZXNwZWN0IHRvIGluaGVyaXRlbmNlIG9mIGFuIG93bmVyLgorICoJcmVzcGVjdCB0byBpbmhlcml0YW5jZSBvZiBhbiBvd25lci4KICAqCiAgKiBTRV9HUk9VUF9ERUZBVUxURUQgLSBUaGlzIGJvb2xlYW4gZmxhZywgd2hlbiBzZXQsIGluZGljYXRlcyB0aGF0IHRoZSBTSUQgaW4KICAqCXRoZSBHcm91cCBmaWVsZCB3YXMgcHJvdmlkZWQgYnkgYSBkZWZhdWx0aW5nIG1lY2hhbmlzbSByYXRoZXIgdGhhbgogICoJZXhwbGljaXRseSBwcm92aWRlZCBieSB0aGUgb3JpZ2luYWwgcHJvdmlkZXIgb2YgdGhlIHNlY3VyaXR5CiAgKglkZXNjcmlwdG9yLiAgVGhpcyBtYXkgYWZmZWN0IHRoZSB0cmVhdG1lbnQgb2YgdGhlIFNJRCB3aXRoIHJlc3BlY3QgdG8KLSAqCWluaGVyaXRlbmNlIG9mIGEgcHJpbWFyeSBncm91cC4KKyAqCWluaGVyaXRhbmNlIG9mIGEgcHJpbWFyeSBncm91cC4KICAqCiAgKiBTRV9EQUNMX1BSRVNFTlQgLSBUaGlzIGJvb2xlYW4gZmxhZywgd2hlbiBzZXQsIGluZGljYXRlcyB0aGF0IHRoZSBzZWN1cml0eQogICoJZGVzY3JpcHRvciBjb250YWlucyBhIGRpc2NyZXRpb25hcnkgQUNMLiAgSWYgdGhpcyBmbGFnIGlzIHNldCBhbmQgdGhlCkBAIC0xNjc0LDcgKzE2NzQsNyBAQAogICoJcG9pbnRlZCB0byBieSB0aGUgRGFjbCBmaWVsZCB3YXMgcHJvdmlkZWQgYnkgYSBkZWZhdWx0aW5nIG1lY2hhbmlzbQogICoJcmF0aGVyIHRoYW4gZXhwbGljaXRseSBwcm92aWRlZCBieSB0aGUgb3JpZ2luYWwgcHJvdmlkZXIgb2YgdGhlCiAgKglzZWN1cml0eSBkZXNjcmlwdG9yLiAgVGhpcyBtYXkgYWZmZWN0IHRoZSB0cmVhdG1lbnQgb2YgdGhlIEFDTCB3aXRoCi0gKglyZXNwZWN0IHRvIGluaGVyaXRlbmNlIG9mIGFuIEFDTC4gIFRoaXMgZmxhZyBpcyBpZ25vcmVkIGlmIHRoZQorICoJcmVzcGVjdCB0byBpbmhlcml0YW5jZSBvZiBhbiBBQ0wuICBUaGlzIGZsYWcgaXMgaWdub3JlZCBpZiB0aGUKICAqCURhY2xQcmVzZW50IGZsYWcgaXMgbm90IHNldC4KICAqCiAgKiBTRV9TQUNMX1BSRVNFTlQgLSBUaGlzIGJvb2xlYW4gZmxhZywgd2hlbiBzZXQsICBpbmRpY2F0ZXMgdGhhdCB0aGUgc2VjdXJpdHkKQEAgLTE2ODYsNyArMTY4Niw3IEBACiAgKglwb2ludGVkIHRvIGJ5IHRoZSBTYWNsIGZpZWxkIHdhcyBwcm92aWRlZCBieSBhIGRlZmF1bHRpbmcgbWVjaGFuaXNtCiAgKglyYXRoZXIgdGhhbiBleHBsaWNpdGx5IHByb3ZpZGVkIGJ5IHRoZSBvcmlnaW5hbCBwcm92aWRlciBvZiB0aGUKICAqCXNlY3VyaXR5IGRlc2NyaXB0b3IuICBUaGlzIG1heSBhZmZlY3QgdGhlIHRyZWF0bWVudCBvZiB0aGUgQUNMIHdpdGgKLSAqCXJlc3BlY3QgdG8gaW5oZXJpdGVuY2Ugb2YgYW4gQUNMLiAgVGhpcyBmbGFnIGlzIGlnbm9yZWQgaWYgdGhlCisgKglyZXNwZWN0IHRvIGluaGVyaXRhbmNlIG9mIGFuIEFDTC4gIFRoaXMgZmxhZyBpcyBpZ25vcmVkIGlmIHRoZQogICoJU2FjbFByZXNlbnQgZmxhZyBpcyBub3Qgc2V0LgogICoKICAqIFNFX1NFTEZfUkVMQVRJVkUgLSBUaGlzIGJvb2xlYW4gZmxhZywgd2hlbiBzZXQsIGluZGljYXRlcyB0aGF0IHRoZSBzZWN1cml0eQpAQCAtMjI4Myw3ICsyMjgzLDcgQEAKIAkvLwkJICAgdGhlIGtleV9sZW5ndGggaXMgemVybywgdGhlbiB0aGUgdmNuIGltbWVkaWF0ZWx5CiAJLy8JCSAgIGZvbGxvd3MgdGhlIElOREVYX0VOVFJZX0hFQURFUi4gUmVnYXJkbGVzcyBvZgogCS8vCQkgICBrZXlfbGVuZ3RoLCB0aGUgYWRkcmVzcyBvZiB0aGUgOC1ieXRlIGJvdW5kYXJ5Ci0JLy8JCSAgIGFsbGlnbmVkIHZjbiBvZiBJTkRFWF9FTlRSWXtfSEVBREVSfSAqaWUgaXMgZ2l2ZW4gYnkKKwkvLwkJICAgYWxpZ25lZCB2Y24gb2YgSU5ERVhfRU5UUll7X0hFQURFUn0gKmllIGlzIGdpdmVuIGJ5CiAJLy8JCSAgIChjaGFyKilpZSArIGxlMTZfdG9fY3B1KGllKiktPmxlbmd0aCkgLSBzaXplb2YoVkNOKSwKIAkvLwkJICAgd2hlcmUgc2l6ZW9mKFZDTikgY2FuIGJlIGhhcmRjb2RlZCBhcyA4IGlmIHdhbnRlZC4gKi8KIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSBJTkRFWF9FTlRSWTsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvbG9nZmlsZS5jIGIvZnMvbnRmcy9sb2dmaWxlLmMKaW5kZXggNGRhZGNkZi4uYzcxZGUyOSAxMDA2NDQKLS0tIGEvZnMvbnRmcy9sb2dmaWxlLmMKKysrIGIvZnMvbnRmcy9sb2dmaWxlLmMKQEAgLTY2OSw3ICs2NjksNyBAQAogICogb2YgY2FzZXMgd2hlcmUgd2UgdGhpbmsgdGhhdCBhIHZvbHVtZSBpcyBkaXJ0eSB3aGVuIGluIGZhY3QgaXQgaXMgY2xlYW4uCiAgKiBUaGlzIHNob3VsZCBvbmx5IGFmZmVjdCB2b2x1bWVzIHRoYXQgaGF2ZSBub3QgYmVlbiBzaHV0ZG93biBjbGVhbmx5IGJ1dCBkaWQKICAqIG5vdCBoYXZlIGFueSBwZW5kaW5nLCBub24tY2hlY2stcG9pbnRlZCBpL28sIGkuZS4gdGhleSB3ZXJlIGNvbXBsZXRlbHkgaWRsZQotICogYXQgbGVhc3QgZm9yIHRoZSBmaXZlIHNlY29uZHMgcHJlY2VlZGluZyB0aGUgdW5jbGVhbiBzaHV0ZG93bi4KKyAqIGF0IGxlYXN0IGZvciB0aGUgZml2ZSBzZWNvbmRzIHByZWNlZGluZyB0aGUgdW5jbGVhbiBzaHV0ZG93bi4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgJExvZ0ZpbGUgam91cm5hbCBoYXMgYWxyZWFkeSBiZWVuIGNvbnNpc3RlbmN5CiAgKiBjaGVja2VkIGJ5IGEgY2FsbCB0byBudGZzX2NoZWNrX2xvZ2ZpbGUoKSBhbmQgaW4gcGFydGljdWxhciBpZiB0aGUgJExvZ0ZpbGUKZGlmZiAtLWdpdCBhL2ZzL250ZnMvbG9nZmlsZS5oIGIvZnMvbnRmcy9sb2dmaWxlLmgKaW5kZXggYjVhNmYwOC4uYWEyYjZhYyAxMDA2NDQKLS0tIGEvZnMvbnRmcy9sb2dmaWxlLmgKKysrIGIvZnMvbnRmcy9sb2dmaWxlLmgKQEAgLTIyMiw3ICsyMjIsNyBAQAogLyogMjQqLwlzbGU2NCBmaWxlX3NpemU7CS8qIFVzYWJsZSBieXRlIHNpemUgb2YgdGhlIGxvZyBmaWxlLiAgSWYgdGhlCiAJCQkJICAgcmVzdGFydF9hcmVhX29mZnNldCArIHRoZSBvZmZzZXQgb2YgdGhlCiAJCQkJICAgZmlsZV9zaXplIGFyZSA+IDUxMCB0aGVuIGNvcnJ1cHRpb24gaGFzCi0JCQkJICAgb2NjdXJlZC4gIFRoaXMgaXMgdGhlIHZlcnkgZmlyc3QgY2hlY2sgd2hlbgorCQkJCSAgIG9jY3VycmVkLiAgVGhpcyBpcyB0aGUgdmVyeSBmaXJzdCBjaGVjayB3aGVuCiAJCQkJICAgc3RhcnRpbmcgd2l0aCB0aGUgcmVzdGFydF9hcmVhIGFzIGlmIGl0CiAJCQkJICAgZmFpbHMgaXQgbWVhbnMgdGhhdCBzb21lIG9mIHRoZSBhYm92ZSB2YWx1ZXMKIAkJCQkgICB3aWxsIGJlIGNvcnJ1cHRlZCBieSB0aGUgbXVsdGkgc2VjdG9yCmRpZmYgLS1naXQgYS9mcy9udGZzL21mdC5jIGIvZnMvbnRmcy9tZnQuYwppbmRleCAzMjZlNzQ3Li4zODI4NTdmIDEwMDY0NAotLS0gYS9mcy9udGZzL21mdC5jCisrKyBiL2ZzL250ZnMvbWZ0LmMKQEAgLTczLDcgKzczLDcgQEAKIAkJaWYgKGluZGV4ID4gZW5kX2luZGV4IHx8IChpX3NpemUgJiB+UEFHRV9DQUNIRV9NQVNLKSA8IG9mcyArCiAJCQkJdm9sLT5tZnRfcmVjb3JkX3NpemUpIHsKIAkJCXBhZ2UgPSBFUlJfUFRSKC1FTk9FTlQpOwotCQkJbnRmc19lcnJvcih2b2wtPnNiLCAiQXR0ZW10IHRvIHJlYWQgbWZ0IHJlY29yZCAweCVseCwgIgorCQkJbnRmc19lcnJvcih2b2wtPnNiLCAiQXR0ZW1wdCB0byByZWFkIG1mdCByZWNvcmQgMHglbHgsICIKIAkJCQkJIndoaWNoIGlzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBtZnQuICAiCiAJCQkJCSJUaGlzIGlzIHByb2JhYmx5IGEgYnVnIGluIHRoZSBudGZzICIKIAkJCQkJImRyaXZlci4iLCBuaS0+bWZ0X25vKTsKQEAgLTE0NDIsNyArMTQ0Miw3IEBACiAJCS8vIE5vdGU6IEl0IHdpbGwgbmVlZCB0byBiZSBhIHNwZWNpYWwgbWZ0IHJlY29yZCBhbmQgaWYgbm9uZSBvZgogCQkvLyB0aG9zZSBhcmUgYXZhaWxhYmxlIGl0IGdldHMgcmF0aGVyIGNvbXBsaWNhdGVkLi4uCiAJCW50ZnNfZXJyb3Iodm9sLT5zYiwgIk5vdCBlbm91Z2ggc3BhY2UgaW4gdGhpcyBtZnQgcmVjb3JkIHRvICIKLQkJCQkiYWNjb21vZGF0ZSBleHRlbmRlZCBtZnQgYml0bWFwIGF0dHJpYnV0ZSAiCisJCQkJImFjY29tbW9kYXRlIGV4dGVuZGVkIG1mdCBiaXRtYXAgYXR0cmlidXRlICIKIAkJCQkiZXh0ZW50LiAgQ2Fubm90IGhhbmRsZSB0aGlzIHlldC4iKTsKIAkJcmV0ID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gdW5kb19hbGxvYzsKQEAgLTE4NzksNyArMTg3OSw3IEBACiAJCS8vIGFuZCB3ZSB3b3VsZCB0aGVuIG5lZWQgdG8gdXBkYXRlIGFsbCByZWZlcmVuY2VzIHRvIHRoaXMgbWZ0CiAJCS8vIHJlY29yZCBhcHByb3ByaWF0ZWx5LiAgVGhpcyBpcyByYXRoZXIgY29tcGxpY2F0ZWQuLi4KIAkJbnRmc19lcnJvcih2b2wtPnNiLCAiTm90IGVub3VnaCBzcGFjZSBpbiB0aGlzIG1mdCByZWNvcmQgdG8gIgotCQkJCSJhY2NvbW9kYXRlIGV4dGVuZGVkIG1mdCBkYXRhIGF0dHJpYnV0ZSAiCisJCQkJImFjY29tbW9kYXRlIGV4dGVuZGVkIG1mdCBkYXRhIGF0dHJpYnV0ZSAiCiAJCQkJImV4dGVudC4gIENhbm5vdCBoYW5kbGUgdGhpcyB5ZXQuIik7CiAJCXJldCA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIHVuZG9fYWxsb2M7CkBAIC0yMzU3LDcgKzIzNTcsNyBAQAogCX0KICNpZmRlZiBERUJVRwogCXJlYWRfbG9ja19pcnFzYXZlKCZtZnRibXBfbmktPnNpemVfbG9jaywgZmxhZ3MpOwotCW50ZnNfZGVidWcoIlN0YXR1cyBvZiBtZnRibXAgYWZ0ZXIgaW5pdGlhbGl6ZWQgZXh0ZW50aW9uOiAiCisJbnRmc19kZWJ1ZygiU3RhdHVzIG9mIG1mdGJtcCBhZnRlciBpbml0aWFsaXplZCBleHRlbnNpb246ICIKIAkJCSJhbGxvY2F0ZWRfc2l6ZSAweCVsbHgsIGRhdGFfc2l6ZSAweCVsbHgsICIKIAkJCSJpbml0aWFsaXplZF9zaXplIDB4JWxseC4iLAogCQkJKGxvbmcgbG9uZyltZnRibXBfbmktPmFsbG9jYXRlZF9zaXplLApkaWZmIC0tZ2l0IGEvZnMvbnRmcy9ydW5saXN0LmMgYi9mcy9udGZzL3J1bmxpc3QuYwppbmRleCA1NmE5YTZkLi5lYWM3ZDY3IDEwMDY0NAotLS0gYS9mcy9udGZzL3J1bmxpc3QuYworKysgYi9mcy9udGZzL3J1bmxpc3QuYwpAQCAtMTI0Myw3ICsxMjQzLDcgQEAKICAqIHdyaXRlLgogICoKICAqIFRoaXMgaXMgdXNlZCB3aGVuIGJ1aWxkaW5nIHRoZSBtYXBwaW5nIHBhaXJzIGFycmF5IG9mIGEgcnVubGlzdCB0byBjb21wcmVzcwotICogYSBnaXZlbiBsb2dpY2FsIGNsdXN0ZXIgbnVtYmVyIChsY24pIG9yIGEgc3BlY2lmaWMgcnVuIGxlbmd0aCB0byB0aGUgbWludW11bQorICogYSBnaXZlbiBsb2dpY2FsIGNsdXN0ZXIgbnVtYmVyIChsY24pIG9yIGEgc3BlY2lmaWMgcnVuIGxlbmd0aCB0byB0aGUgbWluaW11bQogICogc2l6ZSBwb3NzaWJsZS4KICAqCiAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIG9uIHN1Y2Nlc3MuICBPbiBlcnJvciwgaS5lLiB0aGUKZGlmZiAtLWdpdCBhL2ZzL250ZnMvc3VwZXIuYyBiL2ZzL250ZnMvc3VwZXIuYwppbmRleCAyOTA5OWEwLi5iNTI3MDZkIDEwMDY0NAotLS0gYS9mcy9udGZzL3N1cGVyLmMKKysrIGIvZnMvbnRmcy9zdXBlci5jCkBAIC00NTgsNyArNDU4LDcgQEAKIAkgKiB0aGUgdm9sdW1lIG9uIGJvb3QgYW5kIHVwZGF0ZXMgdGhlbS4KIAkgKgogCSAqIFdoZW4gcmVtb3VudGluZyByZWFkLW9ubHksIG1hcmsgdGhlIHZvbHVtZSBjbGVhbiBpZiBubyB2b2x1bWUgZXJyb3JzCi0JICogaGF2ZSBvY2N1cmVkLgorCSAqIGhhdmUgb2NjdXJyZWQuCiAJICovCiAJaWYgKChzYi0+c19mbGFncyAmIE1TX1JET05MWSkgJiYgISgqZmxhZ3MgJiBNU19SRE9OTFkpKSB7CiAJCXN0YXRpYyBjb25zdCBjaGFyICplcyA9ICIuICBDYW5ub3QgcmVtb3VudCByZWFkLXdyaXRlLiI7CkBAIC0xMjY5LDcgKzEyNjksNyBAQAogCQkJCQkiaGliZXJuYXRlZCBvbiB0aGUgdm9sdW1lLiIpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJLyogQSByZWFsIGVycm9yIG9jY3VyZWQuICovCisJCS8qIEEgcmVhbCBlcnJvciBvY2N1cnJlZC4gKi8KIAkJbnRmc19lcnJvcih2b2wtPnNiLCAiRmFpbGVkIHRvIGZpbmQgaW5vZGUgbnVtYmVyIGZvciAiCiAJCQkJImhpYmVyZmlsLnN5cy4iKTsKIAkJcmV0dXJuIHJldDsKQEAgLTEzNzAsNyArMTM3MCw3IEBACiAJCQlOVm9sU2V0UXVvdGFPdXRPZkRhdGUodm9sKTsKIAkJCXJldHVybiB0cnVlOwogCQl9Ci0JCS8qIEEgcmVhbCBlcnJvciBvY2N1cmVkLiAqLworCQkvKiBBIHJlYWwgZXJyb3Igb2NjdXJyZWQuICovCiAJCW50ZnNfZXJyb3Iodm9sLT5zYiwgIkZhaWxlZCB0byBmaW5kIGlub2RlIG51bWJlciBmb3IgJFF1b3RhLiIpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQpAQCAtMTQ1NCw3ICsxNDU0LDcgQEAKIAkJCU5Wb2xTZXRVc25Kcm5sU3RhbXBlZCh2b2wpOwogCQkJcmV0dXJuIHRydWU7CiAJCX0KLQkJLyogQSByZWFsIGVycm9yIG9jY3VyZWQuICovCisJCS8qIEEgcmVhbCBlcnJvciBvY2N1cnJlZC4gKi8KIAkJbnRmc19lcnJvcih2b2wtPnNiLCAiRmFpbGVkIHRvIGZpbmQgaW5vZGUgbnVtYmVyIGZvciAiCiAJCQkJIiRVc25Kcm5sLiIpOwogCQlyZXR1cm4gZmFsc2U7CkBAIC0yMjkyLDcgKzIyOTIsNyBAQAogCW50ZnNfY29tbWl0X2lub2RlKHZvbC0+bWZ0X2lubyk7CiAKIAkvKgotCSAqIElmIGEgcmVhZC13cml0ZSBtb3VudCBhbmQgbm8gdm9sdW1lIGVycm9ycyBoYXZlIG9jY3VyZWQsIG1hcmsgdGhlCisJICogSWYgYSByZWFkLXdyaXRlIG1vdW50IGFuZCBubyB2b2x1bWUgZXJyb3JzIGhhdmUgb2NjdXJyZWQsIG1hcmsgdGhlCiAJICogdm9sdW1lIGNsZWFuLiAgQWxzbywgcmUtY29tbWl0IGFsbCBhZmZlY3RlZCBpbm9kZXMuCiAJICovCiAJaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CkBAIC0yNDk2LDcgKzI0OTYsNyBAQAogCWlmICh2b2wtPm5yX2NsdXN0ZXJzICYgNjMpCiAJCW5yX2ZyZWUgKz0gNjQgLSAodm9sLT5ucl9jbHVzdGVycyAmIDYzKTsKIAl1cF9yZWFkKCZ2b2wtPmxjbmJtcF9sb2NrKTsKLQkvKiBJZiBlcnJvcnMgb2NjdXJlZCB3ZSBtYXkgd2VsbCBoYXZlIGdvbmUgYmVsb3cgemVybywgZml4IHRoaXMuICovCisJLyogSWYgZXJyb3JzIG9jY3VycmVkIHdlIG1heSB3ZWxsIGhhdmUgZ29uZSBiZWxvdyB6ZXJvLCBmaXggdGhpcy4gKi8KIAlpZiAobnJfZnJlZSA8IDApCiAJCW5yX2ZyZWUgPSAwOwogCW50ZnNfZGVidWcoIkV4aXRpbmcuIik7CkBAIC0yNTYxLDcgKzI1NjEsNyBAQAogCX0KIAludGZzX2RlYnVnKCJGaW5pc2hlZCByZWFkaW5nICRNRlQvJEJJVE1BUCwgbGFzdCBpbmRleCA9IDB4JWx4LiIsCiAJCQlpbmRleCAtIDEpOwotCS8qIElmIGVycm9ycyBvY2N1cmVkIHdlIG1heSB3ZWxsIGhhdmUgZ29uZSBiZWxvdyB6ZXJvLCBmaXggdGhpcy4gKi8KKwkvKiBJZiBlcnJvcnMgb2NjdXJyZWQgd2UgbWF5IHdlbGwgaGF2ZSBnb25lIGJlbG93IHplcm8sIGZpeCB0aGlzLiAqLwogCWlmIChucl9mcmVlIDwgMCkKIAkJbnJfZnJlZSA9IDA7CiAJbnRmc19kZWJ1ZygiRXhpdGluZy4iKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FsbG9jLmMgYi9mcy9vY2ZzMi9hbGxvYy5jCmluZGV4IGIyN2EwZDguLjQ4YWE5YzcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FsbG9jLmMKKysrIGIvZnMvb2NmczIvYWxsb2MuYwpAQCAtNDUxOSw3ICs0NTE5LDcgQEAKIH0KIAogLyoKLSAqIEhlbHBlciBmdW5jdGlvbiBjYWxsZWQgYXQgdGhlIGJlZ2luaW5nIG9mIGFuIGluc2VydC4KKyAqIEhlbHBlciBmdW5jdGlvbiBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhbiBpbnNlcnQuCiAgKgogICogVGhpcyBjb21wdXRlcyBhIGZldyB0aGluZ3MgdGhhdCBhcmUgY29tbW9ubHkgdXNlZCBpbiB0aGUgcHJvY2VzcyBvZgogICogaW5zZXJ0aW5nIGludG8gdGhlIGJ0cmVlOgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYW9wcy5oIGIvZnMvb2NmczIvYW9wcy5oCmluZGV4IGVjZWI0NTYuLjc1Y2YzYWQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FvcHMuaAorKysgYi9mcy9vY2ZzMi9hb3BzLmgKQEAgLTcxLDcgKzcxLDcgQEAKIAogLyoKICAqIFVzaW5nIGEgbmFtZWQgZW51bSByZXByZXNlbnRpbmcgbG9jayB0eXBlcyBpbiB0ZXJtcyBvZiAjTiBiaXQgc3RvcmVkIGluCi0gKiBpb2NiLT5wcml2YXRlLCB3aGljaCBpcyBnb2luZyB0byBiZSB1c2VkIGZvciBjb21tdW5pY2F0aW9uIGJld3RlZW4KKyAqIGlvY2ItPnByaXZhdGUsIHdoaWNoIGlzIGdvaW5nIHRvIGJlIHVzZWQgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbgogICogb2NmczJfZGlvX2VuZF9pbygpIGFuZCBvY2ZzMl9maWxlX2Fpb193cml0ZS9yZWFkKCkuCiAgKi8KIGVudW0gb2NmczJfaW9jYl9sb2NrX2JpdHMgewpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKaW5kZXggMjQ2MWViMy4uOWEzZTZiYiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCkBAIC01MzksMjUgKzUzOSw0MSBAQAogCiAvKiBXZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IG5vYm9keSBpcyBoZWFydGJlYXRpbmcgb24gdG9wIG9mIHVzIC0tCiAgKiB0aGlzIHdpbGwgaGVscCBkZXRlY3QgYW4gaW52YWxpZCBjb25maWd1cmF0aW9uLiAqLwotc3RhdGljIGludCBvMmhiX2NoZWNrX2xhc3RfdGltZXN0YW1wKHN0cnVjdCBvMmhiX3JlZ2lvbiAqcmVnKQorc3RhdGljIHZvaWQgbzJoYl9jaGVja19sYXN0X3RpbWVzdGFtcChzdHJ1Y3QgbzJoYl9yZWdpb24gKnJlZykKIHsKLQlpbnQgbm9kZV9udW0sIHJldDsKIAlzdHJ1Y3QgbzJoYl9kaXNrX3Nsb3QgKnNsb3Q7CiAJc3RydWN0IG8yaGJfZGlza19oZWFydGJlYXRfYmxvY2sgKmhiX2Jsb2NrOworCWNoYXIgKmVycnN0cjsKIAotCW5vZGVfbnVtID0gbzJubV90aGlzX25vZGUoKTsKLQotCXJldCA9IDE7Ci0Jc2xvdCA9ICZyZWctPmhyX3Nsb3RzW25vZGVfbnVtXTsKKwlzbG90ID0gJnJlZy0+aHJfc2xvdHNbbzJubV90aGlzX25vZGUoKV07CiAJLyogRG9uJ3QgY2hlY2sgb24gb3VyIDFzdCB0aW1lc3RhbXAgKi8KLQlpZiAoc2xvdC0+ZHNfbGFzdF90aW1lKSB7Ci0JCWhiX2Jsb2NrID0gc2xvdC0+ZHNfcmF3X2Jsb2NrOworCWlmICghc2xvdC0+ZHNfbGFzdF90aW1lKQorCQlyZXR1cm47CiAKLQkJaWYgKGxlNjRfdG9fY3B1KGhiX2Jsb2NrLT5oYl9zZXEpICE9IHNsb3QtPmRzX2xhc3RfdGltZSkKLQkJCXJldCA9IDA7Ci0JfQorCWhiX2Jsb2NrID0gc2xvdC0+ZHNfcmF3X2Jsb2NrOworCWlmIChsZTY0X3RvX2NwdShoYl9ibG9jay0+aGJfc2VxKSA9PSBzbG90LT5kc19sYXN0X3RpbWUgJiYKKwkgICAgbGU2NF90b19jcHUoaGJfYmxvY2stPmhiX2dlbmVyYXRpb24pID09IHNsb3QtPmRzX2xhc3RfZ2VuZXJhdGlvbiAmJgorCSAgICBoYl9ibG9jay0+aGJfbm9kZSA9PSBzbG90LT5kc19ub2RlX251bSkKKwkJcmV0dXJuOwogCi0JcmV0dXJuIHJldDsKKyNkZWZpbmUgRVJSU1RSMQkJIkFub3RoZXIgbm9kZSBpcyBoZWFydGJlYXRpbmcgb24gZGV2aWNlIgorI2RlZmluZSBFUlJTVFIyCQkiSGVhcnRiZWF0IGdlbmVyYXRpb24gbWlzbWF0Y2ggb24gZGV2aWNlIgorI2RlZmluZSBFUlJTVFIzCQkiSGVhcnRiZWF0IHNlcXVlbmNlIG1pc21hdGNoIG9uIGRldmljZSIKKworCWlmIChoYl9ibG9jay0+aGJfbm9kZSAhPSBzbG90LT5kc19ub2RlX251bSkKKwkJZXJyc3RyID0gRVJSU1RSMTsKKwllbHNlIGlmIChsZTY0X3RvX2NwdShoYl9ibG9jay0+aGJfZ2VuZXJhdGlvbikgIT0KKwkJIHNsb3QtPmRzX2xhc3RfZ2VuZXJhdGlvbikKKwkJZXJyc3RyID0gRVJSU1RSMjsKKwllbHNlCisJCWVycnN0ciA9IEVSUlNUUjM7CisKKwltbG9nKE1MX0VSUk9SLCAiJXMgKCVzKTogZXhwZWN0ZWQoJXU6MHglbGx4LCAweCVsbHgpLCAiCisJICAgICAib25kaXNrKCV1OjB4JWxseCwgMHglbGx4KVxuIiwgZXJyc3RyLCByZWctPmhyX2Rldl9uYW1lLAorCSAgICAgc2xvdC0+ZHNfbm9kZV9udW0sICh1bnNpZ25lZCBsb25nIGxvbmcpc2xvdC0+ZHNfbGFzdF9nZW5lcmF0aW9uLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzbG90LT5kc19sYXN0X3RpbWUsIGhiX2Jsb2NrLT5oYl9ub2RlLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdShoYl9ibG9jay0+aGJfZ2VuZXJhdGlvbiksCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KGhiX2Jsb2NrLT5oYl9zZXEpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG8yaGJfcHJlcGFyZV9ibG9jayhzdHJ1Y3QgbzJoYl9yZWdpb24gKnJlZywKQEAgLTk4Myw5ICs5OTksNyBAQAogCS8qIFdpdGggYW4gdXAgdG8gZGF0ZSB2aWV3IG9mIHRoZSBzbG90cywgd2UgY2FuIGNoZWNrIHRoYXQgbm8KIAkgKiBvdGhlciBub2RlIGhhcyBiZWVuIGltcHJvcGVybHkgY29uZmlndXJlZCB0byBoZWFydGJlYXQgaW4KIAkgKiBvdXIgc2xvdC4gKi8KLQlpZiAoIW8yaGJfY2hlY2tfbGFzdF90aW1lc3RhbXAocmVnKSkKLQkJbWxvZyhNTF9FUlJPUiwgIkRldmljZSBcIiVzXCI6IGFub3RoZXIgbm9kZSBpcyBoZWFydGJlYXRpbmcgIgotCQkgICAgICJpbiBvdXIgc2xvdCFcbiIsIHJlZy0+aHJfZGV2X25hbWUpOworCW8yaGJfY2hlY2tfbGFzdF90aW1lc3RhbXAocmVnKTsKIAogCS8qIGZpbGwgaW4gdGhlIHByb3BlciBpbmZvIGZvciBvdXIgbmV4dCBoZWFydGJlYXQgKi8KIAlvMmhiX3ByZXBhcmVfYmxvY2socmVnLCByZWctPmhyX2dlbmVyYXRpb24pOwpAQCAtOTk5LDggKzEwMTMsOCBAQAogCX0KIAogCWkgPSAtMTsKLQl3aGlsZSgoaSA9IGZpbmRfbmV4dF9iaXQoY29uZmlndXJlZF9ub2RlcywgTzJOTV9NQVhfTk9ERVMsIGkgKyAxKSkgPCBPMk5NX01BWF9OT0RFUykgewotCisJd2hpbGUoKGkgPSBmaW5kX25leHRfYml0KGNvbmZpZ3VyZWRfbm9kZXMsCisJCQkJIE8yTk1fTUFYX05PREVTLCBpICsgMSkpIDwgTzJOTV9NQVhfTk9ERVMpIHsKIAkJY2hhbmdlIHw9IG8yaGJfY2hlY2tfc2xvdChyZWcsICZyZWctPmhyX3Nsb3RzW2ldKTsKIAl9CiAKQEAgLTE2OTAsNiArMTcwNCw3IEBACiAJc3RydWN0IGZpbGUgKmZpbHAgPSBOVUxMOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwogCXNzaXplX3QgcmV0ID0gLUVJTlZBTDsKKwlpbnQgbGl2ZV90aHJlc2hvbGQ7CiAKIAlpZiAocmVnLT5ocl9iZGV2KQogCQlnb3RvIG91dDsKQEAgLTE3NjYsOCArMTc4MSwxOCBAQAogCSAqIEEgbm9kZSBpcyBjb25zaWRlcmVkIGxpdmUgYWZ0ZXIgaXQgaGFzIGJlYXQgTElWRV9USFJFU0hPTEQKIAkgKiB0aW1lcy4gIFdlJ3JlIG5vdCBzdGVhZHkgdW50aWwgd2UndmUgZ2l2ZW4gdGhlbSBhIGNoYW5jZQogCSAqIF9hZnRlcl8gb3VyIGZpcnN0IHJlYWQuCisJICogVGhlIGRlZmF1bHQgdGhyZXNob2xkIGlzIGJhcmUgbWluaW11bSBzbyBhcyB0byBsaW1pdCB0aGUgZGVsYXkKKwkgKiBkdXJpbmcgbW91bnRzLiBGb3IgZ2xvYmFsIGhlYXJ0YmVhdCwgdGhlIHRocmVzaG9sZCBkb3VibGVkIGZvciB0aGUKKwkgKiBmaXJzdCByZWdpb24uCiAJICovCi0JYXRvbWljX3NldCgmcmVnLT5ocl9zdGVhZHlfaXRlcmF0aW9ucywgTzJIQl9MSVZFX1RIUkVTSE9MRCArIDEpOworCWxpdmVfdGhyZXNob2xkID0gTzJIQl9MSVZFX1RIUkVTSE9MRDsKKwlpZiAobzJoYl9nbG9iYWxfaGVhcnRiZWF0X2FjdGl2ZSgpKSB7CisJCXNwaW5fbG9jaygmbzJoYl9saXZlX2xvY2spOworCQlpZiAobzJoYl9wb3BfY291bnQoJm8yaGJfcmVnaW9uX2JpdG1hcCwgTzJOTV9NQVhfUkVHSU9OUykgPT0gMSkKKwkJCWxpdmVfdGhyZXNob2xkIDw8PSAxOworCQlzcGluX3VubG9jaygmbzJoYl9saXZlX2xvY2spOworCX0KKwlhdG9taWNfc2V0KCZyZWctPmhyX3N0ZWFkeV9pdGVyYXRpb25zLCBsaXZlX3RocmVzaG9sZCArIDEpOwogCiAJaGJfdGFzayA9IGt0aHJlYWRfcnVuKG8yaGJfdGhyZWFkLCByZWcsICJvMmhiLSVzIiwKIAkJCSAgICAgIHJlZy0+aHJfaXRlbS5jaV9uYW1lKTsKQEAgLTIyNzUsNyArMjMwMCw3IEBACiAJa2ZyZWUoaHMpOwogfQogCi0vKiBoYiBjYWxsYmFjayByZWdpc3RyYXRpb24gYW5kIGlzc3VlaW5nICovCisvKiBoYiBjYWxsYmFjayByZWdpc3RyYXRpb24gYW5kIGlzc3VpbmcgKi8KIAogc3RhdGljIHN0cnVjdCBvMmhiX2NhbGxiYWNrICpoYmNhbGxfZnJvbV90eXBlKGVudW0gbzJoYl9jYWxsYmFja190eXBlIHR5cGUpCiB7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL3F1b3J1bS5jIGIvZnMvb2NmczIvY2x1c3Rlci9xdW9ydW0uYwppbmRleCBhODczNjY3Li44ZjljZWExIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL3F1b3J1bS5jCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvcXVvcnVtLmMKQEAgLTg5LDcgKzg5LDcgQEAKIAl9OwogfQogCi0vKiBJbmRpY2F0ZSB0aGF0IGEgdGltZW91dCBvY2N1cmVkIG9uIGEgaGVhcmJlYXQgcmVnaW9uIHdyaXRlLiBUaGUKKy8qIEluZGljYXRlIHRoYXQgYSB0aW1lb3V0IG9jY3VycmVkIG9uIGEgaGVhcmJlYXQgcmVnaW9uIHdyaXRlLiBUaGUKICAqIG90aGVyIG5vZGVzIGluIHRoZSBjbHVzdGVyIG1heSBjb25zaWRlciB1cyBkZWFkIGF0IHRoYXQgdGltZSBzbyB3ZQogICogd2FudCB0byAiZmVuY2UiIG91cnNlbHZlcyBzbyB0aGF0IHdlIGRvbid0IHNjcmliYmxlIG9uIHRoZSBkaXNrCiAgKiBhZnRlciB0aGV5IHRoaW5rIHRoZXkndmUgcmVjb3ZlcmVkIHVzLiBUaGlzIGNhbid0IHNvbHZlIGFsbApAQCAtMjYxLDcgKzI2MSw3IEBACiAJc3Bpbl91bmxvY2soJnFzLT5xc19sb2NrKTsKIH0KIAotLyogVGhpcyBpcyBhbmFsYWdvdXMgdG8gaGJfdXAuICBhcyBhIG5vZGUncyBjb25uZWN0aW9uIGNvbWVzIHVwIHdlIGRlbGF5IHRoZQorLyogVGhpcyBpcyBhbmFsb2dvdXMgdG8gaGJfdXAuICBhcyBhIG5vZGUncyBjb25uZWN0aW9uIGNvbWVzIHVwIHdlIGRlbGF5IHRoZQogICogcXVvcnVtIGRlY2lzaW9uIHVudGlsIHdlIHNlZSBpdCBoZWFydGJlYXRpbmcuICB0aGUgaG9sZCB3aWxsIGJlIGRyb3BlZCBpbgogICogaGJfdXAgb3IgaGJfZG93bi4gIGl0IG1pZ2h0IGJlIHBlcnBldHVhdGVkIGJ5IGNvbl9lcnIgdW50aWwgaGJfZG93bi4gIGlmCiAgKiBpdCdzIGFscmVhZHkgaGVhcnRiZWF0aW5nIHdlIHdlIG1pZ2h0IGJlIGRyb3BwaW5nIGEgaG9sZCB0aGF0IGNvbm5fdXAgZ290LgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci90Y3AuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvdGNwLmMKaW5kZXggZWUwNGZmNS4uZGI1ZWU0YiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci90Y3AuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jCkBAIC01NjUsNyArNTY1LDcgQEAKIAkgKiB0aGUgd29yayBxdWV1ZSBhY3R1YWxseSBiZWluZyB1cC4gKi8KIAlpZiAoIXZhbGlkICYmIG8ybmV0X3dxKSB7CiAJCXVuc2lnbmVkIGxvbmcgZGVsYXk7Ci0JCS8qIGRlbGF5IGlmIHdlJ3JlIHdpdGhpbmcgYSBSRUNPTk5FQ1RfREVMQVkgb2YgdGhlCisJCS8qIGRlbGF5IGlmIHdlJ3JlIHdpdGhpbiBhIFJFQ09OTkVDVF9ERUxBWSBvZiB0aGUKIAkJICogbGFzdCBhdHRlbXB0ICovCiAJCWRlbGF5ID0gKG5uLT5ubl9sYXN0X2Nvbm5lY3RfYXR0ZW1wdCArCiAJCQkgbXNlY3NfdG9famlmZmllcyhvMm5ldF9yZWNvbm5lY3RfZGVsYXkoKSkpCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kaXIuYyBiL2ZzL29jZnMyL2Rpci5jCmluZGV4IDlmZTViOGYuLjg1ODJlM2YgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2Rpci5jCisrKyBiL2ZzL29jZnMyL2Rpci5jCkBAIC0yODY4LDcgKzI4NjgsNyBAQAogCQlieXRlcyA9IGJsb2Nrc193YW50ZWQgPDwgc2ItPnNfYmxvY2tzaXplX2JpdHM7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItPmlfc2IpOwogCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koZGlyKTsKLQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYzsKKwlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyA9IE5VTEw7CiAJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMgPSBOVUxMOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlyZGF0YV9iaCA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9yb290X2JoID0gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYyBiL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYwppbmRleCA3NTQwYTQ5Li4zYjE3OWQ2IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtZG9tYWluLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbWRvbWFpbi5jCkBAIC0xNjE0LDcgKzE2MTQsOCBAQAogCXNwaW5fdW5sb2NrKCZkbG0tPnNwaW5sb2NrKTsKIAogCS8qIFN1cHBvcnQgZm9yIGdsb2JhbCBoZWFydGJlYXQgYW5kIG5vZGUgaW5mbyB3YXMgYWRkZWQgaW4gMS4xICovCi0JaWYgKGRsbV9wcm90b2NvbC5wdl9tYWpvciA+IDEgfHwgZGxtX3Byb3RvY29sLnB2X21pbm9yID4gMCkgeworCWlmIChkbG0tPmRsbV9sb2NraW5nX3Byb3RvLnB2X21ham9yID4gMSB8fAorCSAgICBkbG0tPmRsbV9sb2NraW5nX3Byb3RvLnB2X21pbm9yID4gMCkgewogCQlzdGF0dXMgPSBkbG1fc2VuZF9ub2RlaW5mbyhkbG0sIGN0eHQtPnllc19yZXNwX21hcCk7CiAJCWlmIChzdGF0dXMpIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1tYXN0ZXIuYyBiL2ZzL29jZnMyL2RsbS9kbG1tYXN0ZXIuYwppbmRleCA5ZDY3NjEwLi44NGQxNjYzIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtbWFzdGVyLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbW1hc3Rlci5jCkBAIC04MDgsNyArODA4LDcgQEAKIAkJCQlkbG1fbWxlX2RldGFjaF9oYl9ldmVudHMoZGxtLCBtbGUpOwogCQkJZGxtX3B1dF9tbGUobWxlKTsKIAkJCW1sZSA9IE5VTEw7Ci0JCQkvKiB0aGlzIGlzIGxhbWUsIGJ1dCB3ZSBjYW50IHdhaXQgb24gZWl0aGVyCisJCQkvKiB0aGlzIGlzIGxhbWUsIGJ1dCB3ZSBjYW4ndCB3YWl0IG9uIGVpdGhlcgogCQkJICogdGhlIG1sZSBvciBsb2NrcmVzIHdhaXRxdWV1ZSBoZXJlICovCiAJCQlpZiAobWlnKQogCQkJCW1zbGVlcCgxMDApOwpAQCAtODQzLDcgKzg0Myw3IEBACiAKIAkvKiBmaW5hbGx5IGFkZCB0aGUgbG9ja3JlcyB0byBpdHMgaGFzaCBidWNrZXQgKi8KIAlfX2RsbV9pbnNlcnRfbG9ja3JlcyhkbG0sIHJlcyk7Ci0JLyogc2luY2UgdGhpcyBsb2NrcmVzIGlzIG5ldyBpdCBkb2VzbnQgbm90IHJlcXVpcmUgdGhlIHNwaW5sb2NrICovCisJLyogc2luY2UgdGhpcyBsb2NrcmVzIGlzIG5ldyBpdCBkb2Vzbid0IG5vdCByZXF1aXJlIHRoZSBzcGlubG9jayAqLwogCWRsbV9sb2NrcmVzX2dyYWJfaW5mbGlnaHRfcmVmX25ldyhkbG0sIHJlcyk7CiAKIAkvKiBpZiB0aGlzIG5vZGUgZG9lcyBub3QgYmVjb21lIHRoZSBtYXN0ZXIgbWFrZSBzdXJlIHRvIGRyb3AKQEAgLTI1NzQsNiArMjU3NCw5IEBACiAJCXJlcy0+c3RhdGUgJj0gfkRMTV9MT0NLX1JFU19NSUdSQVRJTkc7CiAJCXdha2UgPSAxOwogCQlzcGluX3VubG9jaygmcmVzLT5zcGlubG9jayk7CisJCWlmIChkbG1faXNfaG9zdF9kb3duKHJldCkpCisJCQlkbG1fd2FpdF9mb3Jfbm9kZV9kZWF0aChkbG0sIHRhcmdldCwKKwkJCQkJCURMTV9OT0RFX0RFQVRIX1dBSVRfTUFYKTsKIAkJZ290byBsZWF2ZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2ZpbGUuYyBiL2ZzL29jZnMyL2ZpbGUuYwppbmRleCA0MTU2NWFlLi44OTY1OWQ2IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9maWxlLmMKKysrIGIvZnMvb2NmczIvZmlsZS5jCkBAIC0xNjA3LDYgKzE2MDcsOSBAQAogCXJhbmdlID0gbGUzMl90b19jcHUocmVjLT5lX2Nwb3MpICsgb2NmczJfcmVjX2NsdXN0ZXJzKGVsLCByZWMpOwogCiAJaWYgKGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSA+PSB0cnVuY19zdGFydCkgeworCQkvKgorCQkgKiByZW1vdmUgYW4gZW50aXJlIGV4dGVudCByZWNvcmQuCisJCSAqLwogCQkqdHJ1bmNfY3BvcyA9IGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKTsKIAkJLyoKIAkJICogU2tpcCBob2xlcyBpZiBhbnkuCkBAIC0xNjE3LDcgKzE2MjAsMTYgQEAKIAkJKmJsa25vID0gbGU2NF90b19jcHUocmVjLT5lX2Jsa25vKTsKIAkJKnRydW5jX2VuZCA9IGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKTsKIAl9IGVsc2UgaWYgKHJhbmdlID4gdHJ1bmNfc3RhcnQpIHsKKwkJLyoKKwkJICogcmVtb3ZlIGEgcGFydGlhbCBleHRlbnQgcmVjb3JkLCB3aGljaCBtZWFucyB3ZSdyZQorCQkgKiByZW1vdmluZyB0aGUgbGFzdCBleHRlbnQgcmVjb3JkLgorCQkgKi8KIAkJKnRydW5jX2Nwb3MgPSB0cnVuY19zdGFydDsKKwkJLyoKKwkJICogc2tpcCBob2xlIGlmIGFueS4KKwkJICovCisJCWlmIChyYW5nZSA8ICp0cnVuY19lbmQpCisJCQkqdHJ1bmNfZW5kID0gcmFuZ2U7CiAJCSp0cnVuY19sZW4gPSAqdHJ1bmNfZW5kIC0gdHJ1bmNfc3RhcnQ7CiAJCWNvZmYgPSB0cnVuY19zdGFydCAtIGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKTsKIAkJKmJsa25vID0gbGU2NF90b19jcHUocmVjLT5lX2Jsa25vKSArCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9pbm9kZS5jIGIvZnMvb2NmczIvaW5vZGUuYwppbmRleCAxNzdkM2E2Li5iNGM4YmI2IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9pbm9kZS5jCisrKyBiL2ZzL29jZnMyL2lub2RlLmMKQEAgLTgzNSw3ICs4MzUsNyBAQAogCiAJLyogSWYgd2UgaGF2ZSBhbGxvd2Qgd2lwZSBvZiB0aGlzIGlub2RlIGZvciBhbm90aGVyIG5vZGUsIGl0CiAJICogd2lsbCBiZSBtYXJrZWQgaGVyZSBzbyB3ZSBjYW4gc2FmZWx5IHNraXAgaXQuIFJlY292ZXJ5IHdpbGwKLQkgKiBjbGVhbnVwIGFueSBpbm9kZXMgd2UgbWlnaHQgaW5hZHZlcnRhbnRseSBza2lwIGhlcmUuICovCisJICogY2xlYW51cCBhbnkgaW5vZGVzIHdlIG1pZ2h0IGluYWR2ZXJ0ZW50bHkgc2tpcCBoZXJlLiAqLwogCWlmIChvaS0+aXBfZmxhZ3MgJiBPQ0ZTMl9JTk9ERV9TS0lQX0RFTEVURSkKIAkJZ290byBiYWlsX3VubG9jazsKIApAQCAtOTE3LDcgKzkxNyw3IEBACiAJICogdGhlIGlub2RlIG9wZW4gbG9jayBpbiBvY2ZzMl9yZWFkX2xvY2tlZF9pbm9kZSgpLiBXaGVuIHdlCiAJICogZ2V0IHRvIC0+ZGVsZXRlX2lub2RlKCksIGVhY2ggbm9kZSB0cmllcyB0byBjb252ZXJ0IGl0J3MKIAkgKiBsb2NrIHRvIGFuIGV4Y2x1c2l2ZS4gVHJ5bG9ja3MgYXJlIHNlcmlhbGl6ZWQgYnkgdGhlIGlub2RlCi0JICogbWV0YSBkYXRhIGxvY2suIElmIHRoZSB1cGNvbnZlcnQgc3VjZWVkcywgd2Uga25vdyB0aGUgaW5vZGUKKwkgKiBtZXRhIGRhdGEgbG9jay4gSWYgdGhlIHVwY29udmVydCBzdWNjZWVkcywgd2Uga25vdyB0aGUgaW5vZGUKIAkgKiBpcyBubyBsb25nZXIgbGl2ZSBhbmQgY2FuIGJlIGRlbGV0ZWQuCiAJICoKIAkgKiBUaG91Z2ggd2UgY2FsbCB0aGlzIHdpdGggdGhlIG1ldGEgZGF0YSBsb2NrIGhlbGQsIHRoZQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvam91cm5hbC5jIGIvZnMvb2NmczIvam91cm5hbC5jCmluZGV4IGRjYzJkOTMuLjI5NWQ1NjQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2pvdXJuYWwuYworKysgYi9mcy9vY2ZzMi9qb3VybmFsLmMKQEAgLTEyNjAsNiArMTI2MCw5IEBACiB7CiAJc3RydWN0IG9jZnMyX2pvdXJuYWwgKmpvdXJuYWwgPSBvc2ItPmpvdXJuYWw7CiAKKwlpZiAob2NmczJfaXNfaGFyZF9yZWFkb25seShvc2IpKQorCQlyZXR1cm47CisKIAkvKiBObyBuZWVkIHRvIHF1ZXVlIHVwIG91ciB0cnVuY2F0ZV9sb2cgYXMgcmVndWxhciBjbGVhbnVwIHdpbGwgY2F0Y2gKIAkgKiB0aGF0ICovCiAJb2NmczJfcXVldWVfcmVjb3ZlcnlfY29tcGxldGlvbihqb3VybmFsLCBvc2ItPnNsb3RfbnVtLApAQCAtMTM2OCw3ICsxMzcxLDcgQEAKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCiAJLyogTm93IGl0IGlzIHJpZ2h0IHRpbWUgdG8gcmVjb3ZlciBxdW90YXMuLi4gV2UgaGF2ZSB0byBkbyB0aGlzIHVuZGVyCi0JICogc3VwZXJibG9jayBsb2NrIHNvIHRoYXQgbm9vbmUgY2FuIHN0YXJ0IHVzaW5nIHRoZSBzbG90IChhbmQgY3Jhc2gpCisJICogc3VwZXJibG9jayBsb2NrIHNvIHRoYXQgbm8gb25lIGNhbiBzdGFydCB1c2luZyB0aGUgc2xvdCAoYW5kIGNyYXNoKQogCSAqIGJlZm9yZSB3ZSByZWNvdmVyIGl0ICovCiAJZm9yIChpID0gMDsgaSA8IHJtX3F1b3RhX3VzZWQ7IGkrKykgewogCQlxcmVjID0gb2NmczJfYmVnaW5fcXVvdGFfcmVjb3Zlcnkob3NiLCBybV9xdW90YVtpXSk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9qb3VybmFsLmggYi9mcy9vY2ZzMi9qb3VybmFsLmgKaW5kZXggNjE4MGRhMS4uNjhjZjJmNiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvam91cm5hbC5oCisrKyBiL2ZzL29jZnMyL2pvdXJuYWwuaApAQCAtMjE1LDcgKzIxNSw3IEBACiAJCS8qIFdBUk5JTkc6IFRoaXMgb25seSBraWNrcyBvZmYgYSBzaW5nbGUKIAkJICogY2hlY2twb2ludC4gSWYgc29tZW9uZSByYWNlcyB5b3UgYW5kIGFkZHMgbW9yZQogCQkgKiBtZXRhZGF0YSB0byB0aGUgam91cm5hbCwgeW91IHdvbid0IGtub3csIGFuZCB3aWxsCi0JCSAqIHdpbmQgdXAgd2FpdGluZyAqYWxvdCogbG9uZ2VyIHRoYW4gbmVjZXNzYXJ5LiBSaWdodAorCQkgKiB3aW5kIHVwIHdhaXRpbmcgKmEgbG90KiBsb25nZXIgdGhhbiBuZWNlc3NhcnkuIFJpZ2h0CiAJCSAqIG5vdyB3ZSBvbmx5IHVzZSB0aGlzIGluIGNsZWFyX2lub2RlIHNvIHRoYXQncwogCQkgKiBPSy4gKi8KIAkJb2NmczJfc3RhcnRfY2hlY2twb2ludChvc2IpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuYyBiL2ZzL29jZnMyL25hbWVpLmMKaW5kZXggMjhmMmNjMS4uZTVkNzM4YyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbmFtZWkuYworKysgYi9mcy9vY2ZzMi9uYW1laS5jCkBAIC0yMTI4LDcgKzIxMjgsNyBAQAogfQogCiAvKioKLSAqIG9jZnMyX3ByZXBfbmV3X29ycGhhbmVkX2ZpbGUoKSAtIFByZXBhcmUgdGhlIG9ycGhhbiBkaXIgdG8gcmVjaWV2ZSBhIG5ld2x5CisgKiBvY2ZzMl9wcmVwX25ld19vcnBoYW5lZF9maWxlKCkgLSBQcmVwYXJlIHRoZSBvcnBoYW4gZGlyIHRvIHJlY2VpdmUgYSBuZXdseQogICogYWxsb2NhdGVkIGZpbGUuIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIHR5cGljYWwgJ2FkZCB0byBvcnBoYW4gZGlyJwogICogb3BlcmF0aW9uIGluIHRoYXQgdGhlIGlub2RlIGRvZXMgbm90IHlldCBleGlzdC4gVGhpcyBpcyBhIHByb2JsZW0gYmVjYXVzZQogICogdGhlIG9ycGhhbiBkaXIgc3RyaW5naWZpZXMgdGhlIGlub2RlIGJsb2NrIG51bWJlciB0byBjb21lIHVwIHdpdGggaXQncwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczJfZnMuaCBiL2ZzL29jZnMyL29jZnMyX2ZzLmgKaW5kZXggYmYyZTc3Ni4uOTM4Mzg3YSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczJfZnMuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMl9mcy5oCkBAIC00NDEsNyArNDQxLDcgQEAKIHN0cnVjdCBvY2ZzMl9ibG9ja19jaGVjayB7CiAvKjAwKi8JX19sZTMyIGJjX2NyYzMyZTsJLyogODAyLjMgRXRoZXJuZXQgSUkgQ1JDMzIgKi8KIAlfX2xlMTYgYmNfZWNjOwkJLyogU2luZ2xlLWVycm9yLWNvcnJlY3Rpb24gcGFyaXR5IHZlY3Rvci4KLQkJCQkgICBUaGlzIGlzIGEgc2ltcGxlIEhhbW1pbmcgY29kZSBkZXBlbmRhbnQKKwkJCQkgICBUaGlzIGlzIGEgc2ltcGxlIEhhbW1pbmcgY29kZSBkZXBlbmRlbnQKIAkJCQkgICBvbiB0aGUgYmxvY2tzaXplLiAgT0NGUzIncyBtYXhpbXVtCiAJCQkJICAgYmxvY2tzaXplLCA0SywgcmVxdWlyZXMgMTYgcGFyaXR5IGJpdHMsCiAJCQkJICAgc28gd2UgZml0IGluIF9fbGUxNi4gKi8KQEAgLTc1MCw3ICs3NTAsNyBAQAogCQkJCQkJCSAgYWZ0ZXIgYW4gdW5jbGVhbgogCQkJCQkJCSAgc2h1dGRvd24gKi8KIAkJfSBqb3VybmFsMTsKLQl9IGlkMTsJCQkJLyogSW5vZGUgdHlwZSBkZXBlbmRhbnQgMSAqLworCX0gaWQxOwkJCQkvKiBJbm9kZSB0eXBlIGRlcGVuZGVudCAxICovCiAvKkMwKi8JdW5pb24gewogCQlzdHJ1Y3Qgb2NmczJfc3VwZXJfYmxvY2sJaV9zdXBlcjsKIAkJc3RydWN0IG9jZnMyX2xvY2FsX2FsbG9jCWlfbGFiOwpAQCAtMTAxOSw3ICsxMDE5LDcgQEAKIAlfX2xlMTYJeGVfbmFtZV9vZmZzZXQ7ICAvKiBieXRlIG9mZnNldCBmcm9tIHRoZSAxc3QgZW50cnkgaW4gdGhlCiAJCQkJICAgIGxvY2FsIHhhdHRyIHN0b3JhZ2UoaW5vZGUsIHhhdHRyIGJsb2NrIG9yCiAJCQkJICAgIHhhdHRyIGJ1Y2tldCkuICovCi0JX191OAl4ZV9uYW1lX2xlbjsJIC8qIHhhdHRyIG5hbWUgbGVuLCBkb2VzJ3QgaW5jbHVkZSBwcmVmaXguICovCisJX191OAl4ZV9uYW1lX2xlbjsJIC8qIHhhdHRyIG5hbWUgbGVuLCBkb2Vzbid0IGluY2x1ZGUgcHJlZml4LiAqLwogCV9fdTgJeGVfdHlwZTsgICAgICAgICAvKiB0aGUgbG93IDcgYml0cyBpbmRpY2F0ZSB0aGUgbmFtZSBwcmVmaXgKIAkJCQkgICogdHlwZSBhbmQgdGhlIGhpZ2hlc3QgYml0IGluZGljYXRlcyB3aGV0aGVyCiAJCQkJICAqIHRoZSBFQSBpcyBzdG9yZWQgaW4gdGhlIGxvY2FsIHN0b3JhZ2UuICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9xdW90YV9nbG9iYWwuYyBiL2ZzL29jZnMyL3F1b3RhX2dsb2JhbC5jCmluZGV4IDI3OWFlZjYuLjkyZmNkNTcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3F1b3RhX2dsb2JhbC5jCisrKyBiL2ZzL29jZnMyL3F1b3RhX2dsb2JhbC5jCkBAIC01NTYsNyArNTU2LDcgQEAKIAlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKIAllcnIgPSBvY2ZzMl9xaW5mb19sb2NrKGluZm8sIGZyZWVpbmcpOwogCWlmIChlcnIgPCAwKSB7Ci0JCW1sb2coTUxfRVJST1IsICJGYWlsZWQgdG8gbG9jayBxdW90YSBpbmZvLCBsb29zaW5nIHF1b3RhIHdyaXRlIgorCQltbG9nKE1MX0VSUk9SLCAiRmFpbGVkIHRvIGxvY2sgcXVvdGEgaW5mbywgbG9zaW5nIHF1b3RhIHdyaXRlIgogCQkJICAgICAgICIgKHR5cGU9JWQsIGlkPSV1KVxuIiwgZHF1b3QtPmRxX3R5cGUsCiAJCQkgICAgICAgKHVuc2lnbmVkKWRxdW90LT5kcV9pZCk7CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvcmVzZXJ2YXRpb25zLmggYi9mcy9vY2ZzMi9yZXNlcnZhdGlvbnMuaAppbmRleCAxZTQ5Y2MyLi40MmMyYjgwIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9yZXNlcnZhdGlvbnMuaAorKysgYi9mcy9vY2ZzMi9yZXNlcnZhdGlvbnMuaApAQCAtMjksNyArMjksNyBAQAogc3RydWN0IG9jZnMyX2FsbG9jX3Jlc2VydmF0aW9uIHsKIAlzdHJ1Y3QgcmJfbm9kZQlyX25vZGU7CiAKLQl1bnNpZ25lZCBpbnQJcl9zdGFydDsJLyogQmVnaW5pbmcgb2YgY3VycmVudCB3aW5kb3cgKi8KKwl1bnNpZ25lZCBpbnQJcl9zdGFydDsJLyogQmVnaW5uaW5nIG9mIGN1cnJlbnQgd2luZG93ICovCiAJdW5zaWduZWQgaW50CXJfbGVuOwkJLyogTGVuZ3RoIG9mIHRoZSB3aW5kb3cgKi8KIAogCXVuc2lnbmVkIGludAlyX2xhc3RfbGVuOwkvKiBMZW5ndGggb2YgbW9zdCByZWNlbnQgYWxsb2MgKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N0YWNrZ2x1ZS5oIGIvZnMvb2NmczIvc3RhY2tnbHVlLmgKaW5kZXggOGNlNzM5OC4uMWVjNTZmZCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3RhY2tnbHVlLmgKKysrIGIvZnMvb2NmczIvc3RhY2tnbHVlLmgKQEAgLTEyNiw3ICsxMjYsNyBAQAogCSAqCiAJICogLT5jb25uZWN0KCkgbXVzdCBub3QgcmV0dXJuIHVudGlsIGl0IGlzIGd1YXJhbnRlZWQgdGhhdAogCSAqCi0JICogIC0gTm9kZSBkb3duIG5vdGlmaWNhdGlvbnMgZm9yIHRoZSBmaWxlc3lzdGVtIHdpbGwgYmUgcmVjaWV2ZWQKKwkgKiAgLSBOb2RlIGRvd24gbm90aWZpY2F0aW9ucyBmb3IgdGhlIGZpbGVzeXN0ZW0gd2lsbCBiZSByZWNlaXZlZAogCSAqICAgIGFuZCBwYXNzZWQgdG8gY29ubi0+Y2NfcmVjb3ZlcnlfaGFuZGxlcigpLgogCSAqICAtIExvY2tpbmcgcmVxdWVzdHMgZm9yIHRoZSBmaWxlc3lzdGVtIHdpbGwgYmUgcHJvY2Vzc2VkLgogCSAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3ViYWxsb2MuYyBiL2ZzL29jZnMyL3N1YmFsbG9jLmMKaW5kZXggYWI2ZTIwNi4uYmE1ZDk3ZSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3ViYWxsb2MuYworKysgYi9mcy9vY2ZzMi9zdWJhbGxvYy5jCkBAIC0xNTExLDcgKzE1MTEsNyBAQAogCQltYXhfYml0cyA9IGxlMTZfdG9fY3B1KGdkLT5iZ19iaXRzKTsKIAogCQkvKiBUYWlsIGdyb3VwcyBpbiBjbHVzdGVyIGJpdG1hcHMgd2hpY2ggYXJlbid0IGNwZwotCQkgKiBhbGlnbmVkIGFyZSBwcm9uZSB0byBwYXJ0aWFsIGV4dGVudGlvbiBieSBhIGZhaWxlZAorCQkgKiBhbGlnbmVkIGFyZSBwcm9uZSB0byBwYXJ0aWFsIGV4dGVuc2lvbiBieSBhIGZhaWxlZAogCQkgKiBmcyByZXNpemUuIElmIHRoZSBmaWxlIHN5c3RlbSByZXNpemUgbmV2ZXIgZ290IHRvCiAJCSAqIHVwZGF0ZSB0aGUgZGlub2RlIGNsdXN0ZXIgY291bnQsIHRoZW4gd2UgZG9uJ3Qgd2FudAogCQkgKiB0byB0cnVzdCBhbnkgY2x1c3RlcnMgcGFzdCBpdCwgcmVnYXJkbGVzcyBvZiB3aGF0CkBAIC0yNDU5LDcgKzI0NTksNyBAQAogCS8qIFRoZSBhbGxvY19iaCBjb21lcyBmcm9tIG9jZnMyX2ZyZWVfZGlub2RlKCkgb3IKIAkgKiBvY2ZzMl9mcmVlX2NsdXN0ZXJzKCkuICBUaGUgY2FsbGVycyBoYXZlIGFsbCBsb2NrZWQgdGhlCiAJICogYWxsb2NhdG9yIGFuZCBnb3R0ZW4gYWxsb2NfYmggZnJvbSB0aGUgbG9jayBjYWxsLiAgVGhpcwotCSAqIHZhbGlkYXRlcyB0aGUgZGlub2RlIGJ1ZmZlci4gIEFueSBjb3JydXB0aW9uIHRoYXQgaGFzIGhhcHBlbmRlZAorCSAqIHZhbGlkYXRlcyB0aGUgZGlub2RlIGJ1ZmZlci4gIEFueSBjb3JydXB0aW9uIHRoYXQgaGFzIGhhcHBlbmVkCiAJICogaXMgYSBjb2RlIGJ1Zy4gKi8KIAlCVUdfT04oIU9DRlMyX0lTX1ZBTElEX0RJTk9ERShmZSkpOwogCUJVR19PTigoY291bnQgKyBzdGFydF9iaXQpID4gb2NmczJfYml0c19wZXJfZ3JvdXAoY2wpKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1cGVyLmMgYi9mcy9vY2ZzMi9zdXBlci5jCmluZGV4IDY5ZmExMWIuLjVhNTIxYzcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1cGVyLmMKKysrIGIvZnMvb2NmczIvc3VwZXIuYwpAQCAtNzgsNyArNzgsNyBAQAogc3RydWN0IGttZW1fY2FjaGUgKm9jZnMyX2RxdW90X2NhY2hlcDsKIHN0cnVjdCBrbWVtX2NhY2hlICpvY2ZzMl9xZl9jaHVua19jYWNoZXA7CiAKLS8qIE9DRlMyIG5lZWRzIHRvIHNjaGVkdWxlIHNldmVyYWwgZGlmZmVybnQgdHlwZXMgb2Ygd29yayB3aGljaAorLyogT0NGUzIgbmVlZHMgdG8gc2NoZWR1bGUgc2V2ZXJhbCBkaWZmZXJlbnQgdHlwZXMgb2Ygd29yayB3aGljaAogICogcmVxdWlyZSBjbHVzdGVyIGxvY2tpbmcsIGRpc2sgSS9PLCByZWNvdmVyeSB3YWl0cywgZXRjLiBTaW5jZSB0aGVzZQogICogdHlwZXMgb2Ygd29yayB0ZW5kIHRvIGJlIGhlYXZ5IHdlIGF2b2lkIHVzaW5nIHRoZSBrZXJuZWwgZXZlbnRzCiAgKiB3b3JrcXVldWUgYW5kIHNjaGVkdWxlIG9uIG91ciBvd24uICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuYwppbmRleCA1N2EyMTVkLi44MWVjZjljIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5jCisrKyBiL2ZzL29jZnMyL3hhdHRyLmMKQEAgLTM1NTQsNyArMzU1NCw3IEBACiAJZG93bl93cml0ZSgmT0NGUzJfSShpbm9kZSktPmlwX3hhdHRyX3NlbSk7CiAJLyoKIAkgKiBTY2FuIGlub2RlIGFuZCBleHRlcm5hbCBibG9jayB0byBmaW5kIHRoZSBzYW1lIG5hbWUKLQkgKiBleHRlbmRlZCBhdHRyaWJ1dGUgYW5kIGNvbGxlY3Qgc2VhcmNoIGluZm9tYXRpb24uCisJICogZXh0ZW5kZWQgYXR0cmlidXRlIGFuZCBjb2xsZWN0IHNlYXJjaCBpbmZvcm1hdGlvbi4KIAkgKi8KIAlyZXQgPSBvY2ZzMl94YXR0cl9pYm9keV9maW5kKGlub2RlLCBuYW1lX2luZGV4LCBuYW1lLCAmeGlzKTsKIAlpZiAocmV0KQpAQCAtMzU3OCw3ICszNTc4LDcgQEAKIAkJCWdvdG8gY2xlYW51cDsKIAl9CiAKLQkvKiBDaGVjayB3aGV0aGVyIHRoZSB2YWx1ZSBpcyByZWZjb3VudGVkIGFuZCBkbyBzb21lIHByZXBhcnRpb24uICovCisJLyogQ2hlY2sgd2hldGhlciB0aGUgdmFsdWUgaXMgcmVmY291bnRlZCBhbmQgZG8gc29tZSBwcmVwYXJhdGlvbi4gKi8KIAlpZiAoT0NGUzJfSShpbm9kZSktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0hBU19SRUZDT1VOVF9GTCAmJgogCSAgICAoIXhpcy5ub3RfZm91bmQgfHwgIXhicy5ub3RfZm91bmQpKSB7CiAJCXJldCA9IG9jZnMyX3ByZXBhcmVfcmVmY291bnRfeGF0dHIoaW5vZGUsIGRpLCAmeGksCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2NoZWNrLmMgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKaW5kZXggYWM1NDY5Ny4uZDU0NWU5NyAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9jaGVjay5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvY2hlY2suYwpAQCAtNTAwLDcgKzUwMCw3IEBACiAJLyogZXZlcnl0aGluZyBpcyB1cCBhbmQgcnVubmluZywgY29tbWVuY2UgKi8KIAlyY3VfYXNzaWduX3BvaW50ZXIocHRibC0+cGFydFtwYXJ0bm9dLCBwKTsKIAotCS8qIHN1cHByZXNzIHVldmVudCBpZiB0aGUgZGlzayBzdXByZXNzZXMgaXQgKi8KKwkvKiBzdXBwcmVzcyB1ZXZlbnQgaWYgdGhlIGRpc2sgc3VwcHJlc3NlcyBpdCAqLwogCWlmICghZGV2X2dldF91ZXZlbnRfc3VwcHJlc3MoZGRldikpCiAJCWtvYmplY3RfdWV2ZW50KCZwZGV2LT5rb2JqLCBLT0JKX0FERCk7CiAKQEAgLTU4NSw3ICs1ODUsNyBAQAogCS8qCiAJICogSWYgYW55IHBhcnRpdGlvbiBjb2RlIHRyaWVkIHRvIHJlYWQgYmV5b25kIEVPRCwgdHJ5CiAJICogdW5sb2NraW5nIG5hdGl2ZSBjYXBhY2l0eSBldmVuIGlmIHBhcnRpdGlvbiB0YWJsZSBpcwotCSAqIHN1Y2Vzc2Z1bGx5IHJlYWQgYXMgd2UgY291bGQgYmUgbWlzc2luZyBzb21lIHBhcnRpdGlvbnMuCisJICogc3VjY2Vzc2Z1bGx5IHJlYWQgYXMgd2UgY291bGQgYmUgbWlzc2luZyBzb21lIHBhcnRpdGlvbnMuCiAJICovCiAJaWYgKHN0YXRlLT5hY2Nlc3NfYmV5b25kX2VvZCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2VmaS5jIGIvZnMvcGFydGl0aW9ucy9lZmkuYwppbmRleCBhYzBjY2I1Li4xOWQ2NzUwIDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2VmaS5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvZWZpLmMKQEAgLTM0OCw2ICszNDgsMTIgQEAKIAkJZ290byBmYWlsOwogCX0KIAorCS8qIENoZWNrIHRoYXQgc2l6ZW9mX3BhcnRpdGlvbl9lbnRyeSBoYXMgdGhlIGNvcnJlY3QgdmFsdWUgKi8KKwlpZiAobGUzMl90b19jcHUoKCpncHQpLT5zaXplb2ZfcGFydGl0aW9uX2VudHJ5KSAhPSBzaXplb2YoZ3B0X2VudHJ5KSkgeworCQlwcl9kZWJ1ZygiR1VJRCBQYXJ0aXRpdGlvbiBFbnRyeSBTaXplIGNoZWNrIGZhaWxlZC5cbiIpOworCQlnb3RvIGZhaWw7CisJfQorCiAJaWYgKCEoKnB0ZXMgPSBhbGxvY19yZWFkX2dwdF9lbnRyaWVzKHN0YXRlLCAqZ3B0KSkpCiAJCWdvdG8gZmFpbDsKIApkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9sZG0uYyBiL2ZzL3BhcnRpdGlvbnMvbGRtLmMKaW5kZXggYjEwZTM1NC4uY2U0ZjYyNCAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9sZG0uYworKysgYi9mcy9wYXJ0aXRpb25zL2xkbS5jCkBAIC0xMjk5LDYgKzEyOTksMTEgQEAKIAogCUJVR19PTiAoIWRhdGEgfHwgIWZyYWdzKTsKIAorCWlmIChzaXplIDwgMiAqIFZCTEtfU0laRV9IRUFEKSB7CisJCWxkbV9lcnJvcigiVmFsdWUgb2Ygc2l6ZSBpcyB0byBzbWFsbC4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwogCWdyb3VwID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGRhdGEgKyAweDA4KTsKIAlyZWMgICA9IGdldF91bmFsaWduZWRfYmUxNihkYXRhICsgMHgwQyk7CiAJbnVtICAgPSBnZXRfdW5hbGlnbmVkX2JlMTYoZGF0YSArIDB4MEUpOwpAQCAtMTMwNiw2ICsxMzExLDEwIEBACiAJCWxkbV9lcnJvciAoIkEgVkJMSyBjbGFpbXMgdG8gaGF2ZSAlZCBwYXJ0cy4iLCBudW0pOwogCQlyZXR1cm4gZmFsc2U7CiAJfQorCWlmIChyZWMgPj0gbnVtKSB7CisJCWxkbV9lcnJvcigiUkVDIHZhbHVlICglZCkgZXhjZWVkcyBOVU0gdmFsdWUgKCVkKSIsIHJlYywgbnVtKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KIAogCWxpc3RfZm9yX2VhY2ggKGl0ZW0sIGZyYWdzKSB7CiAJCWYgPSBsaXN0X2VudHJ5IChpdGVtLCBzdHJ1Y3QgZnJhZywgbGlzdCk7CkBAIC0xMzM0LDEwICsxMzQzLDkgQEAKIAogCWYtPm1hcCB8PSAoMSA8PCByZWMpOwogCi0JaWYgKG51bSA+IDApIHsKLQkJZGF0YSArPSBWQkxLX1NJWkVfSEVBRDsKLQkJc2l6ZSAtPSBWQkxLX1NJWkVfSEVBRDsKLQl9CisJZGF0YSArPSBWQkxLX1NJWkVfSEVBRDsKKwlzaXplIC09IFZCTEtfU0laRV9IRUFEOworCiAJbWVtY3B5IChmLT5kYXRhK3JlYyooc2l6ZS1WQkxLX1NJWkVfSEVBRCkrVkJMS19TSVpFX0hFQUQsIGRhdGEsIHNpemUpOwogCiAJcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IDVhNjcwYzEuLmRmYTUzMjcgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC0yMjAsNyArMjIwLDcgQEAKIAl9CiAKIAkvKgotCSAqIE5vb25lIGVsc2UgaXMgYWxsb3dlZC4KKwkgKiBObyBvbmUgZWxzZSBpcyBhbGxvd2VkLgogCSAqLwogCW1tcHV0KG1tKTsKIAlyZXR1cm4gRVJSX1BUUigtRVBFUk0pOwpAQCAtMzEyNCwxMSArMzEyNCwxNiBAQAogLyogZm9yIHRoZSAvcHJvYy8gZGlyZWN0b3J5IGl0c2VsZiwgYWZ0ZXIgbm9uLXByb2Nlc3Mgc3R1ZmYgaGFzIGJlZW4gZG9uZSAqLwogaW50IHByb2NfcGlkX3JlYWRkaXIoc3RydWN0IGZpbGUgKiBmaWxwLCB2b2lkICogZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcikKIHsKLQl1bnNpZ25lZCBpbnQgbnIgPSBmaWxwLT5mX3BvcyAtIEZJUlNUX1BST0NFU1NfRU5UUlk7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpyZWFwZXIgPSBnZXRfcHJvY190YXNrKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOworCXVuc2lnbmVkIGludCBucjsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJlYXBlcjsKIAlzdHJ1Y3QgdGdpZF9pdGVyIGl0ZXI7CiAJc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zOwogCisJaWYgKGZpbHAtPmZfcG9zID49IFBJRF9NQVhfTElNSVQgKyBUR0lEX09GRlNFVCkKKwkJZ290byBvdXRfbm9fdGFzazsKKwluciA9IGZpbHAtPmZfcG9zIC0gRklSU1RfUFJPQ0VTU19FTlRSWTsKKworCXJlYXBlciA9IGdldF9wcm9jX3Rhc2soZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAJaWYgKCFyZWFwZXIpCiAJCWdvdG8gb3V0X25vX3Rhc2s7CiAKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuYwppbmRleCAyZTdhZGRmLi4zMThkODY1IDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmMKKysrIGIvZnMvcHJvYy90YXNrX21tdS5jCkBAIC0yMTQsNyArMjE0LDcgQEAKIAlpbnQgZmxhZ3MgPSB2bWEtPnZtX2ZsYWdzOwogCXVuc2lnbmVkIGxvbmcgaW5vID0gMDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgcGdvZmYgPSAwOwotCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOwogCWRldl90IGRldiA9IDA7CiAJaW50IGxlbjsKIApAQCAtMjI3LDEzICsyMjcsMTUgQEAKIAogCS8qIFdlIGRvbid0IHNob3cgdGhlIHN0YWNrIGd1YXJkIHBhZ2UgaW4gL3Byb2MvbWFwcyAqLwogCXN0YXJ0ID0gdm1hLT52bV9zdGFydDsKLQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0dST1dTRE9XTikKLQkJaWYgKCF2bWFfc3RhY2tfY29udGludWUodm1hLT52bV9wcmV2LCB2bWEtPnZtX3N0YXJ0KSkKLQkJCXN0YXJ0ICs9IFBBR0VfU0laRTsKKwlpZiAoc3RhY2tfZ3VhcmRfcGFnZV9zdGFydCh2bWEsIHN0YXJ0KSkKKwkJc3RhcnQgKz0gUEFHRV9TSVpFOworCWVuZCA9IHZtYS0+dm1fZW5kOworCWlmIChzdGFja19ndWFyZF9wYWdlX2VuZCh2bWEsIGVuZCkpCisJCWVuZCAtPSBQQUdFX1NJWkU7CiAKIAlzZXFfcHJpbnRmKG0sICIlMDhseC0lMDhseCAlYyVjJWMlYyAlMDhsbHggJTAyeDolMDJ4ICVsdSAlbiIsCiAJCQlzdGFydCwKLQkJCXZtYS0+dm1fZW5kLAorCQkJZW5kLAogCQkJZmxhZ3MgJiBWTV9SRUFEID8gJ3InIDogJy0nLAogCQkJZmxhZ3MgJiBWTV9XUklURSA/ICd3JyA6ICctJywKIAkJCWZsYWdzICYgVk1fRVhFQyA/ICd4JyA6ICctJywKZGlmZiAtLWdpdCBhL2ZzL3BzdG9yZS9LY29uZmlnIGIvZnMvcHN0b3JlL0tjb25maWcKaW5kZXggODY3ZDBhYy4uODAwN2FlNyAxMDA2NDQKLS0tIGEvZnMvcHN0b3JlL0tjb25maWcKKysrIGIvZnMvcHN0b3JlL0tjb25maWcKQEAgLTEsNSArMSw1IEBACiBjb25maWcgUFNUT1JFCi0JYm9vbCAiUGVyc2lzdGFudCBzdG9yZSBzdXBwb3J0IgorCWJvb2wgIlBlcnNpc3RlbnQgc3RvcmUgc3VwcG9ydCIKIAlkZWZhdWx0IG4KIAloZWxwCiAJICAgVGhpcyBvcHRpb24gZW5hYmxlcyBnZW5lcmljIGFjY2VzcyB0byBwbGF0Zm9ybSBsZXZlbApkaWZmIC0tZ2l0IGEvZnMvcHN0b3JlL3BsYXRmb3JtLmMgYi9mcy9wc3RvcmUvcGxhdGZvcm0uYwppbmRleCBmODM1YTI1Li5mMmMzZmYyIDEwMDY0NAotLS0gYS9mcy9wc3RvcmUvcGxhdGZvcm0uYworKysgYi9mcy9wc3RvcmUvcGxhdGZvcm0uYwpAQCAtMTUyLDIxICsxNTIsMjcgQEAKIHZvaWQgcHN0b3JlX2dldF9yZWNvcmRzKHZvaWQpCiB7CiAJc3RydWN0IHBzdG9yZV9pbmZvICpwc2kgPSBwc2luZm87Ci0Jc2l6ZV90CQkJc2l6ZTsKKwlzc2l6ZV90CQkJc2l6ZTsKIAl1NjQJCQlpZDsKIAllbnVtIHBzdG9yZV90eXBlX2lkCXR5cGU7CiAJc3RydWN0IHRpbWVzcGVjCQl0aW1lOwotCWludAkJCWZhaWxlZCA9IDA7CisJaW50CQkJZmFpbGVkID0gMCwgcmM7CiAKIAlpZiAoIXBzaSkKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmcHNpbmZvLT5idWZfbXV0ZXgpOworCXJjID0gcHNpLT5vcGVuKHBzaSk7CisJaWYgKHJjKQorCQlnb3RvIG91dDsKKwogCXdoaWxlICgoc2l6ZSA9IHBzaS0+cmVhZCgmaWQsICZ0eXBlLCAmdGltZSkpID4gMCkgewotCQlpZiAocHN0b3JlX21rZmlsZSh0eXBlLCBwc2ktPm5hbWUsIGlkLCBwc2ktPmJ1Ziwgc2l6ZSwKKwkJaWYgKHBzdG9yZV9ta2ZpbGUodHlwZSwgcHNpLT5uYW1lLCBpZCwgcHNpLT5idWYsIChzaXplX3Qpc2l6ZSwKIAkJCQkgIHRpbWUsIHBzaS0+ZXJhc2UpKQogCQkJZmFpbGVkKys7CiAJfQorCXBzaS0+Y2xvc2UocHNpKTsKK291dDoKIAltdXRleF91bmxvY2soJnBzaW5mby0+YnVmX211dGV4KTsKIAogCWlmIChmYWlsZWQpCmRpZmYgLS1naXQgYS9mcy9xdW90YS9kcXVvdC5jIGIvZnMvcXVvdGEvZHF1b3QuYwppbmRleCBmY2M4YWU3Li5kM2MwMzJmIDEwMDY0NAotLS0gYS9mcy9xdW90YS9kcXVvdC5jCisrKyBiL2ZzL3F1b3RhL2RxdW90LmMKQEAgLTQ0Miw3ICs0NDIsNyBAQAogICovCiBpbnQgZHF1b3RfY29tbWl0KHN0cnVjdCBkcXVvdCAqZHF1b3QpCiB7Ci0JaW50IHJldCA9IDAsIHJldDIgPSAwOworCWludCByZXQgPSAwOwogCXN0cnVjdCBxdW90YV9pbmZvICpkcW9wdCA9IHNiX2Rxb3B0KGRxdW90LT5kcV9zYik7CiAKIAltdXRleF9sb2NrKCZkcW9wdC0+ZHFpb19tdXRleCk7CkBAIC00NTQsMTUgKzQ1NCwxMCBAQAogCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOwogCS8qIEluYWN0aXZlIGRxdW90IGNhbiBiZSBvbmx5IGlmIHRoZXJlIHdhcyBlcnJvciBkdXJpbmcgcmVhZC9pbml0CiAJICogPT4gd2UgaGF2ZSBiZXR0ZXIgbm90IHdyaXRpbmcgaXQgKi8KLQlpZiAodGVzdF9iaXQoRFFfQUNUSVZFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpKSB7CisJaWYgKHRlc3RfYml0KERRX0FDVElWRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKSkKIAkJcmV0ID0gZHFvcHQtPm9wc1tkcXVvdC0+ZHFfdHlwZV0tPmNvbW1pdF9kcWJsayhkcXVvdCk7Ci0JCWlmIChpbmZvX2RpcnR5KCZkcW9wdC0+aW5mb1tkcXVvdC0+ZHFfdHlwZV0pKSB7Ci0JCQlyZXQyID0gZHFvcHQtPm9wc1tkcXVvdC0+ZHFfdHlwZV0tPndyaXRlX2ZpbGVfaW5mbygKLQkJCQkJCWRxdW90LT5kcV9zYiwgZHF1b3QtPmRxX3R5cGUpOwotCQl9Ci0JCWlmIChyZXQgPj0gMCkKLQkJCXJldCA9IHJldDI7Ci0JfQorCWVsc2UKKwkJcmV0ID0gLUVJTzsKIG91dF9zZW06CiAJbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFpb19tdXRleCk7CiAJcmV0dXJuIHJldDsKQEAgLTk1Niw3ICs5NTEsNyBAQAogCiAvKgogICogUmVtb3ZlIHJlZmVyZW5jZXMgdG8gZHF1b3RzIGZyb20gaW5vZGUgYW5kIGFkZCBkcXVvdCB0byBsaXN0IGZvciBmcmVlaW5nCi0gKiBpZiB3ZSBoYXZlIHRoZSBsYXN0IHJlZmVyZWNlIHRvIGRxdW90CisgKiBpZiB3ZSBoYXZlIHRoZSBsYXN0IHJlZmVyZW5jZSB0byBkcXVvdAogICogV2UgY2FuJ3QgcmFjZSB3aXRoIGFueWJvZHkgYmVjYXVzZSB3ZSBob2xkIGRxcHRyX3NlbSBmb3Igd3JpdGluZy4uLgogICovCiBzdGF0aWMgaW50IHJlbW92ZV9pbm9kZV9kcXVvdF9yZWYoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsCmRpZmYgLS1naXQgYS9mcy9yYW1mcy9maWxlLW5vbW11LmMgYi9mcy9yYW1mcy9maWxlLW5vbW11LmMKaW5kZXggOWVlYWQyYy4uZmJiMGI0NyAxMDA2NDQKLS0tIGEvZnMvcmFtZnMvZmlsZS1ub21tdS5jCisrKyBiL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYwpAQCAtMTEyLDYgKzExMiw3IEBACiAJCVNldFBhZ2VEaXJ0eShwYWdlKTsKIAogCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJcHV0X3BhZ2UocGFnZSk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9qb3VybmFsLmMgYi9mcy9yZWlzZXJmcy9qb3VybmFsLmMKaW5kZXggYzc3NTE0Yi4uYzVlODJlYyAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvam91cm5hbC5jCisrKyBiL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAqKiBXcml0ZSBhaGVhZCBsb2dnaW5nIGltcGxlbWVudGF0aW9uIGNvcHlyaWdodCBDaHJpcyBNYXNvbiAyMDAwCiAqKgotKiogVGhlIGJhY2tncm91bmQgY29tbWl0cyBtYWtlIHRoaXMgY29kZSB2ZXJ5IGludGVyZWxhdGVkLCBhbmQKKyoqIFRoZSBiYWNrZ3JvdW5kIGNvbW1pdHMgbWFrZSB0aGlzIGNvZGUgdmVyeSBpbnRlcnJlbGF0ZWQsIGFuZAogKiogb3Zlcmx5IGNvbXBsZXguICBJIG5lZWQgdG8gcmV0aGluayB0aGluZ3MgYSBiaXQuLi4uVGhlIG1ham9yIHBsYXllcnM6CiAqKgogKiogam91cm5hbF9iZWdpbiAtLSBjYWxsIHdpdGggdGhlIG51bWJlciBvZiBibG9ja3MgeW91IGV4cGVjdCB0byBsb2cuCkBAIC0yNzI1LDcgKzI3MjUsNyBAQAogCQkJCQkJIFJFSVNFUkZTX0RJU0tfT0ZGU0VUX0lOX0JZVEVTIC8KIAkJCQkJCSBzYi0+c19ibG9ja3NpemUgKyAyKTsKIAotCS8qIFNhbml0eSBjaGVjayB0byBzZWUgaXMgdGhlIHN0YW5kYXJkIGpvdXJuYWwgZml0dGluZyB3aXRoaW5nIGZpcnN0IGJpdG1hcAorCS8qIFNhbml0eSBjaGVjayB0byBzZWUgaXMgdGhlIHN0YW5kYXJkIGpvdXJuYWwgZml0dGluZyB3aXRoaW4gZmlyc3QgYml0bWFwCiAJICAgKGFjdHVhbCBmb3Igc21hbGwgYmxvY2tzaXplcykgKi8KIAlpZiAoIVNCX09ORElTS19KT1VSTkFMX0RFVklDRShzYikgJiYKIAkgICAgKFNCX0pPVVJOQUxfMXN0X1JFU0VSVkVEX0JMT0NLKHNiKSArCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9sb2NrLmMgYi9mcy9yZWlzZXJmcy9sb2NrLmMKaW5kZXggYjg3YWEyYy4uN2RmMWNlNCAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvbG9jay5jCisrKyBiL2ZzL3JlaXNlcmZzL2xvY2suYwpAQCAtMTUsNyArMTUsNyBAQAogICogZm9yIHRoaXMgbXV0ZXgsIG5vIG5lZWQgZm9yIGEgc3lzdGVtIHdpZGUgbXV0ZXggZmFjaWxpdHkuCiAgKgogICogQWxzbyB0aGlzIGxvY2sgaXMgb2Z0ZW4gcmVsZWFzZWQgYmVmb3JlIGEgY2FsbCB0aGF0IGNvdWxkIGJsb2NrIGJlY2F1c2UKLSAqIHJlaXNlcmZzIHBlcmZvcm1hbmNlcyB3ZXJlIHBhcnRpYWx5IGJhc2VkIG9uIHRoZSByZWxlYXNlIHdoaWxlIHNjaGVkdWxlKCkKKyAqIHJlaXNlcmZzIHBlcmZvcm1hbmNlcyB3ZXJlIHBhcnRpYWxseSBiYXNlZCBvbiB0aGUgcmVsZWFzZSB3aGlsZSBzY2hlZHVsZSgpCiAgKiBwcm9wZXJ0eSBvZiB0aGUgQmtsLgogICovCiB2b2lkIHJlaXNlcmZzX3dyaXRlX2xvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzKQpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvc3VwZXIuYyBiL2ZzL3JlaXNlcmZzL3N1cGVyLmMKaW5kZXggMGFhYjA0Zi4uYjIxNmZmNiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvc3VwZXIuYworKysgYi9mcy9yZWlzZXJmcy9zdXBlci5jCkBAIC0zOTMsNyArMzkzLDcgQEAKIAkvKiBib2R5IG9mICJzYXZlIiBsaW5rICovCiAJbGluayA9IElOT0RFX1BLRVkoaW5vZGUpLT5rX2Rpcl9pZDsKIAotCS8qIHB1dCAic2F2ZSIgbGluayBpbm90IHRyZWUsIGRvbid0IGNoYXJnZSBxdW90YSB0byBhbnlvbmUgKi8KKwkvKiBwdXQgInNhdmUiIGxpbmsgaW50byB0cmVlLCBkb24ndCBjaGFyZ2UgcXVvdGEgdG8gYW55b25lICovCiAJcmV0dmFsID0KIAkgICAgcmVpc2VyZnNfaW5zZXJ0X2l0ZW0odGgsICZwYXRoLCAma2V5LCAmaWgsIE5VTEwsIChjaGFyICopJmxpbmspOwogCWlmIChyZXR2YWwpIHsKQEAgLTIxMDQsNyArMjEwNCw3IEBACiAKIC8qIFJlYWQgZGF0YSBmcm9tIHF1b3RhZmlsZSAtIGF2b2lkIHBhZ2VjYWNoZSBhbmQgc3VjaCBiZWNhdXNlIHdlIGNhbm5vdCBhZmZvcmQKICAqIGFjcXVpcmluZyB0aGUgbG9ja3MuLi4gQXMgcXVvdGEgZmlsZXMgYXJlIG5ldmVyIHRydW5jYXRlZCBhbmQgcXVvdGEgY29kZQotICogaXRzZWxmIHNlcmlhbGl6ZXMgdGhlIG9wZXJhdGlvbnMgKGFuZCBub29uZSBlbHNlIHNob3VsZCB0b3VjaCB0aGUgZmlsZXMpCisgKiBpdHNlbGYgc2VyaWFsaXplcyB0aGUgb3BlcmF0aW9ucyAoYW5kIG5vIG9uZSBlbHNlIHNob3VsZCB0b3VjaCB0aGUgZmlsZXMpCiAgKiB3ZSBkb24ndCBoYXZlIHRvIGJlIGFmcmFpZCBvZiByYWNlcyAqLwogc3RhdGljIHNzaXplX3QgcmVpc2VyZnNfcXVvdGFfcmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgY2hhciAqZGF0YSwKIAkJCQkgICBzaXplX3QgbGVuLCBsb2ZmX3Qgb2ZmKQpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMveGF0dHIuYyBiL2ZzL3JlaXNlcmZzL3hhdHRyLmMKaW5kZXggNWMxMWNhOC4uNDdkMmE0NCAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMveGF0dHIuYworKysgYi9mcy9yZWlzZXJmcy94YXR0ci5jCkBAIC0zOTYsNyArMzk2LDcgQEAKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGRpci0+aV9tYXBwaW5nOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCS8qIFdlIGNhbiBkZWFkbG9jayBpZiB3ZSB0cnkgdG8gZnJlZSBkZW50cmllcywKLQkgICBhbmQgYW4gdW5saW5rL3JtZGlyIGhhcyBqdXN0IG9jY3VyZWQgLSBHRlBfTk9GUyBhdm9pZHMgdGhpcyAqLworCSAgIGFuZCBhbiB1bmxpbmsvcm1kaXIgaGFzIGp1c3Qgb2NjdXJyZWQgLSBHRlBfTk9GUyBhdm9pZHMgdGhpcyAqLwogCW1hcHBpbmdfc2V0X2dmcF9tYXNrKG1hcHBpbmcsIEdGUF9OT0ZTKTsKIAlwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgbiA+PiBQQUdFX0NBQ0hFX1NISUZULCBOVUxMKTsKIAlpZiAoIUlTX0VSUihwYWdlKSkgewpkaWZmIC0tZ2l0IGEvZnMvc3F1YXNoZnMvY2FjaGUuYyBiL2ZzL3NxdWFzaGZzL2NhY2hlLmMKaW5kZXggMjZiMTVhZS4uYzM3YjUyMCAxMDA2NDQKLS0tIGEvZnMvc3F1YXNoZnMvY2FjaGUuYworKysgYi9mcy9zcXVhc2hmcy9jYWNoZS5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIAkJCWVudHJ5ID0gJmNhY2hlLT5lbnRyeVtpXTsKIAogCQkJLyoKLQkJCSAqIEluaXRpYWxpc2UgY2hvb3NlbiBjYWNoZSBlbnRyeSwgYW5kIGZpbGwgaXQgaW4gZnJvbQorCQkJICogSW5pdGlhbGlzZSBjaG9zZW4gY2FjaGUgZW50cnksIGFuZCBmaWxsIGl0IGluIGZyb20KIAkJCSAqIGRpc2suCiAJCQkgKi8KIAkJCWNhY2hlLT51bnVzZWQtLTsKQEAgLTI4Niw3ICsyODYsNyBAQAogCiAKIC8qCi0gKiBDb3B5IHVwdG8gbGVuZ3RoIGJ5dGVzIGZyb20gY2FjaGUgZW50cnkgdG8gYnVmZmVyIHN0YXJ0aW5nIGF0IG9mZnNldCBieXRlcworICogQ29weSB1cCB0byBsZW5ndGggYnl0ZXMgZnJvbSBjYWNoZSBlbnRyeSB0byBidWZmZXIgc3RhcnRpbmcgYXQgb2Zmc2V0IGJ5dGVzCiAgKiBpbnRvIHRoZSBjYWNoZSBlbnRyeS4gIElmIHRoZXJlJ3Mgbm90IGxlbmd0aCBieXRlcyB0aGVuIGNvcHkgdGhlIG51bWJlciBvZgogICogYnl0ZXMgYXZhaWxhYmxlLiAgSW4gYWxsIGNhc2VzIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4KICAqLwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvS2NvbmZpZyBiL2ZzL3ViaWZzL0tjb25maWcKaW5kZXggZDc0NDA5MC4uZjhiMDE2MCAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvS2NvbmZpZworKysgYi9mcy91Ymlmcy9LY29uZmlnCkBAIC00Nyw3ICs0Nyw3IEBACiAJYm9vbCAiRW5hYmxlIGRlYnVnZ2luZyBzdXBwb3J0IgogCWRlcGVuZHMgb24gVUJJRlNfRlMKIAlzZWxlY3QgREVCVUdfRlMKLQlzZWxlY3QgS0FMTFNZTVNfQUxMCisJc2VsZWN0IEtBTExTWU1TCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBVQklGUyBkZWJ1Z2dpbmcgc3VwcG9ydC4gSXQgbWFrZXMgc3VyZSB2YXJpb3VzCiAJICBhc3NlcnRpb25zLCBzZWxmLWNoZWNrcywgZGVidWdnaW5nIG1lc3NhZ2VzIGFuZCB0ZXN0IG1vZGVzIGFyZSBjb21waWxlZApkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvYnVkZ2V0LmMgYi9mcy91Ymlmcy9idWRnZXQuYwppbmRleCBjOGZmMGQxLi44YjNhN2RhIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9idWRnZXQuYworKysgYi9mcy91Ymlmcy9idWRnZXQuYwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJCWlmIChsaWFiMiA8IGxpYWIxKQogCQkJcmV0dXJuIC1FQUdBSU47CiAKLQkJZGJnX2J1ZGcoIm5ldyBsaWFiaWxpdHkgJWxsZCAobm90IHNocmlua2VkKSIsIGxpYWIyKTsKKwkJZGJnX2J1ZGcoIm5ldyBsaWFiaWxpdHkgJWxsZCAobm90IHNocnVuaykiLCBsaWFiMik7CiAKIAkJLyogTGlhYmlsaXR5IGRpZCBub3Qgc2hyaW5rIGFnYWluLCB0cnkgR0MgKi8KIAkJZGJnX2J1ZGcoIlJ1biBHQyIpOwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvY29tbWl0LmMgYi9mcy91Ymlmcy9jb21taXQuYwppbmRleCBiMTQ4ZmJjLi4xYmQwMWRlIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9jb21taXQuYworKysgYi9mcy91Ymlmcy9jb21taXQuYwpAQCAtNTc3LDcgKzU3Nyw3IEBACiAJc2l6ZV90IHN6OwogCiAJaWYgKCEodWJpZnNfY2hrX2ZsYWdzICYgVUJJRlNfQ0hLX09MRF9JRFgpKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIDA7CiAKIAlJTklUX0xJU1RfSEVBRCgmbGlzdCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2RlYnVnLmMgYi9mcy91Ymlmcy9kZWJ1Zy5jCmluZGV4IGYyNWE3MzMuLjAwNGQzNzQgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2RlYnVnLmMKKysrIGIvZnMvdWJpZnMvZGVidWcuYwpAQCAtOTcyLDExICs5NzIsMzkgQEAKIHZvaWQgZGJnX3NhdmVfc3BhY2VfaW5mbyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYykKIHsKIAlzdHJ1Y3QgdWJpZnNfZGVidWdfaW5mbyAqZCA9IGMtPmRiZzsKLQotCXViaWZzX2dldF9scF9zdGF0cyhjLCAmZC0+c2F2ZWRfbHN0KTsKKwlpbnQgZnJlZWFibGVfY250OwogCiAJc3Bpbl9sb2NrKCZjLT5zcGFjZV9sb2NrKTsKKwltZW1jcHkoJmQtPnNhdmVkX2xzdCwgJmMtPmxzdCwgc2l6ZW9mKHN0cnVjdCB1Ymlmc19scF9zdGF0cykpOworCisJLyoKKwkgKiBXZSB1c2UgYSBkaXJ0eSBoYWNrIGhlcmUgYW5kIHplcm8gb3V0IEBjLT5mcmVlYWJsZV9jbnQsIGJlY2F1c2UgaXQKKwkgKiBhZmZlY3RzIHRoZSBmcmVlIHNwYWNlIGNhbGN1bGF0aW9ucywgYW5kIFVCSUZTIG1pZ2h0IG5vdCBrbm93IGFib3V0CisJICogYWxsIGZyZWVhYmxlIGVyYXNlYmxvY2tzLiBJbmRlZWQsIHdlIGtub3cgYWJvdXQgZnJlZWFibGUgZXJhc2VibG9ja3MKKwkgKiBvbmx5IHdoZW4gd2UgcmVhZCB0aGVpciBscHJvcHMsIGFuZCB3ZSBkbyB0aGlzIG9ubHkgbGF6aWx5LCB1cG9uIHRoZQorCSAqIG5lZWQuIFNvIGF0IGFueSBnaXZlbiBwb2ludCBvZiB0aW1lIEBjLT5mcmVlYWJsZV9jbnQgbWlnaHQgYmUgbm90CisJICogZXhhY3RseSBhY2N1cmF0ZS4KKwkgKgorCSAqIEp1c3Qgb25lIGV4YW1wbGUgYWJvdXQgdGhlIGlzc3VlIHdlIGhpdCB3aGVuIHdlIGRpZCBub3QgemVybworCSAqIEBjLT5mcmVlYWJsZV9jbnQuCisJICogMS4gVGhlIGZpbGUtc3lzdGVtIGlzIG1vdW50ZWQgUi9PLCBjLT5mcmVlYWJsZV9jbnQgaXMgJTAuIFdlIHNhdmUgdGhlCisJICogICAgYW1vdW50IG9mIGZyZWUgc3BhY2UgaW4gQGQtPnNhdmVkX2ZyZWUKKwkgKiAyLiBXZSByZS1tb3VudCBSL1csIHdoaWNoIG1ha2VzIFVCSUZTIHRvIHJlYWQgdGhlICJsc2F2ZSIKKwkgKiAgICBpbmZvcm1hdGlvbiBmcm9tIGZsYXNoLCB3aGVyZSB3ZSBjYWNoZSBMRUJzIGZyb20gdmFyaW91cworCSAqICAgIGNhdGVnb3JpZXMgKCd1Ymlmc19yZW1vdW50X2ZzKCknIC0+ICd1Ymlmc19scHRfaW5pdCgpJworCSAqICAgIC0+ICdscHRfaW5pdF93cigpJyAtPiAncmVhZF9sc2F2ZSgpJyAtPiAndWJpZnNfbHB0X2xvb2t1cCgpJworCSAqICAgIC0+ICd1Ymlmc19nZXRfcG5vZGUoKScgLT4gJ3VwZGF0ZV9jYXRzKCknCisJICogICAgLT4gJ3ViaWZzX2FkZF90b19jYXQoKScpLgorCSAqIDMuIExzYXZlIGNvbnRhaW5zIGEgZnJlZWFibGUgZXJhc2VibG9jaywgYW5kIEBjLT5mcmVlYWJsZV9jbnQKKwkgKiAgICBiZWNvbWVzICUxLgorCSAqIDQuIFdlIGNhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIGZyZWUgc3BhY2Ugd2hlbiB0aGUgcmUtbW91bnQgaXMKKwkgKiAgICBmaW5pc2hlZCBpbiAnZGJnX2NoZWNrX3NwYWNlX2luZm8oKScgYW5kIGl0IGRvZXMgbm90IG1hdGNoCisJICogICAgQGQtPnNhdmVkX2ZyZWUuCisJICovCisJZnJlZWFibGVfY250ID0gYy0+ZnJlZWFibGVfY250OworCWMtPmZyZWVhYmxlX2NudCA9IDA7CiAJZC0+c2F2ZWRfZnJlZSA9IHViaWZzX2dldF9mcmVlX3NwYWNlX25vbG9jayhjKTsKKwljLT5mcmVlYWJsZV9jbnQgPSBmcmVlYWJsZV9jbnQ7CiAJc3Bpbl91bmxvY2soJmMtPnNwYWNlX2xvY2spOwogfQogCkBAIC05OTMsMTIgKzEwMjEsMTUgQEAKIHsKIAlzdHJ1Y3QgdWJpZnNfZGVidWdfaW5mbyAqZCA9IGMtPmRiZzsKIAlzdHJ1Y3QgdWJpZnNfbHBfc3RhdHMgbHN0OwotCWxvbmcgbG9uZyBhdmFpbCwgZnJlZTsKKwlsb25nIGxvbmcgZnJlZTsKKwlpbnQgZnJlZWFibGVfY250OwogCiAJc3Bpbl9sb2NrKCZjLT5zcGFjZV9sb2NrKTsKLQlhdmFpbCA9IHViaWZzX2NhbGNfYXZhaWxhYmxlKGMsIGMtPm1pbl9pZHhfbGVicyk7CisJZnJlZWFibGVfY250ID0gYy0+ZnJlZWFibGVfY250OworCWMtPmZyZWVhYmxlX2NudCA9IDA7CisJZnJlZSA9IHViaWZzX2dldF9mcmVlX3NwYWNlX25vbG9jayhjKTsKKwljLT5mcmVlYWJsZV9jbnQgPSBmcmVlYWJsZV9jbnQ7CiAJc3Bpbl91bmxvY2soJmMtPnNwYWNlX2xvY2spOwotCWZyZWUgPSB1Ymlmc19nZXRfZnJlZV9zcGFjZShjKTsKIAogCWlmIChmcmVlICE9IGQtPnNhdmVkX2ZyZWUpIHsKIAkJdWJpZnNfZXJyKCJmcmVlIHNwYWNlIGNoYW5nZWQgZnJvbSAlbGxkIHRvICVsbGQiLApAQCAtMjgwNiw0MCArMjgzNywzOCBAQAogCXN0cnVjdCB1Ymlmc19kZWJ1Z19pbmZvICpkID0gYy0+ZGJnOwogCiAJc3ByaW50ZihkLT5kZnNfZGlyX25hbWUsICJ1YmklZF8lZCIsIGMtPnZpLnViaV9udW0sIGMtPnZpLnZvbF9pZCk7Ci0JZC0+ZGZzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihkLT5kZnNfZGlyX25hbWUsIGRmc19yb290ZGlyKTsKLQlpZiAoSVNfRVJSKGQtPmRmc19kaXIpKSB7Ci0JCWVyciA9IFBUUl9FUlIoZC0+ZGZzX2Rpcik7Ci0JCXViaWZzX2VycigiY2Fubm90IGNyZWF0ZSBcIiVzXCIgZGVidWdmcyBkaXJlY3RvcnksIGVycm9yICVkXG4iLAotCQkJICBkLT5kZnNfZGlyX25hbWUsIGVycik7CisJZm5hbWUgPSBkLT5kZnNfZGlyX25hbWU7CisJZGVudCA9IGRlYnVnZnNfY3JlYXRlX2RpcihmbmFtZSwgZGZzX3Jvb3RkaXIpOworCWlmIChJU19FUlJfT1JfTlVMTChkZW50KSkKIAkJZ290byBvdXQ7Ci0JfQorCWQtPmRmc19kaXIgPSBkZW50OwogCiAJZm5hbWUgPSAiZHVtcF9scHJvcHMiOwogCWRlbnQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGZuYW1lLCBTX0lXVVNSLCBkLT5kZnNfZGlyLCBjLCAmZGZzX2ZvcHMpOwotCWlmIChJU19FUlIoZGVudCkpCisJaWYgKElTX0VSUl9PUl9OVUxMKGRlbnQpKQogCQlnb3RvIG91dF9yZW1vdmU7CiAJZC0+ZGZzX2R1bXBfbHByb3BzID0gZGVudDsKIAogCWZuYW1lID0gImR1bXBfYnVkZyI7CiAJZGVudCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoZm5hbWUsIFNfSVdVU1IsIGQtPmRmc19kaXIsIGMsICZkZnNfZm9wcyk7Ci0JaWYgKElTX0VSUihkZW50KSkKKwlpZiAoSVNfRVJSX09SX05VTEwoZGVudCkpCiAJCWdvdG8gb3V0X3JlbW92ZTsKIAlkLT5kZnNfZHVtcF9idWRnID0gZGVudDsKIAogCWZuYW1lID0gImR1bXBfdG5jIjsKIAlkZW50ID0gZGVidWdmc19jcmVhdGVfZmlsZShmbmFtZSwgU19JV1VTUiwgZC0+ZGZzX2RpciwgYywgJmRmc19mb3BzKTsKLQlpZiAoSVNfRVJSKGRlbnQpKQorCWlmIChJU19FUlJfT1JfTlVMTChkZW50KSkKIAkJZ290byBvdXRfcmVtb3ZlOwogCWQtPmRmc19kdW1wX3RuYyA9IGRlbnQ7CiAKIAlyZXR1cm4gMDsKIAogb3V0X3JlbW92ZToKLQllcnIgPSBQVFJfRVJSKGRlbnQpOwotCXViaWZzX2VycigiY2Fubm90IGNyZWF0ZSBcIiVzXCIgZGVidWdmcyBkaXJlY3RvcnksIGVycm9yICVkXG4iLAotCQkgIGZuYW1lLCBlcnIpOwogCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkLT5kZnNfZGlyKTsKIG91dDoKKwllcnIgPSBkZW50ID8gUFRSX0VSUihkZW50KSA6IC1FTk9ERVY7CisJdWJpZnNfZXJyKCJjYW5ub3QgY3JlYXRlIFwiJXNcIiBkZWJ1Z2ZzIGRpcmVjdG9yeSwgZXJyb3IgJWRcbiIsCisJCSAgZm5hbWUsIGVycik7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvZGVidWcuaCBiL2ZzL3ViaWZzL2RlYnVnLmgKaW5kZXggOTE5ZjBkZS4uZTY0OTNjYSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvZGVidWcuaAorKysgYi9mcy91Ymlmcy9kZWJ1Zy5oCkBAIC0yMyw2ICsyMywxMiBAQAogI2lmbmRlZiBfX1VCSUZTX0RFQlVHX0hfXwogI2RlZmluZSBfX1VCSUZTX0RFQlVHX0hfXwogCisvKiBDaGVja2luZyBoZWxwZXIgZnVuY3Rpb25zICovCit0eXBlZGVmIGludCAoKmRiZ19sZWFmX2NhbGxiYWNrKShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKKwkJCQkgc3RydWN0IHViaWZzX3picmFuY2ggKnpiciwgdm9pZCAqcHJpdik7Cit0eXBlZGVmIGludCAoKmRiZ196bm9kZV9jYWxsYmFjaykoc3RydWN0IHViaWZzX2luZm8gKmMsCisJCQkJICBzdHJ1Y3QgdWJpZnNfem5vZGUgKnpub2RlLCB2b2lkICpwcml2KTsKKwogI2lmZGVmIENPTkZJR19VQklGU19GU19ERUJVRwogCiAvKioKQEAgLTI3MCwxMSArMjc2LDYgQEAKIHZvaWQgZGJnX2R1bXBfaW5kZXgoc3RydWN0IHViaWZzX2luZm8gKmMpOwogdm9pZCBkYmdfZHVtcF9scHRfbGVicyhjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYyk7CiAKLS8qIENoZWNraW5nIGhlbHBlciBmdW5jdGlvbnMgKi8KLXR5cGVkZWYgaW50ICgqZGJnX2xlYWZfY2FsbGJhY2spKHN0cnVjdCB1Ymlmc19pbmZvICpjLAotCQkJCSBzdHJ1Y3QgdWJpZnNfemJyYW5jaCAqemJyLCB2b2lkICpwcml2KTsKLXR5cGVkZWYgaW50ICgqZGJnX3pub2RlX2NhbGxiYWNrKShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKLQkJCQkgIHN0cnVjdCB1Ymlmc196bm9kZSAqem5vZGUsIHZvaWQgKnByaXYpOwogaW50IGRiZ193YWxrX2luZGV4KHN0cnVjdCB1Ymlmc19pbmZvICpjLCBkYmdfbGVhZl9jYWxsYmFjayBsZWFmX2NiLAogCQkgICBkYmdfem5vZGVfY2FsbGJhY2sgem5vZGVfY2IsIHZvaWQgKnByaXYpOwogCkBAIC0yOTUsNyArMjk2LDYgQEAKIGludCBkYmdfY2hlY2tfZmlsZXN5c3RlbShzdHJ1Y3QgdWJpZnNfaW5mbyAqYyk7CiB2b2lkIGRiZ19jaGVja19oZWFwKHN0cnVjdCB1Ymlmc19pbmZvICpjLCBzdHJ1Y3QgdWJpZnNfbHB0X2hlYXAgKmhlYXAsIGludCBjYXQsCiAJCSAgICBpbnQgYWRkX3Bvcyk7Ci1pbnQgZGJnX2NoZWNrX2xwcm9wcyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYyk7CiBpbnQgZGJnX2NoZWNrX2xwdF9ub2RlcyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgc3RydWN0IHViaWZzX2Nub2RlICpjbm9kZSwKIAkJCWludCByb3csIGludCBjb2wpOwogaW50IGRiZ19jaGVja19pbm9kZV9zaXplKHN0cnVjdCB1Ymlmc19pbmZvICpjLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLApAQCAtNDAxLDU4ICs0MDEsOTQgQEAKICNkZWZpbmUgREJHS0VZKGtleSkgICgoY2hhciAqKShrZXkpKQogI2RlZmluZSBEQkdLRVkxKGtleSkgKChjaGFyICopKGtleSkpCiAKLSNkZWZpbmUgdWJpZnNfZGVidWdnaW5nX2luaXQoYykgICAgICAgICAgICAgICAgMAotI2RlZmluZSB1Ymlmc19kZWJ1Z2dpbmdfZXhpdChjKSAgICAgICAgICAgICAgICAoe30pCitzdGF0aWMgaW5saW5lIGludCB1Ymlmc19kZWJ1Z2dpbmdfaW5pdChzdHJ1Y3QgdWJpZnNfaW5mbyAqYykgICAgICB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdWJpZnNfZGVidWdnaW5nX2V4aXQoc3RydWN0IHViaWZzX2luZm8gKmMpICAgICB7IHJldHVybjsgfQorc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpkYmdfbnR5cGUoaW50IHR5cGUpICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gIiI7IH0KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqZGJnX2NzdGF0ZShpbnQgY210X3N0YXRlKSAgICAgICAgICAgICAgIHsgcmV0dXJuICIiOyB9CitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmRiZ19qaGVhZChpbnQgamhlYWQpICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAiIjsgfQorc3RhdGljIGlubGluZSBjb25zdCBjaGFyICoKK2RiZ19nZXRfa2V5X2R1bXAoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsCisJCSBjb25zdCB1bmlvbiB1Ymlmc19rZXkgKmtleSkgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gIiI7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBkYmdfZHVtcF9pbm9kZShjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKKwkJCQkgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpICAgICAgeyByZXR1cm47IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBkYmdfZHVtcF9ub2RlKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLAorCQkJCSBjb25zdCB2b2lkICpub2RlKSAgICAgICAgICAgICAgICB7IHJldHVybjsgfQorc3RhdGljIGlubGluZSB2b2lkIGRiZ19kdW1wX2xwdF9ub2RlKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLAorCQkJCSAgICAgdm9pZCAqbm9kZSwgaW50IGxudW0sCisJCQkJICAgICBpbnQgb2ZmcykgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuOyB9CitzdGF0aWMgaW5saW5lIHZvaWQKK2RiZ19kdW1wX2J1ZGdldF9yZXEoY29uc3Qgc3RydWN0IHViaWZzX2J1ZGdldF9yZXEgKnJlcSkgICAgICAgICAgIHsgcmV0dXJuOyB9CitzdGF0aWMgaW5saW5lIHZvaWQKK2RiZ19kdW1wX2xzdGF0cyhjb25zdCBzdHJ1Y3QgdWJpZnNfbHBfc3RhdHMgKmxzdCkgICAgICAgICAgICAgICAgIHsgcmV0dXJuOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZGJnX2R1bXBfYnVkZyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYykgICAgICAgICAgICB7IHJldHVybjsgfQorc3RhdGljIGlubGluZSB2b2lkIGRiZ19kdW1wX2xwcm9wKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLAorCQkJCSAgY29uc3Qgc3RydWN0IHViaWZzX2xwcm9wcyAqbHApICB7IHJldHVybjsgfQorc3RhdGljIGlubGluZSB2b2lkIGRiZ19kdW1wX2xwcm9wcyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYykgICAgICAgICAgeyByZXR1cm47IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBkYmdfZHVtcF9scHRfaW5mbyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYykgICAgICAgIHsgcmV0dXJuOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZGJnX2R1bXBfbGViKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLAorCQkJCWludCBsbnVtKSAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybjsgfQorc3RhdGljIGlubGluZSB2b2lkCitkYmdfZHVtcF96bm9kZShjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKKwkgICAgICAgY29uc3Qgc3RydWN0IHViaWZzX3pub2RlICp6bm9kZSkgICAgICAgICAgICAgICAgICAgeyByZXR1cm47IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBkYmdfZHVtcF9oZWFwKHN0cnVjdCB1Ymlmc19pbmZvICpjLAorCQkJCSBzdHJ1Y3QgdWJpZnNfbHB0X2hlYXAgKmhlYXAsCisJCQkJIGludCBjYXQpICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZGJnX2R1bXBfcG5vZGUoc3RydWN0IHViaWZzX2luZm8gKmMsCisJCQkJICBzdHJ1Y3QgdWJpZnNfcG5vZGUgKnBub2RlLAorCQkJCSAgc3RydWN0IHViaWZzX25ub2RlICpwYXJlbnQsCisJCQkJICBpbnQgaWlwKSAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZGJnX2R1bXBfdG5jKHN0cnVjdCB1Ymlmc19pbmZvICpjKSAgICAgICAgICAgICB7IHJldHVybjsgfQorc3RhdGljIGlubGluZSB2b2lkIGRiZ19kdW1wX2luZGV4KHN0cnVjdCB1Ymlmc19pbmZvICpjKSAgICAgICAgICAgeyByZXR1cm47IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBkYmdfZHVtcF9scHRfbGVicyhjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYykgIHsgcmV0dXJuOyB9CiAKLSNkZWZpbmUgZGJnX250eXBlKHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgIiIKLSNkZWZpbmUgZGJnX2NzdGF0ZShjbXRfc3RhdGUpICAgICAgICAgICAgICAgICAgIiIKLSNkZWZpbmUgZGJnX2poZWFkKGpoZWFkKSAgICAgICAgICAgICAgICAgICAgICAgIiIKLSNkZWZpbmUgZGJnX2dldF9rZXlfZHVtcChjLCBrZXkpICAgICAgICAgICAgICAgKHt9KQotI2RlZmluZSBkYmdfZHVtcF9pbm9kZShjLCBpbm9kZSkgICAgICAgICAgICAgICAoe30pCi0jZGVmaW5lIGRiZ19kdW1wX25vZGUoYywgbm9kZSkgICAgICAgICAgICAgICAgICh7fSkKLSNkZWZpbmUgZGJnX2R1bXBfbHB0X25vZGUoYywgbm9kZSwgbG51bSwgb2ZmcykgKHt9KQotI2RlZmluZSBkYmdfZHVtcF9idWRnZXRfcmVxKHJlcSkgICAgICAgICAgICAgICAoe30pCi0jZGVmaW5lIGRiZ19kdW1wX2xzdGF0cyhsc3QpICAgICAgICAgICAgICAgICAgICh7fSkKLSNkZWZpbmUgZGJnX2R1bXBfYnVkZyhjKSAgICAgICAgICAgICAgICAgICAgICAgKHt9KQotI2RlZmluZSBkYmdfZHVtcF9scHJvcChjLCBscCkgICAgICAgICAgICAgICAgICAoe30pCi0jZGVmaW5lIGRiZ19kdW1wX2xwcm9wcyhjKSAgICAgICAgICAgICAgICAgICAgICh7fSkKLSNkZWZpbmUgZGJnX2R1bXBfbHB0X2luZm8oYykgICAgICAgICAgICAgICAgICAgKHt9KQotI2RlZmluZSBkYmdfZHVtcF9sZWIoYywgbG51bSkgICAgICAgICAgICAgICAgICAoe30pCi0jZGVmaW5lIGRiZ19kdW1wX3pub2RlKGMsIHpub2RlKSAgICAgICAgICAgICAgICh7fSkKLSNkZWZpbmUgZGJnX2R1bXBfaGVhcChjLCBoZWFwLCBjYXQpICAgICAgICAgICAgKHt9KQotI2RlZmluZSBkYmdfZHVtcF9wbm9kZShjLCBwbm9kZSwgcGFyZW50LCBpaXApICAoe30pCi0jZGVmaW5lIGRiZ19kdW1wX3RuYyhjKSAgICAgICAgICAgICAgICAgICAgICAgICh7fSkKLSNkZWZpbmUgZGJnX2R1bXBfaW5kZXgoYykgICAgICAgICAgICAgICAgICAgICAgKHt9KQotI2RlZmluZSBkYmdfZHVtcF9scHRfbGVicyhjKSAgICAgICAgICAgICAgICAgICAoe30pCitzdGF0aWMgaW5saW5lIGludCBkYmdfd2Fsa19pbmRleChzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKKwkJCQkgZGJnX2xlYWZfY2FsbGJhY2sgbGVhZl9jYiwKKwkJCQkgZGJnX3pub2RlX2NhbGxiYWNrIHpub2RlX2NiLAorCQkJCSB2b2lkICpwcml2KSAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZGJnX3NhdmVfc3BhY2VfaW5mbyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYykgICAgICB7IHJldHVybjsgfQorc3RhdGljIGlubGluZSBpbnQgZGJnX2NoZWNrX3NwYWNlX2luZm8oc3RydWN0IHViaWZzX2luZm8gKmMpICAgICAgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgZGJnX2NoZWNrX2xwcm9wcyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYykgICAgICAgICAgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQKK2RiZ19vbGRfaW5kZXhfY2hlY2tfaW5pdChzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKKwkJCSBzdHJ1Y3QgdWJpZnNfemJyYW5jaCAqenJvb3QpICAgICAgICAgICAgIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50CitkYmdfY2hlY2tfb2xkX2luZGV4KHN0cnVjdCB1Ymlmc19pbmZvICpjLAorCQkgICAgc3RydWN0IHViaWZzX3picmFuY2ggKnpyb290KSAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGRiZ19jaGVja19jYXRzKHN0cnVjdCB1Ymlmc19pbmZvICpjKSAgICAgICAgICAgIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGRiZ19jaGVja19sdGFiKHN0cnVjdCB1Ymlmc19pbmZvICpjKSAgICAgICAgICAgIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGRiZ19jaGtfbHB0X2ZyZWVfc3BjKHN0cnVjdCB1Ymlmc19pbmZvICpjKSAgICAgIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGRiZ19jaGtfbHB0X3N6KHN0cnVjdCB1Ymlmc19pbmZvICpjLAorCQkJCSBpbnQgYWN0aW9uLCBpbnQgbGVuKSAgICAgICAgICAgICB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBkYmdfY2hlY2tfc3luY2VkX2lfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKSAgICB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBkYmdfY2hlY2tfZGlyX3NpemUoc3RydWN0IHViaWZzX2luZm8gKmMsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmRpcikgICAgIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGRiZ19jaGVja190bmMoc3RydWN0IHViaWZzX2luZm8gKmMsIGludCBleHRyYSkgIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGRiZ19jaGVja19pZHhfc2l6ZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKKwkJCQkgICAgIGxvbmcgbG9uZyBpZHhfc2l6ZSkgICAgICAgICAgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgZGJnX2NoZWNrX2ZpbGVzeXN0ZW0oc3RydWN0IHViaWZzX2luZm8gKmMpICAgICAgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIGRiZ19jaGVja19oZWFwKHN0cnVjdCB1Ymlmc19pbmZvICpjLAorCQkJCSAgc3RydWN0IHViaWZzX2xwdF9oZWFwICpoZWFwLAorCQkJCSAgaW50IGNhdCwgaW50IGFkZF9wb3MpICAgICAgICAgICB7IHJldHVybjsgfQorc3RhdGljIGlubGluZSBpbnQgZGJnX2NoZWNrX2xwdF9ub2RlcyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKKwlzdHJ1Y3QgdWJpZnNfY25vZGUgKmNub2RlLCBpbnQgcm93LCBpbnQgY29sKSAgICAgICAgICAgICAgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgZGJnX2NoZWNrX2lub2RlX3NpemUoc3RydWN0IHViaWZzX2luZm8gKmMsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICAgIGxvZmZfdCBzaXplKSAgICAgICAgICAgICAgIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50CitkYmdfY2hlY2tfZGF0YV9ub2Rlc19vcmRlcihzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKKwkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpICAgICAgICAgICAgICAgIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50CitkYmdfY2hlY2tfbm9uZGF0YV9ub2Rlc19vcmRlcihzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKKwkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpICAgICAgICAgICAgIHsgcmV0dXJuIDA7IH0KIAotI2RlZmluZSBkYmdfd2Fsa19pbmRleChjLCBsZWFmX2NiLCB6bm9kZV9jYiwgcHJpdikgMAotI2RlZmluZSBkYmdfb2xkX2luZGV4X2NoZWNrX2luaXQoYywgenJvb3QpICAgICAgICAgMAotI2RlZmluZSBkYmdfc2F2ZV9zcGFjZV9pbmZvKGMpICAgICAgICAgICAgICAgICAgICAgKHt9KQotI2RlZmluZSBkYmdfY2hlY2tfc3BhY2VfaW5mbyhjKSAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBkYmdfY2hlY2tfb2xkX2luZGV4KGMsIHpyb290KSAgICAgICAgICAgICAgMAotI2RlZmluZSBkYmdfY2hlY2tfY2F0cyhjKSAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBkYmdfY2hlY2tfbHRhYihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBkYmdfY2hrX2xwdF9mcmVlX3NwYyhjKSAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBkYmdfY2hrX2xwdF9zeihjLCBhY3Rpb24sIGxlbikgICAgICAgICAgICAgMAotI2RlZmluZSBkYmdfY2hlY2tfc3luY2VkX2lfc2l6ZShpbm9kZSkgICAgICAgICAgICAgMAotI2RlZmluZSBkYmdfY2hlY2tfZGlyX3NpemUoYywgZGlyKSAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBkYmdfY2hlY2tfdG5jKGMsIHgpICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBkYmdfY2hlY2tfaWR4X3NpemUoYywgaWR4X3NpemUpICAgICAgICAgICAgMAotI2RlZmluZSBkYmdfY2hlY2tfZmlsZXN5c3RlbShjKSAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBkYmdfY2hlY2tfaGVhcChjLCBoZWFwLCBjYXQsIGFkZF9wb3MpICAgICAgKHt9KQotI2RlZmluZSBkYmdfY2hlY2tfbHByb3BzKGMpICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBkYmdfY2hlY2tfbHB0X25vZGVzKGMsIGNub2RlLCByb3csIGNvbCkgICAgMAotI2RlZmluZSBkYmdfY2hlY2tfaW5vZGVfc2l6ZShjLCBpbm9kZSwgc2l6ZSkgICAgICAgMAotI2RlZmluZSBkYmdfY2hlY2tfZGF0YV9ub2Rlc19vcmRlcihjLCBoZWFkKSAgICAgICAgMAotI2RlZmluZSBkYmdfY2hlY2tfbm9uZGF0YV9ub2Rlc19vcmRlcihjLCBoZWFkKSAgICAgMAotI2RlZmluZSBkYmdfZm9yY2VfaW5fdGhlX2dhcHNfZW5hYmxlZCAgICAgICAgICAgICAgMAotI2RlZmluZSBkYmdfZm9yY2VfaW5fdGhlX2dhcHMoKSAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBkYmdfZmFpbHVyZV9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorc3RhdGljIGlubGluZSBpbnQgZGJnX2ZvcmNlX2luX3RoZV9nYXBzKHZvaWQpICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gMDsgfQorI2RlZmluZSBkYmdfZm9yY2VfaW5fdGhlX2dhcHNfZW5hYmxlZCAwCisjZGVmaW5lIGRiZ19mYWlsdXJlX21vZGUgICAgICAgICAgICAgIDAKIAotI2RlZmluZSBkYmdfZGVidWdmc19pbml0KCkgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBkYmdfZGVidWdmc19leGl0KCkKLSNkZWZpbmUgZGJnX2RlYnVnZnNfaW5pdF9mcyhjKSAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgZGJnX2RlYnVnZnNfZXhpdF9mcyhjKSAgICAgICAgICAgICAgICAgICAgIDAKK3N0YXRpYyBpbmxpbmUgaW50IGRiZ19kZWJ1Z2ZzX2luaXQodm9pZCkgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBkYmdfZGVidWdmc19leGl0KHZvaWQpICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuOyB9CitzdGF0aWMgaW5saW5lIGludCBkYmdfZGVidWdmc19pbml0X2ZzKHN0cnVjdCB1Ymlmc19pbmZvICpjKSAgICAgICB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBkYmdfZGVidWdmc19leGl0X2ZzKHN0cnVjdCB1Ymlmc19pbmZvICpjKSAgICAgICB7IHJldHVybiAwOyB9CiAKICNlbmRpZiAvKiAhQ09ORklHX1VCSUZTX0ZTX0RFQlVHICovCiAjZW5kaWYgLyogIV9fVUJJRlNfREVCVUdfSF9fICovCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9maWxlLmMgYi9mcy91Ymlmcy9maWxlLmMKaW5kZXggMjhiZTFlNi4uYjI4NmRiNyAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvZmlsZS5jCisrKyBiL2ZzL3ViaWZzL2ZpbGUuYwpAQCAtMTMxMiw2ICsxMzEyLDkgQEAKIAogCWRiZ19nZW4oInN5bmNpbmcgaW5vZGUgJWx1IiwgaW5vZGUtPmlfaW5vKTsKIAorCWlmIChpbm9kZS0+aV9zYi0+c19mbGFncyAmIE1TX1JET05MWSkKKwkJcmV0dXJuIDA7CisKIAkvKgogCSAqIFZGUyBoYXMgYWxyZWFkeSBzeW5jaHJvbml6ZWQgZGlydHkgcGFnZXMgZm9yIHRoaXMgaW5vZGUuIFN5bmNocm9uaXplCiAJICogdGhlIGlub2RlIHVubGVzcyB0aGlzIGlzIGEgJ2RhdGFzeW5jKCknIGNhbGwuCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9sb2cuYyBiL2ZzL3ViaWZzL2xvZy5jCmluZGV4IDRkMGNiMTIuLjQwZmE3ODAgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2xvZy5jCisrKyBiL2ZzL3ViaWZzL2xvZy5jCkBAIC0xNzUsMjYgKzE3NSw2IEBACiB9CiAKIC8qKgotICogdWJpZnNfY3JlYXRlX2J1ZHNfbGlzdHMgLSBjcmVhdGUgam91cm5hbCBoZWFkIGJ1ZHMgbGlzdHMgZm9yIHJlbW91bnQgcncuCi0gKiBAYzogVUJJRlMgZmlsZS1zeXN0ZW0gZGVzY3JpcHRpb24gb2JqZWN0Ci0gKi8KLXZvaWQgdWJpZnNfY3JlYXRlX2J1ZHNfbGlzdHMoc3RydWN0IHViaWZzX2luZm8gKmMpCi17Ci0Jc3RydWN0IHJiX25vZGUgKnA7Ci0KLQlzcGluX2xvY2soJmMtPmJ1ZHNfbG9jayk7Ci0JcCA9IHJiX2ZpcnN0KCZjLT5idWRzKTsKLQl3aGlsZSAocCkgewotCQlzdHJ1Y3QgdWJpZnNfYnVkICpidWQgPSByYl9lbnRyeShwLCBzdHJ1Y3QgdWJpZnNfYnVkLCByYik7Ci0JCXN0cnVjdCB1Ymlmc19qaGVhZCAqamhlYWQgPSAmYy0+amhlYWRzW2J1ZC0+amhlYWRdOwotCi0JCWxpc3RfYWRkX3RhaWwoJmJ1ZC0+bGlzdCwgJmpoZWFkLT5idWRzX2xpc3QpOwotCQlwID0gcmJfbmV4dChwKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmMtPmJ1ZHNfbG9jayk7Ci19Ci0KLS8qKgogICogdWJpZnNfYWRkX2J1ZF90b19sb2cgLSBhZGQgYSBuZXcgYnVkIHRvIHRoZSBsb2cuCiAgKiBAYzogVUJJRlMgZmlsZS1zeXN0ZW0gZGVzY3JpcHRpb24gb2JqZWN0CiAgKiBAamhlYWQ6IGpvdXJuYWwgaGVhZCB0aGUgYnVkIGJlbG9uZ3MgdG8KZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2xwdC5jIGIvZnMvdWJpZnMvbHB0LmMKaW5kZXggNzI3NzVkMy4uZWY1MTU1ZSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvbHB0LmMKKysrIGIvZnMvdWJpZnMvbHB0LmMKQEAgLTEyNzAsMTAgKzEyNzAsOSBAQAogCWxudW0gPSBicmFuY2gtPmxudW07CiAJb2ZmcyA9IGJyYW5jaC0+b2ZmczsKIAlwbm9kZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1Ymlmc19wbm9kZSksIEdGUF9OT0ZTKTsKLQlpZiAoIXBub2RlKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAoIXBub2RlKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCWlmIChsbnVtID09IDApIHsKIAkJLyoKIAkJICogVGhpcyBwbm9kZSB3YXMgbm90IHdyaXR0ZW4gd2hpY2gganVzdCBtZWFucyB0aGF0IHRoZSBMRUIKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3JlY292ZXJ5LmMgYi9mcy91Ymlmcy9yZWNvdmVyeS5jCmluZGV4IDkzNmYyY2IuLjNkYmFkNmYgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3JlY292ZXJ5LmMKKysrIGIvZnMvdWJpZnMvcmVjb3ZlcnkuYwpAQCAtMzE3LDYgKzMxNywzMiBAQAogCQkJZ290byBvdXRfZnJlZTsKIAkJfQogCQltZW1jcHkoYy0+cmN2cmRfbXN0X25vZGUsIGMtPm1zdF9ub2RlLCBVQklGU19NU1RfTk9ERV9TWik7CisKKwkJLyoKKwkJICogV2UgaGFkIHRvIHJlY292ZXIgdGhlIG1hc3RlciBub2RlLCB3aGljaCBtZWFucyB0aGVyZSB3YXMgYW4KKwkJICogdW5jbGVhbiByZWJvb3QuIEhvd2V2ZXIsIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIG1hc3RlciBub2RlCisJCSAqIGlzIGNsZWFuIGF0IHRoaXMgcG9pbnQsIGkuZS4sICVVQklGU19NU1RfRElSVFkgaXMgbm90IHNldC4KKwkJICogRS5nLiwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBjaGFpbiBvZiBldmVudHM6CisJCSAqCisJCSAqIDEuIFVCSUZTIHdhcyBjbGVhbmx5IHVubW91bnRlZCwgc28gdGhlIG1hc3RlciBub2RlIGlzIGNsZWFuCisJCSAqIDIuIFVCSUZTIGlzIGJlaW5nIG1vdW50ZWQgUi9XIGFuZCBzdGFydHMgY2hhbmdpbmcgdGhlIG1hc3RlcgorCQkgKiAgICBub2RlIGluIHRoZSBmaXJzdCAoJVVCSUZTX01TVF9MTlVNKS4gQSBwb3dlciBjdXQgaGFwcGVucywKKwkJICogICAgc28gdGhpcyBMRUIgZW5kcyB1cCB3aXRoIHNvbWUgYW1vdW50IG9mIGdhcmJhZ2UgYXQgdGhlCisJCSAqICAgIGVuZC4KKwkJICogMy4gVUJJRlMgaXMgYmVpbmcgbW91bnRlZCBSL08uIFdlIHJlYWNoIHRoaXMgcGxhY2UgYW5kCisJCSAqICAgIHJlY292ZXIgdGhlIG1hc3RlciBub2RlIGZyb20gdGhlIHNlY29uZCBMRUIKKwkJICogICAgKCVVQklGU19NU1RfTE5VTSArIDEpLiBCdXQgd2UgY2Fubm90IHVwZGF0ZSB0aGUgbWVkaWEKKwkJICogICAgYmVjYXVzZSB3ZSBhcmUgYmVpbmcgbW91bnRlZCBSL08uIFdlIGhhdmUgdG8gZGVmZXIgdGhlCisJCSAqICAgIG9wZXJhdGlvbi4KKwkJICogNC4gSG93ZXZlciwgdGhpcyBtYXN0ZXIgbm9kZSAoQGMtPm1zdF9ub2RlKSBpcyBtYXJrZWQgYXMKKwkJICogICAgY2xlYW4gKHNpbmNlIHRoZSBzdGVwIDEpLiBBbmQgaWYgd2UganVzdCByZXR1cm4sIHRoZQorCQkgKiAgICBtb3VudCBjb2RlIHdpbGwgYmUgY29uZnVzZWQgYW5kIHdvbid0IHJlY292ZXIgdGhlIG1hc3RlcgorCQkgKiAgICBub2RlIHdoZW4gaXQgaXMgcmUtbW91bnRlciBSL1cgbGF0ZXIuCisJCSAqCisJCSAqICAgIFRodXMsIHRvIGZvcmNlIHRoZSByZWNvdmVyeSBieSBtYXJraW5nIHRoZSBtYXN0ZXIgbm9kZSBhcworCQkgKiAgICBkaXJ0eS4KKwkJICovCisJCWMtPm1zdF9ub2RlLT5mbGFncyB8PSBjcHVfdG9fbGUzMihVQklGU19NU1RfRElSVFkpOwogCX0gZWxzZSB7CiAJCS8qIFdyaXRlIHRoZSByZWNvdmVyZWQgbWFzdGVyIG5vZGUgKi8KIAkJYy0+bWF4X3NxbnVtID0gbGU2NF90b19jcHUobXN0LT5jaC5zcW51bSkgLSAxOwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvcmVwbGF5LmMgYi9mcy91Ymlmcy9yZXBsYXkuYwppbmRleCBlZWQwZmNmLi5kM2Q2ZDM2IDEwMDY0NAotLS0gYS9mcy91Ymlmcy9yZXBsYXkuYworKysgYi9mcy91Ymlmcy9yZXBsYXkuYwpAQCAtNTksNiArNTksNyBAQAogICogQG5ld19zaXplOiB0cnVuY2F0aW9uIG5ldyBzaXplCiAgKiBAZnJlZTogYW1vdW50IG9mIGZyZWUgc3BhY2UgaW4gYSBidWQKICAqIEBkaXJ0eTogYW1vdW50IG9mIGRpcnR5IHNwYWNlIGluIGEgYnVkIGZyb20gcGFkZGluZyBhbmQgZGVsZXRpb24gbm9kZXMKKyAqIEBqaGVhZDogam91cm5hbCBoZWFkIG51bWJlciBvZiB0aGUgYnVkCiAgKgogICogVUJJRlMgam91cm5hbCByZXBsYXkgbXVzdCBjb21wYXJlIG5vZGUgc2VxdWVuY2UgbnVtYmVycywgd2hpY2ggbWVhbnMgaXQgbXVzdAogICogYnVpbGQgYSB0cmVlIG9mIG5vZGUgaW5mb3JtYXRpb24gdG8gaW5zZXJ0IGludG8gdGhlIFROQy4KQEAgLTgwLDYgKzgxLDcgQEAKIAkJc3RydWN0IHsKIAkJCWludCBmcmVlOwogCQkJaW50IGRpcnR5OworCQkJaW50IGpoZWFkOwogCQl9OwogCX07CiB9OwpAQCAtMTU5LDYgKzE2MSwxMSBAQAogCQllcnIgPSBQVFJfRVJSKGxwKTsKIAkJZ290byBvdXQ7CiAJfQorCisJLyogTWFrZSBzdXJlIHRoZSBqb3VybmFsIGhlYWQgcG9pbnRzIHRvIHRoZSBsYXRlc3QgYnVkICovCisJZXJyID0gdWJpZnNfd2J1Zl9zZWVrX25vbG9jaygmYy0+amhlYWRzW3ItPmpoZWFkXS53YnVmLCByLT5sbnVtLAorCQkJCSAgICAgYy0+bGViX3NpemUgLSByLT5mcmVlLCBVQklfU0hPUlRURVJNKTsKKwogb3V0OgogCXViaWZzX3JlbGVhc2VfbHByb3BzKGMpOwogCXJldHVybiBlcnI7CkBAIC02MjcsMTAgKzYzNCw2IEBACiAJdWJpZnNfYXNzZXJ0KHNsZWItPmVuZHB0IC0gb2ZmcyA+PSB1c2VkKTsKIAl1Ymlmc19hc3NlcnQoc2xlYi0+ZW5kcHQgJSBjLT5taW5faW9fc2l6ZSA9PSAwKTsKIAotCWlmIChzbGViLT5lbmRwdCArIGMtPm1pbl9pb19zaXplIDw9IGMtPmxlYl9zaXplICYmICFjLT5yb19tb3VudCkKLQkJZXJyID0gdWJpZnNfd2J1Zl9zZWVrX25vbG9jaygmYy0+amhlYWRzW2poZWFkXS53YnVmLCBsbnVtLAotCQkJCQkgICAgIHNsZWItPmVuZHB0LCBVQklfU0hPUlRURVJNKTsKLQogCSpkaXJ0eSA9IHNsZWItPmVuZHB0IC0gb2ZmcyAtIHVzZWQ7CiAJKmZyZWUgPSBjLT5sZWJfc2l6ZSAtIHNsZWItPmVuZHB0OwogCkBAIC02NTMsMTIgKzY1NiwxNCBAQAogICogQHNxbnVtOiBzZXF1ZW5jZSBudW1iZXIKICAqIEBmcmVlOiBhbW91bnQgb2YgZnJlZSBzcGFjZSBpbiBidWQKICAqIEBkaXJ0eTogYW1vdW50IG9mIGRpcnR5IHNwYWNlIGZyb20gcGFkZGluZyBhbmQgZGVsZXRpb24gbm9kZXMKKyAqIEBqaGVhZDogam91cm5hbCBoZWFkIG51bWJlciBmb3IgdGhlIGJ1ZAogICoKICAqIFRoaXMgZnVuY3Rpb24gaW5zZXJ0cyBhIHJlZmVyZW5jZSBub2RlIHRvIHRoZSByZXBsYXkgdHJlZSBhbmQgcmV0dXJucyB6ZXJvCiAgKiBpbiBjYXNlIG9mIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZS4KICAqLwogc3RhdGljIGludCBpbnNlcnRfcmVmX25vZGUoc3RydWN0IHViaWZzX2luZm8gKmMsIGludCBsbnVtLCBpbnQgb2ZmcywKLQkJCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzcW51bSwgaW50IGZyZWUsIGludCBkaXJ0eSkKKwkJCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzcW51bSwgaW50IGZyZWUsIGludCBkaXJ0eSwKKwkJCSAgIGludCBqaGVhZCkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmYy0+cmVwbGF5X3RyZWUucmJfbm9kZSwgKnBhcmVudCA9IE5VTEw7CiAJc3RydWN0IHJlcGxheV9lbnRyeSAqcjsKQEAgLTY4OCw2ICs2OTMsNyBAQAogCXItPmZsYWdzID0gUkVQTEFZX1JFRjsKIAlyLT5mcmVlID0gZnJlZTsKIAlyLT5kaXJ0eSA9IGRpcnR5OworCXItPmpoZWFkID0gamhlYWQ7CiAKIAlyYl9saW5rX25vZGUoJnItPnJiLCBwYXJlbnQsIHApOwogCXJiX2luc2VydF9jb2xvcigmci0+cmIsICZjLT5yZXBsYXlfdHJlZSk7CkBAIC03MTIsNyArNzE4LDcgQEAKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJCWVyciA9IGluc2VydF9yZWZfbm9kZShjLCBiLT5idWQtPmxudW0sIGItPmJ1ZC0+c3RhcnQsIGItPnNxbnVtLAotCQkJCSAgICAgIGZyZWUsIGRpcnR5KTsKKwkJCQkgICAgICBmcmVlLCBkaXJ0eSwgYi0+YnVkLT5qaGVhZCk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3N1cGVyLmMgYi9mcy91Ymlmcy9zdXBlci5jCmluZGV4IDZkZGQ5OTcuLjA0YWQwN2YgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3N1cGVyLmMKKysrIGIvZnMvdWJpZnMvc3VwZXIuYwpAQCAtMTI1NywxMiArMTI1NywxMiBAQAogCQlnb3RvIG91dF9mcmVlOwogCX0KIAorCWVyciA9IGFsbG9jX3didWZzKGMpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2NidWY7CisKIAlzcHJpbnRmKGMtPmJndF9uYW1lLCBCR1RfTkFNRV9QQVRURVJOLCBjLT52aS51YmlfbnVtLCBjLT52aS52b2xfaWQpOwogCWlmICghYy0+cm9fbW91bnQpIHsKLQkJZXJyID0gYWxsb2Nfd2J1ZnMoYyk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dF9jYnVmOwotCiAJCS8qIENyZWF0ZSBiYWNrZ3JvdW5kIHRocmVhZCAqLwogCQljLT5iZ3QgPSBrdGhyZWFkX2NyZWF0ZSh1Ymlmc19iZ190aHJlYWQsIGMsICIlcyIsIGMtPmJndF9uYW1lKTsKIAkJaWYgKElTX0VSUihjLT5iZ3QpKSB7CkBAIC0xNTY4LDYgKzE1NjgsNyBAQAogCW11dGV4X2xvY2soJmMtPnVtb3VudF9tdXRleCk7CiAJZGJnX3NhdmVfc3BhY2VfaW5mbyhjKTsKIAljLT5yZW1vdW50aW5nX3J3ID0gMTsKKwljLT5yb19tb3VudCA9IDA7CiAKIAllcnIgPSBjaGVja19mcmVlX3NwYWNlKGMpOwogCWlmIChlcnIpCkBAIC0xNjMwLDEyICsxNjMxLDYgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAotCWVyciA9IGFsbG9jX3didWZzKGMpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JdWJpZnNfY3JlYXRlX2J1ZHNfbGlzdHMoYyk7Ci0KIAkvKiBDcmVhdGUgYmFja2dyb3VuZCB0aHJlYWQgKi8KIAljLT5iZ3QgPSBrdGhyZWFkX2NyZWF0ZSh1Ymlmc19iZ190aHJlYWQsIGMsICIlcyIsIGMtPmJndF9uYW1lKTsKIAlpZiAoSVNfRVJSKGMtPmJndCkpIHsKQEAgLTE2NzAsMTkgKzE2NjUsMzAgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAorCWRiZ19nZW4oInJlLW1vdW50ZWQgcmVhZC13cml0ZSIpOworCWMtPnJlbW91bnRpbmdfcncgPSAwOworCiAJaWYgKGMtPm5lZWRfcmVjb3ZlcnkpIHsKIAkJYy0+bmVlZF9yZWNvdmVyeSA9IDA7CiAJCXViaWZzX21zZygiZGVmZXJyZWQgcmVjb3ZlcnkgY29tcGxldGVkIik7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogRG8gbm90IHJ1biB0aGUgZGVidWdnaW5nIHNwYWNlIGNoZWNrIGlmIHRoZSB3ZXJlIGRvaW5nCisJCSAqIHJlY292ZXJ5LCBiZWNhdXNlIHdoZW4gd2Ugc2F2ZWQgdGhlIGluZm9ybWF0aW9uIHdlIGhhZCB0aGUKKwkJICogZmlsZS1zeXN0ZW0gaW4gYSBzdGF0ZSB3aGVyZSB0aGUgVE5DIGFuZCBscHJvcHMgaGFzIGJlZW4KKwkJICogbW9kaWZpZWQgaW4gbWVtb3J5LCBidXQgYWxsIHRoZSBJL08gb3BlcmF0aW9ucyAoaW5jbHVkaW5nIGEKKwkJICogY29tbWl0KSB3ZXJlIGRlZmVycmVkLiBTbyB0aGUgZmlsZS1zeXN0ZW0gd2FzIGluCisJCSAqICJub24tY29tbWl0dGVkIiBzdGF0ZS4gTm93IHRoZSBmaWxlLXN5c3RlbSBpcyBpbiBjb21taXR0ZWQKKwkJICogc3RhdGUsIGFuZCBvZiBjb3Vyc2UgdGhlIGFtb3VudCBvZiBmcmVlIHNwYWNlIHdpbGwgY2hhbmdlCisJCSAqIGJlY2F1c2UsIGZvciBleGFtcGxlLCB0aGUgb2xkIGluZGV4IHNpemUgd2FzIGltcHJlY2lzZS4KKwkJICovCisJCWVyciA9IGRiZ19jaGVja19zcGFjZV9pbmZvKGMpOwogCX0KLQotCWRiZ19nZW4oInJlLW1vdW50ZWQgcmVhZC13cml0ZSIpOwotCWMtPnJvX21vdW50ID0gMDsKLQljLT5yZW1vdW50aW5nX3J3ID0gMDsKLQllcnIgPSBkYmdfY2hlY2tfc3BhY2VfaW5mbyhjKTsKIAltdXRleF91bmxvY2soJmMtPnVtb3VudF9tdXRleCk7CiAJcmV0dXJuIGVycjsKIAogb3V0OgorCWMtPnJvX21vdW50ID0gMTsKIAl2ZnJlZShjLT5vcnBoX2J1Zik7CiAJYy0+b3JwaF9idWYgPSBOVUxMOwogCWlmIChjLT5iZ3QpIHsKQEAgLTE3MzIsNyArMTczOCw2IEBACiAJaWYgKGVycikKIAkJdWJpZnNfcm9fbW9kZShjLCBlcnIpOwogCi0JZnJlZV93YnVmcyhjKTsKIAl2ZnJlZShjLT5vcnBoX2J1Zik7CiAJYy0+b3JwaF9idWYgPSBOVUxMOwogCWtmcmVlKGMtPndyaXRlX3Jlc2VydmVfYnVmKTsKQEAgLTE3NjAsMTAgKzE3NjUsMTIgQEAKIAkgKiBvZiB0aGUgbWVkaWEuIEZvciBleGFtcGxlLCB0aGVyZSB3aWxsIGJlIGRpcnR5IGlub2RlcyBpZiB3ZSBmYWlsZWQKIAkgKiB0byB3cml0ZSB0aGVtIGJhY2sgYmVjYXVzZSBvZiBJL08gZXJyb3JzLgogCSAqLwotCXViaWZzX2Fzc2VydChhdG9taWNfbG9uZ19yZWFkKCZjLT5kaXJ0eV9wZ19jbnQpID09IDApOwotCXViaWZzX2Fzc2VydChjLT5idWRnX2lkeF9ncm93dGggPT0gMCk7Ci0JdWJpZnNfYXNzZXJ0KGMtPmJ1ZGdfZGRfZ3Jvd3RoID09IDApOwotCXViaWZzX2Fzc2VydChjLT5idWRnX2RhdGFfZ3Jvd3RoID09IDApOworCWlmICghYy0+cm9fZXJyb3IpIHsKKwkJdWJpZnNfYXNzZXJ0KGF0b21pY19sb25nX3JlYWQoJmMtPmRpcnR5X3BnX2NudCkgPT0gMCk7CisJCXViaWZzX2Fzc2VydChjLT5idWRnX2lkeF9ncm93dGggPT0gMCk7CisJCXViaWZzX2Fzc2VydChjLT5idWRnX2RkX2dyb3d0aCA9PSAwKTsKKwkJdWJpZnNfYXNzZXJ0KGMtPmJ1ZGdfZGF0YV9ncm93dGggPT0gMCk7CisJfQogCiAJLyoKIAkgKiBUaGUgJ2MtPnVtb3VudF9sb2NrJyBwcmV2ZW50cyByYWNlcyBiZXR3ZWVuIFVCSUZTIG1lbW9yeSBzaHJpbmtlcgpkaWZmIC0tZ2l0IGEvZnMvdWZzL2lub2RlLmMgYi9mcy91ZnMvaW5vZGUuYwppbmRleCAyN2E0YmFiLi5lNzY1NzQzIDEwMDY0NAotLS0gYS9mcy91ZnMvaW5vZGUuYworKysgYi9mcy91ZnMvaW5vZGUuYwpAQCAtNzgsNyArNzgsNyBAQAogCiAvKgogICogUmV0dXJucyB0aGUgbG9jYXRpb24gb2YgdGhlIGZyYWdtZW50IGZyb20KLSAqIHRoZSBiZWdpbmluZyBvZiB0aGUgZmlsZXN5c3RlbS4KKyAqIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGVzeXN0ZW0uCiAgKi8KIAogc3RhdGljIHU2NCB1ZnNfZnJhZ19tYXAoc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgZnJhZywgYm9vbCBuZWVkc19sb2NrKQpkaWZmIC0tZ2l0IGEvZnMvdWZzL3N1cGVyLmMgYi9mcy91ZnMvc3VwZXIuYwppbmRleCA3NjkzZDYyLi4zOTE1YWRlIDEwMDY0NAotLS0gYS9mcy91ZnMvc3VwZXIuYworKysgYi9mcy91ZnMvc3VwZXIuYwpAQCAtNDgzLDkgKzQ4Myw5IEBACiB9CiAKIC8qCi0gKiBEaWZmcmVudCB0eXBlcyBvZiBVRlMgaG9sZCBmc19jc3RvdGFsIGluIGRpZmZlcmVudAotICogcGxhY2VzLCBhbmQgdXNlIGRpZmZyZW50IGRhdGEgc3RydWN0dXJlIGZvciBpdC4KLSAqIFRvIG1ha2UgdGhpbmdzIHNpbXBsaWVyIHdlIGp1c3QgY29weSBmc19jc3RvdGFsIHRvIHVmc19zYl9wcml2YXRlX2luZm8KKyAqIERpZmZlcmVudCB0eXBlcyBvZiBVRlMgaG9sZCBmc19jc3RvdGFsIGluIGRpZmZlcmVudAorICogcGxhY2VzLCBhbmQgdXNlIGRpZmZlcmVudCBkYXRhIHN0cnVjdHVyZSBmb3IgaXQuCisgKiBUbyBtYWtlIHRoaW5ncyBzaW1wbGVyIHdlIGp1c3QgY29weSBmc19jc3RvdGFsIHRvIHVmc19zYl9wcml2YXRlX2luZm8KICAqLwogc3RhdGljIHZvaWQgdWZzX3NldHVwX2NzdG90YWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKZGlmZiAtLWdpdCBhL2ZzL3hhdHRyLmMgYi9mcy94YXR0ci5jCmluZGV4IGExOWFjZGIuLmYxZWY5NDkgMTAwNjQ0Ci0tLSBhL2ZzL3hhdHRyLmMKKysrIGIvZnMveGF0dHIuYwpAQCAtNjY2LDcgKzY2Niw3IEBACiAJaGFuZGxlciA9IHhhdHRyX3Jlc29sdmVfbmFtZShkZW50cnktPmRfc2ItPnNfeGF0dHIsICZuYW1lKTsKIAlpZiAoIWhhbmRsZXIpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKLQlyZXR1cm4gaGFuZGxlci0+c2V0KGRlbnRyeSwgbmFtZSwgdmFsdWUsIHNpemUsIDAsIGhhbmRsZXItPmZsYWdzKTsKKwlyZXR1cm4gaGFuZGxlci0+c2V0KGRlbnRyeSwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzLCBoYW5kbGVyLT5mbGFncyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKaW5kZXggNTJkYmQxNC4uNzljZTM4YiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYwpAQCAtMTI5NSw3ICsxMjk1LDcgQEAKICAqIElmIHRoZSBwcml2YXRlIGFyZ3VtZW50IGlzIG5vbi1OVUxMIF9feGZzX2dldF9ibG9ja3Mgc2lnbmFscyB1cyB0aGF0IHdlCiAgKiBuZWVkIHRvIGlzc3VlIGEgdHJhbnNhY3Rpb24gdG8gY29udmVydCB0aGUgcmFuZ2UgZnJvbSB1bndyaXR0ZW4gdG8gd3JpdHRlbgogICogZXh0ZW50cy4gIEluIGNhc2UgdGhpcyBpcyByZWd1bGFyIHN5bmNocm9ub3VzIEkvTyB3ZSBqdXN0IGNhbGwgeGZzX2VuZF9pbwotICogdG8gZG8gdGhpcyBhbmQgd2UgYXJlIGRvbmUuICBCdXQgaW4gY2FzZSB0aGlzIHdhcyBhIHN1Y2Nlc3NmdWxsIEFJTworICogdG8gZG8gdGhpcyBhbmQgd2UgYXJlIGRvbmUuICBCdXQgaW4gY2FzZSB0aGlzIHdhcyBhIHN1Y2Nlc3NmdWwgQUlPCiAgKiByZXF1ZXN0IHRoaXMgaGFuZGxlciBpcyBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCwgZnJvbSB3aGljaCB3ZQogICogY2FuJ3Qgc3RhcnQgdHJhbnNhY3Rpb25zLiAgSW4gdGhhdCBjYXNlIG9mZmxvYWQgdGhlIEkvTyBjb21wbGV0aW9uIHRvCiAgKiB0aGUgd29ya3F1ZXVlcyB3ZSBhbHNvIHVzZSBmb3IgYnVmZmVyZWQgSS9PIGNvbXBsZXRpb24uCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19idWYuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCmluZGV4IDU5NmJiMmMuLjllZjllZDIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCkBAIC0xMjAsNyArMTIwLDcgQEAKICAqIFRoZSB1bmxvY2tlZCBjaGVjayBpcyBzYWZlIGhlcmUgYmVjYXVzZSBpdCBvbmx5IG9jY3VycyB3aGVuIHRoZXJlIGFyZSBub3QKICAqIGJfbHJ1X3JlZiBjb3VudHMgbGVmdCBvbiB0aGUgaW5vZGUgdW5kZXIgdGhlIHBhZy0+cGFnX2J1Zl9sb2NrLiBpdCBpcyB0aGVyZQogICogdG8gb3B0aW1pc2UgdGhlIHNocmlua2VyIHJlbW92aW5nIHRoZSBidWZmZXIgZnJvbSB0aGUgTFJVIGFuZCBjYWxsaW5nCi0gKiB4ZnNfYnVmX2ZyZWUoKS4gaS5lLiBpdCByZW1vdmVzIGFuIHVubmVjY2Vzc2FyeSByb3VuZCB0cmlwIG9uIHRoZQorICogeGZzX2J1Zl9mcmVlKCkuIGkuZS4gaXQgcmVtb3ZlcyBhbiB1bm5lY2Vzc2FyeSByb3VuZCB0cmlwIG9uIHRoZQogICogYnRfbHJ1X2xvY2suCiAgKi8KIFNUQVRJQyB2b2lkCkBAIC0yOTMsNyArMjkzLDYgQEAKIAlzaXplX3QJCQluYnl0ZXMsIG9mZnNldDsKIAlnZnBfdAkJCWdmcF9tYXNrID0geGJfdG9fZ2ZwKGZsYWdzKTsKIAl1bnNpZ25lZCBzaG9ydAkJcGFnZV9jb3VudCwgaTsKLQlwZ29mZl90CQkJZmlyc3Q7CiAJeGZzX29mZl90CQllbmQ7CiAJaW50CQkJZXJyb3I7CiAKQEAgLTMzMyw3ICszMzIsNiBAQAogCQlyZXR1cm4gZXJyb3I7CiAKIAlvZmZzZXQgPSBicC0+Yl9vZmZzZXQ7Ci0JZmlyc3QgPSBicC0+Yl9maWxlX29mZnNldCA+PiBQQUdFX1NISUZUOwogCWJwLT5iX2ZsYWdzIHw9IF9YQkZfUEFHRVM7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYnAtPmJfcGFnZV9jb3VudDsgaSsrKSB7CkBAIC0zODAsNyArMzc4LDcgQEAKIH0KIAogLyoKLSAqCU1hcCBidWZmZXIgaW50byBrZXJuZWwgYWRkcmVzcy1zcGFjZSBpZiBuZXNzZWNhcnkuCisgKglNYXAgYnVmZmVyIGludG8ga2VybmVsIGFkZHJlc3Mtc3BhY2UgaWYgbmVjZXNzYXJ5LgogICovCiBTVEFUSUMgaW50CiBfeGZzX2J1Zl9tYXBfcGFnZXMoCkBAIC02NTcsOCArNjU1LDYgQEAKIAl4ZnNfb2ZmX3QJCWlvZmYsCiAJc2l6ZV90CQkJaXNpemUpCiB7Ci0Jc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaTsKLQogCWlmIChiZGlfcmVhZF9jb25nZXN0ZWQodGFyZ2V0LT5idF9iZGkpKQogCQlyZXR1cm47CiAKQEAgLTkxOSw4ICs5MTUsNiBAQAogCiAJaWYgKGF0b21pY19yZWFkKCZicC0+Yl9waW5fY291bnQpICYmIChicC0+Yl9mbGFncyAmIFhCRl9TVEFMRSkpCiAJCXhmc19sb2dfZm9yY2UoYnAtPmJfdGFyZ2V0LT5idF9tb3VudCwgMCk7Ci0JaWYgKGF0b21pY19yZWFkKCZicC0+Yl9pb19yZW1haW5pbmcpKQotCQlibGtfZmx1c2hfcGx1ZyhjdXJyZW50KTsKIAlkb3duKCZicC0+Yl9zZW1hKTsKIAlYQl9TRVRfT1dORVIoYnApOwogCkBAIC0xMzA5LDggKzEzMDMsNiBAQAogewogCXRyYWNlX3hmc19idWZfaW93YWl0KGJwLCBfUkVUX0lQXyk7CiAKLQlpZiAoYXRvbWljX3JlYWQoJmJwLT5iX2lvX3JlbWFpbmluZykpCi0JCWJsa19mbHVzaF9wbHVnKGN1cnJlbnQpOwogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmJwLT5iX2lvd2FpdCk7CiAKIAl0cmFjZV94ZnNfYnVmX2lvd2FpdF9kb25lKGJwLCBfUkVUX0lQXyk7CkBAIC0xNzQ3LDggKzE3MzksOCBAQAogCWRvIHsKIAkJbG9uZwlhZ2UgPSB4ZnNfYnVmX2FnZV9jZW50aXNlY3MgKiBtc2Vjc190b19qaWZmaWVzKDEwKTsKIAkJbG9uZwl0b3V0ID0geGZzX2J1Zl90aW1lcl9jZW50aXNlY3MgKiBtc2Vjc190b19qaWZmaWVzKDEwKTsKLQkJaW50CWNvdW50ID0gMDsKIAkJc3RydWN0IGxpc3RfaGVhZCB0bXA7CisJCXN0cnVjdCBibGtfcGx1ZyBwbHVnOwogCiAJCWlmICh1bmxpa2VseShmcmVlemluZyhjdXJyZW50KSkpIHsKIAkJCXNldF9iaXQoWEJUX0ZPUkNFX1NMRUVQLCAmdGFyZ2V0LT5idF9mbGFncyk7CkBAIC0xNzY0LDE2ICsxNzU2LDE1IEBACiAKIAkJeGZzX2J1Zl9kZWx3cmlfc3BsaXQodGFyZ2V0LCAmdG1wLCBhZ2UpOwogCQlsaXN0X3NvcnQoTlVMTCwgJnRtcCwgeGZzX2J1Zl9jbXApOworCisJCWJsa19zdGFydF9wbHVnKCZwbHVnKTsKIAkJd2hpbGUgKCFsaXN0X2VtcHR5KCZ0bXApKSB7CiAJCQlzdHJ1Y3QgeGZzX2J1ZiAqYnA7CiAJCQlicCA9IGxpc3RfZmlyc3RfZW50cnkoJnRtcCwgc3RydWN0IHhmc19idWYsIGJfbGlzdCk7CiAJCQlsaXN0X2RlbF9pbml0KCZicC0+Yl9saXN0KTsKIAkJCXhmc19iZHN0cmF0X2NiKGJwKTsKLQkJCWNvdW50Kys7CiAJCX0KLQkJaWYgKGNvdW50KQotCQkJYmxrX2ZsdXNoX3BsdWcoY3VycmVudCk7Ci0KKwkJYmxrX2ZpbmlzaF9wbHVnKCZwbHVnKTsKIAl9IHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKTsKIAogCXJldHVybiAwOwpAQCAtMTc5Myw2ICsxNzg0LDcgQEAKIAlpbnQJCXBpbmNvdW50ID0gMDsKIAlMSVNUX0hFQUQodG1wX2xpc3QpOwogCUxJU1RfSEVBRCh3YWl0X2xpc3QpOworCXN0cnVjdCBibGtfcGx1ZyBwbHVnOwogCiAJeGZzX2J1Zl9ydW5hbGxfcXVldWVzKHhmc2NvbnZlcnRkX3dvcmtxdWV1ZSk7CiAJeGZzX2J1Zl9ydW5hbGxfcXVldWVzKHhmc2RhdGFkX3dvcmtxdWV1ZSk7CkBAIC0xODA3LDYgKzE3OTksOCBAQAogCSAqIHdlIGRvIHRoYXQgYWZ0ZXIgaXNzdWluZyBhbGwgdGhlIElPLgogCSAqLwogCWxpc3Rfc29ydChOVUxMLCAmdG1wX2xpc3QsIHhmc19idWZfY21wKTsKKworCWJsa19zdGFydF9wbHVnKCZwbHVnKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnRtcF9saXN0KSkgewogCQlicCA9IGxpc3RfZmlyc3RfZW50cnkoJnRtcF9saXN0LCBzdHJ1Y3QgeGZzX2J1ZiwgYl9saXN0KTsKIAkJQVNTRVJUKHRhcmdldCA9PSBicC0+Yl90YXJnZXQpOwpAQCAtMTgxNywxMCArMTgxMSwxMCBAQAogCQl9CiAJCXhmc19iZHN0cmF0X2NiKGJwKTsKIAl9CisJYmxrX2ZpbmlzaF9wbHVnKCZwbHVnKTsKIAogCWlmICh3YWl0KSB7Ci0JCS8qIEV4cGVkaXRlIGFuZCB3YWl0IGZvciBJTyB0byBjb21wbGV0ZS4gKi8KLQkJYmxrX2ZsdXNoX3BsdWcoY3VycmVudCk7CisJCS8qIFdhaXQgZm9yIElPIHRvIGNvbXBsZXRlLiAqLwogCQl3aGlsZSAoIWxpc3RfZW1wdHkoJndhaXRfbGlzdCkpIHsKIAkJCWJwID0gbGlzdF9maXJzdF9lbnRyeSgmd2FpdF9saXN0LCBzdHJ1Y3QgeGZzX2J1ZiwgYl9saXN0KTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCmluZGV4IDUyYWFkZmIuLmY0MjEzYmEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMKQEAgLTM4MSw3ICszODEsNyBAQAogCiAvKgogICogSWYgdGhpcyB3YXMgYSBkaXJlY3Qgb3Igc3luY2hyb25vdXMgSS9PIHRoYXQgZmFpbGVkIChzdWNoIGFzIEVOT1NQQykgdGhlbgotICogcGFydCBvZiB0aGUgSS9PIG1heSBoYXZlIGJlZW4gd3JpdHRlbiB0byBkaXNrIGJlZm9yZSB0aGUgZXJyb3Igb2NjdXJlZC4gIEluCisgKiBwYXJ0IG9mIHRoZSBJL08gbWF5IGhhdmUgYmVlbiB3cml0dGVuIHRvIGRpc2sgYmVmb3JlIHRoZSBlcnJvciBvY2N1cnJlZC4gIEluCiAgKiB0aGlzIGNhc2UgdGhlIG9uLWRpc2sgZmlsZSBzaXplIG1heSBoYXZlIGJlZW4gYWRqdXN0ZWQgYmV5b25kIHRoZSBpbi1tZW1vcnkKICAqIGZpbGUgc2l6ZSBhbmQgbm93IG5lZWRzIHRvIGJlIHRydW5jYXRlZCBiYWNrLgogICovCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKaW5kZXggOWZmN2ZjNi4uZGQyMTc4NCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwpAQCAtNzAsNyArNzAsNyBAQAogCiAvKgogICogSWYgdGhlIGxpbnV4IGlub2RlIGlzIHZhbGlkLCBtYXJrIGl0IGRpcnR5LgotICogVXNlZCB3aGVuIGNvbW1pdGluZyBhIGRpcnR5IGlub2RlIGludG8gYSB0cmFuc2FjdGlvbiBzbyB0aGF0CisgKiBVc2VkIHdoZW4gY29tbWl0dGluZyBhIGRpcnR5IGlub2RlIGludG8gYSB0cmFuc2FjdGlvbiBzbyB0aGF0CiAgKiB0aGUgaW5vZGUgd2lsbCBnZXQgd3JpdHRlbiBiYWNrIGJ5IHRoZSBsaW51eCBjb2RlCiAgKi8KIHZvaWQKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX21lc3NhZ2UuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX21lc3NhZ2UuYwppbmRleCA1MDhlMDZmLi45Zjc2Y2NlIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19tZXNzYWdlLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbWVzc2FnZS5jCkBAIC0yOCw1MyArMjgsNDkgQEAKIC8qCiAgKiBYRlMgbG9nZ2luZyBmdW5jdGlvbnMKICAqLwotc3RhdGljIGludAorc3RhdGljIHZvaWQKIF9feGZzX3ByaW50aygKIAljb25zdCBjaGFyCQkqbGV2ZWwsCiAJY29uc3Qgc3RydWN0IHhmc19tb3VudAkqbXAsCiAJc3RydWN0IHZhX2Zvcm1hdAkqdmFmKQogewotCWlmIChtcCAmJiBtcC0+bV9mc25hbWUpCi0JCXJldHVybiBwcmludGsoIiVzWEZTICglcyk6ICVwVlxuIiwgbGV2ZWwsIG1wLT5tX2ZzbmFtZSwgdmFmKTsKLQlyZXR1cm4gcHJpbnRrKCIlc1hGUzogJXBWXG4iLCBsZXZlbCwgdmFmKTsKKwlpZiAobXAgJiYgbXAtPm1fZnNuYW1lKSB7CisJCXByaW50aygiJXNYRlMgKCVzKTogJXBWXG4iLCBsZXZlbCwgbXAtPm1fZnNuYW1lLCB2YWYpOworCQlyZXR1cm47CisJfQorCXByaW50aygiJXNYRlM6ICVwVlxuIiwgbGV2ZWwsIHZhZik7CiB9CiAKLWludCB4ZnNfcHJpbnRrKAordm9pZCB4ZnNfcHJpbnRrKAogCWNvbnN0IGNoYXIJCSpsZXZlbCwKIAljb25zdCBzdHJ1Y3QgeGZzX21vdW50CSptcCwKIAljb25zdCBjaGFyCQkqZm10LCAuLi4pCiB7CiAJc3RydWN0IHZhX2Zvcm1hdAl2YWY7CiAJdmFfbGlzdAkJCWFyZ3M7Ci0JaW50CQkJIHI7CiAKIAl2YV9zdGFydChhcmdzLCBmbXQpOwogCiAJdmFmLmZtdCA9IGZtdDsKIAl2YWYudmEgPSAmYXJnczsKIAotCXIgPSBfX3hmc19wcmludGsobGV2ZWwsIG1wLCAmdmFmKTsKKwlfX3hmc19wcmludGsobGV2ZWwsIG1wLCAmdmFmKTsKIAl2YV9lbmQoYXJncyk7Ci0KLQlyZXR1cm4gcjsKIH0KIAogI2RlZmluZSBkZWZpbmVfeGZzX3ByaW50a19sZXZlbChmdW5jLCBrZXJuX2xldmVsKQkJXAotaW50IGZ1bmMoY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQlcCit2b2lkIGZ1bmMoY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQlcCiB7CQkJCQkJCQlcCiAJc3RydWN0IHZhX2Zvcm1hdAl2YWY7CQkJCVwKIAl2YV9saXN0CQkJYXJnczsJCQkJXAotCWludAkJCXI7CQkJCVwKIAkJCQkJCQkJXAogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CQkJCQlcCiAJCQkJCQkJCVwKIAl2YWYuZm10ID0gZm10OwkJCQkJCVwKIAl2YWYudmEgPSAmYXJnczsJCQkJCQlcCiAJCQkJCQkJCVwKLQlyID0gX194ZnNfcHJpbnRrKGtlcm5fbGV2ZWwsIG1wLCAmdmFmKTsJCQlcCisJX194ZnNfcHJpbnRrKGtlcm5fbGV2ZWwsIG1wLCAmdmFmKTsJCQlcCiAJdmFfZW5kKGFyZ3MpOwkJCQkJCVwKLQkJCQkJCQkJXAotCXJldHVybiByOwkJCQkJCVwKIH0JCQkJCQkJCVwKIAogZGVmaW5lX3hmc19wcmludGtfbGV2ZWwoeGZzX2VtZXJnLCBLRVJOX0VNRVJHKTsKQEAgLTg4LDcgKzg0LDcgQEAKIGRlZmluZV94ZnNfcHJpbnRrX2xldmVsKHhmc19kZWJ1ZywgS0VSTl9ERUJVRyk7CiAjZW5kaWYKIAotaW50Cit2b2lkCiB4ZnNfYWxlcnRfdGFnKAogCWNvbnN0IHN0cnVjdCB4ZnNfbW91bnQJKm1wLAogCWludAkJCXBhbmljX3RhZywKQEAgLTk3LDcgKzkzLDYgQEAKIAlzdHJ1Y3QgdmFfZm9ybWF0CXZhZjsKIAl2YV9saXN0CQkJYXJnczsKIAlpbnQJCQlkb19wYW5pYyA9IDA7Ci0JaW50CQkJcjsKIAogCWlmICh4ZnNfcGFuaWNfbWFzayAmJiAoeGZzX3BhbmljX21hc2sgJiBwYW5pY190YWcpKSB7CiAJCXhmc19wcmludGsoS0VSTl9BTEVSVCwgbXAsCkBAIC0xMTAsMTIgKzEwNSwxMCBAQAogCXZhZi5mbXQgPSBmbXQ7CiAJdmFmLnZhID0gJmFyZ3M7CiAKLQlyID0gX194ZnNfcHJpbnRrKEtFUk5fQUxFUlQsIG1wLCAmdmFmKTsKKwlfX3hmc19wcmludGsoS0VSTl9BTEVSVCwgbXAsICZ2YWYpOwogCXZhX2VuZChhcmdzKTsKIAogCUJVR19PTihkb19wYW5pYyk7Ci0KLQlyZXR1cm4gcjsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbWVzc2FnZS5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbWVzc2FnZS5oCmluZGV4IGU3N2ZmYTEuLmYxYjNmYzEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX21lc3NhZ2UuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19tZXNzYWdlLmgKQEAgLTMsMzIgKzMsMzQgQEAKIAogc3RydWN0IHhmc19tb3VudDsKIAotZXh0ZXJuIGludCB4ZnNfcHJpbnRrKGNvbnN0IGNoYXIgKmxldmVsLCBjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcCwKK2V4dGVybiB2b2lkIHhmc19wcmludGsoY29uc3QgY2hhciAqbGV2ZWwsIGNvbnN0IHN0cnVjdCB4ZnNfbW91bnQgKm1wLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogICAgICAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7Ci1leHRlcm4gaW50IHhmc19lbWVyZyhjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCitleHRlcm4gdm9pZCB4ZnNfZW1lcmcoY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogICAgICAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7Ci1leHRlcm4gaW50IHhmc19hbGVydChjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCitleHRlcm4gdm9pZCB4ZnNfYWxlcnQoY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogICAgICAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7Ci1leHRlcm4gaW50IHhmc19hbGVydF90YWcoY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXAsIGludCB0YWcsCitleHRlcm4gdm9pZCB4ZnNfYWxlcnRfdGFnKGNvbnN0IHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBpbnQgdGFnLAogCQkJIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogICAgICAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7Ci1leHRlcm4gaW50IHhmc19jcml0KGNvbnN0IHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK2V4dGVybiB2b2lkIHhmc19jcml0KGNvbnN0IHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBjb25zdCBjaGFyICpmbXQsIC4uLikKICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOwotZXh0ZXJuIGludCB4ZnNfZXJyKGNvbnN0IHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK2V4dGVybiB2b2lkIHhmc19lcnIoY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogICAgICAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7Ci1leHRlcm4gaW50IHhmc193YXJuKGNvbnN0IHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK2V4dGVybiB2b2lkIHhmc193YXJuKGNvbnN0IHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBjb25zdCBjaGFyICpmbXQsIC4uLikKICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOwotZXh0ZXJuIGludCB4ZnNfbm90aWNlKGNvbnN0IHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK2V4dGVybiB2b2lkIHhmc19ub3RpY2UoY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogICAgICAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7Ci1leHRlcm4gaW50IHhmc19pbmZvKGNvbnN0IHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK2V4dGVybiB2b2lkIHhmc19pbmZvKGNvbnN0IHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBjb25zdCBjaGFyICpmbXQsIC4uLikKICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOwogCiAjaWZkZWYgREVCVUcKLWV4dGVybiBpbnQgeGZzX2RlYnVnKGNvbnN0IHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK2V4dGVybiB2b2lkIHhmc19kZWJ1Zyhjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCiAgICAgICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKICNlbHNlCi0jZGVmaW5lIHhmc19kZWJ1ZyhtcCwgZm10LCAuLi4pCSgwKQorc3RhdGljIGlubGluZSB2b2lkIHhmc19kZWJ1Zyhjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7Cit9CiAjZW5kaWYKIAogZXh0ZXJuIHZvaWQgYXNzZmFpbChjaGFyICpleHByLCBjaGFyICpmLCBpbnQgbCk7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwppbmRleCAxYmE1YzQ1Li5iMzhlNThkIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKQEAgLTgxNiw3NSArODE2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFhGUyBBSUwgcHVzaCB0aHJlYWQgc3VwcG9ydAotICovCi12b2lkCi14ZnNhaWxkX3dha2V1cCgKLQlzdHJ1Y3QgeGZzX2FpbAkJKmFpbHAsCi0JeGZzX2xzbl90CQl0aHJlc2hvbGRfbHNuKQotewotCS8qIG9ubHkgZXZlciBtb3ZlIHRoZSB0YXJnZXQgZm9yd2FyZHMgKi8KLQlpZiAoWEZTX0xTTl9DTVAodGhyZXNob2xkX2xzbiwgYWlscC0+eGFfdGFyZ2V0KSA+IDApIHsKLQkJYWlscC0+eGFfdGFyZ2V0ID0gdGhyZXNob2xkX2xzbjsKLQkJd2FrZV91cF9wcm9jZXNzKGFpbHAtPnhhX3Rhc2spOwotCX0KLX0KLQotU1RBVElDIGludAoteGZzYWlsZCgKLQl2b2lkCSpkYXRhKQotewotCXN0cnVjdCB4ZnNfYWlsCSphaWxwID0gZGF0YTsKLQl4ZnNfbHNuX3QJbGFzdF9wdXNoZWRfbHNuID0gMDsKLQlsb25nCQl0b3V0ID0gMDsgLyogbWlsbGlzZWNvbmRzICovCi0KLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewotCQkvKgotCQkgKiBmb3Igc2hvcnQgc2xlZXBzIGluZGljYXRpbmcgY29uZ2VzdGlvbiwgZG9uJ3QgYWxsb3cgdXMgdG8KLQkJICogZ2V0IHdva2VuIGVhcmx5LiBPdGhlcndpc2UgYWxsIHdlIGRvIGlzIGJhbmcgb24gdGhlIEFJTCBsb2NrCi0JCSAqIHdpdGhvdXQgbWFraW5nIHByb2dyZXNzLgotCQkgKi8KLQkJaWYgKHRvdXQgJiYgdG91dCA8PSAyMCkKLQkJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19LSUxMQUJMRSk7Ci0JCWVsc2UKLQkJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJc2NoZWR1bGVfdGltZW91dCh0b3V0ID8KLQkJCQkgbXNlY3NfdG9famlmZmllcyh0b3V0KSA6IE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKLQotCQkvKiBzd3N1c3AgKi8KLQkJdHJ5X3RvX2ZyZWV6ZSgpOwotCi0JCUFTU0VSVChhaWxwLT54YV9tb3VudC0+bV9sb2cpOwotCQlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihhaWxwLT54YV9tb3VudCkpCi0JCQljb250aW51ZTsKLQotCQl0b3V0ID0geGZzYWlsZF9wdXNoKGFpbHAsICZsYXN0X3B1c2hlZF9sc24pOwotCX0KLQotCXJldHVybiAwOwotfQkvKiB4ZnNhaWxkICovCi0KLWludAoteGZzYWlsZF9zdGFydCgKLQlzdHJ1Y3QgeGZzX2FpbAkqYWlscCkKLXsKLQlhaWxwLT54YV90YXJnZXQgPSAwOwotCWFpbHAtPnhhX3Rhc2sgPSBrdGhyZWFkX3J1bih4ZnNhaWxkLCBhaWxwLCAieGZzYWlsZC8lcyIsCi0JCQkJICAgIGFpbHAtPnhhX21vdW50LT5tX2ZzbmFtZSk7Ci0JaWYgKElTX0VSUihhaWxwLT54YV90YXNrKSkKLQkJcmV0dXJuIC1QVFJfRVJSKGFpbHAtPnhhX3Rhc2spOwotCXJldHVybiAwOwotfQotCi12b2lkCi14ZnNhaWxkX3N0b3AoCi0Jc3RydWN0IHhmc19haWwJKmFpbHApCi17Ci0Ja3RocmVhZF9zdG9wKGFpbHAtPnhhX3Rhc2spOwotfQotCi0KIC8qIENhdGNoIG1pc2d1aWRlZCBzb3VscyB0aGF0IHRyeSB0byB1c2UgdGhpcyBpbnRlcmZhY2Ugb24gWEZTICovCiBTVEFUSUMgc3RydWN0IGlub2RlICoKIHhmc19mc19hbGxvY19pbm9kZSgKQEAgLTExOTEsMjIgKzExMjIsMTIgQEAKIAkJcmV0dXJuIC1lcnJvcjsKIAogCWlmIChsYXB0b3BfbW9kZSkgewotCQlpbnQJcHJldl9zeW5jX3NlcSA9IG1wLT5tX3N5bmNfc2VxOwotCiAJCS8qCiAJCSAqIFRoZSBkaXNrIG11c3QgYmUgYWN0aXZlIGJlY2F1c2Ugd2UncmUgc3luY2luZy4KIAkJICogV2Ugc2NoZWR1bGUgeGZzc3luY2Qgbm93IChub3cgdGhhdCB0aGUgZGlzayBpcwogCQkgKiBhY3RpdmUpIGluc3RlYWQgb2YgbGF0ZXIgKHdoZW4gaXQgbWlnaHQgbm90IGJlKS4KIAkJICovCi0JCXdha2VfdXBfcHJvY2VzcyhtcC0+bV9zeW5jX3Rhc2spOwotCQkvKgotCQkgKiBXZSBoYXZlIHRvIHdhaXQgZm9yIHRoZSBzeW5jIGl0ZXJhdGlvbiB0byBjb21wbGV0ZS4KLQkJICogSWYgd2UgZG9uJ3QsIHRoZSBkaXNrIGFjdGl2aXR5IGNhdXNlZCBieSB0aGUgc3luYwotCQkgKiB3aWxsIGNvbWUgYWZ0ZXIgdGhlIHN5bmMgaXMgY29tcGxldGVkLCBhbmQgdGhhdAotCQkgKiB0cmlnZ2VycyBhbm90aGVyIHN5bmMgZnJvbSBsYXB0b3AgbW9kZS4KLQkJICovCi0JCXdhaXRfZXZlbnQobXAtPm1fd2FpdF9zaW5nbGVfc3luY190YXNrLAotCQkJCW1wLT5tX3N5bmNfc2VxICE9IHByZXZfc3luY19zZXEpOworCQlmbHVzaF9kZWxheWVkX3dvcmtfc3luYygmbXAtPm1fc3luY193b3JrKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTE0OTAsOSArMTQxMSw2IEBACiAJc3Bpbl9sb2NrX2luaXQoJm1wLT5tX3NiX2xvY2spOwogCW11dGV4X2luaXQoJm1wLT5tX2dyb3dsb2NrKTsKIAlhdG9taWNfc2V0KCZtcC0+bV9hY3RpdmVfdHJhbnMsIDApOwotCUlOSVRfTElTVF9IRUFEKCZtcC0+bV9zeW5jX2xpc3QpOwotCXNwaW5fbG9ja19pbml0KCZtcC0+bV9zeW5jX2xvY2spOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1wLT5tX3dhaXRfc2luZ2xlX3N5bmNfdGFzayk7CiAKIAltcC0+bV9zdXBlciA9IHNiOwogCXNiLT5zX2ZzX2luZm8gPSBtcDsKQEAgLTE3OTksNiArMTcxNywzOCBAQAogfQogCiBTVEFUSUMgaW50IF9faW5pdAoreGZzX2luaXRfd29ya3F1ZXVlcyh2b2lkKQoreworCS8qCisJICogbWF4X2FjdGl2ZSBpcyBzZXQgdG8gOCB0byBnaXZlIGVub3VnaCBjb25jdXJlbmN5IHRvIGFsbG93CisJICogbXVsdGlwbGUgd29yayBvcGVyYXRpb25zIG9uIGVhY2ggQ1BVIHRvIHJ1bi4gVGhpcyBhbGxvd3MgbXVsdGlwbGUKKwkgKiBmaWxlc3lzdGVtcyB0byBiZSBydW5uaW5nIHN5bmMgd29yayBjb25jdXJyZW50bHksIGFuZCBzY2FsZXMgd2l0aAorCSAqIHRoZSBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtLgorCSAqLworCXhmc19zeW5jZF93cSA9IGFsbG9jX3dvcmtxdWV1ZSgieGZzc3luY2QiLCBXUV9DUFVfSU5URU5TSVZFLCA4KTsKKwlpZiAoIXhmc19zeW5jZF93cSkKKwkJZ290byBvdXQ7CisKKwl4ZnNfYWlsX3dxID0gYWxsb2Nfd29ya3F1ZXVlKCJ4ZnNhaWwiLCBXUV9DUFVfSU5URU5TSVZFLCA4KTsKKwlpZiAoIXhmc19haWxfd3EpCisJCWdvdG8gb3V0X2Rlc3Ryb3lfc3luY2Q7CisKKwlyZXR1cm4gMDsKKworb3V0X2Rlc3Ryb3lfc3luY2Q6CisJZGVzdHJveV93b3JrcXVldWUoeGZzX3N5bmNkX3dxKTsKK291dDoKKwlyZXR1cm4gLUVOT01FTTsKK30KKworU1RBVElDIHZvaWQKK3hmc19kZXN0cm95X3dvcmtxdWV1ZXModm9pZCkKK3sKKwlkZXN0cm95X3dvcmtxdWV1ZSh4ZnNfYWlsX3dxKTsKKwlkZXN0cm95X3dvcmtxdWV1ZSh4ZnNfc3luY2Rfd3EpOworfQorCitTVEFUSUMgaW50IF9faW5pdAogaW5pdF94ZnNfZnModm9pZCkKIHsKIAlpbnQJCQllcnJvcjsKQEAgLTE4MTMsMTAgKzE3NjMsMTQgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0OwogCi0JZXJyb3IgPSB4ZnNfbXJ1X2NhY2hlX2luaXQoKTsKKwllcnJvciA9IHhmc19pbml0X3dvcmtxdWV1ZXMoKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X2Rlc3Ryb3lfem9uZXM7CiAKKwllcnJvciA9IHhmc19tcnVfY2FjaGVfaW5pdCgpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZGVzdHJveV93cTsKKwogCWVycm9yID0geGZzX2ZpbGVzdHJlYW1faW5pdCgpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXRfbXJ1X2NhY2hlX3VuaW5pdDsKQEAgLTE4MzMsNiArMTc4NywxMCBAQAogCWlmIChlcnJvcikKIAkJZ290byBvdXRfY2xlYW51cF9wcm9jZnM7CiAKKwllcnJvciA9IHhmc19pbml0X3dvcmtxdWV1ZXMoKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X3N5c2N0bF91bnJlZ2lzdGVyOworCiAJdmZzX2luaXRxdW90YSgpOwogCiAJZXJyb3IgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZ4ZnNfZnNfdHlwZSk7CkBAIC0xODUwLDYgKzE4MDgsOCBAQAogCXhmc19maWxlc3RyZWFtX3VuaW5pdCgpOwogIG91dF9tcnVfY2FjaGVfdW5pbml0OgogCXhmc19tcnVfY2FjaGVfdW5pbml0KCk7Cisgb3V0X2Rlc3Ryb3lfd3E6CisJeGZzX2Rlc3Ryb3lfd29ya3F1ZXVlcygpOwogIG91dF9kZXN0cm95X3pvbmVzOgogCXhmc19kZXN0cm95X3pvbmVzKCk7CiAgb3V0OgpAQCAtMTg2Niw2ICsxODI2LDcgQEAKIAl4ZnNfYnVmX3Rlcm1pbmF0ZSgpOwogCXhmc19maWxlc3RyZWFtX3VuaW5pdCgpOwogCXhmc19tcnVfY2FjaGVfdW5pbml0KCk7CisJeGZzX2Rlc3Ryb3lfd29ya3F1ZXVlcygpOwogCXhmc19kZXN0cm95X3pvbmVzKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYwppbmRleCA1OTRjZDgyLi4zZTg5OGE0IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAieGZzX2xvZy5oIgogI2luY2x1ZGUgInhmc19pbnVtLmgiCiAjaW5jbHVkZSAieGZzX3RyYW5zLmgiCisjaW5jbHVkZSAieGZzX3RyYW5zX3ByaXYuaCIKICNpbmNsdWRlICJ4ZnNfc2IuaCIKICNpbmNsdWRlICJ4ZnNfYWcuaCIKICNpbmNsdWRlICJ4ZnNfbW91bnQuaCIKQEAgLTM5LDYgKzQwLDggQEAKICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogCitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqeGZzX3N5bmNkX3dxOwkvKiBzeW5jIHdvcmtxdWV1ZSAqLworCiAvKgogICogVGhlIGlub2RlIGxvb2t1cCBpcyBkb25lIGluIGJhdGNoZXMgdG8ga2VlcCB0aGUgYW1vdW50IG9mIGxvY2sgdHJhZmZpYyBhbmQKICAqIHJhZGl4IHRyZWUgbG9va3VwcyB0byBhIG1pbmltdW0uIFRoZSBiYXRjaCBzaXplIGlzIGEgdHJhZGUgb2ZmIGJldHdlZW4KQEAgLTQwMSw3ICs0MDQsNyBAQAogLyoKICAqIFNlY29uZCBzdGFnZSBvZiBhIHF1aWVzY2UuIFRoZSBkYXRhIGlzIGFscmVhZHkgc3luY2VkLCBub3cgd2UgaGF2ZSB0byB0YWtlCiAgKiBjYXJlIG9mIHRoZSBtZXRhZGF0YS4gTmV3IHRyYW5zYWN0aW9ucyBhcmUgYWxyZWFkeSBibG9ja2VkLCBzbyB3ZSBuZWVkIHRvCi0gKiB3YWl0IGZvciBhbnkgcmVtYWluaW5nIHRyYW5zYWN0aW9ucyB0byBkcmFpbiBvdXQgYmVmb3JlIHByb2NlZGluZy4KKyAqIHdhaXQgZm9yIGFueSByZW1haW5pbmcgdHJhbnNhY3Rpb25zIHRvIGRyYWluIG91dCBiZWZvcmUgcHJvY2VlZGluZy4KICAqLwogdm9pZAogeGZzX3F1aWVzY2VfYXR0cigKQEAgLTQzMSw2MiArNDM0LDEyIEBACiAJeGZzX3VubW91bnRmc193cml0ZXNiKG1wKTsKIH0KIAotLyoKLSAqIEVucXVldWUgYSB3b3JrIGl0ZW0gdG8gYmUgcGlja2VkIHVwIGJ5IHRoZSB2ZnMgeGZzc3luY2QgdGhyZWFkLgotICogRG9pbmcgdGhpcyBoYXMgdHdvIGFkdmFudGFnZXM6Ci0gKiAtIEl0IHNhdmVzIG9uIHN0YWNrIHNwYWNlLCB3aGljaCBpcyB0aWdodCBpbiBjZXJ0YWluIHNpdHVhdGlvbnMKLSAqIC0gSXQgY2FuIGJlIHVzZWQgKHdpdGggY2FyZSkgYXMgYSBtZWNoYW5pc20gdG8gYXZvaWQgZGVhZGxvY2tzLgotICogRmx1c2hpbmcgd2hpbGUgYWxsb2NhdGluZyBpbiBhIGZ1bGwgZmlsZXN5c3RlbSByZXF1aXJlcyBib3RoLgotICovCi1TVEFUSUMgdm9pZAoteGZzX3N5bmNkX3F1ZXVlX3dvcmsoCi0Jc3RydWN0IHhmc19tb3VudCAqbXAsCi0Jdm9pZAkJKmRhdGEsCi0Jdm9pZAkJKCpzeW5jZXIpKHN0cnVjdCB4ZnNfbW91bnQgKiwgdm9pZCAqKSwKLQlzdHJ1Y3QgY29tcGxldGlvbiAqY29tcGxldGlvbikKK3N0YXRpYyB2b2lkCit4ZnNfc3luY2RfcXVldWVfc3luYygKKwlzdHJ1Y3QgeGZzX21vdW50ICAgICAgICAqbXApCiB7Ci0Jc3RydWN0IHhmc19zeW5jX3dvcmsgKndvcms7Ci0KLQl3b3JrID0ga21lbV9hbGxvYyhzaXplb2Yoc3RydWN0IHhmc19zeW5jX3dvcmspLCBLTV9TTEVFUCk7Ci0JSU5JVF9MSVNUX0hFQUQoJndvcmstPndfbGlzdCk7Ci0Jd29yay0+d19zeW5jZXIgPSBzeW5jZXI7Ci0Jd29yay0+d19kYXRhID0gZGF0YTsKLQl3b3JrLT53X21vdW50ID0gbXA7Ci0Jd29yay0+d19jb21wbGV0aW9uID0gY29tcGxldGlvbjsKLQlzcGluX2xvY2soJm1wLT5tX3N5bmNfbG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmd29yay0+d19saXN0LCAmbXAtPm1fc3luY19saXN0KTsKLQlzcGluX3VubG9jaygmbXAtPm1fc3luY19sb2NrKTsKLQl3YWtlX3VwX3Byb2Nlc3MobXAtPm1fc3luY190YXNrKTsKLX0KLQotLyoKLSAqIEZsdXNoIGRlbGF5ZWQgYWxsb2NhdGUgZGF0YSwgYXR0ZW1wdGluZyB0byBmcmVlIHVwIHJlc2VydmVkIHNwYWNlCi0gKiBmcm9tIGV4aXN0aW5nIGFsbG9jYXRpb25zLiAgQXQgdGhpcyBwb2ludCBhIG5ldyBhbGxvY2F0aW9uIGF0dGVtcHQKLSAqIGhhcyBmYWlsZWQgd2l0aCBFTk9TUEMgYW5kIHdlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBzY3JhdGNoaW5nIG91cgotICogaGVhZHMsIGxvb2tpbmcgYWJvdXQgZm9yIG1vcmUgcm9vbS4uLgotICovCi1TVEFUSUMgdm9pZAoteGZzX2ZsdXNoX2lub2Rlc193b3JrKAotCXN0cnVjdCB4ZnNfbW91bnQgKm1wLAotCXZvaWQJCSphcmcpCi17Ci0Jc3RydWN0IGlub2RlCSppbm9kZSA9IGFyZzsKLQl4ZnNfc3luY19kYXRhKG1wLCBTWU5DX1RSWUxPQ0spOwotCXhmc19zeW5jX2RhdGEobXAsIFNZTkNfVFJZTE9DSyB8IFNZTkNfV0FJVCk7Ci0JaXB1dChpbm9kZSk7Ci19Ci0KLXZvaWQKLXhmc19mbHVzaF9pbm9kZXMoCi0JeGZzX2lub2RlX3QJKmlwKQotewotCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSBWRlNfSShpcCk7Ci0JREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soY29tcGxldGlvbik7Ci0KLQlpZ3JhYihpbm9kZSk7Ci0JeGZzX3N5bmNkX3F1ZXVlX3dvcmsoaXAtPmlfbW91bnQsIGlub2RlLCB4ZnNfZmx1c2hfaW5vZGVzX3dvcmssICZjb21wbGV0aW9uKTsKLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjb21wbGV0aW9uKTsKLQl4ZnNfbG9nX2ZvcmNlKGlwLT5pX21vdW50LCBYRlNfTE9HX1NZTkMpOworCXF1ZXVlX2RlbGF5ZWRfd29yayh4ZnNfc3luY2Rfd3EsICZtcC0+bV9zeW5jX3dvcmssCisJCQkJbXNlY3NfdG9famlmZmllcyh4ZnNfc3luY2RfY2VudGlzZWNzICogMTApKTsKIH0KIAogLyoKQEAgLTQ5Niw5ICs0NDksMTAgQEAKICAqLwogU1RBVElDIHZvaWQKIHhmc19zeW5jX3dvcmtlcigKLQlzdHJ1Y3QgeGZzX21vdW50ICptcCwKLQl2b2lkCQkqdW51c2VkKQorCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKKwlzdHJ1Y3QgeGZzX21vdW50ICptcCA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksCisJCQkJCXN0cnVjdCB4ZnNfbW91bnQsIG1fc3luY193b3JrKTsKIAlpbnQJCWVycm9yOwogCiAJaWYgKCEobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfUkRPTkxZKSkgewpAQCAtNTA4LDczICs0NjIsMTA2IEBACiAJCQllcnJvciA9IHhmc19mc19sb2dfZHVtbXkobXApOwogCQllbHNlCiAJCQl4ZnNfbG9nX2ZvcmNlKG1wLCAwKTsKLQkJeGZzX3JlY2xhaW1faW5vZGVzKG1wLCAwKTsKIAkJZXJyb3IgPSB4ZnNfcW1fc3luYyhtcCwgU1lOQ19UUllMT0NLKTsKKworCQkvKiBzdGFydCBwdXNoaW5nIGFsbCB0aGUgbWV0YWRhdGEgdGhhdCBpcyBjdXJyZW50bHkgZGlydHkgKi8KKwkJeGZzX2FpbF9wdXNoX2FsbChtcC0+bV9haWwpOwogCX0KLQltcC0+bV9zeW5jX3NlcSsrOwotCXdha2VfdXAoJm1wLT5tX3dhaXRfc2luZ2xlX3N5bmNfdGFzayk7CisKKwkvKiBxdWV1ZSB1cyB1cCBhZ2FpbiAqLworCXhmc19zeW5jZF9xdWV1ZV9zeW5jKG1wKTsKIH0KIAotU1RBVElDIGludAoteGZzc3luY2QoCi0Jdm9pZAkJCSphcmcpCisvKgorICogUXVldWUgYSBuZXcgaW5vZGUgcmVjbGFpbSBwYXNzIGlmIHRoZXJlIGFyZSByZWNsYWltYWJsZSBpbm9kZXMgYW5kIHRoZXJlCisgKiBpc24ndCBhIHJlY2xhaW0gcGFzcyBhbHJlYWR5IGluIHByb2dyZXNzLiBCeSBkZWZhdWx0IGl0IHJ1bnMgZXZlcnkgNXMgYmFzZWQKKyAqIG9uIHRoZSB4ZnMgc3luY2Qgd29yayBkZWZhdWx0IG9mIDMwcy4gUGVyaGFwcyB0aGlzIHNob3VsZCBoYXZlIGl0J3Mgb3duCisgKiB0dW5hYmxlLCBidXQgdGhhdCBjYW4gYmUgZG9uZSBpZiB0aGlzIG1ldGhvZCBwcm92ZXMgdG8gYmUgaW5lZmZlY3RpdmUgb3IgdG9vCisgKiBhZ2dyZXNzaXZlLgorICovCitzdGF0aWMgdm9pZAoreGZzX3N5bmNkX3F1ZXVlX3JlY2xhaW0oCisJc3RydWN0IHhmc19tb3VudCAgICAgICAgKm1wKQogewotCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gYXJnOwotCWxvbmcJCQl0aW1lbGVmdDsKLQl4ZnNfc3luY193b3JrX3QJCSp3b3JrLCAqbjsKLQlMSVNUX0hFQUQJCSh0bXApOwogCi0Jc2V0X2ZyZWV6YWJsZSgpOwotCXRpbWVsZWZ0ID0geGZzX3N5bmNkX2NlbnRpc2VjcyAqIG1zZWNzX3RvX2ppZmZpZXMoMTApOwotCWZvciAoOzspIHsKLQkJaWYgKGxpc3RfZW1wdHkoJm1wLT5tX3N5bmNfbGlzdCkpCi0JCQl0aW1lbGVmdCA9IHNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSh0aW1lbGVmdCk7Ci0JCS8qIHN3c3VzcCAqLwotCQl0cnlfdG9fZnJlZXplKCk7Ci0JCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgJiYgbGlzdF9lbXB0eSgmbXAtPm1fc3luY19saXN0KSkKLQkJCWJyZWFrOworCS8qCisJICogV2UgY2FuIGhhdmUgaW5vZGVzIGVudGVyIHJlY2xhaW0gYWZ0ZXIgd2UndmUgc2h1dCBkb3duIHRoZSBzeW5jZAorCSAqIHdvcmtxdWV1ZSBkdXJpbmcgdW5tb3VudCwgc28gZG9uJ3QgYWxsb3cgcmVjbGFpbSB3b3JrIHRvIGJlIHF1ZXVlZAorCSAqIGR1cmluZyB1bm1vdW50LgorCSAqLworCWlmICghKG1wLT5tX3N1cGVyLT5zX2ZsYWdzICYgTVNfQUNUSVZFKSkKKwkJcmV0dXJuOwogCi0JCXNwaW5fbG9jaygmbXAtPm1fc3luY19sb2NrKTsKLQkJLyoKLQkJICogV2UgY2FuIGdldCB3b2tlbiBieSBsYXB0b3AgbW9kZSwgdG8gZG8gYSBzeW5jIC0KLQkJICogdGhhdCdzIHRoZSAob25seSEpIGNhc2Ugd2hlcmUgdGhlIGxpc3Qgd291bGQgYmUKLQkJICogZW1wdHkgd2l0aCB0aW1lIHJlbWFpbmluZy4KLQkJICovCi0JCWlmICghdGltZWxlZnQgfHwgbGlzdF9lbXB0eSgmbXAtPm1fc3luY19saXN0KSkgewotCQkJaWYgKCF0aW1lbGVmdCkKLQkJCQl0aW1lbGVmdCA9IHhmc19zeW5jZF9jZW50aXNlY3MgKgotCQkJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMTApOwotCQkJSU5JVF9MSVNUX0hFQUQoJm1wLT5tX3N5bmNfd29yay53X2xpc3QpOwotCQkJbGlzdF9hZGRfdGFpbCgmbXAtPm1fc3luY193b3JrLndfbGlzdCwKLQkJCQkJJm1wLT5tX3N5bmNfbGlzdCk7Ci0JCX0KLQkJbGlzdF9zcGxpY2VfaW5pdCgmbXAtPm1fc3luY19saXN0LCAmdG1wKTsKLQkJc3Bpbl91bmxvY2soJm1wLT5tX3N5bmNfbG9jayk7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHdvcmssIG4sICZ0bXAsIHdfbGlzdCkgewotCQkJKCp3b3JrLT53X3N5bmNlcikobXAsIHdvcmstPndfZGF0YSk7Ci0JCQlsaXN0X2RlbCgmd29yay0+d19saXN0KTsKLQkJCWlmICh3b3JrID09ICZtcC0+bV9zeW5jX3dvcmspCi0JCQkJY29udGludWU7Ci0JCQlpZiAod29yay0+d19jb21wbGV0aW9uKQotCQkJCWNvbXBsZXRlKHdvcmstPndfY29tcGxldGlvbik7Ci0JCQlrbWVtX2ZyZWUod29yayk7Ci0JCX0KKwlyY3VfcmVhZF9sb2NrKCk7CisJaWYgKHJhZGl4X3RyZWVfdGFnZ2VkKCZtcC0+bV9wZXJhZ190cmVlLCBYRlNfSUNJX1JFQ0xBSU1fVEFHKSkgeworCQlxdWV1ZV9kZWxheWVkX3dvcmsoeGZzX3N5bmNkX3dxLCAmbXAtPm1fcmVjbGFpbV93b3JrLAorCQkJbXNlY3NfdG9famlmZmllcyh4ZnNfc3luY2RfY2VudGlzZWNzIC8gNiAqIDEwKSk7CiAJfQorCXJjdV9yZWFkX3VubG9jaygpOworfQogCi0JcmV0dXJuIDA7CisvKgorICogVGhpcyBpcyBhIGZhc3QgcGFzcyBvdmVyIHRoZSBpbm9kZSBjYWNoZSB0byB0cnkgdG8gZ2V0IHJlY2xhaW0gbW92aW5nIG9uIGFzCisgKiBtYW55IGlub2RlcyBhcyBwb3NzaWJsZSBpbiBhIHNob3J0IHBlcmlvZCBvZiB0aW1lLiBJdCBraWNrcyBpdHNlbGYgZXZlcnkgZmV3CisgKiBzZWNvbmRzLCBhcyB3ZWxsIGFzIGJlaW5nIGtpY2tlZCBieSB0aGUgaW5vZGUgY2FjaGUgc2hyaW5rZXIgd2hlbiBtZW1vcnkKKyAqIGdvZXMgbG93LiBJdCBzY2FucyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlIGF2b2lkaW5nIGxvY2tlZCBpbm9kZXMgb3IgdGhvc2UKKyAqIGFscmVhZHkgYmVpbmcgZmx1c2hlZCwgYW5kIG9uY2UgZG9uZSBzY2hlZHVsZXMgYSBmdXR1cmUgcGFzcy4KKyAqLworU1RBVElDIHZvaWQKK3hmc19yZWNsYWltX3dvcmtlcigKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHhmc19tb3VudCAqbXAgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLAorCQkJCQlzdHJ1Y3QgeGZzX21vdW50LCBtX3JlY2xhaW1fd29yayk7CisKKwl4ZnNfcmVjbGFpbV9pbm9kZXMobXAsIFNZTkNfVFJZTE9DSyk7CisJeGZzX3N5bmNkX3F1ZXVlX3JlY2xhaW0obXApOworfQorCisvKgorICogRmx1c2ggZGVsYXllZCBhbGxvY2F0ZSBkYXRhLCBhdHRlbXB0aW5nIHRvIGZyZWUgdXAgcmVzZXJ2ZWQgc3BhY2UKKyAqIGZyb20gZXhpc3RpbmcgYWxsb2NhdGlvbnMuICBBdCB0aGlzIHBvaW50IGEgbmV3IGFsbG9jYXRpb24gYXR0ZW1wdAorICogaGFzIGZhaWxlZCB3aXRoIEVOT1NQQyBhbmQgd2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHNjcmF0Y2hpbmcgb3VyCisgKiBoZWFkcywgbG9va2luZyBhYm91dCBmb3IgbW9yZSByb29tLgorICoKKyAqIFF1ZXVlIGEgbmV3IGRhdGEgZmx1c2ggaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHkgaW4gcHJvZ3Jlc3MgYW5kCisgKiB3YWl0IGZvciBjb21wbGV0aW9uIG9mIHRoZSBmbHVzaC4gVGhpcyBtZWFucyB0aGF0IHdlIG9ubHkgZXZlciBoYXZlIG9uZQorICogaW5vZGUgZmx1c2ggaW4gcHJvZ3Jlc3Mgbm8gbWF0dGVyIGhvdyBtYW55IEVOT1NQQyBldmVudHMgYXJlIG9jY3VycmluZyBhbmQKKyAqIHNvIHdpbGwgcHJldmVudCB0aGUgc3lzdGVtIGZyb20gYm9nZ2luZyBkb3duIGR1ZSB0byBldmVyeSBjb25jdXJyZW50CisgKiBFTk9TUEMgZXZlbnQgc2Nhbm5pbmcgYWxsIHRoZSBhY3RpdmUgaW5vZGVzIGluIHRoZSBzeXN0ZW0gZm9yIHdyaXRlYmFjay4KKyAqLwordm9pZAoreGZzX2ZsdXNoX2lub2RlcygKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCkKK3sKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLT5pX21vdW50OworCisJcXVldWVfd29yayh4ZnNfc3luY2Rfd3EsICZtcC0+bV9mbHVzaF93b3JrKTsKKwlmbHVzaF93b3JrX3N5bmMoJm1wLT5tX2ZsdXNoX3dvcmspOworfQorCitTVEFUSUMgdm9pZAoreGZzX2ZsdXNoX3dvcmtlcigKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHhmc19tb3VudCAqbXAgPSBjb250YWluZXJfb2Yod29yaywKKwkJCQkJc3RydWN0IHhmc19tb3VudCwgbV9mbHVzaF93b3JrKTsKKworCXhmc19zeW5jX2RhdGEobXAsIFNZTkNfVFJZTE9DSyk7CisJeGZzX3N5bmNfZGF0YShtcCwgU1lOQ19UUllMT0NLIHwgU1lOQ19XQUlUKTsKIH0KIAogaW50CiB4ZnNfc3luY2RfaW5pdCgKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCkKIHsKLQltcC0+bV9zeW5jX3dvcmsud19zeW5jZXIgPSB4ZnNfc3luY193b3JrZXI7Ci0JbXAtPm1fc3luY193b3JrLndfbW91bnQgPSBtcDsKLQltcC0+bV9zeW5jX3dvcmsud19jb21wbGV0aW9uID0gTlVMTDsKLQltcC0+bV9zeW5jX3Rhc2sgPSBrdGhyZWFkX3J1bih4ZnNzeW5jZCwgbXAsICJ4ZnNzeW5jZC8lcyIsIG1wLT5tX2ZzbmFtZSk7Ci0JaWYgKElTX0VSUihtcC0+bV9zeW5jX3Rhc2spKQotCQlyZXR1cm4gLVBUUl9FUlIobXAtPm1fc3luY190YXNrKTsKKwlJTklUX1dPUksoJm1wLT5tX2ZsdXNoX3dvcmssIHhmc19mbHVzaF93b3JrZXIpOworCUlOSVRfREVMQVlFRF9XT1JLKCZtcC0+bV9zeW5jX3dvcmssIHhmc19zeW5jX3dvcmtlcik7CisJSU5JVF9ERUxBWUVEX1dPUksoJm1wLT5tX3JlY2xhaW1fd29yaywgeGZzX3JlY2xhaW1fd29ya2VyKTsKKworCXhmc19zeW5jZF9xdWV1ZV9zeW5jKG1wKTsKKwl4ZnNfc3luY2RfcXVldWVfcmVjbGFpbShtcCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTgyLDcgKzU2OSw5IEBACiB4ZnNfc3luY2Rfc3RvcCgKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCkKIHsKLQlrdGhyZWFkX3N0b3AobXAtPm1fc3luY190YXNrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJm1wLT5tX3N5bmNfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZtcC0+bV9yZWNsYWltX3dvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJm1wLT5tX2ZsdXNoX3dvcmspOwogfQogCiB2b2lkCkBAIC02MDEsNiArNTkwLDEwIEBACiAJCQkJWEZTX0lOT19UT19BR05PKGlwLT5pX21vdW50LCBpcC0+aV9pbm8pLAogCQkJCVhGU19JQ0lfUkVDTEFJTV9UQUcpOwogCQlzcGluX3VubG9jaygmaXAtPmlfbW91bnQtPm1fcGVyYWdfbG9jayk7CisKKwkJLyogc2NoZWR1bGUgcGVyaW9kaWMgYmFja2dyb3VuZCBpbm9kZSByZWNsYWltICovCisJCXhmc19zeW5jZF9xdWV1ZV9yZWNsYWltKGlwLT5pX21vdW50KTsKKwogCQl0cmFjZV94ZnNfcGVyYWdfc2V0X3JlY2xhaW0oaXAtPmlfbW91bnQsIHBhZy0+cGFnX2Fnbm8sCiAJCQkJCQkJLTEsIF9SRVRfSVBfKTsKIAl9CkBAIC05MzMsNiArOTI2LDcgQEAKIAkJCQkJWEZTX0xPT0tVUF9CQVRDSCwKIAkJCQkJWEZTX0lDSV9SRUNMQUlNX1RBRyk7CiAJCQlpZiAoIW5yX2ZvdW5kKSB7CisJCQkJZG9uZSA9IDE7CiAJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xMDE3LDcgKzEwMTEsMTMgQEAKIH0KIAogLyoKLSAqIFNocmlua2VyIGluZnJhc3RydWN0dXJlLgorICogSW5vZGUgY2FjaGUgc2hyaW5rZXIuCisgKgorICogV2hlbiBjYWxsZWQgd2UgbWFrZSBzdXJlIHRoYXQgdGhlcmUgaXMgYSBiYWNrZ3JvdW5kIChmYXN0KSBpbm9kZSByZWNsYWltIGluCisgKiBwcm9ncmVzcywgd2hpbGUgd2Ugd2lsbCB0aHJvdHRsZSB0aGUgc3BlZWQgb2YgcmVjbGFpbSB2aWEgZG9paW5nIHN5bmNocm9ub3VzCisgKiByZWNsYWltIG9mIGlub2Rlcy4gVGhhdCBtZWFucyBpZiB3ZSBjb21lIGFjcm9zcyBkaXJ0eSBpbm9kZXMsIHdlIHdhaXQgZm9yCisgKiB0aGVtIHRvIGJlIGNsZWFuZWQsIHdoaWNoIHdlIGhvcGUgd2lsbCBub3QgYmUgdmVyeSBsb25nIGR1ZSB0byB0aGUKKyAqIGJhY2tncm91bmQgd2Fsa2VyIGhhdmluZyBhbHJlYWR5IGtpY2tlZCB0aGUgSU8gb2ZmIG9uIHRob3NlIGRpcnR5IGlub2Rlcy4KICAqLwogc3RhdGljIGludAogeGZzX3JlY2xhaW1faW5vZGVfc2hyaW5rKApAQCAtMTAzMiwxMCArMTAzMiwxNSBAQAogCiAJbXAgPSBjb250YWluZXJfb2Yoc2hyaW5rLCBzdHJ1Y3QgeGZzX21vdW50LCBtX2lub2RlX3Nocmluayk7CiAJaWYgKG5yX3RvX3NjYW4pIHsKKwkJLyoga2ljayBiYWNrZ3JvdW5kIHJlY2xhaW1lciBhbmQgcHVzaCB0aGUgQUlMICovCisJCXhmc19zeW5jZF9xdWV1ZV9yZWNsYWltKG1wKTsKKwkJeGZzX2FpbF9wdXNoX2FsbChtcC0+bV9haWwpOworCiAJCWlmICghKGdmcF9tYXNrICYgX19HRlBfRlMpKQogCQkJcmV0dXJuIC0xOwogCi0JCXhmc19yZWNsYWltX2lub2Rlc19hZyhtcCwgU1lOQ19UUllMT0NLLCAmbnJfdG9fc2Nhbik7CisJCXhmc19yZWNsYWltX2lub2Rlc19hZyhtcCwgU1lOQ19UUllMT0NLIHwgU1lOQ19XQUlULAorCQkJCQkmbnJfdG9fc2Nhbik7CiAJCS8qIHRlcm1pbmF0ZSBpZiB3ZSBkb24ndCBleGhhdXN0IHRoZSBzY2FuICovCiAJCWlmIChucl90b19zY2FuID4gMCkKIAkJCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuaAppbmRleCAzMmJhNjYyLi5lM2E2YWQyIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5oCkBAIC0zMiw2ICszMiw4IEBACiAjZGVmaW5lIFNZTkNfV0FJVAkJMHgwMDAxCS8qIHdhaXQgZm9yIGkvbyB0byBjb21wbGV0ZSAqLwogI2RlZmluZSBTWU5DX1RSWUxPQ0sJCTB4MDAwMiAgLyogb25seSB0cnkgdG8gbG9jayBpbm9kZXMgKi8KIAorZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSp4ZnNfc3luY2Rfd3E7CS8qIHN5bmMgd29ya3F1ZXVlICovCisKIGludCB4ZnNfc3luY2RfaW5pdChzdHJ1Y3QgeGZzX21vdW50ICptcCk7CiB2b2lkIHhmc19zeW5jZF9zdG9wKHN0cnVjdCB4ZnNfbW91bnQgKm1wKTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jCmluZGV4IDdlMjQxNjQuLjZmYTIxNDYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmMKQEAgLTYwMCw3ICs2MDAsNyBAQAogCiAJLyoKIAkgKiBSZXNlcnZhdGlvbiBjb3VudGVycyBhcmUgZGVmaW5lZCBhcyByZXNlcnZhdGlvbiBwbHVzIGN1cnJlbnQgdXNhZ2UKLQkgKiB0byBhdm9pZCBoYXZpbmcgdG8gYWRkIGV2ZXJ5dGltZS4KKwkgKiB0byBhdm9pZCBoYXZpbmcgdG8gYWRkIGV2ZXJ5IHRpbWUuCiAJICovCiAJZHFwLT5xX3Jlc19iY291bnQgPSBiZTY0X3RvX2NwdShkZHFwLT5kX2Jjb3VudCk7CiAJZHFwLT5xX3Jlc19pY291bnQgPSBiZTY0X3RvX2NwdShkZHFwLT5kX2ljb3VudCk7CmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3FtLmMgYi9mcy94ZnMvcXVvdGEveGZzX3FtLmMKaW5kZXggMjU0ZWUwNi4uNjkyMjhhYSAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbS5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfcW0uYwpAQCAtNDYxLDEyICs0NjEsMTAgQEAKIAlzdHJ1Y3QgeGZzX3F1b3RhaW5mbwkqcSA9IG1wLT5tX3F1b3RhaW5mbzsKIAlpbnQJCQlyZWNsOwogCXN0cnVjdCB4ZnNfZHF1b3QJKmRxcDsKLQlpbnQJCQluaXRlcnM7CiAJaW50CQkJZXJyb3I7CiAKIAlpZiAoIXEpCiAJCXJldHVybiAwOwotCW5pdGVycyA9IDA7CiBhZ2FpbjoKIAltdXRleF9sb2NrKCZxLT5xaV9kcWxpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkcXAsICZxLT5xaV9kcWxpc3QsIHFfbXBsaXN0KSB7CkBAIC0xMzE0LDE0ICsxMzEyLDkgQEAKIHsKIAl4ZnNfYnVmX3QJKmJwOwogCWludAkJZXJyb3I7Ci0JaW50CQlub3Rjb21taXR0ZWQ7Ci0JaW50CQlpbmNyOwogCWludAkJdHlwZTsKIAogCUFTU0VSVChibGtjbnQgPiAwKTsKLQlub3Rjb21taXR0ZWQgPSAwOwotCWluY3IgPSAoYmxrY250ID4gWEZTX1FNX01BWF9EUUNMVVNURVJfTE9HU1opID8KLQkJWEZTX1FNX01BWF9EUUNMVVNURVJfTE9HU1ogOiBibGtjbnQ7CiAJdHlwZSA9IGZsYWdzICYgWEZTX1FNT1BUX1VRVU9UQSA/IFhGU19EUV9VU0VSIDoKIAkJKGZsYWdzICYgWEZTX1FNT1BUX1BRVU9UQSA/IFhGU19EUV9QUk9KIDogWEZTX0RRX0dST1VQKTsKIAllcnJvciA9IDA7CmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3FtLmggYi9mcy94ZnMvcXVvdGEveGZzX3FtLmgKaW5kZXggYzk0NDZmMS4uNTY3YjI5YiAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbS5oCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfcW0uaApAQCAtNjUsMTEgKzY1LDYgQEAKICAqIGJsb2NrIGluIHRoZSBkcXVvdC94cW0gY29kZS4KICAqLwogI2RlZmluZSBYRlNfRFFVT1RfQ0xVU1RFUl9TSVpFX0ZTQgkoeGZzX2ZpbGJsa3NfdCkxCi0vKgotICogV2hlbiBkb2luZyBhIHF1b3RhY2hlY2ssIHdlIGxvZyBkcXVvdCBjbHVzdGVycyBvZiB0aGlzIG1hbnkgRlNCcyBhdCBtb3N0Ci0gKiBpbiBhIHNpbmdsZSB0cmFuc2FjdGlvbi4gV2UgZG9uJ3Qgd2FudCB0byBhc2sgZm9yIHRvbyBodWdlIGEgbG9nIHJlc2VydmF0aW9uLgotICovCi0jZGVmaW5lIFhGU19RTV9NQVhfRFFDTFVTVEVSX0xPR1NaCTMKIAogdHlwZWRlZiB4ZnNfZHFoYXNoX3QJeGZzX2RxbGlzdF90OwogCmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3FtX2Jodi5jIGIvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYwppbmRleCA3NzRkN2VjLi5hMGE4MjlhIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtX2Jodi5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fYmh2LmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCQkgKi8KIAkJaWYgKHF1b3Rhb25kaXNrICYmICFYRlNfUU1fTkVFRF9RVU9UQUNIRUNLKG1wKSkgewogCQkJLyoKLQkJCSAqIElmIGFuIGVycm9yIG9jY3VyZWQsIHFtX21vdW50X3F1b3RhcyBjb2RlCisJCQkgKiBJZiBhbiBlcnJvciBvY2N1cnJlZCwgcW1fbW91bnRfcXVvdGFzIGNvZGUKIAkJCSAqIGhhcyBhbHJlYWR5IGRpc2FibGVkIHF1b3Rhcy4gU28sIGp1c3QgZmluaXNoCiAJCQkgKiBtb3VudGluZywgYW5kIGdldCBvbiB3aXRoIHRoZSBib3JpbmcgbGlmZQogCQkJICogd2l0aG91dCBkaXNrIHF1b3Rhcy4KZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYwppbmRleCBjODJmMDY3Li4yZGFkYjE1IDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCkBAIC0xNzIsNyArMTcyLDcgQEAKIAkvKgogCSAqIE5leHQgd2UgbWFrZSB0aGUgY2hhbmdlcyBpbiB0aGUgcXVvdGEgZmxhZyBpbiB0aGUgbW91bnQgc3RydWN0LgogCSAqIFRoaXMgaXNuJ3QgcHJvdGVjdGVkIGJ5IGEgcGFydGljdWxhciBsb2NrIGRpcmVjdGx5LCBiZWNhdXNlIHdlCi0JICogZG9uJ3Qgd2FudCB0byB0YWtlIGEgbXJsb2NrIGV2ZXJ5dGltZSB3ZSBkZXBlbmQgb24gcXVvdGFzIGJlaW5nIG9uLgorCSAqIGRvbid0IHdhbnQgdG8gdGFrZSBhIG1ybG9jayBldmVyeSB0aW1lIHdlIGRlcGVuZCBvbiBxdW90YXMgYmVpbmcgb24uCiAJICovCiAJbXAtPm1fcWZsYWdzICY9IH4oZmxhZ3MpOwogCkBAIC0zMTMsMTQgKzMxMywxMiBAQAogewogCWludAkJZXJyb3I7CiAJdWludAkJcWY7Ci0JdWludAkJYWNjZmxhZ3M7CiAJX19pbnQ2NF90CXNiZmxhZ3M7CiAKIAlmbGFncyAmPSAoWEZTX0FMTF9RVU9UQV9BQ0NUIHwgWEZTX0FMTF9RVU9UQV9FTkZEKTsKIAkvKgogCSAqIFN3aXRjaGluZyBvbiBxdW90YSBhY2NvdW50aW5nIG11c3QgYmUgZG9uZSBhdCBtb3VudCB0aW1lLgogCSAqLwotCWFjY2ZsYWdzID0gZmxhZ3MgJiBYRlNfQUxMX1FVT1RBX0FDQ1Q7CiAJZmxhZ3MgJj0gfihYRlNfQUxMX1FVT1RBX0FDQ1QpOwogCiAJc2JmbGFncyA9IDA7CkBAIC0zNTQsNyArMzUyLDcgQEAKIAkJcmV0dXJuIFhGU19FUlJPUihFSU5WQUwpOwogCX0KIAkvKgotCSAqIElmIGV2ZXJ5dGhpbmcncyB1cHRvLWRhdGUgaW5jb3JlLCB0aGVuIGRvbid0IHdhc3RlIHRpbWUuCisJICogSWYgZXZlcnl0aGluZydzIHVwIHRvLWRhdGUgaW5jb3JlLCB0aGVuIGRvbid0IHdhc3RlIHRpbWUuCiAJICovCiAJaWYgKChtcC0+bV9xZmxhZ3MgJiBmbGFncykgPT0gZmxhZ3MpCiAJCXJldHVybiBYRlNfRVJST1IoRUVYSVNUKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYWxsb2MuYyBiL2ZzL3hmcy94ZnNfYWxsb2MuYwppbmRleCA0YmMzYzY0Li4yN2Q2NGQ3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2FsbG9jLmMKKysrIGIvZnMveGZzL3hmc19hbGxvYy5jCkBAIC0yMzk1LDE3ICsyMzk1LDMzIEBACiAJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoeGZzX2FsbG9jX2FyZ190KSk7CiAJYXJncy50cCA9IHRwOwogCWFyZ3MubXAgPSB0cC0+dF9tb3VudHA7CisKKwkvKgorCSAqIHZhbGlkYXRlIHRoYXQgdGhlIGJsb2NrIG51bWJlciBpcyBsZWdhbCAtIHRoZSBlbmFibGVzIHVzIHRvIGRldGVjdAorCSAqIGFuZCBoYW5kbGUgYSBzaWxlbnQgZmlsZXN5c3RlbSBjb3JydXB0aW9uIHJhdGhlciB0aGFuIGNyYXNoaW5nLgorCSAqLwogCWFyZ3MuYWdubyA9IFhGU19GU0JfVE9fQUdOTyhhcmdzLm1wLCBibm8pOwotCUFTU0VSVChhcmdzLmFnbm8gPCBhcmdzLm1wLT5tX3NiLnNiX2FnY291bnQpOworCWlmIChhcmdzLmFnbm8gPj0gYXJncy5tcC0+bV9zYi5zYl9hZ2NvdW50KQorCQlyZXR1cm4gRUZTQ09SUlVQVEVEOworCiAJYXJncy5hZ2JubyA9IFhGU19GU0JfVE9fQUdCTk8oYXJncy5tcCwgYm5vKTsKKwlpZiAoYXJncy5hZ2JubyA+PSBhcmdzLm1wLT5tX3NiLnNiX2FnYmxvY2tzKQorCQlyZXR1cm4gRUZTQ09SUlVQVEVEOworCiAJYXJncy5wYWcgPSB4ZnNfcGVyYWdfZ2V0KGFyZ3MubXAsIGFyZ3MuYWdubyk7Ci0JaWYgKChlcnJvciA9IHhmc19hbGxvY19maXhfZnJlZWxpc3QoJmFyZ3MsIFhGU19BTExPQ19GTEFHX0ZSRUVJTkcpKSkKKwlBU1NFUlQoYXJncy5wYWcpOworCisJZXJyb3IgPSB4ZnNfYWxsb2NfZml4X2ZyZWVsaXN0KCZhcmdzLCBYRlNfQUxMT0NfRkxBR19GUkVFSU5HKTsKKwlpZiAoZXJyb3IpCiAJCWdvdG8gZXJyb3IwOwotI2lmZGVmIERFQlVHCi0JQVNTRVJUKGFyZ3MuYWdicCAhPSBOVUxMKTsKLQlBU1NFUlQoKGFyZ3MuYWdibm8gKyBsZW4pIDw9Ci0JCWJlMzJfdG9fY3B1KFhGU19CVUZfVE9fQUdGKGFyZ3MuYWdicCktPmFnZl9sZW5ndGgpKTsKLSNlbmRpZgorCisJLyogdmFsaWRhdGUgdGhlIGV4dGVudCBzaXplIGlzIGxlZ2FsIG5vdyB3ZSBoYXZlIHRoZSBhZ2YgbG9ja2VkICovCisJaWYgKGFyZ3MuYWdibm8gKyBsZW4gPgorCQkJYmUzMl90b19jcHUoWEZTX0JVRl9UT19BR0YoYXJncy5hZ2JwKS0+YWdmX2xlbmd0aCkpIHsKKwkJZXJyb3IgPSBFRlNDT1JSVVBURUQ7CisJCWdvdG8gZXJyb3IwOworCX0KKwogCWVycm9yID0geGZzX2ZyZWVfYWdfZXh0ZW50KHRwLCBhcmdzLmFnYnAsIGFyZ3MuYWdubywgYXJncy5hZ2JubywgbGVuLCAwKTsKIGVycm9yMDoKIAl4ZnNfcGVyYWdfcHV0KGFyZ3MucGFnKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYwppbmRleCBlNTQxM2Q5Li43YjdlMDA1IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2J1Zl9pdGVtLmMKKysrIGIvZnMveGZzL3hmc19idWZfaXRlbS5jCkBAIC05OTIsNyArOTkyLDcgQEAKIAlsYXN0dGFyZyA9IFhGU19CVUZfVEFSR0VUKGJwKTsKIAogCS8qCi0JICogSWYgdGhlIHdyaXRlIHdhcyBhc3luY2hyb25vdXMgdGhlbiBub29uZSB3aWxsIGJlIGxvb2tpbmcgZm9yIHRoZQorCSAqIElmIHRoZSB3cml0ZSB3YXMgYXN5bmNocm9ub3VzIHRoZW4gbm8gb25lIHdpbGwgYmUgbG9va2luZyBmb3IgdGhlCiAJICogZXJyb3IuICBDbGVhciB0aGUgZXJyb3Igc3RhdGUgYW5kIHdyaXRlIHRoZSBidWZmZXIgb3V0IGFnYWluLgogCSAqCiAJICogRHVyaW5nIHN5bmMgb3IgdW1vdW50IHdlJ2xsIHdyaXRlIGFsbCBwZW5kaW5nIGJ1ZmZlcnMgYWdhaW4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuYyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwppbmRleCA3NDJjODMzLi5hMzc0ODBhIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlLmMKKysrIGIvZnMveGZzL3hmc19pbm9kZS5jCkBAIC0yNzg5LDcgKzI3ODksNyBAQAogCiAJLyoKIAkgKiBXZSBjYW4ndCBmbHVzaCB0aGUgaW5vZGUgdW50aWwgaXQgaXMgdW5waW5uZWQsIHNvIHdhaXQgZm9yIGl0IGlmIHdlCi0JICogYXJlIGFsbG93ZWQgdG8gYmxvY2suICBXZSBrbm93IG5vb25lIG5ldyBjYW4gcGluIGl0LCBiZWNhdXNlIHdlIGFyZQorCSAqIGFyZSBhbGxvd2VkIHRvIGJsb2NrLiAgV2Uga25vdyBubyBvbmUgbmV3IGNhbiBwaW4gaXQsIGJlY2F1c2Ugd2UgYXJlCiAJICogaG9sZGluZyB0aGUgaW5vZGUgbG9jayBzaGFyZWQgYW5kIHlvdSBuZWVkIHRvIGhvbGQgaXQgZXhjbHVzaXZlbHkgdG8KIAkgKiBwaW4gdGhlIGlub2RlLgogCSAqCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmggYi9mcy94ZnMveGZzX2lub2RlLmgKaW5kZXggZjc1MzIwMC4uZmY0ZTJhMyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5oCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuaApAQCAtMTExLDcgKzExMSw3IEBACiAgKiBHZW5lcmFsbHksIHdlIGRvIG5vdCB3YW50IHRvIGhvbGQgdGhlIGlfcmxvY2sgd2hpbGUgaG9sZGluZyB0aGUKICAqIGlfaWxvY2suIEhpZXJhcmNoeSBpcyBpX2lvbG9jayBmb2xsb3dlZCBieSBpX3Jsb2NrLgogICoKLSAqIHhmc19pcHRyX3QgY29udGFpbnMgYWxsIHRoZSBpbm9kZSBmaWVsZHMgdXB0byBhbmQgaW5jbHVkaW5nIHRoZQorICogeGZzX2lwdHJfdCBjb250YWlucyBhbGwgdGhlIGlub2RlIGZpZWxkcyB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZQogICogaV9tbmV4dCBhbmQgaV9tcHJldiBmaWVsZHMsIGl0IGlzIHVzZWQgYXMgYSBtYXJrZXIgaW4gdGhlIGlub2RlCiAgKiBjaGFpbiBvZmYgdGhlIG1vdW50IHN0cnVjdHVyZSBieSB4ZnNfc3luYyBjYWxscy4KICAqLwpAQCAtMzM2LDcgKzMzNiw3IEBACiAKIC8qCiAgKiBQcm9qZWN0IHF1b3RhIGlkIGhlbHBlcnMgKHByZXZpb3VzbHkgcHJvamlkIHdhcyAxNmJpdCBvbmx5Ci0gKiBhbmQgdXNpbmcgdHdvIDE2Yml0IHZhbHVlcyB0byBob2xkIG5ldyAzMmJpdCBwcm9qaWQgd2FzIGNob29zZW4KKyAqIGFuZCB1c2luZyB0d28gMTZiaXQgdmFsdWVzIHRvIGhvbGQgbmV3IDMyYml0IHByb2ppZCB3YXMgY2hvc2VuCiAgKiB0byByZXRhaW4gY29tcGF0aWJpbGl0eSB3aXRoICJvbGQiIGZpbGVzeXN0ZW1zKS4KICAqLwogc3RhdGljIGlubGluZSBwcmlkX3QKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jIGIvZnMveGZzL3hmc19pbm9kZV9pdGVtLmMKaW5kZXggNDZjYzQwMS4uNTc2ZmRmZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZV9pdGVtLmMKKysrIGIvZnMveGZzL3hmc19pbm9kZV9pdGVtLmMKQEAgLTE5OCw2ICsxOTgsNDEgQEAKIH0KIAogLyoKKyAqIHhmc19pbm9kZV9pdGVtX2Zvcm1hdF9leHRlbnRzIC0gY29udmVydCBpbi1jb3JlIGV4dGVudHMgdG8gb24tZGlzayBmb3JtCisgKgorICogRm9yIGVpdGhlciB0aGUgZGF0YSBvciBhdHRyIGZvcmsgaW4gZXh0ZW50IGZvcm1hdCwgd2UgbmVlZCB0byBlbmRpYW4gY29udmVydAorICogdGhlIGluLWNvcmUgZXh0ZW50IGFzIHdlIHBsYWNlIHRoZW0gaW50byB0aGUgb24tZGlzayBpbm9kZS4gSW4gdGhpcyBjYXNlLCB3ZQorICogbmVlZCB0byBkbyB0aGlzIGNvbnZlcnNpb24gYmVmb3JlIHdlIHdyaXRlIHRoZSBleHRlbnRzIGludG8gdGhlIGxvZy4gQmVjYXVzZQorICogd2UgZG9uJ3QgaGF2ZSB0aGUgZGlzayBpbm9kZSB0byB3cml0ZSBpbnRvIGhlcmUsIHdlIGFsbG9jYXRlIGEgYnVmZmVyIGFuZAorICogZm9ybWF0IHRoZSBleHRlbnRzIGludG8gaXQgdmlhIHhmc19pZXh0ZW50c19jb3B5KCkuIFdlIGZyZWUgdGhlIGJ1ZmZlciBpbgorICogdGhlIHVubG9jayByb3V0aW5lIGFmdGVyIHRoZSBjb3B5IGZvciB0aGUgbG9nIGhhcyBiZWVuIG1hZGUuCisgKgorICogSW4gdGhlIGNhc2Ugb2YgdGhlIGRhdGEgZm9yaywgdGhlIGluLWNvcmUgYW5kIG9uLWRpc2sgZm9yayBzaXplcyBjYW4gYmUKKyAqIGRpZmZlcmVudCBkdWUgdG8gZGVsYXllZCBhbGxvY2F0aW9uIGV4dGVudHMuIFdlIG9ubHkgbG9nIG9uLWRpc2sgZXh0ZW50cworICogaGVyZSwgc28gYWx3YXlzIHVzZSB0aGUgcGh5c2ljYWwgZm9yayBzaXplIHRvIGRldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUKKyAqIGJ1ZmZlciB3ZSBuZWVkIHRvIGFsbG9jYXRlLgorICovCitTVEFUSUMgdm9pZAoreGZzX2lub2RlX2l0ZW1fZm9ybWF0X2V4dGVudHMoCisJc3RydWN0IHhmc19pbm9kZQkqaXAsCisJc3RydWN0IHhmc19sb2dfaW92ZWMJKnZlY3AsCisJaW50CQkJd2hpY2hmb3JrLAorCWludAkJCXR5cGUpCit7CisJeGZzX2JtYnRfcmVjX3QJCSpleHRfYnVmZmVyOworCisJZXh0X2J1ZmZlciA9IGttZW1fYWxsb2MoWEZTX0lGT1JLX1NJWkUoaXAsIHdoaWNoZm9yayksIEtNX1NMRUVQKTsKKwlpZiAod2hpY2hmb3JrID09IFhGU19EQVRBX0ZPUkspCisJCWlwLT5pX2l0ZW1wLT5pbGlfZXh0ZW50c19idWYgPSBleHRfYnVmZmVyOworCWVsc2UKKwkJaXAtPmlfaXRlbXAtPmlsaV9hZXh0ZW50c19idWYgPSBleHRfYnVmZmVyOworCisJdmVjcC0+aV9hZGRyID0gZXh0X2J1ZmZlcjsKKwl2ZWNwLT5pX2xlbiA9IHhmc19pZXh0ZW50c19jb3B5KGlwLCBleHRfYnVmZmVyLCB3aGljaGZvcmspOworCXZlY3AtPmlfdHlwZSA9IHR5cGU7Cit9CisKKy8qCiAgKiBUaGlzIGlzIGNhbGxlZCB0byBmaWxsIGluIHRoZSB2ZWN0b3Igb2YgbG9nIGlvdmVjcyBmb3IgdGhlCiAgKiBnaXZlbiBpbm9kZSBsb2cgaXRlbS4gIEl0IGZpbGxzIHRoZSBmaXJzdCBpdGVtIHdpdGggYW4gaW5vZGUKICAqIGxvZyBmb3JtYXQgc3RydWN0dXJlLCB0aGUgc2Vjb25kIHdpdGggdGhlIG9uLWRpc2sgaW5vZGUgc3RydWN0dXJlLApAQCAtMjEzLDcgKzI0OCw2IEBACiAJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBpaXAtPmlsaV9pbm9kZTsKIAl1aW50CQkJbnZlY3M7CiAJc2l6ZV90CQkJZGF0YV9ieXRlczsKLQl4ZnNfYm1idF9yZWNfdAkJKmV4dF9idWZmZXI7CiAJeGZzX21vdW50X3QJCSptcDsKIAogCXZlY3AtPmlfYWRkciA9ICZpaXAtPmlsaV9mb3JtYXQ7CkBAIC0zMjAsMjIgKzM1NCw4IEBACiAJCQl9IGVsc2UKICNlbmRpZgogCQkJewotCQkJCS8qCi0JCQkJICogVGhlcmUgYXJlIGRlbGF5ZWQgYWxsb2NhdGlvbiBleHRlbnRzCi0JCQkJICogaW4gdGhlIGlub2RlLCBvciB3ZSBuZWVkIHRvIGNvbnZlcnQKLQkJCQkgKiB0aGUgZXh0ZW50cyB0byBvbiBkaXNrIGZvcm1hdC4KLQkJCQkgKiBVc2UgeGZzX2lleHRlbnRzX2NvcHkoKQotCQkJCSAqIHRvIGNvcHkgb25seSB0aGUgcmVhbCBleHRlbnRzIGludG8KLQkJCQkgKiBhIHNlcGFyYXRlIGJ1ZmZlci4gIFdlJ2xsIGZyZWUgdGhlCi0JCQkJICogYnVmZmVyIGluIHRoZSB1bmxvY2sgcm91dGluZS4KLQkJCQkgKi8KLQkJCQlleHRfYnVmZmVyID0ga21lbV9hbGxvYyhpcC0+aV9kZi5pZl9ieXRlcywKLQkJCQkJS01fU0xFRVApOwotCQkJCWlpcC0+aWxpX2V4dGVudHNfYnVmID0gZXh0X2J1ZmZlcjsKLQkJCQl2ZWNwLT5pX2FkZHIgPSBleHRfYnVmZmVyOwotCQkJCXZlY3AtPmlfbGVuID0geGZzX2lleHRlbnRzX2NvcHkoaXAsIGV4dF9idWZmZXIsCi0JCQkJCQlYRlNfREFUQV9GT1JLKTsKLQkJCQl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0lFWFQ7CisJCQkJeGZzX2lub2RlX2l0ZW1fZm9ybWF0X2V4dGVudHMoaXAsIHZlY3AsCisJCQkJCVhGU19EQVRBX0ZPUkssIFhMT0dfUkVHX1RZUEVfSUVYVCk7CiAJCQl9CiAJCQlBU1NFUlQodmVjcC0+aV9sZW4gPD0gaXAtPmlfZGYuaWZfYnl0ZXMpOwogCQkJaWlwLT5pbGlfZm9ybWF0LmlsZl9kc2l6ZSA9IHZlY3AtPmlfbGVuOwpAQCAtNDQ1LDE5ICs0NjUsMTIgQEAKIAkJCSAqLwogCQkJdmVjcC0+aV9hZGRyID0gaXAtPmlfYWZwLT5pZl91MS5pZl9leHRlbnRzOwogCQkJdmVjcC0+aV9sZW4gPSBpcC0+aV9hZnAtPmlmX2J5dGVzOworCQkJdmVjcC0+aV90eXBlID0gWExPR19SRUdfVFlQRV9JQVRUUl9FWFQ7CiAjZWxzZQogCQkJQVNTRVJUKGlpcC0+aWxpX2FleHRlbnRzX2J1ZiA9PSBOVUxMKTsKLQkJCS8qCi0JCQkgKiBOZWVkIHRvIGVuZGlhbiBmbGlwIGJlZm9yZSBsb2dnaW5nCi0JCQkgKi8KLQkJCWV4dF9idWZmZXIgPSBrbWVtX2FsbG9jKGlwLT5pX2FmcC0+aWZfYnl0ZXMsCi0JCQkJS01fU0xFRVApOwotCQkJaWlwLT5pbGlfYWV4dGVudHNfYnVmID0gZXh0X2J1ZmZlcjsKLQkJCXZlY3AtPmlfYWRkciA9IGV4dF9idWZmZXI7Ci0JCQl2ZWNwLT5pX2xlbiA9IHhmc19pZXh0ZW50c19jb3B5KGlwLCBleHRfYnVmZmVyLAotCQkJCQlYRlNfQVRUUl9GT1JLKTsKKwkJCXhmc19pbm9kZV9pdGVtX2Zvcm1hdF9leHRlbnRzKGlwLCB2ZWNwLAorCQkJCQlYRlNfQVRUUl9GT1JLLCBYTE9HX1JFR19UWVBFX0lBVFRSX0VYVCk7CiAjZW5kaWYKLQkJCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfSUFUVFJfRVhUOwogCQkJaWlwLT5pbGlfZm9ybWF0LmlsZl9hc2l6ZSA9IHZlY3AtPmlfbGVuOwogCQkJdmVjcCsrOwogCQkJbnZlY3MrKzsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaXRhYmxlLmMgYi9mcy94ZnMveGZzX2l0YWJsZS5jCmluZGV4IGRjMTg4MmEuLjc1MWU5NGYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaXRhYmxlLmMKKysrIGIvZnMveGZzL3hmc19pdGFibGUuYwpAQCAtMjA0LDcgKzIwNCw2IEBACiAJeGZzX2FnaV90CQkqYWdpOwkvKiBhZ2kgaGVhZGVyIGRhdGEgKi8KIAl4ZnNfYWdpbm9fdAkJYWdpbm87CS8qIGlub2RlICMgaW4gYWxsb2NhdGlvbiBncm91cCAqLwogCXhmc19hZ251bWJlcl90CQlhZ25vOwkvKiBhbGxvY2F0aW9uIGdyb3VwIG51bWJlciAqLwotCXhmc19kYWRkcl90CQlibm87CS8qIGlub2RlIGNsdXN0ZXIgc3RhcnQgZGFkZHIgKi8KIAlpbnQJCQljaHVua2lkeDsgLyogY3VycmVudCBpbmRleCBpbnRvIGlub2RlIGNodW5rICovCiAJaW50CQkJY2x1c3RpZHg7IC8qIGN1cnJlbnQgaW5kZXggaW50byBpbm9kZSBjbHVzdGVyICovCiAJeGZzX2J0cmVlX2N1cl90CQkqY3VyOwkvKiBidHJlZSBjdXJzb3IgZm9yIGlhbGxvYyBidHJlZSAqLwpAQCAtNDYzLDcgKzQ2Miw2IEBACiAJCQkJCQkgbXAtPm1fc2Iuc2JfaW5vcGJsb2cpOwogCQkJCX0KIAkJCQlpbm8gPSBYRlNfQUdJTk9fVE9fSU5PKG1wLCBhZ25vLCBhZ2lubyk7Ci0JCQkJYm5vID0gWEZTX0FHQl9UT19EQUREUihtcCwgYWdubywgYWdibm8pOwogCQkJCS8qCiAJCQkJICogU2tpcCBpZiB0aGlzIGlub2RlIGlzIGZyZWUuCiAJCQkJICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZy5jIGIvZnMveGZzL3hmc19sb2cuYwppbmRleCAyNWVmYTliLi5iNjEyY2U0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZy5jCisrKyBiL2ZzL3hmcy94ZnNfbG9nLmMKQEAgLTc2MSw3ICs3NjEsNyBAQAogCQlicmVhazsKIAljYXNlIFhMT0dfU1RBVEVfQ09WRVJfTkVFRDoKIAljYXNlIFhMT0dfU1RBVEVfQ09WRVJfTkVFRDI6Ci0JCWlmICgheGZzX3RyYW5zX2FpbF90YWlsKGxvZy0+bF9haWxwKSAmJgorCQlpZiAoIXhmc19haWxfbWluX2xzbihsb2ctPmxfYWlscCkgJiYKIAkJICAgIHhsb2dfaWNsb2dzX2VtcHR5KGxvZykpIHsKIAkJCWlmIChsb2ctPmxfY292ZXJlZF9zdGF0ZSA9PSBYTE9HX1NUQVRFX0NPVkVSX05FRUQpCiAJCQkJbG9nLT5sX2NvdmVyZWRfc3RhdGUgPSBYTE9HX1NUQVRFX0NPVkVSX0RPTkU7CkBAIC04MDEsNyArODAxLDcgQEAKIAl4ZnNfbHNuX3QJCXRhaWxfbHNuOwogCXN0cnVjdCBsb2cJCSpsb2cgPSBtcC0+bV9sb2c7CiAKLQl0YWlsX2xzbiA9IHhmc190cmFuc19haWxfdGFpbChtcC0+bV9haWwpOworCXRhaWxfbHNuID0geGZzX2FpbF9taW5fbHNuKG1wLT5tX2FpbCk7CiAJaWYgKCF0YWlsX2xzbikKIAkJdGFpbF9sc24gPSBhdG9taWM2NF9yZWFkKCZsb2ctPmxfbGFzdF9zeW5jX2xzbik7CiAKQEAgLTEyMzksNyArMTIzOSw3IEBACiAJICogdGhlIGZpbGVzeXN0ZW0gaXMgc2h1dHRpbmcgZG93bi4KIAkgKi8KIAlpZiAoIVhMT0dfRk9SQ0VEX1NIVVRET1dOKGxvZykpCi0JCXhmc190cmFuc19haWxfcHVzaChsb2ctPmxfYWlscCwgdGhyZXNob2xkX2xzbik7CisJCXhmc19haWxfcHVzaChsb2ctPmxfYWlscCwgdGhyZXNob2xkX2xzbik7CiB9CiAKIC8qCkBAIC0zNDA3LDYgKzM0MDcsMTcgQEAKIAkJeGZzX2VtZXJnKGxvZy0+bF9tcCwgIiVzOiBpbnZhbGlkIHB0ciIsIF9fZnVuY19fKTsKIH0KIAorLyoKKyAqIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgZ3JhbnQgd3JpdGUgaGVhZCBkaWRuJ3QganVzdCBvdmVyIGxhcCB0aGUgdGFpbC4gIElmCisgKiB0aGUgY3ljbGVzIGFyZSB0aGUgc2FtZSwgd2UgY2FuJ3QgYmUgb3ZlcmxhcHBpbmcuICBPdGhlcndpc2UsIG1ha2Ugc3VyZSB0aGF0CisgKiB0aGUgY3ljbGVzIGRpZmZlciBieSBleGFjdGx5IG9uZSBhbmQgY2hlY2sgdGhlIGJ5dGUgY291bnQuCisgKgorICogVGhpcyBjaGVjayBpcyBydW4gdW5sb2NrZWQsIHNvIGNhbiBnaXZlIGZhbHNlIHBvc2l0aXZlcy4gUmF0aGVyIHRoYW4gYXNzZXJ0CisgKiBvbiBmYWlsdXJlcywgdXNlIGEgd2Fybi1vbmNlIGZsYWcgYW5kIGEgcGFuaWMgdGFnIHRvIGFsbG93IHRoZSBhZG1pbiB0bworICogZGV0ZXJtaW5lIGlmIHRoZXkgd2FudCB0byBwYW5pYyB0aGUgbWFjaGluZSB3aGVuIHN1Y2ggYW4gZXJyb3Igb2NjdXJzLiBGb3IKKyAqIGRlYnVnIGtlcm5lbHMgdGhpcyB3aWxsIGhhdmUgdGhlIHNhbWUgZWZmZWN0IGFzIHVzaW5nIGFuIGFzc2VydCBidXQsIHVubGlua2UKKyAqIGFuIGFzc2VydCwgaXQgY2FuIGJlIHR1cm5lZCBvZmYgYXQgcnVudGltZS4KKyAqLwogU1RBVElDIHZvaWQKIHhsb2dfdmVyaWZ5X2dyYW50X3RhaWwoCiAJc3RydWN0IGxvZwkqbG9nKQpAQCAtMzQxNCwxNyArMzQyNSwyMiBAQAogCWludAkJdGFpbF9jeWNsZSwgdGFpbF9ibG9ja3M7CiAJaW50CQljeWNsZSwgc3BhY2U7CiAKLQkvKgotCSAqIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgZ3JhbnQgd3JpdGUgaGVhZCBkaWRuJ3QganVzdCBvdmVyIGxhcCB0aGUKLQkgKiB0YWlsLiAgSWYgdGhlIGN5Y2xlcyBhcmUgdGhlIHNhbWUsIHdlIGNhbid0IGJlIG92ZXJsYXBwaW5nLgotCSAqIE90aGVyd2lzZSwgbWFrZSBzdXJlIHRoYXQgdGhlIGN5Y2xlcyBkaWZmZXIgYnkgZXhhY3RseSBvbmUgYW5kCi0JICogY2hlY2sgdGhlIGJ5dGUgY291bnQuCi0JICovCiAJeGxvZ19jcmFja19ncmFudF9oZWFkKCZsb2ctPmxfZ3JhbnRfd3JpdGVfaGVhZCwgJmN5Y2xlLCAmc3BhY2UpOwogCXhsb2dfY3JhY2tfYXRvbWljX2xzbigmbG9nLT5sX3RhaWxfbHNuLCAmdGFpbF9jeWNsZSwgJnRhaWxfYmxvY2tzKTsKIAlpZiAodGFpbF9jeWNsZSAhPSBjeWNsZSkgewotCQlBU1NFUlQoY3ljbGUgLSAxID09IHRhaWxfY3ljbGUpOwotCQlBU1NFUlQoc3BhY2UgPD0gQkJUT0IodGFpbF9ibG9ja3MpKTsKKwkJaWYgKGN5Y2xlIC0gMSAhPSB0YWlsX2N5Y2xlICYmCisJCSAgICAhKGxvZy0+bF9mbGFncyAmIFhMT0dfVEFJTF9XQVJOKSkgeworCQkJeGZzX2FsZXJ0X3RhZyhsb2ctPmxfbXAsIFhGU19QVEFHX0xPR1JFUywKKwkJCQkiJXM6IGN5Y2xlIC0gMSAhPSB0YWlsX2N5Y2xlIiwgX19mdW5jX18pOworCQkJbG9nLT5sX2ZsYWdzIHw9IFhMT0dfVEFJTF9XQVJOOworCQl9CisKKwkJaWYgKHNwYWNlID4gQkJUT0IodGFpbF9ibG9ja3MpICYmCisJCSAgICAhKGxvZy0+bF9mbGFncyAmIFhMT0dfVEFJTF9XQVJOKSkgeworCQkJeGZzX2FsZXJ0X3RhZyhsb2ctPmxfbXAsIFhGU19QVEFHX0xPR1JFUywKKwkJCQkiJXM6IHNwYWNlID4gQkJUT0IodGFpbF9ibG9ja3MpIiwgX19mdW5jX18pOworCQkJbG9nLT5sX2ZsYWdzIHw9IFhMT0dfVEFJTF9XQVJOOworCQl9CiAJfQogfQogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZ19wcml2LmggYi9mcy94ZnMveGZzX2xvZ19wcml2LmgKaW5kZXggMTVkYmYxZi4uNTg2NDg1MCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2dfcHJpdi5oCisrKyBiL2ZzL3hmcy94ZnNfbG9nX3ByaXYuaApAQCAtMTQ0LDYgKzE0NCw3IEBACiAjZGVmaW5lCVhMT0dfUkVDT1ZFUllfTkVFREVECTB4NAkvKiBsb2cgd2FzIHJlY292ZXJlZCAqLwogI2RlZmluZSBYTE9HX0lPX0VSUk9SCQkweDgJLyogbG9nIGhpdCBhbiBJL08gZXJyb3IsIGFuZCBiZWluZwogCQkJCQkgICBzaHV0ZG93biAqLworI2RlZmluZSBYTE9HX1RBSUxfV0FSTgkJMHgxMAkvKiBsb2cgdGFpbCB2ZXJpZnkgd2FybmluZyBpc3N1ZWQgKi8KIAogI2lmZGVmIF9fS0VSTkVMX18KIC8qCkBAIC01NzAsNyArNTcxLDcgQEAKICAqIFdoZW4gd2UgY3JhY2sgYW4gYXRvbWljIExTTiwgd2Ugc2FtcGxlIGl0IGZpcnN0IHNvIHRoYXQgdGhlIHZhbHVlIHdpbGwgbm90CiAgKiBjaGFuZ2Ugd2hpbGUgd2UgYXJlIGNyYWNraW5nIGl0IGludG8gdGhlIGNvbXBvbmVudCB2YWx1ZXMuIFRoaXMgbWVhbnMgd2UKICAqIHdpbGwgYWx3YXlzIGdldCBjb25zaXN0ZW50IGNvbXBvbmVudCB2YWx1ZXMgdG8gd29yayBmcm9tLiBUaGlzIHNob3VsZCBhbHdheXMKLSAqIGJlIHVzZWQgdG8gc21hcGxlIGFuZCBjcmFjayBMU05zIHRhaHQgYXJlIHN0b3JlZCBhbmQgdXBkYXRlZCBpbiBhdG9taWMKKyAqIGJlIHVzZWQgdG8gc2FtcGxlIGFuZCBjcmFjayBMU05zIHRoYXQgYXJlIHN0b3JlZCBhbmQgdXBkYXRlZCBpbiBhdG9taWMKICAqIHZhcmlhYmxlcy4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMgYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKaW5kZXggMGM0YTU2MS4uNWNjNDY0YSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCisrKyBiL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiAJLyoKIAkgKiBXZSBkbyBsb2cgSS9PIGluIHVuaXRzIG9mIGxvZyBzZWN0b3JzIChhIHBvd2VyLW9mLTIKIAkgKiBtdWx0aXBsZSBvZiB0aGUgYmFzaWMgYmxvY2sgc2l6ZSksIHNvIHdlIHJvdW5kIHVwIHRoZQotCSAqIHJlcXVlc3RlZCBzaXplIHRvIGFjb21tb2RhdGUgdGhlIGJhc2ljIGJsb2NrcyByZXF1aXJlZAorCSAqIHJlcXVlc3RlZCBzaXplIHRvIGFjY29tbW9kYXRlIHRoZSBiYXNpYyBibG9ja3MgcmVxdWlyZWQKIAkgKiBmb3IgY29tcGxldGUgbG9nIHNlY3RvcnMuCiAJICoKIAkgKiBJbiBhZGRpdGlvbiwgdGhlIGJ1ZmZlciBtYXkgYmUgdXNlZCBmb3IgYSBub24tc2VjdG9yLQpAQCAtMTEyLDcgKzExMiw3IEBACiAJICogYW4gaXNzdWUuICBOb3Igd2lsbCB0aGlzIGJlIGEgcHJvYmxlbSBpZiB0aGUgbG9nIEkvTyBpcwogCSAqIGRvbmUgaW4gYmFzaWMgYmxvY2tzIChzZWN0b3Igc2l6ZSAxKS4gIEJ1dCBvdGhlcndpc2Ugd2UKIAkgKiBleHRlbmQgdGhlIGJ1ZmZlciBieSBvbmUgZXh0cmEgbG9nIHNlY3RvciB0byBlbnN1cmUKLQkgKiB0aGVyZSdzIHNwYWNlIHRvIGFjY29tb2RhdGUgdGhpcyBwb3NzaWJsaWxpdHkuCisJICogdGhlcmUncyBzcGFjZSB0byBhY2NvbW1vZGF0ZSB0aGlzIHBvc3NpYmlsaXR5LgogCSAqLwogCWlmIChuYmJsa3MgPiAxICYmIGxvZy0+bF9zZWN0QkJzaXplID4gMSkKIAkJbmJibGtzICs9IGxvZy0+bF9zZWN0QkJzaXplOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5oIGIvZnMveGZzL3hmc19tb3VudC5oCmluZGV4IGE2MmU4OTcuLjE5YWYwYWIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuaAorKysgYi9mcy94ZnMveGZzX21vdW50LmgKQEAgLTIwMywxMiArMjAzLDkgQEAKIAlzdHJ1Y3QgbXV0ZXgJCW1faWNzYl9tdXRleDsJLyogYmFsYW5jZXIgc3luYyBsb2NrICovCiAjZW5kaWYKIAlzdHJ1Y3QgeGZzX21ydV9jYWNoZQkqbV9maWxlc3RyZWFtOyAgLyogcGVyLW1vdW50IGZpbGVzdHJlYW0gZGF0YSAqLwotCXN0cnVjdCB0YXNrX3N0cnVjdAkqbV9zeW5jX3Rhc2s7CS8qIGdlbmVyYWxpc2VkIHN5bmMgdGhyZWFkICovCi0JeGZzX3N5bmNfd29ya190CQltX3N5bmNfd29yazsJLyogd29yayBpdGVtIGZvciBWRlNfU1lOQyAqLwotCXN0cnVjdCBsaXN0X2hlYWQJbV9zeW5jX2xpc3Q7CS8qIHN5bmMgdGhyZWFkIHdvcmsgaXRlbSBsaXN0ICovCi0Jc3BpbmxvY2tfdAkJbV9zeW5jX2xvY2s7CS8qIHdvcmsgaXRlbSBsaXN0IGxvY2sgKi8KLQlpbnQJCQltX3N5bmNfc2VxOwkvKiBzeW5jIHRocmVhZCBnZW5lcmF0aW9uIG5vLiAqLwotCXdhaXRfcXVldWVfaGVhZF90CW1fd2FpdF9zaW5nbGVfc3luY190YXNrOworCXN0cnVjdCBkZWxheWVkX3dvcmsJbV9zeW5jX3dvcms7CS8qIGJhY2tncm91bmQgc3luYyB3b3JrICovCisJc3RydWN0IGRlbGF5ZWRfd29yawltX3JlY2xhaW1fd29yazsJLyogYmFja2dyb3VuZCBpbm9kZSByZWNsYWltICovCisJc3RydWN0IHdvcmtfc3RydWN0CW1fZmx1c2hfd29yazsJLyogYmFja2dyb3VuZCBpbm9kZSBmbHVzaCAqLwogCV9faW50NjRfdAkJbV91cGRhdGVfZmxhZ3M7CS8qIHNiIGZsYWdzIHdlIG5lZWQgdG8gdXBkYXRlCiAJCQkJCQkgICBvbiB0aGUgbmV4dCByZW1vdW50LHJ3ICovCiAJc3RydWN0IHNocmlua2VyCQltX2lub2RlX3NocmluazsJLyogaW5vZGUgcmVjbGFpbSBzaHJpbmtlciAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFuc19haWwuYyBiL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMKaW5kZXggMTJhZmY5NS4uNWZjMjM4MCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFuc19haWwuYworKysgYi9mcy94ZnMveGZzX3RyYW5zX2FpbC5jCkBAIC0yOCw3NCArMjgsMTM4IEBACiAjaW5jbHVkZSAieGZzX3RyYW5zX3ByaXYuaCIKICNpbmNsdWRlICJ4ZnNfZXJyb3IuaCIKIAotU1RBVElDIHZvaWQgeGZzX2FpbF9zcGxpY2Uoc3RydWN0IHhmc19haWwgKiwgc3RydWN0IGxpc3RfaGVhZCAqLCB4ZnNfbHNuX3QpOwotU1RBVElDIHZvaWQgeGZzX2FpbF9kZWxldGUoc3RydWN0IHhmc19haWwgKiwgeGZzX2xvZ19pdGVtX3QgKik7Ci1TVEFUSUMgeGZzX2xvZ19pdGVtX3QgKiB4ZnNfYWlsX21pbihzdHJ1Y3QgeGZzX2FpbCAqKTsKLVNUQVRJQyB4ZnNfbG9nX2l0ZW1fdCAqIHhmc19haWxfbmV4dChzdHJ1Y3QgeGZzX2FpbCAqLCB4ZnNfbG9nX2l0ZW1fdCAqKTsKK3N0cnVjdCB3b3JrcXVldWVfc3RydWN0CSp4ZnNfYWlsX3dxOwkvKiBBSUwgd29ya3F1ZXVlICovCiAKICNpZmRlZiBERUJVRwotU1RBVElDIHZvaWQgeGZzX2FpbF9jaGVjayhzdHJ1Y3QgeGZzX2FpbCAqLCB4ZnNfbG9nX2l0ZW1fdCAqKTsKLSNlbHNlCisvKgorICogQ2hlY2sgdGhhdCB0aGUgbGlzdCBpcyBzb3J0ZWQgYXMgaXQgc2hvdWxkIGJlLgorICovCitTVEFUSUMgdm9pZAoreGZzX2FpbF9jaGVjaygKKwlzdHJ1Y3QgeGZzX2FpbAkqYWlscCwKKwl4ZnNfbG9nX2l0ZW1fdAkqbGlwKQoreworCXhmc19sb2dfaXRlbV90CSpwcmV2X2xpcDsKKworCWlmIChsaXN0X2VtcHR5KCZhaWxwLT54YV9haWwpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIENoZWNrIHRoZSBuZXh0IGFuZCBwcmV2aW91cyBlbnRyaWVzIGFyZSB2YWxpZC4KKwkgKi8KKwlBU1NFUlQoKGxpcC0+bGlfZmxhZ3MgJiBYRlNfTElfSU5fQUlMKSAhPSAwKTsKKwlwcmV2X2xpcCA9IGxpc3RfZW50cnkobGlwLT5saV9haWwucHJldiwgeGZzX2xvZ19pdGVtX3QsIGxpX2FpbCk7CisJaWYgKCZwcmV2X2xpcC0+bGlfYWlsICE9ICZhaWxwLT54YV9haWwpCisJCUFTU0VSVChYRlNfTFNOX0NNUChwcmV2X2xpcC0+bGlfbHNuLCBsaXAtPmxpX2xzbikgPD0gMCk7CisKKwlwcmV2X2xpcCA9IGxpc3RfZW50cnkobGlwLT5saV9haWwubmV4dCwgeGZzX2xvZ19pdGVtX3QsIGxpX2FpbCk7CisJaWYgKCZwcmV2X2xpcC0+bGlfYWlsICE9ICZhaWxwLT54YV9haWwpCisJCUFTU0VSVChYRlNfTFNOX0NNUChwcmV2X2xpcC0+bGlfbHNuLCBsaXAtPmxpX2xzbikgPj0gMCk7CisKKworI2lmZGVmIFhGU19UUkFOU19ERUJVRworCS8qCisJICogV2FsayB0aGUgbGlzdCBjaGVja2luZyBsc24gb3JkZXJpbmcsIGFuZCB0aGF0IGV2ZXJ5IGVudHJ5IGhhcyB0aGUKKwkgKiBYRlNfTElfSU5fQUlMIGZsYWcgc2V0LiBUaGlzIGlzIHJlYWxseSBleHBlbnNpdmUsIHNvIG9ubHkgZG8gaXQKKwkgKiB3aGVuIHNwZWNpZmljYWxseSBkZWJ1Z2dpbmcgdGhlIHRyYW5zYWN0aW9uIHN1YnN5c3RlbS4KKwkgKi8KKwlwcmV2X2xpcCA9IGxpc3RfZW50cnkoJmFpbHAtPnhhX2FpbCwgeGZzX2xvZ19pdGVtX3QsIGxpX2FpbCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShsaXAsICZhaWxwLT54YV9haWwsIGxpX2FpbCkgeworCQlpZiAoJnByZXZfbGlwLT5saV9haWwgIT0gJmFpbHAtPnhhX2FpbCkKKwkJCUFTU0VSVChYRlNfTFNOX0NNUChwcmV2X2xpcC0+bGlfbHNuLCBsaXAtPmxpX2xzbikgPD0gMCk7CisJCUFTU0VSVCgobGlwLT5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpICE9IDApOworCQlwcmV2X2xpcCA9IGxpcDsKKwl9CisjZW5kaWYgLyogWEZTX1RSQU5TX0RFQlVHICovCit9CisjZWxzZSAvKiAhREVCVUcgKi8KICNkZWZpbmUJeGZzX2FpbF9jaGVjayhhLGwpCiAjZW5kaWYgLyogREVCVUcgKi8KIAorLyoKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIEFJTC4gIElmIHRoZSBBSUwgaXMgZW1wdHksIHRoZW4KKyAqIHJldHVybiBOVUxMLgorICovCitzdGF0aWMgeGZzX2xvZ19pdGVtX3QgKgoreGZzX2FpbF9taW4oCisJc3RydWN0IHhmc19haWwgICphaWxwKQoreworCWlmIChsaXN0X2VtcHR5KCZhaWxwLT54YV9haWwpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBsaXN0X2ZpcnN0X2VudHJ5KCZhaWxwLT54YV9haWwsIHhmc19sb2dfaXRlbV90LCBsaV9haWwpOworfQorCisgLyoKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGxhc3QgaXRlbSBpbiB0aGUgQUlMLiAgSWYgdGhlIEFJTCBpcyBlbXB0eSwgdGhlbgorICogcmV0dXJuIE5VTEwuCisgKi8KK3N0YXRpYyB4ZnNfbG9nX2l0ZW1fdCAqCit4ZnNfYWlsX21heCgKKwlzdHJ1Y3QgeGZzX2FpbCAgKmFpbHApCit7CisJaWYgKGxpc3RfZW1wdHkoJmFpbHAtPnhhX2FpbCkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGxpc3RfZW50cnkoYWlscC0+eGFfYWlsLnByZXYsIHhmc19sb2dfaXRlbV90LCBsaV9haWwpOworfQogCiAvKgotICogVGhpcyBpcyBjYWxsZWQgYnkgdGhlIGxvZyBtYW5hZ2VyIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBMU04KLSAqIG9mIHRoZSB0YWlsIG9mIHRoZSBsb2cuICBUaGlzIGlzIGV4YWN0bHkgdGhlIExTTiBvZiB0aGUgZmlyc3QKLSAqIGl0ZW0gaW4gdGhlIEFJTC4gIElmIHRoZSBBSUwgaXMgZW1wdHksIHRoZW4gdGhpcyBmdW5jdGlvbgotICogcmV0dXJucyAwLgorICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgaXRlbSB3aGljaCBmb2xsb3dzIHRoZSBnaXZlbiBpdGVtIGluIHRoZSBBSUwuICBJZgorICogdGhlIGdpdmVuIGl0ZW0gaXMgdGhlIGxhc3QgaXRlbSBpbiB0aGUgbGlzdCwgdGhlbiByZXR1cm4gTlVMTC4KKyAqLworc3RhdGljIHhmc19sb2dfaXRlbV90ICoKK3hmc19haWxfbmV4dCgKKwlzdHJ1Y3QgeGZzX2FpbCAgKmFpbHAsCisJeGZzX2xvZ19pdGVtX3QgICpsaXApCit7CisJaWYgKGxpcC0+bGlfYWlsLm5leHQgPT0gJmFpbHAtPnhhX2FpbCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gbGlzdF9maXJzdF9lbnRyeSgmbGlwLT5saV9haWwsIHhmc19sb2dfaXRlbV90LCBsaV9haWwpOworfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgYnkgdGhlIGxvZyBtYW5hZ2VyIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBMU04gb2YgdGhlIHRhaWwgb2YKKyAqIHRoZSBsb2cuICBUaGlzIGlzIGV4YWN0bHkgdGhlIExTTiBvZiB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgQUlMLiAgSWYgdGhlIEFJTAorICogaXMgZW1wdHksIHRoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIDAuCiAgKgotICogV2UgbmVlZCB0aGUgQUlMIGxvY2sgaW4gb3JkZXIgdG8gZ2V0IGEgY29oZXJlbnQgcmVhZCBvZiB0aGUKLSAqIGxzbiBvZiB0aGUgbGFzdCBpdGVtIGluIHRoZSBBSUwuCisgKiBXZSBuZWVkIHRoZSBBSUwgbG9jayBpbiBvcmRlciB0byBnZXQgYSBjb2hlcmVudCByZWFkIG9mIHRoZSBsc24gb2YgdGhlIGxhc3QKKyAqIGl0ZW0gaW4gdGhlIEFJTC4KICAqLwogeGZzX2xzbl90Ci14ZnNfdHJhbnNfYWlsX3RhaWwoCit4ZnNfYWlsX21pbl9sc24oCiAJc3RydWN0IHhmc19haWwJKmFpbHApCiB7Ci0JeGZzX2xzbl90CWxzbjsKKwl4ZnNfbHNuX3QJbHNuID0gMDsKIAl4ZnNfbG9nX2l0ZW1fdAkqbGlwOwogCiAJc3Bpbl9sb2NrKCZhaWxwLT54YV9sb2NrKTsKIAlsaXAgPSB4ZnNfYWlsX21pbihhaWxwKTsKLQlpZiAobGlwID09IE5VTEwpIHsKLQkJbHNuID0gKHhmc19sc25fdCkwOwotCX0gZWxzZSB7CisJaWYgKGxpcCkKIAkJbHNuID0gbGlwLT5saV9sc247Ci0JfQogCXNwaW5fdW5sb2NrKCZhaWxwLT54YV9sb2NrKTsKIAogCXJldHVybiBsc247CiB9CiAKIC8qCi0gKiB4ZnNfdHJhbnNfcHVzaF9haWwKLSAqCi0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIG1vdmUgdGhlIHRhaWwgb2YgdGhlIEFJTCBmb3J3YXJkLiAgSXQgZG9lcyB0aGlzIGJ5Ci0gKiB0cnlpbmcgdG8gZmx1c2ggaXRlbXMgaW4gdGhlIEFJTCB3aG9zZSBsc25zIGFyZSBiZWxvdyB0aGUgZ2l2ZW4KLSAqIHRocmVzaG9sZF9sc24uCi0gKgotICogdGhlIHB1c2ggaXMgcnVuIGFzeW5jaHJvbm91c2x5IGluIGEgc2VwYXJhdGUgdGhyZWFkLCBzbyB3ZSByZXR1cm4gdGhlIHRhaWwKLSAqIG9mIHRoZSBsb2cgcmlnaHQgbm93IGluc3RlYWQgb2YgdGhlIHRhaWwgYWZ0ZXIgdGhlIHB1c2guIFRoaXMgbWVhbnMgd2Ugd2lsbAotICogZWl0aGVyIGNvbnRpbnVlIHJpZ2h0IGF3YXksIG9yIHdlIHdpbGwgc2xlZXAgd2FpdGluZyBvbiB0aGUgYXN5bmMgdGhyZWFkIHRvCi0gKiBkbyBpdHMgd29yay4KLSAqCi0gKiBXZSBkbyB0aGlzIHVubG9ja2VkIC0gd2Ugb25seSBuZWVkIHRvIGtub3cgd2hldGhlciB0aGVyZSBpcyBhbnl0aGluZyBpbiB0aGUKLSAqIEFJTCBhdCB0aGUgdGltZSB3ZSBhcmUgY2FsbGVkLiBXZSBkb24ndCBuZWVkIHRvIGFjY2VzcyB0aGUgY29udGVudHMgb2YKLSAqIGFueSBvZiB0aGUgb2JqZWN0cywgc28gdGhlIGxvY2sgaXMgbm90IG5lZWRlZC4KKyAqIFJldHVybiB0aGUgbWF4aW11bSBsc24gaGVsZCBpbiB0aGUgQUlMLCBvciB6ZXJvIGlmIHRoZSBBSUwgaXMgZW1wdHkuCiAgKi8KLXZvaWQKLXhmc190cmFuc19haWxfcHVzaCgKLQlzdHJ1Y3QgeGZzX2FpbAkqYWlscCwKLQl4ZnNfbHNuX3QJdGhyZXNob2xkX2xzbikKK3N0YXRpYyB4ZnNfbHNuX3QKK3hmc19haWxfbWF4X2xzbigKKwlzdHJ1Y3QgeGZzX2FpbCAgKmFpbHApCiB7Ci0JeGZzX2xvZ19pdGVtX3QJKmxpcDsKKwl4ZnNfbHNuX3QgICAgICAgbHNuID0gMDsKKwl4ZnNfbG9nX2l0ZW1fdCAgKmxpcDsKIAotCWxpcCA9IHhmc19haWxfbWluKGFpbHApOwotCWlmIChsaXAgJiYgIVhGU19GT1JDRURfU0hVVERPV04oYWlscC0+eGFfbW91bnQpKSB7Ci0JCWlmIChYRlNfTFNOX0NNUCh0aHJlc2hvbGRfbHNuLCBhaWxwLT54YV90YXJnZXQpID4gMCkKLQkJCXhmc2FpbGRfd2FrZXVwKGFpbHAsIHRocmVzaG9sZF9sc24pOwotCX0KKwlzcGluX2xvY2soJmFpbHAtPnhhX2xvY2spOworCWxpcCA9IHhmc19haWxfbWF4KGFpbHApOworCWlmIChsaXApCisJCWxzbiA9IGxpcC0+bGlfbHNuOworCXNwaW5fdW5sb2NrKCZhaWxwLT54YV9sb2NrKTsKKworCXJldHVybiBsc247CiB9CiAKIC8qCkBAIC0yMzYsMzUgKzMwMCw3OCBAQAogfQogCiAvKgotICogeGZzYWlsZF9wdXNoIGRvZXMgdGhlIHdvcmsgb2YgcHVzaGluZyBvbiB0aGUgQUlMLiAgUmV0dXJuaW5nIGEgdGltZW91dCBvZgotICogemVybyBpbmRpY2F0ZXMgdGhhdCB0aGUgY2FsbGVyIHNob3VsZCBzbGVlcCB1bnRpbCB3b2tlbi4KKyAqIHNwbGljZSB0aGUgbG9nIGl0ZW0gbGlzdCBpbnRvIHRoZSBBSUwgYXQgdGhlIGdpdmVuIExTTi4KICAqLwotbG9uZwoteGZzYWlsZF9wdXNoKAotCXN0cnVjdCB4ZnNfYWlsCSphaWxwLAotCXhmc19sc25fdAkqbGFzdF9sc24pCitzdGF0aWMgdm9pZAoreGZzX2FpbF9zcGxpY2UoCisJc3RydWN0IHhmc19haWwgICphaWxwLAorCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisJeGZzX2xzbl90ICAgICAgIGxzbikKIHsKLQlsb25nCQl0b3V0ID0gMDsKLQl4ZnNfbHNuX3QJbGFzdF9wdXNoZWRfbHNuID0gKmxhc3RfbHNuOwotCXhmc19sc25fdAl0YXJnZXQgPSAgYWlscC0+eGFfdGFyZ2V0OwotCXhmc19sc25fdAlsc247Ci0JeGZzX2xvZ19pdGVtX3QJKmxpcDsKLQlpbnQJCWZsdXNoX2xvZywgY291bnQsIHN0dWNrOwotCXhmc19tb3VudF90CSptcCA9IGFpbHAtPnhhX21vdW50OworCXhmc19sb2dfaXRlbV90ICAqbmV4dF9saXA7CisKKwkvKiBJZiB0aGUgbGlzdCBpcyBlbXB0eSwganVzdCBpbnNlcnQgdGhlIGl0ZW0uICAqLworCWlmIChsaXN0X2VtcHR5KCZhaWxwLT54YV9haWwpKSB7CisJCWxpc3Rfc3BsaWNlKGxpc3QsICZhaWxwLT54YV9haWwpOworCQlyZXR1cm47CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKG5leHRfbGlwLCAmYWlscC0+eGFfYWlsLCBsaV9haWwpIHsKKwkJaWYgKFhGU19MU05fQ01QKG5leHRfbGlwLT5saV9sc24sIGxzbikgPD0gMCkKKwkJCWJyZWFrOworCX0KKworCUFTU0VSVCgmbmV4dF9saXAtPmxpX2FpbCA9PSAmYWlscC0+eGFfYWlsIHx8CisJICAgICAgIFhGU19MU05fQ01QKG5leHRfbGlwLT5saV9sc24sIGxzbikgPD0gMCk7CisKKwlsaXN0X3NwbGljZV9pbml0KGxpc3QsICZuZXh0X2xpcC0+bGlfYWlsKTsKK30KKworLyoKKyAqIERlbGV0ZSB0aGUgZ2l2ZW4gaXRlbSBmcm9tIHRoZSBBSUwuICBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBpdGVtLgorICovCitzdGF0aWMgdm9pZAoreGZzX2FpbF9kZWxldGUoCisJc3RydWN0IHhmc19haWwgICphaWxwLAorCXhmc19sb2dfaXRlbV90ICAqbGlwKQoreworCXhmc19haWxfY2hlY2soYWlscCwgbGlwKTsKKwlsaXN0X2RlbCgmbGlwLT5saV9haWwpOworCXhmc190cmFuc19haWxfY3Vyc29yX2NsZWFyKGFpbHAsIGxpcCk7Cit9CisKKy8qCisgKiB4ZnNfYWlsX3dvcmtlciBkb2VzIHRoZSB3b3JrIG9mIHB1c2hpbmcgb24gdGhlIEFJTC4gSXQgd2lsbCByZXF1ZXVlIGl0c2VsZgorICogdG8gcnVuIGF0IGEgbGF0ZXIgdGltZSBpZiB0aGVyZSBpcyBtb3JlIHdvcmsgdG8gZG8gdG8gY29tcGxldGUgdGhlIHB1c2guCisgKi8KK1NUQVRJQyB2b2lkCit4ZnNfYWlsX3dvcmtlcigKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJKndvcmspCit7CisJc3RydWN0IHhmc19haWwJCSphaWxwID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSwKKwkJCQkJc3RydWN0IHhmc19haWwsIHhhX3dvcmspOworCXhmc19tb3VudF90CQkqbXAgPSBhaWxwLT54YV9tb3VudDsKIAlzdHJ1Y3QgeGZzX2FpbF9jdXJzb3IJKmN1ciA9ICZhaWxwLT54YV9jdXJzb3JzOwotCWludAkJcHVzaF94ZnNidWZkID0gMDsKKwl4ZnNfbG9nX2l0ZW1fdAkJKmxpcDsKKwl4ZnNfbHNuX3QJCWxzbjsKKwl4ZnNfbHNuX3QJCXRhcmdldDsKKwlsb25nCQkJdG91dCA9IDEwOworCWludAkJCWZsdXNoX2xvZyA9IDA7CisJaW50CQkJc3R1Y2sgPSAwOworCWludAkJCWNvdW50ID0gMDsKKwlpbnQJCQlwdXNoX3hmc2J1ZmQgPSAwOwogCiAJc3Bpbl9sb2NrKCZhaWxwLT54YV9sb2NrKTsKKwl0YXJnZXQgPSBhaWxwLT54YV90YXJnZXQ7CiAJeGZzX3RyYW5zX2FpbF9jdXJzb3JfaW5pdChhaWxwLCBjdXIpOwotCWxpcCA9IHhmc190cmFuc19haWxfY3Vyc29yX2ZpcnN0KGFpbHAsIGN1ciwgKmxhc3RfbHNuKTsKKwlsaXAgPSB4ZnNfdHJhbnNfYWlsX2N1cnNvcl9maXJzdChhaWxwLCBjdXIsIGFpbHAtPnhhX2xhc3RfcHVzaGVkX2xzbik7CiAJaWYgKCFsaXAgfHwgWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpIHsKIAkJLyoKIAkJICogQUlMIGlzIGVtcHR5IG9yIG91ciBwdXNoIGhhcyByZWFjaGVkIHRoZSBlbmQuCiAJCSAqLwogCQl4ZnNfdHJhbnNfYWlsX2N1cnNvcl9kb25lKGFpbHAsIGN1cik7CiAJCXNwaW5fdW5sb2NrKCZhaWxwLT54YV9sb2NrKTsKLQkJKmxhc3RfbHNuID0gMDsKLQkJcmV0dXJuIHRvdXQ7CisJCWdvdG8gb3V0X2RvbmU7CiAJfQogCiAJWEZTX1NUQVRTX0lOQyh4c19wdXNoX2FpbCk7CkBAIC0yODEsOCArMzg4LDcgQEAKIAkgKiBsb3RzIG9mIGNvbnRlbnRpb24gb24gdGhlIEFJTCBsaXN0cy4KIAkgKi8KIAlsc24gPSBsaXAtPmxpX2xzbjsKLQlmbHVzaF9sb2cgPSBzdHVjayA9IGNvdW50ID0gMDsKLQl3aGlsZSAoKFhGU19MU05fQ01QKGxpcC0+bGlfbHNuLCB0YXJnZXQpIDwgMCkpIHsKKwl3aGlsZSAoKFhGU19MU05fQ01QKGxpcC0+bGlfbHNuLCB0YXJnZXQpIDw9IDApKSB7CiAJCWludAlsb2NrX3Jlc3VsdDsKIAkJLyoKIAkJICogSWYgd2UgY2FuIGxvY2sgdGhlIGl0ZW0gd2l0aG91dCBzbGVlcGluZywgdW5sb2NrIHRoZSBBSUwKQEAgLTMwMSwxMyArNDA3LDEzIEBACiAJCWNhc2UgWEZTX0lURU1fU1VDQ0VTUzoKIAkJCVhGU19TVEFUU19JTkMoeHNfcHVzaF9haWxfc3VjY2Vzcyk7CiAJCQlJT1BfUFVTSChsaXApOwotCQkJbGFzdF9wdXNoZWRfbHNuID0gbHNuOworCQkJYWlscC0+eGFfbGFzdF9wdXNoZWRfbHNuID0gbHNuOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBYRlNfSVRFTV9QVVNIQlVGOgogCQkJWEZTX1NUQVRTX0lOQyh4c19wdXNoX2FpbF9wdXNoYnVmKTsKIAkJCUlPUF9QVVNIQlVGKGxpcCk7Ci0JCQlsYXN0X3B1c2hlZF9sc24gPSBsc247CisJCQlhaWxwLT54YV9sYXN0X3B1c2hlZF9sc24gPSBsc247CiAJCQlwdXNoX3hmc2J1ZmQgPSAxOwogCQkJYnJlYWs7CiAKQEAgLTMxOSw3ICs0MjUsNyBAQAogCiAJCWNhc2UgWEZTX0lURU1fTE9DS0VEOgogCQkJWEZTX1NUQVRTX0lOQyh4c19wdXNoX2FpbF9sb2NrZWQpOwotCQkJbGFzdF9wdXNoZWRfbHNuID0gbHNuOworCQkJYWlscC0+eGFfbGFzdF9wdXNoZWRfbHNuID0gbHNuOwogCQkJc3R1Y2srKzsKIAkJCWJyZWFrOwogCkBAIC0zNzQsOSArNDgwLDI3IEBACiAJCXdha2VfdXBfcHJvY2VzcyhtcC0+bV9kZGV2X3RhcmdwLT5idF90YXNrKTsKIAl9CiAKKwkvKiBhc3N1bWUgd2UgaGF2ZSBtb3JlIHdvcmsgdG8gZG8gaW4gYSBzaG9ydCB3aGlsZSAqLworb3V0X2RvbmU6CiAJaWYgKCFjb3VudCkgewogCQkvKiBXZSdyZSBwYXN0IG91ciB0YXJnZXQgb3IgZW1wdHksIHNvIGlkbGUgKi8KLQkJbGFzdF9wdXNoZWRfbHNuID0gMDsKKwkJYWlscC0+eGFfbGFzdF9wdXNoZWRfbHNuID0gMDsKKworCQkvKgorCQkgKiBXZSBjbGVhciB0aGUgWEZTX0FJTF9QVVNISU5HX0JJVCBmaXJzdCBiZWZvcmUgY2hlY2tpbmcKKwkJICogd2hldGhlciB0aGUgdGFyZ2V0IGhhcyBjaGFuZ2VkLiBJZiB0aGUgdGFyZ2V0IGhhcyBjaGFuZ2VkLAorCQkgKiB0aGlzIHB1c2hlcyB0aGUgcmVxdWV1ZSByYWNlIGRpcmVjdGx5IG9udG8gdGhlIHJlc3VsdCBvZiB0aGUKKwkJICogYXRvbWljIHRlc3Qvc2V0IGJpdCwgc28gd2UgYXJlIGd1YXJhbnRlZWQgdGhhdCBlaXRoZXIgdGhlCisJCSAqIHRoZSBwdXNoZXIgdGhhdCBjaGFuZ2VkIHRoZSB0YXJnZXQgb3Igb3Vyc2VsdmVzIHdpbGwgcmVxdWV1ZQorCQkgKiB0aGUgd29yayAoYnV0IG5vdCBib3RoKS4KKwkJICovCisJCWNsZWFyX2JpdChYRlNfQUlMX1BVU0hJTkdfQklULCAmYWlscC0+eGFfZmxhZ3MpOworCQlzbXBfcm1iKCk7CisJCWlmIChYRlNfTFNOX0NNUChhaWxwLT54YV90YXJnZXQsIHRhcmdldCkgPT0gMCB8fAorCQkgICAgdGVzdF9hbmRfc2V0X2JpdChYRlNfQUlMX1BVU0hJTkdfQklULCAmYWlscC0+eGFfZmxhZ3MpKQorCQkJcmV0dXJuOworCisJCXRvdXQgPSA1MDsKIAl9IGVsc2UgaWYgKFhGU19MU05fQ01QKGxzbiwgdGFyZ2V0KSA+PSAwKSB7CiAJCS8qCiAJCSAqIFdlIHJlYWNoZWQgdGhlIHRhcmdldCBzbyB3YWl0IGEgYml0IGxvbmdlciBmb3IgSS9PIHRvCkBAIC0zODQsNyArNTA4LDcgQEAKIAkJICogc3RhcnQgdGhlIG5leHQgc2NhbiBmcm9tIHRoZSBzdGFydCBvZiB0aGUgQUlMLgogCQkgKi8KIAkJdG91dCA9IDUwOwotCQlsYXN0X3B1c2hlZF9sc24gPSAwOworCQlhaWxwLT54YV9sYXN0X3B1c2hlZF9sc24gPSAwOwogCX0gZWxzZSBpZiAoKHN0dWNrICogMTAwKSAvIGNvdW50ID4gOTApIHsKIAkJLyoKIAkJICogRWl0aGVyIHRoZXJlIGlzIGEgbG90IG9mIGNvbnRlbnRpb24gb24gdGhlIEFJTCBvciB3ZQpAQCAtMzk2LDE0ICs1MjAsNjEgQEAKIAkJICogY29udGludWluZyBmcm9tIHdoZXJlIHdlIHdlcmUuCiAJCSAqLwogCQl0b3V0ID0gMjA7Ci0JfSBlbHNlIHsKLQkJLyogbW9yZSB0byBkbywgYnV0IHdhaXQgYSBzaG9ydCB3aGlsZSBiZWZvcmUgY29udGludWluZyAqLwotCQl0b3V0ID0gMTA7CiAJfQotCSpsYXN0X2xzbiA9IGxhc3RfcHVzaGVkX2xzbjsKLQlyZXR1cm4gdG91dDsKKworCS8qIFRoZXJlIGlzIG1vcmUgdG8gZG8sIHJlcXVldWUgdXMuICAqLworCXF1ZXVlX2RlbGF5ZWRfd29yayh4ZnNfc3luY2Rfd3EsICZhaWxwLT54YV93b3JrLAorCQkJCQltc2Vjc190b19qaWZmaWVzKHRvdXQpKTsKIH0KIAorLyoKKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gbW92ZSB0aGUgdGFpbCBvZiB0aGUgQUlMIGZvcndhcmQuICBJdCBkb2VzIHRoaXMgYnkKKyAqIHRyeWluZyB0byBmbHVzaCBpdGVtcyBpbiB0aGUgQUlMIHdob3NlIGxzbnMgYXJlIGJlbG93IHRoZSBnaXZlbgorICogdGhyZXNob2xkX2xzbi4KKyAqCisgKiBUaGUgcHVzaCBpcyBydW4gYXN5bmNocm9ub3VzbHkgaW4gYSB3b3JrcXVldWUsIHdoaWNoIG1lYW5zIHRoZSBjYWxsZXIgbmVlZHMKKyAqIHRvIGhhbmRsZSB3YWl0aW5nIG9uIHRoZSBhc3luYyBmbHVzaCBmb3Igc3BhY2UgdG8gYmVjb21lIGF2YWlsYWJsZS4KKyAqIFdlIGRvbid0IHdhbnQgdG8gaW50ZXJydXB0IGFueSBwdXNoIHRoYXQgaXMgaW4gcHJvZ3Jlc3MsIGhlbmNlIHdlIG9ubHkgcXVldWUKKyAqIHdvcmsgaWYgd2Ugc2V0IHRoZSBwdXNoaW5nIGJpdCBhcHByb3JpYXRlbHkuCisgKgorICogV2UgZG8gdGhpcyB1bmxvY2tlZCAtIHdlIG9ubHkgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhlcmUgaXMgYW55dGhpbmcgaW4gdGhlCisgKiBBSUwgYXQgdGhlIHRpbWUgd2UgYXJlIGNhbGxlZC4gV2UgZG9uJ3QgbmVlZCB0byBhY2Nlc3MgdGhlIGNvbnRlbnRzIG9mCisgKiBhbnkgb2YgdGhlIG9iamVjdHMsIHNvIHRoZSBsb2NrIGlzIG5vdCBuZWVkZWQuCisgKi8KK3ZvaWQKK3hmc19haWxfcHVzaCgKKwlzdHJ1Y3QgeGZzX2FpbAkqYWlscCwKKwl4ZnNfbHNuX3QJdGhyZXNob2xkX2xzbikKK3sKKwl4ZnNfbG9nX2l0ZW1fdAkqbGlwOworCisJbGlwID0geGZzX2FpbF9taW4oYWlscCk7CisJaWYgKCFsaXAgfHwgWEZTX0ZPUkNFRF9TSFVURE9XTihhaWxwLT54YV9tb3VudCkgfHwKKwkgICAgWEZTX0xTTl9DTVAodGhyZXNob2xkX2xzbiwgYWlscC0+eGFfdGFyZ2V0KSA8PSAwKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEVuc3VyZSB0aGF0IHRoZSBuZXcgdGFyZ2V0IGlzIG5vdGljZWQgaW4gcHVzaCBjb2RlIGJlZm9yZSBpdCBjbGVhcnMKKwkgKiB0aGUgWEZTX0FJTF9QVVNISU5HX0JJVC4KKwkgKi8KKwlzbXBfd21iKCk7CisJeGZzX3RyYW5zX2FpbF9jb3B5X2xzbihhaWxwLCAmYWlscC0+eGFfdGFyZ2V0LCAmdGhyZXNob2xkX2xzbik7CisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFhGU19BSUxfUFVTSElOR19CSVQsICZhaWxwLT54YV9mbGFncykpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayh4ZnNfc3luY2Rfd3EsICZhaWxwLT54YV93b3JrLCAwKTsKK30KKworLyoKKyAqIFB1c2ggb3V0IGFsbCBpdGVtcyBpbiB0aGUgQUlMIGltbWVkaWF0ZWx5CisgKi8KK3ZvaWQKK3hmc19haWxfcHVzaF9hbGwoCisJc3RydWN0IHhmc19haWwgICphaWxwKQoreworCXhmc19sc25fdCAgICAgICB0aHJlc2hvbGRfbHNuID0geGZzX2FpbF9tYXhfbHNuKGFpbHApOworCisJaWYgKHRocmVzaG9sZF9sc24pCisJCXhmc19haWxfcHVzaChhaWxwLCB0aHJlc2hvbGRfbHNuKTsKK30KIAogLyoKICAqIFRoaXMgaXMgdG8gYmUgY2FsbGVkIHdoZW4gYW4gaXRlbSBpcyB1bmxvY2tlZCB0aGF0IG1heSBoYXZlCkBAIC02MTUsNyArNzg2LDYgQEAKIAl4ZnNfbW91bnRfdAkqbXApCiB7CiAJc3RydWN0IHhmc19haWwJKmFpbHA7Ci0JaW50CQllcnJvcjsKIAogCWFpbHAgPSBrbWVtX3phbGxvYyhzaXplb2Yoc3RydWN0IHhmc19haWwpLCBLTV9NQVlGQUlMKTsKIAlpZiAoIWFpbHApCkBAIC02MjQsMTUgKzc5NCw5IEBACiAJYWlscC0+eGFfbW91bnQgPSBtcDsKIAlJTklUX0xJU1RfSEVBRCgmYWlscC0+eGFfYWlsKTsKIAlzcGluX2xvY2tfaW5pdCgmYWlscC0+eGFfbG9jayk7Ci0JZXJyb3IgPSB4ZnNhaWxkX3N0YXJ0KGFpbHApOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfZnJlZV9haWxwOworCUlOSVRfREVMQVlFRF9XT1JLKCZhaWxwLT54YV93b3JrLCB4ZnNfYWlsX3dvcmtlcik7CiAJbXAtPm1fYWlsID0gYWlscDsKIAlyZXR1cm4gMDsKLQotb3V0X2ZyZWVfYWlscDoKLQlrbWVtX2ZyZWUoYWlscCk7Ci0JcmV0dXJuIGVycm9yOwogfQogCiB2b2lkCkBAIC02NDEsMTI0ICs4MDUsNiBAQAogewogCXN0cnVjdCB4ZnNfYWlsCSphaWxwID0gbXAtPm1fYWlsOwogCi0JeGZzYWlsZF9zdG9wKGFpbHApOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYWlscC0+eGFfd29yayk7CiAJa21lbV9mcmVlKGFpbHApOwogfQotCi0vKgotICogc3BsaWNlIHRoZSBsb2cgaXRlbSBsaXN0IGludG8gdGhlIEFJTCBhdCB0aGUgZ2l2ZW4gTFNOLgotICovCi1TVEFUSUMgdm9pZAoteGZzX2FpbF9zcGxpY2UoCi0Jc3RydWN0IHhmc19haWwJKmFpbHAsCi0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKLQl4ZnNfbHNuX3QJbHNuKQotewotCXhmc19sb2dfaXRlbV90CSpuZXh0X2xpcDsKLQotCS8qCi0JICogSWYgdGhlIGxpc3QgaXMgZW1wdHksIGp1c3QgaW5zZXJ0IHRoZSBpdGVtLgotCSAqLwotCWlmIChsaXN0X2VtcHR5KCZhaWxwLT54YV9haWwpKSB7Ci0JCWxpc3Rfc3BsaWNlKGxpc3QsICZhaWxwLT54YV9haWwpOwotCQlyZXR1cm47Ci0JfQotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKG5leHRfbGlwLCAmYWlscC0+eGFfYWlsLCBsaV9haWwpIHsKLQkJaWYgKFhGU19MU05fQ01QKG5leHRfbGlwLT5saV9sc24sIGxzbikgPD0gMCkKLQkJCWJyZWFrOwotCX0KLQotCUFTU0VSVCgoJm5leHRfbGlwLT5saV9haWwgPT0gJmFpbHAtPnhhX2FpbCkgfHwKLQkgICAgICAgKFhGU19MU05fQ01QKG5leHRfbGlwLT5saV9sc24sIGxzbikgPD0gMCkpOwotCi0JbGlzdF9zcGxpY2VfaW5pdChsaXN0LCAmbmV4dF9saXAtPmxpX2FpbCk7Ci0JcmV0dXJuOwotfQotCi0vKgotICogRGVsZXRlIHRoZSBnaXZlbiBpdGVtIGZyb20gdGhlIEFJTC4gIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGl0ZW0uCi0gKi8KLVNUQVRJQyB2b2lkCi14ZnNfYWlsX2RlbGV0ZSgKLQlzdHJ1Y3QgeGZzX2FpbAkqYWlscCwKLQl4ZnNfbG9nX2l0ZW1fdAkqbGlwKQotewotCXhmc19haWxfY2hlY2soYWlscCwgbGlwKTsKLQlsaXN0X2RlbCgmbGlwLT5saV9haWwpOwotCXhmc190cmFuc19haWxfY3Vyc29yX2NsZWFyKGFpbHAsIGxpcCk7Ci19Ci0KLS8qCi0gKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBBSUwuCi0gKiBJZiB0aGUgQUlMIGlzIGVtcHR5LCB0aGVuIHJldHVybiBOVUxMLgotICovCi1TVEFUSUMgeGZzX2xvZ19pdGVtX3QgKgoteGZzX2FpbF9taW4oCi0Jc3RydWN0IHhmc19haWwJKmFpbHApCi17Ci0JaWYgKGxpc3RfZW1wdHkoJmFpbHAtPnhhX2FpbCkpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIGxpc3RfZmlyc3RfZW50cnkoJmFpbHAtPnhhX2FpbCwgeGZzX2xvZ19pdGVtX3QsIGxpX2FpbCk7Ci19Ci0KLS8qCi0gKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBpdGVtIHdoaWNoIGZvbGxvd3MKLSAqIHRoZSBnaXZlbiBpdGVtIGluIHRoZSBBSUwuICBJZiB0aGUgZ2l2ZW4gaXRlbQotICogaXMgdGhlIGxhc3QgaXRlbSBpbiB0aGUgbGlzdCwgdGhlbiByZXR1cm4gTlVMTC4KLSAqLwotU1RBVElDIHhmc19sb2dfaXRlbV90ICoKLXhmc19haWxfbmV4dCgKLQlzdHJ1Y3QgeGZzX2FpbAkqYWlscCwKLQl4ZnNfbG9nX2l0ZW1fdAkqbGlwKQotewotCWlmIChsaXAtPmxpX2FpbC5uZXh0ID09ICZhaWxwLT54YV9haWwpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIGxpc3RfZmlyc3RfZW50cnkoJmxpcC0+bGlfYWlsLCB4ZnNfbG9nX2l0ZW1fdCwgbGlfYWlsKTsKLX0KLQotI2lmZGVmIERFQlVHCi0vKgotICogQ2hlY2sgdGhhdCB0aGUgbGlzdCBpcyBzb3J0ZWQgYXMgaXQgc2hvdWxkIGJlLgotICovCi1TVEFUSUMgdm9pZAoteGZzX2FpbF9jaGVjaygKLQlzdHJ1Y3QgeGZzX2FpbAkqYWlscCwKLQl4ZnNfbG9nX2l0ZW1fdAkqbGlwKQotewotCXhmc19sb2dfaXRlbV90CSpwcmV2X2xpcDsKLQotCWlmIChsaXN0X2VtcHR5KCZhaWxwLT54YV9haWwpKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIENoZWNrIHRoZSBuZXh0IGFuZCBwcmV2aW91cyBlbnRyaWVzIGFyZSB2YWxpZC4KLQkgKi8KLQlBU1NFUlQoKGxpcC0+bGlfZmxhZ3MgJiBYRlNfTElfSU5fQUlMKSAhPSAwKTsKLQlwcmV2X2xpcCA9IGxpc3RfZW50cnkobGlwLT5saV9haWwucHJldiwgeGZzX2xvZ19pdGVtX3QsIGxpX2FpbCk7Ci0JaWYgKCZwcmV2X2xpcC0+bGlfYWlsICE9ICZhaWxwLT54YV9haWwpCi0JCUFTU0VSVChYRlNfTFNOX0NNUChwcmV2X2xpcC0+bGlfbHNuLCBsaXAtPmxpX2xzbikgPD0gMCk7Ci0KLQlwcmV2X2xpcCA9IGxpc3RfZW50cnkobGlwLT5saV9haWwubmV4dCwgeGZzX2xvZ19pdGVtX3QsIGxpX2FpbCk7Ci0JaWYgKCZwcmV2X2xpcC0+bGlfYWlsICE9ICZhaWxwLT54YV9haWwpCi0JCUFTU0VSVChYRlNfTFNOX0NNUChwcmV2X2xpcC0+bGlfbHNuLCBsaXAtPmxpX2xzbikgPj0gMCk7Ci0KLQotI2lmZGVmIFhGU19UUkFOU19ERUJVRwotCS8qCi0JICogV2FsayB0aGUgbGlzdCBjaGVja2luZyBsc24gb3JkZXJpbmcsIGFuZCB0aGF0IGV2ZXJ5IGVudHJ5IGhhcyB0aGUKLQkgKiBYRlNfTElfSU5fQUlMIGZsYWcgc2V0LiBUaGlzIGlzIHJlYWxseSBleHBlbnNpdmUsIHNvIG9ubHkgZG8gaXQKLQkgKiB3aGVuIHNwZWNpZmljYWxseSBkZWJ1Z2dpbmcgdGhlIHRyYW5zYWN0aW9uIHN1YnN5c3RlbS4KLQkgKi8KLQlwcmV2X2xpcCA9IGxpc3RfZW50cnkoJmFpbHAtPnhhX2FpbCwgeGZzX2xvZ19pdGVtX3QsIGxpX2FpbCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShsaXAsICZhaWxwLT54YV9haWwsIGxpX2FpbCkgewotCQlpZiAoJnByZXZfbGlwLT5saV9haWwgIT0gJmFpbHAtPnhhX2FpbCkKLQkJCUFTU0VSVChYRlNfTFNOX0NNUChwcmV2X2xpcC0+bGlfbHNuLCBsaXAtPmxpX2xzbikgPD0gMCk7Ci0JCUFTU0VSVCgobGlwLT5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpICE9IDApOwotCQlwcmV2X2xpcCA9IGxpcDsKLQl9Ci0jZW5kaWYgLyogWEZTX1RSQU5TX0RFQlVHICovCi19Ci0jZW5kaWYgLyogREVCVUcgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnNfaW5vZGUuYyBiL2ZzL3hmcy94ZnNfdHJhbnNfaW5vZGUuYwppbmRleCAxNjA4NGQ4Li4wNDhiMGM2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zX2lub2RlLmMKKysrIGIvZnMveGZzL3hmc190cmFuc19pbm9kZS5jCkBAIC04MSw3ICs4MSw3IEBACiAgKgogICoKICAqIEdyYWJzIGEgcmVmZXJlbmNlIHRvIHRoZSBpbm9kZSB3aGljaCB3aWxsIGJlIGRyb3BwZWQgd2hlbiB0aGUgdHJhbnNhY3Rpb24KLSAqIGlzIGNvbW1pdGVkLiAgVGhlIGlub2RlIHdpbGwgYWxzbyBiZSB1bmxvY2tlZCBhdCB0aGF0IHBvaW50LiAgVGhlIGlub2RlCisgKiBpcyBjb21taXR0ZWQuICBUaGUgaW5vZGUgd2lsbCBhbHNvIGJlIHVubG9ja2VkIGF0IHRoYXQgcG9pbnQuICBUaGUgaW5vZGUKICAqIG11c3QgYmUgbG9ja2VkLCBhbmQgaXQgY2Fubm90IGJlIGFzc29jaWF0ZWQgd2l0aCBhbnkgdHJhbnNhY3Rpb24uCiAgKi8KIHZvaWQKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnNfcHJpdi5oIGIvZnMveGZzL3hmc190cmFuc19wcml2LmgKaW5kZXggMzUxNjJjMi4uNmIxNjRlOSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFuc19wcml2LmgKKysrIGIvZnMveGZzL3hmc190cmFuc19wcml2LmgKQEAgLTY1LDE2ICs2NSwyMiBAQAogc3RydWN0IHhmc19haWwgewogCXN0cnVjdCB4ZnNfbW91bnQJKnhhX21vdW50OwogCXN0cnVjdCBsaXN0X2hlYWQJeGFfYWlsOwotCXVpbnQJCQl4YV9nZW47Ci0Jc3RydWN0IHRhc2tfc3RydWN0CSp4YV90YXNrOwogCXhmc19sc25fdAkJeGFfdGFyZ2V0OwogCXN0cnVjdCB4ZnNfYWlsX2N1cnNvcgl4YV9jdXJzb3JzOwogCXNwaW5sb2NrX3QJCXhhX2xvY2s7CisJc3RydWN0IGRlbGF5ZWRfd29yawl4YV93b3JrOworCXhmc19sc25fdAkJeGFfbGFzdF9wdXNoZWRfbHNuOworCXVuc2lnbmVkIGxvbmcJCXhhX2ZsYWdzOwogfTsKIAorI2RlZmluZSBYRlNfQUlMX1BVU0hJTkdfQklUCTAKKwogLyoKICAqIEZyb20geGZzX3RyYW5zX2FpbC5jCiAgKi8KKworZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSp4ZnNfYWlsX3dxOwkvKiBBSUwgd29ya3F1ZXVlICovCisKIHZvaWQJeGZzX3RyYW5zX2FpbF91cGRhdGVfYnVsayhzdHJ1Y3QgeGZzX2FpbCAqYWlscCwKIAkJCQlzdHJ1Y3QgeGZzX2xvZ19pdGVtICoqbG9nX2l0ZW1zLCBpbnQgbnJfaXRlbXMsCiAJCQkJeGZzX2xzbl90IGxzbikgX19yZWxlYXNlcyhhaWxwLT54YV9sb2NrKTsKQEAgLTk4LDEyICsxMDQsMTMgQEAKIAl4ZnNfdHJhbnNfYWlsX2RlbGV0ZV9idWxrKGFpbHAsICZsaXAsIDEpOwogfQogCi12b2lkCQkJeGZzX3RyYW5zX2FpbF9wdXNoKHN0cnVjdCB4ZnNfYWlsICosIHhmc19sc25fdCk7Cit2b2lkCQkJeGZzX2FpbF9wdXNoKHN0cnVjdCB4ZnNfYWlsICosIHhmc19sc25fdCk7Cit2b2lkCQkJeGZzX2FpbF9wdXNoX2FsbChzdHJ1Y3QgeGZzX2FpbCAqKTsKK3hmc19sc25fdAkJeGZzX2FpbF9taW5fbHNuKHN0cnVjdCB4ZnNfYWlsICphaWxwKTsKKwogdm9pZAkJCXhmc190cmFuc191bmxvY2tlZF9pdGVtKHN0cnVjdCB4ZnNfYWlsICosCiAJCQkJCXhmc19sb2dfaXRlbV90ICopOwogCi14ZnNfbHNuX3QJCXhmc190cmFuc19haWxfdGFpbChzdHJ1Y3QgeGZzX2FpbCAqYWlscCk7Ci0KIHN0cnVjdCB4ZnNfbG9nX2l0ZW0JKnhmc190cmFuc19haWxfY3Vyc29yX2ZpcnN0KHN0cnVjdCB4ZnNfYWlsICphaWxwLAogCQkJCQlzdHJ1Y3QgeGZzX2FpbF9jdXJzb3IgKmN1ciwKIAkJCQkJeGZzX2xzbl90IGxzbik7CkBAIC0xMTIsMTEgKzExOSw2IEBACiB2b2lkCQkJeGZzX3RyYW5zX2FpbF9jdXJzb3JfZG9uZShzdHJ1Y3QgeGZzX2FpbCAqYWlscCwKIAkJCQkJc3RydWN0IHhmc19haWxfY3Vyc29yICpjdXIpOwogCi1sb25nCXhmc2FpbGRfcHVzaChzdHJ1Y3QgeGZzX2FpbCAqLCB4ZnNfbHNuX3QgKik7Ci12b2lkCXhmc2FpbGRfd2FrZXVwKHN0cnVjdCB4ZnNfYWlsICosIHhmc19sc25fdCk7Ci1pbnQJeGZzYWlsZF9zdGFydChzdHJ1Y3QgeGZzX2FpbCAqKTsKLXZvaWQJeGZzYWlsZF9zdG9wKHN0cnVjdCB4ZnNfYWlsICopOwotCiAjaWYgQklUU19QRVJfTE9ORyAhPSA2NAogc3RhdGljIGlubGluZSB2b2lkCiB4ZnNfdHJhbnNfYWlsX2NvcHlfbHNuKApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc192bm9kZW9wcy5jIGIvZnMveGZzL3hmc192bm9kZW9wcy5jCmluZGV4IGM0OGI0MjEuLmI3YTVmZTcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYworKysgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKQEAgLTk1Myw3ICs5NTMsNyBAQAogCQkgKiBJZiB3ZSBwcmV2aW91c2x5IHRydW5jYXRlZCB0aGlzIGZpbGUgYW5kIHJlbW92ZWQgb2xkIGRhdGEKIAkJICogaW4gdGhlIHByb2Nlc3MsIHdlIHdhbnQgdG8gaW5pdGlhdGUgImVhcmx5IiB3cml0ZW91dCBvbgogCQkgKiB0aGUgbGFzdCBjbG9zZS4gIFRoaXMgaXMgYW4gYXR0ZW1wdCB0byBjb21iYXQgdGhlIG5vdG9yaW91cwotCQkgKiBOVUxMIGZpbGVzIHByb2JsZW0gd2hpY2ggaXMgcGFydGljdWxhcmx5IG5vdGljYWJsZSBmcm9tIGEKKwkJICogTlVMTCBmaWxlcyBwcm9ibGVtIHdoaWNoIGlzIHBhcnRpY3VsYXJseSBub3RpY2VhYmxlIGZyb20gYQogCQkgKiB0cnVuY2F0ZSBkb3duLCBidWZmZXJlZCAocmUtKXdyaXRlIChkZWxhbGxvYyksIGZvbGxvd2VkIGJ5CiAJCSAqIGEgY3Jhc2guICBXaGF0IHdlIGFyZSBlZmZlY3RpdmVseSBkb2luZyBoZXJlIGlzCiAJCSAqIHNpZ25pZmljYW50bHkgcmVkdWNpbmcgdGhlIHRpbWUgd2luZG93IHdoZXJlIHdlJ2Qgb3RoZXJ3aXNlCkBAIC05ODIsNyArOTgyLDcgQEAKIAkJICoKIAkJICogRnVydGhlciwgY2hlY2sgaWYgdGhlIGlub2RlIGlzIGJlaW5nIG9wZW5lZCwgd3JpdHRlbiBhbmQKIAkJICogY2xvc2VkIGZyZXF1ZW50bHkgYW5kIHdlIGhhdmUgZGVsYXllZCBhbGxvY2F0aW9uIGJsb2NrcwotCQkgKiBvdXN0YW5kaW5nIChlLmcuIHN0cmVhbWluZyB3cml0ZXMgZnJvbSB0aGUgTkZTIHNlcnZlciksCisJCSAqIG91dHN0YW5kaW5nIChlLmcuIHN0cmVhbWluZyB3cml0ZXMgZnJvbSB0aGUgTkZTIHNlcnZlciksCiAJCSAqIHRydW5jYXRpbmcgdGhlIGJsb2NrcyBwYXN0IEVPRiB3aWxsIGNhdXNlIGZyYWdtZW50YXRpb24gdG8KIAkJICogb2NjdXIuCiAJCSAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0YmwuaCBiL2luY2x1ZGUvYWNwaS9hY3RibC5oCmluZGV4IGQ0MWM5NDguLmYxMzgwMjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3RibC5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3RibC5oCkBAIC0yOTAsNyArMjkwLDcgQEAKICNkZWZpbmUgQUNQSV9GQURUX0FQSUNfQ0xVU1RFUiAgICAgICgxPDwxOCkJLyogMTg6IFtWNF0gQWxsIGxvY2FsIEFQSUNzIG11c3QgdXNlIGNsdXN0ZXIgbW9kZWwgKEFDUEkgMy4wKSAqLwogI2RlZmluZSBBQ1BJX0ZBRFRfQVBJQ19QSFlTSUNBTCAgICAgKDE8PDE5KQkvKiAxOTogW1Y0XSBBbGwgbG9jYWwgeF9hUElDcyBtdXN0IHVzZSBwaHlzaWNhbCBkZXN0IG1vZGUgKEFDUEkgMy4wKSAqLwogCi0vKiBWYWx1ZXMgZm9yIHByZWZlcnJlZF9wcm9maWxlIChQcmVmZXJlZCBQb3dlciBNYW5hZ2VtZW50IFByb2ZpbGVzKSAqLworLyogVmFsdWVzIGZvciBwcmVmZXJyZWRfcHJvZmlsZSAoUHJlZmVycmVkIFBvd2VyIE1hbmFnZW1lbnQgUHJvZmlsZXMpICovCiAKIGVudW0gYWNwaV9wcmVmZXJlZF9wbV9wcm9maWxlcyB7CiAJUE1fVU5TUEVDSUZJRUQgPSAwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWdpbmZvLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3NpZ2luZm8uaAppbmRleCA5NDJkMzBiLi4wZGQ0ZTg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3NpZ2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3NpZ2luZm8uaApAQCAtMTkyLDcgKzE5Miw3IEBACiAgKiBTSUdCVVMgc2lfY29kZXMKICAqLwogI2RlZmluZSBCVVNfQURSQUxOCShfX1NJX0ZBVUxUfDEpCS8qIGludmFsaWQgYWRkcmVzcyBhbGlnbm1lbnQgKi8KLSNkZWZpbmUgQlVTX0FEUkVSUgkoX19TSV9GQVVMVHwyKQkvKiBub24tZXhpc3RhbnQgcGh5c2ljYWwgYWRkcmVzcyAqLworI2RlZmluZSBCVVNfQURSRVJSCShfX1NJX0ZBVUxUfDIpCS8qIG5vbi1leGlzdGVudCBwaHlzaWNhbCBhZGRyZXNzICovCiAjZGVmaW5lIEJVU19PQkpFUlIJKF9fU0lfRkFVTFR8MykJLyogb2JqZWN0IHNwZWNpZmljIGhhcmR3YXJlIGVycm9yICovCiAvKiBoYXJkd2FyZSBtZW1vcnkgZXJyb3IgY29uc3VtZWQgb24gYSBtYWNoaW5lIGNoZWNrOiBhY3Rpb24gcmVxdWlyZWQgKi8KICNkZWZpbmUgQlVTX01DRUVSUl9BUgkoX19TSV9GQVVMVHw0KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCmluZGV4IDMyYzQ1ZTUuLmJkMjk3YTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKQEAgLTc3Myw3ICs3NzMsNyBAQAogICogdGhlIHNlY3Rpb25zIHRoYXQgaGFzIHRoaXMgcmVzdHJpY3Rpb24gKG9yIHNpbWlsYXIpCiAgKiBpcyBsb2NhdGVkIGJlZm9yZSB0aGUgb25lcyByZXF1aXJpbmcgUEFHRV9TSVpFIGFsaWdubWVudC4KICAqIE5PU0FWRV9EQVRBIHN0YXJ0cyBhbmQgZW5kcyB3aXRoIGEgUEFHRV9TSVpFIGFsaWdubWVudCB3aGljaAotICogbWF0Y2hlcyB0aGUgcmVxdWlybWVudCBvZiBQQUdFX0FMSUdORURfREFUQS4KKyAqIG1hdGNoZXMgdGhlIHJlcXVpcmVtZW50IG9mIFBBR0VfQUxJR05FRF9EQVRBLgogICoKICAqIHVzZSAwIGFzIHBhZ2VfYWxpZ24gaWYgcGFnZV9hbGlnbmVkIGRhdGEgaXMgbm90IHVzZWQgKi8KICNkZWZpbmUgUldfREFUQV9TRUNUSU9OKGNhY2hlbGluZSwgcGFnZWFsaWduZWQsIGluaXR0YXNrKQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtUC5oIGIvaW5jbHVkZS9kcm0vZHJtUC5oCmluZGV4IGFkNTc3MGYuLjIwMjQyNGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybVAuaAorKysgYi9pbmNsdWRlL2RybS9kcm1QLmgKQEAgLTk1LDcgKzk1LDcgQEAKICAqIGRybV9jb3JlLCBkcm1fZHJpdmVyLCBkcm1fa21zCiAgKiBkcm1fY29yZSBsZXZlbCBjYW4gYmUgdXNlZCBpbiB0aGUgZ2VuZXJpYyBkcm0gY29kZS4gRm9yIGV4YW1wbGU6CiAgKiAJZHJtX2lvY3RsLCBkcm1fbW0sIGRybV9tZW1vcnkKLSAqIFRoZSBtYWNybyBkZWZpbml0b24gb2YgRFJNX0RFQlVHIGlzIHVzZWQuCisgKiBUaGUgbWFjcm8gZGVmaW5pdGlvbiBvZiBEUk1fREVCVUcgaXMgdXNlZC4KICAqIAlEUk1fREVCVUcoZm10LCBhcmdzLi4uKQogICogCVRoZSBkZWJ1ZyBpbmZvIGJ5IHVzaW5nIHRoZSBEUk1fREVCVUcgY2FuIGJlIG9idGFpbmVkIGJ5IGFkZGluZwogICogCXRoZSBib290IG9wdGlvbiBvZiAiZHJtLmRlYnVnPTEiLgpAQCAtODA4LDcgKzgwOCw3IEBACiAJICoKIAkgKiBccmV0dXJuIEZsYWdzLCBvcidlZCB0b2dldGhlciBhcyBmb2xsb3dzOgogCSAqCi0JICogRFJNX1NDQU5PVVRQT1NfVkFMSUQgPSBRdWVyeSBzdWNjZXNzZnVsbC4KKwkgKiBEUk1fU0NBTk9VVFBPU19WQUxJRCA9IFF1ZXJ5IHN1Y2Nlc3NmdWwuCiAJICogRFJNX1NDQU5PVVRQT1NfSU5WQkwgPSBJbnNpZGUgdmJsYW5rLgogCSAqIERSTV9TQ0FOT1VUUE9TX0FDQ1VSQVRFID0gUmV0dXJuZWQgcG9zaXRpb24gaXMgYWNjdXJhdGUuIEEgbGFjayBvZgogCSAqIHRoaXMgZmxhZyBtZWFucyB0aGF0IHJldHVybmVkIHBvc2l0aW9uIG1heSBiZSBvZmZzZXQgYnkgYSBjb25zdGFudApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaCBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKaW5kZXggYWFlYzA5Ny4uZDk0Njg0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCkBAIC02NSw3ICs2NSw3IEBACiAgICAgTU9ERV9IX0lMTEVHQUwsCS8qIG1vZGUgaGFzIGlsbGVnYWwgaG9yaXpvbnRhbCB0aW1pbmdzICovCiAgICAgTU9ERV9WX0lMTEVHQUwsCS8qIG1vZGUgaGFzIGlsbGVnYWwgaG9yaXpvbnRhbCB0aW1pbmdzICovCiAgICAgTU9ERV9CQURfV0lEVEgsCS8qIHJlcXVpcmVzIGFuIHVuc3VwcG9ydGVkIGxpbmVwaXRjaCAqLwotICAgIE1PREVfTk9NT0RFLAkvKiBubyBtb2RlIHdpdGggYSBtYWNoaW5nIG5hbWUgKi8KKyAgICBNT0RFX05PTU9ERSwJLyogbm8gbW9kZSB3aXRoIGEgbWF0Y2hpbmcgbmFtZSAqLwogICAgIE1PREVfTk9fSU5URVJMQUNFLAkvKiBpbnRlcmxhY2VkIG1vZGUgbm90IHN1cHBvcnRlZCAqLwogICAgIE1PREVfTk9fREJMRVNDQU4sCS8qIGRvdWJsZXNjYW4gbW9kZSBub3Qgc3VwcG9ydGVkICovCiAgICAgTU9ERV9OT19WU0NBTiwJLyogbXVsdGlzY2FuIG1vZGUgbm90IHN1cHBvcnRlZCAqLwpAQCAtMzIxLDcgKzMyMSw3IEBACiAKIAkvKgogCSAqIEZsaXAgdG8gdGhlIGdpdmVuIGZyYW1lYnVmZmVyLiAgVGhpcyBpbXBsZW1lbnRzIHRoZSBwYWdlCi0JICogZmxpcCBpb2N0bCBkZXNjaWJlZCBpbiBkcm1fbW9kZS5oLCBzcGVjaWZpY2FsbHksIHRoZQorCSAqIGZsaXAgaW9jdGwgZGVzY3JpYmVkIGluIGRybV9tb2RlLmgsIHNwZWNpZmljYWxseSwgdGhlCiAJICogaW1wbGVtZW50YXRpb24gbXVzdCByZXR1cm4gaW1tZWRpYXRlbHkgYW5kIGJsb2NrIGFsbAogCSAqIHJlbmRlcmluZyB0byB0aGUgY3VycmVudCBmYiB1bnRpbCB0aGUgZmxpcCBoYXMgY29tcGxldGVkLgogCSAqIElmIHVzZXJzcGFjZSBzZXQgdGhlIGV2ZW50IGZsYWcgaW4gdGhlIGlvY3RsLCB0aGUgZXZlbnQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaAppbmRleCBmMjJlN2ZlLi5jOTljM2QzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBlci5oCkBAIC0xMTgsNiArMTE4LDcgQEAKIAkJCSAgICB1bnNpZ25lZCB0cmFuc3AsCiAJCQkgICAgc3RydWN0IGZiX2luZm8gKmluZm8pOwogCitib29sIGRybV9mYl9oZWxwZXJfcmVzdG9yZV9mYmRldl9tb2RlKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIpOwogdm9pZCBkcm1fZmJfaGVscGVyX3Jlc3RvcmUodm9pZCk7CiB2b2lkIGRybV9mYl9oZWxwZXJfZmlsbF92YXIoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCiAJCQkgICAgdWludDMyX3QgZmJfd2lkdGgsIHVpbnQzMl90IGZiX2hlaWdodCk7CkBAIC0xMjYsNyArMTI3LDcgQEAKIAogaW50IGRybV9mYl9oZWxwZXJfc2V0Y21hcChzdHJ1Y3QgZmJfY21hcCAqY21hcCwgc3RydWN0IGZiX2luZm8gKmluZm8pOwogCi1ib29sIGRybV9mYl9oZWxwZXJfaG90cGx1Z19ldmVudChzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKTsKK2ludCBkcm1fZmJfaGVscGVyX2hvdHBsdWdfZXZlbnQoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcik7CiBib29sIGRybV9mYl9oZWxwZXJfaW5pdGlhbF9jb25maWcoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwgaW50IGJwcF9zZWwpOwogaW50IGRybV9mYl9oZWxwZXJfc2luZ2xlX2FkZF9hbGxfY29ubmVjdG9ycyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKTsKIGludCBkcm1fZmJfaGVscGVyX2RlYnVnX2VudGVyKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9tbS5oIGIvaW5jbHVkZS9kcm0vZHJtX21tLmgKaW5kZXggYjFlNzgwOS4uNTY0YjE0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX21tLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX21tLmgKQEAgLTU2LDcgKzU2LDcgQEAKIH07CiAKIHN0cnVjdCBkcm1fbW0gewotCS8qIExpc3Qgb2YgYWxsIG1lbW9yeSBub2RlcyB0aGF0IGltbWVkaWF0bHkgcHJlY2VlZCBhIGZyZWUgaG9sZS4gKi8KKwkvKiBMaXN0IG9mIGFsbCBtZW1vcnkgbm9kZXMgdGhhdCBpbW1lZGlhdGVseSBwcmVjZWRlIGEgZnJlZSBob2xlLiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgaG9sZV9zdGFjazsKIAkvKiBoZWFkX25vZGUubm9kZV9saXN0IGlzIHRoZSBsaXN0IG9mIGFsbCBtZW1vcnkgbm9kZXMsIG9yZGVyZWQKIAkgKiBhY2NvcmRpbmcgdG8gdGhlIChpbmNyZWFzaW5nKSBzdGFydCBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgbm9kZS4gKi8KQEAgLTg2LDcgKzg2LDcgQEAKIH0KICNkZWZpbmUgZHJtX21tX2Zvcl9lYWNoX25vZGUoZW50cnksIG1tKSBsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcCiAJCQkJCQkmKG1tKS0+aGVhZF9ub2RlLm5vZGVfbGlzdCwgXAotCQkJCQkJbm9kZV9saXN0KTsKKwkJCQkJCW5vZGVfbGlzdCkKICNkZWZpbmUgZHJtX21tX2Zvcl9lYWNoX3NjYW5uZWRfbm9kZV9yZXZlcnNlKGVudHJ5LCBuLCBtbSkgXAogCWZvciAoZW50cnkgPSAobW0pLT5wcmV2X3NjYW5uZWRfbm9kZSwgXAogCQluZXh0ID0gZW50cnkgPyBsaXN0X2VudHJ5KGVudHJ5LT5ub2RlX2xpc3QubmV4dCwgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX21vZGUuaCBiL2luY2x1ZGUvZHJtL2RybV9tb2RlLmgKaW5kZXggYWU2YjdhMy4uYzQ5NjFlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX21vZGUuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fbW9kZS5oCkBAIC0yNzcsNyArMjc3LDcgQEAKICNkZWZpbmUgRFJNX01PREVfQ1VSU09SX01PVkUJKDE8PDEpCiAKIC8qCi0gKiBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIGluIGZsYWdzIGRpZmZyZW50IG1lbWJlcnMgYXJlIHVzZWQuCisgKiBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIGluIGZsYWdzIGRpZmZlcmVudCBtZW1iZXJzIGFyZSB1c2VkLgogICoKICAqIENVUlNPUl9CTyB1c2VzCiAgKiAgICBjcnRjCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmggYi9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKaW5kZXggODE2ZTMwYy4uZjA0YjJhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaApAQCAtMTU1LDYgKzE1NSw3IEBACiAJezB4MTAwMiwgMHg2NzE5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NBWU1BTnxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY3MWMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ0FZTUFOfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NjcxZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DQVlNQU58UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2NzFmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NBWU1BTnxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY3MjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQkFSVFN8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NjcyMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9CQVJUU3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2NzIyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0JBUlRTfFJBREVPTl9ORVdfTUVNTUFQfSwgXApAQCAtMTY3LDYgKzE2OCw3IEBACiAJezB4MTAwMiwgMHg2NzI5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0JBUlRTfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NjczOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9CQVJUU3xSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY3MzksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQkFSVFN8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2NzNlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0JBUlRTfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4Njc0MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9UVVJLU3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2NzQxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1RVUktTfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY3NDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfVFVSS1N8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXApAQCAtMTk5LDYgKzIwMSw3IEBACiAJezB4MTAwMiwgMHg2ODhELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NZUFJFU1N8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2ODk4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NZUFJFU1N8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2ODk5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NZUFJFU1N8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2ODliLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NZUFJFU1N8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2ODljLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0hFTUxPQ0t8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2ODlkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0hFTUxPQ0t8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2ODllLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NZUFJFU1N8UkFERU9OX05FV19NRU1NQVB9LCBcCkBAIC0yMDksNyArMjEyLDkgQEAKIAl7MHgxMDAyLCAweDY4YjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfSlVOSVBFUnxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2OGI4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0pVTklQRVJ8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2OGI5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0pVTklQRVJ8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2OGJhLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0pVTklQRVJ8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2OGJlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0pVTklQRVJ8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2OGJmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0pVTklQRVJ8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2OGMwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JFRFdPT0R8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NjhjMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SRURXT09EfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY4YzcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUkVEV09PRHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9tZ2FfZHJtLmggYi9pbmNsdWRlL2RybS9tZ2FfZHJtLmgKaW5kZXggYzE2MDk3Zi4uZmNhODE3MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vbWdhX2RybS5oCisrKyBiL2luY2x1ZGUvZHJtL21nYV9kcm0uaApAQCAtMTA3LDcgKzEwNyw3IEBACiAgKi8KICNkZWZpbmUgTUdBX05SX1NBUkVBX0NMSVBSRUNUUwk4CiAKLS8qIDIgaGVhcHMgKDEgZm9yIGNhcmQsIDEgZm9yIGFncCksIGVhY2ggZGl2aWRlZCBpbnRvIHVwdG8gMTI4CisvKiAyIGhlYXBzICgxIGZvciBjYXJkLCAxIGZvciBhZ3ApLCBlYWNoIGRpdmlkZWQgaW50byB1cCB0byAxMjgKICAqIHJlZ2lvbnMsIHN1YmplY3QgdG8gYSBtaW5pbXVtIHJlZ2lvbiBzaXplIG9mICgxPDwxNikgPT0gNjRrLgogICoKICAqIENsaWVudHMgbWF5IHN1YmRpdmlkZSByZWdpb25zIGludGVybmFsbHksIGJ1dCB3aGVuIHNoYXJpbmcgYmV0d2VlbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oIGIvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCmluZGV4IDNkZWM0MWMuLjc4N2Y3YjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKQEAgLTY0MSw3ICs2NDEsNyBAQAogfSBkcm1fcmFkZW9uX3ZlcnRleDJfdDsKIAogLyogdjEuMyAtIG9ic29sZXRlcyBkcm1fcmFkZW9uX3ZlcnRleDIKLSAqICAgICAgLSBhbGxvd3MgYXJiaXRhcmlseSBsYXJnZSBjbGlwcmVjdCBsaXN0CisgKiAgICAgIC0gYWxsb3dzIGFyYml0cmFyaWx5IGxhcmdlIGNsaXByZWN0IGxpc3QKICAqICAgICAgLSBhbGxvd3MgdXBkYXRpbmcgb2YgdGNsIHBhY2tldCwgdmVjdG9yIGFuZCBzY2FsYXIgc3RhdGUKICAqICAgICAgLSBhbGxvd3MgbWVtb3J5LWVmZmljaWVudCBkZXNjcmlwdGlvbiBvZiBzdGF0ZSB1cGRhdGVzCiAgKiAgICAgIC0gYWxsb3dzIHN0YXRlIHRvIGJlIGVtaXR0ZWQgd2l0aG91dCBhIHByaW1pdGl2ZQpAQCAtOTA5LDYgKzkwOSw4IEBACiAjZGVmaW5lIFJBREVPTl9JTkZPX1dBTlRfQ01BU0sJCTB4MDggLyogZ2V0IGFjY2VzcyB0byBDTUFTSyBvbiByMzAwICovCiAjZGVmaW5lIFJBREVPTl9JTkZPX0NMT0NLX0NSWVNUQUxfRlJFUQkweDA5IC8qIGNsb2NrIGNyeXN0YWwgZnJlcXVlbmN5ICovCiAjZGVmaW5lIFJBREVPTl9JTkZPX05VTV9CQUNLRU5EUwkweDBhIC8qIERCL2JhY2tlbmRzIGZvciByNjAwKyAtIG5lZWQgZm9yIE9RICovCisjZGVmaW5lIFJBREVPTl9JTkZPX05VTV9USUxFX1BJUEVTCTB4MGIgLyogdGlsZSBwaXBlcyBmb3IgcjYwMCsgKi8KKyNkZWZpbmUgUkFERU9OX0lORk9fRlVTSU9OX0dBUlRfV09SS0lORwkweDBjIC8qIGZ1c2lvbiB3cml0ZXMgdG8gR1RUIHdlcmUgYnJva2VuIGJlZm9yZSB0aGlzICovCiAKIHN0cnVjdCBkcm1fcmFkZW9uX2luZm8gewogCXVpbnQzMl90CQlyZXF1ZXN0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vc2F2YWdlX2RybS5oIGIvaW5jbHVkZS9kcm0vc2F2YWdlX2RybS5oCmluZGV4IDQ4NjNjZjYuLjgxOGQ0OWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3NhdmFnZV9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9zYXZhZ2VfZHJtLmgKQEAgLTI5LDcgKzI5LDcgQEAKICNpZm5kZWYgX19TQVZBR0VfU0FSRUFfREVGSU5FU19fCiAjZGVmaW5lIF9fU0FWQUdFX1NBUkVBX0RFRklORVNfXwogCi0vKiAyIGhlYXBzICgxIGZvciBjYXJkLCAxIGZvciBhZ3ApLCBlYWNoIGRpdmlkZWQgaW50byB1cHRvIDEyOAorLyogMiBoZWFwcyAoMSBmb3IgY2FyZCwgMSBmb3IgYWdwKSwgZWFjaCBkaXZpZGVkIGludG8gdXAgdG8gMTI4CiAgKiByZWdpb25zLCBzdWJqZWN0IHRvIGEgbWluaW11bSByZWdpb24gc2l6ZSBvZiAoMTw8MTYpID09IDY0ay4KICAqCiAgKiBDbGllbnRzIG1heSBzdWJkaXZpZGUgcmVnaW9ucyBpbnRlcm5hbGx5LCBidXQgd2hlbiBzaGFyaW5nIGJldHdlZW4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fYXBpLmggYi9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2FwaS5oCmluZGV4IGE2YmQxMTcuLjYyYTBlNGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fYXBpLmgKKysrIGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19hcGkuaApAQCAtNTAsMTAgKzUwLDEwIEBACiAgKgogICogQGZwZm46CQlmaXJzdCB2YWxpZCBwYWdlIGZyYW1lIG51bWJlciB0byBwdXQgdGhlIG9iamVjdAogICogQGxwZm46CQlsYXN0IHZhbGlkIHBhZ2UgZnJhbWUgbnVtYmVyIHRvIHB1dCB0aGUgb2JqZWN0Ci0gKiBAbnVtX3BsYWNlbWVudDoJbnVtYmVyIG9mIHByZWZlcmVkIHBsYWNlbWVudHMKLSAqIEBwbGFjZW1lbnQ6CQlwcmVmZXJlZCBwbGFjZW1lbnRzCi0gKiBAbnVtX2J1c3lfcGxhY2VtZW50OgludW1iZXIgb2YgcHJlZmVyZWQgcGxhY2VtZW50cyB3aGVuIG5lZWQgdG8gZXZpY3QgYnVmZmVyCi0gKiBAYnVzeV9wbGFjZW1lbnQ6CXByZWZlcmVkIHBsYWNlbWVudHMgd2hlbiBuZWVkIHRvIGV2aWN0IGJ1ZmZlcgorICogQG51bV9wbGFjZW1lbnQ6CW51bWJlciBvZiBwcmVmZXJyZWQgcGxhY2VtZW50cworICogQHBsYWNlbWVudDoJCXByZWZlcnJlZCBwbGFjZW1lbnRzCisgKiBAbnVtX2J1c3lfcGxhY2VtZW50OgludW1iZXIgb2YgcHJlZmVycmVkIHBsYWNlbWVudHMgd2hlbiBuZWVkIHRvIGV2aWN0IGJ1ZmZlcgorICogQGJ1c3lfcGxhY2VtZW50OglwcmVmZXJyZWQgcGxhY2VtZW50cyB3aGVuIG5lZWQgdG8gZXZpY3QgYnVmZmVyCiAgKgogICogU3RydWN0dXJlIGluZGljYXRpbmcgdGhlIHBsYWNlbWVudCB5b3UgcmVxdWVzdCBmb3IgYW4gb2JqZWN0LgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2RyaXZlci5oIGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19kcml2ZXIuaAppbmRleCA5NjBiNTIxLi4wOWFmMmQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2RyaXZlci5oCisrKyBiL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fZHJpdmVyLmgKQEAgLTIyMyw5ICsyMjMsOSBAQAogCSAqIEBtZW06Om1tX25vZGUgc2hvdWxkIGJlIHNldCB0byBhIG5vbi1udWxsIHZhbHVlLCBhbmQKIAkgKiBAbWVtOjpzdGFydCBzaG91bGQgYmUgc2V0IHRvIGEgdmFsdWUgaWRlbnRpZnlpbmcgdGhlIGJlZ2lubmluZwogCSAqIG9mIHRoZSByYW5nZSBhbGxvY2F0ZWQsIGFuZCB0aGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiB6ZXJvLgotCSAqIElmIHRoZSBtZW1vcnkgcmVnaW9uIGFjY29tb2RhdGUgdGhlIGJ1ZmZlciBvYmplY3QsIEBtZW06Om1tX25vZGUKKwkgKiBJZiB0aGUgbWVtb3J5IHJlZ2lvbiBhY2NvbW1vZGF0ZSB0aGUgYnVmZmVyIG9iamVjdCwgQG1lbTo6bW1fbm9kZQogCSAqIHNob3VsZCBiZSBzZXQgdG8gTlVMTCwgYW5kIHRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIDAuCi0JICogSWYgYSBzeXN0ZW0gZXJyb3Igb2NjdXJlZCwgcHJldmVudGluZyB0aGUgcmVxdWVzdCB0byBiZSBmdWxmaWxsZWQsCisJICogSWYgYSBzeXN0ZW0gZXJyb3Igb2NjdXJyZWQsIHByZXZlbnRpbmcgdGhlIHJlcXVlc3QgdG8gYmUgZnVsZmlsbGVkLAogCSAqIHRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KIAkgKgogCSAqIE5vdGUgdGhhdCBAbWVtOjptbV9ub2RlIHdpbGwgb25seSBiZSBkZXJlZmVyZW5jZWQgYnkKQEAgLTg0MSw3ICs4NDEsNyBAQAogICogZGlmZmVyZW50IG9yZGVyLCBlaXRoZXIgYnkgd2lsbCBvciBhcyBhIHJlc3VsdCBvZiBhIGJ1ZmZlciBiZWluZyBldmljdGVkCiAgKiB0byBtYWtlIHJvb20gZm9yIGEgYnVmZmVyIGFscmVhZHkgcmVzZXJ2ZWQuIChCdWZmZXJzIGFyZSByZXNlcnZlZCBiZWZvcmUKICAqIHRoZXkgYXJlIGV2aWN0ZWQpLiBUaGUgZm9sbG93aW5nIGFsZ29yaXRobSBwcmV2ZW50cyBzdWNoIGRlYWRsb2NrcyBmcm9tCi0gKiBvY2N1cmluZzoKKyAqIG9jY3VycmluZzoKICAqIDEpIEJ1ZmZlcnMgYXJlIHJlc2VydmVkIHdpdGggdGhlIGxydSBzcGlubG9jayBoZWxkLiBVcG9uIHN1Y2Nlc3NmdWwKICAqIHJlc2VydmF0aW9uIHRoZXkgYXJlIHJlbW92ZWQgZnJvbSB0aGUgbHJ1IGxpc3QuIFRoaXMgc3RvcHMgYSByZXNlcnZlZCBidWZmZXIKICAqIGZyb20gYmVpbmcgZXZpY3RlZC4gSG93ZXZlciB0aGUgbHJ1IHNwaW5sb2NrIGlzIHJlbGVhc2VkIGJldHdlZW4gdGhlIHRpbWUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3Ztd2dmeF9kcm0uaCBiL2luY2x1ZGUvZHJtL3Ztd2dmeF9kcm0uaAppbmRleCA2NTBlNmJmLi41YzM2NDMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS92bXdnZnhfZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vdm13Z2Z4X2RybS5oCkBAIC01OTIsNyArNTkyLDcgQEAKIC8qKgogICogRFJNX1ZNV19VUERBVEVfTEFZT1VUIC0gVXBkYXRlIGxheW91dAogICoKLSAqIFVwZGF0ZXMgdGhlIHByZWZlcmVkIG1vZGVzIGFuZCBjb25uZWN0aW9uIHN0YXR1cyBmb3IgY29ubmVjdG9ycy4gVGhlCisgKiBVcGRhdGVzIHRoZSBwcmVmZXJyZWQgbW9kZXMgYW5kIGNvbm5lY3Rpb24gc3RhdHVzIGZvciBjb25uZWN0b3JzLiBUaGUKICAqIGNvbW1hbmQgY29uaXNpdHMgb2Ygb25lIGRybV92bXdfdXBkYXRlX2xheW91dF9hcmcgcG9pbnRpbmcgb3V0IGEgYXJyYXkKICAqIG9mIG51bV9vdXRwdXRzIGRybV92bXdfcmVjdCdzLgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FtYmEvY2xjZC5oIGIvaW5jbHVkZS9saW51eC9hbWJhL2NsY2QuaAppbmRleCAyNGQyNmVmLi5lODJlM2VlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2FtYmEvY2xjZC5oCisrKyBiL2luY2x1ZGUvbGludXgvYW1iYS9jbGNkLmgKQEAgLTEzNiw3ICsxMzYsNyBAQAogCWludAkoKmNoZWNrKShzdHJ1Y3QgY2xjZF9mYiAqZmIsIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKTsKIAogCS8qCi0JICogQ29tcHVsc2FyeS4gIERlY29kZSBmYi0+ZmIudmFyIGludG8gcmVncy0+Ki4gIEluIHRoZSBjYXNlIG9mCisJICogQ29tcHVsc29yeS4gIERlY29kZSBmYi0+ZmIudmFyIGludG8gcmVncy0+Ki4gIEluIHRoZSBjYXNlIG9mCiAJICogZml4ZWQgdGltaW5nLCBzZXQgcmVncy0+KiB0byB0aGUgcmVnaXN0ZXIgdmFsdWVzIHJlcXVpcmVkLgogCSAqLwogCXZvaWQJKCpkZWNvZGUpKHN0cnVjdCBjbGNkX2ZiICpmYiwgc3RydWN0IGNsY2RfcmVncyAqcmVncyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FtYmEvbW1jaS5oIGIvaW5jbHVkZS9saW51eC9hbWJhL21tY2kuaAppbmRleCBmNjAyMjcwLi4yMTExNDgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2FtYmEvbW1jaS5oCisrKyBiL2luY2x1ZGUvbGludXgvYW1iYS9tbWNpLmgKQEAgLTMwLDE1ICszMCwxNSBAQAogICogQGNkX2ludmVydDogdHJ1ZSBpZiB0aGUgZ3Bpb19jZCBwaW4gdmFsdWUgaXMgYWN0aXZlIGxvdwogICogQGNhcGFiaWxpdGllczogdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgYmxvY2sgYXMgaW1wbGVtZW50ZWQgaW4KICAqIHRoaXMgcGxhdGZvcm0sIHNpZ25pZnkgYW55dGhpbmcgTU1DX0NBUF8qIGZyb20gbW1jL2hvc3QuaAotICogQGRtYV9maWx0ZXI6IGZ1bmN0aW9uIHVzZWQgdG8gc2VsZWN0IGFuIGFwcm9wcmlhdGUgUlggYW5kIFRYCisgKiBAZG1hX2ZpbHRlcjogZnVuY3Rpb24gdXNlZCB0byBzZWxlY3QgYW4gYXBwcm9wcmlhdGUgUlggYW5kIFRYCiAgKiBETUEgY2hhbm5lbCB0byBiZSB1c2VkIGZvciBETUEsIGlmIGFuZCBvbmx5IGlmIHlvdSdyZSBkZXBsb3lpbmcgdGhlCiAgKiBnZW5lcmljIERNQSBlbmdpbmUKICAqIEBkbWFfcnhfcGFyYW06IHBhcmFtZXRlciBwYXNzZWQgdG8gdGhlIERNQSBhbGxvY2F0aW9uCi0gKiBmaWx0ZXIgaW4gb3JkZXIgdG8gc2VsZWN0IGFuIGFwcm9wcmlhdGUgUlggY2hhbm5lbC4gSWYKKyAqIGZpbHRlciBpbiBvcmRlciB0byBzZWxlY3QgYW4gYXBwcm9wcmlhdGUgUlggY2hhbm5lbC4gSWYKICAqIHRoZXJlIGlzIGEgYmlkaXJlY3Rpb25hbCBSWCtUWCBjaGFubmVsLCB0aGVuIGp1c3Qgc3BlY2lmeQogICogdGhpcyBhbmQgbGVhdmUgZG1hX3R4X3BhcmFtIHNldCB0byBOVUxMCiAgKiBAZG1hX3R4X3BhcmFtOiBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSBETUEgYWxsb2NhdGlvbgotICogZmlsdGVyIGluIG9yZGVyIHRvIHNlbGVjdCBhbiBhcHJvcHJpYXRlIFRYIGNoYW5uZWwuIElmIHRoaXMKKyAqIGZpbHRlciBpbiBvcmRlciB0byBzZWxlY3QgYW4gYXBwcm9wcmlhdGUgVFggY2hhbm5lbC4gSWYgdGhpcwogICogaXMgTlVMTCB0aGUgZHJpdmVyIHdpbGwgYXR0ZW1wdCB0byB1c2UgdGhlIFJYIGNoYW5uZWwgYXMgYQogICogYmlkaXJlY3Rpb25hbCBjaGFubmVsCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYml0X3NwaW5sb2NrLmggYi9pbmNsdWRlL2xpbnV4L2JpdF9zcGlubG9jay5oCmluZGV4IGU2MTI1NzUuLmI0MzI2YmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYml0X3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9iaXRfc3BpbmxvY2suaApAQCAtMjMsMTEgKzIzLDExIEBACiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19ERUJVR19TUElOTE9DSykKIAl3aGlsZSAodW5saWtlbHkodGVzdF9hbmRfc2V0X2JpdF9sb2NrKGJpdG51bSwgYWRkcikpKSB7Ci0JCXdoaWxlICh0ZXN0X2JpdChiaXRudW0sIGFkZHIpKSB7Ci0JCQlwcmVlbXB0X2VuYWJsZSgpOworCQlwcmVlbXB0X2VuYWJsZSgpOworCQlkbyB7CiAJCQljcHVfcmVsYXgoKTsKLQkJCXByZWVtcHRfZGlzYWJsZSgpOwotCQl9CisJCX0gd2hpbGUgKHRlc3RfYml0KGJpdG51bSwgYWRkcikpOworCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAl9CiAjZW5kaWYKIAlfX2FjcXVpcmUoYml0bG9jayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCAzMjE3NmNjLi4yYWQ5NWZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTM4OCwyMCArMzg4LDE5IEBACiAjZGVmaW5lCVFVRVVFX0ZMQUdfU1lOQ0ZVTEwJMwkvKiByZWFkIHF1ZXVlIGhhcyBiZWVuIGZpbGxlZCAqLwogI2RlZmluZSBRVUVVRV9GTEFHX0FTWU5DRlVMTAk0CS8qIHdyaXRlIHF1ZXVlIGhhcyBiZWVuIGZpbGxlZCAqLwogI2RlZmluZSBRVUVVRV9GTEFHX0RFQUQJCTUJLyogcXVldWUgYmVpbmcgdG9ybiBkb3duICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfUkVFTlRFUgk2CS8qIFJlLWVudHJhbmN5IGF2b2lkYW5jZSAqLwotI2RlZmluZSBRVUVVRV9GTEFHX0VMVlNXSVRDSAk3CS8qIGRvbid0IHVzZSBlbGV2YXRvciwganVzdCBkbyBGSUZPICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfQklESQkJOAkvKiBxdWV1ZSBzdXBwb3J0cyBiaWRpIHJlcXVlc3RzICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfTk9NRVJHRVMgICAgIDkJLyogZGlzYWJsZSBtZXJnZSBhdHRlbXB0cyAqLwotI2RlZmluZSBRVUVVRV9GTEFHX1NBTUVfQ09NUCAgIDEwCS8qIGZvcmNlIGNvbXBsZXRlIG9uIHNhbWUgQ1BVICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfRkFJTF9JTyAgICAgMTEJLyogZmFrZSB0aW1lb3V0ICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfU1RBQ0tBQkxFICAgMTIJLyogc3VwcG9ydHMgcmVxdWVzdCBzdGFja2luZyAqLwotI2RlZmluZSBRVUVVRV9GTEFHX05PTlJPVCAgICAgIDEzCS8qIG5vbi1yb3RhdGlvbmFsIGRldmljZSAoU1NEKSAqLworI2RlZmluZSBRVUVVRV9GTEFHX0VMVlNXSVRDSAk2CS8qIGRvbid0IHVzZSBlbGV2YXRvciwganVzdCBkbyBGSUZPICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfQklESQkJNwkvKiBxdWV1ZSBzdXBwb3J0cyBiaWRpIHJlcXVlc3RzICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfTk9NRVJHRVMgICAgIDgJLyogZGlzYWJsZSBtZXJnZSBhdHRlbXB0cyAqLworI2RlZmluZSBRVUVVRV9GTEFHX1NBTUVfQ09NUAk5CS8qIGZvcmNlIGNvbXBsZXRlIG9uIHNhbWUgQ1BVICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfRkFJTF9JTyAgICAgMTAJLyogZmFrZSB0aW1lb3V0ICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfU1RBQ0tBQkxFICAgMTEJLyogc3VwcG9ydHMgcmVxdWVzdCBzdGFja2luZyAqLworI2RlZmluZSBRVUVVRV9GTEFHX05PTlJPVCAgICAgIDEyCS8qIG5vbi1yb3RhdGlvbmFsIGRldmljZSAoU1NEKSAqLwogI2RlZmluZSBRVUVVRV9GTEFHX1ZJUlQgICAgICAgIFFVRVVFX0ZMQUdfTk9OUk9UIC8qIHBhcmF2aXJ0IGRldmljZSAqLwotI2RlZmluZSBRVUVVRV9GTEFHX0lPX1NUQVQgICAgIDE1CS8qIGRvIElPIHN0YXRzICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfRElTQ0FSRCAgICAgMTYJLyogc3VwcG9ydHMgRElTQ0FSRCAqLwotI2RlZmluZSBRVUVVRV9GTEFHX05PWE1FUkdFUyAgIDE3CS8qIE5vIGV4dGVuZGVkIG1lcmdlcyAqLwotI2RlZmluZSBRVUVVRV9GTEFHX0FERF9SQU5ET00gIDE4CS8qIENvbnRyaWJ1dGVzIHRvIHJhbmRvbSBwb29sICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfU0VDRElTQ0FSRCAgMTkJLyogc3VwcG9ydHMgU0VDRElTQ0FSRCAqLworI2RlZmluZSBRVUVVRV9GTEFHX0lPX1NUQVQgICAgIDEzCS8qIGRvIElPIHN0YXRzICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfRElTQ0FSRCAgICAgMTQJLyogc3VwcG9ydHMgRElTQ0FSRCAqLworI2RlZmluZSBRVUVVRV9GTEFHX05PWE1FUkdFUyAgIDE1CS8qIE5vIGV4dGVuZGVkIG1lcmdlcyAqLworI2RlZmluZSBRVUVVRV9GTEFHX0FERF9SQU5ET00gIDE2CS8qIENvbnRyaWJ1dGVzIHRvIHJhbmRvbSBwb29sICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfU0VDRElTQ0FSRCAgMTcJLyogc3VwcG9ydHMgU0VDRElTQ0FSRCAqLwogCiAjZGVmaW5lIFFVRVVFX0ZMQUdfREVGQVVMVAkoKDEgPDwgUVVFVUVfRkxBR19JT19TVEFUKSB8CQlcCiAJCQkJICgxIDw8IFFVRVVFX0ZMQUdfU1RBQ0tBQkxFKQl8CVwKQEAgLTY5Nyw4ICs2OTYsOSBAQAogZXh0ZXJuIHZvaWQgYmxrX3N0b3BfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogZXh0ZXJuIHZvaWQgYmxrX3N5bmNfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogZXh0ZXJuIHZvaWQgX19ibGtfc3RvcF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7Ci1leHRlcm4gdm9pZCBfX2Jsa19ydW5fcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGJvb2wgZm9yY2Vfa2Jsb2NrZCk7CitleHRlcm4gdm9pZCBfX2Jsa19ydW5fcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogZXh0ZXJuIHZvaWQgYmxrX3J1bl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqKTsKK2V4dGVybiB2b2lkIGJsa19ydW5fcXVldWVfYXN5bmMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogZXh0ZXJuIGludCBibGtfcnFfbWFwX3VzZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IHJlcXVlc3QgKiwKIAkJCSAgIHN0cnVjdCBycV9tYXBfZGF0YSAqLCB2b2lkIF9fdXNlciAqLCB1bnNpZ25lZCBsb25nLAogCQkJICAgZ2ZwX3QpOwpAQCAtODU3LDI2ICs4NTcsMzkgQEAKIHN0cnVjdCBibGtfcGx1ZyB7CiAJdW5zaWduZWQgbG9uZyBtYWdpYzsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBjYl9saXN0OwogCXVuc2lnbmVkIGludCBzaG91bGRfc29ydDsKIH07CitzdHJ1Y3QgYmxrX3BsdWdfY2IgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl2b2lkICgqY2FsbGJhY2spKHN0cnVjdCBibGtfcGx1Z19jYiAqKTsKK307CiAKIGV4dGVybiB2b2lkIGJsa19zdGFydF9wbHVnKHN0cnVjdCBibGtfcGx1ZyAqKTsKIGV4dGVybiB2b2lkIGJsa19maW5pc2hfcGx1ZyhzdHJ1Y3QgYmxrX3BsdWcgKik7Ci1leHRlcm4gdm9pZCBfX2Jsa19mbHVzaF9wbHVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBzdHJ1Y3QgYmxrX3BsdWcgKik7CitleHRlcm4gdm9pZCBibGtfZmx1c2hfcGx1Z19saXN0KHN0cnVjdCBibGtfcGx1ZyAqLCBib29sKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGJsa19mbHVzaF9wbHVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogCXN0cnVjdCBibGtfcGx1ZyAqcGx1ZyA9IHRzay0+cGx1ZzsKIAotCWlmICh1bmxpa2VseShwbHVnKSkKLQkJX19ibGtfZmx1c2hfcGx1Zyh0c2ssIHBsdWcpOworCWlmIChwbHVnKQorCQlibGtfZmx1c2hfcGx1Z19saXN0KHBsdWcsIGZhbHNlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJsa19zY2hlZHVsZV9mbHVzaF9wbHVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXN0cnVjdCBibGtfcGx1ZyAqcGx1ZyA9IHRzay0+cGx1ZzsKKworCWlmIChwbHVnKQorCQlibGtfZmx1c2hfcGx1Z19saXN0KHBsdWcsIHRydWUpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgYmxrX25lZWRzX2ZsdXNoX3BsdWcoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJc3RydWN0IGJsa19wbHVnICpwbHVnID0gdHNrLT5wbHVnOwogCi0JcmV0dXJuIHBsdWcgJiYgIWxpc3RfZW1wdHkoJnBsdWctPmxpc3QpOworCXJldHVybiBwbHVnICYmICghbGlzdF9lbXB0eSgmcGx1Zy0+bGlzdCkgfHwgIWxpc3RfZW1wdHkoJnBsdWctPmNiX2xpc3QpKTsKIH0KIAogLyoKQEAgLTEzMTQsNiArMTMyNywxMSBAQAogewogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYmxrX3NjaGVkdWxlX2ZsdXNoX3BsdWcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworfQorCisKIHN0YXRpYyBpbmxpbmUgYm9vbCBibGtfbmVlZHNfZmx1c2hfcGx1ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaCBiL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCmluZGV4IGI4NjEzZTguLjAxZWNhMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCisrKyBiL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCkBAIC0xMTEsNiArMTExLDggQEAKIAlfX2FsbG9jX2Jvb3RtZW1fbm9wYW5pYyh4LCBQQUdFX1NJWkUsIF9fcGEoTUFYX0RNQV9BRERSRVNTKSkKICNkZWZpbmUgYWxsb2NfYm9vdG1lbV9ub2RlKHBnZGF0LCB4KSBcCiAJX19hbGxvY19ib290bWVtX25vZGUocGdkYXQsIHgsIFNNUF9DQUNIRV9CWVRFUywgX19wYShNQVhfRE1BX0FERFJFU1MpKQorI2RlZmluZSBhbGxvY19ib290bWVtX25vZGVfbm9wYW5pYyhwZ2RhdCwgeCkgXAorCV9fYWxsb2NfYm9vdG1lbV9ub2RlX25vcGFuaWMocGdkYXQsIHgsIFNNUF9DQUNIRV9CWVRFUywgX19wYShNQVhfRE1BX0FERFJFU1MpKQogI2RlZmluZSBhbGxvY19ib290bWVtX3BhZ2VzX25vZGUocGdkYXQsIHgpIFwKIAlfX2FsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdCwgeCwgUEFHRV9TSVpFLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpCiAjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fcGFnZXNfbm9kZV9ub3BhbmljKHBnZGF0LCB4KSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nhbi9lcnJvci5oIGIvaW5jbHVkZS9saW51eC9jYW4vZXJyb3IuaAppbmRleCBkNDEyN2ZkLi41OTU4MDc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nhbi9lcnJvci5oCisrKyBiL2luY2x1ZGUvbGludXgvY2FuL2Vycm9yLmgKQEAgLTUxLDcgKzUxLDcgQEAKICNkZWZpbmUgQ0FOX0VSUl9QUk9UX0JJVDEgICAgICAgIDB4MTAgLyogdW5hYmxlIHRvIHNlbmQgcmVjZXNzaXZlIGJpdCAqLwogI2RlZmluZSBDQU5fRVJSX1BST1RfT1ZFUkxPQUQgICAgMHgyMCAvKiBidXMgb3ZlcmxvYWQgKi8KICNkZWZpbmUgQ0FOX0VSUl9QUk9UX0FDVElWRSAgICAgIDB4NDAgLyogYWN0aXZlIGVycm9yIGFubm91bmNlbWVudCAqLwotI2RlZmluZSBDQU5fRVJSX1BST1RfVFggICAgICAgICAgMHg4MCAvKiBlcnJvciBvY2N1cmVkIG9uIHRyYW5zbWlzc2lvbiAqLworI2RlZmluZSBDQU5fRVJSX1BST1RfVFggICAgICAgICAgMHg4MCAvKiBlcnJvciBvY2N1cnJlZCBvbiB0cmFuc21pc3Npb24gKi8KIAogLyogZXJyb3IgaW4gQ0FOIHByb3RvY29sIChsb2NhdGlvbikgLyBkYXRhWzNdICovCiAjZGVmaW5lIENBTl9FUlJfUFJPVF9MT0NfVU5TUEVDICAweDAwIC8qIHVuc3BlY2lmaWVkICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nhbi9uZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L2Nhbi9uZXRsaW5rLmgKaW5kZXggMzI1MGRlOS4uMzQ1NDJkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jYW4vbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvY2FuL25ldGxpbmsuaApAQCAtMTcsNyArMTcsNyBAQAogLyoKICAqIENBTiBiaXQtdGltaW5nIHBhcmFtZXRlcnMKICAqCi0gKiBGb3IgZnV0aGVyIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVhZCBjaGFwdGVyICI4IEJJVCBUSU1JTkcKKyAqIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVhZCBjaGFwdGVyICI4IEJJVCBUSU1JTkcKICAqIFJFUVVJUkVNRU5UUyIgb2YgdGhlICJCb3NjaCBDQU4gU3BlY2lmaWNhdGlvbiB2ZXJzaW9uIDIuMCIKICAqIGF0IGh0dHA6Ly93d3cuc2VtaWNvbmR1Y3RvcnMuYm9zY2guZGUvcGRmL2NhbjJzcGVjLnBkZi4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYW4vcGxhdGZvcm0vbWNwMjUxeC5oIGIvaW5jbHVkZS9saW51eC9jYW4vcGxhdGZvcm0vbWNwMjUxeC5oCmluZGV4IDhlMjA1NDAuLjA4OWZlNDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2FuL3BsYXRmb3JtL21jcDI1MXguaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nhbi9wbGF0Zm9ybS9tY3AyNTF4LmgKQEAgLTEyLDYgKzEyLDcgQEAKIC8qKgogICogc3RydWN0IG1jcDI1MXhfcGxhdGZvcm1fZGF0YSAtIE1DUDI1MVggU1BJIENBTiBjb250cm9sbGVyIHBsYXRmb3JtIGRhdGEKICAqIEBvc2NpbGxhdG9yX2ZyZXF1ZW5jeTogICAgICAgLSBvc2NpbGxhdG9yIGZyZXF1ZW5jeSBpbiBIegorICogQGlycV9mbGFnczogICAgICAgICAgICAgICAgICAtIElSUUYgY29uZmlndXJhdGlvbiBmbGFncwogICogQGJvYXJkX3NwZWNpZmljX3NldHVwOiAgICAgICAtIGNhbGxlZCBiZWZvcmUgcHJvYmluZyB0aGUgY2hpcCAocG93ZXIscmVzZXQpCiAgKiBAdHJhbnNjZWl2ZXJfZW5hYmxlOiAgICAgICAgIC0gY2FsbGVkIHRvIHBvd2VyIG9uL29mZiB0aGUgdHJhbnNjZWl2ZXIKICAqIEBwb3dlcl9lbmFibGU6ICAgICAgICAgICAgICAgLSBjYWxsZWQgdG8gcG93ZXIgb24vb2ZmIHRoZSBtY3AgKmFuZCogdGhlCkBAIC0yNCw2ICsyNSw3IEBACiAKIHN0cnVjdCBtY3AyNTF4X3BsYXRmb3JtX2RhdGEgewogCXVuc2lnbmVkIGxvbmcgb3NjaWxsYXRvcl9mcmVxdWVuY3k7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAJaW50ICgqYm9hcmRfc3BlY2lmaWNfc2V0dXApKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpOwogCWludCAoKnRyYW5zY2VpdmVyX2VuYWJsZSkoaW50IGVuYWJsZSk7CiAJaW50ICgqcG93ZXJfZW5hYmxlKSAoaW50IGVuYWJsZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaCBiL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oCmluZGV4IDE2ZWU4YjQuLmQ0Njc1YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oCkBAIC01NDYsMTggKzU0Niw3IEBACiBleHRlcm4gYm9vbCBjYXBhYmxlKGludCBjYXApOwogZXh0ZXJuIGJvb2wgbnNfY2FwYWJsZShzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKTsKIGV4dGVybiBib29sIHRhc2tfbnNfY2FwYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjYXApOwotCi0vKioKLSAqIG5zb3duX2NhcGFibGUgLSBDaGVjayBzdXBlcmlvciBjYXBhYmlsaXR5IHRvIG9uZSdzIG93biB1c2VyX25zCi0gKiBAY2FwOiBUaGUgY2FwYWJpbGl0eSBpbiBxdWVzdGlvbgotICoKLSAqIFJldHVybiB0cnVlIGlmIHRoZSBjdXJyZW50IHRhc2sgaGFzIHRoZSBnaXZlbiBzdXBlcmlvciBjYXBhYmlsaXR5Ci0gKiB0YXJnZXRlZCBhdCBpdHMgb3duIHVzZXIgbmFtZXNwYWNlLgotICovCi1zdGF0aWMgaW5saW5lIGJvb2wgbnNvd25fY2FwYWJsZShpbnQgY2FwKQotewotCXJldHVybiBuc19jYXBhYmxlKGN1cnJlbnRfdXNlcl9ucygpLCBjYXApOwotfQorZXh0ZXJuIGJvb2wgbnNvd25fY2FwYWJsZShpbnQgY2FwKTsKIAogLyogYXVkaXQgc3lzdGVtIHdhbnRzIHRvIGdldCBjYXAgaW5mbyBmcm9tIGZpbGVzIGFzIHdlbGwgKi8KIGV4dGVybiBpbnQgZ2V0X3Zmc19jYXBzX2Zyb21fZGlzayhjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBjcHVfdmZzX2NhcF9kYXRhICpjcHVfY2Fwcyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nkay5oIGIvaW5jbHVkZS9saW51eC9jZGsuaAppbmRleCAwOTA4ZGFmLi44MDA5M2E4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nkay5oCisrKyBiL2luY2x1ZGUvbGludXgvY2RrLmgKQEAgLTE0OSw3ICsxNDksNyBAQAogLyoKICAqCURlZmluZSB0aGUgbWVtb3J5IG1hcHBpbmcgc3RydWN0dXJlLiBUaGlzIHN0cnVjdHVyZSBpcyBwb2ludGVkIHRvIGJ5CiAgKgl0aGUgbWVtcCBmaWVsZCBpbiB0aGUgc3RsY2RraGRyIHN0cnVjdC4gQXMgbWFueSBhcyB0aGVzZSBzdHJ1Y3R1cmVzCi0gKglhcyByZXF1aXJlZCBhcmUgbGF5ZWQgb3V0IGluIHNoYXJlZCBtZW1vcnkgdG8gZGVmaW5lIGhvdyB0aGUgcmVzdCBvZgorICoJYXMgcmVxdWlyZWQgYXJlIGxhaWQgb3V0IGluIHNoYXJlZCBtZW1vcnkgdG8gZGVmaW5lIGhvdyB0aGUgcmVzdCBvZgogICoJc2hhcmVkIG1lbW9yeSBpcyBkaXZpZGVkIHVwLiBUaGVyZSB3aWxsIGJlIG9uZSBmb3IgZWFjaCBwb3J0LgogICovCiB0eXBlZGVmIHN0cnVjdCBjZGttZW0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZmFnMTI4NjRiLmggYi9pbmNsdWRlL2xpbnV4L2NmYWcxMjg2NGIuaAppbmRleCA2ZjlmMTlkLi5iNDU0ZGZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NmYWcxMjg2NGIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NmYWcxMjg2NGIuaApAQCAtNDQsNyArNDQsNyBAQAogLyoKICAqIEdldCB0aGUgcmVmcmVzaCByYXRlIG9mIHRoZSBMQ0QKICAqCi0gKiBSZXR1cm5zIHRoZSByZWZyZXNoIHJhdGUgKGhlcnR6cykuCisgKiBSZXR1cm5zIHRoZSByZWZyZXNoIHJhdGUgKGhlcnR6KS4KICAqLwogZXh0ZXJuIHVuc2lnbmVkIGludCBjZmFnMTI4NjRiX2dldHJhdGUodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCmluZGV4IGU2NTRmYTIuLjVhYzdlYmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKKysrIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAuaApAQCAtMjQwLDcgKzI0MCw3IEBACiAJLyogRm9yIFJDVS1wcm90ZWN0ZWQgZGVsZXRpb24gKi8KIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7CiAKLQkvKiBMaXN0IG9mIGV2ZW50cyB3aGljaCB1c2Vyc3BhY2Ugd2FudCB0byByZWNpZXZlICovCisJLyogTGlzdCBvZiBldmVudHMgd2hpY2ggdXNlcnNwYWNlIHdhbnQgdG8gcmVjZWl2ZSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfbGlzdDsKIAlzcGlubG9ja190IGV2ZW50X2xpc3RfbG9jazsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NtNDAwMF9jcy5oIGIvaW5jbHVkZS9saW51eC9jbTQwMDBfY3MuaAppbmRleCA3MmJmZWZkLi4zYzRhYWM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NtNDAwMF9jcy5oCisrKyBiL2luY2x1ZGUvbGludXgvY200MDAwX2NzLmgKQEAgLTIwLDcgKzIwLDcgQEAKIH0gYXRyZXFfdDsKIAogCi0vKiB3aGF0IGlzIHBhcnRpY3VsYXJseSBzdHVwaWQgaW4gdGhlIG9yaWdpbmFsIGRyaXZlciBpcyB0aGUgYXJjaC1kZXBlbmRhbnQKKy8qIHdoYXQgaXMgcGFydGljdWxhcmx5IHN0dXBpZCBpbiB0aGUgb3JpZ2luYWwgZHJpdmVyIGlzIHRoZSBhcmNoLWRlcGVuZGVudAogICogbWVtYmVyIHNpemVzLiBUaGlzIGxlYWRzIHRvIENPTkZJR19DT01QQVQgYnJlYWthZ2UsIHNpbmNlIDMyYml0IHVzZXJzcGFjZQogICogd2lsbCBsYXkgb3V0IHRoZSBzdHJ1Y3R1cmUgbWVtYmVycyBkaWZmZXJlbnRseSB0aGFuIHRoZSA2NGJpdCBrZXJuZWwuCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb25maWdmcy5oIGIvaW5jbHVkZS9saW51eC9jb25maWdmcy5oCmluZGV4IGRkYjdhOTcuLjY0NTc3OGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29uZmlnZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgKQEAgLTIxOCw3ICsyMTgsNyBAQAogICogZ3JvdXAgY2hpbGRyZW4uICBkZWZhdWx0X2dyb3VwcyBtYXkgY29leGlzdCBhbG9uZ3NpemUgbWFrZV9ncm91cCgpIG9yCiAgKiBtYWtlX2l0ZW0oKSwgYnV0IGlmIHRoZSBncm91cCB3aXNoZXMgdG8gaGF2ZSBvbmx5IGRlZmF1bHRfZ3JvdXBzCiAgKiBjaGlsZHJlbiAoZGlzYWxsb3dpbmcgbWtkaXIoMikpLCBpdCBuZWVkIG5vdCBwcm92aWRlIGVpdGhlciBmdW5jdGlvbi4KLSAqIElmIHRoZSBncm91cCBoYXMgY29tbWl0KCksIGl0IHN1cHBvcnRzIHBlbmRpbmcgYW5kIGNvbW1pdGVkIChhY3RpdmUpCisgKiBJZiB0aGUgZ3JvdXAgaGFzIGNvbW1pdCgpLCBpdCBzdXBwb3J0cyBwZW5kaW5nIGFuZCBjb21taXR0ZWQgKGFjdGl2ZSkKICAqIGl0ZW1zLgogICovCiBzdHJ1Y3QgY29uZmlnZnNfaXRlbV9vcGVyYXRpb25zIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3Blci5oIGIvaW5jbHVkZS9saW51eC9jcGVyLmgKaW5kZXggMzcyYTI1OC4uYzIzMDQ5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcGVyLmgKQEAgLTMxMCw3ICszMTAsNyBAQAogCV9fdTgJY3B1aWRbNDhdOwogfTsKIAotLyogSUEzMi9YNjQgUHJvY2Vzc29yIEVycm9yIEluZm9tYXRpb24gU3RydWN0dXJlICovCisvKiBJQTMyL1g2NCBQcm9jZXNzb3IgRXJyb3IgSW5mb3JtYXRpb24gU3RydWN0dXJlICovCiBzdHJ1Y3QgY3Blcl9pYV9lcnJfaW5mbyB7CiAJdXVpZF9sZQllcnJfdHlwZTsKIAlfX3U2NAl2YWxpZGF0aW9uX2JpdHM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NyZWQuaCBiL2luY2x1ZGUvbGludXgvY3JlZC5oCmluZGV4IDlhZWViMGIuLmJlMTZiNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3JlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvY3JlZC5oCkBAIC0xNDYsNiArMTQ2LDcgQEAKIAl2b2lkCQkqc2VjdXJpdHk7CS8qIHN1YmplY3RpdmUgTFNNIHNlY3VyaXR5ICovCiAjZW5kaWYKIAlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXI7CS8qIHJlYWwgdXNlciBJRCBzdWJzY3JpcHRpb24gKi8KKwlzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnM7IC8qIGNhY2hlZCB1c2VyLT51c2VyX25zICovCiAJc3RydWN0IGdyb3VwX2luZm8gKmdyb3VwX2luZm87CS8qIHN1cHBsZW1lbnRhcnkgZ3JvdXBzIGZvciBldWlkL2ZzZ2lkICovCiAJc3RydWN0IHJjdV9oZWFkCXJjdTsJCS8qIFJDVSBkZWxldGlvbiBob29rICovCiB9OwpAQCAtMzU0LDEwICszNTUsMTUgQEAKICNkZWZpbmUgY3VycmVudF9mc2dpZCgpIAkoY3VycmVudF9jcmVkX3h4eChmc2dpZCkpCiAjZGVmaW5lIGN1cnJlbnRfY2FwKCkJCShjdXJyZW50X2NyZWRfeHh4KGNhcF9lZmZlY3RpdmUpKQogI2RlZmluZSBjdXJyZW50X3VzZXIoKQkJKGN1cnJlbnRfY3JlZF94eHgodXNlcikpCi0jZGVmaW5lIF9jdXJyZW50X3VzZXJfbnMoKQkoY3VycmVudF9jcmVkX3h4eCh1c2VyKS0+dXNlcl9ucykKICNkZWZpbmUgY3VycmVudF9zZWN1cml0eSgpCShjdXJyZW50X2NyZWRfeHh4KHNlY3VyaXR5KSkKIAotZXh0ZXJuIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqY3VycmVudF91c2VyX25zKHZvaWQpOworI2lmZGVmIENPTkZJR19VU0VSX05TCisjZGVmaW5lIGN1cnJlbnRfdXNlcl9ucygpIChjdXJyZW50X2NyZWRfeHh4KHVzZXJfbnMpKQorI2Vsc2UKK2V4dGVybiBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgaW5pdF91c2VyX25zOworI2RlZmluZSBjdXJyZW50X3VzZXJfbnMoKSAoJmluaXRfdXNlcl9ucykKKyNlbmRpZgorCiAKICNkZWZpbmUgY3VycmVudF91aWRfZ2lkKF91aWQsIF9naWQpCQlcCiBkbyB7CQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvZGNhY2hlLmgKaW5kZXggZjJhZmVkNC4uMTlkOTBhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oCkBAIC0xOTcsNyArMTk3LDcgQEAKICAgICAgICogdHlwaWNhbGx5IHVzaW5nIGRfc3BsaWNlX2FsaWFzLiAqLwogCiAjZGVmaW5lIERDQUNIRV9SRUZFUkVOQ0VECTB4MDAwOCAgLyogUmVjZW50bHkgdXNlZCwgZG9uJ3QgZGlzY2FyZC4gKi8KLSNkZWZpbmUgRENBQ0hFX1VOSEFTSEVECQkweDAwMTAJCisjZGVmaW5lIERDQUNIRV9SQ1VBQ0NFU1MJMHgwMDEwCS8qIEVudHJ5IGhhcyBldmVyIGJlZW4gUkNVLXZpc2libGUgKi8KICNkZWZpbmUgRENBQ0hFX0lOT1RJRllfUEFSRU5UX1dBVENIRUQgMHgwMDIwCiAgICAgIC8qIFBhcmVudCBpbm9kZSBpcyB3YXRjaGVkIGJ5IGlub3RpZnkgKi8KIApAQCAtMzg0LDcgKzM4NCw3IEBACiAgCiBzdGF0aWMgaW5saW5lIGludCBkX3VuaGFzaGVkKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKLQlyZXR1cm4gKGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9VTkhBU0hFRCk7CisJcmV0dXJuIGhsaXN0X2JsX3VuaGFzaGVkKCZkZW50cnktPmRfaGFzaCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRfdW5saW5rZWQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL21tLmggYi9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvbW0uaAppbmRleCA0Y2I3MmI5Li43OTI1YmYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2RlY29tcHJlc3MvbW0uaApAQCAtMTYsNyArMTYsNyBAQAogCiAvKgogICogU29tZSBhcmNoaXRlY3R1cmVzIHdhbnQgdG8gZW5zdXJlIHRoZXJlIGlzIG5vIGxvY2FsIGRhdGEgaW4gdGhlaXIKLSAqIHByZS1ib290IGVudmlyb25tZW50LCBzbyB0aGF0IGRhdGEgY2FuIGFyYml0YXJpbHkgcmVsb2NhdGVkICh2aWEKKyAqIHByZS1ib290IGVudmlyb25tZW50LCBzbyB0aGF0IGRhdGEgY2FuIGFyYml0cmFyaWx5IHJlbG9jYXRlZCAodmlhCiAgKiBHT1QgcmVmZXJlbmNlcykuICBUaGlzIGlzIGFjaGlldmVkIGJ5IGRlZmluaW5nIFNUQVRJQ19SV19EQVRBIHRvCiAgKiBiZSBudWxsLgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS1tYXBwZXIuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCmluZGV4IGUyNzY4ODMuLjMyYTQ0MjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCkBAIC0xOTcsNyArMTk3LDYgQEAKIHN0cnVjdCBkbV90YXJnZXRfY2FsbGJhY2tzIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJaW50ICgqY29uZ2VzdGVkX2ZuKSAoc3RydWN0IGRtX3RhcmdldF9jYWxsYmFja3MgKiwgaW50KTsKLQl2b2lkICgqdW5wbHVnX2ZuKShzdHJ1Y3QgZG1fdGFyZ2V0X2NhbGxiYWNrcyAqKTsKIH07CiAKIGludCBkbV9yZWdpc3Rlcl90YXJnZXQoc3RydWN0IHRhcmdldF90eXBlICp0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCmluZGV4IGFiOGRmYzAuLmQwODM5OWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaApAQCAtNDQyLDcgKzQ0Miw2IEBACiAJc3RydWN0IGRldl9hcmNoZGF0YQlhcmNoZGF0YTsKIAogCXN0cnVjdCBkZXZpY2Vfbm9kZQkqb2Zfbm9kZTsgLyogYXNzb2NpYXRlZCBkZXZpY2UgdHJlZSBub2RlICovCi0JY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfbWF0Y2g7IC8qIG1hdGNoaW5nIG9mX2RldmljZV9pZCBmcm9tIGRyaXZlciAqLwogCiAJZGV2X3QJCQlkZXZ0OwkvKiBkZXZfdCwgY3JlYXRlcyB0aGUgc3lzZnMgImRldiIgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWFlbmdpbmUuaCBiL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmgKaW5kZXggOWJlYmQ3Zi4uZWVlN2FkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbWFlbmdpbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtYWVuZ2luZS5oCkBAIC00MzQsNyArNDM0LDcgQEAKICAqCXplcm8gb3IgZXJyb3IgY29kZQogICogQGRldmljZV90eF9zdGF0dXM6IHBvbGwgZm9yIHRyYW5zYWN0aW9uIGNvbXBsZXRpb24sIHRoZSBvcHRpb25hbAogICoJdHhzdGF0ZSBwYXJhbWV0ZXIgY2FuIGJlIHN1cHBsaWVkIHdpdGggYSBwb2ludGVyIHRvIGdldCBhCi0gKglzdHJ1Y3Qgd2l0aCBhdXhpbGFyeSB0cmFuc2ZlciBzdGF0dXMgaW5mb3JtYXRpb24sIG90aGVyd2lzZSB0aGUgY2FsbAorICoJc3RydWN0IHdpdGggYXV4aWxpYXJ5IHRyYW5zZmVyIHN0YXR1cyBpbmZvcm1hdGlvbiwgb3RoZXJ3aXNlIHRoZSBjYWxsCiAgKgl3aWxsIGp1c3QgcmV0dXJuIGEgc2ltcGxlIHN0YXR1cyBjb2RlCiAgKiBAZGV2aWNlX2lzc3VlX3BlbmRpbmc6IHB1c2ggcGVuZGluZyB0cmFuc2FjdGlvbnMgdG8gaGFyZHdhcmUKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kcmJkLmggYi9pbmNsdWRlL2xpbnV4L2RyYmQuaAppbmRleCBkMThkNjczLi5jZWM0NjdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RyYmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RyYmQuaApAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgPHN5cy93YWl0Lmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAKLS8qIEFsdG91Z2ggdGhlIExpbnV4IHNvdXJjZSBjb2RlIG1ha2VzIGEgZGlmZmVyZW5jZSBiZXR3ZWVuCisvKiBBbHRob3VnaCB0aGUgTGludXggc291cmNlIGNvZGUgbWFrZXMgYSBkaWZmZXJlbmNlIGJldHdlZW4KICAgIGdlbmVyaWMgZW5kaWFubmVzcyBhbmQgdGhlIGJpdGZpZWxkcycgZW5kaWFubmVzcywgdGhlcmUgaXMgbm8KICAgIGFyY2hpdGVjdHVyZSBhcyBvZiBMaW51eC0yLjYuMjQtcmM0IHdoZXJlIHRoZSBiaXRmaWxlZHMnIGVuZGlhbm5lc3MKICAgIGRvZXMgbm90IG1hdGNoIHRoZSBnZW5lcmljIGVuZGlhbm5lc3MuICovCkBAIC0xODQsNyArMTg0LDcgQEAKIAkvKiBUaGVzZSB0ZW1wb3JhbCBzdGF0ZXMgYXJlIGFsbCB1c2VkIG9uIHRoZSB3YXkKIAkgKiBmcm9tID49IENfQ09OTkVDVEVEIHRvIFVuY29ubmVjdGVkLgogCSAqIFRoZSAnZGlzY29ubmVjdCByZWFzb24nIHN0YXRlcwotCSAqIEkgZG8gbm90IGFsbG93IHRvIGNoYW5nZSBiZXdlZW4gdGhlbS4gKi8KKwkgKiBJIGRvIG5vdCBhbGxvdyB0byBjaGFuZ2UgYmV0d2VlbiB0aGVtLiAqLwogCUNfVElNRU9VVCwKIAlDX0JST0tFTl9QSVBFLAogCUNfTkVUV09SS19GQUlMVVJFLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kcmJkX2xpbWl0cy5oIGIvaW5jbHVkZS9saW51eC9kcmJkX2xpbWl0cy5oCmluZGV4IGJiMjY0YTUuLjI0NmY1NzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZHJiZF9saW1pdHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RyYmRfbGltaXRzLmgKQEAgLTQzLDcgKzQzLDcgQEAKIAogLyogbmV0IHsgKi8KICAgLyogdGltZW91dCwgdW5pdCBjZW50aSBzZWNvbmRzCi0gICAqIG1vcmUgdGhhbiBvbmUgbWludXRlIHRpbWVvdXQgaXMgbm90IHVzZWZ1bGwgKi8KKyAgICogbW9yZSB0aGFuIG9uZSBtaW51dGUgdGltZW91dCBpcyBub3QgdXNlZnVsICovCiAjZGVmaW5lIERSQkRfVElNRU9VVF9NSU4gMQogI2RlZmluZSBEUkJEX1RJTUVPVVRfTUFYIDYwMAogI2RlZmluZSBEUkJEX1RJTUVPVVRfREVGIDYwICAgICAgIC8qIDYgc2Vjb25kcyAqLwpAQCAtNjgsNyArNjgsNyBAQAogI2RlZmluZSBEUkJEX01BWF9FUE9DSF9TSVpFX01BWCAyMDAwMAogI2RlZmluZSBEUkJEX01BWF9FUE9DSF9TSVpFX0RFRiAyMDQ4CiAKLSAgLyogSSBkb24ndCB0aGluayB0aGF0IGEgdGNwIHNlbmQgYnVmZmVyIG9mIG1vcmUgdGhhbiAxME0gaXMgdXNlZnVsbCAqLworICAvKiBJIGRvbid0IHRoaW5rIHRoYXQgYSB0Y3Agc2VuZCBidWZmZXIgb2YgbW9yZSB0aGFuIDEwTSBpcyB1c2VmdWwgKi8KICNkZWZpbmUgRFJCRF9TTkRCVUZfU0laRV9NSU4gIDAKICNkZWZpbmUgRFJCRF9TTkRCVUZfU0laRV9NQVggICgxMDw8MjApCiAjZGVmaW5lIERSQkRfU05EQlVGX1NJWkVfREVGICAwCkBAIC0xMDEsNyArMTAxLDcgQEAKICNkZWZpbmUgRFJCRF9SQVRFX01BWCAoNCA8PCAyMCkKICNkZWZpbmUgRFJCRF9SQVRFX0RFRiAyNTAgIC8qIGtiL3NlY29uZCAqLwogCi0gIC8qIGxlc3MgdGhhbiA3IHdvdWxkIGhpdCBwZXJmb3JtYW5jZSB1bm5lY2Nlc3NhcmlseS4KKyAgLyogbGVzcyB0aGFuIDcgd291bGQgaGl0IHBlcmZvcm1hbmNlIHVubmVjZXNzYXJpbHkuCiAgICAqIDM4MzMgaXMgdGhlIGxhcmdlc3QgcHJpbWUgdGhhdCBzdGlsbCBkb2VzIGZpdAogICAgKiBpbnRvIDY0IHNlY3RvcnMgb2YgYWN0aXZpdHkgbG9nICovCiAjZGVmaW5lIERSQkRfQUxfRVhURU5UU19NSU4gIDcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKaW5kZXggYzhmY2JkZC4uZGM4MGQ4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKKysrIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKQEAgLTYxNCw3ICs2MTQsNyBAQAogICogdmFsdWVzIG9mIGNvcnJlc3BvbmRpbmcgYml0cyBpbiBmZWF0dXJlc1tdLnJlcXVlc3RlZC4gQml0cyBpbiAucmVxdWVzdGVkCiAgKiBub3Qgc2V0IGluIC52YWxpZCBvciBub3QgY2hhbmdlYWJsZSBhcmUgaWdub3JlZC4KICAqCi0gKiBSZXR1cm5zICVFSU5WQUwgd2hlbiAudmFsaWQgY29udGFpbnMgdW5kZWZpbmVkIG9yIG5ldmVyLWNoYW5nYWJsZSBiaXRzCisgKiBSZXR1cm5zICVFSU5WQUwgd2hlbiAudmFsaWQgY29udGFpbnMgdW5kZWZpbmVkIG9yIG5ldmVyLWNoYW5nZWFibGUgYml0cwogICogb3Igc2l6ZSBpcyBub3QgZXF1YWwgdG8gcmVxdWlyZWQgbnVtYmVyIG9mIGZlYXR1cmVzIHdvcmRzICgzMi1iaXQgYmxvY2tzKS4KICAqIFJldHVybnMgPj0gMCBpZiByZXF1ZXN0IHdhcyBjb21wbGV0ZWQ7IGJpdHMgc2V0IGluIHRoZSB2YWx1ZSBtZWFuOgogICogICAlRVRIVE9PTF9GX1VOU1VQUE9SVEVEIC0gdGhlcmUgd2VyZSBiaXRzIHNldCBpbiAudmFsaWQgdGhhdCBhcmUgbm90CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oIGIvaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaAppbmRleCBmNjg1NmE1Li5mMzYyNzMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oCisrKyBiL2luY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogIGluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmggKCBFZmZpY2VudCBldmVudCBwb2xsaW5nIGltcGxlbWVudGF0aW9uICkKKyAqICBpbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oICggRWZmaWNpZW50IGV2ZW50IHBvbGxpbmcgaW1wbGVtZW50YXRpb24gKQogICogIENvcHlyaWdodCAoQykgMjAwMSwuLi4sMjAwNgkgRGF2aWRlIExpYmVuemkKICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXhwb3J0ZnMuaCBiL2luY2x1ZGUvbGludXgvZXhwb3J0ZnMuaAppbmRleCAzM2E0MmYyLi4zYTRjZWY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4cG9ydGZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHBvcnRmcy5oCkBAIC0xMjAsNyArMTIwLDcgQEAKICAqIGVuY29kZV9maDoKICAqICAgIEBlbmNvZGVfZmggc2hvdWxkIHN0b3JlIGluIHRoZSBmaWxlIGhhbmRsZSBmcmFnbWVudCBAZmggKHVzaW5nIGF0IG1vc3QKICAqICAgIEBtYXhfbGVuIGJ5dGVzKSBpbmZvcm1hdGlvbiB0aGF0IGNhbiBiZSB1c2VkIGJ5IEBkZWNvZGVfZmggdG8gcmVjb3ZlciB0aGUKLSAqICAgIGZpbGUgcmVmZXJlZCB0byBieSB0aGUgJnN0cnVjdCBkZW50cnkgQGRlLiAgSWYgdGhlIEBjb25uZWN0YWJsZSBmbGFnIGlzCisgKiAgICBmaWxlIHJlZmVycmVkIHRvIGJ5IHRoZSAmc3RydWN0IGRlbnRyeSBAZGUuICBJZiB0aGUgQGNvbm5lY3RhYmxlIGZsYWcgaXMKICAqICAgIHNldCwgdGhlIGVuY29kZV9maCgpIHNob3VsZCBzdG9yZSBzdWZmaWNpZW50IGluZm9ybWF0aW9uIHNvIHRoYXQgYSBnb29kCiAgKiAgICBhdHRlbXB0IGNhbiBiZSBtYWRlIHRvIGZpbmQgbm90IG9ubHkgdGhlIGZpbGUgYnV0IGFsc28gaXQncyBwbGFjZSBpbiB0aGUKICAqICAgIGZpbGVzeXN0ZW0uICAgVGhpcyB0eXBpY2FsbHkgbWVhbnMgc3RvcmluZyBhIHJlZmVyZW5jZSB0byBkZS0+ZF9wYXJlbnQgaW4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmIuaCBiL2luY2x1ZGUvbGludXgvZmIuaAppbmRleCBiMmEzNjM5Li42YTgyNzQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZiLmgKKysrIGIvaW5jbHVkZS9saW51eC9mYi5oCkBAIC01MzQsMTQgKzUzNCwxNCBAQAogI2RlZmluZSBGQl9FVkVOVF9HRVRfQ09OU09MRV9NQVAgICAgICAgIDB4MDcKIC8qICAgICAgQ09OU09MRS1TUEVDSUZJQzogc2V0IGNvbnNvbGUgdG8gZnJhbWVidWZmZXIgbWFwcGluZyAqLwogI2RlZmluZSBGQl9FVkVOVF9TRVRfQ09OU09MRV9NQVAgICAgICAgIDB4MDgKLS8qICAgICAgQSBoYXJkd2FyZSBkaXNwbGF5IGJsYW5rIGNoYW5nZSBvY2N1cmVkICovCisvKiAgICAgIEEgaGFyZHdhcmUgZGlzcGxheSBibGFuayBjaGFuZ2Ugb2NjdXJyZWQgKi8KICNkZWZpbmUgRkJfRVZFTlRfQkxBTksgICAgICAgICAgICAgICAgICAweDA5CiAvKiAgICAgIFByaXZhdGUgbW9kZWxpc3QgaXMgdG8gYmUgcmVwbGFjZWQgKi8KICNkZWZpbmUgRkJfRVZFTlRfTkVXX01PREVMSVNUICAgICAgICAgICAweDBBCiAvKglUaGUgcmVzb2x1dGlvbiBvZiB0aGUgcGFzc2VkIGluIGZiX2luZm8gYWJvdXQgdG8gY2hhbmdlIGFuZAogICAgICAgICBhbGwgdmMncyBzaG91bGQgYmUgY2hhbmdlZCAgICAgICAgICovCiAjZGVmaW5lIEZCX0VWRU5UX01PREVfQ0hBTkdFX0FMTAkweDBCCi0vKglBIHNvZnR3YXJlIGRpc3BsYXkgYmxhbmsgY2hhbmdlIG9jY3VyZWQgKi8KKy8qCUEgc29mdHdhcmUgZGlzcGxheSBibGFuayBjaGFuZ2Ugb2NjdXJyZWQgKi8KICNkZWZpbmUgRkJfRVZFTlRfQ09OQkxBTksgICAgICAgICAgICAgICAweDBDCiAvKiAgICAgIEdldCBkcmF3aW5nIHJlcXVpcmVtZW50cyAgICAgICAgKi8KICNkZWZpbmUgRkJfRVZFTlRfR0VUX1JFUSAgICAgICAgICAgICAgICAweDBECkBAIC04MDUsNyArODA1LDcgQEAKIC8qIEEgZHJpdmVyIG1heSBzZXQgdGhpcyBmbGFnIHRvIGluZGljYXRlIHRoYXQgaXQgZG9lcyB3YW50IGEgc2V0X3BhciB0byBiZQogICogY2FsbGVkIGV2ZXJ5IHRpbWUgd2hlbiBmYmNvbl9zd2l0Y2ggaXMgZXhlY3V0ZWQuIFRoZSBhZHZhbnRhZ2UgaXMgdGhhdCB3aXRoCiAgKiB0aGlzIGZsYWcgc2V0IHlvdSBjYW4gcmVhbGx5IGJlIHN1cmUgdGhhdCBzZXRfcGFyIGlzIGFsd2F5cyBjYWxsZWQgYmVmb3JlCi0gKiBhbnkgb2YgdGhlIGZ1bmN0aW9ucyBkZXBlbmRhbnQgb24gdGhlIGNvcnJlY3QgaGFyZHdhcmUgc3RhdGUgb3IgYWx0ZXJpbmcKKyAqIGFueSBvZiB0aGUgZnVuY3Rpb25zIGRlcGVuZGVudCBvbiB0aGUgY29ycmVjdCBoYXJkd2FyZSBzdGF0ZSBvciBhbHRlcmluZwogICogdGhhdCBzdGF0ZSwgZXZlbiBpZiB5b3UgYXJlIHVzaW5nIHNvbWUgYnJva2VuIFggcmVsZWFzZXMuIFRoZSBkaXNhZHZhbnRhZ2UKICAqIGlzIHRoYXQgaXQgaW50cm9kdWNlcyB1bndhbnRlZCBkZWxheXMgdG8gZXZlcnkgY29uc29sZSBzd2l0Y2ggaWYgc2V0X3BhcgogICogaXMgc2xvdy4gSXQgaXMgYSBnb29kIGlkZWEgdG8gdHJ5IHRoaXMgZmxhZyBpbiB0aGUgZHJpdmVycyBpbml0aWFsaXphdGlvbgpAQCAtODMyLDYgKzgzMiw3IEBACiAjZGVmaW5lIEZCSU5GT19DQU5fRk9SQ0VfT1VUUFVUICAgICAweDIwMDAwMAogCiBzdHJ1Y3QgZmJfaW5mbyB7CisJYXRvbWljX3QgY291bnQ7CiAJaW50IG5vZGU7CiAJaW50IGZsYWdzOwogCXN0cnVjdCBtdXRleCBsb2NrOwkJLyogTG9jayBmb3Igb3Blbi9yZWxlYXNlL2lvY3RsIGZ1bmNzICovCkBAIC04NzcsNyArODc4LDcgQEAKIAl2b2lkICpmYmNvbl9wYXI7ICAgICAgICAgICAgICAgIC8qIGZiY29uIHVzZS1vbmx5IHByaXZhdGUgYXJlYSAqLwogCS8qIEZyb20gaGVyZSBvbiBldmVyeXRoaW5nIGlzIGRldmljZSBkZXBlbmRlbnQgKi8KIAl2b2lkICpwYXI7Ci0JLyogd2UgbmVlZCB0aGUgUENJIG9yIHNpbWlsaWFyIGFwZXJ0dXJlIGJhc2Uvc2l6ZSBub3QKKwkvKiB3ZSBuZWVkIHRoZSBQQ0kgb3Igc2ltaWxhciBhcGVydHVyZSBiYXNlL3NpemUgbm90CiAJICAgc21lbV9zdGFydC9zaXplIGFzIHNtZW1fc3RhcnQgbWF5IGp1c3QgYmUgYW4gb2JqZWN0CiAJICAgYWxsb2NhdGVkIGluc2lkZSB0aGUgYXBlcnR1cmUgc28gbWF5IG5vdCBhY3R1YWxseSBvdmVybGFwICovCiAJc3RydWN0IGFwZXJ0dXJlc19zdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maXJld2lyZS1jZGV2LmggYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaAppbmRleCA1OWVhNDA2Li40ZmYwOTg4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaApAQCAtOTAwLDcgKzkwMCw3IEBACiAKIC8qKgogICogc3RydWN0IGZ3X2NkZXZfYWxsb2NhdGVfaXNvX3Jlc291cmNlIC0gKERlKWFsbG9jYXRlIGEgY2hhbm5lbCBvciBiYW5kd2lkdGgKLSAqIEBjbG9zdXJlOglQYXNzZWQgYmFjayB0byB1c2Vyc3BhY2UgaW4gY29ycmVwb25kaW5nIGlzbyByZXNvdXJjZSBldmVudHMKKyAqIEBjbG9zdXJlOglQYXNzZWQgYmFjayB0byB1c2Vyc3BhY2UgaW4gY29ycmVzcG9uZGluZyBpc28gcmVzb3VyY2UgZXZlbnRzCiAgKiBAY2hhbm5lbHM6CUlzb2Nocm9ub3VzIGNoYW5uZWxzIG9mIHdoaWNoIG9uZSBpcyB0byBiZSAoZGUpYWxsb2NhdGVkCiAgKiBAYmFuZHdpZHRoOglJc29jaHJvbm91cyBiYW5kd2lkdGggdW5pdHMgdG8gYmUgKGRlKWFsbG9jYXRlZAogICogQGhhbmRsZToJSGFuZGxlIHRvIHRoZSBhbGxvY2F0aW9uLCB3cml0dGVuIGJ5IHRoZSBrZXJuZWwgKG9ubHkgdmFsaWQgaW4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmxleF9hcnJheS5oIGIvaW5jbHVkZS9saW51eC9mbGV4X2FycmF5LmgKaW5kZXggNzBlNGVmYS4uZWJlYjJmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mbGV4X2FycmF5LmgKKysrIGIvaW5jbHVkZS9saW51eC9mbGV4X2FycmF5LmgKQEAgLTYxLDcgKzYxLDcgQEAKIHN0cnVjdCBmbGV4X2FycmF5ICpmbGV4X2FycmF5X2FsbG9jKGludCBlbGVtZW50X3NpemUsIHVuc2lnbmVkIGludCB0b3RhbCwKIAkJZ2ZwX3QgZmxhZ3MpOwogaW50IGZsZXhfYXJyYXlfcHJlYWxsb2Moc3RydWN0IGZsZXhfYXJyYXkgKmZhLCB1bnNpZ25lZCBpbnQgc3RhcnQsCi0JCXVuc2lnbmVkIGludCBlbmQsIGdmcF90IGZsYWdzKTsKKwkJdW5zaWduZWQgaW50IG5yX2VsZW1lbnRzLCBnZnBfdCBmbGFncyk7CiB2b2lkIGZsZXhfYXJyYXlfZnJlZShzdHJ1Y3QgZmxleF9hcnJheSAqZmEpOwogdm9pZCBmbGV4X2FycmF5X2ZyZWVfcGFydHMoc3RydWN0IGZsZXhfYXJyYXkgKmZhKTsKIGludCBmbGV4X2FycmF5X3B1dChzdHJ1Y3QgZmxleF9hcnJheSAqZmEsIHVuc2lnbmVkIGludCBlbGVtZW50X25yLCB2b2lkICpzcmMsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggMWI5NWFmMy4uY2RmOTQ5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMzU4LDcgKzM1OCw2IEBACiAjZGVmaW5lIEZTX0VYVEVOVF9GTAkJCTB4MDAwODAwMDAgLyogRXh0ZW50cyAqLwogI2RlZmluZSBGU19ESVJFQ1RJT19GTAkJCTB4MDAxMDAwMDAgLyogVXNlIGRpcmVjdCBpL28gKi8KICNkZWZpbmUgRlNfTk9DT1dfRkwJCQkweDAwODAwMDAwIC8qIERvIG5vdCBjb3cgZmlsZSAqLwotI2RlZmluZSBGU19DT1dfRkwJCQkweDAyMDAwMDAwIC8qIENvdyBmaWxlICovCiAjZGVmaW5lIEZTX1JFU0VSVkVEX0ZMCQkJMHg4MDAwMDAwMCAvKiByZXNlcnZlZCBmb3IgZXh0MiBsaWIgKi8KIAogI2RlZmluZSBGU19GTF9VU0VSX1ZJU0lCTEUJCTB4MDAwM0RGRkYgLyogVXNlciB2aXNpYmxlIGZsYWdzICovCkBAIC00NjUsNyArNDY0LDcgQEAKIAlzdHJ1Y3QgdGltZXNwZWMJaWFfY3RpbWU7CiAKIAkvKgotCSAqIE5vdCBhbiBhdHRyaWJ1dGUsIGJ1dCBhbiBhdXhpbGFyeSBpbmZvIGZvciBmaWxlc3lzdGVtcyB3YW50aW5nIHRvCisJICogTm90IGFuIGF0dHJpYnV0ZSwgYnV0IGFuIGF1eGlsaWFyeSBpbmZvIGZvciBmaWxlc3lzdGVtcyB3YW50aW5nIHRvCiAJICogaW1wbGVtZW50IGFuIGZ0cnVuY2F0ZSgpIGxpa2UgbWV0aG9kLiAgTk9URTogZmlsZXN5c3RlbSBzaG91bGQKIAkgKiBjaGVjayBmb3IgKGlhX3ZhbGlkICYgQVRUUl9GSUxFKSwgYW5kIG5vdCBmb3IgKGlhX2ZpbGUgIT0gTlVMTCkuCiAJICovCkBAIC02NDksNyArNjQ4LDcgQEAKIH0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2YobG9uZykpKSk7CiAJLyoKIAkgKiBPbiBtb3N0IGFyY2hpdGVjdHVyZXMgdGhhdCBhbGlnbm1lbnQgaXMgYWxyZWFkeSB0aGUgY2FzZTsgYnV0Ci0JICogbXVzdCBiZSBlbmZvcmNlZCBoZXJlIGZvciBDUklTLCB0byBsZXQgdGhlIGxlYXN0IHNpZ25maWNhbnQgYml0CisJICogbXVzdCBiZSBlbmZvcmNlZCBoZXJlIGZvciBDUklTLCB0byBsZXQgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdAogCSAqIG9mIHN0cnVjdCBwYWdlJ3MgIm1hcHBpbmciIHBvaW50ZXIgYmUgdXNlZCBmb3IgUEFHRV9NQVBQSU5HX0FOT04uCiAJICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNjYWNoZS1jYWNoZS5oIGIvaW5jbHVkZS9saW51eC9mc2NhY2hlLWNhY2hlLmgKaW5kZXggYjg1ODFjMC4uNzY0MjdlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mc2NhY2hlLWNhY2hlLmgKKysrIGIvaW5jbHVkZS9saW51eC9mc2NhY2hlLWNhY2hlLmgKQEAgLTIzNiw3ICsyMzYsNyBAQAogCS8qIHVucGluIGFuIG9iamVjdCBpbiB0aGUgY2FjaGUgKi8KIAl2b2lkICgqdW5waW5fb2JqZWN0KShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCk7CiAKLQkvKiBzdG9yZSB0aGUgdXBkYXRlZCBhdXhpbGxpYXJ5IGRhdGEgb24gYW4gb2JqZWN0ICovCisJLyogc3RvcmUgdGhlIHVwZGF0ZWQgYXV4aWxpYXJ5IGRhdGEgb24gYW4gb2JqZWN0ICovCiAJdm9pZCAoKnVwZGF0ZV9vYmplY3QpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KTsKIAogCS8qIGRpc2NhcmQgdGhlIHJlc291cmNlcyBwaW5uZWQgYnkgYW4gb2JqZWN0IGFuZCBlZmZlY3QgcmV0aXJlbWVudCBpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc2NhY2hlLmggYi9pbmNsdWRlL2xpbnV4L2ZzY2FjaGUuaAppbmRleCBlYzBkYWQ1Li43YzRkNzJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzY2FjaGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzY2FjaGUuaApAQCAtMTAyLDkgKzEwMiw5IEBACiAJICovCiAJdm9pZCAoKmdldF9hdHRyKShjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwgdWludDY0X3QgKnNpemUpOwogCi0JLyogZ2V0IHRoZSBhdXhpbGxpYXJ5IGRhdGEgZnJvbSBuZXRmcyBkYXRhCisJLyogZ2V0IHRoZSBhdXhpbGlhcnkgZGF0YSBmcm9tIG5ldGZzIGRhdGEKIAkgKiAtIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGFic2VudCBpZiB0aGUgaW5kZXggY2FycmllcyBubyBzdGF0ZSBkYXRhCi0JICogLSBzaG91bGQgc3RvcmUgdGhlIGF1eGlsbGlhcnkgZGF0YSBpbiB0aGUgYnVmZmVyCisJICogLSBzaG91bGQgc3RvcmUgdGhlIGF1eGlsaWFyeSBkYXRhIGluIHRoZSBidWZmZXIKIAkgKiAtIHNob3VsZCByZXR1cm4gdGhlIGFtb3VudCBvZiBhbW91bnQgc3RvcmVkCiAJICogLSBub3QgcGVybWl0dGVkIHRvIHJldHVybiBhbiBlcnJvcgogCSAqIC0gdGhlIG5ldGZzIGRhdGEgZnJvbSB0aGUgY29va2llIGJlaW5nIHVzZWQgYXMgdGhlIHNvdXJjZSBpcwpAQCAtMTE3LDcgKzExNyw3IEBACiAJLyogY29uc3VsdCB0aGUgbmV0ZnMgYWJvdXQgdGhlIHN0YXRlIG9mIGFuIG9iamVjdAogCSAqIC0gdGhpcyBmdW5jdGlvbiBjYW4gYmUgYWJzZW50IGlmIHRoZSBpbmRleCBjYXJyaWVzIG5vIHN0YXRlIGRhdGEKIAkgKiAtIHRoZSBuZXRmcyBkYXRhIGZyb20gdGhlIGNvb2tpZSBiZWluZyB1c2VkIGFzIHRoZSB0YXJnZXQgaXMKLQkgKiAgIHByZXNlbnRlZCwgYXMgaXMgdGhlIGF1eGlsbGlhcnkgZGF0YQorCSAqICAgcHJlc2VudGVkLCBhcyBpcyB0aGUgYXV4aWxpYXJ5IGRhdGEKIAkgKi8KIAllbnVtIGZzY2FjaGVfY2hlY2thdXggKCpjaGVja19hdXgpKHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAogCQkJCQkgICBjb25zdCB2b2lkICpkYXRhLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmgKaW5kZXggMjJiMzJhZi4uYjVhNTUwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oCkBAIC0zNyw2ICszNyw3IEBACiAJdW5zaWduZWQgY2hhcgkJZmxhZ3M7CiAJdW5zaWduZWQgY2hhcgkJcHJlZW1wdF9jb3VudDsKIAlpbnQJCQlwaWQ7CisJaW50CQkJcGFkZGluZzsKIH07CiAKICNkZWZpbmUgRlRSQUNFX01BWF9FVkVOVAkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oCmluZGV4IGJmYjhmOTMuLjU2ZDhmYzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZnAuaApAQCAtMzUzLDYgKzM1Myw4IEBACiAKIHZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0KHNpemVfdCBzaXplLCBnZnBfdCBnZnBfbWFzayk7CiB2b2lkIGZyZWVfcGFnZXNfZXhhY3Qodm9pZCAqdmlydCwgc2l6ZV90IHNpemUpOworLyogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBhbGxvY19wYWdlc19leGFjdF9ub2RlICEhISAqLwordm9pZCAqYWxsb2NfcGFnZXNfZXhhY3RfbmlkKGludCBuaWQsIHNpemVfdCBzaXplLCBnZnBfdCBnZnBfbWFzayk7CiAKICNkZWZpbmUgX19nZXRfZnJlZV9wYWdlKGdmcF9tYXNrKSBcCiAJCV9fZ2V0X2ZyZWVfcGFnZXMoKGdmcF9tYXNrKSwgMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGlkLmggYi9pbmNsdWRlL2xpbnV4L2hpZC5oCmluZGV4IGJiMjliYjEuLjQyZjdlMmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGlkLmgKKysrIGIvaW5jbHVkZS9saW51eC9oaWQuaApAQCAtNzk5LDcgKzc5OSw3IEBACiAgKgogICogQ2FsbCB0aGlzIGluIHByb2JlIGZ1bmN0aW9uICphZnRlciogaGlkX3BhcnNlLiBUaGlzIHdpbGwgc2V0dXAgSFcgYnVmZmVycwogICogYW5kIHN0YXJ0IHRoZSBkZXZpY2UgKGlmIG5vdCBkZWZmZXJlZCB0byBkZXZpY2Ugb3BlbikuIGhpZF9od19zdG9wIG11c3QgYmUKLSAqIGNhbGxlZCBpZiB0aGlzIHdhcyBzdWNjZXNzZnVsbC4KKyAqIGNhbGxlZCBpZiB0aGlzIHdhcyBzdWNjZXNzZnVsLgogICovCiBzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgaGlkX2h3X3N0YXJ0KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LAogCQl1bnNpZ25lZCBpbnQgY29ubmVjdF9tYXNrKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ocF9zZGMuaCBiL2luY2x1ZGUvbGludXgvaHBfc2RjLmgKaW5kZXggOWRiM2Q0NS4uZDM5Mjk3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ocF9zZGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hwX3NkYy5oCkBAIC0xMDEsNyArMTAxLDcgQEAKICNkZWZpbmUgSFBfU0RDX1NUQVRVU19SRUcJMHg0MAkvKiBEYXRhIGZyb20gYW4gaTgwNDIgcmVnaXN0ZXIgKi8KICNkZWZpbmUgSFBfU0RDX1NUQVRVU19ISUxDTUQgICAgMHg1MAkvKiBDb21tYW5kIGZyb20gSElMIE1MQyAqLwogI2RlZmluZSBIUF9TRENfU1RBVFVTX0hJTERBVEEgICAweDYwCS8qIERhdGEgZnJvbSBISUwgTUxDICovCi0jZGVmaW5lIEhQX1NEQ19TVEFUVVNfUFVQCTB4NzAJLyogU3VjZXNzZnVsIHBvd2VyLXVwIHNlbGYgdGVzdCAqLworI2RlZmluZSBIUF9TRENfU1RBVFVTX1BVUAkweDcwCS8qIFN1Y2Nlc3NmdWwgcG93ZXItdXAgc2VsZiB0ZXN0ICovCiAjZGVmaW5lIEhQX1NEQ19TVEFUVVNfS0NPT0tFRAkweDgwCS8qIEtleSBmcm9tIGNvb2tlZCBrYmQgKi8KICNkZWZpbmUgSFBfU0RDX1NUQVRVU19LUlBHCTB4YzAJLyogS2V5IGZyb20gUmVwZWF0IEdlbiAqLwogI2RlZmluZSBIUF9TRENfU1RBVFVTX0tNT0RfU1VQCTB4MTAJLyogU2hpZnQga2V5IGlzIHVwICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaCBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oCmluZGV4IGRmMjljOGYuLjg4NDdjOGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oCisrKyBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oCkBAIC0xMTcsNyArMTE3LDcgQEAKIAkJCQkJIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJCQkgbG9uZyBhZGp1c3RfbmV4dCkKIHsKLQlpZiAoIXZtYS0+YW5vbl92bWEgfHwgdm1hLT52bV9vcHMgfHwgdm1hLT52bV9maWxlKQorCWlmICghdm1hLT5hbm9uX3ZtYSB8fCB2bWEtPnZtX29wcykKIAkJcmV0dXJuOwogCV9fdm1hX2FkanVzdF90cmFuc19odWdlKHZtYSwgc3RhcnQsIGVuZCwgYWRqdXN0X25leHQpOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMm8uaCBiL2luY2x1ZGUvbGludXgvaTJvLmgKaW5kZXggOWU3YTEyZC4uYTZkZWVmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMm8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyby5oCkBAIC04MjYsNyArODI2LDcgQEAKICAqCUBjOiBJMk8gY29udHJvbGxlcgogICoKICAqCVRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gZ2V0IGEgbWVzc2FnZSBmcmFtZS4gSWYgbm8gbWVzc2FnZSBmcmFtZSBpcwotICoJYXZhaWxhYmxlIGRvIG5vdCB3YWl0IHVudGlsIG9uZSBpcyBhdmFpbGFiZSAoc2VlIGFsc28gaTJvX21zZ19nZXRfd2FpdCkuCisgKglhdmFpbGFibGUgZG8gbm90IHdhaXQgdW50aWwgb25lIGlzIGF2YWlsYWJsZSAoc2VlIGFsc28gaTJvX21zZ19nZXRfd2FpdCkuCiAgKglUaGUgcmV0dXJuZWQgcG9pbnRlciB0byB0aGUgbWVzc2FnZSBmcmFtZSBpcyBub3QgaW4gSS9PIG1lbW9yeSwgaXQgaXMKICAqCWFsbG9jYXRlZCBmcm9tIGEgbWVtcG9vbC4gQnV0IGJlY2F1c2UgYSBNRkEgaXMgYWxsb2NhdGVkIGZyb20gdGhlCiAgKgljb250cm9sbGVyIHRvbyBpdCBpcyBndWFyYW50ZWVkIHRoYXQgaTJvX21zZ19wb3N0KCkgd2lsbCBuZXZlciBmYWlsLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCmluZGV4IGYzYTc3OTQuLjc3MWQ2ZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5wdXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKQEAgLTE2Nyw2ICsxNjcsNyBAQAogI2RlZmluZSBTWU5fUkVQT1JUCQkwCiAjZGVmaW5lIFNZTl9DT05GSUcJCTEKICNkZWZpbmUgU1lOX01UX1JFUE9SVAkJMgorI2RlZmluZSBTWU5fRFJPUFBFRAkJMwogCiAvKgogICogS2V5cyBhbmQgYnV0dG9ucwpAQCAtNTUzLDggKzU1NCw4IEBACiAjZGVmaW5lIEtFWV9EVkQJCQkweDE4NQkvKiBNZWRpYSBTZWxlY3QgRFZEICovCiAjZGVmaW5lIEtFWV9BVVgJCQkweDE4NgogI2RlZmluZSBLRVlfTVAzCQkJMHgxODcKLSNkZWZpbmUgS0VZX0FVRElPCQkweDE4OAotI2RlZmluZSBLRVlfVklERU8JCTB4MTg5CisjZGVmaW5lIEtFWV9BVURJTwkJMHgxODgJLyogQUwgQXVkaW8gQnJvd3NlciAqLworI2RlZmluZSBLRVlfVklERU8JCTB4MTg5CS8qIEFMIE1vdmllIEJyb3dzZXIgKi8KICNkZWZpbmUgS0VZX0RJUkVDVE9SWQkJMHgxOGEKICNkZWZpbmUgS0VZX0xJU1QJCTB4MThiCiAjZGVmaW5lIEtFWV9NRU1PCQkweDE4YwkvKiBNZWRpYSBTZWxlY3QgTWVzc2FnZXMgKi8KQEAgLTYwMyw4ICs2MDQsOSBAQAogI2RlZmluZSBLRVlfRlJBTUVGT1JXQVJECTB4MWI1CiAjZGVmaW5lIEtFWV9DT05URVhUX01FTlUJMHgxYjYJLyogR2VuRGVzYyAtIHN5c3RlbSBjb250ZXh0IG1lbnUgKi8KICNkZWZpbmUgS0VZX01FRElBX1JFUEVBVAkweDFiNwkvKiBDb25zdW1lciAtIHRyYW5zcG9ydCBjb250cm9sICovCi0jZGVmaW5lIEtFWV8xMENIQU5ORUxTVVAgICAgICAgIDB4MWI4ICAgLyogMTAgY2hhbm5lbHMgdXAgKDEwKykgKi8KLSNkZWZpbmUgS0VZXzEwQ0hBTk5FTFNET1dOICAgICAgMHgxYjkgICAvKiAxMCBjaGFubmVscyBkb3duICgxMC0pICovCisjZGVmaW5lIEtFWV8xMENIQU5ORUxTVVAJMHgxYjgJLyogMTAgY2hhbm5lbHMgdXAgKDEwKykgKi8KKyNkZWZpbmUgS0VZXzEwQ0hBTk5FTFNET1dOCTB4MWI5CS8qIDEwIGNoYW5uZWxzIGRvd24gKDEwLSkgKi8KKyNkZWZpbmUgS0VZX0lNQUdFUwkJMHgxYmEJLyogQUwgSW1hZ2UgQnJvd3NlciAqLwogCiAjZGVmaW5lIEtFWV9ERUxfRU9MCQkweDFjMAogI2RlZmluZSBLRVlfREVMX0VPUwkJMHgxYzEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5wdXQvbXQuaCBiL2luY2x1ZGUvbGludXgvaW5wdXQvbXQuaAppbmRleCBiM2FjMDZhLi4zMThiYjgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lucHV0L210LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnB1dC9tdC5oCkBAIC00OCw2ICs0OCwxMiBAQAogCWlucHV0X2V2ZW50KGRldiwgRVZfQUJTLCBBQlNfTVRfU0xPVCwgc2xvdCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpbnB1dF9pc19tdF9heGlzKGludCBheGlzKQoreworCXJldHVybiBheGlzID09IEFCU19NVF9TTE9UIHx8CisJCShheGlzID49IEFCU19NVF9GSVJTVCAmJiBheGlzIDw9IEFCU19NVF9MQVNUKTsKK30KKwogdm9pZCBpbnB1dF9tdF9yZXBvcnRfc2xvdF9zdGF0ZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsCiAJCQkJdW5zaWduZWQgaW50IHRvb2xfdHlwZSwgYm9vbCBhY3RpdmUpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAppbmRleCA5NDNjOWI1Li5iZWEwYWM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKQEAgLTk4LDcgKzk4LDcgQEAKICAqIEBuZXh0Oglwb2ludGVyIHRvIHRoZSBuZXh0IGlycWFjdGlvbiBmb3Igc2hhcmVkIGludGVycnVwdHMKICAqIEBpcnE6CWludGVycnVwdCBudW1iZXIKICAqIEBkaXI6CXBvaW50ZXIgdG8gdGhlIHByb2MvaXJxL05OL25hbWUgZW50cnkKLSAqIEB0aHJlYWRfZm46CWludGVydXB0IGhhbmRsZXIgZnVuY3Rpb24gZm9yIHRocmVhZGVkIGludGVycnVwdHMKKyAqIEB0aHJlYWRfZm46CWludGVycnVwdCBoYW5kbGVyIGZ1bmN0aW9uIGZvciB0aHJlYWRlZCBpbnRlcnJ1cHRzCiAgKiBAdGhyZWFkOgl0aHJlYWQgcG9pbnRlciBmb3IgdGhyZWFkZWQgaW50ZXJydXB0cwogICogQHRocmVhZF9mbGFnczoJZmxhZ3MgcmVsYXRlZCB0byBAdGhyZWFkCiAgKiBAdGhyZWFkX21hc2s6CWJpdG1hc2sgZm9yIGtlZXBpbmcgdHJhY2sgb2YgQHRocmVhZCBhY3Rpdml0eQpAQCAtNDg0LDcgKzQ4NCw3IEBACiAgICBQcm9wZXJ0aWVzOgogICAgKiBJZiB0YXNrbGV0X3NjaGVkdWxlKCkgaXMgY2FsbGVkLCB0aGVuIHRhc2tsZXQgaXMgZ3VhcmFudGVlZAogICAgICB0byBiZSBleGVjdXRlZCBvbiBzb21lIGNwdSBhdCBsZWFzdCBvbmNlIGFmdGVyIHRoaXMuCi0gICAqIElmIHRoZSB0YXNrbGV0IGlzIGFscmVhZHkgc2NoZWR1bGVkLCBidXQgaXRzIGV4Y2VjdXRpb24gaXMgc3RpbGwgbm90CisgICAqIElmIHRoZSB0YXNrbGV0IGlzIGFscmVhZHkgc2NoZWR1bGVkLCBidXQgaXRzIGV4ZWN1dGlvbiBpcyBzdGlsbCBub3QKICAgICAgc3RhcnRlZCwgaXQgd2lsbCBiZSBleGVjdXRlZCBvbmx5IG9uY2UuCiAgICAqIElmIHRoaXMgdGFza2xldCBpcyBhbHJlYWR5IHJ1bm5pbmcgb24gYW5vdGhlciBDUFUgKG9yIHNjaGVkdWxlIGlzIGNhbGxlZAogICAgICBmcm9tIHRhc2tsZXQgaXRzZWxmKSwgaXQgaXMgcmVzY2hlZHVsZWQgZm9yIGxhdGVyLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcG1pLmggYi9pbmNsdWRlL2xpbnV4L2lwbWkuaAppbmRleCAwNDVmMmYyLi5jYTg1Y2Y4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lwbWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lwbWkuaApAQCAtMTExLDcgKzExMSw3IEBACiAgKiBBIExBTiBBZGRyZXNzLiAgVGhpcyBpcyBhbiBhZGRyZXNzIHRvL2Zyb20gYSBMQU4gaW50ZXJmYWNlIGJyaWRnZWQKICAqIGJ5IHRoZSBCTUMsIG5vdCBhbiBhZGRyZXNzIGFjdHVhbGx5IG91dCBvbiB0aGUgTEFOLgogICoKLSAqIEEgY29uY2lvdXMgZGVjaXNpb24gd2FzIG1hZGUgaGVyZSB0byBkZXZpYXRlIHNsaWdodGx5IGZyb20gdGhlIElQTUkKKyAqIEEgY29uc2Npb3VzIGRlY2lzaW9uIHdhcyBtYWRlIGhlcmUgdG8gZGV2aWF0ZSBzbGlnaHRseSBmcm9tIHRoZSBJUE1JCiAgKiBzcGVjLiAgV2UgZG8gbm90IHVzZSBycVNXSUQgYW5kIHJzU1dJRCBsaWtlIGl0IHNob3dzIGluIHRoZQogICogbWVzc2FnZS4gIEluc3RlYWQsIHdlIHVzZSByZW1vdGVfU1dJRCBhbmQgbG9jYWxfU1dJRC4gIFRoaXMgbWVhbnMKICAqIHRoYXQgYW55IG1lc3NhZ2UgKGEgcmVxdWVzdCBvciByZXNwb25zZSkgZnJvbSBhbm90aGVyIGRldmljZSB3aWxsCkBAIC0yNTksNyArMjU5LDcgQEAKIAl2b2lkICgqZG9uZSkoc3RydWN0IGlwbWlfcmVjdl9tc2cgKm1zZyk7CiAKIAkvKiBQbGFjZS1ob2xkZXIgZm9yIHRoZSBkYXRhLCBkb24ndCBtYWtlIGFueSBhc3N1bXB0aW9ucyBhYm91dAotCSAgIHRoZSBzaXplIG9yIGV4aXN0YW5jZSBvZiB0aGlzLCBzaW5jZSBpdCBtYXkgY2hhbmdlLiAqLworCSAgIHRoZSBzaXplIG9yIGV4aXN0ZW5jZSBvZiB0aGlzLCBzaW5jZSBpdCBtYXkgY2hhbmdlLiAqLwogCXVuc2lnbmVkIGNoYXIgICBtc2dfZGF0YVtJUE1JX01BWF9NU0dfTEVOR1RIXTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXNkbi9oZGxjLmggYi9pbmNsdWRlL2xpbnV4L2lzZG4vaGRsYy5oCmluZGV4IDRiM2VjYzQuLjk2NTIxMzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXNkbi9oZGxjLmgKKysrIGIvaW5jbHVkZS9saW51eC9pc2RuL2hkbGMuaApAQCAtMiw3ICsyLDcgQEAKICAqIGhkbGMuaCAgLS0gIEdlbmVyYWwgcHVycG9zZSBJU0ROIEhETEMgZGVjb2Rlci4KICAqCiAgKiBJbXBsZW1lbnRhdGlvbiBvZiBhIEhETEMgZGVjb2Rlci9lbmNvZGVyIGluIHNvZnR3YXJlLgotICogTmVjY2Vzc2FyeSBiZWNhdXNlIHNvbWUgSVNETiBkZXZpY2VzIGRvbid0IGhhdmUgSERMQworICogTmVjZXNzYXJ5IGJlY2F1c2Ugc29tZSBJU0ROIGRldmljZXMgZG9uJ3QgaGF2ZSBIRExDCiAgKiBjb250cm9sbGVycy4KICAqCiAgKiBDb3B5cmlnaHQgKEMpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2l4anVzZXIuaCBiL2luY2x1ZGUvbGludXgvaXhqdXNlci5oCmluZGV4IDg4YjQ1ODkuLjk0YWI1ZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXhqdXNlci5oCisrKyBiL2luY2x1ZGUvbGludXgvaXhqdXNlci5oCkBAIC01MCw3ICs1MCw3IEBACiAqIElPQ1RMJ3MgdXNlZCBmb3IgdGhlIFF1aWNrbmV0IFRlbGVwaG9ueSBDYXJkcwogKgogKiBJZiB5b3UgdXNlIHRoZSBJWEpDVExfVEVTVFJBTSBjb21tYW5kLCB0aGUgY2FyZCBtdXN0IGJlIHBvd2VyIGN5Y2xlZCB0bwotKiByZXNldCB0aGUgU1JBTSB2YWx1ZXMgYmVmb3JlIGZ1dGhlciB1c2UuCisqIHJlc2V0IHRoZSBTUkFNIHZhbHVlcyBiZWZvcmUgZnVydGhlciB1c2UuCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvamlmZmllcy5oIGIvaW5jbHVkZS9saW51eC9qaWZmaWVzLmgKaW5kZXggOTIyYWEzMS4uZjk3NjcyYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qaWZmaWVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9qaWZmaWVzLmgKQEAgLTQyLDcgKzQyLDcgQEAKIC8qIExBVENIIGlzIHVzZWQgaW4gdGhlIGludGVydmFsIHRpbWVyIGFuZCBmdGFwZSBzZXR1cC4gKi8KICNkZWZpbmUgTEFUQ0ggICgoQ0xPQ0tfVElDS19SQVRFICsgSFovMikgLyBIWikJLyogRm9yIGRpdmlkZXIgKi8KIAotLyogU3VwcG9zZSB3ZSB3YW50IHRvIGRldmlkZSB0d28gbnVtYmVycyBOT00gYW5kIERFTjogTk9NL0RFTiwgdGhlbiB3ZSBjYW4KKy8qIFN1cHBvc2Ugd2Ugd2FudCB0byBkaXZpZGUgdHdvIG51bWJlcnMgTk9NIGFuZCBERU46IE5PTS9ERU4sIHRoZW4gd2UgY2FuCiAgKiBpbXByb3ZlIGFjY3VyYWN5IGJ5IHNoaWZ0aW5nIExTSCBiaXRzLCBoZW5jZSBjYWxjdWxhdGluZzoKICAqICAgICAoTk9NIDw8IExTSCkgLyBERU4KICAqIFRoaXMgaG93ZXZlciBtZWFucyB0cm91YmxlIGZvciBsYXJnZSBOT00sIGJlY2F1c2UgKE5PTSA8PCBMU0gpIG1heSBubwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdGltZS5oIGIvaW5jbHVkZS9saW51eC9rdGltZS5oCmluZGV4IGUxY2VhYTkuLjYwM2JlYzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3RpbWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2t0aW1lLmgKQEAgLTM1LDcgKzM1LDcgQEAKICAqCiAgKiBPbiAzMi1iaXQgQ1BVcyBhbiBvcHRpbWl6ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRpbWVzcGVjIHN0cnVjdHVyZQogICogaXMgdXNlZCB0byBhdm9pZCBleHBlbnNpdmUgY29udmVyc2lvbnMgZnJvbSBhbmQgdG8gdGltZXNwZWNzLiBUaGUKLSAqIGVuZGlhbi1hd2FyZSBvcmRlciBvZiB0aGUgdHYgc3RydWN0IG1lbWJlcnMgaXMgY2hvb3NlbiB0byBhbGxvdworICogZW5kaWFuLWF3YXJlIG9yZGVyIG9mIHRoZSB0diBzdHJ1Y3QgbWVtYmVycyBpcyBjaG9zZW4gdG8gYWxsb3cKICAqIG1hdGhlbWF0aWNhbCBvcGVyYXRpb25zIG9uIHRoZSB0djY0IG1lbWJlciBvZiB0aGUgdW5pb24gdG9vLCB3aGljaAogICogZm9yIGNlcnRhaW4gb3BlcmF0aW9ucyBwcm9kdWNlcyBiZXR0ZXIgY29kZS4KICAqCkBAIC0xNTgsNyArMTU4LDcgQEAKICAqIEBsaHM6CW1pbnVlbmQKICAqIEByaHM6CXN1YnRyYWhlbmQKICAqCi0gKiBSZXR1cm5zIHRoZSByZW1haW5kZXIgb2YgdGhlIHN1YnN0cmFjdGlvbgorICogUmV0dXJucyB0aGUgcmVtYWluZGVyIG9mIHRoZSBzdWJ0cmFjdGlvbgogICovCiBzdGF0aWMgaW5saW5lIGt0aW1lX3Qga3RpbWVfc3ViKGNvbnN0IGt0aW1lX3QgbGhzLCBjb25zdCBrdGltZV90IHJocykKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGVkLWxtMzUzMC5oIGIvaW5jbHVkZS9saW51eC9sZWQtbG0zNTMwLmgKaW5kZXggYmI2OWQyMC4uNTg1OTJmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sZWQtbG0zNTMwLmgKKysrIGIvaW5jbHVkZS9saW51eC9sZWQtbG0zNTMwLmgKQEAgLTQxLDcgKzQxLDcgQEAKICNkZWZpbmUgTE0zNTMwX1JBTVBfVElNRV84cwkJKDcpCiAKIC8qIEFMUyBSZXNpc3RvciBTZWxlY3QgKi8KLSNkZWZpbmUgTE0zNTMwX0FMU19JTVBEX1oJCSgweDAwKSAvKiBBTFMgSW1wZWRlbmNlICovCisjZGVmaW5lIExNMzUzMF9BTFNfSU1QRF9aCQkoMHgwMCkgLyogQUxTIEltcGVkYW5jZSAqLwogI2RlZmluZSBMTTM1MzBfQUxTX0lNUERfMTNfNTNrT2htCSgweDAxKQogI2RlZmluZSBMTTM1MzBfQUxTX0lNUERfOV8wMWtPaG0JKDB4MDIpCiAjZGVmaW5lIExNMzUzMF9BTFNfSU1QRF81XzQxa09obQkoMHgwMykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGliYXRhLmggYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCmluZGV4IGM3MWY0NjkuLjA0ZjMyYTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGliYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaApAQCAtMTM3LDggKzEzNyw2IEBACiAJQVRBX0RGTEFHX0FDUElfUEVORElORwk9ICgxIDw8IDUpLCAvKiBBQ1BJIHJlc3VtZSBhY3Rpb24gcGVuZGluZyAqLwogCUFUQV9ERkxBR19BQ1BJX0ZBSUxFRAk9ICgxIDw8IDYpLCAvKiBBQ1BJIG9uIGRldmNmZyBoYXMgZmFpbGVkICovCiAJQVRBX0RGTEFHX0FOCQk9ICgxIDw8IDcpLCAvKiBBTiBjb25maWd1cmVkICovCi0JQVRBX0RGTEFHX0hJUE0JCT0gKDEgPDwgOCksIC8qIGRldmljZSBzdXBwb3J0cyBISVBNICovCi0JQVRBX0RGTEFHX0RJUE0JCT0gKDEgPDwgOSksIC8qIGRldmljZSBzdXBwb3J0cyBESVBNICovCiAJQVRBX0RGTEFHX0RNQURJUgk9ICgxIDw8IDEwKSwgLyogZGV2aWNlIHJlcXVpcmVzIERNQURJUiAqLwogCUFUQV9ERkxBR19DRkdfTUFTSwk9ICgxIDw8IDEyKSAtIDEsCiAKQEAgLTE5OCw2ICsxOTYsNyBAQAogCQkJCQkgICAgICAqIG1hbmFnZW1lbnQgKi8KIAlBVEFfRkxBR19TV19BQ1RJVklUWQk9ICgxIDw8IDIyKSwgLyogZHJpdmVyIHN1cHBvcnRzIHN3IGFjdGl2aXR5CiAJCQkJCSAgICAgICogbGVkICovCisJQVRBX0ZMQUdfTk9fRElQTQk9ICgxIDw8IDIzKSwgLyogaG9zdCBub3QgaGFwcHkgd2l0aCBESVBNICovCiAKIAkvKiBiaXRzIDI0OjMxIG9mIGFwLT5mbGFncyBhcmUgcmVzZXJ2ZWQgZm9yIExMRCBzcGVjaWZpYyBmbGFncyAqLwogCkBAIC0zNjQsNyArMzYzLDcgQEAKIAlBVEFfRUhfQ01EX1RJTUVPVVRfVEFCTEVfU0laRSA9IDYsCiAKIAkvKiBIb3JrYWdlIHR5cGVzLiBNYXkgYmUgc2V0IGJ5IGxpYmF0YSBvciBjb250cm9sbGVyIG9uIGRyaXZlcwotCSAgIChzb21lIGhvcmthZ2UgbWF5IGJlIGRyaXZlL2NvbnRyb2xsZXIgcGFpciBkZXBlbmRhbnQgKi8KKwkgICAoc29tZSBob3JrYWdlIG1heSBiZSBkcml2ZS9jb250cm9sbGVyIHBhaXIgZGVwZW5kZW50ICovCiAKIAlBVEFfSE9SS0FHRV9ESUFHTk9TVElDCT0gKDEgPDwgMCksCS8qIEZhaWxlZCBib290IGRpYWcgKi8KIAlBVEFfSE9SS0FHRV9OT0RNQQk9ICgxIDw8IDEpLAkvKiBETUEgcHJvYmxlbXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGlzdF9ibC5oIGIvaW5jbHVkZS9saW51eC9saXN0X2JsLmgKaW5kZXggNWJhZDE3ZC4uMzFmOWQ3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saXN0X2JsLmgKKysrIGIvaW5jbHVkZS9saW51eC9saXN0X2JsLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9MSU5VWF9MSVNUX0JMX0gKIAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRfc3BpbmxvY2suaD4KIAogLyoKICAqIFNwZWNpYWwgdmVyc2lvbiBvZiBsaXN0cywgd2hlcmUgaGVhZCBvZiB0aGUgbGlzdCBoYXMgYSBsb2NrIGluIHRoZSBsb3dlc3QKQEAgLTExNCw2ICsxMTUsMTYgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBobGlzdF9ibF9sb2NrKHN0cnVjdCBobGlzdF9ibF9oZWFkICpiKQoreworCWJpdF9zcGluX2xvY2soMCwgKHVuc2lnbmVkIGxvbmcgKiliKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhsaXN0X2JsX3VubG9jayhzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqYikKK3sKKwlfX2JpdF9zcGluX3VubG9jaygwLCAodW5zaWduZWQgbG9uZyAqKWIpOworfQorCiAvKioKICAqIGhsaXN0X2JsX2Zvcl9lYWNoX2VudHJ5CS0gaXRlcmF0ZSBvdmVyIGxpc3Qgb2YgZ2l2ZW4gdHlwZQogICogQHRwb3M6CXRoZSB0eXBlICogdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xydV9jYWNoZS5oIGIvaW5jbHVkZS9saW51eC9scnVfY2FjaGUuaAppbmRleCA3OGZiZjI0Li42YTRmYWI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xydV9jYWNoZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbHJ1X2NhY2hlLmgKQEAgLTE0OCw3ICsxNDgsNyBAQAogICoKICAqIERSQkQgY3VycmVudGx5IChNYXkgMjAwOSkgb25seSB1c2VzIDYxIGVsZW1lbnRzIG9uIHRoZSByZXN5bmMgbHJ1X2NhY2hlCiAgKiAodG90YWwgbWVtb3J5IHVzYWdlIDIgcGFnZXMpLCBhbmQgdXAgdG8gMzgzMyBlbGVtZW50cyBvbiB0aGUgYWN0X2xvZwotICogbHJ1X2NhY2hlLCB0b3RhbGxpbmcgfjIxNSBrQiBmb3IgNjRiaXQgYXJjaGl0ZWNodHVyZSwgfjUzIHBhZ2VzLgorICogbHJ1X2NhY2hlLCB0b3RhbGxpbmcgfjIxNSBrQiBmb3IgNjRiaXQgYXJjaGl0ZWN0dXJlLCB+NTMgcGFnZXMuCiAgKgogICogV2UgdXN1YWxseSBkbyBub3QgYWN0dWFsbHkgZnJlZSB0aGVzZSBvYmplY3RzIGFnYWluLCBidXQgb25seSAicmVjeWNsZSIKICAqIHRoZW0sIGFzIHRoZSBjaGFuZ2UgImluZGV4OiAtb2xkX2xhYmVsLCArTENfRlJFRSIgd291bGQgbmVlZCBhIHRyYW5zYWN0aW9uCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDVhNWNlNzAuLjVlOTg0MGY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtMjE2LDcgKzIxNiw3IEBACiAJcmV0dXJuIDsKIH0KIAotc3RhdGljIGlubGluZSBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3JvdGF0ZV9yZWNsYWltYWJsZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQorc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcm90YXRlX3JlY2xhaW1hYmxlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJcmV0dXJuIDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL2NvcmUuaCBiL2luY2x1ZGUvbGludXgvbWZkL2NvcmUuaAppbmRleCBhZDFiMTlhLi5hZWYyMzMwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvY29yZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL2NvcmUuaApAQCAtODYsMTYgKzg2LDI1IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1mZF9jZWxsICptZmRfZ2V0X2NlbGwoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlyZXR1cm4gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJcmV0dXJuIHBkZXYtPm1mZF9jZWxsOwogfQogCiAvKgogICogR2l2ZW4gYSBwbGF0Zm9ybSBkZXZpY2UgdGhhdCdzIGJlZW4gY3JlYXRlZCBieSBtZmRfYWRkX2RldmljZXMoKSwgZmV0Y2gKICAqIHRoZSAubWZkX2RhdGEgZW50cnkgZnJvbSB0aGUgbWZkX2NlbGwgdGhhdCBjcmVhdGVkIGl0LgorICogT3RoZXJ3aXNlIGp1c3QgcmV0dXJuIHRoZSBwbGF0Zm9ybV9kYXRhIHBvaW50ZXIuCisgKiBUaGlzIG1haW50YWlucyBjb21wYXRpYmlsaXR5IHdpdGggcGxhdGZvcm0gZHJpdmVycyB3aG9zZSBkZXZpY2VzIGFyZW4ndAorICogY3JlYXRlZCBieSB0aGUgbWZkIGxheWVyLCBhbmQgZXhwZWN0IHBsYXRmb3JtX2RhdGEgdG8gY29udGFpbiB3aGF0IHdvdWxkJ3ZlCisgKiBvdGhlcndpc2UgYmVlbiBpbiBtZmRfZGF0YS4KICAqLwogc3RhdGljIGlubGluZSB2b2lkICptZmRfZ2V0X2RhdGEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlyZXR1cm4gbWZkX2dldF9jZWxsKHBkZXYpLT5tZmRfZGF0YTsKKwljb25zdCBzdHJ1Y3QgbWZkX2NlbGwgKmNlbGwgPSBtZmRfZ2V0X2NlbGwocGRldik7CisKKwlpZiAoY2VsbCkKKwkJcmV0dXJuIGNlbGwtPm1mZF9kYXRhOworCWVsc2UKKwkJcmV0dXJuIHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogfQogCiBleHRlcm4gaW50IG1mZF9hZGRfZGV2aWNlcyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIGludCBpZCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODMxeC9wZGF0YS5oIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3BkYXRhLmgKaW5kZXggYWZlNGRiNC4uNjMyZDE1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3BkYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3BkYXRhLmgKQEAgLTgxLDcgKzgxLDkgQEAKIAlpbnQgcnB1OyAgICAgICAgICAgICAgIC8qKiBQZW4gZG93biBzZW5zaXRpdml0eSByZXNpc3RvciBkaXZpZGVyICovCiAJaW50IHByZXNzdXJlOyAgICAgICAgICAvKiogUmVwb3J0IHByZXNzdXJlIChib29sZWFuKSAqLwogCXVuc2lnbmVkIGludCBkYXRhX2lycTsgLyoqIFRvdWNoIGRhdGEgcmVhZHkgSVJRICovCisJaW50IGRhdGFfaXJxZjsgICAgICAgICAvKiogSVJRIGZsYWdzIGZvciBkYXRhIHJlYWR5IElSUSAqLwogCXVuc2lnbmVkIGludCBwZF9pcnE7ICAgLyoqIFRvdWNoIHBlbmRvd24gZGV0ZWN0IElSUSAqLworCWludCBwZF9pcnFmOyAgICAgICAgICAgLyoqIElSUSBmbGFncyBmb3IgcGVuIGRvd24gSVJRICovCiB9OwogCiBlbnVtIHdtODMxeF93YXRjaGRvZ19hY3Rpb24gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL3BtaWMuaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9wbWljLmgKaW5kZXggZTc4NmZlOS4uNTc5YjUwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL3BtaWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvcG1pYy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIHBtaWMuaCAgLS0gIFBvd2VyIE1hbmFnbWVudCBEcml2ZXIgZm9yIFdvbGZzb24gV004MzUwIFBNSUMKKyAqIHBtaWMuaCAgLS0gIFBvd2VyIE1hbmFnZW1lbnQgRHJpdmVyIGZvciBXb2xmc29uIFdNODM1MCBQTUlDCiAgKgogICogQ29weXJpZ2h0IDIwMDcgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQwogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA3NjA2ZDdkLi42NTA3ZGRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0xMzcsNyArMTM3LDggQEAKICNkZWZpbmUgVk1fUmFuZG9tUmVhZEhpbnQodikJCSgodiktPnZtX2ZsYWdzICYgVk1fUkFORF9SRUFEKQogCiAvKgotICogc3BlY2lhbCB2bWFzIHRoYXQgYXJlIG5vbi1tZXJnYWJsZSwgbm9uLW1sb2NrKClhYmxlCisgKiBTcGVjaWFsIHZtYXMgdGhhdCBhcmUgbm9uLW1lcmdhYmxlLCBub24tbWxvY2soKWFibGUuCisgKiBOb3RlOiBtbS9odWdlX21lbW9yeS5jIFZNX05PX1RIUCBkZXBlbmRzIG9uIHRoaXMgZGVmaW5pdGlvbi4KICAqLwogI2RlZmluZSBWTV9TUEVDSUFMIChWTV9JTyB8IFZNX0RPTlRFWFBBTkQgfCBWTV9SRVNFUlZFRCB8IFZNX1BGTk1BUCkKIApAQCAtNjA4LDcgKzYwOSw3IEBACiAjZW5kaWYKIAogLyoKLSAqIERlZmluZSB0aGUgYml0IHNoaWZ0cyB0byBhY2Nlc3MgZWFjaCBzZWN0aW9uLiAgRm9yIG5vbi1leGlzdGFudAorICogRGVmaW5lIHRoZSBiaXQgc2hpZnRzIHRvIGFjY2VzcyBlYWNoIHNlY3Rpb24uICBGb3Igbm9uLWV4aXN0ZW50CiAgKiBzZWN0aW9ucyB3ZSBkZWZpbmUgdGhlIHNoaWZ0IGFzIDA7IHRoYXQgcGx1cyBhIDAgbWFzayBlbnN1cmVzCiAgKiB0aGUgY29tcGlsZXIgd2lsbCBvcHRpbWlzZSBhd2F5IHJlZmVyZW5jZSB0byB0aGVtLgogICovCkBAIC0xMDEwLDExICsxMDExLDMzIEBACiBpbnQgY2xlYXJfcGFnZV9kaXJ0eV9mb3JfaW8oc3RydWN0IHBhZ2UgKnBhZ2UpOwogCiAvKiBJcyB0aGUgdm1hIGEgY29udGludWF0aW9uIG9mIHRoZSBzdGFjayB2bWEgYWJvdmUgaXQ/ICovCi1zdGF0aWMgaW5saW5lIGludCB2bWFfc3RhY2tfY29udGludWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3N0YXRpYyBpbmxpbmUgaW50IHZtYV9ncm93c2Rvd24oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlyZXR1cm4gdm1hICYmICh2bWEtPnZtX2VuZCA9PSBhZGRyKSAmJiAodm1hLT52bV9mbGFncyAmIFZNX0dST1dTRE9XTik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHN0YWNrX2d1YXJkX3BhZ2Vfc3RhcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiAodm1hLT52bV9mbGFncyAmIFZNX0dST1dTRE9XTikgJiYKKwkJKHZtYS0+dm1fc3RhcnQgPT0gYWRkcikgJiYKKwkJIXZtYV9ncm93c2Rvd24odm1hLT52bV9wcmV2LCBhZGRyKTsKK30KKworLyogSXMgdGhlIHZtYSBhIGNvbnRpbnVhdGlvbiBvZiB0aGUgc3RhY2sgdm1hIGJlbG93IGl0PyAqLworc3RhdGljIGlubGluZSBpbnQgdm1hX2dyb3dzdXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gdm1hICYmICh2bWEtPnZtX3N0YXJ0ID09IGFkZHIpICYmICh2bWEtPnZtX2ZsYWdzICYgVk1fR1JPV1NVUCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN0YWNrX2d1YXJkX3BhZ2VfZW5kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuICh2bWEtPnZtX2ZsYWdzICYgVk1fR1JPV1NVUCkgJiYKKwkJKHZtYS0+dm1fZW5kID09IGFkZHIpICYmCisJCSF2bWFfZ3Jvd3N1cCh2bWEtPnZtX25leHQsIGFkZHIpOworfQorCiBleHRlcm4gdW5zaWduZWQgbG9uZyBtb3ZlX3BhZ2VfdGFibGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl1bnNpZ25lZCBsb25nIG9sZF9hZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5ld192bWEsCiAJCXVuc2lnbmVkIGxvbmcgbmV3X2FkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL2R3X21tYy5oIGIvaW5jbHVkZS9saW51eC9tbWMvZHdfbW1jLmgKaW5kZXggYzAyMDdhNy4uYmRkN2NlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvZHdfbW1jLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvZHdfbW1jLmgKQEAgLTk4LDcgKzk4LDcgQEAKICAqIEVWRU5UX0RBVEFfQ09NUExFVEUgaXMgc2V0IGluIEBwZW5kaW5nX2V2ZW50cywgYWxsIGRhdGEtcmVsYXRlZAogICogaW50ZXJydXB0cyBtdXN0IGJlIGRpc2FibGVkIGFuZCBAZGF0YV9zdGF0dXMgdXBkYXRlZCB3aXRoIGEKICAqIHNuYXBzaG90IG9mIFNSLiBTaW1pbGFybHksIGJlZm9yZSBFVkVOVF9DTURfQ09NUExFVEUgaXMgc2V0LCB0aGUKLSAqIENNRFJEWSBpbnRlcnVwdCBtdXN0IGJlIGRpc2FibGVkIGFuZCBAY21kX3N0YXR1cyB1cGRhdGVkIHdpdGggYQorICogQ01EUkRZIGludGVycnVwdCBtdXN0IGJlIGRpc2FibGVkIGFuZCBAY21kX3N0YXR1cyB1cGRhdGVkIHdpdGggYQogICogc25hcHNob3Qgb2YgU1IsIGFuZCBiZWZvcmUgRVZFTlRfWEZFUl9DT01QTEVURSBjYW4gYmUgc2V0LCB0aGUKICAqIGJ5dGVzX3hmZXJlZCBmaWVsZCBvZiBAZGF0YSBtdXN0IGJlIHdyaXR0ZW4uIFRoaXMgaXMgZW5zdXJlZCBieQogICogdXNpbmcgYmFycmllcnMuCkBAIC0xNzIsNyArMTcyLDcgQEAKICNkZWZpbmUgRFdfTUNJX1FVSVJLX0lETUFDX0RUTwkJCUJJVCgwKQogLyogZGVsYXkgbmVlZGVkIGJldHdlZW4gcmV0cmllcyBvbiBzb21lIDIuMTFhIGltcGxlbWVudGF0aW9ucyAqLwogI2RlZmluZSBEV19NQ0lfUVVJUktfUkVUUllfREVMQVkJCUJJVCgxKQotLyogSGlnaCBTcGVlZCBDYXBhYmxlIC0gU3VwcG9ydHMgSFMgY2FyZHMgKHVwdG8gNTBNSHopICovCisvKiBIaWdoIFNwZWVkIENhcGFibGUgLSBTdXBwb3J0cyBIUyBjYXJkcyAodXAgdG8gNTBNSHopICovCiAjZGVmaW5lIERXX01DSV9RVUlSS19ISUdIU1BFRUQJCQlCSVQoMikKIC8qIFVucmVsaWFibGUgY2FyZCBkZXRlY3Rpb24gKi8KICNkZWZpbmUgRFdfTUNJX1FVSVJLX0JST0tFTl9DQVJEX0RFVEVDVElPTglCSVQoMykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXJvdXRlNi5oIGIvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKaW5kZXggOWQyZGViMi4uYTM3NTljYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKKysrIGIvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKQEAgLTI0OSw3ICsyNDksNyBAQAogICogU3RydWN0dXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgZnJvbSBrZXJuZWwgdG8gbXVsdGljYXN0IHJvdXRlci4KICAqIFdlJ2xsIG92ZXJsYXkgdGhlIHN0cnVjdHVyZSBvbnRvIGFuIE1MRCBoZWFkZXIgKG5vdCBhbiBJUHY2IGhlZGVyIGxpa2UgaWdtcG1zZ3t9CiAgKiB1c2VkIGZvciBJUHY0IGltcGxlbWVudGF0aW9uKS4gVGhpcyBpcyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIHdpbGwgYmUgcGFzc2VkIHZpYSBhbgotICogSVB2NiByYXcgc29ja2V0LCBvbiB3aWNoIGFuIGFwcGxpY2F0aW9uIHdpbGwgb25seSByZWNlaXZlciB0aGUgcGF5bG9hZCBpLmUgdGhlIGRhdGEgYWZ0ZXIKKyAqIElQdjYgcmF3IHNvY2tldCwgb24gd2hpY2ggYW4gYXBwbGljYXRpb24gd2lsbCBvbmx5IHJlY2VpdmVyIHRoZSBwYXlsb2FkIGkuZSB0aGUgZGF0YSBhZnRlcgogICogdGhlIElQdjYgaGVhZGVyIGFuZCBhbGwgdGhlIGV4dGVuc2lvbiBoZWFkZXJzLiAoU2VlIHNlY3Rpb24gMyBvZiBSRkMgMzU0MikKICAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaCBiL2luY2x1ZGUvbGludXgvbXRkL2NmaS5oCmluZGV4IDBkODIzZjIuLmQyNDkyNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL2NmaS5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL2NmaS5oCkBAIC0zMDgsNyArMzA4LDcgQEAKIAkKIAlhZGRyID0gKGNtZF9vZnMgKiB0eXBlKSAqIGludGVybGVhdmU7CiAKLQkvKiBNb2RpZnkgdGhlIHVubG9jayBhZGRyZXNzIGlmIHdlIGFyZSBpbiBjb21wYXRpYmxpdHkgbW9kZS4KKwkvKiBNb2RpZnkgdGhlIHVubG9jayBhZGRyZXNzIGlmIHdlIGFyZSBpbiBjb21wYXRpYmlsaXR5IG1vZGUuCiAJICogRm9yIDE2Yml0IGRldmljZXMgb24gOCBiaXQgYnVzc2VzCiAJICogYW5kIDMyYml0IGRldmljZXMgb24gMTYgYml0IGJ1c3NlcwogCSAqIHNldCB0aGUgbG93IGJpdCBvZiB0aGUgYWx0ZXJuYXRpbmcgYml0IHNlcXVlbmNlIG9mIHRoZSBhZGRyZXNzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oIGIvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oCmluZGV4IGFlNjdlZjUuLmQ0NDE5MjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKQEAgLTQxNiw5ICs0MTYsOSBAQAogICogQHNlbGVjdF9jaGlwOglbUkVQTEFDRUFCTEVdIHNlbGVjdCBjaGlwIG5yCiAgKiBAYmxvY2tfYmFkOgkJW1JFUExBQ0VBQkxFXSBjaGVjaywgaWYgdGhlIGJsb2NrIGlzIGJhZAogICogQGJsb2NrX21hcmtiYWQ6CVtSRVBMQUNFQUJMRV0gbWFyayB0aGUgYmxvY2sgYmFkCi0gKiBAY21kX2N0cmw6CQlbQk9BUkRTUEVDSUZJQ10gaGFyZHdhcmVzcGVjaWZpYyBmdW50aW9uIGZvciBjb250cm9sbGluZworICogQGNtZF9jdHJsOgkJW0JPQVJEU1BFQ0lGSUNdIGhhcmR3YXJlc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGNvbnRyb2xsaW5nCiAgKgkJCUFMRS9DTEUvbkNFLiBBbHNvIHVzZWQgdG8gd3JpdGUgY29tbWFuZCBhbmQgYWRkcmVzcwotICogQGluaXRfc2l6ZToJCVtCT0FSRFNQRUNJRklDXSBoYXJkd2FyZXNwZWNpZmljIGZ1bnRpb24gZm9yIHNldHRpbmcKKyAqIEBpbml0X3NpemU6CQlbQk9BUkRTUEVDSUZJQ10gaGFyZHdhcmVzcGVjaWZpYyBmdW5jdGlvbiBmb3Igc2V0dGluZwogICoJCQltdGQtPm9vYnNpemUsIG10ZC0+d3JpdGVzaXplIGFuZCBzbyBvbi4KICAqCQkJQGlkX2RhdGEgY29udGFpbnMgdGhlIDggYnl0ZXMgdmFsdWVzIG9mIE5BTkRfQ01EX1JFQURJRC4KICAqCQkJUmV0dXJuIHdpdGggdGhlIGJ1cyB3aWR0aC4KQEAgLTQzNyw3ICs0MzcsNyBAQAogICogQGVyYXNlX2NtZDoJCVtJTlRFUk5dIGVyYXNlIGNvbW1hbmQgd3JpdGUgZnVuY3Rpb24sIHNlbGVjdGFibGUgZHVlCiAgKgkJCXRvIEFORCBzdXBwb3J0LgogICogQHNjYW5fYmJ0OgkJW1JFUExBQ0VBQkxFXSBmdW5jdGlvbiB0byBzY2FuIGJhZCBibG9jayB0YWJsZQotICogQGNoaXBfZGVsYXk6CQlbQk9BUkRTUEVDSUZJQ10gY2hpcCBkZXBlbmRlbnQgZGVsYXkgZm9yIHRyYW5zZmVyaW5nCisgKiBAY2hpcF9kZWxheToJCVtCT0FSRFNQRUNJRklDXSBjaGlwIGRlcGVuZGVudCBkZWxheSBmb3IgdHJhbnNmZXJyaW5nCiAgKgkJCWRhdGEgZnJvbSBhcnJheSB0byByZWFkIHJlZ3MgKHRSKS4KICAqIEBzdGF0ZToJCVtJTlRFUk5dIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBOQU5EIGRldmljZQogICogQG9vYl9wb2k6CQlwb2lzb24gdmFsdWUgYnVmZmVyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC94aXAuaCBiL2luY2x1ZGUvbGludXgvbXRkL3hpcC5oCmluZGV4IDM2ZWZjYmEuLmFiZWQ0ZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL3hpcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL3hpcC5oCkBAIC01MSw3ICs1MSw3IEBACiAgKiAJcmV0dXJuIGluIHVzZWNzIHRoZSBlbGFwc2VkIHRpbWViZXR3ZWVuIG5vdyBhbmQgdGhlIHJlZmVyZW5jZSB4IGFzCiAgKiAJcmV0dXJuZWQgYnkgeGlwX2N1cnJ0aW1lKCkuCiAgKgotICogCW5vdGUgMTogY29udmVydGlvbiB0byB1c2VjIGNhbiBiZSBhcHByb3hpbWF0ZWQsIGFzIGxvbmcgYXMgdGhlCisgKiAJbm90ZSAxOiBjb252ZXJzaW9uIHRvIHVzZWMgY2FuIGJlIGFwcHJveGltYXRlZCwgYXMgbG9uZyBhcyB0aGUKICAqIAkJcmV0dXJuZWQgdmFsdWUgaXMgPD0gdGhlIHJlYWwgZWxhcHNlZCB0aW1lLgogICogCW5vdGUgMjogdGhpcyBzaG91bGQgYmUgYWJsZSB0byBjb3BlIHdpdGggYSBmZXcgc2Vjb25kcyB3aXRob3V0CiAgKiAJCW92ZXJmbG93aW5nLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgKaW5kZXggZWVlYzAwYS4uN2ZhOTVkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oCkBAIC0yNzAsNyArMjcwLDggQEAKIAkJCQkJICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCQkJCQkgICAgdW5zaWduZWQgaW50IGxlbiwKIAkJCQkJICAgIHVfaW50OF90IHByb3RvY29sKTsKLQlpbnQJCSgqcm91dGUpKHN0cnVjdCBkc3RfZW50cnkgKipkc3QsIHN0cnVjdCBmbG93aSAqZmwpOworCWludAkJKCpyb3V0ZSkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZHN0X2VudHJ5ICoqZHN0LAorCQkJCSBzdHJ1Y3QgZmxvd2kgKmZsLCBib29sIHN0cmljdCk7CiAJdm9pZAkJKCpzYXZlcm91dGUpKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5KTsKIAlpbnQJCSgqcmVyb3V0ZSkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgKaW5kZXggZWMzMzNkOC4uNWEyNjJlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmgKQEAgLTI5Myw3ICsyOTMsNyBAQAogCS8qIExvY2sgcHJvdGVjdGluZyB0aGUgc2V0IGRhdGEgKi8KIAlyd2xvY2tfdCBsb2NrOwogCS8qIFJlZmVyZW5jZXMgdG8gdGhlIHNldCAqLwotCWF0b21pY190IHJlZjsKKwl1MzIgcmVmOwogCS8qIFRoZSBjb3JlIHNldCB0eXBlICovCiAJc3RydWN0IGlwX3NldF90eXBlICp0eXBlOwogCS8qIFRoZSB0eXBlIHZhcmlhbnQgZG9pbmcgdGhlIHJlYWwgam9iICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYWhhc2guaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9haGFzaC5oCmluZGV4IGVjOWQ5YmUuLmEwMTk2YWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9haGFzaC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9haGFzaC5oCkBAIC01MTUsOCArNTE1LDcgQEAKIAlpZiAoaC0+bmV0bWFzayAhPSBIT1NUX01BU0spCiAJCU5MQV9QVVRfVTgoc2tiLCBJUFNFVF9BVFRSX05FVE1BU0ssIGgtPm5ldG1hc2spOwogI2VuZGlmCi0JTkxBX1BVVF9ORVQzMihza2IsIElQU0VUX0FUVFJfUkVGRVJFTkNFUywKLQkJICAgICAgaHRvbmwoYXRvbWljX3JlYWQoJnNldC0+cmVmKSAtIDEpKTsKKwlOTEFfUFVUX05FVDMyKHNrYiwgSVBTRVRfQVRUUl9SRUZFUkVOQ0VTLCBodG9ubChzZXQtPnJlZiAtIDEpKTsKIAlOTEFfUFVUX05FVDMyKHNrYiwgSVBTRVRfQVRUUl9NRU1TSVpFLCBodG9ubChtZW1zaXplKSk7CiAJaWYgKHdpdGhfdGltZW91dChoLT50aW1lb3V0KSkKIAkJTkxBX1BVVF9ORVQzMihza2IsIElQU0VUX0FUVFJfVElNRU9VVCwgaHRvbmwoaC0+dGltZW91dCkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5oCmluZGV4IDJhMTBlZmQuLjZhMDY2NGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19ncmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmgKQEAgLTYwLDcgKzYwLDcgQEAKIAlfX2JlMTYgcGF5bG9hZF9sZW47CS8qIHNpemUgb2YgcHBwIHBheWxvYWQsIG5vdCBpbmMuIGdyZSBoZWFkZXIgKi8KIAlfX2JlMTYgY2FsbF9pZDsJCS8qIHBlZXIncyBjYWxsX2lkIGZvciB0aGlzIHNlc3Npb24gKi8KIAlfX2JlMzIgc2VxOwkJLyogc2VxdWVuY2UgbnVtYmVyLiAgUHJlc2VudCBpZiBTPT0xICovCi0JX19iZTMyIGFjazsJCS8qIHNlcSBudW1iZXIgb2YgaGlnaGVzdCBwYWNrZXQgcmVjaWV2ZWQgYnkgKi8KKwlfX2JlMzIgYWNrOwkJLyogc2VxIG51bWJlciBvZiBoaWdoZXN0IHBhY2tldCByZWNlaXZlZCBieSAqLwogCQkJCS8qICBzZW5kZXIgaW4gdGhpcyBzZXNzaW9uICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRhYmxlcy5oCmluZGV4IDFjNmYwYzUuLjg3OTdlZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRhYmxlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRhYmxlcy5oCkBAIC05Miw3ICs5Miw3IEBACiAKIC8qIFRoaXMgaXMgYSBoYWNrIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGJldHdlZW4gYW4gZWJ0X2VudHJ5IHN0cnVjdCBhbmQgYW4KICAqIGVidF9lbnRyaWVzIHN0cnVjdCB3aGVuIHRyYXZlcnNpbmcgdGhlIGVudHJpZXMgZnJvbSBzdGFydCB0byBlbmQuCi0gKiBVc2luZyB0aGlzIHNpbXBsaWZpZXMgdGhlIGNvZGUgYWxvdCwgd2hpbGUgc3RpbGwgYmVpbmcgYWJsZSB0byB1c2UKKyAqIFVzaW5nIHRoaXMgc2ltcGxpZmllcyB0aGUgY29kZSBhIGxvdCwgd2hpbGUgc3RpbGwgYmVpbmcgYWJsZSB0byB1c2UKICAqIGVidF9lbnRyaWVzLgogICogQ29udHJhcnksIGlwdGFibGVzIGRvZXNuJ3QgdXNlIHNvbWV0aGluZyBsaWtlIGVidF9lbnRyaWVzIGFuZCB0aGVyZWZvcmUgdXNlcwogICogZGlmZmVyZW50IHRlY2huaXF1ZXMgZm9yIG5hbWluZyB0aGUgcG9saWN5IGFuZCBzdWNoLiBTbywgaXB0YWJsZXMgZG9lc24ndApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnM0LmggYi9pbmNsdWRlL2xpbnV4L25mczQuaAppbmRleCBiNTI4ZjZkLi4xNzhmYWZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mczQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mczQuaApAQCAtMzU5LDcgKzM1OSw3IEBACiAJCQkJCQkvKiBFcnJvciAxMDA3MyBpcyB1bnVzZWQuICovCiAJTkZTNEVSUl9DTElFTlRJRF9CVVNZCT0gMTAwNzQsCS8qIGNsaWVudGlkIGhhcyBzdGF0ZSAqLwogCU5GUzRFUlJfUE5GU19JT19IT0xFCT0gMTAwNzUsCS8qIElPIHRvIF9TUEFSU0UgZmlsZSBob2xlICovCi0JTkZTNEVSUl9TRVFfRkFMU0VfUkVUUlkJPSAxMDA3NiwJLyogcmV0cnkgbm90IG9yaWdpb25hbCAqLworCU5GUzRFUlJfU0VRX0ZBTFNFX1JFVFJZCT0gMTAwNzYsCS8qIHJldHJ5IG5vdCBvcmlnaW5hbCAqLwogCU5GUzRFUlJfQkFEX0hJR0hfU0xPVAk9IDEwMDc3LAkvKiBzZXF1ZW5jZSBhcmcgYmFkICovCiAJTkZTNEVSUl9ERUFEU0VTU0lPTgk9IDEwMDc4LAkvKiBwZXJzaXN0ZW50IHNlc3Npb24gZGVhZCAqLwogCU5GUzRFUlJfRU5DUl9BTEdfVU5TVVBQID0gMTAwNzksCS8qIFNTViBhbGcgbWlzbWF0Y2ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmggYi9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCmluZGV4IDIxNmNlYTUuLjg3Njk0Y2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaApAQCAtNDcsNiArNDcsNyBAQAogCiAjaWZkZWYgQ09ORklHX05GU19WNAogCXU2NAkJCWNsX2NsaWVudGlkOwkvKiBjb25zdGFudCAqLworCW5mczRfdmVyaWZpZXIJCWNsX2NvbmZpcm07CS8qIENsaWVudGlkIHZlcmlmaWVyICovCiAJdW5zaWduZWQgbG9uZwkJY2xfc3RhdGU7CiAKIAlzcGlubG9ja190CQljbF9sb2NrOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfeGRyLmggYi9pbmNsdWRlL2xpbnV4L25mc194ZHIuaAppbmRleCA3OGIxMDFlLi43ZTM3MWY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc194ZHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc194ZHIuaApAQCAtNTAsNiArNTAsNyBAQAogCX0gZHU7CiAJc3RydWN0IG5mc19mc2lkCQlmc2lkOwogCV9fdTY0CQkJZmlsZWlkOworCV9fdTY0CQkJbW91bnRlZF9vbl9maWxlaWQ7CiAJc3RydWN0IHRpbWVzcGVjCQlhdGltZTsKIAlzdHJ1Y3QgdGltZXNwZWMJCW10aW1lOwogCXN0cnVjdCB0aW1lc3BlYwkJY3RpbWU7CkBAIC04Myw2ICs4NCw3IEBACiAjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX1BSRUNIQU5HRQkoMVUgPDwgMTgpCiAjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX1Y0X1JFRkVSUkFMCSgxVSA8PCAxOSkJLyogTkZTdjQgcmVmZXJyYWwgKi8KICNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfTU9VTlRQT0lOVAkoMVUgPDwgMjApCS8qIFRyZWF0IGFzIG1vdW50cG9pbnQgKi8KKyNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfTU9VTlRFRF9PTl9GSUxFSUQJCSgxVSA8PCAyMSkKIAogI2RlZmluZSBORlNfQVRUUl9GQVRUUiAoTkZTX0FUVFJfRkFUVFJfVFlQRSBcCiAJCXwgTkZTX0FUVFJfRkFUVFJfTU9ERSBcCkBAIC0yMzEsNiArMjMzLDcgQEAKIAlzdHJ1Y3QgbmZzNF9sYXlvdXRnZXRfYXJncyBhcmdzOwogCXN0cnVjdCBuZnM0X2xheW91dGdldF9yZXMgcmVzOwogCXN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICoqbHNlZ3BwOworCWdmcF90IGdmcF9mbGFnczsKIH07CiAKIHN0cnVjdCBuZnM0X2dldGRldmljZWluZm9fYXJncyB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc2QvZXhwb3J0LmggYi9pbmNsdWRlL2xpbnV4L25mc2QvZXhwb3J0LmgKaW5kZXggYmQzMTYxNS4uODQwNThlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNkL2V4cG9ydC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzZC9leHBvcnQuaApAQCAtODAsNyArODAsNyBAQAogCiAvKgogICogV2Uga2VlcCBhbiBhcnJheSBvZiBwc2V1ZG9mbGF2b3JzIHdpdGggdGhlIGV4cG9ydCwgaW4gb3JkZXIgZnJvbSBtb3N0Ci0gKiB0byBsZWFzdCBwcmVmZXJyZWQuICBGb3IgdGhlIGZvcnNlZWFibGUgZnV0dXJlLCB3ZSBkb24ndCBleHBlY3QgbW9yZQorICogdG8gbGVhc3QgcHJlZmVycmVkLiAgRm9yIHRoZSBmb3Jlc2VlYWJsZSBmdXR1cmUsIHdlIGRvbid0IGV4cGVjdCBtb3JlCiAgKiB0aGFuIHRoZSBlaWdodCBwc2V1ZG9mbGF2b3JzIG51bGwsIHVuaXgsIGtyYjUsIGtyYjVpLCBrcmI1cCwgc2twbTMsCiAgKiBzcGttM2ksIGFuZCBzcGttM3AgKGFuZCB1c2luZyBhbGwgOCBhdCBvbmNlIHNob3VsZCBiZSByYXJlKS4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNkL25mc2ZoLmggYi9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZmguaAppbmRleCA4MGQ1NWJiLi5mNzZkODBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZmguaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZmguaApAQCAtNDksNyArNDksNyBAQAogICoKICAqIFRoZSBhdXRoX3R5cGUgZmllbGQgc3BlY2lmaWVzIGhvdyB0aGUgZmlsZWhhbmRsZSBjYW4gYmUgYXV0aGVudGljYXRlZAogICogVGhpcyBtaWdodCBhbGxvdyBhIGZpbGUgdG8gYmUgY29uZmlybWVkIHRvIGJlIGluIGEgd3JpdGFibGUgcGFydCBvZiBhCi0gKiBmaWxldHJlZSB3aXRob3V0IGNoZWNraW5nIHRoZSBwYXRoIGZyb20gaXQgdXB0byB0aGUgcm9vdC4KKyAqIGZpbGV0cmVlIHdpdGhvdXQgY2hlY2tpbmcgdGhlIHBhdGggZnJvbSBpdCB1cCB0byB0aGUgcm9vdC4KICAqIEN1cnJlbnQgdmFsdWVzOgogICogICAgIDAgIC0gTm8gYXV0aGVudGljYXRpb24uICBmYl9hdXRoIGlzIDAgYnl0ZXMgbG9uZwogICogUG9zc2libGUgZnV0dXJlIHZhbHVlczoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKaW5kZXggMzAwMjIxOC4uYmJmYTEwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKKysrIGIvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKQEAgLTQxNCw3ICs0MTQsNyBAQAogICogQF9fTkw4MDIxMV9DTURfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlCiAgKi8KIGVudW0gbmw4MDIxMV9jb21tYW5kcyB7Ci0vKiBkb24ndCBjaGFuZ2UgdGhlIG9yZGVyIG9yIGFkZCBhbnl0aGluZyBpbmJldHdlZW4sIHRoaXMgaXMgQUJJISAqLworLyogZG9uJ3QgY2hhbmdlIHRoZSBvcmRlciBvciBhZGQgYW55dGhpbmcgYmV0d2VlbiwgdGhpcyBpcyBBQkkhICovCiAJTkw4MDIxMV9DTURfVU5TUEVDLAogCiAJTkw4MDIxMV9DTURfR0VUX1dJUEhZLAkJLyogY2FuIGR1bXAgKi8KQEAgLTg2MCw3ICs4NjAsNyBAQAogICoJVGhpcyBjYW4gYmUgdXNlZCB0byBtYXNrIG91dCBhbnRlbm5hcyB3aGljaCBhcmUgbm90IGF0dGFjaGVkIG9yIHNob3VsZAogICoJbm90IGJlIHVzZWQgZm9yIHJlY2VpdmluZy4gSWYgYW4gYW50ZW5uYSBpcyBub3Qgc2VsZWN0ZWQgaW4gdGhpcyBiaXRtYXAKICAqCXRoZSBoYXJkd2FyZSBzaG91bGQgbm90IGJlIGNvbmZpZ3VyZWQgdG8gcmVjZWl2ZSBvbiB0aGlzIGFudGVubmEuCi0gKglGb3IgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0b24gc2VlIEBOTDgwMjExX0FUVFJfV0lQSFlfQU5URU5OQV9UWC4KKyAqCUZvciBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gc2VlIEBOTDgwMjExX0FUVFJfV0lQSFlfQU5URU5OQV9UWC4KICAqCiAgKiBATkw4MDIxMV9BVFRSX1dJUEhZX0FOVEVOTkFfQVZBSUxfVFg6IEJpdG1hcCBvZiBhbnRlbm5hcyB3aGljaCBhcmUgYXZhaWxhYmxlCiAgKglmb3IgY29uZmlndXJhdGlvbiBhcyBUWCBhbnRlbm5hcyB2aWEgdGhlIGFib3ZlIHBhcmFtZXRlcnMuCkBAIC04OTEsNyArODkxLDcgQEAKICAqIEBfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKICAqLwogZW51bSBubDgwMjExX2F0dHJzIHsKLS8qIGRvbid0IGNoYW5nZSB0aGUgb3JkZXIgb3IgYWRkIGFueXRoaW5nIGluYmV0d2VlbiwgdGhpcyBpcyBBQkkhICovCisvKiBkb24ndCBjaGFuZ2UgdGhlIG9yZGVyIG9yIGFkZCBhbnl0aGluZyBiZXR3ZWVuLCB0aGlzIGlzIEFCSSEgKi8KIAlOTDgwMjExX0FUVFJfVU5TUEVDLAogCiAJTkw4MDIxMV9BVFRSX1dJUEhZLApAQCAtMTQxOSw3ICsxNDE5LDcgQEAKICAqIAk4MDIuMTEgY291bnRyeSBpbmZvcm1hdGlvbiBlbGVtZW50IHdpdGggcmVndWxhdG9yeSBpbmZvcm1hdGlvbiBpdAogICogCXRoaW5rcyB3ZSBzaG91bGQgY29uc2lkZXIuIGNmZzgwMjExIG9ubHkgcHJvY2Vzc2VzIHRoZSBjb3VudHJ5CiAgKgljb2RlIGZyb20gdGhlIElFLCBhbmQgcmVsaWVzIG9uIHRoZSByZWd1bGF0b3J5IGRvbWFpbiBpbmZvcm1hdGlvbgotICoJc3RydWN0dXJlIHBhc2VkIGJ5IHVzZXJzcGFjZSAoQ1JEQSkgZnJvbSBvdXIgd2lyZWxlc3MtcmVnZGIuCisgKglzdHJ1Y3R1cmUgcGFzc2VkIGJ5IHVzZXJzcGFjZSAoQ1JEQSkgZnJvbSBvdXIgd2lyZWxlc3MtcmVnZGIuCiAgKglJZiBhIGNoYW5uZWwgaXMgZW5hYmxlZCBidXQgdGhlIGNvdW50cnkgY29kZSBpbmRpY2F0ZXMgaXQgc2hvdWxkCiAgKgliZSBkaXNhYmxlZCB3ZSBkaXNhYmxlIHRoZSBjaGFubmVsIGFuZCByZS1lbmFibGUgaXQgdXBvbiBkaXNhc3NvY2lhdGlvbi4KICAqLwpAQCAtMTU5OCw3ICsxNTk4LDcgQEAKICAqIEBOTDgwMjExX01FU0hDT05GX1JFVFJZX1RJTUVPVVQ6IHNwZWNpZmllcyB0aGUgaW5pdGlhbCByZXRyeSB0aW1lb3V0IGluCiAgKiBtaWxsaXNlY29uZCB1bml0cywgdXNlZCBieSB0aGUgUGVlciBMaW5rIE9wZW4gbWVzc2FnZQogICoKLSAqIEBOTDgwMjExX01FU0hDT05GX0NPTkZJUk1fVElNRU9VVDogc3BlY2lmaWVzIHRoZSBpbml0YWwgY29uZmlybSB0aW1lb3V0LCBpbgorICogQE5MODAyMTFfTUVTSENPTkZfQ09ORklSTV9USU1FT1VUOiBzcGVjaWZpZXMgdGhlIGluaXRpYWwgY29uZmlybSB0aW1lb3V0LCBpbgogICogbWlsbGlzZWNvbmQgdW5pdHMsIHVzZWQgYnkgdGhlIHBlZXIgbGluayBtYW5hZ2VtZW50IHRvIGNsb3NlIGEgcGVlciBsaW5rCiAgKgogICogQE5MODAyMTFfTUVTSENPTkZfSE9MRElOR19USU1FT1VUOiBzcGVjaWZpZXMgdGhlIGhvbGRpbmcgdGltZW91dCwgaW4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbm90aWZpZXIuaCBiL2luY2x1ZGUvbGludXgvbm90aWZpZXIuaAppbmRleCAyMDI2ZjllLi42MjFkZmExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25vdGlmaWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9ub3RpZmllci5oCkBAIC0yMzcsNyArMjM3LDcgQEAKIAkJCQkJKiBlbmFibGluZyBpbnRlcnJ1cHRzLiBNdXN0IG5vdCBzbGVlcCwKIAkJCQkJKiBtdXN0IG5vdCBmYWlsICovCiAKLS8qIFVzZWQgZm9yIENQVSBob3RwbHVnIGV2ZW50cyBvY2N1cmluZyB3aGlsZSB0YXNrcyBhcmUgZnJvemVuIGR1ZSB0byBhIHN1c3BlbmQKKy8qIFVzZWQgZm9yIENQVSBob3RwbHVnIGV2ZW50cyBvY2N1cnJpbmcgd2hpbGUgdGFza3MgYXJlIGZyb3plbiBkdWUgdG8gYSBzdXNwZW5kCiAgKiBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MKICAqLwogI2RlZmluZSBDUFVfVEFTS1NfRlJPWkVOCTB4MDAxMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vZl9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvb2ZfZGV2aWNlLmgKaW5kZXggOGJmZTZjMS4uYWU1NjM4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vZl9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L29mX2RldmljZS5oCkBAIC0yMSw4ICsyMSw3IEBACiBzdGF0aWMgaW5saW5lIGludCBvZl9kcml2ZXJfbWF0Y2hfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJIGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCiB7Ci0JZGV2LT5vZl9tYXRjaCA9IG9mX21hdGNoX2RldmljZShkcnYtPm9mX21hdGNoX3RhYmxlLCBkZXYpOwotCXJldHVybiBkZXYtPm9mX21hdGNoICE9IE5VTEw7CisJcmV0dXJuIG9mX21hdGNoX2RldmljZShkcnYtPm9mX21hdGNoX3RhYmxlLCBkZXYpICE9IE5VTEw7CiB9CiAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXZfZ2V0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CkBAIC01OCw2ICs1NywxMSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgb2ZfZGV2aWNlX25vZGVfcHV0KHN0cnVjdCBkZXZpY2UgKmRldikgeyB9CiAKK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfbWF0Y2hfZGV2aWNlKAorCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaGVzLCBjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIE5VTEw7Cit9CiAjZW5kaWYgLyogQ09ORklHX09GX0RFVklDRSAqLwogCiAjZW5kaWYgLyogX0xJTlVYX09GX0RFVklDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29tYXAzaXNwLmggYi9pbmNsdWRlL2xpbnV4L29tYXAzaXNwLmgKaW5kZXggMTUwODIyYi4uYjYxMTFmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vbWFwM2lzcC5oCisrKyBiL2luY2x1ZGUvbGludXgvb21hcDNpc3AuaApAQCAtMjUwLDcgKzI1MCw3IEBACiAvKiBDb250YWlucyB0aGUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZSBIb3Jpem9udGFsIE1lZGlhbiBGaWx0ZXIgKi8KIHN0cnVjdCBvbWFwM2lzcF9oM2FfYWZfaG1mIHsKIAlfX3U4IGVuYWJsZTsJLyogU3RhdHVzIG9mIEhvcml6b250YWwgTWVkaWFuIEZpbHRlciAqLwotCV9fdTggdGhyZXNob2xkOwkvKiBUaHJlc2hob2xkIFZhbHVlIGZvciBIb3Jpem9udGFsIE1lZGlhbiBGaWx0ZXIgKi8KKwlfX3U4IHRocmVzaG9sZDsJLyogVGhyZXNob2xkIFZhbHVlIGZvciBIb3Jpem9udGFsIE1lZGlhbiBGaWx0ZXIgKi8KIH07CiAKIC8qIENvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIElJUiBGaWx0ZXJzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY2dyb3VwLmgKaW5kZXggZjVkZTIxZC4uOTYxZWNjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2Nncm91cC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGFnZV9jZ3JvdXAuaApAQCAtMTM4LDcgKzEzOCw3IEBACiAKICNkZWZpbmUgUENHX0FSUkFZSURfT0ZGU0VUCShCSVRTX1BFUl9MT05HIC0gUENHX0FSUkFZSURfV0lEVEgpCiAvKgotICogWmVybyB0aGUgc2hpZnQgY291bnQgZm9yIG5vbi1leGlzdGFudCBmaWVsZHMsIHRvIHByZXZlbnQgY29tcGlsZXIKKyAqIFplcm8gdGhlIHNoaWZ0IGNvdW50IGZvciBub24tZXhpc3RlbnQgZmllbGRzLCB0byBwcmV2ZW50IGNvbXBpbGVyCiAgKiB3YXJuaW5ncyBhbmQgZW5zdXJlIHJlZmVyZW5jZXMgYXJlIG9wdGltaXplZCBhd2F5LgogICovCiAjZGVmaW5lIFBDR19BUlJBWUlEX1NISUZUCShQQ0dfQVJSQVlJRF9PRkZTRVQgKiAoUENHX0FSUkFZSURfV0lEVEggIT0gMCkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IDRlMmM5MTUuLjhhYmU4ZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC0yNDc3LDE1ICsyNDc3LDEyIEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NDBfSEIJMHgxYTIxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NDVfSEIJMHgxYTMwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSU9BVAkweDFhMzgKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9DT1VHQVJQT0lOVF9TTUJVUwkweDFjMjIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9DT1VHQVJQT0lOVF9MUENfTUlOCTB4MWM0MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NPVUdBUlBPSU5UX0xQQ19NQVgJMHgxYzVmCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUEFUU0JVUkdfU01CVVMJMHgxZDIyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUEFUU0JVUkdfTFBDXzAJMHgxZDQwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUEFUU0JVUkdfTFBDXzEJMHgxZDQxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfREg4OVhYQ0NfTFBDX01JTgkweDIzMTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9ESDg5WFhDQ19MUENfTUFYCTB4MjMxZgotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0RIODlYWENDX1NNQlVTCTB4MjMzMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfMAkweDI0MTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFBXzEJMHgyNDExCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQV8zCTB4MjQxMwpAQCAtMjY5Niw3ICsyNjkzLDYgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0gxMF81CTB4M2E2MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzVfMzQwMF9TRVJJRVNfTFBDX01JTgkweDNiMDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF81XzM0MDBfU0VSSUVTX0xQQ19NQVgJMHgzYjFmCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfNV8zNDAwX1NFUklFU19TTUJVUwkweDNiMzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JT0FUX1NOQgkweDQwMmYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF81MTAwXzE2CTB4NjVmMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzUxMDBfMjEJMHg2NWY1CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9yZWdzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9yZWdzLmgKaW5kZXggNWI3ZTZiMS4uYmUwMTM4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfcmVncy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX3JlZ3MuaApAQCAtMjIzLDcgKzIyMyw3IEBACiAjZGVmaW5lICBQQ0lfUE1fQ0FQX1BNRV9DTE9DSwkweDAwMDgJLyogUE1FIGNsb2NrIHJlcXVpcmVkICovCiAjZGVmaW5lICBQQ0lfUE1fQ0FQX1JFU0VSVkVEICAgIDB4MDAxMCAgLyogUmVzZXJ2ZWQgZmllbGQgKi8KICNkZWZpbmUgIFBDSV9QTV9DQVBfRFNJCQkweDAwMjAJLyogRGV2aWNlIHNwZWNpZmljIGluaXRpYWxpemF0aW9uICovCi0jZGVmaW5lICBQQ0lfUE1fQ0FQX0FVWF9QT1dFUgkweDAxQzAJLyogQXV4aWxsaWFyeSBwb3dlciBzdXBwb3J0IG1hc2sgKi8KKyNkZWZpbmUgIFBDSV9QTV9DQVBfQVVYX1BPV0VSCTB4MDFDMAkvKiBBdXhpbGlhcnkgcG93ZXIgc3VwcG9ydCBtYXNrICovCiAjZGVmaW5lICBQQ0lfUE1fQ0FQX0QxCQkweDAyMDAJLyogRDEgcG93ZXIgc3RhdGUgc3VwcG9ydCAqLwogI2RlZmluZSAgUENJX1BNX0NBUF9EMgkJMHgwNDAwCS8qIEQyIHBvd2VyIHN0YXRlIHN1cHBvcnQgKi8KICNkZWZpbmUgIFBDSV9QTV9DQVBfUE1FCQkweDA4MDAJLyogUE1FIHBpbiBzdXBwb3J0ZWQgKi8KQEAgLTQzNSw3ICs0MzUsNyBAQAogI2RlZmluZSAgUENJX0VYUF9MTktDQVBfTDBTRUwJMHgwMDAwNzAwMCAvKiBMMHMgRXhpdCBMYXRlbmN5ICovCiAjZGVmaW5lICBQQ0lfRVhQX0xOS0NBUF9MMUVMCTB4MDAwMzgwMDAgLyogTDEgRXhpdCBMYXRlbmN5ICovCiAjZGVmaW5lICBQQ0lfRVhQX0xOS0NBUF9DTEtQTQkweDAwMDQwMDAwIC8qIEwxIENsb2NrIFBvd2VyIE1hbmFnZW1lbnQgKi8KLSNkZWZpbmUgIFBDSV9FWFBfTE5LQ0FQX1NERVJDCTB4MDAwODAwMDAgLyogU3VwcmlzZSBEb3duIEVycm9yIFJlcG9ydGluZyBDYXBhYmxlICovCisjZGVmaW5lICBQQ0lfRVhQX0xOS0NBUF9TREVSQwkweDAwMDgwMDAwIC8qIFN1cnByaXNlIERvd24gRXJyb3IgUmVwb3J0aW5nIENhcGFibGUgKi8KICNkZWZpbmUgIFBDSV9FWFBfTE5LQ0FQX0RMTExBUkMJMHgwMDEwMDAwMCAvKiBEYXRhIExpbmsgTGF5ZXIgTGluayBBY3RpdmUgUmVwb3J0aW5nIENhcGFibGUgKi8KICNkZWZpbmUgIFBDSV9FWFBfTE5LQ0FQX0xCTkMJMHgwMDIwMDAwMCAvKiBMaW5rIEJhbmR3aWR0aCBOb3RpZmljYXRpb24gQ2FwYWJpbGl0eSAqLwogI2RlZmluZSAgUENJX0VYUF9MTktDQVBfUE4JMHhmZjAwMDAwMCAvKiBQb3J0IE51bWJlciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJjcHUuaCBiL2luY2x1ZGUvbGludXgvcGVyY3B1LmgKaW5kZXggM2E1YzQ0NC4uOGI5NzMwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJjcHUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oCkBAIC05NDgsNyArOTQ4LDcgQEAKIAlpcnFzYWZlX2dlbmVyaWNfY3B1X2NtcHhjaGdfZG91YmxlKHBjcDEsIHBjcDIsIG92YWwxLCBvdmFsMiwgbnZhbDEsIG52YWwyKQogIyBlbmRpZgogIyBkZWZpbmUgaXJxc2FmZV9jcHVfY21weGNoZ19kb3VibGUocGNwMSwgcGNwMiwgb3ZhbDEsIG92YWwyLCBudmFsMSwgbnZhbDIpCVwKLQlfX3BjcHVfZG91YmxlX2NhbGxfcmV0dXJuX2ludChpcnFzYWZlX2NwdV9jbXB4Y2hnX2RvdWJsZV8sIChwY3AxKSwgKHBjcDIpLCAob3ZhbDEpLCAob3ZhbDIpLCAobnZhbDEpLCAobnZhbDIpKQorCV9fcGNwdV9kb3VibGVfY2FsbF9yZXR1cm5fYm9vbChpcnFzYWZlX2NwdV9jbXB4Y2hnX2RvdWJsZV8sIChwY3AxKSwgKHBjcDIpLCAob3ZhbDEpLCAob3ZhbDIpLCAobnZhbDEpLCAobnZhbDIpKQogI2VuZGlmCiAKICNlbmRpZiAvKiBfX0xJTlVYX1BFUkNQVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCmluZGV4IDA0ZDc1YTguLmVlOWYxZTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCkBAIC02NjIsNyArNjYyLDcgQEAKIAlpbnQgICgqY29tbWl0X3R4bikJKHN0cnVjdCBwbXUgKnBtdSk7IC8qIG9wdGlvbmFsICovCiAJLyoKIAkgKiBXaWxsIGNhbmNlbCB0aGUgdHJhbnNhY3Rpb24sIGFzc3VtZXMgLT5kZWwoKSBpcyBjYWxsZWQKLQkgKiBmb3IgZWFjaCBzdWNjZXNzZnVsbCAtPmFkZCgpIGR1cmluZyB0aGUgdHJhbnNhY3Rpb24uCisJICogZm9yIGVhY2ggc3VjY2Vzc2Z1bCAtPmFkZCgpIGR1cmluZyB0aGUgdHJhbnNhY3Rpb24uCiAJICovCiAJdm9pZCAoKmNhbmNlbF90eG4pCShzdHJ1Y3QgcG11ICpwbXUpOyAvKiBvcHRpb25hbCAqLwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGlkLmggYi9pbmNsdWRlL2xpbnV4L3BpZC5oCmluZGV4IGVmY2VkYTAuLmNkY2VkODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGlkLmgKKysrIGIvaW5jbHVkZS9saW51eC9waWQuaApAQCAtMjEsNyArMjEsNyBAQAogICogcXVpY2tseSBmcm9tIHRoZSBudW1lcmljIHBpZCB2YWx1ZS4gIFRoZSBhdHRhY2hlZCBwcm9jZXNzZXMgbWF5IGJlCiAgKiBxdWlja2x5IGFjY2Vzc2VkIGJ5IGZvbGxvd2luZyBwb2ludGVycyBmcm9tIHN0cnVjdCBwaWQuCiAgKgotICogU3RvcmluZyBwaWRfdCB2YWx1ZXMgaW4gdGhlIGtlcm5lbCBhbmQgcmVmZXJpbmcgdG8gdGhlbSBsYXRlciBoYXMgYQorICogU3RvcmluZyBwaWRfdCB2YWx1ZXMgaW4gdGhlIGtlcm5lbCBhbmQgcmVmZXJyaW5nIHRvIHRoZW0gbGF0ZXIgaGFzIGEKICAqIHByb2JsZW0uICBUaGUgcHJvY2VzcyBvcmlnaW5hbGx5IHdpdGggdGhhdCBwaWQgbWF5IGhhdmUgZXhpdGVkIGFuZCB0aGUKICAqIHBpZCBhbGxvY2F0b3Igd3JhcHBlZCwgYW5kIGFub3RoZXIgcHJvY2VzcyBjb3VsZCBoYXZlIGNvbWUgYWxvbmcKICAqIGFuZCBiZWVuIGFzc2lnbmVkIHRoYXQgcGlkLgpAQCAtMTE3LDcgKzExNyw3IEBACiAgKi8KIGV4dGVybiBzdHJ1Y3QgcGlkICpmaW5kX2dldF9waWQoaW50IG5yKTsKIGV4dGVybiBzdHJ1Y3QgcGlkICpmaW5kX2dlX3BpZChpbnQgbnIsIHN0cnVjdCBwaWRfbmFtZXNwYWNlICopOwotaW50IG5leHRfcGlkbWFwKHN0cnVjdCBwaWRfbmFtZXNwYWNlICpwaWRfbnMsIGludCBsYXN0KTsKK2ludCBuZXh0X3BpZG1hcChzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqcGlkX25zLCB1bnNpZ25lZCBpbnQgbGFzdCk7CiAKIGV4dGVybiBzdHJ1Y3QgcGlkICphbGxvY19waWQoc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKTsKIGV4dGVybiB2b2lkIGZyZWVfcGlkKHN0cnVjdCBwaWQgKnBpZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BrdF9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9wa3Rfc2NoZWQuaAppbmRleCBiMTAzMmEzLi4zYTAyZTAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BrdF9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGt0X3NjaGVkLmgKQEAgLTIyMyw3ICsyMjMsNyBAQAogCV9fdTMyCQlsaW1pdDsgICAgICAgIC8qIEhBUkQgbWF4aW1hbCBxdWV1ZSBsZW5ndGggKGJ5dGVzKSAgICAqLwogCV9fdTMyCQlxdGhfbWluOyAgICAgIC8qIE1pbiBhdmVyYWdlIGxlbmd0aCB0aHJlc2hvbGQgKGJ5dGVzKSAqLwogCV9fdTMyCQlxdGhfbWF4OyAgICAgIC8qIE1heCBhdmVyYWdlIGxlbmd0aCB0aHJlc2hvbGQgKGJ5dGVzKSAqLwotCV9fdTMyCQlEUDsgICAgICAgICAgIC8qIHVwdG8gMl4zMiBEUHMgKi8KKwlfX3UzMgkJRFA7ICAgICAgICAgICAvKiB1cCB0byAyXjMyIERQcyAqLwogCV9fdTMyCQliYWNrbG9nOwogCV9fdTMyCQlxYXZlOwogCV9fdTMyCQlmb3JjZWQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaAppbmRleCBkOTZkYjk4Li43NDQ5NDJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKQEAgLTE0LDYgKzE0LDggQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KIAorc3RydWN0IG1mZF9jZWxsOworCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHsKIAljb25zdCBjaGFyCSogbmFtZTsKIAlpbnQJCWlkOwpAQCAtMjMsNiArMjUsOSBAQAogCiAJY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZAkqaWRfZW50cnk7CiAKKwkvKiBNRkQgY2VsbCBwb2ludGVyICovCisJc3RydWN0IG1mZF9jZWxsICptZmRfY2VsbDsKKwogCS8qIGFyY2ggc3BlY2lmaWMgYWRkaXRpb25zICovCiAJc3RydWN0IHBkZXZfYXJjaGRhdGEJYXJjaGRhdGE7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wb2xsLmggYi9pbmNsdWRlL2xpbnV4L3BvbGwuaAppbmRleCAxYTJjY2Q2Li5jZjQwMDEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BvbGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BvbGwuaApAQCAtODIsNyArODIsNyBAQAogfQogCiAvKgotICogU2NhbGVhYmxlIHZlcnNpb24gb2YgdGhlIGZkX3NldC4KKyAqIFNjYWxhYmxlIHZlcnNpb24gb2YgdGhlIGZkX3NldC4KICAqLwogCiB0eXBlZGVmIHN0cnVjdCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bvc2l4LWNsb2NrLmggYi9pbmNsdWRlL2xpbnV4L3Bvc2l4LWNsb2NrLmgKaW5kZXggMzY5ZTE5ZC4uN2YxMTgzZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wb3NpeC1jbG9jay5oCisrKyBiL2luY2x1ZGUvbGludXgvcG9zaXgtY2xvY2suaApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4LXRpbWVycy5oPgorI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CiAKIHN0cnVjdCBwb3NpeF9jbG9jazsKIApAQCAtMTA0LDcgKzEwNSw3IEBACiAgKiBAb3BzOiAgICAgRnVuY3Rpb25hbCBpbnRlcmZhY2UgdG8gdGhlIGNsb2NrCiAgKiBAY2RldjogICAgQ2hhcmFjdGVyIGRldmljZSBpbnN0YW5jZSBmb3IgdGhpcyBjbG9jawogICogQGtyZWY6ICAgIFJlZmVyZW5jZSBjb3VudC4KLSAqIEBtdXRleDogICBQcm90ZWN0cyB0aGUgJ3pvbWJpZScgZmllbGQgZnJvbSBjb25jdXJyZW50IGFjY2Vzcy4KKyAqIEByd3NlbTogICBQcm90ZWN0cyB0aGUgJ3pvbWJpZScgZmllbGQgZnJvbSBjb25jdXJyZW50IGFjY2Vzcy4KICAqIEB6b21iaWU6ICBJZiAnem9tYmllJyBpcyB0cnVlLCB0aGVuIHRoZSBoYXJkd2FyZSBoYXMgZGlzYXBwZWFyZWQuCiAgKiBAcmVsZWFzZTogQSBmdW5jdGlvbiB0byBmcmVlIHRoZSBzdHJ1Y3R1cmUgd2hlbiB0aGUgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMKICAqICAgICAgICAgICB6ZXJvLiBNYXkgYmUgTlVMTCBpZiBzdHJ1Y3R1cmUgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuCkBAIC0xMTcsNyArMTE4LDcgQEAKIAlzdHJ1Y3QgcG9zaXhfY2xvY2tfb3BlcmF0aW9ucyBvcHM7CiAJc3RydWN0IGNkZXYgY2RldjsKIAlzdHJ1Y3Qga3JlZiBrcmVmOwotCXN0cnVjdCBtdXRleCBtdXRleDsKKwlzdHJ1Y3Qgcndfc2VtYXBob3JlIHJ3c2VtOwogCWJvb2wgem9tYmllOwogCXZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgcG9zaXhfY2xvY2sgKmNsayk7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcmVmZXRjaC5oIGIvaW5jbHVkZS9saW51eC9wcmVmZXRjaC5oCmluZGV4IGFmN2MzNmEuLmEzYmZiZGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHJlZmV0Y2guaAorKysgYi9pbmNsdWRlL2xpbnV4L3ByZWZldGNoLmgKQEAgLTI5LDcgKzI5LDcgQEAKIAlwcmVmZXRjaHcoeCkJLSBwcmVmZXRjaGVzIHRoZSBjYWNoZWxpbmUgYXQgIngiIGZvciB3cml0ZQogCXNwaW5fbG9ja19wcmVmZXRjaCh4KSAtIHByZWZldGNoZXMgdGhlIHNwaW5sb2NrICp4IGZvciB0YWtpbmcKIAkKLQl0aGVyZSBpcyBhbHNvIFBSRUZFVENIX1NUUklERSB3aGljaCBpcyB0aGUgYXJjaGl0ZWN1cmUtcHJlZmVyZWQgCisJdGhlcmUgaXMgYWxzbyBQUkVGRVRDSF9TVFJJREUgd2hpY2ggaXMgdGhlIGFyY2hpdGVjdXJlLXByZWZlcnJlZCAKIAkibG9va2FoZWFkIiBzaXplIGZvciBwcmVmZXRjaGluZyBzdHJlYW1lZCBvcGVyYXRpb25zLgogCQogKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHJvY19mcy5oIGIvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgKaW5kZXggODM4YzExNC4uZWFmNDM1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgKQEAgLTIwOCw2ICsyMDgsOCBAQAogCQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcmVudCxjb25zdCBjaGFyICpkZXN0KSB7cmV0dXJuIE5VTEw7fQogc3RhdGljIGlubGluZSBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfbWtkaXIoY29uc3QgY2hhciAqbmFtZSwKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcmVudCkge3JldHVybiBOVUxMO30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX21rZGlyX21vZGUoY29uc3QgY2hhciAqbmFtZSwKKwltb2RlX3QgbW9kZSwgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwYXJlbnQpIHsgcmV0dXJuIE5VTEw7IH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoY29uc3QgY2hhciAqbmFtZSwKIAltb2RlX3QgbW9kZSwgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpiYXNlLCAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHN0b3JlLmggYi9pbmNsdWRlL2xpbnV4L3BzdG9yZS5oCmluZGV4IDQxOTc3NzMuLjI0NTVlZjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHN0b3JlLmgKKysrIGIvaW5jbHVkZS9saW51eC9wc3RvcmUuaApAQCAtMzUsNyArMzUsOSBAQAogCXN0cnVjdCBtdXRleAlidWZfbXV0ZXg7CS8qIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gJ2J1ZicgKi8KIAljaGFyCQkqYnVmOwogCXNpemVfdAkJYnVmc2l6ZTsKLQlzaXplX3QJCSgqcmVhZCkodTY0ICppZCwgZW51bSBwc3RvcmVfdHlwZV9pZCAqdHlwZSwKKwlpbnQJCSgqb3Blbikoc3RydWN0IHBzdG9yZV9pbmZvICpwc2kpOworCWludAkJKCpjbG9zZSkoc3RydWN0IHBzdG9yZV9pbmZvICpwc2kpOworCXNzaXplX3QJCSgqcmVhZCkodTY0ICppZCwgZW51bSBwc3RvcmVfdHlwZV9pZCAqdHlwZSwKIAkJCXN0cnVjdCB0aW1lc3BlYyAqdGltZSk7CiAJdTY0CQkoKndyaXRlKShlbnVtIHBzdG9yZV90eXBlX2lkIHR5cGUsIHNpemVfdCBzaXplKTsKIAlpbnQJCSgqZXJhc2UpKHU2NCBpZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9wdHJhY2UuaAppbmRleCBhMTE0N2U1Li45MTc4ZDVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcHRyYWNlLmgKQEAgLTE4OSw2ICsxODksMTAgQEAKIAkJY2hpbGQtPnB0cmFjZSA9IGN1cnJlbnQtPnB0cmFjZTsKIAkJX19wdHJhY2VfbGluayhjaGlsZCwgY3VycmVudC0+cGFyZW50KTsKIAl9CisKKyNpZmRlZiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UCisJYXRvbWljX3NldCgmY2hpbGQtPnB0cmFjZV9icF9yZWZjbnQsIDEpOworI2VuZGlmCiB9CiAKIC8qKgpAQCAtMzUwLDYgKzM1NCwxMyBAQAogCQkJCXVuc2lnbmVkIGxvbmcgYXJnc1s2XSwgdW5zaWduZWQgaW50IG1heGFyZ3MsCiAJCQkJdW5zaWduZWQgbG9uZyAqc3AsIHVuc2lnbmVkIGxvbmcgKnBjKTsKIAotI2VuZGlmCisjaWZkZWYgQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVAorZXh0ZXJuIGludCBwdHJhY2VfZ2V0X2JyZWFrcG9pbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKK2V4dGVybiB2b2lkIHB0cmFjZV9wdXRfYnJlYWtwb2ludHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdHJhY2VfcHV0X2JyZWFrcG9pbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH0KKyNlbmRpZiAvKiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UICovCisKKyNlbmRpZiAvKiBfX0tFUk5FTCAqLwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHhhMnh4X3NzcC5oIGIvaW5jbHVkZS9saW51eC9weGEyeHhfc3NwLmgKaW5kZXggMmY2OTFlNC4uNDQ4MzVmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9weGEyeHhfc3NwLmgKKysrIGIvaW5jbHVkZS9saW51eC9weGEyeHhfc3NwLmgKQEAgLTEyMiw3ICsxMjIsNyBAQAogI2RlZmluZSBTU0NSMV9UU1JFCQkoMSA8PCAyMSkJLyogVHJhbnNtaXQgU2VydmljZSBSZXF1ZXN0IEVuYWJsZSAqLwogI2RlZmluZSBTU0NSMV9SU1JFCQkoMSA8PCAyMCkJLyogUmVjZWl2ZSBTZXJ2aWNlIFJlcXVlc3QgRW5hYmxlICovCiAjZGVmaW5lIFNTQ1IxX1RJTlRFCQkoMSA8PCAxOSkJLyogUmVjZWl2ZXIgVGltZS1vdXQgSW50ZXJydXB0IGVuYWJsZSAqLwotI2RlZmluZSBTU0NSMV9QSU5URQkJKDEgPDwgMTgpCS8qIFBlcmlwaGVyYWwgVHJhaWxpbmcgQnl0ZSBJbnRlcnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgU1NDUjFfUElOVEUJCSgxIDw8IDE4KQkvKiBQZXJpcGhlcmFsIFRyYWlsaW5nIEJ5dGUgSW50ZXJydXB0IEVuYWJsZSAqLwogI2RlZmluZSBTU0NSMV9JRlMJCSgxIDw8IDE2KQkvKiBJbnZlcnQgRnJhbWUgU2lnbmFsICovCiAjZGVmaW5lIFNTQ1IxX1NUUkYJCSgxIDw8IDE1KQkvKiBTZWxlY3QgRklGTyBvciBFRldSICovCiAjZGVmaW5lIFNTQ1IxX0VGV1IJCSgxIDw8IDE0KQkvKiBFbmFibGUgRklGTyBXcml0ZS9SZWFkICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfcC5oIGIvaW5jbHVkZS9saW51eC9yYWlkL21kX3AuaAppbmRleCBmZmEyZWZiLi43NWNiZjRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfcC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9tZF9wLmgKQEAgLTI1MSw3ICsyNTEsNyBAQAogCV9fbGU2NAl1dGltZTsJCS8qIDQwIGJpdHMgc2Vjb25kLCAyNCBidGVzIG1pY3Jvc2Vjb25kcyAqLwogCV9fbGU2NAlldmVudHM7CQkvKiBpbmNyZW1lbnRlZCB3aGVuIHN1cGVyYmxvY2sgdXBkYXRlZCAqLwogCV9fbGU2NAlyZXN5bmNfb2Zmc2V0OwkvKiBkYXRhIGJlZm9yZSB0aGlzIG9mZnNldCAoZnJvbSBkYXRhX29mZnNldCkga25vd24gdG8gYmUgaW4gc3luYyAqLwotCV9fbGUzMglzYl9jc3VtOwkvKiBjaGVja3N1bSB1cHRvIGRldnNbbWF4X2Rldl0gKi8KKwlfX2xlMzIJc2JfY3N1bTsJLyogY2hlY2tzdW0gdXAgdG8gZGV2c1ttYXhfZGV2XSAqLwogCV9fbGUzMgltYXhfZGV2OwkvKiBzaXplIG9mIGRldnNbXSBhcnJheSB0byBjb25zaWRlciAqLwogCV9fdTgJcGFkM1s2NC0zMl07CS8qIHNldCB0byAwIHdoZW4gd3JpdGluZyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKaW5kZXggMGEzODQyYS4uZWNhNzVkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaApAQCAtMTU1Nyw3ICsxNTU3LDcgQEAKIC8qIFdoZW4gaW5zZXJ0aW5nIGFuIGl0ZW0uICovCiAjZGVmaW5lIE1fSU5TRVJUCSdpJwogLyogV2hlbiBpbnNlcnRpbmcgaW50byAoZGlyZWN0b3JpZXMgb25seSkgb3IgYXBwZW5kaW5nIG9udG8gYW4gYWxyZWFkeQotICAgZXhpc3RhbnQgaXRlbS4gKi8KKyAgIGV4aXN0ZW50IGl0ZW0uICovCiAjZGVmaW5lIE1fUEFTVEUJCSdwJwogLyogV2hlbiBkZWxldGluZyBhbiBpdGVtLiAqLwogI2RlZmluZSBNX0RFTEVURQknZCcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmlvLmggYi9pbmNsdWRlL2xpbnV4L3Jpby5oCmluZGV4IDRlMzdhN2MuLjRkNTA2MTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9yaW8uaApAQCAtMzk2LDcgKzM5Niw3IEBACiB9OwogCiAvKiBBcmNoaXRlY3R1cmUgYW5kIGhhcmR3YXJlLXNwZWNpZmljIGZ1bmN0aW9ucyAqLwotZXh0ZXJuIHZvaWQgcmlvX3JlZ2lzdGVyX21wb3J0KHN0cnVjdCByaW9fbXBvcnQgKik7CitleHRlcm4gaW50IHJpb19yZWdpc3Rlcl9tcG9ydChzdHJ1Y3QgcmlvX21wb3J0ICopOwogZXh0ZXJuIGludCByaW9fb3Blbl9pbmJfbWJveChzdHJ1Y3QgcmlvX21wb3J0ICosIHZvaWQgKiwgaW50LCBpbnQpOwogZXh0ZXJuIHZvaWQgcmlvX2Nsb3NlX2luYl9tYm94KHN0cnVjdCByaW9fbXBvcnQgKiwgaW50KTsKIGV4dGVybiBpbnQgcmlvX29wZW5fb3V0Yl9tYm94KHN0cnVjdCByaW9fbXBvcnQgKiwgdm9pZCAqLCBpbnQsIGludCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Jpb19pZHMuaCBiL2luY2x1ZGUvbGludXgvcmlvX2lkcy5oCmluZGV4IDc0MTBkMzMuLjBjZWUwMTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmlvX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcmlvX2lkcy5oCkBAIC0zNSw2ICszNSw3IEBACiAjZGVmaW5lIFJJT19ESURfSURUQ1BTNlEJCTB4MDM1ZgogI2RlZmluZSBSSU9fRElEX0lEVENQUzEwUQkJMHgwMzVlCiAjZGVmaW5lIFJJT19ESURfSURUQ1BTMTg0OAkJMHgwMzc0CisjZGVmaW5lIFJJT19ESURfSURUQ1BTMTQzMgkJMHgwMzc1CiAjZGVmaW5lIFJJT19ESURfSURUQ1BTMTYxNgkJMHgwMzc5CiAjZGVmaW5lIFJJT19ESURfSURUVlBTMTYxNgkJMHgwMzc3CiAjZGVmaW5lIFJJT19ESURfSURUU1BTMTYxNgkJMHgwMzc4CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0Yy5oIGIvaW5jbHVkZS9saW51eC9ydGMuaAppbmRleCAyY2E3ZThhLi44NzdlY2U0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3J0Yy5oCisrKyBiL2luY2x1ZGUvbGludXgvcnRjLmgKQEAgLTIyOCw2ICsyMjgsOCBAQAogCQkJc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pOwogZXh0ZXJuIGludCBydGNfc2V0X2FsYXJtKHN0cnVjdCBydGNfZGV2aWNlICpydGMsCiAJCQkJc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pOworZXh0ZXJuIGludCBydGNfaW5pdGlhbGl6ZV9hbGFybShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLAorCQkJCXN0cnVjdCBydGNfd2thbHJtICphbHJtKTsKIGV4dGVybiB2b2lkIHJ0Y191cGRhdGVfaXJxKHN0cnVjdCBydGNfZGV2aWNlICpydGMsCiAJCQl1bnNpZ25lZCBsb25nIG51bSwgdW5zaWduZWQgbG9uZyBldmVudHMpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggODNiZDJlMi4uNzgxYWJkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtODU0LDcgKzg1NCw3IEBACiAKIC8qCiAgKiBPcHRpbWlzZSBTRCBmbGFncyBmb3IgcG93ZXIgc2F2aW5nczoKLSAqIFNEX0JBTEFOQ0VfTkVXSURMRSBoZWxwcyBhZ3Jlc3NpdmUgdGFzayBjb25zb2xpZGF0aW9uIGFuZCBwb3dlciBzYXZpbmdzLgorICogU0RfQkFMQU5DRV9ORVdJRExFIGhlbHBzIGFnZ3Jlc3NpdmUgdGFzayBjb25zb2xpZGF0aW9uIGFuZCBwb3dlciBzYXZpbmdzLgogICogS2VlcCBkZWZhdWx0IFNEIGZsYWdzIGlmIHNjaGVkX3tzbXQsbWN9X3Bvd2VyX3NhdmluZz0wCiAgKi8KIApAQCAtMTI1NCw2ICsxMjU0LDkgQEAKICNlbmRpZgogCiAJc3RydWN0IG1tX3N0cnVjdCAqbW0sICphY3RpdmVfbW07CisjaWZkZWYgQ09ORklHX0NPTVBBVF9CUksKKwl1bnNpZ25lZCBicmtfcmFuZG9taXplZDoxOworI2VuZGlmCiAjaWYgZGVmaW5lZChTUExJVF9SU1NfQ09VTlRJTkcpCiAJc3RydWN0IHRhc2tfcnNzX3N0YXQJcnNzX3N0YXQ7CiAjZW5kaWYKQEAgLTE1MzQsNiArMTUzNyw5IEBACiAJCXVuc2lnbmVkIGxvbmcgbWVtc3dfbnJfcGFnZXM7IC8qIHVuY2hhcmdlZCBtZW0rc3dhcCB1c2FnZSAqLwogCX0gbWVtY2dfYmF0Y2g7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UCisJYXRvbWljX3QgcHRyYWNlX2JwX3JlZmNudDsKKyNlbmRpZgogfTsKIAogLyogRnV0dXJlLXNhZmUgYWNjZXNzb3IgZm9yIHN0cnVjdCB0YXNrX3N0cnVjdCdzIGNwdXNfYWxsb3dlZC4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCBjYTAyZjE3Li44Y2U1OWVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCkBAIC0xNDU2LDcgKzE0NTYsNyBAQAogCQkJICAgICBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpOwogCWludCAoKmlub2RlX3JlYWRsaW5rKSAoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIAlpbnQgKCppbm9kZV9mb2xsb3dfbGluaykgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpOwotCWludCAoKmlub2RlX3Blcm1pc3Npb24pIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7CisJaW50ICgqaW5vZGVfcGVybWlzc2lvbikgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBmbGFncyk7CiAJaW50ICgqaW5vZGVfc2V0YXR0cikJKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKTsKIAlpbnQgKCppbm9kZV9nZXRhdHRyKSAoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiAJaW50ICgqaW5vZGVfc2V0eGF0dHIpIChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCBkOWU1MmZhLi5kMGFlOTBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTQ3NCw3ICs0NzQsNyBAQAogZXh0ZXJuIHZvaWQgc2tiX2RzdF9zZXRfbm9yZWYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGRzdF9lbnRyeSAqZHN0KTsKIAogLyoqCi0gKiBza2JfZHN0X2lzX25vcmVmIC0gVGVzdCBpZiBza2IgZHN0IGlzbnQgcmVmY291bnRlZAorICogc2tiX2RzdF9pc19ub3JlZiAtIFRlc3QgaWYgc2tiIGRzdCBpc24ndCByZWZjb3VudGVkCiAgKiBAc2tiOiBidWZmZXIKICAqLwogc3RhdGljIGlubGluZSBib29sIHNrYl9kc3RfaXNfbm9yZWYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc21jOTF4LmggYi9pbmNsdWRlL2xpbnV4L3NtYzkxeC5oCmluZGV4IGJjMjFkYjUuLjc2MTk5YjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc21jOTF4LmgKKysrIGIvaW5jbHVkZS9saW51eC9zbWM5MXguaApAQCAtMjEsNyArMjEsNyBAQAogI2RlZmluZSBSUENfTEVEXzEwCSgweDAyKQkvKiBMRUQgPSAxME1icHMgbGluayBkZXRlY3QgKi8KICNkZWZpbmUgUlBDX0xFRF9GRAkoMHgwMykJLyogTEVEID0gRnVsbCBEdXBsZXggTW9kZSAqLwogI2RlZmluZSBSUENfTEVEX1RYX1JYCSgweDA0KQkvKiBMRUQgPSBUWCBvciBSWCBwYWNrZXQgb2NjdXJyZWQgKi8KLSNkZWZpbmUgUlBDX0xFRF8xMDAJKDB4MDUpCS8qIExFRCA9IDEwME1icHMgbGluayBkZWN0ZWN0ICovCisjZGVmaW5lIFJQQ19MRURfMTAwCSgweDA1KQkvKiBMRUQgPSAxMDBNYnBzIGxpbmsgZGV0ZWN0ICovCiAjZGVmaW5lIFJQQ19MRURfVFgJKDB4MDYpCS8qIExFRCA9IFRYIHBhY2tldCBvY2N1cnJlZCAqLwogI2RlZmluZSBSUENfTEVEX1JYCSgweDA3KQkvKiBMRUQgPSBSWCBwYWNrZXQgb2NjdXJyZWQgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaCBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKaW5kZXggZWRiYjFkMC4uZDJiNWU5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCkBAIC04OCw3ICs4OCw3IEBACiB9OwogCiAvKgotICoJQW5jaWxsaWFyeSBkYXRhIG9iamVjdCBpbmZvcm1hdGlvbiBNQUNST1MKKyAqCUFuY2lsbGFyeSBkYXRhIG9iamVjdCBpbmZvcm1hdGlvbiBNQUNST1MKICAqCVRhYmxlIDUtMTQgb2YgUE9TSVggMTAwMy4xZwogICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc291bmRjYXJkLmggYi9pbmNsdWRlL2xpbnV4L3NvdW5kY2FyZC5oCmluZGV4IDE5MDRhZmUuLmZlMjA0ZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc291bmRjYXJkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zb3VuZGNhcmQuaApAQCAtMTIzMSw3ICsxMjMxLDcgQEAKICNkZWZpbmUgU0VRX1BBTk5JTkcoZGV2LCB2b2ljZSwgcG9zKSBTRVFfQ09OVFJPTChkZXYsIHZvaWNlLCBDVExfUEFOLCAocG9zKzEyOCkgLyAyKQogCiAvKgotICogVGltaW5nIGFuZCBzeW5jcm9uaXphdGlvbiBtYWNyb3MKKyAqIFRpbWluZyBhbmQgc3luY2hyb25pemF0aW9uIG1hY3JvcwogICovCiAKICNkZWZpbmUgX1RJTUVSX0VWRU5UKGV2LCBwYXJtKQkJe19TRVFfTkVFREJVRig4KTtcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9zcGlkZXYuaCBiL2luY2x1ZGUvbGludXgvc3BpL3NwaWRldi5oCmluZGV4IGJmMDU3MGEuLjUyZDllZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpL3NwaWRldi5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpL3NwaWRldi5oCkBAIC02Niw3ICs2Niw3IEBACiAgKiBhcmUgaW4gYSBkaWZmZXJlbnQgYWRkcmVzcyBzcGFjZSAoYW5kIG1heSBiZSBvZiBkaWZmZXJlbnQgc2l6ZXMgaW4gc29tZQogICogY2FzZXMsIHN1Y2ggYXMgMzItYml0IGkzODYgdXNlcnNwYWNlIG92ZXIgYSA2NC1iaXQgeDg2XzY0IGtlcm5lbCkuCiAgKiBaZXJvLWluaXRpYWxpemUgdGhlIHN0cnVjdHVyZSwgaW5jbHVkaW5nIGN1cnJlbnRseSB1bnVzZWQgZmllbGRzLCB0bwotICogYWNjb21vZGF0ZSBwb3RlbnRpYWwgZnV0dXJlIHVwZGF0ZXMuCisgKiBhY2NvbW1vZGF0ZSBwb3RlbnRpYWwgZnV0dXJlIHVwZGF0ZXMuCiAgKgogICogU1BJX0lPQ19NRVNTQUdFIGdpdmVzIHVzZXJzcGFjZSB0aGUgZXF1aXZhbGVudCBvZiBrZXJuZWwgc3BpX3N5bmMoKS4KICAqIFBhc3MgaXQgYW4gYXJyYXkgb2YgcmVsYXRlZCB0cmFuc2ZlcnMsIHRoZXknbGwgZXhlY3V0ZSB0b2dldGhlci4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaCBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaAppbmRleCA4MGU1MzU4Li4wYjIyZDUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGlubG9jay5oCkBAIC04MSw3ICs4MSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfdHlwZXMuaD4KIAogLyoKLSAqIFB1bGwgdGhlIGFyY2hfc3BpbiooKSBmdW5jdGlvbnMvZGVjbGFyYXRpb25zIChVUC1ub25kZWJ1ZyBkb2VzbnQgbmVlZCB0aGVtKToKKyAqIFB1bGwgdGhlIGFyY2hfc3BpbiooKSBmdW5jdGlvbnMvZGVjbGFyYXRpb25zIChVUC1ub25kZWJ1ZyBkb2Vzbid0IG5lZWQgdGhlbSk6CiAgKi8KICNpZmRlZiBDT05GSUdfU01QCiAjIGluY2x1ZGUgPGFzbS9zcGlubG9jay5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdG1tYWMuaCBiL2luY2x1ZGUvbGludXgvc3RtbWFjLmgKaW5kZXggZTEwMzUyOS4uZjI5MTk3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdG1tYWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N0bW1hYy5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIF9fU1RNTUFDX1BMQVRGT1JNX0RBVEEKICNkZWZpbmUgX19TVE1NQUNfUExBVEZPUk1fREFUQQogCi0vKiBwbGF0ZnJvbSBkYXRhIGZvciBwbGF0ZnJvbSBkZXZpY2Ugc3RydWN0dXJlJ3MgcGxhdGZyb21fZGF0YSBmaWVsZCAqLworLyogcGxhdGZvcm0gZGF0YSBmb3IgcGxhdGZvcm0gZGV2aWNlIHN0cnVjdHVyZSdzIHBsYXRmb3JtX2RhdGEgZmllbGQgKi8KIAogLyogUHJpdmF0ZSBkYXRhIGZvciB0aGUgU1RNIG9uLWJvYXJkIGV0aGVybmV0IGRyaXZlciAqLwogc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RvcF9tYWNoaW5lLmggYi9pbmNsdWRlL2xpbnV4L3N0b3BfbWFjaGluZS5oCmluZGV4IDE4MDg5NjAuLjA5MmRjOWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3RvcF9tYWNoaW5lLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdG9wX21hY2hpbmUuaApAQCAtMTA1LDcgKzEwNSw3IEBACiAgKiBAY3B1czogdGhlIGNwdXMgdG8gcnVuIHRoZSBAZm4oKSBvbiAoTlVMTCA9IGFueSBvbmxpbmUgY3B1KQogICoKICAqIERlc2NyaXB0aW9uOiBUaGlzIGNhdXNlcyBhIHRocmVhZCB0byBiZSBzY2hlZHVsZWQgb24gZXZlcnkgY3B1LAotICogZWFjaCBvZiB3aGljaCBkaXNhYmxlcyBpbnRlcnJ1cHRzLiAgVGhlIHJlc3VsdCBpcyB0aGF0IG5vb25lIGlzCisgKiBlYWNoIG9mIHdoaWNoIGRpc2FibGVzIGludGVycnVwdHMuICBUaGUgcmVzdWx0IGlzIHRoYXQgbm8gb25lIGlzCiAgKiBob2xkaW5nIGEgc3BpbmxvY2sgb3IgaW5zaWRlIGFueSBvdGhlciBwcmVlbXB0LWRpc2FibGVkIHJlZ2lvbiB3aGVuCiAgKiBAZm4oKSBydW5zLgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL2NhY2hlLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9jYWNoZS5oCmluZGV4IDc4OThlYTEuLjhkMmVlZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL2NhY2hlLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvY2FjaGUuaApAQCAtMzUsMTAgKzM1LDEwIEBACiAgKiBFYWNoIGNhY2hlIG11c3QgYmUgcmVnaXN0ZXJlZCBzbyB0aGF0IGl0IGNhbiBiZSBjbGVhbmVkIHJlZ3VsYXJseS4KICAqIFdoZW4gdGhlIGNhY2hlIGlzIHVucmVnaXN0ZXJlZCwgaXQgaXMgZmx1c2hlZCBjb21wbGV0ZWx5LgogICoKLSAqIEVudHJpZXMgaGF2ZSBhIHJlZiBjb3VudCBhbmQgYSAnaGFzaGVkJyBmbGFnIHdoaWNoIGNvdW50cyB0aGUgZXhpc3RhbmNlCisgKiBFbnRyaWVzIGhhdmUgYSByZWYgY291bnQgYW5kIGEgJ2hhc2hlZCcgZmxhZyB3aGljaCBjb3VudHMgdGhlIGV4aXN0ZW5jZQogICogaW4gdGhlIGhhc2ggdGFibGUuCiAgKiBXZSBvbmx5IGV4cGlyZSBlbnRyaWVzIHdoZW4gcmVmY291bnQgaXMgemVyby4KLSAqIEV4aXN0YW5jZSBpbiB0aGUgY2FjaGUgaXMgY291bnRlZCAgdGhlIHJlZmNvdW50LgorICogRXhpc3RlbmNlIGluIHRoZSBjYWNoZSBpcyBjb3VudGVkICB0aGUgcmVmY291bnQuCiAgKi8KIAogLyogRXZlcnkgY2FjaGUgaXRlbSBoYXMgYSBjb21tb24gaGVhZGVyIHRoYXQgaXMgdXNlZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3NjaGVkLmgKaW5kZXggZDgxZGI4MC4uZjczYzQ4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zY2hlZC5oCkBAIC0xMjcsMTMgKzEyNywxNiBAQAogI2RlZmluZSBSUENfVEFTS19LSUxMRUQJCTB4MDEwMAkJLyogdGFzayB3YXMga2lsbGVkICovCiAjZGVmaW5lIFJQQ19UQVNLX1NPRlQJCTB4MDIwMAkJLyogVXNlIHNvZnQgdGltZW91dHMgKi8KICNkZWZpbmUgUlBDX1RBU0tfU09GVENPTk4JMHgwNDAwCQkvKiBGYWlsIGlmIGNhbid0IGNvbm5lY3QgKi8KKyNkZWZpbmUgUlBDX1RBU0tfU0VOVAkJMHgwODAwCQkvKiBtZXNzYWdlIHdhcyBzZW50ICovCisjZGVmaW5lIFJQQ19UQVNLX1RJTUVPVVQJMHgxMDAwCQkvKiBmYWlsIHdpdGggRVRJTUVET1VUIG9uIHRpbWVvdXQgKi8KIAogI2RlZmluZSBSUENfSVNfQVNZTkModCkJCSgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfQVNZTkMpCiAjZGVmaW5lIFJQQ19JU19TV0FQUEVSKHQpCSgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfU1dBUFBFUikKICNkZWZpbmUgUlBDX0RPX1JPT1RPVkVSUklERSh0KQkoKHQpLT50a19mbGFncyAmIFJQQ19UQVNLX1JPT1RDUkVEUykKICNkZWZpbmUgUlBDX0FTU0FTU0lOQVRFRCh0KQkoKHQpLT50a19mbGFncyAmIFJQQ19UQVNLX0tJTExFRCkKLSNkZWZpbmUgUlBDX0lTX1NPRlQodCkJCSgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfU09GVCkKKyNkZWZpbmUgUlBDX0lTX1NPRlQodCkJCSgodCktPnRrX2ZsYWdzICYgKFJQQ19UQVNLX1NPRlR8UlBDX1RBU0tfVElNRU9VVCkpCiAjZGVmaW5lIFJQQ19JU19TT0ZUQ09OTih0KQkoKHQpLT50a19mbGFncyAmIFJQQ19UQVNLX1NPRlRDT05OKQorI2RlZmluZSBSUENfV0FTX1NFTlQodCkJCSgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfU0VOVCkKIAogI2RlZmluZSBSUENfVEFTS19SVU5OSU5HCTAKICNkZWZpbmUgUlBDX1RBU0tfUVVFVUVECQkxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNhdXRoX2dzcy5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjYXV0aF9nc3MuaAppbmRleCBjYTdkNzI1Li44M2JiZWUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNhdXRoX2dzcy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y2F1dGhfZ3NzLmgKQEAgLTIsNyArMiw3IEBACiAgKiBsaW51eC9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNhdXRoX2dzcy5oCiAgKgogICogQnJ1Y2UgRmllbGRzIDxiZmllbGRzQHVtaWNoLmVkdT4KLSAqIENvcHlyaWdodCAoYykgMjAwMiBUaGUgUmVnZW50cyBvZiB0aGUgVW52aWVyc2l0eSBvZiBNaWNoaWdhbgorICogQ29weXJpZ2h0IChjKSAyMDAyIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIE1pY2hpZ2FuCiAgKi8KIAogI2lmbmRlZiBfTElOVVhfU1VOUlBDX1NWQ0FVVEhfR1NTX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oIGIvaW5jbHVkZS9saW51eC9zdXNwZW5kLmgKaW5kZXggNWE4OWUzNi4uMDgzZmZlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdXNwZW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdXNwZW5kLmgKQEAgLTI0OSw2ICsyNDksOCBAQAogZXh0ZXJuIGludCBoaWJlcm5hdGUodm9pZCk7CiBleHRlcm4gYm9vbCBzeXN0ZW1fZW50ZXJpbmdfaGliZXJuYXRpb24odm9pZCk7CiAjZWxzZSAvKiBDT05GSUdfSElCRVJOQVRJT04gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByZWdpc3Rlcl9ub3NhdmVfcmVnaW9uKHVuc2lnbmVkIGxvbmcgYiwgdW5zaWduZWQgbG9uZyBlKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX25vc2F2ZV9yZWdpb25fbGF0ZSh1bnNpZ25lZCBsb25nIGIsIHVuc2lnbmVkIGxvbmcgZSkge30KIHN0YXRpYyBpbmxpbmUgaW50IHN3c3VzcF9wYWdlX2lzX2ZvcmJpZGRlbihzdHJ1Y3QgcGFnZSAqcCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIHN3c3VzcF9zZXRfcGFnZV9mcmVlKHN0cnVjdCBwYWdlICpwKSB7fQogc3RhdGljIGlubGluZSB2b2lkIHN3c3VzcF91bnNldF9wYWdlX2ZyZWUoc3RydWN0IHBhZ2UgKnApIHt9CkBAIC0yOTcsMTQgKzI5OSw3IEBACiAKIGV4dGVybiBzdHJ1Y3QgbXV0ZXggcG1fbXV0ZXg7CiAKLSNpZm5kZWYgQ09ORklHX0hJQkVSTkFUSU9OCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJfbm9zYXZlX3JlZ2lvbih1bnNpZ25lZCBsb25nIGIsIHVuc2lnbmVkIGxvbmcgZSkKLXsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCByZWdpc3Rlcl9ub3NhdmVfcmVnaW9uX2xhdGUodW5zaWduZWQgbG9uZyBiLCB1bnNpZ25lZCBsb25nIGUpCi17Ci19Ci0KKyNpZm5kZWYgQ09ORklHX0hJQkVSTkFURV9DQUxMQkFDS1MKIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2NrX3N5c3RlbV9zbGVlcCh2b2lkKSB7fQogc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19zeXN0ZW1fc2xlZXAodm9pZCkge30KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNkZXYuaCBiL2luY2x1ZGUvbGludXgvc3lzZGV2LmgKaW5kZXggOGE3NWRhNS4uZGZiMDc4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2Rldi5oCkBAIC03LDEzICs3LDEzIEBACiAgKiBXZSBzdGlsbCBoYXZlIGEgbm90aW9uIG9mIGEgZHJpdmVyIGZvciBhIHN5c3RlbSBkZXZpY2UsIGJlY2F1c2Ugd2Ugc3RpbGwKICAqIHdhbnQgdG8gcGVyZm9ybSBiYXNpYyBvcGVyYXRpb25zIG9uIHRoZXNlIGRldmljZXMuIAogICoKLSAqIFdlIGFsc28gc3VwcG9ydCBhdXhpbGxhcnkgZHJpdmVycyBiaW5kaW5nIHRvIGRldmljZXMgb2YgYSBjZXJ0YWluIGNsYXNzLgorICogV2UgYWxzbyBzdXBwb3J0IGF1eGlsaWFyeSBkcml2ZXJzIGJpbmRpbmcgdG8gZGV2aWNlcyBvZiBhIGNlcnRhaW4gY2xhc3MuCiAgKiAKICAqIFRoaXMgYWxsb3dzIGNvbmZpZ3VyYWJsZSBkcml2ZXJzIHRvIHJlZ2lzdGVyIHRoZW1zZWx2ZXMgZm9yIGRldmljZXMgb2YKICAqIGEgY2VydGFpbiB0eXBlLiBBbmQsIGl0IGFsbG93cyBjbGFzcyBkZWZpbml0aW9ucyB0byByZXNpZGUgaW4gZ2VuZXJpYwogICogY29kZSB3aGlsZSBhcmNoLXNwZWNpZmljIGNvZGUgY2FuIHJlZ2lzdGVyIHNwZWNpZmljIGRyaXZlcnMuCiAgKgotICogQXV4aWxsYXJ5IGRyaXZlcnMgcmVnaXN0ZXJlZCB3aXRoIGEgTlVMTCBjbHMgYXJlIHJlZ2lzdGVyZWQgYXMgZHJpdmVycworICogQXV4aWxpYXJ5IGRyaXZlcnMgcmVnaXN0ZXJlZCB3aXRoIGEgTlVMTCBjbHMgYXJlIHJlZ2lzdGVyZWQgYXMgZHJpdmVycwogICogZm9yIGFsbCBzeXN0ZW0gZGV2aWNlcywgYW5kIGdldCBub3RpZmljYXRpb24gY2FsbHMgZm9yIGVhY2ggZGV2aWNlLiAKICAqLwogCkBAIC03MCw3ICs3MCw3IEBACiBleHRlcm4gdm9pZCBzeXNkZXZfY2xhc3NfcmVtb3ZlX2ZpbGUoc3RydWN0IHN5c2Rldl9jbGFzcyAqLAogCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICopOwogLyoqCi0gKiBBdXhpbGxhcnkgc3lzdGVtIGRldmljZSBkcml2ZXJzLgorICogQXV4aWxpYXJ5IHN5c3RlbSBkZXZpY2UgZHJpdmVycy4KICAqLwogCiBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWVycXVldWUuaCBiL2luY2x1ZGUvbGludXgvdGltZXJxdWV1ZS5oCmluZGV4IGQyNGFhYmEuLmE1MjBmZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZXJxdWV1ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZXJxdWV1ZS5oCkBAIC0yNCw3ICsyNCw3IEBACiAJCQkJCQlzdHJ1Y3QgdGltZXJxdWV1ZV9ub2RlICpub2RlKTsKIAogLyoqCi0gKiB0aW1lcnF1ZXVlX2dldG5leHQgLSBSZXR1cm5zIHRoZSB0aW1lciB3aXRoIHRoZSBlYXJsaWVzIGV4cGlyYXRpb24gdGltZQorICogdGltZXJxdWV1ZV9nZXRuZXh0IC0gUmV0dXJucyB0aGUgdGltZXIgd2l0aCB0aGUgZWFybGllc3QgZXhwaXJhdGlvbiB0aW1lCiAgKgogICogQGhlYWQ6IGhlYWQgb2YgdGltZXJxdWV1ZQogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHJhY2Vob29rLmggYi9pbmNsdWRlL2xpbnV4L3RyYWNlaG9vay5oCmluZGV4IDNhMmU2NmQuLmViY2ZhNGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHJhY2Vob29rLmgKKysrIGIvaW5jbHVkZS9saW51eC90cmFjZWhvb2suaApAQCAtMTY5LDcgKzE2OSw3IEBACiAgKiB0cmFjZWhvb2tfdHJhY2VyX3Rhc2sgLSByZXR1cm4gdGhlIHRhc2sgdGhhdCBpcyB0cmFjaW5nIHRoZSBnaXZlbiB0YXNrCiAgKiBAdHNrOgkJdGFzayB0byBjb25zaWRlcgogICoKLSAqIFJldHVybnMgTlVMTCBpZiBub29uZSBpcyB0cmFjaW5nIEB0YXNrLCBvciB0aGUgJnN0cnVjdCB0YXNrX3N0cnVjdAorICogUmV0dXJucyBOVUxMIGlmIG5vIG9uZSBpcyB0cmFjaW5nIEB0YXNrLCBvciB0aGUgJnN0cnVjdCB0YXNrX3N0cnVjdAogICogcG9pbnRlciB0byBpdHMgdHJhY2VyLgogICoKICAqIE11c3QgY2FsbGVkIHVuZGVyIHJjdV9yZWFkX2xvY2soKS4gIFRoZSBwb2ludGVyIHJldHVybmVkIG1pZ2h0IGJlIGtlcHQKQEAgLTQ0OCw3ICs0NDgsNyBAQAogICoKICAqIFJldHVybiB6ZXJvIHRvIGNoZWNrIGZvciBhIHJlYWwgcGVuZGluZyBzaWduYWwgbm9ybWFsbHkuCiAgKiBSZXR1cm4gLTEgYWZ0ZXIgcmVsZWFzaW5nIHRoZSBzaWdsb2NrIHRvIHJlcGVhdCB0aGUgY2hlY2suCi0gKiBSZXR1cm4gYSBzaWduYWwgbnVtYmVyIHRvIGluZHVjZSBhbiBhcnRpZmljYWwgc2lnbmFsIGRlbGl2ZXJ5LAorICogUmV0dXJuIGEgc2lnbmFsIG51bWJlciB0byBpbmR1Y2UgYW4gYXJ0aWZpY2lhbCBzaWduYWwgZGVsaXZlcnksCiAgKiBzZXR0aW5nICpAaW5mbyBhbmQgKkByZXR1cm5fa2EgdG8gc3BlY2lmeSBpdHMgZGV0YWlscyBhbmQgYmVoYXZpb3IuCiAgKgogICogVGhlIEByZXR1cm5fa2EtPnNhX2hhbmRsZXIgdmFsdWUgY29udHJvbHMgdGhlIGRpc3Bvc2l0aW9uIG9mIHRoZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91Y2IxNDAwLmggYi9pbmNsdWRlL2xpbnV4L3VjYjE0MDAuaAppbmRleCAxYjQ3OTA5Li41Yzc1MTUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VjYjE0MDAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VjYjE0MDAuaApAQCAtOCw3ICs4LDcgQEAKICAqICBDb3B5cmlnaHQ6CU1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqCiAgKiBTcGxpdGluZyBkb25lIGJ5OiBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgotICogSWYgc29tZXRoaW5nIGRvZXNudCB3b3JrIGFuZCBpdCB3b3JrZWQgYmVmb3JlIHNwbGl0aW5nLCBlLW1haWwgbWUsCisgKiBJZiBzb21ldGhpbmcgZG9lc24ndCB3b3JrIGFuZCBpdCB3b3JrZWQgYmVmb3JlIHNwbGl0aW5nLCBlLW1haWwgbWUsCiAgKiBkb250IGJvdGhlciBOaWNvbGFzIHBsZWFzZSA7LSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiLmgKaW5kZXggZTYzZWZlYi4uNjVmNzhjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi5oCkBAIC02MjMsNyArNjIzLDcgQEAKICAqIFVTQiBodWJzLiAgVGhhdCBtYWtlcyBpdCBzdGF5IHRoZSBzYW1lIHVudGlsIHN5c3RlbXMgYXJlIHBoeXNpY2FsbHkKICAqIHJlY29uZmlndXJlZCwgYnkgcmUtY2FibGluZyBhIHRyZWUgb2YgVVNCIGRldmljZXMgb3IgYnkgbW92aW5nIFVTQiBob3N0CiAgKiBjb250cm9sbGVycy4gIEFkZGluZyBhbmQgcmVtb3ZpbmcgZGV2aWNlcywgaW5jbHVkaW5nIHZpcnR1YWwgcm9vdCBodWJzCi0gKiBpbiBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIG1vZHVsZXMsIGRvZXMgbm90IGNoYW5nZSB0aGVzZSBwYXRoIGlkZW50aWZlcnM7CisgKiBpbiBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIG1vZHVsZXMsIGRvZXMgbm90IGNoYW5nZSB0aGVzZSBwYXRoIGlkZW50aWZpZXJzOwogICogbmVpdGhlciBkb2VzIHJlYm9vdGluZyBvciByZS1lbnVtZXJhdGluZy4gIFRoZXNlIGFyZSBtb3JlIHVzZWZ1bCBpZGVudGlmaWVycwogICogdGhhbiBjaGFuZ2VhYmxlICgidW5zdGFibGUiKSBvbmVzIGxpa2UgYnVzIG51bWJlcnMgb3IgZGV2aWNlIGFkZHJlc3Nlcy4KICAqCkBAIC03OTMsNyArNzkzLDcgQEAKICAqCXVzYl9zZXRfaW50ZmRhdGEoKSB0byBhc3NvY2lhdGUgZHJpdmVyLXNwZWNpZmljIGRhdGEgd2l0aCB0aGUKICAqCWludGVyZmFjZS4gIEl0IG1heSBhbHNvIHVzZSB1c2Jfc2V0X2ludGVyZmFjZSgpIHRvIHNwZWNpZnkgdGhlCiAgKglhcHByb3ByaWF0ZSBhbHRzZXR0aW5nLiAgSWYgdW53aWxsaW5nIHRvIG1hbmFnZSB0aGUgaW50ZXJmYWNlLAotICoJcmV0dXJuIC1FTk9ERVYsIGlmIGdlbnVpbmUgSU8gZXJyb3JzIG9jY3VyZWQsIGFuIGFwcHJvcHJpYXRlCisgKglyZXR1cm4gLUVOT0RFViwgaWYgZ2VudWluZSBJTyBlcnJvcnMgb2NjdXJyZWQsIGFuIGFwcHJvcHJpYXRlCiAgKgluZWdhdGl2ZSBlcnJubyB2YWx1ZS4KICAqIEBkaXNjb25uZWN0OiBDYWxsZWQgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIG5vIGxvbmdlciBhY2Nlc3NpYmxlLCB1c3VhbGx5CiAgKgliZWNhdXNlIGl0cyBkZXZpY2UgaGFzIGJlZW4gKG9yIGlzIGJlaW5nKSBkaXNjb25uZWN0ZWQgb3IgdGhlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9jb21wb3NpdGUuaCBiL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oCmluZGV4IDNkMjlhN2QuLjg4MmEwODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oCkBAIC0xODgsNyArMTg4LDcgQEAKICAqIEBiaW5kKCkgbWV0aG9kIGlzIHRoZW4gdXNlZCB0byBpbml0aWFsaXplIGFsbCB0aGUgZnVuY3Rpb25zIGFuZCB0aGVuCiAgKiBjYWxsIEB1c2JfYWRkX2Z1bmN0aW9uKCkgZm9yIHRoZW0uCiAgKgotICogVGhvc2UgZnVuY3Rpb25zIHdvdWxkIG5vcm1hbGx5IGJlIGluZGVwZW5kYW50IG9mIGVhY2ggb3RoZXIsIGJ1dCB0aGF0J3MKKyAqIFRob3NlIGZ1bmN0aW9ucyB3b3VsZCBub3JtYWxseSBiZSBpbmRlcGVuZGVudCBvZiBlYWNoIG90aGVyLCBidXQgdGhhdCdzCiAgKiBub3QgbWFuZGF0b3J5LiAgQ0RDIFdNQyBkZXZpY2VzIGFyZSBhbiBleGFtcGxlIHdoZXJlIGZ1bmN0aW9ucyBvZnRlbgogICogZGVwZW5kIG9uIG90aGVyIGZ1bmN0aW9ucywgd2l0aCBzb21lIGZ1bmN0aW9ucyBzdWJzaWRpYXJ5IHRvIG90aGVycy4KICAqIFN1Y2ggaW50ZXJkZXBlbmRlbmN5IG1heSBiZSBtYW5hZ2VkIGluIGFueSB3YXksIHNvIGxvbmcgYXMgYWxsIG9mIHRoZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvZWhjaV9kZWYuaCBiL2luY2x1ZGUvbGludXgvdXNiL2VoY2lfZGVmLmgKaW5kZXggNjU2MzgwMi4uZTQ5ZGZkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvZWhjaV9kZWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9laGNpX2RlZi5oCkBAIC0xNTksNyArMTU5LDcgQEAKICNkZWZpbmUgVVNCTU9ERV9DTV9JRExFCSgwPDwwKQkJLyogaWRsZSBzdGF0ZSAqLwogCiAvKiBNb29yZXN0b3duIGhhcyBzb21lIG5vbi1zdGFuZGFyZCByZWdpc3RlcnMsIHBhcnRpYWxseSBkdWUgdG8gdGhlIGZhY3QgdGhhdAotICogaXRzIEVIQ0kgY29udHJvbGxlciBoYXMgYm90aCBUVCBhbmQgTFBNIHN1cHBvcnQuIEhPU1RQQ3ggYXJlIGV4dGVudGlvbnMgdG8KKyAqIGl0cyBFSENJIGNvbnRyb2xsZXIgaGFzIGJvdGggVFQgYW5kIExQTSBzdXBwb3J0LiBIT1NUUEN4IGFyZSBleHRlbnNpb25zIHRvCiAgKiBQT1JUU0N4CiAgKi8KICNkZWZpbmUgSE9TVFBDMAkJMHg4NAkJLyogSE9TVFBDIGV4dGVuc2lvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvZnVuY3Rpb25mcy5oIGIvaW5jbHVkZS9saW51eC91c2IvZnVuY3Rpb25mcy5oCmluZGV4IDZmNjQ5YzEuLjc1ODdlZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2Z1bmN0aW9uZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9mdW5jdGlvbmZzLmgKQEAgLTQ1LDcgKzQ1LDcgQEAKICAqIHwgb2ZmIHwgbmFtZSAgICAgIHwgdHlwZSAgICAgICAgIHwgZGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAqIHwtLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAqIHwgICAwIHwgbWFnaWMgICAgIHwgTEUzMiAgICAgICAgIHwgRlVOQ1RJT05GU197RlMsSFN9X0RFU0NSSVBUT1JTX01BR0lDIHwKLSAqIHwgICA0IHwgbGVuZ2h0ICAgIHwgTEUzMiAgICAgICAgIHwgbGVuZ3RoIG9mIHRoZSB3aG9sZSBkYXRhIGNodW5rICAgICAgIHwKKyAqIHwgICA0IHwgbGVuZ3RoICAgIHwgTEUzMiAgICAgICAgIHwgbGVuZ3RoIG9mIHRoZSB3aG9sZSBkYXRhIGNodW5rICAgICAgIHwKICAqIHwgICA4IHwgZnNfY291bnQgIHwgTEUzMiAgICAgICAgIHwgbnVtYmVyIG9mIGZ1bGwtc3BlZWQgZGVzY3JpcHRvcnMgICAgIHwKICAqIHwgIDEyIHwgaHNfY291bnQgIHwgTEUzMiAgICAgICAgIHwgbnVtYmVyIG9mIGhpZ2gtc3BlZWQgZGVzY3JpcHRvcnMgICAgIHwKICAqIHwgIDE2IHwgZnNfZGVzY3JzIHwgRGVzY3JpcHRvcltdIHwgbGlzdCBvZiBmdWxsLXNwZWVkIGRlc2NyaXB0b3JzICAgICAgIHwKQEAgLTg2LDcgKzg2LDcgQEAKICAqIHwgICAwIHwgbGFuZyAgICB8IExFMTYgICAgICAgICAgICAgIHwgbGFuZ3VhZ2UgY29kZSAgICAgICAgICAgICAgICAgICAgICB8CiAgKiB8ICAgMiB8IHN0cmluZ3MgfCBTdHJpbmdbc3RyX2NvdW50XSB8IGFycmF5IG9mIHN0cmluZ3MgaW4gZ2l2ZW4gbGFuZ3VhZ2UgfAogICoKLSAqIEZvciBlYWNoIHN0cmluZyB0aGVyIGlzIG9uZSBzdHJpbmdzIGVudHJ5IChpZS4gdGhlcmUgYXJlIHN0cl9jb3VudAorICogRm9yIGVhY2ggc3RyaW5nIHRoZXJlIGlzIG9uZSBzdHJpbmdzIGVudHJ5IChpZS4gdGhlcmUgYXJlIHN0cl9jb3VudAogICogc3RyaW5nIGVudHJpZXMpLiAgRWFjaCBTdHJpbmcgaXMgYSBOVUwgdGVybWluYXRlZCBzdHJpbmcgZW5jb2RlZCBpbgogICogVVRGLTguCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2dhZGdldC5oIGIvaW5jbHVkZS9saW51eC91c2IvZ2FkZ2V0LmgKaW5kZXggMDA2NDEyYy4uZTUzODE3MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvZ2FkZ2V0LmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvZ2FkZ2V0LmgKQEAgLTcyLDcgKzcyLDcgQEAKICAqIEJ1bGsgZW5kcG9pbnRzIGNhbiB1c2UgYW55IHNpemUgYnVmZmVycywgYW5kIGNhbiBhbHNvIGJlIHVzZWQgZm9yIGludGVycnVwdAogICogdHJhbnNmZXJzLiBpbnRlcnJ1cHQtb25seSBlbmRwb2ludHMgY2FuIGJlIG11Y2ggbGVzcyBmdW5jdGlvbmFsLgogICoKLSAqIE5PVEU6ICB0aGlzIGlzIGFuYWxhZ291cyB0byAnc3RydWN0IHVyYicgb24gdGhlIGhvc3Qgc2lkZSwgZXhjZXB0IHRoYXQKKyAqIE5PVEU6ICB0aGlzIGlzIGFuYWxvZ291cyB0byAnc3RydWN0IHVyYicgb24gdGhlIGhvc3Qgc2lkZSwgZXhjZXB0IHRoYXQKICAqIGl0J3MgdGhpbm5lciBhbmQgcHJvbW90ZXMgbW9yZSBwcmUtYWxsb2NhdGlvbi4KICAqLwogCkBAIC0yNjksNyArMjY5LDcgQEAKICAqCiAgKiBDb250cm9sIGVuZHBvaW50cyAuLi4gYWZ0ZXIgZ2V0dGluZyBhIHNldHVwKCkgY2FsbGJhY2ssIHRoZSBkcml2ZXIgcXVldWVzCiAgKiBvbmUgcmVzcG9uc2UgKGV2ZW4gaWYgaXQgd291bGQgYmUgemVybyBsZW5ndGgpLiAgVGhhdCBlbmFibGVzIHRoZQotICogc3RhdHVzIGFjaywgYWZ0ZXIgdHJhbnNmZXJpbmcgZGF0YSBhcyBzcGVjaWZpZWQgaW4gdGhlIHJlc3BvbnNlLiAgU2V0dXAKKyAqIHN0YXR1cyBhY2ssIGFmdGVyIHRyYW5zZmVycmluZyBkYXRhIGFzIHNwZWNpZmllZCBpbiB0aGUgcmVzcG9uc2UuICBTZXR1cAogICogZnVuY3Rpb25zIG1heSByZXR1cm4gbmVnYXRpdmUgZXJyb3IgY29kZXMgdG8gZ2VuZXJhdGUgcHJvdG9jb2wgc3RhbGxzLgogICogKE5vdGUgdGhhdCBzb21lIFVTQiBkZXZpY2UgY29udHJvbGxlcnMgZGlzYWxsb3cgcHJvdG9jb2wgc3RhbGwgcmVzcG9uc2VzCiAgKiBpbiBzb21lIGNhc2VzLikgIFdoZW4gY29udHJvbCByZXNwb25zZXMgYXJlIGRlZmVycmVkICh0aGUgcmVzcG9uc2UgaXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL21pZGkuaCBiL2luY2x1ZGUvbGludXgvdXNiL21pZGkuaAppbmRleCAxZDEwNDA4Li5jOGM1MmUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9taWRpLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvbWlkaS5oCkBAIC03MCw3ICs3MCw3IEBACiAJX191OCAgYkphY2tJRDsKIAlfX3U4ICBiTnJJbnB1dFBpbnM7CQkvKiBwICovCiAJc3RydWN0IHVzYl9taWRpX3NvdXJjZV9waW4gcGluc1tdOyAvKiBbcF0gKi8KLQkvKl9fdTggIGlKYWNrOyAgLS0gb21taXR0ZWQgZHVlIHRvIHZhcmlhYmxlLXNpemVkIHBpbnNbXSAqLworCS8qX191OCAgaUphY2s7ICAtLSBvbWl0dGVkIGR1ZSB0byB2YXJpYWJsZS1zaXplZCBwaW5zW10gKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjZGVmaW5lIFVTQl9EVF9NSURJX09VVF9TSVpFKHApCSg3ICsgMiAqIChwKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3VzYm5ldC5oIGIvaW5jbHVkZS9saW51eC91c2IvdXNibmV0LmgKaW5kZXggM2M3MzI5Yi4uNjA1YjBhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvdXNibmV0LmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvdXNibmV0LmgKQEAgLTY4LDYgKzY4LDcgQEAKICMJCWRlZmluZSBFVkVOVF9SWF9QQVVTRUQJNQogIwkJZGVmaW5lIEVWRU5UX0RFVl9XQUtJTkcgNgogIwkJZGVmaW5lIEVWRU5UX0RFVl9BU0xFRVAgNworIwkJZGVmaW5lIEVWRU5UX0RFVl9PUEVOCTgKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlcl9vZihzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKQEAgLTEwMyw4ICsxMDQsOCBAQAogICogSW5kaWNhdGVzIHRvIHVzYm5ldCwgdGhhdCBVU0IgZHJpdmVyIGFjY3VtdWxhdGVzIG11bHRpcGxlIElQIHBhY2tldHMuCiAgKiBBZmZlY3RzIHN0YXRpc3RpYyAoY291bnRlcnMpIGFuZCBzaG9ydCBwYWNrZXQgaGFuZGxpbmcuCiAgKi8KLSNkZWZpbmUgRkxBR19NVUxUSV9QQUNLRVQJMHgxMDAwCi0jZGVmaW5lIEZMQUdfUlhfQVNTRU1CTEUJMHgyMDAwCS8qIHJ4IHBhY2tldHMgbWF5IHNwYW4gPjEgZnJhbWVzICovCisjZGVmaW5lIEZMQUdfTVVMVElfUEFDS0VUCTB4MjAwMAorI2RlZmluZSBGTEFHX1JYX0FTU0VNQkxFCTB4NDAwMAkvKiByeCBwYWNrZXRzIG1heSBzcGFuID4xIGZyYW1lcyAqLwogCiAJLyogaW5pdCBkZXZpY2UgLi4uIGNhbiBzbGVlcCwgb3IgY2F1c2UgcHJvYmUoKSBmYWlsdXJlICovCiAJaW50CSgqYmluZCkoc3RydWN0IHVzYm5ldCAqLCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3d1c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiL3d1c2IuaAppbmRleCA2M2ViZGNjLi4wYzRkNGNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi93dXNiLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2Ivd3VzYi5oCkBAIC0xMjYsNyArMTI2LDcgQEAKIC8qKgogICogV1VTQiBJRTogQ2hhbm5lbCBTdG9wIChXVVNCMS4wWzcuNS44XSkKICAqCi0gKiBUZWxscyBkZXZpY2VzIHRoZSBob3N0IGlzIGdvaW5nIHRvIHN0b3Agc2VuZGluZyBNTUNzIGFuZCB3aWxsIGRpc3NhcGVhci4KKyAqIFRlbGxzIGRldmljZXMgdGhlIGhvc3QgaXMgZ29pbmcgdG8gc3RvcCBzZW5kaW5nIE1NQ3MgYW5kIHdpbGwgZGlzYXBwZWFyLgogICovCiBzdHJ1Y3Qgd3VpZV9jaGFubmVsX3N0b3AgewogCXN0cnVjdCB3dWllX2hkciBoZHI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3V3Yi5oIGIvaW5jbHVkZS9saW51eC91d2IuaAppbmRleCA3ZmM5NzQ2Li5iMGM1NjRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3V3Yi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXdiLmgKQEAgLTI3NCw3ICsyNzQsNyBAQAogCiAvKioKICAqIHN0cnVjdCB1d2JfZHJwX2F2YWlsIC0gYSByYWRpbyBjb250cm9sbGVyJ3MgdmlldyBvZiBNQVMgdXNhZ2UKLSAqIEBnbG9iYWw6ICAgTUFTIHVudXNlZCBieSBuZWlnaGJvcnMgKGV4Y2x1ZGluZyByZXNlcnZhdGlvbnMgdGFyZ2V0dGVkCisgKiBAZ2xvYmFsOiAgIE1BUyB1bnVzZWQgYnkgbmVpZ2hib3JzIChleGNsdWRpbmcgcmVzZXJ2YXRpb25zIHRhcmdldGVkCiAgKiAgICAgICAgICAgIG9yIG93bmVkIGJ5IHRoZSBsb2NhbCByYWRpbyBjb250cm9sbGVyKSBvciB0aGUgYmVhb24gcGVyaW9kCiAgKiBAbG9jYWw6ICAgIE1BUyB1bnVzZWQgYnkgbG9jYWwgZXN0YWJsaXNoZWQgcmVzZXJ2YXRpb25zCiAgKiBAcGVuZGluZzogIE1BUyB1bnVzZWQgYnkgbG9jYWwgcGVuZGluZyByZXNlcnZhdGlvbnMKQEAgLTcwMiwxMCArNzAyLDEwIEBACiAJZWRjLT50aW1lc3RhcnQgPSBqaWZmaWVzOwogfQogCi0vKiBDYWxsZWQgd2hlbiBhbiBlcnJvciBvY2N1cmVkLgorLyogQ2FsbGVkIHdoZW4gYW4gZXJyb3Igb2NjdXJyZWQuCiAgKiBUaGlzIGlzIHdheSB0byBkZXRlcm1pbmUgaWYgdGhlIG51bWJlciBvZiBhY2NlcHRhYmxlIGVycm9ycyBwZXIgdGltZQogICogcGVyaW9kIGhhcyBiZWVuIGV4Y2VlZGVkLiBJdCBpcyBub3QgYWNjdXJhdGUgYXMgdGhlcmUgYXJlIGNhc2VzIGluIHdoaWNoCi0gKiB0aGlzIHNjaGVtZSB3aWxsIG5vdCB3b3JrLCBmb3IgZXhhbXBsZSBpZiB0aGVyZSBhcmUgcGVyaW9kaWMgb2NjdXJlbmNlcworICogdGhpcyBzY2hlbWUgd2lsbCBub3Qgd29yaywgZm9yIGV4YW1wbGUgaWYgdGhlcmUgYXJlIHBlcmlvZGljIG9jY3VycmVuY2VzCiAgKiBvZiBlcnJvcnMgdGhhdCBzdHJhZGRsZSB1cGRhdGVzIHRvIHRoZSBzdGFydCB0aW1lLiBUaGlzIHNjaGVtZSBpcwogICogc3VmZmljaWVudCBmb3Igb3VyIHVzYWdlLgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXdiL3VtYy5oIGIvaW5jbHVkZS9saW51eC91d2IvdW1jLmgKaW5kZXggNGI0ZmMwZi4uN2I0ODQyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91d2IvdW1jLmgKKysrIGIvaW5jbHVkZS9saW51eC91d2IvdW1jLmgKQEAgLTEzMiw3ICsxMzIsNyBAQAogICoKICAqIEZJWE1FOiBUaGlzIGlzIGFzIGRpcnR5IGFzIGl0IGdldHMsIGJ1dCB3ZSBuZWVkIHNvbWUgd2F5IHRvIGNoZWNrCiAgKiB0aGUgY29ycmVjdCB0eXBlIG9mIHVtY19kZXYtPnBhcmVudCAoc28gdGhhdCBmb3IgZXhhbXBsZSwgd2UgY2FuCi0gKiBjYXN0IHRvIHBjaV9kZXYpLiBDYXN0aW5nIHRvIHBjaV9kZXYgaXMgbmVjZXNhcnkgYmVjYXVzZSBhdCBzb21lCisgKiBjYXN0IHRvIHBjaV9kZXYpLiBDYXN0aW5nIHRvIHBjaV9kZXYgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYXQgc29tZQogICogcG9pbnQgd2UgbmVlZCB0byByZXF1ZXN0IHJlc291cmNlcyBmcm9tIHRoZSBkZXZpY2UuIE1hcHBpbmcgaXMKICAqIGVhc2lseSBvdmVyIGNvbWUgKGlvcmVtYXAgYW5kIHN0dWZmIGFyZSBidXMgYWdub3N0aWMpLCBidXQgaG9va2luZwogICogdXAgdG8gc29tZSBlcnJvciBoYW5kbGVycyAoc3VjaCBhcyBwY2kgZXJyb3IgaGFuZGxlcnMpIG1pZ2h0IG5lZWQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdjRsMi1tZWRpYWJ1cy5oIGIvaW5jbHVkZS9saW51eC92NGwyLW1lZGlhYnVzLmgKaW5kZXggNzA1NGE3YS4uZGU1YzE1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92NGwyLW1lZGlhYnVzLmgKKysrIGIvaW5jbHVkZS9saW51eC92NGwyLW1lZGlhYnVzLmgKQEAgLTQ3LDcgKzQ3LDcgQEAKIAlWNEwyX01CVVNfRk1UX1JHQjU2NV8yWDhfQkUgPSAweDEwMDcsCiAJVjRMMl9NQlVTX0ZNVF9SR0I1NjVfMlg4X0xFID0gMHgxMDA4LAogCi0JLyogWVVWIChpbmNsdWRpbmcgZ3JleSkgLSBuZXh0IGlzIDB4MjAxMyAqLworCS8qIFlVViAoaW5jbHVkaW5nIGdyZXkpIC0gbmV4dCBpcyAweDIwMTQgKi8KIAlWNEwyX01CVVNfRk1UX1k4XzFYOCA9IDB4MjAwMSwKIAlWNEwyX01CVVNfRk1UX1VZVlk4XzFfNVg4ID0gMHgyMDAyLAogCVY0TDJfTUJVU19GTVRfVllVWThfMV81WDggPSAweDIwMDMsCkBAIC02MCw2ICs2MCw3IEBACiAJVjRMMl9NQlVTX0ZNVF9ZMTBfMVgxMCA9IDB4MjAwYSwKIAlWNEwyX01CVVNfRk1UX1lVWVYxMF8yWDEwID0gMHgyMDBiLAogCVY0TDJfTUJVU19GTVRfWVZZVTEwXzJYMTAgPSAweDIwMGMsCisJVjRMMl9NQlVTX0ZNVF9ZMTJfMVgxMiA9IDB4MjAxMywKIAlWNEwyX01CVVNfRk1UX1VZVlk4XzFYMTYgPSAweDIwMGYsCiAJVjRMMl9NQlVTX0ZNVF9WWVVZOF8xWDE2ID0gMHgyMDEwLAogCVY0TDJfTUJVU19GTVRfWVVZVjhfMVgxNiA9IDB4MjAxMSwKQEAgLTY3LDkgKzY4LDExIEBACiAJVjRMMl9NQlVTX0ZNVF9ZVVlWMTBfMVgyMCA9IDB4MjAwZCwKIAlWNEwyX01CVVNfRk1UX1lWWVUxMF8xWDIwID0gMHgyMDBlLAogCi0JLyogQmF5ZXIgLSBuZXh0IGlzIDB4MzAxMyAqLworCS8qIEJheWVyIC0gbmV4dCBpcyAweDMwMTUgKi8KIAlWNEwyX01CVVNfRk1UX1NCR0dSOF8xWDggPSAweDMwMDEsCisJVjRMMl9NQlVTX0ZNVF9TR0JSRzhfMVg4ID0gMHgzMDEzLAogCVY0TDJfTUJVU19GTVRfU0dSQkc4XzFYOCA9IDB4MzAwMiwKKwlWNEwyX01CVVNfRk1UX1NSR0dCOF8xWDggPSAweDMwMTQsCiAJVjRMMl9NQlVTX0ZNVF9TQkdHUjEwX0RQQ004XzFYOCA9IDB4MzAwYiwKIAlWNEwyX01CVVNfRk1UX1NHQlJHMTBfRFBDTThfMVg4ID0gMHgzMDBjLAogCVY0TDJfTUJVU19GTVRfU0dSQkcxMF9EUENNOF8xWDggPSAweDMwMDksCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZnYWFyYi5oIGIvaW5jbHVkZS9saW51eC92Z2FhcmIuaAppbmRleCBlOWUxNTI0Li45YzMxMjBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZnYWFyYi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmdhYXJiLmgKQEAgLTc4LDcgKzc4LDcgQEAKICAqICAgICB3ZXRoZXIgdGhlIGNhcmQgaXMgZG9pbmcgbGVnYWN5IGRlY29kaW5nIGZvciB0aGF0IHR5cGUgb2YgcmVzb3VyY2UuIElmCiAgKiAgICAgeWVzLCB0aGUgbG9jayBpcyAiY29udmVydGVkIiBpbnRvIGEgbGVnYWN5IHJlc291cmNlIGxvY2suCiAgKiAgICAgVGhlIGFyYml0ZXIgd2lsbCBmaXJzdCBsb29rIGZvciBhbGwgVkdBIGNhcmRzIHRoYXQgbWlnaHQgY29uZmxpY3QKLSAqICAgICBhbmQgZGlzYWJsZSB0aGVpciBJT3MgYW5kL29yIE1lbW9yeSBhY2Nlc3MsIGlubGN1ZGluZyBWR0EgZm9yd2FyZGluZworICogICAgIGFuZCBkaXNhYmxlIHRoZWlyIElPcyBhbmQvb3IgTWVtb3J5IGFjY2VzcywgaW5jbHVkaW5nIFZHQSBmb3J3YXJkaW5nCiAgKiAgICAgb24gUDJQIGJyaWRnZXMgaWYgbmVjZXNzYXJ5LCBzbyB0aGF0IHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2VzIGNhbgogICogICAgIGJlIHVzZWQuIFRoZW4sIHRoZSBjYXJkIGlzIG1hcmtlZCBhcyBsb2NraW5nIHRoZXNlIHJlc291cmNlcyBhbmQKICAqICAgICB0aGUgSU8gYW5kL29yIE1lbW9yeSBhY2Nlc3NlIGFyZSBlbmFibGVkIG9uIHRoZSBjYXJkIChpbmNsdWRpbmcKQEAgLTE4Nyw3ICsxODcsNyBAQAogICogICAgIHZnYV9jb25mbGljdHMKICAqCiAgKiAgICAgQXJjaGl0ZWN0dXJlcyBzaG91bGQgZGVmaW5lIHRoaXMgaWYgdGhleSBoYXZlIHNldmVyYWwKLSAqICAgICBpbmRlcGVuZGFudCBQQ0kgZG9tYWlucyB0aGF0IGNhbiBhZmZvcmQgY29uY3VycmVudCBWR0EKKyAqICAgICBpbmRlcGVuZGVudCBQQ0kgZG9tYWlucyB0aGF0IGNhbiBhZmZvcmQgY29uY3VycmVudCBWR0EKICAqICAgICBkZWNvZGluZwogICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmggYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCmluZGV4IGFhNmMzOTMuLmJlODJjOGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKKysrIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaApAQCAtMzA4LDYgKzMwOCw3IEBACiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZNCAgICAgIHY0bDJfZm91cmNjKCdZJywgJzAnLCAnNCcsICcgJykgLyogIDQgIEdyZXlzY2FsZSAgICAgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1k2ICAgICAgdjRsMl9mb3VyY2MoJ1knLCAnMCcsICc2JywgJyAnKSAvKiAgNiAgR3JleXNjYWxlICAgICAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfWTEwICAgICB2NGwyX2ZvdXJjYygnWScsICcxJywgJzAnLCAnICcpIC8qIDEwICBHcmV5c2NhbGUgICAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZMTIgICAgIHY0bDJfZm91cmNjKCdZJywgJzEnLCAnMicsICcgJykgLyogMTIgIEdyZXlzY2FsZSAgICAgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1kxNiAgICAgdjRsMl9mb3VyY2MoJ1knLCAnMScsICc2JywgJyAnKSAvKiAxNiAgR3JleXNjYWxlICAgICAqLwogCiAvKiBQYWxldHRlIGZvcm1hdHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmggYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCmluZGV4IDQ2MWMwMTEuLjJiMzgzMWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmgKKysrIGIvaW5jbHVkZS9saW51eC92bXN0YXQuaApAQCAtNTgsNiArNTgsMTMgQEAKIAkJVU5FVklDVEFCTEVfUEdDTEVBUkVELAkvKiBvbiBDT1csIHBhZ2UgdHJ1bmNhdGUgKi8KIAkJVU5FVklDVEFCTEVfUEdTVFJBTkRFRCwJLyogdW5hYmxlIHRvIGlzb2xhdGUgb24gdW5sb2NrICovCiAJCVVORVZJQ1RBQkxFX01MT0NLRlJFRUQsCisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCisJCVRIUF9GQVVMVF9BTExPQywKKwkJVEhQX0ZBVUxUX0ZBTExCQUNLLAorCQlUSFBfQ09MTEFQU0VfQUxMT0MsCisJCVRIUF9DT0xMQVBTRV9BTExPQ19GQUlMRUQsCisJCVRIUF9TUExJVCwKKyNlbmRpZgogCQlOUl9WTV9FVkVOVF9JVEVNUwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93aW1heC5oIGIvaW5jbHVkZS9saW51eC93aW1heC5oCmluZGV4IDRmZGNjNTYuLjlmNmI3N2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd2ltYXguaAorKysgYi9pbmNsdWRlL2xpbnV4L3dpbWF4LmgKQEAgLTExNCw3ICsxMTQsNyBAQAogCVdJTUFYX0dOTF9SRVNFVF9JRklEWCA9IDEsCiB9OwogCi0vKiBBdHJpYnV0ZXMgZm9yIHdpbWF4X3N0YXRlX2dldCgpICovCisvKiBBdHRyaWJ1dGVzIGZvciB3aW1heF9zdGF0ZV9nZXQoKSAqLwogZW51bSB7CiAJV0lNQVhfR05MX1NUR0VUX0lGSURYID0gMSwKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3hpbGlueGZiLmggYi9pbmNsdWRlL2xpbnV4L3hpbGlueGZiLmgKaW5kZXggZjI0NjNmNS4uNWExNTVhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC94aWxpbnhmYi5oCisrKyBiL2luY2x1ZGUvbGludXgveGlsaW54ZmIuaApAQCAtMTYsNyArMTYsNyBAQAogLyogTUwzMDAvNDAzIHJlZmVyZW5jZSBkZXNpZ24gZnJhbWVidWZmZXIgZHJpdmVyIHBsYXRmb3JtIGRhdGEgc3RydWN0ICovCiBzdHJ1Y3QgeGlsaW54ZmJfcGxhdGZvcm1fZGF0YSB7CiAJdTMyIHJvdGF0ZV9zY3JlZW47CS8qIEZsYWcgdG8gcm90YXRlIGRpc3BsYXkgMTgwIGRlZ3JlZXMgKi8KLQl1MzIgc2NyZWVuX2hlaWdodF9tbTsJLyogUGh5c2ljYWwgZGltZW50aW9ucyBvZiBzY3JlZW4gaW4gbW0gKi8KKwl1MzIgc2NyZWVuX2hlaWdodF9tbTsJLyogUGh5c2ljYWwgZGltZW5zaW9ucyBvZiBzY3JlZW4gaW4gbW0gKi8KIAl1MzIgc2NyZWVuX3dpZHRoX21tOwogCXUzMiB4cmVzLCB5cmVzOwkJLyogcmVzb2x1dGlvbiBvZiBzY3JlZW4gaW4gcGl4ZWxzICovCiAJdTMyIHh2aXJ0LCB5dmlydDsJLyogcmVzb2x1dGlvbiBvZiBtZW1vcnkgYnVmZmVyICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2RhdmluY2kvZG0zNTVfY2NkYy5oIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL2RtMzU1X2NjZGMuaAppbmRleCBkZjhhN2IxLi5hZGYyZmU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2RhdmluY2kvZG0zNTVfY2NkYy5oCisrKyBiL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS9kbTM1NV9jY2RjLmgKQEAgLTE5Myw3ICsxOTMsNyBAQAogI2RlZmluZSBDQ0RDX0RGVF9UQUJMRV9TSVpFCTE2CiAvKgogICogTWFpbiBTdHJ1Y3R1cmUgZm9yIHZlcnRpY2FsIGRlZmVjdCBjb3JyZWN0aW9uLiBWZXJ0aWNhbCBkZWZlY3QKLSAqIGNvcnJlY3Rpb24gY2FuIGNvcnJlY3QgdXB0byAxNiBkZWZlY3RzIGlmIGRlZmVjdHMgbGVzcyB0aGFuIDE2CisgKiBjb3JyZWN0aW9uIGNhbiBjb3JyZWN0IHVwIHRvIDE2IGRlZmVjdHMgaWYgZGVmZWN0cyBsZXNzIHRoYW4gMTYKICAqIHRoZW4gcGFkIHRoZSByZXN0IHdpdGggMAogICovCiBzdHJ1Y3QgY2NkY192ZXJ0aWNhbF9kZnQgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL2lzaWYuaCBiL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS9pc2lmLmgKaW5kZXggYjBiNzRhZC4uN2YzZDc2YTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS9pc2lmLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL2lzaWYuaApAQCAtMTk5LDcgKzE5OSw3IEBACiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiogQ29sb3IgU3BhY2UgQ29udmVydGlvbiAoQ1NDKQorKiogQ29sb3IgU3BhY2UgQ29udmVyc2lvbiAoQ1NDKQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNkZWZpbmUgSVNJRl9DU0NfTlVNX0NPRUZGCTE2CiBzdHJ1Y3QgaXNpZl9jb2xvcl9zcGFjZV9jb252IHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvbGlyYy5oIGIvaW5jbHVkZS9tZWRpYS9saXJjLmgKaW5kZXggNjY3OGExNjkuLjRiM2FiMjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvbGlyYy5oCisrKyBiL2luY2x1ZGUvbWVkaWEvbGlyYy5oCkBAIC0xMzcsNyArMTM3LDcgQEAKICAqLwogI2RlZmluZSBMSVJDX1NFVF9SRUNfRklMVEVSX1NQQUNFICAgICAgX0lPVygnaScsIDB4MDAwMDAwMWIsIF9fdTMyKQogLyoKLSAqIGlmIGZpbHRlciBjYW5ub3QgYmUgc2V0IGluZGVwZW5kYW50bHkgZm9yIHB1bHNlL3NwYWNlLCB0aGlzIHNob3VsZAorICogaWYgZmlsdGVyIGNhbm5vdCBiZSBzZXQgaW5kZXBlbmRlbnRseSBmb3IgcHVsc2Uvc3BhY2UsIHRoaXMgc2hvdWxkCiAgKiBiZSB1c2VkCiAgKi8KICNkZWZpbmUgTElSQ19TRVRfUkVDX0ZJTFRFUiAgICAgICAgICAgIF9JT1coJ2knLCAweDAwMDAwMDFjLCBfX3UzMikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXZpY2UuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXZpY2UuaAppbmRleCBiZDEwMmNmLi5kNjFmZWJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldmljZS5oCkBAIC0xNjMsNyArMTYzLDcgQEAKICh7CQkJCQkJCQkJXAogCXN0cnVjdCB2NGwyX3N1YmRldiAqX19zZDsJCQkJCVwKIAlfX3Y0bDJfZGV2aWNlX2NhbGxfc3ViZGV2c191bnRpbF9lcnJfcCh2NGwyX2RldiwgX19zZCwgY29uZCwgbywJXAotCQkJCQkJZiwgYXJncy4uLik7CQlcCisJCQkJCQlmICwgIyNhcmdzKTsJCVwKIH0pCiAKIC8qIENhbGwgdGhlIHNwZWNpZmllZCBjYWxsYmFjayBmb3IgYWxsIHN1YmRldnMgbWF0Y2hpbmcgZ3JwX2lkIChpZiAwLCB0aGVuCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC85cC85cC5oIGIvaW5jbHVkZS9uZXQvOXAvOXAuaAppbmRleCA2Yjc1YTY5Li5kMmRmNTViIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC85cC85cC5oCisrKyBiL2luY2x1ZGUvbmV0LzlwLzlwLmgKQEAgLTExOSw3ICsxMTksNyBAQAogICogQFA5X1RSRUFEOiByZXF1ZXN0IHRvIHRyYW5zZmVyIGRhdGEgZnJvbSBhIGZpbGUgb3IgZGlyZWN0b3J5CiAgKiBAUDlfUlJFQUQ6IHJlc3BvbnNlIHdpdGggZGF0YSByZXF1ZXN0ZWQKICAqIEBQOV9UV1JJVEU6IHJldXFlc3QgdG8gdHJhbnNmZXIgZGF0YSB0byBhIGZpbGUKLSAqIEBQOV9SV1JJVEU6IHJlc3BvbnNlIHdpdGggb3V0IG11Y2ggZGF0YSB3YXMgdHJhbnNmZXJlZCB0byBmaWxlCisgKiBAUDlfUldSSVRFOiByZXNwb25zZSB3aXRoIG91dCBtdWNoIGRhdGEgd2FzIHRyYW5zZmVycmVkIHRvIGZpbGUKICAqIEBQOV9UQ0xVTks6IGZvcmdldCBhYm91dCBhIGhhbmRsZSB0byBhbiBlbnRpdHkgd2l0aGluIHRoZSBmaWxlIHN5c3RlbQogICogQFA5X1JDTFVOSzogcmVzcG9uc2Ugd2hlbiBzZXJ2ZXIgaGFzIGZvcmdvdHRlbiBhYm91dCB0aGUgaGFuZGxlCiAgKiBAUDlfVFJFTU9WRTogcmVxdWVzdCB0byByZW1vdmUgYW4gZW50aXR5IGZyb20gdGhlIGhpZXJhcmNoeQpAQCAtMTM5LDggKzEzOSw2IEBACiAgKi8KIAogZW51bSBwOV9tc2dfdCB7Ci0JUDlfVFNZTkNGUyA9IDAsCi0JUDlfUlNZTkNGUywKIAlQOV9UTEVSUk9SID0gNiwKIAlQOV9STEVSUk9SLAogCVA5X1RTVEFURlMgPSA4LApAQCAtMjk0LDcgKzI5Miw3IEBACiAgKgogICogUUlEIHR5cGVzIGFyZSBhIHN1YnNldCBvZiBwZXJtaXNzaW9ucyAtIHRoZXkgYXJlIHByaW1hcmlseQogICogdXNlZCB0byBkaWZmZXJlbnRpYXRlIHNlbWFudGljcyBmb3IgYSBmaWxlIHN5c3RlbSBlbnRpdHkgdmlhCi0gKiBhIGp1bXAtdGFibGUuICBUaGVpciB2YWx1ZSBpcyBhbHNvIHRoZSBtb3N0IHNpZ25pZmlnYW50IDE2IGJpdHMKKyAqIGEganVtcC10YWJsZS4gIFRoZWlyIHZhbHVlIGlzIGFsc28gdGhlIG1vc3Qgc2lnbmlmaWNhbnQgMTYgYml0cwogICogb2YgdGhlIHBlcm1pc3Npb25fdAogICoKICAqIFNlZSBBbHNvOiBodHRwOi8vcGxhbjkuYmVsbC1sYWJzLmNvbS9tYWdpYy9tYW4yaHRtbC8yL3N0YXQKQEAgLTM2Niw4ICszNjQsOCBAQAogLyoqCiAgKiBzdHJ1Y3QgcDlfc3RhdCAtIGZpbGUgc3lzdGVtIG1ldGFkYXRhIGluZm9ybWF0aW9uCiAgKiBAc2l6ZTogbGVuZ3RoIHByZWZpeCBmb3IgdGhpcyBzdGF0IHN0cnVjdHVyZSBpbnN0YW5jZQotICogQHR5cGU6IHRoZSB0eXBlIG9mIHRoZSBzZXJ2ZXIgKGVxdWl2aWxlbnQgdG8gYSBtYWpvciBudW1iZXIpCi0gKiBAZGV2OiB0aGUgc3ViLXR5cGUgb2YgdGhlIHNlcnZlciAoZXF1aXZpbGVudCB0byBhIG1pbm9yIG51bWJlcikKKyAqIEB0eXBlOiB0aGUgdHlwZSBvZiB0aGUgc2VydmVyIChlcXVpdmFsZW50IHRvIGEgbWFqb3IgbnVtYmVyKQorICogQGRldjogdGhlIHN1Yi10eXBlIG9mIHRoZSBzZXJ2ZXIgKGVxdWl2YWxlbnQgdG8gYSBtaW5vciBudW1iZXIpCiAgKiBAcWlkOiB1bmlxdWUgaWQgZnJvbSB0aGUgc2VydmVyIG9mIHR5cGUgJnA5X3FpZAogICogQG1vZGU6IFBsYW4gOSBmb3JtYXQgcGVybWlzc2lvbnMgb2YgdHlwZSAmcDlfcGVybV90CiAgKiBAYXRpbWU6IExhc3QgYWNjZXNzL3JlYWQgdGltZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvOXAvY2xpZW50LmggYi9pbmNsdWRlL25ldC85cC9jbGllbnQuaAppbmRleCAwYTMwOTc3Li4wNTFhOTlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC85cC9jbGllbnQuaAorKysgYi9pbmNsdWRlL25ldC85cC9jbGllbnQuaApAQCAtMTAxLDcgKzEwMSw3IEBACiAgKiBUcmFuc3BvcnQgdXNlIGFuIGFycmF5IHRvIHRyYWNrIG91dHN0YW5kaW5nIHJlcXVlc3RzCiAgKiBpbnN0ZWFkIG9mIGEgbGlzdC4gIFdoaWxlIHRoaXMgbWF5IGluY3VyciBvdmVyaGVhZCBkdXJpbmcgaW5pdGlhbAogICogYWxsb2NhdGlvbiBvciBleHBhbnNpb24sIGl0IG1ha2VzIHJlcXVlc3QgbG9va3VwIG11Y2ggZWFzaWVyIGFzIHRoZQotICogdGFnIGlkIGlzIGEgaW5kZXggaW50byBhbiBhcnJheS4gIChXZSB1c2UgdGFnKzEgc28gdGhhdCB3ZSBjYW4gYWNjb21vZGF0ZQorICogdGFnIGlkIGlzIGEgaW5kZXggaW50byBhbiBhcnJheS4gIChXZSB1c2UgdGFnKzEgc28gdGhhdCB3ZSBjYW4gYWNjb21tb2RhdGUKICAqIHRoZSAtMSB0YWcgZm9yIHRoZSBUX1ZFUlNJT04gcmVxdWVzdCkuCiAgKiBUaGlzIGFsc28gaGFzIHRoZSBuaWNlIGVmZmVjdCBvZiBvbmx5IGhhdmluZyB0byBhbGxvY2F0ZSB3YWl0X3F1ZXVlcwogICogb25jZSwgaW5zdGVhZCBvZiBjb25zdGFudGx5IGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgdGhlbS4gIEl0cyBwb3NzaWJsZQpAQCAtMjE4LDggKzIxOCw4IEBACiB2b2lkIHA5X2NsaWVudF9iZWdpbl9kaXNjb25uZWN0KHN0cnVjdCBwOV9jbGllbnQgKmNsbnQpOwogc3RydWN0IHA5X2ZpZCAqcDlfY2xpZW50X2F0dGFjaChzdHJ1Y3QgcDlfY2xpZW50ICpjbG50LCBzdHJ1Y3QgcDlfZmlkICphZmlkLAogCQkJCQljaGFyICp1bmFtZSwgdTMyIG5fdW5hbWUsIGNoYXIgKmFuYW1lKTsKLXN0cnVjdCBwOV9maWQgKnA5X2NsaWVudF93YWxrKHN0cnVjdCBwOV9maWQgKm9sZGZpZCwgaW50IG53bmFtZSwgY2hhciAqKnduYW1lcywKLQkJCQkJCQkJaW50IGNsb25lKTsKK3N0cnVjdCBwOV9maWQgKnA5X2NsaWVudF93YWxrKHN0cnVjdCBwOV9maWQgKm9sZGZpZCwgdWludDE2X3QgbnduYW1lLAorCQljaGFyICoqd25hbWVzLCBpbnQgY2xvbmUpOwogaW50IHA5X2NsaWVudF9vcGVuKHN0cnVjdCBwOV9maWQgKmZpZCwgaW50IG1vZGUpOwogaW50IHA5X2NsaWVudF9mY3JlYXRlKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciAqbmFtZSwgdTMyIHBlcm0sIGludCBtb2RlLAogCQkJCQkJCWNoYXIgKmV4dGVuc2lvbik7CkBAIC0yMzAsNyArMjMwLDYgQEAKIAkJZ2lkX3QgZ2lkLCBzdHJ1Y3QgcDlfcWlkICpxaWQpOwogaW50IHA5X2NsaWVudF9jbHVuayhzdHJ1Y3QgcDlfZmlkICpmaWQpOwogaW50IHA5X2NsaWVudF9mc3luYyhzdHJ1Y3QgcDlfZmlkICpmaWQsIGludCBkYXRhc3luYyk7Ci1pbnQgcDlfY2xpZW50X3N5bmNfZnMoc3RydWN0IHA5X2ZpZCAqZmlkKTsKIGludCBwOV9jbGllbnRfcmVtb3ZlKHN0cnVjdCBwOV9maWQgKmZpZCk7CiBpbnQgcDlfY2xpZW50X3JlYWQoc3RydWN0IHA5X2ZpZCAqZmlkLCBjaGFyICpkYXRhLCBjaGFyIF9fdXNlciAqdWRhdGEsCiAJCQkJCQkJdTY0IG9mZnNldCwgdTMyIGNvdW50KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LzlwL3RyYW5zcG9ydC5oIGIvaW5jbHVkZS9uZXQvOXAvdHJhbnNwb3J0LmgKaW5kZXggODI4NjhmMS4uOGYwOGM3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvOXAvdHJhbnNwb3J0LmgKKysrIGIvaW5jbHVkZS9uZXQvOXAvdHJhbnNwb3J0LmgKQEAgLTMwLDcgKzMwLDcgQEAKIAogLyogRGVmYXVsdC4gQWRkIFBheWxvYWQgdG8gUERVIGJlZm9yZSBzZW5kaW5nIGl0IGRvd24gdG8gdHJhbnNwb3J0IGxheWVyICovCiAjZGVmaW5lIFA5X1RSQU5TX1BSRUZfUEFZTE9BRF9ERUYgIDB4MAotLyogU2VuZCBwYXkgbG9hZCBzZXBlcmF0ZWx5IHRvIHRyYW5zcG9ydCBsYXllciBhbG9uZyB3aXRoIFBEVS4qLworLyogU2VuZCBwYXkgbG9hZCBzZXBhcmF0ZWx5IHRvIHRyYW5zcG9ydCBsYXllciBhbG9uZyB3aXRoIFBEVS4qLwogI2RlZmluZSBQOV9UUkFOU19QUkVGX1BBWUxPQURfU0VQICAweDEKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jYWlmL2NmY25mZy5oIGIvaW5jbHVkZS9uZXQvY2FpZi9jZmNuZmcuaAppbmRleCBmNjg4NDc4Li5mMzNkMzYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jYWlmL2NmY25mZy5oCisrKyBiL2luY2x1ZGUvbmV0L2NhaWYvY2ZjbmZnLmgKQEAgLTY5LDcgKzY5LDcgQEAKICAqCQljZmNuZmdfYWRkX2FkYXB0X2xheWVyIHRvIHNwZWNpZnkgUEhZIGZvciB0aGUgbGluay4KICAqIEBwcmVmOglUaGUgcGh5IChsaW5rIGxheWVyKSBwcmVmZXJlbmNlLgogICogQGZjczoJU3BlY2lmeSBpZiBjaGVja3N1bSBpcyB1c2VkIGluIENBSUYgRnJhbWluZyBMYXllci4KLSAqIEBzdHg6CVNwZWNpZnkgaWYgU3RhcnQgT2YgRnJhbWUgZVh0ZW50aW9uIGlzIHVzZWQuCisgKiBAc3R4OglTcGVjaWZ5IGlmIFN0YXJ0IE9mIEZyYW1lIGV4dGVuc2lvbiBpcyB1c2VkLgogICovCiAKIHZvaWQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2dlbl9zdGF0cy5oIGIvaW5jbHVkZS9uZXQvZ2VuX3N0YXRzLmgKaW5kZXggZmExNTc3MS4uYTc5YjZjZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZ2VuX3N0YXRzLmgKKysrIGIvaW5jbHVkZS9uZXQvZ2VuX3N0YXRzLmgKQEAgLTExLDcgKzExLDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqICBza2I7CiAJc3RydWN0IG5sYXR0ciAqICAgdGFpbDsKIAotCS8qIEJhY2t3YXJkIGNvbXBhdGFiaWxpdHkgKi8KKwkvKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCiAJaW50ICAgICAgICAgICAgICAgY29tcGF0X3RjX3N0YXRzOwogCWludCAgICAgICAgICAgICAgIGNvbXBhdF94c3RhdHM7CiAJdm9pZCAqICAgICAgICAgICAgeHN0YXRzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldF9lY24uaCBiL2luY2x1ZGUvbmV0L2luZXRfZWNuLmgKaW5kZXggODhiZGQwMS4uMmZhOGQxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9lY24uaAorKysgYi9pbmNsdWRlL25ldC9pbmV0X2Vjbi5oCkBAIC0zOCw5ICszOCwxOSBAQAogCXJldHVybiBvdXRlcjsKIH0KIAotI2RlZmluZQlJTkVUX0VDTl94bWl0KHNrKSBkbyB7IGluZXRfc2soc2spLT50b3MgfD0gSU5FVF9FQ05fRUNUXzA7IH0gd2hpbGUgKDApCi0jZGVmaW5lCUlORVRfRUNOX2RvbnR4bWl0KHNrKSBcCi0JZG8geyBpbmV0X3NrKHNrKS0+dG9zICY9IH5JTkVUX0VDTl9NQVNLOyB9IHdoaWxlICgwKQorc3RhdGljIGlubGluZSB2b2lkIElORVRfRUNOX3htaXQoc3RydWN0IHNvY2sgKnNrKQoreworCWluZXRfc2soc2spLT50b3MgfD0gSU5FVF9FQ05fRUNUXzA7CisJaWYgKGluZXQ2X3NrKHNrKSAhPSBOVUxMKQorCQlpbmV0Nl9zayhzayktPnRjbGFzcyB8PSBJTkVUX0VDTl9FQ1RfMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIElORVRfRUNOX2RvbnR4bWl0KHN0cnVjdCBzb2NrICpzaykKK3sKKwlpbmV0X3NrKHNrKS0+dG9zICY9IH5JTkVUX0VDTl9NQVNLOworCWlmIChpbmV0Nl9zayhzaykgIT0gTlVMTCkKKwkJaW5ldDZfc2soc2spLT50Y2xhc3MgJj0gfklORVRfRUNOX01BU0s7Cit9CiAKICNkZWZpbmUgSVA2X0VDTl9mbG93X2luaXQobGFiZWwpIGRvIHsJCVwKICAgICAgIChsYWJlbCkgJj0gfmh0b25sKElORVRfRUNOX01BU0sgPDwgMjApOwlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaAppbmRleCAzMGI0OWVkLi44NmFlZmVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oCisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKQEAgLTUyLDcgKzUyLDcgQEAKIAkgKi8KIAlpZiAobGlrZWx5KHNrYi0+ZGV2ICYmIHNrYi0+ZGV2LT5uZF9uZXQpKQogCQlyZXR1cm4gZGV2X25ldChza2ItPmRldik7Ci0JaWYgKHNrYl9kc3Qoc2tiKS0+ZGV2KQorCWlmIChza2JfZHN0KHNrYikgJiYgc2tiX2RzdChza2IpLT5kZXYpCiAJCXJldHVybiBkZXZfbmV0KHNrYl9kc3Qoc2tiKS0+ZGV2KTsKIAlXQVJOKHNrYi0+c2ssICJNYXliZSBza2Jfc2tuZXQgc2hvdWxkIGJlIHVzZWQgaW4gJXMoKSBhdCBsaW5lOiVkXG4iLAogCQkgICAgICBfX2Z1bmNfXywgX19MSU5FX18pOwpAQCAtOTIsNyArOTIsNyBAQAogfQogLyoKICAqIFRoaXMgb25lIG5lZWRlZCBmb3Igc2luZ2xlX29wZW5fbmV0IHNpbmNlIG5ldCBpcyBzdG9yZWQgZGlyZWN0bHkgaW4KLSAqIHByaXZhdGUgbm90IGFzIGEgc3RydWN0IGkuZS4gc2VxX2ZpbGVfbmV0IGNhbnQgYmUgdXNlZC4KKyAqIHByaXZhdGUgbm90IGFzIGEgc3RydWN0IGkuZS4gc2VxX2ZpbGVfbmV0IGNhbid0IGJlIHVzZWQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldCAqc2VxX2ZpbGVfc2luZ2xlX25ldChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKIHsKQEAgLTc5MSw2ICs3OTEsNyBAQAogLyogSVBWUyBpbiBuZXR3b3JrIG5hbWVzcGFjZSAqLwogc3RydWN0IG5ldG5zX2lwdnMgewogCWludAkJCWdlbjsJCS8qIEdlbmVyYXRpb24gKi8KKwlpbnQJCQllbmFibGU7CQkvKiBlbmFibGUgbGlrZSBuZl9ob29rcyBkbyAqLwogCS8qCiAJICoJSGFzaCB0YWJsZTogZm9yIHJlYWwgc2VydmljZSBsb29rdXBzCiAJICovCkBAIC0xMDg5LDYgKzEwOTAsMjIgQEAKIAlhdG9taWNfaW5jKCZjdGxfY3AtPm5fY29udHJvbCk7CiB9CiAKKy8qCisgKiBJUFZTIG5ldG5zIGluaXQgJiBjbGVhbnVwIGZ1bmN0aW9ucworICovCitleHRlcm4gaW50IF9faXBfdnNfZXN0aW1hdG9yX2luaXQoc3RydWN0IG5ldCAqbmV0KTsKK2V4dGVybiBpbnQgX19pcF92c19jb250cm9sX2luaXQoc3RydWN0IG5ldCAqbmV0KTsKK2V4dGVybiBpbnQgX19pcF92c19wcm90b2NvbF9pbml0KHN0cnVjdCBuZXQgKm5ldCk7CitleHRlcm4gaW50IF9faXBfdnNfYXBwX2luaXQoc3RydWN0IG5ldCAqbmV0KTsKK2V4dGVybiBpbnQgX19pcF92c19jb25uX2luaXQoc3RydWN0IG5ldCAqbmV0KTsKK2V4dGVybiBpbnQgX19pcF92c19zeW5jX2luaXQoc3RydWN0IG5ldCAqbmV0KTsKK2V4dGVybiB2b2lkIF9faXBfdnNfY29ubl9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCk7CitleHRlcm4gdm9pZCBfX2lwX3ZzX2FwcF9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCk7CitleHRlcm4gdm9pZCBfX2lwX3ZzX3Byb3RvY29sX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KTsKK2V4dGVybiB2b2lkIF9faXBfdnNfY29udHJvbF9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCk7CitleHRlcm4gdm9pZCBfX2lwX3ZzX2VzdGltYXRvcl9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCk7CitleHRlcm4gdm9pZCBfX2lwX3ZzX3N5bmNfY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpOworZXh0ZXJuIHZvaWQgX19pcF92c19zZXJ2aWNlX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KTsKIAogLyoKICAqICAgICAgSVBWUyBhcHBsaWNhdGlvbiBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsYXAuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYXAuaAppbmRleCAxN2ZjZDk2Li5mYjRiNzZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcmRhL2lybGFwLmgKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxhcC5oCkBAIC0yMDQsNyArMjA0LDcgQEAKIAogCW5vdGlmeV90IG5vdGlmeTsgLyogQ2FsbGJhY2tzIHRvIElyTE1QICovCiAKLQlpbnQgICAgbXR0X3JlcXVpcmVkOyAgLyogTWludW11bSB0dXJuYXJvdW5kIHRpbWUgcmVxdWlyZWQgKi8KKwlpbnQgICAgbXR0X3JlcXVpcmVkOyAgLyogTWluaW11bSB0dXJuYXJvdW5kIHRpbWUgcmVxdWlyZWQgKi8KIAlpbnQgICAgeGJvZnNfZGVsYXk7ICAgLyogTnIgb2YgWEJPRidzIHVzZWQgdG8gTVRUICovCiAJaW50ICAgIGJvZnNfY291bnQ7ICAgIC8qIE5lZ290aWF0ZWQgZXh0cmEgQk9GcyAqLwogCWludCAgICBuZXh0X2JvZnM7ICAgICAvKiBOZWdvdGlhdGVkIGV4dHJhIEJPRnMgYWZ0ZXIgbmV4dCBmcmFtZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS93cmFwcGVyLmggYi9pbmNsdWRlL25ldC9pcmRhL3dyYXBwZXIuaAppbmRleCAyOTQyYWQ2Li5lZWY1M2ViIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcmRhL3dyYXBwZXIuaAorKysgYi9pbmNsdWRlL25ldC9pcmRhL3dyYXBwZXIuaApAQCAtNDIsNyArNDIsNyBAQAogCiAjZGVmaW5lIElSREFfVFJBTlMgMHgyMCAgICAvKiBBc3luY2hyb25vdXMgdHJhbnNwYXJlbmN5IG1vZGlmaWVyICovICAgICAgIAogCi0vKiBTdGF0ZXMgZm9yIHJlY2V2aW5nIGEgZnJhbWUgaW4gYXN5bmMgbW9kZSAqLworLyogU3RhdGVzIGZvciByZWNlaXZpbmcgYSBmcmFtZSBpbiBhc3luYyBtb2RlICovCiBlbnVtIHsKIAlPVVRTSURFX0ZSQU1FLCAKIAlCRUdJTl9GUkFNRSwgCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pdWN2L2l1Y3YuaCBiL2luY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oCmluZGV4IDIwNWEzMzYuLjExMjFiYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oCisrKyBiL2luY2x1ZGUvbmV0L2l1Y3YvaXVjdi5oCkBAIC0xNzMsNyArMTczLDcgQEAKIAkvKgogCSAqIFRoZSBtZXNzYWdlX3BlbmRpbmcgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGFuIGljdXYgaW50ZXJydXB0CiAJICogdHlwZSAweDA2IG9yIHR5cGUgMHgwNyBoYXMgYmVlbiByZWNlaXZlZC4gQSBuZXcgbWVzc2FnZSBpcwotCSAqIGF2YWlsYWJlIGFuZCBjYW4gYmUgcmVjZWl2ZWQgd2l0aCBpdWN2X21lc3NhZ2VfcmVjZWl2ZS4KKwkgKiBhdmFpbGFibGUgYW5kIGNhbiBiZSByZWNlaXZlZCB3aXRoIGl1Y3ZfbWVzc2FnZV9yZWNlaXZlLgogCSAqLwogCXZvaWQgKCptZXNzYWdlX3BlbmRpbmcpKHN0cnVjdCBpdWN2X3BhdGggKiwgc3RydWN0IGl1Y3ZfbWVzc2FnZSAqKTsKIAkvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXdfaGFuZGxlci5oIGIvaW5jbHVkZS9uZXQvaXdfaGFuZGxlci5oCmluZGV4IDNhZmRiMjEuLjVkNWE2YTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2l3X2hhbmRsZXIuaAorKysgYi9pbmNsdWRlL25ldC9pd19oYW5kbGVyLmgKQEAgLTkxLDcgKzkxLDcgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBUaGUgaW1wbGVtZW50YXRpb24gZ29hbHMgd2VyZSBhcyBmb2xsb3cgOgogICoJbyBPYnZpb3VzIDogeW91IHNob3VsZCBub3QgbmVlZCBhIFBoRCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcsCi0gKgkJdGhlIGJlbmVmaXQgaXMgZWFzaWVyIG1haW50YWluYW5jZS4KKyAqCQl0aGUgYmVuZWZpdCBpcyBlYXNpZXIgbWFpbnRlbmFuY2UuCiAgKglvIEZsZXhpYmxlIDogaXQgc2hvdWxkIGFjY29tbW9kYXRlIGEgd2lkZSB2YXJpZXR5IG9mIGRyaXZlcgogICoJCWltcGxlbWVudGF0aW9ucyBhbmQgYmUgYXMgZmxleGlibGUgYXMgdGhlIG9sZCBBUEkuCiAgKglvIExlYW4gOiBpdCBzaG91bGQgYmUgZWZmaWNpZW50IG1lbW9yeSB3aXNlIHRvIG1pbmltaXNlIHRoZSBpbXBhY3QKQEAgLTEyOSw3ICsxMjksNyBAQAogICoKICAqIEZ1bmN0aW9ucyBwcm90b3R5cGUgdXNlcyB1bmlvbiBpd3JlcV9kYXRhCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogU29tZSB3b3VsZCBoYXZlIHByZWZlcmVkIGZ1bmN0aW9ucyBkZWZpbmVkIHRoaXMgd2F5IDoKKyAqIFNvbWUgd291bGQgaGF2ZSBwcmVmZXJyZWQgZnVuY3Rpb25zIGRlZmluZWQgdGhpcyB3YXkgOgogICoJc3RhdGljIGludCBteWRyaXZlcl9pb2N0bF9zZXRyYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIAogICoJCQkJCSAgbG9uZyByYXRlLCBpbnQgYXV0bykKICAqIDEpIFRoZSBrZXJuZWwgY29kZSBkb2Vzbid0ICJ2YWxpZGF0ZSIgdGhlIGNvbnRlbnQgb2YgaXdyZXFfZGF0YSwgYW5kCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9sbGNfcGR1LmggYi9pbmNsdWRlL25ldC9sbGNfcGR1LmgKaW5kZXggNzViOGUyOS4uZjU3ZTdkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbGxjX3BkdS5oCisrKyBiL2luY2x1ZGUvbmV0L2xsY19wZHUuaApAQCAtMTk5LDcgKzE5OSw3IEBACiAJdTggc3NhcDsKIAl1OCBjdHJsXzE7CiAJdTggY3RybF8yOwotfTsKK30gX19wYWNrZWQ7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxsY19wZHVfc24gKmxsY19wZHVfc25faGRyKHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC0yMTEsNyArMjExLDcgQEAKIAl1OCBkc2FwOwogCXU4IHNzYXA7CiAJdTggY3RybF8xOwotfTsKK30gX19wYWNrZWQ7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxsY19wZHVfdW4gKmxsY19wZHVfdW5faGRyKHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC0zNTksNyArMzU5LDcgQEAKIAl1OCBmbXRfaWQ7CS8qIGFsd2F5cyAweDgxIGZvciBMTEMgKi8KIAl1OCB0eXBlOwkvKiBkaWZmZXJlbnQgaWYgTlVMTC9ub24tTlVMTCBMU0FQICovCiAJdTggcnc7CQkvKiBzZW5kZXIgcmVjZWl2ZSB3aW5kb3cgKi8KLX07Cit9IF9fcGFja2VkOwogCiAvKioKICAqCWxsY19wZHVfaW5pdF9hc194aWRfY21kIC0gc2V0cyBieXRlcyAzLCA0ICYgNSBvZiBMTEMgaGVhZGVyIGFzIFhJRApAQCAtNDE1LDcgKzQxNSw3IEBACiAJdTggIGN1cnJfc3N2OwkJLyogY3VycmVudCBzZW5kIHN0YXRlIHZhcmlhYmxlIHZhbCAqLwogCXU4ICBjdXJyX3JzdjsJCS8qIGN1cnJlbnQgcmVjZWl2ZSBzdGF0ZSB2YXJpYWJsZSAqLwogCXU4ICBpbmRfYml0czsJCS8qIGluZGljYXRvciBiaXRzIHNldCB3aXRoIG1hY3JvICovCi19OworfSBfX3BhY2tlZDsKIAogZXh0ZXJuIHZvaWQgbGxjX3BkdV9zZXRfY21kX3JzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCB0eXBlKTsKIGV4dGVybiB2b2lkIGxsY19wZHVfc2V0X3BmX2JpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBiaXRfdmFsdWUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKaW5kZXggY2VmZTFiMy4uMDI1ZDRjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAorKysgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCkBAIC0xMjk0LDcgKzEyOTQsNyBAQAogICogYWNjZWxlcmF0aW9uIChpLmUuIGl3bHdpZmkpLiBUaG9zZSBkcml2ZXJzIHNob3VsZCBwcm92aWRlIHVwZGF0ZV90a2lwX2tleQogICogaGFuZGxlci4KICAqIFRoZSB1cGRhdGVfdGtpcF9rZXkoKSBjYWxsIHVwZGF0ZXMgdGhlIGRyaXZlciB3aXRoIHRoZSBuZXcgcGhhc2UgMSBrZXkuCi0gKiBUaGlzIGhhcHBlbnMgZXZlcnl0aW1lIHRoZSBpdjE2IHdyYXBzIGFyb3VuZCAoZXZlcnkgNjU1MzYgcGFja2V0cykuIFRoZQorICogVGhpcyBoYXBwZW5zIGV2ZXJ5IHRpbWUgdGhlIGl2MTYgd3JhcHMgYXJvdW5kIChldmVyeSA2NTUzNiBwYWNrZXRzKS4gVGhlCiAgKiBzZXRfa2V5KCkgY2FsbCB3aWxsIGhhcHBlbiBvbmx5IG9uY2UgZm9yIGVhY2gga2V5ICh1bmxlc3MgdGhlIEFQIGRpZAogICogcmVrZXlpbmcpLCBpdCB3aWxsIG5vdCBpbmNsdWRlIGEgdmFsaWQgcGhhc2UgMSBrZXkuIFRoZSB2YWxpZCBwaGFzZSAxIGtleSBpcwogICogcHJvdmlkZWQgYnkgdXBkYXRlX3RraXBfa2V5IG9ubHkuIFRoZSB0cmlnZ2VyIHRoYXQgbWFrZXMgbWFjODAyMTEgY2FsbCB0aGlzCkBAIC0xNzUzLDggKzE3NTMsMTkgQEAKICAqIAl0aGF0IFRYL1JYX1NUT1AgY2FuIHBhc3MgTlVMTCBmb3IgdGhpcyBwYXJhbWV0ZXIuCiAgKglUaGUgQGJ1Zl9zaXplIHBhcmFtZXRlciBpcyBvbmx5IHZhbGlkIHdoZW4gdGhlIGFjdGlvbiBpcyBzZXQgdG8KICAqCSVJRUVFODAyMTFfQU1QRFVfVFhfT1BFUkFUSU9OQUwgYW5kIGluZGljYXRlcyB0aGUgcGVlcidzIHJlb3JkZXIKLSAqCWJ1ZmZlciBzaXplIChudW1iZXIgb2Ygc3ViZnJhbWVzKSBmb3IgdGhpcyBzZXNzaW9uIC0tIGFnZ3JlZ2F0ZXMKLSAqCWNvbnRhaW5pbmcgbW9yZSBzdWJmcmFtZXMgdGhhbiB0aGlzIG1heSBub3QgYmUgdHJhbnNtaXR0ZWQgdG8gdGhlIHBlZXIuCisgKglidWZmZXIgc2l6ZSAobnVtYmVyIG9mIHN1YmZyYW1lcykgZm9yIHRoaXMgc2Vzc2lvbiAtLSB0aGUgZHJpdmVyCisgKgltYXkgbmVpdGhlciBzZW5kIGFnZ3JlZ2F0ZXMgY29udGFpbmluZyBtb3JlIHN1YmZyYW1lcyB0aGFuIHRoaXMKKyAqCW5vciBzZW5kIGFnZ3JlZ2F0ZXMgaW4gYSB3YXkgdGhhdCBsb3N0IGZyYW1lcyB3b3VsZCBleGNlZWQgdGhlCisgKglidWZmZXIgc2l6ZS4gSWYganVzdCBsaW1pdGluZyB0aGUgYWdncmVnYXRlIHNpemUsIHRoaXMgd291bGQgYmUKKyAqCXBvc3NpYmxlIHdpdGggYSBidWZfc2l6ZSBvZiA4OgorICoJIC0gVFg6IDEuLi4uLjcKKyAqCSAtIFJYOiAgMi4uLi43IChsb3N0IGZyYW1lICMxKQorICoJIC0gVFg6ICAgICAgICA4Li4xLi4uCisgKgl3aGljaCBpcyBpbnZhbGlkIHNpbmNlICMxIHdhcyBub3cgcmUtdHJhbnNtaXR0ZWQgd2VsbCBwYXN0IHRoZQorICoJYnVmZmVyIHNpemUgb2YgOC4gQ29ycmVjdCB3YXlzIHRvIHJldHJhbnNtaXQgIzEgd291bGQgYmU6CisgKgkgLSBUWDogICAgICAgMSBvciAxOCBvciA4MQorICoJRXZlbiAiMTg5IiB3b3VsZCBiZSB3cm9uZyBzaW5jZSAxIGNvdWxkIGJlIGxvc3QgYWdhaW4uCisgKgogICoJUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KICAqCVRoZSBjYWxsYmFjayBjYW4gc2xlZXAuCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmggYi9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaAppbmRleCBkOTU0OWFmLi42NWFmYzQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaAorKysgYi9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaApAQCAtMzIsNyArMzIsNyBAQAogICAgCiAgICBUaGUgcmVzdWx0OiBbMzRdODYgaXMgbm90IGdvb2QgY2hvaWNlIGZvciBRb1Mgcm91dGVyIDotKAogCi0gICBUaGUgdGhpbmdzIGFyZSBub3Qgc28gYmFkLCBiZWNhdXNlIHdlIG1heSB1c2UgYXJ0aWZpY2FsCisgICBUaGUgdGhpbmdzIGFyZSBub3Qgc28gYmFkLCBiZWNhdXNlIHdlIG1heSB1c2UgYXJ0aWZpY2lhbAogICAgY2xvY2sgZXZhbHVhdGVkIGJ5IGludGVncmF0aW9uIG9mIG5ldHdvcmsgZGF0YSBmbG93CiAgICBpbiB0aGUgbW9zdCBjcml0aWNhbCBwbGFjZXMuCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3JvdXRlLmggYi9pbmNsdWRlL25ldC9yb3V0ZS5oCmluZGV4IGY4ODQyOWMuLjhmY2UwNjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3JvdXRlLmgKKysrIGIvaW5jbHVkZS9uZXQvcm91dGUuaApAQCAtNjQsNiArNjQsNyBAQAogCiAJX19iZTMyCQkJcnRfZHN0OwkvKiBQYXRoIGRlc3RpbmF0aW9uCSovCiAJX19iZTMyCQkJcnRfc3JjOwkvKiBQYXRoIHNvdXJjZQkJKi8KKwlpbnQJCQlydF9yb3V0ZV9paWY7CiAJaW50CQkJcnRfaWlmOwogCWludAkJCXJ0X29pZjsKIAlfX3UzMgkJCXJ0X21hcms7CkBAIC04MCwxMiArODEsMTIgQEAKIAogc3RhdGljIGlubGluZSBib29sIHJ0X2lzX2lucHV0X3JvdXRlKHN0cnVjdCBydGFibGUgKnJ0KQogewotCXJldHVybiBydC0+cnRfaWlmICE9IDA7CisJcmV0dXJuIHJ0LT5ydF9yb3V0ZV9paWYgIT0gMDsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHJ0X2lzX291dHB1dF9yb3V0ZShzdHJ1Y3QgcnRhYmxlICpydCkKIHsKLQlyZXR1cm4gcnQtPnJ0X2lpZiA9PSAwOworCXJldHVybiBydC0+cnRfcm91dGVfaWlmID09IDA7CiB9CiAKIHN0cnVjdCBpcF9ydF9hY2N0IHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaAppbmRleCBkYTA1MzRkLi4wMTgxMGEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvc29jay5oCkBAIC0xNzQ5LDcgKzE3NDksNyBAQAogCiAvKgogICogS2VybmVsIHNvY2tldHMsIGYuZS4gcnRubCBvciBpY21wX3NvY2tldCwgYXJlIGEgcGFydCBvZiBhIG5hbWVzcGFjZS4KLSAqIFRoZXkgc2hvdWxkIG5vdCBob2xkIGEgcmVmZXJyZW5jZSB0byBhIG5hbWVzcGFjZSBpbiBvcmRlciB0byBhbGxvdworICogVGhleSBzaG91bGQgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8gYSBuYW1lc3BhY2UgaW4gb3JkZXIgdG8gYWxsb3cKICAqIHRvIHN0b3AgaXQuCiAgKiBTb2NrZXRzIGFmdGVyIHNrX2NoYW5nZV9uZXQgc2hvdWxkIGJlIHJlbGVhc2VkIHVzaW5nIHNrX3JlbGVhc2Vfa2VybmVsCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RyYW5zcF92Ni5oIGIvaW5jbHVkZS9uZXQvdHJhbnNwX3Y2LmgKaW5kZXggZWViMDc3ZC4uYTgxMjJkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdHJhbnNwX3Y2LmgKKysrIGIvaW5jbHVkZS9uZXQvdHJhbnNwX3Y2LmgKQEAgLTE2LDcgKzE2LDcgQEAKIAogc3RydWN0IGZsb3dpNjsKIAotLyogZXh0ZW50aW9uIGhlYWRlcnMgKi8KKy8qIGV4dGVuc2lvbiBoZWFkZXJzICovCiBleHRlcm4gaW50CQkJCWlwdjZfZXh0aGRyc19pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQJCQkJaXB2Nl9leHRoZHJzX2V4aXQodm9pZCk7CiBleHRlcm4gaW50CQkJCWlwdjZfZnJhZ19pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvd2ltYXguaCBiL2luY2x1ZGUvbmV0L3dpbWF4LmgKaW5kZXggMzQ2MWFhMS4uYzc5OWJhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvd2ltYXguaAorKysgYi9pbmNsdWRlL25ldC93aW1heC5oCkBAIC0yODYsNyArMjg2LDcgQEAKICAqICAgICBkb2VzIG5vdCBkaXNjb25uZWN0IHRoZSBkZXZpY2UgZnJvbSB0aGUgYnVzIGFuZCByZXR1cm4gMC4KICAqICAgICBJZiB0aGF0IGZhaWxzLCBpdCBzaG91bGQgcmVzb3J0IHRvIHNvbWUgc29ydCBvZiBjb2xkIG9yIGJ1cwogICogICAgIHJlc2V0IChldmVuIGlmIGl0IGltcGxpZXMgYSBidXMgZGlzY29ubmVjdGlvbiBhbmQgZGV2aWNlCi0gKiAgICAgZGlzc2FwZWFyYW5jZSkuIEluIHRoYXQgY2FzZSwgLUVOT0RFViBzaG91bGQgYmUgcmV0dXJuZWQgdG8KKyAqICAgICBkaXNhcHBlYXJhbmNlKS4gSW4gdGhhdCBjYXNlLCAtRU5PREVWIHNob3VsZCBiZSByZXR1cm5lZCB0bwogICogICAgIGluZGljYXRlIHRoZSBkZXZpY2UgaXMgZ29uZS4KICAqICAgICBUaGlzIG9wZXJhdGlvbiBoYXMgdG8gYmUgc3luY2hyb25vdXMsIGFuZCByZXR1cm4gb25seSB3aGVuIHRoZQogICogICAgIHJlc2V0IGlzIGNvbXBsZXRlLiBJbiBjYXNlIG9mIGhhdmluZyBoYWQgdG8gcmVzb3J0IHRvIGJ1cy9jb2xkCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC93cGFuLXBoeS5oIGIvaW5jbHVkZS9uZXQvd3Bhbi1waHkuaAppbmRleCA4NTkyNjIzLi5kODZmZmZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC93cGFuLXBoeS5oCisrKyBiL2luY2x1ZGUvbmV0L3dwYW4tcGh5LmgKQEAgLTI4LDcgKzI4LDcgQEAKIAlzdHJ1Y3QgbXV0ZXggcGliX2xvY2s7CiAKIAkvKgotCSAqIFRoaXMgaXMgYSBQSUIgYWNvcmRpbmcgdG8gODAyLjE1LjQtMjAwNi4KKwkgKiBUaGlzIGlzIGEgUElCIGFjY29yZGluZyB0byA4MDIuMTUuNC0yMDA2LgogCSAqIFdlIGRvIG5vdCBwcm92aWRlIHRpbWluZy1yZWxhdGVkIHZhcmlhYmxlcywgYXMgdGhleQogCSAqIGFyZW4ndCB1c2VkIG91dHNpZGUgb2YgZHJpdmVyCiAJICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC94ZnJtLmggYi9pbmNsdWRlL25ldC94ZnJtLmgKaW5kZXggNmFlNGJjNS4uMjBhZmVhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveGZybS5oCisrKyBiL2luY2x1ZGUvbmV0L3hmcm0uaApAQCAtMzI0LDYgKzMyNCw3IEBACiAJaW50CQkJKCp0bXBsX3NvcnQpKHN0cnVjdCB4ZnJtX3RtcGwgKipkc3QsIHN0cnVjdCB4ZnJtX3RtcGwgKipzcmMsIGludCBuKTsKIAlpbnQJCQkoKnN0YXRlX3NvcnQpKHN0cnVjdCB4ZnJtX3N0YXRlICoqZHN0LCBzdHJ1Y3QgeGZybV9zdGF0ZSAqKnNyYywgaW50IG4pOwogCWludAkJCSgqb3V0cHV0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwlpbnQJCQkoKm91dHB1dF9maW5pc2gpKHN0cnVjdCBza19idWZmICpza2IpOwogCWludAkJCSgqZXh0cmFjdF9pbnB1dCkoc3RydWN0IHhmcm1fc3RhdGUgKngsCiAJCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJaW50CQkJKCpleHRyYWN0X291dHB1dCkoc3RydWN0IHhmcm1fc3RhdGUgKngsCkBAIC0xNDU0LDYgKzE0NTUsNyBAQAogZXh0ZXJuIGludCB4ZnJtNF9leHRyYWN0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50IHhmcm00X3ByZXBhcmVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQgeGZybTRfb3V0cHV0KHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCB4ZnJtNF9vdXRwdXRfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludCB4ZnJtNF90dW5uZWxfcmVnaXN0ZXIoc3RydWN0IHhmcm1fdHVubmVsICpoYW5kbGVyLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOwogZXh0ZXJuIGludCB4ZnJtNF90dW5uZWxfZGVyZWdpc3RlcihzdHJ1Y3QgeGZybV90dW5uZWwgKmhhbmRsZXIsIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7CiBleHRlcm4gaW50IHhmcm02X2V4dHJhY3RfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMTQ3MCw2ICsxNDcyLDcgQEAKIGV4dGVybiBpbnQgeGZybTZfZXh0cmFjdF9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludCB4ZnJtNl9wcmVwYXJlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50IHhmcm02X291dHB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgeGZybTZfb3V0cHV0X2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQgeGZybTZfZmluZF8xc3RmcmFnb3B0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSB1OCAqKnByZXZoZHIpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3J4cnBjL3BhY2tldC5oIGIvaW5jbHVkZS9yeHJwYy9wYWNrZXQuaAppbmRleCA5YjJjMzA4Li5mMjkwMmVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3J4cnBjL3BhY2tldC5oCisrKyBiL2luY2x1ZGUvcnhycGMvcGFja2V0LmgKQEAgLTE0OCw3ICsxNDgsNyBAQAogICogS2VyYmVyb3Mgc2VjdXJpdHkgdHlwZS0yIHJlc3BvbnNlIHBhY2tldAogICovCiBzdHJ1Y3QgcnhrYWRfcmVzcG9uc2UgewotCV9fYmUzMgkJdmVyc2lvbjsJLyogdmVyc2lvbiBvZiB0aGlzIHJlcG9uc2UgdHlwZSAqLworCV9fYmUzMgkJdmVyc2lvbjsJLyogdmVyc2lvbiBvZiB0aGlzIHJlc3BvbnNlIHR5cGUgKi8KIAlfX2JlMzIJCV9fcGFkOwogCiAJLyogZW5jcnlwdGVkIGJpdCBvZiB0aGUgcmVzcG9uc2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9mYy9mY19mY3AuaCBiL2luY2x1ZGUvc2NzaS9mYy9mY19mY3AuaAppbmRleCA4YTE0M2NhLi42NTJkZWMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvZmMvZmNfZmNwLmgKKysrIGIvaW5jbHVkZS9zY3NpL2ZjL2ZjX2ZjcC5oCkBAIC03NSw3ICs3NSw3IEBACiAjZGVmaW5lCUZDUF9QVEFfU0lNUExFCSAgICAwCS8qIHNpbXBsZSB0YXNrIGF0dHJpYnV0ZSAqLwogI2RlZmluZQlGQ1BfUFRBX0hFQURRCSAgICAxCS8qIGhlYWQgb2YgcXVldWUgdGFzayBhdHRyaWJ1dGUgKi8KICNkZWZpbmUJRkNQX1BUQV9PUkRFUkVEICAgICAyCS8qIG9yZGVyZWQgdGFzayBhdHRyaWJ1dGUgKi8KLSNkZWZpbmUJRkNQX1BUQV9BQ0EJICAgIDQJLyogYXV0by4gY29udGlnZW50IGFsbGVnaWFuY2UgKi8KKyNkZWZpbmUJRkNQX1BUQV9BQ0EJICAgIDQJLyogYXV0by4gY29udGluZ2VudCBhbGxlZ2lhbmNlICovCiAjZGVmaW5lCUZDUF9QVEFfTUFTSwkgICAgNwkvKiBtYXNrIGZvciB0YXNrIGF0dHJpYnV0ZSBmaWVsZCAqLwogI2RlZmluZQlGQ1BfUFJJX1NISUZUCSAgICAzCS8qIHByaW9yaXR5IGZpZWxkIHN0YXJ0cyBpbiBiaXQgMyAqLwogI2RlZmluZQlGQ1BfUFJJX1JFU1ZEX01BU0sgIDB4ODAJLyogcmVzZXJ2ZWQgYml0cyBpbiBwcmlvcml0eSBmaWVsZCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2lzY3NpX2lmLmggYi9pbmNsdWRlL3Njc2kvaXNjc2lfaWYuaAppbmRleCBjM2UxY2JjLi5kZGIwNDU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvaXNjc2lfaWYuaAorKysgYi9pbmNsdWRlL3Njc2kvaXNjc2lfaWYuaApAQCAtMjkyLDcgKzI5Miw3IEBACiAJSVNDU0lfUEFSQU1fUEVSU0lTVEVOVF9QT1JULAogCUlTQ1NJX1BBUkFNX1NFU1NfUkVDT1ZFUllfVE1PLAogCi0JLyogcGFzZWQgaW4gdGhyb3VnaCBiaW5kIGNvbm4gdXNpbmcgdHJhbnNwb3J0X2ZkICovCisJLyogcGFzc2VkIGluIHRocm91Z2ggYmluZCBjb25uIHVzaW5nIHRyYW5zcG9ydF9mZCAqLwogCUlTQ1NJX1BBUkFNX0NPTk5fUE9SVCwKIAlJU0NTSV9QQVJBTV9DT05OX0FERFJFU1MsCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9saWJmYy5oIGIvaW5jbHVkZS9zY3NpL2xpYmZjLmgKaW5kZXggMjQxOTNjMS4uYTNjYmRhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2xpYmZjLmgKKysrIGIvaW5jbHVkZS9zY3NpL2xpYmZjLmgKQEAgLTI2MCw3ICsyNjAsNyBAQAogLyoqCiAgKiBzdHJ1Y3QgZmNfc2VxX2Vsc19kYXRhIC0gRUxTIGRhdGEgdXNlZCBmb3IgcGFzc2luZyBFTFMgc3BlY2lmaWMgcmVzcG9uc2VzCiAgKiBAcmVhc29uOiBUaGUgcmVhc29uIGZvciByZWplY3Rpb24KLSAqIEBleHBsYW46IFRoZSBleHBsYWluYXRpb24gb2YgdGhlIHJlamVjdGlvbgorICogQGV4cGxhbjogVGhlIGV4cGxhbmF0aW9uIG9mIHRoZSByZWplY3Rpb24KICAqCiAgKiBNYWlubHkgdXNlZCBieSB0aGUgZXhjaGFuZ2UgbWFuYWdlciBsYXllci4KICAqLwpAQCAtNTI1LDcgKzUyNSw3IEBACiAJCQlzdHJ1Y3QgZmNfZnJhbWUgKik7CiAKIAkvKgotCSAqIFNlbmQgYW4gRUxTIHJlc3BvbnNlIHVzaW5nIGluZm9tYXRpb24gZnJvbSB0aGUgcmVjZWl2ZWQgZnJhbWUuCisJICogU2VuZCBhbiBFTFMgcmVzcG9uc2UgdXNpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgcmVjZWl2ZWQgZnJhbWUuCiAJICoKIAkgKiBTVEFUVVM6IE9QVElPTkFMCiAJICovCkBAIC02NjMsNyArNjYzLDcgQEAKIAlpbnQgKCpycG9ydF9sb2dvZmYpKHN0cnVjdCBmY19ycG9ydF9wcml2ICopOwogCiAJLyoKLQkgKiBSZWNpZXZlIGEgcmVxdWVzdCBmcm9tIGEgcmVtb3RlIHBvcnQuCisJICogUmVjZWl2ZSBhIHJlcXVlc3QgZnJvbSBhIHJlbW90ZSBwb3J0LgogCSAqCiAJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwpAQCAtNzA0LDcgKzcwNCw3IEBACiAJCQkJCSB2b2lkICopKTsKIAogCS8qCi0JICogQ2xlYW51cCB0aGUgRkNQIGxheWVyLCB1c2VkIGR1cnJpbmcgbGluayBkb3duIGFuZCByZXNldAorCSAqIENsZWFudXAgdGhlIEZDUCBsYXllciwgdXNlZCBkdXJpbmcgbGluayBkb3duIGFuZCByZXNldAogCSAqCiAJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2xpYmlzY3NpX3RjcC5oIGIvaW5jbHVkZS9zY3NpL2xpYmlzY3NpX3RjcC5oCmluZGV4IGU2YjlmZDIuLmFjMGNjMWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9saWJpc2NzaV90Y3AuaAorKysgYi9pbmNsdWRlL3Njc2kvbGliaXNjc2lfdGNwLmgKQEAgLTUyLDcgKzUyLDcgQEAKIAlpc2NzaV9zZWdtZW50X2RvbmVfZm5fdAkqZG9uZTsKIH07CiAKLS8qIFNvY2tldCBjb25uZWN0aW9uIHJlY2lldmUgaGVscGVyICovCisvKiBTb2NrZXQgY29ubmVjdGlvbiByZWNlaXZlIGhlbHBlciAqLwogc3RydWN0IGlzY3NpX3RjcF9yZWN2IHsKIAlzdHJ1Y3QgaXNjc2lfaGRyCSpoZHI7CiAJc3RydWN0IGlzY3NpX3NlZ21lbnQJc2VnbWVudDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9vc2RfaW5pdGlhdG9yLmggYi9pbmNsdWRlL3Njc2kvb3NkX2luaXRpYXRvci5oCmluZGV4IDUzYTllODguLjBhNTA3OTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9vc2RfaW5pdGlhdG9yLmgKKysrIGIvaW5jbHVkZS9zY3NpL29zZF9pbml0aWF0b3IuaApAQCAtMjY1LDcgKzI2NSw3IEBACiAgKiBAb3NpICAgICAgICAgICAtIFJlY2lldnMgYSBtb3JlIGRldGFpbGVkIGVycm9yIHJlcG9ydCBpbmZvcm1hdGlvbiAob3B0aW9uYWwpLgogICogQHNpbGVudCAgICAgICAgLSBEbyBub3QgcHJpbnQgdG8gZG1zZyAoRXZlbiBpZiBlbmFibGVkKQogICogQGJhZF9vYmpfbGlzdCAgLSBTb21lIGNvbW1hbmRzIGFjdCBvbiBtdWx0aXBsZSBvYmplY3RzLiBGYWlsZWQgb2JqZWN0cyB3aWxsCi0gKiAgICAgICAgICAgICAgICAgIGJlIHJlY2lldmVkIGhlcmUgKG9wdGlvbmFsKQorICogICAgICAgICAgICAgICAgICBiZSByZWNlaXZlZCBoZXJlIChvcHRpb25hbCkKICAqIEBtYXhfb2JqICAgICAgIC0gU2l6ZSBvZiBAYmFkX29ial9saXN0LgogICogQGJhZF9hdHRyX2xpc3QgLSBMaXN0IG9mIGZhaWxpbmcgYXR0cmlidXRlcyAob3B0aW9uYWwpCiAgKiBAbWF4X2F0dHIgICAgICAtIFNpemUgb2YgQGJhZF9hdHRyX2xpc3QuCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCmluZGV4IDJkM2VjNTAuLmRkODJlMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCkBAIC0xNjksNiArMTY5LDcgQEAKIAkJCQlzZGV2X2RldjsKIAogCXN0cnVjdCBleGVjdXRlX3dvcmsJZXc7IC8qIHVzZWQgdG8gZ2V0IHByb2Nlc3MgY29udGV4dCBvbiBwdXQgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcmVxdWV1ZV93b3JrOwogCiAJc3RydWN0IHNjc2lfZGhfZGF0YQkqc2NzaV9kaF9kYXRhOwogCWVudW0gc2NzaV9kZXZpY2Vfc3RhdGUgc2Rldl9zdGF0ZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaAppbmRleCBlN2UzODU4Li5mMWYyNjQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCkBAIC00Niw3ICs0Niw3IEBACiBlbnVtIHsKIAlTQ1NJX1FERVBUSF9ERUZBVUxULAkvKiBkZWZhdWx0IHJlcXVlc3RlZCBjaGFuZ2UsIGUuZy4gZnJvbSBzeXNmcyAqLwogCVNDU0lfUURFUFRIX1FGVUxMLAkvKiBzY3NpLW1sIHJlcXVlc3RlZCBkdWUgdG8gcXVldWUgZnVsbCAqLwotCVNDU0lfUURFUFRIX1JBTVBfVVAsCS8qIHNjc2ktbWwgcmVxdWVzdGVkIGR1ZSB0byB0aHJlc2hob2xkIGV2ZW50ICovCisJU0NTSV9RREVQVEhfUkFNUF9VUCwJLyogc2NzaS1tbCByZXF1ZXN0ZWQgZHVlIHRvIHRocmVzaG9sZCBldmVudCAqLwogfTsKIAogc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oCmluZGV4IDU5ODE2ZmUuLjJhNjUxNjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oCkBAIC0xOTIsOSArMTkyLDkgQEAKICAqCiAgKiBUaGlzIHN0cnVjdHVyZSBleGlzdHMgZm9yIGVhY2ggRkMgcG9ydCBpcyBhIHZpcnR1YWwgRkMgcG9ydC4gVmlydHVhbAogICogcG9ydHMgc2hhcmUgdGhlIHBoeXNpY2FsIGxpbmsgd2l0aCB0aGUgUGh5c2ljYWwgcG9ydC4gRWFjaCB2aXJ0dWFsCi0gKiBwb3J0cyBoYXMgYSB1bmlxdWUgcHJlc2Vuc2Ugb24gdGhlIFNBTiwgYW5kIG1heSBiZSBpbnN0YW50aWF0ZWQgdmlhCisgKiBwb3J0cyBoYXMgYSB1bmlxdWUgcHJlc2VuY2Ugb24gdGhlIFNBTiwgYW5kIG1heSBiZSBpbnN0YW50aWF0ZWQgdmlhCiAgKiBOUElWLCBWaXJ0dWFsIEZhYnJpY3MsIG9yIHZpYSBhZGRpdGlvbmFsIEFMUEFzLiBBcyB0aGUgdnBvcnQgaXMgYQotICogdW5pcXVlIHByZXNlbnNlLCBlYWNoIHZwb3J0IGhhcyBpdCdzIG93biB2aWV3IG9mIHRoZSBmYWJyaWMsCisgKiB1bmlxdWUgcHJlc2VuY2UsIGVhY2ggdnBvcnQgaGFzIGl0J3Mgb3duIHZpZXcgb2YgdGhlIGZhYnJpYywKICAqIGF1dGhlbnRpY2F0aW9uIHByaXZpbGVnZSwgYW5kIHByaW9yaXRpZXMuCiAgKgogICogQSB2aXJ0dWFsIHBvcnQgbWF5IHN1cHBvcnQgMSBvciBtb3JlIEZDNCByb2xlcy4gVHlwaWNhbGx5IGl0IGlzIGEKQEAgLTM3MCw3ICszNzAsNyBAQAogLyoKICAqIEZDIFNDU0kgVGFyZ2V0IEF0dHJpYnV0ZXMKICAqCi0gKiBUaGUgU0NTSSBUYXJnZXQgaXMgY29uc2lkZXJlZCBhbiBleHRlbnRpb24gb2YgYSByZW1vdGUgcG9ydCAoYXMKKyAqIFRoZSBTQ1NJIFRhcmdldCBpcyBjb25zaWRlcmVkIGFuIGV4dGVuc2lvbiBvZiBhIHJlbW90ZSBwb3J0IChhcwogICogYSByZW1vdGUgcG9ydCBjYW4gYmUgbW9yZSB0aGFuIGEgU0NTSSBUYXJnZXQpLiBXaXRoaW4gdGhlIHNjc2kKICAqIHN1YnN5c3RlbSwgd2UgbGVhdmUgdGhlIFRhcmdldCBhcyBhIHNlcGFyYXRlIGVudGl0eS4gRG9pbmcgc28KICAqIHByb3ZpZGVzIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBwcmlvciBGQyB0cmFuc3BvcnQgYXBpJ3MsCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2FjOTdfY29kZWMuaCBiL2luY2x1ZGUvc291bmQvYWM5N19jb2RlYy5oCmluZGV4IGYxZGNlZmU0Li4wMmNiYjUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2FjOTdfY29kZWMuaAorKysgYi9pbmNsdWRlL3NvdW5kL2FjOTdfY29kZWMuaApAQCAtMzg1LDcgKzM4NSw3IEBACiAjZGVmaW5lIEFDOTdfU0NBUF9ERVRFQ1RfQllfVkVORE9SICgxPDw4KSAvKiB1c2UgdmVuZG9yIHJlZ2lzdGVycyBmb3IgcmVhZCB0ZXN0cyAqLwogI2RlZmluZSBBQzk3X1NDQVBfTk9fU1BESUYJKDE8PDkpCS8qIGRvbid0IGJ1aWxkIFNQRElGIGNvbnRyb2xzICovCiAjZGVmaW5lIEFDOTdfU0NBUF9FQVBEX0xFRAkoMTw8MTApCS8qIEVBUEQgYXMgbXV0ZSBMRUQgKi8KLSNkZWZpbmUgQUM5N19TQ0FQX1BPV0VSX1NBVkUJKDE8PDExKQkvKiBjYXBhYmxlIGZvciBhZ2dyZXNpdmUgcG93ZXItc2F2aW5nICovCisjZGVmaW5lIEFDOTdfU0NBUF9QT1dFUl9TQVZFCSgxPDwxMSkJLyogY2FwYWJsZSBmb3IgYWdncmVzc2l2ZSBwb3dlci1zYXZpbmcgKi8KIAogLyogYWM5Ny0+ZmxhZ3MgKi8KICNkZWZpbmUgQUM5N19IQVNfUENfQkVFUAkoMTw8MCkJLyogZm9yY2UgUEMgU3BlYWtlciB1c2FnZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9jb250cm9sLmggYi9pbmNsdWRlL3NvdW5kL2NvbnRyb2wuaAppbmRleCBlNjdkYjI4Li40MDRhY2I4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2NvbnRyb2wuaAorKysgYi9pbmNsdWRlL3NvdW5kL2NvbnRyb2wuaApAQCAtMTkxLDcgKzE5MSw3IEBACiAgKiBSZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCiAgKgogICogQWxsIHNsYXZlcyBtdXN0IGJlIHRoZSBzYW1lIHR5cGUgKHJldHVybmluZyB0aGUgc2FtZSBpbmZvcm1hdGlvbgotICogdmlhIGluZm8gY2FsbGJhY2spLiAgVGhlIGZ1Y250aW9uIGRvZXNuJ3QgY2hlY2sgaXQsIHNvIGl0J3MgeW91cgorICogdmlhIGluZm8gY2FsbGJhY2spLiAgVGhlIGZ1bmN0aW9uIGRvZXNuJ3QgY2hlY2sgaXQsIHNvIGl0J3MgeW91cgogICogcmVzcG9uc2liaWxpdHkuCiAgKgogICogQWxzbywgc29tZSBhZGRpdGlvbmFsIGxpbWl0YXRpb25zOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9jczQ2eHhfZHNwX3Nwb3MuaCBiL2luY2x1ZGUvc291bmQvY3M0Nnh4X2RzcF9zcG9zLmgKaW5kZXggNDliMDNjOS4uODAwOGM1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9jczQ2eHhfZHNwX3Nwb3MuaAorKysgYi9pbmNsdWRlL3NvdW5kL2NzNDZ4eF9kc3Bfc3Bvcy5oCkBAIC0xNDcsNyArMTQ3LDcgQEAKIH07CiAKIHN0cnVjdCBkc3Bfc3Bvc19pbnN0YW5jZSB7Ci0Jc3RydWN0IGRzcF9zeW1ib2xfZGVzYyBzeW1ib2xfdGFibGU7IC8qIGN1cnJlbnRseSBhdmFpbGJsZSBsb2FkZWQgc3ltYm9scyBpbiBTUCAqLworCXN0cnVjdCBkc3Bfc3ltYm9sX2Rlc2Mgc3ltYm9sX3RhYmxlOyAvKiBjdXJyZW50bHkgYXZhaWxhYmxlIGxvYWRlZCBzeW1ib2xzIGluIFNQICovCiAKIAlpbnQgbm1vZHVsZXM7CiAJc3RydWN0IGRzcF9tb2R1bGVfZGVzYyAqIG1vZHVsZXM7IC8qIG1vZHVsZXMgbG9hZGVkIGludG8gU1AgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvaGRzcG0uaCBiL2luY2x1ZGUvc291bmQvaGRzcG0uaAppbmRleCAxNzc0ZmY1Li4xZjU5ZWEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2hkc3BtLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9oZHNwbS5oCkBAIC0xOTMsNyArMTkzLDcgQEAKICAqIDMyNzY4IEJ5dGVzCiAgKi8KIAotLyogb3JnYW5pc2F0aW9uIGlzIDY0IGNoYW5uZWxmYWRlciBpbiBhIGNvbnRpbm91cyBtZW1vcnkgYmxvY2sgKi8KKy8qIG9yZ2FuaXNhdGlvbiBpcyA2NCBjaGFubmVsZmFkZXIgaW4gYSBjb250aW51b3VzIG1lbW9yeSBibG9jayAqLwogLyogZXF1aXZhbGVudCB0byBoYXJkd2FyZSBkZWZpbml0aW9uLCBtYXliZSBmb3IgZnV0dXJlIGZlYXR1cmUgb2YgbW1hcCBvZgogICogdGhlbQogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmggYi9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmgKaW5kZXggZGRjMmIzZC4uZjcyYzEwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oCisrKyBiL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaApAQCAtMjMsNyArMjMsNyBAQAogLyoKICAqIFNvQyBkeW5hbWljIGF1ZGlvIHBvd2VyIG1hbmFnZW1lbnQKICAqCi0gKiBXZSBjYW4gaGF2ZSB1cHRvIDQgcG93ZXIgZG9tYWlucworICogV2UgY2FuIGhhdmUgdXAgdG8gNCBwb3dlciBkb21haW5zCiAgKiAJMS4gQ29kZWMgZG9tYWluIC0gVlJFRiwgVk1JRAogICogICAgIFVzdWFsbHkgY29udHJvbGxlZCBhdCBjb2RlYyBwcm9iZS9yZW1vdmUsIGFsdGhvdWdoIGNhbiBiZSBzZXQKICAqICAgICBhdCBzdHJlYW0gdGltZSBpZiBwb3dlciBpcyBub3QgbmVlZGVkIGZvciBzaWRldG9uZSwgZXRjLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oIGIvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oCmluZGV4IGMxNWVkNTAuLjFkM2I1YjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdGFyZ2V0L3RhcmdldF9jb3JlX2Jhc2UuaAorKysgYi9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV9iYXNlLmgKQEAgLTIyLDcgKzIyLDcgQEAKICAqIE5vdGUgdGhhdCBib3RoIGluY2x1ZGUvc2NzaS9zY3NpX2NtbmQuaDpNQVhfQ09NTUFORF9TSVpFIGFuZAogICogaW5jbHVkZS9saW51eC9ibGtkZXYuaDpCTE9DS19NQVhfQ0RCIGFzIG9mIHYyLjYuMzYtcmM0IHN0aWxsIHVzZQogICogMTYtYnl0ZSBDREJzIGJ5IGRlZmF1bHQgYW5kIHJlcXVpcmUgYW4gZXh0cmEgYWxsb2NhdGlvbiBmb3IKLSAqIDMyLWJ5dGUgQ0RCcyB0byBiZWNhc3VlIG9mIGxlZ2FjeSBpc3N1ZXMuCisgKiAzMi1ieXRlIENEQnMgdG8gYmVjYXVzZSBvZiBsZWdhY3kgaXNzdWVzLgogICoKICAqIFdpdGhpbiBUQ00gQ29yZSB0aGVyZSBhcmUgbm8gc3VjaCBsZWdhY3kgbGltaXRpYXRpb25zLCBzbyB3ZSBnbyBhaGVhZAogICogdXNlIDMyLWJ5dGUgQ0RCcyBieSBkZWZhdWx0IGFuZCB1c2UgaW5jbHVkZS9zY3NpL3Njc2kuaDpzY3NpX2NvbW1hbmRfc2l6ZSgpCkBAIC0zMDIsNyArMzAyLDcgQEAKIAogCiAvKgotICogVXNlZCBieSBUQ00gQ29yZSBpbnRlcm5hbGx5IHRvIHNpZ25hbCBpZiA+PSBTUEMtMyBwZXJpc3RlbnQgcmVzZXJ2YXRpb25zCisgKiBVc2VkIGJ5IFRDTSBDb3JlIGludGVybmFsbHkgdG8gc2lnbmFsIGlmID49IFNQQy0zIHBlcnNpc3RlbnQgcmVzZXJ2YXRpb25zCiAgKiBlbXVsYXRpb24gaXMgZW5hYmxlZCBvciBkaXNhYmxlZCwgb3IgcnVubmluZyBpbiB3aXRoIFRDTS9wU0NTSSBwYXNzdGhyb3VnaAogICogbW9kZQogICovCkBAIC05MzQsNyArOTM0LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWFjbF9ub2RlX2xpc3Q7CiAJc3RydWN0IHNlX2x1bgkJKnRwZ19sdW5fbGlzdDsKIAlzdHJ1Y3Qgc2VfbHVuCQl0cGdfdmlydF9sdW4wOwotCS8qIExpc3Qgb2YgVENNIHNlc3Npb25zIGFzc29pY2F0ZWQgd3RoIHRoaXMgVFBHICovCisJLyogTGlzdCBvZiBUQ00gc2Vzc2lvbnMgYXNzb2NpYXRlZCB3dGggdGhpcyBUUEcgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXRwZ19zZXNzX2xpc3Q7CiAJLyogUG9pbnRlciB0byAkRkFCUklDX01PRCBkZXBlbmRlbnQgY29kZSAqLwogCXN0cnVjdCB0YXJnZXRfY29yZV9mYWJyaWNfb3BzICpzZV90cGdfdGZvOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfZmFicmljX29wcy5oIGIvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfZmFicmljX29wcy5oCmluZGV4IDVlYjhiMWEuLmRjNzhmNzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdGFyZ2V0L3RhcmdldF9jb3JlX2ZhYnJpY19vcHMuaAorKysgYi9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV9mYWJyaWNfb3BzLmgKQEAgLTM1LDcgKzM1LDcgQEAKIAkvKgogCSAqIE9wdGlvbmFsIGZ1bmN0aW9uIHBvaW50ZXIgZm9yIFRDTSB0byBwZXJmb3JtIGNvbW1hbmQgbWFwCiAJICogZnJvbSBUQ00gcHJvY2Vzc2luZyB0aHJlYWQgY29udGV4dCwgZm9yIHRob3NlIHN0cnVjdCBzZV9jbWQKLQkgKiBpbml0YWxseSBhbGxvY2F0ZWQgaW4gaW50ZXJydXB0IGNvbnRleHQuCisJICogaW5pdGlhbGx5IGFsbG9jYXRlZCBpbiBpbnRlcnJ1cHQgY29udGV4dC4KIAkgKi8KIAlpbnQgKCpuZXdfY21kX21hcCkoc3RydWN0IHNlX2NtZCAqKTsKIAkvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYmxvY2suaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Jsb2NrLmgKaW5kZXggNzhmMThhZC4uYmYzNjY1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYmxvY2suaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9ibG9jay5oCkBAIC00MDEsOSArNDAxLDkgQEAKIAogREVDTEFSRV9FVkVOVF9DTEFTUyhibG9ja191bnBsdWcsCiAKLQlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSksCisJVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIGludCBkZXB0aCwgYm9vbCBleHBsaWNpdCksCiAKLQlUUF9BUkdTKHEpLAorCVRQX0FSR1MocSwgZGVwdGgsIGV4cGxpY2l0KSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCV9fZmllbGQoIGludCwJCW5yX3JxCQkJKQpAQCAtNDExLDcgKzQxMSw3IEBACiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKAotCQlfX2VudHJ5LT5ucl9ycQk9IHEtPnJxLmNvdW50W1JFQURdICsgcS0+cnEuY291bnRbV1JJVEVdOworCQlfX2VudHJ5LT5ucl9ycSA9IGRlcHRoOwogCQltZW1jcHkoX19lbnRyeS0+Y29tbSwgY3VycmVudC0+Y29tbSwgVEFTS19DT01NX0xFTik7CiAJKSwKIApAQCAtNDE5LDMxICs0MTksMTkgQEAKICk7CiAKIC8qKgotICogYmxvY2tfdW5wbHVnX3RpbWVyIC0gdGltZWQgcmVsZWFzZSBvZiBvcGVyYXRpb25zIHJlcXVlc3RzIGluIHF1ZXVlIHRvIGRldmljZSBkcml2ZXIKKyAqIGJsb2NrX3VucGx1ZyAtIHJlbGVhc2Ugb2Ygb3BlcmF0aW9ucyByZXF1ZXN0cyBpbiByZXF1ZXN0IHF1ZXVlCiAgKiBAcTogcmVxdWVzdCBxdWV1ZSB0byB1bnBsdWcKLSAqCi0gKiBVbnBsdWcgdGhlIHJlcXVlc3QgcXVldWUgQHEgYmVjYXVzZSBhIHRpbWVyIGV4cGlyZWQgYW5kIGFsbG93IGJsb2NrCi0gKiBvcGVyYXRpb24gcmVxdWVzdHMgdG8gYmUgc2VudCB0byB0aGUgZGV2aWNlIGRyaXZlci4KLSAqLwotREVGSU5FX0VWRU5UKGJsb2NrX3VucGx1ZywgYmxvY2tfdW5wbHVnX3RpbWVyLAotCi0JVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpLAotCi0JVFBfQVJHUyhxKQotKTsKLQotLyoqCi0gKiBibG9ja191bnBsdWdfaW8gLSByZWxlYXNlIG9mIG9wZXJhdGlvbnMgcmVxdWVzdHMgaW4gcmVxdWVzdCBxdWV1ZQotICogQHE6IHJlcXVlc3QgcXVldWUgdG8gdW5wbHVnCisgKiBAZGVwdGg6IG51bWJlciBvZiByZXF1ZXN0cyBqdXN0IGFkZGVkIHRvIHRoZSBxdWV1ZQorICogQGV4cGxpY2l0OiB3aGV0aGVyIHRoaXMgd2FzIGFuIGV4cGxpY2l0IHVucGx1Zywgb3Igb25lIGZyb20gc2NoZWR1bGUoKQogICoKICAqIFVucGx1ZyByZXF1ZXN0IHF1ZXVlIEBxIGJlY2F1c2UgZGV2aWNlIGRyaXZlciBpcyBzY2hlZHVsZWQgdG8gd29yawogICogb24gZWxlbWVudHMgaW4gdGhlIHJlcXVlc3QgcXVldWUuCiAgKi8KLURFRklORV9FVkVOVChibG9ja191bnBsdWcsIGJsb2NrX3VucGx1Z19pbywKK0RFRklORV9FVkVOVChibG9ja191bnBsdWcsIGJsb2NrX3VucGx1ZywKIAotCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKSwKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdW5zaWduZWQgaW50IGRlcHRoLCBib29sIGV4cGxpY2l0KSwKIAotCVRQX0FSR1MocSkKKwlUUF9BUkdTKHEsIGRlcHRoLCBleHBsaWNpdCkKICk7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvZ2ZwZmxhZ3MuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2dmcGZsYWdzLmgKaW5kZXggZTM2MTVjMC4uOWZlM2EzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvZ2ZwZmxhZ3MuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9nZnBmbGFncy5oCkBAIC0xMCw2ICsxMCw3IEBACiAgKi8KICNkZWZpbmUgc2hvd19nZnBfZmxhZ3MoZmxhZ3MpCQkJCQkJXAogCShmbGFncykgPyBfX3ByaW50X2ZsYWdzKGZsYWdzLCAifCIsCQkJCVwKKwl7KHVuc2lnbmVkIGxvbmcpR0ZQX1RSQU5TSFVHRSwJCSJHRlBfVFJBTlNIVUdFIn0sCVwKIAl7KHVuc2lnbmVkIGxvbmcpR0ZQX0hJR0hVU0VSX01PVkFCTEUsCSJHRlBfSElHSFVTRVJfTU9WQUJMRSJ9LCBcCiAJeyh1bnNpZ25lZCBsb25nKUdGUF9ISUdIVVNFUiwJCSJHRlBfSElHSFVTRVIifSwJXAogCXsodW5zaWduZWQgbG9uZylHRlBfVVNFUiwJCSJHRlBfVVNFUiJ9LAkJXApAQCAtMzIsNiArMzMsOSBAQAogCXsodW5zaWduZWQgbG9uZylfX0dGUF9IQVJEV0FMTCwJCSJHRlBfSEFSRFdBTEwifSwJXAogCXsodW5zaWduZWQgbG9uZylfX0dGUF9USElTTk9ERSwJCSJHRlBfVEhJU05PREUifSwJXAogCXsodW5zaWduZWQgbG9uZylfX0dGUF9SRUNMQUlNQUJMRSwJIkdGUF9SRUNMQUlNQUJMRSJ9LAlcCi0Jeyh1bnNpZ25lZCBsb25nKV9fR0ZQX01PVkFCTEUsCQkiR0ZQX01PVkFCTEUifQkJXAorCXsodW5zaWduZWQgbG9uZylfX0dGUF9NT1ZBQkxFLAkJIkdGUF9NT1ZBQkxFIn0sCQlcCisJeyh1bnNpZ25lZCBsb25nKV9fR0ZQX05PVFJBQ0ssCQkiR0ZQX05PVFJBQ0sifSwJCVwKKwl7KHVuc2lnbmVkIGxvbmcpX19HRlBfTk9fS1NXQVBELAkiR0ZQX05PX0tTV0FQRCJ9LAlcCisJeyh1bnNpZ25lZCBsb25nKV9fR0ZQX09USEVSX05PREUsCSJHRlBfT1RIRVJfTk9ERSJ9CVwKIAkpIDogIkdGUF9OT1dBSVQiCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8va3lyby5oIGIvaW5jbHVkZS92aWRlby9reXJvLmgKaW5kZXggZGJhN2RlMi4uYzU2Mzk2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlby9reXJvLmgKKysrIGIvaW5jbHVkZS92aWRlby9reXJvLmgKQEAgLTMyLDcgKzMyLDcgQEAKIAl1MzIgUElYQ0xLOwkvKiBQaXhlbCBDbG9jayAgICAgICAqLwogCXUzMiBIQ0xLOwkvKiBIb3IgQ2xvY2sgICAgICAgICAqLwogCi0JLyogVXNlZnVsbCB0byBob2xkIGRlcHRoIGhlcmUgZm9yIExpbnV4ICovCisJLyogVXNlZnVsIHRvIGhvbGQgZGVwdGggaGVyZSBmb3IgTGludXggKi8KIAl1OCBQSVhERVBUSDsKIAogI2lmZGVmIENPTkZJR19NVFJSCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL25lb21hZ2ljLmggYi9pbmNsdWRlL3ZpZGVvL25lb21hZ2ljLmgKaW5kZXggMDhiNjYzNy4uYmM1MDEzZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlby9uZW9tYWdpYy5oCisrKyBiL2luY2x1ZGUvdmlkZW8vbmVvbWFnaWMuaApAQCAtMTI5LDcgKzEyOSw3IEBACiAJdW5zaWduZWQgY2hhciBDUlRDWzI1XTsJCS8qIENydGMgQ29udHJvbGxlciAqLwogCXVuc2lnbmVkIGNoYXIgU2VxdWVuY2VyWzVdOwkvKiBWaWRlbyBTZXF1ZW5jZXIgKi8KIAl1bnNpZ25lZCBjaGFyIEdyYXBoaWNzWzldOwkvKiBWaWRlbyBHcmFwaGljcyAqLwotCXVuc2lnbmVkIGNoYXIgQXR0cmlidXRlWzIxXTsJLyogVmlkZW8gQXRyaWJ1dGUgKi8KKwl1bnNpZ25lZCBjaGFyIEF0dHJpYnV0ZVsyMV07CS8qIFZpZGVvIEF0dHJpYnV0ZSAqLwogCiAJdW5zaWduZWQgY2hhciBHZW5lcmFsTG9ja1JlZzsKIAl1bnNpZ25lZCBjaGFyIEV4dENSVERpc3BBZGRyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9uZXdwb3J0LmggYi9pbmNsdWRlL3ZpZGVvL25ld3BvcnQuaAppbmRleCAwMDFiOTM1Li4zZDdjNGI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL25ld3BvcnQuaAorKysgYi9pbmNsdWRlL3ZpZGVvL25ld3BvcnQuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkbUBlbmdyLnNnaS5jb20pCiAgKiAKLSAqIFVsZiBDYXJsc3NvbiAtIENvbXBhYmlsaXR5IHdpdGggdGhlIElSSVggc3RydWN0dXJlcyBhZGRlZAorICogVWxmIENhcmxzc29uIC0gQ29tcGF0aWJpbGl0eSB3aXRoIHRoZSBJUklYIHN0cnVjdHVyZXMgYWRkZWQKICAqLwogCiAjaWZuZGVmIF9TR0lfTkVXUE9SVF9ICmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL3Npc2ZiLmggYi9pbmNsdWRlL3ZpZGVvL3Npc2ZiLmgKaW5kZXggZmRkNzRmMS4uNmRjNWRmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlby9zaXNmYi5oCisrKyBiL2luY2x1ZGUvdmlkZW8vc2lzZmIuaApAQCAtMTUxLDcgKzE1MSw3IEBACiAJX191MzIgIHNpc2ZiX3Jlc3VsdFs0XTsKIH07CiAKLS8qIEFkZHRpb25hbCBJT0NUTHMgZm9yIGNvbW11bmljYXRpb24gc2lzZmIgPD4gWCBkcml2ZXIgICAgICAgICAgICAgICAgKi8KKy8qIEFkZGl0aW9uYWwgSU9DVExzIGZvciBjb21tdW5pY2F0aW9uIHNpc2ZiIDw+IFggZHJpdmVyICAgICAgICAgICAgICAgICovCiAvKiBJZiBjaGFuZ2luZyB0aGlzLCB2Z2F0eXBlcy5oIG11c3QgYWxzbyBiZSBjaGFuZ2VkIChmb3IgWCBkcml2ZXIpICAgICovCiAKIC8qIGlvY3RsIGZvciBpZGVudGlmeWluZyBhbmQgZ2l2aW5nIHNvbWUgaW5mbyAoZXNwLiBtZW1vcnkgaGVhcCBzdGFydCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vc3N0ZmIuaCBiL2luY2x1ZGUvdmlkZW8vc3N0ZmIuaAppbmRleCBiNTJmMDczLi5jNDQ5ZWFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL3NzdGZiLmgKKysrIGIvaW5jbHVkZS92aWRlby9zc3RmYi5oCkBAIC0xNTYsNyArMTU2LDcgQEAKICNkZWZpbmUgREFDX1JFQUQJCUZCSUlOSVQyCS8qIGluIHJlbWFwIG1vZGUgKi8KICNkZWZpbmUgRkJJSU5JVDMJCTB4MDIxYwkJLyogZmJpIGNvbnRyb2xzICovCiAjICBkZWZpbmUgRElTQUJMRV9URVhUVVJFCSAgQklUKDYpCi0jICBkZWZpbmUgWV9TV0FQX09SSUdJTl9TSElGVAkgIDIyCQkvKiBZIHN3YXAgc3Vic3RyYWN0aW9uIHZhbHVlICovCisjICBkZWZpbmUgWV9TV0FQX09SSUdJTl9TSElGVAkgIDIyCQkvKiBZIHN3YXAgc3VidHJhY3Rpb24gdmFsdWUgKi8KICNkZWZpbmUgSFNZTkMJCQkweDAyMjAKICNkZWZpbmUgVlNZTkMJCQkweDAyMjQKICNkZWZpbmUgREFDX0RBVEEJCTB4MDIyYwpAQCAtMjEyLDkgKzIxMiw5IEBACiAjICBkZWZpbmUgREFDUkVHX0NSMF8yNEJQUAkgIDB4NTAJCS8qIG1vZGUgNSAqLwogI2RlZmluZQlEQUNSRUdfQ1IxX0kJCTB4MDUKICNkZWZpbmUgREFDUkVHX0NDX0kJCTB4MDYKLSMgIGRlZmluZSBEQUNSRUdfQ0NfQ0xLQQkgIEJJVCg3KQkvKiBjbGsgQSBjb250cm9sZWQgYnkgcmVncyAqLworIyAgZGVmaW5lIERBQ1JFR19DQ19DTEtBCSAgQklUKDcpCS8qIGNsayBBIGNvbnRyb2xsZWQgYnkgcmVncyAqLwogIyAgZGVmaW5lIERBQ1JFR19DQ19DTEtBX0MJICAoMjw8NCkJLyogY2xrIEEgdXNlcyByZWcgQyAqLwotIyAgZGVmaW5lIERBQ1JFR19DQ19DTEtCCSAgQklUKDMpCS8qIGNsayBCIGNvbnRyb2xlZCBieSByZWdzICovCisjICBkZWZpbmUgREFDUkVHX0NDX0NMS0IJICBCSVQoMykJLyogY2xrIEIgY29udHJvbGxlZCBieSByZWdzICovCiAjICBkZWZpbmUgREFDUkVHX0NDX0NMS0JfRAkgIDMJCS8qIGNsa0IgdXNlcyByZWcgRCAqLwogI2RlZmluZSBEQUNSRUdfQUMwX0kJCTB4NDgJCS8qIGNsb2NrIEEgcmVnIEMgKi8KICNkZWZpbmUgREFDUkVHX0FDMV9JCQkweDQ5CmRpZmYgLS1naXQgYS9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvZWxmbm90ZS5oIGIvaW5jbHVkZS94ZW4vaW50ZXJmYWNlL2VsZm5vdGUuaAppbmRleCA3YTgyNjJjLi4wMzYwYjE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvZWxmbm90ZS5oCisrKyBiL2luY2x1ZGUveGVuL2ludGVyZmFjZS9lbGZub3RlLmgKQEAgLTUxLDcgKzUxLDcgQEAKIAogLyoKICAqIFRoZSBvZmZzZXQgb2YgdGhlIEVMRiBwYWRkciBmaWVsZCBmcm9tIHRoZSBhY3V0YWwgcmVxdWlyZWQKLSAqIHBzdWVkby1waHlzaWNhbCBhZGRyZXNzIChudW1lcmljKS4KKyAqIHBzZXVkby1waHlzaWNhbCBhZGRyZXNzIChudW1lcmljKS4KICAqCiAgKiBUaGlzIGlzIHVzZWQgdG8gbWFpbnRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBrZXJuZWxzCiAgKiB3aGljaCB3cm90ZSBfX1BBR0VfT0ZGU0VUIGludG8gdGhhdCBmaWVsZC4gVGhpcyBmaWVsZCBkZWZhdWx0cyB0byAwCmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggNTYyNDBlNy4uN2E3MWUwYSAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtOTI0LDE0ICs5MjQsNiBAQAogICAgICAgICAgIGVudmlyb25tZW50cyB3aGljaCBjYW4gdG9sZXJhdGUgYSAibm9uLXN0YW5kYXJkIiBrZXJuZWwuCiAgICAgICAgICAgT25seSB1c2UgdGhpcyBpZiB5b3UgcmVhbGx5IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgogCi1jb25maWcgRU1CRURERUQKLQlib29sICJFbWJlZGRlZCBzeXN0ZW0iCi0Jc2VsZWN0IEVYUEVSVAotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIHNob3VsZCBiZSBlbmFibGVkIGlmIGNvbXBpbGluZyB0aGUga2VybmVsIGZvcgotCSAgYW4gZW1iZWRkZWQgc3lzdGVtIHNvIGNlcnRhaW4gZXhwZXJ0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZQotCSAgZm9yIGNvbmZpZ3VyYXRpb24uCi0KIGNvbmZpZyBVSUQxNgogCWJvb2wgIkVuYWJsZSAxNi1iaXQgVUlEIHN5c3RlbSBjYWxscyIgaWYgRVhQRVJUCiAJZGVwZW5kcyBvbiBBUk0gfHwgQkxBQ0tGSU4gfHwgQ1JJUyB8fCBGUlYgfHwgSDgzMDAgfHwgWDg2XzMyIHx8IE02OEsgfHwgKFMzOTAgJiYgITY0QklUKSB8fCBTVVBFUkggfHwgU1BBUkMzMiB8fCAoU1BBUkM2NCAmJiBDT01QQVQpIHx8IFVNTCB8fCAoWDg2XzY0ICYmIElBMzJfRU1VTEFUSU9OKQpAQCAtMTEwNCw2ICsxMDk2LDE0IEBACiAgICAgICAgICAgYnkgc29tZSBoaWdoIHBlcmZvcm1hbmNlIHRocmVhZGVkIGFwcGxpY2F0aW9ucy4gRGlzYWJsaW5nCiAgICAgICAgICAgdGhpcyBvcHRpb24gc2F2ZXMgYWJvdXQgN2suCiAKK2NvbmZpZyBFTUJFRERFRAorCWJvb2wgIkVtYmVkZGVkIHN5c3RlbSIKKwlzZWxlY3QgRVhQRVJUCisJaGVscAorCSAgVGhpcyBvcHRpb24gc2hvdWxkIGJlIGVuYWJsZWQgaWYgY29tcGlsaW5nIHRoZSBrZXJuZWwgZm9yCisJICBhbiBlbWJlZGRlZCBzeXN0ZW0gc28gY2VydGFpbiBleHBlcnQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlCisJICBmb3IgY29uZmlndXJhdGlvbi4KKwogY29uZmlnIEhBVkVfUEVSRl9FVkVOVFMKIAlib29sCiAJaGVscApkaWZmIC0tZ2l0IGEvaW5pdC9kb19tb3VudHMuYyBiL2luaXQvZG9fbW91bnRzLmMKaW5kZXggM2UwMTEyMS4uYzA4NTFhOCAxMDA2NDQKLS0tIGEvaW5pdC9kb19tb3VudHMuYworKysgYi9pbml0L2RvX21vdW50cy5jCkBAIC0xODYsNyArMTg2LDcgQEAKIAkJZ290byBkb25lOwogCiAJLyoKLQkgKiB0cnkgbm9uLWV4aXN0YW50LCBidXQgdmFsaWQgcGFydGl0aW9uLCB3aGljaCBtYXkgb25seSBleGlzdAorCSAqIHRyeSBub24tZXhpc3RlbnQsIGJ1dCB2YWxpZCBwYXJ0aXRpb24sIHdoaWNoIG1heSBvbmx5IGV4aXN0CiAJICogYWZ0ZXIgcmV2YWxpZGF0aW5nIHRoZSBkaXNrLCBsaWtlIHBhcnRpdGlvbmVkIG1kIGRldmljZXMKIAkgKi8KIAl3aGlsZSAocCA+IHMgJiYgaXNkaWdpdChwWy0xXSkpCmRpZmYgLS1naXQgYS9pcGMvbXNnLmMgYi9pcGMvbXNnLmMKaW5kZXggMGU3MzJlOS4uNzM4NWRlMiAxMDA2NDQKLS0tIGEvaXBjL21zZy5jCisrKyBiL2lwYy9tc2cuYwpAQCAtNzA0LDcgKzcwNCw3IEBACiAJbXNxLT5xX3N0aW1lID0gZ2V0X3NlY29uZHMoKTsKIAogCWlmICghcGlwZWxpbmVkX3NlbmQobXNxLCBtc2cpKSB7Ci0JCS8qIG5vb25lIGlzIHdhaXRpbmcgZm9yIHRoaXMgbWVzc2FnZSwgZW5xdWV1ZSBpdCAqLworCQkvKiBubyBvbmUgaXMgd2FpdGluZyBmb3IgdGhpcyBtZXNzYWdlLCBlbnF1ZXVlIGl0ICovCiAJCWxpc3RfYWRkX3RhaWwoJm1zZy0+bV9saXN0LCAmbXNxLT5xX21lc3NhZ2VzKTsKIAkJbXNxLT5xX2NieXRlcyArPSBtc2dzejsKIAkJbXNxLT5xX3FudW0rKzsKQEAgLTg0Miw3ICs4NDIsNyBAQAogCQkgKiBEaXNhYmxlIHByZWVtcHRpb24uICBXZSBkb24ndCBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBxdWV1ZQogCQkgKiBhbmQgZ2V0dGluZyBhIHJlZmVyZW5jZSB3b3VsZCBkZWZlYXQgdGhlIGlkZWEgb2YgYSBsb2NrbGVzcwogCQkgKiBvcGVyYXRpb24sIHRodXMgdGhlIGNvZGUgcmVsaWVzIG9uIHJjdSB0byBndWFyYW50ZWUgdGhlCi0JCSAqIGV4aXN0YW5jZSBvZiBtc3E6CisJCSAqIGV4aXN0ZW5jZSBvZiBtc3E6CiAJCSAqIFByaW9yIHRvIGRlc3RydWN0aW9uLCBleHB1bmdlX2FsbCgtRUlSRE0pIGNoYW5nZXMgcl9tc2cuCiAJCSAqIFRodXMgaWYgcl9tc2cgaXMgLUVBR0FJTiwgdGhlbiB0aGUgcXVldWUgbm90IHlldCBkZXN0cm95ZWQuCiAJCSAqIHJjdV9yZWFkX2xvY2soKSBwcmV2ZW50cyBwcmVlbXB0aW9uIGJldHdlZW4gcmVhZGluZyByX21zZwpkaWZmIC0tZ2l0IGEvaXBjL3NlbS5jIGIvaXBjL3NlbS5jCmluZGV4IGFlMDQwYTAuLjM0MTkzZWQgMTAwNjQ0Ci0tLSBhL2lwYy9zZW0uYworKysgYi9pcGMvc2VtLmMKQEAgLTEzNjIsNyArMTM2Miw3IEBACiAJICogc2VtaWQgaWRlbnRpZmllcnMgYXJlIG5vdCB1bmlxdWUgLSBmaW5kX2FsbG9jX3VuZG8gbWF5IGhhdmUKIAkgKiBhbGxvY2F0ZWQgYW4gdW5kbyBzdHJ1Y3R1cmUsIGl0IHdhcyBpbnZhbGlkYXRlZCBieSBhbiBSTUlECiAJICogYW5kIG5vdyBhIG5ldyBhcnJheSB3aXRoIHJlY2VpdmVkIHRoZSBzYW1lIGlkLiBDaGVjayBhbmQgZmFpbC4KLQkgKiBUaGlzIGNhc2UgY2FuIGJlIGRldGVjdGVkIGNoZWNraW5nIHVuLT5zZW1pZC4gVGhlIGV4aXN0YW5jZSBvZgorCSAqIFRoaXMgY2FzZSBjYW4gYmUgZGV0ZWN0ZWQgY2hlY2tpbmcgdW4tPnNlbWlkLiBUaGUgZXhpc3RlbmNlIG9mCiAJICogInVuIiBpdHNlbGYgaXMgZ3VhcmFudGVlZCBieSByY3UuCiAJICovCiAJZXJyb3IgPSAtRUlEUk07CmRpZmYgLS1naXQgYS9pcGMvc2htLmMgYi9pcGMvc2htLmMKaW5kZXggODY0NDQ1Mi4uNzI5YWNiNyAxMDA2NDQKLS0tIGEvaXBjL3NobS5jCisrKyBiL2lwYy9zaG0uYwpAQCAtMTA1Niw3ICsxMDU2LDcgQEAKIAkvKgogCSAqIFdlIG5lZWQgbG9vayBubyBmdXJ0aGVyIHRoYW4gdGhlIG1heGltdW0gYWRkcmVzcyBhIGZyYWdtZW50CiAJICogY291bGQgcG9zc2libHkgaGF2ZSBsYW5kZWQgYXQuIEFsc28gY2FzdCB0aGluZ3MgdG8gbG9mZl90IHRvCi0JICogcHJldmVudCBvdmVyZmxvd3MgYW5kIG1ha2UgY29tcGFyaXNpb25zIHZzLiBlcXVhbC13aWR0aCB0eXBlcy4KKwkgKiBwcmV2ZW50IG92ZXJmbG93cyBhbmQgbWFrZSBjb21wYXJpc29ucyB2cy4gZXF1YWwtd2lkdGggdHlwZXMuCiAJICovCiAJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CiAJd2hpbGUgKHZtYSAmJiAobG9mZl90KSh2bWEtPnZtX2VuZCAtIGFkZHIpIDw9IHNpemUpIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdF90cmVlLmMgYi9rZXJuZWwvYXVkaXRfdHJlZS5jCmluZGV4IDM3YjJiZWEuLmU5OWRkYTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdF90cmVlLmMKKysrIGIva2VybmVsL2F1ZGl0X3RyZWUuYwpAQCAtNjA3LDcgKzYwNyw3IEBACiAJCXNwaW5fbG9jaygmaGFzaF9sb2NrKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCAmdHJlZS0+Y2h1bmtzLCBsaXN0KSB7CiAJCQlzdHJ1Y3QgYXVkaXRfY2h1bmsgKmNodW5rID0gZmluZF9jaHVuayhub2RlKTsKLQkJCS8qIHRoaXMgY291bGQgYmUgTlVMTCBpZiB0aGUgd2F0Y2ggaXMgZGllaW5nIGVsc2Ugd2hlcmUuLi4gKi8KKwkJCS8qIHRoaXMgY291bGQgYmUgTlVMTCBpZiB0aGUgd2F0Y2ggaXMgZHlpbmcgZWxzZSB3aGVyZS4uLiAqLwogCQkJc3RydWN0IGlub2RlICppbm9kZSA9IGNodW5rLT5tYXJrLmkuaW5vZGU7CiAJCQlub2RlLT5pbmRleCB8PSAxVTw8MzE7CiAJCQlpZiAoaXRlcmF0ZV9tb3VudHMoY29tcGFyZV9yb290LCBpbm9kZSwgcm9vdF9tbnQpKQpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0c2MuYyBiL2tlcm5lbC9hdWRpdHNjLmMKaW5kZXggZjQ5YTAzMS4uYjMzNTEzYSAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0c2MuYworKysgYi9rZXJuZWwvYXVkaXRzYy5jCkBAIC0xMDExLDcgKzEwMTEsNyBAQAogLyoKICAqIHRvX3NlbmQgYW5kIGxlbl9zZW50IGFjY291bnRpbmcgYXJlIHZlcnkgbG9vc2UgZXN0aW1hdGVzLiAgV2UgYXJlbid0CiAgKiByZWFsbHkgd29ycmllZCBhYm91dCBhIGhhcmQgY2FwIHRvIE1BWF9FWEVDVkVfQVVESVRfTEVOIHNvIG11Y2ggYXMgYmVpbmcKLSAqIHdpdGhpbiBhYm91dCA1MDAgYnl0ZXMgKG5leHQgcGFnZSBib3VuZHJ5KQorICogd2l0aGluIGFib3V0IDUwMCBieXRlcyAobmV4dCBwYWdlIGJvdW5kYXJ5KQogICoKICAqIHdoeSBzbnByaW50Zj8gIGFuIGludCBpcyB1cCB0byAxMiBkaWdpdHMgbG9uZy4gIGlmIHdlIGp1c3QgYXNzdW1lZCB3aGVuCiAgKiBsb2dnaW5nIHRoYXQgYVslZF09IHdhcyBnb2luZyB0byBiZSAxNiBjaGFyYWN0ZXJzIGxvbmcgd2Ugd291bGQgYmUgd2FzdGluZwpkaWZmIC0tZ2l0IGEva2VybmVsL2NhcGFiaWxpdHkuYyBiL2tlcm5lbC9jYXBhYmlsaXR5LmMKaW5kZXggYmYwYzczNC4uMzJhODBlMCAxMDA2NDQKLS0tIGEva2VybmVsL2NhcGFiaWxpdHkuYworKysgYi9rZXJuZWwvY2FwYWJpbGl0eS5jCkBAIC0zOTksMyArMzk5LDE1IEBACiAJcmV0dXJuIG5zX2NhcGFibGUodGFza19jcmVkX3h4eCh0LCB1c2VyKS0+dXNlcl9ucywgY2FwKTsKIH0KIEVYUE9SVF9TWU1CT0wodGFza19uc19jYXBhYmxlKTsKKworLyoqCisgKiBuc293bl9jYXBhYmxlIC0gQ2hlY2sgc3VwZXJpb3IgY2FwYWJpbGl0eSB0byBvbmUncyBvd24gdXNlcl9ucworICogQGNhcDogVGhlIGNhcGFiaWxpdHkgaW4gcXVlc3Rpb24KKyAqCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY3VycmVudCB0YXNrIGhhcyB0aGUgZ2l2ZW4gc3VwZXJpb3IgY2FwYWJpbGl0eQorICogdGFyZ2V0ZWQgYXQgaXRzIG93biB1c2VyIG5hbWVzcGFjZS4KKyAqLworYm9vbCBuc293bl9jYXBhYmxlKGludCBjYXApCit7CisJcmV0dXJuIG5zX2NhcGFibGUoY3VycmVudF91c2VyX25zKCksIGNhcCk7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwLmMgYi9rZXJuZWwvY2dyb3VwLmMKaW5kZXggZTMxYjIyMC4uMjVjN2ViNSAxMDA2NDQKLS0tIGEva2VybmVsL2Nncm91cC5jCisrKyBiL2tlcm5lbC9jZ3JvdXAuYwpAQCAtMTU3LDcgKzE1Nyw3IEBACiB9OwogCiAvKgotICogY2dyb3VwX2V2ZW50IHJlcHJlc2VudHMgZXZlbnRzIHdoaWNoIHVzZXJzcGFjZSB3YW50IHRvIHJlY2lldmUuCisgKiBjZ3JvdXBfZXZlbnQgcmVwcmVzZW50cyBldmVudHMgd2hpY2ggdXNlcnNwYWNlIHdhbnQgdG8gcmVjZWl2ZS4KICAqLwogc3RydWN0IGNncm91cF9ldmVudCB7CiAJLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9jcHUuYyBiL2tlcm5lbC9jcHUuYwppbmRleCBjOTVmYzRkLi4xMmI3NDU4IDEwMDY0NAotLS0gYS9rZXJuZWwvY3B1LmMKKysrIGIva2VybmVsL2NwdS5jCkBAIC0xMjYsNyArMTI2LDcgQEAKICNlbHNlIC8qICNpZiBDT05GSUdfSE9UUExVR19DUFUgKi8KIHN0YXRpYyB2b2lkIGNwdV9ob3RwbHVnX2JlZ2luKHZvaWQpIHt9CiBzdGF0aWMgdm9pZCBjcHVfaG90cGx1Z19kb25lKHZvaWQpIHt9Ci0jZW5kaWYJLyogI2VzbGUgI2lmIENPTkZJR19IT1RQTFVHX0NQVSAqLworI2VuZGlmCS8qICNlbHNlICNpZiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAogLyogTmVlZCB0byBrbm93IGFib3V0IENQVXMgZ29pbmcgdXAvZG93bj8gKi8KIGludCBfX3JlZiByZWdpc3Rlcl9jcHVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKZGlmZiAtLWdpdCBhL2tlcm5lbC9jcmVkLmMgYi9rZXJuZWwvY3JlZC5jCmluZGV4IDU1NTdiNTUuLjgwOTNjMTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcmVkLmMKKysrIGIva2VybmVsL2NyZWQuYwpAQCAtNTQsNiArNTQsNyBAQAogCS5jYXBfZWZmZWN0aXZlCQk9IENBUF9JTklUX0VGRl9TRVQsCiAJLmNhcF9ic2V0CQk9IENBUF9JTklUX0JTRVQsCiAJLnVzZXIJCQk9IElOSVRfVVNFUiwKKwkudXNlcl9ucwkJPSAmaW5pdF91c2VyX25zLAogCS5ncm91cF9pbmZvCQk9ICZpbml0X2dyb3VwcywKICNpZmRlZiBDT05GSUdfS0VZUwogCS50Z2NyZWQJCQk9ICZpbml0X3RnY3JlZCwKQEAgLTQxMCw2ICs0MTEsMTEgQEAKIAkJCWdvdG8gZXJyb3JfcHV0OwogCX0KIAorCS8qIGNhY2hlIHVzZXJfbnMgaW4gY3JlZC4gIERvZXNuJ3QgbmVlZCBhIHJlZmNvdW50IGJlY2F1c2UgaXQgd2lsbAorCSAqIHN0YXkgcGlubmVkIGJ5IGNyZWQtPnVzZXIKKwkgKi8KKwluZXctPnVzZXJfbnMgPSBuZXctPnVzZXItPnVzZXJfbnM7CisKICNpZmRlZiBDT05GSUdfS0VZUwogCS8qIG5ldyB0aHJlYWRzIGdldCB0aGVpciBvd24gdGhyZWFkIGtleXJpbmdzIGlmIHRoZWlyIHBhcmVudCBhbHJlYWR5CiAJICogaGFkIG9uZSAqLwpAQCAtNzQxLDEyICs3NDcsNiBAQAogfQogRVhQT1JUX1NZTUJPTChzZXRfY3JlYXRlX2ZpbGVzX2FzKTsKIAotc3RydWN0IHVzZXJfbmFtZXNwYWNlICpjdXJyZW50X3VzZXJfbnModm9pZCkKLXsKLQlyZXR1cm4gX2N1cnJlbnRfdXNlcl9ucygpOwotfQotRVhQT1JUX1NZTUJPTChjdXJyZW50X3VzZXJfbnMpOwotCiAjaWZkZWYgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTCiAKIGJvb2wgY3JlZHNfYXJlX2ludmFsaWQoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpCmRpZmYgLS1naXQgYS9rZXJuZWwvZGVidWcvZGVidWdfY29yZS5jIGIva2VybmVsL2RlYnVnL2RlYnVnX2NvcmUuYwppbmRleCBjZWZkNGExLi5iYWQ2Nzg2IDEwMDY0NAotLS0gYS9rZXJuZWwvZGVidWcvZGVidWdfY29yZS5jCisrKyBiL2tlcm5lbC9kZWJ1Zy9kZWJ1Z19jb3JlLmMKQEAgLTUzOCw3ICs1MzgsNyBAQAogCiAJLyoKIAkgKiBGb3Igc2luZ2xlIHN0ZXBwaW5nLCB0cnkgdG8gb25seSBlbnRlciBvbiB0aGUgcHJvY2Vzc29yCi0JICogdGhhdCB3YXMgc2luZ2xlIHN0ZXBwaW5nLiAgVG8gZ2F1cmQgYWdhaW5zdCBhIGRlYWRsb2NrLCB0aGUKKwkgKiB0aGF0IHdhcyBzaW5nbGUgc3RlcHBpbmcuICBUbyBndWFyZCBhZ2FpbnN0IGEgZGVhZGxvY2ssIHRoZQogCSAqIGtlcm5lbCB3aWxsIG9ubHkgdHJ5IGZvciB0aGUgdmFsdWUgb2Ygc3N0ZXBfdHJpZXMgYmVmb3JlCiAJICogZ2l2aW5nIHVwIGFuZCBjb250aW51aW5nIG9uLgogCSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2RlYnVnL2tkYi9rZGJfbWFpbi5jIGIva2VybmVsL2RlYnVnL2tkYi9rZGJfbWFpbi5jCmluZGV4IDZiYzZlM2IuLmJlMTQ3NzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX21haW4uYworKysgYi9rZXJuZWwvZGVidWcva2RiL2tkYl9tYWluLmMKQEAgLTQ0MSw5ICs0NDEsOSBAQAogICoJc3ltYm9sIG5hbWUsIGFuZCBvZmZzZXQgdG8gdGhlIGNhbGxlci4KICAqCiAgKglUaGUgYXJndW1lbnQgbWF5IGNvbnNpc3Qgb2YgYSBudW1lcmljIHZhbHVlIChkZWNpbWFsIG9yCi0gKgloZXhpZGVjaW1hbCksIGEgc3ltYm9sIG5hbWUsIGEgcmVnaXN0ZXIgbmFtZSAocHJlY2VlZGVkIGJ5IHRoZQorICoJaGV4aWRlY2ltYWwpLCBhIHN5bWJvbCBuYW1lLCBhIHJlZ2lzdGVyIG5hbWUgKHByZWNlZGVkIGJ5IHRoZQogICoJcGVyY2VudCBzaWduKSwgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgd2l0aCBhIG51bWVyaWMgdmFsdWUKLSAqCShwcmVjZWVkZWQgYnkgYSBkb2xsYXIgc2lnbikgb3IgYSBzaW1wbGUgYXJpdGhtZXRpYyBleHByZXNzaW9uCisgKgkocHJlY2VkZWQgYnkgYSBkb2xsYXIgc2lnbikgb3IgYSBzaW1wbGUgYXJpdGhtZXRpYyBleHByZXNzaW9uCiAgKgljb25zaXN0aW5nIG9mIGEgc3ltYm9sIG5hbWUsICsvLSwgYW5kIGEgbnVtZXJpYyBjb25zdGFudCB2YWx1ZQogICoJKG9mZnNldCkuCiAgKiBQYXJhbWV0ZXJzOgpAQCAtMTMzNSw3ICsxMzM1LDcgQEAKICAqCWVycm9yCQlUaGUgaGFyZHdhcmUtZGVmaW5lZCBlcnJvciBjb2RlCiAgKglyZWFzb24yCQlrZGIncyBjdXJyZW50IHJlYXNvbiBjb2RlLgogICoJCQlJbml0aWFsbHkgZXJyb3IgYnV0IGNhbiBjaGFuZ2UKLSAqCQkJYWNvcmRpbmcgdG8ga2RiIHN0YXRlLgorICoJCQlhY2NvcmRpbmcgdG8ga2RiIHN0YXRlLgogICoJZGJfcmVzdWx0CVJlc3VsdCBjb2RlIGZyb20gYnJlYWsgb3IgZGVidWcgcG9pbnQuCiAgKglyZWdzCQlUaGUgZXhjZXB0aW9uIGZyYW1lIGF0IHRpbWUgb2YgZmF1bHQvYnJlYWtwb2ludC4KICAqCQkJc2hvdWxkIGFsd2F5cyBiZSB2YWxpZC4KZGlmZiAtLWdpdCBhL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX3N1cHBvcnQuYyBiL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX3N1cHBvcnQuYwppbmRleCA2YjI0ODVkLi41NTMyZGQzIDEwMDY0NAotLS0gYS9rZXJuZWwvZGVidWcva2RiL2tkYl9zdXBwb3J0LmMKKysrIGIva2VybmVsL2RlYnVnL2tkYi9rZGJfc3VwcG9ydC5jCkBAIC01NDUsNyArNTQ1LDcgQEAKICAqCU1hc2sgZm9yIHByb2Nlc3Mgc3RhdGUuCiAgKiBOb3RlczoKICAqCVRoZSBtYXNrIGZvbGRzIGRhdGEgZnJvbSBzZXZlcmFsIHNvdXJjZXMgaW50byBhIHNpbmdsZSBsb25nIHZhbHVlLCBzbwotICoJYmUgY2FyZWZ1bGwgbm90IHRvIG92ZXJsYXAgdGhlIGJpdHMuICBUQVNLXyogYml0cyBhcmUgaW4gdGhlIExTQiwKKyAqCWJlIGNhcmVmdWwgbm90IHRvIG92ZXJsYXAgdGhlIGJpdHMuICBUQVNLXyogYml0cyBhcmUgaW4gdGhlIExTQiwKICAqCXNwZWNpYWwgY2FzZXMgbGlrZSBVTlJVTk5BQkxFIGFyZSBpbiB0aGUgTVNCLiAgQXMgb2YgMi42LjEwLXJjMSB0aGVyZQogICoJaXMgbm8gb3ZlcmxhcCBiZXR3ZWVuIFRBU0tfKiBhbmQgRVhJVF8qIGJ1dCB0aGF0IG1heSBub3QgYWx3YXlzIGJlCiAgKgl0cnVlLCBzbyBFWElUXyogYml0cyBhcmUgc2hpZnRlZCBsZWZ0IDE2IGJpdHMgYmVmb3JlIGJlaW5nIHN0b3JlZCBpbgpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggNmE0ODhhZC4uOGRkODc0MSAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC04NDEsNyArODQxLDcgQEAKIAkvKiBMZXQgZmF0aGVyIGtub3cgd2UgZGllZAogCSAqCiAJICogVGhyZWFkIHNpZ25hbHMgYXJlIGNvbmZpZ3VyYWJsZSwgYnV0IHlvdSBhcmVuJ3QgZ29pbmcgdG8gdXNlCi0JICogdGhhdCB0byBzZW5kIHNpZ25hbHMgdG8gYXJiaXRhcnkgcHJvY2Vzc2VzLgorCSAqIHRoYXQgdG8gc2VuZCBzaWduYWxzIHRvIGFyYml0cmFyeSBwcm9jZXNzZXMuCiAJICogVGhhdCBzdG9wcyByaWdodCBub3cuCiAJICoKIAkgKiBJZiB0aGUgcGFyZW50IGV4ZWMgaWQgZG9lc24ndCBtYXRjaCB0aGUgZXhlYyBpZCB3ZSBzYXZlZApAQCAtMTAxNiw3ICsxMDE2LDcgQEAKIAkvKgogCSAqIEZJWE1FOiBkbyB0aGF0IG9ubHkgd2hlbiBuZWVkZWQsIHVzaW5nIHNjaGVkX2V4aXQgdHJhY2Vwb2ludAogCSAqLwotCWZsdXNoX3B0cmFjZV9od19icmVha3BvaW50KHRzayk7CisJcHRyYWNlX3B1dF9icmVha3BvaW50cyh0c2spOwogCiAJZXhpdF9ub3RpZnkodHNrLCBncm91cF9kZWFkKTsKICNpZmRlZiBDT05GSUdfTlVNQQpkaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4LmMgYi9rZXJuZWwvZnV0ZXguYwppbmRleCBkZmI5MjRmLi5mZTI4ZGMyIDEwMDY0NAotLS0gYS9rZXJuZWwvZnV0ZXguYworKysgYi9rZXJuZWwvZnV0ZXguYwpAQCAtMTg4Niw3ICsxODg2LDcgQEAKIAlyZXN0YXJ0LT5mdXRleC52YWwgPSB2YWw7CiAJcmVzdGFydC0+ZnV0ZXgudGltZSA9IGFic190aW1lLT50djY0OwogCXJlc3RhcnQtPmZ1dGV4LmJpdHNldCA9IGJpdHNldDsKLQlyZXN0YXJ0LT5mdXRleC5mbGFncyA9IGZsYWdzOworCXJlc3RhcnQtPmZ1dGV4LmZsYWdzID0gZmxhZ3MgfCBGTEFHU19IQVNfVElNRU9VVDsKIAogCXJldCA9IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0s7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9ocnRpbWVyLmMgYi9rZXJuZWwvaHJ0aW1lci5jCmluZGV4IDkwMTc0NzguLjg3ZmRiM2YgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ocnRpbWVyLmMKKysrIGIva2VybmVsL2hydGltZXIuYwpAQCAtODEsNyArODEsMTEgQEAKIAl9CiB9OwogCi1zdGF0aWMgaW50IGhydGltZXJfY2xvY2tfdG9fYmFzZV90YWJsZVtNQVhfQ0xPQ0tTXTsKK3N0YXRpYyBpbnQgaHJ0aW1lcl9jbG9ja190b19iYXNlX3RhYmxlW01BWF9DTE9DS1NdID0geworCVtDTE9DS19SRUFMVElNRV0JPSBIUlRJTUVSX0JBU0VfUkVBTFRJTUUsCisJW0NMT0NLX01PTk9UT05JQ10JPSBIUlRJTUVSX0JBU0VfTU9OT1RPTklDLAorCVtDTE9DS19CT09UVElNRV0JPSBIUlRJTUVSX0JBU0VfQk9PVFRJTUUsCit9OwogCiBzdGF0aWMgaW5saW5lIGludCBocnRpbWVyX2Nsb2NraWRfdG9fYmFzZShjbG9ja2lkX3QgY2xvY2tfaWQpCiB7CkBAIC0xNzIyLDEwICsxNzI2LDYgQEAKIAogdm9pZCBfX2luaXQgaHJ0aW1lcnNfaW5pdCh2b2lkKQogewotCWhydGltZXJfY2xvY2tfdG9fYmFzZV90YWJsZVtDTE9DS19SRUFMVElNRV0gPSBIUlRJTUVSX0JBU0VfUkVBTFRJTUU7Ci0JaHJ0aW1lcl9jbG9ja190b19iYXNlX3RhYmxlW0NMT0NLX01PTk9UT05JQ10gPSBIUlRJTUVSX0JBU0VfTU9OT1RPTklDOwotCWhydGltZXJfY2xvY2tfdG9fYmFzZV90YWJsZVtDTE9DS19CT09UVElNRV0gPSBIUlRJTUVSX0JBU0VfQk9PVFRJTUU7Ci0KIAlocnRpbWVyX2NwdV9ub3RpZnkoJmhydGltZXJzX25iLCAodW5zaWduZWQgbG9uZylDUFVfVVBfUFJFUEFSRSwKIAkJCSAgKHZvaWQgKikobG9uZylzbXBfcHJvY2Vzc29yX2lkKCkpOwogCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmaHJ0aW1lcnNfbmIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9jaGlwLmMgYi9rZXJuZWwvaXJxL2NoaXAuYwppbmRleCAxZGFmYzg2Li40YWYxZTJiIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2NoaXAuYworKysgYi9rZXJuZWwvaXJxL2NoaXAuYwpAQCAtNDE1LDcgKzQxNSw3IEBACiAgKglAZGVzYzoJdGhlIGludGVycnVwdCBkZXNjcmlwdGlvbiBzdHJ1Y3R1cmUgZm9yIHRoaXMgaXJxCiAgKgogICoJSW50ZXJydXB0IG9jY3VyZXMgb24gdGhlIGZhbGxpbmcgYW5kL29yIHJpc2luZyBlZGdlIG9mIGEgaGFyZHdhcmUKLSAqCXNpZ25hbC4gVGhlIG9jY3VyZW5jZSBpcyBsYXRjaGVkIGludG8gdGhlIGlycSBjb250cm9sbGVyIGhhcmR3YXJlCisgKglzaWduYWwuIFRoZSBvY2N1cnJlbmNlIGlzIGxhdGNoZWQgaW50byB0aGUgaXJxIGNvbnRyb2xsZXIgaGFyZHdhcmUKICAqCWFuZCBtdXN0IGJlIGFja2VkIGluIG9yZGVyIHRvIGJlIHJlZW5hYmxlZC4gQWZ0ZXIgdGhlIGFjayBhbm90aGVyCiAgKglpbnRlcnJ1cHQgY2FuIGhhcHBlbiBvbiB0aGUgc2FtZSBzb3VyY2UgZXZlbiBiZWZvcmUgdGhlIGZpcnN0IG9uZQogICoJaXMgaGFuZGxlZCBieSB0aGUgYXNzb2NpYXRlZCBldmVudCBoYW5kbGVyLiBJZiB0aGlzIGhhcHBlbnMgaXQKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWFuYWdlLmMgYi9rZXJuZWwvaXJxL21hbmFnZS5jCmluZGV4IDEyYTgwZmQuLjA3YzE2MTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWFuYWdlLmMKKysrIGIva2VybmVsL2lycS9tYW5hZ2UuYwpAQCAtMTA1MSw2ICsxMDUxLDcgQEAKIAlyZWdpc3Rlcl9pcnFfcHJvYyhpcnEsIGRlc2MpOwogCW5ldy0+ZGlyID0gTlVMTDsKIAlyZWdpc3Rlcl9oYW5kbGVyX3Byb2MoaXJxLCBuZXcpOworCWZyZWVfY3B1bWFza192YXIobWFzayk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9taWdyYXRpb24uYyBiL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMKaW5kZXggYmM2MTk0Ni4uNDc0MjA5MCAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9taWdyYXRpb24uYworKysgYi9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jCkBAIC0zNSw3ICszNSw3IEBACiAJICogZG8gdGhlIGRpc2FibGUsIHJlLXByb2dyYW0sIGVuYWJsZSBzZXF1ZW5jZS4KIAkgKiBUaGlzIGlzICpub3QqIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgZm9yIGxldmVsIHRyaWdnZXJlZAogCSAqIGJ1dCBpbiBhIGVkZ2UgdHJpZ2dlciBjYXNlLCB3ZSBtaWdodCBiZSBzZXR0aW5nIHJ0ZQotCSAqIHdoZW4gYW4gYWN0aXZlIHRyaWdnZXIgaXMgY29tbWluZyBpbi4gVGhpcyBjb3VsZAorCSAqIHdoZW4gYW4gYWN0aXZlIHRyaWdnZXIgaXMgY29taW5nIGluLiBUaGlzIGNvdWxkCiAJICogY2F1c2Ugc29tZSBpb2FwaWNzIHRvIG1hbC1mdW5jdGlvbi4KIAkgKiBCZWluZyBwYXJhbm9pZCBpIGd1ZXNzIQogCSAqCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL3Byb2MuYyBiL2tlcm5lbC9pcnEvcHJvYy5jCmluZGV4IGRkMjAxYmQuLjgzNDg5OWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvcHJvYy5jCisrKyBiL2tlcm5lbC9pcnEvcHJvYy5jCkBAIC00MTksNyArNDE5LDcgQEAKIAl9IGVsc2UgewogCQlzZXFfcHJpbnRmKHAsICIgJThzIiwgIk5vbmUiKTsKIAl9Ci0jaWZkZWYgQ09ORklHX0dFTklSQ19JUlFfU0hPV19MRVZFTAorI2lmZGVmIENPTkZJR19HRU5FUklDX0lSUV9TSE9XX0xFVkVMCiAJc2VxX3ByaW50ZihwLCAiICUtOHMiLCBpcnFkX2lzX2xldmVsX3R5cGUoJmRlc2MtPmlycV9kYXRhKSA/ICJMZXZlbCIgOiAiRWRnZSIpOwogI2VuZGlmCiAJaWYgKGRlc2MtPm5hbWUpCmRpZmYgLS1naXQgYS9rZXJuZWwva2V4ZWMuYyBiL2tlcm5lbC9rZXhlYy5jCmluZGV4IDRlMjQwYTMuLjg3Yjc3ZGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZXhlYy5jCisrKyBiL2tlcm5lbC9rZXhlYy5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9rbXNnX2R1bXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMTQ0LDcgKzE0NSw3IEBACiAJLyogSW5pdGlhbGl6ZSB0aGUgbGlzdCBvZiBkZXN0aW5hdGlvbiBwYWdlcyAqLwogCUlOSVRfTElTVF9IRUFEKCZpbWFnZS0+ZGVzdF9wYWdlcyk7CiAKLQkvKiBJbml0aWFsaXplIHRoZSBsaXN0IG9mIHVudXNlYWJsZSBwYWdlcyAqLworCS8qIEluaXRpYWxpemUgdGhlIGxpc3Qgb2YgdW51c2FibGUgcGFnZXMgKi8KIAlJTklUX0xJU1RfSEVBRCgmaW1hZ2UtPnVudXNlYWJsZV9wYWdlcyk7CiAKIAkvKiBSZWFkIGluIHRoZSBzZWdtZW50cyAqLwpAQCAtNDU0LDcgKzQ1NSw3IEBACiAJLyogRGVhbCB3aXRoIHRoZSBkZXN0aW5hdGlvbiBwYWdlcyBJIGhhdmUgaW5hZHZlcnRlbnRseSBhbGxvY2F0ZWQuCiAJICoKIAkgKiBJZGVhbGx5IEkgd291bGQgY29udmVydCBtdWx0aS1wYWdlIGFsbG9jYXRpb25zIGludG8gc2luZ2xlCi0JICogcGFnZSBhbGxvY2F0aW9ucywgYW5kIGFkZCBldmVyeXRpbmcgdG8gaW1hZ2UtPmRlc3RfcGFnZXMuCisJICogcGFnZSBhbGxvY2F0aW9ucywgYW5kIGFkZCBldmVyeXRoaW5nIHRvIGltYWdlLT5kZXN0X3BhZ2VzLgogCSAqCiAJICogRm9yIG5vdyBpdCBpcyBzaW1wbGVyIHRvIGp1c3QgZnJlZSB0aGUgcGFnZXMuCiAJICovCkBAIC02MDIsNyArNjAzLDcgQEAKIAkvKiBXYWxrIHRocm91Z2ggYW5kIGZyZWUgYW55IGV4dHJhIGRlc3RpbmF0aW9uIHBhZ2VzIEkgbWF5IGhhdmUgKi8KIAlraW1hZ2VfZnJlZV9wYWdlX2xpc3QoJmltYWdlLT5kZXN0X3BhZ2VzKTsKIAotCS8qIFdhbGsgdGhyb3VnaCBhbmQgZnJlZSBhbnkgdW51c2VhYmxlIHBhZ2VzIEkgaGF2ZSBjYWNoZWQgKi8KKwkvKiBXYWxrIHRocm91Z2ggYW5kIGZyZWUgYW55IHVudXNhYmxlIHBhZ2VzIEkgaGF2ZSBjYWNoZWQgKi8KIAlraW1hZ2VfZnJlZV9wYWdlX2xpc3QoJmltYWdlLT51bnVzZWFibGVfcGFnZXMpOwogCiB9CkBAIC0xNTMyLDYgKzE1MzMsMTEgQEAKIAkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAkJLyogU3VzcGVuZCBzeXN0ZW0gZGV2aWNlcyAqLwogCQllcnJvciA9IHN5c2Rldl9zdXNwZW5kKFBNU0dfRlJFRVpFKTsKKwkJaWYgKCFlcnJvcikgeworCQkJZXJyb3IgPSBzeXNjb3JlX3N1c3BlbmQoKTsKKwkJCWlmIChlcnJvcikKKwkJCQlzeXNkZXZfcmVzdW1lKCk7CisJCX0KIAkJaWYgKGVycm9yKQogCQkJZ290byBFbmFibGVfaXJxczsKIAl9IGVsc2UKQEAgLTE1NDYsNiArMTU1Miw3IEBACiAKICNpZmRlZiBDT05GSUdfS0VYRUNfSlVNUAogCWlmIChrZXhlY19pbWFnZS0+cHJlc2VydmVfY29udGV4dCkgeworCQlzeXNjb3JlX3Jlc3VtZSgpOwogCQlzeXNkZXZfcmVzdW1lKCk7CiAgRW5hYmxlX2lycXM6CiAJCWxvY2FsX2lycV9lbmFibGUoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rdGhyZWFkLmMgYi9rZXJuZWwva3RocmVhZC5jCmluZGV4IDY4NGFiM2YuLjNiMzRkMjcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rdGhyZWFkLmMKKysrIGIva2VybmVsL2t0aHJlYWQuYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAgKiBpbiBAbm9kZSwgdG8gZ2V0IE5VTUEgYWZmaW5pdHkgZm9yIGt0aHJlYWQgc3RhY2ssIG9yIGVsc2UgZ2l2ZSAtMS4KICAqIFdoZW4gd29rZW4sIHRoZSB0aHJlYWQgd2lsbCBydW4gQHRocmVhZGZuKCkgd2l0aCBAZGF0YSBhcyBpdHMKICAqIGFyZ3VtZW50LiBAdGhyZWFkZm4oKSBjYW4gZWl0aGVyIGNhbGwgZG9fZXhpdCgpIGRpcmVjdGx5IGlmIGl0IGlzIGEKLSAqIHN0YW5kYWxvbmUgdGhyZWFkIGZvciB3aGljaCBub29uZSB3aWxsIGNhbGwga3RocmVhZF9zdG9wKCksIG9yCisgKiBzdGFuZGFsb25lIHRocmVhZCBmb3Igd2hpY2ggbm8gb25lIHdpbGwgY2FsbCBrdGhyZWFkX3N0b3AoKSwgb3IKICAqIHJldHVybiB3aGVuICdrdGhyZWFkX3Nob3VsZF9zdG9wKCknIGlzIHRydWUgKHdoaWNoIG1lYW5zCiAgKiBrdGhyZWFkX3N0b3AoKSBoYXMgYmVlbiBjYWxsZWQpLiAgVGhlIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgemVybwogICogb3IgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXI7IGl0IHdpbGwgYmUgcGFzc2VkIHRvIGt0aHJlYWRfc3RvcCgpLgpkaWZmIC0tZ2l0IGEva2VybmVsL2xhdGVuY3l0b3AuYyBiL2tlcm5lbC9sYXRlbmN5dG9wLmMKaW5kZXggZWU3NGIzNS4uMzc2MDY2ZSAxMDA2NDQKLS0tIGEva2VybmVsL2xhdGVuY3l0b3AuYworKysgYi9rZXJuZWwvbGF0ZW5jeXRvcC5jCkBAIC0xNTMsNyArMTUzLDcgQEAKIH0KIAogLyoqCi0gKiBfX2FjY291bnRfc2NoZWR1bGVyX2xhdGVuY3kgLSByZWNvcmQgYW4gb2NjdXJlZCBsYXRlbmN5CisgKiBfX2FjY291bnRfc2NoZWR1bGVyX2xhdGVuY3kgLSByZWNvcmQgYW4gb2NjdXJyZWQgbGF0ZW5jeQogICogQHRzayAtIHRoZSB0YXNrIHN0cnVjdCBvZiB0aGUgdGFzayBoaXR0aW5nIHRoZSBsYXRlbmN5CiAgKiBAdXNlY3MgLSB0aGUgZHVyYXRpb24gb2YgdGhlIGxhdGVuY3kgaW4gbWljcm9zZWNvbmRzCiAgKiBAaW50ZXIgLSAxIGlmIHRoZSBzbGVlcCB3YXMgaW50ZXJydXB0aWJsZSwgMCBpZiB1bmludGVycnVwdGlibGUKZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2RlcC5jCmluZGV4IDBkMjA1OGQuLjUzYTY4OTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sb2NrZGVwLmMKKysrIGIva2VybmVsL2xvY2tkZXAuYwpAQCAtMjMwOSw3ICsyMzA5LDcgQEAKIAlpZiAodW5saWtlbHkoY3Vyci0+aGFyZGlycXNfZW5hYmxlZCkpIHsKIAkJLyoKIAkJICogTmVpdGhlciBpcnEgbm9yIHByZWVtcHRpb24gYXJlIGRpc2FibGVkIGhlcmUKLQkJICogc28gdGhpcyBpcyByYWN5IGJ5IG5hdHVyZSBidXQgbG9vc2luZyBvbmUgaGl0CisJCSAqIHNvIHRoaXMgaXMgcmFjeSBieSBuYXR1cmUgYnV0IGxvc2luZyBvbmUgaGl0CiAJCSAqIGluIGEgc3RhdCBpcyBub3QgYSBiaWcgZGVhbC4KIAkJICovCiAJCV9fZGVidWdfYXRvbWljX2luYyhyZWR1bmRhbnRfaGFyZGlycXNfb24pOwpAQCAtMjYyMCw3ICsyNjIwLDcgQEAKIAlpZiAoIWdyYXBoX2xvY2soKSkKIAkJcmV0dXJuIDA7CiAJLyoKLQkgKiBNYWtlIHN1cmUgd2UgZGlkbnQgcmFjZToKKwkgKiBNYWtlIHN1cmUgd2UgZGlkbid0IHJhY2U6CiAJICovCiAJaWYgKHVubGlrZWx5KGhsb2NrX2NsYXNzKHRoaXMpLT51c2FnZV9tYXNrICYgbmV3X21hc2spKSB7CiAJCWdyYXBoX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS5jIGIva2VybmVsL21vZHVsZS5jCmluZGV4IDFmOWY3YmMuLmQ1OTM4YTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUuYworKysgYi9rZXJuZWwvbW9kdWxlLmMKQEAgLTgwOSw3ICs4MDksNyBAQAogCQl3YWl0X2Zvcl96ZXJvX3JlZmNvdW50KG1vZCk7CiAKIAltdXRleF91bmxvY2soJm1vZHVsZV9tdXRleCk7Ci0JLyogRmluYWwgZGVzdHJ1Y3Rpb24gbm93IG5vb25lIGlzIHVzaW5nIGl0LiAqLworCS8qIEZpbmFsIGRlc3RydWN0aW9uIG5vdyBubyBvbmUgaXMgdXNpbmcgaXQuICovCiAJaWYgKG1vZC0+ZXhpdCAhPSBOVUxMKQogCQltb2QtPmV4aXQoKTsKIAlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZtb2R1bGVfbm90aWZ5X2xpc3QsCkBAIC0yNzc3LDcgKzI3NzcsNyBAQAogCW1vZC0+c3RhdGUgPSBNT0RVTEVfU1RBVEVfQ09NSU5HOwogCiAJLyogTm93IHNldyBpdCBpbnRvIHRoZSBsaXN0cyBzbyB3ZSBjYW4gZ2V0IGxvY2tkZXAgYW5kIG9vcHMKLQkgKiBpbmZvIGR1cmluZyBhcmd1bWVudCBwYXJzaW5nLiAgTm9vbmUgc2hvdWxkIGFjY2VzcyB1cywgc2luY2UKKwkgKiBpbmZvIGR1cmluZyBhcmd1bWVudCBwYXJzaW5nLiAgTm8gb25lIHNob3VsZCBhY2Nlc3MgdXMsIHNpbmNlCiAJICogc3Ryb25nX3RyeV9tb2R1bGVfZ2V0KCkgd2lsbCBmYWlsLgogCSAqIGxvY2tkZXAvb29wcyBjYW4gcnVuIGFzeW5jaHJvbm91cywgc28gdXNlIHRoZSBSQ1UgbGlzdCBpbnNlcnRpb24KIAkgKiBmdW5jdGlvbiB0byBpbnNlcnQgaW4gYSB3YXkgc2FmZSB0byBjb25jdXJyZW50IHJlYWRlcnMuCkBAIC0yOTcxLDcgKzI5NzEsNyBAQAogCWVsc2UKIAkJbmV4dHZhbCA9ICh1bnNpZ25lZCBsb25nKW1vZC0+bW9kdWxlX2NvcmUrbW9kLT5jb3JlX3RleHRfc2l6ZTsKIAotCS8qIFNjYW4gZm9yIGNsb3Nlc3QgcHJlY2VlZGluZyBzeW1ib2wsIGFuZCBuZXh0IHN5bWJvbC4gKEVMRgorCS8qIFNjYW4gZm9yIGNsb3Nlc3QgcHJlY2VkaW5nIHN5bWJvbCwgYW5kIG5leHQgc3ltYm9sLiAoRUxGCiAJICAgc3RhcnRzIHJlYWwgc3ltYm9scyBhdCAxKS4gKi8KIAlmb3IgKGkgPSAxOyBpIDwgbW9kLT5udW1fc3ltdGFiOyBpKyspIHsKIAkJaWYgKG1vZC0+c3ltdGFiW2ldLnN0X3NobmR4ID09IFNITl9VTkRFRikKZGlmZiAtLWdpdCBhL2tlcm5lbC9tdXRleC5jIGIva2VybmVsL211dGV4LmMKaW5kZXggYTU4ODlmYi4uYzQxOTVmYSAxMDA2NDQKLS0tIGEva2VybmVsL211dGV4LmMKKysrIGIva2VybmVsL211dGV4LmMKQEAgLTI0NSw3ICsyNDUsNyBAQAogCQl9CiAJCV9fc2V0X3Rhc2tfc3RhdGUodGFzaywgc3RhdGUpOwogCi0JCS8qIGRpZG50IGdldCB0aGUgbG9jaywgZ28gdG8gc2xlZXA6ICovCisJCS8qIGRpZG4ndCBnZXQgdGhlIGxvY2ssIGdvIHRvIHNsZWVwOiAqLwogCQlzcGluX3VubG9ja19tdXRleCgmbG9jay0+d2FpdF9sb2NrLCBmbGFncyk7CiAJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAkJc2NoZWR1bGUoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wYWRhdGEuYyBiL2tlcm5lbC9wYWRhdGEuYwppbmRleCA3NTEwMTk0Li5iOTE5NDFkIDEwMDY0NAotLS0gYS9rZXJuZWwvcGFkYXRhLmMKKysrIGIva2VybmVsL3BhZGF0YS5jCkBAIC0yNjIsNyArMjYyLDcgQEAKIAkJLyoKIAkJICogVGhpcyBjcHUgaGFzIHRvIGRvIHRoZSBwYXJhbGxlbCBwcm9jZXNzaW5nIG9mIHRoZSBuZXh0CiAJCSAqIG9iamVjdC4gSXQncyB3YWl0aW5nIGluIHRoZSBjcHUncyBwYXJhbGxlbGl6YXRpb24gcXVldWUsCi0JCSAqIHNvIGV4aXQgaW1lZGlhdGVseS4KKwkJICogc28gZXhpdCBpbW1lZGlhdGVseS4KIAkJICovCiAJCWlmIChQVFJfRVJSKHBhZGF0YSkgPT0gLUVOT0RBVEEpIHsKIAkJCWRlbF90aW1lcigmcGQtPnRpbWVyKTsKQEAgLTI4NCw3ICsyODQsNyBAQAogCS8qCiAJICogVGhlIG5leHQgb2JqZWN0IHRoYXQgbmVlZHMgc2VyaWFsaXphdGlvbiBtaWdodCBoYXZlIGFycml2ZWQgdG8KIAkgKiB0aGUgcmVvcmRlciBxdWV1ZXMgaW4gdGhlIG1lYW50aW1lLCB3ZSB3aWxsIGJlIGNhbGxlZCBhZ2FpbgotCSAqIGZyb20gdGhlIHRpbWVyIGZ1bmN0aW9uIGlmIG5vb25lIGVsc2UgY2FyZXMgZm9yIGl0LgorCSAqIGZyb20gdGhlIHRpbWVyIGZ1bmN0aW9uIGlmIG5vIG9uZSBlbHNlIGNhcmVzIGZvciBpdC4KIAkgKi8KIAlpZiAoYXRvbWljX3JlYWQoJnBkLT5yZW9yZGVyX29iamVjdHMpCiAJCQkmJiAhKHBpbnN0LT5mbGFncyAmIFBBREFUQV9SRVNFVCkpCkBAIC01MTUsNyArNTE1LDcgQEAKIAlwdXRfb25saW5lX2NwdXMoKTsKIH0KIAotLyogUmVwbGFjZSB0aGUgaW50ZXJuYWwgY29udHJvbCBzdHVjdHVyZSB3aXRoIGEgbmV3IG9uZS4gKi8KKy8qIFJlcGxhY2UgdGhlIGludGVybmFsIGNvbnRyb2wgc3RydWN0dXJlIHdpdGggYSBuZXcgb25lLiAqLwogc3RhdGljIHZvaWQgcGFkYXRhX3JlcGxhY2Uoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsCiAJCQkgICBzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGRfbmV3KQogewpAQCAtNzY4LDcgKzc2OCw3IEBACiB9CiAKICAvKioKLSAqIHBhZGF0YV9yZW1vdmVfY3B1IC0gcmVtb3ZlIGEgY3B1IGZyb20gdGhlIG9uZSBvciBib3RoKHNlcmlhbCBhbmQgcGFyYWxlbGwpCisgKiBwYWRhdGFfcmVtb3ZlX2NwdSAtIHJlbW92ZSBhIGNwdSBmcm9tIHRoZSBvbmUgb3IgYm90aChzZXJpYWwgYW5kIHBhcmFsbGVsKQogICogICAgICAgICAgICAgICAgICAgICBwYWRhdGEgY3B1bWFza3MuCiAgKgogICogQHBpbnN0OiBwYWRhdGEgaW5zdGFuY2UKZGlmZiAtLWdpdCBhL2tlcm5lbC9wYXJhbXMuYyBiL2tlcm5lbC9wYXJhbXMuYwppbmRleCAwZGExNDExLi43YWIzODhhIDEwMDY0NAotLS0gYS9rZXJuZWwvcGFyYW1zLmMKKysrIGIva2VybmVsL3BhcmFtcy5jCkBAIC05NSw3ICs5NSw3IEBACiAJLyogRmluZCBwYXJhbWV0ZXIgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcmFtczsgaSsrKSB7CiAJCWlmIChwYXJhbWVxKHBhcmFtLCBwYXJhbXNbaV0ubmFtZSkpIHsKLQkJCS8qIE5vb25lIGhhbmRsZWQgTlVMTCwgc28gZG8gaXQgaGVyZS4gKi8KKwkJCS8qIE5vIG9uZSBoYW5kbGVkIE5VTEwsIHNvIGRvIGl0IGhlcmUuICovCiAJCQlpZiAoIXZhbCAmJiBwYXJhbXNbaV0ub3BzLT5zZXQgIT0gcGFyYW1fc2V0X2Jvb2wpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlERUJVR1AoIlRoZXkgYXJlIGVxdWFsISAgQ2FsbGluZyAlcFxuIiwKZGlmZiAtLWdpdCBhL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IDI3OTYwZjEuLjhlODFhOTggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMzY0LDYgKzM2NCw3IEBACiAJCQl9CiAKIAkJCWlmIChtb2RlICYgUEVSRl9DR1JPVVBfU1dJTikgeworCQkJCVdBUk5fT05fT05DRShjcHVjdHgtPmNncnApOwogCQkJCS8qIHNldCBjZ3JwIGJlZm9yZSBjdHhzdyBpbiB0bwogCQkJCSAqIGFsbG93IGV2ZW50X2ZpbHRlcl9tYXRjaCgpIHRvIG5vdAogCQkJCSAqIGhhdmUgdG8gcGFzcyB0YXNrIGFyb3VuZApAQCAtMjQyMyw2ICsyNDI0LDE0IEBACiAJaWYgKCFjdHggfHwgIWN0eC0+bnJfZXZlbnRzKQogCQlnb3RvIG91dDsKIAorCS8qCisJICogV2UgbXVzdCBjdHhzdyBvdXQgY2dyb3VwIGV2ZW50cyB0byBhdm9pZCBjb25mbGljdAorCSAqIHdoZW4gaW52b2tpbmcgcGVyZl90YXNrX2V2ZW50X3NjaGVkX2luKCkgbGF0ZXIgb24KKwkgKiBpbiB0aGlzIGZ1bmN0aW9uLiBPdGhlcndpc2Ugd2UgZW5kIHVwIHRyeWluZyB0bworCSAqIGN0eHN3aW4gY2dyb3VwIGV2ZW50cyB3aGljaCBhcmUgYWxyZWFkeSBzY2hlZHVsZWQKKwkgKiBpbi4KKwkgKi8KKwlwZXJmX2Nncm91cF9zY2hlZF9vdXQoY3VycmVudCk7CiAJdGFza19jdHhfc2NoZWRfb3V0KGN0eCwgRVZFTlRfQUxMKTsKIAogCXJhd19zcGluX2xvY2soJmN0eC0+bG9jayk7CkBAIC0yNDQ3LDYgKzI0NTYsOSBAQAogCiAJcmF3X3NwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwogCisJLyoKKwkgKiBBbHNvIGNhbGxzIGN0eHN3aW4gZm9yIGNncm91cCBldmVudHMsIGlmIGFueToKKwkgKi8KIAlwZXJmX2V2ZW50X2NvbnRleHRfc2NoZWRfaW4oY3R4LCBjdHgtPnRhc2spOwogb3V0OgogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9waWQuYyBiL2tlcm5lbC9waWQuYwppbmRleCAwMmYyMjEyLi41N2E4MzQ2IDEwMDY0NAotLS0gYS9rZXJuZWwvcGlkLmMKKysrIGIva2VybmVsL3BpZC5jCkBAIC0yMTcsMTEgKzIxNywxNCBAQAogCXJldHVybiAtMTsKIH0KIAotaW50IG5leHRfcGlkbWFwKHN0cnVjdCBwaWRfbmFtZXNwYWNlICpwaWRfbnMsIGludCBsYXN0KQoraW50IG5leHRfcGlkbWFwKHN0cnVjdCBwaWRfbmFtZXNwYWNlICpwaWRfbnMsIHVuc2lnbmVkIGludCBsYXN0KQogewogCWludCBvZmZzZXQ7CiAJc3RydWN0IHBpZG1hcCAqbWFwLCAqZW5kOwogCisJaWYgKGxhc3QgPj0gUElEX01BWF9MSU1JVCkKKwkJcmV0dXJuIC0xOworCiAJb2Zmc2V0ID0gKGxhc3QgKyAxKSAmIEJJVFNfUEVSX1BBR0VfTUFTSzsKIAltYXAgPSAmcGlkX25zLT5waWRtYXBbKGxhc3QgKyAxKS9CSVRTX1BFUl9QQUdFXTsKIAllbmQgPSAmcGlkX25zLT5waWRtYXBbUElETUFQX0VOVFJJRVNdOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYyBiL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKaW5kZXggNjdmZWE5ZC4uMDc5MWIxMyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYworKysgYi9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCkBAIC0xMzQ3LDcgKzEzNDcsNyBAQAogCiAJLyoKIAkgKiBOb3cgdGhhdCBhbGwgdGhlIHRpbWVycyBvbiBvdXIgbGlzdCBoYXZlIHRoZSBmaXJpbmcgZmxhZywKLQkgKiBub29uZSB3aWxsIHRvdWNoIHRoZWlyIGxpc3QgZW50cmllcyBidXQgdXMuICBXZSdsbCB0YWtlCisJICogbm8gb25lIHdpbGwgdG91Y2ggdGhlaXIgbGlzdCBlbnRyaWVzIGJ1dCB1cy4gIFdlJ2xsIHRha2UKIAkgKiBlYWNoIHRpbWVyJ3MgbG9jayBiZWZvcmUgY2xlYXJpbmcgaXRzIGZpcmluZyBmbGFnLCBzbyBubwogCSAqIHRpbWVyIGNhbGwgd2lsbCBpbnRlcmZlcmUuCiAJICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcG9zaXgtdGltZXJzLmMgYi9rZXJuZWwvcG9zaXgtdGltZXJzLmMKaW5kZXggNGMwMTI0OS4uZTU0OThkNyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvc2l4LXRpbWVycy5jCisrKyBiL2tlcm5lbC9wb3NpeC10aW1lcnMuYwpAQCAtMzEzLDcgKzMxMyw3IEBACiAgKiByZXN0YXJ0ZWQgKGkuZS4gd2UgaGF2ZSBmbGFnZ2VkIHRoaXMgaW4gdGhlIHN5c19wcml2YXRlIGVudHJ5IG9mIHRoZQogICogaW5mbyBibG9jaykuCiAgKgotICogVG8gcHJvdGVjdCBhZ2luc3QgdGhlIHRpbWVyIGdvaW5nIGF3YXkgd2hpbGUgdGhlIGludGVycnVwdCBpcyBxdWV1ZWQsCisgKiBUbyBwcm90ZWN0IGFnYWluc3QgdGhlIHRpbWVyIGdvaW5nIGF3YXkgd2hpbGUgdGhlIGludGVycnVwdCBpcyBxdWV1ZWQsCiAgKiB3ZSByZXF1aXJlIHRoYXQgdGhlIGl0X3JlcXVldWVfcGVuZGluZyBmbGFnIGJlIHNldC4KICAqLwogdm9pZCBkb19zY2hlZHVsZV9uZXh0X3RpbWVyKHN0cnVjdCBzaWdpbmZvICppbmZvKQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL0tjb25maWcgYi9rZXJuZWwvcG93ZXIvS2NvbmZpZwppbmRleCA0NjAzZjA4Li42ZGU5YThmIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvS2NvbmZpZworKysgYi9rZXJuZWwvcG93ZXIvS2NvbmZpZwpAQCAtMTgsOSArMTgsMTMgQEAKIAogCSAgVHVybmluZyBPRkYgdGhpcyBzZXR0aW5nIGlzIE5PVCByZWNvbW1lbmRlZCEgSWYgaW4gZG91YnQsIHNheSBZLgogCitjb25maWcgSElCRVJOQVRFX0NBTExCQUNLUworCWJvb2wKKwogY29uZmlnIEhJQkVSTkFUSU9OCiAJYm9vbCAiSGliZXJuYXRpb24gKGFrYSAnc3VzcGVuZCB0byBkaXNrJykiCiAJZGVwZW5kcyBvbiBTV0FQICYmIEFSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUKKwlzZWxlY3QgSElCRVJOQVRFX0NBTExCQUNLUwogCXNlbGVjdCBMWk9fQ09NUFJFU1MKIAlzZWxlY3QgTFpPX0RFQ09NUFJFU1MKIAktLS1oZWxwLS0tCkBAIC04NSw3ICs4OSw3IEBACiAKIGNvbmZpZyBQTV9TTEVFUAogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFNVU1BFTkQgfHwgSElCRVJOQVRJT04gfHwgWEVOX1NBVkVfUkVTVE9SRQorCWRlcGVuZHMgb24gU1VTUEVORCB8fCBISUJFUk5BVEVfQ0FMTEJBQ0tTCiAKIGNvbmZpZyBQTV9TTEVFUF9TTVAKIAlkZWZfYm9vbCB5CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvaGliZXJuYXRlLmMgYi9rZXJuZWwvcG93ZXIvaGliZXJuYXRlLmMKaW5kZXggYWVhYmQyNi4uNTBhYWU2NiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jCisrKyBiL2tlcm5lbC9wb3dlci9oaWJlcm5hdGUuYwpAQCAtMjczLDggKzI3MywxMSBAQAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKIAllcnJvciA9IHN5c2Rldl9zdXNwZW5kKFBNU0dfRlJFRVpFKTsKLQlpZiAoIWVycm9yKQorCWlmICghZXJyb3IpIHsKIAkJZXJyb3IgPSBzeXNjb3JlX3N1c3BlbmQoKTsKKwkJaWYgKGVycm9yKQorCQkJc3lzZGV2X3Jlc3VtZSgpOworCX0KIAlpZiAoZXJyb3IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJQTTogU29tZSBzeXN0ZW0gZGV2aWNlcyBmYWlsZWQgdG8gcG93ZXIgZG93biwgIgogCQkJImFib3J0aW5nIGhpYmVybmF0aW9uXG4iKTsKQEAgLTQwNyw4ICs0MTAsMTEgQEAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCiAJZXJyb3IgPSBzeXNkZXZfc3VzcGVuZChQTVNHX1FVSUVTQ0UpOwotCWlmICghZXJyb3IpCisJaWYgKCFlcnJvcikgewogCQllcnJvciA9IHN5c2NvcmVfc3VzcGVuZCgpOworCQlpZiAoZXJyb3IpCisJCQlzeXNkZXZfcmVzdW1lKCk7CisJfQogCWlmIChlcnJvcikKIAkJZ290byBFbmFibGVfaXJxczsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL21haW4uYyBiL2tlcm5lbC9wb3dlci9tYWluLmMKaW5kZXggOGVhYmE1Zi4uZGU5YWVmOCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL21haW4uYworKysgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCkBAIC0yMjQsNyArMjI0LDcgQEAKICAqIHdyaXRpbmcgdG8gJ3N0YXRlJy4gIEl0IGZpcnN0IHNob3VsZCByZWFkIGZyb20gJ3dha2V1cF9jb3VudCcgYW5kIHN0b3JlCiAgKiB0aGUgcmVhZCB2YWx1ZS4gIFRoZW4sIGFmdGVyIGNhcnJ5aW5nIG91dCBpdHMgb3duIHByZXBhcmF0aW9ucyBmb3IgdGhlIHN5c3RlbQogICogdHJhbnNpdGlvbiB0byBhIHNsZWVwIHN0YXRlLCBpdCBzaG91bGQgd3JpdGUgdGhlIHN0b3JlZCB2YWx1ZSB0bwotICogJ3dha2V1cF9jb3VudCcuICBJZiB0aGF0IGZhaWxzLCBhdCBsZWFzdCBvbmUgd2FrZXVwIGV2ZW50IGhhcyBvY2N1cmVkIHNpbmNlCisgKiAnd2FrZXVwX2NvdW50Jy4gIElmIHRoYXQgZmFpbHMsIGF0IGxlYXN0IG9uZSB3YWtldXAgZXZlbnQgaGFzIG9jY3VycmVkIHNpbmNlCiAgKiAnd2FrZXVwX2NvdW50JyB3YXMgcmVhZCBhbmQgJ3N0YXRlJyBzaG91bGQgbm90IGJlIHdyaXR0ZW4gdG8uICBPdGhlcndpc2UsIGl0CiAgKiBpcyBhbGxvd2VkIHRvIHdyaXRlIHRvICdzdGF0ZScsIGJ1dCB0aGUgdHJhbnNpdGlvbiB3aWxsIGJlIGFib3J0ZWQgaWYgdGhlcmUKICAqIGFyZSBhbnkgd2FrZXVwIGV2ZW50cyBkZXRlY3RlZCBhZnRlciAnd2FrZXVwX2NvdW50JyB3YXMgd3JpdHRlbiB0by4KZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zdXNwZW5kLmMgYi9rZXJuZWwvcG93ZXIvc3VzcGVuZC5jCmluZGV4IDI4MTRjMzIuLjYyNzU5NzAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zdXNwZW5kLmMKKysrIGIva2VybmVsL3Bvd2VyL3N1c3BlbmQuYwpAQCAtMTY0LDggKzE2NCwxMSBAQAogCUJVR19PTighaXJxc19kaXNhYmxlZCgpKTsKIAogCWVycm9yID0gc3lzZGV2X3N1c3BlbmQoUE1TR19TVVNQRU5EKTsKLQlpZiAoIWVycm9yKQorCWlmICghZXJyb3IpIHsKIAkJZXJyb3IgPSBzeXNjb3JlX3N1c3BlbmQoKTsKKwkJaWYgKGVycm9yKQorCQkJc3lzZGV2X3Jlc3VtZSgpOworCX0KIAlpZiAoIWVycm9yKSB7CiAJCWlmICghKHN1c3BlbmRfdGVzdChURVNUX0NPUkUpIHx8IHBtX3dha2V1cF9wZW5kaW5nKCkpKSB7CiAJCQllcnJvciA9IHN1c3BlbmRfb3BzLT5lbnRlcihzdGF0ZSk7CkBAIC0yMTMsNyArMjE2LDYgQEAKIAkJCWdvdG8gQ2xvc2U7CiAJfQogCXN1c3BlbmRfY29uc29sZSgpOwotCXBtX3Jlc3RyaWN0X2dmcF9tYXNrKCk7CiAJc3VzcGVuZF90ZXN0X3N0YXJ0KCk7CiAJZXJyb3IgPSBkcG1fc3VzcGVuZF9zdGFydChQTVNHX1NVU1BFTkQpOwogCWlmIChlcnJvcikgewpAQCAtMjMwLDcgKzIzMiw2IEBACiAJc3VzcGVuZF90ZXN0X3N0YXJ0KCk7CiAJZHBtX3Jlc3VtZV9lbmQoUE1TR19SRVNVTUUpOwogCXN1c3BlbmRfdGVzdF9maW5pc2goInJlc3VtZSBkZXZpY2VzIik7Ci0JcG1fcmVzdG9yZV9nZnBfbWFzaygpOwogCXJlc3VtZV9jb25zb2xlKCk7CiAgQ2xvc2U6CiAJaWYgKHN1c3BlbmRfb3BzLT5lbmQpCkBAIC0yOTEsNyArMjkyLDkgQEAKIAkJZ290byBGaW5pc2g7CiAKIAlwcl9kZWJ1ZygiUE06IEVudGVyaW5nICVzIHNsZWVwXG4iLCBwbV9zdGF0ZXNbc3RhdGVdKTsKKwlwbV9yZXN0cmljdF9nZnBfbWFzaygpOwogCWVycm9yID0gc3VzcGVuZF9kZXZpY2VzX2FuZF9lbnRlcihzdGF0ZSk7CisJcG1fcmVzdG9yZV9nZnBfbWFzaygpOwogCiAgRmluaXNoOgogCXByX2RlYnVnKCJQTTogRmluaXNoaW5nIHdha2V1cC5cbiIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3VzZXIuYyBiL2tlcm5lbC9wb3dlci91c2VyLmMKaW5kZXggYzM2YzNiOS4uN2QwMmQzMyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3VzZXIuYworKysgYi9rZXJuZWwvcG93ZXIvdXNlci5jCkBAIC0xMzUsOCArMTM1LDEwIEBACiAJZnJlZV9iYXNpY19tZW1vcnlfYml0bWFwcygpOwogCWRhdGEgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJZnJlZV9hbGxfc3dhcF9wYWdlcyhkYXRhLT5zd2FwKTsKLQlpZiAoZGF0YS0+ZnJvemVuKQorCWlmIChkYXRhLT5mcm96ZW4pIHsKKwkJcG1fcmVzdG9yZV9nZnBfbWFzaygpOwogCQl0aGF3X3Byb2Nlc3NlcygpOworCX0KIAlwbV9ub3RpZmllcl9jYWxsX2NoYWluKGRhdGEtPm1vZGUgPT0gT19SRE9OTFkgPwogCQkJUE1fUE9TVF9ISUJFUk5BVElPTiA6IFBNX1BPU1RfUkVTVE9SRSk7CiAJYXRvbWljX2luYygmc25hcHNob3RfZGV2aWNlX2F2YWlsYWJsZSk7CkBAIC0zNzksNiArMzgxLDcgQEAKIAkJICogUE1fSElCRVJOQVRJT05fUFJFUEFSRQogCQkgKi8KIAkJZXJyb3IgPSBzdXNwZW5kX2RldmljZXNfYW5kX2VudGVyKFBNX1NVU1BFTkRfTUVNKTsKKwkJZGF0YS0+cmVhZHkgPSAwOwogCQlicmVhazsKIAogCWNhc2UgU05BUFNIT1RfUExBVEZPUk1fU1VQUE9SVDoKZGlmZiAtLWdpdCBhL2tlcm5lbC9wdHJhY2UuYyBiL2tlcm5lbC9wdHJhY2UuYwppbmRleCAwZmMxZWVkLi5kYzdhYjY1IDEwMDY0NAotLS0gYS9rZXJuZWwvcHRyYWNlLmMKKysrIGIva2VybmVsL3B0cmFjZS5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvcmVnc2V0Lmg+CisjaW5jbHVkZSA8bGludXgvaHdfYnJlYWtwb2ludC5oPgogCiAKIC8qCkBAIC04NzksMyArODgwLDE5IEBACiAJcmV0dXJuIHJldDsKIH0KICNlbmRpZgkvKiBDT05GSUdfQ09NUEFUICovCisKKyNpZmRlZiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UCitpbnQgcHRyYWNlX2dldF9icmVha3BvaW50cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpZiAoYXRvbWljX2luY19ub3RfemVybygmdHNrLT5wdHJhY2VfYnBfcmVmY250KSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gLTE7Cit9CisKK3ZvaWQgcHRyYWNlX3B1dF9icmVha3BvaW50cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmdHNrLT5wdHJhY2VfYnBfcmVmY250KSkKKwkJZmx1c2hfcHRyYWNlX2h3X2JyZWFrcG9pbnQodHNrKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UICovCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IGE4ODQ1NTEuLjMxMmY4YjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC0yMzA5LDcgKzIzMDksNyBAQAogICogQ2F1c2UgYSBwcm9jZXNzIHdoaWNoIGlzIHJ1bm5pbmcgb24gYW5vdGhlciBDUFUgdG8gZW50ZXIKICAqIGtlcm5lbC1tb2RlLCB3aXRob3V0IGFueSBkZWxheS4gKHRvIGdldCBzaWduYWxzIGhhbmRsZWQuKQogICoKLSAqIE5PVEU6IHRoaXMgZnVuY3Rpb24gZG9lc250IGhhdmUgdG8gdGFrZSB0aGUgcnVucXVldWUgbG9jaywKKyAqIE5PVEU6IHRoaXMgZnVuY3Rpb24gZG9lc24ndCBoYXZlIHRvIHRha2UgdGhlIHJ1bnF1ZXVlIGxvY2ssCiAgKiBiZWNhdXNlIGFsbCBpdCB3YW50cyB0byBlbnN1cmUgaXMgdGhhdCB0aGUgcmVtb3RlIHRhc2sgZW50ZXJzCiAgKiB0aGUga2VybmVsLiBJZiB0aGUgSVBJIHJhY2VzIGFuZCB0aGUgdGFzayBoYXMgYmVlbiBtaWdyYXRlZAogICogdG8gYW5vdGhlciBDUFUgdGhlbiBubyBoYXJtIGlzIGRvbmUgYW5kIHRoZSBwdXJwb3NlIGhhcyBiZWVuCkBAIC00MTExLDIwICs0MTExLDIwIEBACiAJCQkJCXRyeV90b193YWtlX3VwX2xvY2FsKHRvX3dha2V1cCk7CiAJCQl9CiAJCQlkZWFjdGl2YXRlX3Rhc2socnEsIHByZXYsIERFUVVFVUVfU0xFRVApOworCisJCQkvKgorCQkJICogSWYgd2UgYXJlIGdvaW5nIHRvIHNsZWVwIGFuZCB3ZSBoYXZlIHBsdWdnZWQgSU8gcXVldWVkLCBtYWtlCisJCQkgKiBzdXJlIHRvIHN1Ym1pdCBpdCB0byBhdm9pZCBkZWFkbG9ja3MuCisJCQkgKi8KKwkJCWlmIChibGtfbmVlZHNfZmx1c2hfcGx1ZyhwcmV2KSkgeworCQkJCXJhd19zcGluX3VubG9jaygmcnEtPmxvY2spOworCQkJCWJsa19zY2hlZHVsZV9mbHVzaF9wbHVnKHByZXYpOworCQkJCXJhd19zcGluX2xvY2soJnJxLT5sb2NrKTsKKwkJCX0KIAkJfQogCQlzd2l0Y2hfY291bnQgPSAmcHJldi0+bnZjc3c7CiAJfQogCi0JLyoKLQkgKiBJZiB3ZSBhcmUgZ29pbmcgdG8gc2xlZXAgYW5kIHdlIGhhdmUgcGx1Z2dlZCBJTyBxdWV1ZWQsIG1ha2UKLQkgKiBzdXJlIHRvIHN1Ym1pdCBpdCB0byBhdm9pZCBkZWFkbG9ja3MuCi0JICovCi0JaWYgKHByZXYtPnN0YXRlICE9IFRBU0tfUlVOTklORyAmJiBibGtfbmVlZHNfZmx1c2hfcGx1ZyhwcmV2KSkgewotCQlyYXdfc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKLQkJYmxrX2ZsdXNoX3BsdWcocHJldik7Ci0JCXJhd19zcGluX2xvY2soJnJxLT5sb2NrKTsKLQl9Ci0KIAlwcmVfc2NoZWR1bGUocnEsIHByZXYpOwogCiAJaWYgKHVubGlrZWx5KCFycS0+bnJfcnVubmluZykpCkBAIC00OTk3LDcgKzQ5OTcsNyBAQAogCSAqLwogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcC0+cGlfbG9jaywgZmxhZ3MpOwogCS8qCi0JICogVG8gYmUgYWJsZSB0byBjaGFuZ2UgcC0+cG9saWN5IHNhZmVseSwgdGhlIGFwcm9wcmlhdGUKKwkgKiBUbyBiZSBhYmxlIHRvIGNoYW5nZSBwLT5wb2xpY3kgc2FmZWx5LCB0aGUgYXBwcm9wcmlhdGUKIAkgKiBydW5xdWV1ZSBsb2NrIG11c3QgYmUgaGVsZC4KIAkgKi8KIAlycSA9IF9fdGFza19ycV9sb2NrKHApOwpAQCAtNTcxNiw3ICs1NzE2LDcgQEAKIAlkb19lYWNoX3RocmVhZChnLCBwKSB7CiAJCS8qCiAJCSAqIHJlc2V0IHRoZSBOTUktdGltZW91dCwgbGlzdGluZyBhbGwgZmlsZXMgb24gYSBzbG93Ci0JCSAqIGNvbnNvbGUgbWlnaHQgdGFrZSBhbG90IG9mIHRpbWU6CisJCSAqIGNvbnNvbGUgbWlnaHQgdGFrZSBhIGxvdCBvZiB0aW1lOgogCQkgKi8KIAkJdG91Y2hfbm1pX3dhdGNoZG9nKCk7CiAJCWlmICghc3RhdGVfZmlsdGVyIHx8IChwLT5zdGF0ZSAmIHN0YXRlX2ZpbHRlcikpCkBAIC02MzMxLDYgKzYzMzEsOSBAQAogCQlicmVhazsKICNlbmRpZgogCX0KKworCXVwZGF0ZV9tYXhfaW50ZXJ2YWwoKTsKKwogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9hdXRvZ3JvdXAuYyBiL2tlcm5lbC9zY2hlZF9hdXRvZ3JvdXAuYwppbmRleCA1OTQ2YWM1Li40MjkyNDJmIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfYXV0b2dyb3VwLmMKKysrIGIva2VybmVsL3NjaGVkX2F1dG9ncm91cC5jCkBAIC0xNzksNyArMTc5LDcgQEAKIAlzdHJ1Y3QgYXV0b2dyb3VwICphZyA9IGF1dG9ncm91cF9jcmVhdGUoKTsKIAogCWF1dG9ncm91cF9tb3ZlX2dyb3VwKHAsIGFnKTsKLQkvKiBkcm9wIGV4dHJhIHJlZnJlbmNlIGFkZGVkIGJ5IGF1dG9ncm91cF9jcmVhdGUoKSAqLworCS8qIGRyb3AgZXh0cmEgcmVmZXJlbmNlIGFkZGVkIGJ5IGF1dG9ncm91cF9jcmVhdGUoKSAqLwogCWF1dG9ncm91cF9rcmVmX3B1dChhZyk7CiB9CiBFWFBPUlRfU1lNQk9MKHNjaGVkX2F1dG9ncm91cF9jcmVhdGVfYXR0YWNoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mYWlyLmMgYi9rZXJuZWwvc2NoZWRfZmFpci5jCmluZGV4IGM3ZWM1YzguLjZmYTgzM2EgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mYWlyLmMKKysrIGIva2VybmVsL3NjaGVkX2ZhaXIuYwpAQCAtMjEwNCwyMSArMjEwNCwyMCBAQAogCSAgICAgIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLCBpbnQgKmFsbF9waW5uZWQsCiAJICAgICAgaW50ICp0aGlzX2Jlc3RfcHJpbywgc3RydWN0IGNmc19ycSAqYnVzaWVzdF9jZnNfcnEpCiB7Ci0JaW50IGxvb3BzID0gMCwgcHVsbGVkID0gMCwgcGlubmVkID0gMDsKKwlpbnQgbG9vcHMgPSAwLCBwdWxsZWQgPSAwOwogCWxvbmcgcmVtX2xvYWRfbW92ZSA9IG1heF9sb2FkX21vdmU7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwLCAqbjsKIAogCWlmIChtYXhfbG9hZF9tb3ZlID09IDApCiAJCWdvdG8gb3V0OwogCi0JcGlubmVkID0gMTsKLQogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmYnVzaWVzdF9jZnNfcnEtPnRhc2tzLCBzZS5ncm91cF9ub2RlKSB7CiAJCWlmIChsb29wcysrID4gc3lzY3RsX3NjaGVkX25yX21pZ3JhdGUpCiAJCQlicmVhazsKIAogCQlpZiAoKHAtPnNlLmxvYWQud2VpZ2h0ID4+IDEpID4gcmVtX2xvYWRfbW92ZSB8fAotCQkgICAgIWNhbl9taWdyYXRlX3Rhc2socCwgYnVzaWVzdCwgdGhpc19jcHUsIHNkLCBpZGxlLCAmcGlubmVkKSkKKwkJICAgICFjYW5fbWlncmF0ZV90YXNrKHAsIGJ1c2llc3QsIHRoaXNfY3B1LCBzZCwgaWRsZSwKKwkJCQkgICAgICBhbGxfcGlubmVkKSkKIAkJCWNvbnRpbnVlOwogCiAJCXB1bGxfdGFzayhidXNpZXN0LCBwLCB0aGlzX3JxLCB0aGlzX2NwdSk7CkBAIC0yMTUzLDkgKzIxNTIsNiBAQAogCSAqLwogCXNjaGVkc3RhdF9hZGQoc2QsIGxiX2dhaW5lZFtpZGxlXSwgcHVsbGVkKTsKIAotCWlmIChhbGxfcGlubmVkKQotCQkqYWxsX3Bpbm5lZCA9IHBpbm5lZDsKLQogCXJldHVybiBtYXhfbG9hZF9tb3ZlIC0gcmVtX2xvYWRfbW92ZTsKIH0KIApAQCAtMzA2Miw3ICszMDU4LDcgQEAKIAogCS8qCiAJICogaWYgKmltYmFsYW5jZSBpcyBsZXNzIHRoYW4gdGhlIGF2ZXJhZ2UgbG9hZCBwZXIgcnVubmFibGUgdGFzawotCSAqIHRoZXJlIGlzIG5vIGdhdXJhbnRlZSB0aGF0IGFueSB0YXNrcyB3aWxsIGJlIG1vdmVkIHNvIHdlJ2xsIGhhdmUKKwkgKiB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBhbnkgdGFza3Mgd2lsbCBiZSBtb3ZlZCBzbyB3ZSdsbCBoYXZlCiAJICogYSB0aGluayBhYm91dCBidW1waW5nIGl0cyB2YWx1ZSB0byBmb3JjZSBhdCBsZWFzdCBvbmUgdGFzayB0byBiZQogCSAqIG1vdmVkCiAJICovCkBAIC0zMTI3LDYgKzMxMjMsOCBAQAogCWlmICghc2RzLmJ1c2llc3QgfHwgc2RzLmJ1c2llc3RfbnJfcnVubmluZyA9PSAwKQogCQlnb3RvIG91dF9iYWxhbmNlZDsKIAorCXNkcy5hdmdfbG9hZCA9IChTQ0hFRF9MT0FEX1NDQUxFICogc2RzLnRvdGFsX2xvYWQpIC8gc2RzLnRvdGFsX3B3cjsKKwogCS8qCiAJICogSWYgdGhlIGJ1c2llc3QgZ3JvdXAgaXMgaW1iYWxhbmNlZCB0aGUgYmVsb3cgY2hlY2tzIGRvbid0CiAJICogd29yayBiZWNhdXNlIHRoZXkgYXNzdW1lcyBhbGwgdGhpbmdzIGFyZSBlcXVhbCwgd2hpY2ggdHlwaWNhbGx5CkBAIC0zMTUxLDcgKzMxNDksNiBAQAogCSAqIERvbid0IHB1bGwgYW55IHRhc2tzIGlmIHRoaXMgZ3JvdXAgaXMgYWxyZWFkeSBhYm92ZSB0aGUgZG9tYWluCiAJICogYXZlcmFnZSBsb2FkLgogCSAqLwotCXNkcy5hdmdfbG9hZCA9IChTQ0hFRF9MT0FEX1NDQUxFICogc2RzLnRvdGFsX2xvYWQpIC8gc2RzLnRvdGFsX3B3cjsKIAlpZiAoc2RzLnRoaXNfbG9hZCA+PSBzZHMuYXZnX2xvYWQpCiAJCWdvdG8gb3V0X2JhbGFuY2VkOwogCkBAIC0zMzQwLDYgKzMzMzcsNyBAQAogCQkgKiBzdGlsbCB1bmJhbGFuY2VkLiBsZF9tb3ZlZCBzaW1wbHkgc3RheXMgemVybywgc28gaXQgaXMKIAkJICogY29ycmVjdGx5IHRyZWF0ZWQgYXMgYW4gaW1iYWxhbmNlLgogCQkgKi8KKwkJYWxsX3Bpbm5lZCA9IDE7CiAJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJZG91YmxlX3JxX2xvY2sodGhpc19ycSwgYnVzaWVzdCk7CiAJCWxkX21vdmVkID0gbW92ZV90YXNrcyh0aGlzX3JxLCB0aGlzX2NwdSwgYnVzaWVzdCwKQEAgLTM4MjAsNiArMzgxOCwxNyBAQAogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJhbGFuY2luZyk7CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fcmVhZF9tb3N0bHkgbWF4X2xvYWRfYmFsYW5jZV9pbnRlcnZhbCA9IEhaLzEwOworCisvKgorICogU2NhbGUgdGhlIG1heCBsb2FkX2JhbGFuY2UgaW50ZXJ2YWwgd2l0aCB0aGUgbnVtYmVyIG9mIENQVXMgaW4gdGhlIHN5c3RlbS4KKyAqIFRoaXMgdHJhZGVzIGxvYWQtYmFsYW5jZSBsYXRlbmN5IG9uIGxhcmdlciBtYWNoaW5lcyBmb3IgbGVzcyBjcm9zcyB0YWxrLgorICovCitzdGF0aWMgdm9pZCB1cGRhdGVfbWF4X2ludGVydmFsKHZvaWQpCit7CisJbWF4X2xvYWRfYmFsYW5jZV9pbnRlcnZhbCA9IEhaKm51bV9vbmxpbmVfY3B1cygpLzEwOworfQorCiAvKgogICogSXQgY2hlY2tzIGVhY2ggc2NoZWR1bGluZyBkb21haW4gdG8gc2VlIGlmIGl0IGlzIGR1ZSB0byBiZSBiYWxhbmNlZCwKICAqIGFuZCBpbml0aWF0ZXMgYSBiYWxhbmNpbmcgb3BlcmF0aW9uIGlmIHNvLgpAQCAtMzg0OSwxMCArMzg1OCw3IEBACiAKIAkJLyogc2NhbGUgbXMgdG8gamlmZmllcyAqLwogCQlpbnRlcnZhbCA9IG1zZWNzX3RvX2ppZmZpZXMoaW50ZXJ2YWwpOwotCQlpZiAodW5saWtlbHkoIWludGVydmFsKSkKLQkJCWludGVydmFsID0gMTsKLQkJaWYgKGludGVydmFsID4gSFoqbnVtX29ubGluZV9jcHVzKCkvMTApCi0JCQlpbnRlcnZhbCA9IEhaKm51bV9vbmxpbmVfY3B1cygpLzEwOworCQlpbnRlcnZhbCA9IGNsYW1wKGludGVydmFsLCAxVUwsIG1heF9sb2FkX2JhbGFuY2VfaW50ZXJ2YWwpOwogCiAJCW5lZWRfc2VyaWFsaXplID0gc2QtPmZsYWdzICYgU0RfU0VSSUFMSVpFOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfcnQuYyBiL2tlcm5lbC9zY2hlZF9ydC5jCmluZGV4IGRiMzA4Y2IuLmU3Y2ViZGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9ydC5jCisrKyBiL2tlcm5lbC9zY2hlZF9ydC5jCkBAIC0xMzc4LDcgKzEzNzgsNyBAQAogCQl0YXNrID0gcGlja19uZXh0X3B1c2hhYmxlX3Rhc2socnEpOwogCQlpZiAodGFza19jcHUobmV4dF90YXNrKSA9PSBycS0+Y3B1ICYmIHRhc2sgPT0gbmV4dF90YXNrKSB7CiAJCQkvKgotCQkJICogSWYgd2UgZ2V0IGhlcmUsIHRoZSB0YXNrIGhhc250IG1vdmVkIGF0IGFsbCwgYnV0CisJCQkgKiBJZiB3ZSBnZXQgaGVyZSwgdGhlIHRhc2sgaGFzbid0IG1vdmVkIGF0IGFsbCwgYnV0CiAJCQkgKiBpdCBoYXMgZmFpbGVkIHRvIHB1c2guICBXZSB3aWxsIG5vdCB0cnkgYWdhaW4sCiAJCQkgKiBzaW5jZSB0aGUgb3RoZXIgY3B1cyB3aWxsIHB1bGwgZnJvbSB1cyB3aGVuIHRoZXkKIAkJCSAqIGFyZSByZWFkeS4KQEAgLTE0ODgsNyArMTQ4OCw3IEBACiAJCQkvKgogCQkJICogV2UgY29udGludWUgd2l0aCB0aGUgc2VhcmNoLCBqdXN0IGluCiAJCQkgKiBjYXNlIHRoZXJlJ3MgYW4gZXZlbiBoaWdoZXIgcHJpbyB0YXNrCi0JCQkgKiBpbiBhbm90aGVyIHJ1bnF1ZXVlLiAobG93IGxpa2VseWhvb2QKKwkJCSAqIGluIGFub3RoZXIgcnVucXVldWUuIChsb3cgbGlrZWxpaG9vZAogCQkJICogYnV0IHBvc3NpYmxlKQogCQkJICovCiAJCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zaWduYWwuYyBiL2tlcm5lbC9zaWduYWwuYwppbmRleCBkYzE3OTI5Li43MTY1YWY1IDEwMDY0NAotLS0gYS9rZXJuZWwvc2lnbmFsLmMKKysrIGIva2VybmVsL3NpZ25hbC5jCkBAIC0xODg3LDcgKzE4ODcsNyBAQAogCWZvciAoOzspIHsKIAkJc3RydWN0IGtfc2lnYWN0aW9uICprYTsKIAkJLyoKLQkJICogVHJhY2luZyBjYW4gaW5kdWNlIGFuIGFydGlmaWNhbCBzaWduYWwgYW5kIGNob29zZSBzaWdhY3Rpb24uCisJCSAqIFRyYWNpbmcgY2FuIGluZHVjZSBhbiBhcnRpZmljaWFsIHNpZ25hbCBhbmQgY2hvb3NlIHNpZ2FjdGlvbi4KIAkJICogVGhlIHJldHVybiB2YWx1ZSBpbiBAc2lnbnIgZGV0ZXJtaW5lcyB0aGUgZGVmYXVsdCBhY3Rpb24sCiAJCSAqIGJ1dCBAaW5mby0+c2lfc2lnbm8gaXMgdGhlIHNpZ25hbCBudW1iZXIgd2Ugd2lsbCByZXBvcnQuCiAJCSAqLwpAQCAtMjcxMSw4ICsyNzExLDggQEAKIC8qKgogICogIHN5c19ydF9zaWdhY3Rpb24gLSBhbHRlciBhbiBhY3Rpb24gdGFrZW4gYnkgYSBwcm9jZXNzCiAgKiAgQHNpZzogc2lnbmFsIHRvIGJlIHNlbnQKLSAqICBAYWN0OiB0aGUgdGhyZWFkIGdyb3VwIElEIG9mIHRoZSB0aHJlYWQKLSAqICBAb2FjdDogdGhlIFBJRCBvZiB0aGUgdGhyZWFkCisgKiAgQGFjdDogbmV3IHNpZ2FjdGlvbgorICogIEBvYWN0OiB1c2VkIHRvIHNhdmUgdGhlIHByZXZpb3VzIHNpZ2FjdGlvbgogICogIEBzaWdzZXRzaXplOiBzaXplIG9mIHNpZ3NldF90IHR5cGUKICAqLwogU1lTQ0FMTF9ERUZJTkU0KHJ0X3NpZ2FjdGlvbiwgaW50LCBzaWcsCmRpZmYgLS1naXQgYS9rZXJuZWwvc29mdGlycS5jIGIva2VybmVsL3NvZnRpcnEuYwppbmRleCA3MzVkODcwLi4xNzRmOTc2IDEwMDY0NAotLS0gYS9rZXJuZWwvc29mdGlycS5jCisrKyBiL2tlcm5lbC9zb2Z0aXJxLmMKQEAgLTU2Nyw3ICs1NjcsNyBAQAogLyoqCiAgKiB0YXNrbGV0X2hydGltZXJfaW5pdCAtIEluaXQgYSB0YXNrbGV0L2hydGltZXIgY29tYm8gZm9yIHNvZnRpcnEgY2FsbGJhY2tzCiAgKiBAdHRpbWVyOgkgdGFza2xldF9ocnRpbWVyIHdoaWNoIGlzIGluaXRpYWxpemVkCi0gKiBAZnVuY3Rpb246CSBocnRpbWVyIGNhbGxiYWNrIGZ1bnRpb24gd2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSBzb2Z0aXJxIGNvbnRleHQKKyAqIEBmdW5jdGlvbjoJIGhydGltZXIgY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSBzb2Z0aXJxIGNvbnRleHQKICAqIEB3aGljaF9jbG9jazogY2xvY2sgaWQgKENMT0NLX01PTk9UT05JQy9DTE9DS19SRUFMVElNRSkKICAqIEBtb2RlOgkgaHJ0aW1lciBtb2RlIChIUlRJTUVSX01PREVfQUJTL0hSVElNRVJfTU9ERV9SRUwpCiAgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMgYi9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCmluZGV4IDY1MTljZjYuLjBlMTdjMTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKKysrIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwpAQCAtNjg1LDggKzY4NSw4IEBACiAJLyogQWRkIGNsb2Nrc291cmNlIHRvIHRoZSBjbGNva3NvdXJjZSBsaXN0ICovCiAJbXV0ZXhfbG9jaygmY2xvY2tzb3VyY2VfbXV0ZXgpOwogCWNsb2Nrc291cmNlX2VucXVldWUoY3MpOwotCWNsb2Nrc291cmNlX3NlbGVjdCgpOwogCWNsb2Nrc291cmNlX2VucXVldWVfd2F0Y2hkb2coY3MpOworCWNsb2Nrc291cmNlX3NlbGVjdCgpOwogCW11dGV4X3VubG9jaygmY2xvY2tzb3VyY2VfbXV0ZXgpOwogCXJldHVybiAwOwogfQpAQCAtNzA2LDggKzcwNiw4IEBACiAKIAltdXRleF9sb2NrKCZjbG9ja3NvdXJjZV9tdXRleCk7CiAJY2xvY2tzb3VyY2VfZW5xdWV1ZShjcyk7Ci0JY2xvY2tzb3VyY2Vfc2VsZWN0KCk7CiAJY2xvY2tzb3VyY2VfZW5xdWV1ZV93YXRjaGRvZyhjcyk7CisJY2xvY2tzb3VyY2Vfc2VsZWN0KCk7CiAJbXV0ZXhfdW5sb2NrKCZjbG9ja3NvdXJjZV9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9qaWZmaWVzLmMgYi9rZXJuZWwvdGltZS9qaWZmaWVzLmMKaW5kZXggYjJmYTUwNi4uYTQ3MDE1NCAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvamlmZmllcy5jCisrKyBiL2tlcm5lbC90aW1lL2ppZmZpZXMuYwpAQCAtMzQsNyArMzQsNyBAQAogICogaW5hY2N1cmFjaWVzIGNhdXNlZCBieSBtaXNzZWQgb3IgbG9zdCB0aW1lcgogICogaW50ZXJydXB0cyBhbmQgdGhlIGluYWJpbGl0eSBmb3IgdGhlIHRpbWVyCiAgKiBpbnRlcnJ1cHQgaGFyZHdhcmUgdG8gYWNjdXJhdGx5IHRpY2sgYXQgdGhlCi0gKiByZXF1ZXN0ZWQgSFogdmFsdWUuIEl0IGlzIGFsc28gbm90IHJlY2NvbWVuZGVkCisgKiByZXF1ZXN0ZWQgSFogdmFsdWUuIEl0IGlzIGFsc28gbm90IHJlY29tbWVuZGVkCiAgKiBmb3IgInRpY2stbGVzcyIgc3lzdGVtcy4KICAqLwogI2RlZmluZSBOU0VDX1BFUl9KSUZGWQkoKHUzMikoKCgodTY0KU5TRUNfUEVSX1NFQyk8PDgpL0FDVEhaKSkKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3Bvc2l4LWNsb2NrLmMgYi9rZXJuZWwvdGltZS9wb3NpeC1jbG9jay5jCmluZGV4IDI1MDI4ZGQuLmMzNDBjYTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3Bvc2l4LWNsb2NrLmMKKysrIGIva2VybmVsL3RpbWUvcG9zaXgtY2xvY2suYwpAQCAtMTksNyArMTksNiBAQAogICovCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvcG9zaXgtY2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KQEAgLTM0LDE5ICszMywxOSBAQAogewogCXN0cnVjdCBwb3NpeF9jbG9jayAqY2xrID0gZnAtPnByaXZhdGVfZGF0YTsKIAotCW11dGV4X2xvY2soJmNsay0+bXV0ZXgpOworCWRvd25fcmVhZCgmY2xrLT5yd3NlbSk7CiAKIAlpZiAoIWNsay0+em9tYmllKQogCQlyZXR1cm4gY2xrOwogCi0JbXV0ZXhfdW5sb2NrKCZjbGstPm11dGV4KTsKKwl1cF9yZWFkKCZjbGstPnJ3c2VtKTsKIAogCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBwdXRfcG9zaXhfY2xvY2soc3RydWN0IHBvc2l4X2Nsb2NrICpjbGspCiB7Ci0JbXV0ZXhfdW5sb2NrKCZjbGstPm11dGV4KTsKKwl1cF9yZWFkKCZjbGstPnJ3c2VtKTsKIH0KIAogc3RhdGljIHNzaXplX3QgcG9zaXhfY2xvY2tfcmVhZChzdHJ1Y3QgZmlsZSAqZnAsIGNoYXIgX191c2VyICpidWYsCkBAIC0xNTYsNyArMTU1LDcgQEAKIAlzdHJ1Y3QgcG9zaXhfY2xvY2sgKmNsayA9CiAJCWNvbnRhaW5lcl9vZihpbm9kZS0+aV9jZGV2LCBzdHJ1Y3QgcG9zaXhfY2xvY2ssIGNkZXYpOwogCi0JbXV0ZXhfbG9jaygmY2xrLT5tdXRleCk7CisJZG93bl9yZWFkKCZjbGstPnJ3c2VtKTsKIAogCWlmIChjbGstPnpvbWJpZSkgewogCQllcnIgPSAtRU5PREVWOwpAQCAtMTcyLDcgKzE3MSw3IEBACiAJCWZwLT5wcml2YXRlX2RhdGEgPSBjbGs7CiAJfQogb3V0OgotCW11dGV4X3VubG9jaygmY2xrLT5tdXRleCk7CisJdXBfcmVhZCgmY2xrLT5yd3NlbSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjExLDI1ICsyMTAsMjAgQEAKIAlpbnQgZXJyOwogCiAJa3JlZl9pbml0KCZjbGstPmtyZWYpOwotCW11dGV4X2luaXQoJmNsay0+bXV0ZXgpOworCWluaXRfcndzZW0oJmNsay0+cndzZW0pOwogCiAJY2Rldl9pbml0KCZjbGstPmNkZXYsICZwb3NpeF9jbG9ja19maWxlX29wZXJhdGlvbnMpOwogCWNsay0+Y2Rldi5vd25lciA9IGNsay0+b3BzLm93bmVyOwogCWVyciA9IGNkZXZfYWRkKCZjbGstPmNkZXYsIGRldmlkLCAxKTsKLQlpZiAoZXJyKQotCQlnb3RvIG5vX2NkZXY7CiAKIAlyZXR1cm4gZXJyOwotbm9fY2RldjoKLQltdXRleF9kZXN0cm95KCZjbGstPm11dGV4KTsKLQlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocG9zaXhfY2xvY2tfcmVnaXN0ZXIpOwogCiBzdGF0aWMgdm9pZCBkZWxldGVfY2xvY2soc3RydWN0IGtyZWYgKmtyZWYpCiB7CiAJc3RydWN0IHBvc2l4X2Nsb2NrICpjbGsgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHBvc2l4X2Nsb2NrLCBrcmVmKTsKLQltdXRleF9kZXN0cm95KCZjbGstPm11dGV4KTsKKwogCWlmIChjbGstPnJlbGVhc2UpCiAJCWNsay0+cmVsZWFzZShjbGspOwogfQpAQCAtMjM4LDkgKzIzMiw5IEBACiB7CiAJY2Rldl9kZWwoJmNsay0+Y2Rldik7CiAKLQltdXRleF9sb2NrKCZjbGstPm11dGV4KTsKKwlkb3duX3dyaXRlKCZjbGstPnJ3c2VtKTsKIAljbGstPnpvbWJpZSA9IHRydWU7Ci0JbXV0ZXhfdW5sb2NrKCZjbGstPm11dGV4KTsKKwl1cF93cml0ZSgmY2xrLT5yd3NlbSk7CiAKIAlrcmVmX3B1dCgmY2xrLT5rcmVmLCBkZWxldGVfY2xvY2spOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYyBiL2tlcm5lbC90aW1lL3RpY2stYnJvYWRjYXN0LmMKaW5kZXggZGE4MDBmZi4uNzIzYzc2MyAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYworKysgYi9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jCkBAIC01MjIsMTAgKzUyMiwxMSBAQAogICovCiB2b2lkIHRpY2tfYnJvYWRjYXN0X3NldHVwX29uZXNob3Qoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqYmMpCiB7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwogCS8qIFNldCBpdCB1cCBvbmx5IG9uY2UgISAqLwogCWlmIChiYy0+ZXZlbnRfaGFuZGxlciAhPSB0aWNrX2hhbmRsZV9vbmVzaG90X2Jyb2FkY2FzdCkgewogCQlpbnQgd2FzX3BlcmlvZGljID0gYmMtPm1vZGUgPT0gQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM7Ci0JCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAkJYmMtPmV2ZW50X2hhbmRsZXIgPSB0aWNrX2hhbmRsZV9vbmVzaG90X2Jyb2FkY2FzdDsKIAkJY2xvY2tldmVudHNfc2V0X21vZGUoYmMsIENMT0NLX0VWVF9NT0RFX09ORVNIT1QpOwpAQCAtNTUxLDYgKzU1MiwxNSBAQAogCQkJdGlja19icm9hZGNhc3Rfc2V0X2V2ZW50KHRpY2tfbmV4dF9wZXJpb2QsIDEpOwogCQl9IGVsc2UKIAkJCWJjLT5uZXh0X2V2ZW50LnR2NjQgPSBLVElNRV9NQVg7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVGhlIGZpcnN0IGNwdSB3aGljaCBzd2l0Y2hlcyB0byBvbmVzaG90IG1vZGUgc2V0cworCQkgKiB0aGUgYml0IGZvciBhbGwgb3RoZXIgY3B1cyB3aGljaCBhcmUgaW4gdGhlIGdlbmVyYWwKKwkJICogKHBlcmlvZGljKSBicm9hZGNhc3QgbWFzay4gU28gdGhlIGJpdCBpcyBzZXQgYW5kCisJCSAqIHdvdWxkIHByZXZlbnQgdGhlIGZpcnN0IGJyb2FkY2FzdCBlbnRlciBhZnRlciB0aGlzCisJCSAqIHRvIHByb2dyYW0gdGhlIGJjIGRldmljZS4KKwkJICovCisJCXRpY2tfYnJvYWRjYXN0X2NsZWFyX29uZXNob3QoY3B1KTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVyX3N0YXRzLmMgYi9rZXJuZWwvdGltZS90aW1lcl9zdGF0cy5jCmluZGV4IDJmM2I1ODUuLmE1ZDBhM2EgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpbWVyX3N0YXRzLmMKKysrIGIva2VybmVsL3RpbWUvdGltZXJfc3RhdHMuYwpAQCAtMjM2LDcgKzIzNiw3IEBACiAJCQkgICAgICB1bnNpZ25lZCBpbnQgdGltZXJfZmxhZykKIHsKIAkvKgotCSAqIEl0IGRvZXNudCBtYXR0ZXIgd2hpY2ggbG9jayB3ZSB0YWtlOgorCSAqIEl0IGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGxvY2sgd2UgdGFrZToKIAkgKi8KIAlyYXdfc3BpbmxvY2tfdCAqbG9jazsKIAlzdHJ1Y3QgZW50cnkgKmVudHJ5LCBpbnB1dDsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9LY29uZmlnIGIva2VybmVsL3RyYWNlL0tjb25maWcKaW5kZXggNjFkN2Q1OWYuLjJhZDM5ZTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9LY29uZmlnCisrKyBiL2tlcm5lbC90cmFjZS9LY29uZmlnCkBAIC0xNDEsNyArMTQxLDcgQEAKIGNvbmZpZyBGVU5DVElPTl9UUkFDRVIKIAlib29sICJLZXJuZWwgRnVuY3Rpb24gVHJhY2VyIgogCWRlcGVuZHMgb24gSEFWRV9GVU5DVElPTl9UUkFDRVIKLQlzZWxlY3QgRlJBTUVfUE9JTlRFUiBpZiAhQVJNX1VOV0lORCAmJiAhUzM5MAorCXNlbGVjdCBGUkFNRV9QT0lOVEVSIGlmICFBUk1fVU5XSU5EICYmICFTMzkwICYmICFNSUNST0JMQVpFCiAJc2VsZWN0IEtBTExTWU1TCiAJc2VsZWN0IEdFTkVSSUNfVFJBQ0VSCiAJc2VsZWN0IENPTlRFWFRfU1dJVENIX1RSQUNFUgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwppbmRleCA3YWE0MGY4Li42OTU3YWEyIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwpAQCAtODUwLDI5ICs4NTAsMjEgQEAKIAkJX19ibGtfYWRkX3RyYWNlKGJ0LCAwLCAwLCAwLCBCTEtfVEFfUExVRywgMCwgMCwgTlVMTCk7CiB9CiAKLXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfdW5wbHVnX2lvKHZvaWQgKmlnbm9yZSwgc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCitzdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3VucGx1Zyh2b2lkICppZ25vcmUsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgZGVwdGgsIGJvb2wgZXhwbGljaXQpCiB7CiAJc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7CiAKIAlpZiAoYnQpIHsKLQkJdW5zaWduZWQgaW50IHBkdSA9IHEtPnJxLmNvdW50W1JFQURdICsgcS0+cnEuY291bnRbV1JJVEVdOwotCQlfX2JlNjQgcnBkdSA9IGNwdV90b19iZTY0KHBkdSk7CisJCV9fYmU2NCBycGR1ID0gY3B1X3RvX2JlNjQoZGVwdGgpOworCQl1MzIgd2hhdDsKIAotCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIDAsIDAsIEJMS19UQV9VTlBMVUdfSU8sIDAsCi0JCQkJc2l6ZW9mKHJwZHUpLCAmcnBkdSk7Ci0JfQotfQorCQlpZiAoZXhwbGljaXQpCisJCQl3aGF0ID0gQkxLX1RBX1VOUExVR19JTzsKKwkJZWxzZQorCQkJd2hhdCA9IEJMS19UQV9VTlBMVUdfVElNRVI7CiAKLXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfdW5wbHVnX3RpbWVyKHZvaWQgKmlnbm9yZSwgc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCi17Ci0Jc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7Ci0KLQlpZiAoYnQpIHsKLQkJdW5zaWduZWQgaW50IHBkdSA9IHEtPnJxLmNvdW50W1JFQURdICsgcS0+cnEuY291bnRbV1JJVEVdOwotCQlfX2JlNjQgcnBkdSA9IGNwdV90b19iZTY0KHBkdSk7Ci0KLQkJX19ibGtfYWRkX3RyYWNlKGJ0LCAwLCAwLCAwLCBCTEtfVEFfVU5QTFVHX1RJTUVSLCAwLAotCQkJCXNpemVvZihycGR1KSwgJnJwZHUpOworCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIDAsIDAsIHdoYXQsIDAsIHNpemVvZihycGR1KSwgJnJwZHUpOwogCX0KIH0KIApAQCAtMTAxNSw5ICsxMDA3LDcgQEAKIAlXQVJOX09OKHJldCk7CiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcGx1ZyhibGtfYWRkX3RyYWNlX3BsdWcsIE5VTEwpOwogCVdBUk5fT04ocmV0KTsKLQlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWdfdGltZXIoYmxrX2FkZF90cmFjZV91bnBsdWdfdGltZXIsIE5VTEwpOwotCVdBUk5fT04ocmV0KTsKLQlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWdfaW8oYmxrX2FkZF90cmFjZV91bnBsdWdfaW8sIE5VTEwpOworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3VucGx1ZyhibGtfYWRkX3RyYWNlX3VucGx1ZywgTlVMTCk7CiAJV0FSTl9PTihyZXQpOwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3NwbGl0KGJsa19hZGRfdHJhY2Vfc3BsaXQsIE5VTEwpOwogCVdBUk5fT04ocmV0KTsKQEAgLTEwMzIsOCArMTAyMiw3IEBACiAJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZW1hcChibGtfYWRkX3RyYWNlX3JxX3JlbWFwLCBOVUxMKTsKIAl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19yZW1hcChibGtfYWRkX3RyYWNlX2Jpb19yZW1hcCwgTlVMTCk7CiAJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19zcGxpdChibGtfYWRkX3RyYWNlX3NwbGl0LCBOVUxMKTsKLQl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3VucGx1Z19pbyhibGtfYWRkX3RyYWNlX3VucGx1Z19pbywgTlVMTCk7Ci0JdW5yZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWdfdGltZXIoYmxrX2FkZF90cmFjZV91bnBsdWdfdGltZXIsIE5VTEwpOworCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfdW5wbHVnKGJsa19hZGRfdHJhY2VfdW5wbHVnLCBOVUxMKTsKIAl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3BsdWcoYmxrX2FkZF90cmFjZV9wbHVnLCBOVUxMKTsKIAl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3NsZWVwcnEoYmxrX2FkZF90cmFjZV9zbGVlcHJxLCBOVUxMKTsKIAl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2dldHJxKGJsa19hZGRfdHJhY2VfZ2V0cnEsIE5VTEwpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jIGIva2VybmVsL3RyYWNlL2Z0cmFjZS5jCmluZGV4IGMwNzVmNGUuLmVlMjRmYTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9mdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKQEAgLTEyNjgsNyArMTI2OCw3IEBACiAJCXAtPmZsYWdzID0gMEw7CiAKIAkJLyoKLQkJICogRG8gdGhlIGluaXRpYWwgcmVjb3JkIGNvbnZlcnRpb24gZnJvbSBtY291bnQganVtcAorCQkgKiBEbyB0aGUgaW5pdGlhbCByZWNvcmQgY29udmVyc2lvbiBmcm9tIG1jb3VudCBqdW1wCiAJCSAqIHRvIHRoZSBOT1AgaW5zdHJ1Y3Rpb25zLgogCQkgKi8KIAkJaWYgKCFmdHJhY2VfY29kZV9kaXNhYmxlKG1vZCwgcCkpIHsKQEAgLTM0MjUsNyArMzQyNSw3IEBACiAJYXRvbWljX3NldCgmdC0+dHJhY2luZ19ncmFwaF9wYXVzZSwgMCk7CiAJYXRvbWljX3NldCgmdC0+dHJhY2Vfb3ZlcnJ1biwgMCk7CiAJdC0+ZnRyYWNlX3RpbWVzdGFtcCA9IDA7Ci0JLyogbWFrZSBjdXJyX3JldF9zdGFjayB2aXNhYmxlIGJlZm9yZSB3ZSBhZGQgdGhlIHJldF9zdGFjayAqLworCS8qIG1ha2UgY3Vycl9yZXRfc3RhY2sgdmlzaWJsZSBiZWZvcmUgd2UgYWRkIHRoZSByZXRfc3RhY2sgKi8KIAlzbXBfd21iKCk7CiAJdC0+cmV0X3N0YWNrID0gcmV0X3N0YWNrOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwppbmRleCBkOWM4YmNhLi4wZWY3YjRiIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYworKysgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwpAQCAtMTQ3OCw3ICsxNDc4LDcgQEAKIAlyZXR1cm4gbG9jYWxfcmVhZCgmYnBhZ2UtPmVudHJpZXMpICYgUkJfV1JJVEVfTUFTSzsKIH0KIAotLyogU2l6ZSBpcyBkZXRlcm1pbmVkIGJ5IHdoYXQgaGFzIGJlZW4gY29tbWl0ZWQgKi8KKy8qIFNpemUgaXMgZGV0ZXJtaW5lZCBieSB3aGF0IGhhcyBiZWVuIGNvbW1pdHRlZCAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCByYl9wYWdlX3NpemUoc3RydWN0IGJ1ZmZlcl9wYWdlICpicGFnZSkKIHsKIAlyZXR1cm4gcmJfcGFnZV9jb21taXQoYnBhZ2UpOwpAQCAtMjkzMiw3ICsyOTMyLDcgQEAKIAkvKgogCSAqIGNwdV9idWZmZXItPnBhZ2VzIGp1c3QgbmVlZHMgdG8gcG9pbnQgdG8gdGhlIGJ1ZmZlciwgaXQKIAkgKiAgaGFzIG5vIHNwZWNpZmljIGJ1ZmZlciBwYWdlIHRvIHBvaW50IHRvLiBMZXRzIG1vdmUgaXQgb3V0Ci0JICogIG9mIG91ciB3YXkgc28gd2UgZG9uJ3QgYWNjaWRlbnRseSBzd2FwIGl0LgorCSAqICBvZiBvdXIgd2F5IHNvIHdlIGRvbid0IGFjY2lkZW50YWxseSBzd2FwIGl0LgogCSAqLwogCWNwdV9idWZmZXItPnBhZ2VzID0gcmVhZGVyLT5saXN0LnByZXY7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKaW5kZXggOTU0MWMyNy4uMWNiNDliZSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKQEAgLTExMTAsNiArMTExMCw3IEBACiAKIAllbnRyeS0+cHJlZW1wdF9jb3VudAkJPSBwYyAmIDB4ZmY7CiAJZW50cnktPnBpZAkJCT0gKHRzaykgPyB0c2stPnBpZCA6IDA7CisJZW50cnktPnBhZGRpbmcJCQk9IDA7CiAJZW50cnktPmZsYWdzID0KICNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVAogCQkoaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncykgPyBUUkFDRV9GTEFHX0lSUVNfT0ZGIDogMCkgfApAQCAtMzIzOSw3ICszMjQwLDcgQEAKIAkJdHJhY2Vfc2VxX2luaXQoJml0ZXItPnNlcSk7CiAKIAkvKgotCSAqIElmIHRoZXJlIHdhcyBub3RoaW5nIHRvIHNlbmQgdG8gdXNlciwgaW5zcGl0ZSBvZiBjb25zdW1pbmcgdHJhY2UKKwkgKiBJZiB0aGVyZSB3YXMgbm90aGluZyB0byBzZW5kIHRvIHVzZXIsIGluIHNwaXRlIG9mIGNvbnN1bWluZyB0cmFjZQogCSAqIGVudHJpZXMsIGdvIGJhY2sgdG8gd2FpdCBmb3IgbW9yZSBlbnRyaWVzLgogCSAqLwogCWlmIChzcmV0ID09IC1FQlVTWSkKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9jbG9jay5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2Nsb2NrLmMKaW5kZXggNjg1YTY3ZC4uNjMwMjc0NyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2Nsb2NrLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2Nsb2NrLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIH0KIAogLyoKLSAqIHRyYWNlX2Nsb2NrKCk6ICdpbmJldHdlZW4nIHRyYWNlIGNsb2NrLiBOb3QgY29tcGxldGVseSBzZXJpYWxpemVkLAorICogdHJhY2VfY2xvY2soKTogJ2JldHdlZW4nIHRyYWNlIGNsb2NrLiBOb3QgY29tcGxldGVseSBzZXJpYWxpemVkLAogICogYnV0IG5vdCBjb21wbGV0ZWx5IGluY29ycmVjdCB3aGVuIGNyb3NzaW5nIENQVXMgZWl0aGVyLgogICoKICAqIFRoaXMgaXMgYmFzZWQgb24gY3B1X2Nsb2NrKCksIHdoaWNoIHdpbGwgYWxsb3cgYXQgbW9zdCB+MSBqaWZmeSBvZgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2VudHJpZXMuaCBiL2tlcm5lbC90cmFjZS90cmFjZV9lbnRyaWVzLmgKaW5kZXggMTUxNmNiMy4uZTMyNzQ0YyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2VudHJpZXMuaAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZW50cmllcy5oCkBAIC0yNyw3ICsyNyw3IEBACiAgKgkgIGluIHRoZSBzdHJ1Y3R1cmUuCiAgKgogICogICAqIGZvciBzdHJ1Y3R1cmVzIHdpdGhpbiBzdHJ1Y3R1cmVzLCB0aGUgZm9ybWF0IG9mIHRoZSBpbnRlcm5hbAotICoJc3RydWN0dXJlIGlzIGxheWVkIG91dC4gVGhpcyBhbGxvd3MgdGhlIGludGVybmFsIHN0cnVjdHVyZQorICoJc3RydWN0dXJlIGlzIGxhaWQgb3V0LiBUaGlzIGFsbG93cyB0aGUgaW50ZXJuYWwgc3RydWN0dXJlCiAgKgl0byBiZSBkZWNpcGhlcmVkIGZvciB0aGUgZm9ybWF0IGZpbGUuIEFsdGhvdWdoIHRoZXNlIG1hY3JvcwogICoJbWF5IGJlY29tZSBvdXQgb2Ygc3luYyB3aXRoIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUsIHRoZXkKICAqCXdpbGwgY3JlYXRlIGEgY29tcGlsZSBlcnJvciBpZiBpdCBoYXBwZW5zLiBTaW5jZSB0aGUKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwppbmRleCBlODhmNzRmLi4yZmUxMTAzIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCkBAIC0xMTYsNiArMTE2LDcgQEAKIAlfX2NvbW1vbl9maWVsZCh1bnNpZ25lZCBjaGFyLCBmbGFncyk7CiAJX19jb21tb25fZmllbGQodW5zaWduZWQgY2hhciwgcHJlZW1wdF9jb3VudCk7CiAJX19jb21tb25fZmllbGQoaW50LCBwaWQpOworCV9fY29tbW9uX2ZpZWxkKGludCwgcGFkZGluZyk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jCmluZGV4IDc2YjA1OTguLjk2MmNkYjIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMKQEAgLTkwNSw3ICs5MDUsNyBAQAogICoKICAqIHJldHVybnMgMSBpZgogICogIC0gd2UgYXJlIGluc2lkZSBpcnEgY29kZQotICogIC0gd2UganVzdCBleHRlcmVkIGlycSBjb2RlCisgKiAgLSB3ZSBqdXN0IGVudGVyZWQgaXJxIGNvZGUKICAqCiAgKiByZXR1bm5zIDAgaWYKICAqICAtIGZ1bmNncmFwaC1pbnRlcnJ1cHRzIG9wdGlvbiBpcyBzZXQKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jCmluZGV4IDkyYjZlMWUuLmE0OTY5YjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYwpAQCAtODAsNyArODAsNyBAQAogICogc2tpcCB0aGUgbGF0ZW5jeSBpZiB0aGUgc2VxdWVuY2UgaGFzIGNoYW5nZWQgLSBzb21lIG90aGVyIHNlY3Rpb24KICAqIGRpZCBhIG1heGltdW0gYW5kIGNvdWxkIGRpc3R1cmIgb3VyIG1lYXN1cmVtZW50IHdpdGggc2VyaWFsIGNvbnNvbGUKICAqIHByaW50b3V0cywgZXRjLiBUcnVseSBjb2luY2lkaW5nIG1heGltdW0gbGF0ZW5jaWVzIHNob3VsZCBiZSByYXJlCi0gKiBhbmQgd2hhdCBoYXBwZW5zIHRvZ2V0aGVyIGhhcHBlbnMgc2VwYXJhdGVseSBhcyB3ZWxsLCBzbyB0aGlzIGRvZXNudAorICogYW5kIHdoYXQgaGFwcGVucyB0b2dldGhlciBoYXBwZW5zIHNlcGFyYXRlbHkgYXMgd2VsbCwgc28gdGhpcyBkb2Vzbid0CiAgKiBkZWNyZWFzZSB0aGUgdmFsaWRpdHkgb2YgdGhlIG1heGltdW0gZm91bmQ6CiAgKi8KIHN0YXRpYyBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcAl1bnNpZ25lZCBsb25nIG1heF9zZXF1ZW5jZTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYwppbmRleCA4NDM1YjQzLi4zNWQ1NWEzIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jCkBAIC0xODM5LDcgKzE4MzksNyBAQAogCWtmcmVlKHRwLT5jYWxsLnByaW50X2ZtdCk7CiB9CiAKLS8qIE1ha2UgYSBkZWJ1Z2ZzIGludGVyZmFjZSBmb3IgY29udHJvbGluZyBwcm9iZSBwb2ludHMgKi8KKy8qIE1ha2UgYSBkZWJ1Z2ZzIGludGVyZmFjZSBmb3IgY29udHJvbGxpbmcgcHJvYmUgcG9pbnRzICovCiBzdGF0aWMgX19pbml0IGludCBpbml0X2twcm9iZV90cmFjZSh2b2lkKQogewogCXN0cnVjdCBkZW50cnkgKmRfdHJhY2VyOwpkaWZmIC0tZ2l0IGEva2VybmVsL3VzZXItcmV0dXJuLW5vdGlmaWVyLmMgYi9rZXJuZWwvdXNlci1yZXR1cm4tbm90aWZpZXIuYwppbmRleCBlYjI3ZmQzLi45MmNiNzA2IDEwMDY0NAotLS0gYS9rZXJuZWwvdXNlci1yZXR1cm4tbm90aWZpZXIuYworKysgYi9rZXJuZWwvdXNlci1yZXR1cm4tbm90aWZpZXIuYwpAQCAtMjAsNyArMjAsNyBAQAogCiAvKgogICogUmVtb3ZlcyBhIHJlZ2lzdGVyZWQgdXNlciByZXR1cm4gbm90aWZpZXIuICBNdXN0IGJlIGNhbGxlZCBmcm9tIGF0b21pYwotICogY29udGV4dCwgYW5kIGZyb20gdGhlIHNhbWUgY3B1IHJlZ2lzdHJhdGlvbiBvY2N1cmVkIGluLgorICogY29udGV4dCwgYW5kIGZyb20gdGhlIHNhbWUgY3B1IHJlZ2lzdHJhdGlvbiBvY2N1cnJlZCBpbi4KICAqLwogdm9pZCB1c2VyX3JldHVybl9ub3RpZmllcl91bnJlZ2lzdGVyKHN0cnVjdCB1c2VyX3JldHVybl9ub3RpZmllciAqdXJuKQogewpkaWZmIC0tZ2l0IGEva2VybmVsL3dhaXQuYyBiL2tlcm5lbC93YWl0LmMKaW5kZXggYjAzMTBlYi4uZjQ1ZWE4ZCAxMDA2NDQKLS0tIGEva2VybmVsL3dhaXQuYworKysgYi9rZXJuZWwvd2FpdC5jCkBAIC0xNDIsNyArMTQyLDcgQEAKICAqIHdva2VuIHVwIHRocm91Z2ggdGhlIHF1ZXVlLgogICoKICAqIFRoaXMgcHJldmVudHMgd2FpdGVyIHN0YXJ2YXRpb24gd2hlcmUgYW4gZXhjbHVzaXZlIHdhaXRlcgotICogYWJvcnRzIGFuZCBpcyB3b2tlbiB1cCBjb25jdXJyZW50bHkgYW5kIG5vb25lIHdha2VzIHVwCisgKiBhYm9ydHMgYW5kIGlzIHdva2VuIHVwIGNvbmN1cnJlbnRseSBhbmQgbm8gb25lIHdha2VzIHVwCiAgKiB0aGUgbmV4dCB3YWl0ZXIuCiAgKi8KIHZvaWQgYWJvcnRfZXhjbHVzaXZlX3dhaXQod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIHdhaXRfcXVldWVfdCAqd2FpdCwKZGlmZiAtLWdpdCBhL2tlcm5lbC93YXRjaGRvZy5jIGIva2VybmVsL3dhdGNoZG9nLmMKaW5kZXggMTQwZGNlNy4uMTQ3MzNkNCAxMDA2NDQKLS0tIGEva2VybmVsL3dhdGNoZG9nLmMKKysrIGIva2VybmVsL3dhdGNoZG9nLmMKQEAgLTQzMCw5ICs0MzAsMTIgQEAKIAkJcCA9IGt0aHJlYWRfY3JlYXRlKHdhdGNoZG9nLCAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWNwdSwgIndhdGNoZG9nLyVkIiwgY3B1KTsKIAkJaWYgKElTX0VSUihwKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJzb2Z0bG9ja3VwIHdhdGNoZG9nIGZvciAlaSBmYWlsZWRcbiIsIGNwdSk7Ci0JCQlpZiAoIWVycikKKwkJCWlmICghZXJyKSB7CiAJCQkJLyogaWYgaGFyZGxvY2t1cCBoYXNuJ3QgYWxyZWFkeSBzZXQgdGhpcyAqLwogCQkJCWVyciA9IFBUUl9FUlIocCk7CisJCQkJLyogYW5kIGRpc2FibGUgdGhlIHBlcmYgZXZlbnQgKi8KKwkJCQl3YXRjaGRvZ19ubWlfZGlzYWJsZShjcHUpOworCQkJfQogCQkJZ290byBvdXQ7CiAJCX0KIAkJa3RocmVhZF9iaW5kKHAsIGNwdSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvd29ya3F1ZXVlLmMgYi9rZXJuZWwvd29ya3F1ZXVlLmMKaW5kZXggMDRlZjgzMC4uZTMzNzhlOCAxMDA2NDQKLS0tIGEva2VybmVsL3dvcmtxdWV1ZS5jCisrKyBiL2tlcm5lbC93b3JrcXVldWUuYwpAQCAtMTI5MSw4ICsxMjkxLDE0IEBACiAJCQlyZXR1cm4gdHJ1ZTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZnY3dxLT5sb2NrKTsKIAotCQkvKiBDUFUgaGFzIGNvbWUgdXAgaW5iZXR3ZWVuLCByZXRyeSBtaWdyYXRpb24gKi8KKwkJLyoKKwkJICogV2UndmUgcmFjZWQgd2l0aCBDUFUgaG90W3VuXXBsdWcuICBHaXZlIGl0IGEgYnJlYXRoZXIKKwkJICogYW5kIHJldHJ5IG1pZ3JhdGlvbi4gIGNvbmRfcmVzY2hlZCgpIGlzIHJlcXVpcmVkIGhlcmU7CisJCSAqIG90aGVyd2lzZSwgd2UgbWlnaHQgZGVhZGxvY2sgYWdhaW5zdCBjcHVfc3RvcCB0cnlpbmcgdG8KKwkJICogYnJpbmcgZG93biB0aGUgQ1BVIG9uIG5vbi1wcmVlbXB0aXZlIGtlcm5lbC4KKwkJICovCiAJCWNwdV9yZWxheCgpOworCQljb25kX3Jlc2NoZWQoKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2xpYi9iaXRtYXAuYyBiL2xpYi9iaXRtYXAuYwppbmRleCA3NDFmYWU5Li45MWUwY2NmIDEwMDY0NAotLS0gYS9saWIvYml0bWFwLmMKKysrIGIvbGliL2JpdG1hcC5jCkBAIC04MzAsNyArODMwLDcgQEAKICAqICBAb3JpZyAoaS5lLiBiaXRzIDMsIDUsIDcgYW5kIDkpIHdlcmUgYWxzbyBzZXQuCiAgKgogICogIFdoZW4gYml0IDExIGlzIHNldCBpbiBAb3JpZywgaXQgbWVhbnMgdHVybiBvbiB0aGUgYml0IGluCi0gKiAgQGRzdCBjb3JyZXNwb25kaW5nIHRvIHdoYXRldmVyIGlzIHRoZSB0d2VsdGggYml0IHRoYXQgaXMKKyAqICBAZHN0IGNvcnJlc3BvbmRpbmcgdG8gd2hhdGV2ZXIgaXMgdGhlIHR3ZWxmdGggYml0IHRoYXQgaXMKICAqICB0dXJuZWQgb24gaW4gQHJlbG1hcC4gIEluIHRoZSBhYm92ZSBleGFtcGxlLCB0aGVyZSB3ZXJlCiAgKiAgb25seSB0ZW4gYml0cyB0dXJuZWQgb24gaW4gQHJlbG1hcCAoMzAuLjM5KSwgc28gdGhhdCBiaXQKICAqICAxMSB3YXMgc2V0IGluIEBvcmlnIGhhZCBubyBhZmZlY3Qgb24gQGRzdC4KZGlmZiAtLWdpdCBhL2xpYi9idHJlZS5jIGIvbGliL2J0cmVlLmMKaW5kZXggYzljNmYwMy4uMmEzNDM5MiAxMDA2NDQKLS0tIGEvbGliL2J0cmVlLmMKKysrIGIvbGliL2J0cmVlLmMKQEAgLTExLDcgKzExLDcgQEAKICAqIHNlZSBodHRwOi8vcHJvZ3JhbW1pbmcua2lja3MtYXNzLm5ldC9rZXJuZWwtcGF0Y2hlcy92bWFfbG9va3VwL2J0cmVlLnBhdGNoCiAgKgogICogQSByZWxhdGl2ZWx5IHNpbXBsZSBCK1RyZWUgaW1wbGVtZW50YXRpb24uICBJIGhhdmUgd3JpdHRlbiBpdCBhcyBhIGxlYXJuaW5nCi0gKiBleGNlcmNpc2UgdG8gdW5kZXJzdGFuZCBob3cgQitUcmVlcyB3b3JrLiAgVHVybmVkIG91dCB0byBiZSB1c2VmdWwgYXMgd2VsbC4KKyAqIGV4ZXJjaXNlIHRvIHVuZGVyc3RhbmQgaG93IEIrVHJlZXMgd29yay4gIFR1cm5lZCBvdXQgdG8gYmUgdXNlZnVsIGFzIHdlbGwuCiAgKgogICogQitUcmVlcyBjYW4gYmUgdXNlZCBzaW1pbGFyIHRvIExpbnV4IHJhZGl4IHRyZWVzICh3aGljaCBkb24ndCBoYXZlIGFueXRoaW5nCiAgKiBpbiBjb21tb24gd2l0aCB0ZXh0Ym9vayByYWRpeCB0cmVlcywgYmV3YXJlKS4gIFByZXJlcXVpc2l0ZSBmb3IgdGhlbSB3b3JraW5nCkBAIC01NDEsNyArNTQxLDcgQEAKIAlpbnQgaSwgbm9fbGVmdCwgbm9fcmlnaHQ7CiAKIAlpZiAoZmlsbCA9PSAwKSB7Ci0JCS8qIEJlY2F1c2Ugd2UgZG9uJ3Qgc3RlYWwgZW50cmllcyBmcm9tIGEgbmVpZ2JvdXIsIHRoaXMgY2FzZQorCQkvKiBCZWNhdXNlIHdlIGRvbid0IHN0ZWFsIGVudHJpZXMgZnJvbSBhIG5laWdoYm91ciwgdGhpcyBjYXNlCiAJCSAqIGNhbiBoYXBwZW4uICBQYXJlbnQgbm9kZSBjb250YWlucyBhIHNpbmdsZSBjaGlsZCwgdGhpcwogCQkgKiBub2RlLCBzbyBtZXJnaW5nIHdpdGggYSBzaWJsaW5nIG5ldmVyIGhhcHBlbnMuCiAJCSAqLwpkaWZmIC0tZ2l0IGEvbGliL2RlY29tcHJlc3NfdW54ei5jIGIvbGliL2RlY29tcHJlc3NfdW54ei5jCmluZGV4IGNlY2QyM2QuLjlmMzRlYjUgMTAwNjQ0Ci0tLSBhL2xpYi9kZWNvbXByZXNzX3VueHouYworKysgYi9saWIvZGVjb21wcmVzc191bnh6LmMKQEAgLTgzLDcgKzgzLDcgQEAKICAqICAgIHNhZmV0eV9tYXJnaW4gPSAxMjggKyB1bmNvbXByZXNzZWRfc2l6ZSAqIDggLyAzMjc2OCArIDY1NTM2CiAgKiAgICAgICAgICAgICAgICAgID0gMTI4ICsgKHVuY29tcHJlc3NlZF9zaXplID4+IDEyKSArIDY1NTM2CiAgKgotICogRm9yIGNvbXBhcmlzaW9uLCBhY2NvcmRpbmcgdG8gYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYywgdGhlCisgKiBGb3IgY29tcGFyaXNvbiwgYWNjb3JkaW5nIHRvIGFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMsIHRoZQogICogZXF1aXZhbGVudCBmb3JtdWxhIGZvciBEZWZsYXRlIGlzIHRoaXM6CiAgKgogICogICAgc2FmZXR5X21hcmdpbiA9IDE4ICsgKHVuY29tcHJlc3NlZF9zaXplID4+IDEyKSArIDMyNzY4CmRpZmYgLS1naXQgYS9saWIvZmxleF9hcnJheS5jIGIvbGliL2ZsZXhfYXJyYXkuYwppbmRleCBjMGVhNDBiLi44NTRiNTdiIDEwMDY0NAotLS0gYS9saWIvZmxleF9hcnJheS5jCisrKyBiL2xpYi9mbGV4X2FycmF5LmMKQEAgLTIzMiwxMCArMjMyLDEwIEBACiAKIC8qKgogICogZmxleF9hcnJheV9wcmVhbGxvYyAtIGd1YXJhbnRlZSB0aGF0IGFycmF5IHNwYWNlIGV4aXN0cwotICogQGZhOgkJdGhlIGZsZXggYXJyYXkgZm9yIHdoaWNoIHRvIHByZWFsbG9jYXRlIHBhcnRzCi0gKiBAc3RhcnQ6CWluZGV4IG9mIGZpcnN0IGFycmF5IGVsZW1lbnQgZm9yIHdoaWNoIHNwYWNlIGlzIGFsbG9jYXRlZAotICogQGVuZDoJaW5kZXggb2YgbGFzdCAoaW5jbHVzaXZlKSBlbGVtZW50IGZvciB3aGljaCBzcGFjZSBpcyBhbGxvY2F0ZWQKLSAqIEBmbGFnczoJcGFnZSBhbGxvY2F0aW9uIGZsYWdzCisgKiBAZmE6CQkJdGhlIGZsZXggYXJyYXkgZm9yIHdoaWNoIHRvIHByZWFsbG9jYXRlIHBhcnRzCisgKiBAc3RhcnQ6CQlpbmRleCBvZiBmaXJzdCBhcnJheSBlbGVtZW50IGZvciB3aGljaCBzcGFjZSBpcyBhbGxvY2F0ZWQKKyAqIEBucl9lbGVtZW50czoJbnVtYmVyIG9mIGVsZW1lbnRzIGZvciB3aGljaCBzcGFjZSBpcyBhbGxvY2F0ZWQKKyAqIEBmbGFnczoJCXBhZ2UgYWxsb2NhdGlvbiBmbGFncwogICoKICAqIFRoaXMgd2lsbCBndWFyYW50ZWUgdGhhdCBubyBmdXR1cmUgY2FsbHMgdG8gZmxleF9hcnJheV9wdXQoKQogICogd2lsbCBhbGxvY2F0ZSBtZW1vcnkuICBJdCBjYW4gYmUgdXNlZCBpZiB5b3UgYXJlIGV4cGVjdGluZyB0bwpAQCAtMjQ1LDE0ICsyNDUsMjQgQEAKICAqIExvY2tpbmcgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgY2FsbGVyLgogICovCiBpbnQgZmxleF9hcnJheV9wcmVhbGxvYyhzdHJ1Y3QgZmxleF9hcnJheSAqZmEsIHVuc2lnbmVkIGludCBzdGFydCwKLQkJCXVuc2lnbmVkIGludCBlbmQsIGdmcF90IGZsYWdzKQorCQkJdW5zaWduZWQgaW50IG5yX2VsZW1lbnRzLCBnZnBfdCBmbGFncykKIHsKIAlpbnQgc3RhcnRfcGFydDsKIAlpbnQgZW5kX3BhcnQ7CiAJaW50IHBhcnRfbnI7CisJdW5zaWduZWQgaW50IGVuZDsKIAlzdHJ1Y3QgZmxleF9hcnJheV9wYXJ0ICpwYXJ0OwogCi0JaWYgKHN0YXJ0ID49IGZhLT50b3RhbF9ucl9lbGVtZW50cyB8fCBlbmQgPj0gZmEtPnRvdGFsX25yX2VsZW1lbnRzKQorCWlmICghc3RhcnQgJiYgIW5yX2VsZW1lbnRzKQorCQlyZXR1cm4gMDsKKwlpZiAoc3RhcnQgPj0gZmEtPnRvdGFsX25yX2VsZW1lbnRzKQorCQlyZXR1cm4gLUVOT1NQQzsKKwlpZiAoIW5yX2VsZW1lbnRzKQorCQlyZXR1cm4gMDsKKworCWVuZCA9IHN0YXJ0ICsgbnJfZWxlbWVudHMgLSAxOworCisJaWYgKGVuZCA+PSBmYS0+dG90YWxfbnJfZWxlbWVudHMpCiAJCXJldHVybiAtRU5PU1BDOwogCWlmIChlbGVtZW50c19maXRfaW5fYmFzZShmYSkpCiAJCXJldHVybiAwOwpAQCAtMzQzLDYgKzM1Myw4IEBACiAJaW50IHBhcnRfbnI7CiAJaW50IHJldCA9IDA7CiAKKwlpZiAoIWZhLT50b3RhbF9ucl9lbGVtZW50cykKKwkJcmV0dXJuIDA7CiAJaWYgKGVsZW1lbnRzX2ZpdF9pbl9iYXNlKGZhKSkKIAkJcmV0dXJuIHJldDsKIAlmb3IgKHBhcnRfbnIgPSAwOyBwYXJ0X25yIDwgRkxFWF9BUlJBWV9OUl9CQVNFX1BUUlM7IHBhcnRfbnIrKykgewpkaWZmIC0tZ2l0IGEvbGliL2tzdHJ0b3guYyBiL2xpYi9rc3RydG94LmMKaW5kZXggMDU2NzJlOC4uYTIzNWYzYyAxMDA2NDQKLS0tIGEvbGliL2tzdHJ0b3guYworKysgYi9saWIva3N0cnRveC5jCkBAIC00OSwxMiArNDksOSBAQAogCQkJdmFsID0gKnMgLSAnMCc7CiAJCWVsc2UgaWYgKCdhJyA8PSBfdG9sb3dlcigqcykgJiYgX3RvbG93ZXIoKnMpIDw9ICdmJykKIAkJCXZhbCA9IF90b2xvd2VyKCpzKSAtICdhJyArIDEwOwotCQllbHNlIGlmICgqcyA9PSAnXG4nKSB7Ci0JCQlpZiAoKihzICsgMSkgPT0gJ1wwJykKLQkJCQlicmVhazsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfSBlbHNlCisJCWVsc2UgaWYgKCpzID09ICdcbicgJiYgKihzICsgMSkgPT0gJ1wwJykKKwkJCWJyZWFrOworCQllbHNlCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlpZiAodmFsID49IGJhc2UpCmRpZmYgLS1naXQgYS9saWIvcGFyc2VyLmMgYi9saWIvcGFyc2VyLmMKaW5kZXggNmU4OWVjYS4uZGNiYWFlZiAxMDA2NDQKLS0tIGEvbGliL3BhcnNlci5jCisrKyBiL2xpYi9wYXJzZXIuYwpAQCAtMTMsNyArMTMsNyBAQAogCiAvKioKICAqIG1hdGNoX29uZTogLSBEZXRlcm1pbmVzIGlmIGEgc3RyaW5nIG1hdGNoZXMgYSBzaW1wbGUgcGF0dGVybgotICogQHM6IHRoZSBzdHJpbmcgdG8gZXhhbWluZSBmb3IgcHJlc2Vuc2Ugb2YgdGhlIHBhdHRlcm4KKyAqIEBzOiB0aGUgc3RyaW5nIHRvIGV4YW1pbmUgZm9yIHByZXNlbmNlIG9mIHRoZSBwYXR0ZXJuCiAgKiBAcDogdGhlIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXR0ZXJuCiAgKiBAYXJnczogYXJyYXkgb2YgJU1BWF9PUFRfQVJHUyAmc3Vic3RyaW5nX3QgZWxlbWVudHMuIFVzZWQgdG8gcmV0dXJuIG1hdGNoCiAgKiBsb2NhdGlvbnMuCmRpZmYgLS1naXQgYS9saWIvdGVzdC1rc3RydG94LmMgYi9saWIvdGVzdC1rc3RydG94LmMKaW5kZXggMzI1YzJmOS4uZDU1NzY5ZCAxMDA2NDQKLS0tIGEvbGliL3Rlc3Qta3N0cnRveC5jCisrKyBiL2xpYi90ZXN0LWtzdHJ0b3guYwpAQCAtMzE1LDEyICszMTUsMTIgQEAKIAkJeyI2NTUzNyIsCTEwLAk2NTUzN30sCiAJCXsiMjE0NzQ4MzY0NiIsCTEwLAkyMTQ3NDgzNjQ2fSwKIAkJeyIyMTQ3NDgzNjQ3IiwJMTAsCTIxNDc0ODM2NDd9LAotCQl7IjIxNDc0ODM2NDgiLAkxMCwJMjE0NzQ4MzY0OH0sCi0JCXsiMjE0NzQ4MzY0OSIsCTEwLAkyMTQ3NDgzNjQ5fSwKLQkJeyI0Mjk0OTY3Mjk0IiwJMTAsCTQyOTQ5NjcyOTR9LAotCQl7IjQyOTQ5NjcyOTUiLAkxMCwJNDI5NDk2NzI5NX0sCi0JCXsiNDI5NDk2NzI5NiIsCTEwLAk0Mjk0OTY3Mjk2fSwKLQkJeyI0Mjk0OTY3Mjk3IiwJMTAsCTQyOTQ5NjcyOTd9LAorCQl7IjIxNDc0ODM2NDgiLAkxMCwJMjE0NzQ4MzY0OFVMTH0sCisJCXsiMjE0NzQ4MzY0OSIsCTEwLAkyMTQ3NDgzNjQ5VUxMfSwKKwkJeyI0Mjk0OTY3Mjk0IiwJMTAsCTQyOTQ5NjcyOTRVTEx9LAorCQl7IjQyOTQ5NjcyOTUiLAkxMCwJNDI5NDk2NzI5NVVMTH0sCisJCXsiNDI5NDk2NzI5NiIsCTEwLAk0Mjk0OTY3Mjk2VUxMfSwKKwkJeyI0Mjk0OTY3Mjk3IiwJMTAsCTQyOTQ5NjcyOTdVTEx9LAogCQl7IjkyMjMzNzIwMzY4NTQ3NzU4MDYiLAkxMCwJOTIyMzM3MjAzNjg1NDc3NTgwNlVMTH0sCiAJCXsiOTIyMzM3MjAzNjg1NDc3NTgwNyIsCTEwLAk5MjIzMzcyMDM2ODU0Nzc1ODA3VUxMfSwKIAkJeyI5MjIzMzcyMDM2ODU0Nzc1ODA4IiwJMTAsCTkyMjMzNzIwMzY4NTQ3NzU4MDhVTEx9LApAQCAtMzY5LDEyICszNjksMTIgQEAKIAkJeyI2NTUzNyIsCTEwLAk2NTUzN30sCiAJCXsiMjE0NzQ4MzY0NiIsCTEwLAkyMTQ3NDgzNjQ2fSwKIAkJeyIyMTQ3NDgzNjQ3IiwJMTAsCTIxNDc0ODM2NDd9LAotCQl7IjIxNDc0ODM2NDgiLAkxMCwJMjE0NzQ4MzY0OH0sCi0JCXsiMjE0NzQ4MzY0OSIsCTEwLAkyMTQ3NDgzNjQ5fSwKLQkJeyI0Mjk0OTY3Mjk0IiwJMTAsCTQyOTQ5NjcyOTR9LAotCQl7IjQyOTQ5NjcyOTUiLAkxMCwJNDI5NDk2NzI5NX0sCi0JCXsiNDI5NDk2NzI5NiIsCTEwLAk0Mjk0OTY3Mjk2fSwKLQkJeyI0Mjk0OTY3Mjk3IiwJMTAsCTQyOTQ5NjcyOTd9LAorCQl7IjIxNDc0ODM2NDgiLAkxMCwJMjE0NzQ4MzY0OExMfSwKKwkJeyIyMTQ3NDgzNjQ5IiwJMTAsCTIxNDc0ODM2NDlMTH0sCisJCXsiNDI5NDk2NzI5NCIsCTEwLAk0Mjk0OTY3Mjk0TEx9LAorCQl7IjQyOTQ5NjcyOTUiLAkxMCwJNDI5NDk2NzI5NUxMfSwKKwkJeyI0Mjk0OTY3Mjk2IiwJMTAsCTQyOTQ5NjcyOTZMTH0sCisJCXsiNDI5NDk2NzI5NyIsCTEwLAk0Mjk0OTY3Mjk3TEx9LAogCQl7IjkyMjMzNzIwMzY4NTQ3NzU4MDYiLAkxMCwJOTIyMzM3MjAzNjg1NDc3NTgwNkxMfSwKIAkJeyI5MjIzMzcyMDM2ODU0Nzc1ODA3IiwJMTAsCTkyMjMzNzIwMzY4NTQ3NzU4MDdMTH0sCiAJfTsKQEAgLTQxOCwxMCArNDE4LDEwIEBACiAJCXsiNjU1MzciLAkxMCwJNjU1Mzd9LAogCQl7IjIxNDc0ODM2NDYiLAkxMCwJMjE0NzQ4MzY0Nn0sCiAJCXsiMjE0NzQ4MzY0NyIsCTEwLAkyMTQ3NDgzNjQ3fSwKLQkJeyIyMTQ3NDgzNjQ4IiwJMTAsCTIxNDc0ODM2NDh9LAotCQl7IjIxNDc0ODM2NDkiLAkxMCwJMjE0NzQ4MzY0OX0sCi0JCXsiNDI5NDk2NzI5NCIsCTEwLAk0Mjk0OTY3Mjk0fSwKLQkJeyI0Mjk0OTY3Mjk1IiwJMTAsCTQyOTQ5NjcyOTV9LAorCQl7IjIxNDc0ODM2NDgiLAkxMCwJMjE0NzQ4MzY0OFV9LAorCQl7IjIxNDc0ODM2NDkiLAkxMCwJMjE0NzQ4MzY0OVV9LAorCQl7IjQyOTQ5NjcyOTQiLAkxMCwJNDI5NDk2NzI5NFV9LAorCQl7IjQyOTQ5NjcyOTUiLAkxMCwJNDI5NDk2NzI5NVV9LAogCX07CiAJVEVTVF9PSyhrc3RydG91MzIsIHUzMiwgIiV1IiwgdGVzdF91MzJfb2spOwogfQpkaWZmIC0tZ2l0IGEvbGliL3RpbWVycXVldWUuYyBiL2xpYi90aW1lcnF1ZXVlLmMKaW5kZXggZTNhMTA1MC4uMTkxMTc2YSAxMDA2NDQKLS0tIGEvbGliL3RpbWVycXVldWUuYworKysgYi9saWIvdGltZXJxdWV1ZS5jCkBAIC01LDcgKzUsNyBAQAogICogIFVzZXMgcmJ0cmVlcyBmb3IgcXVpY2sgbGlzdCBhZGRzIGFuZCBleHBpcmF0aW9uLgogICoKICAqICBOT1RFOiBBbGwgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgbmVlZCB0byBiZSBzZXJpYWxpemVkCi0gKiAgdG8gYXZvaWQgcmFjZXMuIE5vIGxvY2tpbmcgaXMgZG9uZSBieSB0aGlzIGxpYmFyeSBjb2RlLgorICogIHRvIGF2b2lkIHJhY2VzLiBObyBsb2NraW5nIGlzIGRvbmUgYnkgdGhpcyBsaWJyYXJ5IGNvZGUuCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL2xpYi92c3ByaW50Zi5jIGIvbGliL3ZzcHJpbnRmLmMKaW5kZXggYmMwYWM2Yi4uZGZkNjAxOSAxMDA2NDQKLS0tIGEvbGliL3ZzcHJpbnRmLmMKKysrIGIvbGliL3ZzcHJpbnRmLmMKQEAgLTc5Nyw3ICs3OTcsNyBAQAogCXJldHVybiBzdHJpbmcoYnVmLCBlbmQsIHV1aWQsIHNwZWMpOwogfQogCi1pbnQga3B0cl9yZXN0cmljdCA9IDE7CitpbnQga3B0cl9yZXN0cmljdCBfX3JlYWRfbW9zdGx5OwogCiAvKgogICogU2hvdyBhICclcCcgdGhpbmcuICBBIGtlcm5lbCBleHRlbnNpb24gaXMgdGhhdCB0aGUgJyVwJyBpcyBmb2xsb3dlZApkaWZmIC0tZ2l0IGEvbGliL3h6L3h6X2RlY19sem1hMi5jIGIvbGliL3h6L3h6X2RlY19sem1hMi5jCmluZGV4IGVhNWZhNGYuLmE2Y2RjOTYgMTAwNjQ0Ci0tLSBhL2xpYi94ei94el9kZWNfbHptYTIuYworKysgYi9saWIveHoveHpfZGVjX2x6bWEyLmMKQEAgLTk2OSw2ICs5NjksOSBAQAogCQkJICovCiAJCQl0bXAgPSBiLT5pbltiLT5pbl9wb3MrK107CiAKKwkJCWlmICh0bXAgPT0gMHgwMCkKKwkJCQlyZXR1cm4gWFpfU1RSRUFNX0VORDsKKwogCQkJaWYgKHRtcCA+PSAweEUwIHx8IHRtcCA9PSAweDAxKSB7CiAJCQkJcy0+bHptYTIubmVlZF9wcm9wcyA9IHRydWU7CiAJCQkJcy0+bHptYTIubmVlZF9kaWN0X3Jlc2V0ID0gZmFsc2U7CkBAIC0xMDAxLDkgKzEwMDQsNiBAQAogCQkJCQkJbHptYV9yZXNldChzKTsKIAkJCQl9CiAJCQl9IGVsc2UgewotCQkJCWlmICh0bXAgPT0gMHgwMCkKLQkJCQkJcmV0dXJuIFhaX1NUUkVBTV9FTkQ7Ci0KIAkJCQlpZiAodG1wID4gMHgwMikKIAkJCQkJcmV0dXJuIFhaX0RBVEFfRVJST1I7CiAKZGlmZiAtLWdpdCBhL21tL2JhY2tpbmctZGV2LmMgYi9tbS9iYWNraW5nLWRldi5jCmluZGV4IDBkOWEwMzYuLmJlZmM4NzUgMTAwNjQ0Ci0tLSBhL21tL2JhY2tpbmctZGV2LmMKKysrIGIvbW0vYmFja2luZy1kZXYuYwpAQCAtNzg3LDcgKzc4Nyw3IEBACiAgKiBqaWZmaWVzIGZvciBlaXRoZXIgYSBCREkgdG8gZXhpdCBjb25nZXN0aW9uIG9mIHRoZSBnaXZlbiBAc3luYyBxdWV1ZQogICogb3IgYSB3cml0ZSB0byBjb21wbGV0ZS4KICAqCi0gKiBJbiB0aGUgYWJzZW5zZSBvZiB6b25lIGNvbmdlc3Rpb24sIGNvbmRfcmVzY2hlZCgpIGlzIGNhbGxlZCB0byB5aWVsZAorICogSW4gdGhlIGFic2VuY2Ugb2Ygem9uZSBjb25nZXN0aW9uLCBjb25kX3Jlc2NoZWQoKSBpcyBjYWxsZWQgdG8geWllbGQKICAqIHRoZSBwcm9jZXNzb3IgaWYgbmVjZXNzYXJ5IGJ1dCBvdGhlcndpc2UgZG9lcyBub3Qgc2xlZXAuCiAgKgogICogVGhlIHJldHVybiB2YWx1ZSBpcyAwIGlmIHRoZSBzbGVlcCBpcyBmb3IgdGhlIGZ1bGwgdGltZW91dC4gT3RoZXJ3aXNlLApkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggMGE2MTllMC4uODMzMjZhZCAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYworKysgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0yNDQsMjUgKzI0NCwyOSBAQAogCQkJCXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLAogCQkJCWVudW0gdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZyBmbGFnKQogewotCWlmICh0ZXN0X2JpdChmbGFnLCAmdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MpKQotCQlyZXR1cm4gc3ByaW50ZihidWYsICJbeWVzXSBub1xuIik7Ci0JZWxzZQotCQlyZXR1cm4gc3ByaW50ZihidWYsICJ5ZXMgW25vXVxuIik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCisJCSAgICAgICAhIXRlc3RfYml0KGZsYWcsICZ0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncykpOwogfQorCiBzdGF0aWMgc3NpemVfdCBzaW5nbGVfZmxhZ19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJCQkgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAogCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwKIAkJCQkgZW51bSB0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFnIGZsYWcpCiB7Ci0JaWYgKCFtZW1jbXAoInllcyIsIGJ1ZiwKLQkJICAgIG1pbihzaXplb2YoInllcyIpLTEsIGNvdW50KSkpIHsKLQkJc2V0X2JpdChmbGFnLCAmdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MpOwotCX0gZWxzZSBpZiAoIW1lbWNtcCgibm8iLCBidWYsCi0JCQkgICBtaW4oc2l6ZW9mKCJubyIpLTEsIGNvdW50KSkpIHsKLQkJY2xlYXJfYml0KGZsYWcsICZ0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncyk7Ci0JfSBlbHNlCisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwlpbnQgcmV0OworCisJcmV0ID0ga3N0cnRvdWwoYnVmLCAxMCwgJnZhbHVlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAodmFsdWUgPiAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmICh2YWx1ZSkKKwkJc2V0X2JpdChmbGFnLCAmdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MpOworCWVsc2UKKwkJY2xlYXJfYml0KGZsYWcsICZ0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncyk7CisKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTY4MCw4ICs2ODQsMTEgQEAKIAkJCXJldHVybiBWTV9GQVVMVF9PT007CiAJCXBhZ2UgPSBhbGxvY19odWdlcGFnZV92bWEodHJhbnNwYXJlbnRfaHVnZXBhZ2VfZGVmcmFnKHZtYSksCiAJCQkJCSAgdm1hLCBoYWRkciwgbnVtYV9ub2RlX2lkKCksIDApOwotCQlpZiAodW5saWtlbHkoIXBhZ2UpKQorCQlpZiAodW5saWtlbHkoIXBhZ2UpKSB7CisJCQljb3VudF92bV9ldmVudChUSFBfRkFVTFRfRkFMTEJBQ0spOwogCQkJZ290byBvdXQ7CisJCX0KKwkJY291bnRfdm1fZXZlbnQoVEhQX0ZBVUxUX0FMTE9DKTsKIAkJaWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfbmV3cGFnZV9jaGFyZ2UocGFnZSwgbW0sIEdGUF9LRVJORUwpKSkgewogCQkJcHV0X3BhZ2UocGFnZSk7CiAJCQlnb3RvIG91dDsKQEAgLTkwOSwxMSArOTE2LDEzIEBACiAJCW5ld19wYWdlID0gTlVMTDsKIAogCWlmICh1bmxpa2VseSghbmV3X3BhZ2UpKSB7CisJCWNvdW50X3ZtX2V2ZW50KFRIUF9GQVVMVF9GQUxMQkFDSyk7CiAJCXJldCA9IGRvX2h1Z2VfcG1kX3dwX3BhZ2VfZmFsbGJhY2sobW0sIHZtYSwgYWRkcmVzcywKIAkJCQkJCSAgIHBtZCwgb3JpZ19wbWQsIHBhZ2UsIGhhZGRyKTsKIAkJcHV0X3BhZ2UocGFnZSk7CiAJCWdvdG8gb3V0OwogCX0KKwljb3VudF92bV9ldmVudChUSFBfRkFVTFRfQUxMT0MpOwogCiAJaWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfbmV3cGFnZV9jaGFyZ2UobmV3X3BhZ2UsIG1tLCBHRlBfS0VSTkVMKSkpIHsKIAkJcHV0X3BhZ2UobmV3X3BhZ2UpOwpAQCAtMTM5MCw2ICsxMzk5LDcgQEAKIAogCUJVR19PTighUGFnZVN3YXBCYWNrZWQocGFnZSkpOwogCV9fc3BsaXRfaHVnZV9wYWdlKHBhZ2UsIGFub25fdm1hKTsKKwljb3VudF92bV9ldmVudChUSFBfU1BMSVQpOwogCiAJQlVHX09OKFBhZ2VDb21wb3VuZChwYWdlKSk7CiBvdXRfdW5sb2NrOgpAQCAtMTM5OCw2ICsxNDA4LDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCisjZGVmaW5lIFZNX05PX1RIUCAoVk1fU1BFQ0lBTHxWTV9JTlNFUlRQQUdFfFZNX01JWEVETUFQfFZNX1NBT3wgXAorCQkgICBWTV9IVUdFVExCfFZNX1NIQVJFRHxWTV9NQVlTSEFSRSkKKwogaW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCSAgICAgdW5zaWduZWQgbG9uZyAqdm1fZmxhZ3MsIGludCBhZHZpY2UpCiB7CkBAIC0xNDA2LDExICsxNDE5LDcgQEAKIAkJLyoKIAkJICogQmUgc29tZXdoYXQgb3Zlci1wcm90ZWN0aXZlIGxpa2UgS1NNIGZvciBub3chCiAJCSAqLwotCQlpZiAoKnZtX2ZsYWdzICYgKFZNX0hVR0VQQUdFIHwKLQkJCQkgVk1fU0hBUkVEICAgfCBWTV9NQVlTSEFSRSAgIHwKLQkJCQkgVk1fUEZOTUFQICAgfCBWTV9JTyAgICAgIHwgVk1fRE9OVEVYUEFORCB8Ci0JCQkJIFZNX1JFU0VSVkVEIHwgVk1fSFVHRVRMQiB8IFZNX0lOU0VSVFBBR0UgfAotCQkJCSBWTV9NSVhFRE1BUCB8IFZNX1NBTykpCisJCWlmICgqdm1fZmxhZ3MgJiAoVk1fSFVHRVBBR0UgfCBWTV9OT19USFApKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCSp2bV9mbGFncyAmPSB+Vk1fTk9IVUdFUEFHRTsKIAkJKnZtX2ZsYWdzIHw9IFZNX0hVR0VQQUdFOwpAQCAtMTQyNiwxMSArMTQzNSw3IEBACiAJCS8qCiAJCSAqIEJlIHNvbWV3aGF0IG92ZXItcHJvdGVjdGl2ZSBsaWtlIEtTTSBmb3Igbm93IQogCQkgKi8KLQkJaWYgKCp2bV9mbGFncyAmIChWTV9OT0hVR0VQQUdFIHwKLQkJCQkgVk1fU0hBUkVEICAgfCBWTV9NQVlTSEFSRSAgIHwKLQkJCQkgVk1fUEZOTUFQICAgfCBWTV9JTyAgICAgIHwgVk1fRE9OVEVYUEFORCB8Ci0JCQkJIFZNX1JFU0VSVkVEIHwgVk1fSFVHRVRMQiB8IFZNX0lOU0VSVFBBR0UgfAotCQkJCSBWTV9NSVhFRE1BUCB8IFZNX1NBTykpCisJCWlmICgqdm1fZmxhZ3MgJiAoVk1fTk9IVUdFUEFHRSB8IFZNX05PX1RIUCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJKnZtX2ZsYWdzICY9IH5WTV9IVUdFUEFHRTsKIAkJKnZtX2ZsYWdzIHw9IFZNX05PSFVHRVBBR0U7CkBAIC0xNTY0LDEwICsxNTY5LDE0IEBACiAJCSAqIHBhZ2UgZmF1bHQgaWYgbmVlZGVkLgogCQkgKi8KIAkJcmV0dXJuIDA7Ci0JaWYgKHZtYS0+dm1fZmlsZSB8fCB2bWEtPnZtX29wcykKKwlpZiAodm1hLT52bV9vcHMpCiAJCS8qIGtodWdlcGFnZWQgbm90IHlldCB3b3JraW5nIG9uIGZpbGUgb3Igc3BlY2lhbCBtYXBwaW5ncyAqLwogCQlyZXR1cm4gMDsKLQlWTV9CVUdfT04oaXNfbGluZWFyX3Bmbl9tYXBwaW5nKHZtYSkgfHwgaXNfcGZuX21hcHBpbmcodm1hKSk7CisJLyoKKwkgKiBJZiBpc19wZm5fbWFwcGluZygpIGlzIHRydWUgaXNfbGVhcm5fcGZuX21hcHBpbmcoKSBtdXN0IGJlCisJICogdHJ1ZSB0b28sIHZlcmlmeSBpdCBoZXJlLgorCSAqLworCVZNX0JVR19PTihpc19saW5lYXJfcGZuX21hcHBpbmcodm1hKSB8fCB2bWEtPnZtX2ZsYWdzICYgVk1fTk9fVEhQKTsKIAloc3RhcnQgPSAodm1hLT52bV9zdGFydCArIH5IUEFHRV9QTURfTUFTSykgJiBIUEFHRV9QTURfTUFTSzsKIAloZW5kID0gdm1hLT52bV9lbmQgJiBIUEFHRV9QTURfTUFTSzsKIAlpZiAoaHN0YXJ0IDwgaGVuZCkKQEAgLTE3ODQsOSArMTc5MywxMSBAQAogCQkJCSAgICAgIG5vZGUsIF9fR0ZQX09USEVSX05PREUpOwogCWlmICh1bmxpa2VseSghbmV3X3BhZ2UpKSB7CiAJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJCWNvdW50X3ZtX2V2ZW50KFRIUF9DT0xMQVBTRV9BTExPQ19GQUlMRUQpOwogCQkqaHBhZ2UgPSBFUlJfUFRSKC1FTk9NRU0pOwogCQlyZXR1cm47CiAJfQorCWNvdW50X3ZtX2V2ZW50KFRIUF9DT0xMQVBTRV9BTExPQyk7CiAJaWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfbmV3cGFnZV9jaGFyZ2UobmV3X3BhZ2UsIG1tLCBHRlBfS0VSTkVMKSkpIHsKIAkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAkJcHV0X3BhZ2UobmV3X3BhZ2UpOwpAQCAtMTgxNiwxMiArMTgyNywxNSBAQAogCSAgICAodm1hLT52bV9mbGFncyAmIFZNX05PSFVHRVBBR0UpKQogCQlnb3RvIG91dDsKIAotCS8qIFZNX1BGTk1BUCB2bWFzIG1heSBoYXZlIHZtX29wcyBudWxsIGJ1dCB2bV9maWxlIHNldCAqLwotCWlmICghdm1hLT5hbm9uX3ZtYSB8fCB2bWEtPnZtX29wcyB8fCB2bWEtPnZtX2ZpbGUpCisJaWYgKCF2bWEtPmFub25fdm1hIHx8IHZtYS0+dm1fb3BzKQogCQlnb3RvIG91dDsKIAlpZiAoaXNfdm1hX3RlbXBvcmFyeV9zdGFjayh2bWEpKQogCQlnb3RvIG91dDsKLQlWTV9CVUdfT04oaXNfbGluZWFyX3Bmbl9tYXBwaW5nKHZtYSkgfHwgaXNfcGZuX21hcHBpbmcodm1hKSk7CisJLyoKKwkgKiBJZiBpc19wZm5fbWFwcGluZygpIGlzIHRydWUgaXNfbGVhcm5fcGZuX21hcHBpbmcoKSBtdXN0IGJlCisJICogdHJ1ZSB0b28sIHZlcmlmeSBpdCBoZXJlLgorCSAqLworCVZNX0JVR19PTihpc19saW5lYXJfcGZuX21hcHBpbmcodm1hKSB8fCB2bWEtPnZtX2ZsYWdzICYgVk1fTk9fVEhQKTsKIAogCXBnZCA9IHBnZF9vZmZzZXQobW0sIGFkZHJlc3MpOwogCWlmICghcGdkX3ByZXNlbnQoKnBnZCkpCkBAIC0yMDU0LDEzICsyMDY4LDE2IEBACiAJCQlwcm9ncmVzcysrOwogCQkJY29udGludWU7CiAJCX0KLQkJLyogVk1fUEZOTUFQIHZtYXMgbWF5IGhhdmUgdm1fb3BzIG51bGwgYnV0IHZtX2ZpbGUgc2V0ICovCi0JCWlmICghdm1hLT5hbm9uX3ZtYSB8fCB2bWEtPnZtX29wcyB8fCB2bWEtPnZtX2ZpbGUpCisJCWlmICghdm1hLT5hbm9uX3ZtYSB8fCB2bWEtPnZtX29wcykKIAkJCWdvdG8gc2tpcDsKIAkJaWYgKGlzX3ZtYV90ZW1wb3Jhcnlfc3RhY2sodm1hKSkKIAkJCWdvdG8gc2tpcDsKLQotCQlWTV9CVUdfT04oaXNfbGluZWFyX3Bmbl9tYXBwaW5nKHZtYSkgfHwgaXNfcGZuX21hcHBpbmcodm1hKSk7CisJCS8qCisJCSAqIElmIGlzX3Bmbl9tYXBwaW5nKCkgaXMgdHJ1ZSBpc19sZWFybl9wZm5fbWFwcGluZygpCisJCSAqIG11c3QgYmUgdHJ1ZSB0b28sIHZlcmlmeSBpdCBoZXJlLgorCQkgKi8KKwkJVk1fQlVHX09OKGlzX2xpbmVhcl9wZm5fbWFwcGluZyh2bWEpIHx8CisJCQkgIHZtYS0+dm1fZmxhZ3MgJiBWTV9OT19USFApOwogCiAJCWhzdGFydCA9ICh2bWEtPnZtX3N0YXJ0ICsgfkhQQUdFX1BNRF9NQVNLKSAmIEhQQUdFX1BNRF9NQVNLOwogCQloZW5kID0gdm1hLT52bV9lbmQgJiBIUEFHRV9QTURfTUFTSzsKQEAgLTIxNTEsOCArMjE2OCwxMSBAQAogI2lmbmRlZiBDT05GSUdfTlVNQQogCQlpZiAoISpocGFnZSkgewogCQkJKmhwYWdlID0gYWxsb2NfaHVnZXBhZ2Uoa2h1Z2VwYWdlZF9kZWZyYWcoKSk7Ci0JCQlpZiAodW5saWtlbHkoISpocGFnZSkpCisJCQlpZiAodW5saWtlbHkoISpocGFnZSkpIHsKKwkJCQljb3VudF92bV9ldmVudChUSFBfQ09MTEFQU0VfQUxMT0NfRkFJTEVEKTsKIAkJCQlicmVhazsKKwkJCX0KKwkJCWNvdW50X3ZtX2V2ZW50KFRIUF9DT0xMQVBTRV9BTExPQyk7CiAJCX0KICNlbHNlCiAJCWlmIChJU19FUlIoKmhwYWdlKSkKQEAgLTIxOTIsOCArMjIxMiwxMSBAQAogCiAJZG8gewogCQlocGFnZSA9IGFsbG9jX2h1Z2VwYWdlKGtodWdlcGFnZWRfZGVmcmFnKCkpOwotCQlpZiAoIWhwYWdlKQorCQlpZiAoIWhwYWdlKSB7CisJCQljb3VudF92bV9ldmVudChUSFBfQ09MTEFQU0VfQUxMT0NfRkFJTEVEKTsKIAkJCWtodWdlcGFnZWRfYWxsb2Nfc2xlZXAoKTsKKwkJfSBlbHNlCisJCQljb3VudF92bV9ldmVudChUSFBfQ09MTEFQU0VfQUxMT0MpOwogCX0gd2hpbGUgKHVubGlrZWx5KCFocGFnZSkgJiYKIAkJIGxpa2VseShraHVnZXBhZ2VkX2VuYWJsZWQoKSkpOwogCXJldHVybiBocGFnZTsKQEAgLTIyMTAsOCArMjIzMywxMSBAQAogCXdoaWxlIChsaWtlbHkoa2h1Z2VwYWdlZF9lbmFibGVkKCkpKSB7CiAjaWZuZGVmIENPTkZJR19OVU1BCiAJCWhwYWdlID0ga2h1Z2VwYWdlZF9hbGxvY19odWdlcGFnZSgpOwotCQlpZiAodW5saWtlbHkoIWhwYWdlKSkKKwkJaWYgKHVubGlrZWx5KCFocGFnZSkpIHsKKwkJCWNvdW50X3ZtX2V2ZW50KFRIUF9DT0xMQVBTRV9BTExPQ19GQUlMRUQpOwogCQkJYnJlYWs7CisJCX0KKwkJY291bnRfdm1fZXZlbnQoVEhQX0NPTExBUFNFX0FMTE9DKTsKICNlbHNlCiAJCWlmIChJU19FUlIoaHBhZ2UpKSB7CiAJCQlraHVnZXBhZ2VkX2FsbG9jX3NsZWVwKCk7CmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggMDZkZTVhYS4uOGVlM2JkOCAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCisrKyBiL21tL2h1Z2V0bGIuYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJCWlmIChyZy0+ZnJvbSA+IHQpCiAJCQlyZXR1cm4gY2hnOwogCi0JCS8qIFdlIG92ZXJsYXAgd2l0aCB0aGlzIGFyZWEsIGlmIGl0IGV4dGVuZHMgZnV0aGVyIHRoYW4KKwkJLyogV2Ugb3ZlcmxhcCB3aXRoIHRoaXMgYXJlYSwgaWYgaXQgZXh0ZW5kcyBmdXJ0aGVyIHRoYW4KIAkJICogdXMgdGhlbiB3ZSBtdXN0IGV4dGVuZCBvdXJzZWx2ZXMuICBBY2NvdW50IGZvciBpdHMKIAkJICogZXhpc3RpbmcgcmVzZXJ2YXRpb24uICovCiAJCWlmIChyZy0+dG8gPiB0KSB7CkBAIC04NDIsNyArODQyLDcgQEAKIH0KIAogLyoKLSAqIEluY3JlYXNlIHRoZSBodWdldGxiIHBvb2wgc3VjaCB0aGF0IGl0IGNhbiBhY2NvbW9kYXRlIGEgcmVzZXJ2YXRpb24KKyAqIEluY3JlYXNlIHRoZSBodWdldGxiIHBvb2wgc3VjaCB0aGF0IGl0IGNhbiBhY2NvbW1vZGF0ZSBhIHJlc2VydmF0aW9uCiAgKiBvZiBzaXplICdkZWx0YScuCiAgKi8KIHN0YXRpYyBpbnQgZ2F0aGVyX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCwgaW50IGRlbHRhKQpAQCAtODkwLDcgKzg5MCw3IEBACiAKIAkvKgogCSAqIFRoZSBzdXJwbHVzX2xpc3Qgbm93IGNvbnRhaW5zIF9hdF9sZWFzdF8gdGhlIG51bWJlciBvZiBleHRyYSBwYWdlcwotCSAqIG5lZWRlZCB0byBhY2NvbW9kYXRlIHRoZSByZXNlcnZhdGlvbi4gIEFkZCB0aGUgYXBwcm9wcmlhdGUgbnVtYmVyCisJICogbmVlZGVkIHRvIGFjY29tbW9kYXRlIHRoZSByZXNlcnZhdGlvbi4gIEFkZCB0aGUgYXBwcm9wcmlhdGUgbnVtYmVyCiAJICogb2YgcGFnZXMgdG8gdGhlIGh1Z2V0bGIgcG9vbCBhbmQgZnJlZSB0aGUgZXh0cmFzIGJhY2sgdG8gdGhlIGJ1ZGR5CiAJICogYWxsb2NhdG9yLiAgQ29tbWl0IHRoZSBlbnRpcmUgcmVzZXJ2YXRpb24gaGVyZSB0byBwcmV2ZW50IGFub3RoZXIKIAkgKiBwcm9jZXNzIGZyb20gc3RlYWxpbmcgdGhlIHBhZ2VzIGFzIHRoZXkgYXJlIGFkZGVkIHRvIHRoZSBwb29sIGJ1dApAQCAtMjA0Myw3ICsyMDQzLDcgQEAKIAkgKiBUaGlzIG5ldyBWTUEgc2hvdWxkIHNoYXJlIGl0cyBzaWJsaW5ncyByZXNlcnZhdGlvbiBtYXAgaWYgcHJlc2VudC4KIAkgKiBUaGUgVk1BIHdpbGwgb25seSBldmVyIGhhdmUgYSB2YWxpZCByZXNlcnZhdGlvbiBtYXAgcG9pbnRlciB3aGVyZQogCSAqIGl0IGlzIGJlaW5nIGNvcGllZCBmb3IgYW5vdGhlciBzdGlsbCBleGlzdGluZyBWTUEuICBBcyB0aGF0IFZNQQotCSAqIGhhcyBhIHJlZmVyZW5jZSB0byB0aGUgcmVzZXJ2YXRpb24gbWFwIGl0IGNhbm5vdCBkaXNzYXBwZWFyIHVudGlsCisJICogaGFzIGEgcmVmZXJlbmNlIHRvIHRoZSByZXNlcnZhdGlvbiBtYXAgaXQgY2Fubm90IGRpc2FwcGVhciB1bnRpbAogCSAqIGFmdGVyIHRoaXMgb3BlbiBjYWxsIGNvbXBsZXRlcy4gIEl0IGlzIHRoZXJlZm9yZSBzYWZlIHRvIHRha2UgYQogCSAqIG5ldyByZWZlcmVuY2UgaGVyZSB3aXRob3V0IGFkZGl0aW9uYWwgbG9ja2luZy4KIAkgKi8KQEAgLTI0OTAsNyArMjQ5MCw3IEBACiAJLyoKIAkgKiBDdXJyZW50bHksIHdlIGFyZSBmb3JjZWQgdG8ga2lsbCB0aGUgcHJvY2VzcyBpbiB0aGUgZXZlbnQgdGhlCiAJICogb3JpZ2luYWwgbWFwcGVyIGhhcyB1bm1hcHBlZCBwYWdlcyBmcm9tIHRoZSBjaGlsZCBkdWUgdG8gYSBmYWlsZWQKLQkgKiBDT1cuIFdhcm4gdGhhdCBzdWNoIGEgc2l0dWF0aW9uIGhhcyBvY2N1cmVkIGFzIGl0IG1heSBub3QgYmUgb2J2aW91cworCSAqIENPVy4gV2FybiB0aGF0IHN1Y2ggYSBzaXR1YXRpb24gaGFzIG9jY3VycmVkIGFzIGl0IG1heSBub3QgYmUgb2J2aW91cwogCSAqLwogCWlmIChpc192bWFfcmVzdl9zZXQodm1hLCBIUEFHRV9SRVNWX1VOTUFQUEVEKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCmRpZmYgLS1naXQgYS9tbS9od3BvaXNvbi1pbmplY3QuYyBiL21tL2h3cG9pc29uLWluamVjdC5jCmluZGV4IDA5NDhmMTAuLmM3ZmM3ZmQgMTAwNjQ0Ci0tLSBhL21tL2h3cG9pc29uLWluamVjdC5jCisrKyBiL21tL2h3cG9pc29uLWluamVjdC5jCkBAIC0xLDQgKzEsNCBAQAotLyogSW5qZWN0IGEgaHdwb2lzb24gbWVtb3J5IGZhaWx1cmUgb24gYSBhcmJpdGFyeSBwZm4gKi8KKy8qIEluamVjdCBhIGh3cG9pc29uIG1lbW9yeSBmYWlsdXJlIG9uIGEgYXJiaXRyYXJ5IHBmbiAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDM0MzhkZDQuLjlkMGNlZDggMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKKysrIGIvbW0vaW50ZXJuYWwuaApAQCAtMTYyLDcgKzE2Miw3IEBACiB9CiAKIC8qCi0gKiBJdGVyYXRvciBvdmVyIGFsbCBzdWJwYWdlcyB3aXRoaW5nIHRoZSBtYXhpbWFsbHkgYWxpZ25lZCBnaWdhbnRpYworICogSXRlcmF0b3Igb3ZlciBhbGwgc3VicGFnZXMgd2l0aGluIHRoZSBtYXhpbWFsbHkgYWxpZ25lZCBnaWdhbnRpYwogICogcGFnZSAnYmFzZScuICBIYW5kbGUgYW55IGRpc2NvbnRpZ3VpdHkgaW4gdGhlIG1lbV9tYXAuCiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKm1lbV9tYXBfbmV4dChzdHJ1Y3QgcGFnZSAqaXRlciwKZGlmZiAtLWdpdCBhL21tL2ttZW1sZWFrLmMgYi9tbS9rbWVtbGVhay5jCmluZGV4IDg0MjI1ZjMuLmMxZDU4NjcgMTAwNjQ0Ci0tLSBhL21tL2ttZW1sZWFrLmMKKysrIGIvbW0va21lbWxlYWsuYwpAQCAtMjY1LDcgKzI2NSw3IEBACiB9IHdoaWxlICgwKQogCiAvKgotICogTWFjcm8gaW52b2tlZCB3aGVuIGEgc2VyaW91cyBrbWVtbGVhayBjb25kaXRpb24gb2NjdXJlZCBhbmQgY2Fubm90IGJlCisgKiBNYWNybyBpbnZva2VkIHdoZW4gYSBzZXJpb3VzIGttZW1sZWFrIGNvbmRpdGlvbiBvY2N1cnJlZCBhbmQgY2Fubm90IGJlCiAgKiByZWNvdmVyZWQgZnJvbS4gS21lbWxlYWsgd2lsbCBiZSBkaXNhYmxlZCBhbmQgZnVydGhlciBhbGxvY2F0aW9uL2ZyZWVpbmcKICAqIHRyYWNpbmcgbm8gbG9uZ2VyIGF2YWlsYWJsZS4KICAqLwpAQCAtMTAwNiw3ICsxMDA2LDcgQEAKIAogLyoKICAqIE1lbW9yeSBzY2FubmluZyBpcyBhIGxvbmcgcHJvY2VzcyBhbmQgaXQgbmVlZHMgdG8gYmUgaW50ZXJydXB0YWJsZS4gVGhpcwotICogZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgc3VjaCBpbnRlcnJ1cHQgY29uZGl0aW9uIG9jY3VyZWQuCisgKiBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciBzdWNoIGludGVycnVwdCBjb25kaXRpb24gb2NjdXJyZWQuCiAgKi8KIHN0YXRpYyBpbnQgc2Nhbl9zaG91bGRfc3RvcCh2b2lkKQogewpAQCAtMTczMyw3ICsxNzMzLDcgQEAKIAogCWlmIChhdG9taWNfcmVhZCgma21lbWxlYWtfZXJyb3IpKSB7CiAJCS8qCi0JCSAqIFNvbWUgZXJyb3Igb2NjdXJlZCBhbmQga21lbWxlYWsgd2FzIGRpc2FibGVkLiBUaGVyZSBpcyBhCisJCSAqIFNvbWUgZXJyb3Igb2NjdXJyZWQgYW5kIGttZW1sZWFrIHdhcyBkaXNhYmxlZC4gVGhlcmUgaXMgYQogCQkgKiBzbWFsbCBjaGFuY2UgdGhhdCBrbWVtbGVha19kaXNhYmxlKCkgd2FzIGNhbGxlZCBpbW1lZGlhdGVseQogCQkgKiBhZnRlciBzZXR0aW5nIGttZW1sZWFrX2luaXRpYWxpemVkIGFuZCB3ZSBtYXkgZW5kIHVwIHdpdGgKIAkJICogdHdvIGNsZWFuLXVwIHRocmVhZHMgYnV0IHNlcmlhbGl6ZWQgYnkgc2Nhbl9tdXRleC4KZGlmZiAtLWdpdCBhL21tL2tzbS5jIGIvbW0va3NtLmMKaW5kZXggMWJiZTc4NS4uOTQyZGZjNyAxMDA2NDQKLS0tIGEvbW0va3NtLmMKKysrIGIvbW0va3NtLmMKQEAgLTcyMCw3ICs3MjAsNyBAQAogCQlzd2FwcGVkID0gUGFnZVN3YXBDYWNoZShwYWdlKTsKIAkJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHIsIHBhZ2VfdG9fcGZuKHBhZ2UpKTsKIAkJLyoKLQkJICogT2sgdGhpcyBpcyB0cmlja3ksIHdoZW4gZ2V0X3VzZXJfcGFnZXNfZmFzdCgpIHJ1biBpdCBkb2VzbnQKKwkJICogT2sgdGhpcyBpcyB0cmlja3ksIHdoZW4gZ2V0X3VzZXJfcGFnZXNfZmFzdCgpIHJ1biBpdCBkb2Vzbid0CiAJCSAqIHRha2UgYW55IGxvY2ssIHRoZXJlZm9yZSB0aGUgY2hlY2sgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gbWFrZQogCQkgKiB3aXRoIHRoZSBwYWdlY291bnQgYWdhaW5zdCB0aGUgbWFwY291bnQgaXMgcmFjZXkgYW5kCiAJCSAqIE9fRElSRUNUIGNhbiBoYXBwZW4gcmlnaHQgYWZ0ZXIgdGhlIGNoZWNrLgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDFmMGI0NjAuLjAxMGY5MTYgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYworKysgYi9tbS9tZW1jb250cm9sLmMKQEAgLTE0NjYsNyArMTQ2Niw3IEBACiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCQkvKgotCQkJCSAqIFdlIHdhbnQgdG8gZG8gbW9yZSB0YXJnZXR0ZWQgcmVjbGFpbS4KKwkJCQkgKiBXZSB3YW50IHRvIGRvIG1vcmUgdGFyZ2V0ZWQgcmVjbGFpbS4KIAkJCQkgKiBleGNlc3MgPj4gMiBpcyBub3QgdG8gZXhjZXNzaXZlIHNvIGFzIHRvCiAJCQkJICogcmVjbGFpbSB0b28gbXVjaCwgbm9yIHRvbyBsZXNzIHRoYXQgd2Uga2VlcAogCQkJCSAqIGNvbWluZyBiYWNrIHRvIHJlY2xhaW0gZnJvbSB0aGlzIGNncm91cApAQCAtMjI2NSw3ICsyMjY1LDcgQEAKICAqIC0gY29tcG91bmRfbG9jayBpcyBoZWxkIHdoZW4gbnJfcGFnZXMgPiAxCiAgKgogICogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGRvICJjaGFyZ2UiIG5vciBjc3NfZ2V0IHRvIG5ldyBjZ3JvdXAuIEl0IHNob3VsZCBiZQotICogZG9uZSBieSBhIGNhbGxlcihfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZSB3b3VsZCBiZSB1c2VmdWxsKS4gSWYgQHVuY2hhcmdlIGlzCisgKiBkb25lIGJ5IGEgY2FsbGVyKF9fbWVtX2Nncm91cF90cnlfY2hhcmdlIHdvdWxkIGJlIHVzZWZ1bCkuIElmIEB1bmNoYXJnZSBpcwogICogdHJ1ZSwgdGhpcyBmdW5jdGlvbiBkb2VzICJ1bmNoYXJnZSIgZnJvbSBvbGQgY2dyb3VwLCBidXQgaXQgZG9lc24ndCBpZgogICogQHVuY2hhcmdlIGlzIGZhbHNlLCBzbyBhIGNhbGxlciBzaG91bGQgZG8gInVuY2hhcmdlIi4KICAqLwpAQCAtMjMxOCw3ICsyMzE4LDcgQEAKIAkgKiBXZSBjaGFyZ2VzIGFnYWluc3QgInRvIiB3aGljaCBtYXkgbm90IGhhdmUgYW55IHRhc2tzLiBUaGVuLCAidG8iCiAJICogY2FuIGJlIHVuZGVyIHJtZGlyKCkuIEJ1dCBpbiBjdXJyZW50IGltcGxlbWVudGF0aW9uLCBjYWxsZXIgb2YKIAkgKiB0aGlzIGZ1bmN0aW9uIGlzIGp1c3QgZm9yY2VfZW1wdHkoKSBhbmQgbW92ZSBjaGFyZ2UsIHNvIGl0J3MKLQkgKiBnYXJhbnRlZWQgdGhhdCAidG8iIGlzIG5ldmVyIHJlbW92ZWQuIFNvLCB3ZSBkb24ndCBjaGVjayBybWRpcgorCSAqIGd1YXJhbnRlZWQgdGhhdCAidG8iIGlzIG5ldmVyIHJlbW92ZWQuIFNvLCB3ZSBkb24ndCBjaGVjayBybWRpcgogCSAqIHN0YXR1cyBoZXJlLgogCSAqLwogCW1vdmVfdW5sb2NrX3BhZ2VfY2dyb3VwKHBjLCAmZmxhZ3MpOwpAQCAtMjY0OCw3ICsyNjQ4LDcgQEAKIAkJYmF0Y2gtPm1lbWNnID0gbWVtOwogCS8qCiAJICogZG9fYmF0Y2ggPiAwIHdoZW4gdW5tYXBwaW5nIHBhZ2VzIG9yIGlub2RlIGludmFsaWRhdGUvdHJ1bmNhdGUuCi0JICogSW4gdGhvc2UgY2FzZXMsIGFsbCBwYWdlcyBmcmVlZCBjb250aW5vdXNseSBjYW4gYmUgZXhwZWN0ZWQgdG8gYmUgaW4KKwkgKiBJbiB0aG9zZSBjYXNlcywgYWxsIHBhZ2VzIGZyZWVkIGNvbnRpbnVvdXNseSBjYW4gYmUgZXhwZWN0ZWQgdG8gYmUgaW4KIAkgKiB0aGUgc2FtZSBjZ3JvdXAgYW5kIHdlIGhhdmUgY2hhbmNlIHRvIGNvYWxlc2NlIHVuY2hhcmdlcy4KIAkgKiBCdXQgd2UgZG8gdW5jaGFyZ2Ugb25lIGJ5IG9uZSBpZiB0aGlzIGlzIGtpbGxlZCBieSBPT00oVElGX01FTURJRSkKIAkgKiBiZWNhdXNlIHdlIHdhbnQgdG8gZG8gdW5jaGFyZ2UgYXMgc29vbiBhcyBwb3NzaWJsZS4KZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jCmluZGV4IDM3ZmViOWYuLjJiOWE1ZWUgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmMKKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtMjA4LDcgKzIwOCw3IEBACiAJICogRG9uJ3QgdXNlIGZvcmNlIGhlcmUsIGl0J3MgY29udmVuaWVudCBpZiB0aGUgc2lnbmFsCiAJICogY2FuIGJlIHRlbXBvcmFyaWx5IGJsb2NrZWQuCiAJICogVGhpcyBjb3VsZCBjYXVzZSBhIGxvb3Agd2hlbiB0aGUgdXNlciBzZXRzIFNJR0JVUwotCSAqIHRvIFNJR19JR04sIGJ1dCBob3BlZnVsbHkgbm9vbmUgd2lsbCBkbyB0aGF0PworCSAqIHRvIFNJR19JR04sIGJ1dCBob3BlZnVsbHkgbm8gb25lIHdpbGwgZG8gdGhhdD8KIAkgKi8KIAlyZXQgPSBzZW5kX3NpZ19pbmZvKFNJR0JVUywgJnNpLCB0KTsgIC8qIHN5bmNocm9ub3VzPyAqLwogCWlmIChyZXQgPCAwKQpAQCAtNjM0LDcgKzYzNCw3IEBACiAJCSAqIHdoZW4gdGhlIHBhZ2UgaXMgcmVyZWFkIG9yIGRyb3BwZWQuICBJZiBhbgogCQkgKiBhcHBsaWNhdGlvbiBhc3N1bWVzIGl0IHdpbGwgYWx3YXlzIGdldCBlcnJvciBvbgogCQkgKiBmc3luYywgYnV0IGRvZXMgb3RoZXIgb3BlcmF0aW9ucyBvbiB0aGUgZmQgYmVmb3JlCi0JCSAqIGFuZCB0aGUgcGFnZSBpcyBkcm9wcGVkIGluYmV0d2VlbiB0aGVuIHRoZSBlcnJvcgorCQkgKiBhbmQgdGhlIHBhZ2UgaXMgZHJvcHBlZCBiZXR3ZWVuIHRoZW4gdGhlIGVycm9yCiAJCSAqIHdpbGwgbm90IGJlIHByb3Blcmx5IHJlcG9ydGVkLgogCQkgKgogCQkgKiBUaGlzIGNhbiBhbHJlYWR5IGhhcHBlbiBldmVuIHdpdGhvdXQgaHdwb2lzb25lZApAQCAtNzI4LDcgKzcyOCw3IEBACiAgKiBUaGUgdGFibGUgbWF0Y2hlcyB0aGVtIGluIG9yZGVyIGFuZCBjYWxscyB0aGUgcmlnaHQgaGFuZGxlci4KICAqCiAgKiBUaGlzIGlzIHF1aXRlIHRyaWNreSBiZWNhdXNlIHdlIGNhbiBhY2Nlc3MgcGFnZSBhdCBhbnkgdGltZQotICogaW4gaXRzIGxpdmUgY3ljbGUsIHNvIGFsbCBhY2Nlc3NlcyBoYXZlIHRvIGJlIGV4dHJlbWx5IGNhcmVmdWwuCisgKiBpbiBpdHMgbGl2ZSBjeWNsZSwgc28gYWxsIGFjY2Vzc2VzIGhhdmUgdG8gYmUgZXh0cmVtZWx5IGNhcmVmdWwuCiAgKgogICogVGhpcyBpcyBub3QgY29tcGxldGUuIE1vcmUgc3RhdGVzIGNvdWxkIGJlIGFkZGVkLgogICogRm9yIGFueSBtaXNzaW5nIHN0YXRlIGRvbid0IGF0dGVtcHQgcmVjb3ZlcnkuCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDlkYThjYWIuLjYxZTY2ZjAgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCisrKyBiL21tL21lbW9yeS5jCkBAIC0xMzU5LDcgKzEzNTksNyBAQAogCQkgKi8KIAkJbWFya19wYWdlX2FjY2Vzc2VkKHBhZ2UpOwogCX0KLQlpZiAoZmxhZ3MgJiBGT0xMX01MT0NLKSB7CisJaWYgKChmbGFncyAmIEZPTExfTUxPQ0spICYmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSkgewogCQkvKgogCQkgKiBUaGUgcHJlbGltaW5hcnkgbWFwcGluZyBjaGVjayBpcyBtYWlubHkgdG8gYXZvaWQgdGhlCiAJCSAqIHBvaW50bGVzcyBvdmVyaGVhZCBvZiBsb2NrX3BhZ2Ugb24gdGhlIFpFUk9fUEFHRQpAQCAtMTQxMCw2ICsxNDEwLDEyIEBACiAJcmV0dXJuIHBhZ2U7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHN0YWNrX2d1YXJkX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gc3RhY2tfZ3VhcmRfcGFnZV9zdGFydCh2bWEsIGFkZHIpIHx8CisJICAgICAgIHN0YWNrX2d1YXJkX3BhZ2VfZW5kKHZtYSwgYWRkcitQQUdFX1NJWkUpOworfQorCiAvKioKICAqIF9fZ2V0X3VzZXJfcGFnZXMoKSAtIHBpbiB1c2VyIHBhZ2VzIGluIG1lbW9yeQogICogQHRzazoJdGFza19zdHJ1Y3Qgb2YgdGFyZ2V0IHRhc2sKQEAgLTE0ODgsNyArMTQ5NCw2IEBACiAJCXZtYSA9IGZpbmRfZXh0ZW5kX3ZtYShtbSwgc3RhcnQpOwogCQlpZiAoIXZtYSAmJiBpbl9nYXRlX2FyZWEobW0sIHN0YXJ0KSkgewogCQkJdW5zaWduZWQgbG9uZyBwZyA9IHN0YXJ0ICYgUEFHRV9NQVNLOwotCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnYXRlX3ZtYSA9IGdldF9nYXRlX3ZtYShtbSk7CiAJCQlwZ2RfdCAqcGdkOwogCQkJcHVkX3QgKnB1ZDsKIAkJCXBtZF90ICpwbWQ7CkBAIC0xNTEzLDEwICsxNTE4LDExIEBACiAJCQkJcHRlX3VubWFwKHB0ZSk7CiAJCQkJcmV0dXJuIGkgPyA6IC1FRkFVTFQ7CiAJCQl9CisJCQl2bWEgPSBnZXRfZ2F0ZV92bWEobW0pOwogCQkJaWYgKHBhZ2VzKSB7CiAJCQkJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKLQkJCQlwYWdlID0gdm1fbm9ybWFsX3BhZ2UoZ2F0ZV92bWEsIHN0YXJ0LCAqcHRlKTsKKwkJCQlwYWdlID0gdm1fbm9ybWFsX3BhZ2Uodm1hLCBzdGFydCwgKnB0ZSk7CiAJCQkJaWYgKCFwYWdlKSB7CiAJCQkJCWlmICghKGd1cF9mbGFncyAmIEZPTExfRFVNUCkgJiYKIAkJCQkJICAgICBpc196ZXJvX3BmbihwdGVfcGZuKCpwdGUpKSkKQEAgLTE1MzAsMTIgKzE1MzYsNyBAQAogCQkJCWdldF9wYWdlKHBhZ2UpOwogCQkJfQogCQkJcHRlX3VubWFwKHB0ZSk7Ci0JCQlpZiAodm1hcykKLQkJCQl2bWFzW2ldID0gZ2F0ZV92bWE7Ci0JCQlpKys7Ci0JCQlzdGFydCArPSBQQUdFX1NJWkU7Ci0JCQlucl9wYWdlcy0tOwotCQkJY29udGludWU7CisJCQlnb3RvIG5leHRfcGFnZTsKIAkJfQogCiAJCWlmICghdm1hIHx8CkBAIC0xNTY1LDYgKzE1NjYsMTEgQEAKIAkJCQlpbnQgcmV0OwogCQkJCXVuc2lnbmVkIGludCBmYXVsdF9mbGFncyA9IDA7CiAKKwkJCQkvKiBGb3IgbWxvY2ssIGp1c3Qgc2tpcCB0aGUgc3RhY2sgZ3VhcmQgcGFnZS4gKi8KKwkJCQlpZiAoZm9sbF9mbGFncyAmIEZPTExfTUxPQ0spIHsKKwkJCQkJaWYgKHN0YWNrX2d1YXJkX3BhZ2Uodm1hLCBzdGFydCkpCisJCQkJCQlnb3RvIG5leHRfcGFnZTsKKwkJCQl9CiAJCQkJaWYgKGZvbGxfZmxhZ3MgJiBGT0xMX1dSSVRFKQogCQkJCQlmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX1dSSVRFOwogCQkJCWlmIChub25ibG9ja2luZykKQEAgLTE2MzEsNiArMTYzNyw3IEBACiAJCQkJZmx1c2hfYW5vbl9wYWdlKHZtYSwgcGFnZSwgc3RhcnQpOwogCQkJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCQkJfQorbmV4dF9wYWdlOgogCQkJaWYgKHZtYXMpCiAJCQkJdm1hc1tpXSA9IHZtYTsKIAkJCWkrKzsKQEAgLTMzODYsNyArMzM5Myw3IEBACiAJICogcnVuIHB0ZV9vZmZzZXRfbWFwIG9uIHRoZSBwbWQsIGlmIGFuIGh1Z2UgcG1kIGNvdWxkCiAJICogbWF0ZXJpYWxpemUgZnJvbSB1bmRlciB1cyBmcm9tIGEgZGlmZmVyZW50IHRocmVhZC4KIAkgKi8KLQlpZiAodW5saWtlbHkoX19wdGVfYWxsb2MobW0sIHZtYSwgcG1kLCBhZGRyZXNzKSkpCisJaWYgKHVubGlrZWx5KHBtZF9ub25lKCpwbWQpKSAmJiBfX3B0ZV9hbGxvYyhtbSwgdm1hLCBwbWQsIGFkZHJlc3MpKQogCQlyZXR1cm4gVk1fRkFVTFRfT09NOwogCS8qIGlmIGFuIGh1Z2UgcG1kIG1hdGVyaWFsaXplZCBmcm9tIHVuZGVyIHVzIGp1c3QgcmV0cnkgbGF0ZXIgKi8KIAlpZiAodW5saWtlbHkocG1kX3RyYW5zX2h1Z2UoKnBtZCkpKQpAQCAtMzY3OCw3ICszNjg1LDcgQEAKIAkJCSAqLwogI2lmZGVmIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVAogCQkJdm1hID0gZmluZF92bWEobW0sIGFkZHIpOwotCQkJaWYgKCF2bWEpCisJCQlpZiAoIXZtYSB8fCB2bWEtPnZtX3N0YXJ0ID4gYWRkcikKIAkJCQlicmVhazsKIAkJCWlmICh2bWEtPnZtX29wcyAmJiB2bWEtPnZtX29wcy0+YWNjZXNzKQogCQkJCXJldCA9IHZtYS0+dm1fb3BzLT5hY2Nlc3Modm1hLCBhZGRyLCBidWYsCmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwppbmRleCAzMjFmYzc0Li45Y2ExZDYwIDEwMDY0NAotLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jCisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmMKQEAgLTM3NSw3ICszNzUsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRkxBVE1FTQotCW1heF9tYXBuciA9IG1heChwYWdlX3RvX3BmbihwYWdlKSwgbWF4X21hcG5yKTsKKwltYXhfbWFwbnIgPSBtYXgocGZuLCBtYXhfbWFwbnIpOwogI2VuZGlmCiAKIAlDbGVhclBhZ2VSZXNlcnZlZChwYWdlKTsKQEAgLTcyNCw3ICs3MjQsNyBAQAogCQkJICAgICAgIHBmbik7CiAJCQlkdW1wX3BhZ2UocGFnZSk7CiAjZW5kaWYKLQkJCS8qIEJlY2FzdWUgd2UgZG9uJ3QgaGF2ZSBiaWcgem9uZS0+bG9jay4gd2Ugc2hvdWxkCisJCQkvKiBCZWNhdXNlIHdlIGRvbid0IGhhdmUgYmlnIHpvbmUtPmxvY2suIHdlIHNob3VsZAogCQkJICAgY2hlY2sgdGhpcyBhZ2FpbiBoZXJlLiAqLwogCQkJaWYgKHBhZ2VfY291bnQocGFnZSkpIHsKIAkJCQlub3RfbWFuYWdlZCsrOwpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IGIwNDA2ZDcuLjM0MTMyZjggMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYworKysgYi9tbS9taWdyYXRlLmMKQEAgLTM3NSw3ICszNzUsNyBAQAogCQkgKiByZWRvIHRoZSBhY2NvdW50aW5nIHRoYXQgY2xlYXJfcGFnZV9kaXJ0eV9mb3JfaW8gdW5kaWQsCiAJCSAqIGJ1dCB3ZSBjYW4ndCB1c2Ugc2V0X3BhZ2VfZGlydHkgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uCiAJCSAqIGlzIGFjdHVhbGx5IGEgc2lnbmFsIHRoYXQgYWxsIG9mIHRoZSBwYWdlIGhhcyBiZWNvbWUgZGlydHkuCi0JCSAqIFdoZXJhcyBvbmx5IHBhcnQgb2Ygb3VyIHBhZ2UgbWF5IGJlIGRpcnR5LgorCQkgKiBXaGVyZWFzIG9ubHkgcGFydCBvZiBvdXIgcGFnZSBtYXkgYmUgZGlydHkuCiAJCSAqLwogCQlfX3NldF9wYWdlX2RpcnR5X25vYnVmZmVycyhuZXdwYWdlKTsKICAJfQpkaWZmIC0tZ2l0IGEvbW0vbWxvY2suYyBiL21tL21sb2NrLmMKaW5kZXggMjY4OWEwOGMuLjUxNmIyYzIgMTAwNjQ0Ci0tLSBhL21tL21sb2NrLmMKKysrIGIvbW0vbWxvY2suYwpAQCAtMTM1LDEzICsxMzUsNiBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSBpbnQgc3RhY2tfZ3VhcmRfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCXJldHVybiAodm1hLT52bV9mbGFncyAmIFZNX0dST1dTRE9XTikgJiYKLQkJKHZtYS0+dm1fc3RhcnQgPT0gYWRkcikgJiYKLQkJIXZtYV9zdGFja19jb250aW51ZSh2bWEtPnZtX3ByZXYsIGFkZHIpOwotfQotCiAvKioKICAqIF9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgLSAgbWxvY2sgYSByYW5nZSBvZiBwYWdlcyBpbiB0aGUgdm1hLgogICogQHZtYTogICB0YXJnZXQgdm1hCkBAIC0xNjksNyArMTYyLDcgQEAKIAlWTV9CVUdfT04oZW5kICAgPiB2bWEtPnZtX2VuZCk7CiAJVk1fQlVHX09OKCFyd3NlbV9pc19sb2NrZWQoJm1tLT5tbWFwX3NlbSkpOwogCi0JZ3VwX2ZsYWdzID0gRk9MTF9UT1VDSDsKKwlndXBfZmxhZ3MgPSBGT0xMX1RPVUNIIHwgRk9MTF9NTE9DSzsKIAkvKgogCSAqIFdlIHdhbnQgdG8gdG91Y2ggd3JpdGFibGUgbWFwcGluZ3Mgd2l0aCBhIHdyaXRlIGZhdWx0IGluIG9yZGVyCiAJICogdG8gYnJlYWsgQ09XLCBleGNlcHQgZm9yIHNoYXJlZCBtYXBwaW5ncyBiZWNhdXNlIHRoZXNlIGRvbid0IENPVwpAQCAtMTg1LDE1ICsxNzgsNiBAQAogCWlmICh2bWEtPnZtX2ZsYWdzICYgKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMpKQogCQlndXBfZmxhZ3MgfD0gRk9MTF9GT1JDRTsKIAotCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKQotCQlndXBfZmxhZ3MgfD0gRk9MTF9NTE9DSzsKLQotCS8qIFdlIGRvbid0IHRyeSB0byBhY2Nlc3MgdGhlIGd1YXJkIHBhZ2Ugb2YgYSBzdGFjayB2bWEgKi8KLQlpZiAoc3RhY2tfZ3VhcmRfcGFnZSh2bWEsIHN0YXJ0KSkgewotCQlhZGRyICs9IFBBR0VfU0laRTsKLQkJbnJfcGFnZXMtLTsKLQl9Ci0KIAlyZXR1cm4gX19nZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBtbSwgYWRkciwgbnJfcGFnZXMsIGd1cF9mbGFncywKIAkJCQlOVUxMLCBOVUxMLCBub25ibG9ja2luZyk7CiB9CmRpZmYgLS1naXQgYS9tbS9tbWFwLmMgYi9tbS9tbWFwLmMKaW5kZXggMmVjOGViNS4uNzcyMTQwYyAxMDA2NDQKLS0tIGEvbW0vbW1hcC5jCisrKyBiL21tL21tYXAuYwpAQCAtMjU5LDcgKzI1OSw3IEBACiAJICogcmFuZG9taXplX3ZhX3NwYWNlIHRvIDIsIHdoaWNoIHdpbGwgc3RpbGwgY2F1c2UgbW0tPnN0YXJ0X2JyawogCSAqIHRvIGJlIGFyYml0cmFyaWx5IHNoaWZ0ZWQKIAkgKi8KLQlpZiAobW0tPnN0YXJ0X2JyayA+IFBBR0VfQUxJR04obW0tPmVuZF9kYXRhKSkKKwlpZiAoY3VycmVudC0+YnJrX3JhbmRvbWl6ZWQpCiAJCW1pbl9icmsgPSBtbS0+c3RhcnRfYnJrOwogCWVsc2UKIAkJbWluX2JyayA9IG1tLT5lbmRfZGF0YTsKQEAgLTE3NjcsMTAgKzE3NjcsMTMgQEAKIAkJc2l6ZSA9IGFkZHJlc3MgLSB2bWEtPnZtX3N0YXJ0OwogCQlncm93ID0gKGFkZHJlc3MgLSB2bWEtPnZtX2VuZCkgPj4gUEFHRV9TSElGVDsKIAotCQllcnJvciA9IGFjY3Rfc3RhY2tfZ3Jvd3RoKHZtYSwgc2l6ZSwgZ3Jvdyk7Ci0JCWlmICghZXJyb3IpIHsKLQkJCXZtYS0+dm1fZW5kID0gYWRkcmVzczsKLQkJCXBlcmZfZXZlbnRfbW1hcCh2bWEpOworCQllcnJvciA9IC1FTk9NRU07CisJCWlmICh2bWEtPnZtX3Bnb2ZmICsgKHNpemUgPj4gUEFHRV9TSElGVCkgPj0gdm1hLT52bV9wZ29mZikgeworCQkJZXJyb3IgPSBhY2N0X3N0YWNrX2dyb3d0aCh2bWEsIHNpemUsIGdyb3cpOworCQkJaWYgKCFlcnJvcikgeworCQkJCXZtYS0+dm1fZW5kID0gYWRkcmVzczsKKwkJCQlwZXJmX2V2ZW50X21tYXAodm1hKTsKKwkJCX0KIAkJfQogCX0KIAl2bWFfdW5sb2NrX2Fub25fdm1hKHZtYSk7CkBAIC0xODE0LDExICsxODE3LDE0IEBACiAJCXNpemUgPSB2bWEtPnZtX2VuZCAtIGFkZHJlc3M7CiAJCWdyb3cgPSAodm1hLT52bV9zdGFydCAtIGFkZHJlc3MpID4+IFBBR0VfU0hJRlQ7CiAKLQkJZXJyb3IgPSBhY2N0X3N0YWNrX2dyb3d0aCh2bWEsIHNpemUsIGdyb3cpOwotCQlpZiAoIWVycm9yKSB7Ci0JCQl2bWEtPnZtX3N0YXJ0ID0gYWRkcmVzczsKLQkJCXZtYS0+dm1fcGdvZmYgLT0gZ3JvdzsKLQkJCXBlcmZfZXZlbnRfbW1hcCh2bWEpOworCQllcnJvciA9IC1FTk9NRU07CisJCWlmIChncm93IDw9IHZtYS0+dm1fcGdvZmYpIHsKKwkJCWVycm9yID0gYWNjdF9zdGFja19ncm93dGgodm1hLCBzaXplLCBncm93KTsKKwkJCWlmICghZXJyb3IpIHsKKwkJCQl2bWEtPnZtX3N0YXJ0ID0gYWRkcmVzczsKKwkJCQl2bWEtPnZtX3Bnb2ZmIC09IGdyb3c7CisJCQkJcGVyZl9ldmVudF9tbWFwKHZtYSk7CisJCQl9CiAJCX0KIAl9CiAJdm1hX3VubG9ja19hbm9uX3ZtYSh2bWEpOwpkaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuYwppbmRleCAxZGU5OGQ0Li5hN2MxZjlmIDEwMDY0NAotLS0gYS9tbS9tcmVtYXAuYworKysgYi9tbS9tcmVtYXAuYwpAQCAtMjc3LDkgKzI3NywxNiBAQAogCWlmIChvbGRfbGVuID4gdm1hLT52bV9lbmQgLSBhZGRyKQogCQlnb3RvIEVmYXVsdDsKIAotCWlmICh2bWEtPnZtX2ZsYWdzICYgKFZNX0RPTlRFWFBBTkQgfCBWTV9QRk5NQVApKSB7Ci0JCWlmIChuZXdfbGVuID4gb2xkX2xlbikKKwkvKiBOZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgYSBncm93aW5nIG1hcHBpbmcgKi8KKwlpZiAobmV3X2xlbiA+IG9sZF9sZW4pIHsKKwkJdW5zaWduZWQgbG9uZyBwZ29mZjsKKworCQlpZiAodm1hLT52bV9mbGFncyAmIChWTV9ET05URVhQQU5EIHwgVk1fUEZOTUFQKSkKIAkJCWdvdG8gRWZhdWx0OworCQlwZ29mZiA9IChhZGRyIC0gdm1hLT52bV9zdGFydCkgPj4gUEFHRV9TSElGVDsKKwkJcGdvZmYgKz0gdm1hLT52bV9wZ29mZjsKKwkJaWYgKHBnb2ZmICsgKG5ld19sZW4gPj4gUEFHRV9TSElGVCkgPCBwZ29mZikKKwkJCWdvdG8gRWludmFsOwogCX0KIAogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CmRpZmYgLS1naXQgYS9tbS9ub2Jvb3RtZW0uYyBiL21tL25vYm9vdG1lbS5jCmluZGV4IGU5OWY2Y2QuLjkxMDkwNDkgMTAwNjQ0Ci0tLSBhL21tL25vYm9vdG1lbS5jCisrKyBiL21tL25vYm9vdG1lbS5jCkBAIC0xNTAsNyArMTUwLDcgQEAKIHsKIAkvKgogCSAqIFdlIG5lZWQgdG8gdXNlIE1BWF9OVU1OT0RFUyBpbnN0ZWFkIG9mIE5PREVfREFUQSgwKS0+bm9kZV9pZAotCSAqICBiZWNhdXNlIGluIHNvbWUgY2FzZSBsaWtlIE5vZGUwIGRvZXNudCBoYXZlIFJBTSBpbnN0YWxsZWQKKwkgKiAgYmVjYXVzZSBpbiBzb21lIGNhc2UgbGlrZSBOb2RlMCBkb2Vzbid0IGhhdmUgUkFNIGluc3RhbGxlZAogCSAqICBsb3cgcmFtIHdpbGwgYmUgb24gTm9kZTEKIAkgKiBVc2UgTUFYX05VTU5PREVTIHdpbGwgbWFrZSBzdXJlIGFsbCByYW5nZXMgaW4gZWFybHlfbm9kZV9tYXBbXQogCSAqICB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiBvbmx5IE5vZGUwIHJlbGF0ZWQKZGlmZiAtLWdpdCBhL21tL29vbV9raWxsLmMgYi9tbS9vb21fa2lsbC5jCmluZGV4IDZhODE5ZDEuLmY1MmU4NWMgMTAwNjQ0Ci0tLSBhL21tL29vbV9raWxsLmMKKysrIGIvbW0vb29tX2tpbGwuYwpAQCAtODQsMjQgKzg0LDYgQEAKICNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLwogCiAvKgotICogSWYgdGhpcyBpcyBhIHN5c3RlbSBPT00gKG5vdCBhIG1lbWNnIE9PTSkgYW5kIHRoZSB0YXNrIHNlbGVjdGVkIHRvIGJlCi0gKiBraWxsZWQgaXMgbm90IGFscmVhZHkgcnVubmluZyBhdCBoaWdoIChSVCkgcHJpb3JpdGllcywgc3BlZWQgdXAgdGhlCi0gKiByZWNvdmVyeSBieSBib29zdGluZyB0aGUgZHlpbmcgdGFzayB0byB0aGUgbG93ZXN0IEZJRk8gcHJpb3JpdHkuCi0gKiBUaGF0IGhlbHBzIHdpdGggdGhlIHJlY292ZXJ5IGFuZCBhdm9pZHMgaW50ZXJmZXJpbmcgd2l0aCBSVCB0YXNrcy4KLSAqLwotc3RhdGljIHZvaWQgYm9vc3RfZHlpbmdfdGFza19wcmlvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKLQkJCQkgIHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCi17Ci0Jc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtID0geyAuc2NoZWRfcHJpb3JpdHkgPSAxIH07Ci0KLQlpZiAobWVtKQotCQlyZXR1cm47Ci0KLQlpZiAoIXJ0X3Rhc2socCkpCi0JCXNjaGVkX3NldHNjaGVkdWxlcl9ub2NoZWNrKHAsIFNDSEVEX0ZJRk8sICZwYXJhbSk7Ci19Ci0KLS8qCiAgKiBUaGUgcHJvY2VzcyBwIG1heSBoYXZlIGRldGFjaGVkIGl0cyBvd24gLT5tbSB3aGlsZSBleGl0aW5nIG9yIHRocm91Z2gKICAqIHVzZV9tbSgpLCBidXQgb25lIG9yIG1vcmUgb2YgaXRzIHN1YnRocmVhZHMgbWF5IHN0aWxsIGhhdmUgYSB2YWxpZAogICogcG9pbnRlci4gIFJldHVybiBwLCBvciBhbnkgb2YgaXRzIHN1YnRocmVhZHMgd2l0aCBhIHZhbGlkIC0+bW0sIHdpdGgKQEAgLTE5MCwxMCArMTcyLDEzIEBACiAKIAkvKgogCSAqIFRoZSBiYXNlbGluZSBmb3IgdGhlIGJhZG5lc3Mgc2NvcmUgaXMgdGhlIHByb3BvcnRpb24gb2YgUkFNIHRoYXQgZWFjaAotCSAqIHRhc2sncyByc3MgYW5kIHN3YXAgc3BhY2UgdXNlLgorCSAqIHRhc2sncyByc3MsIHBhZ2V0YWJsZSBhbmQgc3dhcCBzcGFjZSB1c2UuCiAJICovCi0JcG9pbnRzID0gKGdldF9tbV9yc3MocC0+bW0pICsgZ2V0X21tX2NvdW50ZXIocC0+bW0sIE1NX1NXQVBFTlRTKSkgKiAxMDAwIC8KLQkJCXRvdGFscGFnZXM7CisJcG9pbnRzID0gZ2V0X21tX3JzcyhwLT5tbSkgKyBwLT5tbS0+bnJfcHRlczsKKwlwb2ludHMgKz0gZ2V0X21tX2NvdW50ZXIocC0+bW0sIE1NX1NXQVBFTlRTKTsKKworCXBvaW50cyAqPSAxMDAwOworCXBvaW50cyAvPSB0b3RhbHBhZ2VzOwogCXRhc2tfdW5sb2NrKHApOwogCiAJLyoKQEAgLTQ1MiwxMyArNDM3LDYgQEAKIAlzZXRfdHNrX3RocmVhZF9mbGFnKHAsIFRJRl9NRU1ESUUpOwogCWZvcmNlX3NpZyhTSUdLSUxMLCBwKTsKIAotCS8qCi0JICogV2UgZ2l2ZSBvdXIgc2FjcmlmaWNpYWwgbGFtYiBoaWdoIHByaW9yaXR5IGFuZCBhY2Nlc3MgdG8KLQkgKiBhbGwgdGhlIG1lbW9yeSBpdCBuZWVkcy4gVGhhdCB3YXkgaXQgc2hvdWxkIGJlIGFibGUgdG8KLQkgKiBleGl0KCkgYW5kIGNsZWFyIG91dCBpdHMgcmVzb3VyY2VzIHF1aWNrbHkuLi4KLQkgKi8KLQlib29zdF9keWluZ190YXNrX3ByaW8ocCwgbWVtKTsKLQogCXJldHVybiAwOwogfQogI3VuZGVmIEsKQEAgLTQ4Miw3ICs0NjAsNiBAQAogCSAqLwogCWlmIChwLT5mbGFncyAmIFBGX0VYSVRJTkcpIHsKIAkJc2V0X3Rza190aHJlYWRfZmxhZyhwLCBUSUZfTUVNRElFKTsKLQkJYm9vc3RfZHlpbmdfdGFza19wcmlvKHAsIG1lbSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNTU2LDcgKzUzMyw2IEBACiAJICovCiAJaWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCXNldF90aHJlYWRfZmxhZyhUSUZfTUVNRElFKTsKLQkJYm9vc3RfZHlpbmdfdGFza19wcmlvKGN1cnJlbnQsIE5VTEwpOwogCQlyZXR1cm47CiAJfQogCkBAIC03MTIsNyArNjg4LDYgQEAKIAkgKi8KIAlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJc2V0X3RocmVhZF9mbGFnKFRJRl9NRU1ESUUpOwotCQlib29zdF9keWluZ190YXNrX3ByaW8oY3VycmVudCwgTlVMTCk7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCBkNmU3YmE3Li4zZjhiY2UyIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKKysrIGIvbW0vcGFnZV9hbGxvYy5jCkBAIC05NDIsNyArOTQyLDcgQEAKIAkJCSAqIElmIGJyZWFraW5nIGEgbGFyZ2UgYmxvY2sgb2YgcGFnZXMsIG1vdmUgYWxsIGZyZWUKIAkJCSAqIHBhZ2VzIHRvIHRoZSBwcmVmZXJyZWQgYWxsb2NhdGlvbiBsaXN0LiBJZiBmYWxsaW5nCiAJCQkgKiBiYWNrIGZvciBhIHJlY2xhaW1hYmxlIGtlcm5lbCBhbGxvY2F0aW9uLCBiZSBtb3JlCi0JCQkgKiBhZ3Jlc3NpdmUgYWJvdXQgdGFraW5nIG93bmVyc2hpcCBvZiBmcmVlIHBhZ2VzCisJCQkgKiBhZ2dyZXNzaXZlIGFib3V0IHRha2luZyBvd25lcnNoaXAgb2YgZnJlZSBwYWdlcwogCQkJICovCiAJCQlpZiAodW5saWtlbHkoY3VycmVudF9vcmRlciA+PSAocGFnZWJsb2NrX29yZGVyID4+IDEpKSB8fAogCQkJCQlzdGFydF9taWdyYXRldHlwZSA9PSBNSUdSQVRFX1JFQ0xBSU1BQkxFIHx8CkBAIC0yMzE3LDYgKzIzMTcsMjEgQEAKIAogRVhQT1JUX1NZTUJPTChmcmVlX3BhZ2VzKTsKIAorc3RhdGljIHZvaWQgKm1ha2VfYWxsb2NfZXhhY3QodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBvcmRlciwgc2l6ZV90IHNpemUpCit7CisJaWYgKGFkZHIpIHsKKwkJdW5zaWduZWQgbG9uZyBhbGxvY19lbmQgPSBhZGRyICsgKFBBR0VfU0laRSA8PCBvcmRlcik7CisJCXVuc2lnbmVkIGxvbmcgdXNlZCA9IGFkZHIgKyBQQUdFX0FMSUdOKHNpemUpOworCisJCXNwbGl0X3BhZ2UodmlydF90b19wYWdlKCh2b2lkICopYWRkciksIG9yZGVyKTsKKwkJd2hpbGUgKHVzZWQgPCBhbGxvY19lbmQpIHsKKwkJCWZyZWVfcGFnZSh1c2VkKTsKKwkJCXVzZWQgKz0gUEFHRV9TSVpFOworCQl9CisJfQorCXJldHVybiAodm9pZCAqKWFkZHI7Cit9CisKIC8qKgogICogYWxsb2NfcGFnZXNfZXhhY3QgLSBhbGxvY2F0ZSBhbiBleGFjdCBudW1iZXIgcGh5c2ljYWxseS1jb250aWd1b3VzIHBhZ2VzLgogICogQHNpemU6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGUKQEAgLTIzMzYsMjIgKzIzNTEsMzMgQEAKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAKIAlhZGRyID0gX19nZXRfZnJlZV9wYWdlcyhnZnBfbWFzaywgb3JkZXIpOwotCWlmIChhZGRyKSB7Ci0JCXVuc2lnbmVkIGxvbmcgYWxsb2NfZW5kID0gYWRkciArIChQQUdFX1NJWkUgPDwgb3JkZXIpOwotCQl1bnNpZ25lZCBsb25nIHVzZWQgPSBhZGRyICsgUEFHRV9BTElHTihzaXplKTsKLQotCQlzcGxpdF9wYWdlKHZpcnRfdG9fcGFnZSgodm9pZCAqKWFkZHIpLCBvcmRlcik7Ci0JCXdoaWxlICh1c2VkIDwgYWxsb2NfZW5kKSB7Ci0JCQlmcmVlX3BhZ2UodXNlZCk7Ci0JCQl1c2VkICs9IFBBR0VfU0laRTsKLQkJfQotCX0KLQotCXJldHVybiAodm9pZCAqKWFkZHI7CisJcmV0dXJuIG1ha2VfYWxsb2NfZXhhY3QoYWRkciwgb3JkZXIsIHNpemUpOwogfQogRVhQT1JUX1NZTUJPTChhbGxvY19wYWdlc19leGFjdCk7CiAKIC8qKgorICogYWxsb2NfcGFnZXNfZXhhY3RfbmlkIC0gYWxsb2NhdGUgYW4gZXhhY3QgbnVtYmVyIG9mIHBoeXNpY2FsbHktY29udGlndW91cworICoJCQkgICBwYWdlcyBvbiBhIG5vZGUuCisgKiBAbmlkOiB0aGUgcHJlZmVycmVkIG5vZGUgSUQgd2hlcmUgbWVtb3J5IHNob3VsZCBiZSBhbGxvY2F0ZWQKKyAqIEBzaXplOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG9jYXRlCisgKiBAZ2ZwX21hc2s6IEdGUCBmbGFncyBmb3IgdGhlIGFsbG9jYXRpb24KKyAqCisgKiBMaWtlIGFsbG9jX3BhZ2VzX2V4YWN0KCksIGJ1dCB0cnkgdG8gYWxsb2NhdGUgb24gbm9kZSBuaWQgZmlyc3QgYmVmb3JlIGZhbGxpbmcKKyAqIGJhY2suCisgKiBOb3RlIHRoaXMgaXMgbm90IGFsbG9jX3BhZ2VzX2V4YWN0X25vZGUoKSB3aGljaCBhbGxvY2F0ZXMgb24gYSBzcGVjaWZpYyBub2RlLAorICogYnV0IGlzIG5vdCBleGFjdC4KKyAqLwordm9pZCAqYWxsb2NfcGFnZXNfZXhhY3RfbmlkKGludCBuaWQsIHNpemVfdCBzaXplLCBnZnBfdCBnZnBfbWFzaykKK3sKKwl1bnNpZ25lZCBvcmRlciA9IGdldF9vcmRlcihzaXplKTsKKwlzdHJ1Y3QgcGFnZSAqcCA9IGFsbG9jX3BhZ2VzX25vZGUobmlkLCBnZnBfbWFzaywgb3JkZXIpOworCWlmICghcCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIG1ha2VfYWxsb2NfZXhhY3QoKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHApLCBvcmRlciwgc2l6ZSk7Cit9CitFWFBPUlRfU1lNQk9MKGFsbG9jX3BhZ2VzX2V4YWN0X25pZCk7CisKKy8qKgogICogZnJlZV9wYWdlc19leGFjdCAtIHJlbGVhc2UgbWVtb3J5IGFsbG9jYXRlZCB2aWEgYWxsb2NfcGFnZXNfZXhhY3QoKQogICogQHZpcnQ6IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBhbGxvY19wYWdlc19leGFjdC4KICAqIEBzaXplOiBzaXplIG9mIGFsbG9jYXRpb24sIHNhbWUgdmFsdWUgYXMgcGFzc2VkIHRvIGFsbG9jX3BhZ2VzX2V4YWN0KCkuCkBAIC0zMTc2LDcgKzMyMDIsNyBAQAogICogQ2FsbGVkIHdpdGggem9uZWxpc3RzX211dGV4IGhlbGQgYWx3YXlzCiAgKiB1bmxlc3Mgc3lzdGVtX3N0YXRlID09IFNZU1RFTV9CT09USU5HLgogICovCi12b2lkIGJ1aWxkX2FsbF96b25lbGlzdHModm9pZCAqZGF0YSkKK3ZvaWQgX19yZWYgYnVpbGRfYWxsX3pvbmVsaXN0cyh2b2lkICpkYXRhKQogewogCXNldF96b25lbGlzdF9vcmRlcigpOwogCkBAIC0zNTY0LDcgKzM1OTAsNyBAQAogCiAJaWYgKCFzbGFiX2lzX2F2YWlsYWJsZSgpKSB7CiAJCXpvbmUtPndhaXRfdGFibGUgPSAod2FpdF9xdWV1ZV9oZWFkX3QgKikKLQkJCWFsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdCwgYWxsb2Nfc2l6ZSk7CisJCQlhbGxvY19ib290bWVtX25vZGVfbm9wYW5pYyhwZ2RhdCwgYWxsb2Nfc2l6ZSk7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogVGhpcyBjYXNlIG1lYW5zIHRoYXQgYSB6b25lIHdob3NlIHNpemUgd2FzIDAgZ2V0cyBuZXcgbWVtb3J5CkBAIC0zOTI2LDcgKzM5NTIsNyBAQAogCiAvKgogICogVGhlIHpvbmUgcmFuZ2VzIHByb3ZpZGVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUgZG8gbm90IGluY2x1ZGUgWk9ORV9NT1ZBQkxFCi0gKiBiZWNhdXNlIGl0IGlzIHNpemVkIGluZGVwZW5kYW50IG9mIGFyY2hpdGVjdHVyZS4gVW5saWtlIHRoZSBvdGhlciB6b25lcywKKyAqIGJlY2F1c2UgaXQgaXMgc2l6ZWQgaW5kZXBlbmRlbnQgb2YgYXJjaGl0ZWN0dXJlLiBVbmxpa2UgdGhlIG90aGVyIHpvbmVzLAogICogdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBaT05FX01PVkFCTEUgaXMgbm90IGZpeGVkLiBJdCBtYXkgYmUgZGlmZmVyZW50CiAgKiBpbiBlYWNoIG5vZGUgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIGVhY2ggbm9kZSBhbmQgaG93IGV2ZW5seSBrZXJuZWxjb3JlCiAgKiBpcyBkaXN0cmlidXRlZC4gVGhpcyBoZWxwZXIgZnVuY3Rpb24gYWRqdXN0cyB0aGUgem9uZSByYW5nZXMKQEAgLTQxNDEsNyArNDE2Nyw4IEBACiAJdW5zaWduZWQgbG9uZyB1c2VtYXBzaXplID0gdXNlbWFwX3NpemUoem9uZXNpemUpOwogCXpvbmUtPnBhZ2VibG9ja19mbGFncyA9IE5VTEw7CiAJaWYgKHVzZW1hcHNpemUpCi0JCXpvbmUtPnBhZ2VibG9ja19mbGFncyA9IGFsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdCwgdXNlbWFwc2l6ZSk7CisJCXpvbmUtPnBhZ2VibG9ja19mbGFncyA9IGFsbG9jX2Jvb3RtZW1fbm9kZV9ub3BhbmljKHBnZGF0LAorCQkJCQkJCQkgICB1c2VtYXBzaXplKTsKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfdXNlbWFwKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsCkBAIC00MzA3LDcgKzQzMzQsNyBAQAogCQlzaXplID0gIChlbmQgLSBzdGFydCkgKiBzaXplb2Yoc3RydWN0IHBhZ2UpOwogCQltYXAgPSBhbGxvY19yZW1hcChwZ2RhdC0+bm9kZV9pZCwgc2l6ZSk7CiAJCWlmICghbWFwKQotCQkJbWFwID0gYWxsb2NfYm9vdG1lbV9ub2RlKHBnZGF0LCBzaXplKTsKKwkJCW1hcCA9IGFsbG9jX2Jvb3RtZW1fbm9kZV9ub3BhbmljKHBnZGF0LCBzaXplKTsKIAkJcGdkYXQtPm5vZGVfbWVtX21hcCA9IG1hcCArIChwZ2RhdC0+bm9kZV9zdGFydF9wZm4gLSBzdGFydCk7CiAJfQogI2lmbmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9jZ3JvdXAuYyBiL21tL3BhZ2VfY2dyb3VwLmMKaW5kZXggYTEyY2MzZi4uMmRhYWRjMyAxMDA2NDQKLS0tIGEvbW0vcGFnZV9jZ3JvdXAuYworKysgYi9tbS9wYWdlX2Nncm91cC5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIHsKIAl2b2lkICphZGRyID0gTlVMTDsKIAotCWFkZHIgPSBhbGxvY19wYWdlc19leGFjdChzaXplLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTsKKwlhZGRyID0gYWxsb2NfcGFnZXNfZXhhY3RfbmlkKG5pZCwgc2l6ZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7CiAJaWYgKGFkZHIpCiAJCXJldHVybiBhZGRyOwogCkBAIC0zNzcsNyArMzc3LDcgQEAKICAqIEBuZXc6IG5ldyBpZAogICoKICAqIFJldHVybnMgb2xkIGlkIGF0IHN1Y2Nlc3MsIDAgYXQgZmFpbHVyZS4KLSAqIChUaGVyZSBpcyBubyBtZW1fY2dyb3VwIHVzZWluZyAwIGFzIGl0cyBpZCkKKyAqIChUaGVyZSBpcyBubyBtZW1fY2dyb3VwIHVzaW5nIDAgYXMgaXRzIGlkKQogICovCiB1bnNpZ25lZCBzaG9ydCBzd2FwX2Nncm91cF9jbXB4Y2hnKHN3cF9lbnRyeV90IGVudCwKIAkJCQkJdW5zaWduZWQgc2hvcnQgb2xkLCB1bnNpZ25lZCBzaG9ydCBuZXcpCmRpZmYgLS1naXQgYS9tbS9wZXJjcHUuYyBiL21tL3BlcmNwdS5jCmluZGV4IDU1ZDRkMTEuLmExNjBkYjMgMTAwNjQ0Ci0tLSBhL21tL3BlcmNwdS5jCisrKyBiL21tL3BlcmNwdS5jCkBAIC0zNDIsNyArMzQyLDcgQEAKICAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3QKICAqCiAgKiBEZXRlcm1pbmUgd2hldGhlciBhcmVhIG1hcCBvZiBAY2h1bmsgbmVlZHMgdG8gYmUgZXh0ZW5kZWQgdG8KLSAqIGFjY29tb2RhdGUgYSBuZXcgYWxsb2NhdGlvbi4KKyAqIGFjY29tbW9kYXRlIGEgbmV3IGFsbG9jYXRpb24uCiAgKgogICogQ09OVEVYVDoKICAqIHBjcHVfbG9jay4KQEAgLTQzMSw3ICs0MzEsNyBAQAogICogZGVwZW5kaW5nIG9uIEBoZWFkLCBpcyByZWR1Y2VkIGJ5IEB0YWlsIGJ5dGVzIGFuZCBAdGFpbCBieXRlIGJsb2NrCiAgKiBpcyBpbnNlcnRlZCBhZnRlciB0aGUgdGFyZ2V0IGJsb2NrLgogICoKLSAqIEBjaHVuay0+bWFwIG11c3QgaGF2ZSBlbm91Z2ggZnJlZSBzbG90cyB0byBhY2NvbW9kYXRlIHRoZSBzcGxpdC4KKyAqIEBjaHVuay0+bWFwIG11c3QgaGF2ZSBlbm91Z2ggZnJlZSBzbG90cyB0byBhY2NvbW1vZGF0ZSB0aGUgc3BsaXQuCiAgKgogICogQ09OVEVYVDoKICAqIHBjcHVfbG9jay4KQEAgLTE0MzUsNyArMTQzNSw3IEBACiAJLyoKIAkgKiBEZXRlcm1pbmUgbWluX3VuaXRfc2l6ZSwgYWxsb2Nfc2l6ZSBhbmQgbWF4X3VwYSBzdWNoIHRoYXQKIAkgKiBhbGxvY19zaXplIGlzIG11bHRpcGxlIG9mIGF0b21fc2l6ZSBhbmQgaXMgdGhlIHNtYWxsZXN0Ci0JICogd2hpY2ggY2FuIGFjY29tb2RhdGUgNGsgYWxpZ25lZCBzZWdtZW50cyB3aGljaCBhcmUgZXF1YWwgdG8KKwkgKiB3aGljaCBjYW4gYWNjb21tb2RhdGUgNGsgYWxpZ25lZCBzZWdtZW50cyB3aGljaCBhcmUgZXF1YWwgdG8KIAkgKiBvciBsYXJnZXIgdGhhbiBtaW5fdW5pdF9zaXplLgogCSAqLwogCW1pbl91bml0X3NpemUgPSBtYXhfdChzaXplX3QsIHNpemVfc3VtLCBQQ1BVX01JTl9VTklUX1NJWkUpOwpAQCAtMTU1MCw3ICsxNTUwLDcgQEAKICAqIEBhdG9tX3NpemU6IGFsbG9jYXRpb24gYXRvbSBzaXplCiAgKiBAY3B1X2Rpc3RhbmNlX2ZuOiBjYWxsYmFjayB0byBkZXRlcm1pbmUgZGlzdGFuY2UgYmV0d2VlbiBjcHVzLCBvcHRpb25hbAogICogQGFsbG9jX2ZuOiBmdW5jdGlvbiB0byBhbGxvY2F0ZSBwZXJjcHUgcGFnZQotICogQGZyZWVfZm46IGZ1bnRpb24gdG8gZnJlZSBwZXJjcHUgcGFnZQorICogQGZyZWVfZm46IGZ1bmN0aW9uIHRvIGZyZWUgcGVyY3B1IHBhZ2UKICAqCiAgKiBUaGlzIGlzIGEgaGVscGVyIHRvIGVhc2Ugc2V0dGluZyB1cCBlbWJlZGRlZCBmaXJzdCBwZXJjcHUgY2h1bmsgYW5kCiAgKiBjYW4gYmUgY2FsbGVkIHdoZXJlIHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsoKSBpcyBleHBlY3RlZC4KQEAgLTE2NzgsNyArMTY3OCw3IEBACiAgKiBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsgLSBtYXAgdGhlIGZpcnN0IGNodW5rIHVzaW5nIFBBR0VfU0laRSBwYWdlcwogICogQHJlc2VydmVkX3NpemU6IHRoZSBzaXplIG9mIHJlc2VydmVkIHBlcmNwdSBhcmVhIGluIGJ5dGVzCiAgKiBAYWxsb2NfZm46IGZ1bmN0aW9uIHRvIGFsbG9jYXRlIHBlcmNwdSBwYWdlLCBhbHdheXMgY2FsbGVkIHdpdGggUEFHRV9TSVpFCi0gKiBAZnJlZV9mbjogZnVudGlvbiB0byBmcmVlIHBlcmNwdSBwYWdlLCBhbHdheXMgY2FsbGVkIHdpdGggUEFHRV9TSVpFCisgKiBAZnJlZV9mbjogZnVuY3Rpb24gdG8gZnJlZSBwZXJjcHUgcGFnZSwgYWx3YXlzIGNhbGxlZCB3aXRoIFBBR0VfU0laRQogICogQHBvcHVsYXRlX3B0ZV9mbjogZnVuY3Rpb24gdG8gcG9wdWxhdGUgcHRlCiAgKgogICogVGhpcyBpcyBhIGhlbHBlciB0byBlYXNlIHNldHRpbmcgdXAgcGFnZS1yZW1hcHBlZCBmaXJzdCBwZXJjcHUKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDU4ZGE3YzEuLmRmYzcwNjkgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKKysrIGIvbW0vc2htZW0uYwpAQCAtNDIxLDcgKzQyMSw4IEBACiAJCSAqIGEgd2FzdGUgdG8gYWxsb2NhdGUgaW5kZXggaWYgd2UgY2Fubm90IGFsbG9jYXRlIGRhdGEuCiAJCSAqLwogCQlpZiAoc2JpbmZvLT5tYXhfYmxvY2tzKSB7Ci0JCQlpZiAocGVyY3B1X2NvdW50ZXJfY29tcGFyZSgmc2JpbmZvLT51c2VkX2Jsb2NrcywgKHNiaW5mby0+bWF4X2Jsb2NrcyAtIDEpKSA+IDApCisJCQlpZiAocGVyY3B1X2NvdW50ZXJfY29tcGFyZSgmc2JpbmZvLT51c2VkX2Jsb2NrcywKKwkJCQkJCXNiaW5mby0+bWF4X2Jsb2NrcyAtIDEpID49IDApCiAJCQkJcmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7CiAJCQlwZXJjcHVfY291bnRlcl9pbmMoJnNiaW5mby0+dXNlZF9ibG9ja3MpOwogCQkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKQEAgLTg1MSw3ICs4NTIsNyBAQAogCiBzdGF0aWMgaW50IHNobWVtX3VudXNlX2lub2RlKHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvLCBzd3BfZW50cnlfdCBlbnRyeSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAl1bnNpZ25lZCBsb25nIGlkeDsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAJdW5zaWduZWQgbG9uZyBsaW1pdDsKQEAgLTg3NCw4ICs4NzUsMTAgQEAKIAlpZiAoc2l6ZSA+IFNITUVNX05SX0RJUkVDVCkKIAkJc2l6ZSA9IFNITUVNX05SX0RJUkVDVDsKIAlvZmZzZXQgPSBzaG1lbV9maW5kX3N3cChlbnRyeSwgcHRyLCBwdHIrc2l6ZSk7Ci0JaWYgKG9mZnNldCA+PSAwKQorCWlmIChvZmZzZXQgPj0gMCkgeworCQlzaG1lbV9zd3BfYmFsYW5jZV91bm1hcCgpOwogCQlnb3RvIGZvdW5kOworCX0KIAlpZiAoIWluZm8tPmlfaW5kaXJlY3QpCiAJCWdvdG8gbG9zdDI7CiAKQEAgLTkxMywxMSArOTE2LDExIEBACiAJCQlpZiAoc2l6ZSA+IEVOVFJJRVNfUEVSX1BBR0UpCiAJCQkJc2l6ZSA9IEVOVFJJRVNfUEVSX1BBR0U7CiAJCQlvZmZzZXQgPSBzaG1lbV9maW5kX3N3cChlbnRyeSwgcHRyLCBwdHIrc2l6ZSk7Ci0JCQlzaG1lbV9zd3BfdW5tYXAocHRyKTsKIAkJCWlmIChvZmZzZXQgPj0gMCkgewogCQkJCXNobWVtX2Rpcl91bm1hcChkaXIpOwogCQkJCWdvdG8gZm91bmQ7CiAJCQl9CisJCQlzaG1lbV9zd3BfdW5tYXAocHRyKTsKIAkJfQogCX0KIGxvc3QxOgpAQCAtOTI3LDggKzkzMCw3IEBACiAJcmV0dXJuIDA7CiBmb3VuZDoKIAlpZHggKz0gb2Zmc2V0OwotCWlub2RlID0gaWdyYWIoJmluZm8tPnZmc19pbm9kZSk7Ci0Jc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOworCXB0ciArPSBvZmZzZXQ7CiAKIAkvKgogCSAqIE1vdmUgX2hlYWRfIHRvIHN0YXJ0IHNlYXJjaCBmb3IgbmV4dCBmcm9tIGhlcmUuCkBAIC05MzksMzcgKzk0MSwxOCBAQAogCSAqLwogCWlmIChzaG1lbV9zd2FwbGlzdC5uZXh0ICE9ICZpbmZvLT5zd2FwbGlzdCkKIAkJbGlzdF9tb3ZlX3RhaWwoJnNobWVtX3N3YXBsaXN0LCAmaW5mby0+c3dhcGxpc3QpOwotCW11dGV4X3VubG9jaygmc2htZW1fc3dhcGxpc3RfbXV0ZXgpOwogCi0JZXJyb3IgPSAxOwotCWlmICghaW5vZGUpCi0JCWdvdG8gb3V0OwogCS8qCi0JICogQ2hhcmdlIHBhZ2UgdXNpbmcgR0ZQX0tFUk5FTCB3aGlsZSB3ZSBjYW4gd2FpdC4KLQkgKiBDaGFyZ2VkIGJhY2sgdG8gdGhlIHVzZXIobm90IHRvIGNhbGxlcikgd2hlbiBzd2FwIGFjY291bnQgaXMgdXNlZC4KLQkgKiBhZGRfdG9fcGFnZV9jYWNoZSgpIHdpbGwgYmUgY2FsbGVkIHdpdGggR0ZQX05PV0FJVC4KKwkgKiBXZSByZWx5IG9uIHNobWVtX3N3YXBsaXN0X211dGV4LCBub3Qgb25seSB0byBwcm90ZWN0IHRoZSBzd2FwbGlzdCwKKwkgKiBidXQgYWxzbyB0byBob2xkIHVwIHNobWVtX2V2aWN0X2lub2RlKCk6IHNvIGlub2RlIGNhbm5vdCBiZSBmcmVlZAorCSAqIGJlbmVhdGggdXMgKHBhZ2Vsb2NrIGRvZXNuJ3QgaGVscCB1bnRpbCB0aGUgcGFnZSBpcyBpbiBwYWdlY2FjaGUpLgogCSAqLwotCWVycm9yID0gbWVtX2Nncm91cF9jYWNoZV9jaGFyZ2UocGFnZSwgY3VycmVudC0+bW0sIEdGUF9LRVJORUwpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXQ7Ci0JZXJyb3IgPSByYWRpeF90cmVlX3ByZWxvYWQoR0ZQX0tFUk5FTCk7Ci0JaWYgKGVycm9yKSB7Ci0JCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfY2FjaGVfcGFnZShwYWdlKTsKLQkJZ290byBvdXQ7Ci0JfQotCWVycm9yID0gMTsKLQotCXNwaW5fbG9jaygmaW5mby0+bG9jayk7Ci0JcHRyID0gc2htZW1fc3dwX2VudHJ5KGluZm8sIGlkeCwgTlVMTCk7Ci0JaWYgKHB0ciAmJiBwdHItPnZhbCA9PSBlbnRyeS52YWwpIHsKLQkJZXJyb3IgPSBhZGRfdG9fcGFnZV9jYWNoZV9sb2NrZWQocGFnZSwgaW5vZGUtPmlfbWFwcGluZywKLQkJCQkJCWlkeCwgR0ZQX05PV0FJVCk7Ci0JCS8qIGRvZXMgbWVtX2Nncm91cF91bmNoYXJnZV9jYWNoZV9wYWdlIG9uIGVycm9yICovCi0JfSBlbHNlCS8qIHdlIG11c3QgY29tcGVuc2F0ZSBmb3Igb3VyIHByZWNoYXJnZSBhYm92ZSAqLwotCQltZW1fY2dyb3VwX3VuY2hhcmdlX2NhY2hlX3BhZ2UocGFnZSk7CisJbWFwcGluZyA9IGluZm8tPnZmc19pbm9kZS5pX21hcHBpbmc7CisJZXJyb3IgPSBhZGRfdG9fcGFnZV9jYWNoZV9sb2NrZWQocGFnZSwgbWFwcGluZywgaWR4LCBHRlBfTk9XQUlUKTsKKwkvKiB3aGljaCBkb2VzIG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY2FjaGVfcGFnZSBvbiBlcnJvciAqLwogCiAJaWYgKGVycm9yID09IC1FRVhJU1QpIHsKLQkJc3RydWN0IHBhZ2UgKmZpbGVwYWdlID0gZmluZF9nZXRfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpZHgpOworCQlzdHJ1Y3QgcGFnZSAqZmlsZXBhZ2UgPSBmaW5kX2dldF9wYWdlKG1hcHBpbmcsIGlkeCk7CiAJCWVycm9yID0gMTsKIAkJaWYgKGZpbGVwYWdlKSB7CiAJCQkvKgpAQCAtOTg5LDE0ICs5NzIsOCBAQAogCQlzd2FwX2ZyZWUoZW50cnkpOwogCQllcnJvciA9IDE7CS8qIG5vdCBhbiBlcnJvciwgYnV0IGVudHJ5IHdhcyBmb3VuZCAqLwogCX0KLQlpZiAocHRyKQotCQlzaG1lbV9zd3BfdW5tYXAocHRyKTsKKwlzaG1lbV9zd3BfdW5tYXAocHRyKTsKIAlzcGluX3VubG9jaygmaW5mby0+bG9jayk7Ci0JcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOwotb3V0OgotCXVubG9ja19wYWdlKHBhZ2UpOwotCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQlpcHV0KGlub2RlKTsJCS8qIGFsbG93cyBmb3IgTlVMTCAqLwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMTAwOCw2ICs5ODUsMjYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqbmV4dDsKIAlzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbzsKIAlpbnQgZm91bmQgPSAwOworCWludCBlcnJvcjsKKworCS8qCisJICogQ2hhcmdlIHBhZ2UgdXNpbmcgR0ZQX0tFUk5FTCB3aGlsZSB3ZSBjYW4gd2FpdCwgYmVmb3JlIHRha2luZworCSAqIHRoZSBzaG1lbV9zd2FwbGlzdF9tdXRleCB3aGljaCBtaWdodCBob2xkIHVwIHNobWVtX3dyaXRlcGFnZSgpLgorCSAqIENoYXJnZWQgYmFjayB0byB0aGUgdXNlciAobm90IHRvIGNhbGxlcikgd2hlbiBzd2FwIGFjY291bnQgaXMgdXNlZC4KKwkgKiBhZGRfdG9fcGFnZV9jYWNoZSgpIHdpbGwgYmUgY2FsbGVkIHdpdGggR0ZQX05PV0FJVC4KKwkgKi8KKwllcnJvciA9IG1lbV9jZ3JvdXBfY2FjaGVfY2hhcmdlKHBhZ2UsIGN1cnJlbnQtPm1tLCBHRlBfS0VSTkVMKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0OworCS8qCisJICogVHJ5IHRvIHByZWxvYWQgd2hpbGUgd2UgY2FuIHdhaXQsIHRvIG5vdCBtYWtlIGEgaGFiaXQgb2YKKwkgKiBkcmFpbmluZyBhdG9taWMgcmVzZXJ2ZXM7IGJ1dCBkb24ndCBsYXRjaCBvbiB0byB0aGlzIGNwdSwKKwkgKiBpdCdzIG9rYXkgaWYgc29tZXRpbWVzIHdlIGdldCByZXNjaGVkdWxlZCBhZnRlciB0aGlzLgorCSAqLworCWVycm9yID0gcmFkaXhfdHJlZV9wcmVsb2FkKEdGUF9LRVJORUwpOworCWlmIChlcnJvcikKKwkJZ290byB1bmNoYXJnZTsKKwlyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7CiAKIAltdXRleF9sb2NrKCZzaG1lbV9zd2FwbGlzdF9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIG5leHQsICZzaG1lbV9zd2FwbGlzdCkgewpAQCAtMTAxNSwxNyArMTAxMiwxOSBAQAogCQlmb3VuZCA9IHNobWVtX3VudXNlX2lub2RlKGluZm8sIGVudHJ5LCBwYWdlKTsKIAkJY29uZF9yZXNjaGVkKCk7CiAJCWlmIChmb3VuZCkKLQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CiAJfQogCW11dGV4X3VubG9jaygmc2htZW1fc3dhcGxpc3RfbXV0ZXgpOwotCS8qCi0JICogQ2FuIHNvbWUgcmFjZSBicmluZyB1cyBoZXJlPyAgV2UndmUgYmVlbiBob2xkaW5nIHBhZ2UgbG9jaywKLQkgKiBzbyBJIHRoaW5rIG5vdDsgYnV0IHdvdWxkIHJhdGhlciB0cnkgYWdhaW4gbGF0ZXIgdGhhbiBCVUcoKQotCSAqLworCit1bmNoYXJnZToKKwlpZiAoIWZvdW5kKQorCQltZW1fY2dyb3VwX3VuY2hhcmdlX2NhY2hlX3BhZ2UocGFnZSk7CisJaWYgKGZvdW5kIDwgMCkKKwkJZXJyb3IgPSBmb3VuZDsKK291dDoKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci1vdXQ6Ci0JcmV0dXJuIChmb3VuZCA8IDApID8gZm91bmQgOiAwOworCXJldHVybiBlcnJvcjsKIH0KIAogLyoKQEAgLTEwNjMsNyArMTA2MiwyNSBAQAogCWVsc2UKIAkJc3dhcC52YWwgPSAwOwogCisJLyoKKwkgKiBBZGQgaW5vZGUgdG8gc2htZW1fdW51c2UoKSdzIGxpc3Qgb2Ygc3dhcHBlZC1vdXQgaW5vZGVzLAorCSAqIGlmIGl0J3Mgbm90IGFscmVhZHkgdGhlcmUuICBEbyBpdCBub3cgYmVjYXVzZSB3ZSBjYW5ub3QgdGFrZQorCSAqIG11dGV4IHdoaWxlIGhvbGRpbmcgc3BpbmxvY2ssIGFuZCBtdXN0IGRvIHNvIGJlZm9yZSB0aGUgcGFnZQorCSAqIGlzIG1vdmVkIHRvIHN3YXAgY2FjaGUsIHdoZW4gaXRzIHBhZ2Vsb2NrIG5vIGxvbmdlciBwcm90ZWN0cworCSAqIHRoZSBpbm9kZSBmcm9tIGV2aWN0aW9uLiAgQnV0IGRvbid0IHVubG9jayB0aGUgbXV0ZXggdW50aWwKKwkgKiB3ZSd2ZSB0YWtlbiB0aGUgc3BpbmxvY2ssIGJlY2F1c2Ugc2htZW1fdW51c2VfaW5vZGUoKSB3aWxsCisJICogcHJ1bmUgYSAhc3dhcHBlZCBpbm9kZSBmcm9tIHRoZSBzd2FwbGlzdCB1bmRlciBib3RoIGxvY2tzLgorCSAqLworCWlmIChzd2FwLnZhbCkgeworCQltdXRleF9sb2NrKCZzaG1lbV9zd2FwbGlzdF9tdXRleCk7CisJCWlmIChsaXN0X2VtcHR5KCZpbmZvLT5zd2FwbGlzdCkpCisJCQlsaXN0X2FkZF90YWlsKCZpbmZvLT5zd2FwbGlzdCwgJnNobWVtX3N3YXBsaXN0KTsKKwl9CisKIAlzcGluX2xvY2soJmluZm8tPmxvY2spOworCWlmIChzd2FwLnZhbCkKKwkJbXV0ZXhfdW5sb2NrKCZzaG1lbV9zd2FwbGlzdF9tdXRleCk7CisKIAlpZiAoaW5kZXggPj0gaW5mby0+bmV4dF9pbmRleCkgewogCQlCVUdfT04oIShpbmZvLT5mbGFncyAmIFNITUVNX1RSVU5DQVRFKSk7CiAJCWdvdG8gdW5sb2NrOwpAQCAtMTA4MywyMSArMTEwMCwxMCBAQAogCQlkZWxldGVfZnJvbV9wYWdlX2NhY2hlKHBhZ2UpOwogCQlzaG1lbV9zd3Bfc2V0KGluZm8sIGVudHJ5LCBzd2FwLnZhbCk7CiAJCXNobWVtX3N3cF91bm1hcChlbnRyeSk7Ci0JCWlmIChsaXN0X2VtcHR5KCZpbmZvLT5zd2FwbGlzdCkpCi0JCQlpbm9kZSA9IGlncmFiKGlub2RlKTsKLQkJZWxzZQotCQkJaW5vZGUgPSBOVUxMOwogCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CiAJCXN3YXBfc2htZW1fYWxsb2Moc3dhcCk7CiAJCUJVR19PTihwYWdlX21hcHBlZChwYWdlKSk7CiAJCXN3YXBfd3JpdGVwYWdlKHBhZ2UsIHdiYyk7Ci0JCWlmIChpbm9kZSkgewotCQkJbXV0ZXhfbG9jaygmc2htZW1fc3dhcGxpc3RfbXV0ZXgpOwotCQkJLyogbW92ZSBpbnN0ZWFkIG9mIGFkZCBpbiBjYXNlIHdlJ3JlIHJhY2luZyAqLwotCQkJbGlzdF9tb3ZlX3RhaWwoJmluZm8tPnN3YXBsaXN0LCAmc2htZW1fc3dhcGxpc3QpOwotCQkJbXV0ZXhfdW5sb2NrKCZzaG1lbV9zd2FwbGlzdF9tdXRleCk7Ci0JCQlpcHV0KGlub2RlKTsKLQkJfQogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTEzOTcsMjEgKzE0MDMsMTYgQEAKIAkJc2htZW1fc3dwX3VubWFwKGVudHJ5KTsKIAkJc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtPmlfc2IpOwogCQlpZiAoc2JpbmZvLT5tYXhfYmxvY2tzKSB7Ci0JCQlpZiAoKHBlcmNwdV9jb3VudGVyX2NvbXBhcmUoJnNiaW5mby0+dXNlZF9ibG9ja3MsIHNiaW5mby0+bWF4X2Jsb2NrcykgPiAwKSB8fAotCQkJICAgIHNobWVtX2FjY3RfYmxvY2soaW5mby0+ZmxhZ3MpKSB7Ci0JCQkJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOwotCQkJCWVycm9yID0gLUVOT1NQQzsKLQkJCQlnb3RvIGZhaWxlZDsKLQkJCX0KKwkJCWlmIChwZXJjcHVfY291bnRlcl9jb21wYXJlKCZzYmluZm8tPnVzZWRfYmxvY2tzLAorCQkJCQkJc2JpbmZvLT5tYXhfYmxvY2tzKSA+PSAwIHx8CisJCQkgICAgc2htZW1fYWNjdF9ibG9jayhpbmZvLT5mbGFncykpCisJCQkJZ290byBub3NwYWNlOwogCQkJcGVyY3B1X2NvdW50ZXJfaW5jKCZzYmluZm8tPnVzZWRfYmxvY2tzKTsKIAkJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCQlpbm9kZS0+aV9ibG9ja3MgKz0gQkxPQ0tTX1BFUl9QQUdFOwogCQkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCQl9IGVsc2UgaWYgKHNobWVtX2FjY3RfYmxvY2soaW5mby0+ZmxhZ3MpKSB7Ci0JCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7Ci0JCQllcnJvciA9IC1FTk9TUEM7Ci0JCQlnb3RvIGZhaWxlZDsKLQkJfQorCQl9IGVsc2UgaWYgKHNobWVtX2FjY3RfYmxvY2soaW5mby0+ZmxhZ3MpKQorCQkJZ290byBub3NwYWNlOwogCiAJCWlmICghZmlsZXBhZ2UpIHsKIAkJCWludCByZXQ7CkBAIC0xNDkxLDYgKzE0OTIsMjQgQEAKIAllcnJvciA9IDA7CiAJZ290byBvdXQ7CiAKK25vc3BhY2U6CisJLyoKKwkgKiBQZXJoYXBzIHRoZSBwYWdlIHdhcyBicm91Z2h0IGluIGZyb20gc3dhcCBiZXR3ZWVuIGZpbmRfbG9ja19wYWdlCisJICogYW5kIHRha2luZyBpbmZvLT5sb2NrPyAgV2UgYWxsb3cgZm9yIHRoYXQgYXQgYWRkX3RvX3BhZ2VfY2FjaGVfbHJ1LAorCSAqIGJ1dCBtdXN0IGFsc28gYXZvaWQgcmVwb3J0aW5nIGEgc3B1cmlvdXMgRU5PU1BDIHdoaWxlIHdvcmtpbmcgb24gYQorCSAqIGZ1bGwgdG1wZnMuICAoV2hlbiBmaWxlcGFnZSBoYXMgYmVlbiBwYXNzZWQgaW4gdG8gc2htZW1fZ2V0cGFnZSwgaXQKKwkgKiBpcyBhbHJlYWR5IGluIHBhZ2UgY2FjaGUsIHdoaWNoIHByZXZlbnRzIHRoaXMgcmFjZSBmcm9tIG9jY3VycmluZy4pCisJICovCisJaWYgKCFmaWxlcGFnZSkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZpbmRfZ2V0X3BhZ2UobWFwcGluZywgaWR4KTsKKwkJaWYgKHBhZ2UpIHsKKwkJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJCWdvdG8gcmVwZWF0OworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwllcnJvciA9IC1FTk9TUEM7CiBmYWlsZWQ6CiAJaWYgKCpwYWdlcCAhPSBmaWxlcGFnZSkgewogCQl1bmxvY2tfcGFnZShmaWxlcGFnZSk7CmRpZmYgLS1naXQgYS9tbS9zbGFiLmMgYi9tbS9zbGFiLmMKaW5kZXggNTY4ODAzZi4uNDZhOWMxNiAxMDA2NDQKLS0tIGEvbW0vc2xhYi5jCisrKyBiL21tL3NsYWIuYwpAQCAtODc4LDcgKzg3OCw3IEBACiAJbmMgPSBrbWFsbG9jX25vZGUobWVtc2l6ZSwgZ2ZwLCBub2RlKTsKIAkvKgogCSAqIFRoZSBhcnJheV9jYWNoZSBzdHJ1Y3R1cmVzIGNvbnRhaW4gcG9pbnRlcnMgdG8gZnJlZSBvYmplY3QuCi0JICogSG93ZXZlciwgd2hlbiBzdWNoIG9iamVjdHMgYXJlIGFsbG9jYXRlZCBvciB0cmFuc2ZlcmVkIHRvIGFub3RoZXIKKwkgKiBIb3dldmVyLCB3aGVuIHN1Y2ggb2JqZWN0cyBhcmUgYWxsb2NhdGVkIG9yIHRyYW5zZmVycmVkIHRvIGFub3RoZXIKIAkgKiBjYWNoZSB0aGUgcG9pbnRlcnMgYXJlIG5vdCBjbGVhcmVkIGFuZCB0aGV5IGNvdWxkIGJlIGNvdW50ZWQgYXMKIAkgKiB2YWxpZCByZWZlcmVuY2VzIGR1cmluZyBhIGttZW1sZWFrIHNjYW4uIFRoZXJlZm9yZSwga21lbWxlYWsgbXVzdAogCSAqIG5vdCBzY2FuIHN1Y2ggb2JqZWN0cy4KQEAgLTI2MDYsNyArMjYwNiw3IEBACiAgKgogICogVGhlIGNhY2hlIG11c3QgYmUgZW1wdHkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KICAqCi0gKiBUaGUgY2FsbGVyIG11c3QgZ3VhcmFudGVlIHRoYXQgbm9vbmUgd2lsbCBhbGxvY2F0ZSBtZW1vcnkgZnJvbSB0aGUgY2FjaGUKKyAqIFRoZSBjYWxsZXIgbXVzdCBndWFyYW50ZWUgdGhhdCBubyBvbmUgd2lsbCBhbGxvY2F0ZSBtZW1vcnkgZnJvbSB0aGUgY2FjaGUKICAqIGR1cmluZyB0aGUga21lbV9jYWNoZV9kZXN0cm95KCkuCiAgKi8KIHZvaWQga21lbV9jYWNoZV9kZXN0cm95KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXApCmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggZjg4MTg3NC4uOWQyZTVlNCAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCisrKyBiL21tL3NsdWIuYwpAQCAtNjQsNyArNjQsNyBAQAogICogICB3ZSBtdXN0IHN0YXkgYXdheSBmcm9tIGl0IGZvciBhIHdoaWxlIHNpbmNlIHdlIG1heSBjYXVzZSBhIGJvdW5jaW5nCiAgKiAgIGNhY2hlbGluZSBpZiB3ZSB0cnkgdG8gYWNxdWlyZSB0aGUgbG9jay4gU28gZ28gb250byB0aGUgbmV4dCBzbGFiLgogICogICBJZiBhbGwgcGFnZXMgYXJlIGJ1c3kgdGhlbiB3ZSBtYXkgYWxsb2NhdGUgYSBuZXcgc2xhYiBpbnN0ZWFkIG9mIHJldXNpbmcKLSAqICAgYSBwYXJ0aWFsIHNsYWIuIEEgbmV3IHNsYWIgaGFzIG5vb25lIG9wZXJhdGluZyBvbiBpdCBhbmQgdGh1cyB0aGVyZSBpcworICogICBhIHBhcnRpYWwgc2xhYi4gQSBuZXcgc2xhYiBoYXMgbm8gb25lIG9wZXJhdGluZyBvbiBpdCBhbmQgdGh1cyB0aGVyZSBpcwogICogICBubyBkYW5nZXIgb2YgY2FjaGVsaW5lIGNvbnRlbnRpb24uCiAgKgogICogICBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBkdXJpbmcgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGluIG9yZGVyIHRvCkBAIC0xOTI5LDcgKzE5MjksNyBAQAogCWVsc2UgewogI2lmZGVmIENPTkZJR19DTVBYQ0hHX0xPQ0FMCiAJCS8qCi0JCSAqIFRoZSBjbXB4Y2hnIHdpbGwgb25seSBtYXRjaCBpZiB0aGVyZSB3YXMgbm8gYWRkaXRvbmFsCisJCSAqIFRoZSBjbXB4Y2hnIHdpbGwgb25seSBtYXRjaCBpZiB0aGVyZSB3YXMgbm8gYWRkaXRpb25hbAogCQkgKiBvcGVyYXRpb24gYW5kIGlmIHdlIGFyZSBvbiB0aGUgcmlnaHQgcHJvY2Vzc29yLgogCQkgKgogCQkgKiBUaGUgY21weGNoZyBkb2VzIHRoZSBmb2xsb3dpbmcgYXRvbWljYWxseSAod2l0aG91dCBsb2NrIHNlbWFudGljcyEpCkBAIC0xOTQwLDcgKzE5NDAsNyBAQAogCQkgKiBTaW5jZSB0aGlzIGlzIHdpdGhvdXQgbG9jayBzZW1hbnRpY3MgdGhlIHByb3RlY3Rpb24gaXMgb25seSBhZ2FpbnN0CiAJCSAqIGNvZGUgZXhlY3V0aW5nIG9uIHRoaXMgY3B1ICpub3QqIGZyb20gYWNjZXNzIGJ5IG90aGVyIGNwdXMuCiAJCSAqLwotCQlpZiAodW5saWtlbHkoIXRoaXNfY3B1X2NtcHhjaGdfZG91YmxlKAorCQlpZiAodW5saWtlbHkoIWlycXNhZmVfY3B1X2NtcHhjaGdfZG91YmxlKAogCQkJCXMtPmNwdV9zbGFiLT5mcmVlbGlzdCwgcy0+Y3B1X3NsYWItPnRpZCwKIAkJCQlvYmplY3QsIHRpZCwKIAkJCQlnZXRfZnJlZXBvaW50ZXIocywgb2JqZWN0KSwgbmV4dF90aWQodGlkKSkpKSB7CkBAIC0yMTQ1LDcgKzIxNDUsNyBAQAogCQlzZXRfZnJlZXBvaW50ZXIocywgb2JqZWN0LCBjLT5mcmVlbGlzdCk7CiAKICNpZmRlZiBDT05GSUdfQ01QWENIR19MT0NBTAotCQlpZiAodW5saWtlbHkoIXRoaXNfY3B1X2NtcHhjaGdfZG91YmxlKAorCQlpZiAodW5saWtlbHkoIWlycXNhZmVfY3B1X2NtcHhjaGdfZG91YmxlKAogCQkJCXMtPmNwdV9zbGFiLT5mcmVlbGlzdCwgcy0+Y3B1X3NsYWItPnRpZCwKIAkJCQljLT5mcmVlbGlzdCwgdGlkLAogCQkJCW9iamVjdCwgbmV4dF90aWQodGlkKSkpKSB7CkBAIC0zNTQ3LDcgKzM1NDcsNyBAQAogCiAJcmV0ID0gc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgTlVNQV9OT19OT0RFLCBjYWxsZXIpOwogCi0JLyogSG9ub3IgdGhlIGNhbGwgc2l0ZSBwb2ludGVyIHdlIHJlY2lldmVkLiAqLworCS8qIEhvbm9yIHRoZSBjYWxsIHNpdGUgcG9pbnRlciB3ZSByZWNlaXZlZC4gKi8KIAl0cmFjZV9rbWFsbG9jKGNhbGxlciwgcmV0LCBzaXplLCBzLT5zaXplLCBnZnBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMzU3Nyw3ICszNTc3LDcgQEAKIAogCXJldCA9IHNsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIG5vZGUsIGNhbGxlcik7CiAKLQkvKiBIb25vciB0aGUgY2FsbCBzaXRlIHBvaW50ZXIgd2UgcmVjaWV2ZWQuICovCisJLyogSG9ub3IgdGhlIGNhbGwgc2l0ZSBwb2ludGVyIHdlIHJlY2VpdmVkLiAqLwogCXRyYWNlX2ttYWxsb2Nfbm9kZShjYWxsZXIsIHJldCwgc2l6ZSwgcy0+c2l6ZSwgZ2ZwZmxhZ3MsIG5vZGUpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL21tL3NwYXJzZS5jIGIvbW0vc3BhcnNlLmMKaW5kZXggOTMyNTAyMC4uYWE2NGIxMiAxMDA2NDQKLS0tIGEvbW0vc3BhcnNlLmMKKysrIGIvbW0vc3BhcnNlLmMKQEAgLTUwMCw3ICs1MDAsNyBAQAogCSAqIHNvIGFsbG9jIDJNICh3aXRoIDJNIGFsaWduKSBhbmQgMjQgYnl0ZXMgaW4gdHVybiB3aWxsCiAJICogbWFrZSBuZXh0IDJNIHNsaXAgdG8gb25lIG1vcmUgMk0gbGF0ZXIuCiAJICogdGhlbiBpbiBiaWcgc3lzdGVtLCB0aGUgbWVtb3J5IHdpbGwgaGF2ZSBhIGxvdCBvZiBob2xlcy4uLgotCSAqIGhlcmUgdHJ5IHRvIGFsbG9jYXRlIDJNIHBhZ2VzIGNvbnRpbm91c2x5LgorCSAqIGhlcmUgdHJ5IHRvIGFsbG9jYXRlIDJNIHBhZ2VzIGNvbnRpbnVvdXNseS4KIAkgKgogCSAqIHBvd2VycGMgbmVlZCB0byBjYWxsIHNwYXJzZV9pbml0X29uZV9zZWN0aW9uIHJpZ2h0IGFmdGVyIGVhY2gKIAkgKiBzcGFyc2VfZWFybHlfbWVtX21hcF9hbGxvYywgc28gYWxsb2NhdGUgdXNlbWFwX21hcCBhdCBmaXJzdC4KZGlmZiAtLWdpdCBhL21tL3N3YXAuYyBiL21tL3N3YXAuYwppbmRleCBhNDQ4ZGIzLi41NjAyZjFhIDEwMDY0NAotLS0gYS9tbS9zd2FwLmMKKysrIGIvbW0vc3dhcC5jCkBAIC0zOTYsNiArMzk2LDkgQEAKIAlpZiAoIVBhZ2VMUlUocGFnZSkpCiAJCXJldHVybjsKIAorCWlmIChQYWdlVW5ldmljdGFibGUocGFnZSkpCisJCXJldHVybjsKKwogCS8qIFNvbWUgcHJvY2Vzc2VzIGFyZSB1c2luZyB0aGUgcGFnZSAqLwogCWlmIChwYWdlX21hcHBlZChwYWdlKSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvbW0vdXRpbC5jIGIvbW0vdXRpbC5jCmluZGV4IGYxMjY5NzUuLmU3YjEwM2EgMTAwNjQ0Ci0tLSBhL21tL3V0aWwuYworKysgYi9tbS91dGlsLmMKQEAgLTIyNyw3ICsyMjcsNyBAQAogLyoKICAqIExpa2UgZ2V0X3VzZXJfcGFnZXNfZmFzdCgpIGV4Y2VwdCBpdHMgSVJRLXNhZmUgaW4gdGhhdCBpdCB3b24ndCBmYWxsCiAgKiBiYWNrIHRvIHRoZSByZWd1bGFyIEdVUC4KLSAqIElmIHRoZSBhcmNoaXRlY3R1cmUgbm90IHN1cHBvcnQgdGhpcyBmdWNudGlvbiwgc2ltcGx5IHJldHVybiB3aXRoIG5vCisgKiBJZiB0aGUgYXJjaGl0ZWN0dXJlIG5vdCBzdXBwb3J0IHRoaXMgZnVuY3Rpb24sIHNpbXBseSByZXR1cm4gd2l0aCBubwogICogcGFnZSBwaW5uZWQKICAqLwogaW50IF9fYXR0cmlidXRlX18oKHdlYWspKSBfX2dldF91c2VyX3BhZ2VzX2Zhc3QodW5zaWduZWQgbG9uZyBzdGFydCwKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggZjczYjg2NS4uOGJmZDQ1MCAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKKysrIGIvbW0vdm1zY2FuLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tZW1jb250cm9sLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXlhY2N0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisjaW5jbHVkZSA8bGludXgvb29tLmg+CiAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KQEAgLTkzNiw3ICs5MzcsNyBAQAogCSAqIGJhY2sgb2ZmIGFuZCB3YWl0IGZvciBjb25nZXN0aW9uIHRvIGNsZWFyIGJlY2F1c2UgZnVydGhlciByZWNsYWltCiAJICogd2lsbCBlbmNvdW50ZXIgdGhlIHNhbWUgcHJvYmxlbQogCSAqLwotCWlmIChucl9kaXJ0eSA9PSBucl9jb25nZXN0ZWQgJiYgbnJfZGlydHkgIT0gMCkKKwlpZiAobnJfZGlydHkgJiYgbnJfZGlydHkgPT0gbnJfY29uZ2VzdGVkICYmIHNjYW5uaW5nX2dsb2JhbF9scnUoc2MpKQogCQl6b25lX3NldF9mbGFnKHpvbmUsIFpPTkVfQ09OR0VTVEVEKTsKIAogCWZyZWVfcGFnZV9saXN0KCZmcmVlX3BhZ2VzKTsKQEAgLTEwNjUsNyArMTA2Niw3IEBACiAJCSAqIHN1cnJvdW5kaW5nIHRoZSB0YWcgcGFnZS4gIE9ubHkgdGFrZSB0aG9zZSBwYWdlcyBvZgogCQkgKiB0aGUgc2FtZSBhY3RpdmUgc3RhdGUgYXMgdGhhdCB0YWcgcGFnZS4gIFdlIG1heSBzYWZlbHkKIAkJICogcm91bmQgdGhlIHRhcmdldCBwYWdlIHBmbiBkb3duIHRvIHRoZSByZXF1ZXN0ZWQgb3JkZXIKLQkJICogYXMgdGhlIG1lbV9tYXAgaXMgZ3VhcmVudGVlZCB2YWxpZCBvdXQgdG8gTUFYX09SREVSLAorCQkgKiBhcyB0aGUgbWVtX21hcCBpcyBndWFyYW50ZWVkIHZhbGlkIG91dCB0byBNQVhfT1JERVIsCiAJCSAqIHdoZXJlIHRoYXQgcGFnZSBpcyBpbiBhIGRpZmZlcmVudCB6b25lIHdlIHdpbGwgZGV0ZWN0CiAJCSAqIGl0IGZyb20gaXRzIHpvbmUgaWQgYW5kIGFib3J0IHRoaXMgYmxvY2sgc2Nhbi4KIAkJICovCkBAIC0xOTg4LDE3ICsxOTg5LDEyIEBACiAJcmV0dXJuIHpvbmUtPnBhZ2VzX3NjYW5uZWQgPCB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHpvbmUpICogNjsKIH0KIAotLyoKLSAqIEFzIGhpYmVybmF0aW9uIGlzIGdvaW5nIG9uLCBrc3dhcGQgaXMgZnJlZXplZCBzbyB0aGF0IGl0IGNhbid0IG1hcmsKLSAqIHRoZSB6b25lIGludG8gYWxsX3VucmVjbGFpbWFibGUuIEl0IGNhbid0IGhhbmRsZSBPT00gZHVyaW5nIGhpYmVybmF0aW9uLgotICogU28gbGV0J3MgY2hlY2sgem9uZSdzIHVucmVjbGFpbWFibGUgaW4gZGlyZWN0IHJlY2xhaW0gYXMgd2VsbCBhcyBrc3dhcGQuCi0gKi8KKy8qIEFsbCB6b25lcyBpbiB6b25lbGlzdCBhcmUgdW5yZWNsYWltYWJsZT8gKi8KIHN0YXRpYyBib29sIGFsbF91bnJlY2xhaW1hYmxlKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsCiAJCXN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogewogCXN0cnVjdCB6b25lcmVmICp6OwogCXN0cnVjdCB6b25lICp6b25lOwotCWJvb2wgYWxsX3VucmVjbGFpbWFibGUgPSB0cnVlOwogCiAJZm9yX2VhY2hfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCB6b25lbGlzdCwKIAkJCWdmcF96b25lKHNjLT5nZnBfbWFzayksIHNjLT5ub2RlbWFzaykgewpAQCAtMjAwNiwxMyArMjAwMiwxMSBAQAogCQkJY29udGludWU7CiAJCWlmICghY3B1c2V0X3pvbmVfYWxsb3dlZF9oYXJkd2FsbCh6b25lLCBHRlBfS0VSTkVMKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoem9uZV9yZWNsYWltYWJsZSh6b25lKSkgewotCQkJYWxsX3VucmVjbGFpbWFibGUgPSBmYWxzZTsKLQkJCWJyZWFrOwotCQl9CisJCWlmICghem9uZS0+YWxsX3VucmVjbGFpbWFibGUpCisJCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JcmV0dXJuIGFsbF91bnJlY2xhaW1hYmxlOworCXJldHVybiB0cnVlOwogfQogCiAvKgpAQCAtMjEwOCw2ICsyMTAyLDE0IEBACiAJaWYgKHNjLT5ucl9yZWNsYWltZWQpCiAJCXJldHVybiBzYy0+bnJfcmVjbGFpbWVkOwogCisJLyoKKwkgKiBBcyBoaWJlcm5hdGlvbiBpcyBnb2luZyBvbiwga3N3YXBkIGlzIGZyZWV6ZWQgc28gdGhhdCBpdCBjYW4ndCBtYXJrCisJICogdGhlIHpvbmUgaW50byBhbGxfdW5yZWNsYWltYWJsZS4gVGh1cyBieXBhc3NpbmcgYWxsX3VucmVjbGFpbWFibGUKKwkgKiBjaGVjay4KKwkgKi8KKwlpZiAob29tX2tpbGxlcl9kaXNhYmxlZCkKKwkJcmV0dXJuIDA7CisKIAkvKiB0b3AgcHJpb3JpdHkgc2hyaW5rX3pvbmVzIHN0aWxsIGhhZCBtb3JlIHRvIGRvPyBkb24ndCBPT00sIHRoZW4gKi8KIAlpZiAoc2Nhbm5pbmdfZ2xvYmFsX2xydShzYykgJiYgIWFsbF91bnJlY2xhaW1hYmxlKHpvbmVsaXN0LCBzYykpCiAJCXJldHVybiAxOwpAQCAtMjIyNCw3ICsyMjI2LDcgQEAKICAqICAgbyBhIDE2TSBETUEgem9uZSB0aGF0IGlzIGJhbGFuY2VkIHdpbGwgbm90IGJhbGFuY2UgYSB6b25lIG9uIGFueQogICogICAgIHJlYXNvbmFibGUgc2l6ZWQgbWFjaGluZQogICogICBvIE9uIGFsbCBvdGhlciBtYWNoaW5lcywgdGhlIHRvcCB6b25lIG11c3QgYmUgYXQgbGVhc3QgYSByZWFzb25hYmxlCi0gKiAgICAgcHJlY2VudGFnZSBvZiB0aGUgbWlkZGxlIHpvbmVzLiBGb3IgZXhhbXBsZSwgb24gMzItYml0IHg4NiwgaGlnaG1lbQorICogICAgIHBlcmNlbnRhZ2Ugb2YgdGhlIG1pZGRsZSB6b25lcy4gRm9yIGV4YW1wbGUsIG9uIDMyLWJpdCB4ODYsIGhpZ2htZW0KICAqICAgICB3b3VsZCBuZWVkIHRvIGJlIGF0IGxlYXN0IDI1Nk0gZm9yIGl0IHRvIGJlIGJhbGFuY2UgYSB3aG9sZSBub2RlLgogICogICAgIFNpbWlsYXJseSwgb24geDg2LTY0IHRoZSBOb3JtYWwgem9uZSB3b3VsZCBuZWVkIHRvIGJlIGF0IGxlYXN0IDFHCiAgKiAgICAgdG8gYmFsYW5jZSBhIG5vZGUgb24gaXRzIG93bi4gVGhlc2Ugc2VlbWVkIGxpa2UgcmVhc29uYWJsZSByYXRpb3MuCmRpZmYgLS1naXQgYS9tbS92bXN0YXQuYyBiL21tL3Ztc3RhdC5jCmluZGV4IDc3MmIzOWIuLjg5N2VhOWUgMTAwNjQ0Ci0tLSBhL21tL3Ztc3RhdC5jCisrKyBiL21tL3Ztc3RhdC5jCkBAIC0zMjEsOSArMzIxLDEyIEBACiAJCS8qCiAJCSAqIFRoZSBmZXRjaGluZyBvZiB0aGUgc3RhdF90aHJlc2hvbGQgaXMgcmFjeS4gV2UgbWF5IGFwcGx5CiAJCSAqIGEgY291bnRlciB0aHJlc2hvbGQgdG8gdGhlIHdyb25nIHRoZSBjcHUgaWYgd2UgZ2V0Ci0JCSAqIHJlc2NoZWR1bGVkIHdoaWxlIGV4ZWN1dGluZyBoZXJlLiBIb3dldmVyLCB0aGUgZm9sbG93aW5nCi0JCSAqIHdpbGwgYXBwbHkgdGhlIHRocmVzaG9sZCBhZ2FpbiBhbmQgdGhlcmVmb3JlIGJyaW5nIHRoZQotCQkgKiBjb3VudGVyIHVuZGVyIHRoZSB0aHJlc2hvbGQuCisJCSAqIHJlc2NoZWR1bGVkIHdoaWxlIGV4ZWN1dGluZyBoZXJlLiBIb3dldmVyLCB0aGUgbmV4dAorCQkgKiBjb3VudGVyIHVwZGF0ZSB3aWxsIGFwcGx5IHRoZSB0aHJlc2hvbGQgYWdhaW4gYW5kCisJCSAqIHRoZXJlZm9yZSBicmluZyB0aGUgY291bnRlciB1bmRlciB0aGUgdGhyZXNob2xkIGFnYWluLgorCQkgKgorCQkgKiBNb3N0IG9mIHRoZSB0aW1lIHRoZSB0aHJlc2hvbGRzIGFyZSB0aGUgc2FtZSBhbnl3YXlzCisJCSAqIGZvciBhbGwgY3B1cyBpbiBhIHpvbmUuCiAJCSAqLwogCQl0ID0gdGhpc19jcHVfcmVhZChwY3AtPnN0YXRfdGhyZXNob2xkKTsKIApAQCAtOTQ1LDcgKzk0OCwxNiBAQAogCSJ1bmV2aWN0YWJsZV9wZ3NfY2xlYXJlZCIsCiAJInVuZXZpY3RhYmxlX3Bnc19zdHJhbmRlZCIsCiAJInVuZXZpY3RhYmxlX3Bnc19tbG9ja2ZyZWVkIiwKKworI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQorCSJ0aHBfZmF1bHRfYWxsb2MiLAorCSJ0aHBfZmF1bHRfZmFsbGJhY2siLAorCSJ0aHBfY29sbGFwc2VfYWxsb2MiLAorCSJ0aHBfY29sbGFwc2VfYWxsb2NfZmFpbGVkIiwKKwkidGhwX3NwbGl0IiwKICNlbmRpZgorCisjZW5kaWYgLyogQ09ORklHX1ZNX0VWRU5UU19DT1VOVEVSUyAqLwogfTsKIAogc3RhdGljIHZvaWQgem9uZWluZm9fc2hvd19wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHBnX2RhdGFfdCAqcGdkYXQsCmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5jIGIvbmV0LzgwMjFxL3ZsYW4uYwppbmRleCA3ODUwNDEyLi4wZWIxYTg4IDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbi5jCisrKyBiL25ldC84MDIxcS92bGFuLmMKQEAgLTEyNCw2ICsxMjQsOSBAQAogCiAJZ3JwLT5ucl92bGFucy0tOwogCisJaWYgKHZsYW4tPmZsYWdzICYgVkxBTl9GTEFHX0dWUlApCisJCXZsYW5fZ3ZycF9yZXF1ZXN0X2xlYXZlKGRldik7CisKIAl2bGFuX2dyb3VwX3NldF9kZXZpY2UoZ3JwLCB2bGFuX2lkLCBOVUxMKTsKIAlpZiAoIWdycC0+a2lsbGFsbCkKIAkJc3luY2hyb25pemVfbmV0KCk7CmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9kZXYuYyBiL25ldC84MDIxcS92bGFuX2Rldi5jCmluZGV4IGUzNGVhOWUuLmIyZmY2YzggMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuX2Rldi5jCisrKyBiL25ldC84MDIxcS92bGFuX2Rldi5jCkBAIC00ODcsOSArNDg3LDYgQEAKIAlzdHJ1Y3Qgdmxhbl9kZXZfaW5mbyAqdmxhbiA9IHZsYW5fZGV2X2luZm8oZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuLT5yZWFsX2RldjsKIAotCWlmICh2bGFuLT5mbGFncyAmIFZMQU5fRkxBR19HVlJQKQotCQl2bGFuX2d2cnBfcmVxdWVzdF9sZWF2ZShkZXYpOwotCiAJZGV2X21jX3Vuc3luYyhyZWFsX2RldiwgZGV2KTsKIAlkZXZfdWNfdW5zeW5jKHJlYWxfZGV2LCBkZXYpOwogCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW5wcm9jLmMgYi9uZXQvODAyMXEvdmxhbnByb2MuYwppbmRleCBkMTMxNGNmLi5kOTQwYzQ5IDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbnByb2MuYworKysgYi9uZXQvODAyMXEvdmxhbnByb2MuYwpAQCAtNTQsNyArNTQsNyBAQAogCiAvKgogICoJU3RydWN0dXJlcyBmb3IgaW50ZXJmYWNpbmcgd2l0aCB0aGUgL3Byb2MgZmlsZXN5c3RlbS4KLSAqCVZMQU4gY3JlYXRlcyBpdHMgb3duIGRpcmVjdG9yeSAvcHJvYy9uZXQvdmxhbiB3aXRoIHRoZSBmb2xvd2luZworICoJVkxBTiBjcmVhdGVzIGl0cyBvd24gZGlyZWN0b3J5IC9wcm9jL25ldC92bGFuIHdpdGggdGhlIGZvbGxvd2luZwogICoJZW50cmllczoKICAqCWNvbmZpZwkJZGV2aWNlIHN0YXR1cy9jb25maWd1cmF0aW9uCiAgKgk8ZGV2aWNlPgllbnRyeSBmb3IgZWFjaCAgZGV2aWNlCmRpZmYgLS1naXQgYS9uZXQvOXAvY2xpZW50LmMgYi9uZXQvOXAvY2xpZW50LmMKaW5kZXggMmNjYmYwNC4uYTlhYTJkZCAxMDA2NDQKLS0tIGEvbmV0LzlwL2NsaWVudC5jCisrKyBiL25ldC85cC9jbGllbnQuYwpAQCAtMTc4LDcgKzE3OCw3IEBACiAgKiBAdGFnOiBudW1lcmljIGlkIGZvciB0cmFuc2FjdGlvbgogICoKICAqIHRoaXMgaXMgYSBzaW1wbGUgYXJyYXkgbG9va3VwLCBidXQgd2lsbCBncm93IHRoZQotICogcmVxdWVzdF9zbG90cyBhcyBuZWNlc3NhcnkgdG8gYWNjb21vZGF0ZSB0cmFuc2FjdGlvbgorICogcmVxdWVzdF9zbG90cyBhcyBuZWNlc3NhcnkgdG8gYWNjb21tb2RhdGUgdHJhbnNhY3Rpb24KICAqIGlkcyB3aGljaCBkaWQgbm90IHByZXZpb3VzbHkgaGF2ZSBhIHNsb3QuCiAgKgogICogdGhpcyBjb2RlIHJlbGllcyBvbiB0aGUgY2xpZW50IHNwaW5sb2NrIHRvIG1hbmFnZSBsb2NrcywgaXRzCkBAIC02MTQsNyArNjE0LDcgQEAKIAogCWVyciA9IGMtPnRyYW5zX21vZC0+cmVxdWVzdChjLCByZXEpOwogCWlmIChlcnIgPCAwKSB7Ci0JCWlmIChlcnIgIT0gLUVSRVNUQVJUU1lTKQorCQlpZiAoZXJyICE9IC1FUkVTVEFSVFNZUyAmJiBlcnIgIT0gLUVGQVVMVCkKIAkJCWMtPnN0YXR1cyA9IERpc2Nvbm5lY3RlZDsKIAkJZ290byByZXRlcnI7CiAJfQpAQCAtOTI5LDE1ICs5MjksMTUgQEAKIH0KIEVYUE9SVF9TWU1CT0wocDlfY2xpZW50X2F0dGFjaCk7CiAKLXN0cnVjdCBwOV9maWQgKnA5X2NsaWVudF93YWxrKHN0cnVjdCBwOV9maWQgKm9sZGZpZCwgaW50IG53bmFtZSwgY2hhciAqKnduYW1lcywKLQlpbnQgY2xvbmUpCitzdHJ1Y3QgcDlfZmlkICpwOV9jbGllbnRfd2FsayhzdHJ1Y3QgcDlfZmlkICpvbGRmaWQsIHVpbnQxNl90IG53bmFtZSwKKwkJY2hhciAqKnduYW1lcywgaW50IGNsb25lKQogewogCWludCBlcnI7CiAJc3RydWN0IHA5X2NsaWVudCAqY2xudDsKIAlzdHJ1Y3QgcDlfZmlkICpmaWQ7CiAJc3RydWN0IHA5X3FpZCAqd3FpZHM7CiAJc3RydWN0IHA5X3JlcV90ICpyZXE7Ci0JaW50MTZfdCBud3FpZHMsIGNvdW50OworCXVpbnQxNl90IG53cWlkcywgY291bnQ7CiAKIAllcnIgPSAwOwogCXdxaWRzID0gTlVMTDsKQEAgLTk1NSw3ICs5NTUsNyBAQAogCQlmaWQgPSBvbGRmaWQ7CiAKIAotCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI+Pj4gVFdBTEsgZmlkcyAlZCwlZCBud25hbWUgJWQgd25hbWVbMF0gJXNcbiIsCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUV0FMSyBmaWRzICVkLCVkIG53bmFtZSAldWQgd25hbWVbMF0gJXNcbiIsCiAJCW9sZGZpZC0+ZmlkLCBmaWQtPmZpZCwgbnduYW1lLCB3bmFtZXMgPyB3bmFtZXNbMF0gOiBOVUxMKTsKIAogCXJlcSA9IHA5X2NsaWVudF9ycGMoY2xudCwgUDlfVFdBTEssICJkZFQiLCBvbGRmaWQtPmZpZCwgZmlkLT5maWQsCkBAIC0xMjIwLDI3ICsxMjIwLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0wocDlfY2xpZW50X2ZzeW5jKTsKIAotaW50IHA5X2NsaWVudF9zeW5jX2ZzKHN0cnVjdCBwOV9maWQgKmZpZCkKLXsKLQlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKLQlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUU1lOQ19GUyBmaWQgJWRcbiIsIGZpZC0+ZmlkKTsKLQotCWNsbnQgPSBmaWQtPmNsbnQ7Ci0JcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UU1lOQ0ZTLCAiZCIsIGZpZC0+ZmlkKTsKLQlpZiAoSVNfRVJSKHJlcSkpIHsKLQkJZXJyID0gUFRSX0VSUihyZXEpOwotCQlnb3RvIGVycm9yOwotCX0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IFJTWU5DRlMgZmlkICVkXG4iLCBmaWQtPmZpZCk7Ci0JcDlfZnJlZV9yZXEoY2xudCwgcmVxKTsKLWVycm9yOgotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9zeW5jX2ZzKTsKLQogaW50IHA5X2NsaWVudF9jbHVuayhzdHJ1Y3QgcDlfZmlkICpmaWQpCiB7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL25ldC85cC9wcm90b2NvbC5jIGIvbmV0LzlwL3Byb3RvY29sLmMKaW5kZXggOGE0MDg0Zi4uYTg3MzI3NyAxMDA2NDQKLS0tIGEvbmV0LzlwL3Byb3RvY29sLmMKKysrIGIvbmV0LzlwL3Byb3RvY29sLmMKQEAgLTI2NSw3ICsyNjUsNyBAQAogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgJ1QnOnsKLQkJCQlpbnQxNl90ICpud25hbWUgPSB2YV9hcmcoYXAsIGludDE2X3QgKik7CisJCQkJdWludDE2X3QgKm53bmFtZSA9IHZhX2FyZyhhcCwgdWludDE2X3QgKik7CiAJCQkJY2hhciAqKip3bmFtZXMgPSB2YV9hcmcoYXAsIGNoYXIgKioqKTsKIAogCQkJCWVycmNvZGUgPSBwOXBkdV9yZWFkZihwZHUsIHByb3RvX3ZlcnNpb24sCkBAIC00NjgsNyArNDY4LDggQEAKIAkJY2FzZSAnRSc6ewogCQkJCSBpbnQzMl90IGNudCA9IHZhX2FyZyhhcCwgaW50MzJfdCk7CiAJCQkJIGNvbnN0IGNoYXIgKmsgPSB2YV9hcmcoYXAsIGNvbnN0IHZvaWQgKik7Ci0JCQkJIGNvbnN0IGNoYXIgKnUgPSB2YV9hcmcoYXAsIGNvbnN0IHZvaWQgKik7CisJCQkJIGNvbnN0IGNoYXIgX191c2VyICp1ID0gdmFfYXJnKGFwLAorCQkJCQkJCWNvbnN0IHZvaWQgX191c2VyICopOwogCQkJCSBlcnJjb2RlID0gcDlwZHVfd3JpdGVmKHBkdSwgcHJvdG9fdmVyc2lvbiwgImQiLAogCQkJCQkJIGNudCk7CiAJCQkJIGlmICghZXJyY29kZSAmJiBwZHVfd3JpdGVfdXJ3KHBkdSwgaywgdSwgY250KSkKQEAgLTQ5NSw3ICs0OTYsNyBAQAogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgJ1QnOnsKLQkJCQlpbnQxNl90IG53bmFtZSA9IHZhX2FyZyhhcCwgaW50KTsKKwkJCQl1aW50MTZfdCBud25hbWUgPSB2YV9hcmcoYXAsIGludCk7CiAJCQkJY29uc3QgY2hhciAqKnduYW1lcyA9IHZhX2FyZyhhcCwgY29uc3QgY2hhciAqKik7CiAKIAkJCQllcnJjb2RlID0gcDlwZHVfd3JpdGVmKHBkdSwgcHJvdG9fdmVyc2lvbiwgInciLApAQCAtNjczLDYgKzY3NCw3IEBACiAJfQogCiAJc3RyY3B5KGRpcmVudC0+ZF9uYW1lLCBuYW1lcHRyKTsKKwlrZnJlZShuYW1lcHRyKTsKIAogb3V0OgogCXJldHVybiBmYWtlX3BkdS5vZmZzZXQ7CmRpZmYgLS1naXQgYS9uZXQvOXAvdHJhbnNfY29tbW9uLmMgYi9uZXQvOXAvdHJhbnNfY29tbW9uLmMKaW5kZXggOTE3MmFiNy4uOWE3MGViZCAxMDA2NDQKLS0tIGEvbmV0LzlwL3RyYW5zX2NvbW1vbi5jCisrKyBiL25ldC85cC90cmFuc19jb21tb24uYwpAQCAtMzYsNyArMzYsNyBAQAogRVhQT1JUX1NZTUJPTChwOV9yZWxlYXNlX3JlcV9wYWdlcyk7CiAKIC8qKgotICogcDlfbnJfcGFnZXMgLSBSZXR1cm4gbnVtYmVyIG9mIHBhZ2VzIG5lZWRlZCB0byBhY2NvbW9kYXRlIHRoZSBwYXlsb2FkLgorICogcDlfbnJfcGFnZXMgLSBSZXR1cm4gbnVtYmVyIG9mIHBhZ2VzIG5lZWRlZCB0byBhY2NvbW1vZGF0ZSB0aGUgcGF5bG9hZC4KICAqLwogaW50CiBwOV9ucl9wYWdlcyhzdHJ1Y3QgcDlfcmVxX3QgKnJlcSkKQEAgLTU1LDcgKzU1LDcgQEAKICAqIEByZXE6IFJlcXVlc3QgdG8gYmUgc2VudCB0byBzZXJ2ZXIuCiAgKiBAcGRhdGFfb2ZmOiBkYXRhIG9mZnNldCBpbnRvIHRoZSBmaXJzdCBwYWdlIGFmdGVyIHRyYW5zbGF0aW9uIChndXApLgogICogQHBkYXRhX2xlbjogVG90YWwgbGVuZ3RoIG9mIHRoZSBJTy4gZ3VwIG1heSBub3QgcmV0dXJuIHJlcXVlc3RlZCAjIG9mIHBhZ2VzLgotICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMgdG8gYWNjb21vZGF0ZSB0aGUgcGF5bG9hZAorICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMgdG8gYWNjb21tb2RhdGUgdGhlIHBheWxvYWQKICAqIEBydzogSW5kaWNhdGVzIGlmIHRoZSBwYWdlcyBhcmUgZm9yIHJlYWQgb3Igd3JpdGUuCiAgKi8KIGludApAQCAtNjMsMTAgKzYzLDEwIEBACiAJCWludCBucl9wYWdlcywgdTggcncpCiB7CiAJdWludDMyX3QgZmlyc3RfcGFnZV9ieXRlcyA9IDA7Ci0JdWludDMyX3QgcGRhdGFfbWFwcGVkX3BhZ2VzOworCWludDMyX3QgcGRhdGFfbWFwcGVkX3BhZ2VzOwogCXN0cnVjdCB0cmFuc19ycGFnZV9pbmZvICAqcnBpbmZvOwogCi0JKnBkYXRhX29mZiA9IChzaXplX3QpcmVxLT50Yy0+cHVidWYgJiAoUEFHRV9TSVpFLTEpOworCSpwZGF0YV9vZmYgPSAoX19mb3JjZSBzaXplX3QpcmVxLT50Yy0+cHVidWYgJiAoUEFHRV9TSVpFLTEpOwogCiAJaWYgKCpwZGF0YV9vZmYpCiAJCWZpcnN0X3BhZ2VfYnl0ZXMgPSBtaW4oKChzaXplX3QpUEFHRV9TSVpFIC0gKnBkYXRhX29mZiksCkBAIC03NSwxNCArNzUsOSBAQAogCXJwaW5mbyA9IHJlcS0+dGMtPnByaXZhdGU7CiAJcGRhdGFfbWFwcGVkX3BhZ2VzID0gZ2V0X3VzZXJfcGFnZXNfZmFzdCgodW5zaWduZWQgbG9uZylyZXEtPnRjLT5wdWJ1ZiwKIAkJCW5yX3BhZ2VzLCBydywgJnJwaW5mby0+cnBfZGF0YVswXSk7CisJaWYgKHBkYXRhX21hcHBlZF9wYWdlcyA8PSAwKQorCQlyZXR1cm4gcGRhdGFfbWFwcGVkX3BhZ2VzOwogCi0JaWYgKHBkYXRhX21hcHBlZF9wYWdlcyA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJnZXRfdXNlcl9wYWdlc19mYXN0IGZhaWxlZDolZCB1ZGF0YTolcCIKLQkJCQkibnJfcGFnZXM6JWRcbiIsIHBkYXRhX21hcHBlZF9wYWdlcywKLQkJCQlyZXEtPnRjLT5wdWJ1ZiwgbnJfcGFnZXMpOwotCQlwZGF0YV9tYXBwZWRfcGFnZXMgPSAwOwotCQlyZXR1cm4gLUVJTzsKLQl9CiAJcnBpbmZvLT5ycF9ucl9wYWdlcyA9IHBkYXRhX21hcHBlZF9wYWdlczsKIAlpZiAoKnBkYXRhX29mZikgewogCQkqcGRhdGFfbGVuID0gZmlyc3RfcGFnZV9ieXRlczsKZGlmZiAtLWdpdCBhL25ldC85cC90cmFuc192aXJ0aW8uYyBiL25ldC85cC90cmFuc192aXJ0aW8uYwppbmRleCBlOGYwNDZiLi4yNDRlNzA3IDEwMDY0NAotLS0gYS9uZXQvOXAvdHJhbnNfdmlydGlvLmMKKysrIGIvbmV0LzlwL3RyYW5zX3ZpcnRpby5jCkBAIC0zMjYsOCArMzI2LDExIEBACiAJCQlvdXRwID0gcGFja19zZ19saXN0X3AoY2hhbi0+c2csIG91dCwgVklSVFFVRVVFX05VTSwKIAkJCQkJcGRhdGFfb2ZmLCBycGluZm8tPnJwX2RhdGEsIHBkYXRhX2xlbik7CiAJCX0gZWxzZSB7Ci0JCQljaGFyICpwYnVmID0gcmVxLT50Yy0+cHVidWYgPyByZXEtPnRjLT5wdWJ1ZiA6Ci0JCQkJCQkJCXJlcS0+dGMtPnBrYnVmOworCQkJY2hhciAqcGJ1ZjsKKwkJCWlmIChyZXEtPnRjLT5wdWJ1ZikKKwkJCQlwYnVmID0gKF9fZm9yY2UgY2hhciAqKSByZXEtPnRjLT5wdWJ1ZjsKKwkJCWVsc2UKKwkJCQlwYnVmID0gcmVxLT50Yy0+cGtidWY7CiAJCQlvdXRwID0gcGFja19zZ19saXN0KGNoYW4tPnNnLCBvdXQsIFZJUlRRVUVVRV9OVU0sIHBidWYsCiAJCQkJCXJlcS0+dGMtPnBidWZfc2l6ZSk7CiAJCX0KQEAgLTM1Miw4ICszNTUsMTIgQEAKIAkJCWluID0gcGFja19zZ19saXN0X3AoY2hhbi0+c2csIG91dCtpbnAsIFZJUlRRVUVVRV9OVU0sCiAJCQkJCXBkYXRhX29mZiwgcnBpbmZvLT5ycF9kYXRhLCBwZGF0YV9sZW4pOwogCQl9IGVsc2UgewotCQkJY2hhciAqcGJ1ZiA9IHJlcS0+dGMtPnB1YnVmID8gcmVxLT50Yy0+cHVidWYgOgotCQkJCQkJCQlyZXEtPnRjLT5wa2J1ZjsKKwkJCWNoYXIgKnBidWY7CisJCQlpZiAocmVxLT50Yy0+cHVidWYpCisJCQkJcGJ1ZiA9IChfX2ZvcmNlIGNoYXIgKikgcmVxLT50Yy0+cHVidWY7CisJCQllbHNlCisJCQkJcGJ1ZiA9IHJlcS0+dGMtPnBrYnVmOworCiAJCQlpbiA9IHBhY2tfc2dfbGlzdChjaGFuLT5zZywgb3V0K2lucCwgVklSVFFVRVVFX05VTSwKIAkJCQkJcGJ1ZiwgcmVxLT50Yy0+cGJ1Zl9zaXplKTsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0LzlwL3V0aWwuYyBiL25ldC85cC91dGlsLmMKaW5kZXggYjg0NjE5Yi4uZGE2YWY4MSAxMDA2NDQKLS0tIGEvbmV0LzlwL3V0aWwuYworKysgYi9uZXQvOXAvdXRpbC5jCkBAIC02Nyw3ICs2Nyw3IEBACiAKIC8qKgogICogcDlfaWRwb29sX2Rlc3Ryb3kgLSBjcmVhdGUgYSBuZXcgcGVyLWNvbm5lY3Rpb24gaWQgcG9vbAotICogQHA6IGlkcG9vbCB0byBkZXN0b3J5CisgKiBAcDogaWRwb29sIHRvIGRlc3Ryb3kKICAqLwogCiB2b2lkIHA5X2lkcG9vbF9kZXN0cm95KHN0cnVjdCBwOV9pZHBvb2wgKnApCmRpZmYgLS1naXQgYS9uZXQvYXRtL2JyMjY4NC5jIGIvbmV0L2F0bS9icjI2ODQuYwppbmRleCBmY2UyZWFlLi4yMjUyYzIwIDEwMDY0NAotLS0gYS9uZXQvYXRtL2JyMjY4NC5jCisrKyBiL25ldC9hdG0vYnIyNjg0LmMKQEAgLTUwOSw3ICs1MDksNyBAQAogCXdyaXRlX2xvY2tfaXJxKCZkZXZzX2xvY2spOwogCW5ldF9kZXYgPSBicjI2ODRfZmluZF9kZXYoJmJlLmlmc3BlYyk7CiAJaWYgKG5ldF9kZXYgPT0gTlVMTCkgewotCQlwcl9lcnIoInRyaWVkIHRvIGF0dGFjaCB0byBub24tZXhpc3RhbnQgZGV2aWNlXG4iKTsKKwkJcHJfZXJyKCJ0cmllZCB0byBhdHRhY2ggdG8gbm9uLWV4aXN0ZW50IGRldmljZVxuIik7CiAJCWVyciA9IC1FTlhJTzsKIAkJZ290byBlcnJvcjsKIAl9CmRpZmYgLS1naXQgYS9uZXQvYXRtL2xlYy5oIGIvbmV0L2F0bS9sZWMuaAppbmRleCA5ZDE0ZDE5Li5kZmMwNzE5IDEwMDY0NAotLS0gYS9uZXQvYXRtL2xlYy5oCisrKyBiL25ldC9hdG0vbGVjLmgKQEAgLTM1LDcgKzM1LDcgQEAKICAqIE9wZXJhdGlvbnMgdGhhdCBMQU5FMiBjYXBhYmxlIGRldmljZSBjYW4gZG8uIFR3byBmaXJzdCBmdW5jdGlvbnMKICAqIGFyZSB1c2VkIHRvIG1ha2UgdGhlIGRldmljZSBkbyB0aGluZ3MuIFNlZSBzcGVjIDMuMS4zIGFuZCAzLjEuNC4KICAqCi0gKiBUaGUgdGhpcmQgZnVuY3Rpb24gaXMgaW50ZW50ZWQgZm9yIHRoZSBNUE9BIGNvbXBvbmVudCBzaXR0aW5nIG9uCisgKiBUaGUgdGhpcmQgZnVuY3Rpb24gaXMgaW50ZW5kZWQgZm9yIHRoZSBNUE9BIGNvbXBvbmVudCBzaXR0aW5nIG9uCiAgKiB0b3Agb2YgdGhlIExBTkUgZGV2aWNlLiBUaGUgTVBPQSBjb21wb25lbnQgYXNzaWducyBpdCdzIG93biBmdW5jdGlvbgogICogdG8gKCphc3NvY2lhdGVfaW5kaWNhdG9yKSgpIGFuZCB0aGUgTEFORSBkZXZpY2Ugd2lsbCB1c2UgdGhhdAogICogZnVuY3Rpb24gdG8gdGVsbCBhYm91dCBUTFZzIGl0IHNlZXMgZmxvYXRpbmcgdGhyb3VnaC4KZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3NvZnQtaW50ZXJmYWNlLmMgYi9uZXQvYmF0bWFuLWFkdi9zb2Z0LWludGVyZmFjZS5jCmluZGV4IDllZDI2MTQuLjgyNGUxZjYgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L3NvZnQtaW50ZXJmYWNlLmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvc29mdC1pbnRlcmZhY2UuYwpAQCAtNDc0LDcgKzQ3NCw3IEBACiAJCWdvdG8gZHJvcHBlZDsKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBzb2Z0X2lmYWNlKTsKIAotCS8qIHNob3VsZCBub3QgYmUgbmVjY2VzYXJ5IGFueW1vcmUgYXMgd2UgdXNlIHNrYl9wdWxsX3Jjc3VtKCkKKwkvKiBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSBhbnltb3JlIGFzIHdlIHVzZSBza2JfcHVsbF9yY3N1bSgpCiAJICogVE9ETzogcGxlYXNlIHZlcmlmeSB0aGlzIGFuZCByZW1vdmUgdGhpcyBUT0RPCiAJICogLS0gRGVjIDIxc3QgMjAwOSwgU2ltb24gV3VuZGVybGljaCAqLwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKaW5kZXggMjIxNjYyMC4uYjVhOGFmYyAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwpAQCAtNTg3LDEwICs1ODcsOCBAQAogCWhjaV9yZXFfY2FuY2VsKGhkZXYsIEVOT0RFVik7CiAJaGNpX3JlcV9sb2NrKGhkZXYpOwogCi0JLyogU3RvcCB0aW1lciwgaXQgbWlnaHQgYmUgcnVubmluZyAqLwotCWRlbF90aW1lcl9zeW5jKCZoZGV2LT5jbWRfdGltZXIpOwotCiAJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoSENJX1VQLCAmaGRldi0+ZmxhZ3MpKSB7CisJCWRlbF90aW1lcl9zeW5jKCZoZGV2LT5jbWRfdGltZXIpOwogCQloY2lfcmVxX3VubG9jayhoZGV2KTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNjI5LDYgKzYyNyw3IEBACiAKIAkvKiBEcm9wIGxhc3Qgc2VudCBjb21tYW5kICovCiAJaWYgKGhkZXYtPnNlbnRfY21kKSB7CisJCWRlbF90aW1lcl9zeW5jKCZoZGV2LT5jbWRfdGltZXIpOwogCQlrZnJlZV9za2IoaGRldi0+c2VudF9jbWQpOwogCQloZGV2LT5zZW50X2NtZCA9IE5VTEw7CiAJfQpAQCAtMTg4Myw3ICsxODgyLDcgQEAKIAlyZWFkX3VubG9jaygmaGNpX3Rhc2tfbG9jayk7CiB9CiAKLS8qIC0tLS0tIEhDSSBSWCB0YXNrIChpbmNvbWluZyBkYXRhIHByb2NjZXNzaW5nKSAtLS0tLSAqLworLyogLS0tLS0gSENJIFJYIHRhc2sgKGluY29taW5nIGRhdGEgcHJvY2Vzc2luZykgLS0tLS0gKi8KIAogLyogQUNMIGRhdGEgcGFja2V0ICovCiBzdGF0aWMgaW5saW5lIHZvaWQgaGNpX2FjbGRhdGFfcGFja2V0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYyBiL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKaW5kZXggY2ViZTc1ODguLmIyNTcwMTUgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYwpAQCAtMjM4Nyw4ICsyMzg3LDYgQEAKIAlpZiAoIWNvbm4pCiAJCWdvdG8gdW5sb2NrOwogCi0JaGNpX2Nvbm5faG9sZChjb25uKTsKLQogCWNvbm4tPnJlbW90ZV9jYXAgPSBldi0+Y2FwYWJpbGl0eTsKIAljb25uLT5yZW1vdGVfb29iID0gZXYtPm9vYl9kYXRhOwogCWNvbm4tPnJlbW90ZV9hdXRoID0gZXYtPmF1dGhlbnRpY2F0aW9uOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9sMmNhcF9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYwppbmRleCBjYTI3ZjNhLi4yYzhkZDQ0IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYwpAQCAtMTA1MSw2ICsxMDUxLDcgQEAKIAl0eF9za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKIAlidF9jYihza2IpLT5yZXRyaWVzKys7CiAJY29udHJvbCA9IGdldF91bmFsaWduZWRfbGUxNih0eF9za2ItPmRhdGEgKyBMMkNBUF9IRFJfU0laRSk7CisJY29udHJvbCAmPSBMMkNBUF9DVFJMX1NBUjsKIAogCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU0VORF9GQklUKSB7CiAJCWNvbnRyb2wgfD0gTDJDQVBfQ1RSTF9GSU5BTDsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvbDJjYXBfc29jay5jIGIvbmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmMKaW5kZXggZjc3MzA4ZS4uMjk5ZmU1NiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmMKKysrIGIvbmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmMKQEAgLTY3OSw3ICs2NzksNyBAQAogCiAJCWlmIChvcHQgPT0gQlRfRkxVU0hBQkxFX09GRikgewogCQkJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47Ci0JCQkvKiBwcm9jZWVkIGZ1dGhlciBvbmx5IHdoZW4gd2UgaGF2ZSBsMmNhcF9jb25uIGFuZAorCQkJLyogcHJvY2VlZCBmdXJ0aGVyIG9ubHkgd2hlbiB3ZSBoYXZlIGwyY2FwX2Nvbm4gYW5kCiAJCQkgICBObyBGbHVzaCBzdXBwb3J0IGluIHRoZSBMTSAqLwogCQkJaWYgKCFjb25uIHx8ICFsbXBfbm9fZmx1c2hfY2FwYWJsZShjb25uLT5oY29uLT5oZGV2KSkgewogCQkJCWVyciA9IC1FSU5WQUw7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2ZkYi5jIGIvbmV0L2JyaWRnZS9icl9mZGIuYwppbmRleCA4ODQ4NWNjLi5jYzRkM2M1IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2ZkYi5jCisrKyBiL25ldC9icmlkZ2UvYnJfZmRiLmMKQEAgLTE2OSw3ICsxNjksNyBAQAogCXNwaW5fdW5sb2NrX2JoKCZici0+aGFzaF9sb2NrKTsKIH0KIAotLyogRmx1c2ggYWxsIGVudHJpZXMgcmVmZXJpbmcgdG8gYSBzcGVjaWZpYyBwb3J0LgorLyogRmx1c2ggYWxsIGVudHJpZXMgcmVmZXJyaW5nIHRvIGEgc3BlY2lmaWMgcG9ydC4KICAqIGlmIGRvX2FsbCBpcyBzZXQgYWxzbyBmbHVzaCBzdGF0aWMgZW50cmllcwogICovCiB2b2lkIGJyX2ZkYl9kZWxldGVfYnlfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKaW5kZXggZTIxNjA3OS4uMGM3YmFkYSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jCisrKyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwpAQCAtMTY0LDcgKzE2NCw3IEBACiAJCQlnb3RvIGRyb3A7CiAKIAkJLyogSWYgU1RQIGlzIHR1cm5lZCBvZmYsIHRoZW4gZm9yd2FyZCAqLwotCQlpZiAocC0+YnItPnN0cF9lbmFibGVkID09IEJSX05PX1NUUCkKKwkJaWYgKHAtPmJyLT5zdHBfZW5hYmxlZCA9PSBCUl9OT19TVFAgJiYgZGVzdFs1XSA9PSAwKQogCQkJZ290byBmb3J3YXJkOwogCiAJCWlmIChORl9IT09LKE5GUFJPVE9fQlJJREdFLCBORl9CUl9MT0NBTF9JTiwgc2tiLCBza2ItPmRldiwKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaW9jdGwuYyBiL25ldC9icmlkZ2UvYnJfaW9jdGwuYwppbmRleCBjYjQzMzEyLi4zZDlmY2EwIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lvY3RsLmMKKysrIGIvbmV0L2JyaWRnZS9icl9pb2N0bC5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIC8qCiAgKiBMZWdhY3kgaW9jdGwncyB0aHJvdWdoIFNJT0NERVZQUklWQVRFCiAgKiBUaGlzIGludGVyZmFjZSBpcyBkZXByZWNhdGVkIGJlY2F1c2UgaXQgd2FzIHRvbyBkaWZmaWN1bHQgdG8KLSAqIHRvIGRvIHRoZSB0cmFuc2xhdGlvbiBmb3IgMzIvNjRiaXQgaW9jdGwgY29tcGF0YWJpbGl0eS4KKyAqIHRvIGRvIHRoZSB0cmFuc2xhdGlvbiBmb3IgMzIvNjRiaXQgaW9jdGwgY29tcGF0aWJpbGl0eS4KICAqLwogc3RhdGljIGludCBvbGRfZGV2X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCiB7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwppbmRleCAwMDhmZjZjLi43NGVmNGQ0IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCisrKyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKQEAgLTI0OSwxMSArMjQ5LDkgQEAKIAkJZ290byBkcm9wOwogCX0KIAotCS8qIFplcm8gb3V0IHRoZSBDQiBidWZmZXIgaWYgbm8gb3B0aW9ucyBwcmVzZW50ICovCi0JaWYgKGlwaC0+aWhsID09IDUpIHsKLQkJbWVtc2V0KElQQ0Ioc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBpbmV0X3NrYl9wYXJtKSk7CisJbWVtc2V0KElQQ0Ioc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBpbmV0X3NrYl9wYXJtKSk7CisJaWYgKGlwaC0+aWhsID09IDUpCiAJCXJldHVybiAwOwotCX0KIAogCW9wdC0+b3B0bGVuID0gaXBoLT5paGwqNCAtIHNpemVvZihzdHJ1Y3QgaXBoZHIpOwogCWlmIChpcF9vcHRpb25zX2NvbXBpbGUoZGV2X25ldChkZXYpLCBvcHQsIHNrYikpCkBAIC03MzksNyArNzM3LDcgQEAKIAkJbmZfYnJpZGdlLT5tYXNrIHw9IEJSTkZfUEtUX1RZUEU7CiAJfQogCi0JaWYgKGJyX3BhcnNlX2lwX29wdGlvbnMoc2tiKSkKKwlpZiAocGYgPT0gUEZfSU5FVCAmJiBicl9wYXJzZV9pcF9vcHRpb25zKHNrYikpCiAJCXJldHVybiBORl9EUk9QOwogCiAJLyogVGhlIHBoeXNkZXYgbW9kdWxlIGNoZWNrcyBvbiB0aGlzICovCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwppbmRleCA4OTM2NjljLi4xYTkyYjM2IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKQEAgLTE3NjYsNyArMTc2Niw3IEBACiAKIAluZXdpbmZvLT5lbnRyaWVzX3NpemUgPSBzaXplOwogCi0JeHRfY29tcGF0X2luaXRfb2Zmc2V0cyhBRl9JTkVULCBpbmZvLT5uZW50cmllcyk7CisJeHRfY29tcGF0X2luaXRfb2Zmc2V0cyhORlBST1RPX0JSSURHRSwgaW5mby0+bmVudHJpZXMpOwogCXJldHVybiBFQlRfRU5UUllfSVRFUkFURShlbnRyaWVzLCBzaXplLCBjb21wYXRfY2FsY19lbnRyeSwgaW5mbywKIAkJCQkJCQllbnRyaWVzLCBuZXdpbmZvKTsKIH0KQEAgLTE4ODIsNyArMTg4Miw3IEBACiAJc3RydWN0IHh0X21hdGNoICptYXRjaDsKIAlzdHJ1Y3QgeHRfdGFyZ2V0ICp3dDsKIAl2b2lkICpkc3QgPSBOVUxMOwotCWludCBvZmYsIHBhZCA9IDAsIHJldCA9IDA7CisJaW50IG9mZiwgcGFkID0gMDsKIAl1bnNpZ25lZCBpbnQgc2l6ZV9rZXJuLCBlbnRyeV9vZmZzZXQsIG1hdGNoX3NpemUgPSBtd3QtPm1hdGNoX3NpemU7CiAKIAlzdHJsY3B5KG5hbWUsIG13dC0+dS5uYW1lLCBzaXplb2YobmFtZSkpOwpAQCAtMTkzNSwxMyArMTkzNSw2IEBACiAJCWJyZWFrOwogCX0KIAotCWlmICghZHN0KSB7Ci0JCXJldCA9IHh0X2NvbXBhdF9hZGRfb2Zmc2V0KE5GUFJPVE9fQlJJREdFLCBlbnRyeV9vZmZzZXQsCi0JCQkJCW9mZiArIGVidF9jb21wYXRfZW50cnlfcGFkc2l6ZSgpKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCX0KLQogCXN0YXRlLT5idWZfa2Vybl9vZmZzZXQgKz0gbWF0Y2hfc2l6ZSArIG9mZjsKIAlzdGF0ZS0+YnVmX3VzZXJfb2Zmc2V0ICs9IG1hdGNoX3NpemU7CiAJcGFkID0gWFRfQUxJR04oc2l6ZV9rZXJuKSAtIHNpemVfa2VybjsKQEAgLTIwMTYsNTAgKzIwMDksNiBAQAogCXJldHVybiBncm93dGg7CiB9CiAKLSNkZWZpbmUgRUJUX0NPTVBBVF9XQVRDSEVSX0lURVJBVEUoZSwgZm4sIGFyZ3MuLi4pICAgICAgICAgIFwKLSh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl1bnNpZ25lZCBpbnQgX19pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWludCBfX3JldCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0Jc3RydWN0IGNvbXBhdF9lYnRfZW50cnlfbXd0ICpfX3dhdGNoZXI7ICAgICAgICAgICAgIFwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWZvciAoX19pID0gZS0+d2F0Y2hlcnNfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICBcCi0JICAgICBfX2kgPCAoZSktPnRhcmdldF9vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAgIFwKLQkgICAgIF9faSArPSBfX3dhdGNoZXItPndhdGNoZXJfc2l6ZSArICAgICAgICAgICAgICAgXAotCSAgICAgc2l6ZW9mKHN0cnVjdCBjb21wYXRfZWJ0X2VudHJ5X213dCkpIHsgICAgICAgICBcCi0JCV9fd2F0Y2hlciA9ICh2b2lkICopKGUpICsgX19pOyAgICAgICAgICAgICAgXAotCQlfX3JldCA9IGZuKF9fd2F0Y2hlciAsICMjIGFyZ3MpOyAgICAgICAgICAgIFwKLQkJaWYgKF9fcmV0ICE9IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQlicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlpZiAoX19yZXQgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlpZiAoX19pICE9IChlKS0+dGFyZ2V0X29mZnNldCkgICAgICAgICAgICAgIFwKLQkJCV9fcmV0ID0gLUVJTlZBTDsgICAgICAgICAgICAgICAgICAgIFwKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCV9fcmV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19KQotCi0jZGVmaW5lIEVCVF9DT01QQVRfTUFUQ0hfSVRFUkFURShlLCBmbiwgYXJncy4uLikgICAgICAgICAgICBcCi0oeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JdW5zaWduZWQgaW50IF9faTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlpbnQgX19yZXQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXN0cnVjdCBjb21wYXRfZWJ0X2VudHJ5X213dCAqX19tYXRjaDsgICAgICAgICAgICAgICBcCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlmb3IgKF9faSA9IHNpemVvZihzdHJ1Y3QgZWJ0X2VudHJ5KTsgICAgICAgICAgICAgICAgXAotCSAgICAgX19pIDwgKGUpLT53YXRjaGVyc19vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICBcCi0JICAgICBfX2kgKz0gX19tYXRjaC0+bWF0Y2hfc2l6ZSArICAgICAgICAgICAgICAgICAgIFwKLQkgICAgIHNpemVvZihzdHJ1Y3QgY29tcGF0X2VidF9lbnRyeV9td3QpKSB7ICAgICAgICAgXAotCQlfX21hdGNoID0gKHZvaWQgKikoZSkgKyBfX2k7ICAgICAgICAgICAgICAgIFwKLQkJX19yZXQgPSBmbihfX21hdGNoICwgIyMgYXJncyk7ICAgICAgICAgICAgICBcCi0JCWlmIChfX3JldCAhPSAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JaWYgKF9fcmV0ID09IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJaWYgKF9faSAhPSAoZSktPndhdGNoZXJzX29mZnNldCkgICAgICAgICAgICBcCi0JCQlfX3JldCA9IC1FSU5WQUw7ICAgICAgICAgICAgICAgICAgICBcCi0JfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlfX3JldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSkKLQogLyogY2FsbGVkIGZvciBhbGwgZWJ0X2VudHJ5IHN0cnVjdHVyZXMuICovCiBzdGF0aWMgaW50IHNpemVfZW50cnlfbXd0KHN0cnVjdCBlYnRfZW50cnkgKmVudHJ5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlLAogCQkJICB1bnNpZ25lZCBpbnQgKnRvdGFsLApAQCAtMjEzMiw2ICsyMDgxLDE0IEBACiAJCX0KIAl9CiAKKwlpZiAoc3RhdGUtPmJ1Zl9rZXJuX3N0YXJ0ID09IE5VTEwpIHsKKwkJdW5zaWduZWQgaW50IG9mZnNldCA9IGJ1Zl9zdGFydCAtIChjaGFyICopIGJhc2U7CisKKwkJcmV0ID0geHRfY29tcGF0X2FkZF9vZmZzZXQoTkZQUk9UT19CUklER0UsIG9mZnNldCwgbmV3X29mZnNldCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKIAlzdGFydG9mZiA9IHN0YXRlLT5idWZfdXNlcl9vZmZzZXQgLSBzdGFydG9mZjsKIAogCUJVR19PTigqdG90YWwgPCBzdGFydG9mZik7CkBAIC0yMjQwLDYgKzIxOTcsNyBAQAogCiAJeHRfY29tcGF0X2xvY2soTkZQUk9UT19CUklER0UpOwogCisJeHRfY29tcGF0X2luaXRfb2Zmc2V0cyhORlBST1RPX0JSSURHRSwgdG1wLm5lbnRyaWVzKTsKIAlyZXQgPSBjb21wYXRfY29weV9lbnRyaWVzKGVudHJpZXNfdG1wLCB0bXAuZW50cmllc19zaXplLCAmc3RhdGUpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dF91bmxvY2s7CmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jYWlmX3NvY2tldC5jIGIvbmV0L2NhaWYvY2FpZl9zb2NrZXQuYwppbmRleCA4MTg0YzAzLi4zN2E0MDM0IDEwMDY0NAotLS0gYS9uZXQvY2FpZi9jYWlmX3NvY2tldC5jCisrKyBiL25ldC9jYWlmL2NhaWZfc29ja2V0LmMKQEAgLTg1Miw3ICs4NTIsNyBAQAogCXNvY2stPnN0YXRlID0gU1NfQ09OTkVDVElORzsKIAlzay0+c2tfc3RhdGUgPSBDQUlGX0NPTk5FQ1RJTkc7CiAKLQkvKiBDaGVjayBwcmlvcml0eSB2YWx1ZSBjb21taW5nIGZyb20gc29ja2V0ICovCisJLyogQ2hlY2sgcHJpb3JpdHkgdmFsdWUgY29taW5nIGZyb20gc29ja2V0ICovCiAJLyogaWYgcHJpb3JpdHkgdmFsdWUgaXMgb3V0IG9mIHJhbmdlIGl0IHdpbGwgYmUgYWp1c3RlZCAqLwogCWlmIChjZl9zay0+c2suc2tfcHJpb3JpdHkgPiBDQUlGX1BSSU9fTUFYKQogCQljZl9zay0+Y29ubl9yZXEucHJpb3JpdHkgPSBDQUlGX1BSSU9fTUFYOwpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvY2ZkZ21sLmMgYi9uZXQvY2FpZi9jZmRnbWwuYwppbmRleCAyN2RhYjI2Li4wNTRmZGI1IDEwMDY0NAotLS0gYS9uZXQvY2FpZi9jZmRnbWwuYworKysgYi9uZXQvY2FpZi9jZmRnbWwuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPG5ldC9jYWlmL2Nmc3J2bC5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2NmcGt0Lmg+CiAKKwogI2RlZmluZSBjb250YWluZXJfb2JqKGxheXIpICgoc3RydWN0IGNmc3J2bCAqKSBsYXlyKQogCiAjZGVmaW5lIERHTV9DTURfQklUICAweDgwCkBAIC04Myw2ICs4NCw3IEBACiAKIHN0YXRpYyBpbnQgY2ZkZ21sX3RyYW5zbWl0KHN0cnVjdCBjZmxheWVyICpsYXlyLCBzdHJ1Y3QgY2Zwa3QgKnBrdCkKIHsKKwl1OCBwYWNrZXRfdHlwZTsKIAl1MzIgemVybyA9IDA7CiAJc3RydWN0IGNhaWZfcGF5bG9hZF9pbmZvICppbmZvOwogCXN0cnVjdCBjZnNydmwgKnNlcnZpY2UgPSBjb250YWluZXJfb2JqKGxheXIpOwpAQCAtOTQsNyArOTYsOSBAQAogCWlmIChjZnBrdF9nZXRsZW4ocGt0KSA+IERHTV9NVFUpCiAJCXJldHVybiAtRU1TR1NJWkU7CiAKLQljZnBrdF9hZGRfaGVhZChwa3QsICZ6ZXJvLCA0KTsKKwljZnBrdF9hZGRfaGVhZChwa3QsICZ6ZXJvLCAzKTsKKwlwYWNrZXRfdHlwZSA9IDB4MDg7IC8qIEI5IHNldCAtIFVOQ0xBU1NJRklFRCAqLworCWNmcGt0X2FkZF9oZWFkKHBrdCwgJnBhY2tldF90eXBlLCAxKTsKIAogCS8qIEFkZCBpbmZvIGZvciBNVVgtbGF5ZXIgdG8gcm91dGUgdGhlIHBhY2tldCBvdXQuICovCiAJaW5mbyA9IGNmcGt0X2luZm8ocGt0KTsKZGlmZiAtLWdpdCBhL25ldC9jYWlmL2NmbXV4bC5jIGIvbmV0L2NhaWYvY2ZtdXhsLmMKaW5kZXggNDZmMzRiMi4uMjRmMWZmYSAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvY2ZtdXhsLmMKKysrIGIvbmV0L2NhaWYvY2ZtdXhsLmMKQEAgLTI0NCw5ICsyNDQsOSBAQAogCQkJCWludCBwaHlpZCkKIHsKIAlzdHJ1Y3QgY2ZtdXhsICptdXhsID0gY29udGFpbmVyX29iaihsYXlyKTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlOworCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGUsICpuZXh0OwogCXN0cnVjdCBjZmxheWVyICpsYXllcjsKLQlsaXN0X2Zvcl9lYWNoKG5vZGUsICZtdXhsLT5zcnZsX2xpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgJm11eGwtPnNydmxfbGlzdCkgewogCQlsYXllciA9IGxpc3RfZW50cnkobm9kZSwgc3RydWN0IGNmbGF5ZXIsIG5vZGUpOwogCQlpZiAoY2ZzcnZsX3BoeWlkX21hdGNoKGxheWVyLCBwaHlpZCkpCiAJCQlsYXllci0+Y3RybGNtZChsYXllciwgY3RybCwgcGh5aWQpOwpkaWZmIC0tZ2l0IGEvbmV0L2Nhbi9iY20uYyBiL25ldC9jYW4vYmNtLmMKaW5kZXggODcxYTBhZC4uOGE2YTA1ZSAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9iY20uYworKysgYi9uZXQvY2FuL2JjbS5jCkBAIC0zODcsNyArMzg3LDcgQEAKIH0KIAogLyoKLSAqIGJjbV90eF90aW1lb3V0X2hhbmRsZXIgLSBwZXJmb3JtZXMgY3ljbGljIENBTiBmcmFtZSB0cmFuc21pc3Npb25zCisgKiBiY21fdHhfdGltZW91dF9oYW5kbGVyIC0gcGVyZm9ybXMgY3ljbGljIENBTiBmcmFtZSB0cmFuc21pc3Npb25zCiAgKi8KIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBiY21fdHhfdGltZW91dF9oYW5kbGVyKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKQogewpAQCAtMTQyNyw5ICsxNDI3LDE0IEBACiBzdGF0aWMgaW50IGJjbV9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7Ci0Jc3RydWN0IGJjbV9zb2NrICpibyA9IGJjbV9zayhzayk7CisJc3RydWN0IGJjbV9zb2NrICpibzsKIAlzdHJ1Y3QgYmNtX29wICpvcCwgKm5leHQ7CiAKKwlpZiAoc2sgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlibyA9IGJjbV9zayhzayk7CisKIAkvKiByZW1vdmUgYmNtX29wcywgdGltZXIsIHJ4X3VucmVnaXN0ZXIoKSwgZXRjLiAqLwogCiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmJvLT5ub3RpZmllcik7CmRpZmYgLS1naXQgYS9uZXQvY2FuL3Jhdy5jIGIvbmV0L2Nhbi9yYXcuYwppbmRleCA2NDlhY2ZhLi4wZWIzOWE3IDEwMDY0NAotLS0gYS9uZXQvY2FuL3Jhdy5jCisrKyBiL25ldC9jYW4vcmF3LmMKQEAgLTMwNSw3ICszMDUsMTIgQEAKIHN0YXRpYyBpbnQgcmF3X3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKLQlzdHJ1Y3QgcmF3X3NvY2sgKnJvID0gcmF3X3NrKHNrKTsKKwlzdHJ1Y3QgcmF3X3NvY2sgKnJvOworCisJaWYgKCFzaykKKwkJcmV0dXJuIDA7CisKKwlybyA9IHJhd19zayhzayk7CiAKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmcm8tPm5vdGlmaWVyKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NlcGgvbWVzc2VuZ2VyLmMgYi9uZXQvY2VwaC9tZXNzZW5nZXIuYwppbmRleCAwNWYzNTc4Li5lMTVhODJjIDEwMDY0NAotLS0gYS9uZXQvY2VwaC9tZXNzZW5nZXIuYworKysgYi9uZXQvY2VwaC9tZXNzZW5nZXIuYwpAQCAtMjI2Nyw2ICsyMjY3LDE5IEBACiAJbS0+bW9yZV90b19mb2xsb3cgPSBmYWxzZTsKIAltLT5wb29sID0gTlVMTDsKIAorCS8qIG1pZGRsZSAqLworCW0tPm1pZGRsZSA9IE5VTEw7CisKKwkvKiBkYXRhICovCisJbS0+bnJfcGFnZXMgPSAwOworCW0tPnBhZ2VfYWxpZ25tZW50ID0gMDsKKwltLT5wYWdlcyA9IE5VTEw7CisJbS0+cGFnZWxpc3QgPSBOVUxMOworCW0tPmJpbyA9IE5VTEw7CisJbS0+YmlvX2l0ZXIgPSBOVUxMOworCW0tPmJpb19zZWcgPSAwOworCW0tPnRyYWlsID0gTlVMTDsKKwogCS8qIGZyb250ICovCiAJaWYgKGZyb250X2xlbikgewogCQlpZiAoZnJvbnRfbGVuID4gUEFHRV9DQUNIRV9TSVpFKSB7CkBAIC0yMjg2LDE5ICsyMjk5LDYgQEAKIAl9CiAJbS0+ZnJvbnQuaW92X2xlbiA9IGZyb250X2xlbjsKIAotCS8qIG1pZGRsZSAqLwotCW0tPm1pZGRsZSA9IE5VTEw7Ci0KLQkvKiBkYXRhICovCi0JbS0+bnJfcGFnZXMgPSAwOwotCW0tPnBhZ2VfYWxpZ25tZW50ID0gMDsKLQltLT5wYWdlcyA9IE5VTEw7Ci0JbS0+cGFnZWxpc3QgPSBOVUxMOwotCW0tPmJpbyA9IE5VTEw7Ci0JbS0+YmlvX2l0ZXIgPSBOVUxMOwotCW0tPmJpb19zZWcgPSAwOwotCW0tPnRyYWlsID0gTlVMTDsKLQogCWRvdXQoImNlcGhfbXNnX25ldyAlcCBmcm9udCAlZFxuIiwgbSwgZnJvbnRfbGVuKTsKIAlyZXR1cm4gbTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NlcGgvb3NkX2NsaWVudC5jIGIvbmV0L2NlcGgvb3NkX2NsaWVudC5jCmluZGV4IDNiOTFkNjUuLjZiNWRkYTEgMTAwNjQ0Ci0tLSBhL25ldC9jZXBoL29zZF9jbGllbnQuYworKysgYi9uZXQvY2VwaC9vc2RfY2xpZW50LmMKQEAgLTQ3MCw4ICs0NzAsOCBAQAogCQkJCQkgc25hcGMsIG9wcywKIAkJCQkJIHVzZV9tZW1wb29sLAogCQkJCQkgR0ZQX05PRlMsIE5VTEwsIE5VTEwpOwotCWlmIChJU19FUlIocmVxKSkKLQkJcmV0dXJuIHJlcTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIE5VTEw7CiAKIAkvKiBjYWxjdWxhdGUgbWF4IHdyaXRlIHNpemUgKi8KIAljYWxjX2xheW91dChvc2RjLCB2aW5vLCBsYXlvdXQsIG9mZiwgcGxlbiwgcmVxLCBvcHMpOwpAQCAtNTc5LDkgKzU3OSwxNSBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgbnJlcSwgJm9zZC0+b19saW5nZXJfcmVxdWVzdHMsCiAJCQkJIHJfbGluZ2VyX29zZCkgewotCQlfX3VucmVnaXN0ZXJfbGluZ2VyX3JlcXVlc3Qob3NkYywgcmVxKTsKKwkJLyoKKwkJICogcmVyZWdpc3RlciByZXF1ZXN0IHByaW9yIHRvIHVucmVnaXN0ZXJpbmcgbGluZ2VyIHNvCisJCSAqIHRoYXQgcl9vc2QgaXMgcHJlc2VydmVkLgorCQkgKi8KKwkJQlVHX09OKCFsaXN0X2VtcHR5KCZyZXEtPnJfcmVxX2xydV9pdGVtKSk7CiAJCV9fcmVnaXN0ZXJfcmVxdWVzdChvc2RjLCByZXEpOwotCQlsaXN0X21vdmUoJnJlcS0+cl9yZXFfbHJ1X2l0ZW0sICZvc2RjLT5yZXFfdW5zZW50KTsKKwkJbGlzdF9hZGQoJnJlcS0+cl9yZXFfbHJ1X2l0ZW0sICZvc2RjLT5yZXFfdW5zZW50KTsKKwkJbGlzdF9hZGQoJnJlcS0+cl9vc2RfaXRlbSwgJnJlcS0+cl9vc2QtPm9fcmVxdWVzdHMpOworCQlfX3VucmVnaXN0ZXJfbGluZ2VyX3JlcXVlc3Qob3NkYywgcmVxKTsKIAkJZG91dCgicmVxdWV1ZWQgbGluZ2VyaW5nICVwIHRpZCAlbGx1IG9zZCVkXG4iLCByZXEsIHJlcS0+cl90aWQsCiAJCSAgICAgb3NkLT5vX29zZCk7CiAJfQpAQCAtNzk4LDcgKzgwNCw3IEBACiAJcmVxLT5yX3JlcXVlc3QtPmhkci50aWQgPSBjcHVfdG9fbGU2NChyZXEtPnJfdGlkKTsKIAlJTklUX0xJU1RfSEVBRCgmcmVxLT5yX3JlcV9scnVfaXRlbSk7CiAKLQlkb3V0KCJyZWdpc3Rlcl9yZXF1ZXN0ICVwIHRpZCAlbGxkXG4iLCByZXEsIHJlcS0+cl90aWQpOworCWRvdXQoIl9fcmVnaXN0ZXJfcmVxdWVzdCAlcCB0aWQgJWxsZFxuIiwgcmVxLCByZXEtPnJfdGlkKTsKIAlfX2luc2VydF9yZXF1ZXN0KG9zZGMsIHJlcSk7CiAJY2VwaF9vc2RjX2dldF9yZXF1ZXN0KHJlcSk7CiAJb3NkYy0+bnVtX3JlcXVlc3RzKys7CkBAIC05MTcsNyArOTIzLDcgQEAKIC8qCiAgKiBQaWNrIGFuIG9zZCAodGhlIGZpcnN0ICd1cCcgb3NkIGluIHRoZSBwZyksIGFsbG9jYXRlIHRoZSBvc2Qgc3RydWN0CiAgKiAoYXMgbmVlZGVkKSwgYW5kIHNldCB0aGUgcmVxdWVzdCByX29zZCBhcHByb3ByaWF0ZWx5LiAgSWYgdGhlcmUgaXMKLSAqIG5vIHVwIG9zZCwgc2V0IHJfb3NkIHRvIE5VTEwuICBNb3ZlIHRoZSByZXF1ZXN0IHRvIHRoZSBhcHByb3BpYXRlIGxpc3QKKyAqIG5vIHVwIG9zZCwgc2V0IHJfb3NkIHRvIE5VTEwuICBNb3ZlIHRoZSByZXF1ZXN0IHRvIHRoZSBhcHByb3ByaWF0ZSBsaXN0CiAgKiAodW5zZW50LCBob21lbGVzcykgb3IgbGVhdmUgb24gaW4tZmxpZ2h0IGxydS4KICAqCiAgKiBSZXR1cm4gMCBpZiB1bmNoYW5nZWQsIDEgaWYgY2hhbmdlZCwgb3IgbmVnYXRpdmUgb24gZXJyb3IuCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDNkYTlmYjAuLmI2MjRmZTQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC0xMjg0LDExICsxMjg0LDEzIEBACiAgKi8KIGludCBkZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlMSVNUX0hFQUQoc2luZ2xlKTsKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9VUCkgeworCQlMSVNUX0hFQUQoc2luZ2xlKTsKIAotCWxpc3RfYWRkKCZkZXYtPnVucmVnX2xpc3QsICZzaW5nbGUpOwotCWRldl9jbG9zZV9tYW55KCZzaW5nbGUpOwotCWxpc3RfZGVsKCZzaW5nbGUpOworCQlsaXN0X2FkZCgmZGV2LT51bnJlZ19saXN0LCAmc2luZ2xlKTsKKwkJZGV2X2Nsb3NlX21hbnkoJnNpbmdsZSk7CisJCWxpc3RfZGVsKCZzaW5nbGUpOworCX0KIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woZGV2X2Nsb3NlKTsKQEAgLTIwOTEsNyArMjA5Myw3IEBACiAJCXUzMiBmZWF0dXJlczsKIAogCQkvKgotCQkgKiBJZiBkZXZpY2UgZG9lc250IG5lZWQgc2tiLT5kc3QsIHJlbGVhc2UgaXQgcmlnaHQgbm93IHdoaWxlCisJCSAqIElmIGRldmljZSBkb2Vzbid0IG5lZWQgc2tiLT5kc3QsIHJlbGVhc2UgaXQgcmlnaHQgbm93IHdoaWxlCiAJCSAqIGl0cyBob3QgaW4gdGhpcyBjcHUgY2FjaGUKIAkJICovCiAJCWlmIChkZXYtPnByaXZfZmxhZ3MgJiBJRkZfWE1JVF9EU1RfUkVMRUFTRSkKQEAgLTIxNTEsNyArMjE1Myw3IEBACiAJCW5za2ItPm5leHQgPSBOVUxMOwogCiAJCS8qCi0JCSAqIElmIGRldmljZSBkb2VzbnQgbmVlZCBuc2tiLT5kc3QsIHJlbGVhc2UgaXQgcmlnaHQgbm93IHdoaWxlCisJCSAqIElmIGRldmljZSBkb2Vzbid0IG5lZWQgbnNrYi0+ZHN0LCByZWxlYXNlIGl0IHJpZ2h0IG5vdyB3aGlsZQogCQkgKiBpdHMgaG90IGluIHRoaXMgY3B1IGNhY2hlCiAJCSAqLwogCQlpZiAoZGV2LT5wcml2X2ZsYWdzICYgSUZGX1hNSVRfRFNUX1JFTEVBU0UpCkBAIC0yOTcwLDggKzI5NzIsOCBAQAogICogd2hlbiBDT05GSUdfTkVUX0NMU19BQ1QgaXM/IG90aGVyd2lzZSBzb21lIHVzZWxlc3MgaW5zdHJ1Y3Rpb25zCiAgKiBhIGNvbXBhcmUgYW5kIDIgc3RvcmVzIGV4dHJhIHJpZ2h0IG5vdyBpZiB3ZSBkb250IGhhdmUgaXQgb24KICAqIGJ1dCBoYXZlIENPTkZJR19ORVRfQ0xTX0FDVAotICogTk9URTogVGhpcyBkb2VzbnQgc3RvcCBhbnkgZnVuY3Rpb25hbGl0eTsgaWYgeW91IGRvbnQgaGF2ZQotICogdGhlIGluZ3Jlc3Mgc2NoZWR1bGVyLCB5b3UganVzdCBjYW50IGFkZCBwb2xpY2llcyBvbiBpbmdyZXNzLgorICogTk9URTogVGhpcyBkb2Vzbid0IHN0b3AgYW55IGZ1bmN0aW9uYWxpdHk7IGlmIHlvdSBkb250IGhhdmUKKyAqIHRoZSBpbmdyZXNzIHNjaGVkdWxlciwgeW91IGp1c3QgY2FuJ3QgYWRkIHBvbGljaWVzIG9uIGluZ3Jlc3MuCiAgKgogICovCiBzdGF0aWMgaW50IGluZ19maWx0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGRldl9xdWV1ZSAqcnhxKQpAQCAtMzgwMCw3ICszODAyLDcgQEAKIAkJICogd2l0aCBuZXRwb2xsJ3MgcG9sbF9uYXBpKCkuICBPbmx5IHRoZSBlbnRpdHkgd2hpY2gKIAkJICogb2J0YWlucyB0aGUgbG9jayBhbmQgc2VlcyBOQVBJX1NUQVRFX1NDSEVEIHNldCB3aWxsCiAJCSAqIGFjdHVhbGx5IG1ha2UgdGhlIC0+cG9sbCgpIGNhbGwuICBUaGVyZWZvcmUgd2UgYXZvaWQKLQkJICogYWNjaWRlbnRseSBjYWxsaW5nIC0+cG9sbCgpIHdoZW4gTkFQSSBpcyBub3Qgc2NoZWR1bGVkLgorCQkgKiBhY2NpZGVudGFsbHkgY2FsbGluZyAtPnBvbGwoKSB3aGVuIE5BUEkgaXMgbm90IHNjaGVkdWxlZC4KIAkJICovCiAJCXdvcmsgPSAwOwogCQlpZiAodGVzdF9iaXQoTkFQSV9TVEFURV9TQ0hFRCwgJm4tPnN0YXRlKSkgewpAQCAtNDc3Myw3ICs0Nzc1LDcgQEAKIAkJICogaXMgbmV2ZXIgcmVhY2hlZAogCQkgKi8KIAkJV0FSTl9PTigxKTsKLQkJZXJyID0gLUVJTlZBTDsKKwkJZXJyID0gLUVOT1RUWTsKIAkJYnJlYWs7CiAKIAl9CkBAIC01MDQxLDcgKzUwNDMsNyBAQAogCQkvKiBTZXQgdGhlIHBlciBkZXZpY2UgbWVtb3J5IGJ1ZmZlciBzcGFjZS4KIAkJICogTm90IGFwcGxpY2FibGUgaW4gb3VyIGNhc2UgKi8KIAljYXNlIFNJT0NTSUZMSU5LOgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIC1FTk9UVFk7CiAKIAkvKgogCSAqCVVua25vd24gb3IgcHJpdmF0ZSBpb2N0bC4KQEAgLTUwNjIsNyArNTA2NCw3IEBACiAJCS8qIFRha2UgY2FyZSBvZiBXaXJlbGVzcyBFeHRlbnNpb25zICovCiAJCWlmIChjbWQgPj0gU0lPQ0lXRklSU1QgJiYgY21kIDw9IFNJT0NJV0xBU1QpCiAJCQlyZXR1cm4gd2V4dF9oYW5kbGVfaW9jdGwobmV0LCAmaWZyLCBjbWQsIGFyZyk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gLUVOT1RUWTsKIAl9CiB9CiAKQEAgLTUxODQsMzMgKzUxODYsMzcgQEAKIAkvKiBGaXggaWxsZWdhbCBjaGVja3N1bSBjb21iaW5hdGlvbnMgKi8KIAlpZiAoKGZlYXR1cmVzICYgTkVUSUZfRl9IV19DU1VNKSAmJgogCSAgICAoZmVhdHVyZXMgJiAoTkVUSUZfRl9JUF9DU1VNfE5FVElGX0ZfSVBWNl9DU1VNKSkpIHsKLQkJbmV0ZGV2X2luZm8oZGV2LCAibWl4ZWQgSFcgYW5kIElQIGNoZWNrc3VtIHNldHRpbmdzLlxuIik7CisJCW5ldGRldl93YXJuKGRldiwgIm1peGVkIEhXIGFuZCBJUCBjaGVja3N1bSBzZXR0aW5ncy5cbiIpOwogCQlmZWF0dXJlcyAmPSB+KE5FVElGX0ZfSVBfQ1NVTXxORVRJRl9GX0lQVjZfQ1NVTSk7CiAJfQogCiAJaWYgKChmZWF0dXJlcyAmIE5FVElGX0ZfTk9fQ1NVTSkgJiYKIAkgICAgKGZlYXR1cmVzICYgKE5FVElGX0ZfSFdfQ1NVTXxORVRJRl9GX0lQX0NTVU18TkVUSUZfRl9JUFY2X0NTVU0pKSkgewotCQluZXRkZXZfaW5mbyhkZXYsICJtaXhlZCBubyBjaGVja3N1bW1pbmcgYW5kIG90aGVyIHNldHRpbmdzLlxuIik7CisJCW5ldGRldl93YXJuKGRldiwgIm1peGVkIG5vIGNoZWNrc3VtbWluZyBhbmQgb3RoZXIgc2V0dGluZ3MuXG4iKTsKIAkJZmVhdHVyZXMgJj0gfihORVRJRl9GX0lQX0NTVU18TkVUSUZfRl9JUFY2X0NTVU18TkVUSUZfRl9IV19DU1VNKTsKIAl9CiAKIAkvKiBGaXggaWxsZWdhbCBTRytDU1VNIGNvbWJpbmF0aW9ucy4gKi8KIAlpZiAoKGZlYXR1cmVzICYgTkVUSUZfRl9TRykgJiYKIAkgICAgIShmZWF0dXJlcyAmIE5FVElGX0ZfQUxMX0NTVU0pKSB7Ci0JCW5ldGRldl9pbmZvKGRldiwKLQkJCSAgICAiRHJvcHBpbmcgTkVUSUZfRl9TRyBzaW5jZSBubyBjaGVja3N1bSBmZWF0dXJlLlxuIik7CisJCW5ldGRldl9kYmcoZGV2LAorCQkJIkRyb3BwaW5nIE5FVElGX0ZfU0cgc2luY2Ugbm8gY2hlY2tzdW0gZmVhdHVyZS5cbiIpOwogCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9TRzsKIAl9CiAKIAkvKiBUU08gcmVxdWlyZXMgdGhhdCBTRyBpcyBwcmVzZW50IGFzIHdlbGwuICovCi0JaWYgKChmZWF0dXJlcyAmIE5FVElGX0ZfVFNPKSAmJiAhKGZlYXR1cmVzICYgTkVUSUZfRl9TRykpIHsKLQkJbmV0ZGV2X2luZm8oZGV2LCAiRHJvcHBpbmcgTkVUSUZfRl9UU08gc2luY2Ugbm8gU0cgZmVhdHVyZS5cbiIpOwotCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9UU087CisJaWYgKChmZWF0dXJlcyAmIE5FVElGX0ZfQUxMX1RTTykgJiYgIShmZWF0dXJlcyAmIE5FVElGX0ZfU0cpKSB7CisJCW5ldGRldl9kYmcoZGV2LCAiRHJvcHBpbmcgVFNPIGZlYXR1cmVzIHNpbmNlIG5vIFNHIGZlYXR1cmUuXG4iKTsKKwkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfQUxMX1RTTzsKIAl9CiAKKwkvKiBUU08gRUNOIHJlcXVpcmVzIHRoYXQgVFNPIGlzIHByZXNlbnQgYXMgd2VsbC4gKi8KKwlpZiAoKGZlYXR1cmVzICYgTkVUSUZfRl9BTExfVFNPKSA9PSBORVRJRl9GX1RTT19FQ04pCisJCWZlYXR1cmVzICY9IH5ORVRJRl9GX1RTT19FQ047CisKIAkvKiBTb2Z0d2FyZSBHU08gZGVwZW5kcyBvbiBTRy4gKi8KIAlpZiAoKGZlYXR1cmVzICYgTkVUSUZfRl9HU08pICYmICEoZmVhdHVyZXMgJiBORVRJRl9GX1NHKSkgewotCQluZXRkZXZfaW5mbyhkZXYsICJEcm9wcGluZyBORVRJRl9GX0dTTyBzaW5jZSBubyBTRyBmZWF0dXJlLlxuIik7CisJCW5ldGRldl9kYmcoZGV2LCAiRHJvcHBpbmcgTkVUSUZfRl9HU08gc2luY2Ugbm8gU0cgZmVhdHVyZS5cbiIpOwogCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9HU087CiAJfQogCkBAIC01MjIwLDEzICs1MjI2LDEzIEBACiAJCWlmICghKChmZWF0dXJlcyAmIE5FVElGX0ZfR0VOX0NTVU0pIHx8CiAJCSAgICAoZmVhdHVyZXMgJiAoTkVUSUZfRl9JUF9DU1VNfE5FVElGX0ZfSVBWNl9DU1VNKSkKIAkJCSAgICA9PSAoTkVUSUZfRl9JUF9DU1VNfE5FVElGX0ZfSVBWNl9DU1VNKSkpIHsKLQkJCW5ldGRldl9pbmZvKGRldiwKKwkJCW5ldGRldl9kYmcoZGV2LAogCQkJCSJEcm9wcGluZyBORVRJRl9GX1VGTyBzaW5jZSBubyBjaGVja3N1bSBvZmZsb2FkIGZlYXR1cmVzLlxuIik7CiAJCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9VRk87CiAJCX0KIAogCQlpZiAoIShmZWF0dXJlcyAmIE5FVElGX0ZfU0cpKSB7Ci0JCQluZXRkZXZfaW5mbyhkZXYsCisJCQluZXRkZXZfZGJnKGRldiwKIAkJCQkiRHJvcHBpbmcgTkVUSUZfRl9VRk8gc2luY2Ugbm8gTkVUSUZfRl9TRyBmZWF0dXJlLlxuIik7CiAJCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9VRk87CiAJCX0KQEAgLTU0MDgsMTIgKzU0MTQsNiBAQAogCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TT0ZUX0ZFQVRVUkVTOwogCWRldi0+d2FudGVkX2ZlYXR1cmVzID0gZGV2LT5mZWF0dXJlcyAmIGRldi0+aHdfZmVhdHVyZXM7CiAKLQkvKiBBdm9pZCB3YXJuaW5nIGZyb20gbmV0ZGV2X2ZpeF9mZWF0dXJlcygpIGZvciBHU08gd2l0aG91dCBTRyAqLwotCWlmICghKGRldi0+d2FudGVkX2ZlYXR1cmVzICYgTkVUSUZfRl9TRykpIHsKLQkJZGV2LT53YW50ZWRfZmVhdHVyZXMgJj0gfk5FVElGX0ZfR1NPOwotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0dTTzsKLQl9Ci0KIAkvKiBFbmFibGUgR1JPIGFuZCBORVRJRl9GX0hJR0hETUEgZm9yIHZsYW5zIGJ5IGRlZmF1bHQsCiAJICogdmxhbl9kZXZfaW5pdCgpIHdpbGwgZG8gdGhlIGRldi0+ZmVhdHVyZXMgY2hlY2ssIHNvIHRoZXNlIGZlYXR1cmVzCiAJICogYXJlIGVuYWJsZWQgb25seSBpZiBzdXBwb3J0ZWQgYnkgdW5kZXJseWluZyBkZXZpY2UuCkBAIC02MzM2LDcgKzYzMzYsNyBAQAogCQlpZiAoZGV2LT5ydG5sX2xpbmtfb3BzKQogCQkJY29udGludWU7CiAKLQkJLyogUHVzaCByZW1haW5nIG5ldHdvcmsgZGV2aWNlcyB0byBpbml0X25ldCAqLworCQkvKiBQdXNoIHJlbWFpbmluZyBuZXR3b3JrIGRldmljZXMgdG8gaW5pdF9uZXQgKi8KIAkJc25wcmludGYoZmJfbmFtZSwgSUZOQU1TSVosICJkZXYlZCIsIGRldi0+aWZpbmRleCk7CiAJCWVyciA9IGRldl9jaGFuZ2VfbmV0X25hbWVzcGFjZShkZXYsICZpbml0X25ldCwgZmJfbmFtZSk7CiAJCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggMjMyYjE4Ny4uYWZiOGFmYiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmMKKysrIGIvbmV0L2NvcmUvZmlsdGVyLmMKQEAgLTQyNSw3ICs0MjUsNyBAQAogICogQXMgd2UgZG9udCB3YW50IHRvIGNsZWFyIG1lbVtdIGFycmF5IGZvciBlYWNoIHBhY2tldCBnb2luZyB0aHJvdWdoCiAgKiBza19ydW5fZmlsdGVyKCksIHdlIGNoZWNrIHRoYXQgZmlsdGVyIGxvYWRlZCBieSB1c2VyIG5ldmVyIHRyeSB0byByZWFkCiAgKiBhIGNlbGwgaWYgbm90IHByZXZpb3VzbHkgd3JpdHRlbiwgYW5kIHdlIGNoZWNrIGFsbCBicmFuY2hlcyB0byBiZSBzdXJlCi0gKiBhIG1hbGljaW91cyB1c2VyIGRvZXNudCB0cnkgdG8gYWJ1c2UgdXMuCisgKiBhIG1hbGljaW91cyB1c2VyIGRvZXNuJ3QgdHJ5IHRvIGFidXNlIHVzLgogICovCiBzdGF0aWMgaW50IGNoZWNrX2xvYWRfYW5kX3N0b3JlcyhzdHJ1Y3Qgc29ja19maWx0ZXIgKmZpbHRlciwgaW50IGZsZW4pCiB7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9saW5rX3dhdGNoLmMgYi9uZXQvY29yZS9saW5rX3dhdGNoLmMKaW5kZXggMDFhMTEwMS4uYTdiMzQyMSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbGlua193YXRjaC5jCisrKyBiL25ldC9jb3JlL2xpbmtfd2F0Y2guYwpAQCAtMTI5LDcgKzEyOSw3IEBACiAJaWYgKCFjYW5jZWxfZGVsYXllZF93b3JrKCZsaW5rd2F0Y2hfd29yaykpCiAJCXJldHVybjsKIAotCS8qIE90aGVyd2lzZSB3ZSByZXNjaGVkdWxlIGl0IGFnYWluIGZvciBpbW1lZGlhdGUgZXhlY3Rpb24uICovCisJLyogT3RoZXJ3aXNlIHdlIHJlc2NoZWR1bGUgaXQgYWdhaW4gZm9yIGltbWVkaWF0ZSBleGVjdXRpb24uICovCiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZsaW5rd2F0Y2hfd29yaywgMCk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKaW5kZXggNDlmN2VhNS4uZDdjNGJiNCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTE5Niw3ICsxOTYsNyBAQAogICogYXMgZmFpbHVyZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHZlcnkgdW5saWtlbHksIGl0IGNhbiBvbmx5IGhhcHBlbiBkdWUKICAqIHRvIGxhY2sgb2YgbWVtb3J5IHdoZW4gYWxsb2NhdGluZyB0aGUgY2hhaW4gdG8gc3RvcmUgYWxsIG1lc3NhZ2UKICAqIGhhbmRsZXJzIGZvciBhIHByb3RvY29sLiBNZWFudCBmb3IgdXNlIGluIGluaXQgZnVuY3Rpb25zIHdoZXJlIGxhY2sKLSAqIG9mIG1lbW9yeSBpbXBsaWVzIG5vIHNlbnNlIGluIGNvbnRpbnVlaW5nLgorICogb2YgbWVtb3J5IGltcGxpZXMgbm8gc2Vuc2UgaW4gY29udGludWluZy4KICAqLwogdm9pZCBydG5sX3JlZ2lzdGVyKGludCBwcm90b2NvbCwgaW50IG1zZ3R5cGUsCiAJCSAgIHJ0bmxfZG9pdF9mdW5jIGRvaXQsIHJ0bmxfZHVtcGl0X2Z1bmMgZHVtcGl0KQpAQCAtMTQ0MCw3ICsxNDQwLDcgQEAKIGVycm91dDoKIAlpZiAoZXJyIDwgMCAmJiBtb2RpZmllZCAmJiBuZXRfcmF0ZWxpbWl0KCkpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkEgbGluayBjaGFuZ2UgcmVxdWVzdCBmYWlsZWQgd2l0aCAiCi0JCSAgICAgICAic29tZSBjaGFuZ2VzIGNvbWl0dGVkIGFscmVhZHkuIEludGVyZmFjZSAlcyBtYXkgIgorCQkgICAgICAgInNvbWUgY2hhbmdlcyBjb21taXR0ZWQgYWxyZWFkeS4gSW50ZXJmYWNlICVzIG1heSAiCiAJCSAgICAgICAiaGF2ZSBiZWVuIGxlZnQgd2l0aCBhbiBpbmNvbnNpc3RlbnQgY29uZmlndXJhdGlvbiwgIgogCQkgICAgICAgInBsZWFzZSBjaGVjay5cbiIsIGRldi0+bmFtZSk7CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggODAxZGQwOC4uN2ViZWVkMCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKKysrIGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTIyNjcsNyArMjI2Nyw3IEBACiAgKiBvZiBieXRlcyBhbHJlYWR5IGNvbnN1bWVkIGFuZCB0aGUgbmV4dCBjYWxsIHRvCiAgKiBza2Jfc2VxX3JlYWQoKSB3aWxsIHJldHVybiB0aGUgcmVtYWluaW5nIHBhcnQgb2YgdGhlIGJsb2NrLgogICoKLSAqIE5vdGUgMTogVGhlIHNpemUgb2YgZWFjaCBibG9jayBvZiBkYXRhIHJldHVybmVkIGNhbiBiZSBhcmJpdGFyeSwKKyAqIE5vdGUgMTogVGhlIHNpemUgb2YgZWFjaCBibG9jayBvZiBkYXRhIHJldHVybmVkIGNhbiBiZSBhcmJpdHJhcnksCiAgKiAgICAgICB0aGlzIGxpbWl0YXRpb24gaXMgdGhlIGNvc3QgZm9yIHplcm9jb3B5IHNlcWV1ZW50YWwKICAqICAgICAgIHJlYWRzIG9mIHBvdGVudGlhbGx5IG5vbiBsaW5lYXIgZGF0YS4KICAqCmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrLmMgYi9uZXQvY29yZS9zb2NrLmMKaW5kZXggN2RmZWQ3OS4uNmU4MTk3OCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29jay5jCisrKyBiL25ldC9jb3JlL3NvY2suYwpAQCAtMjE1LDcgKzIxNSw3IEBACiBfX3UzMiBzeXNjdGxfd21lbV9kZWZhdWx0IF9fcmVhZF9tb3N0bHkgPSBTS19XTUVNX01BWDsKIF9fdTMyIHN5c2N0bF9ybWVtX2RlZmF1bHQgX19yZWFkX21vc3RseSA9IFNLX1JNRU1fTUFYOwogCi0vKiBNYXhpbWFsIHNwYWNlIGVhdGVuIGJ5IGlvdmVjIG9yIGFuY2lsbGlhcnkgZGF0YSBwbHVzIHNvbWUgc3BhY2UgKi8KKy8qIE1heGltYWwgc3BhY2UgZWF0ZW4gYnkgaW92ZWMgb3IgYW5jaWxsYXJ5IGRhdGEgcGx1cyBzb21lIHNwYWNlICovCiBpbnQgc3lzY3RsX29wdG1lbV9tYXggX19yZWFkX21vc3RseSA9IHNpemVvZih1bnNpZ25lZCBsb25nKSooMipVSU9fTUFYSU9WKzUxMik7CiBFWFBPUlRfU1lNQk9MKHN5c2N0bF9vcHRtZW1fbWF4KTsKIApAQCAtMTE3NSw3ICsxMTc1LDcgQEAKIHZvaWQgc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spCiB7CiAJLyoKLQkgKiBXZSBzdWJzdHJhY3Qgb25lIGZyb20gc2tfd21lbV9hbGxvYyBhbmQgY2FuIGtub3cgaWYKKwkgKiBXZSBzdWJ0cmFjdCBvbmUgZnJvbSBza193bWVtX2FsbG9jIGFuZCBjYW4ga25vdyBpZgogCSAqIHNvbWUgcGFja2V0cyBhcmUgc3RpbGwgaW4gc29tZSB0eCBxdWV1ZS4KIAkgKiBJZiBub3QgbnVsbCwgc29ja193ZnJlZSgpIHdpbGwgY2FsbCBfX3NrX2ZyZWUoc2spIGxhdGVyCiAJICovCkBAIC0xMTg1LDEwICsxMTg1LDEwIEBACiBFWFBPUlRfU1lNQk9MKHNrX2ZyZWUpOwogCiAvKgotICogTGFzdCBzb2NrX3B1dCBzaG91bGQgZHJvcCByZWZlcnJlbmNlIHRvIHNrLT5za19uZXQuIEl0IGhhcyBhbHJlYWR5Ci0gKiBiZWVuIGRyb3BwZWQgaW4gc2tfY2hhbmdlX25ldC4gVGFraW5nIHJlZmVycmVuY2UgdG8gc3RvcHBpbmcgbmFtZXNwYWNlCisgKiBMYXN0IHNvY2tfcHV0IHNob3VsZCBkcm9wIHJlZmVyZW5jZSB0byBzay0+c2tfbmV0LiBJdCBoYXMgYWxyZWFkeQorICogYmVlbiBkcm9wcGVkIGluIHNrX2NoYW5nZV9uZXQuIFRha2luZyByZWZlcmVuY2UgdG8gc3RvcHBpbmcgbmFtZXNwYWNlCiAgKiBpcyBub3QgYW4gb3B0aW9uLgotICogVGFrZSByZWZlcnJlbmNlIHRvIGEgc29ja2V0IHRvIHJlbW92ZSBpdCBmcm9tIGhhc2ggX2FsaXZlXyBhbmQgYWZ0ZXIgdGhhdAorICogVGFrZSByZWZlcmVuY2UgdG8gYSBzb2NrZXQgdG8gcmVtb3ZlIGl0IGZyb20gaGFzaCBfYWxpdmVfIGFuZCBhZnRlciB0aGF0CiAgKiBkZXN0cm95IGl0IGluIHRoZSBjb250ZXh0IG9mIGluaXRfbmV0LgogICovCiB2b2lkIHNrX3JlbGVhc2Vfa2VybmVsKHN0cnVjdCBzb2NrICpzaykKZGlmZiAtLWdpdCBhL25ldC9kY2NwL29wdGlvbnMuYyBiL25ldC9kY2NwL29wdGlvbnMuYwppbmRleCBmMDZmZmNmLi40YjJhYjY1IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9vcHRpb25zLmMKKysrIGIvbmV0L2RjY3Avb3B0aW9ucy5jCkBAIC0xMjMsNiArMTIzLDggQEAKIAkJY2FzZSBEQ0NQT19DSEFOR0VfTCAuLi4gRENDUE9fQ09ORklSTV9SOgogCQkJaWYgKHBrdF90eXBlID09IERDQ1BfUEtUX0RBVEEpICAgICAgLyogUkZDIDQzNDAsIDYgKi8KIAkJCQlicmVhazsKKwkJCWlmIChsZW4gPT0gMCkKKwkJCQlnb3RvIG91dF9pbnZhbGlkX29wdGlvbjsKIAkJCXJjID0gZGNjcF9mZWF0X3BhcnNlX29wdGlvbnMoc2ssIGRyZXEsIG1hbmRhdG9yeSwgb3B0LAogCQkJCQkJICAgICp2YWx1ZSwgdmFsdWUgKyAxLCBsZW4gLSAxKTsKIAkJCWlmIChyYykKZGlmZiAtLWdpdCBhL25ldC9kY2NwL291dHB1dC5jIGIvbmV0L2RjY3Avb3V0cHV0LmMKaW5kZXggNzg0ZDMwMjEuLjEzNmQ0MWMgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL291dHB1dC5jCisrKyBiL25ldC9kY2NwL291dHB1dC5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIH0KIAogLyoqCi0gKiBkY2NwX2RldGVybWluZV9jY21wcyAgLSAgRmluZCBvdXQgYWJvdXQgQ0NJRC1zcGVjZmljIHBhY2tldC1zaXplIGxpbWl0cworICogZGNjcF9kZXRlcm1pbmVfY2NtcHMgIC0gIEZpbmQgb3V0IGFib3V0IENDSUQtc3BlY2lmaWMgcGFja2V0LXNpemUgbGltaXRzCiAgKiBXZSBvbmx5IGNvbnNpZGVyIHRoZSBIQy1zZW5kZXIgQ0NJRCBmb3Igc2V0dGluZyB0aGUgQ0NNUFMgKFJGQyA0MzQwLCAxNC4pLAogICogc2luY2UgdGhlIFJYIENDSUQgaXMgcmVzdHJpY3RlZCB0byBmZWVkYmFjayBwYWNrZXRzIChBY2tzKSwgd2hpY2ggYXJlIHNtYWxsCiAgKiBpbiBjb21wYXJpc29uIHdpdGggdGhlIGRhdGEgdHJhZmZpYy4gQSB2YWx1ZSBvZiAwIG1lYW5zICJubyBjdXJyZW50IENDTVBTIi4KZGlmZiAtLWdpdCBhL25ldC9kc2EvS2NvbmZpZyBiL25ldC9kc2EvS2NvbmZpZwppbmRleCA4N2JiNWY0Li5jNTNkZWQyIDEwMDY0NAotLS0gYS9uZXQvZHNhL0tjb25maWcKKysrIGIvbmV0L2RzYS9LY29uZmlnCkBAIC00MSwxMiArNDEsMTIgQEAKIAlkZWZhdWx0IG4KIAogY29uZmlnIE5FVF9EU0FfTVY4OEU2MTMxCi0JYm9vbCAiTWFydmVsbCA4OEU2MDk1LzYwOTVGLzYxMzEgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydCIKKwlib29sICJNYXJ2ZWxsIDg4RTYwODUvNjA5NS82MDk1Ri82MTMxIGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnQiCiAJc2VsZWN0IE5FVF9EU0FfTVY4OEU2WFhYCiAJc2VsZWN0IE5FVF9EU0FfTVY4OEU2WFhYX05FRURfUFBVCiAJc2VsZWN0IE5FVF9EU0FfVEFHX0RTQQogCS0tLWhlbHAtLS0KLQkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTWFydmVsbCA4OEU2MDk1LzYwOTVGLzYxMzEKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTWFydmVsbCA4OEU2MDg1LzYwOTUvNjA5NUYvNjEzMQogCSAgZXRoZXJuZXQgc3dpdGNoIGNoaXBzLgogCiBjb25maWcgTkVUX0RTQV9NVjg4RTYxMjNfNjFfNjUKZGlmZiAtLWdpdCBhL25ldC9kc2EvbXY4OGU2MTMxLmMgYi9uZXQvZHNhL212ODhlNjEzMS5jCmluZGV4IGJiMmI0MWIuLjQ1Zjc0MTEgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvbXY4OGU2MTMxLmMKKysrIGIvbmV0L2RzYS9tdjg4ZTYxMzEuYwpAQCAtMTQsNiArMTQsMTMgQEAKICNpbmNsdWRlICJkc2FfcHJpdi5oIgogI2luY2x1ZGUgIm12ODhlNnh4eC5oIgogCisvKgorICogU3dpdGNoIHByb2R1Y3QgSURzCisgKi8KKyNkZWZpbmUgSURfNjA4NQkJMHgwNGEwCisjZGVmaW5lIElEXzYwOTUJCTB4MDk1MAorI2RlZmluZSBJRF82MTMxCQkweDEwNjAKKwogc3RhdGljIGNoYXIgKm12ODhlNjEzMV9wcm9iZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgc3dfYWRkcikKIHsKIAlpbnQgcmV0OwpAQCAtMjEsOSArMjgsMTEgQEAKIAlyZXQgPSBfX212ODhlNnh4eF9yZWdfcmVhZChidXMsIHN3X2FkZHIsIFJFR19QT1JUKDApLCAweDAzKTsKIAlpZiAocmV0ID49IDApIHsKIAkJcmV0ICY9IDB4ZmZmMDsKLQkJaWYgKHJldCA9PSAweDA5NTApCisJCWlmIChyZXQgPT0gSURfNjA4NSkKKwkJCXJldHVybiAiTWFydmVsbCA4OEU2MDg1IjsKKwkJaWYgKHJldCA9PSBJRF82MDk1KQogCQkJcmV0dXJuICJNYXJ2ZWxsIDg4RTYwOTUvODhFNjA5NUYiOwotCQlpZiAocmV0ID09IDB4MTA2MCkKKwkJaWYgKHJldCA9PSBJRF82MTMxKQogCQkJcmV0dXJuICJNYXJ2ZWxsIDg4RTYxMzEiOwogCX0KIApAQCAtMTI0LDcgKzEzMyw3IEBACiAJICogSWdub3JlIHJlbW92ZWQgdGFnIGRhdGEgb24gZG91Ymx5IHRhZ2dlZCBwYWNrZXRzLCBkaXNhYmxlCiAJICogZmxvdyBjb250cm9sIG1lc3NhZ2VzLCBmb3JjZSBmbG93IGNvbnRyb2wgcHJpb3JpdHkgdG8gdGhlCiAJICogaGlnaGVzdCwgYW5kIHNlbmQgYWxsIHNwZWNpYWwgbXVsdGljYXN0IGZyYW1lcyB0byB0aGUgQ1BVCi0JICogcG9ydCBhdCB0aGUgaGlnZXN0IHByaW9yaXR5LgorCSAqIHBvcnQgYXQgdGhlIGhpZ2hlc3QgcHJpb3JpdHkuCiAJICovCiAJUkVHX1dSSVRFKFJFR19HTE9CQUwyLCAweDA1LCAweDAwZmYpOwogCkBAIC0xNjQsNiArMTczLDcgQEAKIAogc3RhdGljIGludCBtdjg4ZTYxMzFfc2V0dXBfcG9ydChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwKQogeworCXN0cnVjdCBtdjg4ZTZ4eHhfcHJpdl9zdGF0ZSAqcHMgPSAodm9pZCAqKShkcyArIDEpOwogCWludCBhZGRyID0gUkVHX1BPUlQocCk7CiAJdTE2IHZhbDsKIApAQCAtMTcxLDEwICsxODEsMTMgQEAKIAkgKiBNQUMgRm9yY2luZyByZWdpc3RlcjogZG9uJ3QgZm9yY2UgbGluaywgc3BlZWQsIGR1cGxleAogCSAqIG9yIGZsb3cgY29udHJvbCBzdGF0ZSB0byBhbnkgcGFydGljdWxhciB2YWx1ZXMgb24gcGh5c2ljYWwKIAkgKiBwb3J0cywgYnV0IGZvcmNlIHRoZSBDUFUgcG9ydCBhbmQgYWxsIERTQSBwb3J0cyB0byAxMDAwIE1iL3MKLQkgKiBmdWxsIGR1cGxleC4KKwkgKiAoMTAwIE1iL3Mgb24gNjA4NSkgZnVsbCBkdXBsZXguCiAJICovCiAJaWYgKGRzYV9pc19jcHVfcG9ydChkcywgcCkgfHwgZHMtPmRzYV9wb3J0X21hc2sgJiAoMSA8PCBwKSkKLQkJUkVHX1dSSVRFKGFkZHIsIDB4MDEsIDB4MDAzZSk7CisJCWlmIChwcy0+aWQgPT0gSURfNjA4NSkKKwkJCVJFR19XUklURShhZGRyLCAweDAxLCAweDAwM2QpOyAvKiAxMDAgTWIvcyAqLworCQllbHNlCisJCQlSRUdfV1JJVEUoYWRkciwgMHgwMSwgMHgwMDNlKTsgLyogMTAwMCBNYi9zICovCiAJZWxzZQogCQlSRUdfV1JJVEUoYWRkciwgMHgwMSwgMHgwMDAzKTsKIApAQCAtMTk0LDggKzIwNywxNSBAQAogCSAqIG1vZGUsIGJ1dCBkbyBub3QgZW5hYmxlIGZvcndhcmRpbmcgb2YgdW5rbm93biB1bmljYXN0cy4KIAkgKi8KIAl2YWwgPSAweDA0MzM7Ci0JaWYgKHAgPT0gZHNhX3Vwc3RyZWFtX3BvcnQoZHMpKQorCWlmIChwID09IGRzYV91cHN0cmVhbV9wb3J0KGRzKSkgewogCQl2YWwgfD0gMHgwMTA0OworCQkvKgorCQkgKiBPbiA2MDg1LCB1bmtub3duIG11bHRpY2FzdCBmb3J3YXJkIGlzIGNvbnRyb2xsZWQKKwkJICogaGVyZSByYXRoZXIgdGhhbiBpbiBQb3J0IENvbnRyb2wgMiByZWdpc3Rlci4KKwkJICovCisJCWlmIChwcy0+aWQgPT0gSURfNjA4NSkKKwkJCXZhbCB8PSAweDAwMDg7CisJfQogCWlmIChkcy0+ZHNhX3BvcnRfbWFzayAmICgxIDw8IHApKQogCQl2YWwgfD0gMHgwMTAwOwogCVJFR19XUklURShhZGRyLCAweDA0LCB2YWwpOwpAQCAtMjM4LDEwICsyNTgsMTkgQEAKIAkgKiBJZiB0aGlzIGlzIHRoZSB1cHN0cmVhbSBwb3J0IGZvciB0aGlzIHN3aXRjaCwgZW5hYmxlCiAJICogZm9yd2FyZGluZyBvZiB1bmtub3duIG11bHRpY2FzdCBhZGRyZXNzZXMuCiAJICovCi0JdmFsID0gMHgwMDgwIHwgZHNhX3Vwc3RyZWFtX3BvcnQoZHMpOwotCWlmIChwID09IGRzYV91cHN0cmVhbV9wb3J0KGRzKSkKLQkJdmFsIHw9IDB4MDA0MDsKLQlSRUdfV1JJVEUoYWRkciwgMHgwOCwgdmFsKTsKKwlpZiAocHMtPmlkID09IElEXzYwODUpCisJCS8qCisJCSAqIG9uIDYwODUsIGJpdHMgMzowIGFyZSByZXNlcnZlZCwgYml0IDYgY29udHJvbCBBUlAKKwkJICogbWlycm9yaW5nLCBhbmQgbXVsdGljYXN0IGZvcndhcmQgaXMgaGFuZGxlZCBpbgorCQkgKiBQb3J0IENvbnRyb2wgcmVnaXN0ZXIuCisJCSAqLworCQlSRUdfV1JJVEUoYWRkciwgMHgwOCwgMHgwMDgwKTsKKwllbHNlIHsKKwkJdmFsID0gMHgwMDgwIHwgZHNhX3Vwc3RyZWFtX3BvcnQoZHMpOworCQlpZiAocCA9PSBkc2FfdXBzdHJlYW1fcG9ydChkcykpCisJCQl2YWwgfD0gMHgwMDQwOworCQlSRUdfV1JJVEUoYWRkciwgMHgwOCwgdmFsKTsKKwl9CiAKIAkvKgogCSAqIFJhdGUgQ29udHJvbDogZGlzYWJsZSBpbmdyZXNzIHJhdGUgbGltaXRpbmcuCkBAIC0yODYsNiArMzE1LDggQEAKIAltdjg4ZTZ4eHhfcHB1X3N0YXRlX2luaXQoZHMpOwogCW11dGV4X2luaXQoJnBzLT5zdGF0c19tdXRleCk7CiAKKwlwcy0+aWQgPSBSRUdfUkVBRChSRUdfUE9SVCgwKSwgMHgwMykgJiAweGZmZjA7CisKIAlyZXQgPSBtdjg4ZTYxMzFfc3dpdGNoX3Jlc2V0KGRzKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL25ldC9kc2EvbXY4OGU2eHh4LmggYi9uZXQvZHNhL212ODhlNnh4eC5oCmluZGV4IGViMGUwYWEuLjYxMTU2Y2EyIDEwMDY0NAotLS0gYS9uZXQvZHNhL212ODhlNnh4eC5oCisrKyBiL25ldC9kc2EvbXY4OGU2eHh4LmgKQEAgLTM5LDYgKzM5LDggQEAKIAkgKiBIb2xkIHRoaXMgbXV0ZXggb3ZlciBzbmFwc2hvdCArIGR1bXAgc2VxdWVuY2VzLgogCSAqLwogCXN0cnVjdCBtdXRleAlzdGF0c19tdXRleDsKKworCWludAkJaWQ7IC8qIHN3aXRjaCBwcm9kdWN0IGlkICovCiB9OwogCiBzdHJ1Y3QgbXY4OGU2eHh4X2h3X3N0YXQgewpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGUgYi9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZQppbmRleCBjZTJkMzM1Li41NzYxMTg1IDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZQorKysgYi9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZQpAQCAtMSw1ICsxLDMgQEAKIG9iai0kKENPTkZJR19JRUVFODAyMTU0KSArPQlpZWVlODAyMTU0Lm8gYWZfODAyMTU0Lm8KIGllZWU4MDIxNTQteQkJOj0gbmV0bGluay5vIG5sLW1hYy5vIG5sLXBoeS5vIG5sX3BvbGljeS5vIHdwYW4tY2xhc3MubwogYWZfODAyMTU0LXkJCTo9IGFmX2llZWU4MDIxNTQubyByYXcubyBkZ3JhbS5vCi0KLWNjZmxhZ3MteSArPSAtV2FsbCAtRERFQlVHCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9jaXBzb19pcHY0LmMgYi9uZXQvaXB2NC9jaXBzb19pcHY0LmMKaW5kZXggMDk0ZTE1MC4uYTBhZjdlYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvY2lwc29faXB2NC5jCisrKyBiL25ldC9pcHY0L2NpcHNvX2lwdjQuYwpAQCAtMTEyLDcgKzExMiw3IEBACiAvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY2F0ZWdvcnkgcmFuZ2VzIHBlcm1pdHRlZCBpbiB0aGUgcmFuZ2VkIGNhdGVnb3J5IHRhZwogICogKHRhZyAjNSkuICBZb3UgbWF5IG5vdGUgdGhhdCB0aGUgSUVURiBkcmFmdCBzdGF0ZXMgdGhhdCB0aGUgbWF4aW11bSBudW1iZXIKICAqIG9mIGNhdGVnb3J5IHJhbmdlcyBpcyA3LCBidXQgaWYgdGhlIGxvdyBlbmQgb2YgdGhlIGxhc3QgY2F0ZWdvcnkgcmFuZ2UgaXMKLSAqIHplcm8gdGhlbiBpdCBpcyBwb3NzaWJpbGUgdG8gZml0IDggY2F0ZWdvcnkgcmFuZ2VzIGJlY2F1c2UgdGhlIHplcm8gc2hvdWxkCisgKiB6ZXJvIHRoZW4gaXQgaXMgcG9zc2libGUgdG8gZml0IDggY2F0ZWdvcnkgcmFuZ2VzIGJlY2F1c2UgdGhlIHplcm8gc2hvdWxkCiAgKiBiZSBvbWl0dGVkLiAqLwogI2RlZmluZSBDSVBTT19WNF9UQUdfUk5HX0NBVF9NQVggICAgICA4CiAKQEAgLTQzOCw3ICs0MzgsNyBAQAogICoKICAqIERlc2NyaXB0aW9uOgogICogU2VhcmNoIHRoZSBET0kgZGVmaW5pdGlvbiBsaXN0IGZvciBhIERPSSBkZWZpbml0aW9uIHdpdGggYSBET0kgdmFsdWUgdGhhdAotICogbWF0Y2hlcyBAZG9pLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJpbGUgZm9yIGNhbGxpbmcgcmN1X3JlYWRfW3VuXWxvY2soKS4KKyAqIG1hdGNoZXMgQGRvaS4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgcmN1X3JlYWRfW3VuXWxvY2soKS4KICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBET0kgZGVmaW5pdGlvbiBvbiBzdWNjZXNzIGFuZCBOVUxMIG9uIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2lwc29fdjRfZG9pICpjaXBzb192NF9kb2lfc2VhcmNoKHUzMiBkb2kpCkBAIC0xMjkzLDcgKzEyOTMsNyBAQAogCQkJcmV0dXJuIHJldF92YWw7CiAKIAkJLyogVGhpcyB3aWxsIHNlbmQgcGFja2V0cyB1c2luZyB0aGUgIm9wdGltaXplZCIgZm9ybWF0IHdoZW4KLQkJICogcG9zc2liaWxlIGFzIHNwZWNpZmllZCBpbiAgc2VjdGlvbiAzLjQuMi42IG9mIHRoZQorCQkgKiBwb3NzaWJsZSBhcyBzcGVjaWZpZWQgaW4gIHNlY3Rpb24gMy40LjIuNiBvZiB0aGUKIAkJICogQ0lQU08gZHJhZnQuICovCiAJCWlmIChjaXBzb192NF9yYm1fb3B0Zm10ICYmIHJldF92YWwgPiAwICYmIHJldF92YWwgPD0gMTApCiAJCQl0YWdfbGVuID0gMTQ7CkBAIC0xNzUyLDcgKzE3NTIsNyBAQAogfQogCiAvKioKLSAqIGNpcHNvX3Y0X2Vycm9yIC0gU2VuZCB0aGUgY29ycmVjdCByZXBvbnNlIGZvciBhIGJhZCBwYWNrZXQKKyAqIGNpcHNvX3Y0X2Vycm9yIC0gU2VuZCB0aGUgY29ycmVjdCByZXNwb25zZSBmb3IgYSBiYWQgcGFja2V0CiAgKiBAc2tiOiB0aGUgcGFja2V0CiAgKiBAZXJyb3I6IHRoZSBlcnJvciBjb2RlCiAgKiBAZ2F0ZXdheTogQ0lQU08gZ2F0ZXdheSBmbGFnCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9kZXZpbmV0LmMgYi9uZXQvaXB2NC9kZXZpbmV0LmMKaW5kZXggNTM0NWIwYi4uY2Q5Y2EwOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZGV2aW5ldC5jCisrKyBiL25ldC9pcHY0L2RldmluZXQuYwpAQCAtMTY4MCw3ICsxNjgwLDcgQEAKIAkJcmV0dXJuOwogCiAJY25mLT5zeXNjdGwgPSBOVUxMOwotCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHQtPnN5c2N0bF9oZWFkZXIpOworCXVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZSh0LT5zeXNjdGxfaGVhZGVyKTsKIAlrZnJlZSh0LT5kZXZfbmFtZSk7CiAJa2ZyZWUodCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfdHJpZS5jIGIvbmV0L2lwdjQvZmliX3RyaWUuYwppbmRleCBiOTJjODZmLi41ZmU5YjhiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfdHJpZS5jCisrKyBiL25ldC9pcHY0L2ZpYl90cmllLmMKQEAgLTEyLDcgKzEyLDcgQEAKICAqCiAgKiAgIEhhbnMgTGlzcyA8aGFucy5saXNzQGl0cy51dS5zZT4gIFVwcHNhbGEgVW5pdmVyc2l0ZXQKICAqCi0gKiBUaGlzIHdvcmsgaXMgYmFzZWQgb24gdGhlIExQQy10cmllIHdoaWNoIGlzIG9yaWdpbmFsbHkgZGVzY2liZWQgaW46CisgKiBUaGlzIHdvcmsgaXMgYmFzZWQgb24gdGhlIExQQy10cmllIHdoaWNoIGlzIG9yaWdpbmFsbHkgZGVzY3JpYmVkIGluOgogICoKICAqIEFuIGV4cGVyaW1lbnRhbCBzdHVkeSBvZiBjb21wcmVzc2lvbiBtZXRob2RzIGZvciBkeW5hbWljIHRyaWVzCiAgKiBTdGVmYW4gTmlsc3NvbiBhbmQgTWF0dGkgVGlra2FuZW4uIEFsZ29yaXRobWljYSwgMzMoMSk6MTktMzMsIDIwMDIuCkBAIC0xOTc4LDkgKzE5NzgsNiBAQAogCXQgPSAoc3RydWN0IHRyaWUgKikgdGItPnRiX2RhdGE7CiAJbWVtc2V0KHQsIDAsIHNpemVvZigqdCkpOwogCi0JaWYgKGlkID09IFJUX1RBQkxFX0xPQ0FMKQotCQlwcl9pbmZvKCJJUHY0IEZJQjogVXNpbmcgTEMtdHJpZSB2ZXJzaW9uICVzXG4iLCBWRVJTSU9OKTsKLQogCXJldHVybiB0YjsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWNtcC5jIGIvbmV0L2lwdjQvaWNtcC5jCmluZGV4IGE5MWRjMTYuLmU1ZjhhNzEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ljbXAuYworKysgYi9uZXQvaXB2NC9pY21wLmMKQEAgLTcwNCw3ICs3MDQsNyBAQAogCSAqLwogCiAJLyoKLQkgKglDaGVjayB0aGUgb3RoZXIgZW5kIGlzbnQgdmlvbGF0aW5nIFJGQyAxMTIyLiBTb21lIHJvdXRlcnMgc2VuZAorCSAqCUNoZWNrIHRoZSBvdGhlciBlbmQgaXNuJ3QgdmlvbGF0aW5nIFJGQyAxMTIyLiBTb21lIHJvdXRlcnMgc2VuZAogCSAqCWJvZ3VzIHJlc3BvbnNlcyB0byBicm9hZGNhc3QgZnJhbWVzLiBJZiB5b3Ugc2VlIHRoaXMgbWVzc2FnZQogCSAqCWZpcnN0IGNoZWNrIHlvdXIgbmV0bWFzayBtYXRjaGVzIGF0IGJvdGggZW5kcywgaWYgaXQgZG9lcyB0aGVuCiAJICoJZ2V0IHRoZSBvdGhlciB2ZW5kb3IgdG8gZml4IHRoZWlyIGtpdC4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCmluZGV4IDZjMGI3ZjQuLjM4ZjIzZTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKKysrIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwpAQCAtNzMsNyArNzMsNyBAQAogCQkgICAgICFzazItPnNrX2JvdW5kX2Rldl9pZiB8fAogCQkgICAgIHNrLT5za19ib3VuZF9kZXZfaWYgPT0gc2syLT5za19ib3VuZF9kZXZfaWYpKSB7CiAJCQlpZiAoIXJldXNlIHx8ICFzazItPnNrX3JldXNlIHx8Ci0JCQkgICAgKCgxIDw8IHNrMi0+c2tfc3RhdGUpICYgKFRDUEZfTElTVEVOIHwgVENQRl9DTE9TRSkpKSB7CisJCQkgICAgc2syLT5za19zdGF0ZSA9PSBUQ1BfTElTVEVOKSB7CiAJCQkJY29uc3QgX19iZTMyIHNrMl9yY3Zfc2FkZHIgPSBza19yY3Zfc2FkZHIoc2syKTsKIAkJCQlpZiAoIXNrMl9yY3Zfc2FkZHIgfHwgIXNrX3Jjdl9zYWRkcihzaykgfHwKIAkJCQkgICAgc2syX3Jjdl9zYWRkciA9PSBza19yY3Zfc2FkZHIoc2spKQpAQCAtMTIyLDggKzEyMiw3IEBACiAJCQkJCSAgICAodGItPm51bV9vd25lcnMgPCBzbWFsbGVzdF9zaXplIHx8IHNtYWxsZXN0X3NpemUgPT0gLTEpKSB7CiAJCQkJCQlzbWFsbGVzdF9zaXplID0gdGItPm51bV9vd25lcnM7CiAJCQkJCQlzbWFsbGVzdF9yb3ZlciA9IHJvdmVyOwotCQkJCQkJaWYgKGF0b21pY19yZWFkKCZoYXNoaW5mby0+YnNvY2tldHMpID4gKGhpZ2ggLSBsb3cpICsgMSAmJgotCQkJCQkJICAgICFpbmV0X2NzayhzayktPmljc2tfYWZfb3BzLT5iaW5kX2NvbmZsaWN0KHNrLCB0YikpIHsKKwkJCQkJCWlmIChhdG9taWNfcmVhZCgmaGFzaGluZm8tPmJzb2NrZXRzKSA+IChoaWdoIC0gbG93KSArIDEpIHsKIAkJCQkJCQlzcGluX3VubG9jaygmaGVhZC0+bG9jayk7CiAJCQkJCQkJc251bSA9IHNtYWxsZXN0X3JvdmVyOwogCQkJCQkJCWdvdG8gaGF2ZV9zbnVtOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldHBlZXIuYyBiL25ldC9pcHY0L2luZXRwZWVyLmMKaW5kZXggZGQxYjIwZS4uOWRmNGU2MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldHBlZXIuYworKysgYi9uZXQvaXB2NC9pbmV0cGVlci5jCkBAIC0zNTQsNyArMzU0LDggQEAKIH0KIAogLyogTWF5IGJlIGNhbGxlZCB3aXRoIGxvY2FsIEJIIGVuYWJsZWQuICovCi1zdGF0aWMgdm9pZCB1bmxpbmtfZnJvbV9wb29sKHN0cnVjdCBpbmV0X3BlZXIgKnAsIHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSkKK3N0YXRpYyB2b2lkIHVubGlua19mcm9tX3Bvb2woc3RydWN0IGluZXRfcGVlciAqcCwgc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlLAorCQkJICAgICBzdHJ1Y3QgaW5ldF9wZWVyIF9fcmN1ICoqc3RhY2tbUEVFUl9NQVhERVBUSF0pCiB7CiAJaW50IGRvX2ZyZWU7CiAKQEAgLTM2OCw3ICszNjksNiBAQAogCSAqIFdlIHVzZSByZWZjbnQ9LTEgdG8gYWxlcnQgbG9ja2xlc3MgcmVhZGVycyB0aGlzIGVudHJ5IGlzIGRlbGV0ZWQuCiAJICovCiAJaWYgKGF0b21pY19jbXB4Y2hnKCZwLT5yZWZjbnQsIDEsIC0xKSA9PSAxKSB7Ci0JCXN0cnVjdCBpbmV0X3BlZXIgX19yY3UgKipzdGFja1tQRUVSX01BWERFUFRIXTsKIAkJc3RydWN0IGluZXRfcGVlciBfX3JjdSAqKipzdGFja3B0ciwgKioqZGVscDsKIAkJaWYgKGxvb2t1cCgmcC0+ZGFkZHIsIHN0YWNrLCBiYXNlKSAhPSBwKQogCQkJQlVHKCk7CkBAIC00MjIsNyArNDIyLDcgQEAKIH0KIAogLyogTWF5IGJlIGNhbGxlZCB3aXRoIGxvY2FsIEJIIGVuYWJsZWQuICovCi1zdGF0aWMgaW50IGNsZWFudXBfb25jZSh1bnNpZ25lZCBsb25nIHR0bCkKK3N0YXRpYyBpbnQgY2xlYW51cF9vbmNlKHVuc2lnbmVkIGxvbmcgdHRsLCBzdHJ1Y3QgaW5ldF9wZWVyIF9fcmN1ICoqc3RhY2tbUEVFUl9NQVhERVBUSF0pCiB7CiAJc3RydWN0IGluZXRfcGVlciAqcCA9IE5VTEw7CiAKQEAgLTQ1NCw3ICs0NTQsNyBAQAogCQkgKiBoYXBwZW4gYmVjYXVzZSBvZiBlbnRyeSBsaW1pdHMgaW4gcm91dGUgY2FjaGUuICovCiAJCXJldHVybiAtMTsKIAotCXVubGlua19mcm9tX3Bvb2wocCwgcGVlcl90b19iYXNlKHApKTsKKwl1bmxpbmtfZnJvbV9wb29sKHAsIHBlZXJfdG9fYmFzZShwKSwgc3RhY2spOwogCXJldHVybiAwOwogfQogCkBAIC01MjQsNyArNTI0LDcgQEAKIAogCWlmIChiYXNlLT50b3RhbCA+PSBpbmV0X3BlZXJfdGhyZXNob2xkKQogCQkvKiBSZW1vdmUgb25lIGxlc3MtcmVjZW50bHktdXNlZCBlbnRyeS4gKi8KLQkJY2xlYW51cF9vbmNlKDApOworCQljbGVhbnVwX29uY2UoMCwgc3RhY2spOwogCiAJcmV0dXJuIHA7CiB9CkBAIC01NDAsNiArNTQwLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CiAJaW50IHR0bCwgdG90YWw7CisJc3RydWN0IGluZXRfcGVlciBfX3JjdSAqKnN0YWNrW1BFRVJfTUFYREVQVEhdOwogCiAJdG90YWwgPSBjb21wdXRlX3RvdGFsKCk7CiAJaWYgKHRvdGFsID49IGluZXRfcGVlcl90aHJlc2hvbGQpCkBAIC01NDgsNyArNTQ5LDcgQEAKIAkJdHRsID0gaW5ldF9wZWVyX21heHR0bAogCQkJCS0gKGluZXRfcGVlcl9tYXh0dGwgLSBpbmV0X3BlZXJfbWludHRsKSAvIEhaICoKIAkJCQkJdG90YWwgLyBpbmV0X3BlZXJfdGhyZXNob2xkICogSFo7Ci0Jd2hpbGUgKCFjbGVhbnVwX29uY2UodHRsKSkgeworCXdoaWxlICghY2xlYW51cF9vbmNlKHR0bCwgc3RhY2spKSB7CiAJCWlmIChqaWZmaWVzICE9IG5vdykKIAkJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMgYi9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCmluZGV4IGExMTUxYjguLmIxZDI4MmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMKKysrIGIvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYwpAQCAtMjIzLDMxICsyMjMsMzAgQEAKIAogCWlmICgocXAtPnEubGFzdF9pbiAmIElORVRfRlJBR19GSVJTVF9JTikgJiYgcXAtPnEuZnJhZ21lbnRzICE9IE5VTEwpIHsKIAkJc3RydWN0IHNrX2J1ZmYgKmhlYWQgPSBxcC0+cS5mcmFnbWVudHM7CisJCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoOworCQlpbnQgZXJyOwogCiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJaGVhZC0+ZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBxcC0+aWlmKTsKIAkJaWYgKCFoZWFkLT5kZXYpCiAJCQlnb3RvIG91dF9yY3VfdW5sb2NrOwogCisJCS8qIHNrYiBkc3QgaXMgc3RhbGUsIGRyb3AgaXQsIGFuZCBwZXJmb3JtIHJvdXRlIGxvb2t1cCBhZ2FpbiAqLworCQlza2JfZHN0X2Ryb3AoaGVhZCk7CisJCWlwaCA9IGlwX2hkcihoZWFkKTsKKwkJZXJyID0gaXBfcm91dGVfaW5wdXRfbm9yZWYoaGVhZCwgaXBoLT5kYWRkciwgaXBoLT5zYWRkciwKKwkJCQkJICAgaXBoLT50b3MsIGhlYWQtPmRldik7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dF9yY3VfdW5sb2NrOworCiAJCS8qCi0JCSAqIE9ubHkgc2VhcmNoIHJvdXRlciB0YWJsZSBmb3IgdGhlIGhlYWQgZnJhZ21lbnQsCi0JCSAqIHdoZW4gZGVmcmFnaW5nIHRpbWVvdXQgYXQgUFJFX1JPVVRJTkcgSE9PSy4KKwkJICogT25seSBhbiBlbmQgaG9zdCBuZWVkcyB0byBzZW5kIGFuIElDTVAKKwkJICogIkZyYWdtZW50IFJlYXNzZW1ibHkgVGltZW91dCIgbWVzc2FnZSwgcGVyIFJGQzc5Mi4KIAkJICovCi0JCWlmIChxcC0+dXNlciA9PSBJUF9ERUZSQUdfQ09OTlRSQUNLX0lOICYmICFza2JfZHN0KGhlYWQpKSB7Ci0JCQljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihoZWFkKTsKLQkJCWludCBlcnIgPSBpcF9yb3V0ZV9pbnB1dChoZWFkLCBpcGgtPmRhZGRyLCBpcGgtPnNhZGRyLAotCQkJCQkJIGlwaC0+dG9zLCBoZWFkLT5kZXYpOwotCQkJaWYgKHVubGlrZWx5KGVycikpCi0JCQkJZ290byBvdXRfcmN1X3VubG9jazsKKwkJaWYgKHFwLT51c2VyID09IElQX0RFRlJBR19DT05OVFJBQ0tfSU4gJiYKKwkJICAgIHNrYl9ydGFibGUoaGVhZCktPnJ0X3R5cGUgIT0gUlROX0xPQ0FMKQorCQkJZ290byBvdXRfcmN1X3VubG9jazsKIAotCQkJLyoKLQkJCSAqIE9ubHkgYW4gZW5kIGhvc3QgbmVlZHMgdG8gc2VuZCBhbiBJQ01QCi0JCQkgKiAiRnJhZ21lbnQgUmVhc3NlbWJseSBUaW1lb3V0IiBtZXNzYWdlLCBwZXIgUkZDNzkyLgotCQkJICovCi0JCQlpZiAoc2tiX3J0YWJsZShoZWFkKS0+cnRfdHlwZSAhPSBSVE5fTE9DQUwpCi0JCQkJZ290byBvdXRfcmN1X3VubG9jazsKLQotCQl9CiAKIAkJLyogU2VuZCBhbiBJQ01QICJGcmFnbWVudCBSZWFzc2VtYmx5IFRpbWVvdXQiIG1lc3NhZ2UuICovCiAJCWljbXBfc2VuZChoZWFkLCBJQ01QX1RJTUVfRVhDRUVERUQsIElDTVBfRVhDX0ZSQUdUSU1FLCAwKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX29wdGlvbnMuYyBiL25ldC9pcHY0L2lwX29wdGlvbnMuYwppbmRleCAyOGE3MzZmLi4yMzkxYjI0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9vcHRpb25zLmMKKysrIGIvbmV0L2lwdjQvaXBfb3B0aW9ucy5jCkBAIC0zMjksNyArMzI5LDcgQEAKIAkJCQkJcHBfcHRyID0gb3B0cHRyICsgMjsKIAkJCQkJZ290byBlcnJvcjsKIAkJCQl9Ci0JCQkJaWYgKHNrYikgeworCQkJCWlmIChydCkgewogCQkJCQltZW1jcHkoJm9wdHB0cltvcHRwdHJbMl0tMV0sICZydC0+cnRfc3BlY19kc3QsIDQpOwogCQkJCQlvcHQtPmlzX2NoYW5nZWQgPSAxOwogCQkJCX0KQEAgLTM3MSw3ICszNzEsNyBAQAogCQkJCQkJZ290byBlcnJvcjsKIAkJCQkJfQogCQkJCQlvcHQtPnRzID0gb3B0cHRyIC0gaXBoOwotCQkJCQlpZiAoc2tiKSB7CisJCQkJCWlmIChydCkgIHsKIAkJCQkJCW1lbWNweSgmb3B0cHRyW29wdHB0clsyXS0xXSwgJnJ0LT5ydF9zcGVjX2RzdCwgNCk7CiAJCQkJCQl0aW1lcHRyID0gKF9fYmUzMiopJm9wdHB0cltvcHRwdHJbMl0rM107CiAJCQkJCX0KQEAgLTYwMyw3ICs2MDMsNyBAQAogCXVuc2lnbmVkIGxvbmcgb3JlZmRzdDsKIAlpbnQgZXJyOwogCi0JaWYgKCFvcHQtPnNycikKKwlpZiAoIW9wdC0+c3JyIHx8ICFydCkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoc2tiLT5wa3RfdHlwZSAhPSBQQUNLRVRfSE9TVCkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKaW5kZXggNjdmMjQxYi4uNDU5YzAxMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKQEAgLTYwMyw3ICs2MDMsNyBAQAogCQkvKiBJRjogaXQgZG9lc24ndCBmaXQsIHVzZSAnbXR1JyAtIHRoZSBkYXRhIHNwYWNlIGxlZnQgKi8KIAkJaWYgKGxlbiA+IG10dSkKIAkJCWxlbiA9IG10dTsKLQkJLyogSUY6IHdlIGFyZSBub3Qgc2VuZGluZyB1cHRvIGFuZCBpbmNsdWRpbmcgdGhlIHBhY2tldCBlbmQKKwkJLyogSUY6IHdlIGFyZSBub3Qgc2VuZGluZyB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBwYWNrZXQgZW5kCiAJCSAgIHRoZW4gYWxpZ24gdGhlIG5leHQgc3RhcnQgb24gYW4gZWlnaHQgYnl0ZSBib3VuZGFyeSAqLwogCQlpZiAobGVuIDwgbGVmdCkJewogCQkJbGVuICY9IH43OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBjb25maWcuYyBiL25ldC9pcHY0L2lwY29uZmlnLmMKaW5kZXggMmIwOTc3NS4uY2JmZjJlYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBjb25maWcuYworKysgYi9uZXQvaXB2NC9pcGNvbmZpZy5jCkBAIC0xNDQ0LDcgKzE0NDQsNyBAQAogCQlyb290X3NlcnZlcl9hZGRyID0gYWRkcjsKIAogCS8qCi0JICogVXNlIGRlZmF1bHRzIHdoZXJlZXZlciBhcHBsaWNhYmxlLgorCSAqIFVzZSBkZWZhdWx0cyB3aGVyZXZlciBhcHBsaWNhYmxlLgogCSAqLwogCWlmIChpY19kZWZhdWx0cygpIDwgMCkKIAkJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIuYwppbmRleCBmM2MwYjU0Li40NjE0YmFiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIuYwpAQCAtMjIxLDkgKzIyMSwxMCBAQAogCXJldHVybiBjc3VtOwogfQogCi1zdGF0aWMgaW50IG5mX2lwX3JvdXRlKHN0cnVjdCBkc3RfZW50cnkgKipkc3QsIHN0cnVjdCBmbG93aSAqZmwpCitzdGF0aWMgaW50IG5mX2lwX3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGRzdF9lbnRyeSAqKmRzdCwKKwkJICAgICAgIHN0cnVjdCBmbG93aSAqZmwsIGJvb2wgc3RyaWN0IF9fYWx3YXlzX3VudXNlZCkKIHsKLQlzdHJ1Y3QgcnRhYmxlICpydCA9IGlwX3JvdXRlX291dHB1dF9rZXkoJmluaXRfbmV0LCAmZmwtPnUuaXA0KTsKKwlzdHJ1Y3QgcnRhYmxlICpydCA9IGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmZmwtPnUuaXA0KTsKIAlpZiAoSVNfRVJSKHJ0KSkKIAkJcmV0dXJuIFBUUl9FUlIocnQpOwogCSpkc3QgPSAmcnQtPmRzdDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCmluZGV4IDRiNWQ0NTcuLjg5YmM3ZTYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwpAQCAtNzYsNyArNzYsNyBAQAogfQogCiAvKgotICogVW5mb3J0dW5hdGx5LCBfYiBhbmQgX21hc2sgYXJlIG5vdCBhbGlnbmVkIHRvIGFuIGludCAob3IgbG9uZyBpbnQpCisgKiBVbmZvcnR1bmF0ZWx5LCBfYiBhbmQgX21hc2sgYXJlIG5vdCBhbGlnbmVkIHRvIGFuIGludCAob3IgbG9uZyBpbnQpCiAgKiBTb21lIGFyY2hlcyBkb250IGNhcmUsIHVucm9sbGluZyB0aGUgbG9vcCBpcyBhIHdpbiBvbiB0aGVtLgogICogRm9yIG90aGVyIGFyY2hlcywgd2Ugb25seSBoYXZlIGEgMTZiaXQgYWxpZ25lbWVudC4KICAqLwpAQCAtMTg3NCw3ICsxODc0LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnIxOwogCi0JLyogTm9vbmUgZWxzZSB3aWxsIGJlIGRvd25pbmcgc2VtIG5vdywgc28gd2Ugd29uJ3Qgc2xlZXAgKi8KKwkvKiBObyBvbmUgZWxzZSB3aWxsIGJlIGRvd25pbmcgc2VtIG5vdywgc28gd2Ugd29uJ3Qgc2xlZXAgKi8KIAlyZXQgPSB4dF9yZWdpc3Rlcl90YXJnZXRzKGFycHRfYnVpbHRpbl90ZywgQVJSQVlfU0laRShhcnB0X2J1aWx0aW5fdGcpKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnIyOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCmluZGV4IGZmY2VhMGQuLjcwNDkxNTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKQEAgLTIyMzMsNyArMjIzMyw3IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyMTsKIAotCS8qIE5vb25lIGVsc2Ugd2lsbCBiZSBkb3duaW5nIHNlbSBub3csIHNvIHdlIHdvbid0IHNsZWVwICovCisJLyogTm8gb25lIGVsc2Ugd2lsbCBiZSBkb3duaW5nIHNlbSBub3csIHNvIHdlIHdvbid0IHNsZWVwICovCiAJcmV0ID0geHRfcmVnaXN0ZXJfdGFyZ2V0cyhpcHRfYnVpbHRpbl90ZywgQVJSQVlfU0laRShpcHRfYnVpbHRpbl90ZykpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycjI7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCmluZGV4IDIxYmNmNDcuLjljNzFiMjcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCkBAIC01MjEsNyArNTIxLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0wobmZfbmF0X3Byb3RvY29sX3JlZ2lzdGVyKTsKIAotLyogTm9vbmUgc3RvcmVzIHRoZSBwcm90b2NvbCBhbnl3aGVyZTsgc2ltcGx5IGRlbGV0ZSBpdC4gKi8KKy8qIE5vIG9uZSBzdG9yZXMgdGhlIHByb3RvY29sIGFueXdoZXJlOyBzaW1wbHkgZGVsZXRlIGl0LiAqLwogdm9pZCBuZl9uYXRfcHJvdG9jb2xfdW5yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgbmZfbmF0X3Byb3RvY29sICpwcm90bykKIHsKIAlzcGluX2xvY2tfYmgoJm5mX25hdF9sb2NrKTsKQEAgLTUzMiw3ICs1MzIsNyBAQAogfQogRVhQT1JUX1NZTUJPTChuZl9uYXRfcHJvdG9jb2xfdW5yZWdpc3Rlcik7CiAKLS8qIE5vb25lIHVzaW5nIGNvbm50cmFjayBieSB0aGUgdGltZSB0aGlzIGNhbGxlZC4gKi8KKy8qIE5vIG9uZSB1c2luZyBjb25udHJhY2sgYnkgdGhlIHRpbWUgdGhpcyBjYWxsZWQuICovCiBzdGF0aWMgdm9pZCBuZl9uYXRfY2xlYW51cF9jb25udHJhY2soc3RydWN0IG5mX2Nvbm4gKmN0KQogewogCXN0cnVjdCBuZl9jb25uX25hdCAqbmF0ID0gbmZfY3RfZXh0X2ZpbmQoY3QsIE5GX0NUX0VYVF9OQVQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcmF3LmMgYi9uZXQvaXB2NC9yYXcuYwppbmRleCAyZDNjNzJlLi5iY2VhZWM0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yYXcuYworKysgYi9uZXQvaXB2NC9yYXcuYwpAQCAtNjIyLDcgKzYyMiw3IEBACiBzdGF0aWMgdm9pZCByYXdfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpCiB7CiAJLyoKLQkgKiBSYXcgc29ja2V0cyBtYXkgaGF2ZSBkaXJlY3Qga2VybmVsIHJlZmVyZW5lY2VzLiBLaWxsIHRoZW0uCisJICogUmF3IHNvY2tldHMgbWF5IGhhdmUgZGlyZWN0IGtlcm5lbCByZWZlcmVuY2VzLiBLaWxsIHRoZW0uCiAJICovCiAJaXBfcmFfY29udHJvbChzaywgMCwgTlVMTCk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IDRiMGM4MTEuLjk5ZTZlNGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3JvdXRlLmMKKysrIGIvbmV0L2lwdjQvcm91dGUuYwpAQCAtODIxLDcgKzgyMSw3IEBACiB9CiAKIC8qCi0gKiBQZXJ0dWJhdGlvbiBvZiBydF9nZW5pZCBieSBhIHNtYWxsIHF1YW50aXR5IFsxLi4yNTZdCisgKiBQZXJ0dXJiYXRpb24gb2YgcnRfZ2VuaWQgYnkgYSBzbWFsbCBxdWFudGl0eSBbMS4uMjU2XQogICogVXNpbmcgOCBiaXRzIG9mIHNodWZmbGluZyBlbnN1cmUgd2UgY2FuIGNhbGwgcnRfY2FjaGVfaW52YWxpZGF0ZSgpCiAgKiBtYW55IHRpbWVzICgyXjI0KSB3aXRob3V0IGdpdmluZyByZWNlbnQgcnRfZ2VuaWQuCiAgKiBKZW5raW5zIGhhc2ggaXMgc3Ryb25nIGVub3VnaCB0aGF0IGxpdGxlIGNoYW5nZXMgb2YgcnRfZ2VuaWQgYXJlIE9LLgpAQCAtMTE5MSw3ICsxMTkxLDcgQEAKICNlbmRpZgogCS8qCiAJICogU2luY2UgbG9va3VwIGlzIGxvY2tmcmVlLCB3ZSBtdXN0IG1ha2Ugc3VyZQotCSAqIHByZXZpb3VzIHdyaXRlcyB0byBydCBhcmUgY29taXR0ZWQgdG8gbWVtb3J5CisJICogcHJldmlvdXMgd3JpdGVzIHRvIHJ0IGFyZSBjb21taXR0ZWQgdG8gbWVtb3J5CiAJICogYmVmb3JlIG1ha2luZyBydCB2aXNpYmxlIHRvIG90aGVyIENQVVMuCiAJICovCiAJcmN1X2Fzc2lnbl9wb2ludGVyKHJ0X2hhc2hfdGFibGVbaGFzaF0uY2hhaW4sIHJ0KTsKQEAgLTE4OTEsNiArMTg5MSw3IEBACiAjaWZkZWYgQ09ORklHX0lQX1JPVVRFX0NMQVNTSUQKIAlydGgtPmRzdC50Y2xhc3NpZCA9IGl0YWc7CiAjZW5kaWYKKwlydGgtPnJ0X3JvdXRlX2lpZiA9IGRldi0+aWZpbmRleDsKIAlydGgtPnJ0X2lpZgk9IGRldi0+aWZpbmRleDsKIAlydGgtPmRzdC5kZXYJPSBpbml0X25ldC5sb29wYmFja19kZXY7CiAJZGV2X2hvbGQocnRoLT5kc3QuZGV2KTsKQEAgLTIwMjYsNiArMjAyNyw3IEBACiAJcnRoLT5ydF9rZXlfc3JjCT0gc2FkZHI7CiAJcnRoLT5ydF9zcmMJPSBzYWRkcjsKIAlydGgtPnJ0X2dhdGV3YXkJPSBkYWRkcjsKKwlydGgtPnJ0X3JvdXRlX2lpZiA9IGluX2Rldi0+ZGV2LT5pZmluZGV4OwogCXJ0aC0+cnRfaWlmIAk9IGluX2Rldi0+ZGV2LT5pZmluZGV4OwogCXJ0aC0+ZHN0LmRldgk9IChvdXRfZGV2KS0+ZGV2OwogCWRldl9ob2xkKHJ0aC0+ZHN0LmRldik7CkBAIC0yMjAyLDYgKzIyMDQsNyBAQAogI2lmZGVmIENPTkZJR19JUF9ST1VURV9DTEFTU0lECiAJcnRoLT5kc3QudGNsYXNzaWQgPSBpdGFnOwogI2VuZGlmCisJcnRoLT5ydF9yb3V0ZV9paWYgPSBkZXYtPmlmaW5kZXg7CiAJcnRoLT5ydF9paWYJPSBkZXYtPmlmaW5kZXg7CiAJcnRoLT5kc3QuZGV2CT0gbmV0LT5sb29wYmFja19kZXY7CiAJZGV2X2hvbGQocnRoLT5kc3QuZGV2KTsKQEAgLTI0MDEsNyArMjQwNCw4IEBACiAJcnRoLT5ydF9tYXJrICAgID0gb2xkZmxwNC0+Zmxvd2k0X21hcms7CiAJcnRoLT5ydF9kc3QJPSBmbDQtPmRhZGRyOwogCXJ0aC0+cnRfc3JjCT0gZmw0LT5zYWRkcjsKLQlydGgtPnJ0X2lpZgk9IDA7CisJcnRoLT5ydF9yb3V0ZV9paWYgPSAwOworCXJ0aC0+cnRfaWlmCT0gb2xkZmxwNC0+Zmxvd2k0X29pZiA/IDogZGV2X291dC0+aWZpbmRleDsKIAkvKiBnZXQgcmVmZXJlbmNlcyB0byB0aGUgZGV2aWNlcyB0aGF0IGFyZSB0byBiZSBob2xkIGJ5IHRoZSByb3V0aW5nCiAJICAgY2FjaGUgZW50cnkgKi8KIAlydGgtPmRzdC5kZXYJPSBkZXZfb3V0OwpAQCAtMjY4Niw2ICsyNjkwLDEyIEBACiB7CiB9CiAKK3N0YXRpYyB1MzIgKmlwdjRfcnRfYmxhY2tob2xlX2Nvd19tZXRyaWNzKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKKwkJCQkJICB1bnNpZ25lZCBsb25nIG9sZCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwdjRfZHN0X2JsYWNraG9sZV9vcHMgPSB7CiAJLmZhbWlseQkJCT0JQUZfSU5FVCwKIAkucHJvdG9jb2wJCT0JY3B1X3RvX2JlMTYoRVRIX1BfSVApLApAQCAtMjY5NCw2ICsyNzA0LDcgQEAKIAkuZGVmYXVsdF9tdHUJCT0JaXB2NF9ibGFja2hvbGVfZGVmYXVsdF9tdHUsCiAJLmRlZmF1bHRfYWR2bXNzCQk9CWlwdjRfZGVmYXVsdF9hZHZtc3MsCiAJLnVwZGF0ZV9wbXR1CQk9CWlwdjRfcnRfYmxhY2tob2xlX3VwZGF0ZV9wbXR1LAorCS5jb3dfbWV0cmljcwkJPQlpcHY0X3J0X2JsYWNraG9sZV9jb3dfbWV0cmljcywKIH07CiAKIHN0cnVjdCBkc3RfZW50cnkgKmlwdjRfYmxhY2tob2xlX3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0X29yaWcpCkBAIC0yNzE2LDYgKzI3MjcsNyBAQAogCQlydC0+cnRfa2V5X2RzdCA9IG9ydC0+cnRfa2V5X2RzdDsKIAkJcnQtPnJ0X2tleV9zcmMgPSBvcnQtPnJ0X2tleV9zcmM7CiAJCXJ0LT5ydF90b3MgPSBvcnQtPnJ0X3RvczsKKwkJcnQtPnJ0X3JvdXRlX2lpZiA9IG9ydC0+cnRfcm91dGVfaWlmOwogCQlydC0+cnRfaWlmID0gb3J0LT5ydF9paWY7CiAJCXJ0LT5ydF9vaWYgPSBvcnQtPnJ0X29pZjsKIAkJcnQtPnJ0X21hcmsgPSBvcnQtPnJ0X21hcms7CkBAIC0yNzI1LDcgKzI3MzcsNiBAQAogCQlydC0+cnRfdHlwZSA9IG9ydC0+cnRfdHlwZTsKIAkJcnQtPnJ0X2RzdCA9IG9ydC0+cnRfZHN0OwogCQlydC0+cnRfc3JjID0gb3J0LT5ydF9zcmM7Ci0JCXJ0LT5ydF9paWYgPSBvcnQtPnJ0X2lpZjsKIAkJcnQtPnJ0X2dhdGV3YXkgPSBvcnQtPnJ0X2dhdGV3YXk7CiAJCXJ0LT5ydF9zcGVjX2RzdCA9IG9ydC0+cnRfc3BlY19kc3Q7CiAJCXJ0LT5wZWVyID0gb3J0LT5wZWVyOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwppbmRleCAxYTQ1NjY1Li4zMjFlNmU4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYworKysgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwpAQCAtMzExLDcgKzMxMSw2IEBACiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvX2xhcmdlX2JpdG1hcCwKIAl9LAotI2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1QKIAl7CiAJCS5wcm9jbmFtZQk9ICJpZ21wX21heF9tZW1iZXJzaGlwcyIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfaWdtcF9tYXhfbWVtYmVyc2hpcHMsCkBAIC0zMTksOCArMzE4LDYgQEAKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMKIAl9LAotCi0jZW5kaWYKIAl7CiAJCS5wcm9jbmFtZQk9ICJpZ21wX21heF9tc2YiLAogCQkuZGF0YQkJPSAmc3lzY3RsX2lnbXBfbWF4X21zZiwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9jdWJpYy5jIGIvbmV0L2lwdjQvdGNwX2N1YmljLmMKaW5kZXggMzQzNDBjOS4uZjM3NmIwNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2N1YmljLmMKKysrIGIvbmV0L2lwdjQvdGNwX2N1YmljLmMKQEAgLTkzLDYgKzkzLDcgQEAKIAl1MzIJYWNrX2NudDsJLyogbnVtYmVyIG9mIGFja3MgKi8KIAl1MzIJdGNwX2N3bmQ7CS8qIGVzdGltYXRlZCB0Y3AgY3duZCAqLwogI2RlZmluZSBBQ0tfUkFUSU9fU0hJRlQJNAorI2RlZmluZSBBQ0tfUkFUSU9fTElNSVQgKDMydSA8PCBBQ0tfUkFUSU9fU0hJRlQpCiAJdTE2CWRlbGF5ZWRfYWNrOwkvKiBlc3RpbWF0ZSB0aGUgcmF0aW8gb2YgUGFja2V0cy9BQ0tzIDw8IDQgKi8KIAl1OAlzYW1wbGVfY250OwkvKiBudW1iZXIgb2Ygc2FtcGxlcyB0byBkZWNpZGUgY3Vycl9ydHQgKi8KIAl1OAlmb3VuZDsJCS8qIHRoZSBleGl0IHBvaW50IGlzIGZvdW5kPyAqLwpAQCAtMzk4LDggKzM5OSwxMiBAQAogCXUzMiBkZWxheTsKIAogCWlmIChpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9PcGVuKSB7Ci0JCWNudCAtPSBjYS0+ZGVsYXllZF9hY2sgPj4gQUNLX1JBVElPX1NISUZUOwotCQljYS0+ZGVsYXllZF9hY2sgKz0gY250OworCQl1MzIgcmF0aW8gPSBjYS0+ZGVsYXllZF9hY2s7CisKKwkJcmF0aW8gLT0gY2EtPmRlbGF5ZWRfYWNrID4+IEFDS19SQVRJT19TSElGVDsKKwkJcmF0aW8gKz0gY250OworCisJCWNhLT5kZWxheWVkX2FjayA9IG1pbihyYXRpbywgQUNLX1JBVElPX0xJTUlUKTsKIAl9CiAKIAkvKiBTb21lIGNhbGxzIGFyZSBmb3IgZHVwbGljYXRlcyB3aXRob3V0IHRpbWV0YW1wcyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2xwLmMgYi9uZXQvaXB2NC90Y3BfbHAuYwppbmRleCA2NTZkNDMxLi43MmY3MjE4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfbHAuYworKysgYi9uZXQvaXB2NC90Y3BfbHAuYwpAQCAtMTIsNyArMTIsNyBAQAogICogICAgIHdpdGhpbiBjb25nX2F2b2lkLgogICogICBvIEVycm9yIGNvcnJlY3RpbmcgaW4gcmVtb3RlIEhaLCB0aGVyZWZvcmUgcmVtb3RlIEhaIHdpbGwgYmUga2VlcGVkCiAgKiAgICAgb24gY2hlY2tpbmcgYW5kIHVwZGF0aW5nLgotICogICBvIEhhbmRsaW5nIGNhbGN1bGF0aW9uIG9mIE9uZS1XYXktRGVsYXkgKE9XRCkgd2l0aGluIHJ0dF9zYW1wbGUsIHNpY25lCisgKiAgIG8gSGFuZGxpbmcgY2FsY3VsYXRpb24gb2YgT25lLVdheS1EZWxheSAoT1dEKSB3aXRoaW4gcnR0X3NhbXBsZSwgc2luY2UKICAqICAgICBPV0QgaGF2ZSBhIHNpbWlsYXIgbWVhbmluZyBhcyBSVFQuIEFsc28gY29ycmVjdCB0aGUgYnVnZ3kgZm9ybXVsYXIuCiAgKiAgIG8gSGFuZGxlIHJlYWN0aW9uIGZvciBFYXJseSBDb25nZXN0aW9uIEluZGljYXRpb24gKEVDSSkgd2l0aGluCiAgKiAgICAgcGt0c19hY2tlZCwgYXMgbWVudGlvbmVkIHdpdGhpbiBwc2V1ZG8gY29kZS4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwppbmRleCA4YjBkMDE2Li4xNzM4OGM3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCkBAIC03Myw3ICs3Myw3IEBACiAJdGNwX2FkdmFuY2Vfc2VuZF9oZWFkKHNrLCBza2IpOwogCXRwLT5zbmRfbnh0ID0gVENQX1NLQl9DQihza2IpLT5lbmRfc2VxOwogCi0JLyogRG9uJ3Qgb3ZlcnJpZGUgTmFnbGUgaW5kZWZpbmF0ZWx5IHdpdGggRi1SVE8gKi8KKwkvKiBEb24ndCBvdmVycmlkZSBOYWdsZSBpbmRlZmluaXRlbHkgd2l0aCBGLVJUTyAqLwogCWlmICh0cC0+ZnJ0b19jb3VudGVyID09IDIpCiAJCXRwLT5mcnRvX2NvdW50ZXIgPSAzOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfeWVhaC5jIGIvbmV0L2lwdjQvdGNwX3llYWguYwppbmRleCBkYzdmNDMxLi4wNWMzYjZmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfeWVhaC5jCisrKyBiL25ldC9pcHY0L3RjcF95ZWFoLmMKQEAgLTIwLDcgKzIwLDcgQEAKICNkZWZpbmUgVENQX1lFQUhfREVMVEEgICAgICAgIDMgLy9sb2cgbWluaW11bSBmcmFjdGlvbiBvZiBjd25kIHRvIGJlIHJlbW92ZWQgb24gbG9zcwogI2RlZmluZSBUQ1BfWUVBSF9FUFNJTE9OICAgICAgMSAvL2xvZyBtYXhpbXVtIGZyYWN0aW9uIHRvIGJlIHJlbW92ZWQgb24gZWFybHkgZGVjb25nZXN0aW9uCiAjZGVmaW5lIFRDUF9ZRUFIX1BIWSAgICAgICAgICA4IC8vbGluIG1heGltdW0gZGVsdGEgZnJvbSBiYXNlCi0jZGVmaW5lIFRDUF9ZRUFIX1JITyAgICAgICAgIDE2IC8vbGluIG1pbnVtdW0gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHJ0dCB0byBjb25zaWRlciBjb21wZXRpdGlvbiBvbiBsb3NzCisjZGVmaW5lIFRDUF9ZRUFIX1JITyAgICAgICAgIDE2IC8vbGluIG1pbmltdW0gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHJ0dCB0byBjb25zaWRlciBjb21wZXRpdGlvbiBvbiBsb3NzCiAjZGVmaW5lIFRDUF9ZRUFIX1pFVEEgICAgICAgIDUwIC8vbGluIG1pbmltdW0gbnVtYmVyIG9mIHN0YXRlIHN3aXRjaHMgdG8gcmVzZXQgcmVub19jb3VudAogCiAjZGVmaW5lIFRDUF9TQ0FMQUJMRV9BSV9DTlQJIDEwMFUKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3VkcC5jIGIvbmV0L2lwdjQvdWRwLmMKaW5kZXggNTg4ZjQ3YS4uZjg3YThlYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdWRwLmMKKysrIGIvbmV0L2lwdjQvdWRwLmMKQEAgLTE4OSw3ICsxODksNyBAQAogICogIEBzazogICAgICAgICAgc29ja2V0IHN0cnVjdCBpbiBxdWVzdGlvbgogICogIEBzbnVtOiAgICAgICAgcG9ydCBudW1iZXIgdG8gbG9vayB1cAogICogIEBzYWRkcl9jb21wOiAgQUYtZGVwZW5kZW50IGNvbXBhcmlzb24gb2YgYm91bmQgbG9jYWwgSVAgYWRkcmVzc2VzCi0gKiAgQGhhc2gyX251bGxhZGRyOiBBRi1kZXBlbmRhbnQgaGFzaCB2YWx1ZSBpbiBzZWNvbmRhcnkgaGFzaCBjaGFpbnMsCisgKiAgQGhhc2gyX251bGxhZGRyOiBBRi1kZXBlbmRlbnQgaGFzaCB2YWx1ZSBpbiBzZWNvbmRhcnkgaGFzaCBjaGFpbnMsCiAgKiAgICAgICAgICAgICAgICAgICB3aXRoIE5VTEwgYWRkcmVzcwogICovCiBpbnQgdWRwX2xpYl9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0sCmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9vdXRwdXQuYyBiL25ldC9pcHY0L3hmcm00X291dHB1dC5jCmluZGV4IDU3MWFhOTYuLjJkNTE4NDAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X291dHB1dC5jCisrKyBiL25ldC9pcHY0L3hmcm00X291dHB1dC5jCkBAIC02OSw3ICs2OSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKHhmcm00X3ByZXBhcmVfb3V0cHV0KTsKIAotc3RhdGljIGludCB4ZnJtNF9vdXRwdXRfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IpCitpbnQgeGZybTRfb3V0cHV0X2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogI2lmZGVmIENPTkZJR19ORVRGSUxURVIKIAlpZiAoIXNrYl9kc3Qoc2tiKS0+eGZybSkgewpAQCAtODYsNyArODYsMTEgQEAKIAogaW50IHhmcm00X291dHB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYl9kc3Qoc2tiKTsKKwlzdHJ1Y3QgeGZybV9zdGF0ZSAqeCA9IGRzdC0+eGZybTsKKwogCXJldHVybiBORl9IT09LX0NPTkQoTkZQUk9UT19JUFY0LCBORl9JTkVUX1BPU1RfUk9VVElORywgc2tiLAotCQkJICAgIE5VTEwsIHNrYl9kc3Qoc2tiKS0+ZGV2LCB4ZnJtNF9vdXRwdXRfZmluaXNoLAorCQkJICAgIE5VTEwsIGRzdC0+ZGV2LAorCQkJICAgIHgtPm91dGVyX21vZGUtPmFmaW5mby0+b3V0cHV0X2ZpbmlzaCwKIAkJCSAgICAhKElQQ0Ioc2tiKS0+ZmxhZ3MgJiBJUFNLQl9SRVJPVVRFRCkpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfcG9saWN5LmMgYi9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYwppbmRleCAxM2UwZTdmLi5kMjBhMDVlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYworKysgYi9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYwpAQCAtNzQsNiArNzQsNyBAQAogCXJ0LT5ydF9rZXlfZHN0ID0gZmw0LT5kYWRkcjsKIAlydC0+cnRfa2V5X3NyYyA9IGZsNC0+c2FkZHI7CiAJcnQtPnJ0X3RvcyA9IGZsNC0+Zmxvd2k0X3RvczsKKwlydC0+cnRfcm91dGVfaWlmID0gZmw0LT5mbG93aTRfaWlmOwogCXJ0LT5ydF9paWYgPSBmbDQtPmZsb3dpNF9paWY7CiAJcnQtPnJ0X29pZiA9IGZsNC0+Zmxvd2k0X29pZjsKIAlydC0+cnRfbWFyayA9IGZsNC0+Zmxvd2k0X21hcms7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9zdGF0ZS5jIGIvbmV0L2lwdjQveGZybTRfc3RhdGUuYwppbmRleCAxNzE3YzY0Li44MDVkNjNlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC94ZnJtNF9zdGF0ZS5jCisrKyBiL25ldC9pcHY0L3hmcm00X3N0YXRlLmMKQEAgLTc4LDYgKzc4LDcgQEAKIAkuaW5pdF90ZW1wc2VsCQk9IF9feGZybTRfaW5pdF90ZW1wc2VsLAogCS5pbml0X3RlbXByb3AJCT0geGZybTRfaW5pdF90ZW1wcm9wLAogCS5vdXRwdXQJCQk9IHhmcm00X291dHB1dCwKKwkub3V0cHV0X2ZpbmlzaAkJPSB4ZnJtNF9vdXRwdXRfZmluaXNoLAogCS5leHRyYWN0X2lucHV0CQk9IHhmcm00X2V4dHJhY3RfaW5wdXQsCiAJLmV4dHJhY3Rfb3V0cHV0CQk9IHhmcm00X2V4dHJhY3Rfb3V0cHV0LAogCS50cmFuc3BvcnRfZmluaXNoCT0geGZybTRfdHJhbnNwb3J0X2ZpbmlzaCwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IDNkYWFmM2MuLmE3YmRhMDcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtMTA4NCw3ICsxMDg0LDcgQEAKIAljYXNlIElQVjZfU0FERFJfUlVMRV9QUklWQUNZOgogCSAgICB7CiAJCS8qIFJ1bGUgNzogUHJlZmVyIHB1YmxpYyBhZGRyZXNzCi0JCSAqIE5vdGU6IHByZWZlciB0ZW1wcmFyeSBhZGRyZXNzIGlmIHVzZV90ZW1wYWRkciA+PSAyCisJCSAqIE5vdGU6IHByZWZlciB0ZW1wb3JhcnkgYWRkcmVzcyBpZiB1c2VfdGVtcGFkZHIgPj0gMgogCQkgKi8KIAkJaW50IHByZWZ0bXAgPSBkc3QtPnByZWZzICYgKElQVjZfUFJFRkVSX1NSQ19QVUJMSUN8SVBWNl9QUkVGRVJfU1JDX1RNUCkgPwogCQkJCSEhKGRzdC0+cHJlZnMgJiBJUFY2X1BSRUZFUl9TUkNfVE1QKSA6CkBAIC0xOTY4LDcgKzE5NjgsNyBAQAogCQkJCQkgKiAgdG8gdGhlIHN0b3JlZCBsaWZldGltZSBzaW5jZSB3ZSdsbAogCQkJCQkgKiAgYmUgdXBkYXRpbmcgdGhlIHRpbWVzdGFtcCBiZWxvdywKIAkJCQkJICogIGVsc2Ugd2UnbGwgc2V0IGl0IGJhY2sgdG8gdGhlCi0JCQkJCSAqICBtaW51bXVtLgorCQkJCQkgKiAgbWluaW11bS4KIAkJCQkJICovCiAJCQkJCWlmIChwcmVmZXJlZF9sZnQgIT0gaWZwLT5wcmVmZXJlZF9sZnQpIHsKIAkJCQkJCXZhbGlkX2xmdCA9IHN0b3JlZF9sZnQ7CkBAIC00NTM3LDcgKzQ1MzcsNyBAQAogCiAJdCA9IHAtPnN5c2N0bDsKIAlwLT5zeXNjdGwgPSBOVUxMOwotCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHQtPnN5c2N0bF9oZWFkZXIpOworCXVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZSh0LT5zeXNjdGxfaGVhZGVyKTsKIAlrZnJlZSh0LT5kZXZfbmFtZSk7CiAJa2ZyZWUodCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jIGIvbmV0L2lwdjYvYWZfaW5ldDYuYwppbmRleCA0YjEzZDVkLi5hZmNjNzA5IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jCisrKyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKQEAgLTExMTMsNyArMTExMyw3IEBACiAJLyoKIAkgKglpcG5nd2cgQVBJIGRyYWZ0IG1ha2VzIGNsZWFyIHRoYXQgdGhlIGNvcnJlY3Qgc2VtYW50aWNzCiAJICoJZm9yIFRDUCBhbmQgVURQIGlzIHRvIGNvbnNpZGVyIG9uZSBUQ1AgYW5kIFVEUCBpbnN0YW5jZQotCSAqCWluIGEgaG9zdCBhdmFpbGlhYmxlIGJ5IGJvdGggSU5FVCBhbmQgSU5FVDYgQVBJcyBhbmQKKwkgKglpbiBhIGhvc3QgYXZhaWxhYmxlIGJ5IGJvdGggSU5FVCBhbmQgSU5FVDYgQVBJcyBhbmQKIAkgKglhYmxlIHRvIGNvbW11bmljYXRlIHZpYSBib3RoIG5ldHdvcmsgcHJvdG9jb2xzLgogCSAqLwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9lc3A2LmMgYi9uZXQvaXB2Ni9lc3A2LmMKaW5kZXggNWFhOGVjOC4uNTlkY2NmYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvZXNwNi5jCisrKyBiL25ldC9pcHY2L2VzcDYuYwpAQCAtMzcxLDcgKzM3MSw3IEBACiAJaXYgPSBlc3BfdG1wX2l2KGFlYWQsIHRtcCwgc2VxaGlsZW4pOwogCXJlcSA9IGVzcF90bXBfcmVxKGFlYWQsIGl2KTsKIAlhc2cgPSBlc3BfcmVxX3NnKGFlYWQsIHJlcSk7Ci0Jc2cgPSBhc2cgKyAxOworCXNnID0gYXNnICsgc2dsaXN0czsKIAogCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmMgYi9uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYwppbmRleCAxNjYwNTQ2Li5mMmM1YjBmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYworKysgYi9uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYwpAQCAtNDQsNyArNDQsNyBAQAogCQkgICAgICFzazItPnNrX2JvdW5kX2Rldl9pZiB8fAogCQkgICAgIHNrLT5za19ib3VuZF9kZXZfaWYgPT0gc2syLT5za19ib3VuZF9kZXZfaWYpICYmCiAJCSAgICAoIXNrLT5za19yZXVzZSB8fCAhc2syLT5za19yZXVzZSB8fAotCQkgICAgICgoMSA8PCBzazItPnNrX3N0YXRlKSAmIChUQ1BGX0xJU1RFTiB8IFRDUEZfQ0xPU0UpKSkgJiYKKwkJICAgICBzazItPnNrX3N0YXRlID09IFRDUF9MSVNURU4pICYmCiAJCSAgICAgaXB2Nl9yY3Zfc2FkZHJfZXF1YWwoc2ssIHNrMikpCiAJCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKaW5kZXggMTgyMDg4Ny4uNDZjZjdiZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X291dHB1dC5jCisrKyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwpAQCAtNzc5LDcgKzc3OSw3IEBACiAJCS8qIElGOiBpdCBkb2Vzbid0IGZpdCwgdXNlICdtdHUnIC0gdGhlIGRhdGEgc3BhY2UgbGVmdCAqLwogCQlpZiAobGVuID4gbXR1KQogCQkJbGVuID0gbXR1OwotCQkvKiBJRjogd2UgYXJlIG5vdCBzZW5kaW5nIHVwdG8gYW5kIGluY2x1ZGluZyB0aGUgcGFja2V0IGVuZAorCQkvKiBJRjogd2UgYXJlIG5vdCBzZW5kaW5nIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIHBhY2tldCBlbmQKIAkJICAgdGhlbiBhbGlnbiB0aGUgbmV4dCBzdGFydCBvbiBhbiBlaWdodCBieXRlIGJvdW5kYXJ5ICovCiAJCWlmIChsZW4gPCBsZWZ0KQl7CiAJCQlsZW4gJj0gfjc7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIuYyBiL25ldC9pcHY2L25ldGZpbHRlci5jCmluZGV4IDM5YWFjYTIuLjI4YmMxZjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci5jCkBAIC05MCw5ICs5MCwxOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5mX2lwNl9yb3V0ZShzdHJ1Y3QgZHN0X2VudHJ5ICoqZHN0LCBzdHJ1Y3QgZmxvd2kgKmZsKQorc3RhdGljIGludCBuZl9pcDZfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZHN0X2VudHJ5ICoqZHN0LAorCQkJc3RydWN0IGZsb3dpICpmbCwgYm9vbCBzdHJpY3QpCiB7Ci0JKmRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQoJmluaXRfbmV0LCBOVUxMLCAmZmwtPnUuaXA2KTsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGlwdjZfcGluZm8gZmFrZV9waW5mbzsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfc29jayBmYWtlX3NrID0geworCQkvKiBtYWtlcyBpcDZfcm91dGVfb3V0cHV0IHNldCBSVDZfTE9PS1VQX0ZfSUZBQ0U6ICovCisJCS5zay5za19ib3VuZF9kZXZfaWYgPSAxLAorCQkucGluZXQ2ID0gKHN0cnVjdCBpcHY2X3BpbmZvICopICZmYWtlX3BpbmZvLAorCX07CisJY29uc3Qgdm9pZCAqc2sgPSBzdHJpY3QgPyAmZmFrZV9zayA6IE5VTEw7CisKKwkqZHN0ID0gaXA2X3JvdXRlX291dHB1dChuZXQsIHNrLCAmZmwtPnUuaXA2KTsKIAlyZXR1cm4gKCpkc3QpLT5lcnJvcjsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKaW5kZXggMGIyYWY5Yi4uNWExYzZmMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCkBAIC0yMjQ4LDcgKzIyNDgsNyBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycjE7CiAKLQkvKiBOb29uZSBlbHNlIHdpbGwgYmUgZG93bmluZyBzZW0gbm93LCBzbyB3ZSB3b24ndCBzbGVlcCAqLworCS8qIE5vIG9uZSBlbHNlIHdpbGwgYmUgZG93bmluZyBzZW0gbm93LCBzbyB3ZSB3b24ndCBzbGVlcCAqLwogCXJldCA9IHh0X3JlZ2lzdGVyX3RhcmdldHMoaXA2dF9idWlsdGluX3RnLCBBUlJBWV9TSVpFKGlwNnRfYnVpbHRpbl90ZykpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycjI7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9SRUpFQ1QuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X1JFSkVDVC5jCmluZGV4IDI4ZTc0NDguLmE1YTRjNWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X1JFSkVDVC5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X1JFSkVDVC5jCkBAIC00NSw2ICs0NSw4IEBACiAJaW50IHRjcGhvZmYsIG5lZWRzX2FjazsKIAljb25zdCBzdHJ1Y3QgaXB2NmhkciAqb2lwNmggPSBpcHY2X2hkcihvbGRza2IpOwogCXN0cnVjdCBpcHY2aGRyICppcDZoOworI2RlZmluZSBERUZBVUxUX1RPU19WQUxVRQkweDBVCisJY29uc3QgX191OCB0Y2xhc3MgPSBERUZBVUxUX1RPU19WQUxVRTsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBOVUxMOwogCXU4IHByb3RvOwogCXN0cnVjdCBmbG93aTYgZmw2OwpAQCAtMTI0LDcgKzEyNiw3IEBACiAJc2tiX3B1dChuc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTsKIAlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIobnNrYik7CiAJaXA2aCA9IGlwdjZfaGRyKG5za2IpOwotCWlwNmgtPnZlcnNpb24gPSA2OworCSooX19iZTMyICopaXA2aCA9ICBodG9ubCgweDYwMDAwMDAwIHwgKHRjbGFzcyA8PCAyMCkpOwogCWlwNmgtPmhvcF9saW1pdCA9IGlwNl9kc3RfaG9wbGltaXQoZHN0KTsKIAlpcDZoLT5uZXh0aGRyID0gSVBQUk9UT19UQ1A7CiAJaXB2Nl9hZGRyX2NvcHkoJmlwNmgtPnNhZGRyLCAmb2lwNmgtPmRhZGRyKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9kZWZyYWdfaXB2Nl9ob29rcy5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2RlZnJhZ19pcHY2X2hvb2tzLmMKaW5kZXggOTdjNWIyMS4uY2RkNmQwNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2RlZnJhZ19pcHY2X2hvb2tzLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2RlZnJhZ19pcHY2X2hvb2tzLmMKQEAgLTcxLDcgKzcxLDcgQEAKIAlpZiAocmVhc20gPT0gTlVMTCkKIAkJcmV0dXJuIE5GX1NUT0xFTjsKIAotCS8qIGVycm9yIG9jY3VyZWQgb3Igbm90IGZyYWdtZW50ZWQgKi8KKwkvKiBlcnJvciBvY2N1cnJlZCBvciBub3QgZnJhZ21lbnRlZCAqLwogCWlmIChyZWFzbSA9PSBza2IpCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IDg0MzQwNmYuLmZkMGVlYzYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKKysrIGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtMTUzLDYgKzE1MywxMiBAQAogewogfQogCitzdGF0aWMgdTMyICppcDZfcnRfYmxhY2tob2xlX2Nvd19tZXRyaWNzKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgb2xkKQoreworCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgc3RydWN0IGRzdF9vcHMgaXA2X2RzdF9ibGFja2hvbGVfb3BzID0gewogCS5mYW1pbHkJCQk9CUFGX0lORVQ2LAogCS5wcm90b2NvbAkJPQljcHVfdG9fYmUxNihFVEhfUF9JUFY2KSwKQEAgLTE2MSw2ICsxNjcsNyBAQAogCS5kZWZhdWx0X210dQkJPQlpcDZfYmxhY2tob2xlX2RlZmF1bHRfbXR1LAogCS5kZWZhdWx0X2Fkdm1zcwkJPQlpcDZfZGVmYXVsdF9hZHZtc3MsCiAJLnVwZGF0ZV9wbXR1CQk9CWlwNl9ydF9ibGFja2hvbGVfdXBkYXRlX3BtdHUsCisJLmNvd19tZXRyaWNzCQk9CWlwNl9ydF9ibGFja2hvbGVfY293X21ldHJpY3MsCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGlwNl90ZW1wbGF0ZV9tZXRyaWNzW1JUQVhfTUFYXSA9IHsKQEAgLTIwMTIsNyArMjAxOSw2IEBACiAJcnQtPmRzdC5vdXRwdXQgPSBpcDZfb3V0cHV0OwogCXJ0LT5ydDZpX2RldiA9IG5ldC0+bG9vcGJhY2tfZGV2OwogCXJ0LT5ydDZpX2lkZXYgPSBpZGV2OwotCWRzdF9tZXRyaWNfc2V0KCZydC0+ZHN0LCBSVEFYX0hPUExJTUlULCAtMSk7CiAJcnQtPmRzdC5vYnNvbGV0ZSA9IC0xOwogCiAJcnQtPnJ0NmlfZmxhZ3MgPSBSVEZfVVAgfCBSVEZfTk9ORVhUSE9QOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdGNwX2lwdjYuYyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKaW5kZXggNTZmYTEyNS4uNGY0OWU1ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdGNwX2lwdjYuYworKysgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCkBAIC0xNjIyLDYgKzE2MjIsNyBAQAogCQlvcHRfc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CiAKIAlpZiAoc2stPnNrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRCkgeyAvKiBGYXN0IHBhdGggKi8KKwkJc29ja19ycHNfc2F2ZV9yeGhhc2goc2ssIHNrYi0+cnhoYXNoKTsKIAkJaWYgKHRjcF9yY3ZfZXN0YWJsaXNoZWQoc2ssIHNrYiwgdGNwX2hkcihza2IpLCBza2ItPmxlbikpCiAJCQlnb3RvIHJlc2V0OwogCQlpZiAob3B0X3NrYikKQEAgLTE2NDksNyArMTY1MCw4IEBACiAJCQkJX19rZnJlZV9za2Iob3B0X3NrYik7CiAJCQlyZXR1cm4gMDsKIAkJfQotCX0KKwl9IGVsc2UKKwkJc29ja19ycHNfc2F2ZV9yeGhhc2goc2ssIHNrYi0+cnhoYXNoKTsKIAogCWlmICh0Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc2ssIHNrYiwgdGNwX2hkcihza2IpLCBza2ItPmxlbikpCiAJCWdvdG8gcmVzZXQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jCmluZGV4IGQ3MDM3YzAuLjllMzA1ZDc0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni91ZHAuYworKysgYi9uZXQvaXB2Ni91ZHAuYwpAQCAtNTA1LDYgKzUwNSw5IEBACiAJaW50IHJjOwogCWludCBpc191ZHBsaXRlID0gSVNfVURQTElURShzayk7CiAKKwlpZiAoIWlwdjZfYWRkcl9hbnkoJmluZXQ2X3NrKHNrKS0+ZGFkZHIpKQorCQlzb2NrX3Jwc19zYXZlX3J4aGFzaChzaywgc2tiLT5yeGhhc2gpOworCiAJaWYgKCF4ZnJtNl9wb2xpY3lfY2hlY2soc2ssIFhGUk1fUE9MSUNZX0lOLCBza2IpKQogCQlnb3RvIGRyb3A7CiAKQEAgLTEzMzIsNyArMTMzNSw3IEBACiAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCiAJLyogQ2hlY2sgaWYgdGhlcmUgaXMgZW5vdWdoIGhlYWRyb29tIHRvIGluc2VydCBmcmFnbWVudCBoZWFkZXIuICovCi0JaWYgKChza2JfaGVhZHJvb20oc2tiKSA8IGZyYWdfaGRyX3N6KSAmJgorCWlmICgoc2tiX21hY19oZWFkZXIoc2tiKSA8IHNrYi0+aGVhZCArIGZyYWdfaGRyX3N6KSAmJgogCSAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgZnJhZ19oZHJfc3osIDAsIEdGUF9BVE9NSUMpKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMgYi9uZXQvaXB2Ni94ZnJtNl9vdXRwdXQuYwppbmRleCA4ZTY4OGIzLi40OWE5MWM1ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMKQEAgLTc5LDcgKzc5LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woeGZybTZfcHJlcGFyZV9vdXRwdXQpOwogCi1zdGF0aWMgaW50IHhmcm02X291dHB1dF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYikKK2ludCB4ZnJtNl9vdXRwdXRfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUgogCUlQNkNCKHNrYiktPmZsYWdzIHw9IElQNlNLQl9YRlJNX1RSQU5TRk9STUVEOwpAQCAtOTcsOSArOTcsOSBAQAogCWlmICgoeCAmJiB4LT5wcm9wcy5tb2RlID09IFhGUk1fTU9ERV9UVU5ORUwpICYmCiAJICAgICgoc2tiLT5sZW4gPiBpcDZfc2tiX2RzdF9tdHUoc2tiKSAmJiAhc2tiX2lzX2dzbyhza2IpKSB8fAogCQlkc3RfYWxsZnJhZyhza2JfZHN0KHNrYikpKSkgewotCQkJcmV0dXJuIGlwNl9mcmFnbWVudChza2IsIHhmcm02X291dHB1dF9maW5pc2gpOworCQkJcmV0dXJuIGlwNl9mcmFnbWVudChza2IsIHgtPm91dGVyX21vZGUtPmFmaW5mby0+b3V0cHV0X2ZpbmlzaCk7CiAJfQotCXJldHVybiB4ZnJtNl9vdXRwdXRfZmluaXNoKHNrYik7CisJcmV0dXJuIHgtPm91dGVyX21vZGUtPmFmaW5mby0+b3V0cHV0X2ZpbmlzaChza2IpOwogfQogCiBpbnQgeGZybTZfb3V0cHV0KHN0cnVjdCBza19idWZmICpza2IpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jIGIvbmV0L2lwdjYveGZybTZfc3RhdGUuYwppbmRleCBhZmU5NDFlLi4yNDhmMGIyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jCisrKyBiL25ldC9pcHY2L3hmcm02X3N0YXRlLmMKQEAgLTE3OCw2ICsxNzgsNyBAQAogCS50bXBsX3NvcnQJCT0gX194ZnJtNl90bXBsX3NvcnQsCiAJLnN0YXRlX3NvcnQJCT0gX194ZnJtNl9zdGF0ZV9zb3J0LAogCS5vdXRwdXQJCQk9IHhmcm02X291dHB1dCwKKwkub3V0cHV0X2ZpbmlzaAkJPSB4ZnJtNl9vdXRwdXRfZmluaXNoLAogCS5leHRyYWN0X2lucHV0CQk9IHhmcm02X2V4dHJhY3RfaW5wdXQsCiAJLmV4dHJhY3Rfb3V0cHV0CQk9IHhmcm02X2V4dHJhY3Rfb3V0cHV0LAogCS50cmFuc3BvcnRfZmluaXNoCT0geGZybTZfdHJhbnNwb3J0X2ZpbmlzaCwKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2FmX2lyZGEuYyBiL25ldC9pcmRhL2FmX2lyZGEuYwppbmRleCBjOTg5MGUyLi5jYzYxNjk3IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9hZl9pcmRhLmMKKysrIGIvbmV0L2lyZGEvYWZfaXJkYS5jCkBAIC0xMjk3LDggKzEyOTcsNyBAQAogCS8qIE5vdGUgOiBzb2NrZXQuYyBzZXQgTVNHX0VPUiBvbiBTRVFQQUNLRVQgc29ja2V0cyAqLwogCWlmIChtc2ctPm1zZ19mbGFncyAmIH4oTVNHX0RPTlRXQUlUIHwgTVNHX0VPUiB8IE1TR19DTVNHX0NPTVBBVCB8CiAJCQkgICAgICAgTVNHX05PU0lHTkFMKSkgewotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJbG9ja19zb2NrKHNrKTsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFwLmMgYi9uZXQvaXJkYS9pcmxhcC5jCmluZGV4IDc4M2M1ZjMuLjAwNWI0MjQgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFwLmMKKysrIGIvbmV0L2lyZGEvaXJsYXAuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAKIAlpcmxhcF9hcHBseV9kZWZhdWx0X2Nvbm5lY3Rpb25fcGFyYW1ldGVycyhzZWxmKTsKIAotCXNlbGYtPk4zID0gMzsgLyogIyBjb25uZWN0aW9ucyBhdHRlbXRzIHRvIHRyeSBiZWZvcmUgZ2l2aW5nIHVwICovCisJc2VsZi0+TjMgPSAzOyAvKiAjIGNvbm5lY3Rpb25zIGF0dGVtcHRzIHRvIHRyeSBiZWZvcmUgZ2l2aW5nIHVwICovCiAKIAlzZWxmLT5zdGF0ZSA9IExBUF9ORE07CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFwX2V2ZW50LmMgYi9uZXQvaXJkYS9pcmxhcF9ldmVudC5jCmluZGV4IGQ0MzRjODguLmJiNDcwMjEgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFwX2V2ZW50LmMKKysrIGIvbmV0L2lyZGEvaXJsYXBfZXZlbnQuYwpAQCAtNzA4LDcgKzcwOCw3IEBACiAKIAkJCQlzZWxmLT5mcmFtZV9zZW50ID0gVFJVRTsKIAkJCX0KLQkJCS8qIFJlYWRqdXN0IG91ciB0aW1lciB0byBhY2NvbW9kYXRlIGRldmljZXMKKwkJCS8qIFJlYWRqdXN0IG91ciB0aW1lciB0byBhY2NvbW1vZGF0ZSBkZXZpY2VzCiAJCQkgKiBkb2luZyBmYXN0ZXIgb3Igc2xvd2VyIGRpc2NvdmVyeSB0aGFuIHVzLi4uCiAJCQkgKiBKZWFuIElJICovCiAJCQlpcmxhcF9zdGFydF9xdWVyeV90aW1lcihzZWxmLCBpbmZvLT5TLCBpbmZvLT5zKTsKQEAgLTkzMSw3ICs5MzEsNyBAQAogCQlpcmxhcF9zZW5kX3JyX2ZyYW1lKHNlbGYsIENNRF9GUkFNRSk7CiAKIAkJLyogVGhlIHRpbWVyIGlzIHNldCB0byBoYWxmIHRoZSBub3JtYWwgdGltZXIgdG8gcXVpY2tseQotCQkgKiBkZXRlY3QgYSBmYWlsdXJlIHRvIG5lZ29jaWF0ZSB0aGUgbmV3IGNvbm5lY3Rpb24KKwkJICogZGV0ZWN0IGEgZmFpbHVyZSB0byBuZWdvdGlhdGUgdGhlIG5ldyBjb25uZWN0aW9uCiAJCSAqIHBhcmFtZXRlcnMuIElyTEFQIDYuMTEuMy4yLCBub3RlIDMuCiAJCSAqIE5vdGUgdGhhdCBjdXJyZW50bHkgd2UgZG9uJ3QgcHJvY2VzcyB0aGlzIGZhaWx1cmUKIAkJICogcHJvcGVybHksIGFzIHdlIHNob3VsZCBkbyBhIHF1aWNrIGRpc2Nvbm5lY3QuCkBAIC0xMDUyLDcgKzEwNTIsNyBAQAogCQkJCXJldHVybiAtRVBST1RPOwogCQkJfQogCi0JCQkvKiBTdWJzdHJhY3Qgc3BhY2UgdXNlZCBieSB0aGlzIHNrYiAqLworCQkJLyogU3VidHJhY3Qgc3BhY2UgdXNlZCBieSB0aGlzIHNrYiAqLwogCQkJc2VsZi0+Ynl0ZXNfbGVmdCAtPSBza2ItPmxlbjsKICNlbHNlCS8qIENPTkZJR19JUkRBX0RZTkFNSUNfV0lORE9XICovCiAJCQkvKiBXaW5kb3cgaGFzIGJlZW4gYWRqdXN0ZWQgZm9yIHRoZSBtYXggcGFja2V0CkBAIC0xODA4LDcgKzE4MDgsNyBAQAogCiAJCQkJcmV0dXJuIC1FUFJPVE87IC8qIFRyeSBhZ2FpbiBsYXRlciAqLwogCQkJfQotCQkJLyogU3Vic3RyYWN0IHNwYWNlIHVzZWQgYnkgdGhpcyBza2IgKi8KKwkJCS8qIFN1YnRyYWN0IHNwYWNlIHVzZWQgYnkgdGhpcyBza2IgKi8KIAkJCXNlbGYtPmJ5dGVzX2xlZnQgLT0gc2tiLT5sZW47CiAjZWxzZQkvKiBDT05GSUdfSVJEQV9EWU5BTUlDX1dJTkRPVyAqLwogCQkJLyogV2luZG93IGhhcyBiZWVuIGFkanVzdGVkIGZvciB0aGUgbWF4IHBhY2tldApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYXBfZnJhbWUuYyBiL25ldC9pcmRhL2lybGFwX2ZyYW1lLmMKaW5kZXggNjg4MjIyYy4uOGMwMDQxNiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYXBfZnJhbWUuYworKysgYi9uZXQvaXJkYS9pcmxhcF9mcmFtZS5jCkBAIC04NDgsNyArODQ4LDcgQEAKIAkgKiB0aG91Z2ggSXJMQVAgaXMgY3VycmVudGx5IHNlbmRpbmcgdGhlICpsYXN0KiBmcmFtZSBvZiB0aGUKIAkgKiB0eC13aW5kb3csIHRoZSBkcml2ZXIgbW9zdCBsaWtlbHkgaGFzIG9ubHkganVzdCBzdGFydGVkCiAJICogc2VuZGluZyB0aGUgKmZpcnN0KiBmcmFtZSBvZiB0aGUgc2FtZSB0eC13aW5kb3cuCi0JICogSS5lLiB3ZSBhcmUgYWx3YXlzIGF0IHRoZSB2ZXJ5IGJlZ2luaW5nIG9mIG9yIFR4IHdpbmRvdy4KKwkgKiBJLmUuIHdlIGFyZSBhbHdheXMgYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIG9yIFR4IHdpbmRvdy4KIAkgKiBOb3csIHdlIGFyZSBzdXBwb3NlZCB0byBzZXQgdGhlIGZpbmFsIHRpbWVyIGZyb20gdGhlIGVuZAogCSAqIG9mIG91ciB0eC13aW5kb3cgdG8gbGV0IHRoZSBvdGhlciBwZWVyIHJlcGx5LiBTbywgd2UgbmVlZAogCSAqIHRvIGFkZCBleHRyYSB0aW1lIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBmYWN0IHRoYXQgd2UKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybG1wX2V2ZW50LmMgYi9uZXQvaXJkYS9pcmxtcF9ldmVudC5jCmluZGV4IGMxZmI1ZGIuLjk1MDVhN2QgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybG1wX2V2ZW50LmMKKysrIGIvbmV0L2lyZGEvaXJsbXBfZXZlbnQuYwpAQCAtNDk4LDcgKzQ5OCw3IEBACiAJc3dpdGNoIChldmVudCkgewogI2lmZGVmIENPTkZJR19JUkRBX1VMVFJBCiAJY2FzZSBMTV9VREFUQV9JTkRJQ0FUSU9OOgotCQkvKiBUaGlzIGlzIG1vc3QgYml6emFyZS4gVGhvc2UgcGFja2V0cyBhcmUgIGFrYSB1bnJlbGlhYmxlCisJCS8qIFRoaXMgaXMgbW9zdCBiaXphcnJlLiBUaG9zZSBwYWNrZXRzIGFyZSAgYWthIHVucmVsaWFibGUKIAkJICogY29ubmVjdGVkLCBha2EgSXJMUFQgb3IgU09DS19ER1JBTS9JUkRBUFJPVE9fVU5JVERBVEEuCiAJCSAqIFdoeSBkbyB3ZSBwYXNzIHRoZW0gYXMgVWx0cmEgPz8/IEplYW4gSUkgKi8KIAkJaXJsbXBfY29ubmxlc3NfZGF0YV9pbmRpY2F0aW9uKHNlbGYsIHNrYik7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcm5ldC9pcm5ldC5oIGIvbmV0L2lyZGEvaXJuZXQvaXJuZXQuaAppbmRleCAwZDgyZmY1Li45NzllY2IyIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcm5ldC9pcm5ldC5oCisrKyBiL25ldC9pcmRhL2lybmV0L2lybmV0LmgKQEAgLTczLDcgKzczLDcgQEAKICAqIEluZmluaXRlIHRoYW5rcyB0byB0aG9zZSBicmF2ZSBzb3VscyBmb3IgcHJvdmlkaW5nIHRoZSBpbmZyYXN0cnVjdHVyZQogICogdXBvbiB3aGljaCBJck5FVCBpcyBidWlsdC4KICAqCi0gKiBUaGFua3MgdG8gYWxsIG15IGNvbGxlZ3VlcyBpbiBIUCBmb3IgaGVscGluZyBtZS4gSW4gcGFydGljdWxhciwKKyAqIFRoYW5rcyB0byBhbGwgbXkgY29sbGVhZ3VlcyBpbiBIUCBmb3IgaGVscGluZyBtZS4gSW4gcGFydGljdWxhciwKICAqIHRoYW5rcyB0byBTYWxpbCBQcmFkaGFuIGFuZCBCaWxsIFNlcnJhIGZvciBXMmsgdGVzdGluZy4uLgogICogVGhhbmtzIHRvIEx1aXogTWFnYWxoYWVzIGZvciBpcm5ldGQgYW5kIG11Y2ggdGVzdGluZy4uLgogICoKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lycXVldWUuYyBiL25ldC9pcmRhL2lycXVldWUuYwppbmRleCA4NDlhYWYwLi45NzE1ZTZlIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcnF1ZXVlLmMKKysrIGIvbmV0L2lyZGEvaXJxdWV1ZS5jCkBAIC00MCw3ICs0MCw3IEBACiAgKglvIHRoZSBoYXNoIGZ1bmN0aW9uIGZvciBpbnRzIGlzIHBhdGhldGljIChidXQgY291bGQgYmUgY2hhbmdlZCkKICAqCW8gbG9ja2luZyBpcyBzb21ldGltZSBzdXNwaWNpb3VzIChlc3BlY2lhbGx5IGR1cmluZyBlbnVtZXJhdGlvbikKICAqCW8gbW9zdCB1c2VycyBoYXZlIG9ubHkgYSBmZXcgZWxlbWVudHMgKD09IG92ZXJoZWFkKQotICoJbyBtb3N0IHVzZXJzIG5ldmVyIHVzZSBzZWFjaCwgc28gZG9uJ3QgYmVuZWZpdCBmcm9tIGhhc2hpbmcKKyAqCW8gbW9zdCB1c2VycyBuZXZlciB1c2Ugc2VhcmNoLCBzbyBkb24ndCBiZW5lZml0IGZyb20gaGFzaGluZwogICogUHJvYmxlbSBhbHJlYWR5IGZpeGVkIDoKICAqCW8gbm90IDY0IGJpdCBjb21wbGlhbnQgKG1vc3QgdXNlcnMgZG8gaGFzaHYgPSAoaW50KSBzZWxmKQogICoJbyBoYXNoYmluX3JlbW92ZSgpIGlzIGJyb2tlbiA9PiB1c2UgaGFzaGJpbl9yZW1vdmVfdGhpcygpCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcnR0cC5jIGIvbmV0L2lyZGEvaXJ0dHAuYwppbmRleCBmNjA1NGY5Li45ZDlhZjQ2IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcnR0cC5jCisrKyBiL25ldC9pcmRhL2lydHRwLmMKQEAgLTExOTMsNyArMTE5Myw3IEBACiAvKgogICogRnVuY3Rpb24gaXJ0dHBfY29ubmVjdF9jb25maXJtIChoYW5kbGUsIHFvcywgc2tiKQogICoKLSAqICAgIFNldmljZSB1c2VyIGNvbmZpcm1zIFRTQVAgY29ubmVjdGlvbiB3aXRoIHBlZXIuCisgKiAgICBTZXJ2aWNlIHVzZXIgY29uZmlybXMgVFNBUCBjb25uZWN0aW9uIHdpdGggcGVlci4KICAqCiAgKi8KIHN0YXRpYyB2b2lkIGlydHRwX2Nvbm5lY3RfY29uZmlybSh2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvcW9zLmMgYi9uZXQvaXJkYS9xb3MuYwppbmRleCAyYjAwOTc0Li4xYjUxYmNmIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9xb3MuYworKysgYi9uZXQvaXJkYS9xb3MuYwpAQCAtMzksMTYgKzM5LDE2IEBACiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJsYXBfZnJhbWUuaD4KIAogLyoKLSAqIE1heGltdW0gdmFsdWVzIG9mIHRoZSBiYXVkIHJhdGUgd2UgbmVnb2NpYXRlIHdpdGggdGhlIG90aGVyIGVuZC4KKyAqIE1heGltdW0gdmFsdWVzIG9mIHRoZSBiYXVkIHJhdGUgd2UgbmVnb3RpYXRlIHdpdGggdGhlIG90aGVyIGVuZC4KICAqIE1vc3Qgb2Z0ZW4sIHlvdSBkb24ndCBoYXZlIHRvIGNoYW5nZSB0aGF0LCBiZWNhdXNlIExpbnV4LUlyREEgd2lsbAogICogdXNlIHRoZSBtYXhpbXVtIG9mZmVyZWQgYnkgdGhlIGxpbmsgbGF5ZXIsIHdoaWNoIHVzdWFsbHkgd29ya3MgZmluZS4KICAqIEluIHNvbWUgdmVyeSByYXJlIGNhc2VzLCB5b3UgbWF5IHdhbnQgdG8gbGltaXQgaXQgdG8gbG93ZXIgc3BlZWRzLi4uCiAgKi8KIGludCBzeXNjdGxfbWF4X2JhdWRfcmF0ZSA9IDE2MDAwMDAwOwogLyoKLSAqIE1heGltdW0gdmFsdWUgb2YgdGhlIGxhcCBkaXNjb25uZWN0IHRpbWVyIHdlIG5lZ29jaWF0ZSB3aXRoIHRoZSBvdGhlciBlbmQuCisgKiBNYXhpbXVtIHZhbHVlIG9mIHRoZSBsYXAgZGlzY29ubmVjdCB0aW1lciB3ZSBuZWdvdGlhdGUgd2l0aCB0aGUgb3RoZXIgZW5kLgogICogTW9zdCBvZnRlbiwgdGhlIHZhbHVlIGJlbG93IHJlcHJlc2VudCB0aGUgYmVzdCBjb21wcm9taXNlLCBidXQgc29tZSB1c2VyCi0gKiBtYXkgd2FudCB0byBrZWVwIHRoZSBMQVAgYWxpdmUgbG9uZ3VlciBvciBzaG9ydGVyIGluIGNhc2Ugb2YgbGluayBmYWlsdXJlLgorICogbWF5IHdhbnQgdG8ga2VlcCB0aGUgTEFQIGFsaXZlIGxvbmdlciBvciBzaG9ydGVyIGluIGNhc2Ugb2YgbGluayBmYWlsdXJlLgogICogUmVtZW1iZXIgdGhhdCB0aGUgdGhyZXNob2xkIHRpbWUgKGVhcmx5IHdhcm5pbmcpIGlzIGZpeGVkIHRvIDNzLi4uCiAgKi8KIGludCBzeXNjdGxfbWF4X25vcmVwbHlfdGltZSA9IDEyOwpAQCAtNDExLDcgKzQxMSw3IEBACiAJICogRml4IHR4IGRhdGEgc2l6ZSBhY2NvcmRpbmcgdG8gdXNlciBsaW1pdHMgLSBKZWFuIElJCiAJICovCiAJaWYgKHFvcy0+ZGF0YV9zaXplLnZhbHVlID4gc3lzY3RsX21heF90eF9kYXRhX3NpemUpCi0JCS8qIEFsbG93IG5vbiBkaXNjcmV0ZSBhZGp1c3RlbWVudCB0byBhdm9pZCBsb29zaW5nIGNhcGFjaXR5ICovCisJCS8qIEFsbG93IG5vbiBkaXNjcmV0ZSBhZGp1c3RlbWVudCB0byBhdm9pZCBsb3NpbmcgY2FwYWNpdHkgKi8KIAkJcW9zLT5kYXRhX3NpemUudmFsdWUgPSBzeXNjdGxfbWF4X3R4X2RhdGFfc2l6ZTsKIAkvKgogCSAqIE92ZXJyaWRlIFR4IHdpbmRvdyBpZiB1c2VyIHJlcXVlc3QgaXQuIC0gSmVhbiBJSQpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvdGltZXIuYyBiL25ldC9pcmRhL3RpbWVyLmMKaW5kZXggMDMzNWJhMC4uZjQxOGNiMiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvdGltZXIuYworKysgYi9uZXQvaXJkYS90aW1lci5jCkBAIC01OSw3ICs1OSw3IEBACiAJICogc2xvdCB0aW1lLCBwbHVzIGFkZCBzb21lIGV4dHJhIHRpbWUgdG8gcHJvcGVybHkgcmVjZWl2ZSB0aGUgbGFzdAogCSAqIGRpc2NvdmVyeSBwYWNrZXQgKHdoaWNoIGlzIGxvbmdlciBkdWUgdG8gZXh0cmEgZGlzY292ZXJ5IGluZm8pLAogCSAqIHRvIGF2b2lkIG1lc3Npbmcgd2l0aCBmb3IgaW5jb21taW5nIGNvbm5lY3Rpb25zIHJlcXVlc3RzIGFuZAotCSAqIHRvIGFjY29tb2RhdGUgZGV2aWNlcyB0aGF0IHBlcmZvcm0gZGlzY292ZXJ5IHNsb3dlciB0aGFuIHVzLgorCSAqIHRvIGFjY29tbW9kYXRlIGRldmljZXMgdGhhdCBwZXJmb3JtIGRpc2NvdmVyeSBzbG93ZXIgdGhhbiB1cy4KIAkgKiBKZWFuIElJICovCiAJdGltZW91dCA9ICgoc3lzY3RsX3Nsb3RfdGltZW91dCAqIEhaIC8gMTAwMCkgKiAoUyAtIHMpCiAJCSAgICsgWElERVhUUkFfVElNRU9VVCArIFNNQUxMQlVTWV9USU1FT1VUKTsKZGlmZiAtLWdpdCBhL25ldC9pdWN2L2FmX2l1Y3YuYyBiL25ldC9pdWN2L2FmX2l1Y3YuYwppbmRleCA5NjM3ZTQ1Li45ODZiMmE1IDEwMDY0NAotLS0gYS9uZXQvaXVjdi9hZl9pdWN2LmMKKysrIGIvbmV0L2l1Y3YvYWZfaXVjdi5jCkBAIC0yNTAsNyArMjUwLDcgQEAKICAqCVBSTURBVEFbMC4uNl0Jc29ja2V0IGRhdGEgKG1heCA3IGJ5dGVzKTsKICAqCVBSTURBVEFbN10Jc29ja2V0IGRhdGEgbGVuZ3RoIHZhbHVlIChsZW4gaXMgMHhmZiAtIFBSTURBVEFbN10pCiAgKgotICogVGhlIHNvY2tldCBkYXRhIGxlbmd0aCBpcyBjb21wdXRlZCBieSBzdWJzdHJhY3RpbmcgdGhlIHNvY2tldCBkYXRhIGxlbmd0aAorICogVGhlIHNvY2tldCBkYXRhIGxlbmd0aCBpcyBjb21wdXRlZCBieSBzdWJ0cmFjdGluZyB0aGUgc29ja2V0IGRhdGEgbGVuZ3RoCiAgKiB2YWx1ZSBmcm9tIDB4RkYuCiAgKiBJZiB0aGUgc29ja2V0IGRhdGEgbGVuIGlzIGdyZWF0ZXIgNywgdGhlbiBQUk1EQVRBIGNhbiBiZSB1c2VkIGZvciBzcGVjaWFsCiAgKiBub3RpZmljYXRpb25zIChzZWUgaXVjdl9zb2NrX3NodXRkb3duKTsgYW5kIGZ1cnRoZXIsCmRpZmYgLS1naXQgYS9uZXQvaXVjdi9pdWN2LmMgYi9uZXQvaXVjdi9pdWN2LmMKaW5kZXggMWVlNWRhYi4uOGYxNTZiZCAxMDA2NDQKLS0tIGEvbmV0L2l1Y3YvaXVjdi5jCisrKyBiL25ldC9pdWN2L2l1Y3YuYwpAQCAtNzM1LDcgKzczNSw3IEBACiAJc3RydWN0IGl1Y3ZfaXJxX2xpc3QgKnAsICpuOwogCiAJLyoKLQkgKiBXaGVuIGEgcGF0aCBpcyBzZXZlcmVkLCB0aGUgcGF0aGlkIGNhbiBiZSByZXVzZWQgaW1tZWRpYXRseQorCSAqIFdoZW4gYSBwYXRoIGlzIHNldmVyZWQsIHRoZSBwYXRoaWQgY2FuIGJlIHJldXNlZCBpbW1lZGlhdGVseQogCSAqIG9uIGEgaXVjdiBjb25uZWN0IG9yIGEgY29ubmVjdGlvbiBwZW5kaW5nIGludGVycnVwdC4gUmVtb3ZlCiAJICogYWxsIGVudHJpZXMgZnJvbSB0aGUgdGFzayBxdWV1ZSB0aGF0IHJlZmVyIHRvIGEgc3RhbGUgcGF0aGlkCiAJICogKGl1Y3ZfcGF0aF90YWJsZVtpeF0gPT0gTlVMTCkuIE9ubHkgdGhlbiBkbyB0aGUgaXVjdiBjb25uZWN0CkBAIC04MDcsNyArODA3LDcgQEAKIAlzcGluX2xvY2tfYmgoJml1Y3ZfdGFibGVfbG9jayk7CiAJLyogUmVtb3ZlIGhhbmRsZXIgZnJvbSB0aGUgaXVjdl9oYW5kbGVyX2xpc3QuICovCiAJbGlzdF9kZWxfaW5pdCgmaGFuZGxlci0+bGlzdCk7Ci0JLyogU2V2ZXIgYWxsIHBhdGhpZHMgc3RpbGwgcmVmZXJpbmcgdG8gdGhlIGhhbmRsZXIuICovCisJLyogU2V2ZXIgYWxsIHBhdGhpZHMgc3RpbGwgcmVmZXJyaW5nIHRvIHRoZSBoYW5kbGVyLiAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmaGFuZGxlci0+cGF0aHMsIGxpc3QpIHsKIAkJaXVjdl9zZXZlcl9wYXRoaWQocC0+cGF0aGlkLCBOVUxMKTsKIAkJaXVjdl9wYXRoX3RhYmxlW3AtPnBhdGhpZF0gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9pcC5jIGIvbmV0L2wydHAvbDJ0cF9pcC5jCmluZGV4IGZjZTliZDMuLjVjMDRmM2UgMTAwNjQ0Ci0tLSBhL25ldC9sMnRwL2wydHBfaXAuYworKysgYi9uZXQvbDJ0cC9sMnRwX2lwLmMKQEAgLTY2Nyw3ICs2NjcsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJMMlRQIG92ZXIgSVAiKTsKIE1PRFVMRV9WRVJTSU9OKCIxLjAiKTsKIAotLyogVXNlIHRoZSB2YWx1ZSBvZiBTT0NLX0RHUkFNICgyKSBkaXJlY3RvcnksIGJlY2F1c2UgX19zdHJpbmdpZnkgZG9lcyd0IGxpa2UKKy8qIFVzZSB0aGUgdmFsdWUgb2YgU09DS19ER1JBTSAoMikgZGlyZWN0b3J5LCBiZWNhdXNlIF9fc3RyaW5naWZ5IGRvZXNuJ3QgbGlrZQogICogZW51bXMKICAqLwogTU9EVUxFX0FMSUFTX05FVF9QRl9QUk9UT19UWVBFKFBGX0lORVQsIDIsIElQUFJPVE9fTDJUUCk7CmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19pbnB1dC5jIGIvbmV0L2xsYy9sbGNfaW5wdXQuYwppbmRleCAwNThmMWU5Li45MDMyNDIxIDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19pbnB1dC5jCisrKyBiL25ldC9sbGMvbGxjX2lucHV0LmMKQEAgLTEyMSw4ICsxMjEsNyBAQAogCQlzMzIgZGF0YV9zaXplID0gbnRvaHMocGR1bGVuKSAtIGxsY19sZW47CiAKIAkJaWYgKGRhdGFfc2l6ZSA8IDAgfHwKLQkJICAgICgoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0KLQkJICAgICAgKHU4ICopcGR1KSAtIGxsY19sZW4pIDwgZGF0YV9zaXplKQorCQkgICAgIXBza2JfbWF5X3B1bGwoc2tiLCBkYXRhX3NpemUpKQogCQkJcmV0dXJuIDA7CiAJCWlmICh1bmxpa2VseShwc2tiX3RyaW1fcmNzdW0oc2tiLCBkYXRhX3NpemUpKSkKIAkJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jCmluZGV4IDMzNDIxMzUuLjQ0MDQ5NzMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9jZmcuYworKysgYi9uZXQvbWFjODAyMTEvY2ZnLmMKQEAgLTE1MDQsNiArMTUwNCw4IEBACiAJZW51bSBpZWVlODAyMTFfc21wc19tb2RlIG9sZF9yZXE7CiAJaW50IGVycjsKIAorCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnNkYXRhLT51Lm1nZC5tdHgpOworCiAJb2xkX3JlcSA9IHNkYXRhLT51Lm1nZC5yZXFfc21wczsKIAlzZGF0YS0+dS5tZ2QucmVxX3NtcHMgPSBzbXBzX21vZGU7CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMKaW5kZXggZGFjYWNlNi4uOWVhN2MwZCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMKQEAgLTE3Nyw5ICsxNzcsOSBAQAogCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCW11dGV4X2xvY2soJnNkYXRhLT51Lm1nZC5tdHgpOwogCWVyciA9IF9faWVlZTgwMjExX3JlcXVlc3Rfc21wcyhzZGF0YSwgc21wc19tb2RlKTsKLQltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKwltdXRleF91bmxvY2soJnNkYXRhLT51Lm1nZC5tdHgpOwogCiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKaW5kZXggYTQwNDAxNy4uYzE4Mzk2YyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKQEAgLTk3LDcgKzk3LDcgQEAKIAlzaXplX3Qgc3VwcF9yYXRlc19sZW47CiAKIAkvKgotCSAqIER1cmluZyBhc3NvY2F0aW9uLCB3ZSBzYXZlIGFuIEVSUCB2YWx1ZSBmcm9tIGEgcHJvYmUgcmVzcG9uc2Ugc28KKwkgKiBEdXJpbmcgYXNzb2NpYXRpb24sIHdlIHNhdmUgYW4gRVJQIHZhbHVlIGZyb20gYSBwcm9iZSByZXNwb25zZSBzbwogCSAqIHRoYXQgd2UgY2FuIGZlZWQgRVJQIGluZm8gdG8gdGhlIGRyaXZlciB3aGVuIGhhbmRsaW5nIHRoZQogCSAqIGFzc29jaWF0aW9uIGNvbXBsZXRlcy4gdGhlc2UgZmllbGRzIHByb2JhYmx5IHdvbid0IGJlIHVwLXRvLWRhdGUKIAkgKiBvdGhlcndpc2UsIHlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIHVzZSB0aGVtLgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jIGIvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jCmluZGV4IDhkNjViNDcuLjMzNmNhOWQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYworKysgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMKQEAgLTYyOCw3ICs2MjgsNyBAQAogICoKICAqIEBtcGF0aDogbWVzaCBwYXRoIHdob3NlIHF1ZXVlIGhhcyB0byBiZSBmcmVlZAogICoKLSAqIExvY2tpbmc6IHRoZSBmdW5jdGlvbiBtdXN0IG1lIGNhbGxlZCB3aXRoaW5nIGEgcmN1X3JlYWRfbG9jayByZWdpb24KKyAqIExvY2tpbmc6IHRoZSBmdW5jdGlvbiBtdXN0IG1lIGNhbGxlZCB3aXRoaW4gYSByY3VfcmVhZF9sb2NrIHJlZ2lvbgogICovCiB2b2lkIG1lc2hfcGF0aF9mbHVzaF9wZW5kaW5nKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKQogewpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYyBiL25ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmMKaW5kZXggZGJkZWJlZGEuLmMwNmFhM2EgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmMKKysrIGIvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYwpAQCAtMjU5LDcgKzI1OSw3IEBACiAJCX0KIAl9CiAKLQkvKiB0cnkgdG8gc2FtcGxlIHVwIHRvIGhhbGYgb2YgdGhlIGF2YWlsYmxlIHJhdGVzIGR1cmluZyBlYWNoIGludGVydmFsICovCisJLyogdHJ5IHRvIHNhbXBsZSB1cCB0byBoYWxmIG9mIHRoZSBhdmFpbGFibGUgcmF0ZXMgZHVyaW5nIGVhY2ggaW50ZXJ2YWwgKi8KIAltaS0+c2FtcGxlX2NvdW50ICo9IDQ7CiAKIAljdXJfcHJvYiA9IDA7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWQuaCBiL25ldC9tYWM4MDIxMS9yYzgwMjExX3BpZC5oCmluZGV4IDY1MTBmOGUuLjE5MTExYzcgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yYzgwMjExX3BpZC5oCisrKyBiL25ldC9tYWM4MDIxMS9yYzgwMjExX3BpZC5oCkBAIC03Nyw3ICs3Nyw3IEBACiB9OwogCiBzdHJ1Y3QgcmNfcGlkX2V2ZW50IHsKLQkvKiBUaGUgdGltZSB3aGVuIHRoZSBldmVudCBvY2N1cmVkICovCisJLyogVGhlIHRpbWUgd2hlbiB0aGUgZXZlbnQgb2NjdXJyZWQgKi8KIAl1bnNpZ25lZCBsb25nIHRpbWVzdGFtcDsKIAogCS8qIEV2ZW50IElEIG51bWJlciAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3J4LmMgYi9uZXQvbWFjODAyMTEvcnguYwppbmRleCBhYTVjYzM3Li5jNWQ0NTMwIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcnguYworKysgYi9uZXQvbWFjODAyMTEvcnguYwpAQCAtMzgxLDcgKzM4MSw3IEBACiAgKiBzcGVjcyB3ZXJlIHNhbmUgZW5vdWdoIHRoaXMgdGltZSBhcm91bmQgdG8gcmVxdWlyZSBwYWRkaW5nIGVhY2ggQS1NU0RVCiAgKiBzdWJmcmFtZSB0byBhIGxlbmd0aCB0aGF0IGlzIGEgbXVsdGlwbGUgb2YgZm91ci4KICAqCi0gKiBQYWRkaW5nIGxpa2UgQXRoZXJvcyBoYXJkd2FyZSBhZGRzIHdoaWNoIGlzIGluYmV0d2VlbiB0aGUgODAyLjExIGhlYWRlciBhbmQKKyAqIFBhZGRpbmcgbGlrZSBBdGhlcm9zIGhhcmR3YXJlIGFkZHMgd2hpY2ggaXMgYmV0d2VlbiB0aGUgODAyLjExIGhlYWRlciBhbmQKICAqIHRoZSBwYXlsb2FkIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZSBkcml2ZXIgaXMgcmVxdWlyZWQgdG8gbW92ZSB0aGUgODAyLjExCiAgKiBoZWFkZXIgdG8gYmUgZGlyZWN0bHkgaW4gZnJvbnQgb2YgdGhlIHBheWxvYWQgaW4gdGhhdCBjYXNlLgogICovCkBAIC0yNTQxLDcgKzI1NDEsNiBAQAogCQkgKiBzYW1lIFRJRCBmcm9tIHRoZSBzYW1lIHN0YXRpb24KIAkJICovCiAJCXJ4LT5za2IgPSBza2I7Ci0JCXJ4LT5mbGFncyA9IDA7CiAKIAkJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfZGVjcnlwdCkKIAkJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfY2hlY2tfbW9yZV9kYXRhKQpAQCAtMjYxMiw2ICsyNjExLDcgQEAKIAkJLnNkYXRhID0gc3RhLT5zZGF0YSwKIAkJLmxvY2FsID0gc3RhLT5sb2NhbCwKIAkJLnF1ZXVlID0gdGlkLAorCQkuZmxhZ3MgPSAwLAogCX07CiAJc3RydWN0IHRpZF9hbXBkdV9yeCAqdGlkX2FnZ19yeDsKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwppbmRleCBkMDMxMWEzLi4xM2U4YzMwIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYworKysgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwpAQCAtNDcsOSArNDcsOSBAQAogICogU3RhdGlvbiBlbnRyaWVzIGFyZSBhZGRlZCBieSBtYWM4MDIxMSB3aGVuIHlvdSBlc3RhYmxpc2ggYSBsaW5rIHdpdGggYQogICogcGVlci4gVGhpcyBtZWFucyBkaWZmZXJlbnQgdGhpbmdzIGZvciB0aGUgZGlmZmVyZW50IHR5cGUgb2YgaW50ZXJmYWNlcwogICogd2Ugc3VwcG9ydC4gRm9yIGEgcmVndWxhciBzdGF0aW9uIHRoaXMgbWVhbiB3ZSBhZGQgdGhlIEFQIHN0YSB3aGVuIHdlCi0gKiByZWNlaXZlIGFuIGFzc29jYXRpb24gcmVzcG9uc2UgZnJvbSB0aGUgQVAuIEZvciBJQlNTIHRoaXMgb2NjdXJzIHdoZW4KKyAqIHJlY2VpdmUgYW4gYXNzb2NpYXRpb24gcmVzcG9uc2UgZnJvbSB0aGUgQVAuIEZvciBJQlNTIHRoaXMgb2NjdXJzIHdoZW4KICAqIGdldCB0byBrbm93IGFib3V0IGEgcGVlciBvbiB0aGUgc2FtZSBJQlNTLiBGb3IgV0RTIHdlIGFkZCB0aGUgc3RhIGZvcgotICogdGhlIHBlZXIgaW1lZGlhdGVseSB1cG9uIGRldmljZSBvcGVuLiBXaGVuIHVzaW5nIEFQIG1vZGUgd2UgYWRkIHN0YXRpb25zCisgKiB0aGUgcGVlciBpbW1lZGlhdGVseSB1cG9uIGRldmljZSBvcGVuLiBXaGVuIHVzaW5nIEFQIG1vZGUgd2UgYWRkIHN0YXRpb25zCiAgKiBmb3IgZWFjaCByZXNwZWN0aXZlIHN0YXRpb24gdXBvbiByZXF1ZXN0IGZyb20gdXNlcnNwYWNlIHRocm91Z2ggbmw4MDIxMS4KICAqCiAgKiBJbiBvcmRlciB0byByZW1vdmUgYSBTVEEgaW5mbyBzdHJ1Y3R1cmUsIHZhcmlvdXMgc3RhX2luZm9fZGVzdHJveV8qKCkKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKaW5kZXggNTc2ODExNC4uYjJmOTU5NiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKQEAgLTE3Myw3ICsxNzMsNyBAQAogLyoqCiAgKiBlbnVtIHBsaW5rX3N0YXRlIC0gc3RhdGUgb2YgYSBtZXNoIHBlZXIgbGluayBmaW5pdGUgc3RhdGUgbWFjaGluZQogICoKLSAqIEBQTElOS19MSVNURU46IGluaXRpYWwgc3RhdGUsIGNvbnNpZGVyZWQgdGhlIGltcGxpY2l0IHN0YXRlIG9mIG5vbiBleGlzdGFudAorICogQFBMSU5LX0xJU1RFTjogaW5pdGlhbCBzdGF0ZSwgY29uc2lkZXJlZCB0aGUgaW1wbGljaXQgc3RhdGUgb2Ygbm9uIGV4aXN0ZW50CiAgKiAJbWVzaCBwZWVyIGxpbmtzCiAgKiBAUExJTktfT1BOX1NOVDogbWVzaCBwbGluayBvcGVuIGZyYW1lIGhhcyBiZWVuIHNlbnQgdG8gdGhpcyBtZXNoIHBlZXIKICAqIEBQTElOS19PUE5fUkNWRDogbWVzaCBwbGluayBvcGVuIGZyYW1lIGhhcyBiZWVuIHJlY2VpdmVkIGZyb20gdGhpcyBtZXNoIHBlZXIKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmMKaW5kZXggY2U0NTk2ZS4uYmQxMjI0ZiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3R4LmMKKysrIGIvbmV0L21hYzgwMjExL3R4LmMKQEAgLTIzNyw2ICsyMzcsMTAgQEAKIAkJCQkgICAgICZsb2NhbC0+ZHluYW1pY19wc19kaXNhYmxlX3dvcmspOwogCX0KIAorCS8qIERvbid0IHJlc3RhcnQgdGhlIHRpbWVyIGlmIHdlJ3JlIG5vdCBkaXNhc3NvY2lhdGVkICovCisJaWYgKCFpZm1nZC0+YXNzb2NpYXRlZCkKKwkJcmV0dXJuIFRYX0NPTlRJTlVFOworCiAJbW9kX3RpbWVyKCZsb2NhbC0+ZHluYW1pY19wc190aW1lciwgamlmZmllcyArCiAJCSAgbXNlY3NfdG9famlmZmllcyhsb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQpKTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCmluZGV4IGMzZjk4OGEuLjMyYmZmNmQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTY1Miw3ICs2NTIsNiBAQAogY29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9BRERSVFlQRQogCXRyaXN0YXRlICciYWRkcnR5cGUiIGFkZHJlc3MgdHlwZSBtYXRjaCBzdXBwb3J0JwogCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECi0JZGVwZW5kcyBvbiAoSVBWNiB8fCBJUFY2PW4pCiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBtYXRjaCB3aGF0IHJvdXRpbmcgdGhpbmtzIG9mIGFuIGFkZHJlc3MsCiAJICBlZy4gVU5JQ0FTVCwgTE9DQUwsIEJST0FEQ0FTVCwgLi4uCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXAuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jCmluZGV4IGJjYTk2OTkuLmExMTNmZjAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcC5jCkBAIC0zMzgsOCArMzM4LDcgQEAKIAlOTEFfUFVUX0lQQUREUjQoc2tiLCBJUFNFVF9BVFRSX0lQX1RPLCBodG9ubChtYXAtPmxhc3RfaXApKTsKIAlpZiAobWFwLT5uZXRtYXNrICE9IDMyKQogCQlOTEFfUFVUX1U4KHNrYiwgSVBTRVRfQVRUUl9ORVRNQVNLLCBtYXAtPm5ldG1hc2spOwotCU5MQV9QVVRfTkVUMzIoc2tiLCBJUFNFVF9BVFRSX1JFRkVSRU5DRVMsCi0JCSAgICAgIGh0b25sKGF0b21pY19yZWFkKCZzZXQtPnJlZikgLSAxKSk7CisJTkxBX1BVVF9ORVQzMihza2IsIElQU0VUX0FUVFJfUkVGRVJFTkNFUywgaHRvbmwoc2V0LT5yZWYgLSAxKSk7CiAJTkxBX1BVVF9ORVQzMihza2IsIElQU0VUX0FUVFJfTUVNU0laRSwKIAkJICAgICAgaHRvbmwoc2l6ZW9mKCptYXApICsgbWFwLT5tZW1zaXplKSk7CiAJaWYgKHdpdGhfdGltZW91dChtYXAtPnRpbWVvdXQpKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYwppbmRleCA1ZTc5MDE3Li5hMjc0MzAwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfaXBtYWMuYwpAQCAtMzQzLDYgKzM0MywxMCBAQAogCWlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LT52YXJpYW50LT5hZHRbYWR0XTsKIAlzdHJ1Y3QgaXBtYWMgZGF0YTsKIAorCS8qIE1BQyBjYW4gYmUgc3JjIG9ubHkgKi8KKwlpZiAoIShmbGFncyAmIElQU0VUX0RJTV9UV09fU1JDKSkKKwkJcmV0dXJuIDA7CisKIAlkYXRhLmlkID0gbnRvaGwoaXA0YWRkcihza2IsIGZsYWdzICYgSVBTRVRfRElNX09ORV9TUkMpKTsKIAlpZiAoZGF0YS5pZCA8IG1hcC0+Zmlyc3RfaXAgfHwgZGF0YS5pZCA+IG1hcC0+bGFzdF9pcCkKIAkJcmV0dXJuIC1JUFNFVF9FUlJfQklUTUFQX1JBTkdFOwpAQCAtNDM0LDggKzQzOCw3IEBACiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCU5MQV9QVVRfSVBBRERSNChza2IsIElQU0VUX0FUVFJfSVAsIGh0b25sKG1hcC0+Zmlyc3RfaXApKTsKIAlOTEFfUFVUX0lQQUREUjQoc2tiLCBJUFNFVF9BVFRSX0lQX1RPLCBodG9ubChtYXAtPmxhc3RfaXApKTsKLQlOTEFfUFVUX05FVDMyKHNrYiwgSVBTRVRfQVRUUl9SRUZFUkVOQ0VTLAotCQkgICAgICBodG9ubChhdG9taWNfcmVhZCgmc2V0LT5yZWYpIC0gMSkpOworCU5MQV9QVVRfTkVUMzIoc2tiLCBJUFNFVF9BVFRSX1JFRkVSRU5DRVMsIGh0b25sKHNldC0+cmVmIC0gMSkpOwogCU5MQV9QVVRfTkVUMzIoc2tiLCBJUFNFVF9BVFRSX01FTVNJWkUsCiAJCSAgICAgIGh0b25sKHNpemVvZigqbWFwKQogCQkJICAgICsgKG1hcC0+bGFzdF9pcCAtIG1hcC0+Zmlyc3RfaXAgKyAxKSAqIG1hcC0+ZHNpemUpKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9iaXRtYXBfcG9ydC5jCmluZGV4IDE2NWYwOWIuLjZiMzhlYjggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9wb3J0LmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX3BvcnQuYwpAQCAtMzIwLDggKzMyMCw3IEBACiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCU5MQV9QVVRfTkVUMTYoc2tiLCBJUFNFVF9BVFRSX1BPUlQsIGh0b25zKG1hcC0+Zmlyc3RfcG9ydCkpOwogCU5MQV9QVVRfTkVUMTYoc2tiLCBJUFNFVF9BVFRSX1BPUlRfVE8sIGh0b25zKG1hcC0+bGFzdF9wb3J0KSk7Ci0JTkxBX1BVVF9ORVQzMihza2IsIElQU0VUX0FUVFJfUkVGRVJFTkNFUywKLQkJICAgICAgaHRvbmwoYXRvbWljX3JlYWQoJnNldC0+cmVmKSAtIDEpKTsKKwlOTEFfUFVUX05FVDMyKHNrYiwgSVBTRVRfQVRUUl9SRUZFUkVOQ0VTLCBodG9ubChzZXQtPnJlZiAtIDEpKTsKIAlOTEFfUFVUX05FVDMyKHNrYiwgSVBTRVRfQVRUUl9NRU1TSVpFLAogCQkgICAgICBodG9ubChzaXplb2YoKm1hcCkgKyBtYXAtPm1lbXNpemUpKTsKIAlpZiAod2l0aF90aW1lb3V0KG1hcC0+dGltZW91dCkpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMKaW5kZXggZDZiNDgyMy4uNzJkMWFjNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYwpAQCAtMjYsNiArMjYsNyBAQAogCiBzdGF0aWMgTElTVF9IRUFEKGlwX3NldF90eXBlX2xpc3QpOwkJLyogYWxsIHJlZ2lzdGVyZWQgc2V0IHR5cGVzICovCiBzdGF0aWMgREVGSU5FX01VVEVYKGlwX3NldF90eXBlX211dGV4KTsJCS8qIHByb3RlY3RzIGlwX3NldF90eXBlX2xpc3QgKi8KK3N0YXRpYyBERUZJTkVfUldMT0NLKGlwX3NldF9yZWZfbG9jayk7CQkvKiBwcm90ZWN0cyB0aGUgc2V0IHJlZnMgKi8KIAogc3RhdGljIHN0cnVjdCBpcF9zZXQgKippcF9zZXRfbGlzdDsJCS8qIGFsbCBpbmRpdmlkdWFsIHNldHMgKi8KIHN0YXRpYyBpcF9zZXRfaWRfdCBpcF9zZXRfbWF4ID0gQ09ORklHX0lQX1NFVF9NQVg7IC8qIG1heCBudW1iZXIgb2Ygc2V0cyAqLwpAQCAtMzAxLDEzICszMDIsMTggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogX19pcF9zZXRfZ2V0KGlwX3NldF9pZF90IGluZGV4KQogewotCWF0b21pY19pbmMoJmlwX3NldF9saXN0W2luZGV4XS0+cmVmKTsKKwl3cml0ZV9sb2NrX2JoKCZpcF9zZXRfcmVmX2xvY2spOworCWlwX3NldF9saXN0W2luZGV4XS0+cmVmKys7CisJd3JpdGVfdW5sb2NrX2JoKCZpcF9zZXRfcmVmX2xvY2spOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKIF9faXBfc2V0X3B1dChpcF9zZXRfaWRfdCBpbmRleCkKIHsKLQlhdG9taWNfZGVjKCZpcF9zZXRfbGlzdFtpbmRleF0tPnJlZik7CisJd3JpdGVfbG9ja19iaCgmaXBfc2V0X3JlZl9sb2NrKTsKKwlCVUdfT04oaXBfc2V0X2xpc3RbaW5kZXhdLT5yZWYgPT0gMCk7CisJaXBfc2V0X2xpc3RbaW5kZXhdLT5yZWYtLTsKKwl3cml0ZV91bmxvY2tfYmgoJmlwX3NldF9yZWZfbG9jayk7CiB9CiAKIC8qCkBAIC0zMjQsNyArMzMwLDcgQEAKIAlzdHJ1Y3QgaXBfc2V0ICpzZXQgPSBpcF9zZXRfbGlzdFtpbmRleF07CiAJaW50IHJldCA9IDA7CiAKLQlCVUdfT04oc2V0ID09IE5VTEwgfHwgYXRvbWljX3JlYWQoJnNldC0+cmVmKSA9PSAwKTsKKwlCVUdfT04oc2V0ID09IE5VTEwpOwogCXByX2RlYnVnKCJzZXQgJXMsIGluZGV4ICV1XG4iLCBzZXQtPm5hbWUsIGluZGV4KTsKIAogCWlmIChkaW0gPCBzZXQtPnR5cGUtPmRpbWVuc2lvbiB8fApAQCAtMzU2LDcgKzM2Miw3IEBACiAJc3RydWN0IGlwX3NldCAqc2V0ID0gaXBfc2V0X2xpc3RbaW5kZXhdOwogCWludCByZXQ7CiAKLQlCVUdfT04oc2V0ID09IE5VTEwgfHwgYXRvbWljX3JlYWQoJnNldC0+cmVmKSA9PSAwKTsKKwlCVUdfT04oc2V0ID09IE5VTEwpOwogCXByX2RlYnVnKCJzZXQgJXMsIGluZGV4ICV1XG4iLCBzZXQtPm5hbWUsIGluZGV4KTsKIAogCWlmIChkaW0gPCBzZXQtPnR5cGUtPmRpbWVuc2lvbiB8fApAQCAtMzc4LDcgKzM4NCw3IEBACiAJc3RydWN0IGlwX3NldCAqc2V0ID0gaXBfc2V0X2xpc3RbaW5kZXhdOwogCWludCByZXQgPSAwOwogCi0JQlVHX09OKHNldCA9PSBOVUxMIHx8IGF0b21pY19yZWFkKCZzZXQtPnJlZikgPT0gMCk7CisJQlVHX09OKHNldCA9PSBOVUxMKTsKIAlwcl9kZWJ1Zygic2V0ICVzLCBpbmRleCAldVxuIiwgc2V0LT5uYW1lLCBpbmRleCk7CiAKIAlpZiAoZGltIDwgc2V0LT50eXBlLT5kaW1lbnNpb24gfHwKQEAgLTM5Nyw3ICs0MDMsNiBAQAogICogRmluZCBzZXQgYnkgbmFtZSwgcmVmZXJlbmNlIGl0IG9uY2UuIFRoZSByZWZlcmVuY2UgbWFrZXMgc3VyZSB0aGUKICAqIHRoaW5nIHBvaW50ZWQgdG8sIGRvZXMgbm90IGdvIGF3YXkgdW5kZXIgb3VyIGZlZXQuCiAgKgotICogVGhlIG5mbmwgbXV0ZXggbXVzdCBhbHJlYWR5IGJlIGFjdGl2YXRlZC4KICAqLwogaXBfc2V0X2lkX3QKIGlwX3NldF9nZXRfYnluYW1lKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBpcF9zZXQgKipzZXQpCkBAIC00MjMsMTUgKzQyOCwxMiBAQAogICogcmVmZXJlbmNlIGNvdW50IGJ5IDEuIFRoZSBjYWxsZXIgc2hhbGwgbm90IGFzc3VtZSB0aGUgaW5kZXgKICAqIHRvIGJlIHZhbGlkLCBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCiAgKgotICogVGhlIG5mbmwgbXV0ZXggbXVzdCBhbHJlYWR5IGJlIGFjdGl2YXRlZC4KICAqLwogdm9pZAogaXBfc2V0X3B1dF9ieWluZGV4KGlwX3NldF9pZF90IGluZGV4KQogewotCWlmIChpcF9zZXRfbGlzdFtpbmRleF0gIT0gTlVMTCkgewotCQlCVUdfT04oYXRvbWljX3JlYWQoJmlwX3NldF9saXN0W2luZGV4XS0+cmVmKSA9PSAwKTsKKwlpZiAoaXBfc2V0X2xpc3RbaW5kZXhdICE9IE5VTEwpCiAJCV9faXBfc2V0X3B1dChpbmRleCk7Ci0JfQogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXBfc2V0X3B1dF9ieWluZGV4KTsKIApAQCAtNDQxLDcgKzQ0Myw2IEBACiAgKiBjYW4ndCBiZSBkZXN0cm95ZWQuIFRoZSBzZXQgY2Fubm90IGJlIHJlbmFtZWQgZHVlIHRvCiAgKiB0aGUgcmVmZXJlbmNpbmcgZWl0aGVyLgogICoKLSAqIFRoZSBuZm5sIG11dGV4IG11c3QgYWxyZWFkeSBiZSBhY3RpdmF0ZWQuCiAgKi8KIGNvbnN0IGNoYXIgKgogaXBfc2V0X25hbWVfYnlpbmRleChpcF9zZXRfaWRfdCBpbmRleCkKQEAgLTQ0OSw3ICs0NTAsNyBAQAogCWNvbnN0IHN0cnVjdCBpcF9zZXQgKnNldCA9IGlwX3NldF9saXN0W2luZGV4XTsKIAogCUJVR19PTihzZXQgPT0gTlVMTCk7Ci0JQlVHX09OKGF0b21pY19yZWFkKCZzZXQtPnJlZikgPT0gMCk7CisJQlVHX09OKHNldC0+cmVmID09IDApOwogCiAJLyogUmVmZXJlbmNlZCwgc28gaXQncyBzYWZlICovCiAJcmV0dXJuIHNldC0+bmFtZTsKQEAgLTUxNSwxMCArNTE2LDcgQEAKIGlwX3NldF9uZm5sX3B1dChpcF9zZXRfaWRfdCBpbmRleCkKIHsKIAluZm5sX2xvY2soKTsKLQlpZiAoaXBfc2V0X2xpc3RbaW5kZXhdICE9IE5VTEwpIHsKLQkJQlVHX09OKGF0b21pY19yZWFkKCZpcF9zZXRfbGlzdFtpbmRleF0tPnJlZikgPT0gMCk7Ci0JCV9faXBfc2V0X3B1dChpbmRleCk7Ci0JfQorCWlwX3NldF9wdXRfYnlpbmRleChpbmRleCk7CiAJbmZubF91bmxvY2soKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlwX3NldF9uZm5sX3B1dCk7CkBAIC01MjYsNyArNTI0LDcgQEAKIC8qCiAgKiBDb21tdW5pY2F0aW9uIHByb3RvY29sIHdpdGggdXNlcnNwYWNlIG92ZXIgbmV0bGluay4KICAqCi0gKiBXZSBhbHJlYWR5IGxvY2tlZCBieSBuZm5sX2xvY2suCisgKiBUaGUgY29tbWFuZHMgYXJlIHNlcmlhbGl6ZWQgYnkgdGhlIG5mbmwgbXV0ZXguCiAgKi8KIAogc3RhdGljIGlubGluZSBib29sCkBAIC02NTcsNyArNjU1LDYgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJcndsb2NrX2luaXQoJnNldC0+bG9jayk7CiAJc3RybGNweShzZXQtPm5hbWUsIG5hbWUsIElQU0VUX01BWE5BTUVMRU4pOwotCWF0b21pY19zZXQoJnNldC0+cmVmLCAwKTsKIAlzZXQtPmZhbWlseSA9IGZhbWlseTsKIAogCS8qCkBAIC02OTAsOCArNjg3LDggQEAKIAogCS8qCiAJICogSGVyZSwgd2UgaGF2ZSBhIHZhbGlkLCBjb25zdHJ1Y3RlZCBzZXQgYW5kIHdlIGFyZSBwcm90ZWN0ZWQKLQkgKiBieSBuZm5sX2xvY2suIEZpbmQgdGhlIGZpcnN0IGZyZWUgaW5kZXggaW4gaXBfc2V0X2xpc3QgYW5kCi0JICogY2hlY2sgY2xhc2hpbmcuCisJICogYnkgdGhlIG5mbmwgbXV0ZXguIEZpbmQgdGhlIGZpcnN0IGZyZWUgaW5kZXggaW4gaXBfc2V0X2xpc3QKKwkgKiBhbmQgY2hlY2sgY2xhc2hpbmcuCiAJICovCiAJaWYgKChyZXQgPSBmaW5kX2ZyZWVfaWQoc2V0LT5uYW1lLCAmaW5kZXgsICZjbGFzaCkpICE9IDApIHsKIAkJLyogSWYgdGhpcyBpcyB0aGUgc2FtZSBzZXQgYW5kIHJlcXVlc3RlZCwgaWdub3JlIGVycm9yICovCkBAIC03NTEsMzEgKzc0OCw1MSBAQAogCSAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgYXR0cltdKQogewogCWlwX3NldF9pZF90IGk7CisJaW50IHJldCA9IDA7CiAKIAlpZiAodW5saWtlbHkocHJvdG9jb2xfZmFpbGVkKGF0dHIpKSkKIAkJcmV0dXJuIC1JUFNFVF9FUlJfUFJPVE9DT0w7CiAKLQkvKiBSZWZlcmVuY2VzIGFyZSBwcm90ZWN0ZWQgYnkgdGhlIG5mbmwgbXV0ZXggKi8KKwkvKiBDb21tYW5kcyBhcmUgc2VyaWFsaXplZCBhbmQgcmVmZXJlbmNlcyBhcmUKKwkgKiBwcm90ZWN0ZWQgYnkgdGhlIGlwX3NldF9yZWZfbG9jay4KKwkgKiBFeHRlcm5hbCBzeXN0ZW1zIChpLmUuIHh0X3NldCkgbXVzdCBjYWxsCisJICogaXBfc2V0X3B1dHxnZXRfbmZubF8qIGZ1bmN0aW9ucywgdGhhdCB3YXkgd2UKKwkgKiBjYW4gc2FmZWx5IGNoZWNrIHJlZmVyZW5jZXMgaGVyZS4KKwkgKgorCSAqIGxpc3Q6c2V0IHRpbWVyIGNhbiBvbmx5IGRlY3JlbWVudCB0aGUgcmVmZXJlbmNlCisJICogY291bnRlciwgc28gaWYgaXQncyBhbHJlYWR5IHplcm8sIHdlIGNhbiBwcm9jZWVkCisJICogd2l0aG91dCBob2xkaW5nIHRoZSBsb2NrLgorCSAqLworCXJlYWRfbG9ja19iaCgmaXBfc2V0X3JlZl9sb2NrKTsKIAlpZiAoIWF0dHJbSVBTRVRfQVRUUl9TRVROQU1FXSkgewogCQlmb3IgKGkgPSAwOyBpIDwgaXBfc2V0X21heDsgaSsrKSB7Ci0JCQlpZiAoaXBfc2V0X2xpc3RbaV0gIT0gTlVMTCAmJgotCQkJICAgIChhdG9taWNfcmVhZCgmaXBfc2V0X2xpc3RbaV0tPnJlZikpKQotCQkJCXJldHVybiAtSVBTRVRfRVJSX0JVU1k7CisJCQlpZiAoaXBfc2V0X2xpc3RbaV0gIT0gTlVMTCAmJiBpcF9zZXRfbGlzdFtpXS0+cmVmKSB7CisJCQkJcmV0ID0gSVBTRVRfRVJSX0JVU1k7CisJCQkJZ290byBvdXQ7CisJCQl9CiAJCX0KKwkJcmVhZF91bmxvY2tfYmgoJmlwX3NldF9yZWZfbG9jayk7CiAJCWZvciAoaSA9IDA7IGkgPCBpcF9zZXRfbWF4OyBpKyspIHsKIAkJCWlmIChpcF9zZXRfbGlzdFtpXSAhPSBOVUxMKQogCQkJCWlwX3NldF9kZXN0cm95X3NldChpKTsKIAkJfQogCX0gZWxzZSB7CiAJCWkgPSBmaW5kX3NldF9pZChubGFfZGF0YShhdHRyW0lQU0VUX0FUVFJfU0VUTkFNRV0pKTsKLQkJaWYgKGkgPT0gSVBTRVRfSU5WQUxJRF9JRCkKLQkJCXJldHVybiAtRU5PRU5UOwotCQllbHNlIGlmIChhdG9taWNfcmVhZCgmaXBfc2V0X2xpc3RbaV0tPnJlZikpCi0JCQlyZXR1cm4gLUlQU0VUX0VSUl9CVVNZOworCQlpZiAoaSA9PSBJUFNFVF9JTlZBTElEX0lEKSB7CisJCQlyZXQgPSAtRU5PRU5UOworCQkJZ290byBvdXQ7CisJCX0gZWxzZSBpZiAoaXBfc2V0X2xpc3RbaV0tPnJlZikgeworCQkJcmV0ID0gLUlQU0VUX0VSUl9CVVNZOworCQkJZ290byBvdXQ7CisJCX0KKwkJcmVhZF91bmxvY2tfYmgoJmlwX3NldF9yZWZfbG9jayk7CiAKIAkJaXBfc2V0X2Rlc3Ryb3lfc2V0KGkpOwogCX0KIAlyZXR1cm4gMDsKK291dDoKKwlyZWFkX3VubG9ja19iaCgmaXBfc2V0X3JlZl9sb2NrKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKiBGbHVzaCBzZXRzICovCkBAIC04MzQsNiArODUxLDcgQEAKIAlzdHJ1Y3QgaXBfc2V0ICpzZXQ7CiAJY29uc3QgY2hhciAqbmFtZTI7CiAJaXBfc2V0X2lkX3QgaTsKKwlpbnQgcmV0ID0gMDsKIAogCWlmICh1bmxpa2VseShwcm90b2NvbF9mYWlsZWQoYXR0cikgfHwKIAkJICAgICBhdHRyW0lQU0VUX0FUVFJfU0VUTkFNRV0gPT0gTlVMTCB8fApAQCAtODQzLDI1ICs4NjEsMzMgQEAKIAlzZXQgPSBmaW5kX3NldChubGFfZGF0YShhdHRyW0lQU0VUX0FUVFJfU0VUTkFNRV0pKTsKIAlpZiAoc2V0ID09IE5VTEwpCiAJCXJldHVybiAtRU5PRU5UOwotCWlmIChhdG9taWNfcmVhZCgmc2V0LT5yZWYpICE9IDApCi0JCXJldHVybiAtSVBTRVRfRVJSX1JFRkVSRU5DRUQ7CisKKwlyZWFkX2xvY2tfYmgoJmlwX3NldF9yZWZfbG9jayk7CisJaWYgKHNldC0+cmVmICE9IDApIHsKKwkJcmV0ID0gLUlQU0VUX0VSUl9SRUZFUkVOQ0VEOworCQlnb3RvIG91dDsKKwl9CiAKIAluYW1lMiA9IG5sYV9kYXRhKGF0dHJbSVBTRVRfQVRUUl9TRVROQU1FMl0pOwogCWZvciAoaSA9IDA7IGkgPCBpcF9zZXRfbWF4OyBpKyspIHsKIAkJaWYgKGlwX3NldF9saXN0W2ldICE9IE5VTEwgJiYKLQkJICAgIFNUUkVRKGlwX3NldF9saXN0W2ldLT5uYW1lLCBuYW1lMikpCi0JCQlyZXR1cm4gLUlQU0VUX0VSUl9FWElTVF9TRVROQU1FMjsKKwkJICAgIFNUUkVRKGlwX3NldF9saXN0W2ldLT5uYW1lLCBuYW1lMikpIHsKKwkJCXJldCA9IC1JUFNFVF9FUlJfRVhJU1RfU0VUTkFNRTI7CisJCQlnb3RvIG91dDsKKwkJfQogCX0KIAlzdHJuY3B5KHNldC0+bmFtZSwgbmFtZTIsIElQU0VUX01BWE5BTUVMRU4pOwogCi0JcmV0dXJuIDA7CitvdXQ6CisJcmVhZF91bmxvY2tfYmgoJmlwX3NldF9yZWZfbG9jayk7CisJcmV0dXJuIHJldDsKIH0KIAogLyogU3dhcCB0d28gc2V0cyBzbyB0aGF0IG5hbWUvaW5kZXggcG9pbnRzIHRvIHRoZSBvdGhlci4KICAqIFJlZmVyZW5jZXMgYW5kIHNldCBuYW1lcyBhcmUgYWxzbyBzd2FwcGVkLgogICoKLSAqIFdlIGFyZSBwcm90ZWN0ZWQgYnkgdGhlIG5mbmwgbXV0ZXggYW5kIHJlZmVyZW5jZXMgYXJlCi0gKiBtYW5pcHVsYXRlZCBvbmx5IGJ5IGhvbGRpbmcgdGhlIG11dGV4LiBUaGUga2VybmVsIGludGVyZmFjZXMKKyAqIFRoZSBjb21tYW5kcyBhcmUgc2VyaWFsaXplZCBieSB0aGUgbmZubCBtdXRleCBhbmQgcmVmZXJlbmNlcyBhcmUKKyAqIHByb3RlY3RlZCBieSB0aGUgaXBfc2V0X3JlZl9sb2NrLiBUaGUga2VybmVsIGludGVyZmFjZXMKICAqIGRvIG5vdCBob2xkIHRoZSBtdXRleCBidXQgdGhlIHBvaW50ZXIgc2V0dGluZ3MgYXJlIGF0b21pYwogICogc28gdGhlIGlwX3NldF9saXN0IGFsd2F5cyBjb250YWlucyB2YWxpZCBwb2ludGVycyB0byB0aGUgc2V0cy4KICAqLwpAQCAtODc0LDcgKzkwMCw2IEBACiAJc3RydWN0IGlwX3NldCAqZnJvbSwgKnRvOwogCWlwX3NldF9pZF90IGZyb21faWQsIHRvX2lkOwogCWNoYXIgZnJvbV9uYW1lW0lQU0VUX01BWE5BTUVMRU5dOwotCXUzMiBmcm9tX3JlZjsKIAogCWlmICh1bmxpa2VseShwcm90b2NvbF9mYWlsZWQoYXR0cikgfHwKIAkJICAgICBhdHRyW0lQU0VUX0FUVFJfU0VUTkFNRV0gPT0gTlVMTCB8fApAQCAtODkzLDIzICs5MTgsMjEgQEAKIAl0byA9IGlwX3NldF9saXN0W3RvX2lkXTsKIAogCS8qIEZlYXR1cmVzIG11c3Qgbm90IGNoYW5nZS4KLQkgKiBOb3QgYW4gYXJ0aWZpY2FsIHJlc3RyaWN0aW9uIGFueW1vcmUsIGFzIHdlIG11c3QgcHJldmVudAorCSAqIE5vdCBhbiBhcnRpZmljaWFsIHJlc3RyaWN0aW9uIGFueW1vcmUsIGFzIHdlIG11c3QgcHJldmVudAogCSAqIHBvc3NpYmxlIGxvb3BzIGNyZWF0ZWQgYnkgc3dhcHBpbmcgaW4gc2V0bGlzdCB0eXBlIG9mIHNldHMuICovCiAJaWYgKCEoZnJvbS0+dHlwZS0+ZmVhdHVyZXMgPT0gdG8tPnR5cGUtPmZlYXR1cmVzICYmCiAJICAgICAgZnJvbS0+dHlwZS0+ZmFtaWx5ID09IHRvLT50eXBlLT5mYW1pbHkpKQogCQlyZXR1cm4gLUlQU0VUX0VSUl9UWVBFX01JU01BVENIOwogCi0JLyogTm8gbWFnaWMgaGVyZTogcmVmIG11bmdpbmcgcHJvdGVjdGVkIGJ5IHRoZSBuZm5sX2xvY2sgKi8KIAlzdHJuY3B5KGZyb21fbmFtZSwgZnJvbS0+bmFtZSwgSVBTRVRfTUFYTkFNRUxFTik7Ci0JZnJvbV9yZWYgPSBhdG9taWNfcmVhZCgmZnJvbS0+cmVmKTsKLQogCXN0cm5jcHkoZnJvbS0+bmFtZSwgdG8tPm5hbWUsIElQU0VUX01BWE5BTUVMRU4pOwotCWF0b21pY19zZXQoJmZyb20tPnJlZiwgYXRvbWljX3JlYWQoJnRvLT5yZWYpKTsKIAlzdHJuY3B5KHRvLT5uYW1lLCBmcm9tX25hbWUsIElQU0VUX01BWE5BTUVMRU4pOwotCWF0b21pY19zZXQoJnRvLT5yZWYsIGZyb21fcmVmKTsKIAorCXdyaXRlX2xvY2tfYmgoJmlwX3NldF9yZWZfbG9jayk7CisJc3dhcChmcm9tLT5yZWYsIHRvLT5yZWYpOwogCWlwX3NldF9saXN0W2Zyb21faWRdID0gdG87CiAJaXBfc2V0X2xpc3RbdG9faWRdID0gZnJvbTsKKwl3cml0ZV91bmxvY2tfYmgoJmlwX3NldF9yZWZfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTkyNiw3ICs5NDksNyBAQAogewogCWlmIChjYi0+YXJnc1syXSkgewogCQlwcl9kZWJ1ZygicmVsZWFzZSBzZXQgJXNcbiIsIGlwX3NldF9saXN0W2NiLT5hcmdzWzFdXS0+bmFtZSk7Ci0JCV9faXBfc2V0X3B1dCgoaXBfc2V0X2lkX3QpIGNiLT5hcmdzWzFdKTsKKwkJaXBfc2V0X3B1dF9ieWluZGV4KChpcF9zZXRfaWRfdCkgY2ItPmFyZ3NbMV0pOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTk5OSw4ICsxMDIyLDkgQEAKIAlpZiAoY2ItPmFyZ3NbMV0gPj0gaXBfc2V0X21heCkKIAkJZ290byBvdXQ7CiAKLQlwcl9kZWJ1ZygiYXJnc1swXTogJWxkIGFyZ3NbMV06ICVsZFxuIiwgY2ItPmFyZ3NbMF0sIGNiLT5hcmdzWzFdKTsKIAltYXggPSBjYi0+YXJnc1swXSA9PSBEVU1QX09ORSA/IGNiLT5hcmdzWzFdICsgMSA6IGlwX3NldF9tYXg7CitkdW1wX2xhc3Q6CisJcHJfZGVidWcoImFyZ3NbMF06ICVsZCBhcmdzWzFdOiAlbGRcbiIsIGNiLT5hcmdzWzBdLCBjYi0+YXJnc1sxXSk7CiAJZm9yICg7IGNiLT5hcmdzWzFdIDwgbWF4OyBjYi0+YXJnc1sxXSsrKSB7CiAJCWluZGV4ID0gKGlwX3NldF9pZF90KSBjYi0+YXJnc1sxXTsKIAkJc2V0ID0gaXBfc2V0X2xpc3RbaW5kZXhdOwpAQCAtMTAxNSw4ICsxMDM5LDggQEAKIAkJICogc28gdGhhdCBsaXN0cyAodW5pb25zIG9mIHNldHMpIGFyZSBkdW1wZWQgbGFzdC4KIAkJICovCiAJCWlmIChjYi0+YXJnc1swXSAhPSBEVU1QX09ORSAmJgotCQkgICAgISgoY2ItPmFyZ3NbMF0gPT0gRFVNUF9BTEwpIF4KLQkJICAgICAgKHNldC0+dHlwZS0+ZmVhdHVyZXMgJiBJUFNFVF9EVU1QX0xBU1QpKSkKKwkJICAgICgoY2ItPmFyZ3NbMF0gPT0gRFVNUF9BTEwpID09CisJCSAgICAgISEoc2V0LT50eXBlLT5mZWF0dXJlcyAmIElQU0VUX0RVTVBfTEFTVCkpKQogCQkJY29udGludWU7CiAJCXByX2RlYnVnKCJMaXN0IHNldDogJXNcbiIsIHNldC0+bmFtZSk7CiAJCWlmICghY2ItPmFyZ3NbMl0pIHsKQEAgLTEwNjAsNiArMTA4NCwxMiBAQAogCQkJZ290byByZWxlYXNlX3JlZmNvdW50OwogCQl9CiAJfQorCS8qIElmIHdlIGR1bXAgYWxsIHNldHMsIGNvbnRpbnVlIHdpdGggZHVtcGluZyBsYXN0IG9uZXMgKi8KKwlpZiAoY2ItPmFyZ3NbMF0gPT0gRFVNUF9BTEwpIHsKKwkJY2ItPmFyZ3NbMF0gPSBEVU1QX0xBU1Q7CisJCWNiLT5hcmdzWzFdID0gMDsKKwkJZ290byBkdW1wX2xhc3Q7CisJfQogCWdvdG8gb3V0OwogCiBubGFfcHV0X2ZhaWx1cmU6CkBAIC0xMDY4LDEzICsxMDk4LDggQEAKIAkvKiBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igb3Igc2V0IGlzIGRvbmUsIHJlbGVhc2Ugc2V0ICovCiAJaWYgKHJldCB8fCAhY2ItPmFyZ3NbMl0pIHsKIAkJcHJfZGVidWcoInJlbGVhc2Ugc2V0ICVzXG4iLCBpcF9zZXRfbGlzdFtpbmRleF0tPm5hbWUpOwotCQlfX2lwX3NldF9wdXQoaW5kZXgpOworCQlpcF9zZXRfcHV0X2J5aW5kZXgoaW5kZXgpOwogCX0KLQotCS8qIElmIHdlIGR1bXAgYWxsIHNldHMsIGNvbnRpbnVlIHdpdGggZHVtcGluZyBsYXN0IG9uZXMgKi8KLQlpZiAoY2ItPmFyZ3NbMF0gPT0gRFVNUF9BTEwgJiYgY2ItPmFyZ3NbMV0gPj0gbWF4ICYmICFjYi0+YXJnc1syXSkKLQkJY2ItPmFyZ3NbMF0gPSBEVU1QX0xBU1Q7Ci0KIG91dDoKIAlpZiAobmxoKSB7CiAJCW5sbXNnX2VuZChza2IsIG5saCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfbGlzdF9zZXQuYwppbmRleCBhNDdjMzI5Li5lOTE1OWU5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9saXN0X3NldC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2xpc3Rfc2V0LmMKQEAgLTQzLDE0ICs0MywxOSBAQAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2V0X2VsZW0gKgogbGlzdF9zZXRfZWxlbShjb25zdCBzdHJ1Y3QgbGlzdF9zZXQgKm1hcCwgdTMyIGlkKQogewotCXJldHVybiAoc3RydWN0IHNldF9lbGVtICopKChjaGFyICopbWFwLT5tZW1iZXJzICsgaWQgKiBtYXAtPmRzaXplKTsKKwlyZXR1cm4gKHN0cnVjdCBzZXRfZWxlbSAqKSgodm9pZCAqKW1hcC0+bWVtYmVycyArIGlkICogbWFwLT5kc2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNldF90ZWxlbSAqCitsaXN0X3NldF90ZWxlbShjb25zdCBzdHJ1Y3QgbGlzdF9zZXQgKm1hcCwgdTMyIGlkKQoreworCXJldHVybiAoc3RydWN0IHNldF90ZWxlbSAqKSgodm9pZCAqKW1hcC0+bWVtYmVycyArIGlkICogbWFwLT5kc2l6ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbAogbGlzdF9zZXRfdGltZW91dChjb25zdCBzdHJ1Y3QgbGlzdF9zZXQgKm1hcCwgdTMyIGlkKQogewotCWNvbnN0IHN0cnVjdCBzZXRfdGVsZW0gKmVsZW0gPQotCQkoY29uc3Qgc3RydWN0IHNldF90ZWxlbSAqKSBsaXN0X3NldF9lbGVtKG1hcCwgaWQpOworCWNvbnN0IHN0cnVjdCBzZXRfdGVsZW0gKmVsZW0gPSBsaXN0X3NldF90ZWxlbShtYXAsIGlkKTsKIAogCXJldHVybiBpcF9zZXRfdGltZW91dF90ZXN0KGVsZW0tPnRpbWVvdXQpOwogfQpAQCAtNTgsMTkgKzYzLDExIEBACiBzdGF0aWMgaW5saW5lIGJvb2wKIGxpc3Rfc2V0X2V4cGlyZWQoY29uc3Qgc3RydWN0IGxpc3Rfc2V0ICptYXAsIHUzMiBpZCkKIHsKLQljb25zdCBzdHJ1Y3Qgc2V0X3RlbGVtICplbGVtID0KLQkJKGNvbnN0IHN0cnVjdCBzZXRfdGVsZW0gKikgbGlzdF9zZXRfZWxlbShtYXAsIGlkKTsKKwljb25zdCBzdHJ1Y3Qgc2V0X3RlbGVtICplbGVtID0gbGlzdF9zZXRfdGVsZW0obWFwLCBpZCk7CiAKIAlyZXR1cm4gaXBfc2V0X3RpbWVvdXRfZXhwaXJlZChlbGVtLT50aW1lb3V0KTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLWxpc3Rfc2V0X2V4aXN0KGNvbnN0IHN0cnVjdCBzZXRfdGVsZW0gKmVsZW0pCi17Ci0JcmV0dXJuIGVsZW0tPmlkICE9IElQU0VUX0lOVkFMSURfSUQgJiYKLQkgICAgICAgIWlwX3NldF90aW1lb3V0X2V4cGlyZWQoZWxlbS0+dGltZW91dCk7Ci19Ci0KIC8qIFNldCBsaXN0IHdpdGhvdXQgYW5kIHdpdGggdGltZW91dCAqLwogCiBzdGF0aWMgaW50CkBAIC0xNDYsMTEgKzE0MywxMSBAQAogCXN0cnVjdCBzZXRfdGVsZW0gKmU7CiAKIAlmb3IgKDsgaSA8IG1hcC0+c2l6ZTsgaSsrKSB7Ci0JCWUgPSAoc3RydWN0IHNldF90ZWxlbSAqKWxpc3Rfc2V0X2VsZW0obWFwLCBpKTsKKwkJZSA9IGxpc3Rfc2V0X3RlbGVtKG1hcCwgaSk7CiAJCXN3YXAoZS0+aWQsIGlkKTsKKwkJc3dhcChlLT50aW1lb3V0LCB0aW1lb3V0KTsKIAkJaWYgKGUtPmlkID09IElQU0VUX0lOVkFMSURfSUQpCiAJCQlicmVhazsKLQkJc3dhcChlLT50aW1lb3V0LCB0aW1lb3V0KTsKIAl9CiB9CiAKQEAgLTE2NCw3ICsxNjEsNyBAQAogCQkvKiBMYXN0IGVsZW1lbnQgcmVwbGFjZWQ6IGUuZy4gYWRkIG5ldyxiZWZvcmUsbGFzdCAqLwogCQlpcF9zZXRfcHV0X2J5aW5kZXgoZS0+aWQpOwogCWlmICh3aXRoX3RpbWVvdXQobWFwLT50aW1lb3V0KSkKLQkJbGlzdF9lbGVtX3RhZGQobWFwLCBpLCBpZCwgdGltZW91dCk7CisJCWxpc3RfZWxlbV90YWRkKG1hcCwgaSwgaWQsIGlwX3NldF90aW1lb3V0X3NldCh0aW1lb3V0KSk7CiAJZWxzZQogCQlsaXN0X2VsZW1fYWRkKG1hcCwgaSwgaWQpOwogCkBAIC0xNzIsMTEgKzE2OSwxMSBAQAogfQogCiBzdGF0aWMgaW50Ci1saXN0X3NldF9kZWwoc3RydWN0IGxpc3Rfc2V0ICptYXAsIGlwX3NldF9pZF90IGlkLCB1MzIgaSkKK2xpc3Rfc2V0X2RlbChzdHJ1Y3QgbGlzdF9zZXQgKm1hcCwgdTMyIGkpCiB7CiAJc3RydWN0IHNldF9lbGVtICphID0gbGlzdF9zZXRfZWxlbShtYXAsIGkpLCAqYjsKIAotCWlwX3NldF9wdXRfYnlpbmRleChpZCk7CisJaXBfc2V0X3B1dF9ieWluZGV4KGEtPmlkKTsKIAogCWZvciAoOyBpIDwgbWFwLT5zaXplIC0gMTsgaSsrKSB7CiAJCWIgPSBsaXN0X3NldF9lbGVtKG1hcCwgaSArIDEpOwpAQCAtMzA4LDExICszMDUsMTEgQEAKIAkJCQkgKGJlZm9yZSA9PSAwIHx8CiAJCQkJICAoYmVmb3JlID4gMCAmJgogCQkJCSAgIG5leHRfaWRfZXEobWFwLCBpLCByZWZpZCkpKSkKLQkJCQlyZXQgPSBsaXN0X3NldF9kZWwobWFwLCBpZCwgaSk7CisJCQkJcmV0ID0gbGlzdF9zZXRfZGVsKG1hcCwgaSk7CiAJCQllbHNlIGlmIChiZWZvcmUgPCAwICYmCiAJCQkJIGVsZW0tPmlkID09IHJlZmlkICYmCiAJCQkJIG5leHRfaWRfZXEobWFwLCBpLCBpZCkpCi0JCQkJcmV0ID0gbGlzdF9zZXRfZGVsKG1hcCwgaWQsIGkgKyAxKTsKKwkJCQlyZXQgPSBsaXN0X3NldF9kZWwobWFwLCBpICsgMSk7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTM2OSw4ICszNjYsNyBAQAogCU5MQV9QVVRfTkVUMzIoc2tiLCBJUFNFVF9BVFRSX1NJWkUsIGh0b25sKG1hcC0+c2l6ZSkpOwogCWlmICh3aXRoX3RpbWVvdXQobWFwLT50aW1lb3V0KSkKIAkJTkxBX1BVVF9ORVQzMihza2IsIElQU0VUX0FUVFJfVElNRU9VVCwgaHRvbmwobWFwLT50aW1lb3V0KSk7Ci0JTkxBX1BVVF9ORVQzMihza2IsIElQU0VUX0FUVFJfUkVGRVJFTkNFUywKLQkJICAgICAgaHRvbmwoYXRvbWljX3JlYWQoJnNldC0+cmVmKSAtIDEpKTsKKwlOTEFfUFVUX05FVDMyKHNrYiwgSVBTRVRfQVRUUl9SRUZFUkVOQ0VTLCBodG9ubChzZXQtPnJlZiAtIDEpKTsKIAlOTEFfUFVUX05FVDMyKHNrYiwgSVBTRVRfQVRUUl9NRU1TSVpFLAogCQkgICAgICBodG9ubChzaXplb2YoKm1hcCkgKyBtYXAtPnNpemUgKiBtYXAtPmRzaXplKSk7CiAJaXBzZXRfbmVzdF9lbmQoc2tiLCBuZXN0ZWQpOwpAQCAtNDYxLDE2ICs0NTcsMTMgQEAKIAlzdHJ1Y3Qgc2V0X3RlbGVtICplOwogCXUzMiBpOwogCi0JLyogV2UgcnVuIHBhcmFsbGVsIHdpdGggb3RoZXIgcmVhZGVycyAodGVzdCBlbGVtZW50KQotCSAqIGJ1dCBhZGRpbmcvZGVsZXRpbmcgbmV3IGVudHJpZXMgaXMgbG9ja2VkIG91dCAqLwotCXJlYWRfbG9ja19iaCgmc2V0LT5sb2NrKTsKLQlmb3IgKGkgPSBtYXAtPnNpemUgLSAxOyBpID49IDA7IGktLSkgewotCQllID0gKHN0cnVjdCBzZXRfdGVsZW0gKikgbGlzdF9zZXRfZWxlbShtYXAsIGkpOwotCQlpZiAoZS0+aWQgIT0gSVBTRVRfSU5WQUxJRF9JRCAmJgotCQkgICAgbGlzdF9zZXRfZXhwaXJlZChtYXAsIGkpKQotCQkJbGlzdF9zZXRfZGVsKG1hcCwgZS0+aWQsIGkpOworCXdyaXRlX2xvY2tfYmgoJnNldC0+bG9jayk7CisJZm9yIChpID0gMDsgaSA8IG1hcC0+c2l6ZTsgaSsrKSB7CisJCWUgPSBsaXN0X3NldF90ZWxlbShtYXAsIGkpOworCQlpZiAoZS0+aWQgIT0gSVBTRVRfSU5WQUxJRF9JRCAmJiBsaXN0X3NldF9leHBpcmVkKG1hcCwgaSkpCisJCQlsaXN0X3NldF9kZWwobWFwLCBpKTsKIAl9Ci0JcmVhZF91bmxvY2tfYmgoJnNldC0+bG9jayk7CisJd3JpdGVfdW5sb2NrX2JoKCZzZXQtPmxvY2spOwogCiAJbWFwLT5nYy5leHBpcmVzID0gamlmZmllcyArIElQU0VUX0dDX1BFUklPRChtYXAtPnRpbWVvdXQpICogSFo7CiAJYWRkX3RpbWVyKCZtYXAtPmdjKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYwppbmRleCAyZGM2ZGUxLi4wNTlhZjMxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jCkBAIC01NzIsMTEgKzU3MiwxMSBAQAogCS5vcGVuCSA9IGlwX3ZzX2FwcF9vcGVuLAogCS5yZWFkCSA9IHNlcV9yZWFkLAogCS5sbHNlZWsgID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9uZXQsCiB9OwogI2VuZGlmCiAKLXN0YXRpYyBpbnQgX19uZXRfaW5pdCBfX2lwX3ZzX2FwcF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK2ludCBfX25ldF9pbml0IF9faXBfdnNfYXBwX2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBuZXRuc19pcHZzICppcHZzID0gbmV0X2lwdnMobmV0KTsKIApAQCAtNTg1LDI2ICs1ODUsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19uZXRfZXhpdCBfX2lwX3ZzX2FwcF9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCkKK3ZvaWQgX19uZXRfZXhpdCBfX2lwX3ZzX2FwcF9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlwcm9jX25ldF9yZW1vdmUobmV0LCAiaXBfdnNfYXBwIik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXBfdnNfYXBwX29wcyA9IHsKLQkuaW5pdCA9IF9faXBfdnNfYXBwX2luaXQsCi0JLmV4aXQgPSBfX2lwX3ZzX2FwcF9jbGVhbnVwLAotfTsKLQogaW50IF9faW5pdCBpcF92c19hcHBfaW5pdCh2b2lkKQogewotCWludCBydjsKLQotCXJ2ID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXBfdnNfYXBwX29wcyk7Ci0JcmV0dXJuIHJ2OworCXJldHVybiAwOwogfQogCiAKIHZvaWQgaXBfdnNfYXBwX2NsZWFudXAodm9pZCkKIHsKLQl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwX3ZzX2FwcF9vcHMpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMKaW5kZXggZjI4OTMwNi4uYmYyOGFjMiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jCkBAIC01OTUsNyArNTk1LDcgQEAKIAkJCWF0b21pY19pbmMoJmRlc3QtPmluYWN0Y29ubnMpOwogCX0gZWxzZSB7CiAJCS8qIEl0IGlzIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uL3RlbXBsYXRlLCBzbyBpbmNyZWFzZQotCQkgICB0aGUgcGVyaXN0ZW50IGNvbm5lY3Rpb24gY291bnRlciAqLworCQkgICB0aGUgcGVyc2lzdGVudCBjb25uZWN0aW9uIGNvdW50ZXIgKi8KIAkJYXRvbWljX2luYygmZGVzdC0+cGVyc2lzdGNvbm5zKTsKIAl9CiAKQEAgLTY1Nyw3ICs2NTcsNyBAQAogCQl9CiAJfSBlbHNlIHsKIAkJLyogSXQgaXMgYSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24vdGVtcGxhdGUsIHNvIGRlY3JlYXNlCi0JCSAgIHRoZSBwZXJpc3RlbnQgY29ubmVjdGlvbiBjb3VudGVyICovCisJCSAgIHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gY291bnRlciAqLwogCQlhdG9taWNfZGVjKCZkZXN0LT5wZXJzaXN0Y29ubnMpOwogCX0KIApAQCAtMTA0Niw3ICsxMDQ2LDcgQEAKIAkub3BlbiAgICA9IGlwX3ZzX2Nvbm5fb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLAogCS5sbHNlZWsgID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9uZXQsCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqaXBfdnNfb3JpZ2luX25hbWUodW5zaWduZWQgZmxhZ3MpCkBAIC0xMTE0LDcgKzExMTQsNyBAQAogCS5vcGVuICAgID0gaXBfdnNfY29ubl9zeW5jX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfbmV0LAogfTsKIAogI2VuZGlmCkBAIC0xMjU4LDIyICsxMjU4LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgX19pcF92c19jb25uX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KQordm9pZCBfX25ldF9leGl0IF9faXBfdnNfY29ubl9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAkvKiBmbHVzaCBhbGwgdGhlIGNvbm5lY3Rpb24gZW50cmllcyBmaXJzdCAqLwogCWlwX3ZzX2Nvbm5fZmx1c2gobmV0KTsKIAlwcm9jX25ldF9yZW1vdmUobmV0LCAiaXBfdnNfY29ubiIpOwogCXByb2NfbmV0X3JlbW92ZShuZXQsICJpcF92c19jb25uX3N5bmMiKTsKIH0KLXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXB2c19jb25uX29wcyA9IHsKLQkuaW5pdCA9IF9faXBfdnNfY29ubl9pbml0LAotCS5leGl0ID0gX19pcF92c19jb25uX2NsZWFudXAsCi19OwogCiBpbnQgX19pbml0IGlwX3ZzX2Nvbm5faW5pdCh2b2lkKQogewogCWludCBpZHg7Ci0JaW50IHJldGM7CiAKIAkvKiBDb21wdXRlIHNpemUgYW5kIG1hc2sgKi8KIAlpcF92c19jb25uX3RhYl9zaXplID0gMSA8PCBpcF92c19jb25uX3RhYl9iaXRzOwpAQCAtMTMwOSwxNyArMTMwNCwxNCBAQAogCQlyd2xvY2tfaW5pdCgmX19pcF92c19jb25udGJsX2xvY2tfYXJyYXlbaWR4XS5sKTsKIAl9CiAKLQlyZXRjID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXB2c19jb25uX29wcyk7Ci0KIAkvKiBjYWxjdWxhdGUgdGhlIHJhbmRvbSB2YWx1ZSBmb3IgY29ubmVjdGlvbiBoYXNoICovCiAJZ2V0X3JhbmRvbV9ieXRlcygmaXBfdnNfY29ubl9ybmQsIHNpemVvZihpcF92c19jb25uX3JuZCkpOwogCi0JcmV0dXJuIHJldGM7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgaXBfdnNfY29ubl9jbGVhbnVwKHZvaWQpCiB7Ci0JdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHZzX2Nvbm5fb3BzKTsKIAkvKiBSZWxlYXNlIHRoZSBlbXB0eSBjYWNoZSAqLwogCWttZW1fY2FjaGVfZGVzdHJveShpcF92c19jb25uX2NhY2hlcCk7CiAJdmZyZWUoaXBfdnNfY29ubl90YWIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKaW5kZXggMDdhY2NmNi4uYTc0ZGFlNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCkBAIC0xMTEzLDYgKzExMTMsOSBAQAogCQlyZXR1cm4gTkZfQUNDRVBUOwogCiAJbmV0ID0gc2tiX25ldChza2IpOworCWlmICghbmV0X2lwdnMobmV0KS0+ZW5hYmxlKQorCQlyZXR1cm4gTkZfQUNDRVBUOworCiAJaXBfdnNfZmlsbF9pcGhkcihhZiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksICZpcGgpOwogI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CiAJaWYgKGFmID09IEFGX0lORVQ2KSB7CkBAIC0xMzQzLDYgKzEzNDYsNyBAQAogCQlyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi8KIAogCW5ldCA9IHNrYl9uZXQoc2tiKTsKKwogCXBkID0gaXBfdnNfcHJvdG9fZGF0YV9nZXQobmV0LCBjaWgtPnByb3RvY29sKTsKIAlpZiAoIXBkKQogCQlyZXR1cm4gTkZfQUNDRVBUOwpAQCAtMTUyOSw2ICsxNTMzLDExIEBACiAJCQkgICAgICBJUF9WU19EQkdfQUREUihhZiwgJmlwaC5kYWRkciksIGhvb2tudW0pOwogCQlyZXR1cm4gTkZfQUNDRVBUOwogCX0KKwkvKiBpcHZzIGVuYWJsZWQgaW4gdGhpcyBuZXRucyA/ICovCisJbmV0ID0gc2tiX25ldChza2IpOworCWlmICghbmV0X2lwdnMobmV0KS0+ZW5hYmxlKQorCQlyZXR1cm4gTkZfQUNDRVBUOworCiAJaXBfdnNfZmlsbF9pcGhkcihhZiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksICZpcGgpOwogCiAJLyogQmFkLi4uIERvIG5vdCBicmVhayByYXcgc29ja2V0cyAqLwpAQCAtMTU2Miw3ICsxNTcxLDYgQEAKIAkJCWlwX3ZzX2ZpbGxfaXBoZHIoYWYsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCAmaXBoKTsKIAkJfQogCi0JbmV0ID0gc2tiX25ldChza2IpOwogCS8qIFByb3RvY29sIHN1cHBvcnRlZD8gKi8KIAlwZCA9IGlwX3ZzX3Byb3RvX2RhdGFfZ2V0KG5ldCwgaXBoLnByb3RvY29sKTsKIAlpZiAodW5saWtlbHkoIXBkKSkKQEAgLTE1ODgsNyArMTU5Niw2IEBACiAJfQogCiAJSVBfVlNfREJHX1BLVCgxMSwgYWYsIHBwLCBza2IsIDAsICJJbmNvbWluZyBwYWNrZXQiKTsKLQluZXQgPSBza2JfbmV0KHNrYik7CiAJaXB2cyA9IG5ldF9pcHZzKG5ldCk7CiAJLyogQ2hlY2sgdGhlIHNlcnZlciBzdGF0dXMgKi8KIAlpZiAoY3AtPmRlc3QgJiYgIShjcC0+ZGVzdC0+ZmxhZ3MgJiBJUF9WU19ERVNUX0ZfQVZBSUxBQkxFKSkgewpAQCAtMTc0MywxMCArMTc1MCwxNiBAQAogCQkgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKIHsKIAlpbnQgcjsKKwlzdHJ1Y3QgbmV0ICpuZXQ7CiAKIAlpZiAoaXBfaGRyKHNrYiktPnByb3RvY29sICE9IElQUFJPVE9fSUNNUCkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAorCS8qIGlwdnMgZW5hYmxlZCBpbiB0aGlzIG5ldG5zID8gKi8KKwluZXQgPSBza2JfbmV0KHNrYik7CisJaWYgKCFuZXRfaXB2cyhuZXQpLT5lbmFibGUpCisJCXJldHVybiBORl9BQ0NFUFQ7CisKIAlyZXR1cm4gaXBfdnNfaW5faWNtcChza2IsICZyLCBob29rbnVtKTsKIH0KIApAQCAtMTc1NywxMCArMTc3MCwxNiBAQAogCQkgICAgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKIHsKIAlpbnQgcjsKKwlzdHJ1Y3QgbmV0ICpuZXQ7CiAKIAlpZiAoaXB2Nl9oZHIoc2tiKS0+bmV4dGhkciAhPSBJUFBST1RPX0lDTVBWNikKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAorCS8qIGlwdnMgZW5hYmxlZCBpbiB0aGlzIG5ldG5zID8gKi8KKwluZXQgPSBza2JfbmV0KHNrYik7CisJaWYgKCFuZXRfaXB2cyhuZXQpLT5lbmFibGUpCisJCXJldHVybiBORl9BQ0NFUFQ7CisKIAlyZXR1cm4gaXBfdnNfaW5faWNtcF92Nihza2IsICZyLCBob29rbnVtKTsKIH0KICNlbmRpZgpAQCAtMTg4NCwxOSArMTkwMyw3MCBAQAogCQlwcl9lcnIoIiVzKCk6IG5vIG1lbW9yeS5cbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCS8qIEhvbGQgdGhlIGJlYXN0IHVudGlsIGEgc2VydmljZSBpcyByZWdpc3RlcmQgKi8KKwlpcHZzLT5lbmFibGUgPSAwOwogCWlwdnMtPm5ldCA9IG5ldDsKIAkvKiBDb3VudGVycyB1c2VkIGZvciBjcmVhdGluZyB1bmlxdWUgbmFtZXMgKi8KIAlpcHZzLT5nZW4gPSBhdG9taWNfcmVhZCgmaXB2c19uZXRuc19jbnQpOwogCWF0b21pY19pbmMoJmlwdnNfbmV0bnNfY250KTsKIAluZXQtPmlwdnMgPSBpcHZzOworCisJaWYgKF9faXBfdnNfZXN0aW1hdG9yX2luaXQobmV0KSA8IDApCisJCWdvdG8gZXN0aW1hdG9yX2ZhaWw7CisKKwlpZiAoX19pcF92c19jb250cm9sX2luaXQobmV0KSA8IDApCisJCWdvdG8gY29udHJvbF9mYWlsOworCisJaWYgKF9faXBfdnNfcHJvdG9jb2xfaW5pdChuZXQpIDwgMCkKKwkJZ290byBwcm90b2NvbF9mYWlsOworCisJaWYgKF9faXBfdnNfYXBwX2luaXQobmV0KSA8IDApCisJCWdvdG8gYXBwX2ZhaWw7CisKKwlpZiAoX19pcF92c19jb25uX2luaXQobmV0KSA8IDApCisJCWdvdG8gY29ubl9mYWlsOworCisJaWYgKF9faXBfdnNfc3luY19pbml0KG5ldCkgPCAwKQorCQlnb3RvIHN5bmNfZmFpbDsKKwogCXByaW50ayhLRVJOX0lORk8gIklQVlM6IENyZWF0aW5nIG5ldG5zIHNpemU9JXp1IGlkPSVkXG4iLAogCQkJIHNpemVvZihzdHJ1Y3QgbmV0bnNfaXB2cyksIGlwdnMtPmdlbik7CiAJcmV0dXJuIDA7CisvKgorICogRXJyb3IgaGFuZGxpbmcKKyAqLworCitzeW5jX2ZhaWw6CisJX19pcF92c19jb25uX2NsZWFudXAobmV0KTsKK2Nvbm5fZmFpbDoKKwlfX2lwX3ZzX2FwcF9jbGVhbnVwKG5ldCk7CithcHBfZmFpbDoKKwlfX2lwX3ZzX3Byb3RvY29sX2NsZWFudXAobmV0KTsKK3Byb3RvY29sX2ZhaWw6CisJX19pcF92c19jb250cm9sX2NsZWFudXAobmV0KTsKK2NvbnRyb2xfZmFpbDoKKwlfX2lwX3ZzX2VzdGltYXRvcl9jbGVhbnVwKG5ldCk7Citlc3RpbWF0b3JfZmFpbDoKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIHZvaWQgX19uZXRfZXhpdCBfX2lwX3ZzX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KQogewotCUlQX1ZTX0RCRygxMCwgImlwdnMgbmV0bnMgJWQgcmVsZWFzZWRcbiIsIG5ldF9pcHZzKG5ldCktPmdlbik7CisJX19pcF92c19zZXJ2aWNlX2NsZWFudXAobmV0KTsJLyogaXBfdnNfZmx1c2goKSB3aXRoIGxvY2tzICovCisJX19pcF92c19jb25uX2NsZWFudXAobmV0KTsKKwlfX2lwX3ZzX2FwcF9jbGVhbnVwKG5ldCk7CisJX19pcF92c19wcm90b2NvbF9jbGVhbnVwKG5ldCk7CisJX19pcF92c19jb250cm9sX2NsZWFudXAobmV0KTsKKwlfX2lwX3ZzX2VzdGltYXRvcl9jbGVhbnVwKG5ldCk7CisJSVBfVlNfREJHKDIsICJpcHZzIG5ldG5zICVkIHJlbGVhc2VkXG4iLCBuZXRfaXB2cyhuZXQpLT5nZW4pOworfQorCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IF9faXBfdnNfZGV2X2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KQoreworCUVudGVyRnVuY3Rpb24oMik7CisJbmV0X2lwdnMobmV0KS0+ZW5hYmxlID0gMDsJLyogRGlzYWJsZSBwYWNrZXQgcmVjZXB0aW9uICovCisJX19pcF92c19zeW5jX2NsZWFudXAobmV0KTsKKwlMZWF2ZUZ1bmN0aW9uKDIpOwogfQogCiBzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlwdnNfY29yZV9vcHMgPSB7CkBAIC0xOTA2LDYgKzE5NzYsMTAgQEAKIAkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmV0bnNfaXB2cyksCiB9OwogCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlwdnNfY29yZV9kZXZfb3BzID0geworCS5leGl0ID0gX19pcF92c19kZXZfY2xlYW51cCwKK307CisKIC8qCiAgKglJbml0aWFsaXplIElQIFZpcnR1YWwgU2VydmVyCiAgKi8KQEAgLTE5MTMsMTAgKzE5ODcsNiBAQAogewogCWludCByZXQ7CiAKLQlyZXQgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHZzX2NvcmVfb3BzKTsJLyogQWxsb2MgaXBfdnMgc3RydWN0ICovCi0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KIAlpcF92c19lc3RpbWF0b3JfaW5pdCgpOwogCXJldCA9IGlwX3ZzX2NvbnRyb2xfaW5pdCgpOwogCWlmIChyZXQgPCAwKSB7CkBAIC0xOTQ0LDE1ICsyMDE0LDI4IEBACiAJCWdvdG8gY2xlYW51cF9jb25uOwogCX0KIAorCXJldCA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdnNfY29yZV9vcHMpOwkvKiBBbGxvYyBpcF92cyBzdHJ1Y3QgKi8KKwlpZiAocmV0IDwgMCkKKwkJZ290byBjbGVhbnVwX3N5bmM7CisKKwlyZXQgPSByZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKCZpcHZzX2NvcmVfZGV2X29wcyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gY2xlYW51cF9zdWI7CisKIAlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhpcF92c19vcHMsIEFSUkFZX1NJWkUoaXBfdnNfb3BzKSk7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJfZXJyKCJjYW4ndCByZWdpc3RlciBob29rcy5cbiIpOwotCQlnb3RvIGNsZWFudXBfc3luYzsKKwkJZ290byBjbGVhbnVwX2RldjsKIAl9CiAKIAlwcl9pbmZvKCJpcHZzIGxvYWRlZC5cbiIpOworCiAJcmV0dXJuIHJldDsKIAorY2xlYW51cF9kZXY6CisJdW5yZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKCZpcHZzX2NvcmVfZGV2X29wcyk7CitjbGVhbnVwX3N1YjoKKwl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdnNfY29yZV9vcHMpOwogY2xlYW51cF9zeW5jOgogCWlwX3ZzX3N5bmNfY2xlYW51cCgpOwogICBjbGVhbnVwX2Nvbm46CkBAIC0xOTY0LDIwICsyMDQ3LDIwIEBACiAJaXBfdnNfY29udHJvbF9jbGVhbnVwKCk7CiAgIGNsZWFudXBfZXN0aW1hdG9yOgogCWlwX3ZzX2VzdGltYXRvcl9jbGVhbnVwKCk7Ci0JdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHZzX2NvcmVfb3BzKTsJLyogZnJlZSBpcF92cyBzdHJ1Y3QgKi8KIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXBfdnNfY2xlYW51cCh2b2lkKQogewogCW5mX3VucmVnaXN0ZXJfaG9va3MoaXBfdnNfb3BzLCBBUlJBWV9TSVpFKGlwX3ZzX29wcykpOworCXVucmVnaXN0ZXJfcGVybmV0X2RldmljZSgmaXB2c19jb3JlX2Rldl9vcHMpOworCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXB2c19jb3JlX29wcyk7CS8qIGZyZWUgaXBfdnMgc3RydWN0ICovCiAJaXBfdnNfc3luY19jbGVhbnVwKCk7CiAJaXBfdnNfY29ubl9jbGVhbnVwKCk7CiAJaXBfdnNfYXBwX2NsZWFudXAoKTsKIAlpcF92c19wcm90b2NvbF9jbGVhbnVwKCk7CiAJaXBfdnNfY29udHJvbF9jbGVhbnVwKCk7CiAJaXBfdnNfZXN0aW1hdG9yX2NsZWFudXAoKTsKLQl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdnNfY29yZV9vcHMpOwkvKiBmcmVlIGlwX3ZzIHN0cnVjdCAqLwogCXByX2luZm8oImlwdnMgdW5sb2FkZWQuXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jCmluZGV4IDMzNzMzYzguLjM3ODkwZjIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMKQEAgLTY5LDYgKzY5LDExIEBACiB9CiAjZW5kaWYKIAorCisvKiAgUHJvdG9zICovCitzdGF0aWMgdm9pZCBfX2lwX3ZzX2RlbF9zZXJ2aWNlKHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMpOworCisKICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgogLyogVGFrZW4gZnJvbSBydDZfZmlsbF9ub2RlKCkgaW4gbmV0L2lwdjYvcm91dGUuYywgaXMgdGhlcmUgYSBiZXR0ZXIgd2F5PyAqLwogc3RhdGljIGludCBfX2lwX3ZzX2FkZHJfaXNfbG9jYWxfdjYoc3RydWN0IG5ldCAqbmV0LApAQCAtMTIxNCw2ICsxMjE5LDggQEAKIAl3cml0ZV91bmxvY2tfYmgoJl9faXBfdnNfc3ZjX2xvY2spOwogCiAJKnN2Y19wID0gc3ZjOworCS8qIE5vdyB0aGVyZSBpcyBhIHNlcnZpY2UgLSBmdWxsIHRocm90dGxlICovCisJaXB2cy0+ZW5hYmxlID0gMTsKIAlyZXR1cm4gMDsKIAogCkBAIC0xNDcyLDYgKzE0NzksODQgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqCURlbGV0ZSBzZXJ2aWNlIGJ5IHtuZXRuc30gaW4gdGhlIHNlcnZpY2UgdGFibGUuCisgKglDYWxsZWQgYnkgX19pcF92c19jbGVhbnVwKCkKKyAqLwordm9pZCBfX2lwX3ZzX3NlcnZpY2VfY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJRW50ZXJGdW5jdGlvbigyKTsKKwkvKiBDaGVjayBmb3IgImZ1bGwiIGFkZHJlc3NlZCBlbnRyaWVzICovCisJbXV0ZXhfbG9jaygmX19pcF92c19tdXRleCk7CisJaXBfdnNfZmx1c2gobmV0KTsKKwltdXRleF91bmxvY2soJl9faXBfdnNfbXV0ZXgpOworCUxlYXZlRnVuY3Rpb24oMik7Cit9CisvKgorICogUmVsZWFzZSBkc3QgaG9sZCBieSBkc3RfY2FjaGUKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitfX2lwX3ZzX2Rldl9yZXNldChzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzcGluX2xvY2tfYmgoJmRlc3QtPmRzdF9sb2NrKTsKKwlpZiAoZGVzdC0+ZHN0X2NhY2hlICYmIGRlc3QtPmRzdF9jYWNoZS0+ZGV2ID09IGRldikgeworCQlJUF9WU19EQkdfQlVGKDMsICJSZXNldCBkZXY6JXMgZGVzdCAlczoldSAsZGVzdC0+cmVmY250PSVkXG4iLAorCQkJICAgICAgZGV2LT5uYW1lLAorCQkJICAgICAgSVBfVlNfREJHX0FERFIoZGVzdC0+YWYsICZkZXN0LT5hZGRyKSwKKwkJCSAgICAgIG50b2hzKGRlc3QtPnBvcnQpLAorCQkJICAgICAgYXRvbWljX3JlYWQoJmRlc3QtPnJlZmNudCkpOworCQlpcF92c19kc3RfcmVzZXQoZGVzdCk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZkZXN0LT5kc3RfbG9jayk7CisKK30KKy8qCisgKiBOZXRkZXYgZXZlbnQgcmVjZWl2ZXIKKyAqIEN1cnJlbnRseSBvbmx5IE5FVERFVl9VTlJFR0lTVEVSIGlzIGhhbmRsZWQsIGkuZS4gaWYgd2UgaG9sZCBhIHJlZmVyZW5jZSB0bworICogYSBkZXZpY2UgdGhhdCBpcyAidW5yZWdpc3RlciIgaXQgbXVzdCBiZSByZWxlYXNlZC4KKyAqLworc3RhdGljIGludCBpcF92c19kc3RfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LAorCQkJICAgIHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHRyOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKKwlzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjOworCXN0cnVjdCBpcF92c19kZXN0ICpkZXN0OworCXVuc2lnbmVkIGludCBpZHg7CisKKwlpZiAoZXZlbnQgIT0gTkVUREVWX1VOUkVHSVNURVIpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKwlJUF9WU19EQkcoMywgIiVzKCkgZGV2PSVzXG4iLCBfX2Z1bmNfXywgZGV2LT5uYW1lKTsKKwlFbnRlckZ1bmN0aW9uKDIpOworCW11dGV4X2xvY2soJl9faXBfdnNfbXV0ZXgpOworCWZvciAoaWR4ID0gMDsgaWR4IDwgSVBfVlNfU1ZDX1RBQl9TSVpFOyBpZHgrKykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN2YywgJmlwX3ZzX3N2Y190YWJsZVtpZHhdLCBzX2xpc3QpIHsKKwkJCWlmIChuZXRfZXEoc3ZjLT5uZXQsIG5ldCkpIHsKKwkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlc3QsICZzdmMtPmRlc3RpbmF0aW9ucywKKwkJCQkJCSAgICBuX2xpc3QpIHsKKwkJCQkJX19pcF92c19kZXZfcmVzZXQoZGVzdCwgZGV2KTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN2YywgJmlwX3ZzX3N2Y19md21fdGFibGVbaWR4XSwgZl9saXN0KSB7CisJCQlpZiAobmV0X2VxKHN2Yy0+bmV0LCBuZXQpKSB7CisJCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXN0LCAmc3ZjLT5kZXN0aW5hdGlvbnMsCisJCQkJCQkgICAgbl9saXN0KSB7CisJCQkJCV9faXBfdnNfZGV2X3Jlc2V0KGRlc3QsIGRldik7CisJCQkJfQorCQkJfQorCisJCX0KKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlc3QsICZuZXRfaXB2cyhuZXQpLT5kZXN0X3RyYXNoLCBuX2xpc3QpIHsKKwkJX19pcF92c19kZXZfcmVzZXQoZGVzdCwgZGV2KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZfX2lwX3ZzX211dGV4KTsKKwlMZWF2ZUZ1bmN0aW9uKDIpOworCXJldHVybiBOT1RJRllfRE9ORTsKK30KIAogLyoKICAqCVplcm8gY291bnRlcnMgaW4gYSBzZXJ2aWNlIG9yIGFsbCBzZXJ2aWNlcwpAQCAtMTk4MSw3ICsyMDY2LDcgQEAKIAkub3BlbiAgICA9IGlwX3ZzX2luZm9fb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLAogCS5sbHNlZWsgID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX25ldCwKIH07CiAKICNlbmRpZgpAQCAtMjAyNCw3ICsyMTA5LDcgQEAKIAkub3BlbiA9IGlwX3ZzX3N0YXRzX3NlcV9vcGVuLAogCS5yZWFkID0gc2VxX3JlYWQsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2VfbmV0LAogfTsKIAogc3RhdGljIGludCBpcF92c19zdGF0c19wZXJjcHVfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKQEAgLTIwOTMsNyArMjE3OCw3IEBACiAJLm9wZW4gPSBpcF92c19zdGF0c19wZXJjcHVfc2VxX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkubGxzZWVrID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZV9uZXQsCiB9OwogI2VuZGlmCiAKQEAgLTMxMjAsNyArMzIwNSw3IEBACiBzdGF0aWMgaW50IGlwX3ZzX2dlbmxfZHVtcF9kYWVtb25zKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IHNrYl9uZXQoc2tiKTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBza2Jfc2tuZXQoc2tiKTsKIAlzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG5ldF9pcHZzKG5ldCk7CiAKIAltdXRleF9sb2NrKCZfX2lwX3ZzX211dGV4KTsKQEAgLTM1ODgsNiArMzY3MywxMCBAQAogCiAjZW5kaWYKIAorc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBpcF92c19kc3Rfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBpcF92c19kc3RfZXZlbnQsCit9OworCiBpbnQgX19uZXRfaW5pdCBfX2lwX3ZzX2NvbnRyb2xfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJaW50IGlkeDsKQEAgLTM2MjYsNyArMzcxNSw3IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLXN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgX19pcF92c19jb250cm9sX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KQordm9pZCBfX25ldF9leGl0IF9faXBfdnNfY29udHJvbF9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG5ldF9pcHZzKG5ldCk7CiAKQEAgLTM2MzksMTEgKzM3MjgsNiBAQAogCWZyZWVfcGVyY3B1KGlwdnMtPnRvdF9zdGF0cy5jcHVzdGF0cyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXB2c19jb250cm9sX29wcyA9IHsKLQkuaW5pdCA9IF9faXBfdnNfY29udHJvbF9pbml0LAotCS5leGl0ID0gX19pcF92c19jb250cm9sX2NsZWFudXAsCi19OwotCiBpbnQgX19pbml0IGlwX3ZzX2NvbnRyb2xfaW5pdCh2b2lkKQogewogCWludCBpZHg7CkBAIC0zNjU3LDMzICszNzQxLDMyIEBACiAJCUlOSVRfTElTVF9IRUFEKCZpcF92c19zdmNfZndtX3RhYmxlW2lkeF0pOwogCX0KIAotCXJldCA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdnNfY29udHJvbF9vcHMpOwotCWlmIChyZXQpIHsKLQkJcHJfZXJyKCJjYW5ub3QgcmVnaXN0ZXIgbmFtZXNwYWNlLlxuIik7Ci0JCWdvdG8gZXJyOwotCX0KLQogCXNtcF93bWIoKTsJLyogRG8gd2UgcmVhbGx5IG5lZWQgaXQgbm93ID8gKi8KIAogCXJldCA9IG5mX3JlZ2lzdGVyX3NvY2tvcHQoJmlwX3ZzX3NvY2tvcHRzKTsKIAlpZiAocmV0KSB7CiAJCXByX2VycigiY2Fubm90IHJlZ2lzdGVyIHNvY2tvcHQuXG4iKTsKLQkJZ290byBlcnJfbmV0OworCQlnb3RvIGVycl9zb2NrOwogCX0KIAogCXJldCA9IGlwX3ZzX2dlbmxfcmVnaXN0ZXIoKTsKIAlpZiAocmV0KSB7CiAJCXByX2VycigiY2Fubm90IHJlZ2lzdGVyIEdlbmVyaWMgTmV0bGluayBpbnRlcmZhY2UuXG4iKTsKLQkJbmZfdW5yZWdpc3Rlcl9zb2Nrb3B0KCZpcF92c19zb2Nrb3B0cyk7Ci0JCWdvdG8gZXJyX25ldDsKKwkJZ290byBlcnJfZ2VubDsKIAl9CiAKKwlyZXQgPSByZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmlwX3ZzX2RzdF9ub3RpZmllcik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX25vdGY7CisKIAlMZWF2ZUZ1bmN0aW9uKDIpOwogCXJldHVybiAwOwogCi1lcnJfbmV0OgotCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXB2c19jb250cm9sX29wcyk7Ci1lcnI6CitlcnJfbm90ZjoKKwlpcF92c19nZW5sX3VucmVnaXN0ZXIoKTsKK2Vycl9nZW5sOgorCW5mX3VucmVnaXN0ZXJfc29ja29wdCgmaXBfdnNfc29ja29wdHMpOworZXJyX3NvY2s6CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzY5MSw3ICszNzc0LDYgQEAKIHZvaWQgaXBfdnNfY29udHJvbF9jbGVhbnVwKHZvaWQpCiB7CiAJRW50ZXJGdW5jdGlvbigyKTsKLQl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdnNfY29udHJvbF9vcHMpOwogCWlwX3ZzX2dlbmxfdW5yZWdpc3RlcigpOwogCW5mX3VucmVnaXN0ZXJfc29ja29wdCgmaXBfdnNfc29ja29wdHMpOwogCUxlYXZlRnVuY3Rpb24oMik7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMKaW5kZXggOGM4NzY2Yy4uNTA4Y2NlOSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYwpAQCAtMTkyLDcgKzE5Miw3IEBACiAJZHN0LT5vdXRicHMgPSAoZS0+b3V0YnBzICsgMHhGKSA+PiA1OwogfQogCi1zdGF0aWMgaW50IF9fbmV0X2luaXQgX19pcF92c19lc3RpbWF0b3JfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitpbnQgX19uZXRfaW5pdCBfX2lwX3ZzX2VzdGltYXRvcl9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG5ldF9pcHZzKG5ldCk7CiAKQEAgLTIwMywyNCArMjAzLDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgX19pcF92c19lc3RpbWF0b3JfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCit2b2lkIF9fbmV0X2V4aXQgX19pcF92c19lc3RpbWF0b3JfY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJZGVsX3RpbWVyX3N5bmMoJm5ldF9pcHZzKG5ldCktPmVzdF90aW1lcik7CiB9Ci1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlwX3ZzX2FwcF9vcHMgPSB7Ci0JLmluaXQgPSBfX2lwX3ZzX2VzdGltYXRvcl9pbml0LAotCS5leGl0ID0gX19pcF92c19lc3RpbWF0b3JfZXhpdCwKLX07CiAKIGludCBfX2luaXQgaXBfdnNfZXN0aW1hdG9yX2luaXQodm9pZCkKIHsKLQlpbnQgcnY7Ci0KLQlydiA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwX3ZzX2FwcF9vcHMpOwotCXJldHVybiBydjsKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBpcF92c19lc3RpbWF0b3JfY2xlYW51cCh2b2lkKQogewotCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXBfdnNfYXBwX29wcyk7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYwppbmRleCBmMjc2ZGY5Li44N2U0MGVhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmMKQEAgLTEzMSw3ICsxMzEsNyBAQAogewogCWxpc3RfZGVsKCZlbi0+bGlzdCk7CiAJLyoKLQkgKiBXZSBkb24ndCBrZnJlZSBkZXN0IGJlY2F1c2UgaXQgaXMgcmVmZXJlZCBlaXRoZXIgYnkgaXRzIHNlcnZpY2UKKwkgKiBXZSBkb24ndCBrZnJlZSBkZXN0IGJlY2F1c2UgaXQgaXMgcmVmZXJyZWQgZWl0aGVyIGJ5IGl0cyBzZXJ2aWNlCiAJICogb3IgdGhlIHRyYXNoIGRlc3QgbGlzdC4KIAkgKi8KIAlhdG9taWNfZGVjKCZlbi0+ZGVzdC0+cmVmY250KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMKaW5kZXggY2IxYzk5MS4uOTBmNjE4YSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogCXdyaXRlX2xvY2soJnNldC0+bG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIGVwLCAmc2V0LT5saXN0LCBsaXN0KSB7CiAJCS8qCi0JCSAqIFdlIGRvbid0IGtmcmVlIGRlc3QgYmVjYXVzZSBpdCBpcyByZWZlcmVkIGVpdGhlcgorCQkgKiBXZSBkb24ndCBrZnJlZSBkZXN0IGJlY2F1c2UgaXQgaXMgcmVmZXJyZWQgZWl0aGVyCiAJCSAqIGJ5IGl0cyBzZXJ2aWNlIG9yIGJ5IHRoZSB0cmFzaCBkZXN0IGxpc3QuCiAJCSAqLwogCQlhdG9taWNfZGVjKCZlLT5kZXN0LT5yZWZjbnQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYwppbmRleCAxNzQ4NGE0Li5lYjg2MDI4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYwpAQCAtMzE2LDcgKzMxNiw3IEBACiAvKgogICogcGVyIG5ldHdvcmsgbmFtZS1zcGFjZSBpbml0CiAgKi8KLXN0YXRpYyBpbnQgX19uZXRfaW5pdCBfX2lwX3ZzX3Byb3RvY29sX2luaXQoc3RydWN0IG5ldCAqbmV0KQoraW50IF9fbmV0X2luaXQgX19pcF92c19wcm90b2NvbF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKICNpZmRlZiBDT05GSUdfSVBfVlNfUFJPVE9fVENQCiAJcmVnaXN0ZXJfaXBfdnNfcHJvdG9fbmV0bnMobmV0LCAmaXBfdnNfcHJvdG9jb2xfdGNwKTsKQEAgLTMzNiw3ICszMzYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX25ldF9leGl0IF9faXBfdnNfcHJvdG9jb2xfY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpCit2b2lkIF9fbmV0X2V4aXQgX19pcF92c19wcm90b2NvbF9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG5ldF9pcHZzKG5ldCk7CiAJc3RydWN0IGlwX3ZzX3Byb3RvX2RhdGEgKnBkOwpAQCAtMzQ5LDExICszNDksNiBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcHZzX3Byb3RvX29wcyA9IHsKLQkuaW5pdCA9IF9faXBfdnNfcHJvdG9jb2xfaW5pdCwKLQkuZXhpdCA9IF9faXBfdnNfcHJvdG9jb2xfY2xlYW51cCwKLX07Ci0KIGludCBfX2luaXQgaXBfdnNfcHJvdG9jb2xfaW5pdCh2b2lkKQogewogCWNoYXIgcHJvdG9jb2xzWzY0XTsKQEAgLTM4Miw3ICszNzcsNiBAQAogCVJFR0lTVEVSX1BST1RPQ09MKCZpcF92c19wcm90b2NvbF9lc3ApOwogI2VuZGlmCiAJcHJfaW5mbygiUmVnaXN0ZXJlZCBwcm90b2NvbHMgKCVzKVxuIiwgJnByb3RvY29sc1syXSk7Ci0JcmV0dXJuIHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdnNfcHJvdG9fb3BzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzkzLDcgKzM4Nyw2IEBACiAJc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcDsKIAlpbnQgaTsKIAotCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXB2c19wcm90b19vcHMpOwogCS8qIHVucmVnaXN0ZXIgYWxsIHRoZSBpcHZzIHByb3RvY29scyAqLwogCWZvciAoaSA9IDA7IGkgPCBJUF9WU19QUk9UT19UQUJfU0laRTsgaSsrKSB7CiAJCXdoaWxlICgocHAgPSBpcF92c19wcm90b190YWJsZVtpXSkgIT0gTlVMTCkKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jCmluZGV4IGIwMjdjY2MuLmQxMmVkNTMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYwpAQCAtNTY2LDcgKzU2Niw3IEBACiAJICogU0hVVERPV04gc2VudCBmcm9tIHRoZSBjbGllbnQsIHdhaXRpbmYgZm9yIFNIVVQgQUNLIGZyb20gdGhlIHNlcnZlcgogCSAqLwogCS8qCi0JICogV2UgcmVjaWV2ZWQgdGhlIGRhdGEgY2h1Y2ssIGtlZXAgdGhlIHN0YXRlIHVuY2hhbmdlZC4gSSBhc3N1bWUKKwkgKiBXZSByZWNlaXZlZCB0aGUgZGF0YSBjaHVjaywga2VlcCB0aGUgc3RhdGUgdW5jaGFuZ2VkLiBJIGFzc3VtZQogCSAqIHRoYXQgc3RpbGwgZGF0YSBjaHVuY2tzICBjYW4gYmUgcmVjZWl2ZWQgYnkgYm90aCB0aGUgcGVlcnMgaW4KIAkgKiBTSFVET1dOIHN0YXRlCiAJICovCkBAIC02MzMsNyArNjMzLDcgQEAKIAkgKiBTSFVURE9XTiBzZW50IGZyb20gdGhlIHNlcnZlciwgd2FpdGluZiBmb3IgU0hVVERPV04gQUNLIGZyb20gY2xpZW50CiAJICovCiAJLyoKLQkgKiBXZSByZWNpZXZlZCB0aGUgZGF0YSBjaHVjaywga2VlcCB0aGUgc3RhdGUgdW5jaGFuZ2VkLiBJIGFzc3VtZQorCSAqIFdlIHJlY2VpdmVkIHRoZSBkYXRhIGNodWNrLCBrZWVwIHRoZSBzdGF0ZSB1bmNoYW5nZWQuIEkgYXNzdW1lCiAJICogdGhhdCBzdGlsbCBkYXRhIGNodW5ja3MgIGNhbiBiZSByZWNlaXZlZCBieSBib3RoIHRoZSBwZWVycyBpbgogCSAqIFNIVURPV04gc3RhdGUKIAkgKi8KQEAgLTcwMSw3ICs3MDEsNyBAQAogCSAqIFNIVVRET1dOIEFDSyBmcm9tIHRoZSBjbGllbnQsIGF3YWl0aW5nIGZvciBTSFVURE9XTiBDT00gZnJvbSBzZXJ2ZXIKIAkgKi8KIAkvKgotCSAqIFdlIHJlY2lldmVkIHRoZSBkYXRhIGNodWNrLCBrZWVwIHRoZSBzdGF0ZSB1bmNoYW5nZWQuIEkgYXNzdW1lCisJICogV2UgcmVjZWl2ZWQgdGhlIGRhdGEgY2h1Y2ssIGtlZXAgdGhlIHN0YXRlIHVuY2hhbmdlZC4gSSBhc3N1bWUKIAkgKiB0aGF0IHN0aWxsIGRhdGEgY2h1bmNrcyAgY2FuIGJlIHJlY2VpdmVkIGJ5IGJvdGggdGhlIHBlZXJzIGluCiAJICogU0hVRE9XTiBzdGF0ZQogCSAqLwpAQCAtNzcxLDcgKzc3MSw3IEBACiAJICogU0hVVERPV04gQUNLIGZyb20gdGhlIHNlcnZlciwgYXdhaXRpbmcgZm9yIFNIVVRET1dOIENPTSBmcm9tIGNsaWVudAogCSAqLwogCS8qCi0JICogV2UgcmVjaWV2ZWQgdGhlIGRhdGEgY2h1Y2ssIGtlZXAgdGhlIHN0YXRlIHVuY2hhbmdlZC4gSSBhc3N1bWUKKwkgKiBXZSByZWNlaXZlZCB0aGUgZGF0YSBjaHVjaywga2VlcCB0aGUgc3RhdGUgdW5jaGFuZ2VkLiBJIGFzc3VtZQogCSAqIHRoYXQgc3RpbGwgZGF0YSBjaHVuY2tzICBjYW4gYmUgcmVjZWl2ZWQgYnkgYm90aCB0aGUgcGVlcnMgaW4KIAkgKiBTSFVET1dOIHN0YXRlCiAJICovCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYwppbmRleCAzZTc5NjFlLi5lMjkyZTViIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKQEAgLTEzMDMsMTMgKzEzMDMsMTggQEAKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwogCWludCByZXN1bHQ7CiAKLQkvKiBGaXJzdCBjcmVhdGUgYSBzb2NrZXQgKi8KLQlyZXN1bHQgPSBfX3NvY2tfY3JlYXRlKG5ldCwgUEZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFAsICZzb2NrLCAxKTsKKwkvKiBGaXJzdCBjcmVhdGUgYSBzb2NrZXQgbW92ZSBpdCB0byByaWdodCBuYW1lIHNwYWNlIGxhdGVyICovCisJcmVzdWx0ID0gc29ja19jcmVhdGVfa2VybihQRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCwgJnNvY2spOwogCWlmIChyZXN1bHQgPCAwKSB7CiAJCXByX2VycigiRXJyb3IgZHVyaW5nIGNyZWF0aW9uIG9mIHNvY2tldDsgdGVybWluYXRpbmdcbiIpOwogCQlyZXR1cm4gRVJSX1BUUihyZXN1bHQpOwogCX0KLQorCS8qCisJICogS2VybmVsIHNvY2tldHMgdGhhdCBhcmUgYSBwYXJ0IG9mIGEgbmFtZXNwYWNlLCBzaG91bGQgbm90CisJICogaG9sZCBhIHJlZmVyZW5jZSB0byBhIG5hbWVzcGFjZSBpbiBvcmRlciB0byBhbGxvdyB0byBzdG9wIGl0LgorCSAqIEFmdGVyIHNrX2NoYW5nZV9uZXQgc2hvdWxkIGJlIHJlbGVhc2VkIHVzaW5nIHNrX3JlbGVhc2Vfa2VybmVsLgorCSAqLworCXNrX2NoYW5nZV9uZXQoc29jay0+c2ssIG5ldCk7CiAJcmVzdWx0ID0gc2V0X21jYXN0X2lmKHNvY2stPnNrLCBpcHZzLT5tYXN0ZXJfbWNhc3RfaWZuKTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlwcl9lcnIoIkVycm9yIHNldHRpbmcgb3V0Ym91bmQgbWNhc3QgaW50ZXJmYWNlXG4iKTsKQEAgLTEzMzQsOCArMTMzOSw4IEBACiAKIAlyZXR1cm4gc29jazsKIAotICBlcnJvcjoKLQlzb2NrX3JlbGVhc2Uoc29jayk7CitlcnJvcjoKKwlza19yZWxlYXNlX2tlcm5lbChzb2NrLT5zayk7CiAJcmV0dXJuIEVSUl9QVFIocmVzdWx0KTsKIH0KIApAQCAtMTM1MCwxMiArMTM1NSwxNyBAQAogCWludCByZXN1bHQ7CiAKIAkvKiBGaXJzdCBjcmVhdGUgYSBzb2NrZXQgKi8KLQlyZXN1bHQgPSBfX3NvY2tfY3JlYXRlKG5ldCwgUEZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFAsICZzb2NrLCAxKTsKKwlyZXN1bHQgPSBzb2NrX2NyZWF0ZV9rZXJuKFBGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQLCAmc29jayk7CiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJcHJfZXJyKCJFcnJvciBkdXJpbmcgY3JlYXRpb24gb2Ygc29ja2V0OyB0ZXJtaW5hdGluZ1xuIik7CiAJCXJldHVybiBFUlJfUFRSKHJlc3VsdCk7CiAJfQotCisJLyoKKwkgKiBLZXJuZWwgc29ja2V0cyB0aGF0IGFyZSBhIHBhcnQgb2YgYSBuYW1lc3BhY2UsIHNob3VsZCBub3QKKwkgKiBob2xkIGEgcmVmZXJlbmNlIHRvIGEgbmFtZXNwYWNlIGluIG9yZGVyIHRvIGFsbG93IHRvIHN0b3AgaXQuCisJICogQWZ0ZXIgc2tfY2hhbmdlX25ldCBzaG91bGQgYmUgcmVsZWFzZWQgdXNpbmcgc2tfcmVsZWFzZV9rZXJuZWwuCisJICovCisJc2tfY2hhbmdlX25ldChzb2NrLT5zaywgbmV0KTsKIAkvKiBpdCBpcyBlcXVpdmFsZW50IHRvIHRoZSBSRVVTRUFERFIgb3B0aW9uIGluIHVzZXItc3BhY2UgKi8KIAlzb2NrLT5zay0+c2tfcmV1c2UgPSAxOwogCkBAIC0xMzc3LDggKzEzODcsOCBAQAogCiAJcmV0dXJuIHNvY2s7CiAKLSAgZXJyb3I6Ci0Jc29ja19yZWxlYXNlKHNvY2spOworZXJyb3I6CisJc2tfcmVsZWFzZV9rZXJuZWwoc29jay0+c2spOwogCXJldHVybiBFUlJfUFRSKHJlc3VsdCk7CiB9CiAKQEAgLTE0NzMsNyArMTQ4Myw3IEBACiAJCWlwX3ZzX3N5bmNfYnVmZl9yZWxlYXNlKHNiKTsKIAogCS8qIHJlbGVhc2UgdGhlIHNlbmRpbmcgbXVsdGljYXN0IHNvY2tldCAqLwotCXNvY2tfcmVsZWFzZSh0aW5mby0+c29jayk7CisJc2tfcmVsZWFzZV9rZXJuZWwodGluZm8tPnNvY2stPnNrKTsKIAlrZnJlZSh0aW5mbyk7CiAKIAlyZXR1cm4gMDsKQEAgLTE1MTMsNyArMTUyMyw3IEBACiAJfQogCiAJLyogcmVsZWFzZSB0aGUgc2VuZGluZyBtdWx0aWNhc3Qgc29ja2V0ICovCi0Jc29ja19yZWxlYXNlKHRpbmZvLT5zb2NrKTsKKwlza19yZWxlYXNlX2tlcm5lbCh0aW5mby0+c29jay0+c2spOwogCWtmcmVlKHRpbmZvLT5idWYpOwogCWtmcmVlKHRpbmZvKTsKIApAQCAtMTYwMSw3ICsxNjExLDcgQEAKIG91dGJ1ZjoKIAlrZnJlZShidWYpOwogb3V0c29ja2V0OgotCXNvY2tfcmVsZWFzZShzb2NrKTsKKwlza19yZWxlYXNlX2tlcm5lbChzb2NrLT5zayk7CiBvdXQ6CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE2MTAsNiArMTYyMCw3IEBACiBpbnQgc3RvcF9zeW5jX3RocmVhZChzdHJ1Y3QgbmV0ICpuZXQsIGludCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG5ldF9pcHZzKG5ldCk7CisJaW50IHJldGMgPSAtRUlOVkFMOwogCiAJSVBfVlNfREJHKDcsICIlcygpOiBwaWQgJWRcbiIsIF9fZnVuY19fLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CiAKQEAgLTE2MjksNyArMTY0MCw3IEBACiAJCXNwaW5fbG9ja19iaCgmaXB2cy0+c3luY19sb2NrKTsKIAkJaXB2cy0+c3luY19zdGF0ZSAmPSB+SVBfVlNfU1RBVEVfTUFTVEVSOwogCQlzcGluX3VubG9ja19iaCgmaXB2cy0+c3luY19sb2NrKTsKLQkJa3RocmVhZF9zdG9wKGlwdnMtPm1hc3Rlcl90aHJlYWQpOworCQlyZXRjID0ga3RocmVhZF9zdG9wKGlwdnMtPm1hc3Rlcl90aHJlYWQpOwogCQlpcHZzLT5tYXN0ZXJfdGhyZWFkID0gTlVMTDsKIAl9IGVsc2UgaWYgKHN0YXRlID09IElQX1ZTX1NUQVRFX0JBQ0tVUCkgewogCQlpZiAoIWlwdnMtPmJhY2t1cF90aHJlYWQpCkBAIC0xNjM5LDIyICsxNjUwLDIwIEBACiAJCQl0YXNrX3BpZF9ucihpcHZzLT5iYWNrdXBfdGhyZWFkKSk7CiAKIAkJaXB2cy0+c3luY19zdGF0ZSAmPSB+SVBfVlNfU1RBVEVfQkFDS1VQOwotCQlrdGhyZWFkX3N0b3AoaXB2cy0+YmFja3VwX3RocmVhZCk7CisJCXJldGMgPSBrdGhyZWFkX3N0b3AoaXB2cy0+YmFja3VwX3RocmVhZCk7CiAJCWlwdnMtPmJhY2t1cF90aHJlYWQgPSBOVUxMOwotCX0gZWxzZSB7Ci0JCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIGRlY3JlYXNlIHRoZSBtb2R1bGUgdXNlIGNvdW50ICovCiAJaXBfdnNfdXNlX2NvdW50X2RlYygpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldGM7CiB9CiAKIC8qCiAgKiBJbml0aWFsaXplIGRhdGEgc3RydWN0IGZvciBlYWNoIG5ldG5zCiAgKi8KLXN0YXRpYyBpbnQgX19uZXRfaW5pdCBfX2lwX3ZzX3N5bmNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitpbnQgX19uZXRfaW5pdCBfX2lwX3ZzX3N5bmNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBuZXRfaXB2cyhuZXQpOwogCkBAIC0xNjY4LDI0ICsxNjc3LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9faXBfdnNfc3luY19jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCkKK3ZvaWQgX19pcF92c19zeW5jX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KQogewotCXN0b3Bfc3luY190aHJlYWQobmV0LCBJUF9WU19TVEFURV9NQVNURVIpOwotCXN0b3Bfc3luY190aHJlYWQobmV0LCBJUF9WU19TVEFURV9CQUNLVVApOworCWludCByZXRjOworCisJcmV0YyA9IHN0b3Bfc3luY190aHJlYWQobmV0LCBJUF9WU19TVEFURV9NQVNURVIpOworCWlmIChyZXRjICYmIHJldGMgIT0gLUVTUkNIKQorCQlwcl9lcnIoIkZhaWxlZCB0byBzdG9wIE1hc3RlciBEYWVtb25cbiIpOworCisJcmV0YyA9IHN0b3Bfc3luY190aHJlYWQobmV0LCBJUF9WU19TVEFURV9CQUNLVVApOworCWlmIChyZXRjICYmIHJldGMgIT0gLUVTUkNIKQorCQlwcl9lcnIoIkZhaWxlZCB0byBzdG9wIEJhY2t1cCBEYWVtb25cbiIpOwogfQogCi1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlwdnNfc3luY19vcHMgPSB7Ci0JLmluaXQgPSBfX2lwX3ZzX3N5bmNfaW5pdCwKLQkuZXhpdCA9IF9faXBfdnNfc3luY19jbGVhbnVwLAotfTsKLQotCiBpbnQgX19pbml0IGlwX3ZzX3N5bmNfaW5pdCh2b2lkKQogewotCXJldHVybiByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHZzX3N5bmNfb3BzKTsKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBpcF92c19zeW5jX2NsZWFudXAodm9pZCkKIHsKLQl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdnNfc3luY19vcHMpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCmluZGV4IDk0MTI4NmMuLjJlMWMxMWYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKQEAgLTQ1Myw3ICs0NTMsNyBAQAogCSAgIFJFSkVDVCB3aWxsIGdpdmUgc3B1cmlvdXMgd2FybmluZ3MgaGVyZS4gKi8KIAkvKiBORl9DVF9BU1NFUlQoYXRvbWljX3JlYWQoJmN0LT5jdF9nZW5lcmFsLnVzZSkgPT0gMSk7ICovCiAKLQkvKiBObyBleHRlcm5hbCByZWZlcmVuY2VzIG1lYW5zIG5vb25lIGVsc2UgY291bGQgaGF2ZQorCS8qIE5vIGV4dGVybmFsIHJlZmVyZW5jZXMgbWVhbnMgbm8gb25lIGVsc2UgY291bGQgaGF2ZQogCSAgIGNvbmZpcm1lZCB1cy4gKi8KIAlORl9DVF9BU1NFUlQoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkpOwogCXByX2RlYnVnKCJDb25maXJtaW5nIGNvbm50cmFjayAlcFxuIiwgY3QpOwpAQCAtOTAxLDcgKzkwMSw3IEBACiAJcmV0ID0gbDNwcm90by0+Z2V0X2w0cHJvdG8oc2tiLCBza2JfbmV0d29ya19vZmZzZXQoc2tiKSwKIAkJCQkgICAmZGF0YW9mZiwgJnByb3RvbnVtKTsKIAlpZiAocmV0IDw9IDApIHsKLQkJcHJfZGVidWcoIm5vdCBwcmVwYXJlZCB0byB0cmFjayB5ZXQgb3IgZXJyb3Igb2NjdXJlZFxuIik7CisJCXByX2RlYnVnKCJub3QgcHJlcGFyZWQgdG8gdHJhY2sgeWV0IG9yIGVycm9yIG9jY3VycmVkXG4iKTsKIAkJTkZfQ1RfU1RBVF9JTkNfQVRPTUlDKG5ldCwgZXJyb3IpOwogCQlORl9DVF9TVEFUX0lOQ19BVE9NSUMobmV0LCBpbnZhbGlkKTsKIAkJcmV0ID0gLXJldDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMKaW5kZXggODY3ODgyMy4uYmNkNWVkNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMKQEAgLTYzMSw3ICs2MzEsNyBAQAogCQlDSEVDS19CT1VORChicywgMik7CiAJCWNvdW50ID0gKmJzLT5jdXIrKzsKIAkJY291bnQgPDw9IDg7Ci0JCWNvdW50ID0gKmJzLT5jdXIrKzsKKwkJY291bnQgKz0gKmJzLT5jdXIrKzsKIAkJYnJlYWs7CiAJY2FzZSBTRU1JOgogCQlCWVRFX0FMSUdOKGJzKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMKaW5kZXggNTMzYTE4My4uMThiMmNlNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMKQEAgLTczMSwxMCArNzMxLDEwIEBACiAKIAkJbWVtc2V0KCZmbDIsIDAsIHNpemVvZihmbDIpKTsKIAkJZmwyLmRhZGRyID0gZHN0LT5pcDsKLQkJaWYgKCFhZmluZm8tPnJvdXRlKChzdHJ1Y3QgZHN0X2VudHJ5ICoqKSZydDEsCi0JCQkJICAgZmxvd2k0X3RvX2Zsb3dpKCZmbDEpKSkgewotCQkJaWYgKCFhZmluZm8tPnJvdXRlKChzdHJ1Y3QgZHN0X2VudHJ5ICoqKSZydDIsCi0JCQkJCSAgIGZsb3dpNF90b19mbG93aSgmZmwyKSkpIHsKKwkJaWYgKCFhZmluZm8tPnJvdXRlKCZpbml0X25ldCwgKHN0cnVjdCBkc3RfZW50cnkgKiopJnJ0MSwKKwkJCQkgICBmbG93aTRfdG9fZmxvd2koJmZsMSksIGZhbHNlKSkgeworCQkJaWYgKCFhZmluZm8tPnJvdXRlKCZpbml0X25ldCwgKHN0cnVjdCBkc3RfZW50cnkgKiopJnJ0MiwKKwkJCQkJICAgZmxvd2k0X3RvX2Zsb3dpKCZmbDIpLCBmYWxzZSkpIHsKIAkJCQlpZiAocnQxLT5ydF9nYXRld2F5ID09IHJ0Mi0+cnRfZ2F0ZXdheSAmJgogCQkJCSAgICBydDEtPmRzdC5kZXYgID09IHJ0Mi0+ZHN0LmRldikKIAkJCQkJcmV0ID0gMTsKQEAgLTc1NSwxMCArNzU1LDEwIEBACiAKIAkJbWVtc2V0KCZmbDIsIDAsIHNpemVvZihmbDIpKTsKIAkJaXB2Nl9hZGRyX2NvcHkoJmZsMi5kYWRkciwgJmRzdC0+aW42KTsKLQkJaWYgKCFhZmluZm8tPnJvdXRlKChzdHJ1Y3QgZHN0X2VudHJ5ICoqKSZydDEsCi0JCQkJICAgZmxvd2k2X3RvX2Zsb3dpKCZmbDEpKSkgewotCQkJaWYgKCFhZmluZm8tPnJvdXRlKChzdHJ1Y3QgZHN0X2VudHJ5ICoqKSZydDIsCi0JCQkJCSAgIGZsb3dpNl90b19mbG93aSgmZmwyKSkpIHsKKwkJaWYgKCFhZmluZm8tPnJvdXRlKCZpbml0X25ldCwgKHN0cnVjdCBkc3RfZW50cnkgKiopJnJ0MSwKKwkJCQkgICBmbG93aTZfdG9fZmxvd2koJmZsMSksIGZhbHNlKSkgeworCQkJaWYgKCFhZmluZm8tPnJvdXRlKCZpbml0X25ldCwgKHN0cnVjdCBkc3RfZW50cnkgKiopJnJ0MiwKKwkJCQkJICAgZmxvd2k2X3RvX2Zsb3dpKCZmbDIpLCBmYWxzZSkpIHsKIAkJCQlpZiAoIW1lbWNtcCgmcnQxLT5ydDZpX2dhdGV3YXksICZydDItPnJ0NmlfZ2F0ZXdheSwKIAkJCQkJICAgIHNpemVvZihydDEtPnJ0NmlfZ2F0ZXdheSkpICYmCiAJCQkJICAgIHJ0MS0+ZHN0LmRldiA9PSBydDItPmRzdC5kZXYpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKaW5kZXggMzBiZjhhMS4uNDgyZTkwYyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwpAQCAtMTMzNCw2ICsxMzM0LDcgQEAKIAlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAJaW50IGVyciA9IC1FSU5WQUw7CiAJc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjsKKwlzdHJ1Y3QgbmZfY29ubl90c3RhbXAgKnRzdGFtcDsKIAogCWN0ID0gbmZfY29ubnRyYWNrX2FsbG9jKG5ldCwgem9uZSwgb3R1cGxlLCBydHVwbGUsIEdGUF9BVE9NSUMpOwogCWlmIChJU19FUlIoY3QpKQpAQCAtMTQ1MSw2ICsxNDUyLDkgQEAKIAkJX19zZXRfYml0KElQU19FWFBFQ1RFRF9CSVQsICZjdC0+c3RhdHVzKTsKIAkJY3QtPm1hc3RlciA9IG1hc3Rlcl9jdDsKIAl9CisJdHN0YW1wID0gbmZfY29ubl90c3RhbXBfZmluZChjdCk7CisJaWYgKHRzdGFtcCkKKwkJdHN0YW1wLT5zdGFydCA9IGt0aW1lX3RvX25zKGt0aW1lX2dldF9yZWFsKCkpOwogCiAJYWRkX3RpbWVyKCZjdC0+dGltZW91dCk7CiAJbmZfY29ubnRyYWNrX2hhc2hfaW5zZXJ0KGN0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2RjY3AuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2RjY3AuYwppbmRleCA5YWU1N2M1Li4yZTY2NGE2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZGNjcC5jCkBAIC05OCw3ICs5OCw3IEBACiAjZGVmaW5lIHNJVglDVF9EQ0NQX0lOVkFMSUQKIAogLyoKLSAqIERDQ1Agc3RhdGUgdHJhbnNpc3Rpb24gdGFibGUKKyAqIERDQ1Agc3RhdGUgdHJhbnNpdGlvbiB0YWJsZQogICoKICAqIFRoZSBhc3N1bXB0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciBUQ1AgdHJhY2tpbmc6CiAgKgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jCmluZGV4IDZmNGVlNzAuLjY3NzJiMTEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMKQEAgLTEwNyw5ICsxMDcsOSBAQAogLyogYWJvcnQgICAgICAgICovIHtzQ0wsIHNDTCwgc0NMLCBzQ0wsIHNDTCwgc0NMLCBzQ0wsIHNDTH0sCiAvKiBzaHV0ZG93biAgICAgKi8ge3NDTCwgc0NMLCBzQ1csIHNDRSwgc1NTLCBzU1MsIHNTUiwgc1NBfSwKIC8qIHNodXRkb3duX2FjayAqLyB7c1NBLCBzQ0wsIHNDVywgc0NFLCBzRVMsIHNTQSwgc1NBLCBzU0F9LAotLyogZXJyb3IgICAgICAgICovIHtzQ0wsIHNDTCwgc0NXLCBzQ0UsIHNFUywgc1NTLCBzU1IsIHNTQX0sLyogQ2FudCBoYXZlIFN0YWxlIGNvb2tpZSovCisvKiBlcnJvciAgICAgICAgKi8ge3NDTCwgc0NMLCBzQ1csIHNDRSwgc0VTLCBzU1MsIHNTUiwgc1NBfSwvKiBDYW4ndCBoYXZlIFN0YWxlIGNvb2tpZSovCiAvKiBjb29raWVfZWNobyAgKi8ge3NDTCwgc0NMLCBzQ0UsIHNDRSwgc0VTLCBzU1MsIHNTUiwgc1NBfSwvKiA1LjIuNCAtIEJpZyBUT0RPICovCi0vKiBjb29raWVfYWNrICAgKi8ge3NDTCwgc0NMLCBzQ1csIHNDRSwgc0VTLCBzU1MsIHNTUiwgc1NBfSwvKiBDYW50IGNvbWUgaW4gb3JpZyBkaXIgKi8KKy8qIGNvb2tpZV9hY2sgICAqLyB7c0NMLCBzQ0wsIHNDVywgc0NFLCBzRVMsIHNTUywgc1NSLCBzU0F9LC8qIENhbid0IGNvbWUgaW4gb3JpZyBkaXIgKi8KIC8qIHNodXRkb3duX2NvbXAqLyB7c0NMLCBzQ0wsIHNDVywgc0NFLCBzRVMsIHNTUywgc1NSLCBzQ0x9CiAJfSwKIAl7CkBAIC0xMjEsNyArMTIxLDcgQEAKIC8qIHNodXRkb3duICAgICAqLyB7c0lWLCBzQ0wsIHNDVywgc0NFLCBzU1IsIHNTUywgc1NSLCBzU0F9LAogLyogc2h1dGRvd25fYWNrICovIHtzSVYsIHNDTCwgc0NXLCBzQ0UsIHNFUywgc1NBLCBzU0EsIHNTQX0sCiAvKiBlcnJvciAgICAgICAgKi8ge3NJViwgc0NMLCBzQ1csIHNDTCwgc0VTLCBzU1MsIHNTUiwgc1NBfSwKLS8qIGNvb2tpZV9lY2hvICAqLyB7c0lWLCBzQ0wsIHNDVywgc0NFLCBzRVMsIHNTUywgc1NSLCBzU0F9LC8qIENhbnQgY29tZSBpbiByZXBseSBkaXIgKi8KKy8qIGNvb2tpZV9lY2hvICAqLyB7c0lWLCBzQ0wsIHNDVywgc0NFLCBzRVMsIHNTUywgc1NSLCBzU0F9LC8qIENhbid0IGNvbWUgaW4gcmVwbHkgZGlyICovCiAvKiBjb29raWVfYWNrICAgKi8ge3NJViwgc0NMLCBzQ1csIHNFUywgc0VTLCBzU1MsIHNTUiwgc1NBfSwKIC8qIHNodXRkb3duX2NvbXAqLyB7c0lWLCBzQ0wsIHNDVywgc0NFLCBzRVMsIHNTUywgc1NSLCBzQ0x9CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYwppbmRleCBiY2Y0N2ViLi4yMzdjYzE5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYwpAQCAtNzA3LDcgKzcwNyw3IEBACiB9CiAKIC8qIExvY2F0ZSBhIFNEUCBoZWFkZXIgKG9wdGlvbmFsbHkgYSBzdWJzdHJpbmcgd2l0aGluIHRoZSBoZWFkZXIgdmFsdWUpLAotICogb3B0aW9uYWxseSBzdG9wcGluZyBhdCB0aGUgZmlyc3Qgb2NjdXJlbmNlIG9mIHRoZSB0ZXJtIGhlYWRlciwgcGFyc2UKKyAqIG9wdGlvbmFsbHkgc3RvcHBpbmcgYXQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIHRlcm0gaGVhZGVyLCBwYXJzZQogICogaXQgYW5kIHJldHVybiB0aGUgb2Zmc2V0IGFuZCBsZW5ndGggb2YgdGhlIGRhdGEgd2UncmUgaW50ZXJlc3RlZCBpbi4KICAqLwogaW50IGN0X3NpcF9nZXRfc2RwX2hlYWRlcihjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKmRwdHIsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMKaW5kZXggNWFiMjJlMi4uNWI0NjZjZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJY29uc3Qgc3RydWN0IG5mX2FmaW5mbyAqYWZpbmZvOwogCWNvbnN0IHN0cnVjdCBuZl9xdWV1ZV9oYW5kbGVyICpxaDsKIAotCS8qIFFVRVVFID09IERST1AgaWYgbm9vbmUgaXMgd2FpdGluZywgdG8gYmUgc2FmZS4gKi8KKwkvKiBRVUVVRSA9PSBEUk9QIGlmIG5vIG9uZSBpcyB3YWl0aW5nLCB0byBiZSBzYWZlLiAqLwogCXJjdV9yZWFkX2xvY2soKTsKIAogCXFoID0gcmN1X2RlcmVmZXJlbmNlKHF1ZXVlX2hhbmRsZXJbcGZdKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYyBiL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYwppbmRleCBhOWFkZjRjLi44YTAyNWE1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKKysrIGIvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCkBAIC00NTUsNiArNDU1LDcgQEAKIAkJdmZyZWUoeHRbYWZdLmNvbXBhdF90YWIpOwogCQl4dFthZl0uY29tcGF0X3RhYiA9IE5VTEw7CiAJCXh0W2FmXS5udW1iZXIgPSAwOworCQl4dFthZl0uY3VyID0gMDsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh4dF9jb21wYXRfZmx1c2hfb2Zmc2V0cyk7CkBAIC00NzMsOCArNDc0LDcgQEAKIAkJZWxzZQogCQkJcmV0dXJuIG1pZCA/IHRtcFttaWQgLSAxXS5kZWx0YSA6IDA7CiAJfQotCVdBUk5fT05fT05DRSgxKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gbGVmdCA/IHRtcFtsZWZ0IC0gMV0uZGVsdGEgOiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoeHRfY29tcGF0X2NhbGNfanVtcCk7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfRFNDUC5jIGIvbmV0L25ldGZpbHRlci94dF9EU0NQLmMKaW5kZXggMGEyMjkxOS4uYWU4MjcxNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9EU0NQLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9EU0NQLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAl1X2ludDhfdCBvcmlnLCBudjsKIAogCW9yaWcgPSBpcHY2X2dldF9kc2ZpZWxkKGlwaCk7Ci0JbnYgICA9IChvcmlnICYgaW5mby0+dG9zX21hc2spIF4gaW5mby0+dG9zX3ZhbHVlOworCW52ICAgPSAob3JpZyAmIH5pbmZvLT50b3NfbWFzaykgXiBpbmZvLT50b3NfdmFsdWU7CiAKIAlpZiAob3JpZyAhPSBudikgewogCQlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9UQ1BNU1MuYyBiL25ldC9uZXRmaWx0ZXIveHRfVENQTVNTLmMKaW5kZXggNmU2YjQ2Yy4uOWU2M2I0MyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9UQ1BNU1MuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X1RDUE1TUy5jCkBAIC0xNjYsNyArMTY2LDcgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJYWkgPSBuZl9nZXRfYWZpbmZvKGZhbWlseSk7CiAJaWYgKGFpICE9IE5VTEwpCi0JCWFpLT5yb3V0ZSgoc3RydWN0IGRzdF9lbnRyeSAqKikmcnQsICZmbCk7CisJCWFpLT5yb3V0ZSgmaW5pdF9uZXQsIChzdHJ1Y3QgZHN0X2VudHJ5ICoqKSZydCwgJmZsLCBmYWxzZSk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAocnQgIT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9hZGRydHlwZS5jIGIvbmV0L25ldGZpbHRlci94dF9hZGRydHlwZS5jCmluZGV4IDIyMjBiODUuLmI3N2QzODMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfYWRkcnR5cGUuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2FkZHJ0eXBlLmMKQEAgLTMyLDExICszMiwzMiBAQAogTU9EVUxFX0FMSUFTKCJpcDZ0X2FkZHJ0eXBlIik7CiAKICNpZiBkZWZpbmVkKENPTkZJR19JUDZfTkZfSVBUQUJMRVMpIHx8IGRlZmluZWQoQ09ORklHX0lQNl9ORl9JUFRBQkxFU19NT0RVTEUpCi1zdGF0aWMgdTMyIHh0X2FkZHJ0eXBlX3J0Nl90b190eXBlKGNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQpCitzdGF0aWMgdTMyIG1hdGNoX2xvb2t1cF9ydDYoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKIHsKKwljb25zdCBzdHJ1Y3QgbmZfYWZpbmZvICphZmluZm87CisJc3RydWN0IGZsb3dpNiBmbG93OworCXN0cnVjdCBydDZfaW5mbyAqcnQ7CiAJdTMyIHJldDsKKwlpbnQgcm91dGVfZXJyOwogCi0JaWYgKCFydCkKKwltZW1zZXQoJmZsb3csIDAsIHNpemVvZihmbG93KSk7CisJaXB2Nl9hZGRyX2NvcHkoJmZsb3cuZGFkZHIsIGFkZHIpOworCWlmIChkZXYpCisJCWZsb3cuZmxvd2k2X29pZiA9IGRldi0+aWZpbmRleDsKKworCXJjdV9yZWFkX2xvY2soKTsKKworCWFmaW5mbyA9IG5mX2dldF9hZmluZm8oTkZQUk9UT19JUFY2KTsKKwlpZiAoYWZpbmZvICE9IE5VTEwpCisJCXJvdXRlX2VyciA9IGFmaW5mby0+cm91dGUobmV0LCAoc3RydWN0IGRzdF9lbnRyeSAqKikmcnQsCisJCQkJCWZsb3dpNl90b19mbG93aSgmZmxvdyksICEhZGV2KTsKKwllbHNlCisJCXJvdXRlX2VyciA9IDE7CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWlmIChyb3V0ZV9lcnIpCiAJCXJldHVybiBYVF9BRERSVFlQRV9VTlJFQUNIQUJMRTsKIAogCWlmIChydC0+cnQ2aV9mbGFncyAmIFJURl9SRUpFQ1QpCkBAIC00OCw2ICs2OSw5IEBACiAJCXJldCB8PSBYVF9BRERSVFlQRV9MT0NBTDsKIAlpZiAocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfQU5ZQ0FTVCkKIAkJcmV0IHw9IFhUX0FERFJUWVBFX0FOWUNBU1Q7CisKKworCWRzdF9yZWxlYXNlKCZydC0+ZHN0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02NSwxOCArODksOCBAQAogCQlyZXR1cm4gZmFsc2U7CiAKIAlpZiAoKFhUX0FERFJUWVBFX0xPQ0FMIHwgWFRfQUREUlRZUEVfQU5ZQ0FTVCB8Ci0JICAgICBYVF9BRERSVFlQRV9VTlJFQUNIQUJMRSkgJiBtYXNrKSB7Ci0JCXN0cnVjdCBydDZfaW5mbyAqcnQ7Ci0JCXUzMiB0eXBlOwotCQlpbnQgaWZpbmRleCA9IGRldiA/IGRldi0+aWZpbmRleCA6IDA7Ci0KLQkJcnQgPSBydDZfbG9va3VwKG5ldCwgYWRkciwgTlVMTCwgaWZpbmRleCwgISFkZXYpOwotCi0JCXR5cGUgPSB4dF9hZGRydHlwZV9ydDZfdG9fdHlwZShydCk7Ci0KLQkJZHN0X3JlbGVhc2UoJnJ0LT5kc3QpOwotCQlyZXR1cm4gISEobWFzayAmIHR5cGUpOwotCX0KKwkgICAgIFhUX0FERFJUWVBFX1VOUkVBQ0hBQkxFKSAmIG1hc2spCisJCXJldHVybiAhIShtYXNrICYgbWF0Y2hfbG9va3VwX3J0NihuZXQsIGRldiwgYWRkcikpOwogCXJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5jIGIvbmV0L25ldGZpbHRlci94dF9jb25udHJhY2suYwppbmRleCAyYzAwODZhLi42MTgwNWQ3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmMKQEAgLTE5NSw3ICsxOTUsNyBAQAogCQlyZXR1cm4gaW5mby0+bWF0Y2hfZmxhZ3MgJiBYVF9DT05OVFJBQ0tfU1RBVEU7CiAJaWYgKChpbmZvLT5tYXRjaF9mbGFncyAmIFhUX0NPTk5UUkFDS19ESVJFQ1RJT04pICYmCiAJICAgIChDVElORk8yRElSKGN0aW5mbykgPT0gSVBfQ1RfRElSX09SSUdJTkFMKSBeCi0JICAgICEhKGluZm8tPmludmVydF9mbGFncyAmIFhUX0NPTk5UUkFDS19ESVJFQ1RJT04pKQorCSAgICAhKGluZm8tPmludmVydF9mbGFncyAmIFhUX0NPTk5UUkFDS19ESVJFQ1RJT04pKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlpZiAoaW5mby0+bWF0Y2hfZmxhZ3MgJiBYVF9DT05OVFJBQ0tfT1JJR1NSQykKQEAgLTI3MiwxMSArMjcyLDYgQEAKIHsKIAlpbnQgcmV0OwogCi0JaWYgKHN0cmNtcChwYXItPnRhYmxlLCAicmF3IikgPT0gMCkgewotCQlwcl9pbmZvKCJzdGF0ZSBpcyB1bmRldGVybWluZWQgYXQgdGhlIHRpbWUgb2YgcmF3IHRhYmxlXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJcmV0ID0gbmZfY3RfbDNwcm90b190cnlfbW9kdWxlX2dldChwYXItPmZhbWlseSk7CiAJaWYgKHJldCA8IDApCiAJCXByX2luZm8oImNhbm5vdCBsb2FkIGNvbm50cmFjayBzdXBwb3J0IGZvciBwcm90bz0ldVxuIiwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfc2V0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3NldC5jCmluZGV4IDA2MWQ0OGMuLmIzYmFiYWUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc2V0LmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9zZXQuYwpAQCAtODEsNiArODEsNyBAQAogCWlmIChpbmZvLT5tYXRjaF9zZXQudS5mbGFnc1tJUFNFVF9ESU1fTUFYLTFdICE9IDApIHsKIAkJcHJfd2FybmluZygiUHJvdG9jb2wgZXJyb3I6IHNldCBtYXRjaCBkaW1lbnNpb24gIgogCQkJICAgImlzIG92ZXIgdGhlIGxpbWl0IVxuIik7CisJCWlwX3NldF9uZm5sX3B1dChpbmZvLT5tYXRjaF9zZXQuaW5kZXgpOwogCQlyZXR1cm4gLUVSQU5HRTsKIAl9CiAKQEAgLTEzNSw2ICsxMzYsOCBAQAogCQlpZiAoaW5kZXggPT0gSVBTRVRfSU5WQUxJRF9JRCkgewogCQkJcHJfd2FybmluZygiQ2Fubm90IGZpbmQgZGVsX3NldCBpbmRleCAldSBhcyB0YXJnZXRcbiIsCiAJCQkJICAgaW5mby0+ZGVsX3NldC5pbmRleCk7CisJCQlpZiAoaW5mby0+YWRkX3NldC5pbmRleCAhPSBJUFNFVF9JTlZBTElEX0lEKQorCQkJCWlwX3NldF9uZm5sX3B1dChpbmZvLT5hZGRfc2V0LmluZGV4KTsKIAkJCXJldHVybiAtRU5PRU5UOwogCQl9CiAJfQpAQCAtMTQyLDYgKzE0NSwxMCBAQAogCSAgICBpbmZvLT5kZWxfc2V0LnUuZmxhZ3NbSVBTRVRfRElNX01BWC0xXSAhPSAwKSB7CiAJCXByX3dhcm5pbmcoIlByb3RvY29sIGVycm9yOiBTRVQgdGFyZ2V0IGRpbWVuc2lvbiAiCiAJCQkgICAiaXMgb3ZlciB0aGUgbGltaXQhXG4iKTsKKwkJaWYgKGluZm8tPmFkZF9zZXQuaW5kZXggIT0gSVBTRVRfSU5WQUxJRF9JRCkKKwkJCWlwX3NldF9uZm5sX3B1dChpbmZvLT5hZGRfc2V0LmluZGV4KTsKKwkJaWYgKGluZm8tPmRlbF9zZXQuaW5kZXggIT0gSVBTRVRfSU5WQUxJRF9JRCkKKwkJCWlwX3NldF9uZm5sX3B1dChpbmZvLT5kZWxfc2V0LmluZGV4KTsKIAkJcmV0dXJuIC1FUkFOR0U7CiAJfQogCkBAIC0xOTIsNiArMTk5LDcgQEAKIAlpZiAoaW5mby0+bWF0Y2hfc2V0LmRpbSA+IElQU0VUX0RJTV9NQVgpIHsKIAkJcHJfd2FybmluZygiUHJvdG9jb2wgZXJyb3I6IHNldCBtYXRjaCBkaW1lbnNpb24gIgogCQkJICAgImlzIG92ZXIgdGhlIGxpbWl0IVxuIik7CisJCWlwX3NldF9uZm5sX3B1dChpbmZvLT5tYXRjaF9zZXQuaW5kZXgpOwogCQlyZXR1cm4gLUVSQU5HRTsKIAl9CiAKQEAgLTIxOSw3ICsyMjcsNyBAQAogCWlmIChpbmZvLT5kZWxfc2V0LmluZGV4ICE9IElQU0VUX0lOVkFMSURfSUQpCiAJCWlwX3NldF9kZWwoaW5mby0+ZGVsX3NldC5pbmRleCwKIAkJCSAgIHNrYiwgcGFyLT5mYW1pbHksCi0JCQkgICBpbmZvLT5hZGRfc2V0LmRpbSwKKwkJCSAgIGluZm8tPmRlbF9zZXQuZGltLAogCQkJICAgaW5mby0+ZGVsX3NldC5mbGFncyk7CiAKIAlyZXR1cm4gWFRfQ09OVElOVUU7CkBAIC0yNDUsMTMgKzI1MywxOSBAQAogCQlpZiAoaW5kZXggPT0gSVBTRVRfSU5WQUxJRF9JRCkgewogCQkJcHJfd2FybmluZygiQ2Fubm90IGZpbmQgZGVsX3NldCBpbmRleCAldSBhcyB0YXJnZXRcbiIsCiAJCQkJICAgaW5mby0+ZGVsX3NldC5pbmRleCk7CisJCQlpZiAoaW5mby0+YWRkX3NldC5pbmRleCAhPSBJUFNFVF9JTlZBTElEX0lEKQorCQkJCWlwX3NldF9uZm5sX3B1dChpbmZvLT5hZGRfc2V0LmluZGV4KTsKIAkJCXJldHVybiAtRU5PRU5UOwogCQl9CiAJfQogCWlmIChpbmZvLT5hZGRfc2V0LmRpbSA+IElQU0VUX0RJTV9NQVggfHwKLQkgICAgaW5mby0+ZGVsX3NldC5mbGFncyA+IElQU0VUX0RJTV9NQVgpIHsKKwkgICAgaW5mby0+ZGVsX3NldC5kaW0gPiBJUFNFVF9ESU1fTUFYKSB7CiAJCXByX3dhcm5pbmcoIlByb3RvY29sIGVycm9yOiBTRVQgdGFyZ2V0IGRpbWVuc2lvbiAiCiAJCQkgICAiaXMgb3ZlciB0aGUgbGltaXQhXG4iKTsKKwkJaWYgKGluZm8tPmFkZF9zZXQuaW5kZXggIT0gSVBTRVRfSU5WQUxJRF9JRCkKKwkJCWlwX3NldF9uZm5sX3B1dChpbmZvLT5hZGRfc2V0LmluZGV4KTsKKwkJaWYgKGluZm8tPmRlbF9zZXQuaW5kZXggIT0gSVBTRVRfSU5WQUxJRF9JRCkKKwkJCWlwX3NldF9uZm5sX3B1dChpbmZvLT5kZWxfc2V0LmluZGV4KTsKIAkJcmV0dXJuIC1FUkFOR0U7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfZG9tYWluaGFzaC5jIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2RvbWFpbmhhc2guYwppbmRleCBkMzdiN2Y4Li5kZTBkOGU0IDEwMDY0NAotLS0gYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfZG9tYWluaGFzaC5jCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9kb21haW5oYXNoLmMKQEAgLTEwOSw3ICsxMDksNyBAQAogICoKICAqIERlc2NyaXB0aW9uOgogICogVGhpcyBpcyB0aGUgaGFzaGluZyBmdW5jdGlvbiBmb3IgdGhlIGRvbWFpbiBoYXNoIHRhYmxlLCBpdCByZXR1cm5zIHRoZQotICogY29ycmVjdCBidWNrZXQgbnVtYmVyIGZvciB0aGUgZG9tYWluLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJpbGUgZm9yCisgKiBjb3JyZWN0IGJ1Y2tldCBudW1iZXIgZm9yIHRoZSBkb21haW4uICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvcgogICogZW5zdXJpbmcgdGhhdCB0aGUgaGFzaCB0YWJsZSBpcyBwcm90ZWN0ZWQgd2l0aCBlaXRoZXIgYSBSQ1UgcmVhZCBsb2NrIG9yIHRoZQogICogaGFzaCB0YWJsZSBsb2NrLgogICoKQEAgLTEzNCw3ICsxMzQsNyBAQAogICoKICAqIERlc2NyaXB0aW9uOgogICogU2VhcmNoZXMgdGhlIGRvbWFpbiBoYXNoIHRhYmxlIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgaGFzaCB0YWJsZQotICogZW50cnkgaWYgZm91bmQsIG90aGVyd2lzZSBOVUxMIGlzIHJldHVybmVkLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJpbGUgZm9yCisgKiBlbnRyeSBpZiBmb3VuZCwgb3RoZXJ3aXNlIE5VTEwgaXMgcmV0dXJuZWQuICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvcgogICogZW5zdXJpbmcgdGhhdCB0aGUgaGFzaCB0YWJsZSBpcyBwcm90ZWN0ZWQgd2l0aCBlaXRoZXIgYSBSQ1UgcmVhZCBsb2NrIG9yIHRoZQogICogaGFzaCB0YWJsZSBsb2NrLgogICoKQEAgLTE2NSw3ICsxNjUsNyBAQAogICogU2VhcmNoZXMgdGhlIGRvbWFpbiBoYXNoIHRhYmxlIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgaGFzaCB0YWJsZQogICogZW50cnkgaWYgYW4gZXhhY3QgbWF0Y2ggaXMgZm91bmQsIGlmIGFuIGV4YWN0IG1hdGNoIGlzIG5vdCBwcmVzZW50IGluIHRoZQogICogaGFzaCB0YWJsZSB0aGVuIHRoZSBkZWZhdWx0IGVudHJ5IGlzIHJldHVybmVkIGlmIHZhbGlkIG90aGVyd2lzZSBOVUxMIGlzCi0gKiByZXR1cm5lZC4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2liaWxlIGVuc3VyaW5nIHRoYXQgdGhlIGhhc2ggdGFibGUgaXMKKyAqIHJldHVybmVkLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBlbnN1cmluZyB0aGF0IHRoZSBoYXNoIHRhYmxlIGlzCiAgKiBwcm90ZWN0ZWQgd2l0aCBlaXRoZXIgYSBSQ1UgcmVhZCBsb2NrIG9yIHRoZSBoYXNoIHRhYmxlIGxvY2suCiAgKgogICovCkBAIC0xOTMsNyArMTkzLDcgQEAKICAqCiAgKiBEZXNjcmlwdGlvbjoKICAqIEdlbmVyYXRlIGFuIGF1ZGl0IHJlY29yZCBmb3IgYWRkaW5nIGEgbmV3IE5ldExhYmVsL0xTTSBtYXBwaW5nIGVudHJ5IHdpdGgKLSAqIHRoZSBnaXZlbiBpbmZvcm1hdGlvbi4gIENhbGxlciBpcyByZXNwb25zaWJpbGUgZm9yIGhvbGRpbmcgdGhlIG5lY2Vzc2FyeQorICogdGhlIGdpdmVuIGluZm9ybWF0aW9uLiAgQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBob2xkaW5nIHRoZSBuZWNlc3NhcnkKICAqIGxvY2tzLgogICoKICAqLwpAQCAtNjA1LDcgKzYwNSw3IEBACiAgKgogICogRGVzY3JpcHRpb246CiAgKiBMb29rIHRocm91Z2ggdGhlIGRvbWFpbiBoYXNoIHRhYmxlIHNlYXJjaGluZyBmb3IgYW4gZW50cnkgdG8gbWF0Y2ggQGRvbWFpbiwKLSAqIHJldHVybiBhIHBvaW50ZXIgdG8gYSBjb3B5IG9mIHRoZSBlbnRyeSBvciBOVUxMLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJpbGUKKyAqIHJldHVybiBhIHBvaW50ZXIgdG8gYSBjb3B5IG9mIHRoZSBlbnRyeSBvciBOVUxMLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZQogICogZm9yIGVuc3VyaW5nIHRoYXQgcmN1X3JlYWRfW3VuXWxvY2soKSBpcyBjYWxsZWQuCiAgKgogICovCmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfbWdtdC5jIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX21nbXQuYwppbmRleCA5OThlODVlLi40ZjI1MWIxIDEwMDY0NAotLS0gYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfbWdtdC5jCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9tZ210LmMKQEAgLTI1OSw3ICsyNTksNyBAQAogICoKICAqIERlc2NyaXB0aW9uOgogICogVGhpcyBmdW5jdGlvbiBpcyBhIGhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBMSVNUQUxMIGFuZCBMSVNUREVGIGNvbW1hbmQKLSAqIGhhbmRsZXJzLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJpbGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFJDVSByZWFkIGxvY2sKKyAqIGhhbmRsZXJzLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgUkNVIHJlYWQgbG9jawogICogaXMgaGVsZC4gIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KICAqCiAgKi8KZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfc2VuZC5jIGIvbmV0L3Jkcy9pYl9zZW5kLmMKaW5kZXggYzQ3YTUxMS4uN2M0ZGNlOCAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pYl9zZW5kLmMKKysrIGIvbmV0L3Jkcy9pYl9zZW5kLmMKQEAgLTM1NSw3ICszNTUsNyBAQAogICoKICAqIENvbmNlcHR1YWxseSwgd2UgaGF2ZSB0d28gY291bnRlcnM6CiAgKiAgLQlzZW5kIGNyZWRpdHM6IHRoaXMgdGVsbHMgdXMgaG93IG1hbnkgV1JzIHdlJ3JlIGFsbG93ZWQKLSAqCXRvIHN1Ym1pdCB3aXRob3V0IG92ZXJydW5pbmcgdGhlIHJlY2lldmVyJ3MgcXVldWUuIEZvcgorICoJdG8gc3VibWl0IHdpdGhvdXQgb3ZlcnJ1bmluZyB0aGUgcmVjZWl2ZXIncyBxdWV1ZS4gRm9yCiAgKgllYWNoIFNFTkQgV1Igd2UgcG9zdCwgd2UgZGVjcmVtZW50IHRoaXMgYnkgb25lLgogICoKICAqICAtCXBvc3RlZCBjcmVkaXRzOiB0aGlzIHRlbGxzIHVzIGhvdyBtYW55IFdScyB3ZSByZWNlbnRseQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pd19jbS5jIGIvbmV0L3Jkcy9pd19jbS5jCmluZGV4IDcxMmNmMmQuLjNhNjBhMTUgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvaXdfY20uYworKysgYi9uZXQvcmRzL2l3X2NtLmMKQEAgLTE4MSw3ICsxODEsNyBAQAogCXVuc2lnbmVkIGludCBzZW5kX3NpemUsIHJlY3Zfc2l6ZTsKIAlpbnQgcmV0OwogCi0JLyogVGhlIG9mZnNldCBvZiAxIGlzIHRvIGFjY29tb2RhdGUgdGhlIGFkZGl0aW9uYWwgQUNLIFdSLiAqLworCS8qIFRoZSBvZmZzZXQgb2YgMSBpcyB0byBhY2NvbW1vZGF0ZSB0aGUgYWRkaXRpb25hbCBBQ0sgV1IuICovCiAJc2VuZF9zaXplID0gbWluX3QodW5zaWduZWQgaW50LCByZHNfaXdkZXYtPm1heF93cnMsIHJkc19pd19zeXNjdGxfbWF4X3NlbmRfd3IgKyAxKTsKIAlyZWN2X3NpemUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHJkc19pd2Rldi0+bWF4X3dycywgcmRzX2l3X3N5c2N0bF9tYXhfcmVjdl93ciArIDEpOwogCXJkc19pd19yaW5nX3Jlc2l6ZShzZW5kX3JpbmcsIHNlbmRfc2l6ZSAtIDEpOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pd19yZG1hLmMgYi9uZXQvcmRzL2l3X3JkbWEuYwppbmRleCA1OTUwOWU5Li42ZGVhYTc3IDEwMDY0NAotLS0gYS9uZXQvcmRzL2l3X3JkbWEuYworKysgYi9uZXQvcmRzL2l3X3JkbWEuYwpAQCAtMTIyLDcgKzEyMiw3IEBACiAjZWxzZQogCQkJLyogRklYTUUgLSBuZWVkcyB0byBjb21wYXJlIHRoZSBsb2NhbCBhbmQgcmVtb3RlCiAJCQkgKiBpcGFkZHIvcG9ydCB0dXBsZSwgYnV0IHRoZSBpcGFkZHIgaXMgdGhlIG9ubHkKLQkJCSAqIGF2YWlsYWJsZSBpbmZvbWF0aW9uIGluIHRoZSByZHNfc29jayAoYXMgdGhlIHJlc3QgYXJlCisJCQkgKiBhdmFpbGFibGUgaW5mb3JtYXRpb24gaW4gdGhlIHJkc19zb2NrIChhcyB0aGUgcmVzdCBhcmUKIAkJCSAqIHplcm8nZWQuICBJdCBkb2Vzbid0IGFwcGVhciB0byBiZSBwcm9wZXJseSBwb3B1bGF0ZWQKIAkJCSAqIGR1cmluZyBjb25uZWN0aW9uIHNldHVwLi4uCiAJCQkgKi8KZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfc2VuZC5jIGIvbmV0L3Jkcy9pd19zZW5kLmMKaW5kZXggNjI4MGVhMC4uNTQ1ZDhlZSAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pd19zZW5kLmMKKysrIGIvbmV0L3Jkcy9pd19zZW5kLmMKQEAgLTMwNyw3ICszMDcsNyBAQAogICoKICAqIENvbmNlcHR1YWxseSwgd2UgaGF2ZSB0d28gY291bnRlcnM6CiAgKiAgLQlzZW5kIGNyZWRpdHM6IHRoaXMgdGVsbHMgdXMgaG93IG1hbnkgV1JzIHdlJ3JlIGFsbG93ZWQKLSAqCXRvIHN1Ym1pdCB3aXRob3V0IG92ZXJydW5pbmcgdGhlIHJlY2lldmVyJ3MgcXVldWUuIEZvcgorICoJdG8gc3VibWl0IHdpdGhvdXQgb3ZlcnJ1bmluZyB0aGUgcmVjZWl2ZXIncyBxdWV1ZS4gRm9yCiAgKgllYWNoIFNFTkQgV1Igd2UgcG9zdCwgd2UgZGVjcmVtZW50IHRoaXMgYnkgb25lLgogICoKICAqICAtCXBvc3RlZCBjcmVkaXRzOiB0aGlzIHRlbGxzIHVzIGhvdyBtYW55IFdScyB3ZSByZWNlbnRseQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zZW5kLmMgYi9uZXQvcmRzL3NlbmQuYwppbmRleCAzNWI5YzJlLi5kNThhZTVmIDEwMDY0NAotLS0gYS9uZXQvcmRzL3NlbmQuYworKysgYi9uZXQvcmRzL3NlbmQuYwpAQCAtMTE2LDcgKzExNiw3IEBACiB9CiAKIC8qCi0gKiBXZSdyZSBtYWtpbmcgdGhlIGNvbmNpb3VzIHRyYWRlLW9mZiBoZXJlIHRvIG9ubHkgc2VuZCBvbmUgbWVzc2FnZQorICogV2UncmUgbWFraW5nIHRoZSBjb25zY2lvdXMgdHJhZGUtb2ZmIGhlcmUgdG8gb25seSBzZW5kIG9uZSBtZXNzYWdlCiAgKiBkb3duIHRoZSBjb25uZWN0aW9uIGF0IGEgdGltZS4KICAqICAgUHJvOgogICogICAgICAtIHR4IHF1ZXVlaW5nIGlzIGEgc2ltcGxlIGZpZm8gbGlzdApkaWZmIC0tZ2l0IGEvbmV0L3Jvc2Uvcm9zZV9yb3V0ZS5jIGIvbmV0L3Jvc2Uvcm9zZV9yb3V0ZS5jCmluZGV4IDA4ZGNkMmYuLjQ3OWNhZTUgMTAwNjQ0Ci0tLSBhL25ldC9yb3NlL3Jvc2Vfcm91dGUuYworKysgYi9uZXQvcm9zZS9yb3NlX3JvdXRlLmMKQEAgLTU4Nyw3ICs1ODcsNyBAQAogCiAvKgogICoJQ2hlY2sgdGhhdCB0aGUgZGV2aWNlIGdpdmVuIGlzIGEgdmFsaWQgQVguMjUgaW50ZXJmYWNlIHRoYXQgaXMgInVwIi4KLSAqIAljYWxsZWQgd2hpdGggUlROTAorICogCWNhbGxlZCB3aXRoIFJUTkwKICAqLwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpyb3NlX2F4MjVfZGV2X2ZpbmQoY2hhciAqZGV2bmFtZSkKIHsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfYXBpLmMgYi9uZXQvc2NoZWQvYWN0X2FwaS5jCmluZGV4IDE1ODczZTEuLjE0YjQyZjQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfYXBpLmMKKysrIGIvbmV0L3NjaGVkL2FjdF9hcGkuYwpAQCAtOTk5LDcgKzk5OSw3IEBACiAJc3dpdGNoIChuLT5ubG1zZ190eXBlKSB7CiAJY2FzZSBSVE1fTkVXQUNUSU9OOgogCQkvKiB3ZSBhcmUgZ29pbmcgdG8gYXNzdW1lIGFsbCBvdGhlciBmbGFncwotCQkgKiBpbXBseSBjcmVhdGUgb25seSBpZiBpdCBkb2VzbnQgZXhpc3QKKwkJICogaW1wbHkgY3JlYXRlIG9ubHkgaWYgaXQgZG9lc24ndCBleGlzdAogCQkgKiBOb3RlIHRoYXQgQ1JFQVRFIHwgRVhDTCBpbXBsaWVzIHRoYXQKIAkJICogYnV0IHNpbmNlIHdlIHdhbnQgYXZvaWQgYW1iaWd1aXR5IChlZyB3aGVuIGZsYWdzCiAJCSAqIGlzIHplcm8pIHRoZW4ganVzdCBzZXQgdGhpcwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9wZWRpdC5jIGIvbmV0L3NjaGVkL2FjdF9wZWRpdC5jCmluZGV4IDUwYzdjMDYuLjdhZmZlOWEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfcGVkaXQuYworKysgYi9uZXQvc2NoZWQvYWN0X3BlZGl0LmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogCQkJfQogCQkJaWYgKG9mZnNldCA+IDAgJiYgb2Zmc2V0ID4gc2tiLT5sZW4pIHsKIAkJCQlwcl9pbmZvKCJ0YyBmaWx0ZXIgcGVkaXQiCi0JCQkJCSIgb2Zmc2V0ICVkIGNhbnQgZXhjZWVkIHBrdCBsZW5ndGggJWRcbiIsCisJCQkJCSIgb2Zmc2V0ICVkIGNhbid0IGV4Y2VlZCBwa3QgbGVuZ3RoICVkXG4iLAogCQkJCSAgICAgICBvZmZzZXQsIHNrYi0+bGVuKTsKIAkJCQlnb3RvIGJhZDsKIAkJCX0KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9lbV9tZXRhLmMgYi9uZXQvc2NoZWQvZW1fbWV0YS5jCmluZGV4IGE0ZGU2N2UuLjQ5MTMwZTggMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9lbV9tZXRhLmMKKysrIGIvbmV0L3NjaGVkL2VtX21ldGEuYwpAQCAtNDcsNyArNDcsNyBAQAogICogCW9uIHRoZSBtZXRhIHR5cGUuIE9idmlvdXNseSwgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBtdXN0IGFsc28KICAqIAliZSBwcm92aWRlZCBmb3Igbm9uLW51bWVyaWMgdHlwZXMuCiAgKgotICogCUFkZGl0aW9uYWx5LCB0eXBlIGRlcGVuZGFudCBtb2RpZmllcnMgc3VjaCBhcyBzaGlmdCBvcGVyYXRvcnMKKyAqIAlBZGRpdGlvbmFsbHksIHR5cGUgZGVwZW5kZW50IG1vZGlmaWVycyBzdWNoIGFzIHNoaWZ0IG9wZXJhdG9ycwogICogCW9yIG1hc2sgbWF5IGJlIGFwcGxpZWQgdG8gZXh0ZW5kIHRoZSBmdW5jdGlvbmFsaXkuIEFzIG9mIG5vdywKICAqIAl0aGUgdmFyaWFibGUgbGVuZ3RoIHR5cGUgc3VwcG9ydHMgc2hpZnRpbmcgdGhlIGJ5dGUgc3RyaW5nIHRvCiAgKiAJdGhlIHJpZ2h0LCBlYXRpbmcgdXAgYW55IG51bWJlciBvZiBvY3RldHMgYW5kIHRodXMgc3VwcG9ydGluZwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9odGIuYyBiL25ldC9zY2hlZC9zY2hfaHRiLmMKaW5kZXggZTE0MjlhOC4uMjliOTQyYyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9odGIuYworKysgYi9uZXQvc2NoZWQvc2NoX2h0Yi5jCkBAIC0xODMsNyArMTgzLDcgQEAKICAqIGZpbHRlcnMgaW4gcWRpc2MgYW5kIGluIGlubmVyIG5vZGVzIChpZiBoaWdoZXIgZmlsdGVyIHBvaW50cyB0byB0aGUgaW5uZXIKICAqIG5vZGUpLiBJZiB3ZSBlbmQgdXAgd2l0aCBjbGFzc2lkIE1BSk9SOjAgd2UgZW5xdWV1ZSB0aGUgc2tiIGludG8gc3BlY2lhbAogICogaW50ZXJuYWwgZmlmbyAoZGlyZWN0KS4gVGhlc2UgcGFja2V0cyB0aGVuIGdvIGRpcmVjdGx5IHRocnUuIElmIHdlIHN0aWxsCi0gKiBoYXZlIG5vIHZhbGlkIGxlYWYgd2UgdHJ5IHRvIHVzZSBNQUpPUjpkZWZhdWx0IGxlYWYuIEl0IHN0aWxsIHVuc3VjY2Vzc2Z1bGwKKyAqIGhhdmUgbm8gdmFsaWQgbGVhZiB3ZSB0cnkgdG8gdXNlIE1BSk9SOmRlZmF1bHQgbGVhZi4gSXQgc3RpbGwgdW5zdWNjZXNzZnVsCiAgKiB0aGVuIGZpbmlzaCBhbmQgcmV0dXJuIGRpcmVjdCBxdWV1ZS4KICAqLwogI2RlZmluZSBIVEJfRElSRUNUICgoc3RydWN0IGh0Yl9jbGFzcyAqKS0xTCkKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfbmV0ZW0uYyBiL25ldC9zY2hlZC9zY2hfbmV0ZW0uYwppbmRleCBlZGJiZjdhLi42OWMzNWY2IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX25ldGVtLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9uZXRlbS5jCkBAIC0xNjAsNyArMTYwLDcgQEAKIAl1MzIgcm5kID0gbmV0X3JhbmRvbSgpOwogCiAJLyoKLQkgKiBNYWtlcyBhIGNvbXBhcmlzaW9uIGJldHdlZW4gcm5kIGFuZCB0aGUgdHJhbnNpdGlvbgorCSAqIE1ha2VzIGEgY29tcGFyaXNvbiBiZXR3ZWVuIHJuZCBhbmQgdGhlIHRyYW5zaXRpb24KIAkgKiBwcm9iYWJpbGl0aWVzIG91dGdvaW5nIGZyb20gdGhlIGN1cnJlbnQgc3RhdGUsIHRoZW4gZGVjaWRlcyB0aGUKIAkgKiBuZXh0IHN0YXRlIGFuZCBpZiB0aGUgbmV4dCBwYWNrZXQgaGFzIHRvIGJlIHRyYW5zbWl0dGVkIG9yIGxvc3QuCiAJICogVGhlIGZvdXIgc3RhdGVzIGNvcnJlc3BvbmQgdG86CkBAIC0yMTIsOSArMjEyLDkgQEAKICAqIEdlbmVyYXRlcyBsb3NzZXMgYWNjb3JkaW5nIHRvIHRoZSBHaWxiZXJ0LUVsbGlvdCBsb3NzIG1vZGVsIG9yCiAgKiBpdHMgc3BlY2lhbCBjYXNlcyAgKEdpbGJlcnQgb3IgU2ltcGxlIEdpbGJlcnQpCiAgKgotICogTWFrZXMgYSBjb21wYXJpc2lvbiBiZXR3ZWVuIHJhbmRvbSBudW1iZXIgYW5kIHRoZSB0cmFuc2l0aW9uCisgKiBNYWtlcyBhIGNvbXBhcmlzb24gYmV0d2VlbiByYW5kb20gbnVtYmVyIGFuZCB0aGUgdHJhbnNpdGlvbgogICogcHJvYmFiaWxpdGllcyBvdXRnb2luZyBmcm9tIHRoZSBjdXJyZW50IHN0YXRlLCB0aGVuIGRlY2lkZXMgdGhlCi0gKiBuZXh0IHN0YXRlLiBBIHNlY29uZCByYW5kb20gbnVtYmVyIGlzIGV4dHJhY3RlZCBhbmQgdGhlIGNvbXBhcmlzaW9uCisgKiBuZXh0IHN0YXRlLiBBIHNlY29uZCByYW5kb20gbnVtYmVyIGlzIGV4dHJhY3RlZCBhbmQgdGhlIGNvbXBhcmlzb24KICAqIHdpdGggdGhlIGxvc3MgcHJvYmFiaWxpdHkgb2YgdGhlIGN1cnJlbnQgc3RhdGUgZGVjaWRlcyBpZiB0aGUgbmV4dAogICogcGFja2V0IHdpbGwgYmUgdHJhbnNtaXR0ZWQgb3IgbG9zdC4KICAqLwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvYXNzb2Npb2xhLmMgYi9uZXQvc2N0cC9hc3NvY2lvbGEuYwppbmRleCA2YjA0Mjg3Li4xYTIxYzU3IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9hc3NvY2lvbGEuYworKysgYi9uZXQvc2N0cC9hc3NvY2lvbGEuYwpAQCAtNTY5LDYgKzU2OSw4IEBACiAJCXNjdHBfYXNzb2Nfc2V0X3ByaW1hcnkoYXNvYywgdHJhbnNwb3J0KTsKIAlpZiAoYXNvYy0+cGVlci5hY3RpdmVfcGF0aCA9PSBwZWVyKQogCQlhc29jLT5wZWVyLmFjdGl2ZV9wYXRoID0gdHJhbnNwb3J0OworCWlmIChhc29jLT5wZWVyLnJldHJhbl9wYXRoID09IHBlZXIpCisJCWFzb2MtPnBlZXIucmV0cmFuX3BhdGggPSB0cmFuc3BvcnQ7CiAJaWYgKGFzb2MtPnBlZXIubGFzdF9kYXRhX2Zyb20gPT0gcGVlcikKIAkJYXNvYy0+cGVlci5sYXN0X2RhdGFfZnJvbSA9IHRyYW5zcG9ydDsKIApAQCAtMTMyMyw2ICsxMzI1LDggQEAKIAogCWlmICh0KQogCQlhc29jLT5wZWVyLnJldHJhbl9wYXRoID0gdDsKKwllbHNlCisJCXQgPSBhc29jLT5wZWVyLnJldHJhbl9wYXRoOwogCiAJU0NUUF9ERUJVR19QUklOVEtfSVBBRERSKCJzY3RwX2Fzc29jX3VwZGF0ZV9yZXRyYW5fcGF0aDphc3NvY2lhdGlvbiIKIAkJCQkgIiAlcCBhZGRyOiAiLApAQCAtMTU5Myw3ICsxNTk3LDcgQEAKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqYWNrOwogCXN0cnVjdCBzY3RwX2NodW5rICp0bXA7CiAKLQkvKiBXZSBjYW4gcmVtb3ZlIGFsbCB0aGUgZW50cmllcyBmcm9tIHRoZSBxdWV1ZSB1cHRvCisJLyogV2UgY2FuIHJlbW92ZSBhbGwgdGhlIGVudHJpZXMgZnJvbSB0aGUgcXVldWUgdXAgdG8KIAkgKiB0aGUgIlBlZXItU2VxdWVuY2UtTnVtYmVyIi4KIAkgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYWNrLCB0bXAsICZhc29jLT5hc2NvbmZfYWNrX2xpc3QsCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9hdXRoLmMgYi9uZXQvc2N0cC9hdXRoLmMKaW5kZXggZGRiYmY3Yy4uODY1ZTY4ZiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvYXV0aC5jCisrKyBiL25ldC9zY3RwL2F1dGguYwpAQCAtMTEzLDcgKzExMyw3IEBACiAJcmV0dXJuIG5ldzsKIH0KIAotLyogRnJlZSB0aGUgc2hhcmVkIGtleSBzdHVjdHVyZSAqLworLyogRnJlZSB0aGUgc2hhcmVkIGtleSBzdHJ1Y3R1cmUgKi8KIHN0YXRpYyB2b2lkIHNjdHBfYXV0aF9zaGtleV9mcmVlKHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKnNoX2tleSkKIHsKIAlCVUdfT04oIWxpc3RfZW1wdHkoJnNoX2tleS0+a2V5X2xpc3QpKTsKQEAgLTEyMiw3ICsxMjIsNyBAQAogCWtmcmVlKHNoX2tleSk7CiB9CiAKLS8qIERlc3RvcnkgdGhlIGVudGlyZSBrZXkgbGlzdC4gIFRoaXMgaXMgZG9uZSBkdXJpbmcgdGhlCisvKiBEZXN0cm95IHRoZSBlbnRpcmUga2V5IGxpc3QuICBUaGlzIGlzIGRvbmUgZHVyaW5nIHRoZQogICogYXNzb2Npb24gYW5kIGVuZHBvaW50IGZyZWUgcHJvY2Vzcy4KICAqLwogdm9pZCBzY3RwX2F1dGhfZGVzdHJveV9rZXlzKHN0cnVjdCBsaXN0X2hlYWQgKmtleXMpCkBAIC0zMjQsNyArMzI0LDcgQEAKIAlpZiAoIXBlZXJfa2V5X3ZlY3RvciB8fCAhbG9jYWxfa2V5X3ZlY3RvcikKIAkJZ290byBvdXQ7CiAKLQkvKiBGaWd1cmUgb3V0IHRoZSBvcmRlciBpbiB3aWNoIHRoZSBrZXlfdmVjdG9ycyB3aWxsIGJlCisJLyogRmlndXJlIG91dCB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGtleV92ZWN0b3JzIHdpbGwgYmUKIAkgKiBhZGRlZCB0byB0aGUgZW5kcG9pbnQgc2hhcmVkIGtleS4KIAkgKiBTQ1RQLUFVVEgsIFNlY3Rpb24gNi4xOgogCSAqICAgVGhpcyBpcyBwZXJmb3JtZWQgYnkgc2VsZWN0aW5nIHRoZSBudW1lcmljYWxseSBzbWFsbGVyIGtleQpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvaW5wdXQuYyBiL25ldC9zY3RwL2lucHV0LmMKaW5kZXggODI2NjYxYi4uNTQzNmM2OSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvaW5wdXQuYworKysgYi9uZXQvc2N0cC9pbnB1dC5jCkBAIC0xMDM0LDcgKzEwMzQsNyBAQAogKiAgICBhc3NvY2lhdGlvbi4KICoKICogVGhpcyBtZWFucyB0aGF0IGFueSBjaHVua3MgdGhhdCBjYW4gaGVscCB1cyBpZGVudGlmeSB0aGUgYXNzb2NpYXRpb24gbmVlZAotKiB0byBiZSBsb29rZWQgYXQgdG8gZmluZCB0aGlzIGFzc29jYXRpb24uCisqIHRvIGJlIGxvb2tlZCBhdCB0byBmaW5kIHRoaXMgYXNzb2NpYXRpb24uCiAqLwogc3RhdGljIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpfX3NjdHBfcmN2X3dhbGtfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICAgY29uc3QgdW5pb24gc2N0cF9hZGRyICpsYWRkciwKZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHB1dC5jIGIvbmV0L3NjdHAvb3V0cHV0LmMKaW5kZXggNjA2MDBkMy4uYjRmM2NmMCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvb3V0cHV0LmMKKysrIGIvbmV0L3NjdHAvb3V0cHV0LmMKQEAgLTUxMCw3ICs1MTAsNyBAQAogCQlzaC0+Y2hlY2tzdW0gPSBzY3RwX2VuZF9ja3N1bShjcmMzMik7CiAJfSBlbHNlIHsKIAkJaWYgKGRzdC0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfU0NUUF9DU1VNKSB7Ci0JCQkvKiBubyBuZWVkIHRvIHNlZWQgcHN1ZWRvIGNoZWNrc3VtIGZvciBTQ1RQICovCisJCQkvKiBubyBuZWVkIHRvIHNlZWQgcHNldWRvIGNoZWNrc3VtIGZvciBTQ1RQICovCiAJCQluc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMOwogCQkJbnNrYi0+Y3N1bV9zdGFydCA9IChza2JfdHJhbnNwb3J0X2hlYWRlcihuc2tiKSAtCiAJCQkgICAgICAgICAgICAgICAgICAgIG5za2ItPmhlYWQpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvb3V0cXVldWUuYyBiL25ldC9zY3RwL291dHF1ZXVlLmMKaW5kZXggMjZkYzAwNS4uYmY5MmE1YiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvb3V0cXVldWUuYworKysgYi9uZXQvc2N0cC9vdXRxdWV1ZS5jCkBAIC0xNzcsMTMgKzE3NywxMyBAQAogICogMykgSWYgdGhlIG1pc3NpbmcgcmVwb3J0IGNvdW50IGZvciBUU04gdCBpcyB0byBiZQogICogaW5jcmVtZW50ZWQgYWNjb3JkaW5nIHRvIFtSRkMyOTYwXSBhbmQKICAqIFtTQ1RQX1NURVdBUlQtMjAwMl0sIGFuZCBDSEFOR0VPVkVSX0FDVElWRSBpcyBzZXQsCi0gKiB0aGVuIHRoZSBzZW5kZXIgTVVTVCBmdXRoZXIgZXhlY3V0ZSBzdGVwcyAzLjEgYW5kCisgKiB0aGVuIHRoZSBzZW5kZXIgTVVTVCBmdXJ0aGVyIGV4ZWN1dGUgc3RlcHMgMy4xIGFuZAogICogMy4yIHRvIGRldGVybWluZSBpZiB0aGUgbWlzc2luZyByZXBvcnQgY291bnQgZm9yCiAgKiBUU04gdCBTSE9VTEQgTk9UIGJlIGluY3JlbWVudGVkLgogICoKICAqIDMuMykgSWYgMy4xIGFuZCAzLjIgZG8gbm90IGRpY3RhdGUgdGhhdCB0aGUgbWlzc2luZwogICogcmVwb3J0IGNvdW50IGZvciB0IHNob3VsZCBub3QgYmUgaW5jcmVtZW50ZWQsIHRoZW4KLSAqIHRoZSBzZW5kZXIgU09VTEQgaW5jcmVtZW50IG1pc3NpbmcgcmVwb3J0IGNvdW50IGZvcgorICogdGhlIHNlbmRlciBTSE9VTEQgaW5jcmVtZW50IG1pc3NpbmcgcmVwb3J0IGNvdW50IGZvcgogICogdCAoYWNjb3JkaW5nIHRvIFtSRkMyOTYwXSBhbmQgW1NDVFBfU1RFV0FSVF8yMDAyXSkuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHNjdHBfY2FjY19za2lwKHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqcHJpbWFyeSwKQEAgLTg0Myw3ICs4NDMsNyBAQAogCQljYXNlIFNDVFBfQ0lEX0VDTl9DV1I6CiAJCWNhc2UgU0NUUF9DSURfQVNDT05GX0FDSzoKIAkJCW9uZV9wYWNrZXQgPSAxOwotCQkJLyogRmFsbCB0aHJvdWdodCAqLworCQkJLyogRmFsbCB0aHJvdWdoICovCiAKIAkJY2FzZSBTQ1RQX0NJRF9TQUNLOgogCQljYXNlIFNDVFBfQ0lEX0hFQVJUQkVBVDoKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYyBiL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYwppbmRleCBiMjFiMjE4Li41Zjg2ZWU0IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKKysrIGIvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCkBAIC00ODIsNyArNDgyLDcgQEAKIAkgKiBJZiB0aGUgdGltZXIgd2FzIGEgaGVhcnRiZWF0LCB3ZSBvbmx5IGluY3JlbWVudCBlcnJvciBjb3VudHMKIAkgKiB3aGVuIHdlIGFscmVhZHkgaGF2ZSBhbiBvdXRzdGFuZGluZyBIRUFSVEJFQVQgdGhhdCBoYXMgbm90CiAJICogYmVlbiBhY2tub3dsZWRnZWQuCi0JICogQWRkaXRpb25hbHksIHNvbWUgdHJhbnBvcnQgc3RhdGVzIGluaGliaXQgZXJyb3IgaW5jcmVtZW50cy4KKwkgKiBBZGRpdGlvbmFsbHksIHNvbWUgdHJhbnBvcnQgc3RhdGVzIGluaGliaXQgZXJyb3IgaW5jcmVtZW50cy4KIAkgKi8KIAlpZiAoIWlzX2hiKSB7CiAJCWFzb2MtPm92ZXJhbGxfZXJyb3JfY291bnQrKzsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKaW5kZXggNGI0ZWI3Yy4uNzY3OTIwOCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKKysrIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKQEAgLTU1MSw3ICs1NTEsNyBAQAogCQkgKgogCQkgKiBUaGlzIG1lYW5zIHRoYXQgaWYgd2Ugb25seSB3YW50IHRvIGFib3J0IGFzc29jaWF0aW9ucwogCQkgKiBpbiBhbiBhdXRoZW50aWNhdGVkIHdheSAoaS5lIEFVVEgrQUJPUlQpLCB0aGVuIHdlCi0JCSAqIGNhbid0IGRlc3Ryb3kgdGhpcyBhc3NvY2lhdGlvbiBqdXN0IGJlY3Vhc2UgdGhlIHBhY2tldAorCQkgKiBjYW4ndCBkZXN0cm95IHRoaXMgYXNzb2NpYXRpb24ganVzdCBiZWNhdXNlIHRoZSBwYWNrZXQKIAkJICogd2FzIG1hbGZvcm1lZC4KIAkJICovCiAJCWlmIChzY3RwX2F1dGhfcmVjdl9jaWQoU0NUUF9DSURfQUJPUlQsIGFzb2MpKQpAQCAtMTU0Niw3ICsxNTQ2LDcgQEAKIH0KIAogLyoKLSAqIEhhbmRsZSBzaW11bHRhbm91cyBJTklULgorICogSGFuZGxlIHNpbXVsdGFuZW91cyBJTklULgogICogVGhpcyBtZWFucyB3ZSBzdGFydGVkIGFuIElOSVQgYW5kIHRoZW4gd2UgZ290IGFuIElOSVQgcmVxdWVzdCBmcm9tCiAgKiBvdXIgcGVlci4KICAqCkBAIC0yMDc5LDcgKzIwNzksNyBAQAogCSAqIFJGQyAyOTYwLCBTZWN0aW9uIDMuMy43CiAJICogICAgSWYgYW4gZW5kcG9pbnQgcmVjZWl2ZXMgYW4gQUJPUlQgd2l0aCBhIGZvcm1hdCBlcnJvciBvciBmb3IgYW4KIAkgKiAgICBhc3NvY2lhdGlvbiB0aGF0IGRvZXNuJ3QgZXhpc3QsIGl0IE1VU1Qgc2lsZW50bHkgZGlzY2FyZCBpdC4KLQkgKiBCZWNhc3VlIHRoZSBsZW5ndGggaXMgImludmFsaWQiLCB3ZSBjYW4ndCByZWFsbHkgZGlzY2FyZCBqdXN0CisJICogQmVjYXVzZSB0aGUgbGVuZ3RoIGlzICJpbnZhbGlkIiwgd2UgY2FuJ3QgcmVhbGx5IGRpc2NhcmQganVzdAogCSAqIGFzIHdlIGRvIG5vdCBrbm93IGl0cyB0cnVlIGxlbmd0aC4gIFNvLCB0byBiZSBzYWZlLCBkaXNjYXJkIHRoZQogCSAqIHBhY2tldC4KIAkgKi8KQEAgLTIxMjAsNyArMjEyMCw3IEBACiAJICogUkZDIDI5NjAsIFNlY3Rpb24gMy4zLjcKIAkgKiAgICBJZiBhbiBlbmRwb2ludCByZWNlaXZlcyBhbiBBQk9SVCB3aXRoIGEgZm9ybWF0IGVycm9yIG9yIGZvciBhbgogCSAqICAgIGFzc29jaWF0aW9uIHRoYXQgZG9lc24ndCBleGlzdCwgaXQgTVVTVCBzaWxlbnRseSBkaXNjYXJkIGl0LgotCSAqIEJlY2FzdWUgdGhlIGxlbmd0aCBpcyAiaW52YWxpZCIsIHdlIGNhbid0IHJlYWxseSBkaXNjYXJkIGp1c3QKKwkgKiBCZWNhdXNlIHRoZSBsZW5ndGggaXMgImludmFsaWQiLCB3ZSBjYW4ndCByZWFsbHkgZGlzY2FyZCBqdXN0CiAJICogYXMgd2UgZG8gbm90IGtub3cgaXRzIHRydWUgbGVuZ3RoLiAgU28sIHRvIGJlIHNhZmUsIGRpc2NhcmQgdGhlCiAJICogcGFja2V0LgogCSAqLwpAQCAtMjM4MSw3ICsyMzgxLDcgQEAKIAkgKiBSRkMgMjk2MCwgU2VjdGlvbiAzLjMuNwogCSAqICAgIElmIGFuIGVuZHBvaW50IHJlY2VpdmVzIGFuIEFCT1JUIHdpdGggYSBmb3JtYXQgZXJyb3Igb3IgZm9yIGFuCiAJICogICAgYXNzb2NpYXRpb24gdGhhdCBkb2Vzbid0IGV4aXN0LCBpdCBNVVNUIHNpbGVudGx5IGRpc2NhcmQgaXQuCi0JICogQmVjYXN1ZSB0aGUgbGVuZ3RoIGlzICJpbnZhbGlkIiwgd2UgY2FuJ3QgcmVhbGx5IGRpc2NhcmQganVzdAorCSAqIEJlY2F1c2UgdGhlIGxlbmd0aCBpcyAiaW52YWxpZCIsIHdlIGNhbid0IHJlYWxseSBkaXNjYXJkIGp1c3QKIAkgKiBhcyB3ZSBkbyBub3Qga25vdyBpdHMgdHJ1ZSBsZW5ndGguICBTbywgdG8gYmUgc2FmZSwgZGlzY2FyZCB0aGUKIAkgKiBwYWNrZXQuCiAJICovCkBAIC0yNDQ4LDcgKzI0NDgsNyBAQAogCSAqIFJGQyAyOTYwLCBTZWN0aW9uIDMuMy43CiAJICogICAgSWYgYW4gZW5kcG9pbnQgcmVjZWl2ZXMgYW4gQUJPUlQgd2l0aCBhIGZvcm1hdCBlcnJvciBvciBmb3IgYW4KIAkgKiAgICBhc3NvY2lhdGlvbiB0aGF0IGRvZXNuJ3QgZXhpc3QsIGl0IE1VU1Qgc2lsZW50bHkgZGlzY2FyZCBpdC4KLQkgKiBCZWNhc3VlIHRoZSBsZW5ndGggaXMgImludmFsaWQiLCB3ZSBjYW4ndCByZWFsbHkgZGlzY2FyZCBqdXN0CisJICogQmVjYXVzZSB0aGUgbGVuZ3RoIGlzICJpbnZhbGlkIiwgd2UgY2FuJ3QgcmVhbGx5IGRpc2NhcmQganVzdAogCSAqIGFzIHdlIGRvIG5vdCBrbm93IGl0cyB0cnVlIGxlbmd0aC4gIFNvLCB0byBiZSBzYWZlLCBkaXNjYXJkIHRoZQogCSAqIHBhY2tldC4KIAkgKi8KQEAgLTM4NTUsNyArMzg1NSw3IEBACiB9CiAKIC8qCi0gKiBTQ1RQLUFVVEggU2VjdGlvbiA2LjMgUmVjZXZpbmcgYXV0aGVudGljYXRlZCBjaHVrbnMKKyAqIFNDVFAtQVVUSCBTZWN0aW9uIDYuMyBSZWNlaXZpbmcgYXV0aGVudGljYXRlZCBjaHVrbnMKICAqCiAgKiAgICBUaGUgcmVjZWl2ZXIgTVVTVCB1c2UgdGhlIEhNQUMgYWxnb3JpdGhtIGluZGljYXRlZCBpbiB0aGUgSE1BQwogICogICAgSWRlbnRpZmllciBmaWVsZC4gIElmIHRoaXMgYWxnb3JpdGhtIHdhcyBub3Qgc3BlY2lmaWVkIGJ5IHRoZQpAQCAtNDIzMSw3ICs0MjMxLDcgQEAKIAkgKgogCSAqIFRoaXMgbWVhbnMgdGhhdCBpZiB3ZSBvbmx5IHdhbnQgdG8gYWJvcnQgYXNzb2NpYXRpb25zCiAJICogaW4gYW4gYXV0aGVudGljYXRlZCB3YXkgKGkuZSBBVVRIK0FCT1JUKSwgdGhlbiB3ZQotCSAqIGNhbid0IGRlc3Ryb3kgdGhpcyBhc3NvY2lhdGlvbiBqdXN0IGJlY3Vhc2UgdGhlIHBhY2tldAorCSAqIGNhbid0IGRlc3Ryb3kgdGhpcyBhc3NvY2lhdGlvbiBqdXN0IGJlY2F1c2UgdGhlIHBhY2tldAogCSAqIHdhcyBtYWxmb3JtZWQuCiAJICovCiAJaWYgKHNjdHBfYXV0aF9yZWN2X2NpZChTQ1RQX0NJRF9BQk9SVCwgYXNvYykpCkBAIC00NDAyLDkgKzQ0MDIsOSBAQAogfQogCiAvKiBIYW5kbGUgcHJvdG9jb2wgdmlvbGF0aW9uIG9mIGFuIGludmFsaWQgY2h1bmsgYnVuZGxpbmcuICBGb3IgZXhhbXBsZSwKLSAqIHdoZW4gd2UgaGF2ZSBhbiBhc3NvY2lhdGlvbiBhbmQgd2UgcmVjaWV2ZSBidW5kbGVkIElOSVQtQUNLLCBvcgorICogd2hlbiB3ZSBoYXZlIGFuIGFzc29jaWF0aW9uIGFuZCB3ZSByZWNlaXZlIGJ1bmRsZWQgSU5JVC1BQ0ssIG9yCiAgKiBTSFVET1dOLUNPTVBMRVRFLCBvdXIgcGVlciBpcyBjbGVhcmx5IHZpb2xhdGlvbmcgdGhlICJNVVNUIE5PVCBidW5kbGUiCi0gKiBzdGF0ZW1lbnQgZnJvbSB0aGUgc3BlY3MuICBBZGRpdGluYWxseSwgdGhlcmUgbWlnaHQgYmUgYW4gYXR0YWNrZXIKKyAqIHN0YXRlbWVudCBmcm9tIHRoZSBzcGVjcy4gIEFkZGl0aW9uYWxseSwgdGhlcmUgbWlnaHQgYmUgYW4gYXR0YWNrZXIKICAqIG9uIHRoZSBwYXRoIGFuZCB3ZSBtYXkgbm90IHdhbnQgdG8gY29udGludWUgdGhpcyBjb21tdW5pY2F0aW9uLgogICovCiBzdGF0aWMgc2N0cF9kaXNwb3NpdGlvbl90IHNjdHBfc2ZfdmlvbGF0aW9uX2NodW5rKApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc29ja2V0LmMgYi9uZXQvc2N0cC9zb2NrZXQuYwppbmRleCAzOTUxYTEwLi5kZWI4MmUzIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zb2NrZXQuYworKysgYi9uZXQvc2N0cC9zb2NrZXQuYwpAQCAtMTE5Myw3ICsxMTkzLDcgQEAKICAqIGFuIGVuZHBvaW50IHRoYXQgaXMgbXVsdGktaG9tZWQuICBNdWNoIGxpa2Ugc2N0cF9iaW5keCgpIHRoaXMgY2FsbAogICogYWxsb3dzIGEgY2FsbGVyIHRvIHNwZWNpZnkgbXVsdGlwbGUgYWRkcmVzc2VzIGF0IHdoaWNoIGEgcGVlciBjYW4gYmUKICAqIHJlYWNoZWQuICBUaGUgd2F5IHRoZSBTQ1RQIHN0YWNrIHVzZXMgdGhlIGxpc3Qgb2YgYWRkcmVzc2VzIHRvIHNldCB1cAotICogdGhlIGFzc29jaWF0aW9uIGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGFudC4gIFRoaXMgZnVuY3Rpb24gb25seQorICogdGhlIGFzc29jaWF0aW9uIGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4gIFRoaXMgZnVuY3Rpb24gb25seQogICogc3BlY2lmaWVzIHRoYXQgdGhlIHN0YWNrIHdpbGwgdHJ5IHRvIG1ha2UgdXNlIG9mIGFsbCB0aGUgYWRkcmVzc2VzIGluCiAgKiB0aGUgbGlzdCB3aGVuIG5lZWRlZC4KICAqCmRpZmYgLS1naXQgYS9uZXQvc2N0cC91bHBldmVudC5jIGIvbmV0L3NjdHAvdWxwZXZlbnQuYwppbmRleCBhYTcyZTg5Li42MWIxZjVhIDEwMDY0NAotLS0gYS9uZXQvc2N0cC91bHBldmVudC5jCisrKyBiL25ldC9zY3RwL3VscGV2ZW50LmMKQEAgLTU1NCw3ICs1NTQsNyBAQAogCW1lbWNweSgmc3NmLT5zc2ZfaW5mbywgJmNodW5rLT5zaW5mbywgc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKTsKIAogCS8qIFBlciBUU1ZXRyBkaXNjdXNzaW9uIHdpdGggUmFuZHkuIEFsbG93IHRoZSBhcHBsaWNhdGlvbiB0bwotCSAqIHJlc3NlbWJsZSBhIGZyYWdtZW50ZWQgbWVzc2FnZS4KKwkgKiByZWFzc2VtYmxlIGEgZnJhZ21lbnRlZCBtZXNzYWdlLgogCSAqLwogCXNzZi0+c3NmX2luZm8uc2luZm9fZmxhZ3MgPSBjaHVuay0+Y2h1bmtfaGRyLT5mbGFnczsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvdWxwcXVldWUuYyBiL25ldC9zY3RwL3VscHF1ZXVlLmMKaW5kZXggMTc2NzgxOC4uZjJkMWRlNyAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvdWxwcXVldWUuYworKysgYi9uZXQvc2N0cC91bHBxdWV1ZS5jCkBAIC0yNDAsNyArMjQwLDcgQEAKIAkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBJZiBmcmFnbWVudCBpbnRlcmxlYXZlIGlzIGVuYWJsZWQsIHdlCi0JCQkgKiBjYW4gcXVldWUgdGhpcyB0byB0aGUgcmVjaWV2ZSBxdWV1ZSBpbnN0ZWFkCisJCQkgKiBjYW4gcXVldWUgdGhpcyB0byB0aGUgcmVjZWl2ZSBxdWV1ZSBpbnN0ZWFkCiAJCQkgKiBvZiB0aGUgbG9iYnkuCiAJCQkgKi8KIAkJCWlmIChzY3RwX3NrKHNrKS0+ZnJhZ19pbnRlcmxlYXZlKQpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IDUyMTI0NDcuLjMxMGQxNmIgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYworKysgYi9uZXQvc29ja2V0LmMKQEAgLTI5ODYsNyArMjk4Niw3IEBACiAKIC8qIFNpbmNlIG9sZCBzdHlsZSBicmlkZ2UgaW9jdGwncyBlbmR1cCB1c2luZyBTSU9DREVWUFJJVkFURQogICogZm9yIHNvbWUgb3BlcmF0aW9uczsgdGhpcyBmb3JjZXMgdXNlIG9mIHRoZSBuZXdlciBicmlkZ2UtdXRpbHMgdGhhdAotICogdXNlIGNvbXBhdGlhYmxlIGlvY3RscworICogdXNlIGNvbXBhdGlibGUgaW9jdGxzCiAgKi8KIHN0YXRpYyBpbnQgb2xkX2JyaWRnZV9pb2N0bChjb21wYXRfdWxvbmdfdCBfX3VzZXIgKmFyZ3ApCiB7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL0tjb25maWcgYi9uZXQvc3VucnBjL0tjb25maWcKaW5kZXggODg3M2ZkOC4uYjIxOThlNiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9LY29uZmlnCisrKyBiL25ldC9zdW5ycGMvS2NvbmZpZwpAQCAtMTgsMTQgKzE4LDEzIEBACiAJICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgUlBDU0VDX0dTU19LUkI1Ci0JdHJpc3RhdGUKKwl0cmlzdGF0ZSAiU2VjdXJlIFJQQzogS2VyYmVyb3MgViBtZWNoYW5pc20iCiAJZGVwZW5kcyBvbiBTVU5SUEMgJiYgQ1JZUFRPCi0JcHJvbXB0ICJTZWN1cmUgUlBDOiBLZXJiZXJvcyBWIG1lY2hhbmlzbSIgaWYgIShORlNfVjQgfHwgTkZTRF9WNCkKKwlkZXBlbmRzIG9uIENSWVBUT19NRDUgJiYgQ1JZUFRPX0RFUyAmJiBDUllQVE9fQ0JDICYmIENSWVBUT19DVFMKKwlkZXBlbmRzIG9uIENSWVBUT19FQ0IgJiYgQ1JZUFRPX0hNQUMgJiYgQ1JZUFRPX1NIQTEgJiYgQ1JZUFRPX0FFUworCWRlcGVuZHMgb24gQ1JZUFRPX0FSQzQKIAlkZWZhdWx0IHkKIAlzZWxlY3QgU1VOUlBDX0dTUwotCXNlbGVjdCBDUllQVE9fTUQ1Ci0Jc2VsZWN0IENSWVBUT19ERVMKLQlzZWxlY3QgQ1JZUFRPX0NCQwogCWhlbHAKIAkgIENob29zZSBZIGhlcmUgdG8gZW5hYmxlIFNlY3VyZSBSUEMgdXNpbmcgdGhlIEtlcmJlcm9zIHZlcnNpb24gNQogCSAgR1NTLUFQSSBtZWNoYW5pc20gKFJGQyAxOTY0KS4KZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYwppbmRleCBmMzkxNGQwLi4zMzliYTY0IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jCkBAIC01MjAsNyArNTIwLDcgQEAKIAkJd2Fybl9nc3NkKCk7CiAJCXRhc2stPnRrX3RpbWVvdXQgPSAxNSpIWjsKIAkJcnBjX3NsZWVwX29uKCZwaXBlX3ZlcnNpb25fcnBjX3dhaXRxdWV1ZSwgdGFzaywgTlVMTCk7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAJaWYgKElTX0VSUihnc3NfbXNnKSkgewogCQllcnIgPSBQVFJfRVJSKGdzc19tc2cpOwpAQCAtNTYzLDEwICs1NjMsMTIgQEAKIAlpZiAoUFRSX0VSUihnc3NfbXNnKSA9PSAtRUFHQUlOKSB7CiAJCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHBpcGVfdmVyc2lvbl93YWl0cXVldWUsCiAJCQkJcGlwZV92ZXJzaW9uID49IDAsIDE1KkhaKTsKKwkJaWYgKHBpcGVfdmVyc2lvbiA8IDApIHsKKwkJCXdhcm5fZ3NzZCgpOworCQkJZXJyID0gLUVBQ0NFUzsKKwkJfQogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7Ci0JCWlmIChwaXBlX3ZlcnNpb24gPCAwKQotCQkJd2Fybl9nc3NkKCk7CiAJCWdvdG8gcmV0cnk7CiAJfQogCWlmIChJU19FUlIoZ3NzX21zZykpIHsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfbWVjaC5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmMKaW5kZXggOTAyMmYwYS4uMGE5YTJlYyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmMKQEAgLTQyNyw3ICs0MjcsNyBAQAogY29udGV4dF9kZXJpdmVfa2V5c19yYzQoc3RydWN0IGtyYjVfY3R4ICpjdHgpCiB7CiAJc3RydWN0IGNyeXB0b19oYXNoICpobWFjOwotCXN0YXRpYyBjb25zdCBjaGFyIHNpZ2tleWNvbnN0YW50W10gPSAic2lnbmF0dXJla2V5IjsKKwljaGFyIHNpZ2tleWNvbnN0YW50W10gPSAic2lnbmF0dXJla2V5IjsKIAlpbnQgc2xlbiA9IHN0cmxlbihzaWdrZXljb25zdGFudCkgKyAxOwkvKiBpbmNsdWRlIG51bGwgdGVybWluYXRvciAqLwogCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMV07CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMKaW5kZXggYmNkYWU3OC4uOGQwZjdkMyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9zdmNhdXRoX2dzcy5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3Mvc3ZjYXV0aF9nc3MuYwpAQCAtMTEwMSw3ICsxMTAxLDcgQEAKIAogCS8qIGNyZWRlbnRpYWwgaXM6CiAJICogICB2ZXJzaW9uKD09MSksIHByb2MoMCwxLDIsMyksIHNlcSwgc2VydmljZSAoMSwyLDMpLCBoYW5kbGUKLQkgKiBhdCBsZWFzdCA1IHUzMnMsIGFuZCBpcyBwcmVjZWVkZWQgYnkgbGVuZ3RoLCBzbyB0aGF0IG1ha2VzIDYuCisJICogYXQgbGVhc3QgNSB1MzJzLCBhbmQgaXMgcHJlY2VkZWQgYnkgbGVuZ3RoLCBzbyB0aGF0IG1ha2VzIDYuCiAJICovCiAKIAlpZiAoYXJndi0+aW92X2xlbiA8IDUgKiA0KQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9jbG50LmMgYi9uZXQvc3VucnBjL2NsbnQuYwppbmRleCBlN2E5NmU0Li44ZDgzZjlkIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2NsbnQuYworKysgYi9uZXQvc3VucnBjL2NsbnQuYwpAQCAtMTUwOCw3ICsxNTA4LDEwIEBACiAJCWlmIChjbG50LT5jbF9jaGF0dHkpCiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBzZXJ2ZXIgJXMgbm90IHJlc3BvbmRpbmcsIHRpbWVkIG91dFxuIiwKIAkJCQljbG50LT5jbF9wcm90bmFtZSwgY2xudC0+Y2xfc2VydmVyKTsKLQkJcnBjX2V4aXQodGFzaywgLUVJTyk7CisJCWlmICh0YXNrLT50a19mbGFncyAmIFJQQ19UQVNLX1RJTUVPVVQpCisJCQlycGNfZXhpdCh0YXNrLCAtRVRJTUVET1VUKTsKKwkJZWxzZQorCQkJcnBjX2V4aXQodGFzaywgLUVJTyk7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydC5jIGIvbmV0L3N1bnJwYy94cHJ0LmMKaW5kZXggOTQ5NGMzNy4uY2U1ZWI2OCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0LmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0LmMKQEAgLTkwNiw2ICs5MDYsNyBAQAogCX0KIAogCWRwcmludGsoIlJQQzogJTV1IHhtaXQgY29tcGxldGVcbiIsIHRhc2stPnRrX3BpZCk7CisJdGFzay0+dGtfZmxhZ3MgfD0gUlBDX1RBU0tfU0VOVDsKIAlzcGluX2xvY2tfYmgoJnhwcnQtPnRyYW5zcG9ydF9sb2NrKTsKIAogCXhwcnQtPm9wcy0+c2V0X3JldHJhbnNfdGltZW91dCh0YXNrKTsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHNvY2suYyBiL25ldC9zdW5ycGMveHBydHNvY2suYwppbmRleCAxZTMzNmEwLi5iZjAwNWQzIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRzb2NrLmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0c29jay5jCkBAIC01MDQsNyArNTA0LDcgQEAKICAqICAgRUFHQUlOOglUaGUgc29ja2V0IHdhcyBibG9ja2VkLCBwbGVhc2UgY2FsbCBhZ2FpbiBsYXRlciB0bwogICoJCWNvbXBsZXRlIHRoZSByZXF1ZXN0CiAgKiBFTk9UQ09OTjoJQ2FsbGVyIG5lZWRzIHRvIGludm9rZSBjb25uZWN0IGxvZ2ljIHRoZW4gY2FsbCBhZ2FpbgotICogICAgb3RoZXI6CVNvbWUgb3RoZXIgZXJyb3Igb2NjdXJlZCwgdGhlIHJlcXVlc3Qgd2FzIG5vdCBzZW50CisgKiAgICBvdGhlcjoJU29tZSBvdGhlciBlcnJvciBvY2N1cnJlZCwgdGhlIHJlcXVlc3Qgd2FzIG5vdCBzZW50CiAgKi8KIHN0YXRpYyBpbnQgeHNfdWRwX3NlbmRfcmVxdWVzdChzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spCiB7CkBAIC01OTAsNyArNTkwLDcgQEAKICAqICAgRUFHQUlOOglUaGUgc29ja2V0IHdhcyBibG9ja2VkLCBwbGVhc2UgY2FsbCBhZ2FpbiBsYXRlciB0bwogICoJCWNvbXBsZXRlIHRoZSByZXF1ZXN0CiAgKiBFTk9UQ09OTjoJQ2FsbGVyIG5lZWRzIHRvIGludm9rZSBjb25uZWN0IGxvZ2ljIHRoZW4gY2FsbCBhZ2FpbgotICogICAgb3RoZXI6CVNvbWUgb3RoZXIgZXJyb3Igb2NjdXJlZCwgdGhlIHJlcXVlc3Qgd2FzIG5vdCBzZW50CisgKiAgICBvdGhlcjoJU29tZSBvdGhlciBlcnJvciBvY2N1cnJlZCwgdGhlIHJlcXVlc3Qgd2FzIG5vdCBzZW50CiAgKgogICogWFhYOiBJbiB0aGUgY2FzZSBvZiBzb2Z0IHRpbWVvdXRzLCBzaG91bGQgd2UgZXZlbnR1YWxseSBnaXZlIHVwCiAgKglpZiBzZW5kbXNnIGlzIG5vdCBhYmxlIHRvIG1ha2UgcHJvZ3Jlc3M/CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9saW5rLmMgYi9uZXQvdGlwYy9saW5rLmMKaW5kZXggNDM2MzlmZi4uZWJmMzM4ZiAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbGluay5jCisrKyBiL25ldC90aXBjL2xpbmsuYwpAQCAtMjQ3MSw3ICsyNDcxLDcgQEAKICAqIEEgcGVuZGluZyBtZXNzYWdlIGJlaW5nIHJlLWFzc2VtYmxlZCBtdXN0IHN0b3JlIGNlcnRhaW4gdmFsdWVzCiAgKiB0byBoYW5kbGUgc3Vic2VxdWVudCBmcmFnbWVudHMgY29ycmVjdGx5LiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucwogICogaGVscCBzdG9yaW5nIHRoZXNlIHZhbHVlcyBpbiB1bnVzZWQsIGF2YWlsYWJsZSBmaWVsZHMgaW4gdGhlCi0gKiBwZW5kaW5nIG1lc3NhZ2UuIFRoaXMgbWFrZXMgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiB1bmVjZXNzYXJ5LgorICogcGVuZGluZyBtZXNzYWdlLiBUaGlzIG1ha2VzIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gdW5uZWNlc3NhcnkuCiAgKi8KIAogc3RhdGljIHZvaWQgc2V0X2xvbmdfbXNnX3NlcW5vKHN0cnVjdCBza19idWZmICpidWYsIHUzMiBzZXFubykKZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuYyBiL25ldC90aXBjL25hbWVfZGlzdHIuYwppbmRleCBjOWZhNmRmLi44MDAyNWExIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMKKysrIGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5jCkBAIC0xNjAsNyArMTYwLDcgQEAKIAogCWJ1ZiA9IG5hbWVkX3ByZXBhcmVfYnVmKFdJVEhEUkFXQUwsIElURU1fU0laRSwgMCk7CiAJaWYgKCFidWYpIHsKLQkJd2FybigiV2l0aGRyYXdsIGRpc3RyaWJ1dGlvbiBmYWlsdXJlXG4iKTsKKwkJd2FybigiV2l0aGRyYXdhbCBkaXN0cmlidXRpb24gZmFpbHVyZVxuIik7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguYwppbmRleCAxNjYzZTFhLi5iMWQ3NWJlIDEwMDY0NAotLS0gYS9uZXQvdW5peC9hZl91bml4LmMKKysrIGIvbmV0L3VuaXgvYWZfdW5peC5jCkBAIC0yMDcsNyArMjA3LDcgQEAKIAkJLyoKIAkJICogVGhpcyBtYXkgbG9vayBsaWtlIGFuIG9mZiBieSBvbmUgZXJyb3IgYnV0IGl0IGlzIGEgYml0IG1vcmUKIAkJICogc3VidGxlLiAxMDggaXMgdGhlIGxvbmdlc3QgdmFsaWQgQUZfVU5JWCBwYXRoIGZvciBhIGJpbmRpbmcuCi0JCSAqIHN1bl9wYXRoWzEwOF0gZG9lc250IGFzIHN1Y2ggZXhpc3QuICBIb3dldmVyIGluIGtlcm5lbCBzcGFjZQorCQkgKiBzdW5fcGF0aFsxMDhdIGRvZXNuJ3QgYXMgc3VjaCBleGlzdC4gIEhvd2V2ZXIgaW4ga2VybmVsIHNwYWNlCiAJCSAqIHdlIGFyZSBndWFyYW50ZWVkIHRoYXQgaXQgaXMgYSB2YWxpZCBtZW1vcnkgbG9jYXRpb24gaW4gb3VyCiAJCSAqIGtlcm5lbCBhZGRyZXNzIGJ1ZmZlci4KIAkJICovCkBAIC01MjQsNiArNTI0LDggQEAKIAkJCSAgICAgIGludCwgaW50KTsKIHN0YXRpYyBpbnQgdW5peF9zZXFwYWNrZXRfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKiwgc3RydWN0IHNvY2tldCAqLAogCQkJCSAgc3RydWN0IG1zZ2hkciAqLCBzaXplX3QpOworc3RhdGljIGludCB1bml4X3NlcXBhY2tldF9yZWN2bXNnKHN0cnVjdCBraW9jYiAqLCBzdHJ1Y3Qgc29ja2V0ICosCisJCQkJICBzdHJ1Y3QgbXNnaGRyICosIHNpemVfdCwgaW50KTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdW5peF9zdHJlYW1fb3BzID0gewogCS5mYW1pbHkgPQlQRl9VTklYLApAQCAtNTgzLDcgKzU4NSw3IEBACiAJLnNldHNvY2tvcHQgPQlzb2NrX25vX3NldHNvY2tvcHQsCiAJLmdldHNvY2tvcHQgPQlzb2NrX25vX2dldHNvY2tvcHQsCiAJLnNlbmRtc2cgPQl1bml4X3NlcXBhY2tldF9zZW5kbXNnLAotCS5yZWN2bXNnID0JdW5peF9kZ3JhbV9yZWN2bXNnLAorCS5yZWN2bXNnID0JdW5peF9zZXFwYWNrZXRfcmVjdm1zZywKIAkubW1hcCA9CQlzb2NrX25vX21tYXAsCiAJLnNlbmRwYWdlID0Jc29ja19ub19zZW5kcGFnZSwKIH07CkBAIC0xNjk5LDYgKzE3MDEsMTggQEAKIAlyZXR1cm4gdW5peF9kZ3JhbV9zZW5kbXNnKGtpb2NiLCBzb2NrLCBtc2csIGxlbik7CiB9CiAKK3N0YXRpYyBpbnQgdW5peF9zZXFwYWNrZXRfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCQkgICAgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLAorCQkJICAgICAgaW50IGZsYWdzKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCisJaWYgKHNrLT5za19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpCisJCXJldHVybiAtRU5PVENPTk47CisKKwlyZXR1cm4gdW5peF9kZ3JhbV9yZWN2bXNnKGlvY2IsIHNvY2ssIG1zZywgc2l6ZSwgZmxhZ3MpOworfQorCiBzdGF0aWMgdm9pZCB1bml4X2NvcHlfYWRkcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgdW5peF9zb2NrICp1ID0gdW5peF9zayhzayk7CmRpZmYgLS1naXQgYS9uZXQvd2Fucm91dGVyL3dhbnByb2MuYyBiL25ldC93YW5yb3V0ZXIvd2FucHJvYy5jCmluZGV4IDExZjI1YzcuLmYzNDYzOTUgMTAwNjQ0Ci0tLSBhL25ldC93YW5yb3V0ZXIvd2FucHJvYy5jCisrKyBiL25ldC93YW5yb3V0ZXIvd2FucHJvYy5jCkBAIC01MSw3ICs1MSw3IEBACiAKIC8qCiAgKglTdHJ1Y3R1cmVzIGZvciBpbnRlcmZhY2luZyB3aXRoIHRoZSAvcHJvYyBmaWxlc3lzdGVtLgotICoJUm91dGVyIGNyZWF0ZXMgaXRzIG93biBkaXJlY3RvcnkgL3Byb2MvbmV0L3JvdXRlciB3aXRoIHRoZSBmb2xvd2luZworICoJUm91dGVyIGNyZWF0ZXMgaXRzIG93biBkaXJlY3RvcnkgL3Byb2MvbmV0L3JvdXRlciB3aXRoIHRoZSBmb2xsb3dpbmcKICAqCWVudHJpZXM6CiAgKgljb25maWcJCWRldmljZSBjb25maWd1cmF0aW9uCiAgKglzdGF0dXMJCWdsb2JhbCBkZXZpY2Ugc3RhdGlzdGljcwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JlZy5jIGIvbmV0L3dpcmVsZXNzL3JlZy5jCmluZGV4IDMzMzJkNWIuLmFiODAxYTEgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9yZWcuYworKysgYi9uZXQvd2lyZWxlc3MvcmVnLmMKQEAgLTgwOSw3ICs4MDksNyBAQAogCWlmIChyKSB7CiAJCS8qCiAJCSAqIFdlIHdpbGwgZGlzYWJsZSBhbGwgY2hhbm5lbHMgdGhhdCBkbyBub3QgbWF0Y2ggb3VyCi0JCSAqIHJlY2lldmVkIHJlZ3VsYXRvcnkgcnVsZSB1bmxlc3MgdGhlIGhpbnQgaXMgY29taW5nCisJCSAqIHJlY2VpdmVkIHJlZ3VsYXRvcnkgcnVsZSB1bmxlc3MgdGhlIGhpbnQgaXMgY29taW5nCiAJCSAqIGZyb20gYSBDb3VudHJ5IElFIGFuZCB0aGUgQ291bnRyeSBJRSBoYWQgbm8gaW5mb3JtYXRpb24KIAkJICogYWJvdXQgYSBiYW5kLiBUaGUgSUVFRSA4MDIuMTEgc3BlYyBhbGxvd3MgZm9yIGFuIEFQCiAJCSAqIHRvIHNlbmQgb25seSBhIHN1YnNldCBvZiB0aGUgcmVndWxhdG9yeSBydWxlcyBhbGxvd2VkLApAQCAtODM4LDcgKzgzOCw3IEBACiAJICAgIHJlcXVlc3Rfd2lwaHkgJiYgcmVxdWVzdF93aXBoeSA9PSB3aXBoeSAmJgogCSAgICByZXF1ZXN0X3dpcGh5LT5mbGFncyAmIFdJUEhZX0ZMQUdfU1RSSUNUX1JFR1VMQVRPUlkpIHsKIAkJLyoKLQkJICogVGhpcyBnYXVyYW50ZWVzIHRoZSBkcml2ZXIncyByZXF1ZXN0ZWQgcmVndWxhdG9yeSBkb21haW4KKwkJICogVGhpcyBndWFyYW50ZWVzIHRoZSBkcml2ZXIncyByZXF1ZXN0ZWQgcmVndWxhdG9yeSBkb21haW4KIAkJICogd2lsbCBhbHdheXMgYmUgdXNlZCBhcyBhIGJhc2UgZm9yIGZ1cnRoZXIgcmVndWxhdG9yeQogCQkgKiBzZXR0aW5ncwogCQkgKi8KZGlmZiAtLWdpdCBhL25ldC94MjUveDI1X2ZhY2lsaXRpZXMuYyBiL25ldC94MjUveDI1X2ZhY2lsaXRpZXMuYwppbmRleCA0MDYyMDc1Li5mNzdlNGU3IDEwMDY0NAotLS0gYS9uZXQveDI1L3gyNV9mYWNpbGl0aWVzLmMKKysrIGIvbmV0L3gyNS94MjVfZmFjaWxpdGllcy5jCkBAIC0zMSw3ICszMSw3IEBACiAgKiB4MjVfcGFyc2VfZmFjaWxpdGllcyAtIFBhcnNlIGZhY2lsaXRpZXMgZnJvbSBza2IgaW50byB0aGUgZmFjaWxpdGllcyBzdHJ1Y3RzCiAgKgogICogQHNrYjogc2tfYnVmZiB0byBwYXJzZQotICogQGZhY2lsaXRpZXM6IFJlZ3VsYXIgZmFjaWxpdGVzLCB1cGRhdGVkIGFzIGZhY2lsaXRpZXMgYXJlIGZvdW5kCisgKiBAZmFjaWxpdGllczogUmVndWxhciBmYWNpbGl0aWVzLCB1cGRhdGVkIGFzIGZhY2lsaXRpZXMgYXJlIGZvdW5kCiAgKiBAZHRlX2ZhY3M6IElUVSBEVEUgZmFjaWxpdGllcywgdXBkYXRlZCBhcyBEVEUgZmFjaWxpdGllcyBhcmUgZm91bmQKICAqIEB2Y19mYWNfbWFzazogbWFzayBpcyB1cGRhdGVkIHdpdGggYWxsIGZhY2lsaXRpZXMgZm91bmQKICAqCmRpZmYgLS1naXQgYS9uZXQveDI1L3gyNV9mb3J3YXJkLmMgYi9uZXQveDI1L3gyNV9mb3J3YXJkLmMKaW5kZXggMjVhODEwNy4uYzU0MWI2MiAxMDA2NDQKLS0tIGEvbmV0L3gyNS94MjVfZm9yd2FyZC5jCisrKyBiL25ldC94MjUveDI1X2ZvcndhcmQuYwpAQCAtMzEsNyArMzEsNyBAQAogCQlnb3RvIG91dF9ub19yb3V0ZTsKIAogCWlmICgobmVpZ2hfbmV3ID0geDI1X2dldF9uZWlnaChydC0+ZGV2KSkgPT0gTlVMTCkgewotCQkvKiBUaGlzIHNob3VsZG50IGhhcHBlbiwgaWYgaXQgb2NjdXJzIHNvbWVob3cKKwkJLyogVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBpZiBpdCBvY2N1cnMgc29tZWhvdwogCQkgKiBkbyBzb21ldGhpbmcgc2Vuc2libGUKIAkJICovCiAJCWdvdG8gb3V0X3B1dF9yb3V0ZTsKQEAgLTQ1LDcgKzQ1LDcgQEAKIAl9CiAKIAkvKiBSZW1vdGUgZW5kIHNlbmRpbmcgYSBjYWxsIHJlcXVlc3Qgb24gYW4gYWxyZWFkeQotCSAqIGVzdGFibGlzaGVkIExDST8gSXQgc2hvdWxkbnQgaGFwcGVuLCBqdXN0IGluIGNhc2UuLgorCSAqIGVzdGFibGlzaGVkIExDST8gSXQgc2hvdWxkbid0IGhhcHBlbiwganVzdCBpbiBjYXNlLi4KIAkgKi8KIAlyZWFkX2xvY2tfYmgoJngyNV9mb3J3YXJkX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaChlbnRyeSwgJngyNV9mb3J3YXJkX2xpc3QpIHsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCmluZGV4IDE1NzkyZDguLmI0ZDc0NWUgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKKysrIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwpAQCAtMTQwNiw2ICsxNDA2LDcgQEAKIAlzdHJ1Y3QgbmV0ICpuZXQgPSB4cF9uZXQocG9saWN5KTsKIAl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgeGZybV9tb2RlICppbm5lcl9tb2RlOwogCXN0cnVjdCBkc3RfZW50cnkgKmRzdF9wcmV2ID0gTlVMTDsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QwID0gTlVMTDsKIAlpbnQgaSA9IDA7CkBAIC0xNDM2LDYgKzE0MzcsMTcgQEAKIAkJCWdvdG8gcHV0X3N0YXRlczsKIAkJfQogCisJCWlmICh4ZnJtW2ldLT5zZWwuZmFtaWx5ID09IEFGX1VOU1BFQykgeworCQkJaW5uZXJfbW9kZSA9IHhmcm1faXAyaW5uZXJfbW9kZSh4ZnJtW2ldLAorCQkJCQkJCXhmcm1fYWYycHJvdG8oZmFtaWx5KSk7CisJCQlpZiAoIWlubmVyX21vZGUpIHsKKwkJCQllcnIgPSAtRUFGTk9TVVBQT1JUOworCQkJCWRzdF9yZWxlYXNlKGRzdCk7CisJCQkJZ290byBwdXRfc3RhdGVzOworCQkJfQorCQl9IGVsc2UKKwkJCWlubmVyX21vZGUgPSB4ZnJtW2ldLT5pbm5lcl9tb2RlOworCiAJCWlmICghZHN0X3ByZXYpCiAJCQlkc3QwID0gZHN0MTsKIAkJZWxzZSB7CkBAIC0xNDY0LDcgKzE0NzYsNyBAQAogCQlkc3QxLT5sYXN0dXNlID0gbm93OwogCiAJCWRzdDEtPmlucHV0ID0gZHN0X2Rpc2NhcmQ7Ci0JCWRzdDEtPm91dHB1dCA9IHhmcm1baV0tPm91dGVyX21vZGUtPmFmaW5mby0+b3V0cHV0OworCQlkc3QxLT5vdXRwdXQgPSBpbm5lcl9tb2RlLT5hZmluZm8tPm91dHB1dDsKIAogCQlkc3QxLT5uZXh0ID0gZHN0X3ByZXY7CiAJCWRzdF9wcmV2ID0gZHN0MTsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcmVwbGF5LmMgYi9uZXQveGZybS94ZnJtX3JlcGxheS5jCmluZGV4IGYyMTgzODUuLjQ3ZjFiODYgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fcmVwbGF5LmMKKysrIGIvbmV0L3hmcm0veGZybV9yZXBsYXkuYwpAQCAtNTMyLDkgKzUzMiwxMiBAQAogCiAJaWYgKHJlcGxheV9lc24pIHsKIAkJaWYgKHJlcGxheV9lc24tPnJlcGxheV93aW5kb3cgPgotCQkgICAgcmVwbGF5X2Vzbi0+Ym1wX2xlbiAqIHNpemVvZihfX3UzMikpCisJCSAgICByZXBsYXlfZXNuLT5ibXBfbGVuICogc2l6ZW9mKF9fdTMyKSAqIDgpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmICgoeC0+cHJvcHMuZmxhZ3MgJiBYRlJNX1NUQVRFX0VTTikgJiYgcmVwbGF5X2Vzbi0+cmVwbGF5X3dpbmRvdyA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmICgoeC0+cHJvcHMuZmxhZ3MgJiBYRlJNX1NUQVRFX0VTTikgJiYgeC0+cmVwbGF5X2VzbikKIAkJeC0+cmVwbCA9ICZ4ZnJtX3JlcGxheV9lc247CiAJZWxzZQpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuYwppbmRleCAzZDE1ZDNlLi5jNjU4Y2IzIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuYworKysgYi9uZXQveGZybS94ZnJtX3VzZXIuYwpAQCAtMTI0LDYgKzEyNCw5IEBACiB7CiAJc3RydWN0IG5sYXR0ciAqcnQgPSBhdHRyc1tYRlJNQV9SRVBMQVlfRVNOX1ZBTF07CiAKKwlpZiAoKHAtPmZsYWdzICYgWEZSTV9TVEFURV9FU04pICYmICFydCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAoIXJ0KQogCQlyZXR1cm4gMDsKIApAQCAtODk0LDcgKzg5Nyw3IEBACiAJdTMyICpmOwogCiAJbmxoID0gbmxtc2dfcHV0KHNrYiwgcGlkLCBzZXEsIFhGUk1fTVNHX05FV1NQRElORk8sIHNpemVvZih1MzIpLCAwKTsKLQlpZiAobmxoID09IE5VTEwpIC8qIHNob3VsZG50IHJlYWxseSBoYXBwZW4gLi4uICovCisJaWYgKG5saCA9PSBOVUxMKSAvKiBzaG91bGRuJ3QgcmVhbGx5IGhhcHBlbiAuLi4gKi8KIAkJcmV0dXJuIC1FTVNHU0laRTsKIAogCWYgPSBubG1zZ19kYXRhKG5saCk7CkBAIC05NTQsNyArOTU3LDcgQEAKIAl1MzIgKmY7CiAKIAlubGggPSBubG1zZ19wdXQoc2tiLCBwaWQsIHNlcSwgWEZSTV9NU0dfTkVXU0FESU5GTywgc2l6ZW9mKHUzMiksIDApOwotCWlmIChubGggPT0gTlVMTCkgLyogc2hvdWxkbnQgcmVhbGx5IGhhcHBlbiAuLi4gKi8KKwlpZiAobmxoID09IE5VTEwpIC8qIHNob3VsZG4ndCByZWFsbHkgaGFwcGVuIC4uLiAqLwogCQlyZXR1cm4gLUVNU0dTSVpFOwogCiAJZiA9IG5sbXNnX2RhdGEobmxoKTsKQEAgLTEzNjEsNyArMTM2NCw3IEBACiAJaWYgKCF4cCkKIAkJcmV0dXJuIGVycjsKIAotCS8qIHNob3VsZG50IGV4Y2wgYmUgYmFzZWQgb24gbmxoIGZsYWdzPz8KKwkvKiBzaG91bGRuJ3QgZXhjbCBiZSBiYXNlZCBvbiBubGggZmxhZ3M/PwogCSAqIEFoYSEgdGhpcyBpcyBhbnRpLW5ldGxpbmsgcmVhbGx5IGkuZSAgbW9yZSBwZmtleSBkZXJpdmVkCiAJICogaW4gbmV0bGluayBleGNsIGlzIGEgZmxhZyBhbmQgeW91IHdvdWxkbnQgbmVlZAogCSAqIGEgdHlwZSBYRlJNX01TR19VUERQT0xJQ1kgLSBKSFMgKi8KZGlmZiAtLWdpdCBhL3NhbXBsZXMvS2NvbmZpZyBiL3NhbXBsZXMvS2NvbmZpZwppbmRleCBlMDNjZjBlLi40MTA2M2U3IDEwMDY0NAotLS0gYS9zYW1wbGVzL0tjb25maWcKKysrIGIvc2FtcGxlcy9LY29uZmlnCkBAIC01NSw3ICs1NSw3IEBACiAJICBJZiBpbiBkb3VidCwgc2F5ICJOIiBoZXJlLgogCiBjb25maWcgU0FNUExFX0tEQgotCXRyaXN0YXRlICJCdWlsZCBrZGIgY29tbWFuZCBleG1hcGxlIC0tIGxvYWRhYmxlIG1vZHVsZXMgb25seSIKKwl0cmlzdGF0ZSAiQnVpbGQga2RiIGNvbW1hbmQgZXhhbXBsZSAtLSBsb2FkYWJsZSBtb2R1bGVzIG9ubHkiCiAJZGVwZW5kcyBvbiBLR0RCX0tEQiAmJiBtCiAJaGVscAogCSAgQnVpbGQgYW4gZXhhbXBsZSBvZiBob3cgdG8gZHluYW1pY2FsbHkgYWRkIHRoZSBoZWxsbwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9od19icmVha3BvaW50L2RhdGFfYnJlYWtwb2ludC5jIGIvc2FtcGxlcy9od19icmVha3BvaW50L2RhdGFfYnJlYWtwb2ludC5jCmluZGV4IGJkMGYzMzcuLjA2MzY1MzkgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvaHdfYnJlYWtwb2ludC9kYXRhX2JyZWFrcG9pbnQuYworKysgYi9zYW1wbGVzL2h3X2JyZWFrcG9pbnQvZGF0YV9icmVha3BvaW50LmMKQEAgLTE5LDcgKzE5LDcgQEAKICAqCiAgKiBUaGlzIGZpbGUgaXMgYSBrZXJuZWwgbW9kdWxlIHRoYXQgcGxhY2VzIGEgYnJlYWtwb2ludCBvdmVyIGtzeW1fbmFtZSBrZXJuZWwKICAqIHZhcmlhYmxlIHVzaW5nIEhhcmR3YXJlIEJyZWFrcG9pbnQgcmVnaXN0ZXIuIFRoZSBjb3JyZXNwb25kaW5nIGhhbmRsZXIgd2hpY2gKLSAqIHByaW50cyBhIGJhY2t0cmFjZSBpcyBpbnZva2VkIGV2ZXJ5dGltZSBhIHdyaXRlIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgb24KKyAqIHByaW50cyBhIGJhY2t0cmFjZSBpcyBpbnZva2VkIGV2ZXJ5IHRpbWUgYSB3cml0ZSBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIG9uCiAgKiB0aGF0IHZhcmlhYmxlLgogICoKICAqIENvcHlyaWdodCAoQykgSUJNIENvcnBvcmF0aW9uLCAyMDA5CmRpZmYgLS1naXQgYS9zY3JpcHRzL01ha2VmaWxlLm1vZHBvc3QgYi9zY3JpcHRzL01ha2VmaWxlLm1vZHBvc3QKaW5kZXggN2QyMjA1Ni4uNTZkZmFmYyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5tb2Rwb3N0CisrKyBiL3NjcmlwdHMvTWFrZWZpbGUubW9kcG9zdApAQCAtMzUsMTQgKzM1LDE0IEBACiAjIEtCVUlMRF9NT0RQT1NUX1dBUk4gY2FuIGJlIHNldCB0byBhdm9pZCBlcnJvciBvdXQgaW4gY2FzZSBvZiB1bmRlZmluZWQKICMgc3ltYm9scyBpbiB0aGUgZmluYWwgbW9kdWxlIGxpbmtpbmcgc3RhZ2UKICMgS0JVSUxEX01PRFBPU1RfTk9GSU5BTCBjYW4gYmUgc2V0IHRvIHNraXAgdGhlIGZpbmFsIGxpbmsgb2YgbW9kdWxlcy4KLSMgVGhpcyBpcyBzb2xlbHkgdXNlZnVsbCB0byBzcGVlZCB1cCB0ZXN0IGNvbXBpbGVzCisjIFRoaXMgaXMgc29sZWx5IHVzZWZ1bCB0byBzcGVlZCB1cCB0ZXN0IGNvbXBpbGVzCiBQSE9OWSA6PSBfbW9kcG9zdAogX21vZHBvc3Q6IF9fbW9kcG9zdAogCiBpbmNsdWRlIGluY2x1ZGUvY29uZmlnL2F1dG8uY29uZgogaW5jbHVkZSBzY3JpcHRzL0tidWlsZC5pbmNsdWRlCiAKLSMgV2hlbiBidWlsZGluZyBleHRlcm5hbCBtb2R1bGVzIGxvYWQgdGhlIEtidWlsZCBmaWxlIHRvIHJldHJlaXZlIEVYVFJBX1NZTUJPTFMgaW5mbworIyBXaGVuIGJ1aWxkaW5nIGV4dGVybmFsIG1vZHVsZXMgbG9hZCB0aGUgS2J1aWxkIGZpbGUgdG8gcmV0cmlldmUgRVhUUkFfU1lNQk9MUyBpbmZvCiBpZm5lcSAoJChLQlVJTERfRVhUTU9EKSwpCiAKICMgc2V0IHNyYyArIG9iaiAtIHRoZXkgbWF5IGJlIHVzZWQgd2hlbiBidWlsZGluZyB0aGUgLm1vZC5jIGZpbGUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY2hlY2twYXRjaC5wbCBiL3NjcmlwdHMvY2hlY2twYXRjaC5wbAppbmRleCA4ZjllMzk0Li5kODY3MDgxIDEwMDc1NQotLS0gYS9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKKysrIGIvc2NyaXB0cy9jaGVja3BhdGNoLnBsCkBAIC0xOTQ2LDEzICsxOTQ2LDEzIEBACiAjIHByaW50ayBzaG91bGQgdXNlIEtFUk5fKiBsZXZlbHMuICBOb3RlIHRoYXQgZm9sbG93IG9uIHByaW50aydzIG9uIHRoZQogIyBzYW1lIGxpbmUgZG8gbm90IG5lZWQgYSBsZXZlbCwgc28gd2UgdXNlIHRoZSBjdXJyZW50IGJsb2NrIGNvbnRleHQKICMgdG8gdHJ5IGFuZCBmaW5kIGFuZCB2YWxpZGF0ZSB0aGUgY3VycmVudCBwcmludGsuICBJbiBzdW1tYXJ5IHRoZSBjdXJyZW50Ci0jIHByaW50ayBpbmNsdWRlcyBhbGwgcHJlY2VlZGluZyBwcmludGsncyB3aGljaCBoYXZlIG5vIG5ld2xpbmUgb24gdGhlIGVuZC4KKyMgcHJpbnRrIGluY2x1ZGVzIGFsbCBwcmVjZWRpbmcgcHJpbnRrJ3Mgd2hpY2ggaGF2ZSBubyBuZXdsaW5lIG9uIHRoZSBlbmQuCiAjIHdlIGFzc3VtZSB0aGUgZmlyc3QgYmFkIHByaW50ayBpcyB0aGUgb25lIHRvIHJlcG9ydC4KIAkJaWYgKCRsaW5lID1+IC9cYnByaW50a1woKD8hS0VSTl8pXHMqIi8pIHsKIAkJCW15ICRvayA9IDA7CiAJCQlmb3IgKG15ICRsbiA9ICRsaW5lbnIgLSAxOyAkbG4gPj0gJGZpcnN0X2xpbmU7ICRsbi0tKSB7CiAJCQkJI3ByaW50ICJDSEVDSzwkbGluZXNbJGxuIC0gMV1cbiI7Ci0JCQkJIyB3ZSBoYXZlIGEgcHJlY2VlZGluZyBwcmludGsgaWYgaXQgZW5kcworCQkJCSMgd2UgaGF2ZSBhIHByZWNlZGluZyBwcmludGsgaWYgaXQgZW5kcwogCQkJCSMgd2l0aCAiXG4iIGlnbm9yZSBpdCwgZWxzZSBpdCBpcyB0byBibGFtZQogCQkJCWlmICgkbGluZXNbJGxuIC0gMV0gPX4gbXtcYnByaW50a1wofSkgewogCQkJCQlpZiAoJHJhd2xpbmVzWyRsbiAtIDFdICF+IG17XFxuIn0pIHsKQEAgLTIwNDQsNyArMjA0NCw3IEBACiAJCQlmb3IgKG15ICRuID0gMDsgJG4gPCAkI2VsZW1lbnRzOyAkbiArPSAyKSB7CiAJCQkJJG9mZiArPSBsZW5ndGgoJGVsZW1lbnRzWyRuXSk7CiAKLQkJCQkjIFBpY2sgdXAgdGhlIHByZWNlZWRpbmcgYW5kIHN1Y2NlZWRpbmcgY2hhcmFjdGVycy4KKwkJCQkjIFBpY2sgdXAgdGhlIHByZWNlZGluZyBhbmQgc3VjY2VlZGluZyBjaGFyYWN0ZXJzLgogCQkJCW15ICRjYSA9IHN1YnN0cigkb3BsaW5lLCAwLCAkb2ZmKTsKIAkJCQlteSAkY2MgPSAnJzsKIAkJCQlpZiAobGVuZ3RoKCRvcGxpbmUpID49ICgkb2ZmICsgbGVuZ3RoKCRlbGVtZW50c1skbiArIDFdKSkpIHsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZHRjL2xpYmZkdC9saWJmZHQuaCBiL3NjcmlwdHMvZHRjL2xpYmZkdC9saWJmZHQuaAppbmRleCBjZTgwZTRmLi5mZjYyNDZmIDEwMDY0NAotLS0gYS9zY3JpcHRzL2R0Yy9saWJmZHQvbGliZmR0LmgKKysrIGIvc2NyaXB0cy9kdGMvbGliZmR0L2xpYmZkdC5oCkBAIC02MSw3ICs2MSw3IEBACiAjZGVmaW5lIEZEVF9FUlJfTk9URk9VTkQJMQogCS8qIEZEVF9FUlJfTk9URk9VTkQ6IFRoZSByZXF1ZXN0ZWQgbm9kZSBvciBwcm9wZXJ0eSBkb2VzIG5vdCBleGlzdCAqLwogI2RlZmluZSBGRFRfRVJSX0VYSVNUUwkJMgotCS8qIEZEVF9FUlJfRVhJU1RTOiBBdHRlbXBlZCB0byBjcmVhdGUgYSBub2RlIG9yIHByb3BlcnR5IHdoaWNoCisJLyogRkRUX0VSUl9FWElTVFM6IEF0dGVtcHRlZCB0byBjcmVhdGUgYSBub2RlIG9yIHByb3BlcnR5IHdoaWNoCiAJICogYWxyZWFkeSBleGlzdHMgKi8KICNkZWZpbmUgRkRUX0VSUl9OT1NQQUNFCQkzCiAJLyogRkRUX0VSUl9OT1NQQUNFOiBPcGVyYXRpb24gbmVlZGVkIHRvIGV4cGFuZCB0aGUgZGV2aWNlCmRpZmYgLS1naXQgYS9zY3JpcHRzL2R0Yy9saXZldHJlZS5jIGIvc2NyaXB0cy9kdGMvbGl2ZXRyZWUuYwppbmRleCBjOTIwOWQ1Li4yNmQwZTFlIDEwMDY0NAotLS0gYS9zY3JpcHRzL2R0Yy9saXZldHJlZS5jCisrKyBiL3NjcmlwdHMvZHRjL2xpdmV0cmVlLmMKQEAgLTE1NSw3ICsxNTUsNyBAQAogCQkJfQogCQl9CiAKLQkJLyogaWYgbm8gY29sbGlzaW9uIG9jY3VyZWQsIGFkZCBjaGlsZCB0byB0aGUgb2xkIG5vZGUuICovCisJCS8qIGlmIG5vIGNvbGxpc2lvbiBvY2N1cnJlZCwgYWRkIGNoaWxkIHRvIHRoZSBvbGQgbm9kZS4gKi8KIAkJaWYgKG5ld19jaGlsZCkKIAkJCWFkZF9jaGlsZChvbGRfbm9kZSwgbmV3X2NoaWxkKTsKIAl9CmRpZmYgLS1naXQgYS9zY3JpcHRzL2dlbl9pbml0cmFtZnNfbGlzdC5zaCBiL3NjcmlwdHMvZ2VuX2luaXRyYW1mc19saXN0LnNoCmluZGV4IDU1Y2FlY2QuLmUxMmIxYTcgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZ2VuX2luaXRyYW1mc19saXN0LnNoCisrKyBiL3NjcmlwdHMvZ2VuX2luaXRyYW1mc19saXN0LnNoCkBAIC0yODQsNyArMjg0LDcgQEAKIGRvbmUKIAogIyBJZiBvdXRwdXRfZmlsZSBpcyBzZXQgd2Ugd2lsbCBnZW5lcmF0ZSBjcGlvIGFyY2hpdmUgYW5kIGNvbXByZXNzIGl0Ci0jIHdlIGFyZSBjYXJlZnVsbCB0byBkZWxldGUgdG1wIGZpbGVzCisjIHdlIGFyZSBjYXJlZnVsIHRvIGRlbGV0ZSB0bXAgZmlsZXMKIGlmIFsgISAteiAke291dHB1dF9maWxlfSBdOyB0aGVuCiAJaWYgWyAteiAke2NwaW9fZmlsZX0gXTsgdGhlbgogCQljcGlvX3RmaWxlPSIkKG1rdGVtcCAke1RNUERJUjotL3RtcH0vY3Bpb2ZpbGUuWFhYWFhYKSIKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9jb25mLmMgYi9zY3JpcHRzL2tjb25maWcvY29uZi5jCmluZGV4IDY1OTMyNmMuLjAwNmFkODEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9jb25mLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2NvbmYuYwpAQCAtMzMyLDcgKzMzMiw3IEBACiAJCX0KIAkJaWYgKCFjaGlsZCkKIAkJCWNvbnRpbnVlOwotCQlpZiAobGluZVtzdHJsZW4obGluZSkgLSAxXSA9PSAnPycpIHsKKwkJaWYgKGxpbmVbMF0gJiYgbGluZVtzdHJsZW4obGluZSkgLSAxXSA9PSAnPycpIHsKIAkJCXByaW50X2hlbHAoY2hpbGQpOwogCQkJY29udGludWU7CiAJCX0KZGlmZiAtLWdpdCBhL3NjcmlwdHMva2VybmVsLWRvYyBiL3NjcmlwdHMva2VybmVsLWRvYwppbmRleCA5Zjg1MDEyLi5kNzkzMDAxIDEwMDc1NQotLS0gYS9zY3JpcHRzL2tlcm5lbC1kb2MKKysrIGIvc2NyaXB0cy9rZXJuZWwtZG9jCkBAIC0xNzA1LDcgKzE3MDUsNyBAQAogCiAJJHBhcmFtID0geG1sX2VzY2FwZSgkcGFyYW0pOwogCi0JIyBzdHJpcCBzcGFjZXMgZnJvbSAkcGFyYW0gc28gdGhhdCBpdCBpcyBvbmUgY29udGlub3VzIHN0cmluZworCSMgc3RyaXAgc3BhY2VzIGZyb20gJHBhcmFtIHNvIHRoYXQgaXQgaXMgb25lIGNvbnRpbnVvdXMgc3RyaW5nCiAJIyBvbiBAcGFyYW1ldGVybGlzdDsKIAkjIHRoaXMgZml4ZXMgYSBwcm9ibGVtIHdoZXJlIGNoZWNrX3NlY3Rpb25zKCkgY2Fubm90IGZpbmQKIAkjIGEgcGFyYW1ldGVyIGxpa2UgImFkZHJbNiArIDJdIiBiZWNhdXNlIGl0IGFjdHVhbGx5IGFwcGVhcnMKZGlmZiAtLWdpdCBhL3NjcmlwdHMvcGFja2FnZS9idWlsZHRhciBiL3NjcmlwdHMvcGFja2FnZS9idWlsZHRhcgppbmRleCA4M2M5YzA0Li44YTdiMTU1IDEwMDY0NAotLS0gYS9zY3JpcHRzL3BhY2thZ2UvYnVpbGR0YXIKKysrIGIvc2NyaXB0cy9wYWNrYWdlL2J1aWxkdGFyCkBAIC05Miw3ICs5Miw3IEBACiAJCWVjaG8gIiIgPiYyCiAJCWVjaG8gJyoqICoqICoqICBXQVJOSU5HICAqKiAqKiAqKicgPiYyCiAJCWVjaG8gIiIgPiYyCi0JCWVjaG8gIllvdXIgYXJjaGl0ZWN0dXJlIGRpZCBub3QgZGVmaW5lIGFueSBhcmNoaXRlY3R1cmUtZGVwZW5kYW50IGZpbGVzIiA+JjIKKwkJZWNobyAiWW91ciBhcmNoaXRlY3R1cmUgZGlkIG5vdCBkZWZpbmUgYW55IGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgZmlsZXMiID4mMgogCQllY2hvICJ0byBiZSBwbGFjZWQgaW50byB0aGUgdGFyYmFsbC4gUGxlYXNlIGFkZCB0aG9zZSB0byAkezB9IC4uLiIgPiYyCiAJCWVjaG8gIiIgPiYyCiAJCXNsZWVwIDUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvcnQtdGVzdGVyL3J0LXRlc3Rlci5weSBiL3NjcmlwdHMvcnQtdGVzdGVyL3J0LXRlc3Rlci5weQppbmRleCA4YzgxZDc2Li4zNDE4NmNhIDEwMDY0NAotLS0gYS9zY3JpcHRzL3J0LXRlc3Rlci9ydC10ZXN0ZXIucHkKKysrIGIvc2NyaXB0cy9ydC10ZXN0ZXIvcnQtdGVzdGVyLnB5CkBAIC0xODAsNyArMTgwLDcgQEAKICAgICAgICAgICAgICAgICBmb3IgcyBpbiBzdGF0OgogCQkgICAgcyA9IHMuc3RyaXAoKQogICAgICAgICAgICAgICAgICAgICBpZiBzLnN0YXJ0c3dpdGgodGVzdG9wWzBdKToKLSAgICAgICAgICAgICAgICAgICAgICAgICMgU2VwZXJhdGUgc3RhdHVzIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAjIFNlcGFyYXRlIHN0YXR1cyB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gc1syOl0uc3RyaXAoKQogICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkgPSBhbmFseXNlKHZhbCwgdGVzdG9wLCBkYXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYXBwYXJtb3IvbWF0Y2guYyBiL3NlY3VyaXR5L2FwcGFybW9yL21hdGNoLmMKaW5kZXggNWNiNGRjMS4uMDZkNzY0YyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvYXBwYXJtb3IvbWF0Y2guYworKysgYi9zZWN1cml0eS9hcHBhcm1vci9tYXRjaC5jCkBAIC0xOTUsNyArMTk1LDcgQEAKICAqCiAgKiBVbnBhY2sgYSBkZmEgdGhhdCBoYXMgYmVlbiBzZXJpYWxpemVkLiAgVG8gZmluZCBpbmZvcm1hdGlvbiBvbiB0aGUgZGZhCiAgKiBmb3JtYXQgbG9vayBpbiBEb2N1bWVudGF0aW9uL2FwcGFybW9yLnR4dAotICogQXNzdW1lcyB0aGUgZGZhIEBibG9iIHN0cmVhbSBoYXMgYmVlbiBhbGlnbmVkIG9uIGEgOCBieXRlIGJvdW5kcnkKKyAqIEFzc3VtZXMgdGhlIGRmYSBAYmxvYiBzdHJlYW0gaGFzIGJlZW4gYWxpZ25lZCBvbiBhIDggYnl0ZSBib3VuZGFyeQogICoKICAqIFJldHVybnM6IGFuIHVucGFja2VkIGRmYSByZWFkeSBmb3IgbWF0Y2hpbmcgb3IgRVJSX1BUUiBvbiBmYWlsdXJlCiAgKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2FwcGFybW9yL3BvbGljeV91bnBhY2suYyBiL3NlY3VyaXR5L2FwcGFybW9yL3BvbGljeV91bnBhY2suYwppbmRleCBlYjM3MDBlLi5lMzNhYWY3IDEwMDY0NAotLS0gYS9zZWN1cml0eS9hcHBhcm1vci9wb2xpY3lfdW5wYWNrLmMKKysrIGIvc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X3VucGFjay5jCkBAIC0zNTksNyArMzU5LDcgQEAKICAqIEBlOiBzZXJpYWxpemVkIGRhdGEgZXh0ZW50IGluZm9ybWF0aW9uICAoTk9UIE5VTEwpCiAgKiBAcHJvZmlsZTogcHJvZmlsZSB0byBhZGQgdGhlIGFjY2VwdCB0YWJsZSB0byAoTk9UIE5VTEwpCiAgKgotICogUmV0dXJuczogMSBpZiB0YWJsZSBzdWNjZXNmdWxseSB1bnBhY2tlZAorICogUmV0dXJuczogMSBpZiB0YWJsZSBzdWNjZXNzZnVsbHkgdW5wYWNrZWQKICAqLwogc3RhdGljIGJvb2wgdW5wYWNrX3RyYW5zX3RhYmxlKHN0cnVjdCBhYV9leHQgKmUsIHN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlKQogewpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvY2FwYWJpbGl0eS5jIGIvc2VjdXJpdHkvY2FwYWJpbGl0eS5jCmluZGV4IDI5ODRlYTQuLmJiYjUxMTUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2NhcGFiaWxpdHkuYworKysgYi9zZWN1cml0eS9jYXBhYmlsaXR5LmMKQEAgLTE4MSw3ICsxODEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNhcF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQorc3RhdGljIGludCBjYXBfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgZmxhZ3MpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwppbmRleCAxMDExNDIzLi40YmE2ZDRjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jCisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKQEAgLTUxOCwxNiArNTE4LDE0IEBACiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIHNlY3VyaXR5X29wcy0+aW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+aW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgMCk7CiB9CiAKIGludCBzZWN1cml0eV9pbm9kZV9leGVjX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpCiAJCXJldHVybiAwOwotCWlmIChmbGFncykKLQkJcmV0dXJuIC1FQ0hJTEQ7Ci0JcmV0dXJuIHNlY3VyaXR5X29wcy0+aW5vZGVfcGVybWlzc2lvbihpbm9kZSwgTUFZX0VYRUMpOworCXJldHVybiBzZWN1cml0eV9vcHMtPmlub2RlX3Blcm1pc3Npb24oaW5vZGUsIE1BWV9FWEVDLCBmbGFncyk7CiB9CiAKIGludCBzZWN1cml0eV9pbm9kZV9zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9hdmMuYyBiL3NlY3VyaXR5L3NlbGludXgvYXZjLmMKaW5kZXggOWRhNjQyMC4uMWQwMjdlMiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9hdmMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jCkBAIC00NzEsNiArNDcxLDcgQEAKICAqIEBhdmQ6IGFjY2VzcyB2ZWN0b3IgZGVjaXNpb25zCiAgKiBAcmVzdWx0OiByZXN1bHQgZnJvbSBhdmNfaGFzX3Blcm1fbm9hdWRpdAogICogQGE6ICBhdXhpbGlhcnkgYXVkaXQgZGF0YQorICogQGZsYWdzOiBWRlMgd2FsayBmbGFncwogICoKICAqIEF1ZGl0IHRoZSBncmFudGluZyBvciBkZW5pYWwgb2YgcGVybWlzc2lvbnMgaW4gYWNjb3JkYW5jZQogICogd2l0aCB0aGUgcG9saWN5LiAgVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgY2FsbGVkIGJ5CkBAIC00ODEsOSArNDgyLDEwIEBACiAgKiBiZSBwZXJmb3JtZWQgdW5kZXIgYSBsb2NrLCB0byBhbGxvdyB0aGUgbG9jayB0byBiZSByZWxlYXNlZAogICogYmVmb3JlIGNhbGxpbmcgdGhlIGF1ZGl0aW5nIGNvZGUuCiAgKi8KLXZvaWQgYXZjX2F1ZGl0KHUzMiBzc2lkLCB1MzIgdHNpZCwKK2ludCBhdmNfYXVkaXQodTMyIHNzaWQsIHUzMiB0c2lkLAogCSAgICAgICB1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLAotCSAgICAgICBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCwgaW50IHJlc3VsdCwgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphKQorCSAgICAgICBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCwgaW50IHJlc3VsdCwgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphLAorCSAgICAgICB1bnNpZ25lZCBmbGFncykKIHsKIAlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgc3RhY2tfZGF0YTsKIAl1MzIgZGVuaWVkLCBhdWRpdGVkOwpAQCAtNTE1LDExICs1MTcsMjQgQEAKIAllbHNlCiAJCWF1ZGl0ZWQgPSByZXF1ZXN0ZWQgJiBhdmQtPmF1ZGl0YWxsb3c7CiAJaWYgKCFhdWRpdGVkKQotCQlyZXR1cm47CisJCXJldHVybiAwOworCiAJaWYgKCFhKSB7CiAJCWEgPSAmc3RhY2tfZGF0YTsKIAkJQ09NTU9OX0FVRElUX0RBVEFfSU5JVChhLCBOT05FKTsKIAl9CisKKwkvKgorCSAqIFdoZW4gaW4gYSBSQ1Ugd2FsayBkbyB0aGUgYXVkaXQgb24gdGhlIFJDVSByZXRyeS4gIFRoaXMgaXMgYmVjYXVzZQorCSAqIHRoZSBjb2xsZWN0aW9uIG9mIHRoZSBkbmFtZSBpbiBhbiBpbm9kZSBhdWRpdCBtZXNzYWdlIGlzIG5vdCBSQ1UKKwkgKiBzYWZlLiAgTm90ZSB0aGlzIG1heSBkcm9wIHNvbWUgYXVkaXRzIHdoZW4gdGhlIHNpdHVhdGlvbiBjaGFuZ2VzCisJICogZHVyaW5nIHJldHJ5LiBIb3dldmVyIHRoaXMgaXMgbG9naWNhbGx5IGp1c3QgYXMgaWYgdGhlIG9wZXJhdGlvbgorCSAqIGhhcHBlbmVkIGEgbGl0dGxlIGxhdGVyLgorCSAqLworCWlmICgoYS0+dHlwZSA9PSBMU01fQVVESVRfREFUQV9GUykgJiYKKwkgICAgKGZsYWdzICYgSVBFUk1fRkxBR19SQ1UpKQorCQlyZXR1cm4gLUVDSElMRDsKKwogCWEtPnNlbGludXhfYXVkaXRfZGF0YS50Y2xhc3MgPSB0Y2xhc3M7CiAJYS0+c2VsaW51eF9hdWRpdF9kYXRhLnJlcXVlc3RlZCA9IHJlcXVlc3RlZDsKIAlhLT5zZWxpbnV4X2F1ZGl0X2RhdGEuc3NpZCA9IHNzaWQ7CkBAIC01MjksNiArNTQ0LDcgQEAKIAlhLT5sc21fcHJlX2F1ZGl0ID0gYXZjX2F1ZGl0X3ByZV9jYWxsYmFjazsKIAlhLT5sc21fcG9zdF9hdWRpdCA9IGF2Y19hdWRpdF9wb3N0X2NhbGxiYWNrOwogCWNvbW1vbl9sc21fYXVkaXQoYSk7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtNzkzLDYgKzgwOSw3IEBACiAgKiBAdGNsYXNzOiB0YXJnZXQgc2VjdXJpdHkgY2xhc3MKICAqIEByZXF1ZXN0ZWQ6IHJlcXVlc3RlZCBwZXJtaXNzaW9ucywgaW50ZXJwcmV0ZWQgYmFzZWQgb24gQHRjbGFzcwogICogQGF1ZGl0ZGF0YTogYXV4aWxpYXJ5IGF1ZGl0IGRhdGEKKyAqIEBmbGFnczogVkZTIHdhbGsgZmxhZ3MKICAqCiAgKiBDaGVjayB0aGUgQVZDIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBAcmVxdWVzdGVkIHBlcm1pc3Npb25zIGFyZSBncmFudGVkCiAgKiBmb3IgdGhlIFNJRCBwYWlyIChAc3NpZCwgQHRzaWQpLCBpbnRlcnByZXRpbmcgdGhlIHBlcm1pc3Npb25zCkBAIC04MDIsMTQgKzgxOSwxOSBAQAogICogcGVybWlzc2lvbnMgYXJlIGdyYW50ZWQsIC0lRUFDQ0VTIGlmIGFueSBwZXJtaXNzaW9ucyBhcmUgZGVuaWVkLCBvcgogICogYW5vdGhlciAtZXJybm8gdXBvbiBvdGhlciBlcnJvcnMuCiAgKi8KLWludCBhdmNfaGFzX3Blcm0odTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLAotCQkgdTMyIHJlcXVlc3RlZCwgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphdWRpdGRhdGEpCitpbnQgYXZjX2hhc19wZXJtX2ZsYWdzKHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywKKwkJICAgICAgIHUzMiByZXF1ZXN0ZWQsIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYXVkaXRkYXRhLAorCQkgICAgICAgdW5zaWduZWQgZmxhZ3MpCiB7CiAJc3RydWN0IGF2X2RlY2lzaW9uIGF2ZDsKLQlpbnQgcmM7CisJaW50IHJjLCByYzI7CiAKIAlyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNzaWQsIHRzaWQsIHRjbGFzcywgcmVxdWVzdGVkLCAwLCAmYXZkKTsKLQlhdmNfYXVkaXQoc3NpZCwgdHNpZCwgdGNsYXNzLCByZXF1ZXN0ZWQsICZhdmQsIHJjLCBhdWRpdGRhdGEpOworCisJcmMyID0gYXZjX2F1ZGl0KHNzaWQsIHRzaWQsIHRjbGFzcywgcmVxdWVzdGVkLCAmYXZkLCByYywgYXVkaXRkYXRhLAorCQkJZmxhZ3MpOworCWlmIChyYzIpCisJCXJldHVybiByYzI7CiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggZjljMzc2NC4uOGZiMjQ4OCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtMTQ0Niw4ICsxNDQ2LDExIEBACiAJfQogCiAJcmMgPSBhdmNfaGFzX3Blcm1fbm9hdWRpdChzaWQsIHNpZCwgc2NsYXNzLCBhdiwgMCwgJmF2ZCk7Ci0JaWYgKGF1ZGl0ID09IFNFQ1VSSVRZX0NBUF9BVURJVCkKLQkJYXZjX2F1ZGl0KHNpZCwgc2lkLCBzY2xhc3MsIGF2LCAmYXZkLCByYywgJmFkKTsKKwlpZiAoYXVkaXQgPT0gU0VDVVJJVFlfQ0FQX0FVRElUKSB7CisJCWludCByYzIgPSBhdmNfYXVkaXQoc2lkLCBzaWQsIHNjbGFzcywgYXYsICZhdmQsIHJjLCAmYWQsIDApOworCQlpZiAocmMyKQorCQkJcmV0dXJuIHJjMjsKKwl9CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xNDY3LDcgKzE0NzAsOCBAQAogc3RhdGljIGludCBpbm9kZV9oYXNfcGVybShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwKIAkJCSAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgdTMyIHBlcm1zLAotCQkJICBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmFkcCkKKwkJCSAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZHAsCisJCQkgIHVuc2lnbmVkIGZsYWdzKQogewogCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWM7CiAJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIGFkOwpAQCAtMTQ4Nyw3ICsxNDkxLDcgQEAKIAkJYWQudS5mcy5pbm9kZSA9IGlub2RlOwogCX0KIAotCXJldHVybiBhdmNfaGFzX3Blcm0oc2lkLCBpc2VjLT5zaWQsIGlzZWMtPnNjbGFzcywgcGVybXMsIGFkcCk7CisJcmV0dXJuIGF2Y19oYXNfcGVybV9mbGFncyhzaWQsIGlzZWMtPnNpZCwgaXNlYy0+c2NsYXNzLCBwZXJtcywgYWRwLCBmbGFncyk7CiB9CiAKIC8qIFNhbWUgYXMgaW5vZGVfaGFzX3Blcm0sIGJ1dCBwYXNzIGV4cGxpY2l0IGF1ZGl0IGRhdGEgY29udGFpbmluZwpAQCAtMTUwNCw3ICsxNTA4LDcgQEAKIAlDT01NT05fQVVESVRfREFUQV9JTklUKCZhZCwgRlMpOwogCWFkLnUuZnMucGF0aC5tbnQgPSBtbnQ7CiAJYWQudS5mcy5wYXRoLmRlbnRyeSA9IGRlbnRyeTsKLQlyZXR1cm4gaW5vZGVfaGFzX3Blcm0oY3JlZCwgaW5vZGUsIGF2LCAmYWQpOworCXJldHVybiBpbm9kZV9oYXNfcGVybShjcmVkLCBpbm9kZSwgYXYsICZhZCwgMCk7CiB9CiAKIC8qIENoZWNrIHdoZXRoZXIgYSB0YXNrIGNhbiB1c2UgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IgdG8KQEAgLTE1NDAsNyArMTU0NCw3IEBACiAJLyogYXYgaXMgemVybyBpZiBvbmx5IGNoZWNraW5nIGFjY2VzcyB0byB0aGUgZGVzY3JpcHRvci4gKi8KIAlyYyA9IDA7CiAJaWYgKGF2KQotCQlyYyA9IGlub2RlX2hhc19wZXJtKGNyZWQsIGlub2RlLCBhdiwgJmFkKTsKKwkJcmMgPSBpbm9kZV9oYXNfcGVybShjcmVkLCBpbm9kZSwgYXYsICZhZCwgMCk7CiAKIG91dDoKIAlyZXR1cm4gcmM7CkBAIC0xNTc0LDcgKzE1NzgsOCBAQAogCQlyZXR1cm4gcmM7CiAKIAlpZiAoIW5ld3NpZCB8fCAhKHNic2VjLT5mbGFncyAmIFNFX1NCTEFCRUxTVVBQKSkgewotCQlyYyA9IHNlY3VyaXR5X3RyYW5zaXRpb25fc2lkKHNpZCwgZHNlYy0+c2lkLCB0Y2xhc3MsIE5VTEwsICZuZXdzaWQpOworCQlyYyA9IHNlY3VyaXR5X3RyYW5zaXRpb25fc2lkKHNpZCwgZHNlYy0+c2lkLCB0Y2xhc3MsCisJCQkJCSAgICAgJmRlbnRyeS0+ZF9uYW1lLCAmbmV3c2lkKTsKIAkJaWYgKHJjKQogCQkJcmV0dXJuIHJjOwogCX0KQEAgLTIxMDMsNyArMjEwOCw3IEBACiAJCQlmaWxlID0gZmlsZV9wcml2LT5maWxlOwogCQkJaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCQkJaWYgKGlub2RlX2hhc19wZXJtKGNyZWQsIGlub2RlLAotCQkJCQkgICBGSUxFX19SRUFEIHwgRklMRV9fV1JJVEUsIE5VTEwpKSB7CisJCQkJCSAgIEZJTEVfX1JFQUQgfCBGSUxFX19XUklURSwgTlVMTCwgMCkpIHsKIAkJCQlkcm9wX3R0eSA9IDE7CiAJCQl9CiAJCX0KQEAgLTI2MzUsNyArMjY0MCw3IEBACiAJcmV0dXJuIGRlbnRyeV9oYXNfcGVybShjcmVkLCBOVUxMLCBkZW50cnksIEZJTEVfX1JFQUQpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBmbGFncykKIHsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwogCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDsKQEAgLTI2NTcsNyArMjY2Miw3IEBACiAKIAlwZXJtcyA9IGZpbGVfbWFza190b19hdihpbm9kZS0+aV9tb2RlLCBtYXNrKTsKIAotCXJldHVybiBpbm9kZV9oYXNfcGVybShjcmVkLCBpbm9kZSwgcGVybXMsICZhZCk7CisJcmV0dXJuIGlub2RlX2hhc19wZXJtKGNyZWQsIGlub2RlLCBwZXJtcywgJmFkLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICppYXR0cikKQEAgLTMyMDUsNyArMzIxMCw3IEBACiAJICogbmV3IGlub2RlIGxhYmVsIG9yIG5ldyBwb2xpY3kuCiAJICogVGhpcyBjaGVjayBpcyBub3QgcmVkdW5kYW50IC0gZG8gbm90IHJlbW92ZS4KIAkgKi8KLQlyZXR1cm4gaW5vZGVfaGFzX3Blcm0oY3JlZCwgaW5vZGUsIG9wZW5fZmlsZV90b19hdihmaWxlKSwgTlVMTCk7CisJcmV0dXJuIGlub2RlX2hhc19wZXJtKGNyZWQsIGlub2RlLCBvcGVuX2ZpbGVfdG9fYXYoZmlsZSksIE5VTEwsIDApOwogfQogCiAvKiB0YXNrIHNlY3VyaXR5IG9wZXJhdGlvbnMgKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaAppbmRleCA1NjE1MDgxLi5lNzdiMmFjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oCkBAIC01NCwxMSArNTQsMTEgQEAKIAogdm9pZCBfX2luaXQgYXZjX2luaXQodm9pZCk7CiAKLXZvaWQgYXZjX2F1ZGl0KHUzMiBzc2lkLCB1MzIgdHNpZCwKK2ludCBhdmNfYXVkaXQodTMyIHNzaWQsIHUzMiB0c2lkLAogCSAgICAgICB1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLAogCSAgICAgICBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCwKIAkgICAgICAgaW50IHJlc3VsdCwKLQkgICAgICAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphKTsKKwkgICAgICBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmEsIHVuc2lnbmVkIGZsYWdzKTsKIAogI2RlZmluZSBBVkNfU1RSSUNUIDEgLyogSWdub3JlIHBlcm1pc3NpdmUgbW9kZS4gKi8KIGludCBhdmNfaGFzX3Blcm1fbm9hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsCkBAIC02Niw5ICs2NiwxNyBAQAogCQkJIHVuc2lnbmVkIGZsYWdzLAogCQkJIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKTsKIAotaW50IGF2Y19oYXNfcGVybSh1MzIgc3NpZCwgdTMyIHRzaWQsCi0JCSB1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLAotCQkgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphdWRpdGRhdGEpOworaW50IGF2Y19oYXNfcGVybV9mbGFncyh1MzIgc3NpZCwgdTMyIHRzaWQsCisJCSAgICAgICB1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLAorCQkgICAgICAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphdWRpdGRhdGEsCisJCSAgICAgICB1bnNpZ25lZCk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGF2Y19oYXNfcGVybSh1MzIgc3NpZCwgdTMyIHRzaWQsCisJCQkgICAgICAgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCwKKwkJCSAgICAgICBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmF1ZGl0ZGF0YSkKK3sKKwlyZXR1cm4gYXZjX2hhc19wZXJtX2ZsYWdzKHNzaWQsIHRzaWQsIHRjbGFzcywgcmVxdWVzdGVkLCBhdWRpdGRhdGEsIDApOworfQogCiB1MzIgYXZjX3BvbGljeV9zZXFubyh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9uZXRsYWJlbC5jIGIvc2VjdXJpdHkvc2VsaW51eC9uZXRsYWJlbC5jCmluZGV4IDFjMmZjNDYuLmMzYmYzZWQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvbmV0bGFiZWwuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L25ldGxhYmVsLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogICoKICAqIERlc2NyaXB0aW9uOgogICogQ2FsbGVkIHdoZW4gdGhlIE5ldExhYmVsIHN0YXRlIG9mIGEgc2tfc2VjdXJpdHlfc3RydWN0IG5lZWRzIHRvIGJlIHJlc2V0LgotICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJpbGUgZm9yIGFsbCB0aGUgTmV0TGFiZWwgc2tfc2VjdXJpdHlfc3RydWN0IGxvY2tpbmcuCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBhbGwgdGhlIE5ldExhYmVsIHNrX3NlY3VyaXR5X3N0cnVjdCBsb2NraW5nLgogICoKICAqLwogdm9pZCBzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9yZXNldChzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlYykKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYyBiL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYwppbmRleCBlN2I4NTBhLi43MTAyNDU3IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jCkBAIC01MDIsNyArNTAyLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyYyA9IGZsZXhfYXJyYXlfcHJlYWxsb2MocC0+dHlwZV92YWxfdG9fc3RydWN0X2FycmF5LCAwLAotCQkJCSBwLT5wX3R5cGVzLm5wcmltIC0gMSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOworCQkJCSBwLT5wX3R5cGVzLm5wcmltLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CiAJaWYgKHJjKQogCQlnb3RvIG91dDsKIApAQCAtNTE5LDcgKzUxOSw3IEBACiAJCQlnb3RvIG91dDsKIAogCQlyYyA9IGZsZXhfYXJyYXlfcHJlYWxsb2MocC0+c3ltX3ZhbF90b19uYW1lW2ldLAotCQkJCQkgMCwgcC0+c3ltdGFiW2ldLm5wcmltIC0gMSwKKwkJCQkJIDAsIHAtPnN5bXRhYltpXS5ucHJpbSwKIAkJCQkJIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKIAkJaWYgKHJjKQogCQkJZ290byBvdXQ7CkBAIC0xODE5LDggKzE4MTksNiBAQAogCQlnb3RvIG91dDsKIAluZWwgPSBsZTMyX3RvX2NwdShidWZbMF0pOwogCi0JcHJpbnRrKEtFUk5fRVJSICIlczogbmVsPSVkXG4iLCBfX2Z1bmNfXywgbmVsKTsKLQogCWxhc3QgPSBwLT5maWxlbmFtZV90cmFuczsKIAl3aGlsZSAobGFzdCAmJiBsYXN0LT5uZXh0KQogCQlsYXN0ID0gbGFzdC0+bmV4dDsKQEAgLTE4NTcsOCArMTg1NSw2IEBACiAJCQlnb3RvIG91dDsKIAkJbmFtZVtsZW5dID0gMDsKIAotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmdD0lcCBmdC0+bmFtZT0lcCBmdC0+bmFtZT0lc1xuIiwgX19mdW5jX18sIGZ0LCBmdC0+bmFtZSwgZnQtPm5hbWUpOwotCiAJCXJjID0gbmV4dF9lbnRyeShidWYsIGZwLCBzaXplb2YodTMyKSAqIDQpOwogCQlpZiAocmMpCiAJCQlnb3RvIG91dDsKQEAgLTIzNzUsNyArMjM3MSw3IEBACiAJCWdvdG8gYmFkOwogCiAJLyogcHJlYWxsb2NhdGUgc28gd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGUgcHV0IGV2ZXIgZmFpbGluZyAqLwotCXJjID0gZmxleF9hcnJheV9wcmVhbGxvYyhwLT50eXBlX2F0dHJfbWFwX2FycmF5LCAwLCBwLT5wX3R5cGVzLm5wcmltIC0gMSwKKwlyYyA9IGZsZXhfYXJyYXlfcHJlYWxsb2MocC0+dHlwZV9hdHRyX21hcF9hcnJheSwgMCwgcC0+cF90eXBlcy5ucHJpbSwKIAkJCQkgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwogCWlmIChyYykKIAkJZ290byBiYWQ7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKaW5kZXggZWE3YzAxZi4uNmVmNGFmNCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYwpAQCAtMjgwNiw3ICsyODA2LDcgQEAKIAljYXNlIEFVRElUX1NVQkpfQ0xSOgogCWNhc2UgQVVESVRfT0JKX0xFVl9MT1c6CiAJY2FzZSBBVURJVF9PQkpfTEVWX0hJR0g6Ci0JCS8qIHdlIGRvIG5vdCBhbGxvdyBhIHJhbmdlLCBpbmRpY2F0ZWQgYnkgdGhlIHByZXNlbnNlIG9mICctJyAqLworCQkvKiB3ZSBkbyBub3QgYWxsb3cgYSByYW5nZSwgaW5kaWNhdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiAnLScgKi8KIAkJaWYgKHN0cmNocihydWxlc3RyLCAnLScpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWJyZWFrOwpAQCAtMzA3NSw3ICszMDc1LDcgQEAKICAqIERlc2NyaXB0aW9uOgogICogQ29udmVydCB0aGUgZ2l2ZW4gTmV0TGFiZWwgc2VjdXJpdHkgYXR0cmlidXRlcyBpbiBAc2VjYXR0ciBpbnRvIGEKICAqIFNFTGludXggU0lELiAgSWYgdGhlIEBzZWNhdHRyIGZpZWxkIGRvZXMgbm90IGNvbnRhaW4gYSBmdWxsIFNFTGludXgKLSAqIFNJRC9jb250ZXh0IHRoZW4gdXNlIFNFQ0lOSVRTSURfTkVUTVNHIGFzIHRoZSBmb3VuZGF0aW9uLiAgSWYgcG9zc2liaWxlIHRoZQorICogU0lEL2NvbnRleHQgdGhlbiB1c2UgU0VDSU5JVFNJRF9ORVRNU0cgYXMgdGhlIGZvdW5kYXRpb24uICBJZiBwb3NzaWJsZSB0aGUKICAqICdjYWNoZScgZmllbGQgb2YgQHNlY2F0dHIgaXMgc2V0IGFuZCB0aGUgQ0FDSEUgZmxhZyBpcyBzZXQ7IHRoaXMgaXMgdG8KICAqIGFsbG93IHRoZSBAc2VjYXR0ciB0byBiZSB1c2VkIGJ5IE5ldExhYmVsIHRvIGNhY2hlIHRoZSBzZWNhdHRyIHRvIFNJRAogICogY29udmVyc2lvbiBmb3IgZnV0dXJlIGxvb2t1cHMuICBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19hY2Nlc3MuYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2FjY2Vzcy5jCmluZGV4IDg2NDUzZGIuLjk2MzdlMTAgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2FjY2Vzcy5jCisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2FjY2Vzcy5jCkBAIC00MzEsNyArNDMxLDcgQEAKICAqIHNtYWNrX2Zyb21fc2VjaWQgLSBmaW5kIHRoZSBTbWFjayBsYWJlbCBhc3NvY2lhdGVkIHdpdGggYSBzZWNpZAogICogQHNlY2lkOiBhbiBpbnRlZ2VyIHRoYXQgbWlnaHQgYmUgYXNzb2NpYXRlZCB3aXRoIGEgU21hY2sgbGFiZWwKICAqCi0gKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYXBwcm9wcmFpdGUgU21hY2sgbGFiZWwgaWYgdGhlcmUgaXMgb25lLAorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGFwcHJvcHJpYXRlIFNtYWNrIGxhYmVsIGlmIHRoZXJlIGlzIG9uZSwKICAqIG90aGVyd2lzZSBhIHBvaW50ZXIgdG8gdGhlIGludmFsaWQgU21hY2sgbGFiZWwuCiAgKi8KIGNoYXIgKnNtYWNrX2Zyb21fc2VjaWQoY29uc3QgdTMyIHNlY2lkKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwppbmRleCAyM2M3YTZkLi40MDBhNWQ1IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYworKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwpAQCAtNjg2LDcgKzY4Niw3IEBACiAgKgogICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIC1FQUNDRVMgb3RoZXJ3aXNlCiAgKi8KLXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKK3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgZmxhZ3MpCiB7CiAJc3RydWN0IHNta19hdWRpdF9pbmZvIGFkOwogCkBAIC02OTYsNiArNjk2LDEwIEBACiAJICovCiAJaWYgKG1hc2sgPT0gMCkKIAkJcmV0dXJuIDA7CisKKwkvKiBNYXkgYmUgZHJvcHBhYmxlIGFmdGVyIGF1ZGl0ICovCisJaWYgKGZsYWdzICYgSVBFUk1fRkxBR19SQ1UpCisJCXJldHVybiAtRUNISUxEOwogCXNta19hZF9pbml0KCZhZCwgX19mdW5jX18sIExTTV9BVURJVF9EQVRBX0ZTKTsKIAlzbWtfYWRfc2V0ZmllbGRfdV9mc19pbm9kZSgmYWQsIGlub2RlKTsKIAlyZXR1cm4gc21rX2N1cmFjYyhzbWtfb2ZfaW5vZGUoaW5vZGUpLCBtYXNrLCAmYWQpOwpAQCAtMTc5NCw3ICsxNzk4LDcgQEAKICAqIENhc2V5IHNheXMgdGhhdCBDSVBTTyBpcyBnb29kIGVub3VnaCBmb3Igbm93LgogICogSXQgY2FuIGJlIHVzZWQgdG8gZWZmZWN0LgogICogSXQgY2FuIGFsc28gYmUgYWJ1c2VkIHRvIGVmZmVjdCB3aGVuIG5lY2Vzc2FyeS4KLSAqIEFwcG9sb2dpZXMgdG8gdGhlIFRTSUcgZ3JvdXAgaW4gZ2VuZXJhbCBhbmQgR1cgaW4gcGFydGljdWxhci4KKyAqIEFwb2xvZ2llcyB0byB0aGUgVFNJRyBncm91cCBpbiBnZW5lcmFsIGFuZCBHVyBpbiBwYXJ0aWN1bGFyLgogICovCiBzdGF0aWMgdm9pZCBzbWFja190b19zZWNhdHRyKGNoYXIgKnNtYWNrLCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpubHNwKQogewpAQCAtMjUzMCw3ICsyNTM0LDcgQEAKIAlzd2l0Y2ggKHNicC0+c19tYWdpYykgewogCWNhc2UgU01BQ0tfTUFHSUM6CiAJCS8qCi0JCSAqIENhc2V5IHNheXMgdGhhdCBpdCdzIGEgbGl0dGxlIGVtYmFyYXNzaW5nCisJCSAqIENhc2V5IHNheXMgdGhhdCBpdCdzIGEgbGl0dGxlIGVtYmFycmFzc2luZwogCQkgKiB0aGF0IHRoZSBzbWFjayBmaWxlIHN5c3RlbSBkb2Vzbid0IGRvCiAJCSAqIGV4dGVuZGVkIGF0dHJpYnV0ZXMuCiAJCSAqLwpAQCAtMzA4NCw3ICszMDg4LDcgQEAKIAkvKgogCSAqIFdlIG5lZWQgdG8gZGVjaWRlIGlmIHdlIHdhbnQgdG8gbGFiZWwgdGhlIGluY29taW5nIGNvbm5lY3Rpb24gaGVyZQogCSAqIGlmIHdlIGRvIHdlIG9ubHkgbmVlZCB0byBsYWJlbCB0aGUgcmVxdWVzdF9zb2NrIGFuZCB0aGUgc3RhY2sgd2lsbAotCSAqIHByb3BvZ2F0ZSB0aGUgd2lyZS1sYWJlbCB0byB0aGUgc29jayB3aGVuIGl0IGlzIGNyZWF0ZWQuCisJICogcHJvcGFnYXRlIHRoZSB3aXJlLWxhYmVsIHRvIHRoZSBzb2NrIHdoZW4gaXQgaXMgY3JlYXRlZC4KIAkgKi8KIAloZHIgPSBpcF9oZHIoc2tiKTsKIAlhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGhkci0+c2FkZHI7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja2ZzLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja2ZzLmMKaW5kZXggOTBkMWJiYS4uZjkzNDYwMSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tmcy5jCisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrZnMuYwpAQCAtMjA4LDcgKzIwOCw3IEBACiAJaWYgKCpwcG9zICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCS8qCi0JICogTWlub3IgaGFjayBmb3IgYmFja3dhcmQgY29tcGF0YWJpbGl0eQorCSAqIE1pbm9yIGhhY2sgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKIAkgKi8KIAlpZiAoY291bnQgPCAoU01LX09MT0FETEVOKSB8fCBjb3VudCA+IFNNS19MT0FETEVOKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIyMyw3ICsyMjMsNyBAQAogCX0KIAogCS8qCi0JICogTW9yZSBvbiB0aGUgbWlub3IgaGFjayBmb3IgYmFja3dhcmQgY29tcGF0YWJpbGl0eQorCSAqIE1vcmUgb24gdGhlIG1pbm9yIGhhY2sgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKIAkgKi8KIAlpZiAoY291bnQgPT0gKFNNS19PTE9BRExFTikpCiAJCWRhdGFbU01LX09MT0FETEVOXSA9ICctJzsKQEAgLTkyNyw3ICs5MjcsNyBAQAogCQl9CiAJfSBlbHNlIHsKIAkJLyogd2UgZGVsZXRlIHRoZSB1bmxhYmVsZWQgZW50cnksIG9ubHkgaWYgdGhlIHByZXZpb3VzIGxhYmVsCi0JCSAqIHdhc250IHRoZSBzcGVjaWFsIENJUFNPIG9wdGlvbiAqLworCQkgKiB3YXNuJ3QgdGhlIHNwZWNpYWwgQ0lQU08gb3B0aW9uICovCiAJCWlmIChza3AtPnNta19sYWJlbCAhPSBzbWFja19jaXBzb19vcHRpb24pCiAJCQlyYyA9IG5ldGxibF9jZmdfdW5sYmxfc3RhdGljX2RlbCgmaW5pdF9uZXQsIE5VTEwsCiAJCQkJCSZza3AtPnNta19ob3N0LnNpbl9hZGRyLCAmc2twLT5zbWtfbWFzaywKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9sb2FkX3BvbGljeS5jIGIvc2VjdXJpdHkvdG9tb3lvL2xvYWRfcG9saWN5LmMKaW5kZXggYmJhZGE3Yy4uMzMxMmU1NiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvdG9tb3lvL2xvYWRfcG9saWN5LmMKKysrIGIvc2VjdXJpdHkvdG9tb3lvL2xvYWRfcG9saWN5LmMKQEAgLTIzLDcgKzIzLDcgQEAKIAkgKiBJZiB0aGUgaW5pdHJkIGluY2x1ZGVzIC9zYmluL2luaXQgYnV0IHJlYWwtcm9vdC1kZXYgaGFzIG5vdAogCSAqIG1vdW50ZWQgb24gLyB5ZXQsIGFjdGl2YXRpbmcgTUFDIHdpbGwgYmxvY2sgdGhlIHN5c3RlbSBzaW5jZQogCSAqIHBvbGljaWVzIGFyZSBub3QgbG9hZGVkIHlldC4KLQkgKiBUaHVzLCBsZXQgZG9fZXhlY3ZlKCkgY2FsbCB0aGlzIGZ1bmN0aW9uIGV2ZXJ5dGltZS4KKwkgKiBUaHVzLCBsZXQgZG9fZXhlY3ZlKCkgY2FsbCB0aGlzIGZ1bmN0aW9uIGV2ZXJ5IHRpbWUuCiAJICovCiAJc3RydWN0IHBhdGggcGF0aDsKIApkaWZmIC0tZ2l0IGEvc291bmQvYXJtL3B4YTJ4eC1wY20tbGliLmMgYi9zb3VuZC9hcm0vcHhhMnh4LXBjbS1saWIuYwppbmRleCA4ODA4YjgyLi43NmUwZDU2IDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vcHhhMnh4LXBjbS1saWIuYworKysgYi9zb3VuZC9hcm0vcHhhMnh4LXBjbS1saWIuYwpAQCAtMTQwLDYgKzE0MCw5IEBACiAJaWYgKCFwcnRkIHx8ICFwcnRkLT5wYXJhbXMpCiAJCXJldHVybiAwOwogCisJaWYgKHBydGQtPmRtYV9jaCA9PSAtMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlEQ1NSKHBydGQtPmRtYV9jaCkgJj0gfkRDU1JfUlVOOwogCURDU1IocHJ0ZC0+ZG1hX2NoKSA9IDA7CiAJRENNRChwcnRkLT5kbWFfY2gpID0gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX21lbW9yeS5jIGIvc291bmQvY29yZS9wY21fbWVtb3J5LmMKaW5kZXggOTE3ZTQwNS4uMTUwY2I3ZSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbWVtb3J5LmMKKysrIGIvc291bmQvY29yZS9wY21fbWVtb3J5LmMKQEAgLTI1Myw3ICsyNTMsNyBAQAogICogc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXMgLSBwcmUtYWxsb2NhdGlvbiBmb3IgdGhlIGdpdmVuIERNQSB0eXBlCiAgKiBAc3Vic3RyZWFtOiB0aGUgcGNtIHN1YnN0cmVhbSBpbnN0YW5jZQogICogQHR5cGU6IERNQSB0eXBlIChTTkRSVl9ETUFfVFlQRV8qKQotICogQGRhdGE6IERNQSB0eXBlIGRlcGVuZGFudCBkYXRhCisgKiBAZGF0YTogRE1BIHR5cGUgZGVwZW5kZW50IGRhdGEKICAqIEBzaXplOiB0aGUgcmVxdWVzdGVkIHByZS1hbGxvY2F0aW9uIHNpemUgaW4gYnl0ZXMKICAqIEBtYXg6IHRoZSBtYXguIGFsbG93ZWQgcHJlLWFsbG9jYXRpb24gc2l6ZQogICoKQEAgLTI3OCwxMCArMjc4LDEwIEBACiBFWFBPUlRfU1lNQk9MKHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzKTsKIAogLyoqCi0gKiBzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsIC0gcHJlLWFsbG9jYXRpb24gZm9yIGNvbnRpbm91cyBtZW1vcnkgdHlwZSAoYWxsIHN1YnN0cmVhbXMpCisgKiBzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsIC0gcHJlLWFsbG9jYXRpb24gZm9yIGNvbnRpbnVvdXMgbWVtb3J5IHR5cGUgKGFsbCBzdWJzdHJlYW1zKQogICogQHBjbTogdGhlIHBjbSBpbnN0YW5jZQogICogQHR5cGU6IERNQSB0eXBlIChTTkRSVl9ETUFfVFlQRV8qKQotICogQGRhdGE6IERNQSB0eXBlIGRlcGVuZGFudCBkYXRhCisgKiBAZGF0YTogRE1BIHR5cGUgZGVwZW5kZW50IGRhdGEKICAqIEBzaXplOiB0aGUgcmVxdWVzdGVkIHByZS1hbGxvY2F0aW9uIHNpemUgaW4gYnl0ZXMKICAqIEBtYXg6IHRoZSBtYXguIGFsbG93ZWQgcHJlLWFsbG9jYXRpb24gc2l6ZQogICoKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKaW5kZXggZmU1YzgwMy4uMWEwNzc1MCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMKKysrIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKQEAgLTQ2MCw3ICs0NjAsNyBAQAogCQkJCSAgIFBNX1FPU19DUFVfRE1BX0xBVEVOQ1ksIHVzZWNzKTsKIAlyZXR1cm4gMDsKICBfZXJyb3I6Ci0JLyogaGFyZHdhcmUgbWlnaHQgYmUgdW51c2VhYmxlIGZyb20gdGhpcyB0aW1lLAorCS8qIGhhcmR3YXJlIG1pZ2h0IGJlIHVudXNhYmxlIGZyb20gdGhpcyB0aW1lLAogCSAgIHNvIHdlIGZvcmNlIGFwcGxpY2F0aW9uIHRvIHJldHJ5IHRvIHNldAogCSAgIHRoZSBjb3JyZWN0IGhhcmR3YXJlIHBhcmFtZXRlciBzZXR0aW5ncyAqLwogCXJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPSBTTkRSVl9QQ01fU1RBVEVfT1BFTjsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2VxL3NlcV9kdW1teS5jIGIvc291bmQvY29yZS9zZXEvc2VxX2R1bW15LmMKaW5kZXggZjNiZGM1NC4uMWQ3ZDkwYyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zZXEvc2VxX2R1bW15LmMKKysrIGIvc291bmQvY29yZS9zZXEvc2VxX2R1bW15LmMKQEAgLTUwLDcgKzUwLDcgQEAKIAogCW9wdGlvbiBzbmQtc2VxLWR1bW15IHBvcnRzPTQKIAotICBUaGUgbW9kbGUgb3B0aW9uICJkdXBsZXg9MSIgZW5hYmxlcyBkdXBsZXggb3BlcmF0aW9uIHRvIHRoZSBwb3J0LgorICBUaGUgbW9kZWwgb3B0aW9uICJkdXBsZXg9MSIgZW5hYmxlcyBkdXBsZXggb3BlcmF0aW9uIHRvIHRoZSBwb3J0LgogICBJbiBkdXBsZXggbW9kZSwgYSBwYWlyIG9mIHBvcnRzIGFyZSBjcmVhdGVkIGluc3RlYWQgb2Ygc2luZ2xlIHBvcnQsCiAgIGFuZCBldmVudHMgYXJlIHR1bm5lbGVkIGJldHdlZW4gcGFpci1wb3J0cy4gIEZvciBleGFtcGxlLCBpbnB1dCB0bwogICBwb3J0IEEgaXMgc2VudCB0byBvdXRwdXQgcG9ydCBvZiBhbm90aGVyIHBvcnQgQiBhbmQgdmljZSB2ZXJzYS4KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvdm1hc3Rlci5jIGIvc291bmQvY29yZS92bWFzdGVyLmMKaW5kZXggYTg5OTQ4YS4uYTM5ZDNkOCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS92bWFzdGVyLmMKKysrIGIvc291bmQvY29yZS92bWFzdGVyLmMKQEAgLTIzMyw3ICsyMzMsNyBAQAogICogQWRkIGEgc2xhdmUgY29udHJvbCB0byB0aGUgZ3JvdXAgd2l0aCB0aGUgZ2l2ZW4gbWFzdGVyIGNvbnRyb2wKICAqCiAgKiBBbGwgc2xhdmVzIG11c3QgYmUgdGhlIHNhbWUgdHlwZSAocmV0dXJuaW5nIHRoZSBzYW1lIGluZm9ybWF0aW9uCi0gKiB2aWEgaW5mbyBjYWxsYmFjaykuICBUaGUgZnVjbnRpb24gZG9lc24ndCBjaGVjayBpdCwgc28gaXQncyB5b3VyCisgKiB2aWEgaW5mbyBjYWxsYmFjaykuICBUaGUgZnVuY3Rpb24gZG9lc24ndCBjaGVjayBpdCwgc28gaXQncyB5b3VyCiAgKiByZXNwb25zaWJpbGl0eS4KICAqCiAgKiBBbHNvLCBzb21lIGFkZGl0aW9uYWwgbGltaXRhdGlvbnM6CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3BjbS1pbmRpcmVjdDIuYyBiL3NvdW5kL2RyaXZlcnMvcGNtLWluZGlyZWN0Mi5jCmluZGV4IDNjOTNjMjMuLmU3M2ZhZmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvcGNtLWluZGlyZWN0Mi5jCisrKyBiL3NvdW5kL2RyaXZlcnMvcGNtLWluZGlyZWN0Mi5jCkBAIC0yNjQsNyArMjY0LDcgQEAKIAkJaWYgKGRpZmYgPCAtKHNuZF9wY21fc2ZyYW1lc190KSAocnVudGltZS0+Ym91bmRhcnkgLyAyKSkKIAkJCWRpZmYgKz0gcnVudGltZS0+Ym91bmRhcnk7CiAJCS8qIG51bWJlciBvZiBieXRlcyAiYWRkZWQiIGJ5IEFMU0EgaW5jcmVhc2VzIHRoZSBudW1iZXIgb2YKLQkJICogYnl0ZXMgd2hpY2ggYXJlIHJlYWR5IHRvICJiZSB0cmFuc2ZlcmVkIHRvIEhXIi8icGxheWVkIgorCQkgKiBieXRlcyB3aGljaCBhcmUgcmVhZHkgdG8gImJlIHRyYW5zZmVycmVkIHRvIEhXIi8icGxheWVkIgogCQkgKiBUaGVuLCBzZXQgcmVjLT5hcHBsX3B0ciB0byBub3QgY291bnQgYnl0ZXMgdHdpY2UgbmV4dCB0aW1lLgogCQkgKi8KIAkJcmVjLT5zd19yZWFkeSArPSAoaW50KWZyYW1lc190b19ieXRlcyhydW50aW1lLCBkaWZmKTsKQEAgLTMzMCw3ICszMzAsNyBAQAogCQkvKiBjb3B5IGJ5dGVzIGZyb20gaW50ZXJtZWRpYXRlIGJ1ZmZlciBwb3NpdGlvbiBzd19kYXRhIHRvIHRoZQogCQkgKiBIVyBhbmQgcmV0dXJuIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSB3cml0dGVuCiAJCSAqIEZ1cnRoZXJtb3JlLCBzZXQgaHdfcmVhZHkgdG8gMCwgaWYgdGhlIGZpZm8gaXNuJ3QgZW1wdHkKLQkJICogbm93ID0+IG1vcmUgY291bGQgYmUgdHJhbnNmZXJlZCB0byBmaWZvCisJCSAqIG5vdyA9PiBtb3JlIGNvdWxkIGJlIHRyYW5zZmVycmVkIHRvIGZpZm8KIAkJICovCiAJCWJ5dGVzID0gY29weShzdWJzdHJlYW0sIHJlYywgYnl0ZXMpOwogCQlyZWMtPmJ5dGVzMmh3ICs9IGJ5dGVzOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy92eC92eF9wY20uYyBiL3NvdW5kL2RyaXZlcnMvdngvdnhfcGNtLmMKaW5kZXggMzVhMmY3MS4uNWU4OTdiMiAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy92eC92eF9wY20uYworKysgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X3BjbS5jCkBAIC0xMTg5LDcgKzExODksNyBAQAogCiAKIC8qCi0gKiB2eF9pbml0X2F1ZGlvX2lvIC0gY2hlY2sgdGhlIGF2YWlsYWJlIGF1ZGlvIGkvbyBhbmQgYWxsb2NhdGUgcGlwZSBhcnJheXMKKyAqIHZ4X2luaXRfYXVkaW9faW8gLSBjaGVjayB0aGUgYXZhaWxhYmxlIGF1ZGlvIGkvbyBhbmQgYWxsb2NhdGUgcGlwZSBhcnJheXMKICAqLwogc3RhdGljIGludCB2eF9pbml0X2F1ZGlvX2lvKHN0cnVjdCB2eF9jb3JlICpjaGlwKQogewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL2VtdTgwMDAuYyBiL3NvdW5kL2lzYS9zYi9lbXU4MDAwLmMKaW5kZXggMGM0MDk1MS4uNWQ2MWY1YSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL2VtdTgwMDAuYworKysgYi9zb3VuZC9pc2Evc2IvZW11ODAwMC5jCkBAIC0zNzAsNyArMzcwLDcgQEAKIAogLyoKICAqIFNpemUgdGhlIG9uYm9hcmQgbWVtb3J5LgotICogVGhpcyBpcyB3cml0dGVuIHNvIGFzIG5vdCB0byBuZWVkIGFyYml0YXJ5IGRlbGF5cyBhZnRlciB0aGUgd3JpdGUuIEl0CisgKiBUaGlzIGlzIHdyaXR0ZW4gc28gYXMgbm90IHRvIG5lZWQgYXJiaXRyYXJ5IGRlbGF5cyBhZnRlciB0aGUgd3JpdGUuIEl0CiAgKiBzZWVtcyB0aGF0IHRoZSBvbmx5IHdheSB0byBkbyB0aGlzIGlzIHRvIHVzZSB0aGUgb25lIGNoYW5uZWwgYW5kIGtlZXAKICAqIHJlYWxsb2NhdGluZyBiZXR3ZWVuIHJlYWQgYW5kIHdyaXRlLgogICovCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udF9taWRpLmMgYi9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udF9taWRpLmMKaW5kZXggZjE0YTdjMC4uNjUzMjlmMyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnRfbWlkaS5jCisrKyBiL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250X21pZGkuYwpAQCAtNTM3LDcgKzUzNyw3IEBACiAJfQogCiAJLyogVHVybiBvbiBWaXJ0dWFsIE1JREksIGJ1dCBmaXJzdCAqYWx3YXlzKiB0dXJuIGl0IG9mZiwKLQkgICBzaW5jZSBvdGhlcndpc2UgY29uc2VjdHV0aXZlIHJlbG9hZHMgb2YgdGhlIGRyaXZlciB3aWxsCisJICAgc2luY2Ugb3RoZXJ3aXNlIGNvbnNlY3V0aXZlIHJlbG9hZHMgb2YgdGhlIGRyaXZlciB3aWxsCiAJICAgbmV2ZXIgY2F1c2UgdGhlIGhhcmR3YXJlIHRvIGdlbmVyYXRlIHRoZSBpbml0aWFsICJpbnRlcm5hbCIgb3IgCiAJICAgImV4dGVybmFsIiBzb3VyY2UgYnl0ZXMgaW4gdGhlIE1JREkgZGF0YSBzdHJlYW0uIFRoaXMKIAkgICBpcyBwcmV0dHkgaW1wb3J0YW50LCBzaW5jZSB0aGUgaW50ZXJuYWwgaGFyZHdhcmUgZ2VuZXJhbGx5IHdpbGwKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jIGIvc291bmQvaXNhL3dzcy93c3NfbGliLmMKaW5kZXggOTE5MWIzMi4uMmE0MmNjMyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3dzcy93c3NfbGliLmMKKysrIGIvc291bmQvaXNhL3dzcy93c3NfbGliLmMKQEAgLTQyNCw3ICs0MjQsNyBAQAogCiAJLyoKIAkgKiBXYWl0IGZvciAocG9zc2libGUgLS0gZHVyaW5nIGluaXQgYXV0by1jYWxpYnJhdGlvbiBtYXkgbm90IGJlIHNldCkKLQkgKiBjYWxpYnJhdGlvbiBwcm9jZXNzIHRvIHN0YXJ0LiBOZWVkcyB1cHRvIDUgc2FtcGxlIHBlcmlvZHMgb24gQUQxODQ4CisJICogY2FsaWJyYXRpb24gcHJvY2VzcyB0byBzdGFydC4gTmVlZHMgdXAgdG8gNSBzYW1wbGUgcGVyaW9kcyBvbiBBRDE4NDgKIAkgKiB3aGljaCBhdCB0aGUgc2xvd2VzdCBwb3NzaWJsZSByYXRlIG9mIDUuNTEyNSBrSHogbWVhbnMgOTA3IHVzLgogCSAqLwogCW1zbGVlcCgxKTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hYzk3X2NvZGVjLmMgYi9zb3VuZC9vc3MvYWM5N19jb2RlYy5jCmluZGV4IDg1NGMzMDMuLjBjZDIzZDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9hYzk3X2NvZGVjLmMKKysrIGIvc291bmQvb3NzL2FjOTdfY29kZWMuYwpAQCAtMjgsNyArMjgsNyBAQAogICoKICAqIEhpc3RvcnkKICAqIE1heSAwMiwgMjAwMyBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgotICoJUmVtb3ZlZCBub24gZXhpc3RhbnQgV005NzAwCisgKglSZW1vdmVkIG5vbiBleGlzdGVudCBXTTk3MDAKICAqCUFkZGVkIHN1cHBvcnQgZm9yIFdNOTcwNSwgV005NzA4LCBXTTk3MDksIFdNOTcxMCwgV005NzExCiAgKglXTTk3MTIgYW5kIFdNOTcxNwogICogTWFyIDI4LCAyMDAyIFJhbmRvbHBoIEJlbnRzb24gPGJlbnRzb25AaG9sbXNqb2VuLmNvbT4KQEAgLTQ0MSw3ICs0NDEsNyBAQAogfQogCiAvKiByZWFkIG9yIHdyaXRlIHRoZSByZWNtYXNrLCB0aGUgYWM5NyBjYW4gcmVhbGx5IGhhdmUgbGVmdCBhbmQgcmlnaHQgcmVjb3JkaW5nCi0gICBpbnB1dHMgaW5kZXBlbmRhbnRseSBzZXQsIGJ1dCBPU1MgZG9lc24ndCBzZWVtIHRvIHdhbnQgdXMgdG8gZXhwcmVzcyB0aGF0IHRvCisgICBpbnB1dHMgaW5kZXBlbmRlbnRseSBzZXQsIGJ1dCBPU1MgZG9lc24ndCBzZWVtIHRvIHdhbnQgdXMgdG8gZXhwcmVzcyB0aGF0IHRvCiAgICB0aGUgdXNlci4gdGhlIGNhbGxlciBndWFyYW50ZWVzIHRoYXQgd2UgaGF2ZSBhIHN1cHBvcnRlZCBiaXQgc2V0LCBhbmQgdGhleQogICAgbXVzdCBiZSBob2xkaW5nIHRoZSBjYXJkJ3Mgc3BpbmxvY2sgKi8KIHN0YXRpYyBpbnQgYWM5N19yZWNtYXNrX2lvKHN0cnVjdCBhYzk3X2NvZGVjICpjb2RlYywgaW50IHJ3LCBpbnQgbWFzaykgCkBAIC03NTQsNyArNzU0LDcgQEAKIAlpZigoY29kZWMtPmNvZGVjX29wcyA9PSAmbnVsbF9vcHMpICYmIChmICYgNCkpCiAJCWNvZGVjLT5jb2RlY19vcHMgPSAmZGVmYXVsdF9kaWdpdGFsX29wczsKIAkKLQkvKiBBIGRldmljZSB3aGljaCB0aGlua3MgaXRzIGEgbW9kZW0gYnV0IGlzbnQgKi8KKwkvKiBBIGRldmljZSB3aGljaCB0aGlua3MgaXRzIGEgbW9kZW0gYnV0IGlzbid0ICovCiAJaWYoY29kZWMtPmZsYWdzICYgQUM5N19ERUxVREVEX01PREVNKQogCQljb2RlYy0+bW9kZW0gPSAwOwogCQkKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hdWRpby5jIGIvc291bmQvb3NzL2F1ZGlvLmMKaW5kZXggN2RmNDhhMi4uNGI5NThiMSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2F1ZGlvLmMKKysrIGIvc291bmQvb3NzL2F1ZGlvLmMKQEAgLTUxNCw3ICs1MTQsNyBAQAogCQkJCWNvdW50ICs9IGRtYXAtPmJ5dGVzX2luX3VzZTsJLyogUG9pbnRlciB3cmFwIG5vdCBoYW5kbGVkIHlldCAqLwogCQkJY291bnQgKz0gZG1hcC0+Ynl0ZV9jb3VudGVyOwogCQkKLQkJCS8qIFN1YnN0cmFjdCBjdXJyZW50IGNvdW50IGZyb20gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIGJ5IGFwcCAqLworCQkJLyogU3VidHJhY3QgY3VycmVudCBjb3VudCBmcm9tIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBieSBhcHAgKi8KIAkJCWNvdW50ID0gZG1hcC0+dXNlcl9jb3VudGVyIC0gY291bnQ7CiAJCQlpZiAoY291bnQgPCAwKQogCQkJCWNvdW50ID0gMDsKQEAgLTkzMSw3ICs5MzEsNyBAQAogCQkJaWYgKGNvdW50IDwgZG1hcF9vdXQtPmZyYWdtZW50X3NpemUgJiYgZG1hcF9vdXQtPnFoZWFkICE9IDApCiAJCQkJY291bnQgKz0gZG1hcF9vdXQtPmJ5dGVzX2luX3VzZTsJLyogUG9pbnRlciB3cmFwIG5vdCBoYW5kbGVkIHlldCAqLwogCQkJY291bnQgKz0gZG1hcF9vdXQtPmJ5dGVfY291bnRlcjsKLQkJCS8qIFN1YnN0cmFjdCBjdXJyZW50IGNvdW50IGZyb20gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIGJ5IGFwcCAqLworCQkJLyogU3VidHJhY3QgY3VycmVudCBjb3VudCBmcm9tIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBieSBhcHAgKi8KIAkJCWNvdW50ID0gZG1hcF9vdXQtPnVzZXJfY291bnRlciAtIGNvdW50OwogCQkJaWYgKGNvdW50IDwgMCkKIAkJCQljb3VudCA9IDA7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfY29yZS5jIGIvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2NvcmUuYwppbmRleCA4N2UyYzcyLi5jOTE4MzEzIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfY29yZS5jCisrKyBiL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9jb3JlLmMKQEAgLTEwMjEsNyArMTAyMSw3IEBACiAJY2FzZSBTTkRDVExfRFNQX1NZTkM6CiAJCS8qIFRoaXMgY2FsbCwgZWZmZWN0aXZlbHksIGhhcyB0aGUgc2FtZSBiZWhhdmlvdXIgYXMgU05EQ1RMX0RTUF9SRVNFVAogCQkgICBleGNlcHQgdGhhdCBpdCB3YWl0cyBmb3Igb3V0cHV0IHRvIGZpbmlzaCBiZWZvcmUgcmVzZXR0aW5nCi0JCSAgIGV2ZXJ5dGhpbmcgLSByZWFkLCBob3dldmVyLCBpcyBraWxsZWQgaW1lZGlhdGVseS4KKwkJICAgZXZlcnl0aGluZyAtIHJlYWQsIGhvd2V2ZXIsIGlzIGtpbGxlZCBpbW1lZGlhdGVseS4KIAkJKi8KIAkJcmVzdWx0ID0gMCA7CiAJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL21pZGlidWYuYyBiL3NvdW5kL29zcy9taWRpYnVmLmMKaW5kZXggY2VlZGIxZS4uOGNkYjJjZiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL21pZGlidWYuYworKysgYi9zb3VuZC9vc3MvbWlkaWJ1Zi5jCkBAIC0yOTUsNyArMjk1LDcgQEAKIAogCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQogCQl7Ci0JCQkvKiBCUk9LRSBCUk9LRSBCUk9LRSAtIENBTlQgRE8gVEhJUyBXSVRIIENMSSAhISAqLworCQkJLyogQlJPS0UgQlJPS0UgQlJPS0UgLSBDQU4nVCBETyBUSElTIFdJVEggQ0xJICEhICovCiAJCQkvKiB5ZXMsIHRoaW5rIHRoZSBzYW1lLCBzbyBJIHJlbW92ZWQgdGhlIGNsaSgpIGJyYWNrZXRzIAogCQkJCVFVRVVFX0JZVEUgaXMgcHJvdGVjdGVkIGFnYWluc3QgaW50ZXJydXB0cyAqLwogCQkJaWYgKGNvcHlfZnJvbV91c2VyKChjaGFyICopICZ0bXBfZGF0YSwgJihidWYpW2NdLCAxKSkgewpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3NiX2NhcmQuYyBiL3NvdW5kL29zcy9zYl9jYXJkLmMKaW5kZXggODRlZjRkMC4uZmI1ZDcyNSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3NiX2NhcmQuYworKysgYi9zb3VuZC9vc3Mvc2JfY2FyZC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIHNvdW5kL29zcy9zYl9jYXJkLmMKICAqCi0gKiBEZXRlY3Rpb24gcm91dGluZSBmb3IgdGhlIElTQSBTb3VuZCBCbGFzdGVyIGFuZCBjb21wYXRhYmxlIHNvdW5kCisgKiBEZXRlY3Rpb24gcm91dGluZSBmb3IgdGhlIElTQSBTb3VuZCBCbGFzdGVyIGFuZCBjb21wYXRpYmxlIHNvdW5kCiAgKiBjYXJkcy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFIChHUEwpCmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc2JfZXNzLmMgYi9zb3VuZC9vc3Mvc2JfZXNzLmMKaW5kZXggOTg5MGNmMi4uNWM3NzNkZiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3NiX2Vzcy5jCisrKyBiL3NvdW5kL29zcy9zYl9lc3MuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiAgKiBjb3JyZXNwb25kaW5nIHBsYXliYWNrIGxldmVscywgdW5sZXNzIHJlY21hc2sgc2F5cyB0aGV5IGFyZW4ndCByZWNvcmRlZC4gSW4KICAqIHRoZSBsYXR0ZXIgY2FzZSB0aGUgcmVjb3JkaW5nIHZvbHVtZXMgYXJlIDAuCiAgKiBOb3cgcmVjb3JkaW5nIGxldmVscyBvZiBpbnB1dHMgY2FuIGJlIGNvbnRyb2xsZWQsIGJ5IGNoYW5naW5nIHRoZSBwbGF5YmFjawotICogbGV2ZWxzLiBGdXRoZXJtb3JlIHNldmVyYWwgZGV2aWNlcyBjYW4gYmUgcmVjb3JkZWQgdG9nZXRoZXIgKHdoaWNoIGlzIG5vdAorICogbGV2ZWxzLiBGdXJ0aGVybW9yZSBzZXZlcmFsIGRldmljZXMgY2FuIGJlIHJlY29yZGVkIHRvZ2V0aGVyICh3aGljaCBpcyBub3QKICAqIHBvc3NpYmxlIHdpdGggdGhlIEVTMTY4OCkuCiAgKiBCZXNpZGVzIHRoZSBzZXBhcmF0ZSByZWNvcmRpbmcgbGV2ZWwgY29udHJvbCBmb3IgZWFjaCBpbnB1dCwgdGhlIGNvbW1vbgogICogcmVjb3JkaW5nIGxldmVsIGNhbiBhbHNvIGJlIGNvbnRyb2xsZWQgYnkgUkVDTEVWIGFzIGRlc2NyaWJlZCBhYm92ZS4KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zd2FybV9jczQyOTdhLmMgYi9zb3VuZC9vc3Mvc3dhcm1fY3M0Mjk3YS5jCmluZGV4IDQ0MzU3ZDguLjA5ZDQ2NDggMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zd2FybV9jczQyOTdhLmMKKysrIGIvc291bmQvb3NzL3N3YXJtX2NzNDI5N2EuYwpAQCAtODc1LDcgKzg3NSw3IEBACiAJCWlmIChzLT5wcm9wX2FkYy5mbXQgJiBBRk1UX1M4IHx8IHMtPnByb3BfYWRjLmZtdCAmIEFGTVRfVTgpIHsKIAkJCS8vIAogCQkJLy8gbm93IG9ubHkgdXNlIDE2IGJpdCBjYXB0dXJlLCBkdWUgdG8gdHJ1bmNhdGlvbiBpc3N1ZQotCQkJLy8gaW4gdGhlIGNoaXAsIG5vdGljYWJsZSBkaXN0b3J0aW9uIG9jY3Vycy4KKwkJCS8vIGluIHRoZSBjaGlwLCBub3RpY2VhYmxlIGRpc3RvcnRpb24gb2NjdXJzLgogCQkJLy8gYWxsb2NhdGUgYnVmZmVyIGFuZCB0aGVuIGNvbnZlcnQgZnJvbSAxNiBiaXQgdG8gCiAJCQkvLyA4IGJpdCBmb3IgdGhlIHVzZXIgYnVmZmVyLgogCQkJLy8KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy92aWRjLmMgYi9zb3VuZC9vc3MvdmlkYy5jCmluZGV4IGYwZTBjYWEuLjEyYmEyOGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy92aWRjLmMKKysrIGIvc291bmQvb3NzL3ZpZGMuYwpAQCAtMjI3LDcgKzIyNyw3IEBACiAJCX0gZWxzZSB7CiAJCQkvKnByaW50aygiVklEQzogaW50ZXJuYWwgJWQgJWQgJWRcbiIsIHJhdGUsIHJhdGVfaW50LCBod3JhdGUpOyovCiAJCQlod2N0cmw9MHgwMDAwMDAwMzsKLQkJCS8qIEFsbG93IHJvdWdseSAwLjQlIHRvbGVyYW5jZSAqLworCQkJLyogQWxsb3cgcm91Z2hseSAwLjQlIHRvbGVyYW5jZSAqLwogCQkJaWYgKGRpZmZfaW50ID4gKHJhdGUvMjU2KSkKIAkJCQlyYXRlPXJhdGVfaW50OwogCQl9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWQxODg5LmMgYi9zb3VuZC9wY2kvYWQxODg5LmMKaW5kZXggNDM4MmQwZi4uZDhmNmZkNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FkMTg4OS5jCisrKyBiL3NvdW5kL3BjaS9hZDE4ODkuYwpAQCAtMjksNyArMjksNyBAQAogICoJUE0gc3VwcG9ydAogICoJTUlESSBzdXBwb3J0CiAgKglHYW1lIFBvcnQgc3VwcG9ydAotICoJU0cgRE1BIHN1cHBvcnQgKHRoaXMgd2lsbCBuZWVkICphbG90KiBvZiB3b3JrKQorICoJU0cgRE1BIHN1cHBvcnQgKHRoaXMgd2lsbCBuZWVkICphIGxvdCogb2Ygd29yaykKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FzaWhwaS9hc2locGkuYyBiL3NvdW5kL3BjaS9hc2locGkvYXNpaHBpLmMKaW5kZXggZjUzYTMxZS4uZjhjY2M5NiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FzaWhwaS9hc2locGkuYworKysgYi9zb3VuZC9wY2kvYXNpaHBpL2FzaWhwaS5jCkBAIC05NjMsNyArOTYzLDcgQEAKIAogCS8qPyBhbHNvIGNoZWNrIEFTSTUwMDAgc2FtcGxlcmF0ZSBzb3VyY2UKIAkgICAgSWYgZXh0ZXJuYWwsIG9ubHkgc3VwcG9ydCBleHRlcm5hbCByYXRlLgotCSAgICBJZiBpbnRlcm5hbCBhbmQgb3RoZXIgc3RyZWFtIHBsYXlpbmcsIGNhbnQgc3dpdGNoCisJICAgIElmIGludGVybmFsIGFuZCBvdGhlciBzdHJlYW0gcGxheWluZywgY2FuJ3Qgc3dpdGNoCiAJKi8KIAogCWluaXRfdGltZXIoJmRwY20tPnRpbWVyKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hc2locGkvaHBpLmggYi9zb3VuZC9wY2kvYXNpaHBpL2hwaS5oCmluZGV4IDZmYzAyNWMuLjI1NTQyOWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hc2locGkvaHBpLmgKKysrIGIvc291bmQvcGNpL2FzaWhwaS9ocGkuaApAQCAtNzI1LDcgKzcyNSw3IEBACiAjZGVmaW5lIEhQSV9QQURfVElUTEVfTEVOICAgICAgICAgICAgICAgNjQKIC8qKiBUaGUgdGV4dCBzdHJpbmcgY29udGFpbmluZyB0aGUgY29tbWVudC4gKi8KICNkZWZpbmUgSFBJX1BBRF9DT01NRU5UX0xFTiAgICAgICAgICAgICAyNTYKLS8qKiBUaGUgUFRZIHdoZW4gdGhlIHR1bmVyIGhhcyBub3QgcmVjaWV2ZWQgYW55IFBUWS4gKi8KKy8qKiBUaGUgUFRZIHdoZW4gdGhlIHR1bmVyIGhhcyBub3QgcmVjZWl2ZWQgYW55IFBUWS4gKi8KICNkZWZpbmUgSFBJX1BBRF9QUk9HUkFNX1RZUEVfSU5WQUxJRCAgICAweGZmZmYKIC8qKiBcfSAqLwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXNpaHBpL2hwaTYwMDAuYyBiL3NvdW5kL3BjaS9hc2locGkvaHBpNjAwMC5jCmluZGV4IDNlM2MyZWYuLjhjOGFhYzQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hc2locGkvaHBpNjAwMC5jCisrKyBiL3NvdW5kL3BjaS9hc2locGkvaHBpNjAwMC5jCkBAIC00MjMsNyArNDIzLDcgQEAKIAogCWFvLnByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaHBpX2h3X29iaiksIEdGUF9LRVJORUwpOwogCWlmICghYW8ucHJpdikgewotCQlIUElfREVCVUdfTE9HKEVSUk9SLCAiY2FudCBnZXQgbWVtIGZvciBhZGFwdGVyIG9iamVjdFxuIik7CisJCUhQSV9ERUJVR19MT0coRVJST1IsICJjYW4ndCBnZXQgbWVtIGZvciBhZGFwdGVyIG9iamVjdFxuIik7CiAJCXBoci0+ZXJyb3IgPSBIUElfRVJST1JfTUVNT1JZX0FMTE9DOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FzaWhwaS9ocGk2MjA1LmMgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaTYyMDUuYwppbmRleCA2MjA1MjViLi4yMmU5ZjA4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXNpaHBpL2hwaTYyMDUuYworKysgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaTYyMDUuYwpAQCAtNDY2LDcgKzQ2Niw3IEBACiAKIAlhby5wcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhwaV9od19vYmopLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWFvLnByaXYpIHsKLQkJSFBJX0RFQlVHX0xPRyhFUlJPUiwgImNhbnQgZ2V0IG1lbSBmb3IgYWRhcHRlciBvYmplY3RcbiIpOworCQlIUElfREVCVUdfTE9HKEVSUk9SLCAiY2FuJ3QgZ2V0IG1lbSBmb3IgYWRhcHRlciBvYmplY3RcbiIpOwogCQlwaHItPmVycm9yID0gSFBJX0VSUk9SX01FTU9SWV9BTExPQzsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hc2locGkvaHBpX2ludGVybmFsLmggYi9zb3VuZC9wY2kvYXNpaHBpL2hwaV9pbnRlcm5hbC5oCmluZGV4IGFmNjc4YmUuLjNiOWZkMTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hc2locGkvaHBpX2ludGVybmFsLmgKKysrIGIvc291bmQvcGNpL2FzaWhwaS9ocGlfaW50ZXJuYWwuaApAQCAtNjA3LDcgKzYwNyw3IEBACiAjZW5kaWYKIAogc3RydWN0IGhwaV9idWZmZXIgewotICAvKiogcGxhY2Vob2RlciBmb3IgYmFja3dhcmQgY29tcGF0YWJpbGl0eSAoc2VlIGR3QnVmZmVyU2l6ZSkgKi8KKyAgLyoqIHBsYWNlaG9kZXIgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKHNlZSBkd0J1ZmZlclNpemUpICovCiAJc3RydWN0IGhwaV9tc2dfZm9ybWF0IHJlc2VydmVkOwogCXUzMiBjb21tYW5kOyAvKio8IEhQSV9CVUZGRVJfQ01EX3h4eCovCiAJdTMyIHBjaV9hZGRyZXNzOyAvKio8IFBDSSBwaHlzaWNhbCBhZGRyZXNzIG9mIGJ1ZmZlciBmb3IgRFNQIERNQSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FzaWhwaS9ocGltc2d4LmMgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaW1zZ3guYwppbmRleCBiY2JkZjMwLi4zNjAwMjhiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXNpaHBpL2hwaW1zZ3guYworKysgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaW1zZ3guYwpAQCAtNzIyLDcgKzcyMiw3IEBACiAJCXJldHVybiBwaHItPmVycm9yOwogCX0KIAlpZiAoaHIuZXJyb3IgPT0gMCkgewotCQkvKiB0aGUgYWRhcHRlciB3YXMgY3JlYXRlZCBzdWNjZXNmdWxseQorCQkvKiB0aGUgYWRhcHRlciB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkKIAkJICAgc2F2ZSB0aGUgbWFwcGluZyBmb3IgZnV0dXJlIHVzZSAqLwogCQlocGlfZW50cnlfcG9pbnRzW2hyLnUucy5hZGFwdGVyX2luZGV4XSA9IGVudHJ5X3BvaW50X2Z1bmM7CiAJCS8qIHByZXBhcmUgYWRhcHRlciAocHJlLW9wZW4gc3RyZWFtcyBldGMuKSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuaCBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmgKaW5kZXggZWNiOGY0ZC4uMDJmNmUwOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuaAorKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5oCkBAIC0xMDQsNyArMTA0LDcgQEAKICNkZWZpbmUgTUlYX1BMQVlCKHgpICh2b3J0ZXgtPm1peHBsYXliW3hdKQogI2RlZmluZSBNSVhfU1BESUYoeCkgKHZvcnRleC0+bWl4c3BkaWZbeF0pCiAKLSNkZWZpbmUgTlJfV1RQQiAweDIwCQkvKiBXVCBjaGFubmVscyBwZXIgZWFoYyBiYW5rLiAqLworI2RlZmluZSBOUl9XVFBCIDB4MjAJCS8qIFdUIGNoYW5uZWxzIHBlciBlYWNoIGJhbmsuICovCiAKIC8qIFN0cnVjdHMgKi8KIHR5cGVkZWYgc3RydWN0IHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2EzZC5jIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfYTNkLmMKaW5kZXggZjRhYThmZi4uOWFlOGIzYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfYTNkLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfYTNkLmMKQEAgLTUzLDcgKzUzLDcgQEAKIH0KIAogI2VuZGlmCi0vKiBBdG1vc3BoZXJpYyBhYnNvcmJ0aW9uLiAqLworLyogQXRtb3NwaGVyaWMgYWJzb3JwdGlvbi4gKi8KIAogc3RhdGljIHZvaWQKIGEzZHNyY19TZXRBdG1vc1RhcmdldChhM2RzcmNfdCAqIGEsIHNob3J0IGFhLCBzaG9ydCBiLCBzaG9ydCBjLCBzaG9ydCBkLApAQCAtODM1LDcgKzgzNSw3IEBACiAJCXBhcmFtc1tpXSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2ldOwogCS8qIFRyYW5zbGF0ZSBnZW5lcmljIGZpbHRlciBwYXJhbXMgdG8gYTNkIGZpbHRlciBwYXJhbXMuICovCiAJdm9ydGV4X2EzZF90cmFuc2xhdGVfZmlsdGVyKGEtPmZpbHRlciwgcGFyYW1zKTsKLQkvKiBBdG1vc3BoZXJpYyBhYnNvcmJ0aW9uIGFuZCBmaWx0ZXJpbmcuICovCisJLyogQXRtb3NwaGVyaWMgYWJzb3JwdGlvbiBhbmQgZmlsdGVyaW5nLiAqLwogCWEzZHNyY19TZXRBdG1vc1RhcmdldChhLCBhLT5maWx0ZXJbMF0sCiAJCQkgICAgICBhLT5maWx0ZXJbMV0sIGEtPmZpbHRlclsyXSwKIAkJCSAgICAgIGEtPmZpbHRlclszXSwgYS0+ZmlsdGVyWzRdKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3BjbS5jIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfcGNtLmMKaW5kZXggNTQzOWQ2Ni4uNjJlOTU5MSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfcGNtLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfcGNtLmMKQEAgLTQ0LDEwICs0NCwxMCBAQAogCS5jaGFubmVsc19taW4gPSAxLAogCS5jaGFubmVsc19tYXggPSAyLAogCS5idWZmZXJfYnl0ZXNfbWF4ID0gMHgxMDAwMCwKLQkucGVyaW9kX2J5dGVzX21pbiA9IDB4MSwKKwkucGVyaW9kX2J5dGVzX21pbiA9IDB4MjAsCiAJLnBlcmlvZF9ieXRlc19tYXggPSAweDEwMDAsCiAJLnBlcmlvZHNfbWluID0gMiwKLQkucGVyaW9kc19tYXggPSAzMiwKKwkucGVyaW9kc19tYXggPSAxMDI0LAogfTsKIAogI2lmbmRlZiBDSElQX0FVODgyMApAQCAtMTQwLDYgKzE0MCw5IEBACiAJCQkJCVNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RfQllURVMpKSA8IDApCiAJCXJldHVybiBlcnI7CiAKKwlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfc3RlcChydW50aW1lLCAwLAorCQkJCQlTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX0JZVEVTLCA2NCk7CisKIAlpZiAoVk9SVEVYX1BDTV9UWVBFKHN1YnN0cmVhbS0+cGNtKSAhPSBWT1JURVhfUENNX1dUKSB7CiAjaWZuZGVmIENISVBfQVU4ODIwCiAJCWlmIChWT1JURVhfUENNX1RZUEUoc3Vic3RyZWFtLT5wY20pID09IFZPUlRFWF9QQ01fQTNEKSB7CkBAIC01MTUsNyArNTE4LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBpZHggaW5kaWNhdGVzIHdoaWNoIGtpbmQgb2YgUENNIGRldmljZS4gQURCLCBTUERJRiwgSTJTIGFuZCBBM0Qgc2hhcmUgdGhlIAotCSAqIHNhbWUgZG1hIGVuZ2luZS4gV1QgdXNlcyBpdCBvd24gc2VwYXJhdGUgZG1hIGVuZ2luZSB3aGNpaCBjYW50IGNhcHR1cmUuICovCisJICogc2FtZSBkbWEgZW5naW5lLiBXVCB1c2VzIGl0IG93biBzZXBhcmF0ZSBkbWEgZW5naW5lIHdoaWNoIGNhbid0IGNhcHR1cmUuICovCiAJaWYgKGlkeCA9PSBWT1JURVhfUENNX0FEQikKIAkJbnJfY2FwdCA9IG5yOwogCWVsc2UKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9henQzMzI4LmMgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCmluZGV4IDU3MTVjNGQwLi45YjdhNjM0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXp0MzMyOC5jCisrKyBiL3NvdW5kL3BjaS9henQzMzI4LmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogICogIFBvc3NpYmxlIHJlbWVkaWVzOgogICogIC0gdXNlIHNwZWFrZXIgKGFtcGxpZmllcikgb3V0cHV0IGluc3RlYWQgb2YgaGVhZHBob25lIG91dHB1dAogICogICAgKGluIGNhc2UgY3JhY2tsaW5nIGlzIGR1ZSB0byBvdmVybG9hZGVkIG91dHB1dCBjbGlwcGluZykKLSAqICAtIHBsdWcgY2FyZCBpbnRvIGEgZGlmZmVyZW50IFBDSSBzbG90LCBwcmVmZXJyYWJseSBvbmUgdGhhdCBpc24ndCBzaGFyZWQKKyAqICAtIHBsdWcgY2FyZCBpbnRvIGEgZGlmZmVyZW50IFBDSSBzbG90LCBwcmVmZXJhYmx5IG9uZSB0aGF0IGlzbid0IHNoYXJlZAogICogICAgdG9vIG11Y2ggKHRoaXMgaGVscHMgYSBsb3QsIGJ1dCBub3QgY29tcGxldGVseSEpCiAgKiAgLSBnZXQgcmlkIG9mIFBDSSBWR0EgY2FyZCwgdXNlIEFHUCBpbnN0ZWFkCiAgKiAgLSB1cGdyYWRlIG9yIGRvd25ncmFkZSBCSU9TCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNi5oIGIvc291bmQvcGNpL2NhMDEwNi9jYTAxMDYuaAppbmRleCBmYzUzYjliLi5lOGU4Y2NjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNi5oCisrKyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2LmgKQEAgLTUxLDcgKzUxLDcgQEAKICAqICAgIEFkZCBzdXBwb3J0IGZvciBtdXRlIGNvbnRyb2wgb24gU0IgTGl2ZSAyNGJpdCAoY2FyZHMgdy8gU1BJIERBQykKICAqCiAgKgotICogIFRoaXMgY29kZSB3YXMgaW5pdGFsbHkgYmFzZWQgb24gY29kZSBmcm9tIEFMU0EncyBlbXUxMGsxeC5jIHdoaWNoIGlzOgorICogIFRoaXMgY29kZSB3YXMgaW5pdGlhbGx5IGJhc2VkIG9uIGNvZGUgZnJvbSBBTFNBJ3MgZW11MTBrMXguYyB3aGljaCBpczoKICAqICBDb3B5cmlnaHQgKGMpIGJ5IEZyYW5jaXNjbyBNb3JhZXMgPGZtb3JhZXNAbmMucnIuY29tPgogICoKICAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTE3NSw3ICsxNzUsNyBAQAogLyogQ0EwMTA2IHBvaW50ZXItb2Zmc2V0IHJlZ2lzdGVyIHNldCwgYWNjZXNzZWQgdGhyb3VnaCB0aGUgUFRSIGFuZCBEQVRBIHJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS8qIEluaXRhbGx5IGFsbCByZWdpc3RlcnMgZnJvbSAweDAwIHRvIDB4M2YgaGF2ZSB6ZXJvIGNvbnRlbnRzLiAqLworLyogSW5pdGlhbGx5IGFsbCByZWdpc3RlcnMgZnJvbSAweDAwIHRvIDB4M2YgaGF2ZSB6ZXJvIGNvbnRlbnRzLiAqLwogI2RlZmluZSBQTEFZQkFDS19MSVNUX0FERFIJMHgwMAkJLyogQmFzZSBETUEgYWRkcmVzcyBvZiBhIGxpc3Qgb2YgcG9pbnRlcnMgdG8gZWFjaCBwZXJpb2Qvc2l6ZSAqLwogCQkJCQkJLyogT25lIGxpc3QgZW50cnk6IDQgYnl0ZXMgZm9yIERNQSBhZGRyZXNzLCAKIAkJCQkJCSAqIDQgYnl0ZXMgZm9yIHBlcmlvZF9zaXplIDw8IDE2LgpAQCAtMjIzLDcgKzIyMyw3IEBACiAgKiBUaGUgamFjayBoYXMgNCBwb2xlcy4gSSB3aWxsIGNhbGwgMSAtIFRpcCwgMiAtIE5leHQgdG8gMSwgMyAtIE5leHQgdG8gMiwgNCAtIE5leHQgdG8gMwogICogRm9yIEFuYWxvZ3VlOiAxIC0+IENlbnRlciBTcGVha2VyLCAyIC0+IFN1YiBXb29mZXIsIDMgLT4gR3JvdW5kLCA0IC0+IEdyb3VuZAogICogRm9yIERpZ2l0YWw6IDEgLT4gRnJvbnQgU1BESUYsIDIgLT4gUmVhciBTUERJRiwgMyAtPiBDZW50ZXIvU3Vid29vZmVyIFNQRElGLCA0IC0+IEdyb3VuZC4KLSAqIFN0YW5kYXJkIDQgcG9sZSBWaWRlbyBBL1YgY2FibGUgd2l0aCBSQ0Egb3V0cHV0czogMSAtPiBXaGl0ZSwgMiAtPiBZZWxsb3csIDMgLT4gU2hlaWxkIG9uIGFsbCB0aHJlZSwgNCAtPiBSZWQuCisgKiBTdGFuZGFyZCA0IHBvbGUgVmlkZW8gQS9WIGNhYmxlIHdpdGggUkNBIG91dHB1dHM6IDEgLT4gV2hpdGUsIDIgLT4gWWVsbG93LCAzIC0+IFNoaWVsZCBvbiBhbGwgdGhyZWUsIDQgLT4gUmVkLgogICogU28sIGZyb20gdGhpcyB5b3UgY2FuIHNlZSB0aGF0IHlvdSBjYW5ub3QgdXNlIGEgU3RhbmRhcmQgNCBwb2xlIFZpZGVvIEEvViBjYWJsZSB3aXRoIHRoZSBTQiBBdWRpZ3kgTFMgY2FyZC4KICAqLwogLyogVGhlIEZyb250IFNQRElGIFBDTSBnZXRzIG1peGVkIHdpdGggc2FtcGxlcyBmcm9tIHRoZSBBQzk3IGNvZGVjLCBzbyBjYW4gb25seSB3b3JrIGZvciBTdGVyZW8gUENNIGFuZCBub3QgQUMzL0RUUwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jIGIvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCmluZGV4IDAxYjQ5MzguLjQzNzc1OTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYworKysgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogICogICAgREFDOiBVbmtub3duCiAgKiAgICBUcnlpbmcgdG8gaGFuZGxlIGl0IGxpa2UgdGhlIFNCMDQxMC4KICAqCi0gKiAgVGhpcyBjb2RlIHdhcyBpbml0YWxseSBiYXNlZCBvbiBjb2RlIGZyb20gQUxTQSdzIGVtdTEwazF4LmMgd2hpY2ggaXM6CisgKiAgVGhpcyBjb2RlIHdhcyBpbml0aWFsbHkgYmFzZWQgb24gY29kZSBmcm9tIEFMU0EncyBlbXUxMGsxeC5jIHdoaWNoIGlzOgogICogIENvcHlyaWdodCAoYykgYnkgRnJhbmNpc2NvIE1vcmFlcyA8Zm1vcmFlc0BuYy5yci5jb20+CiAgKgogICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWl4ZXIuYyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21peGVyLmMKaW5kZXggNjMwYWE0OS4uODRmM2Y5MiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWl4ZXIuYworKysgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9taXhlci5jCkBAIC00Miw3ICs0Miw3IEBACiAgKiAgMC4wLjE4CiAgKiAgICBBZGQgc3VwcG9ydCBmb3IgbXV0ZSBjb250cm9sIG9uIFNCIExpdmUgMjRiaXQgKGNhcmRzIHcvIFNQSSBEQUMpCiAgKgotICogIFRoaXMgY29kZSB3YXMgaW5pdGFsbHkgYmFzZWQgb24gY29kZSBmcm9tIEFMU0EncyBlbXUxMGsxeC5jIHdoaWNoIGlzOgorICogIFRoaXMgY29kZSB3YXMgaW5pdGlhbGx5IGJhc2VkIG9uIGNvZGUgZnJvbSBBTFNBJ3MgZW11MTBrMXguYyB3aGljaCBpczoKICAqICBDb3B5cmlnaHQgKGMpIGJ5IEZyYW5jaXNjbyBNb3JhZXMgPGZtb3JhZXNAbmMucnIuY29tPgogICoKICAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X3Byb2MuYyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X3Byb2MuYwppbmRleCBiYTk2NDI4Li5jNjk0NDY0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9wcm9jLmMKKysrIGIvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfcHJvYy5jCkBAIC00Miw3ICs0Miw3IEBACiAgKiAgMC4wLjE4CiAgKiAgICBJbXBsZW1lbnQgc3VwcG9ydCBmb3IgTGluZS1pbiBjYXB0dXJlIG9uIFNCIExpdmUgMjRiaXQuCiAgKgotICogIFRoaXMgY29kZSB3YXMgaW5pdGFsbHkgYmFzZWQgb24gY29kZSBmcm9tIEFMU0EncyBlbXUxMGsxeC5jIHdoaWNoIGlzOgorICogIFRoaXMgY29kZSB3YXMgaW5pdGlhbGx5IGJhc2VkIG9uIGNvZGUgZnJvbSBBTFNBJ3MgZW11MTBrMXguYyB3aGljaCBpczoKICAqICBDb3B5cmlnaHQgKGMpIGJ5IEZyYW5jaXNjbyBNb3JhZXMgPGZtb3JhZXNAbmMucnIuY29tPgogICoKICAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jbWlwY2kuYyBiL3NvdW5kL3BjaS9jbWlwY2kuYwppbmRleCBiNWJiMDM2Li5mNGU1NzM1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY21pcGNpLmMKKysrIGIvc291bmQvcGNpL2NtaXBjaS5jCkBAIC03Myw3ICs3Myw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkoZm1fcG9ydCwgbG9uZywgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGZtX3BvcnQsICJGTSBwb3J0LiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KHNvZnRfYWMzLCBib29sLCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0Moc29mdF9hYzMsICJTb2Z3YXJlLWNvbnZlcnNpb24gb2YgcmF3IFNQRElGIHBhY2tldHMgKG1vZGVsIDAzMyBvbmx5KS4iKTsKK01PRFVMRV9QQVJNX0RFU0Moc29mdF9hYzMsICJTb2Z0d2FyZS1jb252ZXJzaW9uIG9mIHJhdyBTUERJRiBwYWNrZXRzIChtb2RlbCAwMzMgb25seSkuIik7CiAjaWZkZWYgU1VQUE9SVF9KT1lTVElDSwogbW9kdWxlX3BhcmFtX2FycmF5KGpveXN0aWNrX3BvcnQsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGpveXN0aWNrX3BvcnQsICJKb3lzdGljayBwb3J0IGFkZHJlc3MuIik7CkBAIC02NTYsOCArNjU2LDggQEAKIH0KIAogLyoKLSAqIFByb2dyYW0gcGxsIHJlZ2lzdGVyIGJpdHMsIEkgYXNzdW1lIHRoYXQgdGhlIDggcmVnaXN0ZXJzIDB4ZjggdXB0byAweGZmCi0gKiBhcmUgbWFwcGVkIG9udG8gdGhlIDggQURDL0RBQyBzYW1wbGluZyBmcmVxdWVuY3kgd2hpY2ggY2FuIGJlIGNob29zZW4KKyAqIFByb2dyYW0gcGxsIHJlZ2lzdGVyIGJpdHMsIEkgYXNzdW1lIHRoYXQgdGhlIDggcmVnaXN0ZXJzIDB4ZjggdXAgdG8gMHhmZgorICogYXJlIG1hcHBlZCBvbnRvIHRoZSA4IEFEQy9EQUMgc2FtcGxpbmcgZnJlcXVlbmN5IHdoaWNoIGNhbiBiZSBjaG9zZW4KICAqIGF0IHRoZSByZWdpc3RlciBDTV9SRUdfRlVOQ1RSTDEgKDB4MDQpLgogICogUHJvYmxlbTogb3RoZXIgd2F5cyBhcmUgYWxzbyBwb3NzaWJsZSAoYW55IGluZm9ybWF0aW9uIGFib3V0IHRoYXQ/KQogICovCkBAIC02NjYsNyArNjY2LDcgQEAKIAl1bnNpZ25lZCBpbnQgcmVnID0gQ01fUkVHX1BMTCArIHNsb3Q7CiAJLyoKIAkgKiBHdWVzcyB0aGF0IHRoaXMgcHJvZ3JhbXMgYXQgcmVnLiAweDA0IHRoZSBwb3MgMTU6MTMvMTI6MTAKLQkgKiBmb3IgRFNGQy9BU0ZDICgwMDAgdXB0byAxMTEpLgorCSAqIGZvciBEU0ZDL0FTRkMgKDAwMCB1cCB0byAxMTEpLgogCSAqLwogCiAJLyogRklYTUU6IEluaXQgKERvIHdlJ3ZlIHRvIHNldCBhbiBvdGhlciByZWdpc3RlciBmaXJzdCBiZWZvcmUgcHJvZ3JhbW1pbmc/KSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2N0eGZpL2N0YXRjLmMgYi9zb3VuZC9wY2kvY3R4ZmkvY3RhdGMuYwppbmRleCBiOTMyMTU0Li4xM2YzM2MwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3R4ZmkvY3RhdGMuYworKysgYi9zb3VuZC9wY2kvY3R4ZmkvY3RhdGMuYwpAQCAtMTYyNyw3ICsxNjI3LDcgQEAKICAqICBDcmVhdGVzIGFuZCBpbml0aWFsaXplcyBhIGhhcmR3YXJlIG1hbmFnZXIuCiAgKgogICogIENyZWF0ZXMga21hbGxvY2F0ZWQgY3RfYXRjIHN0cnVjdHVyZS4gSW5pdGlhbGl6ZXMgaGFyZHdhcmUuCi0gKiAgUmV0dXJucyAwIGlmIHN1Y2VlZHMsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgZmFpbHMuCisgKiAgUmV0dXJucyAwIGlmIHN1Y2NlZWRzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIGZhaWxzLgogICovCiAKIGludCBfX2RldmluaXQgY3RfYXRjX2NyZWF0ZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBwY2lfZGV2ICpwY2ksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3R4ZmkvY3RodzIwazEuYyBiL3NvdW5kL3BjaS9jdHhmaS9jdGh3MjBrMS5jCmluZGV4IDBjZjQwMGYuLmE1Yzk1N2QgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jdHhmaS9jdGh3MjBrMS5jCisrKyBiL3NvdW5kL3BjaS9jdHhmaS9jdGh3MjBrMS5jCkBAIC0xMjg1LDcgKzEyODUsNyBAQAogCWh3X3dyaXRlXzIwa3goaHcsIFBUUEFMWCwgcHRwX3BoeXNfbG93KTsKIAlod193cml0ZV8yMGt4KGh3LCBQVFBBSFgsIHB0cF9waHlzX2hpZ2gpOwogCWh3X3dyaXRlXzIwa3goaHcsIFRSTkNUTCwgdHJuY3RsKTsKLQlod193cml0ZV8yMGt4KGh3LCBUUk5JUywgMHgyMDBjMDEpOyAvKiByZWFseSBuZWVkZWQ/ICovCisJaHdfd3JpdGVfMjBreChodywgVFJOSVMsIDB4MjAwYzAxKTsgLyogcmVhbGx5IG5lZWRlZD8gKi8KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvbWVtb3J5LmMgYi9zb3VuZC9wY2kvZW11MTBrMS9tZW1vcnkuYwppbmRleCA5NTdhMzExLi5jMjUwNjE0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9tZW1vcnkuYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9tZW1vcnkuYwpAQCAtMjQ4LDcgKzI0OCw3IEBACiAvKgogICogbWFwIHRoZSBnaXZlbiBtZW1vcnkgYmxvY2sgb24gUFRCLgogICogaWYgdGhlIGJsb2NrIGlzIGFscmVhZHkgbWFwcGVkLCB1cGRhdGUgdGhlIGxpbmsgb3JkZXIuCi0gKiBpZiBubyBlbXB0eSBwYWdlcyBhcmUgZm91bmQsIHRyaWVzIHRvIHJlbGVhc2UgdW5zZWQgbWVtb3J5IGJsb2NrcworICogaWYgbm8gZW1wdHkgcGFnZXMgYXJlIGZvdW5kLCB0cmllcyB0byByZWxlYXNlIHVudXNlZCBtZW1vcnkgYmxvY2tzCiAgKiBhbmQgcmV0cnkgdGhlIG1hcHBpbmcuCiAgKi8KIGludCBzbmRfZW11MTBrMV9tZW1ibGtfbWFwKHN0cnVjdCBzbmRfZW11MTBrMSAqZW11LCBzdHJ1Y3Qgc25kX2VtdTEwazFfbWVtYmxrICpibGspCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9wMTZ2LmMgYi9zb3VuZC9wY2kvZW11MTBrMS9wMTZ2LmMKaW5kZXggNjFiOGFiMy4uYTgxZGM0NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvcDE2di5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL3AxNnYuYwpAQCAtNjksNyArNjksNyBAQAogICogICAgQURDOiBQaGlsaXBzIDEzNjFUIChTdGVyZW8gMjRiaXQpCiAgKiAgICBEQUM6IENTNDM4Mi1LICg4LWNoYW5uZWwsIDI0Yml0LCAxOTJLaHopCiAgKgotICogIFRoaXMgY29kZSB3YXMgaW5pdGFsbHkgYmFzZWQgb24gY29kZSBmcm9tIEFMU0EncyBlbXUxMGsxeC5jIHdoaWNoIGlzOgorICogIFRoaXMgY29kZSB3YXMgaW5pdGlhbGx5IGJhc2VkIG9uIGNvZGUgZnJvbSBBTFNBJ3MgZW11MTBrMXguYyB3aGljaCBpczoKICAqICBDb3B5cmlnaHQgKGMpIGJ5IEZyYW5jaXNjbyBNb3JhZXMgPGZtb3JhZXNAbmMucnIuY29tPgogICoKICAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL3AxNnYuaCBiL3NvdW5kL3BjaS9lbXUxMGsxL3AxNnYuaAppbmRleCAwMGY0ODE3Li40ZTBlZTFhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9wMTZ2LmgKKysrIGIvc291bmQvcGNpL2VtdTEwazEvcDE2di5oCkBAIC01OSw3ICs1OSw3IEBACiAgKiAgICBBREM6IFBoaWxpcHMgMTM2MVQgKFN0ZXJlbyAyNGJpdCkKICAqICAgIERBQzogQ1M0MzgyLUsgKDgtY2hhbm5lbCwgMjRiaXQsIDE5MktoeikKICAqCi0gKiAgVGhpcyBjb2RlIHdhcyBpbml0YWxseSBiYXNlZCBvbiBjb2RlIGZyb20gQUxTQSdzIGVtdTEwazF4LmMgd2hpY2ggaXM6CisgKiAgVGhpcyBjb2RlIHdhcyBpbml0aWFsbHkgYmFzZWQgb24gY29kZSBmcm9tIEFMU0EncyBlbXUxMGsxeC5jIHdoaWNoIGlzOgogICogIENvcHlyaWdodCAoYykgYnkgRnJhbmNpc2NvIE1vcmFlcyA8Zm1vcmFlc0BuYy5yci5jb20+CiAgKgogICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtODYsNyArODYsNyBAQAogICogVGhlIHNhbXBsZSByYXRlIGlzIGFsc28gY29udHJvbGxlZCBieSB0aGUgc2FtZSByZWdpc3RlcnMgdGhhdCBjb250cm9sIHRoZSByYXRlIG9mIHRoZSBFTVUxMEsyIHNhbXBsZSByYXRlIGNvbnZlcnRlcnMuCiAgKi8KIAotLyogSW5pdGFsbHkgYWxsIHJlZ2lzdGVycyBmcm9tIDB4MDAgdG8gMHgzZiBoYXZlIHplcm8gY29udGVudHMuICovCisvKiBJbml0aWFsbHkgYWxsIHJlZ2lzdGVycyBmcm9tIDB4MDAgdG8gMHgzZiBoYXZlIHplcm8gY29udGVudHMuICovCiAjZGVmaW5lIFBMQVlCQUNLX0xJU1RfQUREUgkweDAwCQkvKiBCYXNlIERNQSBhZGRyZXNzIG9mIGEgbGlzdCBvZiBwb2ludGVycyB0byBlYWNoIHBlcmlvZC9zaXplICovCiAJCQkJCQkvKiBPbmUgbGlzdCBlbnRyeTogNCBieXRlcyBmb3IgRE1BIGFkZHJlc3MsIAogCQkJCQkJICogNCBieXRlcyBmb3IgcGVyaW9kX3NpemUgPDwgMTYuCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYwppbmRleCAyYzc5ZTk2Li43NTlhZGUxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKQEAgLTkzNyw2ICs5MzcsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9zaHV0dXBfcGlucyk7CiAKKyNpZmRlZiBTTkRfSERBX05FRURTX1JFU1VNRQogLyogUmVzdG9yZSB0aGUgcGluIGNvbnRyb2xzIGNsZWFyZWQgcHJldmlvdXNseSB2aWEgc25kX2hkYV9zaHV0dXBfcGlucygpICovCiBzdGF0aWMgdm9pZCByZXN0b3JlX3NodXR1cF9waW5zKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewpAQCAtOTUzLDYgKzk1NCw3IEBACiAJfQogCWNvZGVjLT5waW5zX3NodXR1cCA9IDA7CiB9CisjZW5kaWYKIAogc3RhdGljIHZvaWQgaW5pdF9oZGFfY2FjaGUoc3RydWN0IGhkYV9jYWNoZV9yZWMgKmNhY2hlLAogCQkJICAgdW5zaWduZWQgaW50IHJlY29yZF9zaXplKTsKQEAgLTEzMjksNiArMTMzMSw3IEBACiAJfQogfQogCisjaWZkZWYgU05EX0hEQV9ORUVEU19SRVNVTUUKIC8qIGNsZWFuIHVwIGFsbCBzdHJlYW1zOyBjYWxsZWQgZnJvbSBzdXNwZW5kICovCiBzdGF0aWMgdm9pZCBoZGFfY2xlYW51cF9hbGxfc3RyZWFtcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTEzNDAsNiArMTM0Myw3IEBACiAJCQlyZWFsbHlfY2xlYW51cF9zdHJlYW0oY29kZWMsIHApOwogCX0KIH0KKyNlbmRpZgogCiAvKgogICogYW1wIGFjY2VzcyBmdW5jdGlvbnMKQEAgLTM2NjEsNyArMzY2NSw3IEBACiAgKiB3aXRoIHRoZSBwcm9wZXIgcGFyYW1ldGVycyBmb3Igc2V0IHVwLgogICogb3BzLmNsZWFudXAgc2hvdWxkIGJlIGNhbGxlZCBpbiBod19mcmVlIGZvciBjbGVhbiB1cCBvZiBzdHJlYW1zLgogICoKLSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWxsLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCiAgKi8KIGludCBfX2RldmluaXQgc25kX2hkYV9idWlsZF9wY21zKHN0cnVjdCBoZGFfYnVzICpidXMpCiB7CkBAIC00ODUxLDcgKzQ4NTUsNyBAQAogICoKICAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLgogICoKLSAqIFRoaXMgZnVjbnRpb24gaXMgZGVmaW5lZCBvbmx5IHdoZW4gUE9XRVJfU0FWRSBpc24ndCBzZXQuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgb25seSB3aGVuIFBPV0VSX1NBVkUgaXNuJ3Qgc2V0LgogICogSW4gdGhlIHBvd2VyLXNhdmUgbW9kZSwgdGhlIGNvZGVjIGlzIHJlc3VtZWQgZHluYW1pY2FsbHkuCiAgKi8KIGludCBzbmRfaGRhX3Jlc3VtZShzdHJ1Y3QgaGRhX2J1cyAqYnVzKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCmluZGV4IDY5ZTMzODYuLmFkOTdkOTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKQEAgLTMwMzUsNiArMzAzNSw3IEBACiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjFjNiwgIlRoaW5rcGFkIEVkZ2UgMTMiLCBDWFQ1MDY2X0FTVVMpLAogIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMTVlLCAiTGVub3ZvIFRoaW5rcGFkIiwgQ1hUNTA2Nl9USElOS1BBRCksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjFkYSwgIkxlbm92byBYMjIwIiwgQ1hUNTA2Nl9USElOS1BBRCksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjFkYiwgIkxlbm92byBYMjIwLXRhYmxldCIsIENYVDUwNjZfVEhJTktQQUQpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDM4YWYsICJMZW5vdm8gRzU2MCIsIENYVDUwNjZfQVNVUyksCiAJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxN2FhLCAiTGVub3ZvIiwgQ1hUNTA2Nl9JREVBUEFEKSwgLyogRmFsbGJhY2sgZm9yIExlbm92b3Mgd2l0aG91dCBkb2NrIG1pYyAqLwogCXt9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2hkbWkuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCmluZGV4IDI1MTc3M2UuLjcxNTYxNWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCkBAIC0xMjgwLDYgKzEyODAsMzkgQEAKIAkJCQkJICAgICBzdHJlYW1fdGFnLCBmb3JtYXQsIHN1YnN0cmVhbSk7CiB9CiAKK3N0YXRpYyB2b2lkIG52aGRtaV84Y2hfN3hfc2V0X2luZm9fZnJhbWVfcGFyYW1ldGVycyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJCSAgICBpbnQgY2hhbm5lbHMpCit7CisJdW5zaWduZWQgaW50IGNoYW5tYXNrOworCWludCBjaGFuID0gY2hhbm5lbHMgPyAoY2hhbm5lbHMgLSAxKSA6IDE7CisKKwlzd2l0Y2ggKGNoYW5uZWxzKSB7CisJZGVmYXVsdDoKKwljYXNlIDA6CisJY2FzZSAyOgorCQljaGFubWFzayA9IDB4MDA7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJY2hhbm1hc2sgPSAweDA4OworCQlicmVhazsKKwljYXNlIDY6CisJCWNoYW5tYXNrID0gMHgwYjsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQljaGFubWFzayA9IDB4MTM7CisJCWJyZWFrOworCX0KKworCS8qIFNldCB0aGUgYXVkaW8gaW5mb2ZyYW1lIGNoYW5uZWwgYWxsb2NhdGlvbiBhbmQgY2hlY2tzdW0gZmllbGRzLiAgVGhlCisJICogY2hhbm5lbCBjb3VudCBpcyBjb21wdXRlZCBpbXBsaWNpdGx5IGJ5IHRoZSBoYXJkd2FyZS4gKi8KKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDEsIDAsCisJCQlOdl9WRVJCX1NFVF9DaGFubmVsX0FsbG9jYXRpb24sIGNoYW5tYXNrKTsKKworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MSwgMCwKKwkJCU52X1ZFUkJfU0VUX0luZm9fRnJhbWVfQ2hlY2tzdW0sCisJCQkoMHg3MSAtIGNoYW4gLSBjaGFubWFzaykpOworfQorCiBzdGF0aWMgaW50IG52aGRtaV84Y2hfN3hfcGNtX2Nsb3NlKHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaGluZm8sCiAJCQkJICAgc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCkBAIC0xMjk4LDYgKzEzMzEsMTAgQEAKIAkJCQlBQ19WRVJCX1NFVF9TVFJFQU1fRk9STUFULCAwKTsKIAl9CiAKKwkvKiBUaGUgYXVkaW8gaGFyZHdhcmUgc2VuZHMgYSBjaGFubmVsIGNvdW50IG9mIDB4NyAoOGNoKSB3aGVuIGFsbCB0aGUKKwkgKiBzdHJlYW1zIGFyZSBkaXNhYmxlZC4gKi8KKwludmhkbWlfOGNoXzd4X3NldF9pbmZvX2ZyYW1lX3BhcmFtZXRlcnMoY29kZWMsIDgpOworCiAJcmV0dXJuIHNuZF9oZGFfbXVsdGlfb3V0X2RpZ19jbG9zZShjb2RlYywgJnNwZWMtPm11bHRpb3V0KTsKIH0KIApAQCAtMTMwOCwzNyArMTM0NSwxNiBAQAogCQkJCSAgICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJaW50IGNoczsKLQl1bnNpZ25lZCBpbnQgZGF0YURDQzEsIGRhdGFEQ0MyLCBjaGFuLCBjaGFubWFzaywgY2hhbm5lbF9pZDsKKwl1bnNpZ25lZCBpbnQgZGF0YURDQzEsIGRhdGFEQ0MyLCBjaGFubmVsX2lkOwogCWludCBpOwogCiAJbXV0ZXhfbG9jaygmY29kZWMtPnNwZGlmX211dGV4KTsKIAogCWNocyA9IHN1YnN0cmVhbS0+cnVudGltZS0+Y2hhbm5lbHM7Ci0JY2hhbiA9IGNocyA/IChjaHMgLSAxKSA6IDE7CiAKLQlzd2l0Y2ggKGNocykgewotCWRlZmF1bHQ6Ci0JY2FzZSAwOgotCWNhc2UgMjoKLQkJY2hhbm1hc2sgPSAweDAwOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCWNoYW5tYXNrID0gMHgwODsKLQkJYnJlYWs7Ci0JY2FzZSA2OgotCQljaGFubWFzayA9IDB4MGI7Ci0JCWJyZWFrOwotCWNhc2UgODoKLQkJY2hhbm1hc2sgPSAweDEzOwotCQlicmVhazsKLQl9CiAJZGF0YURDQzEgPSBBQ19ESUcxX0VOQUJMRSB8IEFDX0RJRzFfQ09QWVJJR0hUOwogCWRhdGFEQ0MyID0gMHgyOwogCi0JLyogc2V0IHRoZSBBdWRpbyBJbmZvckZyYW1lIENoYW5uZWwgQWxsb2NhdGlvbiAqLwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MSwgMCwKLQkJCU52X1ZFUkJfU0VUX0NoYW5uZWxfQWxsb2NhdGlvbiwgY2hhbm1hc2spOwotCiAJLyogdHVybiBvZmYgU1BESUYgb25jZTsgb3RoZXJ3aXNlIHRoZSBJRUM5NTggYml0cyB3b24ndCBiZSB1cGRhdGVkICovCiAJaWYgKGNvZGVjLT5zcGRpZl9zdGF0dXNfcmVzZXQgJiYgKGNvZGVjLT5zcGRpZl9jdGxzICYgQUNfRElHMV9FTkFCTEUpKQogCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLApAQCAtMTQxMywxMCArMTQyOSw3IEBACiAJCX0KIAl9CiAKLQkvKiBzZXQgdGhlIEF1ZGlvIEluZm8gRnJhbWUgQ2hlY2tzdW0gKi8KLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDEsIDAsCi0JCQlOdl9WRVJCX1NFVF9JbmZvX0ZyYW1lX0NoZWNrc3VtLAotCQkJKDB4NzEgLSBjaGFuIC0gY2hhbm1hc2spKTsKKwludmhkbWlfOGNoXzd4X3NldF9pbmZvX2ZyYW1lX3BhcmFtZXRlcnMoY29kZWMsIGNocyk7CiAKIAltdXRleF91bmxvY2soJmNvZGVjLT5zcGRpZl9tdXRleCk7CiAJcmV0dXJuIDA7CkBAIC0xNTEyLDYgKzE1MjUsMTEgQEAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSA4OwogCXNwZWMtPnBjbV9wbGF5YmFjayA9ICZudmhkbWlfcGNtX3BsYXliYWNrXzhjaF83eDsKIAljb2RlYy0+cGF0Y2hfb3BzID0gbnZoZG1pX3BhdGNoX29wc184Y2hfN3g7CisKKwkvKiBJbml0aWFsaXplIHRoZSBhdWRpbyBpbmZvZnJhbWUgY2hhbm5lbCBtYXNrIGFuZCBjaGVja3N1bSB0byBzb21ldGhpbmcKKwkgKiB2YWxpZCAqLworCW52aGRtaV84Y2hfN3hfc2V0X2luZm9fZnJhbWVfcGFyYW1ldGVycyhjb2RlYywgOCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCAxMmM2ZjQ1Li5jODI5NzlhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtNTQ5LDcgKzU0OSw3IEBACiAKIC8qCiAgKiBDb250cm9sIHRoZSBtb2RlIG9mIHBpbiB3aWRnZXQgc2V0dGluZ3MgdmlhIHRoZSBtaXhlci4gICJwYyIgaXMgdXNlZAotICogaW5zdGVhZCBvZiAiJSIgdG8gYXZvaWQgY29uc2VxdWVuY2VzIG9mIGFjY2lkZW50bHkgdHJlYXRpbmcgdGhlICUgYXMKKyAqIGluc3RlYWQgb2YgIiUiIHRvIGF2b2lkIGNvbnNlcXVlbmNlcyBvZiBhY2NpZGVudGFsbHkgdHJlYXRpbmcgdGhlICUgYXMKICAqIGJlaW5nIHBhcnQgb2YgYSBmb3JtYXQgc3BlY2lmaWVyLiAgTWF4aW11bSBhbGxvd2VkIGxlbmd0aCBvZiBhIHZhbHVlIGlzCiAgKiA2MyBjaGFyYWN0ZXJzIHBsdXMgTlVMTCB0ZXJtaW5hdG9yLgogICoKQEAgLTE3MDQsMTEgKzE3MDQsMTEgQEAKIAkJCQkgICBjb2RlYy0+Y2hpcF9uYW1lLCBmaXgtPnR5cGUpOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKCFmaXhbaWRdLmNoYWluZWQpCisJCWlmICghZml4LT5jaGFpbmVkKQogCQkJYnJlYWs7CiAJCWlmICgrK2RlcHRoID4gMTApCiAJCQlicmVhazsKLQkJaWQgPSBmaXhbaWRdLmNoYWluX2lkOworCQlpZCA9IGZpeC0+Y2hhaW5faWQ7CiAJfQogfQogCkBAIC01NjQ1LDYgKzU2NDUsNyBAQAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGJlZXBfd2hpdGVfbGlzdFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgyOWYsICJBU1VTIiwgMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODNjZSwgIkVlZVBDIiwgMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODMxYSwgIkVlZVBDIiwgMSksCiAJU05EX1BDSV9RVUlSSygweDgwODYsIDB4ZDYxMywgIkludGVsIiwgMSksCiAJe30KIH07CkBAIC05ODM2LDcgKzk4MzcsNyBAQAogCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDIwZCwgIkRlbGwgSW5zcGlyb24gNTMwIiwgQUxDODg4XzZTVF9ERUxMKSwKIAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhM2QsICJIUCBQYXZpbGxpb24iLCBBTEM4ODNfNlNUX0RJRyksCisJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmEzZCwgIkhQIFBhdmlsaW9uIiwgQUxDODgzXzZTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhNGYsICJIUCBTYW1iYSIsIEFMQzg4OF8zU1RfSFApLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhNjAsICJIUCBMdWNrbm93IiwgQUxDODg4XzNTVF9IUCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmE2MSwgIkhQIE5ldHRsZSIsIEFMQzg4M182U1RfRElHKSwKQEAgLTk4NjMsNiArOTg2NCw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwNzEsIDB4ODI1OCwgIkV2ZXNoYW0gVm95YWVnZXIiLCBBTEM4ODNfTEFQVE9QX0VBUEQpLAogCVNORF9QQ0lfUVVJUksoMHgxMGYxLCAweDIzNTAsICJUWUFOLVMyMzUwIiwgQUxDODg4XzZTVF9ERUxMKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA4ZSwgMHg1MzRkLCBOVUxMLCBBTEM4ODNfM1NUXzZjaCksCisJU05EX1BDSV9RVUlSSygweDE0NTgsIDB4YTAwMiwgIkdpZ2FieXRlIFAzNSBEUzNSIiwgQUxDODgyXzZTVF9ESUcpLAogCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4MDM0OSwgIk1TSSIsIEFMQzg4M19UQVJHQV8yY2hfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHgwNDBkLCAiTVNJIiwgQUxDODgzX1RBUkdBXzJjaF9ESUcpLApAQCAtMTA2OTksNyArMTA3MDEsNiBAQAogCVBJTkZJWF9MRU5PVk9fWTUzMCwKIAlQSU5GSVhfUEJfTTUyMTAsCiAJUElORklYX0FDRVJfQVNQSVJFXzc3MzYsCi0JUElORklYX0dJR0FCWVRFXzg4MEdNLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhbGNfZml4dXAgYWxjODgyX2ZpeHVwc1tdID0gewpAQCAtMTA3MzEsMTMgKzEwNzMyLDYgQEAKIAkJLnR5cGUgPSBBTENfRklYVVBfU0tVLAogCQkudi5za3UgPSBBTENfRklYVVBfU0tVX0lHTk9SRSwKIAl9LAotCVtQSU5GSVhfR0lHQUJZVEVfODgwR01dID0gewotCQkudHlwZSA9IEFMQ19GSVhVUF9QSU5TLAotCQkudi5waW5zID0gKGNvbnN0IHN0cnVjdCBhbGNfcGluY2ZnW10pIHsKLQkJCXsgMHgxNCwgMHgxMTE0NDEwIH0sIC8qIHNldCBhcyBzcGVha2VyICovCi0JCQl7IH0KLQkJfQotCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjODgyX2ZpeHVwX3RibFtdID0gewpAQCAtMTA3NDUsNyArMTA3MzksNiBAQAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDNhMGQsICJMZW5vdm8gWTUzMCIsIFBJTkZJWF9MRU5PVk9fWTUzMCksCiAJU05EX1BDSV9RVUlSSygweDE0N2IsIDB4MTA3YSwgIkFiaXQgQVc5RC1NQVgiLCBQSU5GSVhfQUJJVF9BVzlEX01BWCksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDI5NiwgIkFjZXIgQXNwaXJlIDc3MzZ6IiwgUElORklYX0FDRVJfQVNQSVJFXzc3MzYpLAotCVNORF9QQ0lfUVVJUksoMHgxNDU4LCAweGEwMDIsICJHaWdhYnl0ZSIsIFBJTkZJWF9HSUdBQllURV84ODBHTSksCiAJe30KIH07CiAKQEAgLTE0MTI0LDcgKzE0MTE3LDcgQEAKIH07CiAKIHN0YXRpYyBoZGFfbmlkX3QgYWxjMjY5X2FkY19jYW5kaWRhdGVzW10gPSB7Ci0JMHgwOCwgMHgwOSwgMHgwNywKKwkweDA4LCAweDA5LCAweDA3LCAweDExLAogfTsKIAogI2RlZmluZSBhbGMyNjlfbW9kZXMJCWFsYzI2MF9tb2RlcwpAQCAtMTQ4NjgsNiArMTQ4NjEsMjMgQEAKIAlhbGNfd3JpdGVfY29lZl9pZHgoY29kZWMsIDB4MWUsIGNvZWYgfCAweDgwKTsKIH0KIAorc3RhdGljIHZvaWQgYWxjMjcxX2ZpeHVwX2RtaWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgYWxjX2ZpeHVwICpmaXgsIGludCBhY3Rpb24pCit7CisJc3RhdGljIHN0cnVjdCBoZGFfdmVyYiB2ZXJic1tdID0geworCQl7MHgyMCwgQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgMHgwZH0sCisJCXsweDIwLCBBQ19WRVJCX1NFVF9QUk9DX0NPRUYsIDB4NDAwMH0sCisJCXt9CisJfTsKKwl1bnNpZ25lZCBpbnQgY2ZnOworCisJaWYgKHN0cmNtcChjb2RlYy0+Y2hpcF9uYW1lLCAiQUxDMjcxWCIpKQorCQlyZXR1cm47CisJY2ZnID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAweDEyKTsKKwlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KGNmZykgPT0gQUNfSkFDS19QT1JUX0ZJWEVEKQorCQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlKGNvZGVjLCB2ZXJicyk7Cit9CisKIGVudW0gewogCUFMQzI2OV9GSVhVUF9TT05ZX1ZBSU8sCiAJQUxDMjc1X0ZJWFVQX1NPTllfVkFJT19HUElPMiwKQEAgLTE0ODc2LDYgKzE0ODg2LDcgQEAKIAlBTEMyNjlfRklYVVBfQVNVU19HNzNKVywKIAlBTEMyNjlfRklYVVBfTEVOT1ZPX0VBUEQsCiAJQUxDMjc1X0ZJWFVQX1NPTllfSFdFUSwKKwlBTEMyNzFfRklYVVBfRE1JQywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWxjX2ZpeHVwIGFsYzI2OV9maXh1cHNbXSA9IHsKQEAgLTE0OTI5LDcgKzE0OTQwLDExIEBACiAJCS52LmZ1bmMgPSBhbGMyNjlfZml4dXBfaHdlcSwKIAkJLmNoYWluZWQgPSB0cnVlLAogCQkuY2hhaW5faWQgPSBBTEMyNzVfRklYVVBfU09OWV9WQUlPX0dQSU8yCi0JfQorCX0sCisJW0FMQzI3MV9GSVhVUF9ETUlDXSA9IHsKKwkJLnR5cGUgPSBBTENfRklYVVBfRlVOQywKKwkJLnYuZnVuYyA9IGFsYzI3MV9maXh1cF9kbWljLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjMjY5X2ZpeHVwX3RibFtdID0gewpAQCAtMTQ5MzgsNiArMTQ5NTMsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwODQsICJTb255IFZBSU8iLCBBTEMyNzVfRklYVVBfU09OWV9IV0VRKSwKIAlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDEwNGQsICJTb255IFZBSU8iLCBBTEMyNjlfRklYVVBfU09OWV9WQUlPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNDcwLCAiRGVsbCBNMTAxeiIsIEFMQzI2OV9GSVhVUF9ERUxMX00xMDFaKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDEwMjUsICJBY2VyIEFzcGlyZSIsIEFMQzI3MV9GSVhVUF9ETUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMGYyLCAiVGhpbmtwYWQgU0w0MTAvNTEwIiwgQUxDMjY5X0ZJWFVQX1NLVV9JR05PUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxNWUsICJUaGlua3BhZCBMNTEyIiwgQUxDMjY5X0ZJWFVQX1NLVV9JR05PUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxYjgsICJUaGlua3BhZCBFZGdlIDE0IiwgQUxDMjY5X0ZJWFVQX1NLVV9JR05PUkUpLApAQCAtMTg3ODIsNiArMTg3OTgsOCBAQAogCQkgICAgICBBTEM2NjJfM1NUXzZjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmNmUsICJUb3NoaWJhIE5CMjB4IiwgQUxDNjYyX0FVVE8pLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGNhMDAsICJTYW1zdW5nIE5DMTAiLCBBTEMyNzJfU0FNU1VOR19OQzEwKSwKKwlTTkRfUENJX1FVSVJLKDB4MTQ1OCwgMHhhMDAyLCAiR2lnYWJ5dGUgOTQ1R0NNLVMyTCIsCisJCSAgICAgIEFMQzY2Ml8zU1RfNmNoX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDE1MmQsIDB4MjMwNCwgIlF1YW50YSBXSDEiLCBBTEM2NjNfQVNVU19IMTMpLAogCVNORF9QQ0lfUVVJUksoMHgxNTY1LCAweDgyMGYsICJCaW9zdGFyIFRBNzgwRyBNMisiLCBBTEM2NjJfM1NUXzZjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxNjMxLCAweGMxMGMsICJQQiBSUzY1IiwgQUxDNjYzX0FTVVNfTTUxVkEpLApAQCAtMTk0NTUsNyArMTk0NzMsNyBAQAogCUFMQzY2Ml9GSVhVUF9JREVBUEFELAogCUFMQzI3Ml9GSVhVUF9NQVJJTywKIAlBTEM2NjJfRklYVVBfQ1pDX1AxMFQsCi0JQUxDNjYyX0ZJWFVQX0dJR0FCWVRFLAorCUFMQzY2Ml9GSVhVUF9TS1VfSUdOT1JFLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhbGNfZml4dXAgYWxjNjYyX2ZpeHVwc1tdID0gewpAQCAtMTk0ODQsMjAgKzE5NTAyLDE3IEBACiAJCQl7fQogCQl9CiAJfSwKLQlbQUxDNjYyX0ZJWFVQX0dJR0FCWVRFXSA9IHsKLQkJLnR5cGUgPSBBTENfRklYVVBfUElOUywKLQkJLnYucGlucyA9IChjb25zdCBzdHJ1Y3QgYWxjX3BpbmNmZ1tdKSB7Ci0JCQl7IDB4MTQsIDB4MTExNDQxMCB9LCAvKiBzZXQgYXMgc3BlYWtlciAqLwotCQkJeyB9Ci0JCX0KKwlbQUxDNjYyX0ZJWFVQX1NLVV9JR05PUkVdID0geworCQkudHlwZSA9IEFMQ19GSVhVUF9TS1UsCisJCS52LnNrdSA9IEFMQ19GSVhVUF9TS1VfSUdOT1JFLAogCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjNjYyX2ZpeHVwX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAzMDgsICJBY2VyIEFzcGlyZSA4OTQyRyIsIEFMQzY2Ml9GSVhVUF9BU1BJUkUpLAorCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAzMWMsICJHYXRld2F5IE5WNzkiLCBBTEM2NjJfRklYVVBfU0tVX0lHTk9SRSksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDM4YiwgIkFjZXIgQXNwaXJlIDg5NDNHIiwgQUxDNjYyX0ZJWFVQX0FTUElSRSksCiAJU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzA1MSwgIlNhbXN1bmcgUjcyMCIsIEFMQzY2Ml9GSVhVUF9JREVBUEFEKSwKLQlTTkRfUENJX1FVSVJLKDB4MTQ1OCwgMHhhMDAyLCAiR2lnYWJ5dGUiLCBBTEM2NjJfRklYVVBfR0lHQUJZVEUpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDM4YWYsICJMZW5vdm8gSWRlYXBhZCBZNTUwUCIsIEFMQzY2Ml9GSVhVUF9JREVBUEFEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzYTBkLCAiTGVub3ZvIElkZWFwYWQgWTU1MCIsIEFMQzY2Ml9GSVhVUF9JREVBUEFEKSwKIAlTTkRfUENJX1FVSVJLKDB4MWIzNSwgMHgyMjA2LCAiQ1pDIFAxMFQiLCBBTEM2NjJfRklYVVBfQ1pDX1AxMFQpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCmluZGV4IDA1ZmNkNjAuLjk0ZDE5YzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKQEAgLTI0NzUsNyArMjQ3NSw3IEBACiAgCiAJc3BlYy0+aHBfc3dpdGNoID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPyBuaWQgOiAwOwogCi0JLyogY2hlY2sgdG8gYmUgc3VyZSB0aGF0IHRoZSBwb3J0cyBhcmUgdXB0byBkYXRlIHdpdGgKKwkvKiBjaGVjayB0byBiZSBzdXJlIHRoYXQgdGhlIHBvcnRzIGFyZSB1cCB0byBkYXRlIHdpdGgKIAkgKiBzd2l0Y2ggY2hhbmdlcwogCSAqLwogCXN0YWNfaXNzdWVfdW5zb2xfZXZlbnQoY29kZWMsIG5pZCk7CkBAIC0zNDA4LDYgKzM0MDgsOSBAQAogCWhkYV9uaWRfdCBjb25uW0hEQV9NQVhfTlVNX0lOUFVUU107CiAJaW50IGksIG51bXM7CiAKKwlpZiAoIShnZXRfd2NhcHMoY29kZWMsIG11eCkgJiBBQ19XQ0FQX0NPTk5fTElTVCkpCisJCXJldHVybiAtMTsKKwogCW51bXMgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbXV4LCBjb25uLCBBUlJBWV9TSVpFKGNvbm4pKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtczsgaSsrKQogCQlpZiAoY29ubltpXSA9PSBuaWQpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYwppbmRleCAxMzcxYjU3Li4wOTk3MDMxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMKQEAgLTEyOTIsMTQgKzEyOTIsMTggQEAKIHsKIAlpbnQgaTsKIAlzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkIGlkOwotCWNvbnN0IGNoYXIgKmxhYmVsc1tdID0geyJNaWMiLCAiRnJvbnQgTWljIiwgIkxpbmUifTsKKwljb25zdCBjaGFyICpsYWJlbHNbXSA9IHsiTWljIiwgIkZyb250IE1pYyIsICJMaW5lIiwgIlJlYXIgTWljIn07CisJc3RydWN0IHNuZF9rY29udHJvbCAqY3RsOwogCiAJbWVtc2V0KCZpZCwgMCwgc2l6ZW9mKGlkKSk7CiAJaWQuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUjsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsYWJlbHMpOyBpKyspIHsKIAkJc3ByaW50ZihpZC5uYW1lLCAiJXMgUGxheWJhY2sgVm9sdW1lIiwgbGFiZWxzW2ldKTsKLQkJc25kX2N0bF9ub3RpZnkoY29kZWMtPmJ1cy0+Y2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUsCi0JCQkgICAgICAgJmlkKTsKKwkJY3RsID0gc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgaWQubmFtZSk7CisJCWlmIChjdGwpCisJCQlzbmRfY3RsX25vdGlmeShjb2RlYy0+YnVzLT5jYXJkLAorCQkJCQlTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSwKKwkJCQkJJmN0bC0+aWQpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvYXVyZW9uLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9hdXJlb24uYwppbmRleCAyZjYyNTIyLi4zZTRmOGMxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9hdXJlb24uYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9hdXJlb24uYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJdWRlbGF5KDEwMCk7CiAJLyoKIAkgKiBzZW5kIGRldmljZSBhZGRyZXNzLCBjb21tYW5kIGFuZCB2YWx1ZSwKLQkgKiBza2lwcGluZyBhY2sgY3ljbGVzIGluYmV0d2VlbgorCSAqIHNraXBwaW5nIGFjayBjeWNsZXMgaW4gYmV0d2VlbgogCSAqLwogCWZvciAoaiA9IDA7IGogPCAzOyBqKyspIHsKIAkJc3dpdGNoIChqKSB7CkBAIC0yMTQzLDcgKzIxNDMsNyBAQAogCQlpY2UtPm51bV90b3RhbF9hZGNzID0gMjsKIAl9CiAKLQkvKiB0byByZW1lYmVyIHRoZSByZWdpc3RlciB2YWx1ZXMgb2YgQ1M4NDE1ICovCisJLyogdG8gcmVtZW1iZXIgdGhlIHJlZ2lzdGVyIHZhbHVlcyBvZiBDUzg0MTUgKi8KIAlpY2UtPmFrbSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfYWttNHh4eCksIEdGUF9LRVJORUwpOwogCWlmICghaWNlLT5ha20pCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCmluZGV4IDRmYzZkOGIuLmY0NTk0ZDcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKQEAgLTI3NTUsNyArMjc1NSw3IEBACiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJCWlmIChjLT5tcHU0MDFfMV9uYW1lKQotCQkJLyogIFByZWZlcmVkIG5hbWUgYXZhaWxhYmxlIGluIGNhcmRfaW5mbyAqLworCQkJLyogIFByZWZlcnJlZCBuYW1lIGF2YWlsYWJsZSBpbiBjYXJkX2luZm8gKi8KIAkJCXNucHJpbnRmKGljZS0+cm1pZGlbMF0tPm5hbWUsCiAJCQkJIHNpemVvZihpY2UtPnJtaWRpWzBdLT5uYW1lKSwKIAkJCQkgIiVzICVkIiwgYy0+bXB1NDAxXzFfbmFtZSwgY2FyZC0+bnVtYmVyKTsKQEAgLTI3NzIsNyArMjc3Miw3IEBACiAJCQkJcmV0dXJuIGVycjsKIAkJCX0KIAkJCWlmIChjLT5tcHU0MDFfMl9uYW1lKQotCQkJCS8qICBQcmVmZXJlZCBuYW1lIGF2YWlsYWJsZSBpbiBjYXJkX2luZm8gKi8KKwkJCQkvKiAgUHJlZmVycmVkIG5hbWUgYXZhaWxhYmxlIGluIGNhcmRfaW5mbyAqLwogCQkJCXNucHJpbnRmKGljZS0+cm1pZGlbMV0tPm5hbWUsCiAJCQkJCSBzaXplb2YoaWNlLT5ybWlkaVsxXS0+bmFtZSksCiAJCQkJCSAiJXMgJWQiLCBjLT5tcHU0MDFfMl9uYW1lLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvcG9udGlzLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9wb250aXMuYwppbmRleCBjZGI4NzNmLi45MmMxMTYwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9wb250aXMuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9wb250aXMuYwpAQCAtNzY4LDcgKzc2OCw3IEBACiAJaWNlLT5udW1fdG90YWxfZGFjcyA9IDI7CiAJaWNlLT5udW1fdG90YWxfYWRjcyA9IDI7CiAKLQkvKiB0byByZW1lYmVyIHRoZSByZWdpc3RlciB2YWx1ZXMgKi8KKwkvKiB0byByZW1lbWJlciB0aGUgcmVnaXN0ZXIgdmFsdWVzICovCiAJaWNlLT5ha20gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX2FrbTR4eHgpLCBHRlBfS0VSTkVMKTsKIAlpZiAoISBpY2UtPmFrbSkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9wcm9kaWd5X2hpZmkuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL3Byb2RpZ3lfaGlmaS5jCmluZGV4IDZhOWZlZTMuLjc2NGNjOTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL3Byb2RpZ3lfaGlmaS5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL3Byb2RpZ3lfaGlmaS5jCkBAIC0xMDQ2LDcgKzEwNDYsNyBAQAogCSogZG9uJ3QgY2FsbCBzbmRfaWNlMTcxMl9ncGlvX2dldC9wdXQoKSwgb3RoZXJ3aXNlIGl0J3Mgb3ZlcndyaXR0ZW4KIAkqLwogCWljZS0+Z3Bpby5zYXZlZFswXSA9IDA7Ci0JLyogdG8gcmVtZWJlciB0aGUgcmVnaXN0ZXIgdmFsdWVzICovCisJLyogdG8gcmVtZW1iZXIgdGhlIHJlZ2lzdGVyIHZhbHVlcyAqLwogCiAJaWNlLT5ha20gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX2FrbTR4eHgpLCBHRlBfS0VSTkVMKTsKIAlpZiAoISBpY2UtPmFrbSkKQEAgLTExMjgsNyArMTEyOCw3IEBACiAJKiBkb24ndCBjYWxsIHNuZF9pY2UxNzEyX2dwaW9fZ2V0L3B1dCgpLCBvdGhlcndpc2UgaXQncyBvdmVyd3JpdHRlbgogCSovCiAJaWNlLT5ncGlvLnNhdmVkWzBdID0gMDsKLQkvKiB0byByZW1lYmVyIHRoZSByZWdpc3RlciB2YWx1ZXMgKi8KKwkvKiB0byByZW1lbWJlciB0aGUgcmVnaXN0ZXIgdmFsdWVzICovCiAKIAlpY2UtPmFrbSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfYWttNHh4eCksIEdGUF9LRVJORUwpOwogCWlmICghIGljZS0+YWttKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ludGVsOHgwLmMgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwppbmRleCA2MjlhNTQ5Li42Yzg5NmRiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaW50ZWw4eDAuYworKysgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwpAQCAtNTM0LDcgKzUzNCw3IEBACiAJCXVkZWxheSgxMCk7CiAJfSB3aGlsZSAodGltZS0tKTsKIAotCS8qIGFjY2VzcyB0byBzb21lIGZvcmJpZGRlbiAobm9uIGV4aXN0YW50KSBhYzk3IHJlZ2lzdGVycyB3aWxsIG5vdAorCS8qIGFjY2VzcyB0byBzb21lIGZvcmJpZGRlbiAobm9uIGV4aXN0ZW50KSBhYzk3IHJlZ2lzdGVycyB3aWxsIG5vdAogCSAqIHJlc2V0IHRoZSBzZW1hcGhvcmUuIFNvIGV2ZW4gaWYgeW91IGRvbid0IGdldCB0aGUgc2VtYXBob3JlLCBzdGlsbAogCSAqIGNvbnRpbnVlIHRoZSBhY2Nlc3MuIFdlIGRvbid0IG5lZWQgdGhlIHNlbWFwaG9yZSBhbnl3YXkuICovCiAJc25kX3ByaW50ayhLRVJOX0VSUiAiY29kZWNfc2VtYXBob3JlOiBzZW1hcGhvcmUgaXMgbm90IHJlYWR5IFsweCV4XVsweCV4XVxuIiwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pbnRlbDh4MG0uYyBiL3NvdW5kL3BjaS9pbnRlbDh4MG0uYwppbmRleCAyYWU4ZDI5Li4yNzcwOWYwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKKysrIGIvc291bmQvcGNpL2ludGVsOHgwbS5jCkBAIC0zMzEsNyArMzMxLDcgQEAKIAkJdWRlbGF5KDEwKTsKIAl9IHdoaWxlICh0aW1lLS0pOwogCi0JLyogYWNjZXNzIHRvIHNvbWUgZm9yYmlkZGVuIChub24gZXhpc3RhbnQpIGFjOTcgcmVnaXN0ZXJzIHdpbGwgbm90CisJLyogYWNjZXNzIHRvIHNvbWUgZm9yYmlkZGVuIChub24gZXhpc3RlbnQpIGFjOTcgcmVnaXN0ZXJzIHdpbGwgbm90CiAJICogcmVzZXQgdGhlIHNlbWFwaG9yZS4gU28gZXZlbiBpZiB5b3UgZG9uJ3QgZ2V0IHRoZSBzZW1hcGhvcmUsIHN0aWxsCiAJICogY29udGludWUgdGhlIGFjY2Vzcy4gV2UgZG9uJ3QgbmVlZCB0aGUgc2VtYXBob3JlIGFueXdheS4gKi8KIAlzbmRfcHJpbnRrKEtFUk5fRVJSICJjb2RlY19zZW1hcGhvcmU6IHNlbWFwaG9yZSBpcyBub3QgcmVhZHkgWzB4JXhdWzB4JXhdXG4iLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL21peGFydC9taXhhcnRfY29yZS5jIGIvc291bmQvcGNpL21peGFydC9taXhhcnRfY29yZS5jCmluZGV4IGQzMzUwZjMuLjNkZjBmNTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0X2NvcmUuYworKysgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydF9jb3JlLmMKQEAgLTI2NSw3ICsyNjUsNyBAQAogCWlmICghIHRpbWVvdXQpIHsKIAkJLyogZXJyb3IgLSBubyBhY2sgKi8KIAkJbXV0ZXhfdW5sb2NrKCZtZ3ItPm1zZ19tdXRleCk7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgImVycm9yOiBubyByZXBvbnNlIG9uIG1zZyAleFxuIiwgbXNnX2ZyYW1lKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiZXJyb3I6IG5vIHJlc3BvbnNlIG9uIG1zZyAleFxuIiwgbXNnX2ZyYW1lKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0yNzgsNyArMjc4LDcgQEAKIAllcnIgPSBnZXRfbXNnKG1nciwgJnJlc3AsIG1zZ19mcmFtZSk7CiAKIAlpZiggcmVxdWVzdC0+bWVzc2FnZV9pZCAhPSByZXNwLm1lc3NhZ2VfaWQgKQotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJSRVBPTlNFIEVSUk9SIVxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIlJFU1BPTlNFIEVSUk9SIVxuIik7CiAKIAltdXRleF91bmxvY2soJm1nci0+bXNnX211dGV4KTsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX2NvcmUuYyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9jb3JlLmMKaW5kZXggODMzZTcxOC4uMzA0NDExYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX2NvcmUuYworKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfY29yZS5jCkBAIC0xMDQyLDExICsxMDQyLDExIEBACiAJaW50IGksIGo7CiAKIAlpZiAobWdyLT5zcmNfaXRfZHNwICYgUENYSFJfSVJRX0ZSRVFfQ0hBTkdFKQotCQlzbmRfcHJpbnRkZCgiVEFTS0xFVCA6IFBDWEhSX0lSUV9GUkVRX0NIQU5HRSBldmVudCBvY2N1cmVkXG4iKTsKKwkJc25kX3ByaW50ZGQoIlRBU0tMRVQgOiBQQ1hIUl9JUlFfRlJFUV9DSEFOR0UgZXZlbnQgb2NjdXJyZWRcbiIpOwogCWlmIChtZ3ItPnNyY19pdF9kc3AgJiBQQ1hIUl9JUlFfVElNRV9DT0RFKQotCQlzbmRfcHJpbnRkZCgiVEFTS0xFVCA6IFBDWEhSX0lSUV9USU1FX0NPREUgZXZlbnQgb2NjdXJlZFxuIik7CisJCXNuZF9wcmludGRkKCJUQVNLTEVUIDogUENYSFJfSVJRX1RJTUVfQ09ERSBldmVudCBvY2N1cnJlZFxuIik7CiAJaWYgKG1nci0+c3JjX2l0X2RzcCAmIFBDWEhSX0lSUV9OT1RJRlkpCi0JCXNuZF9wcmludGRkKCJUQVNLTEVUIDogUENYSFJfSVJRX05PVElGWSBldmVudCBvY2N1cmVkXG4iKTsKKwkJc25kX3ByaW50ZGQoIlRBU0tMRVQgOiBQQ1hIUl9JUlFfTk9USUZZIGV2ZW50IG9jY3VycmVkXG4iKTsKIAlpZiAobWdyLT5zcmNfaXRfZHNwICYgKFBDWEhSX0lSUV9GUkVRX0NIQU5HRSB8IFBDWEhSX0lSUV9USU1FX0NPREUpKSB7CiAJCS8qIGNsZWFyIGV2ZW50cyBGUkVRX0NIQU5HRSBhbmQgVElNRV9DT0RFICovCiAJCXBjeGhyX2luaXRfcm1oKHBybWgsIENNRF9URVNUX0lUKTsKQEAgLTEwNTUsNyArMTA1NSw3IEBACiAJCQkgICAgZXJyLCBwcm1oLT5zdGF0WzBdKTsKIAl9CiAJaWYgKG1nci0+c3JjX2l0X2RzcCAmIFBDWEhSX0lSUV9BU1lOQykgewotCQlzbmRfcHJpbnRkZCgiVEFTS0xFVCA6IFBDWEhSX0lSUV9BU1lOQyBldmVudCBvY2N1cmVkXG4iKTsKKwkJc25kX3ByaW50ZGQoIlRBU0tMRVQgOiBQQ1hIUl9JUlFfQVNZTkMgZXZlbnQgb2NjdXJyZWRcbiIpOwogCiAJCXBjeGhyX2luaXRfcm1oKHBybWgsIENNRF9BU1lOQyk7CiAJCXBybWgtPmNtZFswXSB8PSAxOwkvKiBhZGQgU0VMX0FTWU5DX0VWRU5UUyAqLwpAQCAtMTIzMyw3ICsxMjMzLDcgQEAKIAlyZWcgPSBQQ1hIUl9JTlBMKG1nciwgUENYSFJfUExYX0wyUENJREIpOwogCVBDWEhSX09VVFBMKG1nciwgUENYSFJfUExYX0wyUENJREIsIHJlZyk7CiAKLQkvKiB0aW1lciBpcnEgb2NjdXJlZCAqLworCS8qIHRpbWVyIGlycSBvY2N1cnJlZCAqLwogCWlmIChyZWcgJiBQQ1hIUl9JUlFfVElNRVIpIHsKIAkJaW50IHRpbWVyX3RvZ2dsZSA9IHJlZyAmIFBDWEhSX0lSUV9USU1FUjsKIAkJLyogaXMgYSAyNCBiaXQgY291bnRlciAqLwpAQCAtMTI4OCw3ICsxMjg4LDcgQEAKIAlpZiAocmVnICYgUENYSFJfSVJRX01BU0spIHsKIAkJaWYgKHJlZyAmIFBDWEhSX0lSUV9BU1lOQykgewogCQkJLyogYXMgd2UgZGlkbid0IHJlcXVlc3QgYW55IGFzeW5jIG5vdGlmaWNhdGlvbnMsCi0JCQkgKiBzb21lIGtpbmQgb2YgeHJ1biBlcnJvciB3aWxsIHByb2JhYmx5IG9jY3VyZWQKKwkJCSAqIHNvbWUga2luZCBvZiB4cnVuIGVycm9yIHdpbGwgcHJvYmFibHkgb2NjdXJyZWQKIAkJCSAqLwogCQkJLyogYmV0dGVyIHJlc3luY2hyb25pemUgYWxsIHN0cmVhbXMgbmV4dCBpbnRlcnJ1cHQgOiAqLwogCQkJbWdyLT5kc3BfdGltZV9sYXN0ID0gUENYSFJfRFNQX1RJTUVfSU5WQUxJRDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5Ni5jIGIvc291bmQvcGNpL3JtZTk2LmMKaW5kZXggZDVmNWI0NC4uOWZmMjQ3ZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2LmMKKysrIGIvc291bmQvcGNpL3JtZTk2LmMKQEAgLTE1MCw3ICsxNTAsNyBAQAogI2RlZmluZSBSTUU5Nl9SQ1JfQklUUE9TX0YxIDI4CiAjZGVmaW5lIFJNRTk2X1JDUl9CSVRQT1NfRjIgMjkKIAotLyogQWRkaXRvbmFsIHJlZ2lzdGVyIGJpdHMgKi8KKy8qIEFkZGl0aW9uYWwgcmVnaXN0ZXIgYml0cyAqLwogI2RlZmluZSBSTUU5Nl9BUl9XU0VMICAgICAgICgxIDw8IDApCiAjZGVmaW5lIFJNRTk2X0FSX0FOQUxPRyAgICAgKDEgPDwgMSkKICNkZWZpbmUgUk1FOTZfQVJfRlJFUVBBRF8wICAoMSA8PCAyKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKaW5kZXggYTMyM2VhZi4uOTQ5NjkxYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYworKysgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCkBAIC0zOTEsNyArMzkxLDcgQEAKIAogLyogU3RhdHVzMiBSZWdpc3RlciBiaXRzICovIC8qIE1BREkgT05MWSAqLwogCi0jZGVmaW5lIEhEU1BNX3ZlcnNpb24wICgxPDwwKQkvKiBub3QgcmVhbHkgZGVmaW5lZCBidXQgSSBndWVzcyAqLworI2RlZmluZSBIRFNQTV92ZXJzaW9uMCAoMTw8MCkJLyogbm90IHJlYWxseSBkZWZpbmVkIGJ1dCBJIGd1ZXNzICovCiAjZGVmaW5lIEhEU1BNX3ZlcnNpb24xICgxPDwxKQkvKiBpbiBmb3JtZXIgY2FyZHMgaXQgd2FzID8/PyAqLwogI2RlZmluZSBIRFNQTV92ZXJzaW9uMiAoMTw8MikKIApAQCAtOTM2LDcgKzkzNiw3IEBACiAJc3RydWN0IHNuZF9rY29udHJvbCAqcGxheWJhY2tfbWl4ZXJfY3Rsc1tIRFNQTV9NQVhfQ0hBTk5FTFNdOwogCS8qIGJ1dCBpbnB1dCB0byBtdWNoLCBzbyBub3QgdXNlZCAqLwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmlucHV0X21peGVyX2N0bHNbSERTUE1fTUFYX0NIQU5ORUxTXTsKLQkvKiBmdWxsIG1peGVyIGFjY2Vzc2FibGUgb3ZlciBtaXhlciBpb2N0bCBvciBod2RlcC1kZXZpY2UgKi8KKwkvKiBmdWxsIG1peGVyIGFjY2Vzc2libGUgb3ZlciBtaXhlciBpb2N0bCBvciBod2RlcC1kZXZpY2UgKi8KIAlzdHJ1Y3QgaGRzcG1fbWl4ZXIgKm1peGVyOwogCiAJc3RydWN0IGhkc3BtX3RjbyAqdGNvOyAgLyogTlVMTCBpZiBubyBUQ08gZGV0ZWN0ZWQgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9zaXM3MDE5LmMgYi9zb3VuZC9wY2kvc2lzNzAxOS5jCmluZGV4IDFiOGY2NzQuLjJiNWM3YTk1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvc2lzNzAxOS5jCisrKyBiL3NvdW5kL3BjaS9zaXM3MDE5LmMKQEAgLTMwOCw3ICszMDgsNyBAQAogCXUzMiBpbnRyLCBzdGF0dXM7CiAKIAkvKiBXZSBvbmx5IHVzZSB0aGUgRE1BIGludGVycnVwdHMsIGFuZCB3ZSBkb24ndCBlbmFibGUgYW55IG90aGVyCi0JICogc291cmNlIG9mIGludGVycnVwdHMuIEJ1dCwgaXQgaXMgcG9zc2libGUgdG8gc2VlIGFuIGludGVydXB0CisJICogc291cmNlIG9mIGludGVycnVwdHMuIEJ1dCwgaXQgaXMgcG9zc2libGUgdG8gc2VlIGFuIGludGVycnVwdAogCSAqIHN0YXR1cyB0aGF0IGRpZG4ndCBhY3R1YWxseSBpbnRlcnJ1cHQgdXMsIHNvIGVsaW1pbmF0ZSBhbnl0aGluZwogCSAqIHdlJ3JlIG5vdCBleHBlY3RpbmcgdG8gYXZvaWQgZmFsc2VseSBjbGFpbWluZyBhbiBJUlEsIGFuZCBhbgogCSAqIGVuc3VpbmcgZW5kbGVzcyBsb29wLgpAQCAtNzczLDcgKzc3Myw3IEBACiAJCXZwZXJpb2QgPSAwOwogCX0KIAotCS8qIFRoZSBpbnRlcnJ1cHQgaGFuZGxlciBpbXBsZW1lbnRzIHRoZSB0aW1pbmcgc3luY3Jvbml6YXRpb24sIHNvCisJLyogVGhlIGludGVycnVwdCBoYW5kbGVyIGltcGxlbWVudHMgdGhlIHRpbWluZyBzeW5jaHJvbml6YXRpb24sIHNvCiAJICogc2V0dXAgaXRzIHN0YXRlLgogCSAqLwogCXRpbWluZy0+ZmxhZ3MgfD0gVk9JQ0VfU1lOQ19USU1JTkc7CkBAIC0xMTM5LDcgKzExMzksNyBAQAogCSAqLwogCW91dGwoU0lTX0RNQV9DU1JfUENJX1NFVFRJTkdTLCBpbyArIFNJU19ETUFfQ1NSKTsKIAotCS8qIFJlc2V0IHRoZSBzeW5jcm9uaXphdGlvbiBncm91cHMgZm9yIGFsbCBvZiB0aGUgY2hhbm5lbHMKKwkvKiBSZXNldCB0aGUgc3luY2hyb25pemF0aW9uIGdyb3VwcyBmb3IgYWxsIG9mIHRoZSBjaGFubmVscwogCSAqIHRvIGJlIGFzeW5jcm9ub3VzLiBJZiB3ZSBzdGFydCBkb2luZyBTUERJRiBvciA1LjEgc291bmQsIGV0Yy4KIAkgKiB3ZSdsbCBuZWVkIHRvIGNoYW5nZSBob3cgd2UgaGFuZGxlIHRoZXNlLiBVbnRpbCB0aGVuLCB3ZSBqdXN0CiAJICogYXNzaWduIHN1Yi1taXhlciAwIHRvIGFsbCBwbGF5YmFjayBjaGFubmVscywgYW5kIGF2b2lkIGFueQpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3NuZF9wczMuYyBiL3NvdW5kL3BwYy9zbmRfcHMzLmMKaW5kZXggZWRjZThhMi4uYmM4MjNhNSAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3NuZF9wczMuYworKysgYi9zb3VuZC9wcGMvc25kX3BzMy5jCkBAIC0zNTgsNyArMzU4LDcgQEAKIAkJICogZmlsbGluZyBkdW1teSBkYXRhLCBzZXJpYWwgYXV0b21hdGljYWxseSBzdGFydCB0bwogCQkgKiBjb25zdW1lIHRoZW0gYW5kIHRoZW4gd2lsbCBnZW5lcmF0ZSBub3JtYWwgYnVmZmVyCiAJCSAqIGVtcHR5IGludGVycnVwdHMuCi0JCSAqIElmIGJvdGggYnVmZmVyIHVuZGVyZmxvdyBhbmQgYnVmZmVyIGVtcHR5IGFyZSBvY2N1cmVkLAorCQkgKiBJZiBib3RoIGJ1ZmZlciB1bmRlcmZsb3cgYW5kIGJ1ZmZlciBlbXB0eSBhcmUgb2NjdXJyZWQsCiAJCSAqIGl0IGlzIGJldHRlciB0byBkbyBub21hbCBkYXRhIHRyYW5zZmVyIHRoYW4gZW1wdHkgb25lCiAJCSAqLwogCQlzbmRfcHMzX3Byb2dyYW1fZG1hKGNhcmQsCmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvc25kX3BzM19yZWcuaCBiL3NvdW5kL3BwYy9zbmRfcHMzX3JlZy5oCmluZGV4IDAzZmRlZTQuLjJlNjMwMjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9zbmRfcHMzX3JlZy5oCisrKyBiL3NvdW5kL3BwYy9zbmRfcHMzX3JlZy5oCkBAIC0xMjUsNyArMTI1LDcgQEAKICAgIHRyYW5zZmVycy4gIEFueSBpbnRlcnJ1cHRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2FuY2VsZWQgdHJhbnNmZXJzCiAgICB3aWxsIG9jY3VyIGFzIGlmIHRoZSB0cmFuc2ZlciBoYWQgZmluaXNoZWQuCiAgICBTaW5jZSB0aGlzIGJpdCBpcyBkZXNpZ25lZCB0byByZWNvdmVyIGZyb20gRE1BIHJlbGF0ZWQgaXNzdWVzCi0gICB3aGljaCBhcmUgY2F1c2VkIGJ5IHVucHJlZGljdGFibGUgc2l0dWF0aW9ucywgaXQgaXMgcHJlZmVyZWQgdG8gd2FpdAorICAgd2hpY2ggYXJlIGNhdXNlZCBieSB1bnByZWRpY3RhYmxlIHNpdHVhdGlvbnMsIGl0IGlzIHByZWZlcnJlZCB0byB3YWl0CiAgICBmb3Igbm9ybWFsIERNQSB0cmFuc2ZlciBlbmQgd2l0aG91dCB1c2luZyB0aGlzIGJpdC4KICovCiAjZGVmaW5lIFBTM19BVURJT19DT05GSUdfQ0xFQVIgICAgICAgICAgKDEgPDwgOCkgIC8qIFJXSVZGICovCkBAIC0zMTYsMTMgKzMxNiwxMyBAQAogCiAvKgogQXVkaW8gUG9ydCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCi1JbmRpY2F0ZXMgSW50ZXJydXB0IHN0YXR1cywgd2hpY2ggaW50ZXJydXB0IGhhcyBvY2N1cmVkLCBhbmQgY2FuIGNsZWFyCitJbmRpY2F0ZXMgSW50ZXJydXB0IHN0YXR1cywgd2hpY2ggaW50ZXJydXB0IGhhcyBvY2N1cnJlZCwgYW5kIGNhbiBjbGVhcgogZWFjaCBpbnRlcnJ1cHQgaW4gdGhpcyByZWdpc3Rlci4KIFdyaXRpbmcgMWIgdG8gYSBmaWVsZCBjb250YWluaW5nIDFiIGNsZWFycyBmaWVsZCBhbmQgZGUtYXNzZXJ0cyBpbnRlcnJ1cHQuCiBXcml0aW5nIDBiIHRvIGEgZmllbGQgaGFzIG5vIGVmZmVjdC4KIEZpZWxkIHZhdWxlcyBhcmUgdGhlIGZvbGxvd2luZzoKLTAgLSBJbnRlcnJ1cHQgaGFzbid0IG9jY3VyZWQuCi0xIC0gSW50ZXJydXB0IGhhcyBvY2N1cmVkLgorMCAtIEludGVycnVwdCBoYXNuJ3Qgb2NjdXJyZWQuCisxIC0gSW50ZXJydXB0IGhhcyBvY2N1cnJlZC4KIAogCiAgMzEgICAgICAgICAgICAyNCAyMyAgICAgICAgICAgMTYgMTUgICAgICAgICAgICA4IDcgICAgICAgICAgICAgMApAQCAtNDczLDcgKzQ3Myw3IEBACiAvKgogU2FtcGxpbmcgUmF0ZQogU3BlY2lmaWVzIHRoZSBkaXZpZGUgcmF0aW8gb2YgdGhlIGJpdCBjbG9jayAoY2xvY2sgb3V0cHV0Ci1mcm9tIGJjbGtvKSB1c2VkIGJ5IHRoZSAzLXdpcmUgQXVkaW8gT3V0cHV0IENsb2NrLCB3aGNpaAorZnJvbSBiY2xrbykgdXNlZCBieSB0aGUgMy13aXJlIEF1ZGlvIE91dHB1dCBDbG9jaywgd2hpY2gKIGlzIGFwcGxpZWQgdG8gdGhlIG1hc3RlciBjbG9jayBzZWxlY3RlZCBieSBtY2tzZWwuCiBEYXRhIG91dHB1dCBpcyBzeW5jaHJvbml6ZWQgd2l0aCB0aGlzIGNsb2NrLgogKi8KQEAgLTc1Niw3ICs3NTYsNyBAQAogRE9ORSBpbmRpY2F0ZXMgdGhlIHByZXZpb3VzIHJlcXVlc3QgaGFzIGNvbXBsZXRlZC4KIEVWRU5UIGluZGljYXRlcyB0aGF0IHRoZSBETUEgZW5naW5lIGlzIHdhaXRpbmcgZm9yIHRoZSBFVkVOVCB0byBvY2N1ci4KIFBFTkRJTkcgaW5kaWNhdGVzIHRoYXQgdGhlIERNQSBlbmdpbmUgaGFzIG5vdCBzdGFydGVkIHByb2Nlc3NpbmcgdGhpcwotcmVxdWVzdCwgYnV0IHRoZSBFVkVOVCBoYXMgb2NjdXJlZC4KK3JlcXVlc3QsIGJ1dCB0aGUgRVZFTlQgaGFzIG9jY3VycmVkLgogRE1BIGluZGljYXRlcyB0aGF0IHRoZSBkYXRhIHRyYW5zZmVyIGlzIGluIHByb2dyZXNzLgogTk9USUZZIGluZGljYXRlcyB0aGF0IHRoZSBub3RpZmllciBzaWduYWxsaW5nIGVuZCBvZiB0cmFuc2ZlciBpcyBiZWluZyB3cml0dGVuLgogQ0xFQVIgaW5kaWNhdGVkIHRoYXQgdGhlIHByZXZpb3VzIHRyYW5zZmVyIHdhcyBjbGVhcmVkLgpAQCAtODI0LDcgKzgyNCw3IEBACiAKIC8qCiBQUzNfQVVESU9fRE1BU0laRSBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiAxMjgtYnl0ZSBibG9ja3MgKyAxIHRvIHRyYW5zZmVyLgotU28gYSB2YWx1ZSBvZiAwIG1lYW5zIDEyOC1ieXRlcyB3aWxsIGdldCB0cmFuc2ZlcmVkLgorU28gYSB2YWx1ZSBvZiAwIG1lYW5zIDEyOC1ieXRlcyB3aWxsIGdldCB0cmFuc2ZlcnJlZC4KIAogCiAgMzEgICAgICAgICAgICAyNCAyMyAgICAgICAgICAgMTYgMTUgICAgICAgICAgICA4IDcgICAgICAgICAgICAgMApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0bWVsL2F0bWVsX3NzY19kYWkuYyBiL3NvdW5kL3NvYy9hdG1lbC9hdG1lbF9zc2NfZGFpLmMKaW5kZXggNWQyMzBjZS4uN2ZiZmEwNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0bWVsL2F0bWVsX3NzY19kYWkuYworKysgYi9zb3VuZC9zb2MvYXRtZWwvYXRtZWxfc3NjX2RhaS5jCkBAIC02NzIsNyArNjcyLDcgQEAKIAkvKiByZS1lbmFibGUgaW50ZXJydXB0cyAqLwogCXNzY193cml0ZWwoc3NjX3AtPnNzYy0+cmVncywgSUVSLCBzc2NfcC0+c3NjX3N0YXRlLnNzY19pbXIpOwogCi0JLyogUmUtZW5hYmxlIHJlY2lldmUgYW5kIHRyYW5zbWl0IGFzIGFwcHJvcHJpYXRlICovCisJLyogUmUtZW5hYmxlIHJlY2VpdmUgYW5kIHRyYW5zbWl0IGFzIGFwcHJvcHJpYXRlICovCiAJY3IgPSAwOwogCWNyIHw9CiAJICAgIChzc2NfcC0+c3NjX3N0YXRlLnNzY19zciAmIFNTQ19CSVQoU1JfUlhFTikpID8gU1NDX0JJVChDUl9SWEVOKSA6IDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FsYzU2MjMuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWxjNTYyMy5jCmluZGV4IDRmMzc3YzkuLmVlY2ZmYjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWxjNTYyMy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWxjNTYyMy5jCkBAIC00ODEsNyArNDgxLDcgQEAKIH07CiAKIC8qIE5vdGUgOiBwbGwgY29kZSBmcm9tIG9yaWdpbmFsIGFsYzU2MjMgZHJpdmVyLiBOb3Qgc3VyZSBvZiBob3cgZ29vZCBpdCBpcyAqLwotLyogdXNlZnVsbCBvbmx5IGZvciBtYXN0ZXIgbW9kZSAqLworLyogdXNlZnVsIG9ubHkgZm9yIG1hc3RlciBtb2RlICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IF9wbGxfZGl2IGNvZGVjX21hc3Rlcl9wbGxfZGl2W10gPSB7CiAKIAl7ICAyMDQ4MDAwLCAgODE5MjAwMCwJMHgwZWEwfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvano0NzQwLmMgYi9zb3VuZC9zb2MvY29kZWNzL2p6NDc0MC5jCmluZGV4IGY3Y2QzNDYuLmY1Y2NkYmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvano0NzQwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9qejQ3NDAuYwpAQCAtMzA4LDggKzMwOCw2IEBACiAJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgano0NzQwX2NvZGVjX2RhcG1fcm91dGVzLAogCQlBUlJBWV9TSVpFKGp6NDc0MF9jb2RlY19kYXBtX3JvdXRlcykpOwogCi0Jc25kX3NvY19kYXBtX25ld193aWRnZXRzKGNvZGVjKTsKLQogCWp6NDc0MF9jb2RlY19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2xtNDg1Ny5jIGIvc291bmQvc29jL2NvZGVjcy9sbTQ4NTcuYwppbmRleCA3MmRlNDdlLi4yYzJhNjgxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2xtNDg1Ny5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvbG00ODU3LmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogCQlsbTQ4NTdfZ2V0X21vZGUsIGxtNDg1N19zZXRfbW9kZSksCiB9OwogCi0vKiBUaGVyZSBpcyBhIGRlbXV4IGluYmV0d2VlbiB0aGUgdGhlIGlucHV0IHNpZ25hbCBhbmQgdGhlIG91dHB1dCBzaWduYWxzLgorLyogVGhlcmUgaXMgYSBkZW11eCBiZXR3ZWVuIHRoZSBpbnB1dCBzaWduYWwgYW5kIHRoZSBvdXRwdXQgc2lnbmFscy4KICAqIEN1cnJlbnRseSB0aGVyZSBpcyBubyBlYXN5IHdheSB0byBtb2RlbCBpdCBpbiBBU29DIGFuZCBzaW5jZSBpdCBkb2VzIG5vdCBtYWtlCiAgKiBtdWNoIG9mIGEgZGlmZmVyZW5jZSBpbiBwcmFjdGljZSBzaW1wbHkgY29ubmVjdCB0aGUgaW5wdXQgZGlyZWNsdHkgdG8gdGhlCiAgKiBvdXRwdXRzLiAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9zbjk1MDMxLmMgYi9zb3VuZC9zb2MvY29kZWNzL3NuOTUwMzEuYwppbmRleCBhNTRkMmE1Li40ZDlmYjI3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3NuOTUwMzEuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3NuOTUwMzEuYwpAQCAtOTI3LDcgKzkyNyw3IEBACiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAl9LAogCS5wcm9iZQkJPSBzbjk1MDMxX2RldmljZV9wcm9iZSwKLQkucmVtb3ZlCQk9IHNuOTUwMzFfZGV2aWNlX3JlbW92ZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNuOTUwMzFfZGV2aWNlX3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzbjk1MDMxX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvc3NtMjYwMi5jIGIvc291bmQvc29jL2NvZGVjcy9zc20yNjAyLmMKaW5kZXggMjcyN2JlZi4uYjA0ZDI4MCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9zc20yNjAyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9zc20yNjAyLmMKQEAgLTEzOSw3ICsxMzksNyBAQAogU09DX0RPVUJMRV9SKCJDYXB0dXJlIFN3aXRjaCIsIFNTTTI2MDJfTElOVk9MLCBTU00yNjAyX1JJTlZPTCwgNywgMSwgMSksCiAKIFNPQ19TSU5HTEUoIk1pYyBCb29zdCAoKzIwZEIpIiwgU1NNMjYwMl9BUEFOQSwgMCwgMSwgMCksCi1TT0NfU0lOR0xFKCJNaWMgQm9vc3QyICgrMjBkQikiLCBTU00yNjAyX0FQQU5BLCA3LCAxLCAwKSwKK1NPQ19TSU5HTEUoIk1pYyBCb29zdDIgKCsyMGRCKSIsIFNTTTI2MDJfQVBBTkEsIDgsIDEsIDApLAogU09DX1NJTkdMRSgiTWljIFN3aXRjaCIsIFNTTTI2MDJfQVBBTkEsIDEsIDEsIDEpLAogCiBTT0NfU0lOR0xFKCJTaWRldG9uZSBQbGF5YmFjayBWb2x1bWUiLCBTU00yNjAyX0FQQU5BLCA2LCAzLCAxKSwKQEAgLTYwMiw3ICs2MDIsNyBAQAogCS5yZWFkID0gc3NtMjYwMl9yZWFkX3JlZ19jYWNoZSwKIAkud3JpdGUgPSBzc20yNjAyX3dyaXRlLAogCS5zZXRfYmlhc19sZXZlbCA9IHNzbTI2MDJfc2V0X2JpYXNfbGV2ZWwsCi0JLnJlZ19jYWNoZV9zaXplID0gc2l6ZW9mKHNzbTI2MDJfcmVnKSwKKwkucmVnX2NhY2hlX3NpemUgPSBBUlJBWV9TSVpFKHNzbTI2MDJfcmVnKSwKIAkucmVnX3dvcmRfc2l6ZSA9IHNpemVvZih1MTYpLAogCS5yZWdfY2FjaGVfZGVmYXVsdCA9IHNzbTI2MDJfcmVnLAogfTsKQEAgLTYxNCw3ICs2MTQsNyBAQAogICogICAgbG93ICA9IDB4MWEKICAqICAgIGhpZ2ggPSAweDFiCiAgKi8KLXN0YXRpYyBpbnQgc3NtMjYwMl9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNzbTI2MDJfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCiAJCQkgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3Qgc3NtMjYwMl9wcml2ICpzc20yNjAyOwpAQCAtNjM1LDcgKzYzNSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzc20yNjAyX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNzbTI2MDJfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmY2xpZW50LT5kZXYpOwogCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKQEAgLTY1NSw3ICs2NTUsNyBAQAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5wcm9iZSA9IHNzbTI2MDJfaTJjX3Byb2JlLAotCS5yZW1vdmUgPSBzc20yNjAyX2kyY19yZW1vdmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNzbTI2MDJfaTJjX3JlbW92ZSksCiAJLmlkX3RhYmxlID0gc3NtMjYwMl9pMmNfaWQsCiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzI2LmggYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzI2LmgKaW5kZXggNjJiMWYyMi4uNjdmMTljMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyNi5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjYuaApAQCAtMTQsMTQgKzE0LDE0IEBACiAjZGVmaW5lIEFJQzI2X1BBR0VfQUREUihwYWdlLCBvZmZzZXQpCSgocGFnZSA8PCA2KSB8IG9mZnNldCkKICNkZWZpbmUgQUlDMjZfTlVNX1JFR1MJCQlBSUMyNl9QQUdFX0FERFIoMywgMCkKIAotLyogUGFnZSAwOiBBdXhpbGxhcnkgZGF0YSByZWdpc3RlcnMgKi8KKy8qIFBhZ2UgMDogQXV4aWxpYXJ5IGRhdGEgcmVnaXN0ZXJzICovCiAjZGVmaW5lIEFJQzI2X1JFR19CQVQxCQkJQUlDMjZfUEFHRV9BRERSKDAsIDB4MDUpCiAjZGVmaW5lIEFJQzI2X1JFR19CQVQyCQkJQUlDMjZfUEFHRV9BRERSKDAsIDB4MDYpCiAjZGVmaW5lIEFJQzI2X1JFR19BVVgJCQlBSUMyNl9QQUdFX0FERFIoMCwgMHgwNykKICNkZWZpbmUgQUlDMjZfUkVHX1RFTVAxCQkJQUlDMjZfUEFHRV9BRERSKDAsIDB4MDkpCiAjZGVmaW5lIEFJQzI2X1JFR19URU1QMgkJCUFJQzI2X1BBR0VfQUREUigwLCAweDBBKQogCi0vKiBQYWdlIDE6IEF1eGlsbGFyeSBjb250cm9sIHJlZ2lzdGVycyAqLworLyogUGFnZSAxOiBBdXhpbGlhcnkgY29udHJvbCByZWdpc3RlcnMgKi8KICNkZWZpbmUgQUlDMjZfUkVHX0FVWF9BREMJCUFJQzI2X1BBR0VfQUREUigxLCAweDAwKQogI2RlZmluZSBBSUMyNl9SRUdfU1RBVFVTCQlBSUMyNl9QQUdFX0FERFIoMSwgMHgwMSkKICNkZWZpbmUgQUlDMjZfUkVHX1JFRkVSRU5DRQkJQUlDMjZfUEFHRV9BRERSKDEsIDB4MDMpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmMgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmMKaW5kZXggM2JlZGFiMi4uNmM0M2MxMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYwpAQCAtODg0LDcgKzg4NCw3IEBACiAJaWYgKGJ5cGFzc19wbGwpCiAJCXJldHVybiAwOwogCi0JLyogVXNlIFBMTCwgY29tcHV0ZSBhcHJvcHJpYXRlIHNldHVwIGZvciBqLCBkLCByIGFuZCBwLCB0aGUgY2xvc2VzdAorCS8qIFVzZSBQTEwsIGNvbXB1dGUgYXBwcm9wcmlhdGUgc2V0dXAgZm9yIGosIGQsIHIgYW5kIHAsIHRoZSBjbG9zZXN0CiAJICogb25lIHdpbnMgdGhlIGdhbWUuIFRyeSB3aXRoIGQ9PTAgZmlyc3QsIG5leHQgd2l0aCBkIT0wLgogCSAqIENvbnN0cmFpbnRzIGZvciBqIGFyZSBhY2NvcmRpbmcgdG8gdGhlIGRhdGFzaGVldC4KIAkgKiBUaGUgc3lzY2xrIGlzIGRpdmlkZWQgYnkgMTAwMCB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzLgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBkYWMzMy5jIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBkYWMzMy5jCmluZGV4IGViMWEwYjQuLjA4MmU5ZDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwZGFjMzMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGRhYzMzLmMKQEAgLTEwMjcsNyArMTAyNyw3IEBACiAJCS8qCiAJCSAqIEZvciBGSUZPIGJ5cGFzcyBtb2RlOgogCQkgKiBFbmFibGUgdGhlIEZJRk8gYnlwYXNzIChEaXNhYmxlIHRoZSBGSUZPIHVzZSkKLQkJICogU2V0IHRoZSBCQ0xLIGFzIGNvbnRpbm91cworCQkgKiBTZXQgdGhlIEJDTEsgYXMgY29udGludW91cwogCQkgKi8KIAkJZmlmb2N0cmxfYSB8PSBEQUMzM19GQllQQVM7CiAJCWFpY3RybF9iIHw9IERBQzMzX0JDTEtPTjsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5jIGIvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMKaW5kZXggODUxMjgwMC4uNTc1MjM4ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMKQEAgLTI4MSw3ICsyODEsNyBAQAogCQkJCSBpLCB2YWwsIHR3bDQwMzBfcmVnW2ldKTsKIAkJfQogCX0KLQlkZXZfZGJnKGNvZGVjLT5kZXYsICJGb3VuZCAlZCBub24gbWFjaGluZyByZWdpc3RlcnMuICVzXG4iLAorCWRldl9kYmcoY29kZWMtPmRldiwgIkZvdW5kICVkIG5vbi1tYXRjaGluZyByZWdpc3RlcnMuICVzXG4iLAogCQkgZGlmZmVyZW5jZSwgZGlmZmVyZW5jZSA/ICJOb3QgT0siIDogIk9LIik7CiB9CiAKQEAgLTIwMTgsNyArMjAxOCw3IEBACiAJdTggbW9kZTsKIAogCS8qIElmIHRoZSBzeXN0ZW0gbWFzdGVyIGNsb2NrIGlzIG5vdCAyNk1IeiwgdGhlIHZvaWNlIFBDTSBpbnRlcmZhY2UgaXMKLQkgKiBub3QgYXZpbGFibGUuCisJICogbm90IGF2YWlsYWJsZS4KIAkgKi8KIAlpZiAodHdsNDAzMC0+c3lzY2xrICE9IDI2MDAwKSB7CiAJCWRldl9lcnIoY29kZWMtPmRldiwgIlRoZSBib2FyZCBpcyBjb25maWd1cmVkIGZvciAldSBIeiwgd2hpbGUiCkBAIC0yMDI4LDcgKzIwMjgsNyBAQAogCX0KIAogCS8qIElmIHRoZSBjb2RlYyBtb2RlIGlzIG5vdCBvcHRpb24yLCB0aGUgdm9pY2UgUENNIGludGVyZmFjZSBpcyBub3QKLQkgKiBhdmlsYWJsZS4KKwkgKiBhdmFpbGFibGUuCiAJICovCiAJbW9kZSA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0NPREVDX01PREUpCiAJCSYgVFdMNDAzMF9PUFRfTU9ERTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM0eC5jIGIvc291bmQvc29jL2NvZGVjcy91ZGExMzR4LmMKaW5kZXggNDhmZmQ0MC4uYTdiOGYzMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy91ZGExMzR4LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy91ZGExMzR4LmMKQEAgLTYwMSw5ICs2MDEsNyBAQAogCS5yZWdfY2FjaGVfc3RlcCA9IDEsCiAJLnJlYWQgPSB1ZGExMzR4X3JlYWRfcmVnX2NhY2hlLAogCS53cml0ZSA9IHVkYTEzNHhfd3JpdGUsCi0jaWZkZWYgUE9XRVJfT0ZGX09OX1NUQU5EQlkKIAkuc2V0X2JpYXNfbGV2ZWwgPSB1ZGExMzR4X3NldF9iaWFzX2xldmVsLAotI2VuZGlmCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB1ZGExMzR4X2NvZGVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODU4MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg1ODAuYwppbmRleCA4ZjZiNWVlLi40YmJjMGE3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODU4MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTgwLmMKQEAgLTc3Miw3ICs3NzIsNyBAQAogCQkJcmVnICY9IH4oV004NTgwX1BXUkROMV9QV0ROIHwgV004NTgwX1BXUkROMV9BTExEQUNQRCk7CiAJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg1ODBfUFdSRE4xLCByZWcpOwogCi0JCQkvKiBNYWtlIFZNSUQgaGlnaCBpbXBlZGVuY2UgKi8KKwkJCS8qIE1ha2UgVk1JRCBoaWdoIGltcGVkYW5jZSAqLwogCQkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCAgV004NTgwX0FEQ19DT05UUk9MMSk7CiAJCQlyZWcgJj0gfjB4MTAwOwogCQkJc25kX3NvY193cml0ZShjb2RlYywgV004NTgwX0FEQ19DT05UUk9MMSwgcmVnKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jCmluZGV4IDNmMDlkZWUuLmZmYTJmZmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYwpAQCAtMTMxMiw3ICsxMzEyLDcgQEAKIAlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKIAogLyoKLSAqIFRoZSBXTTg3NTMgc3VwcG9ydHMgdXB0byA0IGRpZmZlcmVudCBhbmQgbXV0dWFsbHkgZXhjbHVzaXZlIERBSQorICogVGhlIFdNODc1MyBzdXBwb3J0cyB1cCB0byA0IGRpZmZlcmVudCBhbmQgbXV0dWFsbHkgZXhjbHVzaXZlIERBSQogICogY29uZmlndXJhdGlvbnMuIFRoaXMgZ2l2ZXMgMiBQQ00ncyBhdmFpbGFibGUgZm9yIHVzZSwgaGlmaSBhbmQgdm9pY2UuCiAgKiBOT1RFOiBUaGUgVm9pY2UgUENNIGNhbm5vdCBwbGF5IG9yIGNhcHR1cmUgYXVkaW8gdG8gdGhlIENQVSBhcyBpdCdzIERBSQogICogaXMgY29ubmVjdGVkIGJldHdlZW4gdGhlIHdtODc1MyBhbmQgYSBCVCBjb2RlYyBvciBHU00gbW9kZW0uCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYwppbmRleCBhZTFjYWRmLi44MjRkMWM4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMKQEAgLTI0Nyw4ICsyNDcsNiBAQAogCWNhc2UgV004OTAzX1JFVklTSU9OX05VTUJFUjoKIAljYXNlIFdNODkwM19JTlRFUlJVUFRfU1RBVFVTXzE6CiAJY2FzZSBXTTg5MDNfV1JJVEVfU0VRVUVOQ0VSXzQ6Ci0JY2FzZSBXTTg5MDNfUE9XRVJfTUFOQUdFTUVOVF8zOgotCWNhc2UgV004OTAzX1BPV0VSX01BTkFHRU1FTlRfMjoKIAljYXNlIFdNODkwM19EQ19TRVJWT19SRUFEQkFDS18xOgogCWNhc2UgV004OTAzX0RDX1NFUlZPX1JFQURCQUNLXzI6CiAJY2FzZSBXTTg5MDNfRENfU0VSVk9fUkVBREJBQ0tfMzoKQEAgLTY5NCw3ICs2OTIsNyBAQAogU09DX1NJTkdMRV9UTFYoIkRSQyBTdGFydHVwIFZvbHVtZSIsIFdNODkwM19EUkNfMCwgNiwgMTgsIDAsIGRyY190bHZfc3RhcnR1cCksCiAKIFNPQ19ET1VCTEVfUl9UTFYoIkRpZ2l0YWwgQ2FwdHVyZSBWb2x1bWUiLCBXTTg5MDNfQURDX0RJR0lUQUxfVk9MVU1FX0xFRlQsCi0JCSBXTTg5MDNfQURDX0RJR0lUQUxfVk9MVU1FX1JJR0hULCAxLCA5NiwgMCwgZGlnaXRhbF90bHYpLAorCQkgV004OTAzX0FEQ19ESUdJVEFMX1ZPTFVNRV9SSUdIVCwgMSwgMTIwLCAwLCBkaWdpdGFsX3RsdiksCiBTT0NfRU5VTSgiQURDIENvbXBhbmRpbmcgTW9kZSIsIGFkY19jb21wYW5kaW5nKSwKIFNPQ19TSU5HTEUoIkFEQyBDb21wYW5kaW5nIFN3aXRjaCIsIFdNODkwM19BVURJT19JTlRFUkZBQ0VfMCwgMywgMSwgMCksCiAKQEAgLTg3NSwzNCArODczLDQwIEBACiBTTkRfU09DX0RBUE1fTUlYRVIoIlJpZ2h0IFNwZWFrZXIgTWl4ZXIiLCBXTTg5MDNfUE9XRVJfTUFOQUdFTUVOVF80LCAwLCAwLAogCQkgICByaWdodF9zcGVha2VyX21peGVyLCBBUlJBWV9TSVpFKHJpZ2h0X3NwZWFrZXJfbWl4ZXIpKSwKIAotU05EX1NPQ19EQVBNX1BHQV9TKCJMZWZ0IEhlYWRwaG9uZSBPdXRwdXQgUEdBIiwgMCwgV004OTAzX0FOQUxPR1VFX0hQXzAsCi0JCSAgIDQsIDAsIE5VTEwsIDApLAotU05EX1NPQ19EQVBNX1BHQV9TKCJSaWdodCBIZWFkcGhvbmUgT3V0cHV0IFBHQSIsIDAsIFdNODkwM19BTkFMT0dVRV9IUF8wLAorU05EX1NPQ19EQVBNX1BHQV9TKCJMZWZ0IEhlYWRwaG9uZSBPdXRwdXQgUEdBIiwgMCwgV004OTAzX1BPV0VSX01BTkFHRU1FTlRfMiwKKwkJICAgMSwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIlJpZ2h0IEhlYWRwaG9uZSBPdXRwdXQgUEdBIiwgMCwgV004OTAzX1BPV0VSX01BTkFHRU1FTlRfMiwKIAkJICAgMCwgMCwgTlVMTCwgMCksCiAKLVNORF9TT0NfREFQTV9QR0FfUygiTGVmdCBMaW5lIE91dHB1dCBQR0EiLCAwLCBXTTg5MDNfQU5BTE9HVUVfTElORU9VVF8wLCA0LCAwLAorU05EX1NPQ19EQVBNX1BHQV9TKCJMZWZ0IExpbmUgT3V0cHV0IFBHQSIsIDAsIFdNODkwM19QT1dFUl9NQU5BR0VNRU5UXzMsIDEsIDAsCiAJCSAgIE5VTEwsIDApLAotU05EX1NPQ19EQVBNX1BHQV9TKCJSaWdodCBMaW5lIE91dHB1dCBQR0EiLCAwLCBXTTg5MDNfQU5BTE9HVUVfTElORU9VVF8wLCAwLCAwLAorU05EX1NPQ19EQVBNX1BHQV9TKCJSaWdodCBMaW5lIE91dHB1dCBQR0EiLCAwLCBXTTg5MDNfUE9XRVJfTUFOQUdFTUVOVF8zLCAwLCAwLAogCQkgICBOVUxMLCAwKSwKIAogU05EX1NPQ19EQVBNX1BHQV9TKCJIUExfUk1WX1NIT1JUIiwgNCwgV004OTAzX0FOQUxPR1VFX0hQXzAsIDcsIDAsIE5VTEwsIDApLAogU05EX1NPQ19EQVBNX1BHQV9TKCJIUExfRU5BX09VVFAiLCAzLCBXTTg5MDNfQU5BTE9HVUVfSFBfMCwgNiwgMCwgTlVMTCwgMCksCi1TTkRfU09DX0RBUE1fUEdBX1MoIkhQTF9FTkFfRExZIiwgMSwgV004OTAzX0FOQUxPR1VFX0hQXzAsIDUsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQV9TKCJIUExfRU5BX0RMWSIsIDIsIFdNODkwM19BTkFMT0dVRV9IUF8wLCA1LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0FfUygiSFBMX0VOQSIsIDEsIFdNODkwM19BTkFMT0dVRV9IUF8wLCA0LCAwLCBOVUxMLCAwKSwKIFNORF9TT0NfREFQTV9QR0FfUygiSFBSX1JNVl9TSE9SVCIsIDQsIFdNODkwM19BTkFMT0dVRV9IUF8wLCAzLCAwLCBOVUxMLCAwKSwKIFNORF9TT0NfREFQTV9QR0FfUygiSFBSX0VOQV9PVVRQIiwgMywgV004OTAzX0FOQUxPR1VFX0hQXzAsIDIsIDAsIE5VTEwsIDApLAotU05EX1NPQ19EQVBNX1BHQV9TKCJIUFJfRU5BX0RMWSIsIDEsIFdNODkwM19BTkFMT0dVRV9IUF8wLCAxLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0FfUygiSFBSX0VOQV9ETFkiLCAyLCBXTTg5MDNfQU5BTE9HVUVfSFBfMCwgMSwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIkhQUl9FTkEiLCAxLCBXTTg5MDNfQU5BTE9HVUVfSFBfMCwgMCwgMCwgTlVMTCwgMCksCiAKIFNORF9TT0NfREFQTV9QR0FfUygiTElORU9VVExfUk1WX1NIT1JUIiwgNCwgV004OTAzX0FOQUxPR1VFX0xJTkVPVVRfMCwgNywgMCwKIAkJICAgTlVMTCwgMCksCiBTTkRfU09DX0RBUE1fUEdBX1MoIkxJTkVPVVRMX0VOQV9PVVRQIiwgMywgV004OTAzX0FOQUxPR1VFX0xJTkVPVVRfMCwgNiwgMCwKIAkJICAgTlVMTCwgMCksCi1TTkRfU09DX0RBUE1fUEdBX1MoIkxJTkVPVVRMX0VOQV9ETFkiLCAxLCBXTTg5MDNfQU5BTE9HVUVfTElORU9VVF8wLCA1LCAwLAorU05EX1NPQ19EQVBNX1BHQV9TKCJMSU5FT1VUTF9FTkFfRExZIiwgMiwgV004OTAzX0FOQUxPR1VFX0xJTkVPVVRfMCwgNSwgMCwKKwkJICAgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIkxJTkVPVVRMX0VOQSIsIDEsIFdNODkwM19BTkFMT0dVRV9MSU5FT1VUXzAsIDQsIDAsCiAJCSAgIE5VTEwsIDApLAogU05EX1NPQ19EQVBNX1BHQV9TKCJMSU5FT1VUUl9STVZfU0hPUlQiLCA0LCBXTTg5MDNfQU5BTE9HVUVfTElORU9VVF8wLCAzLCAwLAogCQkgICBOVUxMLCAwKSwKIFNORF9TT0NfREFQTV9QR0FfUygiTElORU9VVFJfRU5BX09VVFAiLCAzLCBXTTg5MDNfQU5BTE9HVUVfTElORU9VVF8wLCAyLCAwLAogCQkgICBOVUxMLCAwKSwKLVNORF9TT0NfREFQTV9QR0FfUygiTElORU9VVFJfRU5BX0RMWSIsIDEsIFdNODkwM19BTkFMT0dVRV9MSU5FT1VUXzAsIDEsIDAsCitTTkRfU09DX0RBUE1fUEdBX1MoIkxJTkVPVVRSX0VOQV9ETFkiLCAyLCBXTTg5MDNfQU5BTE9HVUVfTElORU9VVF8wLCAxLCAwLAorCQkgICBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0FfUygiTElORU9VVFJfRU5BIiwgMSwgV004OTAzX0FOQUxPR1VFX0xJTkVPVVRfMCwgMCwgMCwKIAkJICAgTlVMTCwgMCksCiAKIFNORF9TT0NfREFQTV9TVVBQTFkoIkRDUyBNYXN0ZXIiLCBXTTg5MDNfRENfU0VSVk9fMCwgNCwgMCwgTlVMTCwgMCksCkBAIC0xMDM3LDEwICsxMDQxLDE0IEBACiAJeyAiTGVmdCBTcGVha2VyIFBHQSIsIE5VTEwsICJMZWZ0IFNwZWFrZXIgTWl4ZXIiIH0sCiAJeyAiUmlnaHQgU3BlYWtlciBQR0EiLCBOVUxMLCAiUmlnaHQgU3BlYWtlciBNaXhlciIgfSwKIAotCXsgIkhQTF9FTkFfRExZIiwgTlVMTCwgIkxlZnQgSGVhZHBob25lIE91dHB1dCBQR0EiIH0sCi0JeyAiSFBSX0VOQV9ETFkiLCBOVUxMLCAiUmlnaHQgSGVhZHBob25lIE91dHB1dCBQR0EiIH0sCi0JeyAiTElORU9VVExfRU5BX0RMWSIsIE5VTEwsICJMZWZ0IExpbmUgT3V0cHV0IFBHQSIgfSwKLQl7ICJMSU5FT1VUUl9FTkFfRExZIiwgTlVMTCwgIlJpZ2h0IExpbmUgT3V0cHV0IFBHQSIgfSwKKwl7ICJIUExfRU5BIiwgTlVMTCwgIkxlZnQgSGVhZHBob25lIE91dHB1dCBQR0EiIH0sCisJeyAiSFBSX0VOQSIsIE5VTEwsICJSaWdodCBIZWFkcGhvbmUgT3V0cHV0IFBHQSIgfSwKKwl7ICJIUExfRU5BX0RMWSIsIE5VTEwsICJIUExfRU5BIiB9LAorCXsgIkhQUl9FTkFfRExZIiwgTlVMTCwgIkhQUl9FTkEiIH0sCisJeyAiTElORU9VVExfRU5BIiwgTlVMTCwgIkxlZnQgTGluZSBPdXRwdXQgUEdBIiB9LAorCXsgIkxJTkVPVVRSX0VOQSIsIE5VTEwsICJSaWdodCBMaW5lIE91dHB1dCBQR0EiIH0sCisJeyAiTElORU9VVExfRU5BX0RMWSIsIE5VTEwsICJMSU5FT1VUTF9FTkEiIH0sCisJeyAiTElORU9VVFJfRU5BX0RMWSIsIE5VTEwsICJMSU5FT1VUUl9FTkEiIH0sCiAKIAl7ICJIUExfRENTIiwgTlVMTCwgIkRDUyBNYXN0ZXIiIH0sCiAJeyAiSFBSX0RDUyIsIE5VTEwsICJEQ1MgTWFzdGVyIiB9LApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5MDQuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTA0LmMKaW5kZXggNDQzYWU1OC4uOWIzYmJhNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5MDQuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwNC5jCkBAIC0xODk1LDcgKzE4OTUsNyBAQAogCiAJcHJfZGVidWcoIkZ2Y289JWRIelxuIiwgdGFyZ2V0KTsKIAotCS8qIEZpbmQgYW4gYXBwcm9wcmFpdGUgRkxMX0ZSQVRJTyBhbmQgZmFjdG9yIGl0IG91dCBvZiB0aGUgdGFyZ2V0ICovCisJLyogRmluZCBhbiBhcHByb3ByaWF0ZSBGTExfRlJBVElPIGFuZCBmYWN0b3IgaXQgb3V0IG9mIHRoZSB0YXJnZXQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmbGxfZnJhdGlvcyk7IGkrKykgewogCQlpZiAoZmxsX2ZyYXRpb3NbaV0ubWluIDw9IEZyZWYgJiYgRnJlZiA8PSBmbGxfZnJhdGlvc1tpXS5tYXgpIHsKIAkJCWZsbF9kaXYtPmZsbF9mcmF0aW8gPSBmbGxfZnJhdGlvc1tpXS5mbGxfZnJhdGlvOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NTUuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTU1LmMKaW5kZXggNWUwMjE0ZC4uM2M3MTk4NyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NTUuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk1NS5jCkBAIC0xNzYsNyArMTc2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogTG9va3VwIHRhYmxlIHNwZWNpZml5aW5nIFNSQVRFICh0YWJsZSAyNSBpbiBkYXRhc2hlZXQpOyBzb21lIG9mIHRoZQorLyogTG9va3VwIHRhYmxlIHNwZWNpZnlpbmcgU1JBVEUgKHRhYmxlIDI1IGluIGRhdGFzaGVldCk7IHNvbWUgb2YgdGhlCiAgKiBvdXRwdXQgZnJlcXVlbmNpZXMgaGF2ZSBiZWVuIHJvdW5kZWQgdG8gdGhlIHN0YW5kYXJkIGZyZXF1ZW5jaWVzCiAgKiB0aGV5IGFyZSBpbnRlbmRlZCB0byBtYXRjaCB3aGVyZSB0aGUgZXJyb3IgaXMgc2xpZ2h0LiAqLwogc3RhdGljIHN0cnVjdCB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk2Mi5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5NjIuYwppbmRleCAzYjcxZGQ2Li41MDAwMTFlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk2Mi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYyLmMKQEAgLTMxMzcsNyArMzEzNyw3IEBACiAKIAlwcl9kZWJ1ZygiRkxMIEZ2Y289JWRIelxuIiwgdGFyZ2V0KTsKIAotCS8qIEZpbmQgYW4gYXBwcm9wcmFpdGUgRkxMX0ZSQVRJTyBhbmQgZmFjdG9yIGl0IG91dCBvZiB0aGUgdGFyZ2V0ICovCisJLyogRmluZCBhbiBhcHByb3ByaWF0ZSBGTExfRlJBVElPIGFuZCBmYWN0b3IgaXQgb3V0IG9mIHRoZSB0YXJnZXQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmbGxfZnJhdGlvcyk7IGkrKykgewogCQlpZiAoZmxsX2ZyYXRpb3NbaV0ubWluIDw9IEZyZWYgJiYgRnJlZiA8PSBmbGxfZnJhdGlvc1tpXS5tYXgpIHsKIAkJCWZsbF9kaXYtPmZsbF9mcmF0aW8gPSBmbGxfZnJhdGlvc1tpXS5mbGxfZnJhdGlvOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTEuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkxLmMKaW5kZXggMjhmZGZkNi4uM2MyZWUxYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5OTEuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5MS5jCkBAIC05ODEsNyArOTgxLDcgQEAKIAkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTFfQ0xPQ0tJTkdfMik7CiAJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MV9DTE9DS0lOR18yLCByZWcgfCBXTTg5OTFfU1lTQ0xLX1NSQyk7CiAKLQkJLyogc2V0IHVwIE4gLCBmcmFjdGlvbmFsIG1vZGUgYW5kIHByZS1kaXZpc29yIGlmIG5lY2Nlc3NhcnkgKi8KKwkJLyogc2V0IHVwIE4gLCBmcmFjdGlvbmFsIG1vZGUgYW5kIHByZS1kaXZpc29yIGlmIG5lY2Vzc2FyeSAqLwogCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTFfUExMMSwgcGxsX2Rpdi5uIHwgV004OTkxX1NETSB8CiAJCQkgICAgICAocGxsX2Rpdi5kaXYyID8gV004OTkxX1BSRVNDQUxFIDogMCkpOwogCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTFfUExMMiwgKHU4KShwbGxfZGl2Lms+PjgpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5My5jCmluZGV4IDM3OWZhMjIuLjA1NmFlZjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTMuYwpAQCAtMzI0LDcgKzMyNCw3IEBACiAKIAlwcl9kZWJ1ZygiRnZjbz0lZEh6XG4iLCB0YXJnZXQpOwogCi0JLyogRmluZCBhbiBhcHByb3ByYWl0ZSBGTExfRlJBVElPIGFuZCBmYWN0b3IgaXQgb3V0IG9mIHRoZSB0YXJnZXQgKi8KKwkvKiBGaW5kIGFuIGFwcHJvcHJpYXRlIEZMTF9GUkFUSU8gYW5kIGZhY3RvciBpdCBvdXQgb2YgdGhlIHRhcmdldCAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZsbF9mcmF0aW9zKTsgaSsrKSB7CiAJCWlmIChmbGxfZnJhdGlvc1tpXS5taW4gPD0gRnJlZiAmJiBGcmVmIDw9IGZsbF9mcmF0aW9zW2ldLm1heCkgewogCQkJZmxsX2Rpdi0+ZmxsX2ZyYXRpbyA9IGZsbF9mcmF0aW9zW2ldLmZsbF9mcmF0aW87CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTQuYwppbmRleCAzZGM2NGM4Li44NGUxYmQxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMKQEAgLTgyLDE4ICs4MiwxOCBAQAogCiAJaW50IG1iY19lbmFbM107CiAKLQkvKiBQbGF0Zm9ybSBkZXBlbmRhbnQgRFJDIGNvbmZpZ3VyYXRpb24gKi8KKwkvKiBQbGF0Zm9ybSBkZXBlbmRlbnQgRFJDIGNvbmZpZ3VyYXRpb24gKi8KIAljb25zdCBjaGFyICoqZHJjX3RleHRzOwogCWludCBkcmNfY2ZnW1dNODk5NF9OVU1fRFJDXTsKIAlzdHJ1Y3Qgc29jX2VudW0gZHJjX2VudW07CiAKLQkvKiBQbGF0Zm9ybSBkZXBlbmRhbnQgUmVUdW5lIG1vYmlsZSBjb25maWd1cmF0aW9uICovCisJLyogUGxhdGZvcm0gZGVwZW5kZW50IFJlVHVuZSBtb2JpbGUgY29uZmlndXJhdGlvbiAqLwogCWludCBudW1fcmV0dW5lX21vYmlsZV90ZXh0czsKIAljb25zdCBjaGFyICoqcmV0dW5lX21vYmlsZV90ZXh0czsKIAlpbnQgcmV0dW5lX21vYmlsZV9jZmdbV004OTk0X05VTV9FUV07CiAJc3RydWN0IHNvY19lbnVtIHJldHVuZV9tb2JpbGVfZW51bTsKIAotCS8qIFBsYXRmb3JtIGRlcGVuZGFudCBNQkMgY29uZmlndXJhdGlvbiAqLworCS8qIFBsYXRmb3JtIGRlcGVuZGVudCBNQkMgY29uZmlndXJhdGlvbiAqLwogCWludCBtYmNfY2ZnOwogCWNvbnN0IGNoYXIgKiptYmNfdGV4dHM7CiAJc3RydWN0IHNvY19lbnVtIG1iY19lbnVtOwpAQCAtMzI2MSwyMCArMzI2MSwzNiBAQAogCXdtODk5NF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCiAJLyogTGF0Y2ggdm9sdW1lIHVwZGF0ZXMgKHJpZ2h0IG9ubHk7IHdlIGFsd2F5cyBkbyBsZWZ0IHRoZW4gcmlnaHQpLiAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0RBQzFfTEVGVF9WT0xVTUUsCisJCQkgICAgV004OTk0X0FJRjFEQUMxX1ZVLCBXTTg5OTRfQUlGMURBQzFfVlUpOwogCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0RBQzFfUklHSFRfVk9MVU1FLAogCQkJICAgIFdNODk5NF9BSUYxREFDMV9WVSwgV004OTk0X0FJRjFEQUMxX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9EQUMyX0xFRlRfVk9MVU1FLAorCQkJICAgIFdNODk5NF9BSUYxREFDMl9WVSwgV004OTk0X0FJRjFEQUMyX1ZVKTsKIAlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9EQUMyX1JJR0hUX1ZPTFVNRSwKIAkJCSAgICBXTTg5OTRfQUlGMURBQzJfVlUsIFdNODk5NF9BSUYxREFDMl9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjJfREFDX0xFRlRfVk9MVU1FLAorCQkJICAgIFdNODk5NF9BSUYyREFDX1ZVLCBXTTg5OTRfQUlGMkRBQ19WVSk7CiAJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjJfREFDX1JJR0hUX1ZPTFVNRSwKIAkJCSAgICBXTTg5OTRfQUlGMkRBQ19WVSwgV004OTk0X0FJRjJEQUNfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0FEQzFfTEVGVF9WT0xVTUUsCisJCQkgICAgV004OTk0X0FJRjFBREMxX1ZVLCBXTTg5OTRfQUlGMUFEQzFfVlUpOwogCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0FEQzFfUklHSFRfVk9MVU1FLAogCQkJICAgIFdNODk5NF9BSUYxQURDMV9WVSwgV004OTk0X0FJRjFBREMxX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9BREMyX0xFRlRfVk9MVU1FLAorCQkJICAgIFdNODk5NF9BSUYxQURDMl9WVSwgV004OTk0X0FJRjFBREMyX1ZVKTsKIAlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9BREMyX1JJR0hUX1ZPTFVNRSwKIAkJCSAgICBXTTg5OTRfQUlGMUFEQzJfVlUsIFdNODk5NF9BSUYxQURDMl9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjJfQURDX0xFRlRfVk9MVU1FLAorCQkJICAgIFdNODk5NF9BSUYyQURDX1ZVLCBXTTg5OTRfQUlGMUFEQzJfVlUpOwogCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYyX0FEQ19SSUdIVF9WT0xVTUUsCiAJCQkgICAgV004OTk0X0FJRjJBRENfVlUsIFdNODk5NF9BSUYxQURDMl9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0RBQzFfTEVGVF9WT0xVTUUsCisJCQkgICAgV004OTk0X0RBQzFfVlUsIFdNODk5NF9EQUMxX1ZVKTsKIAlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfREFDMV9SSUdIVF9WT0xVTUUsCiAJCQkgICAgV004OTk0X0RBQzFfVlUsIFdNODk5NF9EQUMxX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfREFDMl9MRUZUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTRfREFDMl9WVSwgV004OTk0X0RBQzJfVlUpOwogCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9EQUMyX1JJR0hUX1ZPTFVNRSwKIAkJCSAgICBXTTg5OTRfREFDMl9WVSwgV004OTk0X0RBQzJfVlUpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTA4MS5jIGIvc291bmQvc29jL2NvZGVjcy93bTkwODEuYwppbmRleCA1NWNkZjI5Li45MWM2YjM5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtOTA4MS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205MDgxLmMKQEAgLTMwNSw3ICszMDUsNyBAQAogLyoKICAqIFN0b3AgYW55IGF0dGVtcHRzIHRvIGNoYW5nZSBzcGVha2VyIG1vZGUgd2hpbGUgdGhlIHNwZWFrZXIgaXMgZW5hYmxlZC4KICAqCi0gKiBXZSBhbHNvIGhhdmUgc29tZSBzcGVjaWFsIGFudGktcG9wIGNvbnRyb2xzIGRlcGVuZGFudCBvbiBzcGVha2VyCisgKiBXZSBhbHNvIGhhdmUgc29tZSBzcGVjaWFsIGFudGktcG9wIGNvbnRyb2xzIGRlcGVuZGVudCBvbiBzcGVha2VyCiAgKiBtb2RlIHdoaWNoIG11c3QgYmUgY2hhbmdlZCBhbG9uZyB3aXRoIHRoZSBtb2RlLgogICovCiBzdGF0aWMgaW50IHNwZWFrZXJfbW9kZV9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCkBAIC00NTYsNyArNDU2LDcgQEAKIAogCXByX2RlYnVnKCJGdmNvPSVkSHpcbiIsIHRhcmdldCk7CiAKLQkvKiBGaW5kIGFuIGFwcHJvcHJhaXRlIEZMTF9GUkFUSU8gYW5kIGZhY3RvciBpdCBvdXQgb2YgdGhlIHRhcmdldCAqLworCS8qIEZpbmQgYW4gYXBwcm9wcmlhdGUgRkxMX0ZSQVRJTyBhbmQgZmFjdG9yIGl0IG91dCBvZiB0aGUgdGFyZ2V0ICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmxsX2ZyYXRpb3MpOyBpKyspIHsKIAkJaWYgKGZsbF9mcmF0aW9zW2ldLm1pbiA8PSBGcmVmICYmIEZyZWYgPD0gZmxsX2ZyYXRpb3NbaV0ubWF4KSB7CiAJCQlmbGxfZGl2LT5mbGxfZnJhdGlvID0gZmxsX2ZyYXRpb3NbaV0uZmxsX2ZyYXRpbzsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jIGIvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKaW5kZXggN2I2YjNjMS4uNDAwNWU5YSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKQEAgLTc0MCwxMiArNzQwLDEyIEBACiAKIAl7ICJTUEtMIiwgIklucHV0IFN3aXRjaCIsICJNSVhJTkwiIH0sCiAJeyAiU1BLTCIsICJJTjFMUCBTd2l0Y2giLCAiSU4xTFAiIH0sCi0JeyAiU1BLTCIsICJPdXRwdXQgU3dpdGNoIiwgIkxlZnQgT3V0cHV0IE1peGVyIiB9LAorCXsgIlNQS0wiLCAiT3V0cHV0IFN3aXRjaCIsICJMZWZ0IE91dHB1dCBQR0EiIH0sCiAJeyAiU1BLTCIsIE5VTEwsICJUT0NMSyIgfSwKIAogCXsgIlNQS1IiLCAiSW5wdXQgU3dpdGNoIiwgIk1JWElOUiIgfSwKIAl7ICJTUEtSIiwgIklOMVJQIFN3aXRjaCIsICJJTjFSUCIgfSwKLQl7ICJTUEtSIiwgIk91dHB1dCBTd2l0Y2giLCAiUmlnaHQgT3V0cHV0IE1peGVyIiB9LAorCXsgIlNQS1IiLCAiT3V0cHV0IFN3aXRjaCIsICJSaWdodCBPdXRwdXQgUEdBIiB9LAogCXsgIlNQS1IiLCBOVUxMLCAiVE9DTEsiIH0sCiAKIAl7ICJTUEtMIEJvb3N0IiwgIkRpcmVjdCBWb2ljZSBTd2l0Y2giLCAiRGlyZWN0IFZvaWNlIiB9LApAQCAtNzY3LDggKzc2Nyw4IEBACiAJeyAiU1BLT1VUUlAiLCBOVUxMLCAiU1BLUiBEcml2ZXIiIH0sCiAJeyAiU1BLT1VUUk4iLCBOVUxMLCAiU1BLUiBEcml2ZXIiIH0sCiAKLQl7ICJMZWZ0IEhlYWRwaG9uZSBNdXgiLCAiTWl4ZXIiLCAiTGVmdCBPdXRwdXQgTWl4ZXIiIH0sCi0JeyAiUmlnaHQgSGVhZHBob25lIE11eCIsICJNaXhlciIsICJSaWdodCBPdXRwdXQgTWl4ZXIiIH0sCisJeyAiTGVmdCBIZWFkcGhvbmUgTXV4IiwgIk1peGVyIiwgIkxlZnQgT3V0cHV0IFBHQSIgfSwKKwl7ICJSaWdodCBIZWFkcGhvbmUgTXV4IiwgIk1peGVyIiwgIlJpZ2h0IE91dHB1dCBQR0EiIH0sCiAKIAl7ICJIZWFkcGhvbmUgUEdBIiwgTlVMTCwgIkxlZnQgSGVhZHBob25lIE11eCIgfSwKIAl7ICJIZWFkcGhvbmUgUEdBIiwgTlVMTCwgIlJpZ2h0IEhlYWRwaG9uZSBNdXgiIH0sCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMKaW5kZXggYTVhZjgzNC4uNGRkYzZkMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYwpAQCAtNDM0LDE3ICs0MzQsMjEgQEAKIAkJbWNhc3Bfc2V0X2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfQUNMS1JDVExfUkVHLCBBQ0xLUkUpOwogCQltY2FzcF9zZXRfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9SWEZNQ1RMX1JFRywgQUZTUkUpOwogCi0JCW1jYXNwX3NldF9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX1BESVJfUkVHLCAoMHg3IDw8IDI2KSk7CisJCW1jYXNwX3NldF9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX1BESVJfUkVHLAorCQkJCUFDTEtYIHwgQUhDTEtYIHwgQUZTWCk7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGUzoKIAkJLyogY29kZWMgaXMgY2xvY2sgbWFzdGVyIGFuZCBmcmFtZSBzbGF2ZSAqLwotCQltY2FzcF9zZXRfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9BQ0xLWENUTF9SRUcsIEFDTEtYRSk7CisJCW1jYXNwX2Nscl9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX0FDTEtYQ1RMX1JFRywgQUNMS1hFKTsKIAkJbWNhc3Bfc2V0X2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfVFhGTUNUTF9SRUcsIEFGU1hFKTsKIAotCQltY2FzcF9zZXRfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9BQ0xLUkNUTF9SRUcsIEFDTEtSRSk7CisJCW1jYXNwX2Nscl9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX0FDTEtSQ1RMX1JFRywgQUNMS1JFKTsKIAkJbWNhc3Bfc2V0X2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfUlhGTUNUTF9SRUcsIEFGU1JFKTsKIAotCQltY2FzcF9zZXRfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9QRElSX1JFRywgKDB4MmQgPDwgMjYpKTsKKwkJbWNhc3BfY2xyX2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfUERJUl9SRUcsCisJCQkJQUNMS1ggfCBBQ0xLUik7CisJCW1jYXNwX3NldF9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX1BESVJfUkVHLAorCQkJCUFGU1ggfCBBRlNSKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgogCQkvKiBjb2RlYyBpcyBjbG9jayBhbmQgZnJhbWUgbWFzdGVyICovCkBAIC00NTQsNyArNDU4LDggQEAKIAkJbWNhc3BfY2xyX2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfQUNMS1JDVExfUkVHLCBBQ0xLUkUpOwogCQltY2FzcF9jbHJfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9SWEZNQ1RMX1JFRywgQUZTUkUpOwogCi0JCW1jYXNwX2Nscl9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX1BESVJfUkVHLCAoMHgzZiA8PCAyNikpOworCQltY2FzcF9jbHJfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9QRElSX1JFRywKKwkJCQlBQ0xLWCB8IEFIQ0xLWCB8IEFGU1ggfCBBQ0xLUiB8IEFIQ0xLUiB8IEFGU1IpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC02NDQsNyArNjQ5LDcgQEAKIAkJbWNhc3Bfc2V0X3JlZyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1RYVERNX1JFRywgbWFzayk7CiAJCW1jYXNwX3NldF9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfVFhGTVRfUkVHLCBUWE9SRCk7CiAKLQkJaWYgKChkZXYtPnRkbV9zbG90cyA+PSAyKSB8fCAoZGV2LT50ZG1fc2xvdHMgPD0gMzIpKQorCQlpZiAoKGRldi0+dGRtX3Nsb3RzID49IDIpICYmIChkZXYtPnRkbV9zbG90cyA8PSAzMikpCiAJCQltY2FzcF9tb2RfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1RYRk1DVExfUkVHLAogCQkJCQlGU1hNT0QoZGV2LT50ZG1fc2xvdHMpLCBGU1hNT0QoMHgxRkYpKTsKIAkJZWxzZQpAQCAtNjYwLDcgKzY2NSw3IEBACiAJCQkJQUhDTEtSRSk7CiAJCW1jYXNwX3NldF9yZWcoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9SWFRETV9SRUcsIG1hc2spOwogCi0JCWlmICgoZGV2LT50ZG1fc2xvdHMgPj0gMikgfHwgKGRldi0+dGRtX3Nsb3RzIDw9IDMyKSkKKwkJaWYgKChkZXYtPnRkbV9zbG90cyA+PSAyKSAmJiAoZGV2LT50ZG1fc2xvdHMgPD0gMzIpKQogCQkJbWNhc3BfbW9kX2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9SWEZNQ1RMX1JFRywKIAkJCQkJRlNSTU9EKGRldi0+dGRtX3Nsb3RzKSwgRlNSTU9EKDB4MUZGKSk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvaW14LXNzaS5jIGIvc291bmQvc29jL2lteC9pbXgtc3NpLmMKaW5kZXggYmM5MmVjNi4uYWMyZGVkOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2lteC9pbXgtc3NpLmMKKysrIGIvc291bmQvc29jL2lteC9pbXgtc3NpLmMKQEAgLTE2LDcgKzE2LDcgQEAKICAqIHNhbmUgcHJvY2Vzc29yIHZlbmRvcnMgaGF2ZSBhIEZJRk8gcGVyIEFDOTcgc2xvdCwgdGhlIGkuTVggaGFzIG9ubHkKICAqIG9uZSBGSUZPIHdoaWNoIGNvbWJpbmVzIGFsbCB2YWxpZCByZWNlaXZlIHNsb3RzLiBXZSBjYW5ub3QgZXZlbiBzZWxlY3QKICAqIHdoaWNoIHNsb3RzIHdlIHdhbnQgdG8gcmVjZWl2ZS4gVGhlIFdNOTcxMiB3aXRoIHdoaWNoIHRoaXMgZHJpdmVyCi0gKiB3YXMgZGV2ZWxvcHBlZCB3aXRoIGFsd2F5cyBzZW5kcyBHUElPIHN0YXR1cyBkYXRhIGluIHNsb3QgMTIgd2hpY2gKKyAqIHdhcyBkZXZlbG9wZWQgd2l0aCBhbHdheXMgc2VuZHMgR1BJTyBzdGF0dXMgZGF0YSBpbiBzbG90IDEyIHdoaWNoCiAgKiB3ZSByZWNlaXZlIGluIG91ciAoUENNLSkgZGF0YSBzdHJlYW0uIFRoZSBvbmx5IGNoYW5jZSB3ZSBoYXZlIGlzIHRvCiAgKiBtYW51YWxseSBza2lwIHRoaXMgZGF0YSBpbiB0aGUgRklRIGhhbmRsZXIuIFdpdGggc2FtcGxpbmcgcmF0ZXMgZGlmZmVyZW50CiAgKiBmcm9tIDQ4MDAwSHogbm90IGV2ZXJ5IGZyYW1lIGhhcyB2YWxpZCByZWNlaXZlIGRhdGEsIHNvIHRoZSByYXRpbwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2p6NDc0MC9qejQ3NDAtaTJzLmMgYi9zb3VuZC9zb2Mvano0NzQwL2p6NDc0MC1pMnMuYwppbmRleCA0MTliZjRmLi5jZDIyYTU0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvano0NzQwL2p6NDc0MC1pMnMuYworKysgYi9zb3VuZC9zb2Mvano0NzQwL2p6NDc0MC1pMnMuYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJc3RydWN0IGp6NDc0MF9pMnMgKmkycyA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7CiAJdWludDMyX3QgY29uZjsKIAotCWlmICghZGFpLT5hY3RpdmUpCisJaWYgKGRhaS0+YWN0aXZlKQogCQlyZXR1cm47CiAKIAljb25mID0gano0NzQwX2kyc19yZWFkKGkycywgSlpfUkVHX0FJQ19DT05GKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9raXJrd29vZC9raXJrd29vZC1kbWEuYyBiL3NvdW5kL3NvYy9raXJrd29vZC9raXJrd29vZC1kbWEuYwppbmRleCAwZmQ2YTYzLi5lMTNjNmNlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mva2lya3dvb2Qva2lya3dvb2QtZG1hLmMKKysrIGIvc291bmQvc29jL2tpcmt3b29kL2tpcmt3b29kLWRtYS5jCkBAIC0xMzIsNyArMTMyLDcgQEAKIAlwcml2ID0gc25kX3NvY19kYWlfZ2V0X2RtYV9kYXRhKGNwdV9kYWksIHN1YnN0cmVhbSk7CiAJc25kX3NvY19zZXRfcnVudGltZV9od3BhcmFtcyhzdWJzdHJlYW0sICZraXJrd29vZF9kbWFfc25kX2h3KTsKIAotCS8qIEVuc3VyZSB0aGF0IGFsbCBjb25zdHJhaW50cyBsaW5rZWQgdG8gZG1hIGJ1cnN0IGFyZSBmdWxsZmlsbGVkICovCisJLyogRW5zdXJlIHRoYXQgYWxsIGNvbnN0cmFpbnRzIGxpbmtlZCB0byBkbWEgYnVyc3QgYXJlIGZ1bGZpbGxlZCAqLwogCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgocnVudGltZSwKIAkJCVNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfQllURVMsCiAJCQlwcml2LT5idXJzdCAqIDIsCkBAIC0xNzAsNyArMTcwLDcgQEAKIAogCQkvKgogCQkgKiBFbmFibGUgRXJyb3IgaW50ZXJydXB0cy4gV2UncmUgb25seSBhY2snaW5nIHRoZW0gYnV0Ci0JCSAqIGl0J3MgdXNlZnVsbCBmb3IgZGlhZ25vc3RpY3MKKwkJICogaXQncyB1c2VmdWwgZm9yIGRpYWdub3N0aWNzCiAJCSAqLwogCQl3cml0ZWwoKHVuc2lnbmVkIGxvbmcpLTEsIHByaXYtPmlvICsgS0lSS1dPT0RfRVJSX01BU0spOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9taWQteDg2L3NzdF9wbGF0Zm9ybS5jIGIvc291bmQvc29jL21pZC14ODYvc3N0X3BsYXRmb3JtLmMKaW5kZXggZWUyYzIyNC4uNmIxZjlkMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL21pZC14ODYvc3N0X3BsYXRmb3JtLmMKKysrIGIvc291bmQvc29jL21pZC14ODYvc3N0X3BsYXRmb3JtLmMKQEAgLTExNiwxOCArMTE2LDIwIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc3N0X3NldF9zdHJlYW1fc3RhdHVzKHN0cnVjdCBzc3RfcnVudGltZV9zdHJlYW0gKnN0cmVhbSwKIAkJCQkJaW50IHN0YXRlKQogewotCXNwaW5fbG9jaygmc3RyZWFtLT5zdGF0dXNfbG9jayk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3RyZWFtLT5zdGF0dXNfbG9jaywgZmxhZ3MpOwogCXN0cmVhbS0+c3RyZWFtX3N0YXR1cyA9IHN0YXRlOwotCXNwaW5fdW5sb2NrKCZzdHJlYW0tPnN0YXR1c19sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdHJlYW0tPnN0YXR1c19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNzdF9nZXRfc3RyZWFtX3N0YXR1cyhzdHJ1Y3Qgc3N0X3J1bnRpbWVfc3RyZWFtICpzdHJlYW0pCiB7CiAJaW50IHN0YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2soJnN0cmVhbS0+c3RhdHVzX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZzdHJlYW0tPnN0YXR1c19sb2NrLCBmbGFncyk7CiAJc3RhdGUgPSBzdHJlYW0tPnN0cmVhbV9zdGF0dXM7Ci0Jc3Bpbl91bmxvY2soJnN0cmVhbS0+c3RhdHVzX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0cmVhbS0+c3RhdHVzX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gc3RhdGU7CiB9CiAKQEAgLTM3NCw2ICszNzYsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzc3RfcGxhdGZvcm1fcGNtX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKK30KKwogc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzc3RfcGxhdGZvcm1fb3BzID0gewogCS5vcGVuID0gc3N0X3BsYXRmb3JtX29wZW4sCiAJLmNsb3NlID0gc3N0X3BsYXRmb3JtX2Nsb3NlLApAQCAtMzgyLDYgKzM4OSw3IEBACiAJLnRyaWdnZXIgPSBzc3RfcGxhdGZvcm1fcGNtX3RyaWdnZXIsCiAJLnBvaW50ZXIgPSBzc3RfcGxhdGZvcm1fcGNtX3BvaW50ZXIsCiAJLmh3X3BhcmFtcyA9IHNzdF9wbGF0Zm9ybV9wY21faHdfcGFyYW1zLAorCS5od19mcmVlID0gc3N0X3BsYXRmb3JtX3BjbV9od19mcmVlLAogfTsKIAogc3RhdGljIHZvaWQgc3N0X3BjbV9mcmVlKHN0cnVjdCBzbmRfcGNtICpwY20pCkBAIC00NDAsNyArNDQ4LDcgQEAKIAogCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKCZwZGV2LT5kZXYsIEFSUkFZX1NJWkUoc3N0X3BsYXRmb3JtX2RhaSkpOwogCXNuZF9zb2NfdW5yZWdpc3Rlcl9wbGF0Zm9ybSgmcGRldi0+ZGV2KTsKLQlwcl9kZWJ1Zygic3N0X3BsYXRmb3JtX3JlbW92ZSBzdWNlc3NcbiIpOworCXByX2RlYnVnKCJzc3RfcGxhdGZvcm1fcmVtb3ZlIHN1Y2Nlc3NcbiIpOwogCXJldHVybiAwOwogfQogCkBAIC00NjMsNyArNDcxLDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzc3Rfc29jX3BsYXRmb3JtX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc3N0X3BsYXRmb3JtX2RyaXZlcik7Ci0JcHJfZGVidWcoInNzdF9zb2NfcGxhdGZvcm1fZXhpdCBzdWNlc3NcbiIpOworCXByX2RlYnVnKCJzc3Rfc29jX3BsYXRmb3JtX2V4aXQgc3VjY2Vzc1xuIik7CiB9CiBtb2R1bGVfZXhpdChzc3Rfc29jX3BsYXRmb3JtX2V4aXQpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9hbXMtZGVsdGEuYyBiL3NvdW5kL3NvYy9vbWFwL2Ftcy1kZWx0YS5jCmluZGV4IDMxNjdiZTYuLjQ2MmNiY2IgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL2Ftcy1kZWx0YS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL2Ftcy1kZWx0YS5jCkBAIC0yNDgsNyArMjQ4LDcgQEAKICAqLwogCiAvKiBUbyBhY3R1YWxseSBhcHBseSBhbnkgbW9kZW0gY29udHJvbGxlZCBjb25maWd1cmF0aW9uIGNoYW5nZXMgdG8gdGhlIGNvZGVjLAotICogd2UgbXVzdCBjb25uZWN0IGNvZGVjIERBSSBwaW5zIHRvIHRoZSBtb2RlbSBmb3IgYSBtb21lbnQuICBCZSBjYXJlZnVsbCBub3QKKyAqIHdlIG11c3QgY29ubmVjdCBjb2RlYyBEQUkgcGlucyB0byB0aGUgbW9kZW0gZm9yIGEgbW9tZW50LiAgQmUgY2FyZWZ1bCBub3QKICAqIHRvIGludGVyZmVyZSB3aXRoIG91ciBkaWdpdGFsIG11dGUgZnVuY3Rpb24gdGhhdCBzaGFyZXMgdGhlIHNhbWUgaGFyZHdhcmUuICovCiBzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgY3g4MTgwMV90aW1lcjsKIHN0YXRpYyBib29sIGN4ODE4MDFfY21kX3BlbmRpbmc7CkBAIC00MDIsOSArNDAyLDkgQEAKIAogCiAvKgotICogRXZlbiBpZiBub3QgdmVyeSB1c2VmdWxsLCB0aGUgc291bmQgY2FyZCBjYW4gc3RpbGwgd29yayB3aXRob3V0IGFueSBvZiB0aGUKKyAqIEV2ZW4gaWYgbm90IHZlcnkgdXNlZnVsLCB0aGUgc291bmQgY2FyZCBjYW4gc3RpbGwgd29yayB3aXRob3V0IGFueSBvZiB0aGUKICAqIGFib3ZlIGZ1bmN0b25hbGl0eSBhY3RpdmF0ZWQuICBZb3UgY2FuIHN0aWxsIGNvbnRyb2wgaXRzIGF1ZGlvIGlucHV0L291dHB1dAotICogY29uc3RlbGxhdGlvbiBhbmQgc3BlYWtlcnBob25lIGdhaW4gZnJvbSB1c2Vyc3BhY2UgYnkgaXNzdWVpbmcgQVQgY29tbWFuZHMKKyAqIGNvbnN0ZWxsYXRpb24gYW5kIHNwZWFrZXJwaG9uZSBnYWluIGZyb20gdXNlcnNwYWNlIGJ5IGlzc3VpbmcgQVQgY29tbWFuZHMKICAqIG92ZXIgdGhlIG1vZGVtIHBvcnQuCiAgKi8KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9weGEyeHgtcGNtLmMgYi9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1wY20uYwppbmRleCAwMmZiNjY0Li4yY2UwYjJkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1wY20uYworKysgYi9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1wY20uYwpAQCAtNjUsNiArNjUsNyBAQAogCWlmIChwcnRkLT5kbWFfY2ggPj0gMCkgewogCQlweGFfZnJlZV9kbWEocHJ0ZC0+ZG1hX2NoKTsKIAkJcHJ0ZC0+ZG1hX2NoID0gLTE7CisJCXBydGQtPnBhcmFtcyA9IE5VTEw7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3p5bG9uaXRlLmMgYi9zb3VuZC9zb2MvcHhhL3p5bG9uaXRlLmMKaW5kZXggYWM1NzcyNi4uYjY0NDU3NSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS96eWxvbml0ZS5jCisrKyBiL3NvdW5kL3NvYy9weGEvenlsb25pdGUuYwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJLmNvZGVjX25hbWUgPSAid205NzEzLWNvZGVjIiwKIAkucGxhdGZvcm1fbmFtZSA9ICJweGEtcGNtLWF1ZGlvIiwKIAkuY3B1X2RhaV9uYW1lID0gInB4YTJ4eC1hYzk3IiwKLQkuY29kZWNfbmFtZSA9ICJ3bTk3MTMtaGlmaSIsCisJLmNvZGVjX2RhaV9uYW1lID0gIndtOTcxMy1oaWZpIiwKIAkuaW5pdCA9IHp5bG9uaXRlX3dtOTcxM19pbml0LAogfSwKIHsKQEAgLTE3Niw3ICsxNzYsNyBAQAogCS5jb2RlY19uYW1lID0gIndtOTcxMy1jb2RlYyIsCiAJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCiAJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5Ny1hdXgiLAotCS5jb2RlY19uYW1lID0gIndtOTcxMy1hdXgiLAorCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTk3MTMtYXV4IiwKIH0sCiB7CiAJLm5hbWUgPSAiV005NzEzIFZvaWNlIiwKQEAgLTE4NCw3ICsxODQsNyBAQAogCS5jb2RlY19uYW1lID0gIndtOTcxMy1jb2RlYyIsCiAJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCiAJLmNwdV9kYWlfbmFtZSA9ICJweGEtc3NwLWRhaS4yIiwKLQkuY29kZWNfbmFtZSA9ICJ3bTk3MTMtdm9pY2UiLAorCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTk3MTMtdm9pY2UiLAogCS5vcHMgPSAmenlsb25pdGVfdm9pY2Vfb3BzLAogfSwKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9nb25pX3dtODk5NC5jIGIvc291bmQvc29jL3NhbXN1bmcvZ29uaV93bTg5OTQuYwppbmRleCBmNmIzYTNjLi4wZTgwZGFlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9nb25pX3dtODk5NC5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL2dvbmlfd204OTk0LmMKQEAgLTIzNiwxOCArMjM2LDE4IEBACiAJLm5hbWUgPSAiV004OTk0IiwKIAkuc3RyZWFtX25hbWUgPSAiV004OTk0IEhpRmkiLAogCS5jcHVfZGFpX25hbWUgPSAic2Ftc3VuZy1pMnMuMCIsCi0JLmNvZGVjX2RhaV9uYW1lID0gIndtODk5NC1oaWZpIiwKKwkuY29kZWNfZGFpX25hbWUgPSAid204OTk0LWFpZjEiLAogCS5wbGF0Zm9ybV9uYW1lID0gInNhbXN1bmctYXVkaW8iLAotCS5jb2RlY19uYW1lID0gIndtODk5NC1jb2RlYy4wLTB4MWEiLAorCS5jb2RlY19uYW1lID0gIndtODk5NC1jb2RlYy4wLTAwMWEiLAogCS5pbml0ID0gZ29uaV93bTg5OTRfaW5pdCwKIAkub3BzID0gJmdvbmlfaGlmaV9vcHMsCiB9LCB7CiAJLm5hbWUgPSAiV004OTk0IFZvaWNlIiwKIAkuc3RyZWFtX25hbWUgPSAiVm9pY2UiLAogCS5jcHVfZGFpX25hbWUgPSAiZ29uaS12b2ljZS1kYWkiLAotCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTg5OTQtdm9pY2UiLAorCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTg5OTQtYWlmMiIsCiAJLnBsYXRmb3JtX25hbWUgPSAic2Ftc3VuZy1hdWRpbyIsCi0JLmNvZGVjX25hbWUgPSAid204OTk0LWNvZGVjLjAtMHgxYSIsCisJLmNvZGVjX25hbWUgPSAid204OTk0LWNvZGVjLjAtMDAxYSIsCiAJLm9wcyA9ICZnb25pX3ZvaWNlX29wcywKIH0sCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvbmVvMTk3M193bTg3NTMuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL25lbzE5NzNfd204NzUzLmMKaW5kZXggNzhiZmRiMy4uNDUyMjMwOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvbmVvMTk3M193bTg3NTMuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9uZW8xOTczX3dtODc1My5jCkBAIC0yMjgsNyArMjI4LDcgQEAKIAlTT0NfREFQTV9QSU5fU1dJVENIKCJIYW5kc2V0IE1pYyIpLAogfTsKIAotLyogR1RBMDIgc3BlY2lmaWMgcm91dGVzIGFuZCBjb250cm9sbHMgKi8KKy8qIEdUQTAyIHNwZWNpZmljIHJvdXRlcyBhbmQgY29udHJvbHMgKi8KIAogI2lmZGVmIENPTkZJR19NQUNIX05FTzE5NzNfR1RBMDIKIApAQCAtMzcyLDcgKzM3Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIEdUQTAxIHNwZWNpZmljIGNvbnRyb2xscyAqLworLyogR1RBMDEgc3BlY2lmaWMgY29udHJvbHMgKi8KIAogI2lmZGVmIENPTkZJR19NQUNIX05FTzE5NzNfR1RBMDEKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvcGNtLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9wY20uYwppbmRleCAzOGFhYzdkLi45YzdlOGI0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9wY20uYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9wY20uYwpAQCAtMzUwLDggKzM1MCw4IEBACiAJY3RsID0gcmVhZGwocmVncyArIFMzQ19QQ01fQ1RMKTsKIAogCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKLQljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgotCQkvKiBOb3RoaW5nIHRvIGRvLCBOQl9ORiBieSBkZWZhdWx0ICovCisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJLyogTm90aGluZyB0byBkbywgSUJfTkYgYnkgZGVmYXVsdCAqLwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKHBjbS0+ZGV2LCAiVW5zdXBwb3J0ZWQgY2xvY2sgaW52ZXJzaW9uIVxuIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvZnNpLmMgYi9zb3VuZC9zb2Mvc2gvZnNpLmMKaW5kZXggMGM5OTk3ZS4uMjNjMGU4MyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL2ZzaS5jCisrKyBiL3NvdW5kL3NvYy9zaC9mc2kuYwpAQCAtMTIwMCwxMCArMTIwMCwxMSBAQAogCW1hc3Rlci0+ZnNpYi5tYXN0ZXIJPSBtYXN0ZXI7CiAKIAlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKLQlwbV9ydW50aW1lX3Jlc3VtZSgmcGRldi0+ZGV2KTsKIAlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgbWFzdGVyKTsKIAorCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnBkZXYtPmRldik7CiAJZnNpX3NvZnRfYWxsX3Jlc2V0KG1hc3Rlcik7CisJcG1fcnVudGltZV9wdXRfc3luYygmcGRldi0+ZGV2KTsKIAogCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgJmZzaV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsCiAJCQkgIGlkX2VudHJ5LT5uYW1lLCBtYXN0ZXIpOwpAQCAtMTIxOCw4ICsxMjE5LDE3IEBACiAJCWdvdG8gZXhpdF9mcmVlX2lycTsKIAl9CiAKLQlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWlzKCZwZGV2LT5kZXYsIGZzaV9zb2NfZGFpLCBBUlJBWV9TSVpFKGZzaV9zb2NfZGFpKSk7CisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWlzKCZwZGV2LT5kZXYsIGZzaV9zb2NfZGFpLAorCQkJCSAgICBBUlJBWV9TSVpFKGZzaV9zb2NfZGFpKSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHNuZCBkYWkgcmVnaXN0ZXJcbiIpOworCQlnb3RvIGV4aXRfc25kX3NvYzsKKwl9CiAKKwlyZXR1cm4gcmV0OworCitleGl0X3NuZF9zb2M6CisJc25kX3NvY191bnJlZ2lzdGVyX3BsYXRmb3JtKCZwZGV2LT5kZXYpOwogZXhpdF9mcmVlX2lycToKIAlmcmVlX2lycShpcnEsIG1hc3Rlcik7CiBleGl0X2lvdW5tYXA6CkBAIC0xMjM4LDEyICsxMjQ4LDExIEBACiAKIAltYXN0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CiAKLQlzbmRfc29jX3VucmVnaXN0ZXJfZGFpcygmcGRldi0+ZGV2LCBBUlJBWV9TSVpFKGZzaV9zb2NfZGFpKSk7Ci0Jc25kX3NvY191bnJlZ2lzdGVyX3BsYXRmb3JtKCZwZGV2LT5kZXYpOwotCisJZnJlZV9pcnEobWFzdGVyLT5pcnEsIG1hc3Rlcik7CiAJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwogCi0JZnJlZV9pcnEobWFzdGVyLT5pcnEsIG1hc3Rlcik7CisJc25kX3NvY191bnJlZ2lzdGVyX2RhaXMoJnBkZXYtPmRldiwgQVJSQVlfU0laRShmc2lfc29jX2RhaSkpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9wbGF0Zm9ybSgmcGRldi0+ZGV2KTsKIAogCWlvdW5tYXAobWFzdGVyLT5iYXNlKTsKIAlrZnJlZShtYXN0ZXIpOwpAQCAtMTMyMSwzICsxMzMwLDQgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU3VwZXJIIG9uY2hpcCBGU0kgYXVkaW8gZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+Iik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmZzaS1wY20tYXVkaW8iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtY29yZS5jIGIvc291bmQvc29jL3NvYy1jb3JlLmMKaW5kZXggNGRkYTU4OS4uZGQ1NWQxMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1jb3JlLmMKKysrIGIvc291bmQvc29jL3NvYy1jb3JlLmMKQEAgLTkyLDggKzkyLDggQEAKIHN0YXRpYyBpbnQgZm9ybWF0X3JlZ2lzdGVyX3N0cihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IHJlZywgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewotCWludCB3b3Jkc2l6ZSA9IGNvZGVjLT5kcml2ZXItPnJlZ193b3JkX3NpemUgKiAyOwotCWludCByZWdzaXplID0gbWluX2J5dGVzX25lZWRlZChjb2RlYy0+ZHJpdmVyLT5yZWdfY2FjaGVfc2l6ZSkgKiAyOworCWludCB3b3Jkc2l6ZSA9IG1pbl9ieXRlc19uZWVkZWQoY29kZWMtPmRyaXZlci0+cmVnX2NhY2hlX3NpemUpICogMjsKKwlpbnQgcmVnc2l6ZSA9IGNvZGVjLT5kcml2ZXItPnJlZ193b3JkX3NpemUgKiAyOwogCWludCByZXQ7CiAJY2hhciB0bXBidWZbbGVuICsgMV07CiAJY2hhciByZWdidWZbcmVnc2l6ZSArIDFdOwpAQCAtMTMyLDggKzEzMiw4IEBACiAJc2l6ZV90IHRvdGFsID0gMDsKIAlsb2ZmX3QgcCA9IDA7CiAKLQl3b3Jkc2l6ZSA9IGNvZGVjLT5kcml2ZXItPnJlZ193b3JkX3NpemUgKiAyOwotCXJlZ3NpemUgPSBtaW5fYnl0ZXNfbmVlZGVkKGNvZGVjLT5kcml2ZXItPnJlZ19jYWNoZV9zaXplKSAqIDI7CisJd29yZHNpemUgPSBtaW5fYnl0ZXNfbmVlZGVkKGNvZGVjLT5kcml2ZXItPnJlZ19jYWNoZV9zaXplKSAqIDI7CisJcmVnc2l6ZSA9IGNvZGVjLT5kcml2ZXItPnJlZ193b3JkX3NpemUgKiAyOwogCiAJbGVuID0gd29yZHNpemUgKyByZWdzaXplICsgMiArIDE7CiAKQEAgLTYyOSw2ICs2MjksNyBAQAogCQkJcnVudGltZS0+aHcucmF0ZXMgfD0gY29kZWNfZGFpX2Rydi0+Y2FwdHVyZS5yYXRlczsKIAl9CiAKKwlyZXQgPSAtRUlOVkFMOwogCXNuZF9wY21fbGltaXRfaHdfcmF0ZXMocnVudGltZSk7CiAJaWYgKCFydW50aW1lLT5ody5yYXRlcykgewogCQlwcmludGsoS0VSTl9FUlIgImFzb2M6ICVzIDwtPiAlcyBObyBtYXRjaGluZyByYXRlc1xuIiwKQEAgLTY0MCw3ICs2NDEsOCBAQAogCQkJY29kZWNfZGFpLT5uYW1lLCBjcHVfZGFpLT5uYW1lKTsKIAkJZ290byBjb25maWdfZXJyOwogCX0KLQlpZiAoIXJ1bnRpbWUtPmh3LmNoYW5uZWxzX21pbiB8fCAhcnVudGltZS0+aHcuY2hhbm5lbHNfbWF4KSB7CisJaWYgKCFydW50aW1lLT5ody5jaGFubmVsc19taW4gfHwgIXJ1bnRpbWUtPmh3LmNoYW5uZWxzX21heCB8fAorCSAgICBydW50aW1lLT5ody5jaGFubmVsc19taW4gPiBydW50aW1lLT5ody5jaGFubmVsc19tYXgpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhc29jOiAlcyA8LT4gJXMgTm8gbWF0Y2hpbmcgY2hhbm5lbHNcbiIsCiAJCQkJY29kZWNfZGFpLT5uYW1lLCBjcHVfZGFpLT5uYW1lKTsKIAkJZ290byBjb25maWdfZXJyOwpAQCAtMjA2MCw2ICsyMDYyLDcgQEAKIAkucmVzdW1lID0gc25kX3NvY19yZXN1bWUsCiAJLnBvd2Vyb2ZmID0gc25kX3NvY19wb3dlcm9mZiwKIH07CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX3BtX29wcyk7CiAKIC8qIEFTb0MgcGxhdGZvcm0gZHJpdmVyICovCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzb2NfZHJpdmVyID0gewpAQCAtMzI4OCw2ICszMjkxLDggQEAKIAlpZiAoIWNhcmQtPm5hbWUgfHwgIWNhcmQtPmRldikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlkZXZfc2V0X2RydmRhdGEoY2FyZC0+ZGV2LCBjYXJkKTsKKwogCXNuZF9zb2NfaW5pdGlhbGl6ZV9jYXJkX2xpc3RzKGNhcmQpOwogCiAJc29jX2luaXRfY2FyZF9kZWJ1Z2ZzKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3RlZ3JhL2hhcm1vbnkuYyBiL3NvdW5kL3NvYy90ZWdyYS9oYXJtb255LmMKaW5kZXggODU4NTk1Ny4uNTU2YTU3MSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3RlZ3JhL2hhcm1vbnkuYworKysgYi9zb3VuZC9zb2MvdGVncmEvaGFybW9ueS5jCkBAIC0zNzAsNiArMzcwLDcgQEAKIAkuZHJpdmVyID0gewogCQkubmFtZSA9IERSVl9OQU1FLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLnBtID0gJnNuZF9zb2NfcG1fb3BzLAogCX0sCiAJLnByb2JlID0gdGVncmFfc25kX2hhcm1vbnlfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHRlZ3JhX3NuZF9oYXJtb255X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvNmZpcmUvZmlybXdhcmUuYyBiL3NvdW5kL3VzYi82ZmlyZS9maXJtd2FyZS5jCmluZGV4IDkwODFhNTQuLjg2YzFhMzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi82ZmlyZS9maXJtd2FyZS5jCisrKyBiL3NvdW5kL3VzYi82ZmlyZS9maXJtd2FyZS5jCkBAIC03Niw3ICs3Niw3IEBACiAJdTE2IGFkZHJlc3M7CiAJdTggbGVuOwogCXU4IGRhdGFbMjU2XTsKLQljaGFyIGVycm9yOyAvKiB0cnVlIGlmIGFuIGVycm9yIG9jY3VyZWQgcGFyc2luZyB0aGlzIHJlY29yZCAqLworCWNoYXIgZXJyb3I7IC8qIHRydWUgaWYgYW4gZXJyb3Igb2NjdXJyZWQgcGFyc2luZyB0aGlzIHJlY29yZCAqLwogCiAJdTggbWF4X2xlbjsgLyogbWF4aW11bSByZWNvcmQgbGVuZ3RoIGluIHdob2xlIGloZXggKi8KIApAQCAtMTA3LDcgKzEwNyw3IEBACiAKIC8qCiAgKiByZXR1cm5zIHRydWUgaWYgcmVjb3JkIGlzIGF2YWlsYWJsZSwgZmFsc2Ugb3RoZXJ3aXNlLgotICogaWZmIGFuIGVycm9yIG9jY3VyZWQsIGZhbHNlIHdpbGwgYmUgcmV0dXJuZWQgYW5kIHJlY29yZC0+ZXJyb3Igd2lsbCBiZSB0cnVlLgorICogaWZmIGFuIGVycm9yIG9jY3VycmVkLCBmYWxzZSB3aWxsIGJlIHJldHVybmVkIGFuZCByZWNvcmQtPmVycm9yIHdpbGwgYmUgdHJ1ZS4KICAqLwogc3RhdGljIGJvb2wgdXNiNmZpcmVfZndfaWhleF9uZXh0X3JlY29yZChzdHJ1Y3QgaWhleF9yZWNvcmQgKnJlY29yZCkKIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9mb3JtYXQuYyBiL3NvdW5kL3VzYi9mb3JtYXQuYwppbmRleCA1Yjc5MmQyLi5mMDc5YjVlIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvZm9ybWF0LmMKKysrIGIvc291bmQvdXNiL2Zvcm1hdC5jCkBAIC0xNzYsOSArMTc2LDExIEBACiAJCQlpZiAoIXJhdGUpCiAJCQkJY29udGludWU7CiAJCQkvKiBDLU1lZGlhIENNNjUwMSBtaXNsYWJlbHMgaXRzIDk2IGtIeiBhbHRzZXR0aW5nICovCisJCQkvKiBUZXJyYXRlYyBBdXJlb24gNy4xIFVTQiBDLU1lZGlhIDYyMDYsIHRvbyAqLwogCQkJaWYgKHJhdGUgPT0gNDgwMDAgJiYgbnJfcmF0ZXMgPT0gMSAmJgogCQkJICAgIChjaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MGQ4YywgMHgwMjAxKSB8fAotCQkJICAgICBjaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MGQ4YywgMHgwMTAyKSkgJiYKKwkJCSAgICAgY2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDBkOGMsIDB4MDEwMikgfHwKKwkJCSAgICAgY2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDBjY2QsIDB4MDBiMSkpICYmCiAJCQkgICAgZnAtPmFsdHNldHRpbmcgPT0gNSAmJiBmcC0+bWF4cGFja3NpemUgPT0gMzkyKQogCQkJCXJhdGUgPSA5NjAwMDsKIAkJCS8qIENyZWF0aXZlIFZGMDQ3MCBMaXZlIENhbSByZXBvcnRzIDE2IGtIeiBpbnN0ZWFkIG9mIDhrSHogKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9taWRpLmMgYi9zb3VuZC91c2IvbWlkaS5jCmluZGV4IGI0YjM5YzAuLmY5Mjg5MTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9taWRpLmMKKysrIGIvc291bmQvdXNiL21pZGkuYwpAQCAtMTMwMSw2ICsxMzAxLDcgQEAKIAljYXNlIFVTQl9JRCgweDE1Y2EsIDB4MDEwMSk6IC8qIFRleHRlY2ggVVNCIE1pZGkgQ2FibGUgKi8KIAljYXNlIFVTQl9JRCgweDE1Y2EsIDB4MTgwNik6IC8qIFRleHRlY2ggVVNCIE1pZGkgQ2FibGUgKi8KIAljYXNlIFVTQl9JRCgweDFhODYsIDB4NzUyZCk6IC8qIFFpbkhlbmcgQ0gzNDUgIlVTQjIuMC1NSURJIiAqLworCWNhc2UgVVNCX0lEKDB4ZmMwOCwgMHgwMTAxKTogLyogVW5rbm93biB2ZW5kb3IgQ2FibGUgKi8KIAkJZXAtPm1heF90cmFuc2ZlciA9IDQ7CiAJCWJyZWFrOwogCQkvKgpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL21peGVyLmMgYi9zb3VuZC91c2IvbWl4ZXIuYwppbmRleCA1ZTQ3NzU3Li42ZWMzM2I2IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvbWl4ZXIuYworKysgYi9zb3VuZC91c2IvbWl4ZXIuYwpAQCAtMTE4Miw3ICsxMTgyLDcgQEAKIC8qCiAgKiBwYXJzZSBhIGZlYXR1cmUgdW5pdAogICoKLSAqIG1vc3Qgb2YgY29udHJvbGxzIGFyZSBkZWZpbmVkIGhlcmUuCisgKiBtb3N0IG9mIGNvbnRyb2xzIGFyZSBkZWZpbmVkIGhlcmUuCiAgKi8KIHN0YXRpYyBpbnQgcGFyc2VfYXVkaW9fZmVhdHVyZV91bml0KHN0cnVjdCBtaXhlcl9idWlsZCAqc3RhdGUsIGludCB1bml0aWQsIHZvaWQgKl9mdHIpCiB7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvcXVpcmtzLmMgYi9zb3VuZC91c2IvcXVpcmtzLmMKaW5kZXggMzU1NzU5Yi4uMWI5NGVjMyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3F1aXJrcy5jCisrKyBiL3NvdW5kL3VzYi9xdWlya3MuYwpAQCAtMjY2LDcgKzI2Niw3IEBACiAgKiBhdWRpby1pbnRlcmZhY2UgcXVpcmtzCiAgKgogICogcmV0dXJucyB6ZXJvIGlmIG5vIHN0YW5kYXJkIGF1ZGlvL01JREkgcGFyc2luZyBpcyBuZWVkZWQuCi0gKiByZXR1cm5zIGEgcG9zdGl2ZSB2YWx1ZSBpZiBzdGFuZGFyZCBhdWRpby9taWRpIGludGVyZmFjZXMgYXJlIHBhcnNlZAorICogcmV0dXJucyBhIHBvc2l0aXZlIHZhbHVlIGlmIHN0YW5kYXJkIGF1ZGlvL21pZGkgaW50ZXJmYWNlcyBhcmUgcGFyc2VkCiAgKiBhZnRlciB0aGlzLgogICogcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIGF0IGVycm9yLgogICovCkBAIC01MzMsNiArNTMzLDcgQEAKIAogCWNhc2UgVVNCX0lEKDB4MGQ4YywgMHgwMTAyKToKIAkJLyogQy1NZWRpYSBDTTYyMDYgLyBDTTEwNi1MaWtlIFNvdW5kIERldmljZSAqLworCWNhc2UgVVNCX0lEKDB4MGNjZCwgMHgwMGIxKTogLyogVGVycmF0ZWMgQXVyZW9uIDcuMSBVU0IgKi8KIAkJcmV0dXJuIHNuZF91c2JfY202MjA2X2Jvb3RfcXVpcmsoZGV2KTsKIAogCWNhc2UgVVNCX0lEKDB4MTMzZSwgMHgwODE1KToKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c3gyeS91c3gyeWh3ZGVwcGNtLmMgYi9zb3VuZC91c2IvdXN4MnkvdXN4Mnlod2RlcHBjbS5jCmluZGV4IDI4N2VmNzMuLmE1MTM0MGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c3gyeS91c3gyeWh3ZGVwcGNtLmMKKysrIGIvc291bmQvdXNiL3VzeDJ5L3VzeDJ5aHdkZXBwY20uYwpAQCAtMjAsNyArMjAsNyBAQAogIGF0IHN0YW5kYXJkIHNhbXBsZXJhdGVzLAogIHdoYXQgbGVkIHRvIHRoaXMgcGFydCBvZiB0aGUgdXN4MnkgbW9kdWxlOiAKICBJdCBwcm92aWRlcyB0aGUgYWxzYSBrZXJuZWwgaGFsZiBvZiB0aGUgdXN4MnktYWxzYS1qYWNrIGRyaXZlciBwYWlyLgotIFRoZSBwYWlyIHVzZXMgYSBoYXJkd2FyZSBkZXBlbmRhbnQgYWxzYS1kZXZpY2UgZm9yIG1tYXBlZCBwY20gdHJhbnNwb3J0LgorIFRoZSBwYWlyIHVzZXMgYSBoYXJkd2FyZSBkZXBlbmRlbnQgYWxzYS1kZXZpY2UgZm9yIG1tYXBlZCBwY20gdHJhbnNwb3J0LgogIEFkdmFudGFnZSBhY2hpZXZlZDoKICAgICAgICAgIFRoZSB1c2JfaGMgbW92ZXMgcGNtIGRhdGEgZnJvbS9pbnRvIG1lbW9yeSB2aWEgRE1BLgogICAgICAgICAgVGhhdCBtZW1vcnkgaXMgbW1hcGVkIGJ5IGphY2sncyB1c3gyeSBkcml2ZXIuCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgICAycGVyaW9kcyB3b3JrcyBidXQgaXMgdXNlbGVzcyBjYXVzZSBvZiBjcmFja2xpbmcpLgogCiAgVGhpcyBpcyBhIGZpcnN0ICJwcm9vZiBvZiBjb25jZXB0IiBpbXBsZW1lbnRhdGlvbi4KLSBMYXRlciwgZnVuY3Rpb25hbGl0aWVzIHNob3VsZCBtaWdyYXRlIHRvIG1vcmUgYXByb3ByaWF0ZSBwbGFjZXM6CisgTGF0ZXIsIGZ1bmN0aW9uYWxpdGllcyBzaG91bGQgbWlncmF0ZSB0byBtb3JlIGFwcHJvcHJpYXRlIHBsYWNlczoKICBVc2VybGFuZDoKICAtIFRoZSBqYWNrZCBjb3VsZCBtbWFwIGl0cyBmbG9hdC1wY20gYnVmZmVycyBkaXJlY3RseSBmcm9tIGFsc2EtbGliLgogIC0gYWxzYS1saWIgY291bGQgcHJvdmlkZSBwb3dlciBvZiAyIHBlcmlvZCBzaXplZCBzaGFwaW5nIGNvbWJpbmVkIHdpdGggaW50L2Zsb2F0CmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQppbmRleCAyMDdkZWU1Li4wYzU0MjU2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL01ha2VmaWxlCisrKyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKQEAgLTM1LDE1ICszNSwyMSBAQAogCQkJCSAgLWUgcy9wcGMuKi9wb3dlcnBjLyAtZSBzL21pcHMuKi9taXBzLyBcCiAJCQkJICAtZSBzL3NoWzIzNF0uKi9zaC8gKQogCitDQyA9ICQoQ1JPU1NfQ09NUElMRSlnY2MKK0FSID0gJChDUk9TU19DT01QSUxFKWFyCisKICMgQWRkaXRpb25hbCBBUkNIIHNldHRpbmdzIGZvciB4ODYKIGlmZXEgKCQoQVJDSCksaTM4NikKICAgICAgICAgQVJDSCA6PSB4ODYKIGVuZGlmCiBpZmVxICgkKEFSQ0gpLHg4Nl82NCkKLQlSQVdfQVJDSCA6PSB4ODZfNjQKLSAgICAgICAgQVJDSCA6PSB4ODYKLQlBUkNIX0NGTEFHUyA6PSAtREFSQ0hfWDg2XzY0Ci0JQVJDSF9JTkNMVURFID0gLi4vLi4vYXJjaC94ODYvbGliL21lbWNweV82NC5TCisJQVJDSCA6PSB4ODYKKwlJU19YODZfNjQgOj0gJChzaGVsbCBlY2hvIF9feDg2XzY0X18gfCAke0NDfSAtRSAteGMgLSB8IHRhaWwgLW4gMSkKKwlpZmVxICgke0lTX1g4Nl82NH0sIDEpCisJCVJBV19BUkNIIDo9IHg4Nl82NAorCQlBUkNIX0NGTEFHUyA6PSAtREFSQ0hfWDg2XzY0CisJCUFSQ0hfSU5DTFVERSA9IC4uLy4uL2FyY2gveDg2L2xpYi9tZW1jcHlfNjQuUworCWVuZGlmCiBlbmRpZgogCiAjCkBAIC0xMTksOCArMTI1LDYgQEAKIAogZXhwb3J0IHByZWZpeCBiaW5kaXIgc2hhcmVkaXIgc3lzY29uZmRpcgogCi1DQyA9ICQoQ1JPU1NfQ09NUElMRSlnY2MKLUFSID0gJChDUk9TU19DT01QSUxFKWFyCiBSTSA9IHJtIC1mCiBNS0RJUiA9IG1rZGlyCiBGSU5EID0gZmluZApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCmluZGV4IDE3ZDFkY2IuLjA5NzRmOTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKQEAgLTE2Myw2ICsxNjMsNyBAQAogCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIgPSAmZXZzZWwtPmF0dHI7CiAJaW50IHRyYWNrID0gIWV2c2VsLT5pZHg7IC8qIG9ubHkgdGhlIGZpcnN0IGNvdW50ZXIgbmVlZHMgdGhlc2UgKi8KIAorCWF0dHItPmluaGVyaXQJCT0gIW5vX2luaGVyaXQ7CiAJYXR0ci0+cmVhZF9mb3JtYXQJPSBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX0VOQUJMRUQgfAogCQkJCSAgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9SVU5OSU5HIHwKIAkJCQkgIFBFUkZfRk9STUFUX0lEOwpAQCAtMjUxLDYgKzI1Miw5IEBACiB7CiAJc3RydWN0IHBlcmZfZXZzZWwgKnBvczsKIAorCWlmIChldmxpc3QtPmNwdXMtPm1hcFswXSA8IDApCisJCW5vX2luaGVyaXQgPSB0cnVlOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZldmxpc3QtPmVudHJpZXMsIG5vZGUpIHsKIAkJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciA9ICZwb3MtPmF0dHI7CiAJCS8qCkBAIC0yNzEsOCArMjc1LDcgQEAKIHJldHJ5X3NhbXBsZV9pZDoKIAkJYXR0ci0+c2FtcGxlX2lkX2FsbCA9IHNhbXBsZV9pZF9hbGxfYXZhaWwgPyAxIDogMDsKIHRyeV9hZ2FpbjoKLQkJaWYgKHBlcmZfZXZzZWxfX29wZW4ocG9zLCBldmxpc3QtPmNwdXMsIGV2bGlzdC0+dGhyZWFkcywgZ3JvdXAsCi0JCQkJICAgICAhbm9faW5oZXJpdCkgPCAwKSB7CisJCWlmIChwZXJmX2V2c2VsX19vcGVuKHBvcywgZXZsaXN0LT5jcHVzLCBldmxpc3QtPnRocmVhZHMsIGdyb3VwKSA8IDApIHsKIAkJCWludCBlcnIgPSBlcnJubzsKIAogCQkJaWYgKGVyciA9PSBFUEVSTSB8fCBlcnIgPT0gRUFDQ0VTKSB7CkBAIC00MjQsNyArNDI3LDcgQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBldnNlbF9saXN0LT5jcHVzLT5ucjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGV2c2VsX2xpc3QtPm5yX21tYXBzOyBpKyspIHsKIAkJaWYgKGV2c2VsX2xpc3QtPm1tYXBbaV0uYmFzZSkKIAkJCW1tYXBfcmVhZCgmZXZzZWxfbGlzdC0+bW1hcFtpXSk7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKaW5kZXggZTIxMDlmOS4uMDNmMGU0NSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCkBAIC0xNjcsMTYgKzE2NywxNyBAQAogCQlhdHRyLT5yZWFkX2Zvcm1hdCA9IFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfRU5BQkxFRCB8CiAJCQkJICAgIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfUlVOTklORzsKIAotCWlmIChzeXN0ZW1fd2lkZSkKLQkJcmV0dXJuIHBlcmZfZXZzZWxfX29wZW5fcGVyX2NwdShldnNlbCwgZXZzZWxfbGlzdC0+Y3B1cywgZmFsc2UsIGZhbHNlKTsKLQogCWF0dHItPmluaGVyaXQgPSAhbm9faW5oZXJpdDsKKworCWlmIChzeXN0ZW1fd2lkZSkKKwkJcmV0dXJuIHBlcmZfZXZzZWxfX29wZW5fcGVyX2NwdShldnNlbCwgZXZzZWxfbGlzdC0+Y3B1cywgZmFsc2UpOworCiAJaWYgKHRhcmdldF9waWQgPT0gLTEgJiYgdGFyZ2V0X3RpZCA9PSAtMSkgewogCQlhdHRyLT5kaXNhYmxlZCA9IDE7CiAJCWF0dHItPmVuYWJsZV9vbl9leGVjID0gMTsKIAl9CiAKLQlyZXR1cm4gcGVyZl9ldnNlbF9fb3Blbl9wZXJfdGhyZWFkKGV2c2VsLCBldnNlbF9saXN0LT50aHJlYWRzLCBmYWxzZSwgZmFsc2UpOworCXJldHVybiBwZXJmX2V2c2VsX19vcGVuX3Blcl90aHJlYWQoZXZzZWwsIGV2c2VsX2xpc3QtPnRocmVhZHMsIGZhbHNlKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10ZXN0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tdGVzdC5jCmluZGV4IDFiMjEwNmMuLjJmOWEzMzcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10ZXN0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYwpAQCAtMjkwLDcgKzI5MCw3IEBACiAJCWdvdG8gb3V0X3RocmVhZF9tYXBfZGVsZXRlOwogCX0KIAotCWlmIChwZXJmX2V2c2VsX19vcGVuX3Blcl90aHJlYWQoZXZzZWwsIHRocmVhZHMsIGZhbHNlLCBmYWxzZSkgPCAwKSB7CisJaWYgKHBlcmZfZXZzZWxfX29wZW5fcGVyX3RocmVhZChldnNlbCwgdGhyZWFkcywgZmFsc2UpIDwgMCkgewogCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIG9wZW4gY291bnRlcjogJXMsICIKIAkJCSAidHdlYWsgL3Byb2Mvc3lzL2tlcm5lbC9wZXJmX2V2ZW50X3BhcmFub2lkP1xuIiwKIAkJCSBzdHJlcnJvcihlcnJubykpOwpAQCAtMzAzLDcgKzMwMyw3IEBACiAJfQogCiAJaWYgKHBlcmZfZXZzZWxfX3JlYWRfb25fY3B1KGV2c2VsLCAwLCAwKSA8IDApIHsKLQkJcHJfZGVidWcoInBlcmZfZXZzZWxfX29wZW5fcmVhZF9vbl9jcHVcbiIpOworCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fcmVhZF9vbl9jcHVcbiIpOwogCQlnb3RvIG91dF9jbG9zZV9mZDsKIAl9CiAKQEAgLTM2NSw3ICszNjUsNyBAQAogCQlnb3RvIG91dF90aHJlYWRfbWFwX2RlbGV0ZTsKIAl9CiAKLQlpZiAocGVyZl9ldnNlbF9fb3BlbihldnNlbCwgY3B1cywgdGhyZWFkcywgZmFsc2UsIGZhbHNlKSA8IDApIHsKKwlpZiAocGVyZl9ldnNlbF9fb3BlbihldnNlbCwgY3B1cywgdGhyZWFkcywgZmFsc2UpIDwgMCkgewogCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIG9wZW4gY291bnRlcjogJXMsICIKIAkJCSAidHdlYWsgL3Byb2Mvc3lzL2tlcm5lbC9wZXJmX2V2ZW50X3BhcmFub2lkP1xuIiwKIAkJCSBzdHJlcnJvcihlcnJubykpOwpAQCAtNDE4LDcgKzQxOCw3IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAocGVyZl9ldnNlbF9fcmVhZF9vbl9jcHUoZXZzZWwsIGNwdSwgMCkgPCAwKSB7Ci0JCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fb3Blbl9yZWFkX29uX2NwdVxuIik7CisJCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fcmVhZF9vbl9jcHVcbiIpOwogCQkJZXJyID0gLTE7CiAJCQlicmVhazsKIAkJfQpAQCAtNTI5LDcgKzUyOSw3IEBACiAKIAkJcGVyZl9ldmxpc3RfX2FkZChldmxpc3QsIGV2c2Vsc1tpXSk7CiAKLQkJaWYgKHBlcmZfZXZzZWxfX29wZW4oZXZzZWxzW2ldLCBjcHVzLCB0aHJlYWRzLCBmYWxzZSwgZmFsc2UpIDwgMCkgeworCQlpZiAocGVyZl9ldnNlbF9fb3BlbihldnNlbHNbaV0sIGNwdXMsIHRocmVhZHMsIGZhbHNlKSA8IDApIHsKIAkJCXByX2RlYnVnKCJmYWlsZWQgdG8gb3BlbiBjb3VudGVyOiAlcywgIgogCQkJCSAidHdlYWsgL3Byb2Mvc3lzL2tlcm5lbC9wZXJmX2V2ZW50X3BhcmFub2lkP1xuIiwKIAkJCQkgc3RyZXJyb3IoZXJybm8pKTsKQEAgLTU0OSw3ICs1NDksNyBAQAogCQkJKytmb287CiAJCX0KIAotCXdoaWxlICgoZXZlbnQgPSBwZXJmX2V2bGlzdF9fcmVhZF9vbl9jcHUoZXZsaXN0LCAwKSkgIT0gTlVMTCkgeworCXdoaWxlICgoZXZlbnQgPSBwZXJmX2V2bGlzdF9fbW1hcF9yZWFkKGV2bGlzdCwgMCkpICE9IE5VTEwpIHsKIAkJc3RydWN0IHBlcmZfc2FtcGxlIHNhbXBsZTsKIAogCQlpZiAoZXZlbnQtPmhlYWRlci50eXBlICE9IFBFUkZfUkVDT1JEX1NBTVBMRSkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCmluZGV4IGZjMTI3M2UuLmViZmM3Y2YgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKQEAgLTgwMSwxMiArODAxLDEyIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBwZXJmX3Nlc3Npb25fX21tYXBfcmVhZF9jcHUoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwgaW50IGNwdSkKK3N0YXRpYyB2b2lkIHBlcmZfc2Vzc2lvbl9fbW1hcF9yZWFkX2lkeChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLCBpbnQgaWR4KQogewogCXN0cnVjdCBwZXJmX3NhbXBsZSBzYW1wbGU7CiAJdW5pb24gcGVyZl9ldmVudCAqZXZlbnQ7CiAKLQl3aGlsZSAoKGV2ZW50ID0gcGVyZl9ldmxpc3RfX3JlYWRfb25fY3B1KHRvcC5ldmxpc3QsIGNwdSkpICE9IE5VTEwpIHsKKwl3aGlsZSAoKGV2ZW50ID0gcGVyZl9ldmxpc3RfX21tYXBfcmVhZCh0b3AuZXZsaXN0LCBpZHgpKSAhPSBOVUxMKSB7CiAJCXBlcmZfc2Vzc2lvbl9fcGFyc2Vfc2FtcGxlKHNlbGYsIGV2ZW50LCAmc2FtcGxlKTsKIAogCQlpZiAoZXZlbnQtPmhlYWRlci50eXBlID09IFBFUkZfUkVDT1JEX1NBTVBMRSkKQEAgLTgyMCw4ICs4MjAsOCBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IHRvcC5ldmxpc3QtPmNwdXMtPm5yOyBpKyspCi0JCXBlcmZfc2Vzc2lvbl9fbW1hcF9yZWFkX2NwdShzZWxmLCBpKTsKKwlmb3IgKGkgPSAwOyBpIDwgdG9wLmV2bGlzdC0+bnJfbW1hcHM7IGkrKykKKwkJcGVyZl9zZXNzaW9uX19tbWFwX3JlYWRfaWR4KHNlbGYsIGkpOwogfQogCiBzdGF0aWMgdm9pZCBzdGFydF9jb3VudGVycyhzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCkKQEAgLTg0NSw5ICs4NDUsMTAgQEAKIAkJfQogCiAJCWF0dHItPm1tYXAgPSAxOworCQlhdHRyLT5pbmhlcml0ID0gaW5oZXJpdDsKIHRyeV9hZ2FpbjoKIAkJaWYgKHBlcmZfZXZzZWxfX29wZW4oY291bnRlciwgdG9wLmV2bGlzdC0+Y3B1cywKLQkJCQkgICAgIHRvcC5ldmxpc3QtPnRocmVhZHMsIGdyb3VwLCBpbmhlcml0KSA8IDApIHsKKwkJCQkgICAgIHRvcC5ldmxpc3QtPnRocmVhZHMsIGdyb3VwKSA8IDApIHsKIAkJCWludCBlcnIgPSBlcnJubzsKIAogCQkJaWYgKGVyciA9PSBFUEVSTSB8fCBlcnIgPT0gRUFDQ0VTKSB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvY2dyb3VwLmMgYi90b29scy9wZXJmL3V0aWwvY2dyb3VwLmMKaW5kZXggOWZlYTc1NS4uOTZiZWU1YyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2Nncm91cC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9jZ3JvdXAuYwpAQCAtMTMsNyArMTMsNyBAQAogewogCUZJTEUgKmZwOwogCWNoYXIgbW91bnRwb2ludFtNQVhfUEFUSCsxXSwgdG9rZW5zW01BWF9QQVRIKzFdLCB0eXBlW01BWF9QQVRIKzFdOwotCWNoYXIgKnRva2VuLCAqc2F2ZWRfcHRyOworCWNoYXIgKnRva2VuLCAqc2F2ZWRfcHRyID0gTlVMTDsKIAlpbnQgZm91bmQgPSAwOwogCiAJZnAgPSBmb3BlbigiL3Byb2MvbW91bnRzIiwgInIiKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuYyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuYwppbmRleCBkODUyY2VmLi4yM2ViMjJiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZsaXN0LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSAiZXZsaXN0LmgiCiAjaW5jbHVkZSAiZXZzZWwuaCIKICNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKIAogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAKQEAgLTE2NSwxMSArMTY2LDExIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXVuaW9uIHBlcmZfZXZlbnQgKnBlcmZfZXZsaXN0X19yZWFkX29uX2NwdShzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwgaW50IGNwdSkKK3VuaW9uIHBlcmZfZXZlbnQgKnBlcmZfZXZsaXN0X19tbWFwX3JlYWQoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsIGludCBpZHgpCiB7CiAJLyogWFhYIE1vdmUgdGhpcyB0byBwZXJmLmMsIG1ha2luZyBpdCBnZW5lcmFsbHkgYXZhaWxhYmxlICovCiAJdW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VfU0laRSk7Ci0Jc3RydWN0IHBlcmZfbW1hcCAqbWQgPSAmZXZsaXN0LT5tbWFwW2NwdV07CisJc3RydWN0IHBlcmZfbW1hcCAqbWQgPSAmZXZsaXN0LT5tbWFwW2lkeF07CiAJdW5zaWduZWQgaW50IGhlYWQgPSBwZXJmX21tYXBfX3JlYWRfaGVhZChtZCk7CiAJdW5zaWduZWQgaW50IG9sZCA9IG1kLT5wcmV2OwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSBtZC0+YmFzZSArIHBhZ2Vfc2l6ZTsKQEAgLTIzNCwzNCArMjM1LDEyNCBAQAogCiB2b2lkIHBlcmZfZXZsaXN0X19tdW5tYXAoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpCiB7Ci0JaW50IGNwdTsKKwlpbnQgaTsKIAorCWZvciAoaSA9IDA7IGkgPCBldmxpc3QtPm5yX21tYXBzOyBpKyspIHsKKwkJaWYgKGV2bGlzdC0+bW1hcFtpXS5iYXNlICE9IE5VTEwpIHsKKwkJCW11bm1hcChldmxpc3QtPm1tYXBbaV0uYmFzZSwgZXZsaXN0LT5tbWFwX2xlbik7CisJCQlldmxpc3QtPm1tYXBbaV0uYmFzZSA9IE5VTEw7CisJCX0KKwl9CisKKwlmcmVlKGV2bGlzdC0+bW1hcCk7CisJZXZsaXN0LT5tbWFwID0gTlVMTDsKK30KKworaW50IHBlcmZfZXZsaXN0X19hbGxvY19tbWFwKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KQoreworCWV2bGlzdC0+bnJfbW1hcHMgPSBldmxpc3QtPmNwdXMtPm5yOworCWlmIChldmxpc3QtPmNwdXMtPm1hcFswXSA9PSAtMSkKKwkJZXZsaXN0LT5ucl9tbWFwcyA9IGV2bGlzdC0+dGhyZWFkcy0+bnI7CisJZXZsaXN0LT5tbWFwID0gemFsbG9jKGV2bGlzdC0+bnJfbW1hcHMgKiBzaXplb2Yoc3RydWN0IHBlcmZfbW1hcCkpOworCXJldHVybiBldmxpc3QtPm1tYXAgIT0gTlVMTCA/IDAgOiAtRU5PTUVNOworfQorCitzdGF0aWMgaW50IF9fcGVyZl9ldmxpc3RfX21tYXAoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKKwkJCSAgICAgICBpbnQgaWR4LCBpbnQgcHJvdCwgaW50IG1hc2ssIGludCBmZCkKK3sKKwlldmxpc3QtPm1tYXBbaWR4XS5wcmV2ID0gMDsKKwlldmxpc3QtPm1tYXBbaWR4XS5tYXNrID0gbWFzazsKKwlldmxpc3QtPm1tYXBbaWR4XS5iYXNlID0gbW1hcChOVUxMLCBldmxpc3QtPm1tYXBfbGVuLCBwcm90LAorCQkJCSAgICAgIE1BUF9TSEFSRUQsIGZkLCAwKTsKKwlpZiAoZXZsaXN0LT5tbWFwW2lkeF0uYmFzZSA9PSBNQVBfRkFJTEVEKSB7CisJCWlmIChldmxpc3QtPmNwdXMtPm1hcFtpZHhdID09IC0xICYmIGV2c2VsLT5hdHRyLmluaGVyaXQpCisJCQl1aV9fd2FybmluZygiSW5oZXJpdCBpcyBub3QgYWxsb3dlZCBvbiBwZXItdGFzayAiCisJCQkJICAgICJldmVudHMgdXNpbmcgbW1hcC5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcGVyZl9ldmxpc3RfX2FkZF9wb2xsZmQoZXZsaXN0LCBmZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGVyZl9ldmxpc3RfX21tYXBfcGVyX2NwdShzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwgaW50IHByb3QsIGludCBtYXNrKQoreworCXN0cnVjdCBwZXJmX2V2c2VsICpldnNlbDsKKwlpbnQgY3B1LCB0aHJlYWQ7CisKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IGV2bGlzdC0+Y3B1cy0+bnI7IGNwdSsrKSB7CisJCWludCBvdXRwdXQgPSAtMTsKKworCQlmb3IgKHRocmVhZCA9IDA7IHRocmVhZCA8IGV2bGlzdC0+dGhyZWFkcy0+bnI7IHRocmVhZCsrKSB7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2c2VsLCAmZXZsaXN0LT5lbnRyaWVzLCBub2RlKSB7CisJCQkJaW50IGZkID0gRkQoZXZzZWwsIGNwdSwgdGhyZWFkKTsKKworCQkJCWlmIChvdXRwdXQgPT0gLTEpIHsKKwkJCQkJb3V0cHV0ID0gZmQ7CisJCQkJCWlmIChfX3BlcmZfZXZsaXN0X19tbWFwKGV2bGlzdCwgZXZzZWwsIGNwdSwKKwkJCQkJCQkJcHJvdCwgbWFzaywgb3V0cHV0KSA8IDApCisJCQkJCQlnb3RvIG91dF91bm1hcDsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoaW9jdGwoZmQsIFBFUkZfRVZFTlRfSU9DX1NFVF9PVVRQVVQsIG91dHB1dCkgIT0gMCkKKwkJCQkJCWdvdG8gb3V0X3VubWFwOworCQkJCX0KKworCQkJCWlmICgoZXZzZWwtPmF0dHIucmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9JRCkgJiYKKwkJCQkgICAgcGVyZl9ldmxpc3RfX2lkX2FkZF9mZChldmxpc3QsIGV2c2VsLCBjcHUsIHRocmVhZCwgZmQpIDwgMCkKKwkJCQkJZ290byBvdXRfdW5tYXA7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X3VubWFwOgogCWZvciAoY3B1ID0gMDsgY3B1IDwgZXZsaXN0LT5jcHVzLT5ucjsgY3B1KyspIHsKIAkJaWYgKGV2bGlzdC0+bW1hcFtjcHVdLmJhc2UgIT0gTlVMTCkgewogCQkJbXVubWFwKGV2bGlzdC0+bW1hcFtjcHVdLmJhc2UsIGV2bGlzdC0+bW1hcF9sZW4pOwogCQkJZXZsaXN0LT5tbWFwW2NwdV0uYmFzZSA9IE5VTEw7CiAJCX0KIAl9CisJcmV0dXJuIC0xOwogfQogCi1pbnQgcGVyZl9ldmxpc3RfX2FsbG9jX21tYXAoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpCitzdGF0aWMgaW50IHBlcmZfZXZsaXN0X19tbWFwX3Blcl90aHJlYWQoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsIGludCBwcm90LCBpbnQgbWFzaykKIHsKLQlldmxpc3QtPm1tYXAgPSB6YWxsb2MoZXZsaXN0LT5jcHVzLT5uciAqIHNpemVvZihzdHJ1Y3QgcGVyZl9tbWFwKSk7Ci0JcmV0dXJuIGV2bGlzdC0+bW1hcCAhPSBOVUxMID8gMCA6IC1FTk9NRU07Ci19CisJc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsOworCWludCB0aHJlYWQ7CiAKLXN0YXRpYyBpbnQgX19wZXJmX2V2bGlzdF9fbW1hcChzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwgaW50IGNwdSwgaW50IHByb3QsCi0JCQkgICAgICAgaW50IG1hc2ssIGludCBmZCkKLXsKLQlldmxpc3QtPm1tYXBbY3B1XS5wcmV2ID0gMDsKLQlldmxpc3QtPm1tYXBbY3B1XS5tYXNrID0gbWFzazsKLQlldmxpc3QtPm1tYXBbY3B1XS5iYXNlID0gbW1hcChOVUxMLCBldmxpc3QtPm1tYXBfbGVuLCBwcm90LAotCQkJCSAgICAgIE1BUF9TSEFSRUQsIGZkLCAwKTsKLQlpZiAoZXZsaXN0LT5tbWFwW2NwdV0uYmFzZSA9PSBNQVBfRkFJTEVEKQotCQlyZXR1cm4gLTE7CisJZm9yICh0aHJlYWQgPSAwOyB0aHJlYWQgPCBldmxpc3QtPnRocmVhZHMtPm5yOyB0aHJlYWQrKykgeworCQlpbnQgb3V0cHV0ID0gLTE7CiAKLQlwZXJmX2V2bGlzdF9fYWRkX3BvbGxmZChldmxpc3QsIGZkKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShldnNlbCwgJmV2bGlzdC0+ZW50cmllcywgbm9kZSkgeworCQkJaW50IGZkID0gRkQoZXZzZWwsIDAsIHRocmVhZCk7CisKKwkJCWlmIChvdXRwdXQgPT0gLTEpIHsKKwkJCQlvdXRwdXQgPSBmZDsKKwkJCQlpZiAoX19wZXJmX2V2bGlzdF9fbW1hcChldmxpc3QsIGV2c2VsLCB0aHJlYWQsCisJCQkJCQkJcHJvdCwgbWFzaywgb3V0cHV0KSA8IDApCisJCQkJCWdvdG8gb3V0X3VubWFwOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoaW9jdGwoZmQsIFBFUkZfRVZFTlRfSU9DX1NFVF9PVVRQVVQsIG91dHB1dCkgIT0gMCkKKwkJCQkJZ290byBvdXRfdW5tYXA7CisJCQl9CisKKwkJCWlmICgoZXZzZWwtPmF0dHIucmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9JRCkgJiYKKwkJCSAgICBwZXJmX2V2bGlzdF9faWRfYWRkX2ZkKGV2bGlzdCwgZXZzZWwsIDAsIHRocmVhZCwgZmQpIDwgMCkKKwkJCQlnb3RvIG91dF91bm1hcDsKKwkJfQorCX0KKwogCXJldHVybiAwOworCitvdXRfdW5tYXA6CisJZm9yICh0aHJlYWQgPSAwOyB0aHJlYWQgPCBldmxpc3QtPnRocmVhZHMtPm5yOyB0aHJlYWQrKykgeworCQlpZiAoZXZsaXN0LT5tbWFwW3RocmVhZF0uYmFzZSAhPSBOVUxMKSB7CisJCQltdW5tYXAoZXZsaXN0LT5tbWFwW3RocmVhZF0uYmFzZSwgZXZsaXN0LT5tbWFwX2xlbik7CisJCQlldmxpc3QtPm1tYXBbdGhyZWFkXS5iYXNlID0gTlVMTDsKKwkJfQorCX0KKwlyZXR1cm4gLTE7CiB9CiAKIC8qKiBwZXJmX2V2bGlzdF9fbW1hcCAtIENyZWF0ZSBwZXIgY3B1IG1hcHMgdG8gcmVjZWl2ZSBldmVudHMKQEAgLTI4MiwxMSArMzczLDExIEBACiBpbnQgcGVyZl9ldmxpc3RfX21tYXAoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsIGludCBwYWdlcywgYm9vbCBvdmVyd3JpdGUpCiB7CiAJdW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VfU0laRSk7Ci0JaW50IG1hc2sgPSBwYWdlcyAqIHBhZ2Vfc2l6ZSAtIDEsIGNwdTsKLQlzdHJ1Y3QgcGVyZl9ldnNlbCAqZmlyc3RfZXZzZWwsICpldnNlbDsKKwlpbnQgbWFzayA9IHBhZ2VzICogcGFnZV9zaXplIC0gMTsKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWw7CiAJY29uc3Qgc3RydWN0IGNwdV9tYXAgKmNwdXMgPSBldmxpc3QtPmNwdXM7CiAJY29uc3Qgc3RydWN0IHRocmVhZF9tYXAgKnRocmVhZHMgPSBldmxpc3QtPnRocmVhZHM7Ci0JaW50IHRocmVhZCwgcHJvdCA9IFBST1RfUkVBRCB8IChvdmVyd3JpdGUgPyAwIDogUFJPVF9XUklURSk7CisJaW50IHByb3QgPSBQUk9UX1JFQUQgfCAob3ZlcndyaXRlID8gMCA6IFBST1RfV1JJVEUpOwogCiAJaWYgKGV2bGlzdC0+bW1hcCA9PSBOVUxMICYmIHBlcmZfZXZsaXN0X19hbGxvY19tbWFwKGV2bGlzdCkgPCAwKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTI5Niw0MiArMzg3LDE4IEBACiAKIAlldmxpc3QtPm92ZXJ3cml0ZSA9IG92ZXJ3cml0ZTsKIAlldmxpc3QtPm1tYXBfbGVuID0gKHBhZ2VzICsgMSkgKiBwYWdlX3NpemU7Ci0JZmlyc3RfZXZzZWwgPSBsaXN0X2VudHJ5KGV2bGlzdC0+ZW50cmllcy5uZXh0LCBzdHJ1Y3QgcGVyZl9ldnNlbCwgbm9kZSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2c2VsLCAmZXZsaXN0LT5lbnRyaWVzLCBub2RlKSB7CiAJCWlmICgoZXZzZWwtPmF0dHIucmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9JRCkgJiYKIAkJICAgIGV2c2VsLT5zYW1wbGVfaWQgPT0gTlVMTCAmJgogCQkgICAgcGVyZl9ldnNlbF9fYWxsb2NfaWQoZXZzZWwsIGNwdXMtPm5yLCB0aHJlYWRzLT5ucikgPCAwKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVzLT5ucjsgY3B1KyspIHsKLQkJCWZvciAodGhyZWFkID0gMDsgdGhyZWFkIDwgdGhyZWFkcy0+bnI7IHRocmVhZCsrKSB7Ci0JCQkJaW50IGZkID0gRkQoZXZzZWwsIGNwdSwgdGhyZWFkKTsKLQotCQkJCWlmIChldnNlbC0+aWR4IHx8IHRocmVhZCkgewotCQkJCQlpZiAoaW9jdGwoZmQsIFBFUkZfRVZFTlRfSU9DX1NFVF9PVVRQVVQsCi0JCQkJCQkgIEZEKGZpcnN0X2V2c2VsLCBjcHUsIDApKSAhPSAwKQotCQkJCQkJZ290byBvdXRfdW5tYXA7Ci0JCQkJfSBlbHNlIGlmIChfX3BlcmZfZXZsaXN0X19tbWFwKGV2bGlzdCwgY3B1LCBwcm90LCBtYXNrLCBmZCkgPCAwKQotCQkJCQlnb3RvIG91dF91bm1hcDsKLQotCQkJCWlmICgoZXZzZWwtPmF0dHIucmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9JRCkgJiYKLQkJCQkgICAgcGVyZl9ldmxpc3RfX2lkX2FkZF9mZChldmxpc3QsIGV2c2VsLCBjcHUsIHRocmVhZCwgZmQpIDwgMCkKLQkJCQkJZ290byBvdXRfdW5tYXA7Ci0JCQl9Ci0JCX0KIAl9CiAKLQlyZXR1cm4gMDsKKwlpZiAoZXZsaXN0LT5jcHVzLT5tYXBbMF0gPT0gLTEpCisJCXJldHVybiBwZXJmX2V2bGlzdF9fbW1hcF9wZXJfdGhyZWFkKGV2bGlzdCwgcHJvdCwgbWFzayk7CiAKLW91dF91bm1hcDoKLQlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdXMtPm5yOyBjcHUrKykgewotCQlpZiAoZXZsaXN0LT5tbWFwW2NwdV0uYmFzZSAhPSBOVUxMKSB7Ci0JCQltdW5tYXAoZXZsaXN0LT5tbWFwW2NwdV0uYmFzZSwgZXZsaXN0LT5tbWFwX2xlbik7Ci0JCQlldmxpc3QtPm1tYXBbY3B1XS5iYXNlID0gTlVMTDsKLQkJfQotCX0KLQlyZXR1cm4gLTE7CisJcmV0dXJuIHBlcmZfZXZsaXN0X19tbWFwX3Blcl9jcHUoZXZsaXN0LCBwcm90LCBtYXNrKTsKIH0KIAogaW50IHBlcmZfZXZsaXN0X19jcmVhdGVfbWFwcyhzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwgcGlkX3QgdGFyZ2V0X3BpZCwKQEAgLTM0Miw3ICs0MDksNyBAQAogCWlmIChldmxpc3QtPnRocmVhZHMgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKHRhcmdldF90aWQgIT0gLTEpCisJaWYgKGNwdV9saXN0ID09IE5VTEwgJiYgdGFyZ2V0X3RpZCAhPSAtMSkKIAkJZXZsaXN0LT5jcHVzID0gY3B1X21hcF9fZHVtbXlfbmV3KCk7CiAJZWxzZQogCQlldmxpc3QtPmNwdXMgPSBjcHVfbWFwX19uZXcoY3B1X2xpc3QpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5oIGIvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5oCmluZGV4IDhiMWNiN2EuLjcxMDlkN2EgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuaAorKysgYi90b29scy9wZXJmL3V0aWwvZXZsaXN0LmgKQEAgLTE3LDYgKzE3LDcgQEAKIAlzdHJ1Y3QgaGxpc3RfaGVhZCBoZWFkc1tQRVJGX0VWTElTVF9fSExJU1RfU0laRV07CiAJaW50CQkgbnJfZW50cmllczsKIAlpbnQJCSBucl9mZHM7CisJaW50CQkgbnJfbW1hcHM7CiAJaW50CQkgbW1hcF9sZW47CiAJYm9vbAkJIG92ZXJ3cml0ZTsKIAl1bmlvbiBwZXJmX2V2ZW50IGV2ZW50X2NvcHk7CkBAIC00Niw3ICs0Nyw3IEBACiAKIHN0cnVjdCBwZXJmX2V2c2VsICpwZXJmX2V2bGlzdF9faWQyZXZzZWwoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsIHU2NCBpZCk7CiAKLXVuaW9uIHBlcmZfZXZlbnQgKnBlcmZfZXZsaXN0X19yZWFkX29uX2NwdShzdHJ1Y3QgcGVyZl9ldmxpc3QgKnNlbGYsIGludCBjcHUpOwordW5pb24gcGVyZl9ldmVudCAqcGVyZl9ldmxpc3RfX21tYXBfcmVhZChzdHJ1Y3QgcGVyZl9ldmxpc3QgKnNlbGYsIGludCBpZHgpOwogCiBpbnQgcGVyZl9ldmxpc3RfX2FsbG9jX21tYXAoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpOwogaW50IHBlcmZfZXZsaXN0X19tbWFwKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0LCBpbnQgcGFnZXMsIGJvb2wgb3ZlcndyaXRlKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5jIGIvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMKaW5kZXggNjYyNTk2YS4uZDZmZDU5YiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMKQEAgLTE3NSw3ICsxNzUsNyBAQAogfQogCiBzdGF0aWMgaW50IF9fcGVyZl9ldnNlbF9fb3BlbihzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIHN0cnVjdCBjcHVfbWFwICpjcHVzLAotCQkJICAgICAgc3RydWN0IHRocmVhZF9tYXAgKnRocmVhZHMsIGJvb2wgZ3JvdXAsIGJvb2wgaW5oZXJpdCkKKwkJCSAgICAgIHN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzLCBib29sIGdyb3VwKQogewogCWludCBjcHUsIHRocmVhZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKQEAgLTE5MiwxOSArMTkyLDYgQEAKIAogCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1cy0+bnI7IGNwdSsrKSB7CiAJCWludCBncm91cF9mZCA9IC0xOwotCQkvKgotCQkgKiBEb24ndCBhbGxvdyBtbWFwKCkgb2YgaW5oZXJpdGVkIHBlci10YXNrIGNvdW50ZXJzLiBUaGlzCi0JCSAqIHdvdWxkIGNyZWF0ZSBhIHBlcmZvcm1hbmNlIGlzc3VlIGR1ZSB0byBhbGwgY2hpbGRyZW4gd3JpdGluZwotCQkgKiB0byB0aGUgc2FtZSBidWZmZXIuCi0JCSAqCi0JCSAqIEZJWE1FOgotCQkgKiBQcm9wZXIgZml4IGlzIG5vdCB0byBwYXNzICdpbmhlcml0JyB0byBwZXJmX2V2c2VsX19vcGVuKiwKLQkJICogYnV0IGEgJ2ZsYWdzJyBwYXJhbWV0ZXIsIHdpdGggJ2dyb3VwJyBmb2xkZWQgdGhlcmUgYXMgd2VsbCwKLQkJICogdGhlbiBpbnRyb2R1Y2UgYSBQRVJGX09fe01NQVAsR1JPVVAsSU5IRVJJVH0gZW51bSwgYW5kIGlmCi0JCSAqIE9fTU1BUCBpcyBzZXQsIGVtaXQgYSB3YXJuaW5nIGlmIGNwdSA8IDAgYW5kIE9fSU5IRVJJVCBpcwotCQkgKiBzZXQuIExldHMgZ28gZm9yIHRoZSBtaW5pbWFsIGZpeCBmaXJzdCB0aG8uCi0JCSAqLwotCQlldnNlbC0+YXR0ci5pbmhlcml0ID0gKGNwdXMtPm1hcFtjcHVdID49IDApICYmIGluaGVyaXQ7CiAKIAkJZm9yICh0aHJlYWQgPSAwOyB0aHJlYWQgPCB0aHJlYWRzLT5ucjsgdGhyZWFkKyspIHsKIApAQCAtMjUzLDcgKzI0MCw3IEBACiB9OwogCiBpbnQgcGVyZl9ldnNlbF9fb3BlbihzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIHN0cnVjdCBjcHVfbWFwICpjcHVzLAotCQkgICAgIHN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzLCBib29sIGdyb3VwLCBib29sIGluaGVyaXQpCisJCSAgICAgc3RydWN0IHRocmVhZF9tYXAgKnRocmVhZHMsIGJvb2wgZ3JvdXApCiB7CiAJaWYgKGNwdXMgPT0gTlVMTCkgewogCQkvKiBXb3JrIGFyb3VuZCBvbGQgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgc3RyaWN0IGFsaWFzaW5nICovCkBAIC0yNjMsMTkgKzI1MCwxOSBAQAogCWlmICh0aHJlYWRzID09IE5VTEwpCiAJCXRocmVhZHMgPSAmZW1wdHlfdGhyZWFkX21hcC5tYXA7CiAKLQlyZXR1cm4gX19wZXJmX2V2c2VsX19vcGVuKGV2c2VsLCBjcHVzLCB0aHJlYWRzLCBncm91cCwgaW5oZXJpdCk7CisJcmV0dXJuIF9fcGVyZl9ldnNlbF9fb3BlbihldnNlbCwgY3B1cywgdGhyZWFkcywgZ3JvdXApOwogfQogCiBpbnQgcGVyZl9ldnNlbF9fb3Blbl9wZXJfY3B1KHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKLQkJCSAgICAgc3RydWN0IGNwdV9tYXAgKmNwdXMsIGJvb2wgZ3JvdXAsIGJvb2wgaW5oZXJpdCkKKwkJCSAgICAgc3RydWN0IGNwdV9tYXAgKmNwdXMsIGJvb2wgZ3JvdXApCiB7Ci0JcmV0dXJuIF9fcGVyZl9ldnNlbF9fb3BlbihldnNlbCwgY3B1cywgJmVtcHR5X3RocmVhZF9tYXAubWFwLCBncm91cCwgaW5oZXJpdCk7CisJcmV0dXJuIF9fcGVyZl9ldnNlbF9fb3BlbihldnNlbCwgY3B1cywgJmVtcHR5X3RocmVhZF9tYXAubWFwLCBncm91cCk7CiB9CiAKIGludCBwZXJmX2V2c2VsX19vcGVuX3Blcl90aHJlYWQoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAotCQkJCXN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzLCBib29sIGdyb3VwLCBib29sIGluaGVyaXQpCisJCQkJc3RydWN0IHRocmVhZF9tYXAgKnRocmVhZHMsIGJvb2wgZ3JvdXApCiB7Ci0JcmV0dXJuIF9fcGVyZl9ldnNlbF9fb3BlbihldnNlbCwgJmVtcHR5X2NwdV9tYXAubWFwLCB0aHJlYWRzLCBncm91cCwgaW5oZXJpdCk7CisJcmV0dXJuIF9fcGVyZl9ldnNlbF9fb3BlbihldnNlbCwgJmVtcHR5X2NwdV9tYXAubWFwLCB0aHJlYWRzLCBncm91cCk7CiB9CiAKIHN0YXRpYyBpbnQgcGVyZl9ldmVudF9fcGFyc2VfaWRfc2FtcGxlKGNvbnN0IHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LCB1NjQgdHlwZSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5oIGIvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmgKaW5kZXggNjcxMGFiNS4uZjc5YmIyYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmgKQEAgLTgxLDExICs4MSwxMSBAQAogdm9pZCBwZXJmX2V2c2VsX19jbG9zZV9mZChzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIGludCBuY3B1cywgaW50IG50aHJlYWRzKTsKIAogaW50IHBlcmZfZXZzZWxfX29wZW5fcGVyX2NwdShzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCi0JCQkgICAgIHN0cnVjdCBjcHVfbWFwICpjcHVzLCBib29sIGdyb3VwLCBib29sIGluaGVyaXQpOworCQkJICAgICBzdHJ1Y3QgY3B1X21hcCAqY3B1cywgYm9vbCBncm91cCk7CiBpbnQgcGVyZl9ldnNlbF9fb3Blbl9wZXJfdGhyZWFkKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKLQkJCQlzdHJ1Y3QgdGhyZWFkX21hcCAqdGhyZWFkcywgYm9vbCBncm91cCwgYm9vbCBpbmhlcml0KTsKKwkJCQlzdHJ1Y3QgdGhyZWFkX21hcCAqdGhyZWFkcywgYm9vbCBncm91cCk7CiBpbnQgcGVyZl9ldnNlbF9fb3BlbihzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIHN0cnVjdCBjcHVfbWFwICpjcHVzLAotCQkgICAgIHN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzLCBib29sIGdyb3VwLCBib29sIGluaGVyaXQpOworCQkgICAgIHN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzLCBib29sIGdyb3VwKTsKIAogI2RlZmluZSBwZXJmX2V2c2VsX19tYXRjaChldnNlbCwgdCwgYykJCVwKIAkoZXZzZWwtPmF0dHIudHlwZSA9PSBQRVJGX1RZUEVfIyN0ICYmCVwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKaW5kZXggNWRkZWU2Ni4uZjAyMjMxNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKQEAgLTIzNCw3ICsyMzQsNiBAQAogCiAJLyogU2VhcmNoaW5nIHRyYWNlIGV2ZW50cyBjb3JyZXNwb25kaW5nIHRvIHByb2JlIGV2ZW50ICovCiAJbnRldnMgPSBmaW5kX3Byb2JlX3RyYWNlX2V2ZW50cyhmZCwgcGV2LCB0ZXZzLCBtYXhfdGV2cyk7Ci0JY2xvc2UoZmQpOwogCiAJaWYgKG50ZXZzID4gMCkgewkvKiBTdWNjZWVkZWQgdG8gZmluZCB0cmFjZSBldmVudHMgKi8KIAkJcHJfZGVidWcoImZpbmQgJWQgcHJvYmVfdHJhY2VfZXZlbnRzLlxuIiwgbnRldnMpOwpAQCAtMzg4LDcgKzM4Nyw2IEBACiAJfQogCiAJcmV0ID0gZmluZF9saW5lX3JhbmdlKGZkLCBscik7Ci0JY2xvc2UoZmQpOwogCWlmIChyZXQgPT0gMCkgewogCQlwcl93YXJuaW5nKCJTcGVjaWZpZWQgc291cmNlIGxpbmUgaXMgbm90IGZvdW5kLlxuIik7CiAJCXJldHVybiAtRU5PRU5UOwpAQCAtNTEyLDE5ICs1MTAsMTggQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCWZkID0gb3Blbl92bWxpbnV4KG1vZHVsZSk7Ci0JaWYgKGZkIDwgMCkgewotCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gb3BlbiBkZWJ1ZyBpbmZvcm1hdGlvbiBmaWxlLlxuIik7Ci0JCXJldHVybiBmZDsKLQl9Ci0KIAlzZXR1cF9wYWdlcigpOwogCi0JZm9yIChpID0gMDsgaSA8IG5wZXZzICYmIHJldCA+PSAwOyBpKyspCisJZm9yIChpID0gMDsgaSA8IG5wZXZzICYmIHJldCA+PSAwOyBpKyspIHsKKwkJZmQgPSBvcGVuX3ZtbGludXgobW9kdWxlKTsKKwkJaWYgKGZkIDwgMCkgeworCQkJcHJfd2FybmluZygiRmFpbGVkIHRvIG9wZW4gZGVidWcgaW5mb3JtYXRpb24gZmlsZS5cbiIpOworCQkJcmV0ID0gZmQ7CisJCQlicmVhazsKKwkJfQogCQlyZXQgPSBzaG93X2F2YWlsYWJsZV92YXJzX2F0KGZkLCAmcGV2c1tpXSwgbWF4X3ZscywgX2ZpbHRlciwKIAkJCQkJICAgICBleHRlcm5zKTsKLQotCWNsb3NlKGZkKTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jCmluZGV4IDE5NGY5ZTIuLmI3Yzg1Y2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYworKysgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMKQEAgLTI3Myw2ICsyNzMsMjUgQEAKIAlyZXR1cm4gZHdhcmZfZm9ybXN0cmluZygmYXR0cik7CiB9CiAKKy8qIEdldCBhIGxpbmUgbnVtYmVyIGFuZCBmaWxlIG5hbWUgZm9yIGdpdmVuIGFkZHJlc3MgKi8KK3N0YXRpYyBpbnQgY3VfZmluZF9saW5laW5mbyhEd2FyZl9EaWUgKmN1ZGllLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICAgY29uc3QgY2hhciAqKmZuYW1lLCBpbnQgKmxpbmVubykKK3sKKwlEd2FyZl9MaW5lICpsaW5lOworCUR3YXJmX0FkZHIgbGFkZHI7CisKKwlsaW5lID0gZHdhcmZfZ2V0c3JjX2RpZShjdWRpZSwgKER3YXJmX0FkZHIpYWRkcik7CisJaWYgKGxpbmUgJiYgZHdhcmZfbGluZWFkZHIobGluZSwgJmxhZGRyKSA9PSAwICYmCisJICAgIGFkZHIgPT0gKHVuc2lnbmVkIGxvbmcpbGFkZHIgJiYgZHdhcmZfbGluZW5vKGxpbmUsIGxpbmVubykgPT0gMCkgeworCQkqZm5hbWUgPSBkd2FyZl9saW5lc3JjKGxpbmUsIE5VTEwsIE5VTEwpOworCQlpZiAoISpmbmFtZSkKKwkJCS8qIGxpbmUgbnVtYmVyIGlzIHVzZWxlc3Mgd2l0aG91dCBmaWxlbmFtZSAqLworCQkJKmxpbmVubyA9IDA7CisJfQorCisJcmV0dXJuICpsaW5lbm8gPzogLUVOT0VOVDsKK30KKwogLyogQ29tcGFyZSBkaWVuYW1lIGFuZCB0bmFtZSAqLwogc3RhdGljIGJvb2wgZGllX2NvbXBhcmVfbmFtZShEd2FyZl9EaWUgKmR3X2RpZSwgY29uc3QgY2hhciAqdG5hbWUpCiB7CkBAIC00OTcsNyArNTE2LDIwIEBACiBzdGF0aWMgRHdhcmZfRGllICpkaWVfZmluZF9pbmxpbmVmdW5jKER3YXJmX0RpZSAqc3BfZGllLCBEd2FyZl9BZGRyIGFkZHIsCiAJCQkJICAgICAgRHdhcmZfRGllICpkaWVfbWVtKQogewotCXJldHVybiBkaWVfZmluZF9jaGlsZChzcF9kaWUsIF9fZGllX2ZpbmRfaW5saW5lX2NiLCAmYWRkciwgZGllX21lbSk7CisJRHdhcmZfRGllIHRtcF9kaWU7CisKKwlzcF9kaWUgPSBkaWVfZmluZF9jaGlsZChzcF9kaWUsIF9fZGllX2ZpbmRfaW5saW5lX2NiLCAmYWRkciwgJnRtcF9kaWUpOworCWlmICghc3BfZGllKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIElubGluZWQgZnVuY3Rpb24gY291bGQgYmUgcmVjdXJzaXZlLiBUcmFjZSBpdCB1bnRpbCBmYWlsICovCisJd2hpbGUgKHNwX2RpZSkgeworCQltZW1jcHkoZGllX21lbSwgc3BfZGllLCBzaXplb2YoRHdhcmZfRGllKSk7CisJCXNwX2RpZSA9IGRpZV9maW5kX2NoaWxkKHNwX2RpZSwgX19kaWVfZmluZF9pbmxpbmVfY2IsICZhZGRyLAorCQkJCQkmdG1wX2RpZSk7CisJfQorCisJcmV0dXJuIGRpZV9tZW07CiB9CiAKIC8qIFdhbGtlciBvbiBsaW5lcyAoTm90ZTogbGluZSBudW1iZXIgd2lsbCBub3QgYmUgc29ydGVkKSAqLwpAQCAtMTM5NSw2ICsxNDI3LDEwIEBACiAJICAgICFkaWVfY29tcGFyZV9uYW1lKHNwX2RpZSwgcHAtPmZ1bmN0aW9uKSkKIAkJcmV0dXJuIERXQVJGX0NCX09LOwogCisJLyogQ2hlY2sgZGVjbGFyZWQgZmlsZSAqLworCWlmIChwcC0+ZmlsZSAmJiBzdHJ0YWlsY21wKHBwLT5maWxlLCBkd2FyZl9kZWNsX2ZpbGUoc3BfZGllKSkpCisJCXJldHVybiBEV0FSRl9DQl9PSzsKKwogCXBmLT5mbmFtZSA9IGR3YXJmX2RlY2xfZmlsZShzcF9kaWUpOwogCWlmIChwcC0+bGluZSkgeyAvKiBGdW5jdGlvbiByZWxhdGl2ZSBsaW5lICovCiAJCWR3YXJmX2RlY2xfbGluZShzcF9kaWUsICZwZi0+bG5vKTsKQEAgLTE0NTEsNiArMTQ4Nyw3IEBACiAJaWYgKCFkYmcpIHsKIAkJcHJfd2FybmluZygiTm8gZGVidWcgaW5mb3JtYXRpb24gZm91bmQgaW4gdGhlIHZtbGludXggLSAiCiAJCQkicGxlYXNlIHJlYnVpbGQgd2l0aCBDT05GSUdfREVCVUdfSU5GTz15LlxuIik7CisJCWNsb3NlKGZkKTsJLyogV2l0aG91dCBkd2ZsX2VuZCgpLCBmZCBpc24ndCBjbG9zZWQuICovCiAJCXJldHVybiAtRUJBREY7CiAJfQogCkBAIC0xNjg2LDExICsxNzIzLDkgQEAKIAlEd2FyZl9EaWUgY3VkaWUsIHNwZGllLCBpbmRpZTsKIAlEd2FyZiAqZGJnID0gTlVMTDsKIAlEd2ZsICpkd2ZsID0gTlVMTDsKLQlEd2FyZl9MaW5lICpsaW5lOwotCUR3YXJmX0FkZHIgbGFkZHIsIGVhZGRyLCBiaWFzID0gMDsKLQljb25zdCBjaGFyICp0bXA7Ci0JaW50IGxpbmVubywgcmV0ID0gMDsKLQlib29sIGZvdW5kID0gZmFsc2U7CisJRHdhcmZfQWRkciBfYWRkciwgYmFzZWFkZHIsIGJpYXMgPSAwOworCWNvbnN0IGNoYXIgKmZuYW1lID0gTlVMTCwgKmZ1bmMgPSBOVUxMLCAqdG1wOworCWludCBiYXNlbGluZSA9IDAsIGxpbmVubyA9IDAsIHJldCA9IDA7CiAKIAkvKiBPcGVuIHRoZSBsaXZlIGxpbnV4IGtlcm5lbCAqLwogCWRiZyA9IGR3ZmxfaW5pdF9saXZlX2tlcm5lbF9kd2FyZihhZGRyLCAmZHdmbCwgJmJpYXMpOwpAQCAtMTcxMSw2OCArMTc0Niw3OSBAQAogCQlnb3RvIGVuZDsKIAl9CiAKLQkvKiBGaW5kIGEgY29ycmVzcG9uZGluZyBsaW5lICovCi0JbGluZSA9IGR3YXJmX2dldHNyY19kaWUoJmN1ZGllLCAoRHdhcmZfQWRkcilhZGRyKTsKLQlpZiAobGluZSkgewotCQlpZiAoZHdhcmZfbGluZWFkZHIobGluZSwgJmxhZGRyKSA9PSAwICYmCi0JCSAgICAoRHdhcmZfQWRkcilhZGRyID09IGxhZGRyICYmCi0JCSAgICBkd2FyZl9saW5lbm8obGluZSwgJmxpbmVubykgPT0gMCkgewotCQkJdG1wID0gZHdhcmZfbGluZXNyYyhsaW5lLCBOVUxMLCBOVUxMKTsKLQkJCWlmICh0bXApIHsKLQkJCQlwcHQtPmxpbmUgPSBsaW5lbm87Ci0JCQkJcHB0LT5maWxlID0gc3RyZHVwKHRtcCk7Ci0JCQkJaWYgKHBwdC0+ZmlsZSA9PSBOVUxMKSB7Ci0JCQkJCXJldCA9IC1FTk9NRU07Ci0JCQkJCWdvdG8gZW5kOwotCQkJCX0KLQkJCQlmb3VuZCA9IHRydWU7CisJLyogRmluZCBhIGNvcnJlc3BvbmRpbmcgbGluZSAoZmlsZW5hbWUgYW5kIGxpbmVubykgKi8KKwljdV9maW5kX2xpbmVpbmZvKCZjdWRpZSwgYWRkciwgJmZuYW1lLCAmbGluZW5vKTsKKwkvKiBEb24ndCBjYXJlIHdoZXRoZXIgaXQgZmFpbGVkIG9yIG5vdCAqLworCisJLyogRmluZCBhIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gKG5hbWUsIGJhc2VsaW5lIGFuZCBiYXNlYWRkcikgKi8KKwlpZiAoZGllX2ZpbmRfcmVhbF9zdWJwcm9ncmFtKCZjdWRpZSwgKER3YXJmX0FkZHIpYWRkciwgJnNwZGllKSkgeworCQkvKiBHZXQgZnVuY3Rpb24gZW50cnkgaW5mb3JtYXRpb24gKi8KKwkJdG1wID0gZHdhcmZfZGllbmFtZSgmc3BkaWUpOworCQlpZiAoIXRtcCB8fAorCQkgICAgZHdhcmZfZW50cnlwYygmc3BkaWUsICZiYXNlYWRkcikgIT0gMCB8fAorCQkgICAgZHdhcmZfZGVjbF9saW5lKCZzcGRpZSwgJmJhc2VsaW5lKSAhPSAwKQorCQkJZ290byBwb3N0OworCQlmdW5jID0gdG1wOworCisJCWlmIChhZGRyID09ICh1bnNpZ25lZCBsb25nKWJhc2VhZGRyKQorCQkJLyogRnVuY3Rpb24gZW50cnkgLSBSZWxhdGl2ZSBsaW5lIG51bWJlciBpcyAwICovCisJCQlsaW5lbm8gPSBiYXNlbGluZTsKKwkJZWxzZSBpZiAoZGllX2ZpbmRfaW5saW5lZnVuYygmc3BkaWUsIChEd2FyZl9BZGRyKWFkZHIsCisJCQkJCSAgICAgJmluZGllKSkgeworCQkJaWYgKGR3YXJmX2VudHJ5cGMoJmluZGllLCAmX2FkZHIpID09IDAgJiYKKwkJCSAgICBfYWRkciA9PSBhZGRyKQorCQkJCS8qCisJCQkJICogYWRkciBpcyBhdCBhbiBpbmxpbmUgZnVuY3Rpb24gZW50cnkuCisJCQkJICogSW4gdGhpcyBjYXNlLCBsaW5lbm8gc2hvdWxkIGJlIHRoZSBjYWxsLXNpdGUKKwkJCQkgKiBsaW5lIG51bWJlci4KKwkJCQkgKi8KKwkJCQlsaW5lbm8gPSBkaWVfZ2V0X2NhbGxfbGluZW5vKCZpbmRpZSk7CisJCQllbHNlIHsKKwkJCQkvKgorCQkJCSAqIGFkZHIgaXMgaW4gYW4gaW5saW5lIGZ1bmN0aW9uIGJvZHkuCisJCQkJICogU2luY2UgbGluZW5vIHBvaW50cyBvbmUgb2YgdGhlIGxpbmVzCisJCQkJICogb2YgdGhlIGlubGluZSBmdW5jdGlvbiwgYmFzZWxpbmUgc2hvdWxkCisJCQkJICogYmUgdGhlIGVudHJ5IGxpbmUgb2YgdGhlIGlubGluZSBmdW5jdGlvbi4KKwkJCQkgKi8KKwkJCQl0bXAgPSBkd2FyZl9kaWVuYW1lKCZpbmRpZSk7CisJCQkJaWYgKHRtcCAmJgorCQkJCSAgICBkd2FyZl9kZWNsX2xpbmUoJnNwZGllLCAmYmFzZWxpbmUpID09IDApCisJCQkJCWZ1bmMgPSB0bXA7CiAJCQl9CiAJCX0KIAl9CiAKLQkvKiBGaW5kIGEgY29ycmVzcG9uZGluZyBmdW5jdGlvbiAqLwotCWlmIChkaWVfZmluZF9yZWFsX3N1YnByb2dyYW0oJmN1ZGllLCAoRHdhcmZfQWRkcilhZGRyLCAmc3BkaWUpKSB7Ci0JCXRtcCA9IGR3YXJmX2RpZW5hbWUoJnNwZGllKTsKLQkJaWYgKCF0bXAgfHwgZHdhcmZfZW50cnlwYygmc3BkaWUsICZlYWRkcikgIT0gMCkKLQkJCWdvdG8gZW5kOworcG9zdDoKKwkvKiBNYWtlIGEgcmVsYXRpdmUgbGluZSBudW1iZXIgb3IgYW4gb2Zmc2V0ICovCisJaWYgKGxpbmVubykKKwkJcHB0LT5saW5lID0gbGluZW5vIC0gYmFzZWxpbmU7CisJZWxzZSBpZiAoZnVuYykKKwkJcHB0LT5vZmZzZXQgPSBhZGRyIC0gKHVuc2lnbmVkIGxvbmcpYmFzZWFkZHI7CiAKLQkJaWYgKHBwdC0+bGluZSkgewotCQkJaWYgKGRpZV9maW5kX2lubGluZWZ1bmMoJnNwZGllLCAoRHdhcmZfQWRkcilhZGRyLAotCQkJCQkJJmluZGllKSkgewotCQkJCS8qIGFkZHIgaW4gYW4gaW5saW5lIGZ1bmN0aW9uICovCi0JCQkJdG1wID0gZHdhcmZfZGllbmFtZSgmaW5kaWUpOwotCQkJCWlmICghdG1wKQotCQkJCQlnb3RvIGVuZDsKLQkJCQlyZXQgPSBkd2FyZl9kZWNsX2xpbmUoJmluZGllLCAmbGluZW5vKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGVhZGRyID09IGFkZHIpIHsJLyogRnVuY3Rpb24gZW50cnkgKi8KLQkJCQkJbGluZW5vID0gcHB0LT5saW5lOwotCQkJCQlyZXQgPSAwOwotCQkJCX0gZWxzZQotCQkJCQlyZXQgPSBkd2FyZl9kZWNsX2xpbmUoJnNwZGllLCAmbGluZW5vKTsKLQkJCX0KLQkJCWlmIChyZXQgPT0gMCkgewotCQkJCS8qIE1ha2UgYSByZWxhdGl2ZSBsaW5lIG51bWJlciAqLwotCQkJCXBwdC0+bGluZSAtPSBsaW5lbm87Ci0JCQkJZ290byBmb3VuZDsKLQkJCX0KLQkJfQotCQkvKiBXZSBkb24ndCBoYXZlIGEgbGluZSBudW1iZXIsIGxldCdzIHVzZSBvZmZzZXQgKi8KLQkJcHB0LT5vZmZzZXQgPSBhZGRyIC0gKHVuc2lnbmVkIGxvbmcpZWFkZHI7Ci1mb3VuZDoKLQkJcHB0LT5mdW5jdGlvbiA9IHN0cmR1cCh0bXApOworCS8qIER1cGxpY2F0ZSBzdHJpbmdzICovCisJaWYgKGZ1bmMpIHsKKwkJcHB0LT5mdW5jdGlvbiA9IHN0cmR1cChmdW5jKTsKIAkJaWYgKHBwdC0+ZnVuY3Rpb24gPT0gTlVMTCkgewogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gZW5kOwogCQl9Ci0JCWZvdW5kID0gdHJ1ZTsKIAl9Ci0KKwlpZiAoZm5hbWUpIHsKKwkJcHB0LT5maWxlID0gc3RyZHVwKGZuYW1lKTsKKwkJaWYgKHBwdC0+ZmlsZSA9PSBOVUxMKSB7CisJCQlpZiAocHB0LT5mdW5jdGlvbikgeworCQkJCWZyZWUocHB0LT5mdW5jdGlvbik7CisJCQkJcHB0LT5mdW5jdGlvbiA9IE5VTEw7CisJCQl9CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBlbmQ7CisJCX0KKwl9CiBlbmQ6CiAJaWYgKGR3ZmwpCiAJCWR3ZmxfZW5kKGR3ZmwpOwotCWlmIChyZXQgPj0gMCkKLQkJcmV0ID0gZm91bmQgPyAxIDogMDsKKwlpZiAocmV0ID09IDAgJiYgKGZuYW1lIHx8IGZ1bmMpKQorCQlyZXQgPSAxOwkvKiBGb3VuZCBhIHBvaW50ICovCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTg0MCw2ICsxODg2LDEwIEBACiAJc3RydWN0IGxpbmVfZmluZGVyICpsZiA9IHBhcmFtLT5kYXRhOwogCXN0cnVjdCBsaW5lX3JhbmdlICpsciA9IGxmLT5scjsKIAorCS8qIENoZWNrIGRlY2xhcmVkIGZpbGUgKi8KKwlpZiAobHItPmZpbGUgJiYgc3RydGFpbGNtcChsci0+ZmlsZSwgZHdhcmZfZGVjbF9maWxlKHNwX2RpZSkpKQorCQlyZXR1cm4gRFdBUkZfQ0JfT0s7CisKIAlpZiAoZHdhcmZfdGFnKHNwX2RpZSkgPT0gRFdfVEFHX3N1YnByb2dyYW0gJiYKIAkgICAgZGllX2NvbXBhcmVfbmFtZShzcF9kaWUsIGxyLT5mdW5jdGlvbikpIHsKIAkJbGYtPmZuYW1lID0gZHdhcmZfZGVjbF9maWxlKHNwX2RpZSk7CkBAIC0xODkyLDYgKzE5NDIsNyBAQAogCWlmICghZGJnKSB7CiAJCXByX3dhcm5pbmcoIk5vIGRlYnVnIGluZm9ybWF0aW9uIGZvdW5kIGluIHRoZSB2bWxpbnV4IC0gIgogCQkJInBsZWFzZSByZWJ1aWxkIHdpdGggQ09ORklHX0RFQlVHX0lORk89eS5cbiIpOworCQljbG9zZShmZCk7CS8qIFdpdGhvdXQgZHdmbF9lbmQoKSwgZmQgaXNuJ3QgY2xvc2VkLiAqLwogCQlyZXR1cm4gLUVCQURGOwogCX0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3B5dGhvbi5jIGIvdG9vbHMvcGVyZi91dGlsL3B5dGhvbi5jCmluZGV4IGE5ZjJkN2UuLjk5YzcyMjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9weXRob24uYworKysgYi90b29scy9wZXJmL3V0aWwvcHl0aG9uLmMKQEAgLTQ5OCwxMSArNDk4LDExIEBACiAJc3RydWN0IGNwdV9tYXAgKmNwdXMgPSBOVUxMOwogCXN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzID0gTlVMTDsKIAlQeU9iamVjdCAqcGNwdXMgPSBOVUxMLCAqcHRocmVhZHMgPSBOVUxMOwotCWludCBncm91cCA9IDAsIG92ZXJ3cml0ZSA9IDA7Ci0Jc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJjcHVzIiwgInRocmVhZHMiLCAiZ3JvdXAiLCAib3ZlcndyaXRlIiwgTlVMTCwgTlVMTH07CisJaW50IGdyb3VwID0gMCwgaW5oZXJpdCA9IDA7CisJc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJjcHVzIiwgInRocmVhZHMiLCAiZ3JvdXAiLCAiaW5oZXJpdCIsIE5VTEwsIE5VTEx9OwogCiAJaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE9PaWkiLCBrd2xpc3QsCi0JCQkJCSAmcGNwdXMsICZwdGhyZWFkcywgJmdyb3VwLCAmb3ZlcndyaXRlKSkKKwkJCQkJICZwY3B1cywgJnB0aHJlYWRzLCAmZ3JvdXAsICZpbmhlcml0KSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlpZiAocHRocmVhZHMgIT0gTlVMTCkKQEAgLTUxMSw3ICs1MTEsOCBAQAogCWlmIChwY3B1cyAhPSBOVUxMKQogCQljcHVzID0gKChzdHJ1Y3QgcHlyZl9jcHVfbWFwICopcGNwdXMpLT5jcHVzOwogCi0JaWYgKHBlcmZfZXZzZWxfX29wZW4oZXZzZWwsIGNwdXMsIHRocmVhZHMsIGdyb3VwLCBvdmVyd3JpdGUpIDwgMCkgeworCWV2c2VsLT5hdHRyLmluaGVyaXQgPSBpbmhlcml0OworCWlmIChwZXJmX2V2c2VsX19vcGVuKGV2c2VsLCBjcHVzLCB0aHJlYWRzLCBncm91cCkgPCAwKSB7CiAJCVB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNjc5LDcgKzY4MCw3IEBACiAJCQkJCSAmY3B1LCAmc2FtcGxlX2lkX2FsbCkpCiAJCXJldHVybiBOVUxMOwogCi0JZXZlbnQgPSBwZXJmX2V2bGlzdF9fcmVhZF9vbl9jcHUoZXZsaXN0LCBjcHUpOworCWV2ZW50ID0gcGVyZl9ldmxpc3RfX21tYXBfcmVhZChldmxpc3QsIGNwdSk7CiAJaWYgKGV2ZW50ICE9IE5VTEwpIHsKIAkJc3RydWN0IHBlcmZfZXZzZWwgKmZpcnN0OwogCQlQeU9iamVjdCAqcHlldmVudCA9IHB5cmZfZXZlbnRfX25ldyhldmVudCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3RyaW5nLmMgYi90b29scy9wZXJmL3V0aWwvc3RyaW5nLmMKaW5kZXggOGZjMGJkMy4uYjlhOTg1ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N0cmluZy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuYwpAQCAtODUsNyArODUsNyBAQAogCiAvKgogICogSGVscGVyIGZ1bmN0aW9uIGZvciBzcGxpdHRpbmcgYSBzdHJpbmcgaW50byBhbiBhcmd2LWxpa2UgYXJyYXkuCi0gKiBvcmlnaW5hbHkgY29waWVkIGZyb20gbGliL2FyZ3Zfc3BsaXQuYworICogb3JpZ2luYWxseSBjb3BpZWQgZnJvbSBsaWIvYXJndl9zcGxpdC5jCiAgKi8KIHN0YXRpYyBjb25zdCBjaGFyICpza2lwX3NlcChjb25zdCBjaGFyICpjcCkKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9hbm5vdGF0ZS5jIGIvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL2Fubm90YXRlLmMKaW5kZXggOGMxN2E4Ny4uMTU2MzNkNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL2Fubm90YXRlLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL2Fubm90YXRlLmMKQEAgLTI1NiwxMCArMjU2LDkgQEAKIAkJCSBpbnQgcmVmcmVzaCkKIHsKIAlzdHJ1Y3Qgb2JqZHVtcF9saW5lICpwb3MsICpuOwotCXN0cnVjdCBhbm5vdGF0aW9uICpub3RlcyA9IHN5bWJvbF9fYW5ub3RhdGlvbihzeW0pOworCXN0cnVjdCBhbm5vdGF0aW9uICpub3RlczsKIAlzdHJ1Y3QgYW5ub3RhdGVfYnJvd3NlciBicm93c2VyID0gewogCQkuYiA9IHsKLQkJCS5lbnRyaWVzID0gJm5vdGVzLT5zcmMtPnNvdXJjZSwKIAkJCS5yZWZyZXNoID0gdWlfYnJvd3Nlcl9fbGlzdF9oZWFkX3JlZnJlc2gsCiAJCQkuc2VlawkgPSB1aV9icm93c2VyX19saXN0X2hlYWRfc2VlaywKIAkJCS53cml0ZQkgPSBhbm5vdGF0ZV9icm93c2VyX193cml0ZSwKQEAgLTI4MSw2ICsyODAsOCBAQAogCiAJdWlfaGVscGxpbmVfX3B1c2goIlByZXNzIDwtIG9yIEVTQyB0byBleGl0Iik7CiAKKwlub3RlcyA9IHN5bWJvbF9fYW5ub3RhdGlvbihzeW0pOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZub3Rlcy0+c3JjLT5zb3VyY2UsIG5vZGUpIHsKIAkJc3RydWN0IG9iamR1bXBfbGluZV9yYl9ub2RlICpyYnBvczsKIAkJc2l6ZV90IGxpbmVfbGVuID0gc3RybGVuKHBvcy0+bGluZSk7CkBAIC0yOTEsNiArMjkyLDcgQEAKIAkJcmJwb3MtPmlkeCA9IGJyb3dzZXIuYi5ucl9lbnRyaWVzKys7CiAJfQogCisJYnJvd3Nlci5iLmVudHJpZXMgPSAmbm90ZXMtPnNyYy0+c291cmNlLAogCWJyb3dzZXIuYi53aWR0aCArPSAxODsgLyogUGVyY2VudGFnZSAqLwogCXJldCA9IGFubm90YXRlX2Jyb3dzZXJfX3J1bigmYnJvd3NlciwgZXZpZHgsIHJlZnJlc2gpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIG4sICZub3Rlcy0+c3JjLT5zb3VyY2UsIG5vZGUpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9oaXN0cy5jIGIvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL2hpc3RzLmMKaW5kZXggNzk4ZWZkYy4uNWQ3NjdjNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL2hpc3RzLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL2hpc3RzLmMKQEAgLTg1MSw3ICs4NTEsNyBAQAogCQkJZ290byBvdXRfZnJlZV9zdGFjazsKIAkJY2FzZSAnYSc6CiAJCQlpZiAoYnJvd3Nlci0+c2VsZWN0aW9uID09IE5VTEwgfHwKLQkJCSAgICBicm93c2VyLT5zZWxlY3Rpb24tPm1hcCA9PSBOVUxMIHx8CisJCQkgICAgYnJvd3Nlci0+c2VsZWN0aW9uLT5zeW0gPT0gTlVMTCB8fAogCQkJICAgIGJyb3dzZXItPnNlbGVjdGlvbi0+bWFwLT5kc28tPmFubm90YXRlX3dhcm5lZCkKIAkJCQljb250aW51ZTsKIAkJCWdvdG8gZG9fYW5ub3RhdGU7CmRpZmYgLS1naXQgYS90b29scy9wb3dlci94ODYveDg2X2VuZXJneV9wZXJmX3BvbGljeS94ODZfZW5lcmd5X3BlcmZfcG9saWN5LmMgYi90b29scy9wb3dlci94ODYveDg2X2VuZXJneV9wZXJmX3BvbGljeS94ODZfZW5lcmd5X3BlcmZfcG9saWN5LmMKaW5kZXggZDk2NzhhMy4uMjYxOGVmMiAxMDA2NDQKLS0tIGEvdG9vbHMvcG93ZXIveDg2L3g4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kveDg2X2VuZXJneV9wZXJmX3BvbGljeS5jCisrKyBiL3Rvb2xzL3Bvd2VyL3g4Ni94ODZfZW5lcmd5X3BlcmZfcG9saWN5L3g4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kuYwpAQCAtNDYsNyArNDYsNyBAQAogICoKICAqICBwZXJmb3JtYW5jZQogICoJUGVyZm9ybWFuY2UgaXMgcGFyYW1vdW50LgotICoJVW53aWxsaW5nIHRvIHNhY3JhZmljZSBhbnkgcGVyZm9ybWFuY2UKKyAqCVVud2lsbGluZyB0byBzYWNyaWZpY2UgYW55IHBlcmZvcm1hbmNlCiAgKglmb3IgdGhlIHNha2Ugb2YgZW5lcmd5IHNhdmluZy4gKGhhcmR3YXJlIGRlZmF1bHQpCiAgKgogICogIG5vcm1hbApkaWZmIC0tZ2l0IGEvdmlydC9rdm0vZXZlbnRmZC5jIGIvdmlydC9rdm0vZXZlbnRmZC5jCmluZGV4IDM2NTY4NDkuLjczMzU4ZDIgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2V2ZW50ZmQuYworKysgYi92aXJ0L2t2bS9ldmVudGZkLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAkgKiBXZSBrbm93IG5vIG5ldyBldmVudHMgd2lsbCBiZSBzY2hlZHVsZWQgYXQgdGhpcyBwb2ludCwgc28gYmxvY2sKIAkgKiB1bnRpbCBhbGwgcHJldmlvdXNseSBvdXRzdGFuZGluZyBldmVudHMgaGF2ZSBjb21wbGV0ZWQKIAkgKi8KLQlmbHVzaF93b3JrKCZpcnFmZC0+aW5qZWN0KTsKKwlmbHVzaF93b3JrX3N5bmMoJmlycWZkLT5pbmplY3QpOwogCiAJLyoKIAkgKiBJdCBpcyBub3cgc2FmZSB0byByZWxlYXNlIHRoZSBvYmplY3QncyByZXNvdXJjZXMKQEAgLTU3OCw3ICs1NzgsNyBAQAogCiAJbXV0ZXhfbG9jaygma3ZtLT5zbG90c19sb2NrKTsKIAotCS8qIFZlcmlmeSB0aGF0IHRoZXJlIGlzbnQgYSBtYXRjaCBhbHJlYWR5ICovCisJLyogVmVyaWZ5IHRoYXQgdGhlcmUgaXNuJ3QgYSBtYXRjaCBhbHJlYWR5ICovCiAJaWYgKGlvZXZlbnRmZF9jaGVja19jb2xsaXNpb24oa3ZtLCBwKSkgewogCQlyZXQgPSAtRUVYSVNUOwogCQlnb3RvIHVubG9ja19mYWlsOwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggNTU2ZTNlZi4uNjMzMDY1MyAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYworKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC0xMDM3LDYgKzEwMzcsMTcgQEAKIAlyZXR1cm4gZmF1bHRfcGZuOwogfQogCitpbnQgZ2V0X3VzZXJfcGFnZV9ub3dhaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGludCB3cml0ZSwgc3RydWN0IHBhZ2UgKipwYWdlKQoreworCWludCBmbGFncyA9IEZPTExfVE9VQ0ggfCBGT0xMX05PV0FJVCB8IEZPTExfSFdQT0lTT04gfCBGT0xMX0dFVDsKKworCWlmICh3cml0ZSkKKwkJZmxhZ3MgfD0gRk9MTF9XUklURTsKKworCXJldHVybiBfX2dldF91c2VyX3BhZ2VzKHRzaywgbW0sIHN0YXJ0LCAxLCBmbGFncywgcGFnZSwgTlVMTCwgTlVMTCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3VzZXJfcGFnZV9od3BvaXNvbih1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJaW50IHJjLCBmbGFncyA9IEZPTExfVE9VQ0ggfCBGT0xMX0hXUE9JU09OIHwgRk9MTF9XUklURTsKQEAgLTEwNzAsNyArMTA4MSwxNCBAQAogCQlpZiAod3JpdGFibGUpCiAJCQkqd3JpdGFibGUgPSB3cml0ZV9mYXVsdDsKIAotCQlucGFnZXMgPSBnZXRfdXNlcl9wYWdlc19mYXN0KGFkZHIsIDEsIHdyaXRlX2ZhdWx0LCBwYWdlKTsKKwkJaWYgKGFzeW5jKSB7CisJCQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJCQlucGFnZXMgPSBnZXRfdXNlcl9wYWdlX25vd2FpdChjdXJyZW50LCBjdXJyZW50LT5tbSwKKwkJCQkJCSAgICAgYWRkciwgd3JpdGVfZmF1bHQsIHBhZ2UpOworCQkJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwkJfSBlbHNlCisJCQlucGFnZXMgPSBnZXRfdXNlcl9wYWdlc19mYXN0KGFkZHIsIDEsIHdyaXRlX2ZhdWx0LAorCQkJCQkJICAgICBwYWdlKTsKIAogCQkvKiBtYXAgcmVhZCBmYXVsdCBhcyB3cml0YWJsZSBpZiBwb3NzaWJsZSAqLwogCQlpZiAodW5saWtlbHkoIXdyaXRlX2ZhdWx0KSAmJiBucGFnZXMgPT0gMSkgewpAQCAtMTA5Myw3ICsxMTExLDggQEAKIAkJCXJldHVybiBnZXRfZmF1bHRfcGZuKCk7CiAKIAkJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCQlpZiAoY2hlY2tfdXNlcl9wYWdlX2h3cG9pc29uKGFkZHIpKSB7CisJCWlmIChucGFnZXMgPT0gLUVIV1BPSVNPTiB8fAorCQkJKCFhc3luYyAmJiBjaGVja191c2VyX3BhZ2VfaHdwb2lzb24oYWRkcikpKSB7CiAJCQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCQkJZ2V0X3BhZ2UoaHdwb2lzb25fcGFnZSk7CiAJCQlyZXR1cm4gcGFnZV90b19wZm4oaHdwb2lzb25fcGFnZSk7Cg==