Name: series-workflowjnzwl Phase: Failed StartedAt: 2026-08-31 22:04:56 +0000 UTC FinishedAt: 2026-08-31 22:08:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjnzwl[0] Phase: Succeeded StartedAt: 2026-08-31 22:04:56 +0000 UTC FinishedAt: 2026-08-31 22:07:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjnzwl[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 22:04:56 +0000 UTC FinishedAt: 2026-08-31 22:07:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdmVuZG9yLXNwZWNpZmljIFhpbGlueCBBWEkgLyBYWFYgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvKSwgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBYaWxpbnggWFhWIDEwRy8yNUcgRXRoZXJuZXQgU3Vic3lzdGVtIEZQR0EgSVAgY29yZS4gVGhpcyBoYXJkd2FyZSByZXF1aXJlcyBwaHlzaWNhbCBYaWxpbngvQU1EIEZQR0EvU29DIGhhcmR3YXJlIGFuZCBjYW5ub3QgYmUgcmVhY2hlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0NWQ1MDJmYzE5MjlmNzNlMGZlYjgwNzM5ZGJkZTMyYTE3NjhkOGM2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjI6MDc6MTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHh4di1ldGhlcm5ldC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHh4di1ldGhlcm5ldC55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMmJlM2FkZTExZDQ2NVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHh4di1ldGhlcm5ldC55YW1sXG5AQCAtMCwwICYjNDM7MSwxMDcgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4mIzQzOyVZQU1MIDEuMlxuJiM0MzstLS1cbiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQveGxueCx4eHYtZXRoZXJuZXQueWFtbCNcbiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4mIzQzO1xuJiM0Mzt0aXRsZTogWGlsaW54IFhYViAxMEcvMjVHIEV0aGVybmV0IFN1YnN5c3RlbVxuJiM0MztcbiYjNDM7bWFpbnRhaW5lcnM6XG4mIzQzOyAgLSBSYWRoZXkgU2h5YW0gUGFuZGV5IFx1MDAzY3JhZGhleS5zaHlhbS5wYW5kZXlAYW1kLmNvbVx1MDAzZVxuJiM0MzsgIC0gU3VyYWogR3VwdGEgXHUwMDNjc3VyYWouZ3VwdGEyQGFtZC5jb21cdTAwM2VcbiYjNDM7XG4mIzQzO2Rlc2NyaXB0aW9uOlxuJiM0MzsgIFRoZSBYaWxpbnggWFhWIEV0aGVybmV0IFN1YnN5c3RlbSBpbXBsZW1lbnRzIGEgMTBHLzI1RyBFdGhlcm5ldCBNQUMgd2l0aCBhblxuJiM0MzsgIGluLWNvcmUgUENTL1BNQSBkcml2aW5nIGEgaGlnaC1zcGVlZCBzZXJpYWwgdHJhbnNjZWl2ZXIuIEl0IHN1cHBvcnRzIHRoZVxuJiM0MzsgIDEwR0JBU0UtUiBhbmQgMjVHQkFTRS1SIGxpbmUgcmF0ZXMsIHdpdGggMjVHIG9wZXJhdGlvbiBmb2xsb3dpbmcgdGhlIDI1R1xuJiM0MzsgIEV0aGVybmV0IENvbnNvcnRpdW0gc3BlY2lmaWNhdGlvbi4gSXQgaGFzIG5vIGV4dGVybmFsIE1ESU8gUEhZLCBhbmQgaXRzXG4mIzQzOyAgcGF5bG9hZCBpcyBtb3ZlZCBieSBhbiBleHRlcm5hbCBBWEkgRE1BIChvciBtdWx0aWNoYW5uZWwgRE1BKSBjb250cm9sbGVyXG4mIzQzOyAgcmVmZXJlbmNlZCB0aHJvdWdoIHRoZSBcJiMzNDtkbWFzXCYjMzQ7IHByb3BlcnR5LlxuJiM0MztcbiYjNDM7cHJvcGVydGllczpcbiYjNDM7ICBjb21wYXRpYmxlOlxuJiM0MzsgICAgY29uc3Q6IHhsbngseHh2LWV0aGVybmV0LTEuMFxuJiM0MztcbiYjNDM7ICByZWc6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MzsgICAgZGVzY3JpcHRpb246IE1BQyBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXIgc3BhY2UuXG4mIzQzO1xuJiM0MzsgIGNsb2NrczpcbiYjNDM7ICAgIGl0ZW1zOlxuJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBSWCBBWEk0LVN0cmVhbSBjbG9jay5cbiYjNDM7ICAgICAgLSBkZXNjcmlwdGlvbjogR1QgRFJQIGNsb2NrLlxuJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBBWEk0LUxpdGUgcmVnaXN0ZXIgY2xvY2suXG4mIzQzO1xuJiM0MzsgIGNsb2NrLW5hbWVzOlxuJiM0MzsgICAgaXRlbXM6XG4mIzQzOyAgICAgIC0gY29uc3Q6IHJ4X2NvcmVcbiYjNDM7ICAgICAgLSBjb25zdDogZHJwXG4mIzQzOyAgICAgIC0gY29uc3Q6IHNfYXhpXG4mIzQzO1xuJiM0MzsgIHBoeS1tb2RlOlxuJiM0MzsgICAgZW51bTpcbiYjNDM7ICAgICAgLSAxMGdiYXNlLXJcbiYjNDM7ICAgICAgLSAyNWdiYXNlLXJcbiYjNDM7XG4mIzQzOyAgeGxueCxyeG1lbTpcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBTaXplIGluIGJ5dGVzIG9mIHRoZSBSeC9UeCBwYWNrZXQgYnVmZmVyIG1lbW9yeSBidWlsdCBpbnRvIHRoZSBJUC4gSXQgaXNcbiYjNDM7ICAgICAgZml4ZWQgYnkgdGhlIGhhcmR3YXJlIGRlc2lnbiBhbmQgYm91bmRzIHRoZSBsYXJnZXN0IGZyYW1lIChqdW1ibyBNVFUpIHRoZVxuJiM0MzsgICAgICBkZXZpY2UgY2FuIGFjY2VwdC5cbiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMlxuJiM0MztcbiYjNDM7ICBkbWFzOlxuJiM0MzsgICAgbWluSXRlbXM6IDJcbiYjNDM7ICAgIG1heEl0ZW1zOiAzMlxuJiM0MzsgICAgZGVzY3JpcHRpb246IFRYIGFuZCBSWCBETUEgY2hhbm5lbCBwaGFuZGxlLlxuJiM0MztcbiYjNDM7ICBkbWEtbmFtZXM6XG4mIzQzOyAgICBpdGVtczpcbiYjNDM7ICAgICAgcGF0dGVybjogXCYjMzQ7Xlt0cl14X2NoYW4oWzAtOV18MVswLTVdKSRcJiMzNDtcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBTaG91bGQgYmUgXCYjMzQ7dHhfY2hhbjBcJiMzNDssIFwmIzM0O3R4X2NoYW4xXCYjMzQ7IC4uLiBcJiMzNDt0eF9jaGFuMTVcJiMzNDsgZm9yIERNQSBUeCBjaGFubmVsIGFuZFxuJiM0MzsgICAgICBcJiMzNDtyeF9jaGFuMFwmIzM0OywgXCYjMzQ7cnhfY2hhbjFcJiMzNDsgLi4uIFwmIzM0O3J4X2NoYW4xNVwmIzM0OyBmb3IgRE1BIFJ4IGNoYW5uZWwuXG4mIzQzOyAgICBtaW5JdGVtczogMlxuJiM0MzsgICAgbWF4SXRlbXM6IDMyXG4mIzQzO1xuJiM0MztyZXF1aXJlZDpcbiYjNDM7ICAtIGNvbXBhdGlibGVcbiYjNDM7ICAtIHJlZ1xuJiM0MzsgIC0gY2xvY2tzXG4mIzQzOyAgLSBjbG9jay1uYW1lc1xuJiM0MzsgIC0gcGh5LW1vZGVcbiYjNDM7ICAtIHhsbngscnhtZW1cbiYjNDM7ICAtIGRtYXNcbiYjNDM7ICAtIGRtYS1uYW1lc1xuJiM0MztcbiYjNDM7YWxsT2Y6XG4mIzQzOyAgLSAkcmVmOiAvc2NoZW1hcy9uZXQvZXRoZXJuZXQtY29udHJvbGxlci55YW1sI1xuJiM0MztcbiYjNDM7dW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuJiM0MztcbiYjNDM7ZXhhbXBsZXM6XG4mIzQzOyAgIyBTaW5nbGUgQVhJIERNQSBjaGFubmVsIHBhaXJcbiYjNDM7ICAtIHxcbiYjNDM7ICAgIGV0aGVybmV0QDgwMDAwMDAwIHtcbiYjNDM7ICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7eGxueCx4eHYtZXRoZXJuZXQtMS4wXCYjMzQ7O1xuJiM0MzsgICAgICAgIHJlZyA9IFx1MDAzYzB4ODAwMDAwMDAgMHgxMDAwMFx1MDAzZTtcbiYjNDM7ICAgICAgICBjbG9jay1uYW1lcyA9IFwmIzM0O3J4X2NvcmVcJiMzNDssIFwmIzM0O2RycFwmIzM0OywgXCYjMzQ7c19heGlcJiMzNDs7XG4mIzQzOyAgICAgICAgY2xvY2tzID0gXHUwMDNjXHUwMDI2cnhfY2xrXHUwMDNlLCBcdTAwM2NcdTAwMjZkcnBfY2xrXHUwMDNlLCBcdTAwM2NcdTAwMjZheGlfY2xrXHUwMDNlO1xuJiM0MzsgICAgICAgIGRtYS1uYW1lcyA9IFwmIzM0O3R4X2NoYW4wXCYjMzQ7LCBcJiMzNDtyeF9jaGFuMFwmIzM0OztcbiYjNDM7ICAgICAgICBkbWFzID0gXHUwMDNjXHUwMDI2YXhpX2RtYSAwXHUwMDNlLCBcdTAwM2NcdTAwMjZheGlfZG1hIDFcdTAwM2U7XG4mIzQzOyAgICAgICAgcGh5LW1vZGUgPSBcJiMzNDsyNWdiYXNlLXJcJiMzNDs7XG4mIzQzOyAgICAgICAgeGxueCxyeG1lbSA9IFx1MDAzYzB4ODAwMFx1MDAzZTtcbiYjNDM7ICAgIH07XG4mIzQzOyAgIyBNdWx0aWNoYW5uZWwgRE1BIChNQ0RNQSkgd2l0aCBtdWx0aXBsZSBUeC9SeCBjaGFubmVsc1xuJiM0MzsgIC0gfFxuJiM0MzsgICAgZXRoZXJuZXRAODAwMTAwMDAge1xuJiM0MzsgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDt4bG54LHh4di1ldGhlcm5ldC0xLjBcJiMzNDs7XG4mIzQzOyAgICAgICAgcmVnID0gXHUwMDNjMHg4MDAxMDAwMCAweDEwMDAwXHUwMDNlO1xuJiM0MzsgICAgICAgIGNsb2NrLW5hbWVzID0gXCYjMzQ7cnhfY29yZVwmIzM0OywgXCYjMzQ7ZHJwXCYjMzQ7LCBcJiMzNDtzX2F4aVwmIzM0OztcbiYjNDM7ICAgICAgICBjbG9ja3MgPSBcdTAwM2NcdTAwMjZyeF9jbGtcdTAwM2UsIFx1MDAzY1x1MDAyNmRycF9jbGtcdTAwM2UsIFx1MDAzY1x1MDAyNmF4aV9jbGtcdTAwM2U7XG4mIzQzOyAgICAgICAgZG1hLW5hbWVzID0gXCYjMzQ7dHhfY2hhbjBcJiMzNDssIFwmIzM0O3R4X2NoYW4xXCYjMzQ7LCBcJiMzNDtyeF9jaGFuMFwmIzM0OywgXCYjMzQ7cnhfY2hhbjFcJiMzNDs7XG4mIzQzOyAgICAgICAgZG1hcyA9IFx1MDAzY1x1MDAyNmF4aV9tY2RtYSAwXHUwMDNlLCBcdTAwM2NcdTAwMjZheGlfbWNkbWEgMVx1MDAzZSxcbiYjNDM7ICAgICAgICAgICAgICAgXHUwMDNjXHUwMDI2YXhpX21jZG1hIDE2XHUwMDNlLCBcdTAwM2NcdTAwMjZheGlfbWNkbWEgMTdcdTAwM2U7XG4mIzQzOyAgICAgICAgcGh5LW1vZGUgPSBcJiMzNDsxMGdiYXNlLXJcJiMzNDs7XG4mIzQzOyAgICAgICAgeGxueCxyeG1lbSA9IFx1MDAzYzB4ODAwMFx1MDAzZTtcbiYjNDM7ICAgIH07XG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggMGI0MmU4OThmNGQ4ZS4uNGVkYzhhNzMwNGRiMCAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTI5ODYxLDYgJiM0MzsyOTg2MSw3IEBAIFhJTElOWCBBWEkgRVRIRVJORVQgRFJJVkVSXG4gTTpcdFJhZGhleSBTaHlhbSBQYW5kZXkgXHUwMDNjcmFkaGV5LnNoeWFtLnBhbmRleUBhbWQuY29tXHUwMDNlXG4gUzpcdE1haW50YWluZWRcbiBGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LGF4aS1ldGhlcm5ldC55YW1sXG4mIzQzO0Y6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3hsbngseHh2LWV0aGVybmV0LnlhbWxcbiBGOlx0ZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0KlxuIFxuIFhJTElOWCBDQU4gRFJJVkVSXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L01ha2VmaWxlXG5pbmRleCA3ZDdkYzE3NzE0MjNlLi5kYjkwZTY5MWZlYzU4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvTWFrZWZpbGVcbkBAIC02LDUgJiM0Mzs2LDYgQEBcbiBsbF90ZW1hYy1vYmpzIDo9IGxsX3RlbWFjX21haW4ubyBsbF90ZW1hY19tZGlvLm9cbiBvYmotJChDT05GSUdfWElMSU5YX0xMX1RFTUFDKSAmIzQzOz0gbGxfdGVtYWMub1xuIG9iai0kKENPTkZJR19YSUxJTlhfRU1BQ0xJVEUpICYjNDM7PSB4aWxpbnhfZW1hY2xpdGUub1xuLXhpbGlueF9lbWFjLW9ianMgOj0geGlsaW54X2F4aWVuZXRfbWFpbi5vIHhpbGlueF9heGllbmV0X21kaW8ub1xuJiM0Mzt4aWxpbnhfZW1hYy1vYmpzIDo9IHhpbGlueF9heGllbmV0X21haW4ubyB4aWxpbnhfYXhpZW5ldF9tZGlvLm8gXFxcbiYjNDM7XHRcdCAgICB4aWxpbnhfYXhpZW5ldF94eHYub1xuIG9iai0kKENPTkZJR19YSUxJTlhfQVhJX0VNQUMpICYjNDM7PSB4aWxpbnhfZW1hYy5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXQuaFxuaW5kZXggZmNkM2FhZWYyN2ZjMy4uMmVhMDg2ZmM0ZGMzNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXQuaFxuQEAgLTEwLDYgJiM0MzsxMCw3IEBAXG4gI2RlZmluZSBYSUxJTlhfQVhJRU5FVF9IXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGltLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbkBAIC0xNyw2ICYjNDM7MTgsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeWxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hpbGlueF9heGllbmV0X3h4di5oXCYjMzQ7XG4mIzQzO1xuIC8qIFBhY2tldCBzaXplIGluZm8gKi9cbiAjZGVmaW5lIFhBRV9IRFJfU0laRVx0XHRcdDE0IC8qIFNpemUgb2YgRXRoZXJuZXQgaGVhZGVyICovXG4gI2RlZmluZSBYQUVfVFJMX1NJWkVcdFx0XHQgNCAvKiBTaXplIG9mIEV0aGVybmV0IHRyYWlsZXIgKEZDUykgKi9cbkBAIC01NDUsNiAmIzQzOzU0OCw5IEBAIHN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciB7XG4gICogQHR4X3JpbmdfdGFpbDogVFggc2tiIHJpbmcgYnVmZmVyIHRhaWwgaW5kZXguXG4gICogQHJ4X3JpbmdfaGVhZDogUlggc2tiIHJpbmcgYnVmZmVyIGhlYWQgaW5kZXguXG4gICogQHJ4X3JpbmdfdGFpbDogUlggc2tiIHJpbmcgYnVmZmVyIHRhaWwgaW5kZXguXG4mIzQzOyAqIEB4eHZfaXBfdmVyc2lvbjogWFhWIElQIHZlcnNpb24uXG4mIzQzOyAqIEB4eHZfc3RhdF9iYXNlOiBTb2Z0d2FyZSBhY2N1bXVsYXRvcnMgZm9yIHRoZSBYWFYgY2xlYXItb24tdGljayBjb3VudGVycy5cbiYjNDM7ICogQGF4aWVuZXRfY29uZmlnOiBNQUMtdHlwZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGFuZCBvcGVyYXRpb25zLlxuICAqL1xuIHN0cnVjdCBheGllbmV0X2xvY2FsIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuQEAgLTU5OCw2ICYjNDM7NjA0LDcgQEAgc3RydWN0IGF4aWVuZXRfbG9jYWwge1xuIFxuIFx0dTY0IGh3X3N0YXRfYmFzZVtTVEFUX0NPVU5UXTtcbiBcdHUzMiBod19sYXN0X2NvdW50ZXJbU1RBVF9DT1VOVF07XG4mIzQzO1x0dTY0IHh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfQ09VTlRdO1xuIFx0c2VxY291bnRfbXV0ZXhfdCBod19zdGF0c19zZXFjb3VudDtcbiBcdHN0cnVjdCBtdXRleCBzdGF0c19sb2NrO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBzdGF0c193b3JrO1xuQEAgLTYyNiw4ICYjNDM7NjMzLDg4IEBAIHN0cnVjdCBheGllbmV0X2xvY2FsIHtcbiBcdGludCB0eF9yaW5nX3RhaWw7XG4gXHRpbnQgcnhfcmluZ19oZWFkO1xuIFx0aW50IHJ4X3JpbmdfdGFpbDtcbiYjNDM7XHR1MzIgeHh2X2lwX3ZlcnNpb247XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGF4aWVuZXRfY29uZmlnICpheGllbmV0X2NvbmZpZztcbiB9O1xuIFxuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IGF4aWVuZXRfY29uZmlnIC0gTUFDLXR5cGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBhbmQgb3BlcmF0aW9uc1xuJiM0MzsgKiBAbWRpbzogTUFDIGhhcyBhbiBNRElPIGJ1cyBmb3IgZXh0ZXJuYWwgUEhZIG1hbmFnZW1lbnRcbiYjNDM7ICogQG1hY19pcnE6IE1BQyBoYXMgYSBkZWRpY2F0ZWQgY29yZSBpbnRlcnJ1cHRcbiYjNDM7ICogQGxlZ2FjeV9kbWE6IE1BQyBzdXBwb3J0cyB0aGUgbGVnYWN5IChub24tZG1hZW5naW5lKSBETUEgbW9kZVxuJiM0MzsgKiBAdWNfZmlsdGVyOiBNQUMgaGFzIHVuaWNhc3QgYWRkcmVzcyBmaWx0ZXIgcmVnaXN0ZXJzXG4mIzQzOyAqIEBtY19maWx0ZXI6IE1BQyBoYXMgbXVsdGljYXN0IGFkZHJlc3MgZmlsdGVyIHJlZ2lzdGVyc1xuJiM0MzsgKiBAdmxhbjogTUFDIHN1cHBvcnRzIFZMQU4gZnJhbWVzIGJ5IGRlZmF1bHRcbiYjNDM7ICogQGp1bWJvOiBNQUMgc3VwcG9ydHMganVtYm8gZnJhbWVzXG4mIzQzOyAqIEBkbWFfdHhfY3N1bTogTUFDIHN1cHBvcnRzIFRYIGNoZWNrc3VtIG9mZmxvYWRcbiYjNDM7ICogQHN3X3BhZGRpbmc6IFNob3J0IGZyYW1lcyBtdXN0IGJlIHBhZGRlZCBpbiBzb2Z0d2FyZSBiZWZvcmUgdHJhbnNtaXRcbiYjNDM7ICogQGludGVybmFsX3BjczogTUFDIGFsd2F5cyBkcml2ZXMgYW4gaW50ZXJuYWwgUENTXG4mIzQzOyAqIEByZWdzX246IE51bWJlciBvZiBNQUMgcmVnaXN0ZXJzIGV4cG9zZWQgdGhyb3VnaCBldGh0b29sIC1kXG4mIzQzOyAqIEBjbGtfaW5pdDogQ2FsbGJhY2sgdG8gZ2V0IGFuZCBlbmFibGUgdGhlIE1BQy1zcGVjaWZpYyBjbG9ja3NcbiYjNDM7ICogQHNldG9wdGlvbnM6IENhbGxiYWNrIHRvIHByb2dyYW0gTUFDIGhhcmR3YXJlIG9wdGlvbnNcbiYjNDM7ICogQHByb2JlX2luaXQ6IENhbGxiYWNrIGZvciBNQUMtc3BlY2lmaWMgcHJvYmUtdGltZSBpbml0LCBvciBOVUxMIGlmIHVudXNlZFxuJiM0MzsgKiBAZ3RfcmVzZXQ6IENhbGxiYWNrIHRvIHJlc2V0IHRoZSBzZXJpYWwgdHJhbnNjZWl2ZXIgKEdUKSwgb3IgTlVMTCBpZiB1bnVzZWRcbiYjNDM7ICogQG1hY19pbml0OiBDYWxsYmFjayBmb3IgTUFDLXNwZWNpZmljIGJyaW5nLXVwIGFmdGVyIHRoZSBETUEgcmVzZXRcbiYjNDM7ICogQG1hY19saW5rX3VwOiBDYWxsYmFjayB0byBwcm9ncmFtIGxpbmsgc3BlZWQgYW5kIHBhdXNlIG9uIGxpbmsgdXAsIG9yIE5VTExcbiYjNDM7ICogQGdldF9yZWdzOiBDYWxsYmFjayB0byBkdW1wIHRoZSBNQUMgcmVnaXN0ZXJzIGZvciBldGh0b29sIC1kXG4mIzQzOyAqIEBwaHlsaW5rX3NldF9jYXBzOiBDYWxsYmFjayB0byBzZXQgcGh5bGluayBNQUMgY2FwYWJpbGl0aWVzXG4mIzQzOyAqIEBwY3Nfb3BzOiBwaHlsaW5rIFBDUyBvcGVyYXRpb25zIGZvciB0aGlzIE1BQywgb3IgTlVMTCBpZiB1bnVzZWRcbiYjNDM7ICogQHN0YXRzX3VwZGF0ZTogQ2FsbGJhY2sgdG8gbGF0Y2gvYWNjdW11bGF0ZSB0aGUgcGVyaW9kaWMgTUFDIGNvdW50ZXJzXG4mIzQzOyAqIEBnZXRfc3RhdHM2NDogQ2FsbGJhY2sgdG8gcmVhZCBNQUMgY291bnRlcnMgaW50byBydG5sX2xpbmtfc3RhdHM2NFxuJiM0MzsgKiBAZ2V0X2V0aHRvb2xfc3RhdHM6IENhbGxiYWNrIHRvIHJlYWQgTUFDIGNvdW50ZXJzIGZvciBldGh0b29sIC1TXG4mIzQzOyAqIEBnZXRfc3RyaW5nczogQ2FsbGJhY2sgdG8gZmlsbCB0aGUgZXRodG9vbCAtUyBzdGF0aXN0aWMgbmFtZSBzdHJpbmdzXG4mIzQzOyAqIEBnZXRfc3NldF9jb3VudDogQ2FsbGJhY2sgcmV0dXJuaW5nIHRoZSBudW1iZXIgb2YgZXRodG9vbCAtUyBzdGF0aXN0aWNzXG4mIzQzOyAqIEBnZXRfcGF1c2Vfc3RhdHM6IENhbGxiYWNrIHRvIHJlYWQgTUFDIHBhdXNlLWZyYW1lIGNvdW50ZXJzXG4mIzQzOyAqIEBnZXRfZXRoX21hY19zdGF0czogQ2FsbGJhY2sgdG8gcmVhZCBJRUVFIDgwMi4zIE1BQyBjb3VudGVyc1xuJiM0MzsgKiBAZ2V0X2V0aF9jdHJsX3N0YXRzOiBDYWxsYmFjayB0byByZWFkIE1BQy1jb250cm9sIGZyYW1lIGNvdW50ZXJzLCBvciBOVUxMXG4mIzQzOyAqXHRcdFx0aWYgdGhlIE1BQyBleHBvc2VzIG5vIGNvbnRyb2wtZnJhbWUgY291bnRlcnNcbiYjNDM7ICogQGdldF9ybW9uX3N0YXRzOiBDYWxsYmFjayB0byByZWFkIFJNT04gY291bnRlcnMgYW5kIGhpc3RvZ3JhbSByYW5nZXNcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBheGllbmV0X2NvbmZpZyB7XG4mIzQzO1x0Ym9vbCBtZGlvO1xuJiM0MztcdGJvb2wgbWFjX2lycTtcbiYjNDM7XHRib29sIGxlZ2FjeV9kbWE7XG4mIzQzO1x0Ym9vbCB1Y19maWx0ZXI7XG4mIzQzO1x0Ym9vbCBtY19maWx0ZXI7XG4mIzQzO1x0Ym9vbCB2bGFuO1xuJiM0MztcdGJvb2wganVtYm87XG4mIzQzO1x0Ym9vbCBkbWFfdHhfY3N1bTtcbiYjNDM7XHRib29sIHN3X3BhZGRpbmc7XG4mIzQzO1x0Ym9vbCBpbnRlcm5hbF9wY3M7XG4mIzQzO1x0dW5zaWduZWQgaW50IHJlZ3NfbjtcbiYjNDM7XHRpbnQgKCpjbGtfaW5pdCkoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKTtcbiYjNDM7XHR2b2lkICgqc2V0b3B0aW9ucykoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBvcHRpb25zKTtcbiYjNDM7XHR2b2lkICgqcHJvYmVfaW5pdCkoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKTtcbiYjNDM7XHR2b2lkICgqZ3RfcmVzZXQpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCk7XG4mIzQzO1x0aW50ICgqbWFjX2luaXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbiYjNDM7XHR2b2lkICgqbWFjX2xpbmtfdXApKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgc3BlZWQsXG4mIzQzO1x0XHRcdCAgICBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKTtcbiYjNDM7XHR2b2lkICgqZ2V0X3JlZ3MpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwgdTMyICpkYXRhKTtcbiYjNDM7XHR2b2lkICgqcGh5bGlua19zZXRfY2Fwcykoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHBoeWxpbmtfcGNzX29wcyAqcGNzX29wcztcbiYjNDM7XHR2b2lkICgqc3RhdHNfdXBkYXRlKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApO1xuJiM0MztcdHZvaWQgKCpnZXRfc3RhdHM2NCkoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cyk7XG4mIzQzO1x0dm9pZCAoKmdldF9ldGh0b29sX3N0YXRzKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsIHU2NCAqZGF0YSk7XG4mIzQzO1x0dm9pZCAoKmdldF9zdHJpbmdzKSh1OCAqZGF0YSk7XG4mIzQzO1x0aW50ICgqZ2V0X3NzZXRfY291bnQpKHZvaWQpO1xuJiM0MztcdHZvaWQgKCpnZXRfcGF1c2Vfc3RhdHMpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCxcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcGF1c2Vfc3RhdHMpO1xuJiM0MztcdHZvaWQgKCpnZXRfZXRoX21hY19zdGF0cykoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKTtcbiYjNDM7XHR2b2lkICgqZ2V0X2V0aF9jdHJsX3N0YXRzKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IGV0aHRvb2xfZXRoX2N0cmxfc3RhdHMgKmN0cmxfc3RhdHMpO1xuJiM0MztcdHZvaWQgKCpnZXRfcm1vbl9zdGF0cykoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSAqKnJhbmdlcyk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBheGllbmV0X2xvY2FsICpwY3NfdG9fYXhpZW5ldF9sb2NhbChzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCwgcGNzKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBzdHJ1Y3QgYXhpZW5ldF9vcHRpb24gLSBVc2VkIHRvIHNldCBheGkgZXRoZXJuZXQgaGFyZHdhcmUgb3B0aW9uc1xuICAqIEBvcHQ6XHRPcHRpb24gdG8gYmUgc2V0LlxuQEAgLTc0MSw0ICYjNDM7ODI4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGF4aWVuZXRfZG1hX291dF9hZGRyKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwgb2ZmX3QgcmVnLFxuIGludCBheGllbmV0X21kaW9fc2V0dXAoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKTtcbiB2b2lkIGF4aWVuZXRfbWRpb190ZWFyZG93bihzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApO1xuIFxuJiM0MzsvKiBSTU9OIGhpc3RvZ3JhbSByYW5nZXMgc2hhcmVkIGJ5IGFsbCBNQUMgdHlwZXMgKi9cbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSBheGllbmV0X3Jtb25fcmFuZ2VzW107XG4mIzQzO1xuICNlbmRpZiAvKiBYSUxJTlhfQVhJX0VORVRfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jXG5pbmRleCAxNzIyYjcwMzhmMzQwLi41OGUyMmYwZmQ3Yzk1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uY1xuQEAgLTMzLDYgJiM0MzszMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfaXJxLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9hZGRyZXNzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tYXRoNjQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG5AQCAtNjUsMTYgJiM0Mzs2Niw2IEBAXG4gXG4gc3RhdGljIHZvaWQgYXhpZW5ldF9yeF9zdWJtaXRfZGVzYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4gXG4tLyogTWF0Y2ggdGFibGUgZm9yIG9mX3BsYXRmb3JtIGJpbmRpbmcgKi9cbi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBheGllbmV0X29mX21hdGNoW10gPSB7XG4tXHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7eGxueCxheGktZXRoZXJuZXQtMS4wMC5hXCYjMzQ7LCB9LFxuLVx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3hsbngsYXhpLWV0aGVybmV0LTEuMDEuYVwmIzM0OywgfSxcbi1cdHsgLmNvbXBhdGlibGUgPSBcJiMzNDt4bG54LGF4aS1ldGhlcm5ldC0yLjAxLmFcJiMzNDssIH0sXG4tXHR7fSxcbi19O1xuLVxuLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGF4aWVuZXRfb2ZfbWF0Y2gpO1xuLVxuIC8qIE9wdGlvbiB0YWJsZSBmb3Igc2V0dGluZyB1cCBBeGkgRXRoZXJuZXQgaGFyZHdhcmUgb3B0aW9ucyAqL1xuIHN0YXRpYyBzdHJ1Y3QgYXhpZW5ldF9vcHRpb24gYXhpZW5ldF9vcHRpb25zW10gPSB7XG4gXHQvKiBUdXJuIG9uIGp1bWJvIHBhY2tldCBzdXBwb3J0IGZvciBib3RoIFJ4IGFuZCBUeCAqL1xuQEAgLTQxOSw2ICYjNDM7NDEwLDkgQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmRldi1cdTAwM2VkZXZfYWRkcikpXG4gXHRcdGV0aF9od19hZGRyX3JhbmRvbShuZGV2KTtcbiBcbiYjNDM7XHRpZiAoIWxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZXVjX2ZpbHRlcilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHQvKiBTZXQgdXAgdW5pY2FzdCBNQUMgYWRkcmVzcyBmaWx0ZXIgc2V0IGl0cyBtYWMgYWRkcmVzcyAqL1xuIFx0YXhpZW5ldF9pb3cobHAsIFhBRV9VQVcwX09GRlNFVCxcbiBcdFx0ICAgIChuZGV2LVx1MDAzZWRldl9hZGRyWzBdKSB8XG5AQCAtNDY4LDYgJiM0Mzs0NjIsOSBAQCBzdGF0aWMgdm9pZCBheGllbmV0X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdHUzMiByZWcsIGFmMHJlZywgYWYxcmVnO1xuIFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXG4mIzQzO1x0aWYgKCFscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VtY19maWx0ZXIpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0cmVnID0gYXhpZW5ldF9pb3IobHAsIFhBRV9GTUlfT0ZGU0VUKTtcbiBcdHJlZyBcdTAwMjY9IH5YQUVfRk1JX1BNX01BU0s7XG4gXHRpZiAobmRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1BST01JU0MpXG5AQCAtNTc2LDE2ICYjNDM7NTczLDMxIEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfc3RhdHNfdXBkYXRlKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwgYm9vbCByZXNldClcbiBcdHdyaXRlX3NlcWNvdW50X2VuZChcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogYXhpZW5ldF8xZ19zdGF0c191cGRhdGUgLSBSZWZyZXNoIDFHIE1BQyBoYXJkd2FyZSBzdGF0aXN0aWNzXG4mIzQzOyAqIEBscDpcdFx0UG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfc3RhdHNfdXBkYXRlKHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcbiYjNDM7e1xuJiM0MztcdGF4aWVuZXRfc3RhdHNfdXBkYXRlKGxwLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgYXhpZW5ldF9yZWZyZXNoX3N0YXRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF4aWVuZXRfbG9jYWwsXG4gXHRcdFx0XHRcdFx0c3RhdHNfd29yay53b3JrKTtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2bHAtXHUwMDNlc3RhdHNfbG9jayk7XG4tXHRheGllbmV0X3N0YXRzX3VwZGF0ZShscCwgZmFsc2UpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxwLVx1MDAzZXN0YXRzX2xvY2spO1xuJiM0MztcdGlmIChscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VzdGF0c191cGRhdGUpIHtcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2bHAtXHUwMDNlc3RhdHNfbG9jayk7XG4mIzQzO1x0XHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VzdGF0c191cGRhdGUobHApO1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxwLVx1MDAzZXN0YXRzX2xvY2spO1xuJiM0MztcdH1cbiBcbi1cdC8qIEp1c3QgbGVzcyB0aGFuIDJeMzIgYnl0ZXMgYXQgMi41IEdCaXQvcyAqL1xuJiM0MztcdC8qIFJlLWFybSB0aGUgcG9sbCBiZWZvcmUgYW55IGNvdW50ZXIgY2FuIG92ZXJmbG93IGJldHdlZW4gdXBkYXRlczogdGhlXG4mIzQzO1x0ICogMUcgYnl0ZSBjb3VudGVyIHJlYWNoZXMganVzdCB1bmRlciAyXjMyIGluIHRoaXMgaW50ZXJ2YWwgYXQgMi41IEdiaXQvcyxcbiYjNDM7XHQgKiBhbmQgdGhlIFhYViBpbnRlcm5hbCBhY2N1bXVsYXRvcnMgbXVzdCBiZSBsYXRjaGVkICh2aWEgVElDSyBpblxuJiM0MztcdCAqIGF4aWVuZXRfeHh2X3N0YXRzX3VwZGF0ZSgpKSBiZWZvcmUgdGhleSBzYXR1cmF0ZSBhdCBsaW5lIHJhdGUuXG4mIzQzO1x0ICovXG4gXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bHAtXHUwMDNlc3RhdHNfd29yaywgMTMgKiBIWik7XG4gfVxuIFxuQEAgLTU5NCw3ICYjNDM7NjA2LDE2IEBAIHN0YXRpYyBpbnQgX19heGllbmV0X2RldmljZV9yZXNldChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApXG4gXHR1MzIgdmFsdWU7XG4gXHRpbnQgcmV0O1xuIFxuLVx0LyogU2F2ZSBzdGF0aXN0aWNzIGNvdW50ZXJzIGluIGNhc2UgdGhleSB3aWxsIGJlIHJlc2V0ICovXG4mIzQzO1x0LyogU2F2ZSBzdGF0aXN0aWNzIGNvdW50ZXJzIGluIGNhc2UgdGhleSB3aWxsIGJlIHJlc2V0LlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlIFhBRV9GRUFUVVJFX1NUQVRTIGJsb2NrcyBpbiB0aGlzIGZ1bmN0aW9uIHJlYWQgdGhlIFRFTUFDXG4mIzQzO1x0ICogc3RhdGlzdGljcyByZWdpc3RlcnMgYXQgWEFFX1NUQVRTX09GRlNFVCwgaS5lLiB0aGV5IGFzc3VtZSB0aGUgMUdcbiYjNDM7XHQgKiBjb3VudGVyIGxheW91dC4gVGhpcyBpcyBzYWZlIGJlY2F1c2UgX19heGllbmV0X2RldmljZV9yZXNldCgpIGlzXG4mIzQzO1x0ICogb25seSByZWFjaGVkIG9uIHRoZSBsZWdhY3kgKG5vbi1kbWFlbmdpbmUpIERNQSBwYXRoLCB3aGljaCB0aGVcbiYjNDM7XHQgKiBsZWdhY3lfZG1hIGNhcGFiaWxpdHkgcmVzdHJpY3RzIHRvIHRoZSAxRyBNQUMuIE1BQ3MgdGhhdCB1c2UgdGhlaXJcbiYjNDM7XHQgKiBvd24gc3RhdGlzdGljcyBtZWNoYW5pc20gKGUuZy4gWFhWLCB3aGljaCBpcyBkbWFlbmdpbmUtb25seSkgbmV2ZXJcbiYjNDM7XHQgKiBleGVjdXRlIHRoaXMgcGF0aC5cbiYjNDM7XHQgKi9cbiBcdG11dGV4X2xvY2soXHUwMDI2bHAtXHUwMDNlc3RhdHNfbG9jayk7XG4gXHRpZiAobHAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IFhBRV9GRUFUVVJFX1NUQVRTKVxuIFx0XHRheGllbmV0X3N0YXRzX3VwZGF0ZShscCwgdHJ1ZSk7XG5AQCAtNjk0LDYgJiM0Mzs3MTUsMzIgQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9kbWFfc3RvcChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApXG4gXHRheGllbmV0X3VubG9ja19taWkobHApO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGF4aWVuZXRfMWdfbWFjX2luaXQgLSAxRyBNQUMtc3BlY2lmaWMgYnJpbmctdXAgYWZ0ZXIgdGhlIERNQSByZXNldFxuJiM0MzsgKiBAbmRldjpcdFBvaW50ZXIgdG8gdGhlIG5ldF9kZXZpY2Ugc3RydWN0dXJlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYXhpZW5ldF8xZ19tYWNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdHUzMiBheGllbmV0X3N0YXR1cztcbiYjNDM7XG4mIzQzO1x0YXhpZW5ldF9zdGF0dXMgPSBheGllbmV0X2lvcihscCwgWEFFX1JDVzFfT0ZGU0VUKTtcbiYjNDM7XHRheGllbmV0X3N0YXR1cyBcdTAwMjY9IH5YQUVfUkNXMV9SWF9NQVNLO1xuJiM0MztcdGF4aWVuZXRfaW93KGxwLCBYQUVfUkNXMV9PRkZTRVQsIGF4aWVuZXRfc3RhdHVzKTtcbiYjNDM7XG4mIzQzO1x0YXhpZW5ldF9zdGF0dXMgPSBheGllbmV0X2lvcihscCwgWEFFX0lQX09GRlNFVCk7XG4mIzQzO1x0aWYgKGF4aWVuZXRfc3RhdHVzIFx1MDAyNiBYQUVfSU5UX1JYUkpFQ1RfTUFTSylcbiYjNDM7XHRcdGF4aWVuZXRfaW93KGxwLCBYQUVfSVNfT0ZGU0VULCBYQUVfSU5UX1JYUkpFQ1RfTUFTSyk7XG4mIzQzO1x0YXhpZW5ldF9pb3cobHAsIFhBRV9JRV9PRkZTRVQsIGxwLVx1MDAzZWV0aF9pcnEgXHUwMDNlIDAgP1xuJiM0MztcdFx0ICAgIFhBRV9JTlRfUkVDVl9FUlJPUl9NQVNLIDogMCk7XG4mIzQzO1xuJiM0MztcdGF4aWVuZXRfaW93KGxwLCBYQUVfRkNDX09GRlNFVCwgWEFFX0ZDQ19GQ1JYX01BU0spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBheGllbmV0X2RldmljZV9yZXNldCAtIFJlc2V0IGFuZCBpbml0aWFsaXplIHRoZSBBeGkgRXRoZXJuZXQgaGFyZHdhcmUuXG4gICogQG5kZXY6XHRQb2ludGVyIHRvIHRoZSBuZXRfZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTcwOSwxOSAmIzQzOzc1NiwyMyBAQCBzdGF0aWMgdm9pZCBheGllbmV0X2RtYV9zdG9wKHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcbiAgKi9cbiBzdGF0aWMgaW50IGF4aWVuZXRfZGV2aWNlX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHtcbi1cdHUzMiBheGllbmV0X3N0YXR1cztcbiBcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0aW50IHJldDtcbiBcbiYjNDM7XHRpZiAobHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ3RfcmVzZXQpXG4mIzQzO1x0XHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VndF9yZXNldChscCk7XG4mIzQzO1xuIFx0bHAtXHUwMDNlbWF4X2ZybV9zaXplID0gWEFFX01BWF9WTEFOX0ZSQU1FX1NJWkU7XG4tXHRscC1cdTAwM2VvcHRpb25zIHw9IFhBRV9PUFRJT05fVkxBTjtcbiYjNDM7XG4mIzQzO1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZXZsYW4pXG4mIzQzO1x0XHRscC1cdTAwM2VvcHRpb25zIHw9IFhBRV9PUFRJT05fVkxBTjtcbiBcdGxwLVx1MDAzZW9wdGlvbnMgXHUwMDI2PSAoflhBRV9PUFRJT05fSlVNQk8pO1xuIFxuIFx0aWYgKG5kZXYtXHUwMDNlbXR1IFx1MDAzZSBYQUVfTVRVIFx1MDAyNlx1MDAyNiBuZGV2LVx1MDAzZW10dSBcdTAwM2M9IFhBRV9KVU1CT19NVFUpIHtcbiBcdFx0bHAtXHUwMDNlbWF4X2ZybV9zaXplID0gbmRldi1cdTAwM2VtdHUgJiM0MzsgVkxBTl9FVEhfSExFTiAmIzQzO1xuIFx0XHRcdFx0XHRYQUVfVFJMX1NJWkU7XG4gXG4tXHRcdGlmIChscC1cdTAwM2VtYXhfZnJtX3NpemUgXHUwMDNjPSBscC1cdTAwM2VyeG1lbSlcbiYjNDM7XHRcdGlmIChscC1cdTAwM2VtYXhfZnJtX3NpemUgXHUwMDNjPSBscC1cdTAwM2VyeG1lbSBcdTAwMjZcdTAwMjYgbHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlanVtYm8pXG4gXHRcdFx0bHAtXHUwMDNlb3B0aW9ucyB8PSBYQUVfT1BUSU9OX0pVTUJPO1xuIFx0fVxuIFxuQEAgLTczOCwyNiAmIzQzOzc4OSwxOCBAQCBzdGF0aWMgaW50IGF4aWVuZXRfZGV2aWNlX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRheGllbmV0X3N0YXR1cyA9IGF4aWVuZXRfaW9yKGxwLCBYQUVfUkNXMV9PRkZTRVQpO1xuLVx0YXhpZW5ldF9zdGF0dXMgXHUwMDI2PSB+WEFFX1JDVzFfUlhfTUFTSztcbi1cdGF4aWVuZXRfaW93KGxwLCBYQUVfUkNXMV9PRkZTRVQsIGF4aWVuZXRfc3RhdHVzKTtcbi1cbi1cdGF4aWVuZXRfc3RhdHVzID0gYXhpZW5ldF9pb3IobHAsIFhBRV9JUF9PRkZTRVQpO1xuLVx0aWYgKGF4aWVuZXRfc3RhdHVzIFx1MDAyNiBYQUVfSU5UX1JYUkpFQ1RfTUFTSylcbi1cdFx0YXhpZW5ldF9pb3cobHAsIFhBRV9JU19PRkZTRVQsIFhBRV9JTlRfUlhSSkVDVF9NQVNLKTtcbi1cdGF4aWVuZXRfaW93KGxwLCBYQUVfSUVfT0ZGU0VULCBscC1cdTAwM2VldGhfaXJxIFx1MDAzZSAwID9cbi1cdFx0ICAgIFhBRV9JTlRfUkVDVl9FUlJPUl9NQVNLIDogMCk7XG4tXG4tXHRheGllbmV0X2lvdyhscCwgWEFFX0ZDQ19PRkZTRVQsIFhBRV9GQ0NfRkNSWF9NQVNLKTtcbiYjNDM7XHRyZXQgPSBscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VtYWNfaW5pdChuZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbiBcdC8qIFN5bmMgZGVmYXVsdCBvcHRpb25zIHdpdGggSFcgYnV0IGxlYXZlIHJlY2VpdmVyIGFuZFxuIFx0ICogdHJhbnNtaXR0ZXIgZGlzYWJsZWQuXG4gXHQgKi9cbi1cdGF4aWVuZXRfc2V0b3B0aW9ucyhuZGV2LCBscC1cdTAwM2VvcHRpb25zIFx1MDAyNlxuLVx0XHRcdCAgIH4oWEFFX09QVElPTl9UWEVOIHwgWEFFX09QVElPTl9SWEVOKSk7XG4mIzQzO1x0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlc2V0b3B0aW9ucyhuZGV2LCBscC1cdTAwM2VvcHRpb25zIFx1MDAyNlxuJiM0MztcdFx0XHRcdCAgICAgICB+KFhBRV9PUFRJT05fVFhFTiB8IFhBRV9PUFRJT05fUlhFTikpO1xuIFx0YXhpZW5ldF9zZXRfbWFjX2FkZHJlc3MobmRldiwgTlVMTCk7XG4gXHRheGllbmV0X3NldF9tdWx0aWNhc3RfbGlzdChuZGV2KTtcbi1cdGF4aWVuZXRfc2V0b3B0aW9ucyhuZGV2LCBscC1cdTAwM2VvcHRpb25zKTtcbiYjNDM7XHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VzZXRvcHRpb25zKG5kZXYsIGxwLVx1MDAzZW9wdGlvbnMpO1xuIFxuIFx0bmV0aWZfdHJhbnNfdXBkYXRlKG5kZXYpO1xuIFxuQEAgLTkxNSw2ICYjNDM7OTU4LDEzIEBAIGF4aWVuZXRfc3RhcnRfeG1pdF9kbWFlbmdpbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRpbnQgc2dfbGVuO1xuIFx0aW50IHJldDtcbiBcbiYjNDM7XHRpZiAobHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlc3dfcGFkZGluZyBcdTAwMjZcdTAwMjYgZXRoX3NrYl9wYWQoc2tiKSkge1xuJiM0MztcdFx0LyogUGFkIHNob3J0IGZyYW1lczsgdGhlIE1BQyBkb2VzIG5vdCBhcHBlbmQgRXRoZXJuZXQgcGFkZGluZy4gKi9cbiYjNDM7XHRcdG5kZXYtXHUwMDNlc3RhdHMudHhfZHJvcHBlZCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRuZGV2LVx1MDAzZXN0YXRzLnR4X2Vycm9ycyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRyZXR1cm4gTkVUREVWX1RYX09LO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRkbWFfZGV2ID0gbHAtXHUwMDNldHhfY2hhbi1cdTAwM2VkZXZpY2U7XG4gXHRzZ19sZW4gPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3MgJiM0MzsgMTtcbiBcdGlmIChDSVJDX1NQQUNFKGxwLVx1MDAzZXR4X3JpbmdfaGVhZCwgbHAtXHUwMDNldHhfcmluZ190YWlsLCBUWF9CRF9OVU1fTUFYKSBcdTAwM2M9IDEpIHtcbkBAIC05MzksMTkgJiM0Mzs5ODksMjEgQEAgYXhpZW5ldF9zdGFydF94bWl0X2RtYWVuZ2luZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdFx0Z290byB4bWl0X2Vycm9yX2Ryb3Bfc2tiO1xuIFxuIFx0LyogRmlsbCB1cCBhcHAgZmllbGRzIGZvciBjaGVja3N1bSAqL1xuLVx0aWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xuLVx0XHRpZiAobHAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IFhBRV9GRUFUVVJFX0ZVTExfVFhfQ1NVTSkge1xuLVx0XHRcdC8qIFR4IEZ1bGwgQ2hlY2tzdW0gT2ZmbG9hZCBFbmFibGVkICovXG4tXHRcdFx0YXBwX21ldGFkYXRhWzBdIHw9IDI7XG4tXHRcdH0gZWxzZSBpZiAobHAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IFhBRV9GRUFUVVJFX1BBUlRJQUxfVFhfQ1NVTSkge1xuLVx0XHRcdGNzdW1fc3RhcnRfb2ZmID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTtcbi1cdFx0XHRjc3VtX2luZGV4X29mZiA9IGNzdW1fc3RhcnRfb2ZmICYjNDM7IHNrYi1cdTAwM2Vjc3VtX29mZnNldDtcbi1cdFx0XHQvKiBUeCBQYXJ0aWFsIENoZWNrc3VtIE9mZmxvYWQgRW5hYmxlZCAqL1xuLVx0XHRcdGFwcF9tZXRhZGF0YVswXSB8PSAxO1xuLVx0XHRcdGFwcF9tZXRhZGF0YVsxXSA9IChjc3VtX3N0YXJ0X29mZiBcdTAwM2NcdTAwM2MgMTYpIHwgY3N1bV9pbmRleF9vZmY7XG4mIzQzO1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWRtYV90eF9jc3VtKSB7XG4mIzQzO1x0XHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7XG4mIzQzO1x0XHRcdGlmIChscC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgWEFFX0ZFQVRVUkVfRlVMTF9UWF9DU1VNKSB7XG4mIzQzO1x0XHRcdFx0LyogVHggRnVsbCBDaGVja3N1bSBPZmZsb2FkIEVuYWJsZWQgKi9cbiYjNDM7XHRcdFx0XHRhcHBfbWV0YWRhdGFbMF0gfD0gMjtcbiYjNDM7XHRcdFx0fSBlbHNlIGlmIChscC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgWEFFX0ZFQVRVUkVfUEFSVElBTF9UWF9DU1VNKSB7XG4mIzQzO1x0XHRcdFx0Y3N1bV9zdGFydF9vZmYgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xuJiM0MztcdFx0XHRcdGNzdW1faW5kZXhfb2ZmID0gY3N1bV9zdGFydF9vZmYgJiM0Mzsgc2tiLVx1MDAzZWNzdW1fb2Zmc2V0O1xuJiM0MztcdFx0XHRcdC8qIFR4IFBhcnRpYWwgQ2hlY2tzdW0gT2ZmbG9hZCBFbmFibGVkICovXG4mIzQzO1x0XHRcdFx0YXBwX21ldGFkYXRhWzBdIHw9IDE7XG4mIzQzO1x0XHRcdFx0YXBwX21ldGFkYXRhWzFdID0gKGNzdW1fc3RhcnRfb2ZmIFx1MDAzY1x1MDAzYyAxNikgfCBjc3VtX2luZGV4X29mZjtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fSBlbHNlIGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7XG4mIzQzO1x0XHRcdGFwcF9tZXRhZGF0YVswXSB8PSAyOyAvKiBUeCBGdWxsIENoZWNrc3VtIE9mZmxvYWQgRW5hYmxlZCAqL1xuIFx0XHR9XG4tXHR9IGVsc2UgaWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHtcbi1cdFx0YXBwX21ldGFkYXRhWzBdIHw9IDI7IC8qIFR4IEZ1bGwgQ2hlY2tzdW0gT2ZmbG9hZCBFbmFibGVkICovXG4gXHR9XG4gXG4gXHRkbWFfdHhfZGVzYyA9IGRtYV9kZXYtXHUwMDNlZGV2aWNlX3ByZXBfc2xhdmVfc2cobHAtXHUwMDNldHhfY2hhbiwgc2tidWZfZG1hLVx1MDAzZXNnbCxcbkBAIC0xNjcwLDYgJiM0MzsxNzIyLDEwIEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0YXhpZW5ldF9sb2NrX21paShscCk7XG4gXHRyZXQgPSBheGllbmV0X2RldmljZV9yZXNldChuZGV2KTtcbiBcdGF4aWVuZXRfdW5sb2NrX21paShscCk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihscC1cdTAwM2VkZXYsIFwmIzM0O2F4aWVuZXRfZGV2aWNlX3Jlc2V0KCkgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuIFxuIFx0cmV0ID0gcGh5bGlua19vZl9waHlfY29ubmVjdChscC1cdTAwM2VwaHlsaW5rLCBscC1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZSwgMCk7XG4gXHRpZiAocmV0KSB7XG5AQCAtMTczOCwxMiAmIzQzOzE3OTQsMTcgQEAgc3RhdGljIGludCBheGllbmV0X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmxwLVx1MDAzZXJ4X2RpbS53b3JrKTtcbiBcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZscC1cdTAwM2VzdGF0c193b3JrKTtcbiYjNDM7XHRpZiAobHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlc3RhdHNfdXBkYXRlKSB7XG4mIzQzO1x0XHRtdXRleF9sb2NrKFx1MDAyNmxwLVx1MDAzZXN0YXRzX2xvY2spO1xuJiM0MztcdFx0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlc3RhdHNfdXBkYXRlKGxwKTtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZscC1cdTAwM2VzdGF0c19sb2NrKTtcbiYjNDM7XHR9XG4gXG4gXHRwaHlsaW5rX3N0b3AobHAtXHUwMDNlcGh5bGluayk7XG4gXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KGxwLVx1MDAzZXBoeWxpbmspO1xuIFxuLVx0YXhpZW5ldF9zZXRvcHRpb25zKG5kZXYsIGxwLVx1MDAzZW9wdGlvbnMgXHUwMDI2XG4tXHRcdFx0ICAgfihYQUVfT1BUSU9OX1RYRU4gfCBYQUVfT1BUSU9OX1JYRU4pKTtcbiYjNDM7XHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VzZXRvcHRpb25zKG5kZXYsIGxwLVx1MDAzZW9wdGlvbnMgXHUwMDI2XG4mIzQzO1x0XHRcdFx0ICAgICAgIH4oWEFFX09QVElPTl9UWEVOIHwgWEFFX09QVElPTl9SWEVOKSk7XG4gXG4gXHRpZiAoIWxwLVx1MDAzZXVzZV9kbWFlbmdpbmUpIHtcbiBcdFx0YXhpZW5ldF9kbWFfc3RvcChscCk7XG5AQCAtMTc2OSw3ICYjNDM7MTgzMCw4IEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0fVxuIFxuIFx0bmV0ZGV2X3Jlc2V0X3F1ZXVlKG5kZXYpO1xuLVx0YXhpZW5ldF9pb3cobHAsIFhBRV9JRV9PRkZTRVQsIDApO1xuJiM0MztcdGlmIChscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VtYWNfaXJxKVxuJiM0MztcdFx0YXhpZW5ldF9pb3cobHAsIFhBRV9JRV9PRkZTRVQsIDApO1xuIFxuIFx0aWYgKGxwLVx1MDAzZWV0aF9pcnEgXHUwMDNlIDApXG4gXHRcdGZyZWVfaXJxKGxwLVx1MDAzZWV0aF9pcnEsIG5kZXYpO1xuQEAgLTE4MzQsMjkgJiM0MzsxODk2LDExIEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKVxuIFx0cmV0dXJuIHBoeWxpbmtfbWlpX2lvY3RsKGxwLVx1MDAzZXBoeWxpbmssIHJxLCBjbWQpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZFxuLWF4aWVuZXRfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cylcbiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF8xZ19nZXRfc3RhdHM2NChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cylcbiB7XG4tXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0dW5zaWduZWQgaW50IHN0YXJ0O1xuIFxuLVx0bmV0ZGV2X3N0YXRzX3RvX3N0YXRzNjQoc3RhdHMsIFx1MDAyNmRldi1cdTAwM2VzdGF0cyk7XG4tXG4tXHRkbyB7XG4tXHRcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFx1MDAyNmxwLVx1MDAzZXJ4X3N0YXRfc3luYyk7XG4tXHRcdHN0YXRzLVx1MDAzZXJ4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZscC1cdTAwM2VyeF9wYWNrZXRzKTtcbi1cdFx0c3RhdHMtXHUwMDNlcnhfYnl0ZXMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZscC1cdTAwM2VyeF9ieXRlcyk7XG4tXHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXHUwMDI2bHAtXHUwMDNlcnhfc3RhdF9zeW5jLCBzdGFydCkpO1xuLVxuLVx0ZG8ge1xuLVx0XHRzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihcdTAwMjZscC1cdTAwM2V0eF9zdGF0X3N5bmMpO1xuLVx0XHRzdGF0cy1cdTAwM2V0eF9wYWNrZXRzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bHAtXHUwMDNldHhfcGFja2V0cyk7XG4tXHRcdHN0YXRzLVx1MDAzZXR4X2J5dGVzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bHAtXHUwMDNldHhfYnl0ZXMpO1xuLVx0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFx1MDAyNmxwLVx1MDAzZXR4X3N0YXRfc3luYywgc3RhcnQpKTtcbi1cbi1cdGlmICghKGxwLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXG4tXHRcdHJldHVybjtcbi1cbiBcdGRvIHtcbiBcdFx0c3RhcnQgPSByZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcbiBcdFx0c3RhdHMtXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyA9XG5AQCAtMTg4NCw2ICYjNDM7MTkyOCwzMyBAQCBheGllbmV0X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXG4gXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7YXhpZW5ldF9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4mIzQzO1xuJiM0MztcdG5ldGRldl9zdGF0c190b19zdGF0czY0KHN0YXRzLCBcdTAwMjZkZXYtXHUwMDNlc3RhdHMpO1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihcdTAwMjZscC1cdTAwM2VyeF9zdGF0X3N5bmMpO1xuJiM0MztcdFx0c3RhdHMtXHUwMDNlcnhfcGFja2V0cyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNmxwLVx1MDAzZXJ4X3BhY2tldHMpO1xuJiM0MztcdFx0c3RhdHMtXHUwMDNlcnhfYnl0ZXMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZscC1cdTAwM2VyeF9ieXRlcyk7XG4mIzQzO1x0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFx1MDAyNmxwLVx1MDAzZXJ4X3N0YXRfc3luYywgc3RhcnQpKTtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXHUwMDI2bHAtXHUwMDNldHhfc3RhdF9zeW5jKTtcbiYjNDM7XHRcdHN0YXRzLVx1MDAzZXR4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZscC1cdTAwM2V0eF9wYWNrZXRzKTtcbiYjNDM7XHRcdHN0YXRzLVx1MDAzZXR4X2J5dGVzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bHAtXHUwMDNldHhfYnl0ZXMpO1xuJiM0MztcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcdTAwMjZscC1cdTAwM2V0eF9zdGF0X3N5bmMsIHN0YXJ0KSk7XG4mIzQzO1xuJiM0MztcdGlmICghKGxwLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VnZXRfc3RhdHM2NClcbiYjNDM7XHRcdGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWdldF9zdGF0czY0KGxwLCBzdGF0cyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBheGllbmV0X25ldGRldl9vcHMgPSB7XG4gXHQubmRvX29wZW4gPSBheGllbmV0X29wZW4sXG4gXHQubmRvX3N0b3AgPSBheGllbmV0X3N0b3AsXG5AQCAtMTkzOCwzMCAmIzQzOzIwMDksMTggQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiAgKi9cbiBzdGF0aWMgaW50IGF4aWVuZXRfZXRodG9vbHNfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHtcbi1cdHJldHVybiBzaXplb2YodTMyKSAqIEFYSUVORVRfUkVHU19OO1xuJiM0MztcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2l6ZW9mKHUzMikgKiBscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VyZWdzX247XG4gfVxuIFxuIC8qKlxuLSAqIGF4aWVuZXRfZXRodG9vbHNfZ2V0X3JlZ3MgLSBEdW1wIHRoZSBjb250ZW50cyBvZiBhbGwgcmVnaXN0ZXJzIHByZXNlbnRcbi0gKlx0XHRcdCAgICAgICBpbiBBeGlFdGhlcm5ldCBjb3JlLlxuLSAqIEBuZGV2Olx0UG9pbnRlciB0byBuZXRfZGV2aWNlIHN0cnVjdHVyZVxuLSAqIEByZWdzOlx0UG9pbnRlciB0byBldGh0b29sX3JlZ3Mgc3RydWN0dXJlXG4tICogQHJldDpcdFZvaWQgcG9pbnRlciB1c2VkIHRvIHJldHVybiB0aGUgY29udGVudHMgb2YgdGhlIHJlZ2lzdGVycy5cbi0gKlxuLSAqIFRoaXMgaW1wbGVtZW50cyBldGh0b29sIGNvbW1hbmQgZm9yIGdldHRpbmcgdGhlIEF4aSBFdGhlcm5ldCByZWdpc3RlciBkdW1wLlxuLSAqIElzc3VlIFwmIzM0O2V0aHRvb2wgLWQgZXRoWFwmIzM0OyB0byBleGVjdXRlIHRoaXMgZnVuY3Rpb24uXG4mIzQzOyAqIGF4aWVuZXRfMWdfZ2V0X3JlZ3MgLSBEdW1wIDFHIE1BQyByZWdpc3RlcnMgZm9yIGV0aHRvb2xcbiYjNDM7ICogQGxwOlx0XHRQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuJiM0MzsgKiBAZGF0YTpcdEJ1ZmZlciBmb3IgcmVnaXN0ZXIgdmFsdWVzICh6ZXJvZWQgYW5kIHNpemVkIGJ5IHRoZSBjYWxsZXIpXG4gICovXG4tc3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbi1cdFx0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsIHZvaWQgKnJldClcbiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF8xZ19nZXRfcmVncyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsIHUzMiAqZGF0YSlcbiB7XG4tXHR1MzIgKmRhdGEgPSAodTMyICopcmV0O1xuLVx0c2l6ZV90IGxlbiA9IHNpemVvZih1MzIpICogQVhJRU5FVF9SRUdTX047XG4tXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cbi1cdHJlZ3MtXHUwMDNldmVyc2lvbiA9IDA7XG4tXHRyZWdzLVx1MDAzZWxlbiA9IGxlbjtcbi1cbi1cdG1lbXNldChkYXRhLCAwLCBsZW4pO1xuIFx0ZGF0YVswXSA9IGF4aWVuZXRfaW9yKGxwLCBYQUVfUkFGX09GRlNFVCk7XG4gXHRkYXRhWzFdID0gYXhpZW5ldF9pb3IobHAsIFhBRV9UUEZfT0ZGU0VUKTtcbiBcdGRhdGFbMl0gPSBheGllbmV0X2lvcihscCwgWEFFX0lGR1BfT0ZGU0VUKTtcbkBAIC0yMDAyLDYgJiM0MzsyMDYxLDMxIEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfZXRodG9vbHNfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHR9XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogYXhpZW5ldF9ldGh0b29sc19nZXRfcmVncyAtIER1bXAgdGhlIGNvbnRlbnRzIG9mIGFsbCByZWdpc3RlcnMgcHJlc2VudFxuJiM0MzsgKlx0XHRcdCAgICAgICBpbiBBeGlFdGhlcm5ldCBjb3JlLlxuJiM0MzsgKiBAbmRldjpcdFBvaW50ZXIgdG8gbmV0X2RldmljZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQHJlZ3M6XHRQb2ludGVyIHRvIGV0aHRvb2xfcmVncyBzdHJ1Y3R1cmVcbiYjNDM7ICogQHJldDpcdFZvaWQgcG9pbnRlciB1c2VkIHRvIHJldHVybiB0aGUgY29udGVudHMgb2YgdGhlIHJlZ2lzdGVycy5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBpbXBsZW1lbnRzIGV0aHRvb2wgY29tbWFuZCBmb3IgZ2V0dGluZyB0aGUgQXhpIEV0aGVybmV0IHJlZ2lzdGVyIGR1bXAuXG4mIzQzOyAqIElzc3VlIFwmIzM0O2V0aHRvb2wgLWQgZXRoWFwmIzM0OyB0byBleGVjdXRlIHRoaXMgZnVuY3Rpb24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBheGllbmV0X2V0aHRvb2xzX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsIHZvaWQgKnJldClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdHUzMiAqZGF0YSA9ICh1MzIgKilyZXQ7XG4mIzQzO1x0c2l6ZV90IGxlbjtcbiYjNDM7XG4mIzQzO1x0bGVuID0gc2l6ZW9mKHUzMikgKiBscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VyZWdzX247XG4mIzQzO1x0cmVncy1cdTAwM2V2ZXJzaW9uID0gMDtcbiYjNDM7XHRyZWdzLVx1MDAzZWxlbiA9IGxlbjtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KGRhdGEsIDAsIGxlbik7XG4mIzQzO1x0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X3JlZ3MobHAsIGRhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkXG4gYXhpZW5ldF9ldGh0b29sc19nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyaW5nLFxuQEAgLTIzMDMsMTEgJiM0MzsyMzg3LDggQEAgc3RhdGljIGludCBheGllbmV0X2V0aHRvb2xzX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldChscC1cdTAwM2VwaHlsaW5rKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLVx0XHRcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLFxuLVx0XHRcdFx0XHQgICAgICAgdTY0ICpkYXRhKVxuJiM0MztzdGF0aWMgdm9pZCBheGllbmV0XzFnX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwgdTY0ICpkYXRhKVxuIHtcbi1cdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7XG4gXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4gXG4gXHRkbyB7XG5AQCAtMjMyNCw2ICYjNDM7MjQwNSwxNyBAQCBzdGF0aWMgdm9pZCBheGllbmV0X2V0aHRvb2xzX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBldGh0b29sX3N0YXRzICpzdGF0cyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICB1NjQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAobHAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IFhBRV9GRUFUVVJFX1NUQVRTIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VnZXRfZXRodG9vbF9zdGF0cylcbiYjNDM7XHRcdGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWdldF9ldGh0b29sX3N0YXRzKGxwLCBkYXRhKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3QgY2hhciBheGllbmV0X2V0aHRvb2xfc3RhdHNfc3RyaW5nc1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7XG4gXHRcJiMzNDtSZWNlaXZlZCBieXRlc1wmIzM0OyxcbiBcdFwmIzM0O1RyYW5zbWl0dGVkIGJ5dGVzXCYjMzQ7LFxuQEAgLTIzMzYsMTIgJiM0MzsyNDI4LDI2IEBAIHN0YXRpYyBjb25zdCBjaGFyIGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHtcbiBcdFwmIzM0O1VzZXIgRGVmaW5lZCBDb3VudGVyIDJcJiMzNDssXG4gfTtcbiBcbiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF8xZ19nZXRfc3RyaW5ncyh1OCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdG1lbWNweShkYXRhLCBheGllbmV0X2V0aHRvb2xfc3RhdHNfc3RyaW5ncyxcbiYjNDM7XHQgICAgICAgc2l6ZW9mKGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYXhpZW5ldF8xZ19nZXRfc3NldF9jb3VudCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIEFSUkFZX1NJWkUoYXhpZW5ldF9ldGh0b29sX3N0YXRzX3N0cmluZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGF4aWVuZXRfZXRodG9vbHNfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0cmluZ3NldCwgdTggKmRhdGEpXG4ge1xuJiM0MztcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1xuIFx0c3dpdGNoIChzdHJpbmdzZXQpIHtcbiBcdGNhc2UgRVRIX1NTX1NUQVRTOlxuLVx0XHRtZW1jcHkoZGF0YSwgYXhpZW5ldF9ldGh0b29sX3N0YXRzX3N0cmluZ3MsXG4tXHRcdCAgICAgICBzaXplb2YoYXhpZW5ldF9ldGh0b29sX3N0YXRzX3N0cmluZ3MpKTtcbiYjNDM7XHRcdGlmIChscC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgWEFFX0ZFQVRVUkVfU1RBVFMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgbHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X3N0cmluZ3MpXG4mIzQzO1x0XHRcdGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWdldF9zdHJpbmdzKGRhdGEpO1xuIFx0XHRicmVhaztcbiBcdH1cbiB9XG5AQCAtMjM1MiwyNCAmIzQzOzI0NTgsMjAgQEAgc3RhdGljIGludCBheGllbmV0X2V0aHRvb2xzX2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzc2V0KVxuIFxuIFx0c3dpdGNoIChzc2V0KSB7XG4gXHRjYXNlIEVUSF9TU19TVEFUUzpcbi1cdFx0aWYgKGxwLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUylcbi1cdFx0XHRyZXR1cm4gQVJSQVlfU0laRShheGllbmV0X2V0aHRvb2xfc3RhdHNfc3RyaW5ncyk7XG4mIzQzO1x0XHRpZiAobHAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IFhBRV9GRUFUVVJFX1NUQVRTIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWdldF9zc2V0X2NvdW50KVxuJiM0MztcdFx0XHRyZXR1cm4gbHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X3NzZXRfY291bnQoKTtcbiBcdFx0ZmFsbHRocm91Z2g7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gfVxuIFxuLXN0YXRpYyB2b2lkXG4tYXhpZW5ldF9ldGh0b29sc19nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHRcdCBzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcGF1c2Vfc3RhdHMpXG4mIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKVxuIHtcbi1cdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7XG4gXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4gXG4tXHRpZiAoIShscC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgWEFFX0ZFQVRVUkVfU1RBVFMpKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRkbyB7XG4gXHRcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4gXHRcdHBhdXNlX3N0YXRzLVx1MDAzZXR4X3BhdXNlX2ZyYW1lcyA9XG5AQCAtMjM4MCwxNSAmIzQzOzI0ODIsMjMgQEAgYXhpZW5ldF9ldGh0b29sc19nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiB9XG4gXG4gc3RhdGljIHZvaWRcbi1heGllbmV0X2V0aHRvb2xfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHRcdCAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKVxuJiM0MztheGllbmV0X2V0aHRvb2xzX2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcGF1c2Vfc3RhdHMpXG4ge1xuIFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdHVuc2lnbmVkIGludCBzdGFydDtcbiBcbiBcdGlmICghKGxwLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRpZiAobHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X3BhdXNlX3N0YXRzKVxuJiM0MztcdFx0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X3BhdXNlX3N0YXRzKGxwLCBwYXVzZV9zdGF0cyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBzdGFydDtcbiYjNDM7XG4gXHRkbyB7XG4gXHRcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4gXHRcdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNUcmFuc21pdHRlZE9LID1cbkBAIC0yNDI1LDE1ICYjNDM7MjUzNSwyNCBAQCBheGllbmV0X2V0aHRvb2xfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiB9XG4gXG4gc3RhdGljIHZvaWRcbi1heGllbmV0X2V0aHRvb2xfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tXHRcdFx0XHQgICBzdHJ1Y3QgZXRodG9vbF9ldGhfY3RybF9zdGF0cyAqY3RybF9zdGF0cylcbiYjNDM7YXhpZW5ldF9ldGh0b29sX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpXG4ge1xuIFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdHVuc2lnbmVkIGludCBzdGFydDtcbiBcbiBcdGlmICghKGxwLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRpZiAobHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X2V0aF9tYWNfc3RhdHMpXG4mIzQzO1x0XHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VnZXRfZXRoX21hY19zdGF0cyhscCwgbWFjX3N0YXRzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7YXhpZW5ldF8xZ19nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfY3RybF9zdGF0cyAqY3RybF9zdGF0cylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBzdGFydDtcbiYjNDM7XG4gXHRkbyB7XG4gXHRcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4gXHRcdGN0cmxfc3RhdHMtXHUwMDNlTUFDQ29udHJvbEZyYW1lc1RyYW5zbWl0dGVkID1cbkBAIC0yNDQ1LDcgJiM0MzsyNTY0LDIwIEBAIGF4aWVuZXRfZXRodG9vbF9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdH0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2bHAtXHUwMDNlaHdfc3RhdHNfc2VxY291bnQsIHN0YXJ0KSk7XG4gfVxuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgYXhpZW5ldF9ybW9uX3Jhbmdlc1tdID0ge1xuJiM0MztzdGF0aWMgdm9pZFxuJiM0MztheGllbmV0X2V0aHRvb2xfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IGV0aHRvb2xfZXRoX2N0cmxfc3RhdHMgKmN0cmxfc3RhdHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoIShscC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgWEFFX0ZFQVRVUkVfU1RBVFMpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAobHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X2V0aF9jdHJsX3N0YXRzKVxuJiM0MztcdFx0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X2V0aF9jdHJsX3N0YXRzKGxwLCBjdHJsX3N0YXRzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIGF4aWVuZXRfcm1vbl9yYW5nZXNbXSA9IHtcbiBcdHsgICA2NCwgICAgNjQgfSxcbiBcdHsgICA2NSwgICAxMjcgfSxcbiBcdHsgIDEyOCwgICAyNTUgfSxcbkBAIC0yNDU3LDE2ICYjNDM7MjU4OSwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIGF4aWVuZXRfcm1vbl9yYW5nZXNbXSA9IHtcbiB9O1xuIFxuIHN0YXRpYyB2b2lkXG4tYXhpZW5ldF9ldGh0b29sX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tXHRcdFx0ICAgICAgIHN0cnVjdCBldGh0b29sX3Jtb25fc3RhdHMgKnJtb25fc3RhdHMsXG4tXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSAqKnJhbmdlcylcbiYjNDM7YXhpZW5ldF8xZ19nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXG4mIzQzO1x0XHRcdCAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcbiYjNDM7XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpXG4ge1xuLVx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHVuc2lnbmVkIGludCBzdGFydDtcbiBcbi1cdGlmICghKGxwLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXG4tXHRcdHJldHVybjtcbi1cbiBcdGRvIHtcbiBcdFx0c3RhcnQgPSByZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcbiBcdFx0cm1vbl9zdGF0cy1cdTAwM2V1bmRlcnNpemVfcGt0cyA9XG5AQCAtMjUxMCw2ICYjNDM7MjYzOCwyMCBAQCBheGllbmV0X2V0aHRvb2xfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdCpyYW5nZXMgPSBheGllbmV0X3Jtb25fcmFuZ2VzO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7YXhpZW5ldF9ldGh0b29sX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxuJiM0MztcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlICoqcmFuZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCEobHAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IFhBRV9GRUFUVVJFX1NUQVRTKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWdldF9ybW9uX3N0YXRzKVxuJiM0MztcdFx0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X3Jtb25fc3RhdHMobHAsIHJtb25fc3RhdHMsIHJhbmdlcyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBheGllbmV0X2V0aHRvb2xfb3BzID0ge1xuIFx0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgPSBFVEhUT09MX0NPQUxFU0NFX01BWF9GUkFNRVMgfFxuIFx0XHRcdFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX1VTRUNTIHxcbkBAIC0yNTU1LDExICYjNDM7MjY5Nyw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXhpZW5ldF9ldGh0b29sX2RtYWVuZ2luZV9vcHMgPSB7XG4gXHQuZ2V0X3Jtb25fc3RhdHMgPSBheGllbmV0X2V0aHRvb2xfZ2V0X3Jtb25fc3RhdHMsXG4gfTtcbiBcbi1zdGF0aWMgc3RydWN0IGF4aWVuZXRfbG9jYWwgKnBjc190b19heGllbmV0X2xvY2FsKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxuLXtcbi1cdHJldHVybiBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCwgcGNzKTtcbi19XG4tXG4gc3RhdGljIHZvaWQgYXhpZW5ldF9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgbmVnX21vZGUsXG4gXHRcdFx0XHQgIHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuQEAgLTI2MTksNyAmIzQzOzI3NTYsOSBAQCBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpheGllbmV0X21hY19zZWxlY3RfcGNzKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuIFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXG4gXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHxcbi1cdCAgICBpbnRlcmZhY2UgPT0gIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSlcbiYjNDM7XHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSB8fFxuJiM0MztcdCAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSIHx8XG4mIzQzO1x0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMjVHQkFTRVIpXG4gXHRcdHJldHVybiBcdTAwMjZscC1cdTAwM2VwY3M7XG4gXG4gXHRyZXR1cm4gTlVMTDtcbkBAIC0yNjM4LDEzICYjNDM7Mjc3Nyw5IEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcdC8qIG5vdGhpbmcgbWVhbmluZ2Z1bCB0byBkbyAqL1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBheGllbmV0X21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuLVx0XHRcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbi1cdFx0XHRcdHVuc2lnbmVkIGludCBtb2RlLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxuLVx0XHRcdFx0aW50IHNwZWVkLCBpbnQgZHVwbGV4LFxuLVx0XHRcdFx0Ym9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSlcbiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF8xZ19tYWNfbGlua191cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IHNwZWVkLFxuJiM0MztcdFx0XHRcdCAgIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSB0b19uZXRfZGV2KGNvbmZpZy1cdTAwM2VkZXYpO1xuIFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHR1MzIgZW1tY19yZWcsIGZjY19yZWc7XG4gXG5AQCAtMjY4MSw2ICYjNDM7MjgxNiwxOSBAQCBzdGF0aWMgdm9pZCBheGllbmV0X21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuIFx0YXhpZW5ldF9pb3cobHAsIFhBRV9GQ0NfT0ZGU0VULCBmY2NfcmVnKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4mIzQzO1x0XHRcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbiYjNDM7XHRcdFx0XHR1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcbiYjNDM7XHRcdFx0XHRpbnQgc3BlZWQsIGludCBkdXBsZXgsXG4mIzQzO1x0XHRcdFx0Ym9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gdG9fbmV0X2Rldihjb25maWctXHUwMDNlZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZW1hY19saW5rX3VwKVxuJiM0MztcdFx0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlbWFjX2xpbmtfdXAobmRldiwgc3BlZWQsIHR4X3BhdXNlLCByeF9wYXVzZSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgYXhpZW5ldF9waHlsaW5rX29wcyA9IHtcbiBcdC5tYWNfc2VsZWN0X3BjcyA9IGF4aWVuZXRfbWFjX3NlbGVjdF9wY3MsXG4gXHQubWFjX2NvbmZpZyA9IGF4aWVuZXRfbWFjX2NvbmZpZyxcbkBAIC0yNjk4LDcgJiM0MzsyODQ2LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgYXhpZW5ldF9waHlsaW5rX29wcyA9IHtcbiBzdGF0aWMgdm9pZCBheGllbmV0X2RtYV9lcnJfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0dTMyIGk7XG4tXHR1MzIgYXhpZW5ldF9zdGF0dXM7XG4gXHRzdHJ1Y3QgYXhpZG1hX2JkICpjdXJfcDtcbiBcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCxcbiBcdFx0XHRcdFx0XHRkbWFfZXJyX3Rhc2spO1xuQEAgLTI3MTEsOCAmIzQzOzI4NTgsOCBAQCBzdGF0aWMgdm9pZCBheGllbmV0X2RtYV9lcnJfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRuYXBpX2Rpc2FibGUoXHUwMDI2bHAtXHUwMDNlbmFwaV90eCk7XG4gXHRuYXBpX2Rpc2FibGUoXHUwMDI2bHAtXHUwMDNlbmFwaV9yeCk7XG4gXG4tXHRheGllbmV0X3NldG9wdGlvbnMobmRldiwgbHAtXHUwMDNlb3B0aW9ucyBcdTAwMjZcbi1cdFx0XHQgICB+KFhBRV9PUFRJT05fVFhFTiB8IFhBRV9PUFRJT05fUlhFTikpO1xuJiM0MztcdGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZXNldG9wdGlvbnMobmRldiwgbHAtXHUwMDNlb3B0aW9ucyBcdTAwMjZcbiYjNDM7XHRcdFx0XHQgICAgICAgfihYQUVfT1BUSU9OX1RYRU4gfCBYQUVfT1BUSU9OX1JYRU4pKTtcbiBcbiBcdGF4aWVuZXRfZG1hX3N0b3AobHApO1xuIFx0bmV0ZGV2X3Jlc2V0X3F1ZXVlKG5kZXYpO1xuQEAgLTI3NTcsMjkgJiM0MzsyOTA0LDEyNiBAQCBzdGF0aWMgdm9pZCBheGllbmV0X2RtYV9lcnJfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXG4gXHRheGllbmV0X2RtYV9zdGFydChscCk7XG4gXG4tXHRheGllbmV0X3N0YXR1cyA9IGF4aWVuZXRfaW9yKGxwLCBYQUVfUkNXMV9PRkZTRVQpO1xuLVx0YXhpZW5ldF9zdGF0dXMgXHUwMDI2PSB+WEFFX1JDVzFfUlhfTUFTSztcbi1cdGF4aWVuZXRfaW93KGxwLCBYQUVfUkNXMV9PRkZTRVQsIGF4aWVuZXRfc3RhdHVzKTtcbi1cbi1cdGF4aWVuZXRfc3RhdHVzID0gYXhpZW5ldF9pb3IobHAsIFhBRV9JUF9PRkZTRVQpO1xuLVx0aWYgKGF4aWVuZXRfc3RhdHVzIFx1MDAyNiBYQUVfSU5UX1JYUkpFQ1RfTUFTSylcbi1cdFx0YXhpZW5ldF9pb3cobHAsIFhBRV9JU19PRkZTRVQsIFhBRV9JTlRfUlhSSkVDVF9NQVNLKTtcbi1cdGF4aWVuZXRfaW93KGxwLCBYQUVfSUVfT0ZGU0VULCBscC1cdTAwM2VldGhfaXJxIFx1MDAzZSAwID9cbi1cdFx0ICAgIFhBRV9JTlRfUkVDVl9FUlJPUl9NQVNLIDogMCk7XG4tXHRheGllbmV0X2lvdyhscCwgWEFFX0ZDQ19PRkZTRVQsIFhBRV9GQ0NfRkNSWF9NQVNLKTtcbiYjNDM7XHQvKiBUaGlzIGVycm9yIGhhbmRsZXIgcnVucyBvbmx5IGZvciB0aGUgbGVnYWN5IGVtYmVkZGVkLURNQSAoMUcpIHBhdGgsXG4mIzQzO1x0ICogd2hvc2UgbWFjX2luaXQoKSBjYW5ub3QgZmFpbCwgc28gaXRzIHJldHVybiB2YWx1ZSBpcyBub3QgY2hlY2tlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VtYWNfaW5pdChuZGV2KTtcbiBcbiBcdC8qIFN5bmMgZGVmYXVsdCBvcHRpb25zIHdpdGggSFcgYnV0IGxlYXZlIHJlY2VpdmVyIGFuZFxuIFx0ICogdHJhbnNtaXR0ZXIgZGlzYWJsZWQuXG4gXHQgKi9cbi1cdGF4aWVuZXRfc2V0b3B0aW9ucyhuZGV2LCBscC1cdTAwM2VvcHRpb25zIFx1MDAyNlxuLVx0XHRcdCAgIH4oWEFFX09QVElPTl9UWEVOIHwgWEFFX09QVElPTl9SWEVOKSk7XG4mIzQzO1x0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlc2V0b3B0aW9ucyhuZGV2LCBscC1cdTAwM2VvcHRpb25zIFx1MDAyNlxuJiM0MztcdFx0XHRcdCAgICAgICB+KFhBRV9PUFRJT05fVFhFTiB8IFhBRV9PUFRJT05fUlhFTikpO1xuIFx0YXhpZW5ldF9zZXRfbWFjX2FkZHJlc3MobmRldiwgTlVMTCk7XG4gXHRheGllbmV0X3NldF9tdWx0aWNhc3RfbGlzdChuZGV2KTtcbiBcdG5hcGlfZW5hYmxlKFx1MDAyNmxwLVx1MDAzZW5hcGlfcngpO1xuIFx0bmFwaV9lbmFibGUoXHUwMDI2bHAtXHUwMDNlbmFwaV90eCk7XG4tXHRheGllbmV0X3NldG9wdGlvbnMobmRldiwgbHAtXHUwMDNlb3B0aW9ucyk7XG4mIzQzO1x0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlc2V0b3B0aW9ucyhuZGV2LCBscC1cdTAwM2VvcHRpb25zKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGF4aWVuZXRfMWdfcGh5bGlua19zZXRfY2FwcyAtIFNldCAxRyBwaHlsaW5rIGNhcGFiaWxpdGllcyBhbmQgaW50ZXJmYWNlc1xuJiM0MzsgKiBAbHA6XHRcdFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlXG4mIzQzOyAqIEBjb25maWc6XHRQb2ludGVyIHRvIHRoZSBwaHlsaW5rX2NvbmZpZyBzdHJ1Y3R1cmVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfcGh5bGlua19zZXRfY2FwcyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZylcbiYjNDM7e1xuJiM0MztcdGNvbmZpZy1cdTAwM2VtYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMEZEIHwgTUFDXzEwMEZEIHwgTUFDXzEwMDBGRDtcbiYjNDM7XHRfX3NldF9iaXQobHAtXHUwMDNlcGh5X21vZGUsIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4mIzQzO1x0aWYgKGxwLVx1MDAzZXN3aXRjaF94X3NnbWlpKSB7XG4mIzQzO1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCxcbiYjNDM7XHRcdFx0ICBjb25maWctXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSxcbiYjNDM7XHRcdFx0ICBjb25maWctXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGF4aWVuZXRfMWdfY2xrX2luaXQgLSBHZXQgYW5kIGVuYWJsZSB0aGUgMUcgTUFDIGNsb2Nrc1xuJiM0MzsgKiBAbHA6XHRcdFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYXhpZW5ldF8xZ19jbGtfaW5pdChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBscC1cdTAwM2VkZXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bHAtXHUwMDNlYXhpX2NsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbF9lbmFibGVkKGRldiwgXCYjMzQ7c19heGlfbGl0ZV9jbGtcJiMzNDspO1xuJiM0MztcdGlmICghbHAtXHUwMDNlYXhpX2Nsaykge1xuJiM0MztcdFx0LyogRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGlmIG5hbWVkIEFYSSBjbG9jayBpcyBub3RcbiYjNDM7XHRcdCAqIHByZXNlbnQsIHRyZWF0IHRoZSBmaXJzdCBjbG9jayBzcGVjaWZpZWQgYXMgdGhlIEFYSSBjbG9jay5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bHAtXHUwMDNlYXhpX2NsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbF9lbmFibGVkKGRldiwgTlVMTCk7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChJU19FUlIobHAtXHUwMDNlYXhpX2NsaykpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIobHAtXHUwMDNlYXhpX2NsayksXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtjb3VsZCBub3QgZ2V0IEFYSSBjbG9ja1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGxwLVx1MDAzZW1pc2NfY2xrc1swXS5pZCA9IFwmIzM0O2F4aXNfY2xrXCYjMzQ7O1xuJiM0MztcdGxwLVx1MDAzZW1pc2NfY2xrc1sxXS5pZCA9IFwmIzM0O3JlZl9jbGtcJiMzNDs7XG4mIzQzO1x0bHAtXHUwMDNlbWlzY19jbGtzWzJdLmlkID0gXCYjMzQ7bWd0X2Nsa1wmIzM0OztcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9jbGtfYnVsa19nZXRfb3B0aW9uYWxfZW5hYmxlKGRldiwgWEFFX05VTV9NSVNDX0NMT0NLUyxcbiYjNDM7XHRcdFx0XHRcdFx0bHAtXHUwMDNlbWlzY19jbGtzKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtjb3VsZCBub3QgZ2V0L2VuYWJsZSBtaXNjLiBjbG9ja3NcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBheGllbmV0XzFnX3Byb2JlX2luaXQgLSAxRyBNQUMtc3BlY2lmaWMgcHJvYmUtdGltZSBpbml0aWFsaXphdGlvblxuJiM0MzsgKiBAbHA6XHRcdFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBheGllbmV0XzFnX3Byb2JlX2luaXQoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGF4aWVuZXRfaW9yKGxwLCBYQUVfQUJJTElUWV9PRkZTRVQpIFx1MDAyNiBYQUVfQUJJTElUWV9TVEFUUylcbiYjNDM7XHRcdGxwLVx1MDAzZWZlYXR1cmVzIHw9IFhBRV9GRUFUVVJFX1NUQVRTO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGF4aWVuZXRfY29uZmlnIGF4aWVuZXRfMWdfY29uZmlnID0ge1xuJiM0MztcdC5tZGlvID0gdHJ1ZSxcbiYjNDM7XHQubWFjX2lycSA9IHRydWUsXG4mIzQzO1x0LmxlZ2FjeV9kbWEgPSB0cnVlLFxuJiM0MztcdC51Y19maWx0ZXIgPSB0cnVlLFxuJiM0MztcdC5tY19maWx0ZXIgPSB0cnVlLFxuJiM0MztcdC52bGFuID0gdHJ1ZSxcbiYjNDM7XHQuanVtYm8gPSB0cnVlLFxuJiM0MztcdC5kbWFfdHhfY3N1bSA9IHRydWUsXG4mIzQzO1x0LnJlZ3NfbiA9IEFYSUVORVRfUkVHU19OLFxuJiM0MztcdC5jbGtfaW5pdCA9IGF4aWVuZXRfMWdfY2xrX2luaXQsXG4mIzQzO1x0LnNldG9wdGlvbnMgPSBheGllbmV0X3NldG9wdGlvbnMsXG4mIzQzO1x0LnByb2JlX2luaXQgPSBheGllbmV0XzFnX3Byb2JlX2luaXQsXG4mIzQzO1x0Lm1hY19pbml0ID0gYXhpZW5ldF8xZ19tYWNfaW5pdCxcbiYjNDM7XHQubWFjX2xpbmtfdXAgPSBheGllbmV0XzFnX21hY19saW5rX3VwLFxuJiM0MztcdC5nZXRfcmVncyA9IGF4aWVuZXRfMWdfZ2V0X3JlZ3MsXG4mIzQzO1x0LnBoeWxpbmtfc2V0X2NhcHMgPSBheGllbmV0XzFnX3BoeWxpbmtfc2V0X2NhcHMsXG4mIzQzO1x0LnBjc19vcHMgPSBcdTAwMjZheGllbmV0X3Bjc19vcHMsXG4mIzQzO1x0LnN0YXRzX3VwZGF0ZSA9IGF4aWVuZXRfMWdfc3RhdHNfdXBkYXRlLFxuJiM0MztcdC5nZXRfc3RhdHM2NCA9IGF4aWVuZXRfMWdfZ2V0X3N0YXRzNjQsXG4mIzQzO1x0LmdldF9ldGh0b29sX3N0YXRzID0gYXhpZW5ldF8xZ19nZXRfZXRodG9vbF9zdGF0cyxcbiYjNDM7XHQuZ2V0X3N0cmluZ3MgPSBheGllbmV0XzFnX2dldF9zdHJpbmdzLFxuJiM0MztcdC5nZXRfc3NldF9jb3VudCA9IGF4aWVuZXRfMWdfZ2V0X3NzZXRfY291bnQsXG4mIzQzO1x0LmdldF9wYXVzZV9zdGF0cyA9IGF4aWVuZXRfMWdfZ2V0X3BhdXNlX3N0YXRzLFxuJiM0MztcdC5nZXRfZXRoX21hY19zdGF0cyA9IGF4aWVuZXRfMWdfZ2V0X2V0aF9tYWNfc3RhdHMsXG4mIzQzO1x0LmdldF9ldGhfY3RybF9zdGF0cyA9IGF4aWVuZXRfMWdfZ2V0X2V0aF9jdHJsX3N0YXRzLFxuJiM0MztcdC5nZXRfcm1vbl9zdGF0cyA9IGF4aWVuZXRfMWdfZ2V0X3Jtb25fc3RhdHMsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBNYXRjaCB0YWJsZSBmb3Igb2ZfcGxhdGZvcm0gYmluZGluZyAqL1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBheGllbmV0X29mX21hdGNoW10gPSB7XG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3hsbngsYXhpLWV0aGVybmV0LTEuMDAuYVwmIzM0OywgLmRhdGEgPSBcdTAwMjZheGllbmV0XzFnX2NvbmZpZyB9LFxuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDt4bG54LGF4aS1ldGhlcm5ldC0xLjAxLmFcJiMzNDssIC5kYXRhID0gXHUwMDI2YXhpZW5ldF8xZ19jb25maWcgfSxcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7eGxueCxheGktZXRoZXJuZXQtMi4wMS5hXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNmF4aWVuZXRfMWdfY29uZmlnIH0sXG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3hsbngseHh2LWV0aGVybmV0LTEuMFwmIzM0OywgLmRhdGEgPSBcdTAwMjZheGllbmV0XzEwZzI1Z19jb25maWcgfSxcbiYjNDM7XHR7fSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGF4aWVuZXRfb2ZfbWF0Y2gpO1xuJiM0MztcbiAvKipcbiAgKiBheGllbmV0X3Byb2JlIC0gQXhpIEV0aGVybmV0IHByb2JlIGZ1bmN0aW9uLlxuICAqIEBwZGV2Olx0UG9pbnRlciB0byBwbGF0Zm9ybSBkZXZpY2Ugc3RydWN0dXJlLlxuQEAgLTI4MzAsMjcgJiM0MzszMDc0LDEzIEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0c2VxY291bnRfbXV0ZXhfaW5pdChcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCwgXHUwMDI2bHAtXHUwMDNlc3RhdHNfbG9jayk7XG4gXHRJTklUX0RFRkVSUkFCTEVfV09SSyhcdTAwMjZscC1cdTAwM2VzdGF0c193b3JrLCBheGllbmV0X3JlZnJlc2hfc3RhdHMpO1xuIFxuLVx0bHAtXHUwMDNlYXhpX2NsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbF9lbmFibGVkKFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuLVx0XHRcdFx0XHRcdCAgICBcJiMzNDtzX2F4aV9saXRlX2Nsa1wmIzM0Oyk7XG4tXHRpZiAoIWxwLVx1MDAzZWF4aV9jbGspIHtcbi1cdFx0LyogRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGlmIG5hbWVkIEFYSSBjbG9jayBpcyBub3QgcHJlc2VudCxcbi1cdFx0ICogdHJlYXQgdGhlIGZpcnN0IGNsb2NrIHNwZWNpZmllZCBhcyB0aGUgQVhJIGNsb2NrLlxuLVx0XHQgKi9cbi1cdFx0bHAtXHUwMDNlYXhpX2NsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbF9lbmFibGVkKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBOVUxMKTtcbi1cdH1cbi1cdGlmIChJU19FUlIobHAtXHUwMDNlYXhpX2NsaykpXG4tXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBQVFJfRVJSKGxwLVx1MDAzZWF4aV9jbGspLFxuLVx0XHRcdFx0ICAgICBcJiMzNDtjb3VsZCBub3QgZ2V0IEFYSSBjbG9ja1xcblwmIzM0Oyk7XG4mIzQzO1x0bHAtXHUwMDNlYXhpZW5ldF9jb25maWcgPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdGlmICghbHAtXHUwMDNlYXhpZW5ldF9jb25maWcpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbi1cdGxwLVx1MDAzZW1pc2NfY2xrc1swXS5pZCA9IFwmIzM0O2F4aXNfY2xrXCYjMzQ7O1xuLVx0bHAtXHUwMDNlbWlzY19jbGtzWzFdLmlkID0gXCYjMzQ7cmVmX2Nsa1wmIzM0Oztcbi1cdGxwLVx1MDAzZW1pc2NfY2xrc1syXS5pZCA9IFwmIzM0O21ndF9jbGtcJiMzNDs7XG4tXG4tXHRyZXQgPSBkZXZtX2Nsa19idWxrX2dldF9vcHRpb25hbF9lbmFibGUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFhBRV9OVU1fTUlTQ19DTE9DS1MsXG4tXHRcdFx0XHRcdFx0bHAtXHUwMDNlbWlzY19jbGtzKTtcbiYjNDM7XHRyZXQgPSBscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VjbGtfaW5pdChscCk7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcmV0LFxuLVx0XHRcdFx0ICAgICBcJiMzNDtjb3VsZCBub3QgZ2V0L2VuYWJsZSBtaXNjLiBjbG9ja3NcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbiBcdC8qIE1hcCBkZXZpY2UgcmVnaXN0ZXJzICovXG4gXHRscC1cdTAwM2VyZWdzID0gZGV2bV9wbGF0Zm9ybV9nZXRfYW5kX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCwgXHUwMDI2ZXRocmVzKTtcbkBAIC0yODYxLDkgJiM0MzszMDkxLDYgQEAgc3RhdGljIGludCBheGllbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHQvKiBTZXR1cCBjaGVja3N1bSBvZmZsb2FkLCBidXQgZGVmYXVsdCB0byBvZmYgaWYgbm90IHNwZWNpZmllZCAqL1xuIFx0bHAtXHUwMDNlZmVhdHVyZXMgPSAwO1xuIFxuLVx0aWYgKGF4aWVuZXRfaW9yKGxwLCBYQUVfQUJJTElUWV9PRkZTRVQpIFx1MDAyNiBYQUVfQUJJTElUWV9TVEFUUylcbi1cdFx0bHAtXHUwMDNlZmVhdHVyZXMgfD0gWEFFX0ZFQVRVUkVfU1RBVFM7XG4tXG4gXHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwZGV2LVx1MDAzZWRldi5vZl9ub2RlLCBcJiMzNDt4bG54LHR4Y3N1bVwmIzM0OywgXHUwMDI2dmFsdWUpO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0c3dpdGNoICh2YWx1ZSkge1xuQEAgLTI5NDAsNyAmIzQzOzMxNjcsMTcgQEAgc3RhdGljIGludCBheGllbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuJiM0MztcdGlmIChscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2Vwcm9iZV9pbml0KVxuJiM0MztcdFx0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlcHJvYmVfaW5pdChscCk7XG4mIzQzO1xuIFx0aWYgKCFvZl9wcm9wZXJ0eV9wcmVzZW50KHBkZXYtXHUwMDNlZGV2Lm9mX25vZGUsIFwmIzM0O2RtYXNcJiMzNDspKSB7XG4mIzQzO1x0XHQvKiBOb24tZG1hZW5naW5lIChsZWdhY3kgRE1BKSBtb2RlIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IHNvbWUgTUFDcyAqL1xuJiM0MztcdFx0aWYgKCFscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VsZWdhY3lfZG1hKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7TGVnYWN5IERNQSBtb2RlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBNQUMsIHVzZSBkbWFlbmdpbmVcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdC8qIEZpbmQgdGhlIERNQSBub2RlLCBtYXAgdGhlIERNQSByZWdpc3RlcnMsIGFuZCBkZWNvZGUgdGhlIERNQSBJUlFzICovXG4gXHRcdG5wID0gb2ZfcGFyc2VfcGhhbmRsZShwZGV2LVx1MDAzZWRldi5vZl9ub2RlLCBcJiMzNDtheGlzdHJlYW0tY29ubmVjdGVkXCYjMzQ7LCAwKTtcbiBcbkBAIC0zMDIwLDcgJiM0MzszMjU3LDEwIEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0XHRzdHJ1Y3QgeGlsaW54X3ZkbWFfY29uZmlnIGNmZztcbiBcdFx0c3RydWN0IGRtYV9jaGFuICp0eF9jaGFuO1xuIFxuLVx0XHRscC1cdTAwM2VldGhfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbChwZGV2LCAwKTtcbiYjNDM7XHRcdGlmIChscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VtYWNfaXJxKVxuJiM0MztcdFx0XHRscC1cdTAwM2VldGhfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbChwZGV2LCAwKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0bHAtXHUwMDNlZXRoX2lycSA9IC1FTlhJTztcbiBcdFx0aWYgKGxwLVx1MDAzZWV0aF9pcnEgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGxwLVx1MDAzZWV0aF9pcnEgIT0gLUVOWElPKSB7XG4gXHRcdFx0cmV0dXJuIGxwLVx1MDAzZWV0aF9pcnE7XG4gXHRcdH1cbkBAIC0zMDczLDEwICYjNDM7MzMxMywxMiBAQCBzdGF0aWMgaW50IGF4aWVuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdGxwLVx1MDAzZXR4X2RtYV9jciA9IGF4aWVuZXRfY2FsY19jcihscCwgWEFYSURNQV9ERlRfVFhfVEhSRVNIT0xELFxuIFx0XHRcdFx0XHRYQVhJRE1BX0RGVF9UWF9VU0VDKTtcbiBcbi1cdHJldCA9IGF4aWVuZXRfbWRpb19zZXR1cChscCk7XG4tXHRpZiAocmV0KVxuLVx0XHRkZXZfd2FybihcdTAwMjZwZGV2LVx1MDAzZWRldixcbi1cdFx0XHQgXCYjMzQ7ZXJyb3IgcmVnaXN0ZXJpbmcgTURJTyBidXM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdGlmIChscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VtZGlvKSB7XG4mIzQzO1x0XHRyZXQgPSBheGllbmV0X21kaW9fc2V0dXAobHApO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0IFwmIzM0O2Vycm9yIHJlZ2lzdGVyaW5nIE1ESU8gYnVzOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAobHAtXHUwMDNlcGh5X21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJIHx8XG4gXHQgICAgbHAtXHUwMDNlcGh5X21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCkge1xuQEAgLTMxMDAsMjMgJiM0MzszMzQyLDIxIEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0XHRcdGdvdG8gY2xlYW51cF9tZGlvO1xuIFx0XHR9XG4gXHRcdG9mX25vZGVfcHV0KG5wKTtcbi1cdFx0bHAtXHUwMDNlcGNzLm9wcyA9IFx1MDAyNmF4aWVuZXRfcGNzX29wcztcbiYjNDM7XHRcdGxwLVx1MDAzZXBjcy5vcHMgPSBscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VwY3Nfb3BzO1xuJiM0MztcdFx0bHAtXHUwMDNlcGNzLnBvbGwgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWludGVybmFsX3Bjcykge1xuJiM0MztcdFx0bHAtXHUwMDNlcGNzLm9wcyA9IGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZXBjc19vcHM7XG4gXHRcdGxwLVx1MDAzZXBjcy5wb2xsID0gdHJ1ZTtcbiBcdH1cbiBcbiBcdGxwLVx1MDAzZXBoeWxpbmtfY29uZmlnLmRldiA9IFx1MDAyNm5kZXYtXHUwMDNlZGV2O1xuIFx0bHAtXHUwMDNlcGh5bGlua19jb25maWcudHlwZSA9IFBIWUxJTktfTkVUREVWO1xuIFx0bHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX21hbmFnZWRfcG0gPSB0cnVlO1xuLVx0bHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyA9IE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRSB8XG4tXHRcdE1BQ18xMEZEIHwgTUFDXzEwMEZEIHwgTUFDXzEwMDBGRDtcbiYjNDM7XHRscC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzID0gTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFO1xuIFxuLVx0X19zZXRfYml0KGxwLVx1MDAzZXBoeV9tb2RlLCBscC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4tXHRpZiAobHAtXHUwMDNlc3dpdGNoX3hfc2dtaWkpIHtcbi1cdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgsXG4tXHRcdFx0ICBscC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4tXHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfU0dNSUksXG4tXHRcdFx0ICBscC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4tXHR9XG4mIzQzO1x0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlcGh5bGlua19zZXRfY2FwcyhscCwgXHUwMDI2bHAtXHUwMDNlcGh5bGlua19jb25maWcpO1xuIFxuIFx0bHAtXHUwMDNlcGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFx1MDAyNmxwLVx1MDAzZXBoeWxpbmtfY29uZmlnLCBwZGV2LVx1MDAzZWRldi5md25vZGUsXG4gXHRcdFx0XHQgICAgIGxwLVx1MDAzZXBoeV9tb2RlLFxuQEAgLTMxNTksNyAmIzQzOzMzOTksOCBAQCBzdGF0aWMgdm9pZCBheGllbmV0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0aWYgKGxwLVx1MDAzZXBjc19waHkpXG4gXHRcdHB1dF9kZXZpY2UoXHUwMDI2bHAtXHUwMDNlcGNzX3BoeS1cdTAwM2VkZXYpO1xuIFxuLVx0YXhpZW5ldF9tZGlvX3RlYXJkb3duKGxwKTtcbiYjNDM7XHRpZiAobHAtXHUwMDNlbWlpX2J1cylcbiYjNDM7XHRcdGF4aWVuZXRfbWRpb190ZWFyZG93bihscCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGF4aWVuZXRfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfeHh2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfeHh2LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kYmM5YzIxYjEwNGFmXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfeHh2LmNcbkBAIC0wLDAgJiM0MzsxLDU5NSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIFhYViAoMTBHLzI1Rykgc3VwcG9ydFxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5bGluay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4aWxpbnhfYXhpZW5ldC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hpbGlueF9heGllbmV0X3h4di5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKiByZWFkbF9wb2xsX3RpbWVvdXQoKSBzbGVlcCBpbnRlcnZhbCAodXMpIGFuZCAxIG1zIHRvdGFsIHRpbWVvdXQgZm9yIEdUXG4mIzQzOyAqIHJlc2V0LWRvbmUgYW5kIFBDUyBibG9jay1sb2NrIHBvbGxzLiBWYWx1ZXMgZnJvbSBaeW5xTVAvVmVyc2FsIGJyaW5nLXVwO1xuJiM0MzsgKiBQRzIxMCBkb2VzIG5vdCBzcGVjaWZ5IHRoZXNlIGJvdW5kcy5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgWFhWX0xJTktfUE9MTF9JTlRFUlZBTF9VU1x0MTBcbiYjNDM7XG4mIzQzOy8qIE51bWJlciBvZiBYWFYgKDEwRy8yNUcpIE1BQyByZWdpc3RlcnMgZXhwb3NlZCB2aWEgZXRodG9vbCAtZC5cbiYjNDM7ICogQ292ZXJzIGNvbmZpZ3VyYXRpb24gYW5kIHN0YXR1cyByZWdpc3RlcnMgcGVyIFhpbGlueCBQRzIxMC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBjb25zdCB1MzIgYXhpZW5ldF94eHZfcmVnX2R1bXBfb2Zmc2V0c1tYWFZfUkVHU19OXSA9IHtcbiYjNDM7XHRYWFZfR1RfUkVTRVRfT0ZGU0VULFxuJiM0MztcdFhYVl9SRVNFVF9PRkZTRVQsXG4mIzQzO1x0WFhWX01PREVfT0ZGU0VULFxuJiM0MztcdFhYVl9UQ19PRkZTRVQsXG4mIzQzO1x0WFhWX1JDVzFfT0ZGU0VULFxuJiM0MztcdFhYVl9KVU1fT0ZGU0VULFxuJiM0MztcdFhYVl9WTF9MRU5HVEhfT0ZGU0VULFxuJiM0MztcdFhYVl9USUNLUkVHX09GRlNFVCxcbiYjNDM7XHRYWFZfQ09ORklHX1JFVklTSU9OLFxuJiM0MztcdFhYVl9DT05GSUdfMTU4OF9PRkZTRVQsXG4mIzQzO1x0WFhWX0NPTkZJR19UWF9GTE9XX0NUUkwxX09GRlNFVCxcbiYjNDM7XHRYWFZfQ09ORklHX1JYX0ZMT1dfQ1RSTDFfT0ZGU0VULFxuJiM0MztcdFhYVl9DT05GSUdfUlhfRkxPV19DVFJMMl9PRkZTRVQsXG4mIzQzO1x0WFhWX0NPTkZJR19SU0ZFQ19PRkZTRVQsXG4mIzQzO1x0WFhWX0NPTkZJR19GRUNfT0ZGU0VULFxuJiM0MztcdFhYVl9BTl9DVEwxX09GRlNFVCxcbiYjNDM7XHRYWFZfQU5fQ1RMMl9PRkZTRVQsXG4mIzQzO1x0WFhWX0FOX0FCSUxJVFlfT0ZGU0VULFxuJiM0MztcdFhYVl9MVF9DVEwxX09GRlNFVCxcbiYjNDM7XHRYWFZfU1dJVENIX0NPUkVfU1BFRURfT0ZGU0VULFxuJiM0MztcdFhYVl9DT05GSUdfMTU4OF8zMkJJVF9PRkZTRVQsXG4mIzQzO1x0WFhWX1RYX0NPTkZJR18xNTg4X09GRlNFVCxcbiYjNDM7XHRYWFZfUlhfQ09ORklHXzE1ODhfT0ZGU0VULFxuJiM0MztcdFhYVl9HVFdJWl9DVFJMX09GRlNFVCxcbiYjNDM7XHRYWFZfU1RBVFJYX1NUQVRVUzBfT0ZGU0VULFxuJiM0MztcdFhYVl9SWF9TVEFUVVNfUkVHMSxcbiYjNDM7XHRYWFZfU1RBVFJYX1NUQVRVUzJfT0ZGU0VULFxuJiM0MztcdFhYVl9TVEFUUlhfQkxLTENLX09GRlNFVCxcbiYjNDM7XHRYWFZfU1RBVF9SWF9SU0ZFQ19TVEFUVVNfT0ZGU0VULFxuJiM0MztcdFhYVl9TVEFUX1JYX0ZFQ19TVEFUVVNfT0ZGU0VULFxuJiM0MztcdFhYVl9TVEFUX1RYX1JTRkVDX1NUQVRVU19PRkZTRVQsXG4mIzQzO1x0WFhWX1NUQVRfVFhfRkxPV19DVFJMMV9PRkZTRVQsXG4mIzQzO1x0WFhWX1NUQVRfUlhfRkxPV19DVFJMMV9PRkZTRVQsXG4mIzQzO1x0WFhWX1NUQVRfQU5fU1RTX09GRlNFVCxcbiYjNDM7XHRYWFZfU1RBVF9BTl9MUF9TVEFUVVNfT0ZGU0VULFxuJiM0MztcdFhYVl9TVEFUX0FOX0xJTktfQ1RMX09GRlNFVCxcbiYjNDM7XHRYWFZfU1RBVF9MVF9TVEFUVVMxX09GRlNFVCxcbiYjNDM7XHRYWFZfU1RBVF9MVF9TVEFUVVMyX09GRlNFVCxcbiYjNDM7XHRYWFZfU1RBVF9MVF9TVEFUVVMzX09GRlNFVCxcbiYjNDM7XHRYWFZfU1RBVF9MVF9TVEFUVVM0X09GRlNFVCxcbiYjNDM7XHRYWFZfU1RBVF9MVF9DT0VGRjBfT0ZGU0VULFxuJiM0MztcdFhYVl9TVEFUX1JYX1ZBTElEX0NUUkxfQ09ERV9PRkZTRVQsXG4mIzQzO1x0WFhWX1NUQVRfQ09SRV9TUEVFRF9PRkZTRVQsXG4mIzQzO1x0WFhWX1NUQVRfVFNOX09GRlNFVCxcbiYjNDM7XHRYWFZfU1RBVF9HVFdJWl9PRkZTRVQsXG4mIzQzO1x0WFhWX1NUQVRfQU5fTElOS19DVEwyX09GRlNFVCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIE9wdGlvbiB0YWJsZSBmb3Igc2V0dGluZyB1cCBYWFYgRXRoZXJuZXQgaGFyZHdhcmUgb3B0aW9ucyAqL1xuJiM0MztzdGF0aWMgc3RydWN0IGF4aWVuZXRfb3B0aW9uIHh4dmVuZXRfb3B0aW9uc1tdID0ge1xuJiM0MztcdHsgLyogVHVybiBvbiBGQ1Mgc3RyaXBwaW5nIG9uIHJlY2VpdmUgcGFja2V0cyAqL1xuJiM0MztcdFx0Lm9wdCA9IFhBRV9PUFRJT05fRkNTX1NUUklQLFxuJiM0MztcdFx0LnJlZyA9IFhYVl9SQ1cxX09GRlNFVCxcbiYjNDM7XHRcdC5tX29yID0gWFhWX1JDVzFfRkNTX01BU0ssXG4mIzQzO1x0fSwgeyAvKiBUdXJuIG9uIEZDUyBpbnNlcnRpb24gb24gdHJhbnNtaXQgcGFja2V0cyAqL1xuJiM0MztcdFx0Lm9wdCA9IFhBRV9PUFRJT05fRkNTX0lOU0VSVCxcbiYjNDM7XHRcdC5yZWcgPSBYWFZfVENfT0ZGU0VULFxuJiM0MztcdFx0Lm1fb3IgPSBYWFZfVENfRkNTX01BU0ssXG4mIzQzO1x0fSwgeyAvKiBFbmFibGUgdHJhbnNtaXR0ZXIgKi9cbiYjNDM7XHRcdC5vcHQgPSBYQUVfT1BUSU9OX1RYRU4sXG4mIzQzO1x0XHQucmVnID0gWFhWX1RDX09GRlNFVCxcbiYjNDM7XHRcdC5tX29yID0gWFhWX1RDX1RYX01BU0ssXG4mIzQzO1x0fSwgeyAvKiBFbmFibGUgcmVjZWl2ZXIgKi9cbiYjNDM7XHRcdC5vcHQgPSBYQUVfT1BUSU9OX1JYRU4sXG4mIzQzO1x0XHQucmVnID0gWFhWX1JDVzFfT0ZGU0VULFxuJiM0MztcdFx0Lm1fb3IgPSBYWFZfUkNXMV9SWF9NQVNLLFxuJiM0MztcdH0sXG4mIzQzO1x0e31cbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIFBHMjEwIHN0YXRpc3RpY3MtYmxvY2sgb2Zmc2V0cyBpbmRleGVkIGJ5IGVudW0geHh2X3N0YXQuIEVhY2ggZW50cnkgaXNcbiYjNDM7ICogdGhlIDMyLWJpdCBMU0IgcmVnaXN0ZXIgYWRkcmVzczsgdGhlIGNvcnJlc3BvbmRpbmcgTVNCIGlzIGF0ICYjNDM7NC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBjb25zdCB1MzIgYXhpZW5ldF94eHZfc3RhdF9vZmZzZXRzW1hYVl9TVEFUX0NPVU5UXSA9IHtcbiYjNDM7XHRbWFhWX1NUQVRfUlhfVE9UQUxfUEFDS0VUU11cdCA9IFhYVl9TVEFUX1JYX1RPVEFMX1BBQ0tFVFNfT0ZGU0VULFxuJiM0MztcdFtYWFZfU1RBVF9SWF9UT1RBTF9HT09EX1BBQ0tFVFNdID0gWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9QQUNLRVRTX09GRlNFVCxcbiYjNDM7XHRbWFhWX1NUQVRfUlhfVE9UQUxfQllURVNdXHQgPSBYWFZfU1RBVF9SWF9UT1RBTF9CWVRFU19PRkZTRVQsXG4mIzQzO1x0W1hYVl9TVEFUX1JYX1RPVEFMX0dPT0RfQllURVNdXHQgPSBYWFZfU1RBVF9SWF9UT1RBTF9HT09EX0JZVEVTX09GRlNFVCxcbiYjNDM7XHRbWFhWX1NUQVRfUlhfQkFEX0ZDU11cdFx0ID0gWFhWX1NUQVRfUlhfQkFEX0ZDU19PRkZTRVQsXG4mIzQzO1x0W1hYVl9TVEFUX1JYX0lOUkFOR0VFUlJdXHQgPSBYWFZfU1RBVF9SWF9JTlJBTkdFRVJSX09GRlNFVCxcbiYjNDM7XHRbWFhWX1NUQVRfUlhfTVVMVElDQVNUXVx0XHQgPSBYWFZfU1RBVF9SWF9NVUxUSUNBU1RfT0ZGU0VULFxuJiM0MztcdFtYWFZfU1RBVF9SWF9CUk9BRENBU1RdXHRcdCA9IFhYVl9TVEFUX1JYX0JST0FEQ0FTVF9PRkZTRVQsXG4mIzQzO1x0W1hYVl9TVEFUX1JYX1VOREVSU0laRV1cdFx0ID0gWFhWX1NUQVRfUlhfVU5ERVJTSVpFX09GRlNFVCxcbiYjNDM7XHRbWFhWX1NUQVRfUlhfRlJBR01FTlRdXHRcdCA9IFhYVl9TVEFUX1JYX0ZSQUdNRU5UX09GRlNFVCxcbiYjNDM7XHRbWFhWX1NUQVRfUlhfSkFCQkVSXVx0XHQgPSBYWFZfU1RBVF9SWF9KQUJCRVJfT0ZGU0VULFxuJiM0MztcdFtYWFZfU1RBVF9SWF9PVkVSU0laRV1cdFx0ID0gWFhWX1NUQVRfUlhfT1ZFUlNJWkVfT0ZGU0VULFxuJiM0MztcdFtYWFZfU1RBVF9SWF9QQVVTRV1cdFx0ID0gWFhWX1NUQVRfUlhfUEFVU0VfT0ZGU0VULFxuJiM0MztcdFtYWFZfU1RBVF9UWF9UT1RBTF9QQUNLRVRTXVx0ID0gWFhWX1NUQVRfVFhfVE9UQUxfUEFDS0VUU19PRkZTRVQsXG4mIzQzO1x0W1hYVl9TVEFUX1RYX1RPVEFMX0dPT0RfUEFDS0VUU10gPSBYWFZfU1RBVF9UWF9UT1RBTF9HT09EX1BBQ0tFVFNfT0ZGU0VULFxuJiM0MztcdFtYWFZfU1RBVF9UWF9UT1RBTF9CWVRFU11cdCA9IFhYVl9TVEFUX1RYX1RPVEFMX0JZVEVTX09GRlNFVCxcbiYjNDM7XHRbWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9CWVRFU11cdCA9IFhYVl9TVEFUX1RYX1RPVEFMX0dPT0RfQllURVNfT0ZGU0VULFxuJiM0MztcdFtYWFZfU1RBVF9UWF9CQURfRkNTXVx0XHQgPSBYWFZfU1RBVF9UWF9CQURfRkNTX09GRlNFVCxcbiYjNDM7XHRbWFhWX1NUQVRfVFhfRlJBTUVfRVJST1JdXHQgPSBYWFZfU1RBVF9UWF9GUkFNRV9FUlJPUl9PRkZTRVQsXG4mIzQzO1x0W1hYVl9TVEFUX1RYX01VTFRJQ0FTVF1cdFx0ID0gWFhWX1NUQVRfVFhfTVVMVElDQVNUX09GRlNFVCxcbiYjNDM7XHRbWFhWX1NUQVRfVFhfQlJPQURDQVNUXVx0XHQgPSBYWFZfU1RBVF9UWF9CUk9BRENBU1RfT0ZGU0VULFxuJiM0MztcdFtYWFZfU1RBVF9UWF9QQVVTRV1cdFx0ID0gWFhWX1NUQVRfVFhfUEFVU0VfT0ZGU0VULFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogWFhWIChQRzIxMCkgY291bnRlcnMgZXhwb3NlZCB2aWEgZXRodG9vbCAtUy4gT25seSBjb3VudGVycyB0aGF0IGhhdmUgbm9cbiYjNDM7ICogc3RhbmRhcmQgdUFQSSBhcmUgbGlzdGVkIGhlcmU7IHRoZSB0b3RhbHMgaW5jbHVkZSBlcnJvcmVkIGZyYW1lcywgc28gdGhleVxuJiM0MzsgKiBhcmUgZGlzdGluY3QgZnJvbSB0aGUgZ29vZC1mcmFtZSBjb3VudHMgaW4gcnRubF9saW5rX3N0YXRzNjQgYW5kIHRoZVxuJiM0MzsgKiBJRUVFIE1BQyBzdGF0aXN0aWNzLiBFdmVyeSBvdGhlciBYWFYgY291bnRlciBpcyByZXBvcnRlZCB0aHJvdWdoIHRoZVxuJiM0MzsgKiBkZWRpY2F0ZWQgc3RhdHM2NCwgcGF1c2UsIE1BQyBhbmQgUk1PTiBjYWxsYmFja3MgaW5zdGVhZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBjb25zdCBlbnVtIHh4dl9zdGF0IGF4aWVuZXRfeHh2X3ByaXZfc3RhdHNbXSA9IHtcbiYjNDM7XHRYWFZfU1RBVF9SWF9UT1RBTF9QQUNLRVRTLFxuJiM0MztcdFhYVl9TVEFUX1JYX1RPVEFMX0JZVEVTLFxuJiM0MztcdFhYVl9TVEFUX1RYX1RPVEFMX1BBQ0tFVFMsXG4mIzQzO1x0WFhWX1NUQVRfVFhfVE9UQUxfQllURVMsXG4mIzQzO1x0WFhWX1NUQVRfVFhfQkFEX0ZDUyxcbiYjNDM7XHRYWFZfU1RBVF9UWF9GUkFNRV9FUlJPUixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyIGF4aWVuZXRfeHh2X2V0aHRvb2xfc3RhdHNfc3RyaW5nc1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7XG4mIzQzO1x0XCYjMzQ7UlggVG90YWwgUGFja2V0c1wmIzM0OyxcbiYjNDM7XHRcJiMzNDtSWCBUb3RhbCBCeXRlc1wmIzM0OyxcbiYjNDM7XHRcJiMzNDtUWCBUb3RhbCBQYWNrZXRzXCYjMzQ7LFxuJiM0MztcdFwmIzM0O1RYIFRvdGFsIEJ5dGVzXCYjMzQ7LFxuJiM0MztcdFwmIzM0O1RYIEJhZCBGQ1NcJiMzNDssXG4mIzQzO1x0XCYjMzQ7VFggRnJhbWUgRXJyb3JcJiMzNDssXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdTY0IGF4aWVuZXRfeHh2X3JlYWRfY291bnRlcihzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsIGVudW0geHh2X3N0YXQgc3RhdClcbiYjNDM7e1xuJiM0MztcdHUzMiBvZmYgPSBheGllbmV0X3h4dl9zdGF0X29mZnNldHNbc3RhdF07XG4mIzQzO1x0dTMyIGxzYiwgbXNiO1xuJiM0MztcbiYjNDM7XHRsc2IgPSBheGllbmV0X2lvcihscCwgb2ZmKTtcbiYjNDM7XHRtc2IgPSBheGllbmV0X2lvcihscCwgb2ZmICYjNDM7IFhYVl9TVEFUX01TQl9PRkZTRVQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gKCh1NjQpbXNiIFx1MDAzY1x1MDAzYyAzMikgfCBsc2I7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGF4aWVuZXRfeHh2X2lwX2hhc19ndHdpel9zdGF0dXModTMyIGlwX3ZlcnNpb24pXG4mIzQzO3tcbiYjNDM7XHR1OCBtaW5vciA9IEZJRUxEX0dFVChYWFZfTUlOX01BU0ssIGlwX3ZlcnNpb24pO1xuJiM0MztcdHU4IG1haiA9IEZJRUxEX0dFVChYWFZfTUFKX01BU0ssIGlwX3ZlcnNpb24pO1xuJiM0MztcbiYjNDM7XHRpZiAobWFqID09IFhYVl9JUF9WRVJfR1RXSVpfTUFKX01JTilcbiYjNDM7XHRcdHJldHVybiBtaW5vciBcdTAwM2U9IFhYVl9JUF9WRVJfR1RXSVpfTUlOX01JTjtcbiYjNDM7XHRyZXR1cm4gbWFqIFx1MDAzZSBYWFZfSVBfVkVSX0dUV0laX01BSl9NSU47XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBheGllbmV0X3h4dl9zZXRvcHRpb25zIC0gU2V0IFhYViBNQUMgb3B0aW9ucyBmcm9tIHRoZSBvcHRpb24gdGFibGVcbiYjNDM7ICogQG5kZXY6IFBvaW50ZXIgdG8gdGhlIG5ldF9kZXZpY2Ugc3RydWN0dXJlXG4mIzQzOyAqIEBvcHRpb25zOiBPcHRpb24gZmxhZ3MgdG8gYXBwbHlcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfeHh2X3NldG9wdGlvbnMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBvcHRpb25zKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1x0c3RydWN0IGF4aWVuZXRfb3B0aW9uICp0cCA9IHh4dmVuZXRfb3B0aW9ucztcbiYjNDM7XHR1MzIgcmVnO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAodHAtXHUwMDNlb3B0KSB7XG4mIzQzO1x0XHRyZWcgPSBheGllbmV0X2lvcihscCwgdHAtXHUwMDNlcmVnKSBcdTAwMjYgfnRwLVx1MDAzZW1fb3I7XG4mIzQzO1x0XHRpZiAob3B0aW9ucyBcdTAwMjYgdHAtXHUwMDNlb3B0KVxuJiM0MztcdFx0XHRyZWcgfD0gdHAtXHUwMDNlbV9vcjtcbiYjNDM7XHRcdGF4aWVuZXRfaW93KGxwLCB0cC1cdTAwM2VyZWcsIHJlZyk7XG4mIzQzO1x0XHR0cCYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRscC1cdTAwM2VvcHRpb25zIHw9IG9wdGlvbnM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBheGllbmV0X3h4dl9wcm9iZV9pbml0IC0gSW5pdGlhbGl6ZSBYWFYtc3BlY2lmaWMgc3RhdGUgYXQgcHJvYmUgdGltZVxuJiM0MzsgKiBAbHA6IFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9wcm9iZV9pbml0KHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcbiYjNDM7e1xuJiM0MztcdGxwLVx1MDAzZXh4dl9pcF92ZXJzaW9uID0gYXhpZW5ldF9pb3IobHAsIFhYVl9DT05GSUdfUkVWSVNJT04pO1xuJiM0MztcdGxwLVx1MDAzZWZlYXR1cmVzIHw9IFhBRV9GRUFUVVJFX1NUQVRTO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYXhpZW5ldF94eHZfZ3RfcmVzZXQgLSBQdWxzZSB0aGUgWFhWIEdUIHJlc2V0IGxpbmVcbiYjNDM7ICogQGxwOiBQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF94eHZfZ3RfcmVzZXQoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHZhbDtcbiYjNDM7XG4mIzQzO1x0LyogUmVzZXQgR1QgKi9cbiYjNDM7XHR2YWwgPSBheGllbmV0X2lvcihscCwgWFhWX0dUX1JFU0VUX09GRlNFVCk7XG4mIzQzO1x0dmFsIHw9IFhYVl9HVF9SRVNFVF9NQVNLO1xuJiM0MztcdGF4aWVuZXRfaW93KGxwLCBYWFZfR1RfUkVTRVRfT0ZGU0VULCB2YWwpO1xuJiM0MztcdC8qIEFsbG93IDEgbXMgZm9yIHRoZSBHVCByZXNldCB0byBzZXR0bGUgKHNlZSB0aW1lb3V0IG5vdGUgYWJvdmUpICovXG4mIzQzO1x0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuJiM0MztcdHZhbCA9IGF4aWVuZXRfaW9yKGxwLCBYWFZfR1RfUkVTRVRfT0ZGU0VUKTtcbiYjNDM7XHR2YWwgXHUwMDI2PSB+WFhWX0dUX1JFU0VUX01BU0s7XG4mIzQzO1x0YXhpZW5ldF9pb3cobHAsIFhYVl9HVF9SRVNFVF9PRkZTRVQsIHZhbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBheGllbmV0X3h4dl9wb2xsX2xpbmtfcmVhZHkgLSBXYWl0IGZvciBYWFYgR1QgYW5kIFBDUyBibG9jayBsb2NrXG4mIzQzOyAqIEBuZGV2OiBQb2ludGVyIHRvIHRoZSBuZXRfZGV2aWNlIHN0cnVjdHVyZVxuJiM0MzsgKlxuJiM0MzsgKiBQb2xsIEdUIHdpemFyZCByZXNldC1kb25lIG9uIElQIHYzLjImIzQzOywgdGhlbiBSWCBQQ1MgYmxvY2sgbG9jay4gQmxvY2stbG9ja1xuJiM0MzsgKiBmYWlsdXJlIGlzIGxvZ2dlZCBidXQgbm90IHByb3BhZ2F0ZWQ6IGl0IGRlcGVuZHMgb24gYSBsaXZlIGxpbmsgcGFydG5lciBhbmRcbiYjNDM7ICogcmVmZXJlbmNlIGNsb2NrLCBzbyBhbiB1bnBsdWdnZWQgY2FibGUgbXVzdCBub3QgZmFpbCBkZXZpY2UgYnJpbmctdXAuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGlmIEdUIHJlc2V0LWRvbmUgdGltZXMgb3V0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBheGllbmV0X3h4dl9wb2xsX2xpbmtfcmVhZHkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIENvbmZpcm0gWFhWIEV0aGVybmV0IGlzIHVwOiBvbiBJUCB2My4yJiM0MzssIHdhaXQgZm9yIEdUXG4mIzQzO1x0ICogcmVzZXQtZG9uZSBiZWZvcmUgZnVydGhlciByZWdpc3RlciBhY2Nlc3MsIHRoZW4gcG9sbCB1bnRpbFxuJiM0MztcdCAqIFJYIFBDUyBibG9jayBsb2NrIGlzIGFzc2VydGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChheGllbmV0X3h4dl9pcF9oYXNfZ3R3aXpfc3RhdHVzKGxwLVx1MDAzZXh4dl9pcF92ZXJzaW9uKSkge1xuJiM0MztcdFx0cmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGxwLVx1MDAzZXJlZ3MgJiM0MzsgWFhWX1NUQVRfR1RXSVpfT0ZGU0VULFxuJiM0MztcdFx0XHRcdFx0IHZhbCxcbiYjNDM7XHRcdFx0XHRcdCAodmFsIFx1MDAyNiBYWFZfR1RXSVpfUkVTRVRfRE9ORSkgPT0gWFhWX0dUV0laX1JFU0VUX0RPTkUsXG4mIzQzO1x0XHRcdFx0XHQgWFhWX0xJTktfUE9MTF9JTlRFUlZBTF9VUyxcbiYjNDM7XHRcdFx0XHRcdCBERUxBWV9PRl9PTkVfTUlMTElTRUMpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O1hYViBNQUMgR1QgcmVzZXQgbm90IGNvbXBsZXRlISBDcm9zcy1jaGVjayB0aGUgTUFDIHJlZiBjbG9jayBjb25maWd1cmF0aW9uXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRsX3BvbGxfdGltZW91dChscC1cdTAwM2VyZWdzICYjNDM7IFhYVl9TVEFUUlhfQkxLTENLX09GRlNFVCxcbiYjNDM7XHRcdFx0XHQgdmFsLCAodmFsIFx1MDAyNiBYWFZfUlhfQkxLTENLX01BU0spLFxuJiM0MztcdFx0XHRcdCBYWFZfTElOS19QT0xMX0lOVEVSVkFMX1VTLFxuJiM0MztcdFx0XHRcdCBERUxBWV9PRl9PTkVfTUlMTElTRUMpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O1hYViBNQUMgYmxvY2sgbG9jayBub3QgY29tcGxldGUhIENyb3NzLWNoZWNrIHRoZSBNQUMgcmVmIGNsb2NrIGNvbmZpZ3VyYXRpb25cXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGF4aWVuZXRfeHh2X21hY19pbml0IC0gWFhWIE1BQy1zcGVjaWZpYyBicmluZy11cCBhZnRlciB0aGUgRE1BIHJlc2V0XG4mIzQzOyAqIEBuZGV2OiBQb2ludGVyIHRvIHRoZSBuZXRfZGV2aWNlIHN0cnVjdHVyZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIG51bWJlciBvdGhlcndpc2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGF4aWVuZXRfeHh2X21hY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYXhpZW5ldF94eHZfcG9sbF9saW5rX3JlYWR5KG5kZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRscC1cdTAwM2VvcHRpb25zIHw9IFhBRV9PUFRJT05fRkNTX1NUUklQO1xuJiM0MztcdGxwLVx1MDAzZW9wdGlvbnMgfD0gWEFFX09QVElPTl9GQ1NfSU5TRVJUO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF94eHZfcGh5bGlua19zZXRfY2FwYWJpbGl0aWVzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCxcbiYjNDM7XHRcdFx0XHRcdFx0IHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY2ZnKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGNvcmVfc3BlZWQ7XG4mIzQzO1x0Ym9vbCBydHN3O1xuJiM0MztcbiYjNDM7XHRjb3JlX3NwZWVkID0gYXhpZW5ldF9pb3IobHAsIFhYVl9TVEFUX0NPUkVfU1BFRURfT0ZGU0VUKTtcbiYjNDM7XHQvKiBCaXRbMTowXTogMDA9MjVHLCAwMT0xMEcsIDEwPXJ1bnRpbWUtc3dpdGNoYWJsZSAyNUcsXG4mIzQzO1x0ICogMTE9cnVudGltZS1zd2l0Y2hhYmxlIDEwRy4gQSBydW50aW1lLXN3aXRjaGFibGUgY29yZSBjYW4gb3BlcmF0ZSBhdFxuJiM0MztcdCAqIGVpdGhlciBzcGVlZCwgc28gYWR2ZXJ0aXNlIGJvdGg7IGEgZml4ZWQgY29yZSBhZHZlcnRpc2VzIG9ubHkgaXRzXG4mIzQzO1x0ICogY29uZmlndXJlZCBzcGVlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRydHN3ID0gY29yZV9zcGVlZCBcdTAwMjYgWFhWX1NUQVRfQ09SRV9TUEVFRF9SVFNXX01BU0s7XG4mIzQzO1xuJiM0MztcdGlmIChydHN3IHx8IChjb3JlX3NwZWVkIFx1MDAyNiBYWFZfU1RBVF9DT1JFX1NQRUVEXzEwR19NQVNLKSkge1xuJiM0MztcdFx0Y2ZnLVx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDAwRkQ7XG4mIzQzO1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSLFxuJiM0MztcdFx0XHQgIGNmZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocnRzdyB8fCAhKGNvcmVfc3BlZWQgXHUwMDI2IFhYVl9TVEFUX0NPUkVfU1BFRURfMTBHX01BU0spKSB7XG4mIzQzO1x0XHRjZmctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMjUwMDBGRDtcbiYjNDM7XHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMjVHQkFTRVIsXG4mIzQzO1x0XHRcdCAgY2ZnLVx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfeHh2X3Bjc19nZXRfc3RhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsXG4mIzQzO1x0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IG5lZ19tb2RlLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gcGNzX3RvX2F4aWVuZXRfbG9jYWwocGNzKTtcbiYjNDM7XG4mIzQzO1x0c3RhdGUtXHUwMDNlZHVwbGV4ID0gRFVQTEVYX0ZVTEw7XG4mIzQzO1x0c3RhdGUtXHUwMDNlYW5fY29tcGxldGUgPSAhIShheGllbmV0X2lvcihscCwgWFhWX1NUQVRfQU5fU1RTX09GRlNFVCkgXHUwMDI2XG4mIzQzO1x0XHRcdFx0WFhWX0FOX0NPTVBMRVRFX01BU0spO1xuJiM0MztcdHN0YXRlLVx1MDAzZWxpbmsgPSBheGllbmV0X2lvcihscCwgWFhWX1JYX1NUQVRVU19SRUcxKSBcdTAwMjZcbiYjNDM7XHRcdCAgICAgIFhYVl9SWF9TVEFUVVNfTUFTSztcbiYjNDM7XG4mIzQzO1x0aWYgKGF4aWVuZXRfaW9yKGxwLCBYWFZfU1RBVF9DT1JFX1NQRUVEX09GRlNFVCkgXHUwMDI2XG4mIzQzO1x0ICAgIFhYVl9TVEFUX0NPUkVfU1BFRURfMTBHX01BU0spXG4mIzQzO1x0XHRzdGF0ZS1cdTAwM2VzcGVlZCA9IFNQRUVEXzEwMDAwO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHN0YXRlLVx1MDAzZXNwZWVkID0gU1BFRURfMjUwMDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYXhpZW5ldF94eHZfcGNzX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcywgdW5zaWduZWQgaW50IG5lZ19tb2RlLFxuJiM0MztcdFx0XHRcdCAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcbiYjNDM7XHRcdFx0XHQgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkdmVydGlzaW5nLFxuJiM0MztcdFx0XHRcdCAgYm9vbCBwZXJtaXRfcGF1c2VfdG9fbWFjKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19wY3Nfb3BzIGF4aWVuZXRfeHh2X3Bjc19vcHMgPSB7XG4mIzQzO1x0LnBjc19nZXRfc3RhdGUgPSBheGllbmV0X3h4dl9wY3NfZ2V0X3N0YXRlLFxuJiM0MztcdC5wY3NfY29uZmlnID0gYXhpZW5ldF94eHZfcGNzX2NvbmZpZyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBheGllbmV0X3h4dl9nZXRfcmVncyAtIER1bXAgWFhWIE1BQyByZWdpc3RlcnMgZm9yIGV0aHRvb2xcbiYjNDM7ICogQGxwOiBQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuJiM0MzsgKiBAZGF0YTogQnVmZmVyIGZvciByZWdpc3RlciB2YWx1ZXMgKHplcm9lZCBhbmQgc2l6ZWQgYnkgdGhlIGNhbGxlcilcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfeHh2X2dldF9yZWdzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwgdTMyICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoYXhpZW5ldF94eHZfcmVnX2R1bXBfb2Zmc2V0cyk7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0ZGF0YVtpXSA9IGF4aWVuZXRfaW9yKGxwLCBheGllbmV0X3h4dl9yZWdfZHVtcF9vZmZzZXRzW2ldKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBheGllbmV0XzEwZzI1Z19jbGtfaW5pdChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBscC1cdTAwM2VkZXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIHJlZ2lzdGVyLCBSWCBhbmQgR1QgRFJQIGNsb2NrcyBhcmUgbWFuZGF0b3J5IGZvciBNQUMmIzQzO1BDU1xuJiM0MztcdCAqIG9wZXJhdGlvbiwgc28gZmV0Y2ggdGhlbSBhcyByZXF1aXJlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRscC1cdTAwM2VheGlfY2xrID0gZGV2bV9jbGtfZ2V0X2VuYWJsZWQoZGV2LCBcJiMzNDtzX2F4aVwmIzM0Oyk7XG4mIzQzO1x0aWYgKElTX0VSUihscC1cdTAwM2VheGlfY2xrKSlcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihscC1cdTAwM2VheGlfY2xrKSxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2NvdWxkIG5vdCBnZXQgQVhJIGNsb2NrXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0bHAtXHUwMDNlbWlzY19jbGtzWzBdLmlkID0gXCYjMzQ7cnhfY29yZVwmIzM0OztcbiYjNDM7XHRscC1cdTAwM2VtaXNjX2Nsa3NbMV0uaWQgPSBcJiMzNDtkcnBcJiMzNDs7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fY2xrX2J1bGtfZ2V0X2VuYWJsZShkZXYsIDIsIGxwLVx1MDAzZW1pc2NfY2xrcyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7Y291bGQgbm90IGdldC9lbmFibGUgWFhWIGNsb2Nrc1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYXhpZW5ldF94eHZfc3RhdHNfdXBkYXRlIC0gTGF0Y2ggYW5kIGFjY3VtdWxhdGUgWFhWIGhhcmR3YXJlIGNvdW50ZXJzXG4mIzQzOyAqIEBscDogUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcbiYjNDM7ICpcbiYjNDM7ICogVGhlIFhYViBzdGF0aXN0aWNzIGNvdW50ZXJzIGFyZSBjbGVhci1vbi10aWNrIChQRzIxMCk6IHdyaXRpbmcgVElDS19SRUdcbiYjNDM7ICogbGF0Y2hlcyB0aGUgaW50ZXJuYWwgYWNjdW11bGF0b3JzIGludG8gdGhlIHJlYWRhYmxlIFNUQVRfKl9MU0IvTVNCIHJlZ2lzdGVyc1xuJiM0MzsgKiBhbmQgY2xlYXJzIHRoZSBpbnRlcm5hbCBhY2N1bXVsYXRvcnMuIEVhY2ggcG9zdC1USUNLIHJlYWQgdGhlcmVmb3JlIHJldHVybnNcbiYjNDM7ICogdGhlIGNvdW50IGZvciB0aGUgaW50ZXJ2YWwgc2luY2UgdGhlIHByZXZpb3VzIFRJQ0ssIHNvIHNvZnR3YXJlIGFjY3VtdWxhdGVzXG4mIzQzOyAqIHRob3NlIGludGVydmFscyBpbnRvIGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2UuIEEgbGFzdC1jb3VudGVyIGRlbHRhIChhcyB1c2VkIGJ5IHRoZVxuJiM0MzsgKiBmcmVlLXJ1bm5pbmcgMUcgTUFDIHBhdGgpIGlzIG5vdCBuZWVkZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9zdGF0c191cGRhdGUoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IGNvdW50ZXJbWFhWX1NUQVRfQ09VTlRdO1xuJiM0MztcdGVudW0geHh2X3N0YXQgc3RhdDtcbiYjNDM7XG4mIzQzO1x0LyogTGF0Y2ggdGhlIGNsZWFyLW9uLXRpY2sgc25hcHNob3QgYW5kIHJlYWQgdGhlIGNvdW50ZXJzIG91dHNpZGUgdGhlXG4mIzQzO1x0ICogc2VxY291bnQgd3JpdGUgc2VjdGlvbiwgc28gb25seSB0aGUgYWNjdW11bGF0b3IgdXBkYXRlcyBydW4gaW5zaWRlIGl0XG4mIzQzO1x0ICogYW5kIHRoZSByZWFkZXIgcmV0cnkgd2luZG93IHN0YXlzIHNob3J0LlxuJiM0MztcdCAqL1xuJiM0MztcdGF4aWVuZXRfaW93KGxwLCBYWFZfVElDS1JFR19PRkZTRVQsIFhYVl9USUNLUkVHX1NUQVRFTl9NQVNLKTtcbiYjNDM7XHRmb3IgKHN0YXQgPSAwOyBzdGF0IFx1MDAzYyBYWFZfU1RBVF9DT1VOVDsgc3RhdCYjNDM7JiM0MzspXG4mIzQzO1x0XHRjb3VudGVyW3N0YXRdID0gYXhpZW5ldF94eHZfcmVhZF9jb3VudGVyKGxwLCBzdGF0KTtcbiYjNDM7XG4mIzQzO1x0d3JpdGVfc2VxY291bnRfYmVnaW4oXHUwMDI2bHAtXHUwMDNlaHdfc3RhdHNfc2VxY291bnQpO1xuJiM0MztcdGZvciAoc3RhdCA9IDA7IHN0YXQgXHUwMDNjIFhYVl9TVEFUX0NPVU5UOyBzdGF0JiM0MzsmIzQzOylcbiYjNDM7XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2Vbc3RhdF0gJiM0Mzs9IGNvdW50ZXJbc3RhdF07XG4mIzQzO1x0d3JpdGVfc2VxY291bnRfZW5kKFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGF4aWVuZXRfeHh2X2dldF9zdGF0czY0IC0gRmlsbCBydG5sX2xpbmtfc3RhdHM2NCBmcm9tIFhYViBjb3VudGVyc1xuJiM0MzsgKiBAbHA6IFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlXG4mIzQzOyAqIEBzdGF0czogT3V0cHV0IHJ0bmxfbGlua19zdGF0czY0IHN0cnVjdHVyZSB0byBwb3B1bGF0ZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF94eHZfZ2V0X3N0YXRzNjQoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IHN0YXJ0O1xuJiM0MztcdHU2NCB0eF9od19lcnJvcnM7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2VyeF9jcmNfZXJyb3JzID0gbHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9CQURfRkNTXTtcbiYjNDM7XHRcdC8qIEJvdGggaW4tcmFuZ2UgbGVuZ3RoIGVycm9ycyBhbmQgZnJhbWUtdG9vLWxvbmcgKG92ZXJzaXplKVxuJiM0MztcdFx0ICogZnJhbWVzIGFyZSBJRUVFIDgwMi4zIGxlbmd0aCBlcnJvcnMsIHNvIGZvbGQgdGhlbSB0b2dldGhlclxuJiM0MztcdFx0ICogaW50byByeF9sZW5ndGhfZXJyb3JzOyByeF9vdmVyX2Vycm9ycyBpcyByZXNlcnZlZCBmb3IgcmVjZWl2ZXJcbiYjNDM7XHRcdCAqIEZJRk8vcmluZyBvdmVyZmxvdywgd2hpY2ggdGhlIFhYViBNQUMgZG9lcyBub3QgZXhwb3NlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzdGF0cy1cdTAwM2VyeF9sZW5ndGhfZXJyb3JzID1cbiYjNDM7XHRcdFx0bHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9JTlJBTkdFRVJSXSAmIzQzO1xuJiM0MztcdFx0XHRscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX09WRVJTSVpFXTtcbiYjNDM7XHRcdHN0YXRzLVx1MDAzZXJ4X2Vycm9ycyA9IGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfVU5ERVJTSVpFXSAmIzQzO1xuJiM0MztcdFx0XHRcdCAgIGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfRlJBR01FTlRdICYjNDM7XG4mIzQzO1x0XHRcdFx0ICAgbHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9KQUJCRVJdICYjNDM7XG4mIzQzO1x0XHRcdFx0ICAgc3RhdHMtXHUwMDNlcnhfY3JjX2Vycm9ycyAmIzQzO1xuJiM0MztcdFx0XHRcdCAgIHN0YXRzLVx1MDAzZXJ4X2xlbmd0aF9lcnJvcnM7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2VtdWx0aWNhc3QgPSBscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX01VTFRJQ0FTVF07XG4mIzQzO1x0XHR0eF9od19lcnJvcnMgPSBscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1RYX0JBRF9GQ1NdICYjNDM7XG4mIzQzO1x0XHRcdCAgICAgICBscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1RYX0ZSQU1FX0VSUk9SXTtcbiYjNDM7XHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpO1xuJiM0MztcbiYjNDM7XHQvKiBGb2xkIHRoZSBIVyBUWCBlcnJvciBjb3VudCBpbnRvIHRoZSBzb2Z0d2FyZSB0eF9lcnJvcnMgc2VlZGVkIGZyb21cbiYjNDM7XHQgKiBkZXYtXHUwMDNlc3RhdHMgYnkgdGhlIGNhbGxlci4gVGhlIFhYViB4bWl0IHBhdGggYnVtcHMgZGV2LVx1MDAzZXN0YXRzLnR4X2Vycm9yc1xuJiM0MztcdCAqIGZvciBmcmFtZXMgZHJvcHBlZCBvbiBwYWQgZmFpbHVyZSBiZWZvcmUgdGhleSByZWFjaCB0aGUgTUFDLCB3aGlsZSB0aGVcbiYjNDM7XHQgKiBIVyBjb3VudGVycyBvbmx5IGNvdmVyIGZyYW1lcyB0aGUgTUFDIGFjdHVhbGx5IHRyYW5zbWl0dGVkOyB0aGUgdHdvIGFyZVxuJiM0MztcdCAqIGRpc2pvaW50LiBUaGlzIHJ1bnMgb25jZSwgb3V0c2lkZSB0aGUgc2VxY291bnQgcmV0cnkgbG9vcCwgc28gYSByYWNpbmdcbiYjNDM7XHQgKiBzdGF0cyB1cGRhdGUgY2Fubm90IG1ha2UgdGhlIGFjY3VtdWxhdGlvbiByZS1hZGQgb24gcmV0cnkuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RhdHMtXHUwMDNldHhfZXJyb3JzICYjNDM7PSB0eF9od19lcnJvcnM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBheGllbmV0X3h4dl9nZXRfZXRodG9vbF9zdGF0cyAtIENvcHkgWFhWIGNvdW50ZXJzIGZvciBldGh0b29sIC1TXG4mIzQzOyAqIEBscDogUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcbiYjNDM7ICogQGRhdGE6IE91dHB1dCBidWZmZXIgc2l6ZWQgZm9yIEFSUkFZX1NJWkUoYXhpZW5ldF94eHZfcHJpdl9zdGF0cykgdTY0IHZhbHVlc1xuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF94eHZfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLCB1NjQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaSwgc3RhcnQ7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGF4aWVuZXRfeHh2X3ByaXZfc3RhdHMpOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0ZGF0YVtpXSA9IGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbYXhpZW5ldF94eHZfcHJpdl9zdGF0c1tpXV07XG4mIzQzO1x0fSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeShcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCwgc3RhcnQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGF4aWVuZXRfeHh2X2dldF9zdHJpbmdzIC0gQ29weSBYWFYgZXRodG9vbCBzdGF0aXN0aWNzIG5hbWUgc3RyaW5nc1xuJiM0MzsgKiBAZGF0YTogT3V0cHV0IGJ1ZmZlciBmb3IgdGhlIHN0YXRpc3RpY3MgbmFtZSBzdHJpbmdzXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfc3RyaW5ncyh1OCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdG1lbWNweShkYXRhLCBheGllbmV0X3h4dl9ldGh0b29sX3N0YXRzX3N0cmluZ3MsXG4mIzQzO1x0ICAgICAgIHNpemVvZihheGllbmV0X3h4dl9ldGh0b29sX3N0YXRzX3N0cmluZ3MpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGF4aWVuZXRfeHh2X2dldF9zc2V0X2NvdW50IC0gTnVtYmVyIG9mIFhYViBldGh0b29sIHN0YXRpc3RpY3NcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBDb3VudCBvZiBYWFYgaGFyZHdhcmUgc3RhdGlzdGljcyByZXBvcnRlZCB2aWEgZXRodG9vbCAtUy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYXhpZW5ldF94eHZfZ2V0X3NzZXRfY291bnQodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBBUlJBWV9TSVpFKGF4aWVuZXRfeHh2X2V0aHRvb2xfc3RhdHNfc3RyaW5ncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBheGllbmV0X3h4dl9nZXRfcGF1c2Vfc3RhdHMgLSBGaWxsIGV0aHRvb2wgcGF1c2UgZnJhbWUgc3RhdGlzdGljc1xuJiM0MzsgKiBAbHA6IFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlXG4mIzQzOyAqIEBwYXVzZV9zdGF0czogT3V0cHV0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgc3RydWN0dXJlIHRvIHBvcHVsYXRlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IHN0YXJ0O1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2bHAtXHUwMDNlaHdfc3RhdHNfc2VxY291bnQpO1xuJiM0MztcdFx0cGF1c2Vfc3RhdHMtXHUwMDNldHhfcGF1c2VfZnJhbWVzID1cbiYjNDM7XHRcdFx0bHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9UWF9QQVVTRV07XG4mIzQzO1x0XHRwYXVzZV9zdGF0cy1cdTAwM2VyeF9wYXVzZV9mcmFtZXMgPVxuJiM0MztcdFx0XHRscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX1BBVVNFXTtcbiYjNDM7XHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYXhpZW5ldF94eHZfZ2V0X2V0aF9tYWNfc3RhdHMgLSBGaWxsIElFRUUgODAyLjMgTUFDIHN0YXRpc3RpY3NcbiYjNDM7ICogQGxwOiBQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuJiM0MzsgKiBAbWFjX3N0YXRzOiBPdXRwdXQgZXRodG9vbF9ldGhfbWFjX3N0YXRzIHN0cnVjdHVyZSB0byBwb3B1bGF0ZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF94eHZfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4mIzQzO1x0XHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVzVHJhbnNtaXR0ZWRPSyA9XG4mIzQzO1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9QQUNLRVRTXTtcbiYjNDM7XHRcdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNSZWNlaXZlZE9LID1cbiYjNDM7XHRcdFx0bHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9UT1RBTF9HT09EX1BBQ0tFVFNdO1xuJiM0MztcdFx0bWFjX3N0YXRzLVx1MDAzZU9jdGV0c1RyYW5zbWl0dGVkT0sgPVxuJiM0MztcdFx0XHRscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1RYX1RPVEFMX0dPT0RfQllURVNdO1xuJiM0MztcdFx0bWFjX3N0YXRzLVx1MDAzZU9jdGV0c1JlY2VpdmVkT0sgPVxuJiM0MztcdFx0XHRscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX1RPVEFMX0dPT0RfQllURVNdO1xuJiM0MztcdFx0bWFjX3N0YXRzLVx1MDAzZUZyYW1lQ2hlY2tTZXF1ZW5jZUVycm9ycyA9XG4mIzQzO1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfQkFEX0ZDU107XG4mIzQzO1x0XHRtYWNfc3RhdHMtXHUwMDNlTXVsdGljYXN0RnJhbWVzWG1pdHRlZE9LID1cbiYjNDM7XHRcdFx0bHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9UWF9NVUxUSUNBU1RdO1xuJiM0MztcdFx0bWFjX3N0YXRzLVx1MDAzZUJyb2FkY2FzdEZyYW1lc1htaXR0ZWRPSyA9XG4mIzQzO1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfQlJPQURDQVNUXTtcbiYjNDM7XHRcdG1hY19zdGF0cy1cdTAwM2VNdWx0aWNhc3RGcmFtZXNSZWNlaXZlZE9LID1cbiYjNDM7XHRcdFx0bHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9NVUxUSUNBU1RdO1xuJiM0MztcdFx0bWFjX3N0YXRzLVx1MDAzZUJyb2FkY2FzdEZyYW1lc1JlY2VpdmVkT0sgPVxuJiM0MztcdFx0XHRscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX0JST0FEQ0FTVF07XG4mIzQzO1x0XHRtYWNfc3RhdHMtXHUwMDNlSW5SYW5nZUxlbmd0aEVycm9ycyA9XG4mIzQzO1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfSU5SQU5HRUVSUl07XG4mIzQzO1x0fSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeShcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCwgc3RhcnQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGF4aWVuZXRfeHh2X2dldF9ybW9uX3N0YXRzIC0gRmlsbCBSTU9OIHN0YXRpc3RpY3MgYW5kIGhpc3RvZ3JhbSByYW5nZXNcbiYjNDM7ICogQGxwOiBQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuJiM0MzsgKiBAcm1vbl9zdGF0czogT3V0cHV0IGV0aHRvb2xfcm1vbl9zdGF0cyBzdHJ1Y3R1cmUgdG8gcG9wdWxhdGVcbiYjNDM7ICogQHJhbmdlczogU2V0IHRvIHRoZSBSTU9OIGhpc3RvZ3JhbSByYW5nZSB0YWJsZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF94eHZfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxuJiM0MztcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4mIzQzO1x0XHRybW9uX3N0YXRzLVx1MDAzZXVuZGVyc2l6ZV9wa3RzID1cbiYjNDM7XHRcdFx0bHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9VTkRFUlNJWkVdO1xuJiM0MztcdFx0cm1vbl9zdGF0cy1cdTAwM2VvdmVyc2l6ZV9wa3RzID1cbiYjNDM7XHRcdFx0bHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9PVkVSU0laRV07XG4mIzQzO1x0XHRybW9uX3N0YXRzLVx1MDAzZWZyYWdtZW50cyA9XG4mIzQzO1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfRlJBR01FTlRdO1xuJiM0MztcdFx0cm1vbl9zdGF0cy1cdTAwM2VqYWJiZXJzID1cbiYjNDM7XHRcdFx0bHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9KQUJCRVJdO1xuJiM0MztcdH0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2bHAtXHUwMDNlaHdfc3RhdHNfc2VxY291bnQsIHN0YXJ0KSk7XG4mIzQzO1xuJiM0MztcdC8qIFhYViBjdXJyZW50bHkgZXhwb3NlcyBvbmx5IGFnZ3JlZ2F0ZSBSTU9OIGNvdW50ZXJzLCBub3QgcGVyLWJpblxuJiM0MztcdCAqIGhpc3RvZ3JhbSBidWNrZXRzLiBLZWVwIHJhbmdlcyBOVUxMIHVudGlsIGhpc3RvZ3JhbSBiaW5zIGFyZSB3aXJlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHQqcmFuZ2VzID0gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGF4aWVuZXRfY29uZmlnIGF4aWVuZXRfMTBnMjVnX2NvbmZpZyA9IHtcbiYjNDM7XHQuc3dfcGFkZGluZyA9IHRydWUsXG4mIzQzO1x0LmludGVybmFsX3BjcyA9IHRydWUsXG4mIzQzO1x0LnJlZ3NfbiA9IFhYVl9SRUdTX04sXG4mIzQzO1x0LmNsa19pbml0ID0gYXhpZW5ldF8xMGcyNWdfY2xrX2luaXQsXG4mIzQzO1x0LnNldG9wdGlvbnMgPSBheGllbmV0X3h4dl9zZXRvcHRpb25zLFxuJiM0MztcdC5wcm9iZV9pbml0ID0gYXhpZW5ldF94eHZfcHJvYmVfaW5pdCxcbiYjNDM7XHQuZ3RfcmVzZXQgPSBheGllbmV0X3h4dl9ndF9yZXNldCxcbiYjNDM7XHQubWFjX2luaXQgPSBheGllbmV0X3h4dl9tYWNfaW5pdCxcbiYjNDM7XHQuZ2V0X3JlZ3MgPSBheGllbmV0X3h4dl9nZXRfcmVncyxcbiYjNDM7XHQucGh5bGlua19zZXRfY2FwcyA9IGF4aWVuZXRfeHh2X3BoeWxpbmtfc2V0X2NhcGFiaWxpdGllcyxcbiYjNDM7XHQucGNzX29wcyA9IFx1MDAyNmF4aWVuZXRfeHh2X3Bjc19vcHMsXG4mIzQzO1x0LnN0YXRzX3VwZGF0ZSA9IGF4aWVuZXRfeHh2X3N0YXRzX3VwZGF0ZSxcbiYjNDM7XHQuZ2V0X3N0YXRzNjQgPSBheGllbmV0X3h4dl9nZXRfc3RhdHM2NCxcbiYjNDM7XHQuZ2V0X2V0aHRvb2xfc3RhdHMgPSBheGllbmV0X3h4dl9nZXRfZXRodG9vbF9zdGF0cyxcbiYjNDM7XHQuZ2V0X3N0cmluZ3MgPSBheGllbmV0X3h4dl9nZXRfc3RyaW5ncyxcbiYjNDM7XHQuZ2V0X3NzZXRfY291bnQgPSBheGllbmV0X3h4dl9nZXRfc3NldF9jb3VudCxcbiYjNDM7XHQuZ2V0X3BhdXNlX3N0YXRzID0gYXhpZW5ldF94eHZfZ2V0X3BhdXNlX3N0YXRzLFxuJiM0MztcdC5nZXRfZXRoX21hY19zdGF0cyA9IGF4aWVuZXRfeHh2X2dldF9ldGhfbWFjX3N0YXRzLFxuJiM0MztcdC5nZXRfcm1vbl9zdGF0cyA9IGF4aWVuZXRfeHh2X2dldF9ybW9uX3N0YXRzLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF94eHYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF94eHYuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmViZmE3ZDU3YTg1OTFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF94eHYuaFxuQEAgLTAsMCAmIzQzOzEsMTQxIEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbiYjNDM7LypcbiYjNDM7ICogWFhWICgxMEcvMjVHKSBzdXBwb3J0XG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBYSUxJTlhfQVhJRU5FVF9YWFZfSFxuJiM0MzsjZGVmaW5lIFhJTElOWF9BWElFTkVUX1hYVl9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCBheGllbmV0X2xvY2FsO1xuJiM0MztzdHJ1Y3QgYXhpZW5ldF9jb25maWc7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFhYVl9SRUdTX05cdFx0NDZcbiYjNDM7XG4mIzQzOy8qIFhYViBNQUMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi9cbiYjNDM7I2RlZmluZSBYWFZfR1RfUkVTRVRfT0ZGU0VUXHRcdDB4MDAwMDAwMDBcbiYjNDM7I2RlZmluZSBYWFZfUkVTRVRfT0ZGU0VUXHRcdDB4MDAwMDAwMDRcbiYjNDM7I2RlZmluZSBYWFZfTU9ERV9PRkZTRVRcdFx0XHQweDAwMDAwMDA4XG4mIzQzOyNkZWZpbmUgWFhWX1RDX09GRlNFVFx0XHRcdDB4MDAwMDAwMENcbiYjNDM7I2RlZmluZSBYWFZfUkNXMV9PRkZTRVRcdFx0XHQweDAwMDAwMDE0XG4mIzQzOyNkZWZpbmUgWFhWX0pVTV9PRkZTRVRcdFx0XHQweDAwMDAwMDE4XG4mIzQzOyNkZWZpbmUgWFhWX1ZMX0xFTkdUSF9PRkZTRVRcdFx0MHgwMDAwMDAxQ1xuJiM0MzsjZGVmaW5lIFhYVl9USUNLUkVHX09GRlNFVFx0XHQweDAwMDAwMDIwXG4mIzQzOyNkZWZpbmUgWFhWX0NPTkZJR19SRVZJU0lPTlx0XHQweDAwMDAwMDI0XG4mIzQzOyNkZWZpbmUgWFhWX0NPTkZJR18xNTg4X09GRlNFVFx0XHQweDAwMDAwMDM4XG4mIzQzOyNkZWZpbmUgWFhWX0NPTkZJR19UWF9GTE9XX0NUUkwxX09GRlNFVFx0MHgwMDAwMDA0MFxuJiM0MzsjZGVmaW5lIFhYVl9DT05GSUdfUlhfRkxPV19DVFJMMV9PRkZTRVRcdDB4MDAwMDAwOTRcbiYjNDM7I2RlZmluZSBYWFZfQ09ORklHX1JYX0ZMT1dfQ1RSTDJfT0ZGU0VUXHQweDAwMDAwMDk4XG4mIzQzOyNkZWZpbmUgWFhWX0NPTkZJR19SU0ZFQ19PRkZTRVRcdFx0MHgwMDAwMDBEMFxuJiM0MzsjZGVmaW5lIFhYVl9DT05GSUdfRkVDX09GRlNFVFx0XHQweDAwMDAwMEQ0XG4mIzQzOyNkZWZpbmUgWFhWX0FOX0NUTDFfT0ZGU0VUXHRcdDB4MDAwMDAwRTBcbiYjNDM7I2RlZmluZSBYWFZfQU5fQ1RMMl9PRkZTRVRcdFx0MHgwMDAwMDBFNFxuJiM0MzsjZGVmaW5lIFhYVl9BTl9BQklMSVRZX09GRlNFVFx0XHQweDAwMDAwMEY4XG4mIzQzOyNkZWZpbmUgWFhWX0xUX0NUTDFfT0ZGU0VUXHRcdDB4MDAwMDAxMDBcbiYjNDM7I2RlZmluZSBYWFZfU1dJVENIX0NPUkVfU1BFRURfT0ZGU0VUXHQweDAwMDAwMTM4XG4mIzQzOyNkZWZpbmUgWFhWX0NPTkZJR18xNTg4XzMyQklUX09GRlNFVFx0MHgwMDAwMDEzQ1xuJiM0MzsjZGVmaW5lIFhYVl9UWF9DT05GSUdfMTU4OF9PRkZTRVRcdDB4MDAwMDAxNDBcbiYjNDM7I2RlZmluZSBYWFZfUlhfQ09ORklHXzE1ODhfT0ZGU0VUXHQweDAwMDAwMTQ0XG4mIzQzOyNkZWZpbmUgWFhWX0dUV0laX0NUUkxfT0ZGU0VUXHRcdDB4MDAwMDAxNTRcbiYjNDM7I2RlZmluZSBYWFZfU1RBVFJYX1NUQVRVUzBfT0ZGU0VUXHQweDAwMDAwNDAwXG4mIzQzOyNkZWZpbmUgWFhWX1JYX1NUQVRVU19SRUcxXHRcdDB4MDAwMDA0MDRcbiYjNDM7I2RlZmluZSBYWFZfU1RBVFJYX1NUQVRVUzJfT0ZGU0VUXHQweDAwMDAwNDA4XG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRSWF9CTEtMQ0tfT0ZGU0VUXHQweDAwMDAwNDBDXG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfUlNGRUNfU1RBVFVTX09GRlNFVFx0MHgwMDAwMDQzQ1xuJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX0ZFQ19TVEFUVVNfT0ZGU0VUXHQweDAwMDAwNDQ4XG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfVFhfUlNGRUNfU1RBVFVTX09GRlNFVFx0MHgwMDAwMDQ0Q1xuJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1RYX0ZMT1dfQ1RSTDFfT0ZGU0VUXHQweDAwMDAwNDUwXG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfRkxPV19DVFJMMV9PRkZTRVRcdDB4MDAwMDA0NTRcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9BTl9TVFNfT0ZGU0VUXHRcdDB4MDAwMDA0NThcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9BTl9MUF9TVEFUVVNfT0ZGU0VUXHQweDAwMDAwNDVDXG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfQU5fTElOS19DVExfT0ZGU0VUXHQweDAwMDAwNDYwXG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfTFRfU1RBVFVTMV9PRkZTRVRcdDB4MDAwMDA0NjRcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9MVF9TVEFUVVMyX09GRlNFVFx0MHgwMDAwMDQ2OFxuJiM0MzsjZGVmaW5lIFhYVl9TVEFUX0xUX1NUQVRVUzNfT0ZGU0VUXHQweDAwMDAwNDZDXG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfTFRfU1RBVFVTNF9PRkZTRVRcdDB4MDAwMDA0NzBcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9MVF9DT0VGRjBfT0ZGU0VUXHQweDAwMDAwNDc0XG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfVkFMSURfQ1RSTF9DT0RFX09GRlNFVFx0MHgwMDAwMDQ5NFxuJiM0MzsjZGVmaW5lIFhYVl9TVEFUX0NPUkVfU1BFRURfT0ZGU0VUXHQweDAwMDAwNDk4XG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfVFNOX09GRlNFVFx0XHQweDAwMDAwNDlDXG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfR1RXSVpfT0ZGU0VUXHRcdDB4MDAwMDA0QTBcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9BTl9MSU5LX0NUTDJfT0ZGU0VUXHQweDAwMDAwOUYwXG4mIzQzO1xuJiM0MzsvKiBYWFYgc3RhdGlzdGljcyBjb3VudGVyIHJlZ2lzdGVycyAoUEcyMTApLiBFYWNoIGNvdW50ZXIgaXMgYSBwYWlyIG9mIDMyLWJpdFxuJiM0MzsgKiByZWdpc3RlcnM7IHRoZSBNU0IgcmVnaXN0ZXIgaXMgWFhWX1NUQVRfTVNCX09GRlNFVCBieXRlcyBhYm92ZSB0aGUgTFNCLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9NU0JfT0ZGU0VUXHRcdFx0NFxuJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1RYX0ZSQU1FX0VSUk9SX09GRlNFVFx0XHQweDAwMDAwNkEwXG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfVFhfVE9UQUxfUEFDS0VUU19PRkZTRVRcdDB4MDAwMDA3MDBcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9UWF9UT1RBTF9HT09EX1BBQ0tFVFNfT0ZGU0VUXHQweDAwMDAwNzA4XG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfVFhfVE9UQUxfQllURVNfT0ZGU0VUXHRcdDB4MDAwMDA3MTBcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9UWF9UT1RBTF9HT09EX0JZVEVTX09GRlNFVFx0MHgwMDAwMDcxOFxuJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1RYX0JBRF9GQ1NfT0ZGU0VUXHRcdDB4MDAwMDA3QjhcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9UWF9NVUxUSUNBU1RfT0ZGU0VUXHRcdDB4MDAwMDA3RDhcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9UWF9CUk9BRENBU1RfT0ZGU0VUXHRcdDB4MDAwMDA3RTBcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9UWF9QQVVTRV9PRkZTRVRcdFx0MHgwMDAwMDdGMFxuJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX1RPVEFMX1BBQ0tFVFNfT0ZGU0VUXHQweDAwMDAwODA4XG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9QQUNLRVRTX09GRlNFVFx0MHgwMDAwMDgxMFxuJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX1RPVEFMX0JZVEVTX09GRlNFVFx0XHQweDAwMDAwODE4XG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9CWVRFU19PRkZTRVRcdDB4MDAwMDA4MjBcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9SWF9VTkRFUlNJWkVfT0ZGU0VUXHRcdDB4MDAwMDA4OThcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9SWF9GUkFHTUVOVF9PRkZTRVRcdFx0MHgwMDAwMDhBMFxuJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX09WRVJTSVpFX09GRlNFVFx0XHQweDAwMDAwOEE4XG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfSkFCQkVSX09GRlNFVFx0XHQweDAwMDAwOEI4XG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfQkFEX0ZDU19PRkZTRVRcdFx0MHgwMDAwMDhDMFxuJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX01VTFRJQ0FTVF9PRkZTRVRcdFx0MHgwMDAwMDhFMFxuJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX0JST0FEQ0FTVF9PRkZTRVRcdFx0MHgwMDAwMDhFOFxuJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX1BBVVNFX09GRlNFVFx0XHQweDAwMDAwOEY4XG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfSU5SQU5HRUVSUl9PRkZTRVRcdFx0MHgwMDAwMDkwOFxuJiM0MztcbiYjNDM7LyogWFhWIE1BQyBSZWdpc3RlciBNYXNrIERlZmluaXRpb25zICovXG4mIzQzOyNkZWZpbmUgWFhWX0dUX1JFU0VUX01BU0tcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgWFhWX1RDX1RYX01BU0tcdFx0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBYWFZfUkNXMV9SWF9NQVNLXHRcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIFhYVl9SQ1cxX0ZDU19NQVNLXHRcdEJJVCgxKVxuJiM0MzsjZGVmaW5lIFhYVl9UQ19GQ1NfTUFTS1x0XHRcdEJJVCgxKVxuJiM0MzsjZGVmaW5lIFhYVl9SWF9CTEtMQ0tfTUFTS1x0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBYWFZfVElDS1JFR19TVEFURU5fTUFTS1x0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBYWFZfR1RXSVpfUkVTRVRfRE9ORVx0XHQoQklUKDApIHwgQklUKDEpKVxuJiM0MzsjZGVmaW5lIFhYVl9NQUpfTUFTS1x0XHRcdEdFTk1BU0soNywgMClcbiYjNDM7I2RlZmluZSBYWFZfTUlOX01BU0tcdFx0XHRHRU5NQVNLKDE1LCA4KVxuJiM0MzsvKiBJUCB2My4yJiM0MzsgZXhwb3NlcyBHVCB3aXphcmQgc3RhdHVzIGJlZm9yZSBvdGhlciByZWdpc3RlciBhY2Nlc3MgKFBHMjEwKS4gKi9cbiYjNDM7I2RlZmluZSBYWFZfSVBfVkVSX0dUV0laX01BSl9NSU5cdDNcbiYjNDM7I2RlZmluZSBYWFZfSVBfVkVSX0dUV0laX01JTl9NSU5cdDJcbiYjNDM7I2RlZmluZSBYWFZfQU5fQ09NUExFVEVfTUFTS1x0XHRCSVQoMilcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9DT1JFX1NQRUVEX1JUU1dfTUFTS1x0QklUKDEpXG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfQ09SRV9TUEVFRF8xMEdfTUFTS1x0QklUKDApXG4mIzQzOyNkZWZpbmUgWFhWX1JYX1NUQVRVU19NQVNLXHRcdEJJVCgwKVxuJiM0MztcbiYjNDM7LyogWFhWICgxMEcvMjVHKSBNQUMgc3RhdGlzdGljcyBjb3VudGVycywgdXNlZCB0byBpbmRleCB4eHZfc3RhdF9iYXNlW10uICovXG4mIzQzO2VudW0geHh2X3N0YXQge1xuJiM0MztcdFhYVl9TVEFUX1JYX1RPVEFMX1BBQ0tFVFMgPSAwLFxuJiM0MztcdFhYVl9TVEFUX1JYX1RPVEFMX0dPT0RfUEFDS0VUUyxcbiYjNDM7XHRYWFZfU1RBVF9SWF9UT1RBTF9CWVRFUyxcbiYjNDM7XHRYWFZfU1RBVF9SWF9UT1RBTF9HT09EX0JZVEVTLFxuJiM0MztcdFhYVl9TVEFUX1JYX0JBRF9GQ1MsXG4mIzQzO1x0WFhWX1NUQVRfUlhfSU5SQU5HRUVSUixcbiYjNDM7XHRYWFZfU1RBVF9SWF9NVUxUSUNBU1QsXG4mIzQzO1x0WFhWX1NUQVRfUlhfQlJPQURDQVNULFxuJiM0MztcdFhYVl9TVEFUX1JYX1VOREVSU0laRSxcbiYjNDM7XHRYWFZfU1RBVF9SWF9GUkFHTUVOVCxcbiYjNDM7XHRYWFZfU1RBVF9SWF9KQUJCRVIsXG4mIzQzO1x0WFhWX1NUQVRfUlhfT1ZFUlNJWkUsXG4mIzQzO1x0WFhWX1NUQVRfUlhfUEFVU0UsXG4mIzQzO1x0WFhWX1NUQVRfVFhfVE9UQUxfUEFDS0VUUyxcbiYjNDM7XHRYWFZfU1RBVF9UWF9UT1RBTF9HT09EX1BBQ0tFVFMsXG4mIzQzO1x0WFhWX1NUQVRfVFhfVE9UQUxfQllURVMsXG4mIzQzO1x0WFhWX1NUQVRfVFhfVE9UQUxfR09PRF9CWVRFUyxcbiYjNDM7XHRYWFZfU1RBVF9UWF9CQURfRkNTLFxuJiM0MztcdFhYVl9TVEFUX1RYX0ZSQU1FX0VSUk9SLFxuJiM0MztcdFhYVl9TVEFUX1RYX01VTFRJQ0FTVCxcbiYjNDM7XHRYWFZfU1RBVF9UWF9CUk9BRENBU1QsXG4mIzQzO1x0WFhWX1NUQVRfVFhfUEFVU0UsXG4mIzQzO1x0WFhWX1NUQVRfQ09VTlQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGF4aWVuZXRfY29uZmlnIGF4aWVuZXRfMTBnMjVnX2NvbmZpZztcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBYSUxJTlhfQVhJRU5FVF9YWFZfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHZlbmRvci1zcGVjaWZpYyBYaWxpbnggQVhJIC8gWFhWIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54LyksIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgWGlsaW54IFhYViAxMEcvMjVHIEV0aGVybmV0IFN1YnN5c3RlbSBGUEdBIElQIGNvcmUuIFRoaXMgaGFyZHdhcmUgcmVxdWlyZXMgcGh5c2ljYWwgWGlsaW54L0FNRCBGUEdBL1NvQyBoYXJkd2FyZSBhbmQgY2Fubm90IGJlIHJlYWNoZWQgb3IgZXhlY3V0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDVkNTAyZmMxOTI5ZjczZTBmZWI4MDczOWRiZGUzMmExNzY4ZDhjNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDIyOjA3OjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHh4di1ldGhlcm5ldC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHh4di1ldGhlcm5ldC55YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjJiZTNhZGUxMWQ0NjUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3hsbngseHh2LWV0aGVybmV0LnlhbWwKQEAgLTAsMCAmIzQzOzEsMTA3IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpCiYjNDM7JVlBTUwgMS4yCiYjNDM7LS0tCiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQveGxueCx4eHYtZXRoZXJuZXQueWFtbCMKJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKJiM0MzsKJiM0Mzt0aXRsZTogWGlsaW54IFhYViAxMEcvMjVHIEV0aGVybmV0IFN1YnN5c3RlbQomIzQzOwomIzQzO21haW50YWluZXJzOgomIzQzOyAgLSBSYWRoZXkgU2h5YW0gUGFuZGV5ICZsdDtyYWRoZXkuc2h5YW0ucGFuZGV5QGFtZC5jb20mZ3Q7CiYjNDM7ICAtIFN1cmFqIEd1cHRhICZsdDtzdXJhai5ndXB0YTJAYW1kLmNvbSZndDsKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjoKJiM0MzsgIFRoZSBYaWxpbnggWFhWIEV0aGVybmV0IFN1YnN5c3RlbSBpbXBsZW1lbnRzIGEgMTBHLzI1RyBFdGhlcm5ldCBNQUMgd2l0aCBhbgomIzQzOyAgaW4tY29yZSBQQ1MvUE1BIGRyaXZpbmcgYSBoaWdoLXNwZWVkIHNlcmlhbCB0cmFuc2NlaXZlci4gSXQgc3VwcG9ydHMgdGhlCiYjNDM7ICAxMEdCQVNFLVIgYW5kIDI1R0JBU0UtUiBsaW5lIHJhdGVzLCB3aXRoIDI1RyBvcGVyYXRpb24gZm9sbG93aW5nIHRoZSAyNUcKJiM0MzsgIEV0aGVybmV0IENvbnNvcnRpdW0gc3BlY2lmaWNhdGlvbi4gSXQgaGFzIG5vIGV4dGVybmFsIE1ESU8gUEhZLCBhbmQgaXRzCiYjNDM7ICBwYXlsb2FkIGlzIG1vdmVkIGJ5IGFuIGV4dGVybmFsIEFYSSBETUEgKG9yIG11bHRpY2hhbm5lbCBETUEpIGNvbnRyb2xsZXIKJiM0MzsgIHJlZmVyZW5jZWQgdGhyb3VnaCB0aGUgJiMzNDtkbWFzJiMzNDsgcHJvcGVydHkuCiYjNDM7CiYjNDM7cHJvcGVydGllczoKJiM0MzsgIGNvbXBhdGlibGU6CiYjNDM7ICAgIGNvbnN0OiB4bG54LHh4di1ldGhlcm5ldC0xLjAKJiM0MzsKJiM0MzsgIHJlZzoKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsgICAgZGVzY3JpcHRpb246IE1BQyBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXIgc3BhY2UuCiYjNDM7CiYjNDM7ICBjbG9ja3M6CiYjNDM7ICAgIGl0ZW1zOgomIzQzOyAgICAgIC0gZGVzY3JpcHRpb246IFJYIEFYSTQtU3RyZWFtIGNsb2NrLgomIzQzOyAgICAgIC0gZGVzY3JpcHRpb246IEdUIERSUCBjbG9jay4KJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBBWEk0LUxpdGUgcmVnaXN0ZXIgY2xvY2suCiYjNDM7CiYjNDM7ICBjbG9jay1uYW1lczoKJiM0MzsgICAgaXRlbXM6CiYjNDM7ICAgICAgLSBjb25zdDogcnhfY29yZQomIzQzOyAgICAgIC0gY29uc3Q6IGRycAomIzQzOyAgICAgIC0gY29uc3Q6IHNfYXhpCiYjNDM7CiYjNDM7ICBwaHktbW9kZToKJiM0MzsgICAgZW51bToKJiM0MzsgICAgICAtIDEwZ2Jhc2UtcgomIzQzOyAgICAgIC0gMjVnYmFzZS1yCiYjNDM7CiYjNDM7ICB4bG54LHJ4bWVtOgomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICBTaXplIGluIGJ5dGVzIG9mIHRoZSBSeC9UeCBwYWNrZXQgYnVmZmVyIG1lbW9yeSBidWlsdCBpbnRvIHRoZSBJUC4gSXQgaXMKJiM0MzsgICAgICBmaXhlZCBieSB0aGUgaGFyZHdhcmUgZGVzaWduIGFuZCBib3VuZHMgdGhlIGxhcmdlc3QgZnJhbWUgKGp1bWJvIE1UVSkgdGhlCiYjNDM7ICAgICAgZGV2aWNlIGNhbiBhY2NlcHQuCiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMgomIzQzOwomIzQzOyAgZG1hczoKJiM0MzsgICAgbWluSXRlbXM6IDIKJiM0MzsgICAgbWF4SXRlbXM6IDMyCiYjNDM7ICAgIGRlc2NyaXB0aW9uOiBUWCBhbmQgUlggRE1BIGNoYW5uZWwgcGhhbmRsZS4KJiM0MzsKJiM0MzsgIGRtYS1uYW1lczoKJiM0MzsgICAgaXRlbXM6CiYjNDM7ICAgICAgcGF0dGVybjogJiMzNDteW3RyXXhfY2hhbihbMC05XXwxWzAtNV0pJCYjMzQ7CiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIFNob3VsZCBiZSAmIzM0O3R4X2NoYW4wJiMzNDssICYjMzQ7dHhfY2hhbjEmIzM0OyAuLi4gJiMzNDt0eF9jaGFuMTUmIzM0OyBmb3IgRE1BIFR4IGNoYW5uZWwgYW5kCiYjNDM7ICAgICAgJiMzNDtyeF9jaGFuMCYjMzQ7LCAmIzM0O3J4X2NoYW4xJiMzNDsgLi4uICYjMzQ7cnhfY2hhbjE1JiMzNDsgZm9yIERNQSBSeCBjaGFubmVsLgomIzQzOyAgICBtaW5JdGVtczogMgomIzQzOyAgICBtYXhJdGVtczogMzIKJiM0MzsKJiM0MztyZXF1aXJlZDoKJiM0MzsgIC0gY29tcGF0aWJsZQomIzQzOyAgLSByZWcKJiM0MzsgIC0gY2xvY2tzCiYjNDM7ICAtIGNsb2NrLW5hbWVzCiYjNDM7ICAtIHBoeS1tb2RlCiYjNDM7ICAtIHhsbngscnhtZW0KJiM0MzsgIC0gZG1hcwomIzQzOyAgLSBkbWEtbmFtZXMKJiM0MzsKJiM0MzthbGxPZjoKJiM0MzsgIC0gJHJlZjogL3NjaGVtYXMvbmV0L2V0aGVybmV0LWNvbnRyb2xsZXIueWFtbCMKJiM0MzsKJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAjIFNpbmdsZSBBWEkgRE1BIGNoYW5uZWwgcGFpcgomIzQzOyAgLSB8CiYjNDM7ICAgIGV0aGVybmV0QDgwMDAwMDAwIHsKJiM0MzsgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O3hsbngseHh2LWV0aGVybmV0LTEuMCYjMzQ7OwomIzQzOyAgICAgICAgcmVnID0gJmx0OzB4ODAwMDAwMDAgMHgxMDAwMCZndDs7CiYjNDM7ICAgICAgICBjbG9jay1uYW1lcyA9ICYjMzQ7cnhfY29yZSYjMzQ7LCAmIzM0O2RycCYjMzQ7LCAmIzM0O3NfYXhpJiMzNDs7CiYjNDM7ICAgICAgICBjbG9ja3MgPSAmbHQ7JmFtcDtyeF9jbGsmZ3Q7LCAmbHQ7JmFtcDtkcnBfY2xrJmd0OywgJmx0OyZhbXA7YXhpX2NsayZndDs7CiYjNDM7ICAgICAgICBkbWEtbmFtZXMgPSAmIzM0O3R4X2NoYW4wJiMzNDssICYjMzQ7cnhfY2hhbjAmIzM0OzsKJiM0MzsgICAgICAgIGRtYXMgPSAmbHQ7JmFtcDtheGlfZG1hIDAmZ3Q7LCAmbHQ7JmFtcDtheGlfZG1hIDEmZ3Q7OwomIzQzOyAgICAgICAgcGh5LW1vZGUgPSAmIzM0OzI1Z2Jhc2UtciYjMzQ7OwomIzQzOyAgICAgICAgeGxueCxyeG1lbSA9ICZsdDsweDgwMDAmZ3Q7OwomIzQzOyAgICB9OwomIzQzOyAgIyBNdWx0aWNoYW5uZWwgRE1BIChNQ0RNQSkgd2l0aCBtdWx0aXBsZSBUeC9SeCBjaGFubmVscwomIzQzOyAgLSB8CiYjNDM7ICAgIGV0aGVybmV0QDgwMDEwMDAwIHsKJiM0MzsgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O3hsbngseHh2LWV0aGVybmV0LTEuMCYjMzQ7OwomIzQzOyAgICAgICAgcmVnID0gJmx0OzB4ODAwMTAwMDAgMHgxMDAwMCZndDs7CiYjNDM7ICAgICAgICBjbG9jay1uYW1lcyA9ICYjMzQ7cnhfY29yZSYjMzQ7LCAmIzM0O2RycCYjMzQ7LCAmIzM0O3NfYXhpJiMzNDs7CiYjNDM7ICAgICAgICBjbG9ja3MgPSAmbHQ7JmFtcDtyeF9jbGsmZ3Q7LCAmbHQ7JmFtcDtkcnBfY2xrJmd0OywgJmx0OyZhbXA7YXhpX2NsayZndDs7CiYjNDM7ICAgICAgICBkbWEtbmFtZXMgPSAmIzM0O3R4X2NoYW4wJiMzNDssICYjMzQ7dHhfY2hhbjEmIzM0OywgJiMzNDtyeF9jaGFuMCYjMzQ7LCAmIzM0O3J4X2NoYW4xJiMzNDs7CiYjNDM7ICAgICAgICBkbWFzID0gJmx0OyZhbXA7YXhpX21jZG1hIDAmZ3Q7LCAmbHQ7JmFtcDtheGlfbWNkbWEgMSZndDssCiYjNDM7ICAgICAgICAgICAgICAgJmx0OyZhbXA7YXhpX21jZG1hIDE2Jmd0OywgJmx0OyZhbXA7YXhpX21jZG1hIDE3Jmd0OzsKJiM0MzsgICAgICAgIHBoeS1tb2RlID0gJiMzNDsxMGdiYXNlLXImIzM0OzsKJiM0MzsgICAgICAgIHhsbngscnhtZW0gPSAmbHQ7MHg4MDAwJmd0OzsKJiM0MzsgICAgfTsKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggMGI0MmU4OThmNGQ4ZS4uNGVkYzhhNzMwNGRiMCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTI5ODYxLDYgJiM0MzsyOTg2MSw3IEBAIFhJTElOWCBBWEkgRVRIRVJORVQgRFJJVkVSCiBNOglSYWRoZXkgU2h5YW0gUGFuZGV5ICZsdDtyYWRoZXkuc2h5YW0ucGFuZGV5QGFtZC5jb20mZ3Q7CiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3hsbngsYXhpLWV0aGVybmV0LnlhbWwKJiM0MztGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3hsbngseHh2LWV0aGVybmV0LnlhbWwKIEY6CWRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldCoKIAogWElMSU5YIENBTiBEUklWRVIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9NYWtlZmlsZQppbmRleCA3ZDdkYzE3NzE0MjNlLi5kYjkwZTY5MWZlYzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L01ha2VmaWxlCkBAIC02LDUgJiM0Mzs2LDYgQEAKIGxsX3RlbWFjLW9ianMgOj0gbGxfdGVtYWNfbWFpbi5vIGxsX3RlbWFjX21kaW8ubwogb2JqLSQoQ09ORklHX1hJTElOWF9MTF9URU1BQykgJiM0Mzs9IGxsX3RlbWFjLm8KIG9iai0kKENPTkZJR19YSUxJTlhfRU1BQ0xJVEUpICYjNDM7PSB4aWxpbnhfZW1hY2xpdGUubwoteGlsaW54X2VtYWMtb2JqcyA6PSB4aWxpbnhfYXhpZW5ldF9tYWluLm8geGlsaW54X2F4aWVuZXRfbWRpby5vCiYjNDM7eGlsaW54X2VtYWMtb2JqcyA6PSB4aWxpbnhfYXhpZW5ldF9tYWluLm8geGlsaW54X2F4aWVuZXRfbWRpby5vIFwKJiM0MzsJCSAgICB4aWxpbnhfYXhpZW5ldF94eHYubwogb2JqLSQoQ09ORklHX1hJTElOWF9BWElfRU1BQykgJiM0Mzs9IHhpbGlueF9lbWFjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0LmgKaW5kZXggZmNkM2FhZWYyN2ZjMy4uMmVhMDg2ZmM0ZGMzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0LmgKQEAgLTEwLDYgJiM0MzsxMCw3IEBACiAjZGVmaW5lIFhJTElOWF9BWElFTkVUX0gKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2RpbS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbnRlcnJ1cHQuaCZndDsKQEAgLTE3LDYgJiM0MzsxOCw4IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcGh5bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJiMzNDt4aWxpbnhfYXhpZW5ldF94eHYuaCYjMzQ7CiYjNDM7CiAvKiBQYWNrZXQgc2l6ZSBpbmZvICovCiAjZGVmaW5lIFhBRV9IRFJfU0laRQkJCTE0IC8qIFNpemUgb2YgRXRoZXJuZXQgaGVhZGVyICovCiAjZGVmaW5lIFhBRV9UUkxfU0laRQkJCSA0IC8qIFNpemUgb2YgRXRoZXJuZXQgdHJhaWxlciAoRkNTKSAqLwpAQCAtNTQ1LDYgJiM0Mzs1NDgsOSBAQCBzdHJ1Y3Qgc2tidWZfZG1hX2Rlc2NyaXB0b3IgewogICogQHR4X3JpbmdfdGFpbDogVFggc2tiIHJpbmcgYnVmZmVyIHRhaWwgaW5kZXguCiAgKiBAcnhfcmluZ19oZWFkOiBSWCBza2IgcmluZyBidWZmZXIgaGVhZCBpbmRleC4KICAqIEByeF9yaW5nX3RhaWw6IFJYIHNrYiByaW5nIGJ1ZmZlciB0YWlsIGluZGV4LgomIzQzOyAqIEB4eHZfaXBfdmVyc2lvbjogWFhWIElQIHZlcnNpb24uCiYjNDM7ICogQHh4dl9zdGF0X2Jhc2U6IFNvZnR3YXJlIGFjY3VtdWxhdG9ycyBmb3IgdGhlIFhYViBjbGVhci1vbi10aWNrIGNvdW50ZXJzLgomIzQzOyAqIEBheGllbmV0X2NvbmZpZzogTUFDLXR5cGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBhbmQgb3BlcmF0aW9ucy4KICAqLwogc3RydWN0IGF4aWVuZXRfbG9jYWwgewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwpAQCAtNTk4LDYgJiM0Mzs2MDQsNyBAQCBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCB7CiAKIAl1NjQgaHdfc3RhdF9iYXNlW1NUQVRfQ09VTlRdOwogCXUzMiBod19sYXN0X2NvdW50ZXJbU1RBVF9DT1VOVF07CiYjNDM7CXU2NCB4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX0NPVU5UXTsKIAlzZXFjb3VudF9tdXRleF90IGh3X3N0YXRzX3NlcWNvdW50OwogCXN0cnVjdCBtdXRleCBzdGF0c19sb2NrOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgc3RhdHNfd29yazsKQEAgLTYyNiw4ICYjNDM7NjMzLDg4IEBAIHN0cnVjdCBheGllbmV0X2xvY2FsIHsKIAlpbnQgdHhfcmluZ190YWlsOwogCWludCByeF9yaW5nX2hlYWQ7CiAJaW50IHJ4X3JpbmdfdGFpbDsKJiM0MzsJdTMyIHh4dl9pcF92ZXJzaW9uOwomIzQzOwljb25zdCBzdHJ1Y3QgYXhpZW5ldF9jb25maWcgKmF4aWVuZXRfY29uZmlnOwogfTsKIAomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBheGllbmV0X2NvbmZpZyAtIE1BQy10eXBlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gYW5kIG9wZXJhdGlvbnMKJiM0MzsgKiBAbWRpbzogTUFDIGhhcyBhbiBNRElPIGJ1cyBmb3IgZXh0ZXJuYWwgUEhZIG1hbmFnZW1lbnQKJiM0MzsgKiBAbWFjX2lycTogTUFDIGhhcyBhIGRlZGljYXRlZCBjb3JlIGludGVycnVwdAomIzQzOyAqIEBsZWdhY3lfZG1hOiBNQUMgc3VwcG9ydHMgdGhlIGxlZ2FjeSAobm9uLWRtYWVuZ2luZSkgRE1BIG1vZGUKJiM0MzsgKiBAdWNfZmlsdGVyOiBNQUMgaGFzIHVuaWNhc3QgYWRkcmVzcyBmaWx0ZXIgcmVnaXN0ZXJzCiYjNDM7ICogQG1jX2ZpbHRlcjogTUFDIGhhcyBtdWx0aWNhc3QgYWRkcmVzcyBmaWx0ZXIgcmVnaXN0ZXJzCiYjNDM7ICogQHZsYW46IE1BQyBzdXBwb3J0cyBWTEFOIGZyYW1lcyBieSBkZWZhdWx0CiYjNDM7ICogQGp1bWJvOiBNQUMgc3VwcG9ydHMganVtYm8gZnJhbWVzCiYjNDM7ICogQGRtYV90eF9jc3VtOiBNQUMgc3VwcG9ydHMgVFggY2hlY2tzdW0gb2ZmbG9hZAomIzQzOyAqIEBzd19wYWRkaW5nOiBTaG9ydCBmcmFtZXMgbXVzdCBiZSBwYWRkZWQgaW4gc29mdHdhcmUgYmVmb3JlIHRyYW5zbWl0CiYjNDM7ICogQGludGVybmFsX3BjczogTUFDIGFsd2F5cyBkcml2ZXMgYW4gaW50ZXJuYWwgUENTCiYjNDM7ICogQHJlZ3NfbjogTnVtYmVyIG9mIE1BQyByZWdpc3RlcnMgZXhwb3NlZCB0aHJvdWdoIGV0aHRvb2wgLWQKJiM0MzsgKiBAY2xrX2luaXQ6IENhbGxiYWNrIHRvIGdldCBhbmQgZW5hYmxlIHRoZSBNQUMtc3BlY2lmaWMgY2xvY2tzCiYjNDM7ICogQHNldG9wdGlvbnM6IENhbGxiYWNrIHRvIHByb2dyYW0gTUFDIGhhcmR3YXJlIG9wdGlvbnMKJiM0MzsgKiBAcHJvYmVfaW5pdDogQ2FsbGJhY2sgZm9yIE1BQy1zcGVjaWZpYyBwcm9iZS10aW1lIGluaXQsIG9yIE5VTEwgaWYgdW51c2VkCiYjNDM7ICogQGd0X3Jlc2V0OiBDYWxsYmFjayB0byByZXNldCB0aGUgc2VyaWFsIHRyYW5zY2VpdmVyIChHVCksIG9yIE5VTEwgaWYgdW51c2VkCiYjNDM7ICogQG1hY19pbml0OiBDYWxsYmFjayBmb3IgTUFDLXNwZWNpZmljIGJyaW5nLXVwIGFmdGVyIHRoZSBETUEgcmVzZXQKJiM0MzsgKiBAbWFjX2xpbmtfdXA6IENhbGxiYWNrIHRvIHByb2dyYW0gbGluayBzcGVlZCBhbmQgcGF1c2Ugb24gbGluayB1cCwgb3IgTlVMTAomIzQzOyAqIEBnZXRfcmVnczogQ2FsbGJhY2sgdG8gZHVtcCB0aGUgTUFDIHJlZ2lzdGVycyBmb3IgZXRodG9vbCAtZAomIzQzOyAqIEBwaHlsaW5rX3NldF9jYXBzOiBDYWxsYmFjayB0byBzZXQgcGh5bGluayBNQUMgY2FwYWJpbGl0aWVzCiYjNDM7ICogQHBjc19vcHM6IHBoeWxpbmsgUENTIG9wZXJhdGlvbnMgZm9yIHRoaXMgTUFDLCBvciBOVUxMIGlmIHVudXNlZAomIzQzOyAqIEBzdGF0c191cGRhdGU6IENhbGxiYWNrIHRvIGxhdGNoL2FjY3VtdWxhdGUgdGhlIHBlcmlvZGljIE1BQyBjb3VudGVycwomIzQzOyAqIEBnZXRfc3RhdHM2NDogQ2FsbGJhY2sgdG8gcmVhZCBNQUMgY291bnRlcnMgaW50byBydG5sX2xpbmtfc3RhdHM2NAomIzQzOyAqIEBnZXRfZXRodG9vbF9zdGF0czogQ2FsbGJhY2sgdG8gcmVhZCBNQUMgY291bnRlcnMgZm9yIGV0aHRvb2wgLVMKJiM0MzsgKiBAZ2V0X3N0cmluZ3M6IENhbGxiYWNrIHRvIGZpbGwgdGhlIGV0aHRvb2wgLVMgc3RhdGlzdGljIG5hbWUgc3RyaW5ncwomIzQzOyAqIEBnZXRfc3NldF9jb3VudDogQ2FsbGJhY2sgcmV0dXJuaW5nIHRoZSBudW1iZXIgb2YgZXRodG9vbCAtUyBzdGF0aXN0aWNzCiYjNDM7ICogQGdldF9wYXVzZV9zdGF0czogQ2FsbGJhY2sgdG8gcmVhZCBNQUMgcGF1c2UtZnJhbWUgY291bnRlcnMKJiM0MzsgKiBAZ2V0X2V0aF9tYWNfc3RhdHM6IENhbGxiYWNrIHRvIHJlYWQgSUVFRSA4MDIuMyBNQUMgY291bnRlcnMKJiM0MzsgKiBAZ2V0X2V0aF9jdHJsX3N0YXRzOiBDYWxsYmFjayB0byByZWFkIE1BQy1jb250cm9sIGZyYW1lIGNvdW50ZXJzLCBvciBOVUxMCiYjNDM7ICoJCQlpZiB0aGUgTUFDIGV4cG9zZXMgbm8gY29udHJvbC1mcmFtZSBjb3VudGVycwomIzQzOyAqIEBnZXRfcm1vbl9zdGF0czogQ2FsbGJhY2sgdG8gcmVhZCBSTU9OIGNvdW50ZXJzIGFuZCBoaXN0b2dyYW0gcmFuZ2VzCiYjNDM7ICovCiYjNDM7c3RydWN0IGF4aWVuZXRfY29uZmlnIHsKJiM0MzsJYm9vbCBtZGlvOwomIzQzOwlib29sIG1hY19pcnE7CiYjNDM7CWJvb2wgbGVnYWN5X2RtYTsKJiM0MzsJYm9vbCB1Y19maWx0ZXI7CiYjNDM7CWJvb2wgbWNfZmlsdGVyOwomIzQzOwlib29sIHZsYW47CiYjNDM7CWJvb2wganVtYm87CiYjNDM7CWJvb2wgZG1hX3R4X2NzdW07CiYjNDM7CWJvb2wgc3dfcGFkZGluZzsKJiM0MzsJYm9vbCBpbnRlcm5hbF9wY3M7CiYjNDM7CXVuc2lnbmVkIGludCByZWdzX247CiYjNDM7CWludCAoKmNsa19pbml0KShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApOwomIzQzOwl2b2lkICgqc2V0b3B0aW9ucykoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBvcHRpb25zKTsKJiM0MzsJdm9pZCAoKnByb2JlX2luaXQpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCk7CiYjNDM7CXZvaWQgKCpndF9yZXNldCkoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKTsKJiM0MzsJaW50ICgqbWFjX2luaXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKJiM0MzsJdm9pZCAoKm1hY19saW5rX3VwKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IHNwZWVkLAomIzQzOwkJCSAgICBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKTsKJiM0MzsJdm9pZCAoKmdldF9yZWdzKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsIHUzMiAqZGF0YSk7CiYjNDM7CXZvaWQgKCpwaHlsaW5rX3NldF9jYXBzKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsCiYjNDM7CQkJCSBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyk7CiYjNDM7CWNvbnN0IHN0cnVjdCBwaHlsaW5rX3Bjc19vcHMgKnBjc19vcHM7CiYjNDM7CXZvaWQgKCpzdGF0c191cGRhdGUpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCk7CiYjNDM7CXZvaWQgKCpnZXRfc3RhdHM2NCkoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLAomIzQzOwkJCSAgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKTsKJiM0MzsJdm9pZCAoKmdldF9ldGh0b29sX3N0YXRzKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsIHU2NCAqZGF0YSk7CiYjNDM7CXZvaWQgKCpnZXRfc3RyaW5ncykodTggKmRhdGEpOwomIzQzOwlpbnQgKCpnZXRfc3NldF9jb3VudCkodm9pZCk7CiYjNDM7CXZvaWQgKCpnZXRfcGF1c2Vfc3RhdHMpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwKJiM0MzsJCQkJc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKTsKJiM0MzsJdm9pZCAoKmdldF9ldGhfbWFjX3N0YXRzKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsCiYjNDM7CQkJCSAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKTsKJiM0MzsJdm9pZCAoKmdldF9ldGhfY3RybF9zdGF0cykoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLAomIzQzOwkJCQkgICBzdHJ1Y3QgZXRodG9vbF9ldGhfY3RybF9zdGF0cyAqY3RybF9zdGF0cyk7CiYjNDM7CXZvaWQgKCpnZXRfcm1vbl9zdGF0cykoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqcGNzX3RvX2F4aWVuZXRfbG9jYWwoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gY29udGFpbmVyX29mKHBjcywgc3RydWN0IGF4aWVuZXRfbG9jYWwsIHBjcyk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBzdHJ1Y3QgYXhpZW5ldF9vcHRpb24gLSBVc2VkIHRvIHNldCBheGkgZXRoZXJuZXQgaGFyZHdhcmUgb3B0aW9ucwogICogQG9wdDoJT3B0aW9uIHRvIGJlIHNldC4KQEAgLTc0MSw0ICYjNDM7ODI4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGF4aWVuZXRfZG1hX291dF9hZGRyKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwgb2ZmX3QgcmVnLAogaW50IGF4aWVuZXRfbWRpb19zZXR1cChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApOwogdm9pZCBheGllbmV0X21kaW9fdGVhcmRvd24oc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKTsKIAomIzQzOy8qIFJNT04gaGlzdG9ncmFtIHJhbmdlcyBzaGFyZWQgYnkgYWxsIE1BQyB0eXBlcyAqLwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgYXhpZW5ldF9ybW9uX3Jhbmdlc1tdOwomIzQzOwogI2VuZGlmIC8qIFhJTElOWF9BWElfRU5FVF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uYwppbmRleCAxNzIyYjcwMzhmMzQwLi41OGUyMmYwZmQ3Yzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmMKQEAgLTMzLDYgJiM0MzszMyw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvb2ZfaXJxLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2ZfYWRkcmVzcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX2RldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wcm9wZXJ0eS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21hdGg2NC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwpAQCAtNjUsMTYgJiM0Mzs2Niw2IEBACiAKIHN0YXRpYyB2b2lkIGF4aWVuZXRfcnhfc3VibWl0X2Rlc2Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwogCi0vKiBNYXRjaCB0YWJsZSBmb3Igb2ZfcGxhdGZvcm0gYmluZGluZyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXhpZW5ldF9vZl9tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAmIzM0O3hsbngsYXhpLWV0aGVybmV0LTEuMDAuYSYjMzQ7LCB9LAotCXsgLmNvbXBhdGlibGUgPSAmIzM0O3hsbngsYXhpLWV0aGVybmV0LTEuMDEuYSYjMzQ7LCB9LAotCXsgLmNvbXBhdGlibGUgPSAmIzM0O3hsbngsYXhpLWV0aGVybmV0LTIuMDEuYSYjMzQ7LCB9LAotCXt9LAotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXhpZW5ldF9vZl9tYXRjaCk7Ci0KIC8qIE9wdGlvbiB0YWJsZSBmb3Igc2V0dGluZyB1cCBBeGkgRXRoZXJuZXQgaGFyZHdhcmUgb3B0aW9ucyAqLwogc3RhdGljIHN0cnVjdCBheGllbmV0X29wdGlvbiBheGllbmV0X29wdGlvbnNbXSA9IHsKIAkvKiBUdXJuIG9uIGp1bWJvIHBhY2tldCBzdXBwb3J0IGZvciBib3RoIFJ4IGFuZCBUeCAqLwpAQCAtNDE5LDYgJiM0Mzs0MTAsOSBAQCBzdGF0aWMgdm9pZCBheGllbmV0X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmRldi0mZ3Q7ZGV2X2FkZHIpKQogCQlldGhfaHdfYWRkcl9yYW5kb20obmRldik7CiAKJiM0MzsJaWYgKCFscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O3VjX2ZpbHRlcikKJiM0MzsJCXJldHVybjsKJiM0MzsKIAkvKiBTZXQgdXAgdW5pY2FzdCBNQUMgYWRkcmVzcyBmaWx0ZXIgc2V0IGl0cyBtYWMgYWRkcmVzcyAqLwogCWF4aWVuZXRfaW93KGxwLCBYQUVfVUFXMF9PRkZTRVQsCiAJCSAgICAobmRldi0mZ3Q7ZGV2X2FkZHJbMF0pIHwKQEAgLTQ2OCw2ICYjNDM7NDYyLDkgQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJdTMyIHJlZywgYWYwcmVnLCBhZjFyZWc7CiAJc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CiAKJiM0MzsJaWYgKCFscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O21jX2ZpbHRlcikKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlyZWcgPSBheGllbmV0X2lvcihscCwgWEFFX0ZNSV9PRkZTRVQpOwogCXJlZyAmYW1wOz0gflhBRV9GTUlfUE1fTUFTSzsKIAlpZiAobmRldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX1BST01JU0MpCkBAIC01NzYsMTYgJiM0Mzs1NzMsMzEgQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9zdGF0c191cGRhdGUoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLCBib29sIHJlc2V0KQogCXdyaXRlX3NlcWNvdW50X2VuZCgmYW1wO2xwLSZndDtod19zdGF0c19zZXFjb3VudCk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBheGllbmV0XzFnX3N0YXRzX3VwZGF0ZSAtIFJlZnJlc2ggMUcgTUFDIGhhcmR3YXJlIHN0YXRpc3RpY3MKJiM0MzsgKiBAbHA6CQlQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZQomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfc3RhdHNfdXBkYXRlKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCkKJiM0Mzt7CiYjNDM7CWF4aWVuZXRfc3RhdHNfdXBkYXRlKGxwLCBmYWxzZSk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgYXhpZW5ldF9yZWZyZXNoX3N0YXRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF4aWVuZXRfbG9jYWwsCiAJCQkJCQlzdGF0c193b3JrLndvcmspOwogCi0JbXV0ZXhfbG9jaygmYW1wO2xwLSZndDtzdGF0c19sb2NrKTsKLQlheGllbmV0X3N0YXRzX3VwZGF0ZShscCwgZmFsc2UpOwotCW11dGV4X3VubG9jaygmYW1wO2xwLSZndDtzdGF0c19sb2NrKTsKJiM0MzsJaWYgKGxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7c3RhdHNfdXBkYXRlKSB7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7bHAtJmd0O3N0YXRzX2xvY2spOwomIzQzOwkJbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtzdGF0c191cGRhdGUobHApOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7bHAtJmd0O3N0YXRzX2xvY2spOwomIzQzOwl9CiAKLQkvKiBKdXN0IGxlc3MgdGhhbiAyXjMyIGJ5dGVzIGF0IDIuNSBHQml0L3MgKi8KJiM0MzsJLyogUmUtYXJtIHRoZSBwb2xsIGJlZm9yZSBhbnkgY291bnRlciBjYW4gb3ZlcmZsb3cgYmV0d2VlbiB1cGRhdGVzOiB0aGUKJiM0MzsJICogMUcgYnl0ZSBjb3VudGVyIHJlYWNoZXMganVzdCB1bmRlciAyXjMyIGluIHRoaXMgaW50ZXJ2YWwgYXQgMi41IEdiaXQvcywKJiM0MzsJICogYW5kIHRoZSBYWFYgaW50ZXJuYWwgYWNjdW11bGF0b3JzIG11c3QgYmUgbGF0Y2hlZCAodmlhIFRJQ0sgaW4KJiM0MzsJICogYXhpZW5ldF94eHZfc3RhdHNfdXBkYXRlKCkpIGJlZm9yZSB0aGV5IHNhdHVyYXRlIGF0IGxpbmUgcmF0ZS4KJiM0MzsJICovCiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7bHAtJmd0O3N0YXRzX3dvcmssIDEzICogSFopOwogfQogCkBAIC01OTQsNyAmIzQzOzYwNiwxNiBAQCBzdGF0aWMgaW50IF9fYXhpZW5ldF9kZXZpY2VfcmVzZXQoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKQogCXUzMiB2YWx1ZTsKIAlpbnQgcmV0OwogCi0JLyogU2F2ZSBzdGF0aXN0aWNzIGNvdW50ZXJzIGluIGNhc2UgdGhleSB3aWxsIGJlIHJlc2V0ICovCiYjNDM7CS8qIFNhdmUgc3RhdGlzdGljcyBjb3VudGVycyBpbiBjYXNlIHRoZXkgd2lsbCBiZSByZXNldC4KJiM0MzsJICoKJiM0MzsJICogVGhlIFhBRV9GRUFUVVJFX1NUQVRTIGJsb2NrcyBpbiB0aGlzIGZ1bmN0aW9uIHJlYWQgdGhlIFRFTUFDCiYjNDM7CSAqIHN0YXRpc3RpY3MgcmVnaXN0ZXJzIGF0IFhBRV9TVEFUU19PRkZTRVQsIGkuZS4gdGhleSBhc3N1bWUgdGhlIDFHCiYjNDM7CSAqIGNvdW50ZXIgbGF5b3V0LiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBfX2F4aWVuZXRfZGV2aWNlX3Jlc2V0KCkgaXMKJiM0MzsJICogb25seSByZWFjaGVkIG9uIHRoZSBsZWdhY3kgKG5vbi1kbWFlbmdpbmUpIERNQSBwYXRoLCB3aGljaCB0aGUKJiM0MzsJICogbGVnYWN5X2RtYSBjYXBhYmlsaXR5IHJlc3RyaWN0cyB0byB0aGUgMUcgTUFDLiBNQUNzIHRoYXQgdXNlIHRoZWlyCiYjNDM7CSAqIG93biBzdGF0aXN0aWNzIG1lY2hhbmlzbSAoZS5nLiBYWFYsIHdoaWNoIGlzIGRtYWVuZ2luZS1vbmx5KSBuZXZlcgomIzQzOwkgKiBleGVjdXRlIHRoaXMgcGF0aC4KJiM0MzsJICovCiAJbXV0ZXhfbG9jaygmYW1wO2xwLSZndDtzdGF0c19sb2NrKTsKIAlpZiAobHAtJmd0O2ZlYXR1cmVzICZhbXA7IFhBRV9GRUFUVVJFX1NUQVRTKQogCQlheGllbmV0X3N0YXRzX3VwZGF0ZShscCwgdHJ1ZSk7CkBAIC02OTQsNiAmIzQzOzcxNSwzMiBAQCBzdGF0aWMgdm9pZCBheGllbmV0X2RtYV9zdG9wKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCkKIAlheGllbmV0X3VubG9ja19taWkobHApOwogfQogCiYjNDM7LyoqCiYjNDM7ICogYXhpZW5ldF8xZ19tYWNfaW5pdCAtIDFHIE1BQy1zcGVjaWZpYyBicmluZy11cCBhZnRlciB0aGUgRE1BIHJlc2V0CiYjNDM7ICogQG5kZXY6CVBvaW50ZXIgdG8gdGhlIG5ldF9kZXZpY2Ugc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIG51bWJlciBvdGhlcndpc2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBheGllbmV0XzFnX21hY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CXUzMiBheGllbmV0X3N0YXR1czsKJiM0MzsKJiM0MzsJYXhpZW5ldF9zdGF0dXMgPSBheGllbmV0X2lvcihscCwgWEFFX1JDVzFfT0ZGU0VUKTsKJiM0MzsJYXhpZW5ldF9zdGF0dXMgJmFtcDs9IH5YQUVfUkNXMV9SWF9NQVNLOwomIzQzOwlheGllbmV0X2lvdyhscCwgWEFFX1JDVzFfT0ZGU0VULCBheGllbmV0X3N0YXR1cyk7CiYjNDM7CiYjNDM7CWF4aWVuZXRfc3RhdHVzID0gYXhpZW5ldF9pb3IobHAsIFhBRV9JUF9PRkZTRVQpOwomIzQzOwlpZiAoYXhpZW5ldF9zdGF0dXMgJmFtcDsgWEFFX0lOVF9SWFJKRUNUX01BU0spCiYjNDM7CQlheGllbmV0X2lvdyhscCwgWEFFX0lTX09GRlNFVCwgWEFFX0lOVF9SWFJKRUNUX01BU0spOwomIzQzOwlheGllbmV0X2lvdyhscCwgWEFFX0lFX09GRlNFVCwgbHAtJmd0O2V0aF9pcnEgJmd0OyAwID8KJiM0MzsJCSAgICBYQUVfSU5UX1JFQ1ZfRVJST1JfTUFTSyA6IDApOwomIzQzOwomIzQzOwlheGllbmV0X2lvdyhscCwgWEFFX0ZDQ19PRkZTRVQsIFhBRV9GQ0NfRkNSWF9NQVNLKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBheGllbmV0X2RldmljZV9yZXNldCAtIFJlc2V0IGFuZCBpbml0aWFsaXplIHRoZSBBeGkgRXRoZXJuZXQgaGFyZHdhcmUuCiAgKiBAbmRldjoJUG9pbnRlciB0byB0aGUgbmV0X2RldmljZSBzdHJ1Y3R1cmUKQEAgLTcwOSwxOSAmIzQzOzc1NiwyMyBAQCBzdGF0aWMgdm9pZCBheGllbmV0X2RtYV9zdG9wKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCkKICAqLwogc3RhdGljIGludCBheGllbmV0X2RldmljZV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKLQl1MzIgYXhpZW5ldF9zdGF0dXM7CiAJc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CiAJaW50IHJldDsKIAomIzQzOwlpZiAobHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtndF9yZXNldCkKJiM0MzsJCWxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7Z3RfcmVzZXQobHApOwomIzQzOwogCWxwLSZndDttYXhfZnJtX3NpemUgPSBYQUVfTUFYX1ZMQU5fRlJBTUVfU0laRTsKLQlscC0mZ3Q7b3B0aW9ucyB8PSBYQUVfT1BUSU9OX1ZMQU47CiYjNDM7CiYjNDM7CWlmIChscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O3ZsYW4pCiYjNDM7CQlscC0mZ3Q7b3B0aW9ucyB8PSBYQUVfT1BUSU9OX1ZMQU47CiAJbHAtJmd0O29wdGlvbnMgJmFtcDs9ICh+WEFFX09QVElPTl9KVU1CTyk7CiAKIAlpZiAobmRldi0mZ3Q7bXR1ICZndDsgWEFFX01UVSAmYW1wOyZhbXA7IG5kZXYtJmd0O210dSAmbHQ7PSBYQUVfSlVNQk9fTVRVKSB7CiAJCWxwLSZndDttYXhfZnJtX3NpemUgPSBuZGV2LSZndDttdHUgJiM0MzsgVkxBTl9FVEhfSExFTiAmIzQzOwogCQkJCQlYQUVfVFJMX1NJWkU7CiAKLQkJaWYgKGxwLSZndDttYXhfZnJtX3NpemUgJmx0Oz0gbHAtJmd0O3J4bWVtKQomIzQzOwkJaWYgKGxwLSZndDttYXhfZnJtX3NpemUgJmx0Oz0gbHAtJmd0O3J4bWVtICZhbXA7JmFtcDsgbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtqdW1ibykKIAkJCWxwLSZndDtvcHRpb25zIHw9IFhBRV9PUFRJT05fSlVNQk87CiAJfQogCkBAIC03MzgsMjYgJiM0Mzs3ODksMTggQEAgc3RhdGljIGludCBheGllbmV0X2RldmljZV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAkJfQogCX0KIAotCWF4aWVuZXRfc3RhdHVzID0gYXhpZW5ldF9pb3IobHAsIFhBRV9SQ1cxX09GRlNFVCk7Ci0JYXhpZW5ldF9zdGF0dXMgJmFtcDs9IH5YQUVfUkNXMV9SWF9NQVNLOwotCWF4aWVuZXRfaW93KGxwLCBYQUVfUkNXMV9PRkZTRVQsIGF4aWVuZXRfc3RhdHVzKTsKLQotCWF4aWVuZXRfc3RhdHVzID0gYXhpZW5ldF9pb3IobHAsIFhBRV9JUF9PRkZTRVQpOwotCWlmIChheGllbmV0X3N0YXR1cyAmYW1wOyBYQUVfSU5UX1JYUkpFQ1RfTUFTSykKLQkJYXhpZW5ldF9pb3cobHAsIFhBRV9JU19PRkZTRVQsIFhBRV9JTlRfUlhSSkVDVF9NQVNLKTsKLQlheGllbmV0X2lvdyhscCwgWEFFX0lFX09GRlNFVCwgbHAtJmd0O2V0aF9pcnEgJmd0OyAwID8KLQkJICAgIFhBRV9JTlRfUkVDVl9FUlJPUl9NQVNLIDogMCk7Ci0KLQlheGllbmV0X2lvdyhscCwgWEFFX0ZDQ19PRkZTRVQsIFhBRV9GQ0NfRkNSWF9NQVNLKTsKJiM0MzsJcmV0ID0gbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDttYWNfaW5pdChuZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiAKIAkvKiBTeW5jIGRlZmF1bHQgb3B0aW9ucyB3aXRoIEhXIGJ1dCBsZWF2ZSByZWNlaXZlciBhbmQKIAkgKiB0cmFuc21pdHRlciBkaXNhYmxlZC4KIAkgKi8KLQlheGllbmV0X3NldG9wdGlvbnMobmRldiwgbHAtJmd0O29wdGlvbnMgJmFtcDsKLQkJCSAgIH4oWEFFX09QVElPTl9UWEVOIHwgWEFFX09QVElPTl9SWEVOKSk7CiYjNDM7CWxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7c2V0b3B0aW9ucyhuZGV2LCBscC0mZ3Q7b3B0aW9ucyAmYW1wOwomIzQzOwkJCQkgICAgICAgfihYQUVfT1BUSU9OX1RYRU4gfCBYQUVfT1BUSU9OX1JYRU4pKTsKIAlheGllbmV0X3NldF9tYWNfYWRkcmVzcyhuZGV2LCBOVUxMKTsKIAlheGllbmV0X3NldF9tdWx0aWNhc3RfbGlzdChuZGV2KTsKLQlheGllbmV0X3NldG9wdGlvbnMobmRldiwgbHAtJmd0O29wdGlvbnMpOwomIzQzOwlscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O3NldG9wdGlvbnMobmRldiwgbHAtJmd0O29wdGlvbnMpOwogCiAJbmV0aWZfdHJhbnNfdXBkYXRlKG5kZXYpOwogCkBAIC05MTUsNiAmIzQzOzk1OCwxMyBAQCBheGllbmV0X3N0YXJ0X3htaXRfZG1hZW5naW5lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCWludCBzZ19sZW47CiAJaW50IHJldDsKIAomIzQzOwlpZiAobHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtzd19wYWRkaW5nICZhbXA7JmFtcDsgZXRoX3NrYl9wYWQoc2tiKSkgewomIzQzOwkJLyogUGFkIHNob3J0IGZyYW1lczsgdGhlIE1BQyBkb2VzIG5vdCBhcHBlbmQgRXRoZXJuZXQgcGFkZGluZy4gKi8KJiM0MzsJCW5kZXYtJmd0O3N0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7OwomIzQzOwkJbmRldi0mZ3Q7c3RhdHMudHhfZXJyb3JzJiM0MzsmIzQzOzsKJiM0MzsJCXJldHVybiBORVRERVZfVFhfT0s7CiYjNDM7CX0KJiM0MzsKIAlkbWFfZGV2ID0gbHAtJmd0O3R4X2NoYW4tJmd0O2RldmljZTsKIAlzZ19sZW4gPSBza2Jfc2hpbmZvKHNrYiktJmd0O25yX2ZyYWdzICYjNDM7IDE7CiAJaWYgKENJUkNfU1BBQ0UobHAtJmd0O3R4X3JpbmdfaGVhZCwgbHAtJmd0O3R4X3JpbmdfdGFpbCwgVFhfQkRfTlVNX01BWCkgJmx0Oz0gMSkgewpAQCAtOTM5LDE5ICYjNDM7OTg5LDIxIEBAIGF4aWVuZXRfc3RhcnRfeG1pdF9kbWFlbmdpbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJCWdvdG8geG1pdF9lcnJvcl9kcm9wX3NrYjsKIAogCS8qIEZpbGwgdXAgYXBwIGZpZWxkcyBmb3IgY2hlY2tzdW0gKi8KLQlpZiAoc2tiLSZndDtpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewotCQlpZiAobHAtJmd0O2ZlYXR1cmVzICZhbXA7IFhBRV9GRUFUVVJFX0ZVTExfVFhfQ1NVTSkgewotCQkJLyogVHggRnVsbCBDaGVja3N1bSBPZmZsb2FkIEVuYWJsZWQgKi8KLQkJCWFwcF9tZXRhZGF0YVswXSB8PSAyOwotCQl9IGVsc2UgaWYgKGxwLSZndDtmZWF0dXJlcyAmYW1wOyBYQUVfRkVBVFVSRV9QQVJUSUFMX1RYX0NTVU0pIHsKLQkJCWNzdW1fc3RhcnRfb2ZmID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTsKLQkJCWNzdW1faW5kZXhfb2ZmID0gY3N1bV9zdGFydF9vZmYgJiM0Mzsgc2tiLSZndDtjc3VtX29mZnNldDsKLQkJCS8qIFR4IFBhcnRpYWwgQ2hlY2tzdW0gT2ZmbG9hZCBFbmFibGVkICovCi0JCQlhcHBfbWV0YWRhdGFbMF0gfD0gMTsKLQkJCWFwcF9tZXRhZGF0YVsxXSA9IChjc3VtX3N0YXJ0X29mZiAmbHQ7Jmx0OyAxNikgfCBjc3VtX2luZGV4X29mZjsKJiM0MzsJaWYgKGxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7ZG1hX3R4X2NzdW0pIHsKJiM0MzsJCWlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CiYjNDM7CQkJaWYgKGxwLSZndDtmZWF0dXJlcyAmYW1wOyBYQUVfRkVBVFVSRV9GVUxMX1RYX0NTVU0pIHsKJiM0MzsJCQkJLyogVHggRnVsbCBDaGVja3N1bSBPZmZsb2FkIEVuYWJsZWQgKi8KJiM0MzsJCQkJYXBwX21ldGFkYXRhWzBdIHw9IDI7CiYjNDM7CQkJfSBlbHNlIGlmIChscC0mZ3Q7ZmVhdHVyZXMgJmFtcDsgWEFFX0ZFQVRVUkVfUEFSVElBTF9UWF9DU1VNKSB7CiYjNDM7CQkJCWNzdW1fc3RhcnRfb2ZmID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTsKJiM0MzsJCQkJY3N1bV9pbmRleF9vZmYgPSBjc3VtX3N0YXJ0X29mZiAmIzQzOyBza2ItJmd0O2NzdW1fb2Zmc2V0OwomIzQzOwkJCQkvKiBUeCBQYXJ0aWFsIENoZWNrc3VtIE9mZmxvYWQgRW5hYmxlZCAqLwomIzQzOwkJCQlhcHBfbWV0YWRhdGFbMF0gfD0gMTsKJiM0MzsJCQkJYXBwX21ldGFkYXRhWzFdID0gKGNzdW1fc3RhcnRfb2ZmICZsdDsmbHQ7IDE2KSB8IGNzdW1faW5kZXhfb2ZmOwomIzQzOwkJCX0KJiM0MzsJCX0gZWxzZSBpZiAoc2tiLSZndDtpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKJiM0MzsJCQlhcHBfbWV0YWRhdGFbMF0gfD0gMjsgLyogVHggRnVsbCBDaGVja3N1bSBPZmZsb2FkIEVuYWJsZWQgKi8KIAkJfQotCX0gZWxzZSBpZiAoc2tiLSZndDtpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKLQkJYXBwX21ldGFkYXRhWzBdIHw9IDI7IC8qIFR4IEZ1bGwgQ2hlY2tzdW0gT2ZmbG9hZCBFbmFibGVkICovCiAJfQogCiAJZG1hX3R4X2Rlc2MgPSBkbWFfZGV2LSZndDtkZXZpY2VfcHJlcF9zbGF2ZV9zZyhscC0mZ3Q7dHhfY2hhbiwgc2tidWZfZG1hLSZndDtzZ2wsCkBAIC0xNjcwLDYgJiM0MzsxNzIyLDEwIEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCWF4aWVuZXRfbG9ja19taWkobHApOwogCXJldCA9IGF4aWVuZXRfZGV2aWNlX3Jlc2V0KG5kZXYpOwogCWF4aWVuZXRfdW5sb2NrX21paShscCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIobHAtJmd0O2RldiwgJiMzNDtheGllbmV0X2RldmljZV9yZXNldCgpIGZhaWxlZDogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQogCiAJcmV0ID0gcGh5bGlua19vZl9waHlfY29ubmVjdChscC0mZ3Q7cGh5bGluaywgbHAtJmd0O2Rldi0mZ3Q7b2Zfbm9kZSwgMCk7CiAJaWYgKHJldCkgewpAQCAtMTczOCwxMiAmIzQzOzE3OTQsMTcgQEAgc3RhdGljIGludCBheGllbmV0X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAKIAljYW5jZWxfd29ya19zeW5jKCZhbXA7bHAtJmd0O3J4X2RpbS53b3JrKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtscC0mZ3Q7c3RhdHNfd29yayk7CiYjNDM7CWlmIChscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O3N0YXRzX3VwZGF0ZSkgewomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO2xwLSZndDtzdGF0c19sb2NrKTsKJiM0MzsJCWxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7c3RhdHNfdXBkYXRlKGxwKTsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2xwLSZndDtzdGF0c19sb2NrKTsKJiM0MzsJfQogCiAJcGh5bGlua19zdG9wKGxwLSZndDtwaHlsaW5rKTsKIAlwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KGxwLSZndDtwaHlsaW5rKTsKIAotCWF4aWVuZXRfc2V0b3B0aW9ucyhuZGV2LCBscC0mZ3Q7b3B0aW9ucyAmYW1wOwotCQkJICAgfihYQUVfT1BUSU9OX1RYRU4gfCBYQUVfT1BUSU9OX1JYRU4pKTsKJiM0MzsJbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtzZXRvcHRpb25zKG5kZXYsIGxwLSZndDtvcHRpb25zICZhbXA7CiYjNDM7CQkJCSAgICAgICB+KFhBRV9PUFRJT05fVFhFTiB8IFhBRV9PUFRJT05fUlhFTikpOwogCiAJaWYgKCFscC0mZ3Q7dXNlX2RtYWVuZ2luZSkgewogCQlheGllbmV0X2RtYV9zdG9wKGxwKTsKQEAgLTE3NjksNyAmIzQzOzE4MzAsOCBAQCBzdGF0aWMgaW50IGF4aWVuZXRfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAl9CiAKIAluZXRkZXZfcmVzZXRfcXVldWUobmRldik7Ci0JYXhpZW5ldF9pb3cobHAsIFhBRV9JRV9PRkZTRVQsIDApOwomIzQzOwlpZiAobHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDttYWNfaXJxKQomIzQzOwkJYXhpZW5ldF9pb3cobHAsIFhBRV9JRV9PRkZTRVQsIDApOwogCiAJaWYgKGxwLSZndDtldGhfaXJxICZndDsgMCkKIAkJZnJlZV9pcnEobHAtJmd0O2V0aF9pcnEsIG5kZXYpOwpAQCAtMTgzNCwyOSAmIzQzOzE4OTYsMTEgQEAgc3RhdGljIGludCBheGllbmV0X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCiAJcmV0dXJuIHBoeWxpbmtfbWlpX2lvY3RsKGxwLSZndDtwaHlsaW5rLCBycSwgY21kKTsKIH0KIAotc3RhdGljIHZvaWQKLWF4aWVuZXRfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cykKJiM0MztzdGF0aWMgdm9pZCBheGllbmV0XzFnX2dldF9zdGF0czY0KHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwKJiM0MzsJCQkJICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cykKIHsKLQlzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCBzdGFydDsKIAotCW5ldGRldl9zdGF0c190b19zdGF0czY0KHN0YXRzLCAmYW1wO2Rldi0mZ3Q7c3RhdHMpOwotCi0JZG8gewotCQlzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbigmYW1wO2xwLSZndDtyeF9zdGF0X3N5bmMpOwotCQlzdGF0cy0mZ3Q7cnhfcGFja2V0cyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bHAtJmd0O3J4X3BhY2tldHMpOwotCQlzdGF0cy0mZ3Q7cnhfYnl0ZXMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO2xwLSZndDtyeF9ieXRlcyk7Ci0JfSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KCZhbXA7bHAtJmd0O3J4X3N0YXRfc3luYywgc3RhcnQpKTsKLQotCWRvIHsKLQkJc3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oJmFtcDtscC0mZ3Q7dHhfc3RhdF9zeW5jKTsKLQkJc3RhdHMtJmd0O3R4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO2xwLSZndDt0eF9wYWNrZXRzKTsKLQkJc3RhdHMtJmd0O3R4X2J5dGVzID0gdTY0X3N0YXRzX3JlYWQoJmFtcDtscC0mZ3Q7dHhfYnl0ZXMpOwotCX0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeSgmYW1wO2xwLSZndDt0eF9zdGF0X3N5bmMsIHN0YXJ0KSk7Ci0KLQlpZiAoIShscC0mZ3Q7ZmVhdHVyZXMgJmFtcDsgWEFFX0ZFQVRVUkVfU1RBVFMpKQotCQlyZXR1cm47Ci0KIAlkbyB7CiAJCXN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbigmYW1wO2xwLSZndDtod19zdGF0c19zZXFjb3VudCk7CiAJCXN0YXRzLSZndDtyeF9sZW5ndGhfZXJyb3JzID0KQEAgLTE4ODQsNiAmIzQzOzE5MjgsMzMgQEAgYXhpZW5ldF9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKQogCX0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoJmFtcDtscC0mZ3Q7aHdfc3RhdHNfc2VxY291bnQsIHN0YXJ0KSk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZAomIzQzO2F4aWVuZXRfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CXVuc2lnbmVkIGludCBzdGFydDsKJiM0MzsKJiM0MzsJbmV0ZGV2X3N0YXRzX3RvX3N0YXRzNjQoc3RhdHMsICZhbXA7ZGV2LSZndDtzdGF0cyk7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKCZhbXA7bHAtJmd0O3J4X3N0YXRfc3luYyk7CiYjNDM7CQlzdGF0cy0mZ3Q7cnhfcGFja2V0cyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bHAtJmd0O3J4X3BhY2tldHMpOwomIzQzOwkJc3RhdHMtJmd0O3J4X2J5dGVzID0gdTY0X3N0YXRzX3JlYWQoJmFtcDtscC0mZ3Q7cnhfYnl0ZXMpOwomIzQzOwl9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoJmFtcDtscC0mZ3Q7cnhfc3RhdF9zeW5jLCBzdGFydCkpOwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbigmYW1wO2xwLSZndDt0eF9zdGF0X3N5bmMpOwomIzQzOwkJc3RhdHMtJmd0O3R4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO2xwLSZndDt0eF9wYWNrZXRzKTsKJiM0MzsJCXN0YXRzLSZndDt0eF9ieXRlcyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bHAtJmd0O3R4X2J5dGVzKTsKJiM0MzsJfSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KCZhbXA7bHAtJmd0O3R4X3N0YXRfc3luYywgc3RhcnQpKTsKJiM0MzsKJiM0MzsJaWYgKCEobHAtJmd0O2ZlYXR1cmVzICZhbXA7IFhBRV9GRUFUVVJFX1NUQVRTKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKGxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7Z2V0X3N0YXRzNjQpCiYjNDM7CQlscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O2dldF9zdGF0czY0KGxwLCBzdGF0cyk7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBheGllbmV0X25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuID0gYXhpZW5ldF9vcGVuLAogCS5uZG9fc3RvcCA9IGF4aWVuZXRfc3RvcCwKQEAgLTE5MzgsMzAgJiM0MzsyMDA5LDE4IEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfZXRodG9vbHNfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiAgKi8KIHN0YXRpYyBpbnQgYXhpZW5ldF9ldGh0b29sc19nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7Ci0JcmV0dXJuIHNpemVvZih1MzIpICogQVhJRU5FVF9SRUdTX047CiYjNDM7CXN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gc2l6ZW9mKHUzMikgKiBscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O3JlZ3NfbjsKIH0KIAogLyoqCi0gKiBheGllbmV0X2V0aHRvb2xzX2dldF9yZWdzIC0gRHVtcCB0aGUgY29udGVudHMgb2YgYWxsIHJlZ2lzdGVycyBwcmVzZW50Ci0gKgkJCSAgICAgICBpbiBBeGlFdGhlcm5ldCBjb3JlLgotICogQG5kZXY6CVBvaW50ZXIgdG8gbmV0X2RldmljZSBzdHJ1Y3R1cmUKLSAqIEByZWdzOglQb2ludGVyIHRvIGV0aHRvb2xfcmVncyBzdHJ1Y3R1cmUKLSAqIEByZXQ6CVZvaWQgcG9pbnRlciB1c2VkIHRvIHJldHVybiB0aGUgY29udGVudHMgb2YgdGhlIHJlZ2lzdGVycy4KLSAqCi0gKiBUaGlzIGltcGxlbWVudHMgZXRodG9vbCBjb21tYW5kIGZvciBnZXR0aW5nIHRoZSBBeGkgRXRoZXJuZXQgcmVnaXN0ZXIgZHVtcC4KLSAqIElzc3VlICYjMzQ7ZXRodG9vbCAtZCBldGhYJiMzNDsgdG8gZXhlY3V0ZSB0aGlzIGZ1bmN0aW9uLgomIzQzOyAqIGF4aWVuZXRfMWdfZ2V0X3JlZ3MgLSBEdW1wIDFHIE1BQyByZWdpc3RlcnMgZm9yIGV0aHRvb2wKJiM0MzsgKiBAbHA6CQlQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZQomIzQzOyAqIEBkYXRhOglCdWZmZXIgZm9yIHJlZ2lzdGVyIHZhbHVlcyAoemVyb2VkIGFuZCBzaXplZCBieSB0aGUgY2FsbGVyKQogICovCi1zdGF0aWMgdm9pZCBheGllbmV0X2V0aHRvb2xzX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAotCQkJCSAgICAgIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsIHZvaWQgKnJldCkKJiM0MztzdGF0aWMgdm9pZCBheGllbmV0XzFnX2dldF9yZWdzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwgdTMyICpkYXRhKQogewotCXUzMiAqZGF0YSA9ICh1MzIgKilyZXQ7Ci0Jc2l6ZV90IGxlbiA9IHNpemVvZih1MzIpICogQVhJRU5FVF9SRUdTX047Ci0Jc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7Ci0KLQlyZWdzLSZndDt2ZXJzaW9uID0gMDsKLQlyZWdzLSZndDtsZW4gPSBsZW47Ci0KLQltZW1zZXQoZGF0YSwgMCwgbGVuKTsKIAlkYXRhWzBdID0gYXhpZW5ldF9pb3IobHAsIFhBRV9SQUZfT0ZGU0VUKTsKIAlkYXRhWzFdID0gYXhpZW5ldF9pb3IobHAsIFhBRV9UUEZfT0ZGU0VUKTsKIAlkYXRhWzJdID0gYXhpZW5ldF9pb3IobHAsIFhBRV9JRkdQX09GRlNFVCk7CkBAIC0yMDAyLDYgJiM0MzsyMDYxLDMxIEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfZXRodG9vbHNfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiAJfQogfQogCiYjNDM7LyoqCiYjNDM7ICogYXhpZW5ldF9ldGh0b29sc19nZXRfcmVncyAtIER1bXAgdGhlIGNvbnRlbnRzIG9mIGFsbCByZWdpc3RlcnMgcHJlc2VudAomIzQzOyAqCQkJICAgICAgIGluIEF4aUV0aGVybmV0IGNvcmUuCiYjNDM7ICogQG5kZXY6CVBvaW50ZXIgdG8gbmV0X2RldmljZSBzdHJ1Y3R1cmUKJiM0MzsgKiBAcmVnczoJUG9pbnRlciB0byBldGh0b29sX3JlZ3Mgc3RydWN0dXJlCiYjNDM7ICogQHJldDoJVm9pZCBwb2ludGVyIHVzZWQgdG8gcmV0dXJuIHRoZSBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXJzLgomIzQzOyAqCiYjNDM7ICogVGhpcyBpbXBsZW1lbnRzIGV0aHRvb2wgY29tbWFuZCBmb3IgZ2V0dGluZyB0aGUgQXhpIEV0aGVybmV0IHJlZ2lzdGVyIGR1bXAuCiYjNDM7ICogSXNzdWUgJiMzNDtldGh0b29sIC1kIGV0aFgmIzM0OyB0byBleGVjdXRlIHRoaXMgZnVuY3Rpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKJiM0MzsJCQkJICAgICAgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywgdm9pZCAqcmV0KQomIzQzO3sKJiM0MzsJc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CXUzMiAqZGF0YSA9ICh1MzIgKilyZXQ7CiYjNDM7CXNpemVfdCBsZW47CiYjNDM7CiYjNDM7CWxlbiA9IHNpemVvZih1MzIpICogbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtyZWdzX247CiYjNDM7CXJlZ3MtJmd0O3ZlcnNpb24gPSAwOwomIzQzOwlyZWdzLSZndDtsZW4gPSBsZW47CiYjNDM7CiYjNDM7CW1lbXNldChkYXRhLCAwLCBsZW4pOwomIzQzOwlscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O2dldF9yZWdzKGxwLCBkYXRhKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZAogYXhpZW5ldF9ldGh0b29sc19nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogCQkJICAgICAgIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqZXJpbmcsCkBAIC0yMzAzLDExICYjNDM7MjM4Nyw4IEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9ldGh0b29sc19ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJcmV0dXJuIHBoeWxpbmtfZXRodG9vbF9ud2F5X3Jlc2V0KGxwLSZndDtwaHlsaW5rKTsKIH0KIAotc3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkgICAgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLAotCQkJCQkgICAgICAgdTY0ICpkYXRhKQomIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLCB1NjQgKmRhdGEpCiB7Ci0Jc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBpbnQgc3RhcnQ7CiAKIAlkbyB7CkBAIC0yMzI0LDYgJiM0MzsyNDA1LDE3IEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfZXRodG9vbHNfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAl9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KCZhbXA7bHAtJmd0O2h3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJICAgICAgIHN0cnVjdCBldGh0b29sX3N0YXRzICpzdGF0cywKJiM0MzsJCQkJCSAgICAgICB1NjQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwomIzQzOwlpZiAobHAtJmd0O2ZlYXR1cmVzICZhbXA7IFhBRV9GRUFUVVJFX1NUQVRTICZhbXA7JmFtcDsKJiM0MzsJICAgIGxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7Z2V0X2V0aHRvb2xfc3RhdHMpCiYjNDM7CQlscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O2dldF9ldGh0b29sX3N0YXRzKGxwLCBkYXRhKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgY29uc3QgY2hhciBheGllbmV0X2V0aHRvb2xfc3RhdHNfc3RyaW5nc1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7CiAJJiMzNDtSZWNlaXZlZCBieXRlcyYjMzQ7LAogCSYjMzQ7VHJhbnNtaXR0ZWQgYnl0ZXMmIzM0OywKQEAgLTIzMzYsMTIgJiM0MzsyNDI4LDI2IEBAIHN0YXRpYyBjb25zdCBjaGFyIGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHsKIAkmIzM0O1VzZXIgRGVmaW5lZCBDb3VudGVyIDImIzM0OywKIH07CiAKJiM0MztzdGF0aWMgdm9pZCBheGllbmV0XzFnX2dldF9zdHJpbmdzKHU4ICpkYXRhKQomIzQzO3sKJiM0MzsJbWVtY3B5KGRhdGEsIGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzLAomIzQzOwkgICAgICAgc2l6ZW9mKGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYXhpZW5ldF8xZ19nZXRfc3NldF9jb3VudCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIEFSUkFZX1NJWkUoYXhpZW5ldF9ldGh0b29sX3N0YXRzX3N0cmluZ3MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGF4aWVuZXRfZXRodG9vbHNfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0cmluZ3NldCwgdTggKmRhdGEpCiB7CiYjNDM7CXN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CiAJc3dpdGNoIChzdHJpbmdzZXQpIHsKIAljYXNlIEVUSF9TU19TVEFUUzoKLQkJbWVtY3B5KGRhdGEsIGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzLAotCQkgICAgICAgc2l6ZW9mKGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzKSk7CiYjNDM7CQlpZiAobHAtJmd0O2ZlYXR1cmVzICZhbXA7IFhBRV9GRUFUVVJFX1NUQVRTICZhbXA7JmFtcDsKJiM0MzsJCSAgICBscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O2dldF9zdHJpbmdzKQomIzQzOwkJCWxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7Z2V0X3N0cmluZ3MoZGF0YSk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTIzNTIsMjQgJiM0MzsyNDU4LDIwIEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9ldGh0b29sc19nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3NldCkKIAogCXN3aXRjaCAoc3NldCkgewogCWNhc2UgRVRIX1NTX1NUQVRTOgotCQlpZiAobHAtJmd0O2ZlYXR1cmVzICZhbXA7IFhBRV9GRUFUVVJFX1NUQVRTKQotCQkJcmV0dXJuIEFSUkFZX1NJWkUoYXhpZW5ldF9ldGh0b29sX3N0YXRzX3N0cmluZ3MpOwomIzQzOwkJaWYgKGxwLSZndDtmZWF0dXJlcyAmYW1wOyBYQUVfRkVBVFVSRV9TVEFUUyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtnZXRfc3NldF9jb3VudCkKJiM0MzsJCQlyZXR1cm4gbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtnZXRfc3NldF9jb3VudCgpOwogCQlmYWxsdGhyb3VnaDsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogfQogCi1zdGF0aWMgdm9pZAotYXhpZW5ldF9ldGh0b29sc19nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKQomIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cykKIHsKLQlzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCBzdGFydDsKIAotCWlmICghKGxwLSZndDtmZWF0dXJlcyAmYW1wOyBYQUVfRkVBVFVSRV9TVEFUUykpCi0JCXJldHVybjsKLQogCWRvIHsKIAkJc3RhcnQgPSByZWFkX3NlcWNvdW50X2JlZ2luKCZhbXA7bHAtJmd0O2h3X3N0YXRzX3NlcWNvdW50KTsKIAkJcGF1c2Vfc3RhdHMtJmd0O3R4X3BhdXNlX2ZyYW1lcyA9CkBAIC0yMzgwLDE1ICYjNDM7MjQ4MiwyMyBAQCBheGllbmV0X2V0aHRvb2xzX2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogfQogCiBzdGF0aWMgdm9pZAotYXhpZW5ldF9ldGh0b29sX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpCiYjNDM7YXhpZW5ldF9ldGh0b29sc19nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJIHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cykKIHsKIAlzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGludCBzdGFydDsKIAogCWlmICghKGxwLSZndDtmZWF0dXJlcyAmYW1wOyBYQUVfRkVBVFVSRV9TVEFUUykpCiAJCXJldHVybjsKIAomIzQzOwlpZiAobHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtnZXRfcGF1c2Vfc3RhdHMpCiYjNDM7CQlscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O2dldF9wYXVzZV9zdGF0cyhscCwgcGF1c2Vfc3RhdHMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBheGllbmV0XzFnX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwKJiM0MzsJCQkJCSBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgc3RhcnQ7CiYjNDM7CiAJZG8gewogCQlzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4oJmFtcDtscC0mZ3Q7aHdfc3RhdHNfc2VxY291bnQpOwogCQltYWNfc3RhdHMtJmd0O0ZyYW1lc1RyYW5zbWl0dGVkT0sgPQpAQCAtMjQyNSwxNSAmIzQzOzI1MzUsMjQgQEAgYXhpZW5ldF9ldGh0b29sX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiB9CiAKIHN0YXRpYyB2b2lkCi1heGllbmV0X2V0aHRvb2xfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGV0aHRvb2xfZXRoX2N0cmxfc3RhdHMgKmN0cmxfc3RhdHMpCiYjNDM7YXhpZW5ldF9ldGh0b29sX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJCSAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKQogewogCXN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgaW50IHN0YXJ0OwogCiAJaWYgKCEobHAtJmd0O2ZlYXR1cmVzICZhbXA7IFhBRV9GRUFUVVJFX1NUQVRTKSkKIAkJcmV0dXJuOwogCiYjNDM7CWlmIChscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O2dldF9ldGhfbWFjX3N0YXRzKQomIzQzOwkJbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtnZXRfZXRoX21hY19zdGF0cyhscCwgbWFjX3N0YXRzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQKJiM0MztheGllbmV0XzFnX2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsCiYjNDM7CQkJICAgICAgc3RydWN0IGV0aHRvb2xfZXRoX2N0cmxfc3RhdHMgKmN0cmxfc3RhdHMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgc3RhcnQ7CiYjNDM7CiAJZG8gewogCQlzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4oJmFtcDtscC0mZ3Q7aHdfc3RhdHNfc2VxY291bnQpOwogCQljdHJsX3N0YXRzLSZndDtNQUNDb250cm9sRnJhbWVzVHJhbnNtaXR0ZWQgPQpAQCAtMjQ0NSw3ICYjNDM7MjU2NCwyMCBAQCBheGllbmV0X2V0aHRvb2xfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJfSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeSgmYW1wO2xwLSZndDtod19zdGF0c19zZXFjb3VudCwgc3RhcnQpKTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSBheGllbmV0X3Jtb25fcmFuZ2VzW10gPSB7CiYjNDM7c3RhdGljIHZvaWQKJiM0MztheGllbmV0X2V0aHRvb2xfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJCSAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKQomIzQzO3sKJiM0MzsJc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsKJiM0MzsJaWYgKCEobHAtJmd0O2ZlYXR1cmVzICZhbXA7IFhBRV9GRUFUVVJFX1NUQVRTKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKGxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7Z2V0X2V0aF9jdHJsX3N0YXRzKQomIzQzOwkJbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtnZXRfZXRoX2N0cmxfc3RhdHMobHAsIGN0cmxfc3RhdHMpOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgYXhpZW5ldF9ybW9uX3Jhbmdlc1tdID0gewogCXsgICA2NCwgICAgNjQgfSwKIAl7ICAgNjUsICAgMTI3IH0sCiAJeyAgMTI4LCAgIDI1NSB9LApAQCAtMjQ1NywxNiAmIzQzOzI1ODksMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSBheGllbmV0X3Jtb25fcmFuZ2VzW10gPSB7CiB9OwogCiBzdGF0aWMgdm9pZAotYXhpZW5ldF9ldGh0b29sX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cywKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpCiYjNDM7YXhpZW5ldF8xZ19nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsCiYjNDM7CQkJICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLAomIzQzOwkJCSAgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlICoqcmFuZ2VzKQogewotCXN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IHN0YXJ0OwogCi0JaWYgKCEobHAtJmd0O2ZlYXR1cmVzICZhbXA7IFhBRV9GRUFUVVJFX1NUQVRTKSkKLQkJcmV0dXJuOwotCiAJZG8gewogCQlzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4oJmFtcDtscC0mZ3Q7aHdfc3RhdHNfc2VxY291bnQpOwogCQlybW9uX3N0YXRzLSZndDt1bmRlcnNpemVfcGt0cyA9CkBAIC0yNTEwLDYgJiM0MzsyNjM4LDIwIEBAIGF4aWVuZXRfZXRodG9vbF9nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCSpyYW5nZXMgPSBheGllbmV0X3Jtb25fcmFuZ2VzOwogfQogCiYjNDM7c3RhdGljIHZvaWQKJiM0MztheGllbmV0X2V0aHRvb2xfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgICAgICAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cywKJiM0MzsJCQkgICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlICoqcmFuZ2VzKQomIzQzO3sKJiM0MzsJc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsKJiM0MzsJaWYgKCEobHAtJmd0O2ZlYXR1cmVzICZhbXA7IFhBRV9GRUFUVVJFX1NUQVRTKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKGxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7Z2V0X3Jtb25fc3RhdHMpCiYjNDM7CQlscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O2dldF9ybW9uX3N0YXRzKGxwLCBybW9uX3N0YXRzLCByYW5nZXMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXhpZW5ldF9ldGh0b29sX29wcyA9IHsKIAkuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfTUFYX0ZSQU1FUyB8CiAJCQkJICAgICBFVEhUT09MX0NPQUxFU0NFX1VTRUNTIHwKQEAgLTI1NTUsMTEgJiM0MzsyNjk3LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBheGllbmV0X2V0aHRvb2xfZG1hZW5naW5lX29wcyA9IHsKIAkuZ2V0X3Jtb25fc3RhdHMgPSBheGllbmV0X2V0aHRvb2xfZ2V0X3Jtb25fc3RhdHMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGF4aWVuZXRfbG9jYWwgKnBjc190b19heGllbmV0X2xvY2FsKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKQotewotCXJldHVybiBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCwgcGNzKTsKLX0KLQogc3RhdGljIHZvaWQgYXhpZW5ldF9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLAogCQkJCSAgdW5zaWduZWQgaW50IG5lZ19tb2RlLAogCQkJCSAgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpCkBAIC0yNjE5LDcgJiM0MzsyNzU2LDkgQEAgc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqYXhpZW5ldF9tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywKIAlzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAogCWlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB8fAotCSAgICBpbnRlcmZhY2UgPT0gIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkKJiM0MzsJICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkgfHwKJiM0MzsJICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIgfHwKJiM0MzsJICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMjVHQkFTRVIpCiAJCXJldHVybiAmYW1wO2xwLSZndDtwY3M7CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTI2MzgsMTMgJiM0MzsyNzc3LDkgQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9tYWNfbGlua19kb3duKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLAogCS8qIG5vdGhpbmcgbWVhbmluZ2Z1bCB0byBkbyAqLwogfQogCi1zdGF0aWMgdm9pZCBheGllbmV0X21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLAotCQkJCXN0cnVjdCBwaHlfZGV2aWNlICpwaHksCi0JCQkJdW5zaWduZWQgaW50IG1vZGUsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsCi0JCQkJaW50IHNwZWVkLCBpbnQgZHVwbGV4LAotCQkJCWJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpCiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF8xZ19tYWNfbGlua191cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IHNwZWVkLAomIzQzOwkJCQkgICBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gdG9fbmV0X2Rldihjb25maWctJmd0O2Rldik7CiAJc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CiAJdTMyIGVtbWNfcmVnLCBmY2NfcmVnOwogCkBAIC0yNjgxLDYgJiM0MzsyODE2LDE5IEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsCiAJYXhpZW5ldF9pb3cobHAsIFhBRV9GQ0NfT0ZGU0VULCBmY2NfcmVnKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsCiYjNDM7CQkJCXN0cnVjdCBwaHlfZGV2aWNlICpwaHksCiYjNDM7CQkJCXVuc2lnbmVkIGludCBtb2RlLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLAomIzQzOwkJCQlpbnQgc3BlZWQsIGludCBkdXBsZXgsCiYjNDM7CQkJCWJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHRvX25ldF9kZXYoY29uZmlnLSZndDtkZXYpOwomIzQzOwlzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsKJiM0MzsJaWYgKGxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7bWFjX2xpbmtfdXApCiYjNDM7CQlscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O21hY19saW5rX3VwKG5kZXYsIHNwZWVkLCB0eF9wYXVzZSwgcnhfcGF1c2UpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIGF4aWVuZXRfcGh5bGlua19vcHMgPSB7CiAJLm1hY19zZWxlY3RfcGNzID0gYXhpZW5ldF9tYWNfc2VsZWN0X3BjcywKIAkubWFjX2NvbmZpZyA9IGF4aWVuZXRfbWFjX2NvbmZpZywKQEAgLTI2OTgsNyAmIzQzOzI4NDYsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBheGllbmV0X3BoeWxpbmtfb3BzID0gewogc3RhdGljIHZvaWQgYXhpZW5ldF9kbWFfZXJyX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXUzMiBpOwotCXUzMiBheGllbmV0X3N0YXR1czsKIAlzdHJ1Y3QgYXhpZG1hX2JkICpjdXJfcDsKIAlzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF4aWVuZXRfbG9jYWwsCiAJCQkJCQlkbWFfZXJyX3Rhc2spOwpAQCAtMjcxMSw4ICYjNDM7Mjg1OCw4IEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfZG1hX2Vycl9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAluYXBpX2Rpc2FibGUoJmFtcDtscC0mZ3Q7bmFwaV90eCk7CiAJbmFwaV9kaXNhYmxlKCZhbXA7bHAtJmd0O25hcGlfcngpOwogCi0JYXhpZW5ldF9zZXRvcHRpb25zKG5kZXYsIGxwLSZndDtvcHRpb25zICZhbXA7Ci0JCQkgICB+KFhBRV9PUFRJT05fVFhFTiB8IFhBRV9PUFRJT05fUlhFTikpOwomIzQzOwlscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O3NldG9wdGlvbnMobmRldiwgbHAtJmd0O29wdGlvbnMgJmFtcDsKJiM0MzsJCQkJICAgICAgIH4oWEFFX09QVElPTl9UWEVOIHwgWEFFX09QVElPTl9SWEVOKSk7CiAKIAlheGllbmV0X2RtYV9zdG9wKGxwKTsKIAluZXRkZXZfcmVzZXRfcXVldWUobmRldik7CkBAIC0yNzU3LDI5ICYjNDM7MjkwNCwxMjYgQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9kbWFfZXJyX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCiAJYXhpZW5ldF9kbWFfc3RhcnQobHApOwogCi0JYXhpZW5ldF9zdGF0dXMgPSBheGllbmV0X2lvcihscCwgWEFFX1JDVzFfT0ZGU0VUKTsKLQlheGllbmV0X3N0YXR1cyAmYW1wOz0gflhBRV9SQ1cxX1JYX01BU0s7Ci0JYXhpZW5ldF9pb3cobHAsIFhBRV9SQ1cxX09GRlNFVCwgYXhpZW5ldF9zdGF0dXMpOwotCi0JYXhpZW5ldF9zdGF0dXMgPSBheGllbmV0X2lvcihscCwgWEFFX0lQX09GRlNFVCk7Ci0JaWYgKGF4aWVuZXRfc3RhdHVzICZhbXA7IFhBRV9JTlRfUlhSSkVDVF9NQVNLKQotCQlheGllbmV0X2lvdyhscCwgWEFFX0lTX09GRlNFVCwgWEFFX0lOVF9SWFJKRUNUX01BU0spOwotCWF4aWVuZXRfaW93KGxwLCBYQUVfSUVfT0ZGU0VULCBscC0mZ3Q7ZXRoX2lycSAmZ3Q7IDAgPwotCQkgICAgWEFFX0lOVF9SRUNWX0VSUk9SX01BU0sgOiAwKTsKLQlheGllbmV0X2lvdyhscCwgWEFFX0ZDQ19PRkZTRVQsIFhBRV9GQ0NfRkNSWF9NQVNLKTsKJiM0MzsJLyogVGhpcyBlcnJvciBoYW5kbGVyIHJ1bnMgb25seSBmb3IgdGhlIGxlZ2FjeSBlbWJlZGRlZC1ETUEgKDFHKSBwYXRoLAomIzQzOwkgKiB3aG9zZSBtYWNfaW5pdCgpIGNhbm5vdCBmYWlsLCBzbyBpdHMgcmV0dXJuIHZhbHVlIGlzIG5vdCBjaGVja2VkLgomIzQzOwkgKi8KJiM0MzsJbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDttYWNfaW5pdChuZGV2KTsKIAogCS8qIFN5bmMgZGVmYXVsdCBvcHRpb25zIHdpdGggSFcgYnV0IGxlYXZlIHJlY2VpdmVyIGFuZAogCSAqIHRyYW5zbWl0dGVyIGRpc2FibGVkLgogCSAqLwotCWF4aWVuZXRfc2V0b3B0aW9ucyhuZGV2LCBscC0mZ3Q7b3B0aW9ucyAmYW1wOwotCQkJICAgfihYQUVfT1BUSU9OX1RYRU4gfCBYQUVfT1BUSU9OX1JYRU4pKTsKJiM0MzsJbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtzZXRvcHRpb25zKG5kZXYsIGxwLSZndDtvcHRpb25zICZhbXA7CiYjNDM7CQkJCSAgICAgICB+KFhBRV9PUFRJT05fVFhFTiB8IFhBRV9PUFRJT05fUlhFTikpOwogCWF4aWVuZXRfc2V0X21hY19hZGRyZXNzKG5kZXYsIE5VTEwpOwogCWF4aWVuZXRfc2V0X211bHRpY2FzdF9saXN0KG5kZXYpOwogCW5hcGlfZW5hYmxlKCZhbXA7bHAtJmd0O25hcGlfcngpOwogCW5hcGlfZW5hYmxlKCZhbXA7bHAtJmd0O25hcGlfdHgpOwotCWF4aWVuZXRfc2V0b3B0aW9ucyhuZGV2LCBscC0mZ3Q7b3B0aW9ucyk7CiYjNDM7CWxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7c2V0b3B0aW9ucyhuZGV2LCBscC0mZ3Q7b3B0aW9ucyk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGF4aWVuZXRfMWdfcGh5bGlua19zZXRfY2FwcyAtIFNldCAxRyBwaHlsaW5rIGNhcGFiaWxpdGllcyBhbmQgaW50ZXJmYWNlcwomIzQzOyAqIEBscDoJCVBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlCiYjNDM7ICogQGNvbmZpZzoJUG9pbnRlciB0byB0aGUgcGh5bGlua19jb25maWcgc3RydWN0dXJlCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF8xZ19waHlsaW5rX3NldF9jYXBzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwKJiM0MzsJCQkJCXN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKQomIzQzO3sKJiM0MzsJY29uZmlnLSZndDttYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMEZEIHwgTUFDXzEwMEZEIHwgTUFDXzEwMDBGRDsKJiM0MzsJX19zZXRfYml0KGxwLSZndDtwaHlfbW9kZSwgY29uZmlnLSZndDtzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiYjNDM7CWlmIChscC0mZ3Q7c3dpdGNoX3hfc2dtaWkpIHsKJiM0MzsJCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYLAomIzQzOwkJCSAgY29uZmlnLSZndDtzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiYjNDM7CQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLAomIzQzOwkJCSAgY29uZmlnLSZndDtzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYXhpZW5ldF8xZ19jbGtfaW5pdCAtIEdldCBhbmQgZW5hYmxlIHRoZSAxRyBNQUMgY2xvY2tzCiYjNDM7ICogQGxwOgkJUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmUKJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyIG90aGVyd2lzZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGF4aWVuZXRfMWdfY2xrX2luaXQoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gbHAtJmd0O2RldjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbHAtJmd0O2F4aV9jbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWxfZW5hYmxlZChkZXYsICYjMzQ7c19heGlfbGl0ZV9jbGsmIzM0Oyk7CiYjNDM7CWlmICghbHAtJmd0O2F4aV9jbGspIHsKJiM0MzsJCS8qIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBpZiBuYW1lZCBBWEkgY2xvY2sgaXMgbm90CiYjNDM7CQkgKiBwcmVzZW50LCB0cmVhdCB0aGUgZmlyc3QgY2xvY2sgc3BlY2lmaWVkIGFzIHRoZSBBWEkgY2xvY2suCiYjNDM7CQkgKi8KJiM0MzsJCWxwLSZndDtheGlfY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsX2VuYWJsZWQoZGV2LCBOVUxMKTsKJiM0MzsJfQomIzQzOwlpZiAoSVNfRVJSKGxwLSZndDtheGlfY2xrKSkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihscC0mZ3Q7YXhpX2NsayksCiYjNDM7CQkJCSAgICAgJiMzNDtjb3VsZCBub3QgZ2V0IEFYSSBjbG9ja1xuJiMzNDspOwomIzQzOwomIzQzOwlscC0mZ3Q7bWlzY19jbGtzWzBdLmlkID0gJiMzNDtheGlzX2NsayYjMzQ7OwomIzQzOwlscC0mZ3Q7bWlzY19jbGtzWzFdLmlkID0gJiMzNDtyZWZfY2xrJiMzNDs7CiYjNDM7CWxwLSZndDttaXNjX2Nsa3NbMl0uaWQgPSAmIzM0O21ndF9jbGsmIzM0OzsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9jbGtfYnVsa19nZXRfb3B0aW9uYWxfZW5hYmxlKGRldiwgWEFFX05VTV9NSVNDX0NMT0NLUywKJiM0MzsJCQkJCQlscC0mZ3Q7bWlzY19jbGtzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LAomIzQzOwkJCQkgICAgICYjMzQ7Y291bGQgbm90IGdldC9lbmFibGUgbWlzYy4gY2xvY2tzXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiYjNDM7LyoqCiYjNDM7ICogYXhpZW5ldF8xZ19wcm9iZV9pbml0IC0gMUcgTUFDLXNwZWNpZmljIHByb2JlLXRpbWUgaW5pdGlhbGl6YXRpb24KJiM0MzsgKiBAbHA6CQlQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZQomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfcHJvYmVfaW5pdChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApCiYjNDM7ewomIzQzOwlpZiAoYXhpZW5ldF9pb3IobHAsIFhBRV9BQklMSVRZX09GRlNFVCkgJmFtcDsgWEFFX0FCSUxJVFlfU1RBVFMpCiYjNDM7CQlscC0mZ3Q7ZmVhdHVyZXMgfD0gWEFFX0ZFQVRVUkVfU1RBVFM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXhpZW5ldF9jb25maWcgYXhpZW5ldF8xZ19jb25maWcgPSB7CiYjNDM7CS5tZGlvID0gdHJ1ZSwKJiM0MzsJLm1hY19pcnEgPSB0cnVlLAomIzQzOwkubGVnYWN5X2RtYSA9IHRydWUsCiYjNDM7CS51Y19maWx0ZXIgPSB0cnVlLAomIzQzOwkubWNfZmlsdGVyID0gdHJ1ZSwKJiM0MzsJLnZsYW4gPSB0cnVlLAomIzQzOwkuanVtYm8gPSB0cnVlLAomIzQzOwkuZG1hX3R4X2NzdW0gPSB0cnVlLAomIzQzOwkucmVnc19uID0gQVhJRU5FVF9SRUdTX04sCiYjNDM7CS5jbGtfaW5pdCA9IGF4aWVuZXRfMWdfY2xrX2luaXQsCiYjNDM7CS5zZXRvcHRpb25zID0gYXhpZW5ldF9zZXRvcHRpb25zLAomIzQzOwkucHJvYmVfaW5pdCA9IGF4aWVuZXRfMWdfcHJvYmVfaW5pdCwKJiM0MzsJLm1hY19pbml0ID0gYXhpZW5ldF8xZ19tYWNfaW5pdCwKJiM0MzsJLm1hY19saW5rX3VwID0gYXhpZW5ldF8xZ19tYWNfbGlua191cCwKJiM0MzsJLmdldF9yZWdzID0gYXhpZW5ldF8xZ19nZXRfcmVncywKJiM0MzsJLnBoeWxpbmtfc2V0X2NhcHMgPSBheGllbmV0XzFnX3BoeWxpbmtfc2V0X2NhcHMsCiYjNDM7CS5wY3Nfb3BzID0gJmFtcDtheGllbmV0X3Bjc19vcHMsCiYjNDM7CS5zdGF0c191cGRhdGUgPSBheGllbmV0XzFnX3N0YXRzX3VwZGF0ZSwKJiM0MzsJLmdldF9zdGF0czY0ID0gYXhpZW5ldF8xZ19nZXRfc3RhdHM2NCwKJiM0MzsJLmdldF9ldGh0b29sX3N0YXRzID0gYXhpZW5ldF8xZ19nZXRfZXRodG9vbF9zdGF0cywKJiM0MzsJLmdldF9zdHJpbmdzID0gYXhpZW5ldF8xZ19nZXRfc3RyaW5ncywKJiM0MzsJLmdldF9zc2V0X2NvdW50ID0gYXhpZW5ldF8xZ19nZXRfc3NldF9jb3VudCwKJiM0MzsJLmdldF9wYXVzZV9zdGF0cyA9IGF4aWVuZXRfMWdfZ2V0X3BhdXNlX3N0YXRzLAomIzQzOwkuZ2V0X2V0aF9tYWNfc3RhdHMgPSBheGllbmV0XzFnX2dldF9ldGhfbWFjX3N0YXRzLAomIzQzOwkuZ2V0X2V0aF9jdHJsX3N0YXRzID0gYXhpZW5ldF8xZ19nZXRfZXRoX2N0cmxfc3RhdHMsCiYjNDM7CS5nZXRfcm1vbl9zdGF0cyA9IGF4aWVuZXRfMWdfZ2V0X3Jtb25fc3RhdHMsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBNYXRjaCB0YWJsZSBmb3Igb2ZfcGxhdGZvcm0gYmluZGluZyAqLwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGF4aWVuZXRfb2ZfbWF0Y2hbXSA9IHsKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7eGxueCxheGktZXRoZXJuZXQtMS4wMC5hJiMzNDssIC5kYXRhID0gJmFtcDtheGllbmV0XzFnX2NvbmZpZyB9LAomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDt4bG54LGF4aS1ldGhlcm5ldC0xLjAxLmEmIzM0OywgLmRhdGEgPSAmYW1wO2F4aWVuZXRfMWdfY29uZmlnIH0sCiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3hsbngsYXhpLWV0aGVybmV0LTIuMDEuYSYjMzQ7LCAuZGF0YSA9ICZhbXA7YXhpZW5ldF8xZ19jb25maWcgfSwKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7eGxueCx4eHYtZXRoZXJuZXQtMS4wJiMzNDssIC5kYXRhID0gJmFtcDtheGllbmV0XzEwZzI1Z19jb25maWcgfSwKJiM0MzsJe30sCiYjNDM7fTsKJiM0MzsKJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBheGllbmV0X29mX21hdGNoKTsKJiM0MzsKIC8qKgogICogYXhpZW5ldF9wcm9iZSAtIEF4aSBFdGhlcm5ldCBwcm9iZSBmdW5jdGlvbi4KICAqIEBwZGV2OglQb2ludGVyIHRvIHBsYXRmb3JtIGRldmljZSBzdHJ1Y3R1cmUuCkBAIC0yODMwLDI3ICYjNDM7MzA3NCwxMyBAQCBzdGF0aWMgaW50IGF4aWVuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlzZXFjb3VudF9tdXRleF9pbml0KCZhbXA7bHAtJmd0O2h3X3N0YXRzX3NlcWNvdW50LCAmYW1wO2xwLSZndDtzdGF0c19sb2NrKTsKIAlJTklUX0RFRkVSUkFCTEVfV09SSygmYW1wO2xwLSZndDtzdGF0c193b3JrLCBheGllbmV0X3JlZnJlc2hfc3RhdHMpOwogCi0JbHAtJmd0O2F4aV9jbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWxfZW5hYmxlZCgmYW1wO3BkZXYtJmd0O2RldiwKLQkJCQkJCSAgICAmIzM0O3NfYXhpX2xpdGVfY2xrJiMzNDspOwotCWlmICghbHAtJmd0O2F4aV9jbGspIHsKLQkJLyogRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGlmIG5hbWVkIEFYSSBjbG9jayBpcyBub3QgcHJlc2VudCwKLQkJICogdHJlYXQgdGhlIGZpcnN0IGNsb2NrIHNwZWNpZmllZCBhcyB0aGUgQVhJIGNsb2NrLgotCQkgKi8KLQkJbHAtJmd0O2F4aV9jbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWxfZW5hYmxlZCgmYW1wO3BkZXYtJmd0O2RldiwgTlVMTCk7Ci0JfQotCWlmIChJU19FUlIobHAtJmd0O2F4aV9jbGspKQotCQlyZXR1cm4gZGV2X2Vycl9wcm9iZSgmYW1wO3BkZXYtJmd0O2RldiwgUFRSX0VSUihscC0mZ3Q7YXhpX2NsayksCi0JCQkJICAgICAmIzM0O2NvdWxkIG5vdCBnZXQgQVhJIGNsb2NrXG4mIzM0Oyk7CiYjNDM7CWxwLSZndDtheGllbmV0X2NvbmZpZyA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YSgmYW1wO3BkZXYtJmd0O2Rldik7CiYjNDM7CWlmICghbHAtJmd0O2F4aWVuZXRfY29uZmlnKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlscC0mZ3Q7bWlzY19jbGtzWzBdLmlkID0gJiMzNDtheGlzX2NsayYjMzQ7OwotCWxwLSZndDttaXNjX2Nsa3NbMV0uaWQgPSAmIzM0O3JlZl9jbGsmIzM0OzsKLQlscC0mZ3Q7bWlzY19jbGtzWzJdLmlkID0gJiMzNDttZ3RfY2xrJiMzNDs7Ci0KLQlyZXQgPSBkZXZtX2Nsa19idWxrX2dldF9vcHRpb25hbF9lbmFibGUoJmFtcDtwZGV2LSZndDtkZXYsIFhBRV9OVU1fTUlTQ19DTE9DS1MsCi0JCQkJCQlscC0mZ3Q7bWlzY19jbGtzKTsKJiM0MzsJcmV0ID0gbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtjbGtfaW5pdChscCk7CiAJaWYgKHJldCkKLQkJcmV0dXJuIGRldl9lcnJfcHJvYmUoJmFtcDtwZGV2LSZndDtkZXYsIHJldCwKLQkJCQkgICAgICYjMzQ7Y291bGQgbm90IGdldC9lbmFibGUgbWlzYy4gY2xvY2tzXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJLyogTWFwIGRldmljZSByZWdpc3RlcnMgKi8KIAlscC0mZ3Q7cmVncyA9IGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDAsICZhbXA7ZXRocmVzKTsKQEAgLTI4NjEsOSAmIzQzOzMwOTEsNiBAQCBzdGF0aWMgaW50IGF4aWVuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkvKiBTZXR1cCBjaGVja3N1bSBvZmZsb2FkLCBidXQgZGVmYXVsdCB0byBvZmYgaWYgbm90IHNwZWNpZmllZCAqLwogCWxwLSZndDtmZWF0dXJlcyA9IDA7CiAKLQlpZiAoYXhpZW5ldF9pb3IobHAsIFhBRV9BQklMSVRZX09GRlNFVCkgJmFtcDsgWEFFX0FCSUxJVFlfU1RBVFMpCi0JCWxwLSZndDtmZWF0dXJlcyB8PSBYQUVfRkVBVFVSRV9TVEFUUzsKLQogCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtJmd0O2Rldi5vZl9ub2RlLCAmIzM0O3hsbngsdHhjc3VtJiMzNDssICZhbXA7dmFsdWUpOwogCWlmICghcmV0KSB7CiAJCXN3aXRjaCAodmFsdWUpIHsKQEAgLTI5NDAsNyAmIzQzOzMxNjcsMTcgQEAgc3RhdGljIGludCBheGllbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAomIzQzOwlpZiAobHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtwcm9iZV9pbml0KQomIzQzOwkJbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtwcm9iZV9pbml0KGxwKTsKJiM0MzsKIAlpZiAoIW9mX3Byb3BlcnR5X3ByZXNlbnQocGRldi0mZ3Q7ZGV2Lm9mX25vZGUsICYjMzQ7ZG1hcyYjMzQ7KSkgewomIzQzOwkJLyogTm9uLWRtYWVuZ2luZSAobGVnYWN5IERNQSkgbW9kZSBpcyBvbmx5IHN1cHBvcnRlZCBieSBzb21lIE1BQ3MgKi8KJiM0MzsJCWlmICghbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtsZWdhY3lfZG1hKSB7CiYjNDM7CQkJZGV2X2VycigmYW1wO3BkZXYtJmd0O2RldiwKJiM0MzsJCQkJJiMzNDtMZWdhY3kgRE1BIG1vZGUgbm90IHN1cHBvcnRlZCBieSB0aGlzIE1BQywgdXNlIGRtYWVuZ2luZVxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwogCQkvKiBGaW5kIHRoZSBETUEgbm9kZSwgbWFwIHRoZSBETUEgcmVnaXN0ZXJzLCBhbmQgZGVjb2RlIHRoZSBETUEgSVJRcyAqLwogCQlucCA9IG9mX3BhcnNlX3BoYW5kbGUocGRldi0mZ3Q7ZGV2Lm9mX25vZGUsICYjMzQ7YXhpc3RyZWFtLWNvbm5lY3RlZCYjMzQ7LCAwKTsKIApAQCAtMzAyMCw3ICYjNDM7MzI1NywxMCBAQCBzdGF0aWMgaW50IGF4aWVuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkJc3RydWN0IHhpbGlueF92ZG1hX2NvbmZpZyBjZmc7CiAJCXN0cnVjdCBkbWFfY2hhbiAqdHhfY2hhbjsKIAotCQlscC0mZ3Q7ZXRoX2lycSA9IHBsYXRmb3JtX2dldF9pcnFfb3B0aW9uYWwocGRldiwgMCk7CiYjNDM7CQlpZiAobHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDttYWNfaXJxKQomIzQzOwkJCWxwLSZndDtldGhfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbChwZGV2LCAwKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlscC0mZ3Q7ZXRoX2lycSA9IC1FTlhJTzsKIAkJaWYgKGxwLSZndDtldGhfaXJxICZsdDsgMCAmYW1wOyZhbXA7IGxwLSZndDtldGhfaXJxICE9IC1FTlhJTykgewogCQkJcmV0dXJuIGxwLSZndDtldGhfaXJxOwogCQl9CkBAIC0zMDczLDEwICYjNDM7MzMxMywxMiBAQCBzdGF0aWMgaW50IGF4aWVuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlscC0mZ3Q7dHhfZG1hX2NyID0gYXhpZW5ldF9jYWxjX2NyKGxwLCBYQVhJRE1BX0RGVF9UWF9USFJFU0hPTEQsCiAJCQkJCVhBWElETUFfREZUX1RYX1VTRUMpOwogCi0JcmV0ID0gYXhpZW5ldF9tZGlvX3NldHVwKGxwKTsKLQlpZiAocmV0KQotCQlkZXZfd2FybigmYW1wO3BkZXYtJmd0O2RldiwKLQkJCSAmIzM0O2Vycm9yIHJlZ2lzdGVyaW5nIE1ESU8gYnVzOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CWlmIChscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O21kaW8pIHsKJiM0MzsJCXJldCA9IGF4aWVuZXRfbWRpb19zZXR1cChscCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWRldl93YXJuKCZhbXA7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkgJiMzNDtlcnJvciByZWdpc3RlcmluZyBNRElPIGJ1czogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwl9CiAKIAlpZiAobHAtJmd0O3BoeV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSB8fAogCSAgICBscC0mZ3Q7cGh5X21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCkgewpAQCAtMzEwMCwyMyAmIzQzOzMzNDIsMjEgQEAgc3RhdGljIGludCBheGllbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCQlnb3RvIGNsZWFudXBfbWRpbzsKIAkJfQogCQlvZl9ub2RlX3B1dChucCk7Ci0JCWxwLSZndDtwY3Mub3BzID0gJmFtcDtheGllbmV0X3Bjc19vcHM7CiYjNDM7CQlscC0mZ3Q7cGNzLm9wcyA9IGxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7cGNzX29wczsKJiM0MzsJCWxwLSZndDtwY3MucG9sbCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7aW50ZXJuYWxfcGNzKSB7CiYjNDM7CQlscC0mZ3Q7cGNzLm9wcyA9IGxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7cGNzX29wczsKIAkJbHAtJmd0O3Bjcy5wb2xsID0gdHJ1ZTsKIAl9CiAKIAlscC0mZ3Q7cGh5bGlua19jb25maWcuZGV2ID0gJmFtcDtuZGV2LSZndDtkZXY7CiAJbHAtJmd0O3BoeWxpbmtfY29uZmlnLnR5cGUgPSBQSFlMSU5LX05FVERFVjsKIAlscC0mZ3Q7cGh5bGlua19jb25maWcubWFjX21hbmFnZWRfcG0gPSB0cnVlOwotCWxwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzID0gTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFIHwKLQkJTUFDXzEwRkQgfCBNQUNfMTAwRkQgfCBNQUNfMTAwMEZEOwomIzQzOwlscC0mZ3Q7cGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyA9IE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRTsKIAotCV9fc2V0X2JpdChscC0mZ3Q7cGh5X21vZGUsIGxwLSZndDtwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7Ci0JaWYgKGxwLSZndDtzd2l0Y2hfeF9zZ21paSkgewotCQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCwKLQkJCSAgbHAtJmd0O3BoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTsKLQkJX19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSwKLQkJCSAgbHAtJmd0O3BoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTsKLQl9CiYjNDM7CWxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7cGh5bGlua19zZXRfY2FwcyhscCwgJmFtcDtscC0mZ3Q7cGh5bGlua19jb25maWcpOwogCiAJbHAtJmd0O3BoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZSgmYW1wO2xwLSZndDtwaHlsaW5rX2NvbmZpZywgcGRldi0mZ3Q7ZGV2LmZ3bm9kZSwKIAkJCQkgICAgIGxwLSZndDtwaHlfbW9kZSwKQEAgLTMxNTksNyAmIzQzOzMzOTksOCBAQCBzdGF0aWMgdm9pZCBheGllbmV0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCWlmIChscC0mZ3Q7cGNzX3BoeSkKIAkJcHV0X2RldmljZSgmYW1wO2xwLSZndDtwY3NfcGh5LSZndDtkZXYpOwogCi0JYXhpZW5ldF9tZGlvX3RlYXJkb3duKGxwKTsKJiM0MzsJaWYgKGxwLSZndDttaWlfYnVzKQomIzQzOwkJYXhpZW5ldF9tZGlvX3RlYXJkb3duKGxwKTsKIH0KIAogc3RhdGljIHZvaWQgYXhpZW5ldF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X3h4di5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X3h4di5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmRiYzljMjFiMTA0YWYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfeHh2LmMKQEAgLTAsMCAmIzQzOzEsNTk1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogWFhWICgxMEcvMjVHKSBzdXBwb3J0CiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZXRodG9vbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeWxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt4aWxpbnhfYXhpZW5ldC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hpbGlueF9heGllbmV0X3h4di5oJiMzNDsKJiM0MzsKJiM0MzsvKiByZWFkbF9wb2xsX3RpbWVvdXQoKSBzbGVlcCBpbnRlcnZhbCAodXMpIGFuZCAxIG1zIHRvdGFsIHRpbWVvdXQgZm9yIEdUCiYjNDM7ICogcmVzZXQtZG9uZSBhbmQgUENTIGJsb2NrLWxvY2sgcG9sbHMuIFZhbHVlcyBmcm9tIFp5bnFNUC9WZXJzYWwgYnJpbmctdXA7CiYjNDM7ICogUEcyMTAgZG9lcyBub3Qgc3BlY2lmeSB0aGVzZSBib3VuZHMuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBYWFZfTElOS19QT0xMX0lOVEVSVkFMX1VTCTEwCiYjNDM7CiYjNDM7LyogTnVtYmVyIG9mIFhYViAoMTBHLzI1RykgTUFDIHJlZ2lzdGVycyBleHBvc2VkIHZpYSBldGh0b29sIC1kLgomIzQzOyAqIENvdmVycyBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMgcmVnaXN0ZXJzIHBlciBYaWxpbnggUEcyMTAuCiYjNDM7ICovCiYjNDM7c3RhdGljIGNvbnN0IHUzMiBheGllbmV0X3h4dl9yZWdfZHVtcF9vZmZzZXRzW1hYVl9SRUdTX05dID0gewomIzQzOwlYWFZfR1RfUkVTRVRfT0ZGU0VULAomIzQzOwlYWFZfUkVTRVRfT0ZGU0VULAomIzQzOwlYWFZfTU9ERV9PRkZTRVQsCiYjNDM7CVhYVl9UQ19PRkZTRVQsCiYjNDM7CVhYVl9SQ1cxX09GRlNFVCwKJiM0MzsJWFhWX0pVTV9PRkZTRVQsCiYjNDM7CVhYVl9WTF9MRU5HVEhfT0ZGU0VULAomIzQzOwlYWFZfVElDS1JFR19PRkZTRVQsCiYjNDM7CVhYVl9DT05GSUdfUkVWSVNJT04sCiYjNDM7CVhYVl9DT05GSUdfMTU4OF9PRkZTRVQsCiYjNDM7CVhYVl9DT05GSUdfVFhfRkxPV19DVFJMMV9PRkZTRVQsCiYjNDM7CVhYVl9DT05GSUdfUlhfRkxPV19DVFJMMV9PRkZTRVQsCiYjNDM7CVhYVl9DT05GSUdfUlhfRkxPV19DVFJMMl9PRkZTRVQsCiYjNDM7CVhYVl9DT05GSUdfUlNGRUNfT0ZGU0VULAomIzQzOwlYWFZfQ09ORklHX0ZFQ19PRkZTRVQsCiYjNDM7CVhYVl9BTl9DVEwxX09GRlNFVCwKJiM0MzsJWFhWX0FOX0NUTDJfT0ZGU0VULAomIzQzOwlYWFZfQU5fQUJJTElUWV9PRkZTRVQsCiYjNDM7CVhYVl9MVF9DVEwxX09GRlNFVCwKJiM0MzsJWFhWX1NXSVRDSF9DT1JFX1NQRUVEX09GRlNFVCwKJiM0MzsJWFhWX0NPTkZJR18xNTg4XzMyQklUX09GRlNFVCwKJiM0MzsJWFhWX1RYX0NPTkZJR18xNTg4X09GRlNFVCwKJiM0MzsJWFhWX1JYX0NPTkZJR18xNTg4X09GRlNFVCwKJiM0MzsJWFhWX0dUV0laX0NUUkxfT0ZGU0VULAomIzQzOwlYWFZfU1RBVFJYX1NUQVRVUzBfT0ZGU0VULAomIzQzOwlYWFZfUlhfU1RBVFVTX1JFRzEsCiYjNDM7CVhYVl9TVEFUUlhfU1RBVFVTMl9PRkZTRVQsCiYjNDM7CVhYVl9TVEFUUlhfQkxLTENLX09GRlNFVCwKJiM0MzsJWFhWX1NUQVRfUlhfUlNGRUNfU1RBVFVTX09GRlNFVCwKJiM0MzsJWFhWX1NUQVRfUlhfRkVDX1NUQVRVU19PRkZTRVQsCiYjNDM7CVhYVl9TVEFUX1RYX1JTRkVDX1NUQVRVU19PRkZTRVQsCiYjNDM7CVhYVl9TVEFUX1RYX0ZMT1dfQ1RSTDFfT0ZGU0VULAomIzQzOwlYWFZfU1RBVF9SWF9GTE9XX0NUUkwxX09GRlNFVCwKJiM0MzsJWFhWX1NUQVRfQU5fU1RTX09GRlNFVCwKJiM0MzsJWFhWX1NUQVRfQU5fTFBfU1RBVFVTX09GRlNFVCwKJiM0MzsJWFhWX1NUQVRfQU5fTElOS19DVExfT0ZGU0VULAomIzQzOwlYWFZfU1RBVF9MVF9TVEFUVVMxX09GRlNFVCwKJiM0MzsJWFhWX1NUQVRfTFRfU1RBVFVTMl9PRkZTRVQsCiYjNDM7CVhYVl9TVEFUX0xUX1NUQVRVUzNfT0ZGU0VULAomIzQzOwlYWFZfU1RBVF9MVF9TVEFUVVM0X09GRlNFVCwKJiM0MzsJWFhWX1NUQVRfTFRfQ09FRkYwX09GRlNFVCwKJiM0MzsJWFhWX1NUQVRfUlhfVkFMSURfQ1RSTF9DT0RFX09GRlNFVCwKJiM0MzsJWFhWX1NUQVRfQ09SRV9TUEVFRF9PRkZTRVQsCiYjNDM7CVhYVl9TVEFUX1RTTl9PRkZTRVQsCiYjNDM7CVhYVl9TVEFUX0dUV0laX09GRlNFVCwKJiM0MzsJWFhWX1NUQVRfQU5fTElOS19DVEwyX09GRlNFVCwKJiM0Mzt9OwomIzQzOwomIzQzOy8qIE9wdGlvbiB0YWJsZSBmb3Igc2V0dGluZyB1cCBYWFYgRXRoZXJuZXQgaGFyZHdhcmUgb3B0aW9ucyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgYXhpZW5ldF9vcHRpb24geHh2ZW5ldF9vcHRpb25zW10gPSB7CiYjNDM7CXsgLyogVHVybiBvbiBGQ1Mgc3RyaXBwaW5nIG9uIHJlY2VpdmUgcGFja2V0cyAqLwomIzQzOwkJLm9wdCA9IFhBRV9PUFRJT05fRkNTX1NUUklQLAomIzQzOwkJLnJlZyA9IFhYVl9SQ1cxX09GRlNFVCwKJiM0MzsJCS5tX29yID0gWFhWX1JDVzFfRkNTX01BU0ssCiYjNDM7CX0sIHsgLyogVHVybiBvbiBGQ1MgaW5zZXJ0aW9uIG9uIHRyYW5zbWl0IHBhY2tldHMgKi8KJiM0MzsJCS5vcHQgPSBYQUVfT1BUSU9OX0ZDU19JTlNFUlQsCiYjNDM7CQkucmVnID0gWFhWX1RDX09GRlNFVCwKJiM0MzsJCS5tX29yID0gWFhWX1RDX0ZDU19NQVNLLAomIzQzOwl9LCB7IC8qIEVuYWJsZSB0cmFuc21pdHRlciAqLwomIzQzOwkJLm9wdCA9IFhBRV9PUFRJT05fVFhFTiwKJiM0MzsJCS5yZWcgPSBYWFZfVENfT0ZGU0VULAomIzQzOwkJLm1fb3IgPSBYWFZfVENfVFhfTUFTSywKJiM0MzsJfSwgeyAvKiBFbmFibGUgcmVjZWl2ZXIgKi8KJiM0MzsJCS5vcHQgPSBYQUVfT1BUSU9OX1JYRU4sCiYjNDM7CQkucmVnID0gWFhWX1JDVzFfT0ZGU0VULAomIzQzOwkJLm1fb3IgPSBYWFZfUkNXMV9SWF9NQVNLLAomIzQzOwl9LAomIzQzOwl7fQomIzQzO307CiYjNDM7CiYjNDM7LyogUEcyMTAgc3RhdGlzdGljcy1ibG9jayBvZmZzZXRzIGluZGV4ZWQgYnkgZW51bSB4eHZfc3RhdC4gRWFjaCBlbnRyeSBpcwomIzQzOyAqIHRoZSAzMi1iaXQgTFNCIHJlZ2lzdGVyIGFkZHJlc3M7IHRoZSBjb3JyZXNwb25kaW5nIE1TQiBpcyBhdCAmIzQzOzQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGNvbnN0IHUzMiBheGllbmV0X3h4dl9zdGF0X29mZnNldHNbWFhWX1NUQVRfQ09VTlRdID0gewomIzQzOwlbWFhWX1NUQVRfUlhfVE9UQUxfUEFDS0VUU10JID0gWFhWX1NUQVRfUlhfVE9UQUxfUEFDS0VUU19PRkZTRVQsCiYjNDM7CVtYWFZfU1RBVF9SWF9UT1RBTF9HT09EX1BBQ0tFVFNdID0gWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9QQUNLRVRTX09GRlNFVCwKJiM0MzsJW1hYVl9TVEFUX1JYX1RPVEFMX0JZVEVTXQkgPSBYWFZfU1RBVF9SWF9UT1RBTF9CWVRFU19PRkZTRVQsCiYjNDM7CVtYWFZfU1RBVF9SWF9UT1RBTF9HT09EX0JZVEVTXQkgPSBYWFZfU1RBVF9SWF9UT1RBTF9HT09EX0JZVEVTX09GRlNFVCwKJiM0MzsJW1hYVl9TVEFUX1JYX0JBRF9GQ1NdCQkgPSBYWFZfU1RBVF9SWF9CQURfRkNTX09GRlNFVCwKJiM0MzsJW1hYVl9TVEFUX1JYX0lOUkFOR0VFUlJdCSA9IFhYVl9TVEFUX1JYX0lOUkFOR0VFUlJfT0ZGU0VULAomIzQzOwlbWFhWX1NUQVRfUlhfTVVMVElDQVNUXQkJID0gWFhWX1NUQVRfUlhfTVVMVElDQVNUX09GRlNFVCwKJiM0MzsJW1hYVl9TVEFUX1JYX0JST0FEQ0FTVF0JCSA9IFhYVl9TVEFUX1JYX0JST0FEQ0FTVF9PRkZTRVQsCiYjNDM7CVtYWFZfU1RBVF9SWF9VTkRFUlNJWkVdCQkgPSBYWFZfU1RBVF9SWF9VTkRFUlNJWkVfT0ZGU0VULAomIzQzOwlbWFhWX1NUQVRfUlhfRlJBR01FTlRdCQkgPSBYWFZfU1RBVF9SWF9GUkFHTUVOVF9PRkZTRVQsCiYjNDM7CVtYWFZfU1RBVF9SWF9KQUJCRVJdCQkgPSBYWFZfU1RBVF9SWF9KQUJCRVJfT0ZGU0VULAomIzQzOwlbWFhWX1NUQVRfUlhfT1ZFUlNJWkVdCQkgPSBYWFZfU1RBVF9SWF9PVkVSU0laRV9PRkZTRVQsCiYjNDM7CVtYWFZfU1RBVF9SWF9QQVVTRV0JCSA9IFhYVl9TVEFUX1JYX1BBVVNFX09GRlNFVCwKJiM0MzsJW1hYVl9TVEFUX1RYX1RPVEFMX1BBQ0tFVFNdCSA9IFhYVl9TVEFUX1RYX1RPVEFMX1BBQ0tFVFNfT0ZGU0VULAomIzQzOwlbWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9QQUNLRVRTXSA9IFhYVl9TVEFUX1RYX1RPVEFMX0dPT0RfUEFDS0VUU19PRkZTRVQsCiYjNDM7CVtYWFZfU1RBVF9UWF9UT1RBTF9CWVRFU10JID0gWFhWX1NUQVRfVFhfVE9UQUxfQllURVNfT0ZGU0VULAomIzQzOwlbWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9CWVRFU10JID0gWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9CWVRFU19PRkZTRVQsCiYjNDM7CVtYWFZfU1RBVF9UWF9CQURfRkNTXQkJID0gWFhWX1NUQVRfVFhfQkFEX0ZDU19PRkZTRVQsCiYjNDM7CVtYWFZfU1RBVF9UWF9GUkFNRV9FUlJPUl0JID0gWFhWX1NUQVRfVFhfRlJBTUVfRVJST1JfT0ZGU0VULAomIzQzOwlbWFhWX1NUQVRfVFhfTVVMVElDQVNUXQkJID0gWFhWX1NUQVRfVFhfTVVMVElDQVNUX09GRlNFVCwKJiM0MzsJW1hYVl9TVEFUX1RYX0JST0FEQ0FTVF0JCSA9IFhYVl9TVEFUX1RYX0JST0FEQ0FTVF9PRkZTRVQsCiYjNDM7CVtYWFZfU1RBVF9UWF9QQVVTRV0JCSA9IFhYVl9TVEFUX1RYX1BBVVNFX09GRlNFVCwKJiM0Mzt9OwomIzQzOwomIzQzOy8qIFhYViAoUEcyMTApIGNvdW50ZXJzIGV4cG9zZWQgdmlhIGV0aHRvb2wgLVMuIE9ubHkgY291bnRlcnMgdGhhdCBoYXZlIG5vCiYjNDM7ICogc3RhbmRhcmQgdUFQSSBhcmUgbGlzdGVkIGhlcmU7IHRoZSB0b3RhbHMgaW5jbHVkZSBlcnJvcmVkIGZyYW1lcywgc28gdGhleQomIzQzOyAqIGFyZSBkaXN0aW5jdCBmcm9tIHRoZSBnb29kLWZyYW1lIGNvdW50cyBpbiBydG5sX2xpbmtfc3RhdHM2NCBhbmQgdGhlCiYjNDM7ICogSUVFRSBNQUMgc3RhdGlzdGljcy4gRXZlcnkgb3RoZXIgWFhWIGNvdW50ZXIgaXMgcmVwb3J0ZWQgdGhyb3VnaCB0aGUKJiM0MzsgKiBkZWRpY2F0ZWQgc3RhdHM2NCwgcGF1c2UsIE1BQyBhbmQgUk1PTiBjYWxsYmFja3MgaW5zdGVhZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgY29uc3QgZW51bSB4eHZfc3RhdCBheGllbmV0X3h4dl9wcml2X3N0YXRzW10gPSB7CiYjNDM7CVhYVl9TVEFUX1JYX1RPVEFMX1BBQ0tFVFMsCiYjNDM7CVhYVl9TVEFUX1JYX1RPVEFMX0JZVEVTLAomIzQzOwlYWFZfU1RBVF9UWF9UT1RBTF9QQUNLRVRTLAomIzQzOwlYWFZfU1RBVF9UWF9UT1RBTF9CWVRFUywKJiM0MzsJWFhWX1NUQVRfVFhfQkFEX0ZDUywKJiM0MzsJWFhWX1NUQVRfVFhfRlJBTUVfRVJST1IsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciBheGllbmV0X3h4dl9ldGh0b29sX3N0YXRzX3N0cmluZ3NbXVtFVEhfR1NUUklOR19MRU5dID0gewomIzQzOwkmIzM0O1JYIFRvdGFsIFBhY2tldHMmIzM0OywKJiM0MzsJJiMzNDtSWCBUb3RhbCBCeXRlcyYjMzQ7LAomIzQzOwkmIzM0O1RYIFRvdGFsIFBhY2tldHMmIzM0OywKJiM0MzsJJiMzNDtUWCBUb3RhbCBCeXRlcyYjMzQ7LAomIzQzOwkmIzM0O1RYIEJhZCBGQ1MmIzM0OywKJiM0MzsJJiMzNDtUWCBGcmFtZSBFcnJvciYjMzQ7LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHU2NCBheGllbmV0X3h4dl9yZWFkX2NvdW50ZXIoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLCBlbnVtIHh4dl9zdGF0IHN0YXQpCiYjNDM7ewomIzQzOwl1MzIgb2ZmID0gYXhpZW5ldF94eHZfc3RhdF9vZmZzZXRzW3N0YXRdOwomIzQzOwl1MzIgbHNiLCBtc2I7CiYjNDM7CiYjNDM7CWxzYiA9IGF4aWVuZXRfaW9yKGxwLCBvZmYpOwomIzQzOwltc2IgPSBheGllbmV0X2lvcihscCwgb2ZmICYjNDM7IFhYVl9TVEFUX01TQl9PRkZTRVQpOwomIzQzOwomIzQzOwlyZXR1cm4gKCh1NjQpbXNiICZsdDsmbHQ7IDMyKSB8IGxzYjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgYXhpZW5ldF94eHZfaXBfaGFzX2d0d2l6X3N0YXR1cyh1MzIgaXBfdmVyc2lvbikKJiM0Mzt7CiYjNDM7CXU4IG1pbm9yID0gRklFTERfR0VUKFhYVl9NSU5fTUFTSywgaXBfdmVyc2lvbik7CiYjNDM7CXU4IG1haiA9IEZJRUxEX0dFVChYWFZfTUFKX01BU0ssIGlwX3ZlcnNpb24pOwomIzQzOwomIzQzOwlpZiAobWFqID09IFhYVl9JUF9WRVJfR1RXSVpfTUFKX01JTikKJiM0MzsJCXJldHVybiBtaW5vciAmZ3Q7PSBYWFZfSVBfVkVSX0dUV0laX01JTl9NSU47CiYjNDM7CXJldHVybiBtYWogJmd0OyBYWFZfSVBfVkVSX0dUV0laX01BSl9NSU47CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGF4aWVuZXRfeHh2X3NldG9wdGlvbnMgLSBTZXQgWFhWIE1BQyBvcHRpb25zIGZyb20gdGhlIG9wdGlvbiB0YWJsZQomIzQzOyAqIEBuZGV2OiBQb2ludGVyIHRvIHRoZSBuZXRfZGV2aWNlIHN0cnVjdHVyZQomIzQzOyAqIEBvcHRpb25zOiBPcHRpb24gZmxhZ3MgdG8gYXBwbHkKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9zZXRvcHRpb25zKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgb3B0aW9ucykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwlzdHJ1Y3QgYXhpZW5ldF9vcHRpb24gKnRwID0geHh2ZW5ldF9vcHRpb25zOwomIzQzOwl1MzIgcmVnOwomIzQzOwomIzQzOwl3aGlsZSAodHAtJmd0O29wdCkgewomIzQzOwkJcmVnID0gYXhpZW5ldF9pb3IobHAsIHRwLSZndDtyZWcpICZhbXA7IH50cC0mZ3Q7bV9vcjsKJiM0MzsJCWlmIChvcHRpb25zICZhbXA7IHRwLSZndDtvcHQpCiYjNDM7CQkJcmVnIHw9IHRwLSZndDttX29yOwomIzQzOwkJYXhpZW5ldF9pb3cobHAsIHRwLSZndDtyZWcsIHJlZyk7CiYjNDM7CQl0cCYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbHAtJmd0O29wdGlvbnMgfD0gb3B0aW9uczsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYXhpZW5ldF94eHZfcHJvYmVfaW5pdCAtIEluaXRpYWxpemUgWFhWLXNwZWNpZmljIHN0YXRlIGF0IHByb2JlIHRpbWUKJiM0MzsgKiBAbHA6IFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF94eHZfcHJvYmVfaW5pdChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApCiYjNDM7ewomIzQzOwlscC0mZ3Q7eHh2X2lwX3ZlcnNpb24gPSBheGllbmV0X2lvcihscCwgWFhWX0NPTkZJR19SRVZJU0lPTik7CiYjNDM7CWxwLSZndDtmZWF0dXJlcyB8PSBYQUVfRkVBVFVSRV9TVEFUUzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYXhpZW5ldF94eHZfZ3RfcmVzZXQgLSBQdWxzZSB0aGUgWFhWIEdUIHJlc2V0IGxpbmUKJiM0MzsgKiBAbHA6IFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF94eHZfZ3RfcmVzZXQoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKQomIzQzO3sKJiM0MzsJdTMyIHZhbDsKJiM0MzsKJiM0MzsJLyogUmVzZXQgR1QgKi8KJiM0MzsJdmFsID0gYXhpZW5ldF9pb3IobHAsIFhYVl9HVF9SRVNFVF9PRkZTRVQpOwomIzQzOwl2YWwgfD0gWFhWX0dUX1JFU0VUX01BU0s7CiYjNDM7CWF4aWVuZXRfaW93KGxwLCBYWFZfR1RfUkVTRVRfT0ZGU0VULCB2YWwpOwomIzQzOwkvKiBBbGxvdyAxIG1zIGZvciB0aGUgR1QgcmVzZXQgdG8gc2V0dGxlIChzZWUgdGltZW91dCBub3RlIGFib3ZlKSAqLwomIzQzOwl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CiYjNDM7CXZhbCA9IGF4aWVuZXRfaW9yKGxwLCBYWFZfR1RfUkVTRVRfT0ZGU0VUKTsKJiM0MzsJdmFsICZhbXA7PSB+WFhWX0dUX1JFU0VUX01BU0s7CiYjNDM7CWF4aWVuZXRfaW93KGxwLCBYWFZfR1RfUkVTRVRfT0ZGU0VULCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBheGllbmV0X3h4dl9wb2xsX2xpbmtfcmVhZHkgLSBXYWl0IGZvciBYWFYgR1QgYW5kIFBDUyBibG9jayBsb2NrCiYjNDM7ICogQG5kZXY6IFBvaW50ZXIgdG8gdGhlIG5ldF9kZXZpY2Ugc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBQb2xsIEdUIHdpemFyZCByZXNldC1kb25lIG9uIElQIHYzLjImIzQzOywgdGhlbiBSWCBQQ1MgYmxvY2sgbG9jay4gQmxvY2stbG9jawomIzQzOyAqIGZhaWx1cmUgaXMgbG9nZ2VkIGJ1dCBub3QgcHJvcGFnYXRlZDogaXQgZGVwZW5kcyBvbiBhIGxpdmUgbGluayBwYXJ0bmVyIGFuZAomIzQzOyAqIHJlZmVyZW5jZSBjbG9jaywgc28gYW4gdW5wbHVnZ2VkIGNhYmxlIG11c3Qgbm90IGZhaWwgZGV2aWNlIGJyaW5nLXVwLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgaWYgR1QgcmVzZXQtZG9uZSB0aW1lcyBvdXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBheGllbmV0X3h4dl9wb2xsX2xpbmtfcmVhZHkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyogQ29uZmlybSBYWFYgRXRoZXJuZXQgaXMgdXA6IG9uIElQIHYzLjImIzQzOywgd2FpdCBmb3IgR1QKJiM0MzsJICogcmVzZXQtZG9uZSBiZWZvcmUgZnVydGhlciByZWdpc3RlciBhY2Nlc3MsIHRoZW4gcG9sbCB1bnRpbAomIzQzOwkgKiBSWCBQQ1MgYmxvY2sgbG9jayBpcyBhc3NlcnRlZC4KJiM0MzsJICovCiYjNDM7CWlmIChheGllbmV0X3h4dl9pcF9oYXNfZ3R3aXpfc3RhdHVzKGxwLSZndDt4eHZfaXBfdmVyc2lvbikpIHsKJiM0MzsJCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChscC0mZ3Q7cmVncyAmIzQzOyBYWFZfU1RBVF9HVFdJWl9PRkZTRVQsCiYjNDM7CQkJCQkgdmFsLAomIzQzOwkJCQkJICh2YWwgJmFtcDsgWFhWX0dUV0laX1JFU0VUX0RPTkUpID09IFhYVl9HVFdJWl9SRVNFVF9ET05FLAomIzQzOwkJCQkJIFhYVl9MSU5LX1BPTExfSU5URVJWQUxfVVMsCiYjNDM7CQkJCQkgREVMQVlfT0ZfT05FX01JTExJU0VDKTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5kZXYsICYjMzQ7WFhWIE1BQyBHVCByZXNldCBub3QgY29tcGxldGUhIENyb3NzLWNoZWNrIHRoZSBNQUMgcmVmIGNsb2NrIGNvbmZpZ3VyYXRpb25cbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChscC0mZ3Q7cmVncyAmIzQzOyBYWFZfU1RBVFJYX0JMS0xDS19PRkZTRVQsCiYjNDM7CQkJCSB2YWwsICh2YWwgJmFtcDsgWFhWX1JYX0JMS0xDS19NQVNLKSwKJiM0MzsJCQkJIFhYVl9MSU5LX1BPTExfSU5URVJWQUxfVVMsCiYjNDM7CQkJCSBERUxBWV9PRl9PTkVfTUlMTElTRUMpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJbmV0ZGV2X2VycihuZGV2LCAmIzM0O1hYViBNQUMgYmxvY2sgbG9jayBub3QgY29tcGxldGUhIENyb3NzLWNoZWNrIHRoZSBNQUMgcmVmIGNsb2NrIGNvbmZpZ3VyYXRpb25cbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGF4aWVuZXRfeHh2X21hY19pbml0IC0gWFhWIE1BQy1zcGVjaWZpYyBicmluZy11cCBhZnRlciB0aGUgRE1BIHJlc2V0CiYjNDM7ICogQG5kZXY6IFBvaW50ZXIgdG8gdGhlIG5ldF9kZXZpY2Ugc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIG51bWJlciBvdGhlcndpc2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBheGllbmV0X3h4dl9tYWNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBheGllbmV0X3h4dl9wb2xsX2xpbmtfcmVhZHkobmRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlscC0mZ3Q7b3B0aW9ucyB8PSBYQUVfT1BUSU9OX0ZDU19TVFJJUDsKJiM0MzsJbHAtJmd0O29wdGlvbnMgfD0gWEFFX09QVElPTl9GQ1NfSU5TRVJUOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF94eHZfcGh5bGlua19zZXRfY2FwYWJpbGl0aWVzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwKJiM0MzsJCQkJCQkgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjZmcpCiYjNDM7ewomIzQzOwl1MzIgY29yZV9zcGVlZDsKJiM0MzsJYm9vbCBydHN3OwomIzQzOwomIzQzOwljb3JlX3NwZWVkID0gYXhpZW5ldF9pb3IobHAsIFhYVl9TVEFUX0NPUkVfU1BFRURfT0ZGU0VUKTsKJiM0MzsJLyogQml0WzE6MF06IDAwPTI1RywgMDE9MTBHLCAxMD1ydW50aW1lLXN3aXRjaGFibGUgMjVHLAomIzQzOwkgKiAxMT1ydW50aW1lLXN3aXRjaGFibGUgMTBHLiBBIHJ1bnRpbWUtc3dpdGNoYWJsZSBjb3JlIGNhbiBvcGVyYXRlIGF0CiYjNDM7CSAqIGVpdGhlciBzcGVlZCwgc28gYWR2ZXJ0aXNlIGJvdGg7IGEgZml4ZWQgY29yZSBhZHZlcnRpc2VzIG9ubHkgaXRzCiYjNDM7CSAqIGNvbmZpZ3VyZWQgc3BlZWQuCiYjNDM7CSAqLwomIzQzOwlydHN3ID0gY29yZV9zcGVlZCAmYW1wOyBYWFZfU1RBVF9DT1JFX1NQRUVEX1JUU1dfTUFTSzsKJiM0MzsKJiM0MzsJaWYgKHJ0c3cgfHwgKGNvcmVfc3BlZWQgJmFtcDsgWFhWX1NUQVRfQ09SRV9TUEVFRF8xMEdfTUFTSykpIHsKJiM0MzsJCWNmZy0mZ3Q7bWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMDBGRDsKJiM0MzsJCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIsCiYjNDM7CQkJICBjZmctJmd0O3N1cHBvcnRlZF9pbnRlcmZhY2VzKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocnRzdyB8fCAhKGNvcmVfc3BlZWQgJmFtcDsgWFhWX1NUQVRfQ09SRV9TUEVFRF8xMEdfTUFTSykpIHsKJiM0MzsJCWNmZy0mZ3Q7bWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMjUwMDBGRDsKJiM0MzsJCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMjVHQkFTRVIsCiYjNDM7CQkJICBjZmctJmd0O3N1cHBvcnRlZF9pbnRlcmZhY2VzKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLAomIzQzOwkJCQkgICAgICB1bnNpZ25lZCBpbnQgbmVnX21vZGUsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gcGNzX3RvX2F4aWVuZXRfbG9jYWwocGNzKTsKJiM0MzsKJiM0MzsJc3RhdGUtJmd0O2R1cGxleCA9IERVUExFWF9GVUxMOwomIzQzOwlzdGF0ZS0mZ3Q7YW5fY29tcGxldGUgPSAhIShheGllbmV0X2lvcihscCwgWFhWX1NUQVRfQU5fU1RTX09GRlNFVCkgJmFtcDsKJiM0MzsJCQkJWFhWX0FOX0NPTVBMRVRFX01BU0spOwomIzQzOwlzdGF0ZS0mZ3Q7bGluayA9IGF4aWVuZXRfaW9yKGxwLCBYWFZfUlhfU1RBVFVTX1JFRzEpICZhbXA7CiYjNDM7CQkgICAgICBYWFZfUlhfU1RBVFVTX01BU0s7CiYjNDM7CiYjNDM7CWlmIChheGllbmV0X2lvcihscCwgWFhWX1NUQVRfQ09SRV9TUEVFRF9PRkZTRVQpICZhbXA7CiYjNDM7CSAgICBYWFZfU1RBVF9DT1JFX1NQRUVEXzEwR19NQVNLKQomIzQzOwkJc3RhdGUtJmd0O3NwZWVkID0gU1BFRURfMTAwMDA7CiYjNDM7CWVsc2UKJiM0MzsJCXN0YXRlLSZndDtzcGVlZCA9IFNQRUVEXzI1MDAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGF4aWVuZXRfeHh2X3Bjc19jb25maWcoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBuZWdfbW9kZSwKJiM0MzsJCQkJICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLAomIzQzOwkJCQkgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkdmVydGlzaW5nLAomIzQzOwkJCQkgIGJvb2wgcGVybWl0X3BhdXNlX3RvX21hYykKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfcGNzX29wcyBheGllbmV0X3h4dl9wY3Nfb3BzID0gewomIzQzOwkucGNzX2dldF9zdGF0ZSA9IGF4aWVuZXRfeHh2X3Bjc19nZXRfc3RhdGUsCiYjNDM7CS5wY3NfY29uZmlnID0gYXhpZW5ldF94eHZfcGNzX2NvbmZpZywKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGF4aWVuZXRfeHh2X2dldF9yZWdzIC0gRHVtcCBYWFYgTUFDIHJlZ2lzdGVycyBmb3IgZXRodG9vbAomIzQzOyAqIEBscDogUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmUKJiM0MzsgKiBAZGF0YTogQnVmZmVyIGZvciByZWdpc3RlciB2YWx1ZXMgKHplcm9lZCBhbmQgc2l6ZWQgYnkgdGhlIGNhbGxlcikKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfcmVncyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsIHUzMiAqZGF0YSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShheGllbmV0X3h4dl9yZWdfZHVtcF9vZmZzZXRzKTsgaSYjNDM7JiM0MzspCiYjNDM7CQlkYXRhW2ldID0gYXhpZW5ldF9pb3IobHAsIGF4aWVuZXRfeHh2X3JlZ19kdW1wX29mZnNldHNbaV0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGF4aWVuZXRfMTBnMjVnX2Nsa19pbml0KHN0cnVjdCBheGllbmV0X2xvY2FsICpscCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IGxwLSZndDtkZXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIFRoZSByZWdpc3RlciwgUlggYW5kIEdUIERSUCBjbG9ja3MgYXJlIG1hbmRhdG9yeSBmb3IgTUFDJiM0MztQQ1MKJiM0MzsJICogb3BlcmF0aW9uLCBzbyBmZXRjaCB0aGVtIGFzIHJlcXVpcmVkLgomIzQzOwkgKi8KJiM0MzsJbHAtJmd0O2F4aV9jbGsgPSBkZXZtX2Nsa19nZXRfZW5hYmxlZChkZXYsICYjMzQ7c19heGkmIzM0Oyk7CiYjNDM7CWlmIChJU19FUlIobHAtJmd0O2F4aV9jbGspKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGxwLSZndDtheGlfY2xrKSwKJiM0MzsJCQkJICAgICAmIzM0O2NvdWxkIG5vdCBnZXQgQVhJIGNsb2NrXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWxwLSZndDttaXNjX2Nsa3NbMF0uaWQgPSAmIzM0O3J4X2NvcmUmIzM0OzsKJiM0MzsJbHAtJmd0O21pc2NfY2xrc1sxXS5pZCA9ICYjMzQ7ZHJwJiMzNDs7CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fY2xrX2J1bGtfZ2V0X2VuYWJsZShkZXYsIDIsIGxwLSZndDttaXNjX2Nsa3MpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsCiYjNDM7CQkJCSAgICAgJiMzNDtjb3VsZCBub3QgZ2V0L2VuYWJsZSBYWFYgY2xvY2tzXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBheGllbmV0X3h4dl9zdGF0c191cGRhdGUgLSBMYXRjaCBhbmQgYWNjdW11bGF0ZSBYWFYgaGFyZHdhcmUgY291bnRlcnMKJiM0MzsgKiBAbHA6IFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBUaGUgWFhWIHN0YXRpc3RpY3MgY291bnRlcnMgYXJlIGNsZWFyLW9uLXRpY2sgKFBHMjEwKTogd3JpdGluZyBUSUNLX1JFRwomIzQzOyAqIGxhdGNoZXMgdGhlIGludGVybmFsIGFjY3VtdWxhdG9ycyBpbnRvIHRoZSByZWFkYWJsZSBTVEFUXypfTFNCL01TQiByZWdpc3RlcnMKJiM0MzsgKiBhbmQgY2xlYXJzIHRoZSBpbnRlcm5hbCBhY2N1bXVsYXRvcnMuIEVhY2ggcG9zdC1USUNLIHJlYWQgdGhlcmVmb3JlIHJldHVybnMKJiM0MzsgKiB0aGUgY291bnQgZm9yIHRoZSBpbnRlcnZhbCBzaW5jZSB0aGUgcHJldmlvdXMgVElDSywgc28gc29mdHdhcmUgYWNjdW11bGF0ZXMKJiM0MzsgKiB0aG9zZSBpbnRlcnZhbHMgaW50byBscC0mZ3Q7eHh2X3N0YXRfYmFzZS4gQSBsYXN0LWNvdW50ZXIgZGVsdGEgKGFzIHVzZWQgYnkgdGhlCiYjNDM7ICogZnJlZS1ydW5uaW5nIDFHIE1BQyBwYXRoKSBpcyBub3QgbmVlZGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfeHh2X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApCiYjNDM7ewomIzQzOwl1NjQgY291bnRlcltYWFZfU1RBVF9DT1VOVF07CiYjNDM7CWVudW0geHh2X3N0YXQgc3RhdDsKJiM0MzsKJiM0MzsJLyogTGF0Y2ggdGhlIGNsZWFyLW9uLXRpY2sgc25hcHNob3QgYW5kIHJlYWQgdGhlIGNvdW50ZXJzIG91dHNpZGUgdGhlCiYjNDM7CSAqIHNlcWNvdW50IHdyaXRlIHNlY3Rpb24sIHNvIG9ubHkgdGhlIGFjY3VtdWxhdG9yIHVwZGF0ZXMgcnVuIGluc2lkZSBpdAomIzQzOwkgKiBhbmQgdGhlIHJlYWRlciByZXRyeSB3aW5kb3cgc3RheXMgc2hvcnQuCiYjNDM7CSAqLwomIzQzOwlheGllbmV0X2lvdyhscCwgWFhWX1RJQ0tSRUdfT0ZGU0VULCBYWFZfVElDS1JFR19TVEFURU5fTUFTSyk7CiYjNDM7CWZvciAoc3RhdCA9IDA7IHN0YXQgJmx0OyBYWFZfU1RBVF9DT1VOVDsgc3RhdCYjNDM7JiM0MzspCiYjNDM7CQljb3VudGVyW3N0YXRdID0gYXhpZW5ldF94eHZfcmVhZF9jb3VudGVyKGxwLCBzdGF0KTsKJiM0MzsKJiM0MzsJd3JpdGVfc2VxY291bnRfYmVnaW4oJmFtcDtscC0mZ3Q7aHdfc3RhdHNfc2VxY291bnQpOwomIzQzOwlmb3IgKHN0YXQgPSAwOyBzdGF0ICZsdDsgWFhWX1NUQVRfQ09VTlQ7IHN0YXQmIzQzOyYjNDM7KQomIzQzOwkJbHAtJmd0O3h4dl9zdGF0X2Jhc2Vbc3RhdF0gJiM0Mzs9IGNvdW50ZXJbc3RhdF07CiYjNDM7CXdyaXRlX3NlcWNvdW50X2VuZCgmYW1wO2xwLSZndDtod19zdGF0c19zZXFjb3VudCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGF4aWVuZXRfeHh2X2dldF9zdGF0czY0IC0gRmlsbCBydG5sX2xpbmtfc3RhdHM2NCBmcm9tIFhYViBjb3VudGVycwomIzQzOyAqIEBscDogUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmUKJiM0MzsgKiBAc3RhdHM6IE91dHB1dCBydG5sX2xpbmtfc3RhdHM2NCBzdHJ1Y3R1cmUgdG8gcG9wdWxhdGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfc3RhdHM2NChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHN0YXJ0OwomIzQzOwl1NjQgdHhfaHdfZXJyb3JzOwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4oJmFtcDtscC0mZ3Q7aHdfc3RhdHNfc2VxY291bnQpOwomIzQzOwkJc3RhdHMtJmd0O3J4X2NyY19lcnJvcnMgPSBscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9CQURfRkNTXTsKJiM0MzsJCS8qIEJvdGggaW4tcmFuZ2UgbGVuZ3RoIGVycm9ycyBhbmQgZnJhbWUtdG9vLWxvbmcgKG92ZXJzaXplKQomIzQzOwkJICogZnJhbWVzIGFyZSBJRUVFIDgwMi4zIGxlbmd0aCBlcnJvcnMsIHNvIGZvbGQgdGhlbSB0b2dldGhlcgomIzQzOwkJICogaW50byByeF9sZW5ndGhfZXJyb3JzOyByeF9vdmVyX2Vycm9ycyBpcyByZXNlcnZlZCBmb3IgcmVjZWl2ZXIKJiM0MzsJCSAqIEZJRk8vcmluZyBvdmVyZmxvdywgd2hpY2ggdGhlIFhYViBNQUMgZG9lcyBub3QgZXhwb3NlLgomIzQzOwkJICovCiYjNDM7CQlzdGF0cy0mZ3Q7cnhfbGVuZ3RoX2Vycm9ycyA9CiYjNDM7CQkJbHAtJmd0O3h4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfSU5SQU5HRUVSUl0gJiM0MzsKJiM0MzsJCQlscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9PVkVSU0laRV07CiYjNDM7CQlzdGF0cy0mZ3Q7cnhfZXJyb3JzID0gbHAtJmd0O3h4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfVU5ERVJTSVpFXSAmIzQzOwomIzQzOwkJCQkgICBscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9GUkFHTUVOVF0gJiM0MzsKJiM0MzsJCQkJICAgbHAtJmd0O3h4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfSkFCQkVSXSAmIzQzOwomIzQzOwkJCQkgICBzdGF0cy0mZ3Q7cnhfY3JjX2Vycm9ycyAmIzQzOwomIzQzOwkJCQkgICBzdGF0cy0mZ3Q7cnhfbGVuZ3RoX2Vycm9yczsKJiM0MzsJCXN0YXRzLSZndDttdWx0aWNhc3QgPSBscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9NVUxUSUNBU1RdOwomIzQzOwkJdHhfaHdfZXJyb3JzID0gbHAtJmd0O3h4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfQkFEX0ZDU10gJiM0MzsKJiM0MzsJCQkgICAgICAgbHAtJmd0O3h4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfRlJBTUVfRVJST1JdOwomIzQzOwl9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KCZhbXA7bHAtJmd0O2h3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpOwomIzQzOwomIzQzOwkvKiBGb2xkIHRoZSBIVyBUWCBlcnJvciBjb3VudCBpbnRvIHRoZSBzb2Z0d2FyZSB0eF9lcnJvcnMgc2VlZGVkIGZyb20KJiM0MzsJICogZGV2LSZndDtzdGF0cyBieSB0aGUgY2FsbGVyLiBUaGUgWFhWIHhtaXQgcGF0aCBidW1wcyBkZXYtJmd0O3N0YXRzLnR4X2Vycm9ycwomIzQzOwkgKiBmb3IgZnJhbWVzIGRyb3BwZWQgb24gcGFkIGZhaWx1cmUgYmVmb3JlIHRoZXkgcmVhY2ggdGhlIE1BQywgd2hpbGUgdGhlCiYjNDM7CSAqIEhXIGNvdW50ZXJzIG9ubHkgY292ZXIgZnJhbWVzIHRoZSBNQUMgYWN0dWFsbHkgdHJhbnNtaXR0ZWQ7IHRoZSB0d28gYXJlCiYjNDM7CSAqIGRpc2pvaW50LiBUaGlzIHJ1bnMgb25jZSwgb3V0c2lkZSB0aGUgc2VxY291bnQgcmV0cnkgbG9vcCwgc28gYSByYWNpbmcKJiM0MzsJICogc3RhdHMgdXBkYXRlIGNhbm5vdCBtYWtlIHRoZSBhY2N1bXVsYXRpb24gcmUtYWRkIG9uIHJldHJ5LgomIzQzOwkgKi8KJiM0MzsJc3RhdHMtJmd0O3R4X2Vycm9ycyAmIzQzOz0gdHhfaHdfZXJyb3JzOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBheGllbmV0X3h4dl9nZXRfZXRodG9vbF9zdGF0cyAtIENvcHkgWFhWIGNvdW50ZXJzIGZvciBldGh0b29sIC1TCiYjNDM7ICogQGxwOiBQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZQomIzQzOyAqIEBkYXRhOiBPdXRwdXQgYnVmZmVyIHNpemVkIGZvciBBUlJBWV9TSVpFKGF4aWVuZXRfeHh2X3ByaXZfc3RhdHMpIHU2NCB2YWx1ZXMKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsIHU2NCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpLCBzdGFydDsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJc3RhcnQgPSByZWFkX3NlcWNvdW50X2JlZ2luKCZhbXA7bHAtJmd0O2h3X3N0YXRzX3NlcWNvdW50KTsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGF4aWVuZXRfeHh2X3ByaXZfc3RhdHMpOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlkYXRhW2ldID0gbHAtJmd0O3h4dl9zdGF0X2Jhc2VbYXhpZW5ldF94eHZfcHJpdl9zdGF0c1tpXV07CiYjNDM7CX0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoJmFtcDtscC0mZ3Q7aHdfc3RhdHNfc2VxY291bnQsIHN0YXJ0KSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGF4aWVuZXRfeHh2X2dldF9zdHJpbmdzIC0gQ29weSBYWFYgZXRodG9vbCBzdGF0aXN0aWNzIG5hbWUgc3RyaW5ncwomIzQzOyAqIEBkYXRhOiBPdXRwdXQgYnVmZmVyIGZvciB0aGUgc3RhdGlzdGljcyBuYW1lIHN0cmluZ3MKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfc3RyaW5ncyh1OCAqZGF0YSkKJiM0Mzt7CiYjNDM7CW1lbWNweShkYXRhLCBheGllbmV0X3h4dl9ldGh0b29sX3N0YXRzX3N0cmluZ3MsCiYjNDM7CSAgICAgICBzaXplb2YoYXhpZW5ldF94eHZfZXRodG9vbF9zdGF0c19zdHJpbmdzKSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGF4aWVuZXRfeHh2X2dldF9zc2V0X2NvdW50IC0gTnVtYmVyIG9mIFhYViBldGh0b29sIHN0YXRpc3RpY3MKJiM0MzsgKgomIzQzOyAqIFJldHVybjogQ291bnQgb2YgWFhWIGhhcmR3YXJlIHN0YXRpc3RpY3MgcmVwb3J0ZWQgdmlhIGV0aHRvb2wgLVMuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBheGllbmV0X3h4dl9nZXRfc3NldF9jb3VudCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIEFSUkFZX1NJWkUoYXhpZW5ldF94eHZfZXRodG9vbF9zdGF0c19zdHJpbmdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYXhpZW5ldF94eHZfZ2V0X3BhdXNlX3N0YXRzIC0gRmlsbCBldGh0b29sIHBhdXNlIGZyYW1lIHN0YXRpc3RpY3MKJiM0MzsgKiBAbHA6IFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlCiYjNDM7ICogQHBhdXNlX3N0YXRzOiBPdXRwdXQgZXRodG9vbF9wYXVzZV9zdGF0cyBzdHJ1Y3R1cmUgdG8gcG9wdWxhdGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLAomIzQzOwkJCQkJc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHN0YXJ0OwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4oJmFtcDtscC0mZ3Q7aHdfc3RhdHNfc2VxY291bnQpOwomIzQzOwkJcGF1c2Vfc3RhdHMtJmd0O3R4X3BhdXNlX2ZyYW1lcyA9CiYjNDM7CQkJbHAtJmd0O3h4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfUEFVU0VdOwomIzQzOwkJcGF1c2Vfc3RhdHMtJmd0O3J4X3BhdXNlX2ZyYW1lcyA9CiYjNDM7CQkJbHAtJmd0O3h4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfUEFVU0VdOwomIzQzOwl9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KCZhbXA7bHAtJmd0O2h3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBheGllbmV0X3h4dl9nZXRfZXRoX21hY19zdGF0cyAtIEZpbGwgSUVFRSA4MDIuMyBNQUMgc3RhdGlzdGljcwomIzQzOyAqIEBscDogUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmUKJiM0MzsgKiBAbWFjX3N0YXRzOiBPdXRwdXQgZXRodG9vbF9ldGhfbWFjX3N0YXRzIHN0cnVjdHVyZSB0byBwb3B1bGF0ZQomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfeHh2X2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwKJiM0MzsJCQkJCSAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHN0YXJ0OwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4oJmFtcDtscC0mZ3Q7aHdfc3RhdHNfc2VxY291bnQpOwomIzQzOwkJbWFjX3N0YXRzLSZndDtGcmFtZXNUcmFuc21pdHRlZE9LID0KJiM0MzsJCQlscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9UWF9UT1RBTF9HT09EX1BBQ0tFVFNdOwomIzQzOwkJbWFjX3N0YXRzLSZndDtGcmFtZXNSZWNlaXZlZE9LID0KJiM0MzsJCQlscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9UT1RBTF9HT09EX1BBQ0tFVFNdOwomIzQzOwkJbWFjX3N0YXRzLSZndDtPY3RldHNUcmFuc21pdHRlZE9LID0KJiM0MzsJCQlscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9UWF9UT1RBTF9HT09EX0JZVEVTXTsKJiM0MzsJCW1hY19zdGF0cy0mZ3Q7T2N0ZXRzUmVjZWl2ZWRPSyA9CiYjNDM7CQkJbHAtJmd0O3h4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9CWVRFU107CiYjNDM7CQltYWNfc3RhdHMtJmd0O0ZyYW1lQ2hlY2tTZXF1ZW5jZUVycm9ycyA9CiYjNDM7CQkJbHAtJmd0O3h4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfQkFEX0ZDU107CiYjNDM7CQltYWNfc3RhdHMtJmd0O011bHRpY2FzdEZyYW1lc1htaXR0ZWRPSyA9CiYjNDM7CQkJbHAtJmd0O3h4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfTVVMVElDQVNUXTsKJiM0MzsJCW1hY19zdGF0cy0mZ3Q7QnJvYWRjYXN0RnJhbWVzWG1pdHRlZE9LID0KJiM0MzsJCQlscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9UWF9CUk9BRENBU1RdOwomIzQzOwkJbWFjX3N0YXRzLSZndDtNdWx0aWNhc3RGcmFtZXNSZWNlaXZlZE9LID0KJiM0MzsJCQlscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9NVUxUSUNBU1RdOwomIzQzOwkJbWFjX3N0YXRzLSZndDtCcm9hZGNhc3RGcmFtZXNSZWNlaXZlZE9LID0KJiM0MzsJCQlscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9CUk9BRENBU1RdOwomIzQzOwkJbWFjX3N0YXRzLSZndDtJblJhbmdlTGVuZ3RoRXJyb3JzID0KJiM0MzsJCQlscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9JTlJBTkdFRVJSXTsKJiM0MzsJfSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeSgmYW1wO2xwLSZndDtod19zdGF0c19zZXFjb3VudCwgc3RhcnQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYXhpZW5ldF94eHZfZ2V0X3Jtb25fc3RhdHMgLSBGaWxsIFJNT04gc3RhdGlzdGljcyBhbmQgaGlzdG9ncmFtIHJhbmdlcwomIzQzOyAqIEBscDogUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmUKJiM0MzsgKiBAcm1vbl9zdGF0czogT3V0cHV0IGV0aHRvb2xfcm1vbl9zdGF0cyBzdHJ1Y3R1cmUgdG8gcG9wdWxhdGUKJiM0MzsgKiBAcmFuZ2VzOiBTZXQgdG8gdGhlIFJNT04gaGlzdG9ncmFtIHJhbmdlIHRhYmxlCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF94eHZfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cywKJiM0MzsJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSAqKnJhbmdlcykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBzdGFydDsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJc3RhcnQgPSByZWFkX3NlcWNvdW50X2JlZ2luKCZhbXA7bHAtJmd0O2h3X3N0YXRzX3NlcWNvdW50KTsKJiM0MzsJCXJtb25fc3RhdHMtJmd0O3VuZGVyc2l6ZV9wa3RzID0KJiM0MzsJCQlscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9VTkRFUlNJWkVdOwomIzQzOwkJcm1vbl9zdGF0cy0mZ3Q7b3ZlcnNpemVfcGt0cyA9CiYjNDM7CQkJbHAtJmd0O3h4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfT1ZFUlNJWkVdOwomIzQzOwkJcm1vbl9zdGF0cy0mZ3Q7ZnJhZ21lbnRzID0KJiM0MzsJCQlscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9GUkFHTUVOVF07CiYjNDM7CQlybW9uX3N0YXRzLSZndDtqYWJiZXJzID0KJiM0MzsJCQlscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9KQUJCRVJdOwomIzQzOwl9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KCZhbXA7bHAtJmd0O2h3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpOwomIzQzOwomIzQzOwkvKiBYWFYgY3VycmVudGx5IGV4cG9zZXMgb25seSBhZ2dyZWdhdGUgUk1PTiBjb3VudGVycywgbm90IHBlci1iaW4KJiM0MzsJICogaGlzdG9ncmFtIGJ1Y2tldHMuIEtlZXAgcmFuZ2VzIE5VTEwgdW50aWwgaGlzdG9ncmFtIGJpbnMgYXJlIHdpcmVkLgomIzQzOwkgKi8KJiM0MzsJKnJhbmdlcyA9IE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBheGllbmV0X2NvbmZpZyBheGllbmV0XzEwZzI1Z19jb25maWcgPSB7CiYjNDM7CS5zd19wYWRkaW5nID0gdHJ1ZSwKJiM0MzsJLmludGVybmFsX3BjcyA9IHRydWUsCiYjNDM7CS5yZWdzX24gPSBYWFZfUkVHU19OLAomIzQzOwkuY2xrX2luaXQgPSBheGllbmV0XzEwZzI1Z19jbGtfaW5pdCwKJiM0MzsJLnNldG9wdGlvbnMgPSBheGllbmV0X3h4dl9zZXRvcHRpb25zLAomIzQzOwkucHJvYmVfaW5pdCA9IGF4aWVuZXRfeHh2X3Byb2JlX2luaXQsCiYjNDM7CS5ndF9yZXNldCA9IGF4aWVuZXRfeHh2X2d0X3Jlc2V0LAomIzQzOwkubWFjX2luaXQgPSBheGllbmV0X3h4dl9tYWNfaW5pdCwKJiM0MzsJLmdldF9yZWdzID0gYXhpZW5ldF94eHZfZ2V0X3JlZ3MsCiYjNDM7CS5waHlsaW5rX3NldF9jYXBzID0gYXhpZW5ldF94eHZfcGh5bGlua19zZXRfY2FwYWJpbGl0aWVzLAomIzQzOwkucGNzX29wcyA9ICZhbXA7YXhpZW5ldF94eHZfcGNzX29wcywKJiM0MzsJLnN0YXRzX3VwZGF0ZSA9IGF4aWVuZXRfeHh2X3N0YXRzX3VwZGF0ZSwKJiM0MzsJLmdldF9zdGF0czY0ID0gYXhpZW5ldF94eHZfZ2V0X3N0YXRzNjQsCiYjNDM7CS5nZXRfZXRodG9vbF9zdGF0cyA9IGF4aWVuZXRfeHh2X2dldF9ldGh0b29sX3N0YXRzLAomIzQzOwkuZ2V0X3N0cmluZ3MgPSBheGllbmV0X3h4dl9nZXRfc3RyaW5ncywKJiM0MzsJLmdldF9zc2V0X2NvdW50ID0gYXhpZW5ldF94eHZfZ2V0X3NzZXRfY291bnQsCiYjNDM7CS5nZXRfcGF1c2Vfc3RhdHMgPSBheGllbmV0X3h4dl9nZXRfcGF1c2Vfc3RhdHMsCiYjNDM7CS5nZXRfZXRoX21hY19zdGF0cyA9IGF4aWVuZXRfeHh2X2dldF9ldGhfbWFjX3N0YXRzLAomIzQzOwkuZ2V0X3Jtb25fc3RhdHMgPSBheGllbmV0X3h4dl9nZXRfcm1vbl9zdGF0cywKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X3h4di5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X3h4di5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmViZmE3ZDU3YTg1OTEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfeHh2LmgKQEAgLTAsMCAmIzQzOzEsMTQxIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwomIzQzOy8qCiYjNDM7ICogWFhWICgxMEcvMjVHKSBzdXBwb3J0CiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgWElMSU5YX0FYSUVORVRfWFhWX0gKJiM0MzsjZGVmaW5lIFhJTElOWF9BWElFTkVUX1hYVl9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdHMuaCZndDsKJiM0MzsKJiM0MztzdHJ1Y3QgYXhpZW5ldF9sb2NhbDsKJiM0MztzdHJ1Y3QgYXhpZW5ldF9jb25maWc7CiYjNDM7CiYjNDM7I2RlZmluZSBYWFZfUkVHU19OCQk0NgomIzQzOwomIzQzOy8qIFhYViBNQUMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KJiM0MzsjZGVmaW5lIFhYVl9HVF9SRVNFVF9PRkZTRVQJCTB4MDAwMDAwMDAKJiM0MzsjZGVmaW5lIFhYVl9SRVNFVF9PRkZTRVQJCTB4MDAwMDAwMDQKJiM0MzsjZGVmaW5lIFhYVl9NT0RFX09GRlNFVAkJCTB4MDAwMDAwMDgKJiM0MzsjZGVmaW5lIFhYVl9UQ19PRkZTRVQJCQkweDAwMDAwMDBDCiYjNDM7I2RlZmluZSBYWFZfUkNXMV9PRkZTRVQJCQkweDAwMDAwMDE0CiYjNDM7I2RlZmluZSBYWFZfSlVNX09GRlNFVAkJCTB4MDAwMDAwMTgKJiM0MzsjZGVmaW5lIFhYVl9WTF9MRU5HVEhfT0ZGU0VUCQkweDAwMDAwMDFDCiYjNDM7I2RlZmluZSBYWFZfVElDS1JFR19PRkZTRVQJCTB4MDAwMDAwMjAKJiM0MzsjZGVmaW5lIFhYVl9DT05GSUdfUkVWSVNJT04JCTB4MDAwMDAwMjQKJiM0MzsjZGVmaW5lIFhYVl9DT05GSUdfMTU4OF9PRkZTRVQJCTB4MDAwMDAwMzgKJiM0MzsjZGVmaW5lIFhYVl9DT05GSUdfVFhfRkxPV19DVFJMMV9PRkZTRVQJMHgwMDAwMDA0MAomIzQzOyNkZWZpbmUgWFhWX0NPTkZJR19SWF9GTE9XX0NUUkwxX09GRlNFVAkweDAwMDAwMDk0CiYjNDM7I2RlZmluZSBYWFZfQ09ORklHX1JYX0ZMT1dfQ1RSTDJfT0ZGU0VUCTB4MDAwMDAwOTgKJiM0MzsjZGVmaW5lIFhYVl9DT05GSUdfUlNGRUNfT0ZGU0VUCQkweDAwMDAwMEQwCiYjNDM7I2RlZmluZSBYWFZfQ09ORklHX0ZFQ19PRkZTRVQJCTB4MDAwMDAwRDQKJiM0MzsjZGVmaW5lIFhYVl9BTl9DVEwxX09GRlNFVAkJMHgwMDAwMDBFMAomIzQzOyNkZWZpbmUgWFhWX0FOX0NUTDJfT0ZGU0VUCQkweDAwMDAwMEU0CiYjNDM7I2RlZmluZSBYWFZfQU5fQUJJTElUWV9PRkZTRVQJCTB4MDAwMDAwRjgKJiM0MzsjZGVmaW5lIFhYVl9MVF9DVEwxX09GRlNFVAkJMHgwMDAwMDEwMAomIzQzOyNkZWZpbmUgWFhWX1NXSVRDSF9DT1JFX1NQRUVEX09GRlNFVAkweDAwMDAwMTM4CiYjNDM7I2RlZmluZSBYWFZfQ09ORklHXzE1ODhfMzJCSVRfT0ZGU0VUCTB4MDAwMDAxM0MKJiM0MzsjZGVmaW5lIFhYVl9UWF9DT05GSUdfMTU4OF9PRkZTRVQJMHgwMDAwMDE0MAomIzQzOyNkZWZpbmUgWFhWX1JYX0NPTkZJR18xNTg4X09GRlNFVAkweDAwMDAwMTQ0CiYjNDM7I2RlZmluZSBYWFZfR1RXSVpfQ1RSTF9PRkZTRVQJCTB4MDAwMDAxNTQKJiM0MzsjZGVmaW5lIFhYVl9TVEFUUlhfU1RBVFVTMF9PRkZTRVQJMHgwMDAwMDQwMAomIzQzOyNkZWZpbmUgWFhWX1JYX1NUQVRVU19SRUcxCQkweDAwMDAwNDA0CiYjNDM7I2RlZmluZSBYWFZfU1RBVFJYX1NUQVRVUzJfT0ZGU0VUCTB4MDAwMDA0MDgKJiM0MzsjZGVmaW5lIFhYVl9TVEFUUlhfQkxLTENLX09GRlNFVAkweDAwMDAwNDBDCiYjNDM7I2RlZmluZSBYWFZfU1RBVF9SWF9SU0ZFQ19TVEFUVVNfT0ZGU0VUCTB4MDAwMDA0M0MKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX0ZFQ19TVEFUVVNfT0ZGU0VUCTB4MDAwMDA0NDgKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1RYX1JTRkVDX1NUQVRVU19PRkZTRVQJMHgwMDAwMDQ0QwomIzQzOyNkZWZpbmUgWFhWX1NUQVRfVFhfRkxPV19DVFJMMV9PRkZTRVQJMHgwMDAwMDQ1MAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfRkxPV19DVFJMMV9PRkZTRVQJMHgwMDAwMDQ1NAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfQU5fU1RTX09GRlNFVAkJMHgwMDAwMDQ1OAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfQU5fTFBfU1RBVFVTX09GRlNFVAkweDAwMDAwNDVDCiYjNDM7I2RlZmluZSBYWFZfU1RBVF9BTl9MSU5LX0NUTF9PRkZTRVQJMHgwMDAwMDQ2MAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfTFRfU1RBVFVTMV9PRkZTRVQJMHgwMDAwMDQ2NAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfTFRfU1RBVFVTMl9PRkZTRVQJMHgwMDAwMDQ2OAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfTFRfU1RBVFVTM19PRkZTRVQJMHgwMDAwMDQ2QwomIzQzOyNkZWZpbmUgWFhWX1NUQVRfTFRfU1RBVFVTNF9PRkZTRVQJMHgwMDAwMDQ3MAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfTFRfQ09FRkYwX09GRlNFVAkweDAwMDAwNDc0CiYjNDM7I2RlZmluZSBYWFZfU1RBVF9SWF9WQUxJRF9DVFJMX0NPREVfT0ZGU0VUCTB4MDAwMDA0OTQKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX0NPUkVfU1BFRURfT0ZGU0VUCTB4MDAwMDA0OTgKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1RTTl9PRkZTRVQJCTB4MDAwMDA0OUMKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX0dUV0laX09GRlNFVAkJMHgwMDAwMDRBMAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfQU5fTElOS19DVEwyX09GRlNFVAkweDAwMDAwOUYwCiYjNDM7CiYjNDM7LyogWFhWIHN0YXRpc3RpY3MgY291bnRlciByZWdpc3RlcnMgKFBHMjEwKS4gRWFjaCBjb3VudGVyIGlzIGEgcGFpciBvZiAzMi1iaXQKJiM0MzsgKiByZWdpc3RlcnM7IHRoZSBNU0IgcmVnaXN0ZXIgaXMgWFhWX1NUQVRfTVNCX09GRlNFVCBieXRlcyBhYm92ZSB0aGUgTFNCLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgWFhWX1NUQVRfTVNCX09GRlNFVAkJCTQKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1RYX0ZSQU1FX0VSUk9SX09GRlNFVAkJMHgwMDAwMDZBMAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfVFhfVE9UQUxfUEFDS0VUU19PRkZTRVQJMHgwMDAwMDcwMAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9QQUNLRVRTX09GRlNFVAkweDAwMDAwNzA4CiYjNDM7I2RlZmluZSBYWFZfU1RBVF9UWF9UT1RBTF9CWVRFU19PRkZTRVQJCTB4MDAwMDA3MTAKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1RYX1RPVEFMX0dPT0RfQllURVNfT0ZGU0VUCTB4MDAwMDA3MTgKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1RYX0JBRF9GQ1NfT0ZGU0VUCQkweDAwMDAwN0I4CiYjNDM7I2RlZmluZSBYWFZfU1RBVF9UWF9NVUxUSUNBU1RfT0ZGU0VUCQkweDAwMDAwN0Q4CiYjNDM7I2RlZmluZSBYWFZfU1RBVF9UWF9CUk9BRENBU1RfT0ZGU0VUCQkweDAwMDAwN0UwCiYjNDM7I2RlZmluZSBYWFZfU1RBVF9UWF9QQVVTRV9PRkZTRVQJCTB4MDAwMDA3RjAKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX1RPVEFMX1BBQ0tFVFNfT0ZGU0VUCTB4MDAwMDA4MDgKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX1RPVEFMX0dPT0RfUEFDS0VUU19PRkZTRVQJMHgwMDAwMDgxMAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfVE9UQUxfQllURVNfT0ZGU0VUCQkweDAwMDAwODE4CiYjNDM7I2RlZmluZSBYWFZfU1RBVF9SWF9UT1RBTF9HT09EX0JZVEVTX09GRlNFVAkweDAwMDAwODIwCiYjNDM7I2RlZmluZSBYWFZfU1RBVF9SWF9VTkRFUlNJWkVfT0ZGU0VUCQkweDAwMDAwODk4CiYjNDM7I2RlZmluZSBYWFZfU1RBVF9SWF9GUkFHTUVOVF9PRkZTRVQJCTB4MDAwMDA4QTAKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX09WRVJTSVpFX09GRlNFVAkJMHgwMDAwMDhBOAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfSkFCQkVSX09GRlNFVAkJMHgwMDAwMDhCOAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfQkFEX0ZDU19PRkZTRVQJCTB4MDAwMDA4QzAKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX01VTFRJQ0FTVF9PRkZTRVQJCTB4MDAwMDA4RTAKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX0JST0FEQ0FTVF9PRkZTRVQJCTB4MDAwMDA4RTgKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX1BBVVNFX09GRlNFVAkJMHgwMDAwMDhGOAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfSU5SQU5HRUVSUl9PRkZTRVQJCTB4MDAwMDA5MDgKJiM0MzsKJiM0MzsvKiBYWFYgTUFDIFJlZ2lzdGVyIE1hc2sgRGVmaW5pdGlvbnMgKi8KJiM0MzsjZGVmaW5lIFhYVl9HVF9SRVNFVF9NQVNLCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFhYVl9UQ19UWF9NQVNLCQkJQklUKDApCiYjNDM7I2RlZmluZSBYWFZfUkNXMV9SWF9NQVNLCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFhYVl9SQ1cxX0ZDU19NQVNLCQlCSVQoMSkKJiM0MzsjZGVmaW5lIFhYVl9UQ19GQ1NfTUFTSwkJCUJJVCgxKQomIzQzOyNkZWZpbmUgWFhWX1JYX0JMS0xDS19NQVNLCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFhYVl9USUNLUkVHX1NUQVRFTl9NQVNLCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFhYVl9HVFdJWl9SRVNFVF9ET05FCQkoQklUKDApIHwgQklUKDEpKQomIzQzOyNkZWZpbmUgWFhWX01BSl9NQVNLCQkJR0VOTUFTSyg3LCAwKQomIzQzOyNkZWZpbmUgWFhWX01JTl9NQVNLCQkJR0VOTUFTSygxNSwgOCkKJiM0MzsvKiBJUCB2My4yJiM0MzsgZXhwb3NlcyBHVCB3aXphcmQgc3RhdHVzIGJlZm9yZSBvdGhlciByZWdpc3RlciBhY2Nlc3MgKFBHMjEwKS4gKi8KJiM0MzsjZGVmaW5lIFhYVl9JUF9WRVJfR1RXSVpfTUFKX01JTgkzCiYjNDM7I2RlZmluZSBYWFZfSVBfVkVSX0dUV0laX01JTl9NSU4JMgomIzQzOyNkZWZpbmUgWFhWX0FOX0NPTVBMRVRFX01BU0sJCUJJVCgyKQomIzQzOyNkZWZpbmUgWFhWX1NUQVRfQ09SRV9TUEVFRF9SVFNXX01BU0sJQklUKDEpCiYjNDM7I2RlZmluZSBYWFZfU1RBVF9DT1JFX1NQRUVEXzEwR19NQVNLCUJJVCgwKQomIzQzOyNkZWZpbmUgWFhWX1JYX1NUQVRVU19NQVNLCQlCSVQoMCkKJiM0MzsKJiM0MzsvKiBYWFYgKDEwRy8yNUcpIE1BQyBzdGF0aXN0aWNzIGNvdW50ZXJzLCB1c2VkIHRvIGluZGV4IHh4dl9zdGF0X2Jhc2VbXS4gKi8KJiM0MztlbnVtIHh4dl9zdGF0IHsKJiM0MzsJWFhWX1NUQVRfUlhfVE9UQUxfUEFDS0VUUyA9IDAsCiYjNDM7CVhYVl9TVEFUX1JYX1RPVEFMX0dPT0RfUEFDS0VUUywKJiM0MzsJWFhWX1NUQVRfUlhfVE9UQUxfQllURVMsCiYjNDM7CVhYVl9TVEFUX1JYX1RPVEFMX0dPT0RfQllURVMsCiYjNDM7CVhYVl9TVEFUX1JYX0JBRF9GQ1MsCiYjNDM7CVhYVl9TVEFUX1JYX0lOUkFOR0VFUlIsCiYjNDM7CVhYVl9TVEFUX1JYX01VTFRJQ0FTVCwKJiM0MzsJWFhWX1NUQVRfUlhfQlJPQURDQVNULAomIzQzOwlYWFZfU1RBVF9SWF9VTkRFUlNJWkUsCiYjNDM7CVhYVl9TVEFUX1JYX0ZSQUdNRU5ULAomIzQzOwlYWFZfU1RBVF9SWF9KQUJCRVIsCiYjNDM7CVhYVl9TVEFUX1JYX09WRVJTSVpFLAomIzQzOwlYWFZfU1RBVF9SWF9QQVVTRSwKJiM0MzsJWFhWX1NUQVRfVFhfVE9UQUxfUEFDS0VUUywKJiM0MzsJWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9QQUNLRVRTLAomIzQzOwlYWFZfU1RBVF9UWF9UT1RBTF9CWVRFUywKJiM0MzsJWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9CWVRFUywKJiM0MzsJWFhWX1NUQVRfVFhfQkFEX0ZDUywKJiM0MzsJWFhWX1NUQVRfVFhfRlJBTUVfRVJST1IsCiYjNDM7CVhYVl9TVEFUX1RYX01VTFRJQ0FTVCwKJiM0MzsJWFhWX1NUQVRfVFhfQlJPQURDQVNULAomIzQzOwlYWFZfU1RBVF9UWF9QQVVTRSwKJiM0MzsJWFhWX1NUQVRfQ09VTlQsCiYjNDM7fTsKJiM0MzsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGF4aWVuZXRfY29uZmlnIGF4aWVuZXRfMTBnMjVnX2NvbmZpZzsKJiM0MzsKJiM0MzsjZW5kaWYgLyogWElMSU5YX0FYSUVORVRfWFhWX0ggKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5NTMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0OTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBYaWxpbnggWFhWIEV0aGVybmV0IERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBicmVhayBkb3duIHRoZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFhpbGlueCBYWFYgMTBHLzI1RyBFdGhlcm5ldCBTdWJzeXN0ZW0gdG8gdGhlIGV4aXN0aW5nIGB4aWxpbnhfYXhpZW5ldGAgZHJpdmVyLiBJIHNlZSB0aGUgdXN1YWwgc3VzcGVjdHM6IGRldmljZSB0cmVlIGJpbmRpbmdzLCB0aGUgTUFJTlRBSU5FUlMgZmlsZSwgdGhlIE1ha2VmaWxlLCBhbmQgdGhlIHJlbGV2YW50IEMgYW5kIGhlYWRlciBmaWxlcyDigJMgc3BlY2lmaWNhbGx5IGB4aWxpbnhfYXhpZW5ldF9tYWluLmNgLCBgeGlsaW54X2F4aWVuZXRfeHh2LmNgLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgaGVhZGVyIGZpbGVzLgoKTm93LCBiZWZvcmUgSSBnbyB0b28gZGVlcCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGhhcmR3YXJlIGltcGxpY2F0aW9ucy4gV2hhdCBpcyBgQ09ORklHX1hJTElOWF9BWElfRU1BQ2A/IElzIGl0IGFuIE9GIG9yIHBsYXRmb3JtIGRyaXZlciBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIFhpbGlueCBGUEdBcyBvciBTb0NzIOKAkyB0aGluayBNaWNyb0JsYXplLCBaeW5xLCBaeW5xTVAsIG9yIGV2ZW4gVmVyc2FsPyBUaGlzIGlzIGNyaXRpY2FsLiBDYW4gSSBhY3R1YWxseSB0ZXN0IHRoaXMgaW4gUUVNVSBvciBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBvciBkb2VzIGl0IHJlcXVpcmUgZGVkaWNhdGVkIEZQR0EgaGFyZHdhcmU/CgpBaCwgcmlnaHQsIGtlcm5lbCBndWlkZWxpbmVzLi4uIEkgbmVlZCB0byBjb25zaWRlciB3aGV0aGVyIHRoaXMgcGF0Y2ggaXMgJiMzNDt3b3J0aCBmdXp6aW5nJiMzNDsuIFRoZSBndWlkZWxpbmVzIHNwZWNpZnkgdGhhdCBpZiB0aGUgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgdGhlbiBpdCBzaG91bGQgcmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZS4gQWxzbywgdGhlIHNhbWUgZ29lcyBmb3IgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoL1NtYXJ0TklDL0dQVSBkcml2ZXJzLiBTaW5jZSB0aGlzIGlzIFhpbGlueC1zcGVjaWZpYywgSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLgoKU28sIGxldCYjMzk7cyBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgb2YgYENPTkZJR19YSUxJTlhfQVhJX0VNQUNgIGFuZCBob3cgaXQmIzM5O3MgZGVmaW5lZC4gRG9lcyBzdGFuZGFyZCBRRU1VIGV2ZW4gZW11bGF0ZSBYaWxpbnggQVhJIEV0aGVybmV0PyBJcyBpdCBhbiBPRiBwbGF0Zm9ybSBkcml2ZXIgcHJpbWFyaWx5IHVzZWQgb24gbm9uLXg4NiBhcmNoaXRlY3R1cmVzLCBsaWtlIEFSTSBvciBNaWNyb0JsYXplPyBJJiMzOTtsbCBxdWlja2x5IHVzZSBncmVwcGVyIHRvIGV4YW1pbmUgdGhlIEtjb25maWcgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiYjMzk7cyBzcGVjaWZpY3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFhJTElOWF9BWElfRU1BQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvS2NvbmZpZz0xOT1jb25maWcgWElMSU5YX0VNQUNMSVRFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWctMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvS2NvbmZpZzoyNjpjb25maWcgWElMSU5YX0FYSV9FTUFDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvS2NvbmZpZy0yNy1cdHRyaXN0YXRlIFwmIzM0O1hpbGlueCAxMC8xMDAvMTAwMCBBWEkgRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDQxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IEtjb25maWcgZmlsZToKCioqRGl2aW5nIGludG8gdGhlIFhpbGlueCBFdGhlcm5ldCBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gaHViIGZvciBhbGwgdGhlIFhpbGlueCBFdGhlcm5ldCBkZXZpY2UgZHJpdmVycy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHZhcmlvdXMgZmVhdHVyZXMgYW5kIGhhcmR3YXJlIHZhcmlhdGlvbnMgYXJlIGV4cG9zZWQgdG8gdGhlIHVzZXIgZHVyaW5nIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBwcm9jZXNzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBkZWZhdWx0IHZhbHVlcywgYW5kIHRoZSBoZWxwIHRleHQg4oCTIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgc3RvcnkgbGllcy4KCkZpcnN0IHRoaW5nJiMzOTtzIGZpcnN0LCBJJiMzOTtsbCBzY2FuIGZvciB0aGUgbWFpbiBkcml2ZXIgZW50cnksIHVzdWFsbHkgc29tZXRoaW5nIGxpa2UgYENPTkZJR19YSUxJTlhfRU1BQ2Agb3IgYENPTkZJR19YSUxJTlhfR01BQ2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwcmltYXJ5IGRyaXZlciBhbmQgaG93IGl0cyBtb2R1bGFyIGRlc2lnbiB3b3Jrcy4gVGhlbiBJJiMzOTtsbCBxdWlja2x5IGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBibG9ja3MgaXQmIzM5O3MgbWVhbnQgdG8gc3VwcG9ydCDigJMgYXJlIHdlIHRhbGtpbmcgYWJvdXQgWnlucSwgVmVyc2FsLCBvciBvbGRlciBwbGF0Zm9ybXM/IEFyZSB0aGVyZSBtdWx0aXBsZSBFTUFDIGRldmljZXMgdGhhdCBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5IG9yIGNvbWJpbmVkPyBBcmUgdGhlcmUgYW55IFNvQy1zcGVjaWZpYyBvcHRpb25zIHRoYXQgY29udHJvbCB0aGluZ3MgbGlrZSBETUEgZW5naW5lcywgUEhZIHNlbGVjdGlvbiwgb3IgTURJTyBjb25maWd1cmF0aW9uPwoKSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGhvdyB0aGVzZSBLY29uZmlnIG9wdGlvbnMgbWFwIHRvIHNwZWNpZmljIFhpbGlueCBoYXJkd2FyZSBmZWF0dXJlcy4gQXJlIHRoZXJlIG9wdGlvbnMgZm9yIGVuYWJsaW5nIGp1bWJvIGZyYW1lcywgY2hlY2tzdW0gb2ZmbG9hZCwgZmxvdyBjb250cm9sLCBvciBvdGhlciBvZmZsb2FkaW5nIGZlYXR1cmVzPyBBcmUgdGhlcmUgcGxhdGZvcm0tc3BlY2lmaWMgZGVwZW5kZW5jaWVzPyBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgY2hvaWNlcyBhZmZlY3QgcGVyZm9ybWFuY2UgYW5kIHBvd2VyIGNvbnN1bXB0aW9uLiBGb3IgZXhhbXBsZSwgc29tZSBkZXZpY2VzIG1pZ2h0IHJlcXVpcmUgc3BlY2lmaWMgY2xvY2sgY29uZmlndXJhdGlvbnMgb3IgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzLCBhbmQgSSYjMzk7bGwgc2VlIGhvdyB0aG9zZSBhcmUgY29udHJvbGxlZCBoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSBhcmNoaXRlY3R1cmUgb3IgYm9hcmQtc3BlY2lmaWMgb3B0aW9ucywgYXMgd2VsbCBhcyBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGRyaXZlcnMgb3Iga2VybmVsIHN1YnN5c3RlbXMuCgpGaW5hbGx5LCBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMg4oCTIGBpZmAgc3RhdGVtZW50cyBhbmQgdGhlIGxpa2UuIFRoYXTigJlzIGhvdyBJIGdldCB0byB0aGUgcmVhbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXZpY2UtZHJpdmVyIGNvbmZpZ3VyYXRpb24uIENvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBhcmUgaG93IHdlIG1ha2UgdGhlIGRldmljZSBkcml2ZXIgZmxleGlibGUgZW5vdWdoIHRvIHN1cHBvcnQgdGhlIGRpZmZlcmVudCBYaWxpbnggU29Dcy4gQWxzbywgSSYjMzk7bGwgbG9vayBmb3IgYW55IGBzZWxlY3RgIHN0YXRlbWVudHMgdGhhdCBhdXRvbWF0aWNhbGx5IHB1bGwgaW4gb3RoZXIgbW9kdWxlcy4gQW5kLCBvZiBjb3Vyc2UsIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IG9idmlvdXMgdHlwb3Mgb3IgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gdHJhcHMgdGhhdCBtaWdodCBsZWFkIHRvIGJ1aWxkIGVycm9ycyBvciwgd29yc2UsIHJ1bnRpbWUgaXNzdWVzLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGNvbmZpZyBpcyBjbGVhbiBhbmQgdW5kZXJzdGFuZGFibGUuIFdpdGggbHVjaywgdGhpcyBLY29uZmlnIHdpbGwgYmUgd2VsbC1zdHJ1Y3R1cmVkLCBlYXN5IHRvIGZvbGxvdywgYW5kIHByb3ZpZGUgZ29vZCwgaGVscGZ1bCBkb2N1bWVudGF0aW9uIHdpdGhpbiBpdHMgaGVscCB0ZXh0LiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgWGlsaW54IGRldmljZSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBORVRfVkVORE9SX1hJTElOWFxuICAgNzpcdFx0Ym9vbCBcJiMzNDtYaWxpbnggZGV2aWNlc1wmIzM0O1xuICAgODpcdFx0ZGVmYXVsdCB5XG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxuICAxMTpcdFxuICAxMjpcdFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiAgMTM6XHRcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxuICAxNDpcdFx0ICB0aGUgcXVlc3Rpb25zIGFib3V0IFhpbGlueCBkZXZpY2VzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkXG4gIDE1Olx0XHQgIGZvciB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4gIDE2Olx0XG4gIDE3Olx0aWYgTkVUX1ZFTkRPUl9YSUxJTlhcbiAgMTg6XHRcbiAgMTk6XHRjb25maWcgWElMSU5YX0VNQUNMSVRFXG4gIDIwOlx0XHR0cmlzdGF0ZSBcJiMzNDtYaWxpbnggMTAvMTAwIEV0aGVybmV0IExpdGUgc3VwcG9ydFwmIzM0O1xuICAyMTpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cbiAgMjI6XHRcdHNlbGVjdCBQSFlMSUJcbiAgMjM6XHRcdGhlbHBcbiAgMjQ6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIDEwLzEwMCBFdGhlcm5ldCBMaXRlIGZyb20gWGlsaW54LlxuICAyNTpcdFxuICAyNjpcdGNvbmZpZyBYSUxJTlhfQVhJX0VNQUNcbiAgMjc6XHRcdHRyaXN0YXRlIFwmIzM0O1hpbGlueCAxMC8xMDAvMTAwMCBBWEkgRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuICAyODpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cbiAgMjk6XHRcdGRlcGVuZHMgb24gWElMSU5YX0RNQVxuICAzMDpcdFx0c2VsZWN0IFBIWUxJTktcbiAgMzE6XHRcdHNlbGVjdCBESU1MSUJcbiAgMzI6XHRcdGhlbHBcbiAgMzM6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIDEwLzEwMC8xMDAwIEV0aGVybmV0IGZyb20gWGlsaW54IGZvciB0aGVcbiAgMzQ6XHRcdCAgQVhJIGJ1cyBpbnRlcmZhY2UgdXNlZCBpbiBYaWxpbnggVmlydGV4IEZQR0FzIGFuZCBTb2MmIzM5O3MuXG4gIDM1Olx0XG4gIDM2Olx0Y29uZmlnIFhJTElOWF9MTF9URU1BQ1xuICAzNzpcdFx0dHJpc3RhdGUgXCYjMzQ7WGlsaW54IExMIFRFTUFDIChMb2NhbExpbmsgVHJpLW1vZGUgRXRoZXJuZXQgTUFDKSBkcml2ZXJcJiMzNDtcbiAgMzg6XHRcdGRlcGVuZHMgb24gSEFTX0lPTUVNXG4gIDM5Olx0XHRzZWxlY3QgUEhZTElCXG4gIDQwOlx0XHRoZWxwXG4gIDQxOlx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBYaWxpbnggMTAvMTAwLzEwMDAgTG9jYWxMaW5rIFRFTUFDXG4gIDQyOlx0XHQgIGNvcmUgdXNlZCBpbiBYaWxpbnggU3BhcnRhbiBhbmQgVmlydGV4IEZQR0FzXG4gIDQzOlx0XG4gIDQ0Olx0ZW5kaWYgIyBORVRfVkVORE9SX1hJTElOWFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjY1CgkJCQkJCQlvdXRwdXQ6IDExNgoJCQkJCQkJdGhvdWdodHM6IDI4MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFhpbGlueCBBWEkvWFhWIEV0aGVybmV0IERyaXZlciBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIFhpbGlueCBBWEkvWFhWIEV0aGVybmV0IGRyaXZlciwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogKlhJTElOWF9BWElfRU1BQyog4oCTIHRoYXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIsIG1hdGNoaW5nIHNwZWNpZmljIGRldmljZSB0cmVlIGNvbXBhdGlibGVzLiBXZSYjMzk7dmUgZ290ICYjMzQ7eGxueCxheGktZXRoZXJuZXQtMS4wMC5hJiMzNDssICYjMzQ7eGxueCxheGktZXRoZXJuZXQtMS4wMS5hJiMzNDssIGV0Yy4sIGFuZCBub3cgJiMzNDt4bG54LHh4di1ldGhlcm5ldC0xLjAmIzM0Oy4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uOiBkb2VzIFFFTVUgZXZlbiAqc3VwcG9ydCogdGhpcz8gSSByZWNhbGwgc29tZSBzdXBwb3J0IGZvciBYaWxpbnggTWljcm9CbGF6ZS9aeW5xLCBidXQgd2hhdCYjMzk7cyB0aGUgZXh0ZW50IG9mIHRoZSBlbXVsYXRpb24/ICpody9uZXQveGlsaW54X2F4aWVuZXQuYyogZXhpc3RzLCBidXQgZG9lcyBpdCBjb3ZlciB0aGUgWFhWIHZhcmlhbnQ/IE5vLCBYWFYgaXMgYSAxMEcvMjVHIElQIHN1YnN5c3RlbSwgYSBkaWZmZXJlbnQgYmVhc3QuCgpUaGUgcGF0Y2ggYXBwZWFycyB0byBiZSByZWZhY3RvcmluZyAqeGlsaW54X2F4aWVuZXRfbWFpbi5jKiwgcG90ZW50aWFsbHkgdG8gY3JlYXRlIGEgY29tbW9uIGxvZ2ljIGxheWVyIHVzaW5nICpscC0mZ3Q7YXhpZW5ldF9jb25maWcqIG9wcy4gSXQmIzM5O3MgdG91Y2hpbmcgZXhpc3RpbmcgMUcgcGF0aHMgbGlrZSBNQUMgYWRkcmVzcyBzZXR0aW5nLCBtdWx0aWNhc3QgbGlzdHMsIHN0YXRzIHVwZGF0ZXMsIGFuZCBhIGxvdCBvZiBpbml0aWFsaXphdGlvbi9yZXNldC9ETUEgZW5naW5lIGZ1bmN0aW9ucy4gQSBuZXcgZmlsZSwgKnhpbGlueF9heGllbmV0X3h4di5jKiwgaXMgYWRkZWQgZm9yIHRoZSAxMEcvMjVHIHN1YnN5c3RlbS4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlIGlzIGZ1enppbmcgcmVhY2hhYmlsaXR5LiBDYW4gdGhpcyAqeGlsaW54X2F4aWVuZXQqIGRyaXZlciBiZSBpbnN0YW50aWF0ZWQgaW4gZnV6emluZyBlbnZpcm9ubWVudHMsIGVzcGVjaWFsbHkgU3l6a2FsbGVyIGFuZCBRRU1VPyBTeXprYWxsZXIgcnVucyBvbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBWTXMuIENhbiBwbGF0Zm9ybSBkcml2ZXJzIGxpa2UgdGhpcyBvbmUgYmUgcmVhY2hlZCB3aXRob3V0IHZpcnR1YWwgZGV2aWNlcz8gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6ICpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlKiBpZiB0aGUgcGF0Y2ggaXM6CgotICAgRG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgb3IgY29tbWVudHMuCi0gICBEZWNvcmF0aXZlIGNoYW5nZXMuCi0gICBDb25zdGFudCBjaGFuZ2VzLgotICAgQ29kZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuCi0gICBWZW5kb3Itc3BlY2lmaWMgUENJZS9TbWFydE5JQy9HUFUgZHJpdmVycyByZXF1aXJpbmcgcGh5c2ljYWwgY2FyZHMgbm90IGVtdWxhdGVkIGluIFFFTVUuCi0gICBgLnJlbW92ZWAsIGAuc2h1dGRvd25gLCBvciBgcGNpX3VucmVnaXN0ZXJfZHJpdmVyYCBjYWxsYmFja3MuCgpJZiB0aGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCAqV29ydGhGdXp6aW5nPXRydWUqLiBTbywgY2FuICp4aWxpbnhfYXhpZW5ldCogYmUgbG9hZGVkL3Byb2JlZC9mdXp6ZWQgaW4gc3RhbmRhcmQgUUVNVSAoeDg2XzY0IG9yIGFybTY0KT8gVGhpcyBpcyBhbiBPRiBwbGF0Zm9ybSBkcml2ZXI7IGl0IHJlZ2lzdGVycyB3aXRoIGBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXJgIGFuZCBwcm9iZXMgdmlhIGRldmljZSB0cmVlIG1hdGNoZXMuIENhbiBTeXprYWxsZXIgcHJvYmUgcGxhdGZvcm0gZHJpdmVycyB2aWEgT0Ygb3ZlcmxheXM/IERvZXMgc3RhbmRhcmQgUUVNVSBoYXZlIGB4bG54LGF4aS1ldGhlcm5ldGAgaW4gaXRzIGRldmljZSB0cmVlPyAqTm8qLCB0aGUgc3RhbmRhcmQgUUVNVSBgdmlydGAgbWFjaGluZSBkb2VzbiYjMzk7dC4gWW91IG5lZWQgdGhlIGB4bG54LXpjdTEwMmAgb3IgYG1pY3JvYmxhemVgIFFFTVUgYm9hcmRzIGZvciB0aGF0LgoKVGhpcyBkcml2ZXIgaXMgZm9yICYjMzQ7WGlsaW54IDEwLzEwMC8xMDAwIEFYSSBFdGhlcm5ldCYjMzQ7IGFuZCAmIzM0O1hpbGlueCBYWFYgMTBHLzI1RyBFdGhlcm5ldCBTdWJzeXN0ZW0uJiMzNDsgVGhlc2UgYXJlIEZQR0EgSVAgY29yZXMgLyBTb0MgcGVyaXBoZXJhbCBibG9ja3Mgb24gWGlsaW54IEZQR0FzIGFuZCBTb0NzIChWaXJ0ZXgsIFp5bnEsIFp5bnFNUCwgVmVyc2FsKS4gVGhlICp4bG54LHh4di1ldGhlcm5ldC0xLjAqIHZhcmlhbnQgc3BlY2lmaWNhbGx5IHJlcXVpcmVzIGEgWGlsaW54IERNQSBjb250cm9sbGVyLiBJbiAqc3RhbmRhcmQqIFFFTVUvR0NFLCB0aGVyZSYjMzk7cyBubyBzdWNoIGhhcmR3YXJlLiBFdmVuIHdpdGggYW4gT0Ygb3ZlcmxheSBvciBwbGF0Zm9ybSBkZXZpY2UgY3JlYXRpb24sIGl0JiMzOTtzIHByb2JsZW1hdGljOiBgZGV2bV9wbGF0Zm9ybV9nZXRfYW5kX2lvcmVtYXBfcmVzb3VyY2VgLCBjbG9jayBpbml0aWFsaXphdGlvbiB2aWEgYGRldm1fY2xrX2dldF9lbmFibGVkYCwgRE1BIGVuZ2luZSBzZXR1cCAocmVxdWlyZXMgWGlsaW54IERNQSksIHJlZ2lzdGVyIHJlYWRzIOKAkyBhbGwgdGhlc2UgcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSBvciBhIG1vcmUgYWR2YW5jZWQgbGV2ZWwgb2YgaGFyZHdhcmUgZW11bGF0aW9uLgoKT2theSwgaXMgdGhlcmUgYW55IGNvcmUga2VybmVsIGNvZGUgbW9kaWZpZWQ/IExldCYjMzk7cyBjaGVjayB0aGUgZ2l0IGRpZmYgYWdhaW46IGl0JiMzOTtzIGFsbCBjb250YWluZWQgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvYCDigJMgZG9jcywgTWFrZWZpbGVzLCBoZWFkZXJzLCBhbmQgdGhlIGRyaXZlciBzb3VyY2UgZmlsZXMuIE5vIGNvcmUgbmV0d29ya2luZyBzdGFjayBmaWxlcyBvciBjb21tb24ga2VybmVsIGNvZGUgaXMgdG91Y2hlZC4KClRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgaXQgaXMgbm90IGZ1enplci13b3J0aHkuICp4aWxpbnhfYXhpZW5ldCogcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgb3IgYSBub24tc3RhbmRhcmQgUUVNVSBib2FyZCBhbmQgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgY2hhbmdlcyBhcmUgZW50aXJlbHkgd2l0aGluIHRoZSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyLgoKVGhlcmVmb3JlLCAqV29ydGhGdXp6aW5nKiBzaG91bGQgYmUgKmZhbHNlKi4KClRoZSBmaW5hbCBwYXJhbWV0ZXJzIHdpbGwgYmU6Ci0gICBgV29ydGhGdXp6aW5nYDogKmZhbHNlKgotICAgYFJlYXNvbmluZ2A6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIFhpbAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB2ZW5kb3Itc3BlY2lmaWMgWGlsaW54IEFYSSAvIFhYViBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC8pLCBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFhpbGlueCBYWFYgMTBHLzI1RyBFdGhlcm5ldCBTdWJzeXN0ZW0gRlBHQSBJUCBjb3JlLiBUaGlzIGhhcmR3YXJlIHJlcXVpcmVzIHBoeXNpY2FsIFhpbGlueC9BTUQgRlBHQS9Tb0MgaGFyZHdhcmUgYW5kIGNhbm5vdCBiZSByZWFjaGVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdmVuZG9yLXNwZWNpZmljIFhpbGlueCBBWEkgLyBYWFYgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvKSwgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBYaWxpbnggWFhWIDEwRy8yNUcgRXRoZXJuZXQgU3Vic3lzdGVtIEZQR0EgSVAgY29yZS4gVGhpcyBoYXJkd2FyZSByZXF1aXJlcyBwaHlzaWNhbCBYaWxpbngvQU1EIEZQR0EvU29DIGhhcmR3YXJlIGFuZCBjYW5ub3QgYmUgcmVhY2hlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjA3OjE0LjAyNjE1MDYzN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MjQ5NDM1MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdmVuZG9yLXNwZWNpZmljIFhpbGlueCBBWEkgLyBYWFYgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvKSwgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBYaWxpbnggWFhWIDEwRy8yNUcgRXRoZXJuZXQgU3Vic3lzdGVtIEZQR0EgSVAgY29yZS4gVGhpcyBoYXJkd2FyZSByZXF1aXJlcyBwaHlzaWNhbCBYaWxpbngvQU1EIEZQR0EvU29DIGhhcmR3YXJlIGFuZCBjYW5ub3QgYmUgcmVhY2hlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjA3OjE0LjAyNjE1NDkyN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ5MTk4MjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDVkNTAyZmMxOTI5ZjczZTBmZWI4MDczOWRiZGUzMmExNzY4ZDhjNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMjowNzoxMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3hsbngseHh2LWV0aGVybmV0LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3hsbngseHh2LWV0aGVybmV0LnlhbWxcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjJiZTNhZGUxMWQ0NjVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHh4di1ldGhlcm5ldC55YW1sXFxuQEAgLTAsMCArMSwxMDcgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQveGxueCx4eHYtZXRoZXJuZXQueWFtbCNcXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXFxuK1xcbit0aXRsZTogWGlsaW54IFhYViAxMEcvMjVHIEV0aGVybmV0IFN1YnN5c3RlbVxcbitcXG4rbWFpbnRhaW5lcnM6XFxuKyAgLSBSYWRoZXkgU2h5YW0gUGFuZGV5IFxcdTAwM2NyYWRoZXkuc2h5YW0ucGFuZGV5QGFtZC5jb21cXHUwMDNlXFxuKyAgLSBTdXJhaiBHdXB0YSBcXHUwMDNjc3VyYWouZ3VwdGEyQGFtZC5jb21cXHUwMDNlXFxuK1xcbitkZXNjcmlwdGlvbjpcXG4rICBUaGUgWGlsaW54IFhYViBFdGhlcm5ldCBTdWJzeXN0ZW0gaW1wbGVtZW50cyBhIDEwRy8yNUcgRXRoZXJuZXQgTUFDIHdpdGggYW5cXG4rICBpbi1jb3JlIFBDUy9QTUEgZHJpdmluZyBhIGhpZ2gtc3BlZWQgc2VyaWFsIHRyYW5zY2VpdmVyLiBJdCBzdXBwb3J0cyB0aGVcXG4rICAxMEdCQVNFLVIgYW5kIDI1R0JBU0UtUiBsaW5lIHJhdGVzLCB3aXRoIDI1RyBvcGVyYXRpb24gZm9sbG93aW5nIHRoZSAyNUdcXG4rICBFdGhlcm5ldCBDb25zb3J0aXVtIHNwZWNpZmljYXRpb24uIEl0IGhhcyBubyBleHRlcm5hbCBNRElPIFBIWSwgYW5kIGl0c1xcbisgIHBheWxvYWQgaXMgbW92ZWQgYnkgYW4gZXh0ZXJuYWwgQVhJIERNQSAob3IgbXVsdGljaGFubmVsIERNQSkgY29udHJvbGxlclxcbisgIHJlZmVyZW5jZWQgdGhyb3VnaCB0aGUgXFxcImRtYXNcXFwiIHByb3BlcnR5LlxcbitcXG4rcHJvcGVydGllczpcXG4rICBjb21wYXRpYmxlOlxcbisgICAgY29uc3Q6IHhsbngseHh2LWV0aGVybmV0LTEuMFxcbitcXG4rICByZWc6XFxuKyAgICBtYXhJdGVtczogMVxcbisgICAgZGVzY3JpcHRpb246IE1BQyBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXIgc3BhY2UuXFxuK1xcbisgIGNsb2NrczpcXG4rICAgIGl0ZW1zOlxcbisgICAgICAtIGRlc2NyaXB0aW9uOiBSWCBBWEk0LVN0cmVhbSBjbG9jay5cXG4rICAgICAgLSBkZXNjcmlwdGlvbjogR1QgRFJQIGNsb2NrLlxcbisgICAgICAtIGRlc2NyaXB0aW9uOiBBWEk0LUxpdGUgcmVnaXN0ZXIgY2xvY2suXFxuK1xcbisgIGNsb2NrLW5hbWVzOlxcbisgICAgaXRlbXM6XFxuKyAgICAgIC0gY29uc3Q6IHJ4X2NvcmVcXG4rICAgICAgLSBjb25zdDogZHJwXFxuKyAgICAgIC0gY29uc3Q6IHNfYXhpXFxuK1xcbisgIHBoeS1tb2RlOlxcbisgICAgZW51bTpcXG4rICAgICAgLSAxMGdiYXNlLXJcXG4rICAgICAgLSAyNWdiYXNlLXJcXG4rXFxuKyAgeGxueCxyeG1lbTpcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBTaXplIGluIGJ5dGVzIG9mIHRoZSBSeC9UeCBwYWNrZXQgYnVmZmVyIG1lbW9yeSBidWlsdCBpbnRvIHRoZSBJUC4gSXQgaXNcXG4rICAgICAgZml4ZWQgYnkgdGhlIGhhcmR3YXJlIGRlc2lnbiBhbmQgYm91bmRzIHRoZSBsYXJnZXN0IGZyYW1lIChqdW1ibyBNVFUpIHRoZVxcbisgICAgICBkZXZpY2UgY2FuIGFjY2VwdC5cXG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMlxcbitcXG4rICBkbWFzOlxcbisgICAgbWluSXRlbXM6IDJcXG4rICAgIG1heEl0ZW1zOiAzMlxcbisgICAgZGVzY3JpcHRpb246IFRYIGFuZCBSWCBETUEgY2hhbm5lbCBwaGFuZGxlLlxcbitcXG4rICBkbWEtbmFtZXM6XFxuKyAgICBpdGVtczpcXG4rICAgICAgcGF0dGVybjogXFxcIl5bdHJdeF9jaGFuKFswLTldfDFbMC01XSkkXFxcIlxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIFNob3VsZCBiZSBcXFwidHhfY2hhbjBcXFwiLCBcXFwidHhfY2hhbjFcXFwiIC4uLiBcXFwidHhfY2hhbjE1XFxcIiBmb3IgRE1BIFR4IGNoYW5uZWwgYW5kXFxuKyAgICAgIFxcXCJyeF9jaGFuMFxcXCIsIFxcXCJyeF9jaGFuMVxcXCIgLi4uIFxcXCJyeF9jaGFuMTVcXFwiIGZvciBETUEgUnggY2hhbm5lbC5cXG4rICAgIG1pbkl0ZW1zOiAyXFxuKyAgICBtYXhJdGVtczogMzJcXG4rXFxuK3JlcXVpcmVkOlxcbisgIC0gY29tcGF0aWJsZVxcbisgIC0gcmVnXFxuKyAgLSBjbG9ja3NcXG4rICAtIGNsb2NrLW5hbWVzXFxuKyAgLSBwaHktbW9kZVxcbisgIC0geGxueCxyeG1lbVxcbisgIC0gZG1hc1xcbisgIC0gZG1hLW5hbWVzXFxuK1xcbithbGxPZjpcXG4rICAtICRyZWY6IC9zY2hlbWFzL25ldC9ldGhlcm5ldC1jb250cm9sbGVyLnlhbWwjXFxuK1xcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbitleGFtcGxlczpcXG4rICAjIFNpbmdsZSBBWEkgRE1BIGNoYW5uZWwgcGFpclxcbisgIC0gfFxcbisgICAgZXRoZXJuZXRAODAwMDAwMDAge1xcbisgICAgICAgIGNvbXBhdGlibGUgPSBcXFwieGxueCx4eHYtZXRoZXJuZXQtMS4wXFxcIjtcXG4rICAgICAgICByZWcgPSBcXHUwMDNjMHg4MDAwMDAwMCAweDEwMDAwXFx1MDAzZTtcXG4rICAgICAgICBjbG9jay1uYW1lcyA9IFxcXCJyeF9jb3JlXFxcIiwgXFxcImRycFxcXCIsIFxcXCJzX2F4aVxcXCI7XFxuKyAgICAgICAgY2xvY2tzID0gXFx1MDAzY1xcdTAwMjZyeF9jbGtcXHUwMDNlLCBcXHUwMDNjXFx1MDAyNmRycF9jbGtcXHUwMDNlLCBcXHUwMDNjXFx1MDAyNmF4aV9jbGtcXHUwMDNlO1xcbisgICAgICAgIGRtYS1uYW1lcyA9IFxcXCJ0eF9jaGFuMFxcXCIsIFxcXCJyeF9jaGFuMFxcXCI7XFxuKyAgICAgICAgZG1hcyA9IFxcdTAwM2NcXHUwMDI2YXhpX2RtYSAwXFx1MDAzZSwgXFx1MDAzY1xcdTAwMjZheGlfZG1hIDFcXHUwMDNlO1xcbisgICAgICAgIHBoeS1tb2RlID0gXFxcIjI1Z2Jhc2UtclxcXCI7XFxuKyAgICAgICAgeGxueCxyeG1lbSA9IFxcdTAwM2MweDgwMDBcXHUwMDNlO1xcbisgICAgfTtcXG4rICAjIE11bHRpY2hhbm5lbCBETUEgKE1DRE1BKSB3aXRoIG11bHRpcGxlIFR4L1J4IGNoYW5uZWxzXFxuKyAgLSB8XFxuKyAgICBldGhlcm5ldEA4MDAxMDAwMCB7XFxuKyAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJ4bG54LHh4di1ldGhlcm5ldC0xLjBcXFwiO1xcbisgICAgICAgIHJlZyA9IFxcdTAwM2MweDgwMDEwMDAwIDB4MTAwMDBcXHUwMDNlO1xcbisgICAgICAgIGNsb2NrLW5hbWVzID0gXFxcInJ4X2NvcmVcXFwiLCBcXFwiZHJwXFxcIiwgXFxcInNfYXhpXFxcIjtcXG4rICAgICAgICBjbG9ja3MgPSBcXHUwMDNjXFx1MDAyNnJ4X2Nsa1xcdTAwM2UsIFxcdTAwM2NcXHUwMDI2ZHJwX2Nsa1xcdTAwM2UsIFxcdTAwM2NcXHUwMDI2YXhpX2Nsa1xcdTAwM2U7XFxuKyAgICAgICAgZG1hLW5hbWVzID0gXFxcInR4X2NoYW4wXFxcIiwgXFxcInR4X2NoYW4xXFxcIiwgXFxcInJ4X2NoYW4wXFxcIiwgXFxcInJ4X2NoYW4xXFxcIjtcXG4rICAgICAgICBkbWFzID0gXFx1MDAzY1xcdTAwMjZheGlfbWNkbWEgMFxcdTAwM2UsIFxcdTAwM2NcXHUwMDI2YXhpX21jZG1hIDFcXHUwMDNlLFxcbisgICAgICAgICAgICAgICBcXHUwMDNjXFx1MDAyNmF4aV9tY2RtYSAxNlxcdTAwM2UsIFxcdTAwM2NcXHUwMDI2YXhpX21jZG1hIDE3XFx1MDAzZTtcXG4rICAgICAgICBwaHktbW9kZSA9IFxcXCIxMGdiYXNlLXJcXFwiO1xcbisgICAgICAgIHhsbngscnhtZW0gPSBcXHUwMDNjMHg4MDAwXFx1MDAzZTtcXG4rICAgIH07XFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCAwYjQyZTg5OGY0ZDhlLi40ZWRjOGE3MzA0ZGIwIDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMjk4NjEsNiArMjk4NjEsNyBAQCBYSUxJTlggQVhJIEVUSEVSTkVUIERSSVZFUlxcbiBNOlxcdFJhZGhleSBTaHlhbSBQYW5kZXkgXFx1MDAzY3JhZGhleS5zaHlhbS5wYW5kZXlAYW1kLmNvbVxcdTAwM2VcXG4gUzpcXHRNYWludGFpbmVkXFxuIEY6XFx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LGF4aS1ldGhlcm5ldC55YW1sXFxuK0Y6XFx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHh4di1ldGhlcm5ldC55YW1sXFxuIEY6XFx0ZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0KlxcbiBcXG4gWElMSU5YIENBTiBEUklWRVJcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L01ha2VmaWxlXFxuaW5kZXggN2Q3ZGMxNzcxNDIzZS4uZGI5MGU2OTFmZWM1OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvTWFrZWZpbGVcXG5AQCAtNiw1ICs2LDYgQEBcXG4gbGxfdGVtYWMtb2JqcyA6PSBsbF90ZW1hY19tYWluLm8gbGxfdGVtYWNfbWRpby5vXFxuIG9iai0kKENPTkZJR19YSUxJTlhfTExfVEVNQUMpICs9IGxsX3RlbWFjLm9cXG4gb2JqLSQoQ09ORklHX1hJTElOWF9FTUFDTElURSkgKz0geGlsaW54X2VtYWNsaXRlLm9cXG4teGlsaW54X2VtYWMtb2JqcyA6PSB4aWxpbnhfYXhpZW5ldF9tYWluLm8geGlsaW54X2F4aWVuZXRfbWRpby5vXFxuK3hpbGlueF9lbWFjLW9ianMgOj0geGlsaW54X2F4aWVuZXRfbWFpbi5vIHhpbGlueF9heGllbmV0X21kaW8ubyBcXFxcXFxuK1xcdFxcdCAgICB4aWxpbnhfYXhpZW5ldF94eHYub1xcbiBvYmotJChDT05GSUdfWElMSU5YX0FYSV9FTUFDKSArPSB4aWxpbnhfZW1hYy5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0LmhcXG5pbmRleCBmY2QzYWFlZjI3ZmMzLi4yZWEwODZmYzRkYzM2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0LmhcXG5AQCAtMTAsNiArMTAsNyBAQFxcbiAjZGVmaW5lIFhJTElOWF9BWElFTkVUX0hcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kaW0uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aHRvb2wuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpbmxvY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXFx1MDAzZVxcbkBAIC0xNyw2ICsxOCw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHlsaW5rLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gXFxuKyNpbmNsdWRlIFxcXCJ4aWxpbnhfYXhpZW5ldF94eHYuaFxcXCJcXG4rXFxuIC8qIFBhY2tldCBzaXplIGluZm8gKi9cXG4gI2RlZmluZSBYQUVfSERSX1NJWkVcXHRcXHRcXHQxNCAvKiBTaXplIG9mIEV0aGVybmV0IGhlYWRlciAqL1xcbiAjZGVmaW5lIFhBRV9UUkxfU0laRVxcdFxcdFxcdCA0IC8qIFNpemUgb2YgRXRoZXJuZXQgdHJhaWxlciAoRkNTKSAqL1xcbkBAIC01NDUsNiArNTQ4LDkgQEAgc3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yIHtcXG4gICogQHR4X3JpbmdfdGFpbDogVFggc2tiIHJpbmcgYnVmZmVyIHRhaWwgaW5kZXguXFxuICAqIEByeF9yaW5nX2hlYWQ6IFJYIHNrYiByaW5nIGJ1ZmZlciBoZWFkIGluZGV4LlxcbiAgKiBAcnhfcmluZ190YWlsOiBSWCBza2IgcmluZyBidWZmZXIgdGFpbCBpbmRleC5cXG4rICogQHh4dl9pcF92ZXJzaW9uOiBYWFYgSVAgdmVyc2lvbi5cXG4rICogQHh4dl9zdGF0X2Jhc2U6IFNvZnR3YXJlIGFjY3VtdWxhdG9ycyBmb3IgdGhlIFhYViBjbGVhci1vbi10aWNrIGNvdW50ZXJzLlxcbisgKiBAYXhpZW5ldF9jb25maWc6IE1BQy10eXBlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gYW5kIG9wZXJhdGlvbnMuXFxuICAqL1xcbiBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCB7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xcbkBAIC01OTgsNiArNjA0LDcgQEAgc3RydWN0IGF4aWVuZXRfbG9jYWwge1xcbiBcXG4gXFx0dTY0IGh3X3N0YXRfYmFzZVtTVEFUX0NPVU5UXTtcXG4gXFx0dTMyIGh3X2xhc3RfY291bnRlcltTVEFUX0NPVU5UXTtcXG4rXFx0dTY0IHh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfQ09VTlRdO1xcbiBcXHRzZXFjb3VudF9tdXRleF90IGh3X3N0YXRzX3NlcWNvdW50O1xcbiBcXHRzdHJ1Y3QgbXV0ZXggc3RhdHNfbG9jaztcXG4gXFx0c3RydWN0IGRlbGF5ZWRfd29yayBzdGF0c193b3JrO1xcbkBAIC02MjYsOCArNjMzLDg4IEBAIHN0cnVjdCBheGllbmV0X2xvY2FsIHtcXG4gXFx0aW50IHR4X3JpbmdfdGFpbDtcXG4gXFx0aW50IHJ4X3JpbmdfaGVhZDtcXG4gXFx0aW50IHJ4X3JpbmdfdGFpbDtcXG4rXFx0dTMyIHh4dl9pcF92ZXJzaW9uO1xcbitcXHRjb25zdCBzdHJ1Y3QgYXhpZW5ldF9jb25maWcgKmF4aWVuZXRfY29uZmlnO1xcbiB9O1xcbiBcXG4rLyoqXFxuKyAqIHN0cnVjdCBheGllbmV0X2NvbmZpZyAtIE1BQy10eXBlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gYW5kIG9wZXJhdGlvbnNcXG4rICogQG1kaW86IE1BQyBoYXMgYW4gTURJTyBidXMgZm9yIGV4dGVybmFsIFBIWSBtYW5hZ2VtZW50XFxuKyAqIEBtYWNfaXJxOiBNQUMgaGFzIGEgZGVkaWNhdGVkIGNvcmUgaW50ZXJydXB0XFxuKyAqIEBsZWdhY3lfZG1hOiBNQUMgc3VwcG9ydHMgdGhlIGxlZ2FjeSAobm9uLWRtYWVuZ2luZSkgRE1BIG1vZGVcXG4rICogQHVjX2ZpbHRlcjogTUFDIGhhcyB1bmljYXN0IGFkZHJlc3MgZmlsdGVyIHJlZ2lzdGVyc1xcbisgKiBAbWNfZmlsdGVyOiBNQUMgaGFzIG11bHRpY2FzdCBhZGRyZXNzIGZpbHRlciByZWdpc3RlcnNcXG4rICogQHZsYW46IE1BQyBzdXBwb3J0cyBWTEFOIGZyYW1lcyBieSBkZWZhdWx0XFxuKyAqIEBqdW1ibzogTUFDIHN1cHBvcnRzIGp1bWJvIGZyYW1lc1xcbisgKiBAZG1hX3R4X2NzdW06IE1BQyBzdXBwb3J0cyBUWCBjaGVja3N1bSBvZmZsb2FkXFxuKyAqIEBzd19wYWRkaW5nOiBTaG9ydCBmcmFtZXMgbXVzdCBiZSBwYWRkZWQgaW4gc29mdHdhcmUgYmVmb3JlIHRyYW5zbWl0XFxuKyAqIEBpbnRlcm5hbF9wY3M6IE1BQyBhbHdheXMgZHJpdmVzIGFuIGludGVybmFsIFBDU1xcbisgKiBAcmVnc19uOiBOdW1iZXIgb2YgTUFDIHJlZ2lzdGVycyBleHBvc2VkIHRocm91Z2ggZXRodG9vbCAtZFxcbisgKiBAY2xrX2luaXQ6IENhbGxiYWNrIHRvIGdldCBhbmQgZW5hYmxlIHRoZSBNQUMtc3BlY2lmaWMgY2xvY2tzXFxuKyAqIEBzZXRvcHRpb25zOiBDYWxsYmFjayB0byBwcm9ncmFtIE1BQyBoYXJkd2FyZSBvcHRpb25zXFxuKyAqIEBwcm9iZV9pbml0OiBDYWxsYmFjayBmb3IgTUFDLXNwZWNpZmljIHByb2JlLXRpbWUgaW5pdCwgb3IgTlVMTCBpZiB1bnVzZWRcXG4rICogQGd0X3Jlc2V0OiBDYWxsYmFjayB0byByZXNldCB0aGUgc2VyaWFsIHRyYW5zY2VpdmVyIChHVCksIG9yIE5VTEwgaWYgdW51c2VkXFxuKyAqIEBtYWNfaW5pdDogQ2FsbGJhY2sgZm9yIE1BQy1zcGVjaWZpYyBicmluZy11cCBhZnRlciB0aGUgRE1BIHJlc2V0XFxuKyAqIEBtYWNfbGlua191cDogQ2FsbGJhY2sgdG8gcHJvZ3JhbSBsaW5rIHNwZWVkIGFuZCBwYXVzZSBvbiBsaW5rIHVwLCBvciBOVUxMXFxuKyAqIEBnZXRfcmVnczogQ2FsbGJhY2sgdG8gZHVtcCB0aGUgTUFDIHJlZ2lzdGVycyBmb3IgZXRodG9vbCAtZFxcbisgKiBAcGh5bGlua19zZXRfY2FwczogQ2FsbGJhY2sgdG8gc2V0IHBoeWxpbmsgTUFDIGNhcGFiaWxpdGllc1xcbisgKiBAcGNzX29wczogcGh5bGluayBQQ1Mgb3BlcmF0aW9ucyBmb3IgdGhpcyBNQUMsIG9yIE5VTEwgaWYgdW51c2VkXFxuKyAqIEBzdGF0c191cGRhdGU6IENhbGxiYWNrIHRvIGxhdGNoL2FjY3VtdWxhdGUgdGhlIHBlcmlvZGljIE1BQyBjb3VudGVyc1xcbisgKiBAZ2V0X3N0YXRzNjQ6IENhbGxiYWNrIHRvIHJlYWQgTUFDIGNvdW50ZXJzIGludG8gcnRubF9saW5rX3N0YXRzNjRcXG4rICogQGdldF9ldGh0b29sX3N0YXRzOiBDYWxsYmFjayB0byByZWFkIE1BQyBjb3VudGVycyBmb3IgZXRodG9vbCAtU1xcbisgKiBAZ2V0X3N0cmluZ3M6IENhbGxiYWNrIHRvIGZpbGwgdGhlIGV0aHRvb2wgLVMgc3RhdGlzdGljIG5hbWUgc3RyaW5nc1xcbisgKiBAZ2V0X3NzZXRfY291bnQ6IENhbGxiYWNrIHJldHVybmluZyB0aGUgbnVtYmVyIG9mIGV0aHRvb2wgLVMgc3RhdGlzdGljc1xcbisgKiBAZ2V0X3BhdXNlX3N0YXRzOiBDYWxsYmFjayB0byByZWFkIE1BQyBwYXVzZS1mcmFtZSBjb3VudGVyc1xcbisgKiBAZ2V0X2V0aF9tYWNfc3RhdHM6IENhbGxiYWNrIHRvIHJlYWQgSUVFRSA4MDIuMyBNQUMgY291bnRlcnNcXG4rICogQGdldF9ldGhfY3RybF9zdGF0czogQ2FsbGJhY2sgdG8gcmVhZCBNQUMtY29udHJvbCBmcmFtZSBjb3VudGVycywgb3IgTlVMTFxcbisgKlxcdFxcdFxcdGlmIHRoZSBNQUMgZXhwb3NlcyBubyBjb250cm9sLWZyYW1lIGNvdW50ZXJzXFxuKyAqIEBnZXRfcm1vbl9zdGF0czogQ2FsbGJhY2sgdG8gcmVhZCBSTU9OIGNvdW50ZXJzIGFuZCBoaXN0b2dyYW0gcmFuZ2VzXFxuKyAqL1xcbitzdHJ1Y3QgYXhpZW5ldF9jb25maWcge1xcbitcXHRib29sIG1kaW87XFxuK1xcdGJvb2wgbWFjX2lycTtcXG4rXFx0Ym9vbCBsZWdhY3lfZG1hO1xcbitcXHRib29sIHVjX2ZpbHRlcjtcXG4rXFx0Ym9vbCBtY19maWx0ZXI7XFxuK1xcdGJvb2wgdmxhbjtcXG4rXFx0Ym9vbCBqdW1ibztcXG4rXFx0Ym9vbCBkbWFfdHhfY3N1bTtcXG4rXFx0Ym9vbCBzd19wYWRkaW5nO1xcbitcXHRib29sIGludGVybmFsX3BjcztcXG4rXFx0dW5zaWduZWQgaW50IHJlZ3NfbjtcXG4rXFx0aW50ICgqY2xrX2luaXQpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCk7XFxuK1xcdHZvaWQgKCpzZXRvcHRpb25zKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIG9wdGlvbnMpO1xcbitcXHR2b2lkICgqcHJvYmVfaW5pdCkoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKTtcXG4rXFx0dm9pZCAoKmd0X3Jlc2V0KShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApO1xcbitcXHRpbnQgKCptYWNfaW5pdCkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbitcXHR2b2lkICgqbWFjX2xpbmtfdXApKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgc3BlZWQsXFxuK1xcdFxcdFxcdCAgICBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKTtcXG4rXFx0dm9pZCAoKmdldF9yZWdzKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsIHUzMiAqZGF0YSk7XFxuK1xcdHZvaWQgKCpwaHlsaW5rX3NldF9jYXBzKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyk7XFxuK1xcdGNvbnN0IHN0cnVjdCBwaHlsaW5rX3Bjc19vcHMgKnBjc19vcHM7XFxuK1xcdHZvaWQgKCpzdGF0c191cGRhdGUpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCk7XFxuK1xcdHZvaWQgKCpnZXRfc3RhdHM2NCkoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cyk7XFxuK1xcdHZvaWQgKCpnZXRfZXRodG9vbF9zdGF0cykoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLCB1NjQgKmRhdGEpO1xcbitcXHR2b2lkICgqZ2V0X3N0cmluZ3MpKHU4ICpkYXRhKTtcXG4rXFx0aW50ICgqZ2V0X3NzZXRfY291bnQpKHZvaWQpO1xcbitcXHR2b2lkICgqZ2V0X3BhdXNlX3N0YXRzKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cyk7XFxuK1xcdHZvaWQgKCpnZXRfZXRoX21hY19zdGF0cykoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cyk7XFxuK1xcdHZvaWQgKCpnZXRfZXRoX2N0cmxfc3RhdHMpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGV0aHRvb2xfZXRoX2N0cmxfc3RhdHMgKmN0cmxfc3RhdHMpO1xcbitcXHR2b2lkICgqZ2V0X3Jtb25fc3RhdHMpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBldGh0b29sX3Jtb25fc3RhdHMgKnJtb25fc3RhdHMsXFxuK1xcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpO1xcbit9O1xcbitcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqcGNzX3RvX2F4aWVuZXRfbG9jYWwoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpXFxuK3tcXG4rXFx0cmV0dXJuIGNvbnRhaW5lcl9vZihwY3MsIHN0cnVjdCBheGllbmV0X2xvY2FsLCBwY3MpO1xcbit9XFxuK1xcbiAvKipcXG4gICogc3RydWN0IGF4aWVuZXRfb3B0aW9uIC0gVXNlZCB0byBzZXQgYXhpIGV0aGVybmV0IGhhcmR3YXJlIG9wdGlvbnNcXG4gICogQG9wdDpcXHRPcHRpb24gdG8gYmUgc2V0LlxcbkBAIC03NDEsNCArODI4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGF4aWVuZXRfZG1hX291dF9hZGRyKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwgb2ZmX3QgcmVnLFxcbiBpbnQgYXhpZW5ldF9tZGlvX3NldHVwKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCk7XFxuIHZvaWQgYXhpZW5ldF9tZGlvX3RlYXJkb3duKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCk7XFxuIFxcbisvKiBSTU9OIGhpc3RvZ3JhbSByYW5nZXMgc2hhcmVkIGJ5IGFsbCBNQUMgdHlwZXMgKi9cXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSBheGllbmV0X3Jtb25fcmFuZ2VzW107XFxuK1xcbiAjZW5kaWYgLyogWElMSU5YX0FYSV9FTkVUX0ggKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmNcXG5pbmRleCAxNzIyYjcwMzhmMzQwLi41OGUyMmYwZmQ3Yzk1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jXFxuQEAgLTMzLDYgKzMzLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX2lycS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfYWRkcmVzcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tYXRoNjQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbkBAIC02NSwxNiArNjYsNiBAQFxcbiBcXG4gc3RhdGljIHZvaWQgYXhpZW5ldF9yeF9zdWJtaXRfZGVzYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XFxuIFxcbi0vKiBNYXRjaCB0YWJsZSBmb3Igb2ZfcGxhdGZvcm0gYmluZGluZyAqL1xcbi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBheGllbmV0X29mX21hdGNoW10gPSB7XFxuLVxcdHsgLmNvbXBhdGlibGUgPSBcXFwieGxueCxheGktZXRoZXJuZXQtMS4wMC5hXFxcIiwgfSxcXG4tXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJ4bG54LGF4aS1ldGhlcm5ldC0xLjAxLmFcXFwiLCB9LFxcbi1cXHR7IC5jb21wYXRpYmxlID0gXFxcInhsbngsYXhpLWV0aGVybmV0LTIuMDEuYVxcXCIsIH0sXFxuLVxcdHt9LFxcbi19O1xcbi1cXG4tTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXhpZW5ldF9vZl9tYXRjaCk7XFxuLVxcbiAvKiBPcHRpb24gdGFibGUgZm9yIHNldHRpbmcgdXAgQXhpIEV0aGVybmV0IGhhcmR3YXJlIG9wdGlvbnMgKi9cXG4gc3RhdGljIHN0cnVjdCBheGllbmV0X29wdGlvbiBheGllbmV0X29wdGlvbnNbXSA9IHtcXG4gXFx0LyogVHVybiBvbiBqdW1ibyBwYWNrZXQgc3VwcG9ydCBmb3IgYm90aCBSeCBhbmQgVHggKi9cXG5AQCAtNDE5LDYgKzQxMCw5IEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmRldi1cXHUwMDNlZGV2X2FkZHIpKVxcbiBcXHRcXHRldGhfaHdfYWRkcl9yYW5kb20obmRldik7XFxuIFxcbitcXHRpZiAoIWxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNldWNfZmlsdGVyKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHQvKiBTZXQgdXAgdW5pY2FzdCBNQUMgYWRkcmVzcyBmaWx0ZXIgc2V0IGl0cyBtYWMgYWRkcmVzcyAqL1xcbiBcXHRheGllbmV0X2lvdyhscCwgWEFFX1VBVzBfT0ZGU0VULFxcbiBcXHRcXHQgICAgKG5kZXYtXFx1MDAzZWRldl9hZGRyWzBdKSB8XFxuQEAgLTQ2OCw2ICs0NjIsOSBAQCBzdGF0aWMgdm9pZCBheGllbmV0X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0dTMyIHJlZywgYWYwcmVnLCBhZjFyZWc7XFxuIFxcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbiBcXG4rXFx0aWYgKCFscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZW1jX2ZpbHRlcilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0cmVnID0gYXhpZW5ldF9pb3IobHAsIFhBRV9GTUlfT0ZGU0VUKTtcXG4gXFx0cmVnIFxcdTAwMjY9IH5YQUVfRk1JX1BNX01BU0s7XFxuIFxcdGlmIChuZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9QUk9NSVNDKVxcbkBAIC01NzYsMTYgKzU3MywzMSBAQCBzdGF0aWMgdm9pZCBheGllbmV0X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsIGJvb2wgcmVzZXQpXFxuIFxcdHdyaXRlX3NlcWNvdW50X2VuZChcXHUwMDI2bHAtXFx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGF4aWVuZXRfMWdfc3RhdHNfdXBkYXRlIC0gUmVmcmVzaCAxRyBNQUMgaGFyZHdhcmUgc3RhdGlzdGljc1xcbisgKiBAbHA6XFx0XFx0UG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcXG4rICovXFxuK3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfc3RhdHNfdXBkYXRlKHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcXG4re1xcbitcXHRheGllbmV0X3N0YXRzX3VwZGF0ZShscCwgZmFsc2UpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBheGllbmV0X3JlZnJlc2hfc3RhdHMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiB7XFxuIFxcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0c3RhdHNfd29yay53b3JrKTtcXG4gXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNmxwLVxcdTAwM2VzdGF0c19sb2NrKTtcXG4tXFx0YXhpZW5ldF9zdGF0c191cGRhdGUobHAsIGZhbHNlKTtcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZscC1cXHUwMDNlc3RhdHNfbG9jayk7XFxuK1xcdGlmIChscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZXN0YXRzX3VwZGF0ZSkge1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZscC1cXHUwMDNlc3RhdHNfbG9jayk7XFxuK1xcdFxcdGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNlc3RhdHNfdXBkYXRlKGxwKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZscC1cXHUwMDNlc3RhdHNfbG9jayk7XFxuK1xcdH1cXG4gXFxuLVxcdC8qIEp1c3QgbGVzcyB0aGFuIDJeMzIgYnl0ZXMgYXQgMi41IEdCaXQvcyAqL1xcbitcXHQvKiBSZS1hcm0gdGhlIHBvbGwgYmVmb3JlIGFueSBjb3VudGVyIGNhbiBvdmVyZmxvdyBiZXR3ZWVuIHVwZGF0ZXM6IHRoZVxcbitcXHQgKiAxRyBieXRlIGNvdW50ZXIgcmVhY2hlcyBqdXN0IHVuZGVyIDJeMzIgaW4gdGhpcyBpbnRlcnZhbCBhdCAyLjUgR2JpdC9zLFxcbitcXHQgKiBhbmQgdGhlIFhYViBpbnRlcm5hbCBhY2N1bXVsYXRvcnMgbXVzdCBiZSBsYXRjaGVkICh2aWEgVElDSyBpblxcbitcXHQgKiBheGllbmV0X3h4dl9zdGF0c191cGRhdGUoKSkgYmVmb3JlIHRoZXkgc2F0dXJhdGUgYXQgbGluZSByYXRlLlxcbitcXHQgKi9cXG4gXFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZscC1cXHUwMDNlc3RhdHNfd29yaywgMTMgKiBIWik7XFxuIH1cXG4gXFxuQEAgLTU5NCw3ICs2MDYsMTYgQEAgc3RhdGljIGludCBfX2F4aWVuZXRfZGV2aWNlX3Jlc2V0KHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcXG4gXFx0dTMyIHZhbHVlO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0LyogU2F2ZSBzdGF0aXN0aWNzIGNvdW50ZXJzIGluIGNhc2UgdGhleSB3aWxsIGJlIHJlc2V0ICovXFxuK1xcdC8qIFNhdmUgc3RhdGlzdGljcyBjb3VudGVycyBpbiBjYXNlIHRoZXkgd2lsbCBiZSByZXNldC5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIFhBRV9GRUFUVVJFX1NUQVRTIGJsb2NrcyBpbiB0aGlzIGZ1bmN0aW9uIHJlYWQgdGhlIFRFTUFDXFxuK1xcdCAqIHN0YXRpc3RpY3MgcmVnaXN0ZXJzIGF0IFhBRV9TVEFUU19PRkZTRVQsIGkuZS4gdGhleSBhc3N1bWUgdGhlIDFHXFxuK1xcdCAqIGNvdW50ZXIgbGF5b3V0LiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBfX2F4aWVuZXRfZGV2aWNlX3Jlc2V0KCkgaXNcXG4rXFx0ICogb25seSByZWFjaGVkIG9uIHRoZSBsZWdhY3kgKG5vbi1kbWFlbmdpbmUpIERNQSBwYXRoLCB3aGljaCB0aGVcXG4rXFx0ICogbGVnYWN5X2RtYSBjYXBhYmlsaXR5IHJlc3RyaWN0cyB0byB0aGUgMUcgTUFDLiBNQUNzIHRoYXQgdXNlIHRoZWlyXFxuK1xcdCAqIG93biBzdGF0aXN0aWNzIG1lY2hhbmlzbSAoZS5nLiBYWFYsIHdoaWNoIGlzIGRtYWVuZ2luZS1vbmx5KSBuZXZlclxcbitcXHQgKiBleGVjdXRlIHRoaXMgcGF0aC5cXG4rXFx0ICovXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmxwLVxcdTAwM2VzdGF0c19sb2NrKTtcXG4gXFx0aWYgKGxwLVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IFhBRV9GRUFUVVJFX1NUQVRTKVxcbiBcXHRcXHRheGllbmV0X3N0YXRzX3VwZGF0ZShscCwgdHJ1ZSk7XFxuQEAgLTY5NCw2ICs3MTUsMzIgQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9kbWFfc3RvcChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApXFxuIFxcdGF4aWVuZXRfdW5sb2NrX21paShscCk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBheGllbmV0XzFnX21hY19pbml0IC0gMUcgTUFDLXNwZWNpZmljIGJyaW5nLXVwIGFmdGVyIHRoZSBETUEgcmVzZXRcXG4rICogQG5kZXY6XFx0UG9pbnRlciB0byB0aGUgbmV0X2RldmljZSBzdHJ1Y3R1cmVcXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIgb3RoZXJ3aXNlLlxcbisgKi9cXG4rc3RhdGljIGludCBheGllbmV0XzFnX21hY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXHR1MzIgYXhpZW5ldF9zdGF0dXM7XFxuK1xcbitcXHRheGllbmV0X3N0YXR1cyA9IGF4aWVuZXRfaW9yKGxwLCBYQUVfUkNXMV9PRkZTRVQpO1xcbitcXHRheGllbmV0X3N0YXR1cyBcXHUwMDI2PSB+WEFFX1JDVzFfUlhfTUFTSztcXG4rXFx0YXhpZW5ldF9pb3cobHAsIFhBRV9SQ1cxX09GRlNFVCwgYXhpZW5ldF9zdGF0dXMpO1xcbitcXG4rXFx0YXhpZW5ldF9zdGF0dXMgPSBheGllbmV0X2lvcihscCwgWEFFX0lQX09GRlNFVCk7XFxuK1xcdGlmIChheGllbmV0X3N0YXR1cyBcXHUwMDI2IFhBRV9JTlRfUlhSSkVDVF9NQVNLKVxcbitcXHRcXHRheGllbmV0X2lvdyhscCwgWEFFX0lTX09GRlNFVCwgWEFFX0lOVF9SWFJKRUNUX01BU0spO1xcbitcXHRheGllbmV0X2lvdyhscCwgWEFFX0lFX09GRlNFVCwgbHAtXFx1MDAzZWV0aF9pcnEgXFx1MDAzZSAwID9cXG4rXFx0XFx0ICAgIFhBRV9JTlRfUkVDVl9FUlJPUl9NQVNLIDogMCk7XFxuK1xcbitcXHRheGllbmV0X2lvdyhscCwgWEFFX0ZDQ19PRkZTRVQsIFhBRV9GQ0NfRkNSWF9NQVNLKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKipcXG4gICogYXhpZW5ldF9kZXZpY2VfcmVzZXQgLSBSZXNldCBhbmQgaW5pdGlhbGl6ZSB0aGUgQXhpIEV0aGVybmV0IGhhcmR3YXJlLlxcbiAgKiBAbmRldjpcXHRQb2ludGVyIHRvIHRoZSBuZXRfZGV2aWNlIHN0cnVjdHVyZVxcbkBAIC03MDksMTkgKzc1NiwyMyBAQCBzdGF0aWMgdm9pZCBheGllbmV0X2RtYV9zdG9wKHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcXG4gICovXFxuIHN0YXRpYyBpbnQgYXhpZW5ldF9kZXZpY2VfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIHtcXG4tXFx0dTMyIGF4aWVuZXRfc3RhdHVzO1xcbiBcXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4gXFx0aW50IHJldDtcXG4gXFxuK1xcdGlmIChscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZWd0X3Jlc2V0KVxcbitcXHRcXHRscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZWd0X3Jlc2V0KGxwKTtcXG4rXFxuIFxcdGxwLVxcdTAwM2VtYXhfZnJtX3NpemUgPSBYQUVfTUFYX1ZMQU5fRlJBTUVfU0laRTtcXG4tXFx0bHAtXFx1MDAzZW9wdGlvbnMgfD0gWEFFX09QVElPTl9WTEFOO1xcbitcXG4rXFx0aWYgKGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNldmxhbilcXG4rXFx0XFx0bHAtXFx1MDAzZW9wdGlvbnMgfD0gWEFFX09QVElPTl9WTEFOO1xcbiBcXHRscC1cXHUwMDNlb3B0aW9ucyBcXHUwMDI2PSAoflhBRV9PUFRJT05fSlVNQk8pO1xcbiBcXG4gXFx0aWYgKG5kZXYtXFx1MDAzZW10dSBcXHUwMDNlIFhBRV9NVFUgXFx1MDAyNlxcdTAwMjYgbmRldi1cXHUwMDNlbXR1IFxcdTAwM2M9IFhBRV9KVU1CT19NVFUpIHtcXG4gXFx0XFx0bHAtXFx1MDAzZW1heF9mcm1fc2l6ZSA9IG5kZXYtXFx1MDAzZW10dSArIFZMQU5fRVRIX0hMRU4gK1xcbiBcXHRcXHRcXHRcXHRcXHRYQUVfVFJMX1NJWkU7XFxuIFxcbi1cXHRcXHRpZiAobHAtXFx1MDAzZW1heF9mcm1fc2l6ZSBcXHUwMDNjPSBscC1cXHUwMDNlcnhtZW0pXFxuK1xcdFxcdGlmIChscC1cXHUwMDNlbWF4X2ZybV9zaXplIFxcdTAwM2M9IGxwLVxcdTAwM2VyeG1lbSBcXHUwMDI2XFx1MDAyNiBscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZWp1bWJvKVxcbiBcXHRcXHRcXHRscC1cXHUwMDNlb3B0aW9ucyB8PSBYQUVfT1BUSU9OX0pVTUJPO1xcbiBcXHR9XFxuIFxcbkBAIC03MzgsMjYgKzc4OSwxOCBAQCBzdGF0aWMgaW50IGF4aWVuZXRfZGV2aWNlX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGF4aWVuZXRfc3RhdHVzID0gYXhpZW5ldF9pb3IobHAsIFhBRV9SQ1cxX09GRlNFVCk7XFxuLVxcdGF4aWVuZXRfc3RhdHVzIFxcdTAwMjY9IH5YQUVfUkNXMV9SWF9NQVNLO1xcbi1cXHRheGllbmV0X2lvdyhscCwgWEFFX1JDVzFfT0ZGU0VULCBheGllbmV0X3N0YXR1cyk7XFxuLVxcbi1cXHRheGllbmV0X3N0YXR1cyA9IGF4aWVuZXRfaW9yKGxwLCBYQUVfSVBfT0ZGU0VUKTtcXG4tXFx0aWYgKGF4aWVuZXRfc3RhdHVzIFxcdTAwMjYgWEFFX0lOVF9SWFJKRUNUX01BU0spXFxuLVxcdFxcdGF4aWVuZXRfaW93KGxwLCBYQUVfSVNfT0ZGU0VULCBYQUVfSU5UX1JYUkpFQ1RfTUFTSyk7XFxuLVxcdGF4aWVuZXRfaW93KGxwLCBYQUVfSUVfT0ZGU0VULCBscC1cXHUwMDNlZXRoX2lycSBcXHUwMDNlIDAgP1xcbi1cXHRcXHQgICAgWEFFX0lOVF9SRUNWX0VSUk9SX01BU0sgOiAwKTtcXG4tXFxuLVxcdGF4aWVuZXRfaW93KGxwLCBYQUVfRkNDX09GRlNFVCwgWEFFX0ZDQ19GQ1JYX01BU0spO1xcbitcXHRyZXQgPSBscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZW1hY19pbml0KG5kZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0LyogU3luYyBkZWZhdWx0IG9wdGlvbnMgd2l0aCBIVyBidXQgbGVhdmUgcmVjZWl2ZXIgYW5kXFxuIFxcdCAqIHRyYW5zbWl0dGVyIGRpc2FibGVkLlxcbiBcXHQgKi9cXG4tXFx0YXhpZW5ldF9zZXRvcHRpb25zKG5kZXYsIGxwLVxcdTAwM2VvcHRpb25zIFxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgfihYQUVfT1BUSU9OX1RYRU4gfCBYQUVfT1BUSU9OX1JYRU4pKTtcXG4rXFx0bHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VzZXRvcHRpb25zKG5kZXYsIGxwLVxcdTAwM2VvcHRpb25zIFxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0ICAgICAgIH4oWEFFX09QVElPTl9UWEVOIHwgWEFFX09QVElPTl9SWEVOKSk7XFxuIFxcdGF4aWVuZXRfc2V0X21hY19hZGRyZXNzKG5kZXYsIE5VTEwpO1xcbiBcXHRheGllbmV0X3NldF9tdWx0aWNhc3RfbGlzdChuZGV2KTtcXG4tXFx0YXhpZW5ldF9zZXRvcHRpb25zKG5kZXYsIGxwLVxcdTAwM2VvcHRpb25zKTtcXG4rXFx0bHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VzZXRvcHRpb25zKG5kZXYsIGxwLVxcdTAwM2VvcHRpb25zKTtcXG4gXFxuIFxcdG5ldGlmX3RyYW5zX3VwZGF0ZShuZGV2KTtcXG4gXFxuQEAgLTkxNSw2ICs5NTgsMTMgQEAgYXhpZW5ldF9zdGFydF94bWl0X2RtYWVuZ2luZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0aW50IHNnX2xlbjtcXG4gXFx0aW50IHJldDtcXG4gXFxuK1xcdGlmIChscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZXN3X3BhZGRpbmcgXFx1MDAyNlxcdTAwMjYgZXRoX3NrYl9wYWQoc2tiKSkge1xcbitcXHRcXHQvKiBQYWQgc2hvcnQgZnJhbWVzOyB0aGUgTUFDIGRvZXMgbm90IGFwcGVuZCBFdGhlcm5ldCBwYWRkaW5nLiAqL1xcbitcXHRcXHRuZGV2LVxcdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XFxuK1xcdFxcdG5kZXYtXFx1MDAzZXN0YXRzLnR4X2Vycm9ycysrO1xcbitcXHRcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbitcXHR9XFxuK1xcbiBcXHRkbWFfZGV2ID0gbHAtXFx1MDAzZXR4X2NoYW4tXFx1MDAzZWRldmljZTtcXG4gXFx0c2dfbGVuID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFncyArIDE7XFxuIFxcdGlmIChDSVJDX1NQQUNFKGxwLVxcdTAwM2V0eF9yaW5nX2hlYWQsIGxwLVxcdTAwM2V0eF9yaW5nX3RhaWwsIFRYX0JEX05VTV9NQVgpIFxcdTAwM2M9IDEpIHtcXG5AQCAtOTM5LDE5ICs5ODksMjEgQEAgYXhpZW5ldF9zdGFydF94bWl0X2RtYWVuZ2luZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0XFx0Z290byB4bWl0X2Vycm9yX2Ryb3Bfc2tiO1xcbiBcXG4gXFx0LyogRmlsbCB1cCBhcHAgZmllbGRzIGZvciBjaGVja3N1bSAqL1xcbi1cXHRpZiAoc2tiLVxcdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xcbi1cXHRcXHRpZiAobHAtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgWEFFX0ZFQVRVUkVfRlVMTF9UWF9DU1VNKSB7XFxuLVxcdFxcdFxcdC8qIFR4IEZ1bGwgQ2hlY2tzdW0gT2ZmbG9hZCBFbmFibGVkICovXFxuLVxcdFxcdFxcdGFwcF9tZXRhZGF0YVswXSB8PSAyO1xcbi1cXHRcXHR9IGVsc2UgaWYgKGxwLVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IFhBRV9GRUFUVVJFX1BBUlRJQUxfVFhfQ1NVTSkge1xcbi1cXHRcXHRcXHRjc3VtX3N0YXJ0X29mZiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7XFxuLVxcdFxcdFxcdGNzdW1faW5kZXhfb2ZmID0gY3N1bV9zdGFydF9vZmYgKyBza2ItXFx1MDAzZWNzdW1fb2Zmc2V0O1xcbi1cXHRcXHRcXHQvKiBUeCBQYXJ0aWFsIENoZWNrc3VtIE9mZmxvYWQgRW5hYmxlZCAqL1xcbi1cXHRcXHRcXHRhcHBfbWV0YWRhdGFbMF0gfD0gMTtcXG4tXFx0XFx0XFx0YXBwX21ldGFkYXRhWzFdID0gKGNzdW1fc3RhcnRfb2ZmIFxcdTAwM2NcXHUwMDNjIDE2KSB8IGNzdW1faW5kZXhfb2ZmO1xcbitcXHRpZiAobHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VkbWFfdHhfY3N1bSkge1xcbitcXHRcXHRpZiAoc2tiLVxcdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xcbitcXHRcXHRcXHRpZiAobHAtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgWEFFX0ZFQVRVUkVfRlVMTF9UWF9DU1VNKSB7XFxuK1xcdFxcdFxcdFxcdC8qIFR4IEZ1bGwgQ2hlY2tzdW0gT2ZmbG9hZCBFbmFibGVkICovXFxuK1xcdFxcdFxcdFxcdGFwcF9tZXRhZGF0YVswXSB8PSAyO1xcbitcXHRcXHRcXHR9IGVsc2UgaWYgKGxwLVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IFhBRV9GRUFUVVJFX1BBUlRJQUxfVFhfQ1NVTSkge1xcbitcXHRcXHRcXHRcXHRjc3VtX3N0YXJ0X29mZiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7XFxuK1xcdFxcdFxcdFxcdGNzdW1faW5kZXhfb2ZmID0gY3N1bV9zdGFydF9vZmYgKyBza2ItXFx1MDAzZWNzdW1fb2Zmc2V0O1xcbitcXHRcXHRcXHRcXHQvKiBUeCBQYXJ0aWFsIENoZWNrc3VtIE9mZmxvYWQgRW5hYmxlZCAqL1xcbitcXHRcXHRcXHRcXHRhcHBfbWV0YWRhdGFbMF0gfD0gMTtcXG4rXFx0XFx0XFx0XFx0YXBwX21ldGFkYXRhWzFdID0gKGNzdW1fc3RhcnRfb2ZmIFxcdTAwM2NcXHUwMDNjIDE2KSB8IGNzdW1faW5kZXhfb2ZmO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH0gZWxzZSBpZiAoc2tiLVxcdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHtcXG4rXFx0XFx0XFx0YXBwX21ldGFkYXRhWzBdIHw9IDI7IC8qIFR4IEZ1bGwgQ2hlY2tzdW0gT2ZmbG9hZCBFbmFibGVkICovXFxuIFxcdFxcdH1cXG4tXFx0fSBlbHNlIGlmIChza2ItXFx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkge1xcbi1cXHRcXHRhcHBfbWV0YWRhdGFbMF0gfD0gMjsgLyogVHggRnVsbCBDaGVja3N1bSBPZmZsb2FkIEVuYWJsZWQgKi9cXG4gXFx0fVxcbiBcXG4gXFx0ZG1hX3R4X2Rlc2MgPSBkbWFfZGV2LVxcdTAwM2VkZXZpY2VfcHJlcF9zbGF2ZV9zZyhscC1cXHUwMDNldHhfY2hhbiwgc2tidWZfZG1hLVxcdTAwM2VzZ2wsXFxuQEAgLTE2NzAsNiArMTcyMiwxMCBAQCBzdGF0aWMgaW50IGF4aWVuZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0YXhpZW5ldF9sb2NrX21paShscCk7XFxuIFxcdHJldCA9IGF4aWVuZXRfZGV2aWNlX3Jlc2V0KG5kZXYpO1xcbiBcXHRheGllbmV0X3VubG9ja19taWkobHApO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIobHAtXFx1MDAzZWRldiwgXFxcImF4aWVuZXRfZGV2aWNlX3Jlc2V0KCkgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0ID0gcGh5bGlua19vZl9waHlfY29ubmVjdChscC1cXHUwMDNlcGh5bGluaywgbHAtXFx1MDAzZWRldi1cXHUwMDNlb2Zfbm9kZSwgMCk7XFxuIFxcdGlmIChyZXQpIHtcXG5AQCAtMTczOCwxMiArMTc5NCwxNyBAQCBzdGF0aWMgaW50IGF4aWVuZXRfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmxwLVxcdTAwM2VyeF9kaW0ud29yayk7XFxuIFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2bHAtXFx1MDAzZXN0YXRzX3dvcmspO1xcbitcXHRpZiAobHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VzdGF0c191cGRhdGUpIHtcXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bHAtXFx1MDAzZXN0YXRzX2xvY2spO1xcbitcXHRcXHRscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZXN0YXRzX3VwZGF0ZShscCk7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bHAtXFx1MDAzZXN0YXRzX2xvY2spO1xcbitcXHR9XFxuIFxcbiBcXHRwaHlsaW5rX3N0b3AobHAtXFx1MDAzZXBoeWxpbmspO1xcbiBcXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KGxwLVxcdTAwM2VwaHlsaW5rKTtcXG4gXFxuLVxcdGF4aWVuZXRfc2V0b3B0aW9ucyhuZGV2LCBscC1cXHUwMDNlb3B0aW9ucyBcXHUwMDI2XFxuLVxcdFxcdFxcdCAgIH4oWEFFX09QVElPTl9UWEVOIHwgWEFFX09QVElPTl9SWEVOKSk7XFxuK1xcdGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNlc2V0b3B0aW9ucyhuZGV2LCBscC1cXHUwMDNlb3B0aW9ucyBcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdCAgICAgICB+KFhBRV9PUFRJT05fVFhFTiB8IFhBRV9PUFRJT05fUlhFTikpO1xcbiBcXG4gXFx0aWYgKCFscC1cXHUwMDNldXNlX2RtYWVuZ2luZSkge1xcbiBcXHRcXHRheGllbmV0X2RtYV9zdG9wKGxwKTtcXG5AQCAtMTc2OSw3ICsxODMwLDggQEAgc3RhdGljIGludCBheGllbmV0X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdH1cXG4gXFxuIFxcdG5ldGRldl9yZXNldF9xdWV1ZShuZGV2KTtcXG4tXFx0YXhpZW5ldF9pb3cobHAsIFhBRV9JRV9PRkZTRVQsIDApO1xcbitcXHRpZiAobHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VtYWNfaXJxKVxcbitcXHRcXHRheGllbmV0X2lvdyhscCwgWEFFX0lFX09GRlNFVCwgMCk7XFxuIFxcbiBcXHRpZiAobHAtXFx1MDAzZWV0aF9pcnEgXFx1MDAzZSAwKVxcbiBcXHRcXHRmcmVlX2lycShscC1cXHUwMDNlZXRoX2lycSwgbmRldik7XFxuQEAgLTE4MzQsMjkgKzE4OTYsMTEgQEAgc3RhdGljIGludCBheGllbmV0X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpXFxuIFxcdHJldHVybiBwaHlsaW5rX21paV9pb2N0bChscC1cXHUwMDNlcGh5bGluaywgcnEsIGNtZCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkXFxuLWF4aWVuZXRfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cylcXG4rc3RhdGljIHZvaWQgYXhpZW5ldF8xZ19nZXRfc3RhdHM2NChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXFxuIHtcXG4tXFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0dW5zaWduZWQgaW50IHN0YXJ0O1xcbiBcXG4tXFx0bmV0ZGV2X3N0YXRzX3RvX3N0YXRzNjQoc3RhdHMsIFxcdTAwMjZkZXYtXFx1MDAzZXN0YXRzKTtcXG4tXFxuLVxcdGRvIHtcXG4tXFx0XFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXFx1MDAyNmxwLVxcdTAwM2VyeF9zdGF0X3N5bmMpO1xcbi1cXHRcXHRzdGF0cy1cXHUwMDNlcnhfcGFja2V0cyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZscC1cXHUwMDNlcnhfcGFja2V0cyk7XFxuLVxcdFxcdHN0YXRzLVxcdTAwM2VyeF9ieXRlcyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZscC1cXHUwMDNlcnhfYnl0ZXMpO1xcbi1cXHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXFx1MDAyNmxwLVxcdTAwM2VyeF9zdGF0X3N5bmMsIHN0YXJ0KSk7XFxuLVxcbi1cXHRkbyB7XFxuLVxcdFxcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFxcdTAwMjZscC1cXHUwMDNldHhfc3RhdF9zeW5jKTtcXG4tXFx0XFx0c3RhdHMtXFx1MDAzZXR4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bHAtXFx1MDAzZXR4X3BhY2tldHMpO1xcbi1cXHRcXHRzdGF0cy1cXHUwMDNldHhfYnl0ZXMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bHAtXFx1MDAzZXR4X2J5dGVzKTtcXG4tXFx0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFxcdTAwMjZscC1cXHUwMDNldHhfc3RhdF9zeW5jLCBzdGFydCkpO1xcbi1cXG4tXFx0aWYgKCEobHAtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgWEFFX0ZFQVRVUkVfU1RBVFMpKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbiBcXHRkbyB7XFxuIFxcdFxcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcXHUwMDI2bHAtXFx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcXG4gXFx0XFx0c3RhdHMtXFx1MDAzZXJ4X2xlbmd0aF9lcnJvcnMgPVxcbkBAIC0xODg0LDYgKzE5MjgsMzMgQEAgYXhpZW5ldF9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKVxcbiBcXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFxcdTAwMjZscC1cXHUwMDNlaHdfc3RhdHNfc2VxY291bnQsIHN0YXJ0KSk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkXFxuK2F4aWVuZXRfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cylcXG4re1xcbitcXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuK1xcbitcXHRuZXRkZXZfc3RhdHNfdG9fc3RhdHM2NChzdGF0cywgXFx1MDAyNmRldi1cXHUwMDNlc3RhdHMpO1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihcXHUwMDI2bHAtXFx1MDAzZXJ4X3N0YXRfc3luYyk7XFxuK1xcdFxcdHN0YXRzLVxcdTAwM2VyeF9wYWNrZXRzID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNmxwLVxcdTAwM2VyeF9wYWNrZXRzKTtcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZXJ4X2J5dGVzID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNmxwLVxcdTAwM2VyeF9ieXRlcyk7XFxuK1xcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcXHUwMDI2bHAtXFx1MDAzZXJ4X3N0YXRfc3luYywgc3RhcnQpKTtcXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXFx1MDAyNmxwLVxcdTAwM2V0eF9zdGF0X3N5bmMpO1xcbitcXHRcXHRzdGF0cy1cXHUwMDNldHhfcGFja2V0cyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZscC1cXHUwMDNldHhfcGFja2V0cyk7XFxuK1xcdFxcdHN0YXRzLVxcdTAwM2V0eF9ieXRlcyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZscC1cXHUwMDNldHhfYnl0ZXMpO1xcbitcXHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXFx1MDAyNmxwLVxcdTAwM2V0eF9zdGF0X3N5bmMsIHN0YXJ0KSk7XFxuK1xcbitcXHRpZiAoIShscC1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmIChscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZWdldF9zdGF0czY0KVxcbitcXHRcXHRscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZWdldF9zdGF0czY0KGxwLCBzdGF0cyk7XFxuK31cXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXhpZW5ldF9uZXRkZXZfb3BzID0ge1xcbiBcXHQubmRvX29wZW4gPSBheGllbmV0X29wZW4sXFxuIFxcdC5uZG9fc3RvcCA9IGF4aWVuZXRfc3RvcCxcXG5AQCAtMTkzOCwzMCArMjAwOSwxOCBAQCBzdGF0aWMgdm9pZCBheGllbmV0X2V0aHRvb2xzX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiAgKi9cXG4gc3RhdGljIGludCBheGllbmV0X2V0aHRvb2xzX2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4ge1xcbi1cXHRyZXR1cm4gc2l6ZW9mKHUzMikgKiBBWElFTkVUX1JFR1NfTjtcXG4rXFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcbitcXHRyZXR1cm4gc2l6ZW9mKHUzMikgKiBscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZXJlZ3NfbjtcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIGF4aWVuZXRfZXRodG9vbHNfZ2V0X3JlZ3MgLSBEdW1wIHRoZSBjb250ZW50cyBvZiBhbGwgcmVnaXN0ZXJzIHByZXNlbnRcXG4tICpcXHRcXHRcXHQgICAgICAgaW4gQXhpRXRoZXJuZXQgY29yZS5cXG4tICogQG5kZXY6XFx0UG9pbnRlciB0byBuZXRfZGV2aWNlIHN0cnVjdHVyZVxcbi0gKiBAcmVnczpcXHRQb2ludGVyIHRvIGV0aHRvb2xfcmVncyBzdHJ1Y3R1cmVcXG4tICogQHJldDpcXHRWb2lkIHBvaW50ZXIgdXNlZCB0byByZXR1cm4gdGhlIGNvbnRlbnRzIG9mIHRoZSByZWdpc3RlcnMuXFxuLSAqXFxuLSAqIFRoaXMgaW1wbGVtZW50cyBldGh0b29sIGNvbW1hbmQgZm9yIGdldHRpbmcgdGhlIEF4aSBFdGhlcm5ldCByZWdpc3RlciBkdW1wLlxcbi0gKiBJc3N1ZSBcXFwiZXRodG9vbCAtZCBldGhYXFxcIiB0byBleGVjdXRlIHRoaXMgZnVuY3Rpb24uXFxuKyAqIGF4aWVuZXRfMWdfZ2V0X3JlZ3MgLSBEdW1wIDFHIE1BQyByZWdpc3RlcnMgZm9yIGV0aHRvb2xcXG4rICogQGxwOlxcdFxcdFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlXFxuKyAqIEBkYXRhOlxcdEJ1ZmZlciBmb3IgcmVnaXN0ZXIgdmFsdWVzICh6ZXJvZWQgYW5kIHNpemVkIGJ5IHRoZSBjYWxsZXIpXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBheGllbmV0X2V0aHRvb2xzX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLCB2b2lkICpyZXQpXFxuK3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfZ2V0X3JlZ3Moc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLCB1MzIgKmRhdGEpXFxuIHtcXG4tXFx0dTMyICpkYXRhID0gKHUzMiAqKXJldDtcXG4tXFx0c2l6ZV90IGxlbiA9IHNpemVvZih1MzIpICogQVhJRU5FVF9SRUdTX047XFxuLVxcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbi1cXG4tXFx0cmVncy1cXHUwMDNldmVyc2lvbiA9IDA7XFxuLVxcdHJlZ3MtXFx1MDAzZWxlbiA9IGxlbjtcXG4tXFxuLVxcdG1lbXNldChkYXRhLCAwLCBsZW4pO1xcbiBcXHRkYXRhWzBdID0gYXhpZW5ldF9pb3IobHAsIFhBRV9SQUZfT0ZGU0VUKTtcXG4gXFx0ZGF0YVsxXSA9IGF4aWVuZXRfaW9yKGxwLCBYQUVfVFBGX09GRlNFVCk7XFxuIFxcdGRhdGFbMl0gPSBheGllbmV0X2lvcihscCwgWEFFX0lGR1BfT0ZGU0VUKTtcXG5AQCAtMjAwMiw2ICsyMDYxLDMxIEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfZXRodG9vbHNfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuIFxcdH1cXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGF4aWVuZXRfZXRodG9vbHNfZ2V0X3JlZ3MgLSBEdW1wIHRoZSBjb250ZW50cyBvZiBhbGwgcmVnaXN0ZXJzIHByZXNlbnRcXG4rICpcXHRcXHRcXHQgICAgICAgaW4gQXhpRXRoZXJuZXQgY29yZS5cXG4rICogQG5kZXY6XFx0UG9pbnRlciB0byBuZXRfZGV2aWNlIHN0cnVjdHVyZVxcbisgKiBAcmVnczpcXHRQb2ludGVyIHRvIGV0aHRvb2xfcmVncyBzdHJ1Y3R1cmVcXG4rICogQHJldDpcXHRWb2lkIHBvaW50ZXIgdXNlZCB0byByZXR1cm4gdGhlIGNvbnRlbnRzIG9mIHRoZSByZWdpc3RlcnMuXFxuKyAqXFxuKyAqIFRoaXMgaW1wbGVtZW50cyBldGh0b29sIGNvbW1hbmQgZm9yIGdldHRpbmcgdGhlIEF4aSBFdGhlcm5ldCByZWdpc3RlciBkdW1wLlxcbisgKiBJc3N1ZSBcXFwiZXRodG9vbCAtZCBldGhYXFxcIiB0byBleGVjdXRlIHRoaXMgZnVuY3Rpb24uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBheGllbmV0X2V0aHRvb2xzX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLCB2b2lkICpyZXQpXFxuK3tcXG4rXFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcdHUzMiAqZGF0YSA9ICh1MzIgKilyZXQ7XFxuK1xcdHNpemVfdCBsZW47XFxuK1xcbitcXHRsZW4gPSBzaXplb2YodTMyKSAqIGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNlcmVnc19uO1xcbitcXHRyZWdzLVxcdTAwM2V2ZXJzaW9uID0gMDtcXG4rXFx0cmVncy1cXHUwMDNlbGVuID0gbGVuO1xcbitcXG4rXFx0bWVtc2V0KGRhdGEsIDAsIGxlbik7XFxuK1xcdGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNlZ2V0X3JlZ3MobHAsIGRhdGEpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZFxcbiBheGllbmV0X2V0aHRvb2xzX2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuIFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyaW5nLFxcbkBAIC0yMzAzLDExICsyMzg3LDggQEAgc3RhdGljIGludCBheGllbmV0X2V0aHRvb2xzX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9ud2F5X3Jlc2V0KGxwLVxcdTAwM2VwaHlsaW5rKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgdTY0ICpkYXRhKVxcbitzdGF0aWMgdm9pZCBheGllbmV0XzFnX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwgdTY0ICpkYXRhKVxcbiB7XFxuLVxcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7XFxuIFxcdHVuc2lnbmVkIGludCBzdGFydDtcXG4gXFxuIFxcdGRvIHtcXG5AQCAtMjMyNCw2ICsyNDA1LDE3IEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfZXRodG9vbHNfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0fSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeShcXHUwMDI2bHAtXFx1MDAzZWh3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBheGllbmV0X2V0aHRvb2xzX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICB1NjQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFxuK1xcdGlmIChscC1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgbHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VnZXRfZXRodG9vbF9zdGF0cylcXG4rXFx0XFx0bHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VnZXRfZXRodG9vbF9zdGF0cyhscCwgZGF0YSk7XFxuK31cXG4rXFxuIHN0YXRpYyBjb25zdCBjaGFyIGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHtcXG4gXFx0XFxcIlJlY2VpdmVkIGJ5dGVzXFxcIixcXG4gXFx0XFxcIlRyYW5zbWl0dGVkIGJ5dGVzXFxcIixcXG5AQCAtMjMzNiwxMiArMjQyOCwyNiBAQCBzdGF0aWMgY29uc3QgY2hhciBheGllbmV0X2V0aHRvb2xfc3RhdHNfc3RyaW5nc1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7XFxuIFxcdFxcXCJVc2VyIERlZmluZWQgQ291bnRlciAyXFxcIixcXG4gfTtcXG4gXFxuK3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfZ2V0X3N0cmluZ3ModTggKmRhdGEpXFxuK3tcXG4rXFx0bWVtY3B5KGRhdGEsIGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzLFxcbitcXHQgICAgICAgc2l6ZW9mKGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYXhpZW5ldF8xZ19nZXRfc3NldF9jb3VudCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBBUlJBWV9TSVpFKGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSlcXG4ge1xcbitcXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXG4gXFx0c3dpdGNoIChzdHJpbmdzZXQpIHtcXG4gXFx0Y2FzZSBFVEhfU1NfU1RBVFM6XFxuLVxcdFxcdG1lbWNweShkYXRhLCBheGllbmV0X2V0aHRvb2xfc3RhdHNfc3RyaW5ncyxcXG4tXFx0XFx0ICAgICAgIHNpemVvZihheGllbmV0X2V0aHRvb2xfc3RhdHNfc3RyaW5ncykpO1xcbitcXHRcXHRpZiAobHAtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgWEFFX0ZFQVRVUkVfU1RBVFMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNlZ2V0X3N0cmluZ3MpXFxuK1xcdFxcdFxcdGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNlZ2V0X3N0cmluZ3MoZGF0YSk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIH1cXG5AQCAtMjM1MiwyNCArMjQ1OCwyMCBAQCBzdGF0aWMgaW50IGF4aWVuZXRfZXRodG9vbHNfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpXFxuIFxcbiBcXHRzd2l0Y2ggKHNzZXQpIHtcXG4gXFx0Y2FzZSBFVEhfU1NfU1RBVFM6XFxuLVxcdFxcdGlmIChscC1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUylcXG4tXFx0XFx0XFx0cmV0dXJuIEFSUkFZX1NJWkUoYXhpZW5ldF9ldGh0b29sX3N0YXRzX3N0cmluZ3MpO1xcbitcXHRcXHRpZiAobHAtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgWEFFX0ZFQVRVUkVfU1RBVFMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNlZ2V0X3NzZXRfY291bnQpXFxuK1xcdFxcdFxcdHJldHVybiBscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZWdldF9zc2V0X2NvdW50KCk7XFxuIFxcdFxcdGZhbGx0aHJvdWdoO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIHZvaWRcXG4tYXhpZW5ldF9ldGh0b29sc19nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cylcXG4rc3RhdGljIHZvaWQgYXhpZW5ldF8xZ19nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKVxcbiB7XFxuLVxcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7XFxuIFxcdHVuc2lnbmVkIGludCBzdGFydDtcXG4gXFxuLVxcdGlmICghKGxwLVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IFhBRV9GRUFUVVJFX1NUQVRTKSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4gXFx0ZG8ge1xcbiBcXHRcXHRzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4oXFx1MDAyNmxwLVxcdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XFxuIFxcdFxcdHBhdXNlX3N0YXRzLVxcdTAwM2V0eF9wYXVzZV9mcmFtZXMgPVxcbkBAIC0yMzgwLDE1ICsyNDgyLDIzIEBAIGF4aWVuZXRfZXRodG9vbHNfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkXFxuLWF4aWVuZXRfZXRodG9vbF9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cylcXG4rYXhpZW5ldF9ldGh0b29sc19nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cylcXG4ge1xcbiBcXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbi1cXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuIFxcbiBcXHRpZiAoIShscC1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdGlmIChscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZWdldF9wYXVzZV9zdGF0cylcXG4rXFx0XFx0bHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VnZXRfcGF1c2Vfc3RhdHMobHAsIHBhdXNlX3N0YXRzKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYXhpZW5ldF8xZ19nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IHN0YXJ0O1xcbitcXG4gXFx0ZG8ge1xcbiBcXHRcXHRzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4oXFx1MDAyNmxwLVxcdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XFxuIFxcdFxcdG1hY19zdGF0cy1cXHUwMDNlRnJhbWVzVHJhbnNtaXR0ZWRPSyA9XFxuQEAgLTI0MjUsMTUgKzI1MzUsMjQgQEAgYXhpZW5ldF9ldGh0b29sX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkXFxuLWF4aWVuZXRfZXRodG9vbF9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tXFx0XFx0XFx0XFx0ICAgc3RydWN0IGV0aHRvb2xfZXRoX2N0cmxfc3RhdHMgKmN0cmxfc3RhdHMpXFxuK2F4aWVuZXRfZXRodG9vbF9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cylcXG4ge1xcbiBcXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbi1cXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuIFxcbiBcXHRpZiAoIShscC1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdGlmIChscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZWdldF9ldGhfbWFjX3N0YXRzKVxcbitcXHRcXHRscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZWdldF9ldGhfbWFjX3N0YXRzKGxwLCBtYWNfc3RhdHMpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZFxcbitheGllbmV0XzFnX2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBzdGFydDtcXG4rXFxuIFxcdGRvIHtcXG4gXFx0XFx0c3RhcnQgPSByZWFkX3NlcWNvdW50X2JlZ2luKFxcdTAwMjZscC1cXHUwMDNlaHdfc3RhdHNfc2VxY291bnQpO1xcbiBcXHRcXHRjdHJsX3N0YXRzLVxcdTAwM2VNQUNDb250cm9sRnJhbWVzVHJhbnNtaXR0ZWQgPVxcbkBAIC0yNDQ1LDcgKzI1NjQsMjAgQEAgYXhpZW5ldF9ldGh0b29sX2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFxcdTAwMjZscC1cXHUwMDNlaHdfc3RhdHNfc2VxY291bnQsIHN0YXJ0KSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgYXhpZW5ldF9ybW9uX3Jhbmdlc1tdID0ge1xcbitzdGF0aWMgdm9pZFxcbitheGllbmV0X2V0aHRvb2xfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKVxcbit7XFxuK1xcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcbitcXHRpZiAoIShscC1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmIChscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZWdldF9ldGhfY3RybF9zdGF0cylcXG4rXFx0XFx0bHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VnZXRfZXRoX2N0cmxfc3RhdHMobHAsIGN0cmxfc3RhdHMpO1xcbit9XFxuK1xcbitjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgYXhpZW5ldF9ybW9uX3Jhbmdlc1tdID0ge1xcbiBcXHR7ICAgNjQsICAgIDY0IH0sXFxuIFxcdHsgICA2NSwgICAxMjcgfSxcXG4gXFx0eyAgMTI4LCAgIDI1NSB9LFxcbkBAIC0yNDU3LDE2ICsyNTg5LDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgYXhpZW5ldF9ybW9uX3Jhbmdlc1tdID0ge1xcbiB9O1xcbiBcXG4gc3RhdGljIHZvaWRcXG4tYXhpZW5ldF9ldGh0b29sX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxcbi1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlICoqcmFuZ2VzKVxcbitheGllbmV0XzFnX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxcbitcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSAqKnJhbmdlcylcXG4ge1xcbi1cXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuIFxcbi1cXHRpZiAoIShscC1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuIFxcdGRvIHtcXG4gXFx0XFx0c3RhcnQgPSByZWFkX3NlcWNvdW50X2JlZ2luKFxcdTAwMjZscC1cXHUwMDNlaHdfc3RhdHNfc2VxY291bnQpO1xcbiBcXHRcXHRybW9uX3N0YXRzLVxcdTAwM2V1bmRlcnNpemVfcGt0cyA9XFxuQEAgLTI1MTAsNiArMjYzOCwyMCBAQCBheGllbmV0X2V0aHRvb2xfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0KnJhbmdlcyA9IGF4aWVuZXRfcm1vbl9yYW5nZXM7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkXFxuK2F4aWVuZXRfZXRodG9vbF9nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSAqKnJhbmdlcylcXG4re1xcbitcXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXG4rXFx0aWYgKCEobHAtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgWEFFX0ZFQVRVUkVfU1RBVFMpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAobHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VnZXRfcm1vbl9zdGF0cylcXG4rXFx0XFx0bHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VnZXRfcm1vbl9zdGF0cyhscCwgcm1vbl9zdGF0cywgcmFuZ2VzKTtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBheGllbmV0X2V0aHRvb2xfb3BzID0ge1xcbiBcXHQuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfTUFYX0ZSQU1FUyB8XFxuIFxcdFxcdFxcdFxcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XFxuQEAgLTI1NTUsMTEgKzI2OTcsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGF4aWVuZXRfZXRodG9vbF9kbWFlbmdpbmVfb3BzID0ge1xcbiBcXHQuZ2V0X3Jtb25fc3RhdHMgPSBheGllbmV0X2V0aHRvb2xfZ2V0X3Jtb25fc3RhdHMsXFxuIH07XFxuIFxcbi1zdGF0aWMgc3RydWN0IGF4aWVuZXRfbG9jYWwgKnBjc190b19heGllbmV0X2xvY2FsKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxcbi17XFxuLVxcdHJldHVybiBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCwgcGNzKTtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgYXhpZW5ldF9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLFxcbiBcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBuZWdfbW9kZSxcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcXG5AQCAtMjYxOSw3ICsyNzU2LDkgQEAgc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqYXhpZW5ldF9tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4gXFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcbiBcXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHxcXG4tXFx0ICAgIGludGVyZmFjZSA9PSAgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKVxcbitcXHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSB8fFxcbitcXHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUiB8fFxcbitcXHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8yNUdCQVNFUilcXG4gXFx0XFx0cmV0dXJuIFxcdTAwMjZscC1cXHUwMDNlcGNzO1xcbiBcXG4gXFx0cmV0dXJuIE5VTEw7XFxuQEAgLTI2MzgsMTMgKzI3NzcsOSBAQCBzdGF0aWMgdm9pZCBheGllbmV0X21hY19saW5rX2Rvd24oc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXFxuIFxcdC8qIG5vdGhpbmcgbWVhbmluZ2Z1bCB0byBkbyAqL1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBheGllbmV0X21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbi1cXHRcXHRcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxcbi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcXG4tXFx0XFx0XFx0XFx0aW50IHNwZWVkLCBpbnQgZHVwbGV4LFxcbi1cXHRcXHRcXHRcXHRib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKVxcbitzdGF0aWMgdm9pZCBheGllbmV0XzFnX21hY19saW5rX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgc3BlZWQsXFxuK1xcdFxcdFxcdFxcdCAgIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpXFxuIHtcXG4tXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSB0b19uZXRfZGV2KGNvbmZpZy1cXHUwMDNlZGV2KTtcXG4gXFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcdHUzMiBlbW1jX3JlZywgZmNjX3JlZztcXG4gXFxuQEAgLTI2ODEsNiArMjgxNiwxOSBAQCBzdGF0aWMgdm9pZCBheGllbmV0X21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbiBcXHRheGllbmV0X2lvdyhscCwgWEFFX0ZDQ19PRkZTRVQsIGZjY19yZWcpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBheGllbmV0X21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcXG4rXFx0XFx0XFx0XFx0aW50IHNwZWVkLCBpbnQgZHVwbGV4LFxcbitcXHRcXHRcXHRcXHRib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gdG9fbmV0X2Rldihjb25maWctXFx1MDAzZWRldik7XFxuK1xcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXG4rXFx0aWYgKGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNlbWFjX2xpbmtfdXApXFxuK1xcdFxcdGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNlbWFjX2xpbmtfdXAobmRldiwgc3BlZWQsIHR4X3BhdXNlLCByeF9wYXVzZSk7XFxuK31cXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIGF4aWVuZXRfcGh5bGlua19vcHMgPSB7XFxuIFxcdC5tYWNfc2VsZWN0X3BjcyA9IGF4aWVuZXRfbWFjX3NlbGVjdF9wY3MsXFxuIFxcdC5tYWNfY29uZmlnID0gYXhpZW5ldF9tYWNfY29uZmlnLFxcbkBAIC0yNjk4LDcgKzI4NDYsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBheGllbmV0X3BoeWxpbmtfb3BzID0ge1xcbiBzdGF0aWMgdm9pZCBheGllbmV0X2RtYV9lcnJfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4gXFx0dTMyIGk7XFxuLVxcdHUzMiBheGllbmV0X3N0YXR1cztcXG4gXFx0c3RydWN0IGF4aWRtYV9iZCAqY3VyX3A7XFxuIFxcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ZG1hX2Vycl90YXNrKTtcXG5AQCAtMjcxMSw4ICsyODU4LDggQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9kbWFfZXJyX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRuYXBpX2Rpc2FibGUoXFx1MDAyNmxwLVxcdTAwM2VuYXBpX3R4KTtcXG4gXFx0bmFwaV9kaXNhYmxlKFxcdTAwMjZscC1cXHUwMDNlbmFwaV9yeCk7XFxuIFxcbi1cXHRheGllbmV0X3NldG9wdGlvbnMobmRldiwgbHAtXFx1MDAzZW9wdGlvbnMgXFx1MDAyNlxcbi1cXHRcXHRcXHQgICB+KFhBRV9PUFRJT05fVFhFTiB8IFhBRV9PUFRJT05fUlhFTikpO1xcbitcXHRscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZXNldG9wdGlvbnMobmRldiwgbHAtXFx1MDAzZW9wdGlvbnMgXFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgICAgfihYQUVfT1BUSU9OX1RYRU4gfCBYQUVfT1BUSU9OX1JYRU4pKTtcXG4gXFxuIFxcdGF4aWVuZXRfZG1hX3N0b3AobHApO1xcbiBcXHRuZXRkZXZfcmVzZXRfcXVldWUobmRldik7XFxuQEAgLTI3NTcsMjkgKzI5MDQsMTI2IEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfZG1hX2Vycl9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFxuIFxcdGF4aWVuZXRfZG1hX3N0YXJ0KGxwKTtcXG4gXFxuLVxcdGF4aWVuZXRfc3RhdHVzID0gYXhpZW5ldF9pb3IobHAsIFhBRV9SQ1cxX09GRlNFVCk7XFxuLVxcdGF4aWVuZXRfc3RhdHVzIFxcdTAwMjY9IH5YQUVfUkNXMV9SWF9NQVNLO1xcbi1cXHRheGllbmV0X2lvdyhscCwgWEFFX1JDVzFfT0ZGU0VULCBheGllbmV0X3N0YXR1cyk7XFxuLVxcbi1cXHRheGllbmV0X3N0YXR1cyA9IGF4aWVuZXRfaW9yKGxwLCBYQUVfSVBfT0ZGU0VUKTtcXG4tXFx0aWYgKGF4aWVuZXRfc3RhdHVzIFxcdTAwMjYgWEFFX0lOVF9SWFJKRUNUX01BU0spXFxuLVxcdFxcdGF4aWVuZXRfaW93KGxwLCBYQUVfSVNfT0ZGU0VULCBYQUVfSU5UX1JYUkpFQ1RfTUFTSyk7XFxuLVxcdGF4aWVuZXRfaW93KGxwLCBYQUVfSUVfT0ZGU0VULCBscC1cXHUwMDNlZXRoX2lycSBcXHUwMDNlIDAgP1xcbi1cXHRcXHQgICAgWEFFX0lOVF9SRUNWX0VSUk9SX01BU0sgOiAwKTtcXG4tXFx0YXhpZW5ldF9pb3cobHAsIFhBRV9GQ0NfT0ZGU0VULCBYQUVfRkNDX0ZDUlhfTUFTSyk7XFxuK1xcdC8qIFRoaXMgZXJyb3IgaGFuZGxlciBydW5zIG9ubHkgZm9yIHRoZSBsZWdhY3kgZW1iZWRkZWQtRE1BICgxRykgcGF0aCxcXG4rXFx0ICogd2hvc2UgbWFjX2luaXQoKSBjYW5ub3QgZmFpbCwgc28gaXRzIHJldHVybiB2YWx1ZSBpcyBub3QgY2hlY2tlZC5cXG4rXFx0ICovXFxuK1xcdGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNlbWFjX2luaXQobmRldik7XFxuIFxcbiBcXHQvKiBTeW5jIGRlZmF1bHQgb3B0aW9ucyB3aXRoIEhXIGJ1dCBsZWF2ZSByZWNlaXZlciBhbmRcXG4gXFx0ICogdHJhbnNtaXR0ZXIgZGlzYWJsZWQuXFxuIFxcdCAqL1xcbi1cXHRheGllbmV0X3NldG9wdGlvbnMobmRldiwgbHAtXFx1MDAzZW9wdGlvbnMgXFx1MDAyNlxcbi1cXHRcXHRcXHQgICB+KFhBRV9PUFRJT05fVFhFTiB8IFhBRV9PUFRJT05fUlhFTikpO1xcbitcXHRscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZXNldG9wdGlvbnMobmRldiwgbHAtXFx1MDAzZW9wdGlvbnMgXFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgICAgfihYQUVfT1BUSU9OX1RYRU4gfCBYQUVfT1BUSU9OX1JYRU4pKTtcXG4gXFx0YXhpZW5ldF9zZXRfbWFjX2FkZHJlc3MobmRldiwgTlVMTCk7XFxuIFxcdGF4aWVuZXRfc2V0X211bHRpY2FzdF9saXN0KG5kZXYpO1xcbiBcXHRuYXBpX2VuYWJsZShcXHUwMDI2bHAtXFx1MDAzZW5hcGlfcngpO1xcbiBcXHRuYXBpX2VuYWJsZShcXHUwMDI2bHAtXFx1MDAzZW5hcGlfdHgpO1xcbi1cXHRheGllbmV0X3NldG9wdGlvbnMobmRldiwgbHAtXFx1MDAzZW9wdGlvbnMpO1xcbitcXHRscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZXNldG9wdGlvbnMobmRldiwgbHAtXFx1MDAzZW9wdGlvbnMpO1xcbit9XFxuK1xcbisvKipcXG4rICogYXhpZW5ldF8xZ19waHlsaW5rX3NldF9jYXBzIC0gU2V0IDFHIHBoeWxpbmsgY2FwYWJpbGl0aWVzIGFuZCBpbnRlcmZhY2VzXFxuKyAqIEBscDpcXHRcXHRQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxcbisgKiBAY29uZmlnOlxcdFBvaW50ZXIgdG8gdGhlIHBoeWxpbmtfY29uZmlnIHN0cnVjdHVyZVxcbisgKi9cXG4rc3RhdGljIHZvaWQgYXhpZW5ldF8xZ19waHlsaW5rX3NldF9jYXBzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpXFxuK3tcXG4rXFx0Y29uZmlnLVxcdTAwM2VtYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMEZEIHwgTUFDXzEwMEZEIHwgTUFDXzEwMDBGRDtcXG4rXFx0X19zZXRfYml0KGxwLVxcdTAwM2VwaHlfbW9kZSwgY29uZmlnLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdGlmIChscC1cXHUwMDNlc3dpdGNoX3hfc2dtaWkpIHtcXG4rXFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgsXFxuK1xcdFxcdFxcdCAgY29uZmlnLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdFxcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfU0dNSUksXFxuK1xcdFxcdFxcdCAgY29uZmlnLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdH1cXG4rfVxcbitcXG4rLyoqXFxuKyAqIGF4aWVuZXRfMWdfY2xrX2luaXQgLSBHZXQgYW5kIGVuYWJsZSB0aGUgMUcgTUFDIGNsb2Nrc1xcbisgKiBAbHA6XFx0XFx0UG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIgb3RoZXJ3aXNlLlxcbisgKi9cXG4rc3RhdGljIGludCBheGllbmV0XzFnX2Nsa19pbml0KHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBscC1cXHUwMDNlZGV2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bHAtXFx1MDAzZWF4aV9jbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWxfZW5hYmxlZChkZXYsIFxcXCJzX2F4aV9saXRlX2Nsa1xcXCIpO1xcbitcXHRpZiAoIWxwLVxcdTAwM2VheGlfY2xrKSB7XFxuK1xcdFxcdC8qIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBpZiBuYW1lZCBBWEkgY2xvY2sgaXMgbm90XFxuK1xcdFxcdCAqIHByZXNlbnQsIHRyZWF0IHRoZSBmaXJzdCBjbG9jayBzcGVjaWZpZWQgYXMgdGhlIEFYSSBjbG9jay5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGxwLVxcdTAwM2VheGlfY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsX2VuYWJsZWQoZGV2LCBOVUxMKTtcXG4rXFx0fVxcbitcXHRpZiAoSVNfRVJSKGxwLVxcdTAwM2VheGlfY2xrKSlcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGxwLVxcdTAwM2VheGlfY2xrKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiY291bGQgbm90IGdldCBBWEkgY2xvY2tcXFxcblxcXCIpO1xcbitcXG4rXFx0bHAtXFx1MDAzZW1pc2NfY2xrc1swXS5pZCA9IFxcXCJheGlzX2Nsa1xcXCI7XFxuK1xcdGxwLVxcdTAwM2VtaXNjX2Nsa3NbMV0uaWQgPSBcXFwicmVmX2Nsa1xcXCI7XFxuK1xcdGxwLVxcdTAwM2VtaXNjX2Nsa3NbMl0uaWQgPSBcXFwibWd0X2Nsa1xcXCI7XFxuK1xcbitcXHRyZXQgPSBkZXZtX2Nsa19idWxrX2dldF9vcHRpb25hbF9lbmFibGUoZGV2LCBYQUVfTlVNX01JU0NfQ0xPQ0tTLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRscC1cXHUwMDNlbWlzY19jbGtzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcImNvdWxkIG5vdCBnZXQvZW5hYmxlIG1pc2MuIGNsb2Nrc1xcXFxuXFxcIik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGF4aWVuZXRfMWdfcHJvYmVfaW5pdCAtIDFHIE1BQy1zcGVjaWZpYyBwcm9iZS10aW1lIGluaXRpYWxpemF0aW9uXFxuKyAqIEBscDpcXHRcXHRQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxcbisgKi9cXG4rc3RhdGljIHZvaWQgYXhpZW5ldF8xZ19wcm9iZV9pbml0KHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcXG4re1xcbitcXHRpZiAoYXhpZW5ldF9pb3IobHAsIFhBRV9BQklMSVRZX09GRlNFVCkgXFx1MDAyNiBYQUVfQUJJTElUWV9TVEFUUylcXG4rXFx0XFx0bHAtXFx1MDAzZWZlYXR1cmVzIHw9IFhBRV9GRUFUVVJFX1NUQVRTO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGF4aWVuZXRfY29uZmlnIGF4aWVuZXRfMWdfY29uZmlnID0ge1xcbitcXHQubWRpbyA9IHRydWUsXFxuK1xcdC5tYWNfaXJxID0gdHJ1ZSxcXG4rXFx0LmxlZ2FjeV9kbWEgPSB0cnVlLFxcbitcXHQudWNfZmlsdGVyID0gdHJ1ZSxcXG4rXFx0Lm1jX2ZpbHRlciA9IHRydWUsXFxuK1xcdC52bGFuID0gdHJ1ZSxcXG4rXFx0Lmp1bWJvID0gdHJ1ZSxcXG4rXFx0LmRtYV90eF9jc3VtID0gdHJ1ZSxcXG4rXFx0LnJlZ3NfbiA9IEFYSUVORVRfUkVHU19OLFxcbitcXHQuY2xrX2luaXQgPSBheGllbmV0XzFnX2Nsa19pbml0LFxcbitcXHQuc2V0b3B0aW9ucyA9IGF4aWVuZXRfc2V0b3B0aW9ucyxcXG4rXFx0LnByb2JlX2luaXQgPSBheGllbmV0XzFnX3Byb2JlX2luaXQsXFxuK1xcdC5tYWNfaW5pdCA9IGF4aWVuZXRfMWdfbWFjX2luaXQsXFxuK1xcdC5tYWNfbGlua191cCA9IGF4aWVuZXRfMWdfbWFjX2xpbmtfdXAsXFxuK1xcdC5nZXRfcmVncyA9IGF4aWVuZXRfMWdfZ2V0X3JlZ3MsXFxuK1xcdC5waHlsaW5rX3NldF9jYXBzID0gYXhpZW5ldF8xZ19waHlsaW5rX3NldF9jYXBzLFxcbitcXHQucGNzX29wcyA9IFxcdTAwMjZheGllbmV0X3Bjc19vcHMsXFxuK1xcdC5zdGF0c191cGRhdGUgPSBheGllbmV0XzFnX3N0YXRzX3VwZGF0ZSxcXG4rXFx0LmdldF9zdGF0czY0ID0gYXhpZW5ldF8xZ19nZXRfc3RhdHM2NCxcXG4rXFx0LmdldF9ldGh0b29sX3N0YXRzID0gYXhpZW5ldF8xZ19nZXRfZXRodG9vbF9zdGF0cyxcXG4rXFx0LmdldF9zdHJpbmdzID0gYXhpZW5ldF8xZ19nZXRfc3RyaW5ncyxcXG4rXFx0LmdldF9zc2V0X2NvdW50ID0gYXhpZW5ldF8xZ19nZXRfc3NldF9jb3VudCxcXG4rXFx0LmdldF9wYXVzZV9zdGF0cyA9IGF4aWVuZXRfMWdfZ2V0X3BhdXNlX3N0YXRzLFxcbitcXHQuZ2V0X2V0aF9tYWNfc3RhdHMgPSBheGllbmV0XzFnX2dldF9ldGhfbWFjX3N0YXRzLFxcbitcXHQuZ2V0X2V0aF9jdHJsX3N0YXRzID0gYXhpZW5ldF8xZ19nZXRfZXRoX2N0cmxfc3RhdHMsXFxuK1xcdC5nZXRfcm1vbl9zdGF0cyA9IGF4aWVuZXRfMWdfZ2V0X3Jtb25fc3RhdHMsXFxuK307XFxuK1xcbisvKiBNYXRjaCB0YWJsZSBmb3Igb2ZfcGxhdGZvcm0gYmluZGluZyAqL1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBheGllbmV0X29mX21hdGNoW10gPSB7XFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwieGxueCxheGktZXRoZXJuZXQtMS4wMC5hXFxcIiwgLmRhdGEgPSBcXHUwMDI2YXhpZW5ldF8xZ19jb25maWcgfSxcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJ4bG54LGF4aS1ldGhlcm5ldC0xLjAxLmFcXFwiLCAuZGF0YSA9IFxcdTAwMjZheGllbmV0XzFnX2NvbmZpZyB9LFxcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInhsbngsYXhpLWV0aGVybmV0LTIuMDEuYVxcXCIsIC5kYXRhID0gXFx1MDAyNmF4aWVuZXRfMWdfY29uZmlnIH0sXFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwieGxueCx4eHYtZXRoZXJuZXQtMS4wXFxcIiwgLmRhdGEgPSBcXHUwMDI2YXhpZW5ldF8xMGcyNWdfY29uZmlnIH0sXFxuK1xcdHt9LFxcbit9O1xcbitcXG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXhpZW5ldF9vZl9tYXRjaCk7XFxuK1xcbiAvKipcXG4gICogYXhpZW5ldF9wcm9iZSAtIEF4aSBFdGhlcm5ldCBwcm9iZSBmdW5jdGlvbi5cXG4gICogQHBkZXY6XFx0UG9pbnRlciB0byBwbGF0Zm9ybSBkZXZpY2Ugc3RydWN0dXJlLlxcbkBAIC0yODMwLDI3ICszMDc0LDEzIEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRzZXFjb3VudF9tdXRleF9pbml0KFxcdTAwMjZscC1cXHUwMDNlaHdfc3RhdHNfc2VxY291bnQsIFxcdTAwMjZscC1cXHUwMDNlc3RhdHNfbG9jayk7XFxuIFxcdElOSVRfREVGRVJSQUJMRV9XT1JLKFxcdTAwMjZscC1cXHUwMDNlc3RhdHNfd29yaywgYXhpZW5ldF9yZWZyZXNoX3N0YXRzKTtcXG4gXFxuLVxcdGxwLVxcdTAwM2VheGlfY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsX2VuYWJsZWQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJzX2F4aV9saXRlX2Nsa1xcXCIpO1xcbi1cXHRpZiAoIWxwLVxcdTAwM2VheGlfY2xrKSB7XFxuLVxcdFxcdC8qIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBpZiBuYW1lZCBBWEkgY2xvY2sgaXMgbm90IHByZXNlbnQsXFxuLVxcdFxcdCAqIHRyZWF0IHRoZSBmaXJzdCBjbG9jayBzcGVjaWZpZWQgYXMgdGhlIEFYSSBjbG9jay5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGxwLVxcdTAwM2VheGlfY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsX2VuYWJsZWQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgTlVMTCk7XFxuLVxcdH1cXG4tXFx0aWYgKElTX0VSUihscC1cXHUwMDNlYXhpX2NsaykpXFxuLVxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFBUUl9FUlIobHAtXFx1MDAzZWF4aV9jbGspLFxcbi1cXHRcXHRcXHRcXHQgICAgIFxcXCJjb3VsZCBub3QgZ2V0IEFYSSBjbG9ja1xcXFxuXFxcIik7XFxuK1xcdGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZyA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKCFscC1cXHUwMDNlYXhpZW5ldF9jb25maWcpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4tXFx0bHAtXFx1MDAzZW1pc2NfY2xrc1swXS5pZCA9IFxcXCJheGlzX2Nsa1xcXCI7XFxuLVxcdGxwLVxcdTAwM2VtaXNjX2Nsa3NbMV0uaWQgPSBcXFwicmVmX2Nsa1xcXCI7XFxuLVxcdGxwLVxcdTAwM2VtaXNjX2Nsa3NbMl0uaWQgPSBcXFwibWd0X2Nsa1xcXCI7XFxuLVxcbi1cXHRyZXQgPSBkZXZtX2Nsa19idWxrX2dldF9vcHRpb25hbF9lbmFibGUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgWEFFX05VTV9NSVNDX0NMT0NLUyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0bHAtXFx1MDAzZW1pc2NfY2xrcyk7XFxuK1xcdHJldCA9IGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNlY2xrX2luaXQobHApO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCByZXQsXFxuLVxcdFxcdFxcdFxcdCAgICAgXFxcImNvdWxkIG5vdCBnZXQvZW5hYmxlIG1pc2MuIGNsb2Nrc1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHQvKiBNYXAgZGV2aWNlIHJlZ2lzdGVycyAqL1xcbiBcXHRscC1cXHUwMDNlcmVncyA9IGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDAsIFxcdTAwMjZldGhyZXMpO1xcbkBAIC0yODYxLDkgKzMwOTEsNiBAQCBzdGF0aWMgaW50IGF4aWVuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0LyogU2V0dXAgY2hlY2tzdW0gb2ZmbG9hZCwgYnV0IGRlZmF1bHQgdG8gb2ZmIGlmIG5vdCBzcGVjaWZpZWQgKi9cXG4gXFx0bHAtXFx1MDAzZWZlYXR1cmVzID0gMDtcXG4gXFxuLVxcdGlmIChheGllbmV0X2lvcihscCwgWEFFX0FCSUxJVFlfT0ZGU0VUKSBcXHUwMDI2IFhBRV9BQklMSVRZX1NUQVRTKVxcbi1cXHRcXHRscC1cXHUwMDNlZmVhdHVyZXMgfD0gWEFFX0ZFQVRVUkVfU1RBVFM7XFxuLVxcbiBcXHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSwgXFxcInhsbngsdHhjc3VtXFxcIiwgXFx1MDAyNnZhbHVlKTtcXG4gXFx0aWYgKCFyZXQpIHtcXG4gXFx0XFx0c3dpdGNoICh2YWx1ZSkge1xcbkBAIC0yOTQwLDcgKzMxNjcsMTcgQEAgc3RhdGljIGludCBheGllbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAobHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2Vwcm9iZV9pbml0KVxcbitcXHRcXHRscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZXByb2JlX2luaXQobHApO1xcbitcXG4gXFx0aWYgKCFvZl9wcm9wZXJ0eV9wcmVzZW50KHBkZXYtXFx1MDAzZWRldi5vZl9ub2RlLCBcXFwiZG1hc1xcXCIpKSB7XFxuK1xcdFxcdC8qIE5vbi1kbWFlbmdpbmUgKGxlZ2FjeSBETUEpIG1vZGUgaXMgb25seSBzdXBwb3J0ZWQgYnkgc29tZSBNQUNzICovXFxuK1xcdFxcdGlmICghbHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VsZWdhY3lfZG1hKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFxcIkxlZ2FjeSBETUEgbW9kZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgTUFDLCB1c2UgZG1hZW5naW5lXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdC8qIEZpbmQgdGhlIERNQSBub2RlLCBtYXAgdGhlIERNQSByZWdpc3RlcnMsIGFuZCBkZWNvZGUgdGhlIERNQSBJUlFzICovXFxuIFxcdFxcdG5wID0gb2ZfcGFyc2VfcGhhbmRsZShwZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSwgXFxcImF4aXN0cmVhbS1jb25uZWN0ZWRcXFwiLCAwKTtcXG4gXFxuQEAgLTMwMjAsNyArMzI1NywxMCBAQCBzdGF0aWMgaW50IGF4aWVuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0XFx0c3RydWN0IHhpbGlueF92ZG1hX2NvbmZpZyBjZmc7XFxuIFxcdFxcdHN0cnVjdCBkbWFfY2hhbiAqdHhfY2hhbjtcXG4gXFxuLVxcdFxcdGxwLVxcdTAwM2VldGhfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbChwZGV2LCAwKTtcXG4rXFx0XFx0aWYgKGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNlbWFjX2lycSlcXG4rXFx0XFx0XFx0bHAtXFx1MDAzZWV0aF9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX29wdGlvbmFsKHBkZXYsIDApO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGxwLVxcdTAwM2VldGhfaXJxID0gLUVOWElPO1xcbiBcXHRcXHRpZiAobHAtXFx1MDAzZWV0aF9pcnEgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGxwLVxcdTAwM2VldGhfaXJxICE9IC1FTlhJTykge1xcbiBcXHRcXHRcXHRyZXR1cm4gbHAtXFx1MDAzZWV0aF9pcnE7XFxuIFxcdFxcdH1cXG5AQCAtMzA3MywxMCArMzMxMywxMiBAQCBzdGF0aWMgaW50IGF4aWVuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0bHAtXFx1MDAzZXR4X2RtYV9jciA9IGF4aWVuZXRfY2FsY19jcihscCwgWEFYSURNQV9ERlRfVFhfVEhSRVNIT0xELFxcbiBcXHRcXHRcXHRcXHRcXHRYQVhJRE1BX0RGVF9UWF9VU0VDKTtcXG4gXFxuLVxcdHJldCA9IGF4aWVuZXRfbWRpb19zZXR1cChscCk7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdGRldl93YXJuKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuLVxcdFxcdFxcdCBcXFwiZXJyb3IgcmVnaXN0ZXJpbmcgTURJTyBidXM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRpZiAobHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VtZGlvKSB7XFxuK1xcdFxcdHJldCA9IGF4aWVuZXRfbWRpb19zZXR1cChscCk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiZXJyb3IgcmVnaXN0ZXJpbmcgTURJTyBidXM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAobHAtXFx1MDAzZXBoeV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSB8fFxcbiBcXHQgICAgbHAtXFx1MDAzZXBoeV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgpIHtcXG5AQCAtMzEwMCwyMyArMzM0MiwyMSBAQCBzdGF0aWMgaW50IGF4aWVuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0XFx0XFx0Z290byBjbGVhbnVwX21kaW87XFxuIFxcdFxcdH1cXG4gXFx0XFx0b2Zfbm9kZV9wdXQobnApO1xcbi1cXHRcXHRscC1cXHUwMDNlcGNzLm9wcyA9IFxcdTAwMjZheGllbmV0X3Bjc19vcHM7XFxuK1xcdFxcdGxwLVxcdTAwM2VwY3Mub3BzID0gbHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VwY3Nfb3BzO1xcbitcXHRcXHRscC1cXHUwMDNlcGNzLnBvbGwgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VpbnRlcm5hbF9wY3MpIHtcXG4rXFx0XFx0bHAtXFx1MDAzZXBjcy5vcHMgPSBscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZXBjc19vcHM7XFxuIFxcdFxcdGxwLVxcdTAwM2VwY3MucG9sbCA9IHRydWU7XFxuIFxcdH1cXG4gXFxuIFxcdGxwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5kZXYgPSBcXHUwMDI2bmRldi1cXHUwMDNlZGV2O1xcbiBcXHRscC1cXHUwMDNlcGh5bGlua19jb25maWcudHlwZSA9IFBIWUxJTktfTkVUREVWO1xcbiBcXHRscC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX21hbmFnZWRfcG0gPSB0cnVlO1xcbi1cXHRscC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyA9IE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRSB8XFxuLVxcdFxcdE1BQ18xMEZEIHwgTUFDXzEwMEZEIHwgTUFDXzEwMDBGRDtcXG4rXFx0bHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgPSBNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0U7XFxuIFxcbi1cXHRfX3NldF9iaXQobHAtXFx1MDAzZXBoeV9tb2RlLCBscC1cXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbi1cXHRpZiAobHAtXFx1MDAzZXN3aXRjaF94X3NnbWlpKSB7XFxuLVxcdFxcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYLFxcbi1cXHRcXHRcXHQgIGxwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuLVxcdFxcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfU0dNSUksXFxuLVxcdFxcdFxcdCAgbHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcXG4tXFx0fVxcbitcXHRscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZXBoeWxpbmtfc2V0X2NhcHMobHAsIFxcdTAwMjZscC1cXHUwMDNlcGh5bGlua19jb25maWcpO1xcbiBcXG4gXFx0bHAtXFx1MDAzZXBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcXHUwMDI2bHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLCBwZGV2LVxcdTAwM2VkZXYuZndub2RlLFxcbiBcXHRcXHRcXHRcXHQgICAgIGxwLVxcdTAwM2VwaHlfbW9kZSxcXG5AQCAtMzE1OSw3ICszMzk5LDggQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0aWYgKGxwLVxcdTAwM2VwY3NfcGh5KVxcbiBcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZscC1cXHUwMDNlcGNzX3BoeS1cXHUwMDNlZGV2KTtcXG4gXFxuLVxcdGF4aWVuZXRfbWRpb190ZWFyZG93bihscCk7XFxuK1xcdGlmIChscC1cXHUwMDNlbWlpX2J1cylcXG4rXFx0XFx0YXhpZW5ldF9tZGlvX3RlYXJkb3duKGxwKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgYXhpZW5ldF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfeHh2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfeHh2LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmRiYzljMjFiMTA0YWZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X3h4di5jXFxuQEAgLTAsMCArMSw1OTUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBYWFYgKDEwRy8yNUcpIHN1cHBvcnRcXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy5cXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aHRvb2wuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvcG9sbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHlsaW5rLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJ4aWxpbnhfYXhpZW5ldC5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGlsaW54X2F4aWVuZXRfeHh2LmhcXFwiXFxuK1xcbisvKiByZWFkbF9wb2xsX3RpbWVvdXQoKSBzbGVlcCBpbnRlcnZhbCAodXMpIGFuZCAxIG1zIHRvdGFsIHRpbWVvdXQgZm9yIEdUXFxuKyAqIHJlc2V0LWRvbmUgYW5kIFBDUyBibG9jay1sb2NrIHBvbGxzLiBWYWx1ZXMgZnJvbSBaeW5xTVAvVmVyc2FsIGJyaW5nLXVwO1xcbisgKiBQRzIxMCBkb2VzIG5vdCBzcGVjaWZ5IHRoZXNlIGJvdW5kcy5cXG4rICovXFxuKyNkZWZpbmUgWFhWX0xJTktfUE9MTF9JTlRFUlZBTF9VU1xcdDEwXFxuK1xcbisvKiBOdW1iZXIgb2YgWFhWICgxMEcvMjVHKSBNQUMgcmVnaXN0ZXJzIGV4cG9zZWQgdmlhIGV0aHRvb2wgLWQuXFxuKyAqIENvdmVycyBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMgcmVnaXN0ZXJzIHBlciBYaWxpbnggUEcyMTAuXFxuKyAqL1xcbitzdGF0aWMgY29uc3QgdTMyIGF4aWVuZXRfeHh2X3JlZ19kdW1wX29mZnNldHNbWFhWX1JFR1NfTl0gPSB7XFxuK1xcdFhYVl9HVF9SRVNFVF9PRkZTRVQsXFxuK1xcdFhYVl9SRVNFVF9PRkZTRVQsXFxuK1xcdFhYVl9NT0RFX09GRlNFVCxcXG4rXFx0WFhWX1RDX09GRlNFVCxcXG4rXFx0WFhWX1JDVzFfT0ZGU0VULFxcbitcXHRYWFZfSlVNX09GRlNFVCxcXG4rXFx0WFhWX1ZMX0xFTkdUSF9PRkZTRVQsXFxuK1xcdFhYVl9USUNLUkVHX09GRlNFVCxcXG4rXFx0WFhWX0NPTkZJR19SRVZJU0lPTixcXG4rXFx0WFhWX0NPTkZJR18xNTg4X09GRlNFVCxcXG4rXFx0WFhWX0NPTkZJR19UWF9GTE9XX0NUUkwxX09GRlNFVCxcXG4rXFx0WFhWX0NPTkZJR19SWF9GTE9XX0NUUkwxX09GRlNFVCxcXG4rXFx0WFhWX0NPTkZJR19SWF9GTE9XX0NUUkwyX09GRlNFVCxcXG4rXFx0WFhWX0NPTkZJR19SU0ZFQ19PRkZTRVQsXFxuK1xcdFhYVl9DT05GSUdfRkVDX09GRlNFVCxcXG4rXFx0WFhWX0FOX0NUTDFfT0ZGU0VULFxcbitcXHRYWFZfQU5fQ1RMMl9PRkZTRVQsXFxuK1xcdFhYVl9BTl9BQklMSVRZX09GRlNFVCxcXG4rXFx0WFhWX0xUX0NUTDFfT0ZGU0VULFxcbitcXHRYWFZfU1dJVENIX0NPUkVfU1BFRURfT0ZGU0VULFxcbitcXHRYWFZfQ09ORklHXzE1ODhfMzJCSVRfT0ZGU0VULFxcbitcXHRYWFZfVFhfQ09ORklHXzE1ODhfT0ZGU0VULFxcbitcXHRYWFZfUlhfQ09ORklHXzE1ODhfT0ZGU0VULFxcbitcXHRYWFZfR1RXSVpfQ1RSTF9PRkZTRVQsXFxuK1xcdFhYVl9TVEFUUlhfU1RBVFVTMF9PRkZTRVQsXFxuK1xcdFhYVl9SWF9TVEFUVVNfUkVHMSxcXG4rXFx0WFhWX1NUQVRSWF9TVEFUVVMyX09GRlNFVCxcXG4rXFx0WFhWX1NUQVRSWF9CTEtMQ0tfT0ZGU0VULFxcbitcXHRYWFZfU1RBVF9SWF9SU0ZFQ19TVEFUVVNfT0ZGU0VULFxcbitcXHRYWFZfU1RBVF9SWF9GRUNfU1RBVFVTX09GRlNFVCxcXG4rXFx0WFhWX1NUQVRfVFhfUlNGRUNfU1RBVFVTX09GRlNFVCxcXG4rXFx0WFhWX1NUQVRfVFhfRkxPV19DVFJMMV9PRkZTRVQsXFxuK1xcdFhYVl9TVEFUX1JYX0ZMT1dfQ1RSTDFfT0ZGU0VULFxcbitcXHRYWFZfU1RBVF9BTl9TVFNfT0ZGU0VULFxcbitcXHRYWFZfU1RBVF9BTl9MUF9TVEFUVVNfT0ZGU0VULFxcbitcXHRYWFZfU1RBVF9BTl9MSU5LX0NUTF9PRkZTRVQsXFxuK1xcdFhYVl9TVEFUX0xUX1NUQVRVUzFfT0ZGU0VULFxcbitcXHRYWFZfU1RBVF9MVF9TVEFUVVMyX09GRlNFVCxcXG4rXFx0WFhWX1NUQVRfTFRfU1RBVFVTM19PRkZTRVQsXFxuK1xcdFhYVl9TVEFUX0xUX1NUQVRVUzRfT0ZGU0VULFxcbitcXHRYWFZfU1RBVF9MVF9DT0VGRjBfT0ZGU0VULFxcbitcXHRYWFZfU1RBVF9SWF9WQUxJRF9DVFJMX0NPREVfT0ZGU0VULFxcbitcXHRYWFZfU1RBVF9DT1JFX1NQRUVEX09GRlNFVCxcXG4rXFx0WFhWX1NUQVRfVFNOX09GRlNFVCxcXG4rXFx0WFhWX1NUQVRfR1RXSVpfT0ZGU0VULFxcbitcXHRYWFZfU1RBVF9BTl9MSU5LX0NUTDJfT0ZGU0VULFxcbit9O1xcbitcXG4rLyogT3B0aW9uIHRhYmxlIGZvciBzZXR0aW5nIHVwIFhYViBFdGhlcm5ldCBoYXJkd2FyZSBvcHRpb25zICovXFxuK3N0YXRpYyBzdHJ1Y3QgYXhpZW5ldF9vcHRpb24geHh2ZW5ldF9vcHRpb25zW10gPSB7XFxuK1xcdHsgLyogVHVybiBvbiBGQ1Mgc3RyaXBwaW5nIG9uIHJlY2VpdmUgcGFja2V0cyAqL1xcbitcXHRcXHQub3B0ID0gWEFFX09QVElPTl9GQ1NfU1RSSVAsXFxuK1xcdFxcdC5yZWcgPSBYWFZfUkNXMV9PRkZTRVQsXFxuK1xcdFxcdC5tX29yID0gWFhWX1JDVzFfRkNTX01BU0ssXFxuK1xcdH0sIHsgLyogVHVybiBvbiBGQ1MgaW5zZXJ0aW9uIG9uIHRyYW5zbWl0IHBhY2tldHMgKi9cXG4rXFx0XFx0Lm9wdCA9IFhBRV9PUFRJT05fRkNTX0lOU0VSVCxcXG4rXFx0XFx0LnJlZyA9IFhYVl9UQ19PRkZTRVQsXFxuK1xcdFxcdC5tX29yID0gWFhWX1RDX0ZDU19NQVNLLFxcbitcXHR9LCB7IC8qIEVuYWJsZSB0cmFuc21pdHRlciAqL1xcbitcXHRcXHQub3B0ID0gWEFFX09QVElPTl9UWEVOLFxcbitcXHRcXHQucmVnID0gWFhWX1RDX09GRlNFVCxcXG4rXFx0XFx0Lm1fb3IgPSBYWFZfVENfVFhfTUFTSyxcXG4rXFx0fSwgeyAvKiBFbmFibGUgcmVjZWl2ZXIgKi9cXG4rXFx0XFx0Lm9wdCA9IFhBRV9PUFRJT05fUlhFTixcXG4rXFx0XFx0LnJlZyA9IFhYVl9SQ1cxX09GRlNFVCxcXG4rXFx0XFx0Lm1fb3IgPSBYWFZfUkNXMV9SWF9NQVNLLFxcbitcXHR9LFxcbitcXHR7fVxcbit9O1xcbitcXG4rLyogUEcyMTAgc3RhdGlzdGljcy1ibG9jayBvZmZzZXRzIGluZGV4ZWQgYnkgZW51bSB4eHZfc3RhdC4gRWFjaCBlbnRyeSBpc1xcbisgKiB0aGUgMzItYml0IExTQiByZWdpc3RlciBhZGRyZXNzOyB0aGUgY29ycmVzcG9uZGluZyBNU0IgaXMgYXQgKzQuXFxuKyAqL1xcbitzdGF0aWMgY29uc3QgdTMyIGF4aWVuZXRfeHh2X3N0YXRfb2Zmc2V0c1tYWFZfU1RBVF9DT1VOVF0gPSB7XFxuK1xcdFtYWFZfU1RBVF9SWF9UT1RBTF9QQUNLRVRTXVxcdCA9IFhYVl9TVEFUX1JYX1RPVEFMX1BBQ0tFVFNfT0ZGU0VULFxcbitcXHRbWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9QQUNLRVRTXSA9IFhYVl9TVEFUX1JYX1RPVEFMX0dPT0RfUEFDS0VUU19PRkZTRVQsXFxuK1xcdFtYWFZfU1RBVF9SWF9UT1RBTF9CWVRFU11cXHQgPSBYWFZfU1RBVF9SWF9UT1RBTF9CWVRFU19PRkZTRVQsXFxuK1xcdFtYWFZfU1RBVF9SWF9UT1RBTF9HT09EX0JZVEVTXVxcdCA9IFhYVl9TVEFUX1JYX1RPVEFMX0dPT0RfQllURVNfT0ZGU0VULFxcbitcXHRbWFhWX1NUQVRfUlhfQkFEX0ZDU11cXHRcXHQgPSBYWFZfU1RBVF9SWF9CQURfRkNTX09GRlNFVCxcXG4rXFx0W1hYVl9TVEFUX1JYX0lOUkFOR0VFUlJdXFx0ID0gWFhWX1NUQVRfUlhfSU5SQU5HRUVSUl9PRkZTRVQsXFxuK1xcdFtYWFZfU1RBVF9SWF9NVUxUSUNBU1RdXFx0XFx0ID0gWFhWX1NUQVRfUlhfTVVMVElDQVNUX09GRlNFVCxcXG4rXFx0W1hYVl9TVEFUX1JYX0JST0FEQ0FTVF1cXHRcXHQgPSBYWFZfU1RBVF9SWF9CUk9BRENBU1RfT0ZGU0VULFxcbitcXHRbWFhWX1NUQVRfUlhfVU5ERVJTSVpFXVxcdFxcdCA9IFhYVl9TVEFUX1JYX1VOREVSU0laRV9PRkZTRVQsXFxuK1xcdFtYWFZfU1RBVF9SWF9GUkFHTUVOVF1cXHRcXHQgPSBYWFZfU1RBVF9SWF9GUkFHTUVOVF9PRkZTRVQsXFxuK1xcdFtYWFZfU1RBVF9SWF9KQUJCRVJdXFx0XFx0ID0gWFhWX1NUQVRfUlhfSkFCQkVSX09GRlNFVCxcXG4rXFx0W1hYVl9TVEFUX1JYX09WRVJTSVpFXVxcdFxcdCA9IFhYVl9TVEFUX1JYX09WRVJTSVpFX09GRlNFVCxcXG4rXFx0W1hYVl9TVEFUX1JYX1BBVVNFXVxcdFxcdCA9IFhYVl9TVEFUX1JYX1BBVVNFX09GRlNFVCxcXG4rXFx0W1hYVl9TVEFUX1RYX1RPVEFMX1BBQ0tFVFNdXFx0ID0gWFhWX1NUQVRfVFhfVE9UQUxfUEFDS0VUU19PRkZTRVQsXFxuK1xcdFtYWFZfU1RBVF9UWF9UT1RBTF9HT09EX1BBQ0tFVFNdID0gWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9QQUNLRVRTX09GRlNFVCxcXG4rXFx0W1hYVl9TVEFUX1RYX1RPVEFMX0JZVEVTXVxcdCA9IFhYVl9TVEFUX1RYX1RPVEFMX0JZVEVTX09GRlNFVCxcXG4rXFx0W1hYVl9TVEFUX1RYX1RPVEFMX0dPT0RfQllURVNdXFx0ID0gWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9CWVRFU19PRkZTRVQsXFxuK1xcdFtYWFZfU1RBVF9UWF9CQURfRkNTXVxcdFxcdCA9IFhYVl9TVEFUX1RYX0JBRF9GQ1NfT0ZGU0VULFxcbitcXHRbWFhWX1NUQVRfVFhfRlJBTUVfRVJST1JdXFx0ID0gWFhWX1NUQVRfVFhfRlJBTUVfRVJST1JfT0ZGU0VULFxcbitcXHRbWFhWX1NUQVRfVFhfTVVMVElDQVNUXVxcdFxcdCA9IFhYVl9TVEFUX1RYX01VTFRJQ0FTVF9PRkZTRVQsXFxuK1xcdFtYWFZfU1RBVF9UWF9CUk9BRENBU1RdXFx0XFx0ID0gWFhWX1NUQVRfVFhfQlJPQURDQVNUX09GRlNFVCxcXG4rXFx0W1hYVl9TVEFUX1RYX1BBVVNFXVxcdFxcdCA9IFhYVl9TVEFUX1RYX1BBVVNFX09GRlNFVCxcXG4rfTtcXG4rXFxuKy8qIFhYViAoUEcyMTApIGNvdW50ZXJzIGV4cG9zZWQgdmlhIGV0aHRvb2wgLVMuIE9ubHkgY291bnRlcnMgdGhhdCBoYXZlIG5vXFxuKyAqIHN0YW5kYXJkIHVBUEkgYXJlIGxpc3RlZCBoZXJlOyB0aGUgdG90YWxzIGluY2x1ZGUgZXJyb3JlZCBmcmFtZXMsIHNvIHRoZXlcXG4rICogYXJlIGRpc3RpbmN0IGZyb20gdGhlIGdvb2QtZnJhbWUgY291bnRzIGluIHJ0bmxfbGlua19zdGF0czY0IGFuZCB0aGVcXG4rICogSUVFRSBNQUMgc3RhdGlzdGljcy4gRXZlcnkgb3RoZXIgWFhWIGNvdW50ZXIgaXMgcmVwb3J0ZWQgdGhyb3VnaCB0aGVcXG4rICogZGVkaWNhdGVkIHN0YXRzNjQsIHBhdXNlLCBNQUMgYW5kIFJNT04gY2FsbGJhY2tzIGluc3RlYWQuXFxuKyAqL1xcbitzdGF0aWMgY29uc3QgZW51bSB4eHZfc3RhdCBheGllbmV0X3h4dl9wcml2X3N0YXRzW10gPSB7XFxuK1xcdFhYVl9TVEFUX1JYX1RPVEFMX1BBQ0tFVFMsXFxuK1xcdFhYVl9TVEFUX1JYX1RPVEFMX0JZVEVTLFxcbitcXHRYWFZfU1RBVF9UWF9UT1RBTF9QQUNLRVRTLFxcbitcXHRYWFZfU1RBVF9UWF9UT1RBTF9CWVRFUyxcXG4rXFx0WFhWX1NUQVRfVFhfQkFEX0ZDUyxcXG4rXFx0WFhWX1NUQVRfVFhfRlJBTUVfRVJST1IsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciBheGllbmV0X3h4dl9ldGh0b29sX3N0YXRzX3N0cmluZ3NbXVtFVEhfR1NUUklOR19MRU5dID0ge1xcbitcXHRcXFwiUlggVG90YWwgUGFja2V0c1xcXCIsXFxuK1xcdFxcXCJSWCBUb3RhbCBCeXRlc1xcXCIsXFxuK1xcdFxcXCJUWCBUb3RhbCBQYWNrZXRzXFxcIixcXG4rXFx0XFxcIlRYIFRvdGFsIEJ5dGVzXFxcIixcXG4rXFx0XFxcIlRYIEJhZCBGQ1NcXFwiLFxcbitcXHRcXFwiVFggRnJhbWUgRXJyb3JcXFwiLFxcbit9O1xcbitcXG4rc3RhdGljIHU2NCBheGllbmV0X3h4dl9yZWFkX2NvdW50ZXIoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLCBlbnVtIHh4dl9zdGF0IHN0YXQpXFxuK3tcXG4rXFx0dTMyIG9mZiA9IGF4aWVuZXRfeHh2X3N0YXRfb2Zmc2V0c1tzdGF0XTtcXG4rXFx0dTMyIGxzYiwgbXNiO1xcbitcXG4rXFx0bHNiID0gYXhpZW5ldF9pb3IobHAsIG9mZik7XFxuK1xcdG1zYiA9IGF4aWVuZXRfaW9yKGxwLCBvZmYgKyBYWFZfU1RBVF9NU0JfT0ZGU0VUKTtcXG4rXFxuK1xcdHJldHVybiAoKHU2NCltc2IgXFx1MDAzY1xcdTAwM2MgMzIpIHwgbHNiO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBheGllbmV0X3h4dl9pcF9oYXNfZ3R3aXpfc3RhdHVzKHUzMiBpcF92ZXJzaW9uKVxcbit7XFxuK1xcdHU4IG1pbm9yID0gRklFTERfR0VUKFhYVl9NSU5fTUFTSywgaXBfdmVyc2lvbik7XFxuK1xcdHU4IG1haiA9IEZJRUxEX0dFVChYWFZfTUFKX01BU0ssIGlwX3ZlcnNpb24pO1xcbitcXG4rXFx0aWYgKG1haiA9PSBYWFZfSVBfVkVSX0dUV0laX01BSl9NSU4pXFxuK1xcdFxcdHJldHVybiBtaW5vciBcXHUwMDNlPSBYWFZfSVBfVkVSX0dUV0laX01JTl9NSU47XFxuK1xcdHJldHVybiBtYWogXFx1MDAzZSBYWFZfSVBfVkVSX0dUV0laX01BSl9NSU47XFxuK31cXG4rXFxuKy8qKlxcbisgKiBheGllbmV0X3h4dl9zZXRvcHRpb25zIC0gU2V0IFhYViBNQUMgb3B0aW9ucyBmcm9tIHRoZSBvcHRpb24gdGFibGVcXG4rICogQG5kZXY6IFBvaW50ZXIgdG8gdGhlIG5ldF9kZXZpY2Ugc3RydWN0dXJlXFxuKyAqIEBvcHRpb25zOiBPcHRpb24gZmxhZ3MgdG8gYXBwbHlcXG4rICovXFxuK3N0YXRpYyB2b2lkIGF4aWVuZXRfeHh2X3NldG9wdGlvbnMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBvcHRpb25zKVxcbit7XFxuK1xcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXHRzdHJ1Y3QgYXhpZW5ldF9vcHRpb24gKnRwID0geHh2ZW5ldF9vcHRpb25zO1xcbitcXHR1MzIgcmVnO1xcbitcXG4rXFx0d2hpbGUgKHRwLVxcdTAwM2VvcHQpIHtcXG4rXFx0XFx0cmVnID0gYXhpZW5ldF9pb3IobHAsIHRwLVxcdTAwM2VyZWcpIFxcdTAwMjYgfnRwLVxcdTAwM2VtX29yO1xcbitcXHRcXHRpZiAob3B0aW9ucyBcXHUwMDI2IHRwLVxcdTAwM2VvcHQpXFxuK1xcdFxcdFxcdHJlZyB8PSB0cC1cXHUwMDNlbV9vcjtcXG4rXFx0XFx0YXhpZW5ldF9pb3cobHAsIHRwLVxcdTAwM2VyZWcsIHJlZyk7XFxuK1xcdFxcdHRwKys7XFxuK1xcdH1cXG4rXFxuK1xcdGxwLVxcdTAwM2VvcHRpb25zIHw9IG9wdGlvbnM7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBheGllbmV0X3h4dl9wcm9iZV9pbml0IC0gSW5pdGlhbGl6ZSBYWFYtc3BlY2lmaWMgc3RhdGUgYXQgcHJvYmUgdGltZVxcbisgKiBAbHA6IFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9wcm9iZV9pbml0KHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcXG4re1xcbitcXHRscC1cXHUwMDNleHh2X2lwX3ZlcnNpb24gPSBheGllbmV0X2lvcihscCwgWFhWX0NPTkZJR19SRVZJU0lPTik7XFxuK1xcdGxwLVxcdTAwM2VmZWF0dXJlcyB8PSBYQUVfRkVBVFVSRV9TVEFUUztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGF4aWVuZXRfeHh2X2d0X3Jlc2V0IC0gUHVsc2UgdGhlIFhYViBHVCByZXNldCBsaW5lXFxuKyAqIEBscDogUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcXG4rICovXFxuK3N0YXRpYyB2b2lkIGF4aWVuZXRfeHh2X2d0X3Jlc2V0KHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcXG4re1xcbitcXHR1MzIgdmFsO1xcbitcXG4rXFx0LyogUmVzZXQgR1QgKi9cXG4rXFx0dmFsID0gYXhpZW5ldF9pb3IobHAsIFhYVl9HVF9SRVNFVF9PRkZTRVQpO1xcbitcXHR2YWwgfD0gWFhWX0dUX1JFU0VUX01BU0s7XFxuK1xcdGF4aWVuZXRfaW93KGxwLCBYWFZfR1RfUkVTRVRfT0ZGU0VULCB2YWwpO1xcbitcXHQvKiBBbGxvdyAxIG1zIGZvciB0aGUgR1QgcmVzZXQgdG8gc2V0dGxlIChzZWUgdGltZW91dCBub3RlIGFib3ZlKSAqL1xcbitcXHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XFxuK1xcdHZhbCA9IGF4aWVuZXRfaW9yKGxwLCBYWFZfR1RfUkVTRVRfT0ZGU0VUKTtcXG4rXFx0dmFsIFxcdTAwMjY9IH5YWFZfR1RfUkVTRVRfTUFTSztcXG4rXFx0YXhpZW5ldF9pb3cobHAsIFhYVl9HVF9SRVNFVF9PRkZTRVQsIHZhbCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBheGllbmV0X3h4dl9wb2xsX2xpbmtfcmVhZHkgLSBXYWl0IGZvciBYWFYgR1QgYW5kIFBDUyBibG9jayBsb2NrXFxuKyAqIEBuZGV2OiBQb2ludGVyIHRvIHRoZSBuZXRfZGV2aWNlIHN0cnVjdHVyZVxcbisgKlxcbisgKiBQb2xsIEdUIHdpemFyZCByZXNldC1kb25lIG9uIElQIHYzLjIrLCB0aGVuIFJYIFBDUyBibG9jayBsb2NrLiBCbG9jay1sb2NrXFxuKyAqIGZhaWx1cmUgaXMgbG9nZ2VkIGJ1dCBub3QgcHJvcGFnYXRlZDogaXQgZGVwZW5kcyBvbiBhIGxpdmUgbGluayBwYXJ0bmVyIGFuZFxcbisgKiByZWZlcmVuY2UgY2xvY2ssIHNvIGFuIHVucGx1Z2dlZCBjYWJsZSBtdXN0IG5vdCBmYWlsIGRldmljZSBicmluZy11cC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgaWYgR1QgcmVzZXQtZG9uZSB0aW1lcyBvdXQuXFxuKyAqL1xcbitzdGF0aWMgaW50IGF4aWVuZXRfeHh2X3BvbGxfbGlua19yZWFkeShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0dTMyIHZhbDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdC8qIENvbmZpcm0gWFhWIEV0aGVybmV0IGlzIHVwOiBvbiBJUCB2My4yKywgd2FpdCBmb3IgR1RcXG4rXFx0ICogcmVzZXQtZG9uZSBiZWZvcmUgZnVydGhlciByZWdpc3RlciBhY2Nlc3MsIHRoZW4gcG9sbCB1bnRpbFxcbitcXHQgKiBSWCBQQ1MgYmxvY2sgbG9jayBpcyBhc3NlcnRlZC5cXG4rXFx0ICovXFxuK1xcdGlmIChheGllbmV0X3h4dl9pcF9oYXNfZ3R3aXpfc3RhdHVzKGxwLVxcdTAwM2V4eHZfaXBfdmVyc2lvbikpIHtcXG4rXFx0XFx0cmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGxwLVxcdTAwM2VyZWdzICsgWFhWX1NUQVRfR1RXSVpfT0ZGU0VULFxcbitcXHRcXHRcXHRcXHRcXHQgdmFsLFxcbitcXHRcXHRcXHRcXHRcXHQgKHZhbCBcXHUwMDI2IFhYVl9HVFdJWl9SRVNFVF9ET05FKSA9PSBYWFZfR1RXSVpfUkVTRVRfRE9ORSxcXG4rXFx0XFx0XFx0XFx0XFx0IFhYVl9MSU5LX1BPTExfSU5URVJWQUxfVVMsXFxuK1xcdFxcdFxcdFxcdFxcdCBERUxBWV9PRl9PTkVfTUlMTElTRUMpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcIlhYViBNQUMgR1QgcmVzZXQgbm90IGNvbXBsZXRlISBDcm9zcy1jaGVjayB0aGUgTUFDIHJlZiBjbG9jayBjb25maWd1cmF0aW9uXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQobHAtXFx1MDAzZXJlZ3MgKyBYWFZfU1RBVFJYX0JMS0xDS19PRkZTRVQsXFxuK1xcdFxcdFxcdFxcdCB2YWwsICh2YWwgXFx1MDAyNiBYWFZfUlhfQkxLTENLX01BU0spLFxcbitcXHRcXHRcXHRcXHQgWFhWX0xJTktfUE9MTF9JTlRFUlZBTF9VUyxcXG4rXFx0XFx0XFx0XFx0IERFTEFZX09GX09ORV9NSUxMSVNFQyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcIlhYViBNQUMgYmxvY2sgbG9jayBub3QgY29tcGxldGUhIENyb3NzLWNoZWNrIHRoZSBNQUMgcmVmIGNsb2NrIGNvbmZpZ3VyYXRpb25cXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBheGllbmV0X3h4dl9tYWNfaW5pdCAtIFhYViBNQUMtc3BlY2lmaWMgYnJpbmctdXAgYWZ0ZXIgdGhlIERNQSByZXNldFxcbisgKiBAbmRldjogUG9pbnRlciB0byB0aGUgbmV0X2RldmljZSBzdHJ1Y3R1cmVcXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIgb3RoZXJ3aXNlLlxcbisgKi9cXG4rc3RhdGljIGludCBheGllbmV0X3h4dl9tYWNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGF4aWVuZXRfeHh2X3BvbGxfbGlua19yZWFkeShuZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGxwLVxcdTAwM2VvcHRpb25zIHw9IFhBRV9PUFRJT05fRkNTX1NUUklQO1xcbitcXHRscC1cXHUwMDNlb3B0aW9ucyB8PSBYQUVfT1BUSU9OX0ZDU19JTlNFUlQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYXhpZW5ldF94eHZfcGh5bGlua19zZXRfY2FwYWJpbGl0aWVzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY2ZnKVxcbit7XFxuK1xcdHUzMiBjb3JlX3NwZWVkO1xcbitcXHRib29sIHJ0c3c7XFxuK1xcbitcXHRjb3JlX3NwZWVkID0gYXhpZW5ldF9pb3IobHAsIFhYVl9TVEFUX0NPUkVfU1BFRURfT0ZGU0VUKTtcXG4rXFx0LyogQml0WzE6MF06IDAwPTI1RywgMDE9MTBHLCAxMD1ydW50aW1lLXN3aXRjaGFibGUgMjVHLFxcbitcXHQgKiAxMT1ydW50aW1lLXN3aXRjaGFibGUgMTBHLiBBIHJ1bnRpbWUtc3dpdGNoYWJsZSBjb3JlIGNhbiBvcGVyYXRlIGF0XFxuK1xcdCAqIGVpdGhlciBzcGVlZCwgc28gYWR2ZXJ0aXNlIGJvdGg7IGEgZml4ZWQgY29yZSBhZHZlcnRpc2VzIG9ubHkgaXRzXFxuK1xcdCAqIGNvbmZpZ3VyZWQgc3BlZWQuXFxuK1xcdCAqL1xcbitcXHRydHN3ID0gY29yZV9zcGVlZCBcXHUwMDI2IFhYVl9TVEFUX0NPUkVfU1BFRURfUlRTV19NQVNLO1xcbitcXG4rXFx0aWYgKHJ0c3cgfHwgKGNvcmVfc3BlZWQgXFx1MDAyNiBYWFZfU1RBVF9DT1JFX1NQRUVEXzEwR19NQVNLKSkge1xcbitcXHRcXHRjZmctXFx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDAwRkQ7XFxuK1xcdFxcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIsXFxuK1xcdFxcdFxcdCAgY2ZnLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChydHN3IHx8ICEoY29yZV9zcGVlZCBcXHUwMDI2IFhYVl9TVEFUX0NPUkVfU1BFRURfMTBHX01BU0spKSB7XFxuK1xcdFxcdGNmZy1cXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMjUwMDBGRDtcXG4rXFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8yNUdCQVNFUixcXG4rXFx0XFx0XFx0ICBjZmctXFx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLFxcbitcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgbmVnX21vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IHBjc190b19heGllbmV0X2xvY2FsKHBjcyk7XFxuK1xcbitcXHRzdGF0ZS1cXHUwMDNlZHVwbGV4ID0gRFVQTEVYX0ZVTEw7XFxuK1xcdHN0YXRlLVxcdTAwM2Vhbl9jb21wbGV0ZSA9ICEhKGF4aWVuZXRfaW9yKGxwLCBYWFZfU1RBVF9BTl9TVFNfT0ZGU0VUKSBcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdFhYVl9BTl9DT01QTEVURV9NQVNLKTtcXG4rXFx0c3RhdGUtXFx1MDAzZWxpbmsgPSBheGllbmV0X2lvcihscCwgWFhWX1JYX1NUQVRVU19SRUcxKSBcXHUwMDI2XFxuK1xcdFxcdCAgICAgIFhYVl9SWF9TVEFUVVNfTUFTSztcXG4rXFxuK1xcdGlmIChheGllbmV0X2lvcihscCwgWFhWX1NUQVRfQ09SRV9TUEVFRF9PRkZTRVQpIFxcdTAwMjZcXG4rXFx0ICAgIFhYVl9TVEFUX0NPUkVfU1BFRURfMTBHX01BU0spXFxuK1xcdFxcdHN0YXRlLVxcdTAwM2VzcGVlZCA9IFNQRUVEXzEwMDAwO1xcbitcXHRlbHNlXFxuK1xcdFxcdHN0YXRlLVxcdTAwM2VzcGVlZCA9IFNQRUVEXzI1MDAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGF4aWVuZXRfeHh2X3Bjc19jb25maWcoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBuZWdfbW9kZSxcXG4rXFx0XFx0XFx0XFx0ICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxcbitcXHRcXHRcXHRcXHQgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkdmVydGlzaW5nLFxcbitcXHRcXHRcXHRcXHQgIGJvb2wgcGVybWl0X3BhdXNlX3RvX21hYylcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX3Bjc19vcHMgYXhpZW5ldF94eHZfcGNzX29wcyA9IHtcXG4rXFx0LnBjc19nZXRfc3RhdGUgPSBheGllbmV0X3h4dl9wY3NfZ2V0X3N0YXRlLFxcbitcXHQucGNzX2NvbmZpZyA9IGF4aWVuZXRfeHh2X3Bjc19jb25maWcsXFxuK307XFxuK1xcbisvKipcXG4rICogYXhpZW5ldF94eHZfZ2V0X3JlZ3MgLSBEdW1wIFhYViBNQUMgcmVnaXN0ZXJzIGZvciBldGh0b29sXFxuKyAqIEBscDogUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcXG4rICogQGRhdGE6IEJ1ZmZlciBmb3IgcmVnaXN0ZXIgdmFsdWVzICh6ZXJvZWQgYW5kIHNpemVkIGJ5IHRoZSBjYWxsZXIpXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfcmVncyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsIHUzMiAqZGF0YSlcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGF4aWVuZXRfeHh2X3JlZ19kdW1wX29mZnNldHMpOyBpKyspXFxuK1xcdFxcdGRhdGFbaV0gPSBheGllbmV0X2lvcihscCwgYXhpZW5ldF94eHZfcmVnX2R1bXBfb2Zmc2V0c1tpXSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYXhpZW5ldF8xMGcyNWdfY2xrX2luaXQoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGxwLVxcdTAwM2VkZXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBUaGUgcmVnaXN0ZXIsIFJYIGFuZCBHVCBEUlAgY2xvY2tzIGFyZSBtYW5kYXRvcnkgZm9yIE1BQytQQ1NcXG4rXFx0ICogb3BlcmF0aW9uLCBzbyBmZXRjaCB0aGVtIGFzIHJlcXVpcmVkLlxcbitcXHQgKi9cXG4rXFx0bHAtXFx1MDAzZWF4aV9jbGsgPSBkZXZtX2Nsa19nZXRfZW5hYmxlZChkZXYsIFxcXCJzX2F4aVxcXCIpO1xcbitcXHRpZiAoSVNfRVJSKGxwLVxcdTAwM2VheGlfY2xrKSlcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGxwLVxcdTAwM2VheGlfY2xrKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiY291bGQgbm90IGdldCBBWEkgY2xvY2tcXFxcblxcXCIpO1xcbitcXG4rXFx0bHAtXFx1MDAzZW1pc2NfY2xrc1swXS5pZCA9IFxcXCJyeF9jb3JlXFxcIjtcXG4rXFx0bHAtXFx1MDAzZW1pc2NfY2xrc1sxXS5pZCA9IFxcXCJkcnBcXFwiO1xcbitcXG4rXFx0cmV0ID0gZGV2bV9jbGtfYnVsa19nZXRfZW5hYmxlKGRldiwgMiwgbHAtXFx1MDAzZW1pc2NfY2xrcyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJjb3VsZCBub3QgZ2V0L2VuYWJsZSBYWFYgY2xvY2tzXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogYXhpZW5ldF94eHZfc3RhdHNfdXBkYXRlIC0gTGF0Y2ggYW5kIGFjY3VtdWxhdGUgWFhWIGhhcmR3YXJlIGNvdW50ZXJzXFxuKyAqIEBscDogUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcXG4rICpcXG4rICogVGhlIFhYViBzdGF0aXN0aWNzIGNvdW50ZXJzIGFyZSBjbGVhci1vbi10aWNrIChQRzIxMCk6IHdyaXRpbmcgVElDS19SRUdcXG4rICogbGF0Y2hlcyB0aGUgaW50ZXJuYWwgYWNjdW11bGF0b3JzIGludG8gdGhlIHJlYWRhYmxlIFNUQVRfKl9MU0IvTVNCIHJlZ2lzdGVyc1xcbisgKiBhbmQgY2xlYXJzIHRoZSBpbnRlcm5hbCBhY2N1bXVsYXRvcnMuIEVhY2ggcG9zdC1USUNLIHJlYWQgdGhlcmVmb3JlIHJldHVybnNcXG4rICogdGhlIGNvdW50IGZvciB0aGUgaW50ZXJ2YWwgc2luY2UgdGhlIHByZXZpb3VzIFRJQ0ssIHNvIHNvZnR3YXJlIGFjY3VtdWxhdGVzXFxuKyAqIHRob3NlIGludGVydmFscyBpbnRvIGxwLVxcdTAwM2V4eHZfc3RhdF9iYXNlLiBBIGxhc3QtY291bnRlciBkZWx0YSAoYXMgdXNlZCBieSB0aGVcXG4rICogZnJlZS1ydW5uaW5nIDFHIE1BQyBwYXRoKSBpcyBub3QgbmVlZGVkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgYXhpZW5ldF94eHZfc3RhdHNfdXBkYXRlKHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcXG4re1xcbitcXHR1NjQgY291bnRlcltYWFZfU1RBVF9DT1VOVF07XFxuK1xcdGVudW0geHh2X3N0YXQgc3RhdDtcXG4rXFxuK1xcdC8qIExhdGNoIHRoZSBjbGVhci1vbi10aWNrIHNuYXBzaG90IGFuZCByZWFkIHRoZSBjb3VudGVycyBvdXRzaWRlIHRoZVxcbitcXHQgKiBzZXFjb3VudCB3cml0ZSBzZWN0aW9uLCBzbyBvbmx5IHRoZSBhY2N1bXVsYXRvciB1cGRhdGVzIHJ1biBpbnNpZGUgaXRcXG4rXFx0ICogYW5kIHRoZSByZWFkZXIgcmV0cnkgd2luZG93IHN0YXlzIHNob3J0LlxcbitcXHQgKi9cXG4rXFx0YXhpZW5ldF9pb3cobHAsIFhYVl9USUNLUkVHX09GRlNFVCwgWFhWX1RJQ0tSRUdfU1RBVEVOX01BU0spO1xcbitcXHRmb3IgKHN0YXQgPSAwOyBzdGF0IFxcdTAwM2MgWFhWX1NUQVRfQ09VTlQ7IHN0YXQrKylcXG4rXFx0XFx0Y291bnRlcltzdGF0XSA9IGF4aWVuZXRfeHh2X3JlYWRfY291bnRlcihscCwgc3RhdCk7XFxuK1xcbitcXHR3cml0ZV9zZXFjb3VudF9iZWdpbihcXHUwMDI2bHAtXFx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcXG4rXFx0Zm9yIChzdGF0ID0gMDsgc3RhdCBcXHUwMDNjIFhYVl9TVEFUX0NPVU5UOyBzdGF0KyspXFxuK1xcdFxcdGxwLVxcdTAwM2V4eHZfc3RhdF9iYXNlW3N0YXRdICs9IGNvdW50ZXJbc3RhdF07XFxuK1xcdHdyaXRlX3NlcWNvdW50X2VuZChcXHUwMDI2bHAtXFx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGF4aWVuZXRfeHh2X2dldF9zdGF0czY0IC0gRmlsbCBydG5sX2xpbmtfc3RhdHM2NCBmcm9tIFhYViBjb3VudGVyc1xcbisgKiBAbHA6IFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlXFxuKyAqIEBzdGF0czogT3V0cHV0IHJ0bmxfbGlua19zdGF0czY0IHN0cnVjdHVyZSB0byBwb3B1bGF0ZVxcbisgKi9cXG4rc3RhdGljIHZvaWQgYXhpZW5ldF94eHZfZ2V0X3N0YXRzNjQoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cylcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuK1xcdHU2NCB0eF9od19lcnJvcnM7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcXHUwMDI2bHAtXFx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZXJ4X2NyY19lcnJvcnMgPSBscC1cXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9CQURfRkNTXTtcXG4rXFx0XFx0LyogQm90aCBpbi1yYW5nZSBsZW5ndGggZXJyb3JzIGFuZCBmcmFtZS10b28tbG9uZyAob3ZlcnNpemUpXFxuK1xcdFxcdCAqIGZyYW1lcyBhcmUgSUVFRSA4MDIuMyBsZW5ndGggZXJyb3JzLCBzbyBmb2xkIHRoZW0gdG9nZXRoZXJcXG4rXFx0XFx0ICogaW50byByeF9sZW5ndGhfZXJyb3JzOyByeF9vdmVyX2Vycm9ycyBpcyByZXNlcnZlZCBmb3IgcmVjZWl2ZXJcXG4rXFx0XFx0ICogRklGTy9yaW5nIG92ZXJmbG93LCB3aGljaCB0aGUgWFhWIE1BQyBkb2VzIG5vdCBleHBvc2UuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzdGF0cy1cXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyA9XFxuK1xcdFxcdFxcdGxwLVxcdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX0lOUkFOR0VFUlJdICtcXG4rXFx0XFx0XFx0bHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfT1ZFUlNJWkVdO1xcbitcXHRcXHRzdGF0cy1cXHUwMDNlcnhfZXJyb3JzID0gbHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfVU5ERVJTSVpFXSArXFxuK1xcdFxcdFxcdFxcdCAgIGxwLVxcdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX0ZSQUdNRU5UXSArXFxuK1xcdFxcdFxcdFxcdCAgIGxwLVxcdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX0pBQkJFUl0gK1xcbitcXHRcXHRcXHRcXHQgICBzdGF0cy1cXHUwMDNlcnhfY3JjX2Vycm9ycyArXFxuK1xcdFxcdFxcdFxcdCAgIHN0YXRzLVxcdTAwM2VyeF9sZW5ndGhfZXJyb3JzO1xcbitcXHRcXHRzdGF0cy1cXHUwMDNlbXVsdGljYXN0ID0gbHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfTVVMVElDQVNUXTtcXG4rXFx0XFx0dHhfaHdfZXJyb3JzID0gbHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfQkFEX0ZDU10gK1xcbitcXHRcXHRcXHQgICAgICAgbHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfRlJBTUVfRVJST1JdO1xcbitcXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFxcdTAwMjZscC1cXHUwMDNlaHdfc3RhdHNfc2VxY291bnQsIHN0YXJ0KSk7XFxuK1xcbitcXHQvKiBGb2xkIHRoZSBIVyBUWCBlcnJvciBjb3VudCBpbnRvIHRoZSBzb2Z0d2FyZSB0eF9lcnJvcnMgc2VlZGVkIGZyb21cXG4rXFx0ICogZGV2LVxcdTAwM2VzdGF0cyBieSB0aGUgY2FsbGVyLiBUaGUgWFhWIHhtaXQgcGF0aCBidW1wcyBkZXYtXFx1MDAzZXN0YXRzLnR4X2Vycm9yc1xcbitcXHQgKiBmb3IgZnJhbWVzIGRyb3BwZWQgb24gcGFkIGZhaWx1cmUgYmVmb3JlIHRoZXkgcmVhY2ggdGhlIE1BQywgd2hpbGUgdGhlXFxuK1xcdCAqIEhXIGNvdW50ZXJzIG9ubHkgY292ZXIgZnJhbWVzIHRoZSBNQUMgYWN0dWFsbHkgdHJhbnNtaXR0ZWQ7IHRoZSB0d28gYXJlXFxuK1xcdCAqIGRpc2pvaW50LiBUaGlzIHJ1bnMgb25jZSwgb3V0c2lkZSB0aGUgc2VxY291bnQgcmV0cnkgbG9vcCwgc28gYSByYWNpbmdcXG4rXFx0ICogc3RhdHMgdXBkYXRlIGNhbm5vdCBtYWtlIHRoZSBhY2N1bXVsYXRpb24gcmUtYWRkIG9uIHJldHJ5LlxcbitcXHQgKi9cXG4rXFx0c3RhdHMtXFx1MDAzZXR4X2Vycm9ycyArPSB0eF9od19lcnJvcnM7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBheGllbmV0X3h4dl9nZXRfZXRodG9vbF9zdGF0cyAtIENvcHkgWFhWIGNvdW50ZXJzIGZvciBldGh0b29sIC1TXFxuKyAqIEBscDogUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcXG4rICogQGRhdGE6IE91dHB1dCBidWZmZXIgc2l6ZWQgZm9yIEFSUkFZX1NJWkUoYXhpZW5ldF94eHZfcHJpdl9zdGF0cykgdTY0IHZhbHVlc1xcbisgKi9cXG4rc3RhdGljIHZvaWQgYXhpZW5ldF94eHZfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLCB1NjQgKmRhdGEpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGksIHN0YXJ0O1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4oXFx1MDAyNmxwLVxcdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGF4aWVuZXRfeHh2X3ByaXZfc3RhdHMpOyBpKyspXFxuK1xcdFxcdFxcdGRhdGFbaV0gPSBscC1cXHUwMDNleHh2X3N0YXRfYmFzZVtheGllbmV0X3h4dl9wcml2X3N0YXRzW2ldXTtcXG4rXFx0fSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeShcXHUwMDI2bHAtXFx1MDAzZWh3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpO1xcbit9XFxuK1xcbisvKipcXG4rICogYXhpZW5ldF94eHZfZ2V0X3N0cmluZ3MgLSBDb3B5IFhYViBldGh0b29sIHN0YXRpc3RpY3MgbmFtZSBzdHJpbmdzXFxuKyAqIEBkYXRhOiBPdXRwdXQgYnVmZmVyIGZvciB0aGUgc3RhdGlzdGljcyBuYW1lIHN0cmluZ3NcXG4rICovXFxuK3N0YXRpYyB2b2lkIGF4aWVuZXRfeHh2X2dldF9zdHJpbmdzKHU4ICpkYXRhKVxcbit7XFxuK1xcdG1lbWNweShkYXRhLCBheGllbmV0X3h4dl9ldGh0b29sX3N0YXRzX3N0cmluZ3MsXFxuK1xcdCAgICAgICBzaXplb2YoYXhpZW5ldF94eHZfZXRodG9vbF9zdGF0c19zdHJpbmdzKSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBheGllbmV0X3h4dl9nZXRfc3NldF9jb3VudCAtIE51bWJlciBvZiBYWFYgZXRodG9vbCBzdGF0aXN0aWNzXFxuKyAqXFxuKyAqIFJldHVybjogQ291bnQgb2YgWFhWIGhhcmR3YXJlIHN0YXRpc3RpY3MgcmVwb3J0ZWQgdmlhIGV0aHRvb2wgLVMuXFxuKyAqL1xcbitzdGF0aWMgaW50IGF4aWVuZXRfeHh2X2dldF9zc2V0X2NvdW50KHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIEFSUkFZX1NJWkUoYXhpZW5ldF94eHZfZXRodG9vbF9zdGF0c19zdHJpbmdzKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGF4aWVuZXRfeHh2X2dldF9wYXVzZV9zdGF0cyAtIEZpbGwgZXRodG9vbCBwYXVzZSBmcmFtZSBzdGF0aXN0aWNzXFxuKyAqIEBscDogUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcXG4rICogQHBhdXNlX3N0YXRzOiBPdXRwdXQgZXRodG9vbF9wYXVzZV9zdGF0cyBzdHJ1Y3R1cmUgdG8gcG9wdWxhdGVcXG4rICovXFxuK3N0YXRpYyB2b2lkIGF4aWVuZXRfeHh2X2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cylcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcXHUwMDI2bHAtXFx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcXG4rXFx0XFx0cGF1c2Vfc3RhdHMtXFx1MDAzZXR4X3BhdXNlX2ZyYW1lcyA9XFxuK1xcdFxcdFxcdGxwLVxcdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1RYX1BBVVNFXTtcXG4rXFx0XFx0cGF1c2Vfc3RhdHMtXFx1MDAzZXJ4X3BhdXNlX2ZyYW1lcyA9XFxuK1xcdFxcdFxcdGxwLVxcdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX1BBVVNFXTtcXG4rXFx0fSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeShcXHUwMDI2bHAtXFx1MDAzZWh3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpO1xcbit9XFxuK1xcbisvKipcXG4rICogYXhpZW5ldF94eHZfZ2V0X2V0aF9tYWNfc3RhdHMgLSBGaWxsIElFRUUgODAyLjMgTUFDIHN0YXRpc3RpY3NcXG4rICogQGxwOiBQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxcbisgKiBAbWFjX3N0YXRzOiBPdXRwdXQgZXRodG9vbF9ldGhfbWFjX3N0YXRzIHN0cnVjdHVyZSB0byBwb3B1bGF0ZVxcbisgKi9cXG4rc3RhdGljIHZvaWQgYXhpZW5ldF94eHZfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cylcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcXHUwMDI2bHAtXFx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcXG4rXFx0XFx0bWFjX3N0YXRzLVxcdTAwM2VGcmFtZXNUcmFuc21pdHRlZE9LID1cXG4rXFx0XFx0XFx0bHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9QQUNLRVRTXTtcXG4rXFx0XFx0bWFjX3N0YXRzLVxcdTAwM2VGcmFtZXNSZWNlaXZlZE9LID1cXG4rXFx0XFx0XFx0bHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9QQUNLRVRTXTtcXG4rXFx0XFx0bWFjX3N0YXRzLVxcdTAwM2VPY3RldHNUcmFuc21pdHRlZE9LID1cXG4rXFx0XFx0XFx0bHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9CWVRFU107XFxuK1xcdFxcdG1hY19zdGF0cy1cXHUwMDNlT2N0ZXRzUmVjZWl2ZWRPSyA9XFxuK1xcdFxcdFxcdGxwLVxcdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX1RPVEFMX0dPT0RfQllURVNdO1xcbitcXHRcXHRtYWNfc3RhdHMtXFx1MDAzZUZyYW1lQ2hlY2tTZXF1ZW5jZUVycm9ycyA9XFxuK1xcdFxcdFxcdGxwLVxcdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX0JBRF9GQ1NdO1xcbitcXHRcXHRtYWNfc3RhdHMtXFx1MDAzZU11bHRpY2FzdEZyYW1lc1htaXR0ZWRPSyA9XFxuK1xcdFxcdFxcdGxwLVxcdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1RYX01VTFRJQ0FTVF07XFxuK1xcdFxcdG1hY19zdGF0cy1cXHUwMDNlQnJvYWRjYXN0RnJhbWVzWG1pdHRlZE9LID1cXG4rXFx0XFx0XFx0bHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfQlJPQURDQVNUXTtcXG4rXFx0XFx0bWFjX3N0YXRzLVxcdTAwM2VNdWx0aWNhc3RGcmFtZXNSZWNlaXZlZE9LID1cXG4rXFx0XFx0XFx0bHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfTVVMVElDQVNUXTtcXG4rXFx0XFx0bWFjX3N0YXRzLVxcdTAwM2VCcm9hZGNhc3RGcmFtZXNSZWNlaXZlZE9LID1cXG4rXFx0XFx0XFx0bHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfQlJPQURDQVNUXTtcXG4rXFx0XFx0bWFjX3N0YXRzLVxcdTAwM2VJblJhbmdlTGVuZ3RoRXJyb3JzID1cXG4rXFx0XFx0XFx0bHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfSU5SQU5HRUVSUl07XFxuK1xcdH0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoXFx1MDAyNmxwLVxcdTAwM2Vod19zdGF0c19zZXFjb3VudCwgc3RhcnQpKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGF4aWVuZXRfeHh2X2dldF9ybW9uX3N0YXRzIC0gRmlsbCBSTU9OIHN0YXRpc3RpY3MgYW5kIGhpc3RvZ3JhbSByYW5nZXNcXG4rICogQGxwOiBQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxcbisgKiBAcm1vbl9zdGF0czogT3V0cHV0IGV0aHRvb2xfcm1vbl9zdGF0cyBzdHJ1Y3R1cmUgdG8gcG9wdWxhdGVcXG4rICogQHJhbmdlczogU2V0IHRvIHRoZSBSTU9OIGhpc3RvZ3JhbSByYW5nZSB0YWJsZVxcbisgKi9cXG4rc3RhdGljIHZvaWQgYXhpZW5ldF94eHZfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSAqKnJhbmdlcylcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcXHUwMDI2bHAtXFx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcXG4rXFx0XFx0cm1vbl9zdGF0cy1cXHUwMDNldW5kZXJzaXplX3BrdHMgPVxcbitcXHRcXHRcXHRscC1cXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9VTkRFUlNJWkVdO1xcbitcXHRcXHRybW9uX3N0YXRzLVxcdTAwM2VvdmVyc2l6ZV9wa3RzID1cXG4rXFx0XFx0XFx0bHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfT1ZFUlNJWkVdO1xcbitcXHRcXHRybW9uX3N0YXRzLVxcdTAwM2VmcmFnbWVudHMgPVxcbitcXHRcXHRcXHRscC1cXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9GUkFHTUVOVF07XFxuK1xcdFxcdHJtb25fc3RhdHMtXFx1MDAzZWphYmJlcnMgPVxcbitcXHRcXHRcXHRscC1cXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9KQUJCRVJdO1xcbitcXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFxcdTAwMjZscC1cXHUwMDNlaHdfc3RhdHNfc2VxY291bnQsIHN0YXJ0KSk7XFxuK1xcbitcXHQvKiBYWFYgY3VycmVudGx5IGV4cG9zZXMgb25seSBhZ2dyZWdhdGUgUk1PTiBjb3VudGVycywgbm90IHBlci1iaW5cXG4rXFx0ICogaGlzdG9ncmFtIGJ1Y2tldHMuIEtlZXAgcmFuZ2VzIE5VTEwgdW50aWwgaGlzdG9ncmFtIGJpbnMgYXJlIHdpcmVkLlxcbitcXHQgKi9cXG4rXFx0KnJhbmdlcyA9IE5VTEw7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBheGllbmV0X2NvbmZpZyBheGllbmV0XzEwZzI1Z19jb25maWcgPSB7XFxuK1xcdC5zd19wYWRkaW5nID0gdHJ1ZSxcXG4rXFx0LmludGVybmFsX3BjcyA9IHRydWUsXFxuK1xcdC5yZWdzX24gPSBYWFZfUkVHU19OLFxcbitcXHQuY2xrX2luaXQgPSBheGllbmV0XzEwZzI1Z19jbGtfaW5pdCxcXG4rXFx0LnNldG9wdGlvbnMgPSBheGllbmV0X3h4dl9zZXRvcHRpb25zLFxcbitcXHQucHJvYmVfaW5pdCA9IGF4aWVuZXRfeHh2X3Byb2JlX2luaXQsXFxuK1xcdC5ndF9yZXNldCA9IGF4aWVuZXRfeHh2X2d0X3Jlc2V0LFxcbitcXHQubWFjX2luaXQgPSBheGllbmV0X3h4dl9tYWNfaW5pdCxcXG4rXFx0LmdldF9yZWdzID0gYXhpZW5ldF94eHZfZ2V0X3JlZ3MsXFxuK1xcdC5waHlsaW5rX3NldF9jYXBzID0gYXhpZW5ldF94eHZfcGh5bGlua19zZXRfY2FwYWJpbGl0aWVzLFxcbitcXHQucGNzX29wcyA9IFxcdTAwMjZheGllbmV0X3h4dl9wY3Nfb3BzLFxcbitcXHQuc3RhdHNfdXBkYXRlID0gYXhpZW5ldF94eHZfc3RhdHNfdXBkYXRlLFxcbitcXHQuZ2V0X3N0YXRzNjQgPSBheGllbmV0X3h4dl9nZXRfc3RhdHM2NCxcXG4rXFx0LmdldF9ldGh0b29sX3N0YXRzID0gYXhpZW5ldF94eHZfZ2V0X2V0aHRvb2xfc3RhdHMsXFxuK1xcdC5nZXRfc3RyaW5ncyA9IGF4aWVuZXRfeHh2X2dldF9zdHJpbmdzLFxcbitcXHQuZ2V0X3NzZXRfY291bnQgPSBheGllbmV0X3h4dl9nZXRfc3NldF9jb3VudCxcXG4rXFx0LmdldF9wYXVzZV9zdGF0cyA9IGF4aWVuZXRfeHh2X2dldF9wYXVzZV9zdGF0cyxcXG4rXFx0LmdldF9ldGhfbWFjX3N0YXRzID0gYXhpZW5ldF94eHZfZ2V0X2V0aF9tYWNfc3RhdHMsXFxuK1xcdC5nZXRfcm1vbl9zdGF0cyA9IGF4aWVuZXRfeHh2X2dldF9ybW9uX3N0YXRzLFxcbit9O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfeHh2LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfeHh2LmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmViZmE3ZDU3YTg1OTFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X3h4di5oXFxuQEAgLTAsMCArMSwxNDEgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xcbisvKlxcbisgKiBYWFYgKDEwRy8yNUcpIHN1cHBvcnRcXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy5cXG4rICovXFxuK1xcbisjaWZuZGVmIFhJTElOWF9BWElFTkVUX1hYVl9IXFxuKyNkZWZpbmUgWElMSU5YX0FYSUVORVRfWFhWX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRzLmhcXHUwMDNlXFxuK1xcbitzdHJ1Y3QgYXhpZW5ldF9sb2NhbDtcXG4rc3RydWN0IGF4aWVuZXRfY29uZmlnO1xcbitcXG4rI2RlZmluZSBYWFZfUkVHU19OXFx0XFx0NDZcXG4rXFxuKy8qIFhYViBNQUMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi9cXG4rI2RlZmluZSBYWFZfR1RfUkVTRVRfT0ZGU0VUXFx0XFx0MHgwMDAwMDAwMFxcbisjZGVmaW5lIFhYVl9SRVNFVF9PRkZTRVRcXHRcXHQweDAwMDAwMDA0XFxuKyNkZWZpbmUgWFhWX01PREVfT0ZGU0VUXFx0XFx0XFx0MHgwMDAwMDAwOFxcbisjZGVmaW5lIFhYVl9UQ19PRkZTRVRcXHRcXHRcXHQweDAwMDAwMDBDXFxuKyNkZWZpbmUgWFhWX1JDVzFfT0ZGU0VUXFx0XFx0XFx0MHgwMDAwMDAxNFxcbisjZGVmaW5lIFhYVl9KVU1fT0ZGU0VUXFx0XFx0XFx0MHgwMDAwMDAxOFxcbisjZGVmaW5lIFhYVl9WTF9MRU5HVEhfT0ZGU0VUXFx0XFx0MHgwMDAwMDAxQ1xcbisjZGVmaW5lIFhYVl9USUNLUkVHX09GRlNFVFxcdFxcdDB4MDAwMDAwMjBcXG4rI2RlZmluZSBYWFZfQ09ORklHX1JFVklTSU9OXFx0XFx0MHgwMDAwMDAyNFxcbisjZGVmaW5lIFhYVl9DT05GSUdfMTU4OF9PRkZTRVRcXHRcXHQweDAwMDAwMDM4XFxuKyNkZWZpbmUgWFhWX0NPTkZJR19UWF9GTE9XX0NUUkwxX09GRlNFVFxcdDB4MDAwMDAwNDBcXG4rI2RlZmluZSBYWFZfQ09ORklHX1JYX0ZMT1dfQ1RSTDFfT0ZGU0VUXFx0MHgwMDAwMDA5NFxcbisjZGVmaW5lIFhYVl9DT05GSUdfUlhfRkxPV19DVFJMMl9PRkZTRVRcXHQweDAwMDAwMDk4XFxuKyNkZWZpbmUgWFhWX0NPTkZJR19SU0ZFQ19PRkZTRVRcXHRcXHQweDAwMDAwMEQwXFxuKyNkZWZpbmUgWFhWX0NPTkZJR19GRUNfT0ZGU0VUXFx0XFx0MHgwMDAwMDBENFxcbisjZGVmaW5lIFhYVl9BTl9DVEwxX09GRlNFVFxcdFxcdDB4MDAwMDAwRTBcXG4rI2RlZmluZSBYWFZfQU5fQ1RMMl9PRkZTRVRcXHRcXHQweDAwMDAwMEU0XFxuKyNkZWZpbmUgWFhWX0FOX0FCSUxJVFlfT0ZGU0VUXFx0XFx0MHgwMDAwMDBGOFxcbisjZGVmaW5lIFhYVl9MVF9DVEwxX09GRlNFVFxcdFxcdDB4MDAwMDAxMDBcXG4rI2RlZmluZSBYWFZfU1dJVENIX0NPUkVfU1BFRURfT0ZGU0VUXFx0MHgwMDAwMDEzOFxcbisjZGVmaW5lIFhYVl9DT05GSUdfMTU4OF8zMkJJVF9PRkZTRVRcXHQweDAwMDAwMTNDXFxuKyNkZWZpbmUgWFhWX1RYX0NPTkZJR18xNTg4X09GRlNFVFxcdDB4MDAwMDAxNDBcXG4rI2RlZmluZSBYWFZfUlhfQ09ORklHXzE1ODhfT0ZGU0VUXFx0MHgwMDAwMDE0NFxcbisjZGVmaW5lIFhYVl9HVFdJWl9DVFJMX09GRlNFVFxcdFxcdDB4MDAwMDAxNTRcXG4rI2RlZmluZSBYWFZfU1RBVFJYX1NUQVRVUzBfT0ZGU0VUXFx0MHgwMDAwMDQwMFxcbisjZGVmaW5lIFhYVl9SWF9TVEFUVVNfUkVHMVxcdFxcdDB4MDAwMDA0MDRcXG4rI2RlZmluZSBYWFZfU1RBVFJYX1NUQVRVUzJfT0ZGU0VUXFx0MHgwMDAwMDQwOFxcbisjZGVmaW5lIFhYVl9TVEFUUlhfQkxLTENLX09GRlNFVFxcdDB4MDAwMDA0MENcXG4rI2RlZmluZSBYWFZfU1RBVF9SWF9SU0ZFQ19TVEFUVVNfT0ZGU0VUXFx0MHgwMDAwMDQzQ1xcbisjZGVmaW5lIFhYVl9TVEFUX1JYX0ZFQ19TVEFUVVNfT0ZGU0VUXFx0MHgwMDAwMDQ0OFxcbisjZGVmaW5lIFhYVl9TVEFUX1RYX1JTRkVDX1NUQVRVU19PRkZTRVRcXHQweDAwMDAwNDRDXFxuKyNkZWZpbmUgWFhWX1NUQVRfVFhfRkxPV19DVFJMMV9PRkZTRVRcXHQweDAwMDAwNDUwXFxuKyNkZWZpbmUgWFhWX1NUQVRfUlhfRkxPV19DVFJMMV9PRkZTRVRcXHQweDAwMDAwNDU0XFxuKyNkZWZpbmUgWFhWX1NUQVRfQU5fU1RTX09GRlNFVFxcdFxcdDB4MDAwMDA0NThcXG4rI2RlZmluZSBYWFZfU1RBVF9BTl9MUF9TVEFUVVNfT0ZGU0VUXFx0MHgwMDAwMDQ1Q1xcbisjZGVmaW5lIFhYVl9TVEFUX0FOX0xJTktfQ1RMX09GRlNFVFxcdDB4MDAwMDA0NjBcXG4rI2RlZmluZSBYWFZfU1RBVF9MVF9TVEFUVVMxX09GRlNFVFxcdDB4MDAwMDA0NjRcXG4rI2RlZmluZSBYWFZfU1RBVF9MVF9TVEFUVVMyX09GRlNFVFxcdDB4MDAwMDA0NjhcXG4rI2RlZmluZSBYWFZfU1RBVF9MVF9TVEFUVVMzX09GRlNFVFxcdDB4MDAwMDA0NkNcXG4rI2RlZmluZSBYWFZfU1RBVF9MVF9TVEFUVVM0X09GRlNFVFxcdDB4MDAwMDA0NzBcXG4rI2RlZmluZSBYWFZfU1RBVF9MVF9DT0VGRjBfT0ZGU0VUXFx0MHgwMDAwMDQ3NFxcbisjZGVmaW5lIFhYVl9TVEFUX1JYX1ZBTElEX0NUUkxfQ09ERV9PRkZTRVRcXHQweDAwMDAwNDk0XFxuKyNkZWZpbmUgWFhWX1NUQVRfQ09SRV9TUEVFRF9PRkZTRVRcXHQweDAwMDAwNDk4XFxuKyNkZWZpbmUgWFhWX1NUQVRfVFNOX09GRlNFVFxcdFxcdDB4MDAwMDA0OUNcXG4rI2RlZmluZSBYWFZfU1RBVF9HVFdJWl9PRkZTRVRcXHRcXHQweDAwMDAwNEEwXFxuKyNkZWZpbmUgWFhWX1NUQVRfQU5fTElOS19DVEwyX09GRlNFVFxcdDB4MDAwMDA5RjBcXG4rXFxuKy8qIFhYViBzdGF0aXN0aWNzIGNvdW50ZXIgcmVnaXN0ZXJzIChQRzIxMCkuIEVhY2ggY291bnRlciBpcyBhIHBhaXIgb2YgMzItYml0XFxuKyAqIHJlZ2lzdGVyczsgdGhlIE1TQiByZWdpc3RlciBpcyBYWFZfU1RBVF9NU0JfT0ZGU0VUIGJ5dGVzIGFib3ZlIHRoZSBMU0IuXFxuKyAqL1xcbisjZGVmaW5lIFhYVl9TVEFUX01TQl9PRkZTRVRcXHRcXHRcXHQ0XFxuKyNkZWZpbmUgWFhWX1NUQVRfVFhfRlJBTUVfRVJST1JfT0ZGU0VUXFx0XFx0MHgwMDAwMDZBMFxcbisjZGVmaW5lIFhYVl9TVEFUX1RYX1RPVEFMX1BBQ0tFVFNfT0ZGU0VUXFx0MHgwMDAwMDcwMFxcbisjZGVmaW5lIFhYVl9TVEFUX1RYX1RPVEFMX0dPT0RfUEFDS0VUU19PRkZTRVRcXHQweDAwMDAwNzA4XFxuKyNkZWZpbmUgWFhWX1NUQVRfVFhfVE9UQUxfQllURVNfT0ZGU0VUXFx0XFx0MHgwMDAwMDcxMFxcbisjZGVmaW5lIFhYVl9TVEFUX1RYX1RPVEFMX0dPT0RfQllURVNfT0ZGU0VUXFx0MHgwMDAwMDcxOFxcbisjZGVmaW5lIFhYVl9TVEFUX1RYX0JBRF9GQ1NfT0ZGU0VUXFx0XFx0MHgwMDAwMDdCOFxcbisjZGVmaW5lIFhYVl9TVEFUX1RYX01VTFRJQ0FTVF9PRkZTRVRcXHRcXHQweDAwMDAwN0Q4XFxuKyNkZWZpbmUgWFhWX1NUQVRfVFhfQlJPQURDQVNUX09GRlNFVFxcdFxcdDB4MDAwMDA3RTBcXG4rI2RlZmluZSBYWFZfU1RBVF9UWF9QQVVTRV9PRkZTRVRcXHRcXHQweDAwMDAwN0YwXFxuKyNkZWZpbmUgWFhWX1NUQVRfUlhfVE9UQUxfUEFDS0VUU19PRkZTRVRcXHQweDAwMDAwODA4XFxuKyNkZWZpbmUgWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9QQUNLRVRTX09GRlNFVFxcdDB4MDAwMDA4MTBcXG4rI2RlZmluZSBYWFZfU1RBVF9SWF9UT1RBTF9CWVRFU19PRkZTRVRcXHRcXHQweDAwMDAwODE4XFxuKyNkZWZpbmUgWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9CWVRFU19PRkZTRVRcXHQweDAwMDAwODIwXFxuKyNkZWZpbmUgWFhWX1NUQVRfUlhfVU5ERVJTSVpFX09GRlNFVFxcdFxcdDB4MDAwMDA4OThcXG4rI2RlZmluZSBYWFZfU1RBVF9SWF9GUkFHTUVOVF9PRkZTRVRcXHRcXHQweDAwMDAwOEEwXFxuKyNkZWZpbmUgWFhWX1NUQVRfUlhfT1ZFUlNJWkVfT0ZGU0VUXFx0XFx0MHgwMDAwMDhBOFxcbisjZGVmaW5lIFhYVl9TVEFUX1JYX0pBQkJFUl9PRkZTRVRcXHRcXHQweDAwMDAwOEI4XFxuKyNkZWZpbmUgWFhWX1NUQVRfUlhfQkFEX0ZDU19PRkZTRVRcXHRcXHQweDAwMDAwOEMwXFxuKyNkZWZpbmUgWFhWX1NUQVRfUlhfTVVMVElDQVNUX09GRlNFVFxcdFxcdDB4MDAwMDA4RTBcXG4rI2RlZmluZSBYWFZfU1RBVF9SWF9CUk9BRENBU1RfT0ZGU0VUXFx0XFx0MHgwMDAwMDhFOFxcbisjZGVmaW5lIFhYVl9TVEFUX1JYX1BBVVNFX09GRlNFVFxcdFxcdDB4MDAwMDA4RjhcXG4rI2RlZmluZSBYWFZfU1RBVF9SWF9JTlJBTkdFRVJSX09GRlNFVFxcdFxcdDB4MDAwMDA5MDhcXG4rXFxuKy8qIFhYViBNQUMgUmVnaXN0ZXIgTWFzayBEZWZpbml0aW9ucyAqL1xcbisjZGVmaW5lIFhYVl9HVF9SRVNFVF9NQVNLXFx0XFx0QklUKDApXFxuKyNkZWZpbmUgWFhWX1RDX1RYX01BU0tcXHRcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBYWFZfUkNXMV9SWF9NQVNLXFx0XFx0QklUKDApXFxuKyNkZWZpbmUgWFhWX1JDVzFfRkNTX01BU0tcXHRcXHRCSVQoMSlcXG4rI2RlZmluZSBYWFZfVENfRkNTX01BU0tcXHRcXHRcXHRCSVQoMSlcXG4rI2RlZmluZSBYWFZfUlhfQkxLTENLX01BU0tcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBYWFZfVElDS1JFR19TVEFURU5fTUFTS1xcdFxcdEJJVCgwKVxcbisjZGVmaW5lIFhYVl9HVFdJWl9SRVNFVF9ET05FXFx0XFx0KEJJVCgwKSB8IEJJVCgxKSlcXG4rI2RlZmluZSBYWFZfTUFKX01BU0tcXHRcXHRcXHRHRU5NQVNLKDcsIDApXFxuKyNkZWZpbmUgWFhWX01JTl9NQVNLXFx0XFx0XFx0R0VOTUFTSygxNSwgOClcXG4rLyogSVAgdjMuMisgZXhwb3NlcyBHVCB3aXphcmQgc3RhdHVzIGJlZm9yZSBvdGhlciByZWdpc3RlciBhY2Nlc3MgKFBHMjEwKS4gKi9cXG4rI2RlZmluZSBYWFZfSVBfVkVSX0dUV0laX01BSl9NSU5cXHQzXFxuKyNkZWZpbmUgWFhWX0lQX1ZFUl9HVFdJWl9NSU5fTUlOXFx0MlxcbisjZGVmaW5lIFhYVl9BTl9DT01QTEVURV9NQVNLXFx0XFx0QklUKDIpXFxuKyNkZWZpbmUgWFhWX1NUQVRfQ09SRV9TUEVFRF9SVFNXX01BU0tcXHRCSVQoMSlcXG4rI2RlZmluZSBYWFZfU1RBVF9DT1JFX1NQRUVEXzEwR19NQVNLXFx0QklUKDApXFxuKyNkZWZpbmUgWFhWX1JYX1NUQVRVU19NQVNLXFx0XFx0QklUKDApXFxuK1xcbisvKiBYWFYgKDEwRy8yNUcpIE1BQyBzdGF0aXN0aWNzIGNvdW50ZXJzLCB1c2VkIHRvIGluZGV4IHh4dl9zdGF0X2Jhc2VbXS4gKi9cXG4rZW51bSB4eHZfc3RhdCB7XFxuK1xcdFhYVl9TVEFUX1JYX1RPVEFMX1BBQ0tFVFMgPSAwLFxcbitcXHRYWFZfU1RBVF9SWF9UT1RBTF9HT09EX1BBQ0tFVFMsXFxuK1xcdFhYVl9TVEFUX1JYX1RPVEFMX0JZVEVTLFxcbitcXHRYWFZfU1RBVF9SWF9UT1RBTF9HT09EX0JZVEVTLFxcbitcXHRYWFZfU1RBVF9SWF9CQURfRkNTLFxcbitcXHRYWFZfU1RBVF9SWF9JTlJBTkdFRVJSLFxcbitcXHRYWFZfU1RBVF9SWF9NVUxUSUNBU1QsXFxuK1xcdFhYVl9TVEFUX1JYX0JST0FEQ0FTVCxcXG4rXFx0WFhWX1NUQVRfUlhfVU5ERVJTSVpFLFxcbitcXHRYWFZfU1RBVF9SWF9GUkFHTUVOVCxcXG4rXFx0WFhWX1NUQVRfUlhfSkFCQkVSLFxcbitcXHRYWFZfU1RBVF9SWF9PVkVSU0laRSxcXG4rXFx0WFhWX1NUQVRfUlhfUEFVU0UsXFxuK1xcdFhYVl9TVEFUX1RYX1RPVEFMX1BBQ0tFVFMsXFxuK1xcdFhYVl9TVEFUX1RYX1RPVEFMX0dPT0RfUEFDS0VUUyxcXG4rXFx0WFhWX1NUQVRfVFhfVE9UQUxfQllURVMsXFxuK1xcdFhYVl9TVEFUX1RYX1RPVEFMX0dPT0RfQllURVMsXFxuK1xcdFhYVl9TVEFUX1RYX0JBRF9GQ1MsXFxuK1xcdFhYVl9TVEFUX1RYX0ZSQU1FX0VSUk9SLFxcbitcXHRYWFZfU1RBVF9UWF9NVUxUSUNBU1QsXFxuK1xcdFhYVl9TVEFUX1RYX0JST0FEQ0FTVCxcXG4rXFx0WFhWX1NUQVRfVFhfUEFVU0UsXFxuK1xcdFhYVl9TVEFUX0NPVU5ULFxcbit9O1xcbitcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBheGllbmV0X2NvbmZpZyBheGllbmV0XzEwZzI1Z19jb25maWc7XFxuK1xcbisjZW5kaWYgLyogWElMSU5YX0FYSUVORVRfWFhWX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MDc6MTQuNjc2MzczMzg5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyODU5OTE5NTM5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdmVuZG9yLXNwZWNpZmljIFhpbGlueCBBWEkgLyBYWFYgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvKSwgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBYaWxpbnggWFhWIDEwRy8yNUcgRXRoZXJuZXQgU3Vic3lzdGVtIEZQR0EgSVAgY29yZS4gVGhpcyBoYXJkd2FyZSByZXF1aXJlcyBwaHlzaWNhbCBYaWxpbngvQU1EIEZQR0EvU29DIGhhcmR3YXJlIGFuZCBjYW5ub3QgYmUgcmVhY2hlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ1ZDUwMmZjMTkyOWY3M2UwZmViODA3MzlkYmRlMzJhMTc2OGQ4YzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMjowNzoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveGxueCx4eHYtZXRoZXJuZXQueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveGxueCx4eHYtZXRoZXJuZXQueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjJiZTNhZGUxMWQ0NjVcbi0tLSAvZGV2L251bGxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveGxueCx4eHYtZXRoZXJuZXQueWFtbFxuQEAgLTAsMCArMSwxMDcgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbislWUFNTCAxLjJcbistLS1cbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC94bG54LHh4di1ldGhlcm5ldC55YW1sI1xuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuK1xuK3RpdGxlOiBYaWxpbnggWFhWIDEwRy8yNUcgRXRoZXJuZXQgU3Vic3lzdGVtXG4rXG4rbWFpbnRhaW5lcnM6XG4rICAtIFJhZGhleSBTaHlhbSBQYW5kZXkgXHUwMDNjcmFkaGV5LnNoeWFtLnBhbmRleUBhbWQuY29tXHUwMDNlXG4rICAtIFN1cmFqIEd1cHRhIFx1MDAzY3N1cmFqLmd1cHRhMkBhbWQuY29tXHUwMDNlXG4rXG4rZGVzY3JpcHRpb246XG4rICBUaGUgWGlsaW54IFhYViBFdGhlcm5ldCBTdWJzeXN0ZW0gaW1wbGVtZW50cyBhIDEwRy8yNUcgRXRoZXJuZXQgTUFDIHdpdGggYW5cbisgIGluLWNvcmUgUENTL1BNQSBkcml2aW5nIGEgaGlnaC1zcGVlZCBzZXJpYWwgdHJhbnNjZWl2ZXIuIEl0IHN1cHBvcnRzIHRoZVxuKyAgMTBHQkFTRS1SIGFuZCAyNUdCQVNFLVIgbGluZSByYXRlcywgd2l0aCAyNUcgb3BlcmF0aW9uIGZvbGxvd2luZyB0aGUgMjVHXG4rICBFdGhlcm5ldCBDb25zb3J0aXVtIHNwZWNpZmljYXRpb24uIEl0IGhhcyBubyBleHRlcm5hbCBNRElPIFBIWSwgYW5kIGl0c1xuKyAgcGF5bG9hZCBpcyBtb3ZlZCBieSBhbiBleHRlcm5hbCBBWEkgRE1BIChvciBtdWx0aWNoYW5uZWwgRE1BKSBjb250cm9sbGVyXG4rICByZWZlcmVuY2VkIHRocm91Z2ggdGhlIFwiZG1hc1wiIHByb3BlcnR5LlxuK1xuK3Byb3BlcnRpZXM6XG4rICBjb21wYXRpYmxlOlxuKyAgICBjb25zdDogeGxueCx4eHYtZXRoZXJuZXQtMS4wXG4rXG4rICByZWc6XG4rICAgIG1heEl0ZW1zOiAxXG4rICAgIGRlc2NyaXB0aW9uOiBNQUMgY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVyIHNwYWNlLlxuK1xuKyAgY2xvY2tzOlxuKyAgICBpdGVtczpcbisgICAgICAtIGRlc2NyaXB0aW9uOiBSWCBBWEk0LVN0cmVhbSBjbG9jay5cbisgICAgICAtIGRlc2NyaXB0aW9uOiBHVCBEUlAgY2xvY2suXG4rICAgICAgLSBkZXNjcmlwdGlvbjogQVhJNC1MaXRlIHJlZ2lzdGVyIGNsb2NrLlxuK1xuKyAgY2xvY2stbmFtZXM6XG4rICAgIGl0ZW1zOlxuKyAgICAgIC0gY29uc3Q6IHJ4X2NvcmVcbisgICAgICAtIGNvbnN0OiBkcnBcbisgICAgICAtIGNvbnN0OiBzX2F4aVxuK1xuKyAgcGh5LW1vZGU6XG4rICAgIGVudW06XG4rICAgICAgLSAxMGdiYXNlLXJcbisgICAgICAtIDI1Z2Jhc2UtclxuK1xuKyAgeGxueCxyeG1lbTpcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgU2l6ZSBpbiBieXRlcyBvZiB0aGUgUngvVHggcGFja2V0IGJ1ZmZlciBtZW1vcnkgYnVpbHQgaW50byB0aGUgSVAuIEl0IGlzXG4rICAgICAgZml4ZWQgYnkgdGhlIGhhcmR3YXJlIGRlc2lnbiBhbmQgYm91bmRzIHRoZSBsYXJnZXN0IGZyYW1lIChqdW1ibyBNVFUpIHRoZVxuKyAgICAgIGRldmljZSBjYW4gYWNjZXB0LlxuKyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy91aW50MzJcbitcbisgIGRtYXM6XG4rICAgIG1pbkl0ZW1zOiAyXG4rICAgIG1heEl0ZW1zOiAzMlxuKyAgICBkZXNjcmlwdGlvbjogVFggYW5kIFJYIERNQSBjaGFubmVsIHBoYW5kbGUuXG4rXG4rICBkbWEtbmFtZXM6XG4rICAgIGl0ZW1zOlxuKyAgICAgIHBhdHRlcm46IFwiXlt0cl14X2NoYW4oWzAtOV18MVswLTVdKSRcIlxuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBTaG91bGQgYmUgXCJ0eF9jaGFuMFwiLCBcInR4X2NoYW4xXCIgLi4uIFwidHhfY2hhbjE1XCIgZm9yIERNQSBUeCBjaGFubmVsIGFuZFxuKyAgICAgIFwicnhfY2hhbjBcIiwgXCJyeF9jaGFuMVwiIC4uLiBcInJ4X2NoYW4xNVwiIGZvciBETUEgUnggY2hhbm5lbC5cbisgICAgbWluSXRlbXM6IDJcbisgICAgbWF4SXRlbXM6IDMyXG4rXG4rcmVxdWlyZWQ6XG4rICAtIGNvbXBhdGlibGVcbisgIC0gcmVnXG4rICAtIGNsb2Nrc1xuKyAgLSBjbG9jay1uYW1lc1xuKyAgLSBwaHktbW9kZVxuKyAgLSB4bG54LHJ4bWVtXG4rICAtIGRtYXNcbisgIC0gZG1hLW5hbWVzXG4rXG4rYWxsT2Y6XG4rICAtICRyZWY6IC9zY2hlbWFzL25ldC9ldGhlcm5ldC1jb250cm9sbGVyLnlhbWwjXG4rXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK2V4YW1wbGVzOlxuKyAgIyBTaW5nbGUgQVhJIERNQSBjaGFubmVsIHBhaXJcbisgIC0gfFxuKyAgICBldGhlcm5ldEA4MDAwMDAwMCB7XG4rICAgICAgICBjb21wYXRpYmxlID0gXCJ4bG54LHh4di1ldGhlcm5ldC0xLjBcIjtcbisgICAgICAgIHJlZyA9IFx1MDAzYzB4ODAwMDAwMDAgMHgxMDAwMFx1MDAzZTtcbisgICAgICAgIGNsb2NrLW5hbWVzID0gXCJyeF9jb3JlXCIsIFwiZHJwXCIsIFwic19heGlcIjtcbisgICAgICAgIGNsb2NrcyA9IFx1MDAzY1x1MDAyNnJ4X2Nsa1x1MDAzZSwgXHUwMDNjXHUwMDI2ZHJwX2Nsa1x1MDAzZSwgXHUwMDNjXHUwMDI2YXhpX2Nsa1x1MDAzZTtcbisgICAgICAgIGRtYS1uYW1lcyA9IFwidHhfY2hhbjBcIiwgXCJyeF9jaGFuMFwiO1xuKyAgICAgICAgZG1hcyA9IFx1MDAzY1x1MDAyNmF4aV9kbWEgMFx1MDAzZSwgXHUwMDNjXHUwMDI2YXhpX2RtYSAxXHUwMDNlO1xuKyAgICAgICAgcGh5LW1vZGUgPSBcIjI1Z2Jhc2UtclwiO1xuKyAgICAgICAgeGxueCxyeG1lbSA9IFx1MDAzYzB4ODAwMFx1MDAzZTtcbisgICAgfTtcbisgICMgTXVsdGljaGFubmVsIERNQSAoTUNETUEpIHdpdGggbXVsdGlwbGUgVHgvUnggY2hhbm5lbHNcbisgIC0gfFxuKyAgICBldGhlcm5ldEA4MDAxMDAwMCB7XG4rICAgICAgICBjb21wYXRpYmxlID0gXCJ4bG54LHh4di1ldGhlcm5ldC0xLjBcIjtcbisgICAgICAgIHJlZyA9IFx1MDAzYzB4ODAwMTAwMDAgMHgxMDAwMFx1MDAzZTtcbisgICAgICAgIGNsb2NrLW5hbWVzID0gXCJyeF9jb3JlXCIsIFwiZHJwXCIsIFwic19heGlcIjtcbisgICAgICAgIGNsb2NrcyA9IFx1MDAzY1x1MDAyNnJ4X2Nsa1x1MDAzZSwgXHUwMDNjXHUwMDI2ZHJwX2Nsa1x1MDAzZSwgXHUwMDNjXHUwMDI2YXhpX2Nsa1x1MDAzZTtcbisgICAgICAgIGRtYS1uYW1lcyA9IFwidHhfY2hhbjBcIiwgXCJ0eF9jaGFuMVwiLCBcInJ4X2NoYW4wXCIsIFwicnhfY2hhbjFcIjtcbisgICAgICAgIGRtYXMgPSBcdTAwM2NcdTAwMjZheGlfbWNkbWEgMFx1MDAzZSwgXHUwMDNjXHUwMDI2YXhpX21jZG1hIDFcdTAwM2UsXG4rICAgICAgICAgICAgICAgXHUwMDNjXHUwMDI2YXhpX21jZG1hIDE2XHUwMDNlLCBcdTAwM2NcdTAwMjZheGlfbWNkbWEgMTdcdTAwM2U7XG4rICAgICAgICBwaHktbW9kZSA9IFwiMTBnYmFzZS1yXCI7XG4rICAgICAgICB4bG54LHJ4bWVtID0gXHUwMDNjMHg4MDAwXHUwMDNlO1xuKyAgICB9O1xuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDBiNDJlODk4ZjRkOGUuLjRlZGM4YTczMDRkYjAgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0yOTg2MSw2ICsyOTg2MSw3IEBAIFhJTElOWCBBWEkgRVRIRVJORVQgRFJJVkVSXG4gTTpcdFJhZGhleSBTaHlhbSBQYW5kZXkgXHUwMDNjcmFkaGV5LnNoeWFtLnBhbmRleUBhbWQuY29tXHUwMDNlXG4gUzpcdE1haW50YWluZWRcbiBGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LGF4aS1ldGhlcm5ldC55YW1sXG4rRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveGxueCx4eHYtZXRoZXJuZXQueWFtbFxuIEY6XHRkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXQqXG4gXG4gWElMSU5YIENBTiBEUklWRVJcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvTWFrZWZpbGVcbmluZGV4IDdkN2RjMTc3MTQyM2UuLmRiOTBlNjkxZmVjNTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9NYWtlZmlsZVxuQEAgLTYsNSArNiw2IEBAXG4gbGxfdGVtYWMtb2JqcyA6PSBsbF90ZW1hY19tYWluLm8gbGxfdGVtYWNfbWRpby5vXG4gb2JqLSQoQ09ORklHX1hJTElOWF9MTF9URU1BQykgKz0gbGxfdGVtYWMub1xuIG9iai0kKENPTkZJR19YSUxJTlhfRU1BQ0xJVEUpICs9IHhpbGlueF9lbWFjbGl0ZS5vXG4teGlsaW54X2VtYWMtb2JqcyA6PSB4aWxpbnhfYXhpZW5ldF9tYWluLm8geGlsaW54X2F4aWVuZXRfbWRpby5vXG4reGlsaW54X2VtYWMtb2JqcyA6PSB4aWxpbnhfYXhpZW5ldF9tYWluLm8geGlsaW54X2F4aWVuZXRfbWRpby5vIFxcXG4rXHRcdCAgICB4aWxpbnhfYXhpZW5ldF94eHYub1xuIG9iai0kKENPTkZJR19YSUxJTlhfQVhJX0VNQUMpICs9IHhpbGlueF9lbWFjLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldC5oXG5pbmRleCBmY2QzYWFlZjI3ZmMzLi4yZWEwODZmYzRkYzM2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0LmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldC5oXG5AQCAtMTAsNiArMTAsNyBAQFxuICNkZWZpbmUgWElMSU5YX0FYSUVORVRfSFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RpbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbkBAIC0xNyw2ICsxOCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiBcbisjaW5jbHVkZSBcInhpbGlueF9heGllbmV0X3h4di5oXCJcbitcbiAvKiBQYWNrZXQgc2l6ZSBpbmZvICovXG4gI2RlZmluZSBYQUVfSERSX1NJWkVcdFx0XHQxNCAvKiBTaXplIG9mIEV0aGVybmV0IGhlYWRlciAqL1xuICNkZWZpbmUgWEFFX1RSTF9TSVpFXHRcdFx0IDQgLyogU2l6ZSBvZiBFdGhlcm5ldCB0cmFpbGVyIChGQ1MpICovXG5AQCAtNTQ1LDYgKzU0OCw5IEBAIHN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciB7XG4gICogQHR4X3JpbmdfdGFpbDogVFggc2tiIHJpbmcgYnVmZmVyIHRhaWwgaW5kZXguXG4gICogQHJ4X3JpbmdfaGVhZDogUlggc2tiIHJpbmcgYnVmZmVyIGhlYWQgaW5kZXguXG4gICogQHJ4X3JpbmdfdGFpbDogUlggc2tiIHJpbmcgYnVmZmVyIHRhaWwgaW5kZXguXG4rICogQHh4dl9pcF92ZXJzaW9uOiBYWFYgSVAgdmVyc2lvbi5cbisgKiBAeHh2X3N0YXRfYmFzZTogU29mdHdhcmUgYWNjdW11bGF0b3JzIGZvciB0aGUgWFhWIGNsZWFyLW9uLXRpY2sgY291bnRlcnMuXG4rICogQGF4aWVuZXRfY29uZmlnOiBNQUMtdHlwZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGFuZCBvcGVyYXRpb25zLlxuICAqL1xuIHN0cnVjdCBheGllbmV0X2xvY2FsIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuQEAgLTU5OCw2ICs2MDQsNyBAQCBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCB7XG4gXG4gXHR1NjQgaHdfc3RhdF9iYXNlW1NUQVRfQ09VTlRdO1xuIFx0dTMyIGh3X2xhc3RfY291bnRlcltTVEFUX0NPVU5UXTtcbitcdHU2NCB4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX0NPVU5UXTtcbiBcdHNlcWNvdW50X211dGV4X3QgaHdfc3RhdHNfc2VxY291bnQ7XG4gXHRzdHJ1Y3QgbXV0ZXggc3RhdHNfbG9jaztcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgc3RhdHNfd29yaztcbkBAIC02MjYsOCArNjMzLDg4IEBAIHN0cnVjdCBheGllbmV0X2xvY2FsIHtcbiBcdGludCB0eF9yaW5nX3RhaWw7XG4gXHRpbnQgcnhfcmluZ19oZWFkO1xuIFx0aW50IHJ4X3JpbmdfdGFpbDtcbitcdHUzMiB4eHZfaXBfdmVyc2lvbjtcbitcdGNvbnN0IHN0cnVjdCBheGllbmV0X2NvbmZpZyAqYXhpZW5ldF9jb25maWc7XG4gfTtcbiBcbisvKipcbisgKiBzdHJ1Y3QgYXhpZW5ldF9jb25maWcgLSBNQUMtdHlwZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGFuZCBvcGVyYXRpb25zXG4rICogQG1kaW86IE1BQyBoYXMgYW4gTURJTyBidXMgZm9yIGV4dGVybmFsIFBIWSBtYW5hZ2VtZW50XG4rICogQG1hY19pcnE6IE1BQyBoYXMgYSBkZWRpY2F0ZWQgY29yZSBpbnRlcnJ1cHRcbisgKiBAbGVnYWN5X2RtYTogTUFDIHN1cHBvcnRzIHRoZSBsZWdhY3kgKG5vbi1kbWFlbmdpbmUpIERNQSBtb2RlXG4rICogQHVjX2ZpbHRlcjogTUFDIGhhcyB1bmljYXN0IGFkZHJlc3MgZmlsdGVyIHJlZ2lzdGVyc1xuKyAqIEBtY19maWx0ZXI6IE1BQyBoYXMgbXVsdGljYXN0IGFkZHJlc3MgZmlsdGVyIHJlZ2lzdGVyc1xuKyAqIEB2bGFuOiBNQUMgc3VwcG9ydHMgVkxBTiBmcmFtZXMgYnkgZGVmYXVsdFxuKyAqIEBqdW1ibzogTUFDIHN1cHBvcnRzIGp1bWJvIGZyYW1lc1xuKyAqIEBkbWFfdHhfY3N1bTogTUFDIHN1cHBvcnRzIFRYIGNoZWNrc3VtIG9mZmxvYWRcbisgKiBAc3dfcGFkZGluZzogU2hvcnQgZnJhbWVzIG11c3QgYmUgcGFkZGVkIGluIHNvZnR3YXJlIGJlZm9yZSB0cmFuc21pdFxuKyAqIEBpbnRlcm5hbF9wY3M6IE1BQyBhbHdheXMgZHJpdmVzIGFuIGludGVybmFsIFBDU1xuKyAqIEByZWdzX246IE51bWJlciBvZiBNQUMgcmVnaXN0ZXJzIGV4cG9zZWQgdGhyb3VnaCBldGh0b29sIC1kXG4rICogQGNsa19pbml0OiBDYWxsYmFjayB0byBnZXQgYW5kIGVuYWJsZSB0aGUgTUFDLXNwZWNpZmljIGNsb2Nrc1xuKyAqIEBzZXRvcHRpb25zOiBDYWxsYmFjayB0byBwcm9ncmFtIE1BQyBoYXJkd2FyZSBvcHRpb25zXG4rICogQHByb2JlX2luaXQ6IENhbGxiYWNrIGZvciBNQUMtc3BlY2lmaWMgcHJvYmUtdGltZSBpbml0LCBvciBOVUxMIGlmIHVudXNlZFxuKyAqIEBndF9yZXNldDogQ2FsbGJhY2sgdG8gcmVzZXQgdGhlIHNlcmlhbCB0cmFuc2NlaXZlciAoR1QpLCBvciBOVUxMIGlmIHVudXNlZFxuKyAqIEBtYWNfaW5pdDogQ2FsbGJhY2sgZm9yIE1BQy1zcGVjaWZpYyBicmluZy11cCBhZnRlciB0aGUgRE1BIHJlc2V0XG4rICogQG1hY19saW5rX3VwOiBDYWxsYmFjayB0byBwcm9ncmFtIGxpbmsgc3BlZWQgYW5kIHBhdXNlIG9uIGxpbmsgdXAsIG9yIE5VTExcbisgKiBAZ2V0X3JlZ3M6IENhbGxiYWNrIHRvIGR1bXAgdGhlIE1BQyByZWdpc3RlcnMgZm9yIGV0aHRvb2wgLWRcbisgKiBAcGh5bGlua19zZXRfY2FwczogQ2FsbGJhY2sgdG8gc2V0IHBoeWxpbmsgTUFDIGNhcGFiaWxpdGllc1xuKyAqIEBwY3Nfb3BzOiBwaHlsaW5rIFBDUyBvcGVyYXRpb25zIGZvciB0aGlzIE1BQywgb3IgTlVMTCBpZiB1bnVzZWRcbisgKiBAc3RhdHNfdXBkYXRlOiBDYWxsYmFjayB0byBsYXRjaC9hY2N1bXVsYXRlIHRoZSBwZXJpb2RpYyBNQUMgY291bnRlcnNcbisgKiBAZ2V0X3N0YXRzNjQ6IENhbGxiYWNrIHRvIHJlYWQgTUFDIGNvdW50ZXJzIGludG8gcnRubF9saW5rX3N0YXRzNjRcbisgKiBAZ2V0X2V0aHRvb2xfc3RhdHM6IENhbGxiYWNrIHRvIHJlYWQgTUFDIGNvdW50ZXJzIGZvciBldGh0b29sIC1TXG4rICogQGdldF9zdHJpbmdzOiBDYWxsYmFjayB0byBmaWxsIHRoZSBldGh0b29sIC1TIHN0YXRpc3RpYyBuYW1lIHN0cmluZ3NcbisgKiBAZ2V0X3NzZXRfY291bnQ6IENhbGxiYWNrIHJldHVybmluZyB0aGUgbnVtYmVyIG9mIGV0aHRvb2wgLVMgc3RhdGlzdGljc1xuKyAqIEBnZXRfcGF1c2Vfc3RhdHM6IENhbGxiYWNrIHRvIHJlYWQgTUFDIHBhdXNlLWZyYW1lIGNvdW50ZXJzXG4rICogQGdldF9ldGhfbWFjX3N0YXRzOiBDYWxsYmFjayB0byByZWFkIElFRUUgODAyLjMgTUFDIGNvdW50ZXJzXG4rICogQGdldF9ldGhfY3RybF9zdGF0czogQ2FsbGJhY2sgdG8gcmVhZCBNQUMtY29udHJvbCBmcmFtZSBjb3VudGVycywgb3IgTlVMTFxuKyAqXHRcdFx0aWYgdGhlIE1BQyBleHBvc2VzIG5vIGNvbnRyb2wtZnJhbWUgY291bnRlcnNcbisgKiBAZ2V0X3Jtb25fc3RhdHM6IENhbGxiYWNrIHRvIHJlYWQgUk1PTiBjb3VudGVycyBhbmQgaGlzdG9ncmFtIHJhbmdlc1xuKyAqL1xuK3N0cnVjdCBheGllbmV0X2NvbmZpZyB7XG4rXHRib29sIG1kaW87XG4rXHRib29sIG1hY19pcnE7XG4rXHRib29sIGxlZ2FjeV9kbWE7XG4rXHRib29sIHVjX2ZpbHRlcjtcbitcdGJvb2wgbWNfZmlsdGVyO1xuK1x0Ym9vbCB2bGFuO1xuK1x0Ym9vbCBqdW1ibztcbitcdGJvb2wgZG1hX3R4X2NzdW07XG4rXHRib29sIHN3X3BhZGRpbmc7XG4rXHRib29sIGludGVybmFsX3BjcztcbitcdHVuc2lnbmVkIGludCByZWdzX247XG4rXHRpbnQgKCpjbGtfaW5pdCkoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKTtcbitcdHZvaWQgKCpzZXRvcHRpb25zKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIG9wdGlvbnMpO1xuK1x0dm9pZCAoKnByb2JlX2luaXQpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCk7XG4rXHR2b2lkICgqZ3RfcmVzZXQpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCk7XG4rXHRpbnQgKCptYWNfaW5pdCkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuK1x0dm9pZCAoKm1hY19saW5rX3VwKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IHNwZWVkLFxuK1x0XHRcdCAgICBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKTtcbitcdHZvaWQgKCpnZXRfcmVncykoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLCB1MzIgKmRhdGEpO1xuK1x0dm9pZCAoKnBoeWxpbmtfc2V0X2NhcHMpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCxcbitcdFx0XHRcdCBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyk7XG4rXHRjb25zdCBzdHJ1Y3QgcGh5bGlua19wY3Nfb3BzICpwY3Nfb3BzO1xuK1x0dm9pZCAoKnN0YXRzX3VwZGF0ZSkoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKTtcbitcdHZvaWQgKCpnZXRfc3RhdHM2NCkoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuK1x0XHRcdCAgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKTtcbitcdHZvaWQgKCpnZXRfZXRodG9vbF9zdGF0cykoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLCB1NjQgKmRhdGEpO1xuK1x0dm9pZCAoKmdldF9zdHJpbmdzKSh1OCAqZGF0YSk7XG4rXHRpbnQgKCpnZXRfc3NldF9jb3VudCkodm9pZCk7XG4rXHR2b2lkICgqZ2V0X3BhdXNlX3N0YXRzKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXG4rXHRcdFx0XHRzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcGF1c2Vfc3RhdHMpO1xuK1x0dm9pZCAoKmdldF9ldGhfbWFjX3N0YXRzKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXG4rXHRcdFx0XHQgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cyk7XG4rXHR2b2lkICgqZ2V0X2V0aF9jdHJsX3N0YXRzKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgZXRodG9vbF9ldGhfY3RybF9zdGF0cyAqY3RybF9zdGF0cyk7XG4rXHR2b2lkICgqZ2V0X3Jtb25fc3RhdHMpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCxcbitcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcbitcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlICoqcmFuZ2VzKTtcbit9O1xuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGF4aWVuZXRfbG9jYWwgKnBjc190b19heGllbmV0X2xvY2FsKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxuK3tcbitcdHJldHVybiBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCwgcGNzKTtcbit9XG4rXG4gLyoqXG4gICogc3RydWN0IGF4aWVuZXRfb3B0aW9uIC0gVXNlZCB0byBzZXQgYXhpIGV0aGVybmV0IGhhcmR3YXJlIG9wdGlvbnNcbiAgKiBAb3B0Olx0T3B0aW9uIHRvIGJlIHNldC5cbkBAIC03NDEsNCArODI4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGF4aWVuZXRfZG1hX291dF9hZGRyKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwgb2ZmX3QgcmVnLFxuIGludCBheGllbmV0X21kaW9fc2V0dXAoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKTtcbiB2b2lkIGF4aWVuZXRfbWRpb190ZWFyZG93bihzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApO1xuIFxuKy8qIFJNT04gaGlzdG9ncmFtIHJhbmdlcyBzaGFyZWQgYnkgYWxsIE1BQyB0eXBlcyAqL1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgYXhpZW5ldF9ybW9uX3Jhbmdlc1tdO1xuK1xuICNlbmRpZiAvKiBYSUxJTlhfQVhJX0VORVRfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jXG5pbmRleCAxNzIyYjcwMzhmMzQwLi41OGUyMmYwZmQ3Yzk1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uY1xuQEAgLTMzLDYgKzMzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9pcnEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX2FkZHJlc3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWF0aDY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuQEAgLTY1LDE2ICs2Niw2IEBAXG4gXG4gc3RhdGljIHZvaWQgYXhpZW5ldF9yeF9zdWJtaXRfZGVzYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4gXG4tLyogTWF0Y2ggdGFibGUgZm9yIG9mX3BsYXRmb3JtIGJpbmRpbmcgKi9cbi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBheGllbmV0X29mX21hdGNoW10gPSB7XG4tXHR7IC5jb21wYXRpYmxlID0gXCJ4bG54LGF4aS1ldGhlcm5ldC0xLjAwLmFcIiwgfSxcbi1cdHsgLmNvbXBhdGlibGUgPSBcInhsbngsYXhpLWV0aGVybmV0LTEuMDEuYVwiLCB9LFxuLVx0eyAuY29tcGF0aWJsZSA9IFwieGxueCxheGktZXRoZXJuZXQtMi4wMS5hXCIsIH0sXG4tXHR7fSxcbi19O1xuLVxuLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGF4aWVuZXRfb2ZfbWF0Y2gpO1xuLVxuIC8qIE9wdGlvbiB0YWJsZSBmb3Igc2V0dGluZyB1cCBBeGkgRXRoZXJuZXQgaGFyZHdhcmUgb3B0aW9ucyAqL1xuIHN0YXRpYyBzdHJ1Y3QgYXhpZW5ldF9vcHRpb24gYXhpZW5ldF9vcHRpb25zW10gPSB7XG4gXHQvKiBUdXJuIG9uIGp1bWJvIHBhY2tldCBzdXBwb3J0IGZvciBib3RoIFJ4IGFuZCBUeCAqL1xuQEAgLTQxOSw2ICs0MTAsOSBAQCBzdGF0aWMgdm9pZCBheGllbmV0X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihuZGV2LVx1MDAzZWRldl9hZGRyKSlcbiBcdFx0ZXRoX2h3X2FkZHJfcmFuZG9tKG5kZXYpO1xuIFxuK1x0aWYgKCFscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2V1Y19maWx0ZXIpXG4rXHRcdHJldHVybjtcbitcbiBcdC8qIFNldCB1cCB1bmljYXN0IE1BQyBhZGRyZXNzIGZpbHRlciBzZXQgaXRzIG1hYyBhZGRyZXNzICovXG4gXHRheGllbmV0X2lvdyhscCwgWEFFX1VBVzBfT0ZGU0VULFxuIFx0XHQgICAgKG5kZXYtXHUwMDNlZGV2X2FkZHJbMF0pIHxcbkBAIC00NjgsNiArNDYyLDkgQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHR1MzIgcmVnLCBhZjByZWcsIGFmMXJlZztcbiBcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFxuK1x0aWYgKCFscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VtY19maWx0ZXIpXG4rXHRcdHJldHVybjtcbitcbiBcdHJlZyA9IGF4aWVuZXRfaW9yKGxwLCBYQUVfRk1JX09GRlNFVCk7XG4gXHRyZWcgXHUwMDI2PSB+WEFFX0ZNSV9QTV9NQVNLO1xuIFx0aWYgKG5kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9QUk9NSVNDKVxuQEAgLTU3NiwxNiArNTczLDMxIEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfc3RhdHNfdXBkYXRlKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwgYm9vbCByZXNldClcbiBcdHdyaXRlX3NlcWNvdW50X2VuZChcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4gfVxuIFxuKy8qKlxuKyAqIGF4aWVuZXRfMWdfc3RhdHNfdXBkYXRlIC0gUmVmcmVzaCAxRyBNQUMgaGFyZHdhcmUgc3RhdGlzdGljc1xuKyAqIEBscDpcdFx0UG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcbisgKi9cbitzdGF0aWMgdm9pZCBheGllbmV0XzFnX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApXG4re1xuK1x0YXhpZW5ldF9zdGF0c191cGRhdGUobHAsIGZhbHNlKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgYXhpZW5ldF9yZWZyZXNoX3N0YXRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF4aWVuZXRfbG9jYWwsXG4gXHRcdFx0XHRcdFx0c3RhdHNfd29yay53b3JrKTtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2bHAtXHUwMDNlc3RhdHNfbG9jayk7XG4tXHRheGllbmV0X3N0YXRzX3VwZGF0ZShscCwgZmFsc2UpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxwLVx1MDAzZXN0YXRzX2xvY2spO1xuK1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZXN0YXRzX3VwZGF0ZSkge1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNmxwLVx1MDAzZXN0YXRzX2xvY2spO1xuK1x0XHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VzdGF0c191cGRhdGUobHApO1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bHAtXHUwMDNlc3RhdHNfbG9jayk7XG4rXHR9XG4gXG4tXHQvKiBKdXN0IGxlc3MgdGhhbiAyXjMyIGJ5dGVzIGF0IDIuNSBHQml0L3MgKi9cbitcdC8qIFJlLWFybSB0aGUgcG9sbCBiZWZvcmUgYW55IGNvdW50ZXIgY2FuIG92ZXJmbG93IGJldHdlZW4gdXBkYXRlczogdGhlXG4rXHQgKiAxRyBieXRlIGNvdW50ZXIgcmVhY2hlcyBqdXN0IHVuZGVyIDJeMzIgaW4gdGhpcyBpbnRlcnZhbCBhdCAyLjUgR2JpdC9zLFxuK1x0ICogYW5kIHRoZSBYWFYgaW50ZXJuYWwgYWNjdW11bGF0b3JzIG11c3QgYmUgbGF0Y2hlZCAodmlhIFRJQ0sgaW5cbitcdCAqIGF4aWVuZXRfeHh2X3N0YXRzX3VwZGF0ZSgpKSBiZWZvcmUgdGhleSBzYXR1cmF0ZSBhdCBsaW5lIHJhdGUuXG4rXHQgKi9cbiBcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZscC1cdTAwM2VzdGF0c193b3JrLCAxMyAqIEhaKTtcbiB9XG4gXG5AQCAtNTk0LDcgKzYwNiwxNiBAQCBzdGF0aWMgaW50IF9fYXhpZW5ldF9kZXZpY2VfcmVzZXQoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKVxuIFx0dTMyIHZhbHVlO1xuIFx0aW50IHJldDtcbiBcbi1cdC8qIFNhdmUgc3RhdGlzdGljcyBjb3VudGVycyBpbiBjYXNlIHRoZXkgd2lsbCBiZSByZXNldCAqL1xuK1x0LyogU2F2ZSBzdGF0aXN0aWNzIGNvdW50ZXJzIGluIGNhc2UgdGhleSB3aWxsIGJlIHJlc2V0LlxuK1x0ICpcbitcdCAqIFRoZSBYQUVfRkVBVFVSRV9TVEFUUyBibG9ja3MgaW4gdGhpcyBmdW5jdGlvbiByZWFkIHRoZSBURU1BQ1xuK1x0ICogc3RhdGlzdGljcyByZWdpc3RlcnMgYXQgWEFFX1NUQVRTX09GRlNFVCwgaS5lLiB0aGV5IGFzc3VtZSB0aGUgMUdcbitcdCAqIGNvdW50ZXIgbGF5b3V0LiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBfX2F4aWVuZXRfZGV2aWNlX3Jlc2V0KCkgaXNcbitcdCAqIG9ubHkgcmVhY2hlZCBvbiB0aGUgbGVnYWN5IChub24tZG1hZW5naW5lKSBETUEgcGF0aCwgd2hpY2ggdGhlXG4rXHQgKiBsZWdhY3lfZG1hIGNhcGFiaWxpdHkgcmVzdHJpY3RzIHRvIHRoZSAxRyBNQUMuIE1BQ3MgdGhhdCB1c2UgdGhlaXJcbitcdCAqIG93biBzdGF0aXN0aWNzIG1lY2hhbmlzbSAoZS5nLiBYWFYsIHdoaWNoIGlzIGRtYWVuZ2luZS1vbmx5KSBuZXZlclxuK1x0ICogZXhlY3V0ZSB0aGlzIHBhdGguXG4rXHQgKi9cbiBcdG11dGV4X2xvY2soXHUwMDI2bHAtXHUwMDNlc3RhdHNfbG9jayk7XG4gXHRpZiAobHAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IFhBRV9GRUFUVVJFX1NUQVRTKVxuIFx0XHRheGllbmV0X3N0YXRzX3VwZGF0ZShscCwgdHJ1ZSk7XG5AQCAtNjk0LDYgKzcxNSwzMiBAQCBzdGF0aWMgdm9pZCBheGllbmV0X2RtYV9zdG9wKHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcbiBcdGF4aWVuZXRfdW5sb2NrX21paShscCk7XG4gfVxuIFxuKy8qKlxuKyAqIGF4aWVuZXRfMWdfbWFjX2luaXQgLSAxRyBNQUMtc3BlY2lmaWMgYnJpbmctdXAgYWZ0ZXIgdGhlIERNQSByZXNldFxuKyAqIEBuZGV2Olx0UG9pbnRlciB0byB0aGUgbmV0X2RldmljZSBzdHJ1Y3R1cmVcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyIG90aGVyd2lzZS5cbisgKi9cbitzdGF0aWMgaW50IGF4aWVuZXRfMWdfbWFjX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXHR1MzIgYXhpZW5ldF9zdGF0dXM7XG4rXG4rXHRheGllbmV0X3N0YXR1cyA9IGF4aWVuZXRfaW9yKGxwLCBYQUVfUkNXMV9PRkZTRVQpO1xuK1x0YXhpZW5ldF9zdGF0dXMgXHUwMDI2PSB+WEFFX1JDVzFfUlhfTUFTSztcbitcdGF4aWVuZXRfaW93KGxwLCBYQUVfUkNXMV9PRkZTRVQsIGF4aWVuZXRfc3RhdHVzKTtcbitcbitcdGF4aWVuZXRfc3RhdHVzID0gYXhpZW5ldF9pb3IobHAsIFhBRV9JUF9PRkZTRVQpO1xuK1x0aWYgKGF4aWVuZXRfc3RhdHVzIFx1MDAyNiBYQUVfSU5UX1JYUkpFQ1RfTUFTSylcbitcdFx0YXhpZW5ldF9pb3cobHAsIFhBRV9JU19PRkZTRVQsIFhBRV9JTlRfUlhSSkVDVF9NQVNLKTtcbitcdGF4aWVuZXRfaW93KGxwLCBYQUVfSUVfT0ZGU0VULCBscC1cdTAwM2VldGhfaXJxIFx1MDAzZSAwID9cbitcdFx0ICAgIFhBRV9JTlRfUkVDVl9FUlJPUl9NQVNLIDogMCk7XG4rXG4rXHRheGllbmV0X2lvdyhscCwgWEFFX0ZDQ19PRkZTRVQsIFhBRV9GQ0NfRkNSWF9NQVNLKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiAvKipcbiAgKiBheGllbmV0X2RldmljZV9yZXNldCAtIFJlc2V0IGFuZCBpbml0aWFsaXplIHRoZSBBeGkgRXRoZXJuZXQgaGFyZHdhcmUuXG4gICogQG5kZXY6XHRQb2ludGVyIHRvIHRoZSBuZXRfZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTcwOSwxOSArNzU2LDIzIEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfZG1hX3N0b3Aoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKVxuICAqL1xuIHN0YXRpYyBpbnQgYXhpZW5ldF9kZXZpY2VfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuLVx0dTMyIGF4aWVuZXRfc3RhdHVzO1xuIFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHRpbnQgcmV0O1xuIFxuK1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWd0X3Jlc2V0KVxuK1x0XHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VndF9yZXNldChscCk7XG4rXG4gXHRscC1cdTAwM2VtYXhfZnJtX3NpemUgPSBYQUVfTUFYX1ZMQU5fRlJBTUVfU0laRTtcbi1cdGxwLVx1MDAzZW9wdGlvbnMgfD0gWEFFX09QVElPTl9WTEFOO1xuK1xuK1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZXZsYW4pXG4rXHRcdGxwLVx1MDAzZW9wdGlvbnMgfD0gWEFFX09QVElPTl9WTEFOO1xuIFx0bHAtXHUwMDNlb3B0aW9ucyBcdTAwMjY9ICh+WEFFX09QVElPTl9KVU1CTyk7XG4gXG4gXHRpZiAobmRldi1cdTAwM2VtdHUgXHUwMDNlIFhBRV9NVFUgXHUwMDI2XHUwMDI2IG5kZXYtXHUwMDNlbXR1IFx1MDAzYz0gWEFFX0pVTUJPX01UVSkge1xuIFx0XHRscC1cdTAwM2VtYXhfZnJtX3NpemUgPSBuZGV2LVx1MDAzZW10dSArIFZMQU5fRVRIX0hMRU4gK1xuIFx0XHRcdFx0XHRYQUVfVFJMX1NJWkU7XG4gXG4tXHRcdGlmIChscC1cdTAwM2VtYXhfZnJtX3NpemUgXHUwMDNjPSBscC1cdTAwM2VyeG1lbSlcbitcdFx0aWYgKGxwLVx1MDAzZW1heF9mcm1fc2l6ZSBcdTAwM2M9IGxwLVx1MDAzZXJ4bWVtIFx1MDAyNlx1MDAyNiBscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VqdW1ibylcbiBcdFx0XHRscC1cdTAwM2VvcHRpb25zIHw9IFhBRV9PUFRJT05fSlVNQk87XG4gXHR9XG4gXG5AQCAtNzM4LDI2ICs3ODksMTggQEAgc3RhdGljIGludCBheGllbmV0X2RldmljZV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdFx0fVxuIFx0fVxuIFxuLVx0YXhpZW5ldF9zdGF0dXMgPSBheGllbmV0X2lvcihscCwgWEFFX1JDVzFfT0ZGU0VUKTtcbi1cdGF4aWVuZXRfc3RhdHVzIFx1MDAyNj0gflhBRV9SQ1cxX1JYX01BU0s7XG4tXHRheGllbmV0X2lvdyhscCwgWEFFX1JDVzFfT0ZGU0VULCBheGllbmV0X3N0YXR1cyk7XG4tXG4tXHRheGllbmV0X3N0YXR1cyA9IGF4aWVuZXRfaW9yKGxwLCBYQUVfSVBfT0ZGU0VUKTtcbi1cdGlmIChheGllbmV0X3N0YXR1cyBcdTAwMjYgWEFFX0lOVF9SWFJKRUNUX01BU0spXG4tXHRcdGF4aWVuZXRfaW93KGxwLCBYQUVfSVNfT0ZGU0VULCBYQUVfSU5UX1JYUkpFQ1RfTUFTSyk7XG4tXHRheGllbmV0X2lvdyhscCwgWEFFX0lFX09GRlNFVCwgbHAtXHUwMDNlZXRoX2lycSBcdTAwM2UgMCA/XG4tXHRcdCAgICBYQUVfSU5UX1JFQ1ZfRVJST1JfTUFTSyA6IDApO1xuLVxuLVx0YXhpZW5ldF9pb3cobHAsIFhBRV9GQ0NfT0ZGU0VULCBYQUVfRkNDX0ZDUlhfTUFTSyk7XG4rXHRyZXQgPSBscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VtYWNfaW5pdChuZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHQvKiBTeW5jIGRlZmF1bHQgb3B0aW9ucyB3aXRoIEhXIGJ1dCBsZWF2ZSByZWNlaXZlciBhbmRcbiBcdCAqIHRyYW5zbWl0dGVyIGRpc2FibGVkLlxuIFx0ICovXG4tXHRheGllbmV0X3NldG9wdGlvbnMobmRldiwgbHAtXHUwMDNlb3B0aW9ucyBcdTAwMjZcbi1cdFx0XHQgICB+KFhBRV9PUFRJT05fVFhFTiB8IFhBRV9PUFRJT05fUlhFTikpO1xuK1x0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlc2V0b3B0aW9ucyhuZGV2LCBscC1cdTAwM2VvcHRpb25zIFx1MDAyNlxuK1x0XHRcdFx0ICAgICAgIH4oWEFFX09QVElPTl9UWEVOIHwgWEFFX09QVElPTl9SWEVOKSk7XG4gXHRheGllbmV0X3NldF9tYWNfYWRkcmVzcyhuZGV2LCBOVUxMKTtcbiBcdGF4aWVuZXRfc2V0X211bHRpY2FzdF9saXN0KG5kZXYpO1xuLVx0YXhpZW5ldF9zZXRvcHRpb25zKG5kZXYsIGxwLVx1MDAzZW9wdGlvbnMpO1xuK1x0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlc2V0b3B0aW9ucyhuZGV2LCBscC1cdTAwM2VvcHRpb25zKTtcbiBcbiBcdG5ldGlmX3RyYW5zX3VwZGF0ZShuZGV2KTtcbiBcbkBAIC05MTUsNiArOTU4LDEzIEBAIGF4aWVuZXRfc3RhcnRfeG1pdF9kbWFlbmdpbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRpbnQgc2dfbGVuO1xuIFx0aW50IHJldDtcbiBcbitcdGlmIChscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2Vzd19wYWRkaW5nIFx1MDAyNlx1MDAyNiBldGhfc2tiX3BhZChza2IpKSB7XG4rXHRcdC8qIFBhZCBzaG9ydCBmcmFtZXM7IHRoZSBNQUMgZG9lcyBub3QgYXBwZW5kIEV0aGVybmV0IHBhZGRpbmcuICovXG4rXHRcdG5kZXYtXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xuK1x0XHRuZGV2LVx1MDAzZXN0YXRzLnR4X2Vycm9ycysrO1xuK1x0XHRyZXR1cm4gTkVUREVWX1RYX09LO1xuK1x0fVxuK1xuIFx0ZG1hX2RldiA9IGxwLVx1MDAzZXR4X2NoYW4tXHUwMDNlZGV2aWNlO1xuIFx0c2dfbGVuID0gc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzICsgMTtcbiBcdGlmIChDSVJDX1NQQUNFKGxwLVx1MDAzZXR4X3JpbmdfaGVhZCwgbHAtXHUwMDNldHhfcmluZ190YWlsLCBUWF9CRF9OVU1fTUFYKSBcdTAwM2M9IDEpIHtcbkBAIC05MzksMTkgKzk4OSwyMSBAQCBheGllbmV0X3N0YXJ0X3htaXRfZG1hZW5naW5lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHRnb3RvIHhtaXRfZXJyb3JfZHJvcF9za2I7XG4gXG4gXHQvKiBGaWxsIHVwIGFwcCBmaWVsZHMgZm9yIGNoZWNrc3VtICovXG4tXHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7XG4tXHRcdGlmIChscC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgWEFFX0ZFQVRVUkVfRlVMTF9UWF9DU1VNKSB7XG4tXHRcdFx0LyogVHggRnVsbCBDaGVja3N1bSBPZmZsb2FkIEVuYWJsZWQgKi9cbi1cdFx0XHRhcHBfbWV0YWRhdGFbMF0gfD0gMjtcbi1cdFx0fSBlbHNlIGlmIChscC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgWEFFX0ZFQVRVUkVfUEFSVElBTF9UWF9DU1VNKSB7XG4tXHRcdFx0Y3N1bV9zdGFydF9vZmYgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xuLVx0XHRcdGNzdW1faW5kZXhfb2ZmID0gY3N1bV9zdGFydF9vZmYgKyBza2ItXHUwMDNlY3N1bV9vZmZzZXQ7XG4tXHRcdFx0LyogVHggUGFydGlhbCBDaGVja3N1bSBPZmZsb2FkIEVuYWJsZWQgKi9cbi1cdFx0XHRhcHBfbWV0YWRhdGFbMF0gfD0gMTtcbi1cdFx0XHRhcHBfbWV0YWRhdGFbMV0gPSAoY3N1bV9zdGFydF9vZmYgXHUwMDNjXHUwMDNjIDE2KSB8IGNzdW1faW5kZXhfb2ZmO1xuK1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWRtYV90eF9jc3VtKSB7XG4rXHRcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHtcbitcdFx0XHRpZiAobHAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IFhBRV9GRUFUVVJFX0ZVTExfVFhfQ1NVTSkge1xuK1x0XHRcdFx0LyogVHggRnVsbCBDaGVja3N1bSBPZmZsb2FkIEVuYWJsZWQgKi9cbitcdFx0XHRcdGFwcF9tZXRhZGF0YVswXSB8PSAyO1xuK1x0XHRcdH0gZWxzZSBpZiAobHAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IFhBRV9GRUFUVVJFX1BBUlRJQUxfVFhfQ1NVTSkge1xuK1x0XHRcdFx0Y3N1bV9zdGFydF9vZmYgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xuK1x0XHRcdFx0Y3N1bV9pbmRleF9vZmYgPSBjc3VtX3N0YXJ0X29mZiArIHNrYi1cdTAwM2Vjc3VtX29mZnNldDtcbitcdFx0XHRcdC8qIFR4IFBhcnRpYWwgQ2hlY2tzdW0gT2ZmbG9hZCBFbmFibGVkICovXG4rXHRcdFx0XHRhcHBfbWV0YWRhdGFbMF0gfD0gMTtcbitcdFx0XHRcdGFwcF9tZXRhZGF0YVsxXSA9IChjc3VtX3N0YXJ0X29mZiBcdTAwM2NcdTAwM2MgMTYpIHwgY3N1bV9pbmRleF9vZmY7XG4rXHRcdFx0fVxuK1x0XHR9IGVsc2UgaWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHtcbitcdFx0XHRhcHBfbWV0YWRhdGFbMF0gfD0gMjsgLyogVHggRnVsbCBDaGVja3N1bSBPZmZsb2FkIEVuYWJsZWQgKi9cbiBcdFx0fVxuLVx0fSBlbHNlIGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7XG4tXHRcdGFwcF9tZXRhZGF0YVswXSB8PSAyOyAvKiBUeCBGdWxsIENoZWNrc3VtIE9mZmxvYWQgRW5hYmxlZCAqL1xuIFx0fVxuIFxuIFx0ZG1hX3R4X2Rlc2MgPSBkbWFfZGV2LVx1MDAzZWRldmljZV9wcmVwX3NsYXZlX3NnKGxwLVx1MDAzZXR4X2NoYW4sIHNrYnVmX2RtYS1cdTAwM2VzZ2wsXG5AQCAtMTY3MCw2ICsxNzIyLDEwIEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0YXhpZW5ldF9sb2NrX21paShscCk7XG4gXHRyZXQgPSBheGllbmV0X2RldmljZV9yZXNldChuZGV2KTtcbiBcdGF4aWVuZXRfdW5sb2NrX21paShscCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIobHAtXHUwMDNlZGV2LCBcImF4aWVuZXRfZGV2aWNlX3Jlc2V0KCkgZmFpbGVkOiAlZFxcblwiLCByZXQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuIFxuIFx0cmV0ID0gcGh5bGlua19vZl9waHlfY29ubmVjdChscC1cdTAwM2VwaHlsaW5rLCBscC1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZSwgMCk7XG4gXHRpZiAocmV0KSB7XG5AQCAtMTczOCwxMiArMTc5NCwxNyBAQCBzdGF0aWMgaW50IGF4aWVuZXRfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bHAtXHUwMDNlcnhfZGltLndvcmspO1xuIFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmxwLVx1MDAzZXN0YXRzX3dvcmspO1xuK1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZXN0YXRzX3VwZGF0ZSkge1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNmxwLVx1MDAzZXN0YXRzX2xvY2spO1xuK1x0XHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VzdGF0c191cGRhdGUobHApO1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bHAtXHUwMDNlc3RhdHNfbG9jayk7XG4rXHR9XG4gXG4gXHRwaHlsaW5rX3N0b3AobHAtXHUwMDNlcGh5bGluayk7XG4gXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KGxwLVx1MDAzZXBoeWxpbmspO1xuIFxuLVx0YXhpZW5ldF9zZXRvcHRpb25zKG5kZXYsIGxwLVx1MDAzZW9wdGlvbnMgXHUwMDI2XG4tXHRcdFx0ICAgfihYQUVfT1BUSU9OX1RYRU4gfCBYQUVfT1BUSU9OX1JYRU4pKTtcbitcdGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZXNldG9wdGlvbnMobmRldiwgbHAtXHUwMDNlb3B0aW9ucyBcdTAwMjZcbitcdFx0XHRcdCAgICAgICB+KFhBRV9PUFRJT05fVFhFTiB8IFhBRV9PUFRJT05fUlhFTikpO1xuIFxuIFx0aWYgKCFscC1cdTAwM2V1c2VfZG1hZW5naW5lKSB7XG4gXHRcdGF4aWVuZXRfZG1hX3N0b3AobHApO1xuQEAgLTE3NjksNyArMTgzMCw4IEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0fVxuIFxuIFx0bmV0ZGV2X3Jlc2V0X3F1ZXVlKG5kZXYpO1xuLVx0YXhpZW5ldF9pb3cobHAsIFhBRV9JRV9PRkZTRVQsIDApO1xuK1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZW1hY19pcnEpXG4rXHRcdGF4aWVuZXRfaW93KGxwLCBYQUVfSUVfT0ZGU0VULCAwKTtcbiBcbiBcdGlmIChscC1cdTAwM2VldGhfaXJxIFx1MDAzZSAwKVxuIFx0XHRmcmVlX2lycShscC1cdTAwM2VldGhfaXJxLCBuZGV2KTtcbkBAIC0xODM0LDI5ICsxODk2LDExIEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKVxuIFx0cmV0dXJuIHBoeWxpbmtfbWlpX2lvY3RsKGxwLVx1MDAzZXBoeWxpbmssIHJxLCBjbWQpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZFxuLWF4aWVuZXRfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cylcbitzdGF0aWMgdm9pZCBheGllbmV0XzFnX2dldF9zdGF0czY0KHN0cnVjdCBheGllbmV0X2xvY2FsICpscCxcbitcdFx0XHRcdCAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXG4ge1xuLVx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHVuc2lnbmVkIGludCBzdGFydDtcbiBcbi1cdG5ldGRldl9zdGF0c190b19zdGF0czY0KHN0YXRzLCBcdTAwMjZkZXYtXHUwMDNlc3RhdHMpO1xuLVxuLVx0ZG8ge1xuLVx0XHRzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihcdTAwMjZscC1cdTAwM2VyeF9zdGF0X3N5bmMpO1xuLVx0XHRzdGF0cy1cdTAwM2VyeF9wYWNrZXRzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bHAtXHUwMDNlcnhfcGFja2V0cyk7XG4tXHRcdHN0YXRzLVx1MDAzZXJ4X2J5dGVzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bHAtXHUwMDNlcnhfYnl0ZXMpO1xuLVx0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFx1MDAyNmxwLVx1MDAzZXJ4X3N0YXRfc3luYywgc3RhcnQpKTtcbi1cbi1cdGRvIHtcbi1cdFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXHUwMDI2bHAtXHUwMDNldHhfc3RhdF9zeW5jKTtcbi1cdFx0c3RhdHMtXHUwMDNldHhfcGFja2V0cyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNmxwLVx1MDAzZXR4X3BhY2tldHMpO1xuLVx0XHRzdGF0cy1cdTAwM2V0eF9ieXRlcyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNmxwLVx1MDAzZXR4X2J5dGVzKTtcbi1cdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcdTAwMjZscC1cdTAwM2V0eF9zdGF0X3N5bmMsIHN0YXJ0KSk7XG4tXG4tXHRpZiAoIShscC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgWEFFX0ZFQVRVUkVfU1RBVFMpKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRkbyB7XG4gXHRcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4gXHRcdHN0YXRzLVx1MDAzZXJ4X2xlbmd0aF9lcnJvcnMgPVxuQEAgLTE4ODQsNiArMTkyOCwzMyBAQCBheGllbmV0X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXG4gXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpO1xuIH1cbiBcbitzdGF0aWMgdm9pZFxuK2F4aWVuZXRfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cylcbit7XG4rXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0dW5zaWduZWQgaW50IHN0YXJ0O1xuK1xuK1x0bmV0ZGV2X3N0YXRzX3RvX3N0YXRzNjQoc3RhdHMsIFx1MDAyNmRldi1cdTAwM2VzdGF0cyk7XG4rXG4rXHRkbyB7XG4rXHRcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFx1MDAyNmxwLVx1MDAzZXJ4X3N0YXRfc3luYyk7XG4rXHRcdHN0YXRzLVx1MDAzZXJ4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZscC1cdTAwM2VyeF9wYWNrZXRzKTtcbitcdFx0c3RhdHMtXHUwMDNlcnhfYnl0ZXMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZscC1cdTAwM2VyeF9ieXRlcyk7XG4rXHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXHUwMDI2bHAtXHUwMDNlcnhfc3RhdF9zeW5jLCBzdGFydCkpO1xuK1xuK1x0ZG8ge1xuK1x0XHRzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihcdTAwMjZscC1cdTAwM2V0eF9zdGF0X3N5bmMpO1xuK1x0XHRzdGF0cy1cdTAwM2V0eF9wYWNrZXRzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bHAtXHUwMDNldHhfcGFja2V0cyk7XG4rXHRcdHN0YXRzLVx1MDAzZXR4X2J5dGVzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bHAtXHUwMDNldHhfYnl0ZXMpO1xuK1x0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFx1MDAyNmxwLVx1MDAzZXR4X3N0YXRfc3luYywgc3RhcnQpKTtcbitcbitcdGlmICghKGxwLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VnZXRfc3RhdHM2NClcbitcdFx0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X3N0YXRzNjQobHAsIHN0YXRzKTtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBheGllbmV0X25ldGRldl9vcHMgPSB7XG4gXHQubmRvX29wZW4gPSBheGllbmV0X29wZW4sXG4gXHQubmRvX3N0b3AgPSBheGllbmV0X3N0b3AsXG5AQCAtMTkzOCwzMCArMjAwOSwxOCBAQCBzdGF0aWMgdm9pZCBheGllbmV0X2V0aHRvb2xzX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuICAqL1xuIHN0YXRpYyBpbnQgYXhpZW5ldF9ldGh0b29sc19nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuLVx0cmV0dXJuIHNpemVvZih1MzIpICogQVhJRU5FVF9SRUdTX047XG4rXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcbitcdHJldHVybiBzaXplb2YodTMyKSAqIGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZXJlZ3NfbjtcbiB9XG4gXG4gLyoqXG4tICogYXhpZW5ldF9ldGh0b29sc19nZXRfcmVncyAtIER1bXAgdGhlIGNvbnRlbnRzIG9mIGFsbCByZWdpc3RlcnMgcHJlc2VudFxuLSAqXHRcdFx0ICAgICAgIGluIEF4aUV0aGVybmV0IGNvcmUuXG4tICogQG5kZXY6XHRQb2ludGVyIHRvIG5ldF9kZXZpY2Ugc3RydWN0dXJlXG4tICogQHJlZ3M6XHRQb2ludGVyIHRvIGV0aHRvb2xfcmVncyBzdHJ1Y3R1cmVcbi0gKiBAcmV0Olx0Vm9pZCBwb2ludGVyIHVzZWQgdG8gcmV0dXJuIHRoZSBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXJzLlxuLSAqXG4tICogVGhpcyBpbXBsZW1lbnRzIGV0aHRvb2wgY29tbWFuZCBmb3IgZ2V0dGluZyB0aGUgQXhpIEV0aGVybmV0IHJlZ2lzdGVyIGR1bXAuXG4tICogSXNzdWUgXCJldGh0b29sIC1kIGV0aFhcIiB0byBleGVjdXRlIHRoaXMgZnVuY3Rpb24uXG4rICogYXhpZW5ldF8xZ19nZXRfcmVncyAtIER1bXAgMUcgTUFDIHJlZ2lzdGVycyBmb3IgZXRodG9vbFxuKyAqIEBscDpcdFx0UG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcbisgKiBAZGF0YTpcdEJ1ZmZlciBmb3IgcmVnaXN0ZXIgdmFsdWVzICh6ZXJvZWQgYW5kIHNpemVkIGJ5IHRoZSBjYWxsZXIpXG4gICovXG4tc3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbi1cdFx0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsIHZvaWQgKnJldClcbitzdGF0aWMgdm9pZCBheGllbmV0XzFnX2dldF9yZWdzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwgdTMyICpkYXRhKVxuIHtcbi1cdHUzMiAqZGF0YSA9ICh1MzIgKilyZXQ7XG4tXHRzaXplX3QgbGVuID0gc2l6ZW9mKHUzMikgKiBBWElFTkVUX1JFR1NfTjtcbi1cdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVxuLVx0cmVncy1cdTAwM2V2ZXJzaW9uID0gMDtcbi1cdHJlZ3MtXHUwMDNlbGVuID0gbGVuO1xuLVxuLVx0bWVtc2V0KGRhdGEsIDAsIGxlbik7XG4gXHRkYXRhWzBdID0gYXhpZW5ldF9pb3IobHAsIFhBRV9SQUZfT0ZGU0VUKTtcbiBcdGRhdGFbMV0gPSBheGllbmV0X2lvcihscCwgWEFFX1RQRl9PRkZTRVQpO1xuIFx0ZGF0YVsyXSA9IGF4aWVuZXRfaW9yKGxwLCBYQUVfSUZHUF9PRkZTRVQpO1xuQEAgLTIwMDIsNiArMjA2MSwzMSBAQCBzdGF0aWMgdm9pZCBheGllbmV0X2V0aHRvb2xzX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0fVxuIH1cbiBcbisvKipcbisgKiBheGllbmV0X2V0aHRvb2xzX2dldF9yZWdzIC0gRHVtcCB0aGUgY29udGVudHMgb2YgYWxsIHJlZ2lzdGVycyBwcmVzZW50XG4rICpcdFx0XHQgICAgICAgaW4gQXhpRXRoZXJuZXQgY29yZS5cbisgKiBAbmRldjpcdFBvaW50ZXIgdG8gbmV0X2RldmljZSBzdHJ1Y3R1cmVcbisgKiBAcmVnczpcdFBvaW50ZXIgdG8gZXRodG9vbF9yZWdzIHN0cnVjdHVyZVxuKyAqIEByZXQ6XHRWb2lkIHBvaW50ZXIgdXNlZCB0byByZXR1cm4gdGhlIGNvbnRlbnRzIG9mIHRoZSByZWdpc3RlcnMuXG4rICpcbisgKiBUaGlzIGltcGxlbWVudHMgZXRodG9vbCBjb21tYW5kIGZvciBnZXR0aW5nIHRoZSBBeGkgRXRoZXJuZXQgcmVnaXN0ZXIgZHVtcC5cbisgKiBJc3N1ZSBcImV0aHRvb2wgLWQgZXRoWFwiIHRvIGV4ZWN1dGUgdGhpcyBmdW5jdGlvbi5cbisgKi9cbitzdGF0aWMgdm9pZCBheGllbmV0X2V0aHRvb2xzX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywgdm9pZCAqcmV0KVxuK3tcbitcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1x0dTMyICpkYXRhID0gKHUzMiAqKXJldDtcbitcdHNpemVfdCBsZW47XG4rXG4rXHRsZW4gPSBzaXplb2YodTMyKSAqIGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZXJlZ3NfbjtcbitcdHJlZ3MtXHUwMDNldmVyc2lvbiA9IDA7XG4rXHRyZWdzLVx1MDAzZWxlbiA9IGxlbjtcbitcbitcdG1lbXNldChkYXRhLCAwLCBsZW4pO1xuK1x0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X3JlZ3MobHAsIGRhdGEpO1xuK31cbitcbiBzdGF0aWMgdm9pZFxuIGF4aWVuZXRfZXRodG9vbHNfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICplcmluZyxcbkBAIC0yMzAzLDExICsyMzg3LDggQEAgc3RhdGljIGludCBheGllbmV0X2V0aHRvb2xzX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldChscC1cdTAwM2VwaHlsaW5rKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLVx0XHRcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLFxuLVx0XHRcdFx0XHQgICAgICAgdTY0ICpkYXRhKVxuK3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLCB1NjQgKmRhdGEpXG4ge1xuLVx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHVuc2lnbmVkIGludCBzdGFydDtcbiBcbiBcdGRvIHtcbkBAIC0yMzI0LDYgKzI0MDUsMTcgQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeShcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCwgc3RhcnQpKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLFxuK1x0XHRcdFx0XHQgICAgICAgdTY0ICpkYXRhKVxuK3tcbitcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7XG4rXG4rXHRpZiAobHAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IFhBRV9GRUFUVVJFX1NUQVRTIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWdldF9ldGh0b29sX3N0YXRzKVxuK1x0XHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VnZXRfZXRodG9vbF9zdGF0cyhscCwgZGF0YSk7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBjaGFyIGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHtcbiBcdFwiUmVjZWl2ZWQgYnl0ZXNcIixcbiBcdFwiVHJhbnNtaXR0ZWQgYnl0ZXNcIixcbkBAIC0yMzM2LDEyICsyNDI4LDI2IEBAIHN0YXRpYyBjb25zdCBjaGFyIGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHtcbiBcdFwiVXNlciBEZWZpbmVkIENvdW50ZXIgMlwiLFxuIH07XG4gXG4rc3RhdGljIHZvaWQgYXhpZW5ldF8xZ19nZXRfc3RyaW5ncyh1OCAqZGF0YSlcbit7XG4rXHRtZW1jcHkoZGF0YSwgYXhpZW5ldF9ldGh0b29sX3N0YXRzX3N0cmluZ3MsXG4rXHQgICAgICAgc2l6ZW9mKGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzKSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYXhpZW5ldF8xZ19nZXRfc3NldF9jb3VudCh2b2lkKVxuK3tcbitcdHJldHVybiBBUlJBWV9TSVpFKGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSlcbiB7XG4rXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1xuIFx0c3dpdGNoIChzdHJpbmdzZXQpIHtcbiBcdGNhc2UgRVRIX1NTX1NUQVRTOlxuLVx0XHRtZW1jcHkoZGF0YSwgYXhpZW5ldF9ldGh0b29sX3N0YXRzX3N0cmluZ3MsXG4tXHRcdCAgICAgICBzaXplb2YoYXhpZW5ldF9ldGh0b29sX3N0YXRzX3N0cmluZ3MpKTtcbitcdFx0aWYgKGxwLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUyBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWdldF9zdHJpbmdzKVxuK1x0XHRcdGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWdldF9zdHJpbmdzKGRhdGEpO1xuIFx0XHRicmVhaztcbiBcdH1cbiB9XG5AQCAtMjM1MiwyNCArMjQ1OCwyMCBAQCBzdGF0aWMgaW50IGF4aWVuZXRfZXRodG9vbHNfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpXG4gXG4gXHRzd2l0Y2ggKHNzZXQpIHtcbiBcdGNhc2UgRVRIX1NTX1NUQVRTOlxuLVx0XHRpZiAobHAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IFhBRV9GRUFUVVJFX1NUQVRTKVxuLVx0XHRcdHJldHVybiBBUlJBWV9TSVpFKGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzKTtcbitcdFx0aWYgKGxwLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUyBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWdldF9zc2V0X2NvdW50KVxuK1x0XHRcdHJldHVybiBscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VnZXRfc3NldF9jb3VudCgpO1xuIFx0XHRmYWxsdGhyb3VnaDtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbiB9XG4gXG4tc3RhdGljIHZvaWRcbi1heGllbmV0X2V0aHRvb2xzX2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLVx0XHRcdFx0IHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cylcbitzdGF0aWMgdm9pZCBheGllbmV0XzFnX2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKVxuIHtcbi1cdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7XG4gXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4gXG4tXHRpZiAoIShscC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgWEFFX0ZFQVRVUkVfU1RBVFMpKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRkbyB7XG4gXHRcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4gXHRcdHBhdXNlX3N0YXRzLVx1MDAzZXR4X3BhdXNlX2ZyYW1lcyA9XG5AQCAtMjM4MCwxNSArMjQ4MiwyMyBAQCBheGllbmV0X2V0aHRvb2xzX2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIH1cbiBcbiBzdGF0aWMgdm9pZFxuLWF4aWVuZXRfZXRodG9vbF9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLVx0XHRcdFx0ICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpXG4rYXhpZW5ldF9ldGh0b29sc19nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdCBzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcGF1c2Vfc3RhdHMpXG4ge1xuIFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdHVuc2lnbmVkIGludCBzdGFydDtcbiBcbiBcdGlmICghKGxwLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXG4gXHRcdHJldHVybjtcbiBcbitcdGlmIChscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VnZXRfcGF1c2Vfc3RhdHMpXG4rXHRcdGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWdldF9wYXVzZV9zdGF0cyhscCwgcGF1c2Vfc3RhdHMpO1xuK31cbitcbitzdGF0aWMgdm9pZCBheGllbmV0XzFnX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCxcbitcdFx0XHRcdFx0IHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cylcbit7XG4rXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4rXG4gXHRkbyB7XG4gXHRcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4gXHRcdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNUcmFuc21pdHRlZE9LID1cbkBAIC0yNDI1LDE1ICsyNTM1LDI0IEBAIGF4aWVuZXRfZXRodG9vbF9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIH1cbiBcbiBzdGF0aWMgdm9pZFxuLWF4aWVuZXRfZXRodG9vbF9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHRcdCAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKVxuK2F4aWVuZXRfZXRodG9vbF9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0ICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpXG4ge1xuIFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdHVuc2lnbmVkIGludCBzdGFydDtcbiBcbiBcdGlmICghKGxwLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXG4gXHRcdHJldHVybjtcbiBcbitcdGlmIChscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VnZXRfZXRoX21hY19zdGF0cylcbitcdFx0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X2V0aF9tYWNfc3RhdHMobHAsIG1hY19zdGF0cyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkXG4rYXhpZW5ldF8xZ19nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKVxuK3tcbitcdHVuc2lnbmVkIGludCBzdGFydDtcbitcbiBcdGRvIHtcbiBcdFx0c3RhcnQgPSByZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcbiBcdFx0Y3RybF9zdGF0cy1cdTAwM2VNQUNDb250cm9sRnJhbWVzVHJhbnNtaXR0ZWQgPVxuQEAgLTI0NDUsNyArMjU2NCwyMCBAQCBheGllbmV0X2V0aHRvb2xfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpO1xuIH1cbiBcbi1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIGF4aWVuZXRfcm1vbl9yYW5nZXNbXSA9IHtcbitzdGF0aWMgdm9pZFxuK2F4aWVuZXRfZXRodG9vbF9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdCAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKVxuK3tcbitcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7XG4rXG4rXHRpZiAoIShscC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgWEFFX0ZFQVRVUkVfU1RBVFMpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAobHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X2V0aF9jdHJsX3N0YXRzKVxuK1x0XHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VnZXRfZXRoX2N0cmxfc3RhdHMobHAsIGN0cmxfc3RhdHMpO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgYXhpZW5ldF9ybW9uX3Jhbmdlc1tdID0ge1xuIFx0eyAgIDY0LCAgICA2NCB9LFxuIFx0eyAgIDY1LCAgIDEyNyB9LFxuIFx0eyAgMTI4LCAgIDI1NSB9LFxuQEAgLTI0NTcsMTYgKzI1ODksMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSBheGllbmV0X3Jtb25fcmFuZ2VzW10gPSB7XG4gfTtcbiBcbiBzdGF0aWMgdm9pZFxuLWF4aWVuZXRfZXRodG9vbF9nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLVx0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxuLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpXG4rYXhpZW5ldF8xZ19nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXG4rXHRcdFx0ICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxuK1x0XHRcdCAgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlICoqcmFuZ2VzKVxuIHtcbi1cdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7XG4gXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4gXG4tXHRpZiAoIShscC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgWEFFX0ZFQVRVUkVfU1RBVFMpKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRkbyB7XG4gXHRcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4gXHRcdHJtb25fc3RhdHMtXHUwMDNldW5kZXJzaXplX3BrdHMgPVxuQEAgLTI1MTAsNiArMjYzOCwyMCBAQCBheGllbmV0X2V0aHRvb2xfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdCpyYW5nZXMgPSBheGllbmV0X3Jtb25fcmFuZ2VzO1xuIH1cbiBcbitzdGF0aWMgdm9pZFxuK2F4aWVuZXRfZXRodG9vbF9nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxuK1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpXG4re1xuK1x0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcbitcdGlmICghKGxwLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VnZXRfcm1vbl9zdGF0cylcbitcdFx0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X3Jtb25fc3RhdHMobHAsIHJtb25fc3RhdHMsIHJhbmdlcyk7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXhpZW5ldF9ldGh0b29sX29wcyA9IHtcbiBcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9NQVhfRlJBTUVTIHxcbiBcdFx0XHRcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XG5AQCAtMjU1NSwxMSArMjY5Nyw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXhpZW5ldF9ldGh0b29sX2RtYWVuZ2luZV9vcHMgPSB7XG4gXHQuZ2V0X3Jtb25fc3RhdHMgPSBheGllbmV0X2V0aHRvb2xfZ2V0X3Jtb25fc3RhdHMsXG4gfTtcbiBcbi1zdGF0aWMgc3RydWN0IGF4aWVuZXRfbG9jYWwgKnBjc190b19heGllbmV0X2xvY2FsKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxuLXtcbi1cdHJldHVybiBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCwgcGNzKTtcbi19XG4tXG4gc3RhdGljIHZvaWQgYXhpZW5ldF9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgbmVnX21vZGUsXG4gXHRcdFx0XHQgIHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuQEAgLTI2MTksNyArMjc1Niw5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKmF4aWVuZXRfbWFjX3NlbGVjdF9wY3Moc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4gXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcbiBcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB8fFxuLVx0ICAgIGludGVyZmFjZSA9PSAgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKVxuK1x0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkgfHxcbitcdCAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSIHx8XG4rXHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8yNUdCQVNFUilcbiBcdFx0cmV0dXJuIFx1MDAyNmxwLVx1MDAzZXBjcztcbiBcbiBcdHJldHVybiBOVUxMO1xuQEAgLTI2MzgsMTMgKzI3NzcsOSBAQCBzdGF0aWMgdm9pZCBheGllbmV0X21hY19saW5rX2Rvd24oc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4gXHQvKiBub3RoaW5nIG1lYW5pbmdmdWwgdG8gZG8gKi9cbiB9XG4gXG4tc3RhdGljIHZvaWQgYXhpZW5ldF9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbi1cdFx0XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXG4tXHRcdFx0XHR1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcbi1cdFx0XHRcdGludCBzcGVlZCwgaW50IGR1cGxleCxcbi1cdFx0XHRcdGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpXG4rc3RhdGljIHZvaWQgYXhpZW5ldF8xZ19tYWNfbGlua191cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IHNwZWVkLFxuK1x0XHRcdFx0ICAgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSlcbiB7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHRvX25ldF9kZXYoY29uZmlnLVx1MDAzZWRldik7XG4gXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdHUzMiBlbW1jX3JlZywgZmNjX3JlZztcbiBcbkBAIC0yNjgxLDYgKzI4MTYsMTkgQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcdGF4aWVuZXRfaW93KGxwLCBYQUVfRkNDX09GRlNFVCwgZmNjX3JlZyk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGF4aWVuZXRfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4rXHRcdFx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuK1x0XHRcdFx0dW5zaWduZWQgaW50IG1vZGUsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsXG4rXHRcdFx0XHRpbnQgc3BlZWQsIGludCBkdXBsZXgsXG4rXHRcdFx0XHRib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gdG9fbmV0X2Rldihjb25maWctXHUwMDNlZGV2KTtcbitcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1xuK1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZW1hY19saW5rX3VwKVxuK1x0XHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VtYWNfbGlua191cChuZGV2LCBzcGVlZCwgdHhfcGF1c2UsIHJ4X3BhdXNlKTtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgYXhpZW5ldF9waHlsaW5rX29wcyA9IHtcbiBcdC5tYWNfc2VsZWN0X3BjcyA9IGF4aWVuZXRfbWFjX3NlbGVjdF9wY3MsXG4gXHQubWFjX2NvbmZpZyA9IGF4aWVuZXRfbWFjX2NvbmZpZyxcbkBAIC0yNjk4LDcgKzI4NDYsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBheGllbmV0X3BoeWxpbmtfb3BzID0ge1xuIHN0YXRpYyB2b2lkIGF4aWVuZXRfZG1hX2Vycl9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHR1MzIgaTtcbi1cdHUzMiBheGllbmV0X3N0YXR1cztcbiBcdHN0cnVjdCBheGlkbWFfYmQgKmN1cl9wO1xuIFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBheGllbmV0X2xvY2FsLFxuIFx0XHRcdFx0XHRcdGRtYV9lcnJfdGFzayk7XG5AQCAtMjcxMSw4ICsyODU4LDggQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9kbWFfZXJyX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0bmFwaV9kaXNhYmxlKFx1MDAyNmxwLVx1MDAzZW5hcGlfdHgpO1xuIFx0bmFwaV9kaXNhYmxlKFx1MDAyNmxwLVx1MDAzZW5hcGlfcngpO1xuIFxuLVx0YXhpZW5ldF9zZXRvcHRpb25zKG5kZXYsIGxwLVx1MDAzZW9wdGlvbnMgXHUwMDI2XG4tXHRcdFx0ICAgfihYQUVfT1BUSU9OX1RYRU4gfCBYQUVfT1BUSU9OX1JYRU4pKTtcbitcdGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZXNldG9wdGlvbnMobmRldiwgbHAtXHUwMDNlb3B0aW9ucyBcdTAwMjZcbitcdFx0XHRcdCAgICAgICB+KFhBRV9PUFRJT05fVFhFTiB8IFhBRV9PUFRJT05fUlhFTikpO1xuIFxuIFx0YXhpZW5ldF9kbWFfc3RvcChscCk7XG4gXHRuZXRkZXZfcmVzZXRfcXVldWUobmRldik7XG5AQCAtMjc1NywyOSArMjkwNCwxMjYgQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9kbWFfZXJyX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIFx0YXhpZW5ldF9kbWFfc3RhcnQobHApO1xuIFxuLVx0YXhpZW5ldF9zdGF0dXMgPSBheGllbmV0X2lvcihscCwgWEFFX1JDVzFfT0ZGU0VUKTtcbi1cdGF4aWVuZXRfc3RhdHVzIFx1MDAyNj0gflhBRV9SQ1cxX1JYX01BU0s7XG4tXHRheGllbmV0X2lvdyhscCwgWEFFX1JDVzFfT0ZGU0VULCBheGllbmV0X3N0YXR1cyk7XG4tXG4tXHRheGllbmV0X3N0YXR1cyA9IGF4aWVuZXRfaW9yKGxwLCBYQUVfSVBfT0ZGU0VUKTtcbi1cdGlmIChheGllbmV0X3N0YXR1cyBcdTAwMjYgWEFFX0lOVF9SWFJKRUNUX01BU0spXG4tXHRcdGF4aWVuZXRfaW93KGxwLCBYQUVfSVNfT0ZGU0VULCBYQUVfSU5UX1JYUkpFQ1RfTUFTSyk7XG4tXHRheGllbmV0X2lvdyhscCwgWEFFX0lFX09GRlNFVCwgbHAtXHUwMDNlZXRoX2lycSBcdTAwM2UgMCA/XG4tXHRcdCAgICBYQUVfSU5UX1JFQ1ZfRVJST1JfTUFTSyA6IDApO1xuLVx0YXhpZW5ldF9pb3cobHAsIFhBRV9GQ0NfT0ZGU0VULCBYQUVfRkNDX0ZDUlhfTUFTSyk7XG4rXHQvKiBUaGlzIGVycm9yIGhhbmRsZXIgcnVucyBvbmx5IGZvciB0aGUgbGVnYWN5IGVtYmVkZGVkLURNQSAoMUcpIHBhdGgsXG4rXHQgKiB3aG9zZSBtYWNfaW5pdCgpIGNhbm5vdCBmYWlsLCBzbyBpdHMgcmV0dXJuIHZhbHVlIGlzIG5vdCBjaGVja2VkLlxuK1x0ICovXG4rXHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VtYWNfaW5pdChuZGV2KTtcbiBcbiBcdC8qIFN5bmMgZGVmYXVsdCBvcHRpb25zIHdpdGggSFcgYnV0IGxlYXZlIHJlY2VpdmVyIGFuZFxuIFx0ICogdHJhbnNtaXR0ZXIgZGlzYWJsZWQuXG4gXHQgKi9cbi1cdGF4aWVuZXRfc2V0b3B0aW9ucyhuZGV2LCBscC1cdTAwM2VvcHRpb25zIFx1MDAyNlxuLVx0XHRcdCAgIH4oWEFFX09QVElPTl9UWEVOIHwgWEFFX09QVElPTl9SWEVOKSk7XG4rXHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VzZXRvcHRpb25zKG5kZXYsIGxwLVx1MDAzZW9wdGlvbnMgXHUwMDI2XG4rXHRcdFx0XHQgICAgICAgfihYQUVfT1BUSU9OX1RYRU4gfCBYQUVfT1BUSU9OX1JYRU4pKTtcbiBcdGF4aWVuZXRfc2V0X21hY19hZGRyZXNzKG5kZXYsIE5VTEwpO1xuIFx0YXhpZW5ldF9zZXRfbXVsdGljYXN0X2xpc3QobmRldik7XG4gXHRuYXBpX2VuYWJsZShcdTAwMjZscC1cdTAwM2VuYXBpX3J4KTtcbiBcdG5hcGlfZW5hYmxlKFx1MDAyNmxwLVx1MDAzZW5hcGlfdHgpO1xuLVx0YXhpZW5ldF9zZXRvcHRpb25zKG5kZXYsIGxwLVx1MDAzZW9wdGlvbnMpO1xuK1x0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlc2V0b3B0aW9ucyhuZGV2LCBscC1cdTAwM2VvcHRpb25zKTtcbit9XG4rXG4rLyoqXG4rICogYXhpZW5ldF8xZ19waHlsaW5rX3NldF9jYXBzIC0gU2V0IDFHIHBoeWxpbmsgY2FwYWJpbGl0aWVzIGFuZCBpbnRlcmZhY2VzXG4rICogQGxwOlx0XHRQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuKyAqIEBjb25maWc6XHRQb2ludGVyIHRvIHRoZSBwaHlsaW5rX2NvbmZpZyBzdHJ1Y3R1cmVcbisgKi9cbitzdGF0aWMgdm9pZCBheGllbmV0XzFnX3BoeWxpbmtfc2V0X2NhcHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZylcbit7XG4rXHRjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTBGRCB8IE1BQ18xMDBGRCB8IE1BQ18xMDAwRkQ7XG4rXHRfX3NldF9iaXQobHAtXHUwMDNlcGh5X21vZGUsIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXHRpZiAobHAtXHUwMDNlc3dpdGNoX3hfc2dtaWkpIHtcbitcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgsXG4rXHRcdFx0ICBjb25maWctXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuK1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLFxuK1x0XHRcdCAgY29uZmlnLVx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbitcdH1cbit9XG4rXG4rLyoqXG4rICogYXhpZW5ldF8xZ19jbGtfaW5pdCAtIEdldCBhbmQgZW5hYmxlIHRoZSAxRyBNQUMgY2xvY2tzXG4rICogQGxwOlx0XHRQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIgb3RoZXJ3aXNlLlxuKyAqL1xuK3N0YXRpYyBpbnQgYXhpZW5ldF8xZ19jbGtfaW5pdChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gbHAtXHUwMDNlZGV2O1xuK1x0aW50IHJldDtcbitcbitcdGxwLVx1MDAzZWF4aV9jbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWxfZW5hYmxlZChkZXYsIFwic19heGlfbGl0ZV9jbGtcIik7XG4rXHRpZiAoIWxwLVx1MDAzZWF4aV9jbGspIHtcbitcdFx0LyogRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGlmIG5hbWVkIEFYSSBjbG9jayBpcyBub3RcbitcdFx0ICogcHJlc2VudCwgdHJlYXQgdGhlIGZpcnN0IGNsb2NrIHNwZWNpZmllZCBhcyB0aGUgQVhJIGNsb2NrLlxuK1x0XHQgKi9cbitcdFx0bHAtXHUwMDNlYXhpX2NsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbF9lbmFibGVkKGRldiwgTlVMTCk7XG4rXHR9XG4rXHRpZiAoSVNfRVJSKGxwLVx1MDAzZWF4aV9jbGspKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIobHAtXHUwMDNlYXhpX2NsayksXG4rXHRcdFx0XHQgICAgIFwiY291bGQgbm90IGdldCBBWEkgY2xvY2tcXG5cIik7XG4rXG4rXHRscC1cdTAwM2VtaXNjX2Nsa3NbMF0uaWQgPSBcImF4aXNfY2xrXCI7XG4rXHRscC1cdTAwM2VtaXNjX2Nsa3NbMV0uaWQgPSBcInJlZl9jbGtcIjtcbitcdGxwLVx1MDAzZW1pc2NfY2xrc1syXS5pZCA9IFwibWd0X2Nsa1wiO1xuK1xuK1x0cmV0ID0gZGV2bV9jbGtfYnVsa19nZXRfb3B0aW9uYWxfZW5hYmxlKGRldiwgWEFFX05VTV9NSVNDX0NMT0NLUyxcbitcdFx0XHRcdFx0XHRscC1cdTAwM2VtaXNjX2Nsa3MpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4rXHRcdFx0XHQgICAgIFwiY291bGQgbm90IGdldC9lbmFibGUgbWlzYy4gY2xvY2tzXFxuXCIpO1xuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuKy8qKlxuKyAqIGF4aWVuZXRfMWdfcHJvYmVfaW5pdCAtIDFHIE1BQy1zcGVjaWZpYyBwcm9iZS10aW1lIGluaXRpYWxpemF0aW9uXG4rICogQGxwOlx0XHRQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuKyAqL1xuK3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfcHJvYmVfaW5pdChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApXG4re1xuK1x0aWYgKGF4aWVuZXRfaW9yKGxwLCBYQUVfQUJJTElUWV9PRkZTRVQpIFx1MDAyNiBYQUVfQUJJTElUWV9TVEFUUylcbitcdFx0bHAtXHUwMDNlZmVhdHVyZXMgfD0gWEFFX0ZFQVRVUkVfU1RBVFM7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXhpZW5ldF9jb25maWcgYXhpZW5ldF8xZ19jb25maWcgPSB7XG4rXHQubWRpbyA9IHRydWUsXG4rXHQubWFjX2lycSA9IHRydWUsXG4rXHQubGVnYWN5X2RtYSA9IHRydWUsXG4rXHQudWNfZmlsdGVyID0gdHJ1ZSxcbitcdC5tY19maWx0ZXIgPSB0cnVlLFxuK1x0LnZsYW4gPSB0cnVlLFxuK1x0Lmp1bWJvID0gdHJ1ZSxcbitcdC5kbWFfdHhfY3N1bSA9IHRydWUsXG4rXHQucmVnc19uID0gQVhJRU5FVF9SRUdTX04sXG4rXHQuY2xrX2luaXQgPSBheGllbmV0XzFnX2Nsa19pbml0LFxuK1x0LnNldG9wdGlvbnMgPSBheGllbmV0X3NldG9wdGlvbnMsXG4rXHQucHJvYmVfaW5pdCA9IGF4aWVuZXRfMWdfcHJvYmVfaW5pdCxcbitcdC5tYWNfaW5pdCA9IGF4aWVuZXRfMWdfbWFjX2luaXQsXG4rXHQubWFjX2xpbmtfdXAgPSBheGllbmV0XzFnX21hY19saW5rX3VwLFxuK1x0LmdldF9yZWdzID0gYXhpZW5ldF8xZ19nZXRfcmVncyxcbitcdC5waHlsaW5rX3NldF9jYXBzID0gYXhpZW5ldF8xZ19waHlsaW5rX3NldF9jYXBzLFxuK1x0LnBjc19vcHMgPSBcdTAwMjZheGllbmV0X3Bjc19vcHMsXG4rXHQuc3RhdHNfdXBkYXRlID0gYXhpZW5ldF8xZ19zdGF0c191cGRhdGUsXG4rXHQuZ2V0X3N0YXRzNjQgPSBheGllbmV0XzFnX2dldF9zdGF0czY0LFxuK1x0LmdldF9ldGh0b29sX3N0YXRzID0gYXhpZW5ldF8xZ19nZXRfZXRodG9vbF9zdGF0cyxcbitcdC5nZXRfc3RyaW5ncyA9IGF4aWVuZXRfMWdfZ2V0X3N0cmluZ3MsXG4rXHQuZ2V0X3NzZXRfY291bnQgPSBheGllbmV0XzFnX2dldF9zc2V0X2NvdW50LFxuK1x0LmdldF9wYXVzZV9zdGF0cyA9IGF4aWVuZXRfMWdfZ2V0X3BhdXNlX3N0YXRzLFxuK1x0LmdldF9ldGhfbWFjX3N0YXRzID0gYXhpZW5ldF8xZ19nZXRfZXRoX21hY19zdGF0cyxcbitcdC5nZXRfZXRoX2N0cmxfc3RhdHMgPSBheGllbmV0XzFnX2dldF9ldGhfY3RybF9zdGF0cyxcbitcdC5nZXRfcm1vbl9zdGF0cyA9IGF4aWVuZXRfMWdfZ2V0X3Jtb25fc3RhdHMsXG4rfTtcbitcbisvKiBNYXRjaCB0YWJsZSBmb3Igb2ZfcGxhdGZvcm0gYmluZGluZyAqL1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGF4aWVuZXRfb2ZfbWF0Y2hbXSA9IHtcbitcdHsgLmNvbXBhdGlibGUgPSBcInhsbngsYXhpLWV0aGVybmV0LTEuMDAuYVwiLCAuZGF0YSA9IFx1MDAyNmF4aWVuZXRfMWdfY29uZmlnIH0sXG4rXHR7IC5jb21wYXRpYmxlID0gXCJ4bG54LGF4aS1ldGhlcm5ldC0xLjAxLmFcIiwgLmRhdGEgPSBcdTAwMjZheGllbmV0XzFnX2NvbmZpZyB9LFxuK1x0eyAuY29tcGF0aWJsZSA9IFwieGxueCxheGktZXRoZXJuZXQtMi4wMS5hXCIsIC5kYXRhID0gXHUwMDI2YXhpZW5ldF8xZ19jb25maWcgfSxcbitcdHsgLmNvbXBhdGlibGUgPSBcInhsbngseHh2LWV0aGVybmV0LTEuMFwiLCAuZGF0YSA9IFx1MDAyNmF4aWVuZXRfMTBnMjVnX2NvbmZpZyB9LFxuK1x0e30sXG4rfTtcbitcbitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBheGllbmV0X29mX21hdGNoKTtcbitcbiAvKipcbiAgKiBheGllbmV0X3Byb2JlIC0gQXhpIEV0aGVybmV0IHByb2JlIGZ1bmN0aW9uLlxuICAqIEBwZGV2Olx0UG9pbnRlciB0byBwbGF0Zm9ybSBkZXZpY2Ugc3RydWN0dXJlLlxuQEAgLTI4MzAsMjcgKzMwNzQsMTMgQEAgc3RhdGljIGludCBheGllbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRzZXFjb3VudF9tdXRleF9pbml0KFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50LCBcdTAwMjZscC1cdTAwM2VzdGF0c19sb2NrKTtcbiBcdElOSVRfREVGRVJSQUJMRV9XT1JLKFx1MDAyNmxwLVx1MDAzZXN0YXRzX3dvcmssIGF4aWVuZXRfcmVmcmVzaF9zdGF0cyk7XG4gXG4tXHRscC1cdTAwM2VheGlfY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsX2VuYWJsZWQoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4tXHRcdFx0XHRcdFx0ICAgIFwic19heGlfbGl0ZV9jbGtcIik7XG4tXHRpZiAoIWxwLVx1MDAzZWF4aV9jbGspIHtcbi1cdFx0LyogRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGlmIG5hbWVkIEFYSSBjbG9jayBpcyBub3QgcHJlc2VudCxcbi1cdFx0ICogdHJlYXQgdGhlIGZpcnN0IGNsb2NrIHNwZWNpZmllZCBhcyB0aGUgQVhJIGNsb2NrLlxuLVx0XHQgKi9cbi1cdFx0bHAtXHUwMDNlYXhpX2NsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbF9lbmFibGVkKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBOVUxMKTtcbi1cdH1cbi1cdGlmIChJU19FUlIobHAtXHUwMDNlYXhpX2NsaykpXG4tXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBQVFJfRVJSKGxwLVx1MDAzZWF4aV9jbGspLFxuLVx0XHRcdFx0ICAgICBcImNvdWxkIG5vdCBnZXQgQVhJIGNsb2NrXFxuXCIpO1xuK1x0bHAtXHUwMDNlYXhpZW5ldF9jb25maWcgPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuK1x0aWYgKCFscC1cdTAwM2VheGllbmV0X2NvbmZpZylcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4tXHRscC1cdTAwM2VtaXNjX2Nsa3NbMF0uaWQgPSBcImF4aXNfY2xrXCI7XG4tXHRscC1cdTAwM2VtaXNjX2Nsa3NbMV0uaWQgPSBcInJlZl9jbGtcIjtcbi1cdGxwLVx1MDAzZW1pc2NfY2xrc1syXS5pZCA9IFwibWd0X2Nsa1wiO1xuLVxuLVx0cmV0ID0gZGV2bV9jbGtfYnVsa19nZXRfb3B0aW9uYWxfZW5hYmxlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBYQUVfTlVNX01JU0NfQ0xPQ0tTLFxuLVx0XHRcdFx0XHRcdGxwLVx1MDAzZW1pc2NfY2xrcyk7XG4rXHRyZXQgPSBscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VjbGtfaW5pdChscCk7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcmV0LFxuLVx0XHRcdFx0ICAgICBcImNvdWxkIG5vdCBnZXQvZW5hYmxlIG1pc2MuIGNsb2Nrc1xcblwiKTtcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdC8qIE1hcCBkZXZpY2UgcmVnaXN0ZXJzICovXG4gXHRscC1cdTAwM2VyZWdzID0gZGV2bV9wbGF0Zm9ybV9nZXRfYW5kX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCwgXHUwMDI2ZXRocmVzKTtcbkBAIC0yODYxLDkgKzMwOTEsNiBAQCBzdGF0aWMgaW50IGF4aWVuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdC8qIFNldHVwIGNoZWNrc3VtIG9mZmxvYWQsIGJ1dCBkZWZhdWx0IHRvIG9mZiBpZiBub3Qgc3BlY2lmaWVkICovXG4gXHRscC1cdTAwM2VmZWF0dXJlcyA9IDA7XG4gXG4tXHRpZiAoYXhpZW5ldF9pb3IobHAsIFhBRV9BQklMSVRZX09GRlNFVCkgXHUwMDI2IFhBRV9BQklMSVRZX1NUQVRTKVxuLVx0XHRscC1cdTAwM2VmZWF0dXJlcyB8PSBYQUVfRkVBVFVSRV9TVEFUUztcbi1cbiBcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtXHUwMDNlZGV2Lm9mX25vZGUsIFwieGxueCx0eGNzdW1cIiwgXHUwMDI2dmFsdWUpO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0c3dpdGNoICh2YWx1ZSkge1xuQEAgLTI5NDAsNyArMzE2NywxNyBAQCBzdGF0aWMgaW50IGF4aWVuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4rXHRpZiAobHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlcHJvYmVfaW5pdClcbitcdFx0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlcHJvYmVfaW5pdChscCk7XG4rXG4gXHRpZiAoIW9mX3Byb3BlcnR5X3ByZXNlbnQocGRldi1cdTAwM2VkZXYub2Zfbm9kZSwgXCJkbWFzXCIpKSB7XG4rXHRcdC8qIE5vbi1kbWFlbmdpbmUgKGxlZ2FjeSBETUEpIG1vZGUgaXMgb25seSBzdXBwb3J0ZWQgYnkgc29tZSBNQUNzICovXG4rXHRcdGlmICghbHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlbGVnYWN5X2RtYSkge1xuK1x0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcIkxlZ2FjeSBETUEgbW9kZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgTUFDLCB1c2UgZG1hZW5naW5lXFxuXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4gXHRcdC8qIEZpbmQgdGhlIERNQSBub2RlLCBtYXAgdGhlIERNQSByZWdpc3RlcnMsIGFuZCBkZWNvZGUgdGhlIERNQSBJUlFzICovXG4gXHRcdG5wID0gb2ZfcGFyc2VfcGhhbmRsZShwZGV2LVx1MDAzZWRldi5vZl9ub2RlLCBcImF4aXN0cmVhbS1jb25uZWN0ZWRcIiwgMCk7XG4gXG5AQCAtMzAyMCw3ICszMjU3LDEwIEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0XHRzdHJ1Y3QgeGlsaW54X3ZkbWFfY29uZmlnIGNmZztcbiBcdFx0c3RydWN0IGRtYV9jaGFuICp0eF9jaGFuO1xuIFxuLVx0XHRscC1cdTAwM2VldGhfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbChwZGV2LCAwKTtcbitcdFx0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZW1hY19pcnEpXG4rXHRcdFx0bHAtXHUwMDNlZXRoX2lycSA9IHBsYXRmb3JtX2dldF9pcnFfb3B0aW9uYWwocGRldiwgMCk7XG4rXHRcdGVsc2VcbitcdFx0XHRscC1cdTAwM2VldGhfaXJxID0gLUVOWElPO1xuIFx0XHRpZiAobHAtXHUwMDNlZXRoX2lycSBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgbHAtXHUwMDNlZXRoX2lycSAhPSAtRU5YSU8pIHtcbiBcdFx0XHRyZXR1cm4gbHAtXHUwMDNlZXRoX2lycTtcbiBcdFx0fVxuQEAgLTMwNzMsMTAgKzMzMTMsMTIgQEAgc3RhdGljIGludCBheGllbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRscC1cdTAwM2V0eF9kbWFfY3IgPSBheGllbmV0X2NhbGNfY3IobHAsIFhBWElETUFfREZUX1RYX1RIUkVTSE9MRCxcbiBcdFx0XHRcdFx0WEFYSURNQV9ERlRfVFhfVVNFQyk7XG4gXG4tXHRyZXQgPSBheGllbmV0X21kaW9fc2V0dXAobHApO1xuLVx0aWYgKHJldClcbi1cdFx0ZGV2X3dhcm4oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4tXHRcdFx0IFwiZXJyb3IgcmVnaXN0ZXJpbmcgTURJTyBidXM6ICVkXFxuXCIsIHJldCk7XG4rXHRpZiAobHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlbWRpbykge1xuK1x0XHRyZXQgPSBheGllbmV0X21kaW9fc2V0dXAobHApO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGRldl93YXJuKFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFx0IFwiZXJyb3IgcmVnaXN0ZXJpbmcgTURJTyBidXM6ICVkXFxuXCIsIHJldCk7XG4rXHR9XG4gXG4gXHRpZiAobHAtXHUwMDNlcGh5X21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJIHx8XG4gXHQgICAgbHAtXHUwMDNlcGh5X21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCkge1xuQEAgLTMxMDAsMjMgKzMzNDIsMjEgQEAgc3RhdGljIGludCBheGllbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRcdFx0Z290byBjbGVhbnVwX21kaW87XG4gXHRcdH1cbiBcdFx0b2Zfbm9kZV9wdXQobnApO1xuLVx0XHRscC1cdTAwM2VwY3Mub3BzID0gXHUwMDI2YXhpZW5ldF9wY3Nfb3BzO1xuK1x0XHRscC1cdTAwM2VwY3Mub3BzID0gbHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlcGNzX29wcztcbitcdFx0bHAtXHUwMDNlcGNzLnBvbGwgPSB0cnVlO1xuK1x0fVxuK1xuK1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWludGVybmFsX3Bjcykge1xuK1x0XHRscC1cdTAwM2VwY3Mub3BzID0gbHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlcGNzX29wcztcbiBcdFx0bHAtXHUwMDNlcGNzLnBvbGwgPSB0cnVlO1xuIFx0fVxuIFxuIFx0bHAtXHUwMDNlcGh5bGlua19jb25maWcuZGV2ID0gXHUwMDI2bmRldi1cdTAwM2VkZXY7XG4gXHRscC1cdTAwM2VwaHlsaW5rX2NvbmZpZy50eXBlID0gUEhZTElOS19ORVRERVY7XG4gXHRscC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfbWFuYWdlZF9wbSA9IHRydWU7XG4tXHRscC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzID0gTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFIHxcbi1cdFx0TUFDXzEwRkQgfCBNQUNfMTAwRkQgfCBNQUNfMTAwMEZEO1xuK1x0bHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyA9IE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRTtcbiBcbi1cdF9fc2V0X2JpdChscC1cdTAwM2VwaHlfbW9kZSwgbHAtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuLVx0aWYgKGxwLVx1MDAzZXN3aXRjaF94X3NnbWlpKSB7XG4tXHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYLFxuLVx0XHRcdCAgbHAtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuLVx0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLFxuLVx0XHRcdCAgbHAtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuLVx0fVxuK1x0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlcGh5bGlua19zZXRfY2FwcyhscCwgXHUwMDI2bHAtXHUwMDNlcGh5bGlua19jb25maWcpO1xuIFxuIFx0bHAtXHUwMDNlcGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFx1MDAyNmxwLVx1MDAzZXBoeWxpbmtfY29uZmlnLCBwZGV2LVx1MDAzZWRldi5md25vZGUsXG4gXHRcdFx0XHQgICAgIGxwLVx1MDAzZXBoeV9tb2RlLFxuQEAgLTMxNTksNyArMzM5OSw4IEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRpZiAobHAtXHUwMDNlcGNzX3BoeSlcbiBcdFx0cHV0X2RldmljZShcdTAwMjZscC1cdTAwM2VwY3NfcGh5LVx1MDAzZWRldik7XG4gXG4tXHRheGllbmV0X21kaW9fdGVhcmRvd24obHApO1xuK1x0aWYgKGxwLVx1MDAzZW1paV9idXMpXG4rXHRcdGF4aWVuZXRfbWRpb190ZWFyZG93bihscCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGF4aWVuZXRfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfeHh2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfeHh2LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kYmM5YzIxYjEwNGFmXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfeHh2LmNcbkBAIC0wLDAgKzEsNTk1IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qXG4rICogWFhWICgxMEcvMjVHKSBzdXBwb3J0XG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5bGluay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInhpbGlueF9heGllbmV0LmhcIlxuKyNpbmNsdWRlIFwieGlsaW54X2F4aWVuZXRfeHh2LmhcIlxuK1xuKy8qIHJlYWRsX3BvbGxfdGltZW91dCgpIHNsZWVwIGludGVydmFsICh1cykgYW5kIDEgbXMgdG90YWwgdGltZW91dCBmb3IgR1RcbisgKiByZXNldC1kb25lIGFuZCBQQ1MgYmxvY2stbG9jayBwb2xscy4gVmFsdWVzIGZyb20gWnlucU1QL1ZlcnNhbCBicmluZy11cDtcbisgKiBQRzIxMCBkb2VzIG5vdCBzcGVjaWZ5IHRoZXNlIGJvdW5kcy5cbisgKi9cbisjZGVmaW5lIFhYVl9MSU5LX1BPTExfSU5URVJWQUxfVVNcdDEwXG4rXG4rLyogTnVtYmVyIG9mIFhYViAoMTBHLzI1RykgTUFDIHJlZ2lzdGVycyBleHBvc2VkIHZpYSBldGh0b29sIC1kLlxuKyAqIENvdmVycyBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMgcmVnaXN0ZXJzIHBlciBYaWxpbnggUEcyMTAuXG4rICovXG4rc3RhdGljIGNvbnN0IHUzMiBheGllbmV0X3h4dl9yZWdfZHVtcF9vZmZzZXRzW1hYVl9SRUdTX05dID0ge1xuK1x0WFhWX0dUX1JFU0VUX09GRlNFVCxcbitcdFhYVl9SRVNFVF9PRkZTRVQsXG4rXHRYWFZfTU9ERV9PRkZTRVQsXG4rXHRYWFZfVENfT0ZGU0VULFxuK1x0WFhWX1JDVzFfT0ZGU0VULFxuK1x0WFhWX0pVTV9PRkZTRVQsXG4rXHRYWFZfVkxfTEVOR1RIX09GRlNFVCxcbitcdFhYVl9USUNLUkVHX09GRlNFVCxcbitcdFhYVl9DT05GSUdfUkVWSVNJT04sXG4rXHRYWFZfQ09ORklHXzE1ODhfT0ZGU0VULFxuK1x0WFhWX0NPTkZJR19UWF9GTE9XX0NUUkwxX09GRlNFVCxcbitcdFhYVl9DT05GSUdfUlhfRkxPV19DVFJMMV9PRkZTRVQsXG4rXHRYWFZfQ09ORklHX1JYX0ZMT1dfQ1RSTDJfT0ZGU0VULFxuK1x0WFhWX0NPTkZJR19SU0ZFQ19PRkZTRVQsXG4rXHRYWFZfQ09ORklHX0ZFQ19PRkZTRVQsXG4rXHRYWFZfQU5fQ1RMMV9PRkZTRVQsXG4rXHRYWFZfQU5fQ1RMMl9PRkZTRVQsXG4rXHRYWFZfQU5fQUJJTElUWV9PRkZTRVQsXG4rXHRYWFZfTFRfQ1RMMV9PRkZTRVQsXG4rXHRYWFZfU1dJVENIX0NPUkVfU1BFRURfT0ZGU0VULFxuK1x0WFhWX0NPTkZJR18xNTg4XzMyQklUX09GRlNFVCxcbitcdFhYVl9UWF9DT05GSUdfMTU4OF9PRkZTRVQsXG4rXHRYWFZfUlhfQ09ORklHXzE1ODhfT0ZGU0VULFxuK1x0WFhWX0dUV0laX0NUUkxfT0ZGU0VULFxuK1x0WFhWX1NUQVRSWF9TVEFUVVMwX09GRlNFVCxcbitcdFhYVl9SWF9TVEFUVVNfUkVHMSxcbitcdFhYVl9TVEFUUlhfU1RBVFVTMl9PRkZTRVQsXG4rXHRYWFZfU1RBVFJYX0JMS0xDS19PRkZTRVQsXG4rXHRYWFZfU1RBVF9SWF9SU0ZFQ19TVEFUVVNfT0ZGU0VULFxuK1x0WFhWX1NUQVRfUlhfRkVDX1NUQVRVU19PRkZTRVQsXG4rXHRYWFZfU1RBVF9UWF9SU0ZFQ19TVEFUVVNfT0ZGU0VULFxuK1x0WFhWX1NUQVRfVFhfRkxPV19DVFJMMV9PRkZTRVQsXG4rXHRYWFZfU1RBVF9SWF9GTE9XX0NUUkwxX09GRlNFVCxcbitcdFhYVl9TVEFUX0FOX1NUU19PRkZTRVQsXG4rXHRYWFZfU1RBVF9BTl9MUF9TVEFUVVNfT0ZGU0VULFxuK1x0WFhWX1NUQVRfQU5fTElOS19DVExfT0ZGU0VULFxuK1x0WFhWX1NUQVRfTFRfU1RBVFVTMV9PRkZTRVQsXG4rXHRYWFZfU1RBVF9MVF9TVEFUVVMyX09GRlNFVCxcbitcdFhYVl9TVEFUX0xUX1NUQVRVUzNfT0ZGU0VULFxuK1x0WFhWX1NUQVRfTFRfU1RBVFVTNF9PRkZTRVQsXG4rXHRYWFZfU1RBVF9MVF9DT0VGRjBfT0ZGU0VULFxuK1x0WFhWX1NUQVRfUlhfVkFMSURfQ1RSTF9DT0RFX09GRlNFVCxcbitcdFhYVl9TVEFUX0NPUkVfU1BFRURfT0ZGU0VULFxuK1x0WFhWX1NUQVRfVFNOX09GRlNFVCxcbitcdFhYVl9TVEFUX0dUV0laX09GRlNFVCxcbitcdFhYVl9TVEFUX0FOX0xJTktfQ1RMMl9PRkZTRVQsXG4rfTtcbitcbisvKiBPcHRpb24gdGFibGUgZm9yIHNldHRpbmcgdXAgWFhWIEV0aGVybmV0IGhhcmR3YXJlIG9wdGlvbnMgKi9cbitzdGF0aWMgc3RydWN0IGF4aWVuZXRfb3B0aW9uIHh4dmVuZXRfb3B0aW9uc1tdID0ge1xuK1x0eyAvKiBUdXJuIG9uIEZDUyBzdHJpcHBpbmcgb24gcmVjZWl2ZSBwYWNrZXRzICovXG4rXHRcdC5vcHQgPSBYQUVfT1BUSU9OX0ZDU19TVFJJUCxcbitcdFx0LnJlZyA9IFhYVl9SQ1cxX09GRlNFVCxcbitcdFx0Lm1fb3IgPSBYWFZfUkNXMV9GQ1NfTUFTSyxcbitcdH0sIHsgLyogVHVybiBvbiBGQ1MgaW5zZXJ0aW9uIG9uIHRyYW5zbWl0IHBhY2tldHMgKi9cbitcdFx0Lm9wdCA9IFhBRV9PUFRJT05fRkNTX0lOU0VSVCxcbitcdFx0LnJlZyA9IFhYVl9UQ19PRkZTRVQsXG4rXHRcdC5tX29yID0gWFhWX1RDX0ZDU19NQVNLLFxuK1x0fSwgeyAvKiBFbmFibGUgdHJhbnNtaXR0ZXIgKi9cbitcdFx0Lm9wdCA9IFhBRV9PUFRJT05fVFhFTixcbitcdFx0LnJlZyA9IFhYVl9UQ19PRkZTRVQsXG4rXHRcdC5tX29yID0gWFhWX1RDX1RYX01BU0ssXG4rXHR9LCB7IC8qIEVuYWJsZSByZWNlaXZlciAqL1xuK1x0XHQub3B0ID0gWEFFX09QVElPTl9SWEVOLFxuK1x0XHQucmVnID0gWFhWX1JDVzFfT0ZGU0VULFxuK1x0XHQubV9vciA9IFhYVl9SQ1cxX1JYX01BU0ssXG4rXHR9LFxuK1x0e31cbit9O1xuK1xuKy8qIFBHMjEwIHN0YXRpc3RpY3MtYmxvY2sgb2Zmc2V0cyBpbmRleGVkIGJ5IGVudW0geHh2X3N0YXQuIEVhY2ggZW50cnkgaXNcbisgKiB0aGUgMzItYml0IExTQiByZWdpc3RlciBhZGRyZXNzOyB0aGUgY29ycmVzcG9uZGluZyBNU0IgaXMgYXQgKzQuXG4rICovXG4rc3RhdGljIGNvbnN0IHUzMiBheGllbmV0X3h4dl9zdGF0X29mZnNldHNbWFhWX1NUQVRfQ09VTlRdID0ge1xuK1x0W1hYVl9TVEFUX1JYX1RPVEFMX1BBQ0tFVFNdXHQgPSBYWFZfU1RBVF9SWF9UT1RBTF9QQUNLRVRTX09GRlNFVCxcbitcdFtYWFZfU1RBVF9SWF9UT1RBTF9HT09EX1BBQ0tFVFNdID0gWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9QQUNLRVRTX09GRlNFVCxcbitcdFtYWFZfU1RBVF9SWF9UT1RBTF9CWVRFU11cdCA9IFhYVl9TVEFUX1JYX1RPVEFMX0JZVEVTX09GRlNFVCxcbitcdFtYWFZfU1RBVF9SWF9UT1RBTF9HT09EX0JZVEVTXVx0ID0gWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9CWVRFU19PRkZTRVQsXG4rXHRbWFhWX1NUQVRfUlhfQkFEX0ZDU11cdFx0ID0gWFhWX1NUQVRfUlhfQkFEX0ZDU19PRkZTRVQsXG4rXHRbWFhWX1NUQVRfUlhfSU5SQU5HRUVSUl1cdCA9IFhYVl9TVEFUX1JYX0lOUkFOR0VFUlJfT0ZGU0VULFxuK1x0W1hYVl9TVEFUX1JYX01VTFRJQ0FTVF1cdFx0ID0gWFhWX1NUQVRfUlhfTVVMVElDQVNUX09GRlNFVCxcbitcdFtYWFZfU1RBVF9SWF9CUk9BRENBU1RdXHRcdCA9IFhYVl9TVEFUX1JYX0JST0FEQ0FTVF9PRkZTRVQsXG4rXHRbWFhWX1NUQVRfUlhfVU5ERVJTSVpFXVx0XHQgPSBYWFZfU1RBVF9SWF9VTkRFUlNJWkVfT0ZGU0VULFxuK1x0W1hYVl9TVEFUX1JYX0ZSQUdNRU5UXVx0XHQgPSBYWFZfU1RBVF9SWF9GUkFHTUVOVF9PRkZTRVQsXG4rXHRbWFhWX1NUQVRfUlhfSkFCQkVSXVx0XHQgPSBYWFZfU1RBVF9SWF9KQUJCRVJfT0ZGU0VULFxuK1x0W1hYVl9TVEFUX1JYX09WRVJTSVpFXVx0XHQgPSBYWFZfU1RBVF9SWF9PVkVSU0laRV9PRkZTRVQsXG4rXHRbWFhWX1NUQVRfUlhfUEFVU0VdXHRcdCA9IFhYVl9TVEFUX1JYX1BBVVNFX09GRlNFVCxcbitcdFtYWFZfU1RBVF9UWF9UT1RBTF9QQUNLRVRTXVx0ID0gWFhWX1NUQVRfVFhfVE9UQUxfUEFDS0VUU19PRkZTRVQsXG4rXHRbWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9QQUNLRVRTXSA9IFhYVl9TVEFUX1RYX1RPVEFMX0dPT0RfUEFDS0VUU19PRkZTRVQsXG4rXHRbWFhWX1NUQVRfVFhfVE9UQUxfQllURVNdXHQgPSBYWFZfU1RBVF9UWF9UT1RBTF9CWVRFU19PRkZTRVQsXG4rXHRbWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9CWVRFU11cdCA9IFhYVl9TVEFUX1RYX1RPVEFMX0dPT0RfQllURVNfT0ZGU0VULFxuK1x0W1hYVl9TVEFUX1RYX0JBRF9GQ1NdXHRcdCA9IFhYVl9TVEFUX1RYX0JBRF9GQ1NfT0ZGU0VULFxuK1x0W1hYVl9TVEFUX1RYX0ZSQU1FX0VSUk9SXVx0ID0gWFhWX1NUQVRfVFhfRlJBTUVfRVJST1JfT0ZGU0VULFxuK1x0W1hYVl9TVEFUX1RYX01VTFRJQ0FTVF1cdFx0ID0gWFhWX1NUQVRfVFhfTVVMVElDQVNUX09GRlNFVCxcbitcdFtYWFZfU1RBVF9UWF9CUk9BRENBU1RdXHRcdCA9IFhYVl9TVEFUX1RYX0JST0FEQ0FTVF9PRkZTRVQsXG4rXHRbWFhWX1NUQVRfVFhfUEFVU0VdXHRcdCA9IFhYVl9TVEFUX1RYX1BBVVNFX09GRlNFVCxcbit9O1xuK1xuKy8qIFhYViAoUEcyMTApIGNvdW50ZXJzIGV4cG9zZWQgdmlhIGV0aHRvb2wgLVMuIE9ubHkgY291bnRlcnMgdGhhdCBoYXZlIG5vXG4rICogc3RhbmRhcmQgdUFQSSBhcmUgbGlzdGVkIGhlcmU7IHRoZSB0b3RhbHMgaW5jbHVkZSBlcnJvcmVkIGZyYW1lcywgc28gdGhleVxuKyAqIGFyZSBkaXN0aW5jdCBmcm9tIHRoZSBnb29kLWZyYW1lIGNvdW50cyBpbiBydG5sX2xpbmtfc3RhdHM2NCBhbmQgdGhlXG4rICogSUVFRSBNQUMgc3RhdGlzdGljcy4gRXZlcnkgb3RoZXIgWFhWIGNvdW50ZXIgaXMgcmVwb3J0ZWQgdGhyb3VnaCB0aGVcbisgKiBkZWRpY2F0ZWQgc3RhdHM2NCwgcGF1c2UsIE1BQyBhbmQgUk1PTiBjYWxsYmFja3MgaW5zdGVhZC5cbisgKi9cbitzdGF0aWMgY29uc3QgZW51bSB4eHZfc3RhdCBheGllbmV0X3h4dl9wcml2X3N0YXRzW10gPSB7XG4rXHRYWFZfU1RBVF9SWF9UT1RBTF9QQUNLRVRTLFxuK1x0WFhWX1NUQVRfUlhfVE9UQUxfQllURVMsXG4rXHRYWFZfU1RBVF9UWF9UT1RBTF9QQUNLRVRTLFxuK1x0WFhWX1NUQVRfVFhfVE9UQUxfQllURVMsXG4rXHRYWFZfU1RBVF9UWF9CQURfRkNTLFxuK1x0WFhWX1NUQVRfVFhfRlJBTUVfRVJST1IsXG4rfTtcbitcbitzdGF0aWMgY29uc3QgY2hhciBheGllbmV0X3h4dl9ldGh0b29sX3N0YXRzX3N0cmluZ3NbXVtFVEhfR1NUUklOR19MRU5dID0ge1xuK1x0XCJSWCBUb3RhbCBQYWNrZXRzXCIsXG4rXHRcIlJYIFRvdGFsIEJ5dGVzXCIsXG4rXHRcIlRYIFRvdGFsIFBhY2tldHNcIixcbitcdFwiVFggVG90YWwgQnl0ZXNcIixcbitcdFwiVFggQmFkIEZDU1wiLFxuK1x0XCJUWCBGcmFtZSBFcnJvclwiLFxuK307XG4rXG4rc3RhdGljIHU2NCBheGllbmV0X3h4dl9yZWFkX2NvdW50ZXIoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLCBlbnVtIHh4dl9zdGF0IHN0YXQpXG4re1xuK1x0dTMyIG9mZiA9IGF4aWVuZXRfeHh2X3N0YXRfb2Zmc2V0c1tzdGF0XTtcbitcdHUzMiBsc2IsIG1zYjtcbitcbitcdGxzYiA9IGF4aWVuZXRfaW9yKGxwLCBvZmYpO1xuK1x0bXNiID0gYXhpZW5ldF9pb3IobHAsIG9mZiArIFhYVl9TVEFUX01TQl9PRkZTRVQpO1xuK1xuK1x0cmV0dXJuICgodTY0KW1zYiBcdTAwM2NcdTAwM2MgMzIpIHwgbHNiO1xuK31cbitcbitzdGF0aWMgYm9vbCBheGllbmV0X3h4dl9pcF9oYXNfZ3R3aXpfc3RhdHVzKHUzMiBpcF92ZXJzaW9uKVxuK3tcbitcdHU4IG1pbm9yID0gRklFTERfR0VUKFhYVl9NSU5fTUFTSywgaXBfdmVyc2lvbik7XG4rXHR1OCBtYWogPSBGSUVMRF9HRVQoWFhWX01BSl9NQVNLLCBpcF92ZXJzaW9uKTtcbitcbitcdGlmIChtYWogPT0gWFhWX0lQX1ZFUl9HVFdJWl9NQUpfTUlOKVxuK1x0XHRyZXR1cm4gbWlub3IgXHUwMDNlPSBYWFZfSVBfVkVSX0dUV0laX01JTl9NSU47XG4rXHRyZXR1cm4gbWFqIFx1MDAzZSBYWFZfSVBfVkVSX0dUV0laX01BSl9NSU47XG4rfVxuK1xuKy8qKlxuKyAqIGF4aWVuZXRfeHh2X3NldG9wdGlvbnMgLSBTZXQgWFhWIE1BQyBvcHRpb25zIGZyb20gdGhlIG9wdGlvbiB0YWJsZVxuKyAqIEBuZGV2OiBQb2ludGVyIHRvIHRoZSBuZXRfZGV2aWNlIHN0cnVjdHVyZVxuKyAqIEBvcHRpb25zOiBPcHRpb24gZmxhZ3MgdG8gYXBwbHlcbisgKi9cbitzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9zZXRvcHRpb25zKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgb3B0aW9ucylcbit7XG4rXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdHN0cnVjdCBheGllbmV0X29wdGlvbiAqdHAgPSB4eHZlbmV0X29wdGlvbnM7XG4rXHR1MzIgcmVnO1xuK1xuK1x0d2hpbGUgKHRwLVx1MDAzZW9wdCkge1xuK1x0XHRyZWcgPSBheGllbmV0X2lvcihscCwgdHAtXHUwMDNlcmVnKSBcdTAwMjYgfnRwLVx1MDAzZW1fb3I7XG4rXHRcdGlmIChvcHRpb25zIFx1MDAyNiB0cC1cdTAwM2VvcHQpXG4rXHRcdFx0cmVnIHw9IHRwLVx1MDAzZW1fb3I7XG4rXHRcdGF4aWVuZXRfaW93KGxwLCB0cC1cdTAwM2VyZWcsIHJlZyk7XG4rXHRcdHRwKys7XG4rXHR9XG4rXG4rXHRscC1cdTAwM2VvcHRpb25zIHw9IG9wdGlvbnM7XG4rfVxuK1xuKy8qKlxuKyAqIGF4aWVuZXRfeHh2X3Byb2JlX2luaXQgLSBJbml0aWFsaXplIFhYVi1zcGVjaWZpYyBzdGF0ZSBhdCBwcm9iZSB0aW1lXG4rICogQGxwOiBQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuKyAqL1xuK3N0YXRpYyB2b2lkIGF4aWVuZXRfeHh2X3Byb2JlX2luaXQoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKVxuK3tcbitcdGxwLVx1MDAzZXh4dl9pcF92ZXJzaW9uID0gYXhpZW5ldF9pb3IobHAsIFhYVl9DT05GSUdfUkVWSVNJT04pO1xuK1x0bHAtXHUwMDNlZmVhdHVyZXMgfD0gWEFFX0ZFQVRVUkVfU1RBVFM7XG4rfVxuK1xuKy8qKlxuKyAqIGF4aWVuZXRfeHh2X2d0X3Jlc2V0IC0gUHVsc2UgdGhlIFhYViBHVCByZXNldCBsaW5lXG4rICogQGxwOiBQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuKyAqL1xuK3N0YXRpYyB2b2lkIGF4aWVuZXRfeHh2X2d0X3Jlc2V0KHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcbit7XG4rXHR1MzIgdmFsO1xuK1xuK1x0LyogUmVzZXQgR1QgKi9cbitcdHZhbCA9IGF4aWVuZXRfaW9yKGxwLCBYWFZfR1RfUkVTRVRfT0ZGU0VUKTtcbitcdHZhbCB8PSBYWFZfR1RfUkVTRVRfTUFTSztcbitcdGF4aWVuZXRfaW93KGxwLCBYWFZfR1RfUkVTRVRfT0ZGU0VULCB2YWwpO1xuK1x0LyogQWxsb3cgMSBtcyBmb3IgdGhlIEdUIHJlc2V0IHRvIHNldHRsZSAoc2VlIHRpbWVvdXQgbm90ZSBhYm92ZSkgKi9cbitcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcbitcdHZhbCA9IGF4aWVuZXRfaW9yKGxwLCBYWFZfR1RfUkVTRVRfT0ZGU0VUKTtcbitcdHZhbCBcdTAwMjY9IH5YWFZfR1RfUkVTRVRfTUFTSztcbitcdGF4aWVuZXRfaW93KGxwLCBYWFZfR1RfUkVTRVRfT0ZGU0VULCB2YWwpO1xuK31cbitcbisvKipcbisgKiBheGllbmV0X3h4dl9wb2xsX2xpbmtfcmVhZHkgLSBXYWl0IGZvciBYWFYgR1QgYW5kIFBDUyBibG9jayBsb2NrXG4rICogQG5kZXY6IFBvaW50ZXIgdG8gdGhlIG5ldF9kZXZpY2Ugc3RydWN0dXJlXG4rICpcbisgKiBQb2xsIEdUIHdpemFyZCByZXNldC1kb25lIG9uIElQIHYzLjIrLCB0aGVuIFJYIFBDUyBibG9jayBsb2NrLiBCbG9jay1sb2NrXG4rICogZmFpbHVyZSBpcyBsb2dnZWQgYnV0IG5vdCBwcm9wYWdhdGVkOiBpdCBkZXBlbmRzIG9uIGEgbGl2ZSBsaW5rIHBhcnRuZXIgYW5kXG4rICogcmVmZXJlbmNlIGNsb2NrLCBzbyBhbiB1bnBsdWdnZWQgY2FibGUgbXVzdCBub3QgZmFpbCBkZXZpY2UgYnJpbmctdXAuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBpZiBHVCByZXNldC1kb25lIHRpbWVzIG91dC5cbisgKi9cbitzdGF0aWMgaW50IGF4aWVuZXRfeHh2X3BvbGxfbGlua19yZWFkeShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LyogQ29uZmlybSBYWFYgRXRoZXJuZXQgaXMgdXA6IG9uIElQIHYzLjIrLCB3YWl0IGZvciBHVFxuK1x0ICogcmVzZXQtZG9uZSBiZWZvcmUgZnVydGhlciByZWdpc3RlciBhY2Nlc3MsIHRoZW4gcG9sbCB1bnRpbFxuK1x0ICogUlggUENTIGJsb2NrIGxvY2sgaXMgYXNzZXJ0ZWQuXG4rXHQgKi9cbitcdGlmIChheGllbmV0X3h4dl9pcF9oYXNfZ3R3aXpfc3RhdHVzKGxwLVx1MDAzZXh4dl9pcF92ZXJzaW9uKSkge1xuK1x0XHRyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQobHAtXHUwMDNlcmVncyArIFhYVl9TVEFUX0dUV0laX09GRlNFVCxcbitcdFx0XHRcdFx0IHZhbCxcbitcdFx0XHRcdFx0ICh2YWwgXHUwMDI2IFhYVl9HVFdJWl9SRVNFVF9ET05FKSA9PSBYWFZfR1RXSVpfUkVTRVRfRE9ORSxcbitcdFx0XHRcdFx0IFhYVl9MSU5LX1BPTExfSU5URVJWQUxfVVMsXG4rXHRcdFx0XHRcdCBERUxBWV9PRl9PTkVfTUlMTElTRUMpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZGV2LCBcIlhYViBNQUMgR1QgcmVzZXQgbm90IGNvbXBsZXRlISBDcm9zcy1jaGVjayB0aGUgTUFDIHJlZiBjbG9jayBjb25maWd1cmF0aW9uXFxuXCIpO1xuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldCA9IHJlYWRsX3BvbGxfdGltZW91dChscC1cdTAwM2VyZWdzICsgWFhWX1NUQVRSWF9CTEtMQ0tfT0ZGU0VULFxuK1x0XHRcdFx0IHZhbCwgKHZhbCBcdTAwMjYgWFhWX1JYX0JMS0xDS19NQVNLKSxcbitcdFx0XHRcdCBYWFZfTElOS19QT0xMX0lOVEVSVkFMX1VTLFxuK1x0XHRcdFx0IERFTEFZX09GX09ORV9NSUxMSVNFQyk7XG4rXHRpZiAocmV0KVxuK1x0XHRuZXRkZXZfZXJyKG5kZXYsIFwiWFhWIE1BQyBibG9jayBsb2NrIG5vdCBjb21wbGV0ZSEgQ3Jvc3MtY2hlY2sgdGhlIE1BQyByZWYgY2xvY2sgY29uZmlndXJhdGlvblxcblwiKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiBheGllbmV0X3h4dl9tYWNfaW5pdCAtIFhYViBNQUMtc3BlY2lmaWMgYnJpbmctdXAgYWZ0ZXIgdGhlIERNQSByZXNldFxuKyAqIEBuZGV2OiBQb2ludGVyIHRvIHRoZSBuZXRfZGV2aWNlIHN0cnVjdHVyZVxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIgb3RoZXJ3aXNlLlxuKyAqL1xuK3N0YXRpYyBpbnQgYXhpZW5ldF94eHZfbWFjX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gYXhpZW5ldF94eHZfcG9sbF9saW5rX3JlYWR5KG5kZXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGxwLVx1MDAzZW9wdGlvbnMgfD0gWEFFX09QVElPTl9GQ1NfU1RSSVA7XG4rXHRscC1cdTAwM2VvcHRpb25zIHw9IFhBRV9PUFRJT05fRkNTX0lOU0VSVDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9waHlsaW5rX3NldF9jYXBhYmlsaXRpZXMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuK1x0XHRcdFx0XHRcdCBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNmZylcbit7XG4rXHR1MzIgY29yZV9zcGVlZDtcbitcdGJvb2wgcnRzdztcbitcbitcdGNvcmVfc3BlZWQgPSBheGllbmV0X2lvcihscCwgWFhWX1NUQVRfQ09SRV9TUEVFRF9PRkZTRVQpO1xuK1x0LyogQml0WzE6MF06IDAwPTI1RywgMDE9MTBHLCAxMD1ydW50aW1lLXN3aXRjaGFibGUgMjVHLFxuK1x0ICogMTE9cnVudGltZS1zd2l0Y2hhYmxlIDEwRy4gQSBydW50aW1lLXN3aXRjaGFibGUgY29yZSBjYW4gb3BlcmF0ZSBhdFxuK1x0ICogZWl0aGVyIHNwZWVkLCBzbyBhZHZlcnRpc2UgYm90aDsgYSBmaXhlZCBjb3JlIGFkdmVydGlzZXMgb25seSBpdHNcbitcdCAqIGNvbmZpZ3VyZWQgc3BlZWQuXG4rXHQgKi9cbitcdHJ0c3cgPSBjb3JlX3NwZWVkIFx1MDAyNiBYWFZfU1RBVF9DT1JFX1NQRUVEX1JUU1dfTUFTSztcbitcbitcdGlmIChydHN3IHx8IChjb3JlX3NwZWVkIFx1MDAyNiBYWFZfU1RBVF9DT1JFX1NQRUVEXzEwR19NQVNLKSkge1xuK1x0XHRjZmctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMDBGRDtcbitcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUixcbitcdFx0XHQgIGNmZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXHR9XG4rXG4rXHRpZiAocnRzdyB8fCAhKGNvcmVfc3BlZWQgXHUwMDI2IFhYVl9TVEFUX0NPUkVfU1BFRURfMTBHX01BU0spKSB7XG4rXHRcdGNmZy1cdTAwM2VtYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18yNTAwMEZEO1xuK1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzI1R0JBU0VSLFxuK1x0XHRcdCAgY2ZnLVx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgYXhpZW5ldF94eHZfcGNzX2dldF9zdGF0ZShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcyxcbitcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBuZWdfbW9kZSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuK3tcbitcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IHBjc190b19heGllbmV0X2xvY2FsKHBjcyk7XG4rXG4rXHRzdGF0ZS1cdTAwM2VkdXBsZXggPSBEVVBMRVhfRlVMTDtcbitcdHN0YXRlLVx1MDAzZWFuX2NvbXBsZXRlID0gISEoYXhpZW5ldF9pb3IobHAsIFhYVl9TVEFUX0FOX1NUU19PRkZTRVQpIFx1MDAyNlxuK1x0XHRcdFx0WFhWX0FOX0NPTVBMRVRFX01BU0spO1xuK1x0c3RhdGUtXHUwMDNlbGluayA9IGF4aWVuZXRfaW9yKGxwLCBYWFZfUlhfU1RBVFVTX1JFRzEpIFx1MDAyNlxuK1x0XHQgICAgICBYWFZfUlhfU1RBVFVTX01BU0s7XG4rXG4rXHRpZiAoYXhpZW5ldF9pb3IobHAsIFhYVl9TVEFUX0NPUkVfU1BFRURfT0ZGU0VUKSBcdTAwMjZcbitcdCAgICBYWFZfU1RBVF9DT1JFX1NQRUVEXzEwR19NQVNLKVxuK1x0XHRzdGF0ZS1cdTAwM2VzcGVlZCA9IFNQRUVEXzEwMDAwO1xuK1x0ZWxzZVxuK1x0XHRzdGF0ZS1cdTAwM2VzcGVlZCA9IFNQRUVEXzI1MDAwO1xuK31cbitcbitzdGF0aWMgaW50IGF4aWVuZXRfeHh2X3Bjc19jb25maWcoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBuZWdfbW9kZSxcbitcdFx0XHRcdCAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcbitcdFx0XHRcdCAgY29uc3QgdW5zaWduZWQgbG9uZyAqYWR2ZXJ0aXNpbmcsXG4rXHRcdFx0XHQgIGJvb2wgcGVybWl0X3BhdXNlX3RvX21hYylcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX3Bjc19vcHMgYXhpZW5ldF94eHZfcGNzX29wcyA9IHtcbitcdC5wY3NfZ2V0X3N0YXRlID0gYXhpZW5ldF94eHZfcGNzX2dldF9zdGF0ZSxcbitcdC5wY3NfY29uZmlnID0gYXhpZW5ldF94eHZfcGNzX2NvbmZpZyxcbit9O1xuK1xuKy8qKlxuKyAqIGF4aWVuZXRfeHh2X2dldF9yZWdzIC0gRHVtcCBYWFYgTUFDIHJlZ2lzdGVycyBmb3IgZXRodG9vbFxuKyAqIEBscDogUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcbisgKiBAZGF0YTogQnVmZmVyIGZvciByZWdpc3RlciB2YWx1ZXMgKHplcm9lZCBhbmQgc2l6ZWQgYnkgdGhlIGNhbGxlcilcbisgKi9cbitzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfcmVncyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsIHUzMiAqZGF0YSlcbit7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoYXhpZW5ldF94eHZfcmVnX2R1bXBfb2Zmc2V0cyk7IGkrKylcbitcdFx0ZGF0YVtpXSA9IGF4aWVuZXRfaW9yKGxwLCBheGllbmV0X3h4dl9yZWdfZHVtcF9vZmZzZXRzW2ldKTtcbit9XG4rXG4rc3RhdGljIGludCBheGllbmV0XzEwZzI1Z19jbGtfaW5pdChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gbHAtXHUwMDNlZGV2O1xuK1x0aW50IHJldDtcbitcbitcdC8qIFRoZSByZWdpc3RlciwgUlggYW5kIEdUIERSUCBjbG9ja3MgYXJlIG1hbmRhdG9yeSBmb3IgTUFDK1BDU1xuK1x0ICogb3BlcmF0aW9uLCBzbyBmZXRjaCB0aGVtIGFzIHJlcXVpcmVkLlxuK1x0ICovXG4rXHRscC1cdTAwM2VheGlfY2xrID0gZGV2bV9jbGtfZ2V0X2VuYWJsZWQoZGV2LCBcInNfYXhpXCIpO1xuK1x0aWYgKElTX0VSUihscC1cdTAwM2VheGlfY2xrKSlcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGxwLVx1MDAzZWF4aV9jbGspLFxuK1x0XHRcdFx0ICAgICBcImNvdWxkIG5vdCBnZXQgQVhJIGNsb2NrXFxuXCIpO1xuK1xuK1x0bHAtXHUwMDNlbWlzY19jbGtzWzBdLmlkID0gXCJyeF9jb3JlXCI7XG4rXHRscC1cdTAwM2VtaXNjX2Nsa3NbMV0uaWQgPSBcImRycFwiO1xuK1xuK1x0cmV0ID0gZGV2bV9jbGtfYnVsa19nZXRfZW5hYmxlKGRldiwgMiwgbHAtXHUwMDNlbWlzY19jbGtzKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0ICAgICBcImNvdWxkIG5vdCBnZXQvZW5hYmxlIFhYViBjbG9ja3NcXG5cIik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogYXhpZW5ldF94eHZfc3RhdHNfdXBkYXRlIC0gTGF0Y2ggYW5kIGFjY3VtdWxhdGUgWFhWIGhhcmR3YXJlIGNvdW50ZXJzXG4rICogQGxwOiBQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuKyAqXG4rICogVGhlIFhYViBzdGF0aXN0aWNzIGNvdW50ZXJzIGFyZSBjbGVhci1vbi10aWNrIChQRzIxMCk6IHdyaXRpbmcgVElDS19SRUdcbisgKiBsYXRjaGVzIHRoZSBpbnRlcm5hbCBhY2N1bXVsYXRvcnMgaW50byB0aGUgcmVhZGFibGUgU1RBVF8qX0xTQi9NU0IgcmVnaXN0ZXJzXG4rICogYW5kIGNsZWFycyB0aGUgaW50ZXJuYWwgYWNjdW11bGF0b3JzLiBFYWNoIHBvc3QtVElDSyByZWFkIHRoZXJlZm9yZSByZXR1cm5zXG4rICogdGhlIGNvdW50IGZvciB0aGUgaW50ZXJ2YWwgc2luY2UgdGhlIHByZXZpb3VzIFRJQ0ssIHNvIHNvZnR3YXJlIGFjY3VtdWxhdGVzXG4rICogdGhvc2UgaW50ZXJ2YWxzIGludG8gbHAtXHUwMDNleHh2X3N0YXRfYmFzZS4gQSBsYXN0LWNvdW50ZXIgZGVsdGEgKGFzIHVzZWQgYnkgdGhlXG4rICogZnJlZS1ydW5uaW5nIDFHIE1BQyBwYXRoKSBpcyBub3QgbmVlZGVkLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGF4aWVuZXRfeHh2X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApXG4re1xuK1x0dTY0IGNvdW50ZXJbWFhWX1NUQVRfQ09VTlRdO1xuK1x0ZW51bSB4eHZfc3RhdCBzdGF0O1xuK1xuK1x0LyogTGF0Y2ggdGhlIGNsZWFyLW9uLXRpY2sgc25hcHNob3QgYW5kIHJlYWQgdGhlIGNvdW50ZXJzIG91dHNpZGUgdGhlXG4rXHQgKiBzZXFjb3VudCB3cml0ZSBzZWN0aW9uLCBzbyBvbmx5IHRoZSBhY2N1bXVsYXRvciB1cGRhdGVzIHJ1biBpbnNpZGUgaXRcbitcdCAqIGFuZCB0aGUgcmVhZGVyIHJldHJ5IHdpbmRvdyBzdGF5cyBzaG9ydC5cbitcdCAqL1xuK1x0YXhpZW5ldF9pb3cobHAsIFhYVl9USUNLUkVHX09GRlNFVCwgWFhWX1RJQ0tSRUdfU1RBVEVOX01BU0spO1xuK1x0Zm9yIChzdGF0ID0gMDsgc3RhdCBcdTAwM2MgWFhWX1NUQVRfQ09VTlQ7IHN0YXQrKylcbitcdFx0Y291bnRlcltzdGF0XSA9IGF4aWVuZXRfeHh2X3JlYWRfY291bnRlcihscCwgc3RhdCk7XG4rXG4rXHR3cml0ZV9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4rXHRmb3IgKHN0YXQgPSAwOyBzdGF0IFx1MDAzYyBYWFZfU1RBVF9DT1VOVDsgc3RhdCsrKVxuK1x0XHRscC1cdTAwM2V4eHZfc3RhdF9iYXNlW3N0YXRdICs9IGNvdW50ZXJbc3RhdF07XG4rXHR3cml0ZV9zZXFjb3VudF9lbmQoXHUwMDI2bHAtXHUwMDNlaHdfc3RhdHNfc2VxY291bnQpO1xuK31cbitcbisvKipcbisgKiBheGllbmV0X3h4dl9nZXRfc3RhdHM2NCAtIEZpbGwgcnRubF9saW5rX3N0YXRzNjQgZnJvbSBYWFYgY291bnRlcnNcbisgKiBAbHA6IFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlXG4rICogQHN0YXRzOiBPdXRwdXQgcnRubF9saW5rX3N0YXRzNjQgc3RydWN0dXJlIHRvIHBvcHVsYXRlXG4rICovXG4rc3RhdGljIHZvaWQgYXhpZW5ldF94eHZfZ2V0X3N0YXRzNjQoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXG4re1xuK1x0dW5zaWduZWQgaW50IHN0YXJ0O1xuK1x0dTY0IHR4X2h3X2Vycm9ycztcbitcbitcdGRvIHtcbitcdFx0c3RhcnQgPSByZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcbitcdFx0c3RhdHMtXHUwMDNlcnhfY3JjX2Vycm9ycyA9IGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfQkFEX0ZDU107XG4rXHRcdC8qIEJvdGggaW4tcmFuZ2UgbGVuZ3RoIGVycm9ycyBhbmQgZnJhbWUtdG9vLWxvbmcgKG92ZXJzaXplKVxuK1x0XHQgKiBmcmFtZXMgYXJlIElFRUUgODAyLjMgbGVuZ3RoIGVycm9ycywgc28gZm9sZCB0aGVtIHRvZ2V0aGVyXG4rXHRcdCAqIGludG8gcnhfbGVuZ3RoX2Vycm9yczsgcnhfb3Zlcl9lcnJvcnMgaXMgcmVzZXJ2ZWQgZm9yIHJlY2VpdmVyXG4rXHRcdCAqIEZJRk8vcmluZyBvdmVyZmxvdywgd2hpY2ggdGhlIFhYViBNQUMgZG9lcyBub3QgZXhwb3NlLlxuK1x0XHQgKi9cbitcdFx0c3RhdHMtXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyA9XG4rXHRcdFx0bHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9JTlJBTkdFRVJSXSArXG4rXHRcdFx0bHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9PVkVSU0laRV07XG4rXHRcdHN0YXRzLVx1MDAzZXJ4X2Vycm9ycyA9IGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfVU5ERVJTSVpFXSArXG4rXHRcdFx0XHQgICBscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX0ZSQUdNRU5UXSArXG4rXHRcdFx0XHQgICBscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX0pBQkJFUl0gK1xuK1x0XHRcdFx0ICAgc3RhdHMtXHUwMDNlcnhfY3JjX2Vycm9ycyArXG4rXHRcdFx0XHQgICBzdGF0cy1cdTAwM2VyeF9sZW5ndGhfZXJyb3JzO1xuK1x0XHRzdGF0cy1cdTAwM2VtdWx0aWNhc3QgPSBscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX01VTFRJQ0FTVF07XG4rXHRcdHR4X2h3X2Vycm9ycyA9IGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfQkFEX0ZDU10gK1xuK1x0XHRcdCAgICAgICBscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1RYX0ZSQU1FX0VSUk9SXTtcbitcdH0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2bHAtXHUwMDNlaHdfc3RhdHNfc2VxY291bnQsIHN0YXJ0KSk7XG4rXG4rXHQvKiBGb2xkIHRoZSBIVyBUWCBlcnJvciBjb3VudCBpbnRvIHRoZSBzb2Z0d2FyZSB0eF9lcnJvcnMgc2VlZGVkIGZyb21cbitcdCAqIGRldi1cdTAwM2VzdGF0cyBieSB0aGUgY2FsbGVyLiBUaGUgWFhWIHhtaXQgcGF0aCBidW1wcyBkZXYtXHUwMDNlc3RhdHMudHhfZXJyb3JzXG4rXHQgKiBmb3IgZnJhbWVzIGRyb3BwZWQgb24gcGFkIGZhaWx1cmUgYmVmb3JlIHRoZXkgcmVhY2ggdGhlIE1BQywgd2hpbGUgdGhlXG4rXHQgKiBIVyBjb3VudGVycyBvbmx5IGNvdmVyIGZyYW1lcyB0aGUgTUFDIGFjdHVhbGx5IHRyYW5zbWl0dGVkOyB0aGUgdHdvIGFyZVxuK1x0ICogZGlzam9pbnQuIFRoaXMgcnVucyBvbmNlLCBvdXRzaWRlIHRoZSBzZXFjb3VudCByZXRyeSBsb29wLCBzbyBhIHJhY2luZ1xuK1x0ICogc3RhdHMgdXBkYXRlIGNhbm5vdCBtYWtlIHRoZSBhY2N1bXVsYXRpb24gcmUtYWRkIG9uIHJldHJ5LlxuK1x0ICovXG4rXHRzdGF0cy1cdTAwM2V0eF9lcnJvcnMgKz0gdHhfaHdfZXJyb3JzO1xuK31cbitcbisvKipcbisgKiBheGllbmV0X3h4dl9nZXRfZXRodG9vbF9zdGF0cyAtIENvcHkgWFhWIGNvdW50ZXJzIGZvciBldGh0b29sIC1TXG4rICogQGxwOiBQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuKyAqIEBkYXRhOiBPdXRwdXQgYnVmZmVyIHNpemVkIGZvciBBUlJBWV9TSVpFKGF4aWVuZXRfeHh2X3ByaXZfc3RhdHMpIHU2NCB2YWx1ZXNcbisgKi9cbitzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsIHU2NCAqZGF0YSlcbit7XG4rXHR1bnNpZ25lZCBpbnQgaSwgc3RhcnQ7XG4rXG4rXHRkbyB7XG4rXHRcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoYXhpZW5ldF94eHZfcHJpdl9zdGF0cyk7IGkrKylcbitcdFx0XHRkYXRhW2ldID0gbHAtXHUwMDNleHh2X3N0YXRfYmFzZVtheGllbmV0X3h4dl9wcml2X3N0YXRzW2ldXTtcbitcdH0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2bHAtXHUwMDNlaHdfc3RhdHNfc2VxY291bnQsIHN0YXJ0KSk7XG4rfVxuK1xuKy8qKlxuKyAqIGF4aWVuZXRfeHh2X2dldF9zdHJpbmdzIC0gQ29weSBYWFYgZXRodG9vbCBzdGF0aXN0aWNzIG5hbWUgc3RyaW5nc1xuKyAqIEBkYXRhOiBPdXRwdXQgYnVmZmVyIGZvciB0aGUgc3RhdGlzdGljcyBuYW1lIHN0cmluZ3NcbisgKi9cbitzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfc3RyaW5ncyh1OCAqZGF0YSlcbit7XG4rXHRtZW1jcHkoZGF0YSwgYXhpZW5ldF94eHZfZXRodG9vbF9zdGF0c19zdHJpbmdzLFxuK1x0ICAgICAgIHNpemVvZihheGllbmV0X3h4dl9ldGh0b29sX3N0YXRzX3N0cmluZ3MpKTtcbit9XG4rXG4rLyoqXG4rICogYXhpZW5ldF94eHZfZ2V0X3NzZXRfY291bnQgLSBOdW1iZXIgb2YgWFhWIGV0aHRvb2wgc3RhdGlzdGljc1xuKyAqXG4rICogUmV0dXJuOiBDb3VudCBvZiBYWFYgaGFyZHdhcmUgc3RhdGlzdGljcyByZXBvcnRlZCB2aWEgZXRodG9vbCAtUy5cbisgKi9cbitzdGF0aWMgaW50IGF4aWVuZXRfeHh2X2dldF9zc2V0X2NvdW50KHZvaWQpXG4re1xuK1x0cmV0dXJuIEFSUkFZX1NJWkUoYXhpZW5ldF94eHZfZXRodG9vbF9zdGF0c19zdHJpbmdzKTtcbit9XG4rXG4rLyoqXG4rICogYXhpZW5ldF94eHZfZ2V0X3BhdXNlX3N0YXRzIC0gRmlsbCBldGh0b29sIHBhdXNlIGZyYW1lIHN0YXRpc3RpY3NcbisgKiBAbHA6IFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlXG4rICogQHBhdXNlX3N0YXRzOiBPdXRwdXQgZXRodG9vbF9wYXVzZV9zdGF0cyBzdHJ1Y3R1cmUgdG8gcG9wdWxhdGVcbisgKi9cbitzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcGF1c2Vfc3RhdHMpXG4re1xuK1x0dW5zaWduZWQgaW50IHN0YXJ0O1xuK1xuK1x0ZG8ge1xuK1x0XHRzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2bHAtXHUwMDNlaHdfc3RhdHNfc2VxY291bnQpO1xuK1x0XHRwYXVzZV9zdGF0cy1cdTAwM2V0eF9wYXVzZV9mcmFtZXMgPVxuK1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfUEFVU0VdO1xuK1x0XHRwYXVzZV9zdGF0cy1cdTAwM2VyeF9wYXVzZV9mcmFtZXMgPVxuK1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfUEFVU0VdO1xuK1x0fSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeShcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCwgc3RhcnQpKTtcbit9XG4rXG4rLyoqXG4rICogYXhpZW5ldF94eHZfZ2V0X2V0aF9tYWNfc3RhdHMgLSBGaWxsIElFRUUgODAyLjMgTUFDIHN0YXRpc3RpY3NcbisgKiBAbHA6IFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlXG4rICogQG1hY19zdGF0czogT3V0cHV0IGV0aHRvb2xfZXRoX21hY19zdGF0cyBzdHJ1Y3R1cmUgdG8gcG9wdWxhdGVcbisgKi9cbitzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXG4rXHRcdFx0XHRcdCAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKVxuK3tcbitcdHVuc2lnbmVkIGludCBzdGFydDtcbitcbitcdGRvIHtcbitcdFx0c3RhcnQgPSByZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcbitcdFx0bWFjX3N0YXRzLVx1MDAzZUZyYW1lc1RyYW5zbWl0dGVkT0sgPVxuK1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9QQUNLRVRTXTtcbitcdFx0bWFjX3N0YXRzLVx1MDAzZUZyYW1lc1JlY2VpdmVkT0sgPVxuK1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9QQUNLRVRTXTtcbitcdFx0bWFjX3N0YXRzLVx1MDAzZU9jdGV0c1RyYW5zbWl0dGVkT0sgPVxuK1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9CWVRFU107XG4rXHRcdG1hY19zdGF0cy1cdTAwM2VPY3RldHNSZWNlaXZlZE9LID1cbitcdFx0XHRscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX1RPVEFMX0dPT0RfQllURVNdO1xuK1x0XHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVDaGVja1NlcXVlbmNlRXJyb3JzID1cbitcdFx0XHRscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX0JBRF9GQ1NdO1xuK1x0XHRtYWNfc3RhdHMtXHUwMDNlTXVsdGljYXN0RnJhbWVzWG1pdHRlZE9LID1cbitcdFx0XHRscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1RYX01VTFRJQ0FTVF07XG4rXHRcdG1hY19zdGF0cy1cdTAwM2VCcm9hZGNhc3RGcmFtZXNYbWl0dGVkT0sgPVxuK1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfQlJPQURDQVNUXTtcbitcdFx0bWFjX3N0YXRzLVx1MDAzZU11bHRpY2FzdEZyYW1lc1JlY2VpdmVkT0sgPVxuK1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfTVVMVElDQVNUXTtcbitcdFx0bWFjX3N0YXRzLVx1MDAzZUJyb2FkY2FzdEZyYW1lc1JlY2VpdmVkT0sgPVxuK1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfQlJPQURDQVNUXTtcbitcdFx0bWFjX3N0YXRzLVx1MDAzZUluUmFuZ2VMZW5ndGhFcnJvcnMgPVxuK1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfSU5SQU5HRUVSUl07XG4rXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpO1xuK31cbitcbisvKipcbisgKiBheGllbmV0X3h4dl9nZXRfcm1vbl9zdGF0cyAtIEZpbGwgUk1PTiBzdGF0aXN0aWNzIGFuZCBoaXN0b2dyYW0gcmFuZ2VzXG4rICogQGxwOiBQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuKyAqIEBybW9uX3N0YXRzOiBPdXRwdXQgZXRodG9vbF9ybW9uX3N0YXRzIHN0cnVjdHVyZSB0byBwb3B1bGF0ZVxuKyAqIEByYW5nZXM6IFNldCB0byB0aGUgUk1PTiBoaXN0b2dyYW0gcmFuZ2UgdGFibGVcbisgKi9cbitzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcbitcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpXG4re1xuK1x0dW5zaWduZWQgaW50IHN0YXJ0O1xuK1xuK1x0ZG8ge1xuK1x0XHRzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2bHAtXHUwMDNlaHdfc3RhdHNfc2VxY291bnQpO1xuK1x0XHRybW9uX3N0YXRzLVx1MDAzZXVuZGVyc2l6ZV9wa3RzID1cbitcdFx0XHRscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX1VOREVSU0laRV07XG4rXHRcdHJtb25fc3RhdHMtXHUwMDNlb3ZlcnNpemVfcGt0cyA9XG4rXHRcdFx0bHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9PVkVSU0laRV07XG4rXHRcdHJtb25fc3RhdHMtXHUwMDNlZnJhZ21lbnRzID1cbitcdFx0XHRscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX0ZSQUdNRU5UXTtcbitcdFx0cm1vbl9zdGF0cy1cdTAwM2VqYWJiZXJzID1cbitcdFx0XHRscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX0pBQkJFUl07XG4rXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpO1xuK1xuK1x0LyogWFhWIGN1cnJlbnRseSBleHBvc2VzIG9ubHkgYWdncmVnYXRlIFJNT04gY291bnRlcnMsIG5vdCBwZXItYmluXG4rXHQgKiBoaXN0b2dyYW0gYnVja2V0cy4gS2VlcCByYW5nZXMgTlVMTCB1bnRpbCBoaXN0b2dyYW0gYmlucyBhcmUgd2lyZWQuXG4rXHQgKi9cbitcdCpyYW5nZXMgPSBOVUxMO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgYXhpZW5ldF9jb25maWcgYXhpZW5ldF8xMGcyNWdfY29uZmlnID0ge1xuK1x0LnN3X3BhZGRpbmcgPSB0cnVlLFxuK1x0LmludGVybmFsX3BjcyA9IHRydWUsXG4rXHQucmVnc19uID0gWFhWX1JFR1NfTixcbitcdC5jbGtfaW5pdCA9IGF4aWVuZXRfMTBnMjVnX2Nsa19pbml0LFxuK1x0LnNldG9wdGlvbnMgPSBheGllbmV0X3h4dl9zZXRvcHRpb25zLFxuK1x0LnByb2JlX2luaXQgPSBheGllbmV0X3h4dl9wcm9iZV9pbml0LFxuK1x0Lmd0X3Jlc2V0ID0gYXhpZW5ldF94eHZfZ3RfcmVzZXQsXG4rXHQubWFjX2luaXQgPSBheGllbmV0X3h4dl9tYWNfaW5pdCxcbitcdC5nZXRfcmVncyA9IGF4aWVuZXRfeHh2X2dldF9yZWdzLFxuK1x0LnBoeWxpbmtfc2V0X2NhcHMgPSBheGllbmV0X3h4dl9waHlsaW5rX3NldF9jYXBhYmlsaXRpZXMsXG4rXHQucGNzX29wcyA9IFx1MDAyNmF4aWVuZXRfeHh2X3Bjc19vcHMsXG4rXHQuc3RhdHNfdXBkYXRlID0gYXhpZW5ldF94eHZfc3RhdHNfdXBkYXRlLFxuK1x0LmdldF9zdGF0czY0ID0gYXhpZW5ldF94eHZfZ2V0X3N0YXRzNjQsXG4rXHQuZ2V0X2V0aHRvb2xfc3RhdHMgPSBheGllbmV0X3h4dl9nZXRfZXRodG9vbF9zdGF0cyxcbitcdC5nZXRfc3RyaW5ncyA9IGF4aWVuZXRfeHh2X2dldF9zdHJpbmdzLFxuK1x0LmdldF9zc2V0X2NvdW50ID0gYXhpZW5ldF94eHZfZ2V0X3NzZXRfY291bnQsXG4rXHQuZ2V0X3BhdXNlX3N0YXRzID0gYXhpZW5ldF94eHZfZ2V0X3BhdXNlX3N0YXRzLFxuK1x0LmdldF9ldGhfbWFjX3N0YXRzID0gYXhpZW5ldF94eHZfZ2V0X2V0aF9tYWNfc3RhdHMsXG4rXHQuZ2V0X3Jtb25fc3RhdHMgPSBheGllbmV0X3h4dl9nZXRfcm1vbl9zdGF0cyxcbit9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF94eHYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF94eHYuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmViZmE3ZDU3YTg1OTFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF94eHYuaFxuQEAgLTAsMCArMSwxNDEgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4rLypcbisgKiBYWFYgKDEwRy8yNUcpIHN1cHBvcnRcbisgKlxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuXG4rICovXG4rXG4rI2lmbmRlZiBYSUxJTlhfQVhJRU5FVF9YWFZfSFxuKyNkZWZpbmUgWElMSU5YX0FYSUVORVRfWFhWX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbitcbitzdHJ1Y3QgYXhpZW5ldF9sb2NhbDtcbitzdHJ1Y3QgYXhpZW5ldF9jb25maWc7XG4rXG4rI2RlZmluZSBYWFZfUkVHU19OXHRcdDQ2XG4rXG4rLyogWFhWIE1BQyBSZWdpc3RlciBEZWZpbml0aW9ucyAqL1xuKyNkZWZpbmUgWFhWX0dUX1JFU0VUX09GRlNFVFx0XHQweDAwMDAwMDAwXG4rI2RlZmluZSBYWFZfUkVTRVRfT0ZGU0VUXHRcdDB4MDAwMDAwMDRcbisjZGVmaW5lIFhYVl9NT0RFX09GRlNFVFx0XHRcdDB4MDAwMDAwMDhcbisjZGVmaW5lIFhYVl9UQ19PRkZTRVRcdFx0XHQweDAwMDAwMDBDXG4rI2RlZmluZSBYWFZfUkNXMV9PRkZTRVRcdFx0XHQweDAwMDAwMDE0XG4rI2RlZmluZSBYWFZfSlVNX09GRlNFVFx0XHRcdDB4MDAwMDAwMThcbisjZGVmaW5lIFhYVl9WTF9MRU5HVEhfT0ZGU0VUXHRcdDB4MDAwMDAwMUNcbisjZGVmaW5lIFhYVl9USUNLUkVHX09GRlNFVFx0XHQweDAwMDAwMDIwXG4rI2RlZmluZSBYWFZfQ09ORklHX1JFVklTSU9OXHRcdDB4MDAwMDAwMjRcbisjZGVmaW5lIFhYVl9DT05GSUdfMTU4OF9PRkZTRVRcdFx0MHgwMDAwMDAzOFxuKyNkZWZpbmUgWFhWX0NPTkZJR19UWF9GTE9XX0NUUkwxX09GRlNFVFx0MHgwMDAwMDA0MFxuKyNkZWZpbmUgWFhWX0NPTkZJR19SWF9GTE9XX0NUUkwxX09GRlNFVFx0MHgwMDAwMDA5NFxuKyNkZWZpbmUgWFhWX0NPTkZJR19SWF9GTE9XX0NUUkwyX09GRlNFVFx0MHgwMDAwMDA5OFxuKyNkZWZpbmUgWFhWX0NPTkZJR19SU0ZFQ19PRkZTRVRcdFx0MHgwMDAwMDBEMFxuKyNkZWZpbmUgWFhWX0NPTkZJR19GRUNfT0ZGU0VUXHRcdDB4MDAwMDAwRDRcbisjZGVmaW5lIFhYVl9BTl9DVEwxX09GRlNFVFx0XHQweDAwMDAwMEUwXG4rI2RlZmluZSBYWFZfQU5fQ1RMMl9PRkZTRVRcdFx0MHgwMDAwMDBFNFxuKyNkZWZpbmUgWFhWX0FOX0FCSUxJVFlfT0ZGU0VUXHRcdDB4MDAwMDAwRjhcbisjZGVmaW5lIFhYVl9MVF9DVEwxX09GRlNFVFx0XHQweDAwMDAwMTAwXG4rI2RlZmluZSBYWFZfU1dJVENIX0NPUkVfU1BFRURfT0ZGU0VUXHQweDAwMDAwMTM4XG4rI2RlZmluZSBYWFZfQ09ORklHXzE1ODhfMzJCSVRfT0ZGU0VUXHQweDAwMDAwMTNDXG4rI2RlZmluZSBYWFZfVFhfQ09ORklHXzE1ODhfT0ZGU0VUXHQweDAwMDAwMTQwXG4rI2RlZmluZSBYWFZfUlhfQ09ORklHXzE1ODhfT0ZGU0VUXHQweDAwMDAwMTQ0XG4rI2RlZmluZSBYWFZfR1RXSVpfQ1RSTF9PRkZTRVRcdFx0MHgwMDAwMDE1NFxuKyNkZWZpbmUgWFhWX1NUQVRSWF9TVEFUVVMwX09GRlNFVFx0MHgwMDAwMDQwMFxuKyNkZWZpbmUgWFhWX1JYX1NUQVRVU19SRUcxXHRcdDB4MDAwMDA0MDRcbisjZGVmaW5lIFhYVl9TVEFUUlhfU1RBVFVTMl9PRkZTRVRcdDB4MDAwMDA0MDhcbisjZGVmaW5lIFhYVl9TVEFUUlhfQkxLTENLX09GRlNFVFx0MHgwMDAwMDQwQ1xuKyNkZWZpbmUgWFhWX1NUQVRfUlhfUlNGRUNfU1RBVFVTX09GRlNFVFx0MHgwMDAwMDQzQ1xuKyNkZWZpbmUgWFhWX1NUQVRfUlhfRkVDX1NUQVRVU19PRkZTRVRcdDB4MDAwMDA0NDhcbisjZGVmaW5lIFhYVl9TVEFUX1RYX1JTRkVDX1NUQVRVU19PRkZTRVRcdDB4MDAwMDA0NENcbisjZGVmaW5lIFhYVl9TVEFUX1RYX0ZMT1dfQ1RSTDFfT0ZGU0VUXHQweDAwMDAwNDUwXG4rI2RlZmluZSBYWFZfU1RBVF9SWF9GTE9XX0NUUkwxX09GRlNFVFx0MHgwMDAwMDQ1NFxuKyNkZWZpbmUgWFhWX1NUQVRfQU5fU1RTX09GRlNFVFx0XHQweDAwMDAwNDU4XG4rI2RlZmluZSBYWFZfU1RBVF9BTl9MUF9TVEFUVVNfT0ZGU0VUXHQweDAwMDAwNDVDXG4rI2RlZmluZSBYWFZfU1RBVF9BTl9MSU5LX0NUTF9PRkZTRVRcdDB4MDAwMDA0NjBcbisjZGVmaW5lIFhYVl9TVEFUX0xUX1NUQVRVUzFfT0ZGU0VUXHQweDAwMDAwNDY0XG4rI2RlZmluZSBYWFZfU1RBVF9MVF9TVEFUVVMyX09GRlNFVFx0MHgwMDAwMDQ2OFxuKyNkZWZpbmUgWFhWX1NUQVRfTFRfU1RBVFVTM19PRkZTRVRcdDB4MDAwMDA0NkNcbisjZGVmaW5lIFhYVl9TVEFUX0xUX1NUQVRVUzRfT0ZGU0VUXHQweDAwMDAwNDcwXG4rI2RlZmluZSBYWFZfU1RBVF9MVF9DT0VGRjBfT0ZGU0VUXHQweDAwMDAwNDc0XG4rI2RlZmluZSBYWFZfU1RBVF9SWF9WQUxJRF9DVFJMX0NPREVfT0ZGU0VUXHQweDAwMDAwNDk0XG4rI2RlZmluZSBYWFZfU1RBVF9DT1JFX1NQRUVEX09GRlNFVFx0MHgwMDAwMDQ5OFxuKyNkZWZpbmUgWFhWX1NUQVRfVFNOX09GRlNFVFx0XHQweDAwMDAwNDlDXG4rI2RlZmluZSBYWFZfU1RBVF9HVFdJWl9PRkZTRVRcdFx0MHgwMDAwMDRBMFxuKyNkZWZpbmUgWFhWX1NUQVRfQU5fTElOS19DVEwyX09GRlNFVFx0MHgwMDAwMDlGMFxuK1xuKy8qIFhYViBzdGF0aXN0aWNzIGNvdW50ZXIgcmVnaXN0ZXJzIChQRzIxMCkuIEVhY2ggY291bnRlciBpcyBhIHBhaXIgb2YgMzItYml0XG4rICogcmVnaXN0ZXJzOyB0aGUgTVNCIHJlZ2lzdGVyIGlzIFhYVl9TVEFUX01TQl9PRkZTRVQgYnl0ZXMgYWJvdmUgdGhlIExTQi5cbisgKi9cbisjZGVmaW5lIFhYVl9TVEFUX01TQl9PRkZTRVRcdFx0XHQ0XG4rI2RlZmluZSBYWFZfU1RBVF9UWF9GUkFNRV9FUlJPUl9PRkZTRVRcdFx0MHgwMDAwMDZBMFxuKyNkZWZpbmUgWFhWX1NUQVRfVFhfVE9UQUxfUEFDS0VUU19PRkZTRVRcdDB4MDAwMDA3MDBcbisjZGVmaW5lIFhYVl9TVEFUX1RYX1RPVEFMX0dPT0RfUEFDS0VUU19PRkZTRVRcdDB4MDAwMDA3MDhcbisjZGVmaW5lIFhYVl9TVEFUX1RYX1RPVEFMX0JZVEVTX09GRlNFVFx0XHQweDAwMDAwNzEwXG4rI2RlZmluZSBYWFZfU1RBVF9UWF9UT1RBTF9HT09EX0JZVEVTX09GRlNFVFx0MHgwMDAwMDcxOFxuKyNkZWZpbmUgWFhWX1NUQVRfVFhfQkFEX0ZDU19PRkZTRVRcdFx0MHgwMDAwMDdCOFxuKyNkZWZpbmUgWFhWX1NUQVRfVFhfTVVMVElDQVNUX09GRlNFVFx0XHQweDAwMDAwN0Q4XG4rI2RlZmluZSBYWFZfU1RBVF9UWF9CUk9BRENBU1RfT0ZGU0VUXHRcdDB4MDAwMDA3RTBcbisjZGVmaW5lIFhYVl9TVEFUX1RYX1BBVVNFX09GRlNFVFx0XHQweDAwMDAwN0YwXG4rI2RlZmluZSBYWFZfU1RBVF9SWF9UT1RBTF9QQUNLRVRTX09GRlNFVFx0MHgwMDAwMDgwOFxuKyNkZWZpbmUgWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9QQUNLRVRTX09GRlNFVFx0MHgwMDAwMDgxMFxuKyNkZWZpbmUgWFhWX1NUQVRfUlhfVE9UQUxfQllURVNfT0ZGU0VUXHRcdDB4MDAwMDA4MThcbisjZGVmaW5lIFhYVl9TVEFUX1JYX1RPVEFMX0dPT0RfQllURVNfT0ZGU0VUXHQweDAwMDAwODIwXG4rI2RlZmluZSBYWFZfU1RBVF9SWF9VTkRFUlNJWkVfT0ZGU0VUXHRcdDB4MDAwMDA4OThcbisjZGVmaW5lIFhYVl9TVEFUX1JYX0ZSQUdNRU5UX09GRlNFVFx0XHQweDAwMDAwOEEwXG4rI2RlZmluZSBYWFZfU1RBVF9SWF9PVkVSU0laRV9PRkZTRVRcdFx0MHgwMDAwMDhBOFxuKyNkZWZpbmUgWFhWX1NUQVRfUlhfSkFCQkVSX09GRlNFVFx0XHQweDAwMDAwOEI4XG4rI2RlZmluZSBYWFZfU1RBVF9SWF9CQURfRkNTX09GRlNFVFx0XHQweDAwMDAwOEMwXG4rI2RlZmluZSBYWFZfU1RBVF9SWF9NVUxUSUNBU1RfT0ZGU0VUXHRcdDB4MDAwMDA4RTBcbisjZGVmaW5lIFhYVl9TVEFUX1JYX0JST0FEQ0FTVF9PRkZTRVRcdFx0MHgwMDAwMDhFOFxuKyNkZWZpbmUgWFhWX1NUQVRfUlhfUEFVU0VfT0ZGU0VUXHRcdDB4MDAwMDA4RjhcbisjZGVmaW5lIFhYVl9TVEFUX1JYX0lOUkFOR0VFUlJfT0ZGU0VUXHRcdDB4MDAwMDA5MDhcbitcbisvKiBYWFYgTUFDIFJlZ2lzdGVyIE1hc2sgRGVmaW5pdGlvbnMgKi9cbisjZGVmaW5lIFhYVl9HVF9SRVNFVF9NQVNLXHRcdEJJVCgwKVxuKyNkZWZpbmUgWFhWX1RDX1RYX01BU0tcdFx0XHRCSVQoMClcbisjZGVmaW5lIFhYVl9SQ1cxX1JYX01BU0tcdFx0QklUKDApXG4rI2RlZmluZSBYWFZfUkNXMV9GQ1NfTUFTS1x0XHRCSVQoMSlcbisjZGVmaW5lIFhYVl9UQ19GQ1NfTUFTS1x0XHRcdEJJVCgxKVxuKyNkZWZpbmUgWFhWX1JYX0JMS0xDS19NQVNLXHRcdEJJVCgwKVxuKyNkZWZpbmUgWFhWX1RJQ0tSRUdfU1RBVEVOX01BU0tcdFx0QklUKDApXG4rI2RlZmluZSBYWFZfR1RXSVpfUkVTRVRfRE9ORVx0XHQoQklUKDApIHwgQklUKDEpKVxuKyNkZWZpbmUgWFhWX01BSl9NQVNLXHRcdFx0R0VOTUFTSyg3LCAwKVxuKyNkZWZpbmUgWFhWX01JTl9NQVNLXHRcdFx0R0VOTUFTSygxNSwgOClcbisvKiBJUCB2My4yKyBleHBvc2VzIEdUIHdpemFyZCBzdGF0dXMgYmVmb3JlIG90aGVyIHJlZ2lzdGVyIGFjY2VzcyAoUEcyMTApLiAqL1xuKyNkZWZpbmUgWFhWX0lQX1ZFUl9HVFdJWl9NQUpfTUlOXHQzXG4rI2RlZmluZSBYWFZfSVBfVkVSX0dUV0laX01JTl9NSU5cdDJcbisjZGVmaW5lIFhYVl9BTl9DT01QTEVURV9NQVNLXHRcdEJJVCgyKVxuKyNkZWZpbmUgWFhWX1NUQVRfQ09SRV9TUEVFRF9SVFNXX01BU0tcdEJJVCgxKVxuKyNkZWZpbmUgWFhWX1NUQVRfQ09SRV9TUEVFRF8xMEdfTUFTS1x0QklUKDApXG4rI2RlZmluZSBYWFZfUlhfU1RBVFVTX01BU0tcdFx0QklUKDApXG4rXG4rLyogWFhWICgxMEcvMjVHKSBNQUMgc3RhdGlzdGljcyBjb3VudGVycywgdXNlZCB0byBpbmRleCB4eHZfc3RhdF9iYXNlW10uICovXG4rZW51bSB4eHZfc3RhdCB7XG4rXHRYWFZfU1RBVF9SWF9UT1RBTF9QQUNLRVRTID0gMCxcbitcdFhYVl9TVEFUX1JYX1RPVEFMX0dPT0RfUEFDS0VUUyxcbitcdFhYVl9TVEFUX1JYX1RPVEFMX0JZVEVTLFxuK1x0WFhWX1NUQVRfUlhfVE9UQUxfR09PRF9CWVRFUyxcbitcdFhYVl9TVEFUX1JYX0JBRF9GQ1MsXG4rXHRYWFZfU1RBVF9SWF9JTlJBTkdFRVJSLFxuK1x0WFhWX1NUQVRfUlhfTVVMVElDQVNULFxuK1x0WFhWX1NUQVRfUlhfQlJPQURDQVNULFxuK1x0WFhWX1NUQVRfUlhfVU5ERVJTSVpFLFxuK1x0WFhWX1NUQVRfUlhfRlJBR01FTlQsXG4rXHRYWFZfU1RBVF9SWF9KQUJCRVIsXG4rXHRYWFZfU1RBVF9SWF9PVkVSU0laRSxcbitcdFhYVl9TVEFUX1JYX1BBVVNFLFxuK1x0WFhWX1NUQVRfVFhfVE9UQUxfUEFDS0VUUyxcbitcdFhYVl9TVEFUX1RYX1RPVEFMX0dPT0RfUEFDS0VUUyxcbitcdFhYVl9TVEFUX1RYX1RPVEFMX0JZVEVTLFxuK1x0WFhWX1NUQVRfVFhfVE9UQUxfR09PRF9CWVRFUyxcbitcdFhYVl9TVEFUX1RYX0JBRF9GQ1MsXG4rXHRYWFZfU1RBVF9UWF9GUkFNRV9FUlJPUixcbitcdFhYVl9TVEFUX1RYX01VTFRJQ0FTVCxcbitcdFhYVl9TVEFUX1RYX0JST0FEQ0FTVCxcbitcdFhYVl9TVEFUX1RYX1BBVVNFLFxuK1x0WFhWX1NUQVRfQ09VTlQsXG4rfTtcbitcbitleHRlcm4gY29uc3Qgc3RydWN0IGF4aWVuZXRfY29uZmlnIGF4aWVuZXRfMTBnMjVnX2NvbmZpZztcbitcbisjZW5kaWYgLyogWElMSU5YX0FYSUVORVRfWFhWX0ggKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjA3OjE0LjY3NjM3NTU0OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2MzA0ODY4ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYaWxpbnggWFhWIEV0aGVybmV0IERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYnJlYWsgZG93biB0aGUgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFhpbGlueCBYWFYgMTBHLzI1RyBFdGhlcm5ldCBTdWJzeXN0ZW0gdG8gdGhlIGV4aXN0aW5nIGB4aWxpbnhfYXhpZW5ldGAgZHJpdmVyLiBJIHNlZSB0aGUgdXN1YWwgc3VzcGVjdHM6IGRldmljZSB0cmVlIGJpbmRpbmdzLCB0aGUgTUFJTlRBSU5FUlMgZmlsZSwgdGhlIE1ha2VmaWxlLCBhbmQgdGhlIHJlbGV2YW50IEMgYW5kIGhlYWRlciBmaWxlcyDigJMgc3BlY2lmaWNhbGx5IGB4aWxpbnhfYXhpZW5ldF9tYWluLmNgLCBgeGlsaW54X2F4aWVuZXRfeHh2LmNgLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgaGVhZGVyIGZpbGVzLlxuXG5Ob3csIGJlZm9yZSBJIGdvIHRvbyBkZWVwLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaGFyZHdhcmUgaW1wbGljYXRpb25zLiBXaGF0IGlzIGBDT05GSUdfWElMSU5YX0FYSV9FTUFDYD8gSXMgaXQgYW4gT0Ygb3IgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgWGlsaW54IEZQR0FzIG9yIFNvQ3Mg4oCTIHRoaW5rIE1pY3JvQmxhemUsIFp5bnEsIFp5bnFNUCwgb3IgZXZlbiBWZXJzYWw/IFRoaXMgaXMgY3JpdGljYWwuIENhbiBJIGFjdHVhbGx5IHRlc3QgdGhpcyBpbiBRRU1VIG9yIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIG9yIGRvZXMgaXQgcmVxdWlyZSBkZWRpY2F0ZWQgRlBHQSBoYXJkd2FyZT9cblxuQWgsIHJpZ2h0LCBrZXJuZWwgZ3VpZGVsaW5lcy4uLiBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciB0aGlzIHBhdGNoIGlzIFwid29ydGggZnV6emluZ1wiLiBUaGUgZ3VpZGVsaW5lcyBzcGVjaWZ5IHRoYXQgaWYgdGhlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUsIHRoZW4gaXQgc2hvdWxkIHJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UuIEFsc28sIHRoZSBzYW1lIGdvZXMgZm9yIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaC9TbWFydE5JQy9HUFUgZHJpdmVycy4gU2luY2UgdGhpcyBpcyBYaWxpbngtc3BlY2lmaWMsIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC5cblxuU28sIGxldCdzIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBvZiBgQ09ORklHX1hJTElOWF9BWElfRU1BQ2AgYW5kIGhvdyBpdCdzIGRlZmluZWQuIERvZXMgc3RhbmRhcmQgUUVNVSBldmVuIGVtdWxhdGUgWGlsaW54IEFYSSBFdGhlcm5ldD8gSXMgaXQgYW4gT0YgcGxhdGZvcm0gZHJpdmVyIHByaW1hcmlseSB1c2VkIG9uIG5vbi14ODYgYXJjaGl0ZWN0dXJlcywgbGlrZSBBUk0gb3IgTWljcm9CbGF6ZT8gSSdsbCBxdWlja2x5IHVzZSBncmVwcGVyIHRvIGV4YW1pbmUgdGhlIEtjb25maWcgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbidzIHNwZWNpZmljcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5NTMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjowNzoxOS4zMDY4NjUyNjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA1MTc5OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhJTElOWF9BWElfRU1BQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbnhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWc9MTk9Y29uZmlnIFhJTElOWF9FTUFDTElURVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWctMjUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWc6MjY6Y29uZmlnIFhJTElOWF9BWElfRU1BQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnLTI3LVxcdHRyaXN0YXRlIFxcXCJYaWxpbnggMTAvMTAwLzEwMDAgQVhJIEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjA3OjE5LjM5NzM4Nzg0MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg2MjI1MjY3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgS2NvbmZpZyBmaWxlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBYaWxpbnggRXRoZXJuZXQgS2NvbmZpZyoqXG5cbk9rYXksIHRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnYCBmaWxlLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBodWIgZm9yIGFsbCB0aGUgWGlsaW54IEV0aGVybmV0IGRldmljZSBkcml2ZXJzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgdmFyaW91cyBmZWF0dXJlcyBhbmQgaGFyZHdhcmUgdmFyaWF0aW9ucyBhcmUgZXhwb3NlZCB0byB0aGUgdXNlciBkdXJpbmcgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHByb2Nlc3MuIEknbSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgZGVmYXVsdCB2YWx1ZXMsIGFuZCB0aGUgaGVscCB0ZXh0IOKAkyB0aGF0J3Mgd2hlcmUgdGhlIHJlYWwgc3RvcnkgbGllcy5cblxuRmlyc3QgdGhpbmcncyBmaXJzdCwgSSdsbCBzY2FuIGZvciB0aGUgbWFpbiBkcml2ZXIgZW50cnksIHVzdWFsbHkgc29tZXRoaW5nIGxpa2UgYENPTkZJR19YSUxJTlhfRU1BQ2Agb3IgYENPTkZJR19YSUxJTlhfR01BQ2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwcmltYXJ5IGRyaXZlciBhbmQgaG93IGl0cyBtb2R1bGFyIGRlc2lnbiB3b3Jrcy4gVGhlbiBJJ2xsIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGhhcmR3YXJlIGJsb2NrcyBpdCdzIG1lYW50IHRvIHN1cHBvcnQg4oCTIGFyZSB3ZSB0YWxraW5nIGFib3V0IFp5bnEsIFZlcnNhbCwgb3Igb2xkZXIgcGxhdGZvcm1zPyBBcmUgdGhlcmUgbXVsdGlwbGUgRU1BQyBkZXZpY2VzIHRoYXQgYXJlIGhhbmRsZWQgc2VwYXJhdGVseSBvciBjb21iaW5lZD8gQXJlIHRoZXJlIGFueSBTb0Mtc3BlY2lmaWMgb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhpbmdzIGxpa2UgRE1BIGVuZ2luZXMsIFBIWSBzZWxlY3Rpb24sIG9yIE1ESU8gY29uZmlndXJhdGlvbj9cblxuSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGhvdyB0aGVzZSBLY29uZmlnIG9wdGlvbnMgbWFwIHRvIHNwZWNpZmljIFhpbGlueCBoYXJkd2FyZSBmZWF0dXJlcy4gQXJlIHRoZXJlIG9wdGlvbnMgZm9yIGVuYWJsaW5nIGp1bWJvIGZyYW1lcywgY2hlY2tzdW0gb2ZmbG9hZCwgZmxvdyBjb250cm9sLCBvciBvdGhlciBvZmZsb2FkaW5nIGZlYXR1cmVzPyBBcmUgdGhlcmUgcGxhdGZvcm0tc3BlY2lmaWMgZGVwZW5kZW5jaWVzPyBJdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBjaG9pY2VzIGFmZmVjdCBwZXJmb3JtYW5jZSBhbmQgcG93ZXIgY29uc3VtcHRpb24uIEZvciBleGFtcGxlLCBzb21lIGRldmljZXMgbWlnaHQgcmVxdWlyZSBzcGVjaWZpYyBjbG9jayBjb25maWd1cmF0aW9ucyBvciBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMsIGFuZCBJJ2xsIHNlZSBob3cgdGhvc2UgYXJlIGNvbnRyb2xsZWQgaGVyZS4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSBhcmNoaXRlY3R1cmUgb3IgYm9hcmQtc3BlY2lmaWMgb3B0aW9ucywgYXMgd2VsbCBhcyBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGRyaXZlcnMgb3Iga2VybmVsIHN1YnN5c3RlbXMuXG5cbkZpbmFsbHksIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIOKAkyBgaWZgIHN0YXRlbWVudHMgYW5kIHRoZSBsaWtlLiBUaGF04oCZcyBob3cgSSBnZXQgdG8gdGhlIHJlYWwgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGV2aWNlLWRyaXZlciBjb25maWd1cmF0aW9uLiBDb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgYXJlIGhvdyB3ZSBtYWtlIHRoZSBkZXZpY2UgZHJpdmVyIGZsZXhpYmxlIGVub3VnaCB0byBzdXBwb3J0IHRoZSBkaWZmZXJlbnQgWGlsaW54IFNvQ3MuIEFsc28sIEknbGwgbG9vayBmb3IgYW55IGBzZWxlY3RgIHN0YXRlbWVudHMgdGhhdCBhdXRvbWF0aWNhbGx5IHB1bGwgaW4gb3RoZXIgbW9kdWxlcy4gQW5kLCBvZiBjb3Vyc2UsIEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBhbnkgb2J2aW91cyB0eXBvcyBvciBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiB0cmFwcyB0aGF0IG1pZ2h0IGxlYWQgdG8gYnVpbGQgZXJyb3JzIG9yLCB3b3JzZSwgcnVudGltZSBpc3N1ZXMuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgY29uZmlnIGlzIGNsZWFuIGFuZCB1bmRlcnN0YW5kYWJsZS4gV2l0aCBsdWNrLCB0aGlzIEtjb25maWcgd2lsbCBiZSB3ZWxsLXN0cnVjdHVyZWQsIGVhc3kgdG8gZm9sbG93LCBhbmQgcHJvdmlkZSBnb29kLCBoZWxwZnVsIGRvY3VtZW50YXRpb24gd2l0aGluIGl0cyBoZWxwIHRleHQuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMjA0MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjA3OjI4LjAxOTkxNzAyNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFhpbGlueCBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgTkVUX1ZFTkRPUl9YSUxJTlhcXG4gICA3OlxcdFxcdGJvb2wgXFxcIlhpbGlueCBkZXZpY2VzXFxcIlxcbiAgIDg6XFx0XFx0ZGVmYXVsdCB5XFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXFxuICAxMzpcXHRcXHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcXG4gIDE0OlxcdFxcdCAgdGhlIHF1ZXN0aW9ucyBhYm91dCBYaWxpbnggZGV2aWNlcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZFxcbiAgMTU6XFx0XFx0ICBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRpZiBORVRfVkVORE9SX1hJTElOWFxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgWElMSU5YX0VNQUNMSVRFXFxuICAyMDpcXHRcXHR0cmlzdGF0ZSBcXFwiWGlsaW54IDEwLzEwMCBFdGhlcm5ldCBMaXRlIHN1cHBvcnRcXFwiXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTVxcbiAgMjI6XFx0XFx0c2VsZWN0IFBIWUxJQlxcbiAgMjM6XFx0XFx0aGVscFxcbiAgMjQ6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgMTAvMTAwIEV0aGVybmV0IExpdGUgZnJvbSBYaWxpbnguXFxuICAyNTpcXHRcXG4gIDI2OlxcdGNvbmZpZyBYSUxJTlhfQVhJX0VNQUNcXG4gIDI3OlxcdFxcdHRyaXN0YXRlIFxcXCJYaWxpbnggMTAvMTAwLzEwMDAgQVhJIEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuICAyODpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTVxcbiAgMjk6XFx0XFx0ZGVwZW5kcyBvbiBYSUxJTlhfRE1BXFxuICAzMDpcXHRcXHRzZWxlY3QgUEhZTElOS1xcbiAgMzE6XFx0XFx0c2VsZWN0IERJTUxJQlxcbiAgMzI6XFx0XFx0aGVscFxcbiAgMzM6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgMTAvMTAwLzEwMDAgRXRoZXJuZXQgZnJvbSBYaWxpbnggZm9yIHRoZVxcbiAgMzQ6XFx0XFx0ICBBWEkgYnVzIGludGVyZmFjZSB1c2VkIGluIFhpbGlueCBWaXJ0ZXggRlBHQXMgYW5kIFNvYydzLlxcbiAgMzU6XFx0XFxuICAzNjpcXHRjb25maWcgWElMSU5YX0xMX1RFTUFDXFxuICAzNzpcXHRcXHR0cmlzdGF0ZSBcXFwiWGlsaW54IExMIFRFTUFDIChMb2NhbExpbmsgVHJpLW1vZGUgRXRoZXJuZXQgTUFDKSBkcml2ZXJcXFwiXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTVxcbiAgMzk6XFx0XFx0c2VsZWN0IFBIWUxJQlxcbiAgNDA6XFx0XFx0aGVscFxcbiAgNDE6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgWGlsaW54IDEwLzEwMC8xMDAwIExvY2FsTGluayBURU1BQ1xcbiAgNDI6XFx0XFx0ICBjb3JlIHVzZWQgaW4gWGlsaW54IFNwYXJ0YW4gYW5kIFZpcnRleCBGUEdBc1xcbiAgNDM6XFx0XFxuICA0NDpcXHRlbmRpZiAjIE5FVF9WRU5ET1JfWElMSU5YXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjA3OjI4LjAxOTk4OTY0NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1MjU1NTM4NTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBYaWxpbnggQVhJL1hYViBFdGhlcm5ldCBEcml2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgWGlsaW54IEFYSS9YWFYgRXRoZXJuZXQgZHJpdmVyLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzOiAqWElMSU5YX0FYSV9FTUFDKiDigJMgdGhhdCdzIGEgcGxhdGZvcm0gZHJpdmVyLCBtYXRjaGluZyBzcGVjaWZpYyBkZXZpY2UgdHJlZSBjb21wYXRpYmxlcy4gV2UndmUgZ290IFwieGxueCxheGktZXRoZXJuZXQtMS4wMC5hXCIsIFwieGxueCxheGktZXRoZXJuZXQtMS4wMS5hXCIsIGV0Yy4sIGFuZCBub3cgXCJ4bG54LHh4di1ldGhlcm5ldC0xLjBcIi4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uOiBkb2VzIFFFTVUgZXZlbiAqc3VwcG9ydCogdGhpcz8gSSByZWNhbGwgc29tZSBzdXBwb3J0IGZvciBYaWxpbnggTWljcm9CbGF6ZS9aeW5xLCBidXQgd2hhdCdzIHRoZSBleHRlbnQgb2YgdGhlIGVtdWxhdGlvbj8gKmh3L25ldC94aWxpbnhfYXhpZW5ldC5jKiBleGlzdHMsIGJ1dCBkb2VzIGl0IGNvdmVyIHRoZSBYWFYgdmFyaWFudD8gTm8sIFhYViBpcyBhIDEwRy8yNUcgSVAgc3Vic3lzdGVtLCBhIGRpZmZlcmVudCBiZWFzdC5cblxuVGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgcmVmYWN0b3JpbmcgKnhpbGlueF9heGllbmV0X21haW4uYyosIHBvdGVudGlhbGx5IHRvIGNyZWF0ZSBhIGNvbW1vbiBsb2dpYyBsYXllciB1c2luZyAqbHAtXHUwMDNlYXhpZW5ldF9jb25maWcqIG9wcy4gSXQncyB0b3VjaGluZyBleGlzdGluZyAxRyBwYXRocyBsaWtlIE1BQyBhZGRyZXNzIHNldHRpbmcsIG11bHRpY2FzdCBsaXN0cywgc3RhdHMgdXBkYXRlcywgYW5kIGEgbG90IG9mIGluaXRpYWxpemF0aW9uL3Jlc2V0L0RNQSBlbmdpbmUgZnVuY3Rpb25zLiBBIG5ldyBmaWxlLCAqeGlsaW54X2F4aWVuZXRfeHh2LmMqLCBpcyBhZGRlZCBmb3IgdGhlIDEwRy8yNUcgc3Vic3lzdGVtLlxuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcyBmdXp6aW5nIHJlYWNoYWJpbGl0eS4gQ2FuIHRoaXMgKnhpbGlueF9heGllbmV0KiBkcml2ZXIgYmUgaW5zdGFudGlhdGVkIGluIGZ1enppbmcgZW52aXJvbm1lbnRzLCBlc3BlY2lhbGx5IFN5emthbGxlciBhbmQgUUVNVT8gU3l6a2FsbGVyIHJ1bnMgb24gc3RhbmRhcmQgUUVNVSBvciBHQ0UgVk1zLiBDYW4gcGxhdGZvcm0gZHJpdmVycyBsaWtlIHRoaXMgb25lIGJlIHJlYWNoZWQgd2l0aG91dCB2aXJ0dWFsIGRldmljZXM/IFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiAqUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSogaWYgdGhlIHBhdGNoIGlzOlxuXG4tICAgRG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgb3IgY29tbWVudHMuXG4tICAgRGVjb3JhdGl2ZSBjaGFuZ2VzLlxuLSAgIENvbnN0YW50IGNoYW5nZXMuXG4tICAgQ29kZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuXG4tICAgVmVuZG9yLXNwZWNpZmljIFBDSWUvU21hcnROSUMvR1BVIGRyaXZlcnMgcmVxdWlyaW5nIHBoeXNpY2FsIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBRRU1VLlxuLSAgIGAucmVtb3ZlYCwgYC5zaHV0ZG93bmAsIG9yIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgIGNhbGxiYWNrcy5cblxuSWYgdGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgKldvcnRoRnV6emluZz10cnVlKi4gU28sIGNhbiAqeGlsaW54X2F4aWVuZXQqIGJlIGxvYWRlZC9wcm9iZWQvZnV6emVkIGluIHN0YW5kYXJkIFFFTVUgKHg4Nl82NCBvciBhcm02NCk/IFRoaXMgaXMgYW4gT0YgcGxhdGZvcm0gZHJpdmVyOyBpdCByZWdpc3RlcnMgd2l0aCBgcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyYCBhbmQgcHJvYmVzIHZpYSBkZXZpY2UgdHJlZSBtYXRjaGVzLiBDYW4gU3l6a2FsbGVyIHByb2JlIHBsYXRmb3JtIGRyaXZlcnMgdmlhIE9GIG92ZXJsYXlzPyBEb2VzIHN0YW5kYXJkIFFFTVUgaGF2ZSBgeGxueCxheGktZXRoZXJuZXRgIGluIGl0cyBkZXZpY2UgdHJlZT8gKk5vKiwgdGhlIHN0YW5kYXJkIFFFTVUgYHZpcnRgIG1hY2hpbmUgZG9lc24ndC4gWW91IG5lZWQgdGhlIGB4bG54LXpjdTEwMmAgb3IgYG1pY3JvYmxhemVgIFFFTVUgYm9hcmRzIGZvciB0aGF0LlxuXG5UaGlzIGRyaXZlciBpcyBmb3IgXCJYaWxpbnggMTAvMTAwLzEwMDAgQVhJIEV0aGVybmV0XCIgYW5kIFwiWGlsaW54IFhYViAxMEcvMjVHIEV0aGVybmV0IFN1YnN5c3RlbS5cIiBUaGVzZSBhcmUgRlBHQSBJUCBjb3JlcyAvIFNvQyBwZXJpcGhlcmFsIGJsb2NrcyBvbiBYaWxpbnggRlBHQXMgYW5kIFNvQ3MgKFZpcnRleCwgWnlucSwgWnlucU1QLCBWZXJzYWwpLiBUaGUgKnhsbngseHh2LWV0aGVybmV0LTEuMCogdmFyaWFudCBzcGVjaWZpY2FsbHkgcmVxdWlyZXMgYSBYaWxpbnggRE1BIGNvbnRyb2xsZXIuIEluICpzdGFuZGFyZCogUUVNVS9HQ0UsIHRoZXJlJ3Mgbm8gc3VjaCBoYXJkd2FyZS4gRXZlbiB3aXRoIGFuIE9GIG92ZXJsYXkgb3IgcGxhdGZvcm0gZGV2aWNlIGNyZWF0aW9uLCBpdCdzIHByb2JsZW1hdGljOiBgZGV2bV9wbGF0Zm9ybV9nZXRfYW5kX2lvcmVtYXBfcmVzb3VyY2VgLCBjbG9jayBpbml0aWFsaXphdGlvbiB2aWEgYGRldm1fY2xrX2dldF9lbmFibGVkYCwgRE1BIGVuZ2luZSBzZXR1cCAocmVxdWlyZXMgWGlsaW54IERNQSksIHJlZ2lzdGVyIHJlYWRzIOKAkyBhbGwgdGhlc2UgcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSBvciBhIG1vcmUgYWR2YW5jZWQgbGV2ZWwgb2YgaGFyZHdhcmUgZW11bGF0aW9uLlxuXG5Pa2F5LCBpcyB0aGVyZSBhbnkgY29yZSBrZXJuZWwgY29kZSBtb2RpZmllZD8gTGV0J3MgY2hlY2sgdGhlIGdpdCBkaWZmIGFnYWluOiBpdCdzIGFsbCBjb250YWluZWQgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvYCDigJMgZG9jcywgTWFrZWZpbGVzLCBoZWFkZXJzLCBhbmQgdGhlIGRyaXZlciBzb3VyY2UgZmlsZXMuIE5vIGNvcmUgbmV0d29ya2luZyBzdGFjayBmaWxlcyBvciBjb21tb24ga2VybmVsIGNvZGUgaXMgdG91Y2hlZC5cblxuVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBpdCBpcyBub3QgZnV6emVyLXdvcnRoeS4gKnhpbGlueF9heGllbmV0KiByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBvciBhIG5vbi1zdGFuZGFyZCBRRU1VIGJvYXJkIGFuZCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBjaGFuZ2VzIGFyZSBlbnRpcmVseSB3aXRoaW4gdGhlIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIuXG5cblRoZXJlZm9yZSwgKldvcnRoRnV6emluZyogc2hvdWxkIGJlICpmYWxzZSouXG5cblRoZSBmaW5hbCBwYXJhbWV0ZXJzIHdpbGwgYmU6XG4tICAgYFdvcnRoRnV6emluZ2A6ICpmYWxzZSpcbi0gICBgUmVhc29uaW5nYDogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgWGlsXG5cbiIsIklucHV0VG9rZW5zIjozMzI2NSwiT3V0cHV0VG9rZW5zIjoxMTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MDc6NDMuMjc1NTMyMjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHZlbmRvci1zcGVjaWZpYyBYaWxpbnggQVhJIC8gWFhWIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54LyksIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgWGlsaW54IFhYViAxMEcvMjVHIEV0aGVybmV0IFN1YnN5c3RlbSBGUEdBIElQIGNvcmUuIFRoaXMgaGFyZHdhcmUgcmVxdWlyZXMgcGh5c2ljYWwgWGlsaW54L0FNRCBGUEdBL1NvQyBoYXJkd2FyZSBhbmQgY2Fubm90IGJlIHJlYWNoZWQgb3IgZXhlY3V0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB2ZW5kb3Itc3BlY2lmaWMgWGlsaW54IEFYSSAvIFhYViBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC8pLCBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFhpbGlueCBYWFYgMTBHLzI1RyBFdGhlcm5ldCBTdWJzeXN0ZW0gRlBHQSBJUCBjb3JlLiBUaGlzIGhhcmR3YXJlIHJlcXVpcmVzIHBoeXNpY2FsIFhpbGlueC9BTUQgRlBHQS9Tb0MgaGFyZHdhcmUgYW5kIGNhbm5vdCBiZSByZWFjaGVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MDc6NDMuMjc1NTcxNDdaIiwiU2VxIjo5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjnzwl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 22:04:56 +0000 UTC FinishedAt: 2026-08-31 22:07:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdmVuZG9yLXNwZWNpZmljIFhpbGlueCBBWEkgLyBYWFYgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvKSwgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBYaWxpbnggWFhWIDEwRy8yNUcgRXRoZXJuZXQgU3Vic3lzdGVtIEZQR0EgSVAgY29yZS4gVGhpcyBoYXJkd2FyZSByZXF1aXJlcyBwaHlzaWNhbCBYaWxpbngvQU1EIEZQR0EvU29DIGhhcmR3YXJlIGFuZCBjYW5ub3QgYmUgcmVhY2hlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0NWQ1MDJmYzE5MjlmNzNlMGZlYjgwNzM5ZGJkZTMyYTE3NjhkOGM2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjI6MDc6MTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHh4di1ldGhlcm5ldC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHh4di1ldGhlcm5ldC55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMmJlM2FkZTExZDQ2NVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHh4di1ldGhlcm5ldC55YW1sXG5AQCAtMCwwICYjNDM7MSwxMDcgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4mIzQzOyVZQU1MIDEuMlxuJiM0MzstLS1cbiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQveGxueCx4eHYtZXRoZXJuZXQueWFtbCNcbiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4mIzQzO1xuJiM0Mzt0aXRsZTogWGlsaW54IFhYViAxMEcvMjVHIEV0aGVybmV0IFN1YnN5c3RlbVxuJiM0MztcbiYjNDM7bWFpbnRhaW5lcnM6XG4mIzQzOyAgLSBSYWRoZXkgU2h5YW0gUGFuZGV5IFx1MDAzY3JhZGhleS5zaHlhbS5wYW5kZXlAYW1kLmNvbVx1MDAzZVxuJiM0MzsgIC0gU3VyYWogR3VwdGEgXHUwMDNjc3VyYWouZ3VwdGEyQGFtZC5jb21cdTAwM2VcbiYjNDM7XG4mIzQzO2Rlc2NyaXB0aW9uOlxuJiM0MzsgIFRoZSBYaWxpbnggWFhWIEV0aGVybmV0IFN1YnN5c3RlbSBpbXBsZW1lbnRzIGEgMTBHLzI1RyBFdGhlcm5ldCBNQUMgd2l0aCBhblxuJiM0MzsgIGluLWNvcmUgUENTL1BNQSBkcml2aW5nIGEgaGlnaC1zcGVlZCBzZXJpYWwgdHJhbnNjZWl2ZXIuIEl0IHN1cHBvcnRzIHRoZVxuJiM0MzsgIDEwR0JBU0UtUiBhbmQgMjVHQkFTRS1SIGxpbmUgcmF0ZXMsIHdpdGggMjVHIG9wZXJhdGlvbiBmb2xsb3dpbmcgdGhlIDI1R1xuJiM0MzsgIEV0aGVybmV0IENvbnNvcnRpdW0gc3BlY2lmaWNhdGlvbi4gSXQgaGFzIG5vIGV4dGVybmFsIE1ESU8gUEhZLCBhbmQgaXRzXG4mIzQzOyAgcGF5bG9hZCBpcyBtb3ZlZCBieSBhbiBleHRlcm5hbCBBWEkgRE1BIChvciBtdWx0aWNoYW5uZWwgRE1BKSBjb250cm9sbGVyXG4mIzQzOyAgcmVmZXJlbmNlZCB0aHJvdWdoIHRoZSBcJiMzNDtkbWFzXCYjMzQ7IHByb3BlcnR5LlxuJiM0MztcbiYjNDM7cHJvcGVydGllczpcbiYjNDM7ICBjb21wYXRpYmxlOlxuJiM0MzsgICAgY29uc3Q6IHhsbngseHh2LWV0aGVybmV0LTEuMFxuJiM0MztcbiYjNDM7ICByZWc6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MzsgICAgZGVzY3JpcHRpb246IE1BQyBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXIgc3BhY2UuXG4mIzQzO1xuJiM0MzsgIGNsb2NrczpcbiYjNDM7ICAgIGl0ZW1zOlxuJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBSWCBBWEk0LVN0cmVhbSBjbG9jay5cbiYjNDM7ICAgICAgLSBkZXNjcmlwdGlvbjogR1QgRFJQIGNsb2NrLlxuJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBBWEk0LUxpdGUgcmVnaXN0ZXIgY2xvY2suXG4mIzQzO1xuJiM0MzsgIGNsb2NrLW5hbWVzOlxuJiM0MzsgICAgaXRlbXM6XG4mIzQzOyAgICAgIC0gY29uc3Q6IHJ4X2NvcmVcbiYjNDM7ICAgICAgLSBjb25zdDogZHJwXG4mIzQzOyAgICAgIC0gY29uc3Q6IHNfYXhpXG4mIzQzO1xuJiM0MzsgIHBoeS1tb2RlOlxuJiM0MzsgICAgZW51bTpcbiYjNDM7ICAgICAgLSAxMGdiYXNlLXJcbiYjNDM7ICAgICAgLSAyNWdiYXNlLXJcbiYjNDM7XG4mIzQzOyAgeGxueCxyeG1lbTpcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBTaXplIGluIGJ5dGVzIG9mIHRoZSBSeC9UeCBwYWNrZXQgYnVmZmVyIG1lbW9yeSBidWlsdCBpbnRvIHRoZSBJUC4gSXQgaXNcbiYjNDM7ICAgICAgZml4ZWQgYnkgdGhlIGhhcmR3YXJlIGRlc2lnbiBhbmQgYm91bmRzIHRoZSBsYXJnZXN0IGZyYW1lIChqdW1ibyBNVFUpIHRoZVxuJiM0MzsgICAgICBkZXZpY2UgY2FuIGFjY2VwdC5cbiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMlxuJiM0MztcbiYjNDM7ICBkbWFzOlxuJiM0MzsgICAgbWluSXRlbXM6IDJcbiYjNDM7ICAgIG1heEl0ZW1zOiAzMlxuJiM0MzsgICAgZGVzY3JpcHRpb246IFRYIGFuZCBSWCBETUEgY2hhbm5lbCBwaGFuZGxlLlxuJiM0MztcbiYjNDM7ICBkbWEtbmFtZXM6XG4mIzQzOyAgICBpdGVtczpcbiYjNDM7ICAgICAgcGF0dGVybjogXCYjMzQ7Xlt0cl14X2NoYW4oWzAtOV18MVswLTVdKSRcJiMzNDtcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBTaG91bGQgYmUgXCYjMzQ7dHhfY2hhbjBcJiMzNDssIFwmIzM0O3R4X2NoYW4xXCYjMzQ7IC4uLiBcJiMzNDt0eF9jaGFuMTVcJiMzNDsgZm9yIERNQSBUeCBjaGFubmVsIGFuZFxuJiM0MzsgICAgICBcJiMzNDtyeF9jaGFuMFwmIzM0OywgXCYjMzQ7cnhfY2hhbjFcJiMzNDsgLi4uIFwmIzM0O3J4X2NoYW4xNVwmIzM0OyBmb3IgRE1BIFJ4IGNoYW5uZWwuXG4mIzQzOyAgICBtaW5JdGVtczogMlxuJiM0MzsgICAgbWF4SXRlbXM6IDMyXG4mIzQzO1xuJiM0MztyZXF1aXJlZDpcbiYjNDM7ICAtIGNvbXBhdGlibGVcbiYjNDM7ICAtIHJlZ1xuJiM0MzsgIC0gY2xvY2tzXG4mIzQzOyAgLSBjbG9jay1uYW1lc1xuJiM0MzsgIC0gcGh5LW1vZGVcbiYjNDM7ICAtIHhsbngscnhtZW1cbiYjNDM7ICAtIGRtYXNcbiYjNDM7ICAtIGRtYS1uYW1lc1xuJiM0MztcbiYjNDM7YWxsT2Y6XG4mIzQzOyAgLSAkcmVmOiAvc2NoZW1hcy9uZXQvZXRoZXJuZXQtY29udHJvbGxlci55YW1sI1xuJiM0MztcbiYjNDM7dW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuJiM0MztcbiYjNDM7ZXhhbXBsZXM6XG4mIzQzOyAgIyBTaW5nbGUgQVhJIERNQSBjaGFubmVsIHBhaXJcbiYjNDM7ICAtIHxcbiYjNDM7ICAgIGV0aGVybmV0QDgwMDAwMDAwIHtcbiYjNDM7ICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7eGxueCx4eHYtZXRoZXJuZXQtMS4wXCYjMzQ7O1xuJiM0MzsgICAgICAgIHJlZyA9IFx1MDAzYzB4ODAwMDAwMDAgMHgxMDAwMFx1MDAzZTtcbiYjNDM7ICAgICAgICBjbG9jay1uYW1lcyA9IFwmIzM0O3J4X2NvcmVcJiMzNDssIFwmIzM0O2RycFwmIzM0OywgXCYjMzQ7c19heGlcJiMzNDs7XG4mIzQzOyAgICAgICAgY2xvY2tzID0gXHUwMDNjXHUwMDI2cnhfY2xrXHUwMDNlLCBcdTAwM2NcdTAwMjZkcnBfY2xrXHUwMDNlLCBcdTAwM2NcdTAwMjZheGlfY2xrXHUwMDNlO1xuJiM0MzsgICAgICAgIGRtYS1uYW1lcyA9IFwmIzM0O3R4X2NoYW4wXCYjMzQ7LCBcJiMzNDtyeF9jaGFuMFwmIzM0OztcbiYjNDM7ICAgICAgICBkbWFzID0gXHUwMDNjXHUwMDI2YXhpX2RtYSAwXHUwMDNlLCBcdTAwM2NcdTAwMjZheGlfZG1hIDFcdTAwM2U7XG4mIzQzOyAgICAgICAgcGh5LW1vZGUgPSBcJiMzNDsyNWdiYXNlLXJcJiMzNDs7XG4mIzQzOyAgICAgICAgeGxueCxyeG1lbSA9IFx1MDAzYzB4ODAwMFx1MDAzZTtcbiYjNDM7ICAgIH07XG4mIzQzOyAgIyBNdWx0aWNoYW5uZWwgRE1BIChNQ0RNQSkgd2l0aCBtdWx0aXBsZSBUeC9SeCBjaGFubmVsc1xuJiM0MzsgIC0gfFxuJiM0MzsgICAgZXRoZXJuZXRAODAwMTAwMDAge1xuJiM0MzsgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDt4bG54LHh4di1ldGhlcm5ldC0xLjBcJiMzNDs7XG4mIzQzOyAgICAgICAgcmVnID0gXHUwMDNjMHg4MDAxMDAwMCAweDEwMDAwXHUwMDNlO1xuJiM0MzsgICAgICAgIGNsb2NrLW5hbWVzID0gXCYjMzQ7cnhfY29yZVwmIzM0OywgXCYjMzQ7ZHJwXCYjMzQ7LCBcJiMzNDtzX2F4aVwmIzM0OztcbiYjNDM7ICAgICAgICBjbG9ja3MgPSBcdTAwM2NcdTAwMjZyeF9jbGtcdTAwM2UsIFx1MDAzY1x1MDAyNmRycF9jbGtcdTAwM2UsIFx1MDAzY1x1MDAyNmF4aV9jbGtcdTAwM2U7XG4mIzQzOyAgICAgICAgZG1hLW5hbWVzID0gXCYjMzQ7dHhfY2hhbjBcJiMzNDssIFwmIzM0O3R4X2NoYW4xXCYjMzQ7LCBcJiMzNDtyeF9jaGFuMFwmIzM0OywgXCYjMzQ7cnhfY2hhbjFcJiMzNDs7XG4mIzQzOyAgICAgICAgZG1hcyA9IFx1MDAzY1x1MDAyNmF4aV9tY2RtYSAwXHUwMDNlLCBcdTAwM2NcdTAwMjZheGlfbWNkbWEgMVx1MDAzZSxcbiYjNDM7ICAgICAgICAgICAgICAgXHUwMDNjXHUwMDI2YXhpX21jZG1hIDE2XHUwMDNlLCBcdTAwM2NcdTAwMjZheGlfbWNkbWEgMTdcdTAwM2U7XG4mIzQzOyAgICAgICAgcGh5LW1vZGUgPSBcJiMzNDsxMGdiYXNlLXJcJiMzNDs7XG4mIzQzOyAgICAgICAgeGxueCxyeG1lbSA9IFx1MDAzYzB4ODAwMFx1MDAzZTtcbiYjNDM7ICAgIH07XG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggMGI0MmU4OThmNGQ4ZS4uNGVkYzhhNzMwNGRiMCAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTI5ODYxLDYgJiM0MzsyOTg2MSw3IEBAIFhJTElOWCBBWEkgRVRIRVJORVQgRFJJVkVSXG4gTTpcdFJhZGhleSBTaHlhbSBQYW5kZXkgXHUwMDNjcmFkaGV5LnNoeWFtLnBhbmRleUBhbWQuY29tXHUwMDNlXG4gUzpcdE1haW50YWluZWRcbiBGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LGF4aS1ldGhlcm5ldC55YW1sXG4mIzQzO0Y6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3hsbngseHh2LWV0aGVybmV0LnlhbWxcbiBGOlx0ZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0KlxuIFxuIFhJTElOWCBDQU4gRFJJVkVSXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L01ha2VmaWxlXG5pbmRleCA3ZDdkYzE3NzE0MjNlLi5kYjkwZTY5MWZlYzU4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvTWFrZWZpbGVcbkBAIC02LDUgJiM0Mzs2LDYgQEBcbiBsbF90ZW1hYy1vYmpzIDo9IGxsX3RlbWFjX21haW4ubyBsbF90ZW1hY19tZGlvLm9cbiBvYmotJChDT05GSUdfWElMSU5YX0xMX1RFTUFDKSAmIzQzOz0gbGxfdGVtYWMub1xuIG9iai0kKENPTkZJR19YSUxJTlhfRU1BQ0xJVEUpICYjNDM7PSB4aWxpbnhfZW1hY2xpdGUub1xuLXhpbGlueF9lbWFjLW9ianMgOj0geGlsaW54X2F4aWVuZXRfbWFpbi5vIHhpbGlueF9heGllbmV0X21kaW8ub1xuJiM0Mzt4aWxpbnhfZW1hYy1vYmpzIDo9IHhpbGlueF9heGllbmV0X21haW4ubyB4aWxpbnhfYXhpZW5ldF9tZGlvLm8gXFxcbiYjNDM7XHRcdCAgICB4aWxpbnhfYXhpZW5ldF94eHYub1xuIG9iai0kKENPTkZJR19YSUxJTlhfQVhJX0VNQUMpICYjNDM7PSB4aWxpbnhfZW1hYy5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXQuaFxuaW5kZXggZmNkM2FhZWYyN2ZjMy4uMmVhMDg2ZmM0ZGMzNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXQuaFxuQEAgLTEwLDYgJiM0MzsxMCw3IEBAXG4gI2RlZmluZSBYSUxJTlhfQVhJRU5FVF9IXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGltLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbkBAIC0xNyw2ICYjNDM7MTgsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeWxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hpbGlueF9heGllbmV0X3h4di5oXCYjMzQ7XG4mIzQzO1xuIC8qIFBhY2tldCBzaXplIGluZm8gKi9cbiAjZGVmaW5lIFhBRV9IRFJfU0laRVx0XHRcdDE0IC8qIFNpemUgb2YgRXRoZXJuZXQgaGVhZGVyICovXG4gI2RlZmluZSBYQUVfVFJMX1NJWkVcdFx0XHQgNCAvKiBTaXplIG9mIEV0aGVybmV0IHRyYWlsZXIgKEZDUykgKi9cbkBAIC01NDUsNiAmIzQzOzU0OCw5IEBAIHN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciB7XG4gICogQHR4X3JpbmdfdGFpbDogVFggc2tiIHJpbmcgYnVmZmVyIHRhaWwgaW5kZXguXG4gICogQHJ4X3JpbmdfaGVhZDogUlggc2tiIHJpbmcgYnVmZmVyIGhlYWQgaW5kZXguXG4gICogQHJ4X3JpbmdfdGFpbDogUlggc2tiIHJpbmcgYnVmZmVyIHRhaWwgaW5kZXguXG4mIzQzOyAqIEB4eHZfaXBfdmVyc2lvbjogWFhWIElQIHZlcnNpb24uXG4mIzQzOyAqIEB4eHZfc3RhdF9iYXNlOiBTb2Z0d2FyZSBhY2N1bXVsYXRvcnMgZm9yIHRoZSBYWFYgY2xlYXItb24tdGljayBjb3VudGVycy5cbiYjNDM7ICogQGF4aWVuZXRfY29uZmlnOiBNQUMtdHlwZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGFuZCBvcGVyYXRpb25zLlxuICAqL1xuIHN0cnVjdCBheGllbmV0X2xvY2FsIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuQEAgLTU5OCw2ICYjNDM7NjA0LDcgQEAgc3RydWN0IGF4aWVuZXRfbG9jYWwge1xuIFxuIFx0dTY0IGh3X3N0YXRfYmFzZVtTVEFUX0NPVU5UXTtcbiBcdHUzMiBod19sYXN0X2NvdW50ZXJbU1RBVF9DT1VOVF07XG4mIzQzO1x0dTY0IHh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfQ09VTlRdO1xuIFx0c2VxY291bnRfbXV0ZXhfdCBod19zdGF0c19zZXFjb3VudDtcbiBcdHN0cnVjdCBtdXRleCBzdGF0c19sb2NrO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBzdGF0c193b3JrO1xuQEAgLTYyNiw4ICYjNDM7NjMzLDg4IEBAIHN0cnVjdCBheGllbmV0X2xvY2FsIHtcbiBcdGludCB0eF9yaW5nX3RhaWw7XG4gXHRpbnQgcnhfcmluZ19oZWFkO1xuIFx0aW50IHJ4X3JpbmdfdGFpbDtcbiYjNDM7XHR1MzIgeHh2X2lwX3ZlcnNpb247XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGF4aWVuZXRfY29uZmlnICpheGllbmV0X2NvbmZpZztcbiB9O1xuIFxuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IGF4aWVuZXRfY29uZmlnIC0gTUFDLXR5cGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBhbmQgb3BlcmF0aW9uc1xuJiM0MzsgKiBAbWRpbzogTUFDIGhhcyBhbiBNRElPIGJ1cyBmb3IgZXh0ZXJuYWwgUEhZIG1hbmFnZW1lbnRcbiYjNDM7ICogQG1hY19pcnE6IE1BQyBoYXMgYSBkZWRpY2F0ZWQgY29yZSBpbnRlcnJ1cHRcbiYjNDM7ICogQGxlZ2FjeV9kbWE6IE1BQyBzdXBwb3J0cyB0aGUgbGVnYWN5IChub24tZG1hZW5naW5lKSBETUEgbW9kZVxuJiM0MzsgKiBAdWNfZmlsdGVyOiBNQUMgaGFzIHVuaWNhc3QgYWRkcmVzcyBmaWx0ZXIgcmVnaXN0ZXJzXG4mIzQzOyAqIEBtY19maWx0ZXI6IE1BQyBoYXMgbXVsdGljYXN0IGFkZHJlc3MgZmlsdGVyIHJlZ2lzdGVyc1xuJiM0MzsgKiBAdmxhbjogTUFDIHN1cHBvcnRzIFZMQU4gZnJhbWVzIGJ5IGRlZmF1bHRcbiYjNDM7ICogQGp1bWJvOiBNQUMgc3VwcG9ydHMganVtYm8gZnJhbWVzXG4mIzQzOyAqIEBkbWFfdHhfY3N1bTogTUFDIHN1cHBvcnRzIFRYIGNoZWNrc3VtIG9mZmxvYWRcbiYjNDM7ICogQHN3X3BhZGRpbmc6IFNob3J0IGZyYW1lcyBtdXN0IGJlIHBhZGRlZCBpbiBzb2Z0d2FyZSBiZWZvcmUgdHJhbnNtaXRcbiYjNDM7ICogQGludGVybmFsX3BjczogTUFDIGFsd2F5cyBkcml2ZXMgYW4gaW50ZXJuYWwgUENTXG4mIzQzOyAqIEByZWdzX246IE51bWJlciBvZiBNQUMgcmVnaXN0ZXJzIGV4cG9zZWQgdGhyb3VnaCBldGh0b29sIC1kXG4mIzQzOyAqIEBjbGtfaW5pdDogQ2FsbGJhY2sgdG8gZ2V0IGFuZCBlbmFibGUgdGhlIE1BQy1zcGVjaWZpYyBjbG9ja3NcbiYjNDM7ICogQHNldG9wdGlvbnM6IENhbGxiYWNrIHRvIHByb2dyYW0gTUFDIGhhcmR3YXJlIG9wdGlvbnNcbiYjNDM7ICogQHByb2JlX2luaXQ6IENhbGxiYWNrIGZvciBNQUMtc3BlY2lmaWMgcHJvYmUtdGltZSBpbml0LCBvciBOVUxMIGlmIHVudXNlZFxuJiM0MzsgKiBAZ3RfcmVzZXQ6IENhbGxiYWNrIHRvIHJlc2V0IHRoZSBzZXJpYWwgdHJhbnNjZWl2ZXIgKEdUKSwgb3IgTlVMTCBpZiB1bnVzZWRcbiYjNDM7ICogQG1hY19pbml0OiBDYWxsYmFjayBmb3IgTUFDLXNwZWNpZmljIGJyaW5nLXVwIGFmdGVyIHRoZSBETUEgcmVzZXRcbiYjNDM7ICogQG1hY19saW5rX3VwOiBDYWxsYmFjayB0byBwcm9ncmFtIGxpbmsgc3BlZWQgYW5kIHBhdXNlIG9uIGxpbmsgdXAsIG9yIE5VTExcbiYjNDM7ICogQGdldF9yZWdzOiBDYWxsYmFjayB0byBkdW1wIHRoZSBNQUMgcmVnaXN0ZXJzIGZvciBldGh0b29sIC1kXG4mIzQzOyAqIEBwaHlsaW5rX3NldF9jYXBzOiBDYWxsYmFjayB0byBzZXQgcGh5bGluayBNQUMgY2FwYWJpbGl0aWVzXG4mIzQzOyAqIEBwY3Nfb3BzOiBwaHlsaW5rIFBDUyBvcGVyYXRpb25zIGZvciB0aGlzIE1BQywgb3IgTlVMTCBpZiB1bnVzZWRcbiYjNDM7ICogQHN0YXRzX3VwZGF0ZTogQ2FsbGJhY2sgdG8gbGF0Y2gvYWNjdW11bGF0ZSB0aGUgcGVyaW9kaWMgTUFDIGNvdW50ZXJzXG4mIzQzOyAqIEBnZXRfc3RhdHM2NDogQ2FsbGJhY2sgdG8gcmVhZCBNQUMgY291bnRlcnMgaW50byBydG5sX2xpbmtfc3RhdHM2NFxuJiM0MzsgKiBAZ2V0X2V0aHRvb2xfc3RhdHM6IENhbGxiYWNrIHRvIHJlYWQgTUFDIGNvdW50ZXJzIGZvciBldGh0b29sIC1TXG4mIzQzOyAqIEBnZXRfc3RyaW5nczogQ2FsbGJhY2sgdG8gZmlsbCB0aGUgZXRodG9vbCAtUyBzdGF0aXN0aWMgbmFtZSBzdHJpbmdzXG4mIzQzOyAqIEBnZXRfc3NldF9jb3VudDogQ2FsbGJhY2sgcmV0dXJuaW5nIHRoZSBudW1iZXIgb2YgZXRodG9vbCAtUyBzdGF0aXN0aWNzXG4mIzQzOyAqIEBnZXRfcGF1c2Vfc3RhdHM6IENhbGxiYWNrIHRvIHJlYWQgTUFDIHBhdXNlLWZyYW1lIGNvdW50ZXJzXG4mIzQzOyAqIEBnZXRfZXRoX21hY19zdGF0czogQ2FsbGJhY2sgdG8gcmVhZCBJRUVFIDgwMi4zIE1BQyBjb3VudGVyc1xuJiM0MzsgKiBAZ2V0X2V0aF9jdHJsX3N0YXRzOiBDYWxsYmFjayB0byByZWFkIE1BQy1jb250cm9sIGZyYW1lIGNvdW50ZXJzLCBvciBOVUxMXG4mIzQzOyAqXHRcdFx0aWYgdGhlIE1BQyBleHBvc2VzIG5vIGNvbnRyb2wtZnJhbWUgY291bnRlcnNcbiYjNDM7ICogQGdldF9ybW9uX3N0YXRzOiBDYWxsYmFjayB0byByZWFkIFJNT04gY291bnRlcnMgYW5kIGhpc3RvZ3JhbSByYW5nZXNcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBheGllbmV0X2NvbmZpZyB7XG4mIzQzO1x0Ym9vbCBtZGlvO1xuJiM0MztcdGJvb2wgbWFjX2lycTtcbiYjNDM7XHRib29sIGxlZ2FjeV9kbWE7XG4mIzQzO1x0Ym9vbCB1Y19maWx0ZXI7XG4mIzQzO1x0Ym9vbCBtY19maWx0ZXI7XG4mIzQzO1x0Ym9vbCB2bGFuO1xuJiM0MztcdGJvb2wganVtYm87XG4mIzQzO1x0Ym9vbCBkbWFfdHhfY3N1bTtcbiYjNDM7XHRib29sIHN3X3BhZGRpbmc7XG4mIzQzO1x0Ym9vbCBpbnRlcm5hbF9wY3M7XG4mIzQzO1x0dW5zaWduZWQgaW50IHJlZ3NfbjtcbiYjNDM7XHRpbnQgKCpjbGtfaW5pdCkoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKTtcbiYjNDM7XHR2b2lkICgqc2V0b3B0aW9ucykoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBvcHRpb25zKTtcbiYjNDM7XHR2b2lkICgqcHJvYmVfaW5pdCkoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKTtcbiYjNDM7XHR2b2lkICgqZ3RfcmVzZXQpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCk7XG4mIzQzO1x0aW50ICgqbWFjX2luaXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbiYjNDM7XHR2b2lkICgqbWFjX2xpbmtfdXApKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgc3BlZWQsXG4mIzQzO1x0XHRcdCAgICBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKTtcbiYjNDM7XHR2b2lkICgqZ2V0X3JlZ3MpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwgdTMyICpkYXRhKTtcbiYjNDM7XHR2b2lkICgqcGh5bGlua19zZXRfY2Fwcykoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHBoeWxpbmtfcGNzX29wcyAqcGNzX29wcztcbiYjNDM7XHR2b2lkICgqc3RhdHNfdXBkYXRlKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApO1xuJiM0MztcdHZvaWQgKCpnZXRfc3RhdHM2NCkoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cyk7XG4mIzQzO1x0dm9pZCAoKmdldF9ldGh0b29sX3N0YXRzKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsIHU2NCAqZGF0YSk7XG4mIzQzO1x0dm9pZCAoKmdldF9zdHJpbmdzKSh1OCAqZGF0YSk7XG4mIzQzO1x0aW50ICgqZ2V0X3NzZXRfY291bnQpKHZvaWQpO1xuJiM0MztcdHZvaWQgKCpnZXRfcGF1c2Vfc3RhdHMpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCxcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcGF1c2Vfc3RhdHMpO1xuJiM0MztcdHZvaWQgKCpnZXRfZXRoX21hY19zdGF0cykoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKTtcbiYjNDM7XHR2b2lkICgqZ2V0X2V0aF9jdHJsX3N0YXRzKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IGV0aHRvb2xfZXRoX2N0cmxfc3RhdHMgKmN0cmxfc3RhdHMpO1xuJiM0MztcdHZvaWQgKCpnZXRfcm1vbl9zdGF0cykoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSAqKnJhbmdlcyk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBheGllbmV0X2xvY2FsICpwY3NfdG9fYXhpZW5ldF9sb2NhbChzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCwgcGNzKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBzdHJ1Y3QgYXhpZW5ldF9vcHRpb24gLSBVc2VkIHRvIHNldCBheGkgZXRoZXJuZXQgaGFyZHdhcmUgb3B0aW9uc1xuICAqIEBvcHQ6XHRPcHRpb24gdG8gYmUgc2V0LlxuQEAgLTc0MSw0ICYjNDM7ODI4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGF4aWVuZXRfZG1hX291dF9hZGRyKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwgb2ZmX3QgcmVnLFxuIGludCBheGllbmV0X21kaW9fc2V0dXAoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKTtcbiB2b2lkIGF4aWVuZXRfbWRpb190ZWFyZG93bihzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApO1xuIFxuJiM0MzsvKiBSTU9OIGhpc3RvZ3JhbSByYW5nZXMgc2hhcmVkIGJ5IGFsbCBNQUMgdHlwZXMgKi9cbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSBheGllbmV0X3Jtb25fcmFuZ2VzW107XG4mIzQzO1xuICNlbmRpZiAvKiBYSUxJTlhfQVhJX0VORVRfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jXG5pbmRleCAxNzIyYjcwMzhmMzQwLi41OGUyMmYwZmQ3Yzk1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uY1xuQEAgLTMzLDYgJiM0MzszMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfaXJxLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9hZGRyZXNzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tYXRoNjQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG5AQCAtNjUsMTYgJiM0Mzs2Niw2IEBAXG4gXG4gc3RhdGljIHZvaWQgYXhpZW5ldF9yeF9zdWJtaXRfZGVzYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4gXG4tLyogTWF0Y2ggdGFibGUgZm9yIG9mX3BsYXRmb3JtIGJpbmRpbmcgKi9cbi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBheGllbmV0X29mX21hdGNoW10gPSB7XG4tXHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7eGxueCxheGktZXRoZXJuZXQtMS4wMC5hXCYjMzQ7LCB9LFxuLVx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3hsbngsYXhpLWV0aGVybmV0LTEuMDEuYVwmIzM0OywgfSxcbi1cdHsgLmNvbXBhdGlibGUgPSBcJiMzNDt4bG54LGF4aS1ldGhlcm5ldC0yLjAxLmFcJiMzNDssIH0sXG4tXHR7fSxcbi19O1xuLVxuLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGF4aWVuZXRfb2ZfbWF0Y2gpO1xuLVxuIC8qIE9wdGlvbiB0YWJsZSBmb3Igc2V0dGluZyB1cCBBeGkgRXRoZXJuZXQgaGFyZHdhcmUgb3B0aW9ucyAqL1xuIHN0YXRpYyBzdHJ1Y3QgYXhpZW5ldF9vcHRpb24gYXhpZW5ldF9vcHRpb25zW10gPSB7XG4gXHQvKiBUdXJuIG9uIGp1bWJvIHBhY2tldCBzdXBwb3J0IGZvciBib3RoIFJ4IGFuZCBUeCAqL1xuQEAgLTQxOSw2ICYjNDM7NDEwLDkgQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmRldi1cdTAwM2VkZXZfYWRkcikpXG4gXHRcdGV0aF9od19hZGRyX3JhbmRvbShuZGV2KTtcbiBcbiYjNDM7XHRpZiAoIWxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZXVjX2ZpbHRlcilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHQvKiBTZXQgdXAgdW5pY2FzdCBNQUMgYWRkcmVzcyBmaWx0ZXIgc2V0IGl0cyBtYWMgYWRkcmVzcyAqL1xuIFx0YXhpZW5ldF9pb3cobHAsIFhBRV9VQVcwX09GRlNFVCxcbiBcdFx0ICAgIChuZGV2LVx1MDAzZWRldl9hZGRyWzBdKSB8XG5AQCAtNDY4LDYgJiM0Mzs0NjIsOSBAQCBzdGF0aWMgdm9pZCBheGllbmV0X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdHUzMiByZWcsIGFmMHJlZywgYWYxcmVnO1xuIFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXG4mIzQzO1x0aWYgKCFscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VtY19maWx0ZXIpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0cmVnID0gYXhpZW5ldF9pb3IobHAsIFhBRV9GTUlfT0ZGU0VUKTtcbiBcdHJlZyBcdTAwMjY9IH5YQUVfRk1JX1BNX01BU0s7XG4gXHRpZiAobmRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1BST01JU0MpXG5AQCAtNTc2LDE2ICYjNDM7NTczLDMxIEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfc3RhdHNfdXBkYXRlKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwgYm9vbCByZXNldClcbiBcdHdyaXRlX3NlcWNvdW50X2VuZChcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogYXhpZW5ldF8xZ19zdGF0c191cGRhdGUgLSBSZWZyZXNoIDFHIE1BQyBoYXJkd2FyZSBzdGF0aXN0aWNzXG4mIzQzOyAqIEBscDpcdFx0UG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfc3RhdHNfdXBkYXRlKHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcbiYjNDM7e1xuJiM0MztcdGF4aWVuZXRfc3RhdHNfdXBkYXRlKGxwLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgYXhpZW5ldF9yZWZyZXNoX3N0YXRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF4aWVuZXRfbG9jYWwsXG4gXHRcdFx0XHRcdFx0c3RhdHNfd29yay53b3JrKTtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2bHAtXHUwMDNlc3RhdHNfbG9jayk7XG4tXHRheGllbmV0X3N0YXRzX3VwZGF0ZShscCwgZmFsc2UpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxwLVx1MDAzZXN0YXRzX2xvY2spO1xuJiM0MztcdGlmIChscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VzdGF0c191cGRhdGUpIHtcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2bHAtXHUwMDNlc3RhdHNfbG9jayk7XG4mIzQzO1x0XHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VzdGF0c191cGRhdGUobHApO1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxwLVx1MDAzZXN0YXRzX2xvY2spO1xuJiM0MztcdH1cbiBcbi1cdC8qIEp1c3QgbGVzcyB0aGFuIDJeMzIgYnl0ZXMgYXQgMi41IEdCaXQvcyAqL1xuJiM0MztcdC8qIFJlLWFybSB0aGUgcG9sbCBiZWZvcmUgYW55IGNvdW50ZXIgY2FuIG92ZXJmbG93IGJldHdlZW4gdXBkYXRlczogdGhlXG4mIzQzO1x0ICogMUcgYnl0ZSBjb3VudGVyIHJlYWNoZXMganVzdCB1bmRlciAyXjMyIGluIHRoaXMgaW50ZXJ2YWwgYXQgMi41IEdiaXQvcyxcbiYjNDM7XHQgKiBhbmQgdGhlIFhYViBpbnRlcm5hbCBhY2N1bXVsYXRvcnMgbXVzdCBiZSBsYXRjaGVkICh2aWEgVElDSyBpblxuJiM0MztcdCAqIGF4aWVuZXRfeHh2X3N0YXRzX3VwZGF0ZSgpKSBiZWZvcmUgdGhleSBzYXR1cmF0ZSBhdCBsaW5lIHJhdGUuXG4mIzQzO1x0ICovXG4gXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bHAtXHUwMDNlc3RhdHNfd29yaywgMTMgKiBIWik7XG4gfVxuIFxuQEAgLTU5NCw3ICYjNDM7NjA2LDE2IEBAIHN0YXRpYyBpbnQgX19heGllbmV0X2RldmljZV9yZXNldChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApXG4gXHR1MzIgdmFsdWU7XG4gXHRpbnQgcmV0O1xuIFxuLVx0LyogU2F2ZSBzdGF0aXN0aWNzIGNvdW50ZXJzIGluIGNhc2UgdGhleSB3aWxsIGJlIHJlc2V0ICovXG4mIzQzO1x0LyogU2F2ZSBzdGF0aXN0aWNzIGNvdW50ZXJzIGluIGNhc2UgdGhleSB3aWxsIGJlIHJlc2V0LlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlIFhBRV9GRUFUVVJFX1NUQVRTIGJsb2NrcyBpbiB0aGlzIGZ1bmN0aW9uIHJlYWQgdGhlIFRFTUFDXG4mIzQzO1x0ICogc3RhdGlzdGljcyByZWdpc3RlcnMgYXQgWEFFX1NUQVRTX09GRlNFVCwgaS5lLiB0aGV5IGFzc3VtZSB0aGUgMUdcbiYjNDM7XHQgKiBjb3VudGVyIGxheW91dC4gVGhpcyBpcyBzYWZlIGJlY2F1c2UgX19heGllbmV0X2RldmljZV9yZXNldCgpIGlzXG4mIzQzO1x0ICogb25seSByZWFjaGVkIG9uIHRoZSBsZWdhY3kgKG5vbi1kbWFlbmdpbmUpIERNQSBwYXRoLCB3aGljaCB0aGVcbiYjNDM7XHQgKiBsZWdhY3lfZG1hIGNhcGFiaWxpdHkgcmVzdHJpY3RzIHRvIHRoZSAxRyBNQUMuIE1BQ3MgdGhhdCB1c2UgdGhlaXJcbiYjNDM7XHQgKiBvd24gc3RhdGlzdGljcyBtZWNoYW5pc20gKGUuZy4gWFhWLCB3aGljaCBpcyBkbWFlbmdpbmUtb25seSkgbmV2ZXJcbiYjNDM7XHQgKiBleGVjdXRlIHRoaXMgcGF0aC5cbiYjNDM7XHQgKi9cbiBcdG11dGV4X2xvY2soXHUwMDI2bHAtXHUwMDNlc3RhdHNfbG9jayk7XG4gXHRpZiAobHAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IFhBRV9GRUFUVVJFX1NUQVRTKVxuIFx0XHRheGllbmV0X3N0YXRzX3VwZGF0ZShscCwgdHJ1ZSk7XG5AQCAtNjk0LDYgJiM0Mzs3MTUsMzIgQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9kbWFfc3RvcChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApXG4gXHRheGllbmV0X3VubG9ja19taWkobHApO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGF4aWVuZXRfMWdfbWFjX2luaXQgLSAxRyBNQUMtc3BlY2lmaWMgYnJpbmctdXAgYWZ0ZXIgdGhlIERNQSByZXNldFxuJiM0MzsgKiBAbmRldjpcdFBvaW50ZXIgdG8gdGhlIG5ldF9kZXZpY2Ugc3RydWN0dXJlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYXhpZW5ldF8xZ19tYWNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdHUzMiBheGllbmV0X3N0YXR1cztcbiYjNDM7XG4mIzQzO1x0YXhpZW5ldF9zdGF0dXMgPSBheGllbmV0X2lvcihscCwgWEFFX1JDVzFfT0ZGU0VUKTtcbiYjNDM7XHRheGllbmV0X3N0YXR1cyBcdTAwMjY9IH5YQUVfUkNXMV9SWF9NQVNLO1xuJiM0MztcdGF4aWVuZXRfaW93KGxwLCBYQUVfUkNXMV9PRkZTRVQsIGF4aWVuZXRfc3RhdHVzKTtcbiYjNDM7XG4mIzQzO1x0YXhpZW5ldF9zdGF0dXMgPSBheGllbmV0X2lvcihscCwgWEFFX0lQX09GRlNFVCk7XG4mIzQzO1x0aWYgKGF4aWVuZXRfc3RhdHVzIFx1MDAyNiBYQUVfSU5UX1JYUkpFQ1RfTUFTSylcbiYjNDM7XHRcdGF4aWVuZXRfaW93KGxwLCBYQUVfSVNfT0ZGU0VULCBYQUVfSU5UX1JYUkpFQ1RfTUFTSyk7XG4mIzQzO1x0YXhpZW5ldF9pb3cobHAsIFhBRV9JRV9PRkZTRVQsIGxwLVx1MDAzZWV0aF9pcnEgXHUwMDNlIDAgP1xuJiM0MztcdFx0ICAgIFhBRV9JTlRfUkVDVl9FUlJPUl9NQVNLIDogMCk7XG4mIzQzO1xuJiM0MztcdGF4aWVuZXRfaW93KGxwLCBYQUVfRkNDX09GRlNFVCwgWEFFX0ZDQ19GQ1JYX01BU0spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBheGllbmV0X2RldmljZV9yZXNldCAtIFJlc2V0IGFuZCBpbml0aWFsaXplIHRoZSBBeGkgRXRoZXJuZXQgaGFyZHdhcmUuXG4gICogQG5kZXY6XHRQb2ludGVyIHRvIHRoZSBuZXRfZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTcwOSwxOSAmIzQzOzc1NiwyMyBAQCBzdGF0aWMgdm9pZCBheGllbmV0X2RtYV9zdG9wKHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcbiAgKi9cbiBzdGF0aWMgaW50IGF4aWVuZXRfZGV2aWNlX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHtcbi1cdHUzMiBheGllbmV0X3N0YXR1cztcbiBcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0aW50IHJldDtcbiBcbiYjNDM7XHRpZiAobHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ3RfcmVzZXQpXG4mIzQzO1x0XHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VndF9yZXNldChscCk7XG4mIzQzO1xuIFx0bHAtXHUwMDNlbWF4X2ZybV9zaXplID0gWEFFX01BWF9WTEFOX0ZSQU1FX1NJWkU7XG4tXHRscC1cdTAwM2VvcHRpb25zIHw9IFhBRV9PUFRJT05fVkxBTjtcbiYjNDM7XG4mIzQzO1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZXZsYW4pXG4mIzQzO1x0XHRscC1cdTAwM2VvcHRpb25zIHw9IFhBRV9PUFRJT05fVkxBTjtcbiBcdGxwLVx1MDAzZW9wdGlvbnMgXHUwMDI2PSAoflhBRV9PUFRJT05fSlVNQk8pO1xuIFxuIFx0aWYgKG5kZXYtXHUwMDNlbXR1IFx1MDAzZSBYQUVfTVRVIFx1MDAyNlx1MDAyNiBuZGV2LVx1MDAzZW10dSBcdTAwM2M9IFhBRV9KVU1CT19NVFUpIHtcbiBcdFx0bHAtXHUwMDNlbWF4X2ZybV9zaXplID0gbmRldi1cdTAwM2VtdHUgJiM0MzsgVkxBTl9FVEhfSExFTiAmIzQzO1xuIFx0XHRcdFx0XHRYQUVfVFJMX1NJWkU7XG4gXG4tXHRcdGlmIChscC1cdTAwM2VtYXhfZnJtX3NpemUgXHUwMDNjPSBscC1cdTAwM2VyeG1lbSlcbiYjNDM7XHRcdGlmIChscC1cdTAwM2VtYXhfZnJtX3NpemUgXHUwMDNjPSBscC1cdTAwM2VyeG1lbSBcdTAwMjZcdTAwMjYgbHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlanVtYm8pXG4gXHRcdFx0bHAtXHUwMDNlb3B0aW9ucyB8PSBYQUVfT1BUSU9OX0pVTUJPO1xuIFx0fVxuIFxuQEAgLTczOCwyNiAmIzQzOzc4OSwxOCBAQCBzdGF0aWMgaW50IGF4aWVuZXRfZGV2aWNlX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRheGllbmV0X3N0YXR1cyA9IGF4aWVuZXRfaW9yKGxwLCBYQUVfUkNXMV9PRkZTRVQpO1xuLVx0YXhpZW5ldF9zdGF0dXMgXHUwMDI2PSB+WEFFX1JDVzFfUlhfTUFTSztcbi1cdGF4aWVuZXRfaW93KGxwLCBYQUVfUkNXMV9PRkZTRVQsIGF4aWVuZXRfc3RhdHVzKTtcbi1cbi1cdGF4aWVuZXRfc3RhdHVzID0gYXhpZW5ldF9pb3IobHAsIFhBRV9JUF9PRkZTRVQpO1xuLVx0aWYgKGF4aWVuZXRfc3RhdHVzIFx1MDAyNiBYQUVfSU5UX1JYUkpFQ1RfTUFTSylcbi1cdFx0YXhpZW5ldF9pb3cobHAsIFhBRV9JU19PRkZTRVQsIFhBRV9JTlRfUlhSSkVDVF9NQVNLKTtcbi1cdGF4aWVuZXRfaW93KGxwLCBYQUVfSUVfT0ZGU0VULCBscC1cdTAwM2VldGhfaXJxIFx1MDAzZSAwID9cbi1cdFx0ICAgIFhBRV9JTlRfUkVDVl9FUlJPUl9NQVNLIDogMCk7XG4tXG4tXHRheGllbmV0X2lvdyhscCwgWEFFX0ZDQ19PRkZTRVQsIFhBRV9GQ0NfRkNSWF9NQVNLKTtcbiYjNDM7XHRyZXQgPSBscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VtYWNfaW5pdChuZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbiBcdC8qIFN5bmMgZGVmYXVsdCBvcHRpb25zIHdpdGggSFcgYnV0IGxlYXZlIHJlY2VpdmVyIGFuZFxuIFx0ICogdHJhbnNtaXR0ZXIgZGlzYWJsZWQuXG4gXHQgKi9cbi1cdGF4aWVuZXRfc2V0b3B0aW9ucyhuZGV2LCBscC1cdTAwM2VvcHRpb25zIFx1MDAyNlxuLVx0XHRcdCAgIH4oWEFFX09QVElPTl9UWEVOIHwgWEFFX09QVElPTl9SWEVOKSk7XG4mIzQzO1x0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlc2V0b3B0aW9ucyhuZGV2LCBscC1cdTAwM2VvcHRpb25zIFx1MDAyNlxuJiM0MztcdFx0XHRcdCAgICAgICB+KFhBRV9PUFRJT05fVFhFTiB8IFhBRV9PUFRJT05fUlhFTikpO1xuIFx0YXhpZW5ldF9zZXRfbWFjX2FkZHJlc3MobmRldiwgTlVMTCk7XG4gXHRheGllbmV0X3NldF9tdWx0aWNhc3RfbGlzdChuZGV2KTtcbi1cdGF4aWVuZXRfc2V0b3B0aW9ucyhuZGV2LCBscC1cdTAwM2VvcHRpb25zKTtcbiYjNDM7XHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VzZXRvcHRpb25zKG5kZXYsIGxwLVx1MDAzZW9wdGlvbnMpO1xuIFxuIFx0bmV0aWZfdHJhbnNfdXBkYXRlKG5kZXYpO1xuIFxuQEAgLTkxNSw2ICYjNDM7OTU4LDEzIEBAIGF4aWVuZXRfc3RhcnRfeG1pdF9kbWFlbmdpbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRpbnQgc2dfbGVuO1xuIFx0aW50IHJldDtcbiBcbiYjNDM7XHRpZiAobHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlc3dfcGFkZGluZyBcdTAwMjZcdTAwMjYgZXRoX3NrYl9wYWQoc2tiKSkge1xuJiM0MztcdFx0LyogUGFkIHNob3J0IGZyYW1lczsgdGhlIE1BQyBkb2VzIG5vdCBhcHBlbmQgRXRoZXJuZXQgcGFkZGluZy4gKi9cbiYjNDM7XHRcdG5kZXYtXHUwMDNlc3RhdHMudHhfZHJvcHBlZCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRuZGV2LVx1MDAzZXN0YXRzLnR4X2Vycm9ycyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRyZXR1cm4gTkVUREVWX1RYX09LO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRkbWFfZGV2ID0gbHAtXHUwMDNldHhfY2hhbi1cdTAwM2VkZXZpY2U7XG4gXHRzZ19sZW4gPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3MgJiM0MzsgMTtcbiBcdGlmIChDSVJDX1NQQUNFKGxwLVx1MDAzZXR4X3JpbmdfaGVhZCwgbHAtXHUwMDNldHhfcmluZ190YWlsLCBUWF9CRF9OVU1fTUFYKSBcdTAwM2M9IDEpIHtcbkBAIC05MzksMTkgJiM0Mzs5ODksMjEgQEAgYXhpZW5ldF9zdGFydF94bWl0X2RtYWVuZ2luZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdFx0Z290byB4bWl0X2Vycm9yX2Ryb3Bfc2tiO1xuIFxuIFx0LyogRmlsbCB1cCBhcHAgZmllbGRzIGZvciBjaGVja3N1bSAqL1xuLVx0aWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xuLVx0XHRpZiAobHAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IFhBRV9GRUFUVVJFX0ZVTExfVFhfQ1NVTSkge1xuLVx0XHRcdC8qIFR4IEZ1bGwgQ2hlY2tzdW0gT2ZmbG9hZCBFbmFibGVkICovXG4tXHRcdFx0YXBwX21ldGFkYXRhWzBdIHw9IDI7XG4tXHRcdH0gZWxzZSBpZiAobHAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IFhBRV9GRUFUVVJFX1BBUlRJQUxfVFhfQ1NVTSkge1xuLVx0XHRcdGNzdW1fc3RhcnRfb2ZmID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTtcbi1cdFx0XHRjc3VtX2luZGV4X29mZiA9IGNzdW1fc3RhcnRfb2ZmICYjNDM7IHNrYi1cdTAwM2Vjc3VtX29mZnNldDtcbi1cdFx0XHQvKiBUeCBQYXJ0aWFsIENoZWNrc3VtIE9mZmxvYWQgRW5hYmxlZCAqL1xuLVx0XHRcdGFwcF9tZXRhZGF0YVswXSB8PSAxO1xuLVx0XHRcdGFwcF9tZXRhZGF0YVsxXSA9IChjc3VtX3N0YXJ0X29mZiBcdTAwM2NcdTAwM2MgMTYpIHwgY3N1bV9pbmRleF9vZmY7XG4mIzQzO1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWRtYV90eF9jc3VtKSB7XG4mIzQzO1x0XHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7XG4mIzQzO1x0XHRcdGlmIChscC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgWEFFX0ZFQVRVUkVfRlVMTF9UWF9DU1VNKSB7XG4mIzQzO1x0XHRcdFx0LyogVHggRnVsbCBDaGVja3N1bSBPZmZsb2FkIEVuYWJsZWQgKi9cbiYjNDM7XHRcdFx0XHRhcHBfbWV0YWRhdGFbMF0gfD0gMjtcbiYjNDM7XHRcdFx0fSBlbHNlIGlmIChscC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgWEFFX0ZFQVRVUkVfUEFSVElBTF9UWF9DU1VNKSB7XG4mIzQzO1x0XHRcdFx0Y3N1bV9zdGFydF9vZmYgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xuJiM0MztcdFx0XHRcdGNzdW1faW5kZXhfb2ZmID0gY3N1bV9zdGFydF9vZmYgJiM0Mzsgc2tiLVx1MDAzZWNzdW1fb2Zmc2V0O1xuJiM0MztcdFx0XHRcdC8qIFR4IFBhcnRpYWwgQ2hlY2tzdW0gT2ZmbG9hZCBFbmFibGVkICovXG4mIzQzO1x0XHRcdFx0YXBwX21ldGFkYXRhWzBdIHw9IDE7XG4mIzQzO1x0XHRcdFx0YXBwX21ldGFkYXRhWzFdID0gKGNzdW1fc3RhcnRfb2ZmIFx1MDAzY1x1MDAzYyAxNikgfCBjc3VtX2luZGV4X29mZjtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fSBlbHNlIGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7XG4mIzQzO1x0XHRcdGFwcF9tZXRhZGF0YVswXSB8PSAyOyAvKiBUeCBGdWxsIENoZWNrc3VtIE9mZmxvYWQgRW5hYmxlZCAqL1xuIFx0XHR9XG4tXHR9IGVsc2UgaWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHtcbi1cdFx0YXBwX21ldGFkYXRhWzBdIHw9IDI7IC8qIFR4IEZ1bGwgQ2hlY2tzdW0gT2ZmbG9hZCBFbmFibGVkICovXG4gXHR9XG4gXG4gXHRkbWFfdHhfZGVzYyA9IGRtYV9kZXYtXHUwMDNlZGV2aWNlX3ByZXBfc2xhdmVfc2cobHAtXHUwMDNldHhfY2hhbiwgc2tidWZfZG1hLVx1MDAzZXNnbCxcbkBAIC0xNjcwLDYgJiM0MzsxNzIyLDEwIEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0YXhpZW5ldF9sb2NrX21paShscCk7XG4gXHRyZXQgPSBheGllbmV0X2RldmljZV9yZXNldChuZGV2KTtcbiBcdGF4aWVuZXRfdW5sb2NrX21paShscCk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihscC1cdTAwM2VkZXYsIFwmIzM0O2F4aWVuZXRfZGV2aWNlX3Jlc2V0KCkgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuIFxuIFx0cmV0ID0gcGh5bGlua19vZl9waHlfY29ubmVjdChscC1cdTAwM2VwaHlsaW5rLCBscC1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZSwgMCk7XG4gXHRpZiAocmV0KSB7XG5AQCAtMTczOCwxMiAmIzQzOzE3OTQsMTcgQEAgc3RhdGljIGludCBheGllbmV0X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmxwLVx1MDAzZXJ4X2RpbS53b3JrKTtcbiBcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZscC1cdTAwM2VzdGF0c193b3JrKTtcbiYjNDM7XHRpZiAobHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlc3RhdHNfdXBkYXRlKSB7XG4mIzQzO1x0XHRtdXRleF9sb2NrKFx1MDAyNmxwLVx1MDAzZXN0YXRzX2xvY2spO1xuJiM0MztcdFx0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlc3RhdHNfdXBkYXRlKGxwKTtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZscC1cdTAwM2VzdGF0c19sb2NrKTtcbiYjNDM7XHR9XG4gXG4gXHRwaHlsaW5rX3N0b3AobHAtXHUwMDNlcGh5bGluayk7XG4gXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KGxwLVx1MDAzZXBoeWxpbmspO1xuIFxuLVx0YXhpZW5ldF9zZXRvcHRpb25zKG5kZXYsIGxwLVx1MDAzZW9wdGlvbnMgXHUwMDI2XG4tXHRcdFx0ICAgfihYQUVfT1BUSU9OX1RYRU4gfCBYQUVfT1BUSU9OX1JYRU4pKTtcbiYjNDM7XHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VzZXRvcHRpb25zKG5kZXYsIGxwLVx1MDAzZW9wdGlvbnMgXHUwMDI2XG4mIzQzO1x0XHRcdFx0ICAgICAgIH4oWEFFX09QVElPTl9UWEVOIHwgWEFFX09QVElPTl9SWEVOKSk7XG4gXG4gXHRpZiAoIWxwLVx1MDAzZXVzZV9kbWFlbmdpbmUpIHtcbiBcdFx0YXhpZW5ldF9kbWFfc3RvcChscCk7XG5AQCAtMTc2OSw3ICYjNDM7MTgzMCw4IEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0fVxuIFxuIFx0bmV0ZGV2X3Jlc2V0X3F1ZXVlKG5kZXYpO1xuLVx0YXhpZW5ldF9pb3cobHAsIFhBRV9JRV9PRkZTRVQsIDApO1xuJiM0MztcdGlmIChscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VtYWNfaXJxKVxuJiM0MztcdFx0YXhpZW5ldF9pb3cobHAsIFhBRV9JRV9PRkZTRVQsIDApO1xuIFxuIFx0aWYgKGxwLVx1MDAzZWV0aF9pcnEgXHUwMDNlIDApXG4gXHRcdGZyZWVfaXJxKGxwLVx1MDAzZWV0aF9pcnEsIG5kZXYpO1xuQEAgLTE4MzQsMjkgJiM0MzsxODk2LDExIEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKVxuIFx0cmV0dXJuIHBoeWxpbmtfbWlpX2lvY3RsKGxwLVx1MDAzZXBoeWxpbmssIHJxLCBjbWQpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZFxuLWF4aWVuZXRfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cylcbiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF8xZ19nZXRfc3RhdHM2NChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cylcbiB7XG4tXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0dW5zaWduZWQgaW50IHN0YXJ0O1xuIFxuLVx0bmV0ZGV2X3N0YXRzX3RvX3N0YXRzNjQoc3RhdHMsIFx1MDAyNmRldi1cdTAwM2VzdGF0cyk7XG4tXG4tXHRkbyB7XG4tXHRcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFx1MDAyNmxwLVx1MDAzZXJ4X3N0YXRfc3luYyk7XG4tXHRcdHN0YXRzLVx1MDAzZXJ4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZscC1cdTAwM2VyeF9wYWNrZXRzKTtcbi1cdFx0c3RhdHMtXHUwMDNlcnhfYnl0ZXMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZscC1cdTAwM2VyeF9ieXRlcyk7XG4tXHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXHUwMDI2bHAtXHUwMDNlcnhfc3RhdF9zeW5jLCBzdGFydCkpO1xuLVxuLVx0ZG8ge1xuLVx0XHRzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihcdTAwMjZscC1cdTAwM2V0eF9zdGF0X3N5bmMpO1xuLVx0XHRzdGF0cy1cdTAwM2V0eF9wYWNrZXRzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bHAtXHUwMDNldHhfcGFja2V0cyk7XG4tXHRcdHN0YXRzLVx1MDAzZXR4X2J5dGVzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bHAtXHUwMDNldHhfYnl0ZXMpO1xuLVx0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFx1MDAyNmxwLVx1MDAzZXR4X3N0YXRfc3luYywgc3RhcnQpKTtcbi1cbi1cdGlmICghKGxwLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXG4tXHRcdHJldHVybjtcbi1cbiBcdGRvIHtcbiBcdFx0c3RhcnQgPSByZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcbiBcdFx0c3RhdHMtXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyA9XG5AQCAtMTg4NCw2ICYjNDM7MTkyOCwzMyBAQCBheGllbmV0X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXG4gXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7YXhpZW5ldF9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4mIzQzO1xuJiM0MztcdG5ldGRldl9zdGF0c190b19zdGF0czY0KHN0YXRzLCBcdTAwMjZkZXYtXHUwMDNlc3RhdHMpO1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihcdTAwMjZscC1cdTAwM2VyeF9zdGF0X3N5bmMpO1xuJiM0MztcdFx0c3RhdHMtXHUwMDNlcnhfcGFja2V0cyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNmxwLVx1MDAzZXJ4X3BhY2tldHMpO1xuJiM0MztcdFx0c3RhdHMtXHUwMDNlcnhfYnl0ZXMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZscC1cdTAwM2VyeF9ieXRlcyk7XG4mIzQzO1x0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFx1MDAyNmxwLVx1MDAzZXJ4X3N0YXRfc3luYywgc3RhcnQpKTtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXHUwMDI2bHAtXHUwMDNldHhfc3RhdF9zeW5jKTtcbiYjNDM7XHRcdHN0YXRzLVx1MDAzZXR4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZscC1cdTAwM2V0eF9wYWNrZXRzKTtcbiYjNDM7XHRcdHN0YXRzLVx1MDAzZXR4X2J5dGVzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bHAtXHUwMDNldHhfYnl0ZXMpO1xuJiM0MztcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcdTAwMjZscC1cdTAwM2V0eF9zdGF0X3N5bmMsIHN0YXJ0KSk7XG4mIzQzO1xuJiM0MztcdGlmICghKGxwLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VnZXRfc3RhdHM2NClcbiYjNDM7XHRcdGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWdldF9zdGF0czY0KGxwLCBzdGF0cyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBheGllbmV0X25ldGRldl9vcHMgPSB7XG4gXHQubmRvX29wZW4gPSBheGllbmV0X29wZW4sXG4gXHQubmRvX3N0b3AgPSBheGllbmV0X3N0b3AsXG5AQCAtMTkzOCwzMCAmIzQzOzIwMDksMTggQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiAgKi9cbiBzdGF0aWMgaW50IGF4aWVuZXRfZXRodG9vbHNfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHtcbi1cdHJldHVybiBzaXplb2YodTMyKSAqIEFYSUVORVRfUkVHU19OO1xuJiM0MztcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2l6ZW9mKHUzMikgKiBscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VyZWdzX247XG4gfVxuIFxuIC8qKlxuLSAqIGF4aWVuZXRfZXRodG9vbHNfZ2V0X3JlZ3MgLSBEdW1wIHRoZSBjb250ZW50cyBvZiBhbGwgcmVnaXN0ZXJzIHByZXNlbnRcbi0gKlx0XHRcdCAgICAgICBpbiBBeGlFdGhlcm5ldCBjb3JlLlxuLSAqIEBuZGV2Olx0UG9pbnRlciB0byBuZXRfZGV2aWNlIHN0cnVjdHVyZVxuLSAqIEByZWdzOlx0UG9pbnRlciB0byBldGh0b29sX3JlZ3Mgc3RydWN0dXJlXG4tICogQHJldDpcdFZvaWQgcG9pbnRlciB1c2VkIHRvIHJldHVybiB0aGUgY29udGVudHMgb2YgdGhlIHJlZ2lzdGVycy5cbi0gKlxuLSAqIFRoaXMgaW1wbGVtZW50cyBldGh0b29sIGNvbW1hbmQgZm9yIGdldHRpbmcgdGhlIEF4aSBFdGhlcm5ldCByZWdpc3RlciBkdW1wLlxuLSAqIElzc3VlIFwmIzM0O2V0aHRvb2wgLWQgZXRoWFwmIzM0OyB0byBleGVjdXRlIHRoaXMgZnVuY3Rpb24uXG4mIzQzOyAqIGF4aWVuZXRfMWdfZ2V0X3JlZ3MgLSBEdW1wIDFHIE1BQyByZWdpc3RlcnMgZm9yIGV0aHRvb2xcbiYjNDM7ICogQGxwOlx0XHRQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuJiM0MzsgKiBAZGF0YTpcdEJ1ZmZlciBmb3IgcmVnaXN0ZXIgdmFsdWVzICh6ZXJvZWQgYW5kIHNpemVkIGJ5IHRoZSBjYWxsZXIpXG4gICovXG4tc3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbi1cdFx0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsIHZvaWQgKnJldClcbiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF8xZ19nZXRfcmVncyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsIHUzMiAqZGF0YSlcbiB7XG4tXHR1MzIgKmRhdGEgPSAodTMyICopcmV0O1xuLVx0c2l6ZV90IGxlbiA9IHNpemVvZih1MzIpICogQVhJRU5FVF9SRUdTX047XG4tXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cbi1cdHJlZ3MtXHUwMDNldmVyc2lvbiA9IDA7XG4tXHRyZWdzLVx1MDAzZWxlbiA9IGxlbjtcbi1cbi1cdG1lbXNldChkYXRhLCAwLCBsZW4pO1xuIFx0ZGF0YVswXSA9IGF4aWVuZXRfaW9yKGxwLCBYQUVfUkFGX09GRlNFVCk7XG4gXHRkYXRhWzFdID0gYXhpZW5ldF9pb3IobHAsIFhBRV9UUEZfT0ZGU0VUKTtcbiBcdGRhdGFbMl0gPSBheGllbmV0X2lvcihscCwgWEFFX0lGR1BfT0ZGU0VUKTtcbkBAIC0yMDAyLDYgJiM0MzsyMDYxLDMxIEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfZXRodG9vbHNfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHR9XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogYXhpZW5ldF9ldGh0b29sc19nZXRfcmVncyAtIER1bXAgdGhlIGNvbnRlbnRzIG9mIGFsbCByZWdpc3RlcnMgcHJlc2VudFxuJiM0MzsgKlx0XHRcdCAgICAgICBpbiBBeGlFdGhlcm5ldCBjb3JlLlxuJiM0MzsgKiBAbmRldjpcdFBvaW50ZXIgdG8gbmV0X2RldmljZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQHJlZ3M6XHRQb2ludGVyIHRvIGV0aHRvb2xfcmVncyBzdHJ1Y3R1cmVcbiYjNDM7ICogQHJldDpcdFZvaWQgcG9pbnRlciB1c2VkIHRvIHJldHVybiB0aGUgY29udGVudHMgb2YgdGhlIHJlZ2lzdGVycy5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBpbXBsZW1lbnRzIGV0aHRvb2wgY29tbWFuZCBmb3IgZ2V0dGluZyB0aGUgQXhpIEV0aGVybmV0IHJlZ2lzdGVyIGR1bXAuXG4mIzQzOyAqIElzc3VlIFwmIzM0O2V0aHRvb2wgLWQgZXRoWFwmIzM0OyB0byBleGVjdXRlIHRoaXMgZnVuY3Rpb24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBheGllbmV0X2V0aHRvb2xzX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsIHZvaWQgKnJldClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdHUzMiAqZGF0YSA9ICh1MzIgKilyZXQ7XG4mIzQzO1x0c2l6ZV90IGxlbjtcbiYjNDM7XG4mIzQzO1x0bGVuID0gc2l6ZW9mKHUzMikgKiBscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VyZWdzX247XG4mIzQzO1x0cmVncy1cdTAwM2V2ZXJzaW9uID0gMDtcbiYjNDM7XHRyZWdzLVx1MDAzZWxlbiA9IGxlbjtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KGRhdGEsIDAsIGxlbik7XG4mIzQzO1x0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X3JlZ3MobHAsIGRhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkXG4gYXhpZW5ldF9ldGh0b29sc19nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyaW5nLFxuQEAgLTIzMDMsMTEgJiM0MzsyMzg3LDggQEAgc3RhdGljIGludCBheGllbmV0X2V0aHRvb2xzX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldChscC1cdTAwM2VwaHlsaW5rKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLVx0XHRcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLFxuLVx0XHRcdFx0XHQgICAgICAgdTY0ICpkYXRhKVxuJiM0MztzdGF0aWMgdm9pZCBheGllbmV0XzFnX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwgdTY0ICpkYXRhKVxuIHtcbi1cdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7XG4gXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4gXG4gXHRkbyB7XG5AQCAtMjMyNCw2ICYjNDM7MjQwNSwxNyBAQCBzdGF0aWMgdm9pZCBheGllbmV0X2V0aHRvb2xzX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBldGh0b29sX3N0YXRzICpzdGF0cyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICB1NjQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAobHAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IFhBRV9GRUFUVVJFX1NUQVRTIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VnZXRfZXRodG9vbF9zdGF0cylcbiYjNDM7XHRcdGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWdldF9ldGh0b29sX3N0YXRzKGxwLCBkYXRhKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3QgY2hhciBheGllbmV0X2V0aHRvb2xfc3RhdHNfc3RyaW5nc1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7XG4gXHRcJiMzNDtSZWNlaXZlZCBieXRlc1wmIzM0OyxcbiBcdFwmIzM0O1RyYW5zbWl0dGVkIGJ5dGVzXCYjMzQ7LFxuQEAgLTIzMzYsMTIgJiM0MzsyNDI4LDI2IEBAIHN0YXRpYyBjb25zdCBjaGFyIGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHtcbiBcdFwmIzM0O1VzZXIgRGVmaW5lZCBDb3VudGVyIDJcJiMzNDssXG4gfTtcbiBcbiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF8xZ19nZXRfc3RyaW5ncyh1OCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdG1lbWNweShkYXRhLCBheGllbmV0X2V0aHRvb2xfc3RhdHNfc3RyaW5ncyxcbiYjNDM7XHQgICAgICAgc2l6ZW9mKGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYXhpZW5ldF8xZ19nZXRfc3NldF9jb3VudCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIEFSUkFZX1NJWkUoYXhpZW5ldF9ldGh0b29sX3N0YXRzX3N0cmluZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGF4aWVuZXRfZXRodG9vbHNfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0cmluZ3NldCwgdTggKmRhdGEpXG4ge1xuJiM0MztcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1xuIFx0c3dpdGNoIChzdHJpbmdzZXQpIHtcbiBcdGNhc2UgRVRIX1NTX1NUQVRTOlxuLVx0XHRtZW1jcHkoZGF0YSwgYXhpZW5ldF9ldGh0b29sX3N0YXRzX3N0cmluZ3MsXG4tXHRcdCAgICAgICBzaXplb2YoYXhpZW5ldF9ldGh0b29sX3N0YXRzX3N0cmluZ3MpKTtcbiYjNDM7XHRcdGlmIChscC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgWEFFX0ZFQVRVUkVfU1RBVFMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgbHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X3N0cmluZ3MpXG4mIzQzO1x0XHRcdGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWdldF9zdHJpbmdzKGRhdGEpO1xuIFx0XHRicmVhaztcbiBcdH1cbiB9XG5AQCAtMjM1MiwyNCAmIzQzOzI0NTgsMjAgQEAgc3RhdGljIGludCBheGllbmV0X2V0aHRvb2xzX2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzc2V0KVxuIFxuIFx0c3dpdGNoIChzc2V0KSB7XG4gXHRjYXNlIEVUSF9TU19TVEFUUzpcbi1cdFx0aWYgKGxwLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUylcbi1cdFx0XHRyZXR1cm4gQVJSQVlfU0laRShheGllbmV0X2V0aHRvb2xfc3RhdHNfc3RyaW5ncyk7XG4mIzQzO1x0XHRpZiAobHAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IFhBRV9GRUFUVVJFX1NUQVRTIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWdldF9zc2V0X2NvdW50KVxuJiM0MztcdFx0XHRyZXR1cm4gbHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X3NzZXRfY291bnQoKTtcbiBcdFx0ZmFsbHRocm91Z2g7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gfVxuIFxuLXN0YXRpYyB2b2lkXG4tYXhpZW5ldF9ldGh0b29sc19nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHRcdCBzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcGF1c2Vfc3RhdHMpXG4mIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKVxuIHtcbi1cdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7XG4gXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4gXG4tXHRpZiAoIShscC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgWEFFX0ZFQVRVUkVfU1RBVFMpKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRkbyB7XG4gXHRcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4gXHRcdHBhdXNlX3N0YXRzLVx1MDAzZXR4X3BhdXNlX2ZyYW1lcyA9XG5AQCAtMjM4MCwxNSAmIzQzOzI0ODIsMjMgQEAgYXhpZW5ldF9ldGh0b29sc19nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiB9XG4gXG4gc3RhdGljIHZvaWRcbi1heGllbmV0X2V0aHRvb2xfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHRcdCAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKVxuJiM0MztheGllbmV0X2V0aHRvb2xzX2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcGF1c2Vfc3RhdHMpXG4ge1xuIFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdHVuc2lnbmVkIGludCBzdGFydDtcbiBcbiBcdGlmICghKGxwLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRpZiAobHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X3BhdXNlX3N0YXRzKVxuJiM0MztcdFx0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X3BhdXNlX3N0YXRzKGxwLCBwYXVzZV9zdGF0cyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBzdGFydDtcbiYjNDM7XG4gXHRkbyB7XG4gXHRcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4gXHRcdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNUcmFuc21pdHRlZE9LID1cbkBAIC0yNDI1LDE1ICYjNDM7MjUzNSwyNCBAQCBheGllbmV0X2V0aHRvb2xfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiB9XG4gXG4gc3RhdGljIHZvaWRcbi1heGllbmV0X2V0aHRvb2xfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tXHRcdFx0XHQgICBzdHJ1Y3QgZXRodG9vbF9ldGhfY3RybF9zdGF0cyAqY3RybF9zdGF0cylcbiYjNDM7YXhpZW5ldF9ldGh0b29sX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpXG4ge1xuIFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdHVuc2lnbmVkIGludCBzdGFydDtcbiBcbiBcdGlmICghKGxwLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRpZiAobHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X2V0aF9tYWNfc3RhdHMpXG4mIzQzO1x0XHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VnZXRfZXRoX21hY19zdGF0cyhscCwgbWFjX3N0YXRzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7YXhpZW5ldF8xZ19nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfY3RybF9zdGF0cyAqY3RybF9zdGF0cylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBzdGFydDtcbiYjNDM7XG4gXHRkbyB7XG4gXHRcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4gXHRcdGN0cmxfc3RhdHMtXHUwMDNlTUFDQ29udHJvbEZyYW1lc1RyYW5zbWl0dGVkID1cbkBAIC0yNDQ1LDcgJiM0MzsyNTY0LDIwIEBAIGF4aWVuZXRfZXRodG9vbF9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdH0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2bHAtXHUwMDNlaHdfc3RhdHNfc2VxY291bnQsIHN0YXJ0KSk7XG4gfVxuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgYXhpZW5ldF9ybW9uX3Jhbmdlc1tdID0ge1xuJiM0MztzdGF0aWMgdm9pZFxuJiM0MztheGllbmV0X2V0aHRvb2xfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IGV0aHRvb2xfZXRoX2N0cmxfc3RhdHMgKmN0cmxfc3RhdHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoIShscC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgWEFFX0ZFQVRVUkVfU1RBVFMpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAobHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X2V0aF9jdHJsX3N0YXRzKVxuJiM0MztcdFx0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X2V0aF9jdHJsX3N0YXRzKGxwLCBjdHJsX3N0YXRzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIGF4aWVuZXRfcm1vbl9yYW5nZXNbXSA9IHtcbiBcdHsgICA2NCwgICAgNjQgfSxcbiBcdHsgICA2NSwgICAxMjcgfSxcbiBcdHsgIDEyOCwgICAyNTUgfSxcbkBAIC0yNDU3LDE2ICYjNDM7MjU4OSwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIGF4aWVuZXRfcm1vbl9yYW5nZXNbXSA9IHtcbiB9O1xuIFxuIHN0YXRpYyB2b2lkXG4tYXhpZW5ldF9ldGh0b29sX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tXHRcdFx0ICAgICAgIHN0cnVjdCBldGh0b29sX3Jtb25fc3RhdHMgKnJtb25fc3RhdHMsXG4tXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSAqKnJhbmdlcylcbiYjNDM7YXhpZW5ldF8xZ19nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXG4mIzQzO1x0XHRcdCAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcbiYjNDM7XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpXG4ge1xuLVx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHVuc2lnbmVkIGludCBzdGFydDtcbiBcbi1cdGlmICghKGxwLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXG4tXHRcdHJldHVybjtcbi1cbiBcdGRvIHtcbiBcdFx0c3RhcnQgPSByZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcbiBcdFx0cm1vbl9zdGF0cy1cdTAwM2V1bmRlcnNpemVfcGt0cyA9XG5AQCAtMjUxMCw2ICYjNDM7MjYzOCwyMCBAQCBheGllbmV0X2V0aHRvb2xfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdCpyYW5nZXMgPSBheGllbmV0X3Jtb25fcmFuZ2VzO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7YXhpZW5ldF9ldGh0b29sX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxuJiM0MztcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlICoqcmFuZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCEobHAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IFhBRV9GRUFUVVJFX1NUQVRTKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWdldF9ybW9uX3N0YXRzKVxuJiM0MztcdFx0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X3Jtb25fc3RhdHMobHAsIHJtb25fc3RhdHMsIHJhbmdlcyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBheGllbmV0X2V0aHRvb2xfb3BzID0ge1xuIFx0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgPSBFVEhUT09MX0NPQUxFU0NFX01BWF9GUkFNRVMgfFxuIFx0XHRcdFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX1VTRUNTIHxcbkBAIC0yNTU1LDExICYjNDM7MjY5Nyw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXhpZW5ldF9ldGh0b29sX2RtYWVuZ2luZV9vcHMgPSB7XG4gXHQuZ2V0X3Jtb25fc3RhdHMgPSBheGllbmV0X2V0aHRvb2xfZ2V0X3Jtb25fc3RhdHMsXG4gfTtcbiBcbi1zdGF0aWMgc3RydWN0IGF4aWVuZXRfbG9jYWwgKnBjc190b19heGllbmV0X2xvY2FsKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxuLXtcbi1cdHJldHVybiBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCwgcGNzKTtcbi19XG4tXG4gc3RhdGljIHZvaWQgYXhpZW5ldF9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgbmVnX21vZGUsXG4gXHRcdFx0XHQgIHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuQEAgLTI2MTksNyAmIzQzOzI3NTYsOSBAQCBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpheGllbmV0X21hY19zZWxlY3RfcGNzKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuIFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXG4gXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHxcbi1cdCAgICBpbnRlcmZhY2UgPT0gIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSlcbiYjNDM7XHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSB8fFxuJiM0MztcdCAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSIHx8XG4mIzQzO1x0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMjVHQkFTRVIpXG4gXHRcdHJldHVybiBcdTAwMjZscC1cdTAwM2VwY3M7XG4gXG4gXHRyZXR1cm4gTlVMTDtcbkBAIC0yNjM4LDEzICYjNDM7Mjc3Nyw5IEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcdC8qIG5vdGhpbmcgbWVhbmluZ2Z1bCB0byBkbyAqL1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBheGllbmV0X21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuLVx0XHRcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbi1cdFx0XHRcdHVuc2lnbmVkIGludCBtb2RlLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxuLVx0XHRcdFx0aW50IHNwZWVkLCBpbnQgZHVwbGV4LFxuLVx0XHRcdFx0Ym9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSlcbiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF8xZ19tYWNfbGlua191cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IHNwZWVkLFxuJiM0MztcdFx0XHRcdCAgIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSB0b19uZXRfZGV2KGNvbmZpZy1cdTAwM2VkZXYpO1xuIFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHR1MzIgZW1tY19yZWcsIGZjY19yZWc7XG4gXG5AQCAtMjY4MSw2ICYjNDM7MjgxNiwxOSBAQCBzdGF0aWMgdm9pZCBheGllbmV0X21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuIFx0YXhpZW5ldF9pb3cobHAsIFhBRV9GQ0NfT0ZGU0VULCBmY2NfcmVnKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4mIzQzO1x0XHRcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbiYjNDM7XHRcdFx0XHR1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcbiYjNDM7XHRcdFx0XHRpbnQgc3BlZWQsIGludCBkdXBsZXgsXG4mIzQzO1x0XHRcdFx0Ym9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gdG9fbmV0X2Rldihjb25maWctXHUwMDNlZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZW1hY19saW5rX3VwKVxuJiM0MztcdFx0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlbWFjX2xpbmtfdXAobmRldiwgc3BlZWQsIHR4X3BhdXNlLCByeF9wYXVzZSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgYXhpZW5ldF9waHlsaW5rX29wcyA9IHtcbiBcdC5tYWNfc2VsZWN0X3BjcyA9IGF4aWVuZXRfbWFjX3NlbGVjdF9wY3MsXG4gXHQubWFjX2NvbmZpZyA9IGF4aWVuZXRfbWFjX2NvbmZpZyxcbkBAIC0yNjk4LDcgJiM0MzsyODQ2LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgYXhpZW5ldF9waHlsaW5rX29wcyA9IHtcbiBzdGF0aWMgdm9pZCBheGllbmV0X2RtYV9lcnJfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0dTMyIGk7XG4tXHR1MzIgYXhpZW5ldF9zdGF0dXM7XG4gXHRzdHJ1Y3QgYXhpZG1hX2JkICpjdXJfcDtcbiBcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCxcbiBcdFx0XHRcdFx0XHRkbWFfZXJyX3Rhc2spO1xuQEAgLTI3MTEsOCAmIzQzOzI4NTgsOCBAQCBzdGF0aWMgdm9pZCBheGllbmV0X2RtYV9lcnJfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRuYXBpX2Rpc2FibGUoXHUwMDI2bHAtXHUwMDNlbmFwaV90eCk7XG4gXHRuYXBpX2Rpc2FibGUoXHUwMDI2bHAtXHUwMDNlbmFwaV9yeCk7XG4gXG4tXHRheGllbmV0X3NldG9wdGlvbnMobmRldiwgbHAtXHUwMDNlb3B0aW9ucyBcdTAwMjZcbi1cdFx0XHQgICB+KFhBRV9PUFRJT05fVFhFTiB8IFhBRV9PUFRJT05fUlhFTikpO1xuJiM0MztcdGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZXNldG9wdGlvbnMobmRldiwgbHAtXHUwMDNlb3B0aW9ucyBcdTAwMjZcbiYjNDM7XHRcdFx0XHQgICAgICAgfihYQUVfT1BUSU9OX1RYRU4gfCBYQUVfT1BUSU9OX1JYRU4pKTtcbiBcbiBcdGF4aWVuZXRfZG1hX3N0b3AobHApO1xuIFx0bmV0ZGV2X3Jlc2V0X3F1ZXVlKG5kZXYpO1xuQEAgLTI3NTcsMjkgJiM0MzsyOTA0LDEyNiBAQCBzdGF0aWMgdm9pZCBheGllbmV0X2RtYV9lcnJfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXG4gXHRheGllbmV0X2RtYV9zdGFydChscCk7XG4gXG4tXHRheGllbmV0X3N0YXR1cyA9IGF4aWVuZXRfaW9yKGxwLCBYQUVfUkNXMV9PRkZTRVQpO1xuLVx0YXhpZW5ldF9zdGF0dXMgXHUwMDI2PSB+WEFFX1JDVzFfUlhfTUFTSztcbi1cdGF4aWVuZXRfaW93KGxwLCBYQUVfUkNXMV9PRkZTRVQsIGF4aWVuZXRfc3RhdHVzKTtcbi1cbi1cdGF4aWVuZXRfc3RhdHVzID0gYXhpZW5ldF9pb3IobHAsIFhBRV9JUF9PRkZTRVQpO1xuLVx0aWYgKGF4aWVuZXRfc3RhdHVzIFx1MDAyNiBYQUVfSU5UX1JYUkpFQ1RfTUFTSylcbi1cdFx0YXhpZW5ldF9pb3cobHAsIFhBRV9JU19PRkZTRVQsIFhBRV9JTlRfUlhSSkVDVF9NQVNLKTtcbi1cdGF4aWVuZXRfaW93KGxwLCBYQUVfSUVfT0ZGU0VULCBscC1cdTAwM2VldGhfaXJxIFx1MDAzZSAwID9cbi1cdFx0ICAgIFhBRV9JTlRfUkVDVl9FUlJPUl9NQVNLIDogMCk7XG4tXHRheGllbmV0X2lvdyhscCwgWEFFX0ZDQ19PRkZTRVQsIFhBRV9GQ0NfRkNSWF9NQVNLKTtcbiYjNDM7XHQvKiBUaGlzIGVycm9yIGhhbmRsZXIgcnVucyBvbmx5IGZvciB0aGUgbGVnYWN5IGVtYmVkZGVkLURNQSAoMUcpIHBhdGgsXG4mIzQzO1x0ICogd2hvc2UgbWFjX2luaXQoKSBjYW5ub3QgZmFpbCwgc28gaXRzIHJldHVybiB2YWx1ZSBpcyBub3QgY2hlY2tlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VtYWNfaW5pdChuZGV2KTtcbiBcbiBcdC8qIFN5bmMgZGVmYXVsdCBvcHRpb25zIHdpdGggSFcgYnV0IGxlYXZlIHJlY2VpdmVyIGFuZFxuIFx0ICogdHJhbnNtaXR0ZXIgZGlzYWJsZWQuXG4gXHQgKi9cbi1cdGF4aWVuZXRfc2V0b3B0aW9ucyhuZGV2LCBscC1cdTAwM2VvcHRpb25zIFx1MDAyNlxuLVx0XHRcdCAgIH4oWEFFX09QVElPTl9UWEVOIHwgWEFFX09QVElPTl9SWEVOKSk7XG4mIzQzO1x0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlc2V0b3B0aW9ucyhuZGV2LCBscC1cdTAwM2VvcHRpb25zIFx1MDAyNlxuJiM0MztcdFx0XHRcdCAgICAgICB+KFhBRV9PUFRJT05fVFhFTiB8IFhBRV9PUFRJT05fUlhFTikpO1xuIFx0YXhpZW5ldF9zZXRfbWFjX2FkZHJlc3MobmRldiwgTlVMTCk7XG4gXHRheGllbmV0X3NldF9tdWx0aWNhc3RfbGlzdChuZGV2KTtcbiBcdG5hcGlfZW5hYmxlKFx1MDAyNmxwLVx1MDAzZW5hcGlfcngpO1xuIFx0bmFwaV9lbmFibGUoXHUwMDI2bHAtXHUwMDNlbmFwaV90eCk7XG4tXHRheGllbmV0X3NldG9wdGlvbnMobmRldiwgbHAtXHUwMDNlb3B0aW9ucyk7XG4mIzQzO1x0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlc2V0b3B0aW9ucyhuZGV2LCBscC1cdTAwM2VvcHRpb25zKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGF4aWVuZXRfMWdfcGh5bGlua19zZXRfY2FwcyAtIFNldCAxRyBwaHlsaW5rIGNhcGFiaWxpdGllcyBhbmQgaW50ZXJmYWNlc1xuJiM0MzsgKiBAbHA6XHRcdFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlXG4mIzQzOyAqIEBjb25maWc6XHRQb2ludGVyIHRvIHRoZSBwaHlsaW5rX2NvbmZpZyBzdHJ1Y3R1cmVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfcGh5bGlua19zZXRfY2FwcyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZylcbiYjNDM7e1xuJiM0MztcdGNvbmZpZy1cdTAwM2VtYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMEZEIHwgTUFDXzEwMEZEIHwgTUFDXzEwMDBGRDtcbiYjNDM7XHRfX3NldF9iaXQobHAtXHUwMDNlcGh5X21vZGUsIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4mIzQzO1x0aWYgKGxwLVx1MDAzZXN3aXRjaF94X3NnbWlpKSB7XG4mIzQzO1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCxcbiYjNDM7XHRcdFx0ICBjb25maWctXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSxcbiYjNDM7XHRcdFx0ICBjb25maWctXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGF4aWVuZXRfMWdfY2xrX2luaXQgLSBHZXQgYW5kIGVuYWJsZSB0aGUgMUcgTUFDIGNsb2Nrc1xuJiM0MzsgKiBAbHA6XHRcdFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYXhpZW5ldF8xZ19jbGtfaW5pdChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBscC1cdTAwM2VkZXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bHAtXHUwMDNlYXhpX2NsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbF9lbmFibGVkKGRldiwgXCYjMzQ7c19heGlfbGl0ZV9jbGtcJiMzNDspO1xuJiM0MztcdGlmICghbHAtXHUwMDNlYXhpX2Nsaykge1xuJiM0MztcdFx0LyogRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGlmIG5hbWVkIEFYSSBjbG9jayBpcyBub3RcbiYjNDM7XHRcdCAqIHByZXNlbnQsIHRyZWF0IHRoZSBmaXJzdCBjbG9jayBzcGVjaWZpZWQgYXMgdGhlIEFYSSBjbG9jay5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bHAtXHUwMDNlYXhpX2NsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbF9lbmFibGVkKGRldiwgTlVMTCk7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChJU19FUlIobHAtXHUwMDNlYXhpX2NsaykpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIobHAtXHUwMDNlYXhpX2NsayksXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtjb3VsZCBub3QgZ2V0IEFYSSBjbG9ja1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGxwLVx1MDAzZW1pc2NfY2xrc1swXS5pZCA9IFwmIzM0O2F4aXNfY2xrXCYjMzQ7O1xuJiM0MztcdGxwLVx1MDAzZW1pc2NfY2xrc1sxXS5pZCA9IFwmIzM0O3JlZl9jbGtcJiMzNDs7XG4mIzQzO1x0bHAtXHUwMDNlbWlzY19jbGtzWzJdLmlkID0gXCYjMzQ7bWd0X2Nsa1wmIzM0OztcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9jbGtfYnVsa19nZXRfb3B0aW9uYWxfZW5hYmxlKGRldiwgWEFFX05VTV9NSVNDX0NMT0NLUyxcbiYjNDM7XHRcdFx0XHRcdFx0bHAtXHUwMDNlbWlzY19jbGtzKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtjb3VsZCBub3QgZ2V0L2VuYWJsZSBtaXNjLiBjbG9ja3NcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBheGllbmV0XzFnX3Byb2JlX2luaXQgLSAxRyBNQUMtc3BlY2lmaWMgcHJvYmUtdGltZSBpbml0aWFsaXphdGlvblxuJiM0MzsgKiBAbHA6XHRcdFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBheGllbmV0XzFnX3Byb2JlX2luaXQoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGF4aWVuZXRfaW9yKGxwLCBYQUVfQUJJTElUWV9PRkZTRVQpIFx1MDAyNiBYQUVfQUJJTElUWV9TVEFUUylcbiYjNDM7XHRcdGxwLVx1MDAzZWZlYXR1cmVzIHw9IFhBRV9GRUFUVVJFX1NUQVRTO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGF4aWVuZXRfY29uZmlnIGF4aWVuZXRfMWdfY29uZmlnID0ge1xuJiM0MztcdC5tZGlvID0gdHJ1ZSxcbiYjNDM7XHQubWFjX2lycSA9IHRydWUsXG4mIzQzO1x0LmxlZ2FjeV9kbWEgPSB0cnVlLFxuJiM0MztcdC51Y19maWx0ZXIgPSB0cnVlLFxuJiM0MztcdC5tY19maWx0ZXIgPSB0cnVlLFxuJiM0MztcdC52bGFuID0gdHJ1ZSxcbiYjNDM7XHQuanVtYm8gPSB0cnVlLFxuJiM0MztcdC5kbWFfdHhfY3N1bSA9IHRydWUsXG4mIzQzO1x0LnJlZ3NfbiA9IEFYSUVORVRfUkVHU19OLFxuJiM0MztcdC5jbGtfaW5pdCA9IGF4aWVuZXRfMWdfY2xrX2luaXQsXG4mIzQzO1x0LnNldG9wdGlvbnMgPSBheGllbmV0X3NldG9wdGlvbnMsXG4mIzQzO1x0LnByb2JlX2luaXQgPSBheGllbmV0XzFnX3Byb2JlX2luaXQsXG4mIzQzO1x0Lm1hY19pbml0ID0gYXhpZW5ldF8xZ19tYWNfaW5pdCxcbiYjNDM7XHQubWFjX2xpbmtfdXAgPSBheGllbmV0XzFnX21hY19saW5rX3VwLFxuJiM0MztcdC5nZXRfcmVncyA9IGF4aWVuZXRfMWdfZ2V0X3JlZ3MsXG4mIzQzO1x0LnBoeWxpbmtfc2V0X2NhcHMgPSBheGllbmV0XzFnX3BoeWxpbmtfc2V0X2NhcHMsXG4mIzQzO1x0LnBjc19vcHMgPSBcdTAwMjZheGllbmV0X3Bjc19vcHMsXG4mIzQzO1x0LnN0YXRzX3VwZGF0ZSA9IGF4aWVuZXRfMWdfc3RhdHNfdXBkYXRlLFxuJiM0MztcdC5nZXRfc3RhdHM2NCA9IGF4aWVuZXRfMWdfZ2V0X3N0YXRzNjQsXG4mIzQzO1x0LmdldF9ldGh0b29sX3N0YXRzID0gYXhpZW5ldF8xZ19nZXRfZXRodG9vbF9zdGF0cyxcbiYjNDM7XHQuZ2V0X3N0cmluZ3MgPSBheGllbmV0XzFnX2dldF9zdHJpbmdzLFxuJiM0MztcdC5nZXRfc3NldF9jb3VudCA9IGF4aWVuZXRfMWdfZ2V0X3NzZXRfY291bnQsXG4mIzQzO1x0LmdldF9wYXVzZV9zdGF0cyA9IGF4aWVuZXRfMWdfZ2V0X3BhdXNlX3N0YXRzLFxuJiM0MztcdC5nZXRfZXRoX21hY19zdGF0cyA9IGF4aWVuZXRfMWdfZ2V0X2V0aF9tYWNfc3RhdHMsXG4mIzQzO1x0LmdldF9ldGhfY3RybF9zdGF0cyA9IGF4aWVuZXRfMWdfZ2V0X2V0aF9jdHJsX3N0YXRzLFxuJiM0MztcdC5nZXRfcm1vbl9zdGF0cyA9IGF4aWVuZXRfMWdfZ2V0X3Jtb25fc3RhdHMsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBNYXRjaCB0YWJsZSBmb3Igb2ZfcGxhdGZvcm0gYmluZGluZyAqL1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBheGllbmV0X29mX21hdGNoW10gPSB7XG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3hsbngsYXhpLWV0aGVybmV0LTEuMDAuYVwmIzM0OywgLmRhdGEgPSBcdTAwMjZheGllbmV0XzFnX2NvbmZpZyB9LFxuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDt4bG54LGF4aS1ldGhlcm5ldC0xLjAxLmFcJiMzNDssIC5kYXRhID0gXHUwMDI2YXhpZW5ldF8xZ19jb25maWcgfSxcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7eGxueCxheGktZXRoZXJuZXQtMi4wMS5hXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNmF4aWVuZXRfMWdfY29uZmlnIH0sXG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3hsbngseHh2LWV0aGVybmV0LTEuMFwmIzM0OywgLmRhdGEgPSBcdTAwMjZheGllbmV0XzEwZzI1Z19jb25maWcgfSxcbiYjNDM7XHR7fSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGF4aWVuZXRfb2ZfbWF0Y2gpO1xuJiM0MztcbiAvKipcbiAgKiBheGllbmV0X3Byb2JlIC0gQXhpIEV0aGVybmV0IHByb2JlIGZ1bmN0aW9uLlxuICAqIEBwZGV2Olx0UG9pbnRlciB0byBwbGF0Zm9ybSBkZXZpY2Ugc3RydWN0dXJlLlxuQEAgLTI4MzAsMjcgJiM0MzszMDc0LDEzIEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0c2VxY291bnRfbXV0ZXhfaW5pdChcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCwgXHUwMDI2bHAtXHUwMDNlc3RhdHNfbG9jayk7XG4gXHRJTklUX0RFRkVSUkFCTEVfV09SSyhcdTAwMjZscC1cdTAwM2VzdGF0c193b3JrLCBheGllbmV0X3JlZnJlc2hfc3RhdHMpO1xuIFxuLVx0bHAtXHUwMDNlYXhpX2NsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbF9lbmFibGVkKFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuLVx0XHRcdFx0XHRcdCAgICBcJiMzNDtzX2F4aV9saXRlX2Nsa1wmIzM0Oyk7XG4tXHRpZiAoIWxwLVx1MDAzZWF4aV9jbGspIHtcbi1cdFx0LyogRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGlmIG5hbWVkIEFYSSBjbG9jayBpcyBub3QgcHJlc2VudCxcbi1cdFx0ICogdHJlYXQgdGhlIGZpcnN0IGNsb2NrIHNwZWNpZmllZCBhcyB0aGUgQVhJIGNsb2NrLlxuLVx0XHQgKi9cbi1cdFx0bHAtXHUwMDNlYXhpX2NsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbF9lbmFibGVkKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBOVUxMKTtcbi1cdH1cbi1cdGlmIChJU19FUlIobHAtXHUwMDNlYXhpX2NsaykpXG4tXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBQVFJfRVJSKGxwLVx1MDAzZWF4aV9jbGspLFxuLVx0XHRcdFx0ICAgICBcJiMzNDtjb3VsZCBub3QgZ2V0IEFYSSBjbG9ja1xcblwmIzM0Oyk7XG4mIzQzO1x0bHAtXHUwMDNlYXhpZW5ldF9jb25maWcgPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdGlmICghbHAtXHUwMDNlYXhpZW5ldF9jb25maWcpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbi1cdGxwLVx1MDAzZW1pc2NfY2xrc1swXS5pZCA9IFwmIzM0O2F4aXNfY2xrXCYjMzQ7O1xuLVx0bHAtXHUwMDNlbWlzY19jbGtzWzFdLmlkID0gXCYjMzQ7cmVmX2Nsa1wmIzM0Oztcbi1cdGxwLVx1MDAzZW1pc2NfY2xrc1syXS5pZCA9IFwmIzM0O21ndF9jbGtcJiMzNDs7XG4tXG4tXHRyZXQgPSBkZXZtX2Nsa19idWxrX2dldF9vcHRpb25hbF9lbmFibGUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFhBRV9OVU1fTUlTQ19DTE9DS1MsXG4tXHRcdFx0XHRcdFx0bHAtXHUwMDNlbWlzY19jbGtzKTtcbiYjNDM7XHRyZXQgPSBscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VjbGtfaW5pdChscCk7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcmV0LFxuLVx0XHRcdFx0ICAgICBcJiMzNDtjb3VsZCBub3QgZ2V0L2VuYWJsZSBtaXNjLiBjbG9ja3NcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbiBcdC8qIE1hcCBkZXZpY2UgcmVnaXN0ZXJzICovXG4gXHRscC1cdTAwM2VyZWdzID0gZGV2bV9wbGF0Zm9ybV9nZXRfYW5kX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCwgXHUwMDI2ZXRocmVzKTtcbkBAIC0yODYxLDkgJiM0MzszMDkxLDYgQEAgc3RhdGljIGludCBheGllbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHQvKiBTZXR1cCBjaGVja3N1bSBvZmZsb2FkLCBidXQgZGVmYXVsdCB0byBvZmYgaWYgbm90IHNwZWNpZmllZCAqL1xuIFx0bHAtXHUwMDNlZmVhdHVyZXMgPSAwO1xuIFxuLVx0aWYgKGF4aWVuZXRfaW9yKGxwLCBYQUVfQUJJTElUWV9PRkZTRVQpIFx1MDAyNiBYQUVfQUJJTElUWV9TVEFUUylcbi1cdFx0bHAtXHUwMDNlZmVhdHVyZXMgfD0gWEFFX0ZFQVRVUkVfU1RBVFM7XG4tXG4gXHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwZGV2LVx1MDAzZWRldi5vZl9ub2RlLCBcJiMzNDt4bG54LHR4Y3N1bVwmIzM0OywgXHUwMDI2dmFsdWUpO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0c3dpdGNoICh2YWx1ZSkge1xuQEAgLTI5NDAsNyAmIzQzOzMxNjcsMTcgQEAgc3RhdGljIGludCBheGllbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuJiM0MztcdGlmIChscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2Vwcm9iZV9pbml0KVxuJiM0MztcdFx0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlcHJvYmVfaW5pdChscCk7XG4mIzQzO1xuIFx0aWYgKCFvZl9wcm9wZXJ0eV9wcmVzZW50KHBkZXYtXHUwMDNlZGV2Lm9mX25vZGUsIFwmIzM0O2RtYXNcJiMzNDspKSB7XG4mIzQzO1x0XHQvKiBOb24tZG1hZW5naW5lIChsZWdhY3kgRE1BKSBtb2RlIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IHNvbWUgTUFDcyAqL1xuJiM0MztcdFx0aWYgKCFscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VsZWdhY3lfZG1hKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7TGVnYWN5IERNQSBtb2RlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBNQUMsIHVzZSBkbWFlbmdpbmVcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdC8qIEZpbmQgdGhlIERNQSBub2RlLCBtYXAgdGhlIERNQSByZWdpc3RlcnMsIGFuZCBkZWNvZGUgdGhlIERNQSBJUlFzICovXG4gXHRcdG5wID0gb2ZfcGFyc2VfcGhhbmRsZShwZGV2LVx1MDAzZWRldi5vZl9ub2RlLCBcJiMzNDtheGlzdHJlYW0tY29ubmVjdGVkXCYjMzQ7LCAwKTtcbiBcbkBAIC0zMDIwLDcgJiM0MzszMjU3LDEwIEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0XHRzdHJ1Y3QgeGlsaW54X3ZkbWFfY29uZmlnIGNmZztcbiBcdFx0c3RydWN0IGRtYV9jaGFuICp0eF9jaGFuO1xuIFxuLVx0XHRscC1cdTAwM2VldGhfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbChwZGV2LCAwKTtcbiYjNDM7XHRcdGlmIChscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VtYWNfaXJxKVxuJiM0MztcdFx0XHRscC1cdTAwM2VldGhfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbChwZGV2LCAwKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0bHAtXHUwMDNlZXRoX2lycSA9IC1FTlhJTztcbiBcdFx0aWYgKGxwLVx1MDAzZWV0aF9pcnEgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGxwLVx1MDAzZWV0aF9pcnEgIT0gLUVOWElPKSB7XG4gXHRcdFx0cmV0dXJuIGxwLVx1MDAzZWV0aF9pcnE7XG4gXHRcdH1cbkBAIC0zMDczLDEwICYjNDM7MzMxMywxMiBAQCBzdGF0aWMgaW50IGF4aWVuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdGxwLVx1MDAzZXR4X2RtYV9jciA9IGF4aWVuZXRfY2FsY19jcihscCwgWEFYSURNQV9ERlRfVFhfVEhSRVNIT0xELFxuIFx0XHRcdFx0XHRYQVhJRE1BX0RGVF9UWF9VU0VDKTtcbiBcbi1cdHJldCA9IGF4aWVuZXRfbWRpb19zZXR1cChscCk7XG4tXHRpZiAocmV0KVxuLVx0XHRkZXZfd2FybihcdTAwMjZwZGV2LVx1MDAzZWRldixcbi1cdFx0XHQgXCYjMzQ7ZXJyb3IgcmVnaXN0ZXJpbmcgTURJTyBidXM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdGlmIChscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VtZGlvKSB7XG4mIzQzO1x0XHRyZXQgPSBheGllbmV0X21kaW9fc2V0dXAobHApO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0IFwmIzM0O2Vycm9yIHJlZ2lzdGVyaW5nIE1ESU8gYnVzOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAobHAtXHUwMDNlcGh5X21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJIHx8XG4gXHQgICAgbHAtXHUwMDNlcGh5X21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCkge1xuQEAgLTMxMDAsMjMgJiM0MzszMzQyLDIxIEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0XHRcdGdvdG8gY2xlYW51cF9tZGlvO1xuIFx0XHR9XG4gXHRcdG9mX25vZGVfcHV0KG5wKTtcbi1cdFx0bHAtXHUwMDNlcGNzLm9wcyA9IFx1MDAyNmF4aWVuZXRfcGNzX29wcztcbiYjNDM7XHRcdGxwLVx1MDAzZXBjcy5vcHMgPSBscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VwY3Nfb3BzO1xuJiM0MztcdFx0bHAtXHUwMDNlcGNzLnBvbGwgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWludGVybmFsX3Bjcykge1xuJiM0MztcdFx0bHAtXHUwMDNlcGNzLm9wcyA9IGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZXBjc19vcHM7XG4gXHRcdGxwLVx1MDAzZXBjcy5wb2xsID0gdHJ1ZTtcbiBcdH1cbiBcbiBcdGxwLVx1MDAzZXBoeWxpbmtfY29uZmlnLmRldiA9IFx1MDAyNm5kZXYtXHUwMDNlZGV2O1xuIFx0bHAtXHUwMDNlcGh5bGlua19jb25maWcudHlwZSA9IFBIWUxJTktfTkVUREVWO1xuIFx0bHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX21hbmFnZWRfcG0gPSB0cnVlO1xuLVx0bHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyA9IE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRSB8XG4tXHRcdE1BQ18xMEZEIHwgTUFDXzEwMEZEIHwgTUFDXzEwMDBGRDtcbiYjNDM7XHRscC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzID0gTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFO1xuIFxuLVx0X19zZXRfYml0KGxwLVx1MDAzZXBoeV9tb2RlLCBscC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4tXHRpZiAobHAtXHUwMDNlc3dpdGNoX3hfc2dtaWkpIHtcbi1cdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgsXG4tXHRcdFx0ICBscC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4tXHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfU0dNSUksXG4tXHRcdFx0ICBscC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4tXHR9XG4mIzQzO1x0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlcGh5bGlua19zZXRfY2FwcyhscCwgXHUwMDI2bHAtXHUwMDNlcGh5bGlua19jb25maWcpO1xuIFxuIFx0bHAtXHUwMDNlcGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFx1MDAyNmxwLVx1MDAzZXBoeWxpbmtfY29uZmlnLCBwZGV2LVx1MDAzZWRldi5md25vZGUsXG4gXHRcdFx0XHQgICAgIGxwLVx1MDAzZXBoeV9tb2RlLFxuQEAgLTMxNTksNyAmIzQzOzMzOTksOCBAQCBzdGF0aWMgdm9pZCBheGllbmV0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0aWYgKGxwLVx1MDAzZXBjc19waHkpXG4gXHRcdHB1dF9kZXZpY2UoXHUwMDI2bHAtXHUwMDNlcGNzX3BoeS1cdTAwM2VkZXYpO1xuIFxuLVx0YXhpZW5ldF9tZGlvX3RlYXJkb3duKGxwKTtcbiYjNDM7XHRpZiAobHAtXHUwMDNlbWlpX2J1cylcbiYjNDM7XHRcdGF4aWVuZXRfbWRpb190ZWFyZG93bihscCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGF4aWVuZXRfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfeHh2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfeHh2LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kYmM5YzIxYjEwNGFmXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfeHh2LmNcbkBAIC0wLDAgJiM0MzsxLDU5NSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIFhYViAoMTBHLzI1Rykgc3VwcG9ydFxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5bGluay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4aWxpbnhfYXhpZW5ldC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hpbGlueF9heGllbmV0X3h4di5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKiByZWFkbF9wb2xsX3RpbWVvdXQoKSBzbGVlcCBpbnRlcnZhbCAodXMpIGFuZCAxIG1zIHRvdGFsIHRpbWVvdXQgZm9yIEdUXG4mIzQzOyAqIHJlc2V0LWRvbmUgYW5kIFBDUyBibG9jay1sb2NrIHBvbGxzLiBWYWx1ZXMgZnJvbSBaeW5xTVAvVmVyc2FsIGJyaW5nLXVwO1xuJiM0MzsgKiBQRzIxMCBkb2VzIG5vdCBzcGVjaWZ5IHRoZXNlIGJvdW5kcy5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgWFhWX0xJTktfUE9MTF9JTlRFUlZBTF9VU1x0MTBcbiYjNDM7XG4mIzQzOy8qIE51bWJlciBvZiBYWFYgKDEwRy8yNUcpIE1BQyByZWdpc3RlcnMgZXhwb3NlZCB2aWEgZXRodG9vbCAtZC5cbiYjNDM7ICogQ292ZXJzIGNvbmZpZ3VyYXRpb24gYW5kIHN0YXR1cyByZWdpc3RlcnMgcGVyIFhpbGlueCBQRzIxMC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBjb25zdCB1MzIgYXhpZW5ldF94eHZfcmVnX2R1bXBfb2Zmc2V0c1tYWFZfUkVHU19OXSA9IHtcbiYjNDM7XHRYWFZfR1RfUkVTRVRfT0ZGU0VULFxuJiM0MztcdFhYVl9SRVNFVF9PRkZTRVQsXG4mIzQzO1x0WFhWX01PREVfT0ZGU0VULFxuJiM0MztcdFhYVl9UQ19PRkZTRVQsXG4mIzQzO1x0WFhWX1JDVzFfT0ZGU0VULFxuJiM0MztcdFhYVl9KVU1fT0ZGU0VULFxuJiM0MztcdFhYVl9WTF9MRU5HVEhfT0ZGU0VULFxuJiM0MztcdFhYVl9USUNLUkVHX09GRlNFVCxcbiYjNDM7XHRYWFZfQ09ORklHX1JFVklTSU9OLFxuJiM0MztcdFhYVl9DT05GSUdfMTU4OF9PRkZTRVQsXG4mIzQzO1x0WFhWX0NPTkZJR19UWF9GTE9XX0NUUkwxX09GRlNFVCxcbiYjNDM7XHRYWFZfQ09ORklHX1JYX0ZMT1dfQ1RSTDFfT0ZGU0VULFxuJiM0MztcdFhYVl9DT05GSUdfUlhfRkxPV19DVFJMMl9PRkZTRVQsXG4mIzQzO1x0WFhWX0NPTkZJR19SU0ZFQ19PRkZTRVQsXG4mIzQzO1x0WFhWX0NPTkZJR19GRUNfT0ZGU0VULFxuJiM0MztcdFhYVl9BTl9DVEwxX09GRlNFVCxcbiYjNDM7XHRYWFZfQU5fQ1RMMl9PRkZTRVQsXG4mIzQzO1x0WFhWX0FOX0FCSUxJVFlfT0ZGU0VULFxuJiM0MztcdFhYVl9MVF9DVEwxX09GRlNFVCxcbiYjNDM7XHRYWFZfU1dJVENIX0NPUkVfU1BFRURfT0ZGU0VULFxuJiM0MztcdFhYVl9DT05GSUdfMTU4OF8zMkJJVF9PRkZTRVQsXG4mIzQzO1x0WFhWX1RYX0NPTkZJR18xNTg4X09GRlNFVCxcbiYjNDM7XHRYWFZfUlhfQ09ORklHXzE1ODhfT0ZGU0VULFxuJiM0MztcdFhYVl9HVFdJWl9DVFJMX09GRlNFVCxcbiYjNDM7XHRYWFZfU1RBVFJYX1NUQVRVUzBfT0ZGU0VULFxuJiM0MztcdFhYVl9SWF9TVEFUVVNfUkVHMSxcbiYjNDM7XHRYWFZfU1RBVFJYX1NUQVRVUzJfT0ZGU0VULFxuJiM0MztcdFhYVl9TVEFUUlhfQkxLTENLX09GRlNFVCxcbiYjNDM7XHRYWFZfU1RBVF9SWF9SU0ZFQ19TVEFUVVNfT0ZGU0VULFxuJiM0MztcdFhYVl9TVEFUX1JYX0ZFQ19TVEFUVVNfT0ZGU0VULFxuJiM0MztcdFhYVl9TVEFUX1RYX1JTRkVDX1NUQVRVU19PRkZTRVQsXG4mIzQzO1x0WFhWX1NUQVRfVFhfRkxPV19DVFJMMV9PRkZTRVQsXG4mIzQzO1x0WFhWX1NUQVRfUlhfRkxPV19DVFJMMV9PRkZTRVQsXG4mIzQzO1x0WFhWX1NUQVRfQU5fU1RTX09GRlNFVCxcbiYjNDM7XHRYWFZfU1RBVF9BTl9MUF9TVEFUVVNfT0ZGU0VULFxuJiM0MztcdFhYVl9TVEFUX0FOX0xJTktfQ1RMX09GRlNFVCxcbiYjNDM7XHRYWFZfU1RBVF9MVF9TVEFUVVMxX09GRlNFVCxcbiYjNDM7XHRYWFZfU1RBVF9MVF9TVEFUVVMyX09GRlNFVCxcbiYjNDM7XHRYWFZfU1RBVF9MVF9TVEFUVVMzX09GRlNFVCxcbiYjNDM7XHRYWFZfU1RBVF9MVF9TVEFUVVM0X09GRlNFVCxcbiYjNDM7XHRYWFZfU1RBVF9MVF9DT0VGRjBfT0ZGU0VULFxuJiM0MztcdFhYVl9TVEFUX1JYX1ZBTElEX0NUUkxfQ09ERV9PRkZTRVQsXG4mIzQzO1x0WFhWX1NUQVRfQ09SRV9TUEVFRF9PRkZTRVQsXG4mIzQzO1x0WFhWX1NUQVRfVFNOX09GRlNFVCxcbiYjNDM7XHRYWFZfU1RBVF9HVFdJWl9PRkZTRVQsXG4mIzQzO1x0WFhWX1NUQVRfQU5fTElOS19DVEwyX09GRlNFVCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIE9wdGlvbiB0YWJsZSBmb3Igc2V0dGluZyB1cCBYWFYgRXRoZXJuZXQgaGFyZHdhcmUgb3B0aW9ucyAqL1xuJiM0MztzdGF0aWMgc3RydWN0IGF4aWVuZXRfb3B0aW9uIHh4dmVuZXRfb3B0aW9uc1tdID0ge1xuJiM0MztcdHsgLyogVHVybiBvbiBGQ1Mgc3RyaXBwaW5nIG9uIHJlY2VpdmUgcGFja2V0cyAqL1xuJiM0MztcdFx0Lm9wdCA9IFhBRV9PUFRJT05fRkNTX1NUUklQLFxuJiM0MztcdFx0LnJlZyA9IFhYVl9SQ1cxX09GRlNFVCxcbiYjNDM7XHRcdC5tX29yID0gWFhWX1JDVzFfRkNTX01BU0ssXG4mIzQzO1x0fSwgeyAvKiBUdXJuIG9uIEZDUyBpbnNlcnRpb24gb24gdHJhbnNtaXQgcGFja2V0cyAqL1xuJiM0MztcdFx0Lm9wdCA9IFhBRV9PUFRJT05fRkNTX0lOU0VSVCxcbiYjNDM7XHRcdC5yZWcgPSBYWFZfVENfT0ZGU0VULFxuJiM0MztcdFx0Lm1fb3IgPSBYWFZfVENfRkNTX01BU0ssXG4mIzQzO1x0fSwgeyAvKiBFbmFibGUgdHJhbnNtaXR0ZXIgKi9cbiYjNDM7XHRcdC5vcHQgPSBYQUVfT1BUSU9OX1RYRU4sXG4mIzQzO1x0XHQucmVnID0gWFhWX1RDX09GRlNFVCxcbiYjNDM7XHRcdC5tX29yID0gWFhWX1RDX1RYX01BU0ssXG4mIzQzO1x0fSwgeyAvKiBFbmFibGUgcmVjZWl2ZXIgKi9cbiYjNDM7XHRcdC5vcHQgPSBYQUVfT1BUSU9OX1JYRU4sXG4mIzQzO1x0XHQucmVnID0gWFhWX1JDVzFfT0ZGU0VULFxuJiM0MztcdFx0Lm1fb3IgPSBYWFZfUkNXMV9SWF9NQVNLLFxuJiM0MztcdH0sXG4mIzQzO1x0e31cbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIFBHMjEwIHN0YXRpc3RpY3MtYmxvY2sgb2Zmc2V0cyBpbmRleGVkIGJ5IGVudW0geHh2X3N0YXQuIEVhY2ggZW50cnkgaXNcbiYjNDM7ICogdGhlIDMyLWJpdCBMU0IgcmVnaXN0ZXIgYWRkcmVzczsgdGhlIGNvcnJlc3BvbmRpbmcgTVNCIGlzIGF0ICYjNDM7NC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBjb25zdCB1MzIgYXhpZW5ldF94eHZfc3RhdF9vZmZzZXRzW1hYVl9TVEFUX0NPVU5UXSA9IHtcbiYjNDM7XHRbWFhWX1NUQVRfUlhfVE9UQUxfUEFDS0VUU11cdCA9IFhYVl9TVEFUX1JYX1RPVEFMX1BBQ0tFVFNfT0ZGU0VULFxuJiM0MztcdFtYWFZfU1RBVF9SWF9UT1RBTF9HT09EX1BBQ0tFVFNdID0gWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9QQUNLRVRTX09GRlNFVCxcbiYjNDM7XHRbWFhWX1NUQVRfUlhfVE9UQUxfQllURVNdXHQgPSBYWFZfU1RBVF9SWF9UT1RBTF9CWVRFU19PRkZTRVQsXG4mIzQzO1x0W1hYVl9TVEFUX1JYX1RPVEFMX0dPT0RfQllURVNdXHQgPSBYWFZfU1RBVF9SWF9UT1RBTF9HT09EX0JZVEVTX09GRlNFVCxcbiYjNDM7XHRbWFhWX1NUQVRfUlhfQkFEX0ZDU11cdFx0ID0gWFhWX1NUQVRfUlhfQkFEX0ZDU19PRkZTRVQsXG4mIzQzO1x0W1hYVl9TVEFUX1JYX0lOUkFOR0VFUlJdXHQgPSBYWFZfU1RBVF9SWF9JTlJBTkdFRVJSX09GRlNFVCxcbiYjNDM7XHRbWFhWX1NUQVRfUlhfTVVMVElDQVNUXVx0XHQgPSBYWFZfU1RBVF9SWF9NVUxUSUNBU1RfT0ZGU0VULFxuJiM0MztcdFtYWFZfU1RBVF9SWF9CUk9BRENBU1RdXHRcdCA9IFhYVl9TVEFUX1JYX0JST0FEQ0FTVF9PRkZTRVQsXG4mIzQzO1x0W1hYVl9TVEFUX1JYX1VOREVSU0laRV1cdFx0ID0gWFhWX1NUQVRfUlhfVU5ERVJTSVpFX09GRlNFVCxcbiYjNDM7XHRbWFhWX1NUQVRfUlhfRlJBR01FTlRdXHRcdCA9IFhYVl9TVEFUX1JYX0ZSQUdNRU5UX09GRlNFVCxcbiYjNDM7XHRbWFhWX1NUQVRfUlhfSkFCQkVSXVx0XHQgPSBYWFZfU1RBVF9SWF9KQUJCRVJfT0ZGU0VULFxuJiM0MztcdFtYWFZfU1RBVF9SWF9PVkVSU0laRV1cdFx0ID0gWFhWX1NUQVRfUlhfT1ZFUlNJWkVfT0ZGU0VULFxuJiM0MztcdFtYWFZfU1RBVF9SWF9QQVVTRV1cdFx0ID0gWFhWX1NUQVRfUlhfUEFVU0VfT0ZGU0VULFxuJiM0MztcdFtYWFZfU1RBVF9UWF9UT1RBTF9QQUNLRVRTXVx0ID0gWFhWX1NUQVRfVFhfVE9UQUxfUEFDS0VUU19PRkZTRVQsXG4mIzQzO1x0W1hYVl9TVEFUX1RYX1RPVEFMX0dPT0RfUEFDS0VUU10gPSBYWFZfU1RBVF9UWF9UT1RBTF9HT09EX1BBQ0tFVFNfT0ZGU0VULFxuJiM0MztcdFtYWFZfU1RBVF9UWF9UT1RBTF9CWVRFU11cdCA9IFhYVl9TVEFUX1RYX1RPVEFMX0JZVEVTX09GRlNFVCxcbiYjNDM7XHRbWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9CWVRFU11cdCA9IFhYVl9TVEFUX1RYX1RPVEFMX0dPT0RfQllURVNfT0ZGU0VULFxuJiM0MztcdFtYWFZfU1RBVF9UWF9CQURfRkNTXVx0XHQgPSBYWFZfU1RBVF9UWF9CQURfRkNTX09GRlNFVCxcbiYjNDM7XHRbWFhWX1NUQVRfVFhfRlJBTUVfRVJST1JdXHQgPSBYWFZfU1RBVF9UWF9GUkFNRV9FUlJPUl9PRkZTRVQsXG4mIzQzO1x0W1hYVl9TVEFUX1RYX01VTFRJQ0FTVF1cdFx0ID0gWFhWX1NUQVRfVFhfTVVMVElDQVNUX09GRlNFVCxcbiYjNDM7XHRbWFhWX1NUQVRfVFhfQlJPQURDQVNUXVx0XHQgPSBYWFZfU1RBVF9UWF9CUk9BRENBU1RfT0ZGU0VULFxuJiM0MztcdFtYWFZfU1RBVF9UWF9QQVVTRV1cdFx0ID0gWFhWX1NUQVRfVFhfUEFVU0VfT0ZGU0VULFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogWFhWIChQRzIxMCkgY291bnRlcnMgZXhwb3NlZCB2aWEgZXRodG9vbCAtUy4gT25seSBjb3VudGVycyB0aGF0IGhhdmUgbm9cbiYjNDM7ICogc3RhbmRhcmQgdUFQSSBhcmUgbGlzdGVkIGhlcmU7IHRoZSB0b3RhbHMgaW5jbHVkZSBlcnJvcmVkIGZyYW1lcywgc28gdGhleVxuJiM0MzsgKiBhcmUgZGlzdGluY3QgZnJvbSB0aGUgZ29vZC1mcmFtZSBjb3VudHMgaW4gcnRubF9saW5rX3N0YXRzNjQgYW5kIHRoZVxuJiM0MzsgKiBJRUVFIE1BQyBzdGF0aXN0aWNzLiBFdmVyeSBvdGhlciBYWFYgY291bnRlciBpcyByZXBvcnRlZCB0aHJvdWdoIHRoZVxuJiM0MzsgKiBkZWRpY2F0ZWQgc3RhdHM2NCwgcGF1c2UsIE1BQyBhbmQgUk1PTiBjYWxsYmFja3MgaW5zdGVhZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBjb25zdCBlbnVtIHh4dl9zdGF0IGF4aWVuZXRfeHh2X3ByaXZfc3RhdHNbXSA9IHtcbiYjNDM7XHRYWFZfU1RBVF9SWF9UT1RBTF9QQUNLRVRTLFxuJiM0MztcdFhYVl9TVEFUX1JYX1RPVEFMX0JZVEVTLFxuJiM0MztcdFhYVl9TVEFUX1RYX1RPVEFMX1BBQ0tFVFMsXG4mIzQzO1x0WFhWX1NUQVRfVFhfVE9UQUxfQllURVMsXG4mIzQzO1x0WFhWX1NUQVRfVFhfQkFEX0ZDUyxcbiYjNDM7XHRYWFZfU1RBVF9UWF9GUkFNRV9FUlJPUixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyIGF4aWVuZXRfeHh2X2V0aHRvb2xfc3RhdHNfc3RyaW5nc1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7XG4mIzQzO1x0XCYjMzQ7UlggVG90YWwgUGFja2V0c1wmIzM0OyxcbiYjNDM7XHRcJiMzNDtSWCBUb3RhbCBCeXRlc1wmIzM0OyxcbiYjNDM7XHRcJiMzNDtUWCBUb3RhbCBQYWNrZXRzXCYjMzQ7LFxuJiM0MztcdFwmIzM0O1RYIFRvdGFsIEJ5dGVzXCYjMzQ7LFxuJiM0MztcdFwmIzM0O1RYIEJhZCBGQ1NcJiMzNDssXG4mIzQzO1x0XCYjMzQ7VFggRnJhbWUgRXJyb3JcJiMzNDssXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdTY0IGF4aWVuZXRfeHh2X3JlYWRfY291bnRlcihzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsIGVudW0geHh2X3N0YXQgc3RhdClcbiYjNDM7e1xuJiM0MztcdHUzMiBvZmYgPSBheGllbmV0X3h4dl9zdGF0X29mZnNldHNbc3RhdF07XG4mIzQzO1x0dTMyIGxzYiwgbXNiO1xuJiM0MztcbiYjNDM7XHRsc2IgPSBheGllbmV0X2lvcihscCwgb2ZmKTtcbiYjNDM7XHRtc2IgPSBheGllbmV0X2lvcihscCwgb2ZmICYjNDM7IFhYVl9TVEFUX01TQl9PRkZTRVQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gKCh1NjQpbXNiIFx1MDAzY1x1MDAzYyAzMikgfCBsc2I7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGF4aWVuZXRfeHh2X2lwX2hhc19ndHdpel9zdGF0dXModTMyIGlwX3ZlcnNpb24pXG4mIzQzO3tcbiYjNDM7XHR1OCBtaW5vciA9IEZJRUxEX0dFVChYWFZfTUlOX01BU0ssIGlwX3ZlcnNpb24pO1xuJiM0MztcdHU4IG1haiA9IEZJRUxEX0dFVChYWFZfTUFKX01BU0ssIGlwX3ZlcnNpb24pO1xuJiM0MztcbiYjNDM7XHRpZiAobWFqID09IFhYVl9JUF9WRVJfR1RXSVpfTUFKX01JTilcbiYjNDM7XHRcdHJldHVybiBtaW5vciBcdTAwM2U9IFhYVl9JUF9WRVJfR1RXSVpfTUlOX01JTjtcbiYjNDM7XHRyZXR1cm4gbWFqIFx1MDAzZSBYWFZfSVBfVkVSX0dUV0laX01BSl9NSU47XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBheGllbmV0X3h4dl9zZXRvcHRpb25zIC0gU2V0IFhYViBNQUMgb3B0aW9ucyBmcm9tIHRoZSBvcHRpb24gdGFibGVcbiYjNDM7ICogQG5kZXY6IFBvaW50ZXIgdG8gdGhlIG5ldF9kZXZpY2Ugc3RydWN0dXJlXG4mIzQzOyAqIEBvcHRpb25zOiBPcHRpb24gZmxhZ3MgdG8gYXBwbHlcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfeHh2X3NldG9wdGlvbnMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBvcHRpb25zKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1x0c3RydWN0IGF4aWVuZXRfb3B0aW9uICp0cCA9IHh4dmVuZXRfb3B0aW9ucztcbiYjNDM7XHR1MzIgcmVnO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAodHAtXHUwMDNlb3B0KSB7XG4mIzQzO1x0XHRyZWcgPSBheGllbmV0X2lvcihscCwgdHAtXHUwMDNlcmVnKSBcdTAwMjYgfnRwLVx1MDAzZW1fb3I7XG4mIzQzO1x0XHRpZiAob3B0aW9ucyBcdTAwMjYgdHAtXHUwMDNlb3B0KVxuJiM0MztcdFx0XHRyZWcgfD0gdHAtXHUwMDNlbV9vcjtcbiYjNDM7XHRcdGF4aWVuZXRfaW93KGxwLCB0cC1cdTAwM2VyZWcsIHJlZyk7XG4mIzQzO1x0XHR0cCYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRscC1cdTAwM2VvcHRpb25zIHw9IG9wdGlvbnM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBheGllbmV0X3h4dl9wcm9iZV9pbml0IC0gSW5pdGlhbGl6ZSBYWFYtc3BlY2lmaWMgc3RhdGUgYXQgcHJvYmUgdGltZVxuJiM0MzsgKiBAbHA6IFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9wcm9iZV9pbml0KHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcbiYjNDM7e1xuJiM0MztcdGxwLVx1MDAzZXh4dl9pcF92ZXJzaW9uID0gYXhpZW5ldF9pb3IobHAsIFhYVl9DT05GSUdfUkVWSVNJT04pO1xuJiM0MztcdGxwLVx1MDAzZWZlYXR1cmVzIHw9IFhBRV9GRUFUVVJFX1NUQVRTO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYXhpZW5ldF94eHZfZ3RfcmVzZXQgLSBQdWxzZSB0aGUgWFhWIEdUIHJlc2V0IGxpbmVcbiYjNDM7ICogQGxwOiBQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF94eHZfZ3RfcmVzZXQoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHZhbDtcbiYjNDM7XG4mIzQzO1x0LyogUmVzZXQgR1QgKi9cbiYjNDM7XHR2YWwgPSBheGllbmV0X2lvcihscCwgWFhWX0dUX1JFU0VUX09GRlNFVCk7XG4mIzQzO1x0dmFsIHw9IFhYVl9HVF9SRVNFVF9NQVNLO1xuJiM0MztcdGF4aWVuZXRfaW93KGxwLCBYWFZfR1RfUkVTRVRfT0ZGU0VULCB2YWwpO1xuJiM0MztcdC8qIEFsbG93IDEgbXMgZm9yIHRoZSBHVCByZXNldCB0byBzZXR0bGUgKHNlZSB0aW1lb3V0IG5vdGUgYWJvdmUpICovXG4mIzQzO1x0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuJiM0MztcdHZhbCA9IGF4aWVuZXRfaW9yKGxwLCBYWFZfR1RfUkVTRVRfT0ZGU0VUKTtcbiYjNDM7XHR2YWwgXHUwMDI2PSB+WFhWX0dUX1JFU0VUX01BU0s7XG4mIzQzO1x0YXhpZW5ldF9pb3cobHAsIFhYVl9HVF9SRVNFVF9PRkZTRVQsIHZhbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBheGllbmV0X3h4dl9wb2xsX2xpbmtfcmVhZHkgLSBXYWl0IGZvciBYWFYgR1QgYW5kIFBDUyBibG9jayBsb2NrXG4mIzQzOyAqIEBuZGV2OiBQb2ludGVyIHRvIHRoZSBuZXRfZGV2aWNlIHN0cnVjdHVyZVxuJiM0MzsgKlxuJiM0MzsgKiBQb2xsIEdUIHdpemFyZCByZXNldC1kb25lIG9uIElQIHYzLjImIzQzOywgdGhlbiBSWCBQQ1MgYmxvY2sgbG9jay4gQmxvY2stbG9ja1xuJiM0MzsgKiBmYWlsdXJlIGlzIGxvZ2dlZCBidXQgbm90IHByb3BhZ2F0ZWQ6IGl0IGRlcGVuZHMgb24gYSBsaXZlIGxpbmsgcGFydG5lciBhbmRcbiYjNDM7ICogcmVmZXJlbmNlIGNsb2NrLCBzbyBhbiB1bnBsdWdnZWQgY2FibGUgbXVzdCBub3QgZmFpbCBkZXZpY2UgYnJpbmctdXAuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGlmIEdUIHJlc2V0LWRvbmUgdGltZXMgb3V0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBheGllbmV0X3h4dl9wb2xsX2xpbmtfcmVhZHkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIENvbmZpcm0gWFhWIEV0aGVybmV0IGlzIHVwOiBvbiBJUCB2My4yJiM0MzssIHdhaXQgZm9yIEdUXG4mIzQzO1x0ICogcmVzZXQtZG9uZSBiZWZvcmUgZnVydGhlciByZWdpc3RlciBhY2Nlc3MsIHRoZW4gcG9sbCB1bnRpbFxuJiM0MztcdCAqIFJYIFBDUyBibG9jayBsb2NrIGlzIGFzc2VydGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChheGllbmV0X3h4dl9pcF9oYXNfZ3R3aXpfc3RhdHVzKGxwLVx1MDAzZXh4dl9pcF92ZXJzaW9uKSkge1xuJiM0MztcdFx0cmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGxwLVx1MDAzZXJlZ3MgJiM0MzsgWFhWX1NUQVRfR1RXSVpfT0ZGU0VULFxuJiM0MztcdFx0XHRcdFx0IHZhbCxcbiYjNDM7XHRcdFx0XHRcdCAodmFsIFx1MDAyNiBYWFZfR1RXSVpfUkVTRVRfRE9ORSkgPT0gWFhWX0dUV0laX1JFU0VUX0RPTkUsXG4mIzQzO1x0XHRcdFx0XHQgWFhWX0xJTktfUE9MTF9JTlRFUlZBTF9VUyxcbiYjNDM7XHRcdFx0XHRcdCBERUxBWV9PRl9PTkVfTUlMTElTRUMpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O1hYViBNQUMgR1QgcmVzZXQgbm90IGNvbXBsZXRlISBDcm9zcy1jaGVjayB0aGUgTUFDIHJlZiBjbG9jayBjb25maWd1cmF0aW9uXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRsX3BvbGxfdGltZW91dChscC1cdTAwM2VyZWdzICYjNDM7IFhYVl9TVEFUUlhfQkxLTENLX09GRlNFVCxcbiYjNDM7XHRcdFx0XHQgdmFsLCAodmFsIFx1MDAyNiBYWFZfUlhfQkxLTENLX01BU0spLFxuJiM0MztcdFx0XHRcdCBYWFZfTElOS19QT0xMX0lOVEVSVkFMX1VTLFxuJiM0MztcdFx0XHRcdCBERUxBWV9PRl9PTkVfTUlMTElTRUMpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5kZXYsIFwmIzM0O1hYViBNQUMgYmxvY2sgbG9jayBub3QgY29tcGxldGUhIENyb3NzLWNoZWNrIHRoZSBNQUMgcmVmIGNsb2NrIGNvbmZpZ3VyYXRpb25cXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGF4aWVuZXRfeHh2X21hY19pbml0IC0gWFhWIE1BQy1zcGVjaWZpYyBicmluZy11cCBhZnRlciB0aGUgRE1BIHJlc2V0XG4mIzQzOyAqIEBuZGV2OiBQb2ludGVyIHRvIHRoZSBuZXRfZGV2aWNlIHN0cnVjdHVyZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIG51bWJlciBvdGhlcndpc2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGF4aWVuZXRfeHh2X21hY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYXhpZW5ldF94eHZfcG9sbF9saW5rX3JlYWR5KG5kZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRscC1cdTAwM2VvcHRpb25zIHw9IFhBRV9PUFRJT05fRkNTX1NUUklQO1xuJiM0MztcdGxwLVx1MDAzZW9wdGlvbnMgfD0gWEFFX09QVElPTl9GQ1NfSU5TRVJUO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF94eHZfcGh5bGlua19zZXRfY2FwYWJpbGl0aWVzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCxcbiYjNDM7XHRcdFx0XHRcdFx0IHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY2ZnKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGNvcmVfc3BlZWQ7XG4mIzQzO1x0Ym9vbCBydHN3O1xuJiM0MztcbiYjNDM7XHRjb3JlX3NwZWVkID0gYXhpZW5ldF9pb3IobHAsIFhYVl9TVEFUX0NPUkVfU1BFRURfT0ZGU0VUKTtcbiYjNDM7XHQvKiBCaXRbMTowXTogMDA9MjVHLCAwMT0xMEcsIDEwPXJ1bnRpbWUtc3dpdGNoYWJsZSAyNUcsXG4mIzQzO1x0ICogMTE9cnVudGltZS1zd2l0Y2hhYmxlIDEwRy4gQSBydW50aW1lLXN3aXRjaGFibGUgY29yZSBjYW4gb3BlcmF0ZSBhdFxuJiM0MztcdCAqIGVpdGhlciBzcGVlZCwgc28gYWR2ZXJ0aXNlIGJvdGg7IGEgZml4ZWQgY29yZSBhZHZlcnRpc2VzIG9ubHkgaXRzXG4mIzQzO1x0ICogY29uZmlndXJlZCBzcGVlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRydHN3ID0gY29yZV9zcGVlZCBcdTAwMjYgWFhWX1NUQVRfQ09SRV9TUEVFRF9SVFNXX01BU0s7XG4mIzQzO1xuJiM0MztcdGlmIChydHN3IHx8IChjb3JlX3NwZWVkIFx1MDAyNiBYWFZfU1RBVF9DT1JFX1NQRUVEXzEwR19NQVNLKSkge1xuJiM0MztcdFx0Y2ZnLVx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDAwRkQ7XG4mIzQzO1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSLFxuJiM0MztcdFx0XHQgIGNmZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocnRzdyB8fCAhKGNvcmVfc3BlZWQgXHUwMDI2IFhYVl9TVEFUX0NPUkVfU1BFRURfMTBHX01BU0spKSB7XG4mIzQzO1x0XHRjZmctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMjUwMDBGRDtcbiYjNDM7XHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMjVHQkFTRVIsXG4mIzQzO1x0XHRcdCAgY2ZnLVx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfeHh2X3Bjc19nZXRfc3RhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsXG4mIzQzO1x0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IG5lZ19tb2RlLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gcGNzX3RvX2F4aWVuZXRfbG9jYWwocGNzKTtcbiYjNDM7XG4mIzQzO1x0c3RhdGUtXHUwMDNlZHVwbGV4ID0gRFVQTEVYX0ZVTEw7XG4mIzQzO1x0c3RhdGUtXHUwMDNlYW5fY29tcGxldGUgPSAhIShheGllbmV0X2lvcihscCwgWFhWX1NUQVRfQU5fU1RTX09GRlNFVCkgXHUwMDI2XG4mIzQzO1x0XHRcdFx0WFhWX0FOX0NPTVBMRVRFX01BU0spO1xuJiM0MztcdHN0YXRlLVx1MDAzZWxpbmsgPSBheGllbmV0X2lvcihscCwgWFhWX1JYX1NUQVRVU19SRUcxKSBcdTAwMjZcbiYjNDM7XHRcdCAgICAgIFhYVl9SWF9TVEFUVVNfTUFTSztcbiYjNDM7XG4mIzQzO1x0aWYgKGF4aWVuZXRfaW9yKGxwLCBYWFZfU1RBVF9DT1JFX1NQRUVEX09GRlNFVCkgXHUwMDI2XG4mIzQzO1x0ICAgIFhYVl9TVEFUX0NPUkVfU1BFRURfMTBHX01BU0spXG4mIzQzO1x0XHRzdGF0ZS1cdTAwM2VzcGVlZCA9IFNQRUVEXzEwMDAwO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHN0YXRlLVx1MDAzZXNwZWVkID0gU1BFRURfMjUwMDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYXhpZW5ldF94eHZfcGNzX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcywgdW5zaWduZWQgaW50IG5lZ19tb2RlLFxuJiM0MztcdFx0XHRcdCAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcbiYjNDM7XHRcdFx0XHQgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkdmVydGlzaW5nLFxuJiM0MztcdFx0XHRcdCAgYm9vbCBwZXJtaXRfcGF1c2VfdG9fbWFjKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19wY3Nfb3BzIGF4aWVuZXRfeHh2X3Bjc19vcHMgPSB7XG4mIzQzO1x0LnBjc19nZXRfc3RhdGUgPSBheGllbmV0X3h4dl9wY3NfZ2V0X3N0YXRlLFxuJiM0MztcdC5wY3NfY29uZmlnID0gYXhpZW5ldF94eHZfcGNzX2NvbmZpZyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBheGllbmV0X3h4dl9nZXRfcmVncyAtIER1bXAgWFhWIE1BQyByZWdpc3RlcnMgZm9yIGV0aHRvb2xcbiYjNDM7ICogQGxwOiBQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuJiM0MzsgKiBAZGF0YTogQnVmZmVyIGZvciByZWdpc3RlciB2YWx1ZXMgKHplcm9lZCBhbmQgc2l6ZWQgYnkgdGhlIGNhbGxlcilcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfeHh2X2dldF9yZWdzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwgdTMyICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoYXhpZW5ldF94eHZfcmVnX2R1bXBfb2Zmc2V0cyk7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0ZGF0YVtpXSA9IGF4aWVuZXRfaW9yKGxwLCBheGllbmV0X3h4dl9yZWdfZHVtcF9vZmZzZXRzW2ldKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBheGllbmV0XzEwZzI1Z19jbGtfaW5pdChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBscC1cdTAwM2VkZXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIHJlZ2lzdGVyLCBSWCBhbmQgR1QgRFJQIGNsb2NrcyBhcmUgbWFuZGF0b3J5IGZvciBNQUMmIzQzO1BDU1xuJiM0MztcdCAqIG9wZXJhdGlvbiwgc28gZmV0Y2ggdGhlbSBhcyByZXF1aXJlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRscC1cdTAwM2VheGlfY2xrID0gZGV2bV9jbGtfZ2V0X2VuYWJsZWQoZGV2LCBcJiMzNDtzX2F4aVwmIzM0Oyk7XG4mIzQzO1x0aWYgKElTX0VSUihscC1cdTAwM2VheGlfY2xrKSlcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihscC1cdTAwM2VheGlfY2xrKSxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2NvdWxkIG5vdCBnZXQgQVhJIGNsb2NrXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0bHAtXHUwMDNlbWlzY19jbGtzWzBdLmlkID0gXCYjMzQ7cnhfY29yZVwmIzM0OztcbiYjNDM7XHRscC1cdTAwM2VtaXNjX2Nsa3NbMV0uaWQgPSBcJiMzNDtkcnBcJiMzNDs7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fY2xrX2J1bGtfZ2V0X2VuYWJsZShkZXYsIDIsIGxwLVx1MDAzZW1pc2NfY2xrcyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7Y291bGQgbm90IGdldC9lbmFibGUgWFhWIGNsb2Nrc1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYXhpZW5ldF94eHZfc3RhdHNfdXBkYXRlIC0gTGF0Y2ggYW5kIGFjY3VtdWxhdGUgWFhWIGhhcmR3YXJlIGNvdW50ZXJzXG4mIzQzOyAqIEBscDogUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcbiYjNDM7ICpcbiYjNDM7ICogVGhlIFhYViBzdGF0aXN0aWNzIGNvdW50ZXJzIGFyZSBjbGVhci1vbi10aWNrIChQRzIxMCk6IHdyaXRpbmcgVElDS19SRUdcbiYjNDM7ICogbGF0Y2hlcyB0aGUgaW50ZXJuYWwgYWNjdW11bGF0b3JzIGludG8gdGhlIHJlYWRhYmxlIFNUQVRfKl9MU0IvTVNCIHJlZ2lzdGVyc1xuJiM0MzsgKiBhbmQgY2xlYXJzIHRoZSBpbnRlcm5hbCBhY2N1bXVsYXRvcnMuIEVhY2ggcG9zdC1USUNLIHJlYWQgdGhlcmVmb3JlIHJldHVybnNcbiYjNDM7ICogdGhlIGNvdW50IGZvciB0aGUgaW50ZXJ2YWwgc2luY2UgdGhlIHByZXZpb3VzIFRJQ0ssIHNvIHNvZnR3YXJlIGFjY3VtdWxhdGVzXG4mIzQzOyAqIHRob3NlIGludGVydmFscyBpbnRvIGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2UuIEEgbGFzdC1jb3VudGVyIGRlbHRhIChhcyB1c2VkIGJ5IHRoZVxuJiM0MzsgKiBmcmVlLXJ1bm5pbmcgMUcgTUFDIHBhdGgpIGlzIG5vdCBuZWVkZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9zdGF0c191cGRhdGUoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IGNvdW50ZXJbWFhWX1NUQVRfQ09VTlRdO1xuJiM0MztcdGVudW0geHh2X3N0YXQgc3RhdDtcbiYjNDM7XG4mIzQzO1x0LyogTGF0Y2ggdGhlIGNsZWFyLW9uLXRpY2sgc25hcHNob3QgYW5kIHJlYWQgdGhlIGNvdW50ZXJzIG91dHNpZGUgdGhlXG4mIzQzO1x0ICogc2VxY291bnQgd3JpdGUgc2VjdGlvbiwgc28gb25seSB0aGUgYWNjdW11bGF0b3IgdXBkYXRlcyBydW4gaW5zaWRlIGl0XG4mIzQzO1x0ICogYW5kIHRoZSByZWFkZXIgcmV0cnkgd2luZG93IHN0YXlzIHNob3J0LlxuJiM0MztcdCAqL1xuJiM0MztcdGF4aWVuZXRfaW93KGxwLCBYWFZfVElDS1JFR19PRkZTRVQsIFhYVl9USUNLUkVHX1NUQVRFTl9NQVNLKTtcbiYjNDM7XHRmb3IgKHN0YXQgPSAwOyBzdGF0IFx1MDAzYyBYWFZfU1RBVF9DT1VOVDsgc3RhdCYjNDM7JiM0MzspXG4mIzQzO1x0XHRjb3VudGVyW3N0YXRdID0gYXhpZW5ldF94eHZfcmVhZF9jb3VudGVyKGxwLCBzdGF0KTtcbiYjNDM7XG4mIzQzO1x0d3JpdGVfc2VxY291bnRfYmVnaW4oXHUwMDI2bHAtXHUwMDNlaHdfc3RhdHNfc2VxY291bnQpO1xuJiM0MztcdGZvciAoc3RhdCA9IDA7IHN0YXQgXHUwMDNjIFhYVl9TVEFUX0NPVU5UOyBzdGF0JiM0MzsmIzQzOylcbiYjNDM7XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2Vbc3RhdF0gJiM0Mzs9IGNvdW50ZXJbc3RhdF07XG4mIzQzO1x0d3JpdGVfc2VxY291bnRfZW5kKFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGF4aWVuZXRfeHh2X2dldF9zdGF0czY0IC0gRmlsbCBydG5sX2xpbmtfc3RhdHM2NCBmcm9tIFhYViBjb3VudGVyc1xuJiM0MzsgKiBAbHA6IFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlXG4mIzQzOyAqIEBzdGF0czogT3V0cHV0IHJ0bmxfbGlua19zdGF0czY0IHN0cnVjdHVyZSB0byBwb3B1bGF0ZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF94eHZfZ2V0X3N0YXRzNjQoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IHN0YXJ0O1xuJiM0MztcdHU2NCB0eF9od19lcnJvcnM7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2VyeF9jcmNfZXJyb3JzID0gbHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9CQURfRkNTXTtcbiYjNDM7XHRcdC8qIEJvdGggaW4tcmFuZ2UgbGVuZ3RoIGVycm9ycyBhbmQgZnJhbWUtdG9vLWxvbmcgKG92ZXJzaXplKVxuJiM0MztcdFx0ICogZnJhbWVzIGFyZSBJRUVFIDgwMi4zIGxlbmd0aCBlcnJvcnMsIHNvIGZvbGQgdGhlbSB0b2dldGhlclxuJiM0MztcdFx0ICogaW50byByeF9sZW5ndGhfZXJyb3JzOyByeF9vdmVyX2Vycm9ycyBpcyByZXNlcnZlZCBmb3IgcmVjZWl2ZXJcbiYjNDM7XHRcdCAqIEZJRk8vcmluZyBvdmVyZmxvdywgd2hpY2ggdGhlIFhYViBNQUMgZG9lcyBub3QgZXhwb3NlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzdGF0cy1cdTAwM2VyeF9sZW5ndGhfZXJyb3JzID1cbiYjNDM7XHRcdFx0bHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9JTlJBTkdFRVJSXSAmIzQzO1xuJiM0MztcdFx0XHRscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX09WRVJTSVpFXTtcbiYjNDM7XHRcdHN0YXRzLVx1MDAzZXJ4X2Vycm9ycyA9IGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfVU5ERVJTSVpFXSAmIzQzO1xuJiM0MztcdFx0XHRcdCAgIGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfRlJBR01FTlRdICYjNDM7XG4mIzQzO1x0XHRcdFx0ICAgbHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9KQUJCRVJdICYjNDM7XG4mIzQzO1x0XHRcdFx0ICAgc3RhdHMtXHUwMDNlcnhfY3JjX2Vycm9ycyAmIzQzO1xuJiM0MztcdFx0XHRcdCAgIHN0YXRzLVx1MDAzZXJ4X2xlbmd0aF9lcnJvcnM7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2VtdWx0aWNhc3QgPSBscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX01VTFRJQ0FTVF07XG4mIzQzO1x0XHR0eF9od19lcnJvcnMgPSBscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1RYX0JBRF9GQ1NdICYjNDM7XG4mIzQzO1x0XHRcdCAgICAgICBscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1RYX0ZSQU1FX0VSUk9SXTtcbiYjNDM7XHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpO1xuJiM0MztcbiYjNDM7XHQvKiBGb2xkIHRoZSBIVyBUWCBlcnJvciBjb3VudCBpbnRvIHRoZSBzb2Z0d2FyZSB0eF9lcnJvcnMgc2VlZGVkIGZyb21cbiYjNDM7XHQgKiBkZXYtXHUwMDNlc3RhdHMgYnkgdGhlIGNhbGxlci4gVGhlIFhYViB4bWl0IHBhdGggYnVtcHMgZGV2LVx1MDAzZXN0YXRzLnR4X2Vycm9yc1xuJiM0MztcdCAqIGZvciBmcmFtZXMgZHJvcHBlZCBvbiBwYWQgZmFpbHVyZSBiZWZvcmUgdGhleSByZWFjaCB0aGUgTUFDLCB3aGlsZSB0aGVcbiYjNDM7XHQgKiBIVyBjb3VudGVycyBvbmx5IGNvdmVyIGZyYW1lcyB0aGUgTUFDIGFjdHVhbGx5IHRyYW5zbWl0dGVkOyB0aGUgdHdvIGFyZVxuJiM0MztcdCAqIGRpc2pvaW50LiBUaGlzIHJ1bnMgb25jZSwgb3V0c2lkZSB0aGUgc2VxY291bnQgcmV0cnkgbG9vcCwgc28gYSByYWNpbmdcbiYjNDM7XHQgKiBzdGF0cyB1cGRhdGUgY2Fubm90IG1ha2UgdGhlIGFjY3VtdWxhdGlvbiByZS1hZGQgb24gcmV0cnkuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RhdHMtXHUwMDNldHhfZXJyb3JzICYjNDM7PSB0eF9od19lcnJvcnM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBheGllbmV0X3h4dl9nZXRfZXRodG9vbF9zdGF0cyAtIENvcHkgWFhWIGNvdW50ZXJzIGZvciBldGh0b29sIC1TXG4mIzQzOyAqIEBscDogUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcbiYjNDM7ICogQGRhdGE6IE91dHB1dCBidWZmZXIgc2l6ZWQgZm9yIEFSUkFZX1NJWkUoYXhpZW5ldF94eHZfcHJpdl9zdGF0cykgdTY0IHZhbHVlc1xuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF94eHZfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLCB1NjQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaSwgc3RhcnQ7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGF4aWVuZXRfeHh2X3ByaXZfc3RhdHMpOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0ZGF0YVtpXSA9IGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbYXhpZW5ldF94eHZfcHJpdl9zdGF0c1tpXV07XG4mIzQzO1x0fSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeShcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCwgc3RhcnQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGF4aWVuZXRfeHh2X2dldF9zdHJpbmdzIC0gQ29weSBYWFYgZXRodG9vbCBzdGF0aXN0aWNzIG5hbWUgc3RyaW5nc1xuJiM0MzsgKiBAZGF0YTogT3V0cHV0IGJ1ZmZlciBmb3IgdGhlIHN0YXRpc3RpY3MgbmFtZSBzdHJpbmdzXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfc3RyaW5ncyh1OCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdG1lbWNweShkYXRhLCBheGllbmV0X3h4dl9ldGh0b29sX3N0YXRzX3N0cmluZ3MsXG4mIzQzO1x0ICAgICAgIHNpemVvZihheGllbmV0X3h4dl9ldGh0b29sX3N0YXRzX3N0cmluZ3MpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGF4aWVuZXRfeHh2X2dldF9zc2V0X2NvdW50IC0gTnVtYmVyIG9mIFhYViBldGh0b29sIHN0YXRpc3RpY3NcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiBDb3VudCBvZiBYWFYgaGFyZHdhcmUgc3RhdGlzdGljcyByZXBvcnRlZCB2aWEgZXRodG9vbCAtUy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYXhpZW5ldF94eHZfZ2V0X3NzZXRfY291bnQodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBBUlJBWV9TSVpFKGF4aWVuZXRfeHh2X2V0aHRvb2xfc3RhdHNfc3RyaW5ncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBheGllbmV0X3h4dl9nZXRfcGF1c2Vfc3RhdHMgLSBGaWxsIGV0aHRvb2wgcGF1c2UgZnJhbWUgc3RhdGlzdGljc1xuJiM0MzsgKiBAbHA6IFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlXG4mIzQzOyAqIEBwYXVzZV9zdGF0czogT3V0cHV0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgc3RydWN0dXJlIHRvIHBvcHVsYXRlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IHN0YXJ0O1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2bHAtXHUwMDNlaHdfc3RhdHNfc2VxY291bnQpO1xuJiM0MztcdFx0cGF1c2Vfc3RhdHMtXHUwMDNldHhfcGF1c2VfZnJhbWVzID1cbiYjNDM7XHRcdFx0bHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9UWF9QQVVTRV07XG4mIzQzO1x0XHRwYXVzZV9zdGF0cy1cdTAwM2VyeF9wYXVzZV9mcmFtZXMgPVxuJiM0MztcdFx0XHRscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX1BBVVNFXTtcbiYjNDM7XHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYXhpZW5ldF94eHZfZ2V0X2V0aF9tYWNfc3RhdHMgLSBGaWxsIElFRUUgODAyLjMgTUFDIHN0YXRpc3RpY3NcbiYjNDM7ICogQGxwOiBQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuJiM0MzsgKiBAbWFjX3N0YXRzOiBPdXRwdXQgZXRodG9vbF9ldGhfbWFjX3N0YXRzIHN0cnVjdHVyZSB0byBwb3B1bGF0ZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF94eHZfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4mIzQzO1x0XHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVzVHJhbnNtaXR0ZWRPSyA9XG4mIzQzO1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9QQUNLRVRTXTtcbiYjNDM7XHRcdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNSZWNlaXZlZE9LID1cbiYjNDM7XHRcdFx0bHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9UT1RBTF9HT09EX1BBQ0tFVFNdO1xuJiM0MztcdFx0bWFjX3N0YXRzLVx1MDAzZU9jdGV0c1RyYW5zbWl0dGVkT0sgPVxuJiM0MztcdFx0XHRscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1RYX1RPVEFMX0dPT0RfQllURVNdO1xuJiM0MztcdFx0bWFjX3N0YXRzLVx1MDAzZU9jdGV0c1JlY2VpdmVkT0sgPVxuJiM0MztcdFx0XHRscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX1RPVEFMX0dPT0RfQllURVNdO1xuJiM0MztcdFx0bWFjX3N0YXRzLVx1MDAzZUZyYW1lQ2hlY2tTZXF1ZW5jZUVycm9ycyA9XG4mIzQzO1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfQkFEX0ZDU107XG4mIzQzO1x0XHRtYWNfc3RhdHMtXHUwMDNlTXVsdGljYXN0RnJhbWVzWG1pdHRlZE9LID1cbiYjNDM7XHRcdFx0bHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9UWF9NVUxUSUNBU1RdO1xuJiM0MztcdFx0bWFjX3N0YXRzLVx1MDAzZUJyb2FkY2FzdEZyYW1lc1htaXR0ZWRPSyA9XG4mIzQzO1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfQlJPQURDQVNUXTtcbiYjNDM7XHRcdG1hY19zdGF0cy1cdTAwM2VNdWx0aWNhc3RGcmFtZXNSZWNlaXZlZE9LID1cbiYjNDM7XHRcdFx0bHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9NVUxUSUNBU1RdO1xuJiM0MztcdFx0bWFjX3N0YXRzLVx1MDAzZUJyb2FkY2FzdEZyYW1lc1JlY2VpdmVkT0sgPVxuJiM0MztcdFx0XHRscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX0JST0FEQ0FTVF07XG4mIzQzO1x0XHRtYWNfc3RhdHMtXHUwMDNlSW5SYW5nZUxlbmd0aEVycm9ycyA9XG4mIzQzO1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfSU5SQU5HRUVSUl07XG4mIzQzO1x0fSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeShcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCwgc3RhcnQpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGF4aWVuZXRfeHh2X2dldF9ybW9uX3N0YXRzIC0gRmlsbCBSTU9OIHN0YXRpc3RpY3MgYW5kIGhpc3RvZ3JhbSByYW5nZXNcbiYjNDM7ICogQGxwOiBQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuJiM0MzsgKiBAcm1vbl9zdGF0czogT3V0cHV0IGV0aHRvb2xfcm1vbl9zdGF0cyBzdHJ1Y3R1cmUgdG8gcG9wdWxhdGVcbiYjNDM7ICogQHJhbmdlczogU2V0IHRvIHRoZSBSTU9OIGhpc3RvZ3JhbSByYW5nZSB0YWJsZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF94eHZfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxuJiM0MztcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4mIzQzO1x0XHRybW9uX3N0YXRzLVx1MDAzZXVuZGVyc2l6ZV9wa3RzID1cbiYjNDM7XHRcdFx0bHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9VTkRFUlNJWkVdO1xuJiM0MztcdFx0cm1vbl9zdGF0cy1cdTAwM2VvdmVyc2l6ZV9wa3RzID1cbiYjNDM7XHRcdFx0bHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9PVkVSU0laRV07XG4mIzQzO1x0XHRybW9uX3N0YXRzLVx1MDAzZWZyYWdtZW50cyA9XG4mIzQzO1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfRlJBR01FTlRdO1xuJiM0MztcdFx0cm1vbl9zdGF0cy1cdTAwM2VqYWJiZXJzID1cbiYjNDM7XHRcdFx0bHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9KQUJCRVJdO1xuJiM0MztcdH0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2bHAtXHUwMDNlaHdfc3RhdHNfc2VxY291bnQsIHN0YXJ0KSk7XG4mIzQzO1xuJiM0MztcdC8qIFhYViBjdXJyZW50bHkgZXhwb3NlcyBvbmx5IGFnZ3JlZ2F0ZSBSTU9OIGNvdW50ZXJzLCBub3QgcGVyLWJpblxuJiM0MztcdCAqIGhpc3RvZ3JhbSBidWNrZXRzLiBLZWVwIHJhbmdlcyBOVUxMIHVudGlsIGhpc3RvZ3JhbSBiaW5zIGFyZSB3aXJlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHQqcmFuZ2VzID0gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGF4aWVuZXRfY29uZmlnIGF4aWVuZXRfMTBnMjVnX2NvbmZpZyA9IHtcbiYjNDM7XHQuc3dfcGFkZGluZyA9IHRydWUsXG4mIzQzO1x0LmludGVybmFsX3BjcyA9IHRydWUsXG4mIzQzO1x0LnJlZ3NfbiA9IFhYVl9SRUdTX04sXG4mIzQzO1x0LmNsa19pbml0ID0gYXhpZW5ldF8xMGcyNWdfY2xrX2luaXQsXG4mIzQzO1x0LnNldG9wdGlvbnMgPSBheGllbmV0X3h4dl9zZXRvcHRpb25zLFxuJiM0MztcdC5wcm9iZV9pbml0ID0gYXhpZW5ldF94eHZfcHJvYmVfaW5pdCxcbiYjNDM7XHQuZ3RfcmVzZXQgPSBheGllbmV0X3h4dl9ndF9yZXNldCxcbiYjNDM7XHQubWFjX2luaXQgPSBheGllbmV0X3h4dl9tYWNfaW5pdCxcbiYjNDM7XHQuZ2V0X3JlZ3MgPSBheGllbmV0X3h4dl9nZXRfcmVncyxcbiYjNDM7XHQucGh5bGlua19zZXRfY2FwcyA9IGF4aWVuZXRfeHh2X3BoeWxpbmtfc2V0X2NhcGFiaWxpdGllcyxcbiYjNDM7XHQucGNzX29wcyA9IFx1MDAyNmF4aWVuZXRfeHh2X3Bjc19vcHMsXG4mIzQzO1x0LnN0YXRzX3VwZGF0ZSA9IGF4aWVuZXRfeHh2X3N0YXRzX3VwZGF0ZSxcbiYjNDM7XHQuZ2V0X3N0YXRzNjQgPSBheGllbmV0X3h4dl9nZXRfc3RhdHM2NCxcbiYjNDM7XHQuZ2V0X2V0aHRvb2xfc3RhdHMgPSBheGllbmV0X3h4dl9nZXRfZXRodG9vbF9zdGF0cyxcbiYjNDM7XHQuZ2V0X3N0cmluZ3MgPSBheGllbmV0X3h4dl9nZXRfc3RyaW5ncyxcbiYjNDM7XHQuZ2V0X3NzZXRfY291bnQgPSBheGllbmV0X3h4dl9nZXRfc3NldF9jb3VudCxcbiYjNDM7XHQuZ2V0X3BhdXNlX3N0YXRzID0gYXhpZW5ldF94eHZfZ2V0X3BhdXNlX3N0YXRzLFxuJiM0MztcdC5nZXRfZXRoX21hY19zdGF0cyA9IGF4aWVuZXRfeHh2X2dldF9ldGhfbWFjX3N0YXRzLFxuJiM0MztcdC5nZXRfcm1vbl9zdGF0cyA9IGF4aWVuZXRfeHh2X2dldF9ybW9uX3N0YXRzLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF94eHYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF94eHYuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmViZmE3ZDU3YTg1OTFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF94eHYuaFxuQEAgLTAsMCAmIzQzOzEsMTQxIEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbiYjNDM7LypcbiYjNDM7ICogWFhWICgxMEcvMjVHKSBzdXBwb3J0XG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBYSUxJTlhfQVhJRU5FVF9YWFZfSFxuJiM0MzsjZGVmaW5lIFhJTElOWF9BWElFTkVUX1hYVl9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCBheGllbmV0X2xvY2FsO1xuJiM0MztzdHJ1Y3QgYXhpZW5ldF9jb25maWc7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFhYVl9SRUdTX05cdFx0NDZcbiYjNDM7XG4mIzQzOy8qIFhYViBNQUMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi9cbiYjNDM7I2RlZmluZSBYWFZfR1RfUkVTRVRfT0ZGU0VUXHRcdDB4MDAwMDAwMDBcbiYjNDM7I2RlZmluZSBYWFZfUkVTRVRfT0ZGU0VUXHRcdDB4MDAwMDAwMDRcbiYjNDM7I2RlZmluZSBYWFZfTU9ERV9PRkZTRVRcdFx0XHQweDAwMDAwMDA4XG4mIzQzOyNkZWZpbmUgWFhWX1RDX09GRlNFVFx0XHRcdDB4MDAwMDAwMENcbiYjNDM7I2RlZmluZSBYWFZfUkNXMV9PRkZTRVRcdFx0XHQweDAwMDAwMDE0XG4mIzQzOyNkZWZpbmUgWFhWX0pVTV9PRkZTRVRcdFx0XHQweDAwMDAwMDE4XG4mIzQzOyNkZWZpbmUgWFhWX1ZMX0xFTkdUSF9PRkZTRVRcdFx0MHgwMDAwMDAxQ1xuJiM0MzsjZGVmaW5lIFhYVl9USUNLUkVHX09GRlNFVFx0XHQweDAwMDAwMDIwXG4mIzQzOyNkZWZpbmUgWFhWX0NPTkZJR19SRVZJU0lPTlx0XHQweDAwMDAwMDI0XG4mIzQzOyNkZWZpbmUgWFhWX0NPTkZJR18xNTg4X09GRlNFVFx0XHQweDAwMDAwMDM4XG4mIzQzOyNkZWZpbmUgWFhWX0NPTkZJR19UWF9GTE9XX0NUUkwxX09GRlNFVFx0MHgwMDAwMDA0MFxuJiM0MzsjZGVmaW5lIFhYVl9DT05GSUdfUlhfRkxPV19DVFJMMV9PRkZTRVRcdDB4MDAwMDAwOTRcbiYjNDM7I2RlZmluZSBYWFZfQ09ORklHX1JYX0ZMT1dfQ1RSTDJfT0ZGU0VUXHQweDAwMDAwMDk4XG4mIzQzOyNkZWZpbmUgWFhWX0NPTkZJR19SU0ZFQ19PRkZTRVRcdFx0MHgwMDAwMDBEMFxuJiM0MzsjZGVmaW5lIFhYVl9DT05GSUdfRkVDX09GRlNFVFx0XHQweDAwMDAwMEQ0XG4mIzQzOyNkZWZpbmUgWFhWX0FOX0NUTDFfT0ZGU0VUXHRcdDB4MDAwMDAwRTBcbiYjNDM7I2RlZmluZSBYWFZfQU5fQ1RMMl9PRkZTRVRcdFx0MHgwMDAwMDBFNFxuJiM0MzsjZGVmaW5lIFhYVl9BTl9BQklMSVRZX09GRlNFVFx0XHQweDAwMDAwMEY4XG4mIzQzOyNkZWZpbmUgWFhWX0xUX0NUTDFfT0ZGU0VUXHRcdDB4MDAwMDAxMDBcbiYjNDM7I2RlZmluZSBYWFZfU1dJVENIX0NPUkVfU1BFRURfT0ZGU0VUXHQweDAwMDAwMTM4XG4mIzQzOyNkZWZpbmUgWFhWX0NPTkZJR18xNTg4XzMyQklUX09GRlNFVFx0MHgwMDAwMDEzQ1xuJiM0MzsjZGVmaW5lIFhYVl9UWF9DT05GSUdfMTU4OF9PRkZTRVRcdDB4MDAwMDAxNDBcbiYjNDM7I2RlZmluZSBYWFZfUlhfQ09ORklHXzE1ODhfT0ZGU0VUXHQweDAwMDAwMTQ0XG4mIzQzOyNkZWZpbmUgWFhWX0dUV0laX0NUUkxfT0ZGU0VUXHRcdDB4MDAwMDAxNTRcbiYjNDM7I2RlZmluZSBYWFZfU1RBVFJYX1NUQVRVUzBfT0ZGU0VUXHQweDAwMDAwNDAwXG4mIzQzOyNkZWZpbmUgWFhWX1JYX1NUQVRVU19SRUcxXHRcdDB4MDAwMDA0MDRcbiYjNDM7I2RlZmluZSBYWFZfU1RBVFJYX1NUQVRVUzJfT0ZGU0VUXHQweDAwMDAwNDA4XG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRSWF9CTEtMQ0tfT0ZGU0VUXHQweDAwMDAwNDBDXG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfUlNGRUNfU1RBVFVTX09GRlNFVFx0MHgwMDAwMDQzQ1xuJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX0ZFQ19TVEFUVVNfT0ZGU0VUXHQweDAwMDAwNDQ4XG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfVFhfUlNGRUNfU1RBVFVTX09GRlNFVFx0MHgwMDAwMDQ0Q1xuJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1RYX0ZMT1dfQ1RSTDFfT0ZGU0VUXHQweDAwMDAwNDUwXG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfRkxPV19DVFJMMV9PRkZTRVRcdDB4MDAwMDA0NTRcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9BTl9TVFNfT0ZGU0VUXHRcdDB4MDAwMDA0NThcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9BTl9MUF9TVEFUVVNfT0ZGU0VUXHQweDAwMDAwNDVDXG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfQU5fTElOS19DVExfT0ZGU0VUXHQweDAwMDAwNDYwXG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfTFRfU1RBVFVTMV9PRkZTRVRcdDB4MDAwMDA0NjRcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9MVF9TVEFUVVMyX09GRlNFVFx0MHgwMDAwMDQ2OFxuJiM0MzsjZGVmaW5lIFhYVl9TVEFUX0xUX1NUQVRVUzNfT0ZGU0VUXHQweDAwMDAwNDZDXG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfTFRfU1RBVFVTNF9PRkZTRVRcdDB4MDAwMDA0NzBcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9MVF9DT0VGRjBfT0ZGU0VUXHQweDAwMDAwNDc0XG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfVkFMSURfQ1RSTF9DT0RFX09GRlNFVFx0MHgwMDAwMDQ5NFxuJiM0MzsjZGVmaW5lIFhYVl9TVEFUX0NPUkVfU1BFRURfT0ZGU0VUXHQweDAwMDAwNDk4XG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfVFNOX09GRlNFVFx0XHQweDAwMDAwNDlDXG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfR1RXSVpfT0ZGU0VUXHRcdDB4MDAwMDA0QTBcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9BTl9MSU5LX0NUTDJfT0ZGU0VUXHQweDAwMDAwOUYwXG4mIzQzO1xuJiM0MzsvKiBYWFYgc3RhdGlzdGljcyBjb3VudGVyIHJlZ2lzdGVycyAoUEcyMTApLiBFYWNoIGNvdW50ZXIgaXMgYSBwYWlyIG9mIDMyLWJpdFxuJiM0MzsgKiByZWdpc3RlcnM7IHRoZSBNU0IgcmVnaXN0ZXIgaXMgWFhWX1NUQVRfTVNCX09GRlNFVCBieXRlcyBhYm92ZSB0aGUgTFNCLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9NU0JfT0ZGU0VUXHRcdFx0NFxuJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1RYX0ZSQU1FX0VSUk9SX09GRlNFVFx0XHQweDAwMDAwNkEwXG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfVFhfVE9UQUxfUEFDS0VUU19PRkZTRVRcdDB4MDAwMDA3MDBcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9UWF9UT1RBTF9HT09EX1BBQ0tFVFNfT0ZGU0VUXHQweDAwMDAwNzA4XG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfVFhfVE9UQUxfQllURVNfT0ZGU0VUXHRcdDB4MDAwMDA3MTBcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9UWF9UT1RBTF9HT09EX0JZVEVTX09GRlNFVFx0MHgwMDAwMDcxOFxuJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1RYX0JBRF9GQ1NfT0ZGU0VUXHRcdDB4MDAwMDA3QjhcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9UWF9NVUxUSUNBU1RfT0ZGU0VUXHRcdDB4MDAwMDA3RDhcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9UWF9CUk9BRENBU1RfT0ZGU0VUXHRcdDB4MDAwMDA3RTBcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9UWF9QQVVTRV9PRkZTRVRcdFx0MHgwMDAwMDdGMFxuJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX1RPVEFMX1BBQ0tFVFNfT0ZGU0VUXHQweDAwMDAwODA4XG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9QQUNLRVRTX09GRlNFVFx0MHgwMDAwMDgxMFxuJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX1RPVEFMX0JZVEVTX09GRlNFVFx0XHQweDAwMDAwODE4XG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9CWVRFU19PRkZTRVRcdDB4MDAwMDA4MjBcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9SWF9VTkRFUlNJWkVfT0ZGU0VUXHRcdDB4MDAwMDA4OThcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9SWF9GUkFHTUVOVF9PRkZTRVRcdFx0MHgwMDAwMDhBMFxuJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX09WRVJTSVpFX09GRlNFVFx0XHQweDAwMDAwOEE4XG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfSkFCQkVSX09GRlNFVFx0XHQweDAwMDAwOEI4XG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfQkFEX0ZDU19PRkZTRVRcdFx0MHgwMDAwMDhDMFxuJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX01VTFRJQ0FTVF9PRkZTRVRcdFx0MHgwMDAwMDhFMFxuJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX0JST0FEQ0FTVF9PRkZTRVRcdFx0MHgwMDAwMDhFOFxuJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX1BBVVNFX09GRlNFVFx0XHQweDAwMDAwOEY4XG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfSU5SQU5HRUVSUl9PRkZTRVRcdFx0MHgwMDAwMDkwOFxuJiM0MztcbiYjNDM7LyogWFhWIE1BQyBSZWdpc3RlciBNYXNrIERlZmluaXRpb25zICovXG4mIzQzOyNkZWZpbmUgWFhWX0dUX1JFU0VUX01BU0tcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgWFhWX1RDX1RYX01BU0tcdFx0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBYWFZfUkNXMV9SWF9NQVNLXHRcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIFhYVl9SQ1cxX0ZDU19NQVNLXHRcdEJJVCgxKVxuJiM0MzsjZGVmaW5lIFhYVl9UQ19GQ1NfTUFTS1x0XHRcdEJJVCgxKVxuJiM0MzsjZGVmaW5lIFhYVl9SWF9CTEtMQ0tfTUFTS1x0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBYWFZfVElDS1JFR19TVEFURU5fTUFTS1x0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBYWFZfR1RXSVpfUkVTRVRfRE9ORVx0XHQoQklUKDApIHwgQklUKDEpKVxuJiM0MzsjZGVmaW5lIFhYVl9NQUpfTUFTS1x0XHRcdEdFTk1BU0soNywgMClcbiYjNDM7I2RlZmluZSBYWFZfTUlOX01BU0tcdFx0XHRHRU5NQVNLKDE1LCA4KVxuJiM0MzsvKiBJUCB2My4yJiM0MzsgZXhwb3NlcyBHVCB3aXphcmQgc3RhdHVzIGJlZm9yZSBvdGhlciByZWdpc3RlciBhY2Nlc3MgKFBHMjEwKS4gKi9cbiYjNDM7I2RlZmluZSBYWFZfSVBfVkVSX0dUV0laX01BSl9NSU5cdDNcbiYjNDM7I2RlZmluZSBYWFZfSVBfVkVSX0dUV0laX01JTl9NSU5cdDJcbiYjNDM7I2RlZmluZSBYWFZfQU5fQ09NUExFVEVfTUFTS1x0XHRCSVQoMilcbiYjNDM7I2RlZmluZSBYWFZfU1RBVF9DT1JFX1NQRUVEX1JUU1dfTUFTS1x0QklUKDEpXG4mIzQzOyNkZWZpbmUgWFhWX1NUQVRfQ09SRV9TUEVFRF8xMEdfTUFTS1x0QklUKDApXG4mIzQzOyNkZWZpbmUgWFhWX1JYX1NUQVRVU19NQVNLXHRcdEJJVCgwKVxuJiM0MztcbiYjNDM7LyogWFhWICgxMEcvMjVHKSBNQUMgc3RhdGlzdGljcyBjb3VudGVycywgdXNlZCB0byBpbmRleCB4eHZfc3RhdF9iYXNlW10uICovXG4mIzQzO2VudW0geHh2X3N0YXQge1xuJiM0MztcdFhYVl9TVEFUX1JYX1RPVEFMX1BBQ0tFVFMgPSAwLFxuJiM0MztcdFhYVl9TVEFUX1JYX1RPVEFMX0dPT0RfUEFDS0VUUyxcbiYjNDM7XHRYWFZfU1RBVF9SWF9UT1RBTF9CWVRFUyxcbiYjNDM7XHRYWFZfU1RBVF9SWF9UT1RBTF9HT09EX0JZVEVTLFxuJiM0MztcdFhYVl9TVEFUX1JYX0JBRF9GQ1MsXG4mIzQzO1x0WFhWX1NUQVRfUlhfSU5SQU5HRUVSUixcbiYjNDM7XHRYWFZfU1RBVF9SWF9NVUxUSUNBU1QsXG4mIzQzO1x0WFhWX1NUQVRfUlhfQlJPQURDQVNULFxuJiM0MztcdFhYVl9TVEFUX1JYX1VOREVSU0laRSxcbiYjNDM7XHRYWFZfU1RBVF9SWF9GUkFHTUVOVCxcbiYjNDM7XHRYWFZfU1RBVF9SWF9KQUJCRVIsXG4mIzQzO1x0WFhWX1NUQVRfUlhfT1ZFUlNJWkUsXG4mIzQzO1x0WFhWX1NUQVRfUlhfUEFVU0UsXG4mIzQzO1x0WFhWX1NUQVRfVFhfVE9UQUxfUEFDS0VUUyxcbiYjNDM7XHRYWFZfU1RBVF9UWF9UT1RBTF9HT09EX1BBQ0tFVFMsXG4mIzQzO1x0WFhWX1NUQVRfVFhfVE9UQUxfQllURVMsXG4mIzQzO1x0WFhWX1NUQVRfVFhfVE9UQUxfR09PRF9CWVRFUyxcbiYjNDM7XHRYWFZfU1RBVF9UWF9CQURfRkNTLFxuJiM0MztcdFhYVl9TVEFUX1RYX0ZSQU1FX0VSUk9SLFxuJiM0MztcdFhYVl9TVEFUX1RYX01VTFRJQ0FTVCxcbiYjNDM7XHRYWFZfU1RBVF9UWF9CUk9BRENBU1QsXG4mIzQzO1x0WFhWX1NUQVRfVFhfUEFVU0UsXG4mIzQzO1x0WFhWX1NUQVRfQ09VTlQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGF4aWVuZXRfY29uZmlnIGF4aWVuZXRfMTBnMjVnX2NvbmZpZztcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBYSUxJTlhfQVhJRU5FVF9YWFZfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHZlbmRvci1zcGVjaWZpYyBYaWxpbnggQVhJIC8gWFhWIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54LyksIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgWGlsaW54IFhYViAxMEcvMjVHIEV0aGVybmV0IFN1YnN5c3RlbSBGUEdBIElQIGNvcmUuIFRoaXMgaGFyZHdhcmUgcmVxdWlyZXMgcGh5c2ljYWwgWGlsaW54L0FNRCBGUEdBL1NvQyBoYXJkd2FyZSBhbmQgY2Fubm90IGJlIHJlYWNoZWQgb3IgZXhlY3V0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDVkNTAyZmMxOTI5ZjczZTBmZWI4MDczOWRiZGUzMmExNzY4ZDhjNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDIyOjA3OjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHh4di1ldGhlcm5ldC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHh4di1ldGhlcm5ldC55YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjJiZTNhZGUxMWQ0NjUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3hsbngseHh2LWV0aGVybmV0LnlhbWwKQEAgLTAsMCAmIzQzOzEsMTA3IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpCiYjNDM7JVlBTUwgMS4yCiYjNDM7LS0tCiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQveGxueCx4eHYtZXRoZXJuZXQueWFtbCMKJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKJiM0MzsKJiM0Mzt0aXRsZTogWGlsaW54IFhYViAxMEcvMjVHIEV0aGVybmV0IFN1YnN5c3RlbQomIzQzOwomIzQzO21haW50YWluZXJzOgomIzQzOyAgLSBSYWRoZXkgU2h5YW0gUGFuZGV5ICZsdDtyYWRoZXkuc2h5YW0ucGFuZGV5QGFtZC5jb20mZ3Q7CiYjNDM7ICAtIFN1cmFqIEd1cHRhICZsdDtzdXJhai5ndXB0YTJAYW1kLmNvbSZndDsKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjoKJiM0MzsgIFRoZSBYaWxpbnggWFhWIEV0aGVybmV0IFN1YnN5c3RlbSBpbXBsZW1lbnRzIGEgMTBHLzI1RyBFdGhlcm5ldCBNQUMgd2l0aCBhbgomIzQzOyAgaW4tY29yZSBQQ1MvUE1BIGRyaXZpbmcgYSBoaWdoLXNwZWVkIHNlcmlhbCB0cmFuc2NlaXZlci4gSXQgc3VwcG9ydHMgdGhlCiYjNDM7ICAxMEdCQVNFLVIgYW5kIDI1R0JBU0UtUiBsaW5lIHJhdGVzLCB3aXRoIDI1RyBvcGVyYXRpb24gZm9sbG93aW5nIHRoZSAyNUcKJiM0MzsgIEV0aGVybmV0IENvbnNvcnRpdW0gc3BlY2lmaWNhdGlvbi4gSXQgaGFzIG5vIGV4dGVybmFsIE1ESU8gUEhZLCBhbmQgaXRzCiYjNDM7ICBwYXlsb2FkIGlzIG1vdmVkIGJ5IGFuIGV4dGVybmFsIEFYSSBETUEgKG9yIG11bHRpY2hhbm5lbCBETUEpIGNvbnRyb2xsZXIKJiM0MzsgIHJlZmVyZW5jZWQgdGhyb3VnaCB0aGUgJiMzNDtkbWFzJiMzNDsgcHJvcGVydHkuCiYjNDM7CiYjNDM7cHJvcGVydGllczoKJiM0MzsgIGNvbXBhdGlibGU6CiYjNDM7ICAgIGNvbnN0OiB4bG54LHh4di1ldGhlcm5ldC0xLjAKJiM0MzsKJiM0MzsgIHJlZzoKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsgICAgZGVzY3JpcHRpb246IE1BQyBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXIgc3BhY2UuCiYjNDM7CiYjNDM7ICBjbG9ja3M6CiYjNDM7ICAgIGl0ZW1zOgomIzQzOyAgICAgIC0gZGVzY3JpcHRpb246IFJYIEFYSTQtU3RyZWFtIGNsb2NrLgomIzQzOyAgICAgIC0gZGVzY3JpcHRpb246IEdUIERSUCBjbG9jay4KJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBBWEk0LUxpdGUgcmVnaXN0ZXIgY2xvY2suCiYjNDM7CiYjNDM7ICBjbG9jay1uYW1lczoKJiM0MzsgICAgaXRlbXM6CiYjNDM7ICAgICAgLSBjb25zdDogcnhfY29yZQomIzQzOyAgICAgIC0gY29uc3Q6IGRycAomIzQzOyAgICAgIC0gY29uc3Q6IHNfYXhpCiYjNDM7CiYjNDM7ICBwaHktbW9kZToKJiM0MzsgICAgZW51bToKJiM0MzsgICAgICAtIDEwZ2Jhc2UtcgomIzQzOyAgICAgIC0gMjVnYmFzZS1yCiYjNDM7CiYjNDM7ICB4bG54LHJ4bWVtOgomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICBTaXplIGluIGJ5dGVzIG9mIHRoZSBSeC9UeCBwYWNrZXQgYnVmZmVyIG1lbW9yeSBidWlsdCBpbnRvIHRoZSBJUC4gSXQgaXMKJiM0MzsgICAgICBmaXhlZCBieSB0aGUgaGFyZHdhcmUgZGVzaWduIGFuZCBib3VuZHMgdGhlIGxhcmdlc3QgZnJhbWUgKGp1bWJvIE1UVSkgdGhlCiYjNDM7ICAgICAgZGV2aWNlIGNhbiBhY2NlcHQuCiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMgomIzQzOwomIzQzOyAgZG1hczoKJiM0MzsgICAgbWluSXRlbXM6IDIKJiM0MzsgICAgbWF4SXRlbXM6IDMyCiYjNDM7ICAgIGRlc2NyaXB0aW9uOiBUWCBhbmQgUlggRE1BIGNoYW5uZWwgcGhhbmRsZS4KJiM0MzsKJiM0MzsgIGRtYS1uYW1lczoKJiM0MzsgICAgaXRlbXM6CiYjNDM7ICAgICAgcGF0dGVybjogJiMzNDteW3RyXXhfY2hhbihbMC05XXwxWzAtNV0pJCYjMzQ7CiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIFNob3VsZCBiZSAmIzM0O3R4X2NoYW4wJiMzNDssICYjMzQ7dHhfY2hhbjEmIzM0OyAuLi4gJiMzNDt0eF9jaGFuMTUmIzM0OyBmb3IgRE1BIFR4IGNoYW5uZWwgYW5kCiYjNDM7ICAgICAgJiMzNDtyeF9jaGFuMCYjMzQ7LCAmIzM0O3J4X2NoYW4xJiMzNDsgLi4uICYjMzQ7cnhfY2hhbjE1JiMzNDsgZm9yIERNQSBSeCBjaGFubmVsLgomIzQzOyAgICBtaW5JdGVtczogMgomIzQzOyAgICBtYXhJdGVtczogMzIKJiM0MzsKJiM0MztyZXF1aXJlZDoKJiM0MzsgIC0gY29tcGF0aWJsZQomIzQzOyAgLSByZWcKJiM0MzsgIC0gY2xvY2tzCiYjNDM7ICAtIGNsb2NrLW5hbWVzCiYjNDM7ICAtIHBoeS1tb2RlCiYjNDM7ICAtIHhsbngscnhtZW0KJiM0MzsgIC0gZG1hcwomIzQzOyAgLSBkbWEtbmFtZXMKJiM0MzsKJiM0MzthbGxPZjoKJiM0MzsgIC0gJHJlZjogL3NjaGVtYXMvbmV0L2V0aGVybmV0LWNvbnRyb2xsZXIueWFtbCMKJiM0MzsKJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAjIFNpbmdsZSBBWEkgRE1BIGNoYW5uZWwgcGFpcgomIzQzOyAgLSB8CiYjNDM7ICAgIGV0aGVybmV0QDgwMDAwMDAwIHsKJiM0MzsgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O3hsbngseHh2LWV0aGVybmV0LTEuMCYjMzQ7OwomIzQzOyAgICAgICAgcmVnID0gJmx0OzB4ODAwMDAwMDAgMHgxMDAwMCZndDs7CiYjNDM7ICAgICAgICBjbG9jay1uYW1lcyA9ICYjMzQ7cnhfY29yZSYjMzQ7LCAmIzM0O2RycCYjMzQ7LCAmIzM0O3NfYXhpJiMzNDs7CiYjNDM7ICAgICAgICBjbG9ja3MgPSAmbHQ7JmFtcDtyeF9jbGsmZ3Q7LCAmbHQ7JmFtcDtkcnBfY2xrJmd0OywgJmx0OyZhbXA7YXhpX2NsayZndDs7CiYjNDM7ICAgICAgICBkbWEtbmFtZXMgPSAmIzM0O3R4X2NoYW4wJiMzNDssICYjMzQ7cnhfY2hhbjAmIzM0OzsKJiM0MzsgICAgICAgIGRtYXMgPSAmbHQ7JmFtcDtheGlfZG1hIDAmZ3Q7LCAmbHQ7JmFtcDtheGlfZG1hIDEmZ3Q7OwomIzQzOyAgICAgICAgcGh5LW1vZGUgPSAmIzM0OzI1Z2Jhc2UtciYjMzQ7OwomIzQzOyAgICAgICAgeGxueCxyeG1lbSA9ICZsdDsweDgwMDAmZ3Q7OwomIzQzOyAgICB9OwomIzQzOyAgIyBNdWx0aWNoYW5uZWwgRE1BIChNQ0RNQSkgd2l0aCBtdWx0aXBsZSBUeC9SeCBjaGFubmVscwomIzQzOyAgLSB8CiYjNDM7ICAgIGV0aGVybmV0QDgwMDEwMDAwIHsKJiM0MzsgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O3hsbngseHh2LWV0aGVybmV0LTEuMCYjMzQ7OwomIzQzOyAgICAgICAgcmVnID0gJmx0OzB4ODAwMTAwMDAgMHgxMDAwMCZndDs7CiYjNDM7ICAgICAgICBjbG9jay1uYW1lcyA9ICYjMzQ7cnhfY29yZSYjMzQ7LCAmIzM0O2RycCYjMzQ7LCAmIzM0O3NfYXhpJiMzNDs7CiYjNDM7ICAgICAgICBjbG9ja3MgPSAmbHQ7JmFtcDtyeF9jbGsmZ3Q7LCAmbHQ7JmFtcDtkcnBfY2xrJmd0OywgJmx0OyZhbXA7YXhpX2NsayZndDs7CiYjNDM7ICAgICAgICBkbWEtbmFtZXMgPSAmIzM0O3R4X2NoYW4wJiMzNDssICYjMzQ7dHhfY2hhbjEmIzM0OywgJiMzNDtyeF9jaGFuMCYjMzQ7LCAmIzM0O3J4X2NoYW4xJiMzNDs7CiYjNDM7ICAgICAgICBkbWFzID0gJmx0OyZhbXA7YXhpX21jZG1hIDAmZ3Q7LCAmbHQ7JmFtcDtheGlfbWNkbWEgMSZndDssCiYjNDM7ICAgICAgICAgICAgICAgJmx0OyZhbXA7YXhpX21jZG1hIDE2Jmd0OywgJmx0OyZhbXA7YXhpX21jZG1hIDE3Jmd0OzsKJiM0MzsgICAgICAgIHBoeS1tb2RlID0gJiMzNDsxMGdiYXNlLXImIzM0OzsKJiM0MzsgICAgICAgIHhsbngscnhtZW0gPSAmbHQ7MHg4MDAwJmd0OzsKJiM0MzsgICAgfTsKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggMGI0MmU4OThmNGQ4ZS4uNGVkYzhhNzMwNGRiMCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTI5ODYxLDYgJiM0MzsyOTg2MSw3IEBAIFhJTElOWCBBWEkgRVRIRVJORVQgRFJJVkVSCiBNOglSYWRoZXkgU2h5YW0gUGFuZGV5ICZsdDtyYWRoZXkuc2h5YW0ucGFuZGV5QGFtZC5jb20mZ3Q7CiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3hsbngsYXhpLWV0aGVybmV0LnlhbWwKJiM0MztGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3hsbngseHh2LWV0aGVybmV0LnlhbWwKIEY6CWRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldCoKIAogWElMSU5YIENBTiBEUklWRVIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9NYWtlZmlsZQppbmRleCA3ZDdkYzE3NzE0MjNlLi5kYjkwZTY5MWZlYzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L01ha2VmaWxlCkBAIC02LDUgJiM0Mzs2LDYgQEAKIGxsX3RlbWFjLW9ianMgOj0gbGxfdGVtYWNfbWFpbi5vIGxsX3RlbWFjX21kaW8ubwogb2JqLSQoQ09ORklHX1hJTElOWF9MTF9URU1BQykgJiM0Mzs9IGxsX3RlbWFjLm8KIG9iai0kKENPTkZJR19YSUxJTlhfRU1BQ0xJVEUpICYjNDM7PSB4aWxpbnhfZW1hY2xpdGUubwoteGlsaW54X2VtYWMtb2JqcyA6PSB4aWxpbnhfYXhpZW5ldF9tYWluLm8geGlsaW54X2F4aWVuZXRfbWRpby5vCiYjNDM7eGlsaW54X2VtYWMtb2JqcyA6PSB4aWxpbnhfYXhpZW5ldF9tYWluLm8geGlsaW54X2F4aWVuZXRfbWRpby5vIFwKJiM0MzsJCSAgICB4aWxpbnhfYXhpZW5ldF94eHYubwogb2JqLSQoQ09ORklHX1hJTElOWF9BWElfRU1BQykgJiM0Mzs9IHhpbGlueF9lbWFjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0LmgKaW5kZXggZmNkM2FhZWYyN2ZjMy4uMmVhMDg2ZmM0ZGMzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0LmgKQEAgLTEwLDYgJiM0MzsxMCw3IEBACiAjZGVmaW5lIFhJTElOWF9BWElFTkVUX0gKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2RpbS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbnRlcnJ1cHQuaCZndDsKQEAgLTE3LDYgJiM0MzsxOCw4IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcGh5bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJiMzNDt4aWxpbnhfYXhpZW5ldF94eHYuaCYjMzQ7CiYjNDM7CiAvKiBQYWNrZXQgc2l6ZSBpbmZvICovCiAjZGVmaW5lIFhBRV9IRFJfU0laRQkJCTE0IC8qIFNpemUgb2YgRXRoZXJuZXQgaGVhZGVyICovCiAjZGVmaW5lIFhBRV9UUkxfU0laRQkJCSA0IC8qIFNpemUgb2YgRXRoZXJuZXQgdHJhaWxlciAoRkNTKSAqLwpAQCAtNTQ1LDYgJiM0Mzs1NDgsOSBAQCBzdHJ1Y3Qgc2tidWZfZG1hX2Rlc2NyaXB0b3IgewogICogQHR4X3JpbmdfdGFpbDogVFggc2tiIHJpbmcgYnVmZmVyIHRhaWwgaW5kZXguCiAgKiBAcnhfcmluZ19oZWFkOiBSWCBza2IgcmluZyBidWZmZXIgaGVhZCBpbmRleC4KICAqIEByeF9yaW5nX3RhaWw6IFJYIHNrYiByaW5nIGJ1ZmZlciB0YWlsIGluZGV4LgomIzQzOyAqIEB4eHZfaXBfdmVyc2lvbjogWFhWIElQIHZlcnNpb24uCiYjNDM7ICogQHh4dl9zdGF0X2Jhc2U6IFNvZnR3YXJlIGFjY3VtdWxhdG9ycyBmb3IgdGhlIFhYViBjbGVhci1vbi10aWNrIGNvdW50ZXJzLgomIzQzOyAqIEBheGllbmV0X2NvbmZpZzogTUFDLXR5cGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBhbmQgb3BlcmF0aW9ucy4KICAqLwogc3RydWN0IGF4aWVuZXRfbG9jYWwgewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwpAQCAtNTk4LDYgJiM0Mzs2MDQsNyBAQCBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCB7CiAKIAl1NjQgaHdfc3RhdF9iYXNlW1NUQVRfQ09VTlRdOwogCXUzMiBod19sYXN0X2NvdW50ZXJbU1RBVF9DT1VOVF07CiYjNDM7CXU2NCB4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX0NPVU5UXTsKIAlzZXFjb3VudF9tdXRleF90IGh3X3N0YXRzX3NlcWNvdW50OwogCXN0cnVjdCBtdXRleCBzdGF0c19sb2NrOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgc3RhdHNfd29yazsKQEAgLTYyNiw4ICYjNDM7NjMzLDg4IEBAIHN0cnVjdCBheGllbmV0X2xvY2FsIHsKIAlpbnQgdHhfcmluZ190YWlsOwogCWludCByeF9yaW5nX2hlYWQ7CiAJaW50IHJ4X3JpbmdfdGFpbDsKJiM0MzsJdTMyIHh4dl9pcF92ZXJzaW9uOwomIzQzOwljb25zdCBzdHJ1Y3QgYXhpZW5ldF9jb25maWcgKmF4aWVuZXRfY29uZmlnOwogfTsKIAomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBheGllbmV0X2NvbmZpZyAtIE1BQy10eXBlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gYW5kIG9wZXJhdGlvbnMKJiM0MzsgKiBAbWRpbzogTUFDIGhhcyBhbiBNRElPIGJ1cyBmb3IgZXh0ZXJuYWwgUEhZIG1hbmFnZW1lbnQKJiM0MzsgKiBAbWFjX2lycTogTUFDIGhhcyBhIGRlZGljYXRlZCBjb3JlIGludGVycnVwdAomIzQzOyAqIEBsZWdhY3lfZG1hOiBNQUMgc3VwcG9ydHMgdGhlIGxlZ2FjeSAobm9uLWRtYWVuZ2luZSkgRE1BIG1vZGUKJiM0MzsgKiBAdWNfZmlsdGVyOiBNQUMgaGFzIHVuaWNhc3QgYWRkcmVzcyBmaWx0ZXIgcmVnaXN0ZXJzCiYjNDM7ICogQG1jX2ZpbHRlcjogTUFDIGhhcyBtdWx0aWNhc3QgYWRkcmVzcyBmaWx0ZXIgcmVnaXN0ZXJzCiYjNDM7ICogQHZsYW46IE1BQyBzdXBwb3J0cyBWTEFOIGZyYW1lcyBieSBkZWZhdWx0CiYjNDM7ICogQGp1bWJvOiBNQUMgc3VwcG9ydHMganVtYm8gZnJhbWVzCiYjNDM7ICogQGRtYV90eF9jc3VtOiBNQUMgc3VwcG9ydHMgVFggY2hlY2tzdW0gb2ZmbG9hZAomIzQzOyAqIEBzd19wYWRkaW5nOiBTaG9ydCBmcmFtZXMgbXVzdCBiZSBwYWRkZWQgaW4gc29mdHdhcmUgYmVmb3JlIHRyYW5zbWl0CiYjNDM7ICogQGludGVybmFsX3BjczogTUFDIGFsd2F5cyBkcml2ZXMgYW4gaW50ZXJuYWwgUENTCiYjNDM7ICogQHJlZ3NfbjogTnVtYmVyIG9mIE1BQyByZWdpc3RlcnMgZXhwb3NlZCB0aHJvdWdoIGV0aHRvb2wgLWQKJiM0MzsgKiBAY2xrX2luaXQ6IENhbGxiYWNrIHRvIGdldCBhbmQgZW5hYmxlIHRoZSBNQUMtc3BlY2lmaWMgY2xvY2tzCiYjNDM7ICogQHNldG9wdGlvbnM6IENhbGxiYWNrIHRvIHByb2dyYW0gTUFDIGhhcmR3YXJlIG9wdGlvbnMKJiM0MzsgKiBAcHJvYmVfaW5pdDogQ2FsbGJhY2sgZm9yIE1BQy1zcGVjaWZpYyBwcm9iZS10aW1lIGluaXQsIG9yIE5VTEwgaWYgdW51c2VkCiYjNDM7ICogQGd0X3Jlc2V0OiBDYWxsYmFjayB0byByZXNldCB0aGUgc2VyaWFsIHRyYW5zY2VpdmVyIChHVCksIG9yIE5VTEwgaWYgdW51c2VkCiYjNDM7ICogQG1hY19pbml0OiBDYWxsYmFjayBmb3IgTUFDLXNwZWNpZmljIGJyaW5nLXVwIGFmdGVyIHRoZSBETUEgcmVzZXQKJiM0MzsgKiBAbWFjX2xpbmtfdXA6IENhbGxiYWNrIHRvIHByb2dyYW0gbGluayBzcGVlZCBhbmQgcGF1c2Ugb24gbGluayB1cCwgb3IgTlVMTAomIzQzOyAqIEBnZXRfcmVnczogQ2FsbGJhY2sgdG8gZHVtcCB0aGUgTUFDIHJlZ2lzdGVycyBmb3IgZXRodG9vbCAtZAomIzQzOyAqIEBwaHlsaW5rX3NldF9jYXBzOiBDYWxsYmFjayB0byBzZXQgcGh5bGluayBNQUMgY2FwYWJpbGl0aWVzCiYjNDM7ICogQHBjc19vcHM6IHBoeWxpbmsgUENTIG9wZXJhdGlvbnMgZm9yIHRoaXMgTUFDLCBvciBOVUxMIGlmIHVudXNlZAomIzQzOyAqIEBzdGF0c191cGRhdGU6IENhbGxiYWNrIHRvIGxhdGNoL2FjY3VtdWxhdGUgdGhlIHBlcmlvZGljIE1BQyBjb3VudGVycwomIzQzOyAqIEBnZXRfc3RhdHM2NDogQ2FsbGJhY2sgdG8gcmVhZCBNQUMgY291bnRlcnMgaW50byBydG5sX2xpbmtfc3RhdHM2NAomIzQzOyAqIEBnZXRfZXRodG9vbF9zdGF0czogQ2FsbGJhY2sgdG8gcmVhZCBNQUMgY291bnRlcnMgZm9yIGV0aHRvb2wgLVMKJiM0MzsgKiBAZ2V0X3N0cmluZ3M6IENhbGxiYWNrIHRvIGZpbGwgdGhlIGV0aHRvb2wgLVMgc3RhdGlzdGljIG5hbWUgc3RyaW5ncwomIzQzOyAqIEBnZXRfc3NldF9jb3VudDogQ2FsbGJhY2sgcmV0dXJuaW5nIHRoZSBudW1iZXIgb2YgZXRodG9vbCAtUyBzdGF0aXN0aWNzCiYjNDM7ICogQGdldF9wYXVzZV9zdGF0czogQ2FsbGJhY2sgdG8gcmVhZCBNQUMgcGF1c2UtZnJhbWUgY291bnRlcnMKJiM0MzsgKiBAZ2V0X2V0aF9tYWNfc3RhdHM6IENhbGxiYWNrIHRvIHJlYWQgSUVFRSA4MDIuMyBNQUMgY291bnRlcnMKJiM0MzsgKiBAZ2V0X2V0aF9jdHJsX3N0YXRzOiBDYWxsYmFjayB0byByZWFkIE1BQy1jb250cm9sIGZyYW1lIGNvdW50ZXJzLCBvciBOVUxMCiYjNDM7ICoJCQlpZiB0aGUgTUFDIGV4cG9zZXMgbm8gY29udHJvbC1mcmFtZSBjb3VudGVycwomIzQzOyAqIEBnZXRfcm1vbl9zdGF0czogQ2FsbGJhY2sgdG8gcmVhZCBSTU9OIGNvdW50ZXJzIGFuZCBoaXN0b2dyYW0gcmFuZ2VzCiYjNDM7ICovCiYjNDM7c3RydWN0IGF4aWVuZXRfY29uZmlnIHsKJiM0MzsJYm9vbCBtZGlvOwomIzQzOwlib29sIG1hY19pcnE7CiYjNDM7CWJvb2wgbGVnYWN5X2RtYTsKJiM0MzsJYm9vbCB1Y19maWx0ZXI7CiYjNDM7CWJvb2wgbWNfZmlsdGVyOwomIzQzOwlib29sIHZsYW47CiYjNDM7CWJvb2wganVtYm87CiYjNDM7CWJvb2wgZG1hX3R4X2NzdW07CiYjNDM7CWJvb2wgc3dfcGFkZGluZzsKJiM0MzsJYm9vbCBpbnRlcm5hbF9wY3M7CiYjNDM7CXVuc2lnbmVkIGludCByZWdzX247CiYjNDM7CWludCAoKmNsa19pbml0KShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApOwomIzQzOwl2b2lkICgqc2V0b3B0aW9ucykoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBvcHRpb25zKTsKJiM0MzsJdm9pZCAoKnByb2JlX2luaXQpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCk7CiYjNDM7CXZvaWQgKCpndF9yZXNldCkoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKTsKJiM0MzsJaW50ICgqbWFjX2luaXQpKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKJiM0MzsJdm9pZCAoKm1hY19saW5rX3VwKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IHNwZWVkLAomIzQzOwkJCSAgICBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKTsKJiM0MzsJdm9pZCAoKmdldF9yZWdzKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsIHUzMiAqZGF0YSk7CiYjNDM7CXZvaWQgKCpwaHlsaW5rX3NldF9jYXBzKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsCiYjNDM7CQkJCSBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyk7CiYjNDM7CWNvbnN0IHN0cnVjdCBwaHlsaW5rX3Bjc19vcHMgKnBjc19vcHM7CiYjNDM7CXZvaWQgKCpzdGF0c191cGRhdGUpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCk7CiYjNDM7CXZvaWQgKCpnZXRfc3RhdHM2NCkoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLAomIzQzOwkJCSAgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKTsKJiM0MzsJdm9pZCAoKmdldF9ldGh0b29sX3N0YXRzKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsIHU2NCAqZGF0YSk7CiYjNDM7CXZvaWQgKCpnZXRfc3RyaW5ncykodTggKmRhdGEpOwomIzQzOwlpbnQgKCpnZXRfc3NldF9jb3VudCkodm9pZCk7CiYjNDM7CXZvaWQgKCpnZXRfcGF1c2Vfc3RhdHMpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwKJiM0MzsJCQkJc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKTsKJiM0MzsJdm9pZCAoKmdldF9ldGhfbWFjX3N0YXRzKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsCiYjNDM7CQkJCSAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKTsKJiM0MzsJdm9pZCAoKmdldF9ldGhfY3RybF9zdGF0cykoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLAomIzQzOwkJCQkgICBzdHJ1Y3QgZXRodG9vbF9ldGhfY3RybF9zdGF0cyAqY3RybF9zdGF0cyk7CiYjNDM7CXZvaWQgKCpnZXRfcm1vbl9zdGF0cykoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqcGNzX3RvX2F4aWVuZXRfbG9jYWwoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gY29udGFpbmVyX29mKHBjcywgc3RydWN0IGF4aWVuZXRfbG9jYWwsIHBjcyk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBzdHJ1Y3QgYXhpZW5ldF9vcHRpb24gLSBVc2VkIHRvIHNldCBheGkgZXRoZXJuZXQgaGFyZHdhcmUgb3B0aW9ucwogICogQG9wdDoJT3B0aW9uIHRvIGJlIHNldC4KQEAgLTc0MSw0ICYjNDM7ODI4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGF4aWVuZXRfZG1hX291dF9hZGRyKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwgb2ZmX3QgcmVnLAogaW50IGF4aWVuZXRfbWRpb19zZXR1cChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApOwogdm9pZCBheGllbmV0X21kaW9fdGVhcmRvd24oc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKTsKIAomIzQzOy8qIFJNT04gaGlzdG9ncmFtIHJhbmdlcyBzaGFyZWQgYnkgYWxsIE1BQyB0eXBlcyAqLwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgYXhpZW5ldF9ybW9uX3Jhbmdlc1tdOwomIzQzOwogI2VuZGlmIC8qIFhJTElOWF9BWElfRU5FVF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uYwppbmRleCAxNzIyYjcwMzhmMzQwLi41OGUyMmYwZmQ3Yzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmMKQEAgLTMzLDYgJiM0MzszMyw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvb2ZfaXJxLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2ZfYWRkcmVzcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX2RldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wcm9wZXJ0eS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21hdGg2NC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwpAQCAtNjUsMTYgJiM0Mzs2Niw2IEBACiAKIHN0YXRpYyB2b2lkIGF4aWVuZXRfcnhfc3VibWl0X2Rlc2Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwogCi0vKiBNYXRjaCB0YWJsZSBmb3Igb2ZfcGxhdGZvcm0gYmluZGluZyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXhpZW5ldF9vZl9tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAmIzM0O3hsbngsYXhpLWV0aGVybmV0LTEuMDAuYSYjMzQ7LCB9LAotCXsgLmNvbXBhdGlibGUgPSAmIzM0O3hsbngsYXhpLWV0aGVybmV0LTEuMDEuYSYjMzQ7LCB9LAotCXsgLmNvbXBhdGlibGUgPSAmIzM0O3hsbngsYXhpLWV0aGVybmV0LTIuMDEuYSYjMzQ7LCB9LAotCXt9LAotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXhpZW5ldF9vZl9tYXRjaCk7Ci0KIC8qIE9wdGlvbiB0YWJsZSBmb3Igc2V0dGluZyB1cCBBeGkgRXRoZXJuZXQgaGFyZHdhcmUgb3B0aW9ucyAqLwogc3RhdGljIHN0cnVjdCBheGllbmV0X29wdGlvbiBheGllbmV0X29wdGlvbnNbXSA9IHsKIAkvKiBUdXJuIG9uIGp1bWJvIHBhY2tldCBzdXBwb3J0IGZvciBib3RoIFJ4IGFuZCBUeCAqLwpAQCAtNDE5LDYgJiM0Mzs0MTAsOSBAQCBzdGF0aWMgdm9pZCBheGllbmV0X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmRldi0mZ3Q7ZGV2X2FkZHIpKQogCQlldGhfaHdfYWRkcl9yYW5kb20obmRldik7CiAKJiM0MzsJaWYgKCFscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O3VjX2ZpbHRlcikKJiM0MzsJCXJldHVybjsKJiM0MzsKIAkvKiBTZXQgdXAgdW5pY2FzdCBNQUMgYWRkcmVzcyBmaWx0ZXIgc2V0IGl0cyBtYWMgYWRkcmVzcyAqLwogCWF4aWVuZXRfaW93KGxwLCBYQUVfVUFXMF9PRkZTRVQsCiAJCSAgICAobmRldi0mZ3Q7ZGV2X2FkZHJbMF0pIHwKQEAgLTQ2OCw2ICYjNDM7NDYyLDkgQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJdTMyIHJlZywgYWYwcmVnLCBhZjFyZWc7CiAJc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CiAKJiM0MzsJaWYgKCFscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O21jX2ZpbHRlcikKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlyZWcgPSBheGllbmV0X2lvcihscCwgWEFFX0ZNSV9PRkZTRVQpOwogCXJlZyAmYW1wOz0gflhBRV9GTUlfUE1fTUFTSzsKIAlpZiAobmRldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX1BST01JU0MpCkBAIC01NzYsMTYgJiM0Mzs1NzMsMzEgQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9zdGF0c191cGRhdGUoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLCBib29sIHJlc2V0KQogCXdyaXRlX3NlcWNvdW50X2VuZCgmYW1wO2xwLSZndDtod19zdGF0c19zZXFjb3VudCk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBheGllbmV0XzFnX3N0YXRzX3VwZGF0ZSAtIFJlZnJlc2ggMUcgTUFDIGhhcmR3YXJlIHN0YXRpc3RpY3MKJiM0MzsgKiBAbHA6CQlQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZQomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfc3RhdHNfdXBkYXRlKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCkKJiM0Mzt7CiYjNDM7CWF4aWVuZXRfc3RhdHNfdXBkYXRlKGxwLCBmYWxzZSk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgYXhpZW5ldF9yZWZyZXNoX3N0YXRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF4aWVuZXRfbG9jYWwsCiAJCQkJCQlzdGF0c193b3JrLndvcmspOwogCi0JbXV0ZXhfbG9jaygmYW1wO2xwLSZndDtzdGF0c19sb2NrKTsKLQlheGllbmV0X3N0YXRzX3VwZGF0ZShscCwgZmFsc2UpOwotCW11dGV4X3VubG9jaygmYW1wO2xwLSZndDtzdGF0c19sb2NrKTsKJiM0MzsJaWYgKGxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7c3RhdHNfdXBkYXRlKSB7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7bHAtJmd0O3N0YXRzX2xvY2spOwomIzQzOwkJbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtzdGF0c191cGRhdGUobHApOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7bHAtJmd0O3N0YXRzX2xvY2spOwomIzQzOwl9CiAKLQkvKiBKdXN0IGxlc3MgdGhhbiAyXjMyIGJ5dGVzIGF0IDIuNSBHQml0L3MgKi8KJiM0MzsJLyogUmUtYXJtIHRoZSBwb2xsIGJlZm9yZSBhbnkgY291bnRlciBjYW4gb3ZlcmZsb3cgYmV0d2VlbiB1cGRhdGVzOiB0aGUKJiM0MzsJICogMUcgYnl0ZSBjb3VudGVyIHJlYWNoZXMganVzdCB1bmRlciAyXjMyIGluIHRoaXMgaW50ZXJ2YWwgYXQgMi41IEdiaXQvcywKJiM0MzsJICogYW5kIHRoZSBYWFYgaW50ZXJuYWwgYWNjdW11bGF0b3JzIG11c3QgYmUgbGF0Y2hlZCAodmlhIFRJQ0sgaW4KJiM0MzsJICogYXhpZW5ldF94eHZfc3RhdHNfdXBkYXRlKCkpIGJlZm9yZSB0aGV5IHNhdHVyYXRlIGF0IGxpbmUgcmF0ZS4KJiM0MzsJICovCiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7bHAtJmd0O3N0YXRzX3dvcmssIDEzICogSFopOwogfQogCkBAIC01OTQsNyAmIzQzOzYwNiwxNiBAQCBzdGF0aWMgaW50IF9fYXhpZW5ldF9kZXZpY2VfcmVzZXQoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKQogCXUzMiB2YWx1ZTsKIAlpbnQgcmV0OwogCi0JLyogU2F2ZSBzdGF0aXN0aWNzIGNvdW50ZXJzIGluIGNhc2UgdGhleSB3aWxsIGJlIHJlc2V0ICovCiYjNDM7CS8qIFNhdmUgc3RhdGlzdGljcyBjb3VudGVycyBpbiBjYXNlIHRoZXkgd2lsbCBiZSByZXNldC4KJiM0MzsJICoKJiM0MzsJICogVGhlIFhBRV9GRUFUVVJFX1NUQVRTIGJsb2NrcyBpbiB0aGlzIGZ1bmN0aW9uIHJlYWQgdGhlIFRFTUFDCiYjNDM7CSAqIHN0YXRpc3RpY3MgcmVnaXN0ZXJzIGF0IFhBRV9TVEFUU19PRkZTRVQsIGkuZS4gdGhleSBhc3N1bWUgdGhlIDFHCiYjNDM7CSAqIGNvdW50ZXIgbGF5b3V0LiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBfX2F4aWVuZXRfZGV2aWNlX3Jlc2V0KCkgaXMKJiM0MzsJICogb25seSByZWFjaGVkIG9uIHRoZSBsZWdhY3kgKG5vbi1kbWFlbmdpbmUpIERNQSBwYXRoLCB3aGljaCB0aGUKJiM0MzsJICogbGVnYWN5X2RtYSBjYXBhYmlsaXR5IHJlc3RyaWN0cyB0byB0aGUgMUcgTUFDLiBNQUNzIHRoYXQgdXNlIHRoZWlyCiYjNDM7CSAqIG93biBzdGF0aXN0aWNzIG1lY2hhbmlzbSAoZS5nLiBYWFYsIHdoaWNoIGlzIGRtYWVuZ2luZS1vbmx5KSBuZXZlcgomIzQzOwkgKiBleGVjdXRlIHRoaXMgcGF0aC4KJiM0MzsJICovCiAJbXV0ZXhfbG9jaygmYW1wO2xwLSZndDtzdGF0c19sb2NrKTsKIAlpZiAobHAtJmd0O2ZlYXR1cmVzICZhbXA7IFhBRV9GRUFUVVJFX1NUQVRTKQogCQlheGllbmV0X3N0YXRzX3VwZGF0ZShscCwgdHJ1ZSk7CkBAIC02OTQsNiAmIzQzOzcxNSwzMiBAQCBzdGF0aWMgdm9pZCBheGllbmV0X2RtYV9zdG9wKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCkKIAlheGllbmV0X3VubG9ja19taWkobHApOwogfQogCiYjNDM7LyoqCiYjNDM7ICogYXhpZW5ldF8xZ19tYWNfaW5pdCAtIDFHIE1BQy1zcGVjaWZpYyBicmluZy11cCBhZnRlciB0aGUgRE1BIHJlc2V0CiYjNDM7ICogQG5kZXY6CVBvaW50ZXIgdG8gdGhlIG5ldF9kZXZpY2Ugc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIG51bWJlciBvdGhlcndpc2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBheGllbmV0XzFnX21hY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CXUzMiBheGllbmV0X3N0YXR1czsKJiM0MzsKJiM0MzsJYXhpZW5ldF9zdGF0dXMgPSBheGllbmV0X2lvcihscCwgWEFFX1JDVzFfT0ZGU0VUKTsKJiM0MzsJYXhpZW5ldF9zdGF0dXMgJmFtcDs9IH5YQUVfUkNXMV9SWF9NQVNLOwomIzQzOwlheGllbmV0X2lvdyhscCwgWEFFX1JDVzFfT0ZGU0VULCBheGllbmV0X3N0YXR1cyk7CiYjNDM7CiYjNDM7CWF4aWVuZXRfc3RhdHVzID0gYXhpZW5ldF9pb3IobHAsIFhBRV9JUF9PRkZTRVQpOwomIzQzOwlpZiAoYXhpZW5ldF9zdGF0dXMgJmFtcDsgWEFFX0lOVF9SWFJKRUNUX01BU0spCiYjNDM7CQlheGllbmV0X2lvdyhscCwgWEFFX0lTX09GRlNFVCwgWEFFX0lOVF9SWFJKRUNUX01BU0spOwomIzQzOwlheGllbmV0X2lvdyhscCwgWEFFX0lFX09GRlNFVCwgbHAtJmd0O2V0aF9pcnEgJmd0OyAwID8KJiM0MzsJCSAgICBYQUVfSU5UX1JFQ1ZfRVJST1JfTUFTSyA6IDApOwomIzQzOwomIzQzOwlheGllbmV0X2lvdyhscCwgWEFFX0ZDQ19PRkZTRVQsIFhBRV9GQ0NfRkNSWF9NQVNLKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBheGllbmV0X2RldmljZV9yZXNldCAtIFJlc2V0IGFuZCBpbml0aWFsaXplIHRoZSBBeGkgRXRoZXJuZXQgaGFyZHdhcmUuCiAgKiBAbmRldjoJUG9pbnRlciB0byB0aGUgbmV0X2RldmljZSBzdHJ1Y3R1cmUKQEAgLTcwOSwxOSAmIzQzOzc1NiwyMyBAQCBzdGF0aWMgdm9pZCBheGllbmV0X2RtYV9zdG9wKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCkKICAqLwogc3RhdGljIGludCBheGllbmV0X2RldmljZV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKLQl1MzIgYXhpZW5ldF9zdGF0dXM7CiAJc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CiAJaW50IHJldDsKIAomIzQzOwlpZiAobHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtndF9yZXNldCkKJiM0MzsJCWxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7Z3RfcmVzZXQobHApOwomIzQzOwogCWxwLSZndDttYXhfZnJtX3NpemUgPSBYQUVfTUFYX1ZMQU5fRlJBTUVfU0laRTsKLQlscC0mZ3Q7b3B0aW9ucyB8PSBYQUVfT1BUSU9OX1ZMQU47CiYjNDM7CiYjNDM7CWlmIChscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O3ZsYW4pCiYjNDM7CQlscC0mZ3Q7b3B0aW9ucyB8PSBYQUVfT1BUSU9OX1ZMQU47CiAJbHAtJmd0O29wdGlvbnMgJmFtcDs9ICh+WEFFX09QVElPTl9KVU1CTyk7CiAKIAlpZiAobmRldi0mZ3Q7bXR1ICZndDsgWEFFX01UVSAmYW1wOyZhbXA7IG5kZXYtJmd0O210dSAmbHQ7PSBYQUVfSlVNQk9fTVRVKSB7CiAJCWxwLSZndDttYXhfZnJtX3NpemUgPSBuZGV2LSZndDttdHUgJiM0MzsgVkxBTl9FVEhfSExFTiAmIzQzOwogCQkJCQlYQUVfVFJMX1NJWkU7CiAKLQkJaWYgKGxwLSZndDttYXhfZnJtX3NpemUgJmx0Oz0gbHAtJmd0O3J4bWVtKQomIzQzOwkJaWYgKGxwLSZndDttYXhfZnJtX3NpemUgJmx0Oz0gbHAtJmd0O3J4bWVtICZhbXA7JmFtcDsgbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtqdW1ibykKIAkJCWxwLSZndDtvcHRpb25zIHw9IFhBRV9PUFRJT05fSlVNQk87CiAJfQogCkBAIC03MzgsMjYgJiM0Mzs3ODksMTggQEAgc3RhdGljIGludCBheGllbmV0X2RldmljZV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAkJfQogCX0KIAotCWF4aWVuZXRfc3RhdHVzID0gYXhpZW5ldF9pb3IobHAsIFhBRV9SQ1cxX09GRlNFVCk7Ci0JYXhpZW5ldF9zdGF0dXMgJmFtcDs9IH5YQUVfUkNXMV9SWF9NQVNLOwotCWF4aWVuZXRfaW93KGxwLCBYQUVfUkNXMV9PRkZTRVQsIGF4aWVuZXRfc3RhdHVzKTsKLQotCWF4aWVuZXRfc3RhdHVzID0gYXhpZW5ldF9pb3IobHAsIFhBRV9JUF9PRkZTRVQpOwotCWlmIChheGllbmV0X3N0YXR1cyAmYW1wOyBYQUVfSU5UX1JYUkpFQ1RfTUFTSykKLQkJYXhpZW5ldF9pb3cobHAsIFhBRV9JU19PRkZTRVQsIFhBRV9JTlRfUlhSSkVDVF9NQVNLKTsKLQlheGllbmV0X2lvdyhscCwgWEFFX0lFX09GRlNFVCwgbHAtJmd0O2V0aF9pcnEgJmd0OyAwID8KLQkJICAgIFhBRV9JTlRfUkVDVl9FUlJPUl9NQVNLIDogMCk7Ci0KLQlheGllbmV0X2lvdyhscCwgWEFFX0ZDQ19PRkZTRVQsIFhBRV9GQ0NfRkNSWF9NQVNLKTsKJiM0MzsJcmV0ID0gbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDttYWNfaW5pdChuZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiAKIAkvKiBTeW5jIGRlZmF1bHQgb3B0aW9ucyB3aXRoIEhXIGJ1dCBsZWF2ZSByZWNlaXZlciBhbmQKIAkgKiB0cmFuc21pdHRlciBkaXNhYmxlZC4KIAkgKi8KLQlheGllbmV0X3NldG9wdGlvbnMobmRldiwgbHAtJmd0O29wdGlvbnMgJmFtcDsKLQkJCSAgIH4oWEFFX09QVElPTl9UWEVOIHwgWEFFX09QVElPTl9SWEVOKSk7CiYjNDM7CWxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7c2V0b3B0aW9ucyhuZGV2LCBscC0mZ3Q7b3B0aW9ucyAmYW1wOwomIzQzOwkJCQkgICAgICAgfihYQUVfT1BUSU9OX1RYRU4gfCBYQUVfT1BUSU9OX1JYRU4pKTsKIAlheGllbmV0X3NldF9tYWNfYWRkcmVzcyhuZGV2LCBOVUxMKTsKIAlheGllbmV0X3NldF9tdWx0aWNhc3RfbGlzdChuZGV2KTsKLQlheGllbmV0X3NldG9wdGlvbnMobmRldiwgbHAtJmd0O29wdGlvbnMpOwomIzQzOwlscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O3NldG9wdGlvbnMobmRldiwgbHAtJmd0O29wdGlvbnMpOwogCiAJbmV0aWZfdHJhbnNfdXBkYXRlKG5kZXYpOwogCkBAIC05MTUsNiAmIzQzOzk1OCwxMyBAQCBheGllbmV0X3N0YXJ0X3htaXRfZG1hZW5naW5lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCWludCBzZ19sZW47CiAJaW50IHJldDsKIAomIzQzOwlpZiAobHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtzd19wYWRkaW5nICZhbXA7JmFtcDsgZXRoX3NrYl9wYWQoc2tiKSkgewomIzQzOwkJLyogUGFkIHNob3J0IGZyYW1lczsgdGhlIE1BQyBkb2VzIG5vdCBhcHBlbmQgRXRoZXJuZXQgcGFkZGluZy4gKi8KJiM0MzsJCW5kZXYtJmd0O3N0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7OwomIzQzOwkJbmRldi0mZ3Q7c3RhdHMudHhfZXJyb3JzJiM0MzsmIzQzOzsKJiM0MzsJCXJldHVybiBORVRERVZfVFhfT0s7CiYjNDM7CX0KJiM0MzsKIAlkbWFfZGV2ID0gbHAtJmd0O3R4X2NoYW4tJmd0O2RldmljZTsKIAlzZ19sZW4gPSBza2Jfc2hpbmZvKHNrYiktJmd0O25yX2ZyYWdzICYjNDM7IDE7CiAJaWYgKENJUkNfU1BBQ0UobHAtJmd0O3R4X3JpbmdfaGVhZCwgbHAtJmd0O3R4X3JpbmdfdGFpbCwgVFhfQkRfTlVNX01BWCkgJmx0Oz0gMSkgewpAQCAtOTM5LDE5ICYjNDM7OTg5LDIxIEBAIGF4aWVuZXRfc3RhcnRfeG1pdF9kbWFlbmdpbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJCWdvdG8geG1pdF9lcnJvcl9kcm9wX3NrYjsKIAogCS8qIEZpbGwgdXAgYXBwIGZpZWxkcyBmb3IgY2hlY2tzdW0gKi8KLQlpZiAoc2tiLSZndDtpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewotCQlpZiAobHAtJmd0O2ZlYXR1cmVzICZhbXA7IFhBRV9GRUFUVVJFX0ZVTExfVFhfQ1NVTSkgewotCQkJLyogVHggRnVsbCBDaGVja3N1bSBPZmZsb2FkIEVuYWJsZWQgKi8KLQkJCWFwcF9tZXRhZGF0YVswXSB8PSAyOwotCQl9IGVsc2UgaWYgKGxwLSZndDtmZWF0dXJlcyAmYW1wOyBYQUVfRkVBVFVSRV9QQVJUSUFMX1RYX0NTVU0pIHsKLQkJCWNzdW1fc3RhcnRfb2ZmID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTsKLQkJCWNzdW1faW5kZXhfb2ZmID0gY3N1bV9zdGFydF9vZmYgJiM0Mzsgc2tiLSZndDtjc3VtX29mZnNldDsKLQkJCS8qIFR4IFBhcnRpYWwgQ2hlY2tzdW0gT2ZmbG9hZCBFbmFibGVkICovCi0JCQlhcHBfbWV0YWRhdGFbMF0gfD0gMTsKLQkJCWFwcF9tZXRhZGF0YVsxXSA9IChjc3VtX3N0YXJ0X29mZiAmbHQ7Jmx0OyAxNikgfCBjc3VtX2luZGV4X29mZjsKJiM0MzsJaWYgKGxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7ZG1hX3R4X2NzdW0pIHsKJiM0MzsJCWlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CiYjNDM7CQkJaWYgKGxwLSZndDtmZWF0dXJlcyAmYW1wOyBYQUVfRkVBVFVSRV9GVUxMX1RYX0NTVU0pIHsKJiM0MzsJCQkJLyogVHggRnVsbCBDaGVja3N1bSBPZmZsb2FkIEVuYWJsZWQgKi8KJiM0MzsJCQkJYXBwX21ldGFkYXRhWzBdIHw9IDI7CiYjNDM7CQkJfSBlbHNlIGlmIChscC0mZ3Q7ZmVhdHVyZXMgJmFtcDsgWEFFX0ZFQVRVUkVfUEFSVElBTF9UWF9DU1VNKSB7CiYjNDM7CQkJCWNzdW1fc3RhcnRfb2ZmID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTsKJiM0MzsJCQkJY3N1bV9pbmRleF9vZmYgPSBjc3VtX3N0YXJ0X29mZiAmIzQzOyBza2ItJmd0O2NzdW1fb2Zmc2V0OwomIzQzOwkJCQkvKiBUeCBQYXJ0aWFsIENoZWNrc3VtIE9mZmxvYWQgRW5hYmxlZCAqLwomIzQzOwkJCQlhcHBfbWV0YWRhdGFbMF0gfD0gMTsKJiM0MzsJCQkJYXBwX21ldGFkYXRhWzFdID0gKGNzdW1fc3RhcnRfb2ZmICZsdDsmbHQ7IDE2KSB8IGNzdW1faW5kZXhfb2ZmOwomIzQzOwkJCX0KJiM0MzsJCX0gZWxzZSBpZiAoc2tiLSZndDtpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKJiM0MzsJCQlhcHBfbWV0YWRhdGFbMF0gfD0gMjsgLyogVHggRnVsbCBDaGVja3N1bSBPZmZsb2FkIEVuYWJsZWQgKi8KIAkJfQotCX0gZWxzZSBpZiAoc2tiLSZndDtpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKLQkJYXBwX21ldGFkYXRhWzBdIHw9IDI7IC8qIFR4IEZ1bGwgQ2hlY2tzdW0gT2ZmbG9hZCBFbmFibGVkICovCiAJfQogCiAJZG1hX3R4X2Rlc2MgPSBkbWFfZGV2LSZndDtkZXZpY2VfcHJlcF9zbGF2ZV9zZyhscC0mZ3Q7dHhfY2hhbiwgc2tidWZfZG1hLSZndDtzZ2wsCkBAIC0xNjcwLDYgJiM0MzsxNzIyLDEwIEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCWF4aWVuZXRfbG9ja19taWkobHApOwogCXJldCA9IGF4aWVuZXRfZGV2aWNlX3Jlc2V0KG5kZXYpOwogCWF4aWVuZXRfdW5sb2NrX21paShscCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIobHAtJmd0O2RldiwgJiMzNDtheGllbmV0X2RldmljZV9yZXNldCgpIGZhaWxlZDogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQogCiAJcmV0ID0gcGh5bGlua19vZl9waHlfY29ubmVjdChscC0mZ3Q7cGh5bGluaywgbHAtJmd0O2Rldi0mZ3Q7b2Zfbm9kZSwgMCk7CiAJaWYgKHJldCkgewpAQCAtMTczOCwxMiAmIzQzOzE3OTQsMTcgQEAgc3RhdGljIGludCBheGllbmV0X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAKIAljYW5jZWxfd29ya19zeW5jKCZhbXA7bHAtJmd0O3J4X2RpbS53b3JrKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtscC0mZ3Q7c3RhdHNfd29yayk7CiYjNDM7CWlmIChscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O3N0YXRzX3VwZGF0ZSkgewomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO2xwLSZndDtzdGF0c19sb2NrKTsKJiM0MzsJCWxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7c3RhdHNfdXBkYXRlKGxwKTsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2xwLSZndDtzdGF0c19sb2NrKTsKJiM0MzsJfQogCiAJcGh5bGlua19zdG9wKGxwLSZndDtwaHlsaW5rKTsKIAlwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KGxwLSZndDtwaHlsaW5rKTsKIAotCWF4aWVuZXRfc2V0b3B0aW9ucyhuZGV2LCBscC0mZ3Q7b3B0aW9ucyAmYW1wOwotCQkJICAgfihYQUVfT1BUSU9OX1RYRU4gfCBYQUVfT1BUSU9OX1JYRU4pKTsKJiM0MzsJbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtzZXRvcHRpb25zKG5kZXYsIGxwLSZndDtvcHRpb25zICZhbXA7CiYjNDM7CQkJCSAgICAgICB+KFhBRV9PUFRJT05fVFhFTiB8IFhBRV9PUFRJT05fUlhFTikpOwogCiAJaWYgKCFscC0mZ3Q7dXNlX2RtYWVuZ2luZSkgewogCQlheGllbmV0X2RtYV9zdG9wKGxwKTsKQEAgLTE3NjksNyAmIzQzOzE4MzAsOCBAQCBzdGF0aWMgaW50IGF4aWVuZXRfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAl9CiAKIAluZXRkZXZfcmVzZXRfcXVldWUobmRldik7Ci0JYXhpZW5ldF9pb3cobHAsIFhBRV9JRV9PRkZTRVQsIDApOwomIzQzOwlpZiAobHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDttYWNfaXJxKQomIzQzOwkJYXhpZW5ldF9pb3cobHAsIFhBRV9JRV9PRkZTRVQsIDApOwogCiAJaWYgKGxwLSZndDtldGhfaXJxICZndDsgMCkKIAkJZnJlZV9pcnEobHAtJmd0O2V0aF9pcnEsIG5kZXYpOwpAQCAtMTgzNCwyOSAmIzQzOzE4OTYsMTEgQEAgc3RhdGljIGludCBheGllbmV0X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCiAJcmV0dXJuIHBoeWxpbmtfbWlpX2lvY3RsKGxwLSZndDtwaHlsaW5rLCBycSwgY21kKTsKIH0KIAotc3RhdGljIHZvaWQKLWF4aWVuZXRfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cykKJiM0MztzdGF0aWMgdm9pZCBheGllbmV0XzFnX2dldF9zdGF0czY0KHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwKJiM0MzsJCQkJICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cykKIHsKLQlzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCBzdGFydDsKIAotCW5ldGRldl9zdGF0c190b19zdGF0czY0KHN0YXRzLCAmYW1wO2Rldi0mZ3Q7c3RhdHMpOwotCi0JZG8gewotCQlzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbigmYW1wO2xwLSZndDtyeF9zdGF0X3N5bmMpOwotCQlzdGF0cy0mZ3Q7cnhfcGFja2V0cyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bHAtJmd0O3J4X3BhY2tldHMpOwotCQlzdGF0cy0mZ3Q7cnhfYnl0ZXMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO2xwLSZndDtyeF9ieXRlcyk7Ci0JfSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KCZhbXA7bHAtJmd0O3J4X3N0YXRfc3luYywgc3RhcnQpKTsKLQotCWRvIHsKLQkJc3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oJmFtcDtscC0mZ3Q7dHhfc3RhdF9zeW5jKTsKLQkJc3RhdHMtJmd0O3R4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO2xwLSZndDt0eF9wYWNrZXRzKTsKLQkJc3RhdHMtJmd0O3R4X2J5dGVzID0gdTY0X3N0YXRzX3JlYWQoJmFtcDtscC0mZ3Q7dHhfYnl0ZXMpOwotCX0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeSgmYW1wO2xwLSZndDt0eF9zdGF0X3N5bmMsIHN0YXJ0KSk7Ci0KLQlpZiAoIShscC0mZ3Q7ZmVhdHVyZXMgJmFtcDsgWEFFX0ZFQVRVUkVfU1RBVFMpKQotCQlyZXR1cm47Ci0KIAlkbyB7CiAJCXN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbigmYW1wO2xwLSZndDtod19zdGF0c19zZXFjb3VudCk7CiAJCXN0YXRzLSZndDtyeF9sZW5ndGhfZXJyb3JzID0KQEAgLTE4ODQsNiAmIzQzOzE5MjgsMzMgQEAgYXhpZW5ldF9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKQogCX0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoJmFtcDtscC0mZ3Q7aHdfc3RhdHNfc2VxY291bnQsIHN0YXJ0KSk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZAomIzQzO2F4aWVuZXRfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CXVuc2lnbmVkIGludCBzdGFydDsKJiM0MzsKJiM0MzsJbmV0ZGV2X3N0YXRzX3RvX3N0YXRzNjQoc3RhdHMsICZhbXA7ZGV2LSZndDtzdGF0cyk7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKCZhbXA7bHAtJmd0O3J4X3N0YXRfc3luYyk7CiYjNDM7CQlzdGF0cy0mZ3Q7cnhfcGFja2V0cyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bHAtJmd0O3J4X3BhY2tldHMpOwomIzQzOwkJc3RhdHMtJmd0O3J4X2J5dGVzID0gdTY0X3N0YXRzX3JlYWQoJmFtcDtscC0mZ3Q7cnhfYnl0ZXMpOwomIzQzOwl9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoJmFtcDtscC0mZ3Q7cnhfc3RhdF9zeW5jLCBzdGFydCkpOwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbigmYW1wO2xwLSZndDt0eF9zdGF0X3N5bmMpOwomIzQzOwkJc3RhdHMtJmd0O3R4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO2xwLSZndDt0eF9wYWNrZXRzKTsKJiM0MzsJCXN0YXRzLSZndDt0eF9ieXRlcyA9IHU2NF9zdGF0c19yZWFkKCZhbXA7bHAtJmd0O3R4X2J5dGVzKTsKJiM0MzsJfSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KCZhbXA7bHAtJmd0O3R4X3N0YXRfc3luYywgc3RhcnQpKTsKJiM0MzsKJiM0MzsJaWYgKCEobHAtJmd0O2ZlYXR1cmVzICZhbXA7IFhBRV9GRUFUVVJFX1NUQVRTKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKGxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7Z2V0X3N0YXRzNjQpCiYjNDM7CQlscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O2dldF9zdGF0czY0KGxwLCBzdGF0cyk7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBheGllbmV0X25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuID0gYXhpZW5ldF9vcGVuLAogCS5uZG9fc3RvcCA9IGF4aWVuZXRfc3RvcCwKQEAgLTE5MzgsMzAgJiM0MzsyMDA5LDE4IEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfZXRodG9vbHNfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiAgKi8KIHN0YXRpYyBpbnQgYXhpZW5ldF9ldGh0b29sc19nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7Ci0JcmV0dXJuIHNpemVvZih1MzIpICogQVhJRU5FVF9SRUdTX047CiYjNDM7CXN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gc2l6ZW9mKHUzMikgKiBscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O3JlZ3NfbjsKIH0KIAogLyoqCi0gKiBheGllbmV0X2V0aHRvb2xzX2dldF9yZWdzIC0gRHVtcCB0aGUgY29udGVudHMgb2YgYWxsIHJlZ2lzdGVycyBwcmVzZW50Ci0gKgkJCSAgICAgICBpbiBBeGlFdGhlcm5ldCBjb3JlLgotICogQG5kZXY6CVBvaW50ZXIgdG8gbmV0X2RldmljZSBzdHJ1Y3R1cmUKLSAqIEByZWdzOglQb2ludGVyIHRvIGV0aHRvb2xfcmVncyBzdHJ1Y3R1cmUKLSAqIEByZXQ6CVZvaWQgcG9pbnRlciB1c2VkIHRvIHJldHVybiB0aGUgY29udGVudHMgb2YgdGhlIHJlZ2lzdGVycy4KLSAqCi0gKiBUaGlzIGltcGxlbWVudHMgZXRodG9vbCBjb21tYW5kIGZvciBnZXR0aW5nIHRoZSBBeGkgRXRoZXJuZXQgcmVnaXN0ZXIgZHVtcC4KLSAqIElzc3VlICYjMzQ7ZXRodG9vbCAtZCBldGhYJiMzNDsgdG8gZXhlY3V0ZSB0aGlzIGZ1bmN0aW9uLgomIzQzOyAqIGF4aWVuZXRfMWdfZ2V0X3JlZ3MgLSBEdW1wIDFHIE1BQyByZWdpc3RlcnMgZm9yIGV0aHRvb2wKJiM0MzsgKiBAbHA6CQlQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZQomIzQzOyAqIEBkYXRhOglCdWZmZXIgZm9yIHJlZ2lzdGVyIHZhbHVlcyAoemVyb2VkIGFuZCBzaXplZCBieSB0aGUgY2FsbGVyKQogICovCi1zdGF0aWMgdm9pZCBheGllbmV0X2V0aHRvb2xzX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAotCQkJCSAgICAgIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsIHZvaWQgKnJldCkKJiM0MztzdGF0aWMgdm9pZCBheGllbmV0XzFnX2dldF9yZWdzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwgdTMyICpkYXRhKQogewotCXUzMiAqZGF0YSA9ICh1MzIgKilyZXQ7Ci0Jc2l6ZV90IGxlbiA9IHNpemVvZih1MzIpICogQVhJRU5FVF9SRUdTX047Ci0Jc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7Ci0KLQlyZWdzLSZndDt2ZXJzaW9uID0gMDsKLQlyZWdzLSZndDtsZW4gPSBsZW47Ci0KLQltZW1zZXQoZGF0YSwgMCwgbGVuKTsKIAlkYXRhWzBdID0gYXhpZW5ldF9pb3IobHAsIFhBRV9SQUZfT0ZGU0VUKTsKIAlkYXRhWzFdID0gYXhpZW5ldF9pb3IobHAsIFhBRV9UUEZfT0ZGU0VUKTsKIAlkYXRhWzJdID0gYXhpZW5ldF9pb3IobHAsIFhBRV9JRkdQX09GRlNFVCk7CkBAIC0yMDAyLDYgJiM0MzsyMDYxLDMxIEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfZXRodG9vbHNfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiAJfQogfQogCiYjNDM7LyoqCiYjNDM7ICogYXhpZW5ldF9ldGh0b29sc19nZXRfcmVncyAtIER1bXAgdGhlIGNvbnRlbnRzIG9mIGFsbCByZWdpc3RlcnMgcHJlc2VudAomIzQzOyAqCQkJICAgICAgIGluIEF4aUV0aGVybmV0IGNvcmUuCiYjNDM7ICogQG5kZXY6CVBvaW50ZXIgdG8gbmV0X2RldmljZSBzdHJ1Y3R1cmUKJiM0MzsgKiBAcmVnczoJUG9pbnRlciB0byBldGh0b29sX3JlZ3Mgc3RydWN0dXJlCiYjNDM7ICogQHJldDoJVm9pZCBwb2ludGVyIHVzZWQgdG8gcmV0dXJuIHRoZSBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXJzLgomIzQzOyAqCiYjNDM7ICogVGhpcyBpbXBsZW1lbnRzIGV0aHRvb2wgY29tbWFuZCBmb3IgZ2V0dGluZyB0aGUgQXhpIEV0aGVybmV0IHJlZ2lzdGVyIGR1bXAuCiYjNDM7ICogSXNzdWUgJiMzNDtldGh0b29sIC1kIGV0aFgmIzM0OyB0byBleGVjdXRlIHRoaXMgZnVuY3Rpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKJiM0MzsJCQkJICAgICAgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywgdm9pZCAqcmV0KQomIzQzO3sKJiM0MzsJc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CXUzMiAqZGF0YSA9ICh1MzIgKilyZXQ7CiYjNDM7CXNpemVfdCBsZW47CiYjNDM7CiYjNDM7CWxlbiA9IHNpemVvZih1MzIpICogbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtyZWdzX247CiYjNDM7CXJlZ3MtJmd0O3ZlcnNpb24gPSAwOwomIzQzOwlyZWdzLSZndDtsZW4gPSBsZW47CiYjNDM7CiYjNDM7CW1lbXNldChkYXRhLCAwLCBsZW4pOwomIzQzOwlscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O2dldF9yZWdzKGxwLCBkYXRhKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZAogYXhpZW5ldF9ldGh0b29sc19nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogCQkJICAgICAgIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqZXJpbmcsCkBAIC0yMzAzLDExICYjNDM7MjM4Nyw4IEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9ldGh0b29sc19ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJcmV0dXJuIHBoeWxpbmtfZXRodG9vbF9ud2F5X3Jlc2V0KGxwLSZndDtwaHlsaW5rKTsKIH0KIAotc3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkgICAgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLAotCQkJCQkgICAgICAgdTY0ICpkYXRhKQomIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLCB1NjQgKmRhdGEpCiB7Ci0Jc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBpbnQgc3RhcnQ7CiAKIAlkbyB7CkBAIC0yMzI0LDYgJiM0MzsyNDA1LDE3IEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfZXRodG9vbHNfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAl9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KCZhbXA7bHAtJmd0O2h3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJICAgICAgIHN0cnVjdCBldGh0b29sX3N0YXRzICpzdGF0cywKJiM0MzsJCQkJCSAgICAgICB1NjQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwomIzQzOwlpZiAobHAtJmd0O2ZlYXR1cmVzICZhbXA7IFhBRV9GRUFUVVJFX1NUQVRTICZhbXA7JmFtcDsKJiM0MzsJICAgIGxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7Z2V0X2V0aHRvb2xfc3RhdHMpCiYjNDM7CQlscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O2dldF9ldGh0b29sX3N0YXRzKGxwLCBkYXRhKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgY29uc3QgY2hhciBheGllbmV0X2V0aHRvb2xfc3RhdHNfc3RyaW5nc1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7CiAJJiMzNDtSZWNlaXZlZCBieXRlcyYjMzQ7LAogCSYjMzQ7VHJhbnNtaXR0ZWQgYnl0ZXMmIzM0OywKQEAgLTIzMzYsMTIgJiM0MzsyNDI4LDI2IEBAIHN0YXRpYyBjb25zdCBjaGFyIGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHsKIAkmIzM0O1VzZXIgRGVmaW5lZCBDb3VudGVyIDImIzM0OywKIH07CiAKJiM0MztzdGF0aWMgdm9pZCBheGllbmV0XzFnX2dldF9zdHJpbmdzKHU4ICpkYXRhKQomIzQzO3sKJiM0MzsJbWVtY3B5KGRhdGEsIGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzLAomIzQzOwkgICAgICAgc2l6ZW9mKGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYXhpZW5ldF8xZ19nZXRfc3NldF9jb3VudCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIEFSUkFZX1NJWkUoYXhpZW5ldF9ldGh0b29sX3N0YXRzX3N0cmluZ3MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGF4aWVuZXRfZXRodG9vbHNfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0cmluZ3NldCwgdTggKmRhdGEpCiB7CiYjNDM7CXN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CiAJc3dpdGNoIChzdHJpbmdzZXQpIHsKIAljYXNlIEVUSF9TU19TVEFUUzoKLQkJbWVtY3B5KGRhdGEsIGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzLAotCQkgICAgICAgc2l6ZW9mKGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzKSk7CiYjNDM7CQlpZiAobHAtJmd0O2ZlYXR1cmVzICZhbXA7IFhBRV9GRUFUVVJFX1NUQVRTICZhbXA7JmFtcDsKJiM0MzsJCSAgICBscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O2dldF9zdHJpbmdzKQomIzQzOwkJCWxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7Z2V0X3N0cmluZ3MoZGF0YSk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTIzNTIsMjQgJiM0MzsyNDU4LDIwIEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9ldGh0b29sc19nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3NldCkKIAogCXN3aXRjaCAoc3NldCkgewogCWNhc2UgRVRIX1NTX1NUQVRTOgotCQlpZiAobHAtJmd0O2ZlYXR1cmVzICZhbXA7IFhBRV9GRUFUVVJFX1NUQVRTKQotCQkJcmV0dXJuIEFSUkFZX1NJWkUoYXhpZW5ldF9ldGh0b29sX3N0YXRzX3N0cmluZ3MpOwomIzQzOwkJaWYgKGxwLSZndDtmZWF0dXJlcyAmYW1wOyBYQUVfRkVBVFVSRV9TVEFUUyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtnZXRfc3NldF9jb3VudCkKJiM0MzsJCQlyZXR1cm4gbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtnZXRfc3NldF9jb3VudCgpOwogCQlmYWxsdGhyb3VnaDsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogfQogCi1zdGF0aWMgdm9pZAotYXhpZW5ldF9ldGh0b29sc19nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKQomIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cykKIHsKLQlzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCBzdGFydDsKIAotCWlmICghKGxwLSZndDtmZWF0dXJlcyAmYW1wOyBYQUVfRkVBVFVSRV9TVEFUUykpCi0JCXJldHVybjsKLQogCWRvIHsKIAkJc3RhcnQgPSByZWFkX3NlcWNvdW50X2JlZ2luKCZhbXA7bHAtJmd0O2h3X3N0YXRzX3NlcWNvdW50KTsKIAkJcGF1c2Vfc3RhdHMtJmd0O3R4X3BhdXNlX2ZyYW1lcyA9CkBAIC0yMzgwLDE1ICYjNDM7MjQ4MiwyMyBAQCBheGllbmV0X2V0aHRvb2xzX2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogfQogCiBzdGF0aWMgdm9pZAotYXhpZW5ldF9ldGh0b29sX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpCiYjNDM7YXhpZW5ldF9ldGh0b29sc19nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJIHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cykKIHsKIAlzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGludCBzdGFydDsKIAogCWlmICghKGxwLSZndDtmZWF0dXJlcyAmYW1wOyBYQUVfRkVBVFVSRV9TVEFUUykpCiAJCXJldHVybjsKIAomIzQzOwlpZiAobHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtnZXRfcGF1c2Vfc3RhdHMpCiYjNDM7CQlscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O2dldF9wYXVzZV9zdGF0cyhscCwgcGF1c2Vfc3RhdHMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBheGllbmV0XzFnX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwKJiM0MzsJCQkJCSBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgc3RhcnQ7CiYjNDM7CiAJZG8gewogCQlzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4oJmFtcDtscC0mZ3Q7aHdfc3RhdHNfc2VxY291bnQpOwogCQltYWNfc3RhdHMtJmd0O0ZyYW1lc1RyYW5zbWl0dGVkT0sgPQpAQCAtMjQyNSwxNSAmIzQzOzI1MzUsMjQgQEAgYXhpZW5ldF9ldGh0b29sX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiB9CiAKIHN0YXRpYyB2b2lkCi1heGllbmV0X2V0aHRvb2xfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGV0aHRvb2xfZXRoX2N0cmxfc3RhdHMgKmN0cmxfc3RhdHMpCiYjNDM7YXhpZW5ldF9ldGh0b29sX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJCSAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKQogewogCXN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgaW50IHN0YXJ0OwogCiAJaWYgKCEobHAtJmd0O2ZlYXR1cmVzICZhbXA7IFhBRV9GRUFUVVJFX1NUQVRTKSkKIAkJcmV0dXJuOwogCiYjNDM7CWlmIChscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O2dldF9ldGhfbWFjX3N0YXRzKQomIzQzOwkJbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtnZXRfZXRoX21hY19zdGF0cyhscCwgbWFjX3N0YXRzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQKJiM0MztheGllbmV0XzFnX2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsCiYjNDM7CQkJICAgICAgc3RydWN0IGV0aHRvb2xfZXRoX2N0cmxfc3RhdHMgKmN0cmxfc3RhdHMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgc3RhcnQ7CiYjNDM7CiAJZG8gewogCQlzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4oJmFtcDtscC0mZ3Q7aHdfc3RhdHNfc2VxY291bnQpOwogCQljdHJsX3N0YXRzLSZndDtNQUNDb250cm9sRnJhbWVzVHJhbnNtaXR0ZWQgPQpAQCAtMjQ0NSw3ICYjNDM7MjU2NCwyMCBAQCBheGllbmV0X2V0aHRvb2xfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJfSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeSgmYW1wO2xwLSZndDtod19zdGF0c19zZXFjb3VudCwgc3RhcnQpKTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSBheGllbmV0X3Jtb25fcmFuZ2VzW10gPSB7CiYjNDM7c3RhdGljIHZvaWQKJiM0MztheGllbmV0X2V0aHRvb2xfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJCSAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKQomIzQzO3sKJiM0MzsJc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsKJiM0MzsJaWYgKCEobHAtJmd0O2ZlYXR1cmVzICZhbXA7IFhBRV9GRUFUVVJFX1NUQVRTKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKGxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7Z2V0X2V0aF9jdHJsX3N0YXRzKQomIzQzOwkJbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtnZXRfZXRoX2N0cmxfc3RhdHMobHAsIGN0cmxfc3RhdHMpOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgYXhpZW5ldF9ybW9uX3Jhbmdlc1tdID0gewogCXsgICA2NCwgICAgNjQgfSwKIAl7ICAgNjUsICAgMTI3IH0sCiAJeyAgMTI4LCAgIDI1NSB9LApAQCAtMjQ1NywxNiAmIzQzOzI1ODksMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSBheGllbmV0X3Jtb25fcmFuZ2VzW10gPSB7CiB9OwogCiBzdGF0aWMgdm9pZAotYXhpZW5ldF9ldGh0b29sX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cywKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpCiYjNDM7YXhpZW5ldF8xZ19nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsCiYjNDM7CQkJICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLAomIzQzOwkJCSAgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlICoqcmFuZ2VzKQogewotCXN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IHN0YXJ0OwogCi0JaWYgKCEobHAtJmd0O2ZlYXR1cmVzICZhbXA7IFhBRV9GRUFUVVJFX1NUQVRTKSkKLQkJcmV0dXJuOwotCiAJZG8gewogCQlzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4oJmFtcDtscC0mZ3Q7aHdfc3RhdHNfc2VxY291bnQpOwogCQlybW9uX3N0YXRzLSZndDt1bmRlcnNpemVfcGt0cyA9CkBAIC0yNTEwLDYgJiM0MzsyNjM4LDIwIEBAIGF4aWVuZXRfZXRodG9vbF9nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCSpyYW5nZXMgPSBheGllbmV0X3Jtb25fcmFuZ2VzOwogfQogCiYjNDM7c3RhdGljIHZvaWQKJiM0MztheGllbmV0X2V0aHRvb2xfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgICAgICAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cywKJiM0MzsJCQkgICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlICoqcmFuZ2VzKQomIzQzO3sKJiM0MzsJc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsKJiM0MzsJaWYgKCEobHAtJmd0O2ZlYXR1cmVzICZhbXA7IFhBRV9GRUFUVVJFX1NUQVRTKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKGxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7Z2V0X3Jtb25fc3RhdHMpCiYjNDM7CQlscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O2dldF9ybW9uX3N0YXRzKGxwLCBybW9uX3N0YXRzLCByYW5nZXMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXhpZW5ldF9ldGh0b29sX29wcyA9IHsKIAkuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfTUFYX0ZSQU1FUyB8CiAJCQkJICAgICBFVEhUT09MX0NPQUxFU0NFX1VTRUNTIHwKQEAgLTI1NTUsMTEgJiM0MzsyNjk3LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBheGllbmV0X2V0aHRvb2xfZG1hZW5naW5lX29wcyA9IHsKIAkuZ2V0X3Jtb25fc3RhdHMgPSBheGllbmV0X2V0aHRvb2xfZ2V0X3Jtb25fc3RhdHMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGF4aWVuZXRfbG9jYWwgKnBjc190b19heGllbmV0X2xvY2FsKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKQotewotCXJldHVybiBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCwgcGNzKTsKLX0KLQogc3RhdGljIHZvaWQgYXhpZW5ldF9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLAogCQkJCSAgdW5zaWduZWQgaW50IG5lZ19tb2RlLAogCQkJCSAgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpCkBAIC0yNjE5LDcgJiM0MzsyNzU2LDkgQEAgc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqYXhpZW5ldF9tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywKIAlzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAogCWlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB8fAotCSAgICBpbnRlcmZhY2UgPT0gIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkKJiM0MzsJICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkgfHwKJiM0MzsJICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIgfHwKJiM0MzsJICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMjVHQkFTRVIpCiAJCXJldHVybiAmYW1wO2xwLSZndDtwY3M7CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTI2MzgsMTMgJiM0MzsyNzc3LDkgQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9tYWNfbGlua19kb3duKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLAogCS8qIG5vdGhpbmcgbWVhbmluZ2Z1bCB0byBkbyAqLwogfQogCi1zdGF0aWMgdm9pZCBheGllbmV0X21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLAotCQkJCXN0cnVjdCBwaHlfZGV2aWNlICpwaHksCi0JCQkJdW5zaWduZWQgaW50IG1vZGUsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsCi0JCQkJaW50IHNwZWVkLCBpbnQgZHVwbGV4LAotCQkJCWJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpCiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF8xZ19tYWNfbGlua191cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IHNwZWVkLAomIzQzOwkJCQkgICBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gdG9fbmV0X2Rldihjb25maWctJmd0O2Rldik7CiAJc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CiAJdTMyIGVtbWNfcmVnLCBmY2NfcmVnOwogCkBAIC0yNjgxLDYgJiM0MzsyODE2LDE5IEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsCiAJYXhpZW5ldF9pb3cobHAsIFhBRV9GQ0NfT0ZGU0VULCBmY2NfcmVnKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsCiYjNDM7CQkJCXN0cnVjdCBwaHlfZGV2aWNlICpwaHksCiYjNDM7CQkJCXVuc2lnbmVkIGludCBtb2RlLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLAomIzQzOwkJCQlpbnQgc3BlZWQsIGludCBkdXBsZXgsCiYjNDM7CQkJCWJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHRvX25ldF9kZXYoY29uZmlnLSZndDtkZXYpOwomIzQzOwlzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsKJiM0MzsJaWYgKGxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7bWFjX2xpbmtfdXApCiYjNDM7CQlscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O21hY19saW5rX3VwKG5kZXYsIHNwZWVkLCB0eF9wYXVzZSwgcnhfcGF1c2UpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIGF4aWVuZXRfcGh5bGlua19vcHMgPSB7CiAJLm1hY19zZWxlY3RfcGNzID0gYXhpZW5ldF9tYWNfc2VsZWN0X3BjcywKIAkubWFjX2NvbmZpZyA9IGF4aWVuZXRfbWFjX2NvbmZpZywKQEAgLTI2OTgsNyAmIzQzOzI4NDYsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBheGllbmV0X3BoeWxpbmtfb3BzID0gewogc3RhdGljIHZvaWQgYXhpZW5ldF9kbWFfZXJyX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXUzMiBpOwotCXUzMiBheGllbmV0X3N0YXR1czsKIAlzdHJ1Y3QgYXhpZG1hX2JkICpjdXJfcDsKIAlzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF4aWVuZXRfbG9jYWwsCiAJCQkJCQlkbWFfZXJyX3Rhc2spOwpAQCAtMjcxMSw4ICYjNDM7Mjg1OCw4IEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfZG1hX2Vycl9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAluYXBpX2Rpc2FibGUoJmFtcDtscC0mZ3Q7bmFwaV90eCk7CiAJbmFwaV9kaXNhYmxlKCZhbXA7bHAtJmd0O25hcGlfcngpOwogCi0JYXhpZW5ldF9zZXRvcHRpb25zKG5kZXYsIGxwLSZndDtvcHRpb25zICZhbXA7Ci0JCQkgICB+KFhBRV9PUFRJT05fVFhFTiB8IFhBRV9PUFRJT05fUlhFTikpOwomIzQzOwlscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O3NldG9wdGlvbnMobmRldiwgbHAtJmd0O29wdGlvbnMgJmFtcDsKJiM0MzsJCQkJICAgICAgIH4oWEFFX09QVElPTl9UWEVOIHwgWEFFX09QVElPTl9SWEVOKSk7CiAKIAlheGllbmV0X2RtYV9zdG9wKGxwKTsKIAluZXRkZXZfcmVzZXRfcXVldWUobmRldik7CkBAIC0yNzU3LDI5ICYjNDM7MjkwNCwxMjYgQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9kbWFfZXJyX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCiAJYXhpZW5ldF9kbWFfc3RhcnQobHApOwogCi0JYXhpZW5ldF9zdGF0dXMgPSBheGllbmV0X2lvcihscCwgWEFFX1JDVzFfT0ZGU0VUKTsKLQlheGllbmV0X3N0YXR1cyAmYW1wOz0gflhBRV9SQ1cxX1JYX01BU0s7Ci0JYXhpZW5ldF9pb3cobHAsIFhBRV9SQ1cxX09GRlNFVCwgYXhpZW5ldF9zdGF0dXMpOwotCi0JYXhpZW5ldF9zdGF0dXMgPSBheGllbmV0X2lvcihscCwgWEFFX0lQX09GRlNFVCk7Ci0JaWYgKGF4aWVuZXRfc3RhdHVzICZhbXA7IFhBRV9JTlRfUlhSSkVDVF9NQVNLKQotCQlheGllbmV0X2lvdyhscCwgWEFFX0lTX09GRlNFVCwgWEFFX0lOVF9SWFJKRUNUX01BU0spOwotCWF4aWVuZXRfaW93KGxwLCBYQUVfSUVfT0ZGU0VULCBscC0mZ3Q7ZXRoX2lycSAmZ3Q7IDAgPwotCQkgICAgWEFFX0lOVF9SRUNWX0VSUk9SX01BU0sgOiAwKTsKLQlheGllbmV0X2lvdyhscCwgWEFFX0ZDQ19PRkZTRVQsIFhBRV9GQ0NfRkNSWF9NQVNLKTsKJiM0MzsJLyogVGhpcyBlcnJvciBoYW5kbGVyIHJ1bnMgb25seSBmb3IgdGhlIGxlZ2FjeSBlbWJlZGRlZC1ETUEgKDFHKSBwYXRoLAomIzQzOwkgKiB3aG9zZSBtYWNfaW5pdCgpIGNhbm5vdCBmYWlsLCBzbyBpdHMgcmV0dXJuIHZhbHVlIGlzIG5vdCBjaGVja2VkLgomIzQzOwkgKi8KJiM0MzsJbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDttYWNfaW5pdChuZGV2KTsKIAogCS8qIFN5bmMgZGVmYXVsdCBvcHRpb25zIHdpdGggSFcgYnV0IGxlYXZlIHJlY2VpdmVyIGFuZAogCSAqIHRyYW5zbWl0dGVyIGRpc2FibGVkLgogCSAqLwotCWF4aWVuZXRfc2V0b3B0aW9ucyhuZGV2LCBscC0mZ3Q7b3B0aW9ucyAmYW1wOwotCQkJICAgfihYQUVfT1BUSU9OX1RYRU4gfCBYQUVfT1BUSU9OX1JYRU4pKTsKJiM0MzsJbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtzZXRvcHRpb25zKG5kZXYsIGxwLSZndDtvcHRpb25zICZhbXA7CiYjNDM7CQkJCSAgICAgICB+KFhBRV9PUFRJT05fVFhFTiB8IFhBRV9PUFRJT05fUlhFTikpOwogCWF4aWVuZXRfc2V0X21hY19hZGRyZXNzKG5kZXYsIE5VTEwpOwogCWF4aWVuZXRfc2V0X211bHRpY2FzdF9saXN0KG5kZXYpOwogCW5hcGlfZW5hYmxlKCZhbXA7bHAtJmd0O25hcGlfcngpOwogCW5hcGlfZW5hYmxlKCZhbXA7bHAtJmd0O25hcGlfdHgpOwotCWF4aWVuZXRfc2V0b3B0aW9ucyhuZGV2LCBscC0mZ3Q7b3B0aW9ucyk7CiYjNDM7CWxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7c2V0b3B0aW9ucyhuZGV2LCBscC0mZ3Q7b3B0aW9ucyk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGF4aWVuZXRfMWdfcGh5bGlua19zZXRfY2FwcyAtIFNldCAxRyBwaHlsaW5rIGNhcGFiaWxpdGllcyBhbmQgaW50ZXJmYWNlcwomIzQzOyAqIEBscDoJCVBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlCiYjNDM7ICogQGNvbmZpZzoJUG9pbnRlciB0byB0aGUgcGh5bGlua19jb25maWcgc3RydWN0dXJlCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF8xZ19waHlsaW5rX3NldF9jYXBzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwKJiM0MzsJCQkJCXN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKQomIzQzO3sKJiM0MzsJY29uZmlnLSZndDttYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMEZEIHwgTUFDXzEwMEZEIHwgTUFDXzEwMDBGRDsKJiM0MzsJX19zZXRfYml0KGxwLSZndDtwaHlfbW9kZSwgY29uZmlnLSZndDtzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiYjNDM7CWlmIChscC0mZ3Q7c3dpdGNoX3hfc2dtaWkpIHsKJiM0MzsJCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYLAomIzQzOwkJCSAgY29uZmlnLSZndDtzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiYjNDM7CQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLAomIzQzOwkJCSAgY29uZmlnLSZndDtzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYXhpZW5ldF8xZ19jbGtfaW5pdCAtIEdldCBhbmQgZW5hYmxlIHRoZSAxRyBNQUMgY2xvY2tzCiYjNDM7ICogQGxwOgkJUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmUKJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyIG90aGVyd2lzZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGF4aWVuZXRfMWdfY2xrX2luaXQoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gbHAtJmd0O2RldjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbHAtJmd0O2F4aV9jbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWxfZW5hYmxlZChkZXYsICYjMzQ7c19heGlfbGl0ZV9jbGsmIzM0Oyk7CiYjNDM7CWlmICghbHAtJmd0O2F4aV9jbGspIHsKJiM0MzsJCS8qIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBpZiBuYW1lZCBBWEkgY2xvY2sgaXMgbm90CiYjNDM7CQkgKiBwcmVzZW50LCB0cmVhdCB0aGUgZmlyc3QgY2xvY2sgc3BlY2lmaWVkIGFzIHRoZSBBWEkgY2xvY2suCiYjNDM7CQkgKi8KJiM0MzsJCWxwLSZndDtheGlfY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsX2VuYWJsZWQoZGV2LCBOVUxMKTsKJiM0MzsJfQomIzQzOwlpZiAoSVNfRVJSKGxwLSZndDtheGlfY2xrKSkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihscC0mZ3Q7YXhpX2NsayksCiYjNDM7CQkJCSAgICAgJiMzNDtjb3VsZCBub3QgZ2V0IEFYSSBjbG9ja1xuJiMzNDspOwomIzQzOwomIzQzOwlscC0mZ3Q7bWlzY19jbGtzWzBdLmlkID0gJiMzNDtheGlzX2NsayYjMzQ7OwomIzQzOwlscC0mZ3Q7bWlzY19jbGtzWzFdLmlkID0gJiMzNDtyZWZfY2xrJiMzNDs7CiYjNDM7CWxwLSZndDttaXNjX2Nsa3NbMl0uaWQgPSAmIzM0O21ndF9jbGsmIzM0OzsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9jbGtfYnVsa19nZXRfb3B0aW9uYWxfZW5hYmxlKGRldiwgWEFFX05VTV9NSVNDX0NMT0NLUywKJiM0MzsJCQkJCQlscC0mZ3Q7bWlzY19jbGtzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LAomIzQzOwkJCQkgICAgICYjMzQ7Y291bGQgbm90IGdldC9lbmFibGUgbWlzYy4gY2xvY2tzXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiYjNDM7LyoqCiYjNDM7ICogYXhpZW5ldF8xZ19wcm9iZV9pbml0IC0gMUcgTUFDLXNwZWNpZmljIHByb2JlLXRpbWUgaW5pdGlhbGl6YXRpb24KJiM0MzsgKiBAbHA6CQlQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZQomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfcHJvYmVfaW5pdChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApCiYjNDM7ewomIzQzOwlpZiAoYXhpZW5ldF9pb3IobHAsIFhBRV9BQklMSVRZX09GRlNFVCkgJmFtcDsgWEFFX0FCSUxJVFlfU1RBVFMpCiYjNDM7CQlscC0mZ3Q7ZmVhdHVyZXMgfD0gWEFFX0ZFQVRVUkVfU1RBVFM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXhpZW5ldF9jb25maWcgYXhpZW5ldF8xZ19jb25maWcgPSB7CiYjNDM7CS5tZGlvID0gdHJ1ZSwKJiM0MzsJLm1hY19pcnEgPSB0cnVlLAomIzQzOwkubGVnYWN5X2RtYSA9IHRydWUsCiYjNDM7CS51Y19maWx0ZXIgPSB0cnVlLAomIzQzOwkubWNfZmlsdGVyID0gdHJ1ZSwKJiM0MzsJLnZsYW4gPSB0cnVlLAomIzQzOwkuanVtYm8gPSB0cnVlLAomIzQzOwkuZG1hX3R4X2NzdW0gPSB0cnVlLAomIzQzOwkucmVnc19uID0gQVhJRU5FVF9SRUdTX04sCiYjNDM7CS5jbGtfaW5pdCA9IGF4aWVuZXRfMWdfY2xrX2luaXQsCiYjNDM7CS5zZXRvcHRpb25zID0gYXhpZW5ldF9zZXRvcHRpb25zLAomIzQzOwkucHJvYmVfaW5pdCA9IGF4aWVuZXRfMWdfcHJvYmVfaW5pdCwKJiM0MzsJLm1hY19pbml0ID0gYXhpZW5ldF8xZ19tYWNfaW5pdCwKJiM0MzsJLm1hY19saW5rX3VwID0gYXhpZW5ldF8xZ19tYWNfbGlua191cCwKJiM0MzsJLmdldF9yZWdzID0gYXhpZW5ldF8xZ19nZXRfcmVncywKJiM0MzsJLnBoeWxpbmtfc2V0X2NhcHMgPSBheGllbmV0XzFnX3BoeWxpbmtfc2V0X2NhcHMsCiYjNDM7CS5wY3Nfb3BzID0gJmFtcDtheGllbmV0X3Bjc19vcHMsCiYjNDM7CS5zdGF0c191cGRhdGUgPSBheGllbmV0XzFnX3N0YXRzX3VwZGF0ZSwKJiM0MzsJLmdldF9zdGF0czY0ID0gYXhpZW5ldF8xZ19nZXRfc3RhdHM2NCwKJiM0MzsJLmdldF9ldGh0b29sX3N0YXRzID0gYXhpZW5ldF8xZ19nZXRfZXRodG9vbF9zdGF0cywKJiM0MzsJLmdldF9zdHJpbmdzID0gYXhpZW5ldF8xZ19nZXRfc3RyaW5ncywKJiM0MzsJLmdldF9zc2V0X2NvdW50ID0gYXhpZW5ldF8xZ19nZXRfc3NldF9jb3VudCwKJiM0MzsJLmdldF9wYXVzZV9zdGF0cyA9IGF4aWVuZXRfMWdfZ2V0X3BhdXNlX3N0YXRzLAomIzQzOwkuZ2V0X2V0aF9tYWNfc3RhdHMgPSBheGllbmV0XzFnX2dldF9ldGhfbWFjX3N0YXRzLAomIzQzOwkuZ2V0X2V0aF9jdHJsX3N0YXRzID0gYXhpZW5ldF8xZ19nZXRfZXRoX2N0cmxfc3RhdHMsCiYjNDM7CS5nZXRfcm1vbl9zdGF0cyA9IGF4aWVuZXRfMWdfZ2V0X3Jtb25fc3RhdHMsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBNYXRjaCB0YWJsZSBmb3Igb2ZfcGxhdGZvcm0gYmluZGluZyAqLwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGF4aWVuZXRfb2ZfbWF0Y2hbXSA9IHsKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7eGxueCxheGktZXRoZXJuZXQtMS4wMC5hJiMzNDssIC5kYXRhID0gJmFtcDtheGllbmV0XzFnX2NvbmZpZyB9LAomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDt4bG54LGF4aS1ldGhlcm5ldC0xLjAxLmEmIzM0OywgLmRhdGEgPSAmYW1wO2F4aWVuZXRfMWdfY29uZmlnIH0sCiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3hsbngsYXhpLWV0aGVybmV0LTIuMDEuYSYjMzQ7LCAuZGF0YSA9ICZhbXA7YXhpZW5ldF8xZ19jb25maWcgfSwKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7eGxueCx4eHYtZXRoZXJuZXQtMS4wJiMzNDssIC5kYXRhID0gJmFtcDtheGllbmV0XzEwZzI1Z19jb25maWcgfSwKJiM0MzsJe30sCiYjNDM7fTsKJiM0MzsKJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBheGllbmV0X29mX21hdGNoKTsKJiM0MzsKIC8qKgogICogYXhpZW5ldF9wcm9iZSAtIEF4aSBFdGhlcm5ldCBwcm9iZSBmdW5jdGlvbi4KICAqIEBwZGV2OglQb2ludGVyIHRvIHBsYXRmb3JtIGRldmljZSBzdHJ1Y3R1cmUuCkBAIC0yODMwLDI3ICYjNDM7MzA3NCwxMyBAQCBzdGF0aWMgaW50IGF4aWVuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlzZXFjb3VudF9tdXRleF9pbml0KCZhbXA7bHAtJmd0O2h3X3N0YXRzX3NlcWNvdW50LCAmYW1wO2xwLSZndDtzdGF0c19sb2NrKTsKIAlJTklUX0RFRkVSUkFCTEVfV09SSygmYW1wO2xwLSZndDtzdGF0c193b3JrLCBheGllbmV0X3JlZnJlc2hfc3RhdHMpOwogCi0JbHAtJmd0O2F4aV9jbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWxfZW5hYmxlZCgmYW1wO3BkZXYtJmd0O2RldiwKLQkJCQkJCSAgICAmIzM0O3NfYXhpX2xpdGVfY2xrJiMzNDspOwotCWlmICghbHAtJmd0O2F4aV9jbGspIHsKLQkJLyogRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGlmIG5hbWVkIEFYSSBjbG9jayBpcyBub3QgcHJlc2VudCwKLQkJICogdHJlYXQgdGhlIGZpcnN0IGNsb2NrIHNwZWNpZmllZCBhcyB0aGUgQVhJIGNsb2NrLgotCQkgKi8KLQkJbHAtJmd0O2F4aV9jbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWxfZW5hYmxlZCgmYW1wO3BkZXYtJmd0O2RldiwgTlVMTCk7Ci0JfQotCWlmIChJU19FUlIobHAtJmd0O2F4aV9jbGspKQotCQlyZXR1cm4gZGV2X2Vycl9wcm9iZSgmYW1wO3BkZXYtJmd0O2RldiwgUFRSX0VSUihscC0mZ3Q7YXhpX2NsayksCi0JCQkJICAgICAmIzM0O2NvdWxkIG5vdCBnZXQgQVhJIGNsb2NrXG4mIzM0Oyk7CiYjNDM7CWxwLSZndDtheGllbmV0X2NvbmZpZyA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YSgmYW1wO3BkZXYtJmd0O2Rldik7CiYjNDM7CWlmICghbHAtJmd0O2F4aWVuZXRfY29uZmlnKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlscC0mZ3Q7bWlzY19jbGtzWzBdLmlkID0gJiMzNDtheGlzX2NsayYjMzQ7OwotCWxwLSZndDttaXNjX2Nsa3NbMV0uaWQgPSAmIzM0O3JlZl9jbGsmIzM0OzsKLQlscC0mZ3Q7bWlzY19jbGtzWzJdLmlkID0gJiMzNDttZ3RfY2xrJiMzNDs7Ci0KLQlyZXQgPSBkZXZtX2Nsa19idWxrX2dldF9vcHRpb25hbF9lbmFibGUoJmFtcDtwZGV2LSZndDtkZXYsIFhBRV9OVU1fTUlTQ19DTE9DS1MsCi0JCQkJCQlscC0mZ3Q7bWlzY19jbGtzKTsKJiM0MzsJcmV0ID0gbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtjbGtfaW5pdChscCk7CiAJaWYgKHJldCkKLQkJcmV0dXJuIGRldl9lcnJfcHJvYmUoJmFtcDtwZGV2LSZndDtkZXYsIHJldCwKLQkJCQkgICAgICYjMzQ7Y291bGQgbm90IGdldC9lbmFibGUgbWlzYy4gY2xvY2tzXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJLyogTWFwIGRldmljZSByZWdpc3RlcnMgKi8KIAlscC0mZ3Q7cmVncyA9IGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDAsICZhbXA7ZXRocmVzKTsKQEAgLTI4NjEsOSAmIzQzOzMwOTEsNiBAQCBzdGF0aWMgaW50IGF4aWVuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkvKiBTZXR1cCBjaGVja3N1bSBvZmZsb2FkLCBidXQgZGVmYXVsdCB0byBvZmYgaWYgbm90IHNwZWNpZmllZCAqLwogCWxwLSZndDtmZWF0dXJlcyA9IDA7CiAKLQlpZiAoYXhpZW5ldF9pb3IobHAsIFhBRV9BQklMSVRZX09GRlNFVCkgJmFtcDsgWEFFX0FCSUxJVFlfU1RBVFMpCi0JCWxwLSZndDtmZWF0dXJlcyB8PSBYQUVfRkVBVFVSRV9TVEFUUzsKLQogCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtJmd0O2Rldi5vZl9ub2RlLCAmIzM0O3hsbngsdHhjc3VtJiMzNDssICZhbXA7dmFsdWUpOwogCWlmICghcmV0KSB7CiAJCXN3aXRjaCAodmFsdWUpIHsKQEAgLTI5NDAsNyAmIzQzOzMxNjcsMTcgQEAgc3RhdGljIGludCBheGllbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAomIzQzOwlpZiAobHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtwcm9iZV9pbml0KQomIzQzOwkJbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtwcm9iZV9pbml0KGxwKTsKJiM0MzsKIAlpZiAoIW9mX3Byb3BlcnR5X3ByZXNlbnQocGRldi0mZ3Q7ZGV2Lm9mX25vZGUsICYjMzQ7ZG1hcyYjMzQ7KSkgewomIzQzOwkJLyogTm9uLWRtYWVuZ2luZSAobGVnYWN5IERNQSkgbW9kZSBpcyBvbmx5IHN1cHBvcnRlZCBieSBzb21lIE1BQ3MgKi8KJiM0MzsJCWlmICghbHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDtsZWdhY3lfZG1hKSB7CiYjNDM7CQkJZGV2X2VycigmYW1wO3BkZXYtJmd0O2RldiwKJiM0MzsJCQkJJiMzNDtMZWdhY3kgRE1BIG1vZGUgbm90IHN1cHBvcnRlZCBieSB0aGlzIE1BQywgdXNlIGRtYWVuZ2luZVxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwogCQkvKiBGaW5kIHRoZSBETUEgbm9kZSwgbWFwIHRoZSBETUEgcmVnaXN0ZXJzLCBhbmQgZGVjb2RlIHRoZSBETUEgSVJRcyAqLwogCQlucCA9IG9mX3BhcnNlX3BoYW5kbGUocGRldi0mZ3Q7ZGV2Lm9mX25vZGUsICYjMzQ7YXhpc3RyZWFtLWNvbm5lY3RlZCYjMzQ7LCAwKTsKIApAQCAtMzAyMCw3ICYjNDM7MzI1NywxMCBAQCBzdGF0aWMgaW50IGF4aWVuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkJc3RydWN0IHhpbGlueF92ZG1hX2NvbmZpZyBjZmc7CiAJCXN0cnVjdCBkbWFfY2hhbiAqdHhfY2hhbjsKIAotCQlscC0mZ3Q7ZXRoX2lycSA9IHBsYXRmb3JtX2dldF9pcnFfb3B0aW9uYWwocGRldiwgMCk7CiYjNDM7CQlpZiAobHAtJmd0O2F4aWVuZXRfY29uZmlnLSZndDttYWNfaXJxKQomIzQzOwkJCWxwLSZndDtldGhfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbChwZGV2LCAwKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlscC0mZ3Q7ZXRoX2lycSA9IC1FTlhJTzsKIAkJaWYgKGxwLSZndDtldGhfaXJxICZsdDsgMCAmYW1wOyZhbXA7IGxwLSZndDtldGhfaXJxICE9IC1FTlhJTykgewogCQkJcmV0dXJuIGxwLSZndDtldGhfaXJxOwogCQl9CkBAIC0zMDczLDEwICYjNDM7MzMxMywxMiBAQCBzdGF0aWMgaW50IGF4aWVuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlscC0mZ3Q7dHhfZG1hX2NyID0gYXhpZW5ldF9jYWxjX2NyKGxwLCBYQVhJRE1BX0RGVF9UWF9USFJFU0hPTEQsCiAJCQkJCVhBWElETUFfREZUX1RYX1VTRUMpOwogCi0JcmV0ID0gYXhpZW5ldF9tZGlvX3NldHVwKGxwKTsKLQlpZiAocmV0KQotCQlkZXZfd2FybigmYW1wO3BkZXYtJmd0O2RldiwKLQkJCSAmIzM0O2Vycm9yIHJlZ2lzdGVyaW5nIE1ESU8gYnVzOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CWlmIChscC0mZ3Q7YXhpZW5ldF9jb25maWctJmd0O21kaW8pIHsKJiM0MzsJCXJldCA9IGF4aWVuZXRfbWRpb19zZXR1cChscCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWRldl93YXJuKCZhbXA7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkgJiMzNDtlcnJvciByZWdpc3RlcmluZyBNRElPIGJ1czogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwl9CiAKIAlpZiAobHAtJmd0O3BoeV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSB8fAogCSAgICBscC0mZ3Q7cGh5X21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCkgewpAQCAtMzEwMCwyMyAmIzQzOzMzNDIsMjEgQEAgc3RhdGljIGludCBheGllbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCQlnb3RvIGNsZWFudXBfbWRpbzsKIAkJfQogCQlvZl9ub2RlX3B1dChucCk7Ci0JCWxwLSZndDtwY3Mub3BzID0gJmFtcDtheGllbmV0X3Bjc19vcHM7CiYjNDM7CQlscC0mZ3Q7cGNzLm9wcyA9IGxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7cGNzX29wczsKJiM0MzsJCWxwLSZndDtwY3MucG9sbCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7aW50ZXJuYWxfcGNzKSB7CiYjNDM7CQlscC0mZ3Q7cGNzLm9wcyA9IGxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7cGNzX29wczsKIAkJbHAtJmd0O3Bjcy5wb2xsID0gdHJ1ZTsKIAl9CiAKIAlscC0mZ3Q7cGh5bGlua19jb25maWcuZGV2ID0gJmFtcDtuZGV2LSZndDtkZXY7CiAJbHAtJmd0O3BoeWxpbmtfY29uZmlnLnR5cGUgPSBQSFlMSU5LX05FVERFVjsKIAlscC0mZ3Q7cGh5bGlua19jb25maWcubWFjX21hbmFnZWRfcG0gPSB0cnVlOwotCWxwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzID0gTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFIHwKLQkJTUFDXzEwRkQgfCBNQUNfMTAwRkQgfCBNQUNfMTAwMEZEOwomIzQzOwlscC0mZ3Q7cGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyA9IE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRTsKIAotCV9fc2V0X2JpdChscC0mZ3Q7cGh5X21vZGUsIGxwLSZndDtwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7Ci0JaWYgKGxwLSZndDtzd2l0Y2hfeF9zZ21paSkgewotCQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCwKLQkJCSAgbHAtJmd0O3BoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTsKLQkJX19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSwKLQkJCSAgbHAtJmd0O3BoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTsKLQl9CiYjNDM7CWxwLSZndDtheGllbmV0X2NvbmZpZy0mZ3Q7cGh5bGlua19zZXRfY2FwcyhscCwgJmFtcDtscC0mZ3Q7cGh5bGlua19jb25maWcpOwogCiAJbHAtJmd0O3BoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZSgmYW1wO2xwLSZndDtwaHlsaW5rX2NvbmZpZywgcGRldi0mZ3Q7ZGV2LmZ3bm9kZSwKIAkJCQkgICAgIGxwLSZndDtwaHlfbW9kZSwKQEAgLTMxNTksNyAmIzQzOzMzOTksOCBAQCBzdGF0aWMgdm9pZCBheGllbmV0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCWlmIChscC0mZ3Q7cGNzX3BoeSkKIAkJcHV0X2RldmljZSgmYW1wO2xwLSZndDtwY3NfcGh5LSZndDtkZXYpOwogCi0JYXhpZW5ldF9tZGlvX3RlYXJkb3duKGxwKTsKJiM0MzsJaWYgKGxwLSZndDttaWlfYnVzKQomIzQzOwkJYXhpZW5ldF9tZGlvX3RlYXJkb3duKGxwKTsKIH0KIAogc3RhdGljIHZvaWQgYXhpZW5ldF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X3h4di5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X3h4di5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmRiYzljMjFiMTA0YWYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfeHh2LmMKQEAgLTAsMCAmIzQzOzEsNTk1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogWFhWICgxMEcvMjVHKSBzdXBwb3J0CiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZXRodG9vbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeWxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt4aWxpbnhfYXhpZW5ldC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hpbGlueF9heGllbmV0X3h4di5oJiMzNDsKJiM0MzsKJiM0MzsvKiByZWFkbF9wb2xsX3RpbWVvdXQoKSBzbGVlcCBpbnRlcnZhbCAodXMpIGFuZCAxIG1zIHRvdGFsIHRpbWVvdXQgZm9yIEdUCiYjNDM7ICogcmVzZXQtZG9uZSBhbmQgUENTIGJsb2NrLWxvY2sgcG9sbHMuIFZhbHVlcyBmcm9tIFp5bnFNUC9WZXJzYWwgYnJpbmctdXA7CiYjNDM7ICogUEcyMTAgZG9lcyBub3Qgc3BlY2lmeSB0aGVzZSBib3VuZHMuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBYWFZfTElOS19QT0xMX0lOVEVSVkFMX1VTCTEwCiYjNDM7CiYjNDM7LyogTnVtYmVyIG9mIFhYViAoMTBHLzI1RykgTUFDIHJlZ2lzdGVycyBleHBvc2VkIHZpYSBldGh0b29sIC1kLgomIzQzOyAqIENvdmVycyBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMgcmVnaXN0ZXJzIHBlciBYaWxpbnggUEcyMTAuCiYjNDM7ICovCiYjNDM7c3RhdGljIGNvbnN0IHUzMiBheGllbmV0X3h4dl9yZWdfZHVtcF9vZmZzZXRzW1hYVl9SRUdTX05dID0gewomIzQzOwlYWFZfR1RfUkVTRVRfT0ZGU0VULAomIzQzOwlYWFZfUkVTRVRfT0ZGU0VULAomIzQzOwlYWFZfTU9ERV9PRkZTRVQsCiYjNDM7CVhYVl9UQ19PRkZTRVQsCiYjNDM7CVhYVl9SQ1cxX09GRlNFVCwKJiM0MzsJWFhWX0pVTV9PRkZTRVQsCiYjNDM7CVhYVl9WTF9MRU5HVEhfT0ZGU0VULAomIzQzOwlYWFZfVElDS1JFR19PRkZTRVQsCiYjNDM7CVhYVl9DT05GSUdfUkVWSVNJT04sCiYjNDM7CVhYVl9DT05GSUdfMTU4OF9PRkZTRVQsCiYjNDM7CVhYVl9DT05GSUdfVFhfRkxPV19DVFJMMV9PRkZTRVQsCiYjNDM7CVhYVl9DT05GSUdfUlhfRkxPV19DVFJMMV9PRkZTRVQsCiYjNDM7CVhYVl9DT05GSUdfUlhfRkxPV19DVFJMMl9PRkZTRVQsCiYjNDM7CVhYVl9DT05GSUdfUlNGRUNfT0ZGU0VULAomIzQzOwlYWFZfQ09ORklHX0ZFQ19PRkZTRVQsCiYjNDM7CVhYVl9BTl9DVEwxX09GRlNFVCwKJiM0MzsJWFhWX0FOX0NUTDJfT0ZGU0VULAomIzQzOwlYWFZfQU5fQUJJTElUWV9PRkZTRVQsCiYjNDM7CVhYVl9MVF9DVEwxX09GRlNFVCwKJiM0MzsJWFhWX1NXSVRDSF9DT1JFX1NQRUVEX09GRlNFVCwKJiM0MzsJWFhWX0NPTkZJR18xNTg4XzMyQklUX09GRlNFVCwKJiM0MzsJWFhWX1RYX0NPTkZJR18xNTg4X09GRlNFVCwKJiM0MzsJWFhWX1JYX0NPTkZJR18xNTg4X09GRlNFVCwKJiM0MzsJWFhWX0dUV0laX0NUUkxfT0ZGU0VULAomIzQzOwlYWFZfU1RBVFJYX1NUQVRVUzBfT0ZGU0VULAomIzQzOwlYWFZfUlhfU1RBVFVTX1JFRzEsCiYjNDM7CVhYVl9TVEFUUlhfU1RBVFVTMl9PRkZTRVQsCiYjNDM7CVhYVl9TVEFUUlhfQkxLTENLX09GRlNFVCwKJiM0MzsJWFhWX1NUQVRfUlhfUlNGRUNfU1RBVFVTX09GRlNFVCwKJiM0MzsJWFhWX1NUQVRfUlhfRkVDX1NUQVRVU19PRkZTRVQsCiYjNDM7CVhYVl9TVEFUX1RYX1JTRkVDX1NUQVRVU19PRkZTRVQsCiYjNDM7CVhYVl9TVEFUX1RYX0ZMT1dfQ1RSTDFfT0ZGU0VULAomIzQzOwlYWFZfU1RBVF9SWF9GTE9XX0NUUkwxX09GRlNFVCwKJiM0MzsJWFhWX1NUQVRfQU5fU1RTX09GRlNFVCwKJiM0MzsJWFhWX1NUQVRfQU5fTFBfU1RBVFVTX09GRlNFVCwKJiM0MzsJWFhWX1NUQVRfQU5fTElOS19DVExfT0ZGU0VULAomIzQzOwlYWFZfU1RBVF9MVF9TVEFUVVMxX09GRlNFVCwKJiM0MzsJWFhWX1NUQVRfTFRfU1RBVFVTMl9PRkZTRVQsCiYjNDM7CVhYVl9TVEFUX0xUX1NUQVRVUzNfT0ZGU0VULAomIzQzOwlYWFZfU1RBVF9MVF9TVEFUVVM0X09GRlNFVCwKJiM0MzsJWFhWX1NUQVRfTFRfQ09FRkYwX09GRlNFVCwKJiM0MzsJWFhWX1NUQVRfUlhfVkFMSURfQ1RSTF9DT0RFX09GRlNFVCwKJiM0MzsJWFhWX1NUQVRfQ09SRV9TUEVFRF9PRkZTRVQsCiYjNDM7CVhYVl9TVEFUX1RTTl9PRkZTRVQsCiYjNDM7CVhYVl9TVEFUX0dUV0laX09GRlNFVCwKJiM0MzsJWFhWX1NUQVRfQU5fTElOS19DVEwyX09GRlNFVCwKJiM0Mzt9OwomIzQzOwomIzQzOy8qIE9wdGlvbiB0YWJsZSBmb3Igc2V0dGluZyB1cCBYWFYgRXRoZXJuZXQgaGFyZHdhcmUgb3B0aW9ucyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgYXhpZW5ldF9vcHRpb24geHh2ZW5ldF9vcHRpb25zW10gPSB7CiYjNDM7CXsgLyogVHVybiBvbiBGQ1Mgc3RyaXBwaW5nIG9uIHJlY2VpdmUgcGFja2V0cyAqLwomIzQzOwkJLm9wdCA9IFhBRV9PUFRJT05fRkNTX1NUUklQLAomIzQzOwkJLnJlZyA9IFhYVl9SQ1cxX09GRlNFVCwKJiM0MzsJCS5tX29yID0gWFhWX1JDVzFfRkNTX01BU0ssCiYjNDM7CX0sIHsgLyogVHVybiBvbiBGQ1MgaW5zZXJ0aW9uIG9uIHRyYW5zbWl0IHBhY2tldHMgKi8KJiM0MzsJCS5vcHQgPSBYQUVfT1BUSU9OX0ZDU19JTlNFUlQsCiYjNDM7CQkucmVnID0gWFhWX1RDX09GRlNFVCwKJiM0MzsJCS5tX29yID0gWFhWX1RDX0ZDU19NQVNLLAomIzQzOwl9LCB7IC8qIEVuYWJsZSB0cmFuc21pdHRlciAqLwomIzQzOwkJLm9wdCA9IFhBRV9PUFRJT05fVFhFTiwKJiM0MzsJCS5yZWcgPSBYWFZfVENfT0ZGU0VULAomIzQzOwkJLm1fb3IgPSBYWFZfVENfVFhfTUFTSywKJiM0MzsJfSwgeyAvKiBFbmFibGUgcmVjZWl2ZXIgKi8KJiM0MzsJCS5vcHQgPSBYQUVfT1BUSU9OX1JYRU4sCiYjNDM7CQkucmVnID0gWFhWX1JDVzFfT0ZGU0VULAomIzQzOwkJLm1fb3IgPSBYWFZfUkNXMV9SWF9NQVNLLAomIzQzOwl9LAomIzQzOwl7fQomIzQzO307CiYjNDM7CiYjNDM7LyogUEcyMTAgc3RhdGlzdGljcy1ibG9jayBvZmZzZXRzIGluZGV4ZWQgYnkgZW51bSB4eHZfc3RhdC4gRWFjaCBlbnRyeSBpcwomIzQzOyAqIHRoZSAzMi1iaXQgTFNCIHJlZ2lzdGVyIGFkZHJlc3M7IHRoZSBjb3JyZXNwb25kaW5nIE1TQiBpcyBhdCAmIzQzOzQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGNvbnN0IHUzMiBheGllbmV0X3h4dl9zdGF0X29mZnNldHNbWFhWX1NUQVRfQ09VTlRdID0gewomIzQzOwlbWFhWX1NUQVRfUlhfVE9UQUxfUEFDS0VUU10JID0gWFhWX1NUQVRfUlhfVE9UQUxfUEFDS0VUU19PRkZTRVQsCiYjNDM7CVtYWFZfU1RBVF9SWF9UT1RBTF9HT09EX1BBQ0tFVFNdID0gWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9QQUNLRVRTX09GRlNFVCwKJiM0MzsJW1hYVl9TVEFUX1JYX1RPVEFMX0JZVEVTXQkgPSBYWFZfU1RBVF9SWF9UT1RBTF9CWVRFU19PRkZTRVQsCiYjNDM7CVtYWFZfU1RBVF9SWF9UT1RBTF9HT09EX0JZVEVTXQkgPSBYWFZfU1RBVF9SWF9UT1RBTF9HT09EX0JZVEVTX09GRlNFVCwKJiM0MzsJW1hYVl9TVEFUX1JYX0JBRF9GQ1NdCQkgPSBYWFZfU1RBVF9SWF9CQURfRkNTX09GRlNFVCwKJiM0MzsJW1hYVl9TVEFUX1JYX0lOUkFOR0VFUlJdCSA9IFhYVl9TVEFUX1JYX0lOUkFOR0VFUlJfT0ZGU0VULAomIzQzOwlbWFhWX1NUQVRfUlhfTVVMVElDQVNUXQkJID0gWFhWX1NUQVRfUlhfTVVMVElDQVNUX09GRlNFVCwKJiM0MzsJW1hYVl9TVEFUX1JYX0JST0FEQ0FTVF0JCSA9IFhYVl9TVEFUX1JYX0JST0FEQ0FTVF9PRkZTRVQsCiYjNDM7CVtYWFZfU1RBVF9SWF9VTkRFUlNJWkVdCQkgPSBYWFZfU1RBVF9SWF9VTkRFUlNJWkVfT0ZGU0VULAomIzQzOwlbWFhWX1NUQVRfUlhfRlJBR01FTlRdCQkgPSBYWFZfU1RBVF9SWF9GUkFHTUVOVF9PRkZTRVQsCiYjNDM7CVtYWFZfU1RBVF9SWF9KQUJCRVJdCQkgPSBYWFZfU1RBVF9SWF9KQUJCRVJfT0ZGU0VULAomIzQzOwlbWFhWX1NUQVRfUlhfT1ZFUlNJWkVdCQkgPSBYWFZfU1RBVF9SWF9PVkVSU0laRV9PRkZTRVQsCiYjNDM7CVtYWFZfU1RBVF9SWF9QQVVTRV0JCSA9IFhYVl9TVEFUX1JYX1BBVVNFX09GRlNFVCwKJiM0MzsJW1hYVl9TVEFUX1RYX1RPVEFMX1BBQ0tFVFNdCSA9IFhYVl9TVEFUX1RYX1RPVEFMX1BBQ0tFVFNfT0ZGU0VULAomIzQzOwlbWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9QQUNLRVRTXSA9IFhYVl9TVEFUX1RYX1RPVEFMX0dPT0RfUEFDS0VUU19PRkZTRVQsCiYjNDM7CVtYWFZfU1RBVF9UWF9UT1RBTF9CWVRFU10JID0gWFhWX1NUQVRfVFhfVE9UQUxfQllURVNfT0ZGU0VULAomIzQzOwlbWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9CWVRFU10JID0gWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9CWVRFU19PRkZTRVQsCiYjNDM7CVtYWFZfU1RBVF9UWF9CQURfRkNTXQkJID0gWFhWX1NUQVRfVFhfQkFEX0ZDU19PRkZTRVQsCiYjNDM7CVtYWFZfU1RBVF9UWF9GUkFNRV9FUlJPUl0JID0gWFhWX1NUQVRfVFhfRlJBTUVfRVJST1JfT0ZGU0VULAomIzQzOwlbWFhWX1NUQVRfVFhfTVVMVElDQVNUXQkJID0gWFhWX1NUQVRfVFhfTVVMVElDQVNUX09GRlNFVCwKJiM0MzsJW1hYVl9TVEFUX1RYX0JST0FEQ0FTVF0JCSA9IFhYVl9TVEFUX1RYX0JST0FEQ0FTVF9PRkZTRVQsCiYjNDM7CVtYWFZfU1RBVF9UWF9QQVVTRV0JCSA9IFhYVl9TVEFUX1RYX1BBVVNFX09GRlNFVCwKJiM0Mzt9OwomIzQzOwomIzQzOy8qIFhYViAoUEcyMTApIGNvdW50ZXJzIGV4cG9zZWQgdmlhIGV0aHRvb2wgLVMuIE9ubHkgY291bnRlcnMgdGhhdCBoYXZlIG5vCiYjNDM7ICogc3RhbmRhcmQgdUFQSSBhcmUgbGlzdGVkIGhlcmU7IHRoZSB0b3RhbHMgaW5jbHVkZSBlcnJvcmVkIGZyYW1lcywgc28gdGhleQomIzQzOyAqIGFyZSBkaXN0aW5jdCBmcm9tIHRoZSBnb29kLWZyYW1lIGNvdW50cyBpbiBydG5sX2xpbmtfc3RhdHM2NCBhbmQgdGhlCiYjNDM7ICogSUVFRSBNQUMgc3RhdGlzdGljcy4gRXZlcnkgb3RoZXIgWFhWIGNvdW50ZXIgaXMgcmVwb3J0ZWQgdGhyb3VnaCB0aGUKJiM0MzsgKiBkZWRpY2F0ZWQgc3RhdHM2NCwgcGF1c2UsIE1BQyBhbmQgUk1PTiBjYWxsYmFja3MgaW5zdGVhZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgY29uc3QgZW51bSB4eHZfc3RhdCBheGllbmV0X3h4dl9wcml2X3N0YXRzW10gPSB7CiYjNDM7CVhYVl9TVEFUX1JYX1RPVEFMX1BBQ0tFVFMsCiYjNDM7CVhYVl9TVEFUX1JYX1RPVEFMX0JZVEVTLAomIzQzOwlYWFZfU1RBVF9UWF9UT1RBTF9QQUNLRVRTLAomIzQzOwlYWFZfU1RBVF9UWF9UT1RBTF9CWVRFUywKJiM0MzsJWFhWX1NUQVRfVFhfQkFEX0ZDUywKJiM0MzsJWFhWX1NUQVRfVFhfRlJBTUVfRVJST1IsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciBheGllbmV0X3h4dl9ldGh0b29sX3N0YXRzX3N0cmluZ3NbXVtFVEhfR1NUUklOR19MRU5dID0gewomIzQzOwkmIzM0O1JYIFRvdGFsIFBhY2tldHMmIzM0OywKJiM0MzsJJiMzNDtSWCBUb3RhbCBCeXRlcyYjMzQ7LAomIzQzOwkmIzM0O1RYIFRvdGFsIFBhY2tldHMmIzM0OywKJiM0MzsJJiMzNDtUWCBUb3RhbCBCeXRlcyYjMzQ7LAomIzQzOwkmIzM0O1RYIEJhZCBGQ1MmIzM0OywKJiM0MzsJJiMzNDtUWCBGcmFtZSBFcnJvciYjMzQ7LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHU2NCBheGllbmV0X3h4dl9yZWFkX2NvdW50ZXIoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLCBlbnVtIHh4dl9zdGF0IHN0YXQpCiYjNDM7ewomIzQzOwl1MzIgb2ZmID0gYXhpZW5ldF94eHZfc3RhdF9vZmZzZXRzW3N0YXRdOwomIzQzOwl1MzIgbHNiLCBtc2I7CiYjNDM7CiYjNDM7CWxzYiA9IGF4aWVuZXRfaW9yKGxwLCBvZmYpOwomIzQzOwltc2IgPSBheGllbmV0X2lvcihscCwgb2ZmICYjNDM7IFhYVl9TVEFUX01TQl9PRkZTRVQpOwomIzQzOwomIzQzOwlyZXR1cm4gKCh1NjQpbXNiICZsdDsmbHQ7IDMyKSB8IGxzYjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgYXhpZW5ldF94eHZfaXBfaGFzX2d0d2l6X3N0YXR1cyh1MzIgaXBfdmVyc2lvbikKJiM0Mzt7CiYjNDM7CXU4IG1pbm9yID0gRklFTERfR0VUKFhYVl9NSU5fTUFTSywgaXBfdmVyc2lvbik7CiYjNDM7CXU4IG1haiA9IEZJRUxEX0dFVChYWFZfTUFKX01BU0ssIGlwX3ZlcnNpb24pOwomIzQzOwomIzQzOwlpZiAobWFqID09IFhYVl9JUF9WRVJfR1RXSVpfTUFKX01JTikKJiM0MzsJCXJldHVybiBtaW5vciAmZ3Q7PSBYWFZfSVBfVkVSX0dUV0laX01JTl9NSU47CiYjNDM7CXJldHVybiBtYWogJmd0OyBYWFZfSVBfVkVSX0dUV0laX01BSl9NSU47CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGF4aWVuZXRfeHh2X3NldG9wdGlvbnMgLSBTZXQgWFhWIE1BQyBvcHRpb25zIGZyb20gdGhlIG9wdGlvbiB0YWJsZQomIzQzOyAqIEBuZGV2OiBQb2ludGVyIHRvIHRoZSBuZXRfZGV2aWNlIHN0cnVjdHVyZQomIzQzOyAqIEBvcHRpb25zOiBPcHRpb24gZmxhZ3MgdG8gYXBwbHkKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9zZXRvcHRpb25zKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgb3B0aW9ucykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwlzdHJ1Y3QgYXhpZW5ldF9vcHRpb24gKnRwID0geHh2ZW5ldF9vcHRpb25zOwomIzQzOwl1MzIgcmVnOwomIzQzOwomIzQzOwl3aGlsZSAodHAtJmd0O29wdCkgewomIzQzOwkJcmVnID0gYXhpZW5ldF9pb3IobHAsIHRwLSZndDtyZWcpICZhbXA7IH50cC0mZ3Q7bV9vcjsKJiM0MzsJCWlmIChvcHRpb25zICZhbXA7IHRwLSZndDtvcHQpCiYjNDM7CQkJcmVnIHw9IHRwLSZndDttX29yOwomIzQzOwkJYXhpZW5ldF9pb3cobHAsIHRwLSZndDtyZWcsIHJlZyk7CiYjNDM7CQl0cCYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbHAtJmd0O29wdGlvbnMgfD0gb3B0aW9uczsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYXhpZW5ldF94eHZfcHJvYmVfaW5pdCAtIEluaXRpYWxpemUgWFhWLXNwZWNpZmljIHN0YXRlIGF0IHByb2JlIHRpbWUKJiM0MzsgKiBAbHA6IFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF94eHZfcHJvYmVfaW5pdChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApCiYjNDM7ewomIzQzOwlscC0mZ3Q7eHh2X2lwX3ZlcnNpb24gPSBheGllbmV0X2lvcihscCwgWFhWX0NPTkZJR19SRVZJU0lPTik7CiYjNDM7CWxwLSZndDtmZWF0dXJlcyB8PSBYQUVfRkVBVFVSRV9TVEFUUzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYXhpZW5ldF94eHZfZ3RfcmVzZXQgLSBQdWxzZSB0aGUgWFhWIEdUIHJlc2V0IGxpbmUKJiM0MzsgKiBAbHA6IFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF94eHZfZ3RfcmVzZXQoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKQomIzQzO3sKJiM0MzsJdTMyIHZhbDsKJiM0MzsKJiM0MzsJLyogUmVzZXQgR1QgKi8KJiM0MzsJdmFsID0gYXhpZW5ldF9pb3IobHAsIFhYVl9HVF9SRVNFVF9PRkZTRVQpOwomIzQzOwl2YWwgfD0gWFhWX0dUX1JFU0VUX01BU0s7CiYjNDM7CWF4aWVuZXRfaW93KGxwLCBYWFZfR1RfUkVTRVRfT0ZGU0VULCB2YWwpOwomIzQzOwkvKiBBbGxvdyAxIG1zIGZvciB0aGUgR1QgcmVzZXQgdG8gc2V0dGxlIChzZWUgdGltZW91dCBub3RlIGFib3ZlKSAqLwomIzQzOwl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CiYjNDM7CXZhbCA9IGF4aWVuZXRfaW9yKGxwLCBYWFZfR1RfUkVTRVRfT0ZGU0VUKTsKJiM0MzsJdmFsICZhbXA7PSB+WFhWX0dUX1JFU0VUX01BU0s7CiYjNDM7CWF4aWVuZXRfaW93KGxwLCBYWFZfR1RfUkVTRVRfT0ZGU0VULCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBheGllbmV0X3h4dl9wb2xsX2xpbmtfcmVhZHkgLSBXYWl0IGZvciBYWFYgR1QgYW5kIFBDUyBibG9jayBsb2NrCiYjNDM7ICogQG5kZXY6IFBvaW50ZXIgdG8gdGhlIG5ldF9kZXZpY2Ugc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBQb2xsIEdUIHdpemFyZCByZXNldC1kb25lIG9uIElQIHYzLjImIzQzOywgdGhlbiBSWCBQQ1MgYmxvY2sgbG9jay4gQmxvY2stbG9jawomIzQzOyAqIGZhaWx1cmUgaXMgbG9nZ2VkIGJ1dCBub3QgcHJvcGFnYXRlZDogaXQgZGVwZW5kcyBvbiBhIGxpdmUgbGluayBwYXJ0bmVyIGFuZAomIzQzOyAqIHJlZmVyZW5jZSBjbG9jaywgc28gYW4gdW5wbHVnZ2VkIGNhYmxlIG11c3Qgbm90IGZhaWwgZGV2aWNlIGJyaW5nLXVwLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgaWYgR1QgcmVzZXQtZG9uZSB0aW1lcyBvdXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBheGllbmV0X3h4dl9wb2xsX2xpbmtfcmVhZHkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyogQ29uZmlybSBYWFYgRXRoZXJuZXQgaXMgdXA6IG9uIElQIHYzLjImIzQzOywgd2FpdCBmb3IgR1QKJiM0MzsJICogcmVzZXQtZG9uZSBiZWZvcmUgZnVydGhlciByZWdpc3RlciBhY2Nlc3MsIHRoZW4gcG9sbCB1bnRpbAomIzQzOwkgKiBSWCBQQ1MgYmxvY2sgbG9jayBpcyBhc3NlcnRlZC4KJiM0MzsJICovCiYjNDM7CWlmIChheGllbmV0X3h4dl9pcF9oYXNfZ3R3aXpfc3RhdHVzKGxwLSZndDt4eHZfaXBfdmVyc2lvbikpIHsKJiM0MzsJCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChscC0mZ3Q7cmVncyAmIzQzOyBYWFZfU1RBVF9HVFdJWl9PRkZTRVQsCiYjNDM7CQkJCQkgdmFsLAomIzQzOwkJCQkJICh2YWwgJmFtcDsgWFhWX0dUV0laX1JFU0VUX0RPTkUpID09IFhYVl9HVFdJWl9SRVNFVF9ET05FLAomIzQzOwkJCQkJIFhYVl9MSU5LX1BPTExfSU5URVJWQUxfVVMsCiYjNDM7CQkJCQkgREVMQVlfT0ZfT05FX01JTExJU0VDKTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5kZXYsICYjMzQ7WFhWIE1BQyBHVCByZXNldCBub3QgY29tcGxldGUhIENyb3NzLWNoZWNrIHRoZSBNQUMgcmVmIGNsb2NrIGNvbmZpZ3VyYXRpb25cbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChscC0mZ3Q7cmVncyAmIzQzOyBYWFZfU1RBVFJYX0JMS0xDS19PRkZTRVQsCiYjNDM7CQkJCSB2YWwsICh2YWwgJmFtcDsgWFhWX1JYX0JMS0xDS19NQVNLKSwKJiM0MzsJCQkJIFhYVl9MSU5LX1BPTExfSU5URVJWQUxfVVMsCiYjNDM7CQkJCSBERUxBWV9PRl9PTkVfTUlMTElTRUMpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJbmV0ZGV2X2VycihuZGV2LCAmIzM0O1hYViBNQUMgYmxvY2sgbG9jayBub3QgY29tcGxldGUhIENyb3NzLWNoZWNrIHRoZSBNQUMgcmVmIGNsb2NrIGNvbmZpZ3VyYXRpb25cbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGF4aWVuZXRfeHh2X21hY19pbml0IC0gWFhWIE1BQy1zcGVjaWZpYyBicmluZy11cCBhZnRlciB0aGUgRE1BIHJlc2V0CiYjNDM7ICogQG5kZXY6IFBvaW50ZXIgdG8gdGhlIG5ldF9kZXZpY2Ugc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIG51bWJlciBvdGhlcndpc2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBheGllbmV0X3h4dl9tYWNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBheGllbmV0X3h4dl9wb2xsX2xpbmtfcmVhZHkobmRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlscC0mZ3Q7b3B0aW9ucyB8PSBYQUVfT1BUSU9OX0ZDU19TVFJJUDsKJiM0MzsJbHAtJmd0O29wdGlvbnMgfD0gWEFFX09QVElPTl9GQ1NfSU5TRVJUOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF94eHZfcGh5bGlua19zZXRfY2FwYWJpbGl0aWVzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwKJiM0MzsJCQkJCQkgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjZmcpCiYjNDM7ewomIzQzOwl1MzIgY29yZV9zcGVlZDsKJiM0MzsJYm9vbCBydHN3OwomIzQzOwomIzQzOwljb3JlX3NwZWVkID0gYXhpZW5ldF9pb3IobHAsIFhYVl9TVEFUX0NPUkVfU1BFRURfT0ZGU0VUKTsKJiM0MzsJLyogQml0WzE6MF06IDAwPTI1RywgMDE9MTBHLCAxMD1ydW50aW1lLXN3aXRjaGFibGUgMjVHLAomIzQzOwkgKiAxMT1ydW50aW1lLXN3aXRjaGFibGUgMTBHLiBBIHJ1bnRpbWUtc3dpdGNoYWJsZSBjb3JlIGNhbiBvcGVyYXRlIGF0CiYjNDM7CSAqIGVpdGhlciBzcGVlZCwgc28gYWR2ZXJ0aXNlIGJvdGg7IGEgZml4ZWQgY29yZSBhZHZlcnRpc2VzIG9ubHkgaXRzCiYjNDM7CSAqIGNvbmZpZ3VyZWQgc3BlZWQuCiYjNDM7CSAqLwomIzQzOwlydHN3ID0gY29yZV9zcGVlZCAmYW1wOyBYWFZfU1RBVF9DT1JFX1NQRUVEX1JUU1dfTUFTSzsKJiM0MzsKJiM0MzsJaWYgKHJ0c3cgfHwgKGNvcmVfc3BlZWQgJmFtcDsgWFhWX1NUQVRfQ09SRV9TUEVFRF8xMEdfTUFTSykpIHsKJiM0MzsJCWNmZy0mZ3Q7bWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMDBGRDsKJiM0MzsJCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIsCiYjNDM7CQkJICBjZmctJmd0O3N1cHBvcnRlZF9pbnRlcmZhY2VzKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocnRzdyB8fCAhKGNvcmVfc3BlZWQgJmFtcDsgWFhWX1NUQVRfQ09SRV9TUEVFRF8xMEdfTUFTSykpIHsKJiM0MzsJCWNmZy0mZ3Q7bWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMjUwMDBGRDsKJiM0MzsJCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMjVHQkFTRVIsCiYjNDM7CQkJICBjZmctJmd0O3N1cHBvcnRlZF9pbnRlcmZhY2VzKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLAomIzQzOwkJCQkgICAgICB1bnNpZ25lZCBpbnQgbmVnX21vZGUsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gcGNzX3RvX2F4aWVuZXRfbG9jYWwocGNzKTsKJiM0MzsKJiM0MzsJc3RhdGUtJmd0O2R1cGxleCA9IERVUExFWF9GVUxMOwomIzQzOwlzdGF0ZS0mZ3Q7YW5fY29tcGxldGUgPSAhIShheGllbmV0X2lvcihscCwgWFhWX1NUQVRfQU5fU1RTX09GRlNFVCkgJmFtcDsKJiM0MzsJCQkJWFhWX0FOX0NPTVBMRVRFX01BU0spOwomIzQzOwlzdGF0ZS0mZ3Q7bGluayA9IGF4aWVuZXRfaW9yKGxwLCBYWFZfUlhfU1RBVFVTX1JFRzEpICZhbXA7CiYjNDM7CQkgICAgICBYWFZfUlhfU1RBVFVTX01BU0s7CiYjNDM7CiYjNDM7CWlmIChheGllbmV0X2lvcihscCwgWFhWX1NUQVRfQ09SRV9TUEVFRF9PRkZTRVQpICZhbXA7CiYjNDM7CSAgICBYWFZfU1RBVF9DT1JFX1NQRUVEXzEwR19NQVNLKQomIzQzOwkJc3RhdGUtJmd0O3NwZWVkID0gU1BFRURfMTAwMDA7CiYjNDM7CWVsc2UKJiM0MzsJCXN0YXRlLSZndDtzcGVlZCA9IFNQRUVEXzI1MDAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGF4aWVuZXRfeHh2X3Bjc19jb25maWcoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBuZWdfbW9kZSwKJiM0MzsJCQkJICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLAomIzQzOwkJCQkgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkdmVydGlzaW5nLAomIzQzOwkJCQkgIGJvb2wgcGVybWl0X3BhdXNlX3RvX21hYykKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfcGNzX29wcyBheGllbmV0X3h4dl9wY3Nfb3BzID0gewomIzQzOwkucGNzX2dldF9zdGF0ZSA9IGF4aWVuZXRfeHh2X3Bjc19nZXRfc3RhdGUsCiYjNDM7CS5wY3NfY29uZmlnID0gYXhpZW5ldF94eHZfcGNzX2NvbmZpZywKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGF4aWVuZXRfeHh2X2dldF9yZWdzIC0gRHVtcCBYWFYgTUFDIHJlZ2lzdGVycyBmb3IgZXRodG9vbAomIzQzOyAqIEBscDogUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmUKJiM0MzsgKiBAZGF0YTogQnVmZmVyIGZvciByZWdpc3RlciB2YWx1ZXMgKHplcm9lZCBhbmQgc2l6ZWQgYnkgdGhlIGNhbGxlcikKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfcmVncyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsIHUzMiAqZGF0YSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShheGllbmV0X3h4dl9yZWdfZHVtcF9vZmZzZXRzKTsgaSYjNDM7JiM0MzspCiYjNDM7CQlkYXRhW2ldID0gYXhpZW5ldF9pb3IobHAsIGF4aWVuZXRfeHh2X3JlZ19kdW1wX29mZnNldHNbaV0pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGF4aWVuZXRfMTBnMjVnX2Nsa19pbml0KHN0cnVjdCBheGllbmV0X2xvY2FsICpscCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IGxwLSZndDtkZXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIFRoZSByZWdpc3RlciwgUlggYW5kIEdUIERSUCBjbG9ja3MgYXJlIG1hbmRhdG9yeSBmb3IgTUFDJiM0MztQQ1MKJiM0MzsJICogb3BlcmF0aW9uLCBzbyBmZXRjaCB0aGVtIGFzIHJlcXVpcmVkLgomIzQzOwkgKi8KJiM0MzsJbHAtJmd0O2F4aV9jbGsgPSBkZXZtX2Nsa19nZXRfZW5hYmxlZChkZXYsICYjMzQ7c19heGkmIzM0Oyk7CiYjNDM7CWlmIChJU19FUlIobHAtJmd0O2F4aV9jbGspKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGxwLSZndDtheGlfY2xrKSwKJiM0MzsJCQkJICAgICAmIzM0O2NvdWxkIG5vdCBnZXQgQVhJIGNsb2NrXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWxwLSZndDttaXNjX2Nsa3NbMF0uaWQgPSAmIzM0O3J4X2NvcmUmIzM0OzsKJiM0MzsJbHAtJmd0O21pc2NfY2xrc1sxXS5pZCA9ICYjMzQ7ZHJwJiMzNDs7CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fY2xrX2J1bGtfZ2V0X2VuYWJsZShkZXYsIDIsIGxwLSZndDttaXNjX2Nsa3MpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsCiYjNDM7CQkJCSAgICAgJiMzNDtjb3VsZCBub3QgZ2V0L2VuYWJsZSBYWFYgY2xvY2tzXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBheGllbmV0X3h4dl9zdGF0c191cGRhdGUgLSBMYXRjaCBhbmQgYWNjdW11bGF0ZSBYWFYgaGFyZHdhcmUgY291bnRlcnMKJiM0MzsgKiBAbHA6IFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlCiYjNDM7ICoKJiM0MzsgKiBUaGUgWFhWIHN0YXRpc3RpY3MgY291bnRlcnMgYXJlIGNsZWFyLW9uLXRpY2sgKFBHMjEwKTogd3JpdGluZyBUSUNLX1JFRwomIzQzOyAqIGxhdGNoZXMgdGhlIGludGVybmFsIGFjY3VtdWxhdG9ycyBpbnRvIHRoZSByZWFkYWJsZSBTVEFUXypfTFNCL01TQiByZWdpc3RlcnMKJiM0MzsgKiBhbmQgY2xlYXJzIHRoZSBpbnRlcm5hbCBhY2N1bXVsYXRvcnMuIEVhY2ggcG9zdC1USUNLIHJlYWQgdGhlcmVmb3JlIHJldHVybnMKJiM0MzsgKiB0aGUgY291bnQgZm9yIHRoZSBpbnRlcnZhbCBzaW5jZSB0aGUgcHJldmlvdXMgVElDSywgc28gc29mdHdhcmUgYWNjdW11bGF0ZXMKJiM0MzsgKiB0aG9zZSBpbnRlcnZhbHMgaW50byBscC0mZ3Q7eHh2X3N0YXRfYmFzZS4gQSBsYXN0LWNvdW50ZXIgZGVsdGEgKGFzIHVzZWQgYnkgdGhlCiYjNDM7ICogZnJlZS1ydW5uaW5nIDFHIE1BQyBwYXRoKSBpcyBub3QgbmVlZGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfeHh2X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApCiYjNDM7ewomIzQzOwl1NjQgY291bnRlcltYWFZfU1RBVF9DT1VOVF07CiYjNDM7CWVudW0geHh2X3N0YXQgc3RhdDsKJiM0MzsKJiM0MzsJLyogTGF0Y2ggdGhlIGNsZWFyLW9uLXRpY2sgc25hcHNob3QgYW5kIHJlYWQgdGhlIGNvdW50ZXJzIG91dHNpZGUgdGhlCiYjNDM7CSAqIHNlcWNvdW50IHdyaXRlIHNlY3Rpb24sIHNvIG9ubHkgdGhlIGFjY3VtdWxhdG9yIHVwZGF0ZXMgcnVuIGluc2lkZSBpdAomIzQzOwkgKiBhbmQgdGhlIHJlYWRlciByZXRyeSB3aW5kb3cgc3RheXMgc2hvcnQuCiYjNDM7CSAqLwomIzQzOwlheGllbmV0X2lvdyhscCwgWFhWX1RJQ0tSRUdfT0ZGU0VULCBYWFZfVElDS1JFR19TVEFURU5fTUFTSyk7CiYjNDM7CWZvciAoc3RhdCA9IDA7IHN0YXQgJmx0OyBYWFZfU1RBVF9DT1VOVDsgc3RhdCYjNDM7JiM0MzspCiYjNDM7CQljb3VudGVyW3N0YXRdID0gYXhpZW5ldF94eHZfcmVhZF9jb3VudGVyKGxwLCBzdGF0KTsKJiM0MzsKJiM0MzsJd3JpdGVfc2VxY291bnRfYmVnaW4oJmFtcDtscC0mZ3Q7aHdfc3RhdHNfc2VxY291bnQpOwomIzQzOwlmb3IgKHN0YXQgPSAwOyBzdGF0ICZsdDsgWFhWX1NUQVRfQ09VTlQ7IHN0YXQmIzQzOyYjNDM7KQomIzQzOwkJbHAtJmd0O3h4dl9zdGF0X2Jhc2Vbc3RhdF0gJiM0Mzs9IGNvdW50ZXJbc3RhdF07CiYjNDM7CXdyaXRlX3NlcWNvdW50X2VuZCgmYW1wO2xwLSZndDtod19zdGF0c19zZXFjb3VudCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGF4aWVuZXRfeHh2X2dldF9zdGF0czY0IC0gRmlsbCBydG5sX2xpbmtfc3RhdHM2NCBmcm9tIFhYViBjb3VudGVycwomIzQzOyAqIEBscDogUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmUKJiM0MzsgKiBAc3RhdHM6IE91dHB1dCBydG5sX2xpbmtfc3RhdHM2NCBzdHJ1Y3R1cmUgdG8gcG9wdWxhdGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfc3RhdHM2NChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHN0YXJ0OwomIzQzOwl1NjQgdHhfaHdfZXJyb3JzOwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4oJmFtcDtscC0mZ3Q7aHdfc3RhdHNfc2VxY291bnQpOwomIzQzOwkJc3RhdHMtJmd0O3J4X2NyY19lcnJvcnMgPSBscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9CQURfRkNTXTsKJiM0MzsJCS8qIEJvdGggaW4tcmFuZ2UgbGVuZ3RoIGVycm9ycyBhbmQgZnJhbWUtdG9vLWxvbmcgKG92ZXJzaXplKQomIzQzOwkJICogZnJhbWVzIGFyZSBJRUVFIDgwMi4zIGxlbmd0aCBlcnJvcnMsIHNvIGZvbGQgdGhlbSB0b2dldGhlcgomIzQzOwkJICogaW50byByeF9sZW5ndGhfZXJyb3JzOyByeF9vdmVyX2Vycm9ycyBpcyByZXNlcnZlZCBmb3IgcmVjZWl2ZXIKJiM0MzsJCSAqIEZJRk8vcmluZyBvdmVyZmxvdywgd2hpY2ggdGhlIFhYViBNQUMgZG9lcyBub3QgZXhwb3NlLgomIzQzOwkJICovCiYjNDM7CQlzdGF0cy0mZ3Q7cnhfbGVuZ3RoX2Vycm9ycyA9CiYjNDM7CQkJbHAtJmd0O3h4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfSU5SQU5HRUVSUl0gJiM0MzsKJiM0MzsJCQlscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9PVkVSU0laRV07CiYjNDM7CQlzdGF0cy0mZ3Q7cnhfZXJyb3JzID0gbHAtJmd0O3h4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfVU5ERVJTSVpFXSAmIzQzOwomIzQzOwkJCQkgICBscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9GUkFHTUVOVF0gJiM0MzsKJiM0MzsJCQkJICAgbHAtJmd0O3h4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfSkFCQkVSXSAmIzQzOwomIzQzOwkJCQkgICBzdGF0cy0mZ3Q7cnhfY3JjX2Vycm9ycyAmIzQzOwomIzQzOwkJCQkgICBzdGF0cy0mZ3Q7cnhfbGVuZ3RoX2Vycm9yczsKJiM0MzsJCXN0YXRzLSZndDttdWx0aWNhc3QgPSBscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9NVUxUSUNBU1RdOwomIzQzOwkJdHhfaHdfZXJyb3JzID0gbHAtJmd0O3h4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfQkFEX0ZDU10gJiM0MzsKJiM0MzsJCQkgICAgICAgbHAtJmd0O3h4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfRlJBTUVfRVJST1JdOwomIzQzOwl9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KCZhbXA7bHAtJmd0O2h3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpOwomIzQzOwomIzQzOwkvKiBGb2xkIHRoZSBIVyBUWCBlcnJvciBjb3VudCBpbnRvIHRoZSBzb2Z0d2FyZSB0eF9lcnJvcnMgc2VlZGVkIGZyb20KJiM0MzsJICogZGV2LSZndDtzdGF0cyBieSB0aGUgY2FsbGVyLiBUaGUgWFhWIHhtaXQgcGF0aCBidW1wcyBkZXYtJmd0O3N0YXRzLnR4X2Vycm9ycwomIzQzOwkgKiBmb3IgZnJhbWVzIGRyb3BwZWQgb24gcGFkIGZhaWx1cmUgYmVmb3JlIHRoZXkgcmVhY2ggdGhlIE1BQywgd2hpbGUgdGhlCiYjNDM7CSAqIEhXIGNvdW50ZXJzIG9ubHkgY292ZXIgZnJhbWVzIHRoZSBNQUMgYWN0dWFsbHkgdHJhbnNtaXR0ZWQ7IHRoZSB0d28gYXJlCiYjNDM7CSAqIGRpc2pvaW50LiBUaGlzIHJ1bnMgb25jZSwgb3V0c2lkZSB0aGUgc2VxY291bnQgcmV0cnkgbG9vcCwgc28gYSByYWNpbmcKJiM0MzsJICogc3RhdHMgdXBkYXRlIGNhbm5vdCBtYWtlIHRoZSBhY2N1bXVsYXRpb24gcmUtYWRkIG9uIHJldHJ5LgomIzQzOwkgKi8KJiM0MzsJc3RhdHMtJmd0O3R4X2Vycm9ycyAmIzQzOz0gdHhfaHdfZXJyb3JzOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBheGllbmV0X3h4dl9nZXRfZXRodG9vbF9zdGF0cyAtIENvcHkgWFhWIGNvdW50ZXJzIGZvciBldGh0b29sIC1TCiYjNDM7ICogQGxwOiBQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZQomIzQzOyAqIEBkYXRhOiBPdXRwdXQgYnVmZmVyIHNpemVkIGZvciBBUlJBWV9TSVpFKGF4aWVuZXRfeHh2X3ByaXZfc3RhdHMpIHU2NCB2YWx1ZXMKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsIHU2NCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpLCBzdGFydDsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJc3RhcnQgPSByZWFkX3NlcWNvdW50X2JlZ2luKCZhbXA7bHAtJmd0O2h3X3N0YXRzX3NlcWNvdW50KTsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGF4aWVuZXRfeHh2X3ByaXZfc3RhdHMpOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlkYXRhW2ldID0gbHAtJmd0O3h4dl9zdGF0X2Jhc2VbYXhpZW5ldF94eHZfcHJpdl9zdGF0c1tpXV07CiYjNDM7CX0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoJmFtcDtscC0mZ3Q7aHdfc3RhdHNfc2VxY291bnQsIHN0YXJ0KSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGF4aWVuZXRfeHh2X2dldF9zdHJpbmdzIC0gQ29weSBYWFYgZXRodG9vbCBzdGF0aXN0aWNzIG5hbWUgc3RyaW5ncwomIzQzOyAqIEBkYXRhOiBPdXRwdXQgYnVmZmVyIGZvciB0aGUgc3RhdGlzdGljcyBuYW1lIHN0cmluZ3MKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfc3RyaW5ncyh1OCAqZGF0YSkKJiM0Mzt7CiYjNDM7CW1lbWNweShkYXRhLCBheGllbmV0X3h4dl9ldGh0b29sX3N0YXRzX3N0cmluZ3MsCiYjNDM7CSAgICAgICBzaXplb2YoYXhpZW5ldF94eHZfZXRodG9vbF9zdGF0c19zdHJpbmdzKSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGF4aWVuZXRfeHh2X2dldF9zc2V0X2NvdW50IC0gTnVtYmVyIG9mIFhYViBldGh0b29sIHN0YXRpc3RpY3MKJiM0MzsgKgomIzQzOyAqIFJldHVybjogQ291bnQgb2YgWFhWIGhhcmR3YXJlIHN0YXRpc3RpY3MgcmVwb3J0ZWQgdmlhIGV0aHRvb2wgLVMuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBheGllbmV0X3h4dl9nZXRfc3NldF9jb3VudCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIEFSUkFZX1NJWkUoYXhpZW5ldF94eHZfZXRodG9vbF9zdGF0c19zdHJpbmdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYXhpZW5ldF94eHZfZ2V0X3BhdXNlX3N0YXRzIC0gRmlsbCBldGh0b29sIHBhdXNlIGZyYW1lIHN0YXRpc3RpY3MKJiM0MzsgKiBAbHA6IFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlCiYjNDM7ICogQHBhdXNlX3N0YXRzOiBPdXRwdXQgZXRodG9vbF9wYXVzZV9zdGF0cyBzdHJ1Y3R1cmUgdG8gcG9wdWxhdGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLAomIzQzOwkJCQkJc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHN0YXJ0OwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4oJmFtcDtscC0mZ3Q7aHdfc3RhdHNfc2VxY291bnQpOwomIzQzOwkJcGF1c2Vfc3RhdHMtJmd0O3R4X3BhdXNlX2ZyYW1lcyA9CiYjNDM7CQkJbHAtJmd0O3h4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfUEFVU0VdOwomIzQzOwkJcGF1c2Vfc3RhdHMtJmd0O3J4X3BhdXNlX2ZyYW1lcyA9CiYjNDM7CQkJbHAtJmd0O3h4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfUEFVU0VdOwomIzQzOwl9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KCZhbXA7bHAtJmd0O2h3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBheGllbmV0X3h4dl9nZXRfZXRoX21hY19zdGF0cyAtIEZpbGwgSUVFRSA4MDIuMyBNQUMgc3RhdGlzdGljcwomIzQzOyAqIEBscDogUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmUKJiM0MzsgKiBAbWFjX3N0YXRzOiBPdXRwdXQgZXRodG9vbF9ldGhfbWFjX3N0YXRzIHN0cnVjdHVyZSB0byBwb3B1bGF0ZQomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGF4aWVuZXRfeHh2X2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwKJiM0MzsJCQkJCSAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHN0YXJ0OwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4oJmFtcDtscC0mZ3Q7aHdfc3RhdHNfc2VxY291bnQpOwomIzQzOwkJbWFjX3N0YXRzLSZndDtGcmFtZXNUcmFuc21pdHRlZE9LID0KJiM0MzsJCQlscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9UWF9UT1RBTF9HT09EX1BBQ0tFVFNdOwomIzQzOwkJbWFjX3N0YXRzLSZndDtGcmFtZXNSZWNlaXZlZE9LID0KJiM0MzsJCQlscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9UT1RBTF9HT09EX1BBQ0tFVFNdOwomIzQzOwkJbWFjX3N0YXRzLSZndDtPY3RldHNUcmFuc21pdHRlZE9LID0KJiM0MzsJCQlscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9UWF9UT1RBTF9HT09EX0JZVEVTXTsKJiM0MzsJCW1hY19zdGF0cy0mZ3Q7T2N0ZXRzUmVjZWl2ZWRPSyA9CiYjNDM7CQkJbHAtJmd0O3h4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9CWVRFU107CiYjNDM7CQltYWNfc3RhdHMtJmd0O0ZyYW1lQ2hlY2tTZXF1ZW5jZUVycm9ycyA9CiYjNDM7CQkJbHAtJmd0O3h4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfQkFEX0ZDU107CiYjNDM7CQltYWNfc3RhdHMtJmd0O011bHRpY2FzdEZyYW1lc1htaXR0ZWRPSyA9CiYjNDM7CQkJbHAtJmd0O3h4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfTVVMVElDQVNUXTsKJiM0MzsJCW1hY19zdGF0cy0mZ3Q7QnJvYWRjYXN0RnJhbWVzWG1pdHRlZE9LID0KJiM0MzsJCQlscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9UWF9CUk9BRENBU1RdOwomIzQzOwkJbWFjX3N0YXRzLSZndDtNdWx0aWNhc3RGcmFtZXNSZWNlaXZlZE9LID0KJiM0MzsJCQlscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9NVUxUSUNBU1RdOwomIzQzOwkJbWFjX3N0YXRzLSZndDtCcm9hZGNhc3RGcmFtZXNSZWNlaXZlZE9LID0KJiM0MzsJCQlscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9CUk9BRENBU1RdOwomIzQzOwkJbWFjX3N0YXRzLSZndDtJblJhbmdlTGVuZ3RoRXJyb3JzID0KJiM0MzsJCQlscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9JTlJBTkdFRVJSXTsKJiM0MzsJfSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeSgmYW1wO2xwLSZndDtod19zdGF0c19zZXFjb3VudCwgc3RhcnQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYXhpZW5ldF94eHZfZ2V0X3Jtb25fc3RhdHMgLSBGaWxsIFJNT04gc3RhdGlzdGljcyBhbmQgaGlzdG9ncmFtIHJhbmdlcwomIzQzOyAqIEBscDogUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmUKJiM0MzsgKiBAcm1vbl9zdGF0czogT3V0cHV0IGV0aHRvb2xfcm1vbl9zdGF0cyBzdHJ1Y3R1cmUgdG8gcG9wdWxhdGUKJiM0MzsgKiBAcmFuZ2VzOiBTZXQgdG8gdGhlIFJNT04gaGlzdG9ncmFtIHJhbmdlIHRhYmxlCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYXhpZW5ldF94eHZfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cywKJiM0MzsJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSAqKnJhbmdlcykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBzdGFydDsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJc3RhcnQgPSByZWFkX3NlcWNvdW50X2JlZ2luKCZhbXA7bHAtJmd0O2h3X3N0YXRzX3NlcWNvdW50KTsKJiM0MzsJCXJtb25fc3RhdHMtJmd0O3VuZGVyc2l6ZV9wa3RzID0KJiM0MzsJCQlscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9VTkRFUlNJWkVdOwomIzQzOwkJcm1vbl9zdGF0cy0mZ3Q7b3ZlcnNpemVfcGt0cyA9CiYjNDM7CQkJbHAtJmd0O3h4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfT1ZFUlNJWkVdOwomIzQzOwkJcm1vbl9zdGF0cy0mZ3Q7ZnJhZ21lbnRzID0KJiM0MzsJCQlscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9GUkFHTUVOVF07CiYjNDM7CQlybW9uX3N0YXRzLSZndDtqYWJiZXJzID0KJiM0MzsJCQlscC0mZ3Q7eHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9KQUJCRVJdOwomIzQzOwl9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KCZhbXA7bHAtJmd0O2h3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpOwomIzQzOwomIzQzOwkvKiBYWFYgY3VycmVudGx5IGV4cG9zZXMgb25seSBhZ2dyZWdhdGUgUk1PTiBjb3VudGVycywgbm90IHBlci1iaW4KJiM0MzsJICogaGlzdG9ncmFtIGJ1Y2tldHMuIEtlZXAgcmFuZ2VzIE5VTEwgdW50aWwgaGlzdG9ncmFtIGJpbnMgYXJlIHdpcmVkLgomIzQzOwkgKi8KJiM0MzsJKnJhbmdlcyA9IE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBheGllbmV0X2NvbmZpZyBheGllbmV0XzEwZzI1Z19jb25maWcgPSB7CiYjNDM7CS5zd19wYWRkaW5nID0gdHJ1ZSwKJiM0MzsJLmludGVybmFsX3BjcyA9IHRydWUsCiYjNDM7CS5yZWdzX24gPSBYWFZfUkVHU19OLAomIzQzOwkuY2xrX2luaXQgPSBheGllbmV0XzEwZzI1Z19jbGtfaW5pdCwKJiM0MzsJLnNldG9wdGlvbnMgPSBheGllbmV0X3h4dl9zZXRvcHRpb25zLAomIzQzOwkucHJvYmVfaW5pdCA9IGF4aWVuZXRfeHh2X3Byb2JlX2luaXQsCiYjNDM7CS5ndF9yZXNldCA9IGF4aWVuZXRfeHh2X2d0X3Jlc2V0LAomIzQzOwkubWFjX2luaXQgPSBheGllbmV0X3h4dl9tYWNfaW5pdCwKJiM0MzsJLmdldF9yZWdzID0gYXhpZW5ldF94eHZfZ2V0X3JlZ3MsCiYjNDM7CS5waHlsaW5rX3NldF9jYXBzID0gYXhpZW5ldF94eHZfcGh5bGlua19zZXRfY2FwYWJpbGl0aWVzLAomIzQzOwkucGNzX29wcyA9ICZhbXA7YXhpZW5ldF94eHZfcGNzX29wcywKJiM0MzsJLnN0YXRzX3VwZGF0ZSA9IGF4aWVuZXRfeHh2X3N0YXRzX3VwZGF0ZSwKJiM0MzsJLmdldF9zdGF0czY0ID0gYXhpZW5ldF94eHZfZ2V0X3N0YXRzNjQsCiYjNDM7CS5nZXRfZXRodG9vbF9zdGF0cyA9IGF4aWVuZXRfeHh2X2dldF9ldGh0b29sX3N0YXRzLAomIzQzOwkuZ2V0X3N0cmluZ3MgPSBheGllbmV0X3h4dl9nZXRfc3RyaW5ncywKJiM0MzsJLmdldF9zc2V0X2NvdW50ID0gYXhpZW5ldF94eHZfZ2V0X3NzZXRfY291bnQsCiYjNDM7CS5nZXRfcGF1c2Vfc3RhdHMgPSBheGllbmV0X3h4dl9nZXRfcGF1c2Vfc3RhdHMsCiYjNDM7CS5nZXRfZXRoX21hY19zdGF0cyA9IGF4aWVuZXRfeHh2X2dldF9ldGhfbWFjX3N0YXRzLAomIzQzOwkuZ2V0X3Jtb25fc3RhdHMgPSBheGllbmV0X3h4dl9nZXRfcm1vbl9zdGF0cywKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X3h4di5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X3h4di5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmViZmE3ZDU3YTg1OTEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfeHh2LmgKQEAgLTAsMCAmIzQzOzEsMTQxIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwomIzQzOy8qCiYjNDM7ICogWFhWICgxMEcvMjVHKSBzdXBwb3J0CiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgWElMSU5YX0FYSUVORVRfWFhWX0gKJiM0MzsjZGVmaW5lIFhJTElOWF9BWElFTkVUX1hYVl9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdHMuaCZndDsKJiM0MzsKJiM0MztzdHJ1Y3QgYXhpZW5ldF9sb2NhbDsKJiM0MztzdHJ1Y3QgYXhpZW5ldF9jb25maWc7CiYjNDM7CiYjNDM7I2RlZmluZSBYWFZfUkVHU19OCQk0NgomIzQzOwomIzQzOy8qIFhYViBNQUMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KJiM0MzsjZGVmaW5lIFhYVl9HVF9SRVNFVF9PRkZTRVQJCTB4MDAwMDAwMDAKJiM0MzsjZGVmaW5lIFhYVl9SRVNFVF9PRkZTRVQJCTB4MDAwMDAwMDQKJiM0MzsjZGVmaW5lIFhYVl9NT0RFX09GRlNFVAkJCTB4MDAwMDAwMDgKJiM0MzsjZGVmaW5lIFhYVl9UQ19PRkZTRVQJCQkweDAwMDAwMDBDCiYjNDM7I2RlZmluZSBYWFZfUkNXMV9PRkZTRVQJCQkweDAwMDAwMDE0CiYjNDM7I2RlZmluZSBYWFZfSlVNX09GRlNFVAkJCTB4MDAwMDAwMTgKJiM0MzsjZGVmaW5lIFhYVl9WTF9MRU5HVEhfT0ZGU0VUCQkweDAwMDAwMDFDCiYjNDM7I2RlZmluZSBYWFZfVElDS1JFR19PRkZTRVQJCTB4MDAwMDAwMjAKJiM0MzsjZGVmaW5lIFhYVl9DT05GSUdfUkVWSVNJT04JCTB4MDAwMDAwMjQKJiM0MzsjZGVmaW5lIFhYVl9DT05GSUdfMTU4OF9PRkZTRVQJCTB4MDAwMDAwMzgKJiM0MzsjZGVmaW5lIFhYVl9DT05GSUdfVFhfRkxPV19DVFJMMV9PRkZTRVQJMHgwMDAwMDA0MAomIzQzOyNkZWZpbmUgWFhWX0NPTkZJR19SWF9GTE9XX0NUUkwxX09GRlNFVAkweDAwMDAwMDk0CiYjNDM7I2RlZmluZSBYWFZfQ09ORklHX1JYX0ZMT1dfQ1RSTDJfT0ZGU0VUCTB4MDAwMDAwOTgKJiM0MzsjZGVmaW5lIFhYVl9DT05GSUdfUlNGRUNfT0ZGU0VUCQkweDAwMDAwMEQwCiYjNDM7I2RlZmluZSBYWFZfQ09ORklHX0ZFQ19PRkZTRVQJCTB4MDAwMDAwRDQKJiM0MzsjZGVmaW5lIFhYVl9BTl9DVEwxX09GRlNFVAkJMHgwMDAwMDBFMAomIzQzOyNkZWZpbmUgWFhWX0FOX0NUTDJfT0ZGU0VUCQkweDAwMDAwMEU0CiYjNDM7I2RlZmluZSBYWFZfQU5fQUJJTElUWV9PRkZTRVQJCTB4MDAwMDAwRjgKJiM0MzsjZGVmaW5lIFhYVl9MVF9DVEwxX09GRlNFVAkJMHgwMDAwMDEwMAomIzQzOyNkZWZpbmUgWFhWX1NXSVRDSF9DT1JFX1NQRUVEX09GRlNFVAkweDAwMDAwMTM4CiYjNDM7I2RlZmluZSBYWFZfQ09ORklHXzE1ODhfMzJCSVRfT0ZGU0VUCTB4MDAwMDAxM0MKJiM0MzsjZGVmaW5lIFhYVl9UWF9DT05GSUdfMTU4OF9PRkZTRVQJMHgwMDAwMDE0MAomIzQzOyNkZWZpbmUgWFhWX1JYX0NPTkZJR18xNTg4X09GRlNFVAkweDAwMDAwMTQ0CiYjNDM7I2RlZmluZSBYWFZfR1RXSVpfQ1RSTF9PRkZTRVQJCTB4MDAwMDAxNTQKJiM0MzsjZGVmaW5lIFhYVl9TVEFUUlhfU1RBVFVTMF9PRkZTRVQJMHgwMDAwMDQwMAomIzQzOyNkZWZpbmUgWFhWX1JYX1NUQVRVU19SRUcxCQkweDAwMDAwNDA0CiYjNDM7I2RlZmluZSBYWFZfU1RBVFJYX1NUQVRVUzJfT0ZGU0VUCTB4MDAwMDA0MDgKJiM0MzsjZGVmaW5lIFhYVl9TVEFUUlhfQkxLTENLX09GRlNFVAkweDAwMDAwNDBDCiYjNDM7I2RlZmluZSBYWFZfU1RBVF9SWF9SU0ZFQ19TVEFUVVNfT0ZGU0VUCTB4MDAwMDA0M0MKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX0ZFQ19TVEFUVVNfT0ZGU0VUCTB4MDAwMDA0NDgKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1RYX1JTRkVDX1NUQVRVU19PRkZTRVQJMHgwMDAwMDQ0QwomIzQzOyNkZWZpbmUgWFhWX1NUQVRfVFhfRkxPV19DVFJMMV9PRkZTRVQJMHgwMDAwMDQ1MAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfRkxPV19DVFJMMV9PRkZTRVQJMHgwMDAwMDQ1NAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfQU5fU1RTX09GRlNFVAkJMHgwMDAwMDQ1OAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfQU5fTFBfU1RBVFVTX09GRlNFVAkweDAwMDAwNDVDCiYjNDM7I2RlZmluZSBYWFZfU1RBVF9BTl9MSU5LX0NUTF9PRkZTRVQJMHgwMDAwMDQ2MAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfTFRfU1RBVFVTMV9PRkZTRVQJMHgwMDAwMDQ2NAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfTFRfU1RBVFVTMl9PRkZTRVQJMHgwMDAwMDQ2OAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfTFRfU1RBVFVTM19PRkZTRVQJMHgwMDAwMDQ2QwomIzQzOyNkZWZpbmUgWFhWX1NUQVRfTFRfU1RBVFVTNF9PRkZTRVQJMHgwMDAwMDQ3MAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfTFRfQ09FRkYwX09GRlNFVAkweDAwMDAwNDc0CiYjNDM7I2RlZmluZSBYWFZfU1RBVF9SWF9WQUxJRF9DVFJMX0NPREVfT0ZGU0VUCTB4MDAwMDA0OTQKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX0NPUkVfU1BFRURfT0ZGU0VUCTB4MDAwMDA0OTgKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1RTTl9PRkZTRVQJCTB4MDAwMDA0OUMKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX0dUV0laX09GRlNFVAkJMHgwMDAwMDRBMAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfQU5fTElOS19DVEwyX09GRlNFVAkweDAwMDAwOUYwCiYjNDM7CiYjNDM7LyogWFhWIHN0YXRpc3RpY3MgY291bnRlciByZWdpc3RlcnMgKFBHMjEwKS4gRWFjaCBjb3VudGVyIGlzIGEgcGFpciBvZiAzMi1iaXQKJiM0MzsgKiByZWdpc3RlcnM7IHRoZSBNU0IgcmVnaXN0ZXIgaXMgWFhWX1NUQVRfTVNCX09GRlNFVCBieXRlcyBhYm92ZSB0aGUgTFNCLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgWFhWX1NUQVRfTVNCX09GRlNFVAkJCTQKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1RYX0ZSQU1FX0VSUk9SX09GRlNFVAkJMHgwMDAwMDZBMAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfVFhfVE9UQUxfUEFDS0VUU19PRkZTRVQJMHgwMDAwMDcwMAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9QQUNLRVRTX09GRlNFVAkweDAwMDAwNzA4CiYjNDM7I2RlZmluZSBYWFZfU1RBVF9UWF9UT1RBTF9CWVRFU19PRkZTRVQJCTB4MDAwMDA3MTAKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1RYX1RPVEFMX0dPT0RfQllURVNfT0ZGU0VUCTB4MDAwMDA3MTgKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1RYX0JBRF9GQ1NfT0ZGU0VUCQkweDAwMDAwN0I4CiYjNDM7I2RlZmluZSBYWFZfU1RBVF9UWF9NVUxUSUNBU1RfT0ZGU0VUCQkweDAwMDAwN0Q4CiYjNDM7I2RlZmluZSBYWFZfU1RBVF9UWF9CUk9BRENBU1RfT0ZGU0VUCQkweDAwMDAwN0UwCiYjNDM7I2RlZmluZSBYWFZfU1RBVF9UWF9QQVVTRV9PRkZTRVQJCTB4MDAwMDA3RjAKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX1RPVEFMX1BBQ0tFVFNfT0ZGU0VUCTB4MDAwMDA4MDgKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX1RPVEFMX0dPT0RfUEFDS0VUU19PRkZTRVQJMHgwMDAwMDgxMAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfVE9UQUxfQllURVNfT0ZGU0VUCQkweDAwMDAwODE4CiYjNDM7I2RlZmluZSBYWFZfU1RBVF9SWF9UT1RBTF9HT09EX0JZVEVTX09GRlNFVAkweDAwMDAwODIwCiYjNDM7I2RlZmluZSBYWFZfU1RBVF9SWF9VTkRFUlNJWkVfT0ZGU0VUCQkweDAwMDAwODk4CiYjNDM7I2RlZmluZSBYWFZfU1RBVF9SWF9GUkFHTUVOVF9PRkZTRVQJCTB4MDAwMDA4QTAKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX09WRVJTSVpFX09GRlNFVAkJMHgwMDAwMDhBOAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfSkFCQkVSX09GRlNFVAkJMHgwMDAwMDhCOAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfQkFEX0ZDU19PRkZTRVQJCTB4MDAwMDA4QzAKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX01VTFRJQ0FTVF9PRkZTRVQJCTB4MDAwMDA4RTAKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX0JST0FEQ0FTVF9PRkZTRVQJCTB4MDAwMDA4RTgKJiM0MzsjZGVmaW5lIFhYVl9TVEFUX1JYX1BBVVNFX09GRlNFVAkJMHgwMDAwMDhGOAomIzQzOyNkZWZpbmUgWFhWX1NUQVRfUlhfSU5SQU5HRUVSUl9PRkZTRVQJCTB4MDAwMDA5MDgKJiM0MzsKJiM0MzsvKiBYWFYgTUFDIFJlZ2lzdGVyIE1hc2sgRGVmaW5pdGlvbnMgKi8KJiM0MzsjZGVmaW5lIFhYVl9HVF9SRVNFVF9NQVNLCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFhYVl9UQ19UWF9NQVNLCQkJQklUKDApCiYjNDM7I2RlZmluZSBYWFZfUkNXMV9SWF9NQVNLCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFhYVl9SQ1cxX0ZDU19NQVNLCQlCSVQoMSkKJiM0MzsjZGVmaW5lIFhYVl9UQ19GQ1NfTUFTSwkJCUJJVCgxKQomIzQzOyNkZWZpbmUgWFhWX1JYX0JMS0xDS19NQVNLCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFhYVl9USUNLUkVHX1NUQVRFTl9NQVNLCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFhYVl9HVFdJWl9SRVNFVF9ET05FCQkoQklUKDApIHwgQklUKDEpKQomIzQzOyNkZWZpbmUgWFhWX01BSl9NQVNLCQkJR0VOTUFTSyg3LCAwKQomIzQzOyNkZWZpbmUgWFhWX01JTl9NQVNLCQkJR0VOTUFTSygxNSwgOCkKJiM0MzsvKiBJUCB2My4yJiM0MzsgZXhwb3NlcyBHVCB3aXphcmQgc3RhdHVzIGJlZm9yZSBvdGhlciByZWdpc3RlciBhY2Nlc3MgKFBHMjEwKS4gKi8KJiM0MzsjZGVmaW5lIFhYVl9JUF9WRVJfR1RXSVpfTUFKX01JTgkzCiYjNDM7I2RlZmluZSBYWFZfSVBfVkVSX0dUV0laX01JTl9NSU4JMgomIzQzOyNkZWZpbmUgWFhWX0FOX0NPTVBMRVRFX01BU0sJCUJJVCgyKQomIzQzOyNkZWZpbmUgWFhWX1NUQVRfQ09SRV9TUEVFRF9SVFNXX01BU0sJQklUKDEpCiYjNDM7I2RlZmluZSBYWFZfU1RBVF9DT1JFX1NQRUVEXzEwR19NQVNLCUJJVCgwKQomIzQzOyNkZWZpbmUgWFhWX1JYX1NUQVRVU19NQVNLCQlCSVQoMCkKJiM0MzsKJiM0MzsvKiBYWFYgKDEwRy8yNUcpIE1BQyBzdGF0aXN0aWNzIGNvdW50ZXJzLCB1c2VkIHRvIGluZGV4IHh4dl9zdGF0X2Jhc2VbXS4gKi8KJiM0MztlbnVtIHh4dl9zdGF0IHsKJiM0MzsJWFhWX1NUQVRfUlhfVE9UQUxfUEFDS0VUUyA9IDAsCiYjNDM7CVhYVl9TVEFUX1JYX1RPVEFMX0dPT0RfUEFDS0VUUywKJiM0MzsJWFhWX1NUQVRfUlhfVE9UQUxfQllURVMsCiYjNDM7CVhYVl9TVEFUX1JYX1RPVEFMX0dPT0RfQllURVMsCiYjNDM7CVhYVl9TVEFUX1JYX0JBRF9GQ1MsCiYjNDM7CVhYVl9TVEFUX1JYX0lOUkFOR0VFUlIsCiYjNDM7CVhYVl9TVEFUX1JYX01VTFRJQ0FTVCwKJiM0MzsJWFhWX1NUQVRfUlhfQlJPQURDQVNULAomIzQzOwlYWFZfU1RBVF9SWF9VTkRFUlNJWkUsCiYjNDM7CVhYVl9TVEFUX1JYX0ZSQUdNRU5ULAomIzQzOwlYWFZfU1RBVF9SWF9KQUJCRVIsCiYjNDM7CVhYVl9TVEFUX1JYX09WRVJTSVpFLAomIzQzOwlYWFZfU1RBVF9SWF9QQVVTRSwKJiM0MzsJWFhWX1NUQVRfVFhfVE9UQUxfUEFDS0VUUywKJiM0MzsJWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9QQUNLRVRTLAomIzQzOwlYWFZfU1RBVF9UWF9UT1RBTF9CWVRFUywKJiM0MzsJWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9CWVRFUywKJiM0MzsJWFhWX1NUQVRfVFhfQkFEX0ZDUywKJiM0MzsJWFhWX1NUQVRfVFhfRlJBTUVfRVJST1IsCiYjNDM7CVhYVl9TVEFUX1RYX01VTFRJQ0FTVCwKJiM0MzsJWFhWX1NUQVRfVFhfQlJPQURDQVNULAomIzQzOwlYWFZfU1RBVF9UWF9QQVVTRSwKJiM0MzsJWFhWX1NUQVRfQ09VTlQsCiYjNDM7fTsKJiM0MzsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGF4aWVuZXRfY29uZmlnIGF4aWVuZXRfMTBnMjVnX2NvbmZpZzsKJiM0MzsKJiM0MzsjZW5kaWYgLyogWElMSU5YX0FYSUVORVRfWFhWX0ggKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5NTMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0OTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBYaWxpbnggWFhWIEV0aGVybmV0IERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBicmVhayBkb3duIHRoZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFhpbGlueCBYWFYgMTBHLzI1RyBFdGhlcm5ldCBTdWJzeXN0ZW0gdG8gdGhlIGV4aXN0aW5nIGB4aWxpbnhfYXhpZW5ldGAgZHJpdmVyLiBJIHNlZSB0aGUgdXN1YWwgc3VzcGVjdHM6IGRldmljZSB0cmVlIGJpbmRpbmdzLCB0aGUgTUFJTlRBSU5FUlMgZmlsZSwgdGhlIE1ha2VmaWxlLCBhbmQgdGhlIHJlbGV2YW50IEMgYW5kIGhlYWRlciBmaWxlcyDigJMgc3BlY2lmaWNhbGx5IGB4aWxpbnhfYXhpZW5ldF9tYWluLmNgLCBgeGlsaW54X2F4aWVuZXRfeHh2LmNgLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgaGVhZGVyIGZpbGVzLgoKTm93LCBiZWZvcmUgSSBnbyB0b28gZGVlcCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGhhcmR3YXJlIGltcGxpY2F0aW9ucy4gV2hhdCBpcyBgQ09ORklHX1hJTElOWF9BWElfRU1BQ2A/IElzIGl0IGFuIE9GIG9yIHBsYXRmb3JtIGRyaXZlciBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIFhpbGlueCBGUEdBcyBvciBTb0NzIOKAkyB0aGluayBNaWNyb0JsYXplLCBaeW5xLCBaeW5xTVAsIG9yIGV2ZW4gVmVyc2FsPyBUaGlzIGlzIGNyaXRpY2FsLiBDYW4gSSBhY3R1YWxseSB0ZXN0IHRoaXMgaW4gUUVNVSBvciBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBvciBkb2VzIGl0IHJlcXVpcmUgZGVkaWNhdGVkIEZQR0EgaGFyZHdhcmU/CgpBaCwgcmlnaHQsIGtlcm5lbCBndWlkZWxpbmVzLi4uIEkgbmVlZCB0byBjb25zaWRlciB3aGV0aGVyIHRoaXMgcGF0Y2ggaXMgJiMzNDt3b3J0aCBmdXp6aW5nJiMzNDsuIFRoZSBndWlkZWxpbmVzIHNwZWNpZnkgdGhhdCBpZiB0aGUgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgdGhlbiBpdCBzaG91bGQgcmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZS4gQWxzbywgdGhlIHNhbWUgZ29lcyBmb3IgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoL1NtYXJ0TklDL0dQVSBkcml2ZXJzLiBTaW5jZSB0aGlzIGlzIFhpbGlueC1zcGVjaWZpYywgSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLgoKU28sIGxldCYjMzk7cyBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgb2YgYENPTkZJR19YSUxJTlhfQVhJX0VNQUNgIGFuZCBob3cgaXQmIzM5O3MgZGVmaW5lZC4gRG9lcyBzdGFuZGFyZCBRRU1VIGV2ZW4gZW11bGF0ZSBYaWxpbnggQVhJIEV0aGVybmV0PyBJcyBpdCBhbiBPRiBwbGF0Zm9ybSBkcml2ZXIgcHJpbWFyaWx5IHVzZWQgb24gbm9uLXg4NiBhcmNoaXRlY3R1cmVzLCBsaWtlIEFSTSBvciBNaWNyb0JsYXplPyBJJiMzOTtsbCBxdWlja2x5IHVzZSBncmVwcGVyIHRvIGV4YW1pbmUgdGhlIEtjb25maWcgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiYjMzk7cyBzcGVjaWZpY3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFhJTElOWF9BWElfRU1BQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvS2NvbmZpZz0xOT1jb25maWcgWElMSU5YX0VNQUNMSVRFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWctMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvS2NvbmZpZzoyNjpjb25maWcgWElMSU5YX0FYSV9FTUFDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvS2NvbmZpZy0yNy1cdHRyaXN0YXRlIFwmIzM0O1hpbGlueCAxMC8xMDAvMTAwMCBBWEkgRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDQxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IEtjb25maWcgZmlsZToKCioqRGl2aW5nIGludG8gdGhlIFhpbGlueCBFdGhlcm5ldCBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gaHViIGZvciBhbGwgdGhlIFhpbGlueCBFdGhlcm5ldCBkZXZpY2UgZHJpdmVycy4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHZhcmlvdXMgZmVhdHVyZXMgYW5kIGhhcmR3YXJlIHZhcmlhdGlvbnMgYXJlIGV4cG9zZWQgdG8gdGhlIHVzZXIgZHVyaW5nIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBwcm9jZXNzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBkZWZhdWx0IHZhbHVlcywgYW5kIHRoZSBoZWxwIHRleHQg4oCTIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgc3RvcnkgbGllcy4KCkZpcnN0IHRoaW5nJiMzOTtzIGZpcnN0LCBJJiMzOTtsbCBzY2FuIGZvciB0aGUgbWFpbiBkcml2ZXIgZW50cnksIHVzdWFsbHkgc29tZXRoaW5nIGxpa2UgYENPTkZJR19YSUxJTlhfRU1BQ2Agb3IgYENPTkZJR19YSUxJTlhfR01BQ2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwcmltYXJ5IGRyaXZlciBhbmQgaG93IGl0cyBtb2R1bGFyIGRlc2lnbiB3b3Jrcy4gVGhlbiBJJiMzOTtsbCBxdWlja2x5IGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBibG9ja3MgaXQmIzM5O3MgbWVhbnQgdG8gc3VwcG9ydCDigJMgYXJlIHdlIHRhbGtpbmcgYWJvdXQgWnlucSwgVmVyc2FsLCBvciBvbGRlciBwbGF0Zm9ybXM/IEFyZSB0aGVyZSBtdWx0aXBsZSBFTUFDIGRldmljZXMgdGhhdCBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5IG9yIGNvbWJpbmVkPyBBcmUgdGhlcmUgYW55IFNvQy1zcGVjaWZpYyBvcHRpb25zIHRoYXQgY29udHJvbCB0aGluZ3MgbGlrZSBETUEgZW5naW5lcywgUEhZIHNlbGVjdGlvbiwgb3IgTURJTyBjb25maWd1cmF0aW9uPwoKSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGhvdyB0aGVzZSBLY29uZmlnIG9wdGlvbnMgbWFwIHRvIHNwZWNpZmljIFhpbGlueCBoYXJkd2FyZSBmZWF0dXJlcy4gQXJlIHRoZXJlIG9wdGlvbnMgZm9yIGVuYWJsaW5nIGp1bWJvIGZyYW1lcywgY2hlY2tzdW0gb2ZmbG9hZCwgZmxvdyBjb250cm9sLCBvciBvdGhlciBvZmZsb2FkaW5nIGZlYXR1cmVzPyBBcmUgdGhlcmUgcGxhdGZvcm0tc3BlY2lmaWMgZGVwZW5kZW5jaWVzPyBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgY2hvaWNlcyBhZmZlY3QgcGVyZm9ybWFuY2UgYW5kIHBvd2VyIGNvbnN1bXB0aW9uLiBGb3IgZXhhbXBsZSwgc29tZSBkZXZpY2VzIG1pZ2h0IHJlcXVpcmUgc3BlY2lmaWMgY2xvY2sgY29uZmlndXJhdGlvbnMgb3IgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzLCBhbmQgSSYjMzk7bGwgc2VlIGhvdyB0aG9zZSBhcmUgY29udHJvbGxlZCBoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSBhcmNoaXRlY3R1cmUgb3IgYm9hcmQtc3BlY2lmaWMgb3B0aW9ucywgYXMgd2VsbCBhcyBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGRyaXZlcnMgb3Iga2VybmVsIHN1YnN5c3RlbXMuCgpGaW5hbGx5LCBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMg4oCTIGBpZmAgc3RhdGVtZW50cyBhbmQgdGhlIGxpa2UuIFRoYXTigJlzIGhvdyBJIGdldCB0byB0aGUgcmVhbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXZpY2UtZHJpdmVyIGNvbmZpZ3VyYXRpb24uIENvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBhcmUgaG93IHdlIG1ha2UgdGhlIGRldmljZSBkcml2ZXIgZmxleGlibGUgZW5vdWdoIHRvIHN1cHBvcnQgdGhlIGRpZmZlcmVudCBYaWxpbnggU29Dcy4gQWxzbywgSSYjMzk7bGwgbG9vayBmb3IgYW55IGBzZWxlY3RgIHN0YXRlbWVudHMgdGhhdCBhdXRvbWF0aWNhbGx5IHB1bGwgaW4gb3RoZXIgbW9kdWxlcy4gQW5kLCBvZiBjb3Vyc2UsIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IG9idmlvdXMgdHlwb3Mgb3IgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gdHJhcHMgdGhhdCBtaWdodCBsZWFkIHRvIGJ1aWxkIGVycm9ycyBvciwgd29yc2UsIHJ1bnRpbWUgaXNzdWVzLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGNvbmZpZyBpcyBjbGVhbiBhbmQgdW5kZXJzdGFuZGFibGUuIFdpdGggbHVjaywgdGhpcyBLY29uZmlnIHdpbGwgYmUgd2VsbC1zdHJ1Y3R1cmVkLCBlYXN5IHRvIGZvbGxvdywgYW5kIHByb3ZpZGUgZ29vZCwgaGVscGZ1bCBkb2N1bWVudGF0aW9uIHdpdGhpbiBpdHMgaGVscCB0ZXh0LiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgWGlsaW54IGRldmljZSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBORVRfVkVORE9SX1hJTElOWFxuICAgNzpcdFx0Ym9vbCBcJiMzNDtYaWxpbnggZGV2aWNlc1wmIzM0O1xuICAgODpcdFx0ZGVmYXVsdCB5XG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxuICAxMTpcdFxuICAxMjpcdFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiAgMTM6XHRcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxuICAxNDpcdFx0ICB0aGUgcXVlc3Rpb25zIGFib3V0IFhpbGlueCBkZXZpY2VzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkXG4gIDE1Olx0XHQgIGZvciB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4gIDE2Olx0XG4gIDE3Olx0aWYgTkVUX1ZFTkRPUl9YSUxJTlhcbiAgMTg6XHRcbiAgMTk6XHRjb25maWcgWElMSU5YX0VNQUNMSVRFXG4gIDIwOlx0XHR0cmlzdGF0ZSBcJiMzNDtYaWxpbnggMTAvMTAwIEV0aGVybmV0IExpdGUgc3VwcG9ydFwmIzM0O1xuICAyMTpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cbiAgMjI6XHRcdHNlbGVjdCBQSFlMSUJcbiAgMjM6XHRcdGhlbHBcbiAgMjQ6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIDEwLzEwMCBFdGhlcm5ldCBMaXRlIGZyb20gWGlsaW54LlxuICAyNTpcdFxuICAyNjpcdGNvbmZpZyBYSUxJTlhfQVhJX0VNQUNcbiAgMjc6XHRcdHRyaXN0YXRlIFwmIzM0O1hpbGlueCAxMC8xMDAvMTAwMCBBWEkgRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuICAyODpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cbiAgMjk6XHRcdGRlcGVuZHMgb24gWElMSU5YX0RNQVxuICAzMDpcdFx0c2VsZWN0IFBIWUxJTktcbiAgMzE6XHRcdHNlbGVjdCBESU1MSUJcbiAgMzI6XHRcdGhlbHBcbiAgMzM6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIDEwLzEwMC8xMDAwIEV0aGVybmV0IGZyb20gWGlsaW54IGZvciB0aGVcbiAgMzQ6XHRcdCAgQVhJIGJ1cyBpbnRlcmZhY2UgdXNlZCBpbiBYaWxpbnggVmlydGV4IEZQR0FzIGFuZCBTb2MmIzM5O3MuXG4gIDM1Olx0XG4gIDM2Olx0Y29uZmlnIFhJTElOWF9MTF9URU1BQ1xuICAzNzpcdFx0dHJpc3RhdGUgXCYjMzQ7WGlsaW54IExMIFRFTUFDIChMb2NhbExpbmsgVHJpLW1vZGUgRXRoZXJuZXQgTUFDKSBkcml2ZXJcJiMzNDtcbiAgMzg6XHRcdGRlcGVuZHMgb24gSEFTX0lPTUVNXG4gIDM5Olx0XHRzZWxlY3QgUEhZTElCXG4gIDQwOlx0XHRoZWxwXG4gIDQxOlx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBYaWxpbnggMTAvMTAwLzEwMDAgTG9jYWxMaW5rIFRFTUFDXG4gIDQyOlx0XHQgIGNvcmUgdXNlZCBpbiBYaWxpbnggU3BhcnRhbiBhbmQgVmlydGV4IEZQR0FzXG4gIDQzOlx0XG4gIDQ0Olx0ZW5kaWYgIyBORVRfVkVORE9SX1hJTElOWFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjY1CgkJCQkJCQlvdXRwdXQ6IDExNgoJCQkJCQkJdGhvdWdodHM6IDI4MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFhpbGlueCBBWEkvWFhWIEV0aGVybmV0IERyaXZlciBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIFhpbGlueCBBWEkvWFhWIEV0aGVybmV0IGRyaXZlciwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogKlhJTElOWF9BWElfRU1BQyog4oCTIHRoYXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIsIG1hdGNoaW5nIHNwZWNpZmljIGRldmljZSB0cmVlIGNvbXBhdGlibGVzLiBXZSYjMzk7dmUgZ290ICYjMzQ7eGxueCxheGktZXRoZXJuZXQtMS4wMC5hJiMzNDssICYjMzQ7eGxueCxheGktZXRoZXJuZXQtMS4wMS5hJiMzNDssIGV0Yy4sIGFuZCBub3cgJiMzNDt4bG54LHh4di1ldGhlcm5ldC0xLjAmIzM0Oy4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uOiBkb2VzIFFFTVUgZXZlbiAqc3VwcG9ydCogdGhpcz8gSSByZWNhbGwgc29tZSBzdXBwb3J0IGZvciBYaWxpbnggTWljcm9CbGF6ZS9aeW5xLCBidXQgd2hhdCYjMzk7cyB0aGUgZXh0ZW50IG9mIHRoZSBlbXVsYXRpb24/ICpody9uZXQveGlsaW54X2F4aWVuZXQuYyogZXhpc3RzLCBidXQgZG9lcyBpdCBjb3ZlciB0aGUgWFhWIHZhcmlhbnQ/IE5vLCBYWFYgaXMgYSAxMEcvMjVHIElQIHN1YnN5c3RlbSwgYSBkaWZmZXJlbnQgYmVhc3QuCgpUaGUgcGF0Y2ggYXBwZWFycyB0byBiZSByZWZhY3RvcmluZyAqeGlsaW54X2F4aWVuZXRfbWFpbi5jKiwgcG90ZW50aWFsbHkgdG8gY3JlYXRlIGEgY29tbW9uIGxvZ2ljIGxheWVyIHVzaW5nICpscC0mZ3Q7YXhpZW5ldF9jb25maWcqIG9wcy4gSXQmIzM5O3MgdG91Y2hpbmcgZXhpc3RpbmcgMUcgcGF0aHMgbGlrZSBNQUMgYWRkcmVzcyBzZXR0aW5nLCBtdWx0aWNhc3QgbGlzdHMsIHN0YXRzIHVwZGF0ZXMsIGFuZCBhIGxvdCBvZiBpbml0aWFsaXphdGlvbi9yZXNldC9ETUEgZW5naW5lIGZ1bmN0aW9ucy4gQSBuZXcgZmlsZSwgKnhpbGlueF9heGllbmV0X3h4di5jKiwgaXMgYWRkZWQgZm9yIHRoZSAxMEcvMjVHIHN1YnN5c3RlbS4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlIGlzIGZ1enppbmcgcmVhY2hhYmlsaXR5LiBDYW4gdGhpcyAqeGlsaW54X2F4aWVuZXQqIGRyaXZlciBiZSBpbnN0YW50aWF0ZWQgaW4gZnV6emluZyBlbnZpcm9ubWVudHMsIGVzcGVjaWFsbHkgU3l6a2FsbGVyIGFuZCBRRU1VPyBTeXprYWxsZXIgcnVucyBvbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBWTXMuIENhbiBwbGF0Zm9ybSBkcml2ZXJzIGxpa2UgdGhpcyBvbmUgYmUgcmVhY2hlZCB3aXRob3V0IHZpcnR1YWwgZGV2aWNlcz8gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6ICpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlKiBpZiB0aGUgcGF0Y2ggaXM6CgotICAgRG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgb3IgY29tbWVudHMuCi0gICBEZWNvcmF0aXZlIGNoYW5nZXMuCi0gICBDb25zdGFudCBjaGFuZ2VzLgotICAgQ29kZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuCi0gICBWZW5kb3Itc3BlY2lmaWMgUENJZS9TbWFydE5JQy9HUFUgZHJpdmVycyByZXF1aXJpbmcgcGh5c2ljYWwgY2FyZHMgbm90IGVtdWxhdGVkIGluIFFFTVUuCi0gICBgLnJlbW92ZWAsIGAuc2h1dGRvd25gLCBvciBgcGNpX3VucmVnaXN0ZXJfZHJpdmVyYCBjYWxsYmFja3MuCgpJZiB0aGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCAqV29ydGhGdXp6aW5nPXRydWUqLiBTbywgY2FuICp4aWxpbnhfYXhpZW5ldCogYmUgbG9hZGVkL3Byb2JlZC9mdXp6ZWQgaW4gc3RhbmRhcmQgUUVNVSAoeDg2XzY0IG9yIGFybTY0KT8gVGhpcyBpcyBhbiBPRiBwbGF0Zm9ybSBkcml2ZXI7IGl0IHJlZ2lzdGVycyB3aXRoIGBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXJgIGFuZCBwcm9iZXMgdmlhIGRldmljZSB0cmVlIG1hdGNoZXMuIENhbiBTeXprYWxsZXIgcHJvYmUgcGxhdGZvcm0gZHJpdmVycyB2aWEgT0Ygb3ZlcmxheXM/IERvZXMgc3RhbmRhcmQgUUVNVSBoYXZlIGB4bG54LGF4aS1ldGhlcm5ldGAgaW4gaXRzIGRldmljZSB0cmVlPyAqTm8qLCB0aGUgc3RhbmRhcmQgUUVNVSBgdmlydGAgbWFjaGluZSBkb2VzbiYjMzk7dC4gWW91IG5lZWQgdGhlIGB4bG54LXpjdTEwMmAgb3IgYG1pY3JvYmxhemVgIFFFTVUgYm9hcmRzIGZvciB0aGF0LgoKVGhpcyBkcml2ZXIgaXMgZm9yICYjMzQ7WGlsaW54IDEwLzEwMC8xMDAwIEFYSSBFdGhlcm5ldCYjMzQ7IGFuZCAmIzM0O1hpbGlueCBYWFYgMTBHLzI1RyBFdGhlcm5ldCBTdWJzeXN0ZW0uJiMzNDsgVGhlc2UgYXJlIEZQR0EgSVAgY29yZXMgLyBTb0MgcGVyaXBoZXJhbCBibG9ja3Mgb24gWGlsaW54IEZQR0FzIGFuZCBTb0NzIChWaXJ0ZXgsIFp5bnEsIFp5bnFNUCwgVmVyc2FsKS4gVGhlICp4bG54LHh4di1ldGhlcm5ldC0xLjAqIHZhcmlhbnQgc3BlY2lmaWNhbGx5IHJlcXVpcmVzIGEgWGlsaW54IERNQSBjb250cm9sbGVyLiBJbiAqc3RhbmRhcmQqIFFFTVUvR0NFLCB0aGVyZSYjMzk7cyBubyBzdWNoIGhhcmR3YXJlLiBFdmVuIHdpdGggYW4gT0Ygb3ZlcmxheSBvciBwbGF0Zm9ybSBkZXZpY2UgY3JlYXRpb24sIGl0JiMzOTtzIHByb2JsZW1hdGljOiBgZGV2bV9wbGF0Zm9ybV9nZXRfYW5kX2lvcmVtYXBfcmVzb3VyY2VgLCBjbG9jayBpbml0aWFsaXphdGlvbiB2aWEgYGRldm1fY2xrX2dldF9lbmFibGVkYCwgRE1BIGVuZ2luZSBzZXR1cCAocmVxdWlyZXMgWGlsaW54IERNQSksIHJlZ2lzdGVyIHJlYWRzIOKAkyBhbGwgdGhlc2UgcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSBvciBhIG1vcmUgYWR2YW5jZWQgbGV2ZWwgb2YgaGFyZHdhcmUgZW11bGF0aW9uLgoKT2theSwgaXMgdGhlcmUgYW55IGNvcmUga2VybmVsIGNvZGUgbW9kaWZpZWQ/IExldCYjMzk7cyBjaGVjayB0aGUgZ2l0IGRpZmYgYWdhaW46IGl0JiMzOTtzIGFsbCBjb250YWluZWQgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvYCDigJMgZG9jcywgTWFrZWZpbGVzLCBoZWFkZXJzLCBhbmQgdGhlIGRyaXZlciBzb3VyY2UgZmlsZXMuIE5vIGNvcmUgbmV0d29ya2luZyBzdGFjayBmaWxlcyBvciBjb21tb24ga2VybmVsIGNvZGUgaXMgdG91Y2hlZC4KClRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgaXQgaXMgbm90IGZ1enplci13b3J0aHkuICp4aWxpbnhfYXhpZW5ldCogcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgb3IgYSBub24tc3RhbmRhcmQgUUVNVSBib2FyZCBhbmQgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgY2hhbmdlcyBhcmUgZW50aXJlbHkgd2l0aGluIHRoZSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyLgoKVGhlcmVmb3JlLCAqV29ydGhGdXp6aW5nKiBzaG91bGQgYmUgKmZhbHNlKi4KClRoZSBmaW5hbCBwYXJhbWV0ZXJzIHdpbGwgYmU6Ci0gICBgV29ydGhGdXp6aW5nYDogKmZhbHNlKgotICAgYFJlYXNvbmluZ2A6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIFhpbAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB2ZW5kb3Itc3BlY2lmaWMgWGlsaW54IEFYSSAvIFhYViBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC8pLCBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFhpbGlueCBYWFYgMTBHLzI1RyBFdGhlcm5ldCBTdWJzeXN0ZW0gRlBHQSBJUCBjb3JlLiBUaGlzIGhhcmR3YXJlIHJlcXVpcmVzIHBoeXNpY2FsIFhpbGlueC9BTUQgRlBHQS9Tb0MgaGFyZHdhcmUgYW5kIGNhbm5vdCBiZSByZWFjaGVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdmVuZG9yLXNwZWNpZmljIFhpbGlueCBBWEkgLyBYWFYgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvKSwgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBYaWxpbnggWFhWIDEwRy8yNUcgRXRoZXJuZXQgU3Vic3lzdGVtIEZQR0EgSVAgY29yZS4gVGhpcyBoYXJkd2FyZSByZXF1aXJlcyBwaHlzaWNhbCBYaWxpbngvQU1EIEZQR0EvU29DIGhhcmR3YXJlIGFuZCBjYW5ub3QgYmUgcmVhY2hlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjA3OjE0LjAyNjE1MDYzN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MjQ5NDM1MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdmVuZG9yLXNwZWNpZmljIFhpbGlueCBBWEkgLyBYWFYgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvKSwgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBYaWxpbnggWFhWIDEwRy8yNUcgRXRoZXJuZXQgU3Vic3lzdGVtIEZQR0EgSVAgY29yZS4gVGhpcyBoYXJkd2FyZSByZXF1aXJlcyBwaHlzaWNhbCBYaWxpbngvQU1EIEZQR0EvU29DIGhhcmR3YXJlIGFuZCBjYW5ub3QgYmUgcmVhY2hlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjA3OjE0LjAyNjE1NDkyN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ5MTk4MjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDVkNTAyZmMxOTI5ZjczZTBmZWI4MDczOWRiZGUzMmExNzY4ZDhjNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMjowNzoxMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3hsbngseHh2LWV0aGVybmV0LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3hsbngseHh2LWV0aGVybmV0LnlhbWxcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjJiZTNhZGUxMWQ0NjVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHh4di1ldGhlcm5ldC55YW1sXFxuQEAgLTAsMCArMSwxMDcgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQveGxueCx4eHYtZXRoZXJuZXQueWFtbCNcXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXFxuK1xcbit0aXRsZTogWGlsaW54IFhYViAxMEcvMjVHIEV0aGVybmV0IFN1YnN5c3RlbVxcbitcXG4rbWFpbnRhaW5lcnM6XFxuKyAgLSBSYWRoZXkgU2h5YW0gUGFuZGV5IFxcdTAwM2NyYWRoZXkuc2h5YW0ucGFuZGV5QGFtZC5jb21cXHUwMDNlXFxuKyAgLSBTdXJhaiBHdXB0YSBcXHUwMDNjc3VyYWouZ3VwdGEyQGFtZC5jb21cXHUwMDNlXFxuK1xcbitkZXNjcmlwdGlvbjpcXG4rICBUaGUgWGlsaW54IFhYViBFdGhlcm5ldCBTdWJzeXN0ZW0gaW1wbGVtZW50cyBhIDEwRy8yNUcgRXRoZXJuZXQgTUFDIHdpdGggYW5cXG4rICBpbi1jb3JlIFBDUy9QTUEgZHJpdmluZyBhIGhpZ2gtc3BlZWQgc2VyaWFsIHRyYW5zY2VpdmVyLiBJdCBzdXBwb3J0cyB0aGVcXG4rICAxMEdCQVNFLVIgYW5kIDI1R0JBU0UtUiBsaW5lIHJhdGVzLCB3aXRoIDI1RyBvcGVyYXRpb24gZm9sbG93aW5nIHRoZSAyNUdcXG4rICBFdGhlcm5ldCBDb25zb3J0aXVtIHNwZWNpZmljYXRpb24uIEl0IGhhcyBubyBleHRlcm5hbCBNRElPIFBIWSwgYW5kIGl0c1xcbisgIHBheWxvYWQgaXMgbW92ZWQgYnkgYW4gZXh0ZXJuYWwgQVhJIERNQSAob3IgbXVsdGljaGFubmVsIERNQSkgY29udHJvbGxlclxcbisgIHJlZmVyZW5jZWQgdGhyb3VnaCB0aGUgXFxcImRtYXNcXFwiIHByb3BlcnR5LlxcbitcXG4rcHJvcGVydGllczpcXG4rICBjb21wYXRpYmxlOlxcbisgICAgY29uc3Q6IHhsbngseHh2LWV0aGVybmV0LTEuMFxcbitcXG4rICByZWc6XFxuKyAgICBtYXhJdGVtczogMVxcbisgICAgZGVzY3JpcHRpb246IE1BQyBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXIgc3BhY2UuXFxuK1xcbisgIGNsb2NrczpcXG4rICAgIGl0ZW1zOlxcbisgICAgICAtIGRlc2NyaXB0aW9uOiBSWCBBWEk0LVN0cmVhbSBjbG9jay5cXG4rICAgICAgLSBkZXNjcmlwdGlvbjogR1QgRFJQIGNsb2NrLlxcbisgICAgICAtIGRlc2NyaXB0aW9uOiBBWEk0LUxpdGUgcmVnaXN0ZXIgY2xvY2suXFxuK1xcbisgIGNsb2NrLW5hbWVzOlxcbisgICAgaXRlbXM6XFxuKyAgICAgIC0gY29uc3Q6IHJ4X2NvcmVcXG4rICAgICAgLSBjb25zdDogZHJwXFxuKyAgICAgIC0gY29uc3Q6IHNfYXhpXFxuK1xcbisgIHBoeS1tb2RlOlxcbisgICAgZW51bTpcXG4rICAgICAgLSAxMGdiYXNlLXJcXG4rICAgICAgLSAyNWdiYXNlLXJcXG4rXFxuKyAgeGxueCxyeG1lbTpcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBTaXplIGluIGJ5dGVzIG9mIHRoZSBSeC9UeCBwYWNrZXQgYnVmZmVyIG1lbW9yeSBidWlsdCBpbnRvIHRoZSBJUC4gSXQgaXNcXG4rICAgICAgZml4ZWQgYnkgdGhlIGhhcmR3YXJlIGRlc2lnbiBhbmQgYm91bmRzIHRoZSBsYXJnZXN0IGZyYW1lIChqdW1ibyBNVFUpIHRoZVxcbisgICAgICBkZXZpY2UgY2FuIGFjY2VwdC5cXG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMlxcbitcXG4rICBkbWFzOlxcbisgICAgbWluSXRlbXM6IDJcXG4rICAgIG1heEl0ZW1zOiAzMlxcbisgICAgZGVzY3JpcHRpb246IFRYIGFuZCBSWCBETUEgY2hhbm5lbCBwaGFuZGxlLlxcbitcXG4rICBkbWEtbmFtZXM6XFxuKyAgICBpdGVtczpcXG4rICAgICAgcGF0dGVybjogXFxcIl5bdHJdeF9jaGFuKFswLTldfDFbMC01XSkkXFxcIlxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIFNob3VsZCBiZSBcXFwidHhfY2hhbjBcXFwiLCBcXFwidHhfY2hhbjFcXFwiIC4uLiBcXFwidHhfY2hhbjE1XFxcIiBmb3IgRE1BIFR4IGNoYW5uZWwgYW5kXFxuKyAgICAgIFxcXCJyeF9jaGFuMFxcXCIsIFxcXCJyeF9jaGFuMVxcXCIgLi4uIFxcXCJyeF9jaGFuMTVcXFwiIGZvciBETUEgUnggY2hhbm5lbC5cXG4rICAgIG1pbkl0ZW1zOiAyXFxuKyAgICBtYXhJdGVtczogMzJcXG4rXFxuK3JlcXVpcmVkOlxcbisgIC0gY29tcGF0aWJsZVxcbisgIC0gcmVnXFxuKyAgLSBjbG9ja3NcXG4rICAtIGNsb2NrLW5hbWVzXFxuKyAgLSBwaHktbW9kZVxcbisgIC0geGxueCxyeG1lbVxcbisgIC0gZG1hc1xcbisgIC0gZG1hLW5hbWVzXFxuK1xcbithbGxPZjpcXG4rICAtICRyZWY6IC9zY2hlbWFzL25ldC9ldGhlcm5ldC1jb250cm9sbGVyLnlhbWwjXFxuK1xcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbitleGFtcGxlczpcXG4rICAjIFNpbmdsZSBBWEkgRE1BIGNoYW5uZWwgcGFpclxcbisgIC0gfFxcbisgICAgZXRoZXJuZXRAODAwMDAwMDAge1xcbisgICAgICAgIGNvbXBhdGlibGUgPSBcXFwieGxueCx4eHYtZXRoZXJuZXQtMS4wXFxcIjtcXG4rICAgICAgICByZWcgPSBcXHUwMDNjMHg4MDAwMDAwMCAweDEwMDAwXFx1MDAzZTtcXG4rICAgICAgICBjbG9jay1uYW1lcyA9IFxcXCJyeF9jb3JlXFxcIiwgXFxcImRycFxcXCIsIFxcXCJzX2F4aVxcXCI7XFxuKyAgICAgICAgY2xvY2tzID0gXFx1MDAzY1xcdTAwMjZyeF9jbGtcXHUwMDNlLCBcXHUwMDNjXFx1MDAyNmRycF9jbGtcXHUwMDNlLCBcXHUwMDNjXFx1MDAyNmF4aV9jbGtcXHUwMDNlO1xcbisgICAgICAgIGRtYS1uYW1lcyA9IFxcXCJ0eF9jaGFuMFxcXCIsIFxcXCJyeF9jaGFuMFxcXCI7XFxuKyAgICAgICAgZG1hcyA9IFxcdTAwM2NcXHUwMDI2YXhpX2RtYSAwXFx1MDAzZSwgXFx1MDAzY1xcdTAwMjZheGlfZG1hIDFcXHUwMDNlO1xcbisgICAgICAgIHBoeS1tb2RlID0gXFxcIjI1Z2Jhc2UtclxcXCI7XFxuKyAgICAgICAgeGxueCxyeG1lbSA9IFxcdTAwM2MweDgwMDBcXHUwMDNlO1xcbisgICAgfTtcXG4rICAjIE11bHRpY2hhbm5lbCBETUEgKE1DRE1BKSB3aXRoIG11bHRpcGxlIFR4L1J4IGNoYW5uZWxzXFxuKyAgLSB8XFxuKyAgICBldGhlcm5ldEA4MDAxMDAwMCB7XFxuKyAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJ4bG54LHh4di1ldGhlcm5ldC0xLjBcXFwiO1xcbisgICAgICAgIHJlZyA9IFxcdTAwM2MweDgwMDEwMDAwIDB4MTAwMDBcXHUwMDNlO1xcbisgICAgICAgIGNsb2NrLW5hbWVzID0gXFxcInJ4X2NvcmVcXFwiLCBcXFwiZHJwXFxcIiwgXFxcInNfYXhpXFxcIjtcXG4rICAgICAgICBjbG9ja3MgPSBcXHUwMDNjXFx1MDAyNnJ4X2Nsa1xcdTAwM2UsIFxcdTAwM2NcXHUwMDI2ZHJwX2Nsa1xcdTAwM2UsIFxcdTAwM2NcXHUwMDI2YXhpX2Nsa1xcdTAwM2U7XFxuKyAgICAgICAgZG1hLW5hbWVzID0gXFxcInR4X2NoYW4wXFxcIiwgXFxcInR4X2NoYW4xXFxcIiwgXFxcInJ4X2NoYW4wXFxcIiwgXFxcInJ4X2NoYW4xXFxcIjtcXG4rICAgICAgICBkbWFzID0gXFx1MDAzY1xcdTAwMjZheGlfbWNkbWEgMFxcdTAwM2UsIFxcdTAwM2NcXHUwMDI2YXhpX21jZG1hIDFcXHUwMDNlLFxcbisgICAgICAgICAgICAgICBcXHUwMDNjXFx1MDAyNmF4aV9tY2RtYSAxNlxcdTAwM2UsIFxcdTAwM2NcXHUwMDI2YXhpX21jZG1hIDE3XFx1MDAzZTtcXG4rICAgICAgICBwaHktbW9kZSA9IFxcXCIxMGdiYXNlLXJcXFwiO1xcbisgICAgICAgIHhsbngscnhtZW0gPSBcXHUwMDNjMHg4MDAwXFx1MDAzZTtcXG4rICAgIH07XFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCAwYjQyZTg5OGY0ZDhlLi40ZWRjOGE3MzA0ZGIwIDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMjk4NjEsNiArMjk4NjEsNyBAQCBYSUxJTlggQVhJIEVUSEVSTkVUIERSSVZFUlxcbiBNOlxcdFJhZGhleSBTaHlhbSBQYW5kZXkgXFx1MDAzY3JhZGhleS5zaHlhbS5wYW5kZXlAYW1kLmNvbVxcdTAwM2VcXG4gUzpcXHRNYWludGFpbmVkXFxuIEY6XFx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LGF4aS1ldGhlcm5ldC55YW1sXFxuK0Y6XFx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHh4di1ldGhlcm5ldC55YW1sXFxuIEY6XFx0ZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0KlxcbiBcXG4gWElMSU5YIENBTiBEUklWRVJcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L01ha2VmaWxlXFxuaW5kZXggN2Q3ZGMxNzcxNDIzZS4uZGI5MGU2OTFmZWM1OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvTWFrZWZpbGVcXG5AQCAtNiw1ICs2LDYgQEBcXG4gbGxfdGVtYWMtb2JqcyA6PSBsbF90ZW1hY19tYWluLm8gbGxfdGVtYWNfbWRpby5vXFxuIG9iai0kKENPTkZJR19YSUxJTlhfTExfVEVNQUMpICs9IGxsX3RlbWFjLm9cXG4gb2JqLSQoQ09ORklHX1hJTElOWF9FTUFDTElURSkgKz0geGlsaW54X2VtYWNsaXRlLm9cXG4teGlsaW54X2VtYWMtb2JqcyA6PSB4aWxpbnhfYXhpZW5ldF9tYWluLm8geGlsaW54X2F4aWVuZXRfbWRpby5vXFxuK3hpbGlueF9lbWFjLW9ianMgOj0geGlsaW54X2F4aWVuZXRfbWFpbi5vIHhpbGlueF9heGllbmV0X21kaW8ubyBcXFxcXFxuK1xcdFxcdCAgICB4aWxpbnhfYXhpZW5ldF94eHYub1xcbiBvYmotJChDT05GSUdfWElMSU5YX0FYSV9FTUFDKSArPSB4aWxpbnhfZW1hYy5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0LmhcXG5pbmRleCBmY2QzYWFlZjI3ZmMzLi4yZWEwODZmYzRkYzM2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0LmhcXG5AQCAtMTAsNiArMTAsNyBAQFxcbiAjZGVmaW5lIFhJTElOWF9BWElFTkVUX0hcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kaW0uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aHRvb2wuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpbmxvY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXFx1MDAzZVxcbkBAIC0xNyw2ICsxOCw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHlsaW5rLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gXFxuKyNpbmNsdWRlIFxcXCJ4aWxpbnhfYXhpZW5ldF94eHYuaFxcXCJcXG4rXFxuIC8qIFBhY2tldCBzaXplIGluZm8gKi9cXG4gI2RlZmluZSBYQUVfSERSX1NJWkVcXHRcXHRcXHQxNCAvKiBTaXplIG9mIEV0aGVybmV0IGhlYWRlciAqL1xcbiAjZGVmaW5lIFhBRV9UUkxfU0laRVxcdFxcdFxcdCA0IC8qIFNpemUgb2YgRXRoZXJuZXQgdHJhaWxlciAoRkNTKSAqL1xcbkBAIC01NDUsNiArNTQ4LDkgQEAgc3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yIHtcXG4gICogQHR4X3JpbmdfdGFpbDogVFggc2tiIHJpbmcgYnVmZmVyIHRhaWwgaW5kZXguXFxuICAqIEByeF9yaW5nX2hlYWQ6IFJYIHNrYiByaW5nIGJ1ZmZlciBoZWFkIGluZGV4LlxcbiAgKiBAcnhfcmluZ190YWlsOiBSWCBza2IgcmluZyBidWZmZXIgdGFpbCBpbmRleC5cXG4rICogQHh4dl9pcF92ZXJzaW9uOiBYWFYgSVAgdmVyc2lvbi5cXG4rICogQHh4dl9zdGF0X2Jhc2U6IFNvZnR3YXJlIGFjY3VtdWxhdG9ycyBmb3IgdGhlIFhYViBjbGVhci1vbi10aWNrIGNvdW50ZXJzLlxcbisgKiBAYXhpZW5ldF9jb25maWc6IE1BQy10eXBlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gYW5kIG9wZXJhdGlvbnMuXFxuICAqL1xcbiBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCB7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xcbkBAIC01OTgsNiArNjA0LDcgQEAgc3RydWN0IGF4aWVuZXRfbG9jYWwge1xcbiBcXG4gXFx0dTY0IGh3X3N0YXRfYmFzZVtTVEFUX0NPVU5UXTtcXG4gXFx0dTMyIGh3X2xhc3RfY291bnRlcltTVEFUX0NPVU5UXTtcXG4rXFx0dTY0IHh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfQ09VTlRdO1xcbiBcXHRzZXFjb3VudF9tdXRleF90IGh3X3N0YXRzX3NlcWNvdW50O1xcbiBcXHRzdHJ1Y3QgbXV0ZXggc3RhdHNfbG9jaztcXG4gXFx0c3RydWN0IGRlbGF5ZWRfd29yayBzdGF0c193b3JrO1xcbkBAIC02MjYsOCArNjMzLDg4IEBAIHN0cnVjdCBheGllbmV0X2xvY2FsIHtcXG4gXFx0aW50IHR4X3JpbmdfdGFpbDtcXG4gXFx0aW50IHJ4X3JpbmdfaGVhZDtcXG4gXFx0aW50IHJ4X3JpbmdfdGFpbDtcXG4rXFx0dTMyIHh4dl9pcF92ZXJzaW9uO1xcbitcXHRjb25zdCBzdHJ1Y3QgYXhpZW5ldF9jb25maWcgKmF4aWVuZXRfY29uZmlnO1xcbiB9O1xcbiBcXG4rLyoqXFxuKyAqIHN0cnVjdCBheGllbmV0X2NvbmZpZyAtIE1BQy10eXBlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gYW5kIG9wZXJhdGlvbnNcXG4rICogQG1kaW86IE1BQyBoYXMgYW4gTURJTyBidXMgZm9yIGV4dGVybmFsIFBIWSBtYW5hZ2VtZW50XFxuKyAqIEBtYWNfaXJxOiBNQUMgaGFzIGEgZGVkaWNhdGVkIGNvcmUgaW50ZXJydXB0XFxuKyAqIEBsZWdhY3lfZG1hOiBNQUMgc3VwcG9ydHMgdGhlIGxlZ2FjeSAobm9uLWRtYWVuZ2luZSkgRE1BIG1vZGVcXG4rICogQHVjX2ZpbHRlcjogTUFDIGhhcyB1bmljYXN0IGFkZHJlc3MgZmlsdGVyIHJlZ2lzdGVyc1xcbisgKiBAbWNfZmlsdGVyOiBNQUMgaGFzIG11bHRpY2FzdCBhZGRyZXNzIGZpbHRlciByZWdpc3RlcnNcXG4rICogQHZsYW46IE1BQyBzdXBwb3J0cyBWTEFOIGZyYW1lcyBieSBkZWZhdWx0XFxuKyAqIEBqdW1ibzogTUFDIHN1cHBvcnRzIGp1bWJvIGZyYW1lc1xcbisgKiBAZG1hX3R4X2NzdW06IE1BQyBzdXBwb3J0cyBUWCBjaGVja3N1bSBvZmZsb2FkXFxuKyAqIEBzd19wYWRkaW5nOiBTaG9ydCBmcmFtZXMgbXVzdCBiZSBwYWRkZWQgaW4gc29mdHdhcmUgYmVmb3JlIHRyYW5zbWl0XFxuKyAqIEBpbnRlcm5hbF9wY3M6IE1BQyBhbHdheXMgZHJpdmVzIGFuIGludGVybmFsIFBDU1xcbisgKiBAcmVnc19uOiBOdW1iZXIgb2YgTUFDIHJlZ2lzdGVycyBleHBvc2VkIHRocm91Z2ggZXRodG9vbCAtZFxcbisgKiBAY2xrX2luaXQ6IENhbGxiYWNrIHRvIGdldCBhbmQgZW5hYmxlIHRoZSBNQUMtc3BlY2lmaWMgY2xvY2tzXFxuKyAqIEBzZXRvcHRpb25zOiBDYWxsYmFjayB0byBwcm9ncmFtIE1BQyBoYXJkd2FyZSBvcHRpb25zXFxuKyAqIEBwcm9iZV9pbml0OiBDYWxsYmFjayBmb3IgTUFDLXNwZWNpZmljIHByb2JlLXRpbWUgaW5pdCwgb3IgTlVMTCBpZiB1bnVzZWRcXG4rICogQGd0X3Jlc2V0OiBDYWxsYmFjayB0byByZXNldCB0aGUgc2VyaWFsIHRyYW5zY2VpdmVyIChHVCksIG9yIE5VTEwgaWYgdW51c2VkXFxuKyAqIEBtYWNfaW5pdDogQ2FsbGJhY2sgZm9yIE1BQy1zcGVjaWZpYyBicmluZy11cCBhZnRlciB0aGUgRE1BIHJlc2V0XFxuKyAqIEBtYWNfbGlua191cDogQ2FsbGJhY2sgdG8gcHJvZ3JhbSBsaW5rIHNwZWVkIGFuZCBwYXVzZSBvbiBsaW5rIHVwLCBvciBOVUxMXFxuKyAqIEBnZXRfcmVnczogQ2FsbGJhY2sgdG8gZHVtcCB0aGUgTUFDIHJlZ2lzdGVycyBmb3IgZXRodG9vbCAtZFxcbisgKiBAcGh5bGlua19zZXRfY2FwczogQ2FsbGJhY2sgdG8gc2V0IHBoeWxpbmsgTUFDIGNhcGFiaWxpdGllc1xcbisgKiBAcGNzX29wczogcGh5bGluayBQQ1Mgb3BlcmF0aW9ucyBmb3IgdGhpcyBNQUMsIG9yIE5VTEwgaWYgdW51c2VkXFxuKyAqIEBzdGF0c191cGRhdGU6IENhbGxiYWNrIHRvIGxhdGNoL2FjY3VtdWxhdGUgdGhlIHBlcmlvZGljIE1BQyBjb3VudGVyc1xcbisgKiBAZ2V0X3N0YXRzNjQ6IENhbGxiYWNrIHRvIHJlYWQgTUFDIGNvdW50ZXJzIGludG8gcnRubF9saW5rX3N0YXRzNjRcXG4rICogQGdldF9ldGh0b29sX3N0YXRzOiBDYWxsYmFjayB0byByZWFkIE1BQyBjb3VudGVycyBmb3IgZXRodG9vbCAtU1xcbisgKiBAZ2V0X3N0cmluZ3M6IENhbGxiYWNrIHRvIGZpbGwgdGhlIGV0aHRvb2wgLVMgc3RhdGlzdGljIG5hbWUgc3RyaW5nc1xcbisgKiBAZ2V0X3NzZXRfY291bnQ6IENhbGxiYWNrIHJldHVybmluZyB0aGUgbnVtYmVyIG9mIGV0aHRvb2wgLVMgc3RhdGlzdGljc1xcbisgKiBAZ2V0X3BhdXNlX3N0YXRzOiBDYWxsYmFjayB0byByZWFkIE1BQyBwYXVzZS1mcmFtZSBjb3VudGVyc1xcbisgKiBAZ2V0X2V0aF9tYWNfc3RhdHM6IENhbGxiYWNrIHRvIHJlYWQgSUVFRSA4MDIuMyBNQUMgY291bnRlcnNcXG4rICogQGdldF9ldGhfY3RybF9zdGF0czogQ2FsbGJhY2sgdG8gcmVhZCBNQUMtY29udHJvbCBmcmFtZSBjb3VudGVycywgb3IgTlVMTFxcbisgKlxcdFxcdFxcdGlmIHRoZSBNQUMgZXhwb3NlcyBubyBjb250cm9sLWZyYW1lIGNvdW50ZXJzXFxuKyAqIEBnZXRfcm1vbl9zdGF0czogQ2FsbGJhY2sgdG8gcmVhZCBSTU9OIGNvdW50ZXJzIGFuZCBoaXN0b2dyYW0gcmFuZ2VzXFxuKyAqL1xcbitzdHJ1Y3QgYXhpZW5ldF9jb25maWcge1xcbitcXHRib29sIG1kaW87XFxuK1xcdGJvb2wgbWFjX2lycTtcXG4rXFx0Ym9vbCBsZWdhY3lfZG1hO1xcbitcXHRib29sIHVjX2ZpbHRlcjtcXG4rXFx0Ym9vbCBtY19maWx0ZXI7XFxuK1xcdGJvb2wgdmxhbjtcXG4rXFx0Ym9vbCBqdW1ibztcXG4rXFx0Ym9vbCBkbWFfdHhfY3N1bTtcXG4rXFx0Ym9vbCBzd19wYWRkaW5nO1xcbitcXHRib29sIGludGVybmFsX3BjcztcXG4rXFx0dW5zaWduZWQgaW50IHJlZ3NfbjtcXG4rXFx0aW50ICgqY2xrX2luaXQpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCk7XFxuK1xcdHZvaWQgKCpzZXRvcHRpb25zKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIG9wdGlvbnMpO1xcbitcXHR2b2lkICgqcHJvYmVfaW5pdCkoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKTtcXG4rXFx0dm9pZCAoKmd0X3Jlc2V0KShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApO1xcbitcXHRpbnQgKCptYWNfaW5pdCkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbitcXHR2b2lkICgqbWFjX2xpbmtfdXApKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgc3BlZWQsXFxuK1xcdFxcdFxcdCAgICBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKTtcXG4rXFx0dm9pZCAoKmdldF9yZWdzKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsIHUzMiAqZGF0YSk7XFxuK1xcdHZvaWQgKCpwaHlsaW5rX3NldF9jYXBzKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyk7XFxuK1xcdGNvbnN0IHN0cnVjdCBwaHlsaW5rX3Bjc19vcHMgKnBjc19vcHM7XFxuK1xcdHZvaWQgKCpzdGF0c191cGRhdGUpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCk7XFxuK1xcdHZvaWQgKCpnZXRfc3RhdHM2NCkoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cyk7XFxuK1xcdHZvaWQgKCpnZXRfZXRodG9vbF9zdGF0cykoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLCB1NjQgKmRhdGEpO1xcbitcXHR2b2lkICgqZ2V0X3N0cmluZ3MpKHU4ICpkYXRhKTtcXG4rXFx0aW50ICgqZ2V0X3NzZXRfY291bnQpKHZvaWQpO1xcbitcXHR2b2lkICgqZ2V0X3BhdXNlX3N0YXRzKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cyk7XFxuK1xcdHZvaWQgKCpnZXRfZXRoX21hY19zdGF0cykoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cyk7XFxuK1xcdHZvaWQgKCpnZXRfZXRoX2N0cmxfc3RhdHMpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGV0aHRvb2xfZXRoX2N0cmxfc3RhdHMgKmN0cmxfc3RhdHMpO1xcbitcXHR2b2lkICgqZ2V0X3Jtb25fc3RhdHMpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBldGh0b29sX3Jtb25fc3RhdHMgKnJtb25fc3RhdHMsXFxuK1xcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpO1xcbit9O1xcbitcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqcGNzX3RvX2F4aWVuZXRfbG9jYWwoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpXFxuK3tcXG4rXFx0cmV0dXJuIGNvbnRhaW5lcl9vZihwY3MsIHN0cnVjdCBheGllbmV0X2xvY2FsLCBwY3MpO1xcbit9XFxuK1xcbiAvKipcXG4gICogc3RydWN0IGF4aWVuZXRfb3B0aW9uIC0gVXNlZCB0byBzZXQgYXhpIGV0aGVybmV0IGhhcmR3YXJlIG9wdGlvbnNcXG4gICogQG9wdDpcXHRPcHRpb24gdG8gYmUgc2V0LlxcbkBAIC03NDEsNCArODI4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGF4aWVuZXRfZG1hX291dF9hZGRyKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwgb2ZmX3QgcmVnLFxcbiBpbnQgYXhpZW5ldF9tZGlvX3NldHVwKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCk7XFxuIHZvaWQgYXhpZW5ldF9tZGlvX3RlYXJkb3duKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCk7XFxuIFxcbisvKiBSTU9OIGhpc3RvZ3JhbSByYW5nZXMgc2hhcmVkIGJ5IGFsbCBNQUMgdHlwZXMgKi9cXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSBheGllbmV0X3Jtb25fcmFuZ2VzW107XFxuK1xcbiAjZW5kaWYgLyogWElMSU5YX0FYSV9FTkVUX0ggKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmNcXG5pbmRleCAxNzIyYjcwMzhmMzQwLi41OGUyMmYwZmQ3Yzk1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jXFxuQEAgLTMzLDYgKzMzLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX2lycS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfYWRkcmVzcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tYXRoNjQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbkBAIC02NSwxNiArNjYsNiBAQFxcbiBcXG4gc3RhdGljIHZvaWQgYXhpZW5ldF9yeF9zdWJtaXRfZGVzYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XFxuIFxcbi0vKiBNYXRjaCB0YWJsZSBmb3Igb2ZfcGxhdGZvcm0gYmluZGluZyAqL1xcbi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBheGllbmV0X29mX21hdGNoW10gPSB7XFxuLVxcdHsgLmNvbXBhdGlibGUgPSBcXFwieGxueCxheGktZXRoZXJuZXQtMS4wMC5hXFxcIiwgfSxcXG4tXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJ4bG54LGF4aS1ldGhlcm5ldC0xLjAxLmFcXFwiLCB9LFxcbi1cXHR7IC5jb21wYXRpYmxlID0gXFxcInhsbngsYXhpLWV0aGVybmV0LTIuMDEuYVxcXCIsIH0sXFxuLVxcdHt9LFxcbi19O1xcbi1cXG4tTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXhpZW5ldF9vZl9tYXRjaCk7XFxuLVxcbiAvKiBPcHRpb24gdGFibGUgZm9yIHNldHRpbmcgdXAgQXhpIEV0aGVybmV0IGhhcmR3YXJlIG9wdGlvbnMgKi9cXG4gc3RhdGljIHN0cnVjdCBheGllbmV0X29wdGlvbiBheGllbmV0X29wdGlvbnNbXSA9IHtcXG4gXFx0LyogVHVybiBvbiBqdW1ibyBwYWNrZXQgc3VwcG9ydCBmb3IgYm90aCBSeCBhbmQgVHggKi9cXG5AQCAtNDE5LDYgKzQxMCw5IEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmRldi1cXHUwMDNlZGV2X2FkZHIpKVxcbiBcXHRcXHRldGhfaHdfYWRkcl9yYW5kb20obmRldik7XFxuIFxcbitcXHRpZiAoIWxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNldWNfZmlsdGVyKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHQvKiBTZXQgdXAgdW5pY2FzdCBNQUMgYWRkcmVzcyBmaWx0ZXIgc2V0IGl0cyBtYWMgYWRkcmVzcyAqL1xcbiBcXHRheGllbmV0X2lvdyhscCwgWEFFX1VBVzBfT0ZGU0VULFxcbiBcXHRcXHQgICAgKG5kZXYtXFx1MDAzZWRldl9hZGRyWzBdKSB8XFxuQEAgLTQ2OCw2ICs0NjIsOSBAQCBzdGF0aWMgdm9pZCBheGllbmV0X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0dTMyIHJlZywgYWYwcmVnLCBhZjFyZWc7XFxuIFxcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbiBcXG4rXFx0aWYgKCFscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZW1jX2ZpbHRlcilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0cmVnID0gYXhpZW5ldF9pb3IobHAsIFhBRV9GTUlfT0ZGU0VUKTtcXG4gXFx0cmVnIFxcdTAwMjY9IH5YQUVfRk1JX1BNX01BU0s7XFxuIFxcdGlmIChuZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9QUk9NSVNDKVxcbkBAIC01NzYsMTYgKzU3MywzMSBAQCBzdGF0aWMgdm9pZCBheGllbmV0X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsIGJvb2wgcmVzZXQpXFxuIFxcdHdyaXRlX3NlcWNvdW50X2VuZChcXHUwMDI2bHAtXFx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGF4aWVuZXRfMWdfc3RhdHNfdXBkYXRlIC0gUmVmcmVzaCAxRyBNQUMgaGFyZHdhcmUgc3RhdGlzdGljc1xcbisgKiBAbHA6XFx0XFx0UG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcXG4rICovXFxuK3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfc3RhdHNfdXBkYXRlKHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcXG4re1xcbitcXHRheGllbmV0X3N0YXRzX3VwZGF0ZShscCwgZmFsc2UpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBheGllbmV0X3JlZnJlc2hfc3RhdHMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiB7XFxuIFxcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0c3RhdHNfd29yay53b3JrKTtcXG4gXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNmxwLVxcdTAwM2VzdGF0c19sb2NrKTtcXG4tXFx0YXhpZW5ldF9zdGF0c191cGRhdGUobHAsIGZhbHNlKTtcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZscC1cXHUwMDNlc3RhdHNfbG9jayk7XFxuK1xcdGlmIChscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZXN0YXRzX3VwZGF0ZSkge1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZscC1cXHUwMDNlc3RhdHNfbG9jayk7XFxuK1xcdFxcdGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNlc3RhdHNfdXBkYXRlKGxwKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZscC1cXHUwMDNlc3RhdHNfbG9jayk7XFxuK1xcdH1cXG4gXFxuLVxcdC8qIEp1c3QgbGVzcyB0aGFuIDJeMzIgYnl0ZXMgYXQgMi41IEdCaXQvcyAqL1xcbitcXHQvKiBSZS1hcm0gdGhlIHBvbGwgYmVmb3JlIGFueSBjb3VudGVyIGNhbiBvdmVyZmxvdyBiZXR3ZWVuIHVwZGF0ZXM6IHRoZVxcbitcXHQgKiAxRyBieXRlIGNvdW50ZXIgcmVhY2hlcyBqdXN0IHVuZGVyIDJeMzIgaW4gdGhpcyBpbnRlcnZhbCBhdCAyLjUgR2JpdC9zLFxcbitcXHQgKiBhbmQgdGhlIFhYViBpbnRlcm5hbCBhY2N1bXVsYXRvcnMgbXVzdCBiZSBsYXRjaGVkICh2aWEgVElDSyBpblxcbitcXHQgKiBheGllbmV0X3h4dl9zdGF0c191cGRhdGUoKSkgYmVmb3JlIHRoZXkgc2F0dXJhdGUgYXQgbGluZSByYXRlLlxcbitcXHQgKi9cXG4gXFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZscC1cXHUwMDNlc3RhdHNfd29yaywgMTMgKiBIWik7XFxuIH1cXG4gXFxuQEAgLTU5NCw3ICs2MDYsMTYgQEAgc3RhdGljIGludCBfX2F4aWVuZXRfZGV2aWNlX3Jlc2V0KHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcXG4gXFx0dTMyIHZhbHVlO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0LyogU2F2ZSBzdGF0aXN0aWNzIGNvdW50ZXJzIGluIGNhc2UgdGhleSB3aWxsIGJlIHJlc2V0ICovXFxuK1xcdC8qIFNhdmUgc3RhdGlzdGljcyBjb3VudGVycyBpbiBjYXNlIHRoZXkgd2lsbCBiZSByZXNldC5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIFhBRV9GRUFUVVJFX1NUQVRTIGJsb2NrcyBpbiB0aGlzIGZ1bmN0aW9uIHJlYWQgdGhlIFRFTUFDXFxuK1xcdCAqIHN0YXRpc3RpY3MgcmVnaXN0ZXJzIGF0IFhBRV9TVEFUU19PRkZTRVQsIGkuZS4gdGhleSBhc3N1bWUgdGhlIDFHXFxuK1xcdCAqIGNvdW50ZXIgbGF5b3V0LiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBfX2F4aWVuZXRfZGV2aWNlX3Jlc2V0KCkgaXNcXG4rXFx0ICogb25seSByZWFjaGVkIG9uIHRoZSBsZWdhY3kgKG5vbi1kbWFlbmdpbmUpIERNQSBwYXRoLCB3aGljaCB0aGVcXG4rXFx0ICogbGVnYWN5X2RtYSBjYXBhYmlsaXR5IHJlc3RyaWN0cyB0byB0aGUgMUcgTUFDLiBNQUNzIHRoYXQgdXNlIHRoZWlyXFxuK1xcdCAqIG93biBzdGF0aXN0aWNzIG1lY2hhbmlzbSAoZS5nLiBYWFYsIHdoaWNoIGlzIGRtYWVuZ2luZS1vbmx5KSBuZXZlclxcbitcXHQgKiBleGVjdXRlIHRoaXMgcGF0aC5cXG4rXFx0ICovXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmxwLVxcdTAwM2VzdGF0c19sb2NrKTtcXG4gXFx0aWYgKGxwLVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IFhBRV9GRUFUVVJFX1NUQVRTKVxcbiBcXHRcXHRheGllbmV0X3N0YXRzX3VwZGF0ZShscCwgdHJ1ZSk7XFxuQEAgLTY5NCw2ICs3MTUsMzIgQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9kbWFfc3RvcChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApXFxuIFxcdGF4aWVuZXRfdW5sb2NrX21paShscCk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBheGllbmV0XzFnX21hY19pbml0IC0gMUcgTUFDLXNwZWNpZmljIGJyaW5nLXVwIGFmdGVyIHRoZSBETUEgcmVzZXRcXG4rICogQG5kZXY6XFx0UG9pbnRlciB0byB0aGUgbmV0X2RldmljZSBzdHJ1Y3R1cmVcXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIgb3RoZXJ3aXNlLlxcbisgKi9cXG4rc3RhdGljIGludCBheGllbmV0XzFnX21hY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXHR1MzIgYXhpZW5ldF9zdGF0dXM7XFxuK1xcbitcXHRheGllbmV0X3N0YXR1cyA9IGF4aWVuZXRfaW9yKGxwLCBYQUVfUkNXMV9PRkZTRVQpO1xcbitcXHRheGllbmV0X3N0YXR1cyBcXHUwMDI2PSB+WEFFX1JDVzFfUlhfTUFTSztcXG4rXFx0YXhpZW5ldF9pb3cobHAsIFhBRV9SQ1cxX09GRlNFVCwgYXhpZW5ldF9zdGF0dXMpO1xcbitcXG4rXFx0YXhpZW5ldF9zdGF0dXMgPSBheGllbmV0X2lvcihscCwgWEFFX0lQX09GRlNFVCk7XFxuK1xcdGlmIChheGllbmV0X3N0YXR1cyBcXHUwMDI2IFhBRV9JTlRfUlhSSkVDVF9NQVNLKVxcbitcXHRcXHRheGllbmV0X2lvdyhscCwgWEFFX0lTX09GRlNFVCwgWEFFX0lOVF9SWFJKRUNUX01BU0spO1xcbitcXHRheGllbmV0X2lvdyhscCwgWEFFX0lFX09GRlNFVCwgbHAtXFx1MDAzZWV0aF9pcnEgXFx1MDAzZSAwID9cXG4rXFx0XFx0ICAgIFhBRV9JTlRfUkVDVl9FUlJPUl9NQVNLIDogMCk7XFxuK1xcbitcXHRheGllbmV0X2lvdyhscCwgWEFFX0ZDQ19PRkZTRVQsIFhBRV9GQ0NfRkNSWF9NQVNLKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKipcXG4gICogYXhpZW5ldF9kZXZpY2VfcmVzZXQgLSBSZXNldCBhbmQgaW5pdGlhbGl6ZSB0aGUgQXhpIEV0aGVybmV0IGhhcmR3YXJlLlxcbiAgKiBAbmRldjpcXHRQb2ludGVyIHRvIHRoZSBuZXRfZGV2aWNlIHN0cnVjdHVyZVxcbkBAIC03MDksMTkgKzc1NiwyMyBAQCBzdGF0aWMgdm9pZCBheGllbmV0X2RtYV9zdG9wKHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcXG4gICovXFxuIHN0YXRpYyBpbnQgYXhpZW5ldF9kZXZpY2VfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIHtcXG4tXFx0dTMyIGF4aWVuZXRfc3RhdHVzO1xcbiBcXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4gXFx0aW50IHJldDtcXG4gXFxuK1xcdGlmIChscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZWd0X3Jlc2V0KVxcbitcXHRcXHRscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZWd0X3Jlc2V0KGxwKTtcXG4rXFxuIFxcdGxwLVxcdTAwM2VtYXhfZnJtX3NpemUgPSBYQUVfTUFYX1ZMQU5fRlJBTUVfU0laRTtcXG4tXFx0bHAtXFx1MDAzZW9wdGlvbnMgfD0gWEFFX09QVElPTl9WTEFOO1xcbitcXG4rXFx0aWYgKGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNldmxhbilcXG4rXFx0XFx0bHAtXFx1MDAzZW9wdGlvbnMgfD0gWEFFX09QVElPTl9WTEFOO1xcbiBcXHRscC1cXHUwMDNlb3B0aW9ucyBcXHUwMDI2PSAoflhBRV9PUFRJT05fSlVNQk8pO1xcbiBcXG4gXFx0aWYgKG5kZXYtXFx1MDAzZW10dSBcXHUwMDNlIFhBRV9NVFUgXFx1MDAyNlxcdTAwMjYgbmRldi1cXHUwMDNlbXR1IFxcdTAwM2M9IFhBRV9KVU1CT19NVFUpIHtcXG4gXFx0XFx0bHAtXFx1MDAzZW1heF9mcm1fc2l6ZSA9IG5kZXYtXFx1MDAzZW10dSArIFZMQU5fRVRIX0hMRU4gK1xcbiBcXHRcXHRcXHRcXHRcXHRYQUVfVFJMX1NJWkU7XFxuIFxcbi1cXHRcXHRpZiAobHAtXFx1MDAzZW1heF9mcm1fc2l6ZSBcXHUwMDNjPSBscC1cXHUwMDNlcnhtZW0pXFxuK1xcdFxcdGlmIChscC1cXHUwMDNlbWF4X2ZybV9zaXplIFxcdTAwM2M9IGxwLVxcdTAwM2VyeG1lbSBcXHUwMDI2XFx1MDAyNiBscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZWp1bWJvKVxcbiBcXHRcXHRcXHRscC1cXHUwMDNlb3B0aW9ucyB8PSBYQUVfT1BUSU9OX0pVTUJPO1xcbiBcXHR9XFxuIFxcbkBAIC03MzgsMjYgKzc4OSwxOCBAQCBzdGF0aWMgaW50IGF4aWVuZXRfZGV2aWNlX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGF4aWVuZXRfc3RhdHVzID0gYXhpZW5ldF9pb3IobHAsIFhBRV9SQ1cxX09GRlNFVCk7XFxuLVxcdGF4aWVuZXRfc3RhdHVzIFxcdTAwMjY9IH5YQUVfUkNXMV9SWF9NQVNLO1xcbi1cXHRheGllbmV0X2lvdyhscCwgWEFFX1JDVzFfT0ZGU0VULCBheGllbmV0X3N0YXR1cyk7XFxuLVxcbi1cXHRheGllbmV0X3N0YXR1cyA9IGF4aWVuZXRfaW9yKGxwLCBYQUVfSVBfT0ZGU0VUKTtcXG4tXFx0aWYgKGF4aWVuZXRfc3RhdHVzIFxcdTAwMjYgWEFFX0lOVF9SWFJKRUNUX01BU0spXFxuLVxcdFxcdGF4aWVuZXRfaW93KGxwLCBYQUVfSVNfT0ZGU0VULCBYQUVfSU5UX1JYUkpFQ1RfTUFTSyk7XFxuLVxcdGF4aWVuZXRfaW93KGxwLCBYQUVfSUVfT0ZGU0VULCBscC1cXHUwMDNlZXRoX2lycSBcXHUwMDNlIDAgP1xcbi1cXHRcXHQgICAgWEFFX0lOVF9SRUNWX0VSUk9SX01BU0sgOiAwKTtcXG4tXFxuLVxcdGF4aWVuZXRfaW93KGxwLCBYQUVfRkNDX09GRlNFVCwgWEFFX0ZDQ19GQ1JYX01BU0spO1xcbitcXHRyZXQgPSBscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZW1hY19pbml0KG5kZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0LyogU3luYyBkZWZhdWx0IG9wdGlvbnMgd2l0aCBIVyBidXQgbGVhdmUgcmVjZWl2ZXIgYW5kXFxuIFxcdCAqIHRyYW5zbWl0dGVyIGRpc2FibGVkLlxcbiBcXHQgKi9cXG4tXFx0YXhpZW5ldF9zZXRvcHRpb25zKG5kZXYsIGxwLVxcdTAwM2VvcHRpb25zIFxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgfihYQUVfT1BUSU9OX1RYRU4gfCBYQUVfT1BUSU9OX1JYRU4pKTtcXG4rXFx0bHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VzZXRvcHRpb25zKG5kZXYsIGxwLVxcdTAwM2VvcHRpb25zIFxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0ICAgICAgIH4oWEFFX09QVElPTl9UWEVOIHwgWEFFX09QVElPTl9SWEVOKSk7XFxuIFxcdGF4aWVuZXRfc2V0X21hY19hZGRyZXNzKG5kZXYsIE5VTEwpO1xcbiBcXHRheGllbmV0X3NldF9tdWx0aWNhc3RfbGlzdChuZGV2KTtcXG4tXFx0YXhpZW5ldF9zZXRvcHRpb25zKG5kZXYsIGxwLVxcdTAwM2VvcHRpb25zKTtcXG4rXFx0bHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VzZXRvcHRpb25zKG5kZXYsIGxwLVxcdTAwM2VvcHRpb25zKTtcXG4gXFxuIFxcdG5ldGlmX3RyYW5zX3VwZGF0ZShuZGV2KTtcXG4gXFxuQEAgLTkxNSw2ICs5NTgsMTMgQEAgYXhpZW5ldF9zdGFydF94bWl0X2RtYWVuZ2luZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0aW50IHNnX2xlbjtcXG4gXFx0aW50IHJldDtcXG4gXFxuK1xcdGlmIChscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZXN3X3BhZGRpbmcgXFx1MDAyNlxcdTAwMjYgZXRoX3NrYl9wYWQoc2tiKSkge1xcbitcXHRcXHQvKiBQYWQgc2hvcnQgZnJhbWVzOyB0aGUgTUFDIGRvZXMgbm90IGFwcGVuZCBFdGhlcm5ldCBwYWRkaW5nLiAqL1xcbitcXHRcXHRuZGV2LVxcdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XFxuK1xcdFxcdG5kZXYtXFx1MDAzZXN0YXRzLnR4X2Vycm9ycysrO1xcbitcXHRcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbitcXHR9XFxuK1xcbiBcXHRkbWFfZGV2ID0gbHAtXFx1MDAzZXR4X2NoYW4tXFx1MDAzZWRldmljZTtcXG4gXFx0c2dfbGVuID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFncyArIDE7XFxuIFxcdGlmIChDSVJDX1NQQUNFKGxwLVxcdTAwM2V0eF9yaW5nX2hlYWQsIGxwLVxcdTAwM2V0eF9yaW5nX3RhaWwsIFRYX0JEX05VTV9NQVgpIFxcdTAwM2M9IDEpIHtcXG5AQCAtOTM5LDE5ICs5ODksMjEgQEAgYXhpZW5ldF9zdGFydF94bWl0X2RtYWVuZ2luZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0XFx0Z290byB4bWl0X2Vycm9yX2Ryb3Bfc2tiO1xcbiBcXG4gXFx0LyogRmlsbCB1cCBhcHAgZmllbGRzIGZvciBjaGVja3N1bSAqL1xcbi1cXHRpZiAoc2tiLVxcdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xcbi1cXHRcXHRpZiAobHAtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgWEFFX0ZFQVRVUkVfRlVMTF9UWF9DU1VNKSB7XFxuLVxcdFxcdFxcdC8qIFR4IEZ1bGwgQ2hlY2tzdW0gT2ZmbG9hZCBFbmFibGVkICovXFxuLVxcdFxcdFxcdGFwcF9tZXRhZGF0YVswXSB8PSAyO1xcbi1cXHRcXHR9IGVsc2UgaWYgKGxwLVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IFhBRV9GRUFUVVJFX1BBUlRJQUxfVFhfQ1NVTSkge1xcbi1cXHRcXHRcXHRjc3VtX3N0YXJ0X29mZiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7XFxuLVxcdFxcdFxcdGNzdW1faW5kZXhfb2ZmID0gY3N1bV9zdGFydF9vZmYgKyBza2ItXFx1MDAzZWNzdW1fb2Zmc2V0O1xcbi1cXHRcXHRcXHQvKiBUeCBQYXJ0aWFsIENoZWNrc3VtIE9mZmxvYWQgRW5hYmxlZCAqL1xcbi1cXHRcXHRcXHRhcHBfbWV0YWRhdGFbMF0gfD0gMTtcXG4tXFx0XFx0XFx0YXBwX21ldGFkYXRhWzFdID0gKGNzdW1fc3RhcnRfb2ZmIFxcdTAwM2NcXHUwMDNjIDE2KSB8IGNzdW1faW5kZXhfb2ZmO1xcbitcXHRpZiAobHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VkbWFfdHhfY3N1bSkge1xcbitcXHRcXHRpZiAoc2tiLVxcdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xcbitcXHRcXHRcXHRpZiAobHAtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgWEFFX0ZFQVRVUkVfRlVMTF9UWF9DU1VNKSB7XFxuK1xcdFxcdFxcdFxcdC8qIFR4IEZ1bGwgQ2hlY2tzdW0gT2ZmbG9hZCBFbmFibGVkICovXFxuK1xcdFxcdFxcdFxcdGFwcF9tZXRhZGF0YVswXSB8PSAyO1xcbitcXHRcXHRcXHR9IGVsc2UgaWYgKGxwLVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IFhBRV9GRUFUVVJFX1BBUlRJQUxfVFhfQ1NVTSkge1xcbitcXHRcXHRcXHRcXHRjc3VtX3N0YXJ0X29mZiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7XFxuK1xcdFxcdFxcdFxcdGNzdW1faW5kZXhfb2ZmID0gY3N1bV9zdGFydF9vZmYgKyBza2ItXFx1MDAzZWNzdW1fb2Zmc2V0O1xcbitcXHRcXHRcXHRcXHQvKiBUeCBQYXJ0aWFsIENoZWNrc3VtIE9mZmxvYWQgRW5hYmxlZCAqL1xcbitcXHRcXHRcXHRcXHRhcHBfbWV0YWRhdGFbMF0gfD0gMTtcXG4rXFx0XFx0XFx0XFx0YXBwX21ldGFkYXRhWzFdID0gKGNzdW1fc3RhcnRfb2ZmIFxcdTAwM2NcXHUwMDNjIDE2KSB8IGNzdW1faW5kZXhfb2ZmO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH0gZWxzZSBpZiAoc2tiLVxcdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHtcXG4rXFx0XFx0XFx0YXBwX21ldGFkYXRhWzBdIHw9IDI7IC8qIFR4IEZ1bGwgQ2hlY2tzdW0gT2ZmbG9hZCBFbmFibGVkICovXFxuIFxcdFxcdH1cXG4tXFx0fSBlbHNlIGlmIChza2ItXFx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkge1xcbi1cXHRcXHRhcHBfbWV0YWRhdGFbMF0gfD0gMjsgLyogVHggRnVsbCBDaGVja3N1bSBPZmZsb2FkIEVuYWJsZWQgKi9cXG4gXFx0fVxcbiBcXG4gXFx0ZG1hX3R4X2Rlc2MgPSBkbWFfZGV2LVxcdTAwM2VkZXZpY2VfcHJlcF9zbGF2ZV9zZyhscC1cXHUwMDNldHhfY2hhbiwgc2tidWZfZG1hLVxcdTAwM2VzZ2wsXFxuQEAgLTE2NzAsNiArMTcyMiwxMCBAQCBzdGF0aWMgaW50IGF4aWVuZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0YXhpZW5ldF9sb2NrX21paShscCk7XFxuIFxcdHJldCA9IGF4aWVuZXRfZGV2aWNlX3Jlc2V0KG5kZXYpO1xcbiBcXHRheGllbmV0X3VubG9ja19taWkobHApO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIobHAtXFx1MDAzZWRldiwgXFxcImF4aWVuZXRfZGV2aWNlX3Jlc2V0KCkgZmFpbGVkOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0ID0gcGh5bGlua19vZl9waHlfY29ubmVjdChscC1cXHUwMDNlcGh5bGluaywgbHAtXFx1MDAzZWRldi1cXHUwMDNlb2Zfbm9kZSwgMCk7XFxuIFxcdGlmIChyZXQpIHtcXG5AQCAtMTczOCwxMiArMTc5NCwxNyBAQCBzdGF0aWMgaW50IGF4aWVuZXRfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmxwLVxcdTAwM2VyeF9kaW0ud29yayk7XFxuIFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2bHAtXFx1MDAzZXN0YXRzX3dvcmspO1xcbitcXHRpZiAobHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VzdGF0c191cGRhdGUpIHtcXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bHAtXFx1MDAzZXN0YXRzX2xvY2spO1xcbitcXHRcXHRscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZXN0YXRzX3VwZGF0ZShscCk7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bHAtXFx1MDAzZXN0YXRzX2xvY2spO1xcbitcXHR9XFxuIFxcbiBcXHRwaHlsaW5rX3N0b3AobHAtXFx1MDAzZXBoeWxpbmspO1xcbiBcXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KGxwLVxcdTAwM2VwaHlsaW5rKTtcXG4gXFxuLVxcdGF4aWVuZXRfc2V0b3B0aW9ucyhuZGV2LCBscC1cXHUwMDNlb3B0aW9ucyBcXHUwMDI2XFxuLVxcdFxcdFxcdCAgIH4oWEFFX09QVElPTl9UWEVOIHwgWEFFX09QVElPTl9SWEVOKSk7XFxuK1xcdGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNlc2V0b3B0aW9ucyhuZGV2LCBscC1cXHUwMDNlb3B0aW9ucyBcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdCAgICAgICB+KFhBRV9PUFRJT05fVFhFTiB8IFhBRV9PUFRJT05fUlhFTikpO1xcbiBcXG4gXFx0aWYgKCFscC1cXHUwMDNldXNlX2RtYWVuZ2luZSkge1xcbiBcXHRcXHRheGllbmV0X2RtYV9zdG9wKGxwKTtcXG5AQCAtMTc2OSw3ICsxODMwLDggQEAgc3RhdGljIGludCBheGllbmV0X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdH1cXG4gXFxuIFxcdG5ldGRldl9yZXNldF9xdWV1ZShuZGV2KTtcXG4tXFx0YXhpZW5ldF9pb3cobHAsIFhBRV9JRV9PRkZTRVQsIDApO1xcbitcXHRpZiAobHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VtYWNfaXJxKVxcbitcXHRcXHRheGllbmV0X2lvdyhscCwgWEFFX0lFX09GRlNFVCwgMCk7XFxuIFxcbiBcXHRpZiAobHAtXFx1MDAzZWV0aF9pcnEgXFx1MDAzZSAwKVxcbiBcXHRcXHRmcmVlX2lycShscC1cXHUwMDNlZXRoX2lycSwgbmRldik7XFxuQEAgLTE4MzQsMjkgKzE4OTYsMTEgQEAgc3RhdGljIGludCBheGllbmV0X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpXFxuIFxcdHJldHVybiBwaHlsaW5rX21paV9pb2N0bChscC1cXHUwMDNlcGh5bGluaywgcnEsIGNtZCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkXFxuLWF4aWVuZXRfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cylcXG4rc3RhdGljIHZvaWQgYXhpZW5ldF8xZ19nZXRfc3RhdHM2NChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXFxuIHtcXG4tXFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0dW5zaWduZWQgaW50IHN0YXJ0O1xcbiBcXG4tXFx0bmV0ZGV2X3N0YXRzX3RvX3N0YXRzNjQoc3RhdHMsIFxcdTAwMjZkZXYtXFx1MDAzZXN0YXRzKTtcXG4tXFxuLVxcdGRvIHtcXG4tXFx0XFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXFx1MDAyNmxwLVxcdTAwM2VyeF9zdGF0X3N5bmMpO1xcbi1cXHRcXHRzdGF0cy1cXHUwMDNlcnhfcGFja2V0cyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZscC1cXHUwMDNlcnhfcGFja2V0cyk7XFxuLVxcdFxcdHN0YXRzLVxcdTAwM2VyeF9ieXRlcyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZscC1cXHUwMDNlcnhfYnl0ZXMpO1xcbi1cXHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXFx1MDAyNmxwLVxcdTAwM2VyeF9zdGF0X3N5bmMsIHN0YXJ0KSk7XFxuLVxcbi1cXHRkbyB7XFxuLVxcdFxcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFxcdTAwMjZscC1cXHUwMDNldHhfc3RhdF9zeW5jKTtcXG4tXFx0XFx0c3RhdHMtXFx1MDAzZXR4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bHAtXFx1MDAzZXR4X3BhY2tldHMpO1xcbi1cXHRcXHRzdGF0cy1cXHUwMDNldHhfYnl0ZXMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2bHAtXFx1MDAzZXR4X2J5dGVzKTtcXG4tXFx0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFxcdTAwMjZscC1cXHUwMDNldHhfc3RhdF9zeW5jLCBzdGFydCkpO1xcbi1cXG4tXFx0aWYgKCEobHAtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgWEFFX0ZFQVRVUkVfU1RBVFMpKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbiBcXHRkbyB7XFxuIFxcdFxcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcXHUwMDI2bHAtXFx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcXG4gXFx0XFx0c3RhdHMtXFx1MDAzZXJ4X2xlbmd0aF9lcnJvcnMgPVxcbkBAIC0xODg0LDYgKzE5MjgsMzMgQEAgYXhpZW5ldF9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKVxcbiBcXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFxcdTAwMjZscC1cXHUwMDNlaHdfc3RhdHNfc2VxY291bnQsIHN0YXJ0KSk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkXFxuK2F4aWVuZXRfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cylcXG4re1xcbitcXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuK1xcbitcXHRuZXRkZXZfc3RhdHNfdG9fc3RhdHM2NChzdGF0cywgXFx1MDAyNmRldi1cXHUwMDNlc3RhdHMpO1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihcXHUwMDI2bHAtXFx1MDAzZXJ4X3N0YXRfc3luYyk7XFxuK1xcdFxcdHN0YXRzLVxcdTAwM2VyeF9wYWNrZXRzID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNmxwLVxcdTAwM2VyeF9wYWNrZXRzKTtcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZXJ4X2J5dGVzID0gdTY0X3N0YXRzX3JlYWQoXFx1MDAyNmxwLVxcdTAwM2VyeF9ieXRlcyk7XFxuK1xcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcXHUwMDI2bHAtXFx1MDAzZXJ4X3N0YXRfc3luYywgc3RhcnQpKTtcXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXFx1MDAyNmxwLVxcdTAwM2V0eF9zdGF0X3N5bmMpO1xcbitcXHRcXHRzdGF0cy1cXHUwMDNldHhfcGFja2V0cyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZscC1cXHUwMDNldHhfcGFja2V0cyk7XFxuK1xcdFxcdHN0YXRzLVxcdTAwM2V0eF9ieXRlcyA9IHU2NF9zdGF0c19yZWFkKFxcdTAwMjZscC1cXHUwMDNldHhfYnl0ZXMpO1xcbitcXHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXFx1MDAyNmxwLVxcdTAwM2V0eF9zdGF0X3N5bmMsIHN0YXJ0KSk7XFxuK1xcbitcXHRpZiAoIShscC1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmIChscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZWdldF9zdGF0czY0KVxcbitcXHRcXHRscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZWdldF9zdGF0czY0KGxwLCBzdGF0cyk7XFxuK31cXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXhpZW5ldF9uZXRkZXZfb3BzID0ge1xcbiBcXHQubmRvX29wZW4gPSBheGllbmV0X29wZW4sXFxuIFxcdC5uZG9fc3RvcCA9IGF4aWVuZXRfc3RvcCxcXG5AQCAtMTkzOCwzMCArMjAwOSwxOCBAQCBzdGF0aWMgdm9pZCBheGllbmV0X2V0aHRvb2xzX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiAgKi9cXG4gc3RhdGljIGludCBheGllbmV0X2V0aHRvb2xzX2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4ge1xcbi1cXHRyZXR1cm4gc2l6ZW9mKHUzMikgKiBBWElFTkVUX1JFR1NfTjtcXG4rXFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcbitcXHRyZXR1cm4gc2l6ZW9mKHUzMikgKiBscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZXJlZ3NfbjtcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIGF4aWVuZXRfZXRodG9vbHNfZ2V0X3JlZ3MgLSBEdW1wIHRoZSBjb250ZW50cyBvZiBhbGwgcmVnaXN0ZXJzIHByZXNlbnRcXG4tICpcXHRcXHRcXHQgICAgICAgaW4gQXhpRXRoZXJuZXQgY29yZS5cXG4tICogQG5kZXY6XFx0UG9pbnRlciB0byBuZXRfZGV2aWNlIHN0cnVjdHVyZVxcbi0gKiBAcmVnczpcXHRQb2ludGVyIHRvIGV0aHRvb2xfcmVncyBzdHJ1Y3R1cmVcXG4tICogQHJldDpcXHRWb2lkIHBvaW50ZXIgdXNlZCB0byByZXR1cm4gdGhlIGNvbnRlbnRzIG9mIHRoZSByZWdpc3RlcnMuXFxuLSAqXFxuLSAqIFRoaXMgaW1wbGVtZW50cyBldGh0b29sIGNvbW1hbmQgZm9yIGdldHRpbmcgdGhlIEF4aSBFdGhlcm5ldCByZWdpc3RlciBkdW1wLlxcbi0gKiBJc3N1ZSBcXFwiZXRodG9vbCAtZCBldGhYXFxcIiB0byBleGVjdXRlIHRoaXMgZnVuY3Rpb24uXFxuKyAqIGF4aWVuZXRfMWdfZ2V0X3JlZ3MgLSBEdW1wIDFHIE1BQyByZWdpc3RlcnMgZm9yIGV0aHRvb2xcXG4rICogQGxwOlxcdFxcdFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlXFxuKyAqIEBkYXRhOlxcdEJ1ZmZlciBmb3IgcmVnaXN0ZXIgdmFsdWVzICh6ZXJvZWQgYW5kIHNpemVkIGJ5IHRoZSBjYWxsZXIpXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBheGllbmV0X2V0aHRvb2xzX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLCB2b2lkICpyZXQpXFxuK3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfZ2V0X3JlZ3Moc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLCB1MzIgKmRhdGEpXFxuIHtcXG4tXFx0dTMyICpkYXRhID0gKHUzMiAqKXJldDtcXG4tXFx0c2l6ZV90IGxlbiA9IHNpemVvZih1MzIpICogQVhJRU5FVF9SRUdTX047XFxuLVxcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbi1cXG4tXFx0cmVncy1cXHUwMDNldmVyc2lvbiA9IDA7XFxuLVxcdHJlZ3MtXFx1MDAzZWxlbiA9IGxlbjtcXG4tXFxuLVxcdG1lbXNldChkYXRhLCAwLCBsZW4pO1xcbiBcXHRkYXRhWzBdID0gYXhpZW5ldF9pb3IobHAsIFhBRV9SQUZfT0ZGU0VUKTtcXG4gXFx0ZGF0YVsxXSA9IGF4aWVuZXRfaW9yKGxwLCBYQUVfVFBGX09GRlNFVCk7XFxuIFxcdGRhdGFbMl0gPSBheGllbmV0X2lvcihscCwgWEFFX0lGR1BfT0ZGU0VUKTtcXG5AQCAtMjAwMiw2ICsyMDYxLDMxIEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfZXRodG9vbHNfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuIFxcdH1cXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGF4aWVuZXRfZXRodG9vbHNfZ2V0X3JlZ3MgLSBEdW1wIHRoZSBjb250ZW50cyBvZiBhbGwgcmVnaXN0ZXJzIHByZXNlbnRcXG4rICpcXHRcXHRcXHQgICAgICAgaW4gQXhpRXRoZXJuZXQgY29yZS5cXG4rICogQG5kZXY6XFx0UG9pbnRlciB0byBuZXRfZGV2aWNlIHN0cnVjdHVyZVxcbisgKiBAcmVnczpcXHRQb2ludGVyIHRvIGV0aHRvb2xfcmVncyBzdHJ1Y3R1cmVcXG4rICogQHJldDpcXHRWb2lkIHBvaW50ZXIgdXNlZCB0byByZXR1cm4gdGhlIGNvbnRlbnRzIG9mIHRoZSByZWdpc3RlcnMuXFxuKyAqXFxuKyAqIFRoaXMgaW1wbGVtZW50cyBldGh0b29sIGNvbW1hbmQgZm9yIGdldHRpbmcgdGhlIEF4aSBFdGhlcm5ldCByZWdpc3RlciBkdW1wLlxcbisgKiBJc3N1ZSBcXFwiZXRodG9vbCAtZCBldGhYXFxcIiB0byBleGVjdXRlIHRoaXMgZnVuY3Rpb24uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBheGllbmV0X2V0aHRvb2xzX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLCB2b2lkICpyZXQpXFxuK3tcXG4rXFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcdHUzMiAqZGF0YSA9ICh1MzIgKilyZXQ7XFxuK1xcdHNpemVfdCBsZW47XFxuK1xcbitcXHRsZW4gPSBzaXplb2YodTMyKSAqIGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNlcmVnc19uO1xcbitcXHRyZWdzLVxcdTAwM2V2ZXJzaW9uID0gMDtcXG4rXFx0cmVncy1cXHUwMDNlbGVuID0gbGVuO1xcbitcXG4rXFx0bWVtc2V0KGRhdGEsIDAsIGxlbik7XFxuK1xcdGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNlZ2V0X3JlZ3MobHAsIGRhdGEpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZFxcbiBheGllbmV0X2V0aHRvb2xzX2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuIFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyaW5nLFxcbkBAIC0yMzAzLDExICsyMzg3LDggQEAgc3RhdGljIGludCBheGllbmV0X2V0aHRvb2xzX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9ud2F5X3Jlc2V0KGxwLVxcdTAwM2VwaHlsaW5rKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgdTY0ICpkYXRhKVxcbitzdGF0aWMgdm9pZCBheGllbmV0XzFnX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwgdTY0ICpkYXRhKVxcbiB7XFxuLVxcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7XFxuIFxcdHVuc2lnbmVkIGludCBzdGFydDtcXG4gXFxuIFxcdGRvIHtcXG5AQCAtMjMyNCw2ICsyNDA1LDE3IEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfZXRodG9vbHNfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0fSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeShcXHUwMDI2bHAtXFx1MDAzZWh3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBheGllbmV0X2V0aHRvb2xzX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICB1NjQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFxuK1xcdGlmIChscC1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgbHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VnZXRfZXRodG9vbF9zdGF0cylcXG4rXFx0XFx0bHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VnZXRfZXRodG9vbF9zdGF0cyhscCwgZGF0YSk7XFxuK31cXG4rXFxuIHN0YXRpYyBjb25zdCBjaGFyIGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHtcXG4gXFx0XFxcIlJlY2VpdmVkIGJ5dGVzXFxcIixcXG4gXFx0XFxcIlRyYW5zbWl0dGVkIGJ5dGVzXFxcIixcXG5AQCAtMjMzNiwxMiArMjQyOCwyNiBAQCBzdGF0aWMgY29uc3QgY2hhciBheGllbmV0X2V0aHRvb2xfc3RhdHNfc3RyaW5nc1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7XFxuIFxcdFxcXCJVc2VyIERlZmluZWQgQ291bnRlciAyXFxcIixcXG4gfTtcXG4gXFxuK3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfZ2V0X3N0cmluZ3ModTggKmRhdGEpXFxuK3tcXG4rXFx0bWVtY3B5KGRhdGEsIGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzLFxcbitcXHQgICAgICAgc2l6ZW9mKGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYXhpZW5ldF8xZ19nZXRfc3NldF9jb3VudCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBBUlJBWV9TSVpFKGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSlcXG4ge1xcbitcXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXG4gXFx0c3dpdGNoIChzdHJpbmdzZXQpIHtcXG4gXFx0Y2FzZSBFVEhfU1NfU1RBVFM6XFxuLVxcdFxcdG1lbWNweShkYXRhLCBheGllbmV0X2V0aHRvb2xfc3RhdHNfc3RyaW5ncyxcXG4tXFx0XFx0ICAgICAgIHNpemVvZihheGllbmV0X2V0aHRvb2xfc3RhdHNfc3RyaW5ncykpO1xcbitcXHRcXHRpZiAobHAtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgWEFFX0ZFQVRVUkVfU1RBVFMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNlZ2V0X3N0cmluZ3MpXFxuK1xcdFxcdFxcdGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNlZ2V0X3N0cmluZ3MoZGF0YSk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIH1cXG5AQCAtMjM1MiwyNCArMjQ1OCwyMCBAQCBzdGF0aWMgaW50IGF4aWVuZXRfZXRodG9vbHNfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpXFxuIFxcbiBcXHRzd2l0Y2ggKHNzZXQpIHtcXG4gXFx0Y2FzZSBFVEhfU1NfU1RBVFM6XFxuLVxcdFxcdGlmIChscC1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUylcXG4tXFx0XFx0XFx0cmV0dXJuIEFSUkFZX1NJWkUoYXhpZW5ldF9ldGh0b29sX3N0YXRzX3N0cmluZ3MpO1xcbitcXHRcXHRpZiAobHAtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgWEFFX0ZFQVRVUkVfU1RBVFMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNlZ2V0X3NzZXRfY291bnQpXFxuK1xcdFxcdFxcdHJldHVybiBscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZWdldF9zc2V0X2NvdW50KCk7XFxuIFxcdFxcdGZhbGx0aHJvdWdoO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIHZvaWRcXG4tYXhpZW5ldF9ldGh0b29sc19nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cylcXG4rc3RhdGljIHZvaWQgYXhpZW5ldF8xZ19nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKVxcbiB7XFxuLVxcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7XFxuIFxcdHVuc2lnbmVkIGludCBzdGFydDtcXG4gXFxuLVxcdGlmICghKGxwLVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IFhBRV9GRUFUVVJFX1NUQVRTKSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4gXFx0ZG8ge1xcbiBcXHRcXHRzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4oXFx1MDAyNmxwLVxcdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XFxuIFxcdFxcdHBhdXNlX3N0YXRzLVxcdTAwM2V0eF9wYXVzZV9mcmFtZXMgPVxcbkBAIC0yMzgwLDE1ICsyNDgyLDIzIEBAIGF4aWVuZXRfZXRodG9vbHNfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkXFxuLWF4aWVuZXRfZXRodG9vbF9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cylcXG4rYXhpZW5ldF9ldGh0b29sc19nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cylcXG4ge1xcbiBcXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbi1cXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuIFxcbiBcXHRpZiAoIShscC1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdGlmIChscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZWdldF9wYXVzZV9zdGF0cylcXG4rXFx0XFx0bHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VnZXRfcGF1c2Vfc3RhdHMobHAsIHBhdXNlX3N0YXRzKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYXhpZW5ldF8xZ19nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IHN0YXJ0O1xcbitcXG4gXFx0ZG8ge1xcbiBcXHRcXHRzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4oXFx1MDAyNmxwLVxcdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XFxuIFxcdFxcdG1hY19zdGF0cy1cXHUwMDNlRnJhbWVzVHJhbnNtaXR0ZWRPSyA9XFxuQEAgLTI0MjUsMTUgKzI1MzUsMjQgQEAgYXhpZW5ldF9ldGh0b29sX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkXFxuLWF4aWVuZXRfZXRodG9vbF9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tXFx0XFx0XFx0XFx0ICAgc3RydWN0IGV0aHRvb2xfZXRoX2N0cmxfc3RhdHMgKmN0cmxfc3RhdHMpXFxuK2F4aWVuZXRfZXRodG9vbF9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cylcXG4ge1xcbiBcXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbi1cXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuIFxcbiBcXHRpZiAoIShscC1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdGlmIChscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZWdldF9ldGhfbWFjX3N0YXRzKVxcbitcXHRcXHRscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZWdldF9ldGhfbWFjX3N0YXRzKGxwLCBtYWNfc3RhdHMpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZFxcbitheGllbmV0XzFnX2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBzdGFydDtcXG4rXFxuIFxcdGRvIHtcXG4gXFx0XFx0c3RhcnQgPSByZWFkX3NlcWNvdW50X2JlZ2luKFxcdTAwMjZscC1cXHUwMDNlaHdfc3RhdHNfc2VxY291bnQpO1xcbiBcXHRcXHRjdHJsX3N0YXRzLVxcdTAwM2VNQUNDb250cm9sRnJhbWVzVHJhbnNtaXR0ZWQgPVxcbkBAIC0yNDQ1LDcgKzI1NjQsMjAgQEAgYXhpZW5ldF9ldGh0b29sX2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFxcdTAwMjZscC1cXHUwMDNlaHdfc3RhdHNfc2VxY291bnQsIHN0YXJ0KSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgYXhpZW5ldF9ybW9uX3Jhbmdlc1tdID0ge1xcbitzdGF0aWMgdm9pZFxcbitheGllbmV0X2V0aHRvb2xfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKVxcbit7XFxuK1xcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcbitcXHRpZiAoIShscC1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmIChscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZWdldF9ldGhfY3RybF9zdGF0cylcXG4rXFx0XFx0bHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VnZXRfZXRoX2N0cmxfc3RhdHMobHAsIGN0cmxfc3RhdHMpO1xcbit9XFxuK1xcbitjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgYXhpZW5ldF9ybW9uX3Jhbmdlc1tdID0ge1xcbiBcXHR7ICAgNjQsICAgIDY0IH0sXFxuIFxcdHsgICA2NSwgICAxMjcgfSxcXG4gXFx0eyAgMTI4LCAgIDI1NSB9LFxcbkBAIC0yNDU3LDE2ICsyNTg5LDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgYXhpZW5ldF9ybW9uX3Jhbmdlc1tdID0ge1xcbiB9O1xcbiBcXG4gc3RhdGljIHZvaWRcXG4tYXhpZW5ldF9ldGh0b29sX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxcbi1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlICoqcmFuZ2VzKVxcbitheGllbmV0XzFnX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxcbitcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSAqKnJhbmdlcylcXG4ge1xcbi1cXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuIFxcbi1cXHRpZiAoIShscC1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuIFxcdGRvIHtcXG4gXFx0XFx0c3RhcnQgPSByZWFkX3NlcWNvdW50X2JlZ2luKFxcdTAwMjZscC1cXHUwMDNlaHdfc3RhdHNfc2VxY291bnQpO1xcbiBcXHRcXHRybW9uX3N0YXRzLVxcdTAwM2V1bmRlcnNpemVfcGt0cyA9XFxuQEAgLTI1MTAsNiArMjYzOCwyMCBAQCBheGllbmV0X2V0aHRvb2xfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0KnJhbmdlcyA9IGF4aWVuZXRfcm1vbl9yYW5nZXM7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkXFxuK2F4aWVuZXRfZXRodG9vbF9nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSAqKnJhbmdlcylcXG4re1xcbitcXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXG4rXFx0aWYgKCEobHAtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgWEFFX0ZFQVRVUkVfU1RBVFMpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAobHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VnZXRfcm1vbl9zdGF0cylcXG4rXFx0XFx0bHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VnZXRfcm1vbl9zdGF0cyhscCwgcm1vbl9zdGF0cywgcmFuZ2VzKTtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBheGllbmV0X2V0aHRvb2xfb3BzID0ge1xcbiBcXHQuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfTUFYX0ZSQU1FUyB8XFxuIFxcdFxcdFxcdFxcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XFxuQEAgLTI1NTUsMTEgKzI2OTcsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGF4aWVuZXRfZXRodG9vbF9kbWFlbmdpbmVfb3BzID0ge1xcbiBcXHQuZ2V0X3Jtb25fc3RhdHMgPSBheGllbmV0X2V0aHRvb2xfZ2V0X3Jtb25fc3RhdHMsXFxuIH07XFxuIFxcbi1zdGF0aWMgc3RydWN0IGF4aWVuZXRfbG9jYWwgKnBjc190b19heGllbmV0X2xvY2FsKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxcbi17XFxuLVxcdHJldHVybiBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCwgcGNzKTtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgYXhpZW5ldF9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLFxcbiBcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBuZWdfbW9kZSxcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcXG5AQCAtMjYxOSw3ICsyNzU2LDkgQEAgc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqYXhpZW5ldF9tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4gXFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcbiBcXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHxcXG4tXFx0ICAgIGludGVyZmFjZSA9PSAgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKVxcbitcXHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSB8fFxcbitcXHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUiB8fFxcbitcXHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8yNUdCQVNFUilcXG4gXFx0XFx0cmV0dXJuIFxcdTAwMjZscC1cXHUwMDNlcGNzO1xcbiBcXG4gXFx0cmV0dXJuIE5VTEw7XFxuQEAgLTI2MzgsMTMgKzI3NzcsOSBAQCBzdGF0aWMgdm9pZCBheGllbmV0X21hY19saW5rX2Rvd24oc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXFxuIFxcdC8qIG5vdGhpbmcgbWVhbmluZ2Z1bCB0byBkbyAqL1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBheGllbmV0X21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbi1cXHRcXHRcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxcbi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcXG4tXFx0XFx0XFx0XFx0aW50IHNwZWVkLCBpbnQgZHVwbGV4LFxcbi1cXHRcXHRcXHRcXHRib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKVxcbitzdGF0aWMgdm9pZCBheGllbmV0XzFnX21hY19saW5rX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgc3BlZWQsXFxuK1xcdFxcdFxcdFxcdCAgIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpXFxuIHtcXG4tXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSB0b19uZXRfZGV2KGNvbmZpZy1cXHUwMDNlZGV2KTtcXG4gXFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcdHUzMiBlbW1jX3JlZywgZmNjX3JlZztcXG4gXFxuQEAgLTI2ODEsNiArMjgxNiwxOSBAQCBzdGF0aWMgdm9pZCBheGllbmV0X21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbiBcXHRheGllbmV0X2lvdyhscCwgWEFFX0ZDQ19PRkZTRVQsIGZjY19yZWcpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBheGllbmV0X21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcXG4rXFx0XFx0XFx0XFx0aW50IHNwZWVkLCBpbnQgZHVwbGV4LFxcbitcXHRcXHRcXHRcXHRib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gdG9fbmV0X2Rldihjb25maWctXFx1MDAzZWRldik7XFxuK1xcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXG4rXFx0aWYgKGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNlbWFjX2xpbmtfdXApXFxuK1xcdFxcdGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNlbWFjX2xpbmtfdXAobmRldiwgc3BlZWQsIHR4X3BhdXNlLCByeF9wYXVzZSk7XFxuK31cXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIGF4aWVuZXRfcGh5bGlua19vcHMgPSB7XFxuIFxcdC5tYWNfc2VsZWN0X3BjcyA9IGF4aWVuZXRfbWFjX3NlbGVjdF9wY3MsXFxuIFxcdC5tYWNfY29uZmlnID0gYXhpZW5ldF9tYWNfY29uZmlnLFxcbkBAIC0yNjk4LDcgKzI4NDYsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBheGllbmV0X3BoeWxpbmtfb3BzID0ge1xcbiBzdGF0aWMgdm9pZCBheGllbmV0X2RtYV9lcnJfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4gXFx0dTMyIGk7XFxuLVxcdHUzMiBheGllbmV0X3N0YXR1cztcXG4gXFx0c3RydWN0IGF4aWRtYV9iZCAqY3VyX3A7XFxuIFxcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ZG1hX2Vycl90YXNrKTtcXG5AQCAtMjcxMSw4ICsyODU4LDggQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9kbWFfZXJyX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRuYXBpX2Rpc2FibGUoXFx1MDAyNmxwLVxcdTAwM2VuYXBpX3R4KTtcXG4gXFx0bmFwaV9kaXNhYmxlKFxcdTAwMjZscC1cXHUwMDNlbmFwaV9yeCk7XFxuIFxcbi1cXHRheGllbmV0X3NldG9wdGlvbnMobmRldiwgbHAtXFx1MDAzZW9wdGlvbnMgXFx1MDAyNlxcbi1cXHRcXHRcXHQgICB+KFhBRV9PUFRJT05fVFhFTiB8IFhBRV9PUFRJT05fUlhFTikpO1xcbitcXHRscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZXNldG9wdGlvbnMobmRldiwgbHAtXFx1MDAzZW9wdGlvbnMgXFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgICAgfihYQUVfT1BUSU9OX1RYRU4gfCBYQUVfT1BUSU9OX1JYRU4pKTtcXG4gXFxuIFxcdGF4aWVuZXRfZG1hX3N0b3AobHApO1xcbiBcXHRuZXRkZXZfcmVzZXRfcXVldWUobmRldik7XFxuQEAgLTI3NTcsMjkgKzI5MDQsMTI2IEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfZG1hX2Vycl9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFxuIFxcdGF4aWVuZXRfZG1hX3N0YXJ0KGxwKTtcXG4gXFxuLVxcdGF4aWVuZXRfc3RhdHVzID0gYXhpZW5ldF9pb3IobHAsIFhBRV9SQ1cxX09GRlNFVCk7XFxuLVxcdGF4aWVuZXRfc3RhdHVzIFxcdTAwMjY9IH5YQUVfUkNXMV9SWF9NQVNLO1xcbi1cXHRheGllbmV0X2lvdyhscCwgWEFFX1JDVzFfT0ZGU0VULCBheGllbmV0X3N0YXR1cyk7XFxuLVxcbi1cXHRheGllbmV0X3N0YXR1cyA9IGF4aWVuZXRfaW9yKGxwLCBYQUVfSVBfT0ZGU0VUKTtcXG4tXFx0aWYgKGF4aWVuZXRfc3RhdHVzIFxcdTAwMjYgWEFFX0lOVF9SWFJKRUNUX01BU0spXFxuLVxcdFxcdGF4aWVuZXRfaW93KGxwLCBYQUVfSVNfT0ZGU0VULCBYQUVfSU5UX1JYUkpFQ1RfTUFTSyk7XFxuLVxcdGF4aWVuZXRfaW93KGxwLCBYQUVfSUVfT0ZGU0VULCBscC1cXHUwMDNlZXRoX2lycSBcXHUwMDNlIDAgP1xcbi1cXHRcXHQgICAgWEFFX0lOVF9SRUNWX0VSUk9SX01BU0sgOiAwKTtcXG4tXFx0YXhpZW5ldF9pb3cobHAsIFhBRV9GQ0NfT0ZGU0VULCBYQUVfRkNDX0ZDUlhfTUFTSyk7XFxuK1xcdC8qIFRoaXMgZXJyb3IgaGFuZGxlciBydW5zIG9ubHkgZm9yIHRoZSBsZWdhY3kgZW1iZWRkZWQtRE1BICgxRykgcGF0aCxcXG4rXFx0ICogd2hvc2UgbWFjX2luaXQoKSBjYW5ub3QgZmFpbCwgc28gaXRzIHJldHVybiB2YWx1ZSBpcyBub3QgY2hlY2tlZC5cXG4rXFx0ICovXFxuK1xcdGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNlbWFjX2luaXQobmRldik7XFxuIFxcbiBcXHQvKiBTeW5jIGRlZmF1bHQgb3B0aW9ucyB3aXRoIEhXIGJ1dCBsZWF2ZSByZWNlaXZlciBhbmRcXG4gXFx0ICogdHJhbnNtaXR0ZXIgZGlzYWJsZWQuXFxuIFxcdCAqL1xcbi1cXHRheGllbmV0X3NldG9wdGlvbnMobmRldiwgbHAtXFx1MDAzZW9wdGlvbnMgXFx1MDAyNlxcbi1cXHRcXHRcXHQgICB+KFhBRV9PUFRJT05fVFhFTiB8IFhBRV9PUFRJT05fUlhFTikpO1xcbitcXHRscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZXNldG9wdGlvbnMobmRldiwgbHAtXFx1MDAzZW9wdGlvbnMgXFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgICAgfihYQUVfT1BUSU9OX1RYRU4gfCBYQUVfT1BUSU9OX1JYRU4pKTtcXG4gXFx0YXhpZW5ldF9zZXRfbWFjX2FkZHJlc3MobmRldiwgTlVMTCk7XFxuIFxcdGF4aWVuZXRfc2V0X211bHRpY2FzdF9saXN0KG5kZXYpO1xcbiBcXHRuYXBpX2VuYWJsZShcXHUwMDI2bHAtXFx1MDAzZW5hcGlfcngpO1xcbiBcXHRuYXBpX2VuYWJsZShcXHUwMDI2bHAtXFx1MDAzZW5hcGlfdHgpO1xcbi1cXHRheGllbmV0X3NldG9wdGlvbnMobmRldiwgbHAtXFx1MDAzZW9wdGlvbnMpO1xcbitcXHRscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZXNldG9wdGlvbnMobmRldiwgbHAtXFx1MDAzZW9wdGlvbnMpO1xcbit9XFxuK1xcbisvKipcXG4rICogYXhpZW5ldF8xZ19waHlsaW5rX3NldF9jYXBzIC0gU2V0IDFHIHBoeWxpbmsgY2FwYWJpbGl0aWVzIGFuZCBpbnRlcmZhY2VzXFxuKyAqIEBscDpcXHRcXHRQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxcbisgKiBAY29uZmlnOlxcdFBvaW50ZXIgdG8gdGhlIHBoeWxpbmtfY29uZmlnIHN0cnVjdHVyZVxcbisgKi9cXG4rc3RhdGljIHZvaWQgYXhpZW5ldF8xZ19waHlsaW5rX3NldF9jYXBzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpXFxuK3tcXG4rXFx0Y29uZmlnLVxcdTAwM2VtYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMEZEIHwgTUFDXzEwMEZEIHwgTUFDXzEwMDBGRDtcXG4rXFx0X19zZXRfYml0KGxwLVxcdTAwM2VwaHlfbW9kZSwgY29uZmlnLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdGlmIChscC1cXHUwMDNlc3dpdGNoX3hfc2dtaWkpIHtcXG4rXFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgsXFxuK1xcdFxcdFxcdCAgY29uZmlnLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdFxcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfU0dNSUksXFxuK1xcdFxcdFxcdCAgY29uZmlnLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdH1cXG4rfVxcbitcXG4rLyoqXFxuKyAqIGF4aWVuZXRfMWdfY2xrX2luaXQgLSBHZXQgYW5kIGVuYWJsZSB0aGUgMUcgTUFDIGNsb2Nrc1xcbisgKiBAbHA6XFx0XFx0UG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIgb3RoZXJ3aXNlLlxcbisgKi9cXG4rc3RhdGljIGludCBheGllbmV0XzFnX2Nsa19pbml0KHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBscC1cXHUwMDNlZGV2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bHAtXFx1MDAzZWF4aV9jbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWxfZW5hYmxlZChkZXYsIFxcXCJzX2F4aV9saXRlX2Nsa1xcXCIpO1xcbitcXHRpZiAoIWxwLVxcdTAwM2VheGlfY2xrKSB7XFxuK1xcdFxcdC8qIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBpZiBuYW1lZCBBWEkgY2xvY2sgaXMgbm90XFxuK1xcdFxcdCAqIHByZXNlbnQsIHRyZWF0IHRoZSBmaXJzdCBjbG9jayBzcGVjaWZpZWQgYXMgdGhlIEFYSSBjbG9jay5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGxwLVxcdTAwM2VheGlfY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsX2VuYWJsZWQoZGV2LCBOVUxMKTtcXG4rXFx0fVxcbitcXHRpZiAoSVNfRVJSKGxwLVxcdTAwM2VheGlfY2xrKSlcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGxwLVxcdTAwM2VheGlfY2xrKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiY291bGQgbm90IGdldCBBWEkgY2xvY2tcXFxcblxcXCIpO1xcbitcXG4rXFx0bHAtXFx1MDAzZW1pc2NfY2xrc1swXS5pZCA9IFxcXCJheGlzX2Nsa1xcXCI7XFxuK1xcdGxwLVxcdTAwM2VtaXNjX2Nsa3NbMV0uaWQgPSBcXFwicmVmX2Nsa1xcXCI7XFxuK1xcdGxwLVxcdTAwM2VtaXNjX2Nsa3NbMl0uaWQgPSBcXFwibWd0X2Nsa1xcXCI7XFxuK1xcbitcXHRyZXQgPSBkZXZtX2Nsa19idWxrX2dldF9vcHRpb25hbF9lbmFibGUoZGV2LCBYQUVfTlVNX01JU0NfQ0xPQ0tTLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRscC1cXHUwMDNlbWlzY19jbGtzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcImNvdWxkIG5vdCBnZXQvZW5hYmxlIG1pc2MuIGNsb2Nrc1xcXFxuXFxcIik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGF4aWVuZXRfMWdfcHJvYmVfaW5pdCAtIDFHIE1BQy1zcGVjaWZpYyBwcm9iZS10aW1lIGluaXRpYWxpemF0aW9uXFxuKyAqIEBscDpcXHRcXHRQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxcbisgKi9cXG4rc3RhdGljIHZvaWQgYXhpZW5ldF8xZ19wcm9iZV9pbml0KHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcXG4re1xcbitcXHRpZiAoYXhpZW5ldF9pb3IobHAsIFhBRV9BQklMSVRZX09GRlNFVCkgXFx1MDAyNiBYQUVfQUJJTElUWV9TVEFUUylcXG4rXFx0XFx0bHAtXFx1MDAzZWZlYXR1cmVzIHw9IFhBRV9GRUFUVVJFX1NUQVRTO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGF4aWVuZXRfY29uZmlnIGF4aWVuZXRfMWdfY29uZmlnID0ge1xcbitcXHQubWRpbyA9IHRydWUsXFxuK1xcdC5tYWNfaXJxID0gdHJ1ZSxcXG4rXFx0LmxlZ2FjeV9kbWEgPSB0cnVlLFxcbitcXHQudWNfZmlsdGVyID0gdHJ1ZSxcXG4rXFx0Lm1jX2ZpbHRlciA9IHRydWUsXFxuK1xcdC52bGFuID0gdHJ1ZSxcXG4rXFx0Lmp1bWJvID0gdHJ1ZSxcXG4rXFx0LmRtYV90eF9jc3VtID0gdHJ1ZSxcXG4rXFx0LnJlZ3NfbiA9IEFYSUVORVRfUkVHU19OLFxcbitcXHQuY2xrX2luaXQgPSBheGllbmV0XzFnX2Nsa19pbml0LFxcbitcXHQuc2V0b3B0aW9ucyA9IGF4aWVuZXRfc2V0b3B0aW9ucyxcXG4rXFx0LnByb2JlX2luaXQgPSBheGllbmV0XzFnX3Byb2JlX2luaXQsXFxuK1xcdC5tYWNfaW5pdCA9IGF4aWVuZXRfMWdfbWFjX2luaXQsXFxuK1xcdC5tYWNfbGlua191cCA9IGF4aWVuZXRfMWdfbWFjX2xpbmtfdXAsXFxuK1xcdC5nZXRfcmVncyA9IGF4aWVuZXRfMWdfZ2V0X3JlZ3MsXFxuK1xcdC5waHlsaW5rX3NldF9jYXBzID0gYXhpZW5ldF8xZ19waHlsaW5rX3NldF9jYXBzLFxcbitcXHQucGNzX29wcyA9IFxcdTAwMjZheGllbmV0X3Bjc19vcHMsXFxuK1xcdC5zdGF0c191cGRhdGUgPSBheGllbmV0XzFnX3N0YXRzX3VwZGF0ZSxcXG4rXFx0LmdldF9zdGF0czY0ID0gYXhpZW5ldF8xZ19nZXRfc3RhdHM2NCxcXG4rXFx0LmdldF9ldGh0b29sX3N0YXRzID0gYXhpZW5ldF8xZ19nZXRfZXRodG9vbF9zdGF0cyxcXG4rXFx0LmdldF9zdHJpbmdzID0gYXhpZW5ldF8xZ19nZXRfc3RyaW5ncyxcXG4rXFx0LmdldF9zc2V0X2NvdW50ID0gYXhpZW5ldF8xZ19nZXRfc3NldF9jb3VudCxcXG4rXFx0LmdldF9wYXVzZV9zdGF0cyA9IGF4aWVuZXRfMWdfZ2V0X3BhdXNlX3N0YXRzLFxcbitcXHQuZ2V0X2V0aF9tYWNfc3RhdHMgPSBheGllbmV0XzFnX2dldF9ldGhfbWFjX3N0YXRzLFxcbitcXHQuZ2V0X2V0aF9jdHJsX3N0YXRzID0gYXhpZW5ldF8xZ19nZXRfZXRoX2N0cmxfc3RhdHMsXFxuK1xcdC5nZXRfcm1vbl9zdGF0cyA9IGF4aWVuZXRfMWdfZ2V0X3Jtb25fc3RhdHMsXFxuK307XFxuK1xcbisvKiBNYXRjaCB0YWJsZSBmb3Igb2ZfcGxhdGZvcm0gYmluZGluZyAqL1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBheGllbmV0X29mX21hdGNoW10gPSB7XFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwieGxueCxheGktZXRoZXJuZXQtMS4wMC5hXFxcIiwgLmRhdGEgPSBcXHUwMDI2YXhpZW5ldF8xZ19jb25maWcgfSxcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJ4bG54LGF4aS1ldGhlcm5ldC0xLjAxLmFcXFwiLCAuZGF0YSA9IFxcdTAwMjZheGllbmV0XzFnX2NvbmZpZyB9LFxcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInhsbngsYXhpLWV0aGVybmV0LTIuMDEuYVxcXCIsIC5kYXRhID0gXFx1MDAyNmF4aWVuZXRfMWdfY29uZmlnIH0sXFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwieGxueCx4eHYtZXRoZXJuZXQtMS4wXFxcIiwgLmRhdGEgPSBcXHUwMDI2YXhpZW5ldF8xMGcyNWdfY29uZmlnIH0sXFxuK1xcdHt9LFxcbit9O1xcbitcXG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXhpZW5ldF9vZl9tYXRjaCk7XFxuK1xcbiAvKipcXG4gICogYXhpZW5ldF9wcm9iZSAtIEF4aSBFdGhlcm5ldCBwcm9iZSBmdW5jdGlvbi5cXG4gICogQHBkZXY6XFx0UG9pbnRlciB0byBwbGF0Zm9ybSBkZXZpY2Ugc3RydWN0dXJlLlxcbkBAIC0yODMwLDI3ICszMDc0LDEzIEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRzZXFjb3VudF9tdXRleF9pbml0KFxcdTAwMjZscC1cXHUwMDNlaHdfc3RhdHNfc2VxY291bnQsIFxcdTAwMjZscC1cXHUwMDNlc3RhdHNfbG9jayk7XFxuIFxcdElOSVRfREVGRVJSQUJMRV9XT1JLKFxcdTAwMjZscC1cXHUwMDNlc3RhdHNfd29yaywgYXhpZW5ldF9yZWZyZXNoX3N0YXRzKTtcXG4gXFxuLVxcdGxwLVxcdTAwM2VheGlfY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsX2VuYWJsZWQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJzX2F4aV9saXRlX2Nsa1xcXCIpO1xcbi1cXHRpZiAoIWxwLVxcdTAwM2VheGlfY2xrKSB7XFxuLVxcdFxcdC8qIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBpZiBuYW1lZCBBWEkgY2xvY2sgaXMgbm90IHByZXNlbnQsXFxuLVxcdFxcdCAqIHRyZWF0IHRoZSBmaXJzdCBjbG9jayBzcGVjaWZpZWQgYXMgdGhlIEFYSSBjbG9jay5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGxwLVxcdTAwM2VheGlfY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsX2VuYWJsZWQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgTlVMTCk7XFxuLVxcdH1cXG4tXFx0aWYgKElTX0VSUihscC1cXHUwMDNlYXhpX2NsaykpXFxuLVxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFBUUl9FUlIobHAtXFx1MDAzZWF4aV9jbGspLFxcbi1cXHRcXHRcXHRcXHQgICAgIFxcXCJjb3VsZCBub3QgZ2V0IEFYSSBjbG9ja1xcXFxuXFxcIik7XFxuK1xcdGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZyA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKCFscC1cXHUwMDNlYXhpZW5ldF9jb25maWcpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4tXFx0bHAtXFx1MDAzZW1pc2NfY2xrc1swXS5pZCA9IFxcXCJheGlzX2Nsa1xcXCI7XFxuLVxcdGxwLVxcdTAwM2VtaXNjX2Nsa3NbMV0uaWQgPSBcXFwicmVmX2Nsa1xcXCI7XFxuLVxcdGxwLVxcdTAwM2VtaXNjX2Nsa3NbMl0uaWQgPSBcXFwibWd0X2Nsa1xcXCI7XFxuLVxcbi1cXHRyZXQgPSBkZXZtX2Nsa19idWxrX2dldF9vcHRpb25hbF9lbmFibGUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgWEFFX05VTV9NSVNDX0NMT0NLUyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0bHAtXFx1MDAzZW1pc2NfY2xrcyk7XFxuK1xcdHJldCA9IGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNlY2xrX2luaXQobHApO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCByZXQsXFxuLVxcdFxcdFxcdFxcdCAgICAgXFxcImNvdWxkIG5vdCBnZXQvZW5hYmxlIG1pc2MuIGNsb2Nrc1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHQvKiBNYXAgZGV2aWNlIHJlZ2lzdGVycyAqL1xcbiBcXHRscC1cXHUwMDNlcmVncyA9IGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDAsIFxcdTAwMjZldGhyZXMpO1xcbkBAIC0yODYxLDkgKzMwOTEsNiBAQCBzdGF0aWMgaW50IGF4aWVuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0LyogU2V0dXAgY2hlY2tzdW0gb2ZmbG9hZCwgYnV0IGRlZmF1bHQgdG8gb2ZmIGlmIG5vdCBzcGVjaWZpZWQgKi9cXG4gXFx0bHAtXFx1MDAzZWZlYXR1cmVzID0gMDtcXG4gXFxuLVxcdGlmIChheGllbmV0X2lvcihscCwgWEFFX0FCSUxJVFlfT0ZGU0VUKSBcXHUwMDI2IFhBRV9BQklMSVRZX1NUQVRTKVxcbi1cXHRcXHRscC1cXHUwMDNlZmVhdHVyZXMgfD0gWEFFX0ZFQVRVUkVfU1RBVFM7XFxuLVxcbiBcXHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSwgXFxcInhsbngsdHhjc3VtXFxcIiwgXFx1MDAyNnZhbHVlKTtcXG4gXFx0aWYgKCFyZXQpIHtcXG4gXFx0XFx0c3dpdGNoICh2YWx1ZSkge1xcbkBAIC0yOTQwLDcgKzMxNjcsMTcgQEAgc3RhdGljIGludCBheGllbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAobHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2Vwcm9iZV9pbml0KVxcbitcXHRcXHRscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZXByb2JlX2luaXQobHApO1xcbitcXG4gXFx0aWYgKCFvZl9wcm9wZXJ0eV9wcmVzZW50KHBkZXYtXFx1MDAzZWRldi5vZl9ub2RlLCBcXFwiZG1hc1xcXCIpKSB7XFxuK1xcdFxcdC8qIE5vbi1kbWFlbmdpbmUgKGxlZ2FjeSBETUEpIG1vZGUgaXMgb25seSBzdXBwb3J0ZWQgYnkgc29tZSBNQUNzICovXFxuK1xcdFxcdGlmICghbHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VsZWdhY3lfZG1hKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFxcIkxlZ2FjeSBETUEgbW9kZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgTUFDLCB1c2UgZG1hZW5naW5lXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdC8qIEZpbmQgdGhlIERNQSBub2RlLCBtYXAgdGhlIERNQSByZWdpc3RlcnMsIGFuZCBkZWNvZGUgdGhlIERNQSBJUlFzICovXFxuIFxcdFxcdG5wID0gb2ZfcGFyc2VfcGhhbmRsZShwZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSwgXFxcImF4aXN0cmVhbS1jb25uZWN0ZWRcXFwiLCAwKTtcXG4gXFxuQEAgLTMwMjAsNyArMzI1NywxMCBAQCBzdGF0aWMgaW50IGF4aWVuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0XFx0c3RydWN0IHhpbGlueF92ZG1hX2NvbmZpZyBjZmc7XFxuIFxcdFxcdHN0cnVjdCBkbWFfY2hhbiAqdHhfY2hhbjtcXG4gXFxuLVxcdFxcdGxwLVxcdTAwM2VldGhfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbChwZGV2LCAwKTtcXG4rXFx0XFx0aWYgKGxwLVxcdTAwM2VheGllbmV0X2NvbmZpZy1cXHUwMDNlbWFjX2lycSlcXG4rXFx0XFx0XFx0bHAtXFx1MDAzZWV0aF9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX29wdGlvbmFsKHBkZXYsIDApO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGxwLVxcdTAwM2VldGhfaXJxID0gLUVOWElPO1xcbiBcXHRcXHRpZiAobHAtXFx1MDAzZWV0aF9pcnEgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGxwLVxcdTAwM2VldGhfaXJxICE9IC1FTlhJTykge1xcbiBcXHRcXHRcXHRyZXR1cm4gbHAtXFx1MDAzZWV0aF9pcnE7XFxuIFxcdFxcdH1cXG5AQCAtMzA3MywxMCArMzMxMywxMiBAQCBzdGF0aWMgaW50IGF4aWVuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0bHAtXFx1MDAzZXR4X2RtYV9jciA9IGF4aWVuZXRfY2FsY19jcihscCwgWEFYSURNQV9ERlRfVFhfVEhSRVNIT0xELFxcbiBcXHRcXHRcXHRcXHRcXHRYQVhJRE1BX0RGVF9UWF9VU0VDKTtcXG4gXFxuLVxcdHJldCA9IGF4aWVuZXRfbWRpb19zZXR1cChscCk7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdGRldl93YXJuKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuLVxcdFxcdFxcdCBcXFwiZXJyb3IgcmVnaXN0ZXJpbmcgTURJTyBidXM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRpZiAobHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VtZGlvKSB7XFxuK1xcdFxcdHJldCA9IGF4aWVuZXRfbWRpb19zZXR1cChscCk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiZXJyb3IgcmVnaXN0ZXJpbmcgTURJTyBidXM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAobHAtXFx1MDAzZXBoeV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSB8fFxcbiBcXHQgICAgbHAtXFx1MDAzZXBoeV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgpIHtcXG5AQCAtMzEwMCwyMyArMzM0MiwyMSBAQCBzdGF0aWMgaW50IGF4aWVuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0XFx0XFx0Z290byBjbGVhbnVwX21kaW87XFxuIFxcdFxcdH1cXG4gXFx0XFx0b2Zfbm9kZV9wdXQobnApO1xcbi1cXHRcXHRscC1cXHUwMDNlcGNzLm9wcyA9IFxcdTAwMjZheGllbmV0X3Bjc19vcHM7XFxuK1xcdFxcdGxwLVxcdTAwM2VwY3Mub3BzID0gbHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VwY3Nfb3BzO1xcbitcXHRcXHRscC1cXHUwMDNlcGNzLnBvbGwgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobHAtXFx1MDAzZWF4aWVuZXRfY29uZmlnLVxcdTAwM2VpbnRlcm5hbF9wY3MpIHtcXG4rXFx0XFx0bHAtXFx1MDAzZXBjcy5vcHMgPSBscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZXBjc19vcHM7XFxuIFxcdFxcdGxwLVxcdTAwM2VwY3MucG9sbCA9IHRydWU7XFxuIFxcdH1cXG4gXFxuIFxcdGxwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5kZXYgPSBcXHUwMDI2bmRldi1cXHUwMDNlZGV2O1xcbiBcXHRscC1cXHUwMDNlcGh5bGlua19jb25maWcudHlwZSA9IFBIWUxJTktfTkVUREVWO1xcbiBcXHRscC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX21hbmFnZWRfcG0gPSB0cnVlO1xcbi1cXHRscC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyA9IE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRSB8XFxuLVxcdFxcdE1BQ18xMEZEIHwgTUFDXzEwMEZEIHwgTUFDXzEwMDBGRDtcXG4rXFx0bHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgPSBNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0U7XFxuIFxcbi1cXHRfX3NldF9iaXQobHAtXFx1MDAzZXBoeV9tb2RlLCBscC1cXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbi1cXHRpZiAobHAtXFx1MDAzZXN3aXRjaF94X3NnbWlpKSB7XFxuLVxcdFxcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYLFxcbi1cXHRcXHRcXHQgIGxwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuLVxcdFxcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfU0dNSUksXFxuLVxcdFxcdFxcdCAgbHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcXG4tXFx0fVxcbitcXHRscC1cXHUwMDNlYXhpZW5ldF9jb25maWctXFx1MDAzZXBoeWxpbmtfc2V0X2NhcHMobHAsIFxcdTAwMjZscC1cXHUwMDNlcGh5bGlua19jb25maWcpO1xcbiBcXG4gXFx0bHAtXFx1MDAzZXBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcXHUwMDI2bHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLCBwZGV2LVxcdTAwM2VkZXYuZndub2RlLFxcbiBcXHRcXHRcXHRcXHQgICAgIGxwLVxcdTAwM2VwaHlfbW9kZSxcXG5AQCAtMzE1OSw3ICszMzk5LDggQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0aWYgKGxwLVxcdTAwM2VwY3NfcGh5KVxcbiBcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZscC1cXHUwMDNlcGNzX3BoeS1cXHUwMDNlZGV2KTtcXG4gXFxuLVxcdGF4aWVuZXRfbWRpb190ZWFyZG93bihscCk7XFxuK1xcdGlmIChscC1cXHUwMDNlbWlpX2J1cylcXG4rXFx0XFx0YXhpZW5ldF9tZGlvX3RlYXJkb3duKGxwKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgYXhpZW5ldF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfeHh2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfeHh2LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmRiYzljMjFiMTA0YWZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X3h4di5jXFxuQEAgLTAsMCArMSw1OTUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBYWFYgKDEwRy8yNUcpIHN1cHBvcnRcXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy5cXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aHRvb2wuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvcG9sbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHlsaW5rLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJ4aWxpbnhfYXhpZW5ldC5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGlsaW54X2F4aWVuZXRfeHh2LmhcXFwiXFxuK1xcbisvKiByZWFkbF9wb2xsX3RpbWVvdXQoKSBzbGVlcCBpbnRlcnZhbCAodXMpIGFuZCAxIG1zIHRvdGFsIHRpbWVvdXQgZm9yIEdUXFxuKyAqIHJlc2V0LWRvbmUgYW5kIFBDUyBibG9jay1sb2NrIHBvbGxzLiBWYWx1ZXMgZnJvbSBaeW5xTVAvVmVyc2FsIGJyaW5nLXVwO1xcbisgKiBQRzIxMCBkb2VzIG5vdCBzcGVjaWZ5IHRoZXNlIGJvdW5kcy5cXG4rICovXFxuKyNkZWZpbmUgWFhWX0xJTktfUE9MTF9JTlRFUlZBTF9VU1xcdDEwXFxuK1xcbisvKiBOdW1iZXIgb2YgWFhWICgxMEcvMjVHKSBNQUMgcmVnaXN0ZXJzIGV4cG9zZWQgdmlhIGV0aHRvb2wgLWQuXFxuKyAqIENvdmVycyBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMgcmVnaXN0ZXJzIHBlciBYaWxpbnggUEcyMTAuXFxuKyAqL1xcbitzdGF0aWMgY29uc3QgdTMyIGF4aWVuZXRfeHh2X3JlZ19kdW1wX29mZnNldHNbWFhWX1JFR1NfTl0gPSB7XFxuK1xcdFhYVl9HVF9SRVNFVF9PRkZTRVQsXFxuK1xcdFhYVl9SRVNFVF9PRkZTRVQsXFxuK1xcdFhYVl9NT0RFX09GRlNFVCxcXG4rXFx0WFhWX1RDX09GRlNFVCxcXG4rXFx0WFhWX1JDVzFfT0ZGU0VULFxcbitcXHRYWFZfSlVNX09GRlNFVCxcXG4rXFx0WFhWX1ZMX0xFTkdUSF9PRkZTRVQsXFxuK1xcdFhYVl9USUNLUkVHX09GRlNFVCxcXG4rXFx0WFhWX0NPTkZJR19SRVZJU0lPTixcXG4rXFx0WFhWX0NPTkZJR18xNTg4X09GRlNFVCxcXG4rXFx0WFhWX0NPTkZJR19UWF9GTE9XX0NUUkwxX09GRlNFVCxcXG4rXFx0WFhWX0NPTkZJR19SWF9GTE9XX0NUUkwxX09GRlNFVCxcXG4rXFx0WFhWX0NPTkZJR19SWF9GTE9XX0NUUkwyX09GRlNFVCxcXG4rXFx0WFhWX0NPTkZJR19SU0ZFQ19PRkZTRVQsXFxuK1xcdFhYVl9DT05GSUdfRkVDX09GRlNFVCxcXG4rXFx0WFhWX0FOX0NUTDFfT0ZGU0VULFxcbitcXHRYWFZfQU5fQ1RMMl9PRkZTRVQsXFxuK1xcdFhYVl9BTl9BQklMSVRZX09GRlNFVCxcXG4rXFx0WFhWX0xUX0NUTDFfT0ZGU0VULFxcbitcXHRYWFZfU1dJVENIX0NPUkVfU1BFRURfT0ZGU0VULFxcbitcXHRYWFZfQ09ORklHXzE1ODhfMzJCSVRfT0ZGU0VULFxcbitcXHRYWFZfVFhfQ09ORklHXzE1ODhfT0ZGU0VULFxcbitcXHRYWFZfUlhfQ09ORklHXzE1ODhfT0ZGU0VULFxcbitcXHRYWFZfR1RXSVpfQ1RSTF9PRkZTRVQsXFxuK1xcdFhYVl9TVEFUUlhfU1RBVFVTMF9PRkZTRVQsXFxuK1xcdFhYVl9SWF9TVEFUVVNfUkVHMSxcXG4rXFx0WFhWX1NUQVRSWF9TVEFUVVMyX09GRlNFVCxcXG4rXFx0WFhWX1NUQVRSWF9CTEtMQ0tfT0ZGU0VULFxcbitcXHRYWFZfU1RBVF9SWF9SU0ZFQ19TVEFUVVNfT0ZGU0VULFxcbitcXHRYWFZfU1RBVF9SWF9GRUNfU1RBVFVTX09GRlNFVCxcXG4rXFx0WFhWX1NUQVRfVFhfUlNGRUNfU1RBVFVTX09GRlNFVCxcXG4rXFx0WFhWX1NUQVRfVFhfRkxPV19DVFJMMV9PRkZTRVQsXFxuK1xcdFhYVl9TVEFUX1JYX0ZMT1dfQ1RSTDFfT0ZGU0VULFxcbitcXHRYWFZfU1RBVF9BTl9TVFNfT0ZGU0VULFxcbitcXHRYWFZfU1RBVF9BTl9MUF9TVEFUVVNfT0ZGU0VULFxcbitcXHRYWFZfU1RBVF9BTl9MSU5LX0NUTF9PRkZTRVQsXFxuK1xcdFhYVl9TVEFUX0xUX1NUQVRVUzFfT0ZGU0VULFxcbitcXHRYWFZfU1RBVF9MVF9TVEFUVVMyX09GRlNFVCxcXG4rXFx0WFhWX1NUQVRfTFRfU1RBVFVTM19PRkZTRVQsXFxuK1xcdFhYVl9TVEFUX0xUX1NUQVRVUzRfT0ZGU0VULFxcbitcXHRYWFZfU1RBVF9MVF9DT0VGRjBfT0ZGU0VULFxcbitcXHRYWFZfU1RBVF9SWF9WQUxJRF9DVFJMX0NPREVfT0ZGU0VULFxcbitcXHRYWFZfU1RBVF9DT1JFX1NQRUVEX09GRlNFVCxcXG4rXFx0WFhWX1NUQVRfVFNOX09GRlNFVCxcXG4rXFx0WFhWX1NUQVRfR1RXSVpfT0ZGU0VULFxcbitcXHRYWFZfU1RBVF9BTl9MSU5LX0NUTDJfT0ZGU0VULFxcbit9O1xcbitcXG4rLyogT3B0aW9uIHRhYmxlIGZvciBzZXR0aW5nIHVwIFhYViBFdGhlcm5ldCBoYXJkd2FyZSBvcHRpb25zICovXFxuK3N0YXRpYyBzdHJ1Y3QgYXhpZW5ldF9vcHRpb24geHh2ZW5ldF9vcHRpb25zW10gPSB7XFxuK1xcdHsgLyogVHVybiBvbiBGQ1Mgc3RyaXBwaW5nIG9uIHJlY2VpdmUgcGFja2V0cyAqL1xcbitcXHRcXHQub3B0ID0gWEFFX09QVElPTl9GQ1NfU1RSSVAsXFxuK1xcdFxcdC5yZWcgPSBYWFZfUkNXMV9PRkZTRVQsXFxuK1xcdFxcdC5tX29yID0gWFhWX1JDVzFfRkNTX01BU0ssXFxuK1xcdH0sIHsgLyogVHVybiBvbiBGQ1MgaW5zZXJ0aW9uIG9uIHRyYW5zbWl0IHBhY2tldHMgKi9cXG4rXFx0XFx0Lm9wdCA9IFhBRV9PUFRJT05fRkNTX0lOU0VSVCxcXG4rXFx0XFx0LnJlZyA9IFhYVl9UQ19PRkZTRVQsXFxuK1xcdFxcdC5tX29yID0gWFhWX1RDX0ZDU19NQVNLLFxcbitcXHR9LCB7IC8qIEVuYWJsZSB0cmFuc21pdHRlciAqL1xcbitcXHRcXHQub3B0ID0gWEFFX09QVElPTl9UWEVOLFxcbitcXHRcXHQucmVnID0gWFhWX1RDX09GRlNFVCxcXG4rXFx0XFx0Lm1fb3IgPSBYWFZfVENfVFhfTUFTSyxcXG4rXFx0fSwgeyAvKiBFbmFibGUgcmVjZWl2ZXIgKi9cXG4rXFx0XFx0Lm9wdCA9IFhBRV9PUFRJT05fUlhFTixcXG4rXFx0XFx0LnJlZyA9IFhYVl9SQ1cxX09GRlNFVCxcXG4rXFx0XFx0Lm1fb3IgPSBYWFZfUkNXMV9SWF9NQVNLLFxcbitcXHR9LFxcbitcXHR7fVxcbit9O1xcbitcXG4rLyogUEcyMTAgc3RhdGlzdGljcy1ibG9jayBvZmZzZXRzIGluZGV4ZWQgYnkgZW51bSB4eHZfc3RhdC4gRWFjaCBlbnRyeSBpc1xcbisgKiB0aGUgMzItYml0IExTQiByZWdpc3RlciBhZGRyZXNzOyB0aGUgY29ycmVzcG9uZGluZyBNU0IgaXMgYXQgKzQuXFxuKyAqL1xcbitzdGF0aWMgY29uc3QgdTMyIGF4aWVuZXRfeHh2X3N0YXRfb2Zmc2V0c1tYWFZfU1RBVF9DT1VOVF0gPSB7XFxuK1xcdFtYWFZfU1RBVF9SWF9UT1RBTF9QQUNLRVRTXVxcdCA9IFhYVl9TVEFUX1JYX1RPVEFMX1BBQ0tFVFNfT0ZGU0VULFxcbitcXHRbWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9QQUNLRVRTXSA9IFhYVl9TVEFUX1JYX1RPVEFMX0dPT0RfUEFDS0VUU19PRkZTRVQsXFxuK1xcdFtYWFZfU1RBVF9SWF9UT1RBTF9CWVRFU11cXHQgPSBYWFZfU1RBVF9SWF9UT1RBTF9CWVRFU19PRkZTRVQsXFxuK1xcdFtYWFZfU1RBVF9SWF9UT1RBTF9HT09EX0JZVEVTXVxcdCA9IFhYVl9TVEFUX1JYX1RPVEFMX0dPT0RfQllURVNfT0ZGU0VULFxcbitcXHRbWFhWX1NUQVRfUlhfQkFEX0ZDU11cXHRcXHQgPSBYWFZfU1RBVF9SWF9CQURfRkNTX09GRlNFVCxcXG4rXFx0W1hYVl9TVEFUX1JYX0lOUkFOR0VFUlJdXFx0ID0gWFhWX1NUQVRfUlhfSU5SQU5HRUVSUl9PRkZTRVQsXFxuK1xcdFtYWFZfU1RBVF9SWF9NVUxUSUNBU1RdXFx0XFx0ID0gWFhWX1NUQVRfUlhfTVVMVElDQVNUX09GRlNFVCxcXG4rXFx0W1hYVl9TVEFUX1JYX0JST0FEQ0FTVF1cXHRcXHQgPSBYWFZfU1RBVF9SWF9CUk9BRENBU1RfT0ZGU0VULFxcbitcXHRbWFhWX1NUQVRfUlhfVU5ERVJTSVpFXVxcdFxcdCA9IFhYVl9TVEFUX1JYX1VOREVSU0laRV9PRkZTRVQsXFxuK1xcdFtYWFZfU1RBVF9SWF9GUkFHTUVOVF1cXHRcXHQgPSBYWFZfU1RBVF9SWF9GUkFHTUVOVF9PRkZTRVQsXFxuK1xcdFtYWFZfU1RBVF9SWF9KQUJCRVJdXFx0XFx0ID0gWFhWX1NUQVRfUlhfSkFCQkVSX09GRlNFVCxcXG4rXFx0W1hYVl9TVEFUX1JYX09WRVJTSVpFXVxcdFxcdCA9IFhYVl9TVEFUX1JYX09WRVJTSVpFX09GRlNFVCxcXG4rXFx0W1hYVl9TVEFUX1JYX1BBVVNFXVxcdFxcdCA9IFhYVl9TVEFUX1JYX1BBVVNFX09GRlNFVCxcXG4rXFx0W1hYVl9TVEFUX1RYX1RPVEFMX1BBQ0tFVFNdXFx0ID0gWFhWX1NUQVRfVFhfVE9UQUxfUEFDS0VUU19PRkZTRVQsXFxuK1xcdFtYWFZfU1RBVF9UWF9UT1RBTF9HT09EX1BBQ0tFVFNdID0gWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9QQUNLRVRTX09GRlNFVCxcXG4rXFx0W1hYVl9TVEFUX1RYX1RPVEFMX0JZVEVTXVxcdCA9IFhYVl9TVEFUX1RYX1RPVEFMX0JZVEVTX09GRlNFVCxcXG4rXFx0W1hYVl9TVEFUX1RYX1RPVEFMX0dPT0RfQllURVNdXFx0ID0gWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9CWVRFU19PRkZTRVQsXFxuK1xcdFtYWFZfU1RBVF9UWF9CQURfRkNTXVxcdFxcdCA9IFhYVl9TVEFUX1RYX0JBRF9GQ1NfT0ZGU0VULFxcbitcXHRbWFhWX1NUQVRfVFhfRlJBTUVfRVJST1JdXFx0ID0gWFhWX1NUQVRfVFhfRlJBTUVfRVJST1JfT0ZGU0VULFxcbitcXHRbWFhWX1NUQVRfVFhfTVVMVElDQVNUXVxcdFxcdCA9IFhYVl9TVEFUX1RYX01VTFRJQ0FTVF9PRkZTRVQsXFxuK1xcdFtYWFZfU1RBVF9UWF9CUk9BRENBU1RdXFx0XFx0ID0gWFhWX1NUQVRfVFhfQlJPQURDQVNUX09GRlNFVCxcXG4rXFx0W1hYVl9TVEFUX1RYX1BBVVNFXVxcdFxcdCA9IFhYVl9TVEFUX1RYX1BBVVNFX09GRlNFVCxcXG4rfTtcXG4rXFxuKy8qIFhYViAoUEcyMTApIGNvdW50ZXJzIGV4cG9zZWQgdmlhIGV0aHRvb2wgLVMuIE9ubHkgY291bnRlcnMgdGhhdCBoYXZlIG5vXFxuKyAqIHN0YW5kYXJkIHVBUEkgYXJlIGxpc3RlZCBoZXJlOyB0aGUgdG90YWxzIGluY2x1ZGUgZXJyb3JlZCBmcmFtZXMsIHNvIHRoZXlcXG4rICogYXJlIGRpc3RpbmN0IGZyb20gdGhlIGdvb2QtZnJhbWUgY291bnRzIGluIHJ0bmxfbGlua19zdGF0czY0IGFuZCB0aGVcXG4rICogSUVFRSBNQUMgc3RhdGlzdGljcy4gRXZlcnkgb3RoZXIgWFhWIGNvdW50ZXIgaXMgcmVwb3J0ZWQgdGhyb3VnaCB0aGVcXG4rICogZGVkaWNhdGVkIHN0YXRzNjQsIHBhdXNlLCBNQUMgYW5kIFJNT04gY2FsbGJhY2tzIGluc3RlYWQuXFxuKyAqL1xcbitzdGF0aWMgY29uc3QgZW51bSB4eHZfc3RhdCBheGllbmV0X3h4dl9wcml2X3N0YXRzW10gPSB7XFxuK1xcdFhYVl9TVEFUX1JYX1RPVEFMX1BBQ0tFVFMsXFxuK1xcdFhYVl9TVEFUX1JYX1RPVEFMX0JZVEVTLFxcbitcXHRYWFZfU1RBVF9UWF9UT1RBTF9QQUNLRVRTLFxcbitcXHRYWFZfU1RBVF9UWF9UT1RBTF9CWVRFUyxcXG4rXFx0WFhWX1NUQVRfVFhfQkFEX0ZDUyxcXG4rXFx0WFhWX1NUQVRfVFhfRlJBTUVfRVJST1IsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciBheGllbmV0X3h4dl9ldGh0b29sX3N0YXRzX3N0cmluZ3NbXVtFVEhfR1NUUklOR19MRU5dID0ge1xcbitcXHRcXFwiUlggVG90YWwgUGFja2V0c1xcXCIsXFxuK1xcdFxcXCJSWCBUb3RhbCBCeXRlc1xcXCIsXFxuK1xcdFxcXCJUWCBUb3RhbCBQYWNrZXRzXFxcIixcXG4rXFx0XFxcIlRYIFRvdGFsIEJ5dGVzXFxcIixcXG4rXFx0XFxcIlRYIEJhZCBGQ1NcXFwiLFxcbitcXHRcXFwiVFggRnJhbWUgRXJyb3JcXFwiLFxcbit9O1xcbitcXG4rc3RhdGljIHU2NCBheGllbmV0X3h4dl9yZWFkX2NvdW50ZXIoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLCBlbnVtIHh4dl9zdGF0IHN0YXQpXFxuK3tcXG4rXFx0dTMyIG9mZiA9IGF4aWVuZXRfeHh2X3N0YXRfb2Zmc2V0c1tzdGF0XTtcXG4rXFx0dTMyIGxzYiwgbXNiO1xcbitcXG4rXFx0bHNiID0gYXhpZW5ldF9pb3IobHAsIG9mZik7XFxuK1xcdG1zYiA9IGF4aWVuZXRfaW9yKGxwLCBvZmYgKyBYWFZfU1RBVF9NU0JfT0ZGU0VUKTtcXG4rXFxuK1xcdHJldHVybiAoKHU2NCltc2IgXFx1MDAzY1xcdTAwM2MgMzIpIHwgbHNiO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBheGllbmV0X3h4dl9pcF9oYXNfZ3R3aXpfc3RhdHVzKHUzMiBpcF92ZXJzaW9uKVxcbit7XFxuK1xcdHU4IG1pbm9yID0gRklFTERfR0VUKFhYVl9NSU5fTUFTSywgaXBfdmVyc2lvbik7XFxuK1xcdHU4IG1haiA9IEZJRUxEX0dFVChYWFZfTUFKX01BU0ssIGlwX3ZlcnNpb24pO1xcbitcXG4rXFx0aWYgKG1haiA9PSBYWFZfSVBfVkVSX0dUV0laX01BSl9NSU4pXFxuK1xcdFxcdHJldHVybiBtaW5vciBcXHUwMDNlPSBYWFZfSVBfVkVSX0dUV0laX01JTl9NSU47XFxuK1xcdHJldHVybiBtYWogXFx1MDAzZSBYWFZfSVBfVkVSX0dUV0laX01BSl9NSU47XFxuK31cXG4rXFxuKy8qKlxcbisgKiBheGllbmV0X3h4dl9zZXRvcHRpb25zIC0gU2V0IFhYViBNQUMgb3B0aW9ucyBmcm9tIHRoZSBvcHRpb24gdGFibGVcXG4rICogQG5kZXY6IFBvaW50ZXIgdG8gdGhlIG5ldF9kZXZpY2Ugc3RydWN0dXJlXFxuKyAqIEBvcHRpb25zOiBPcHRpb24gZmxhZ3MgdG8gYXBwbHlcXG4rICovXFxuK3N0YXRpYyB2b2lkIGF4aWVuZXRfeHh2X3NldG9wdGlvbnMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBvcHRpb25zKVxcbit7XFxuK1xcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXHRzdHJ1Y3QgYXhpZW5ldF9vcHRpb24gKnRwID0geHh2ZW5ldF9vcHRpb25zO1xcbitcXHR1MzIgcmVnO1xcbitcXG4rXFx0d2hpbGUgKHRwLVxcdTAwM2VvcHQpIHtcXG4rXFx0XFx0cmVnID0gYXhpZW5ldF9pb3IobHAsIHRwLVxcdTAwM2VyZWcpIFxcdTAwMjYgfnRwLVxcdTAwM2VtX29yO1xcbitcXHRcXHRpZiAob3B0aW9ucyBcXHUwMDI2IHRwLVxcdTAwM2VvcHQpXFxuK1xcdFxcdFxcdHJlZyB8PSB0cC1cXHUwMDNlbV9vcjtcXG4rXFx0XFx0YXhpZW5ldF9pb3cobHAsIHRwLVxcdTAwM2VyZWcsIHJlZyk7XFxuK1xcdFxcdHRwKys7XFxuK1xcdH1cXG4rXFxuK1xcdGxwLVxcdTAwM2VvcHRpb25zIHw9IG9wdGlvbnM7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBheGllbmV0X3h4dl9wcm9iZV9pbml0IC0gSW5pdGlhbGl6ZSBYWFYtc3BlY2lmaWMgc3RhdGUgYXQgcHJvYmUgdGltZVxcbisgKiBAbHA6IFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9wcm9iZV9pbml0KHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcXG4re1xcbitcXHRscC1cXHUwMDNleHh2X2lwX3ZlcnNpb24gPSBheGllbmV0X2lvcihscCwgWFhWX0NPTkZJR19SRVZJU0lPTik7XFxuK1xcdGxwLVxcdTAwM2VmZWF0dXJlcyB8PSBYQUVfRkVBVFVSRV9TVEFUUztcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGF4aWVuZXRfeHh2X2d0X3Jlc2V0IC0gUHVsc2UgdGhlIFhYViBHVCByZXNldCBsaW5lXFxuKyAqIEBscDogUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcXG4rICovXFxuK3N0YXRpYyB2b2lkIGF4aWVuZXRfeHh2X2d0X3Jlc2V0KHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcXG4re1xcbitcXHR1MzIgdmFsO1xcbitcXG4rXFx0LyogUmVzZXQgR1QgKi9cXG4rXFx0dmFsID0gYXhpZW5ldF9pb3IobHAsIFhYVl9HVF9SRVNFVF9PRkZTRVQpO1xcbitcXHR2YWwgfD0gWFhWX0dUX1JFU0VUX01BU0s7XFxuK1xcdGF4aWVuZXRfaW93KGxwLCBYWFZfR1RfUkVTRVRfT0ZGU0VULCB2YWwpO1xcbitcXHQvKiBBbGxvdyAxIG1zIGZvciB0aGUgR1QgcmVzZXQgdG8gc2V0dGxlIChzZWUgdGltZW91dCBub3RlIGFib3ZlKSAqL1xcbitcXHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XFxuK1xcdHZhbCA9IGF4aWVuZXRfaW9yKGxwLCBYWFZfR1RfUkVTRVRfT0ZGU0VUKTtcXG4rXFx0dmFsIFxcdTAwMjY9IH5YWFZfR1RfUkVTRVRfTUFTSztcXG4rXFx0YXhpZW5ldF9pb3cobHAsIFhYVl9HVF9SRVNFVF9PRkZTRVQsIHZhbCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBheGllbmV0X3h4dl9wb2xsX2xpbmtfcmVhZHkgLSBXYWl0IGZvciBYWFYgR1QgYW5kIFBDUyBibG9jayBsb2NrXFxuKyAqIEBuZGV2OiBQb2ludGVyIHRvIHRoZSBuZXRfZGV2aWNlIHN0cnVjdHVyZVxcbisgKlxcbisgKiBQb2xsIEdUIHdpemFyZCByZXNldC1kb25lIG9uIElQIHYzLjIrLCB0aGVuIFJYIFBDUyBibG9jayBsb2NrLiBCbG9jay1sb2NrXFxuKyAqIGZhaWx1cmUgaXMgbG9nZ2VkIGJ1dCBub3QgcHJvcGFnYXRlZDogaXQgZGVwZW5kcyBvbiBhIGxpdmUgbGluayBwYXJ0bmVyIGFuZFxcbisgKiByZWZlcmVuY2UgY2xvY2ssIHNvIGFuIHVucGx1Z2dlZCBjYWJsZSBtdXN0IG5vdCBmYWlsIGRldmljZSBicmluZy11cC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgaWYgR1QgcmVzZXQtZG9uZSB0aW1lcyBvdXQuXFxuKyAqL1xcbitzdGF0aWMgaW50IGF4aWVuZXRfeHh2X3BvbGxfbGlua19yZWFkeShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0dTMyIHZhbDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdC8qIENvbmZpcm0gWFhWIEV0aGVybmV0IGlzIHVwOiBvbiBJUCB2My4yKywgd2FpdCBmb3IgR1RcXG4rXFx0ICogcmVzZXQtZG9uZSBiZWZvcmUgZnVydGhlciByZWdpc3RlciBhY2Nlc3MsIHRoZW4gcG9sbCB1bnRpbFxcbitcXHQgKiBSWCBQQ1MgYmxvY2sgbG9jayBpcyBhc3NlcnRlZC5cXG4rXFx0ICovXFxuK1xcdGlmIChheGllbmV0X3h4dl9pcF9oYXNfZ3R3aXpfc3RhdHVzKGxwLVxcdTAwM2V4eHZfaXBfdmVyc2lvbikpIHtcXG4rXFx0XFx0cmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGxwLVxcdTAwM2VyZWdzICsgWFhWX1NUQVRfR1RXSVpfT0ZGU0VULFxcbitcXHRcXHRcXHRcXHRcXHQgdmFsLFxcbitcXHRcXHRcXHRcXHRcXHQgKHZhbCBcXHUwMDI2IFhYVl9HVFdJWl9SRVNFVF9ET05FKSA9PSBYWFZfR1RXSVpfUkVTRVRfRE9ORSxcXG4rXFx0XFx0XFx0XFx0XFx0IFhYVl9MSU5LX1BPTExfSU5URVJWQUxfVVMsXFxuK1xcdFxcdFxcdFxcdFxcdCBERUxBWV9PRl9PTkVfTUlMTElTRUMpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcIlhYViBNQUMgR1QgcmVzZXQgbm90IGNvbXBsZXRlISBDcm9zcy1jaGVjayB0aGUgTUFDIHJlZiBjbG9jayBjb25maWd1cmF0aW9uXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQobHAtXFx1MDAzZXJlZ3MgKyBYWFZfU1RBVFJYX0JMS0xDS19PRkZTRVQsXFxuK1xcdFxcdFxcdFxcdCB2YWwsICh2YWwgXFx1MDAyNiBYWFZfUlhfQkxLTENLX01BU0spLFxcbitcXHRcXHRcXHRcXHQgWFhWX0xJTktfUE9MTF9JTlRFUlZBTF9VUyxcXG4rXFx0XFx0XFx0XFx0IERFTEFZX09GX09ORV9NSUxMSVNFQyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcIlhYViBNQUMgYmxvY2sgbG9jayBub3QgY29tcGxldGUhIENyb3NzLWNoZWNrIHRoZSBNQUMgcmVmIGNsb2NrIGNvbmZpZ3VyYXRpb25cXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBheGllbmV0X3h4dl9tYWNfaW5pdCAtIFhYViBNQUMtc3BlY2lmaWMgYnJpbmctdXAgYWZ0ZXIgdGhlIERNQSByZXNldFxcbisgKiBAbmRldjogUG9pbnRlciB0byB0aGUgbmV0X2RldmljZSBzdHJ1Y3R1cmVcXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIgb3RoZXJ3aXNlLlxcbisgKi9cXG4rc3RhdGljIGludCBheGllbmV0X3h4dl9tYWNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGF4aWVuZXRfeHh2X3BvbGxfbGlua19yZWFkeShuZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGxwLVxcdTAwM2VvcHRpb25zIHw9IFhBRV9PUFRJT05fRkNTX1NUUklQO1xcbitcXHRscC1cXHUwMDNlb3B0aW9ucyB8PSBYQUVfT1BUSU9OX0ZDU19JTlNFUlQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYXhpZW5ldF94eHZfcGh5bGlua19zZXRfY2FwYWJpbGl0aWVzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY2ZnKVxcbit7XFxuK1xcdHUzMiBjb3JlX3NwZWVkO1xcbitcXHRib29sIHJ0c3c7XFxuK1xcbitcXHRjb3JlX3NwZWVkID0gYXhpZW5ldF9pb3IobHAsIFhYVl9TVEFUX0NPUkVfU1BFRURfT0ZGU0VUKTtcXG4rXFx0LyogQml0WzE6MF06IDAwPTI1RywgMDE9MTBHLCAxMD1ydW50aW1lLXN3aXRjaGFibGUgMjVHLFxcbitcXHQgKiAxMT1ydW50aW1lLXN3aXRjaGFibGUgMTBHLiBBIHJ1bnRpbWUtc3dpdGNoYWJsZSBjb3JlIGNhbiBvcGVyYXRlIGF0XFxuK1xcdCAqIGVpdGhlciBzcGVlZCwgc28gYWR2ZXJ0aXNlIGJvdGg7IGEgZml4ZWQgY29yZSBhZHZlcnRpc2VzIG9ubHkgaXRzXFxuK1xcdCAqIGNvbmZpZ3VyZWQgc3BlZWQuXFxuK1xcdCAqL1xcbitcXHRydHN3ID0gY29yZV9zcGVlZCBcXHUwMDI2IFhYVl9TVEFUX0NPUkVfU1BFRURfUlRTV19NQVNLO1xcbitcXG4rXFx0aWYgKHJ0c3cgfHwgKGNvcmVfc3BlZWQgXFx1MDAyNiBYWFZfU1RBVF9DT1JFX1NQRUVEXzEwR19NQVNLKSkge1xcbitcXHRcXHRjZmctXFx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDAwRkQ7XFxuK1xcdFxcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIsXFxuK1xcdFxcdFxcdCAgY2ZnLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChydHN3IHx8ICEoY29yZV9zcGVlZCBcXHUwMDI2IFhYVl9TVEFUX0NPUkVfU1BFRURfMTBHX01BU0spKSB7XFxuK1xcdFxcdGNmZy1cXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMjUwMDBGRDtcXG4rXFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8yNUdCQVNFUixcXG4rXFx0XFx0XFx0ICBjZmctXFx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLFxcbitcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgbmVnX21vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IHBjc190b19heGllbmV0X2xvY2FsKHBjcyk7XFxuK1xcbitcXHRzdGF0ZS1cXHUwMDNlZHVwbGV4ID0gRFVQTEVYX0ZVTEw7XFxuK1xcdHN0YXRlLVxcdTAwM2Vhbl9jb21wbGV0ZSA9ICEhKGF4aWVuZXRfaW9yKGxwLCBYWFZfU1RBVF9BTl9TVFNfT0ZGU0VUKSBcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdFhYVl9BTl9DT01QTEVURV9NQVNLKTtcXG4rXFx0c3RhdGUtXFx1MDAzZWxpbmsgPSBheGllbmV0X2lvcihscCwgWFhWX1JYX1NUQVRVU19SRUcxKSBcXHUwMDI2XFxuK1xcdFxcdCAgICAgIFhYVl9SWF9TVEFUVVNfTUFTSztcXG4rXFxuK1xcdGlmIChheGllbmV0X2lvcihscCwgWFhWX1NUQVRfQ09SRV9TUEVFRF9PRkZTRVQpIFxcdTAwMjZcXG4rXFx0ICAgIFhYVl9TVEFUX0NPUkVfU1BFRURfMTBHX01BU0spXFxuK1xcdFxcdHN0YXRlLVxcdTAwM2VzcGVlZCA9IFNQRUVEXzEwMDAwO1xcbitcXHRlbHNlXFxuK1xcdFxcdHN0YXRlLVxcdTAwM2VzcGVlZCA9IFNQRUVEXzI1MDAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGF4aWVuZXRfeHh2X3Bjc19jb25maWcoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBuZWdfbW9kZSxcXG4rXFx0XFx0XFx0XFx0ICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxcbitcXHRcXHRcXHRcXHQgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkdmVydGlzaW5nLFxcbitcXHRcXHRcXHRcXHQgIGJvb2wgcGVybWl0X3BhdXNlX3RvX21hYylcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX3Bjc19vcHMgYXhpZW5ldF94eHZfcGNzX29wcyA9IHtcXG4rXFx0LnBjc19nZXRfc3RhdGUgPSBheGllbmV0X3h4dl9wY3NfZ2V0X3N0YXRlLFxcbitcXHQucGNzX2NvbmZpZyA9IGF4aWVuZXRfeHh2X3Bjc19jb25maWcsXFxuK307XFxuK1xcbisvKipcXG4rICogYXhpZW5ldF94eHZfZ2V0X3JlZ3MgLSBEdW1wIFhYViBNQUMgcmVnaXN0ZXJzIGZvciBldGh0b29sXFxuKyAqIEBscDogUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcXG4rICogQGRhdGE6IEJ1ZmZlciBmb3IgcmVnaXN0ZXIgdmFsdWVzICh6ZXJvZWQgYW5kIHNpemVkIGJ5IHRoZSBjYWxsZXIpXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfcmVncyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsIHUzMiAqZGF0YSlcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGF4aWVuZXRfeHh2X3JlZ19kdW1wX29mZnNldHMpOyBpKyspXFxuK1xcdFxcdGRhdGFbaV0gPSBheGllbmV0X2lvcihscCwgYXhpZW5ldF94eHZfcmVnX2R1bXBfb2Zmc2V0c1tpXSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYXhpZW5ldF8xMGcyNWdfY2xrX2luaXQoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGxwLVxcdTAwM2VkZXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBUaGUgcmVnaXN0ZXIsIFJYIGFuZCBHVCBEUlAgY2xvY2tzIGFyZSBtYW5kYXRvcnkgZm9yIE1BQytQQ1NcXG4rXFx0ICogb3BlcmF0aW9uLCBzbyBmZXRjaCB0aGVtIGFzIHJlcXVpcmVkLlxcbitcXHQgKi9cXG4rXFx0bHAtXFx1MDAzZWF4aV9jbGsgPSBkZXZtX2Nsa19nZXRfZW5hYmxlZChkZXYsIFxcXCJzX2F4aVxcXCIpO1xcbitcXHRpZiAoSVNfRVJSKGxwLVxcdTAwM2VheGlfY2xrKSlcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGxwLVxcdTAwM2VheGlfY2xrKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiY291bGQgbm90IGdldCBBWEkgY2xvY2tcXFxcblxcXCIpO1xcbitcXG4rXFx0bHAtXFx1MDAzZW1pc2NfY2xrc1swXS5pZCA9IFxcXCJyeF9jb3JlXFxcIjtcXG4rXFx0bHAtXFx1MDAzZW1pc2NfY2xrc1sxXS5pZCA9IFxcXCJkcnBcXFwiO1xcbitcXG4rXFx0cmV0ID0gZGV2bV9jbGtfYnVsa19nZXRfZW5hYmxlKGRldiwgMiwgbHAtXFx1MDAzZW1pc2NfY2xrcyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJjb3VsZCBub3QgZ2V0L2VuYWJsZSBYWFYgY2xvY2tzXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogYXhpZW5ldF94eHZfc3RhdHNfdXBkYXRlIC0gTGF0Y2ggYW5kIGFjY3VtdWxhdGUgWFhWIGhhcmR3YXJlIGNvdW50ZXJzXFxuKyAqIEBscDogUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcXG4rICpcXG4rICogVGhlIFhYViBzdGF0aXN0aWNzIGNvdW50ZXJzIGFyZSBjbGVhci1vbi10aWNrIChQRzIxMCk6IHdyaXRpbmcgVElDS19SRUdcXG4rICogbGF0Y2hlcyB0aGUgaW50ZXJuYWwgYWNjdW11bGF0b3JzIGludG8gdGhlIHJlYWRhYmxlIFNUQVRfKl9MU0IvTVNCIHJlZ2lzdGVyc1xcbisgKiBhbmQgY2xlYXJzIHRoZSBpbnRlcm5hbCBhY2N1bXVsYXRvcnMuIEVhY2ggcG9zdC1USUNLIHJlYWQgdGhlcmVmb3JlIHJldHVybnNcXG4rICogdGhlIGNvdW50IGZvciB0aGUgaW50ZXJ2YWwgc2luY2UgdGhlIHByZXZpb3VzIFRJQ0ssIHNvIHNvZnR3YXJlIGFjY3VtdWxhdGVzXFxuKyAqIHRob3NlIGludGVydmFscyBpbnRvIGxwLVxcdTAwM2V4eHZfc3RhdF9iYXNlLiBBIGxhc3QtY291bnRlciBkZWx0YSAoYXMgdXNlZCBieSB0aGVcXG4rICogZnJlZS1ydW5uaW5nIDFHIE1BQyBwYXRoKSBpcyBub3QgbmVlZGVkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgYXhpZW5ldF94eHZfc3RhdHNfdXBkYXRlKHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcXG4re1xcbitcXHR1NjQgY291bnRlcltYWFZfU1RBVF9DT1VOVF07XFxuK1xcdGVudW0geHh2X3N0YXQgc3RhdDtcXG4rXFxuK1xcdC8qIExhdGNoIHRoZSBjbGVhci1vbi10aWNrIHNuYXBzaG90IGFuZCByZWFkIHRoZSBjb3VudGVycyBvdXRzaWRlIHRoZVxcbitcXHQgKiBzZXFjb3VudCB3cml0ZSBzZWN0aW9uLCBzbyBvbmx5IHRoZSBhY2N1bXVsYXRvciB1cGRhdGVzIHJ1biBpbnNpZGUgaXRcXG4rXFx0ICogYW5kIHRoZSByZWFkZXIgcmV0cnkgd2luZG93IHN0YXlzIHNob3J0LlxcbitcXHQgKi9cXG4rXFx0YXhpZW5ldF9pb3cobHAsIFhYVl9USUNLUkVHX09GRlNFVCwgWFhWX1RJQ0tSRUdfU1RBVEVOX01BU0spO1xcbitcXHRmb3IgKHN0YXQgPSAwOyBzdGF0IFxcdTAwM2MgWFhWX1NUQVRfQ09VTlQ7IHN0YXQrKylcXG4rXFx0XFx0Y291bnRlcltzdGF0XSA9IGF4aWVuZXRfeHh2X3JlYWRfY291bnRlcihscCwgc3RhdCk7XFxuK1xcbitcXHR3cml0ZV9zZXFjb3VudF9iZWdpbihcXHUwMDI2bHAtXFx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcXG4rXFx0Zm9yIChzdGF0ID0gMDsgc3RhdCBcXHUwMDNjIFhYVl9TVEFUX0NPVU5UOyBzdGF0KyspXFxuK1xcdFxcdGxwLVxcdTAwM2V4eHZfc3RhdF9iYXNlW3N0YXRdICs9IGNvdW50ZXJbc3RhdF07XFxuK1xcdHdyaXRlX3NlcWNvdW50X2VuZChcXHUwMDI2bHAtXFx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGF4aWVuZXRfeHh2X2dldF9zdGF0czY0IC0gRmlsbCBydG5sX2xpbmtfc3RhdHM2NCBmcm9tIFhYViBjb3VudGVyc1xcbisgKiBAbHA6IFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlXFxuKyAqIEBzdGF0czogT3V0cHV0IHJ0bmxfbGlua19zdGF0czY0IHN0cnVjdHVyZSB0byBwb3B1bGF0ZVxcbisgKi9cXG4rc3RhdGljIHZvaWQgYXhpZW5ldF94eHZfZ2V0X3N0YXRzNjQoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cylcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuK1xcdHU2NCB0eF9od19lcnJvcnM7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcXHUwMDI2bHAtXFx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZXJ4X2NyY19lcnJvcnMgPSBscC1cXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9CQURfRkNTXTtcXG4rXFx0XFx0LyogQm90aCBpbi1yYW5nZSBsZW5ndGggZXJyb3JzIGFuZCBmcmFtZS10b28tbG9uZyAob3ZlcnNpemUpXFxuK1xcdFxcdCAqIGZyYW1lcyBhcmUgSUVFRSA4MDIuMyBsZW5ndGggZXJyb3JzLCBzbyBmb2xkIHRoZW0gdG9nZXRoZXJcXG4rXFx0XFx0ICogaW50byByeF9sZW5ndGhfZXJyb3JzOyByeF9vdmVyX2Vycm9ycyBpcyByZXNlcnZlZCBmb3IgcmVjZWl2ZXJcXG4rXFx0XFx0ICogRklGTy9yaW5nIG92ZXJmbG93LCB3aGljaCB0aGUgWFhWIE1BQyBkb2VzIG5vdCBleHBvc2UuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzdGF0cy1cXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyA9XFxuK1xcdFxcdFxcdGxwLVxcdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX0lOUkFOR0VFUlJdICtcXG4rXFx0XFx0XFx0bHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfT1ZFUlNJWkVdO1xcbitcXHRcXHRzdGF0cy1cXHUwMDNlcnhfZXJyb3JzID0gbHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfVU5ERVJTSVpFXSArXFxuK1xcdFxcdFxcdFxcdCAgIGxwLVxcdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX0ZSQUdNRU5UXSArXFxuK1xcdFxcdFxcdFxcdCAgIGxwLVxcdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX0pBQkJFUl0gK1xcbitcXHRcXHRcXHRcXHQgICBzdGF0cy1cXHUwMDNlcnhfY3JjX2Vycm9ycyArXFxuK1xcdFxcdFxcdFxcdCAgIHN0YXRzLVxcdTAwM2VyeF9sZW5ndGhfZXJyb3JzO1xcbitcXHRcXHRzdGF0cy1cXHUwMDNlbXVsdGljYXN0ID0gbHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfTVVMVElDQVNUXTtcXG4rXFx0XFx0dHhfaHdfZXJyb3JzID0gbHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfQkFEX0ZDU10gK1xcbitcXHRcXHRcXHQgICAgICAgbHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfRlJBTUVfRVJST1JdO1xcbitcXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFxcdTAwMjZscC1cXHUwMDNlaHdfc3RhdHNfc2VxY291bnQsIHN0YXJ0KSk7XFxuK1xcbitcXHQvKiBGb2xkIHRoZSBIVyBUWCBlcnJvciBjb3VudCBpbnRvIHRoZSBzb2Z0d2FyZSB0eF9lcnJvcnMgc2VlZGVkIGZyb21cXG4rXFx0ICogZGV2LVxcdTAwM2VzdGF0cyBieSB0aGUgY2FsbGVyLiBUaGUgWFhWIHhtaXQgcGF0aCBidW1wcyBkZXYtXFx1MDAzZXN0YXRzLnR4X2Vycm9yc1xcbitcXHQgKiBmb3IgZnJhbWVzIGRyb3BwZWQgb24gcGFkIGZhaWx1cmUgYmVmb3JlIHRoZXkgcmVhY2ggdGhlIE1BQywgd2hpbGUgdGhlXFxuK1xcdCAqIEhXIGNvdW50ZXJzIG9ubHkgY292ZXIgZnJhbWVzIHRoZSBNQUMgYWN0dWFsbHkgdHJhbnNtaXR0ZWQ7IHRoZSB0d28gYXJlXFxuK1xcdCAqIGRpc2pvaW50LiBUaGlzIHJ1bnMgb25jZSwgb3V0c2lkZSB0aGUgc2VxY291bnQgcmV0cnkgbG9vcCwgc28gYSByYWNpbmdcXG4rXFx0ICogc3RhdHMgdXBkYXRlIGNhbm5vdCBtYWtlIHRoZSBhY2N1bXVsYXRpb24gcmUtYWRkIG9uIHJldHJ5LlxcbitcXHQgKi9cXG4rXFx0c3RhdHMtXFx1MDAzZXR4X2Vycm9ycyArPSB0eF9od19lcnJvcnM7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBheGllbmV0X3h4dl9nZXRfZXRodG9vbF9zdGF0cyAtIENvcHkgWFhWIGNvdW50ZXJzIGZvciBldGh0b29sIC1TXFxuKyAqIEBscDogUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcXG4rICogQGRhdGE6IE91dHB1dCBidWZmZXIgc2l6ZWQgZm9yIEFSUkFZX1NJWkUoYXhpZW5ldF94eHZfcHJpdl9zdGF0cykgdTY0IHZhbHVlc1xcbisgKi9cXG4rc3RhdGljIHZvaWQgYXhpZW5ldF94eHZfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLCB1NjQgKmRhdGEpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGksIHN0YXJ0O1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4oXFx1MDAyNmxwLVxcdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGF4aWVuZXRfeHh2X3ByaXZfc3RhdHMpOyBpKyspXFxuK1xcdFxcdFxcdGRhdGFbaV0gPSBscC1cXHUwMDNleHh2X3N0YXRfYmFzZVtheGllbmV0X3h4dl9wcml2X3N0YXRzW2ldXTtcXG4rXFx0fSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeShcXHUwMDI2bHAtXFx1MDAzZWh3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpO1xcbit9XFxuK1xcbisvKipcXG4rICogYXhpZW5ldF94eHZfZ2V0X3N0cmluZ3MgLSBDb3B5IFhYViBldGh0b29sIHN0YXRpc3RpY3MgbmFtZSBzdHJpbmdzXFxuKyAqIEBkYXRhOiBPdXRwdXQgYnVmZmVyIGZvciB0aGUgc3RhdGlzdGljcyBuYW1lIHN0cmluZ3NcXG4rICovXFxuK3N0YXRpYyB2b2lkIGF4aWVuZXRfeHh2X2dldF9zdHJpbmdzKHU4ICpkYXRhKVxcbit7XFxuK1xcdG1lbWNweShkYXRhLCBheGllbmV0X3h4dl9ldGh0b29sX3N0YXRzX3N0cmluZ3MsXFxuK1xcdCAgICAgICBzaXplb2YoYXhpZW5ldF94eHZfZXRodG9vbF9zdGF0c19zdHJpbmdzKSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBheGllbmV0X3h4dl9nZXRfc3NldF9jb3VudCAtIE51bWJlciBvZiBYWFYgZXRodG9vbCBzdGF0aXN0aWNzXFxuKyAqXFxuKyAqIFJldHVybjogQ291bnQgb2YgWFhWIGhhcmR3YXJlIHN0YXRpc3RpY3MgcmVwb3J0ZWQgdmlhIGV0aHRvb2wgLVMuXFxuKyAqL1xcbitzdGF0aWMgaW50IGF4aWVuZXRfeHh2X2dldF9zc2V0X2NvdW50KHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIEFSUkFZX1NJWkUoYXhpZW5ldF94eHZfZXRodG9vbF9zdGF0c19zdHJpbmdzKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGF4aWVuZXRfeHh2X2dldF9wYXVzZV9zdGF0cyAtIEZpbGwgZXRodG9vbCBwYXVzZSBmcmFtZSBzdGF0aXN0aWNzXFxuKyAqIEBscDogUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcXG4rICogQHBhdXNlX3N0YXRzOiBPdXRwdXQgZXRodG9vbF9wYXVzZV9zdGF0cyBzdHJ1Y3R1cmUgdG8gcG9wdWxhdGVcXG4rICovXFxuK3N0YXRpYyB2b2lkIGF4aWVuZXRfeHh2X2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cylcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcXHUwMDI2bHAtXFx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcXG4rXFx0XFx0cGF1c2Vfc3RhdHMtXFx1MDAzZXR4X3BhdXNlX2ZyYW1lcyA9XFxuK1xcdFxcdFxcdGxwLVxcdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1RYX1BBVVNFXTtcXG4rXFx0XFx0cGF1c2Vfc3RhdHMtXFx1MDAzZXJ4X3BhdXNlX2ZyYW1lcyA9XFxuK1xcdFxcdFxcdGxwLVxcdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX1BBVVNFXTtcXG4rXFx0fSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeShcXHUwMDI2bHAtXFx1MDAzZWh3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpO1xcbit9XFxuK1xcbisvKipcXG4rICogYXhpZW5ldF94eHZfZ2V0X2V0aF9tYWNfc3RhdHMgLSBGaWxsIElFRUUgODAyLjMgTUFDIHN0YXRpc3RpY3NcXG4rICogQGxwOiBQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxcbisgKiBAbWFjX3N0YXRzOiBPdXRwdXQgZXRodG9vbF9ldGhfbWFjX3N0YXRzIHN0cnVjdHVyZSB0byBwb3B1bGF0ZVxcbisgKi9cXG4rc3RhdGljIHZvaWQgYXhpZW5ldF94eHZfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cylcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcXHUwMDI2bHAtXFx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcXG4rXFx0XFx0bWFjX3N0YXRzLVxcdTAwM2VGcmFtZXNUcmFuc21pdHRlZE9LID1cXG4rXFx0XFx0XFx0bHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9QQUNLRVRTXTtcXG4rXFx0XFx0bWFjX3N0YXRzLVxcdTAwM2VGcmFtZXNSZWNlaXZlZE9LID1cXG4rXFx0XFx0XFx0bHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9QQUNLRVRTXTtcXG4rXFx0XFx0bWFjX3N0YXRzLVxcdTAwM2VPY3RldHNUcmFuc21pdHRlZE9LID1cXG4rXFx0XFx0XFx0bHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9CWVRFU107XFxuK1xcdFxcdG1hY19zdGF0cy1cXHUwMDNlT2N0ZXRzUmVjZWl2ZWRPSyA9XFxuK1xcdFxcdFxcdGxwLVxcdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX1RPVEFMX0dPT0RfQllURVNdO1xcbitcXHRcXHRtYWNfc3RhdHMtXFx1MDAzZUZyYW1lQ2hlY2tTZXF1ZW5jZUVycm9ycyA9XFxuK1xcdFxcdFxcdGxwLVxcdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX0JBRF9GQ1NdO1xcbitcXHRcXHRtYWNfc3RhdHMtXFx1MDAzZU11bHRpY2FzdEZyYW1lc1htaXR0ZWRPSyA9XFxuK1xcdFxcdFxcdGxwLVxcdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1RYX01VTFRJQ0FTVF07XFxuK1xcdFxcdG1hY19zdGF0cy1cXHUwMDNlQnJvYWRjYXN0RnJhbWVzWG1pdHRlZE9LID1cXG4rXFx0XFx0XFx0bHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfQlJPQURDQVNUXTtcXG4rXFx0XFx0bWFjX3N0YXRzLVxcdTAwM2VNdWx0aWNhc3RGcmFtZXNSZWNlaXZlZE9LID1cXG4rXFx0XFx0XFx0bHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfTVVMVElDQVNUXTtcXG4rXFx0XFx0bWFjX3N0YXRzLVxcdTAwM2VCcm9hZGNhc3RGcmFtZXNSZWNlaXZlZE9LID1cXG4rXFx0XFx0XFx0bHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfQlJPQURDQVNUXTtcXG4rXFx0XFx0bWFjX3N0YXRzLVxcdTAwM2VJblJhbmdlTGVuZ3RoRXJyb3JzID1cXG4rXFx0XFx0XFx0bHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfSU5SQU5HRUVSUl07XFxuK1xcdH0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoXFx1MDAyNmxwLVxcdTAwM2Vod19zdGF0c19zZXFjb3VudCwgc3RhcnQpKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGF4aWVuZXRfeHh2X2dldF9ybW9uX3N0YXRzIC0gRmlsbCBSTU9OIHN0YXRpc3RpY3MgYW5kIGhpc3RvZ3JhbSByYW5nZXNcXG4rICogQGxwOiBQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxcbisgKiBAcm1vbl9zdGF0czogT3V0cHV0IGV0aHRvb2xfcm1vbl9zdGF0cyBzdHJ1Y3R1cmUgdG8gcG9wdWxhdGVcXG4rICogQHJhbmdlczogU2V0IHRvIHRoZSBSTU9OIGhpc3RvZ3JhbSByYW5nZSB0YWJsZVxcbisgKi9cXG4rc3RhdGljIHZvaWQgYXhpZW5ldF94eHZfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSAqKnJhbmdlcylcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcXHUwMDI2bHAtXFx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcXG4rXFx0XFx0cm1vbl9zdGF0cy1cXHUwMDNldW5kZXJzaXplX3BrdHMgPVxcbitcXHRcXHRcXHRscC1cXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9VTkRFUlNJWkVdO1xcbitcXHRcXHRybW9uX3N0YXRzLVxcdTAwM2VvdmVyc2l6ZV9wa3RzID1cXG4rXFx0XFx0XFx0bHAtXFx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfT1ZFUlNJWkVdO1xcbitcXHRcXHRybW9uX3N0YXRzLVxcdTAwM2VmcmFnbWVudHMgPVxcbitcXHRcXHRcXHRscC1cXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9GUkFHTUVOVF07XFxuK1xcdFxcdHJtb25fc3RhdHMtXFx1MDAzZWphYmJlcnMgPVxcbitcXHRcXHRcXHRscC1cXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9KQUJCRVJdO1xcbitcXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFxcdTAwMjZscC1cXHUwMDNlaHdfc3RhdHNfc2VxY291bnQsIHN0YXJ0KSk7XFxuK1xcbitcXHQvKiBYWFYgY3VycmVudGx5IGV4cG9zZXMgb25seSBhZ2dyZWdhdGUgUk1PTiBjb3VudGVycywgbm90IHBlci1iaW5cXG4rXFx0ICogaGlzdG9ncmFtIGJ1Y2tldHMuIEtlZXAgcmFuZ2VzIE5VTEwgdW50aWwgaGlzdG9ncmFtIGJpbnMgYXJlIHdpcmVkLlxcbitcXHQgKi9cXG4rXFx0KnJhbmdlcyA9IE5VTEw7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBheGllbmV0X2NvbmZpZyBheGllbmV0XzEwZzI1Z19jb25maWcgPSB7XFxuK1xcdC5zd19wYWRkaW5nID0gdHJ1ZSxcXG4rXFx0LmludGVybmFsX3BjcyA9IHRydWUsXFxuK1xcdC5yZWdzX24gPSBYWFZfUkVHU19OLFxcbitcXHQuY2xrX2luaXQgPSBheGllbmV0XzEwZzI1Z19jbGtfaW5pdCxcXG4rXFx0LnNldG9wdGlvbnMgPSBheGllbmV0X3h4dl9zZXRvcHRpb25zLFxcbitcXHQucHJvYmVfaW5pdCA9IGF4aWVuZXRfeHh2X3Byb2JlX2luaXQsXFxuK1xcdC5ndF9yZXNldCA9IGF4aWVuZXRfeHh2X2d0X3Jlc2V0LFxcbitcXHQubWFjX2luaXQgPSBheGllbmV0X3h4dl9tYWNfaW5pdCxcXG4rXFx0LmdldF9yZWdzID0gYXhpZW5ldF94eHZfZ2V0X3JlZ3MsXFxuK1xcdC5waHlsaW5rX3NldF9jYXBzID0gYXhpZW5ldF94eHZfcGh5bGlua19zZXRfY2FwYWJpbGl0aWVzLFxcbitcXHQucGNzX29wcyA9IFxcdTAwMjZheGllbmV0X3h4dl9wY3Nfb3BzLFxcbitcXHQuc3RhdHNfdXBkYXRlID0gYXhpZW5ldF94eHZfc3RhdHNfdXBkYXRlLFxcbitcXHQuZ2V0X3N0YXRzNjQgPSBheGllbmV0X3h4dl9nZXRfc3RhdHM2NCxcXG4rXFx0LmdldF9ldGh0b29sX3N0YXRzID0gYXhpZW5ldF94eHZfZ2V0X2V0aHRvb2xfc3RhdHMsXFxuK1xcdC5nZXRfc3RyaW5ncyA9IGF4aWVuZXRfeHh2X2dldF9zdHJpbmdzLFxcbitcXHQuZ2V0X3NzZXRfY291bnQgPSBheGllbmV0X3h4dl9nZXRfc3NldF9jb3VudCxcXG4rXFx0LmdldF9wYXVzZV9zdGF0cyA9IGF4aWVuZXRfeHh2X2dldF9wYXVzZV9zdGF0cyxcXG4rXFx0LmdldF9ldGhfbWFjX3N0YXRzID0gYXhpZW5ldF94eHZfZ2V0X2V0aF9tYWNfc3RhdHMsXFxuK1xcdC5nZXRfcm1vbl9zdGF0cyA9IGF4aWVuZXRfeHh2X2dldF9ybW9uX3N0YXRzLFxcbit9O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfeHh2LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfeHh2LmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmViZmE3ZDU3YTg1OTFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X3h4di5oXFxuQEAgLTAsMCArMSwxNDEgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xcbisvKlxcbisgKiBYWFYgKDEwRy8yNUcpIHN1cHBvcnRcXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy5cXG4rICovXFxuK1xcbisjaWZuZGVmIFhJTElOWF9BWElFTkVUX1hYVl9IXFxuKyNkZWZpbmUgWElMSU5YX0FYSUVORVRfWFhWX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRzLmhcXHUwMDNlXFxuK1xcbitzdHJ1Y3QgYXhpZW5ldF9sb2NhbDtcXG4rc3RydWN0IGF4aWVuZXRfY29uZmlnO1xcbitcXG4rI2RlZmluZSBYWFZfUkVHU19OXFx0XFx0NDZcXG4rXFxuKy8qIFhYViBNQUMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi9cXG4rI2RlZmluZSBYWFZfR1RfUkVTRVRfT0ZGU0VUXFx0XFx0MHgwMDAwMDAwMFxcbisjZGVmaW5lIFhYVl9SRVNFVF9PRkZTRVRcXHRcXHQweDAwMDAwMDA0XFxuKyNkZWZpbmUgWFhWX01PREVfT0ZGU0VUXFx0XFx0XFx0MHgwMDAwMDAwOFxcbisjZGVmaW5lIFhYVl9UQ19PRkZTRVRcXHRcXHRcXHQweDAwMDAwMDBDXFxuKyNkZWZpbmUgWFhWX1JDVzFfT0ZGU0VUXFx0XFx0XFx0MHgwMDAwMDAxNFxcbisjZGVmaW5lIFhYVl9KVU1fT0ZGU0VUXFx0XFx0XFx0MHgwMDAwMDAxOFxcbisjZGVmaW5lIFhYVl9WTF9MRU5HVEhfT0ZGU0VUXFx0XFx0MHgwMDAwMDAxQ1xcbisjZGVmaW5lIFhYVl9USUNLUkVHX09GRlNFVFxcdFxcdDB4MDAwMDAwMjBcXG4rI2RlZmluZSBYWFZfQ09ORklHX1JFVklTSU9OXFx0XFx0MHgwMDAwMDAyNFxcbisjZGVmaW5lIFhYVl9DT05GSUdfMTU4OF9PRkZTRVRcXHRcXHQweDAwMDAwMDM4XFxuKyNkZWZpbmUgWFhWX0NPTkZJR19UWF9GTE9XX0NUUkwxX09GRlNFVFxcdDB4MDAwMDAwNDBcXG4rI2RlZmluZSBYWFZfQ09ORklHX1JYX0ZMT1dfQ1RSTDFfT0ZGU0VUXFx0MHgwMDAwMDA5NFxcbisjZGVmaW5lIFhYVl9DT05GSUdfUlhfRkxPV19DVFJMMl9PRkZTRVRcXHQweDAwMDAwMDk4XFxuKyNkZWZpbmUgWFhWX0NPTkZJR19SU0ZFQ19PRkZTRVRcXHRcXHQweDAwMDAwMEQwXFxuKyNkZWZpbmUgWFhWX0NPTkZJR19GRUNfT0ZGU0VUXFx0XFx0MHgwMDAwMDBENFxcbisjZGVmaW5lIFhYVl9BTl9DVEwxX09GRlNFVFxcdFxcdDB4MDAwMDAwRTBcXG4rI2RlZmluZSBYWFZfQU5fQ1RMMl9PRkZTRVRcXHRcXHQweDAwMDAwMEU0XFxuKyNkZWZpbmUgWFhWX0FOX0FCSUxJVFlfT0ZGU0VUXFx0XFx0MHgwMDAwMDBGOFxcbisjZGVmaW5lIFhYVl9MVF9DVEwxX09GRlNFVFxcdFxcdDB4MDAwMDAxMDBcXG4rI2RlZmluZSBYWFZfU1dJVENIX0NPUkVfU1BFRURfT0ZGU0VUXFx0MHgwMDAwMDEzOFxcbisjZGVmaW5lIFhYVl9DT05GSUdfMTU4OF8zMkJJVF9PRkZTRVRcXHQweDAwMDAwMTNDXFxuKyNkZWZpbmUgWFhWX1RYX0NPTkZJR18xNTg4X09GRlNFVFxcdDB4MDAwMDAxNDBcXG4rI2RlZmluZSBYWFZfUlhfQ09ORklHXzE1ODhfT0ZGU0VUXFx0MHgwMDAwMDE0NFxcbisjZGVmaW5lIFhYVl9HVFdJWl9DVFJMX09GRlNFVFxcdFxcdDB4MDAwMDAxNTRcXG4rI2RlZmluZSBYWFZfU1RBVFJYX1NUQVRVUzBfT0ZGU0VUXFx0MHgwMDAwMDQwMFxcbisjZGVmaW5lIFhYVl9SWF9TVEFUVVNfUkVHMVxcdFxcdDB4MDAwMDA0MDRcXG4rI2RlZmluZSBYWFZfU1RBVFJYX1NUQVRVUzJfT0ZGU0VUXFx0MHgwMDAwMDQwOFxcbisjZGVmaW5lIFhYVl9TVEFUUlhfQkxLTENLX09GRlNFVFxcdDB4MDAwMDA0MENcXG4rI2RlZmluZSBYWFZfU1RBVF9SWF9SU0ZFQ19TVEFUVVNfT0ZGU0VUXFx0MHgwMDAwMDQzQ1xcbisjZGVmaW5lIFhYVl9TVEFUX1JYX0ZFQ19TVEFUVVNfT0ZGU0VUXFx0MHgwMDAwMDQ0OFxcbisjZGVmaW5lIFhYVl9TVEFUX1RYX1JTRkVDX1NUQVRVU19PRkZTRVRcXHQweDAwMDAwNDRDXFxuKyNkZWZpbmUgWFhWX1NUQVRfVFhfRkxPV19DVFJMMV9PRkZTRVRcXHQweDAwMDAwNDUwXFxuKyNkZWZpbmUgWFhWX1NUQVRfUlhfRkxPV19DVFJMMV9PRkZTRVRcXHQweDAwMDAwNDU0XFxuKyNkZWZpbmUgWFhWX1NUQVRfQU5fU1RTX09GRlNFVFxcdFxcdDB4MDAwMDA0NThcXG4rI2RlZmluZSBYWFZfU1RBVF9BTl9MUF9TVEFUVVNfT0ZGU0VUXFx0MHgwMDAwMDQ1Q1xcbisjZGVmaW5lIFhYVl9TVEFUX0FOX0xJTktfQ1RMX09GRlNFVFxcdDB4MDAwMDA0NjBcXG4rI2RlZmluZSBYWFZfU1RBVF9MVF9TVEFUVVMxX09GRlNFVFxcdDB4MDAwMDA0NjRcXG4rI2RlZmluZSBYWFZfU1RBVF9MVF9TVEFUVVMyX09GRlNFVFxcdDB4MDAwMDA0NjhcXG4rI2RlZmluZSBYWFZfU1RBVF9MVF9TVEFUVVMzX09GRlNFVFxcdDB4MDAwMDA0NkNcXG4rI2RlZmluZSBYWFZfU1RBVF9MVF9TVEFUVVM0X09GRlNFVFxcdDB4MDAwMDA0NzBcXG4rI2RlZmluZSBYWFZfU1RBVF9MVF9DT0VGRjBfT0ZGU0VUXFx0MHgwMDAwMDQ3NFxcbisjZGVmaW5lIFhYVl9TVEFUX1JYX1ZBTElEX0NUUkxfQ09ERV9PRkZTRVRcXHQweDAwMDAwNDk0XFxuKyNkZWZpbmUgWFhWX1NUQVRfQ09SRV9TUEVFRF9PRkZTRVRcXHQweDAwMDAwNDk4XFxuKyNkZWZpbmUgWFhWX1NUQVRfVFNOX09GRlNFVFxcdFxcdDB4MDAwMDA0OUNcXG4rI2RlZmluZSBYWFZfU1RBVF9HVFdJWl9PRkZTRVRcXHRcXHQweDAwMDAwNEEwXFxuKyNkZWZpbmUgWFhWX1NUQVRfQU5fTElOS19DVEwyX09GRlNFVFxcdDB4MDAwMDA5RjBcXG4rXFxuKy8qIFhYViBzdGF0aXN0aWNzIGNvdW50ZXIgcmVnaXN0ZXJzIChQRzIxMCkuIEVhY2ggY291bnRlciBpcyBhIHBhaXIgb2YgMzItYml0XFxuKyAqIHJlZ2lzdGVyczsgdGhlIE1TQiByZWdpc3RlciBpcyBYWFZfU1RBVF9NU0JfT0ZGU0VUIGJ5dGVzIGFib3ZlIHRoZSBMU0IuXFxuKyAqL1xcbisjZGVmaW5lIFhYVl9TVEFUX01TQl9PRkZTRVRcXHRcXHRcXHQ0XFxuKyNkZWZpbmUgWFhWX1NUQVRfVFhfRlJBTUVfRVJST1JfT0ZGU0VUXFx0XFx0MHgwMDAwMDZBMFxcbisjZGVmaW5lIFhYVl9TVEFUX1RYX1RPVEFMX1BBQ0tFVFNfT0ZGU0VUXFx0MHgwMDAwMDcwMFxcbisjZGVmaW5lIFhYVl9TVEFUX1RYX1RPVEFMX0dPT0RfUEFDS0VUU19PRkZTRVRcXHQweDAwMDAwNzA4XFxuKyNkZWZpbmUgWFhWX1NUQVRfVFhfVE9UQUxfQllURVNfT0ZGU0VUXFx0XFx0MHgwMDAwMDcxMFxcbisjZGVmaW5lIFhYVl9TVEFUX1RYX1RPVEFMX0dPT0RfQllURVNfT0ZGU0VUXFx0MHgwMDAwMDcxOFxcbisjZGVmaW5lIFhYVl9TVEFUX1RYX0JBRF9GQ1NfT0ZGU0VUXFx0XFx0MHgwMDAwMDdCOFxcbisjZGVmaW5lIFhYVl9TVEFUX1RYX01VTFRJQ0FTVF9PRkZTRVRcXHRcXHQweDAwMDAwN0Q4XFxuKyNkZWZpbmUgWFhWX1NUQVRfVFhfQlJPQURDQVNUX09GRlNFVFxcdFxcdDB4MDAwMDA3RTBcXG4rI2RlZmluZSBYWFZfU1RBVF9UWF9QQVVTRV9PRkZTRVRcXHRcXHQweDAwMDAwN0YwXFxuKyNkZWZpbmUgWFhWX1NUQVRfUlhfVE9UQUxfUEFDS0VUU19PRkZTRVRcXHQweDAwMDAwODA4XFxuKyNkZWZpbmUgWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9QQUNLRVRTX09GRlNFVFxcdDB4MDAwMDA4MTBcXG4rI2RlZmluZSBYWFZfU1RBVF9SWF9UT1RBTF9CWVRFU19PRkZTRVRcXHRcXHQweDAwMDAwODE4XFxuKyNkZWZpbmUgWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9CWVRFU19PRkZTRVRcXHQweDAwMDAwODIwXFxuKyNkZWZpbmUgWFhWX1NUQVRfUlhfVU5ERVJTSVpFX09GRlNFVFxcdFxcdDB4MDAwMDA4OThcXG4rI2RlZmluZSBYWFZfU1RBVF9SWF9GUkFHTUVOVF9PRkZTRVRcXHRcXHQweDAwMDAwOEEwXFxuKyNkZWZpbmUgWFhWX1NUQVRfUlhfT1ZFUlNJWkVfT0ZGU0VUXFx0XFx0MHgwMDAwMDhBOFxcbisjZGVmaW5lIFhYVl9TVEFUX1JYX0pBQkJFUl9PRkZTRVRcXHRcXHQweDAwMDAwOEI4XFxuKyNkZWZpbmUgWFhWX1NUQVRfUlhfQkFEX0ZDU19PRkZTRVRcXHRcXHQweDAwMDAwOEMwXFxuKyNkZWZpbmUgWFhWX1NUQVRfUlhfTVVMVElDQVNUX09GRlNFVFxcdFxcdDB4MDAwMDA4RTBcXG4rI2RlZmluZSBYWFZfU1RBVF9SWF9CUk9BRENBU1RfT0ZGU0VUXFx0XFx0MHgwMDAwMDhFOFxcbisjZGVmaW5lIFhYVl9TVEFUX1JYX1BBVVNFX09GRlNFVFxcdFxcdDB4MDAwMDA4RjhcXG4rI2RlZmluZSBYWFZfU1RBVF9SWF9JTlJBTkdFRVJSX09GRlNFVFxcdFxcdDB4MDAwMDA5MDhcXG4rXFxuKy8qIFhYViBNQUMgUmVnaXN0ZXIgTWFzayBEZWZpbml0aW9ucyAqL1xcbisjZGVmaW5lIFhYVl9HVF9SRVNFVF9NQVNLXFx0XFx0QklUKDApXFxuKyNkZWZpbmUgWFhWX1RDX1RYX01BU0tcXHRcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBYWFZfUkNXMV9SWF9NQVNLXFx0XFx0QklUKDApXFxuKyNkZWZpbmUgWFhWX1JDVzFfRkNTX01BU0tcXHRcXHRCSVQoMSlcXG4rI2RlZmluZSBYWFZfVENfRkNTX01BU0tcXHRcXHRcXHRCSVQoMSlcXG4rI2RlZmluZSBYWFZfUlhfQkxLTENLX01BU0tcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBYWFZfVElDS1JFR19TVEFURU5fTUFTS1xcdFxcdEJJVCgwKVxcbisjZGVmaW5lIFhYVl9HVFdJWl9SRVNFVF9ET05FXFx0XFx0KEJJVCgwKSB8IEJJVCgxKSlcXG4rI2RlZmluZSBYWFZfTUFKX01BU0tcXHRcXHRcXHRHRU5NQVNLKDcsIDApXFxuKyNkZWZpbmUgWFhWX01JTl9NQVNLXFx0XFx0XFx0R0VOTUFTSygxNSwgOClcXG4rLyogSVAgdjMuMisgZXhwb3NlcyBHVCB3aXphcmQgc3RhdHVzIGJlZm9yZSBvdGhlciByZWdpc3RlciBhY2Nlc3MgKFBHMjEwKS4gKi9cXG4rI2RlZmluZSBYWFZfSVBfVkVSX0dUV0laX01BSl9NSU5cXHQzXFxuKyNkZWZpbmUgWFhWX0lQX1ZFUl9HVFdJWl9NSU5fTUlOXFx0MlxcbisjZGVmaW5lIFhYVl9BTl9DT01QTEVURV9NQVNLXFx0XFx0QklUKDIpXFxuKyNkZWZpbmUgWFhWX1NUQVRfQ09SRV9TUEVFRF9SVFNXX01BU0tcXHRCSVQoMSlcXG4rI2RlZmluZSBYWFZfU1RBVF9DT1JFX1NQRUVEXzEwR19NQVNLXFx0QklUKDApXFxuKyNkZWZpbmUgWFhWX1JYX1NUQVRVU19NQVNLXFx0XFx0QklUKDApXFxuK1xcbisvKiBYWFYgKDEwRy8yNUcpIE1BQyBzdGF0aXN0aWNzIGNvdW50ZXJzLCB1c2VkIHRvIGluZGV4IHh4dl9zdGF0X2Jhc2VbXS4gKi9cXG4rZW51bSB4eHZfc3RhdCB7XFxuK1xcdFhYVl9TVEFUX1JYX1RPVEFMX1BBQ0tFVFMgPSAwLFxcbitcXHRYWFZfU1RBVF9SWF9UT1RBTF9HT09EX1BBQ0tFVFMsXFxuK1xcdFhYVl9TVEFUX1JYX1RPVEFMX0JZVEVTLFxcbitcXHRYWFZfU1RBVF9SWF9UT1RBTF9HT09EX0JZVEVTLFxcbitcXHRYWFZfU1RBVF9SWF9CQURfRkNTLFxcbitcXHRYWFZfU1RBVF9SWF9JTlJBTkdFRVJSLFxcbitcXHRYWFZfU1RBVF9SWF9NVUxUSUNBU1QsXFxuK1xcdFhYVl9TVEFUX1JYX0JST0FEQ0FTVCxcXG4rXFx0WFhWX1NUQVRfUlhfVU5ERVJTSVpFLFxcbitcXHRYWFZfU1RBVF9SWF9GUkFHTUVOVCxcXG4rXFx0WFhWX1NUQVRfUlhfSkFCQkVSLFxcbitcXHRYWFZfU1RBVF9SWF9PVkVSU0laRSxcXG4rXFx0WFhWX1NUQVRfUlhfUEFVU0UsXFxuK1xcdFhYVl9TVEFUX1RYX1RPVEFMX1BBQ0tFVFMsXFxuK1xcdFhYVl9TVEFUX1RYX1RPVEFMX0dPT0RfUEFDS0VUUyxcXG4rXFx0WFhWX1NUQVRfVFhfVE9UQUxfQllURVMsXFxuK1xcdFhYVl9TVEFUX1RYX1RPVEFMX0dPT0RfQllURVMsXFxuK1xcdFhYVl9TVEFUX1RYX0JBRF9GQ1MsXFxuK1xcdFhYVl9TVEFUX1RYX0ZSQU1FX0VSUk9SLFxcbitcXHRYWFZfU1RBVF9UWF9NVUxUSUNBU1QsXFxuK1xcdFhYVl9TVEFUX1RYX0JST0FEQ0FTVCxcXG4rXFx0WFhWX1NUQVRfVFhfUEFVU0UsXFxuK1xcdFhYVl9TVEFUX0NPVU5ULFxcbit9O1xcbitcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBheGllbmV0X2NvbmZpZyBheGllbmV0XzEwZzI1Z19jb25maWc7XFxuK1xcbisjZW5kaWYgLyogWElMSU5YX0FYSUVORVRfWFhWX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MDc6MTQuNjc2MzczMzg5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyODU5OTE5NTM5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdmVuZG9yLXNwZWNpZmljIFhpbGlueCBBWEkgLyBYWFYgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvKSwgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBYaWxpbnggWFhWIDEwRy8yNUcgRXRoZXJuZXQgU3Vic3lzdGVtIEZQR0EgSVAgY29yZS4gVGhpcyBoYXJkd2FyZSByZXF1aXJlcyBwaHlzaWNhbCBYaWxpbngvQU1EIEZQR0EvU29DIGhhcmR3YXJlIGFuZCBjYW5ub3QgYmUgcmVhY2hlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ1ZDUwMmZjMTkyOWY3M2UwZmViODA3MzlkYmRlMzJhMTc2OGQ4YzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMjowNzoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveGxueCx4eHYtZXRoZXJuZXQueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveGxueCx4eHYtZXRoZXJuZXQueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjJiZTNhZGUxMWQ0NjVcbi0tLSAvZGV2L251bGxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveGxueCx4eHYtZXRoZXJuZXQueWFtbFxuQEAgLTAsMCArMSwxMDcgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbislWUFNTCAxLjJcbistLS1cbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC94bG54LHh4di1ldGhlcm5ldC55YW1sI1xuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuK1xuK3RpdGxlOiBYaWxpbnggWFhWIDEwRy8yNUcgRXRoZXJuZXQgU3Vic3lzdGVtXG4rXG4rbWFpbnRhaW5lcnM6XG4rICAtIFJhZGhleSBTaHlhbSBQYW5kZXkgXHUwMDNjcmFkaGV5LnNoeWFtLnBhbmRleUBhbWQuY29tXHUwMDNlXG4rICAtIFN1cmFqIEd1cHRhIFx1MDAzY3N1cmFqLmd1cHRhMkBhbWQuY29tXHUwMDNlXG4rXG4rZGVzY3JpcHRpb246XG4rICBUaGUgWGlsaW54IFhYViBFdGhlcm5ldCBTdWJzeXN0ZW0gaW1wbGVtZW50cyBhIDEwRy8yNUcgRXRoZXJuZXQgTUFDIHdpdGggYW5cbisgIGluLWNvcmUgUENTL1BNQSBkcml2aW5nIGEgaGlnaC1zcGVlZCBzZXJpYWwgdHJhbnNjZWl2ZXIuIEl0IHN1cHBvcnRzIHRoZVxuKyAgMTBHQkFTRS1SIGFuZCAyNUdCQVNFLVIgbGluZSByYXRlcywgd2l0aCAyNUcgb3BlcmF0aW9uIGZvbGxvd2luZyB0aGUgMjVHXG4rICBFdGhlcm5ldCBDb25zb3J0aXVtIHNwZWNpZmljYXRpb24uIEl0IGhhcyBubyBleHRlcm5hbCBNRElPIFBIWSwgYW5kIGl0c1xuKyAgcGF5bG9hZCBpcyBtb3ZlZCBieSBhbiBleHRlcm5hbCBBWEkgRE1BIChvciBtdWx0aWNoYW5uZWwgRE1BKSBjb250cm9sbGVyXG4rICByZWZlcmVuY2VkIHRocm91Z2ggdGhlIFwiZG1hc1wiIHByb3BlcnR5LlxuK1xuK3Byb3BlcnRpZXM6XG4rICBjb21wYXRpYmxlOlxuKyAgICBjb25zdDogeGxueCx4eHYtZXRoZXJuZXQtMS4wXG4rXG4rICByZWc6XG4rICAgIG1heEl0ZW1zOiAxXG4rICAgIGRlc2NyaXB0aW9uOiBNQUMgY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVyIHNwYWNlLlxuK1xuKyAgY2xvY2tzOlxuKyAgICBpdGVtczpcbisgICAgICAtIGRlc2NyaXB0aW9uOiBSWCBBWEk0LVN0cmVhbSBjbG9jay5cbisgICAgICAtIGRlc2NyaXB0aW9uOiBHVCBEUlAgY2xvY2suXG4rICAgICAgLSBkZXNjcmlwdGlvbjogQVhJNC1MaXRlIHJlZ2lzdGVyIGNsb2NrLlxuK1xuKyAgY2xvY2stbmFtZXM6XG4rICAgIGl0ZW1zOlxuKyAgICAgIC0gY29uc3Q6IHJ4X2NvcmVcbisgICAgICAtIGNvbnN0OiBkcnBcbisgICAgICAtIGNvbnN0OiBzX2F4aVxuK1xuKyAgcGh5LW1vZGU6XG4rICAgIGVudW06XG4rICAgICAgLSAxMGdiYXNlLXJcbisgICAgICAtIDI1Z2Jhc2UtclxuK1xuKyAgeGxueCxyeG1lbTpcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgU2l6ZSBpbiBieXRlcyBvZiB0aGUgUngvVHggcGFja2V0IGJ1ZmZlciBtZW1vcnkgYnVpbHQgaW50byB0aGUgSVAuIEl0IGlzXG4rICAgICAgZml4ZWQgYnkgdGhlIGhhcmR3YXJlIGRlc2lnbiBhbmQgYm91bmRzIHRoZSBsYXJnZXN0IGZyYW1lIChqdW1ibyBNVFUpIHRoZVxuKyAgICAgIGRldmljZSBjYW4gYWNjZXB0LlxuKyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy91aW50MzJcbitcbisgIGRtYXM6XG4rICAgIG1pbkl0ZW1zOiAyXG4rICAgIG1heEl0ZW1zOiAzMlxuKyAgICBkZXNjcmlwdGlvbjogVFggYW5kIFJYIERNQSBjaGFubmVsIHBoYW5kbGUuXG4rXG4rICBkbWEtbmFtZXM6XG4rICAgIGl0ZW1zOlxuKyAgICAgIHBhdHRlcm46IFwiXlt0cl14X2NoYW4oWzAtOV18MVswLTVdKSRcIlxuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBTaG91bGQgYmUgXCJ0eF9jaGFuMFwiLCBcInR4X2NoYW4xXCIgLi4uIFwidHhfY2hhbjE1XCIgZm9yIERNQSBUeCBjaGFubmVsIGFuZFxuKyAgICAgIFwicnhfY2hhbjBcIiwgXCJyeF9jaGFuMVwiIC4uLiBcInJ4X2NoYW4xNVwiIGZvciBETUEgUnggY2hhbm5lbC5cbisgICAgbWluSXRlbXM6IDJcbisgICAgbWF4SXRlbXM6IDMyXG4rXG4rcmVxdWlyZWQ6XG4rICAtIGNvbXBhdGlibGVcbisgIC0gcmVnXG4rICAtIGNsb2Nrc1xuKyAgLSBjbG9jay1uYW1lc1xuKyAgLSBwaHktbW9kZVxuKyAgLSB4bG54LHJ4bWVtXG4rICAtIGRtYXNcbisgIC0gZG1hLW5hbWVzXG4rXG4rYWxsT2Y6XG4rICAtICRyZWY6IC9zY2hlbWFzL25ldC9ldGhlcm5ldC1jb250cm9sbGVyLnlhbWwjXG4rXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK2V4YW1wbGVzOlxuKyAgIyBTaW5nbGUgQVhJIERNQSBjaGFubmVsIHBhaXJcbisgIC0gfFxuKyAgICBldGhlcm5ldEA4MDAwMDAwMCB7XG4rICAgICAgICBjb21wYXRpYmxlID0gXCJ4bG54LHh4di1ldGhlcm5ldC0xLjBcIjtcbisgICAgICAgIHJlZyA9IFx1MDAzYzB4ODAwMDAwMDAgMHgxMDAwMFx1MDAzZTtcbisgICAgICAgIGNsb2NrLW5hbWVzID0gXCJyeF9jb3JlXCIsIFwiZHJwXCIsIFwic19heGlcIjtcbisgICAgICAgIGNsb2NrcyA9IFx1MDAzY1x1MDAyNnJ4X2Nsa1x1MDAzZSwgXHUwMDNjXHUwMDI2ZHJwX2Nsa1x1MDAzZSwgXHUwMDNjXHUwMDI2YXhpX2Nsa1x1MDAzZTtcbisgICAgICAgIGRtYS1uYW1lcyA9IFwidHhfY2hhbjBcIiwgXCJyeF9jaGFuMFwiO1xuKyAgICAgICAgZG1hcyA9IFx1MDAzY1x1MDAyNmF4aV9kbWEgMFx1MDAzZSwgXHUwMDNjXHUwMDI2YXhpX2RtYSAxXHUwMDNlO1xuKyAgICAgICAgcGh5LW1vZGUgPSBcIjI1Z2Jhc2UtclwiO1xuKyAgICAgICAgeGxueCxyeG1lbSA9IFx1MDAzYzB4ODAwMFx1MDAzZTtcbisgICAgfTtcbisgICMgTXVsdGljaGFubmVsIERNQSAoTUNETUEpIHdpdGggbXVsdGlwbGUgVHgvUnggY2hhbm5lbHNcbisgIC0gfFxuKyAgICBldGhlcm5ldEA4MDAxMDAwMCB7XG4rICAgICAgICBjb21wYXRpYmxlID0gXCJ4bG54LHh4di1ldGhlcm5ldC0xLjBcIjtcbisgICAgICAgIHJlZyA9IFx1MDAzYzB4ODAwMTAwMDAgMHgxMDAwMFx1MDAzZTtcbisgICAgICAgIGNsb2NrLW5hbWVzID0gXCJyeF9jb3JlXCIsIFwiZHJwXCIsIFwic19heGlcIjtcbisgICAgICAgIGNsb2NrcyA9IFx1MDAzY1x1MDAyNnJ4X2Nsa1x1MDAzZSwgXHUwMDNjXHUwMDI2ZHJwX2Nsa1x1MDAzZSwgXHUwMDNjXHUwMDI2YXhpX2Nsa1x1MDAzZTtcbisgICAgICAgIGRtYS1uYW1lcyA9IFwidHhfY2hhbjBcIiwgXCJ0eF9jaGFuMVwiLCBcInJ4X2NoYW4wXCIsIFwicnhfY2hhbjFcIjtcbisgICAgICAgIGRtYXMgPSBcdTAwM2NcdTAwMjZheGlfbWNkbWEgMFx1MDAzZSwgXHUwMDNjXHUwMDI2YXhpX21jZG1hIDFcdTAwM2UsXG4rICAgICAgICAgICAgICAgXHUwMDNjXHUwMDI2YXhpX21jZG1hIDE2XHUwMDNlLCBcdTAwM2NcdTAwMjZheGlfbWNkbWEgMTdcdTAwM2U7XG4rICAgICAgICBwaHktbW9kZSA9IFwiMTBnYmFzZS1yXCI7XG4rICAgICAgICB4bG54LHJ4bWVtID0gXHUwMDNjMHg4MDAwXHUwMDNlO1xuKyAgICB9O1xuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDBiNDJlODk4ZjRkOGUuLjRlZGM4YTczMDRkYjAgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0yOTg2MSw2ICsyOTg2MSw3IEBAIFhJTElOWCBBWEkgRVRIRVJORVQgRFJJVkVSXG4gTTpcdFJhZGhleSBTaHlhbSBQYW5kZXkgXHUwMDNjcmFkaGV5LnNoeWFtLnBhbmRleUBhbWQuY29tXHUwMDNlXG4gUzpcdE1haW50YWluZWRcbiBGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LGF4aS1ldGhlcm5ldC55YW1sXG4rRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveGxueCx4eHYtZXRoZXJuZXQueWFtbFxuIEY6XHRkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXQqXG4gXG4gWElMSU5YIENBTiBEUklWRVJcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvTWFrZWZpbGVcbmluZGV4IDdkN2RjMTc3MTQyM2UuLmRiOTBlNjkxZmVjNTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9NYWtlZmlsZVxuQEAgLTYsNSArNiw2IEBAXG4gbGxfdGVtYWMtb2JqcyA6PSBsbF90ZW1hY19tYWluLm8gbGxfdGVtYWNfbWRpby5vXG4gb2JqLSQoQ09ORklHX1hJTElOWF9MTF9URU1BQykgKz0gbGxfdGVtYWMub1xuIG9iai0kKENPTkZJR19YSUxJTlhfRU1BQ0xJVEUpICs9IHhpbGlueF9lbWFjbGl0ZS5vXG4teGlsaW54X2VtYWMtb2JqcyA6PSB4aWxpbnhfYXhpZW5ldF9tYWluLm8geGlsaW54X2F4aWVuZXRfbWRpby5vXG4reGlsaW54X2VtYWMtb2JqcyA6PSB4aWxpbnhfYXhpZW5ldF9tYWluLm8geGlsaW54X2F4aWVuZXRfbWRpby5vIFxcXG4rXHRcdCAgICB4aWxpbnhfYXhpZW5ldF94eHYub1xuIG9iai0kKENPTkZJR19YSUxJTlhfQVhJX0VNQUMpICs9IHhpbGlueF9lbWFjLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldC5oXG5pbmRleCBmY2QzYWFlZjI3ZmMzLi4yZWEwODZmYzRkYzM2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0LmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldC5oXG5AQCAtMTAsNiArMTAsNyBAQFxuICNkZWZpbmUgWElMSU5YX0FYSUVORVRfSFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RpbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbkBAIC0xNyw2ICsxOCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiBcbisjaW5jbHVkZSBcInhpbGlueF9heGllbmV0X3h4di5oXCJcbitcbiAvKiBQYWNrZXQgc2l6ZSBpbmZvICovXG4gI2RlZmluZSBYQUVfSERSX1NJWkVcdFx0XHQxNCAvKiBTaXplIG9mIEV0aGVybmV0IGhlYWRlciAqL1xuICNkZWZpbmUgWEFFX1RSTF9TSVpFXHRcdFx0IDQgLyogU2l6ZSBvZiBFdGhlcm5ldCB0cmFpbGVyIChGQ1MpICovXG5AQCAtNTQ1LDYgKzU0OCw5IEBAIHN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciB7XG4gICogQHR4X3JpbmdfdGFpbDogVFggc2tiIHJpbmcgYnVmZmVyIHRhaWwgaW5kZXguXG4gICogQHJ4X3JpbmdfaGVhZDogUlggc2tiIHJpbmcgYnVmZmVyIGhlYWQgaW5kZXguXG4gICogQHJ4X3JpbmdfdGFpbDogUlggc2tiIHJpbmcgYnVmZmVyIHRhaWwgaW5kZXguXG4rICogQHh4dl9pcF92ZXJzaW9uOiBYWFYgSVAgdmVyc2lvbi5cbisgKiBAeHh2X3N0YXRfYmFzZTogU29mdHdhcmUgYWNjdW11bGF0b3JzIGZvciB0aGUgWFhWIGNsZWFyLW9uLXRpY2sgY291bnRlcnMuXG4rICogQGF4aWVuZXRfY29uZmlnOiBNQUMtdHlwZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGFuZCBvcGVyYXRpb25zLlxuICAqL1xuIHN0cnVjdCBheGllbmV0X2xvY2FsIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuQEAgLTU5OCw2ICs2MDQsNyBAQCBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCB7XG4gXG4gXHR1NjQgaHdfc3RhdF9iYXNlW1NUQVRfQ09VTlRdO1xuIFx0dTMyIGh3X2xhc3RfY291bnRlcltTVEFUX0NPVU5UXTtcbitcdHU2NCB4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX0NPVU5UXTtcbiBcdHNlcWNvdW50X211dGV4X3QgaHdfc3RhdHNfc2VxY291bnQ7XG4gXHRzdHJ1Y3QgbXV0ZXggc3RhdHNfbG9jaztcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgc3RhdHNfd29yaztcbkBAIC02MjYsOCArNjMzLDg4IEBAIHN0cnVjdCBheGllbmV0X2xvY2FsIHtcbiBcdGludCB0eF9yaW5nX3RhaWw7XG4gXHRpbnQgcnhfcmluZ19oZWFkO1xuIFx0aW50IHJ4X3JpbmdfdGFpbDtcbitcdHUzMiB4eHZfaXBfdmVyc2lvbjtcbitcdGNvbnN0IHN0cnVjdCBheGllbmV0X2NvbmZpZyAqYXhpZW5ldF9jb25maWc7XG4gfTtcbiBcbisvKipcbisgKiBzdHJ1Y3QgYXhpZW5ldF9jb25maWcgLSBNQUMtdHlwZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGFuZCBvcGVyYXRpb25zXG4rICogQG1kaW86IE1BQyBoYXMgYW4gTURJTyBidXMgZm9yIGV4dGVybmFsIFBIWSBtYW5hZ2VtZW50XG4rICogQG1hY19pcnE6IE1BQyBoYXMgYSBkZWRpY2F0ZWQgY29yZSBpbnRlcnJ1cHRcbisgKiBAbGVnYWN5X2RtYTogTUFDIHN1cHBvcnRzIHRoZSBsZWdhY3kgKG5vbi1kbWFlbmdpbmUpIERNQSBtb2RlXG4rICogQHVjX2ZpbHRlcjogTUFDIGhhcyB1bmljYXN0IGFkZHJlc3MgZmlsdGVyIHJlZ2lzdGVyc1xuKyAqIEBtY19maWx0ZXI6IE1BQyBoYXMgbXVsdGljYXN0IGFkZHJlc3MgZmlsdGVyIHJlZ2lzdGVyc1xuKyAqIEB2bGFuOiBNQUMgc3VwcG9ydHMgVkxBTiBmcmFtZXMgYnkgZGVmYXVsdFxuKyAqIEBqdW1ibzogTUFDIHN1cHBvcnRzIGp1bWJvIGZyYW1lc1xuKyAqIEBkbWFfdHhfY3N1bTogTUFDIHN1cHBvcnRzIFRYIGNoZWNrc3VtIG9mZmxvYWRcbisgKiBAc3dfcGFkZGluZzogU2hvcnQgZnJhbWVzIG11c3QgYmUgcGFkZGVkIGluIHNvZnR3YXJlIGJlZm9yZSB0cmFuc21pdFxuKyAqIEBpbnRlcm5hbF9wY3M6IE1BQyBhbHdheXMgZHJpdmVzIGFuIGludGVybmFsIFBDU1xuKyAqIEByZWdzX246IE51bWJlciBvZiBNQUMgcmVnaXN0ZXJzIGV4cG9zZWQgdGhyb3VnaCBldGh0b29sIC1kXG4rICogQGNsa19pbml0OiBDYWxsYmFjayB0byBnZXQgYW5kIGVuYWJsZSB0aGUgTUFDLXNwZWNpZmljIGNsb2Nrc1xuKyAqIEBzZXRvcHRpb25zOiBDYWxsYmFjayB0byBwcm9ncmFtIE1BQyBoYXJkd2FyZSBvcHRpb25zXG4rICogQHByb2JlX2luaXQ6IENhbGxiYWNrIGZvciBNQUMtc3BlY2lmaWMgcHJvYmUtdGltZSBpbml0LCBvciBOVUxMIGlmIHVudXNlZFxuKyAqIEBndF9yZXNldDogQ2FsbGJhY2sgdG8gcmVzZXQgdGhlIHNlcmlhbCB0cmFuc2NlaXZlciAoR1QpLCBvciBOVUxMIGlmIHVudXNlZFxuKyAqIEBtYWNfaW5pdDogQ2FsbGJhY2sgZm9yIE1BQy1zcGVjaWZpYyBicmluZy11cCBhZnRlciB0aGUgRE1BIHJlc2V0XG4rICogQG1hY19saW5rX3VwOiBDYWxsYmFjayB0byBwcm9ncmFtIGxpbmsgc3BlZWQgYW5kIHBhdXNlIG9uIGxpbmsgdXAsIG9yIE5VTExcbisgKiBAZ2V0X3JlZ3M6IENhbGxiYWNrIHRvIGR1bXAgdGhlIE1BQyByZWdpc3RlcnMgZm9yIGV0aHRvb2wgLWRcbisgKiBAcGh5bGlua19zZXRfY2FwczogQ2FsbGJhY2sgdG8gc2V0IHBoeWxpbmsgTUFDIGNhcGFiaWxpdGllc1xuKyAqIEBwY3Nfb3BzOiBwaHlsaW5rIFBDUyBvcGVyYXRpb25zIGZvciB0aGlzIE1BQywgb3IgTlVMTCBpZiB1bnVzZWRcbisgKiBAc3RhdHNfdXBkYXRlOiBDYWxsYmFjayB0byBsYXRjaC9hY2N1bXVsYXRlIHRoZSBwZXJpb2RpYyBNQUMgY291bnRlcnNcbisgKiBAZ2V0X3N0YXRzNjQ6IENhbGxiYWNrIHRvIHJlYWQgTUFDIGNvdW50ZXJzIGludG8gcnRubF9saW5rX3N0YXRzNjRcbisgKiBAZ2V0X2V0aHRvb2xfc3RhdHM6IENhbGxiYWNrIHRvIHJlYWQgTUFDIGNvdW50ZXJzIGZvciBldGh0b29sIC1TXG4rICogQGdldF9zdHJpbmdzOiBDYWxsYmFjayB0byBmaWxsIHRoZSBldGh0b29sIC1TIHN0YXRpc3RpYyBuYW1lIHN0cmluZ3NcbisgKiBAZ2V0X3NzZXRfY291bnQ6IENhbGxiYWNrIHJldHVybmluZyB0aGUgbnVtYmVyIG9mIGV0aHRvb2wgLVMgc3RhdGlzdGljc1xuKyAqIEBnZXRfcGF1c2Vfc3RhdHM6IENhbGxiYWNrIHRvIHJlYWQgTUFDIHBhdXNlLWZyYW1lIGNvdW50ZXJzXG4rICogQGdldF9ldGhfbWFjX3N0YXRzOiBDYWxsYmFjayB0byByZWFkIElFRUUgODAyLjMgTUFDIGNvdW50ZXJzXG4rICogQGdldF9ldGhfY3RybF9zdGF0czogQ2FsbGJhY2sgdG8gcmVhZCBNQUMtY29udHJvbCBmcmFtZSBjb3VudGVycywgb3IgTlVMTFxuKyAqXHRcdFx0aWYgdGhlIE1BQyBleHBvc2VzIG5vIGNvbnRyb2wtZnJhbWUgY291bnRlcnNcbisgKiBAZ2V0X3Jtb25fc3RhdHM6IENhbGxiYWNrIHRvIHJlYWQgUk1PTiBjb3VudGVycyBhbmQgaGlzdG9ncmFtIHJhbmdlc1xuKyAqL1xuK3N0cnVjdCBheGllbmV0X2NvbmZpZyB7XG4rXHRib29sIG1kaW87XG4rXHRib29sIG1hY19pcnE7XG4rXHRib29sIGxlZ2FjeV9kbWE7XG4rXHRib29sIHVjX2ZpbHRlcjtcbitcdGJvb2wgbWNfZmlsdGVyO1xuK1x0Ym9vbCB2bGFuO1xuK1x0Ym9vbCBqdW1ibztcbitcdGJvb2wgZG1hX3R4X2NzdW07XG4rXHRib29sIHN3X3BhZGRpbmc7XG4rXHRib29sIGludGVybmFsX3BjcztcbitcdHVuc2lnbmVkIGludCByZWdzX247XG4rXHRpbnQgKCpjbGtfaW5pdCkoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKTtcbitcdHZvaWQgKCpzZXRvcHRpb25zKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIG9wdGlvbnMpO1xuK1x0dm9pZCAoKnByb2JlX2luaXQpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCk7XG4rXHR2b2lkICgqZ3RfcmVzZXQpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCk7XG4rXHRpbnQgKCptYWNfaW5pdCkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuK1x0dm9pZCAoKm1hY19saW5rX3VwKShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IHNwZWVkLFxuK1x0XHRcdCAgICBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKTtcbitcdHZvaWQgKCpnZXRfcmVncykoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLCB1MzIgKmRhdGEpO1xuK1x0dm9pZCAoKnBoeWxpbmtfc2V0X2NhcHMpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCxcbitcdFx0XHRcdCBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyk7XG4rXHRjb25zdCBzdHJ1Y3QgcGh5bGlua19wY3Nfb3BzICpwY3Nfb3BzO1xuK1x0dm9pZCAoKnN0YXRzX3VwZGF0ZSkoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKTtcbitcdHZvaWQgKCpnZXRfc3RhdHM2NCkoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuK1x0XHRcdCAgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKTtcbitcdHZvaWQgKCpnZXRfZXRodG9vbF9zdGF0cykoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLCB1NjQgKmRhdGEpO1xuK1x0dm9pZCAoKmdldF9zdHJpbmdzKSh1OCAqZGF0YSk7XG4rXHRpbnQgKCpnZXRfc3NldF9jb3VudCkodm9pZCk7XG4rXHR2b2lkICgqZ2V0X3BhdXNlX3N0YXRzKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXG4rXHRcdFx0XHRzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcGF1c2Vfc3RhdHMpO1xuK1x0dm9pZCAoKmdldF9ldGhfbWFjX3N0YXRzKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXG4rXHRcdFx0XHQgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cyk7XG4rXHR2b2lkICgqZ2V0X2V0aF9jdHJsX3N0YXRzKShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgZXRodG9vbF9ldGhfY3RybF9zdGF0cyAqY3RybF9zdGF0cyk7XG4rXHR2b2lkICgqZ2V0X3Jtb25fc3RhdHMpKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCxcbitcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcbitcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlICoqcmFuZ2VzKTtcbit9O1xuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGF4aWVuZXRfbG9jYWwgKnBjc190b19heGllbmV0X2xvY2FsKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxuK3tcbitcdHJldHVybiBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCwgcGNzKTtcbit9XG4rXG4gLyoqXG4gICogc3RydWN0IGF4aWVuZXRfb3B0aW9uIC0gVXNlZCB0byBzZXQgYXhpIGV0aGVybmV0IGhhcmR3YXJlIG9wdGlvbnNcbiAgKiBAb3B0Olx0T3B0aW9uIHRvIGJlIHNldC5cbkBAIC03NDEsNCArODI4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGF4aWVuZXRfZG1hX291dF9hZGRyKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwgb2ZmX3QgcmVnLFxuIGludCBheGllbmV0X21kaW9fc2V0dXAoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKTtcbiB2b2lkIGF4aWVuZXRfbWRpb190ZWFyZG93bihzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApO1xuIFxuKy8qIFJNT04gaGlzdG9ncmFtIHJhbmdlcyBzaGFyZWQgYnkgYWxsIE1BQyB0eXBlcyAqL1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgYXhpZW5ldF9ybW9uX3Jhbmdlc1tdO1xuK1xuICNlbmRpZiAvKiBYSUxJTlhfQVhJX0VORVRfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jXG5pbmRleCAxNzIyYjcwMzhmMzQwLi41OGUyMmYwZmQ3Yzk1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3hpbGlueF9heGllbmV0X21haW4uY1xuQEAgLTMzLDYgKzMzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9pcnEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX2FkZHJlc3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWF0aDY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuQEAgLTY1LDE2ICs2Niw2IEBAXG4gXG4gc3RhdGljIHZvaWQgYXhpZW5ldF9yeF9zdWJtaXRfZGVzYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4gXG4tLyogTWF0Y2ggdGFibGUgZm9yIG9mX3BsYXRmb3JtIGJpbmRpbmcgKi9cbi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBheGllbmV0X29mX21hdGNoW10gPSB7XG4tXHR7IC5jb21wYXRpYmxlID0gXCJ4bG54LGF4aS1ldGhlcm5ldC0xLjAwLmFcIiwgfSxcbi1cdHsgLmNvbXBhdGlibGUgPSBcInhsbngsYXhpLWV0aGVybmV0LTEuMDEuYVwiLCB9LFxuLVx0eyAuY29tcGF0aWJsZSA9IFwieGxueCxheGktZXRoZXJuZXQtMi4wMS5hXCIsIH0sXG4tXHR7fSxcbi19O1xuLVxuLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGF4aWVuZXRfb2ZfbWF0Y2gpO1xuLVxuIC8qIE9wdGlvbiB0YWJsZSBmb3Igc2V0dGluZyB1cCBBeGkgRXRoZXJuZXQgaGFyZHdhcmUgb3B0aW9ucyAqL1xuIHN0YXRpYyBzdHJ1Y3QgYXhpZW5ldF9vcHRpb24gYXhpZW5ldF9vcHRpb25zW10gPSB7XG4gXHQvKiBUdXJuIG9uIGp1bWJvIHBhY2tldCBzdXBwb3J0IGZvciBib3RoIFJ4IGFuZCBUeCAqL1xuQEAgLTQxOSw2ICs0MTAsOSBAQCBzdGF0aWMgdm9pZCBheGllbmV0X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihuZGV2LVx1MDAzZWRldl9hZGRyKSlcbiBcdFx0ZXRoX2h3X2FkZHJfcmFuZG9tKG5kZXYpO1xuIFxuK1x0aWYgKCFscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2V1Y19maWx0ZXIpXG4rXHRcdHJldHVybjtcbitcbiBcdC8qIFNldCB1cCB1bmljYXN0IE1BQyBhZGRyZXNzIGZpbHRlciBzZXQgaXRzIG1hYyBhZGRyZXNzICovXG4gXHRheGllbmV0X2lvdyhscCwgWEFFX1VBVzBfT0ZGU0VULFxuIFx0XHQgICAgKG5kZXYtXHUwMDNlZGV2X2FkZHJbMF0pIHxcbkBAIC00NjgsNiArNDYyLDkgQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHR1MzIgcmVnLCBhZjByZWcsIGFmMXJlZztcbiBcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFxuK1x0aWYgKCFscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VtY19maWx0ZXIpXG4rXHRcdHJldHVybjtcbitcbiBcdHJlZyA9IGF4aWVuZXRfaW9yKGxwLCBYQUVfRk1JX09GRlNFVCk7XG4gXHRyZWcgXHUwMDI2PSB+WEFFX0ZNSV9QTV9NQVNLO1xuIFx0aWYgKG5kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9QUk9NSVNDKVxuQEAgLTU3NiwxNiArNTczLDMxIEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfc3RhdHNfdXBkYXRlKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwgYm9vbCByZXNldClcbiBcdHdyaXRlX3NlcWNvdW50X2VuZChcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4gfVxuIFxuKy8qKlxuKyAqIGF4aWVuZXRfMWdfc3RhdHNfdXBkYXRlIC0gUmVmcmVzaCAxRyBNQUMgaGFyZHdhcmUgc3RhdGlzdGljc1xuKyAqIEBscDpcdFx0UG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcbisgKi9cbitzdGF0aWMgdm9pZCBheGllbmV0XzFnX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApXG4re1xuK1x0YXhpZW5ldF9zdGF0c191cGRhdGUobHAsIGZhbHNlKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgYXhpZW5ldF9yZWZyZXNoX3N0YXRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF4aWVuZXRfbG9jYWwsXG4gXHRcdFx0XHRcdFx0c3RhdHNfd29yay53b3JrKTtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2bHAtXHUwMDNlc3RhdHNfbG9jayk7XG4tXHRheGllbmV0X3N0YXRzX3VwZGF0ZShscCwgZmFsc2UpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxwLVx1MDAzZXN0YXRzX2xvY2spO1xuK1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZXN0YXRzX3VwZGF0ZSkge1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNmxwLVx1MDAzZXN0YXRzX2xvY2spO1xuK1x0XHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VzdGF0c191cGRhdGUobHApO1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bHAtXHUwMDNlc3RhdHNfbG9jayk7XG4rXHR9XG4gXG4tXHQvKiBKdXN0IGxlc3MgdGhhbiAyXjMyIGJ5dGVzIGF0IDIuNSBHQml0L3MgKi9cbitcdC8qIFJlLWFybSB0aGUgcG9sbCBiZWZvcmUgYW55IGNvdW50ZXIgY2FuIG92ZXJmbG93IGJldHdlZW4gdXBkYXRlczogdGhlXG4rXHQgKiAxRyBieXRlIGNvdW50ZXIgcmVhY2hlcyBqdXN0IHVuZGVyIDJeMzIgaW4gdGhpcyBpbnRlcnZhbCBhdCAyLjUgR2JpdC9zLFxuK1x0ICogYW5kIHRoZSBYWFYgaW50ZXJuYWwgYWNjdW11bGF0b3JzIG11c3QgYmUgbGF0Y2hlZCAodmlhIFRJQ0sgaW5cbitcdCAqIGF4aWVuZXRfeHh2X3N0YXRzX3VwZGF0ZSgpKSBiZWZvcmUgdGhleSBzYXR1cmF0ZSBhdCBsaW5lIHJhdGUuXG4rXHQgKi9cbiBcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZscC1cdTAwM2VzdGF0c193b3JrLCAxMyAqIEhaKTtcbiB9XG4gXG5AQCAtNTk0LDcgKzYwNiwxNiBAQCBzdGF0aWMgaW50IF9fYXhpZW5ldF9kZXZpY2VfcmVzZXQoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKVxuIFx0dTMyIHZhbHVlO1xuIFx0aW50IHJldDtcbiBcbi1cdC8qIFNhdmUgc3RhdGlzdGljcyBjb3VudGVycyBpbiBjYXNlIHRoZXkgd2lsbCBiZSByZXNldCAqL1xuK1x0LyogU2F2ZSBzdGF0aXN0aWNzIGNvdW50ZXJzIGluIGNhc2UgdGhleSB3aWxsIGJlIHJlc2V0LlxuK1x0ICpcbitcdCAqIFRoZSBYQUVfRkVBVFVSRV9TVEFUUyBibG9ja3MgaW4gdGhpcyBmdW5jdGlvbiByZWFkIHRoZSBURU1BQ1xuK1x0ICogc3RhdGlzdGljcyByZWdpc3RlcnMgYXQgWEFFX1NUQVRTX09GRlNFVCwgaS5lLiB0aGV5IGFzc3VtZSB0aGUgMUdcbitcdCAqIGNvdW50ZXIgbGF5b3V0LiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBfX2F4aWVuZXRfZGV2aWNlX3Jlc2V0KCkgaXNcbitcdCAqIG9ubHkgcmVhY2hlZCBvbiB0aGUgbGVnYWN5IChub24tZG1hZW5naW5lKSBETUEgcGF0aCwgd2hpY2ggdGhlXG4rXHQgKiBsZWdhY3lfZG1hIGNhcGFiaWxpdHkgcmVzdHJpY3RzIHRvIHRoZSAxRyBNQUMuIE1BQ3MgdGhhdCB1c2UgdGhlaXJcbitcdCAqIG93biBzdGF0aXN0aWNzIG1lY2hhbmlzbSAoZS5nLiBYWFYsIHdoaWNoIGlzIGRtYWVuZ2luZS1vbmx5KSBuZXZlclxuK1x0ICogZXhlY3V0ZSB0aGlzIHBhdGguXG4rXHQgKi9cbiBcdG11dGV4X2xvY2soXHUwMDI2bHAtXHUwMDNlc3RhdHNfbG9jayk7XG4gXHRpZiAobHAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IFhBRV9GRUFUVVJFX1NUQVRTKVxuIFx0XHRheGllbmV0X3N0YXRzX3VwZGF0ZShscCwgdHJ1ZSk7XG5AQCAtNjk0LDYgKzcxNSwzMiBAQCBzdGF0aWMgdm9pZCBheGllbmV0X2RtYV9zdG9wKHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcbiBcdGF4aWVuZXRfdW5sb2NrX21paShscCk7XG4gfVxuIFxuKy8qKlxuKyAqIGF4aWVuZXRfMWdfbWFjX2luaXQgLSAxRyBNQUMtc3BlY2lmaWMgYnJpbmctdXAgYWZ0ZXIgdGhlIERNQSByZXNldFxuKyAqIEBuZGV2Olx0UG9pbnRlciB0byB0aGUgbmV0X2RldmljZSBzdHJ1Y3R1cmVcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyIG90aGVyd2lzZS5cbisgKi9cbitzdGF0aWMgaW50IGF4aWVuZXRfMWdfbWFjX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXHR1MzIgYXhpZW5ldF9zdGF0dXM7XG4rXG4rXHRheGllbmV0X3N0YXR1cyA9IGF4aWVuZXRfaW9yKGxwLCBYQUVfUkNXMV9PRkZTRVQpO1xuK1x0YXhpZW5ldF9zdGF0dXMgXHUwMDI2PSB+WEFFX1JDVzFfUlhfTUFTSztcbitcdGF4aWVuZXRfaW93KGxwLCBYQUVfUkNXMV9PRkZTRVQsIGF4aWVuZXRfc3RhdHVzKTtcbitcbitcdGF4aWVuZXRfc3RhdHVzID0gYXhpZW5ldF9pb3IobHAsIFhBRV9JUF9PRkZTRVQpO1xuK1x0aWYgKGF4aWVuZXRfc3RhdHVzIFx1MDAyNiBYQUVfSU5UX1JYUkpFQ1RfTUFTSylcbitcdFx0YXhpZW5ldF9pb3cobHAsIFhBRV9JU19PRkZTRVQsIFhBRV9JTlRfUlhSSkVDVF9NQVNLKTtcbitcdGF4aWVuZXRfaW93KGxwLCBYQUVfSUVfT0ZGU0VULCBscC1cdTAwM2VldGhfaXJxIFx1MDAzZSAwID9cbitcdFx0ICAgIFhBRV9JTlRfUkVDVl9FUlJPUl9NQVNLIDogMCk7XG4rXG4rXHRheGllbmV0X2lvdyhscCwgWEFFX0ZDQ19PRkZTRVQsIFhBRV9GQ0NfRkNSWF9NQVNLKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiAvKipcbiAgKiBheGllbmV0X2RldmljZV9yZXNldCAtIFJlc2V0IGFuZCBpbml0aWFsaXplIHRoZSBBeGkgRXRoZXJuZXQgaGFyZHdhcmUuXG4gICogQG5kZXY6XHRQb2ludGVyIHRvIHRoZSBuZXRfZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTcwOSwxOSArNzU2LDIzIEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfZG1hX3N0b3Aoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKVxuICAqL1xuIHN0YXRpYyBpbnQgYXhpZW5ldF9kZXZpY2VfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuLVx0dTMyIGF4aWVuZXRfc3RhdHVzO1xuIFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHRpbnQgcmV0O1xuIFxuK1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWd0X3Jlc2V0KVxuK1x0XHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VndF9yZXNldChscCk7XG4rXG4gXHRscC1cdTAwM2VtYXhfZnJtX3NpemUgPSBYQUVfTUFYX1ZMQU5fRlJBTUVfU0laRTtcbi1cdGxwLVx1MDAzZW9wdGlvbnMgfD0gWEFFX09QVElPTl9WTEFOO1xuK1xuK1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZXZsYW4pXG4rXHRcdGxwLVx1MDAzZW9wdGlvbnMgfD0gWEFFX09QVElPTl9WTEFOO1xuIFx0bHAtXHUwMDNlb3B0aW9ucyBcdTAwMjY9ICh+WEFFX09QVElPTl9KVU1CTyk7XG4gXG4gXHRpZiAobmRldi1cdTAwM2VtdHUgXHUwMDNlIFhBRV9NVFUgXHUwMDI2XHUwMDI2IG5kZXYtXHUwMDNlbXR1IFx1MDAzYz0gWEFFX0pVTUJPX01UVSkge1xuIFx0XHRscC1cdTAwM2VtYXhfZnJtX3NpemUgPSBuZGV2LVx1MDAzZW10dSArIFZMQU5fRVRIX0hMRU4gK1xuIFx0XHRcdFx0XHRYQUVfVFJMX1NJWkU7XG4gXG4tXHRcdGlmIChscC1cdTAwM2VtYXhfZnJtX3NpemUgXHUwMDNjPSBscC1cdTAwM2VyeG1lbSlcbitcdFx0aWYgKGxwLVx1MDAzZW1heF9mcm1fc2l6ZSBcdTAwM2M9IGxwLVx1MDAzZXJ4bWVtIFx1MDAyNlx1MDAyNiBscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VqdW1ibylcbiBcdFx0XHRscC1cdTAwM2VvcHRpb25zIHw9IFhBRV9PUFRJT05fSlVNQk87XG4gXHR9XG4gXG5AQCAtNzM4LDI2ICs3ODksMTggQEAgc3RhdGljIGludCBheGllbmV0X2RldmljZV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdFx0fVxuIFx0fVxuIFxuLVx0YXhpZW5ldF9zdGF0dXMgPSBheGllbmV0X2lvcihscCwgWEFFX1JDVzFfT0ZGU0VUKTtcbi1cdGF4aWVuZXRfc3RhdHVzIFx1MDAyNj0gflhBRV9SQ1cxX1JYX01BU0s7XG4tXHRheGllbmV0X2lvdyhscCwgWEFFX1JDVzFfT0ZGU0VULCBheGllbmV0X3N0YXR1cyk7XG4tXG4tXHRheGllbmV0X3N0YXR1cyA9IGF4aWVuZXRfaW9yKGxwLCBYQUVfSVBfT0ZGU0VUKTtcbi1cdGlmIChheGllbmV0X3N0YXR1cyBcdTAwMjYgWEFFX0lOVF9SWFJKRUNUX01BU0spXG4tXHRcdGF4aWVuZXRfaW93KGxwLCBYQUVfSVNfT0ZGU0VULCBYQUVfSU5UX1JYUkpFQ1RfTUFTSyk7XG4tXHRheGllbmV0X2lvdyhscCwgWEFFX0lFX09GRlNFVCwgbHAtXHUwMDNlZXRoX2lycSBcdTAwM2UgMCA/XG4tXHRcdCAgICBYQUVfSU5UX1JFQ1ZfRVJST1JfTUFTSyA6IDApO1xuLVxuLVx0YXhpZW5ldF9pb3cobHAsIFhBRV9GQ0NfT0ZGU0VULCBYQUVfRkNDX0ZDUlhfTUFTSyk7XG4rXHRyZXQgPSBscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VtYWNfaW5pdChuZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHQvKiBTeW5jIGRlZmF1bHQgb3B0aW9ucyB3aXRoIEhXIGJ1dCBsZWF2ZSByZWNlaXZlciBhbmRcbiBcdCAqIHRyYW5zbWl0dGVyIGRpc2FibGVkLlxuIFx0ICovXG4tXHRheGllbmV0X3NldG9wdGlvbnMobmRldiwgbHAtXHUwMDNlb3B0aW9ucyBcdTAwMjZcbi1cdFx0XHQgICB+KFhBRV9PUFRJT05fVFhFTiB8IFhBRV9PUFRJT05fUlhFTikpO1xuK1x0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlc2V0b3B0aW9ucyhuZGV2LCBscC1cdTAwM2VvcHRpb25zIFx1MDAyNlxuK1x0XHRcdFx0ICAgICAgIH4oWEFFX09QVElPTl9UWEVOIHwgWEFFX09QVElPTl9SWEVOKSk7XG4gXHRheGllbmV0X3NldF9tYWNfYWRkcmVzcyhuZGV2LCBOVUxMKTtcbiBcdGF4aWVuZXRfc2V0X211bHRpY2FzdF9saXN0KG5kZXYpO1xuLVx0YXhpZW5ldF9zZXRvcHRpb25zKG5kZXYsIGxwLVx1MDAzZW9wdGlvbnMpO1xuK1x0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlc2V0b3B0aW9ucyhuZGV2LCBscC1cdTAwM2VvcHRpb25zKTtcbiBcbiBcdG5ldGlmX3RyYW5zX3VwZGF0ZShuZGV2KTtcbiBcbkBAIC05MTUsNiArOTU4LDEzIEBAIGF4aWVuZXRfc3RhcnRfeG1pdF9kbWFlbmdpbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRpbnQgc2dfbGVuO1xuIFx0aW50IHJldDtcbiBcbitcdGlmIChscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2Vzd19wYWRkaW5nIFx1MDAyNlx1MDAyNiBldGhfc2tiX3BhZChza2IpKSB7XG4rXHRcdC8qIFBhZCBzaG9ydCBmcmFtZXM7IHRoZSBNQUMgZG9lcyBub3QgYXBwZW5kIEV0aGVybmV0IHBhZGRpbmcuICovXG4rXHRcdG5kZXYtXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xuK1x0XHRuZGV2LVx1MDAzZXN0YXRzLnR4X2Vycm9ycysrO1xuK1x0XHRyZXR1cm4gTkVUREVWX1RYX09LO1xuK1x0fVxuK1xuIFx0ZG1hX2RldiA9IGxwLVx1MDAzZXR4X2NoYW4tXHUwMDNlZGV2aWNlO1xuIFx0c2dfbGVuID0gc2tiX3NoaW5mbyhza2IpLVx1MDAzZW5yX2ZyYWdzICsgMTtcbiBcdGlmIChDSVJDX1NQQUNFKGxwLVx1MDAzZXR4X3JpbmdfaGVhZCwgbHAtXHUwMDNldHhfcmluZ190YWlsLCBUWF9CRF9OVU1fTUFYKSBcdTAwM2M9IDEpIHtcbkBAIC05MzksMTkgKzk4OSwyMSBAQCBheGllbmV0X3N0YXJ0X3htaXRfZG1hZW5naW5lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHRnb3RvIHhtaXRfZXJyb3JfZHJvcF9za2I7XG4gXG4gXHQvKiBGaWxsIHVwIGFwcCBmaWVsZHMgZm9yIGNoZWNrc3VtICovXG4tXHRpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7XG4tXHRcdGlmIChscC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgWEFFX0ZFQVRVUkVfRlVMTF9UWF9DU1VNKSB7XG4tXHRcdFx0LyogVHggRnVsbCBDaGVja3N1bSBPZmZsb2FkIEVuYWJsZWQgKi9cbi1cdFx0XHRhcHBfbWV0YWRhdGFbMF0gfD0gMjtcbi1cdFx0fSBlbHNlIGlmIChscC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgWEFFX0ZFQVRVUkVfUEFSVElBTF9UWF9DU1VNKSB7XG4tXHRcdFx0Y3N1bV9zdGFydF9vZmYgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xuLVx0XHRcdGNzdW1faW5kZXhfb2ZmID0gY3N1bV9zdGFydF9vZmYgKyBza2ItXHUwMDNlY3N1bV9vZmZzZXQ7XG4tXHRcdFx0LyogVHggUGFydGlhbCBDaGVja3N1bSBPZmZsb2FkIEVuYWJsZWQgKi9cbi1cdFx0XHRhcHBfbWV0YWRhdGFbMF0gfD0gMTtcbi1cdFx0XHRhcHBfbWV0YWRhdGFbMV0gPSAoY3N1bV9zdGFydF9vZmYgXHUwMDNjXHUwMDNjIDE2KSB8IGNzdW1faW5kZXhfb2ZmO1xuK1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWRtYV90eF9jc3VtKSB7XG4rXHRcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHtcbitcdFx0XHRpZiAobHAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IFhBRV9GRUFUVVJFX0ZVTExfVFhfQ1NVTSkge1xuK1x0XHRcdFx0LyogVHggRnVsbCBDaGVja3N1bSBPZmZsb2FkIEVuYWJsZWQgKi9cbitcdFx0XHRcdGFwcF9tZXRhZGF0YVswXSB8PSAyO1xuK1x0XHRcdH0gZWxzZSBpZiAobHAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IFhBRV9GRUFUVVJFX1BBUlRJQUxfVFhfQ1NVTSkge1xuK1x0XHRcdFx0Y3N1bV9zdGFydF9vZmYgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xuK1x0XHRcdFx0Y3N1bV9pbmRleF9vZmYgPSBjc3VtX3N0YXJ0X29mZiArIHNrYi1cdTAwM2Vjc3VtX29mZnNldDtcbitcdFx0XHRcdC8qIFR4IFBhcnRpYWwgQ2hlY2tzdW0gT2ZmbG9hZCBFbmFibGVkICovXG4rXHRcdFx0XHRhcHBfbWV0YWRhdGFbMF0gfD0gMTtcbitcdFx0XHRcdGFwcF9tZXRhZGF0YVsxXSA9IChjc3VtX3N0YXJ0X29mZiBcdTAwM2NcdTAwM2MgMTYpIHwgY3N1bV9pbmRleF9vZmY7XG4rXHRcdFx0fVxuK1x0XHR9IGVsc2UgaWYgKHNrYi1cdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHtcbitcdFx0XHRhcHBfbWV0YWRhdGFbMF0gfD0gMjsgLyogVHggRnVsbCBDaGVja3N1bSBPZmZsb2FkIEVuYWJsZWQgKi9cbiBcdFx0fVxuLVx0fSBlbHNlIGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7XG4tXHRcdGFwcF9tZXRhZGF0YVswXSB8PSAyOyAvKiBUeCBGdWxsIENoZWNrc3VtIE9mZmxvYWQgRW5hYmxlZCAqL1xuIFx0fVxuIFxuIFx0ZG1hX3R4X2Rlc2MgPSBkbWFfZGV2LVx1MDAzZWRldmljZV9wcmVwX3NsYXZlX3NnKGxwLVx1MDAzZXR4X2NoYW4sIHNrYnVmX2RtYS1cdTAwM2VzZ2wsXG5AQCAtMTY3MCw2ICsxNzIyLDEwIEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0YXhpZW5ldF9sb2NrX21paShscCk7XG4gXHRyZXQgPSBheGllbmV0X2RldmljZV9yZXNldChuZGV2KTtcbiBcdGF4aWVuZXRfdW5sb2NrX21paShscCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIobHAtXHUwMDNlZGV2LCBcImF4aWVuZXRfZGV2aWNlX3Jlc2V0KCkgZmFpbGVkOiAlZFxcblwiLCByZXQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuIFxuIFx0cmV0ID0gcGh5bGlua19vZl9waHlfY29ubmVjdChscC1cdTAwM2VwaHlsaW5rLCBscC1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZSwgMCk7XG4gXHRpZiAocmV0KSB7XG5AQCAtMTczOCwxMiArMTc5NCwxNyBAQCBzdGF0aWMgaW50IGF4aWVuZXRfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bHAtXHUwMDNlcnhfZGltLndvcmspO1xuIFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmxwLVx1MDAzZXN0YXRzX3dvcmspO1xuK1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZXN0YXRzX3VwZGF0ZSkge1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNmxwLVx1MDAzZXN0YXRzX2xvY2spO1xuK1x0XHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VzdGF0c191cGRhdGUobHApO1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bHAtXHUwMDNlc3RhdHNfbG9jayk7XG4rXHR9XG4gXG4gXHRwaHlsaW5rX3N0b3AobHAtXHUwMDNlcGh5bGluayk7XG4gXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KGxwLVx1MDAzZXBoeWxpbmspO1xuIFxuLVx0YXhpZW5ldF9zZXRvcHRpb25zKG5kZXYsIGxwLVx1MDAzZW9wdGlvbnMgXHUwMDI2XG4tXHRcdFx0ICAgfihYQUVfT1BUSU9OX1RYRU4gfCBYQUVfT1BUSU9OX1JYRU4pKTtcbitcdGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZXNldG9wdGlvbnMobmRldiwgbHAtXHUwMDNlb3B0aW9ucyBcdTAwMjZcbitcdFx0XHRcdCAgICAgICB+KFhBRV9PUFRJT05fVFhFTiB8IFhBRV9PUFRJT05fUlhFTikpO1xuIFxuIFx0aWYgKCFscC1cdTAwM2V1c2VfZG1hZW5naW5lKSB7XG4gXHRcdGF4aWVuZXRfZG1hX3N0b3AobHApO1xuQEAgLTE3NjksNyArMTgzMCw4IEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0fVxuIFxuIFx0bmV0ZGV2X3Jlc2V0X3F1ZXVlKG5kZXYpO1xuLVx0YXhpZW5ldF9pb3cobHAsIFhBRV9JRV9PRkZTRVQsIDApO1xuK1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZW1hY19pcnEpXG4rXHRcdGF4aWVuZXRfaW93KGxwLCBYQUVfSUVfT0ZGU0VULCAwKTtcbiBcbiBcdGlmIChscC1cdTAwM2VldGhfaXJxIFx1MDAzZSAwKVxuIFx0XHRmcmVlX2lycShscC1cdTAwM2VldGhfaXJxLCBuZGV2KTtcbkBAIC0xODM0LDI5ICsxODk2LDExIEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKVxuIFx0cmV0dXJuIHBoeWxpbmtfbWlpX2lvY3RsKGxwLVx1MDAzZXBoeWxpbmssIHJxLCBjbWQpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZFxuLWF4aWVuZXRfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cylcbitzdGF0aWMgdm9pZCBheGllbmV0XzFnX2dldF9zdGF0czY0KHN0cnVjdCBheGllbmV0X2xvY2FsICpscCxcbitcdFx0XHRcdCAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXG4ge1xuLVx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHVuc2lnbmVkIGludCBzdGFydDtcbiBcbi1cdG5ldGRldl9zdGF0c190b19zdGF0czY0KHN0YXRzLCBcdTAwMjZkZXYtXHUwMDNlc3RhdHMpO1xuLVxuLVx0ZG8ge1xuLVx0XHRzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihcdTAwMjZscC1cdTAwM2VyeF9zdGF0X3N5bmMpO1xuLVx0XHRzdGF0cy1cdTAwM2VyeF9wYWNrZXRzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bHAtXHUwMDNlcnhfcGFja2V0cyk7XG4tXHRcdHN0YXRzLVx1MDAzZXJ4X2J5dGVzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bHAtXHUwMDNlcnhfYnl0ZXMpO1xuLVx0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFx1MDAyNmxwLVx1MDAzZXJ4X3N0YXRfc3luYywgc3RhcnQpKTtcbi1cbi1cdGRvIHtcbi1cdFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXHUwMDI2bHAtXHUwMDNldHhfc3RhdF9zeW5jKTtcbi1cdFx0c3RhdHMtXHUwMDNldHhfcGFja2V0cyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNmxwLVx1MDAzZXR4X3BhY2tldHMpO1xuLVx0XHRzdGF0cy1cdTAwM2V0eF9ieXRlcyA9IHU2NF9zdGF0c19yZWFkKFx1MDAyNmxwLVx1MDAzZXR4X2J5dGVzKTtcbi1cdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcdTAwMjZscC1cdTAwM2V0eF9zdGF0X3N5bmMsIHN0YXJ0KSk7XG4tXG4tXHRpZiAoIShscC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgWEFFX0ZFQVRVUkVfU1RBVFMpKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRkbyB7XG4gXHRcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4gXHRcdHN0YXRzLVx1MDAzZXJ4X2xlbmd0aF9lcnJvcnMgPVxuQEAgLTE4ODQsNiArMTkyOCwzMyBAQCBheGllbmV0X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXG4gXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpO1xuIH1cbiBcbitzdGF0aWMgdm9pZFxuK2F4aWVuZXRfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdGF0cylcbit7XG4rXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0dW5zaWduZWQgaW50IHN0YXJ0O1xuK1xuK1x0bmV0ZGV2X3N0YXRzX3RvX3N0YXRzNjQoc3RhdHMsIFx1MDAyNmRldi1cdTAwM2VzdGF0cyk7XG4rXG4rXHRkbyB7XG4rXHRcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFx1MDAyNmxwLVx1MDAzZXJ4X3N0YXRfc3luYyk7XG4rXHRcdHN0YXRzLVx1MDAzZXJ4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZscC1cdTAwM2VyeF9wYWNrZXRzKTtcbitcdFx0c3RhdHMtXHUwMDNlcnhfYnl0ZXMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZscC1cdTAwM2VyeF9ieXRlcyk7XG4rXHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXHUwMDI2bHAtXHUwMDNlcnhfc3RhdF9zeW5jLCBzdGFydCkpO1xuK1xuK1x0ZG8ge1xuK1x0XHRzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihcdTAwMjZscC1cdTAwM2V0eF9zdGF0X3N5bmMpO1xuK1x0XHRzdGF0cy1cdTAwM2V0eF9wYWNrZXRzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bHAtXHUwMDNldHhfcGFja2V0cyk7XG4rXHRcdHN0YXRzLVx1MDAzZXR4X2J5dGVzID0gdTY0X3N0YXRzX3JlYWQoXHUwMDI2bHAtXHUwMDNldHhfYnl0ZXMpO1xuK1x0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFx1MDAyNmxwLVx1MDAzZXR4X3N0YXRfc3luYywgc3RhcnQpKTtcbitcbitcdGlmICghKGxwLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VnZXRfc3RhdHM2NClcbitcdFx0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X3N0YXRzNjQobHAsIHN0YXRzKTtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBheGllbmV0X25ldGRldl9vcHMgPSB7XG4gXHQubmRvX29wZW4gPSBheGllbmV0X29wZW4sXG4gXHQubmRvX3N0b3AgPSBheGllbmV0X3N0b3AsXG5AQCAtMTkzOCwzMCArMjAwOSwxOCBAQCBzdGF0aWMgdm9pZCBheGllbmV0X2V0aHRvb2xzX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuICAqL1xuIHN0YXRpYyBpbnQgYXhpZW5ldF9ldGh0b29sc19nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuLVx0cmV0dXJuIHNpemVvZih1MzIpICogQVhJRU5FVF9SRUdTX047XG4rXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcbitcdHJldHVybiBzaXplb2YodTMyKSAqIGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZXJlZ3NfbjtcbiB9XG4gXG4gLyoqXG4tICogYXhpZW5ldF9ldGh0b29sc19nZXRfcmVncyAtIER1bXAgdGhlIGNvbnRlbnRzIG9mIGFsbCByZWdpc3RlcnMgcHJlc2VudFxuLSAqXHRcdFx0ICAgICAgIGluIEF4aUV0aGVybmV0IGNvcmUuXG4tICogQG5kZXY6XHRQb2ludGVyIHRvIG5ldF9kZXZpY2Ugc3RydWN0dXJlXG4tICogQHJlZ3M6XHRQb2ludGVyIHRvIGV0aHRvb2xfcmVncyBzdHJ1Y3R1cmVcbi0gKiBAcmV0Olx0Vm9pZCBwb2ludGVyIHVzZWQgdG8gcmV0dXJuIHRoZSBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXJzLlxuLSAqXG4tICogVGhpcyBpbXBsZW1lbnRzIGV0aHRvb2wgY29tbWFuZCBmb3IgZ2V0dGluZyB0aGUgQXhpIEV0aGVybmV0IHJlZ2lzdGVyIGR1bXAuXG4tICogSXNzdWUgXCJldGh0b29sIC1kIGV0aFhcIiB0byBleGVjdXRlIHRoaXMgZnVuY3Rpb24uXG4rICogYXhpZW5ldF8xZ19nZXRfcmVncyAtIER1bXAgMUcgTUFDIHJlZ2lzdGVycyBmb3IgZXRodG9vbFxuKyAqIEBscDpcdFx0UG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcbisgKiBAZGF0YTpcdEJ1ZmZlciBmb3IgcmVnaXN0ZXIgdmFsdWVzICh6ZXJvZWQgYW5kIHNpemVkIGJ5IHRoZSBjYWxsZXIpXG4gICovXG4tc3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbi1cdFx0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsIHZvaWQgKnJldClcbitzdGF0aWMgdm9pZCBheGllbmV0XzFnX2dldF9yZWdzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCwgdTMyICpkYXRhKVxuIHtcbi1cdHUzMiAqZGF0YSA9ICh1MzIgKilyZXQ7XG4tXHRzaXplX3QgbGVuID0gc2l6ZW9mKHUzMikgKiBBWElFTkVUX1JFR1NfTjtcbi1cdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVxuLVx0cmVncy1cdTAwM2V2ZXJzaW9uID0gMDtcbi1cdHJlZ3MtXHUwMDNlbGVuID0gbGVuO1xuLVxuLVx0bWVtc2V0KGRhdGEsIDAsIGxlbik7XG4gXHRkYXRhWzBdID0gYXhpZW5ldF9pb3IobHAsIFhBRV9SQUZfT0ZGU0VUKTtcbiBcdGRhdGFbMV0gPSBheGllbmV0X2lvcihscCwgWEFFX1RQRl9PRkZTRVQpO1xuIFx0ZGF0YVsyXSA9IGF4aWVuZXRfaW9yKGxwLCBYQUVfSUZHUF9PRkZTRVQpO1xuQEAgLTIwMDIsNiArMjA2MSwzMSBAQCBzdGF0aWMgdm9pZCBheGllbmV0X2V0aHRvb2xzX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0fVxuIH1cbiBcbisvKipcbisgKiBheGllbmV0X2V0aHRvb2xzX2dldF9yZWdzIC0gRHVtcCB0aGUgY29udGVudHMgb2YgYWxsIHJlZ2lzdGVycyBwcmVzZW50XG4rICpcdFx0XHQgICAgICAgaW4gQXhpRXRoZXJuZXQgY29yZS5cbisgKiBAbmRldjpcdFBvaW50ZXIgdG8gbmV0X2RldmljZSBzdHJ1Y3R1cmVcbisgKiBAcmVnczpcdFBvaW50ZXIgdG8gZXRodG9vbF9yZWdzIHN0cnVjdHVyZVxuKyAqIEByZXQ6XHRWb2lkIHBvaW50ZXIgdXNlZCB0byByZXR1cm4gdGhlIGNvbnRlbnRzIG9mIHRoZSByZWdpc3RlcnMuXG4rICpcbisgKiBUaGlzIGltcGxlbWVudHMgZXRodG9vbCBjb21tYW5kIGZvciBnZXR0aW5nIHRoZSBBeGkgRXRoZXJuZXQgcmVnaXN0ZXIgZHVtcC5cbisgKiBJc3N1ZSBcImV0aHRvb2wgLWQgZXRoWFwiIHRvIGV4ZWN1dGUgdGhpcyBmdW5jdGlvbi5cbisgKi9cbitzdGF0aWMgdm9pZCBheGllbmV0X2V0aHRvb2xzX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywgdm9pZCAqcmV0KVxuK3tcbitcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1x0dTMyICpkYXRhID0gKHUzMiAqKXJldDtcbitcdHNpemVfdCBsZW47XG4rXG4rXHRsZW4gPSBzaXplb2YodTMyKSAqIGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZXJlZ3NfbjtcbitcdHJlZ3MtXHUwMDNldmVyc2lvbiA9IDA7XG4rXHRyZWdzLVx1MDAzZWxlbiA9IGxlbjtcbitcbitcdG1lbXNldChkYXRhLCAwLCBsZW4pO1xuK1x0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X3JlZ3MobHAsIGRhdGEpO1xuK31cbitcbiBzdGF0aWMgdm9pZFxuIGF4aWVuZXRfZXRodG9vbHNfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICplcmluZyxcbkBAIC0yMzAzLDExICsyMzg3LDggQEAgc3RhdGljIGludCBheGllbmV0X2V0aHRvb2xzX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldChscC1cdTAwM2VwaHlsaW5rKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLVx0XHRcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLFxuLVx0XHRcdFx0XHQgICAgICAgdTY0ICpkYXRhKVxuK3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLCB1NjQgKmRhdGEpXG4ge1xuLVx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHVuc2lnbmVkIGludCBzdGFydDtcbiBcbiBcdGRvIHtcbkBAIC0yMzI0LDYgKzI0MDUsMTcgQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeShcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCwgc3RhcnQpKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLFxuK1x0XHRcdFx0XHQgICAgICAgdTY0ICpkYXRhKVxuK3tcbitcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7XG4rXG4rXHRpZiAobHAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IFhBRV9GRUFUVVJFX1NUQVRTIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWdldF9ldGh0b29sX3N0YXRzKVxuK1x0XHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VnZXRfZXRodG9vbF9zdGF0cyhscCwgZGF0YSk7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBjaGFyIGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHtcbiBcdFwiUmVjZWl2ZWQgYnl0ZXNcIixcbiBcdFwiVHJhbnNtaXR0ZWQgYnl0ZXNcIixcbkBAIC0yMzM2LDEyICsyNDI4LDI2IEBAIHN0YXRpYyBjb25zdCBjaGFyIGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHtcbiBcdFwiVXNlciBEZWZpbmVkIENvdW50ZXIgMlwiLFxuIH07XG4gXG4rc3RhdGljIHZvaWQgYXhpZW5ldF8xZ19nZXRfc3RyaW5ncyh1OCAqZGF0YSlcbit7XG4rXHRtZW1jcHkoZGF0YSwgYXhpZW5ldF9ldGh0b29sX3N0YXRzX3N0cmluZ3MsXG4rXHQgICAgICAgc2l6ZW9mKGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzKSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYXhpZW5ldF8xZ19nZXRfc3NldF9jb3VudCh2b2lkKVxuK3tcbitcdHJldHVybiBBUlJBWV9TSVpFKGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgYXhpZW5ldF9ldGh0b29sc19nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSlcbiB7XG4rXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1xuIFx0c3dpdGNoIChzdHJpbmdzZXQpIHtcbiBcdGNhc2UgRVRIX1NTX1NUQVRTOlxuLVx0XHRtZW1jcHkoZGF0YSwgYXhpZW5ldF9ldGh0b29sX3N0YXRzX3N0cmluZ3MsXG4tXHRcdCAgICAgICBzaXplb2YoYXhpZW5ldF9ldGh0b29sX3N0YXRzX3N0cmluZ3MpKTtcbitcdFx0aWYgKGxwLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUyBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWdldF9zdHJpbmdzKVxuK1x0XHRcdGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWdldF9zdHJpbmdzKGRhdGEpO1xuIFx0XHRicmVhaztcbiBcdH1cbiB9XG5AQCAtMjM1MiwyNCArMjQ1OCwyMCBAQCBzdGF0aWMgaW50IGF4aWVuZXRfZXRodG9vbHNfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpXG4gXG4gXHRzd2l0Y2ggKHNzZXQpIHtcbiBcdGNhc2UgRVRIX1NTX1NUQVRTOlxuLVx0XHRpZiAobHAtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IFhBRV9GRUFUVVJFX1NUQVRTKVxuLVx0XHRcdHJldHVybiBBUlJBWV9TSVpFKGF4aWVuZXRfZXRodG9vbF9zdGF0c19zdHJpbmdzKTtcbitcdFx0aWYgKGxwLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUyBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWdldF9zc2V0X2NvdW50KVxuK1x0XHRcdHJldHVybiBscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VnZXRfc3NldF9jb3VudCgpO1xuIFx0XHRmYWxsdGhyb3VnaDtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbiB9XG4gXG4tc3RhdGljIHZvaWRcbi1heGllbmV0X2V0aHRvb2xzX2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLVx0XHRcdFx0IHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cylcbitzdGF0aWMgdm9pZCBheGllbmV0XzFnX2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKVxuIHtcbi1cdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7XG4gXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4gXG4tXHRpZiAoIShscC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgWEFFX0ZFQVRVUkVfU1RBVFMpKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRkbyB7XG4gXHRcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4gXHRcdHBhdXNlX3N0YXRzLVx1MDAzZXR4X3BhdXNlX2ZyYW1lcyA9XG5AQCAtMjM4MCwxNSArMjQ4MiwyMyBAQCBheGllbmV0X2V0aHRvb2xzX2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIH1cbiBcbiBzdGF0aWMgdm9pZFxuLWF4aWVuZXRfZXRodG9vbF9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLVx0XHRcdFx0ICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpXG4rYXhpZW5ldF9ldGh0b29sc19nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdCBzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcGF1c2Vfc3RhdHMpXG4ge1xuIFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdHVuc2lnbmVkIGludCBzdGFydDtcbiBcbiBcdGlmICghKGxwLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXG4gXHRcdHJldHVybjtcbiBcbitcdGlmIChscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VnZXRfcGF1c2Vfc3RhdHMpXG4rXHRcdGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWdldF9wYXVzZV9zdGF0cyhscCwgcGF1c2Vfc3RhdHMpO1xuK31cbitcbitzdGF0aWMgdm9pZCBheGllbmV0XzFnX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBheGllbmV0X2xvY2FsICpscCxcbitcdFx0XHRcdFx0IHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cylcbit7XG4rXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4rXG4gXHRkbyB7XG4gXHRcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4gXHRcdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNUcmFuc21pdHRlZE9LID1cbkBAIC0yNDI1LDE1ICsyNTM1LDI0IEBAIGF4aWVuZXRfZXRodG9vbF9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIH1cbiBcbiBzdGF0aWMgdm9pZFxuLWF4aWVuZXRfZXRodG9vbF9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHRcdCAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKVxuK2F4aWVuZXRfZXRodG9vbF9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0ICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpXG4ge1xuIFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdHVuc2lnbmVkIGludCBzdGFydDtcbiBcbiBcdGlmICghKGxwLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXG4gXHRcdHJldHVybjtcbiBcbitcdGlmIChscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VnZXRfZXRoX21hY19zdGF0cylcbitcdFx0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X2V0aF9tYWNfc3RhdHMobHAsIG1hY19zdGF0cyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkXG4rYXhpZW5ldF8xZ19nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKVxuK3tcbitcdHVuc2lnbmVkIGludCBzdGFydDtcbitcbiBcdGRvIHtcbiBcdFx0c3RhcnQgPSByZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcbiBcdFx0Y3RybF9zdGF0cy1cdTAwM2VNQUNDb250cm9sRnJhbWVzVHJhbnNtaXR0ZWQgPVxuQEAgLTI0NDUsNyArMjU2NCwyMCBAQCBheGllbmV0X2V0aHRvb2xfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpO1xuIH1cbiBcbi1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIGF4aWVuZXRfcm1vbl9yYW5nZXNbXSA9IHtcbitzdGF0aWMgdm9pZFxuK2F4aWVuZXRfZXRodG9vbF9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdCAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKVxuK3tcbitcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7XG4rXG4rXHRpZiAoIShscC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgWEFFX0ZFQVRVUkVfU1RBVFMpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAobHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X2V0aF9jdHJsX3N0YXRzKVxuK1x0XHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VnZXRfZXRoX2N0cmxfc3RhdHMobHAsIGN0cmxfc3RhdHMpO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgYXhpZW5ldF9ybW9uX3Jhbmdlc1tdID0ge1xuIFx0eyAgIDY0LCAgICA2NCB9LFxuIFx0eyAgIDY1LCAgIDEyNyB9LFxuIFx0eyAgMTI4LCAgIDI1NSB9LFxuQEAgLTI0NTcsMTYgKzI1ODksMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSBheGllbmV0X3Jtb25fcmFuZ2VzW10gPSB7XG4gfTtcbiBcbiBzdGF0aWMgdm9pZFxuLWF4aWVuZXRfZXRodG9vbF9nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLVx0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxuLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpXG4rYXhpZW5ldF8xZ19nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXG4rXHRcdFx0ICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxuK1x0XHRcdCAgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlICoqcmFuZ2VzKVxuIHtcbi1cdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7XG4gXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4gXG4tXHRpZiAoIShscC1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgWEFFX0ZFQVRVUkVfU1RBVFMpKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRkbyB7XG4gXHRcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4gXHRcdHJtb25fc3RhdHMtXHUwMDNldW5kZXJzaXplX3BrdHMgPVxuQEAgLTI1MTAsNiArMjYzOCwyMCBAQCBheGllbmV0X2V0aHRvb2xfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdCpyYW5nZXMgPSBheGllbmV0X3Jtb25fcmFuZ2VzO1xuIH1cbiBcbitzdGF0aWMgdm9pZFxuK2F4aWVuZXRfZXRodG9vbF9nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxuK1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpXG4re1xuK1x0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcbitcdGlmICghKGxwLVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBYQUVfRkVBVFVSRV9TVEFUUykpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VnZXRfcm1vbl9zdGF0cylcbitcdFx0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlZ2V0X3Jtb25fc3RhdHMobHAsIHJtb25fc3RhdHMsIHJhbmdlcyk7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXhpZW5ldF9ldGh0b29sX29wcyA9IHtcbiBcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9NQVhfRlJBTUVTIHxcbiBcdFx0XHRcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XG5AQCAtMjU1NSwxMSArMjY5Nyw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXhpZW5ldF9ldGh0b29sX2RtYWVuZ2luZV9vcHMgPSB7XG4gXHQuZ2V0X3Jtb25fc3RhdHMgPSBheGllbmV0X2V0aHRvb2xfZ2V0X3Jtb25fc3RhdHMsXG4gfTtcbiBcbi1zdGF0aWMgc3RydWN0IGF4aWVuZXRfbG9jYWwgKnBjc190b19heGllbmV0X2xvY2FsKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxuLXtcbi1cdHJldHVybiBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgYXhpZW5ldF9sb2NhbCwgcGNzKTtcbi19XG4tXG4gc3RhdGljIHZvaWQgYXhpZW5ldF9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgbmVnX21vZGUsXG4gXHRcdFx0XHQgIHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuQEAgLTI2MTksNyArMjc1Niw5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKmF4aWVuZXRfbWFjX3NlbGVjdF9wY3Moc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4gXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcbiBcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB8fFxuLVx0ICAgIGludGVyZmFjZSA9PSAgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKVxuK1x0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkgfHxcbitcdCAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSIHx8XG4rXHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8yNUdCQVNFUilcbiBcdFx0cmV0dXJuIFx1MDAyNmxwLVx1MDAzZXBjcztcbiBcbiBcdHJldHVybiBOVUxMO1xuQEAgLTI2MzgsMTMgKzI3NzcsOSBAQCBzdGF0aWMgdm9pZCBheGllbmV0X21hY19saW5rX2Rvd24oc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4gXHQvKiBub3RoaW5nIG1lYW5pbmdmdWwgdG8gZG8gKi9cbiB9XG4gXG4tc3RhdGljIHZvaWQgYXhpZW5ldF9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbi1cdFx0XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXG4tXHRcdFx0XHR1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcbi1cdFx0XHRcdGludCBzcGVlZCwgaW50IGR1cGxleCxcbi1cdFx0XHRcdGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpXG4rc3RhdGljIHZvaWQgYXhpZW5ldF8xZ19tYWNfbGlua191cChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IHNwZWVkLFxuK1x0XHRcdFx0ICAgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSlcbiB7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHRvX25ldF9kZXYoY29uZmlnLVx1MDAzZWRldik7XG4gXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdHUzMiBlbW1jX3JlZywgZmNjX3JlZztcbiBcbkBAIC0yNjgxLDYgKzI4MTYsMTkgQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcdGF4aWVuZXRfaW93KGxwLCBYQUVfRkNDX09GRlNFVCwgZmNjX3JlZyk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGF4aWVuZXRfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4rXHRcdFx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuK1x0XHRcdFx0dW5zaWduZWQgaW50IG1vZGUsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsXG4rXHRcdFx0XHRpbnQgc3BlZWQsIGludCBkdXBsZXgsXG4rXHRcdFx0XHRib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gdG9fbmV0X2Rldihjb25maWctXHUwMDNlZGV2KTtcbitcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1xuK1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZW1hY19saW5rX3VwKVxuK1x0XHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VtYWNfbGlua191cChuZGV2LCBzcGVlZCwgdHhfcGF1c2UsIHJ4X3BhdXNlKTtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgYXhpZW5ldF9waHlsaW5rX29wcyA9IHtcbiBcdC5tYWNfc2VsZWN0X3BjcyA9IGF4aWVuZXRfbWFjX3NlbGVjdF9wY3MsXG4gXHQubWFjX2NvbmZpZyA9IGF4aWVuZXRfbWFjX2NvbmZpZyxcbkBAIC0yNjk4LDcgKzI4NDYsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBheGllbmV0X3BoeWxpbmtfb3BzID0ge1xuIHN0YXRpYyB2b2lkIGF4aWVuZXRfZG1hX2Vycl9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHR1MzIgaTtcbi1cdHUzMiBheGllbmV0X3N0YXR1cztcbiBcdHN0cnVjdCBheGlkbWFfYmQgKmN1cl9wO1xuIFx0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBheGllbmV0X2xvY2FsLFxuIFx0XHRcdFx0XHRcdGRtYV9lcnJfdGFzayk7XG5AQCAtMjcxMSw4ICsyODU4LDggQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9kbWFfZXJyX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0bmFwaV9kaXNhYmxlKFx1MDAyNmxwLVx1MDAzZW5hcGlfdHgpO1xuIFx0bmFwaV9kaXNhYmxlKFx1MDAyNmxwLVx1MDAzZW5hcGlfcngpO1xuIFxuLVx0YXhpZW5ldF9zZXRvcHRpb25zKG5kZXYsIGxwLVx1MDAzZW9wdGlvbnMgXHUwMDI2XG4tXHRcdFx0ICAgfihYQUVfT1BUSU9OX1RYRU4gfCBYQUVfT1BUSU9OX1JYRU4pKTtcbitcdGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZXNldG9wdGlvbnMobmRldiwgbHAtXHUwMDNlb3B0aW9ucyBcdTAwMjZcbitcdFx0XHRcdCAgICAgICB+KFhBRV9PUFRJT05fVFhFTiB8IFhBRV9PUFRJT05fUlhFTikpO1xuIFxuIFx0YXhpZW5ldF9kbWFfc3RvcChscCk7XG4gXHRuZXRkZXZfcmVzZXRfcXVldWUobmRldik7XG5AQCAtMjc1NywyOSArMjkwNCwxMjYgQEAgc3RhdGljIHZvaWQgYXhpZW5ldF9kbWFfZXJyX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIFx0YXhpZW5ldF9kbWFfc3RhcnQobHApO1xuIFxuLVx0YXhpZW5ldF9zdGF0dXMgPSBheGllbmV0X2lvcihscCwgWEFFX1JDVzFfT0ZGU0VUKTtcbi1cdGF4aWVuZXRfc3RhdHVzIFx1MDAyNj0gflhBRV9SQ1cxX1JYX01BU0s7XG4tXHRheGllbmV0X2lvdyhscCwgWEFFX1JDVzFfT0ZGU0VULCBheGllbmV0X3N0YXR1cyk7XG4tXG4tXHRheGllbmV0X3N0YXR1cyA9IGF4aWVuZXRfaW9yKGxwLCBYQUVfSVBfT0ZGU0VUKTtcbi1cdGlmIChheGllbmV0X3N0YXR1cyBcdTAwMjYgWEFFX0lOVF9SWFJKRUNUX01BU0spXG4tXHRcdGF4aWVuZXRfaW93KGxwLCBYQUVfSVNfT0ZGU0VULCBYQUVfSU5UX1JYUkpFQ1RfTUFTSyk7XG4tXHRheGllbmV0X2lvdyhscCwgWEFFX0lFX09GRlNFVCwgbHAtXHUwMDNlZXRoX2lycSBcdTAwM2UgMCA/XG4tXHRcdCAgICBYQUVfSU5UX1JFQ1ZfRVJST1JfTUFTSyA6IDApO1xuLVx0YXhpZW5ldF9pb3cobHAsIFhBRV9GQ0NfT0ZGU0VULCBYQUVfRkNDX0ZDUlhfTUFTSyk7XG4rXHQvKiBUaGlzIGVycm9yIGhhbmRsZXIgcnVucyBvbmx5IGZvciB0aGUgbGVnYWN5IGVtYmVkZGVkLURNQSAoMUcpIHBhdGgsXG4rXHQgKiB3aG9zZSBtYWNfaW5pdCgpIGNhbm5vdCBmYWlsLCBzbyBpdHMgcmV0dXJuIHZhbHVlIGlzIG5vdCBjaGVja2VkLlxuK1x0ICovXG4rXHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VtYWNfaW5pdChuZGV2KTtcbiBcbiBcdC8qIFN5bmMgZGVmYXVsdCBvcHRpb25zIHdpdGggSFcgYnV0IGxlYXZlIHJlY2VpdmVyIGFuZFxuIFx0ICogdHJhbnNtaXR0ZXIgZGlzYWJsZWQuXG4gXHQgKi9cbi1cdGF4aWVuZXRfc2V0b3B0aW9ucyhuZGV2LCBscC1cdTAwM2VvcHRpb25zIFx1MDAyNlxuLVx0XHRcdCAgIH4oWEFFX09QVElPTl9UWEVOIHwgWEFFX09QVElPTl9SWEVOKSk7XG4rXHRscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VzZXRvcHRpb25zKG5kZXYsIGxwLVx1MDAzZW9wdGlvbnMgXHUwMDI2XG4rXHRcdFx0XHQgICAgICAgfihYQUVfT1BUSU9OX1RYRU4gfCBYQUVfT1BUSU9OX1JYRU4pKTtcbiBcdGF4aWVuZXRfc2V0X21hY19hZGRyZXNzKG5kZXYsIE5VTEwpO1xuIFx0YXhpZW5ldF9zZXRfbXVsdGljYXN0X2xpc3QobmRldik7XG4gXHRuYXBpX2VuYWJsZShcdTAwMjZscC1cdTAwM2VuYXBpX3J4KTtcbiBcdG5hcGlfZW5hYmxlKFx1MDAyNmxwLVx1MDAzZW5hcGlfdHgpO1xuLVx0YXhpZW5ldF9zZXRvcHRpb25zKG5kZXYsIGxwLVx1MDAzZW9wdGlvbnMpO1xuK1x0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlc2V0b3B0aW9ucyhuZGV2LCBscC1cdTAwM2VvcHRpb25zKTtcbit9XG4rXG4rLyoqXG4rICogYXhpZW5ldF8xZ19waHlsaW5rX3NldF9jYXBzIC0gU2V0IDFHIHBoeWxpbmsgY2FwYWJpbGl0aWVzIGFuZCBpbnRlcmZhY2VzXG4rICogQGxwOlx0XHRQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuKyAqIEBjb25maWc6XHRQb2ludGVyIHRvIHRoZSBwaHlsaW5rX2NvbmZpZyBzdHJ1Y3R1cmVcbisgKi9cbitzdGF0aWMgdm9pZCBheGllbmV0XzFnX3BoeWxpbmtfc2V0X2NhcHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZylcbit7XG4rXHRjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTBGRCB8IE1BQ18xMDBGRCB8IE1BQ18xMDAwRkQ7XG4rXHRfX3NldF9iaXQobHAtXHUwMDNlcGh5X21vZGUsIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXHRpZiAobHAtXHUwMDNlc3dpdGNoX3hfc2dtaWkpIHtcbitcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgsXG4rXHRcdFx0ICBjb25maWctXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuK1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLFxuK1x0XHRcdCAgY29uZmlnLVx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbitcdH1cbit9XG4rXG4rLyoqXG4rICogYXhpZW5ldF8xZ19jbGtfaW5pdCAtIEdldCBhbmQgZW5hYmxlIHRoZSAxRyBNQUMgY2xvY2tzXG4rICogQGxwOlx0XHRQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIgb3RoZXJ3aXNlLlxuKyAqL1xuK3N0YXRpYyBpbnQgYXhpZW5ldF8xZ19jbGtfaW5pdChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gbHAtXHUwMDNlZGV2O1xuK1x0aW50IHJldDtcbitcbitcdGxwLVx1MDAzZWF4aV9jbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWxfZW5hYmxlZChkZXYsIFwic19heGlfbGl0ZV9jbGtcIik7XG4rXHRpZiAoIWxwLVx1MDAzZWF4aV9jbGspIHtcbitcdFx0LyogRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGlmIG5hbWVkIEFYSSBjbG9jayBpcyBub3RcbitcdFx0ICogcHJlc2VudCwgdHJlYXQgdGhlIGZpcnN0IGNsb2NrIHNwZWNpZmllZCBhcyB0aGUgQVhJIGNsb2NrLlxuK1x0XHQgKi9cbitcdFx0bHAtXHUwMDNlYXhpX2NsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbF9lbmFibGVkKGRldiwgTlVMTCk7XG4rXHR9XG4rXHRpZiAoSVNfRVJSKGxwLVx1MDAzZWF4aV9jbGspKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIobHAtXHUwMDNlYXhpX2NsayksXG4rXHRcdFx0XHQgICAgIFwiY291bGQgbm90IGdldCBBWEkgY2xvY2tcXG5cIik7XG4rXG4rXHRscC1cdTAwM2VtaXNjX2Nsa3NbMF0uaWQgPSBcImF4aXNfY2xrXCI7XG4rXHRscC1cdTAwM2VtaXNjX2Nsa3NbMV0uaWQgPSBcInJlZl9jbGtcIjtcbitcdGxwLVx1MDAzZW1pc2NfY2xrc1syXS5pZCA9IFwibWd0X2Nsa1wiO1xuK1xuK1x0cmV0ID0gZGV2bV9jbGtfYnVsa19nZXRfb3B0aW9uYWxfZW5hYmxlKGRldiwgWEFFX05VTV9NSVNDX0NMT0NLUyxcbitcdFx0XHRcdFx0XHRscC1cdTAwM2VtaXNjX2Nsa3MpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4rXHRcdFx0XHQgICAgIFwiY291bGQgbm90IGdldC9lbmFibGUgbWlzYy4gY2xvY2tzXFxuXCIpO1xuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuKy8qKlxuKyAqIGF4aWVuZXRfMWdfcHJvYmVfaW5pdCAtIDFHIE1BQy1zcGVjaWZpYyBwcm9iZS10aW1lIGluaXRpYWxpemF0aW9uXG4rICogQGxwOlx0XHRQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuKyAqL1xuK3N0YXRpYyB2b2lkIGF4aWVuZXRfMWdfcHJvYmVfaW5pdChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApXG4re1xuK1x0aWYgKGF4aWVuZXRfaW9yKGxwLCBYQUVfQUJJTElUWV9PRkZTRVQpIFx1MDAyNiBYQUVfQUJJTElUWV9TVEFUUylcbitcdFx0bHAtXHUwMDNlZmVhdHVyZXMgfD0gWEFFX0ZFQVRVUkVfU1RBVFM7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXhpZW5ldF9jb25maWcgYXhpZW5ldF8xZ19jb25maWcgPSB7XG4rXHQubWRpbyA9IHRydWUsXG4rXHQubWFjX2lycSA9IHRydWUsXG4rXHQubGVnYWN5X2RtYSA9IHRydWUsXG4rXHQudWNfZmlsdGVyID0gdHJ1ZSxcbitcdC5tY19maWx0ZXIgPSB0cnVlLFxuK1x0LnZsYW4gPSB0cnVlLFxuK1x0Lmp1bWJvID0gdHJ1ZSxcbitcdC5kbWFfdHhfY3N1bSA9IHRydWUsXG4rXHQucmVnc19uID0gQVhJRU5FVF9SRUdTX04sXG4rXHQuY2xrX2luaXQgPSBheGllbmV0XzFnX2Nsa19pbml0LFxuK1x0LnNldG9wdGlvbnMgPSBheGllbmV0X3NldG9wdGlvbnMsXG4rXHQucHJvYmVfaW5pdCA9IGF4aWVuZXRfMWdfcHJvYmVfaW5pdCxcbitcdC5tYWNfaW5pdCA9IGF4aWVuZXRfMWdfbWFjX2luaXQsXG4rXHQubWFjX2xpbmtfdXAgPSBheGllbmV0XzFnX21hY19saW5rX3VwLFxuK1x0LmdldF9yZWdzID0gYXhpZW5ldF8xZ19nZXRfcmVncyxcbitcdC5waHlsaW5rX3NldF9jYXBzID0gYXhpZW5ldF8xZ19waHlsaW5rX3NldF9jYXBzLFxuK1x0LnBjc19vcHMgPSBcdTAwMjZheGllbmV0X3Bjc19vcHMsXG4rXHQuc3RhdHNfdXBkYXRlID0gYXhpZW5ldF8xZ19zdGF0c191cGRhdGUsXG4rXHQuZ2V0X3N0YXRzNjQgPSBheGllbmV0XzFnX2dldF9zdGF0czY0LFxuK1x0LmdldF9ldGh0b29sX3N0YXRzID0gYXhpZW5ldF8xZ19nZXRfZXRodG9vbF9zdGF0cyxcbitcdC5nZXRfc3RyaW5ncyA9IGF4aWVuZXRfMWdfZ2V0X3N0cmluZ3MsXG4rXHQuZ2V0X3NzZXRfY291bnQgPSBheGllbmV0XzFnX2dldF9zc2V0X2NvdW50LFxuK1x0LmdldF9wYXVzZV9zdGF0cyA9IGF4aWVuZXRfMWdfZ2V0X3BhdXNlX3N0YXRzLFxuK1x0LmdldF9ldGhfbWFjX3N0YXRzID0gYXhpZW5ldF8xZ19nZXRfZXRoX21hY19zdGF0cyxcbitcdC5nZXRfZXRoX2N0cmxfc3RhdHMgPSBheGllbmV0XzFnX2dldF9ldGhfY3RybF9zdGF0cyxcbitcdC5nZXRfcm1vbl9zdGF0cyA9IGF4aWVuZXRfMWdfZ2V0X3Jtb25fc3RhdHMsXG4rfTtcbitcbisvKiBNYXRjaCB0YWJsZSBmb3Igb2ZfcGxhdGZvcm0gYmluZGluZyAqL1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGF4aWVuZXRfb2ZfbWF0Y2hbXSA9IHtcbitcdHsgLmNvbXBhdGlibGUgPSBcInhsbngsYXhpLWV0aGVybmV0LTEuMDAuYVwiLCAuZGF0YSA9IFx1MDAyNmF4aWVuZXRfMWdfY29uZmlnIH0sXG4rXHR7IC5jb21wYXRpYmxlID0gXCJ4bG54LGF4aS1ldGhlcm5ldC0xLjAxLmFcIiwgLmRhdGEgPSBcdTAwMjZheGllbmV0XzFnX2NvbmZpZyB9LFxuK1x0eyAuY29tcGF0aWJsZSA9IFwieGxueCxheGktZXRoZXJuZXQtMi4wMS5hXCIsIC5kYXRhID0gXHUwMDI2YXhpZW5ldF8xZ19jb25maWcgfSxcbitcdHsgLmNvbXBhdGlibGUgPSBcInhsbngseHh2LWV0aGVybmV0LTEuMFwiLCAuZGF0YSA9IFx1MDAyNmF4aWVuZXRfMTBnMjVnX2NvbmZpZyB9LFxuK1x0e30sXG4rfTtcbitcbitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBheGllbmV0X29mX21hdGNoKTtcbitcbiAvKipcbiAgKiBheGllbmV0X3Byb2JlIC0gQXhpIEV0aGVybmV0IHByb2JlIGZ1bmN0aW9uLlxuICAqIEBwZGV2Olx0UG9pbnRlciB0byBwbGF0Zm9ybSBkZXZpY2Ugc3RydWN0dXJlLlxuQEAgLTI4MzAsMjcgKzMwNzQsMTMgQEAgc3RhdGljIGludCBheGllbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRzZXFjb3VudF9tdXRleF9pbml0KFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50LCBcdTAwMjZscC1cdTAwM2VzdGF0c19sb2NrKTtcbiBcdElOSVRfREVGRVJSQUJMRV9XT1JLKFx1MDAyNmxwLVx1MDAzZXN0YXRzX3dvcmssIGF4aWVuZXRfcmVmcmVzaF9zdGF0cyk7XG4gXG4tXHRscC1cdTAwM2VheGlfY2xrID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsX2VuYWJsZWQoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4tXHRcdFx0XHRcdFx0ICAgIFwic19heGlfbGl0ZV9jbGtcIik7XG4tXHRpZiAoIWxwLVx1MDAzZWF4aV9jbGspIHtcbi1cdFx0LyogRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGlmIG5hbWVkIEFYSSBjbG9jayBpcyBub3QgcHJlc2VudCxcbi1cdFx0ICogdHJlYXQgdGhlIGZpcnN0IGNsb2NrIHNwZWNpZmllZCBhcyB0aGUgQVhJIGNsb2NrLlxuLVx0XHQgKi9cbi1cdFx0bHAtXHUwMDNlYXhpX2NsayA9IGRldm1fY2xrX2dldF9vcHRpb25hbF9lbmFibGVkKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBOVUxMKTtcbi1cdH1cbi1cdGlmIChJU19FUlIobHAtXHUwMDNlYXhpX2NsaykpXG4tXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBQVFJfRVJSKGxwLVx1MDAzZWF4aV9jbGspLFxuLVx0XHRcdFx0ICAgICBcImNvdWxkIG5vdCBnZXQgQVhJIGNsb2NrXFxuXCIpO1xuK1x0bHAtXHUwMDNlYXhpZW5ldF9jb25maWcgPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuK1x0aWYgKCFscC1cdTAwM2VheGllbmV0X2NvbmZpZylcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4tXHRscC1cdTAwM2VtaXNjX2Nsa3NbMF0uaWQgPSBcImF4aXNfY2xrXCI7XG4tXHRscC1cdTAwM2VtaXNjX2Nsa3NbMV0uaWQgPSBcInJlZl9jbGtcIjtcbi1cdGxwLVx1MDAzZW1pc2NfY2xrc1syXS5pZCA9IFwibWd0X2Nsa1wiO1xuLVxuLVx0cmV0ID0gZGV2bV9jbGtfYnVsa19nZXRfb3B0aW9uYWxfZW5hYmxlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBYQUVfTlVNX01JU0NfQ0xPQ0tTLFxuLVx0XHRcdFx0XHRcdGxwLVx1MDAzZW1pc2NfY2xrcyk7XG4rXHRyZXQgPSBscC1cdTAwM2VheGllbmV0X2NvbmZpZy1cdTAwM2VjbGtfaW5pdChscCk7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcmV0LFxuLVx0XHRcdFx0ICAgICBcImNvdWxkIG5vdCBnZXQvZW5hYmxlIG1pc2MuIGNsb2Nrc1xcblwiKTtcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdC8qIE1hcCBkZXZpY2UgcmVnaXN0ZXJzICovXG4gXHRscC1cdTAwM2VyZWdzID0gZGV2bV9wbGF0Zm9ybV9nZXRfYW5kX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCwgXHUwMDI2ZXRocmVzKTtcbkBAIC0yODYxLDkgKzMwOTEsNiBAQCBzdGF0aWMgaW50IGF4aWVuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdC8qIFNldHVwIGNoZWNrc3VtIG9mZmxvYWQsIGJ1dCBkZWZhdWx0IHRvIG9mZiBpZiBub3Qgc3BlY2lmaWVkICovXG4gXHRscC1cdTAwM2VmZWF0dXJlcyA9IDA7XG4gXG4tXHRpZiAoYXhpZW5ldF9pb3IobHAsIFhBRV9BQklMSVRZX09GRlNFVCkgXHUwMDI2IFhBRV9BQklMSVRZX1NUQVRTKVxuLVx0XHRscC1cdTAwM2VmZWF0dXJlcyB8PSBYQUVfRkVBVFVSRV9TVEFUUztcbi1cbiBcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtXHUwMDNlZGV2Lm9mX25vZGUsIFwieGxueCx0eGNzdW1cIiwgXHUwMDI2dmFsdWUpO1xuIFx0aWYgKCFyZXQpIHtcbiBcdFx0c3dpdGNoICh2YWx1ZSkge1xuQEAgLTI5NDAsNyArMzE2NywxNyBAQCBzdGF0aWMgaW50IGF4aWVuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4rXHRpZiAobHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlcHJvYmVfaW5pdClcbitcdFx0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlcHJvYmVfaW5pdChscCk7XG4rXG4gXHRpZiAoIW9mX3Byb3BlcnR5X3ByZXNlbnQocGRldi1cdTAwM2VkZXYub2Zfbm9kZSwgXCJkbWFzXCIpKSB7XG4rXHRcdC8qIE5vbi1kbWFlbmdpbmUgKGxlZ2FjeSBETUEpIG1vZGUgaXMgb25seSBzdXBwb3J0ZWQgYnkgc29tZSBNQUNzICovXG4rXHRcdGlmICghbHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlbGVnYWN5X2RtYSkge1xuK1x0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcIkxlZ2FjeSBETUEgbW9kZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgTUFDLCB1c2UgZG1hZW5naW5lXFxuXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4gXHRcdC8qIEZpbmQgdGhlIERNQSBub2RlLCBtYXAgdGhlIERNQSByZWdpc3RlcnMsIGFuZCBkZWNvZGUgdGhlIERNQSBJUlFzICovXG4gXHRcdG5wID0gb2ZfcGFyc2VfcGhhbmRsZShwZGV2LVx1MDAzZWRldi5vZl9ub2RlLCBcImF4aXN0cmVhbS1jb25uZWN0ZWRcIiwgMCk7XG4gXG5AQCAtMzAyMCw3ICszMjU3LDEwIEBAIHN0YXRpYyBpbnQgYXhpZW5ldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0XHRzdHJ1Y3QgeGlsaW54X3ZkbWFfY29uZmlnIGNmZztcbiBcdFx0c3RydWN0IGRtYV9jaGFuICp0eF9jaGFuO1xuIFxuLVx0XHRscC1cdTAwM2VldGhfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbChwZGV2LCAwKTtcbitcdFx0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZW1hY19pcnEpXG4rXHRcdFx0bHAtXHUwMDNlZXRoX2lycSA9IHBsYXRmb3JtX2dldF9pcnFfb3B0aW9uYWwocGRldiwgMCk7XG4rXHRcdGVsc2VcbitcdFx0XHRscC1cdTAwM2VldGhfaXJxID0gLUVOWElPO1xuIFx0XHRpZiAobHAtXHUwMDNlZXRoX2lycSBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgbHAtXHUwMDNlZXRoX2lycSAhPSAtRU5YSU8pIHtcbiBcdFx0XHRyZXR1cm4gbHAtXHUwMDNlZXRoX2lycTtcbiBcdFx0fVxuQEAgLTMwNzMsMTAgKzMzMTMsMTIgQEAgc3RhdGljIGludCBheGllbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRscC1cdTAwM2V0eF9kbWFfY3IgPSBheGllbmV0X2NhbGNfY3IobHAsIFhBWElETUFfREZUX1RYX1RIUkVTSE9MRCxcbiBcdFx0XHRcdFx0WEFYSURNQV9ERlRfVFhfVVNFQyk7XG4gXG4tXHRyZXQgPSBheGllbmV0X21kaW9fc2V0dXAobHApO1xuLVx0aWYgKHJldClcbi1cdFx0ZGV2X3dhcm4oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4tXHRcdFx0IFwiZXJyb3IgcmVnaXN0ZXJpbmcgTURJTyBidXM6ICVkXFxuXCIsIHJldCk7XG4rXHRpZiAobHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlbWRpbykge1xuK1x0XHRyZXQgPSBheGllbmV0X21kaW9fc2V0dXAobHApO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGRldl93YXJuKFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFx0IFwiZXJyb3IgcmVnaXN0ZXJpbmcgTURJTyBidXM6ICVkXFxuXCIsIHJldCk7XG4rXHR9XG4gXG4gXHRpZiAobHAtXHUwMDNlcGh5X21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJIHx8XG4gXHQgICAgbHAtXHUwMDNlcGh5X21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCkge1xuQEAgLTMxMDAsMjMgKzMzNDIsMjEgQEAgc3RhdGljIGludCBheGllbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRcdFx0Z290byBjbGVhbnVwX21kaW87XG4gXHRcdH1cbiBcdFx0b2Zfbm9kZV9wdXQobnApO1xuLVx0XHRscC1cdTAwM2VwY3Mub3BzID0gXHUwMDI2YXhpZW5ldF9wY3Nfb3BzO1xuK1x0XHRscC1cdTAwM2VwY3Mub3BzID0gbHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlcGNzX29wcztcbitcdFx0bHAtXHUwMDNlcGNzLnBvbGwgPSB0cnVlO1xuK1x0fVxuK1xuK1x0aWYgKGxwLVx1MDAzZWF4aWVuZXRfY29uZmlnLVx1MDAzZWludGVybmFsX3Bjcykge1xuK1x0XHRscC1cdTAwM2VwY3Mub3BzID0gbHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlcGNzX29wcztcbiBcdFx0bHAtXHUwMDNlcGNzLnBvbGwgPSB0cnVlO1xuIFx0fVxuIFxuIFx0bHAtXHUwMDNlcGh5bGlua19jb25maWcuZGV2ID0gXHUwMDI2bmRldi1cdTAwM2VkZXY7XG4gXHRscC1cdTAwM2VwaHlsaW5rX2NvbmZpZy50eXBlID0gUEhZTElOS19ORVRERVY7XG4gXHRscC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfbWFuYWdlZF9wbSA9IHRydWU7XG4tXHRscC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzID0gTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFIHxcbi1cdFx0TUFDXzEwRkQgfCBNQUNfMTAwRkQgfCBNQUNfMTAwMEZEO1xuK1x0bHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyA9IE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRTtcbiBcbi1cdF9fc2V0X2JpdChscC1cdTAwM2VwaHlfbW9kZSwgbHAtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuLVx0aWYgKGxwLVx1MDAzZXN3aXRjaF94X3NnbWlpKSB7XG4tXHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYLFxuLVx0XHRcdCAgbHAtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuLVx0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLFxuLVx0XHRcdCAgbHAtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuLVx0fVxuK1x0bHAtXHUwMDNlYXhpZW5ldF9jb25maWctXHUwMDNlcGh5bGlua19zZXRfY2FwcyhscCwgXHUwMDI2bHAtXHUwMDNlcGh5bGlua19jb25maWcpO1xuIFxuIFx0bHAtXHUwMDNlcGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFx1MDAyNmxwLVx1MDAzZXBoeWxpbmtfY29uZmlnLCBwZGV2LVx1MDAzZWRldi5md25vZGUsXG4gXHRcdFx0XHQgICAgIGxwLVx1MDAzZXBoeV9tb2RlLFxuQEAgLTMxNTksNyArMzM5OSw4IEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRpZiAobHAtXHUwMDNlcGNzX3BoeSlcbiBcdFx0cHV0X2RldmljZShcdTAwMjZscC1cdTAwM2VwY3NfcGh5LVx1MDAzZWRldik7XG4gXG4tXHRheGllbmV0X21kaW9fdGVhcmRvd24obHApO1xuK1x0aWYgKGxwLVx1MDAzZW1paV9idXMpXG4rXHRcdGF4aWVuZXRfbWRpb190ZWFyZG93bihscCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGF4aWVuZXRfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfeHh2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfeHh2LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kYmM5YzIxYjEwNGFmXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfeHh2LmNcbkBAIC0wLDAgKzEsNTk1IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qXG4rICogWFhWICgxMEcvMjVHKSBzdXBwb3J0XG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLlxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5bGluay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInhpbGlueF9heGllbmV0LmhcIlxuKyNpbmNsdWRlIFwieGlsaW54X2F4aWVuZXRfeHh2LmhcIlxuK1xuKy8qIHJlYWRsX3BvbGxfdGltZW91dCgpIHNsZWVwIGludGVydmFsICh1cykgYW5kIDEgbXMgdG90YWwgdGltZW91dCBmb3IgR1RcbisgKiByZXNldC1kb25lIGFuZCBQQ1MgYmxvY2stbG9jayBwb2xscy4gVmFsdWVzIGZyb20gWnlucU1QL1ZlcnNhbCBicmluZy11cDtcbisgKiBQRzIxMCBkb2VzIG5vdCBzcGVjaWZ5IHRoZXNlIGJvdW5kcy5cbisgKi9cbisjZGVmaW5lIFhYVl9MSU5LX1BPTExfSU5URVJWQUxfVVNcdDEwXG4rXG4rLyogTnVtYmVyIG9mIFhYViAoMTBHLzI1RykgTUFDIHJlZ2lzdGVycyBleHBvc2VkIHZpYSBldGh0b29sIC1kLlxuKyAqIENvdmVycyBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMgcmVnaXN0ZXJzIHBlciBYaWxpbnggUEcyMTAuXG4rICovXG4rc3RhdGljIGNvbnN0IHUzMiBheGllbmV0X3h4dl9yZWdfZHVtcF9vZmZzZXRzW1hYVl9SRUdTX05dID0ge1xuK1x0WFhWX0dUX1JFU0VUX09GRlNFVCxcbitcdFhYVl9SRVNFVF9PRkZTRVQsXG4rXHRYWFZfTU9ERV9PRkZTRVQsXG4rXHRYWFZfVENfT0ZGU0VULFxuK1x0WFhWX1JDVzFfT0ZGU0VULFxuK1x0WFhWX0pVTV9PRkZTRVQsXG4rXHRYWFZfVkxfTEVOR1RIX09GRlNFVCxcbitcdFhYVl9USUNLUkVHX09GRlNFVCxcbitcdFhYVl9DT05GSUdfUkVWSVNJT04sXG4rXHRYWFZfQ09ORklHXzE1ODhfT0ZGU0VULFxuK1x0WFhWX0NPTkZJR19UWF9GTE9XX0NUUkwxX09GRlNFVCxcbitcdFhYVl9DT05GSUdfUlhfRkxPV19DVFJMMV9PRkZTRVQsXG4rXHRYWFZfQ09ORklHX1JYX0ZMT1dfQ1RSTDJfT0ZGU0VULFxuK1x0WFhWX0NPTkZJR19SU0ZFQ19PRkZTRVQsXG4rXHRYWFZfQ09ORklHX0ZFQ19PRkZTRVQsXG4rXHRYWFZfQU5fQ1RMMV9PRkZTRVQsXG4rXHRYWFZfQU5fQ1RMMl9PRkZTRVQsXG4rXHRYWFZfQU5fQUJJTElUWV9PRkZTRVQsXG4rXHRYWFZfTFRfQ1RMMV9PRkZTRVQsXG4rXHRYWFZfU1dJVENIX0NPUkVfU1BFRURfT0ZGU0VULFxuK1x0WFhWX0NPTkZJR18xNTg4XzMyQklUX09GRlNFVCxcbitcdFhYVl9UWF9DT05GSUdfMTU4OF9PRkZTRVQsXG4rXHRYWFZfUlhfQ09ORklHXzE1ODhfT0ZGU0VULFxuK1x0WFhWX0dUV0laX0NUUkxfT0ZGU0VULFxuK1x0WFhWX1NUQVRSWF9TVEFUVVMwX09GRlNFVCxcbitcdFhYVl9SWF9TVEFUVVNfUkVHMSxcbitcdFhYVl9TVEFUUlhfU1RBVFVTMl9PRkZTRVQsXG4rXHRYWFZfU1RBVFJYX0JMS0xDS19PRkZTRVQsXG4rXHRYWFZfU1RBVF9SWF9SU0ZFQ19TVEFUVVNfT0ZGU0VULFxuK1x0WFhWX1NUQVRfUlhfRkVDX1NUQVRVU19PRkZTRVQsXG4rXHRYWFZfU1RBVF9UWF9SU0ZFQ19TVEFUVVNfT0ZGU0VULFxuK1x0WFhWX1NUQVRfVFhfRkxPV19DVFJMMV9PRkZTRVQsXG4rXHRYWFZfU1RBVF9SWF9GTE9XX0NUUkwxX09GRlNFVCxcbitcdFhYVl9TVEFUX0FOX1NUU19PRkZTRVQsXG4rXHRYWFZfU1RBVF9BTl9MUF9TVEFUVVNfT0ZGU0VULFxuK1x0WFhWX1NUQVRfQU5fTElOS19DVExfT0ZGU0VULFxuK1x0WFhWX1NUQVRfTFRfU1RBVFVTMV9PRkZTRVQsXG4rXHRYWFZfU1RBVF9MVF9TVEFUVVMyX09GRlNFVCxcbitcdFhYVl9TVEFUX0xUX1NUQVRVUzNfT0ZGU0VULFxuK1x0WFhWX1NUQVRfTFRfU1RBVFVTNF9PRkZTRVQsXG4rXHRYWFZfU1RBVF9MVF9DT0VGRjBfT0ZGU0VULFxuK1x0WFhWX1NUQVRfUlhfVkFMSURfQ1RSTF9DT0RFX09GRlNFVCxcbitcdFhYVl9TVEFUX0NPUkVfU1BFRURfT0ZGU0VULFxuK1x0WFhWX1NUQVRfVFNOX09GRlNFVCxcbitcdFhYVl9TVEFUX0dUV0laX09GRlNFVCxcbitcdFhYVl9TVEFUX0FOX0xJTktfQ1RMMl9PRkZTRVQsXG4rfTtcbitcbisvKiBPcHRpb24gdGFibGUgZm9yIHNldHRpbmcgdXAgWFhWIEV0aGVybmV0IGhhcmR3YXJlIG9wdGlvbnMgKi9cbitzdGF0aWMgc3RydWN0IGF4aWVuZXRfb3B0aW9uIHh4dmVuZXRfb3B0aW9uc1tdID0ge1xuK1x0eyAvKiBUdXJuIG9uIEZDUyBzdHJpcHBpbmcgb24gcmVjZWl2ZSBwYWNrZXRzICovXG4rXHRcdC5vcHQgPSBYQUVfT1BUSU9OX0ZDU19TVFJJUCxcbitcdFx0LnJlZyA9IFhYVl9SQ1cxX09GRlNFVCxcbitcdFx0Lm1fb3IgPSBYWFZfUkNXMV9GQ1NfTUFTSyxcbitcdH0sIHsgLyogVHVybiBvbiBGQ1MgaW5zZXJ0aW9uIG9uIHRyYW5zbWl0IHBhY2tldHMgKi9cbitcdFx0Lm9wdCA9IFhBRV9PUFRJT05fRkNTX0lOU0VSVCxcbitcdFx0LnJlZyA9IFhYVl9UQ19PRkZTRVQsXG4rXHRcdC5tX29yID0gWFhWX1RDX0ZDU19NQVNLLFxuK1x0fSwgeyAvKiBFbmFibGUgdHJhbnNtaXR0ZXIgKi9cbitcdFx0Lm9wdCA9IFhBRV9PUFRJT05fVFhFTixcbitcdFx0LnJlZyA9IFhYVl9UQ19PRkZTRVQsXG4rXHRcdC5tX29yID0gWFhWX1RDX1RYX01BU0ssXG4rXHR9LCB7IC8qIEVuYWJsZSByZWNlaXZlciAqL1xuK1x0XHQub3B0ID0gWEFFX09QVElPTl9SWEVOLFxuK1x0XHQucmVnID0gWFhWX1JDVzFfT0ZGU0VULFxuK1x0XHQubV9vciA9IFhYVl9SQ1cxX1JYX01BU0ssXG4rXHR9LFxuK1x0e31cbit9O1xuK1xuKy8qIFBHMjEwIHN0YXRpc3RpY3MtYmxvY2sgb2Zmc2V0cyBpbmRleGVkIGJ5IGVudW0geHh2X3N0YXQuIEVhY2ggZW50cnkgaXNcbisgKiB0aGUgMzItYml0IExTQiByZWdpc3RlciBhZGRyZXNzOyB0aGUgY29ycmVzcG9uZGluZyBNU0IgaXMgYXQgKzQuXG4rICovXG4rc3RhdGljIGNvbnN0IHUzMiBheGllbmV0X3h4dl9zdGF0X29mZnNldHNbWFhWX1NUQVRfQ09VTlRdID0ge1xuK1x0W1hYVl9TVEFUX1JYX1RPVEFMX1BBQ0tFVFNdXHQgPSBYWFZfU1RBVF9SWF9UT1RBTF9QQUNLRVRTX09GRlNFVCxcbitcdFtYWFZfU1RBVF9SWF9UT1RBTF9HT09EX1BBQ0tFVFNdID0gWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9QQUNLRVRTX09GRlNFVCxcbitcdFtYWFZfU1RBVF9SWF9UT1RBTF9CWVRFU11cdCA9IFhYVl9TVEFUX1JYX1RPVEFMX0JZVEVTX09GRlNFVCxcbitcdFtYWFZfU1RBVF9SWF9UT1RBTF9HT09EX0JZVEVTXVx0ID0gWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9CWVRFU19PRkZTRVQsXG4rXHRbWFhWX1NUQVRfUlhfQkFEX0ZDU11cdFx0ID0gWFhWX1NUQVRfUlhfQkFEX0ZDU19PRkZTRVQsXG4rXHRbWFhWX1NUQVRfUlhfSU5SQU5HRUVSUl1cdCA9IFhYVl9TVEFUX1JYX0lOUkFOR0VFUlJfT0ZGU0VULFxuK1x0W1hYVl9TVEFUX1JYX01VTFRJQ0FTVF1cdFx0ID0gWFhWX1NUQVRfUlhfTVVMVElDQVNUX09GRlNFVCxcbitcdFtYWFZfU1RBVF9SWF9CUk9BRENBU1RdXHRcdCA9IFhYVl9TVEFUX1JYX0JST0FEQ0FTVF9PRkZTRVQsXG4rXHRbWFhWX1NUQVRfUlhfVU5ERVJTSVpFXVx0XHQgPSBYWFZfU1RBVF9SWF9VTkRFUlNJWkVfT0ZGU0VULFxuK1x0W1hYVl9TVEFUX1JYX0ZSQUdNRU5UXVx0XHQgPSBYWFZfU1RBVF9SWF9GUkFHTUVOVF9PRkZTRVQsXG4rXHRbWFhWX1NUQVRfUlhfSkFCQkVSXVx0XHQgPSBYWFZfU1RBVF9SWF9KQUJCRVJfT0ZGU0VULFxuK1x0W1hYVl9TVEFUX1JYX09WRVJTSVpFXVx0XHQgPSBYWFZfU1RBVF9SWF9PVkVSU0laRV9PRkZTRVQsXG4rXHRbWFhWX1NUQVRfUlhfUEFVU0VdXHRcdCA9IFhYVl9TVEFUX1JYX1BBVVNFX09GRlNFVCxcbitcdFtYWFZfU1RBVF9UWF9UT1RBTF9QQUNLRVRTXVx0ID0gWFhWX1NUQVRfVFhfVE9UQUxfUEFDS0VUU19PRkZTRVQsXG4rXHRbWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9QQUNLRVRTXSA9IFhYVl9TVEFUX1RYX1RPVEFMX0dPT0RfUEFDS0VUU19PRkZTRVQsXG4rXHRbWFhWX1NUQVRfVFhfVE9UQUxfQllURVNdXHQgPSBYWFZfU1RBVF9UWF9UT1RBTF9CWVRFU19PRkZTRVQsXG4rXHRbWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9CWVRFU11cdCA9IFhYVl9TVEFUX1RYX1RPVEFMX0dPT0RfQllURVNfT0ZGU0VULFxuK1x0W1hYVl9TVEFUX1RYX0JBRF9GQ1NdXHRcdCA9IFhYVl9TVEFUX1RYX0JBRF9GQ1NfT0ZGU0VULFxuK1x0W1hYVl9TVEFUX1RYX0ZSQU1FX0VSUk9SXVx0ID0gWFhWX1NUQVRfVFhfRlJBTUVfRVJST1JfT0ZGU0VULFxuK1x0W1hYVl9TVEFUX1RYX01VTFRJQ0FTVF1cdFx0ID0gWFhWX1NUQVRfVFhfTVVMVElDQVNUX09GRlNFVCxcbitcdFtYWFZfU1RBVF9UWF9CUk9BRENBU1RdXHRcdCA9IFhYVl9TVEFUX1RYX0JST0FEQ0FTVF9PRkZTRVQsXG4rXHRbWFhWX1NUQVRfVFhfUEFVU0VdXHRcdCA9IFhYVl9TVEFUX1RYX1BBVVNFX09GRlNFVCxcbit9O1xuK1xuKy8qIFhYViAoUEcyMTApIGNvdW50ZXJzIGV4cG9zZWQgdmlhIGV0aHRvb2wgLVMuIE9ubHkgY291bnRlcnMgdGhhdCBoYXZlIG5vXG4rICogc3RhbmRhcmQgdUFQSSBhcmUgbGlzdGVkIGhlcmU7IHRoZSB0b3RhbHMgaW5jbHVkZSBlcnJvcmVkIGZyYW1lcywgc28gdGhleVxuKyAqIGFyZSBkaXN0aW5jdCBmcm9tIHRoZSBnb29kLWZyYW1lIGNvdW50cyBpbiBydG5sX2xpbmtfc3RhdHM2NCBhbmQgdGhlXG4rICogSUVFRSBNQUMgc3RhdGlzdGljcy4gRXZlcnkgb3RoZXIgWFhWIGNvdW50ZXIgaXMgcmVwb3J0ZWQgdGhyb3VnaCB0aGVcbisgKiBkZWRpY2F0ZWQgc3RhdHM2NCwgcGF1c2UsIE1BQyBhbmQgUk1PTiBjYWxsYmFja3MgaW5zdGVhZC5cbisgKi9cbitzdGF0aWMgY29uc3QgZW51bSB4eHZfc3RhdCBheGllbmV0X3h4dl9wcml2X3N0YXRzW10gPSB7XG4rXHRYWFZfU1RBVF9SWF9UT1RBTF9QQUNLRVRTLFxuK1x0WFhWX1NUQVRfUlhfVE9UQUxfQllURVMsXG4rXHRYWFZfU1RBVF9UWF9UT1RBTF9QQUNLRVRTLFxuK1x0WFhWX1NUQVRfVFhfVE9UQUxfQllURVMsXG4rXHRYWFZfU1RBVF9UWF9CQURfRkNTLFxuK1x0WFhWX1NUQVRfVFhfRlJBTUVfRVJST1IsXG4rfTtcbitcbitzdGF0aWMgY29uc3QgY2hhciBheGllbmV0X3h4dl9ldGh0b29sX3N0YXRzX3N0cmluZ3NbXVtFVEhfR1NUUklOR19MRU5dID0ge1xuK1x0XCJSWCBUb3RhbCBQYWNrZXRzXCIsXG4rXHRcIlJYIFRvdGFsIEJ5dGVzXCIsXG4rXHRcIlRYIFRvdGFsIFBhY2tldHNcIixcbitcdFwiVFggVG90YWwgQnl0ZXNcIixcbitcdFwiVFggQmFkIEZDU1wiLFxuK1x0XCJUWCBGcmFtZSBFcnJvclwiLFxuK307XG4rXG4rc3RhdGljIHU2NCBheGllbmV0X3h4dl9yZWFkX2NvdW50ZXIoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLCBlbnVtIHh4dl9zdGF0IHN0YXQpXG4re1xuK1x0dTMyIG9mZiA9IGF4aWVuZXRfeHh2X3N0YXRfb2Zmc2V0c1tzdGF0XTtcbitcdHUzMiBsc2IsIG1zYjtcbitcbitcdGxzYiA9IGF4aWVuZXRfaW9yKGxwLCBvZmYpO1xuK1x0bXNiID0gYXhpZW5ldF9pb3IobHAsIG9mZiArIFhYVl9TVEFUX01TQl9PRkZTRVQpO1xuK1xuK1x0cmV0dXJuICgodTY0KW1zYiBcdTAwM2NcdTAwM2MgMzIpIHwgbHNiO1xuK31cbitcbitzdGF0aWMgYm9vbCBheGllbmV0X3h4dl9pcF9oYXNfZ3R3aXpfc3RhdHVzKHUzMiBpcF92ZXJzaW9uKVxuK3tcbitcdHU4IG1pbm9yID0gRklFTERfR0VUKFhYVl9NSU5fTUFTSywgaXBfdmVyc2lvbik7XG4rXHR1OCBtYWogPSBGSUVMRF9HRVQoWFhWX01BSl9NQVNLLCBpcF92ZXJzaW9uKTtcbitcbitcdGlmIChtYWogPT0gWFhWX0lQX1ZFUl9HVFdJWl9NQUpfTUlOKVxuK1x0XHRyZXR1cm4gbWlub3IgXHUwMDNlPSBYWFZfSVBfVkVSX0dUV0laX01JTl9NSU47XG4rXHRyZXR1cm4gbWFqIFx1MDAzZSBYWFZfSVBfVkVSX0dUV0laX01BSl9NSU47XG4rfVxuK1xuKy8qKlxuKyAqIGF4aWVuZXRfeHh2X3NldG9wdGlvbnMgLSBTZXQgWFhWIE1BQyBvcHRpb25zIGZyb20gdGhlIG9wdGlvbiB0YWJsZVxuKyAqIEBuZGV2OiBQb2ludGVyIHRvIHRoZSBuZXRfZGV2aWNlIHN0cnVjdHVyZVxuKyAqIEBvcHRpb25zOiBPcHRpb24gZmxhZ3MgdG8gYXBwbHlcbisgKi9cbitzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9zZXRvcHRpb25zKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgb3B0aW9ucylcbit7XG4rXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdHN0cnVjdCBheGllbmV0X29wdGlvbiAqdHAgPSB4eHZlbmV0X29wdGlvbnM7XG4rXHR1MzIgcmVnO1xuK1xuK1x0d2hpbGUgKHRwLVx1MDAzZW9wdCkge1xuK1x0XHRyZWcgPSBheGllbmV0X2lvcihscCwgdHAtXHUwMDNlcmVnKSBcdTAwMjYgfnRwLVx1MDAzZW1fb3I7XG4rXHRcdGlmIChvcHRpb25zIFx1MDAyNiB0cC1cdTAwM2VvcHQpXG4rXHRcdFx0cmVnIHw9IHRwLVx1MDAzZW1fb3I7XG4rXHRcdGF4aWVuZXRfaW93KGxwLCB0cC1cdTAwM2VyZWcsIHJlZyk7XG4rXHRcdHRwKys7XG4rXHR9XG4rXG4rXHRscC1cdTAwM2VvcHRpb25zIHw9IG9wdGlvbnM7XG4rfVxuK1xuKy8qKlxuKyAqIGF4aWVuZXRfeHh2X3Byb2JlX2luaXQgLSBJbml0aWFsaXplIFhYVi1zcGVjaWZpYyBzdGF0ZSBhdCBwcm9iZSB0aW1lXG4rICogQGxwOiBQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuKyAqL1xuK3N0YXRpYyB2b2lkIGF4aWVuZXRfeHh2X3Byb2JlX2luaXQoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwKVxuK3tcbitcdGxwLVx1MDAzZXh4dl9pcF92ZXJzaW9uID0gYXhpZW5ldF9pb3IobHAsIFhYVl9DT05GSUdfUkVWSVNJT04pO1xuK1x0bHAtXHUwMDNlZmVhdHVyZXMgfD0gWEFFX0ZFQVRVUkVfU1RBVFM7XG4rfVxuK1xuKy8qKlxuKyAqIGF4aWVuZXRfeHh2X2d0X3Jlc2V0IC0gUHVsc2UgdGhlIFhYViBHVCByZXNldCBsaW5lXG4rICogQGxwOiBQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuKyAqL1xuK3N0YXRpYyB2b2lkIGF4aWVuZXRfeHh2X2d0X3Jlc2V0KHN0cnVjdCBheGllbmV0X2xvY2FsICpscClcbit7XG4rXHR1MzIgdmFsO1xuK1xuK1x0LyogUmVzZXQgR1QgKi9cbitcdHZhbCA9IGF4aWVuZXRfaW9yKGxwLCBYWFZfR1RfUkVTRVRfT0ZGU0VUKTtcbitcdHZhbCB8PSBYWFZfR1RfUkVTRVRfTUFTSztcbitcdGF4aWVuZXRfaW93KGxwLCBYWFZfR1RfUkVTRVRfT0ZGU0VULCB2YWwpO1xuK1x0LyogQWxsb3cgMSBtcyBmb3IgdGhlIEdUIHJlc2V0IHRvIHNldHRsZSAoc2VlIHRpbWVvdXQgbm90ZSBhYm92ZSkgKi9cbitcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcbitcdHZhbCA9IGF4aWVuZXRfaW9yKGxwLCBYWFZfR1RfUkVTRVRfT0ZGU0VUKTtcbitcdHZhbCBcdTAwMjY9IH5YWFZfR1RfUkVTRVRfTUFTSztcbitcdGF4aWVuZXRfaW93KGxwLCBYWFZfR1RfUkVTRVRfT0ZGU0VULCB2YWwpO1xuK31cbitcbisvKipcbisgKiBheGllbmV0X3h4dl9wb2xsX2xpbmtfcmVhZHkgLSBXYWl0IGZvciBYWFYgR1QgYW5kIFBDUyBibG9jayBsb2NrXG4rICogQG5kZXY6IFBvaW50ZXIgdG8gdGhlIG5ldF9kZXZpY2Ugc3RydWN0dXJlXG4rICpcbisgKiBQb2xsIEdUIHdpemFyZCByZXNldC1kb25lIG9uIElQIHYzLjIrLCB0aGVuIFJYIFBDUyBibG9jayBsb2NrLiBCbG9jay1sb2NrXG4rICogZmFpbHVyZSBpcyBsb2dnZWQgYnV0IG5vdCBwcm9wYWdhdGVkOiBpdCBkZXBlbmRzIG9uIGEgbGl2ZSBsaW5rIHBhcnRuZXIgYW5kXG4rICogcmVmZXJlbmNlIGNsb2NrLCBzbyBhbiB1bnBsdWdnZWQgY2FibGUgbXVzdCBub3QgZmFpbCBkZXZpY2UgYnJpbmctdXAuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBpZiBHVCByZXNldC1kb25lIHRpbWVzIG91dC5cbisgKi9cbitzdGF0aWMgaW50IGF4aWVuZXRfeHh2X3BvbGxfbGlua19yZWFkeShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LyogQ29uZmlybSBYWFYgRXRoZXJuZXQgaXMgdXA6IG9uIElQIHYzLjIrLCB3YWl0IGZvciBHVFxuK1x0ICogcmVzZXQtZG9uZSBiZWZvcmUgZnVydGhlciByZWdpc3RlciBhY2Nlc3MsIHRoZW4gcG9sbCB1bnRpbFxuK1x0ICogUlggUENTIGJsb2NrIGxvY2sgaXMgYXNzZXJ0ZWQuXG4rXHQgKi9cbitcdGlmIChheGllbmV0X3h4dl9pcF9oYXNfZ3R3aXpfc3RhdHVzKGxwLVx1MDAzZXh4dl9pcF92ZXJzaW9uKSkge1xuK1x0XHRyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQobHAtXHUwMDNlcmVncyArIFhYVl9TVEFUX0dUV0laX09GRlNFVCxcbitcdFx0XHRcdFx0IHZhbCxcbitcdFx0XHRcdFx0ICh2YWwgXHUwMDI2IFhYVl9HVFdJWl9SRVNFVF9ET05FKSA9PSBYWFZfR1RXSVpfUkVTRVRfRE9ORSxcbitcdFx0XHRcdFx0IFhYVl9MSU5LX1BPTExfSU5URVJWQUxfVVMsXG4rXHRcdFx0XHRcdCBERUxBWV9PRl9PTkVfTUlMTElTRUMpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZGV2LCBcIlhYViBNQUMgR1QgcmVzZXQgbm90IGNvbXBsZXRlISBDcm9zcy1jaGVjayB0aGUgTUFDIHJlZiBjbG9jayBjb25maWd1cmF0aW9uXFxuXCIpO1xuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldCA9IHJlYWRsX3BvbGxfdGltZW91dChscC1cdTAwM2VyZWdzICsgWFhWX1NUQVRSWF9CTEtMQ0tfT0ZGU0VULFxuK1x0XHRcdFx0IHZhbCwgKHZhbCBcdTAwMjYgWFhWX1JYX0JMS0xDS19NQVNLKSxcbitcdFx0XHRcdCBYWFZfTElOS19QT0xMX0lOVEVSVkFMX1VTLFxuK1x0XHRcdFx0IERFTEFZX09GX09ORV9NSUxMSVNFQyk7XG4rXHRpZiAocmV0KVxuK1x0XHRuZXRkZXZfZXJyKG5kZXYsIFwiWFhWIE1BQyBibG9jayBsb2NrIG5vdCBjb21wbGV0ZSEgQ3Jvc3MtY2hlY2sgdGhlIE1BQyByZWYgY2xvY2sgY29uZmlndXJhdGlvblxcblwiKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiBheGllbmV0X3h4dl9tYWNfaW5pdCAtIFhYViBNQUMtc3BlY2lmaWMgYnJpbmctdXAgYWZ0ZXIgdGhlIERNQSByZXNldFxuKyAqIEBuZGV2OiBQb2ludGVyIHRvIHRoZSBuZXRfZGV2aWNlIHN0cnVjdHVyZVxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIgb3RoZXJ3aXNlLlxuKyAqL1xuK3N0YXRpYyBpbnQgYXhpZW5ldF94eHZfbWFjX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0c3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gYXhpZW5ldF94eHZfcG9sbF9saW5rX3JlYWR5KG5kZXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGxwLVx1MDAzZW9wdGlvbnMgfD0gWEFFX09QVElPTl9GQ1NfU1RSSVA7XG4rXHRscC1cdTAwM2VvcHRpb25zIHw9IFhBRV9PUFRJT05fRkNTX0lOU0VSVDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9waHlsaW5rX3NldF9jYXBhYmlsaXRpZXMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuK1x0XHRcdFx0XHRcdCBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNmZylcbit7XG4rXHR1MzIgY29yZV9zcGVlZDtcbitcdGJvb2wgcnRzdztcbitcbitcdGNvcmVfc3BlZWQgPSBheGllbmV0X2lvcihscCwgWFhWX1NUQVRfQ09SRV9TUEVFRF9PRkZTRVQpO1xuK1x0LyogQml0WzE6MF06IDAwPTI1RywgMDE9MTBHLCAxMD1ydW50aW1lLXN3aXRjaGFibGUgMjVHLFxuK1x0ICogMTE9cnVudGltZS1zd2l0Y2hhYmxlIDEwRy4gQSBydW50aW1lLXN3aXRjaGFibGUgY29yZSBjYW4gb3BlcmF0ZSBhdFxuK1x0ICogZWl0aGVyIHNwZWVkLCBzbyBhZHZlcnRpc2UgYm90aDsgYSBmaXhlZCBjb3JlIGFkdmVydGlzZXMgb25seSBpdHNcbitcdCAqIGNvbmZpZ3VyZWQgc3BlZWQuXG4rXHQgKi9cbitcdHJ0c3cgPSBjb3JlX3NwZWVkIFx1MDAyNiBYWFZfU1RBVF9DT1JFX1NQRUVEX1JUU1dfTUFTSztcbitcbitcdGlmIChydHN3IHx8IChjb3JlX3NwZWVkIFx1MDAyNiBYWFZfU1RBVF9DT1JFX1NQRUVEXzEwR19NQVNLKSkge1xuK1x0XHRjZmctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMDBGRDtcbitcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUixcbitcdFx0XHQgIGNmZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXHR9XG4rXG4rXHRpZiAocnRzdyB8fCAhKGNvcmVfc3BlZWQgXHUwMDI2IFhYVl9TVEFUX0NPUkVfU1BFRURfMTBHX01BU0spKSB7XG4rXHRcdGNmZy1cdTAwM2VtYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18yNTAwMEZEO1xuK1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzI1R0JBU0VSLFxuK1x0XHRcdCAgY2ZnLVx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgYXhpZW5ldF94eHZfcGNzX2dldF9zdGF0ZShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcyxcbitcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBuZWdfbW9kZSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuK3tcbitcdHN0cnVjdCBheGllbmV0X2xvY2FsICpscCA9IHBjc190b19heGllbmV0X2xvY2FsKHBjcyk7XG4rXG4rXHRzdGF0ZS1cdTAwM2VkdXBsZXggPSBEVVBMRVhfRlVMTDtcbitcdHN0YXRlLVx1MDAzZWFuX2NvbXBsZXRlID0gISEoYXhpZW5ldF9pb3IobHAsIFhYVl9TVEFUX0FOX1NUU19PRkZTRVQpIFx1MDAyNlxuK1x0XHRcdFx0WFhWX0FOX0NPTVBMRVRFX01BU0spO1xuK1x0c3RhdGUtXHUwMDNlbGluayA9IGF4aWVuZXRfaW9yKGxwLCBYWFZfUlhfU1RBVFVTX1JFRzEpIFx1MDAyNlxuK1x0XHQgICAgICBYWFZfUlhfU1RBVFVTX01BU0s7XG4rXG4rXHRpZiAoYXhpZW5ldF9pb3IobHAsIFhYVl9TVEFUX0NPUkVfU1BFRURfT0ZGU0VUKSBcdTAwMjZcbitcdCAgICBYWFZfU1RBVF9DT1JFX1NQRUVEXzEwR19NQVNLKVxuK1x0XHRzdGF0ZS1cdTAwM2VzcGVlZCA9IFNQRUVEXzEwMDAwO1xuK1x0ZWxzZVxuK1x0XHRzdGF0ZS1cdTAwM2VzcGVlZCA9IFNQRUVEXzI1MDAwO1xuK31cbitcbitzdGF0aWMgaW50IGF4aWVuZXRfeHh2X3Bjc19jb25maWcoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBuZWdfbW9kZSxcbitcdFx0XHRcdCAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcbitcdFx0XHRcdCAgY29uc3QgdW5zaWduZWQgbG9uZyAqYWR2ZXJ0aXNpbmcsXG4rXHRcdFx0XHQgIGJvb2wgcGVybWl0X3BhdXNlX3RvX21hYylcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX3Bjc19vcHMgYXhpZW5ldF94eHZfcGNzX29wcyA9IHtcbitcdC5wY3NfZ2V0X3N0YXRlID0gYXhpZW5ldF94eHZfcGNzX2dldF9zdGF0ZSxcbitcdC5wY3NfY29uZmlnID0gYXhpZW5ldF94eHZfcGNzX2NvbmZpZyxcbit9O1xuK1xuKy8qKlxuKyAqIGF4aWVuZXRfeHh2X2dldF9yZWdzIC0gRHVtcCBYWFYgTUFDIHJlZ2lzdGVycyBmb3IgZXRodG9vbFxuKyAqIEBscDogUG9pbnRlciB0byB0aGUgYXhpZW5ldF9sb2NhbCBzdHJ1Y3R1cmVcbisgKiBAZGF0YTogQnVmZmVyIGZvciByZWdpc3RlciB2YWx1ZXMgKHplcm9lZCBhbmQgc2l6ZWQgYnkgdGhlIGNhbGxlcilcbisgKi9cbitzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfcmVncyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsIHUzMiAqZGF0YSlcbit7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoYXhpZW5ldF94eHZfcmVnX2R1bXBfb2Zmc2V0cyk7IGkrKylcbitcdFx0ZGF0YVtpXSA9IGF4aWVuZXRfaW9yKGxwLCBheGllbmV0X3h4dl9yZWdfZHVtcF9vZmZzZXRzW2ldKTtcbit9XG4rXG4rc3RhdGljIGludCBheGllbmV0XzEwZzI1Z19jbGtfaW5pdChzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gbHAtXHUwMDNlZGV2O1xuK1x0aW50IHJldDtcbitcbitcdC8qIFRoZSByZWdpc3RlciwgUlggYW5kIEdUIERSUCBjbG9ja3MgYXJlIG1hbmRhdG9yeSBmb3IgTUFDK1BDU1xuK1x0ICogb3BlcmF0aW9uLCBzbyBmZXRjaCB0aGVtIGFzIHJlcXVpcmVkLlxuK1x0ICovXG4rXHRscC1cdTAwM2VheGlfY2xrID0gZGV2bV9jbGtfZ2V0X2VuYWJsZWQoZGV2LCBcInNfYXhpXCIpO1xuK1x0aWYgKElTX0VSUihscC1cdTAwM2VheGlfY2xrKSlcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGxwLVx1MDAzZWF4aV9jbGspLFxuK1x0XHRcdFx0ICAgICBcImNvdWxkIG5vdCBnZXQgQVhJIGNsb2NrXFxuXCIpO1xuK1xuK1x0bHAtXHUwMDNlbWlzY19jbGtzWzBdLmlkID0gXCJyeF9jb3JlXCI7XG4rXHRscC1cdTAwM2VtaXNjX2Nsa3NbMV0uaWQgPSBcImRycFwiO1xuK1xuK1x0cmV0ID0gZGV2bV9jbGtfYnVsa19nZXRfZW5hYmxlKGRldiwgMiwgbHAtXHUwMDNlbWlzY19jbGtzKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0ICAgICBcImNvdWxkIG5vdCBnZXQvZW5hYmxlIFhYViBjbG9ja3NcXG5cIik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogYXhpZW5ldF94eHZfc3RhdHNfdXBkYXRlIC0gTGF0Y2ggYW5kIGFjY3VtdWxhdGUgWFhWIGhhcmR3YXJlIGNvdW50ZXJzXG4rICogQGxwOiBQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuKyAqXG4rICogVGhlIFhYViBzdGF0aXN0aWNzIGNvdW50ZXJzIGFyZSBjbGVhci1vbi10aWNrIChQRzIxMCk6IHdyaXRpbmcgVElDS19SRUdcbisgKiBsYXRjaGVzIHRoZSBpbnRlcm5hbCBhY2N1bXVsYXRvcnMgaW50byB0aGUgcmVhZGFibGUgU1RBVF8qX0xTQi9NU0IgcmVnaXN0ZXJzXG4rICogYW5kIGNsZWFycyB0aGUgaW50ZXJuYWwgYWNjdW11bGF0b3JzLiBFYWNoIHBvc3QtVElDSyByZWFkIHRoZXJlZm9yZSByZXR1cm5zXG4rICogdGhlIGNvdW50IGZvciB0aGUgaW50ZXJ2YWwgc2luY2UgdGhlIHByZXZpb3VzIFRJQ0ssIHNvIHNvZnR3YXJlIGFjY3VtdWxhdGVzXG4rICogdGhvc2UgaW50ZXJ2YWxzIGludG8gbHAtXHUwMDNleHh2X3N0YXRfYmFzZS4gQSBsYXN0LWNvdW50ZXIgZGVsdGEgKGFzIHVzZWQgYnkgdGhlXG4rICogZnJlZS1ydW5uaW5nIDFHIE1BQyBwYXRoKSBpcyBub3QgbmVlZGVkLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGF4aWVuZXRfeHh2X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHApXG4re1xuK1x0dTY0IGNvdW50ZXJbWFhWX1NUQVRfQ09VTlRdO1xuK1x0ZW51bSB4eHZfc3RhdCBzdGF0O1xuK1xuK1x0LyogTGF0Y2ggdGhlIGNsZWFyLW9uLXRpY2sgc25hcHNob3QgYW5kIHJlYWQgdGhlIGNvdW50ZXJzIG91dHNpZGUgdGhlXG4rXHQgKiBzZXFjb3VudCB3cml0ZSBzZWN0aW9uLCBzbyBvbmx5IHRoZSBhY2N1bXVsYXRvciB1cGRhdGVzIHJ1biBpbnNpZGUgaXRcbitcdCAqIGFuZCB0aGUgcmVhZGVyIHJldHJ5IHdpbmRvdyBzdGF5cyBzaG9ydC5cbitcdCAqL1xuK1x0YXhpZW5ldF9pb3cobHAsIFhYVl9USUNLUkVHX09GRlNFVCwgWFhWX1RJQ0tSRUdfU1RBVEVOX01BU0spO1xuK1x0Zm9yIChzdGF0ID0gMDsgc3RhdCBcdTAwM2MgWFhWX1NUQVRfQ09VTlQ7IHN0YXQrKylcbitcdFx0Y291bnRlcltzdGF0XSA9IGF4aWVuZXRfeHh2X3JlYWRfY291bnRlcihscCwgc3RhdCk7XG4rXG4rXHR3cml0ZV9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4rXHRmb3IgKHN0YXQgPSAwOyBzdGF0IFx1MDAzYyBYWFZfU1RBVF9DT1VOVDsgc3RhdCsrKVxuK1x0XHRscC1cdTAwM2V4eHZfc3RhdF9iYXNlW3N0YXRdICs9IGNvdW50ZXJbc3RhdF07XG4rXHR3cml0ZV9zZXFjb3VudF9lbmQoXHUwMDI2bHAtXHUwMDNlaHdfc3RhdHNfc2VxY291bnQpO1xuK31cbitcbisvKipcbisgKiBheGllbmV0X3h4dl9nZXRfc3RhdHM2NCAtIEZpbGwgcnRubF9saW5rX3N0YXRzNjQgZnJvbSBYWFYgY291bnRlcnNcbisgKiBAbHA6IFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlXG4rICogQHN0YXRzOiBPdXRwdXQgcnRubF9saW5rX3N0YXRzNjQgc3RydWN0dXJlIHRvIHBvcHVsYXRlXG4rICovXG4rc3RhdGljIHZvaWQgYXhpZW5ldF94eHZfZ2V0X3N0YXRzNjQoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXG4re1xuK1x0dW5zaWduZWQgaW50IHN0YXJ0O1xuK1x0dTY0IHR4X2h3X2Vycm9ycztcbitcbitcdGRvIHtcbitcdFx0c3RhcnQgPSByZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcbitcdFx0c3RhdHMtXHUwMDNlcnhfY3JjX2Vycm9ycyA9IGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfQkFEX0ZDU107XG4rXHRcdC8qIEJvdGggaW4tcmFuZ2UgbGVuZ3RoIGVycm9ycyBhbmQgZnJhbWUtdG9vLWxvbmcgKG92ZXJzaXplKVxuK1x0XHQgKiBmcmFtZXMgYXJlIElFRUUgODAyLjMgbGVuZ3RoIGVycm9ycywgc28gZm9sZCB0aGVtIHRvZ2V0aGVyXG4rXHRcdCAqIGludG8gcnhfbGVuZ3RoX2Vycm9yczsgcnhfb3Zlcl9lcnJvcnMgaXMgcmVzZXJ2ZWQgZm9yIHJlY2VpdmVyXG4rXHRcdCAqIEZJRk8vcmluZyBvdmVyZmxvdywgd2hpY2ggdGhlIFhYViBNQUMgZG9lcyBub3QgZXhwb3NlLlxuK1x0XHQgKi9cbitcdFx0c3RhdHMtXHUwMDNlcnhfbGVuZ3RoX2Vycm9ycyA9XG4rXHRcdFx0bHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9JTlJBTkdFRVJSXSArXG4rXHRcdFx0bHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9PVkVSU0laRV07XG4rXHRcdHN0YXRzLVx1MDAzZXJ4X2Vycm9ycyA9IGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfVU5ERVJTSVpFXSArXG4rXHRcdFx0XHQgICBscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX0ZSQUdNRU5UXSArXG4rXHRcdFx0XHQgICBscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX0pBQkJFUl0gK1xuK1x0XHRcdFx0ICAgc3RhdHMtXHUwMDNlcnhfY3JjX2Vycm9ycyArXG4rXHRcdFx0XHQgICBzdGF0cy1cdTAwM2VyeF9sZW5ndGhfZXJyb3JzO1xuK1x0XHRzdGF0cy1cdTAwM2VtdWx0aWNhc3QgPSBscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX01VTFRJQ0FTVF07XG4rXHRcdHR4X2h3X2Vycm9ycyA9IGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfQkFEX0ZDU10gK1xuK1x0XHRcdCAgICAgICBscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1RYX0ZSQU1FX0VSUk9SXTtcbitcdH0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2bHAtXHUwMDNlaHdfc3RhdHNfc2VxY291bnQsIHN0YXJ0KSk7XG4rXG4rXHQvKiBGb2xkIHRoZSBIVyBUWCBlcnJvciBjb3VudCBpbnRvIHRoZSBzb2Z0d2FyZSB0eF9lcnJvcnMgc2VlZGVkIGZyb21cbitcdCAqIGRldi1cdTAwM2VzdGF0cyBieSB0aGUgY2FsbGVyLiBUaGUgWFhWIHhtaXQgcGF0aCBidW1wcyBkZXYtXHUwMDNlc3RhdHMudHhfZXJyb3JzXG4rXHQgKiBmb3IgZnJhbWVzIGRyb3BwZWQgb24gcGFkIGZhaWx1cmUgYmVmb3JlIHRoZXkgcmVhY2ggdGhlIE1BQywgd2hpbGUgdGhlXG4rXHQgKiBIVyBjb3VudGVycyBvbmx5IGNvdmVyIGZyYW1lcyB0aGUgTUFDIGFjdHVhbGx5IHRyYW5zbWl0dGVkOyB0aGUgdHdvIGFyZVxuK1x0ICogZGlzam9pbnQuIFRoaXMgcnVucyBvbmNlLCBvdXRzaWRlIHRoZSBzZXFjb3VudCByZXRyeSBsb29wLCBzbyBhIHJhY2luZ1xuK1x0ICogc3RhdHMgdXBkYXRlIGNhbm5vdCBtYWtlIHRoZSBhY2N1bXVsYXRpb24gcmUtYWRkIG9uIHJldHJ5LlxuK1x0ICovXG4rXHRzdGF0cy1cdTAwM2V0eF9lcnJvcnMgKz0gdHhfaHdfZXJyb3JzO1xuK31cbitcbisvKipcbisgKiBheGllbmV0X3h4dl9nZXRfZXRodG9vbF9zdGF0cyAtIENvcHkgWFhWIGNvdW50ZXJzIGZvciBldGh0b29sIC1TXG4rICogQGxwOiBQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuKyAqIEBkYXRhOiBPdXRwdXQgYnVmZmVyIHNpemVkIGZvciBBUlJBWV9TSVpFKGF4aWVuZXRfeHh2X3ByaXZfc3RhdHMpIHU2NCB2YWx1ZXNcbisgKi9cbitzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsIHU2NCAqZGF0YSlcbit7XG4rXHR1bnNpZ25lZCBpbnQgaSwgc3RhcnQ7XG4rXG4rXHRkbyB7XG4rXHRcdHN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCk7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoYXhpZW5ldF94eHZfcHJpdl9zdGF0cyk7IGkrKylcbitcdFx0XHRkYXRhW2ldID0gbHAtXHUwMDNleHh2X3N0YXRfYmFzZVtheGllbmV0X3h4dl9wcml2X3N0YXRzW2ldXTtcbitcdH0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2bHAtXHUwMDNlaHdfc3RhdHNfc2VxY291bnQsIHN0YXJ0KSk7XG4rfVxuK1xuKy8qKlxuKyAqIGF4aWVuZXRfeHh2X2dldF9zdHJpbmdzIC0gQ29weSBYWFYgZXRodG9vbCBzdGF0aXN0aWNzIG5hbWUgc3RyaW5nc1xuKyAqIEBkYXRhOiBPdXRwdXQgYnVmZmVyIGZvciB0aGUgc3RhdGlzdGljcyBuYW1lIHN0cmluZ3NcbisgKi9cbitzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfc3RyaW5ncyh1OCAqZGF0YSlcbit7XG4rXHRtZW1jcHkoZGF0YSwgYXhpZW5ldF94eHZfZXRodG9vbF9zdGF0c19zdHJpbmdzLFxuK1x0ICAgICAgIHNpemVvZihheGllbmV0X3h4dl9ldGh0b29sX3N0YXRzX3N0cmluZ3MpKTtcbit9XG4rXG4rLyoqXG4rICogYXhpZW5ldF94eHZfZ2V0X3NzZXRfY291bnQgLSBOdW1iZXIgb2YgWFhWIGV0aHRvb2wgc3RhdGlzdGljc1xuKyAqXG4rICogUmV0dXJuOiBDb3VudCBvZiBYWFYgaGFyZHdhcmUgc3RhdGlzdGljcyByZXBvcnRlZCB2aWEgZXRodG9vbCAtUy5cbisgKi9cbitzdGF0aWMgaW50IGF4aWVuZXRfeHh2X2dldF9zc2V0X2NvdW50KHZvaWQpXG4re1xuK1x0cmV0dXJuIEFSUkFZX1NJWkUoYXhpZW5ldF94eHZfZXRodG9vbF9zdGF0c19zdHJpbmdzKTtcbit9XG4rXG4rLyoqXG4rICogYXhpZW5ldF94eHZfZ2V0X3BhdXNlX3N0YXRzIC0gRmlsbCBldGh0b29sIHBhdXNlIGZyYW1lIHN0YXRpc3RpY3NcbisgKiBAbHA6IFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlXG4rICogQHBhdXNlX3N0YXRzOiBPdXRwdXQgZXRodG9vbF9wYXVzZV9zdGF0cyBzdHJ1Y3R1cmUgdG8gcG9wdWxhdGVcbisgKi9cbitzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfcGF1c2Vfc3RhdHMoc3RydWN0IGF4aWVuZXRfbG9jYWwgKmxwLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgZXRodG9vbF9wYXVzZV9zdGF0cyAqcGF1c2Vfc3RhdHMpXG4re1xuK1x0dW5zaWduZWQgaW50IHN0YXJ0O1xuK1xuK1x0ZG8ge1xuK1x0XHRzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2bHAtXHUwMDNlaHdfc3RhdHNfc2VxY291bnQpO1xuK1x0XHRwYXVzZV9zdGF0cy1cdTAwM2V0eF9wYXVzZV9mcmFtZXMgPVxuK1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfUEFVU0VdO1xuK1x0XHRwYXVzZV9zdGF0cy1cdTAwM2VyeF9wYXVzZV9mcmFtZXMgPVxuK1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfUEFVU0VdO1xuK1x0fSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeShcdTAwMjZscC1cdTAwM2Vod19zdGF0c19zZXFjb3VudCwgc3RhcnQpKTtcbit9XG4rXG4rLyoqXG4rICogYXhpZW5ldF94eHZfZ2V0X2V0aF9tYWNfc3RhdHMgLSBGaWxsIElFRUUgODAyLjMgTUFDIHN0YXRpc3RpY3NcbisgKiBAbHA6IFBvaW50ZXIgdG8gdGhlIGF4aWVuZXRfbG9jYWwgc3RydWN0dXJlXG4rICogQG1hY19zdGF0czogT3V0cHV0IGV0aHRvb2xfZXRoX21hY19zdGF0cyBzdHJ1Y3R1cmUgdG8gcG9wdWxhdGVcbisgKi9cbitzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXG4rXHRcdFx0XHRcdCAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKVxuK3tcbitcdHVuc2lnbmVkIGludCBzdGFydDtcbitcbitcdGRvIHtcbitcdFx0c3RhcnQgPSByZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50KTtcbitcdFx0bWFjX3N0YXRzLVx1MDAzZUZyYW1lc1RyYW5zbWl0dGVkT0sgPVxuK1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9QQUNLRVRTXTtcbitcdFx0bWFjX3N0YXRzLVx1MDAzZUZyYW1lc1JlY2VpdmVkT0sgPVxuK1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9QQUNLRVRTXTtcbitcdFx0bWFjX3N0YXRzLVx1MDAzZU9jdGV0c1RyYW5zbWl0dGVkT0sgPVxuK1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfVE9UQUxfR09PRF9CWVRFU107XG4rXHRcdG1hY19zdGF0cy1cdTAwM2VPY3RldHNSZWNlaXZlZE9LID1cbitcdFx0XHRscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX1RPVEFMX0dPT0RfQllURVNdO1xuK1x0XHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVDaGVja1NlcXVlbmNlRXJyb3JzID1cbitcdFx0XHRscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX0JBRF9GQ1NdO1xuK1x0XHRtYWNfc3RhdHMtXHUwMDNlTXVsdGljYXN0RnJhbWVzWG1pdHRlZE9LID1cbitcdFx0XHRscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1RYX01VTFRJQ0FTVF07XG4rXHRcdG1hY19zdGF0cy1cdTAwM2VCcm9hZGNhc3RGcmFtZXNYbWl0dGVkT0sgPVxuK1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfVFhfQlJPQURDQVNUXTtcbitcdFx0bWFjX3N0YXRzLVx1MDAzZU11bHRpY2FzdEZyYW1lc1JlY2VpdmVkT0sgPVxuK1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfTVVMVElDQVNUXTtcbitcdFx0bWFjX3N0YXRzLVx1MDAzZUJyb2FkY2FzdEZyYW1lc1JlY2VpdmVkT0sgPVxuK1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfQlJPQURDQVNUXTtcbitcdFx0bWFjX3N0YXRzLVx1MDAzZUluUmFuZ2VMZW5ndGhFcnJvcnMgPVxuK1x0XHRcdGxwLVx1MDAzZXh4dl9zdGF0X2Jhc2VbWFhWX1NUQVRfUlhfSU5SQU5HRUVSUl07XG4rXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpO1xuK31cbitcbisvKipcbisgKiBheGllbmV0X3h4dl9nZXRfcm1vbl9zdGF0cyAtIEZpbGwgUk1PTiBzdGF0aXN0aWNzIGFuZCBoaXN0b2dyYW0gcmFuZ2VzXG4rICogQGxwOiBQb2ludGVyIHRvIHRoZSBheGllbmV0X2xvY2FsIHN0cnVjdHVyZVxuKyAqIEBybW9uX3N0YXRzOiBPdXRwdXQgZXRodG9vbF9ybW9uX3N0YXRzIHN0cnVjdHVyZSB0byBwb3B1bGF0ZVxuKyAqIEByYW5nZXM6IFNldCB0byB0aGUgUk1PTiBoaXN0b2dyYW0gcmFuZ2UgdGFibGVcbisgKi9cbitzdGF0aWMgdm9pZCBheGllbmV0X3h4dl9nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgYXhpZW5ldF9sb2NhbCAqbHAsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcbitcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpXG4re1xuK1x0dW5zaWduZWQgaW50IHN0YXJ0O1xuK1xuK1x0ZG8ge1xuK1x0XHRzdGFydCA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2bHAtXHUwMDNlaHdfc3RhdHNfc2VxY291bnQpO1xuK1x0XHRybW9uX3N0YXRzLVx1MDAzZXVuZGVyc2l6ZV9wa3RzID1cbitcdFx0XHRscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX1VOREVSU0laRV07XG4rXHRcdHJtb25fc3RhdHMtXHUwMDNlb3ZlcnNpemVfcGt0cyA9XG4rXHRcdFx0bHAtXHUwMDNleHh2X3N0YXRfYmFzZVtYWFZfU1RBVF9SWF9PVkVSU0laRV07XG4rXHRcdHJtb25fc3RhdHMtXHUwMDNlZnJhZ21lbnRzID1cbitcdFx0XHRscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX0ZSQUdNRU5UXTtcbitcdFx0cm1vbl9zdGF0cy1cdTAwM2VqYWJiZXJzID1cbitcdFx0XHRscC1cdTAwM2V4eHZfc3RhdF9iYXNlW1hYVl9TVEFUX1JYX0pBQkJFUl07XG4rXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNmxwLVx1MDAzZWh3X3N0YXRzX3NlcWNvdW50LCBzdGFydCkpO1xuK1xuK1x0LyogWFhWIGN1cnJlbnRseSBleHBvc2VzIG9ubHkgYWdncmVnYXRlIFJNT04gY291bnRlcnMsIG5vdCBwZXItYmluXG4rXHQgKiBoaXN0b2dyYW0gYnVja2V0cy4gS2VlcCByYW5nZXMgTlVMTCB1bnRpbCBoaXN0b2dyYW0gYmlucyBhcmUgd2lyZWQuXG4rXHQgKi9cbitcdCpyYW5nZXMgPSBOVUxMO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgYXhpZW5ldF9jb25maWcgYXhpZW5ldF8xMGcyNWdfY29uZmlnID0ge1xuK1x0LnN3X3BhZGRpbmcgPSB0cnVlLFxuK1x0LmludGVybmFsX3BjcyA9IHRydWUsXG4rXHQucmVnc19uID0gWFhWX1JFR1NfTixcbitcdC5jbGtfaW5pdCA9IGF4aWVuZXRfMTBnMjVnX2Nsa19pbml0LFxuK1x0LnNldG9wdGlvbnMgPSBheGllbmV0X3h4dl9zZXRvcHRpb25zLFxuK1x0LnByb2JlX2luaXQgPSBheGllbmV0X3h4dl9wcm9iZV9pbml0LFxuK1x0Lmd0X3Jlc2V0ID0gYXhpZW5ldF94eHZfZ3RfcmVzZXQsXG4rXHQubWFjX2luaXQgPSBheGllbmV0X3h4dl9tYWNfaW5pdCxcbitcdC5nZXRfcmVncyA9IGF4aWVuZXRfeHh2X2dldF9yZWdzLFxuK1x0LnBoeWxpbmtfc2V0X2NhcHMgPSBheGllbmV0X3h4dl9waHlsaW5rX3NldF9jYXBhYmlsaXRpZXMsXG4rXHQucGNzX29wcyA9IFx1MDAyNmF4aWVuZXRfeHh2X3Bjc19vcHMsXG4rXHQuc3RhdHNfdXBkYXRlID0gYXhpZW5ldF94eHZfc3RhdHNfdXBkYXRlLFxuK1x0LmdldF9zdGF0czY0ID0gYXhpZW5ldF94eHZfZ2V0X3N0YXRzNjQsXG4rXHQuZ2V0X2V0aHRvb2xfc3RhdHMgPSBheGllbmV0X3h4dl9nZXRfZXRodG9vbF9zdGF0cyxcbitcdC5nZXRfc3RyaW5ncyA9IGF4aWVuZXRfeHh2X2dldF9zdHJpbmdzLFxuK1x0LmdldF9zc2V0X2NvdW50ID0gYXhpZW5ldF94eHZfZ2V0X3NzZXRfY291bnQsXG4rXHQuZ2V0X3BhdXNlX3N0YXRzID0gYXhpZW5ldF94eHZfZ2V0X3BhdXNlX3N0YXRzLFxuK1x0LmdldF9ldGhfbWFjX3N0YXRzID0gYXhpZW5ldF94eHZfZ2V0X2V0aF9tYWNfc3RhdHMsXG4rXHQuZ2V0X3Jtb25fc3RhdHMgPSBheGllbmV0X3h4dl9nZXRfcm1vbl9zdGF0cyxcbit9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF94eHYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF94eHYuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmViZmE3ZDU3YTg1OTFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC94aWxpbnhfYXhpZW5ldF94eHYuaFxuQEAgLTAsMCArMSwxNDEgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4rLypcbisgKiBYWFYgKDEwRy8yNUcpIHN1cHBvcnRcbisgKlxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuXG4rICovXG4rXG4rI2lmbmRlZiBYSUxJTlhfQVhJRU5FVF9YWFZfSFxuKyNkZWZpbmUgWElMSU5YX0FYSUVORVRfWFhWX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbitcbitzdHJ1Y3QgYXhpZW5ldF9sb2NhbDtcbitzdHJ1Y3QgYXhpZW5ldF9jb25maWc7XG4rXG4rI2RlZmluZSBYWFZfUkVHU19OXHRcdDQ2XG4rXG4rLyogWFhWIE1BQyBSZWdpc3RlciBEZWZpbml0aW9ucyAqL1xuKyNkZWZpbmUgWFhWX0dUX1JFU0VUX09GRlNFVFx0XHQweDAwMDAwMDAwXG4rI2RlZmluZSBYWFZfUkVTRVRfT0ZGU0VUXHRcdDB4MDAwMDAwMDRcbisjZGVmaW5lIFhYVl9NT0RFX09GRlNFVFx0XHRcdDB4MDAwMDAwMDhcbisjZGVmaW5lIFhYVl9UQ19PRkZTRVRcdFx0XHQweDAwMDAwMDBDXG4rI2RlZmluZSBYWFZfUkNXMV9PRkZTRVRcdFx0XHQweDAwMDAwMDE0XG4rI2RlZmluZSBYWFZfSlVNX09GRlNFVFx0XHRcdDB4MDAwMDAwMThcbisjZGVmaW5lIFhYVl9WTF9MRU5HVEhfT0ZGU0VUXHRcdDB4MDAwMDAwMUNcbisjZGVmaW5lIFhYVl9USUNLUkVHX09GRlNFVFx0XHQweDAwMDAwMDIwXG4rI2RlZmluZSBYWFZfQ09ORklHX1JFVklTSU9OXHRcdDB4MDAwMDAwMjRcbisjZGVmaW5lIFhYVl9DT05GSUdfMTU4OF9PRkZTRVRcdFx0MHgwMDAwMDAzOFxuKyNkZWZpbmUgWFhWX0NPTkZJR19UWF9GTE9XX0NUUkwxX09GRlNFVFx0MHgwMDAwMDA0MFxuKyNkZWZpbmUgWFhWX0NPTkZJR19SWF9GTE9XX0NUUkwxX09GRlNFVFx0MHgwMDAwMDA5NFxuKyNkZWZpbmUgWFhWX0NPTkZJR19SWF9GTE9XX0NUUkwyX09GRlNFVFx0MHgwMDAwMDA5OFxuKyNkZWZpbmUgWFhWX0NPTkZJR19SU0ZFQ19PRkZTRVRcdFx0MHgwMDAwMDBEMFxuKyNkZWZpbmUgWFhWX0NPTkZJR19GRUNfT0ZGU0VUXHRcdDB4MDAwMDAwRDRcbisjZGVmaW5lIFhYVl9BTl9DVEwxX09GRlNFVFx0XHQweDAwMDAwMEUwXG4rI2RlZmluZSBYWFZfQU5fQ1RMMl9PRkZTRVRcdFx0MHgwMDAwMDBFNFxuKyNkZWZpbmUgWFhWX0FOX0FCSUxJVFlfT0ZGU0VUXHRcdDB4MDAwMDAwRjhcbisjZGVmaW5lIFhYVl9MVF9DVEwxX09GRlNFVFx0XHQweDAwMDAwMTAwXG4rI2RlZmluZSBYWFZfU1dJVENIX0NPUkVfU1BFRURfT0ZGU0VUXHQweDAwMDAwMTM4XG4rI2RlZmluZSBYWFZfQ09ORklHXzE1ODhfMzJCSVRfT0ZGU0VUXHQweDAwMDAwMTNDXG4rI2RlZmluZSBYWFZfVFhfQ09ORklHXzE1ODhfT0ZGU0VUXHQweDAwMDAwMTQwXG4rI2RlZmluZSBYWFZfUlhfQ09ORklHXzE1ODhfT0ZGU0VUXHQweDAwMDAwMTQ0XG4rI2RlZmluZSBYWFZfR1RXSVpfQ1RSTF9PRkZTRVRcdFx0MHgwMDAwMDE1NFxuKyNkZWZpbmUgWFhWX1NUQVRSWF9TVEFUVVMwX09GRlNFVFx0MHgwMDAwMDQwMFxuKyNkZWZpbmUgWFhWX1JYX1NUQVRVU19SRUcxXHRcdDB4MDAwMDA0MDRcbisjZGVmaW5lIFhYVl9TVEFUUlhfU1RBVFVTMl9PRkZTRVRcdDB4MDAwMDA0MDhcbisjZGVmaW5lIFhYVl9TVEFUUlhfQkxLTENLX09GRlNFVFx0MHgwMDAwMDQwQ1xuKyNkZWZpbmUgWFhWX1NUQVRfUlhfUlNGRUNfU1RBVFVTX09GRlNFVFx0MHgwMDAwMDQzQ1xuKyNkZWZpbmUgWFhWX1NUQVRfUlhfRkVDX1NUQVRVU19PRkZTRVRcdDB4MDAwMDA0NDhcbisjZGVmaW5lIFhYVl9TVEFUX1RYX1JTRkVDX1NUQVRVU19PRkZTRVRcdDB4MDAwMDA0NENcbisjZGVmaW5lIFhYVl9TVEFUX1RYX0ZMT1dfQ1RSTDFfT0ZGU0VUXHQweDAwMDAwNDUwXG4rI2RlZmluZSBYWFZfU1RBVF9SWF9GTE9XX0NUUkwxX09GRlNFVFx0MHgwMDAwMDQ1NFxuKyNkZWZpbmUgWFhWX1NUQVRfQU5fU1RTX09GRlNFVFx0XHQweDAwMDAwNDU4XG4rI2RlZmluZSBYWFZfU1RBVF9BTl9MUF9TVEFUVVNfT0ZGU0VUXHQweDAwMDAwNDVDXG4rI2RlZmluZSBYWFZfU1RBVF9BTl9MSU5LX0NUTF9PRkZTRVRcdDB4MDAwMDA0NjBcbisjZGVmaW5lIFhYVl9TVEFUX0xUX1NUQVRVUzFfT0ZGU0VUXHQweDAwMDAwNDY0XG4rI2RlZmluZSBYWFZfU1RBVF9MVF9TVEFUVVMyX09GRlNFVFx0MHgwMDAwMDQ2OFxuKyNkZWZpbmUgWFhWX1NUQVRfTFRfU1RBVFVTM19PRkZTRVRcdDB4MDAwMDA0NkNcbisjZGVmaW5lIFhYVl9TVEFUX0xUX1NUQVRVUzRfT0ZGU0VUXHQweDAwMDAwNDcwXG4rI2RlZmluZSBYWFZfU1RBVF9MVF9DT0VGRjBfT0ZGU0VUXHQweDAwMDAwNDc0XG4rI2RlZmluZSBYWFZfU1RBVF9SWF9WQUxJRF9DVFJMX0NPREVfT0ZGU0VUXHQweDAwMDAwNDk0XG4rI2RlZmluZSBYWFZfU1RBVF9DT1JFX1NQRUVEX09GRlNFVFx0MHgwMDAwMDQ5OFxuKyNkZWZpbmUgWFhWX1NUQVRfVFNOX09GRlNFVFx0XHQweDAwMDAwNDlDXG4rI2RlZmluZSBYWFZfU1RBVF9HVFdJWl9PRkZTRVRcdFx0MHgwMDAwMDRBMFxuKyNkZWZpbmUgWFhWX1NUQVRfQU5fTElOS19DVEwyX09GRlNFVFx0MHgwMDAwMDlGMFxuK1xuKy8qIFhYViBzdGF0aXN0aWNzIGNvdW50ZXIgcmVnaXN0ZXJzIChQRzIxMCkuIEVhY2ggY291bnRlciBpcyBhIHBhaXIgb2YgMzItYml0XG4rICogcmVnaXN0ZXJzOyB0aGUgTVNCIHJlZ2lzdGVyIGlzIFhYVl9TVEFUX01TQl9PRkZTRVQgYnl0ZXMgYWJvdmUgdGhlIExTQi5cbisgKi9cbisjZGVmaW5lIFhYVl9TVEFUX01TQl9PRkZTRVRcdFx0XHQ0XG4rI2RlZmluZSBYWFZfU1RBVF9UWF9GUkFNRV9FUlJPUl9PRkZTRVRcdFx0MHgwMDAwMDZBMFxuKyNkZWZpbmUgWFhWX1NUQVRfVFhfVE9UQUxfUEFDS0VUU19PRkZTRVRcdDB4MDAwMDA3MDBcbisjZGVmaW5lIFhYVl9TVEFUX1RYX1RPVEFMX0dPT0RfUEFDS0VUU19PRkZTRVRcdDB4MDAwMDA3MDhcbisjZGVmaW5lIFhYVl9TVEFUX1RYX1RPVEFMX0JZVEVTX09GRlNFVFx0XHQweDAwMDAwNzEwXG4rI2RlZmluZSBYWFZfU1RBVF9UWF9UT1RBTF9HT09EX0JZVEVTX09GRlNFVFx0MHgwMDAwMDcxOFxuKyNkZWZpbmUgWFhWX1NUQVRfVFhfQkFEX0ZDU19PRkZTRVRcdFx0MHgwMDAwMDdCOFxuKyNkZWZpbmUgWFhWX1NUQVRfVFhfTVVMVElDQVNUX09GRlNFVFx0XHQweDAwMDAwN0Q4XG4rI2RlZmluZSBYWFZfU1RBVF9UWF9CUk9BRENBU1RfT0ZGU0VUXHRcdDB4MDAwMDA3RTBcbisjZGVmaW5lIFhYVl9TVEFUX1RYX1BBVVNFX09GRlNFVFx0XHQweDAwMDAwN0YwXG4rI2RlZmluZSBYWFZfU1RBVF9SWF9UT1RBTF9QQUNLRVRTX09GRlNFVFx0MHgwMDAwMDgwOFxuKyNkZWZpbmUgWFhWX1NUQVRfUlhfVE9UQUxfR09PRF9QQUNLRVRTX09GRlNFVFx0MHgwMDAwMDgxMFxuKyNkZWZpbmUgWFhWX1NUQVRfUlhfVE9UQUxfQllURVNfT0ZGU0VUXHRcdDB4MDAwMDA4MThcbisjZGVmaW5lIFhYVl9TVEFUX1JYX1RPVEFMX0dPT0RfQllURVNfT0ZGU0VUXHQweDAwMDAwODIwXG4rI2RlZmluZSBYWFZfU1RBVF9SWF9VTkRFUlNJWkVfT0ZGU0VUXHRcdDB4MDAwMDA4OThcbisjZGVmaW5lIFhYVl9TVEFUX1JYX0ZSQUdNRU5UX09GRlNFVFx0XHQweDAwMDAwOEEwXG4rI2RlZmluZSBYWFZfU1RBVF9SWF9PVkVSU0laRV9PRkZTRVRcdFx0MHgwMDAwMDhBOFxuKyNkZWZpbmUgWFhWX1NUQVRfUlhfSkFCQkVSX09GRlNFVFx0XHQweDAwMDAwOEI4XG4rI2RlZmluZSBYWFZfU1RBVF9SWF9CQURfRkNTX09GRlNFVFx0XHQweDAwMDAwOEMwXG4rI2RlZmluZSBYWFZfU1RBVF9SWF9NVUxUSUNBU1RfT0ZGU0VUXHRcdDB4MDAwMDA4RTBcbisjZGVmaW5lIFhYVl9TVEFUX1JYX0JST0FEQ0FTVF9PRkZTRVRcdFx0MHgwMDAwMDhFOFxuKyNkZWZpbmUgWFhWX1NUQVRfUlhfUEFVU0VfT0ZGU0VUXHRcdDB4MDAwMDA4RjhcbisjZGVmaW5lIFhYVl9TVEFUX1JYX0lOUkFOR0VFUlJfT0ZGU0VUXHRcdDB4MDAwMDA5MDhcbitcbisvKiBYWFYgTUFDIFJlZ2lzdGVyIE1hc2sgRGVmaW5pdGlvbnMgKi9cbisjZGVmaW5lIFhYVl9HVF9SRVNFVF9NQVNLXHRcdEJJVCgwKVxuKyNkZWZpbmUgWFhWX1RDX1RYX01BU0tcdFx0XHRCSVQoMClcbisjZGVmaW5lIFhYVl9SQ1cxX1JYX01BU0tcdFx0QklUKDApXG4rI2RlZmluZSBYWFZfUkNXMV9GQ1NfTUFTS1x0XHRCSVQoMSlcbisjZGVmaW5lIFhYVl9UQ19GQ1NfTUFTS1x0XHRcdEJJVCgxKVxuKyNkZWZpbmUgWFhWX1JYX0JMS0xDS19NQVNLXHRcdEJJVCgwKVxuKyNkZWZpbmUgWFhWX1RJQ0tSRUdfU1RBVEVOX01BU0tcdFx0QklUKDApXG4rI2RlZmluZSBYWFZfR1RXSVpfUkVTRVRfRE9ORVx0XHQoQklUKDApIHwgQklUKDEpKVxuKyNkZWZpbmUgWFhWX01BSl9NQVNLXHRcdFx0R0VOTUFTSyg3LCAwKVxuKyNkZWZpbmUgWFhWX01JTl9NQVNLXHRcdFx0R0VOTUFTSygxNSwgOClcbisvKiBJUCB2My4yKyBleHBvc2VzIEdUIHdpemFyZCBzdGF0dXMgYmVmb3JlIG90aGVyIHJlZ2lzdGVyIGFjY2VzcyAoUEcyMTApLiAqL1xuKyNkZWZpbmUgWFhWX0lQX1ZFUl9HVFdJWl9NQUpfTUlOXHQzXG4rI2RlZmluZSBYWFZfSVBfVkVSX0dUV0laX01JTl9NSU5cdDJcbisjZGVmaW5lIFhYVl9BTl9DT01QTEVURV9NQVNLXHRcdEJJVCgyKVxuKyNkZWZpbmUgWFhWX1NUQVRfQ09SRV9TUEVFRF9SVFNXX01BU0tcdEJJVCgxKVxuKyNkZWZpbmUgWFhWX1NUQVRfQ09SRV9TUEVFRF8xMEdfTUFTS1x0QklUKDApXG4rI2RlZmluZSBYWFZfUlhfU1RBVFVTX01BU0tcdFx0QklUKDApXG4rXG4rLyogWFhWICgxMEcvMjVHKSBNQUMgc3RhdGlzdGljcyBjb3VudGVycywgdXNlZCB0byBpbmRleCB4eHZfc3RhdF9iYXNlW10uICovXG4rZW51bSB4eHZfc3RhdCB7XG4rXHRYWFZfU1RBVF9SWF9UT1RBTF9QQUNLRVRTID0gMCxcbitcdFhYVl9TVEFUX1JYX1RPVEFMX0dPT0RfUEFDS0VUUyxcbitcdFhYVl9TVEFUX1JYX1RPVEFMX0JZVEVTLFxuK1x0WFhWX1NUQVRfUlhfVE9UQUxfR09PRF9CWVRFUyxcbitcdFhYVl9TVEFUX1JYX0JBRF9GQ1MsXG4rXHRYWFZfU1RBVF9SWF9JTlJBTkdFRVJSLFxuK1x0WFhWX1NUQVRfUlhfTVVMVElDQVNULFxuK1x0WFhWX1NUQVRfUlhfQlJPQURDQVNULFxuK1x0WFhWX1NUQVRfUlhfVU5ERVJTSVpFLFxuK1x0WFhWX1NUQVRfUlhfRlJBR01FTlQsXG4rXHRYWFZfU1RBVF9SWF9KQUJCRVIsXG4rXHRYWFZfU1RBVF9SWF9PVkVSU0laRSxcbitcdFhYVl9TVEFUX1JYX1BBVVNFLFxuK1x0WFhWX1NUQVRfVFhfVE9UQUxfUEFDS0VUUyxcbitcdFhYVl9TVEFUX1RYX1RPVEFMX0dPT0RfUEFDS0VUUyxcbitcdFhYVl9TVEFUX1RYX1RPVEFMX0JZVEVTLFxuK1x0WFhWX1NUQVRfVFhfVE9UQUxfR09PRF9CWVRFUyxcbitcdFhYVl9TVEFUX1RYX0JBRF9GQ1MsXG4rXHRYWFZfU1RBVF9UWF9GUkFNRV9FUlJPUixcbitcdFhYVl9TVEFUX1RYX01VTFRJQ0FTVCxcbitcdFhYVl9TVEFUX1RYX0JST0FEQ0FTVCxcbitcdFhYVl9TVEFUX1RYX1BBVVNFLFxuK1x0WFhWX1NUQVRfQ09VTlQsXG4rfTtcbitcbitleHRlcm4gY29uc3Qgc3RydWN0IGF4aWVuZXRfY29uZmlnIGF4aWVuZXRfMTBnMjVnX2NvbmZpZztcbitcbisjZW5kaWYgLyogWElMSU5YX0FYSUVORVRfWFhWX0ggKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjA3OjE0LjY3NjM3NTU0OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2MzA0ODY4ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYaWxpbnggWFhWIEV0aGVybmV0IERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYnJlYWsgZG93biB0aGUgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFhpbGlueCBYWFYgMTBHLzI1RyBFdGhlcm5ldCBTdWJzeXN0ZW0gdG8gdGhlIGV4aXN0aW5nIGB4aWxpbnhfYXhpZW5ldGAgZHJpdmVyLiBJIHNlZSB0aGUgdXN1YWwgc3VzcGVjdHM6IGRldmljZSB0cmVlIGJpbmRpbmdzLCB0aGUgTUFJTlRBSU5FUlMgZmlsZSwgdGhlIE1ha2VmaWxlLCBhbmQgdGhlIHJlbGV2YW50IEMgYW5kIGhlYWRlciBmaWxlcyDigJMgc3BlY2lmaWNhbGx5IGB4aWxpbnhfYXhpZW5ldF9tYWluLmNgLCBgeGlsaW54X2F4aWVuZXRfeHh2LmNgLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgaGVhZGVyIGZpbGVzLlxuXG5Ob3csIGJlZm9yZSBJIGdvIHRvbyBkZWVwLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaGFyZHdhcmUgaW1wbGljYXRpb25zLiBXaGF0IGlzIGBDT05GSUdfWElMSU5YX0FYSV9FTUFDYD8gSXMgaXQgYW4gT0Ygb3IgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgWGlsaW54IEZQR0FzIG9yIFNvQ3Mg4oCTIHRoaW5rIE1pY3JvQmxhemUsIFp5bnEsIFp5bnFNUCwgb3IgZXZlbiBWZXJzYWw/IFRoaXMgaXMgY3JpdGljYWwuIENhbiBJIGFjdHVhbGx5IHRlc3QgdGhpcyBpbiBRRU1VIG9yIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIG9yIGRvZXMgaXQgcmVxdWlyZSBkZWRpY2F0ZWQgRlBHQSBoYXJkd2FyZT9cblxuQWgsIHJpZ2h0LCBrZXJuZWwgZ3VpZGVsaW5lcy4uLiBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciB0aGlzIHBhdGNoIGlzIFwid29ydGggZnV6emluZ1wiLiBUaGUgZ3VpZGVsaW5lcyBzcGVjaWZ5IHRoYXQgaWYgdGhlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUsIHRoZW4gaXQgc2hvdWxkIHJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UuIEFsc28sIHRoZSBzYW1lIGdvZXMgZm9yIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaC9TbWFydE5JQy9HUFUgZHJpdmVycy4gU2luY2UgdGhpcyBpcyBYaWxpbngtc3BlY2lmaWMsIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC5cblxuU28sIGxldCdzIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBvZiBgQ09ORklHX1hJTElOWF9BWElfRU1BQ2AgYW5kIGhvdyBpdCdzIGRlZmluZWQuIERvZXMgc3RhbmRhcmQgUUVNVSBldmVuIGVtdWxhdGUgWGlsaW54IEFYSSBFdGhlcm5ldD8gSXMgaXQgYW4gT0YgcGxhdGZvcm0gZHJpdmVyIHByaW1hcmlseSB1c2VkIG9uIG5vbi14ODYgYXJjaGl0ZWN0dXJlcywgbGlrZSBBUk0gb3IgTWljcm9CbGF6ZT8gSSdsbCBxdWlja2x5IHVzZSBncmVwcGVyIHRvIGV4YW1pbmUgdGhlIEtjb25maWcgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbidzIHNwZWNpZmljcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5NTMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjowNzoxOS4zMDY4NjUyNjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA1MTc5OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhJTElOWF9BWElfRU1BQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbnhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWc9MTk9Y29uZmlnIFhJTElOWF9FTUFDTElURVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWctMjUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWc6MjY6Y29uZmlnIFhJTElOWF9BWElfRU1BQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnLTI3LVxcdHRyaXN0YXRlIFxcXCJYaWxpbnggMTAvMTAwLzEwMDAgQVhJIEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjA3OjE5LjM5NzM4Nzg0MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg2MjI1MjY3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgS2NvbmZpZyBmaWxlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBYaWxpbnggRXRoZXJuZXQgS2NvbmZpZyoqXG5cbk9rYXksIHRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnYCBmaWxlLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBodWIgZm9yIGFsbCB0aGUgWGlsaW54IEV0aGVybmV0IGRldmljZSBkcml2ZXJzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgdmFyaW91cyBmZWF0dXJlcyBhbmQgaGFyZHdhcmUgdmFyaWF0aW9ucyBhcmUgZXhwb3NlZCB0byB0aGUgdXNlciBkdXJpbmcgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHByb2Nlc3MuIEknbSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgZGVmYXVsdCB2YWx1ZXMsIGFuZCB0aGUgaGVscCB0ZXh0IOKAkyB0aGF0J3Mgd2hlcmUgdGhlIHJlYWwgc3RvcnkgbGllcy5cblxuRmlyc3QgdGhpbmcncyBmaXJzdCwgSSdsbCBzY2FuIGZvciB0aGUgbWFpbiBkcml2ZXIgZW50cnksIHVzdWFsbHkgc29tZXRoaW5nIGxpa2UgYENPTkZJR19YSUxJTlhfRU1BQ2Agb3IgYENPTkZJR19YSUxJTlhfR01BQ2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwcmltYXJ5IGRyaXZlciBhbmQgaG93IGl0cyBtb2R1bGFyIGRlc2lnbiB3b3Jrcy4gVGhlbiBJJ2xsIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGhhcmR3YXJlIGJsb2NrcyBpdCdzIG1lYW50IHRvIHN1cHBvcnQg4oCTIGFyZSB3ZSB0YWxraW5nIGFib3V0IFp5bnEsIFZlcnNhbCwgb3Igb2xkZXIgcGxhdGZvcm1zPyBBcmUgdGhlcmUgbXVsdGlwbGUgRU1BQyBkZXZpY2VzIHRoYXQgYXJlIGhhbmRsZWQgc2VwYXJhdGVseSBvciBjb21iaW5lZD8gQXJlIHRoZXJlIGFueSBTb0Mtc3BlY2lmaWMgb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhpbmdzIGxpa2UgRE1BIGVuZ2luZXMsIFBIWSBzZWxlY3Rpb24sIG9yIE1ESU8gY29uZmlndXJhdGlvbj9cblxuSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGhvdyB0aGVzZSBLY29uZmlnIG9wdGlvbnMgbWFwIHRvIHNwZWNpZmljIFhpbGlueCBoYXJkd2FyZSBmZWF0dXJlcy4gQXJlIHRoZXJlIG9wdGlvbnMgZm9yIGVuYWJsaW5nIGp1bWJvIGZyYW1lcywgY2hlY2tzdW0gb2ZmbG9hZCwgZmxvdyBjb250cm9sLCBvciBvdGhlciBvZmZsb2FkaW5nIGZlYXR1cmVzPyBBcmUgdGhlcmUgcGxhdGZvcm0tc3BlY2lmaWMgZGVwZW5kZW5jaWVzPyBJdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBjaG9pY2VzIGFmZmVjdCBwZXJmb3JtYW5jZSBhbmQgcG93ZXIgY29uc3VtcHRpb24uIEZvciBleGFtcGxlLCBzb21lIGRldmljZXMgbWlnaHQgcmVxdWlyZSBzcGVjaWZpYyBjbG9jayBjb25maWd1cmF0aW9ucyBvciBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMsIGFuZCBJJ2xsIHNlZSBob3cgdGhvc2UgYXJlIGNvbnRyb2xsZWQgaGVyZS4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSBhcmNoaXRlY3R1cmUgb3IgYm9hcmQtc3BlY2lmaWMgb3B0aW9ucywgYXMgd2VsbCBhcyBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGRyaXZlcnMgb3Iga2VybmVsIHN1YnN5c3RlbXMuXG5cbkZpbmFsbHksIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIOKAkyBgaWZgIHN0YXRlbWVudHMgYW5kIHRoZSBsaWtlLiBUaGF04oCZcyBob3cgSSBnZXQgdG8gdGhlIHJlYWwgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGV2aWNlLWRyaXZlciBjb25maWd1cmF0aW9uLiBDb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgYXJlIGhvdyB3ZSBtYWtlIHRoZSBkZXZpY2UgZHJpdmVyIGZsZXhpYmxlIGVub3VnaCB0byBzdXBwb3J0IHRoZSBkaWZmZXJlbnQgWGlsaW54IFNvQ3MuIEFsc28sIEknbGwgbG9vayBmb3IgYW55IGBzZWxlY3RgIHN0YXRlbWVudHMgdGhhdCBhdXRvbWF0aWNhbGx5IHB1bGwgaW4gb3RoZXIgbW9kdWxlcy4gQW5kLCBvZiBjb3Vyc2UsIEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBhbnkgb2J2aW91cyB0eXBvcyBvciBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiB0cmFwcyB0aGF0IG1pZ2h0IGxlYWQgdG8gYnVpbGQgZXJyb3JzIG9yLCB3b3JzZSwgcnVudGltZSBpc3N1ZXMuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgY29uZmlnIGlzIGNsZWFuIGFuZCB1bmRlcnN0YW5kYWJsZS4gV2l0aCBsdWNrLCB0aGlzIEtjb25maWcgd2lsbCBiZSB3ZWxsLXN0cnVjdHVyZWQsIGVhc3kgdG8gZm9sbG93LCBhbmQgcHJvdmlkZSBnb29kLCBoZWxwZnVsIGRvY3VtZW50YXRpb24gd2l0aGluIGl0cyBoZWxwIHRleHQuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMjA0MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjA3OjI4LjAxOTkxNzAyNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFhpbGlueCBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgTkVUX1ZFTkRPUl9YSUxJTlhcXG4gICA3OlxcdFxcdGJvb2wgXFxcIlhpbGlueCBkZXZpY2VzXFxcIlxcbiAgIDg6XFx0XFx0ZGVmYXVsdCB5XFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXFxuICAxMzpcXHRcXHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcXG4gIDE0OlxcdFxcdCAgdGhlIHF1ZXN0aW9ucyBhYm91dCBYaWxpbnggZGV2aWNlcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZFxcbiAgMTU6XFx0XFx0ICBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRpZiBORVRfVkVORE9SX1hJTElOWFxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgWElMSU5YX0VNQUNMSVRFXFxuICAyMDpcXHRcXHR0cmlzdGF0ZSBcXFwiWGlsaW54IDEwLzEwMCBFdGhlcm5ldCBMaXRlIHN1cHBvcnRcXFwiXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTVxcbiAgMjI6XFx0XFx0c2VsZWN0IFBIWUxJQlxcbiAgMjM6XFx0XFx0aGVscFxcbiAgMjQ6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgMTAvMTAwIEV0aGVybmV0IExpdGUgZnJvbSBYaWxpbnguXFxuICAyNTpcXHRcXG4gIDI2OlxcdGNvbmZpZyBYSUxJTlhfQVhJX0VNQUNcXG4gIDI3OlxcdFxcdHRyaXN0YXRlIFxcXCJYaWxpbnggMTAvMTAwLzEwMDAgQVhJIEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuICAyODpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTVxcbiAgMjk6XFx0XFx0ZGVwZW5kcyBvbiBYSUxJTlhfRE1BXFxuICAzMDpcXHRcXHRzZWxlY3QgUEhZTElOS1xcbiAgMzE6XFx0XFx0c2VsZWN0IERJTUxJQlxcbiAgMzI6XFx0XFx0aGVscFxcbiAgMzM6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgMTAvMTAwLzEwMDAgRXRoZXJuZXQgZnJvbSBYaWxpbnggZm9yIHRoZVxcbiAgMzQ6XFx0XFx0ICBBWEkgYnVzIGludGVyZmFjZSB1c2VkIGluIFhpbGlueCBWaXJ0ZXggRlBHQXMgYW5kIFNvYydzLlxcbiAgMzU6XFx0XFxuICAzNjpcXHRjb25maWcgWElMSU5YX0xMX1RFTUFDXFxuICAzNzpcXHRcXHR0cmlzdGF0ZSBcXFwiWGlsaW54IExMIFRFTUFDIChMb2NhbExpbmsgVHJpLW1vZGUgRXRoZXJuZXQgTUFDKSBkcml2ZXJcXFwiXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTVxcbiAgMzk6XFx0XFx0c2VsZWN0IFBIWUxJQlxcbiAgNDA6XFx0XFx0aGVscFxcbiAgNDE6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgWGlsaW54IDEwLzEwMC8xMDAwIExvY2FsTGluayBURU1BQ1xcbiAgNDI6XFx0XFx0ICBjb3JlIHVzZWQgaW4gWGlsaW54IFNwYXJ0YW4gYW5kIFZpcnRleCBGUEdBc1xcbiAgNDM6XFx0XFxuICA0NDpcXHRlbmRpZiAjIE5FVF9WRU5ET1JfWElMSU5YXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjA3OjI4LjAxOTk4OTY0NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1MjU1NTM4NTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBYaWxpbnggQVhJL1hYViBFdGhlcm5ldCBEcml2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgWGlsaW54IEFYSS9YWFYgRXRoZXJuZXQgZHJpdmVyLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzOiAqWElMSU5YX0FYSV9FTUFDKiDigJMgdGhhdCdzIGEgcGxhdGZvcm0gZHJpdmVyLCBtYXRjaGluZyBzcGVjaWZpYyBkZXZpY2UgdHJlZSBjb21wYXRpYmxlcy4gV2UndmUgZ290IFwieGxueCxheGktZXRoZXJuZXQtMS4wMC5hXCIsIFwieGxueCxheGktZXRoZXJuZXQtMS4wMS5hXCIsIGV0Yy4sIGFuZCBub3cgXCJ4bG54LHh4di1ldGhlcm5ldC0xLjBcIi4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uOiBkb2VzIFFFTVUgZXZlbiAqc3VwcG9ydCogdGhpcz8gSSByZWNhbGwgc29tZSBzdXBwb3J0IGZvciBYaWxpbnggTWljcm9CbGF6ZS9aeW5xLCBidXQgd2hhdCdzIHRoZSBleHRlbnQgb2YgdGhlIGVtdWxhdGlvbj8gKmh3L25ldC94aWxpbnhfYXhpZW5ldC5jKiBleGlzdHMsIGJ1dCBkb2VzIGl0IGNvdmVyIHRoZSBYWFYgdmFyaWFudD8gTm8sIFhYViBpcyBhIDEwRy8yNUcgSVAgc3Vic3lzdGVtLCBhIGRpZmZlcmVudCBiZWFzdC5cblxuVGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgcmVmYWN0b3JpbmcgKnhpbGlueF9heGllbmV0X21haW4uYyosIHBvdGVudGlhbGx5IHRvIGNyZWF0ZSBhIGNvbW1vbiBsb2dpYyBsYXllciB1c2luZyAqbHAtXHUwMDNlYXhpZW5ldF9jb25maWcqIG9wcy4gSXQncyB0b3VjaGluZyBleGlzdGluZyAxRyBwYXRocyBsaWtlIE1BQyBhZGRyZXNzIHNldHRpbmcsIG11bHRpY2FzdCBsaXN0cywgc3RhdHMgdXBkYXRlcywgYW5kIGEgbG90IG9mIGluaXRpYWxpemF0aW9uL3Jlc2V0L0RNQSBlbmdpbmUgZnVuY3Rpb25zLiBBIG5ldyBmaWxlLCAqeGlsaW54X2F4aWVuZXRfeHh2LmMqLCBpcyBhZGRlZCBmb3IgdGhlIDEwRy8yNUcgc3Vic3lzdGVtLlxuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcyBmdXp6aW5nIHJlYWNoYWJpbGl0eS4gQ2FuIHRoaXMgKnhpbGlueF9heGllbmV0KiBkcml2ZXIgYmUgaW5zdGFudGlhdGVkIGluIGZ1enppbmcgZW52aXJvbm1lbnRzLCBlc3BlY2lhbGx5IFN5emthbGxlciBhbmQgUUVNVT8gU3l6a2FsbGVyIHJ1bnMgb24gc3RhbmRhcmQgUUVNVSBvciBHQ0UgVk1zLiBDYW4gcGxhdGZvcm0gZHJpdmVycyBsaWtlIHRoaXMgb25lIGJlIHJlYWNoZWQgd2l0aG91dCB2aXJ0dWFsIGRldmljZXM/IFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiAqUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSogaWYgdGhlIHBhdGNoIGlzOlxuXG4tICAgRG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgb3IgY29tbWVudHMuXG4tICAgRGVjb3JhdGl2ZSBjaGFuZ2VzLlxuLSAgIENvbnN0YW50IGNoYW5nZXMuXG4tICAgQ29kZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuXG4tICAgVmVuZG9yLXNwZWNpZmljIFBDSWUvU21hcnROSUMvR1BVIGRyaXZlcnMgcmVxdWlyaW5nIHBoeXNpY2FsIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBRRU1VLlxuLSAgIGAucmVtb3ZlYCwgYC5zaHV0ZG93bmAsIG9yIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgIGNhbGxiYWNrcy5cblxuSWYgdGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgKldvcnRoRnV6emluZz10cnVlKi4gU28sIGNhbiAqeGlsaW54X2F4aWVuZXQqIGJlIGxvYWRlZC9wcm9iZWQvZnV6emVkIGluIHN0YW5kYXJkIFFFTVUgKHg4Nl82NCBvciBhcm02NCk/IFRoaXMgaXMgYW4gT0YgcGxhdGZvcm0gZHJpdmVyOyBpdCByZWdpc3RlcnMgd2l0aCBgcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyYCBhbmQgcHJvYmVzIHZpYSBkZXZpY2UgdHJlZSBtYXRjaGVzLiBDYW4gU3l6a2FsbGVyIHByb2JlIHBsYXRmb3JtIGRyaXZlcnMgdmlhIE9GIG92ZXJsYXlzPyBEb2VzIHN0YW5kYXJkIFFFTVUgaGF2ZSBgeGxueCxheGktZXRoZXJuZXRgIGluIGl0cyBkZXZpY2UgdHJlZT8gKk5vKiwgdGhlIHN0YW5kYXJkIFFFTVUgYHZpcnRgIG1hY2hpbmUgZG9lc24ndC4gWW91IG5lZWQgdGhlIGB4bG54LXpjdTEwMmAgb3IgYG1pY3JvYmxhemVgIFFFTVUgYm9hcmRzIGZvciB0aGF0LlxuXG5UaGlzIGRyaXZlciBpcyBmb3IgXCJYaWxpbnggMTAvMTAwLzEwMDAgQVhJIEV0aGVybmV0XCIgYW5kIFwiWGlsaW54IFhYViAxMEcvMjVHIEV0aGVybmV0IFN1YnN5c3RlbS5cIiBUaGVzZSBhcmUgRlBHQSBJUCBjb3JlcyAvIFNvQyBwZXJpcGhlcmFsIGJsb2NrcyBvbiBYaWxpbnggRlBHQXMgYW5kIFNvQ3MgKFZpcnRleCwgWnlucSwgWnlucU1QLCBWZXJzYWwpLiBUaGUgKnhsbngseHh2LWV0aGVybmV0LTEuMCogdmFyaWFudCBzcGVjaWZpY2FsbHkgcmVxdWlyZXMgYSBYaWxpbnggRE1BIGNvbnRyb2xsZXIuIEluICpzdGFuZGFyZCogUUVNVS9HQ0UsIHRoZXJlJ3Mgbm8gc3VjaCBoYXJkd2FyZS4gRXZlbiB3aXRoIGFuIE9GIG92ZXJsYXkgb3IgcGxhdGZvcm0gZGV2aWNlIGNyZWF0aW9uLCBpdCdzIHByb2JsZW1hdGljOiBgZGV2bV9wbGF0Zm9ybV9nZXRfYW5kX2lvcmVtYXBfcmVzb3VyY2VgLCBjbG9jayBpbml0aWFsaXphdGlvbiB2aWEgYGRldm1fY2xrX2dldF9lbmFibGVkYCwgRE1BIGVuZ2luZSBzZXR1cCAocmVxdWlyZXMgWGlsaW54IERNQSksIHJlZ2lzdGVyIHJlYWRzIOKAkyBhbGwgdGhlc2UgcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSBvciBhIG1vcmUgYWR2YW5jZWQgbGV2ZWwgb2YgaGFyZHdhcmUgZW11bGF0aW9uLlxuXG5Pa2F5LCBpcyB0aGVyZSBhbnkgY29yZSBrZXJuZWwgY29kZSBtb2RpZmllZD8gTGV0J3MgY2hlY2sgdGhlIGdpdCBkaWZmIGFnYWluOiBpdCdzIGFsbCBjb250YWluZWQgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvYCDigJMgZG9jcywgTWFrZWZpbGVzLCBoZWFkZXJzLCBhbmQgdGhlIGRyaXZlciBzb3VyY2UgZmlsZXMuIE5vIGNvcmUgbmV0d29ya2luZyBzdGFjayBmaWxlcyBvciBjb21tb24ga2VybmVsIGNvZGUgaXMgdG91Y2hlZC5cblxuVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBpdCBpcyBub3QgZnV6emVyLXdvcnRoeS4gKnhpbGlueF9heGllbmV0KiByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBvciBhIG5vbi1zdGFuZGFyZCBRRU1VIGJvYXJkIGFuZCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBjaGFuZ2VzIGFyZSBlbnRpcmVseSB3aXRoaW4gdGhlIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIuXG5cblRoZXJlZm9yZSwgKldvcnRoRnV6emluZyogc2hvdWxkIGJlICpmYWxzZSouXG5cblRoZSBmaW5hbCBwYXJhbWV0ZXJzIHdpbGwgYmU6XG4tICAgYFdvcnRoRnV6emluZ2A6ICpmYWxzZSpcbi0gICBgUmVhc29uaW5nYDogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgWGlsXG5cbiIsIklucHV0VG9rZW5zIjozMzI2NSwiT3V0cHV0VG9rZW5zIjoxMTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MDc6NDMuMjc1NTMyMjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHZlbmRvci1zcGVjaWZpYyBYaWxpbnggQVhJIC8gWFhWIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54LyksIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgWGlsaW54IFhYViAxMEcvMjVHIEV0aGVybmV0IFN1YnN5c3RlbSBGUEdBIElQIGNvcmUuIFRoaXMgaGFyZHdhcmUgcmVxdWlyZXMgcGh5c2ljYWwgWGlsaW54L0FNRCBGUEdBL1NvQyBoYXJkd2FyZSBhbmQgY2Fubm90IGJlIHJlYWNoZWQgb3IgZXhlY3V0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB2ZW5kb3Itc3BlY2lmaWMgWGlsaW54IEFYSSAvIFhYViBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC8pLCBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFhpbGlueCBYWFYgMTBHLzI1RyBFdGhlcm5ldCBTdWJzeXN0ZW0gRlBHQSBJUCBjb3JlLiBUaGlzIGhhcmR3YXJlIHJlcXVpcmVzIHBoeXNpY2FsIFhpbGlueC9BTUQgRlBHQS9Tb0MgaGFyZHdhcmUgYW5kIGNhbm5vdCBiZSByZWFjaGVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MDc6NDMuMjc1NTcxNDdaIiwiU2VxIjo5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjnzwl[1] Phase: Running StartedAt: 2026-08-31 22:07:54 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjnzwl[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-31 22:07:54 +0000 UTC FinishedAt: 2026-08-31 22:08:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}