ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwppbmRleCBlMTJlMzZhLi40ODYzOGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCkBAIC0xLDUgKzEsNSBAQAogIyBkcml2ZXJzL210ZC9tYXBzL0tjb25maWcKLSMgJElkOiBLY29uZmlnLHYgMS42MCAyMDA1LzExLzA3IDA4OjMzOjM1IGdsZWl4bmVyIEV4cCAkCisjICRJZDogS2NvbmZpZyx2IDEuNjEgMjAwNS8xMS8wNyAxMToxNDoyNiBnbGVpeG5lciBFeHAgJAogCiBtZW51ICJNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzIgogCWRlcGVuZHMgb24gTVREIT1uCkBAIC02NCw5ICs2NCw5IEBACiAJdHJpc3RhdGUgIlN1biBNaWNyb3N5c3RlbXMgdXNlcmZsYXNoIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiAoU1BBUkMzMiB8fCBTUEFSQzY0KSAmJiBNVERfQ0ZJCiAJaGVscAotCSAgVGhpcyBwcm92aWRlcyBhICdtYXBwaW5nJyBkcml2ZXIgd2hpY2ggc3VwcG9ydHMgdGhlIHdheSBpbiAKLQkgIHdoaWNoIHVzZXItcHJvZ3JhbW1hYmxlIGZsYXNoIGNoaXBzIGFyZSBjb25uZWN0ZWQgb24gdmFyaW91cyAKLQkgIFN1biBNaWNyb3N5c3RlbXMgYm9hcmRzZXRzLiAgVGhpcyBkcml2ZXIgd2lsbCByZXF1aXJlIENGSSBzdXBwb3J0IAorCSAgVGhpcyBwcm92aWRlcyBhICdtYXBwaW5nJyBkcml2ZXIgd2hpY2ggc3VwcG9ydHMgdGhlIHdheSBpbgorCSAgd2hpY2ggdXNlci1wcm9ncmFtbWFibGUgZmxhc2ggY2hpcHMgYXJlIGNvbm5lY3RlZCBvbiB2YXJpb3VzCisJICBTdW4gTWljcm9zeXN0ZW1zIGJvYXJkc2V0cy4gIFRoaXMgZHJpdmVyIHdpbGwgcmVxdWlyZSBDRkkgc3VwcG9ydAogCSAgaW4gdGhlIGtlcm5lbCwgc28gaWYgeW91IGRpZCBub3QgZW5hYmxlIENGSSBwcmV2aW91c2x5LCBkbyB0aGF0IG5vdy4KIAogY29uZmlnIE1URF9QTkMyMDAwCkBAIC04OSw3ICs4OSw3IEBACiAJZGVwZW5kcyBvbiBYODYgJiYgTVREX0NGSSAmJiBNVERfUEFSVElUSU9OUwogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBhY2Nlc3Mgcm91dGluZXMgZm9yIHRoZSBmbGFzaCBjaGlwcyBvbiB0aGUgQU1EIE5ldFNjNTIwCi0JICBkZW1vbnN0cmF0aW9uIGJvYXJkLiBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UgYm9hcmRzIGFuZCB3b3VsZCBsaWtlIAorCSAgZGVtb25zdHJhdGlvbiBib2FyZC4gSWYgeW91IGhhdmUgb25lIG9mIHRoZXNlIGJvYXJkcyBhbmQgd291bGQgbGlrZQogCSAgdG8gdXNlIHRoZSBmbGFzaCBjaGlwcyBvbiBpdCwgc2F5ICdZJy4KIAogY29uZmlnIE1URF9UUzU1MDAKQEAgLTIxMiw3ICsyMTIsNyBAQAogCSAgU3VwcG9ydCBmb3IgZmxhc2ggY2hpcHMgb24gTkVUdGVsL1NlY3VyZUVkZ2UvU25hcEdlYXIgYm9hcmRzLgogCiBjb25maWcgTVREX0FMQ0hFTVkKLQl0cmlzdGF0ZSAnICBBTUQgQWxjaGVteSBQYjF4eHgvRGIxeHh4L1JESyBNVEQgc3VwcG9ydCcgCisJdHJpc3RhdGUgJyAgQU1EIEFsY2hlbXkgUGIxeHh4L0RiMXh4eC9SREsgTVREIHN1cHBvcnQnCiAJZGVwZW5kcyBvbiBTT0NfQVUxWDAwCiAJaGVscAogCSAgRmxhc2ggbWVtb3J5IGFjY2VzcyBvbiBBTUQgQWxjaGVteSBQYi9EYi9SREsgUmVmZXJlbmNlIEJvYXJkcwpAQCAtMzc3LDggKzM3Nyw4IEBACiAJZGVmYXVsdCAiMHg4MDAwMDAwIgogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIHBoeXNpY2FsIG1lbW9yeSBsb2NhdGlvbiB0aGF0IHRoZSBNVEQgZHJpdmVyIHdpbGwKLQkgIHVzZSBmb3IgdGhlIGZsYXNoIGNoaXBzIG9uIHlvdXIgcGFydGljdWxhciB0YXJnZXQgYm9hcmQuIAotCSAgUmVmZXIgdG8gdGhlIG1lbW9yeSBtYXAgd2hpY2ggc2hvdWxkIGhvcGVmdWxseSBiZSBpbiB0aGUgCisJICB1c2UgZm9yIHRoZSBmbGFzaCBjaGlwcyBvbiB5b3VyIHBhcnRpY3VsYXIgdGFyZ2V0IGJvYXJkLgorCSAgUmVmZXIgdG8gdGhlIG1lbW9yeSBtYXAgd2hpY2ggc2hvdWxkIGhvcGVmdWxseSBiZSBpbiB0aGUKIAkgIGRvY3VtZW50YXRpb24gZm9yIHlvdXIgYm9hcmQuCiAKIGNvbmZpZyBNVERfQ1NUTV9NSVBTX0lYWF9MRU4KQEAgLTM4Niw3ICszODYsNyBAQAogCWRlcGVuZHMgb24gTVREX0NTVE1fTUlQU19JWFgKIAlkZWZhdWx0ICIweDQwMDAwMDAiCiAJaGVscAotCSAgVGhpcyBpcyB0aGUgdG90YWwgbGVuZ3RoIHRoYXQgdGhlIE1URCBkcml2ZXIgd2lsbCB1c2UgZm9yIHRoZSAKKwkgIFRoaXMgaXMgdGhlIHRvdGFsIGxlbmd0aCB0aGF0IHRoZSBNVEQgZHJpdmVyIHdpbGwgdXNlIGZvciB0aGUKIAkgIGZsYXNoIGNoaXBzIG9uIHlvdXIgcGFydGljdWxhciBib2FyZC4gIFJlZmVyIHRvIHRoZSBtZW1vcnkKIAkgIG1hcCB3aGljaCBzaG91bGQgaG9wZWZ1bGx5IGJlIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciB5b3VyCiAJICBib2FyZC4KQEAgLTQ1MiwxNCArNDUyLDE0IEBACiAJZGVwZW5kcyBvbiBNVERfQ0ZJICYmIEFSQ0hfSVE4MDMxMAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBhY2Nlc3Mgcm91dGluZXMgZm9yIHRoZSBmbGFzaCBjaGlwcyBvbiB0aGUgSW50ZWwgWFNjYWxlCi0JICBJUTgwMzEwIGV2YWx1YXRpb24gYm9hcmQuIElmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBib2FyZHMgYW5kIHdvdWxkIAorCSAgSVE4MDMxMCBldmFsdWF0aW9uIGJvYXJkLiBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UgYm9hcmRzIGFuZCB3b3VsZAogCSAgbGlrZSB0byB1c2UgdGhlIGZsYXNoIGNoaXBzIG9uIGl0LCBzYXkgJ1knLgogCiBjb25maWcgTVREX0lYUDRYWAogCXRyaXN0YXRlICJDRkkgRmxhc2ggZGV2aWNlIG1hcHBlZCBvbiBJbnRlbCBJWFA0eHggYmFzZWQgc3lzdGVtcyIKIAlkZXBlbmRzIG9uIE1URF9DRkkgJiYgTVREX0NPTVBMRVhfTUFQUElOR1MgJiYgQVJDSF9JWFA0WFgKIAloZWxwCi0JICBUaGlzIGVuYWJsZXMgTVREIGFjY2VzcyB0byBmbGFzaCBkZXZpY2VzIG9uIHBsYXRmb3JtcyBiYXNlZCAKKwkgIFRoaXMgZW5hYmxlcyBNVEQgYWNjZXNzIHRvIGZsYXNoIGRldmljZXMgb24gcGxhdGZvcm1zIGJhc2VkCiAJICBvbiBJbnRlbCdzIElYUDR4eCBmYW1pbHkgb2YgbmV0d29yayBwcm9jZXNzb3JzIHN1Y2ggYXMgdGhlCiAJICBJWERQNDI1IGFuZCBDb3lvdGUuIElmIHlvdSBoYXZlIGFuIElYUDR4eCBiYXNlZCBib2FyZCBhbmQKIAkgIHdvdWxkIGxpa2UgdG8gdXNlIHRoZSBmbGFzaCBjaGlwcyBvbiBpdCwgc2F5ICdZJy4KQEAgLTQ2OCw3ICs0NjgsNyBAQAogCXRyaXN0YXRlICJDRkkgRmxhc2ggZGV2aWNlIG1hcHBlZCBvbiBJbnRlbCBJWFAyMDAwIGJhc2VkIHN5c3RlbXMiCiAJZGVwZW5kcyBvbiBNVERfQ0ZJICYmIE1URF9DT01QTEVYX01BUFBJTkdTICYmIEFSQ0hfSVhQMjAwMAogCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyBNVEQgYWNjZXNzIHRvIGZsYXNoIGRldmljZXMgb24gcGxhdGZvcm1zIGJhc2VkIAorCSAgVGhpcyBlbmFibGVzIE1URCBhY2Nlc3MgdG8gZmxhc2ggZGV2aWNlcyBvbiBwbGF0Zm9ybXMgYmFzZWQKIAkgIG9uIEludGVsJ3MgSVhQMjAwMCBmYW1pbHkgb2YgbmV0d29yayBwcm9jZXNzb3JzIHN1Y2ggYXMgdGhlCiAJICBJWERQNDI1IGFuZCBDb3lvdGUuIElmIHlvdSBoYXZlIGFuIElYUDIwMDAgYmFzZWQgYm9hcmQgYW5kCiAJICB3b3VsZCBsaWtlIHRvIHVzZSB0aGUgZmxhc2ggY2hpcHMgb24gaXQsIHNheSAnWScuCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQppbmRleCA4MWY5N2M2Li43ZDllOTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiAjCiAjIGxpbnV4L2RyaXZlcnMvbWFwcy9NYWtlZmlsZQogIwotIyAkSWQ6IE1ha2VmaWxlLmNvbW1vbix2IDEuMzMgMjAwNS8xMS8wNyAwODozMzozNSBnbGVpeG5lciBFeHAgJAorIyAkSWQ6IE1ha2VmaWxlLmNvbW1vbix2IDEuMzQgMjAwNS8xMS8wNyAxMToxNDoyNiBnbGVpeG5lciBFeHAgJAogCiBpZmVxICgkKENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUykseSkKIG9iai0kKENPTkZJR19NVEQpCQkrPSBtYXBfZnVuY3MubwpAQCAtMjYsNyArMjYsNyBAQAogb2JqLSQoQ09ORklHX01URF9NQlg4NjApCSs9IG1ieDg2MC5vCiBvYmotJChDT05GSUdfTVREX0NFSVZBKQkJKz0gY2VpdmEubwogb2JqLSQoQ09ORklHX01URF9PQ1RBR09OKQkrPSBvY3RhZ29uLTUwNjYubwotb2JqLSQoQ09ORklHX01URF9QSFlTTUFQKQkrPSBwaHlzbWFwLm8gCitvYmotJChDT05GSUdfTVREX1BIWVNNQVApCSs9IHBoeXNtYXAubwogb2JqLSQoQ09ORklHX01URF9QTkMyMDAwKQkrPSBwbmMyMDAwLm8KIG9iai0kKENPTkZJR19NVERfUENNQ0lBKQkrPSBwY21jaWFtdGQubwogb2JqLSQoQ09ORklHX01URF9SUFhMSVRFKQkrPSBycHhsaXRlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvYWxjaGVteS1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9hbGNoZW15LWZsYXNoLmMKaW5kZXggMjdmZDJhMy4uYTU3NzkxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9hbGNoZW15LWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9hbGNoZW15LWZsYXNoLmMKQEAgLTEsMTAgKzEsMTAgQEAKIC8qCiAgKiBGbGFzaCBtZW1vcnkgYWNjZXNzIG9uIEFNRCBBbGNoZW15IGV2YWx1YXRpb24gYm9hcmRzCi0gKiAKLSAqICRJZDogYWxjaGVteS1mbGFzaC5jLHYgMS4xIDIwMDUvMDIvMjcgMjE6NTA6MjEgcHBvcG92IEV4cCAkCisgKgorICogJElkOiBhbGNoZW15LWZsYXNoLmMsdiAxLjIgMjAwNS8xMS8wNyAxMToxNDoyNiBnbGVpeG5lciBFeHAgJAogICoKICAqIChDKSAyMDAzLCAyMDA0IFBldGUgUG9wb3YgPHBwb3BvdkBlbWJlZGRlZGFsbGV5LmNvbT4KLSAqIAorICoKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC0yMiw3ICsyMiw3IEBACiAjaWZkZWYgCURFQlVHX1JXCiAjZGVmaW5lCURCRyh4Li4uKQlwcmludGsoeCkKICNlbHNlCi0jZGVmaW5lCURCRyh4Li4uKQkKKyNkZWZpbmUJREJHKHguLi4pCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19NSVBTX1BCMTAwMApAQCAtMTM2LDcgKzEzNiw3IEBACiAJaW50IG5iX3BhcnRzID0gMDsKIAl1bnNpZ25lZCBsb25nIHdpbmRvd19hZGRyOwogCXVuc2lnbmVkIGxvbmcgd2luZG93X3NpemU7Ci0JCisKIAkvKiBEZWZhdWx0IGZsYXNoIGJ1c3dpZHRoICovCiAJYWxjaGVteV9tYXAuYmFua3dpZHRoID0gQk9BUkRfRkxBU0hfV0lEVEg7CiAKQEAgLTE2MSw3ICsxNjEsNyBAQAogCSAqIE5vdyBsZXQncyBwcm9iZSBmb3IgdGhlIGFjdHVhbCBmbGFzaC4gIERvIGl0IGhlcmUgc2luY2UKIAkgKiBzcGVjaWZpYyBtYWNoaW5lIHNldHRpbmdzIG1pZ2h0IGhhdmUgYmVlbiBzZXQgYWJvdmUuCiAJICovCi0JcHJpbnRrKEtFUk5fTk9USUNFIEJPQVJEX01BUF9OQU1FICI6IHByb2JpbmcgJWQtYml0IGZsYXNoIGJ1c1xuIiwgCisJcHJpbnRrKEtFUk5fTk9USUNFIEJPQVJEX01BUF9OQU1FICI6IHByb2JpbmcgJWQtYml0IGZsYXNoIGJ1c1xuIiwKIAkJCWFsY2hlbXlfbWFwLmJhbmt3aWR0aCo4KTsKIAlhbGNoZW15X21hcC52aXJ0ID0gaW9yZW1hcCh3aW5kb3dfYWRkciwgd2luZG93X3NpemUpOwogCW15bXRkID0gZG9fbWFwX3Byb2JlKCJjZmlfcHJvYmUiLCAmYWxjaGVteV9tYXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9hbWQ3Nnhyb20uYyBiL2RyaXZlcnMvbXRkL21hcHMvYW1kNzZ4cm9tLmMKaW5kZXggZThhOTAwYS4uNjBjYTNiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9hbWQ3Nnhyb20uYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2FtZDc2eHJvbS5jCkBAIC0yLDcgKzIsNyBAQAogICogYW1kNzZ4cm9tLmMKICAqCiAgKiBOb3JtYWwgbWFwcGluZ3Mgb2YgY2hpcHMgaW4gcGh5c2ljYWwgbWVtb3J5Ci0gKiAkSWQ6IGFtZDc2eHJvbS5jLHYgMS4yMCAyMDA1LzAzLzE4IDE0OjA0OjM1IGdsZWl4bmVyIEV4cCAkCisgKiAkSWQ6IGFtZDc2eHJvbS5jLHYgMS4yMSAyMDA1LzExLzA3IDExOjE0OjI2IGdsZWl4bmVyIEV4cCAkCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNzAsNyArNzAsNyBAQAogCQlsaXN0X2RlbCgmbWFwLT5saXN0KTsKIAkJa2ZyZWUobWFwKTsKIAl9Ci0JaWYgKHdpbmRvdy0+cnNyYy5wYXJlbnQpIAorCWlmICh3aW5kb3ctPnJzcmMucGFyZW50KQogCQlyZWxlYXNlX3Jlc291cmNlKCZ3aW5kb3ctPnJzcmMpOwogCiAJaWYgKHdpbmRvdy0+dmlydCkgewpAQCAtMTA3LDcgKzEwNyw3IEBACiAJCXdpbmRvdy0+cGh5cyA9IDB4ZmZmZjAwMDA7IC8qIDY0S2lCICovCiAJfQogCXdpbmRvdy0+c2l6ZSA9IDB4ZmZmZmZmZmZVTCAtIHdpbmRvdy0+cGh5cyArIDFVTDsKLQkKKwogCS8qCiAJICogVHJ5IHRvIHJlc2VydmUgdGhlIHdpbmRvdyBtZW0gcmVnaW9uLiAgSWYgdGhpcyBmYWlscyB0aGVuCiAJICogaXQgaXMgbGlrZWx5IGR1ZSB0byBhIGZyYWdtZW50IG9mIHRoZSB3aW5kb3cgYmVpbmcKQEAgLTEzOCw3ICsxMzgsNyBAQAogCS8qIEVuYWJsZSB3cml0ZXMgdGhyb3VnaCB0aGUgcm9tIHdpbmRvdyAqLwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDAsICZieXRlKTsKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg0MCwgYnl0ZSB8IDEpOwotCQorCiAJLyogRklYTUUgaGFuZGxlIHJlZ2lzdGVycyAweDgwIC0gMHg4QyB0aGUgYmlvcyByZWdpb24gbG9ja3MgKi8KIAogCS8qIEZvciB3cml0ZSBhY2Nlc3NlcyBjYWNoZXMgYXJlIHVzZWxlc3MgKi8KQEAgLTE4Niw3ICsxODYsNyBAQAogCQkJTU9EX05BTUUsIG1hcC0+bWFwLnBoeXMpOwogCiAJCS8qIFRoZXJlIGlzIG5vIGdlbmVyaWMgVlBQIHN1cHBvcnQgKi8KLQkJZm9yKG1hcC0+bWFwLmJhbmt3aWR0aCA9IDMyOyBtYXAtPm1hcC5iYW5rd2lkdGg7IAorCQlmb3IobWFwLT5tYXAuYmFua3dpZHRoID0gMzI7IG1hcC0+bWFwLmJhbmt3aWR0aDsKIAkJCW1hcC0+bWFwLmJhbmt3aWR0aCA+Pj0gMSkKIAkJewogCQkJY2hhciAqKnByb2JlX3R5cGU7CkBAIC0yMzksNyArMjM5LDcgQEAKIAkJZm9yKGkgPSAwOyBpIDwgY2ZpLT5udW1jaGlwczsgaSsrKSB7CiAJCQljZmktPmNoaXBzW2ldLnN0YXJ0ICs9IG9mZnNldDsKIAkJfQotCQkKKwogCQkvKiBOb3cgdGhhdCB0aGUgbXRkIGRldmljZXMgaXMgY29tcGxldGUgY2xhaW0gYW5kIGV4cG9ydCBpdCAqLwogCQltYXAtPm10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAkJaWYgKGFkZF9tdGRfZGV2aWNlKG1hcC0+bXRkKSkgewpAQCAtMjc5LDkgKzI3OSw5IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhbWQ3Nnhyb21fcGNpX3RibFtdID0gewotCXsgUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX1ZJUEVSXzc0MTAsICAKKwl7IFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9WSVBFUl83NDEwLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAotCXsgUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX1ZJUEVSXzc0NDAsICAKKwl7IFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9WSVBFUl83NDQwLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXsgUENJX1ZFTkRPUl9JRF9BTUQsIDB4NzQ2OCB9LCAvKiBhbWQ4MTExIHN1cHBvcnQgKi8KIAl7IDAsIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvYXJjdGljLW10ZC5jIGIvZHJpdmVycy9tdGQvbWFwcy9hcmN0aWMtbXRkLmMKaW5kZXggNzc3Mjc2Zi4uZDk1YWU1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9hcmN0aWMtbXRkLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9hcmN0aWMtbXRkLmMKQEAgLTEsNyArMSw3IEBACiAvKgotICogJElkOiBhcmN0aWMtbXRkLmMsdiAxLjEzIDIwMDQvMTEvMDQgMTM6MjQ6MTQgZ2xlaXhuZXIgRXhwICQKLSAqIAotICogZHJpdmVycy9tdGQvbWFwcy9hcmN0aWMtbXRkLmMgTVREIG1hcHBpbmdzIGFuZCBwYXJ0aXRpb24gdGFibGVzIGZvciAKKyAqICRJZDogYXJjdGljLW10ZC5jLHYgMS4xNCAyMDA1LzExLzA3IDExOjE0OjI2IGdsZWl4bmVyIEV4cCAkCisgKgorICogZHJpdmVycy9tdGQvbWFwcy9hcmN0aWMtbXRkLmMgTVREIG1hcHBpbmdzIGFuZCBwYXJ0aXRpb24gdGFibGVzIGZvcgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQk0gNDA1TFAgQXJjdGljIGJvYXJkcy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9hdXRjcHUxMi1udnJhbS5jIGIvZHJpdmVycy9tdGQvbWFwcy9hdXRjcHUxMi1udnJhbS5jCmluZGV4IGNmMzYyY2MuLjdlZDM0MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvYXV0Y3B1MTItbnZyYW0uYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2F1dGNwdTEyLW52cmFtLmMKQEAgLTEsOCArMSw4IEBACiAvKgotICogTlYtUkFNIG1lbW9yeSBhY2Nlc3Mgb24gYXV0Y3B1MTIgCisgKiBOVi1SQU0gbWVtb3J5IGFjY2VzcyBvbiBhdXRjcHUxMgogICogKEMpIDIwMDIgVGhvbWFzIEdsZWl4bmVyIChnbGVpeG5lckBhdXRyb25peC5kZSkKICAqCi0gKiAkSWQ6IGF1dGNwdTEyLW52cmFtLmMsdiAxLjggMjAwNC8xMS8wNCAxMzoyNDoxNCBnbGVpeG5lciBFeHAgJCAKKyAqICRJZDogYXV0Y3B1MTItbnZyYW0uYyx2IDEuOSAyMDA1LzExLzA3IDExOjE0OjI2IGdsZWl4bmVyIEV4cCAkCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC01NSwxMCArNTUsMTAgQEAKIAl9CiAJc2ltcGxlX21hcF9pbml0KCZhdXRjcHVfc3JhbV9tYXApOwogCi0JLyogCi0JICogQ2hlY2sgZm9yIDMySy8xMjhLIAotCSAqIHJlYWQgb2ZzIDAgCi0JICogcmVhZCBvZnMgMHgxMDAwMCAKKwkvKgorCSAqIENoZWNrIGZvciAzMksvMTI4SworCSAqIHJlYWQgb2ZzIDAKKwkgKiByZWFkIG9mcyAweDEwMDAwCiAJICogV3JpdGUgY29tcGxlbWVudCB0byBvZnMgMHgxMDAwMDAKIAkgKiBSZWFkCWFuZCBjaGVjayByZXN1bHQgb24gb2ZzIDB4MAogCSAqIFJlc3RvcmUgY29udGVudHMKQEAgLTY2LDcgKzY2LDcgQEAKIAlzYXZlMCA9IG1hcF9yZWFkMzIoJmF1dGNwdTEyX3NyYW1fbWFwLDApOwogCXNhdmUxID0gbWFwX3JlYWQzMigmYXV0Y3B1MTJfc3JhbV9tYXAsMHgxMDAwMCk7CiAJbWFwX3dyaXRlMzIoJmF1dGNwdTEyX3NyYW1fbWFwLH5zYXZlMCwweDEwMDAwKTsKLQkvKiBpZiB3ZSBmaW5kIHRoaXMgcGF0dGVybiBvbiAweDAsIHdlIGhhdmUgMzJLIHNpemUgCisJLyogaWYgd2UgZmluZCB0aGlzIHBhdHRlcm4gb24gMHgwLCB3ZSBoYXZlIDMySyBzaXplCiAJICogcmVzdG9yZSBjb250ZW50cyBhbmQgZXhpdAogCSAqLwogCWlmICggbWFwX3JlYWQzMigmYXV0Y3B1MTJfc3JhbV9tYXAsMCkgIT0gc2F2ZTApIHsKQEAgLTg5LDcgKzg5LDcgQEAKIAogCXNyYW1fbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwogCXNyYW1fbXRkLT5lcmFzZXNpemUgPSAxNjsKLQkKKwogCWlmIChhZGRfbXRkX2RldmljZShzcmFtX210ZCkpIHsKIAkJcHJpbnRrKCJOVi1SQU0gZGV2aWNlIGFkZGl0aW9uIGZhaWxlZFxuIik7CiAJCWVyciA9IC1FTk9NRU07CkBAIC05Nyw3ICs5Nyw3IEBACiAJfQogCiAJcHJpbnRrKCJOVi1SQU0gZGV2aWNlIHNpemUgJWxkS2lCIHJlZ2lzdGVyZWQgb24gQVVUQ1BVMTJcbiIsYXV0Y3B1MTJfc3JhbV9tYXAuc2l6ZS9TWl8xSyk7Ci0JCQorCiAJcmV0dXJuIDA7CiAKIG91dF9wcm9iZToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvYmFzdC1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9iYXN0LWZsYXNoLmMKaW5kZXggNWVjNTNjMS4uNjEwZGZjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9iYXN0LWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9iYXN0LWZsYXNoLmMKQEAgLTksNyArOSw3IEBACiAgKgkyMC1TZXAtMjAwNCAgQkpEICBJbml0aWFsIHZlcnNpb24KICAqCTE3LUphbi0yMDA1ICBCSkQgIEFkZCB3aG9sZSBkZXZpY2UgaWYgbm8gcGFydGl0aW9ucyBmb3VuZAogICoKLSAqICRJZDogYmFzdC1mbGFzaC5jLHYgMS4zIDIwMDUvMTAvMTAgMDA6MTM6MzggYmpkIEV4cCAkCisgKiAkSWQ6IGJhc3QtZmxhc2guYyx2IDEuNSAyMDA1LzExLzA3IDExOjE0OjI2IGdsZWl4bmVyIEV4cCAkCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC03NSw3ICs3NSw3IEBACiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJdmFsID0gX19yYXdfcmVhZGIoQkFTVF9WQV9DVFJMMyk7Ci0JCisKIAlpZiAodG8pCiAJCXZhbCB8PSBCQVNUX0NQTERfQ1RSTDNfUk9NV0VOOwogCWVsc2UKQEAgLTkzLDcgKzkzLDcgQEAKIAogCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCi0JaWYgKGluZm8gPT0gTlVMTCkgCisJaWYgKGluZm8gPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoaW5mby0+bWFwLnZpcnQgIT0gTlVMTCkKQEAgLTExMSw3ICsxMTEsNyBAQAogCQlyZWxlYXNlX3Jlc291cmNlKGluZm8tPmFyZWEpOwogCQlrZnJlZShpbmZvLT5hcmVhKTsKIAl9Ci0JCisKIAlrZnJlZShpbmZvKTsKIAogCXJldHVybiAwOwpAQCAtMTM4LDE1ICsxMzgsMTUgQEAKIAogCWluZm8tPm1hcC5waHlzID0gcmVzLT5zdGFydDsKIAlpbmZvLT5tYXAuc2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7Ci0JaW5mby0+bWFwLm5hbWUgPSBkZXYtPmJ1c19pZDsJCisJaW5mby0+bWFwLm5hbWUgPSBkZXYtPmJ1c19pZDsKIAlpbmZvLT5tYXAuYmFua3dpZHRoID0gMjsKLQkKKwogCWlmIChpbmZvLT5tYXAuc2l6ZSA+IEFSRUFfTUFYU0laRSkKIAkJaW5mby0+bWFwLnNpemUgPSBBUkVBX01BWFNJWkU7CiAKIAlwcl9kZWJ1ZygiJXM6IGFyZWEgJTA4bHgsIHNpemUgJWxkXG4iLCBfX0ZVTkNUSU9OX18sCiAJCSBpbmZvLT5tYXAucGh5cywgaW5mby0+bWFwLnNpemUpOwotCQorCiAJaW5mby0+YXJlYSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBpbmZvLT5tYXAuc2l6ZSwKIAkJCQkJcGRldi0+bmFtZSk7CiAJaWYgKGluZm8tPmFyZWEgPT0gTlVMTCkgewpAQCAtMTYzLDcgKzE2Myw3IEBACiAJCWVyciA9IC1FSU87CiAJCWdvdG8gZXhpdF9lcnJvcjsKIAl9Ci0gCisKIAlzaW1wbGVfbWFwX2luaXQoJmluZm8tPm1hcCk7CiAKIAkvKiBlbmFibGUgdGhlIHdyaXRlIHRvIHRoZSBmbGFzaCBhcmVhICovCkBAIC0xODgsNyArMTg4LDcgQEAKIAllcnIgPSBwYXJzZV9tdGRfcGFydGl0aW9ucyhpbmZvLT5tdGQsIHByb2JlcywgJmluZm8tPnBhcnRpdGlvbnMsIDApOwogCWlmIChlcnIgPiAwKSB7CiAJCWVyciA9IGFkZF9tdGRfcGFydGl0aW9ucyhpbmZvLT5tdGQsIGluZm8tPnBhcnRpdGlvbnMsIGVycik7Ci0JCWlmIChlcnIpIAorCQlpZiAoZXJyKQogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IGFkZC9wYXJzZSBwYXJ0aXRpb25zXG4iKTsKIAl9IGVsc2UgewogCQllcnIgPSBhZGRfbXRkX2RldmljZShpbmZvLT5tdGQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9iZWVjaC1tdGQuYyBiL2RyaXZlcnMvbXRkL21hcHMvYmVlY2gtbXRkLmMKaW5kZXggNWU3OWM5ZC4uNWRmNzM2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9iZWVjaC1tdGQuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2JlZWNoLW10ZC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKLSAqICRJZDogYmVlY2gtbXRkLmMsdiAxLjEwIDIwMDQvMTEvMDQgMTM6MjQ6MTQgZ2xlaXhuZXIgRXhwICQKLSAqIAotICogZHJpdmVycy9tdGQvbWFwcy9iZWVjaC1tdGQuYyBNVEQgbWFwcGluZ3MgYW5kIHBhcnRpdGlvbiB0YWJsZXMgZm9yIAorICogJElkOiBiZWVjaC1tdGQuYyx2IDEuMTEgMjAwNS8xMS8wNyAxMToxNDoyNiBnbGVpeG5lciBFeHAgJAorICoKKyAqIGRyaXZlcnMvbXRkL21hcHMvYmVlY2gtbXRkLmMgTVREIG1hcHBpbmdzIGFuZCBwYXJ0aXRpb24gdGFibGVzIGZvcgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQk0gNDA1TFAgQmVlY2ggYm9hcmRzLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2NkYjg5NzEyLmMgYi9kcml2ZXJzL210ZC9tYXBzL2NkYjg5NzEyLmMKaW5kZXggYWIxNWRhYy4uOWYxN2JiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9jZGI4OTcxMi5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvY2RiODk3MTIuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBGbGFzaCBvbiBDaXJydXMgQ0RCODk3MTIKICAqCi0gKiAkSWQ6IGNkYjg5NzEyLmMsdiAxLjEwIDIwMDQvMTEvMDQgMTM6MjQ6MTQgZ2xlaXhuZXIgRXhwICQKKyAqICRJZDogY2RiODk3MTIuYyx2IDEuMTEgMjAwNS8xMS8wNyAxMToxNDoyNiBnbGVpeG5lciBFeHAgJAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTM3LDEzICszNywxMyBAQAogc3RhdGljIGludCBfX2luaXQgaW5pdF9jZGI4OTcxMl9mbGFzaCAodm9pZCkKIHsKIAlpbnQgZXJyOwotCQorCiAJaWYgKHJlcXVlc3RfcmVzb3VyY2UgKCZpb3BvcnRfcmVzb3VyY2UsICZjZGI4OTcxMl9mbGFzaF9yZXNvdXJjZSkpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJGYWlsZWQgdG8gcmVzZXJ2ZSBDZGI4OTcxMiBGTEFTSCBzcGFjZVxuIik7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBvdXQ7CiAJfQotCQorCiAJY2RiODk3MTJfZmxhc2hfbWFwLnZpcnQgPSBpb3JlbWFwKEZMQVNIX1NUQVJULCBGTEFTSF9TSVpFKTsKIAlpZiAoIWNkYjg5NzEyX2ZsYXNoX21hcC52aXJ0KSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiRmFpbGVkIHRvIGlvcmVtYXAgQ2RiODk3MTIgRkxBU0ggc3BhY2VcbiIpOwpAQCAtNjQsMTMgKzY0LDEzIEBACiAJfQogCiAJZmxhc2hfbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwotCQorCiAJaWYgKGFkZF9tdGRfZGV2aWNlKGZsYXNoX210ZCkpIHsKIAkJcHJpbnRrKCJGTEFTSCBkZXZpY2UgYWRkaXRpb24gZmFpbGVkXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXRfcHJvYmU7CiAJfQotCQkKKwogCXJldHVybiAwOwogCiBvdXRfcHJvYmU6CkBAIC0xMDcsMTMgKzEwNywxMyBAQAogc3RhdGljIGludCBfX2luaXQgaW5pdF9jZGI4OTcxMl9zcmFtICh2b2lkKQogewogCWludCBlcnI7Ci0JCisKIAlpZiAocmVxdWVzdF9yZXNvdXJjZSAoJmlvcG9ydF9yZXNvdXJjZSwgJmNkYjg5NzEyX3NyYW1fcmVzb3VyY2UpKSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiRmFpbGVkIHRvIHJlc2VydmUgQ2RiODk3MTIgU1JBTSBzcGFjZVxuIik7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBvdXQ7CiAJfQotCQorCiAJY2RiODk3MTJfc3JhbV9tYXAudmlydCA9IGlvcmVtYXAoU1JBTV9TVEFSVCwgU1JBTV9TSVpFKTsKIAlpZiAoIWNkYjg5NzEyX3NyYW1fbWFwLnZpcnQpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJGYWlsZWQgdG8gaW9yZW1hcCBDZGI4OTcxMiBTUkFNIHNwYWNlXG4iKTsKQEAgLTEzMCwxMyArMTMwLDEzIEBACiAKIAlzcmFtX210ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlzcmFtX210ZC0+ZXJhc2VzaXplID0gMTY7Ci0JCisKIAlpZiAoYWRkX210ZF9kZXZpY2Uoc3JhbV9tdGQpKSB7CiAJCXByaW50aygiU1JBTSBkZXZpY2UgYWRkaXRpb24gZmFpbGVkXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXRfcHJvYmU7CiAJfQotCQkKKwogCXJldHVybiAwOwogCiBvdXRfcHJvYmU6CkBAIC0xNzUsMTMgKzE3NSwxMyBAQAogc3RhdGljIGludCBfX2luaXQgaW5pdF9jZGI4OTcxMl9ib290cm9tICh2b2lkKQogewogCWludCBlcnI7Ci0JCisKIAlpZiAocmVxdWVzdF9yZXNvdXJjZSAoJmlvcG9ydF9yZXNvdXJjZSwgJmNkYjg5NzEyX2Jvb3Ryb21fcmVzb3VyY2UpKSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiRmFpbGVkIHRvIHJlc2VydmUgQ2RiODk3MTIgQk9PVFJPTSBzcGFjZVxuIik7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBvdXQ7CiAJfQotCQorCiAJY2RiODk3MTJfYm9vdHJvbV9tYXAudmlydCA9IGlvcmVtYXAoQk9PVFJPTV9TVEFSVCwgQk9PVFJPTV9TSVpFKTsKIAlpZiAoIWNkYjg5NzEyX2Jvb3Ryb21fbWFwLnZpcnQpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJGYWlsZWQgdG8gaW9yZW1hcCBDZGI4OTcxMiBCb290Uk9NIHNwYWNlXG4iKTsKQEAgLTE5OCwxMyArMTk4LDEzIEBACiAKIAlib290cm9tX210ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlib290cm9tX210ZC0+ZXJhc2VzaXplID0gMHgxMDAwMDsKLQkKKwogCWlmIChhZGRfbXRkX2RldmljZShib290cm9tX210ZCkpIHsKIAkJcHJpbnRrKCJCb290Uk9NIGRldmljZSBhZGRpdGlvbiBmYWlsZWRcbiIpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9wcm9iZTsKIAl9Ci0JCQorCiAJcmV0dXJuIDA7CiAKIG91dF9wcm9iZToKQEAgLTIyNSwxNiArMjI1LDE2IEBACiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2NkYjg5NzEyX21hcHModm9pZCkKIHsKIAotICAgICAgIAlwcmludGsoS0VSTl9JTkZPICJDaXJydXMgQ0RCODk3MTIgTVREIG1hcHBpbmdzOlxuICBGbGFzaCAweCV4IGF0IDB4JXhcbiAgU1JBTSAweCV4IGF0IDB4JXhcbiAgQm9vdFJPTSAweCV4IGF0IDB4JXhcbiIsIAorICAgICAgIAlwcmludGsoS0VSTl9JTkZPICJDaXJydXMgQ0RCODk3MTIgTVREIG1hcHBpbmdzOlxuICBGbGFzaCAweCV4IGF0IDB4JXhcbiAgU1JBTSAweCV4IGF0IDB4JXhcbiAgQm9vdFJPTSAweCV4IGF0IDB4JXhcbiIsCiAJICAgICAgIEZMQVNIX1NJWkUsIEZMQVNIX1NUQVJULCBTUkFNX1NJWkUsIFNSQU1fU1RBUlQsIEJPT1RST01fU0laRSwgQk9PVFJPTV9TVEFSVCk7CiAKIAlpbml0X2NkYjg5NzEyX2ZsYXNoKCk7CiAJaW5pdF9jZGI4OTcxMl9zcmFtKCk7CiAJaW5pdF9jZGI4OTcxMl9ib290cm9tKCk7Ci0JCisKIAlyZXR1cm4gMDsKIH0KLQkKKwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9jZGI4OTcxMl9tYXBzKHZvaWQpCiB7CkBAIC0yNDQsNyArMjQ0LDcgQEAKIAkJaW91bm1hcCgodm9pZCAqKWNkYjg5NzEyX3NyYW1fbWFwLnZpcnQpOwogCQlyZWxlYXNlX3Jlc291cmNlICgmY2RiODk3MTJfc3JhbV9yZXNvdXJjZSk7CiAJfQotCQorCiAJaWYgKGZsYXNoX210ZCkgewogCQlkZWxfbXRkX2RldmljZShmbGFzaF9tdGQpOwogCQltYXBfZGVzdHJveShmbGFzaF9tdGQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9jZmlfZmxhZ2FkbS5jIGIvZHJpdmVycy9tdGQvbWFwcy9jZmlfZmxhZ2FkbS5jCmluZGV4IGY3MmU0ZjguLjZhOGMwNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvY2ZpX2ZsYWdhZG0uYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2NmaV9mbGFnYWRtLmMKQEAgLTEsOCArMSw4IEBACiAvKgogICogIENvcHlyaWdodCCpIDIwMDEgRmxhZ2EgaGYuIE1lZGljYWwgRGV2aWNlcywgS+FyaSBEYXbt8HNzb24gPGtkQGZsYWdhLmlzPgogICoKLSAqICAkSWQ6IGNmaV9mbGFnYWRtLmMsdiAxLjE0IDIwMDQvMTEvMDQgMTM6MjQ6MTQgZ2xlaXhuZXIgRXhwICQKLSAqICAKKyAqICAkSWQ6IGNmaV9mbGFnYWRtLmMsdiAxLjE1IDIwMDUvMTEvMDcgMTE6MTQ6MjYgZ2xlaXhuZXIgRXhwICQKKyAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCiAgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCkBAIC00Miw3ICs0Miw3IEBACiAgKi8KIAogI2RlZmluZSBGTEFTSF9QSFlTX0FERFIgMHg0MDAwMDAwMAotI2RlZmluZSBGTEFTSF9TSVpFIDB4NDAwMDAwICAKKyNkZWZpbmUgRkxBU0hfU0laRSAweDQwMDAwMAogCiAjZGVmaW5lIEZMQVNIX1BBUlRJVElPTjBfQUREUiAweDAwMDAwMDAwCiAjZGVmaW5lIEZMQVNIX1BBUlRJVElPTjBfU0laRSAweDAwMDIwMDAwCkBAIC03OSw3ICs3OSw3IEBACiAJCS5vZmZzZXQgPQlGTEFTSF9QQVJUSVRJT04yX0FERFIsCiAJCS5zaXplID0JCUZMQVNIX1BBUlRJVElPTjJfU0laRQogCX0sCi0JewkKKwl7CiAJCS5uYW1lID0JCSJQZXJzaXN0YW50IHN0b3JhZ2UiLAogCQkub2Zmc2V0ID0JRkxBU0hfUEFSVElUSU9OM19BRERSLAogCQkuc2l6ZSA9CQlGTEFTSF9QQVJUSVRJT04zX1NJWkUKQEAgLTkxLDEwICs5MSwxMCBAQAogc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqbXltdGQ7CiAKIGludCBfX2luaXQgaW5pdF9mbGFnYWRtKHZvaWQpCi17CQorewogCXByaW50ayhLRVJOX05PVElDRSAiRmxhZ2FETSBmbGFzaCBkZXZpY2U6ICV4IGF0ICV4XG4iLAogCQkJRkxBU0hfU0laRSwgRkxBU0hfUEhZU19BRERSKTsKLQkKKwogCWZsYWdhZG1fbWFwLnBoeXMgPSBGTEFTSF9QSFlTX0FERFI7CiAJZmxhZ2FkbV9tYXAudmlydCA9IGlvcmVtYXAoRkxBU0hfUEhZU19BRERSLAogCQkJCQlGTEFTSF9TSVpFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvY3N0bV9taXBzX2l4eC5jIGIvZHJpdmVycy9tdGQvbWFwcy9jc3RtX21pcHNfaXh4LmMKaW5kZXggYWU5MjUyZi4uYTM3MDk1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9jc3RtX21pcHNfaXh4LmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9jc3RtX21pcHNfaXh4LmMKQEAgLTEsMTAgKzEsMTAgQEAKIC8qCi0gKiAkSWQ6IGNzdG1fbWlwc19peHguYyx2IDEuMTIgMjAwNC8xMS8wNCAxMzoyNDoxNCBnbGVpeG5lciBFeHAgJAorICogJElkOiBjc3RtX21pcHNfaXh4LmMsdiAxLjE0IDIwMDUvMTEvMDcgMTE6MTQ6MjYgZ2xlaXhuZXIgRXhwICQKICAqCiAgKiBNYXBwaW5nIG9mIGEgY3VzdG9tIGJvYXJkIHdpdGggYm90aCBBTUQgQ0ZJIGFuZCBKRURFQyBmbGFzaCBpbiBwYXJ0aXRpb25zLgogICogQ29uZmlnIHdpdGggYm90aCBDRkkgYW5kIEpFREVDIGRldmljZSBzdXBwb3J0LgogICoKLSAqIEJhc2ljYWxseSBwaHlzbWFwLmMgd2l0aCB0aGUgYWRkaXRpb24gb2YgcGFydGl0aW9ucyBhbmQgCisgKiBCYXNpY2FsbHkgcGh5c21hcC5jIHdpdGggdGhlIGFkZGl0aW9uIG9mIHBhcnRpdGlvbnMgYW5kCiAgKiBhbiBhcnJheSBvZiBtYXBwaW5nIGluZm8gdG8gYWNjb21vZGF0ZSBtb3JlIHRoYW4gb25lIGZsYXNoIHR5cGUgcGVyIGJvYXJkLgogICoKICAqIENvcHlyaWdodCAyMDAwIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgpAQCAtNjksNyArNjksNyBAQAogCQkJX191MTYJZGF0YTsKIAkJCV9fdTgJZGF0YTE7CiAJCQlzdGF0aWMgdTggZmlyc3QgPSAxOwotCQkKKwogCQkJLy8gU2V0IEdQSU8gcG9ydCBCIHBpbjMgdG8gaGlnaAogCQkJZGF0YSA9ICooX191MTYgKikoQ0NfR1BCQ1IpOwogCQkJZGF0YSA9IChkYXRhICYgMHhmZjBmKSB8IDB4MDA0MDsKQEAgLTg1LDcgKzg1LDcgQEAKIAl9IGVsc2UgewogCQlpZiAoIS0tdnBwX2NvdW50KSB7CiAJCQlfX3UxNglkYXRhOwotCQkKKwogCQkJLy8gU2V0IEdQSU8gcG9ydCBCIHBpbjMgdG8gaGlnaAogCQkJZGF0YSA9ICooX191MTYgKikoQ0NfR1BCQ1IpOwogCQkJZGF0YSA9IChkYXRhICYgMHhmZjNmKSB8IDB4MDA0MDsKQEAgLTEwOSw4ICsxMDksOCBAQAogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX01JUFNfSVRFODE3MikgfHwgZGVmaW5lZChDT05GSUdfTUlQU19JVlIpCi0jZGVmaW5lIFBIWVNNQVBfTlVNQkVSICAxICAvLyBudW1iZXIgb2YgYm9hcmQgZGVzYyBzdHJ1Y3RzIG5lZWRlZCwgb25lIHBlciBjb250aWd1b3VzIGZsYXNoIHR5cGUgCi1jb25zdCBzdHJ1Y3QgY3N0bV9taXBzX2l4eF9pbmZvIGNzdG1fbWlwc19peHhfYm9hcmRfZGVzY1tQSFlTTUFQX05VTUJFUl0gPSAKKyNkZWZpbmUgUEhZU01BUF9OVU1CRVIgIDEgIC8vIG51bWJlciBvZiBib2FyZCBkZXNjIHN0cnVjdHMgbmVlZGVkLCBvbmUgcGVyIGNvbnRpZ3VvdXMgZmxhc2ggdHlwZQorY29uc3Qgc3RydWN0IGNzdG1fbWlwc19peHhfaW5mbyBjc3RtX21pcHNfaXh4X2JvYXJkX2Rlc2NbUEhZU01BUF9OVU1CRVJdID0KIHsKICAgICB7ICAgLy8gMjhGMTI4SjNBIGluIDJ4MTYgY29uZmlndXJhdGlvbgogICAgICAgICAiYmlnIGZsYXNoIiwgICAgIC8vIG5hbWUKQEAgLTEzMSwxMCArMTMxLDEwIEBACiB9LAogfTsKICNlbHNlIC8qIGRlZmluZWQoQ09ORklHX01JUFNfSVRFODE3MikgfHwgZGVmaW5lZChDT05GSUdfTUlQU19JVlIpICovCi0jZGVmaW5lIFBIWVNNQVBfTlVNQkVSICAxICAvLyBudW1iZXIgb2YgYm9hcmQgZGVzYyBzdHJ1Y3RzIG5lZWRlZCwgb25lIHBlciBjb250aWd1b3VzIGZsYXNoIHR5cGUgCi1jb25zdCBzdHJ1Y3QgY3N0bV9taXBzX2l4eF9pbmZvIGNzdG1fbWlwc19peHhfYm9hcmRfZGVzY1tQSFlTTUFQX05VTUJFUl0gPSAKKyNkZWZpbmUgUEhZU01BUF9OVU1CRVIgIDEgIC8vIG51bWJlciBvZiBib2FyZCBkZXNjIHN0cnVjdHMgbmVlZGVkLCBvbmUgcGVyIGNvbnRpZ3VvdXMgZmxhc2ggdHlwZQorY29uc3Qgc3RydWN0IGNzdG1fbWlwc19peHhfaW5mbyBjc3RtX21pcHNfaXh4X2JvYXJkX2Rlc2NbUEhZU01BUF9OVU1CRVJdID0KIHsKLSAgICB7ICAKKyAgICB7CiAgICAgICAgICJNVEQgZmxhc2giLCAgICAgICAgICAgICAgICAgICAvLyBuYW1lCiAJQ09ORklHX01URF9DU1RNX01JUFNfSVhYX1NUQVJULCAgICAgIC8vIHdpbmRvd19hZGRyCiAJQ09ORklHX01URF9DU1RNX01JUFNfSVhYX0xFTiwgICAgICAgIC8vIHdpbmRvd19zaXplCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAogfTsKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjc3RtX21pcHNfaXh4X3BhcnRpdGlvbnNbUEhZU01BUF9OVU1CRVJdW01BWF9QSFlTTUFQX1BBUlRJVElPTlNdID0gewoteyAKK3sKIAl7CiAJCS5uYW1lID0gIm1haW4gcGFydGl0aW9uIiwKIAkJLnNpemUgPSAgQ09ORklHX01URF9DU1RNX01JUFNfSVhYX0xFTiwKQEAgLTE2NSw3ICsxNjUsNyBAQAogCiAJLyogSW5pdGlhbGl6ZSBtYXBwaW5nICovCiAJZm9yIChpPTA7aTxQSFlTTUFQX05VTUJFUjtpKyspIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJjc3RtX21pcHNfaXh4IGZsYXNoIGRldmljZTogMHglbHggYXQgMHglbHhcbiIsIAorCQlwcmludGsoS0VSTl9OT1RJQ0UgImNzdG1fbWlwc19peHggZmxhc2ggZGV2aWNlOiAweCVseCBhdCAweCVseFxuIiwKIAkJICAgICAgIGNzdG1fbWlwc19peHhfYm9hcmRfZGVzY1tpXS53aW5kb3dfc2l6ZSwgY3N0bV9taXBzX2l4eF9ib2FyZF9kZXNjW2ldLndpbmRvd19hZGRyKTsKIAogCkBAIC0yMzUsNyArMjM1LDcgQEAKIAogCW9mZnNldCA9ICggdW5zaWduZWQgbG9uZyApKCAweDgwMDAwMDAwIHwgKCBEZXZOdW1iZXIgPDwgMTEgKSArICggRnVuY051bWJlciA8PCA4ICkgKyBPZmZzZXQpIDsKIAotCSooX191MzIgKilDQ19DT05GQUREUiA9IG9mZnNldDsJCisJKihfX3UzMiAqKUNDX0NPTkZBRERSID0gb2Zmc2V0OwogCSooX191MzIgKilDQ19DT05GREFUQSA9IGRhdGE7CiB9CiB2b2lkIHNldHVwX0lURV9JVlJfZmxhc2goKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9kYm94Mi1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9kYm94Mi1mbGFzaC5jCmluZGV4IGQ4NTBhMjcuLjQ5ZDkwNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvZGJveDItZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2Rib3gyLWZsYXNoLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogJElkOiBkYm94Mi1mbGFzaC5jLHYgMS4xMyAyMDA0LzExLzA0IDEzOjI0OjE0IGdsZWl4bmVyIEV4cCAkCisgKiAkSWQ6IGRib3gyLWZsYXNoLmMsdiAxLjE0IDIwMDUvMTEvMDcgMTE6MTQ6MjYgZ2xlaXhuZXIgRXhwICQKICAqCiAgKiBELUJveCAyIGZsYXNoIGRyaXZlcgogICovCkBAIC0yMSwzOCArMjEsMzggQEAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mb1tdPSB7CiAJewogCS5uYW1lCQk9ICJCUiBib290bG9hZGVyIiwKLQkuc2l6ZQkJPSAxMjggKiAxMDI0LCAKLQkub2Zmc2V0CQk9IDAsICAgICAgICAgICAgICAgICAgCisJLnNpemUJCT0gMTI4ICogMTAyNCwKKwkub2Zmc2V0CQk9IDAsCiAJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFCiAJfSwKIAl7CiAJLm5hbWUJCT0gIkZMRlMgKFUtQm9vdCkiLAotCS5zaXplCQk9IDEyOCAqIDEwMjQsIAotCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELCAKKwkuc2l6ZQkJPSAxMjggKiAxMDI0LAorCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAogCS5tYXNrX2ZsYWdzCT0gMAogCX0sCiAJewotCS5uYW1lCQk9ICJSb290IChTcXVhc2hGUykiLAkKLQkuc2l6ZQkJPSA3MDQwICogMTAyNCwgCi0JLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsIAorCS5uYW1lCQk9ICJSb290IChTcXVhc2hGUykiLAorCS5zaXplCQk9IDcwNDAgKiAxMDI0LAorCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAogCS5tYXNrX2ZsYWdzCT0gMAogCX0sCiAJewogCS5uYW1lCQk9ICJ2YXIgKEpGRlMyKSIsCi0JLnNpemUJCT0gODk2ICogMTAyNCwgCi0JLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsIAorCS5zaXplCQk9IDg5NiAqIDEwMjQsCisJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCiAJLm1hc2tfZmxhZ3MJPSAwCiAJfSwKIAl7Ci0JLm5hbWUJCT0gIkZsYXNoIHdpdGhvdXQgYm9vdGxvYWRlciIsCQotCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsIAotCS5vZmZzZXQJCT0gMTI4ICogMTAyNCwgCisJLm5hbWUJCT0gIkZsYXNoIHdpdGhvdXQgYm9vdGxvYWRlciIsCisJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwkub2Zmc2V0CQk9IDEyOCAqIDEwMjQsCiAJLm1hc2tfZmxhZ3MJPSAwCiAJfSwKIAl7Ci0JLm5hbWUJCT0gIkNvbXBsZXRlIEZsYXNoIiwJCi0JLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwgCi0JLm9mZnNldAkJPSAwLCAKKwkubmFtZQkJPSAiQ29tcGxldGUgRmxhc2giLAorCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJLm9mZnNldAkJPSAwLAogCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRQogCX0KIH07CkBAIC04OCwxNiArODgsMTYgQEAKIAlpZiAoIW15bXRkKSB7CiAJICAgIC8vIFByb2JlIGZvciBzaW5nbGUgSW50ZWwgMjhGNjQwCiAJICAgIGRib3gyX2ZsYXNoX21hcC5iYW5rd2lkdGggPSAyOwotCQorCiAJICAgIG15bXRkID0gZG9fbWFwX3Byb2JlKCJjZmlfcHJvYmUiLCAmZGJveDJfZmxhc2hfbWFwKTsKIAl9Ci0JICAgIAorCiAJaWYgKG15bXRkKSB7CiAJCW15bXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAgICAgICAgICAgICAgICAgLyogQ3JlYXRlIE1URCBkZXZpY2VzIGZvciBlYWNoIHBhcnRpdGlvbi4gKi8KIAkgICAgICAgIGFkZF9tdGRfcGFydGl0aW9ucyhteW10ZCwgcGFydGl0aW9uX2luZm8sIE5VTV9QQVJUSVRJT05TKTsKLQkJCisKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2RjMjEyODUuYyBiL2RyaXZlcnMvbXRkL21hcHMvZGMyMTI4NS5jCmluZGV4IGU1Yjc0MTYuLjcwMTYyMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvZGMyMTI4NS5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvZGMyMTI4NS5jCkBAIC00LDggKzQsOCBAQAogICogKEMpIDIwMDAgIE5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4KICAqCiAgKiBUaGlzIGNvZGUgaXMgR1BMCi0gKiAKLSAqICRJZDogZGMyMTI4NS5jLHYgMS4yMiAyMDA0LzExLzAxIDEzOjM5OjIxIHJtayBFeHAgJAorICoKKyAqICRJZDogZGMyMTI4NS5jLHYgMS4yNCAyMDA1LzExLzA3IDExOjE0OjI2IGdsZWl4bmVyIEV4cCAkCiAgKi8KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTI3LDkgKzI3LDkgQEAKIHN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmRjMjEyODVfbXRkOwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfTkVUV0lOREVSCi0vKiAKKy8qCiAgKiBUaGlzIGlzIHJlYWxseSB1Z2x5LCBidXQgaXQgc2VhbXMgdG8gYmUgdGhlIG9ubHkKLSAqIHJlYWxpYWJsZSB3YXkgdG8gZG8gaXQsIGFzIHRoZSBjcGxkIHN0YXRlIG1hY2hpbmUgCisgKiByZWFsaWFibGUgd2F5IHRvIGRvIGl0LCBhcyB0aGUgY3BsZCBzdGF0ZSBtYWNoaW5lCiAgKiBpcyB1bnByZWRpY3RpYmxlLiBTbyB3ZSBoYXZlIGEgMjV1cyBwZW5hbHR5IHBlcgogICogd3JpdGUgYWNjZXNzLgogICovCkBAIC0xNTAsNyArMTUwLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqZGMyMTI4NV9wYXJ0czsKIHN0YXRpYyBjb25zdCBjaGFyICpwcm9iZXNbXSA9IHsgIlJlZEJvb3QiLCAiY21kbGluZXBhcnQiLCBOVUxMIH07CiAjZW5kaWYKLSAgCisKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfZGMyMTI4NSh2b2lkKQogewogCkBAIC0xNjAsMjAgKzE2MCwyMCBAQAogCiAJLyogRGV0ZXJtaW5lIGJhbmt3aWR0aCAqLwogCXN3aXRjaCAoKkNTUl9TQTExMF9DTlRMICYgKDM8PDE0KSkgewotCQljYXNlIFNBMTEwX0NOVExfUk9NV0lEVEhfODogCisJCWNhc2UgU0ExMTBfQ05UTF9ST01XSURUSF84OgogCQkJZGMyMTI4NV9tYXAuYmFua3dpZHRoID0gMTsKIAkJCWRjMjEyODVfbWFwLnJlYWQgPSBkYzIxMjg1X3JlYWQ4OwogCQkJZGMyMTI4NV9tYXAud3JpdGUgPSBkYzIxMjg1X3dyaXRlODsKIAkJCWRjMjEyODVfbWFwLmNvcHlfdG8gPSBkYzIxMjg1X2NvcHlfdG9fODsKIAkJCWJyZWFrOwotCQljYXNlIFNBMTEwX0NOVExfUk9NV0lEVEhfMTY6IAotCQkJZGMyMTI4NV9tYXAuYmFua3dpZHRoID0gMjsgCisJCWNhc2UgU0ExMTBfQ05UTF9ST01XSURUSF8xNjoKKwkJCWRjMjEyODVfbWFwLmJhbmt3aWR0aCA9IDI7CiAJCQlkYzIxMjg1X21hcC5yZWFkID0gZGMyMTI4NV9yZWFkMTY7CiAJCQlkYzIxMjg1X21hcC53cml0ZSA9IGRjMjEyODVfd3JpdGUxNjsKIAkJCWRjMjEyODVfbWFwLmNvcHlfdG8gPSBkYzIxMjg1X2NvcHlfdG9fMTY7CiAJCQlicmVhazsKLQkJY2FzZSBTQTExMF9DTlRMX1JPTVdJRFRIXzMyOiAKLQkJCWRjMjEyODVfbWFwLmJhbmt3aWR0aCA9IDQ7IAorCQljYXNlIFNBMTEwX0NOVExfUk9NV0lEVEhfMzI6CisJCQlkYzIxMjg1X21hcC5iYW5rd2lkdGggPSA0OwogCQkJZGMyMTI4NV9tYXAucmVhZCA9IGRjMjEyODVfcmVhZDMyOwogCQkJZGMyMTI4NV9tYXAud3JpdGUgPSBkYzIxMjg1X3dyaXRlMzI7CiAJCQlkYzIxMjg1X21hcC5jb3B5X3RvID0gZGMyMTI4NV9jb3B5X3RvXzMyOwpAQCAtMjAxLDIwICsyMDEsMjAgQEAKIAlpZiAoIWRjMjEyODVfbXRkKSB7CiAJCWlvdW5tYXAoZGMyMTI4NV9tYXAudmlydCk7CiAJCXJldHVybiAtRU5YSU87Ci0JfQkKLQkKKwl9CisKIAlkYzIxMjg1X210ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogCW5ycGFydHMgPSBwYXJzZV9tdGRfcGFydGl0aW9ucyhkYzIxMjg1X210ZCwgcHJvYmVzLCAmZGMyMTI4NV9wYXJ0cywgMCk7CiAJaWYgKG5ycGFydHMgPiAwKQogCQlhZGRfbXRkX3BhcnRpdGlvbnMoZGMyMTI4NV9tdGQsIGRjMjEyODVfcGFydHMsIG5ycGFydHMpOwotCWVsc2UJCi0jZW5kaWYJCisJZWxzZQorI2VuZGlmCiAJCWFkZF9tdGRfZGV2aWNlKGRjMjEyODVfbXRkKTsKLQkJCQorCiAJaWYobWFjaGluZV9pc19lYnNhMjg1KCkpIHsKLQkJLyogCisJCS8qCiAJCSAqIEZsYXNoIHRpbWluZyBpcyBkZXRlcm1pbmVkIHdpdGggYml0cyAxOS0xNiBvZiB0aGUKIAkJICogQ1NSX1NBMTEwX0NOVEwuICBUaGUgdmFsdWUgaXMgdGhlIG51bWJlciBvZiB3YWl0IGN5Y2xlcywgb3IKIAkJICogMCBmb3IgMTYgY3ljbGVzICh0aGUgZGVmYXVsdCkuICBDeWNsZXMgYXJlIDIwIG5zLgpAQCAtMjI3LDcgKzIyNyw3IEBACiAJCS8qIHRyaXN0YXRlIHRpbWUgKi8KIAkJKkNTUl9TQTExMF9DTlRMID0gKCgqQ1NSX1NBMTEwX0NOVEwgJiB+MHgwZjAwMDAwMCkgfCAoNyA8PCAyNCkpOwogCX0KLQkKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2RpbG5ldHBjLmMgYi9kcml2ZXJzL210ZC9tYXBzL2RpbG5ldHBjLmMKaW5kZXggZjk5NTE5Ni4uYjUxYzc1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9kaWxuZXRwYy5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvZGlsbmV0cGMuYwpAQCAtMTQsNyArMTQsNyBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKICAqCi0gKiAkSWQ6IGRpbG5ldHBjLmMsdiAxLjE3IDIwMDQvMTEvMjggMDk6NDA6MzkgZHdtdzIgRXhwICQKKyAqICRJZDogZGlsbmV0cGMuYyx2IDEuMjAgMjAwNS8xMS8wNyAxMToxNDoyNiBnbGVpeG5lciBFeHAgJAogICoKICAqIFRoZSBESUwvTmV0IFBDIGlzIGEgdGlueSBlbWJlZGRlZCBQQyBib2FyZCBtYWRlIGJ5IFNTViBFbWJlZGRlZCBTeXN0ZW1zCiAgKiBmZWF0dXJpbmcgdGhlIEFNRCBFbGFuIFNDNDEwIHByb2Nlc3Nvci4gVGhlcmUgYXJlIHR3byB2YXJpYW50cyBvZiB0aGlzCkBAIC0yNzIsMTMgKzI3MiwxMyBAQAogCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcGFydGl0aW9uX2luZm9bXT0KIHsKLQl7IAotCQkubmFtZSA9CQkiQUROUCBib290IiwgCi0JCS5vZmZzZXQgPQkwLCAKKwl7CisJCS5uYW1lID0JCSJBRE5QIGJvb3QiLAorCQkub2Zmc2V0ID0JMCwKIAkJLnNpemUgPQkJMHhmMDAwMCwKIAl9LAotCXsgCi0JCS5uYW1lID0JCSJBRE5QIHN5c3RlbSBCSU9TIiwgCisJeworCQkubmFtZSA9CQkiQUROUCBzeXN0ZW0gQklPUyIsCiAJCS5vZmZzZXQgPQlNVERQQVJUX09GU19OWFRCTEssCiAJCS5zaXplID0JCTB4MTAwMDAsCiAjaWZkZWYgRE5QQ19CSU9TX0JMT0NLU19XUklURVBST1RFQ1RFRApAQCAtMjkxLDcgKzI5MSw3IEBACiAJCS5zaXplID0JCTB4MmYwMDAwLAogCX0sCiAJewotCQkubmFtZSA9CQkiQUROUCBzeXN0ZW0gQklPUyBlbnRyeSIsIAorCQkubmFtZSA9CQkiQUROUCBzeXN0ZW0gQklPUyBlbnRyeSIsCiAJCS5vZmZzZXQgPQlNVERQQVJUX09GU19OWFRCTEssCiAJCS5zaXplID0JCU1URFBBUlRfU0laX0ZVTEwsCiAjaWZkZWYgRE5QQ19CSU9TX0JMT0NLU19XUklURVBST1RFQ1RFRApAQCAtMzI1LDkgKzMyNSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBoaWdsdmxfcGFydGl0aW9uX2luZm9bXT0KIHsKLQl7IAotCQkubmFtZSA9CQkiQUROUCBib290IGJsb2NrIiwgCi0JCS5vZmZzZXQgPQkwLCAKKwl7CisJCS5uYW1lID0JCSJBRE5QIGJvb3QgYmxvY2siLAorCQkub2Zmc2V0ID0JMCwKIAkJLnNpemUgPQkJQ09ORklHX01URF9ESUxORVRQQ19CT09UU0laRSwKIAl9LAogCXsKQEAgLTMzNSw4ICszMzUsOCBAQAogCQkub2Zmc2V0ID0JTVREUEFSVF9PRlNfTlhUQkxLLAogCQkuc2l6ZSA9CQlBRE5QX1dJTkRPV19TSVpFLUNPTkZJR19NVERfRElMTkVUUENfQk9PVFNJWkUtMHgyMDAwMCwKIAl9LAotCXsgCi0JCS5uYW1lID0JCSJBRE5QIHN5c3RlbSBCSU9TICsgQklPUyBFbnRyeSIsIAorCXsKKwkJLm5hbWUgPQkJIkFETlAgc3lzdGVtIEJJT1MgKyBCSU9TIEVudHJ5IiwKIAkJLm9mZnNldCA9CU1URFBBUlRfT0ZTX05YVEJMSywKIAkJLnNpemUgPQkJTVREUEFSVF9TSVpfRlVMTCwKICNpZmRlZiBETlBDX0JJT1NfQkxPQ0tTX1dSSVRFUFJPVEVDVEVECkBAIC0zNzEsNyArMzcxLDcgQEAKIAogCS8qCiAJKiogZGV0ZXJtaW5lIGhhcmR3YXJlIChETlAvQUROUC9pbnZhbGlkKQotCSovCQorCSovCiAJaWYoKGlzX2RucCA9IGRucF9hZG5wX3Byb2JlKCkpIDwgMCkKIAkJcmV0dXJuIC1FTlhJTzsKIApAQCAtMzk3LDEzICszOTcsMTMgQEAKIAkJKytkbnBjX21hcC5uYW1lOwogCQlmb3IoaSA9IDA7IGkgPCBOVU1fUEFSVElUSU9OUzsgaSsrKQogCQkJKytwYXJ0aXRpb25faW5mb1tpXS5uYW1lOwotCQloaWdsdmxfcGFydGl0aW9uX2luZm9bMV0uc2l6ZSA9IEROUF9XSU5ET1dfU0laRSAtIAorCQloaWdsdmxfcGFydGl0aW9uX2luZm9bMV0uc2l6ZSA9IEROUF9XSU5ET1dfU0laRSAtCiAJCQlDT05GSUdfTVREX0RJTE5FVFBDX0JPT1RTSVpFIC0gMHgyMDAwMDsKIAkJZm9yKGkgPSAwOyBpIDwgTlVNX0hJR0hMVkxfUEFSVElUSU9OUzsgaSsrKQogCQkJKytoaWdsdmxfcGFydGl0aW9uX2luZm9baV0ubmFtZTsKIAl9CiAKLQlwcmludGsoS0VSTl9OT1RJQ0UgIkRJTC9OZXQgJXMgZmxhc2g6IDB4JWx4IGF0IDB4JWx4XG4iLCAKKwlwcmludGsoS0VSTl9OT1RJQ0UgIkRJTC9OZXQgJXMgZmxhc2g6IDB4JWx4IGF0IDB4JWx4XG4iLAogCQlpc19kbnAgPyAiRE5QQyIgOiAiQUROUCIsIGRucGNfbWFwLnNpemUsIGRucGNfbWFwLnBoeXMpOwogCiAJZG5wY19tYXAudmlydCA9IGlvcmVtYXBfbm9jYWNoZShkbnBjX21hcC5waHlzLCBkbnBjX21hcC5zaXplKTsKQEAgLTQzNiw3ICs0MzYsNyBAQAogCQlpb3VubWFwKGRucGNfbWFwLnZpcnQpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KLQkJCisKIAlteW10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2RtdjE4Mi5jIGIvZHJpdmVycy9tdGQvbWFwcy9kbXYxODIuYwppbmRleCBiOWJjNjM1Li5iOTkzYWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2RtdjE4Mi5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvZG12MTgyLmMKQEAgLTEsMTAgKzEsMTAgQEAKIAogLyoKICAqIGRyaXZlcnMvbXRkL21hcHMvc3ZtZTE4Mi5jCi0gKiAKKyAqCiAgKiBGbGFzaCBtYXAgZHJpdmVyIGZvciB0aGUgRHk0IFNWTUUxODIgYm9hcmQKLSAqIAotICogJElkOiBkbXYxODIuYyx2IDEuNSAyMDA0LzExLzA0IDEzOjI0OjE0IGdsZWl4bmVyIEV4cCAkCisgKgorICogJElkOiBkbXYxODIuYyx2IDEuNiAyMDA1LzExLzA3IDExOjE0OjI2IGdsZWl4bmVyIEV4cCAkCiAgKgogICogQ29weXJpZ2h0IDIwMDMtMjAwNCwgVGltZVN5cyBDb3Jwb3JhdGlvbgogICoKQEAgLTEwNCw3ICsxMDQsNyBAQAogCXBhcnRpdGlvbnMgPSBzdm1lMTgyX3BhcnRpdGlvbnM7CiAKIAlzdm1lMTgyX21hcC52aXJ0ID0gaW9yZW1hcChGTEFTSF9CQVNFX0FERFIsIHN2bWUxODJfbWFwLnNpemUpOwotCQkKKwogCWlmIChzdm1lMTgyX21hcC52aXJ0ID09IDApIHsKIAkJcHJpbnRrKCJGYWlsZWQgdG8gaW9yZW1hcCBGTEFTSCBtZW1vcnkgYXJlYS5cbiIpOwogCQlyZXR1cm4gLUVJTzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvZWJvbnkuYyBiL2RyaXZlcnMvbXRkL21hcHMvZWJvbnkuYwppbmRleCBiOWQ5Y2Y0Li5jMGRhZjU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2Vib255LmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9lYm9ueS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKLSAqICRJZDogZWJvbnkuYyx2IDEuMTUgMjAwNC8xMi8wOSAxODozOTo1NCBob2xpbmRobyBFeHAgJAotICogCisgKiAkSWQ6IGVib255LmMsdiAxLjE2IDIwMDUvMTEvMDcgMTE6MTQ6MjYgZ2xlaXhuZXIgRXhwICQKKyAqCiAgKiBNYXBwaW5nIGZvciBFYm9ueSB1c2VyIGZsYXNoCiAgKgogICogTWF0dCBQb3J0ZXIgPG1wb3J0ZXJAa2VybmVsLmNyYXNoaW5nLm9yZz4KQEAgLTg1LDcgKzg1LDcgQEAKIAkJc21hbGxfZmxhc2hfYmFzZSA9IEVCT05ZX1NNQUxMX0ZMQVNIX0xPVzI7CiAJZWxzZQogCQlzbWFsbF9mbGFzaF9iYXNlID0gRUJPTllfU01BTExfRkxBU0hfTE9XMTsKLQkJCQorCiAJaWYgKEVCT05ZX0JPT1RfU01BTExfRkxBU0goZnBnYTBfcmVnKSAmJgogCQkJIUVCT05ZX09OQlJEX0ZMQVNIX0VOKGZwZ2EwX3JlZykpCiAJCWxhcmdlX2ZsYXNoX2Jhc2UgPSBFQk9OWV9MQVJHRV9GTEFTSF9MT1c7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2VkYjczMTIuYyBiL2RyaXZlcnMvbXRkL21hcHMvZWRiNzMxMi5jCmluZGV4IDhiMGRhMzkuLmI0OGEzNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvZWRiNzMxMi5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvZWRiNzMxMi5jCkBAIC0xLDEwICsxLDEwIEBACiAvKgotICogJElkOiBlZGI3MzEyLmMsdiAxLjEzIDIwMDQvMTEvMDQgMTM6MjQ6MTQgZ2xlaXhuZXIgRXhwICQKKyAqICRJZDogZWRiNzMxMi5jLHYgMS4xNCAyMDA1LzExLzA3IDExOjE0OjI3IGdsZWl4bmVyIEV4cCAkCiAgKgogICogSGFuZGxlIG1hcHBpbmcgb2YgdGhlIE5PUiBmbGFzaCBvbiBDb2dlbnQgRURCNzMxMiBib2FyZHMKICAqCiAgKiBDb3B5cmlnaHQgMjAwMiBTWVNHTyBSZWFsLVRpbWUgU29sdXRpb25zIEdtYkgKLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCkBAIC00Niw3ICs0Niw3IEBACiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiAKIC8qCi0gKiBNVEQgcGFydGl0aW9uaW5nIHN0dWZmIAorICogTVREIHBhcnRpdGlvbmluZyBzdHVmZgogICovCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gc3RhdGljX3BhcnRpdGlvbnNbM10gPQogewpAQCAtODAsNyArODAsNyBAQAogCWNvbnN0IGNoYXIgKip0eXBlOwogCWNvbnN0IGNoYXIgKnBhcnRfdHlwZSA9IDA7CiAKLSAgICAgICAJcHJpbnRrKEtFUk5fTk9USUNFIE1TR19QUkVGSVggIjB4JTA4eCBhdCAweCUwOHhcbiIsIAorICAgICAgIAlwcmludGsoS0VSTl9OT1RJQ0UgTVNHX1BSRUZJWCAiMHglMDh4IGF0IDB4JTA4eFxuIiwKIAkgICAgICAgV0lORE9XX1NJWkUsIFdJTkRPV19BRERSKTsKIAllZGI3MzEybm9yX21hcC52aXJ0ID0gaW9yZW1hcChXSU5ET1dfQUREUiwgV0lORE9XX1NJWkUpOwogCkBAIC04OCw3ICs4OCw3IEBACiAJCXByaW50ayhNU0dfUFJFRklYICJmYWlsZWQgdG8gaW9yZW1hcFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KLQkKKwogCXNpbXBsZV9tYXBfaW5pdCgmZWRiNzMxMm5vcl9tYXApOwogCiAJbXltdGQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9lcHhhMTBkYi1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9lcHhhMTBkYi1mbGFzaC5jCmluZGV4IDFkZjYxODguLjI2NWIwNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvZXB4YTEwZGItZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2VweGExMGRiLWZsYXNoLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIEFsdGVyYSBDb3Jwb3JhdGlvbgogICogIENvcHlyaWdodCAoQykgMjAwMSBSZWQgSGF0LCBJbmMuCiAgKgotICogJElkOiBlcHhhMTBkYi1mbGFzaC5jLHYgMS4xMyAyMDA0LzExLzA0IDEzOjI0OjE0IGdsZWl4bmVyIEV4cCAkIAorICogJElkOiBlcHhhMTBkYi1mbGFzaC5jLHYgMS4xNSAyMDA1LzExLzA3IDExOjE0OjI3IGdsZWl4bmVyIEV4cCAkCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC02Miw3ICs2Miw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBlcHhhX210ZF9pbml0KHZvaWQpCiB7CiAJaW50IGk7Ci0JCisKIAlwcmludGsoS0VSTl9OT1RJQ0UgIiVzIGZsYXNoIGRldmljZTogMHgleCBhdCAweCV4XG4iLCBCT0FSRF9OQU1FLCBGTEFTSF9TSVpFLCBGTEFTSF9TVEFSVCk7CiAKIAllcHhhX21hcC52aXJ0ID0gaW9yZW1hcChGTEFTSF9TVEFSVCwgRkxBU0hfU0laRSk7CkBAIC0xMjYsOCArMTI2LDggQEAKIH0KIAogCi0vKiAKLSAqIFRoaXMgd2lsbCBkbyBmb3Igbm93LCBvbmNlIHdlIGRlY2lkZSB3aGljaCBib290bGRyIHdlJ3JlIGZpbmFsbHkgCisvKgorICogVGhpcyB3aWxsIGRvIGZvciBub3csIG9uY2Ugd2UgZGVjaWRlIHdoaWNoIGJvb3RsZHIgd2UncmUgZmluYWxseQogICogZ29pbmcgdG8gdXNlIHRoZW4gd2UnbGwgcmVtb3ZlIHRoaXMgZnVuY3Rpb24gYW5kIGRvIGl0IHByb3Blcmx5CiAgKgogICogUGFydGlvbnMgYXJlIGN1cnJlbnRseSAoYXMgb2Zmc2V0cyBmcm9tIGJhc2Ugb2YgZmxhc2gpOgpAQCAtMTQwLDcgKzE0MCw3IEBACiAJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOwogCWludCByZXQsIGk7CiAJaW50IG5wYXJ0aXRpb25zID0gMDsKLQljaGFyICpuYW1lczsgCisJY2hhciAqbmFtZXM7CiAJY29uc3QgY2hhciAqbmFtZSA9ICJqZmZzIjsKIAogCXByaW50aygiVXNpbmcgZGVmYXVsdCBwYXJ0aXRpb25zIGZvciAlc1xuIixCT0FSRF9OQU1FKTsKQEAgLTE1Miw3ICsxNTIsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAJaT0wOwotCW5hbWVzID0gKGNoYXIgKikmcGFydHNbbnBhcnRpdGlvbnNdOwkKKwluYW1lcyA9IChjaGFyICopJnBhcnRzW25wYXJ0aXRpb25zXTsKIAlwYXJ0c1tpXS5uYW1lID0gbmFtZXM7CiAJbmFtZXMgKz0gc3RybGVuKG5hbWUpICsgMTsKIAlzdHJjcHkocGFydHNbaV0ubmFtZSwgbmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2ZvcnR1bmV0LmMgYi9kcml2ZXJzL210ZC9tYXBzL2ZvcnR1bmV0LmMKaW5kZXggMDBmN2JiZS4uYzZiZjRlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9mb3J0dW5ldC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvZm9ydHVuZXQuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGZvcnR1bmV0LmMgbWVtb3J5IG1hcAogICoKLSAqICRJZDogZm9ydHVuZXQuYyx2IDEuOSAyMDA0LzExLzA0IDEzOjI0OjE0IGdsZWl4bmVyIEV4cCAkCisgKiAkSWQ6IGZvcnR1bmV0LmMsdiAxLjExIDIwMDUvMTEvMDcgMTE6MTQ6MjcgZ2xlaXhuZXIgRXhwICQKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0yMTIsNyArMjEyLDcgQEAKIAogCQkJbWFwX3JlZ2lvbnNbaXhdLm1hcF9pbmZvLnBoeXMgPQltYXBfcmVnaW9uc1tpeF0ud2luZG93X2FkZHJfcGh5c2ljYWwsCiAKLQkJCW1hcF9yZWdpb25zW2l4XS5tYXBfaW5mby52aXJ0ID0gCisJCQltYXBfcmVnaW9uc1tpeF0ubWFwX2luZm8udmlydCA9CiAJCQkJaW9yZW1hcF9ub2NhY2hlKAogCQkJCW1hcF9yZWdpb25zW2l4XS53aW5kb3dfYWRkcl9waHlzaWNhbCwKIAkJCQltYXBfcmVnaW9uc1tpeF0ubWFwX2luZm8uc2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2g3MjB4LWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL2g3MjB4LWZsYXNoLmMKaW5kZXggYzczODI4MS4uMzE5MDk0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9oNzIweC1mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvaDcyMHgtZmxhc2guYwpAQCAtMSwxMSArMSwxMSBAQAogLyoKLSAqIEZsYXNoIG1lbW9yeSBhY2Nlc3Mgb24gSHluaXggR01TMzBDNzIwMS9ITVMzMEM3MjAyIGJhc2VkIAorICogRmxhc2ggbWVtb3J5IGFjY2VzcyBvbiBIeW5peCBHTVMzMEM3MjAxL0hNUzMwQzcyMDIgYmFzZWQKICAqIGV2YWx1YXRpb24gYm9hcmRzCi0gKiAKLSAqICRJZDogaDcyMHgtZmxhc2guYyx2IDEuMTEgMjAwNC8xMS8wNCAxMzoyNDoxNCBnbGVpeG5lciBFeHAgJAorICoKKyAqICRJZDogaDcyMHgtZmxhc2guYyx2IDEuMTIgMjAwNS8xMS8wNyAxMToxNDoyNyBnbGVpeG5lciBFeHAgJAogICoKICAqIChDKSAyMDAyIEp1bmdqdW4gS2ltIDxqdW5nanVuLmtpbUBoeW5peC5jb20+Ci0gKiAgICAgMjAwMyBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4JCisgKiAgICAgMjAwMyBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC03Miw3ICs3Miw3IEBACiB7CiAKIAljaGFyCSpwYXJ0X3R5cGUgPSBOVUxMOwotCQorCiAJaDcyMHhfbWFwLnZpcnQgPSBpb3JlbWFwKEZMQVNIX1BIWVMsIEZMQVNIX1NJWkUpOwogCiAJaWYgKCFoNzIweF9tYXAudmlydCkgewpAQCAtOTEsNyArOTEsNyBAQAogCSAgICBoNzIweF9tYXAuYmFua3dpZHRoID0gMjsKIAkgICAgbXltdGQgPSBkb19tYXBfcHJvYmUoImNmaV9wcm9iZSIsICZoNzIweF9tYXApOwogCX0KLQkgICAgCisKIAlpZiAobXltdGQpIHsKIAkJbXltdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CiAKQEAgLTEyNCwxMSArMTI0LDExIEBACiAJCWRlbF9tdGRfcGFydGl0aW9ucyhteW10ZCk7CiAJCW1hcF9kZXN0cm95KG15bXRkKTsKIAl9Ci0JCisKIAkvKiBGcmVlIHBhcnRpdGlvbiBpbmZvLCBpZiBjb21tYW5kbGluZSBwYXJ0aXRpb24gd2FzIHVzZWQgKi8KIAlpZiAobXRkX3BhcnRzICYmIChtdGRfcGFydHMgIT0gaDcyMHhfcGFydGl0aW9ucykpCiAJCWtmcmVlIChtdGRfcGFydHMpOwotCQorCiAJaWYgKGg3MjB4X21hcC52aXJ0KSB7CiAJCWlvdW5tYXAoKHZvaWQgKiloNzIweF9tYXAudmlydCk7CiAJCWg3MjB4X21hcC52aXJ0ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvaWNoeHJvbS5jIGIvZHJpdmVycy9tdGQvbWFwcy9pY2h4cm9tLmMKaW5kZXggZTUwNTIwNy4uYWE5NzIwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9pY2h4cm9tLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9pY2h4cm9tLmMKQEAgLTIsNyArMiw3IEBACiAgKiBpY2h4cm9tLmMKICAqCiAgKiBOb3JtYWwgbWFwcGluZ3Mgb2YgY2hpcHMgaW4gcGh5c2ljYWwgbWVtb3J5Ci0gKiAkSWQ6IGljaHhyb20uYyx2IDEuMTggMjAwNS8wNy8wNyAxMDoyNjoyMCBkd213MiBFeHAgJAorICogJElkOiBpY2h4cm9tLmMsdiAxLjE5IDIwMDUvMTEvMDcgMTE6MTQ6MjcgZ2xlaXhuZXIgRXhwICQKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0xMDEsNyArMTAxLDcgQEAKIAkgKiB5b3UgY2FuIG9ubHkgcmVhbGx5IGF0dGFjaCBhIEZXSCB0byBhbiBJQ0hYIHRoZXJlCiAJICogYSBudW1iZXIgb2Ygc2ltcGxpZmljYXRpb25zIHlvdSBjYW4gbWFrZS4KIAkgKgotCSAqIEFsc28geW91IGNhbiBwYWdlIGZpcm13YXJlIGh1YnMgaWYgYW4gOE1CIHdpbmRvdyBpc24ndCBlbm91Z2ggCisJICogQWxzbyB5b3UgY2FuIHBhZ2UgZmlybXdhcmUgaHVicyBpZiBhbiA4TUIgd2luZG93IGlzbid0IGVub3VnaAogCSAqIGJ1dCBkb24ndCBjdXJyZW50bHkgaGFuZGxlIHRoYXQgY2FzZSBlaXRoZXIuCiAJICovCiAJd2luZG93LT5wZGV2ID0gcGRldjsKQEAgLTE0NCw3ICsxNDQsNyBAQAogCQl3aW5kb3ctPnBoeXMgPSAweGZmZjAwMDAwOwogCX0KIAllbHNlIGlmICgoYnl0ZSAmIDB4ODApID09IDB4ODApIHsKLQkJd2luZG93LT5waHlzID0gMHhmZmY4MDAwMDsgCisJCXdpbmRvdy0+cGh5cyA9IDB4ZmZmODAwMDA7CiAJfQogCiAJaWYgKHdpbmRvdy0+cGh5cyA9PSAwKSB7CkBAIC0yMzMsNyArMjMzLDcgQEAKIAkJICogaW4gYSBmYWN0b3J5IHNldHRpbmcuICBTbyBpbi1wbGFjZSBwcm9ncmFtbWluZwogCQkgKiBuZWVkcyB0byB1c2UgYSBkaWZmZXJlbnQgbWV0aG9kLgogCQkgKi8KLQkJZm9yKG1hcC0+bWFwLmJhbmt3aWR0aCA9IDMyOyBtYXAtPm1hcC5iYW5rd2lkdGg7IAorCQlmb3IobWFwLT5tYXAuYmFua3dpZHRoID0gMzI7IG1hcC0+bWFwLmJhbmt3aWR0aDsKIAkJCW1hcC0+bWFwLmJhbmt3aWR0aCA+Pj0gMSkKIAkJewogCQkJY2hhciAqKnByb2JlX3R5cGU7CkBAIC0yODYsNyArMjg2LDcgQEAKIAkJZm9yKGkgPSAwOyBpIDwgY2ZpLT5udW1jaGlwczsgaSsrKSB7CiAJCQljZmktPmNoaXBzW2ldLnN0YXJ0ICs9IG9mZnNldDsKIAkJfQotCQkKKwogCQkvKiBOb3cgdGhhdCB0aGUgbXRkIGRldmljZXMgaXMgY29tcGxldGUgY2xhaW0gYW5kIGV4cG9ydCBpdCAqLwogCQltYXAtPm10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAkJaWYgKGFkZF9tdGRfZGV2aWNlKG1hcC0+bXRkKSkgewpAQCAtMzI1LDExICszMjUsMTEgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGljaHhyb21fcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfMCwgCisJeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfMCwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQ0FfMCwgCisJeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQ0FfMCwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMCwgCisJeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMCwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRUJfMCwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2ltcGE3LmMgYi9kcml2ZXJzL210ZC9tYXBzL2ltcGE3LmMKaW5kZXggY2IzOTE3Mi4uYmE3ZjQwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9pbXBhNy5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvaW1wYTcuYwpAQCAtMSwxMCArMSwxMCBAQAogLyoKLSAqICRJZDogaW1wYTcuYyx2IDEuMTMgMjAwNC8xMS8wNCAxMzoyNDoxNCBnbGVpeG5lciBFeHAgJAorICogJElkOiBpbXBhNy5jLHYgMS4xNCAyMDA1LzExLzA3IDExOjE0OjI3IGdsZWl4bmVyIEV4cCAkCiAgKgogICogSGFuZGxlIG1hcHBpbmcgb2YgdGhlIE5PUiBmbGFzaCBvbiBpbXBsZW1lbnRhIEE3IGJvYXJkcwogICoKICAqIENvcHlyaWdodCAyMDAyIFNZU0dPIFJlYWwtVGltZSBTb2x1dGlvbnMgR21iSAotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KQEAgLTU1LDcgKzU1LDcgQEAKICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKIAogLyoKLSAqIE1URCBwYXJ0aXRpb25pbmcgc3R1ZmYgCisgKiBNVEQgcGFydGl0aW9uaW5nIHN0dWZmCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBzdGF0aWNfcGFydGl0aW9uc1tdID0KIHsKQEAgLTEwOCw5ICsxMDgsOSBAQAogCQkJaW1wYTdfbXRkW2ldLT5vd25lciA9IFRISVNfTU9EVUxFOwogCQkJZGV2aWNlc2ZvdW5kKys7CiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCi0JCQltdGRfcGFydHNfbmJbaV0gPSBwYXJzZV9tdGRfcGFydGl0aW9ucyhpbXBhN19tdGRbaV0sIAorCQkJbXRkX3BhcnRzX25iW2ldID0gcGFyc2VfbXRkX3BhcnRpdGlvbnMoaW1wYTdfbXRkW2ldLAogCQkJCQkJCSAgICAgICBwcm9iZXMsCi0JCQkJCQkJICAgICAgICZtdGRfcGFydHNbaV0sIAorCQkJCQkJCSAgICAgICAmbXRkX3BhcnRzW2ldLAogCQkJCQkJCSAgICAgICAwKTsKIAkJCWlmIChtdGRfcGFydHNfbmJbaV0gPiAwKSB7CiAJCQkJcGFydF90eXBlID0gImNvbW1hbmQgbGluZSI7CkBAIC0xMjEsMTYgKzEyMSwxNiBAQAogCQkJfQogCiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgTVNHX1BSRUZJWAotCQkJICAgICAgICJ1c2luZyAlcyBwYXJ0aXRpb24gZGVmaW5pdGlvblxuIiwgCisJCQkgICAgICAgInVzaW5nICVzIHBhcnRpdGlvbiBkZWZpbml0aW9uXG4iLAogCQkJICAgICAgIHBhcnRfdHlwZSk7Ci0JCQlhZGRfbXRkX3BhcnRpdGlvbnMoaW1wYTdfbXRkW2ldLCAKKwkJCWFkZF9tdGRfcGFydGl0aW9ucyhpbXBhN19tdGRbaV0sCiAJCQkJCSAgIG10ZF9wYXJ0c1tpXSwgbXRkX3BhcnRzX25iW2ldKTsKICNlbHNlCiAJCQlhZGRfbXRkX2RldmljZShpbXBhN19tdGRbaV0pOwogCiAjZW5kaWYKIAkJfQotCQllbHNlIAorCQllbHNlCiAJCQlpb3VubWFwKCh2b2lkICopaW1wYTdfbWFwW2ldLnZpcnQpOwogCX0KIAlyZXR1cm4gZGV2aWNlc2ZvdW5kID09IDAgPyAtRU5YSU8gOiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9pbnRlZ3JhdG9yLWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL2ludGVncmF0b3ItZmxhc2guYwppbmRleCBkMTRhMDE4Li41NDk2MTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2ludGVncmF0b3ItZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2ludGVncmF0b3ItZmxhc2guYwpAQCAtMSwyOCArMSwyOCBAQAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICAgICBkcml2ZXJzL210ZC9tYXBzL2ludGVncmF0b3ItZmxhc2guYzogQVJNIEludGVncmF0b3IgZmxhc2ggbWFwIGRyaXZlcgotICAKKwogICAgIENvcHlyaWdodCAoQykgMjAwMCBBUk0gTGltaXRlZAogICAgIENvcHlyaWdodCAoQykgMjAwMyBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZC4KLSAgCisKICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gIAorCiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICAKKwogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gIAotICAgVGhpcyBpcyBhY2Nlc3MgY29kZSBmb3IgZmxhc2hlcyB1c2luZyBBUk0ncyBmbGFzaCBwYXJ0aXRpb25pbmcgCisKKyAgIFRoaXMgaXMgYWNjZXNzIGNvZGUgZm9yIGZsYXNoZXMgdXNpbmcgQVJNJ3MgZmxhc2ggcGFydGl0aW9uaW5nCiAgICBzdGFuZGFyZHMuCiAKLSAgICRJZDogaW50ZWdyYXRvci1mbGFzaC5jLHYgMS4xOCAyMDA0LzExLzAxIDEzOjI2OjE1IHJtayBFeHAgJAorICAgJElkOiBpbnRlZ3JhdG9yLWZsYXNoLmMsdiAxLjIwIDIwMDUvMTEvMDcgMTE6MTQ6MjcgZ2xlaXhuZXIgRXhwICQKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvaXBhcS1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9pcGFxLWZsYXNoLmMKaW5kZXggNzEyNDAxOC4uZmJhY2UxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9pcGFxLWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9pcGFxLWZsYXNoLmMKQEAgLTEsMTEgKzEsMTEgQEAKIC8qCiAgKiBGbGFzaCBtZW1vcnkgYWNjZXNzIG9uIGlQQVEgSGFuZGhlbGRzIChlaXRoZXIgU0ExMTAwIG9yIFBYQTI1MCBiYXNlZCkKLSAqIAorICoKICAqIChDKSAyMDAwIE5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4KICAqIChDKSAyMDAyIEhld2xldHQtUGFja2FyZCBDb21wYW55IDxqYW1leS5oaWNrc0BocC5jb20+CiAgKiAoQykgMjAwMyBDaHJpc3RpYW4gUGVsbGVncmluIDxjaHJpQGFzY2Vuc2l0LmNvbT4sIDxjaHJpQGluZmlzLnVuaXYudHMuaXQ+OiBjb25jYXRlbmF0aW9uIG9mIG11bHRpcGxlIGZsYXNoZXMKLSAqIAotICogJElkOiBpcGFxLWZsYXNoLmMsdiAxLjMgMjAwNC8xMS8wNCAxMzoyNDoxNSBnbGVpeG5lciBFeHAgJAorICoKKyAqICRJZDogaXBhcS1mbGFzaC5jLHYgMS41IDIwMDUvMTEvMDcgMTE6MTQ6MjcgZ2xlaXhuZXIgRXhwICQKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC0xMDcsNyArMTA3LDcgQEAKICNpZm5kZWYgQ09ORklHX0xBQgogCQltYXNrX2ZsYWdzOglNVERfV1JJVEVBQkxFLCAgLyogZm9yY2UgcmVhZC1vbmx5ICovCiAjZW5kaWYKLQl9LCAKKwl9LAogCXsKIAkJbmFtZToJCSJIM1hYWCByb290IGpmZnMyIiwKICNpZm5kZWYgQ09ORklHX0xBQgpAQCAtMTQ4LDcgKzE0OCw3IEBACiBzdGF0aWMgdm9pZCBoM3h4eF9zZXRfdnBwKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBpbnQgdnBwKQogewogCXN0YXRpYyBpbnQgbmVzdCA9IDA7Ci0JCisKIAlzcGluX2xvY2soJmlwYXFfdnBwX2xvY2spOwogCWlmICh2cHApCiAJCW5lc3QrKzsKQEAgLTE5MSw3ICsxOTEsNyBAQAogCVNBMTEwMF9DUzNfUEhZUywKIAlTQTExMDBfQ1M0X1BIWVMsCiAJU0ExMTAwX0NTNV9QSFlTLAotI2Vsc2UgCisjZWxzZQogCVBYQV9DUzBfUEhZUywKIAlQWEFfQ1MxX1BIWVMsCiAJUFhBX0NTMl9QSFlTLApAQCAtMjE2LDcgKzIxNiw3IEBACiAKIAkvKiBEZWZhdWx0IGZsYXNoIGJhbmt3aWR0aCAqLwogCS8vIGlwYXFfbWFwLmJhbmt3aWR0aCA9IChNU0MwICYgTVNDX1JCVykgPyAyIDogNDsKLQkKKwogCWlmIChtYWNoaW5lX2lzX2gxOTAwKCkpCiAJewogCQkvKiBGb3Igb3VyIGludGVudHMsIHRoZSBoMTkwMCBpcyBub3QgYSByZWFsIGlQQVEsIHNvIHdlIHNwZWNpYWwtY2FzZSBpdC4gKi8KQEAgLTIyOSw3ICsyMjksNyBAQAogCWVsc2UKIAkJZm9yKGk9MDsgaTxNQVhfSVBBUV9DUzsgaSsrKQogCQkJaXBhcV9tYXBbaV0uYmFua3dpZHRoID0gNDsKLQkJCQorCiAJLyoKIAkgKiBTdGF0aWMgcGFydGl0aW9uIGRlZmluaXRpb24gc2VsZWN0aW9uCiAJICovCkBAIC0zMDksNyArMzA5LDcgQEAKIAkJCQkJcmV0dXJuIC1FTlhJTzsKIAkJCX0gZWxzZQogCQkJCXByaW50ayhLRVJOX05PVElDRSAiaVBBUSBmbGFzaDogZm91bmQgJWQgYnl0ZXNcbiIsIG15X3N1Yl9tdGRbaV0tPnNpemUpOwotCQkJCisKIAkJCS8qIGRvIHdlIHJlYWxseSBuZWVkIHRoaXMgZGVidWdnaW5nPyAtLWpvc2h1YSAyMDAzMDcwMyAqLwogCQkJLy8gcHJpbnRrKCJteV9zdWJfbXRkWyVkXT0lcFxuIiwgaSwgbXlfc3ViX210ZFtpXSk7CiAJCQlteV9zdWJfbXRkW2ldLT5vd25lciA9IFRISVNfTU9EVUxFOwpAQCAtMzMzLDExICszMzMsMTEgQEAKICNlbHNlCiAJCW15bXRkID0gbXlfc3ViX210ZFswXTsKIAotCQkvKiAKKwkJLyoKIAkJICpJbiB0aGUgdmVyeSBuZWFyIGZ1dHVyZSwgY29tbWFuZCBsaW5lIHBhcnRpdGlvbiBwYXJzaW5nCiAJCSAqIHdpbGwgdXNlIHRoZSBkZXZpY2UgbmFtZSBhcyAnbXRkLWlkJyBpbnN0ZWFkIG9mIGEgdmFsdWUKIAkJICogcGFzc2VkIHRvIHRoZSBwYXJzZV9jbWRsaW5lX3BhcnRpdGlvbnMoKSByb3V0aW5lLiBTaW5jZQotCQkgKiB0aGUgYm9vdGxkciBzYXlzICdpcGFxJywgbWFrZSBzdXJlIGl0IGNvbnRpbnVlcyB0byB3b3JrLiAKKwkJICogdGhlIGJvb3RsZHIgc2F5cyAnaXBhcScsIG1ha2Ugc3VyZSBpdCBjb250aW51ZXMgdG8gd29yay4KIAkJICovCiAJCW15bXRkLT5uYW1lID0gImlwYXEiOwogCkBAIC0zODUsNyArMzg1LDcgQEAKIAkgKi8KIAogCSBpID0gcGFyc2VfbXRkX3BhcnRpdGlvbnMobXltdGQsIHBhcnRfcHJvYmVzLCAmcGFyc2VkX3BhcnRzLCAwKTsKLQkJCQorCiAJIGlmIChpID4gMCkgewogCQkgbmJfcGFydHMgPSBwYXJzZWRfbnJfcGFydHMgPSBpOwogCQkgcGFydHMgPSBwYXJzZWRfcGFydHM7CkBAIC00MjMsMTAgKzQyMywxMCBAQAogI2VuZGlmCiAJCW1hcF9kZXN0cm95KG15bXRkKTsKICNpZmRlZiBDT05GSUdfTVREX0NPTkNBVAotCQlmb3IoaT0wOyBpPE1BWF9JUEFRX0NTOyBpKyspIAorCQlmb3IoaT0wOyBpPE1BWF9JUEFRX0NTOyBpKyspCiAjZWxzZQotCQkJZm9yKGk9MTsgaTxNQVhfSVBBUV9DUzsgaSsrKSAKLSNlbmRpZgkJICAKKwkJCWZvcihpPTE7IGk8TUFYX0lQQVFfQ1M7IGkrKykKKyNlbmRpZgogCQkJewogCQkJCWlmIChteV9zdWJfbXRkW2ldKQogCQkJCQltYXBfZGVzdHJveShteV9zdWJfbXRkW2ldKTsKQEAgLTQ0NSwxNCArNDQ1LDE0IEBACiAJaXBhcV9tYXBbMF0ucGh5cyA9IDB4MDsKIAlpcGFxX21hcFswXS52aXJ0ID0gX19pb3JlbWFwKDB4MCwgMHgwNDAwMDAwMCwgMCwgMSk7CiAJaXBhcV9tYXBbMF0uYmFua3dpZHRoID0gMjsKLQkKKwogCXByaW50ayhLRVJOX05PVElDRSAiaVBBUSBmbGFzaDogcHJvYmluZyAlZC1iaXQgZmxhc2ggYnVzLCB3aW5kb3c9JWx4IHdpdGggSkVERUMuXG4iLCBpcGFxX21hcFswXS5iYW5rd2lkdGgqOCwgaXBhcV9tYXBbMF0udmlydCk7CiAJbXltdGQgPSBkb19tYXBfcHJvYmUoImplZGVjX3Byb2JlIiwgJmlwYXFfbWFwWzBdKTsKIAlpZiAoIW15bXRkKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlhZGRfbXRkX2RldmljZShteW10ZCk7CiAJcHJpbnRrKEtFUk5fTk9USUNFICJpUEFRIGZsYXNoOiByZWdpc3RlcmVkIGgxOTEwIGZsYXNoXG4iKTsKLQkKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2lxODAzMTAuYyBiL2RyaXZlcnMvbXRkL21hcHMvaXE4MDMxMC5jCmluZGV4IDU1OGQwMTQuLjViMmZkMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvaXE4MDMxMC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvaXE4MDMxMC5jCkBAIC0xLDExICsxLDExIEBACiAvKgotICogJElkOiBpcTgwMzEwLmMsdiAxLjIwIDIwMDQvMTEvMDQgMTM6MjQ6MTUgZ2xlaXhuZXIgRXhwICQKKyAqICRJZDogaXE4MDMxMC5jLHYgMS4yMSAyMDA1LzExLzA3IDExOjE0OjI3IGdsZWl4bmVyIEV4cCAkCiAgKgogICogTWFwcGluZyBmb3IgdGhlIEludGVsIFhTY2FsZSBJUTgwMzEwIGV2YWx1YXRpb24gYm9hcmQKICAqCiAgKiBBdXRob3I6CU5pY29sYXMgUGl0cmUKICAqIENvcHlyaWdodDoJKEMpIDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9peHAyMDAwLmMgYi9kcml2ZXJzL210ZC9tYXBzL2l4cDIwMDAuYwppbmRleCA3OGM2OGY0Li5hYTI5YTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2l4cDIwMDAuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2l4cDIwMDAuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAkSWQ6IGl4cDIwMDAuYyx2IDEuOCAyMDA1LzExLzA3IDA4OjA5OjAyIGdsZWl4bmVyIEV4cCAkCisgKiAkSWQ6IGl4cDIwMDAuYyx2IDEuOSAyMDA1LzExLzA3IDExOjE0OjI3IGdsZWl4bmVyIEV4cCAkCiAgKgogICogZHJpdmVycy9tdGQvbWFwcy9peHAyMDAwLmMKICAqCkBAIC0xNCw3ICsxNCw3IEBACiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICogCisgKgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTQ2LDggKzQ2LDggQEAKIH07CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmbGFzaF9iYW5rX3NldHVwKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCB1bnNpZ25lZCBsb25nIG9mcykKLXsJCi0JdW5zaWduZWQgbG9uZyAoKnNldF9iYW5rKSh1bnNpZ25lZCBsb25nKSA9IAoreworCXVuc2lnbmVkIGxvbmcgKCpzZXRfYmFuaykodW5zaWduZWQgbG9uZykgPQogCQkodW5zaWduZWQgbG9uZygqKSh1bnNpZ25lZCBsb25nKSltYXAtPm1hcF9wcml2XzI7CiAKIAlyZXR1cm4gKHNldF9iYW5rID8gc2V0X2Jhbmsob2ZzKSA6IG9mcyk7CkBAIC01NSw4ICs1NSw4IEBACiAKICNpZmRlZiBfX0FSTUVCX18KIC8qCi0gKiBSZXYgQTAgYW5kIEExIG9mIElYUDI0MDAgc2lsaWNvbiBoYXZlIGEgYnJva2VuIGFkZHJlc3NpbmcgdW5pdCB3aGljaCAKLSAqIGNhdXNlcyB0aGUgbG93ZXIgYWRkcmVzcyBiaXRzIHRvIGJlIFhPUmVkIHdpdGggMHgxMSBvbiA4IGJpdCBhY2Nlc3NlcyAKKyAqIFJldiBBMCBhbmQgQTEgb2YgSVhQMjQwMCBzaWxpY29uIGhhdmUgYSBicm9rZW4gYWRkcmVzc2luZyB1bml0IHdoaWNoCisgKiBjYXVzZXMgdGhlIGxvd2VyIGFkZHJlc3MgYml0cyB0byBiZSBYT1JlZCB3aXRoIDB4MTEgb24gOCBiaXQgYWNjZXNzZXMKICAqIGFuZCBYT1JlZCB3aXRoIDB4MTAgb24gMTYgYml0IGFjY2Vzc2VzLiBTZWUgdGhlIHNwZWMgdXBkYXRlLCBlcnJhdHVtIDQ0LgogICovCiBzdGF0aWMgaW50IGVycmF0dW00NF93b3JrYXJvdW5kID0gMDsKQEAgLTkwLDcgKzkwLDcgQEAKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZnJvbSwgc3NpemVfdCBsZW4pCiB7CiAJZnJvbSA9IGZsYXNoX2Jhbmtfc2V0dXAobWFwLCBmcm9tKTsKLQl3aGlsZShsZW4tLSkgCisJd2hpbGUobGVuLS0pCiAJCSooX191OCAqKSB0bysrID0gKihfX3U4ICopKG1hcC0+bWFwX3ByaXZfMSArIGZyb20rKyk7CiB9CiAKQEAgLTE0OSwxMSArMTQ5LDExIEBACiAJc3RhdGljIGNvbnN0IGNoYXIgKnByb2Jlc1tdID0geyAiUmVkQm9vdCIsICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CiAJc3RydWN0IGl4cDIwMDBfZmxhc2hfZGF0YSAqaXhwX2RhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhICpwbGF0OyAKKwlzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSAqcGxhdDsKIAlzdHJ1Y3QgaXhwMjAwMF9mbGFzaF9pbmZvICppbmZvOwogCXVuc2lnbmVkIGxvbmcgd2luZG93X3NpemU7CiAJaW50IGVyciA9IC0xOwotCQorCiAJaWYgKCFpeHBfZGF0YSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTE2Miw3ICsxNjIsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXdpbmRvd19zaXplID0gZGV2LT5yZXNvdXJjZS0+ZW5kIC0gZGV2LT5yZXNvdXJjZS0+c3RhcnQgKyAxOwotCWRldl9pbmZvKF9kZXYsICJQcm9iZSBvZiBJWFAyMDAwIGZsYXNoKCVkIGJhbmtzIHggJWRNaUIpXG4iLCAKKwlkZXZfaW5mbyhfZGV2LCAiUHJvYmUgb2YgSVhQMjAwMCBmbGFzaCglZCBiYW5rcyB4ICVkTWlCKVxuIiwKIAkJCWl4cF9kYXRhLT5ucl9iYW5rcywgKCh1MzIpd2luZG93X3NpemUgPj4gMjApKTsKIAogCWlmIChwbGF0LT53aWR0aCAhPSAxKSB7CkBAIC0xNzUsNyArMTc1LDcgQEAKIAlpZighaW5mbykgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIEVycm9yOwotCX0JCisJfQogCW1lbXplcm8oaW5mbywgc2l6ZW9mKHN0cnVjdCBpeHAyMDAwX2ZsYXNoX2luZm8pKTsKIAogCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGluZm8pOwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJICogbm90IGF0dGVtcHQgdG8gZG8gYSBkaXJlY3QgYWNjZXNzIG9uIHVzLgogCSAqLwogCWluZm8tPm1hcC5waHlzID0gTk9fWElQOwotCQorCiAJaW5mby0+bnJfYmFua3MgPSBpeHBfZGF0YS0+bnJfYmFua3M7CiAJaW5mby0+bWFwLnNpemUgPSBpeHBfZGF0YS0+bnJfYmFua3MgKiB3aW5kb3dfc2l6ZTsKIAlpbmZvLT5tYXAuYmFua3dpZHRoID0gMTsKQEAgLTIwMSw4ICsyMDEsOCBAQAogCWluZm8tPm1hcC5jb3B5X2Zyb20gPSBpeHAyMDAwX2ZsYXNoX2NvcHlfZnJvbTsKIAlpbmZvLT5tYXAuY29weV90byA9IGl4cDIwMDBfZmxhc2hfY29weV90bzsKIAotCWluZm8tPnJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihkZXYtPnJlc291cmNlLT5zdGFydCwgCi0JCQlkZXYtPnJlc291cmNlLT5lbmQgLSBkZXYtPnJlc291cmNlLT5zdGFydCArIDEsIAorCWluZm8tPnJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihkZXYtPnJlc291cmNlLT5zdGFydCwKKwkJCWRldi0+cmVzb3VyY2UtPmVuZCAtIGRldi0+cmVzb3VyY2UtPnN0YXJ0ICsgMSwKIAkJCWRldi0+ZGV2LmJ1c19pZCk7CiAJaWYgKCFpbmZvLT5yZXMpIHsKIAkJZGV2X2VycihfZGV2LCAiQ291bGQgbm90IHJlc2VydmUgbWVtb3J5IHJlZ2lvblxuIik7CkBAIC0yMTAsNyArMjEwLDcgQEAKIAkJZ290byBFcnJvcjsKIAl9CiAKLQlpbmZvLT5tYXAubWFwX3ByaXZfMSA9ICh1bnNpZ25lZCBsb25nKSBpb3JlbWFwKGRldi0+cmVzb3VyY2UtPnN0YXJ0LCAKKwlpbmZvLT5tYXAubWFwX3ByaXZfMSA9ICh1bnNpZ25lZCBsb25nKSBpb3JlbWFwKGRldi0+cmVzb3VyY2UtPnN0YXJ0LAogCQkJICAgIAlkZXYtPnJlc291cmNlLT5lbmQgLSBkZXYtPnJlc291cmNlLT5zdGFydCArIDEpOwogCWlmICghaW5mby0+bWFwLm1hcF9wcml2XzEpIHsKIAkJZGV2X2VycihfZGV2LCAiRmFpbGVkIHRvIGlvcmVtYXAgZmxhc2ggcmVnaW9uXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvaXhwNHh4LmMgYi9kcml2ZXJzL210ZC9tYXBzL2l4cDR4eC5jCmluZGV4IGM1MTBjNzMuLjQ3MTU1M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvaXhwNHh4LmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9peHA0eHguYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAkSWQ6IGl4cDR4eC5jLHYgMS4xMSAyMDA1LzExLzA2IDExOjE1OjUxIGdsZWl4bmVyIEV4cCAkCisgKiAkSWQ6IGl4cDR4eC5jLHYgMS4xMiAyMDA1LzExLzA3IDExOjE0OjI3IGdsZWl4bmVyIEV4cCAkCiAgKgogICogZHJpdmVycy9tdGQvbWFwcy9peHA0eHguYwogICoKQEAgLTcyLDcgKzcyLDcgQEAKIAkJZGVzdFtsZW4gLSAxXSA9IEJZVEUwKGxlMTZfdG9fY3B1KHJlYWR3KHNyYyArIDIqaSkpKTsKIH0KIAotLyogCisvKgogICogVW5hbGlnbmVkIHdyaXRlcyBhcmUgaWdub3JlZCwgY2F1c2luZyB0aGUgOC1iaXQKICAqIHByb2JlIHRvIGZhaWwgYW5kIHByb2NlZWQgdG8gdGhlIDE2LWJpdCBwcm9iZSAod2hpY2ggc3VjY2VlZHMpLgogICovCkBAIC04Miw3ICs4Miw3IEBACiAJCXdyaXRldyhjcHVfdG9fbGUxNihkLnhbMF0pLCBtYXAtPnZpcnQgKyBhZHIpOwogfQogCi0vKiAKKy8qCiAgKiBGYXN0IHdyaXRlMTYgZnVuY3Rpb24gd2l0aG91dCB0aGUgcHJvYmluZyBjaGVjayBhYm92ZQogICovCiBzdGF0aWMgdm9pZCBpeHA0eHhfd3JpdGUxNihzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgbWFwX3dvcmQgZCwgdW5zaWduZWQgbG9uZyBhZHIpCkBAIC0xNTEsNyArMTUxLDcgQEAKIAlpZighaW5mbykgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIEVycm9yOwotCX0JCisJfQogCW1lbXplcm8oaW5mbywgc2l6ZW9mKHN0cnVjdCBpeHA0eHhfZmxhc2hfaW5mbykpOwogCiAJZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgaW5mbyk7CkBAIC0xNzQsOCArMTc0LDggQEAKIAlpbmZvLT5tYXAud3JpdGUgPSBpeHA0eHhfcHJvYmVfd3JpdGUxNiwKIAlpbmZvLT5tYXAuY29weV9mcm9tID0gaXhwNHh4X2NvcHlfZnJvbSwKIAotCWluZm8tPnJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihkZXYtPnJlc291cmNlLT5zdGFydCwgCi0JCQlkZXYtPnJlc291cmNlLT5lbmQgLSBkZXYtPnJlc291cmNlLT5zdGFydCArIDEsIAorCWluZm8tPnJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihkZXYtPnJlc291cmNlLT5zdGFydCwKKwkJCWRldi0+cmVzb3VyY2UtPmVuZCAtIGRldi0+cmVzb3VyY2UtPnN0YXJ0ICsgMSwKIAkJCSJJWFA0WFhGbGFzaCIpOwogCWlmICghaW5mby0+cmVzKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiSVhQNFhYRmxhc2g6IENvdWxkIG5vdCByZXNlcnZlIG1lbW9yeSByZWdpb25cbiIpOwpAQCAtMTk4LDcgKzE5OCw3IEBACiAJCWdvdG8gRXJyb3I7CiAJfQogCWluZm8tPm10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQkKKwogCS8qIFVzZSB0aGUgZmFzdCB2ZXJzaW9uICovCiAJaW5mby0+bWFwLndyaXRlID0gaXhwNHh4X3dyaXRlMTYsCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvbDQ0MGd4LmMgYi9kcml2ZXJzL210ZC9tYXBzL2w0NDBneC5jCmluZGV4IGIwODY2ODIuLjg1MWJmOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvbDQ0MGd4LmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9sNDQwZ3guYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAkSWQ6IGw0NDBneC5jLHYgMS4xNyAyMDA0LzExLzI4IDA5OjQwOjM5IGR3bXcyIEV4cCAkCisgKiAkSWQ6IGw0NDBneC5jLHYgMS4xOCAyMDA1LzExLzA3IDExOjE0OjI3IGdsZWl4bmVyIEV4cCAkCiAgKgogICogQklPUyBGbGFzaCBjaGlwIG9uIEludGVsIDQ0MEdYIGJvYXJkLgogICoKQEAgLTQ5LDcgKzQ5LDcgQEAKIAkuYmFua3dpZHRoID0gQlVTV0lEVEgsCiAJLnBoeXMgPSBXSU5ET1dfQUREUiwKICNpZiAwCi0JLyogRklYTUUgdmVyaWZ5IHRoYXQgdGhpcyBpcyB0aGUgCisJLyogRklYTUUgdmVyaWZ5IHRoYXQgdGhpcyBpcyB0aGUKIAkgKiBhcHByaXByaWF0ZSBjb2RlIGZvciB2cHAgZW5hYmxlL2Rpc2FibGUKIAkgKi8KIAkuc2V0X3ZwcCA9IGw0NDBneF9zZXRfdnBwCkBAIC02MiwxMCArNjIsMTAgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKnBtX2lvYmFzZTsKIAlfX3UxNiB3b3JkOwogCi0JZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsIAorCWRldiA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLAogCQlQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxQUJfMCwgTlVMTCk7CiAKLQlwbV9kZXYgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgCisJcG1fZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCVBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFBQl8zLCBOVUxMKTsKIAogCWlmICghZGV2IHx8ICFwbV9kZXYpIHsKQEAgLTgyLDEwICs4MiwxMCBAQAogCXNpbXBsZV9tYXBfaW5pdCgmbDQ0MGd4X21hcCk7CiAJcHJpbnRrKEtFUk5fTk9USUNFICJ3aW5kb3dfYWRkciA9IDB4JTA4bHhcbiIsICh1bnNpZ25lZCBsb25nKWw0NDBneF9tYXAudmlydCk7CiAKLQkvKiBTZXR1cCB0aGUgcG0gaW9iYXNlIHJlc291cmNlIAorCS8qIFNldHVwIHRoZSBwbSBpb2Jhc2UgcmVzb3VyY2UKIAkgKiBUaGlzIGNvZGUgc2hvdWxkIG1vdmUgaW50byBzb21lIGtpbmQgb2YgZ2VuZXJpYyBicmlkZ2UKIAkgKiBkcml2ZXIgYnV0IGZvciB0aGUgbW9tZW50IEknbSBjb250ZW50IHdpdGggZ2V0dGluZyB0aGUKLQkgKiBhbGxvY2F0aW9uIGNvcnJlY3QuIAorCSAqIGFsbG9jYXRpb24gY29ycmVjdC4KIAkgKi8KIAlwbV9pb2Jhc2UgPSAmcG1fZGV2LT5yZXNvdXJjZVtQSUlYRV9JT0JBU0VfUkVTT1VSQ0VdOwogCWlmICghKHBtX2lvYmFzZS0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSkgewpAQCAtMTEwLDcgKzExMCw3IEBACiAJLyogU2V0IHRoZSBpb2Jhc2UgKi8KIAlpb2Jhc2UgPSBwbV9pb2Jhc2UtPnN0YXJ0OwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQocG1fZGV2LCAweDQwLCBpb2Jhc2UgfCAxKTsKLQkKKwogCiAJLyogU2V0IFhCQ1MjICovCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCAweDRlLCAmd29yZCk7CkBAIC0xMjIsNyArMTIyLDcgQEAKIAogCS8qIEVuYWJsZSB0aGUgZ2F0ZSBvbiB0aGUgV0UgbGluZSAqLwogCW91dGIoaW5iKFRSSUJVRl9QT1JUKSAmIH4xLCBUUklCVUZfUE9SVCk7Ci0JCisKICAgICAgICAJcHJpbnRrKEtFUk5fTk9USUNFICJFbmFibGVkIFdFIGxpbmUgdG8gTDQ0MEdYIEJJT1MgZmxhc2ggY2hpcC5cbiIpOwogCiAJbXltdGQgPSBkb19tYXBfcHJvYmUoImplZGVjX3Byb2JlIiwgJmw0NDBneF9tYXApOwpAQCAtMTQ1LDcgKzE0NSw3IEBACiB7CiAJZGVsX210ZF9kZXZpY2UobXltdGQpOwogCW1hcF9kZXN0cm95KG15bXRkKTsKLQkKKwogCWlvdW5tYXAobDQ0MGd4X21hcC52aXJ0KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9sdWJib2NrLWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL2x1YmJvY2stZmxhc2guYwppbmRleCAyMzM3ZTBjLi4xMGY2ODFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2x1YmJvY2stZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2x1YmJvY2stZmxhc2guYwpAQCAtMSwxMSArMSwxMSBAQAogLyoKLSAqICRJZDogbHViYm9jay1mbGFzaC5jLHYgMS4xOSAyMDA0LzExLzA0IDEzOjI0OjE1IGdsZWl4bmVyIEV4cCAkCisgKiAkSWQ6IGx1YmJvY2stZmxhc2guYyx2IDEuMjEgMjAwNS8xMS8wNyAxMToxNDoyNyBnbGVpeG5lciBFeHAgJAogICoKICAqIE1hcCBkcml2ZXIgZm9yIHRoZSBMdWJib2NrIGRldmVsb3BlciBwbGF0Zm9ybS4KICAqCiAgKiBBdXRob3I6CU5pY29sYXMgUGl0cmUKICAqIENvcHlyaWdodDoJKEMpIDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgpAQCAtNzYsNyArNzYsNyBAQAogCWludCBmbGFzaGJvb3QgPSAoTFVCX0NPTkZfU1dJVENIRVMgJiAxKTsKIAlpbnQgcmV0ID0gMCwgaTsKIAotCWx1YmJvY2tfbWFwc1swXS5iYW5rd2lkdGggPSBsdWJib2NrX21hcHNbMV0uYmFua3dpZHRoID0gCisJbHViYm9ja19tYXBzWzBdLmJhbmt3aWR0aCA9IGx1YmJvY2tfbWFwc1sxXS5iYW5rd2lkdGggPQogCQkoQk9PVF9ERUYgJiAxKSA/IDIgOiA0OwogCiAJLyogQ29tcGVuc2F0ZSBmb3IgdGhlIG5ST01CVCBzd2l0Y2ggd2hpY2ggc3dhcHMgdGhlIGZsYXNoIGJhbmtzICovCkBAIC0xMDAsMTEgKzEwMCwxMSBAQAogCQlzaW1wbGVfbWFwX2luaXQoJmx1YmJvY2tfbWFwc1tpXSk7CiAKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJQcm9iaW5nICVzIGF0IHBoeXNpY2FsIGFkZHJlc3MgMHglMDhseCAoJWQtYml0IGJhbmt3aWR0aClcbiIsCi0JCSAgICAgICBsdWJib2NrX21hcHNbaV0ubmFtZSwgbHViYm9ja19tYXBzW2ldLnBoeXMsIAorCQkgICAgICAgbHViYm9ja19tYXBzW2ldLm5hbWUsIGx1YmJvY2tfbWFwc1tpXS5waHlzLAogCQkgICAgICAgbHViYm9ja19tYXBzW2ldLmJhbmt3aWR0aCAqIDgpOwogCiAJCW15bXRkc1tpXSA9IGRvX21hcF9wcm9iZSgiY2ZpX3Byb2JlIiwgJmx1YmJvY2tfbWFwc1tpXSk7Ci0JCQorCiAJCWlmICghbXltdGRzW2ldKSB7CiAJCQlpb3VubWFwKCh2b2lkICopbHViYm9ja19tYXBzW2ldLnZpcnQpOwogCQkJaWYgKGx1YmJvY2tfbWFwc1tpXS5jYWNoZWQpCkBAIC0xMjQsNyArMTI0LDcgQEAKIAogCWlmICghbXltdGRzWzBdICYmICFteW10ZHNbMV0pCiAJCXJldHVybiByZXQ7Ci0JCisKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCWlmICghbXltdGRzW2ldKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyBpcyBhYnNlbnQuIFNraXBwaW5nXG4iLCBsdWJib2NrX21hcHNbaV0ubmFtZSk7CkBAIC0xNTEsNyArMTUxLDcgQEAKIAkJaWYgKG5yX3BhcnNlZF9wYXJ0c1tpXSB8fCAhaSkKIAkJCWRlbF9tdGRfcGFydGl0aW9ucyhteW10ZHNbaV0pOwogCQllbHNlCi0JCQlkZWxfbXRkX2RldmljZShteW10ZHNbaV0pOwkJCQorCQkJZGVsX210ZF9kZXZpY2UobXltdGRzW2ldKTsKIAogCQltYXBfZGVzdHJveShteW10ZHNbaV0pOwogCQlpb3VubWFwKCh2b2lkICopbHViYm9ja19tYXBzW2ldLnZpcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9tYWluc3RvbmUtZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvbWFpbnN0b25lLWZsYXNoLmMKaW5kZXggZGEwZjhhNi4uZWFhNGJiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9tYWluc3RvbmUtZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL21haW5zdG9uZS1mbGFzaC5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEF1dGhvcjoJTmljb2xhcyBQaXRyZQogICogQ29weXJpZ2h0OgkoQykgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCkBAIC05MSwyNyArOTEsMjcgQEAKIAkJbWFpbnN0b25lX21hcHNbaV0udmlydCA9IGlvcmVtYXAobWFpbnN0b25lX21hcHNbaV0ucGh5cywKIAkJCQkJCSBXSU5ET1dfU0laRSk7CiAJCWlmICghbWFpbnN0b25lX21hcHNbaV0udmlydCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIGlvcmVtYXAgJXNcbiIsIAorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIGlvcmVtYXAgJXNcbiIsCiAJCQkgICAgICAgbWFpbnN0b25lX21hcHNbaV0ubmFtZSk7CiAJCQlpZiAoIXJldCkKIAkJCQlyZXQgPSAtRU5PTUVNOwogCQkJY29udGludWU7CiAJCX0KLQkJbWFpbnN0b25lX21hcHNbaV0uY2FjaGVkID0gCisJCW1haW5zdG9uZV9tYXBzW2ldLmNhY2hlZCA9CiAJCQlpb3JlbWFwX2NhY2hlZChtYWluc3RvbmVfbWFwc1tpXS5waHlzLCBXSU5ET1dfU0laRSk7CiAJCWlmICghbWFpbnN0b25lX21hcHNbaV0uY2FjaGVkKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIGlvcmVtYXAgY2FjaGVkICVzXG4iLAogCQkJICAgICAgIG1haW5zdG9uZV9tYXBzW2ldLm5hbWUpOwogCQlzaW1wbGVfbWFwX2luaXQoJm1haW5zdG9uZV9tYXBzW2ldKTsKIAotCQlwcmludGsoS0VSTl9OT1RJQ0UgCisJCXByaW50ayhLRVJOX05PVElDRQogCQkgICAgICAgIlByb2JpbmcgJXMgYXQgcGh5c2ljYWwgYWRkcmVzcyAweCUwOGx4IgogCQkgICAgICAgIiAoJWQtYml0IGJhbmt3aWR0aClcbiIsCi0JCSAgICAgICBtYWluc3RvbmVfbWFwc1tpXS5uYW1lLCBtYWluc3RvbmVfbWFwc1tpXS5waHlzLCAKKwkJICAgICAgIG1haW5zdG9uZV9tYXBzW2ldLm5hbWUsIG1haW5zdG9uZV9tYXBzW2ldLnBoeXMsCiAJCSAgICAgICBtYWluc3RvbmVfbWFwc1tpXS5iYW5rd2lkdGggKiA4KTsKIAogCQlteW10ZHNbaV0gPSBkb19tYXBfcHJvYmUoImNmaV9wcm9iZSIsICZtYWluc3RvbmVfbWFwc1tpXSk7Ci0JCQorCiAJCWlmICghbXltdGRzW2ldKSB7CiAJCQlpb3VubWFwKCh2b2lkICopbWFpbnN0b25lX21hcHNbaV0udmlydCk7CiAJCQlpZiAobWFpbnN0b25lX21hcHNbaV0uY2FjaGVkKQpAQCAtMTMxLDIxICsxMzEsMjEgQEAKIAogCWlmICghbXltdGRzWzBdICYmICFteW10ZHNbMV0pCiAJCXJldHVybiByZXQ7Ci0JCisKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCWlmICghbXltdGRzW2ldKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyBpcyBhYnNlbnQuIFNraXBwaW5nXG4iLCAKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzIGlzIGFic2VudC4gU2tpcHBpbmdcbiIsCiAJCQkgICAgICAgbWFpbnN0b25lX21hcHNbaV0ubmFtZSk7CiAJCX0gZWxzZSBpZiAobnJfcGFyc2VkX3BhcnRzW2ldKSB7Ci0JCQlhZGRfbXRkX3BhcnRpdGlvbnMobXltdGRzW2ldLCBwYXJzZWRfcGFydHNbaV0sIAorCQkJYWRkX210ZF9wYXJ0aXRpb25zKG15bXRkc1tpXSwgcGFyc2VkX3BhcnRzW2ldLAogCQkJCQkgICBucl9wYXJzZWRfcGFydHNbaV0pOwogCQl9IGVsc2UgaWYgKCFpKSB7CiAJCQlwcmludGsoIlVzaW5nIHN0YXRpYyBwYXJ0aXRpb25zIG9uICVzXG4iLAogCQkJICAgICAgIG1haW5zdG9uZV9tYXBzW2ldLm5hbWUpOwotCQkJYWRkX210ZF9wYXJ0aXRpb25zKG15bXRkc1tpXSwgbWFpbnN0b25lX3BhcnRpdGlvbnMsIAorCQkJYWRkX210ZF9wYXJ0aXRpb25zKG15bXRkc1tpXSwgbWFpbnN0b25lX3BhcnRpdGlvbnMsCiAJCQkJCSAgIEFSUkFZX1NJWkUobWFpbnN0b25lX3BhcnRpdGlvbnMpKTsKIAkJfSBlbHNlIHsKLQkJCXByaW50aygiUmVnaXN0ZXJpbmcgJXMgYXMgd2hvbGUgZGV2aWNlXG4iLCAKKwkJCXByaW50aygiUmVnaXN0ZXJpbmcgJXMgYXMgd2hvbGUgZGV2aWNlXG4iLAogCQkJICAgICAgIG1haW5zdG9uZV9tYXBzW2ldLm5hbWUpOwogCQkJYWRkX210ZF9kZXZpY2UobXltdGRzW2ldKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9tYng4NjAuYyBiL2RyaXZlcnMvbXRkL21hcHMvbWJ4ODYwLmMKaW5kZXggYzVjNjkwMS4uMDZiMTE4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9tYng4NjAuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL21ieDg2MC5jCkBAIC0xLDExICsxLDExIEBACiAvKgotICogJElkOiBtYng4NjAuYyx2IDEuOCAyMDA0LzExLzA0IDEzOjI0OjE1IGdsZWl4bmVyIEV4cCAkCisgKiAkSWQ6IG1ieDg2MC5jLHYgMS45IDIwMDUvMTEvMDcgMTE6MTQ6MjcgZ2xlaXhuZXIgRXhwICQKICAqCiAgKiBIYW5kbGUgbWFwcGluZyBvZiB0aGUgZmxhc2ggb24gTUJYODYwIGJvYXJkcwogICoKICAqIEF1dGhvcjoJQW50b24gVG9kb3JvdgogICogQ29weXJpZ2h0OgkoQykgMjAwMSBFbW5lc3MgVGVjaG5vbG9neQotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KQEAgLTQ2LDcgKzQ2LDcgQEAKIAl7IC5uYW1lID0gIk1CWCBmbGFzaCBBUFBMSUNBVElPTiBwYXJ0aXRpb24iLAogCS5vZmZzZXQgPSAoQk9PVF9QQVJUSVRJT05fU0laRV9LaUIrS0VSTkVMX1BBUlRJVElPTl9TSVpFX0tpQikqMTAyNCB9CiB9OwotCQkJCSAgIAorCiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKm15bXRkOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL210eC0xX2ZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL210eC0xX2ZsYXNoLmMKaW5kZXggNDNmNDQxNi4uZDFlNjZlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9tdHgtMV9mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvbXR4LTFfZmxhc2guYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBGbGFzaCBtZW1vcnkgYWNjZXNzIG9uIDRHIFN5c3RlbXMgTVRYLTEgYm9hcmRzCiAgKgotICogJElkOiBtdHgtMV9mbGFzaC5jLHYgMS4xIDIwMDUvMDkvMTggMTA6NDY6NDEgam9lcm4gRXhwICQKKyAqICRJZDogbXR4LTFfZmxhc2guYyx2IDEuMiAyMDA1LzExLzA3IDExOjE0OjI3IGdsZWl4bmVyIEV4cCAkCiAgKgogICogKEMpIDIwMDUgQnJ1bm8gUmFuZG9sZiA8YnJ1bm8ucmFuZG9sZkA0Zy1zeXN0ZW1zLmJpej4KICAqIChDKSAyMDA1IEr2cm4gRW5nZWwgPGpvZXJuQHdvaG5oZWltLmZoLXdlZGVsLmRlPgpAQCAtNjYsNyArNjYsNyBAQAogCiAJbXR4MV9tdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CiAKLQlyZXQgPSBhZGRfbXRkX3BhcnRpdGlvbnMobXR4MV9tdGQsIG10eDFfcGFydGl0aW9ucywgCisJcmV0ID0gYWRkX210ZF9wYXJ0aXRpb25zKG10eDFfbXRkLCBtdHgxX3BhcnRpdGlvbnMsCiAJCQlBUlJBWV9TSVpFKG10eDFfcGFydGl0aW9ucykpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9uZXRzYzUyMC5jIGIvZHJpdmVycy9tdGQvbWFwcy9uZXRzYzUyMC5jCmluZGV4IGFiN2U2MzUuLjMzMDYwYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvbmV0c2M1MjAuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL25ldHNjNTIwLmMKQEAgLTMsNyArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgTWFyayBMYW5nc2RvcmYgKG1hcmsubGFuZ3Nkb3JmQGFtZC5jb20pCiAgKgliYXNlZCBvbiBzYzUyMGNkcC5jIGJ5IFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMgR21iSAogICoKLSAqICRJZDogbmV0c2M1MjAuYyx2IDEuMTMgMjAwNC8xMS8yOCAwOTo0MDo0MCBkd213MiBFeHAgJAorICogJElkOiBuZXRzYzUyMC5jLHYgMS4xNCAyMDA1LzExLzA3IDExOjE0OjI3IGdsZWl4bmVyIEV4cCAkCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zOCw3ICszOCw3IEBACiAqKiBUaGUgc2luZ2xlLCAxNiBtZWdhYnl0ZSBmbGFzaCBiYW5rIGlzIGRpdmlkZWQgaW50byBmb3VyIHZpcnR1YWwKICoqIHBhcnRpdGlvbnMuICBUaGUgZmlyc3QgcGFydGl0aW9uIGlzIDc2OCBLaUIgYW5kIGlzIGludGVuZGVkIHRvCiAqKiBzdG9yZSB0aGUga2VybmVsIGltYWdlIGxvYWRlZCBieSB0aGUgYm9vdHN0cmFwIGxvYWRlci4gIFRoZSBzZWNvbmQKLSoqIHBhcnRpdGlvbiBpcyAyNTYgS2lCIGFuZCBob2xkcyB0aGUgQklPUyBpbWFnZS4gIFRoZSB0aGlyZCAKKyoqIHBhcnRpdGlvbiBpcyAyNTYgS2lCIGFuZCBob2xkcyB0aGUgQklPUyBpbWFnZS4gIFRoZSB0aGlyZAogKiogcGFydGl0aW9uIGlzIDE0LjUgTWlCIGFuZCBpcyBpbnRlbmRlZCBmb3IgdGhlIGZsYXNoIGZpbGUgc3lzdGVtCiAqKiBpbWFnZS4gIFRoZSBsYXN0IHBhcnRpdGlvbiBpcyA1MTIgS2lCIGFuZCBjb250YWlucyBhbm90aGVyIGNvcHkKICoqIG9mIHRoZSBCSU9TIGltYWdlIGFuZCB0aGUgcmVzZXQgdmVjdG9yLgpAQCAtNTEsMjggKzUxLDI4IEBACiAqKiByZWNvdmVyYWJsZSBhZnRlcndhcmRzLgogKi8KIAotLyogcGFydGl0aW9uX2luZm8gZ2l2ZXMgZGV0YWlscyBvbiB0aGUgbG9naWNhbCBwYXJ0aXRpb25zIHRoYXQgdGhlIHNwbGl0IHRoZSAKKy8qIHBhcnRpdGlvbl9pbmZvIGdpdmVzIGRldGFpbHMgb24gdGhlIGxvZ2ljYWwgcGFydGl0aW9ucyB0aGF0IHRoZSBzcGxpdCB0aGUKICAqIHNpbmdsZSBmbGFzaCBkZXZpY2UgaW50by4gSWYgdGhlIHNpemUgaWYgemVybyB3ZSB1c2UgdXAgdG8gdGhlIGVuZCBvZiB0aGUKICAqIGRldmljZS4gKi8KIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mb1tdPXsKLSAgICB7IAotCSAgICAubmFtZSA9ICJOZXRTYzUyMCBib290IGtlcm5lbCIsIAotCSAgICAub2Zmc2V0ID0gMCwgCisgICAgeworCSAgICAubmFtZSA9ICJOZXRTYzUyMCBib290IGtlcm5lbCIsCisJICAgIC5vZmZzZXQgPSAwLAogCSAgICAuc2l6ZSA9IDB4YzAwMDAKICAgICB9LAotICAgIHsgCi0JICAgIC5uYW1lID0gIk5ldFNjNTIwIExvdyBCSU9TIiwgCi0JICAgIC5vZmZzZXQgPSAweGMwMDAwLCAKKyAgICB7CisJICAgIC5uYW1lID0gIk5ldFNjNTIwIExvdyBCSU9TIiwKKwkgICAgLm9mZnNldCA9IDB4YzAwMDAsCiAJICAgIC5zaXplID0gMHg0MDAwMAogICAgIH0sCi0gICAgeyAKLQkgICAgLm5hbWUgPSAiTmV0U2M1MjAgZmlsZSBzeXN0ZW0iLCAKLQkgICAgLm9mZnNldCA9IDB4MTAwMDAwLCAKKyAgICB7CisJICAgIC5uYW1lID0gIk5ldFNjNTIwIGZpbGUgc3lzdGVtIiwKKwkgICAgLm9mZnNldCA9IDB4MTAwMDAwLAogCSAgICAuc2l6ZSA9IDB4ZTgwMDAwCiAgICAgfSwKLSAgICB7IAotCSAgICAubmFtZSA9ICJOZXRTYzUyMCBIaWdoIEJJT1MiLCAKLQkgICAgLm9mZnNldCA9IDB4ZjgwMDAwLCAKKyAgICB7CisJICAgIC5uYW1lID0gIk5ldFNjNTIwIEhpZ2ggQklPUyIsCisJICAgIC5vZmZzZXQgPSAweGY4MDAwMCwKIAkgICAgLnNpemUgPSAweDgwMDAwCiAgICAgfSwKIH07CkBAIC0xMTQsNyArMTE0LDcgQEAKIAkJaW91bm1hcChuZXRzYzUyMF9tYXAudmlydCk7CiAJCXJldHVybiAtRU5YSU87CiAJfQotCQkKKwogCW15bXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwogCWFkZF9tdGRfcGFydGl0aW9ucyggbXltdGQsIHBhcnRpdGlvbl9pbmZvLCBOVU1fUEFSVElUSU9OUyApOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9uZXR0ZWwuYyBiL2RyaXZlcnMvbXRkL21hcHMvbmV0dGVsLmMKaW5kZXggNjFiZTVhNC4uZjAwZWU3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9uZXR0ZWwuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL25ldHRlbC5jCkBAIC02LDcgKzYsNyBAQAogICogICAgICAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMSwgR3JlZyBVbmdlcmVyIChnZXJnQHNuYXBnZWFyLmNvbSkKICAqICAgICAgKEMpIENvcHlyaWdodCAyMDAxLTIwMDIsIFNuYXBHZWFyICh3d3cuc25hcGdlYXIuY29tKQogICoKLSAqCSRJZDogbmV0dGVsLmMsdiAxLjEwIDIwMDUvMDEvMDUgMTc6MTE6MjkgZHdtdzIgRXhwICQKKyAqCSRJZDogbmV0dGVsLmMsdiAxLjExIDIwMDUvMTEvMDcgMTE6MTQ6MjcgZ2xlaXhuZXIgRXhwICQKICAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE0Myw3ICsxNDMsNyBAQAogewogCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpID0gbmV0dGVsX2ludGVsX21hcC5mbGRydl9wcml2OwogCXVuc2lnbmVkIGxvbmcgYjsKLQkKKwogCS8qIE1ha2Ugc3VyZSBhbGwgRkxBU0ggY2hpcHMgYXJlIHB1dCBiYWNrIGludG8gcmVhZCBtb2RlICovCiAJZm9yIChiID0gMDsgKGIgPCBuZXR0ZWxfaW50ZWxfcGFydGl0aW9uc1szXS5zaXplKTsgYiArPSAweDEwMDAwMCkgewogCQljZmlfc2VuZF9nZW5fY21kKDB4ZmYsIDB4NTUsIGIsICZuZXR0ZWxfaW50ZWxfbWFwLCBjZmksCkBAIC0xOTksNyArMTk5LDcgQEAKIAogCQlzY2hlZHVsZSgpOyAgLyogV2FpdCBmb3IgZXJhc2UgdG8gZmluaXNoLiAqLwogCQlyZW1vdmVfd2FpdF9xdWV1ZSgmd2FpdF9xLCAmd2FpdCk7Ci0JCQorCiAJCXB1dF9tdGRfZGV2aWNlKG10ZCk7CiAJfQogCkBAIC00MzAsNyArNDMwLDcgQEAKIAkJbmV0dGVsX2ludGVsX3BhcnRpdGlvbnNbMV0uc2l6ZSA9IChpbnRlbDBzaXplICsgaW50ZWwxc2l6ZSkgLQogCQkJKDEwMjQqMTAyNCArIGludGVsX210ZC0+ZXJhc2VzaXplKTsKIAkJbmV0dGVsX2ludGVsX3BhcnRpdGlvbnNbM10uc2l6ZSA9IGludGVsMHNpemUgKyBpbnRlbDFzaXplOwotCQluZXR0ZWxfaW50ZWxfcGFydGl0aW9uc1s0XS5vZmZzZXQgPSAKKwkJbmV0dGVsX2ludGVsX3BhcnRpdGlvbnNbNF0ub2Zmc2V0ID0KIAkJCShpbnRlbDBzaXplICsgaW50ZWwxc2l6ZSkgLSBpbnRlbF9tdGQtPmVyYXNlc2l6ZTsKIAkJbmV0dGVsX2ludGVsX3BhcnRpdGlvbnNbNF0uc2l6ZSA9IGludGVsX210ZC0+ZXJhc2VzaXplOwogCQluZXR0ZWxfaW50ZWxfcGFydGl0aW9uc1s1XS5vZmZzZXQgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9vY2Vsb3QuYyBiL2RyaXZlcnMvbXRkL21hcHMvb2NlbG90LmMKaW5kZXggODJjMzA3MC4uNjk3Nzk2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9vY2Vsb3QuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL29jZWxvdC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICRJZDogb2NlbG90LmMsdiAxLjE2IDIwMDUvMDEvMDUgMTg6MDU6MTMgZHdtdzIgRXhwICQKKyAqICRJZDogb2NlbG90LmMsdiAxLjE3IDIwMDUvMTEvMDcgMTE6MTQ6MjcgZ2xlaXhuZXIgRXhwICQKICAqCiAgKiBGbGFzaCBvbiBNb21lbmNvIE9jZWxvdAogICovCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgIHN0cnVjdCBtYXBfaW5mbyAqbWFwID0gbXRkLT5wcml2OwogCXNpemVfdCBkb25lID0gMDsKIAotCS8qIElmIHdlIHVzZSBtZW1jcHksIGl0IGRvZXMgd29yZC13aWRlIHdyaXRlcy4gRXZlbiB0aG91Z2ggd2UgdG9sZCB0aGUgCisJLyogSWYgd2UgdXNlIG1lbWNweSwgaXQgZG9lcyB3b3JkLXdpZGUgd3JpdGVzLiBFdmVuIHRob3VnaCB3ZSB0b2xkIHRoZQogCSAgIEdUNjQxMjBBIHRoYXQgaXQncyBhbiA4LWJpdCB3aWRlIHJlZ2lvbiwgd29yZC13aWRlIHdyaXRlcyBkb24ndCB3b3JrLgogCSAgIFdlIGVuZCB1cCBqdXN0IHdyaXRpbmcgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGZvdXIgdG8gYWxsIGZvdXIgYnl0ZXMuCiAJICAgU28gd2UgaGF2ZSB0aGlzIGxvb3AgaW5zdGVhZCAqLwpAQCAtNjgsNyArNjgsNyBAQAogCWludCBucl9wYXJ0czsKIAl1bnNpZ25lZCBjaGFyIGJyZF9zdGF0dXM7CiAKLSAgICAgICAJcHJpbnRrKEtFUk5fSU5GTyAiTW9tZW5jbyBPY2Vsb3QgTVREIG1hcHBpbmdzOiBGbGFzaCAweCV4IGF0IDB4JXgsIE5WUkFNIDB4JXggYXQgMHgleFxuIiwgCisgICAgICAgCXByaW50ayhLRVJOX0lORk8gIk1vbWVuY28gT2NlbG90IE1URCBtYXBwaW5nczogRmxhc2ggMHgleCBhdCAweCV4LCBOVlJBTSAweCV4IGF0IDB4JXhcbiIsCiAJICAgICAgIEZMQVNIX1dJTkRPV19TSVpFLCBGTEFTSF9XSU5ET1dfQUREUiwgTlZSQU1fV0lORE9XX1NJWkUsIE5WUkFNX1dJTkRPV19BRERSKTsKIAogCS8qIEZpcnN0IGNoZWNrIHdoZXRoZXIgdGhlIGZsYXNoIGp1bXBlciBpcyBwcmVzZW50ICovCkBAIC0xMzgsOCArMTM4LDggQEAKIAkJYWRkX210ZF9kZXZpY2UoZmxhc2hfbXRkKTsKIAogCXJldHVybiAwOwotCQotIGZhaWwzOgkKKworIGZhaWwzOgogCWlvdW5tYXAoKHZvaWQgKilvY2Vsb3RfZmxhc2hfbWFwLnZpcnQpOwogCWlmIChvY2Vsb3RfZmxhc2hfbWFwLmNhY2hlZCkKIAkJCWlvdW5tYXAoKHZvaWQgKilvY2Vsb3RfZmxhc2hfbWFwLmNhY2hlZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL29jdGFnb24tNTA2Ni5jIGIvZHJpdmVycy9tdGQvbWFwcy9vY3RhZ29uLTUwNjYuYwppbmRleCBlNWZmODNkLi5hNjY0MmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL29jdGFnb24tNTA2Ni5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvb2N0YWdvbi01MDY2LmMKQEAgLTEsMTIgKzEsMTIgQEAKLS8vICRJZDogb2N0YWdvbi01MDY2LmMsdiAxLjI2IDIwMDQvMDcvMTIgMjI6Mzg6MjkgZHdtdzIgRXhwICQKKy8vICRJZDogb2N0YWdvbi01MDY2LmMsdiAxLjI4IDIwMDUvMTEvMDcgMTE6MTQ6MjcgZ2xlaXhuZXIgRXhwICQKIC8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotICAgT2N0YWdvbiA1MDY2IE1URCBEcml2ZXIuIAotICAKKyAgIE9jdGFnb24gNTA2NiBNVEQgRHJpdmVyLgorCiAgICBUaGUgT2N0YWdvbiA1MDY2IGlzIGEgU0JDIGJhc2VkIG9uIEFNRCdzIDU4Ni1XQiBydW5uaW5nIGF0IDEzMyBNSFouIEl0CiAgICBjb21lcyB3aXRoIGEgYnVpbHRpbiBBTUQgMjlGMDE2IGZsYXNoIGNoaXAgYW5kIGEgc29ja2V0ZWQgRUVQUk9NIHRoYXQKICAgIGlzIHJlcGxhY2FibGUgYnkgZmxhc2guIEJvdGggdW5pdHMgYXJlIG1hcHBlZCB0aHJvdWdoIGEgbXVsdGlwbGV4ZXIKLSAgIGludG8gYSAzMmsgbWVtb3J5IHdpbmRvdyBhdCAweGU4MDAwLiBUaGUgY29udHJvbCByZWdpc3RlciBmb3IgdGhlIAorICAgaW50byBhIDMyayBtZW1vcnkgd2luZG93IGF0IDB4ZTgwMDAuIFRoZSBjb250cm9sIHJlZ2lzdGVyIGZvciB0aGUKICAgIG11bHRpcGxleGluZyB1bml0IGlzIGxvY2F0ZWQgYXQgSU8gMHgyMDggd2l0aCBhIGJpdCBtYXAgb2YKICAgICAgMC01IFBhZ2UgU2VsZWN0aW9uIGluIDMyayBpbmNyZW1lbnRzCiAgICAgIDYtNyBEZXZpY2Ugc2VsZWN0aW9uOgpAQCAtMTQsMTQgKzE0LDE0IEBACiAgICAgICAgIDAxIFNTRCAwIChTb2NrZXQpCiAgICAgICAgIDEwIFNTRCAxIChGbGFzaCBjaGlwKQogICAgICAgICAxMSB1bmRlZmluZWQKLSAgCisKICAgIE9uIGVhY2ggU1NELCB0aGUgZmlyc3QgMTI4ayBpcyByZXNlcnZlZCBmb3IgdXNlIGJ5IHRoZSBiaW9zCi0gICAoYWN0dWFsbHkgaXQgSVMgdGhlIGJpb3MuLikgVGhpcyBvbmx5IG1hdHRlcnMgaWYgeW91IGFyZSBib290aW5nIG9mZiB0aGUgCisgICAoYWN0dWFsbHkgaXQgSVMgdGhlIGJpb3MuLikgVGhpcyBvbmx5IG1hdHRlcnMgaWYgeW91IGFyZSBib290aW5nIG9mZiB0aGUKICAgIGZsYXNoLCB5b3UgbXVzdCBub3QgcHV0IGEgZmlsZSBzeXN0ZW0gc3RhcnRpbmcgdGhlcmUuCi0gICAKKwogICAgVGhlIGRyaXZlciB0cmllcyB0byBkbyBhIGRldGVjdGlvbiBhbGdvcml0aG0gdG8gZ3Vlc3Mgd2hhdCBzb3J0IG9mIGRldmljZXMKICAgIGFyZSBwbHVnZ2VkIGludG8gdGhlIHNvY2tldHMuCi0gICAKKwogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTU2LDcgKzU2LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvY3Q1MDY2X3BhZ2Uoc3RydWN0IG1hcF9pbmZvICptYXAsIHVuc2lnbmVkIGxvbmcgb2ZzKQogewogCV9fdTggYnl0ZSA9IG1hcC0+bWFwX3ByaXZfMSB8IChvZnMgPj4gV0lORE9XX1NISUZUKTsKLQkKKwogCWlmIChwYWdlX25fZGV2ICE9IGJ5dGUpCiAJCV9fb2N0NTA2Nl9wYWdlKG1hcCwgYnl0ZSk7CiB9CkBAIC03OCw3ICs3OCw3IEBACiAJCXVuc2lnbmVkIGxvbmcgdGhpc2xlbiA9IGxlbjsKIAkJaWYgKGxlbiA+IChXSU5ET1dfTEVOR1RIIC0gKGZyb20gJiBXSU5ET1dfTUFTSykpKQogCQkJdGhpc2xlbiA9IFdJTkRPV19MRU5HVEgtKGZyb20gJiBXSU5ET1dfTUFTSyk7Ci0JCQorCiAJCXNwaW5fbG9jaygmb2N0NTA2Nl9zcGluKTsKIAkJb2N0NTA2Nl9wYWdlKG1hcCwgZnJvbSk7CiAJCW1lbWNweV9mcm9taW8odG8sIGlvbWFwYWRyICsgZnJvbSwgdGhpc2xlbik7CkBAIC0xMDMsNyArMTAzLDcgQEAKIAkJdW5zaWduZWQgbG9uZyB0aGlzbGVuID0gbGVuOwogCQlpZiAobGVuID4gKFdJTkRPV19MRU5HVEggLSAodG8gJiBXSU5ET1dfTUFTSykpKQogCQkJdGhpc2xlbiA9IFdJTkRPV19MRU5HVEgtKHRvICYgV0lORE9XX01BU0spOwotCQkKKwogCQlzcGluX2xvY2soJm9jdDUwNjZfc3Bpbik7CiAJCW9jdDUwNjZfcGFnZShtYXAsIHRvKTsKIAkJbWVtY3B5X3RvaW8oaW9tYXBhZHIgKyB0bywgZnJvbSwgdGhpc2xlbik7CkBAIC0xNDQsNyArMTQ0LDcgQEAKIC8vIE9jdFByb2JlIC0gU2Vuc2UgaWYgdGhpcyBpcyBhbiBvY3RhZ29uIGNhcmQKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLyogUGVyZm9ybSBhIHNpbXBsZSB2YWxpZGl0eSB0ZXN0LCB3ZSBtYXAgdGhlIHdpbmRvdyBzZWxlY3QgU1NEMCBhbmQKLSAgIGNoYW5nZSBwYWdlcyB3aGlsZSBtb25pdG9yaW5nIHRoZSB3aW5kb3cuIEEgY2hhbmdlIGluIHRoZSB3aW5kb3csIAorICAgY2hhbmdlIHBhZ2VzIHdoaWxlIG1vbml0b3JpbmcgdGhlIHdpbmRvdy4gQSBjaGFuZ2UgaW4gdGhlIHdpbmRvdywKICAgIGNvbnRyb2xsZWQgYnkgdGhlIFBBR0VfSU8gcG9ydCBpcyBhIGZ1bmN0aW9uaW5nIDUwNjYgYm9hcmQuIFRoaXMgd2lsbAogICAgZmFpbCBpZiB0aGUgdGhpbmcgaW4gdGhlIHNvY2tldCBpcyBzZXQgdG8gYSB1bmlmb3JtIHZhbHVlLiAqLwogc3RhdGljIGludCBfX2luaXQgT2N0UHJvYmUodm9pZCkKQEAgLTE2MSwxMyArMTYxLDEzIEBACiAJIFZhbHVlc1tJJTEwXSA9IHJlYWRsKGlvbWFwYWRyKTsKIAkgaWYgKEkgPiAwICYmIFZhbHVlc1tJJTEwXSA9PSBWYWx1ZXNbMF0pCiAJICAgIHJldHVybiAtRUFHQUlOOwotICAgICAgfSAgICAgIAorICAgICAgfQogICAgICAgZWxzZQogICAgICAgewogCSAvLyBNYWtlIHN1cmUgd2UgZ2V0IHRoZSBzYW1lIHZhbHVlcyBvbiB0aGUgc2Vjb25kIHBhc3MKIAkgaWYgKFZhbHVlc1tJJTEwXSAhPSByZWFkbChpb21hcGFkcikpCiAJICAgIHJldHVybiAtRUFHQUlOOwotICAgICAgfSAgICAgIAorICAgICAgfQogICAgfQogICAgcmV0dXJuIDA7CiB9CkBAIC0yMDcsMTEgKzIwNywxMSBAQAogCQlyZXQgPSAtRUFHQUlOOwogCQlnb3RvIG91dF91bm1hcDsKIAl9Ci0gICAgICAJCisKIAkvLyBQcmludCBvdXQgb3VyIGxpdHRsZSBoZWFkZXIuLgogCXByaW50aygiT2N0YWdvbiA1MDY2IFNTRCBJTzoweCV4IE1FTToweCV4LTB4JXhcbiIsUEFHRV9JTyxXSU5ET1dfU1RBUlQsCiAJICAgICAgIFdJTkRPV19TVEFSVCtXSU5ET1dfTEVOR1RIKTsKLQkKKwogCWZvciAoaT0wOyBpPDI7IGkrKykgewogCQlvY3Q1MDY2X210ZFtpXSA9IGRvX21hcF9wcm9iZSgiY2ZpX3Byb2JlIiwgJm9jdDUwNjZfbWFwW2ldKTsKIAkJaWYgKCFvY3Q1MDY2X210ZFtpXSkKQEAgLTIyNSwxMSArMjI1LDExIEBACiAJCQlhZGRfbXRkX2RldmljZShvY3Q1MDY2X210ZFtpXSk7CiAJCX0KIAl9Ci0JCisKIAlpZiAoIW9jdDUwNjZfbXRkWzBdICYmICFvY3Q1MDY2X210ZFsxXSkgewogCQljbGVhbnVwX29jdDUwNjYoKTsKIAkJcmV0dXJuIC1FTlhJTzsKLQl9CSAgCisJfQogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvb21hcC10b3RvLWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL29tYXAtdG90by1mbGFzaC5jCmluZGV4IGRhMzZlOGQuLmE4OGVkNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvb21hcC10b3RvLWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9vbWFwLXRvdG8tZmxhc2guYwpAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiAgKEMpIDIwMDIgTW9udFZpc3RhIFNvZnR3YXJlLCBJbmMuCiAgKgotICogJElkOiBvbWFwLXRvdG8tZmxhc2guYyx2IDEuMyAyMDA0LzA5LzE2IDIzOjI3OjEzIGdsZWl4bmVyIEV4cCAkCisgKiAkSWQ6IG9tYXAtdG90by1mbGFzaC5jLHYgMS41IDIwMDUvMTEvMDcgMTE6MTQ6MjcgZ2xlaXhuZXIgRXhwICQKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC0zOCw3ICszOCw3IEBACiAJLnZpcnQgPQkJKHZvaWQgX19pb21lbSAqKU9NQVBfVE9UT19GTEFTSF9CQVNFLAogfTsKIAotIAorCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gdG90b19mbGFzaF9wYXJ0aXRpb25zW10gPSB7CiAJewogCQkubmFtZSA9CQkiQm9vdExvYWRlciIsCkBAIC01NCwyMSArNTQsMjEgQEAKIAkJLm5hbWUgPQkJIkVudkFyZWEiLCAgICAgIC8qIGJvdHRvbSA2NEtpQiBmb3IgZW52IHZhcnMgKi8KIAkJLnNpemUgPQkJTVREUEFSVF9TSVpfRlVMTCwKIAkJLm9mZnNldCA9CU1URFBBUlRfT0ZTX0FQUEVORCwKLQl9IAorCX0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFyc2VkX3BhcnRzOwogCiBzdGF0aWMgc3RydWN0IG10ZF9pbmZvICpmbGFzaF9tdGQ7Ci0gCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X2ZsYXNoICh2b2lkKSAgIAorCitzdGF0aWMgaW50IF9faW5pdCBpbml0X2ZsYXNoICh2b2lkKQogewogCiAJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOwogCWludCBuYl9wYXJ0cyA9IDA7CiAJaW50IHBhcnNlZF9ucl9wYXJ0cyA9IDA7CiAJY29uc3QgY2hhciAqcGFydF90eXBlOwotIAorCiAJLyoKIAkgKiBTdGF0aWMgcGFydGl0aW9uIGRlZmluaXRpb24gc2VsZWN0aW9uCiAJICovCkBAIC04OSw3ICs4OSw3IEBACiAJZmxhc2hfbXRkID0gZG9fbWFwX3Byb2JlKCJqZWRlY19wcm9iZSIsICZvbWFwX3RvdG9fbWFwX2ZsYXNoKTsKIAlpZiAoIWZsYXNoX210ZCkKIAkJcmV0dXJuIC1FTlhJTzsKLSAKKwogIAlpZiAocGFyc2VkX25yX3BhcnRzID4gMCkgewogCQlwYXJ0cyA9IHBhcnNlZF9wYXJ0czsKIAkJbmJfcGFydHMgPSBwYXJzZWRfbnJfcGFydHM7CkBAIC0xMDgsOCArMTA4LDggQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci0gCi1pbnQgX19pbml0IG9tYXBfdG90b19tdGRfaW5pdCh2b2lkKSAgCisKK2ludCBfX2luaXQgb21hcF90b3RvX210ZF9pbml0KHZvaWQpCiB7CiAJaW50IHN0YXR1czsKIApAQCAtMTE5LDcgKzExOSw3IEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIHZvaWQgIF9fZXhpdCBvbWFwX3RvdG9fbXRkX2NsZWFudXAodm9pZCkgIAorc3RhdGljIHZvaWQgIF9fZXhpdCBvbWFwX3RvdG9fbXRkX2NsZWFudXAodm9pZCkKIHsKIAlpZiAoZmxhc2hfbXRkKSB7CiAJCWRlbF9tdGRfcGFydGl0aW9ucyhmbGFzaF9tdGQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9vbWFwX25vci5jIGIvZHJpdmVycy9tdGQvbWFwcy9vbWFwX25vci5jCmluZGV4IDdmMzcwYmIuLmZkM2I0YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvb21hcF9ub3IuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL29tYXBfbm9yLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBUZXhhcyBJbnN0cnVtZW50cwotICogQ29weXJpZ2h0IChDKSAyMDA0IE5va2lhIENvcnBvcmF0aW9uIAorICogQ29weXJpZ2h0IChDKSAyMDA0IE5va2lhIENvcnBvcmF0aW9uCiAgKgogICoJQXNzZW1ibGVkIHVzaW5nIGRyaXZlciBjb2RlIGNvcHlyaWdodCB0aGUgY29tcGFuaWVzIGFib3ZlCiAgKglhbmQgd3JpdHRlbiBieSBEYXZpZCBCcm93bmVsbCwgSmlhbiBaaGFuZyA8anpoYW5nQHRpLmNvbT4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3BjaS5jIGIvZHJpdmVycy9tdGQvbWFwcy9wY2kuYwppbmRleCBkOWM2NGU5Li44YjM1NzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3BjaS5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcGNpLmMKQEAgLTcsOCArNyw4IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgotICogICRJZDogcGNpLmMsdiAxLjEwIDIwMDUvMDMvMTggMTQ6MDQ6MzUgZ2xlaXhuZXIgRXhwICQKLSAqIAorICogICRJZDogcGNpLmMsdiAxLjEzIDIwMDUvMTEvMDcgMTE6MTQ6MjcgZ2xlaXhuZXIgRXhwICQKKyAqCiAgKiBHZW5lcmljIFBDSSBtZW1vcnkgbWFwIGRyaXZlci4gIFdlIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBib2FyZHM6CiAgKiAgLSBJbnRlbCBJUTgwMzEwIEFUVS4KICAqICAtIEludGVsIEVCU0EyODUgKGJsYW5rIHJvbSBwcm9ncmFtbWluZyBtb2RlKS4gVGVzdGVkIHdvcmtpbmcgMjcvMDkvMjAwMQpAQCAtMzgsNyArMzgsNyBAQAogCXZvaWQgKCpleGl0KShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgbWFwX3BjaV9pbmZvICptYXApOwogCXVuc2lnbmVkIGxvbmcgKCp0cmFuc2xhdGUpKHN0cnVjdCBtYXBfcGNpX2luZm8gKm1hcCwgdW5zaWduZWQgbG9uZyBvZnMpOwogCXN0cnVjdCBwY2lfZGV2ICpkZXY7Ci19OwkKK307CiAKIHN0YXRpYyBtYXBfd29yZCBtdGRfcGNpX3JlYWQ4KHN0cnVjdCBtYXBfaW5mbyAqX21hcCwgdW5zaWduZWQgbG9uZyBvZnMpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3BjbWNpYW10ZC5jIGIvZHJpdmVycy9tdGQvbWFwcy9wY21jaWFtdGQuYwppbmRleCBmZjdjNTBkLi5hZjI0MjE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3BjbWNpYW10ZC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcGNtY2lhbXRkLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogJElkOiBwY21jaWFtdGQuYyx2IDEuNTEgMjAwNC8wNy8xMiAyMjozODoyOSBkd213MiBFeHAgJAorICogJElkOiBwY21jaWFtdGQuYyx2IDEuNTUgMjAwNS8xMS8wNyAxMToxNDoyOCBnbGVpeG5lciBFeHAgJAogICoKICAqIHBjbWNpYW10ZC5jIC0gTVREIGRyaXZlciBmb3IgUENNQ0lBIGZsYXNoIG1lbW9yeSBjYXJkcwogICoKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogCiAjZGVmaW5lIERSSVZFUl9ERVNDCSJQQ01DSUEgRmxhc2ggbWVtb3J5IGNhcmQgZHJpdmVyIgotI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiJFJldmlzaW9uOiAxLjUxICQiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIkUmV2aXNpb246IDEuNTUgJCIKIAogLyogU2l6ZSBvZiB0aGUgUENNQ0lBIGFkZHJlc3Mgc3BhY2U6IDI2IGJpdHMgPSA2NCBNQiAqLwogI2RlZmluZSBNQVhfUENNQ0lBX0FERFIJMHg0MDAwMDAwCkBAIC0xNzYsNyArMTc2LDcgQEAKIAogCQlpZih0b3JlYWQgPiBsZW4pCiAJCQl0b3JlYWQgPSBsZW47Ci0JCQorCiAJCWFkZHIgPSByZW1hcF93aW5kb3cobWFwLCBmcm9tKTsKIAkJaWYoIWFkZHIpCiAJCQlyZXR1cm47CkBAIC0zODYsNyArMzg2LDcgQEAKIAkJCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUGFyc2VUdXBsZSwgcmMpOwogCQkJYnJlYWs7CiAJCX0KLQkJCisKIAkJc3dpdGNoKHR1cGxlLlR1cGxlQ29kZSkgewogCQljYXNlICBDSVNUUExfRk9STUFUOiB7CiAJCQljaXN0cGxfZm9ybWF0X3QgKnQgPSAmcGFyc2UuZm9ybWF0OwpAQCAtMzk0LDkgKzM5NCw5IEBACiAJCQlERUJVRygyLCAiRm9ybWF0IHR5cGU6ICV1LCBFcnJvciBEZXRlY3Rpb246ICV1LCBvZmZzZXQgPSAldSwgbGVuZ3RoID0ldSIsCiAJCQkgICAgICB0LT50eXBlLCB0LT5lZGMsIHQtPm9mZnNldCwgdC0+bGVuZ3RoKTsKIAkJCWJyZWFrOwotCQkJCisKIAkJfQotCQkJCisKIAkJY2FzZSBDSVNUUExfREVWSUNFOiB7CiAJCQljaXN0cGxfZGV2aWNlX3QgKnQgPSAmcGFyc2UuZGV2aWNlOwogCQkJaW50IGk7CkBAIC00MTAsNyArNDEwLDcgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQl9Ci0JCQkKKwogCQljYXNlIENJU1RQTF9WRVJTXzE6IHsKIAkJCWNpc3RwbF92ZXJzXzFfdCAqdCA9ICZwYXJzZS52ZXJzaW9uXzE7CiAJCQlpbnQgaTsKQEAgLTQyNSw3ICs0MjUsNyBAQAogCQkJREVCVUcoMiwgIkZvdW5kIG5hbWU6ICVzIiwgZGV2LT5tdGRfbmFtZSk7CiAJCQlicmVhazsKIAkJfQotCQkJCisKIAkJY2FzZSBDSVNUUExfSkVERUNfQzogewogCQkJY2lzdHBsX2plZGVjX3QgKnQgPSAmcGFyc2UuamVkZWM7CiAJCQlpbnQgaTsKQEAgLTQzNCw3ICs0MzQsNyBAQAogCQkJfQogCQkJYnJlYWs7CiAJCX0KLQkJCQorCiAJCWNhc2UgQ0lTVFBMX0RFVklDRV9HRU86IHsKIAkJCWNpc3RwbF9kZXZpY2VfZ2VvX3QgKnQgPSAmcGFyc2UuZGV2aWNlX2dlbzsKIAkJCWludCBpOwpAQCAtNDQ5LDExICs0NDksMTEgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQl9Ci0JCQkKKwogCQlkZWZhdWx0OgogCQkJREVCVUcoMiwgIlVua25vd24gdHVwbGUgY29kZSAlZCIsIHR1cGxlLlR1cGxlQ29kZSk7CiAJCX0KLQkJCisKIAkJcmMgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluay0+aGFuZGxlLCAmdHVwbGUpOwogCX0KIAlpZighZGV2LT5wY21jaWFfbWFwLnNpemUpCkBAIC00NzAsNyArNDcwLDcgQEAKIAlpZihiYW5rd2lkdGgpIHsKIAkJZGV2LT5wY21jaWFfbWFwLmJhbmt3aWR0aCA9IGJhbmt3aWR0aDsKIAkJREVCVUcoMiwgImJhbmt3aWR0aCBmb3JjZWQgdG8gJWQiLCBiYW5rd2lkdGgpOwotCX0JCQorCX0KIAogCWRldi0+cGNtY2lhX21hcC5uYW1lID0gZGV2LT5tdGRfbmFtZTsKIAlpZighZGV2LT5tdGRfbmFtZVswXSkgewpAQCAtNTY4LDcgKzU2OCw3IEBACiAJCXJldHVybjsKIAl9CiAJREVCVUcoMSwgIkFsbG9jYXRlZCBhIHdpbmRvdyBvZiAlZEtpQiIsIGRldi0+d2luX3NpemUgPj4gMTApOwotCQkKKwogCS8qIEdldCB3cml0ZSBwcm90ZWN0IHN0YXR1cyAqLwogCUNTX0NIRUNLKEdldFN0YXR1cywgcGNtY2lhX2dldF9zdGF0dXMobGluay0+aGFuZGxlLCAmc3RhdHVzKSk7CiAJREVCVUcoMiwgInN0YXR1cyB2YWx1ZTogMHgleCB3aW5kb3cgaGFuZGxlID0gMHglOC44bHgiLApAQCAtNjI0LDExICs2MjQsMTEgQEAKIAkJCW10ZCA9IGRvX21hcF9wcm9iZShwcm9iZXNbaV0sICZkZXYtPnBjbWNpYV9tYXApOwogCQkJaWYobXRkKQogCQkJCWJyZWFrOwotCQkJCisKIAkJCURFQlVHKDEsICJGQUlMRUQ6ICVzIiwgcHJvYmVzW2ldKTsKIAkJfQogCX0KLQkKKwogCWlmKCFtdGQpIHsKIAkJREVCVUcoMSwgIkNhbnQgZmluZCBhbiBNVEQiKTsKIAkJcGNtY2lhbXRkX3JlbGVhc2UobGluayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXAuYyBiL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcC5jCmluZGV4IGI4NTM2NzAuLjllZTc2MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICRJZDogcGh5c21hcC5jLHYgMS4zNyAyMDA0LzExLzI4IDA5OjQwOjQwIGR3bXcyIEV4cCAkCisgKiAkSWQ6IHBoeXNtYXAuYyx2IDEuMzggMjAwNS8xMS8wNyAxMToxNDoyOCBnbGVpeG5lciBFeHAgJAogICoKICAqIE5vcm1hbCBtYXBwaW5ncyBvZiBjaGlwcyBpbiBwaHlzaWNhbCBtZW1vcnkKICAqCkBAIC02OSw3ICs2OSw3IEBACiAJCW15bXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCi0JCW10ZF9wYXJ0c19uYiA9IHBhcnNlX210ZF9wYXJ0aXRpb25zKG15bXRkLCBwYXJ0X3Byb2JlcywgCisJCW10ZF9wYXJ0c19uYiA9IHBhcnNlX210ZF9wYXJ0aXRpb25zKG15bXRkLCBwYXJ0X3Byb2JlcywKIAkJCQkJCSAgICAmbXRkX3BhcnRzLCAwKTsKIAogCQlpZiAobXRkX3BhcnRzX25iID4gMCkKQEAgLTc4LDkgKzc4LDkgQEAKIAkJCXJldHVybiAwOwogCQl9CiAKLQkJaWYgKG51bV9waHlzbWFwX3BhcnRpdGlvbnMgIT0gMCkgCisJCWlmIChudW1fcGh5c21hcF9wYXJ0aXRpb25zICE9IDApCiAJCXsKLQkJCXByaW50ayhLRVJOX05PVElDRSAKKwkJCXByaW50ayhLRVJOX05PVElDRQogCQkJICAgICAgICJVc2luZyBwaHlzbWFwIHBhcnRpdGlvbiBkZWZpbml0aW9uXG4iKTsKIAkJCWFkZF9tdGRfcGFydGl0aW9ucyAobXltdGQsIHBoeXNtYXBfcGFydGl0aW9ucywgbnVtX3BoeXNtYXBfcGFydGl0aW9ucyk7CiAJCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcGxhdC1yYW0uYyBiL2RyaXZlcnMvbXRkL21hcHMvcGxhdC1yYW0uYwppbmRleCBlMzVhMWM0Li5hMDJlZWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3BsYXQtcmFtLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9wbGF0LXJhbS5jCkBAIC02LDcgKzYsNyBAQAogICoKICAqIEdlbmVyaWMgcGxhdGZyb20gZGV2aWNlIGJhc2VkIFJBTSBtYXAKICAqCi0gKiAkSWQ6IHBsYXQtcmFtLmMsdiAxLjYgMjAwNS8xMS8wNyAwMDo1MjoyNCBnbGVpeG5lciBFeHAgJAorICogJElkOiBwbGF0LXJhbS5jLHYgMS43IDIwMDUvMTEvMDcgMTE6MTQ6MjggZ2xlaXhuZXIgRXhwICQKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTkxLDcgKzkxLDcgQEAKIAogCWRldl9kYmcoZGV2LCAicmVtb3ZpbmcgZGV2aWNlXG4iKTsKIAotCWlmIChpbmZvID09IE5VTEwpIAorCWlmIChpbmZvID09IE5VTEwpCiAJCXJldHVybiAwOwogCiAJaWYgKGluZm8tPm10ZCkgewpAQCAtMTE4LDcgKzExOCw3IEBACiAKIAlpZiAoaW5mby0+bWFwLnZpcnQgIT0gTlVMTCkKIAkJaW91bm1hcChpbmZvLT5tYXAudmlydCk7Ci0JCisKIAlrZnJlZShpbmZvKTsKIAogCXJldHVybiAwOwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJaW50IGVyciA9IDA7CiAKIAlkZXZfZGJnKGRldiwgInByb2JlIGVudGVyZWRcbiIpOwotCQorCiAJaWYgKGRldi0+cGxhdGZvcm1fZGF0YSA9PSBOVUxMKSB7CiAJCWRldl9lcnIoZGV2LCAibm8gcGxhdGZvcm0gZGF0YSBzdXBwbGllZFxuIik7CiAJCWVyciA9IC1FTk9FTlQ7CkBAIC0yNDAsNyArMjQwLDcgQEAKIAkJZGV2X2VycihkZXYsICJhZGRfbXRkX2RldmljZSgpIGZhaWxlZFxuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJfQotCQorCiAJZGV2X2luZm8oZGV2LCAicmVnaXN0ZXJlZCBtdGQgZGV2aWNlXG4iKTsKIAlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3BuYzIwMDAuYyBiL2RyaXZlcnMvbXRkL21hcHMvcG5jMjAwMC5jCmluZGV4IGEwZjQzZGEuLmQ3ZTE2YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcG5jMjAwMC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcG5jMjAwMC5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIFRoaXMgY29kZSBpcyBHUEwKICAqCi0gKiAkSWQ6IHBuYzIwMDAuYyx2IDEuMTcgMjAwNC8xMS8xNiAxODoyOTowMiBkd213MiBFeHAgJAorICogJElkOiBwbmMyMDAwLmMsdiAxLjE4IDIwMDUvMTEvMDcgMTE6MTQ6MjggZ2xlaXhuZXIgRXhwICQKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0yMSw3ICsyMSw3IEBACiAjZGVmaW5lIFdJTkRPV19BRERSIDB4YmYwMDAwMDAKICNkZWZpbmUgV0lORE9XX1NJWkUgMHgwMDQwMDAwMAogCi0vKiAKKy8qCiAgKiBNQVAgRFJJVkVSIFNUVUZGCiAgKi8KIApAQCAtMzYsNyArMzYsNyBAQAogCiAKIC8qCi0gKiBNVEQgJ1BBUlRJVElPTklORycgU1RVRkYgCisgKiBNVEQgJ1BBUlRJVElPTklORycgU1RVRkYKICAqLwogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBuY19wYXJ0aXRpb25zWzNdID0gewogCXsKQEAgLTU2LDcgKzU2LDcgQEAKIAl9CiB9OwogCi0vKiAKKy8qCiAgKiBUaGlzIGlzIHRoZSBtYXN0ZXIgTVREIGRldmljZSBmb3Igd2hpY2ggYWxsIHRoZSBvdGhlcnMgYXJlIGp1c3QKICAqIGF1dG8tcmVsb2NhdGluZyBhbGlhc2VzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3BxMmZhZHMuYyBiL2RyaXZlcnMvbXRkL21hcHMvcHEyZmFkcy5jCmluZGV4IGU5NTkwNzYuLmZiNzhkODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcHEyZmFkcy5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcHEyZmFkcy5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KIAogLyoKLSAgTk9URTogYmFuayB3aWR0aCBhbmQgaW50ZXJsZWF2ZSByZWxhdGl2ZSB0byB0aGUgaW5zdGFsbGVkIGZsYXNoIAorICBOT1RFOiBiYW5rIHdpZHRoIGFuZCBpbnRlcmxlYXZlIHJlbGF0aXZlIHRvIHRoZSBpbnN0YWxsZWQgZmxhc2gKICAgc2hvdWxkIGhhdmUgYmVlbiBjaG9zZW4gd2l0aGluIE1URF9DRklfR0VPTUVUUlkgb3B0aW9ucy4KICAgKi8KICNkZWZpbmUgUFEyRkFEU19CQU5LX1dJRFRIIDQKQEAgLTM1LDcgKzM1LDcgQEAKIAkJLnNpemUJCT0gMHg0MDAwMCwKIAkJLm9mZnNldCAJPSAwLAogCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsICAvKiBmb3JjZSByZWFkLW9ubHkgKi8KLQl9LCB7IAorCX0sIHsKIAkJLm5hbWUJCT0gIlVzZXIgRlMiLAogCQkuc2l6ZQkJPSAweDVjMDAwMCwKIAkJLm9mZnNldCAJPSAweDQwMDAwLApAQCAtNDQsMTcgKzQ0LDE3IEBACiAJCS5zaXplCQk9IDB4NjAwMDAwLAogCQkub2Zmc2V0IAk9IDAsCiAjZW5kaWYKLQl9LCB7ICAgIAorCX0sIHsKIAkJLm5hbWUJCT0gInVJbWFnZSIsCiAJCS5zaXplCQk9IDB4MTAwMDAwLAogCQkub2Zmc2V0IAk9IDB4NjAwMDAwLAogCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsICAvKiBmb3JjZSByZWFkLW9ubHkgKi8KLQl9LCB7ICAgIAorCX0sIHsKIAkJLm5hbWUJCT0gImJvb3Rsb2FkZXIiLAogCQkuc2l6ZQkJPSAweDQwMDAwLAogCQkub2Zmc2V0CQk9IDB4NzAwMDAwLAogCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsICAvKiBmb3JjZSByZWFkLW9ubHkgKi8KLQl9LCB7ICAgIAorCX0sIHsKIAkJLm5hbWUJCT0gImJvb3Rsb2FkZXIgZW52IiwKIAkJLnNpemUJCT0gMHg0MDAwMCwKIAkJLm9mZnNldAkJPSAweDc0MDAwMCwKQEAgLTgwLDkgKzgwLDkgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX3BxMmZhZHNfbXRkKHZvaWQpCiB7CiB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKIG1vZHVsZV9pbml0KGluaXRfcHEyZmFkc19tdGQpOwogbW9kdWxlX2V4aXQoY2xlYW51cF9wcTJmYWRzX210ZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTVREIG1hcCBhbmQgcGFydGl0aW9ucyBmb3IgTVBDODI3MkFEUyBib2FyZHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcmVkd29vZC5jIGIvZHJpdmVycy9tdGQvbWFwcy9yZWR3b29kLmMKaW5kZXggZWRkMDFlZS4uNWI3NmVkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9yZWR3b29kLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9yZWR3b29kLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogJElkOiByZWR3b29kLmMsdiAxLjEwIDIwMDQvMTEvMDQgMTM6MjQ6MTUgZ2xlaXhuZXIgRXhwICQKKyAqICRJZDogcmVkd29vZC5jLHYgMS4xMSAyMDA1LzExLzA3IDExOjE0OjI4IGdsZWl4bmVyIEV4cCAkCiAgKgogICogZHJpdmVycy9tdGQvbWFwcy9yZWR3b29kLmMKICAqCkBAIC03OSw3ICs3OSw3IEBACiAKICNkZWZpbmUgUldfUEFSVDBfT0YJMAogI2RlZmluZSBSV19QQVJUMF9TWgkweDQwMDAwMAkvKiA0IE1pQiBkYXRhICovCi0jZGVmaW5lIFJXX1BBUlQxX09GCVJXX1BBUlQwX09GICsgUldfUEFSVDBfU1ogCisjZGVmaW5lIFJXX1BBUlQxX09GCVJXX1BBUlQwX09GICsgUldfUEFSVDBfU1oKICNkZWZpbmUgUldfUEFSVDFfU1oJMHgxMDAwMAkJLyogNjRLIFZQRCAqLwogI2RlZmluZSBSV19QQVJUMl9PRglSV19QQVJUMV9PRiArIFJXX1BBUlQxX1NaCiAjZGVmaW5lIFJXX1BBUlQyX1NaCTB4NDAwMDAwIC0gKDB4MTAwMDAgKyAweDIwMDAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvc2ExMTAwLWZsYXNoLmMKaW5kZXggYzhkMGRhMS4uOTJjZjE1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3NhMTEwMC1mbGFzaC5jCkBAIC0xLDkgKzEsOSBAQAogLyoKICAqIEZsYXNoIG1lbW9yeSBhY2Nlc3Mgb24gU0ExMXgwIGJhc2VkIGRldmljZXMKLSAqIAorICoKICAqIChDKSAyMDAwIE5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4KLSAqIAotICogJElkOiBzYTExMDAtZmxhc2guYyx2IDEuNDcgMjAwNC8xMS8wMSAxMzo0NDozNiBybWsgRXhwICQKKyAqCisgKiAkSWQ6IHNhMTEwMC1mbGFzaC5jLHYgMS41MSAyMDA1LzExLzA3IDExOjE0OjI4IGdsZWl4bmVyIEV4cCAkCiAgKi8KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvc2JjODI0MC5jIGIvZHJpdmVycy9tdGQvbWFwcy9zYmM4MjQwLmMKaW5kZXggZGE2ODRkMy4uMjI1Y2RkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9zYmM4MjQwLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9zYmM4MjQwLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogVGhpcyBjb2RlIGlzIEdQTGVkCiAgKgotICogJElkOiBzYmM4MjQwLmMsdiAxLjQgMjAwNC8wNy8xMiAyMjozODoyOSBkd213MiBFeHAgJAorICogJElkOiBzYmM4MjQwLmMsdiAxLjUgMjAwNS8xMS8wNyAxMToxNDoyOCBnbGVpeG5lciBFeHAgJAogICoKICAqLwogCkBAIC0yMDUsNyArMjA1LDcgQEAKIAkJfSBlbHNlIHsKIAkJCXByaW50ayAoS0VSTl9OT1RJQ0UgTVNHX1BSRUZJWAogCQkJCSJVc2luZyAlcyBwYXJ0aXRpb24gZGVmaW5pdGlvblxuIiwgc2JjODI0MF9wYXJ0X2JhbmtzW2ldLm10ZF9wYXJ0LT5uYW1lKTsKLQkJCWFkZF9tdGRfcGFydGl0aW9ucyAoc2JjODI0MF9tdGRbaV0sIAorCQkJYWRkX210ZF9wYXJ0aXRpb25zIChzYmM4MjQwX210ZFtpXSwKIAkJCQkJICAgIHNiYzgyNDBfcGFydF9iYW5rc1tpXS5tdGRfcGFydCwKIAkJCQkJICAgIHNiYzgyNDBfcGFydF9iYW5rc1tpXS5udW1zKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9zYmNfZ3h4LmMgYi9kcml2ZXJzL210ZC9tYXBzL3NiY19neHguYwppbmRleCA2NWFkZDI4Li43Y2M0MDQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3NiY19neHguYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3NiY19neHguYwpAQCAtMSwzNSArMSwzNSBAQAogLyogc2JjX2d4eC5jIC0tIE1URCBtYXAgZHJpdmVyIGZvciBBcmNvbSBDb250cm9sIFN5c3RlbXMgU0JDLU1lZGlhR1gsCiAgICAgICAgICAgICAgICAgU0JDLUdYbSBhbmQgU0JDLUdYMSBzZXJpZXMgYm9hcmRzLgotIAorCiAgICBDb3B5cmlnaHQgKEMpIDIwMDEgQXJjb20gQ29udHJvbCBTeXN0ZW0gTHRkCi0gCisKICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gCisKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gCisKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQogCi0gICAkSWQ6IHNiY19neHguYyx2IDEuMzMgMjAwNC8xMS8yOCAwOTo0MDo0MCBkd213MiBFeHAgJAorICAgJElkOiBzYmNfZ3h4LmMsdiAxLjM1IDIwMDUvMTEvMDcgMTE6MTQ6MjggZ2xlaXhuZXIgRXhwICQKIAotVGhlIFNCQy1NZWRpYUdYIC8gU0JDLUdYeCBoYXMgdXAgdG8gMTYgTWlCIG9mIAotSW50ZWwgU3RyYXRhRmxhc2ggKDI4RjMyMC8yOEY2NDApIGluIHg4IG1vZGUuICAKK1RoZSBTQkMtTWVkaWFHWCAvIFNCQy1HWHggaGFzIHVwIHRvIDE2IE1pQiBvZgorSW50ZWwgU3RyYXRhRmxhc2ggKDI4RjMyMC8yOEY2NDApIGluIHg4IG1vZGUuCiAKIFRoaXMgZHJpdmVyIHVzZXMgdGhlIENGSSBwcm9iZSBhbmQgSW50ZWwgRXh0ZW5kZWQgQ29tbWFuZCBTZXQgZHJpdmVycy4KIAogVGhlIGZsYXNoIGlzIGFjY2Vzc2VkIGFzIGZvbGxvd3M6CiAKICAgIDE2IEtpQiBtZW1vcnkgd2luZG93IGF0IDB4ZGMwMDAtMHhkZmZmZgotICAgCisKICAgIFR3byBJTyBhZGRyZXNzIGxvY2F0aW9ucyBmb3IgcGFnaW5nCi0gICAKKwogICAgMHgyNTgKICAgICAgICBiaXQgMC03OiBhZGRyZXNzIGJpdCAxNC0yMQogICAgMHgyNTkKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICBiaXQgNzogICAwIC0gcmVzZXQvcG93ZXJlZCBkb3duCiAgICAgICAgICAgICAgICAgMSAtIGRldmljZSBlbmFibGVkCiAKLVRoZSBzaW5nbGUgZmxhc2ggZGV2aWNlIGlzIGRpdmlkZWQgaW50byAzIHBhcnRpdGlvbiB3aGljaCBhcHBlYXIgYXMgCitUaGUgc2luZ2xlIGZsYXNoIGRldmljZSBpcyBkaXZpZGVkIGludG8gMyBwYXJ0aXRpb24gd2hpY2ggYXBwZWFyIGFzCiBzZXBhcmF0ZSBNVEQgZGV2aWNlcy4KIAogMjUvMDQvMjAwMSBBSkwgKEFyY29tKSAgTW9kaWZpZWQgc2lnbm9uIHN0cmluZ3MgYW5kIHBhcnRpdGlvbiBzaXplcwpAQCAtODcsMTcgKzg3LDE3IEBACiBzdGF0aWMgdm9pZCBfX2lvbWVtICppb21hcGFkcjsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2JjX2d4eF9zcGluKTsKIAotLyogcGFydGl0aW9uX2luZm8gZ2l2ZXMgZGV0YWlscyBvbiB0aGUgbG9naWNhbCBwYXJ0aXRpb25zIHRoYXQgdGhlIHNwbGl0IHRoZSAKKy8qIHBhcnRpdGlvbl9pbmZvIGdpdmVzIGRldGFpbHMgb24gdGhlIGxvZ2ljYWwgcGFydGl0aW9ucyB0aGF0IHRoZSBzcGxpdCB0aGUKICAqIHNpbmdsZSBmbGFzaCBkZXZpY2UgaW50by4gSWYgdGhlIHNpemUgaWYgemVybyB3ZSB1c2UgdXAgdG8gdGhlIGVuZCBvZiB0aGUKICAqIGRldmljZS4gKi8KIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mb1tdPXsKLSAgICB7IC5uYW1lID0gIlNCQy1HWHggZmxhc2ggYm9vdCBwYXJ0aXRpb24iLCAKLSAgICAgIC5vZmZzZXQgPSAwLCAKKyAgICB7IC5uYW1lID0gIlNCQy1HWHggZmxhc2ggYm9vdCBwYXJ0aXRpb24iLAorICAgICAgLm9mZnNldCA9IDAsCiAgICAgICAuc2l6ZSA9ICAgQk9PVF9QQVJUSVRJT05fU0laRV9LaUIqMTAyNCB9LAotICAgIHsgLm5hbWUgPSAiU0JDLUdYeCBmbGFzaCBkYXRhIHBhcnRpdGlvbiIsIAotICAgICAgLm9mZnNldCA9IEJPT1RfUEFSVElUSU9OX1NJWkVfS2lCKjEwMjQsIAorICAgIHsgLm5hbWUgPSAiU0JDLUdYeCBmbGFzaCBkYXRhIHBhcnRpdGlvbiIsCisgICAgICAub2Zmc2V0ID0gQk9PVF9QQVJUSVRJT05fU0laRV9LaUIqMTAyNCwKICAgICAgIC5zaXplID0gKERBVEFfUEFSVElUSU9OX1NJWkVfS2lCKSoxMDI0IH0sCi0gICAgeyAubmFtZSA9ICJTQkMtR1h4IGZsYXNoIGFwcGxpY2F0aW9uIHBhcnRpdGlvbiIsIAorICAgIHsgLm5hbWUgPSAiU0JDLUdYeCBmbGFzaCBhcHBsaWNhdGlvbiBwYXJ0aXRpb24iLAogICAgICAgLm9mZnNldCA9IChCT09UX1BBUlRJVElPTl9TSVpFX0tpQitEQVRBX1BBUlRJVElPTl9TSVpFX0tpQikqMTAyNCB9CiB9OwogCkBAIC0xMzAsNyArMTMwLDcgQEAKIAkJdW5zaWduZWQgbG9uZyB0aGlzbGVuID0gbGVuOwogCQlpZiAobGVuID4gKFdJTkRPV19MRU5HVEggLSAoZnJvbSAmIFdJTkRPV19NQVNLKSkpCiAJCQl0aGlzbGVuID0gV0lORE9XX0xFTkdUSC0oZnJvbSAmIFdJTkRPV19NQVNLKTsKLQkJCisKIAkJc3Bpbl9sb2NrKCZzYmNfZ3h4X3NwaW4pOwogCQlzYmNfZ3h4X3BhZ2UobWFwLCBmcm9tKTsKIAkJbWVtY3B5X2Zyb21pbyh0bywgaW9tYXBhZHIgKyAoZnJvbSAmIFdJTkRPV19NQVNLKSwgdGhpc2xlbik7CkBAIC0xNTAsMTIgKzE1MCwxMiBAQAogfQogCiBzdGF0aWMgdm9pZCBzYmNfZ3h4X2NvcHlfdG8oc3RydWN0IG1hcF9pbmZvICptYXAsIHVuc2lnbmVkIGxvbmcgdG8sIGNvbnN0IHZvaWQgKmZyb20sIHNzaXplX3QgbGVuKQotewkKK3sKIAl3aGlsZShsZW4pIHsKIAkJdW5zaWduZWQgbG9uZyB0aGlzbGVuID0gbGVuOwogCQlpZiAobGVuID4gKFdJTkRPV19MRU5HVEggLSAodG8gJiBXSU5ET1dfTUFTSykpKQogCQkJdGhpc2xlbiA9IFdJTkRPV19MRU5HVEgtKHRvICYgV0lORE9XX01BU0spOwotCQkKKwogCQlzcGluX2xvY2soJnNiY19neHhfc3Bpbik7CiAJCXNiY19neHhfcGFnZShtYXAsIHRvKTsKIAkJbWVtY3B5X3RvaW8oaW9tYXBhZHIgKyAodG8gJiBXSU5ET1dfTUFTSyksIGZyb20sIHRoaXNsZW4pOwpAQCAtMjAxLDcgKzIwMSw3IEBACiAJCQlzYmNfZ3h4X21hcC5uYW1lICk7CiAJCXJldHVybiAtRUlPOwogCX0KLQkKKwogCWlmICghcmVxdWVzdF9yZWdpb24oIFBBR0VfSU8sIFBBR0VfSU9fU0laRSwgIlNCQy1HWHggZmxhc2giKSkgewogCQlwcmludGsoIEtFUk5fRVJSIiVzOiBJTyBwb3J0cyAweCV4LTB4JXggaW4gdXNlXG4iLAogCQkJc2JjX2d4eF9tYXAubmFtZSwKQEAgLTIwOSw4ICsyMDksOCBAQAogCQlpb3VubWFwKGlvbWFwYWRyKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQotCQkKLQkKKworCiAJcHJpbnRrKCBLRVJOX0lORk8iJXM6IElPOjB4JXgtMHgleCBNRU06MHgleC0weCV4XG4iLAogCQlzYmNfZ3h4X21hcC5uYW1lLAogCQlQQUdFX0lPLCBQQUdFX0lPK1BBR0VfSU9fU0laRS0xLApAQCAtMjIyLDcgKzIyMiw3IEBACiAJCWNsZWFudXBfc2JjX2d4eCgpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KLQkKKwogCWFsbF9tdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAkvKiBDcmVhdGUgTVREIGRldmljZXMgZm9yIGVhY2ggcGFydGl0aW9uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9zYzUyMGNkcC5jIGIvZHJpdmVycy9tdGQvbWFwcy9zYzUyMGNkcC5jCmluZGV4IGEwNmVkMjEuLjZmYjlmM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvc2M1MjBjZHAuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3NjNTIwY2RwLmMKQEAgLTE2LDcgKzE2LDcgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCiAgKgotICogJElkOiBzYzUyMGNkcC5jLHYgMS4yMSAyMDA0LzEyLzEzIDEwOjI3OjA4IGRlZGVraW5kIEV4cCAkCisgKiAkSWQ6IHNjNTIwY2RwLmMsdiAxLjIyIDIwMDUvMTEvMDcgMTE6MTQ6MjggZ2xlaXhuZXIgRXhwICQKICAqCiAgKgogICogVGhlIFNDNTIwQ0RQIGlzIGFuIGV2YWx1YXRpb24gYm9hcmQgZm9yIHRoZSBFbGFuIFNDNTIwIHByb2Nlc3NvciBhdmFpbGFibGUKQEAgLTIzMSw3ICsyMzEsNyBAQAogc3RhdGljIGludCBfX2luaXQgaW5pdF9zYzUyMGNkcCh2b2lkKQogewogCWludCBpLCBkZXZpY2VzX2ZvdW5kID0gMDsKLQkKKwogI2lmZGVmIFJFUFJPR1JBTV9QQVIKIAkvKiByZXByb2dyYW0gUEFSIHJlZ2lzdGVycyBzbyBmbGFzaCBhcHBlYXJzIGF0IHRoZSBkZXNpcmVkIGFkZHJlc3NlcyAqLwogCXNjNTIwY2RwX3NldHVwX3BhcigpOwpAQCAtMjc4LDcgKzI3OCw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9zYzUyMGNkcCh2b2lkKQogewogCWludCBpOwotCQorCiAJaWYgKG1lcmdlZF9tdGQpIHsKIAkJZGVsX210ZF9kZXZpY2UobWVyZ2VkX210ZCk7CiAJCW10ZF9jb25jYXRfZGVzdHJveShtZXJnZWRfbXRkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvc2N4MjAwX2RvY2ZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL3NjeDIwMF9kb2NmbGFzaC5jCmluZGV4IDBlY2UzNzguLjJjOTFkZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvc2N4MjAwX2RvY2ZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9zY3gyMDBfZG9jZmxhc2guYwpAQCAtMSw4ICsxLDggQEAKLS8qIGxpbnV4L2RyaXZlcnMvbXRkL21hcHMvc2N4MjAwX2RvY2ZsYXNoLmMgCisvKiBsaW51eC9kcml2ZXJzL210ZC9tYXBzL3NjeDIwMF9kb2NmbGFzaC5jCiAKICAgIENvcHlyaWdodCAoYykgMjAwMSwyMDAyIENocmlzdGVyIFdlaW5pZ2VsIDx3aW5nZWxAbmFuby1zeXN0ZW0uY29tPgogCi0gICAkSWQ6IHNjeDIwMF9kb2NmbGFzaC5jLHYgMS4xMCAyMDA0LzExLzI4IDA5OjQwOjQwIGR3bXcyIEV4cCAkIAorICAgJElkOiBzY3gyMDBfZG9jZmxhc2guYyx2IDEuMTIgMjAwNS8xMS8wNyAxMToxNDoyOCBnbGVpeG5lciBFeHAgJAogCiAgICBOYXRpb25hbCBTZW1pY29uZHVjdG9yIFNDeDIwMCBmbGFzaCBtYXBwZWQgd2l0aCBET0NDUwogKi8KQEAgLTQ5LDIzICs0OSwyMyBAQAogCiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcGFydGl0aW9uX2luZm9bXSA9IHsKLQl7IAotCQkubmFtZSAgID0gIkRPQ0NTIEJvb3Qga2VybmVsIiwgCi0JCS5vZmZzZXQgPSAwLCAKKwl7CisJCS5uYW1lICAgPSAiRE9DQ1MgQm9vdCBrZXJuZWwiLAorCQkub2Zmc2V0ID0gMCwKIAkJLnNpemUgICA9IDB4YzAwMDAKIAl9LAotCXsgCi0JCS5uYW1lICAgPSAiRE9DQ1MgTG93IEJJT1MiLCAKLQkJLm9mZnNldCA9IDB4YzAwMDAsIAorCXsKKwkJLm5hbWUgICA9ICJET0NDUyBMb3cgQklPUyIsCisJCS5vZmZzZXQgPSAweGMwMDAwLAogCQkuc2l6ZSAgID0gMHg0MDAwMAogCX0sCi0JeyAKLQkJLm5hbWUgICA9ICJET0NDUyBGaWxlIHN5c3RlbSIsIAotCQkub2Zmc2V0ID0gMHgxMDAwMDAsIAorCXsKKwkJLm5hbWUgICA9ICJET0NDUyBGaWxlIHN5c3RlbSIsCisJCS5vZmZzZXQgPSAweDEwMDAwMCwKIAkJLnNpemUgICA9IH4wCS8qIGNhbGN1bGF0ZSBmcm9tIGZsYXNoIHNpemUgKi8KIAl9LAotCXsgCi0JCS5uYW1lICAgPSAiRE9DQ1MgSGlnaCBCSU9TIiwgCisJeworCQkubmFtZSAgID0gIkRPQ0NTIEhpZ2ggQklPUyIsCiAJCS5vZmZzZXQgPSB+MCwgCS8qIGNhbGN1bGF0ZSBmcm9tIGZsYXNoIHNpemUgKi8KIAkJLnNpemUgICA9IDB4ODAwMDAKIAl9LApAQCAtODgsNyArODgsNyBAQAogCiAJcHJpbnRrKEtFUk5fREVCVUcgTkFNRSAiOiBOYXRTZW1pIFNDeDIwMCBET0NDUyBGbGFzaCBEcml2ZXJcbiIpOwogCi0JaWYgKChicmlkZ2UgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9OUywgCisJaWYgKChicmlkZ2UgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9OUywKIAkJCQkgICAgICBQQ0lfREVWSUNFX0lEX05TX1NDeDIwMF9CUklER0UsCiAJCQkJICAgICAgTlVMTCkpID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTM0LDI4ICsxMzQsMjggQEAKIAkJCXByaW50ayhLRVJOX0VSUiBOQU1FICI6IGludmFsaWQgc2l6ZSBmb3IgZmxhc2ggbWFwcGluZ1xuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQkKKwogCQlpZiAod2lkdGggIT0gOCAmJiB3aWR0aCAhPSAxNikgewogCQkJcHJpbnRrKEtFUk5fRVJSIE5BTUUgIjogaW52YWxpZCBidXMgd2lkdGggZm9yIGZsYXNoIG1hcHBpbmdcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJCi0JCWlmIChhbGxvY2F0ZV9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZkb2NtZW0sIAorCisJCWlmIChhbGxvY2F0ZV9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZkb2NtZW0sCiAJCQkJICAgICAgc2l6ZSwKLQkJCQkgICAgICAweGMwMDAwMDAwLCAweGZmZmZmZmZmLCAKKwkJCQkgICAgICAweGMwMDAwMDAwLCAweGZmZmZmZmZmLAogCQkJCSAgICAgIHNpemUsIE5VTEwsIE5VTEwpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgTkFNRSAiOiB1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBmbGFzaCBtYXBwaW5nXG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCQorCiAJCWN0cmwgPSAweDA3MDAwMDAwIHwgKChzaXplLTEpID4+IDEzKTsKIAogCQlwcmludGsoS0VSTl9JTkZPICJET0NDUyBCQVNFPTB4JTA4bHgsIENUUkw9MHglMDhseFxuIiwgKGxvbmcpZG9jbWVtLnN0YXJ0LCAobG9uZyljdHJsKTsKLQkJCisKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicmlkZ2UsIFNDeDIwMF9ET0NDU19CQVNFLCBkb2NtZW0uc3RhcnQpOwogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJyaWRnZSwgU0N4MjAwX0RPQ0NTX0NUUkwsIGN0cmwpOwogCQlwbXIgPSBpbmwoc2N4MjAwX2NiX2Jhc2UgKyBTQ3gyMDBfUE1SKTsKLQkJCisKIAkJaWYgKHdpZHRoID09IDgpIHsKIAkJCXBtciAmPSB+KDE8PDYpOwogCQl9IGVsc2UgewpAQCAtMTYzLDggKzE2Myw4IEBACiAJCX0KIAkJb3V0bChwbXIsIHNjeDIwMF9jYl9iYXNlICsgU0N4MjAwX1BNUik7CiAJfQotCQotICAgICAgIAlwcmludGsoS0VSTl9JTkZPIE5BTUUgIjogRE9DQ1MgbWFwcGVkIGF0IDB4JWx4LTB4JWx4LCB3aWR0aCAlZFxuIiwgCisKKyAgICAgICAJcHJpbnRrKEtFUk5fSU5GTyBOQU1FICI6IERPQ0NTIG1hcHBlZCBhdCAweCVseC0weCVseCwgd2lkdGggJWRcbiIsCiAJICAgICAgIGRvY21lbS5zdGFydCwgZG9jbWVtLmVuZCwgd2lkdGgpOwogCiAJc2N4MjAwX2RvY2ZsYXNoX21hcC5zaXplID0gc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvc2hhcnBzbC1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9zaGFycHNsLWZsYXNoLmMKaW5kZXggYjdmMDkzZi4uOTk5ZjRiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9zaGFycHNsLWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9zaGFycHNsLWZsYXNoLmMKQEAgLTEsMTAgKzEsMTAgQEAKIC8qCiAgKiBzaGFycHNsLWZsYXNoLmMKLSAqIAorICoKICAqIENvcHlyaWdodCAoQykgMjAwMSBMaW5lbyBKYXBhbiwgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDAyICBTSEFSUAogICoKLSAqICRJZDogc2hhcnBzbC1mbGFzaC5jLHYgMS41IDIwMDUvMDMvMjEgMDg6NDI6MTEgcnB1cmRpZSBFeHAgJAorICogJElkOiBzaGFycHNsLWZsYXNoLmMsdiAxLjcgMjAwNS8xMS8wNyAxMToxNDoyOCBnbGVpeG5lciBFeHAgJAogICoKICAqIGJhc2VkIG9uIHJweGxpdGUuYyx2IDEuMTUgMjAwMS8xMC8wMiAxNTowNToxNCBkd213MiBFeHAKICAqICAgICAgICAgIEhhbmRsZSBtYXBwaW5nIG9mIHRoZSBmbGFzaCBvbiB0aGUgUlBYIExpdGUgYW5kIENMTEYgYm9hcmRzCkBAIC01Nyw3ICs1Nyw3IEBACiAJaW50IG5iX3BhcnRzID0gMDsKIAljaGFyICpwYXJ0X3R5cGUgPSAic3RhdGljIjsKIAotCXByaW50ayhLRVJOX05PVElDRSAiU2hhcnAgU0wgc2VyaWVzIGZsYXNoIGRldmljZTogJXggYXQgJXhcbiIsIAorCXByaW50ayhLRVJOX05PVElDRSAiU2hhcnAgU0wgc2VyaWVzIGZsYXNoIGRldmljZTogJXggYXQgJXhcbiIsCiAJCVdJTkRPV19TSVpFLCBXSU5ET1dfQUREUik7CiAJc2hhcnBzbF9tYXAudmlydCA9IGlvcmVtYXAoV0lORE9XX0FERFIsIFdJTkRPV19TSVpFKTsKIAlpZiAoIXNoYXJwc2xfbWFwLnZpcnQpIHsKQEAgLTc1LDcgKzc1LDcgQEAKIAogCW15bXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwogCi0JaWYgKG1hY2hpbmVfaXNfY29yZ2koKSB8fCBtYWNoaW5lX2lzX3NoZXBoZXJkKCkgfHwgbWFjaGluZV9pc19odXNreSgpIAorCWlmIChtYWNoaW5lX2lzX2NvcmdpKCkgfHwgbWFjaGluZV9pc19zaGVwaGVyZCgpIHx8IG1hY2hpbmVfaXNfaHVza3koKQogCQl8fCBtYWNoaW5lX2lzX3Bvb2RsZSgpKSB7CiAJCXNoYXJwc2xfcGFydGl0aW9uc1swXS5zaXplPTB4MDA2ZDAwMDA7CiAJCXNoYXJwc2xfcGFydGl0aW9uc1swXS5vZmZzZXQ9MHgwMDEyMDAwMDsKQEAgLTg3LDEwICs4NywxMCBAQAogCQlzaGFycHNsX3BhcnRpdGlvbnNbMF0ub2Zmc2V0PTB4MDAxNDAwMDA7CiAJfSBlbHNlIHsKIAkJbWFwX2Rlc3Ryb3kobXltdGQpOwotCQlpb3VubWFwKHNoYXJwc2xfbWFwLnZpcnQpOwkKKwkJaW91bm1hcChzaGFycHNsX21hcC52aXJ0KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCQorCiAJcGFydHMgPSBzaGFycHNsX3BhcnRpdGlvbnM7CiAJbmJfcGFydHMgPSBOQl9PRihzaGFycHNsX3BhcnRpdGlvbnMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3NvbHV0aW9uZW5naW5lLmMgYi9kcml2ZXJzL210ZC9tYXBzL3NvbHV0aW9uZW5naW5lLmMKaW5kZXggOGNlNWQ4OTcuLmM1M2MyYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvc29sdXRpb25lbmdpbmUuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3NvbHV0aW9uZW5naW5lLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogJElkOiBzb2x1dGlvbmVuZ2luZS5jLHYgMS4xNCAyMDA0LzA5LzE2IDIzOjI3OjE0IGdsZWl4bmVyIEV4cCAkCisgKiAkSWQ6IHNvbHV0aW9uZW5naW5lLmMsdiAxLjE1IDIwMDUvMTEvMDcgMTE6MTQ6MjggZ2xlaXhuZXIgRXhwICQKICAqCiAgKiBGbGFzaCBhbmQgRVBST00gb24gSGl0YWNoaSBTb2x1dGlvbiBFbmdpbmUgYW5kIHNpbWlsYXIgYm9hcmRzLgogICoKQEAgLTY3LDcgKzY3LDcgQEAKIAlzb2xlbmdfZXByb21fbWFwLnZpcnQgPSAodm9pZCBfX2lvbWVtICopUDFTRUdBRERSKDB4MDEwMDAwMDApOwogCXNpbXBsZV9tYXBfaW5pdCgmc29sZW5nX2Vwcm9tX21hcCk7CiAJc2ltcGxlX21hcF9pbml0KCZzb2xlbmdfZmxhc2hfbWFwKTsKLQkKKwogCXByaW50ayhLRVJOX05PVElDRSAiUHJvYmluZyBmb3IgZmxhc2ggY2hpcHMgYXQgMHgwMDAwMDAwMDpcbiIpOwogCWZsYXNoX210ZCA9IGRvX21hcF9wcm9iZSgiY2ZpX3Byb2JlIiwgJnNvbGVuZ19mbGFzaF9tYXApOwogCWlmICghZmxhc2hfbXRkKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3N1bl91Zmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvc3VuX3VmbGFzaC5jCmluZGV4IDI5MDkxZDEuLjQ3OTQxZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvc3VuX3VmbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvc3VuX3VmbGFzaC5jCkBAIC0xLDQgKzEsNCBAQAotLyogJElkOiBzdW5fdWZsYXNoLmMsdiAxLjExIDIwMDQvMTEvMDQgMTM6MjQ6MTUgZ2xlaXhuZXIgRXhwICQKKy8qICRJZDogc3VuX3VmbGFzaC5jLHYgMS4xMyAyMDA1LzExLzA3IDExOjE0OjI4IGdsZWl4bmVyIEV4cCAkCiAgKgogICogc3VuX3VmbGFzaCAtIERyaXZlciBpbXBsZW1lbnRhdGlvbiBmb3IgdXNlci1wcm9ncmFtbWFibGUgZmxhc2gKICAqIHByZXNlbnQgb24gbWFueSBTdW4gTWljcm9zeXN0ZW1zIFNNRSBib2FyZHNldHMuCkBAIC02Myw3ICs2Myw3IEBACiAJaVRtcCA9IHByb21fZ2V0cHJvcGVydHkoCiAJCWVkZXYtPnByb21fbm9kZSwgInJlZyIsICh2b2lkICopcmVncywgc2l6ZW9mKHJlZ3MpKTsKIAlpZiAoKGlUbXAgJSBzaXplb2YocmVnc1swXSkpICE9IDApIHsKLQkJcHJpbnRrKCIlczogU3RyYW5nZSByZWcgcHJvcGVydHkgc2l6ZSAlZFxuIiwgCisJCXByaW50aygiJXM6IFN0cmFuZ2UgcmVnIHByb3BlcnR5IHNpemUgJWRcbiIsCiAJCQlVRkxBU0hfREVWTkFNRSwgaVRtcCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTc1LDcgKzc1LDcgQEAKIAkJICogY2FuIHdvcmsgb24gc3VwcG9ydGluZyBpdC4KIAkJICovCiAJCXByaW50aygiJXM6IHVuc3VwcG9ydGVkIGRldmljZSBhdCAweCVseCAoJWQgcmVncyk6ICIgXAotCQkJImVtYWlsIGVicm93ZXJAdXNhLm5ldFxuIiwgCisJCQkiZW1haWwgZWJyb3dlckB1c2EubmV0XG4iLAogCQkJVUZMQVNIX0RFVk5BTUUsIGVkZXYtPnJlc291cmNlWzBdLnN0YXJ0LCBucmVncyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTg0LDcgKzg0LDcgQEAKIAkJcHJpbnRrKCIlczogdW5hYmxlIHRvIGttYWxsb2MgbmV3IGRldmljZVxuIiwgVUZMQVNIX0RFVk5BTUUpOwogCQlyZXR1cm4oLUVOT01FTSk7CiAJfQotCQorCiAJLyogY29weSBkZWZhdWx0cyBhbmQgdHdlYWsgcGFyYW1ldGVycyAqLwogCW1lbWNweSgmcGRldi0+bWFwLCAmdWZsYXNoX21hcF90ZW1wbCwgc2l6ZW9mKHVmbGFzaF9tYXBfdGVtcGwpKTsKIAlwZGV2LT5tYXAuc2l6ZSA9IHJlZ3NbMF0ucmVnX3NpemU7CkBAIC0xNTUsNyArMTU1LDcgQEAKIAogCWxpc3RfZm9yX2VhY2godWRldmxpc3QsICZkZXZpY2VfbGlzdCkgewogCQl1ZGV2ID0gbGlzdF9lbnRyeSh1ZGV2bGlzdCwgc3RydWN0IHVmbGFzaF9kZXYsIGxpc3QpOwotCQlERUJVRygyLCAiJXM6IHJlbW92aW5nIGRldmljZSAlc1xuIiwgCisJCURFQlVHKDIsICIlczogcmVtb3ZpbmcgZGV2aWNlICVzXG4iLAogCQkJVUZMQVNIX0RFVk5BTUUsIHVkZXYtPm5hbWUpOwogCiAJCWlmKDAgIT0gdWRldi0+bXRkKSB7CkBAIC0xNzAsNyArMTcwLDcgQEAKIAkJCWtmcmVlKHVkZXYtPm5hbWUpOwogCQl9CiAJCWtmcmVlKHVkZXYpOwotCX0JCisJfQogfQogCiBtb2R1bGVfaW5pdCh1Zmxhc2hfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3RxbTgzNHguYyBiL2RyaXZlcnMvbXRkL21hcHMvdHFtODM0eC5jCmluZGV4IGQwYmM5NTkuLmM3YWU5YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvdHFtODM0eC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvdHFtODM0eC5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAogCQlwcl9kZWJ1ZygiJXM6IGNoaXAgcHJvYmluZyBjb3VudCAlZFxuIiwgX19GVU5DVElPTl9fLCBpZHgpOwogCi0JCW1hcF9iYW5rc1tpZHhdID0gCisJCW1hcF9iYW5rc1tpZHhdID0KIAkJCShzdHJ1Y3QgbWFwX2luZm8gKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWFwX2luZm8pLAogCQkJCQkJICAgR0ZQX0tFUk5FTCk7CiAJCWlmIChtYXBfYmFua3NbaWR4XSA9PSBOVUxMKSB7CkBAIC0xOTMsNyArMTkzLDcgQEAKIAl0cW04MzR4X3BhcnRpdGlvbnNfYmFuazFbbiAtIDFdLnNpemUgPQogCQltdGRfYmFua3NbMF0tPnNpemUgLQogCQl0cW04MzR4X3BhcnRpdGlvbnNfYmFuazFbbiAtIDFdLm9mZnNldDsKLQkKKwogCS8qIGNoZWNrIGlmIHdlIGhhdmUgc2Vjb25kIGJhbms/ICovCiAJaWYgKG51bV9iYW5rcyA9PSAyKSB7CiAJCW4gPSBBUlJBWV9TSVpFKHRxbTgzNHhfcGFydGl0aW9uc19iYW5rMik7CkBAIC0yMjcsMTEgKzIyNywxMSBAQAogCQkJICAgICAgICJhdmFpbGFibGUsIHJlZ2lzdGVyaW5nIHdob2xlIGRldmljZVxuIiwgaWR4KTsKIAkJCWFkZF9tdGRfZGV2aWNlKG10ZF9iYW5rc1tpZHhdKTsKIAkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAKKwkJCXByaW50ayhLRVJOX05PVElDRQogCQkJICAgICAgICJUUU04MzR4IGZsYXNoIGJhbmsgJWQ6IFVzaW5nICVzIHBhcnRpdGlvbiAiCiAJCQkgICAgICAgImRlZmluaXRpb25cbiIsIGlkeCwgcGFydF9iYW5rc1tpZHhdLnR5cGUpOwogCQkJYWRkX210ZF9wYXJ0aXRpb25zKG10ZF9iYW5rc1tpZHhdLAotCQkJCQkgICBwYXJ0X2JhbmtzW2lkeF0ubXRkX3BhcnQsIAorCQkJCQkgICBwYXJ0X2JhbmtzW2lkeF0ubXRkX3BhcnQsCiAJCQkJCSAgIHBhcnRfYmFua3NbaWR4XS5udW1zKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvdHFtOHh4bC5jIGIvZHJpdmVycy9tdGQvbWFwcy90cW04eHhsLmMKaW5kZXggNGUyOGI5Ny4uOWNiNWQ2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy90cW04eHhsLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy90cW04eHhsLmMKQEAgLTEsMTUgKzEsMTUgQEAKIC8qCi0gKiBIYW5kbGUgbWFwcGluZyBvZiB0aGUgZmxhc2ggbWVtb3J5IGFjY2VzcyByb3V0aW5lcyAKKyAqIEhhbmRsZSBtYXBwaW5nIG9mIHRoZSBmbGFzaCBtZW1vcnkgYWNjZXNzIHJvdXRpbmVzCiAgKiBvbiBUUU04eHhMIGJhc2VkIGRldmljZXMuCiAgKgotICogJElkOiB0cW04eHhsLmMsdiAxLjEzIDIwMDQvMTAvMjAgMjI6MjE6NTMgZHdtdzIgRXhwICQKKyAqICRJZDogdHFtOHh4bC5jLHYgMS4xNSAyMDA1LzExLzA3IDExOjE0OjI4IGdsZWl4bmVyIEV4cCAkCiAgKgogICogYmFzZWQgb24gcnB4bGl0ZS5jCiAgKgogICogQ29weXJpZ2h0KEMpIDIwMDEgS2lyayBMZWUgPGtpcmtAaHBjLmVlLm50dS5lZHUudHc+CiAgKgogICogVGhpcyBjb2RlIGlzIEdQTGVkCi0gKiAKKyAqCiAgKi8KIAogLyoKQEAgLTE5LDcgKzE5LDcgQEAKICAqCSAgICAyTWlCCSAgIDUxMkt4MTYJICAyTWlCCQkgICAwCiAgKgkgICAgNE1pQgkgICAxTXgxNgkgIDRNaUIJCSAgIDAKICAqCSAgICA4TWlCCSAgIDFNeDE2CSAgNE1pQgkJICAgNE1pQgotICogVGh1cywgd2UgY2hvb3NlIENPTkZJR19NVERfQ0ZJX0kyICYgQ09ORklHX01URF9DRklfQjQgYXQgCisgKiBUaHVzLCB3ZSBjaG9vc2UgQ09ORklHX01URF9DRklfSTIgJiBDT05GSUdfTVREX0NGSV9CNCBhdAogICoga2VybmVsIGNvbmZpZ3VyYXRpb24uCiAgKi8KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KQEAgLTU4LDkgKzU4LDkgQEAKICAqIEhlcmUgYXJlIHBhcnRpdGlvbiBpbmZvcm1hdGlvbiBmb3IgYWxsIGtub3duIFRRTTh4eEwgc2VyaWVzIGRldmljZXMuCiAgKiBTZWUgaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oIGZvciBkZWZpbml0aW9uIG9mIHRoZSBtdGRfcGFydGl0aW9uCiAgKiBzdHJ1Y3R1cmUuCi0gKiAKKyAqCiAgKiBUaGUgKl9tYXhfZmxhc2hfc2l6ZSBpcyB0aGUgbWF4aW11bSBwb3NzaWJsZSBtYXBwZWQgZmxhc2ggc2l6ZSB3aGljaAotICogaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBhY3R1YWwgZmxhc2ggc2l6ZS4gIEl0IG11c3QgY29ycmVzcG9uZCB0byB0aGUgCisgKiBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIGFjdHVhbCBmbGFzaCBzaXplLiAgSXQgbXVzdCBjb3JyZXNwb25kIHRvIHRoZQogICogdmFsdWUgc3BlY2lmaWVkIGluIHRoZSBtYXBwaW5nIGRlZmluaXRpb24gZGVmaW5lZCBieSB0aGUKICAqICJzdHJ1Y3QgbWFwX2Rlc2MgKl9pb19kZXNjIiBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS4KICAqLwpAQCAtMTMyLDkgKzEzMiw5IEBACiAJZm9yIChpZHggPSAwIDsgaWR4IDwgRkxBU0hfQkFOS19NQVggOyBpZHgrKykgewogCQlpZihtdGRfc2l6ZSA+PSBmbGFzaF9zaXplKQogCQkJYnJlYWs7Ci0JCQorCiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjaGlwIHByb2JpbmcgY291bnQgJWRcbiIsIF9fRlVOQ1RJT05fXywgaWR4KTsKLQkJCisKIAkJbWFwX2JhbmtzW2lkeF0gPSAoc3RydWN0IG1hcF9pbmZvICopa21hbGxvYyhzaXplb2Yoc3RydWN0IG1hcF9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJCWlmKG1hcF9iYW5rc1tpZHhdID09IE5VTEwpIHsKIAkJCXJldCA9IC1FTk9NRU07CkBAIC0xODAsNyArMTgwLDcgQEAKIAkJCW10ZF9zaXplICs9IG10ZF9iYW5rc1tpZHhdLT5zaXplOwogCQkJbnVtX2JhbmtzKys7CiAKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBiYW5rJWQsIG5hbWU6JXMsIHNpemU6JWRieXRlcyBcbiIsIF9fRlVOQ1RJT05fXywgbnVtX2JhbmtzLCAKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBiYW5rJWQsIG5hbWU6JXMsIHNpemU6JWRieXRlcyBcbiIsIF9fRlVOQ1RJT05fXywgbnVtX2JhbmtzLAogCQkJbXRkX2JhbmtzW2lkeF0tPm5hbWUsIG10ZF9iYW5rc1tpZHhdLT5zaXplKTsKIAkJfQogCX0KQEAgLTIxMSw3ICsyMTEsNyBAQAogCQl9IGVsc2UgewogCQkJcHJpbnRrKEtFUk5fTk9USUNFICJUUU0gZmxhc2glZDogVXNpbmcgJXMgcGFydGl0aW9uIGRlZmluaXRpb25cbiIsCiAJCQkJCWlkeCwgcGFydF9iYW5rc1tpZHhdLnR5cGUpOwotCQkJYWRkX210ZF9wYXJ0aXRpb25zKG10ZF9iYW5rc1tpZHhdLCBwYXJ0X2JhbmtzW2lkeF0ubXRkX3BhcnQsIAorCQkJYWRkX210ZF9wYXJ0aXRpb25zKG10ZF9iYW5rc1tpZHhdLCBwYXJ0X2JhbmtzW2lkeF0ubXRkX3BhcnQsCiAJCQkJCQkJCXBhcnRfYmFua3NbaWR4XS5udW1zKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvdHM1NTAwX2ZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL3RzNTUwMF9mbGFzaC5jCmluZGV4IDI3NjJkYTkuLjRiMzcyYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvdHM1NTAwX2ZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy90czU1MDBfZmxhc2guYwpAQCAtMTksMTEgKzE5LDExIEBACiAgKgogICogTm90ZToKICAqIC0gSW4gb3JkZXIgZm9yIGRldGVjdGlvbiB0byB3b3JrLCBqdW1wZXIgMyBtdXN0IGJlIHNldC4KLSAqIC0gRHJpdmUgQSBhbmQgQiB1c2UgdGhlIHJlc2lkZW50IGZsYXNoIGRpc2sgKFJGRCkgZmxhc2ggdHJhbnNsYXRpb24gbGF5ZXIuIAotICogLSBJZiB5b3UgaGF2ZSBjcmVhdGVkIHlvdXIgb3duIGpmZnMgZmlsZSBzeXN0ZW0gYW5kIHRoZSBiaW9zIG92ZXJ3cml0ZXMgCisgKiAtIERyaXZlIEEgYW5kIEIgdXNlIHRoZSByZXNpZGVudCBmbGFzaCBkaXNrIChSRkQpIGZsYXNoIHRyYW5zbGF0aW9uIGxheWVyLgorICogLSBJZiB5b3UgaGF2ZSBjcmVhdGVkIHlvdXIgb3duIGpmZnMgZmlsZSBzeXN0ZW0gYW5kIHRoZSBiaW9zIG92ZXJ3cml0ZXMKICAqICAgaXQgZHVyaW5nIGJvb3QsIHRyeSBkaXNhYmxpbmcgRHJpdmUgQTogYW5kIEI6IGluIHRoZSBib290IG9yZGVyLgogICoKLSAqICRJZDogdHM1NTAwX2ZsYXNoLmMsdiAxLjQgMjAwNS8wNi8yOSAwOToyOTo0MyBzZWFuIEV4cCAkCisgKiAkSWQ6IHRzNTUwMF9mbGFzaC5jLHYgMS41IDIwMDUvMTEvMDcgMTE6MTQ6MjggZ2xlaXhuZXIgRXhwICQKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3RzdW5hbWlfZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvdHN1bmFtaV9mbGFzaC5jCmluZGV4IDE3MGQ3MTIuLjllMjFlNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvdHN1bmFtaV9mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvdHN1bmFtaV9mbGFzaC5jCkBAIC0yLDcgKzIsNyBAQAogICogdHN1bmFtaV9mbGFzaC5jCiAgKgogICogZmxhc2ggY2hpcCBvbiBhbHBoYSBkczEwLi4uCi0gKiAkSWQ6IHRzdW5hbWlfZmxhc2guYyx2IDEuOSAyMDA0LzA3LzE0IDA5OjUyOjU1IGR3bXcyIEV4cCAkCisgKiAkSWQ6IHRzdW5hbWlfZmxhc2guYyx2IDEuMTAgMjAwNS8xMS8wNyAxMToxNDoyOSBnbGVpeG5lciBFeHAgJAogICovCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2NvcmVfdHN1bmFtaS5oPgpAQCAtNDEsNyArNDEsNyBAQAogfQogCiBzdGF0aWMgdm9pZCB0c3VuYW1pX2ZsYXNoX2NvcHlfdG8oCi0Jc3RydWN0IG1hcF9pbmZvICptYXAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCAKKwlzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCiAJY29uc3Qgdm9pZCAqYWRkciwgc3NpemVfdCBsZW4pCiB7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqc3JjOwpAQCAtOTAsNyArOTAsNyBAQAogCWNoYXIgKip0eXBlOwogCiAJdHN1bmFtaV90aWdfd3JpdGViKEZMQVNIX0VOQUJMRV9CWVRFLCBGTEFTSF9FTkFCTEVfUE9SVCk7Ci0JCisKIAl0c3VuYW1pX2ZsYXNoX210ZCA9IDA7CiAJdHlwZSA9IHJvbV9wcm9iZV90eXBlczsKIAlmb3IoOyAhdHN1bmFtaV9mbGFzaF9tdGQgJiYgKnR5cGU7IHR5cGUrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy91Y2xpbnV4LmMgYi9kcml2ZXJzL210ZC9tYXBzL3VjbGludXguYwppbmRleCBjYzM3MjEzLi43OWQ5MjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3VjbGludXguYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3VjbGludXguYwpAQCAtNSw3ICs1LDcgQEAKICAqCiAgKgkoQykgQ29weXJpZ2h0IDIwMDIsIEdyZWcgVW5nZXJlciAoZ2VyZ0BzbmFwZ2Vhci5jb20pCiAgKgotICogCSRJZDogdWNsaW51eC5jLHYgMS4xMCAyMDA1LzAxLzA1IDE4OjA1OjEzIGR3bXcyIEV4cCAkCisgKiAJJElkOiB1Y2xpbnV4LmMsdiAxLjEyIDIwMDUvMTEvMDcgMTE6MTQ6MjkgZ2xlaXhuZXIgRXhwICQKICAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTgyLDcgKzgyLDcgQEAKIAkJaW91bm1hcChtYXBwLT52aXJ0KTsKIAkJcmV0dXJuKC1FTlhJTyk7CiAJfQotCQkKKwogCW10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAltdGQtPnBvaW50ID0gdWNsaW51eF9wb2ludDsKIAltdGQtPnByaXYgPSBtYXBwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy92bWF4MzAxLmMgYi9kcml2ZXJzL210ZC9tYXBzL3ZtYXgzMDEuYwppbmRleCBjOGM3NDExLi5lMDA2Mzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3ZtYXgzMDEuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3ZtYXgzMDEuYwpAQCAtMSwxOSArMSwxOSBAQAotLy8gJElkOiB2bWF4MzAxLmMsdiAxLjMwIDIwMDQvMDcvMTIgMjI6Mzg6MjkgZHdtdzIgRXhwICQKKy8vICRJZDogdm1heDMwMS5jLHYgMS4zMiAyMDA1LzExLzA3IDExOjE0OjI5IGdsZWl4bmVyIEV4cCAkCiAvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKICAgIFRlbXB1c3RlY2ggVk1BWCBTQkMzMDEgTVREIERyaXZlci4KLSAgCisKICAgIFRoZSBWTUF4IDMwMSBpcyBhIFNCQyBiYXNlZCBvbiAuIEl0CiAgICBjb21lcyB3aXRoIHRocmVlIGJ1aWx0aW4gQU1EIDI5RjAxNkIgZmxhc2ggY2hpcHMgYW5kIGEgc29ja2V0IGZvciBTUkFNIG9yCi0gICBtb3JlIGZsYXNoLiBFYWNoIHVuaXQgaGFzIGl0J3Mgb3duIDhrIG1hcHBpbmcgaW50byBhIHNldHRhYmxlIHJlZ2lvbiAKKyAgIG1vcmUgZmxhc2guIEVhY2ggdW5pdCBoYXMgaXQncyBvd24gOGsgbWFwcGluZyBpbnRvIGEgc2V0dGFibGUgcmVnaW9uCiAgICAoMHhEODAwMCkuIFRoZXJlIGFyZSB0d28gOGsgbWFwcGluZ3MgZm9yIGVhY2ggTVRELCB0aGUgZmlyc3QgaXMgYWx3YXlzIHNldAogICAgdG8gdGhlIGxvd2VyIDhrIG9mIHRoZSBkZXZpY2UgdGhlIHNlY29uZCBpcyBwYWdlZC4gV3JpdGluZyBhIDE2IGJpdCBwYWdlCiAgICB2YWx1ZSB0byBhbnl3aGVyZSBpbiB0aGUgZmlyc3QgOGsgd2lsbCBjYXVzZSB0aGUgc2Vjb25kIDhrIHRvIHBhZ2UgYXJvdW5kLgogCi0gICBUbyBib290IHRoZSBkZXZpY2UgYSBiaW9zIGV4dGVuc2lvbiBtdXN0IGJlIGluc3RhbGxlZCBpbnRvIHRoZSBmaXJzdCA4ayAKLSAgIG9mIGZsYXNoIHRoYXQgaXMgc21hcnQgZW5vdWdoIHRvIGNvcHkgaXRzZWxmIGRvd24sIHBhZ2UgaW4gdGhlIHJlc3Qgb2YgCisgICBUbyBib290IHRoZSBkZXZpY2UgYSBiaW9zIGV4dGVuc2lvbiBtdXN0IGJlIGluc3RhbGxlZCBpbnRvIHRoZSBmaXJzdCA4aworICAgb2YgZmxhc2ggdGhhdCBpcyBzbWFydCBlbm91Z2ggdG8gY29weSBpdHNlbGYgZG93biwgcGFnZSBpbiB0aGUgcmVzdCBvZgogICAgaXRzZWxmIGFuZCBiZWdpbiBleGVjdXRpbmcuCi0gICAKKwogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTM1LDcgKzM1LDcgQEAKIC8qIEFjdHVhbGx5IHdlIGNvdWxkIHVzZSB0d28gc3BpbmxvY2tzLCBidXQgd2UnZCBoYXZlIHRvIGhhdmUKICAgIG1vcmUgcHJpdmF0ZSBzcGFjZSBpbiB0aGUgc3RydWN0IG1hcF9pbmZvLiBXZSBsb3NlIGEgbGl0dGxlCiAgICBwZXJmb3JtYW5jZSBsaWtlIHRoaXMsIGJ1dCB3ZSdkIHByb2JhYmx5IGxvc2UgbW9yZSBieSBoYXZpbmcKLSAgIHRoZSBleHRyYSBpbmRpcmVjdGlvbiBmcm9tIGhhdmluZyBvbmUgb2YgdGhlIG1hcC0+bWFwX3ByaXYgCisgICB0aGUgZXh0cmEgaW5kaXJlY3Rpb24gZnJvbSBoYXZpbmcgb25lIG9mIHRoZSBtYXAtPm1hcF9wcml2CiAgICBmaWVsZHMgcG9pbnRpbmcgdG8geWV0IGFub3RoZXIgcHJpdmF0ZSBzdHJ1Y3QuCiAqLwogc3RhdGljIERFRklORV9TUElOTE9DSyh2bWF4MzAxX3NwaW4pOwpAQCAtOTgsNyArOTgsNyBAQAogCQlzcGluX2xvY2soJnZtYXgzMDFfc3Bpbik7CiAJCXZtYXgzMDFfcGFnZShtYXAsIHRvKTsKIAkJbWVtY3B5X3RvaW8obWFwLT5tYXBfcHJpdl8yICsgdG8sIGZyb20sIHRoaXNsZW4pOwotCQlzcGluX3VubG9jaygmdm1heDMwMV9zcGluKTsJCQorCQlzcGluX3VubG9jaygmdm1heDMwMV9zcGluKTsKIAkJdG8gKz0gdGhpc2xlbjsKIAkJZnJvbSArPSB0aGlzbGVuOwogCQlsZW4gLT0gdGhpc2xlbjsKQEAgLTEzNyw3ICsxMzcsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfdm1heDMwMSh2b2lkKQogewogCWludCBpOwotCQorCiAJZm9yIChpPTA7IGk8MjsgaSsrKSB7CiAJCWlmICh2bWF4X210ZFtpXSkgewogCQkJZGVsX210ZF9kZXZpY2Uodm1heF9tdGRbaV0pOwpAQCAtMTYxLDEzICsxNjEsMTMgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCS8qIFB1dCB0aGUgYWRkcmVzcyBpbiB0aGUgbWFwJ3MgcHJpdmF0ZSBkYXRhIGFyZWEuCi0JICAgV2Ugc3RvcmUgdGhlIGFjdHVhbCBNVEQgSU8gYWRkcmVzcyByYXRoZXIgdGhhbiB0aGUgCisJICAgV2Ugc3RvcmUgdGhlIGFjdHVhbCBNVEQgSU8gYWRkcmVzcyByYXRoZXIgdGhhbiB0aGUKIAkgICBhZGRyZXNzIG9mIHRoZSBmaXJzdCBoYWxmLCBiZWNhdXNlIGl0J3MgdXNlZCBtb3JlCi0JICAgb2Z0ZW4uIAorCSAgIG9mdGVuLgogCSovCiAJdm1heF9tYXBbMF0ubWFwX3ByaXZfMiA9IGlvbWFwYWRyICsgV0lORE9XX1NUQVJUOwogCXZtYXhfbWFwWzFdLm1hcF9wcml2XzIgPSBpb21hcGFkciArICgzKldJTkRPV19TVEFSVCk7Ci0JCisKIAlmb3IgKGk9MDsgaTwyOyBpKyspIHsKIAkJdm1heF9tdGRbaV0gPSBkb19tYXBfcHJvYmUoImNmaV9wcm9iZSIsICZ2bWF4X21hcFtpXSk7CiAJCWlmICghdm1heF9tdGRbaV0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3dhbG51dC5jIGIvZHJpdmVycy9tdGQvbWFwcy93YWxudXQuYwppbmRleCBkNjEzN2IxLi41YzE3YmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3dhbG51dC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvd2FsbnV0LmMKQEAgLTEsMTIgKzEsMTIgQEAKIC8qCi0gKiAkSWQ6IHdhbG51dC5jLHYgMS4yIDIwMDQvMTIvMTAgMTI6MDc6NDIgaG9saW5kaG8gRXhwICQKLSAqIAorICogJElkOiB3YWxudXQuYyx2IDEuMyAyMDA1LzExLzA3IDExOjE0OjI5IGdsZWl4bmVyIEV4cCAkCisgKgogICogTWFwcGluZyBmb3IgV2FsbnV0IGZsYXNoCiAgKiAodXNlZCBlYm9ueS5jIGFzIGEgImZyYW1ld29yayIpCi0gKiAKKyAqCiAgKiBIZWlra2kgTGluZGhvbG0gPGhvbGluZGhvQGluZnJhZGVhZC5vcmc+Ci0gKiAKLSAqIAorICoKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQogICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCkBAIC00OCw3ICs0OCw3IEBACiAJCS5uYW1lID0gICAiT3BlbkJJT1MiLAogCQkub2Zmc2V0ID0gMHgwLAogCQkuc2l6ZSA9ICAgV0FMTlVUX0ZMQVNIX1NJWkUsCi0JCS8qLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFLCAqLyAvKiBmb3JjZSByZWFkLW9ubHkgKi8JCQorCQkvKi5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRSwgKi8gLyogZm9yY2UgcmVhZC1vbmx5ICovCiAJfQogfTsKIApAQCAtNzIsMTEgKzcyLDExIEBACiAJCXByaW50aygiVGhlIG9uLWJvYXJkIGZsYXNoIGlzIGRpc2FibGVkIChVNzkgc3cgNSkhIik7CiAJCXJldHVybiAtRUlPOwogCX0KLQlpZiAoV0FMTlVUX0ZMQVNIX1NSQU1fU0VMKGZwZ2FfYnJkczEpKSAKKwlpZiAoV0FMTlVUX0ZMQVNIX1NSQU1fU0VMKGZwZ2FfYnJkczEpKQogCQlmbGFzaF9iYXNlID0gV0FMTlVUX0ZMQVNIX0xPVzsKIAllbHNlCiAJCWZsYXNoX2Jhc2UgPSBXQUxOVVRfRkxBU0hfSElHSDsKLQkKKwogCXdhbG51dF9tYXAucGh5cyA9IGZsYXNoX2Jhc2U7CiAJd2FsbnV0X21hcC52aXJ0ID0KIAkJKHZvaWQgX19pb21lbSAqKWlvcmVtYXAoZmxhc2hfYmFzZSwgd2FsbnV0X21hcC5zaXplKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvd3Jfc2JjODJ4eF9mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy93cl9zYmM4Mnh4X2ZsYXNoLmMKaW5kZXggODJiODg3Yi4uNjBjMTk3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy93cl9zYmM4Mnh4X2ZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy93cl9zYmM4Mnh4X2ZsYXNoLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogJElkOiB3cl9zYmM4Mnh4X2ZsYXNoLmMsdiAxLjcgMjAwNC8xMS8wNCAxMzoyNDoxNSBnbGVpeG5lciBFeHAgJAorICogJElkOiB3cl9zYmM4Mnh4X2ZsYXNoLmMsdiAxLjggMjAwNS8xMS8wNyAxMToxNDoyOSBnbGVpeG5lciBFeHAgJAogICoKICAqIE1hcCBmb3IgZmxhc2ggY2hpcHMgb24gV2luZCBSaXZlciBQb3dlclFVSUNDIElJIFNCQzgyeHggYm9hcmQuCiAgKgpAQCAtMTYzLDEwICsxNjMsMTAgQEAKIAkJCWRlbF9tdGRfcGFydGl0aW9ucyhzYmNtdGRbaV0pOwogCQllbHNlCiAJCQlkZWxfbXRkX2RldmljZShzYmNtdGRbaV0pOwotCQkJCisKIAkJa2ZyZWUoc2JjbXRkX3BhcnRzW2ldKTsKIAkJbWFwX2Rlc3Ryb3koc2JjbXRkW2ldKTsKLQkJCisKIAkJaW91bm1hcCgodm9pZCAqKXNiYzgyeHhfZmxhc2hfbWFwW2ldLnZpcnQpOwogCQlzYmM4Mnh4X2ZsYXNoX21hcFtpXS52aXJ0ID0gMDsKIAl9Cg==