Name: series-workflowrxgjm Phase: Failed StartedAt: 2026-09-05 18:02:48 +0000 UTC FinishedAt: 2026-09-05 18:22:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxgjm[0] Phase: Succeeded StartedAt: 2026-09-05 18:02:48 +0000 UTC FinishedAt: 2026-09-05 18:22:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxgjm[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 18:02:48 +0000 UTC FinishedAt: 2026-09-05 18:22:36 +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+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHMzOTAgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciBpbiBkcml2ZXJzL3MzOTAvY3J5cHRvLywgd2hpY2ggaXMgZXhjbHVzaXZlIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSAoQ09ORklHX1ZGSU9fQVApIGFuZCBpcyBuZWl0aGVyIGNvbXBpbGVkIG5vciByZWFjaGFibGUgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmM2M4NjljN2ZjZDNlMjkyZmIyZjZkMjI2NDI0YWE0YTIxNzRkZWNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxODoyMjowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbmluZGV4IDk0MGMwZmY2NjhiZWUuLmUwNTRmZDRhOTQ5NzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuQEAgLTMxLDYgJiM0MzszMSw3IEBAXG4gI2RlZmluZSBBUF9RVUVVRV9JTl9VU0UgXCYjMzQ7aW4gdXNlXCYjMzQ7XG4gXG4gI2RlZmluZSBBUF9SRVNFVF9JTlRFUlZBTFx0XHQyMFx0LyogUmVzZXQgc2xlZXAgaW50ZXJ2YWwgKDIwbXMpXHRcdCovXG4mIzQzOyNkZWZpbmUgQVBfUkVTRVRfTUFYX1dBSVRcdFx0MjAwMFx0LyogTWF4aW11bSB3YWl0IGZvciByZXNldCAoMjAwMG1zKVx0Ki9cbiBcbiBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZXMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldik7XG4gc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcmVzZXRfcWxpc3Qoc3RydWN0IGxpc3RfaGVhZCAqcWxpc3QpO1xuQEAgLTIyNiwxNiAmIzQzOzIyNywyNyBAQCBzdGF0aWMgc3RydWN0IHZmaW9fYXBfcXVldWUgKnZmaW9fYXBfbWRldl9nZXRfcXVldWUoXG4gfVxuIFxuIC8qKlxuLSAqIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIgLSBjbGVhcnMgdGhlIElSIGJpdCBvciBnaXZlcyB1cCBhZnRlciA1IHRyaWVzXG4tICogQGFwcW46IFRoZSBBUCBRdWV1ZSBudW1iZXJcbi0gKlxuLSAqIENoZWNrcyB0aGUgSVJRIGJpdCBmb3IgdGhlIHN0YXR1cyBvZiB0aGlzIEFQUU4gdXNpbmcgYXBfdGFwcS5cbi0gKiBSZXR1cm5zIGlmIHRoZSBhcF90YXBxIGZ1bmN0aW9uIHN1Y2NlZWRlZCBhbmQgdGhlIGJpdCBpcyBjbGVhci5cbi0gKiBSZXR1cm5zIGlmIGFwX3RhcHEgZnVuY3Rpb24gZmFpbGVkIHdpdGggaW52YWxpZCwgZGVjb25maWd1cmVkIG9yXG4tICogY2hlY2tzdG9wcGVkIEFQLlxuLSAqIE90aGVyd2lzZSByZXRyaWVzIHVwIHRvIDUgdGltZXMgYWZ0ZXIgd2FpdGluZyAyMG1zLlxuJiM0MzsgKiB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyIC0gd2FpdCBmb3IgdGhlIElSIGJpdCB0byBjbGVhciBhZnRlciBhIGRpc2FibGVcbiYjNDM7ICpcbiYjNDM7ICogQGFwcW46IHRoZSBBUFFOIG9mIHRoZSBxdWV1ZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXBlYXRlZGx5IHBvbGxzIHRoZSBBUCBxdWV1ZSBzdGF0dXMgdmlhIFBRQVAoVEFQUSkgZXZlcnkgMjBtcyB1bnRpbCB0aGUgSVJcbiYjNDM7ICogYml0IGlzIGNsZWFyLCB0aGUgcXVldWUgYmVjb21lcyBub24tb3BlcmF0aW9uYWwsIG9yIDUgcmV0cmllcyBhcmUgZXhoYXVzdGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBCZWNhdXNlIFBRQVAoQVFJQykgZGlzYWJsZSBpbml0aWF0ZXMgYW4gYXN5bmNocm9ub3VzIHByb2Nlc3MsIGFcbiYjNDM7ICogY29uZGl0aW9uLWNvZGUgMCBjb21wbGV0aW9uIGRvZXMgbm90IGd1YXJhbnRlZSB0aGUgSVIgYml0IGhhcyBiZWVuIGNsZWFyZWQuXG4mIzQzOyAqIFRoZSBob3N0IG11c3QgY29uZmlybSBJUj0wIGJlZm9yZSB1bnBpbm5pbmcgdGhlIE5JQiBwYWdlIHRvIGF2b2lkIGEgd2lsZFxuJiM0MzsgKiBETUEgd3JpdGUgdG8gYSBmcmVlZCBwYWdlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqIC0gMFx0XHRpZiB0aGUgSVIgYml0IGlzIGNsZWFyIChpLmUuLCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCkuXG4mIzQzOyAqXG4mIzQzOyAqIC0gLUVOT0RFVlx0aWYgdGhlIFBRQVAtVEFQUSByZXNwb25zZSBjb2RlIGluZGljYXRlcyB0aGUgcXVldWUgaXMgbm90IGF2YWlsYWJsZSxcbiYjNDM7ICpcdFx0aXMgZGVjb25maWd1cmVkLCBvciBpcyBjaGVja3N0b3BwZWQgKGkuZS4sIG5vdCBvcGVyYXRpb25hbCkuXG4mIzQzOyAqXG4mIzQzOyAqIC0gLUVUSU1FRE9VVFx0dGhlIGZ1bmN0aW9uIHRpbWVkIG91dCBiZWZvcmUgdGhlIElSIGJpdCB3YXMgY2xlYXJlZC5cbiAgKi9cbi1zdGF0aWMgdm9pZCB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKGludCBhcHFuKVxuJiM0MztzdGF0aWMgaW50IHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoaW50IGFwcW4pXG4ge1xuIFx0c3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXM7XG4gXHRpbnQgcmV0cnkgPSA1O1xuQEAgLTI0Niw3ICYjNDM7MjU4LDcgQEAgc3RhdGljIHZvaWQgdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcihpbnQgYXBxbilcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1M6XG4gXHRcdFx0aWYgKCFzdGF0dXMuaXJxX2VuYWJsZWQpXG4tXHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdFx0cmV0dXJuIDA7XG4gXHRcdFx0ZmFsbHRocm91Z2g7XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfQlVTWTpcbiBcdFx0XHRtc2xlZXAoMjApO1xuQEAgLTI1NywxMiAmIzQzOzI2OSwxNSBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKGludCBhcHFuKVxuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdFdBUk5fT05DRSgxLCBcJiMzNDslczogdGFwcSByYyAlMDJ4OiAlMDR4XFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbiBcdFx0XHRcdCAgc3RhdHVzLnJlc3BvbnNlX2NvZGUsIGFwcW4pO1xuLVx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHRcdH1cbiBcdH0gd2hpbGUgKC0tcmV0cnkpO1xuIFxuLVx0V0FSTl9PTkNFKDEsIFwmIzM0OyVzOiB0YXBxIHJjICUwMng6ICUwNHggY291bGQgbm90IGNsZWFyIElSIGJpdFxcblwmIzM0Oyxcbi1cdFx0ICBfX2Z1bmNfXywgc3RhdHVzLnJlc3BvbnNlX2NvZGUsIGFwcW4pO1xuJiM0MztcdFdBUk5fT05DRSgxLCBcJiMzNDslczogdGFwcSByYyAlMDJ4OiB0aW1lZCBvdXQgd2FpdGluZyBmb3IgaW50ZXJydXB0cyBkaXNhYmxlZCBmb3IgJTAyeC4lMDR4XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICBfX2Z1bmNfXywgc3RhdHVzLnJlc3BvbnNlX2NvZGUsXG4mIzQzO1x0XHQgIEFQX1FJRF9DQVJEKGFwcW4pLCBBUF9RSURfUVVFVUUoYXBxbikpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiB9XG4gXG4gLyoqXG5AQCAtMjg5LDIwICYjNDM7MzA0LDI4IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcbiB9XG4gXG4gLyoqXG4tICogdmZpb19hcF9pcnFfZGlzYWJsZSAtIGRpc2FibGVzIGFuZCBjbGVhcnMgYW4gYXBfcXVldWUgaW50ZXJydXB0XG4tICogQHE6IFRoZSB2ZmlvX2FwX3F1ZXVlXG4mIzQzOyAqIHZmaW9fYXBfaXJxX2Rpc2FibGUgLSBkaXNhYmxlIGludGVycnVwdHMgZm9yIGFuIEFQIHF1ZXVlXG4mIzQzOyAqIEBxOiB0aGUgdmZpb19hcF9xdWV1ZVxuICAqXG4tICogVXNlcyBhcF9hcWljIHRvIGRpc2FibGUgdGhlIGludGVycnVwdGlvbiBhbmQgaW4gY2FzZSBvZiBzdWNjZXNzLCByZXNldFxuLSAqIGluIHByb2dyZXNzIG9yIElSUSBkaXNhYmxlIGNvbW1hbmQgYWxyZWFkeSBwcm9jZWVkZWQ6IGNhbGxzXG4tICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcigpIHRvIGNoZWNrIGZvciB0aGUgSVJRIGJpdCB0byBiZSBjbGVhclxuLSAqIGFuZCBjYWxscyB2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMoKSB0byBmcmVlIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZFxuLSAqIHdpdGggdGhlIEFQIGludGVycnVwdCBoYW5kbGluZy5cbiYjNDM7ICogSXNzdWVzIFBRQVAoQVFJQykgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciB0aGUgQVAgcXVldWUuIE9uIHN1Y2Nlc3NcbiYjNDM7ICogKEFQX1JFU1BPTlNFX05PUk1BTCBvciBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRCksIHBvbGxzIHZpYVxuJiM0MzsgKiB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKCkgdW50aWwgdGhlIElSIGJpdCBpcyBjb25maXJtZWQgY2xlYXIgYmVmb3JlXG4mIzQzOyAqIGZyZWVpbmcgdGhlIHBpbm5lZCBOSUIgcGFnZSBhbmQgdW5yZWdpc3RlcmluZyB0aGUgZ3Vlc3QgSVNDLiBUaGlzIHdhaXQgaXNcbiYjNDM7ICogbmVjZXNzYXJ5IGJlY2F1c2UgQVFJQyBkaXNhYmxlIGlzIGFzeW5jaHJvbm91czogZnJlZWluZyB0aGUgTklCIGJlZm9yZSBJUj0wXG4mIzQzOyAqIGlzIGNvbmZpcm1lZCByaXNrcyBhIHdpbGQgRE1BIHdyaXRlIHRvIGEgZnJlZWQgaG9zdCBwYWdlLlxuICAqXG4tICogSW4gdGhlIGNhc2UgdGhlIEFQIGlzIGJ1c3ksIG9yIGEgcmVzZXQgaXMgaW4gcHJvZ3Jlc3MsXG4tICogcmV0cmllcyBhZnRlciAyMG1zLCB1cCB0byA1IHRpbWVzLlxuJiM0MzsgKiBSZXRyaWVzIHVwIHRvIDUgdGltZXMgKHdpdGggMjBtcyBzbGVlcCkgaWYgdGhlIHF1ZXVlIGlzIGJ1c3kgb3IgYSByZXNldCBpc1xuJiM0MzsgKiBpbiBwcm9ncmVzcy5cbiAgKlxuLSAqIFJldHVybnMgaWYgYXBfYXFpYyBmdW5jdGlvbiBmYWlsZWQgd2l0aCBpbnZhbGlkLCBkZWNvbmZpZ3VyZWQgb3Jcbi0gKiBjaGVja3N0b3BwZWQgQVAuXG4mIzQzOyAqIElmIHRoZSBJUiBiaXQgY2Fubm90IGJlIGNvbmZpcm1lZCBjbGVhciAodGltZW91dCksIHRoZSBOSUIgcGFnZSBhbmQgZ3Vlc3RcbiYjNDM7ICogSVNDIGFyZSBpbnRlbnRpb25hbGx5IGxlYWtlZC4gSWYgdGhlIHBhZ2Ugd2VyZSB1bnBpbm5lZCBhbmQgcmV0dXJuZWQgdG8gdGhlXG4mIzQzOyAqIGFsbG9jYXRvciwgYSBzdWJzZXF1ZW50IGhhcmR3YXJlIERNQSB3cml0ZSB0byB0aGF0IHBoeXNpY2FsIGFkZHJlc3Mgd291bGRcbiYjNDM7ICogY29ycnVwdCBtZW1vcnkgYmVsb25naW5nIHRvIGEgbmV3IG93bmVyIOKAlCBhIHdpbGQgRE1BIHdyaXRlIHRoYXQgY291bGQgY3Jhc2hcbiYjNDM7ICogb3IgY29tcHJvbWlzZSB0aGUgaG9zdCBrZXJuZWwuXG4mIzQzOyAqXG4mIzQzOyAqIElmIHRoZSBxdWV1ZSBpcyBub24tb3BlcmF0aW9uYWwgKGRlY29uZmlndXJlZCwgY2hlY2tzdG9wcGVkLCBub3QgYXZhaWxhYmxlKSxcbiYjNDM7ICogcmVzb3VyY2VzIGFyZSBmcmVlZCBpbW1lZGlhdGVseSBzaW5jZSB0aGUgaGFyZHdhcmUgY2FuIG5vIGxvbmdlciB3cml0ZSB0b1xuJiM0MzsgKiB0aGUgTklCLlxuICAqXG4gICogUmV0dXJuOiBcdTAwMjZzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzXG4gICovXG5AQCAtMzEwLDE1ICYjNDM7MzMzLDM4IEBAIHN0YXRpYyBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHZmaW9fYXBfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4ge1xuIFx0dW5pb24gYXBfcWlycV9jdHJsIGFxaWNfZ2lzYSA9IHsgLnZhbHVlID0gMCB9O1xuIFx0c3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXM7XG4tXHRpbnQgcmV0cmllcyA9IDU7XG4mIzQzO1x0aW50IHJldHJpZXMgPSA1LCByZXQ7XG4gXG4gXHRkbyB7XG4gXHRcdHN0YXR1cyA9IGFwX2FxaWMocS1cdTAwM2VhcHFuLCBhcWljX2dpc2EsIDApO1xuIFx0XHRzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQ6XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxuLVx0XHRcdHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIocS1cdTAwM2VhcHFuKTtcbi1cdFx0XHRnb3RvIGVuZF9mcmVlO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBBUUlDIGRpc2FibGUgd2FzIGFjY2VwdGVkIChOT1JNQUwpLCBvciB0aGUgcXVldWUgd2FzXG4mIzQzO1x0XHRcdCAqIGFscmVhZHkgZGlzYWJsZWQgb3IgYSBwcmlvciBhc3luYyByZXF1ZXN0IGlzIHN0aWxsXG4mIzQzO1x0XHRcdCAqIGNvbXBsZXRpbmcgKE9USEVSV0lTRV9DSEFOR0VEKS4gIEluIGJvdGggY2FzZXMsIHdlIG11c3RcbiYjNDM7XHRcdFx0ICogd2FpdCB1bnRpbCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBoYXMgYmVlbiBkaXNhYmxlZFxuJiM0MztcdFx0XHQgKiBiZWZvcmUgcHJvY2VlZGluZy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHJldCA9IHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIocS1cdTAwM2VhcHFuKTtcbiYjNDM7XHRcdFx0aWYgKHJldCA9PSAwIHx8IHJldCA9PSAtRU5PREVWKVxuJiM0MztcdFx0XHRcdGdvdG8gZW5kX2ZyZWU7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFRpbWVkIG91dCB3YWl0aW5nIHRvIGNvbmZpcm0gaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuXG4mIzQzO1x0XHRcdCAqIElmIGFwX2FxaWMgcmV0dXJuZWQgTk9STUFMLCB0aGUgZ3Vlc3Qgd291bGQgaW5jb3JyZWN0bHlcbiYjNDM7XHRcdFx0ICogaW50ZXJwcmV0IHRoYXQgYXMgYSBzdWNjZXNzZnVsIGRpc2FibGUgYW5kIG1heSBmcmVlIG9yXG4mIzQzO1x0XHRcdCAqIHJldXNlIHRoZSBOSUIgd2hpbGUgaGFyZHdhcmUgY2FuIHN0aWxsIHdyaXRlIHRvIGl0LlxuJiM0MztcdFx0XHQgKiBaZXJvIHRoZSBzdGF0dXMgd29yZCBhbmQgc2V0IE9USEVSV0lTRV9DSEFOR0VEIHRvIG1pbWljXG4mIzQzO1x0XHRcdCAqIHdoYXQgdGhlIGhhcmR3YXJlIGRvZXMgZm9yIHRoYXQgcmVzcG9uc2UgY29kZS4gVGhpc1xuJiM0MztcdFx0XHQgKiBzaWduYWxzIHRvIHRoZSBndWVzdCB0aGF0IHRoZSByZXNldCBvcGVyYXRpb24gZGlkIG5vdFxuJiM0MztcdFx0XHQgKiBjb21wbGV0ZS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmIChzdGF0dXMucmVzcG9uc2VfY29kZSA9PSBBUF9SRVNQT05TRV9OT1JNQUwpIHtcbiYjNDM7XHRcdFx0XHRtZW1zZXQoXHUwMDI2c3RhdHVzLCAwLCBzaXplb2Yoc3RhdHVzKSk7XG4mIzQzO1x0XHRcdFx0c3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRnb3RvIGVuZF9mYWlsO1xuIFx0XHRjYXNlIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTOlxuIFx0XHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XG4gXHRcdFx0bXNsZWVwKDIwKTtcbkBAIC0zMjYsMTggJiM0MzszNzIsNDcgQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9RX05PVF9BVkFJTDpcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOlxuJiM0MztcdFx0XHQvKiBBUCBub3Qgb3BlcmF0aW9uYWw7IG5vIGZ1cnRoZXIgaW50ZXJydXB0cyBwb3NzaWJsZSAqL1xuJiM0MztcdFx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7JXM6IGFwX2FxaWMgc3RhdHVzICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbiYjNDM7XHRcdFx0XHQgIHN0YXR1cy5yZXNwb25zZV9jb2RlKTtcbiYjNDM7XHRcdFx0Z290byBlbmRfZnJlZTtcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1M6XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0LyogQWxsIGNhc2VzIGluIGRlZmF1bHQgbWVhbnMgQVAgbm90IG9wZXJhdGlvbmFsICovXG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFRoZSBBUUlDIGRpc2FibGUgd2FzIHJlamVjdGVkOyBJUlEgaXMgc3RpbGwgZW5hYmxlZFxuJiM0MztcdFx0XHQgKiBhbmQgdGhlIGhhcmR3YXJlIHN0aWxsIGhvbGRzIHRoZSBOSUIgYWRkcmVzcy4gRG8gbm90XG4mIzQzO1x0XHRcdCAqIGZyZWUgcmVzb3VyY2VzLlxuJiM0MztcdFx0XHQgKi9cbiBcdFx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7JXM6IGFwX2FxaWMgc3RhdHVzICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbiBcdFx0XHRcdCAgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xuLVx0XHRcdGdvdG8gZW5kX2ZyZWU7XG4mIzQzO1x0XHRcdGdvdG8gZW5kX2ZhaWw7XG4gXHRcdH1cbiBcdH0gd2hpbGUgKHJldHJpZXMtLSk7XG4gXG4gXHRXQVJOX09OQ0UoMSwgXCYjMzQ7JXM6IGFwX2FxaWMgc3RhdHVzICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbiBcdFx0ICBzdGF0dXMucmVzcG9uc2VfY29kZSk7XG4mIzQzO1xuJiM0MztlbmRfZmFpbDpcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdlIGFyZSBoZXJlIGVpdGhlciBiZWNhdXNlIHRoZSBBUUlDIGluc3RydWN0aW9uIGZhaWxlZCB0byBkaXNhYmxlXG4mIzQzO1x0ICogaW50ZXJydXB0cywgb3IgYmVjYXVzZSBJUj0wIGNvdWxkIG5vdCBiZSBjb25maXJtZWQuIEluIGVpdGhlciBjYXNlXG4mIzQzO1x0ICogdGhlIE5JQiBwYWdlIGFuZCBndWVzdCBJU0MgY2Fubm90IGJlIGZyZWVkOiBoYXJkd2FyZSBtYXkgc3RpbGwgd3JpdGVcbiYjNDM7XHQgKiB0byB0aGUgTklCLCBhbmQgdW5waW5uaW5nIHRoZSBwYWdlIHdvdWxkIGFsbG93IGl0IHRvIGJlIHJlYWxsb2NhdGVkXG4mIzQzO1x0ICogdG8gYSBuZXcgb3duZXIuIEEgc3Vic2VxdWVudCBoYXJkd2FyZSBETUEgd3JpdGUgdG8gdGhhdCBwaHlzaWNhbFxuJiM0MztcdCAqIGFkZHJlc3Mgd291bGQgY29ycnVwdCB0aGUgbmV3IG93bmVyJiMzOTtzIG1lbW9yeSDigJQgYSB3aWxkIERNQSB3cml0ZSB0aGF0XG4mIzQzO1x0ICogY291bGQgY3Jhc2ggb3IgY29tcHJvbWlzZSB0aGUgaG9zdCBrZXJuZWwuIFRoZSByZXNvdXJjZXMgYXJlXG4mIzQzO1x0ICogdGhlcmVmb3JlIGludGVudGlvbmFsbHkgbGVha2VkLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiBzdGF0dXM7XG4mIzQzO1xuIGVuZF9mcmVlOlxuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhpcyBsYWJlbCBpcyByZWFjaGVkIGJlY2F1c2UgdGhlIHF1ZXVlIHdhcyBzdWNjZXNzZnVsbHkgZGlzYWJsZWQsXG4mIzQzO1x0ICogb3IgYmVjYXVzZSB0aGUgcXVldWUgaXMgbm90IG9wZXJhdGlvbmFsIG9yIG5vdCBhdmFpbGFibGUsIGluIHdoaWNoIGNhc2VcbiYjNDM7XHQgKiBpbnRlcnJ1cHRzIGNhbiBub3QgYmUgcHJvY2Vzc2VkLCBzbyBmcmVlIHRoZSBBUUlDIHJlc291cmNlcyAtIHRoZSBwaW5uZWQgTklCXG4mIzQzO1x0ICogcGFnZSBhbmQgdGhlIHJlZ2lzdGVyZWQgZ3Vlc3QgSVNDIC0gdXNlZCB0byBlbmFibGUgaW50ZXJydXB0cyBzbyB0aGV5IHdpbGxcbiYjNDM7XHQgKiBub3QgYmUgbGVha2VkLlxuJiM0MztcdCAqL1xuIFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG5AQCAtNDAxLDIyICYjNDM7NDc2LDI5IEBAIHN0YXRpYyBpbnQgZW5zdXJlX25pYl9zaGFyZWQodW5zaWduZWQgbG9uZyBhZGRyKVxuIH1cbiBcbiAvKipcbi0gKiB2ZmlvX2FwX2lycV9lbmFibGUgLSBFbmFibGUgSW50ZXJydXB0aW9uIGZvciBhIEFQUU5cbiYjNDM7ICogdmZpb19hcF9pcnFfZW5hYmxlIC0gZW5hYmxlIGludGVycnVwdHMgZm9yIGFuIEFQIHF1ZXVlIG9uIGJlaGFsZiBvZiBhIGd1ZXN0XG4gICpcbi0gKiBAcTpcdCB0aGUgdmZpb19hcF9xdWV1ZSBob2xkaW5nIEFRSUMgcGFyYW1ldGVyc1xuJiM0MzsgKiBAcTpcdCB0aGUgdmZpb19hcF9xdWV1ZSBmb3Igd2hpY2ggaW50ZXJydXB0cyBhcmUgdG8gYmUgZW5hYmxlZFxuICAqIEBpc2M6IHRoZSBndWVzdCBJU0MgdG8gcmVnaXN0ZXIgd2l0aCB0aGUgR0lCIGludGVyZmFjZVxuLSAqIEB2Y3B1OiB0aGUgdmNwdSBvYmplY3QgY29udGFpbmluZyB0aGUgcmVnaXN0ZXJzIHNwZWNpZnlpbmcgdGhlIHBhcmFtZXRlcnNcbi0gKlx0ICBwYXNzZWQgdG8gdGhlIFBRQVAoQVFJQykgaW5zdHJ1Y3Rpb24uXG4mIzQzOyAqIEB2Y3B1OiB0aGUgdmNwdSB3aG9zZSByZWdpc3RlcnMgY29udGFpbiB0aGUgUFFBUChBUUlDKSBwYXJhbWV0ZXJzXG4mIzQzOyAqXG4mIzQzOyAqIFBpbnMgdGhlIGd1ZXN0IE5JQiBwYWdlLCByZWdpc3RlcnMgdGhlIGd1ZXN0IElTQyB3aXRoIHRoZSBHSUIgdG8gb2J0YWluIGFcbiYjNDM7ICogaG9zdCBJU0MsIGFuZCByZWlzc3VlcyBQUUFQKEFRSUMpIHdpdGggdGhlIHRyYW5zbGF0ZWQgaG9zdC1hYnNvbHV0ZSBOSUJcbiYjNDM7ICogYWRkcmVzcyBhbmQgaG9zdCBJU0Mgb24gYmVoYWxmIG9mIHRoZSBndWVzdC5cbiAgKlxuLSAqIFBpbiB0aGUgTklCIHNhdmVkIGluICpxXG4tICogUmVnaXN0ZXIgdGhlIGd1ZXN0IElTQyB0byBHSUIgaW50ZXJmYWNlIGFuZCByZXRyaWV2ZSB0aGVcbi0gKiBob3N0IElTQyB0byBpc3N1ZSB0aGUgaG9zdCBzaWRlIFBRQVAvQVFJQ1xuJiM0MzsgKiBUaGUgY29uZGl0aW9uIGNvZGUgYW5kIEFQLXF1ZXVlIHN0YXR1cyB3b3JkIHJldHVybmVkIGJ5IFBRQVAoQVFJQykgYXJlXG4mIzQzOyAqIHJlZmxlY3RlZCBiYWNrIHRvIHRoZSBndWVzdCBhcy1pcy4gSVJRIHN0YXRlIHZlcmlmaWNhdGlvbiAocG9sbGluZyB1bnRpbFxuJiM0MzsgKiBJUj0xKSBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGd1ZXN0IEFQIGJ1cywgbm90IHRoZSBob3N0LlxuICAqXG4tICogc3RhdHVzLnJlc3BvbnNlX2NvZGUgbWF5IGJlIHNldCB0byBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1MgaW4gY2FzZSB0aGVcbi0gKiB2ZmlvX3Bpbl9wYWdlcyBvciBrdm1fczM5MF9naXNjX3JlZ2lzdGVyIGZhaWxlZC5cbiYjNDM7ICogUmVzb3VyY2UgbWFuYWdlbWVudCBpcyBiYXNlZCBzb2xlbHkgb24gd2hldGhlciBoYXJkd2FyZSBhY2NlcHRlZCB0aGUgbmV3IE5JQjpcbiYjNDM7ICogLSBBUF9SRVNQT05TRV9OT1JNQUwgKENDPTApOiBoYXJkd2FyZSBhY2NlcHRlZCB0aGUgbmV3IE5JQjsgdGhlIG9sZCBwaW5uZWRcbiYjNDM7ICogICBOSUIgcGFnZSBhbmQgcmVnaXN0ZXJlZCBndWVzdCBJU0MgYXJlIGZyZWVkIGFuZCB0aGUgbmV3IG9uZXMgc2F2ZWQuXG4mIzQzOyAqIC0gQWxsIG90aGVyIHJlc3BvbnNlczogaGFyZHdhcmUgZGlkIG5vdCBhY2NlcHQgdGhlIG5ldyBOSUI7IHRoZSBuZXdseSBwaW5uZWRcbiYjNDM7ICogICBwYWdlIGFuZCByZWdpc3RlcmVkIElTQyBhcmUgZnJlZWQgYW5kIHRoZSBwcmV2aW91c2x5IHNhdmVkIHJlc291cmNlcyBhcmVcbiYjNDM7ICogICBsZWZ0IGludGFjdC5cbiAgKlxuLSAqIE90aGVyd2lzZSByZXR1cm4gdGhlIGFwX3F1ZXVlX3N0YXR1cyByZXR1cm5lZCBieSB0aGUgYXBfYXFpYygpLFxuLSAqIGFsbCByZXRyeSBoYW5kbGluZyB3aWxsIGJlIGRvbmUgYnkgdGhlIGd1ZXN0LlxuJiM0MzsgKiBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1MgaXMgcmV0dXJuZWQgaWYgdmZpb19waW5fcGFnZXMoKSBvclxuJiM0MzsgKiBrdm1fczM5MF9naXNjX3JlZ2lzdGVyKCkgZmFpbHMgYmVmb3JlIHRoZSBBUUlDIGluc3RydWN0aW9uIGlzIGlzc3VlZC5cbiAgKlxuICAqIFJldHVybjogXHUwMDI2c3RydWN0IGFwX3F1ZXVlX3N0YXR1c1xuICAqL1xuQEAgLTQyOCwxMSAmIzQzOzUxMCwxMCBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4gXHRzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHN0YXR1cyA9IHt9O1xuIFx0c3RydWN0IGt2bV9zMzkwX2dpc2EgKmdpc2E7XG4gXHRzdHJ1Y3QgcGFnZSAqaF9wYWdlO1xuLVx0aW50IG5pc2M7XG4mIzQzO1x0aW50IG5pc2MsIHJldDtcbiBcdHN0cnVjdCBrdm0gKmt2bTtcbiBcdHBoeXNfYWRkcl90IGhfbmliO1xuIFx0ZG1hX2FkZHJfdCBuaWI7XG4tXHRpbnQgcmV0O1xuIFxuIFx0LyogVmVyaWZ5IHRoYXQgdGhlIG5vdGlmaWNhdGlvbiBpbmRpY2F0b3IgYnl0ZSBhZGRyZXNzIGlzIHZhbGlkICovXG4gXHRpZiAodmZpb19hcF92YWxpZGF0ZV9uaWIodmNwdSwgXHUwMDI2bmliKSkge1xuQEAgLTQ4OSwyNCAmIzQzOzU3MCwzMyBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4gXHRzdGF0dXMgPSBhcF9hcWljKHEtXHUwMDNlYXBxbiwgYXFpY19naXNhLCBoX25pYik7XG4gXHRzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7XG4gXHRjYXNlIEFQX1JFU1BPTlNFX05PUk1BTDpcbi1cdFx0LyogU2VlIGlmIHdlIGRpZCBjbGVhciBvbGRlciBJUlEgY29uZmlndXJhdGlvbiAqL1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEhhcmR3YXJlIGFjY2VwdGVkIHRoZSBuZXcgTklCIGFkZHJlc3MgKENDPTApLiBUaGUgb2xkIE5JQiBhbmRcbiYjNDM7XHRcdCAqIGd1ZXN0IElTQyBhcmUgbm8gbG9uZ2VyIHVzZWQgYnkgaGFyZHdhcmUgYW5kIGNhbiBiZSBmcmVlZC5cbiYjNDM7XHRcdCAqIFRoZSBuZXcgcmVzb3VyY2VzIGFyZSBzYXZlZCBmb3IgdHJhY2tpbmcgYW5kIGZ1dHVyZSB0ZWFyZG93bi5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBJUlEgc3RhdGUgdmVyaWZpY2F0aW9uIChwb2xsaW5nIHVudGlsIElSPTEpIGlzIHRoZVxuJiM0MztcdFx0ICogcmVzcG9uc2liaWxpdHkgb2YgdGhlIGd1ZXN0IEFQIGJ1cywgbm90IHRoZSBob3N0LiBUaGVcbiYjNDM7XHRcdCAqIGNvbmRpdGlvbiBjb2RlIGFuZCBzdGF0dXMgd29yZCBhcmUgcmVmbGVjdGVkIGJhY2sgdG8gdGhlXG4mIzQzO1x0XHQgKiBndWVzdCB0byByZXNwb25kIHRvIHRoZSBQUUFQLUFRSUMgaW5zdHJ1Y3Rpb24uXG4mIzQzO1x0XHQgKi9cbiBcdFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuIFx0XHRxLVx1MDAzZXNhdmVkX2lvdmEgPSBuaWI7XG4gXHRcdHEtXHUwMDNlc2F2ZWRfaXNjID0gaXNjO1xuIFx0XHRicmVhaztcbi1cdGNhc2UgQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQ6XG4tXHRcdC8qIFdlIGNvdWxkIG5vdCBtb2RpZnkgSVJRIHNldHRpbmdzOiBjbGVhciBuZXcgY29uZmlndXJhdGlvbiAqL1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSGFyZHdhcmUgZGlkIG5vdCBhY2NlcHQgdGhlIG5ldyBOSUIgKENDPTMgb3IgZXJyb3IpLiBUaGVcbiYjNDM7XHRcdCAqIHByZXZpb3VzbHkgc2F2ZWQgTklCIGFuZCBndWVzdCBJU0MgcmVtYWluIGFjdGl2ZSBhbmQgbXVzdFxuJiM0MztcdFx0ICogbm90IGJlIGZyZWVkLiBSZWxlYXNlIHRoZSBuZXdseSBwaW5uZWQgcGFnZSBhbmQgcmVnaXN0ZXJlZFxuJiM0MztcdFx0ICogSVNDIHRoYXQgd2VyZSBwcmVwYXJlZCBmb3IgdGhpcyAocmVqZWN0ZWQpIHJlcXVlc3QuXG4mIzQzO1x0XHQgKi9cbiBcdFx0cmV0ID0ga3ZtX3MzOTBfZ2lzY191bnJlZ2lzdGVyKGt2bSwgaXNjKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRWRklPX0FQX0RCRl9XQVJOKFwmIzM0OyVzOiBrdm1fczM5MF9naXNjX3VucmVnaXN0ZXI6IHJjPSVkIGlzYz0lZCwgYXBxbj0lIzA0eFxcblwmIzM0OyxcbiBcdFx0XHRcdFx0IF9fZnVuY19fLCByZXQsIGlzYywgcS1cdTAwM2VhcHFuKTtcbiBcdFx0dmZpb191bnBpbl9wYWdlcyhcdTAwMjZxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZXZkZXYsIG5pYiwgMSk7XG4gXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0cHJfd2FybihcJiMzNDslczogYXBxbiAlMDR4OiByZXNwb25zZTogJTAyeFxcblwmIzM0OywgX19mdW5jX18sIHEtXHUwMDNlYXBxbixcbi1cdFx0XHRzdGF0dXMucmVzcG9uc2VfY29kZSk7XG4tXHRcdHZmaW9fYXBfaXJxX2Rpc2FibGUocSk7XG4tXHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0aWYgKHN0YXR1cy5yZXNwb25zZV9jb2RlICE9IEFQX1JFU1BPTlNFX05PUk1BTCkge1xuQEAgLTYzNSw3ICYjNDM7NzI1LDYgQEAgc3RhdGljIGludCBoYW5kbGVfcHFhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR9XG4gXG4gXHRzdGF0dXMgPSB2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VzLnJlZ3MuZ3Byc1sxXTtcbi1cbiBcdC8qIElmIElSIGJpdCgxNikgaXMgc2V0IHdlIGVuYWJsZSB0aGUgaW50ZXJydXB0ICovXG4gXHRpZiAoKHN0YXR1cyBcdTAwM2VcdTAwM2UgKDYzIC0gMTYpKSBcdTAwMjYgMHgwMSlcbiBcdFx0cXN0YXR1cyA9IHZmaW9fYXBfaXJxX2VuYWJsZShxLCBzdGF0dXMgXHUwMDI2IDB4MDcsIHZjcHUpO1xuQEAgLTY5MiwxNCAmIzQzOzc4MSwxNCBAQCBzdGF0aWMgYm9vbCBfcXVldWVfcGFzc2FibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4gXHRpZiAoIXEpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHN3aXRjaCAocS1cdTAwM2VyZXNldF9zdGF0dXMucmVzcG9uc2VfY29kZSkge1xuLVx0Y2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6XG4tXHRjYXNlIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRDpcbi1cdGNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOlxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdGRlZmF1bHQ6XG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgcXVldWUgaXMgb25seSBwYXNzYWJsZSBpZiB6ZXJvaXphdGlvbiB3YXMgY29uZmlybWVkIGJ5XG4mIzQzO1x0ICogYXBxX3Jlc2V0X2NoZWNrKCkgdmlhIFRBUFEgc3RhdHVzIGJpdCB2ZXJpZmljYXRpb24uIFRoaXMgaXNcbiYjNDM7XHQgKiBpbmRpY2F0ZWQgYnkgcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMICgwKS5cbiYjNDM7XHQgKiBUaGlzIGlzIHRvIHByb3RlY3QgYWdhaW5zdCBsZWFraW5nIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgcXVldWVcbiYjNDM7XHQgKiB0byB0aGUgZ3Vlc3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIHEtXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMO1xuIH1cbiBcbiAvKlxuQEAgLTE0MTAsNyAmIzQzOzE0OTksNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19kb21haW4oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbiB7XG4gXHRERUNMQVJFX0JJVE1BUChhcHFpcywgQVBfRE9NQUlOUyk7XG4gXG4tXHRiaXRtYXBfemVybyhhcHFpcywgQVBfREVWSUNFUyk7XG4mIzQzO1x0Yml0bWFwX3plcm8oYXBxaXMsIEFQX0RPTUFJTlMpO1xuIFx0c2V0X2JpdF9pbnYoYXBxaSwgYXBxaXMpO1xuIFx0dmZpb19hcF9tZGV2X2hvdF91bnBsdWdfZG9tYWlucyhtYXRyaXhfbWRldiwgYXBxaXMpO1xuIH1cbkBAIC0xOTE5LDEyICYjNDM7MjAwOCw0NyBAQCBzdGF0aWMgaW50IGFwcV9zdGF0dXNfY2hlY2soaW50IGFwcW4sIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgKnN0YXR1cylcbiB7XG4gXHRzd2l0Y2ggKHN0YXR1cy1cdTAwM2VyZXNwb25zZV9jb2RlKSB7XG4gXHRjYXNlIEFQX1JFU1BPTlNFX05PUk1BTDpcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGlzIHJlc3BvbnNlIGNvZGUgb25seSBpbmRpY2F0ZXMgdGhhdCB0aGUgUFFBUChaQVBRKSBoYXNcbiYjNDM7XHRcdCAqIGJlZW4gaW5pdGlhdGVkLiBUaGUgZm9sbG93aW5nIGJpdCBzZXR0aW5ncyBpbiB0aGUgc3RhdHVzXG4mIzQzO1x0XHQgKiByZXR1cm5lZCBmcm9tIFRBUFEgbXVzdCBiZSB2ZXJpZmllZCB0byBjb25maXJtIHRoYXQgdGhlXG4mIzQzO1x0XHQgKiBhc3luY2hyb25vdXMgcG9ydGlvbiBvZiB0aGUgcXVldWUgemVyb2l6YXRpb24gaGFzIGNvbXBsZXRlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHN0YXR1cy1cdTAwM2VxdWV1ZV9lbXB0eSBcdTAwMjZcdTAwMjYgIXN0YXR1cy1cdTAwM2VyZXBsaWVzX3dhaXRpbmcgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIXN0YXR1cy1cdTAwM2VpcnFfZW5hYmxlZCBcdTAwMjZcdTAwMjYgIXN0YXR1cy1cdTAwM2Vhc3luYylcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdFx0LyogQXN5bmMgemVyb2l6YXRpb24gc3RpbGwgaW4gcHJvZ3Jlc3M7IGtlZXAgd2FpdGluZyAqL1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4gXHRjYXNlIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRDpcbiBcdGNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOlxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGUgcXVldWUgaXMgbm9uLW9wZXJhdGlvbmFsOiBpbnRlcnJ1cHRzIGFyZSBub3QgcG9zc2libGUgc29cbiYjNDM7XHRcdCAqIEFRSUMgcmVzb3VyY2VzIGNhbiBiZSBzYWZlbHkgZnJlZWQuIEhvd2V2ZXIsIHplcm9pemF0aW9uXG4mIzQzO1x0XHQgKiBjYW5ub3QgYmUgY29uZmlybWVkIGJlY2F1c2UgYWxsIHN0YXR1cyBiaXRzIGFyZSB6ZXJvZWQgd2hlblxuJiM0MztcdFx0ICogdGhlc2UgcmVzcG9uc2UgY29kZXMgYXJlIHJldHVybmVkIOKAlCB0aGVyZSBpcyBubyB3YXkgdG9cbiYjNDM7XHRcdCAqIGRpc3Rpbmd1aXNoIGEgemVyb2l6ZWQgcXVldWUgZnJvbSBvbmUgdGhhdCBoYXMgbm90IGJlZW5cbiYjNDM7XHRcdCAqIHplcm9pemVkLiBSZXR1cm4gLUVOT0RFViB0byBzaWduYWwgdGhhdCBBUUlDIHJlc291cmNlcyBzaG91bGRcbiYjNDM7XHRcdCAqIGJlIGZyZWVkIGJ1dCB0aGF0IHplcm9pemF0aW9uIGhhcyBub3QgYmVlbiBjb25maXJtZWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiBcdGNhc2UgQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1M6XG4tXHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQSByZXNldCBpcyBpbiBwcm9ncmVzcy4gSXQgbWF5IGJlIHRoZSByZXNldCB3ZSBpc3N1ZWQgb3Igb25lXG4mIzQzO1x0XHQgKiBpc3N1ZWQgcHJpb3IgdG8gb3VyczsgZWl0aGVyIHdheSwgb25jZSBpdCBjb21wbGV0ZXMgdGhlIHF1ZXVlXG4mIzQzO1x0XHQgKiB3aWxsIGJlIHplcm9pemVkLCBzbyBrZWVwIHdhaXRpbmcuXG4mIzQzO1x0XHQgKi9cbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0Y2FzZSBBUF9SRVNQT05TRV9CVVNZOlxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBxdWV1ZSBpcyBidXN5IHdpdGggc29tZXRoaW5nIHVucmVsYXRlZCB0byBhIHJlc2V0IGFuZCBvdXJcbiYjNDM7XHRcdCAqIFpBUFEgd2FzIHJlamVjdGVkIG91dHJpZ2h0LiBSZS1pc3N1ZSB0aGUgWkFQUS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1xuIFx0Y2FzZSBBUF9SRVNQT05TRV9BU1NPQ19TRUNSRVRfTk9UX1VOSVFVRTpcbiBcdGNhc2UgQVBfUkVTUE9OU0VfQVNTT0NfRkFJTEVEOlxuIFx0XHQvKlxuQEAgLTE5MzUsNiAmIzQzOzIwNTksNyBAQCBzdGF0aWMgaW50IGFwcV9zdGF0dXNfY2hlY2soaW50IGFwcW4sIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgKnN0YXR1cylcbiBcdFx0ICogYSB2YWx1ZSBpbmRpY2F0aW5nIGEgcmVzZXQgbmVlZHMgdG8gYmUgcGVyZm9ybWVkIGFnYWluLlxuIFx0XHQgKi9cbiBcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1xuIFx0ZGVmYXVsdDpcbiBcdFx0V0FSTih0cnVlLFxuIFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byB2ZXJpZnkgcmVzZXQgb2YgcXVldWUgJTAyeC4lMDR4OiBUQVBRIHJjPSV1XFxuXCYjMzQ7LFxuQEAgLTE5NDQsNiAmIzQzOzIwNjksMzMgQEAgc3RhdGljIGludCBhcHFfc3RhdHVzX2NoZWNrKGludCBhcHFuLCBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzICpzdGF0dXMpXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCByZXBvcnRfYXFpY19yZXNvdXJjZV9sZWFrKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHEtXHUwMDNlc2F2ZWRfaXNjICE9IFZGSU9fQVBfSVNDX0lOVkFMSUQgfHwgcS1cdTAwM2VzYXZlZF9pb3ZhKSB7XG4mIzQzO1x0XHRpZiAocS1cdTAwM2VtYXRyaXhfbWRldikge1xuJiM0MztcdFx0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtSZXNldCB0aW1lZCBvdXQgZm9yIEFQUU4gJTAyeC4lMDR4OiBsZWFraW5nIEFRSUMgcmVzb3VyY2VzIChOSUIgcGFnZSBcdTAwMjYgR0lTQykgdG8gcHJldmVudCBob3N0IGNyYXNoXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuJiM0MztcdFx0XHRcdFx0ICAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O1Jlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHg6IGxlYWtpbmcgQVFJQyByZXNvdXJjZXMgKE5JQiBwYWdlIFx1MDAyNiBHSVNDKSB0byBwcmV2ZW50IGhvc3QgY3Jhc2hcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbiYjNDM7XHRcdFx0XHRcdCAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmIChxLVx1MDAzZW1hdHJpeF9tZGV2KSB7XG4mIzQzO1x0XHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXHUwMDNlbWF0cml4X21kZXYtXHUwMDNlbWRldiksXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O1Jlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4mIzQzO1x0XHRcdFx0XHQgICAgIEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7UmVzZXQgdGltZWQgb3V0IGZvciBBUFFOICUwMnguJTA0eFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuJiM0MztcdFx0XHRcdFx0ICAgIEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gI2RlZmluZSBXQUlUX01TRyBcJiMzNDtXYWl0ZWQgJWRtcyBmb3IgcmVzZXQgb2YgcXVldWUgJTAyeC4lMDR4ICgldSwgJXUsICV1KVwmIzM0O1xuIFxuIHN0YXRpYyB2b2lkIGFwcV9yZXNldF9jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnJlc2V0X3dvcmspXG5AQCAtMTk2MSw2ICYjNDM7MjExMyw1NiBAQCBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKVxuIFx0XHRyZXQgPSBhcHFfc3RhdHVzX2NoZWNrKHEtXHUwMDNlYXBxbiwgXHUwMDI2c3RhdHVzKTtcbiBcdFx0aWYgKHJldCA9PSAtRUlPKVxuIFx0XHRcdHJldHVybjtcbiYjNDM7XHRcdGlmIChxLVx1MDAzZXJlc2V0X21heF93YWl0IFx1MDAyNlx1MDAyNiBlbGFwc2VkIFx1MDAzZT0gcS1cdTAwM2VyZXNldF9tYXhfd2FpdCkge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBaZXJvaXphdGlvbiBjb25maXJtZWQgKHJldCA9PSAwKTogdGhlIFRBUFEgc3RhdHVzIGJpdHNcbiYjNDM7XHRcdFx0ICogaW5kaWNhdGUgdGhlIGFzeW5jIHBvcnRpb24gb2YgdGhlIFpBUFEgY29tcGxldGVkXG4mIzQzO1x0XHRcdCAqIHN1Y2Nlc3NmdWxseS4gRnJlZSBBUUlDIHJlc291cmNlcyBhbmQgcmV0dXJuLlxuJiM0MztcdFx0XHQgKlxuJiM0MztcdFx0XHQgKiBRdWV1ZSBub24tb3BlcmF0aW9uYWwgKHJldCA9PSAtRU5PREVWKTogdGhlIHF1ZXVlIGlzXG4mIzQzO1x0XHRcdCAqIGRlY29uZmlndXJlZCBvciBjaGVja3N0b3BwZWQ7IGludGVycnVwdHMgYXJlIG5vdFxuJiM0MztcdFx0XHQgKiBwb3NzaWJsZSBzbyBBUUlDIHJlc291cmNlcyBjYW4gYmUgc2FmZWx5IGZyZWVkLlxuJiM0MztcdFx0XHQgKiBaZXJvaXphdGlvbiBjYW5ub3QgYmUgY29uZmlybWVkIGluIHRoaXMgc3RhdGUsIGJ1dCB0aGVcbiYjNDM7XHRcdFx0ICogcXVldWUgY2Fubm90IGdlbmVyYXRlIGludGVycnVwdHMsIHNvIHRoZSBOSUIgcGFnZSBpc1xuJiM0MztcdFx0XHQgKiBubyBsb25nZXIgYSBETUEgdGFyZ2V0IGFuZCBpdCBpcyBzYWZlIHRvIGZyZWUgaXQuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoIXJldCB8fCByZXQgPT0gLUVOT0RFVilcbiYjNDM7XHRcdFx0XHRnb3RvIGRvbmU7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFRpbWVkIG91dCB3aXRob3V0IGJlaW5nIGFibGUgdG8gdmVyaWZ5IHphcHEgY29tcGxldGVkLlxuJiM0MztcdFx0XHQgKlxuJiM0MztcdFx0XHQgKiBUaGUgQVFJQyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcXVldWUgLSB0aGUgcGlubmVkXG4mIzQzO1x0XHRcdCAqIHBhZ2UgY29udGFpbmluZyB0aGUgTklCIGFuZCB0aGUgcmVnaXN0ZXJlZCBndWVzdCBJU0MgLVxuJiM0MztcdFx0XHQgKiBjYW5ub3QgYmUgZnJlZWQgaGVyZS4gVGhlIE5JQiBpcyB0aGUgYWN0aXZlIERNQSB0YXJnZXRcbiYjNDM7XHRcdFx0ICogZm9yIEFQIGludGVycnVwdCBkZWxpdmVyeSB1bnRpbCB0aGUgcmVzZXQgY29tcGxldGVzO1xuJiM0MztcdFx0XHQgKiBmcmVlaW5nIHRoZSBwaW5uZWQgcGFnZSB3aGlsZSB0aGUgaGFyZHdhcmUgbWF5IHN0aWxsXG4mIzQzO1x0XHRcdCAqIHdyaXRlIHRvIGl0IHdvdWxkIHJlc3VsdCBpbiBhIHdpbGQgRE1BIHdyaXRlIHRoYXQgY291bGRcbiYjNDM7XHRcdFx0ICogY29ycnVwdCBob3N0IG1lbW9yeS5cbiYjNDM7XHRcdFx0ICpcbiYjNDM7XHRcdFx0ICogSWYgdGhlIHJlc2V0IGV2ZW50dWFsbHkgY29tcGxldGVzLCBpbnRlcnJ1cHRzIHdpbGwgYmVcbiYjNDM7XHRcdFx0ICogdGVybWluYXRlZCBhbmQgdGhlIHBpbm5lZCBOSUIgcGFnZSBhbmQgSVNDIHJlZ2lzdHJhdGlvblxuJiM0MztcdFx0XHQgKiB3aWxsIGJlIGxlYWtlZC4gVGhpcyBpcyBwcmVmZXJhYmxlIHRvIGVpdGhlciBhIHdpbGQgRE1BXG4mIzQzO1x0XHRcdCAqIHdyaXRlIG9yIHdhaXRpbmcgaW5kZWZpbml0ZWx5OiBmbHVzaF93b3JrKCkgY2FsbGVycyBob2xkXG4mIzQzO1x0XHRcdCAqIHRoZSBtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2sgbXV0ZXggd2hpY2ggc2VyaWFsaXplcyBhY2Nlc3NcbiYjNDM7XHRcdFx0ICogdG8gYWxsIG1kZXYgb2JqZWN0cyBzeXN0ZW0td2lkZSwgc28gYmxvY2tpbmcgaGVyZSB3b3VsZFxuJiM0MztcdFx0XHQgKiBoYW5nIGFsbCBndWVzdHMgdG8gd2hpY2ggdGhvc2UgbWRldnMgYXJlIGF0dGFjaGVkLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0cmVwb3J0X2FxaWNfcmVzb3VyY2VfbGVhayhxKTtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogUmVwb3J0IHRoZSBhY3R1YWwgbm9uLXplcm8gaGFyZHdhcmUgcmVzcG9uc2UgY29kZSwgb3JcbiYjNDM7XHRcdFx0ICogc3ludGhlc2l6ZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUyBpZiBUQVBRXG4mIzQzO1x0XHRcdCAqIGNvbXBsZXRlZCBub3JtYWxseSBidXQgdGhlIHN0YXR1cyBiaXRzIGZhaWxlZCB0b1xuJiM0MztcdFx0XHQgKiB0cmFuc2l0aW9uIHRvIHRoZWlyIHBvc3QtcmVzZXQgc3RhdGVzLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKHN0YXR1cy5yZXNwb25zZV9jb2RlID09IEFQX1JFU1BPTlNFX05PUk1BTClcbiYjNDM7XHRcdFx0XHRxLVx1MDAzZXJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1M7XG4mIzQzO1x0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHRxLVx1MDAzZXJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlID0gc3RhdHVzLnJlc3BvbnNlX2NvZGU7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoIXJldCB8fCByZXQgPT0gLUVOT0RFVilcbiYjNDM7XHRcdFx0Z290byBkb25lO1xuIFx0XHRpZiAocmV0ID09IC1FQlVTWSkge1xuIFx0XHRcdHByX25vdGljZV9yYXRlbGltaXRlZChXQUlUX01TRywgZWxhcHNlZCxcbiBcdFx0XHRcdFx0ICAgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbkBAIC0xOTc1LDEzICYjNDM7MjE3NywxMyBAQCBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKVxuIFx0XHRcdCAgICByZXQgPT0gLUVBR0FJTikge1xuIFx0XHRcdFx0c3RhdHVzID0gYXBfemFwcShxLVx1MDAzZWFwcW4sIDApO1xuIFx0XHRcdFx0bWVtY3B5KFx1MDAyNnEtXHUwMDNlcmVzZXRfc3RhdHVzLCBcdTAwMjZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTtcbi1cdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbi1cdFx0XHRpZiAocS1cdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRClcbi1cdFx0XHRcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcbi1cdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuJiM0MztcbiYjNDM7ZG9uZTpcbiYjNDM7XHRpZiAocS1cdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRClcbiYjNDM7XHRcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxuQEAgLTIwNjEsMTIgJiM0MzsyMjYzLDI4IEBAIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X29wZW5fZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldilcbiBcdHJldHVybiB2ZmlvX2FwX21kZXZfc2V0X2t2bShtYXRyaXhfbWRldiwgdmRldi1cdTAwM2Vrdm0pO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3JlbGVhc2VfZXZlbnRmZHMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbiYjNDM7e1xuJiM0MztcdGlmIChtYXRyaXhfbWRldi1cdTAwM2VyZXFfdHJpZ2dlcikge1xuJiM0MztcdFx0ZXZlbnRmZF9jdHhfcHV0KG1hdHJpeF9tZGV2LVx1MDAzZXJlcV90cmlnZ2VyKTtcbiYjNDM7XHRcdG1hdHJpeF9tZGV2LVx1MDAzZXJlcV90cmlnZ2VyID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKG1hdHJpeF9tZGV2LVx1MDAzZWNmZ19jaGdfdHJpZ2dlcikge1xuJiM0MztcdFx0ZXZlbnRmZF9jdHhfcHV0KG1hdHJpeF9tZGV2LVx1MDAzZWNmZ19jaGdfdHJpZ2dlcik7XG4mIzQzO1x0XHRtYXRyaXhfbWRldi1cdTAwM2VjZmdfY2hnX3RyaWdnZXIgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2xvc2VfZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldilcbiB7XG4gXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID1cbiBcdFx0Y29udGFpbmVyX29mKHZkZXYsIHN0cnVjdCBhcF9tYXRyaXhfbWRldiwgdmRldik7XG4gXG4gXHR2ZmlvX2FwX21kZXZfdW5zZXRfa3ZtKG1hdHJpeF9tZGV2KTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuJiM0MztcdHZmaW9fYXBfbWRldl9yZWxlYXNlX2V2ZW50ZmRzKG1hdHJpeF9tZGV2KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3JlcXVlc3Qoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2LCB1bnNpZ25lZCBpbnQgY291bnQpXG5AQCAtMjQ1Nyw4ICYjNDM7MjY3NSwxMCBAQCBpbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxuIFxuIFx0cS1cdTAwM2VhcHFuID0gYXBxbjtcbiBcdHEtXHUwMDNlc2F2ZWRfaXNjID0gVkZJT19BUF9JU0NfSU5WQUxJRDtcbi1cdG1lbXNldChcdTAwMjZxLVx1MDAzZXJlc2V0X3N0YXR1cywgMCwgc2l6ZW9mKHEtXHUwMDNlcmVzZXRfc3RhdHVzKSk7XG4mIzQzO1x0cS1cdTAwM2VyZXNldF9tYXhfd2FpdCA9IEFQX1JFU0VUX01BWF9XQUlUO1xuIFx0SU5JVF9XT1JLKFx1MDAyNnEtXHUwMDNlcmVzZXRfd29yaywgYXBxX3Jlc2V0X2NoZWNrKTtcbiYjNDM7XHR2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWUocSk7XG4mIzQzO1x0Zmx1c2hfd29yayhcdTAwMjZxLVx1MDAzZXJlc2V0X3dvcmspO1xuIFxuIFx0aWYgKG1hdHJpeF9tZGV2KSB7XG4gXHRcdHZmaW9fYXBfbWRldl9saW5rX3F1ZXVlKG1hdHJpeF9tZGV2LCBxKTtcbkBAIC0yNTQxLDggJiM0MzsyNzYxLDE5IEBAIHZvaWQgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcbiBcdFx0dmZpb19hcF91bmxpbmtfcXVldWVfZnJfbWRldihxKTtcbiBcbiBcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZhcGRldi1cdTAwM2VkZXZpY2UsIE5VTEwpO1xuLVx0a2ZyZWUocSk7XG4gXHRyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3JfbWRldihtYXRyaXhfbWRldik7XG4mIzQzO1xuJiM0MztcdGlmIChxLVx1MDAzZXJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlICE9IEFQX1JFU1BPTlNFX05PUk1BTCkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIExvb3AgdW50aWwgemVyb2l6YXRpb24gb2YgcXVldWUgaXMgdmVyaWZpZWQgc28gd2UgZG9uJiMzOTt0IGxlYWtcbiYjNDM7XHRcdCAqIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgcXVldWUgdG8gdGhlIGNhbGxlci5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cS1cdTAwM2VyZXNldF9tYXhfd2FpdCA9IDA7XG4mIzQzO1x0XHR2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWUocSk7XG4mIzQzO1x0XHRmbHVzaF93b3JrKFx1MDAyNnEtXHUwMDNlcmVzZXRfd29yayk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrZnJlZShxKTtcbiB9XG4gXG4gLyoqXG5AQCAtMjY5NywxMSAmIzQzOzI5MjgsMTEgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X29uX2NmZ19yZW1vdmUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpjdXJfY29uZmlnX2luZm8sXG4gXHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChhcXJlbSxcbiBcdFx0XHRcdCAgICh1bnNpZ25lZCBsb25nICopcHJldl9jb25maWdfaW5mby1cdTAwM2VhcW0sXG4gXHRcdFx0XHQgICAodW5zaWduZWQgbG9uZyAqKWN1cl9jb25maWdfaW5mby1cdTAwM2VhcW0sXG4tXHRcdFx0XHQgICBBUF9ERVZJQ0VTKTtcbiYjNDM7XHRcdFx0XHQgICBBUF9ET01BSU5TKTtcbiBcdGRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kbm90KGNkcmVtLFxuIFx0XHRcdFx0ICAgKHVuc2lnbmVkIGxvbmcgKilwcmV2X2NvbmZpZ19pbmZvLVx1MDAzZWFkbSxcbiBcdFx0XHRcdCAgICh1bnNpZ25lZCBsb25nICopY3VyX2NvbmZpZ19pbmZvLVx1MDAzZWFkbSxcbi1cdFx0XHRcdCAgIEFQX0RFVklDRVMpO1xuJiM0MztcdFx0XHRcdCAgIEFQX0RPTUFJTlMpO1xuIFxuIFx0aWYgKGRvX3JlbW92ZSlcbiBcdFx0dmZpb19hcF9tZGV2X2NmZ19yZW1vdmUoYXByZW0sIGFxcmVtLCBjZHJlbSk7XG5AQCAtMjgxMiw3ICYjNDM7MzA0Myw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jZmdfYWRkKHVuc2lnbmVkIGxvbmcgKmFwbV9hZGQsIHVuc2lnbmVkIGxvbmcgKmFxbV9hZGQsXG4gXHRcdGJpdG1hcF9hbmQobWF0cml4X21kZXYtXHUwMDNlYXFtX2FkZCxcbiBcdFx0XHQgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXFtLCBhcW1fYWRkLCBBUF9ET01BSU5TKTtcbiBcdFx0Yml0bWFwX2FuZChtYXRyaXhfbWRldi1cdTAwM2VhZG1fYWRkLFxuLVx0XHRcdCAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hZG0sIGFkbV9hZGQsIEFQX0RFVklDRVMpO1xuJiM0MztcdFx0XHQgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYWRtLCBhZG1fYWRkLCBBUF9ET01BSU5TKTtcbiBcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaCBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmhcbmluZGV4IDliZmY2NjZiMGIzNWQuLjkxNGVhNWQ0MWQzMzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oXG5AQCAtMTM5LDYgJiM0MzsxMzksOCBAQCBzdHJ1Y3QgYXBfbWF0cml4X21kZXYge1xuICAqXHRcdCB0aGF0IG5lZWQgdG8gYmUgcmVzZXRcbiAgKiBAcmVzZXRfc3RhdHVzOiB0aGUgc3RhdHVzIGZyb20gdGhlIGxhc3QgcmVzZXQgb2YgdGhlIHF1ZXVlXG4gICogQHJlc2V0X3dvcms6IHdvcmsgdG8gd2FpdCBmb3IgcXVldWUgcmVzZXQgdG8gY29tcGxldGVcbiYjNDM7ICogQHJlc2V0X21heF93YWl0OiB0aGUgbWF4IGFtb3VudCBvZiB0aW1lIHRvIHdhaXQgZm9yIGEgcmVzZXQgdG8gY29tcGxldGU7XG4mIzQzOyAqXHRcdCAgICBzcGVjaWZ5aW5nIDAgbWVhbnMgd2FpdCBhcyBsb25nIGFzIGl0IHRha2VzLlxuICAqL1xuIHN0cnVjdCB2ZmlvX2FwX3F1ZXVlIHtcbiBcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7XG5AQCAtMTUwLDYgJiM0MzsxNTIsNyBAQCBzdHJ1Y3QgdmZpb19hcF9xdWV1ZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHJlc2V0X3Fub2RlO1xuIFx0c3RydWN0IGFwX3F1ZXVlX3N0YXR1cyByZXNldF9zdGF0dXM7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfd29yaztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcmVzZXRfbWF4X3dhaXQ7XG4gfTtcbiBcbiBpbnQgdmZpb19hcF9tZGV2X3JlZ2lzdGVyKHZvaWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIFZGSU8gQVAgKEFkanVuY3QgUHJvY2Vzc29yKSBkcml2ZXIgaW4gZHJpdmVycy9zMzkwL2NyeXB0by8sIHdoaWNoIGlzIGV4Y2x1c2l2ZSB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUgKENPTkZJR19WRklPX0FQKSBhbmQgaXMgbmVpdGhlciBjb21waWxlZCBub3IgcmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjNjODY5YzdmY2QzZTI5MmZiMmY2ZDIyNjQyNGFhNGEyMTc0ZGVjYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMTg6MjI6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMKaW5kZXggOTQwYzBmZjY2OGJlZS4uZTA1NGZkNGE5NDk3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwpAQCAtMzEsNiAmIzQzOzMxLDcgQEAKICNkZWZpbmUgQVBfUVVFVUVfSU5fVVNFICYjMzQ7aW4gdXNlJiMzNDsKIAogI2RlZmluZSBBUF9SRVNFVF9JTlRFUlZBTAkJMjAJLyogUmVzZXQgc2xlZXAgaW50ZXJ2YWwgKDIwbXMpCQkqLwomIzQzOyNkZWZpbmUgQVBfUkVTRVRfTUFYX1dBSVQJCTIwMDAJLyogTWF4aW11bSB3YWl0IGZvciByZXNldCAoMjAwMG1zKQkqLwogCiBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZXMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldik7CiBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9yZXNldF9xbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpxbGlzdCk7CkBAIC0yMjYsMTYgJiM0MzsyMjcsMjcgQEAgc3RhdGljIHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICp2ZmlvX2FwX21kZXZfZ2V0X3F1ZXVlKAogfQogCiAvKioKLSAqIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIgLSBjbGVhcnMgdGhlIElSIGJpdCBvciBnaXZlcyB1cCBhZnRlciA1IHRyaWVzCi0gKiBAYXBxbjogVGhlIEFQIFF1ZXVlIG51bWJlcgotICoKLSAqIENoZWNrcyB0aGUgSVJRIGJpdCBmb3IgdGhlIHN0YXR1cyBvZiB0aGlzIEFQUU4gdXNpbmcgYXBfdGFwcS4KLSAqIFJldHVybnMgaWYgdGhlIGFwX3RhcHEgZnVuY3Rpb24gc3VjY2VlZGVkIGFuZCB0aGUgYml0IGlzIGNsZWFyLgotICogUmV0dXJucyBpZiBhcF90YXBxIGZ1bmN0aW9uIGZhaWxlZCB3aXRoIGludmFsaWQsIGRlY29uZmlndXJlZCBvcgotICogY2hlY2tzdG9wcGVkIEFQLgotICogT3RoZXJ3aXNlIHJldHJpZXMgdXAgdG8gNSB0aW1lcyBhZnRlciB3YWl0aW5nIDIwbXMuCiYjNDM7ICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhciAtIHdhaXQgZm9yIHRoZSBJUiBiaXQgdG8gY2xlYXIgYWZ0ZXIgYSBkaXNhYmxlCiYjNDM7ICoKJiM0MzsgKiBAYXBxbjogdGhlIEFQUU4gb2YgdGhlIHF1ZXVlCiYjNDM7ICoKJiM0MzsgKiBSZXBlYXRlZGx5IHBvbGxzIHRoZSBBUCBxdWV1ZSBzdGF0dXMgdmlhIFBRQVAoVEFQUSkgZXZlcnkgMjBtcyB1bnRpbCB0aGUgSVIKJiM0MzsgKiBiaXQgaXMgY2xlYXIsIHRoZSBxdWV1ZSBiZWNvbWVzIG5vbi1vcGVyYXRpb25hbCwgb3IgNSByZXRyaWVzIGFyZSBleGhhdXN0ZWQuCiYjNDM7ICoKJiM0MzsgKiBCZWNhdXNlIFBRQVAoQVFJQykgZGlzYWJsZSBpbml0aWF0ZXMgYW4gYXN5bmNocm9ub3VzIHByb2Nlc3MsIGEKJiM0MzsgKiBjb25kaXRpb24tY29kZSAwIGNvbXBsZXRpb24gZG9lcyBub3QgZ3VhcmFudGVlIHRoZSBJUiBiaXQgaGFzIGJlZW4gY2xlYXJlZC4KJiM0MzsgKiBUaGUgaG9zdCBtdXN0IGNvbmZpcm0gSVI9MCBiZWZvcmUgdW5waW5uaW5nIHRoZSBOSUIgcGFnZSB0byBhdm9pZCBhIHdpbGQKJiM0MzsgKiBETUEgd3JpdGUgdG8gYSBmcmVlZCBwYWdlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqIC0gMAkJaWYgdGhlIElSIGJpdCBpcyBjbGVhciAoaS5lLiwgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQpLgomIzQzOyAqCiYjNDM7ICogLSAtRU5PREVWCWlmIHRoZSBQUUFQLVRBUFEgcmVzcG9uc2UgY29kZSBpbmRpY2F0ZXMgdGhlIHF1ZXVlIGlzIG5vdCBhdmFpbGFibGUsCiYjNDM7ICoJCWlzIGRlY29uZmlndXJlZCwgb3IgaXMgY2hlY2tzdG9wcGVkIChpLmUuLCBub3Qgb3BlcmF0aW9uYWwpLgomIzQzOyAqCiYjNDM7ICogLSAtRVRJTUVET1VUCXRoZSBmdW5jdGlvbiB0aW1lZCBvdXQgYmVmb3JlIHRoZSBJUiBiaXQgd2FzIGNsZWFyZWQuCiAgKi8KLXN0YXRpYyB2b2lkIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoaW50IGFwcW4pCiYjNDM7c3RhdGljIGludCB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKGludCBhcHFuKQogewogCXN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgc3RhdHVzOwogCWludCByZXRyeSA9IDU7CkBAIC0yNDYsNyAmIzQzOzI1OCw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoaW50IGFwcW4pCiAJCWNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOgogCQljYXNlIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTOgogCQkJaWYgKCFzdGF0dXMuaXJxX2VuYWJsZWQpCi0JCQkJcmV0dXJuOwomIzQzOwkJCQlyZXR1cm4gMDsKIAkJCWZhbGx0aHJvdWdoOwogCQljYXNlIEFQX1JFU1BPTlNFX0JVU1k6CiAJCQltc2xlZXAoMjApOwpAQCAtMjU3LDEyICYjNDM7MjY5LDE1IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoaW50IGFwcW4pCiAJCWRlZmF1bHQ6CiAJCQlXQVJOX09OQ0UoMSwgJiMzNDslczogdGFwcSByYyAlMDJ4OiAlMDR4XG4mIzM0OywgX19mdW5jX18sCiAJCQkJICBzdGF0dXMucmVzcG9uc2VfY29kZSwgYXBxbik7Ci0JCQlyZXR1cm47CiYjNDM7CQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9IHdoaWxlICgtLXJldHJ5KTsKIAotCVdBUk5fT05DRSgxLCAmIzM0OyVzOiB0YXBxIHJjICUwMng6ICUwNHggY291bGQgbm90IGNsZWFyIElSIGJpdFxuJiMzNDssCi0JCSAgX19mdW5jX18sIHN0YXR1cy5yZXNwb25zZV9jb2RlLCBhcHFuKTsKJiM0MzsJV0FSTl9PTkNFKDEsICYjMzQ7JXM6IHRhcHEgcmMgJTAyeDogdGltZWQgb3V0IHdhaXRpbmcgZm9yIGludGVycnVwdHMgZGlzYWJsZWQgZm9yICUwMnguJTA0eFxuJiMzNDssCiYjNDM7CQkgIF9fZnVuY19fLCBzdGF0dXMucmVzcG9uc2VfY29kZSwKJiM0MzsJCSAgQVBfUUlEX0NBUkQoYXBxbiksIEFQX1FJRF9RVUVVRShhcHFuKSk7CiYjNDM7CiYjNDM7CXJldHVybiAtRVRJTUVET1VUOwogfQogCiAvKioKQEAgLTI4OSwyMCAmIzQzOzMwNCwyOCBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpCiB9CiAKIC8qKgotICogdmZpb19hcF9pcnFfZGlzYWJsZSAtIGRpc2FibGVzIGFuZCBjbGVhcnMgYW4gYXBfcXVldWUgaW50ZXJydXB0Ci0gKiBAcTogVGhlIHZmaW9fYXBfcXVldWUKJiM0MzsgKiB2ZmlvX2FwX2lycV9kaXNhYmxlIC0gZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciBhbiBBUCBxdWV1ZQomIzQzOyAqIEBxOiB0aGUgdmZpb19hcF9xdWV1ZQogICoKLSAqIFVzZXMgYXBfYXFpYyB0byBkaXNhYmxlIHRoZSBpbnRlcnJ1cHRpb24gYW5kIGluIGNhc2Ugb2Ygc3VjY2VzcywgcmVzZXQKLSAqIGluIHByb2dyZXNzIG9yIElSUSBkaXNhYmxlIGNvbW1hbmQgYWxyZWFkeSBwcm9jZWVkZWQ6IGNhbGxzCi0gKiB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKCkgdG8gY2hlY2sgZm9yIHRoZSBJUlEgYml0IHRvIGJlIGNsZWFyCi0gKiBhbmQgY2FsbHMgdmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKCkgdG8gZnJlZSB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQKLSAqIHdpdGggdGhlIEFQIGludGVycnVwdCBoYW5kbGluZy4KJiM0MzsgKiBJc3N1ZXMgUFFBUChBUUlDKSB0byBkaXNhYmxlIGludGVycnVwdHMgZm9yIHRoZSBBUCBxdWV1ZS4gT24gc3VjY2VzcwomIzQzOyAqIChBUF9SRVNQT05TRV9OT1JNQUwgb3IgQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQpLCBwb2xscyB2aWEKJiM0MzsgKiB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKCkgdW50aWwgdGhlIElSIGJpdCBpcyBjb25maXJtZWQgY2xlYXIgYmVmb3JlCiYjNDM7ICogZnJlZWluZyB0aGUgcGlubmVkIE5JQiBwYWdlIGFuZCB1bnJlZ2lzdGVyaW5nIHRoZSBndWVzdCBJU0MuIFRoaXMgd2FpdCBpcwomIzQzOyAqIG5lY2Vzc2FyeSBiZWNhdXNlIEFRSUMgZGlzYWJsZSBpcyBhc3luY2hyb25vdXM6IGZyZWVpbmcgdGhlIE5JQiBiZWZvcmUgSVI9MAomIzQzOyAqIGlzIGNvbmZpcm1lZCByaXNrcyBhIHdpbGQgRE1BIHdyaXRlIHRvIGEgZnJlZWQgaG9zdCBwYWdlLgogICoKLSAqIEluIHRoZSBjYXNlIHRoZSBBUCBpcyBidXN5LCBvciBhIHJlc2V0IGlzIGluIHByb2dyZXNzLAotICogcmV0cmllcyBhZnRlciAyMG1zLCB1cCB0byA1IHRpbWVzLgomIzQzOyAqIFJldHJpZXMgdXAgdG8gNSB0aW1lcyAod2l0aCAyMG1zIHNsZWVwKSBpZiB0aGUgcXVldWUgaXMgYnVzeSBvciBhIHJlc2V0IGlzCiYjNDM7ICogaW4gcHJvZ3Jlc3MuCiAgKgotICogUmV0dXJucyBpZiBhcF9hcWljIGZ1bmN0aW9uIGZhaWxlZCB3aXRoIGludmFsaWQsIGRlY29uZmlndXJlZCBvcgotICogY2hlY2tzdG9wcGVkIEFQLgomIzQzOyAqIElmIHRoZSBJUiBiaXQgY2Fubm90IGJlIGNvbmZpcm1lZCBjbGVhciAodGltZW91dCksIHRoZSBOSUIgcGFnZSBhbmQgZ3Vlc3QKJiM0MzsgKiBJU0MgYXJlIGludGVudGlvbmFsbHkgbGVha2VkLiBJZiB0aGUgcGFnZSB3ZXJlIHVucGlubmVkIGFuZCByZXR1cm5lZCB0byB0aGUKJiM0MzsgKiBhbGxvY2F0b3IsIGEgc3Vic2VxdWVudCBoYXJkd2FyZSBETUEgd3JpdGUgdG8gdGhhdCBwaHlzaWNhbCBhZGRyZXNzIHdvdWxkCiYjNDM7ICogY29ycnVwdCBtZW1vcnkgYmVsb25naW5nIHRvIGEgbmV3IG93bmVyIOKAlCBhIHdpbGQgRE1BIHdyaXRlIHRoYXQgY291bGQgY3Jhc2gKJiM0MzsgKiBvciBjb21wcm9taXNlIHRoZSBob3N0IGtlcm5lbC4KJiM0MzsgKgomIzQzOyAqIElmIHRoZSBxdWV1ZSBpcyBub24tb3BlcmF0aW9uYWwgKGRlY29uZmlndXJlZCwgY2hlY2tzdG9wcGVkLCBub3QgYXZhaWxhYmxlKSwKJiM0MzsgKiByZXNvdXJjZXMgYXJlIGZyZWVkIGltbWVkaWF0ZWx5IHNpbmNlIHRoZSBoYXJkd2FyZSBjYW4gbm8gbG9uZ2VyIHdyaXRlIHRvCiYjNDM7ICogdGhlIE5JQi4KICAqCiAgKiBSZXR1cm46ICZhbXA7c3RydWN0IGFwX3F1ZXVlX3N0YXR1cwogICovCkBAIC0zMTAsMTUgJiM0MzszMzMsMzggQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSkKIHsKIAl1bmlvbiBhcF9xaXJxX2N0cmwgYXFpY19naXNhID0geyAudmFsdWUgPSAwIH07CiAJc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXM7Ci0JaW50IHJldHJpZXMgPSA1OwomIzQzOwlpbnQgcmV0cmllcyA9IDUsIHJldDsKIAogCWRvIHsKIAkJc3RhdHVzID0gYXBfYXFpYyhxLSZndDthcHFuLCBhcWljX2dpc2EsIDApOwogCQlzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7CiAJCWNhc2UgQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQ6CiAJCWNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOgotCQkJdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcihxLSZndDthcHFuKTsKLQkJCWdvdG8gZW5kX2ZyZWU7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBBUUlDIGRpc2FibGUgd2FzIGFjY2VwdGVkIChOT1JNQUwpLCBvciB0aGUgcXVldWUgd2FzCiYjNDM7CQkJICogYWxyZWFkeSBkaXNhYmxlZCBvciBhIHByaW9yIGFzeW5jIHJlcXVlc3QgaXMgc3RpbGwKJiM0MzsJCQkgKiBjb21wbGV0aW5nIChPVEhFUldJU0VfQ0hBTkdFRCkuICBJbiBib3RoIGNhc2VzLCB3ZSBtdXN0CiYjNDM7CQkJICogd2FpdCB1bnRpbCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBoYXMgYmVlbiBkaXNhYmxlZAomIzQzOwkJCSAqIGJlZm9yZSBwcm9jZWVkaW5nLgomIzQzOwkJCSAqLwomIzQzOwkJCXJldCA9IHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIocS0mZ3Q7YXBxbik7CiYjNDM7CQkJaWYgKHJldCA9PSAwIHx8IHJldCA9PSAtRU5PREVWKQomIzQzOwkJCQlnb3RvIGVuZF9mcmVlOwomIzQzOwkJCS8qCiYjNDM7CQkJICogVGltZWQgb3V0IHdhaXRpbmcgdG8gY29uZmlybSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4KJiM0MzsJCQkgKiBJZiBhcF9hcWljIHJldHVybmVkIE5PUk1BTCwgdGhlIGd1ZXN0IHdvdWxkIGluY29ycmVjdGx5CiYjNDM7CQkJICogaW50ZXJwcmV0IHRoYXQgYXMgYSBzdWNjZXNzZnVsIGRpc2FibGUgYW5kIG1heSBmcmVlIG9yCiYjNDM7CQkJICogcmV1c2UgdGhlIE5JQiB3aGlsZSBoYXJkd2FyZSBjYW4gc3RpbGwgd3JpdGUgdG8gaXQuCiYjNDM7CQkJICogWmVybyB0aGUgc3RhdHVzIHdvcmQgYW5kIHNldCBPVEhFUldJU0VfQ0hBTkdFRCB0byBtaW1pYwomIzQzOwkJCSAqIHdoYXQgdGhlIGhhcmR3YXJlIGRvZXMgZm9yIHRoYXQgcmVzcG9uc2UgY29kZS4gVGhpcwomIzQzOwkJCSAqIHNpZ25hbHMgdG8gdGhlIGd1ZXN0IHRoYXQgdGhlIHJlc2V0IG9wZXJhdGlvbiBkaWQgbm90CiYjNDM7CQkJICogY29tcGxldGUuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKHN0YXR1cy5yZXNwb25zZV9jb2RlID09IEFQX1JFU1BPTlNFX05PUk1BTCkgewomIzQzOwkJCQltZW1zZXQoJmFtcDtzdGF0dXMsIDAsIHNpemVvZihzdGF0dXMpKTsKJiM0MzsJCQkJc3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDsKJiM0MzsJCQl9CiYjNDM7CQkJZ290byBlbmRfZmFpbDsKIAkJY2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzoKIAkJY2FzZSBBUF9SRVNQT05TRV9CVVNZOgogCQkJbXNsZWVwKDIwKTsKQEAgLTMyNiwxOCAmIzQzOzM3Miw0NyBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKQogCQljYXNlIEFQX1JFU1BPTlNFX1FfTk9UX0FWQUlMOgogCQljYXNlIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRDoKIAkJY2FzZSBBUF9SRVNQT05TRV9DSEVDS1NUT1BQRUQ6CiYjNDM7CQkJLyogQVAgbm90IG9wZXJhdGlvbmFsOyBubyBmdXJ0aGVyIGludGVycnVwdHMgcG9zc2libGUgKi8KJiM0MzsJCQlXQVJOX09OQ0UoMSwgJiMzNDslczogYXBfYXFpYyBzdGF0dXMgJWRcbiYjMzQ7LCBfX2Z1bmNfXywKJiM0MzsJCQkJICBzdGF0dXMucmVzcG9uc2VfY29kZSk7CiYjNDM7CQkJZ290byBlbmRfZnJlZTsKIAkJY2FzZSBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1M6CiAJCWRlZmF1bHQ6Ci0JCQkvKiBBbGwgY2FzZXMgaW4gZGVmYXVsdCBtZWFucyBBUCBub3Qgb3BlcmF0aW9uYWwgKi8KJiM0MzsJCQkvKgomIzQzOwkJCSAqIFRoZSBBUUlDIGRpc2FibGUgd2FzIHJlamVjdGVkOyBJUlEgaXMgc3RpbGwgZW5hYmxlZAomIzQzOwkJCSAqIGFuZCB0aGUgaGFyZHdhcmUgc3RpbGwgaG9sZHMgdGhlIE5JQiBhZGRyZXNzLiBEbyBub3QKJiM0MzsJCQkgKiBmcmVlIHJlc291cmNlcy4KJiM0MzsJCQkgKi8KIAkJCVdBUk5fT05DRSgxLCAmIzM0OyVzOiBhcF9hcWljIHN0YXR1cyAlZFxuJiMzNDssIF9fZnVuY19fLAogCQkJCSAgc3RhdHVzLnJlc3BvbnNlX2NvZGUpOwotCQkJZ290byBlbmRfZnJlZTsKJiM0MzsJCQlnb3RvIGVuZF9mYWlsOwogCQl9CiAJfSB3aGlsZSAocmV0cmllcy0tKTsKIAogCVdBUk5fT05DRSgxLCAmIzM0OyVzOiBhcF9hcWljIHN0YXR1cyAlZFxuJiMzNDssIF9fZnVuY19fLAogCQkgIHN0YXR1cy5yZXNwb25zZV9jb2RlKTsKJiM0MzsKJiM0MztlbmRfZmFpbDoKJiM0MzsJLyoKJiM0MzsJICogV2UgYXJlIGhlcmUgZWl0aGVyIGJlY2F1c2UgdGhlIEFRSUMgaW5zdHJ1Y3Rpb24gZmFpbGVkIHRvIGRpc2FibGUKJiM0MzsJICogaW50ZXJydXB0cywgb3IgYmVjYXVzZSBJUj0wIGNvdWxkIG5vdCBiZSBjb25maXJtZWQuIEluIGVpdGhlciBjYXNlCiYjNDM7CSAqIHRoZSBOSUIgcGFnZSBhbmQgZ3Vlc3QgSVNDIGNhbm5vdCBiZSBmcmVlZDogaGFyZHdhcmUgbWF5IHN0aWxsIHdyaXRlCiYjNDM7CSAqIHRvIHRoZSBOSUIsIGFuZCB1bnBpbm5pbmcgdGhlIHBhZ2Ugd291bGQgYWxsb3cgaXQgdG8gYmUgcmVhbGxvY2F0ZWQKJiM0MzsJICogdG8gYSBuZXcgb3duZXIuIEEgc3Vic2VxdWVudCBoYXJkd2FyZSBETUEgd3JpdGUgdG8gdGhhdCBwaHlzaWNhbAomIzQzOwkgKiBhZGRyZXNzIHdvdWxkIGNvcnJ1cHQgdGhlIG5ldyBvd25lciYjMzk7cyBtZW1vcnkg4oCUIGEgd2lsZCBETUEgd3JpdGUgdGhhdAomIzQzOwkgKiBjb3VsZCBjcmFzaCBvciBjb21wcm9taXNlIHRoZSBob3N0IGtlcm5lbC4gVGhlIHJlc291cmNlcyBhcmUKJiM0MzsJICogdGhlcmVmb3JlIGludGVudGlvbmFsbHkgbGVha2VkLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIHN0YXR1czsKJiM0MzsKIGVuZF9mcmVlOgomIzQzOwkvKgomIzQzOwkgKiBUaGlzIGxhYmVsIGlzIHJlYWNoZWQgYmVjYXVzZSB0aGUgcXVldWUgd2FzIHN1Y2Nlc3NmdWxseSBkaXNhYmxlZCwKJiM0MzsJICogb3IgYmVjYXVzZSB0aGUgcXVldWUgaXMgbm90IG9wZXJhdGlvbmFsIG9yIG5vdCBhdmFpbGFibGUsIGluIHdoaWNoIGNhc2UKJiM0MzsJICogaW50ZXJydXB0cyBjYW4gbm90IGJlIHByb2Nlc3NlZCwgc28gZnJlZSB0aGUgQVFJQyByZXNvdXJjZXMgLSB0aGUgcGlubmVkIE5JQgomIzQzOwkgKiBwYWdlIGFuZCB0aGUgcmVnaXN0ZXJlZCBndWVzdCBJU0MgLSB1c2VkIHRvIGVuYWJsZSBpbnRlcnJ1cHRzIHNvIHRoZXkgd2lsbAomIzQzOwkgKiBub3QgYmUgbGVha2VkLgomIzQzOwkgKi8KIAl2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTQwMSwyMiAmIzQzOzQ3NiwyOSBAQCBzdGF0aWMgaW50IGVuc3VyZV9uaWJfc2hhcmVkKHVuc2lnbmVkIGxvbmcgYWRkcikKIH0KIAogLyoqCi0gKiB2ZmlvX2FwX2lycV9lbmFibGUgLSBFbmFibGUgSW50ZXJydXB0aW9uIGZvciBhIEFQUU4KJiM0MzsgKiB2ZmlvX2FwX2lycV9lbmFibGUgLSBlbmFibGUgaW50ZXJydXB0cyBmb3IgYW4gQVAgcXVldWUgb24gYmVoYWxmIG9mIGEgZ3Vlc3QKICAqCi0gKiBAcToJIHRoZSB2ZmlvX2FwX3F1ZXVlIGhvbGRpbmcgQVFJQyBwYXJhbWV0ZXJzCiYjNDM7ICogQHE6CSB0aGUgdmZpb19hcF9xdWV1ZSBmb3Igd2hpY2ggaW50ZXJydXB0cyBhcmUgdG8gYmUgZW5hYmxlZAogICogQGlzYzogdGhlIGd1ZXN0IElTQyB0byByZWdpc3RlciB3aXRoIHRoZSBHSUIgaW50ZXJmYWNlCi0gKiBAdmNwdTogdGhlIHZjcHUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZ2lzdGVycyBzcGVjaWZ5aW5nIHRoZSBwYXJhbWV0ZXJzCi0gKgkgIHBhc3NlZCB0byB0aGUgUFFBUChBUUlDKSBpbnN0cnVjdGlvbi4KJiM0MzsgKiBAdmNwdTogdGhlIHZjcHUgd2hvc2UgcmVnaXN0ZXJzIGNvbnRhaW4gdGhlIFBRQVAoQVFJQykgcGFyYW1ldGVycwomIzQzOyAqCiYjNDM7ICogUGlucyB0aGUgZ3Vlc3QgTklCIHBhZ2UsIHJlZ2lzdGVycyB0aGUgZ3Vlc3QgSVNDIHdpdGggdGhlIEdJQiB0byBvYnRhaW4gYQomIzQzOyAqIGhvc3QgSVNDLCBhbmQgcmVpc3N1ZXMgUFFBUChBUUlDKSB3aXRoIHRoZSB0cmFuc2xhdGVkIGhvc3QtYWJzb2x1dGUgTklCCiYjNDM7ICogYWRkcmVzcyBhbmQgaG9zdCBJU0Mgb24gYmVoYWxmIG9mIHRoZSBndWVzdC4KICAqCi0gKiBQaW4gdGhlIE5JQiBzYXZlZCBpbiAqcQotICogUmVnaXN0ZXIgdGhlIGd1ZXN0IElTQyB0byBHSUIgaW50ZXJmYWNlIGFuZCByZXRyaWV2ZSB0aGUKLSAqIGhvc3QgSVNDIHRvIGlzc3VlIHRoZSBob3N0IHNpZGUgUFFBUC9BUUlDCiYjNDM7ICogVGhlIGNvbmRpdGlvbiBjb2RlIGFuZCBBUC1xdWV1ZSBzdGF0dXMgd29yZCByZXR1cm5lZCBieSBQUUFQKEFRSUMpIGFyZQomIzQzOyAqIHJlZmxlY3RlZCBiYWNrIHRvIHRoZSBndWVzdCBhcy1pcy4gSVJRIHN0YXRlIHZlcmlmaWNhdGlvbiAocG9sbGluZyB1bnRpbAomIzQzOyAqIElSPTEpIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgZ3Vlc3QgQVAgYnVzLCBub3QgdGhlIGhvc3QuCiAgKgotICogc3RhdHVzLnJlc3BvbnNlX2NvZGUgbWF5IGJlIHNldCB0byBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1MgaW4gY2FzZSB0aGUKLSAqIHZmaW9fcGluX3BhZ2VzIG9yIGt2bV9zMzkwX2dpc2NfcmVnaXN0ZXIgZmFpbGVkLgomIzQzOyAqIFJlc291cmNlIG1hbmFnZW1lbnQgaXMgYmFzZWQgc29sZWx5IG9uIHdoZXRoZXIgaGFyZHdhcmUgYWNjZXB0ZWQgdGhlIG5ldyBOSUI6CiYjNDM7ICogLSBBUF9SRVNQT05TRV9OT1JNQUwgKENDPTApOiBoYXJkd2FyZSBhY2NlcHRlZCB0aGUgbmV3IE5JQjsgdGhlIG9sZCBwaW5uZWQKJiM0MzsgKiAgIE5JQiBwYWdlIGFuZCByZWdpc3RlcmVkIGd1ZXN0IElTQyBhcmUgZnJlZWQgYW5kIHRoZSBuZXcgb25lcyBzYXZlZC4KJiM0MzsgKiAtIEFsbCBvdGhlciByZXNwb25zZXM6IGhhcmR3YXJlIGRpZCBub3QgYWNjZXB0IHRoZSBuZXcgTklCOyB0aGUgbmV3bHkgcGlubmVkCiYjNDM7ICogICBwYWdlIGFuZCByZWdpc3RlcmVkIElTQyBhcmUgZnJlZWQgYW5kIHRoZSBwcmV2aW91c2x5IHNhdmVkIHJlc291cmNlcyBhcmUKJiM0MzsgKiAgIGxlZnQgaW50YWN0LgogICoKLSAqIE90aGVyd2lzZSByZXR1cm4gdGhlIGFwX3F1ZXVlX3N0YXR1cyByZXR1cm5lZCBieSB0aGUgYXBfYXFpYygpLAotICogYWxsIHJldHJ5IGhhbmRsaW5nIHdpbGwgYmUgZG9uZSBieSB0aGUgZ3Vlc3QuCiYjNDM7ICogQVBfUkVTUE9OU0VfSU5WQUxJRF9BRERSRVNTIGlzIHJldHVybmVkIGlmIHZmaW9fcGluX3BhZ2VzKCkgb3IKJiM0MzsgKiBrdm1fczM5MF9naXNjX3JlZ2lzdGVyKCkgZmFpbHMgYmVmb3JlIHRoZSBBUUlDIGluc3RydWN0aW9uIGlzIGlzc3VlZC4KICAqCiAgKiBSZXR1cm46ICZhbXA7c3RydWN0IGFwX3F1ZXVlX3N0YXR1cwogICovCkBAIC00MjgsMTEgJiM0Mzs1MTAsMTAgQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLAogCXN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgc3RhdHVzID0ge307CiAJc3RydWN0IGt2bV9zMzkwX2dpc2EgKmdpc2E7CiAJc3RydWN0IHBhZ2UgKmhfcGFnZTsKLQlpbnQgbmlzYzsKJiM0MzsJaW50IG5pc2MsIHJldDsKIAlzdHJ1Y3Qga3ZtICprdm07CiAJcGh5c19hZGRyX3QgaF9uaWI7CiAJZG1hX2FkZHJfdCBuaWI7Ci0JaW50IHJldDsKIAogCS8qIFZlcmlmeSB0aGF0IHRoZSBub3RpZmljYXRpb24gaW5kaWNhdG9yIGJ5dGUgYWRkcmVzcyBpcyB2YWxpZCAqLwogCWlmICh2ZmlvX2FwX3ZhbGlkYXRlX25pYih2Y3B1LCAmYW1wO25pYikpIHsKQEAgLTQ4OSwyNCAmIzQzOzU3MCwzMyBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsCiAJc3RhdHVzID0gYXBfYXFpYyhxLSZndDthcHFuLCBhcWljX2dpc2EsIGhfbmliKTsKIAlzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7CiAJY2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6Ci0JCS8qIFNlZSBpZiB3ZSBkaWQgY2xlYXIgb2xkZXIgSVJRIGNvbmZpZ3VyYXRpb24gKi8KJiM0MzsJCS8qCiYjNDM7CQkgKiBIYXJkd2FyZSBhY2NlcHRlZCB0aGUgbmV3IE5JQiBhZGRyZXNzIChDQz0wKS4gVGhlIG9sZCBOSUIgYW5kCiYjNDM7CQkgKiBndWVzdCBJU0MgYXJlIG5vIGxvbmdlciB1c2VkIGJ5IGhhcmR3YXJlIGFuZCBjYW4gYmUgZnJlZWQuCiYjNDM7CQkgKiBUaGUgbmV3IHJlc291cmNlcyBhcmUgc2F2ZWQgZm9yIHRyYWNraW5nIGFuZCBmdXR1cmUgdGVhcmRvd24uCiYjNDM7CQkgKgomIzQzOwkJICogSVJRIHN0YXRlIHZlcmlmaWNhdGlvbiAocG9sbGluZyB1bnRpbCBJUj0xKSBpcyB0aGUKJiM0MzsJCSAqIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBndWVzdCBBUCBidXMsIG5vdCB0aGUgaG9zdC4gVGhlCiYjNDM7CQkgKiBjb25kaXRpb24gY29kZSBhbmQgc3RhdHVzIHdvcmQgYXJlIHJlZmxlY3RlZCBiYWNrIHRvIHRoZQomIzQzOwkJICogZ3Vlc3QgdG8gcmVzcG9uZCB0byB0aGUgUFFBUC1BUUlDIGluc3RydWN0aW9uLgomIzQzOwkJICovCiAJCXZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTsKIAkJcS0mZ3Q7c2F2ZWRfaW92YSA9IG5pYjsKIAkJcS0mZ3Q7c2F2ZWRfaXNjID0gaXNjOwogCQlicmVhazsKLQljYXNlIEFQX1JFU1BPTlNFX09USEVSV0lTRV9DSEFOR0VEOgotCQkvKiBXZSBjb3VsZCBub3QgbW9kaWZ5IElSUSBzZXR0aW5nczogY2xlYXIgbmV3IGNvbmZpZ3VyYXRpb24gKi8KJiM0MzsJZGVmYXVsdDoKJiM0MzsJCS8qCiYjNDM7CQkgKiBIYXJkd2FyZSBkaWQgbm90IGFjY2VwdCB0aGUgbmV3IE5JQiAoQ0M9MyBvciBlcnJvcikuIFRoZQomIzQzOwkJICogcHJldmlvdXNseSBzYXZlZCBOSUIgYW5kIGd1ZXN0IElTQyByZW1haW4gYWN0aXZlIGFuZCBtdXN0CiYjNDM7CQkgKiBub3QgYmUgZnJlZWQuIFJlbGVhc2UgdGhlIG5ld2x5IHBpbm5lZCBwYWdlIGFuZCByZWdpc3RlcmVkCiYjNDM7CQkgKiBJU0MgdGhhdCB3ZXJlIHByZXBhcmVkIGZvciB0aGlzIChyZWplY3RlZCkgcmVxdWVzdC4KJiM0MzsJCSAqLwogCQlyZXQgPSBrdm1fczM5MF9naXNjX3VucmVnaXN0ZXIoa3ZtLCBpc2MpOwogCQlpZiAocmV0KQogCQkJVkZJT19BUF9EQkZfV0FSTigmIzM0OyVzOiBrdm1fczM5MF9naXNjX3VucmVnaXN0ZXI6IHJjPSVkIGlzYz0lZCwgYXBxbj0lIzA0eFxuJiMzNDssCiAJCQkJCSBfX2Z1bmNfXywgcmV0LCBpc2MsIHEtJmd0O2FwcW4pOwogCQl2ZmlvX3VucGluX3BhZ2VzKCZhbXA7cS0mZ3Q7bWF0cml4X21kZXYtJmd0O3ZkZXYsIG5pYiwgMSk7CiAJCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByX3dhcm4oJiMzNDslczogYXBxbiAlMDR4OiByZXNwb25zZTogJTAyeFxuJiMzNDssIF9fZnVuY19fLCBxLSZndDthcHFuLAotCQkJc3RhdHVzLnJlc3BvbnNlX2NvZGUpOwotCQl2ZmlvX2FwX2lycV9kaXNhYmxlKHEpOwotCQlicmVhazsKIAl9CiAKIAlpZiAoc3RhdHVzLnJlc3BvbnNlX2NvZGUgIT0gQVBfUkVTUE9OU0VfTk9STUFMKSB7CkBAIC02MzUsNyAmIzQzOzcyNSw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3BxYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCX0KIAogCXN0YXR1cyA9IHZjcHUtJmd0O3J1bi0mZ3Q7cy5yZWdzLmdwcnNbMV07Ci0KIAkvKiBJZiBJUiBiaXQoMTYpIGlzIHNldCB3ZSBlbmFibGUgdGhlIGludGVycnVwdCAqLwogCWlmICgoc3RhdHVzICZndDsmZ3Q7ICg2MyAtIDE2KSkgJmFtcDsgMHgwMSkKIAkJcXN0YXR1cyA9IHZmaW9fYXBfaXJxX2VuYWJsZShxLCBzdGF0dXMgJmFtcDsgMHgwNywgdmNwdSk7CkBAIC02OTIsMTQgJiM0Mzs3ODEsMTQgQEAgc3RhdGljIGJvb2wgX3F1ZXVlX3Bhc3NhYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKQogCWlmICghcSkKIAkJcmV0dXJuIGZhbHNlOwogCi0Jc3dpdGNoIChxLSZndDtyZXNldF9zdGF0dXMucmVzcG9uc2VfY29kZSkgewotCWNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOgotCWNhc2UgQVBfUkVTUE9OU0VfREVDT05GSUdVUkVEOgotCWNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOgotCQlyZXR1cm4gdHJ1ZTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gZmFsc2U7Ci0JfQomIzQzOwkvKgomIzQzOwkgKiBBIHF1ZXVlIGlzIG9ubHkgcGFzc2FibGUgaWYgemVyb2l6YXRpb24gd2FzIGNvbmZpcm1lZCBieQomIzQzOwkgKiBhcHFfcmVzZXRfY2hlY2soKSB2aWEgVEFQUSBzdGF0dXMgYml0IHZlcmlmaWNhdGlvbi4gVGhpcyBpcwomIzQzOwkgKiBpbmRpY2F0ZWQgYnkgcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMICgwKS4KJiM0MzsJICogVGhpcyBpcyB0byBwcm90ZWN0IGFnYWluc3QgbGVha2luZyB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIHF1ZXVlCiYjNDM7CSAqIHRvIHRoZSBndWVzdC4KJiM0MzsJICovCiYjNDM7CXJldHVybiBxLSZndDtyZXNldF9zdGF0dXMucmVzcG9uc2VfY29kZSA9PSBBUF9SRVNQT05TRV9OT1JNQUw7CiB9CiAKIC8qCkBAIC0xNDEwLDcgJiM0MzsxNDk5LDcgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfZG9tYWluKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsCiB7CiAJREVDTEFSRV9CSVRNQVAoYXBxaXMsIEFQX0RPTUFJTlMpOwogCi0JYml0bWFwX3plcm8oYXBxaXMsIEFQX0RFVklDRVMpOwomIzQzOwliaXRtYXBfemVybyhhcHFpcywgQVBfRE9NQUlOUyk7CiAJc2V0X2JpdF9pbnYoYXBxaSwgYXBxaXMpOwogCXZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2RvbWFpbnMobWF0cml4X21kZXYsIGFwcWlzKTsKIH0KQEAgLTE5MTksMTIgJiM0MzsyMDA4LDQ3IEBAIHN0YXRpYyBpbnQgYXBxX3N0YXR1c19jaGVjayhpbnQgYXBxbiwgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyAqc3RhdHVzKQogewogCXN3aXRjaCAoc3RhdHVzLSZndDtyZXNwb25zZV9jb2RlKSB7CiAJY2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6CiYjNDM7CQkvKgomIzQzOwkJICogVGhpcyByZXNwb25zZSBjb2RlIG9ubHkgaW5kaWNhdGVzIHRoYXQgdGhlIFBRQVAoWkFQUSkgaGFzCiYjNDM7CQkgKiBiZWVuIGluaXRpYXRlZC4gVGhlIGZvbGxvd2luZyBiaXQgc2V0dGluZ3MgaW4gdGhlIHN0YXR1cwomIzQzOwkJICogcmV0dXJuZWQgZnJvbSBUQVBRIG11c3QgYmUgdmVyaWZpZWQgdG8gY29uZmlybSB0aGF0IHRoZQomIzQzOwkJICogYXN5bmNocm9ub3VzIHBvcnRpb24gb2YgdGhlIHF1ZXVlIHplcm9pemF0aW9uIGhhcyBjb21wbGV0ZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChzdGF0dXMtJmd0O3F1ZXVlX2VtcHR5ICZhbXA7JmFtcDsgIXN0YXR1cy0mZ3Q7cmVwbGllc193YWl0aW5nICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhc3RhdHVzLSZndDtpcnFfZW5hYmxlZCAmYW1wOyZhbXA7ICFzdGF0dXMtJmd0O2FzeW5jKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJLyogQXN5bmMgemVyb2l6YXRpb24gc3RpbGwgaW4gcHJvZ3Jlc3M7IGtlZXAgd2FpdGluZyAqLwomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKIAljYXNlIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRDoKIAljYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDoKLQkJcmV0dXJuIDA7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIHF1ZXVlIGlzIG5vbi1vcGVyYXRpb25hbDogaW50ZXJydXB0cyBhcmUgbm90IHBvc3NpYmxlIHNvCiYjNDM7CQkgKiBBUUlDIHJlc291cmNlcyBjYW4gYmUgc2FmZWx5IGZyZWVkLiBIb3dldmVyLCB6ZXJvaXphdGlvbgomIzQzOwkJICogY2Fubm90IGJlIGNvbmZpcm1lZCBiZWNhdXNlIGFsbCBzdGF0dXMgYml0cyBhcmUgemVyb2VkIHdoZW4KJiM0MzsJCSAqIHRoZXNlIHJlc3BvbnNlIGNvZGVzIGFyZSByZXR1cm5lZCDigJQgdGhlcmUgaXMgbm8gd2F5IHRvCiYjNDM7CQkgKiBkaXN0aW5ndWlzaCBhIHplcm9pemVkIHF1ZXVlIGZyb20gb25lIHRoYXQgaGFzIG5vdCBiZWVuCiYjNDM7CQkgKiB6ZXJvaXplZC4gUmV0dXJuIC1FTk9ERVYgdG8gc2lnbmFsIHRoYXQgQVFJQyByZXNvdXJjZXMgc2hvdWxkCiYjNDM7CQkgKiBiZSBmcmVlZCBidXQgdGhhdCB6ZXJvaXphdGlvbiBoYXMgbm90IGJlZW4gY29uZmlybWVkLgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKIAljYXNlIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTOgotCWNhc2UgQVBfUkVTUE9OU0VfQlVTWToKJiM0MzsJCS8qCiYjNDM7CQkgKiBBIHJlc2V0IGlzIGluIHByb2dyZXNzLiBJdCBtYXkgYmUgdGhlIHJlc2V0IHdlIGlzc3VlZCBvciBvbmUKJiM0MzsJCSAqIGlzc3VlZCBwcmlvciB0byBvdXJzOyBlaXRoZXIgd2F5LCBvbmNlIGl0IGNvbXBsZXRlcyB0aGUgcXVldWUKJiM0MzsJCSAqIHdpbGwgYmUgemVyb2l6ZWQsIHNvIGtlZXAgd2FpdGluZy4KJiM0MzsJCSAqLwogCQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwljYXNlIEFQX1JFU1BPTlNFX0JVU1k6CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIHF1ZXVlIGlzIGJ1c3kgd2l0aCBzb21ldGhpbmcgdW5yZWxhdGVkIHRvIGEgcmVzZXQgYW5kIG91cgomIzQzOwkJICogWkFQUSB3YXMgcmVqZWN0ZWQgb3V0cmlnaHQuIFJlLWlzc3VlIHRoZSBaQVBRLgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsKIAljYXNlIEFQX1JFU1BPTlNFX0FTU09DX1NFQ1JFVF9OT1RfVU5JUVVFOgogCWNhc2UgQVBfUkVTUE9OU0VfQVNTT0NfRkFJTEVEOgogCQkvKgpAQCAtMTkzNSw2ICYjNDM7MjA1OSw3IEBAIHN0YXRpYyBpbnQgYXBxX3N0YXR1c19jaGVjayhpbnQgYXBxbiwgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyAqc3RhdHVzKQogCQkgKiBhIHZhbHVlIGluZGljYXRpbmcgYSByZXNldCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgYWdhaW4uCiAJCSAqLwogCQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsKIAlkZWZhdWx0OgogCQlXQVJOKHRydWUsCiAJCSAgICAgJiMzNDtmYWlsZWQgdG8gdmVyaWZ5IHJlc2V0IG9mIHF1ZXVlICUwMnguJTA0eDogVEFQUSByYz0ldVxuJiMzNDssCkBAIC0xOTQ0LDYgJiM0MzsyMDY5LDMzIEBAIHN0YXRpYyBpbnQgYXBxX3N0YXR1c19jaGVjayhpbnQgYXBxbiwgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyAqc3RhdHVzKQogCX0KIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJlcG9ydF9hcWljX3Jlc291cmNlX2xlYWsoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpCiYjNDM7ewomIzQzOwlpZiAocS0mZ3Q7c2F2ZWRfaXNjICE9IFZGSU9fQVBfSVNDX0lOVkFMSUQgfHwgcS0mZ3Q7c2F2ZWRfaW92YSkgewomIzQzOwkJaWYgKHEtJmd0O21hdHJpeF9tZGV2KSB7CiYjNDM7CQkJZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS0mZ3Q7bWF0cml4X21kZXYtJmd0O21kZXYpLAomIzQzOwkJCQkJICAgICAmIzM0O1Jlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHg6IGxlYWtpbmcgQVFJQyByZXNvdXJjZXMgKE5JQiBwYWdlICZhbXA7IEdJU0MpIHRvIHByZXZlbnQgaG9zdCBjcmFzaFxuJiMzNDssCiYjNDM7CQkJCQkgICAgIEFQX1FJRF9DQVJEKHEtJmd0O2FwcW4pLAomIzQzOwkJCQkJICAgICBBUF9RSURfUVVFVUUocS0mZ3Q7YXBxbikpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7UmVzZXQgdGltZWQgb3V0IGZvciBBUFFOICUwMnguJTA0eDogbGVha2luZyBBUUlDIHJlc291cmNlcyAoTklCIHBhZ2UgJmFtcDsgR0lTQykgdG8gcHJldmVudCBob3N0IGNyYXNoXG4mIzM0OywKJiM0MzsJCQkJCSAgICBBUF9RSURfQ0FSRChxLSZndDthcHFuKSwKJiM0MzsJCQkJCSAgICBBUF9RSURfUVVFVUUocS0mZ3Q7YXBxbikpOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKHEtJmd0O21hdHJpeF9tZGV2KSB7CiYjNDM7CQkJZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS0mZ3Q7bWF0cml4X21kZXYtJmd0O21kZXYpLAomIzQzOwkJCQkJICAgICAmIzM0O1Jlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHhcbiYjMzQ7LAomIzQzOwkJCQkJICAgICBBUF9RSURfQ0FSRChxLSZndDthcHFuKSwKJiM0MzsJCQkJCSAgICAgQVBfUUlEX1FVRVVFKHEtJmd0O2FwcW4pKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcHJfd2Fybl9yYXRlbGltaXRlZCgmIzM0O1Jlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHhcbiYjMzQ7LAomIzQzOwkJCQkJICAgIEFQX1FJRF9DQVJEKHEtJmd0O2FwcW4pLAomIzQzOwkJCQkJICAgIEFQX1FJRF9RVUVVRShxLSZndDthcHFuKSk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAjZGVmaW5lIFdBSVRfTVNHICYjMzQ7V2FpdGVkICVkbXMgZm9yIHJlc2V0IG9mIHF1ZXVlICUwMnguJTA0eCAoJXUsICV1LCAldSkmIzM0OwogCiBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKQpAQCAtMTk2MSw2ICYjNDM7MjExMyw1NiBAQCBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKQogCQlyZXQgPSBhcHFfc3RhdHVzX2NoZWNrKHEtJmd0O2FwcW4sICZhbXA7c3RhdHVzKTsKIAkJaWYgKHJldCA9PSAtRUlPKQogCQkJcmV0dXJuOwomIzQzOwkJaWYgKHEtJmd0O3Jlc2V0X21heF93YWl0ICZhbXA7JmFtcDsgZWxhcHNlZCAmZ3Q7PSBxLSZndDtyZXNldF9tYXhfd2FpdCkgewomIzQzOwkJCS8qCiYjNDM7CQkJICogWmVyb2l6YXRpb24gY29uZmlybWVkIChyZXQgPT0gMCk6IHRoZSBUQVBRIHN0YXR1cyBiaXRzCiYjNDM7CQkJICogaW5kaWNhdGUgdGhlIGFzeW5jIHBvcnRpb24gb2YgdGhlIFpBUFEgY29tcGxldGVkCiYjNDM7CQkJICogc3VjY2Vzc2Z1bGx5LiBGcmVlIEFRSUMgcmVzb3VyY2VzIGFuZCByZXR1cm4uCiYjNDM7CQkJICoKJiM0MzsJCQkgKiBRdWV1ZSBub24tb3BlcmF0aW9uYWwgKHJldCA9PSAtRU5PREVWKTogdGhlIHF1ZXVlIGlzCiYjNDM7CQkJICogZGVjb25maWd1cmVkIG9yIGNoZWNrc3RvcHBlZDsgaW50ZXJydXB0cyBhcmUgbm90CiYjNDM7CQkJICogcG9zc2libGUgc28gQVFJQyByZXNvdXJjZXMgY2FuIGJlIHNhZmVseSBmcmVlZC4KJiM0MzsJCQkgKiBaZXJvaXphdGlvbiBjYW5ub3QgYmUgY29uZmlybWVkIGluIHRoaXMgc3RhdGUsIGJ1dCB0aGUKJiM0MzsJCQkgKiBxdWV1ZSBjYW5ub3QgZ2VuZXJhdGUgaW50ZXJydXB0cywgc28gdGhlIE5JQiBwYWdlIGlzCiYjNDM7CQkJICogbm8gbG9uZ2VyIGEgRE1BIHRhcmdldCBhbmQgaXQgaXMgc2FmZSB0byBmcmVlIGl0LgomIzQzOwkJCSAqLwomIzQzOwkJCWlmICghcmV0IHx8IHJldCA9PSAtRU5PREVWKQomIzQzOwkJCQlnb3RvIGRvbmU7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBUaW1lZCBvdXQgd2l0aG91dCBiZWluZyBhYmxlIHRvIHZlcmlmeSB6YXBxIGNvbXBsZXRlZC4KJiM0MzsJCQkgKgomIzQzOwkJCSAqIFRoZSBBUUlDIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBxdWV1ZSAtIHRoZSBwaW5uZWQKJiM0MzsJCQkgKiBwYWdlIGNvbnRhaW5pbmcgdGhlIE5JQiBhbmQgdGhlIHJlZ2lzdGVyZWQgZ3Vlc3QgSVNDIC0KJiM0MzsJCQkgKiBjYW5ub3QgYmUgZnJlZWQgaGVyZS4gVGhlIE5JQiBpcyB0aGUgYWN0aXZlIERNQSB0YXJnZXQKJiM0MzsJCQkgKiBmb3IgQVAgaW50ZXJydXB0IGRlbGl2ZXJ5IHVudGlsIHRoZSByZXNldCBjb21wbGV0ZXM7CiYjNDM7CQkJICogZnJlZWluZyB0aGUgcGlubmVkIHBhZ2Ugd2hpbGUgdGhlIGhhcmR3YXJlIG1heSBzdGlsbAomIzQzOwkJCSAqIHdyaXRlIHRvIGl0IHdvdWxkIHJlc3VsdCBpbiBhIHdpbGQgRE1BIHdyaXRlIHRoYXQgY291bGQKJiM0MzsJCQkgKiBjb3JydXB0IGhvc3QgbWVtb3J5LgomIzQzOwkJCSAqCiYjNDM7CQkJICogSWYgdGhlIHJlc2V0IGV2ZW50dWFsbHkgY29tcGxldGVzLCBpbnRlcnJ1cHRzIHdpbGwgYmUKJiM0MzsJCQkgKiB0ZXJtaW5hdGVkIGFuZCB0aGUgcGlubmVkIE5JQiBwYWdlIGFuZCBJU0MgcmVnaXN0cmF0aW9uCiYjNDM7CQkJICogd2lsbCBiZSBsZWFrZWQuIFRoaXMgaXMgcHJlZmVyYWJsZSB0byBlaXRoZXIgYSB3aWxkIERNQQomIzQzOwkJCSAqIHdyaXRlIG9yIHdhaXRpbmcgaW5kZWZpbml0ZWx5OiBmbHVzaF93b3JrKCkgY2FsbGVycyBob2xkCiYjNDM7CQkJICogdGhlIG1hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2sgbXV0ZXggd2hpY2ggc2VyaWFsaXplcyBhY2Nlc3MKJiM0MzsJCQkgKiB0byBhbGwgbWRldiBvYmplY3RzIHN5c3RlbS13aWRlLCBzbyBibG9ja2luZyBoZXJlIHdvdWxkCiYjNDM7CQkJICogaGFuZyBhbGwgZ3Vlc3RzIHRvIHdoaWNoIHRob3NlIG1kZXZzIGFyZSBhdHRhY2hlZC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlyZXBvcnRfYXFpY19yZXNvdXJjZV9sZWFrKHEpOwomIzQzOwkJCS8qCiYjNDM7CQkJICogUmVwb3J0IHRoZSBhY3R1YWwgbm9uLXplcm8gaGFyZHdhcmUgcmVzcG9uc2UgY29kZSwgb3IKJiM0MzsJCQkgKiBzeW50aGVzaXplIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTIGlmIFRBUFEKJiM0MzsJCQkgKiBjb21wbGV0ZWQgbm9ybWFsbHkgYnV0IHRoZSBzdGF0dXMgYml0cyBmYWlsZWQgdG8KJiM0MzsJCQkgKiB0cmFuc2l0aW9uIHRvIHRoZWlyIHBvc3QtcmVzZXQgc3RhdGVzLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmIChzdGF0dXMucmVzcG9uc2VfY29kZSA9PSBBUF9SRVNQT05TRV9OT1JNQUwpCiYjNDM7CQkJCXEtJmd0O3Jlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1M7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQlxLSZndDtyZXNldF9zdGF0dXMucmVzcG9uc2VfY29kZSA9IHN0YXR1cy5yZXNwb25zZV9jb2RlOwomIzQzOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsJCWlmICghcmV0IHx8IHJldCA9PSAtRU5PREVWKQomIzQzOwkJCWdvdG8gZG9uZTsKIAkJaWYgKHJldCA9PSAtRUJVU1kpIHsKIAkJCXByX25vdGljZV9yYXRlbGltaXRlZChXQUlUX01TRywgZWxhcHNlZCwKIAkJCQkJICAgICAgQVBfUUlEX0NBUkQocS0mZ3Q7YXBxbiksCkBAIC0xOTc1LDEzICYjNDM7MjE3NywxMyBAQCBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKQogCQkJICAgIHJldCA9PSAtRUFHQUlOKSB7CiAJCQkJc3RhdHVzID0gYXBfemFwcShxLSZndDthcHFuLCAwKTsKIAkJCQltZW1jcHkoJmFtcDtxLSZndDtyZXNldF9zdGF0dXMsICZhbXA7c3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7Ci0JCQkJY29udGludWU7CiAJCQl9Ci0JCQlpZiAocS0mZ3Q7c2F2ZWRfaXNjICE9IFZGSU9fQVBfSVNDX0lOVkFMSUQpCi0JCQkJdmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpOwotCQkJYnJlYWs7CiAJCX0KIAl9CiYjNDM7CiYjNDM7ZG9uZToKJiM0MzsJaWYgKHEtJmd0O3NhdmVkX2lzYyAhPSBWRklPX0FQX0lTQ19JTlZBTElEKQomIzQzOwkJdmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpOwogfQogCiBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpCkBAIC0yMDYxLDEyICYjNDM7MjI2MywyOCBAQCBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpCiAJcmV0dXJuIHZmaW9fYXBfbWRldl9zZXRfa3ZtKG1hdHJpeF9tZGV2LCB2ZGV2LSZndDtrdm0pOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3JlbGVhc2VfZXZlbnRmZHMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldikKJiM0Mzt7CiYjNDM7CWlmIChtYXRyaXhfbWRldi0mZ3Q7cmVxX3RyaWdnZXIpIHsKJiM0MzsJCWV2ZW50ZmRfY3R4X3B1dChtYXRyaXhfbWRldi0mZ3Q7cmVxX3RyaWdnZXIpOwomIzQzOwkJbWF0cml4X21kZXYtJmd0O3JlcV90cmlnZ2VyID0gTlVMTDsKJiM0MzsJfQomIzQzOwlpZiAobWF0cml4X21kZXYtJmd0O2NmZ19jaGdfdHJpZ2dlcikgewomIzQzOwkJZXZlbnRmZF9jdHhfcHV0KG1hdHJpeF9tZGV2LSZndDtjZmdfY2hnX3RyaWdnZXIpOwomIzQzOwkJbWF0cml4X21kZXYtJmd0O2NmZ19jaGdfdHJpZ2dlciA9IE5VTEw7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2xvc2VfZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldikKIHsKIAlzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID0KIAkJY29udGFpbmVyX29mKHZkZXYsIHN0cnVjdCBhcF9tYXRyaXhfbWRldiwgdmRldik7CiAKIAl2ZmlvX2FwX21kZXZfdW5zZXRfa3ZtKG1hdHJpeF9tZGV2KTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwomIzQzOwl2ZmlvX2FwX21kZXZfcmVsZWFzZV9ldmVudGZkcyhtYXRyaXhfbWRldik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfcmVxdWVzdChzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYsIHVuc2lnbmVkIGludCBjb3VudCkKQEAgLTI0NTcsOCAmIzQzOzI2NzUsMTAgQEAgaW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldikKIAogCXEtJmd0O2FwcW4gPSBhcHFuOwogCXEtJmd0O3NhdmVkX2lzYyA9IFZGSU9fQVBfSVNDX0lOVkFMSUQ7Ci0JbWVtc2V0KCZhbXA7cS0mZ3Q7cmVzZXRfc3RhdHVzLCAwLCBzaXplb2YocS0mZ3Q7cmVzZXRfc3RhdHVzKSk7CiYjNDM7CXEtJmd0O3Jlc2V0X21heF93YWl0ID0gQVBfUkVTRVRfTUFYX1dBSVQ7CiAJSU5JVF9XT1JLKCZhbXA7cS0mZ3Q7cmVzZXRfd29yaywgYXBxX3Jlc2V0X2NoZWNrKTsKJiM0MzsJdmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlKHEpOwomIzQzOwlmbHVzaF93b3JrKCZhbXA7cS0mZ3Q7cmVzZXRfd29yayk7CiAKIAlpZiAobWF0cml4X21kZXYpIHsKIAkJdmZpb19hcF9tZGV2X2xpbmtfcXVldWUobWF0cml4X21kZXYsIHEpOwpAQCAtMjU0MSw4ICYjNDM7Mjc2MSwxOSBAQCB2b2lkIHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpCiAJCXZmaW9fYXBfdW5saW5rX3F1ZXVlX2ZyX21kZXYocSk7CiAKIAlkZXZfc2V0X2RydmRhdGEoJmFtcDthcGRldi0mZ3Q7ZGV2aWNlLCBOVUxMKTsKLQlrZnJlZShxKTsKIAlyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3JfbWRldihtYXRyaXhfbWRldik7CiYjNDM7CiYjNDM7CWlmIChxLSZndDtyZXNldF9zdGF0dXMucmVzcG9uc2VfY29kZSAhPSBBUF9SRVNQT05TRV9OT1JNQUwpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBMb29wIHVudGlsIHplcm9pemF0aW9uIG9mIHF1ZXVlIGlzIHZlcmlmaWVkIHNvIHdlIGRvbiYjMzk7dCBsZWFrCiYjNDM7CQkgKiB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIHF1ZXVlIHRvIHRoZSBjYWxsZXIuCiYjNDM7CQkgKi8KJiM0MzsJCXEtJmd0O3Jlc2V0X21heF93YWl0ID0gMDsKJiM0MzsJCXZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZShxKTsKJiM0MzsJCWZsdXNoX3dvcmsoJmFtcDtxLSZndDtyZXNldF93b3JrKTsKJiM0MzsJfQomIzQzOwomIzQzOwlrZnJlZShxKTsKIH0KIAogLyoqCkBAIC0yNjk3LDExICYjNDM7MjkyOCwxMSBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfb25fY2ZnX3JlbW92ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jb25maWdfaW5mbywKIAlkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChhcXJlbSwKIAkJCQkgICAodW5zaWduZWQgbG9uZyAqKXByZXZfY29uZmlnX2luZm8tJmd0O2FxbSwKIAkJCQkgICAodW5zaWduZWQgbG9uZyAqKWN1cl9jb25maWdfaW5mby0mZ3Q7YXFtLAotCQkJCSAgIEFQX0RFVklDRVMpOwomIzQzOwkJCQkgICBBUF9ET01BSU5TKTsKIAlkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChjZHJlbSwKIAkJCQkgICAodW5zaWduZWQgbG9uZyAqKXByZXZfY29uZmlnX2luZm8tJmd0O2FkbSwKIAkJCQkgICAodW5zaWduZWQgbG9uZyAqKWN1cl9jb25maWdfaW5mby0mZ3Q7YWRtLAotCQkJCSAgIEFQX0RFVklDRVMpOwomIzQzOwkJCQkgICBBUF9ET01BSU5TKTsKIAogCWlmIChkb19yZW1vdmUpCiAJCXZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlKGFwcmVtLCBhcXJlbSwgY2RyZW0pOwpAQCAtMjgxMiw3ICYjNDM7MzA0Myw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jZmdfYWRkKHVuc2lnbmVkIGxvbmcgKmFwbV9hZGQsIHVuc2lnbmVkIGxvbmcgKmFxbV9hZGQsCiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FxbV9hZGQsCiAJCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFxbSwgYXFtX2FkZCwgQVBfRE9NQUlOUyk7CiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FkbV9hZGQsCi0JCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFkbSwgYWRtX2FkZCwgQVBfREVWSUNFUyk7CiYjNDM7CQkJICAgbWF0cml4X21kZXYtJmd0O21hdHJpeC5hZG0sIGFkbV9hZGQsIEFQX0RPTUFJTlMpOwogCiAJCW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmggYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oCmluZGV4IDliZmY2NjZiMGIzNWQuLjkxNGVhNWQ0MWQzMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaApAQCAtMTM5LDYgJiM0MzsxMzksOCBAQCBzdHJ1Y3QgYXBfbWF0cml4X21kZXYgewogICoJCSB0aGF0IG5lZWQgdG8gYmUgcmVzZXQKICAqIEByZXNldF9zdGF0dXM6IHRoZSBzdGF0dXMgZnJvbSB0aGUgbGFzdCByZXNldCBvZiB0aGUgcXVldWUKICAqIEByZXNldF93b3JrOiB3b3JrIHRvIHdhaXQgZm9yIHF1ZXVlIHJlc2V0IHRvIGNvbXBsZXRlCiYjNDM7ICogQHJlc2V0X21heF93YWl0OiB0aGUgbWF4IGFtb3VudCBvZiB0aW1lIHRvIHdhaXQgZm9yIGEgcmVzZXQgdG8gY29tcGxldGU7CiYjNDM7ICoJCSAgICBzcGVjaWZ5aW5nIDAgbWVhbnMgd2FpdCBhcyBsb25nIGFzIGl0IHRha2VzLgogICovCiBzdHJ1Y3QgdmZpb19hcF9xdWV1ZSB7CiAJc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjsKQEAgLTE1MCw2ICYjNDM7MTUyLDcgQEAgc3RydWN0IHZmaW9fYXBfcXVldWUgewogCXN0cnVjdCBsaXN0X2hlYWQgcmVzZXRfcW5vZGU7CiAJc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyByZXNldF9zdGF0dXM7CiAJc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3dvcms7CiYjNDM7CXVuc2lnbmVkIGludCByZXNldF9tYXhfd2FpdDsKIH07CiAKIGludCB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIodm9pZCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDQ2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgQU1ENjQqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgbW9kaWZpY2F0aW9ucyBhbmQgdGhlaXIgaW1wYWN0LCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LiBJIHNlZSB0aGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AgYW5kIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oYC4gU2luY2UgdGhlc2UgYXJlIGluIHRoZSBzMzkwIGRpcmVjdG9yeSwgSSYjMzk7bGwgbmVlZCB0byBpbW1lZGlhdGVseSB0aGluayBhYm91dCB0aGUgY3Jvc3MtYXJjaGl0ZWN0dXJlIGltcGxpY2F0aW9ucyBhbmQgd2hldGhlciB0aGUgY29kZSB1dGlsaXplcyBhbnkgb2YgdGhlIGZlYXR1cmVzIHRoYXQgbWFrZSBzMzkwIGRpc3RpbmN0IGZyb20gYW1kNjQuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHZlcmlmeSBLY29uZmlnIGFuZCBhcmNoaXRlY3R1cmUgZGVwZW5kZW5jaWVzIGZvciB0aGUgc291cmNlIGZpbGUuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgaG93IHRoaXMgcGF0Y2ggaW50ZWdyYXRlcyBhbmQgYW55IHBvdGVudGlhbCBhcmNoaXRlY3R1cmFsIGNvbnN0cmFpbnRzLiBUaGlzIGZpbGUgaXMgcHJvYmFibHkgaW50ZXJhY3Rpbmcgd2l0aCBWRklPIGFuZCBBUCwgdGhlcmVmb3JlIGZ1cnRoZXIgcmVzZWFyY2ggaW50byB0aG9zZSBzcGVjaWZpYyBzdWJzeXN0ZW1zIG1heSBiZSBpbXBvcnRhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJT19BUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNzAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyB5b3VyIHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqTmF2aWdhdGluZyB0aGUgUzM5MCBDcnlwdG8gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgbXkgYmVhcmluZ3MgYW5kIGxvY2F0ZSB0aGUgS2NvbmZpZyBmaWxlIHdpdGhpbiB0aGUgczM5MCBjcnlwdG8gZHJpdmVyIHN0cnVjdHVyZS4gR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBuYXR1cmUsIEkmIzM5O2xsIHN0YXJ0IGJ5IGRyaWxsaW5nIGRvd24gaW50byB0aGUgYGRyaXZlcnMvczM5MGAgZGlyZWN0b3J5LiBNeSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSBjcnlwdG8tcmVsYXRlZCBjb25maWd1cmF0aW9uIHdpbGwgYmUgb3JnYW5pemVkIGJlbmVhdGggdGhhdC4gSSYjMzk7bSByZWFzb25hYmx5IGNvbmZpZGVudCwgYmFzZWQgb24gcHJldmlvdXMgZXhwZXJpZW5jZSwgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYmUgbWFuYWdlZCB2aWEgS2NvbmZpZy4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIGZvciB0aGUga2VybmVsLCBhbmQgdGhlIGNyeXB0byBzdWJzeXN0ZW0gaXMgZmFpcmx5IHdlbGwtZXN0YWJsaXNoZWQuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IHdlIGZpbmQgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG9gLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBiZSBhYmxlIHRvIHRyYWNlIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIGNyeXB0byBmZWF0dXJlcyBhcmUgYmVpbmcgY29uZmlndXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtWRklPX0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vTWFrZWZpbGU9Mzc9dmZpb19hcC1vYmpzIDo9IHZmaW9fYXBfZHJ2Lm8gdmZpb19hcF9vcHMub1xuZHJpdmVycy9zMzkwL2NyeXB0by9NYWtlZmlsZTozODpvYmotJChDT05GSUdfVkZJT19BUCkgJiM0Mzs9IHZmaW9fYXAub1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTYtICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaDo3OiNpZm5kZWYgVkZJT19BUF9ERUJVR19IXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaDo4OiNkZWZpbmUgVkZJT19BUF9ERUJVR19IXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC05LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTE4LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmg6MTk6I2RlZmluZSBWRklPX0FQX0RCRiguLi4pXHRcdFx0XHRcdFxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC0yMC1cdGRlYnVnX3NwcmludGZfZXZlbnQodmZpb19hcF9kYmZfaW5mbywgIyNfX1ZBX0FSR1NfXylcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oOjIxOiNkZWZpbmUgVkZJT19BUF9EQkZfRVJSKC4uLilcdFx0XHRcdFx0XFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTIyLVx0ZGVidWdfc3ByaW50Zl9ldmVudCh2ZmlvX2FwX2RiZl9pbmZvLCBEQkZfRVJSLCAjI19fVkFfQVJHU19fKVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmg6MjM6I2RlZmluZSBWRklPX0FQX0RCRl9XQVJOKC4uLilcdFx0XHRcdFx0XFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTI0LVx0ZGVidWdfc3ByaW50Zl9ldmVudCh2ZmlvX2FwX2RiZl9pbmZvLCBEQkZfV0FSTiwgIyNfX1ZBX0FSR1NfXylcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oOjI1OiNkZWZpbmUgVkZJT19BUF9EQkZfSU5GTyguLi4pXHRcdFx0XHRcdFxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC0yNi1cdGRlYnVnX3NwcmludGZfZXZlbnQodmZpb19hcF9kYmZfaW5mbywgREJGX0lORk8sICMjX19WQV9BUkdTX18pXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaDoyNzojZGVmaW5lIFZGSU9fQVBfREJGX0RCRyguLi4pXHRcdFx0XHRcdFxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC0yOC1cdGRlYnVnX3NwcmludGZfZXZlbnQodmZpb19hcF9kYmZfaW5mbywgREJGX0RFQlVHLCAjI19fVkFfQVJHU19fKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oPTMwPWV4dGVybiBkZWJ1Z19pbmZvX3QgKnZmaW9fYXBfZGJmX2luZm87XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC0zMS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oOjMyOiNlbmRpZiAvKiBWRklPX0FQX0RFQlVHX0ggKi9cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTgtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTk6I2RlZmluZSBWRklPX0FQX1JPT1RfTkFNRSBcJiMzNDt2ZmlvX2FwXCYjMzQ7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MjA6I2RlZmluZSBWRklPX0FQX0RFVl9OQU1FIFwmIzM0O21hdHJpeFwmIzM0O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTIxLVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz04Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGUodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtOTAtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6OTE6XHRyb290X2RldmljZSA9IHJvb3RfZGV2aWNlX3JlZ2lzdGVyKFZGSU9fQVBfUk9PVF9OQU1FKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy05Mi1cdGlmIChJU19FUlIocm9vdF9kZXZpY2UpKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMTUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTE2Olx0ZGV2X3NldF9uYW1lKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDslc1wmIzM0OywgVkZJT19BUF9ERVZfTkFNRSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTE3LVx0bWF0cml4X2Rldi1cdTAwM2VkZXZpY2UucGFyZW50ID0gcm9vdF9kZXZpY2U7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTE2Nz1zdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTgyLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjE4MzpcdHJldCA9IGFwX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZ2ZmlvX2FwX2RydiwgVEhJU19NT0RVTEUsIFZGSU9fQVBfRFJWX05BTUUpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE4NC1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjY6I2RlZmluZSBWRklPX0FQX01ERVZfVFlQRV9IV1ZJUlQgXCYjMzQ7cGFzc3Rocm91Z2hcJiMzNDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNzojZGVmaW5lIFZGSU9fQVBfTURFVl9OQU1FX0hXVklSVCBcJiMzNDtWRklPIEFQIFBhc3N0aHJvdWdoIERldmljZVwmIzM0O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yOTE9c3RhdGljIHZvaWQgdmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yOTQtXHRcdHJldHVybjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyOTU6XHRpZiAocS1cdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRCBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yOTYtXHQgICAgIVdBUk5fT04oIShxLVx1MDAzZW1hdHJpeF9tZGV2IFx1MDAyNlx1MDAyNiBxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZWt2bSkpKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjk3LVx0XHRrdm1fczM5MF9naXNjX3VucmVnaXN0ZXIocS1cdTAwM2VtYXRyaXhfbWRldi1cdTAwM2Vrdm0sIHEtXHUwMDNlc2F2ZWRfaXNjKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyOTg6XHRcdHEtXHUwMDNlc2F2ZWRfaXNjID0gVkZJT19BUF9JU0NfSU5WQUxJRDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yOTktXHR9XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTUwNT1zdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTUxOS1cdGlmICh2ZmlvX2FwX3ZhbGlkYXRlX25pYih2Y3B1LCBcdTAwMjZuaWIpKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NTIwOlx0XHRWRklPX0FQX0RCRl9XQVJOKFwmIzM0OyVzOiBpbnZhbGlkIE5JQiBhZGRyZXNzOiBuaWI9JXBhZCwgYXBxbj0lIzA0eFxcblwmIzM0OyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy01MjEtXHRcdFx0XHQgX19mdW5jX18sIFx1MDAyNm5pYiwgcS1cdTAwM2VhcHFuKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNTMzLVx0ZGVmYXVsdDpcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo1MzQ6XHRcdFZGSU9fQVBfREJGX1dBUk4oXCYjMzQ7JXM6IHZmaW9fcGluX3BhZ2VzIGZhaWxlZDogcmM9JWQsXCYjMzQ7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNTM1LVx0XHRcdFx0IFwmIzM0O25pYj0lcGFkLCBhcHFuPSUjMDR4XFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy01NTctXHRpZiAobmlzYyBcdTAwM2MgMCkge1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjU1ODpcdFx0VkZJT19BUF9EQkZfV0FSTihcJiMzNDslczogZ2lzYyByZWdpc3RyYXRpb24gZmFpbGVkOiBuaXNjPSVkLCBpc2M9JWQsIGFwcW49JSMwNHhcXG5cJiMzNDssXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNTU5LVx0XHRcdFx0IF9fZnVuY19fLCBuaXNjLCBpc2MsIHEtXHUwMDNlYXBxbik7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTU5NS1cdFx0aWYgKHJldClcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo1OTY6XHRcdFx0VkZJT19BUF9EQkZfV0FSTihcJiMzNDslczoga3ZtX3MzOTBfZ2lzY191bnJlZ2lzdGVyOiByYz0lZCBpc2M9JWQsIGFwcW49JSMwNHhcXG5cJiMzNDssXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNTk3LVx0XHRcdFx0XHQgX19mdW5jX18sIHJldCwgaXNjLCBxLVx1MDAzZWFwcW4pO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02MDItXHRpZiAoc3RhdHVzLnJlc3BvbnNlX2NvZGUgIT0gQVBfUkVTUE9OU0VfTk9STUFMKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NjAzOlx0XHRWRklPX0FQX0RCRl9XQVJOKFwmIzM0OyVzOiBQUUFQKEFRSUMpIGZhaWxlZCB3aXRoIHN0YXR1cz0lIzAyeDogXCYjMzQ7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNjA0LVx0XHRcdFx0IFwmIzM0O3pvbmU9JSN4LCBpcj0lI3gsIGdpc2M9JSN4LCBmPSUjeCxcJiMzNDtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9Njc4PXN0YXRpYyBpbnQgaGFuZGxlX3BxYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02OTEtXHRpZiAoISh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWVjYSBcdTAwMjYgRUNBX0FJVikpIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo2OTI6XHRcdFZGSU9fQVBfREJGX1dBUk4oXCYjMzQ7JXM6IEFJViBmYWNpbGl0eSBub3QgaW5zdGFsbGVkOiBhcHFuPTB4JTA0eCwgZWNhPTB4JTA0eFxcblwmIzM0OyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02OTMtXHRcdFx0XHQgX19mdW5jX18sIGFwcW4sIHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZWNhKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzAwLVx0aWYgKCF2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2spIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo3MDE6XHRcdFZGSU9fQVBfREJGX1dBUk4oXCYjMzQ7JXM6IFBRQVAoQVFJQykgaG9vayBub3QgcmVnaXN0ZXJlZCB3aXRoIHRoZSB2ZmlvX2FwIGRyaXZlcjogYXBxbj0weCUwNHhcXG5cJiMzNDssXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzAyLVx0XHRcdFx0IF9fZnVuY19fLCBhcHFuKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzEyLVx0XHR2ZmlvX2FwX2xlX2d1aWRfdG9fYmVfdXVpZChcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2VtZGV2LVx1MDAzZXV1aWQsIHV1aWQpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjcxMzpcdFx0VkZJT19BUF9EQkZfV0FSTihcJiMzNDslczogbWRldiAlMDhseC0lMDRseC0lMDRseC0lMDRseC0lMDRseCUwOGx4IG5vdCBpbiB1c2U6IGFwcW49MHglMDR4XFxuXCYjMzQ7LFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTcxNC1cdFx0XHRcdCBfX2Z1bmNfXywgdXVpZFswXSwgIHV1aWRbMV0sIHV1aWRbMl0sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTcyMC1cdGlmICghcSkge1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjcyMTpcdFx0VkZJT19BUF9EQkZfV0FSTihcJiMzNDslczogUXVldWUgJTAyeC4lMDR4IG5vdCBib3VuZCB0byB0aGUgdmZpb19hcCBkcml2ZXJcXG5cJiMzNDssXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzIyLVx0XHRcdFx0IF9fZnVuY19fLCBBUF9RSURfQ0FSRChhcHFuKSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjA3Mj1zdGF0aWMgdm9pZCByZXBvcnRfYXFpY19yZXNvdXJjZV9sZWFrKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNzMte1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIwNzQ6XHRpZiAocS1cdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRCB8fCBxLVx1MDAzZXNhdmVkX2lvdmEpIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMDc1LVx0XHRpZiAocS1cdTAwM2VtYXRyaXhfbWRldikge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMTAxPXN0YXRpYyB2b2lkIGFwcV9yZXNldF9jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnJlc2V0X3dvcmspXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIxODQtZG9uZTpcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMTg1Olx0aWYgKHEtXHUwMDNlc2F2ZWRfaXNjICE9IFZGSU9fQVBfSVNDX0lOVkFMSUQpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjE4Ni1cdFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMzE5PXN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X2dldF9kZXZpY2VfaW5mbyh1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjMzMy1cdGluZm8ubnVtX3JlZ2lvbnMgPSAwO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIzMzQ6XHRpbmZvLm51bV9pcnFzID0gVkZJT19BUF9OVU1fSVJRUztcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzM1LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMzM5PXN0YXRpYyBzc2l6ZV90IHZmaW9fYXBfZ2V0X2lycV9pbmZvKHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzQ4LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIzNDk6XHRpZiAoaW5mby5hcmdzeiBcdTAwM2MgbWluc3ogfHwgaW5mby5pbmRleCBcdTAwM2U9IFZGSU9fQVBfTlVNX0lSUVMpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM1MC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzNTItXHRzd2l0Y2ggKGluZm8uaW5kZXgpIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMzUzOlx0Y2FzZSBWRklPX0FQX1JFUV9JUlFfSU5ERVg6XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM1NC1cdFx0aW5mby5jb3VudCA9IDE7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzNTYtXHRcdGJyZWFrO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIzNTc6XHRjYXNlIFZGSU9fQVBfQ0ZHX0NIR19JUlFfSU5ERVg6XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM1OC1cdFx0aW5mby5jb3VudCA9IDE7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzNjg9c3RhdGljIGludCB2ZmlvX2FwX2lycV9zZXRfaW5pdChzdHJ1Y3QgdmZpb19pcnFfc2V0ICppcnFfc2V0LCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM3OC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMzc5Olx0cmV0ID0gdmZpb19zZXRfaXJxc192YWxpZGF0ZV9hbmRfcHJlcGFyZShpcnFfc2V0LCAxLCBWRklPX0FQX05VTV9JUlFTLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzODAtXHRcdFx0XHRcdFx0IFx1MDAyNmRhdGFfc2l6ZSk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI0NTc9c3RhdGljIGludCB2ZmlvX2FwX3NldF9pcnFzKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0NjktXHRcdHN3aXRjaCAoaXJxX3NldC5pbmRleCkge1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI0NzA6XHRcdGNhc2UgVkZJT19BUF9SRVFfSVJRX0lOREVYOlxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0NzEtXHRcdFx0cmV0dXJuIHZmaW9fYXBfc2V0X3JlcXVlc3RfaXJxKG1hdHJpeF9tZGV2LCBhcmcpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI0NzI6XHRcdGNhc2UgVkZJT19BUF9DRkdfQ0hHX0lSUV9JTkRFWDpcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDczLVx0XHRcdHJldHVybiB2ZmlvX2FwX3NldF9jZmdfY2hhbmdlX2lycShtYXRyaXhfbWRldiwgYXJnKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjYyNz1pbnQgdmZpb19hcF9tZGV2X3JlZ2lzdGVyKHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI2MzQtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjYzNTpcdG1hdHJpeF9kZXYtXHUwMDNlbWRldl90eXBlLnN5c2ZzX25hbWUgPSBWRklPX0FQX01ERVZfVFlQRV9IV1ZJUlQ7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjYzNjpcdG1hdHJpeF9kZXYtXHUwMDNlbWRldl90eXBlLnByZXR0eV9uYW1lID0gVkZJT19BUF9NREVWX05BTUVfSFdWSVJUO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI2MzctXHRtYXRyaXhfZGV2LVx1MDAzZW1kZXZfdHlwZXMgPSBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfdHlwZTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjY1Nj1pbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNjc2LVx0cS1cdTAwM2VhcHFuID0gYXBxbjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNjc3Olx0cS1cdTAwM2VzYXZlZF9pc2MgPSBWRklPX0FQX0lTQ19JTlZBTElEO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI2NzgtXHRxLVx1MDAzZXJlc2V0X21heF93YWl0ID0gQVBfUkVTRVRfTUFYX1dBSVQ7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xMS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6MTI6I2lmbmRlZiBfVkZJT19BUF9QUklWQVRFX0hfXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjEzOiNkZWZpbmUgX1ZGSU9fQVBfUFJJVkFURV9IX1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNC1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTI1LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoyNjojZGVmaW5lIFZGSU9fQVBfTU9EVUxFX05BTUUgXCYjMzQ7dmZpb19hcFwmIzM0O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoyNzojZGVmaW5lIFZGSU9fQVBfRFJWX05BTUUgXCYjMzQ7dmZpb19hcFwmIzM0O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0yOC1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTE0NT1zdHJ1Y3QgdmZpb19hcF9xdWV1ZSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNDgtXHRpbnRcdGFwcW47XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE0OTojZGVmaW5lIFZGSU9fQVBfSVNDX0lOVkFMSUQgMHhmZlxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNTAtXHR1bnNpZ25lZCBjaGFyIHNhdmVkX2lzYztcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTE2OD12b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE3MC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6MTcxOiNlbmRpZiAvKiBfVkZJT19BUF9QUklWQVRFX0hfICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2NjQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBwaW5wb2ludCB3aGVyZSB0aGUgZGVwZW5kZW5jeSBvZiBgVkZJT19BUGAgbGllcyBpbiByZWxhdGlvbiB0byB0aGUgUzM5MCBhcmNoaXRlY3R1cmUuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgd291bGQgYmUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgcmVsYXRlZCB0byB0aGUgUzM5MCBhcmNoaXRlY3R1cmUsIGFuZCB0aGUgY3J5cHRvIHNlY3Rpb24gZmVlbHMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgZXhhbWluZSBgZHJpdmVycy9zMzkwL0tjb25maWdgIGFuZCBgZHJpdmVycy9zMzkwL2NyeXB0by9LY29uZmlnYC4gVGhpcyBzaG91bGQgcmV2ZWFsIHdoZXRoZXIgYFZGSU9fQVBgIGlzIGRpcmVjdGx5IGNvbnRpbmdlbnQgb24gdGhlIFMzOTAgcGxhdGZvcm0gb3Igc29tZSByZWxhdGVkIGNyeXB0byBmZWF0dXJlcyBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZGSU9fQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjg5NwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgS2NvbmZpZyBodW50LgoKKipIdW50aW5nIGZvciBWRklPX0FQIGluIHRoZSBLY29uZmlnIEZpbGVzKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBldmVyeSBpbnN0YW5jZSB3aGVyZSBgVkZJT19BUGAgaXMgYWN0dWFsbHkgZGVmaW5lZCB3aXRoaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCB0aG91Z2ggcG90ZW50aWFsbHkgdGVkaW91cywgdGFzay4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBhIGdvb2QgcmVhc29uIGZvciB0aGlzIHNlYXJjaCDigJMgbWF5YmUgSSYjMzk7bSB0cmFja2luZyBhIGRlcGVuZGVuY3ksIGRlYnVnZ2luZyBhIGJ1aWxkIGlzc3VlLCBvciBwZXJoYXBzIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlIGFyb3VuZCBBY2NlbGVyYXRlZCBQcm9jZXNzaW5nIHN1cHBvcnQgaW4gVkZJTy4gV2hhdGV2ZXIgdGhlIHJlYXNvbiwgbXkgaW1tZWRpYXRlIGdvYWwgaXMgY2xlYXI6IGZpbmQgYWxsIHRob3NlIGRlY2xhcmF0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgZm9yIHRoaXMgLSBwcm9iYWJseSBhIGNvbWJpbmF0aW9uIG9mIGBmaW5kYCBhbmQgYGdyZXBgLCBvciBwZXJoYXBzIGEgbW9yZSBzb3BoaXN0aWNhdGVkIHRvb2wgaWYgdGhlIGNvZGViYXNlIGlzIHBhcnRpY3VsYXJseSBjb21wbGV4LiBUaW1lIHRvIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJT19BUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZz04MzU9Y29uZmlnIFZGSU9fQ0NXXG4tLVxuYXJjaC9zMzkwL0tjb25maWctODQ1LVxuYXJjaC9zMzkwL0tjb25maWc6ODQ2OmNvbmZpZyBWRklPX0FQXG5hcmNoL3MzOTAvS2NvbmZpZy04NDctXHRkZWZfdHJpc3RhdGUgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE5MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIHMzOTAgQXJjaGl0ZWN0dXJlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSByZW1lbWJlciBgS2NvbmZpZ2AgZmlsZXMgYXJlIHRoZSBwbGFjZSB0byBiZS4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIHRoaW5raW5nIHRoZSByZWxldmFudCBzZWN0aW9uIGlzIHByb2JhYmx5IGFyb3VuZCBsaW5lIDg0NiBvZiBgYXJjaC9zMzkwL0tjb25maWdgLiBUaGF0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBzZXR0aW5ncyByZWxhdGVkIHRvIHdoYXRldmVyIEkmIzM5O20gaW52ZXN0aWdhdGluZyBhcmUgZGVmaW5lZC4gTGV0JiMzOTtzIGdldCB0byBpdC4gVGltZSB0byBzdGFydCB0aGUgZGVlcCBkaXZlIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg0MDpcdFx0aGVscFxuIDg0MTpcdFx0ICBUaGlzIGRyaXZlciBhbGxvd3MgdXNhZ2Ugb2YgSS9PIHN1YmNoYW5uZWxzIHZpYSBWRklPLUNDVy5cbiA4NDI6XHRcbiA4NDM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gODQ0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2ZmlvX2Njdy5cbiA4NDU6XHRcbiA4NDY6XHRjb25maWcgVkZJT19BUFxuIDg0NzpcdFx0ZGVmX3RyaXN0YXRlIG5cbiA4NDg6XHRcdHByb21wdCBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIEFQIGRldmljZXNcJiMzNDtcbiA4NDk6XHRcdGRlcGVuZHMgb24gS1ZNXG4gODUwOlx0XHRkZXBlbmRzIG9uIFZGSU9cbiA4NTE6XHRcdGRlcGVuZHMgb24gQVBcbiA4NTI6XHRcdHNlbGVjdCBWRklPX01ERVZcbiA4NTM6XHRcdGhlbHBcbiA4NTQ6XHRcdCAgVGhpcyBkcml2ZXIgZ3JhbnRzIGFjY2VzcyB0byBBZGp1bmN0IFByb2Nlc3NvciAoQVApIGRldmljZXNcbiA4NTU6XHRcdCAgdmlhIHRoZSBWRklPIG1lZGlhdGVkIGRldmljZSBpbnRlcmZhY2UuXG4gODU2Olx0XG4gODU3Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiA4NTg6XHRcdCAgd2lsbCBiZSBjYWxsZWQgdmZpb19hcC5cbiA4NTk6XHRcbiA4NjA6XHRlbmRtZW51XG4gODYxOlx0XG4gODYyOlx0Y29uZmlnIENDV1xuIDg2MzpcdFx0ZGVmX2Jvb2wgeVxuIDg2NDpcdFxuIDg2NTpcdGNvbmZpZyBIQVZFX1BORVRJRFxuIDg2NjpcdFx0dHJpc3RhdGVcbiA4Njc6XHRcdGRlZmF1bHQgKFNNQyB8fCBDQ1dHUk9VUClcbiA4Njg6XHRcbiA4Njk6XHRtZW51IFwmIzM0O1ZpcnR1YWxpemF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzY1CgkJCQkJCQlvdXRwdXQ6IDkxCgkJCQkJCQl0aG91Z2h0czogNDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlZGSU9fQVAgUGF0Y2ggQXNzZXNzbWVudCBmb3IgYW1kNjQgQXJjaGl0ZWN0dXJlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSAqbm90KiBmdXp6YWJsZSBmb3IgbXkgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgYW1kNjQuIExldCYjMzk7cyBzZWUuLi4gdGhlIGBWRklPX0FQYCBzeW1ib2wgaXMgZGVmaW5lZCB3aXRoaW4gYGFyY2gvczM5MC9LY29uZmlnYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgczM5MC1zcGVjaWZpYy4gVGhlIHdob2xlIHRoaW5nIGlzIHdpdGhpbiB0aGUgJiMzNDtJL08gc3Vic3lzdGVtJiMzNDsgbWVudSBpbiBgYXJjaC9zMzkwYCwgdGhhdCYjMzk7cyBhIHJlZCBmbGFnLgoKTm93LCBJIG5lZWQgdG8gYXBwbHkgdGhlIHJ1bGVzLiBTcGVjaWZpY2FsbHksIHRoZSAmIzM0O05FR0FUSVZFIENSSVRFUklBJiMzNDsgc2VjdGlvbi4gVGhlIHJ1bGUgSSBuZWVkIHRvIGZvY3VzIG9uIGhlcmUgaXMgJiMzNDtVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6ICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLiYjMzQ7IFBlcmZlY3QuCgpMZXQmIzM5O3Mgc2VlIHdoYXQgZmlsZXMgYXJlIGNoYW5nZWQuIEFoLCBpdCBsb29rcyBsaWtlIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgIGFuZCBgZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaGAuIEJvdGggcmlnaHQgaW4gYGRyaXZlcnMvczM5MC9gLCBleGFjdGx5IHdoZXJlIEkgd291bGQgZXhwZWN0LiBUaGV5JiMzOTtyZSBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19WRklPX0FQYCBpcyBzZXQsIHdoaWNoIHdlIGtub3cgaXMgZGVmaW5lZCBpbiBgYXJjaC9zMzkwL0tjb25maWdgIGFuZCBkZXBlbmRzIG9uIHMzOTAgYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIGFsbCBzY3JlYW1pbmcgczM5MC4gSSYjMzk7bSBvbiBhbWQ2NC4gCgpUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlICppcyogZXhjbHVzaXZlIHRvIHMzOTAgYW5kIGRlZmluaXRlbHkgdW5yZWFjaGFibGUgb24gYW1kNjQuIE5vIGlmcywgYW5kcywgb3IgYnV0cy4KClRpbWUgZm9yIHRoZSBgc2V0LXJlc3VsdHNgIHNhbml0eSBjaGVjay4gTGV0JiMzOTtzIHNlZS4uLgoKLSAgIGBXb3J0aEZ1enppbmdgOiBmYWxzZSAtIFllcCwgY2hlY2suCi0gICBgUmVhc29uaW5nYDogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHMzOTAgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciAoYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AgYW5kIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oYCksIHdoaWNoIGlzIGV4Y2x1c2l2ZSB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUgKENPTkZJR19WRklPX0FQKSBhbmQgbm90IGNvbXBpbGVkIG9yIHJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiYjMzQ7IC0gU3BvdCBvbiwgZXhwbGFpbnMgaXQgcGVyZmVjdGx5LgotICAgYEZvY3VzU3ltYm9sc2A6IFtdIC0gQ29ycmVjdCwgbm90aGluZyB0byBmb2N1cyBvbi4KLSAgIGBFbmFibGVDb25maWdzYDogW10gLSBBbGwgZ29vZC4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50LiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLiAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgczM5MCBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGluIGRyaXZlcnMvczM5MC9jcnlwdG8vLCB3aGljaCBpcyBleGNsdXNpdmUgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIChDT05GSUdfVkZJT19BUCkgYW5kIGlzIG5laXRoZXIgY29tcGlsZWQgbm9yIHJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHMzOTAgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciBpbiBkcml2ZXJzL3MzOTAvY3J5cHRvLywgd2hpY2ggaXMgZXhjbHVzaXZlIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSAoQ09ORklHX1ZGSU9fQVApIGFuZCBpcyBuZWl0aGVyIGNvbXBpbGVkIG5vciByZWFjaGFibGUgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODoyMjowNy4zNjIzMjU3NTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY0NDgwODk4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIFZGSU8gQVAgKEFkanVuY3QgUHJvY2Vzc29yKSBkcml2ZXIgaW4gZHJpdmVycy9zMzkwL2NyeXB0by8sIHdoaWNoIGlzIGV4Y2x1c2l2ZSB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUgKENPTkZJR19WRklPX0FQKSBhbmQgaXMgbmVpdGhlciBjb21waWxlZCBub3IgcmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODoyMjowNy4zNjIzMzE4MTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDE2Mjc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGYzYzg2OWM3ZmNkM2UyOTJmYjJmNmQyMjY0MjRhYTRhMjE3NGRlY2JcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAxODoyMjowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcXG5pbmRleCA5NDBjMGZmNjY4YmVlLi5lMDU0ZmQ0YTk0OTcwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xcbisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xcbkBAIC0zMSw2ICszMSw3IEBAXFxuICNkZWZpbmUgQVBfUVVFVUVfSU5fVVNFIFxcXCJpbiB1c2VcXFwiXFxuIFxcbiAjZGVmaW5lIEFQX1JFU0VUX0lOVEVSVkFMXFx0XFx0MjBcXHQvKiBSZXNldCBzbGVlcCBpbnRlcnZhbCAoMjBtcylcXHRcXHQqL1xcbisjZGVmaW5lIEFQX1JFU0VUX01BWF9XQUlUXFx0XFx0MjAwMFxcdC8qIE1heGltdW0gd2FpdCBmb3IgcmVzZXQgKDIwMDBtcylcXHQqL1xcbiBcXG4gc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWVzKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpO1xcbiBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9yZXNldF9xbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpxbGlzdCk7XFxuQEAgLTIyNiwxNiArMjI3LDI3IEBAIHN0YXRpYyBzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqdmZpb19hcF9tZGV2X2dldF9xdWV1ZShcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIgLSBjbGVhcnMgdGhlIElSIGJpdCBvciBnaXZlcyB1cCBhZnRlciA1IHRyaWVzXFxuLSAqIEBhcHFuOiBUaGUgQVAgUXVldWUgbnVtYmVyXFxuLSAqXFxuLSAqIENoZWNrcyB0aGUgSVJRIGJpdCBmb3IgdGhlIHN0YXR1cyBvZiB0aGlzIEFQUU4gdXNpbmcgYXBfdGFwcS5cXG4tICogUmV0dXJucyBpZiB0aGUgYXBfdGFwcSBmdW5jdGlvbiBzdWNjZWVkZWQgYW5kIHRoZSBiaXQgaXMgY2xlYXIuXFxuLSAqIFJldHVybnMgaWYgYXBfdGFwcSBmdW5jdGlvbiBmYWlsZWQgd2l0aCBpbnZhbGlkLCBkZWNvbmZpZ3VyZWQgb3JcXG4tICogY2hlY2tzdG9wcGVkIEFQLlxcbi0gKiBPdGhlcndpc2UgcmV0cmllcyB1cCB0byA1IHRpbWVzIGFmdGVyIHdhaXRpbmcgMjBtcy5cXG4rICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhciAtIHdhaXQgZm9yIHRoZSBJUiBiaXQgdG8gY2xlYXIgYWZ0ZXIgYSBkaXNhYmxlXFxuKyAqXFxuKyAqIEBhcHFuOiB0aGUgQVBRTiBvZiB0aGUgcXVldWVcXG4rICpcXG4rICogUmVwZWF0ZWRseSBwb2xscyB0aGUgQVAgcXVldWUgc3RhdHVzIHZpYSBQUUFQKFRBUFEpIGV2ZXJ5IDIwbXMgdW50aWwgdGhlIElSXFxuKyAqIGJpdCBpcyBjbGVhciwgdGhlIHF1ZXVlIGJlY29tZXMgbm9uLW9wZXJhdGlvbmFsLCBvciA1IHJldHJpZXMgYXJlIGV4aGF1c3RlZC5cXG4rICpcXG4rICogQmVjYXVzZSBQUUFQKEFRSUMpIGRpc2FibGUgaW5pdGlhdGVzIGFuIGFzeW5jaHJvbm91cyBwcm9jZXNzLCBhXFxuKyAqIGNvbmRpdGlvbi1jb2RlIDAgY29tcGxldGlvbiBkb2VzIG5vdCBndWFyYW50ZWUgdGhlIElSIGJpdCBoYXMgYmVlbiBjbGVhcmVkLlxcbisgKiBUaGUgaG9zdCBtdXN0IGNvbmZpcm0gSVI9MCBiZWZvcmUgdW5waW5uaW5nIHRoZSBOSUIgcGFnZSB0byBhdm9pZCBhIHdpbGRcXG4rICogRE1BIHdyaXRlIHRvIGEgZnJlZWQgcGFnZS5cXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAtIDBcXHRcXHRpZiB0aGUgSVIgYml0IGlzIGNsZWFyIChpLmUuLCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCkuXFxuKyAqXFxuKyAqIC0gLUVOT0RFVlxcdGlmIHRoZSBQUUFQLVRBUFEgcmVzcG9uc2UgY29kZSBpbmRpY2F0ZXMgdGhlIHF1ZXVlIGlzIG5vdCBhdmFpbGFibGUsXFxuKyAqXFx0XFx0aXMgZGVjb25maWd1cmVkLCBvciBpcyBjaGVja3N0b3BwZWQgKGkuZS4sIG5vdCBvcGVyYXRpb25hbCkuXFxuKyAqXFxuKyAqIC0gLUVUSU1FRE9VVFxcdHRoZSBmdW5jdGlvbiB0aW1lZCBvdXQgYmVmb3JlIHRoZSBJUiBiaXQgd2FzIGNsZWFyZWQuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKGludCBhcHFuKVxcbitzdGF0aWMgaW50IHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoaW50IGFwcW4pXFxuIHtcXG4gXFx0c3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXM7XFxuIFxcdGludCByZXRyeSA9IDU7XFxuQEAgLTI0Niw3ICsyNTgsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKGludCBhcHFuKVxcbiBcXHRcXHRjYXNlIEFQX1JFU1BPTlNFX05PUk1BTDpcXG4gXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzpcXG4gXFx0XFx0XFx0aWYgKCFzdGF0dXMuaXJxX2VuYWJsZWQpXFxuLVxcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiBcXHRcXHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XFxuIFxcdFxcdFxcdG1zbGVlcCgyMCk7XFxuQEAgLTI1NywxMiArMjY5LDE1IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoaW50IGFwcW4pXFxuIFxcdFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFxcdFdBUk5fT05DRSgxLCBcXFwiJXM6IHRhcHEgcmMgJTAyeDogJTA0eFxcXFxuXFxcIiwgX19mdW5jX18sXFxuIFxcdFxcdFxcdFxcdCAgc3RhdHVzLnJlc3BvbnNlX2NvZGUsIGFwcW4pO1xcbi1cXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXHRcXHR9XFxuIFxcdH0gd2hpbGUgKC0tcmV0cnkpO1xcbiBcXG4tXFx0V0FSTl9PTkNFKDEsIFxcXCIlczogdGFwcSByYyAlMDJ4OiAlMDR4IGNvdWxkIG5vdCBjbGVhciBJUiBiaXRcXFxcblxcXCIsXFxuLVxcdFxcdCAgX19mdW5jX18sIHN0YXR1cy5yZXNwb25zZV9jb2RlLCBhcHFuKTtcXG4rXFx0V0FSTl9PTkNFKDEsIFxcXCIlczogdGFwcSByYyAlMDJ4OiB0aW1lZCBvdXQgd2FpdGluZyBmb3IgaW50ZXJydXB0cyBkaXNhYmxlZCBmb3IgJTAyeC4lMDR4XFxcXG5cXFwiLFxcbitcXHRcXHQgIF9fZnVuY19fLCBzdGF0dXMucmVzcG9uc2VfY29kZSxcXG4rXFx0XFx0ICBBUF9RSURfQ0FSRChhcHFuKSwgQVBfUUlEX1FVRVVFKGFwcW4pKTtcXG4rXFxuK1xcdHJldHVybiAtRVRJTUVET1VUO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjg5LDIwICszMDQsMjggQEAgc3RhdGljIHZvaWQgdmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxcbiB9XFxuIFxcbiAvKipcXG4tICogdmZpb19hcF9pcnFfZGlzYWJsZSAtIGRpc2FibGVzIGFuZCBjbGVhcnMgYW4gYXBfcXVldWUgaW50ZXJydXB0XFxuLSAqIEBxOiBUaGUgdmZpb19hcF9xdWV1ZVxcbisgKiB2ZmlvX2FwX2lycV9kaXNhYmxlIC0gZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciBhbiBBUCBxdWV1ZVxcbisgKiBAcTogdGhlIHZmaW9fYXBfcXVldWVcXG4gICpcXG4tICogVXNlcyBhcF9hcWljIHRvIGRpc2FibGUgdGhlIGludGVycnVwdGlvbiBhbmQgaW4gY2FzZSBvZiBzdWNjZXNzLCByZXNldFxcbi0gKiBpbiBwcm9ncmVzcyBvciBJUlEgZGlzYWJsZSBjb21tYW5kIGFscmVhZHkgcHJvY2VlZGVkOiBjYWxsc1xcbi0gKiB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKCkgdG8gY2hlY2sgZm9yIHRoZSBJUlEgYml0IHRvIGJlIGNsZWFyXFxuLSAqIGFuZCBjYWxscyB2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMoKSB0byBmcmVlIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZFxcbi0gKiB3aXRoIHRoZSBBUCBpbnRlcnJ1cHQgaGFuZGxpbmcuXFxuKyAqIElzc3VlcyBQUUFQKEFRSUMpIHRvIGRpc2FibGUgaW50ZXJydXB0cyBmb3IgdGhlIEFQIHF1ZXVlLiBPbiBzdWNjZXNzXFxuKyAqIChBUF9SRVNQT05TRV9OT1JNQUwgb3IgQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQpLCBwb2xscyB2aWFcXG4rICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcigpIHVudGlsIHRoZSBJUiBiaXQgaXMgY29uZmlybWVkIGNsZWFyIGJlZm9yZVxcbisgKiBmcmVlaW5nIHRoZSBwaW5uZWQgTklCIHBhZ2UgYW5kIHVucmVnaXN0ZXJpbmcgdGhlIGd1ZXN0IElTQy4gVGhpcyB3YWl0IGlzXFxuKyAqIG5lY2Vzc2FyeSBiZWNhdXNlIEFRSUMgZGlzYWJsZSBpcyBhc3luY2hyb25vdXM6IGZyZWVpbmcgdGhlIE5JQiBiZWZvcmUgSVI9MFxcbisgKiBpcyBjb25maXJtZWQgcmlza3MgYSB3aWxkIERNQSB3cml0ZSB0byBhIGZyZWVkIGhvc3QgcGFnZS5cXG4gICpcXG4tICogSW4gdGhlIGNhc2UgdGhlIEFQIGlzIGJ1c3ksIG9yIGEgcmVzZXQgaXMgaW4gcHJvZ3Jlc3MsXFxuLSAqIHJldHJpZXMgYWZ0ZXIgMjBtcywgdXAgdG8gNSB0aW1lcy5cXG4rICogUmV0cmllcyB1cCB0byA1IHRpbWVzICh3aXRoIDIwbXMgc2xlZXApIGlmIHRoZSBxdWV1ZSBpcyBidXN5IG9yIGEgcmVzZXQgaXNcXG4rICogaW4gcHJvZ3Jlc3MuXFxuICAqXFxuLSAqIFJldHVybnMgaWYgYXBfYXFpYyBmdW5jdGlvbiBmYWlsZWQgd2l0aCBpbnZhbGlkLCBkZWNvbmZpZ3VyZWQgb3JcXG4tICogY2hlY2tzdG9wcGVkIEFQLlxcbisgKiBJZiB0aGUgSVIgYml0IGNhbm5vdCBiZSBjb25maXJtZWQgY2xlYXIgKHRpbWVvdXQpLCB0aGUgTklCIHBhZ2UgYW5kIGd1ZXN0XFxuKyAqIElTQyBhcmUgaW50ZW50aW9uYWxseSBsZWFrZWQuIElmIHRoZSBwYWdlIHdlcmUgdW5waW5uZWQgYW5kIHJldHVybmVkIHRvIHRoZVxcbisgKiBhbGxvY2F0b3IsIGEgc3Vic2VxdWVudCBoYXJkd2FyZSBETUEgd3JpdGUgdG8gdGhhdCBwaHlzaWNhbCBhZGRyZXNzIHdvdWxkXFxuKyAqIGNvcnJ1cHQgbWVtb3J5IGJlbG9uZ2luZyB0byBhIG5ldyBvd25lciDigJQgYSB3aWxkIERNQSB3cml0ZSB0aGF0IGNvdWxkIGNyYXNoXFxuKyAqIG9yIGNvbXByb21pc2UgdGhlIGhvc3Qga2VybmVsLlxcbisgKlxcbisgKiBJZiB0aGUgcXVldWUgaXMgbm9uLW9wZXJhdGlvbmFsIChkZWNvbmZpZ3VyZWQsIGNoZWNrc3RvcHBlZCwgbm90IGF2YWlsYWJsZSksXFxuKyAqIHJlc291cmNlcyBhcmUgZnJlZWQgaW1tZWRpYXRlbHkgc2luY2UgdGhlIGhhcmR3YXJlIGNhbiBubyBsb25nZXIgd3JpdGUgdG9cXG4rICogdGhlIE5JQi5cXG4gICpcXG4gICogUmV0dXJuOiBcXHUwMDI2c3RydWN0IGFwX3F1ZXVlX3N0YXR1c1xcbiAgKi9cXG5AQCAtMzEwLDE1ICszMzMsMzggQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcXG4ge1xcbiBcXHR1bmlvbiBhcF9xaXJxX2N0cmwgYXFpY19naXNhID0geyAudmFsdWUgPSAwIH07XFxuIFxcdHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgc3RhdHVzO1xcbi1cXHRpbnQgcmV0cmllcyA9IDU7XFxuK1xcdGludCByZXRyaWVzID0gNSwgcmV0O1xcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHRzdGF0dXMgPSBhcF9hcWljKHEtXFx1MDAzZWFwcW4sIGFxaWNfZ2lzYSwgMCk7XFxuIFxcdFxcdHN3aXRjaCAoc3RhdHVzLnJlc3BvbnNlX2NvZGUpIHtcXG4gXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDpcXG4gXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6XFxuLVxcdFxcdFxcdHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIocS1cXHUwMDNlYXBxbik7XFxuLVxcdFxcdFxcdGdvdG8gZW5kX2ZyZWU7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEFRSUMgZGlzYWJsZSB3YXMgYWNjZXB0ZWQgKE5PUk1BTCksIG9yIHRoZSBxdWV1ZSB3YXNcXG4rXFx0XFx0XFx0ICogYWxyZWFkeSBkaXNhYmxlZCBvciBhIHByaW9yIGFzeW5jIHJlcXVlc3QgaXMgc3RpbGxcXG4rXFx0XFx0XFx0ICogY29tcGxldGluZyAoT1RIRVJXSVNFX0NIQU5HRUQpLiAgSW4gYm90aCBjYXNlcywgd2UgbXVzdFxcbitcXHRcXHRcXHQgKiB3YWl0IHVudGlsIGludGVycnVwdCBwcm9jZXNzaW5nIGhhcyBiZWVuIGRpc2FibGVkXFxuK1xcdFxcdFxcdCAqIGJlZm9yZSBwcm9jZWVkaW5nLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0cmV0ID0gdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcihxLVxcdTAwM2VhcHFuKTtcXG4rXFx0XFx0XFx0aWYgKHJldCA9PSAwIHx8IHJldCA9PSAtRU5PREVWKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVuZF9mcmVlO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBUaW1lZCBvdXQgd2FpdGluZyB0byBjb25maXJtIGludGVycnVwdHMgYXJlIGRpc2FibGVkLlxcbitcXHRcXHRcXHQgKiBJZiBhcF9hcWljIHJldHVybmVkIE5PUk1BTCwgdGhlIGd1ZXN0IHdvdWxkIGluY29ycmVjdGx5XFxuK1xcdFxcdFxcdCAqIGludGVycHJldCB0aGF0IGFzIGEgc3VjY2Vzc2Z1bCBkaXNhYmxlIGFuZCBtYXkgZnJlZSBvclxcbitcXHRcXHRcXHQgKiByZXVzZSB0aGUgTklCIHdoaWxlIGhhcmR3YXJlIGNhbiBzdGlsbCB3cml0ZSB0byBpdC5cXG4rXFx0XFx0XFx0ICogWmVybyB0aGUgc3RhdHVzIHdvcmQgYW5kIHNldCBPVEhFUldJU0VfQ0hBTkdFRCB0byBtaW1pY1xcbitcXHRcXHRcXHQgKiB3aGF0IHRoZSBoYXJkd2FyZSBkb2VzIGZvciB0aGF0IHJlc3BvbnNlIGNvZGUuIFRoaXNcXG4rXFx0XFx0XFx0ICogc2lnbmFscyB0byB0aGUgZ3Vlc3QgdGhhdCB0aGUgcmVzZXQgb3BlcmF0aW9uIGRpZCBub3RcXG4rXFx0XFx0XFx0ICogY29tcGxldGUuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMKSB7XFxuK1xcdFxcdFxcdFxcdG1lbXNldChcXHUwMDI2c3RhdHVzLCAwLCBzaXplb2Yoc3RhdHVzKSk7XFxuK1xcdFxcdFxcdFxcdHN0YXR1cy5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQ7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0Z290byBlbmRfZmFpbDtcXG4gXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzpcXG4gXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9CVVNZOlxcbiBcXHRcXHRcXHRtc2xlZXAoMjApO1xcbkBAIC0zMjYsMTggKzM3Miw0NyBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxcbiBcXHRcXHRjYXNlIEFQX1JFU1BPTlNFX1FfTk9UX0FWQUlMOlxcbiBcXHRcXHRjYXNlIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRDpcXG4gXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9DSEVDS1NUT1BQRUQ6XFxuK1xcdFxcdFxcdC8qIEFQIG5vdCBvcGVyYXRpb25hbDsgbm8gZnVydGhlciBpbnRlcnJ1cHRzIHBvc3NpYmxlICovXFxuK1xcdFxcdFxcdFdBUk5fT05DRSgxLCBcXFwiJXM6IGFwX2FxaWMgc3RhdHVzICVkXFxcXG5cXFwiLCBfX2Z1bmNfXyxcXG4rXFx0XFx0XFx0XFx0ICBzdGF0dXMucmVzcG9uc2VfY29kZSk7XFxuK1xcdFxcdFxcdGdvdG8gZW5kX2ZyZWU7XFxuIFxcdFxcdGNhc2UgQVBfUkVTUE9OU0VfSU5WQUxJRF9BRERSRVNTOlxcbiBcXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHQvKiBBbGwgY2FzZXMgaW4gZGVmYXVsdCBtZWFucyBBUCBub3Qgb3BlcmF0aW9uYWwgKi9cXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogVGhlIEFRSUMgZGlzYWJsZSB3YXMgcmVqZWN0ZWQ7IElSUSBpcyBzdGlsbCBlbmFibGVkXFxuK1xcdFxcdFxcdCAqIGFuZCB0aGUgaGFyZHdhcmUgc3RpbGwgaG9sZHMgdGhlIE5JQiBhZGRyZXNzLiBEbyBub3RcXG4rXFx0XFx0XFx0ICogZnJlZSByZXNvdXJjZXMuXFxuK1xcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRXQVJOX09OQ0UoMSwgXFxcIiVzOiBhcF9hcWljIHN0YXR1cyAlZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuIFxcdFxcdFxcdFxcdCAgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xcbi1cXHRcXHRcXHRnb3RvIGVuZF9mcmVlO1xcbitcXHRcXHRcXHRnb3RvIGVuZF9mYWlsO1xcbiBcXHRcXHR9XFxuIFxcdH0gd2hpbGUgKHJldHJpZXMtLSk7XFxuIFxcbiBcXHRXQVJOX09OQ0UoMSwgXFxcIiVzOiBhcF9hcWljIHN0YXR1cyAlZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuIFxcdFxcdCAgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xcbitcXG4rZW5kX2ZhaWw6XFxuK1xcdC8qXFxuK1xcdCAqIFdlIGFyZSBoZXJlIGVpdGhlciBiZWNhdXNlIHRoZSBBUUlDIGluc3RydWN0aW9uIGZhaWxlZCB0byBkaXNhYmxlXFxuK1xcdCAqIGludGVycnVwdHMsIG9yIGJlY2F1c2UgSVI9MCBjb3VsZCBub3QgYmUgY29uZmlybWVkLiBJbiBlaXRoZXIgY2FzZVxcbitcXHQgKiB0aGUgTklCIHBhZ2UgYW5kIGd1ZXN0IElTQyBjYW5ub3QgYmUgZnJlZWQ6IGhhcmR3YXJlIG1heSBzdGlsbCB3cml0ZVxcbitcXHQgKiB0byB0aGUgTklCLCBhbmQgdW5waW5uaW5nIHRoZSBwYWdlIHdvdWxkIGFsbG93IGl0IHRvIGJlIHJlYWxsb2NhdGVkXFxuK1xcdCAqIHRvIGEgbmV3IG93bmVyLiBBIHN1YnNlcXVlbnQgaGFyZHdhcmUgRE1BIHdyaXRlIHRvIHRoYXQgcGh5c2ljYWxcXG4rXFx0ICogYWRkcmVzcyB3b3VsZCBjb3JydXB0IHRoZSBuZXcgb3duZXIncyBtZW1vcnkg4oCUIGEgd2lsZCBETUEgd3JpdGUgdGhhdFxcbitcXHQgKiBjb3VsZCBjcmFzaCBvciBjb21wcm9taXNlIHRoZSBob3N0IGtlcm5lbC4gVGhlIHJlc291cmNlcyBhcmVcXG4rXFx0ICogdGhlcmVmb3JlIGludGVudGlvbmFsbHkgbGVha2VkLlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuIHN0YXR1cztcXG4rXFxuIGVuZF9mcmVlOlxcbitcXHQvKlxcbitcXHQgKiBUaGlzIGxhYmVsIGlzIHJlYWNoZWQgYmVjYXVzZSB0aGUgcXVldWUgd2FzIHN1Y2Nlc3NmdWxseSBkaXNhYmxlZCxcXG4rXFx0ICogb3IgYmVjYXVzZSB0aGUgcXVldWUgaXMgbm90IG9wZXJhdGlvbmFsIG9yIG5vdCBhdmFpbGFibGUsIGluIHdoaWNoIGNhc2VcXG4rXFx0ICogaW50ZXJydXB0cyBjYW4gbm90IGJlIHByb2Nlc3NlZCwgc28gZnJlZSB0aGUgQVFJQyByZXNvdXJjZXMgLSB0aGUgcGlubmVkIE5JQlxcbitcXHQgKiBwYWdlIGFuZCB0aGUgcmVnaXN0ZXJlZCBndWVzdCBJU0MgLSB1c2VkIHRvIGVuYWJsZSBpbnRlcnJ1cHRzIHNvIHRoZXkgd2lsbFxcbitcXHQgKiBub3QgYmUgbGVha2VkLlxcbitcXHQgKi9cXG4gXFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xcbiBcXHRyZXR1cm4gc3RhdHVzO1xcbiB9XFxuQEAgLTQwMSwyMiArNDc2LDI5IEBAIHN0YXRpYyBpbnQgZW5zdXJlX25pYl9zaGFyZWQodW5zaWduZWQgbG9uZyBhZGRyKVxcbiB9XFxuIFxcbiAvKipcXG4tICogdmZpb19hcF9pcnFfZW5hYmxlIC0gRW5hYmxlIEludGVycnVwdGlvbiBmb3IgYSBBUFFOXFxuKyAqIHZmaW9fYXBfaXJxX2VuYWJsZSAtIGVuYWJsZSBpbnRlcnJ1cHRzIGZvciBhbiBBUCBxdWV1ZSBvbiBiZWhhbGYgb2YgYSBndWVzdFxcbiAgKlxcbi0gKiBAcTpcXHQgdGhlIHZmaW9fYXBfcXVldWUgaG9sZGluZyBBUUlDIHBhcmFtZXRlcnNcXG4rICogQHE6XFx0IHRoZSB2ZmlvX2FwX3F1ZXVlIGZvciB3aGljaCBpbnRlcnJ1cHRzIGFyZSB0byBiZSBlbmFibGVkXFxuICAqIEBpc2M6IHRoZSBndWVzdCBJU0MgdG8gcmVnaXN0ZXIgd2l0aCB0aGUgR0lCIGludGVyZmFjZVxcbi0gKiBAdmNwdTogdGhlIHZjcHUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZ2lzdGVycyBzcGVjaWZ5aW5nIHRoZSBwYXJhbWV0ZXJzXFxuLSAqXFx0ICBwYXNzZWQgdG8gdGhlIFBRQVAoQVFJQykgaW5zdHJ1Y3Rpb24uXFxuKyAqIEB2Y3B1OiB0aGUgdmNwdSB3aG9zZSByZWdpc3RlcnMgY29udGFpbiB0aGUgUFFBUChBUUlDKSBwYXJhbWV0ZXJzXFxuKyAqXFxuKyAqIFBpbnMgdGhlIGd1ZXN0IE5JQiBwYWdlLCByZWdpc3RlcnMgdGhlIGd1ZXN0IElTQyB3aXRoIHRoZSBHSUIgdG8gb2J0YWluIGFcXG4rICogaG9zdCBJU0MsIGFuZCByZWlzc3VlcyBQUUFQKEFRSUMpIHdpdGggdGhlIHRyYW5zbGF0ZWQgaG9zdC1hYnNvbHV0ZSBOSUJcXG4rICogYWRkcmVzcyBhbmQgaG9zdCBJU0Mgb24gYmVoYWxmIG9mIHRoZSBndWVzdC5cXG4gICpcXG4tICogUGluIHRoZSBOSUIgc2F2ZWQgaW4gKnFcXG4tICogUmVnaXN0ZXIgdGhlIGd1ZXN0IElTQyB0byBHSUIgaW50ZXJmYWNlIGFuZCByZXRyaWV2ZSB0aGVcXG4tICogaG9zdCBJU0MgdG8gaXNzdWUgdGhlIGhvc3Qgc2lkZSBQUUFQL0FRSUNcXG4rICogVGhlIGNvbmRpdGlvbiBjb2RlIGFuZCBBUC1xdWV1ZSBzdGF0dXMgd29yZCByZXR1cm5lZCBieSBQUUFQKEFRSUMpIGFyZVxcbisgKiByZWZsZWN0ZWQgYmFjayB0byB0aGUgZ3Vlc3QgYXMtaXMuIElSUSBzdGF0ZSB2ZXJpZmljYXRpb24gKHBvbGxpbmcgdW50aWxcXG4rICogSVI9MSkgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBndWVzdCBBUCBidXMsIG5vdCB0aGUgaG9zdC5cXG4gICpcXG4tICogc3RhdHVzLnJlc3BvbnNlX2NvZGUgbWF5IGJlIHNldCB0byBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1MgaW4gY2FzZSB0aGVcXG4tICogdmZpb19waW5fcGFnZXMgb3Iga3ZtX3MzOTBfZ2lzY19yZWdpc3RlciBmYWlsZWQuXFxuKyAqIFJlc291cmNlIG1hbmFnZW1lbnQgaXMgYmFzZWQgc29sZWx5IG9uIHdoZXRoZXIgaGFyZHdhcmUgYWNjZXB0ZWQgdGhlIG5ldyBOSUI6XFxuKyAqIC0gQVBfUkVTUE9OU0VfTk9STUFMIChDQz0wKTogaGFyZHdhcmUgYWNjZXB0ZWQgdGhlIG5ldyBOSUI7IHRoZSBvbGQgcGlubmVkXFxuKyAqICAgTklCIHBhZ2UgYW5kIHJlZ2lzdGVyZWQgZ3Vlc3QgSVNDIGFyZSBmcmVlZCBhbmQgdGhlIG5ldyBvbmVzIHNhdmVkLlxcbisgKiAtIEFsbCBvdGhlciByZXNwb25zZXM6IGhhcmR3YXJlIGRpZCBub3QgYWNjZXB0IHRoZSBuZXcgTklCOyB0aGUgbmV3bHkgcGlubmVkXFxuKyAqICAgcGFnZSBhbmQgcmVnaXN0ZXJlZCBJU0MgYXJlIGZyZWVkIGFuZCB0aGUgcHJldmlvdXNseSBzYXZlZCByZXNvdXJjZXMgYXJlXFxuKyAqICAgbGVmdCBpbnRhY3QuXFxuICAqXFxuLSAqIE90aGVyd2lzZSByZXR1cm4gdGhlIGFwX3F1ZXVlX3N0YXR1cyByZXR1cm5lZCBieSB0aGUgYXBfYXFpYygpLFxcbi0gKiBhbGwgcmV0cnkgaGFuZGxpbmcgd2lsbCBiZSBkb25lIGJ5IHRoZSBndWVzdC5cXG4rICogQVBfUkVTUE9OU0VfSU5WQUxJRF9BRERSRVNTIGlzIHJldHVybmVkIGlmIHZmaW9fcGluX3BhZ2VzKCkgb3JcXG4rICoga3ZtX3MzOTBfZ2lzY19yZWdpc3RlcigpIGZhaWxzIGJlZm9yZSB0aGUgQVFJQyBpbnN0cnVjdGlvbiBpcyBpc3N1ZWQuXFxuICAqXFxuICAqIFJldHVybjogXFx1MDAyNnN0cnVjdCBhcF9xdWV1ZV9zdGF0dXNcXG4gICovXFxuQEAgLTQyOCwxMSArNTEwLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHZmaW9fYXBfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSxcXG4gXFx0c3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXMgPSB7fTtcXG4gXFx0c3RydWN0IGt2bV9zMzkwX2dpc2EgKmdpc2E7XFxuIFxcdHN0cnVjdCBwYWdlICpoX3BhZ2U7XFxuLVxcdGludCBuaXNjO1xcbitcXHRpbnQgbmlzYywgcmV0O1xcbiBcXHRzdHJ1Y3Qga3ZtICprdm07XFxuIFxcdHBoeXNfYWRkcl90IGhfbmliO1xcbiBcXHRkbWFfYWRkcl90IG5pYjtcXG4tXFx0aW50IHJldDtcXG4gXFxuIFxcdC8qIFZlcmlmeSB0aGF0IHRoZSBub3RpZmljYXRpb24gaW5kaWNhdG9yIGJ5dGUgYWRkcmVzcyBpcyB2YWxpZCAqL1xcbiBcXHRpZiAodmZpb19hcF92YWxpZGF0ZV9uaWIodmNwdSwgXFx1MDAyNm5pYikpIHtcXG5AQCAtNDg5LDI0ICs1NzAsMzMgQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLFxcbiBcXHRzdGF0dXMgPSBhcF9hcWljKHEtXFx1MDAzZWFwcW4sIGFxaWNfZ2lzYSwgaF9uaWIpO1xcbiBcXHRzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7XFxuIFxcdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxcbi1cXHRcXHQvKiBTZWUgaWYgd2UgZGlkIGNsZWFyIG9sZGVyIElSUSBjb25maWd1cmF0aW9uICovXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEhhcmR3YXJlIGFjY2VwdGVkIHRoZSBuZXcgTklCIGFkZHJlc3MgKENDPTApLiBUaGUgb2xkIE5JQiBhbmRcXG4rXFx0XFx0ICogZ3Vlc3QgSVNDIGFyZSBubyBsb25nZXIgdXNlZCBieSBoYXJkd2FyZSBhbmQgY2FuIGJlIGZyZWVkLlxcbitcXHRcXHQgKiBUaGUgbmV3IHJlc291cmNlcyBhcmUgc2F2ZWQgZm9yIHRyYWNraW5nIGFuZCBmdXR1cmUgdGVhcmRvd24uXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIElSUSBzdGF0ZSB2ZXJpZmljYXRpb24gKHBvbGxpbmcgdW50aWwgSVI9MSkgaXMgdGhlXFxuK1xcdFxcdCAqIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBndWVzdCBBUCBidXMsIG5vdCB0aGUgaG9zdC4gVGhlXFxuK1xcdFxcdCAqIGNvbmRpdGlvbiBjb2RlIGFuZCBzdGF0dXMgd29yZCBhcmUgcmVmbGVjdGVkIGJhY2sgdG8gdGhlXFxuK1xcdFxcdCAqIGd1ZXN0IHRvIHJlc3BvbmQgdG8gdGhlIFBRQVAtQVFJQyBpbnN0cnVjdGlvbi5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcXG4gXFx0XFx0cS1cXHUwMDNlc2F2ZWRfaW92YSA9IG5pYjtcXG4gXFx0XFx0cS1cXHUwMDNlc2F2ZWRfaXNjID0gaXNjO1xcbiBcXHRcXHRicmVhaztcXG4tXFx0Y2FzZSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDpcXG4tXFx0XFx0LyogV2UgY291bGQgbm90IG1vZGlmeSBJUlEgc2V0dGluZ3M6IGNsZWFyIG5ldyBjb25maWd1cmF0aW9uICovXFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEhhcmR3YXJlIGRpZCBub3QgYWNjZXB0IHRoZSBuZXcgTklCIChDQz0zIG9yIGVycm9yKS4gVGhlXFxuK1xcdFxcdCAqIHByZXZpb3VzbHkgc2F2ZWQgTklCIGFuZCBndWVzdCBJU0MgcmVtYWluIGFjdGl2ZSBhbmQgbXVzdFxcbitcXHRcXHQgKiBub3QgYmUgZnJlZWQuIFJlbGVhc2UgdGhlIG5ld2x5IHBpbm5lZCBwYWdlIGFuZCByZWdpc3RlcmVkXFxuK1xcdFxcdCAqIElTQyB0aGF0IHdlcmUgcHJlcGFyZWQgZm9yIHRoaXMgKHJlamVjdGVkKSByZXF1ZXN0LlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0cmV0ID0ga3ZtX3MzOTBfZ2lzY191bnJlZ2lzdGVyKGt2bSwgaXNjKTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0VkZJT19BUF9EQkZfV0FSTihcXFwiJXM6IGt2bV9zMzkwX2dpc2NfdW5yZWdpc3RlcjogcmM9JWQgaXNjPSVkLCBhcHFuPSUjMDR4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgX19mdW5jX18sIHJldCwgaXNjLCBxLVxcdTAwM2VhcHFuKTtcXG4gXFx0XFx0dmZpb191bnBpbl9wYWdlcyhcXHUwMDI2cS1cXHUwMDNlbWF0cml4X21kZXYtXFx1MDAzZXZkZXYsIG5pYiwgMSk7XFxuIFxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRwcl93YXJuKFxcXCIlczogYXBxbiAlMDR4OiByZXNwb25zZTogJTAyeFxcXFxuXFxcIiwgX19mdW5jX18sIHEtXFx1MDAzZWFwcW4sXFxuLVxcdFxcdFxcdHN0YXR1cy5yZXNwb25zZV9jb2RlKTtcXG4tXFx0XFx0dmZpb19hcF9pcnFfZGlzYWJsZShxKTtcXG4tXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChzdGF0dXMucmVzcG9uc2VfY29kZSAhPSBBUF9SRVNQT05TRV9OT1JNQUwpIHtcXG5AQCAtNjM1LDcgKzcyNSw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3BxYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHR9XFxuIFxcbiBcXHRzdGF0dXMgPSB2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZXMucmVncy5ncHJzWzFdO1xcbi1cXG4gXFx0LyogSWYgSVIgYml0KDE2KSBpcyBzZXQgd2UgZW5hYmxlIHRoZSBpbnRlcnJ1cHQgKi9cXG4gXFx0aWYgKChzdGF0dXMgXFx1MDAzZVxcdTAwM2UgKDYzIC0gMTYpKSBcXHUwMDI2IDB4MDEpXFxuIFxcdFxcdHFzdGF0dXMgPSB2ZmlvX2FwX2lycV9lbmFibGUocSwgc3RhdHVzIFxcdTAwMjYgMHgwNywgdmNwdSk7XFxuQEAgLTY5MiwxNCArNzgxLDE0IEBAIHN0YXRpYyBib29sIF9xdWV1ZV9wYXNzYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcXG4gXFx0aWYgKCFxKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRzd2l0Y2ggKHEtXFx1MDAzZXJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlKSB7XFxuLVxcdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxcbi1cXHRjYXNlIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRDpcXG4tXFx0Y2FzZSBBUF9SRVNQT05TRV9DSEVDS1NUT1BQRUQ6XFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdH1cXG4rXFx0LypcXG4rXFx0ICogQSBxdWV1ZSBpcyBvbmx5IHBhc3NhYmxlIGlmIHplcm9pemF0aW9uIHdhcyBjb25maXJtZWQgYnlcXG4rXFx0ICogYXBxX3Jlc2V0X2NoZWNrKCkgdmlhIFRBUFEgc3RhdHVzIGJpdCB2ZXJpZmljYXRpb24uIFRoaXMgaXNcXG4rXFx0ICogaW5kaWNhdGVkIGJ5IHJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlID09IEFQX1JFU1BPTlNFX05PUk1BTCAoMCkuXFxuK1xcdCAqIFRoaXMgaXMgdG8gcHJvdGVjdCBhZ2FpbnN0IGxlYWtpbmcgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBxdWV1ZVxcbitcXHQgKiB0byB0aGUgZ3Vlc3QuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gcS1cXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0xNDEwLDcgKzE0OTksNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19kb21haW4oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcXG4ge1xcbiBcXHRERUNMQVJFX0JJVE1BUChhcHFpcywgQVBfRE9NQUlOUyk7XFxuIFxcbi1cXHRiaXRtYXBfemVybyhhcHFpcywgQVBfREVWSUNFUyk7XFxuK1xcdGJpdG1hcF96ZXJvKGFwcWlzLCBBUF9ET01BSU5TKTtcXG4gXFx0c2V0X2JpdF9pbnYoYXBxaSwgYXBxaXMpO1xcbiBcXHR2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19kb21haW5zKG1hdHJpeF9tZGV2LCBhcHFpcyk7XFxuIH1cXG5AQCAtMTkxOSwxMiArMjAwOCw0NyBAQCBzdGF0aWMgaW50IGFwcV9zdGF0dXNfY2hlY2soaW50IGFwcW4sIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgKnN0YXR1cylcXG4ge1xcbiBcXHRzd2l0Y2ggKHN0YXR1cy1cXHUwMDNlcmVzcG9uc2VfY29kZSkge1xcbiBcXHRjYXNlIEFQX1JFU1BPTlNFX05PUk1BTDpcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGhpcyByZXNwb25zZSBjb2RlIG9ubHkgaW5kaWNhdGVzIHRoYXQgdGhlIFBRQVAoWkFQUSkgaGFzXFxuK1xcdFxcdCAqIGJlZW4gaW5pdGlhdGVkLiBUaGUgZm9sbG93aW5nIGJpdCBzZXR0aW5ncyBpbiB0aGUgc3RhdHVzXFxuK1xcdFxcdCAqIHJldHVybmVkIGZyb20gVEFQUSBtdXN0IGJlIHZlcmlmaWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVcXG4rXFx0XFx0ICogYXN5bmNocm9ub3VzIHBvcnRpb24gb2YgdGhlIHF1ZXVlIHplcm9pemF0aW9uIGhhcyBjb21wbGV0ZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoc3RhdHVzLVxcdTAwM2VxdWV1ZV9lbXB0eSBcXHUwMDI2XFx1MDAyNiAhc3RhdHVzLVxcdTAwM2VyZXBsaWVzX3dhaXRpbmcgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFzdGF0dXMtXFx1MDAzZWlycV9lbmFibGVkIFxcdTAwMjZcXHUwMDI2ICFzdGF0dXMtXFx1MDAzZWFzeW5jKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdC8qIEFzeW5jIHplcm9pemF0aW9uIHN0aWxsIGluIHByb2dyZXNzOyBrZWVwIHdhaXRpbmcgKi9cXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuIFxcdGNhc2UgQVBfUkVTUE9OU0VfREVDT05GSUdVUkVEOlxcbiBcXHRjYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDpcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBxdWV1ZSBpcyBub24tb3BlcmF0aW9uYWw6IGludGVycnVwdHMgYXJlIG5vdCBwb3NzaWJsZSBzb1xcbitcXHRcXHQgKiBBUUlDIHJlc291cmNlcyBjYW4gYmUgc2FmZWx5IGZyZWVkLiBIb3dldmVyLCB6ZXJvaXphdGlvblxcbitcXHRcXHQgKiBjYW5ub3QgYmUgY29uZmlybWVkIGJlY2F1c2UgYWxsIHN0YXR1cyBiaXRzIGFyZSB6ZXJvZWQgd2hlblxcbitcXHRcXHQgKiB0aGVzZSByZXNwb25zZSBjb2RlcyBhcmUgcmV0dXJuZWQg4oCUIHRoZXJlIGlzIG5vIHdheSB0b1xcbitcXHRcXHQgKiBkaXN0aW5ndWlzaCBhIHplcm9pemVkIHF1ZXVlIGZyb20gb25lIHRoYXQgaGFzIG5vdCBiZWVuXFxuK1xcdFxcdCAqIHplcm9pemVkLiBSZXR1cm4gLUVOT0RFViB0byBzaWduYWwgdGhhdCBBUUlDIHJlc291cmNlcyBzaG91bGRcXG4rXFx0XFx0ICogYmUgZnJlZWQgYnV0IHRoYXQgemVyb2l6YXRpb24gaGFzIG5vdCBiZWVuIGNvbmZpcm1lZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4gXFx0Y2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzpcXG4tXFx0Y2FzZSBBUF9SRVNQT05TRV9CVVNZOlxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBBIHJlc2V0IGlzIGluIHByb2dyZXNzLiBJdCBtYXkgYmUgdGhlIHJlc2V0IHdlIGlzc3VlZCBvciBvbmVcXG4rXFx0XFx0ICogaXNzdWVkIHByaW9yIHRvIG91cnM7IGVpdGhlciB3YXksIG9uY2UgaXQgY29tcGxldGVzIHRoZSBxdWV1ZVxcbitcXHRcXHQgKiB3aWxsIGJlIHplcm9pemVkLCBzbyBrZWVwIHdhaXRpbmcuXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0Y2FzZSBBUF9SRVNQT05TRV9CVVNZOlxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgcXVldWUgaXMgYnVzeSB3aXRoIHNvbWV0aGluZyB1bnJlbGF0ZWQgdG8gYSByZXNldCBhbmQgb3VyXFxuK1xcdFxcdCAqIFpBUFEgd2FzIHJlamVjdGVkIG91dHJpZ2h0LiBSZS1pc3N1ZSB0aGUgWkFQUS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJldHVybiAtRUFHQUlOO1xcbitcXG4gXFx0Y2FzZSBBUF9SRVNQT05TRV9BU1NPQ19TRUNSRVRfTk9UX1VOSVFVRTpcXG4gXFx0Y2FzZSBBUF9SRVNQT05TRV9BU1NPQ19GQUlMRUQ6XFxuIFxcdFxcdC8qXFxuQEAgLTE5MzUsNiArMjA1OSw3IEBAIHN0YXRpYyBpbnQgYXBxX3N0YXR1c19jaGVjayhpbnQgYXBxbiwgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyAqc3RhdHVzKVxcbiBcXHRcXHQgKiBhIHZhbHVlIGluZGljYXRpbmcgYSByZXNldCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgYWdhaW4uXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4rXFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFdBUk4odHJ1ZSxcXG4gXFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIHZlcmlmeSByZXNldCBvZiBxdWV1ZSAlMDJ4LiUwNHg6IFRBUFEgcmM9JXVcXFxcblxcXCIsXFxuQEAgLTE5NDQsNiArMjA2OSwzMyBAQCBzdGF0aWMgaW50IGFwcV9zdGF0dXNfY2hlY2soaW50IGFwcW4sIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgKnN0YXR1cylcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCByZXBvcnRfYXFpY19yZXNvdXJjZV9sZWFrKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxcbit7XFxuK1xcdGlmIChxLVxcdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRCB8fCBxLVxcdTAwM2VzYXZlZF9pb3ZhKSB7XFxuK1xcdFxcdGlmIChxLVxcdTAwM2VtYXRyaXhfbWRldikge1xcbitcXHRcXHRcXHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVxcdTAwM2VtYXRyaXhfbWRldi1cXHUwMDNlbWRldiksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIlJlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHg6IGxlYWtpbmcgQVFJQyByZXNvdXJjZXMgKE5JQiBwYWdlIFxcdTAwMjYgR0lTQykgdG8gcHJldmVudCBob3N0IGNyYXNoXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9DQVJEKHEtXFx1MDAzZWFwcW4pLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9RVUVVRShxLVxcdTAwM2VhcHFuKSk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcIlJlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHg6IGxlYWtpbmcgQVFJQyByZXNvdXJjZXMgKE5JQiBwYWdlIFxcdTAwMjYgR0lTQykgdG8gcHJldmVudCBob3N0IGNyYXNoXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgQVBfUUlEX0NBUkQocS1cXHUwMDNlYXBxbiksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBBUF9RSURfUVVFVUUocS1cXHUwMDNlYXBxbikpO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmIChxLVxcdTAwM2VtYXRyaXhfbWRldikge1xcbitcXHRcXHRcXHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVxcdTAwM2VtYXRyaXhfbWRldi1cXHUwMDNlbWRldiksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIlJlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgQVBfUUlEX0NBUkQocS1cXHUwMDNlYXBxbiksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgQVBfUUlEX1FVRVVFKHEtXFx1MDAzZWFwcW4pKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwiUmVzZXQgdGltZWQgb3V0IGZvciBBUFFOICUwMnguJTA0eFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIEFQX1FJRF9DQVJEKHEtXFx1MDAzZWFwcW4pLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgQVBfUUlEX1FVRVVFKHEtXFx1MDAzZWFwcW4pKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuICNkZWZpbmUgV0FJVF9NU0cgXFxcIldhaXRlZCAlZG1zIGZvciByZXNldCBvZiBxdWV1ZSAlMDJ4LiUwNHggKCV1LCAldSwgJXUpXFxcIlxcbiBcXG4gc3RhdGljIHZvaWQgYXBxX3Jlc2V0X2NoZWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqcmVzZXRfd29yaylcXG5AQCAtMTk2MSw2ICsyMTEzLDU2IEBAIHN0YXRpYyB2b2lkIGFwcV9yZXNldF9jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnJlc2V0X3dvcmspXFxuIFxcdFxcdHJldCA9IGFwcV9zdGF0dXNfY2hlY2socS1cXHUwMDNlYXBxbiwgXFx1MDAyNnN0YXR1cyk7XFxuIFxcdFxcdGlmIChyZXQgPT0gLUVJTylcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRpZiAocS1cXHUwMDNlcmVzZXRfbWF4X3dhaXQgXFx1MDAyNlxcdTAwMjYgZWxhcHNlZCBcXHUwMDNlPSBxLVxcdTAwM2VyZXNldF9tYXhfd2FpdCkge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBaZXJvaXphdGlvbiBjb25maXJtZWQgKHJldCA9PSAwKTogdGhlIFRBUFEgc3RhdHVzIGJpdHNcXG4rXFx0XFx0XFx0ICogaW5kaWNhdGUgdGhlIGFzeW5jIHBvcnRpb24gb2YgdGhlIFpBUFEgY29tcGxldGVkXFxuK1xcdFxcdFxcdCAqIHN1Y2Nlc3NmdWxseS4gRnJlZSBBUUlDIHJlc291cmNlcyBhbmQgcmV0dXJuLlxcbitcXHRcXHRcXHQgKlxcbitcXHRcXHRcXHQgKiBRdWV1ZSBub24tb3BlcmF0aW9uYWwgKHJldCA9PSAtRU5PREVWKTogdGhlIHF1ZXVlIGlzXFxuK1xcdFxcdFxcdCAqIGRlY29uZmlndXJlZCBvciBjaGVja3N0b3BwZWQ7IGludGVycnVwdHMgYXJlIG5vdFxcbitcXHRcXHRcXHQgKiBwb3NzaWJsZSBzbyBBUUlDIHJlc291cmNlcyBjYW4gYmUgc2FmZWx5IGZyZWVkLlxcbitcXHRcXHRcXHQgKiBaZXJvaXphdGlvbiBjYW5ub3QgYmUgY29uZmlybWVkIGluIHRoaXMgc3RhdGUsIGJ1dCB0aGVcXG4rXFx0XFx0XFx0ICogcXVldWUgY2Fubm90IGdlbmVyYXRlIGludGVycnVwdHMsIHNvIHRoZSBOSUIgcGFnZSBpc1xcbitcXHRcXHRcXHQgKiBubyBsb25nZXIgYSBETUEgdGFyZ2V0IGFuZCBpdCBpcyBzYWZlIHRvIGZyZWUgaXQuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoIXJldCB8fCByZXQgPT0gLUVOT0RFVilcXG4rXFx0XFx0XFx0XFx0Z290byBkb25lO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBUaW1lZCBvdXQgd2l0aG91dCBiZWluZyBhYmxlIHRvIHZlcmlmeSB6YXBxIGNvbXBsZXRlZC5cXG4rXFx0XFx0XFx0ICpcXG4rXFx0XFx0XFx0ICogVGhlIEFRSUMgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHF1ZXVlIC0gdGhlIHBpbm5lZFxcbitcXHRcXHRcXHQgKiBwYWdlIGNvbnRhaW5pbmcgdGhlIE5JQiBhbmQgdGhlIHJlZ2lzdGVyZWQgZ3Vlc3QgSVNDIC1cXG4rXFx0XFx0XFx0ICogY2Fubm90IGJlIGZyZWVkIGhlcmUuIFRoZSBOSUIgaXMgdGhlIGFjdGl2ZSBETUEgdGFyZ2V0XFxuK1xcdFxcdFxcdCAqIGZvciBBUCBpbnRlcnJ1cHQgZGVsaXZlcnkgdW50aWwgdGhlIHJlc2V0IGNvbXBsZXRlcztcXG4rXFx0XFx0XFx0ICogZnJlZWluZyB0aGUgcGlubmVkIHBhZ2Ugd2hpbGUgdGhlIGhhcmR3YXJlIG1heSBzdGlsbFxcbitcXHRcXHRcXHQgKiB3cml0ZSB0byBpdCB3b3VsZCByZXN1bHQgaW4gYSB3aWxkIERNQSB3cml0ZSB0aGF0IGNvdWxkXFxuK1xcdFxcdFxcdCAqIGNvcnJ1cHQgaG9zdCBtZW1vcnkuXFxuK1xcdFxcdFxcdCAqXFxuK1xcdFxcdFxcdCAqIElmIHRoZSByZXNldCBldmVudHVhbGx5IGNvbXBsZXRlcywgaW50ZXJydXB0cyB3aWxsIGJlXFxuK1xcdFxcdFxcdCAqIHRlcm1pbmF0ZWQgYW5kIHRoZSBwaW5uZWQgTklCIHBhZ2UgYW5kIElTQyByZWdpc3RyYXRpb25cXG4rXFx0XFx0XFx0ICogd2lsbCBiZSBsZWFrZWQuIFRoaXMgaXMgcHJlZmVyYWJsZSB0byBlaXRoZXIgYSB3aWxkIERNQVxcbitcXHRcXHRcXHQgKiB3cml0ZSBvciB3YWl0aW5nIGluZGVmaW5pdGVseTogZmx1c2hfd29yaygpIGNhbGxlcnMgaG9sZFxcbitcXHRcXHRcXHQgKiB0aGUgbWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayBtdXRleCB3aGljaCBzZXJpYWxpemVzIGFjY2Vzc1xcbitcXHRcXHRcXHQgKiB0byBhbGwgbWRldiBvYmplY3RzIHN5c3RlbS13aWRlLCBzbyBibG9ja2luZyBoZXJlIHdvdWxkXFxuK1xcdFxcdFxcdCAqIGhhbmcgYWxsIGd1ZXN0cyB0byB3aGljaCB0aG9zZSBtZGV2cyBhcmUgYXR0YWNoZWQuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRyZXBvcnRfYXFpY19yZXNvdXJjZV9sZWFrKHEpO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBSZXBvcnQgdGhlIGFjdHVhbCBub24temVybyBoYXJkd2FyZSByZXNwb25zZSBjb2RlLCBvclxcbitcXHRcXHRcXHQgKiBzeW50aGVzaXplIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTIGlmIFRBUFFcXG4rXFx0XFx0XFx0ICogY29tcGxldGVkIG5vcm1hbGx5IGJ1dCB0aGUgc3RhdHVzIGJpdHMgZmFpbGVkIHRvXFxuK1xcdFxcdFxcdCAqIHRyYW5zaXRpb24gdG8gdGhlaXIgcG9zdC1yZXNldCBzdGF0ZXMuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMKVxcbitcXHRcXHRcXHRcXHRxLVxcdTAwM2VyZXNldF9zdGF0dXMucmVzcG9uc2VfY29kZSA9IEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTO1xcbitcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdHEtXFx1MDAzZXJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlID0gc3RhdHVzLnJlc3BvbnNlX2NvZGU7XFxuK1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKCFyZXQgfHwgcmV0ID09IC1FTk9ERVYpXFxuK1xcdFxcdFxcdGdvdG8gZG9uZTtcXG4gXFx0XFx0aWYgKHJldCA9PSAtRUJVU1kpIHtcXG4gXFx0XFx0XFx0cHJfbm90aWNlX3JhdGVsaW1pdGVkKFdBSVRfTVNHLCBlbGFwc2VkLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBBUF9RSURfQ0FSRChxLVxcdTAwM2VhcHFuKSxcXG5AQCAtMTk3NSwxMyArMjE3NywxMyBAQCBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKVxcbiBcXHRcXHRcXHQgICAgcmV0ID09IC1FQUdBSU4pIHtcXG4gXFx0XFx0XFx0XFx0c3RhdHVzID0gYXBfemFwcShxLVxcdTAwM2VhcHFuLCAwKTtcXG4gXFx0XFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZxLVxcdTAwM2VyZXNldF9zdGF0dXMsIFxcdTAwMjZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTtcXG4tXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aWYgKHEtXFx1MDAzZXNhdmVkX2lzYyAhPSBWRklPX0FQX0lTQ19JTlZBTElEKVxcbi1cXHRcXHRcXHRcXHR2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4rXFxuK2RvbmU6XFxuK1xcdGlmIChxLVxcdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRClcXG4rXFx0XFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXFxuQEAgLTIwNjEsMTIgKzIyNjMsMjggQEAgc3RhdGljIGludCB2ZmlvX2FwX21kZXZfb3Blbl9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2KVxcbiBcXHRyZXR1cm4gdmZpb19hcF9tZGV2X3NldF9rdm0obWF0cml4X21kZXYsIHZkZXYtXFx1MDAzZWt2bSk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9yZWxlYXNlX2V2ZW50ZmRzKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXFxuK3tcXG4rXFx0aWYgKG1hdHJpeF9tZGV2LVxcdTAwM2VyZXFfdHJpZ2dlcikge1xcbitcXHRcXHRldmVudGZkX2N0eF9wdXQobWF0cml4X21kZXYtXFx1MDAzZXJlcV90cmlnZ2VyKTtcXG4rXFx0XFx0bWF0cml4X21kZXYtXFx1MDAzZXJlcV90cmlnZ2VyID0gTlVMTDtcXG4rXFx0fVxcbitcXHRpZiAobWF0cml4X21kZXYtXFx1MDAzZWNmZ19jaGdfdHJpZ2dlcikge1xcbitcXHRcXHRldmVudGZkX2N0eF9wdXQobWF0cml4X21kZXYtXFx1MDAzZWNmZ19jaGdfdHJpZ2dlcik7XFxuK1xcdFxcdG1hdHJpeF9tZGV2LVxcdTAwM2VjZmdfY2hnX3RyaWdnZXIgPSBOVUxMO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPVxcbiBcXHRcXHRjb250YWluZXJfb2YodmRldiwgc3RydWN0IGFwX21hdHJpeF9tZGV2LCB2ZGV2KTtcXG4gXFxuIFxcdHZmaW9fYXBfbWRldl91bnNldF9rdm0obWF0cml4X21kZXYpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuK1xcdHZmaW9fYXBfbWRldl9yZWxlYXNlX2V2ZW50ZmRzKG1hdHJpeF9tZGV2KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3JlcXVlc3Qoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2LCB1bnNpZ25lZCBpbnQgY291bnQpXFxuQEAgLTI0NTcsOCArMjY3NSwxMCBAQCBpbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxcbiBcXG4gXFx0cS1cXHUwMDNlYXBxbiA9IGFwcW47XFxuIFxcdHEtXFx1MDAzZXNhdmVkX2lzYyA9IFZGSU9fQVBfSVNDX0lOVkFMSUQ7XFxuLVxcdG1lbXNldChcXHUwMDI2cS1cXHUwMDNlcmVzZXRfc3RhdHVzLCAwLCBzaXplb2YocS1cXHUwMDNlcmVzZXRfc3RhdHVzKSk7XFxuK1xcdHEtXFx1MDAzZXJlc2V0X21heF93YWl0ID0gQVBfUkVTRVRfTUFYX1dBSVQ7XFxuIFxcdElOSVRfV09SSyhcXHUwMDI2cS1cXHUwMDNlcmVzZXRfd29yaywgYXBxX3Jlc2V0X2NoZWNrKTtcXG4rXFx0dmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlKHEpO1xcbitcXHRmbHVzaF93b3JrKFxcdTAwMjZxLVxcdTAwM2VyZXNldF93b3JrKTtcXG4gXFxuIFxcdGlmIChtYXRyaXhfbWRldikge1xcbiBcXHRcXHR2ZmlvX2FwX21kZXZfbGlua19xdWV1ZShtYXRyaXhfbWRldiwgcSk7XFxuQEAgLTI1NDEsOCArMjc2MSwxOSBAQCB2b2lkIHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXFxuIFxcdFxcdHZmaW9fYXBfdW5saW5rX3F1ZXVlX2ZyX21kZXYocSk7XFxuIFxcbiBcXHRkZXZfc2V0X2RydmRhdGEoXFx1MDAyNmFwZGV2LVxcdTAwM2VkZXZpY2UsIE5VTEwpO1xcbi1cXHRrZnJlZShxKTtcXG4gXFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX21kZXYobWF0cml4X21kZXYpO1xcbitcXG4rXFx0aWYgKHEtXFx1MDAzZXJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlICE9IEFQX1JFU1BPTlNFX05PUk1BTCkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBMb29wIHVudGlsIHplcm9pemF0aW9uIG9mIHF1ZXVlIGlzIHZlcmlmaWVkIHNvIHdlIGRvbid0IGxlYWtcXG4rXFx0XFx0ICogdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBxdWV1ZSB0byB0aGUgY2FsbGVyLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cS1cXHUwMDNlcmVzZXRfbWF4X3dhaXQgPSAwO1xcbitcXHRcXHR2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWUocSk7XFxuK1xcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNnEtXFx1MDAzZXJlc2V0X3dvcmspO1xcbitcXHR9XFxuK1xcbitcXHRrZnJlZShxKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTI2OTcsMTEgKzI5MjgsMTEgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X29uX2NmZ19yZW1vdmUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpjdXJfY29uZmlnX2luZm8sXFxuIFxcdGRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kbm90KGFxcmVtLFxcbiBcXHRcXHRcXHRcXHQgICAodW5zaWduZWQgbG9uZyAqKXByZXZfY29uZmlnX2luZm8tXFx1MDAzZWFxbSxcXG4gXFx0XFx0XFx0XFx0ICAgKHVuc2lnbmVkIGxvbmcgKiljdXJfY29uZmlnX2luZm8tXFx1MDAzZWFxbSxcXG4tXFx0XFx0XFx0XFx0ICAgQVBfREVWSUNFUyk7XFxuK1xcdFxcdFxcdFxcdCAgIEFQX0RPTUFJTlMpO1xcbiBcXHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChjZHJlbSxcXG4gXFx0XFx0XFx0XFx0ICAgKHVuc2lnbmVkIGxvbmcgKilwcmV2X2NvbmZpZ19pbmZvLVxcdTAwM2VhZG0sXFxuIFxcdFxcdFxcdFxcdCAgICh1bnNpZ25lZCBsb25nICopY3VyX2NvbmZpZ19pbmZvLVxcdTAwM2VhZG0sXFxuLVxcdFxcdFxcdFxcdCAgIEFQX0RFVklDRVMpO1xcbitcXHRcXHRcXHRcXHQgICBBUF9ET01BSU5TKTtcXG4gXFxuIFxcdGlmIChkb19yZW1vdmUpXFxuIFxcdFxcdHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlKGFwcmVtLCBhcXJlbSwgY2RyZW0pO1xcbkBAIC0yODEyLDcgKzMwNDMsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX2FkZCh1bnNpZ25lZCBsb25nICphcG1fYWRkLCB1bnNpZ25lZCBsb25nICphcW1fYWRkLFxcbiBcXHRcXHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVxcdTAwM2VhcW1fYWRkLFxcbiBcXHRcXHRcXHQgICBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFxbSwgYXFtX2FkZCwgQVBfRE9NQUlOUyk7XFxuIFxcdFxcdGJpdG1hcF9hbmQobWF0cml4X21kZXYtXFx1MDAzZWFkbV9hZGQsXFxuLVxcdFxcdFxcdCAgIG1hdHJpeF9tZGV2LVxcdTAwM2VtYXRyaXguYWRtLCBhZG1fYWRkLCBBUF9ERVZJQ0VTKTtcXG4rXFx0XFx0XFx0ICAgbWF0cml4X21kZXYtXFx1MDAzZW1hdHJpeC5hZG0sIGFkbV9hZGQsIEFQX0RPTUFJTlMpO1xcbiBcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaFxcbmluZGV4IDliZmY2NjZiMGIzNWQuLjkxNGVhNWQ0MWQzMzAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaFxcbisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmhcXG5AQCAtMTM5LDYgKzEzOSw4IEBAIHN0cnVjdCBhcF9tYXRyaXhfbWRldiB7XFxuICAqXFx0XFx0IHRoYXQgbmVlZCB0byBiZSByZXNldFxcbiAgKiBAcmVzZXRfc3RhdHVzOiB0aGUgc3RhdHVzIGZyb20gdGhlIGxhc3QgcmVzZXQgb2YgdGhlIHF1ZXVlXFxuICAqIEByZXNldF93b3JrOiB3b3JrIHRvIHdhaXQgZm9yIHF1ZXVlIHJlc2V0IHRvIGNvbXBsZXRlXFxuKyAqIEByZXNldF9tYXhfd2FpdDogdGhlIG1heCBhbW91bnQgb2YgdGltZSB0byB3YWl0IGZvciBhIHJlc2V0IHRvIGNvbXBsZXRlO1xcbisgKlxcdFxcdCAgICBzcGVjaWZ5aW5nIDAgbWVhbnMgd2FpdCBhcyBsb25nIGFzIGl0IHRha2VzLlxcbiAgKi9cXG4gc3RydWN0IHZmaW9fYXBfcXVldWUge1xcbiBcXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xcbkBAIC0xNTAsNiArMTUyLDcgQEAgc3RydWN0IHZmaW9fYXBfcXVldWUge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIHJlc2V0X3Fub2RlO1xcbiBcXHRzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHJlc2V0X3N0YXR1cztcXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3dvcms7XFxuK1xcdHVuc2lnbmVkIGludCByZXNldF9tYXhfd2FpdDtcXG4gfTtcXG4gXFxuIGludCB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIodm9pZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjIyOjA3Ljg1NzMxNjg2NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTcxNDk4MDQ0MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIFZGSU8gQVAgKEFkanVuY3QgUHJvY2Vzc29yKSBkcml2ZXIgaW4gZHJpdmVycy9zMzkwL2NyeXB0by8sIHdoaWNoIGlzIGV4Y2x1c2l2ZSB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUgKENPTkZJR19WRklPX0FQKSBhbmQgaXMgbmVpdGhlciBjb21waWxlZCBub3IgcmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYzYzg2OWM3ZmNkM2UyOTJmYjJmNmQyMjY0MjRhYTRhMjE3NGRlY2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDE4OjIyOjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXG5pbmRleCA5NDBjMGZmNjY4YmVlLi5lMDU0ZmQ0YTk0OTcwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXG4rKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbkBAIC0zMSw2ICszMSw3IEBAXG4gI2RlZmluZSBBUF9RVUVVRV9JTl9VU0UgXCJpbiB1c2VcIlxuIFxuICNkZWZpbmUgQVBfUkVTRVRfSU5URVJWQUxcdFx0MjBcdC8qIFJlc2V0IHNsZWVwIGludGVydmFsICgyMG1zKVx0XHQqL1xuKyNkZWZpbmUgQVBfUkVTRVRfTUFYX1dBSVRcdFx0MjAwMFx0LyogTWF4aW11bSB3YWl0IGZvciByZXNldCAoMjAwMG1zKVx0Ki9cbiBcbiBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZXMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldik7XG4gc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcmVzZXRfcWxpc3Qoc3RydWN0IGxpc3RfaGVhZCAqcWxpc3QpO1xuQEAgLTIyNiwxNiArMjI3LDI3IEBAIHN0YXRpYyBzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqdmZpb19hcF9tZGV2X2dldF9xdWV1ZShcbiB9XG4gXG4gLyoqXG4tICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhciAtIGNsZWFycyB0aGUgSVIgYml0IG9yIGdpdmVzIHVwIGFmdGVyIDUgdHJpZXNcbi0gKiBAYXBxbjogVGhlIEFQIFF1ZXVlIG51bWJlclxuLSAqXG4tICogQ2hlY2tzIHRoZSBJUlEgYml0IGZvciB0aGUgc3RhdHVzIG9mIHRoaXMgQVBRTiB1c2luZyBhcF90YXBxLlxuLSAqIFJldHVybnMgaWYgdGhlIGFwX3RhcHEgZnVuY3Rpb24gc3VjY2VlZGVkIGFuZCB0aGUgYml0IGlzIGNsZWFyLlxuLSAqIFJldHVybnMgaWYgYXBfdGFwcSBmdW5jdGlvbiBmYWlsZWQgd2l0aCBpbnZhbGlkLCBkZWNvbmZpZ3VyZWQgb3Jcbi0gKiBjaGVja3N0b3BwZWQgQVAuXG4tICogT3RoZXJ3aXNlIHJldHJpZXMgdXAgdG8gNSB0aW1lcyBhZnRlciB3YWl0aW5nIDIwbXMuXG4rICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhciAtIHdhaXQgZm9yIHRoZSBJUiBiaXQgdG8gY2xlYXIgYWZ0ZXIgYSBkaXNhYmxlXG4rICpcbisgKiBAYXBxbjogdGhlIEFQUU4gb2YgdGhlIHF1ZXVlXG4rICpcbisgKiBSZXBlYXRlZGx5IHBvbGxzIHRoZSBBUCBxdWV1ZSBzdGF0dXMgdmlhIFBRQVAoVEFQUSkgZXZlcnkgMjBtcyB1bnRpbCB0aGUgSVJcbisgKiBiaXQgaXMgY2xlYXIsIHRoZSBxdWV1ZSBiZWNvbWVzIG5vbi1vcGVyYXRpb25hbCwgb3IgNSByZXRyaWVzIGFyZSBleGhhdXN0ZWQuXG4rICpcbisgKiBCZWNhdXNlIFBRQVAoQVFJQykgZGlzYWJsZSBpbml0aWF0ZXMgYW4gYXN5bmNocm9ub3VzIHByb2Nlc3MsIGFcbisgKiBjb25kaXRpb24tY29kZSAwIGNvbXBsZXRpb24gZG9lcyBub3QgZ3VhcmFudGVlIHRoZSBJUiBiaXQgaGFzIGJlZW4gY2xlYXJlZC5cbisgKiBUaGUgaG9zdCBtdXN0IGNvbmZpcm0gSVI9MCBiZWZvcmUgdW5waW5uaW5nIHRoZSBOSUIgcGFnZSB0byBhdm9pZCBhIHdpbGRcbisgKiBETUEgd3JpdGUgdG8gYSBmcmVlZCBwYWdlLlxuKyAqXG4rICogUmV0dXJuOlxuKyAqIC0gMFx0XHRpZiB0aGUgSVIgYml0IGlzIGNsZWFyIChpLmUuLCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCkuXG4rICpcbisgKiAtIC1FTk9ERVZcdGlmIHRoZSBQUUFQLVRBUFEgcmVzcG9uc2UgY29kZSBpbmRpY2F0ZXMgdGhlIHF1ZXVlIGlzIG5vdCBhdmFpbGFibGUsXG4rICpcdFx0aXMgZGVjb25maWd1cmVkLCBvciBpcyBjaGVja3N0b3BwZWQgKGkuZS4sIG5vdCBvcGVyYXRpb25hbCkuXG4rICpcbisgKiAtIC1FVElNRURPVVRcdHRoZSBmdW5jdGlvbiB0aW1lZCBvdXQgYmVmb3JlIHRoZSBJUiBiaXQgd2FzIGNsZWFyZWQuXG4gICovXG4tc3RhdGljIHZvaWQgdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcihpbnQgYXBxbilcbitzdGF0aWMgaW50IHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoaW50IGFwcW4pXG4ge1xuIFx0c3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXM7XG4gXHRpbnQgcmV0cnkgPSA1O1xuQEAgLTI0Niw3ICsyNTgsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKGludCBhcHFuKVxuIFx0XHRjYXNlIEFQX1JFU1BPTlNFX05PUk1BTDpcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzpcbiBcdFx0XHRpZiAoIXN0YXR1cy5pcnFfZW5hYmxlZClcbi1cdFx0XHRcdHJldHVybjtcbitcdFx0XHRcdHJldHVybiAwO1xuIFx0XHRcdGZhbGx0aHJvdWdoO1xuIFx0XHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XG4gXHRcdFx0bXNsZWVwKDIwKTtcbkBAIC0yNTcsMTIgKzI2OSwxNSBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKGludCBhcHFuKVxuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdFdBUk5fT05DRSgxLCBcIiVzOiB0YXBxIHJjICUwMng6ICUwNHhcXG5cIiwgX19mdW5jX18sXG4gXHRcdFx0XHQgIHN0YXR1cy5yZXNwb25zZV9jb2RlLCBhcHFuKTtcbi1cdFx0XHRyZXR1cm47XG4rXHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHRcdH1cbiBcdH0gd2hpbGUgKC0tcmV0cnkpO1xuIFxuLVx0V0FSTl9PTkNFKDEsIFwiJXM6IHRhcHEgcmMgJTAyeDogJTA0eCBjb3VsZCBub3QgY2xlYXIgSVIgYml0XFxuXCIsXG4tXHRcdCAgX19mdW5jX18sIHN0YXR1cy5yZXNwb25zZV9jb2RlLCBhcHFuKTtcbitcdFdBUk5fT05DRSgxLCBcIiVzOiB0YXBxIHJjICUwMng6IHRpbWVkIG91dCB3YWl0aW5nIGZvciBpbnRlcnJ1cHRzIGRpc2FibGVkIGZvciAlMDJ4LiUwNHhcXG5cIixcbitcdFx0ICBfX2Z1bmNfXywgc3RhdHVzLnJlc3BvbnNlX2NvZGUsXG4rXHRcdCAgQVBfUUlEX0NBUkQoYXBxbiksIEFQX1FJRF9RVUVVRShhcHFuKSk7XG4rXG4rXHRyZXR1cm4gLUVUSU1FRE9VVDtcbiB9XG4gXG4gLyoqXG5AQCAtMjg5LDIwICszMDQsMjggQEAgc3RhdGljIHZvaWQgdmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxuIH1cbiBcbiAvKipcbi0gKiB2ZmlvX2FwX2lycV9kaXNhYmxlIC0gZGlzYWJsZXMgYW5kIGNsZWFycyBhbiBhcF9xdWV1ZSBpbnRlcnJ1cHRcbi0gKiBAcTogVGhlIHZmaW9fYXBfcXVldWVcbisgKiB2ZmlvX2FwX2lycV9kaXNhYmxlIC0gZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciBhbiBBUCBxdWV1ZVxuKyAqIEBxOiB0aGUgdmZpb19hcF9xdWV1ZVxuICAqXG4tICogVXNlcyBhcF9hcWljIHRvIGRpc2FibGUgdGhlIGludGVycnVwdGlvbiBhbmQgaW4gY2FzZSBvZiBzdWNjZXNzLCByZXNldFxuLSAqIGluIHByb2dyZXNzIG9yIElSUSBkaXNhYmxlIGNvbW1hbmQgYWxyZWFkeSBwcm9jZWVkZWQ6IGNhbGxzXG4tICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcigpIHRvIGNoZWNrIGZvciB0aGUgSVJRIGJpdCB0byBiZSBjbGVhclxuLSAqIGFuZCBjYWxscyB2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMoKSB0byBmcmVlIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZFxuLSAqIHdpdGggdGhlIEFQIGludGVycnVwdCBoYW5kbGluZy5cbisgKiBJc3N1ZXMgUFFBUChBUUlDKSB0byBkaXNhYmxlIGludGVycnVwdHMgZm9yIHRoZSBBUCBxdWV1ZS4gT24gc3VjY2Vzc1xuKyAqIChBUF9SRVNQT05TRV9OT1JNQUwgb3IgQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQpLCBwb2xscyB2aWFcbisgKiB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKCkgdW50aWwgdGhlIElSIGJpdCBpcyBjb25maXJtZWQgY2xlYXIgYmVmb3JlXG4rICogZnJlZWluZyB0aGUgcGlubmVkIE5JQiBwYWdlIGFuZCB1bnJlZ2lzdGVyaW5nIHRoZSBndWVzdCBJU0MuIFRoaXMgd2FpdCBpc1xuKyAqIG5lY2Vzc2FyeSBiZWNhdXNlIEFRSUMgZGlzYWJsZSBpcyBhc3luY2hyb25vdXM6IGZyZWVpbmcgdGhlIE5JQiBiZWZvcmUgSVI9MFxuKyAqIGlzIGNvbmZpcm1lZCByaXNrcyBhIHdpbGQgRE1BIHdyaXRlIHRvIGEgZnJlZWQgaG9zdCBwYWdlLlxuICAqXG4tICogSW4gdGhlIGNhc2UgdGhlIEFQIGlzIGJ1c3ksIG9yIGEgcmVzZXQgaXMgaW4gcHJvZ3Jlc3MsXG4tICogcmV0cmllcyBhZnRlciAyMG1zLCB1cCB0byA1IHRpbWVzLlxuKyAqIFJldHJpZXMgdXAgdG8gNSB0aW1lcyAod2l0aCAyMG1zIHNsZWVwKSBpZiB0aGUgcXVldWUgaXMgYnVzeSBvciBhIHJlc2V0IGlzXG4rICogaW4gcHJvZ3Jlc3MuXG4gICpcbi0gKiBSZXR1cm5zIGlmIGFwX2FxaWMgZnVuY3Rpb24gZmFpbGVkIHdpdGggaW52YWxpZCwgZGVjb25maWd1cmVkIG9yXG4tICogY2hlY2tzdG9wcGVkIEFQLlxuKyAqIElmIHRoZSBJUiBiaXQgY2Fubm90IGJlIGNvbmZpcm1lZCBjbGVhciAodGltZW91dCksIHRoZSBOSUIgcGFnZSBhbmQgZ3Vlc3RcbisgKiBJU0MgYXJlIGludGVudGlvbmFsbHkgbGVha2VkLiBJZiB0aGUgcGFnZSB3ZXJlIHVucGlubmVkIGFuZCByZXR1cm5lZCB0byB0aGVcbisgKiBhbGxvY2F0b3IsIGEgc3Vic2VxdWVudCBoYXJkd2FyZSBETUEgd3JpdGUgdG8gdGhhdCBwaHlzaWNhbCBhZGRyZXNzIHdvdWxkXG4rICogY29ycnVwdCBtZW1vcnkgYmVsb25naW5nIHRvIGEgbmV3IG93bmVyIOKAlCBhIHdpbGQgRE1BIHdyaXRlIHRoYXQgY291bGQgY3Jhc2hcbisgKiBvciBjb21wcm9taXNlIHRoZSBob3N0IGtlcm5lbC5cbisgKlxuKyAqIElmIHRoZSBxdWV1ZSBpcyBub24tb3BlcmF0aW9uYWwgKGRlY29uZmlndXJlZCwgY2hlY2tzdG9wcGVkLCBub3QgYXZhaWxhYmxlKSxcbisgKiByZXNvdXJjZXMgYXJlIGZyZWVkIGltbWVkaWF0ZWx5IHNpbmNlIHRoZSBoYXJkd2FyZSBjYW4gbm8gbG9uZ2VyIHdyaXRlIHRvXG4rICogdGhlIE5JQi5cbiAgKlxuICAqIFJldHVybjogXHUwMDI2c3RydWN0IGFwX3F1ZXVlX3N0YXR1c1xuICAqL1xuQEAgLTMxMCwxNSArMzMzLDM4IEBAIHN0YXRpYyBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHZmaW9fYXBfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4ge1xuIFx0dW5pb24gYXBfcWlycV9jdHJsIGFxaWNfZ2lzYSA9IHsgLnZhbHVlID0gMCB9O1xuIFx0c3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXM7XG4tXHRpbnQgcmV0cmllcyA9IDU7XG4rXHRpbnQgcmV0cmllcyA9IDUsIHJldDtcbiBcbiBcdGRvIHtcbiBcdFx0c3RhdHVzID0gYXBfYXFpYyhxLVx1MDAzZWFwcW4sIGFxaWNfZ2lzYSwgMCk7XG4gXHRcdHN3aXRjaCAoc3RhdHVzLnJlc3BvbnNlX2NvZGUpIHtcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDpcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6XG4tXHRcdFx0dmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcihxLVx1MDAzZWFwcW4pO1xuLVx0XHRcdGdvdG8gZW5kX2ZyZWU7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBBUUlDIGRpc2FibGUgd2FzIGFjY2VwdGVkIChOT1JNQUwpLCBvciB0aGUgcXVldWUgd2FzXG4rXHRcdFx0ICogYWxyZWFkeSBkaXNhYmxlZCBvciBhIHByaW9yIGFzeW5jIHJlcXVlc3QgaXMgc3RpbGxcbitcdFx0XHQgKiBjb21wbGV0aW5nIChPVEhFUldJU0VfQ0hBTkdFRCkuICBJbiBib3RoIGNhc2VzLCB3ZSBtdXN0XG4rXHRcdFx0ICogd2FpdCB1bnRpbCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBoYXMgYmVlbiBkaXNhYmxlZFxuK1x0XHRcdCAqIGJlZm9yZSBwcm9jZWVkaW5nLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHJldCA9IHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIocS1cdTAwM2VhcHFuKTtcbitcdFx0XHRpZiAocmV0ID09IDAgfHwgcmV0ID09IC1FTk9ERVYpXG4rXHRcdFx0XHRnb3RvIGVuZF9mcmVlO1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogVGltZWQgb3V0IHdhaXRpbmcgdG8gY29uZmlybSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC5cbitcdFx0XHQgKiBJZiBhcF9hcWljIHJldHVybmVkIE5PUk1BTCwgdGhlIGd1ZXN0IHdvdWxkIGluY29ycmVjdGx5XG4rXHRcdFx0ICogaW50ZXJwcmV0IHRoYXQgYXMgYSBzdWNjZXNzZnVsIGRpc2FibGUgYW5kIG1heSBmcmVlIG9yXG4rXHRcdFx0ICogcmV1c2UgdGhlIE5JQiB3aGlsZSBoYXJkd2FyZSBjYW4gc3RpbGwgd3JpdGUgdG8gaXQuXG4rXHRcdFx0ICogWmVybyB0aGUgc3RhdHVzIHdvcmQgYW5kIHNldCBPVEhFUldJU0VfQ0hBTkdFRCB0byBtaW1pY1xuK1x0XHRcdCAqIHdoYXQgdGhlIGhhcmR3YXJlIGRvZXMgZm9yIHRoYXQgcmVzcG9uc2UgY29kZS4gVGhpc1xuK1x0XHRcdCAqIHNpZ25hbHMgdG8gdGhlIGd1ZXN0IHRoYXQgdGhlIHJlc2V0IG9wZXJhdGlvbiBkaWQgbm90XG4rXHRcdFx0ICogY29tcGxldGUuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKHN0YXR1cy5yZXNwb25zZV9jb2RlID09IEFQX1JFU1BPTlNFX05PUk1BTCkge1xuK1x0XHRcdFx0bWVtc2V0KFx1MDAyNnN0YXR1cywgMCwgc2l6ZW9mKHN0YXR1cykpO1xuK1x0XHRcdFx0c3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDtcbitcdFx0XHR9XG4rXHRcdFx0Z290byBlbmRfZmFpbDtcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzpcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9CVVNZOlxuIFx0XHRcdG1zbGVlcCgyMCk7XG5AQCAtMzI2LDE4ICszNzIsNDcgQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9RX05PVF9BVkFJTDpcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOlxuK1x0XHRcdC8qIEFQIG5vdCBvcGVyYXRpb25hbDsgbm8gZnVydGhlciBpbnRlcnJ1cHRzIHBvc3NpYmxlICovXG4rXHRcdFx0V0FSTl9PTkNFKDEsIFwiJXM6IGFwX2FxaWMgc3RhdHVzICVkXFxuXCIsIF9fZnVuY19fLFxuK1x0XHRcdFx0ICBzdGF0dXMucmVzcG9uc2VfY29kZSk7XG4rXHRcdFx0Z290byBlbmRfZnJlZTtcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1M6XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0LyogQWxsIGNhc2VzIGluIGRlZmF1bHQgbWVhbnMgQVAgbm90IG9wZXJhdGlvbmFsICovXG4rXHRcdFx0LypcbitcdFx0XHQgKiBUaGUgQVFJQyBkaXNhYmxlIHdhcyByZWplY3RlZDsgSVJRIGlzIHN0aWxsIGVuYWJsZWRcbitcdFx0XHQgKiBhbmQgdGhlIGhhcmR3YXJlIHN0aWxsIGhvbGRzIHRoZSBOSUIgYWRkcmVzcy4gRG8gbm90XG4rXHRcdFx0ICogZnJlZSByZXNvdXJjZXMuXG4rXHRcdFx0ICovXG4gXHRcdFx0V0FSTl9PTkNFKDEsIFwiJXM6IGFwX2FxaWMgc3RhdHVzICVkXFxuXCIsIF9fZnVuY19fLFxuIFx0XHRcdFx0ICBzdGF0dXMucmVzcG9uc2VfY29kZSk7XG4tXHRcdFx0Z290byBlbmRfZnJlZTtcbitcdFx0XHRnb3RvIGVuZF9mYWlsO1xuIFx0XHR9XG4gXHR9IHdoaWxlIChyZXRyaWVzLS0pO1xuIFxuIFx0V0FSTl9PTkNFKDEsIFwiJXM6IGFwX2FxaWMgc3RhdHVzICVkXFxuXCIsIF9fZnVuY19fLFxuIFx0XHQgIHN0YXR1cy5yZXNwb25zZV9jb2RlKTtcbitcbitlbmRfZmFpbDpcbitcdC8qXG4rXHQgKiBXZSBhcmUgaGVyZSBlaXRoZXIgYmVjYXVzZSB0aGUgQVFJQyBpbnN0cnVjdGlvbiBmYWlsZWQgdG8gZGlzYWJsZVxuK1x0ICogaW50ZXJydXB0cywgb3IgYmVjYXVzZSBJUj0wIGNvdWxkIG5vdCBiZSBjb25maXJtZWQuIEluIGVpdGhlciBjYXNlXG4rXHQgKiB0aGUgTklCIHBhZ2UgYW5kIGd1ZXN0IElTQyBjYW5ub3QgYmUgZnJlZWQ6IGhhcmR3YXJlIG1heSBzdGlsbCB3cml0ZVxuK1x0ICogdG8gdGhlIE5JQiwgYW5kIHVucGlubmluZyB0aGUgcGFnZSB3b3VsZCBhbGxvdyBpdCB0byBiZSByZWFsbG9jYXRlZFxuK1x0ICogdG8gYSBuZXcgb3duZXIuIEEgc3Vic2VxdWVudCBoYXJkd2FyZSBETUEgd3JpdGUgdG8gdGhhdCBwaHlzaWNhbFxuK1x0ICogYWRkcmVzcyB3b3VsZCBjb3JydXB0IHRoZSBuZXcgb3duZXIncyBtZW1vcnkg4oCUIGEgd2lsZCBETUEgd3JpdGUgdGhhdFxuK1x0ICogY291bGQgY3Jhc2ggb3IgY29tcHJvbWlzZSB0aGUgaG9zdCBrZXJuZWwuIFRoZSByZXNvdXJjZXMgYXJlXG4rXHQgKiB0aGVyZWZvcmUgaW50ZW50aW9uYWxseSBsZWFrZWQuXG4rXHQgKi9cbitcdHJldHVybiBzdGF0dXM7XG4rXG4gZW5kX2ZyZWU6XG4rXHQvKlxuK1x0ICogVGhpcyBsYWJlbCBpcyByZWFjaGVkIGJlY2F1c2UgdGhlIHF1ZXVlIHdhcyBzdWNjZXNzZnVsbHkgZGlzYWJsZWQsXG4rXHQgKiBvciBiZWNhdXNlIHRoZSBxdWV1ZSBpcyBub3Qgb3BlcmF0aW9uYWwgb3Igbm90IGF2YWlsYWJsZSwgaW4gd2hpY2ggY2FzZVxuK1x0ICogaW50ZXJydXB0cyBjYW4gbm90IGJlIHByb2Nlc3NlZCwgc28gZnJlZSB0aGUgQVFJQyByZXNvdXJjZXMgLSB0aGUgcGlubmVkIE5JQlxuK1x0ICogcGFnZSBhbmQgdGhlIHJlZ2lzdGVyZWQgZ3Vlc3QgSVNDIC0gdXNlZCB0byBlbmFibGUgaW50ZXJydXB0cyBzbyB0aGV5IHdpbGxcbitcdCAqIG5vdCBiZSBsZWFrZWQuXG4rXHQgKi9cbiBcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcbiBcdHJldHVybiBzdGF0dXM7XG4gfVxuQEAgLTQwMSwyMiArNDc2LDI5IEBAIHN0YXRpYyBpbnQgZW5zdXJlX25pYl9zaGFyZWQodW5zaWduZWQgbG9uZyBhZGRyKVxuIH1cbiBcbiAvKipcbi0gKiB2ZmlvX2FwX2lycV9lbmFibGUgLSBFbmFibGUgSW50ZXJydXB0aW9uIGZvciBhIEFQUU5cbisgKiB2ZmlvX2FwX2lycV9lbmFibGUgLSBlbmFibGUgaW50ZXJydXB0cyBmb3IgYW4gQVAgcXVldWUgb24gYmVoYWxmIG9mIGEgZ3Vlc3RcbiAgKlxuLSAqIEBxOlx0IHRoZSB2ZmlvX2FwX3F1ZXVlIGhvbGRpbmcgQVFJQyBwYXJhbWV0ZXJzXG4rICogQHE6XHQgdGhlIHZmaW9fYXBfcXVldWUgZm9yIHdoaWNoIGludGVycnVwdHMgYXJlIHRvIGJlIGVuYWJsZWRcbiAgKiBAaXNjOiB0aGUgZ3Vlc3QgSVNDIHRvIHJlZ2lzdGVyIHdpdGggdGhlIEdJQiBpbnRlcmZhY2Vcbi0gKiBAdmNwdTogdGhlIHZjcHUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZ2lzdGVycyBzcGVjaWZ5aW5nIHRoZSBwYXJhbWV0ZXJzXG4tICpcdCAgcGFzc2VkIHRvIHRoZSBQUUFQKEFRSUMpIGluc3RydWN0aW9uLlxuKyAqIEB2Y3B1OiB0aGUgdmNwdSB3aG9zZSByZWdpc3RlcnMgY29udGFpbiB0aGUgUFFBUChBUUlDKSBwYXJhbWV0ZXJzXG4rICpcbisgKiBQaW5zIHRoZSBndWVzdCBOSUIgcGFnZSwgcmVnaXN0ZXJzIHRoZSBndWVzdCBJU0Mgd2l0aCB0aGUgR0lCIHRvIG9idGFpbiBhXG4rICogaG9zdCBJU0MsIGFuZCByZWlzc3VlcyBQUUFQKEFRSUMpIHdpdGggdGhlIHRyYW5zbGF0ZWQgaG9zdC1hYnNvbHV0ZSBOSUJcbisgKiBhZGRyZXNzIGFuZCBob3N0IElTQyBvbiBiZWhhbGYgb2YgdGhlIGd1ZXN0LlxuICAqXG4tICogUGluIHRoZSBOSUIgc2F2ZWQgaW4gKnFcbi0gKiBSZWdpc3RlciB0aGUgZ3Vlc3QgSVNDIHRvIEdJQiBpbnRlcmZhY2UgYW5kIHJldHJpZXZlIHRoZVxuLSAqIGhvc3QgSVNDIHRvIGlzc3VlIHRoZSBob3N0IHNpZGUgUFFBUC9BUUlDXG4rICogVGhlIGNvbmRpdGlvbiBjb2RlIGFuZCBBUC1xdWV1ZSBzdGF0dXMgd29yZCByZXR1cm5lZCBieSBQUUFQKEFRSUMpIGFyZVxuKyAqIHJlZmxlY3RlZCBiYWNrIHRvIHRoZSBndWVzdCBhcy1pcy4gSVJRIHN0YXRlIHZlcmlmaWNhdGlvbiAocG9sbGluZyB1bnRpbFxuKyAqIElSPTEpIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgZ3Vlc3QgQVAgYnVzLCBub3QgdGhlIGhvc3QuXG4gICpcbi0gKiBzdGF0dXMucmVzcG9uc2VfY29kZSBtYXkgYmUgc2V0IHRvIEFQX1JFU1BPTlNFX0lOVkFMSURfQUREUkVTUyBpbiBjYXNlIHRoZVxuLSAqIHZmaW9fcGluX3BhZ2VzIG9yIGt2bV9zMzkwX2dpc2NfcmVnaXN0ZXIgZmFpbGVkLlxuKyAqIFJlc291cmNlIG1hbmFnZW1lbnQgaXMgYmFzZWQgc29sZWx5IG9uIHdoZXRoZXIgaGFyZHdhcmUgYWNjZXB0ZWQgdGhlIG5ldyBOSUI6XG4rICogLSBBUF9SRVNQT05TRV9OT1JNQUwgKENDPTApOiBoYXJkd2FyZSBhY2NlcHRlZCB0aGUgbmV3IE5JQjsgdGhlIG9sZCBwaW5uZWRcbisgKiAgIE5JQiBwYWdlIGFuZCByZWdpc3RlcmVkIGd1ZXN0IElTQyBhcmUgZnJlZWQgYW5kIHRoZSBuZXcgb25lcyBzYXZlZC5cbisgKiAtIEFsbCBvdGhlciByZXNwb25zZXM6IGhhcmR3YXJlIGRpZCBub3QgYWNjZXB0IHRoZSBuZXcgTklCOyB0aGUgbmV3bHkgcGlubmVkXG4rICogICBwYWdlIGFuZCByZWdpc3RlcmVkIElTQyBhcmUgZnJlZWQgYW5kIHRoZSBwcmV2aW91c2x5IHNhdmVkIHJlc291cmNlcyBhcmVcbisgKiAgIGxlZnQgaW50YWN0LlxuICAqXG4tICogT3RoZXJ3aXNlIHJldHVybiB0aGUgYXBfcXVldWVfc3RhdHVzIHJldHVybmVkIGJ5IHRoZSBhcF9hcWljKCksXG4tICogYWxsIHJldHJ5IGhhbmRsaW5nIHdpbGwgYmUgZG9uZSBieSB0aGUgZ3Vlc3QuXG4rICogQVBfUkVTUE9OU0VfSU5WQUxJRF9BRERSRVNTIGlzIHJldHVybmVkIGlmIHZmaW9fcGluX3BhZ2VzKCkgb3JcbisgKiBrdm1fczM5MF9naXNjX3JlZ2lzdGVyKCkgZmFpbHMgYmVmb3JlIHRoZSBBUUlDIGluc3RydWN0aW9uIGlzIGlzc3VlZC5cbiAgKlxuICAqIFJldHVybjogXHUwMDI2c3RydWN0IGFwX3F1ZXVlX3N0YXR1c1xuICAqL1xuQEAgLTQyOCwxMSArNTEwLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHZmaW9fYXBfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSxcbiBcdHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgc3RhdHVzID0ge307XG4gXHRzdHJ1Y3Qga3ZtX3MzOTBfZ2lzYSAqZ2lzYTtcbiBcdHN0cnVjdCBwYWdlICpoX3BhZ2U7XG4tXHRpbnQgbmlzYztcbitcdGludCBuaXNjLCByZXQ7XG4gXHRzdHJ1Y3Qga3ZtICprdm07XG4gXHRwaHlzX2FkZHJfdCBoX25pYjtcbiBcdGRtYV9hZGRyX3QgbmliO1xuLVx0aW50IHJldDtcbiBcbiBcdC8qIFZlcmlmeSB0aGF0IHRoZSBub3RpZmljYXRpb24gaW5kaWNhdG9yIGJ5dGUgYWRkcmVzcyBpcyB2YWxpZCAqL1xuIFx0aWYgKHZmaW9fYXBfdmFsaWRhdGVfbmliKHZjcHUsIFx1MDAyNm5pYikpIHtcbkBAIC00ODksMjQgKzU3MCwzMyBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4gXHRzdGF0dXMgPSBhcF9hcWljKHEtXHUwMDNlYXBxbiwgYXFpY19naXNhLCBoX25pYik7XG4gXHRzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7XG4gXHRjYXNlIEFQX1JFU1BPTlNFX05PUk1BTDpcbi1cdFx0LyogU2VlIGlmIHdlIGRpZCBjbGVhciBvbGRlciBJUlEgY29uZmlndXJhdGlvbiAqL1xuK1x0XHQvKlxuK1x0XHQgKiBIYXJkd2FyZSBhY2NlcHRlZCB0aGUgbmV3IE5JQiBhZGRyZXNzIChDQz0wKS4gVGhlIG9sZCBOSUIgYW5kXG4rXHRcdCAqIGd1ZXN0IElTQyBhcmUgbm8gbG9uZ2VyIHVzZWQgYnkgaGFyZHdhcmUgYW5kIGNhbiBiZSBmcmVlZC5cbitcdFx0ICogVGhlIG5ldyByZXNvdXJjZXMgYXJlIHNhdmVkIGZvciB0cmFja2luZyBhbmQgZnV0dXJlIHRlYXJkb3duLlxuK1x0XHQgKlxuK1x0XHQgKiBJUlEgc3RhdGUgdmVyaWZpY2F0aW9uIChwb2xsaW5nIHVudGlsIElSPTEpIGlzIHRoZVxuK1x0XHQgKiByZXNwb25zaWJpbGl0eSBvZiB0aGUgZ3Vlc3QgQVAgYnVzLCBub3QgdGhlIGhvc3QuIFRoZVxuK1x0XHQgKiBjb25kaXRpb24gY29kZSBhbmQgc3RhdHVzIHdvcmQgYXJlIHJlZmxlY3RlZCBiYWNrIHRvIHRoZVxuK1x0XHQgKiBndWVzdCB0byByZXNwb25kIHRvIHRoZSBQUUFQLUFRSUMgaW5zdHJ1Y3Rpb24uXG4rXHRcdCAqL1xuIFx0XHR2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7XG4gXHRcdHEtXHUwMDNlc2F2ZWRfaW92YSA9IG5pYjtcbiBcdFx0cS1cdTAwM2VzYXZlZF9pc2MgPSBpc2M7XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDpcbi1cdFx0LyogV2UgY291bGQgbm90IG1vZGlmeSBJUlEgc2V0dGluZ3M6IGNsZWFyIG5ldyBjb25maWd1cmF0aW9uICovXG4rXHRkZWZhdWx0OlxuK1x0XHQvKlxuK1x0XHQgKiBIYXJkd2FyZSBkaWQgbm90IGFjY2VwdCB0aGUgbmV3IE5JQiAoQ0M9MyBvciBlcnJvcikuIFRoZVxuK1x0XHQgKiBwcmV2aW91c2x5IHNhdmVkIE5JQiBhbmQgZ3Vlc3QgSVNDIHJlbWFpbiBhY3RpdmUgYW5kIG11c3RcbitcdFx0ICogbm90IGJlIGZyZWVkLiBSZWxlYXNlIHRoZSBuZXdseSBwaW5uZWQgcGFnZSBhbmQgcmVnaXN0ZXJlZFxuK1x0XHQgKiBJU0MgdGhhdCB3ZXJlIHByZXBhcmVkIGZvciB0aGlzIChyZWplY3RlZCkgcmVxdWVzdC5cbitcdFx0ICovXG4gXHRcdHJldCA9IGt2bV9zMzkwX2dpc2NfdW5yZWdpc3Rlcihrdm0sIGlzYyk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0VkZJT19BUF9EQkZfV0FSTihcIiVzOiBrdm1fczM5MF9naXNjX3VucmVnaXN0ZXI6IHJjPSVkIGlzYz0lZCwgYXBxbj0lIzA0eFxcblwiLFxuIFx0XHRcdFx0XHQgX19mdW5jX18sIHJldCwgaXNjLCBxLVx1MDAzZWFwcW4pO1xuIFx0XHR2ZmlvX3VucGluX3BhZ2VzKFx1MDAyNnEtXHUwMDNlbWF0cml4X21kZXYtXHUwMDNldmRldiwgbmliLCAxKTtcbiBcdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRwcl93YXJuKFwiJXM6IGFwcW4gJTA0eDogcmVzcG9uc2U6ICUwMnhcXG5cIiwgX19mdW5jX18sIHEtXHUwMDNlYXBxbixcbi1cdFx0XHRzdGF0dXMucmVzcG9uc2VfY29kZSk7XG4tXHRcdHZmaW9fYXBfaXJxX2Rpc2FibGUocSk7XG4tXHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0aWYgKHN0YXR1cy5yZXNwb25zZV9jb2RlICE9IEFQX1JFU1BPTlNFX05PUk1BTCkge1xuQEAgLTYzNSw3ICs3MjUsNiBAQCBzdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdH1cbiBcbiBcdHN0YXR1cyA9IHZjcHUtXHUwMDNlcnVuLVx1MDAzZXMucmVncy5ncHJzWzFdO1xuLVxuIFx0LyogSWYgSVIgYml0KDE2KSBpcyBzZXQgd2UgZW5hYmxlIHRoZSBpbnRlcnJ1cHQgKi9cbiBcdGlmICgoc3RhdHVzIFx1MDAzZVx1MDAzZSAoNjMgLSAxNikpIFx1MDAyNiAweDAxKVxuIFx0XHRxc3RhdHVzID0gdmZpb19hcF9pcnFfZW5hYmxlKHEsIHN0YXR1cyBcdTAwMjYgMHgwNywgdmNwdSk7XG5AQCAtNjkyLDE0ICs3ODEsMTQgQEAgc3RhdGljIGJvb2wgX3F1ZXVlX3Bhc3NhYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxuIFx0aWYgKCFxKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRzd2l0Y2ggKHEtXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUpIHtcbi1cdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxuLVx0Y2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6XG4tXHRjYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDpcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRkZWZhdWx0OlxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXHR9XG4rXHQvKlxuK1x0ICogQSBxdWV1ZSBpcyBvbmx5IHBhc3NhYmxlIGlmIHplcm9pemF0aW9uIHdhcyBjb25maXJtZWQgYnlcbitcdCAqIGFwcV9yZXNldF9jaGVjaygpIHZpYSBUQVBRIHN0YXR1cyBiaXQgdmVyaWZpY2F0aW9uLiBUaGlzIGlzXG4rXHQgKiBpbmRpY2F0ZWQgYnkgcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMICgwKS5cbitcdCAqIFRoaXMgaXMgdG8gcHJvdGVjdCBhZ2FpbnN0IGxlYWtpbmcgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBxdWV1ZVxuK1x0ICogdG8gdGhlIGd1ZXN0LlxuK1x0ICovXG4rXHRyZXR1cm4gcS1cdTAwM2VyZXNldF9zdGF0dXMucmVzcG9uc2VfY29kZSA9PSBBUF9SRVNQT05TRV9OT1JNQUw7XG4gfVxuIFxuIC8qXG5AQCAtMTQxMCw3ICsxNDk5LDcgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfZG9tYWluKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXG4ge1xuIFx0REVDTEFSRV9CSVRNQVAoYXBxaXMsIEFQX0RPTUFJTlMpO1xuIFxuLVx0Yml0bWFwX3plcm8oYXBxaXMsIEFQX0RFVklDRVMpO1xuK1x0Yml0bWFwX3plcm8oYXBxaXMsIEFQX0RPTUFJTlMpO1xuIFx0c2V0X2JpdF9pbnYoYXBxaSwgYXBxaXMpO1xuIFx0dmZpb19hcF9tZGV2X2hvdF91bnBsdWdfZG9tYWlucyhtYXRyaXhfbWRldiwgYXBxaXMpO1xuIH1cbkBAIC0xOTE5LDEyICsyMDA4LDQ3IEBAIHN0YXRpYyBpbnQgYXBxX3N0YXR1c19jaGVjayhpbnQgYXBxbiwgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyAqc3RhdHVzKVxuIHtcbiBcdHN3aXRjaCAoc3RhdHVzLVx1MDAzZXJlc3BvbnNlX2NvZGUpIHtcbiBcdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxuK1x0XHQvKlxuK1x0XHQgKiBUaGlzIHJlc3BvbnNlIGNvZGUgb25seSBpbmRpY2F0ZXMgdGhhdCB0aGUgUFFBUChaQVBRKSBoYXNcbitcdFx0ICogYmVlbiBpbml0aWF0ZWQuIFRoZSBmb2xsb3dpbmcgYml0IHNldHRpbmdzIGluIHRoZSBzdGF0dXNcbitcdFx0ICogcmV0dXJuZWQgZnJvbSBUQVBRIG11c3QgYmUgdmVyaWZpZWQgdG8gY29uZmlybSB0aGF0IHRoZVxuK1x0XHQgKiBhc3luY2hyb25vdXMgcG9ydGlvbiBvZiB0aGUgcXVldWUgemVyb2l6YXRpb24gaGFzIGNvbXBsZXRlZC5cbitcdFx0ICovXG4rXHRcdGlmIChzdGF0dXMtXHUwMDNlcXVldWVfZW1wdHkgXHUwMDI2XHUwMDI2ICFzdGF0dXMtXHUwMDNlcmVwbGllc193YWl0aW5nIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIXN0YXR1cy1cdTAwM2VpcnFfZW5hYmxlZCBcdTAwMjZcdTAwMjYgIXN0YXR1cy1cdTAwM2Vhc3luYylcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0LyogQXN5bmMgemVyb2l6YXRpb24gc3RpbGwgaW4gcHJvZ3Jlc3M7IGtlZXAgd2FpdGluZyAqL1xuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuIFx0Y2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6XG4gXHRjYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDpcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBxdWV1ZSBpcyBub24tb3BlcmF0aW9uYWw6IGludGVycnVwdHMgYXJlIG5vdCBwb3NzaWJsZSBzb1xuK1x0XHQgKiBBUUlDIHJlc291cmNlcyBjYW4gYmUgc2FmZWx5IGZyZWVkLiBIb3dldmVyLCB6ZXJvaXphdGlvblxuK1x0XHQgKiBjYW5ub3QgYmUgY29uZmlybWVkIGJlY2F1c2UgYWxsIHN0YXR1cyBiaXRzIGFyZSB6ZXJvZWQgd2hlblxuK1x0XHQgKiB0aGVzZSByZXNwb25zZSBjb2RlcyBhcmUgcmV0dXJuZWQg4oCUIHRoZXJlIGlzIG5vIHdheSB0b1xuK1x0XHQgKiBkaXN0aW5ndWlzaCBhIHplcm9pemVkIHF1ZXVlIGZyb20gb25lIHRoYXQgaGFzIG5vdCBiZWVuXG4rXHRcdCAqIHplcm9pemVkLiBSZXR1cm4gLUVOT0RFViB0byBzaWduYWwgdGhhdCBBUUlDIHJlc291cmNlcyBzaG91bGRcbitcdFx0ICogYmUgZnJlZWQgYnV0IHRoYXQgemVyb2l6YXRpb24gaGFzIG5vdCBiZWVuIGNvbmZpcm1lZC5cbitcdFx0ICovXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuIFx0Y2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzpcbi1cdGNhc2UgQVBfUkVTUE9OU0VfQlVTWTpcbitcdFx0LypcbitcdFx0ICogQSByZXNldCBpcyBpbiBwcm9ncmVzcy4gSXQgbWF5IGJlIHRoZSByZXNldCB3ZSBpc3N1ZWQgb3Igb25lXG4rXHRcdCAqIGlzc3VlZCBwcmlvciB0byBvdXJzOyBlaXRoZXIgd2F5LCBvbmNlIGl0IGNvbXBsZXRlcyB0aGUgcXVldWVcbitcdFx0ICogd2lsbCBiZSB6ZXJvaXplZCwgc28ga2VlcCB3YWl0aW5nLlxuK1x0XHQgKi9cbiBcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdGNhc2UgQVBfUkVTUE9OU0VfQlVTWTpcbitcdFx0LypcbitcdFx0ICogVGhlIHF1ZXVlIGlzIGJ1c3kgd2l0aCBzb21ldGhpbmcgdW5yZWxhdGVkIHRvIGEgcmVzZXQgYW5kIG91clxuK1x0XHQgKiBaQVBRIHdhcyByZWplY3RlZCBvdXRyaWdodC4gUmUtaXNzdWUgdGhlIFpBUFEuXG4rXHRcdCAqL1xuK1x0XHRyZXR1cm4gLUVBR0FJTjtcbitcbiBcdGNhc2UgQVBfUkVTUE9OU0VfQVNTT0NfU0VDUkVUX05PVF9VTklRVUU6XG4gXHRjYXNlIEFQX1JFU1BPTlNFX0FTU09DX0ZBSUxFRDpcbiBcdFx0LypcbkBAIC0xOTM1LDYgKzIwNTksNyBAQCBzdGF0aWMgaW50IGFwcV9zdGF0dXNfY2hlY2soaW50IGFwcW4sIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgKnN0YXR1cylcbiBcdFx0ICogYSB2YWx1ZSBpbmRpY2F0aW5nIGEgcmVzZXQgbmVlZHMgdG8gYmUgcGVyZm9ybWVkIGFnYWluLlxuIFx0XHQgKi9cbiBcdFx0cmV0dXJuIC1FQUdBSU47XG4rXG4gXHRkZWZhdWx0OlxuIFx0XHRXQVJOKHRydWUsXG4gXHRcdCAgICAgXCJmYWlsZWQgdG8gdmVyaWZ5IHJlc2V0IG9mIHF1ZXVlICUwMnguJTA0eDogVEFQUSByYz0ldVxcblwiLFxuQEAgLTE5NDQsNiArMjA2OSwzMyBAQCBzdGF0aWMgaW50IGFwcV9zdGF0dXNfY2hlY2soaW50IGFwcW4sIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgKnN0YXR1cylcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgcmVwb3J0X2FxaWNfcmVzb3VyY2VfbGVhayhzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcbit7XG4rXHRpZiAocS1cdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRCB8fCBxLVx1MDAzZXNhdmVkX2lvdmEpIHtcbitcdFx0aWYgKHEtXHUwMDNlbWF0cml4X21kZXYpIHtcbitcdFx0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuK1x0XHRcdFx0XHQgICAgIFwiUmVzZXQgdGltZWQgb3V0IGZvciBBUFFOICUwMnguJTA0eDogbGVha2luZyBBUUlDIHJlc291cmNlcyAoTklCIHBhZ2UgXHUwMDI2IEdJU0MpIHRvIHByZXZlbnQgaG9zdCBjcmFzaFxcblwiLFxuK1x0XHRcdFx0XHQgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4rXHRcdFx0XHRcdCAgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbikpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJSZXNldCB0aW1lZCBvdXQgZm9yIEFQUU4gJTAyeC4lMDR4OiBsZWFraW5nIEFRSUMgcmVzb3VyY2VzIChOSUIgcGFnZSBcdTAwMjYgR0lTQykgdG8gcHJldmVudCBob3N0IGNyYXNoXFxuXCIsXG4rXHRcdFx0XHRcdCAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuK1x0XHRcdFx0XHQgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbikpO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAocS1cdTAwM2VtYXRyaXhfbWRldikge1xuK1x0XHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXHUwMDNlbWF0cml4X21kZXYtXHUwMDNlbWRldiksXG4rXHRcdFx0XHRcdCAgICAgXCJSZXNldCB0aW1lZCBvdXQgZm9yIEFQUU4gJTAyeC4lMDR4XFxuXCIsXG4rXHRcdFx0XHRcdCAgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbitcdFx0XHRcdFx0ICAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcIlJlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHhcXG5cIixcbitcdFx0XHRcdFx0ICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4rXHRcdFx0XHRcdCAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSk7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4gI2RlZmluZSBXQUlUX01TRyBcIldhaXRlZCAlZG1zIGZvciByZXNldCBvZiBxdWV1ZSAlMDJ4LiUwNHggKCV1LCAldSwgJXUpXCJcbiBcbiBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKVxuQEAgLTE5NjEsNiArMjExMyw1NiBAQCBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKVxuIFx0XHRyZXQgPSBhcHFfc3RhdHVzX2NoZWNrKHEtXHUwMDNlYXBxbiwgXHUwMDI2c3RhdHVzKTtcbiBcdFx0aWYgKHJldCA9PSAtRUlPKVxuIFx0XHRcdHJldHVybjtcbitcdFx0aWYgKHEtXHUwMDNlcmVzZXRfbWF4X3dhaXQgXHUwMDI2XHUwMDI2IGVsYXBzZWQgXHUwMDNlPSBxLVx1MDAzZXJlc2V0X21heF93YWl0KSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBaZXJvaXphdGlvbiBjb25maXJtZWQgKHJldCA9PSAwKTogdGhlIFRBUFEgc3RhdHVzIGJpdHNcbitcdFx0XHQgKiBpbmRpY2F0ZSB0aGUgYXN5bmMgcG9ydGlvbiBvZiB0aGUgWkFQUSBjb21wbGV0ZWRcbitcdFx0XHQgKiBzdWNjZXNzZnVsbHkuIEZyZWUgQVFJQyByZXNvdXJjZXMgYW5kIHJldHVybi5cbitcdFx0XHQgKlxuK1x0XHRcdCAqIFF1ZXVlIG5vbi1vcGVyYXRpb25hbCAocmV0ID09IC1FTk9ERVYpOiB0aGUgcXVldWUgaXNcbitcdFx0XHQgKiBkZWNvbmZpZ3VyZWQgb3IgY2hlY2tzdG9wcGVkOyBpbnRlcnJ1cHRzIGFyZSBub3RcbitcdFx0XHQgKiBwb3NzaWJsZSBzbyBBUUlDIHJlc291cmNlcyBjYW4gYmUgc2FmZWx5IGZyZWVkLlxuK1x0XHRcdCAqIFplcm9pemF0aW9uIGNhbm5vdCBiZSBjb25maXJtZWQgaW4gdGhpcyBzdGF0ZSwgYnV0IHRoZVxuK1x0XHRcdCAqIHF1ZXVlIGNhbm5vdCBnZW5lcmF0ZSBpbnRlcnJ1cHRzLCBzbyB0aGUgTklCIHBhZ2UgaXNcbitcdFx0XHQgKiBubyBsb25nZXIgYSBETUEgdGFyZ2V0IGFuZCBpdCBpcyBzYWZlIHRvIGZyZWUgaXQuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKCFyZXQgfHwgcmV0ID09IC1FTk9ERVYpXG4rXHRcdFx0XHRnb3RvIGRvbmU7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBUaW1lZCBvdXQgd2l0aG91dCBiZWluZyBhYmxlIHRvIHZlcmlmeSB6YXBxIGNvbXBsZXRlZC5cbitcdFx0XHQgKlxuK1x0XHRcdCAqIFRoZSBBUUlDIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBxdWV1ZSAtIHRoZSBwaW5uZWRcbitcdFx0XHQgKiBwYWdlIGNvbnRhaW5pbmcgdGhlIE5JQiBhbmQgdGhlIHJlZ2lzdGVyZWQgZ3Vlc3QgSVNDIC1cbitcdFx0XHQgKiBjYW5ub3QgYmUgZnJlZWQgaGVyZS4gVGhlIE5JQiBpcyB0aGUgYWN0aXZlIERNQSB0YXJnZXRcbitcdFx0XHQgKiBmb3IgQVAgaW50ZXJydXB0IGRlbGl2ZXJ5IHVudGlsIHRoZSByZXNldCBjb21wbGV0ZXM7XG4rXHRcdFx0ICogZnJlZWluZyB0aGUgcGlubmVkIHBhZ2Ugd2hpbGUgdGhlIGhhcmR3YXJlIG1heSBzdGlsbFxuK1x0XHRcdCAqIHdyaXRlIHRvIGl0IHdvdWxkIHJlc3VsdCBpbiBhIHdpbGQgRE1BIHdyaXRlIHRoYXQgY291bGRcbitcdFx0XHQgKiBjb3JydXB0IGhvc3QgbWVtb3J5LlxuK1x0XHRcdCAqXG4rXHRcdFx0ICogSWYgdGhlIHJlc2V0IGV2ZW50dWFsbHkgY29tcGxldGVzLCBpbnRlcnJ1cHRzIHdpbGwgYmVcbitcdFx0XHQgKiB0ZXJtaW5hdGVkIGFuZCB0aGUgcGlubmVkIE5JQiBwYWdlIGFuZCBJU0MgcmVnaXN0cmF0aW9uXG4rXHRcdFx0ICogd2lsbCBiZSBsZWFrZWQuIFRoaXMgaXMgcHJlZmVyYWJsZSB0byBlaXRoZXIgYSB3aWxkIERNQVxuK1x0XHRcdCAqIHdyaXRlIG9yIHdhaXRpbmcgaW5kZWZpbml0ZWx5OiBmbHVzaF93b3JrKCkgY2FsbGVycyBob2xkXG4rXHRcdFx0ICogdGhlIG1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayBtdXRleCB3aGljaCBzZXJpYWxpemVzIGFjY2Vzc1xuK1x0XHRcdCAqIHRvIGFsbCBtZGV2IG9iamVjdHMgc3lzdGVtLXdpZGUsIHNvIGJsb2NraW5nIGhlcmUgd291bGRcbitcdFx0XHQgKiBoYW5nIGFsbCBndWVzdHMgdG8gd2hpY2ggdGhvc2UgbWRldnMgYXJlIGF0dGFjaGVkLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHJlcG9ydF9hcWljX3Jlc291cmNlX2xlYWsocSk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBSZXBvcnQgdGhlIGFjdHVhbCBub24temVybyBoYXJkd2FyZSByZXNwb25zZSBjb2RlLCBvclxuK1x0XHRcdCAqIHN5bnRoZXNpemUgQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1MgaWYgVEFQUVxuK1x0XHRcdCAqIGNvbXBsZXRlZCBub3JtYWxseSBidXQgdGhlIHN0YXR1cyBiaXRzIGZhaWxlZCB0b1xuK1x0XHRcdCAqIHRyYW5zaXRpb24gdG8gdGhlaXIgcG9zdC1yZXNldCBzdGF0ZXMuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKHN0YXR1cy5yZXNwb25zZV9jb2RlID09IEFQX1JFU1BPTlNFX05PUk1BTClcbitcdFx0XHRcdHEtXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUztcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRxLVx1MDAzZXJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlID0gc3RhdHVzLnJlc3BvbnNlX2NvZGU7XG4rXG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHRcdGlmICghcmV0IHx8IHJldCA9PSAtRU5PREVWKVxuK1x0XHRcdGdvdG8gZG9uZTtcbiBcdFx0aWYgKHJldCA9PSAtRUJVU1kpIHtcbiBcdFx0XHRwcl9ub3RpY2VfcmF0ZWxpbWl0ZWQoV0FJVF9NU0csIGVsYXBzZWQsXG4gXHRcdFx0XHRcdCAgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG5AQCAtMTk3NSwxMyArMjE3NywxMyBAQCBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKVxuIFx0XHRcdCAgICByZXQgPT0gLUVBR0FJTikge1xuIFx0XHRcdFx0c3RhdHVzID0gYXBfemFwcShxLVx1MDAzZWFwcW4sIDApO1xuIFx0XHRcdFx0bWVtY3B5KFx1MDAyNnEtXHUwMDNlcmVzZXRfc3RhdHVzLCBcdTAwMjZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTtcbi1cdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbi1cdFx0XHRpZiAocS1cdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRClcbi1cdFx0XHRcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcbi1cdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuK1xuK2RvbmU6XG4rXHRpZiAocS1cdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRClcbitcdFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG5AQCAtMjA2MSwxMiArMjI2MywyOCBAQCBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXG4gXHRyZXR1cm4gdmZpb19hcF9tZGV2X3NldF9rdm0obWF0cml4X21kZXYsIHZkZXYtXHUwMDNla3ZtKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3JlbGVhc2VfZXZlbnRmZHMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbit7XG4rXHRpZiAobWF0cml4X21kZXYtXHUwMDNlcmVxX3RyaWdnZXIpIHtcbitcdFx0ZXZlbnRmZF9jdHhfcHV0KG1hdHJpeF9tZGV2LVx1MDAzZXJlcV90cmlnZ2VyKTtcbitcdFx0bWF0cml4X21kZXYtXHUwMDNlcmVxX3RyaWdnZXIgPSBOVUxMO1xuK1x0fVxuK1x0aWYgKG1hdHJpeF9tZGV2LVx1MDAzZWNmZ19jaGdfdHJpZ2dlcikge1xuK1x0XHRldmVudGZkX2N0eF9wdXQobWF0cml4X21kZXYtXHUwMDNlY2ZnX2NoZ190cmlnZ2VyKTtcbitcdFx0bWF0cml4X21kZXYtXHUwMDNlY2ZnX2NoZ190cmlnZ2VyID0gTlVMTDtcbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXG4ge1xuIFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9XG4gXHRcdGNvbnRhaW5lcl9vZih2ZGV2LCBzdHJ1Y3QgYXBfbWF0cml4X21kZXYsIHZkZXYpO1xuIFxuIFx0dmZpb19hcF9tZGV2X3Vuc2V0X2t2bShtYXRyaXhfbWRldik7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4rXHR2ZmlvX2FwX21kZXZfcmVsZWFzZV9ldmVudGZkcyhtYXRyaXhfbWRldik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3JlcXVlc3Qoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2LCB1bnNpZ25lZCBpbnQgY291bnQpXG5AQCAtMjQ1Nyw4ICsyNjc1LDEwIEBAIGludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXG4gXG4gXHRxLVx1MDAzZWFwcW4gPSBhcHFuO1xuIFx0cS1cdTAwM2VzYXZlZF9pc2MgPSBWRklPX0FQX0lTQ19JTlZBTElEO1xuLVx0bWVtc2V0KFx1MDAyNnEtXHUwMDNlcmVzZXRfc3RhdHVzLCAwLCBzaXplb2YocS1cdTAwM2VyZXNldF9zdGF0dXMpKTtcbitcdHEtXHUwMDNlcmVzZXRfbWF4X3dhaXQgPSBBUF9SRVNFVF9NQVhfV0FJVDtcbiBcdElOSVRfV09SSyhcdTAwMjZxLVx1MDAzZXJlc2V0X3dvcmssIGFwcV9yZXNldF9jaGVjayk7XG4rXHR2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWUocSk7XG4rXHRmbHVzaF93b3JrKFx1MDAyNnEtXHUwMDNlcmVzZXRfd29yayk7XG4gXG4gXHRpZiAobWF0cml4X21kZXYpIHtcbiBcdFx0dmZpb19hcF9tZGV2X2xpbmtfcXVldWUobWF0cml4X21kZXYsIHEpO1xuQEAgLTI1NDEsOCArMjc2MSwxOSBAQCB2b2lkIHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXG4gXHRcdHZmaW9fYXBfdW5saW5rX3F1ZXVlX2ZyX21kZXYocSk7XG4gXG4gXHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2YXBkZXYtXHUwMDNlZGV2aWNlLCBOVUxMKTtcbi1cdGtmcmVlKHEpO1xuIFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX21kZXYobWF0cml4X21kZXYpO1xuK1xuK1x0aWYgKHEtXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgIT0gQVBfUkVTUE9OU0VfTk9STUFMKSB7XG4rXHRcdC8qXG4rXHRcdCAqIExvb3AgdW50aWwgemVyb2l6YXRpb24gb2YgcXVldWUgaXMgdmVyaWZpZWQgc28gd2UgZG9uJ3QgbGVha1xuK1x0XHQgKiB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIHF1ZXVlIHRvIHRoZSBjYWxsZXIuXG4rXHRcdCAqL1xuK1x0XHRxLVx1MDAzZXJlc2V0X21heF93YWl0ID0gMDtcbitcdFx0dmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlKHEpO1xuK1x0XHRmbHVzaF93b3JrKFx1MDAyNnEtXHUwMDNlcmVzZXRfd29yayk7XG4rXHR9XG4rXG4rXHRrZnJlZShxKTtcbiB9XG4gXG4gLyoqXG5AQCAtMjY5NywxMSArMjkyOCwxMSBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfb25fY2ZnX3JlbW92ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jb25maWdfaW5mbyxcbiBcdGRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kbm90KGFxcmVtLFxuIFx0XHRcdFx0ICAgKHVuc2lnbmVkIGxvbmcgKilwcmV2X2NvbmZpZ19pbmZvLVx1MDAzZWFxbSxcbiBcdFx0XHRcdCAgICh1bnNpZ25lZCBsb25nICopY3VyX2NvbmZpZ19pbmZvLVx1MDAzZWFxbSxcbi1cdFx0XHRcdCAgIEFQX0RFVklDRVMpO1xuK1x0XHRcdFx0ICAgQVBfRE9NQUlOUyk7XG4gXHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChjZHJlbSxcbiBcdFx0XHRcdCAgICh1bnNpZ25lZCBsb25nICopcHJldl9jb25maWdfaW5mby1cdTAwM2VhZG0sXG4gXHRcdFx0XHQgICAodW5zaWduZWQgbG9uZyAqKWN1cl9jb25maWdfaW5mby1cdTAwM2VhZG0sXG4tXHRcdFx0XHQgICBBUF9ERVZJQ0VTKTtcbitcdFx0XHRcdCAgIEFQX0RPTUFJTlMpO1xuIFxuIFx0aWYgKGRvX3JlbW92ZSlcbiBcdFx0dmZpb19hcF9tZGV2X2NmZ19yZW1vdmUoYXByZW0sIGFxcmVtLCBjZHJlbSk7XG5AQCAtMjgxMiw3ICszMDQzLDcgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19hZGQodW5zaWduZWQgbG9uZyAqYXBtX2FkZCwgdW5zaWduZWQgbG9uZyAqYXFtX2FkZCxcbiBcdFx0Yml0bWFwX2FuZChtYXRyaXhfbWRldi1cdTAwM2VhcW1fYWRkLFxuIFx0XHRcdCAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcW0sIGFxbV9hZGQsIEFQX0RPTUFJTlMpO1xuIFx0XHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVx1MDAzZWFkbV9hZGQsXG4tXHRcdFx0ICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFkbSwgYWRtX2FkZCwgQVBfREVWSUNFUyk7XG4rXHRcdFx0ICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFkbSwgYWRtX2FkZCwgQVBfRE9NQUlOUyk7XG4gXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmggYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oXG5pbmRleCA5YmZmNjY2YjBiMzVkLi45MTRlYTVkNDFkMzMwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaFxuKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaFxuQEAgLTEzOSw2ICsxMzksOCBAQCBzdHJ1Y3QgYXBfbWF0cml4X21kZXYge1xuICAqXHRcdCB0aGF0IG5lZWQgdG8gYmUgcmVzZXRcbiAgKiBAcmVzZXRfc3RhdHVzOiB0aGUgc3RhdHVzIGZyb20gdGhlIGxhc3QgcmVzZXQgb2YgdGhlIHF1ZXVlXG4gICogQHJlc2V0X3dvcms6IHdvcmsgdG8gd2FpdCBmb3IgcXVldWUgcmVzZXQgdG8gY29tcGxldGVcbisgKiBAcmVzZXRfbWF4X3dhaXQ6IHRoZSBtYXggYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBmb3IgYSByZXNldCB0byBjb21wbGV0ZTtcbisgKlx0XHQgICAgc3BlY2lmeWluZyAwIG1lYW5zIHdhaXQgYXMgbG9uZyBhcyBpdCB0YWtlcy5cbiAgKi9cbiBzdHJ1Y3QgdmZpb19hcF9xdWV1ZSB7XG4gXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xuQEAgLTE1MCw2ICsxNTIsNyBAQCBzdHJ1Y3QgdmZpb19hcF9xdWV1ZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHJlc2V0X3Fub2RlO1xuIFx0c3RydWN0IGFwX3F1ZXVlX3N0YXR1cyByZXNldF9zdGF0dXM7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfd29yaztcbitcdHVuc2lnbmVkIGludCByZXNldF9tYXhfd2FpdDtcbiB9O1xuIFxuIGludCB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIodm9pZCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODoyMjowNy44NTczMjEyNzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTMwNDk1MjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEFNRDY0KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBtb2RpZmljYXRpb25zIGFuZCB0aGVpciBpbXBhY3QsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQuIEkgc2VlIHRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byBgZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jYCBhbmQgYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmhgLiBTaW5jZSB0aGVzZSBhcmUgaW4gdGhlIHMzOTAgZGlyZWN0b3J5LCBJJ2xsIG5lZWQgdG8gaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgdGhlIGNyb3NzLWFyY2hpdGVjdHVyZSBpbXBsaWNhdGlvbnMgYW5kIHdoZXRoZXIgdGhlIGNvZGUgdXRpbGl6ZXMgYW55IG9mIHRoZSBmZWF0dXJlcyB0aGF0IG1ha2UgczM5MCBkaXN0aW5jdCBmcm9tIGFtZDY0LiBUaGVyZWZvcmUsIEkgbmVlZCB0byB2ZXJpZnkgS2NvbmZpZyBhbmQgYXJjaGl0ZWN0dXJlIGRlcGVuZGVuY2llcyBmb3IgdGhlIHNvdXJjZSBmaWxlLiBUaGlzIGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nIGhvdyB0aGlzIHBhdGNoIGludGVncmF0ZXMgYW5kIGFueSBwb3RlbnRpYWwgYXJjaGl0ZWN0dXJhbCBjb25zdHJhaW50cy4gVGhpcyBmaWxlIGlzIHByb2JhYmx5IGludGVyYWN0aW5nIHdpdGggVkZJTyBhbmQgQVAsIHRoZXJlZm9yZSBmdXJ0aGVyIHJlc2VhcmNoIGludG8gdGhvc2Ugc3BlY2lmaWMgc3Vic3lzdGVtcyBtYXkgYmUgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA0NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6MjI6MDkuOTg3ODE5NDY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwOTQ1MjQ2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT19BUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjIyOjEwLjAzODc3MzU3NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NzY5NTIwMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB5b3VyIHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipOYXZpZ2F0aW5nIHRoZSBTMzkwIENyeXB0byBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IG15IGJlYXJpbmdzIGFuZCBsb2NhdGUgdGhlIEtjb25maWcgZmlsZSB3aXRoaW4gdGhlIHMzOTAgY3J5cHRvIGRyaXZlciBzdHJ1Y3R1cmUuIEdpdmVuIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbmF0dXJlLCBJJ2xsIHN0YXJ0IGJ5IGRyaWxsaW5nIGRvd24gaW50byB0aGUgYGRyaXZlcnMvczM5MGAgZGlyZWN0b3J5LiBNeSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSBjcnlwdG8tcmVsYXRlZCBjb25maWd1cmF0aW9uIHdpbGwgYmUgb3JnYW5pemVkIGJlbmVhdGggdGhhdC4gSSdtIHJlYXNvbmFibHkgY29uZmlkZW50LCBiYXNlZCBvbiBwcmV2aW91cyBleHBlcmllbmNlLCB0aGF0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBiZSBtYW5hZ2VkIHZpYSBLY29uZmlnLiBJdCdzIHRoZSBzdGFuZGFyZCBmb3IgdGhlIGtlcm5lbCwgYW5kIHRoZSBjcnlwdG8gc3Vic3lzdGVtIGlzIGZhaXJseSB3ZWxsLWVzdGFibGlzaGVkLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0IHdlIGZpbmQgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG9gLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gdHJhY2UgZGVwZW5kZW5jaWVzIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgY3J5cHRvIGZlYXR1cmVzIGFyZSBiZWluZyBjb25maWd1cmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM3MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjIyOjExLjkxNTcyODc1NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTk0MDkwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJWRklPX0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL01ha2VmaWxlPTM3PXZmaW9fYXAtb2JqcyA6PSB2ZmlvX2FwX2Rydi5vIHZmaW9fYXBfb3BzLm9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19WRklPX0FQKSArPSB2ZmlvX2FwLm9cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTYtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmg6NzojaWZuZGVmIFZGSU9fQVBfREVCVUdfSFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oOjg6I2RlZmluZSBWRklPX0FQX0RFQlVHX0hcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC05LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmgtMTgtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmg6MTk6I2RlZmluZSBWRklPX0FQX0RCRiguLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTIwLVxcdGRlYnVnX3NwcmludGZfZXZlbnQodmZpb19hcF9kYmZfaW5mbywgIyNfX1ZBX0FSR1NfXylcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaDoyMTojZGVmaW5lIFZGSU9fQVBfREJGX0VSUiguLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTIyLVxcdGRlYnVnX3NwcmludGZfZXZlbnQodmZpb19hcF9kYmZfaW5mbywgREJGX0VSUiwgIyNfX1ZBX0FSR1NfXylcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaDoyMzojZGVmaW5lIFZGSU9fQVBfREJGX1dBUk4oLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC0yNC1cXHRkZWJ1Z19zcHJpbnRmX2V2ZW50KHZmaW9fYXBfZGJmX2luZm8sIERCRl9XQVJOLCAjI19fVkFfQVJHU19fKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oOjI1OiNkZWZpbmUgVkZJT19BUF9EQkZfSU5GTyguLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTI2LVxcdGRlYnVnX3NwcmludGZfZXZlbnQodmZpb19hcF9kYmZfaW5mbywgREJGX0lORk8sICMjX19WQV9BUkdTX18pXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmg6Mjc6I2RlZmluZSBWRklPX0FQX0RCRl9EQkcoLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC0yOC1cXHRkZWJ1Z19zcHJpbnRmX2V2ZW50KHZmaW9fYXBfZGJmX2luZm8sIERCRl9ERUJVRywgIyNfX1ZBX0FSR1NfXylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oPTMwPWV4dGVybiBkZWJ1Z19pbmZvX3QgKnZmaW9fYXBfZGJmX2luZm87XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmgtMzEtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmg6MzI6I2VuZGlmIC8qIFZGSU9fQVBfREVCVUdfSCAqL1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE4LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxOTojZGVmaW5lIFZGSU9fQVBfUk9PVF9OQU1FIFxcXCJ2ZmlvX2FwXFxcIlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoyMDojZGVmaW5lIFZGSU9fQVBfREVWX05BTUUgXFxcIm1hdHJpeFxcXCJcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMjEtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9ODY9c3RhdGljIGludCB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtOTAtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjkxOlxcdHJvb3RfZGV2aWNlID0gcm9vdF9kZXZpY2VfcmVnaXN0ZXIoVkZJT19BUF9ST09UX05BTUUpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy05Mi1cXHRpZiAoSVNfRVJSKHJvb3RfZGV2aWNlKSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMTUtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjExNjpcXHRkZXZfc2V0X25hbWUoXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWRldmljZSwgXFxcIiVzXFxcIiwgVkZJT19BUF9ERVZfTkFNRSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTExNy1cXHRtYXRyaXhfZGV2LVxcdTAwM2VkZXZpY2UucGFyZW50ID0gcm9vdF9kZXZpY2U7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9MTY3PXN0YXRpYyBpbnQgX19pbml0IHZmaW9fYXBfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE4Mi1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTgzOlxcdHJldCA9IGFwX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2dmZpb19hcF9kcnYsIFRISVNfTU9EVUxFLCBWRklPX0FQX0RSVl9OQU1FKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTg0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjY6I2RlZmluZSBWRklPX0FQX01ERVZfVFlQRV9IV1ZJUlQgXFxcInBhc3N0aHJvdWdoXFxcIlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNzojZGVmaW5lIFZGSU9fQVBfTURFVl9OQU1FX0hXVklSVCBcXFwiVkZJTyBBUCBQYXNzdGhyb3VnaCBEZXZpY2VcXFwiXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI5MT1zdGF0aWMgdm9pZCB2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjk0LVxcdFxcdHJldHVybjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Mjk1OlxcdGlmIChxLVxcdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRCBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yOTYtXFx0ICAgICFXQVJOX09OKCEocS1cXHUwMDNlbWF0cml4X21kZXYgXFx1MDAyNlxcdTAwMjYgcS1cXHUwMDNlbWF0cml4X21kZXYtXFx1MDAzZWt2bSkpKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI5Ny1cXHRcXHRrdm1fczM5MF9naXNjX3VucmVnaXN0ZXIocS1cXHUwMDNlbWF0cml4X21kZXYtXFx1MDAzZWt2bSwgcS1cXHUwMDNlc2F2ZWRfaXNjKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Mjk4OlxcdFxcdHEtXFx1MDAzZXNhdmVkX2lzYyA9IFZGSU9fQVBfSVNDX0lOVkFMSUQ7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI5OS1cXHR9XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9NTA1PXN0YXRpYyBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHZmaW9fYXBfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy01MTktXFx0aWYgKHZmaW9fYXBfdmFsaWRhdGVfbmliKHZjcHUsIFxcdTAwMjZuaWIpKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjUyMDpcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogaW52YWxpZCBOSUIgYWRkcmVzczogbmliPSVwYWQsIGFwcW49JSMwNHhcXFxcblxcXCIsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTUyMS1cXHRcXHRcXHRcXHQgX19mdW5jX18sIFxcdTAwMjZuaWIsIHEtXFx1MDAzZWFwcW4pO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTUzMy1cXHRkZWZhdWx0OlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo1MzQ6XFx0XFx0VkZJT19BUF9EQkZfV0FSTihcXFwiJXM6IHZmaW9fcGluX3BhZ2VzIGZhaWxlZDogcmM9JWQsXFxcIlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy01MzUtXFx0XFx0XFx0XFx0IFxcXCJuaWI9JXBhZCwgYXBxbj0lIzA0eFxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy01NTctXFx0aWYgKG5pc2MgXFx1MDAzYyAwKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjU1ODpcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogZ2lzYyByZWdpc3RyYXRpb24gZmFpbGVkOiBuaXNjPSVkLCBpc2M9JWQsIGFwcW49JSMwNHhcXFxcblxcXCIsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTU1OS1cXHRcXHRcXHRcXHQgX19mdW5jX18sIG5pc2MsIGlzYywgcS1cXHUwMDNlYXBxbik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNTk1LVxcdFxcdGlmIChyZXQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjU5NjpcXHRcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczoga3ZtX3MzOTBfZ2lzY191bnJlZ2lzdGVyOiByYz0lZCBpc2M9JWQsIGFwcW49JSMwNHhcXFxcblxcXCIsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTU5Ny1cXHRcXHRcXHRcXHRcXHQgX19mdW5jX18sIHJldCwgaXNjLCBxLVxcdTAwM2VhcHFuKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02MDItXFx0aWYgKHN0YXR1cy5yZXNwb25zZV9jb2RlICE9IEFQX1JFU1BPTlNFX05PUk1BTCkge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo2MDM6XFx0XFx0VkZJT19BUF9EQkZfV0FSTihcXFwiJXM6IFBRQVAoQVFJQykgZmFpbGVkIHdpdGggc3RhdHVzPSUjMDJ4OiBcXFwiXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTYwNC1cXHRcXHRcXHRcXHQgXFxcInpvbmU9JSN4LCBpcj0lI3gsIGdpc2M9JSN4LCBmPSUjeCxcXFwiXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9Njc4PXN0YXRpYyBpbnQgaGFuZGxlX3BxYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTY5MS1cXHRpZiAoISh2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlZWNhIFxcdTAwMjYgRUNBX0FJVikpIHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NjkyOlxcdFxcdFZGSU9fQVBfREJGX1dBUk4oXFxcIiVzOiBBSVYgZmFjaWxpdHkgbm90IGluc3RhbGxlZDogYXBxbj0weCUwNHgsIGVjYT0weCUwNHhcXFxcblxcXCIsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTY5My1cXHRcXHRcXHRcXHQgX19mdW5jX18sIGFwcW4sIHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VlY2EpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTcwMC1cXHRpZiAoIXZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjcwMTpcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogUFFBUChBUUlDKSBob29rIG5vdCByZWdpc3RlcmVkIHdpdGggdGhlIHZmaW9fYXAgZHJpdmVyOiBhcHFuPTB4JTA0eFxcXFxuXFxcIixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzAyLVxcdFxcdFxcdFxcdCBfX2Z1bmNfXywgYXBxbik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzEyLVxcdFxcdHZmaW9fYXBfbGVfZ3VpZF90b19iZV91dWlkKFxcdTAwMjZtYXRyaXhfbWRldi1cXHUwMDNlbWRldi1cXHUwMDNldXVpZCwgdXVpZCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjcxMzpcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogbWRldiAlMDhseC0lMDRseC0lMDRseC0lMDRseC0lMDRseCUwOGx4IG5vdCBpbiB1c2U6IGFwcW49MHglMDR4XFxcXG5cXFwiLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03MTQtXFx0XFx0XFx0XFx0IF9fZnVuY19fLCB1dWlkWzBdLCAgdXVpZFsxXSwgdXVpZFsyXSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03MjAtXFx0aWYgKCFxKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjcyMTpcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogUXVldWUgJTAyeC4lMDR4IG5vdCBib3VuZCB0byB0aGUgdmZpb19hcCBkcml2ZXJcXFxcblxcXCIsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTcyMi1cXHRcXHRcXHRcXHQgX19mdW5jX18sIEFQX1FJRF9DQVJEKGFwcW4pLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIwNzI9c3RhdGljIHZvaWQgcmVwb3J0X2FxaWNfcmVzb3VyY2VfbGVhayhzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjA3My17XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIwNzQ6XFx0aWYgKHEtXFx1MDAzZXNhdmVkX2lzYyAhPSBWRklPX0FQX0lTQ19JTlZBTElEIHx8IHEtXFx1MDAzZXNhdmVkX2lvdmEpIHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjA3NS1cXHRcXHRpZiAocS1cXHUwMDNlbWF0cml4X21kZXYpIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMTAxPXN0YXRpYyB2b2lkIGFwcV9yZXNldF9jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnJlc2V0X3dvcmspXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjE4NC1kb25lOlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMTg1OlxcdGlmIChxLVxcdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRClcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjE4Ni1cXHRcXHR2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjMxOT1zdGF0aWMgaW50IHZmaW9fYXBfbWRldl9nZXRfZGV2aWNlX2luZm8odW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjMzMy1cXHRpbmZvLm51bV9yZWdpb25zID0gMDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjMzNDpcXHRpbmZvLm51bV9pcnFzID0gVkZJT19BUF9OVU1fSVJRUztcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjMzNS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMzM5PXN0YXRpYyBzc2l6ZV90IHZmaW9fYXBfZ2V0X2lycV9pbmZvKHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzNDgtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIzNDk6XFx0aWYgKGluZm8uYXJnc3ogXFx1MDAzYyBtaW5zeiB8fCBpbmZvLmluZGV4IFxcdTAwM2U9IFZGSU9fQVBfTlVNX0lSUVMpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzNTAtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM1Mi1cXHRzd2l0Y2ggKGluZm8uaW5kZXgpIHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjM1MzpcXHRjYXNlIFZGSU9fQVBfUkVRX0lSUV9JTkRFWDpcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM1NC1cXHRcXHRpbmZvLmNvdW50ID0gMTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzU2LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMzU3OlxcdGNhc2UgVkZJT19BUF9DRkdfQ0hHX0lSUV9JTkRFWDpcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM1OC1cXHRcXHRpbmZvLmNvdW50ID0gMTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMzY4PXN0YXRpYyBpbnQgdmZpb19hcF9pcnFfc2V0X2luaXQoc3RydWN0IHZmaW9faXJxX3NldCAqaXJxX3NldCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM3OC1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjM3OTpcXHRyZXQgPSB2ZmlvX3NldF9pcnFzX3ZhbGlkYXRlX2FuZF9wcmVwYXJlKGlycV9zZXQsIDEsIFZGSU9fQVBfTlVNX0lSUVMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzODAtXFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZkYXRhX3NpemUpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI0NTc9c3RhdGljIGludCB2ZmlvX2FwX3NldF9pcnFzKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjQ2OS1cXHRcXHRzd2l0Y2ggKGlycV9zZXQuaW5kZXgpIHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjQ3MDpcXHRcXHRjYXNlIFZGSU9fQVBfUkVRX0lSUV9JTkRFWDpcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjQ3MS1cXHRcXHRcXHRyZXR1cm4gdmZpb19hcF9zZXRfcmVxdWVzdF9pcnEobWF0cml4X21kZXYsIGFyZyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI0NzI6XFx0XFx0Y2FzZSBWRklPX0FQX0NGR19DSEdfSVJRX0lOREVYOlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDczLVxcdFxcdFxcdHJldHVybiB2ZmlvX2FwX3NldF9jZmdfY2hhbmdlX2lycShtYXRyaXhfbWRldiwgYXJnKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNjI3PWludCB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNjM0LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNjM1OlxcdG1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfdHlwZS5zeXNmc19uYW1lID0gVkZJT19BUF9NREVWX1RZUEVfSFdWSVJUO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNjM2OlxcdG1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfdHlwZS5wcmV0dHlfbmFtZSA9IFZGSU9fQVBfTURFVl9OQU1FX0hXVklSVDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjYzNy1cXHRtYXRyaXhfZGV2LVxcdTAwM2VtZGV2X3R5cGVzID0gXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfdHlwZTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNjU2PWludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjY3Ni1cXHRxLVxcdTAwM2VhcHFuID0gYXBxbjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjY3NzpcXHRxLVxcdTAwM2VzYXZlZF9pc2MgPSBWRklPX0FQX0lTQ19JTlZBTElEO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNjc4LVxcdHEtXFx1MDAzZXJlc2V0X21heF93YWl0ID0gQVBfUkVTRVRfTUFYX1dBSVQ7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTExLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6MTI6I2lmbmRlZiBfVkZJT19BUF9QUklWQVRFX0hfXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoxMzojZGVmaW5lIF9WRklPX0FQX1BSSVZBVEVfSF9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE0LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0yNS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjI2OiNkZWZpbmUgVkZJT19BUF9NT0RVTEVfTkFNRSBcXFwidmZpb19hcFxcXCJcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjI3OiNkZWZpbmUgVkZJT19BUF9EUlZfTkFNRSBcXFwidmZpb19hcFxcXCJcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTI4LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaD0xNDU9c3RydWN0IHZmaW9fYXBfcXVldWUge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNDgtXFx0aW50XFx0YXBxbjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE0OTojZGVmaW5lIFZGSU9fQVBfSVNDX0lOVkFMSUQgMHhmZlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtMTUwLVxcdHVuc2lnbmVkIGNoYXIgc2F2ZWRfaXNjO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaD0xNjg9dm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE3MC1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE3MTojZW5kaWYgLyogX1ZGSU9fQVBfUFJJVkFURV9IXyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODoyMjoxMS45Njc2NzcxMTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTQ3MTg0OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcGlucG9pbnQgd2hlcmUgdGhlIGRlcGVuZGVuY3kgb2YgYFZGSU9fQVBgIGxpZXMgaW4gcmVsYXRpb24gdG8gdGhlIFMzOTAgYXJjaGl0ZWN0dXJlLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHdvdWxkIGJlIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgcmVsYXRlZCB0byB0aGUgUzM5MCBhcmNoaXRlY3R1cmUsIGFuZCB0aGUgY3J5cHRvIHNlY3Rpb24gZmVlbHMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQuIFNwZWNpZmljYWxseSwgSSdsbCBleGFtaW5lIGBkcml2ZXJzL3MzOTAvS2NvbmZpZ2AgYW5kIGBkcml2ZXJzL3MzOTAvY3J5cHRvL0tjb25maWdgLiBUaGlzIHNob3VsZCByZXZlYWwgd2hldGhlciBgVkZJT19BUGAgaXMgZGlyZWN0bHkgY29udGluZ2VudCBvbiB0aGUgUzM5MCBwbGF0Zm9ybSBvciBzb21lIHJlbGF0ZWQgY3J5cHRvIGZlYXR1cmVzIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjY0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6MjI6MTMuOTE0ODY0Njg3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNTU4NTE2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT19BUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODoyMjoxMy45Njg0Mjk3MDNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDA1MjAxODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBLY29uZmlnIGh1bnQuXG5cbioqSHVudGluZyBmb3IgVkZJT19BUCBpbiB0aGUgS2NvbmZpZyBGaWxlcyoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBldmVyeSBpbnN0YW5jZSB3aGVyZSBgVkZJT19BUGAgaXMgYWN0dWFsbHkgZGVmaW5lZCB3aXRoaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCB0aG91Z2ggcG90ZW50aWFsbHkgdGVkaW91cywgdGFzay4gSSdtIGFzc3VtaW5nIHRoZXJlJ3MgYSBnb29kIHJlYXNvbiBmb3IgdGhpcyBzZWFyY2gg4oCTIG1heWJlIEknbSB0cmFja2luZyBhIGRlcGVuZGVuY3ksIGRlYnVnZ2luZyBhIGJ1aWxkIGlzc3VlLCBvciBwZXJoYXBzIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlIGFyb3VuZCBBY2NlbGVyYXRlZCBQcm9jZXNzaW5nIHN1cHBvcnQgaW4gVkZJTy4gV2hhdGV2ZXIgdGhlIHJlYXNvbiwgbXkgaW1tZWRpYXRlIGdvYWwgaXMgY2xlYXI6IGZpbmQgYWxsIHRob3NlIGRlY2xhcmF0aW9ucy4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyBmb3IgdGhpcyAtIHByb2JhYmx5IGEgY29tYmluYXRpb24gb2YgYGZpbmRgIGFuZCBgZ3JlcGAsIG9yIHBlcmhhcHMgYSBtb3JlIHNvcGhpc3RpY2F0ZWQgdG9vbCBpZiB0aGUgY29kZWJhc2UgaXMgcGFydGljdWxhcmx5IGNvbXBsZXguIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODk3LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6MjI6MTYuMzczNjM1NDc0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTYyMjQ3OTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRklPX0FQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9LY29uZmlnPTgzNT1jb25maWcgVkZJT19DQ1dcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTg0NS1cXG5hcmNoL3MzOTAvS2NvbmZpZzo4NDY6Y29uZmlnIFZGSU9fQVBcXG5hcmNoL3MzOTAvS2NvbmZpZy04NDctXFx0ZGVmX3RyaXN0YXRlIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6MjI6MTguMzM1ODkyODI4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjU5MDAzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIHMzOTAgQXJjaGl0ZWN0dXJlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBJIHJlbWVtYmVyIGBLY29uZmlnYCBmaWxlcyBhcmUgdGhlIHBsYWNlIHRvIGJlLiBMZXQncyBzZWUuLi4gSSdtIHRoaW5raW5nIHRoZSByZWxldmFudCBzZWN0aW9uIGlzIHByb2JhYmx5IGFyb3VuZCBsaW5lIDg0NiBvZiBgYXJjaC9zMzkwL0tjb25maWdgLiBUaGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIHNldHRpbmdzIHJlbGF0ZWQgdG8gd2hhdGV2ZXIgSSdtIGludmVzdGlnYXRpbmcgYXJlIGRlZmluZWQuIExldCdzIGdldCB0byBpdC4gVGltZSB0byBzdGFydCB0aGUgZGVlcCBkaXZlIGludG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTkwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6MjI6MjAuNDAxNzk2MjY1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvczM5MC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg0MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg0MDpcXHRcXHRoZWxwXFxuIDg0MTpcXHRcXHQgIFRoaXMgZHJpdmVyIGFsbG93cyB1c2FnZSBvZiBJL08gc3ViY2hhbm5lbHMgdmlhIFZGSU8tQ0NXLlxcbiA4NDI6XFx0XFxuIDg0MzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA4NDQ6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdmZpb19jY3cuXFxuIDg0NTpcXHRcXG4gODQ2OlxcdGNvbmZpZyBWRklPX0FQXFxuIDg0NzpcXHRcXHRkZWZfdHJpc3RhdGUgblxcbiA4NDg6XFx0XFx0cHJvbXB0IFxcXCJWRklPIHN1cHBvcnQgZm9yIEFQIGRldmljZXNcXFwiXFxuIDg0OTpcXHRcXHRkZXBlbmRzIG9uIEtWTVxcbiA4NTA6XFx0XFx0ZGVwZW5kcyBvbiBWRklPXFxuIDg1MTpcXHRcXHRkZXBlbmRzIG9uIEFQXFxuIDg1MjpcXHRcXHRzZWxlY3QgVkZJT19NREVWXFxuIDg1MzpcXHRcXHRoZWxwXFxuIDg1NDpcXHRcXHQgIFRoaXMgZHJpdmVyIGdyYW50cyBhY2Nlc3MgdG8gQWRqdW5jdCBQcm9jZXNzb3IgKEFQKSBkZXZpY2VzXFxuIDg1NTpcXHRcXHQgIHZpYSB0aGUgVkZJTyBtZWRpYXRlZCBkZXZpY2UgaW50ZXJmYWNlLlxcbiA4NTY6XFx0XFxuIDg1NzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gODU4OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgdmZpb19hcC5cXG4gODU5OlxcdFxcbiA4NjA6XFx0ZW5kbWVudVxcbiA4NjE6XFx0XFxuIDg2MjpcXHRjb25maWcgQ0NXXFxuIDg2MzpcXHRcXHRkZWZfYm9vbCB5XFxuIDg2NDpcXHRcXG4gODY1OlxcdGNvbmZpZyBIQVZFX1BORVRJRFxcbiA4NjY6XFx0XFx0dHJpc3RhdGVcXG4gODY3OlxcdFxcdGRlZmF1bHQgKFNNQyB8fCBDQ1dHUk9VUClcXG4gODY4OlxcdFxcbiA4Njk6XFx0bWVudSBcXFwiVmlydHVhbGl6YXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjIyOjIwLjQwMTg5Mzc4NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjA1MTk2Mzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlZGSU9fQVAgUGF0Y2ggQXNzZXNzbWVudCBmb3IgYW1kNjQgQXJjaGl0ZWN0dXJlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBwcm9iYWJseSAqbm90KiBmdXp6YWJsZSBmb3IgbXkgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgYW1kNjQuIExldCdzIHNlZS4uLiB0aGUgYFZGSU9fQVBgIHN5bWJvbCBpcyBkZWZpbmVkIHdpdGhpbiBgYXJjaC9zMzkwL0tjb25maWdgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBzMzkwLXNwZWNpZmljLiBUaGUgd2hvbGUgdGhpbmcgaXMgd2l0aGluIHRoZSBcIkkvTyBzdWJzeXN0ZW1cIiBtZW51IGluIGBhcmNoL3MzOTBgLCB0aGF0J3MgYSByZWQgZmxhZy5cblxuTm93LCBJIG5lZWQgdG8gYXBwbHkgdGhlIHJ1bGVzLiBTcGVjaWZpY2FsbHksIHRoZSBcIk5FR0FUSVZFIENSSVRFUklBXCIgc2VjdGlvbi4gVGhlIHJ1bGUgSSBuZWVkIHRvIGZvY3VzIG9uIGhlcmUgaXMgXCJVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6ICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlwiIFBlcmZlY3QuXG5cbkxldCdzIHNlZSB3aGF0IGZpbGVzIGFyZSBjaGFuZ2VkLiBBaCwgaXQgbG9va3MgbGlrZSBgZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jYCBhbmQgYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmhgLiBCb3RoIHJpZ2h0IGluIGBkcml2ZXJzL3MzOTAvYCwgZXhhY3RseSB3aGVyZSBJIHdvdWxkIGV4cGVjdC4gVGhleSdyZSBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19WRklPX0FQYCBpcyBzZXQsIHdoaWNoIHdlIGtub3cgaXMgZGVmaW5lZCBpbiBgYXJjaC9zMzkwL0tjb25maWdgIGFuZCBkZXBlbmRzIG9uIHMzOTAgYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIGFsbCBzY3JlYW1pbmcgczM5MC4gSSdtIG9uIGFtZDY0LiBcblxuVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSAqaXMqIGV4Y2x1c2l2ZSB0byBzMzkwIGFuZCBkZWZpbml0ZWx5IHVucmVhY2hhYmxlIG9uIGFtZDY0LiBObyBpZnMsIGFuZHMsIG9yIGJ1dHMuXG5cblRpbWUgZm9yIHRoZSBgc2V0LXJlc3VsdHNgIHNhbml0eSBjaGVjay4gTGV0J3Mgc2VlLi4uXG5cbi0gICBgV29ydGhGdXp6aW5nYDogZmFsc2UgLSBZZXAsIGNoZWNrLlxuLSAgIGBSZWFzb25pbmdgOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgczM5MCBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIChgZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jYCBhbmQgYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmhgKSwgd2hpY2ggaXMgZXhjbHVzaXZlIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSAoQ09ORklHX1ZGSU9fQVApIGFuZCBub3QgY29tcGlsZWQgb3IgcmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuXCIgLSBTcG90IG9uLCBleHBsYWlucyBpdCBwZXJmZWN0bHkuXG4tICAgYEZvY3VzU3ltYm9sc2A6IFtdIC0gQ29ycmVjdCwgbm90aGluZyB0byBmb2N1cyBvbi5cbi0gICBgRW5hYmxlQ29uZmlnc2A6IFtdIC0gQWxsIGdvb2QuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC4gXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NzY1LCJPdXRwdXRUb2tlbnMiOjkxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6MjI6MjUuMDA3MDkzOTcxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHMzOTAgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciBpbiBkcml2ZXJzL3MzOTAvY3J5cHRvLywgd2hpY2ggaXMgZXhjbHVzaXZlIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSAoQ09ORklHX1ZGSU9fQVApIGFuZCBpcyBuZWl0aGVyIGNvbXBpbGVkIG5vciByZWFjaGFibGUgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIFZGSU8gQVAgKEFkanVuY3QgUHJvY2Vzc29yKSBkcml2ZXIgaW4gZHJpdmVycy9zMzkwL2NyeXB0by8sIHdoaWNoIGlzIGV4Y2x1c2l2ZSB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUgKENPTkZJR19WRklPX0FQKSBhbmQgaXMgbmVpdGhlciBjb21waWxlZCBub3IgcmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODoyMjoyNS4wMDcxMjMzMjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowrxgjm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 18:02:48 +0000 UTC FinishedAt: 2026-09-05 18:22:27 +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+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHMzOTAgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciBpbiBkcml2ZXJzL3MzOTAvY3J5cHRvLywgd2hpY2ggaXMgZXhjbHVzaXZlIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSAoQ09ORklHX1ZGSU9fQVApIGFuZCBpcyBuZWl0aGVyIGNvbXBpbGVkIG5vciByZWFjaGFibGUgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmM2M4NjljN2ZjZDNlMjkyZmIyZjZkMjI2NDI0YWE0YTIxNzRkZWNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxODoyMjowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbmluZGV4IDk0MGMwZmY2NjhiZWUuLmUwNTRmZDRhOTQ5NzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuQEAgLTMxLDYgJiM0MzszMSw3IEBAXG4gI2RlZmluZSBBUF9RVUVVRV9JTl9VU0UgXCYjMzQ7aW4gdXNlXCYjMzQ7XG4gXG4gI2RlZmluZSBBUF9SRVNFVF9JTlRFUlZBTFx0XHQyMFx0LyogUmVzZXQgc2xlZXAgaW50ZXJ2YWwgKDIwbXMpXHRcdCovXG4mIzQzOyNkZWZpbmUgQVBfUkVTRVRfTUFYX1dBSVRcdFx0MjAwMFx0LyogTWF4aW11bSB3YWl0IGZvciByZXNldCAoMjAwMG1zKVx0Ki9cbiBcbiBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZXMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldik7XG4gc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcmVzZXRfcWxpc3Qoc3RydWN0IGxpc3RfaGVhZCAqcWxpc3QpO1xuQEAgLTIyNiwxNiAmIzQzOzIyNywyNyBAQCBzdGF0aWMgc3RydWN0IHZmaW9fYXBfcXVldWUgKnZmaW9fYXBfbWRldl9nZXRfcXVldWUoXG4gfVxuIFxuIC8qKlxuLSAqIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIgLSBjbGVhcnMgdGhlIElSIGJpdCBvciBnaXZlcyB1cCBhZnRlciA1IHRyaWVzXG4tICogQGFwcW46IFRoZSBBUCBRdWV1ZSBudW1iZXJcbi0gKlxuLSAqIENoZWNrcyB0aGUgSVJRIGJpdCBmb3IgdGhlIHN0YXR1cyBvZiB0aGlzIEFQUU4gdXNpbmcgYXBfdGFwcS5cbi0gKiBSZXR1cm5zIGlmIHRoZSBhcF90YXBxIGZ1bmN0aW9uIHN1Y2NlZWRlZCBhbmQgdGhlIGJpdCBpcyBjbGVhci5cbi0gKiBSZXR1cm5zIGlmIGFwX3RhcHEgZnVuY3Rpb24gZmFpbGVkIHdpdGggaW52YWxpZCwgZGVjb25maWd1cmVkIG9yXG4tICogY2hlY2tzdG9wcGVkIEFQLlxuLSAqIE90aGVyd2lzZSByZXRyaWVzIHVwIHRvIDUgdGltZXMgYWZ0ZXIgd2FpdGluZyAyMG1zLlxuJiM0MzsgKiB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyIC0gd2FpdCBmb3IgdGhlIElSIGJpdCB0byBjbGVhciBhZnRlciBhIGRpc2FibGVcbiYjNDM7ICpcbiYjNDM7ICogQGFwcW46IHRoZSBBUFFOIG9mIHRoZSBxdWV1ZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXBlYXRlZGx5IHBvbGxzIHRoZSBBUCBxdWV1ZSBzdGF0dXMgdmlhIFBRQVAoVEFQUSkgZXZlcnkgMjBtcyB1bnRpbCB0aGUgSVJcbiYjNDM7ICogYml0IGlzIGNsZWFyLCB0aGUgcXVldWUgYmVjb21lcyBub24tb3BlcmF0aW9uYWwsIG9yIDUgcmV0cmllcyBhcmUgZXhoYXVzdGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBCZWNhdXNlIFBRQVAoQVFJQykgZGlzYWJsZSBpbml0aWF0ZXMgYW4gYXN5bmNocm9ub3VzIHByb2Nlc3MsIGFcbiYjNDM7ICogY29uZGl0aW9uLWNvZGUgMCBjb21wbGV0aW9uIGRvZXMgbm90IGd1YXJhbnRlZSB0aGUgSVIgYml0IGhhcyBiZWVuIGNsZWFyZWQuXG4mIzQzOyAqIFRoZSBob3N0IG11c3QgY29uZmlybSBJUj0wIGJlZm9yZSB1bnBpbm5pbmcgdGhlIE5JQiBwYWdlIHRvIGF2b2lkIGEgd2lsZFxuJiM0MzsgKiBETUEgd3JpdGUgdG8gYSBmcmVlZCBwYWdlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqIC0gMFx0XHRpZiB0aGUgSVIgYml0IGlzIGNsZWFyIChpLmUuLCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCkuXG4mIzQzOyAqXG4mIzQzOyAqIC0gLUVOT0RFVlx0aWYgdGhlIFBRQVAtVEFQUSByZXNwb25zZSBjb2RlIGluZGljYXRlcyB0aGUgcXVldWUgaXMgbm90IGF2YWlsYWJsZSxcbiYjNDM7ICpcdFx0aXMgZGVjb25maWd1cmVkLCBvciBpcyBjaGVja3N0b3BwZWQgKGkuZS4sIG5vdCBvcGVyYXRpb25hbCkuXG4mIzQzOyAqXG4mIzQzOyAqIC0gLUVUSU1FRE9VVFx0dGhlIGZ1bmN0aW9uIHRpbWVkIG91dCBiZWZvcmUgdGhlIElSIGJpdCB3YXMgY2xlYXJlZC5cbiAgKi9cbi1zdGF0aWMgdm9pZCB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKGludCBhcHFuKVxuJiM0MztzdGF0aWMgaW50IHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoaW50IGFwcW4pXG4ge1xuIFx0c3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXM7XG4gXHRpbnQgcmV0cnkgPSA1O1xuQEAgLTI0Niw3ICYjNDM7MjU4LDcgQEAgc3RhdGljIHZvaWQgdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcihpbnQgYXBxbilcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1M6XG4gXHRcdFx0aWYgKCFzdGF0dXMuaXJxX2VuYWJsZWQpXG4tXHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdFx0cmV0dXJuIDA7XG4gXHRcdFx0ZmFsbHRocm91Z2g7XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfQlVTWTpcbiBcdFx0XHRtc2xlZXAoMjApO1xuQEAgLTI1NywxMiAmIzQzOzI2OSwxNSBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKGludCBhcHFuKVxuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdFdBUk5fT05DRSgxLCBcJiMzNDslczogdGFwcSByYyAlMDJ4OiAlMDR4XFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbiBcdFx0XHRcdCAgc3RhdHVzLnJlc3BvbnNlX2NvZGUsIGFwcW4pO1xuLVx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHRcdH1cbiBcdH0gd2hpbGUgKC0tcmV0cnkpO1xuIFxuLVx0V0FSTl9PTkNFKDEsIFwmIzM0OyVzOiB0YXBxIHJjICUwMng6ICUwNHggY291bGQgbm90IGNsZWFyIElSIGJpdFxcblwmIzM0Oyxcbi1cdFx0ICBfX2Z1bmNfXywgc3RhdHVzLnJlc3BvbnNlX2NvZGUsIGFwcW4pO1xuJiM0MztcdFdBUk5fT05DRSgxLCBcJiMzNDslczogdGFwcSByYyAlMDJ4OiB0aW1lZCBvdXQgd2FpdGluZyBmb3IgaW50ZXJydXB0cyBkaXNhYmxlZCBmb3IgJTAyeC4lMDR4XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICBfX2Z1bmNfXywgc3RhdHVzLnJlc3BvbnNlX2NvZGUsXG4mIzQzO1x0XHQgIEFQX1FJRF9DQVJEKGFwcW4pLCBBUF9RSURfUVVFVUUoYXBxbikpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiB9XG4gXG4gLyoqXG5AQCAtMjg5LDIwICYjNDM7MzA0LDI4IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcbiB9XG4gXG4gLyoqXG4tICogdmZpb19hcF9pcnFfZGlzYWJsZSAtIGRpc2FibGVzIGFuZCBjbGVhcnMgYW4gYXBfcXVldWUgaW50ZXJydXB0XG4tICogQHE6IFRoZSB2ZmlvX2FwX3F1ZXVlXG4mIzQzOyAqIHZmaW9fYXBfaXJxX2Rpc2FibGUgLSBkaXNhYmxlIGludGVycnVwdHMgZm9yIGFuIEFQIHF1ZXVlXG4mIzQzOyAqIEBxOiB0aGUgdmZpb19hcF9xdWV1ZVxuICAqXG4tICogVXNlcyBhcF9hcWljIHRvIGRpc2FibGUgdGhlIGludGVycnVwdGlvbiBhbmQgaW4gY2FzZSBvZiBzdWNjZXNzLCByZXNldFxuLSAqIGluIHByb2dyZXNzIG9yIElSUSBkaXNhYmxlIGNvbW1hbmQgYWxyZWFkeSBwcm9jZWVkZWQ6IGNhbGxzXG4tICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcigpIHRvIGNoZWNrIGZvciB0aGUgSVJRIGJpdCB0byBiZSBjbGVhclxuLSAqIGFuZCBjYWxscyB2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMoKSB0byBmcmVlIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZFxuLSAqIHdpdGggdGhlIEFQIGludGVycnVwdCBoYW5kbGluZy5cbiYjNDM7ICogSXNzdWVzIFBRQVAoQVFJQykgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciB0aGUgQVAgcXVldWUuIE9uIHN1Y2Nlc3NcbiYjNDM7ICogKEFQX1JFU1BPTlNFX05PUk1BTCBvciBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRCksIHBvbGxzIHZpYVxuJiM0MzsgKiB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKCkgdW50aWwgdGhlIElSIGJpdCBpcyBjb25maXJtZWQgY2xlYXIgYmVmb3JlXG4mIzQzOyAqIGZyZWVpbmcgdGhlIHBpbm5lZCBOSUIgcGFnZSBhbmQgdW5yZWdpc3RlcmluZyB0aGUgZ3Vlc3QgSVNDLiBUaGlzIHdhaXQgaXNcbiYjNDM7ICogbmVjZXNzYXJ5IGJlY2F1c2UgQVFJQyBkaXNhYmxlIGlzIGFzeW5jaHJvbm91czogZnJlZWluZyB0aGUgTklCIGJlZm9yZSBJUj0wXG4mIzQzOyAqIGlzIGNvbmZpcm1lZCByaXNrcyBhIHdpbGQgRE1BIHdyaXRlIHRvIGEgZnJlZWQgaG9zdCBwYWdlLlxuICAqXG4tICogSW4gdGhlIGNhc2UgdGhlIEFQIGlzIGJ1c3ksIG9yIGEgcmVzZXQgaXMgaW4gcHJvZ3Jlc3MsXG4tICogcmV0cmllcyBhZnRlciAyMG1zLCB1cCB0byA1IHRpbWVzLlxuJiM0MzsgKiBSZXRyaWVzIHVwIHRvIDUgdGltZXMgKHdpdGggMjBtcyBzbGVlcCkgaWYgdGhlIHF1ZXVlIGlzIGJ1c3kgb3IgYSByZXNldCBpc1xuJiM0MzsgKiBpbiBwcm9ncmVzcy5cbiAgKlxuLSAqIFJldHVybnMgaWYgYXBfYXFpYyBmdW5jdGlvbiBmYWlsZWQgd2l0aCBpbnZhbGlkLCBkZWNvbmZpZ3VyZWQgb3Jcbi0gKiBjaGVja3N0b3BwZWQgQVAuXG4mIzQzOyAqIElmIHRoZSBJUiBiaXQgY2Fubm90IGJlIGNvbmZpcm1lZCBjbGVhciAodGltZW91dCksIHRoZSBOSUIgcGFnZSBhbmQgZ3Vlc3RcbiYjNDM7ICogSVNDIGFyZSBpbnRlbnRpb25hbGx5IGxlYWtlZC4gSWYgdGhlIHBhZ2Ugd2VyZSB1bnBpbm5lZCBhbmQgcmV0dXJuZWQgdG8gdGhlXG4mIzQzOyAqIGFsbG9jYXRvciwgYSBzdWJzZXF1ZW50IGhhcmR3YXJlIERNQSB3cml0ZSB0byB0aGF0IHBoeXNpY2FsIGFkZHJlc3Mgd291bGRcbiYjNDM7ICogY29ycnVwdCBtZW1vcnkgYmVsb25naW5nIHRvIGEgbmV3IG93bmVyIOKAlCBhIHdpbGQgRE1BIHdyaXRlIHRoYXQgY291bGQgY3Jhc2hcbiYjNDM7ICogb3IgY29tcHJvbWlzZSB0aGUgaG9zdCBrZXJuZWwuXG4mIzQzOyAqXG4mIzQzOyAqIElmIHRoZSBxdWV1ZSBpcyBub24tb3BlcmF0aW9uYWwgKGRlY29uZmlndXJlZCwgY2hlY2tzdG9wcGVkLCBub3QgYXZhaWxhYmxlKSxcbiYjNDM7ICogcmVzb3VyY2VzIGFyZSBmcmVlZCBpbW1lZGlhdGVseSBzaW5jZSB0aGUgaGFyZHdhcmUgY2FuIG5vIGxvbmdlciB3cml0ZSB0b1xuJiM0MzsgKiB0aGUgTklCLlxuICAqXG4gICogUmV0dXJuOiBcdTAwMjZzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzXG4gICovXG5AQCAtMzEwLDE1ICYjNDM7MzMzLDM4IEBAIHN0YXRpYyBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHZmaW9fYXBfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4ge1xuIFx0dW5pb24gYXBfcWlycV9jdHJsIGFxaWNfZ2lzYSA9IHsgLnZhbHVlID0gMCB9O1xuIFx0c3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXM7XG4tXHRpbnQgcmV0cmllcyA9IDU7XG4mIzQzO1x0aW50IHJldHJpZXMgPSA1LCByZXQ7XG4gXG4gXHRkbyB7XG4gXHRcdHN0YXR1cyA9IGFwX2FxaWMocS1cdTAwM2VhcHFuLCBhcWljX2dpc2EsIDApO1xuIFx0XHRzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQ6XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxuLVx0XHRcdHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIocS1cdTAwM2VhcHFuKTtcbi1cdFx0XHRnb3RvIGVuZF9mcmVlO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBBUUlDIGRpc2FibGUgd2FzIGFjY2VwdGVkIChOT1JNQUwpLCBvciB0aGUgcXVldWUgd2FzXG4mIzQzO1x0XHRcdCAqIGFscmVhZHkgZGlzYWJsZWQgb3IgYSBwcmlvciBhc3luYyByZXF1ZXN0IGlzIHN0aWxsXG4mIzQzO1x0XHRcdCAqIGNvbXBsZXRpbmcgKE9USEVSV0lTRV9DSEFOR0VEKS4gIEluIGJvdGggY2FzZXMsIHdlIG11c3RcbiYjNDM7XHRcdFx0ICogd2FpdCB1bnRpbCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBoYXMgYmVlbiBkaXNhYmxlZFxuJiM0MztcdFx0XHQgKiBiZWZvcmUgcHJvY2VlZGluZy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHJldCA9IHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIocS1cdTAwM2VhcHFuKTtcbiYjNDM7XHRcdFx0aWYgKHJldCA9PSAwIHx8IHJldCA9PSAtRU5PREVWKVxuJiM0MztcdFx0XHRcdGdvdG8gZW5kX2ZyZWU7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFRpbWVkIG91dCB3YWl0aW5nIHRvIGNvbmZpcm0gaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuXG4mIzQzO1x0XHRcdCAqIElmIGFwX2FxaWMgcmV0dXJuZWQgTk9STUFMLCB0aGUgZ3Vlc3Qgd291bGQgaW5jb3JyZWN0bHlcbiYjNDM7XHRcdFx0ICogaW50ZXJwcmV0IHRoYXQgYXMgYSBzdWNjZXNzZnVsIGRpc2FibGUgYW5kIG1heSBmcmVlIG9yXG4mIzQzO1x0XHRcdCAqIHJldXNlIHRoZSBOSUIgd2hpbGUgaGFyZHdhcmUgY2FuIHN0aWxsIHdyaXRlIHRvIGl0LlxuJiM0MztcdFx0XHQgKiBaZXJvIHRoZSBzdGF0dXMgd29yZCBhbmQgc2V0IE9USEVSV0lTRV9DSEFOR0VEIHRvIG1pbWljXG4mIzQzO1x0XHRcdCAqIHdoYXQgdGhlIGhhcmR3YXJlIGRvZXMgZm9yIHRoYXQgcmVzcG9uc2UgY29kZS4gVGhpc1xuJiM0MztcdFx0XHQgKiBzaWduYWxzIHRvIHRoZSBndWVzdCB0aGF0IHRoZSByZXNldCBvcGVyYXRpb24gZGlkIG5vdFxuJiM0MztcdFx0XHQgKiBjb21wbGV0ZS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmIChzdGF0dXMucmVzcG9uc2VfY29kZSA9PSBBUF9SRVNQT05TRV9OT1JNQUwpIHtcbiYjNDM7XHRcdFx0XHRtZW1zZXQoXHUwMDI2c3RhdHVzLCAwLCBzaXplb2Yoc3RhdHVzKSk7XG4mIzQzO1x0XHRcdFx0c3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRnb3RvIGVuZF9mYWlsO1xuIFx0XHRjYXNlIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTOlxuIFx0XHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XG4gXHRcdFx0bXNsZWVwKDIwKTtcbkBAIC0zMjYsMTggJiM0MzszNzIsNDcgQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9RX05PVF9BVkFJTDpcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOlxuJiM0MztcdFx0XHQvKiBBUCBub3Qgb3BlcmF0aW9uYWw7IG5vIGZ1cnRoZXIgaW50ZXJydXB0cyBwb3NzaWJsZSAqL1xuJiM0MztcdFx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7JXM6IGFwX2FxaWMgc3RhdHVzICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbiYjNDM7XHRcdFx0XHQgIHN0YXR1cy5yZXNwb25zZV9jb2RlKTtcbiYjNDM7XHRcdFx0Z290byBlbmRfZnJlZTtcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1M6XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0LyogQWxsIGNhc2VzIGluIGRlZmF1bHQgbWVhbnMgQVAgbm90IG9wZXJhdGlvbmFsICovXG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFRoZSBBUUlDIGRpc2FibGUgd2FzIHJlamVjdGVkOyBJUlEgaXMgc3RpbGwgZW5hYmxlZFxuJiM0MztcdFx0XHQgKiBhbmQgdGhlIGhhcmR3YXJlIHN0aWxsIGhvbGRzIHRoZSBOSUIgYWRkcmVzcy4gRG8gbm90XG4mIzQzO1x0XHRcdCAqIGZyZWUgcmVzb3VyY2VzLlxuJiM0MztcdFx0XHQgKi9cbiBcdFx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7JXM6IGFwX2FxaWMgc3RhdHVzICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbiBcdFx0XHRcdCAgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xuLVx0XHRcdGdvdG8gZW5kX2ZyZWU7XG4mIzQzO1x0XHRcdGdvdG8gZW5kX2ZhaWw7XG4gXHRcdH1cbiBcdH0gd2hpbGUgKHJldHJpZXMtLSk7XG4gXG4gXHRXQVJOX09OQ0UoMSwgXCYjMzQ7JXM6IGFwX2FxaWMgc3RhdHVzICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbiBcdFx0ICBzdGF0dXMucmVzcG9uc2VfY29kZSk7XG4mIzQzO1xuJiM0MztlbmRfZmFpbDpcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdlIGFyZSBoZXJlIGVpdGhlciBiZWNhdXNlIHRoZSBBUUlDIGluc3RydWN0aW9uIGZhaWxlZCB0byBkaXNhYmxlXG4mIzQzO1x0ICogaW50ZXJydXB0cywgb3IgYmVjYXVzZSBJUj0wIGNvdWxkIG5vdCBiZSBjb25maXJtZWQuIEluIGVpdGhlciBjYXNlXG4mIzQzO1x0ICogdGhlIE5JQiBwYWdlIGFuZCBndWVzdCBJU0MgY2Fubm90IGJlIGZyZWVkOiBoYXJkd2FyZSBtYXkgc3RpbGwgd3JpdGVcbiYjNDM7XHQgKiB0byB0aGUgTklCLCBhbmQgdW5waW5uaW5nIHRoZSBwYWdlIHdvdWxkIGFsbG93IGl0IHRvIGJlIHJlYWxsb2NhdGVkXG4mIzQzO1x0ICogdG8gYSBuZXcgb3duZXIuIEEgc3Vic2VxdWVudCBoYXJkd2FyZSBETUEgd3JpdGUgdG8gdGhhdCBwaHlzaWNhbFxuJiM0MztcdCAqIGFkZHJlc3Mgd291bGQgY29ycnVwdCB0aGUgbmV3IG93bmVyJiMzOTtzIG1lbW9yeSDigJQgYSB3aWxkIERNQSB3cml0ZSB0aGF0XG4mIzQzO1x0ICogY291bGQgY3Jhc2ggb3IgY29tcHJvbWlzZSB0aGUgaG9zdCBrZXJuZWwuIFRoZSByZXNvdXJjZXMgYXJlXG4mIzQzO1x0ICogdGhlcmVmb3JlIGludGVudGlvbmFsbHkgbGVha2VkLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiBzdGF0dXM7XG4mIzQzO1xuIGVuZF9mcmVlOlxuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhpcyBsYWJlbCBpcyByZWFjaGVkIGJlY2F1c2UgdGhlIHF1ZXVlIHdhcyBzdWNjZXNzZnVsbHkgZGlzYWJsZWQsXG4mIzQzO1x0ICogb3IgYmVjYXVzZSB0aGUgcXVldWUgaXMgbm90IG9wZXJhdGlvbmFsIG9yIG5vdCBhdmFpbGFibGUsIGluIHdoaWNoIGNhc2VcbiYjNDM7XHQgKiBpbnRlcnJ1cHRzIGNhbiBub3QgYmUgcHJvY2Vzc2VkLCBzbyBmcmVlIHRoZSBBUUlDIHJlc291cmNlcyAtIHRoZSBwaW5uZWQgTklCXG4mIzQzO1x0ICogcGFnZSBhbmQgdGhlIHJlZ2lzdGVyZWQgZ3Vlc3QgSVNDIC0gdXNlZCB0byBlbmFibGUgaW50ZXJydXB0cyBzbyB0aGV5IHdpbGxcbiYjNDM7XHQgKiBub3QgYmUgbGVha2VkLlxuJiM0MztcdCAqL1xuIFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG5AQCAtNDAxLDIyICYjNDM7NDc2LDI5IEBAIHN0YXRpYyBpbnQgZW5zdXJlX25pYl9zaGFyZWQodW5zaWduZWQgbG9uZyBhZGRyKVxuIH1cbiBcbiAvKipcbi0gKiB2ZmlvX2FwX2lycV9lbmFibGUgLSBFbmFibGUgSW50ZXJydXB0aW9uIGZvciBhIEFQUU5cbiYjNDM7ICogdmZpb19hcF9pcnFfZW5hYmxlIC0gZW5hYmxlIGludGVycnVwdHMgZm9yIGFuIEFQIHF1ZXVlIG9uIGJlaGFsZiBvZiBhIGd1ZXN0XG4gICpcbi0gKiBAcTpcdCB0aGUgdmZpb19hcF9xdWV1ZSBob2xkaW5nIEFRSUMgcGFyYW1ldGVyc1xuJiM0MzsgKiBAcTpcdCB0aGUgdmZpb19hcF9xdWV1ZSBmb3Igd2hpY2ggaW50ZXJydXB0cyBhcmUgdG8gYmUgZW5hYmxlZFxuICAqIEBpc2M6IHRoZSBndWVzdCBJU0MgdG8gcmVnaXN0ZXIgd2l0aCB0aGUgR0lCIGludGVyZmFjZVxuLSAqIEB2Y3B1OiB0aGUgdmNwdSBvYmplY3QgY29udGFpbmluZyB0aGUgcmVnaXN0ZXJzIHNwZWNpZnlpbmcgdGhlIHBhcmFtZXRlcnNcbi0gKlx0ICBwYXNzZWQgdG8gdGhlIFBRQVAoQVFJQykgaW5zdHJ1Y3Rpb24uXG4mIzQzOyAqIEB2Y3B1OiB0aGUgdmNwdSB3aG9zZSByZWdpc3RlcnMgY29udGFpbiB0aGUgUFFBUChBUUlDKSBwYXJhbWV0ZXJzXG4mIzQzOyAqXG4mIzQzOyAqIFBpbnMgdGhlIGd1ZXN0IE5JQiBwYWdlLCByZWdpc3RlcnMgdGhlIGd1ZXN0IElTQyB3aXRoIHRoZSBHSUIgdG8gb2J0YWluIGFcbiYjNDM7ICogaG9zdCBJU0MsIGFuZCByZWlzc3VlcyBQUUFQKEFRSUMpIHdpdGggdGhlIHRyYW5zbGF0ZWQgaG9zdC1hYnNvbHV0ZSBOSUJcbiYjNDM7ICogYWRkcmVzcyBhbmQgaG9zdCBJU0Mgb24gYmVoYWxmIG9mIHRoZSBndWVzdC5cbiAgKlxuLSAqIFBpbiB0aGUgTklCIHNhdmVkIGluICpxXG4tICogUmVnaXN0ZXIgdGhlIGd1ZXN0IElTQyB0byBHSUIgaW50ZXJmYWNlIGFuZCByZXRyaWV2ZSB0aGVcbi0gKiBob3N0IElTQyB0byBpc3N1ZSB0aGUgaG9zdCBzaWRlIFBRQVAvQVFJQ1xuJiM0MzsgKiBUaGUgY29uZGl0aW9uIGNvZGUgYW5kIEFQLXF1ZXVlIHN0YXR1cyB3b3JkIHJldHVybmVkIGJ5IFBRQVAoQVFJQykgYXJlXG4mIzQzOyAqIHJlZmxlY3RlZCBiYWNrIHRvIHRoZSBndWVzdCBhcy1pcy4gSVJRIHN0YXRlIHZlcmlmaWNhdGlvbiAocG9sbGluZyB1bnRpbFxuJiM0MzsgKiBJUj0xKSBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGd1ZXN0IEFQIGJ1cywgbm90IHRoZSBob3N0LlxuICAqXG4tICogc3RhdHVzLnJlc3BvbnNlX2NvZGUgbWF5IGJlIHNldCB0byBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1MgaW4gY2FzZSB0aGVcbi0gKiB2ZmlvX3Bpbl9wYWdlcyBvciBrdm1fczM5MF9naXNjX3JlZ2lzdGVyIGZhaWxlZC5cbiYjNDM7ICogUmVzb3VyY2UgbWFuYWdlbWVudCBpcyBiYXNlZCBzb2xlbHkgb24gd2hldGhlciBoYXJkd2FyZSBhY2NlcHRlZCB0aGUgbmV3IE5JQjpcbiYjNDM7ICogLSBBUF9SRVNQT05TRV9OT1JNQUwgKENDPTApOiBoYXJkd2FyZSBhY2NlcHRlZCB0aGUgbmV3IE5JQjsgdGhlIG9sZCBwaW5uZWRcbiYjNDM7ICogICBOSUIgcGFnZSBhbmQgcmVnaXN0ZXJlZCBndWVzdCBJU0MgYXJlIGZyZWVkIGFuZCB0aGUgbmV3IG9uZXMgc2F2ZWQuXG4mIzQzOyAqIC0gQWxsIG90aGVyIHJlc3BvbnNlczogaGFyZHdhcmUgZGlkIG5vdCBhY2NlcHQgdGhlIG5ldyBOSUI7IHRoZSBuZXdseSBwaW5uZWRcbiYjNDM7ICogICBwYWdlIGFuZCByZWdpc3RlcmVkIElTQyBhcmUgZnJlZWQgYW5kIHRoZSBwcmV2aW91c2x5IHNhdmVkIHJlc291cmNlcyBhcmVcbiYjNDM7ICogICBsZWZ0IGludGFjdC5cbiAgKlxuLSAqIE90aGVyd2lzZSByZXR1cm4gdGhlIGFwX3F1ZXVlX3N0YXR1cyByZXR1cm5lZCBieSB0aGUgYXBfYXFpYygpLFxuLSAqIGFsbCByZXRyeSBoYW5kbGluZyB3aWxsIGJlIGRvbmUgYnkgdGhlIGd1ZXN0LlxuJiM0MzsgKiBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1MgaXMgcmV0dXJuZWQgaWYgdmZpb19waW5fcGFnZXMoKSBvclxuJiM0MzsgKiBrdm1fczM5MF9naXNjX3JlZ2lzdGVyKCkgZmFpbHMgYmVmb3JlIHRoZSBBUUlDIGluc3RydWN0aW9uIGlzIGlzc3VlZC5cbiAgKlxuICAqIFJldHVybjogXHUwMDI2c3RydWN0IGFwX3F1ZXVlX3N0YXR1c1xuICAqL1xuQEAgLTQyOCwxMSAmIzQzOzUxMCwxMCBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4gXHRzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHN0YXR1cyA9IHt9O1xuIFx0c3RydWN0IGt2bV9zMzkwX2dpc2EgKmdpc2E7XG4gXHRzdHJ1Y3QgcGFnZSAqaF9wYWdlO1xuLVx0aW50IG5pc2M7XG4mIzQzO1x0aW50IG5pc2MsIHJldDtcbiBcdHN0cnVjdCBrdm0gKmt2bTtcbiBcdHBoeXNfYWRkcl90IGhfbmliO1xuIFx0ZG1hX2FkZHJfdCBuaWI7XG4tXHRpbnQgcmV0O1xuIFxuIFx0LyogVmVyaWZ5IHRoYXQgdGhlIG5vdGlmaWNhdGlvbiBpbmRpY2F0b3IgYnl0ZSBhZGRyZXNzIGlzIHZhbGlkICovXG4gXHRpZiAodmZpb19hcF92YWxpZGF0ZV9uaWIodmNwdSwgXHUwMDI2bmliKSkge1xuQEAgLTQ4OSwyNCAmIzQzOzU3MCwzMyBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4gXHRzdGF0dXMgPSBhcF9hcWljKHEtXHUwMDNlYXBxbiwgYXFpY19naXNhLCBoX25pYik7XG4gXHRzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7XG4gXHRjYXNlIEFQX1JFU1BPTlNFX05PUk1BTDpcbi1cdFx0LyogU2VlIGlmIHdlIGRpZCBjbGVhciBvbGRlciBJUlEgY29uZmlndXJhdGlvbiAqL1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEhhcmR3YXJlIGFjY2VwdGVkIHRoZSBuZXcgTklCIGFkZHJlc3MgKENDPTApLiBUaGUgb2xkIE5JQiBhbmRcbiYjNDM7XHRcdCAqIGd1ZXN0IElTQyBhcmUgbm8gbG9uZ2VyIHVzZWQgYnkgaGFyZHdhcmUgYW5kIGNhbiBiZSBmcmVlZC5cbiYjNDM7XHRcdCAqIFRoZSBuZXcgcmVzb3VyY2VzIGFyZSBzYXZlZCBmb3IgdHJhY2tpbmcgYW5kIGZ1dHVyZSB0ZWFyZG93bi5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBJUlEgc3RhdGUgdmVyaWZpY2F0aW9uIChwb2xsaW5nIHVudGlsIElSPTEpIGlzIHRoZVxuJiM0MztcdFx0ICogcmVzcG9uc2liaWxpdHkgb2YgdGhlIGd1ZXN0IEFQIGJ1cywgbm90IHRoZSBob3N0LiBUaGVcbiYjNDM7XHRcdCAqIGNvbmRpdGlvbiBjb2RlIGFuZCBzdGF0dXMgd29yZCBhcmUgcmVmbGVjdGVkIGJhY2sgdG8gdGhlXG4mIzQzO1x0XHQgKiBndWVzdCB0byByZXNwb25kIHRvIHRoZSBQUUFQLUFRSUMgaW5zdHJ1Y3Rpb24uXG4mIzQzO1x0XHQgKi9cbiBcdFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuIFx0XHRxLVx1MDAzZXNhdmVkX2lvdmEgPSBuaWI7XG4gXHRcdHEtXHUwMDNlc2F2ZWRfaXNjID0gaXNjO1xuIFx0XHRicmVhaztcbi1cdGNhc2UgQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQ6XG4tXHRcdC8qIFdlIGNvdWxkIG5vdCBtb2RpZnkgSVJRIHNldHRpbmdzOiBjbGVhciBuZXcgY29uZmlndXJhdGlvbiAqL1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSGFyZHdhcmUgZGlkIG5vdCBhY2NlcHQgdGhlIG5ldyBOSUIgKENDPTMgb3IgZXJyb3IpLiBUaGVcbiYjNDM7XHRcdCAqIHByZXZpb3VzbHkgc2F2ZWQgTklCIGFuZCBndWVzdCBJU0MgcmVtYWluIGFjdGl2ZSBhbmQgbXVzdFxuJiM0MztcdFx0ICogbm90IGJlIGZyZWVkLiBSZWxlYXNlIHRoZSBuZXdseSBwaW5uZWQgcGFnZSBhbmQgcmVnaXN0ZXJlZFxuJiM0MztcdFx0ICogSVNDIHRoYXQgd2VyZSBwcmVwYXJlZCBmb3IgdGhpcyAocmVqZWN0ZWQpIHJlcXVlc3QuXG4mIzQzO1x0XHQgKi9cbiBcdFx0cmV0ID0ga3ZtX3MzOTBfZ2lzY191bnJlZ2lzdGVyKGt2bSwgaXNjKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRWRklPX0FQX0RCRl9XQVJOKFwmIzM0OyVzOiBrdm1fczM5MF9naXNjX3VucmVnaXN0ZXI6IHJjPSVkIGlzYz0lZCwgYXBxbj0lIzA0eFxcblwmIzM0OyxcbiBcdFx0XHRcdFx0IF9fZnVuY19fLCByZXQsIGlzYywgcS1cdTAwM2VhcHFuKTtcbiBcdFx0dmZpb191bnBpbl9wYWdlcyhcdTAwMjZxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZXZkZXYsIG5pYiwgMSk7XG4gXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0cHJfd2FybihcJiMzNDslczogYXBxbiAlMDR4OiByZXNwb25zZTogJTAyeFxcblwmIzM0OywgX19mdW5jX18sIHEtXHUwMDNlYXBxbixcbi1cdFx0XHRzdGF0dXMucmVzcG9uc2VfY29kZSk7XG4tXHRcdHZmaW9fYXBfaXJxX2Rpc2FibGUocSk7XG4tXHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0aWYgKHN0YXR1cy5yZXNwb25zZV9jb2RlICE9IEFQX1JFU1BPTlNFX05PUk1BTCkge1xuQEAgLTYzNSw3ICYjNDM7NzI1LDYgQEAgc3RhdGljIGludCBoYW5kbGVfcHFhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR9XG4gXG4gXHRzdGF0dXMgPSB2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VzLnJlZ3MuZ3Byc1sxXTtcbi1cbiBcdC8qIElmIElSIGJpdCgxNikgaXMgc2V0IHdlIGVuYWJsZSB0aGUgaW50ZXJydXB0ICovXG4gXHRpZiAoKHN0YXR1cyBcdTAwM2VcdTAwM2UgKDYzIC0gMTYpKSBcdTAwMjYgMHgwMSlcbiBcdFx0cXN0YXR1cyA9IHZmaW9fYXBfaXJxX2VuYWJsZShxLCBzdGF0dXMgXHUwMDI2IDB4MDcsIHZjcHUpO1xuQEAgLTY5MiwxNCAmIzQzOzc4MSwxNCBAQCBzdGF0aWMgYm9vbCBfcXVldWVfcGFzc2FibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4gXHRpZiAoIXEpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHN3aXRjaCAocS1cdTAwM2VyZXNldF9zdGF0dXMucmVzcG9uc2VfY29kZSkge1xuLVx0Y2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6XG4tXHRjYXNlIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRDpcbi1cdGNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOlxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdGRlZmF1bHQ6XG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgcXVldWUgaXMgb25seSBwYXNzYWJsZSBpZiB6ZXJvaXphdGlvbiB3YXMgY29uZmlybWVkIGJ5XG4mIzQzO1x0ICogYXBxX3Jlc2V0X2NoZWNrKCkgdmlhIFRBUFEgc3RhdHVzIGJpdCB2ZXJpZmljYXRpb24uIFRoaXMgaXNcbiYjNDM7XHQgKiBpbmRpY2F0ZWQgYnkgcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMICgwKS5cbiYjNDM7XHQgKiBUaGlzIGlzIHRvIHByb3RlY3QgYWdhaW5zdCBsZWFraW5nIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgcXVldWVcbiYjNDM7XHQgKiB0byB0aGUgZ3Vlc3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIHEtXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMO1xuIH1cbiBcbiAvKlxuQEAgLTE0MTAsNyAmIzQzOzE0OTksNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19kb21haW4oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbiB7XG4gXHRERUNMQVJFX0JJVE1BUChhcHFpcywgQVBfRE9NQUlOUyk7XG4gXG4tXHRiaXRtYXBfemVybyhhcHFpcywgQVBfREVWSUNFUyk7XG4mIzQzO1x0Yml0bWFwX3plcm8oYXBxaXMsIEFQX0RPTUFJTlMpO1xuIFx0c2V0X2JpdF9pbnYoYXBxaSwgYXBxaXMpO1xuIFx0dmZpb19hcF9tZGV2X2hvdF91bnBsdWdfZG9tYWlucyhtYXRyaXhfbWRldiwgYXBxaXMpO1xuIH1cbkBAIC0xOTE5LDEyICYjNDM7MjAwOCw0NyBAQCBzdGF0aWMgaW50IGFwcV9zdGF0dXNfY2hlY2soaW50IGFwcW4sIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgKnN0YXR1cylcbiB7XG4gXHRzd2l0Y2ggKHN0YXR1cy1cdTAwM2VyZXNwb25zZV9jb2RlKSB7XG4gXHRjYXNlIEFQX1JFU1BPTlNFX05PUk1BTDpcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGlzIHJlc3BvbnNlIGNvZGUgb25seSBpbmRpY2F0ZXMgdGhhdCB0aGUgUFFBUChaQVBRKSBoYXNcbiYjNDM7XHRcdCAqIGJlZW4gaW5pdGlhdGVkLiBUaGUgZm9sbG93aW5nIGJpdCBzZXR0aW5ncyBpbiB0aGUgc3RhdHVzXG4mIzQzO1x0XHQgKiByZXR1cm5lZCBmcm9tIFRBUFEgbXVzdCBiZSB2ZXJpZmllZCB0byBjb25maXJtIHRoYXQgdGhlXG4mIzQzO1x0XHQgKiBhc3luY2hyb25vdXMgcG9ydGlvbiBvZiB0aGUgcXVldWUgemVyb2l6YXRpb24gaGFzIGNvbXBsZXRlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHN0YXR1cy1cdTAwM2VxdWV1ZV9lbXB0eSBcdTAwMjZcdTAwMjYgIXN0YXR1cy1cdTAwM2VyZXBsaWVzX3dhaXRpbmcgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIXN0YXR1cy1cdTAwM2VpcnFfZW5hYmxlZCBcdTAwMjZcdTAwMjYgIXN0YXR1cy1cdTAwM2Vhc3luYylcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdFx0LyogQXN5bmMgemVyb2l6YXRpb24gc3RpbGwgaW4gcHJvZ3Jlc3M7IGtlZXAgd2FpdGluZyAqL1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4gXHRjYXNlIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRDpcbiBcdGNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOlxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGUgcXVldWUgaXMgbm9uLW9wZXJhdGlvbmFsOiBpbnRlcnJ1cHRzIGFyZSBub3QgcG9zc2libGUgc29cbiYjNDM7XHRcdCAqIEFRSUMgcmVzb3VyY2VzIGNhbiBiZSBzYWZlbHkgZnJlZWQuIEhvd2V2ZXIsIHplcm9pemF0aW9uXG4mIzQzO1x0XHQgKiBjYW5ub3QgYmUgY29uZmlybWVkIGJlY2F1c2UgYWxsIHN0YXR1cyBiaXRzIGFyZSB6ZXJvZWQgd2hlblxuJiM0MztcdFx0ICogdGhlc2UgcmVzcG9uc2UgY29kZXMgYXJlIHJldHVybmVkIOKAlCB0aGVyZSBpcyBubyB3YXkgdG9cbiYjNDM7XHRcdCAqIGRpc3Rpbmd1aXNoIGEgemVyb2l6ZWQgcXVldWUgZnJvbSBvbmUgdGhhdCBoYXMgbm90IGJlZW5cbiYjNDM7XHRcdCAqIHplcm9pemVkLiBSZXR1cm4gLUVOT0RFViB0byBzaWduYWwgdGhhdCBBUUlDIHJlc291cmNlcyBzaG91bGRcbiYjNDM7XHRcdCAqIGJlIGZyZWVkIGJ1dCB0aGF0IHplcm9pemF0aW9uIGhhcyBub3QgYmVlbiBjb25maXJtZWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiBcdGNhc2UgQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1M6XG4tXHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQSByZXNldCBpcyBpbiBwcm9ncmVzcy4gSXQgbWF5IGJlIHRoZSByZXNldCB3ZSBpc3N1ZWQgb3Igb25lXG4mIzQzO1x0XHQgKiBpc3N1ZWQgcHJpb3IgdG8gb3VyczsgZWl0aGVyIHdheSwgb25jZSBpdCBjb21wbGV0ZXMgdGhlIHF1ZXVlXG4mIzQzO1x0XHQgKiB3aWxsIGJlIHplcm9pemVkLCBzbyBrZWVwIHdhaXRpbmcuXG4mIzQzO1x0XHQgKi9cbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0Y2FzZSBBUF9SRVNQT05TRV9CVVNZOlxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBxdWV1ZSBpcyBidXN5IHdpdGggc29tZXRoaW5nIHVucmVsYXRlZCB0byBhIHJlc2V0IGFuZCBvdXJcbiYjNDM7XHRcdCAqIFpBUFEgd2FzIHJlamVjdGVkIG91dHJpZ2h0LiBSZS1pc3N1ZSB0aGUgWkFQUS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1xuIFx0Y2FzZSBBUF9SRVNQT05TRV9BU1NPQ19TRUNSRVRfTk9UX1VOSVFVRTpcbiBcdGNhc2UgQVBfUkVTUE9OU0VfQVNTT0NfRkFJTEVEOlxuIFx0XHQvKlxuQEAgLTE5MzUsNiAmIzQzOzIwNTksNyBAQCBzdGF0aWMgaW50IGFwcV9zdGF0dXNfY2hlY2soaW50IGFwcW4sIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgKnN0YXR1cylcbiBcdFx0ICogYSB2YWx1ZSBpbmRpY2F0aW5nIGEgcmVzZXQgbmVlZHMgdG8gYmUgcGVyZm9ybWVkIGFnYWluLlxuIFx0XHQgKi9cbiBcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1xuIFx0ZGVmYXVsdDpcbiBcdFx0V0FSTih0cnVlLFxuIFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byB2ZXJpZnkgcmVzZXQgb2YgcXVldWUgJTAyeC4lMDR4OiBUQVBRIHJjPSV1XFxuXCYjMzQ7LFxuQEAgLTE5NDQsNiAmIzQzOzIwNjksMzMgQEAgc3RhdGljIGludCBhcHFfc3RhdHVzX2NoZWNrKGludCBhcHFuLCBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzICpzdGF0dXMpXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCByZXBvcnRfYXFpY19yZXNvdXJjZV9sZWFrKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHEtXHUwMDNlc2F2ZWRfaXNjICE9IFZGSU9fQVBfSVNDX0lOVkFMSUQgfHwgcS1cdTAwM2VzYXZlZF9pb3ZhKSB7XG4mIzQzO1x0XHRpZiAocS1cdTAwM2VtYXRyaXhfbWRldikge1xuJiM0MztcdFx0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtSZXNldCB0aW1lZCBvdXQgZm9yIEFQUU4gJTAyeC4lMDR4OiBsZWFraW5nIEFRSUMgcmVzb3VyY2VzIChOSUIgcGFnZSBcdTAwMjYgR0lTQykgdG8gcHJldmVudCBob3N0IGNyYXNoXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuJiM0MztcdFx0XHRcdFx0ICAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O1Jlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHg6IGxlYWtpbmcgQVFJQyByZXNvdXJjZXMgKE5JQiBwYWdlIFx1MDAyNiBHSVNDKSB0byBwcmV2ZW50IGhvc3QgY3Jhc2hcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbiYjNDM7XHRcdFx0XHRcdCAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmIChxLVx1MDAzZW1hdHJpeF9tZGV2KSB7XG4mIzQzO1x0XHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXHUwMDNlbWF0cml4X21kZXYtXHUwMDNlbWRldiksXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O1Jlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4mIzQzO1x0XHRcdFx0XHQgICAgIEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7UmVzZXQgdGltZWQgb3V0IGZvciBBUFFOICUwMnguJTA0eFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuJiM0MztcdFx0XHRcdFx0ICAgIEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gI2RlZmluZSBXQUlUX01TRyBcJiMzNDtXYWl0ZWQgJWRtcyBmb3IgcmVzZXQgb2YgcXVldWUgJTAyeC4lMDR4ICgldSwgJXUsICV1KVwmIzM0O1xuIFxuIHN0YXRpYyB2b2lkIGFwcV9yZXNldF9jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnJlc2V0X3dvcmspXG5AQCAtMTk2MSw2ICYjNDM7MjExMyw1NiBAQCBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKVxuIFx0XHRyZXQgPSBhcHFfc3RhdHVzX2NoZWNrKHEtXHUwMDNlYXBxbiwgXHUwMDI2c3RhdHVzKTtcbiBcdFx0aWYgKHJldCA9PSAtRUlPKVxuIFx0XHRcdHJldHVybjtcbiYjNDM7XHRcdGlmIChxLVx1MDAzZXJlc2V0X21heF93YWl0IFx1MDAyNlx1MDAyNiBlbGFwc2VkIFx1MDAzZT0gcS1cdTAwM2VyZXNldF9tYXhfd2FpdCkge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBaZXJvaXphdGlvbiBjb25maXJtZWQgKHJldCA9PSAwKTogdGhlIFRBUFEgc3RhdHVzIGJpdHNcbiYjNDM7XHRcdFx0ICogaW5kaWNhdGUgdGhlIGFzeW5jIHBvcnRpb24gb2YgdGhlIFpBUFEgY29tcGxldGVkXG4mIzQzO1x0XHRcdCAqIHN1Y2Nlc3NmdWxseS4gRnJlZSBBUUlDIHJlc291cmNlcyBhbmQgcmV0dXJuLlxuJiM0MztcdFx0XHQgKlxuJiM0MztcdFx0XHQgKiBRdWV1ZSBub24tb3BlcmF0aW9uYWwgKHJldCA9PSAtRU5PREVWKTogdGhlIHF1ZXVlIGlzXG4mIzQzO1x0XHRcdCAqIGRlY29uZmlndXJlZCBvciBjaGVja3N0b3BwZWQ7IGludGVycnVwdHMgYXJlIG5vdFxuJiM0MztcdFx0XHQgKiBwb3NzaWJsZSBzbyBBUUlDIHJlc291cmNlcyBjYW4gYmUgc2FmZWx5IGZyZWVkLlxuJiM0MztcdFx0XHQgKiBaZXJvaXphdGlvbiBjYW5ub3QgYmUgY29uZmlybWVkIGluIHRoaXMgc3RhdGUsIGJ1dCB0aGVcbiYjNDM7XHRcdFx0ICogcXVldWUgY2Fubm90IGdlbmVyYXRlIGludGVycnVwdHMsIHNvIHRoZSBOSUIgcGFnZSBpc1xuJiM0MztcdFx0XHQgKiBubyBsb25nZXIgYSBETUEgdGFyZ2V0IGFuZCBpdCBpcyBzYWZlIHRvIGZyZWUgaXQuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoIXJldCB8fCByZXQgPT0gLUVOT0RFVilcbiYjNDM7XHRcdFx0XHRnb3RvIGRvbmU7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFRpbWVkIG91dCB3aXRob3V0IGJlaW5nIGFibGUgdG8gdmVyaWZ5IHphcHEgY29tcGxldGVkLlxuJiM0MztcdFx0XHQgKlxuJiM0MztcdFx0XHQgKiBUaGUgQVFJQyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcXVldWUgLSB0aGUgcGlubmVkXG4mIzQzO1x0XHRcdCAqIHBhZ2UgY29udGFpbmluZyB0aGUgTklCIGFuZCB0aGUgcmVnaXN0ZXJlZCBndWVzdCBJU0MgLVxuJiM0MztcdFx0XHQgKiBjYW5ub3QgYmUgZnJlZWQgaGVyZS4gVGhlIE5JQiBpcyB0aGUgYWN0aXZlIERNQSB0YXJnZXRcbiYjNDM7XHRcdFx0ICogZm9yIEFQIGludGVycnVwdCBkZWxpdmVyeSB1bnRpbCB0aGUgcmVzZXQgY29tcGxldGVzO1xuJiM0MztcdFx0XHQgKiBmcmVlaW5nIHRoZSBwaW5uZWQgcGFnZSB3aGlsZSB0aGUgaGFyZHdhcmUgbWF5IHN0aWxsXG4mIzQzO1x0XHRcdCAqIHdyaXRlIHRvIGl0IHdvdWxkIHJlc3VsdCBpbiBhIHdpbGQgRE1BIHdyaXRlIHRoYXQgY291bGRcbiYjNDM7XHRcdFx0ICogY29ycnVwdCBob3N0IG1lbW9yeS5cbiYjNDM7XHRcdFx0ICpcbiYjNDM7XHRcdFx0ICogSWYgdGhlIHJlc2V0IGV2ZW50dWFsbHkgY29tcGxldGVzLCBpbnRlcnJ1cHRzIHdpbGwgYmVcbiYjNDM7XHRcdFx0ICogdGVybWluYXRlZCBhbmQgdGhlIHBpbm5lZCBOSUIgcGFnZSBhbmQgSVNDIHJlZ2lzdHJhdGlvblxuJiM0MztcdFx0XHQgKiB3aWxsIGJlIGxlYWtlZC4gVGhpcyBpcyBwcmVmZXJhYmxlIHRvIGVpdGhlciBhIHdpbGQgRE1BXG4mIzQzO1x0XHRcdCAqIHdyaXRlIG9yIHdhaXRpbmcgaW5kZWZpbml0ZWx5OiBmbHVzaF93b3JrKCkgY2FsbGVycyBob2xkXG4mIzQzO1x0XHRcdCAqIHRoZSBtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2sgbXV0ZXggd2hpY2ggc2VyaWFsaXplcyBhY2Nlc3NcbiYjNDM7XHRcdFx0ICogdG8gYWxsIG1kZXYgb2JqZWN0cyBzeXN0ZW0td2lkZSwgc28gYmxvY2tpbmcgaGVyZSB3b3VsZFxuJiM0MztcdFx0XHQgKiBoYW5nIGFsbCBndWVzdHMgdG8gd2hpY2ggdGhvc2UgbWRldnMgYXJlIGF0dGFjaGVkLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0cmVwb3J0X2FxaWNfcmVzb3VyY2VfbGVhayhxKTtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogUmVwb3J0IHRoZSBhY3R1YWwgbm9uLXplcm8gaGFyZHdhcmUgcmVzcG9uc2UgY29kZSwgb3JcbiYjNDM7XHRcdFx0ICogc3ludGhlc2l6ZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUyBpZiBUQVBRXG4mIzQzO1x0XHRcdCAqIGNvbXBsZXRlZCBub3JtYWxseSBidXQgdGhlIHN0YXR1cyBiaXRzIGZhaWxlZCB0b1xuJiM0MztcdFx0XHQgKiB0cmFuc2l0aW9uIHRvIHRoZWlyIHBvc3QtcmVzZXQgc3RhdGVzLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKHN0YXR1cy5yZXNwb25zZV9jb2RlID09IEFQX1JFU1BPTlNFX05PUk1BTClcbiYjNDM7XHRcdFx0XHRxLVx1MDAzZXJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1M7XG4mIzQzO1x0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHRxLVx1MDAzZXJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlID0gc3RhdHVzLnJlc3BvbnNlX2NvZGU7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoIXJldCB8fCByZXQgPT0gLUVOT0RFVilcbiYjNDM7XHRcdFx0Z290byBkb25lO1xuIFx0XHRpZiAocmV0ID09IC1FQlVTWSkge1xuIFx0XHRcdHByX25vdGljZV9yYXRlbGltaXRlZChXQUlUX01TRywgZWxhcHNlZCxcbiBcdFx0XHRcdFx0ICAgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbkBAIC0xOTc1LDEzICYjNDM7MjE3NywxMyBAQCBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKVxuIFx0XHRcdCAgICByZXQgPT0gLUVBR0FJTikge1xuIFx0XHRcdFx0c3RhdHVzID0gYXBfemFwcShxLVx1MDAzZWFwcW4sIDApO1xuIFx0XHRcdFx0bWVtY3B5KFx1MDAyNnEtXHUwMDNlcmVzZXRfc3RhdHVzLCBcdTAwMjZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTtcbi1cdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbi1cdFx0XHRpZiAocS1cdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRClcbi1cdFx0XHRcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcbi1cdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuJiM0MztcbiYjNDM7ZG9uZTpcbiYjNDM7XHRpZiAocS1cdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRClcbiYjNDM7XHRcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxuQEAgLTIwNjEsMTIgJiM0MzsyMjYzLDI4IEBAIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X29wZW5fZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldilcbiBcdHJldHVybiB2ZmlvX2FwX21kZXZfc2V0X2t2bShtYXRyaXhfbWRldiwgdmRldi1cdTAwM2Vrdm0pO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3JlbGVhc2VfZXZlbnRmZHMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbiYjNDM7e1xuJiM0MztcdGlmIChtYXRyaXhfbWRldi1cdTAwM2VyZXFfdHJpZ2dlcikge1xuJiM0MztcdFx0ZXZlbnRmZF9jdHhfcHV0KG1hdHJpeF9tZGV2LVx1MDAzZXJlcV90cmlnZ2VyKTtcbiYjNDM7XHRcdG1hdHJpeF9tZGV2LVx1MDAzZXJlcV90cmlnZ2VyID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKG1hdHJpeF9tZGV2LVx1MDAzZWNmZ19jaGdfdHJpZ2dlcikge1xuJiM0MztcdFx0ZXZlbnRmZF9jdHhfcHV0KG1hdHJpeF9tZGV2LVx1MDAzZWNmZ19jaGdfdHJpZ2dlcik7XG4mIzQzO1x0XHRtYXRyaXhfbWRldi1cdTAwM2VjZmdfY2hnX3RyaWdnZXIgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2xvc2VfZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldilcbiB7XG4gXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID1cbiBcdFx0Y29udGFpbmVyX29mKHZkZXYsIHN0cnVjdCBhcF9tYXRyaXhfbWRldiwgdmRldik7XG4gXG4gXHR2ZmlvX2FwX21kZXZfdW5zZXRfa3ZtKG1hdHJpeF9tZGV2KTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuJiM0MztcdHZmaW9fYXBfbWRldl9yZWxlYXNlX2V2ZW50ZmRzKG1hdHJpeF9tZGV2KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3JlcXVlc3Qoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2LCB1bnNpZ25lZCBpbnQgY291bnQpXG5AQCAtMjQ1Nyw4ICYjNDM7MjY3NSwxMCBAQCBpbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxuIFxuIFx0cS1cdTAwM2VhcHFuID0gYXBxbjtcbiBcdHEtXHUwMDNlc2F2ZWRfaXNjID0gVkZJT19BUF9JU0NfSU5WQUxJRDtcbi1cdG1lbXNldChcdTAwMjZxLVx1MDAzZXJlc2V0X3N0YXR1cywgMCwgc2l6ZW9mKHEtXHUwMDNlcmVzZXRfc3RhdHVzKSk7XG4mIzQzO1x0cS1cdTAwM2VyZXNldF9tYXhfd2FpdCA9IEFQX1JFU0VUX01BWF9XQUlUO1xuIFx0SU5JVF9XT1JLKFx1MDAyNnEtXHUwMDNlcmVzZXRfd29yaywgYXBxX3Jlc2V0X2NoZWNrKTtcbiYjNDM7XHR2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWUocSk7XG4mIzQzO1x0Zmx1c2hfd29yayhcdTAwMjZxLVx1MDAzZXJlc2V0X3dvcmspO1xuIFxuIFx0aWYgKG1hdHJpeF9tZGV2KSB7XG4gXHRcdHZmaW9fYXBfbWRldl9saW5rX3F1ZXVlKG1hdHJpeF9tZGV2LCBxKTtcbkBAIC0yNTQxLDggJiM0MzsyNzYxLDE5IEBAIHZvaWQgdmZpb19hcF9tZGV2X3JlbW92ZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcbiBcdFx0dmZpb19hcF91bmxpbmtfcXVldWVfZnJfbWRldihxKTtcbiBcbiBcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZhcGRldi1cdTAwM2VkZXZpY2UsIE5VTEwpO1xuLVx0a2ZyZWUocSk7XG4gXHRyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3JfbWRldihtYXRyaXhfbWRldik7XG4mIzQzO1xuJiM0MztcdGlmIChxLVx1MDAzZXJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlICE9IEFQX1JFU1BPTlNFX05PUk1BTCkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIExvb3AgdW50aWwgemVyb2l6YXRpb24gb2YgcXVldWUgaXMgdmVyaWZpZWQgc28gd2UgZG9uJiMzOTt0IGxlYWtcbiYjNDM7XHRcdCAqIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgcXVldWUgdG8gdGhlIGNhbGxlci5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cS1cdTAwM2VyZXNldF9tYXhfd2FpdCA9IDA7XG4mIzQzO1x0XHR2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWUocSk7XG4mIzQzO1x0XHRmbHVzaF93b3JrKFx1MDAyNnEtXHUwMDNlcmVzZXRfd29yayk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrZnJlZShxKTtcbiB9XG4gXG4gLyoqXG5AQCAtMjY5NywxMSAmIzQzOzI5MjgsMTEgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X29uX2NmZ19yZW1vdmUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpjdXJfY29uZmlnX2luZm8sXG4gXHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChhcXJlbSxcbiBcdFx0XHRcdCAgICh1bnNpZ25lZCBsb25nICopcHJldl9jb25maWdfaW5mby1cdTAwM2VhcW0sXG4gXHRcdFx0XHQgICAodW5zaWduZWQgbG9uZyAqKWN1cl9jb25maWdfaW5mby1cdTAwM2VhcW0sXG4tXHRcdFx0XHQgICBBUF9ERVZJQ0VTKTtcbiYjNDM7XHRcdFx0XHQgICBBUF9ET01BSU5TKTtcbiBcdGRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kbm90KGNkcmVtLFxuIFx0XHRcdFx0ICAgKHVuc2lnbmVkIGxvbmcgKilwcmV2X2NvbmZpZ19pbmZvLVx1MDAzZWFkbSxcbiBcdFx0XHRcdCAgICh1bnNpZ25lZCBsb25nICopY3VyX2NvbmZpZ19pbmZvLVx1MDAzZWFkbSxcbi1cdFx0XHRcdCAgIEFQX0RFVklDRVMpO1xuJiM0MztcdFx0XHRcdCAgIEFQX0RPTUFJTlMpO1xuIFxuIFx0aWYgKGRvX3JlbW92ZSlcbiBcdFx0dmZpb19hcF9tZGV2X2NmZ19yZW1vdmUoYXByZW0sIGFxcmVtLCBjZHJlbSk7XG5AQCAtMjgxMiw3ICYjNDM7MzA0Myw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jZmdfYWRkKHVuc2lnbmVkIGxvbmcgKmFwbV9hZGQsIHVuc2lnbmVkIGxvbmcgKmFxbV9hZGQsXG4gXHRcdGJpdG1hcF9hbmQobWF0cml4X21kZXYtXHUwMDNlYXFtX2FkZCxcbiBcdFx0XHQgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYXFtLCBhcW1fYWRkLCBBUF9ET01BSU5TKTtcbiBcdFx0Yml0bWFwX2FuZChtYXRyaXhfbWRldi1cdTAwM2VhZG1fYWRkLFxuLVx0XHRcdCAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hZG0sIGFkbV9hZGQsIEFQX0RFVklDRVMpO1xuJiM0MztcdFx0XHQgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYWRtLCBhZG1fYWRkLCBBUF9ET01BSU5TKTtcbiBcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaCBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmhcbmluZGV4IDliZmY2NjZiMGIzNWQuLjkxNGVhNWQ0MWQzMzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oXG5AQCAtMTM5LDYgJiM0MzsxMzksOCBAQCBzdHJ1Y3QgYXBfbWF0cml4X21kZXYge1xuICAqXHRcdCB0aGF0IG5lZWQgdG8gYmUgcmVzZXRcbiAgKiBAcmVzZXRfc3RhdHVzOiB0aGUgc3RhdHVzIGZyb20gdGhlIGxhc3QgcmVzZXQgb2YgdGhlIHF1ZXVlXG4gICogQHJlc2V0X3dvcms6IHdvcmsgdG8gd2FpdCBmb3IgcXVldWUgcmVzZXQgdG8gY29tcGxldGVcbiYjNDM7ICogQHJlc2V0X21heF93YWl0OiB0aGUgbWF4IGFtb3VudCBvZiB0aW1lIHRvIHdhaXQgZm9yIGEgcmVzZXQgdG8gY29tcGxldGU7XG4mIzQzOyAqXHRcdCAgICBzcGVjaWZ5aW5nIDAgbWVhbnMgd2FpdCBhcyBsb25nIGFzIGl0IHRha2VzLlxuICAqL1xuIHN0cnVjdCB2ZmlvX2FwX3F1ZXVlIHtcbiBcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXY7XG5AQCAtMTUwLDYgJiM0MzsxNTIsNyBAQCBzdHJ1Y3QgdmZpb19hcF9xdWV1ZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHJlc2V0X3Fub2RlO1xuIFx0c3RydWN0IGFwX3F1ZXVlX3N0YXR1cyByZXNldF9zdGF0dXM7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfd29yaztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcmVzZXRfbWF4X3dhaXQ7XG4gfTtcbiBcbiBpbnQgdmZpb19hcF9tZGV2X3JlZ2lzdGVyKHZvaWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIFZGSU8gQVAgKEFkanVuY3QgUHJvY2Vzc29yKSBkcml2ZXIgaW4gZHJpdmVycy9zMzkwL2NyeXB0by8sIHdoaWNoIGlzIGV4Y2x1c2l2ZSB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUgKENPTkZJR19WRklPX0FQKSBhbmQgaXMgbmVpdGhlciBjb21waWxlZCBub3IgcmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjNjODY5YzdmY2QzZTI5MmZiMmY2ZDIyNjQyNGFhNGEyMTc0ZGVjYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMTg6MjI6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMKaW5kZXggOTQwYzBmZjY2OGJlZS4uZTA1NGZkNGE5NDk3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwpAQCAtMzEsNiAmIzQzOzMxLDcgQEAKICNkZWZpbmUgQVBfUVVFVUVfSU5fVVNFICYjMzQ7aW4gdXNlJiMzNDsKIAogI2RlZmluZSBBUF9SRVNFVF9JTlRFUlZBTAkJMjAJLyogUmVzZXQgc2xlZXAgaW50ZXJ2YWwgKDIwbXMpCQkqLwomIzQzOyNkZWZpbmUgQVBfUkVTRVRfTUFYX1dBSVQJCTIwMDAJLyogTWF4aW11bSB3YWl0IGZvciByZXNldCAoMjAwMG1zKQkqLwogCiBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZXMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldik7CiBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9yZXNldF9xbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpxbGlzdCk7CkBAIC0yMjYsMTYgJiM0MzsyMjcsMjcgQEAgc3RhdGljIHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICp2ZmlvX2FwX21kZXZfZ2V0X3F1ZXVlKAogfQogCiAvKioKLSAqIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIgLSBjbGVhcnMgdGhlIElSIGJpdCBvciBnaXZlcyB1cCBhZnRlciA1IHRyaWVzCi0gKiBAYXBxbjogVGhlIEFQIFF1ZXVlIG51bWJlcgotICoKLSAqIENoZWNrcyB0aGUgSVJRIGJpdCBmb3IgdGhlIHN0YXR1cyBvZiB0aGlzIEFQUU4gdXNpbmcgYXBfdGFwcS4KLSAqIFJldHVybnMgaWYgdGhlIGFwX3RhcHEgZnVuY3Rpb24gc3VjY2VlZGVkIGFuZCB0aGUgYml0IGlzIGNsZWFyLgotICogUmV0dXJucyBpZiBhcF90YXBxIGZ1bmN0aW9uIGZhaWxlZCB3aXRoIGludmFsaWQsIGRlY29uZmlndXJlZCBvcgotICogY2hlY2tzdG9wcGVkIEFQLgotICogT3RoZXJ3aXNlIHJldHJpZXMgdXAgdG8gNSB0aW1lcyBhZnRlciB3YWl0aW5nIDIwbXMuCiYjNDM7ICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhciAtIHdhaXQgZm9yIHRoZSBJUiBiaXQgdG8gY2xlYXIgYWZ0ZXIgYSBkaXNhYmxlCiYjNDM7ICoKJiM0MzsgKiBAYXBxbjogdGhlIEFQUU4gb2YgdGhlIHF1ZXVlCiYjNDM7ICoKJiM0MzsgKiBSZXBlYXRlZGx5IHBvbGxzIHRoZSBBUCBxdWV1ZSBzdGF0dXMgdmlhIFBRQVAoVEFQUSkgZXZlcnkgMjBtcyB1bnRpbCB0aGUgSVIKJiM0MzsgKiBiaXQgaXMgY2xlYXIsIHRoZSBxdWV1ZSBiZWNvbWVzIG5vbi1vcGVyYXRpb25hbCwgb3IgNSByZXRyaWVzIGFyZSBleGhhdXN0ZWQuCiYjNDM7ICoKJiM0MzsgKiBCZWNhdXNlIFBRQVAoQVFJQykgZGlzYWJsZSBpbml0aWF0ZXMgYW4gYXN5bmNocm9ub3VzIHByb2Nlc3MsIGEKJiM0MzsgKiBjb25kaXRpb24tY29kZSAwIGNvbXBsZXRpb24gZG9lcyBub3QgZ3VhcmFudGVlIHRoZSBJUiBiaXQgaGFzIGJlZW4gY2xlYXJlZC4KJiM0MzsgKiBUaGUgaG9zdCBtdXN0IGNvbmZpcm0gSVI9MCBiZWZvcmUgdW5waW5uaW5nIHRoZSBOSUIgcGFnZSB0byBhdm9pZCBhIHdpbGQKJiM0MzsgKiBETUEgd3JpdGUgdG8gYSBmcmVlZCBwYWdlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqIC0gMAkJaWYgdGhlIElSIGJpdCBpcyBjbGVhciAoaS5lLiwgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQpLgomIzQzOyAqCiYjNDM7ICogLSAtRU5PREVWCWlmIHRoZSBQUUFQLVRBUFEgcmVzcG9uc2UgY29kZSBpbmRpY2F0ZXMgdGhlIHF1ZXVlIGlzIG5vdCBhdmFpbGFibGUsCiYjNDM7ICoJCWlzIGRlY29uZmlndXJlZCwgb3IgaXMgY2hlY2tzdG9wcGVkIChpLmUuLCBub3Qgb3BlcmF0aW9uYWwpLgomIzQzOyAqCiYjNDM7ICogLSAtRVRJTUVET1VUCXRoZSBmdW5jdGlvbiB0aW1lZCBvdXQgYmVmb3JlIHRoZSBJUiBiaXQgd2FzIGNsZWFyZWQuCiAgKi8KLXN0YXRpYyB2b2lkIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoaW50IGFwcW4pCiYjNDM7c3RhdGljIGludCB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKGludCBhcHFuKQogewogCXN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgc3RhdHVzOwogCWludCByZXRyeSA9IDU7CkBAIC0yNDYsNyAmIzQzOzI1OCw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoaW50IGFwcW4pCiAJCWNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOgogCQljYXNlIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTOgogCQkJaWYgKCFzdGF0dXMuaXJxX2VuYWJsZWQpCi0JCQkJcmV0dXJuOwomIzQzOwkJCQlyZXR1cm4gMDsKIAkJCWZhbGx0aHJvdWdoOwogCQljYXNlIEFQX1JFU1BPTlNFX0JVU1k6CiAJCQltc2xlZXAoMjApOwpAQCAtMjU3LDEyICYjNDM7MjY5LDE1IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoaW50IGFwcW4pCiAJCWRlZmF1bHQ6CiAJCQlXQVJOX09OQ0UoMSwgJiMzNDslczogdGFwcSByYyAlMDJ4OiAlMDR4XG4mIzM0OywgX19mdW5jX18sCiAJCQkJICBzdGF0dXMucmVzcG9uc2VfY29kZSwgYXBxbik7Ci0JCQlyZXR1cm47CiYjNDM7CQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9IHdoaWxlICgtLXJldHJ5KTsKIAotCVdBUk5fT05DRSgxLCAmIzM0OyVzOiB0YXBxIHJjICUwMng6ICUwNHggY291bGQgbm90IGNsZWFyIElSIGJpdFxuJiMzNDssCi0JCSAgX19mdW5jX18sIHN0YXR1cy5yZXNwb25zZV9jb2RlLCBhcHFuKTsKJiM0MzsJV0FSTl9PTkNFKDEsICYjMzQ7JXM6IHRhcHEgcmMgJTAyeDogdGltZWQgb3V0IHdhaXRpbmcgZm9yIGludGVycnVwdHMgZGlzYWJsZWQgZm9yICUwMnguJTA0eFxuJiMzNDssCiYjNDM7CQkgIF9fZnVuY19fLCBzdGF0dXMucmVzcG9uc2VfY29kZSwKJiM0MzsJCSAgQVBfUUlEX0NBUkQoYXBxbiksIEFQX1FJRF9RVUVVRShhcHFuKSk7CiYjNDM7CiYjNDM7CXJldHVybiAtRVRJTUVET1VUOwogfQogCiAvKioKQEAgLTI4OSwyMCAmIzQzOzMwNCwyOCBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpCiB9CiAKIC8qKgotICogdmZpb19hcF9pcnFfZGlzYWJsZSAtIGRpc2FibGVzIGFuZCBjbGVhcnMgYW4gYXBfcXVldWUgaW50ZXJydXB0Ci0gKiBAcTogVGhlIHZmaW9fYXBfcXVldWUKJiM0MzsgKiB2ZmlvX2FwX2lycV9kaXNhYmxlIC0gZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciBhbiBBUCBxdWV1ZQomIzQzOyAqIEBxOiB0aGUgdmZpb19hcF9xdWV1ZQogICoKLSAqIFVzZXMgYXBfYXFpYyB0byBkaXNhYmxlIHRoZSBpbnRlcnJ1cHRpb24gYW5kIGluIGNhc2Ugb2Ygc3VjY2VzcywgcmVzZXQKLSAqIGluIHByb2dyZXNzIG9yIElSUSBkaXNhYmxlIGNvbW1hbmQgYWxyZWFkeSBwcm9jZWVkZWQ6IGNhbGxzCi0gKiB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKCkgdG8gY2hlY2sgZm9yIHRoZSBJUlEgYml0IHRvIGJlIGNsZWFyCi0gKiBhbmQgY2FsbHMgdmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKCkgdG8gZnJlZSB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQKLSAqIHdpdGggdGhlIEFQIGludGVycnVwdCBoYW5kbGluZy4KJiM0MzsgKiBJc3N1ZXMgUFFBUChBUUlDKSB0byBkaXNhYmxlIGludGVycnVwdHMgZm9yIHRoZSBBUCBxdWV1ZS4gT24gc3VjY2VzcwomIzQzOyAqIChBUF9SRVNQT05TRV9OT1JNQUwgb3IgQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQpLCBwb2xscyB2aWEKJiM0MzsgKiB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKCkgdW50aWwgdGhlIElSIGJpdCBpcyBjb25maXJtZWQgY2xlYXIgYmVmb3JlCiYjNDM7ICogZnJlZWluZyB0aGUgcGlubmVkIE5JQiBwYWdlIGFuZCB1bnJlZ2lzdGVyaW5nIHRoZSBndWVzdCBJU0MuIFRoaXMgd2FpdCBpcwomIzQzOyAqIG5lY2Vzc2FyeSBiZWNhdXNlIEFRSUMgZGlzYWJsZSBpcyBhc3luY2hyb25vdXM6IGZyZWVpbmcgdGhlIE5JQiBiZWZvcmUgSVI9MAomIzQzOyAqIGlzIGNvbmZpcm1lZCByaXNrcyBhIHdpbGQgRE1BIHdyaXRlIHRvIGEgZnJlZWQgaG9zdCBwYWdlLgogICoKLSAqIEluIHRoZSBjYXNlIHRoZSBBUCBpcyBidXN5LCBvciBhIHJlc2V0IGlzIGluIHByb2dyZXNzLAotICogcmV0cmllcyBhZnRlciAyMG1zLCB1cCB0byA1IHRpbWVzLgomIzQzOyAqIFJldHJpZXMgdXAgdG8gNSB0aW1lcyAod2l0aCAyMG1zIHNsZWVwKSBpZiB0aGUgcXVldWUgaXMgYnVzeSBvciBhIHJlc2V0IGlzCiYjNDM7ICogaW4gcHJvZ3Jlc3MuCiAgKgotICogUmV0dXJucyBpZiBhcF9hcWljIGZ1bmN0aW9uIGZhaWxlZCB3aXRoIGludmFsaWQsIGRlY29uZmlndXJlZCBvcgotICogY2hlY2tzdG9wcGVkIEFQLgomIzQzOyAqIElmIHRoZSBJUiBiaXQgY2Fubm90IGJlIGNvbmZpcm1lZCBjbGVhciAodGltZW91dCksIHRoZSBOSUIgcGFnZSBhbmQgZ3Vlc3QKJiM0MzsgKiBJU0MgYXJlIGludGVudGlvbmFsbHkgbGVha2VkLiBJZiB0aGUgcGFnZSB3ZXJlIHVucGlubmVkIGFuZCByZXR1cm5lZCB0byB0aGUKJiM0MzsgKiBhbGxvY2F0b3IsIGEgc3Vic2VxdWVudCBoYXJkd2FyZSBETUEgd3JpdGUgdG8gdGhhdCBwaHlzaWNhbCBhZGRyZXNzIHdvdWxkCiYjNDM7ICogY29ycnVwdCBtZW1vcnkgYmVsb25naW5nIHRvIGEgbmV3IG93bmVyIOKAlCBhIHdpbGQgRE1BIHdyaXRlIHRoYXQgY291bGQgY3Jhc2gKJiM0MzsgKiBvciBjb21wcm9taXNlIHRoZSBob3N0IGtlcm5lbC4KJiM0MzsgKgomIzQzOyAqIElmIHRoZSBxdWV1ZSBpcyBub24tb3BlcmF0aW9uYWwgKGRlY29uZmlndXJlZCwgY2hlY2tzdG9wcGVkLCBub3QgYXZhaWxhYmxlKSwKJiM0MzsgKiByZXNvdXJjZXMgYXJlIGZyZWVkIGltbWVkaWF0ZWx5IHNpbmNlIHRoZSBoYXJkd2FyZSBjYW4gbm8gbG9uZ2VyIHdyaXRlIHRvCiYjNDM7ICogdGhlIE5JQi4KICAqCiAgKiBSZXR1cm46ICZhbXA7c3RydWN0IGFwX3F1ZXVlX3N0YXR1cwogICovCkBAIC0zMTAsMTUgJiM0MzszMzMsMzggQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSkKIHsKIAl1bmlvbiBhcF9xaXJxX2N0cmwgYXFpY19naXNhID0geyAudmFsdWUgPSAwIH07CiAJc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXM7Ci0JaW50IHJldHJpZXMgPSA1OwomIzQzOwlpbnQgcmV0cmllcyA9IDUsIHJldDsKIAogCWRvIHsKIAkJc3RhdHVzID0gYXBfYXFpYyhxLSZndDthcHFuLCBhcWljX2dpc2EsIDApOwogCQlzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7CiAJCWNhc2UgQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQ6CiAJCWNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOgotCQkJdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcihxLSZndDthcHFuKTsKLQkJCWdvdG8gZW5kX2ZyZWU7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBBUUlDIGRpc2FibGUgd2FzIGFjY2VwdGVkIChOT1JNQUwpLCBvciB0aGUgcXVldWUgd2FzCiYjNDM7CQkJICogYWxyZWFkeSBkaXNhYmxlZCBvciBhIHByaW9yIGFzeW5jIHJlcXVlc3QgaXMgc3RpbGwKJiM0MzsJCQkgKiBjb21wbGV0aW5nIChPVEhFUldJU0VfQ0hBTkdFRCkuICBJbiBib3RoIGNhc2VzLCB3ZSBtdXN0CiYjNDM7CQkJICogd2FpdCB1bnRpbCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBoYXMgYmVlbiBkaXNhYmxlZAomIzQzOwkJCSAqIGJlZm9yZSBwcm9jZWVkaW5nLgomIzQzOwkJCSAqLwomIzQzOwkJCXJldCA9IHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIocS0mZ3Q7YXBxbik7CiYjNDM7CQkJaWYgKHJldCA9PSAwIHx8IHJldCA9PSAtRU5PREVWKQomIzQzOwkJCQlnb3RvIGVuZF9mcmVlOwomIzQzOwkJCS8qCiYjNDM7CQkJICogVGltZWQgb3V0IHdhaXRpbmcgdG8gY29uZmlybSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4KJiM0MzsJCQkgKiBJZiBhcF9hcWljIHJldHVybmVkIE5PUk1BTCwgdGhlIGd1ZXN0IHdvdWxkIGluY29ycmVjdGx5CiYjNDM7CQkJICogaW50ZXJwcmV0IHRoYXQgYXMgYSBzdWNjZXNzZnVsIGRpc2FibGUgYW5kIG1heSBmcmVlIG9yCiYjNDM7CQkJICogcmV1c2UgdGhlIE5JQiB3aGlsZSBoYXJkd2FyZSBjYW4gc3RpbGwgd3JpdGUgdG8gaXQuCiYjNDM7CQkJICogWmVybyB0aGUgc3RhdHVzIHdvcmQgYW5kIHNldCBPVEhFUldJU0VfQ0hBTkdFRCB0byBtaW1pYwomIzQzOwkJCSAqIHdoYXQgdGhlIGhhcmR3YXJlIGRvZXMgZm9yIHRoYXQgcmVzcG9uc2UgY29kZS4gVGhpcwomIzQzOwkJCSAqIHNpZ25hbHMgdG8gdGhlIGd1ZXN0IHRoYXQgdGhlIHJlc2V0IG9wZXJhdGlvbiBkaWQgbm90CiYjNDM7CQkJICogY29tcGxldGUuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKHN0YXR1cy5yZXNwb25zZV9jb2RlID09IEFQX1JFU1BPTlNFX05PUk1BTCkgewomIzQzOwkJCQltZW1zZXQoJmFtcDtzdGF0dXMsIDAsIHNpemVvZihzdGF0dXMpKTsKJiM0MzsJCQkJc3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDsKJiM0MzsJCQl9CiYjNDM7CQkJZ290byBlbmRfZmFpbDsKIAkJY2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzoKIAkJY2FzZSBBUF9SRVNQT05TRV9CVVNZOgogCQkJbXNsZWVwKDIwKTsKQEAgLTMyNiwxOCAmIzQzOzM3Miw0NyBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKQogCQljYXNlIEFQX1JFU1BPTlNFX1FfTk9UX0FWQUlMOgogCQljYXNlIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRDoKIAkJY2FzZSBBUF9SRVNQT05TRV9DSEVDS1NUT1BQRUQ6CiYjNDM7CQkJLyogQVAgbm90IG9wZXJhdGlvbmFsOyBubyBmdXJ0aGVyIGludGVycnVwdHMgcG9zc2libGUgKi8KJiM0MzsJCQlXQVJOX09OQ0UoMSwgJiMzNDslczogYXBfYXFpYyBzdGF0dXMgJWRcbiYjMzQ7LCBfX2Z1bmNfXywKJiM0MzsJCQkJICBzdGF0dXMucmVzcG9uc2VfY29kZSk7CiYjNDM7CQkJZ290byBlbmRfZnJlZTsKIAkJY2FzZSBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1M6CiAJCWRlZmF1bHQ6Ci0JCQkvKiBBbGwgY2FzZXMgaW4gZGVmYXVsdCBtZWFucyBBUCBub3Qgb3BlcmF0aW9uYWwgKi8KJiM0MzsJCQkvKgomIzQzOwkJCSAqIFRoZSBBUUlDIGRpc2FibGUgd2FzIHJlamVjdGVkOyBJUlEgaXMgc3RpbGwgZW5hYmxlZAomIzQzOwkJCSAqIGFuZCB0aGUgaGFyZHdhcmUgc3RpbGwgaG9sZHMgdGhlIE5JQiBhZGRyZXNzLiBEbyBub3QKJiM0MzsJCQkgKiBmcmVlIHJlc291cmNlcy4KJiM0MzsJCQkgKi8KIAkJCVdBUk5fT05DRSgxLCAmIzM0OyVzOiBhcF9hcWljIHN0YXR1cyAlZFxuJiMzNDssIF9fZnVuY19fLAogCQkJCSAgc3RhdHVzLnJlc3BvbnNlX2NvZGUpOwotCQkJZ290byBlbmRfZnJlZTsKJiM0MzsJCQlnb3RvIGVuZF9mYWlsOwogCQl9CiAJfSB3aGlsZSAocmV0cmllcy0tKTsKIAogCVdBUk5fT05DRSgxLCAmIzM0OyVzOiBhcF9hcWljIHN0YXR1cyAlZFxuJiMzNDssIF9fZnVuY19fLAogCQkgIHN0YXR1cy5yZXNwb25zZV9jb2RlKTsKJiM0MzsKJiM0MztlbmRfZmFpbDoKJiM0MzsJLyoKJiM0MzsJICogV2UgYXJlIGhlcmUgZWl0aGVyIGJlY2F1c2UgdGhlIEFRSUMgaW5zdHJ1Y3Rpb24gZmFpbGVkIHRvIGRpc2FibGUKJiM0MzsJICogaW50ZXJydXB0cywgb3IgYmVjYXVzZSBJUj0wIGNvdWxkIG5vdCBiZSBjb25maXJtZWQuIEluIGVpdGhlciBjYXNlCiYjNDM7CSAqIHRoZSBOSUIgcGFnZSBhbmQgZ3Vlc3QgSVNDIGNhbm5vdCBiZSBmcmVlZDogaGFyZHdhcmUgbWF5IHN0aWxsIHdyaXRlCiYjNDM7CSAqIHRvIHRoZSBOSUIsIGFuZCB1bnBpbm5pbmcgdGhlIHBhZ2Ugd291bGQgYWxsb3cgaXQgdG8gYmUgcmVhbGxvY2F0ZWQKJiM0MzsJICogdG8gYSBuZXcgb3duZXIuIEEgc3Vic2VxdWVudCBoYXJkd2FyZSBETUEgd3JpdGUgdG8gdGhhdCBwaHlzaWNhbAomIzQzOwkgKiBhZGRyZXNzIHdvdWxkIGNvcnJ1cHQgdGhlIG5ldyBvd25lciYjMzk7cyBtZW1vcnkg4oCUIGEgd2lsZCBETUEgd3JpdGUgdGhhdAomIzQzOwkgKiBjb3VsZCBjcmFzaCBvciBjb21wcm9taXNlIHRoZSBob3N0IGtlcm5lbC4gVGhlIHJlc291cmNlcyBhcmUKJiM0MzsJICogdGhlcmVmb3JlIGludGVudGlvbmFsbHkgbGVha2VkLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIHN0YXR1czsKJiM0MzsKIGVuZF9mcmVlOgomIzQzOwkvKgomIzQzOwkgKiBUaGlzIGxhYmVsIGlzIHJlYWNoZWQgYmVjYXVzZSB0aGUgcXVldWUgd2FzIHN1Y2Nlc3NmdWxseSBkaXNhYmxlZCwKJiM0MzsJICogb3IgYmVjYXVzZSB0aGUgcXVldWUgaXMgbm90IG9wZXJhdGlvbmFsIG9yIG5vdCBhdmFpbGFibGUsIGluIHdoaWNoIGNhc2UKJiM0MzsJICogaW50ZXJydXB0cyBjYW4gbm90IGJlIHByb2Nlc3NlZCwgc28gZnJlZSB0aGUgQVFJQyByZXNvdXJjZXMgLSB0aGUgcGlubmVkIE5JQgomIzQzOwkgKiBwYWdlIGFuZCB0aGUgcmVnaXN0ZXJlZCBndWVzdCBJU0MgLSB1c2VkIHRvIGVuYWJsZSBpbnRlcnJ1cHRzIHNvIHRoZXkgd2lsbAomIzQzOwkgKiBub3QgYmUgbGVha2VkLgomIzQzOwkgKi8KIAl2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTQwMSwyMiAmIzQzOzQ3NiwyOSBAQCBzdGF0aWMgaW50IGVuc3VyZV9uaWJfc2hhcmVkKHVuc2lnbmVkIGxvbmcgYWRkcikKIH0KIAogLyoqCi0gKiB2ZmlvX2FwX2lycV9lbmFibGUgLSBFbmFibGUgSW50ZXJydXB0aW9uIGZvciBhIEFQUU4KJiM0MzsgKiB2ZmlvX2FwX2lycV9lbmFibGUgLSBlbmFibGUgaW50ZXJydXB0cyBmb3IgYW4gQVAgcXVldWUgb24gYmVoYWxmIG9mIGEgZ3Vlc3QKICAqCi0gKiBAcToJIHRoZSB2ZmlvX2FwX3F1ZXVlIGhvbGRpbmcgQVFJQyBwYXJhbWV0ZXJzCiYjNDM7ICogQHE6CSB0aGUgdmZpb19hcF9xdWV1ZSBmb3Igd2hpY2ggaW50ZXJydXB0cyBhcmUgdG8gYmUgZW5hYmxlZAogICogQGlzYzogdGhlIGd1ZXN0IElTQyB0byByZWdpc3RlciB3aXRoIHRoZSBHSUIgaW50ZXJmYWNlCi0gKiBAdmNwdTogdGhlIHZjcHUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZ2lzdGVycyBzcGVjaWZ5aW5nIHRoZSBwYXJhbWV0ZXJzCi0gKgkgIHBhc3NlZCB0byB0aGUgUFFBUChBUUlDKSBpbnN0cnVjdGlvbi4KJiM0MzsgKiBAdmNwdTogdGhlIHZjcHUgd2hvc2UgcmVnaXN0ZXJzIGNvbnRhaW4gdGhlIFBRQVAoQVFJQykgcGFyYW1ldGVycwomIzQzOyAqCiYjNDM7ICogUGlucyB0aGUgZ3Vlc3QgTklCIHBhZ2UsIHJlZ2lzdGVycyB0aGUgZ3Vlc3QgSVNDIHdpdGggdGhlIEdJQiB0byBvYnRhaW4gYQomIzQzOyAqIGhvc3QgSVNDLCBhbmQgcmVpc3N1ZXMgUFFBUChBUUlDKSB3aXRoIHRoZSB0cmFuc2xhdGVkIGhvc3QtYWJzb2x1dGUgTklCCiYjNDM7ICogYWRkcmVzcyBhbmQgaG9zdCBJU0Mgb24gYmVoYWxmIG9mIHRoZSBndWVzdC4KICAqCi0gKiBQaW4gdGhlIE5JQiBzYXZlZCBpbiAqcQotICogUmVnaXN0ZXIgdGhlIGd1ZXN0IElTQyB0byBHSUIgaW50ZXJmYWNlIGFuZCByZXRyaWV2ZSB0aGUKLSAqIGhvc3QgSVNDIHRvIGlzc3VlIHRoZSBob3N0IHNpZGUgUFFBUC9BUUlDCiYjNDM7ICogVGhlIGNvbmRpdGlvbiBjb2RlIGFuZCBBUC1xdWV1ZSBzdGF0dXMgd29yZCByZXR1cm5lZCBieSBQUUFQKEFRSUMpIGFyZQomIzQzOyAqIHJlZmxlY3RlZCBiYWNrIHRvIHRoZSBndWVzdCBhcy1pcy4gSVJRIHN0YXRlIHZlcmlmaWNhdGlvbiAocG9sbGluZyB1bnRpbAomIzQzOyAqIElSPTEpIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgZ3Vlc3QgQVAgYnVzLCBub3QgdGhlIGhvc3QuCiAgKgotICogc3RhdHVzLnJlc3BvbnNlX2NvZGUgbWF5IGJlIHNldCB0byBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1MgaW4gY2FzZSB0aGUKLSAqIHZmaW9fcGluX3BhZ2VzIG9yIGt2bV9zMzkwX2dpc2NfcmVnaXN0ZXIgZmFpbGVkLgomIzQzOyAqIFJlc291cmNlIG1hbmFnZW1lbnQgaXMgYmFzZWQgc29sZWx5IG9uIHdoZXRoZXIgaGFyZHdhcmUgYWNjZXB0ZWQgdGhlIG5ldyBOSUI6CiYjNDM7ICogLSBBUF9SRVNQT05TRV9OT1JNQUwgKENDPTApOiBoYXJkd2FyZSBhY2NlcHRlZCB0aGUgbmV3IE5JQjsgdGhlIG9sZCBwaW5uZWQKJiM0MzsgKiAgIE5JQiBwYWdlIGFuZCByZWdpc3RlcmVkIGd1ZXN0IElTQyBhcmUgZnJlZWQgYW5kIHRoZSBuZXcgb25lcyBzYXZlZC4KJiM0MzsgKiAtIEFsbCBvdGhlciByZXNwb25zZXM6IGhhcmR3YXJlIGRpZCBub3QgYWNjZXB0IHRoZSBuZXcgTklCOyB0aGUgbmV3bHkgcGlubmVkCiYjNDM7ICogICBwYWdlIGFuZCByZWdpc3RlcmVkIElTQyBhcmUgZnJlZWQgYW5kIHRoZSBwcmV2aW91c2x5IHNhdmVkIHJlc291cmNlcyBhcmUKJiM0MzsgKiAgIGxlZnQgaW50YWN0LgogICoKLSAqIE90aGVyd2lzZSByZXR1cm4gdGhlIGFwX3F1ZXVlX3N0YXR1cyByZXR1cm5lZCBieSB0aGUgYXBfYXFpYygpLAotICogYWxsIHJldHJ5IGhhbmRsaW5nIHdpbGwgYmUgZG9uZSBieSB0aGUgZ3Vlc3QuCiYjNDM7ICogQVBfUkVTUE9OU0VfSU5WQUxJRF9BRERSRVNTIGlzIHJldHVybmVkIGlmIHZmaW9fcGluX3BhZ2VzKCkgb3IKJiM0MzsgKiBrdm1fczM5MF9naXNjX3JlZ2lzdGVyKCkgZmFpbHMgYmVmb3JlIHRoZSBBUUlDIGluc3RydWN0aW9uIGlzIGlzc3VlZC4KICAqCiAgKiBSZXR1cm46ICZhbXA7c3RydWN0IGFwX3F1ZXVlX3N0YXR1cwogICovCkBAIC00MjgsMTEgJiM0Mzs1MTAsMTAgQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLAogCXN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgc3RhdHVzID0ge307CiAJc3RydWN0IGt2bV9zMzkwX2dpc2EgKmdpc2E7CiAJc3RydWN0IHBhZ2UgKmhfcGFnZTsKLQlpbnQgbmlzYzsKJiM0MzsJaW50IG5pc2MsIHJldDsKIAlzdHJ1Y3Qga3ZtICprdm07CiAJcGh5c19hZGRyX3QgaF9uaWI7CiAJZG1hX2FkZHJfdCBuaWI7Ci0JaW50IHJldDsKIAogCS8qIFZlcmlmeSB0aGF0IHRoZSBub3RpZmljYXRpb24gaW5kaWNhdG9yIGJ5dGUgYWRkcmVzcyBpcyB2YWxpZCAqLwogCWlmICh2ZmlvX2FwX3ZhbGlkYXRlX25pYih2Y3B1LCAmYW1wO25pYikpIHsKQEAgLTQ4OSwyNCAmIzQzOzU3MCwzMyBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsCiAJc3RhdHVzID0gYXBfYXFpYyhxLSZndDthcHFuLCBhcWljX2dpc2EsIGhfbmliKTsKIAlzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7CiAJY2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6Ci0JCS8qIFNlZSBpZiB3ZSBkaWQgY2xlYXIgb2xkZXIgSVJRIGNvbmZpZ3VyYXRpb24gKi8KJiM0MzsJCS8qCiYjNDM7CQkgKiBIYXJkd2FyZSBhY2NlcHRlZCB0aGUgbmV3IE5JQiBhZGRyZXNzIChDQz0wKS4gVGhlIG9sZCBOSUIgYW5kCiYjNDM7CQkgKiBndWVzdCBJU0MgYXJlIG5vIGxvbmdlciB1c2VkIGJ5IGhhcmR3YXJlIGFuZCBjYW4gYmUgZnJlZWQuCiYjNDM7CQkgKiBUaGUgbmV3IHJlc291cmNlcyBhcmUgc2F2ZWQgZm9yIHRyYWNraW5nIGFuZCBmdXR1cmUgdGVhcmRvd24uCiYjNDM7CQkgKgomIzQzOwkJICogSVJRIHN0YXRlIHZlcmlmaWNhdGlvbiAocG9sbGluZyB1bnRpbCBJUj0xKSBpcyB0aGUKJiM0MzsJCSAqIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBndWVzdCBBUCBidXMsIG5vdCB0aGUgaG9zdC4gVGhlCiYjNDM7CQkgKiBjb25kaXRpb24gY29kZSBhbmQgc3RhdHVzIHdvcmQgYXJlIHJlZmxlY3RlZCBiYWNrIHRvIHRoZQomIzQzOwkJICogZ3Vlc3QgdG8gcmVzcG9uZCB0byB0aGUgUFFBUC1BUUlDIGluc3RydWN0aW9uLgomIzQzOwkJICovCiAJCXZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTsKIAkJcS0mZ3Q7c2F2ZWRfaW92YSA9IG5pYjsKIAkJcS0mZ3Q7c2F2ZWRfaXNjID0gaXNjOwogCQlicmVhazsKLQljYXNlIEFQX1JFU1BPTlNFX09USEVSV0lTRV9DSEFOR0VEOgotCQkvKiBXZSBjb3VsZCBub3QgbW9kaWZ5IElSUSBzZXR0aW5nczogY2xlYXIgbmV3IGNvbmZpZ3VyYXRpb24gKi8KJiM0MzsJZGVmYXVsdDoKJiM0MzsJCS8qCiYjNDM7CQkgKiBIYXJkd2FyZSBkaWQgbm90IGFjY2VwdCB0aGUgbmV3IE5JQiAoQ0M9MyBvciBlcnJvcikuIFRoZQomIzQzOwkJICogcHJldmlvdXNseSBzYXZlZCBOSUIgYW5kIGd1ZXN0IElTQyByZW1haW4gYWN0aXZlIGFuZCBtdXN0CiYjNDM7CQkgKiBub3QgYmUgZnJlZWQuIFJlbGVhc2UgdGhlIG5ld2x5IHBpbm5lZCBwYWdlIGFuZCByZWdpc3RlcmVkCiYjNDM7CQkgKiBJU0MgdGhhdCB3ZXJlIHByZXBhcmVkIGZvciB0aGlzIChyZWplY3RlZCkgcmVxdWVzdC4KJiM0MzsJCSAqLwogCQlyZXQgPSBrdm1fczM5MF9naXNjX3VucmVnaXN0ZXIoa3ZtLCBpc2MpOwogCQlpZiAocmV0KQogCQkJVkZJT19BUF9EQkZfV0FSTigmIzM0OyVzOiBrdm1fczM5MF9naXNjX3VucmVnaXN0ZXI6IHJjPSVkIGlzYz0lZCwgYXBxbj0lIzA0eFxuJiMzNDssCiAJCQkJCSBfX2Z1bmNfXywgcmV0LCBpc2MsIHEtJmd0O2FwcW4pOwogCQl2ZmlvX3VucGluX3BhZ2VzKCZhbXA7cS0mZ3Q7bWF0cml4X21kZXYtJmd0O3ZkZXYsIG5pYiwgMSk7CiAJCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByX3dhcm4oJiMzNDslczogYXBxbiAlMDR4OiByZXNwb25zZTogJTAyeFxuJiMzNDssIF9fZnVuY19fLCBxLSZndDthcHFuLAotCQkJc3RhdHVzLnJlc3BvbnNlX2NvZGUpOwotCQl2ZmlvX2FwX2lycV9kaXNhYmxlKHEpOwotCQlicmVhazsKIAl9CiAKIAlpZiAoc3RhdHVzLnJlc3BvbnNlX2NvZGUgIT0gQVBfUkVTUE9OU0VfTk9STUFMKSB7CkBAIC02MzUsNyAmIzQzOzcyNSw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3BxYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCX0KIAogCXN0YXR1cyA9IHZjcHUtJmd0O3J1bi0mZ3Q7cy5yZWdzLmdwcnNbMV07Ci0KIAkvKiBJZiBJUiBiaXQoMTYpIGlzIHNldCB3ZSBlbmFibGUgdGhlIGludGVycnVwdCAqLwogCWlmICgoc3RhdHVzICZndDsmZ3Q7ICg2MyAtIDE2KSkgJmFtcDsgMHgwMSkKIAkJcXN0YXR1cyA9IHZmaW9fYXBfaXJxX2VuYWJsZShxLCBzdGF0dXMgJmFtcDsgMHgwNywgdmNwdSk7CkBAIC02OTIsMTQgJiM0Mzs3ODEsMTQgQEAgc3RhdGljIGJvb2wgX3F1ZXVlX3Bhc3NhYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKQogCWlmICghcSkKIAkJcmV0dXJuIGZhbHNlOwogCi0Jc3dpdGNoIChxLSZndDtyZXNldF9zdGF0dXMucmVzcG9uc2VfY29kZSkgewotCWNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOgotCWNhc2UgQVBfUkVTUE9OU0VfREVDT05GSUdVUkVEOgotCWNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOgotCQlyZXR1cm4gdHJ1ZTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gZmFsc2U7Ci0JfQomIzQzOwkvKgomIzQzOwkgKiBBIHF1ZXVlIGlzIG9ubHkgcGFzc2FibGUgaWYgemVyb2l6YXRpb24gd2FzIGNvbmZpcm1lZCBieQomIzQzOwkgKiBhcHFfcmVzZXRfY2hlY2soKSB2aWEgVEFQUSBzdGF0dXMgYml0IHZlcmlmaWNhdGlvbi4gVGhpcyBpcwomIzQzOwkgKiBpbmRpY2F0ZWQgYnkgcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMICgwKS4KJiM0MzsJICogVGhpcyBpcyB0byBwcm90ZWN0IGFnYWluc3QgbGVha2luZyB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIHF1ZXVlCiYjNDM7CSAqIHRvIHRoZSBndWVzdC4KJiM0MzsJICovCiYjNDM7CXJldHVybiBxLSZndDtyZXNldF9zdGF0dXMucmVzcG9uc2VfY29kZSA9PSBBUF9SRVNQT05TRV9OT1JNQUw7CiB9CiAKIC8qCkBAIC0xNDEwLDcgJiM0MzsxNDk5LDcgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfZG9tYWluKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsCiB7CiAJREVDTEFSRV9CSVRNQVAoYXBxaXMsIEFQX0RPTUFJTlMpOwogCi0JYml0bWFwX3plcm8oYXBxaXMsIEFQX0RFVklDRVMpOwomIzQzOwliaXRtYXBfemVybyhhcHFpcywgQVBfRE9NQUlOUyk7CiAJc2V0X2JpdF9pbnYoYXBxaSwgYXBxaXMpOwogCXZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2RvbWFpbnMobWF0cml4X21kZXYsIGFwcWlzKTsKIH0KQEAgLTE5MTksMTIgJiM0MzsyMDA4LDQ3IEBAIHN0YXRpYyBpbnQgYXBxX3N0YXR1c19jaGVjayhpbnQgYXBxbiwgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyAqc3RhdHVzKQogewogCXN3aXRjaCAoc3RhdHVzLSZndDtyZXNwb25zZV9jb2RlKSB7CiAJY2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6CiYjNDM7CQkvKgomIzQzOwkJICogVGhpcyByZXNwb25zZSBjb2RlIG9ubHkgaW5kaWNhdGVzIHRoYXQgdGhlIFBRQVAoWkFQUSkgaGFzCiYjNDM7CQkgKiBiZWVuIGluaXRpYXRlZC4gVGhlIGZvbGxvd2luZyBiaXQgc2V0dGluZ3MgaW4gdGhlIHN0YXR1cwomIzQzOwkJICogcmV0dXJuZWQgZnJvbSBUQVBRIG11c3QgYmUgdmVyaWZpZWQgdG8gY29uZmlybSB0aGF0IHRoZQomIzQzOwkJICogYXN5bmNocm9ub3VzIHBvcnRpb24gb2YgdGhlIHF1ZXVlIHplcm9pemF0aW9uIGhhcyBjb21wbGV0ZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChzdGF0dXMtJmd0O3F1ZXVlX2VtcHR5ICZhbXA7JmFtcDsgIXN0YXR1cy0mZ3Q7cmVwbGllc193YWl0aW5nICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhc3RhdHVzLSZndDtpcnFfZW5hYmxlZCAmYW1wOyZhbXA7ICFzdGF0dXMtJmd0O2FzeW5jKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJLyogQXN5bmMgemVyb2l6YXRpb24gc3RpbGwgaW4gcHJvZ3Jlc3M7IGtlZXAgd2FpdGluZyAqLwomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKIAljYXNlIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRDoKIAljYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDoKLQkJcmV0dXJuIDA7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIHF1ZXVlIGlzIG5vbi1vcGVyYXRpb25hbDogaW50ZXJydXB0cyBhcmUgbm90IHBvc3NpYmxlIHNvCiYjNDM7CQkgKiBBUUlDIHJlc291cmNlcyBjYW4gYmUgc2FmZWx5IGZyZWVkLiBIb3dldmVyLCB6ZXJvaXphdGlvbgomIzQzOwkJICogY2Fubm90IGJlIGNvbmZpcm1lZCBiZWNhdXNlIGFsbCBzdGF0dXMgYml0cyBhcmUgemVyb2VkIHdoZW4KJiM0MzsJCSAqIHRoZXNlIHJlc3BvbnNlIGNvZGVzIGFyZSByZXR1cm5lZCDigJQgdGhlcmUgaXMgbm8gd2F5IHRvCiYjNDM7CQkgKiBkaXN0aW5ndWlzaCBhIHplcm9pemVkIHF1ZXVlIGZyb20gb25lIHRoYXQgaGFzIG5vdCBiZWVuCiYjNDM7CQkgKiB6ZXJvaXplZC4gUmV0dXJuIC1FTk9ERVYgdG8gc2lnbmFsIHRoYXQgQVFJQyByZXNvdXJjZXMgc2hvdWxkCiYjNDM7CQkgKiBiZSBmcmVlZCBidXQgdGhhdCB6ZXJvaXphdGlvbiBoYXMgbm90IGJlZW4gY29uZmlybWVkLgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKIAljYXNlIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTOgotCWNhc2UgQVBfUkVTUE9OU0VfQlVTWToKJiM0MzsJCS8qCiYjNDM7CQkgKiBBIHJlc2V0IGlzIGluIHByb2dyZXNzLiBJdCBtYXkgYmUgdGhlIHJlc2V0IHdlIGlzc3VlZCBvciBvbmUKJiM0MzsJCSAqIGlzc3VlZCBwcmlvciB0byBvdXJzOyBlaXRoZXIgd2F5LCBvbmNlIGl0IGNvbXBsZXRlcyB0aGUgcXVldWUKJiM0MzsJCSAqIHdpbGwgYmUgemVyb2l6ZWQsIHNvIGtlZXAgd2FpdGluZy4KJiM0MzsJCSAqLwogCQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwljYXNlIEFQX1JFU1BPTlNFX0JVU1k6CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIHF1ZXVlIGlzIGJ1c3kgd2l0aCBzb21ldGhpbmcgdW5yZWxhdGVkIHRvIGEgcmVzZXQgYW5kIG91cgomIzQzOwkJICogWkFQUSB3YXMgcmVqZWN0ZWQgb3V0cmlnaHQuIFJlLWlzc3VlIHRoZSBaQVBRLgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsKIAljYXNlIEFQX1JFU1BPTlNFX0FTU09DX1NFQ1JFVF9OT1RfVU5JUVVFOgogCWNhc2UgQVBfUkVTUE9OU0VfQVNTT0NfRkFJTEVEOgogCQkvKgpAQCAtMTkzNSw2ICYjNDM7MjA1OSw3IEBAIHN0YXRpYyBpbnQgYXBxX3N0YXR1c19jaGVjayhpbnQgYXBxbiwgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyAqc3RhdHVzKQogCQkgKiBhIHZhbHVlIGluZGljYXRpbmcgYSByZXNldCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgYWdhaW4uCiAJCSAqLwogCQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsKIAlkZWZhdWx0OgogCQlXQVJOKHRydWUsCiAJCSAgICAgJiMzNDtmYWlsZWQgdG8gdmVyaWZ5IHJlc2V0IG9mIHF1ZXVlICUwMnguJTA0eDogVEFQUSByYz0ldVxuJiMzNDssCkBAIC0xOTQ0LDYgJiM0MzsyMDY5LDMzIEBAIHN0YXRpYyBpbnQgYXBxX3N0YXR1c19jaGVjayhpbnQgYXBxbiwgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyAqc3RhdHVzKQogCX0KIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJlcG9ydF9hcWljX3Jlc291cmNlX2xlYWsoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpCiYjNDM7ewomIzQzOwlpZiAocS0mZ3Q7c2F2ZWRfaXNjICE9IFZGSU9fQVBfSVNDX0lOVkFMSUQgfHwgcS0mZ3Q7c2F2ZWRfaW92YSkgewomIzQzOwkJaWYgKHEtJmd0O21hdHJpeF9tZGV2KSB7CiYjNDM7CQkJZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS0mZ3Q7bWF0cml4X21kZXYtJmd0O21kZXYpLAomIzQzOwkJCQkJICAgICAmIzM0O1Jlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHg6IGxlYWtpbmcgQVFJQyByZXNvdXJjZXMgKE5JQiBwYWdlICZhbXA7IEdJU0MpIHRvIHByZXZlbnQgaG9zdCBjcmFzaFxuJiMzNDssCiYjNDM7CQkJCQkgICAgIEFQX1FJRF9DQVJEKHEtJmd0O2FwcW4pLAomIzQzOwkJCQkJICAgICBBUF9RSURfUVVFVUUocS0mZ3Q7YXBxbikpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7UmVzZXQgdGltZWQgb3V0IGZvciBBUFFOICUwMnguJTA0eDogbGVha2luZyBBUUlDIHJlc291cmNlcyAoTklCIHBhZ2UgJmFtcDsgR0lTQykgdG8gcHJldmVudCBob3N0IGNyYXNoXG4mIzM0OywKJiM0MzsJCQkJCSAgICBBUF9RSURfQ0FSRChxLSZndDthcHFuKSwKJiM0MzsJCQkJCSAgICBBUF9RSURfUVVFVUUocS0mZ3Q7YXBxbikpOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKHEtJmd0O21hdHJpeF9tZGV2KSB7CiYjNDM7CQkJZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS0mZ3Q7bWF0cml4X21kZXYtJmd0O21kZXYpLAomIzQzOwkJCQkJICAgICAmIzM0O1Jlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHhcbiYjMzQ7LAomIzQzOwkJCQkJICAgICBBUF9RSURfQ0FSRChxLSZndDthcHFuKSwKJiM0MzsJCQkJCSAgICAgQVBfUUlEX1FVRVVFKHEtJmd0O2FwcW4pKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcHJfd2Fybl9yYXRlbGltaXRlZCgmIzM0O1Jlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHhcbiYjMzQ7LAomIzQzOwkJCQkJICAgIEFQX1FJRF9DQVJEKHEtJmd0O2FwcW4pLAomIzQzOwkJCQkJICAgIEFQX1FJRF9RVUVVRShxLSZndDthcHFuKSk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAjZGVmaW5lIFdBSVRfTVNHICYjMzQ7V2FpdGVkICVkbXMgZm9yIHJlc2V0IG9mIHF1ZXVlICUwMnguJTA0eCAoJXUsICV1LCAldSkmIzM0OwogCiBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKQpAQCAtMTk2MSw2ICYjNDM7MjExMyw1NiBAQCBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKQogCQlyZXQgPSBhcHFfc3RhdHVzX2NoZWNrKHEtJmd0O2FwcW4sICZhbXA7c3RhdHVzKTsKIAkJaWYgKHJldCA9PSAtRUlPKQogCQkJcmV0dXJuOwomIzQzOwkJaWYgKHEtJmd0O3Jlc2V0X21heF93YWl0ICZhbXA7JmFtcDsgZWxhcHNlZCAmZ3Q7PSBxLSZndDtyZXNldF9tYXhfd2FpdCkgewomIzQzOwkJCS8qCiYjNDM7CQkJICogWmVyb2l6YXRpb24gY29uZmlybWVkIChyZXQgPT0gMCk6IHRoZSBUQVBRIHN0YXR1cyBiaXRzCiYjNDM7CQkJICogaW5kaWNhdGUgdGhlIGFzeW5jIHBvcnRpb24gb2YgdGhlIFpBUFEgY29tcGxldGVkCiYjNDM7CQkJICogc3VjY2Vzc2Z1bGx5LiBGcmVlIEFRSUMgcmVzb3VyY2VzIGFuZCByZXR1cm4uCiYjNDM7CQkJICoKJiM0MzsJCQkgKiBRdWV1ZSBub24tb3BlcmF0aW9uYWwgKHJldCA9PSAtRU5PREVWKTogdGhlIHF1ZXVlIGlzCiYjNDM7CQkJICogZGVjb25maWd1cmVkIG9yIGNoZWNrc3RvcHBlZDsgaW50ZXJydXB0cyBhcmUgbm90CiYjNDM7CQkJICogcG9zc2libGUgc28gQVFJQyByZXNvdXJjZXMgY2FuIGJlIHNhZmVseSBmcmVlZC4KJiM0MzsJCQkgKiBaZXJvaXphdGlvbiBjYW5ub3QgYmUgY29uZmlybWVkIGluIHRoaXMgc3RhdGUsIGJ1dCB0aGUKJiM0MzsJCQkgKiBxdWV1ZSBjYW5ub3QgZ2VuZXJhdGUgaW50ZXJydXB0cywgc28gdGhlIE5JQiBwYWdlIGlzCiYjNDM7CQkJICogbm8gbG9uZ2VyIGEgRE1BIHRhcmdldCBhbmQgaXQgaXMgc2FmZSB0byBmcmVlIGl0LgomIzQzOwkJCSAqLwomIzQzOwkJCWlmICghcmV0IHx8IHJldCA9PSAtRU5PREVWKQomIzQzOwkJCQlnb3RvIGRvbmU7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBUaW1lZCBvdXQgd2l0aG91dCBiZWluZyBhYmxlIHRvIHZlcmlmeSB6YXBxIGNvbXBsZXRlZC4KJiM0MzsJCQkgKgomIzQzOwkJCSAqIFRoZSBBUUlDIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBxdWV1ZSAtIHRoZSBwaW5uZWQKJiM0MzsJCQkgKiBwYWdlIGNvbnRhaW5pbmcgdGhlIE5JQiBhbmQgdGhlIHJlZ2lzdGVyZWQgZ3Vlc3QgSVNDIC0KJiM0MzsJCQkgKiBjYW5ub3QgYmUgZnJlZWQgaGVyZS4gVGhlIE5JQiBpcyB0aGUgYWN0aXZlIERNQSB0YXJnZXQKJiM0MzsJCQkgKiBmb3IgQVAgaW50ZXJydXB0IGRlbGl2ZXJ5IHVudGlsIHRoZSByZXNldCBjb21wbGV0ZXM7CiYjNDM7CQkJICogZnJlZWluZyB0aGUgcGlubmVkIHBhZ2Ugd2hpbGUgdGhlIGhhcmR3YXJlIG1heSBzdGlsbAomIzQzOwkJCSAqIHdyaXRlIHRvIGl0IHdvdWxkIHJlc3VsdCBpbiBhIHdpbGQgRE1BIHdyaXRlIHRoYXQgY291bGQKJiM0MzsJCQkgKiBjb3JydXB0IGhvc3QgbWVtb3J5LgomIzQzOwkJCSAqCiYjNDM7CQkJICogSWYgdGhlIHJlc2V0IGV2ZW50dWFsbHkgY29tcGxldGVzLCBpbnRlcnJ1cHRzIHdpbGwgYmUKJiM0MzsJCQkgKiB0ZXJtaW5hdGVkIGFuZCB0aGUgcGlubmVkIE5JQiBwYWdlIGFuZCBJU0MgcmVnaXN0cmF0aW9uCiYjNDM7CQkJICogd2lsbCBiZSBsZWFrZWQuIFRoaXMgaXMgcHJlZmVyYWJsZSB0byBlaXRoZXIgYSB3aWxkIERNQQomIzQzOwkJCSAqIHdyaXRlIG9yIHdhaXRpbmcgaW5kZWZpbml0ZWx5OiBmbHVzaF93b3JrKCkgY2FsbGVycyBob2xkCiYjNDM7CQkJICogdGhlIG1hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2sgbXV0ZXggd2hpY2ggc2VyaWFsaXplcyBhY2Nlc3MKJiM0MzsJCQkgKiB0byBhbGwgbWRldiBvYmplY3RzIHN5c3RlbS13aWRlLCBzbyBibG9ja2luZyBoZXJlIHdvdWxkCiYjNDM7CQkJICogaGFuZyBhbGwgZ3Vlc3RzIHRvIHdoaWNoIHRob3NlIG1kZXZzIGFyZSBhdHRhY2hlZC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlyZXBvcnRfYXFpY19yZXNvdXJjZV9sZWFrKHEpOwomIzQzOwkJCS8qCiYjNDM7CQkJICogUmVwb3J0IHRoZSBhY3R1YWwgbm9uLXplcm8gaGFyZHdhcmUgcmVzcG9uc2UgY29kZSwgb3IKJiM0MzsJCQkgKiBzeW50aGVzaXplIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTIGlmIFRBUFEKJiM0MzsJCQkgKiBjb21wbGV0ZWQgbm9ybWFsbHkgYnV0IHRoZSBzdGF0dXMgYml0cyBmYWlsZWQgdG8KJiM0MzsJCQkgKiB0cmFuc2l0aW9uIHRvIHRoZWlyIHBvc3QtcmVzZXQgc3RhdGVzLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmIChzdGF0dXMucmVzcG9uc2VfY29kZSA9PSBBUF9SRVNQT05TRV9OT1JNQUwpCiYjNDM7CQkJCXEtJmd0O3Jlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1M7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQlxLSZndDtyZXNldF9zdGF0dXMucmVzcG9uc2VfY29kZSA9IHN0YXR1cy5yZXNwb25zZV9jb2RlOwomIzQzOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsJCWlmICghcmV0IHx8IHJldCA9PSAtRU5PREVWKQomIzQzOwkJCWdvdG8gZG9uZTsKIAkJaWYgKHJldCA9PSAtRUJVU1kpIHsKIAkJCXByX25vdGljZV9yYXRlbGltaXRlZChXQUlUX01TRywgZWxhcHNlZCwKIAkJCQkJICAgICAgQVBfUUlEX0NBUkQocS0mZ3Q7YXBxbiksCkBAIC0xOTc1LDEzICYjNDM7MjE3NywxMyBAQCBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKQogCQkJICAgIHJldCA9PSAtRUFHQUlOKSB7CiAJCQkJc3RhdHVzID0gYXBfemFwcShxLSZndDthcHFuLCAwKTsKIAkJCQltZW1jcHkoJmFtcDtxLSZndDtyZXNldF9zdGF0dXMsICZhbXA7c3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7Ci0JCQkJY29udGludWU7CiAJCQl9Ci0JCQlpZiAocS0mZ3Q7c2F2ZWRfaXNjICE9IFZGSU9fQVBfSVNDX0lOVkFMSUQpCi0JCQkJdmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpOwotCQkJYnJlYWs7CiAJCX0KIAl9CiYjNDM7CiYjNDM7ZG9uZToKJiM0MzsJaWYgKHEtJmd0O3NhdmVkX2lzYyAhPSBWRklPX0FQX0lTQ19JTlZBTElEKQomIzQzOwkJdmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpOwogfQogCiBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpCkBAIC0yMDYxLDEyICYjNDM7MjI2MywyOCBAQCBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpCiAJcmV0dXJuIHZmaW9fYXBfbWRldl9zZXRfa3ZtKG1hdHJpeF9tZGV2LCB2ZGV2LSZndDtrdm0pOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3JlbGVhc2VfZXZlbnRmZHMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldikKJiM0Mzt7CiYjNDM7CWlmIChtYXRyaXhfbWRldi0mZ3Q7cmVxX3RyaWdnZXIpIHsKJiM0MzsJCWV2ZW50ZmRfY3R4X3B1dChtYXRyaXhfbWRldi0mZ3Q7cmVxX3RyaWdnZXIpOwomIzQzOwkJbWF0cml4X21kZXYtJmd0O3JlcV90cmlnZ2VyID0gTlVMTDsKJiM0MzsJfQomIzQzOwlpZiAobWF0cml4X21kZXYtJmd0O2NmZ19jaGdfdHJpZ2dlcikgewomIzQzOwkJZXZlbnRmZF9jdHhfcHV0KG1hdHJpeF9tZGV2LSZndDtjZmdfY2hnX3RyaWdnZXIpOwomIzQzOwkJbWF0cml4X21kZXYtJmd0O2NmZ19jaGdfdHJpZ2dlciA9IE5VTEw7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2xvc2VfZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldikKIHsKIAlzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID0KIAkJY29udGFpbmVyX29mKHZkZXYsIHN0cnVjdCBhcF9tYXRyaXhfbWRldiwgdmRldik7CiAKIAl2ZmlvX2FwX21kZXZfdW5zZXRfa3ZtKG1hdHJpeF9tZGV2KTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwomIzQzOwl2ZmlvX2FwX21kZXZfcmVsZWFzZV9ldmVudGZkcyhtYXRyaXhfbWRldik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfcmVxdWVzdChzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYsIHVuc2lnbmVkIGludCBjb3VudCkKQEAgLTI0NTcsOCAmIzQzOzI2NzUsMTAgQEAgaW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldikKIAogCXEtJmd0O2FwcW4gPSBhcHFuOwogCXEtJmd0O3NhdmVkX2lzYyA9IFZGSU9fQVBfSVNDX0lOVkFMSUQ7Ci0JbWVtc2V0KCZhbXA7cS0mZ3Q7cmVzZXRfc3RhdHVzLCAwLCBzaXplb2YocS0mZ3Q7cmVzZXRfc3RhdHVzKSk7CiYjNDM7CXEtJmd0O3Jlc2V0X21heF93YWl0ID0gQVBfUkVTRVRfTUFYX1dBSVQ7CiAJSU5JVF9XT1JLKCZhbXA7cS0mZ3Q7cmVzZXRfd29yaywgYXBxX3Jlc2V0X2NoZWNrKTsKJiM0MzsJdmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlKHEpOwomIzQzOwlmbHVzaF93b3JrKCZhbXA7cS0mZ3Q7cmVzZXRfd29yayk7CiAKIAlpZiAobWF0cml4X21kZXYpIHsKIAkJdmZpb19hcF9tZGV2X2xpbmtfcXVldWUobWF0cml4X21kZXYsIHEpOwpAQCAtMjU0MSw4ICYjNDM7Mjc2MSwxOSBAQCB2b2lkIHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpCiAJCXZmaW9fYXBfdW5saW5rX3F1ZXVlX2ZyX21kZXYocSk7CiAKIAlkZXZfc2V0X2RydmRhdGEoJmFtcDthcGRldi0mZ3Q7ZGV2aWNlLCBOVUxMKTsKLQlrZnJlZShxKTsKIAlyZWxlYXNlX3VwZGF0ZV9sb2Nrc19mb3JfbWRldihtYXRyaXhfbWRldik7CiYjNDM7CiYjNDM7CWlmIChxLSZndDtyZXNldF9zdGF0dXMucmVzcG9uc2VfY29kZSAhPSBBUF9SRVNQT05TRV9OT1JNQUwpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBMb29wIHVudGlsIHplcm9pemF0aW9uIG9mIHF1ZXVlIGlzIHZlcmlmaWVkIHNvIHdlIGRvbiYjMzk7dCBsZWFrCiYjNDM7CQkgKiB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIHF1ZXVlIHRvIHRoZSBjYWxsZXIuCiYjNDM7CQkgKi8KJiM0MzsJCXEtJmd0O3Jlc2V0X21heF93YWl0ID0gMDsKJiM0MzsJCXZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZShxKTsKJiM0MzsJCWZsdXNoX3dvcmsoJmFtcDtxLSZndDtyZXNldF93b3JrKTsKJiM0MzsJfQomIzQzOwomIzQzOwlrZnJlZShxKTsKIH0KIAogLyoqCkBAIC0yNjk3LDExICYjNDM7MjkyOCwxMSBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfb25fY2ZnX3JlbW92ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jb25maWdfaW5mbywKIAlkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChhcXJlbSwKIAkJCQkgICAodW5zaWduZWQgbG9uZyAqKXByZXZfY29uZmlnX2luZm8tJmd0O2FxbSwKIAkJCQkgICAodW5zaWduZWQgbG9uZyAqKWN1cl9jb25maWdfaW5mby0mZ3Q7YXFtLAotCQkJCSAgIEFQX0RFVklDRVMpOwomIzQzOwkJCQkgICBBUF9ET01BSU5TKTsKIAlkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChjZHJlbSwKIAkJCQkgICAodW5zaWduZWQgbG9uZyAqKXByZXZfY29uZmlnX2luZm8tJmd0O2FkbSwKIAkJCQkgICAodW5zaWduZWQgbG9uZyAqKWN1cl9jb25maWdfaW5mby0mZ3Q7YWRtLAotCQkJCSAgIEFQX0RFVklDRVMpOwomIzQzOwkJCQkgICBBUF9ET01BSU5TKTsKIAogCWlmIChkb19yZW1vdmUpCiAJCXZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlKGFwcmVtLCBhcXJlbSwgY2RyZW0pOwpAQCAtMjgxMiw3ICYjNDM7MzA0Myw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jZmdfYWRkKHVuc2lnbmVkIGxvbmcgKmFwbV9hZGQsIHVuc2lnbmVkIGxvbmcgKmFxbV9hZGQsCiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FxbV9hZGQsCiAJCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFxbSwgYXFtX2FkZCwgQVBfRE9NQUlOUyk7CiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FkbV9hZGQsCi0JCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFkbSwgYWRtX2FkZCwgQVBfREVWSUNFUyk7CiYjNDM7CQkJICAgbWF0cml4X21kZXYtJmd0O21hdHJpeC5hZG0sIGFkbV9hZGQsIEFQX0RPTUFJTlMpOwogCiAJCW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmggYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oCmluZGV4IDliZmY2NjZiMGIzNWQuLjkxNGVhNWQ0MWQzMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaApAQCAtMTM5LDYgJiM0MzsxMzksOCBAQCBzdHJ1Y3QgYXBfbWF0cml4X21kZXYgewogICoJCSB0aGF0IG5lZWQgdG8gYmUgcmVzZXQKICAqIEByZXNldF9zdGF0dXM6IHRoZSBzdGF0dXMgZnJvbSB0aGUgbGFzdCByZXNldCBvZiB0aGUgcXVldWUKICAqIEByZXNldF93b3JrOiB3b3JrIHRvIHdhaXQgZm9yIHF1ZXVlIHJlc2V0IHRvIGNvbXBsZXRlCiYjNDM7ICogQHJlc2V0X21heF93YWl0OiB0aGUgbWF4IGFtb3VudCBvZiB0aW1lIHRvIHdhaXQgZm9yIGEgcmVzZXQgdG8gY29tcGxldGU7CiYjNDM7ICoJCSAgICBzcGVjaWZ5aW5nIDAgbWVhbnMgd2FpdCBhcyBsb25nIGFzIGl0IHRha2VzLgogICovCiBzdHJ1Y3QgdmZpb19hcF9xdWV1ZSB7CiAJc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldjsKQEAgLTE1MCw2ICYjNDM7MTUyLDcgQEAgc3RydWN0IHZmaW9fYXBfcXVldWUgewogCXN0cnVjdCBsaXN0X2hlYWQgcmVzZXRfcW5vZGU7CiAJc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyByZXNldF9zdGF0dXM7CiAJc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3dvcms7CiYjNDM7CXVuc2lnbmVkIGludCByZXNldF9tYXhfd2FpdDsKIH07CiAKIGludCB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIodm9pZCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDQ2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgQU1ENjQqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgbW9kaWZpY2F0aW9ucyBhbmQgdGhlaXIgaW1wYWN0LCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LiBJIHNlZSB0aGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AgYW5kIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oYC4gU2luY2UgdGhlc2UgYXJlIGluIHRoZSBzMzkwIGRpcmVjdG9yeSwgSSYjMzk7bGwgbmVlZCB0byBpbW1lZGlhdGVseSB0aGluayBhYm91dCB0aGUgY3Jvc3MtYXJjaGl0ZWN0dXJlIGltcGxpY2F0aW9ucyBhbmQgd2hldGhlciB0aGUgY29kZSB1dGlsaXplcyBhbnkgb2YgdGhlIGZlYXR1cmVzIHRoYXQgbWFrZSBzMzkwIGRpc3RpbmN0IGZyb20gYW1kNjQuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHZlcmlmeSBLY29uZmlnIGFuZCBhcmNoaXRlY3R1cmUgZGVwZW5kZW5jaWVzIGZvciB0aGUgc291cmNlIGZpbGUuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgaG93IHRoaXMgcGF0Y2ggaW50ZWdyYXRlcyBhbmQgYW55IHBvdGVudGlhbCBhcmNoaXRlY3R1cmFsIGNvbnN0cmFpbnRzLiBUaGlzIGZpbGUgaXMgcHJvYmFibHkgaW50ZXJhY3Rpbmcgd2l0aCBWRklPIGFuZCBBUCwgdGhlcmVmb3JlIGZ1cnRoZXIgcmVzZWFyY2ggaW50byB0aG9zZSBzcGVjaWZpYyBzdWJzeXN0ZW1zIG1heSBiZSBpbXBvcnRhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJT19BUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNzAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyB5b3VyIHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqTmF2aWdhdGluZyB0aGUgUzM5MCBDcnlwdG8gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgbXkgYmVhcmluZ3MgYW5kIGxvY2F0ZSB0aGUgS2NvbmZpZyBmaWxlIHdpdGhpbiB0aGUgczM5MCBjcnlwdG8gZHJpdmVyIHN0cnVjdHVyZS4gR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBuYXR1cmUsIEkmIzM5O2xsIHN0YXJ0IGJ5IGRyaWxsaW5nIGRvd24gaW50byB0aGUgYGRyaXZlcnMvczM5MGAgZGlyZWN0b3J5LiBNeSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSBjcnlwdG8tcmVsYXRlZCBjb25maWd1cmF0aW9uIHdpbGwgYmUgb3JnYW5pemVkIGJlbmVhdGggdGhhdC4gSSYjMzk7bSByZWFzb25hYmx5IGNvbmZpZGVudCwgYmFzZWQgb24gcHJldmlvdXMgZXhwZXJpZW5jZSwgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYmUgbWFuYWdlZCB2aWEgS2NvbmZpZy4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIGZvciB0aGUga2VybmVsLCBhbmQgdGhlIGNyeXB0byBzdWJzeXN0ZW0gaXMgZmFpcmx5IHdlbGwtZXN0YWJsaXNoZWQuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IHdlIGZpbmQgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG9gLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBiZSBhYmxlIHRvIHRyYWNlIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIGNyeXB0byBmZWF0dXJlcyBhcmUgYmVpbmcgY29uZmlndXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtWRklPX0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vTWFrZWZpbGU9Mzc9dmZpb19hcC1vYmpzIDo9IHZmaW9fYXBfZHJ2Lm8gdmZpb19hcF9vcHMub1xuZHJpdmVycy9zMzkwL2NyeXB0by9NYWtlZmlsZTozODpvYmotJChDT05GSUdfVkZJT19BUCkgJiM0Mzs9IHZmaW9fYXAub1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTYtICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaDo3OiNpZm5kZWYgVkZJT19BUF9ERUJVR19IXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaDo4OiNkZWZpbmUgVkZJT19BUF9ERUJVR19IXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC05LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTE4LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmg6MTk6I2RlZmluZSBWRklPX0FQX0RCRiguLi4pXHRcdFx0XHRcdFxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC0yMC1cdGRlYnVnX3NwcmludGZfZXZlbnQodmZpb19hcF9kYmZfaW5mbywgIyNfX1ZBX0FSR1NfXylcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oOjIxOiNkZWZpbmUgVkZJT19BUF9EQkZfRVJSKC4uLilcdFx0XHRcdFx0XFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTIyLVx0ZGVidWdfc3ByaW50Zl9ldmVudCh2ZmlvX2FwX2RiZl9pbmZvLCBEQkZfRVJSLCAjI19fVkFfQVJHU19fKVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmg6MjM6I2RlZmluZSBWRklPX0FQX0RCRl9XQVJOKC4uLilcdFx0XHRcdFx0XFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTI0LVx0ZGVidWdfc3ByaW50Zl9ldmVudCh2ZmlvX2FwX2RiZl9pbmZvLCBEQkZfV0FSTiwgIyNfX1ZBX0FSR1NfXylcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oOjI1OiNkZWZpbmUgVkZJT19BUF9EQkZfSU5GTyguLi4pXHRcdFx0XHRcdFxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC0yNi1cdGRlYnVnX3NwcmludGZfZXZlbnQodmZpb19hcF9kYmZfaW5mbywgREJGX0lORk8sICMjX19WQV9BUkdTX18pXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaDoyNzojZGVmaW5lIFZGSU9fQVBfREJGX0RCRyguLi4pXHRcdFx0XHRcdFxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC0yOC1cdGRlYnVnX3NwcmludGZfZXZlbnQodmZpb19hcF9kYmZfaW5mbywgREJGX0RFQlVHLCAjI19fVkFfQVJHU19fKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oPTMwPWV4dGVybiBkZWJ1Z19pbmZvX3QgKnZmaW9fYXBfZGJmX2luZm87XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC0zMS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oOjMyOiNlbmRpZiAvKiBWRklPX0FQX0RFQlVHX0ggKi9cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTgtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTk6I2RlZmluZSBWRklPX0FQX1JPT1RfTkFNRSBcJiMzNDt2ZmlvX2FwXCYjMzQ7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MjA6I2RlZmluZSBWRklPX0FQX0RFVl9OQU1FIFwmIzM0O21hdHJpeFwmIzM0O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTIxLVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz04Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGUodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtOTAtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6OTE6XHRyb290X2RldmljZSA9IHJvb3RfZGV2aWNlX3JlZ2lzdGVyKFZGSU9fQVBfUk9PVF9OQU1FKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy05Mi1cdGlmIChJU19FUlIocm9vdF9kZXZpY2UpKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMTUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTE2Olx0ZGV2X3NldF9uYW1lKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDslc1wmIzM0OywgVkZJT19BUF9ERVZfTkFNRSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTE3LVx0bWF0cml4X2Rldi1cdTAwM2VkZXZpY2UucGFyZW50ID0gcm9vdF9kZXZpY2U7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTE2Nz1zdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTgyLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjE4MzpcdHJldCA9IGFwX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZ2ZmlvX2FwX2RydiwgVEhJU19NT0RVTEUsIFZGSU9fQVBfRFJWX05BTUUpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE4NC1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjY6I2RlZmluZSBWRklPX0FQX01ERVZfVFlQRV9IV1ZJUlQgXCYjMzQ7cGFzc3Rocm91Z2hcJiMzNDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNzojZGVmaW5lIFZGSU9fQVBfTURFVl9OQU1FX0hXVklSVCBcJiMzNDtWRklPIEFQIFBhc3N0aHJvdWdoIERldmljZVwmIzM0O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yOTE9c3RhdGljIHZvaWQgdmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yOTQtXHRcdHJldHVybjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyOTU6XHRpZiAocS1cdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRCBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yOTYtXHQgICAgIVdBUk5fT04oIShxLVx1MDAzZW1hdHJpeF9tZGV2IFx1MDAyNlx1MDAyNiBxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZWt2bSkpKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjk3LVx0XHRrdm1fczM5MF9naXNjX3VucmVnaXN0ZXIocS1cdTAwM2VtYXRyaXhfbWRldi1cdTAwM2Vrdm0sIHEtXHUwMDNlc2F2ZWRfaXNjKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyOTg6XHRcdHEtXHUwMDNlc2F2ZWRfaXNjID0gVkZJT19BUF9JU0NfSU5WQUxJRDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yOTktXHR9XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTUwNT1zdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTUxOS1cdGlmICh2ZmlvX2FwX3ZhbGlkYXRlX25pYih2Y3B1LCBcdTAwMjZuaWIpKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NTIwOlx0XHRWRklPX0FQX0RCRl9XQVJOKFwmIzM0OyVzOiBpbnZhbGlkIE5JQiBhZGRyZXNzOiBuaWI9JXBhZCwgYXBxbj0lIzA0eFxcblwmIzM0OyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy01MjEtXHRcdFx0XHQgX19mdW5jX18sIFx1MDAyNm5pYiwgcS1cdTAwM2VhcHFuKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNTMzLVx0ZGVmYXVsdDpcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo1MzQ6XHRcdFZGSU9fQVBfREJGX1dBUk4oXCYjMzQ7JXM6IHZmaW9fcGluX3BhZ2VzIGZhaWxlZDogcmM9JWQsXCYjMzQ7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNTM1LVx0XHRcdFx0IFwmIzM0O25pYj0lcGFkLCBhcHFuPSUjMDR4XFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy01NTctXHRpZiAobmlzYyBcdTAwM2MgMCkge1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjU1ODpcdFx0VkZJT19BUF9EQkZfV0FSTihcJiMzNDslczogZ2lzYyByZWdpc3RyYXRpb24gZmFpbGVkOiBuaXNjPSVkLCBpc2M9JWQsIGFwcW49JSMwNHhcXG5cJiMzNDssXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNTU5LVx0XHRcdFx0IF9fZnVuY19fLCBuaXNjLCBpc2MsIHEtXHUwMDNlYXBxbik7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTU5NS1cdFx0aWYgKHJldClcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo1OTY6XHRcdFx0VkZJT19BUF9EQkZfV0FSTihcJiMzNDslczoga3ZtX3MzOTBfZ2lzY191bnJlZ2lzdGVyOiByYz0lZCBpc2M9JWQsIGFwcW49JSMwNHhcXG5cJiMzNDssXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNTk3LVx0XHRcdFx0XHQgX19mdW5jX18sIHJldCwgaXNjLCBxLVx1MDAzZWFwcW4pO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02MDItXHRpZiAoc3RhdHVzLnJlc3BvbnNlX2NvZGUgIT0gQVBfUkVTUE9OU0VfTk9STUFMKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NjAzOlx0XHRWRklPX0FQX0RCRl9XQVJOKFwmIzM0OyVzOiBQUUFQKEFRSUMpIGZhaWxlZCB3aXRoIHN0YXR1cz0lIzAyeDogXCYjMzQ7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNjA0LVx0XHRcdFx0IFwmIzM0O3pvbmU9JSN4LCBpcj0lI3gsIGdpc2M9JSN4LCBmPSUjeCxcJiMzNDtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9Njc4PXN0YXRpYyBpbnQgaGFuZGxlX3BxYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02OTEtXHRpZiAoISh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWVjYSBcdTAwMjYgRUNBX0FJVikpIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo2OTI6XHRcdFZGSU9fQVBfREJGX1dBUk4oXCYjMzQ7JXM6IEFJViBmYWNpbGl0eSBub3QgaW5zdGFsbGVkOiBhcHFuPTB4JTA0eCwgZWNhPTB4JTA0eFxcblwmIzM0OyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02OTMtXHRcdFx0XHQgX19mdW5jX18sIGFwcW4sIHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZWNhKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzAwLVx0aWYgKCF2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2spIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo3MDE6XHRcdFZGSU9fQVBfREJGX1dBUk4oXCYjMzQ7JXM6IFBRQVAoQVFJQykgaG9vayBub3QgcmVnaXN0ZXJlZCB3aXRoIHRoZSB2ZmlvX2FwIGRyaXZlcjogYXBxbj0weCUwNHhcXG5cJiMzNDssXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzAyLVx0XHRcdFx0IF9fZnVuY19fLCBhcHFuKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzEyLVx0XHR2ZmlvX2FwX2xlX2d1aWRfdG9fYmVfdXVpZChcdTAwMjZtYXRyaXhfbWRldi1cdTAwM2VtZGV2LVx1MDAzZXV1aWQsIHV1aWQpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjcxMzpcdFx0VkZJT19BUF9EQkZfV0FSTihcJiMzNDslczogbWRldiAlMDhseC0lMDRseC0lMDRseC0lMDRseC0lMDRseCUwOGx4IG5vdCBpbiB1c2U6IGFwcW49MHglMDR4XFxuXCYjMzQ7LFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTcxNC1cdFx0XHRcdCBfX2Z1bmNfXywgdXVpZFswXSwgIHV1aWRbMV0sIHV1aWRbMl0sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTcyMC1cdGlmICghcSkge1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjcyMTpcdFx0VkZJT19BUF9EQkZfV0FSTihcJiMzNDslczogUXVldWUgJTAyeC4lMDR4IG5vdCBib3VuZCB0byB0aGUgdmZpb19hcCBkcml2ZXJcXG5cJiMzNDssXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzIyLVx0XHRcdFx0IF9fZnVuY19fLCBBUF9RSURfQ0FSRChhcHFuKSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjA3Mj1zdGF0aWMgdm9pZCByZXBvcnRfYXFpY19yZXNvdXJjZV9sZWFrKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIwNzMte1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIwNzQ6XHRpZiAocS1cdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRCB8fCBxLVx1MDAzZXNhdmVkX2lvdmEpIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMDc1LVx0XHRpZiAocS1cdTAwM2VtYXRyaXhfbWRldikge1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMTAxPXN0YXRpYyB2b2lkIGFwcV9yZXNldF9jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnJlc2V0X3dvcmspXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIxODQtZG9uZTpcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMTg1Olx0aWYgKHEtXHUwMDNlc2F2ZWRfaXNjICE9IFZGSU9fQVBfSVNDX0lOVkFMSUQpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjE4Ni1cdFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMzE5PXN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X2dldF9kZXZpY2VfaW5mbyh1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjMzMy1cdGluZm8ubnVtX3JlZ2lvbnMgPSAwO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIzMzQ6XHRpbmZvLm51bV9pcnFzID0gVkZJT19BUF9OVU1fSVJRUztcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzM1LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMzM5PXN0YXRpYyBzc2l6ZV90IHZmaW9fYXBfZ2V0X2lycV9pbmZvKHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzQ4LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIzNDk6XHRpZiAoaW5mby5hcmdzeiBcdTAwM2MgbWluc3ogfHwgaW5mby5pbmRleCBcdTAwM2U9IFZGSU9fQVBfTlVNX0lSUVMpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM1MC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzNTItXHRzd2l0Y2ggKGluZm8uaW5kZXgpIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMzUzOlx0Y2FzZSBWRklPX0FQX1JFUV9JUlFfSU5ERVg6XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM1NC1cdFx0aW5mby5jb3VudCA9IDE7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzNTYtXHRcdGJyZWFrO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIzNTc6XHRjYXNlIFZGSU9fQVBfQ0ZHX0NIR19JUlFfSU5ERVg6XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM1OC1cdFx0aW5mby5jb3VudCA9IDE7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIzNjg9c3RhdGljIGludCB2ZmlvX2FwX2lycV9zZXRfaW5pdChzdHJ1Y3QgdmZpb19pcnFfc2V0ICppcnFfc2V0LCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM3OC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMzc5Olx0cmV0ID0gdmZpb19zZXRfaXJxc192YWxpZGF0ZV9hbmRfcHJlcGFyZShpcnFfc2V0LCAxLCBWRklPX0FQX05VTV9JUlFTLFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzODAtXHRcdFx0XHRcdFx0IFx1MDAyNmRhdGFfc2l6ZSk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI0NTc9c3RhdGljIGludCB2ZmlvX2FwX3NldF9pcnFzKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0NjktXHRcdHN3aXRjaCAoaXJxX3NldC5pbmRleCkge1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI0NzA6XHRcdGNhc2UgVkZJT19BUF9SRVFfSVJRX0lOREVYOlxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0NzEtXHRcdFx0cmV0dXJuIHZmaW9fYXBfc2V0X3JlcXVlc3RfaXJxKG1hdHJpeF9tZGV2LCBhcmcpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI0NzI6XHRcdGNhc2UgVkZJT19BUF9DRkdfQ0hHX0lSUV9JTkRFWDpcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDczLVx0XHRcdHJldHVybiB2ZmlvX2FwX3NldF9jZmdfY2hhbmdlX2lycShtYXRyaXhfbWRldiwgYXJnKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjYyNz1pbnQgdmZpb19hcF9tZGV2X3JlZ2lzdGVyKHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI2MzQtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjYzNTpcdG1hdHJpeF9kZXYtXHUwMDNlbWRldl90eXBlLnN5c2ZzX25hbWUgPSBWRklPX0FQX01ERVZfVFlQRV9IV1ZJUlQ7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjYzNjpcdG1hdHJpeF9kZXYtXHUwMDNlbWRldl90eXBlLnByZXR0eV9uYW1lID0gVkZJT19BUF9NREVWX05BTUVfSFdWSVJUO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI2MzctXHRtYXRyaXhfZGV2LVx1MDAzZW1kZXZfdHlwZXMgPSBcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZfdHlwZTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjY1Nj1pbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNjc2LVx0cS1cdTAwM2VhcHFuID0gYXBxbjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNjc3Olx0cS1cdTAwM2VzYXZlZF9pc2MgPSBWRklPX0FQX0lTQ19JTlZBTElEO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI2NzgtXHRxLVx1MDAzZXJlc2V0X21heF93YWl0ID0gQVBfUkVTRVRfTUFYX1dBSVQ7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xMS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6MTI6I2lmbmRlZiBfVkZJT19BUF9QUklWQVRFX0hfXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjEzOiNkZWZpbmUgX1ZGSU9fQVBfUFJJVkFURV9IX1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNC1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTI1LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoyNjojZGVmaW5lIFZGSU9fQVBfTU9EVUxFX05BTUUgXCYjMzQ7dmZpb19hcFwmIzM0O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoyNzojZGVmaW5lIFZGSU9fQVBfRFJWX05BTUUgXCYjMzQ7dmZpb19hcFwmIzM0O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0yOC1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTE0NT1zdHJ1Y3QgdmZpb19hcF9xdWV1ZSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNDgtXHRpbnRcdGFwcW47XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE0OTojZGVmaW5lIFZGSU9fQVBfSVNDX0lOVkFMSUQgMHhmZlxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNTAtXHR1bnNpZ25lZCBjaGFyIHNhdmVkX2lzYztcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTE2OD12b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE3MC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6MTcxOiNlbmRpZiAvKiBfVkZJT19BUF9QUklWQVRFX0hfICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2NjQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBwaW5wb2ludCB3aGVyZSB0aGUgZGVwZW5kZW5jeSBvZiBgVkZJT19BUGAgbGllcyBpbiByZWxhdGlvbiB0byB0aGUgUzM5MCBhcmNoaXRlY3R1cmUuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgd291bGQgYmUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgcmVsYXRlZCB0byB0aGUgUzM5MCBhcmNoaXRlY3R1cmUsIGFuZCB0aGUgY3J5cHRvIHNlY3Rpb24gZmVlbHMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgZXhhbWluZSBgZHJpdmVycy9zMzkwL0tjb25maWdgIGFuZCBgZHJpdmVycy9zMzkwL2NyeXB0by9LY29uZmlnYC4gVGhpcyBzaG91bGQgcmV2ZWFsIHdoZXRoZXIgYFZGSU9fQVBgIGlzIGRpcmVjdGx5IGNvbnRpbmdlbnQgb24gdGhlIFMzOTAgcGxhdGZvcm0gb3Igc29tZSByZWxhdGVkIGNyeXB0byBmZWF0dXJlcyBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZGSU9fQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjg5NwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgS2NvbmZpZyBodW50LgoKKipIdW50aW5nIGZvciBWRklPX0FQIGluIHRoZSBLY29uZmlnIEZpbGVzKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBldmVyeSBpbnN0YW5jZSB3aGVyZSBgVkZJT19BUGAgaXMgYWN0dWFsbHkgZGVmaW5lZCB3aXRoaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCB0aG91Z2ggcG90ZW50aWFsbHkgdGVkaW91cywgdGFzay4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBhIGdvb2QgcmVhc29uIGZvciB0aGlzIHNlYXJjaCDigJMgbWF5YmUgSSYjMzk7bSB0cmFja2luZyBhIGRlcGVuZGVuY3ksIGRlYnVnZ2luZyBhIGJ1aWxkIGlzc3VlLCBvciBwZXJoYXBzIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlIGFyb3VuZCBBY2NlbGVyYXRlZCBQcm9jZXNzaW5nIHN1cHBvcnQgaW4gVkZJTy4gV2hhdGV2ZXIgdGhlIHJlYXNvbiwgbXkgaW1tZWRpYXRlIGdvYWwgaXMgY2xlYXI6IGZpbmQgYWxsIHRob3NlIGRlY2xhcmF0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgZm9yIHRoaXMgLSBwcm9iYWJseSBhIGNvbWJpbmF0aW9uIG9mIGBmaW5kYCBhbmQgYGdyZXBgLCBvciBwZXJoYXBzIGEgbW9yZSBzb3BoaXN0aWNhdGVkIHRvb2wgaWYgdGhlIGNvZGViYXNlIGlzIHBhcnRpY3VsYXJseSBjb21wbGV4LiBUaW1lIHRvIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJT19BUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvS2NvbmZpZz04MzU9Y29uZmlnIFZGSU9fQ0NXXG4tLVxuYXJjaC9zMzkwL0tjb25maWctODQ1LVxuYXJjaC9zMzkwL0tjb25maWc6ODQ2OmNvbmZpZyBWRklPX0FQXG5hcmNoL3MzOTAvS2NvbmZpZy04NDctXHRkZWZfdHJpc3RhdGUgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE5MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIHMzOTAgQXJjaGl0ZWN0dXJlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSByZW1lbWJlciBgS2NvbmZpZ2AgZmlsZXMgYXJlIHRoZSBwbGFjZSB0byBiZS4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIHRoaW5raW5nIHRoZSByZWxldmFudCBzZWN0aW9uIGlzIHByb2JhYmx5IGFyb3VuZCBsaW5lIDg0NiBvZiBgYXJjaC9zMzkwL0tjb25maWdgLiBUaGF0JiMzOTtzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBzZXR0aW5ncyByZWxhdGVkIHRvIHdoYXRldmVyIEkmIzM5O20gaW52ZXN0aWdhdGluZyBhcmUgZGVmaW5lZC4gTGV0JiMzOTtzIGdldCB0byBpdC4gVGltZSB0byBzdGFydCB0aGUgZGVlcCBkaXZlIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9zMzkwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg0MDpcdFx0aGVscFxuIDg0MTpcdFx0ICBUaGlzIGRyaXZlciBhbGxvd3MgdXNhZ2Ugb2YgSS9PIHN1YmNoYW5uZWxzIHZpYSBWRklPLUNDVy5cbiA4NDI6XHRcbiA4NDM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gODQ0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2ZmlvX2Njdy5cbiA4NDU6XHRcbiA4NDY6XHRjb25maWcgVkZJT19BUFxuIDg0NzpcdFx0ZGVmX3RyaXN0YXRlIG5cbiA4NDg6XHRcdHByb21wdCBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIEFQIGRldmljZXNcJiMzNDtcbiA4NDk6XHRcdGRlcGVuZHMgb24gS1ZNXG4gODUwOlx0XHRkZXBlbmRzIG9uIFZGSU9cbiA4NTE6XHRcdGRlcGVuZHMgb24gQVBcbiA4NTI6XHRcdHNlbGVjdCBWRklPX01ERVZcbiA4NTM6XHRcdGhlbHBcbiA4NTQ6XHRcdCAgVGhpcyBkcml2ZXIgZ3JhbnRzIGFjY2VzcyB0byBBZGp1bmN0IFByb2Nlc3NvciAoQVApIGRldmljZXNcbiA4NTU6XHRcdCAgdmlhIHRoZSBWRklPIG1lZGlhdGVkIGRldmljZSBpbnRlcmZhY2UuXG4gODU2Olx0XG4gODU3Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiA4NTg6XHRcdCAgd2lsbCBiZSBjYWxsZWQgdmZpb19hcC5cbiA4NTk6XHRcbiA4NjA6XHRlbmRtZW51XG4gODYxOlx0XG4gODYyOlx0Y29uZmlnIENDV1xuIDg2MzpcdFx0ZGVmX2Jvb2wgeVxuIDg2NDpcdFxuIDg2NTpcdGNvbmZpZyBIQVZFX1BORVRJRFxuIDg2NjpcdFx0dHJpc3RhdGVcbiA4Njc6XHRcdGRlZmF1bHQgKFNNQyB8fCBDQ1dHUk9VUClcbiA4Njg6XHRcbiA4Njk6XHRtZW51IFwmIzM0O1ZpcnR1YWxpemF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzY1CgkJCQkJCQlvdXRwdXQ6IDkxCgkJCQkJCQl0aG91Z2h0czogNDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlZGSU9fQVAgUGF0Y2ggQXNzZXNzbWVudCBmb3IgYW1kNjQgQXJjaGl0ZWN0dXJlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSAqbm90KiBmdXp6YWJsZSBmb3IgbXkgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgYW1kNjQuIExldCYjMzk7cyBzZWUuLi4gdGhlIGBWRklPX0FQYCBzeW1ib2wgaXMgZGVmaW5lZCB3aXRoaW4gYGFyY2gvczM5MC9LY29uZmlnYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgczM5MC1zcGVjaWZpYy4gVGhlIHdob2xlIHRoaW5nIGlzIHdpdGhpbiB0aGUgJiMzNDtJL08gc3Vic3lzdGVtJiMzNDsgbWVudSBpbiBgYXJjaC9zMzkwYCwgdGhhdCYjMzk7cyBhIHJlZCBmbGFnLgoKTm93LCBJIG5lZWQgdG8gYXBwbHkgdGhlIHJ1bGVzLiBTcGVjaWZpY2FsbHksIHRoZSAmIzM0O05FR0FUSVZFIENSSVRFUklBJiMzNDsgc2VjdGlvbi4gVGhlIHJ1bGUgSSBuZWVkIHRvIGZvY3VzIG9uIGhlcmUgaXMgJiMzNDtVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6ICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLiYjMzQ7IFBlcmZlY3QuCgpMZXQmIzM5O3Mgc2VlIHdoYXQgZmlsZXMgYXJlIGNoYW5nZWQuIEFoLCBpdCBsb29rcyBsaWtlIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgIGFuZCBgZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaGAuIEJvdGggcmlnaHQgaW4gYGRyaXZlcnMvczM5MC9gLCBleGFjdGx5IHdoZXJlIEkgd291bGQgZXhwZWN0LiBUaGV5JiMzOTtyZSBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19WRklPX0FQYCBpcyBzZXQsIHdoaWNoIHdlIGtub3cgaXMgZGVmaW5lZCBpbiBgYXJjaC9zMzkwL0tjb25maWdgIGFuZCBkZXBlbmRzIG9uIHMzOTAgYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIGFsbCBzY3JlYW1pbmcgczM5MC4gSSYjMzk7bSBvbiBhbWQ2NC4gCgpUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlICppcyogZXhjbHVzaXZlIHRvIHMzOTAgYW5kIGRlZmluaXRlbHkgdW5yZWFjaGFibGUgb24gYW1kNjQuIE5vIGlmcywgYW5kcywgb3IgYnV0cy4KClRpbWUgZm9yIHRoZSBgc2V0LXJlc3VsdHNgIHNhbml0eSBjaGVjay4gTGV0JiMzOTtzIHNlZS4uLgoKLSAgIGBXb3J0aEZ1enppbmdgOiBmYWxzZSAtIFllcCwgY2hlY2suCi0gICBgUmVhc29uaW5nYDogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHMzOTAgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciAoYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AgYW5kIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oYCksIHdoaWNoIGlzIGV4Y2x1c2l2ZSB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUgKENPTkZJR19WRklPX0FQKSBhbmQgbm90IGNvbXBpbGVkIG9yIHJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiYjMzQ7IC0gU3BvdCBvbiwgZXhwbGFpbnMgaXQgcGVyZmVjdGx5LgotICAgYEZvY3VzU3ltYm9sc2A6IFtdIC0gQ29ycmVjdCwgbm90aGluZyB0byBmb2N1cyBvbi4KLSAgIGBFbmFibGVDb25maWdzYDogW10gLSBBbGwgZ29vZC4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50LiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLiAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgczM5MCBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIGluIGRyaXZlcnMvczM5MC9jcnlwdG8vLCB3aGljaCBpcyBleGNsdXNpdmUgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIChDT05GSUdfVkZJT19BUCkgYW5kIGlzIG5laXRoZXIgY29tcGlsZWQgbm9yIHJlYWNoYWJsZSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHMzOTAgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciBpbiBkcml2ZXJzL3MzOTAvY3J5cHRvLywgd2hpY2ggaXMgZXhjbHVzaXZlIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSAoQ09ORklHX1ZGSU9fQVApIGFuZCBpcyBuZWl0aGVyIGNvbXBpbGVkIG5vciByZWFjaGFibGUgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODoyMjowNy4zNjIzMjU3NTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY0NDgwODk4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIFZGSU8gQVAgKEFkanVuY3QgUHJvY2Vzc29yKSBkcml2ZXIgaW4gZHJpdmVycy9zMzkwL2NyeXB0by8sIHdoaWNoIGlzIGV4Y2x1c2l2ZSB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUgKENPTkZJR19WRklPX0FQKSBhbmQgaXMgbmVpdGhlciBjb21waWxlZCBub3IgcmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODoyMjowNy4zNjIzMzE4MTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDE2Mjc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGYzYzg2OWM3ZmNkM2UyOTJmYjJmNmQyMjY0MjRhYTRhMjE3NGRlY2JcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAxODoyMjowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcXG5pbmRleCA5NDBjMGZmNjY4YmVlLi5lMDU0ZmQ0YTk0OTcwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xcbisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xcbkBAIC0zMSw2ICszMSw3IEBAXFxuICNkZWZpbmUgQVBfUVVFVUVfSU5fVVNFIFxcXCJpbiB1c2VcXFwiXFxuIFxcbiAjZGVmaW5lIEFQX1JFU0VUX0lOVEVSVkFMXFx0XFx0MjBcXHQvKiBSZXNldCBzbGVlcCBpbnRlcnZhbCAoMjBtcylcXHRcXHQqL1xcbisjZGVmaW5lIEFQX1JFU0VUX01BWF9XQUlUXFx0XFx0MjAwMFxcdC8qIE1heGltdW0gd2FpdCBmb3IgcmVzZXQgKDIwMDBtcylcXHQqL1xcbiBcXG4gc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWVzKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpO1xcbiBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9yZXNldF9xbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpxbGlzdCk7XFxuQEAgLTIyNiwxNiArMjI3LDI3IEBAIHN0YXRpYyBzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqdmZpb19hcF9tZGV2X2dldF9xdWV1ZShcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIgLSBjbGVhcnMgdGhlIElSIGJpdCBvciBnaXZlcyB1cCBhZnRlciA1IHRyaWVzXFxuLSAqIEBhcHFuOiBUaGUgQVAgUXVldWUgbnVtYmVyXFxuLSAqXFxuLSAqIENoZWNrcyB0aGUgSVJRIGJpdCBmb3IgdGhlIHN0YXR1cyBvZiB0aGlzIEFQUU4gdXNpbmcgYXBfdGFwcS5cXG4tICogUmV0dXJucyBpZiB0aGUgYXBfdGFwcSBmdW5jdGlvbiBzdWNjZWVkZWQgYW5kIHRoZSBiaXQgaXMgY2xlYXIuXFxuLSAqIFJldHVybnMgaWYgYXBfdGFwcSBmdW5jdGlvbiBmYWlsZWQgd2l0aCBpbnZhbGlkLCBkZWNvbmZpZ3VyZWQgb3JcXG4tICogY2hlY2tzdG9wcGVkIEFQLlxcbi0gKiBPdGhlcndpc2UgcmV0cmllcyB1cCB0byA1IHRpbWVzIGFmdGVyIHdhaXRpbmcgMjBtcy5cXG4rICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhciAtIHdhaXQgZm9yIHRoZSBJUiBiaXQgdG8gY2xlYXIgYWZ0ZXIgYSBkaXNhYmxlXFxuKyAqXFxuKyAqIEBhcHFuOiB0aGUgQVBRTiBvZiB0aGUgcXVldWVcXG4rICpcXG4rICogUmVwZWF0ZWRseSBwb2xscyB0aGUgQVAgcXVldWUgc3RhdHVzIHZpYSBQUUFQKFRBUFEpIGV2ZXJ5IDIwbXMgdW50aWwgdGhlIElSXFxuKyAqIGJpdCBpcyBjbGVhciwgdGhlIHF1ZXVlIGJlY29tZXMgbm9uLW9wZXJhdGlvbmFsLCBvciA1IHJldHJpZXMgYXJlIGV4aGF1c3RlZC5cXG4rICpcXG4rICogQmVjYXVzZSBQUUFQKEFRSUMpIGRpc2FibGUgaW5pdGlhdGVzIGFuIGFzeW5jaHJvbm91cyBwcm9jZXNzLCBhXFxuKyAqIGNvbmRpdGlvbi1jb2RlIDAgY29tcGxldGlvbiBkb2VzIG5vdCBndWFyYW50ZWUgdGhlIElSIGJpdCBoYXMgYmVlbiBjbGVhcmVkLlxcbisgKiBUaGUgaG9zdCBtdXN0IGNvbmZpcm0gSVI9MCBiZWZvcmUgdW5waW5uaW5nIHRoZSBOSUIgcGFnZSB0byBhdm9pZCBhIHdpbGRcXG4rICogRE1BIHdyaXRlIHRvIGEgZnJlZWQgcGFnZS5cXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAtIDBcXHRcXHRpZiB0aGUgSVIgYml0IGlzIGNsZWFyIChpLmUuLCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCkuXFxuKyAqXFxuKyAqIC0gLUVOT0RFVlxcdGlmIHRoZSBQUUFQLVRBUFEgcmVzcG9uc2UgY29kZSBpbmRpY2F0ZXMgdGhlIHF1ZXVlIGlzIG5vdCBhdmFpbGFibGUsXFxuKyAqXFx0XFx0aXMgZGVjb25maWd1cmVkLCBvciBpcyBjaGVja3N0b3BwZWQgKGkuZS4sIG5vdCBvcGVyYXRpb25hbCkuXFxuKyAqXFxuKyAqIC0gLUVUSU1FRE9VVFxcdHRoZSBmdW5jdGlvbiB0aW1lZCBvdXQgYmVmb3JlIHRoZSBJUiBiaXQgd2FzIGNsZWFyZWQuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKGludCBhcHFuKVxcbitzdGF0aWMgaW50IHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoaW50IGFwcW4pXFxuIHtcXG4gXFx0c3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXM7XFxuIFxcdGludCByZXRyeSA9IDU7XFxuQEAgLTI0Niw3ICsyNTgsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKGludCBhcHFuKVxcbiBcXHRcXHRjYXNlIEFQX1JFU1BPTlNFX05PUk1BTDpcXG4gXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzpcXG4gXFx0XFx0XFx0aWYgKCFzdGF0dXMuaXJxX2VuYWJsZWQpXFxuLVxcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiBcXHRcXHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XFxuIFxcdFxcdFxcdG1zbGVlcCgyMCk7XFxuQEAgLTI1NywxMiArMjY5LDE1IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoaW50IGFwcW4pXFxuIFxcdFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFxcdFdBUk5fT05DRSgxLCBcXFwiJXM6IHRhcHEgcmMgJTAyeDogJTA0eFxcXFxuXFxcIiwgX19mdW5jX18sXFxuIFxcdFxcdFxcdFxcdCAgc3RhdHVzLnJlc3BvbnNlX2NvZGUsIGFwcW4pO1xcbi1cXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXHRcXHR9XFxuIFxcdH0gd2hpbGUgKC0tcmV0cnkpO1xcbiBcXG4tXFx0V0FSTl9PTkNFKDEsIFxcXCIlczogdGFwcSByYyAlMDJ4OiAlMDR4IGNvdWxkIG5vdCBjbGVhciBJUiBiaXRcXFxcblxcXCIsXFxuLVxcdFxcdCAgX19mdW5jX18sIHN0YXR1cy5yZXNwb25zZV9jb2RlLCBhcHFuKTtcXG4rXFx0V0FSTl9PTkNFKDEsIFxcXCIlczogdGFwcSByYyAlMDJ4OiB0aW1lZCBvdXQgd2FpdGluZyBmb3IgaW50ZXJydXB0cyBkaXNhYmxlZCBmb3IgJTAyeC4lMDR4XFxcXG5cXFwiLFxcbitcXHRcXHQgIF9fZnVuY19fLCBzdGF0dXMucmVzcG9uc2VfY29kZSxcXG4rXFx0XFx0ICBBUF9RSURfQ0FSRChhcHFuKSwgQVBfUUlEX1FVRVVFKGFwcW4pKTtcXG4rXFxuK1xcdHJldHVybiAtRVRJTUVET1VUO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjg5LDIwICszMDQsMjggQEAgc3RhdGljIHZvaWQgdmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxcbiB9XFxuIFxcbiAvKipcXG4tICogdmZpb19hcF9pcnFfZGlzYWJsZSAtIGRpc2FibGVzIGFuZCBjbGVhcnMgYW4gYXBfcXVldWUgaW50ZXJydXB0XFxuLSAqIEBxOiBUaGUgdmZpb19hcF9xdWV1ZVxcbisgKiB2ZmlvX2FwX2lycV9kaXNhYmxlIC0gZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciBhbiBBUCBxdWV1ZVxcbisgKiBAcTogdGhlIHZmaW9fYXBfcXVldWVcXG4gICpcXG4tICogVXNlcyBhcF9hcWljIHRvIGRpc2FibGUgdGhlIGludGVycnVwdGlvbiBhbmQgaW4gY2FzZSBvZiBzdWNjZXNzLCByZXNldFxcbi0gKiBpbiBwcm9ncmVzcyBvciBJUlEgZGlzYWJsZSBjb21tYW5kIGFscmVhZHkgcHJvY2VlZGVkOiBjYWxsc1xcbi0gKiB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKCkgdG8gY2hlY2sgZm9yIHRoZSBJUlEgYml0IHRvIGJlIGNsZWFyXFxuLSAqIGFuZCBjYWxscyB2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMoKSB0byBmcmVlIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZFxcbi0gKiB3aXRoIHRoZSBBUCBpbnRlcnJ1cHQgaGFuZGxpbmcuXFxuKyAqIElzc3VlcyBQUUFQKEFRSUMpIHRvIGRpc2FibGUgaW50ZXJydXB0cyBmb3IgdGhlIEFQIHF1ZXVlLiBPbiBzdWNjZXNzXFxuKyAqIChBUF9SRVNQT05TRV9OT1JNQUwgb3IgQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQpLCBwb2xscyB2aWFcXG4rICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcigpIHVudGlsIHRoZSBJUiBiaXQgaXMgY29uZmlybWVkIGNsZWFyIGJlZm9yZVxcbisgKiBmcmVlaW5nIHRoZSBwaW5uZWQgTklCIHBhZ2UgYW5kIHVucmVnaXN0ZXJpbmcgdGhlIGd1ZXN0IElTQy4gVGhpcyB3YWl0IGlzXFxuKyAqIG5lY2Vzc2FyeSBiZWNhdXNlIEFRSUMgZGlzYWJsZSBpcyBhc3luY2hyb25vdXM6IGZyZWVpbmcgdGhlIE5JQiBiZWZvcmUgSVI9MFxcbisgKiBpcyBjb25maXJtZWQgcmlza3MgYSB3aWxkIERNQSB3cml0ZSB0byBhIGZyZWVkIGhvc3QgcGFnZS5cXG4gICpcXG4tICogSW4gdGhlIGNhc2UgdGhlIEFQIGlzIGJ1c3ksIG9yIGEgcmVzZXQgaXMgaW4gcHJvZ3Jlc3MsXFxuLSAqIHJldHJpZXMgYWZ0ZXIgMjBtcywgdXAgdG8gNSB0aW1lcy5cXG4rICogUmV0cmllcyB1cCB0byA1IHRpbWVzICh3aXRoIDIwbXMgc2xlZXApIGlmIHRoZSBxdWV1ZSBpcyBidXN5IG9yIGEgcmVzZXQgaXNcXG4rICogaW4gcHJvZ3Jlc3MuXFxuICAqXFxuLSAqIFJldHVybnMgaWYgYXBfYXFpYyBmdW5jdGlvbiBmYWlsZWQgd2l0aCBpbnZhbGlkLCBkZWNvbmZpZ3VyZWQgb3JcXG4tICogY2hlY2tzdG9wcGVkIEFQLlxcbisgKiBJZiB0aGUgSVIgYml0IGNhbm5vdCBiZSBjb25maXJtZWQgY2xlYXIgKHRpbWVvdXQpLCB0aGUgTklCIHBhZ2UgYW5kIGd1ZXN0XFxuKyAqIElTQyBhcmUgaW50ZW50aW9uYWxseSBsZWFrZWQuIElmIHRoZSBwYWdlIHdlcmUgdW5waW5uZWQgYW5kIHJldHVybmVkIHRvIHRoZVxcbisgKiBhbGxvY2F0b3IsIGEgc3Vic2VxdWVudCBoYXJkd2FyZSBETUEgd3JpdGUgdG8gdGhhdCBwaHlzaWNhbCBhZGRyZXNzIHdvdWxkXFxuKyAqIGNvcnJ1cHQgbWVtb3J5IGJlbG9uZ2luZyB0byBhIG5ldyBvd25lciDigJQgYSB3aWxkIERNQSB3cml0ZSB0aGF0IGNvdWxkIGNyYXNoXFxuKyAqIG9yIGNvbXByb21pc2UgdGhlIGhvc3Qga2VybmVsLlxcbisgKlxcbisgKiBJZiB0aGUgcXVldWUgaXMgbm9uLW9wZXJhdGlvbmFsIChkZWNvbmZpZ3VyZWQsIGNoZWNrc3RvcHBlZCwgbm90IGF2YWlsYWJsZSksXFxuKyAqIHJlc291cmNlcyBhcmUgZnJlZWQgaW1tZWRpYXRlbHkgc2luY2UgdGhlIGhhcmR3YXJlIGNhbiBubyBsb25nZXIgd3JpdGUgdG9cXG4rICogdGhlIE5JQi5cXG4gICpcXG4gICogUmV0dXJuOiBcXHUwMDI2c3RydWN0IGFwX3F1ZXVlX3N0YXR1c1xcbiAgKi9cXG5AQCAtMzEwLDE1ICszMzMsMzggQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcXG4ge1xcbiBcXHR1bmlvbiBhcF9xaXJxX2N0cmwgYXFpY19naXNhID0geyAudmFsdWUgPSAwIH07XFxuIFxcdHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgc3RhdHVzO1xcbi1cXHRpbnQgcmV0cmllcyA9IDU7XFxuK1xcdGludCByZXRyaWVzID0gNSwgcmV0O1xcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHRzdGF0dXMgPSBhcF9hcWljKHEtXFx1MDAzZWFwcW4sIGFxaWNfZ2lzYSwgMCk7XFxuIFxcdFxcdHN3aXRjaCAoc3RhdHVzLnJlc3BvbnNlX2NvZGUpIHtcXG4gXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDpcXG4gXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6XFxuLVxcdFxcdFxcdHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIocS1cXHUwMDNlYXBxbik7XFxuLVxcdFxcdFxcdGdvdG8gZW5kX2ZyZWU7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEFRSUMgZGlzYWJsZSB3YXMgYWNjZXB0ZWQgKE5PUk1BTCksIG9yIHRoZSBxdWV1ZSB3YXNcXG4rXFx0XFx0XFx0ICogYWxyZWFkeSBkaXNhYmxlZCBvciBhIHByaW9yIGFzeW5jIHJlcXVlc3QgaXMgc3RpbGxcXG4rXFx0XFx0XFx0ICogY29tcGxldGluZyAoT1RIRVJXSVNFX0NIQU5HRUQpLiAgSW4gYm90aCBjYXNlcywgd2UgbXVzdFxcbitcXHRcXHRcXHQgKiB3YWl0IHVudGlsIGludGVycnVwdCBwcm9jZXNzaW5nIGhhcyBiZWVuIGRpc2FibGVkXFxuK1xcdFxcdFxcdCAqIGJlZm9yZSBwcm9jZWVkaW5nLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0cmV0ID0gdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcihxLVxcdTAwM2VhcHFuKTtcXG4rXFx0XFx0XFx0aWYgKHJldCA9PSAwIHx8IHJldCA9PSAtRU5PREVWKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVuZF9mcmVlO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBUaW1lZCBvdXQgd2FpdGluZyB0byBjb25maXJtIGludGVycnVwdHMgYXJlIGRpc2FibGVkLlxcbitcXHRcXHRcXHQgKiBJZiBhcF9hcWljIHJldHVybmVkIE5PUk1BTCwgdGhlIGd1ZXN0IHdvdWxkIGluY29ycmVjdGx5XFxuK1xcdFxcdFxcdCAqIGludGVycHJldCB0aGF0IGFzIGEgc3VjY2Vzc2Z1bCBkaXNhYmxlIGFuZCBtYXkgZnJlZSBvclxcbitcXHRcXHRcXHQgKiByZXVzZSB0aGUgTklCIHdoaWxlIGhhcmR3YXJlIGNhbiBzdGlsbCB3cml0ZSB0byBpdC5cXG4rXFx0XFx0XFx0ICogWmVybyB0aGUgc3RhdHVzIHdvcmQgYW5kIHNldCBPVEhFUldJU0VfQ0hBTkdFRCB0byBtaW1pY1xcbitcXHRcXHRcXHQgKiB3aGF0IHRoZSBoYXJkd2FyZSBkb2VzIGZvciB0aGF0IHJlc3BvbnNlIGNvZGUuIFRoaXNcXG4rXFx0XFx0XFx0ICogc2lnbmFscyB0byB0aGUgZ3Vlc3QgdGhhdCB0aGUgcmVzZXQgb3BlcmF0aW9uIGRpZCBub3RcXG4rXFx0XFx0XFx0ICogY29tcGxldGUuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMKSB7XFxuK1xcdFxcdFxcdFxcdG1lbXNldChcXHUwMDI2c3RhdHVzLCAwLCBzaXplb2Yoc3RhdHVzKSk7XFxuK1xcdFxcdFxcdFxcdHN0YXR1cy5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQ7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0Z290byBlbmRfZmFpbDtcXG4gXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzpcXG4gXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9CVVNZOlxcbiBcXHRcXHRcXHRtc2xlZXAoMjApO1xcbkBAIC0zMjYsMTggKzM3Miw0NyBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxcbiBcXHRcXHRjYXNlIEFQX1JFU1BPTlNFX1FfTk9UX0FWQUlMOlxcbiBcXHRcXHRjYXNlIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRDpcXG4gXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9DSEVDS1NUT1BQRUQ6XFxuK1xcdFxcdFxcdC8qIEFQIG5vdCBvcGVyYXRpb25hbDsgbm8gZnVydGhlciBpbnRlcnJ1cHRzIHBvc3NpYmxlICovXFxuK1xcdFxcdFxcdFdBUk5fT05DRSgxLCBcXFwiJXM6IGFwX2FxaWMgc3RhdHVzICVkXFxcXG5cXFwiLCBfX2Z1bmNfXyxcXG4rXFx0XFx0XFx0XFx0ICBzdGF0dXMucmVzcG9uc2VfY29kZSk7XFxuK1xcdFxcdFxcdGdvdG8gZW5kX2ZyZWU7XFxuIFxcdFxcdGNhc2UgQVBfUkVTUE9OU0VfSU5WQUxJRF9BRERSRVNTOlxcbiBcXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHQvKiBBbGwgY2FzZXMgaW4gZGVmYXVsdCBtZWFucyBBUCBub3Qgb3BlcmF0aW9uYWwgKi9cXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogVGhlIEFRSUMgZGlzYWJsZSB3YXMgcmVqZWN0ZWQ7IElSUSBpcyBzdGlsbCBlbmFibGVkXFxuK1xcdFxcdFxcdCAqIGFuZCB0aGUgaGFyZHdhcmUgc3RpbGwgaG9sZHMgdGhlIE5JQiBhZGRyZXNzLiBEbyBub3RcXG4rXFx0XFx0XFx0ICogZnJlZSByZXNvdXJjZXMuXFxuK1xcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRXQVJOX09OQ0UoMSwgXFxcIiVzOiBhcF9hcWljIHN0YXR1cyAlZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuIFxcdFxcdFxcdFxcdCAgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xcbi1cXHRcXHRcXHRnb3RvIGVuZF9mcmVlO1xcbitcXHRcXHRcXHRnb3RvIGVuZF9mYWlsO1xcbiBcXHRcXHR9XFxuIFxcdH0gd2hpbGUgKHJldHJpZXMtLSk7XFxuIFxcbiBcXHRXQVJOX09OQ0UoMSwgXFxcIiVzOiBhcF9hcWljIHN0YXR1cyAlZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuIFxcdFxcdCAgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xcbitcXG4rZW5kX2ZhaWw6XFxuK1xcdC8qXFxuK1xcdCAqIFdlIGFyZSBoZXJlIGVpdGhlciBiZWNhdXNlIHRoZSBBUUlDIGluc3RydWN0aW9uIGZhaWxlZCB0byBkaXNhYmxlXFxuK1xcdCAqIGludGVycnVwdHMsIG9yIGJlY2F1c2UgSVI9MCBjb3VsZCBub3QgYmUgY29uZmlybWVkLiBJbiBlaXRoZXIgY2FzZVxcbitcXHQgKiB0aGUgTklCIHBhZ2UgYW5kIGd1ZXN0IElTQyBjYW5ub3QgYmUgZnJlZWQ6IGhhcmR3YXJlIG1heSBzdGlsbCB3cml0ZVxcbitcXHQgKiB0byB0aGUgTklCLCBhbmQgdW5waW5uaW5nIHRoZSBwYWdlIHdvdWxkIGFsbG93IGl0IHRvIGJlIHJlYWxsb2NhdGVkXFxuK1xcdCAqIHRvIGEgbmV3IG93bmVyLiBBIHN1YnNlcXVlbnQgaGFyZHdhcmUgRE1BIHdyaXRlIHRvIHRoYXQgcGh5c2ljYWxcXG4rXFx0ICogYWRkcmVzcyB3b3VsZCBjb3JydXB0IHRoZSBuZXcgb3duZXIncyBtZW1vcnkg4oCUIGEgd2lsZCBETUEgd3JpdGUgdGhhdFxcbitcXHQgKiBjb3VsZCBjcmFzaCBvciBjb21wcm9taXNlIHRoZSBob3N0IGtlcm5lbC4gVGhlIHJlc291cmNlcyBhcmVcXG4rXFx0ICogdGhlcmVmb3JlIGludGVudGlvbmFsbHkgbGVha2VkLlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuIHN0YXR1cztcXG4rXFxuIGVuZF9mcmVlOlxcbitcXHQvKlxcbitcXHQgKiBUaGlzIGxhYmVsIGlzIHJlYWNoZWQgYmVjYXVzZSB0aGUgcXVldWUgd2FzIHN1Y2Nlc3NmdWxseSBkaXNhYmxlZCxcXG4rXFx0ICogb3IgYmVjYXVzZSB0aGUgcXVldWUgaXMgbm90IG9wZXJhdGlvbmFsIG9yIG5vdCBhdmFpbGFibGUsIGluIHdoaWNoIGNhc2VcXG4rXFx0ICogaW50ZXJydXB0cyBjYW4gbm90IGJlIHByb2Nlc3NlZCwgc28gZnJlZSB0aGUgQVFJQyByZXNvdXJjZXMgLSB0aGUgcGlubmVkIE5JQlxcbitcXHQgKiBwYWdlIGFuZCB0aGUgcmVnaXN0ZXJlZCBndWVzdCBJU0MgLSB1c2VkIHRvIGVuYWJsZSBpbnRlcnJ1cHRzIHNvIHRoZXkgd2lsbFxcbitcXHQgKiBub3QgYmUgbGVha2VkLlxcbitcXHQgKi9cXG4gXFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xcbiBcXHRyZXR1cm4gc3RhdHVzO1xcbiB9XFxuQEAgLTQwMSwyMiArNDc2LDI5IEBAIHN0YXRpYyBpbnQgZW5zdXJlX25pYl9zaGFyZWQodW5zaWduZWQgbG9uZyBhZGRyKVxcbiB9XFxuIFxcbiAvKipcXG4tICogdmZpb19hcF9pcnFfZW5hYmxlIC0gRW5hYmxlIEludGVycnVwdGlvbiBmb3IgYSBBUFFOXFxuKyAqIHZmaW9fYXBfaXJxX2VuYWJsZSAtIGVuYWJsZSBpbnRlcnJ1cHRzIGZvciBhbiBBUCBxdWV1ZSBvbiBiZWhhbGYgb2YgYSBndWVzdFxcbiAgKlxcbi0gKiBAcTpcXHQgdGhlIHZmaW9fYXBfcXVldWUgaG9sZGluZyBBUUlDIHBhcmFtZXRlcnNcXG4rICogQHE6XFx0IHRoZSB2ZmlvX2FwX3F1ZXVlIGZvciB3aGljaCBpbnRlcnJ1cHRzIGFyZSB0byBiZSBlbmFibGVkXFxuICAqIEBpc2M6IHRoZSBndWVzdCBJU0MgdG8gcmVnaXN0ZXIgd2l0aCB0aGUgR0lCIGludGVyZmFjZVxcbi0gKiBAdmNwdTogdGhlIHZjcHUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZ2lzdGVycyBzcGVjaWZ5aW5nIHRoZSBwYXJhbWV0ZXJzXFxuLSAqXFx0ICBwYXNzZWQgdG8gdGhlIFBRQVAoQVFJQykgaW5zdHJ1Y3Rpb24uXFxuKyAqIEB2Y3B1OiB0aGUgdmNwdSB3aG9zZSByZWdpc3RlcnMgY29udGFpbiB0aGUgUFFBUChBUUlDKSBwYXJhbWV0ZXJzXFxuKyAqXFxuKyAqIFBpbnMgdGhlIGd1ZXN0IE5JQiBwYWdlLCByZWdpc3RlcnMgdGhlIGd1ZXN0IElTQyB3aXRoIHRoZSBHSUIgdG8gb2J0YWluIGFcXG4rICogaG9zdCBJU0MsIGFuZCByZWlzc3VlcyBQUUFQKEFRSUMpIHdpdGggdGhlIHRyYW5zbGF0ZWQgaG9zdC1hYnNvbHV0ZSBOSUJcXG4rICogYWRkcmVzcyBhbmQgaG9zdCBJU0Mgb24gYmVoYWxmIG9mIHRoZSBndWVzdC5cXG4gICpcXG4tICogUGluIHRoZSBOSUIgc2F2ZWQgaW4gKnFcXG4tICogUmVnaXN0ZXIgdGhlIGd1ZXN0IElTQyB0byBHSUIgaW50ZXJmYWNlIGFuZCByZXRyaWV2ZSB0aGVcXG4tICogaG9zdCBJU0MgdG8gaXNzdWUgdGhlIGhvc3Qgc2lkZSBQUUFQL0FRSUNcXG4rICogVGhlIGNvbmRpdGlvbiBjb2RlIGFuZCBBUC1xdWV1ZSBzdGF0dXMgd29yZCByZXR1cm5lZCBieSBQUUFQKEFRSUMpIGFyZVxcbisgKiByZWZsZWN0ZWQgYmFjayB0byB0aGUgZ3Vlc3QgYXMtaXMuIElSUSBzdGF0ZSB2ZXJpZmljYXRpb24gKHBvbGxpbmcgdW50aWxcXG4rICogSVI9MSkgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBndWVzdCBBUCBidXMsIG5vdCB0aGUgaG9zdC5cXG4gICpcXG4tICogc3RhdHVzLnJlc3BvbnNlX2NvZGUgbWF5IGJlIHNldCB0byBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1MgaW4gY2FzZSB0aGVcXG4tICogdmZpb19waW5fcGFnZXMgb3Iga3ZtX3MzOTBfZ2lzY19yZWdpc3RlciBmYWlsZWQuXFxuKyAqIFJlc291cmNlIG1hbmFnZW1lbnQgaXMgYmFzZWQgc29sZWx5IG9uIHdoZXRoZXIgaGFyZHdhcmUgYWNjZXB0ZWQgdGhlIG5ldyBOSUI6XFxuKyAqIC0gQVBfUkVTUE9OU0VfTk9STUFMIChDQz0wKTogaGFyZHdhcmUgYWNjZXB0ZWQgdGhlIG5ldyBOSUI7IHRoZSBvbGQgcGlubmVkXFxuKyAqICAgTklCIHBhZ2UgYW5kIHJlZ2lzdGVyZWQgZ3Vlc3QgSVNDIGFyZSBmcmVlZCBhbmQgdGhlIG5ldyBvbmVzIHNhdmVkLlxcbisgKiAtIEFsbCBvdGhlciByZXNwb25zZXM6IGhhcmR3YXJlIGRpZCBub3QgYWNjZXB0IHRoZSBuZXcgTklCOyB0aGUgbmV3bHkgcGlubmVkXFxuKyAqICAgcGFnZSBhbmQgcmVnaXN0ZXJlZCBJU0MgYXJlIGZyZWVkIGFuZCB0aGUgcHJldmlvdXNseSBzYXZlZCByZXNvdXJjZXMgYXJlXFxuKyAqICAgbGVmdCBpbnRhY3QuXFxuICAqXFxuLSAqIE90aGVyd2lzZSByZXR1cm4gdGhlIGFwX3F1ZXVlX3N0YXR1cyByZXR1cm5lZCBieSB0aGUgYXBfYXFpYygpLFxcbi0gKiBhbGwgcmV0cnkgaGFuZGxpbmcgd2lsbCBiZSBkb25lIGJ5IHRoZSBndWVzdC5cXG4rICogQVBfUkVTUE9OU0VfSU5WQUxJRF9BRERSRVNTIGlzIHJldHVybmVkIGlmIHZmaW9fcGluX3BhZ2VzKCkgb3JcXG4rICoga3ZtX3MzOTBfZ2lzY19yZWdpc3RlcigpIGZhaWxzIGJlZm9yZSB0aGUgQVFJQyBpbnN0cnVjdGlvbiBpcyBpc3N1ZWQuXFxuICAqXFxuICAqIFJldHVybjogXFx1MDAyNnN0cnVjdCBhcF9xdWV1ZV9zdGF0dXNcXG4gICovXFxuQEAgLTQyOCwxMSArNTEwLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHZmaW9fYXBfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSxcXG4gXFx0c3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXMgPSB7fTtcXG4gXFx0c3RydWN0IGt2bV9zMzkwX2dpc2EgKmdpc2E7XFxuIFxcdHN0cnVjdCBwYWdlICpoX3BhZ2U7XFxuLVxcdGludCBuaXNjO1xcbitcXHRpbnQgbmlzYywgcmV0O1xcbiBcXHRzdHJ1Y3Qga3ZtICprdm07XFxuIFxcdHBoeXNfYWRkcl90IGhfbmliO1xcbiBcXHRkbWFfYWRkcl90IG5pYjtcXG4tXFx0aW50IHJldDtcXG4gXFxuIFxcdC8qIFZlcmlmeSB0aGF0IHRoZSBub3RpZmljYXRpb24gaW5kaWNhdG9yIGJ5dGUgYWRkcmVzcyBpcyB2YWxpZCAqL1xcbiBcXHRpZiAodmZpb19hcF92YWxpZGF0ZV9uaWIodmNwdSwgXFx1MDAyNm5pYikpIHtcXG5AQCAtNDg5LDI0ICs1NzAsMzMgQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLFxcbiBcXHRzdGF0dXMgPSBhcF9hcWljKHEtXFx1MDAzZWFwcW4sIGFxaWNfZ2lzYSwgaF9uaWIpO1xcbiBcXHRzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7XFxuIFxcdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxcbi1cXHRcXHQvKiBTZWUgaWYgd2UgZGlkIGNsZWFyIG9sZGVyIElSUSBjb25maWd1cmF0aW9uICovXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEhhcmR3YXJlIGFjY2VwdGVkIHRoZSBuZXcgTklCIGFkZHJlc3MgKENDPTApLiBUaGUgb2xkIE5JQiBhbmRcXG4rXFx0XFx0ICogZ3Vlc3QgSVNDIGFyZSBubyBsb25nZXIgdXNlZCBieSBoYXJkd2FyZSBhbmQgY2FuIGJlIGZyZWVkLlxcbitcXHRcXHQgKiBUaGUgbmV3IHJlc291cmNlcyBhcmUgc2F2ZWQgZm9yIHRyYWNraW5nIGFuZCBmdXR1cmUgdGVhcmRvd24uXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIElSUSBzdGF0ZSB2ZXJpZmljYXRpb24gKHBvbGxpbmcgdW50aWwgSVI9MSkgaXMgdGhlXFxuK1xcdFxcdCAqIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBndWVzdCBBUCBidXMsIG5vdCB0aGUgaG9zdC4gVGhlXFxuK1xcdFxcdCAqIGNvbmRpdGlvbiBjb2RlIGFuZCBzdGF0dXMgd29yZCBhcmUgcmVmbGVjdGVkIGJhY2sgdG8gdGhlXFxuK1xcdFxcdCAqIGd1ZXN0IHRvIHJlc3BvbmQgdG8gdGhlIFBRQVAtQVFJQyBpbnN0cnVjdGlvbi5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcXG4gXFx0XFx0cS1cXHUwMDNlc2F2ZWRfaW92YSA9IG5pYjtcXG4gXFx0XFx0cS1cXHUwMDNlc2F2ZWRfaXNjID0gaXNjO1xcbiBcXHRcXHRicmVhaztcXG4tXFx0Y2FzZSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDpcXG4tXFx0XFx0LyogV2UgY291bGQgbm90IG1vZGlmeSBJUlEgc2V0dGluZ3M6IGNsZWFyIG5ldyBjb25maWd1cmF0aW9uICovXFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEhhcmR3YXJlIGRpZCBub3QgYWNjZXB0IHRoZSBuZXcgTklCIChDQz0zIG9yIGVycm9yKS4gVGhlXFxuK1xcdFxcdCAqIHByZXZpb3VzbHkgc2F2ZWQgTklCIGFuZCBndWVzdCBJU0MgcmVtYWluIGFjdGl2ZSBhbmQgbXVzdFxcbitcXHRcXHQgKiBub3QgYmUgZnJlZWQuIFJlbGVhc2UgdGhlIG5ld2x5IHBpbm5lZCBwYWdlIGFuZCByZWdpc3RlcmVkXFxuK1xcdFxcdCAqIElTQyB0aGF0IHdlcmUgcHJlcGFyZWQgZm9yIHRoaXMgKHJlamVjdGVkKSByZXF1ZXN0LlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0cmV0ID0ga3ZtX3MzOTBfZ2lzY191bnJlZ2lzdGVyKGt2bSwgaXNjKTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0VkZJT19BUF9EQkZfV0FSTihcXFwiJXM6IGt2bV9zMzkwX2dpc2NfdW5yZWdpc3RlcjogcmM9JWQgaXNjPSVkLCBhcHFuPSUjMDR4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgX19mdW5jX18sIHJldCwgaXNjLCBxLVxcdTAwM2VhcHFuKTtcXG4gXFx0XFx0dmZpb191bnBpbl9wYWdlcyhcXHUwMDI2cS1cXHUwMDNlbWF0cml4X21kZXYtXFx1MDAzZXZkZXYsIG5pYiwgMSk7XFxuIFxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRwcl93YXJuKFxcXCIlczogYXBxbiAlMDR4OiByZXNwb25zZTogJTAyeFxcXFxuXFxcIiwgX19mdW5jX18sIHEtXFx1MDAzZWFwcW4sXFxuLVxcdFxcdFxcdHN0YXR1cy5yZXNwb25zZV9jb2RlKTtcXG4tXFx0XFx0dmZpb19hcF9pcnFfZGlzYWJsZShxKTtcXG4tXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChzdGF0dXMucmVzcG9uc2VfY29kZSAhPSBBUF9SRVNQT05TRV9OT1JNQUwpIHtcXG5AQCAtNjM1LDcgKzcyNSw2IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3BxYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHR9XFxuIFxcbiBcXHRzdGF0dXMgPSB2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZXMucmVncy5ncHJzWzFdO1xcbi1cXG4gXFx0LyogSWYgSVIgYml0KDE2KSBpcyBzZXQgd2UgZW5hYmxlIHRoZSBpbnRlcnJ1cHQgKi9cXG4gXFx0aWYgKChzdGF0dXMgXFx1MDAzZVxcdTAwM2UgKDYzIC0gMTYpKSBcXHUwMDI2IDB4MDEpXFxuIFxcdFxcdHFzdGF0dXMgPSB2ZmlvX2FwX2lycV9lbmFibGUocSwgc3RhdHVzIFxcdTAwMjYgMHgwNywgdmNwdSk7XFxuQEAgLTY5MiwxNCArNzgxLDE0IEBAIHN0YXRpYyBib29sIF9xdWV1ZV9wYXNzYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcXG4gXFx0aWYgKCFxKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRzd2l0Y2ggKHEtXFx1MDAzZXJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlKSB7XFxuLVxcdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxcbi1cXHRjYXNlIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRDpcXG4tXFx0Y2FzZSBBUF9SRVNQT05TRV9DSEVDS1NUT1BQRUQ6XFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdH1cXG4rXFx0LypcXG4rXFx0ICogQSBxdWV1ZSBpcyBvbmx5IHBhc3NhYmxlIGlmIHplcm9pemF0aW9uIHdhcyBjb25maXJtZWQgYnlcXG4rXFx0ICogYXBxX3Jlc2V0X2NoZWNrKCkgdmlhIFRBUFEgc3RhdHVzIGJpdCB2ZXJpZmljYXRpb24uIFRoaXMgaXNcXG4rXFx0ICogaW5kaWNhdGVkIGJ5IHJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlID09IEFQX1JFU1BPTlNFX05PUk1BTCAoMCkuXFxuK1xcdCAqIFRoaXMgaXMgdG8gcHJvdGVjdCBhZ2FpbnN0IGxlYWtpbmcgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBxdWV1ZVxcbitcXHQgKiB0byB0aGUgZ3Vlc3QuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gcS1cXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0xNDEwLDcgKzE0OTksNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19kb21haW4oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcXG4ge1xcbiBcXHRERUNMQVJFX0JJVE1BUChhcHFpcywgQVBfRE9NQUlOUyk7XFxuIFxcbi1cXHRiaXRtYXBfemVybyhhcHFpcywgQVBfREVWSUNFUyk7XFxuK1xcdGJpdG1hcF96ZXJvKGFwcWlzLCBBUF9ET01BSU5TKTtcXG4gXFx0c2V0X2JpdF9pbnYoYXBxaSwgYXBxaXMpO1xcbiBcXHR2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19kb21haW5zKG1hdHJpeF9tZGV2LCBhcHFpcyk7XFxuIH1cXG5AQCAtMTkxOSwxMiArMjAwOCw0NyBAQCBzdGF0aWMgaW50IGFwcV9zdGF0dXNfY2hlY2soaW50IGFwcW4sIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgKnN0YXR1cylcXG4ge1xcbiBcXHRzd2l0Y2ggKHN0YXR1cy1cXHUwMDNlcmVzcG9uc2VfY29kZSkge1xcbiBcXHRjYXNlIEFQX1JFU1BPTlNFX05PUk1BTDpcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGhpcyByZXNwb25zZSBjb2RlIG9ubHkgaW5kaWNhdGVzIHRoYXQgdGhlIFBRQVAoWkFQUSkgaGFzXFxuK1xcdFxcdCAqIGJlZW4gaW5pdGlhdGVkLiBUaGUgZm9sbG93aW5nIGJpdCBzZXR0aW5ncyBpbiB0aGUgc3RhdHVzXFxuK1xcdFxcdCAqIHJldHVybmVkIGZyb20gVEFQUSBtdXN0IGJlIHZlcmlmaWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVcXG4rXFx0XFx0ICogYXN5bmNocm9ub3VzIHBvcnRpb24gb2YgdGhlIHF1ZXVlIHplcm9pemF0aW9uIGhhcyBjb21wbGV0ZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoc3RhdHVzLVxcdTAwM2VxdWV1ZV9lbXB0eSBcXHUwMDI2XFx1MDAyNiAhc3RhdHVzLVxcdTAwM2VyZXBsaWVzX3dhaXRpbmcgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFzdGF0dXMtXFx1MDAzZWlycV9lbmFibGVkIFxcdTAwMjZcXHUwMDI2ICFzdGF0dXMtXFx1MDAzZWFzeW5jKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdC8qIEFzeW5jIHplcm9pemF0aW9uIHN0aWxsIGluIHByb2dyZXNzOyBrZWVwIHdhaXRpbmcgKi9cXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuIFxcdGNhc2UgQVBfUkVTUE9OU0VfREVDT05GSUdVUkVEOlxcbiBcXHRjYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDpcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBxdWV1ZSBpcyBub24tb3BlcmF0aW9uYWw6IGludGVycnVwdHMgYXJlIG5vdCBwb3NzaWJsZSBzb1xcbitcXHRcXHQgKiBBUUlDIHJlc291cmNlcyBjYW4gYmUgc2FmZWx5IGZyZWVkLiBIb3dldmVyLCB6ZXJvaXphdGlvblxcbitcXHRcXHQgKiBjYW5ub3QgYmUgY29uZmlybWVkIGJlY2F1c2UgYWxsIHN0YXR1cyBiaXRzIGFyZSB6ZXJvZWQgd2hlblxcbitcXHRcXHQgKiB0aGVzZSByZXNwb25zZSBjb2RlcyBhcmUgcmV0dXJuZWQg4oCUIHRoZXJlIGlzIG5vIHdheSB0b1xcbitcXHRcXHQgKiBkaXN0aW5ndWlzaCBhIHplcm9pemVkIHF1ZXVlIGZyb20gb25lIHRoYXQgaGFzIG5vdCBiZWVuXFxuK1xcdFxcdCAqIHplcm9pemVkLiBSZXR1cm4gLUVOT0RFViB0byBzaWduYWwgdGhhdCBBUUlDIHJlc291cmNlcyBzaG91bGRcXG4rXFx0XFx0ICogYmUgZnJlZWQgYnV0IHRoYXQgemVyb2l6YXRpb24gaGFzIG5vdCBiZWVuIGNvbmZpcm1lZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4gXFx0Y2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzpcXG4tXFx0Y2FzZSBBUF9SRVNQT05TRV9CVVNZOlxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBBIHJlc2V0IGlzIGluIHByb2dyZXNzLiBJdCBtYXkgYmUgdGhlIHJlc2V0IHdlIGlzc3VlZCBvciBvbmVcXG4rXFx0XFx0ICogaXNzdWVkIHByaW9yIHRvIG91cnM7IGVpdGhlciB3YXksIG9uY2UgaXQgY29tcGxldGVzIHRoZSBxdWV1ZVxcbitcXHRcXHQgKiB3aWxsIGJlIHplcm9pemVkLCBzbyBrZWVwIHdhaXRpbmcuXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0Y2FzZSBBUF9SRVNQT05TRV9CVVNZOlxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgcXVldWUgaXMgYnVzeSB3aXRoIHNvbWV0aGluZyB1bnJlbGF0ZWQgdG8gYSByZXNldCBhbmQgb3VyXFxuK1xcdFxcdCAqIFpBUFEgd2FzIHJlamVjdGVkIG91dHJpZ2h0LiBSZS1pc3N1ZSB0aGUgWkFQUS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJldHVybiAtRUFHQUlOO1xcbitcXG4gXFx0Y2FzZSBBUF9SRVNQT05TRV9BU1NPQ19TRUNSRVRfTk9UX1VOSVFVRTpcXG4gXFx0Y2FzZSBBUF9SRVNQT05TRV9BU1NPQ19GQUlMRUQ6XFxuIFxcdFxcdC8qXFxuQEAgLTE5MzUsNiArMjA1OSw3IEBAIHN0YXRpYyBpbnQgYXBxX3N0YXR1c19jaGVjayhpbnQgYXBxbiwgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyAqc3RhdHVzKVxcbiBcXHRcXHQgKiBhIHZhbHVlIGluZGljYXRpbmcgYSByZXNldCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgYWdhaW4uXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4rXFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFdBUk4odHJ1ZSxcXG4gXFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIHZlcmlmeSByZXNldCBvZiBxdWV1ZSAlMDJ4LiUwNHg6IFRBUFEgcmM9JXVcXFxcblxcXCIsXFxuQEAgLTE5NDQsNiArMjA2OSwzMyBAQCBzdGF0aWMgaW50IGFwcV9zdGF0dXNfY2hlY2soaW50IGFwcW4sIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgKnN0YXR1cylcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCByZXBvcnRfYXFpY19yZXNvdXJjZV9sZWFrKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxcbit7XFxuK1xcdGlmIChxLVxcdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRCB8fCBxLVxcdTAwM2VzYXZlZF9pb3ZhKSB7XFxuK1xcdFxcdGlmIChxLVxcdTAwM2VtYXRyaXhfbWRldikge1xcbitcXHRcXHRcXHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVxcdTAwM2VtYXRyaXhfbWRldi1cXHUwMDNlbWRldiksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIlJlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHg6IGxlYWtpbmcgQVFJQyByZXNvdXJjZXMgKE5JQiBwYWdlIFxcdTAwMjYgR0lTQykgdG8gcHJldmVudCBob3N0IGNyYXNoXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9DQVJEKHEtXFx1MDAzZWFwcW4pLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9RVUVVRShxLVxcdTAwM2VhcHFuKSk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcIlJlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHg6IGxlYWtpbmcgQVFJQyByZXNvdXJjZXMgKE5JQiBwYWdlIFxcdTAwMjYgR0lTQykgdG8gcHJldmVudCBob3N0IGNyYXNoXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgQVBfUUlEX0NBUkQocS1cXHUwMDNlYXBxbiksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBBUF9RSURfUVVFVUUocS1cXHUwMDNlYXBxbikpO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmIChxLVxcdTAwM2VtYXRyaXhfbWRldikge1xcbitcXHRcXHRcXHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVxcdTAwM2VtYXRyaXhfbWRldi1cXHUwMDNlbWRldiksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIlJlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgQVBfUUlEX0NBUkQocS1cXHUwMDNlYXBxbiksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgQVBfUUlEX1FVRVVFKHEtXFx1MDAzZWFwcW4pKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwiUmVzZXQgdGltZWQgb3V0IGZvciBBUFFOICUwMnguJTA0eFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIEFQX1FJRF9DQVJEKHEtXFx1MDAzZWFwcW4pLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgQVBfUUlEX1FVRVVFKHEtXFx1MDAzZWFwcW4pKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuICNkZWZpbmUgV0FJVF9NU0cgXFxcIldhaXRlZCAlZG1zIGZvciByZXNldCBvZiBxdWV1ZSAlMDJ4LiUwNHggKCV1LCAldSwgJXUpXFxcIlxcbiBcXG4gc3RhdGljIHZvaWQgYXBxX3Jlc2V0X2NoZWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqcmVzZXRfd29yaylcXG5AQCAtMTk2MSw2ICsyMTEzLDU2IEBAIHN0YXRpYyB2b2lkIGFwcV9yZXNldF9jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnJlc2V0X3dvcmspXFxuIFxcdFxcdHJldCA9IGFwcV9zdGF0dXNfY2hlY2socS1cXHUwMDNlYXBxbiwgXFx1MDAyNnN0YXR1cyk7XFxuIFxcdFxcdGlmIChyZXQgPT0gLUVJTylcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRpZiAocS1cXHUwMDNlcmVzZXRfbWF4X3dhaXQgXFx1MDAyNlxcdTAwMjYgZWxhcHNlZCBcXHUwMDNlPSBxLVxcdTAwM2VyZXNldF9tYXhfd2FpdCkge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBaZXJvaXphdGlvbiBjb25maXJtZWQgKHJldCA9PSAwKTogdGhlIFRBUFEgc3RhdHVzIGJpdHNcXG4rXFx0XFx0XFx0ICogaW5kaWNhdGUgdGhlIGFzeW5jIHBvcnRpb24gb2YgdGhlIFpBUFEgY29tcGxldGVkXFxuK1xcdFxcdFxcdCAqIHN1Y2Nlc3NmdWxseS4gRnJlZSBBUUlDIHJlc291cmNlcyBhbmQgcmV0dXJuLlxcbitcXHRcXHRcXHQgKlxcbitcXHRcXHRcXHQgKiBRdWV1ZSBub24tb3BlcmF0aW9uYWwgKHJldCA9PSAtRU5PREVWKTogdGhlIHF1ZXVlIGlzXFxuK1xcdFxcdFxcdCAqIGRlY29uZmlndXJlZCBvciBjaGVja3N0b3BwZWQ7IGludGVycnVwdHMgYXJlIG5vdFxcbitcXHRcXHRcXHQgKiBwb3NzaWJsZSBzbyBBUUlDIHJlc291cmNlcyBjYW4gYmUgc2FmZWx5IGZyZWVkLlxcbitcXHRcXHRcXHQgKiBaZXJvaXphdGlvbiBjYW5ub3QgYmUgY29uZmlybWVkIGluIHRoaXMgc3RhdGUsIGJ1dCB0aGVcXG4rXFx0XFx0XFx0ICogcXVldWUgY2Fubm90IGdlbmVyYXRlIGludGVycnVwdHMsIHNvIHRoZSBOSUIgcGFnZSBpc1xcbitcXHRcXHRcXHQgKiBubyBsb25nZXIgYSBETUEgdGFyZ2V0IGFuZCBpdCBpcyBzYWZlIHRvIGZyZWUgaXQuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoIXJldCB8fCByZXQgPT0gLUVOT0RFVilcXG4rXFx0XFx0XFx0XFx0Z290byBkb25lO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBUaW1lZCBvdXQgd2l0aG91dCBiZWluZyBhYmxlIHRvIHZlcmlmeSB6YXBxIGNvbXBsZXRlZC5cXG4rXFx0XFx0XFx0ICpcXG4rXFx0XFx0XFx0ICogVGhlIEFRSUMgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHF1ZXVlIC0gdGhlIHBpbm5lZFxcbitcXHRcXHRcXHQgKiBwYWdlIGNvbnRhaW5pbmcgdGhlIE5JQiBhbmQgdGhlIHJlZ2lzdGVyZWQgZ3Vlc3QgSVNDIC1cXG4rXFx0XFx0XFx0ICogY2Fubm90IGJlIGZyZWVkIGhlcmUuIFRoZSBOSUIgaXMgdGhlIGFjdGl2ZSBETUEgdGFyZ2V0XFxuK1xcdFxcdFxcdCAqIGZvciBBUCBpbnRlcnJ1cHQgZGVsaXZlcnkgdW50aWwgdGhlIHJlc2V0IGNvbXBsZXRlcztcXG4rXFx0XFx0XFx0ICogZnJlZWluZyB0aGUgcGlubmVkIHBhZ2Ugd2hpbGUgdGhlIGhhcmR3YXJlIG1heSBzdGlsbFxcbitcXHRcXHRcXHQgKiB3cml0ZSB0byBpdCB3b3VsZCByZXN1bHQgaW4gYSB3aWxkIERNQSB3cml0ZSB0aGF0IGNvdWxkXFxuK1xcdFxcdFxcdCAqIGNvcnJ1cHQgaG9zdCBtZW1vcnkuXFxuK1xcdFxcdFxcdCAqXFxuK1xcdFxcdFxcdCAqIElmIHRoZSByZXNldCBldmVudHVhbGx5IGNvbXBsZXRlcywgaW50ZXJydXB0cyB3aWxsIGJlXFxuK1xcdFxcdFxcdCAqIHRlcm1pbmF0ZWQgYW5kIHRoZSBwaW5uZWQgTklCIHBhZ2UgYW5kIElTQyByZWdpc3RyYXRpb25cXG4rXFx0XFx0XFx0ICogd2lsbCBiZSBsZWFrZWQuIFRoaXMgaXMgcHJlZmVyYWJsZSB0byBlaXRoZXIgYSB3aWxkIERNQVxcbitcXHRcXHRcXHQgKiB3cml0ZSBvciB3YWl0aW5nIGluZGVmaW5pdGVseTogZmx1c2hfd29yaygpIGNhbGxlcnMgaG9sZFxcbitcXHRcXHRcXHQgKiB0aGUgbWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayBtdXRleCB3aGljaCBzZXJpYWxpemVzIGFjY2Vzc1xcbitcXHRcXHRcXHQgKiB0byBhbGwgbWRldiBvYmplY3RzIHN5c3RlbS13aWRlLCBzbyBibG9ja2luZyBoZXJlIHdvdWxkXFxuK1xcdFxcdFxcdCAqIGhhbmcgYWxsIGd1ZXN0cyB0byB3aGljaCB0aG9zZSBtZGV2cyBhcmUgYXR0YWNoZWQuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRyZXBvcnRfYXFpY19yZXNvdXJjZV9sZWFrKHEpO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBSZXBvcnQgdGhlIGFjdHVhbCBub24temVybyBoYXJkd2FyZSByZXNwb25zZSBjb2RlLCBvclxcbitcXHRcXHRcXHQgKiBzeW50aGVzaXplIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTIGlmIFRBUFFcXG4rXFx0XFx0XFx0ICogY29tcGxldGVkIG5vcm1hbGx5IGJ1dCB0aGUgc3RhdHVzIGJpdHMgZmFpbGVkIHRvXFxuK1xcdFxcdFxcdCAqIHRyYW5zaXRpb24gdG8gdGhlaXIgcG9zdC1yZXNldCBzdGF0ZXMuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMKVxcbitcXHRcXHRcXHRcXHRxLVxcdTAwM2VyZXNldF9zdGF0dXMucmVzcG9uc2VfY29kZSA9IEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTO1xcbitcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdHEtXFx1MDAzZXJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlID0gc3RhdHVzLnJlc3BvbnNlX2NvZGU7XFxuK1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKCFyZXQgfHwgcmV0ID09IC1FTk9ERVYpXFxuK1xcdFxcdFxcdGdvdG8gZG9uZTtcXG4gXFx0XFx0aWYgKHJldCA9PSAtRUJVU1kpIHtcXG4gXFx0XFx0XFx0cHJfbm90aWNlX3JhdGVsaW1pdGVkKFdBSVRfTVNHLCBlbGFwc2VkLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBBUF9RSURfQ0FSRChxLVxcdTAwM2VhcHFuKSxcXG5AQCAtMTk3NSwxMyArMjE3NywxMyBAQCBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKVxcbiBcXHRcXHRcXHQgICAgcmV0ID09IC1FQUdBSU4pIHtcXG4gXFx0XFx0XFx0XFx0c3RhdHVzID0gYXBfemFwcShxLVxcdTAwM2VhcHFuLCAwKTtcXG4gXFx0XFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZxLVxcdTAwM2VyZXNldF9zdGF0dXMsIFxcdTAwMjZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTtcXG4tXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aWYgKHEtXFx1MDAzZXNhdmVkX2lzYyAhPSBWRklPX0FQX0lTQ19JTlZBTElEKVxcbi1cXHRcXHRcXHRcXHR2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4rXFxuK2RvbmU6XFxuK1xcdGlmIChxLVxcdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRClcXG4rXFx0XFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXFxuQEAgLTIwNjEsMTIgKzIyNjMsMjggQEAgc3RhdGljIGludCB2ZmlvX2FwX21kZXZfb3Blbl9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2KVxcbiBcXHRyZXR1cm4gdmZpb19hcF9tZGV2X3NldF9rdm0obWF0cml4X21kZXYsIHZkZXYtXFx1MDAzZWt2bSk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9yZWxlYXNlX2V2ZW50ZmRzKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXFxuK3tcXG4rXFx0aWYgKG1hdHJpeF9tZGV2LVxcdTAwM2VyZXFfdHJpZ2dlcikge1xcbitcXHRcXHRldmVudGZkX2N0eF9wdXQobWF0cml4X21kZXYtXFx1MDAzZXJlcV90cmlnZ2VyKTtcXG4rXFx0XFx0bWF0cml4X21kZXYtXFx1MDAzZXJlcV90cmlnZ2VyID0gTlVMTDtcXG4rXFx0fVxcbitcXHRpZiAobWF0cml4X21kZXYtXFx1MDAzZWNmZ19jaGdfdHJpZ2dlcikge1xcbitcXHRcXHRldmVudGZkX2N0eF9wdXQobWF0cml4X21kZXYtXFx1MDAzZWNmZ19jaGdfdHJpZ2dlcik7XFxuK1xcdFxcdG1hdHJpeF9tZGV2LVxcdTAwM2VjZmdfY2hnX3RyaWdnZXIgPSBOVUxMO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPVxcbiBcXHRcXHRjb250YWluZXJfb2YodmRldiwgc3RydWN0IGFwX21hdHJpeF9tZGV2LCB2ZGV2KTtcXG4gXFxuIFxcdHZmaW9fYXBfbWRldl91bnNldF9rdm0obWF0cml4X21kZXYpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuK1xcdHZmaW9fYXBfbWRldl9yZWxlYXNlX2V2ZW50ZmRzKG1hdHJpeF9tZGV2KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3JlcXVlc3Qoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2LCB1bnNpZ25lZCBpbnQgY291bnQpXFxuQEAgLTI0NTcsOCArMjY3NSwxMCBAQCBpbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxcbiBcXG4gXFx0cS1cXHUwMDNlYXBxbiA9IGFwcW47XFxuIFxcdHEtXFx1MDAzZXNhdmVkX2lzYyA9IFZGSU9fQVBfSVNDX0lOVkFMSUQ7XFxuLVxcdG1lbXNldChcXHUwMDI2cS1cXHUwMDNlcmVzZXRfc3RhdHVzLCAwLCBzaXplb2YocS1cXHUwMDNlcmVzZXRfc3RhdHVzKSk7XFxuK1xcdHEtXFx1MDAzZXJlc2V0X21heF93YWl0ID0gQVBfUkVTRVRfTUFYX1dBSVQ7XFxuIFxcdElOSVRfV09SSyhcXHUwMDI2cS1cXHUwMDNlcmVzZXRfd29yaywgYXBxX3Jlc2V0X2NoZWNrKTtcXG4rXFx0dmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlKHEpO1xcbitcXHRmbHVzaF93b3JrKFxcdTAwMjZxLVxcdTAwM2VyZXNldF93b3JrKTtcXG4gXFxuIFxcdGlmIChtYXRyaXhfbWRldikge1xcbiBcXHRcXHR2ZmlvX2FwX21kZXZfbGlua19xdWV1ZShtYXRyaXhfbWRldiwgcSk7XFxuQEAgLTI1NDEsOCArMjc2MSwxOSBAQCB2b2lkIHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXFxuIFxcdFxcdHZmaW9fYXBfdW5saW5rX3F1ZXVlX2ZyX21kZXYocSk7XFxuIFxcbiBcXHRkZXZfc2V0X2RydmRhdGEoXFx1MDAyNmFwZGV2LVxcdTAwM2VkZXZpY2UsIE5VTEwpO1xcbi1cXHRrZnJlZShxKTtcXG4gXFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX21kZXYobWF0cml4X21kZXYpO1xcbitcXG4rXFx0aWYgKHEtXFx1MDAzZXJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlICE9IEFQX1JFU1BPTlNFX05PUk1BTCkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBMb29wIHVudGlsIHplcm9pemF0aW9uIG9mIHF1ZXVlIGlzIHZlcmlmaWVkIHNvIHdlIGRvbid0IGxlYWtcXG4rXFx0XFx0ICogdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBxdWV1ZSB0byB0aGUgY2FsbGVyLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cS1cXHUwMDNlcmVzZXRfbWF4X3dhaXQgPSAwO1xcbitcXHRcXHR2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWUocSk7XFxuK1xcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNnEtXFx1MDAzZXJlc2V0X3dvcmspO1xcbitcXHR9XFxuK1xcbitcXHRrZnJlZShxKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTI2OTcsMTEgKzI5MjgsMTEgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X29uX2NmZ19yZW1vdmUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpjdXJfY29uZmlnX2luZm8sXFxuIFxcdGRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kbm90KGFxcmVtLFxcbiBcXHRcXHRcXHRcXHQgICAodW5zaWduZWQgbG9uZyAqKXByZXZfY29uZmlnX2luZm8tXFx1MDAzZWFxbSxcXG4gXFx0XFx0XFx0XFx0ICAgKHVuc2lnbmVkIGxvbmcgKiljdXJfY29uZmlnX2luZm8tXFx1MDAzZWFxbSxcXG4tXFx0XFx0XFx0XFx0ICAgQVBfREVWSUNFUyk7XFxuK1xcdFxcdFxcdFxcdCAgIEFQX0RPTUFJTlMpO1xcbiBcXHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChjZHJlbSxcXG4gXFx0XFx0XFx0XFx0ICAgKHVuc2lnbmVkIGxvbmcgKilwcmV2X2NvbmZpZ19pbmZvLVxcdTAwM2VhZG0sXFxuIFxcdFxcdFxcdFxcdCAgICh1bnNpZ25lZCBsb25nICopY3VyX2NvbmZpZ19pbmZvLVxcdTAwM2VhZG0sXFxuLVxcdFxcdFxcdFxcdCAgIEFQX0RFVklDRVMpO1xcbitcXHRcXHRcXHRcXHQgICBBUF9ET01BSU5TKTtcXG4gXFxuIFxcdGlmIChkb19yZW1vdmUpXFxuIFxcdFxcdHZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlKGFwcmVtLCBhcXJlbSwgY2RyZW0pO1xcbkBAIC0yODEyLDcgKzMwNDMsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX2FkZCh1bnNpZ25lZCBsb25nICphcG1fYWRkLCB1bnNpZ25lZCBsb25nICphcW1fYWRkLFxcbiBcXHRcXHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVxcdTAwM2VhcW1fYWRkLFxcbiBcXHRcXHRcXHQgICBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFxbSwgYXFtX2FkZCwgQVBfRE9NQUlOUyk7XFxuIFxcdFxcdGJpdG1hcF9hbmQobWF0cml4X21kZXYtXFx1MDAzZWFkbV9hZGQsXFxuLVxcdFxcdFxcdCAgIG1hdHJpeF9tZGV2LVxcdTAwM2VtYXRyaXguYWRtLCBhZG1fYWRkLCBBUF9ERVZJQ0VTKTtcXG4rXFx0XFx0XFx0ICAgbWF0cml4X21kZXYtXFx1MDAzZW1hdHJpeC5hZG0sIGFkbV9hZGQsIEFQX0RPTUFJTlMpO1xcbiBcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaFxcbmluZGV4IDliZmY2NjZiMGIzNWQuLjkxNGVhNWQ0MWQzMzAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaFxcbisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmhcXG5AQCAtMTM5LDYgKzEzOSw4IEBAIHN0cnVjdCBhcF9tYXRyaXhfbWRldiB7XFxuICAqXFx0XFx0IHRoYXQgbmVlZCB0byBiZSByZXNldFxcbiAgKiBAcmVzZXRfc3RhdHVzOiB0aGUgc3RhdHVzIGZyb20gdGhlIGxhc3QgcmVzZXQgb2YgdGhlIHF1ZXVlXFxuICAqIEByZXNldF93b3JrOiB3b3JrIHRvIHdhaXQgZm9yIHF1ZXVlIHJlc2V0IHRvIGNvbXBsZXRlXFxuKyAqIEByZXNldF9tYXhfd2FpdDogdGhlIG1heCBhbW91bnQgb2YgdGltZSB0byB3YWl0IGZvciBhIHJlc2V0IHRvIGNvbXBsZXRlO1xcbisgKlxcdFxcdCAgICBzcGVjaWZ5aW5nIDAgbWVhbnMgd2FpdCBhcyBsb25nIGFzIGl0IHRha2VzLlxcbiAgKi9cXG4gc3RydWN0IHZmaW9fYXBfcXVldWUge1xcbiBcXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xcbkBAIC0xNTAsNiArMTUyLDcgQEAgc3RydWN0IHZmaW9fYXBfcXVldWUge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIHJlc2V0X3Fub2RlO1xcbiBcXHRzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHJlc2V0X3N0YXR1cztcXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3dvcms7XFxuK1xcdHVuc2lnbmVkIGludCByZXNldF9tYXhfd2FpdDtcXG4gfTtcXG4gXFxuIGludCB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIodm9pZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjIyOjA3Ljg1NzMxNjg2NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTcxNDk4MDQ0MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIFZGSU8gQVAgKEFkanVuY3QgUHJvY2Vzc29yKSBkcml2ZXIgaW4gZHJpdmVycy9zMzkwL2NyeXB0by8sIHdoaWNoIGlzIGV4Y2x1c2l2ZSB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUgKENPTkZJR19WRklPX0FQKSBhbmQgaXMgbmVpdGhlciBjb21waWxlZCBub3IgcmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYzYzg2OWM3ZmNkM2UyOTJmYjJmNmQyMjY0MjRhYTRhMjE3NGRlY2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDE4OjIyOjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXG5pbmRleCA5NDBjMGZmNjY4YmVlLi5lMDU0ZmQ0YTk0OTcwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXG4rKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNcbkBAIC0zMSw2ICszMSw3IEBAXG4gI2RlZmluZSBBUF9RVUVVRV9JTl9VU0UgXCJpbiB1c2VcIlxuIFxuICNkZWZpbmUgQVBfUkVTRVRfSU5URVJWQUxcdFx0MjBcdC8qIFJlc2V0IHNsZWVwIGludGVydmFsICgyMG1zKVx0XHQqL1xuKyNkZWZpbmUgQVBfUkVTRVRfTUFYX1dBSVRcdFx0MjAwMFx0LyogTWF4aW11bSB3YWl0IGZvciByZXNldCAoMjAwMG1zKVx0Ki9cbiBcbiBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZXMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldik7XG4gc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcmVzZXRfcWxpc3Qoc3RydWN0IGxpc3RfaGVhZCAqcWxpc3QpO1xuQEAgLTIyNiwxNiArMjI3LDI3IEBAIHN0YXRpYyBzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqdmZpb19hcF9tZGV2X2dldF9xdWV1ZShcbiB9XG4gXG4gLyoqXG4tICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhciAtIGNsZWFycyB0aGUgSVIgYml0IG9yIGdpdmVzIHVwIGFmdGVyIDUgdHJpZXNcbi0gKiBAYXBxbjogVGhlIEFQIFF1ZXVlIG51bWJlclxuLSAqXG4tICogQ2hlY2tzIHRoZSBJUlEgYml0IGZvciB0aGUgc3RhdHVzIG9mIHRoaXMgQVBRTiB1c2luZyBhcF90YXBxLlxuLSAqIFJldHVybnMgaWYgdGhlIGFwX3RhcHEgZnVuY3Rpb24gc3VjY2VlZGVkIGFuZCB0aGUgYml0IGlzIGNsZWFyLlxuLSAqIFJldHVybnMgaWYgYXBfdGFwcSBmdW5jdGlvbiBmYWlsZWQgd2l0aCBpbnZhbGlkLCBkZWNvbmZpZ3VyZWQgb3Jcbi0gKiBjaGVja3N0b3BwZWQgQVAuXG4tICogT3RoZXJ3aXNlIHJldHJpZXMgdXAgdG8gNSB0aW1lcyBhZnRlciB3YWl0aW5nIDIwbXMuXG4rICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhciAtIHdhaXQgZm9yIHRoZSBJUiBiaXQgdG8gY2xlYXIgYWZ0ZXIgYSBkaXNhYmxlXG4rICpcbisgKiBAYXBxbjogdGhlIEFQUU4gb2YgdGhlIHF1ZXVlXG4rICpcbisgKiBSZXBlYXRlZGx5IHBvbGxzIHRoZSBBUCBxdWV1ZSBzdGF0dXMgdmlhIFBRQVAoVEFQUSkgZXZlcnkgMjBtcyB1bnRpbCB0aGUgSVJcbisgKiBiaXQgaXMgY2xlYXIsIHRoZSBxdWV1ZSBiZWNvbWVzIG5vbi1vcGVyYXRpb25hbCwgb3IgNSByZXRyaWVzIGFyZSBleGhhdXN0ZWQuXG4rICpcbisgKiBCZWNhdXNlIFBRQVAoQVFJQykgZGlzYWJsZSBpbml0aWF0ZXMgYW4gYXN5bmNocm9ub3VzIHByb2Nlc3MsIGFcbisgKiBjb25kaXRpb24tY29kZSAwIGNvbXBsZXRpb24gZG9lcyBub3QgZ3VhcmFudGVlIHRoZSBJUiBiaXQgaGFzIGJlZW4gY2xlYXJlZC5cbisgKiBUaGUgaG9zdCBtdXN0IGNvbmZpcm0gSVI9MCBiZWZvcmUgdW5waW5uaW5nIHRoZSBOSUIgcGFnZSB0byBhdm9pZCBhIHdpbGRcbisgKiBETUEgd3JpdGUgdG8gYSBmcmVlZCBwYWdlLlxuKyAqXG4rICogUmV0dXJuOlxuKyAqIC0gMFx0XHRpZiB0aGUgSVIgYml0IGlzIGNsZWFyIChpLmUuLCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCkuXG4rICpcbisgKiAtIC1FTk9ERVZcdGlmIHRoZSBQUUFQLVRBUFEgcmVzcG9uc2UgY29kZSBpbmRpY2F0ZXMgdGhlIHF1ZXVlIGlzIG5vdCBhdmFpbGFibGUsXG4rICpcdFx0aXMgZGVjb25maWd1cmVkLCBvciBpcyBjaGVja3N0b3BwZWQgKGkuZS4sIG5vdCBvcGVyYXRpb25hbCkuXG4rICpcbisgKiAtIC1FVElNRURPVVRcdHRoZSBmdW5jdGlvbiB0aW1lZCBvdXQgYmVmb3JlIHRoZSBJUiBiaXQgd2FzIGNsZWFyZWQuXG4gICovXG4tc3RhdGljIHZvaWQgdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcihpbnQgYXBxbilcbitzdGF0aWMgaW50IHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoaW50IGFwcW4pXG4ge1xuIFx0c3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXM7XG4gXHRpbnQgcmV0cnkgPSA1O1xuQEAgLTI0Niw3ICsyNTgsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKGludCBhcHFuKVxuIFx0XHRjYXNlIEFQX1JFU1BPTlNFX05PUk1BTDpcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzpcbiBcdFx0XHRpZiAoIXN0YXR1cy5pcnFfZW5hYmxlZClcbi1cdFx0XHRcdHJldHVybjtcbitcdFx0XHRcdHJldHVybiAwO1xuIFx0XHRcdGZhbGx0aHJvdWdoO1xuIFx0XHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XG4gXHRcdFx0bXNsZWVwKDIwKTtcbkBAIC0yNTcsMTIgKzI2OSwxNSBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKGludCBhcHFuKVxuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdFdBUk5fT05DRSgxLCBcIiVzOiB0YXBxIHJjICUwMng6ICUwNHhcXG5cIiwgX19mdW5jX18sXG4gXHRcdFx0XHQgIHN0YXR1cy5yZXNwb25zZV9jb2RlLCBhcHFuKTtcbi1cdFx0XHRyZXR1cm47XG4rXHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHRcdH1cbiBcdH0gd2hpbGUgKC0tcmV0cnkpO1xuIFxuLVx0V0FSTl9PTkNFKDEsIFwiJXM6IHRhcHEgcmMgJTAyeDogJTA0eCBjb3VsZCBub3QgY2xlYXIgSVIgYml0XFxuXCIsXG4tXHRcdCAgX19mdW5jX18sIHN0YXR1cy5yZXNwb25zZV9jb2RlLCBhcHFuKTtcbitcdFdBUk5fT05DRSgxLCBcIiVzOiB0YXBxIHJjICUwMng6IHRpbWVkIG91dCB3YWl0aW5nIGZvciBpbnRlcnJ1cHRzIGRpc2FibGVkIGZvciAlMDJ4LiUwNHhcXG5cIixcbitcdFx0ICBfX2Z1bmNfXywgc3RhdHVzLnJlc3BvbnNlX2NvZGUsXG4rXHRcdCAgQVBfUUlEX0NBUkQoYXBxbiksIEFQX1FJRF9RVUVVRShhcHFuKSk7XG4rXG4rXHRyZXR1cm4gLUVUSU1FRE9VVDtcbiB9XG4gXG4gLyoqXG5AQCAtMjg5LDIwICszMDQsMjggQEAgc3RhdGljIHZvaWQgdmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxuIH1cbiBcbiAvKipcbi0gKiB2ZmlvX2FwX2lycV9kaXNhYmxlIC0gZGlzYWJsZXMgYW5kIGNsZWFycyBhbiBhcF9xdWV1ZSBpbnRlcnJ1cHRcbi0gKiBAcTogVGhlIHZmaW9fYXBfcXVldWVcbisgKiB2ZmlvX2FwX2lycV9kaXNhYmxlIC0gZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciBhbiBBUCBxdWV1ZVxuKyAqIEBxOiB0aGUgdmZpb19hcF9xdWV1ZVxuICAqXG4tICogVXNlcyBhcF9hcWljIHRvIGRpc2FibGUgdGhlIGludGVycnVwdGlvbiBhbmQgaW4gY2FzZSBvZiBzdWNjZXNzLCByZXNldFxuLSAqIGluIHByb2dyZXNzIG9yIElSUSBkaXNhYmxlIGNvbW1hbmQgYWxyZWFkeSBwcm9jZWVkZWQ6IGNhbGxzXG4tICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcigpIHRvIGNoZWNrIGZvciB0aGUgSVJRIGJpdCB0byBiZSBjbGVhclxuLSAqIGFuZCBjYWxscyB2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMoKSB0byBmcmVlIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZFxuLSAqIHdpdGggdGhlIEFQIGludGVycnVwdCBoYW5kbGluZy5cbisgKiBJc3N1ZXMgUFFBUChBUUlDKSB0byBkaXNhYmxlIGludGVycnVwdHMgZm9yIHRoZSBBUCBxdWV1ZS4gT24gc3VjY2Vzc1xuKyAqIChBUF9SRVNQT05TRV9OT1JNQUwgb3IgQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQpLCBwb2xscyB2aWFcbisgKiB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKCkgdW50aWwgdGhlIElSIGJpdCBpcyBjb25maXJtZWQgY2xlYXIgYmVmb3JlXG4rICogZnJlZWluZyB0aGUgcGlubmVkIE5JQiBwYWdlIGFuZCB1bnJlZ2lzdGVyaW5nIHRoZSBndWVzdCBJU0MuIFRoaXMgd2FpdCBpc1xuKyAqIG5lY2Vzc2FyeSBiZWNhdXNlIEFRSUMgZGlzYWJsZSBpcyBhc3luY2hyb25vdXM6IGZyZWVpbmcgdGhlIE5JQiBiZWZvcmUgSVI9MFxuKyAqIGlzIGNvbmZpcm1lZCByaXNrcyBhIHdpbGQgRE1BIHdyaXRlIHRvIGEgZnJlZWQgaG9zdCBwYWdlLlxuICAqXG4tICogSW4gdGhlIGNhc2UgdGhlIEFQIGlzIGJ1c3ksIG9yIGEgcmVzZXQgaXMgaW4gcHJvZ3Jlc3MsXG4tICogcmV0cmllcyBhZnRlciAyMG1zLCB1cCB0byA1IHRpbWVzLlxuKyAqIFJldHJpZXMgdXAgdG8gNSB0aW1lcyAod2l0aCAyMG1zIHNsZWVwKSBpZiB0aGUgcXVldWUgaXMgYnVzeSBvciBhIHJlc2V0IGlzXG4rICogaW4gcHJvZ3Jlc3MuXG4gICpcbi0gKiBSZXR1cm5zIGlmIGFwX2FxaWMgZnVuY3Rpb24gZmFpbGVkIHdpdGggaW52YWxpZCwgZGVjb25maWd1cmVkIG9yXG4tICogY2hlY2tzdG9wcGVkIEFQLlxuKyAqIElmIHRoZSBJUiBiaXQgY2Fubm90IGJlIGNvbmZpcm1lZCBjbGVhciAodGltZW91dCksIHRoZSBOSUIgcGFnZSBhbmQgZ3Vlc3RcbisgKiBJU0MgYXJlIGludGVudGlvbmFsbHkgbGVha2VkLiBJZiB0aGUgcGFnZSB3ZXJlIHVucGlubmVkIGFuZCByZXR1cm5lZCB0byB0aGVcbisgKiBhbGxvY2F0b3IsIGEgc3Vic2VxdWVudCBoYXJkd2FyZSBETUEgd3JpdGUgdG8gdGhhdCBwaHlzaWNhbCBhZGRyZXNzIHdvdWxkXG4rICogY29ycnVwdCBtZW1vcnkgYmVsb25naW5nIHRvIGEgbmV3IG93bmVyIOKAlCBhIHdpbGQgRE1BIHdyaXRlIHRoYXQgY291bGQgY3Jhc2hcbisgKiBvciBjb21wcm9taXNlIHRoZSBob3N0IGtlcm5lbC5cbisgKlxuKyAqIElmIHRoZSBxdWV1ZSBpcyBub24tb3BlcmF0aW9uYWwgKGRlY29uZmlndXJlZCwgY2hlY2tzdG9wcGVkLCBub3QgYXZhaWxhYmxlKSxcbisgKiByZXNvdXJjZXMgYXJlIGZyZWVkIGltbWVkaWF0ZWx5IHNpbmNlIHRoZSBoYXJkd2FyZSBjYW4gbm8gbG9uZ2VyIHdyaXRlIHRvXG4rICogdGhlIE5JQi5cbiAgKlxuICAqIFJldHVybjogXHUwMDI2c3RydWN0IGFwX3F1ZXVlX3N0YXR1c1xuICAqL1xuQEAgLTMxMCwxNSArMzMzLDM4IEBAIHN0YXRpYyBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHZmaW9fYXBfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4ge1xuIFx0dW5pb24gYXBfcWlycV9jdHJsIGFxaWNfZ2lzYSA9IHsgLnZhbHVlID0gMCB9O1xuIFx0c3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXM7XG4tXHRpbnQgcmV0cmllcyA9IDU7XG4rXHRpbnQgcmV0cmllcyA9IDUsIHJldDtcbiBcbiBcdGRvIHtcbiBcdFx0c3RhdHVzID0gYXBfYXFpYyhxLVx1MDAzZWFwcW4sIGFxaWNfZ2lzYSwgMCk7XG4gXHRcdHN3aXRjaCAoc3RhdHVzLnJlc3BvbnNlX2NvZGUpIHtcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDpcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6XG4tXHRcdFx0dmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcihxLVx1MDAzZWFwcW4pO1xuLVx0XHRcdGdvdG8gZW5kX2ZyZWU7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBBUUlDIGRpc2FibGUgd2FzIGFjY2VwdGVkIChOT1JNQUwpLCBvciB0aGUgcXVldWUgd2FzXG4rXHRcdFx0ICogYWxyZWFkeSBkaXNhYmxlZCBvciBhIHByaW9yIGFzeW5jIHJlcXVlc3QgaXMgc3RpbGxcbitcdFx0XHQgKiBjb21wbGV0aW5nIChPVEhFUldJU0VfQ0hBTkdFRCkuICBJbiBib3RoIGNhc2VzLCB3ZSBtdXN0XG4rXHRcdFx0ICogd2FpdCB1bnRpbCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBoYXMgYmVlbiBkaXNhYmxlZFxuK1x0XHRcdCAqIGJlZm9yZSBwcm9jZWVkaW5nLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHJldCA9IHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIocS1cdTAwM2VhcHFuKTtcbitcdFx0XHRpZiAocmV0ID09IDAgfHwgcmV0ID09IC1FTk9ERVYpXG4rXHRcdFx0XHRnb3RvIGVuZF9mcmVlO1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogVGltZWQgb3V0IHdhaXRpbmcgdG8gY29uZmlybSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC5cbitcdFx0XHQgKiBJZiBhcF9hcWljIHJldHVybmVkIE5PUk1BTCwgdGhlIGd1ZXN0IHdvdWxkIGluY29ycmVjdGx5XG4rXHRcdFx0ICogaW50ZXJwcmV0IHRoYXQgYXMgYSBzdWNjZXNzZnVsIGRpc2FibGUgYW5kIG1heSBmcmVlIG9yXG4rXHRcdFx0ICogcmV1c2UgdGhlIE5JQiB3aGlsZSBoYXJkd2FyZSBjYW4gc3RpbGwgd3JpdGUgdG8gaXQuXG4rXHRcdFx0ICogWmVybyB0aGUgc3RhdHVzIHdvcmQgYW5kIHNldCBPVEhFUldJU0VfQ0hBTkdFRCB0byBtaW1pY1xuK1x0XHRcdCAqIHdoYXQgdGhlIGhhcmR3YXJlIGRvZXMgZm9yIHRoYXQgcmVzcG9uc2UgY29kZS4gVGhpc1xuK1x0XHRcdCAqIHNpZ25hbHMgdG8gdGhlIGd1ZXN0IHRoYXQgdGhlIHJlc2V0IG9wZXJhdGlvbiBkaWQgbm90XG4rXHRcdFx0ICogY29tcGxldGUuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKHN0YXR1cy5yZXNwb25zZV9jb2RlID09IEFQX1JFU1BPTlNFX05PUk1BTCkge1xuK1x0XHRcdFx0bWVtc2V0KFx1MDAyNnN0YXR1cywgMCwgc2l6ZW9mKHN0YXR1cykpO1xuK1x0XHRcdFx0c3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDtcbitcdFx0XHR9XG4rXHRcdFx0Z290byBlbmRfZmFpbDtcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzpcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9CVVNZOlxuIFx0XHRcdG1zbGVlcCgyMCk7XG5AQCAtMzI2LDE4ICszNzIsNDcgQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9RX05PVF9BVkFJTDpcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOlxuK1x0XHRcdC8qIEFQIG5vdCBvcGVyYXRpb25hbDsgbm8gZnVydGhlciBpbnRlcnJ1cHRzIHBvc3NpYmxlICovXG4rXHRcdFx0V0FSTl9PTkNFKDEsIFwiJXM6IGFwX2FxaWMgc3RhdHVzICVkXFxuXCIsIF9fZnVuY19fLFxuK1x0XHRcdFx0ICBzdGF0dXMucmVzcG9uc2VfY29kZSk7XG4rXHRcdFx0Z290byBlbmRfZnJlZTtcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1M6XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0LyogQWxsIGNhc2VzIGluIGRlZmF1bHQgbWVhbnMgQVAgbm90IG9wZXJhdGlvbmFsICovXG4rXHRcdFx0LypcbitcdFx0XHQgKiBUaGUgQVFJQyBkaXNhYmxlIHdhcyByZWplY3RlZDsgSVJRIGlzIHN0aWxsIGVuYWJsZWRcbitcdFx0XHQgKiBhbmQgdGhlIGhhcmR3YXJlIHN0aWxsIGhvbGRzIHRoZSBOSUIgYWRkcmVzcy4gRG8gbm90XG4rXHRcdFx0ICogZnJlZSByZXNvdXJjZXMuXG4rXHRcdFx0ICovXG4gXHRcdFx0V0FSTl9PTkNFKDEsIFwiJXM6IGFwX2FxaWMgc3RhdHVzICVkXFxuXCIsIF9fZnVuY19fLFxuIFx0XHRcdFx0ICBzdGF0dXMucmVzcG9uc2VfY29kZSk7XG4tXHRcdFx0Z290byBlbmRfZnJlZTtcbitcdFx0XHRnb3RvIGVuZF9mYWlsO1xuIFx0XHR9XG4gXHR9IHdoaWxlIChyZXRyaWVzLS0pO1xuIFxuIFx0V0FSTl9PTkNFKDEsIFwiJXM6IGFwX2FxaWMgc3RhdHVzICVkXFxuXCIsIF9fZnVuY19fLFxuIFx0XHQgIHN0YXR1cy5yZXNwb25zZV9jb2RlKTtcbitcbitlbmRfZmFpbDpcbitcdC8qXG4rXHQgKiBXZSBhcmUgaGVyZSBlaXRoZXIgYmVjYXVzZSB0aGUgQVFJQyBpbnN0cnVjdGlvbiBmYWlsZWQgdG8gZGlzYWJsZVxuK1x0ICogaW50ZXJydXB0cywgb3IgYmVjYXVzZSBJUj0wIGNvdWxkIG5vdCBiZSBjb25maXJtZWQuIEluIGVpdGhlciBjYXNlXG4rXHQgKiB0aGUgTklCIHBhZ2UgYW5kIGd1ZXN0IElTQyBjYW5ub3QgYmUgZnJlZWQ6IGhhcmR3YXJlIG1heSBzdGlsbCB3cml0ZVxuK1x0ICogdG8gdGhlIE5JQiwgYW5kIHVucGlubmluZyB0aGUgcGFnZSB3b3VsZCBhbGxvdyBpdCB0byBiZSByZWFsbG9jYXRlZFxuK1x0ICogdG8gYSBuZXcgb3duZXIuIEEgc3Vic2VxdWVudCBoYXJkd2FyZSBETUEgd3JpdGUgdG8gdGhhdCBwaHlzaWNhbFxuK1x0ICogYWRkcmVzcyB3b3VsZCBjb3JydXB0IHRoZSBuZXcgb3duZXIncyBtZW1vcnkg4oCUIGEgd2lsZCBETUEgd3JpdGUgdGhhdFxuK1x0ICogY291bGQgY3Jhc2ggb3IgY29tcHJvbWlzZSB0aGUgaG9zdCBrZXJuZWwuIFRoZSByZXNvdXJjZXMgYXJlXG4rXHQgKiB0aGVyZWZvcmUgaW50ZW50aW9uYWxseSBsZWFrZWQuXG4rXHQgKi9cbitcdHJldHVybiBzdGF0dXM7XG4rXG4gZW5kX2ZyZWU6XG4rXHQvKlxuK1x0ICogVGhpcyBsYWJlbCBpcyByZWFjaGVkIGJlY2F1c2UgdGhlIHF1ZXVlIHdhcyBzdWNjZXNzZnVsbHkgZGlzYWJsZWQsXG4rXHQgKiBvciBiZWNhdXNlIHRoZSBxdWV1ZSBpcyBub3Qgb3BlcmF0aW9uYWwgb3Igbm90IGF2YWlsYWJsZSwgaW4gd2hpY2ggY2FzZVxuK1x0ICogaW50ZXJydXB0cyBjYW4gbm90IGJlIHByb2Nlc3NlZCwgc28gZnJlZSB0aGUgQVFJQyByZXNvdXJjZXMgLSB0aGUgcGlubmVkIE5JQlxuK1x0ICogcGFnZSBhbmQgdGhlIHJlZ2lzdGVyZWQgZ3Vlc3QgSVNDIC0gdXNlZCB0byBlbmFibGUgaW50ZXJydXB0cyBzbyB0aGV5IHdpbGxcbitcdCAqIG5vdCBiZSBsZWFrZWQuXG4rXHQgKi9cbiBcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcbiBcdHJldHVybiBzdGF0dXM7XG4gfVxuQEAgLTQwMSwyMiArNDc2LDI5IEBAIHN0YXRpYyBpbnQgZW5zdXJlX25pYl9zaGFyZWQodW5zaWduZWQgbG9uZyBhZGRyKVxuIH1cbiBcbiAvKipcbi0gKiB2ZmlvX2FwX2lycV9lbmFibGUgLSBFbmFibGUgSW50ZXJydXB0aW9uIGZvciBhIEFQUU5cbisgKiB2ZmlvX2FwX2lycV9lbmFibGUgLSBlbmFibGUgaW50ZXJydXB0cyBmb3IgYW4gQVAgcXVldWUgb24gYmVoYWxmIG9mIGEgZ3Vlc3RcbiAgKlxuLSAqIEBxOlx0IHRoZSB2ZmlvX2FwX3F1ZXVlIGhvbGRpbmcgQVFJQyBwYXJhbWV0ZXJzXG4rICogQHE6XHQgdGhlIHZmaW9fYXBfcXVldWUgZm9yIHdoaWNoIGludGVycnVwdHMgYXJlIHRvIGJlIGVuYWJsZWRcbiAgKiBAaXNjOiB0aGUgZ3Vlc3QgSVNDIHRvIHJlZ2lzdGVyIHdpdGggdGhlIEdJQiBpbnRlcmZhY2Vcbi0gKiBAdmNwdTogdGhlIHZjcHUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZ2lzdGVycyBzcGVjaWZ5aW5nIHRoZSBwYXJhbWV0ZXJzXG4tICpcdCAgcGFzc2VkIHRvIHRoZSBQUUFQKEFRSUMpIGluc3RydWN0aW9uLlxuKyAqIEB2Y3B1OiB0aGUgdmNwdSB3aG9zZSByZWdpc3RlcnMgY29udGFpbiB0aGUgUFFBUChBUUlDKSBwYXJhbWV0ZXJzXG4rICpcbisgKiBQaW5zIHRoZSBndWVzdCBOSUIgcGFnZSwgcmVnaXN0ZXJzIHRoZSBndWVzdCBJU0Mgd2l0aCB0aGUgR0lCIHRvIG9idGFpbiBhXG4rICogaG9zdCBJU0MsIGFuZCByZWlzc3VlcyBQUUFQKEFRSUMpIHdpdGggdGhlIHRyYW5zbGF0ZWQgaG9zdC1hYnNvbHV0ZSBOSUJcbisgKiBhZGRyZXNzIGFuZCBob3N0IElTQyBvbiBiZWhhbGYgb2YgdGhlIGd1ZXN0LlxuICAqXG4tICogUGluIHRoZSBOSUIgc2F2ZWQgaW4gKnFcbi0gKiBSZWdpc3RlciB0aGUgZ3Vlc3QgSVNDIHRvIEdJQiBpbnRlcmZhY2UgYW5kIHJldHJpZXZlIHRoZVxuLSAqIGhvc3QgSVNDIHRvIGlzc3VlIHRoZSBob3N0IHNpZGUgUFFBUC9BUUlDXG4rICogVGhlIGNvbmRpdGlvbiBjb2RlIGFuZCBBUC1xdWV1ZSBzdGF0dXMgd29yZCByZXR1cm5lZCBieSBQUUFQKEFRSUMpIGFyZVxuKyAqIHJlZmxlY3RlZCBiYWNrIHRvIHRoZSBndWVzdCBhcy1pcy4gSVJRIHN0YXRlIHZlcmlmaWNhdGlvbiAocG9sbGluZyB1bnRpbFxuKyAqIElSPTEpIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgZ3Vlc3QgQVAgYnVzLCBub3QgdGhlIGhvc3QuXG4gICpcbi0gKiBzdGF0dXMucmVzcG9uc2VfY29kZSBtYXkgYmUgc2V0IHRvIEFQX1JFU1BPTlNFX0lOVkFMSURfQUREUkVTUyBpbiBjYXNlIHRoZVxuLSAqIHZmaW9fcGluX3BhZ2VzIG9yIGt2bV9zMzkwX2dpc2NfcmVnaXN0ZXIgZmFpbGVkLlxuKyAqIFJlc291cmNlIG1hbmFnZW1lbnQgaXMgYmFzZWQgc29sZWx5IG9uIHdoZXRoZXIgaGFyZHdhcmUgYWNjZXB0ZWQgdGhlIG5ldyBOSUI6XG4rICogLSBBUF9SRVNQT05TRV9OT1JNQUwgKENDPTApOiBoYXJkd2FyZSBhY2NlcHRlZCB0aGUgbmV3IE5JQjsgdGhlIG9sZCBwaW5uZWRcbisgKiAgIE5JQiBwYWdlIGFuZCByZWdpc3RlcmVkIGd1ZXN0IElTQyBhcmUgZnJlZWQgYW5kIHRoZSBuZXcgb25lcyBzYXZlZC5cbisgKiAtIEFsbCBvdGhlciByZXNwb25zZXM6IGhhcmR3YXJlIGRpZCBub3QgYWNjZXB0IHRoZSBuZXcgTklCOyB0aGUgbmV3bHkgcGlubmVkXG4rICogICBwYWdlIGFuZCByZWdpc3RlcmVkIElTQyBhcmUgZnJlZWQgYW5kIHRoZSBwcmV2aW91c2x5IHNhdmVkIHJlc291cmNlcyBhcmVcbisgKiAgIGxlZnQgaW50YWN0LlxuICAqXG4tICogT3RoZXJ3aXNlIHJldHVybiB0aGUgYXBfcXVldWVfc3RhdHVzIHJldHVybmVkIGJ5IHRoZSBhcF9hcWljKCksXG4tICogYWxsIHJldHJ5IGhhbmRsaW5nIHdpbGwgYmUgZG9uZSBieSB0aGUgZ3Vlc3QuXG4rICogQVBfUkVTUE9OU0VfSU5WQUxJRF9BRERSRVNTIGlzIHJldHVybmVkIGlmIHZmaW9fcGluX3BhZ2VzKCkgb3JcbisgKiBrdm1fczM5MF9naXNjX3JlZ2lzdGVyKCkgZmFpbHMgYmVmb3JlIHRoZSBBUUlDIGluc3RydWN0aW9uIGlzIGlzc3VlZC5cbiAgKlxuICAqIFJldHVybjogXHUwMDI2c3RydWN0IGFwX3F1ZXVlX3N0YXR1c1xuICAqL1xuQEAgLTQyOCwxMSArNTEwLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHZmaW9fYXBfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSxcbiBcdHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgc3RhdHVzID0ge307XG4gXHRzdHJ1Y3Qga3ZtX3MzOTBfZ2lzYSAqZ2lzYTtcbiBcdHN0cnVjdCBwYWdlICpoX3BhZ2U7XG4tXHRpbnQgbmlzYztcbitcdGludCBuaXNjLCByZXQ7XG4gXHRzdHJ1Y3Qga3ZtICprdm07XG4gXHRwaHlzX2FkZHJfdCBoX25pYjtcbiBcdGRtYV9hZGRyX3QgbmliO1xuLVx0aW50IHJldDtcbiBcbiBcdC8qIFZlcmlmeSB0aGF0IHRoZSBub3RpZmljYXRpb24gaW5kaWNhdG9yIGJ5dGUgYWRkcmVzcyBpcyB2YWxpZCAqL1xuIFx0aWYgKHZmaW9fYXBfdmFsaWRhdGVfbmliKHZjcHUsIFx1MDAyNm5pYikpIHtcbkBAIC00ODksMjQgKzU3MCwzMyBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4gXHRzdGF0dXMgPSBhcF9hcWljKHEtXHUwMDNlYXBxbiwgYXFpY19naXNhLCBoX25pYik7XG4gXHRzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7XG4gXHRjYXNlIEFQX1JFU1BPTlNFX05PUk1BTDpcbi1cdFx0LyogU2VlIGlmIHdlIGRpZCBjbGVhciBvbGRlciBJUlEgY29uZmlndXJhdGlvbiAqL1xuK1x0XHQvKlxuK1x0XHQgKiBIYXJkd2FyZSBhY2NlcHRlZCB0aGUgbmV3IE5JQiBhZGRyZXNzIChDQz0wKS4gVGhlIG9sZCBOSUIgYW5kXG4rXHRcdCAqIGd1ZXN0IElTQyBhcmUgbm8gbG9uZ2VyIHVzZWQgYnkgaGFyZHdhcmUgYW5kIGNhbiBiZSBmcmVlZC5cbitcdFx0ICogVGhlIG5ldyByZXNvdXJjZXMgYXJlIHNhdmVkIGZvciB0cmFja2luZyBhbmQgZnV0dXJlIHRlYXJkb3duLlxuK1x0XHQgKlxuK1x0XHQgKiBJUlEgc3RhdGUgdmVyaWZpY2F0aW9uIChwb2xsaW5nIHVudGlsIElSPTEpIGlzIHRoZVxuK1x0XHQgKiByZXNwb25zaWJpbGl0eSBvZiB0aGUgZ3Vlc3QgQVAgYnVzLCBub3QgdGhlIGhvc3QuIFRoZVxuK1x0XHQgKiBjb25kaXRpb24gY29kZSBhbmQgc3RhdHVzIHdvcmQgYXJlIHJlZmxlY3RlZCBiYWNrIHRvIHRoZVxuK1x0XHQgKiBndWVzdCB0byByZXNwb25kIHRvIHRoZSBQUUFQLUFRSUMgaW5zdHJ1Y3Rpb24uXG4rXHRcdCAqL1xuIFx0XHR2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7XG4gXHRcdHEtXHUwMDNlc2F2ZWRfaW92YSA9IG5pYjtcbiBcdFx0cS1cdTAwM2VzYXZlZF9pc2MgPSBpc2M7XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDpcbi1cdFx0LyogV2UgY291bGQgbm90IG1vZGlmeSBJUlEgc2V0dGluZ3M6IGNsZWFyIG5ldyBjb25maWd1cmF0aW9uICovXG4rXHRkZWZhdWx0OlxuK1x0XHQvKlxuK1x0XHQgKiBIYXJkd2FyZSBkaWQgbm90IGFjY2VwdCB0aGUgbmV3IE5JQiAoQ0M9MyBvciBlcnJvcikuIFRoZVxuK1x0XHQgKiBwcmV2aW91c2x5IHNhdmVkIE5JQiBhbmQgZ3Vlc3QgSVNDIHJlbWFpbiBhY3RpdmUgYW5kIG11c3RcbitcdFx0ICogbm90IGJlIGZyZWVkLiBSZWxlYXNlIHRoZSBuZXdseSBwaW5uZWQgcGFnZSBhbmQgcmVnaXN0ZXJlZFxuK1x0XHQgKiBJU0MgdGhhdCB3ZXJlIHByZXBhcmVkIGZvciB0aGlzIChyZWplY3RlZCkgcmVxdWVzdC5cbitcdFx0ICovXG4gXHRcdHJldCA9IGt2bV9zMzkwX2dpc2NfdW5yZWdpc3Rlcihrdm0sIGlzYyk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0VkZJT19BUF9EQkZfV0FSTihcIiVzOiBrdm1fczM5MF9naXNjX3VucmVnaXN0ZXI6IHJjPSVkIGlzYz0lZCwgYXBxbj0lIzA0eFxcblwiLFxuIFx0XHRcdFx0XHQgX19mdW5jX18sIHJldCwgaXNjLCBxLVx1MDAzZWFwcW4pO1xuIFx0XHR2ZmlvX3VucGluX3BhZ2VzKFx1MDAyNnEtXHUwMDNlbWF0cml4X21kZXYtXHUwMDNldmRldiwgbmliLCAxKTtcbiBcdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRwcl93YXJuKFwiJXM6IGFwcW4gJTA0eDogcmVzcG9uc2U6ICUwMnhcXG5cIiwgX19mdW5jX18sIHEtXHUwMDNlYXBxbixcbi1cdFx0XHRzdGF0dXMucmVzcG9uc2VfY29kZSk7XG4tXHRcdHZmaW9fYXBfaXJxX2Rpc2FibGUocSk7XG4tXHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0aWYgKHN0YXR1cy5yZXNwb25zZV9jb2RlICE9IEFQX1JFU1BPTlNFX05PUk1BTCkge1xuQEAgLTYzNSw3ICs3MjUsNiBAQCBzdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdH1cbiBcbiBcdHN0YXR1cyA9IHZjcHUtXHUwMDNlcnVuLVx1MDAzZXMucmVncy5ncHJzWzFdO1xuLVxuIFx0LyogSWYgSVIgYml0KDE2KSBpcyBzZXQgd2UgZW5hYmxlIHRoZSBpbnRlcnJ1cHQgKi9cbiBcdGlmICgoc3RhdHVzIFx1MDAzZVx1MDAzZSAoNjMgLSAxNikpIFx1MDAyNiAweDAxKVxuIFx0XHRxc3RhdHVzID0gdmZpb19hcF9pcnFfZW5hYmxlKHEsIHN0YXR1cyBcdTAwMjYgMHgwNywgdmNwdSk7XG5AQCAtNjkyLDE0ICs3ODEsMTQgQEAgc3RhdGljIGJvb2wgX3F1ZXVlX3Bhc3NhYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxuIFx0aWYgKCFxKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRzd2l0Y2ggKHEtXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUpIHtcbi1cdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxuLVx0Y2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6XG4tXHRjYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDpcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRkZWZhdWx0OlxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXHR9XG4rXHQvKlxuK1x0ICogQSBxdWV1ZSBpcyBvbmx5IHBhc3NhYmxlIGlmIHplcm9pemF0aW9uIHdhcyBjb25maXJtZWQgYnlcbitcdCAqIGFwcV9yZXNldF9jaGVjaygpIHZpYSBUQVBRIHN0YXR1cyBiaXQgdmVyaWZpY2F0aW9uLiBUaGlzIGlzXG4rXHQgKiBpbmRpY2F0ZWQgYnkgcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMICgwKS5cbitcdCAqIFRoaXMgaXMgdG8gcHJvdGVjdCBhZ2FpbnN0IGxlYWtpbmcgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBxdWV1ZVxuK1x0ICogdG8gdGhlIGd1ZXN0LlxuK1x0ICovXG4rXHRyZXR1cm4gcS1cdTAwM2VyZXNldF9zdGF0dXMucmVzcG9uc2VfY29kZSA9PSBBUF9SRVNQT05TRV9OT1JNQUw7XG4gfVxuIFxuIC8qXG5AQCAtMTQxMCw3ICsxNDk5LDcgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfZG9tYWluKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXG4ge1xuIFx0REVDTEFSRV9CSVRNQVAoYXBxaXMsIEFQX0RPTUFJTlMpO1xuIFxuLVx0Yml0bWFwX3plcm8oYXBxaXMsIEFQX0RFVklDRVMpO1xuK1x0Yml0bWFwX3plcm8oYXBxaXMsIEFQX0RPTUFJTlMpO1xuIFx0c2V0X2JpdF9pbnYoYXBxaSwgYXBxaXMpO1xuIFx0dmZpb19hcF9tZGV2X2hvdF91bnBsdWdfZG9tYWlucyhtYXRyaXhfbWRldiwgYXBxaXMpO1xuIH1cbkBAIC0xOTE5LDEyICsyMDA4LDQ3IEBAIHN0YXRpYyBpbnQgYXBxX3N0YXR1c19jaGVjayhpbnQgYXBxbiwgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyAqc3RhdHVzKVxuIHtcbiBcdHN3aXRjaCAoc3RhdHVzLVx1MDAzZXJlc3BvbnNlX2NvZGUpIHtcbiBcdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxuK1x0XHQvKlxuK1x0XHQgKiBUaGlzIHJlc3BvbnNlIGNvZGUgb25seSBpbmRpY2F0ZXMgdGhhdCB0aGUgUFFBUChaQVBRKSBoYXNcbitcdFx0ICogYmVlbiBpbml0aWF0ZWQuIFRoZSBmb2xsb3dpbmcgYml0IHNldHRpbmdzIGluIHRoZSBzdGF0dXNcbitcdFx0ICogcmV0dXJuZWQgZnJvbSBUQVBRIG11c3QgYmUgdmVyaWZpZWQgdG8gY29uZmlybSB0aGF0IHRoZVxuK1x0XHQgKiBhc3luY2hyb25vdXMgcG9ydGlvbiBvZiB0aGUgcXVldWUgemVyb2l6YXRpb24gaGFzIGNvbXBsZXRlZC5cbitcdFx0ICovXG4rXHRcdGlmIChzdGF0dXMtXHUwMDNlcXVldWVfZW1wdHkgXHUwMDI2XHUwMDI2ICFzdGF0dXMtXHUwMDNlcmVwbGllc193YWl0aW5nIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIXN0YXR1cy1cdTAwM2VpcnFfZW5hYmxlZCBcdTAwMjZcdTAwMjYgIXN0YXR1cy1cdTAwM2Vhc3luYylcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0LyogQXN5bmMgemVyb2l6YXRpb24gc3RpbGwgaW4gcHJvZ3Jlc3M7IGtlZXAgd2FpdGluZyAqL1xuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuIFx0Y2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6XG4gXHRjYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDpcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBxdWV1ZSBpcyBub24tb3BlcmF0aW9uYWw6IGludGVycnVwdHMgYXJlIG5vdCBwb3NzaWJsZSBzb1xuK1x0XHQgKiBBUUlDIHJlc291cmNlcyBjYW4gYmUgc2FmZWx5IGZyZWVkLiBIb3dldmVyLCB6ZXJvaXphdGlvblxuK1x0XHQgKiBjYW5ub3QgYmUgY29uZmlybWVkIGJlY2F1c2UgYWxsIHN0YXR1cyBiaXRzIGFyZSB6ZXJvZWQgd2hlblxuK1x0XHQgKiB0aGVzZSByZXNwb25zZSBjb2RlcyBhcmUgcmV0dXJuZWQg4oCUIHRoZXJlIGlzIG5vIHdheSB0b1xuK1x0XHQgKiBkaXN0aW5ndWlzaCBhIHplcm9pemVkIHF1ZXVlIGZyb20gb25lIHRoYXQgaGFzIG5vdCBiZWVuXG4rXHRcdCAqIHplcm9pemVkLiBSZXR1cm4gLUVOT0RFViB0byBzaWduYWwgdGhhdCBBUUlDIHJlc291cmNlcyBzaG91bGRcbitcdFx0ICogYmUgZnJlZWQgYnV0IHRoYXQgemVyb2l6YXRpb24gaGFzIG5vdCBiZWVuIGNvbmZpcm1lZC5cbitcdFx0ICovXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuIFx0Y2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzpcbi1cdGNhc2UgQVBfUkVTUE9OU0VfQlVTWTpcbitcdFx0LypcbitcdFx0ICogQSByZXNldCBpcyBpbiBwcm9ncmVzcy4gSXQgbWF5IGJlIHRoZSByZXNldCB3ZSBpc3N1ZWQgb3Igb25lXG4rXHRcdCAqIGlzc3VlZCBwcmlvciB0byBvdXJzOyBlaXRoZXIgd2F5LCBvbmNlIGl0IGNvbXBsZXRlcyB0aGUgcXVldWVcbitcdFx0ICogd2lsbCBiZSB6ZXJvaXplZCwgc28ga2VlcCB3YWl0aW5nLlxuK1x0XHQgKi9cbiBcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdGNhc2UgQVBfUkVTUE9OU0VfQlVTWTpcbitcdFx0LypcbitcdFx0ICogVGhlIHF1ZXVlIGlzIGJ1c3kgd2l0aCBzb21ldGhpbmcgdW5yZWxhdGVkIHRvIGEgcmVzZXQgYW5kIG91clxuK1x0XHQgKiBaQVBRIHdhcyByZWplY3RlZCBvdXRyaWdodC4gUmUtaXNzdWUgdGhlIFpBUFEuXG4rXHRcdCAqL1xuK1x0XHRyZXR1cm4gLUVBR0FJTjtcbitcbiBcdGNhc2UgQVBfUkVTUE9OU0VfQVNTT0NfU0VDUkVUX05PVF9VTklRVUU6XG4gXHRjYXNlIEFQX1JFU1BPTlNFX0FTU09DX0ZBSUxFRDpcbiBcdFx0LypcbkBAIC0xOTM1LDYgKzIwNTksNyBAQCBzdGF0aWMgaW50IGFwcV9zdGF0dXNfY2hlY2soaW50IGFwcW4sIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgKnN0YXR1cylcbiBcdFx0ICogYSB2YWx1ZSBpbmRpY2F0aW5nIGEgcmVzZXQgbmVlZHMgdG8gYmUgcGVyZm9ybWVkIGFnYWluLlxuIFx0XHQgKi9cbiBcdFx0cmV0dXJuIC1FQUdBSU47XG4rXG4gXHRkZWZhdWx0OlxuIFx0XHRXQVJOKHRydWUsXG4gXHRcdCAgICAgXCJmYWlsZWQgdG8gdmVyaWZ5IHJlc2V0IG9mIHF1ZXVlICUwMnguJTA0eDogVEFQUSByYz0ldVxcblwiLFxuQEAgLTE5NDQsNiArMjA2OSwzMyBAQCBzdGF0aWMgaW50IGFwcV9zdGF0dXNfY2hlY2soaW50IGFwcW4sIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgKnN0YXR1cylcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgcmVwb3J0X2FxaWNfcmVzb3VyY2VfbGVhayhzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcbit7XG4rXHRpZiAocS1cdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRCB8fCBxLVx1MDAzZXNhdmVkX2lvdmEpIHtcbitcdFx0aWYgKHEtXHUwMDNlbWF0cml4X21kZXYpIHtcbitcdFx0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuK1x0XHRcdFx0XHQgICAgIFwiUmVzZXQgdGltZWQgb3V0IGZvciBBUFFOICUwMnguJTA0eDogbGVha2luZyBBUUlDIHJlc291cmNlcyAoTklCIHBhZ2UgXHUwMDI2IEdJU0MpIHRvIHByZXZlbnQgaG9zdCBjcmFzaFxcblwiLFxuK1x0XHRcdFx0XHQgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4rXHRcdFx0XHRcdCAgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbikpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJSZXNldCB0aW1lZCBvdXQgZm9yIEFQUU4gJTAyeC4lMDR4OiBsZWFraW5nIEFRSUMgcmVzb3VyY2VzIChOSUIgcGFnZSBcdTAwMjYgR0lTQykgdG8gcHJldmVudCBob3N0IGNyYXNoXFxuXCIsXG4rXHRcdFx0XHRcdCAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuK1x0XHRcdFx0XHQgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbikpO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAocS1cdTAwM2VtYXRyaXhfbWRldikge1xuK1x0XHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXHUwMDNlbWF0cml4X21kZXYtXHUwMDNlbWRldiksXG4rXHRcdFx0XHRcdCAgICAgXCJSZXNldCB0aW1lZCBvdXQgZm9yIEFQUU4gJTAyeC4lMDR4XFxuXCIsXG4rXHRcdFx0XHRcdCAgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbitcdFx0XHRcdFx0ICAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcIlJlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHhcXG5cIixcbitcdFx0XHRcdFx0ICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4rXHRcdFx0XHRcdCAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSk7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4gI2RlZmluZSBXQUlUX01TRyBcIldhaXRlZCAlZG1zIGZvciByZXNldCBvZiBxdWV1ZSAlMDJ4LiUwNHggKCV1LCAldSwgJXUpXCJcbiBcbiBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKVxuQEAgLTE5NjEsNiArMjExMyw1NiBAQCBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKVxuIFx0XHRyZXQgPSBhcHFfc3RhdHVzX2NoZWNrKHEtXHUwMDNlYXBxbiwgXHUwMDI2c3RhdHVzKTtcbiBcdFx0aWYgKHJldCA9PSAtRUlPKVxuIFx0XHRcdHJldHVybjtcbitcdFx0aWYgKHEtXHUwMDNlcmVzZXRfbWF4X3dhaXQgXHUwMDI2XHUwMDI2IGVsYXBzZWQgXHUwMDNlPSBxLVx1MDAzZXJlc2V0X21heF93YWl0KSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBaZXJvaXphdGlvbiBjb25maXJtZWQgKHJldCA9PSAwKTogdGhlIFRBUFEgc3RhdHVzIGJpdHNcbitcdFx0XHQgKiBpbmRpY2F0ZSB0aGUgYXN5bmMgcG9ydGlvbiBvZiB0aGUgWkFQUSBjb21wbGV0ZWRcbitcdFx0XHQgKiBzdWNjZXNzZnVsbHkuIEZyZWUgQVFJQyByZXNvdXJjZXMgYW5kIHJldHVybi5cbitcdFx0XHQgKlxuK1x0XHRcdCAqIFF1ZXVlIG5vbi1vcGVyYXRpb25hbCAocmV0ID09IC1FTk9ERVYpOiB0aGUgcXVldWUgaXNcbitcdFx0XHQgKiBkZWNvbmZpZ3VyZWQgb3IgY2hlY2tzdG9wcGVkOyBpbnRlcnJ1cHRzIGFyZSBub3RcbitcdFx0XHQgKiBwb3NzaWJsZSBzbyBBUUlDIHJlc291cmNlcyBjYW4gYmUgc2FmZWx5IGZyZWVkLlxuK1x0XHRcdCAqIFplcm9pemF0aW9uIGNhbm5vdCBiZSBjb25maXJtZWQgaW4gdGhpcyBzdGF0ZSwgYnV0IHRoZVxuK1x0XHRcdCAqIHF1ZXVlIGNhbm5vdCBnZW5lcmF0ZSBpbnRlcnJ1cHRzLCBzbyB0aGUgTklCIHBhZ2UgaXNcbitcdFx0XHQgKiBubyBsb25nZXIgYSBETUEgdGFyZ2V0IGFuZCBpdCBpcyBzYWZlIHRvIGZyZWUgaXQuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKCFyZXQgfHwgcmV0ID09IC1FTk9ERVYpXG4rXHRcdFx0XHRnb3RvIGRvbmU7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBUaW1lZCBvdXQgd2l0aG91dCBiZWluZyBhYmxlIHRvIHZlcmlmeSB6YXBxIGNvbXBsZXRlZC5cbitcdFx0XHQgKlxuK1x0XHRcdCAqIFRoZSBBUUlDIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBxdWV1ZSAtIHRoZSBwaW5uZWRcbitcdFx0XHQgKiBwYWdlIGNvbnRhaW5pbmcgdGhlIE5JQiBhbmQgdGhlIHJlZ2lzdGVyZWQgZ3Vlc3QgSVNDIC1cbitcdFx0XHQgKiBjYW5ub3QgYmUgZnJlZWQgaGVyZS4gVGhlIE5JQiBpcyB0aGUgYWN0aXZlIERNQSB0YXJnZXRcbitcdFx0XHQgKiBmb3IgQVAgaW50ZXJydXB0IGRlbGl2ZXJ5IHVudGlsIHRoZSByZXNldCBjb21wbGV0ZXM7XG4rXHRcdFx0ICogZnJlZWluZyB0aGUgcGlubmVkIHBhZ2Ugd2hpbGUgdGhlIGhhcmR3YXJlIG1heSBzdGlsbFxuK1x0XHRcdCAqIHdyaXRlIHRvIGl0IHdvdWxkIHJlc3VsdCBpbiBhIHdpbGQgRE1BIHdyaXRlIHRoYXQgY291bGRcbitcdFx0XHQgKiBjb3JydXB0IGhvc3QgbWVtb3J5LlxuK1x0XHRcdCAqXG4rXHRcdFx0ICogSWYgdGhlIHJlc2V0IGV2ZW50dWFsbHkgY29tcGxldGVzLCBpbnRlcnJ1cHRzIHdpbGwgYmVcbitcdFx0XHQgKiB0ZXJtaW5hdGVkIGFuZCB0aGUgcGlubmVkIE5JQiBwYWdlIGFuZCBJU0MgcmVnaXN0cmF0aW9uXG4rXHRcdFx0ICogd2lsbCBiZSBsZWFrZWQuIFRoaXMgaXMgcHJlZmVyYWJsZSB0byBlaXRoZXIgYSB3aWxkIERNQVxuK1x0XHRcdCAqIHdyaXRlIG9yIHdhaXRpbmcgaW5kZWZpbml0ZWx5OiBmbHVzaF93b3JrKCkgY2FsbGVycyBob2xkXG4rXHRcdFx0ICogdGhlIG1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayBtdXRleCB3aGljaCBzZXJpYWxpemVzIGFjY2Vzc1xuK1x0XHRcdCAqIHRvIGFsbCBtZGV2IG9iamVjdHMgc3lzdGVtLXdpZGUsIHNvIGJsb2NraW5nIGhlcmUgd291bGRcbitcdFx0XHQgKiBoYW5nIGFsbCBndWVzdHMgdG8gd2hpY2ggdGhvc2UgbWRldnMgYXJlIGF0dGFjaGVkLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHJlcG9ydF9hcWljX3Jlc291cmNlX2xlYWsocSk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBSZXBvcnQgdGhlIGFjdHVhbCBub24temVybyBoYXJkd2FyZSByZXNwb25zZSBjb2RlLCBvclxuK1x0XHRcdCAqIHN5bnRoZXNpemUgQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1MgaWYgVEFQUVxuK1x0XHRcdCAqIGNvbXBsZXRlZCBub3JtYWxseSBidXQgdGhlIHN0YXR1cyBiaXRzIGZhaWxlZCB0b1xuK1x0XHRcdCAqIHRyYW5zaXRpb24gdG8gdGhlaXIgcG9zdC1yZXNldCBzdGF0ZXMuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKHN0YXR1cy5yZXNwb25zZV9jb2RlID09IEFQX1JFU1BPTlNFX05PUk1BTClcbitcdFx0XHRcdHEtXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUztcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRxLVx1MDAzZXJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlID0gc3RhdHVzLnJlc3BvbnNlX2NvZGU7XG4rXG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHRcdGlmICghcmV0IHx8IHJldCA9PSAtRU5PREVWKVxuK1x0XHRcdGdvdG8gZG9uZTtcbiBcdFx0aWYgKHJldCA9PSAtRUJVU1kpIHtcbiBcdFx0XHRwcl9ub3RpY2VfcmF0ZWxpbWl0ZWQoV0FJVF9NU0csIGVsYXBzZWQsXG4gXHRcdFx0XHRcdCAgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG5AQCAtMTk3NSwxMyArMjE3NywxMyBAQCBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKVxuIFx0XHRcdCAgICByZXQgPT0gLUVBR0FJTikge1xuIFx0XHRcdFx0c3RhdHVzID0gYXBfemFwcShxLVx1MDAzZWFwcW4sIDApO1xuIFx0XHRcdFx0bWVtY3B5KFx1MDAyNnEtXHUwMDNlcmVzZXRfc3RhdHVzLCBcdTAwMjZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTtcbi1cdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbi1cdFx0XHRpZiAocS1cdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRClcbi1cdFx0XHRcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcbi1cdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuK1xuK2RvbmU6XG4rXHRpZiAocS1cdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRClcbitcdFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG5AQCAtMjA2MSwxMiArMjI2MywyOCBAQCBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXG4gXHRyZXR1cm4gdmZpb19hcF9tZGV2X3NldF9rdm0obWF0cml4X21kZXYsIHZkZXYtXHUwMDNla3ZtKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3JlbGVhc2VfZXZlbnRmZHMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcbit7XG4rXHRpZiAobWF0cml4X21kZXYtXHUwMDNlcmVxX3RyaWdnZXIpIHtcbitcdFx0ZXZlbnRmZF9jdHhfcHV0KG1hdHJpeF9tZGV2LVx1MDAzZXJlcV90cmlnZ2VyKTtcbitcdFx0bWF0cml4X21kZXYtXHUwMDNlcmVxX3RyaWdnZXIgPSBOVUxMO1xuK1x0fVxuK1x0aWYgKG1hdHJpeF9tZGV2LVx1MDAzZWNmZ19jaGdfdHJpZ2dlcikge1xuK1x0XHRldmVudGZkX2N0eF9wdXQobWF0cml4X21kZXYtXHUwMDNlY2ZnX2NoZ190cmlnZ2VyKTtcbitcdFx0bWF0cml4X21kZXYtXHUwMDNlY2ZnX2NoZ190cmlnZ2VyID0gTlVMTDtcbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXG4ge1xuIFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9XG4gXHRcdGNvbnRhaW5lcl9vZih2ZGV2LCBzdHJ1Y3QgYXBfbWF0cml4X21kZXYsIHZkZXYpO1xuIFxuIFx0dmZpb19hcF9tZGV2X3Vuc2V0X2t2bShtYXRyaXhfbWRldik7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4rXHR2ZmlvX2FwX21kZXZfcmVsZWFzZV9ldmVudGZkcyhtYXRyaXhfbWRldik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3JlcXVlc3Qoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2LCB1bnNpZ25lZCBpbnQgY291bnQpXG5AQCAtMjQ1Nyw4ICsyNjc1LDEwIEBAIGludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXG4gXG4gXHRxLVx1MDAzZWFwcW4gPSBhcHFuO1xuIFx0cS1cdTAwM2VzYXZlZF9pc2MgPSBWRklPX0FQX0lTQ19JTlZBTElEO1xuLVx0bWVtc2V0KFx1MDAyNnEtXHUwMDNlcmVzZXRfc3RhdHVzLCAwLCBzaXplb2YocS1cdTAwM2VyZXNldF9zdGF0dXMpKTtcbitcdHEtXHUwMDNlcmVzZXRfbWF4X3dhaXQgPSBBUF9SRVNFVF9NQVhfV0FJVDtcbiBcdElOSVRfV09SSyhcdTAwMjZxLVx1MDAzZXJlc2V0X3dvcmssIGFwcV9yZXNldF9jaGVjayk7XG4rXHR2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWUocSk7XG4rXHRmbHVzaF93b3JrKFx1MDAyNnEtXHUwMDNlcmVzZXRfd29yayk7XG4gXG4gXHRpZiAobWF0cml4X21kZXYpIHtcbiBcdFx0dmZpb19hcF9tZGV2X2xpbmtfcXVldWUobWF0cml4X21kZXYsIHEpO1xuQEAgLTI1NDEsOCArMjc2MSwxOSBAQCB2b2lkIHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXG4gXHRcdHZmaW9fYXBfdW5saW5rX3F1ZXVlX2ZyX21kZXYocSk7XG4gXG4gXHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2YXBkZXYtXHUwMDNlZGV2aWNlLCBOVUxMKTtcbi1cdGtmcmVlKHEpO1xuIFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX21kZXYobWF0cml4X21kZXYpO1xuK1xuK1x0aWYgKHEtXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgIT0gQVBfUkVTUE9OU0VfTk9STUFMKSB7XG4rXHRcdC8qXG4rXHRcdCAqIExvb3AgdW50aWwgemVyb2l6YXRpb24gb2YgcXVldWUgaXMgdmVyaWZpZWQgc28gd2UgZG9uJ3QgbGVha1xuK1x0XHQgKiB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIHF1ZXVlIHRvIHRoZSBjYWxsZXIuXG4rXHRcdCAqL1xuK1x0XHRxLVx1MDAzZXJlc2V0X21heF93YWl0ID0gMDtcbitcdFx0dmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlKHEpO1xuK1x0XHRmbHVzaF93b3JrKFx1MDAyNnEtXHUwMDNlcmVzZXRfd29yayk7XG4rXHR9XG4rXG4rXHRrZnJlZShxKTtcbiB9XG4gXG4gLyoqXG5AQCAtMjY5NywxMSArMjkyOCwxMSBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfb25fY2ZnX3JlbW92ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jb25maWdfaW5mbyxcbiBcdGRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kbm90KGFxcmVtLFxuIFx0XHRcdFx0ICAgKHVuc2lnbmVkIGxvbmcgKilwcmV2X2NvbmZpZ19pbmZvLVx1MDAzZWFxbSxcbiBcdFx0XHRcdCAgICh1bnNpZ25lZCBsb25nICopY3VyX2NvbmZpZ19pbmZvLVx1MDAzZWFxbSxcbi1cdFx0XHRcdCAgIEFQX0RFVklDRVMpO1xuK1x0XHRcdFx0ICAgQVBfRE9NQUlOUyk7XG4gXHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChjZHJlbSxcbiBcdFx0XHRcdCAgICh1bnNpZ25lZCBsb25nICopcHJldl9jb25maWdfaW5mby1cdTAwM2VhZG0sXG4gXHRcdFx0XHQgICAodW5zaWduZWQgbG9uZyAqKWN1cl9jb25maWdfaW5mby1cdTAwM2VhZG0sXG4tXHRcdFx0XHQgICBBUF9ERVZJQ0VTKTtcbitcdFx0XHRcdCAgIEFQX0RPTUFJTlMpO1xuIFxuIFx0aWYgKGRvX3JlbW92ZSlcbiBcdFx0dmZpb19hcF9tZGV2X2NmZ19yZW1vdmUoYXByZW0sIGFxcmVtLCBjZHJlbSk7XG5AQCAtMjgxMiw3ICszMDQzLDcgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19hZGQodW5zaWduZWQgbG9uZyAqYXBtX2FkZCwgdW5zaWduZWQgbG9uZyAqYXFtX2FkZCxcbiBcdFx0Yml0bWFwX2FuZChtYXRyaXhfbWRldi1cdTAwM2VhcW1fYWRkLFxuIFx0XHRcdCAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcW0sIGFxbV9hZGQsIEFQX0RPTUFJTlMpO1xuIFx0XHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVx1MDAzZWFkbV9hZGQsXG4tXHRcdFx0ICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFkbSwgYWRtX2FkZCwgQVBfREVWSUNFUyk7XG4rXHRcdFx0ICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFkbSwgYWRtX2FkZCwgQVBfRE9NQUlOUyk7XG4gXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmggYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oXG5pbmRleCA5YmZmNjY2YjBiMzVkLi45MTRlYTVkNDFkMzMwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaFxuKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaFxuQEAgLTEzOSw2ICsxMzksOCBAQCBzdHJ1Y3QgYXBfbWF0cml4X21kZXYge1xuICAqXHRcdCB0aGF0IG5lZWQgdG8gYmUgcmVzZXRcbiAgKiBAcmVzZXRfc3RhdHVzOiB0aGUgc3RhdHVzIGZyb20gdGhlIGxhc3QgcmVzZXQgb2YgdGhlIHF1ZXVlXG4gICogQHJlc2V0X3dvcms6IHdvcmsgdG8gd2FpdCBmb3IgcXVldWUgcmVzZXQgdG8gY29tcGxldGVcbisgKiBAcmVzZXRfbWF4X3dhaXQ6IHRoZSBtYXggYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBmb3IgYSByZXNldCB0byBjb21wbGV0ZTtcbisgKlx0XHQgICAgc3BlY2lmeWluZyAwIG1lYW5zIHdhaXQgYXMgbG9uZyBhcyBpdCB0YWtlcy5cbiAgKi9cbiBzdHJ1Y3QgdmZpb19hcF9xdWV1ZSB7XG4gXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2O1xuQEAgLTE1MCw2ICsxNTIsNyBAQCBzdHJ1Y3QgdmZpb19hcF9xdWV1ZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHJlc2V0X3Fub2RlO1xuIFx0c3RydWN0IGFwX3F1ZXVlX3N0YXR1cyByZXNldF9zdGF0dXM7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfd29yaztcbitcdHVuc2lnbmVkIGludCByZXNldF9tYXhfd2FpdDtcbiB9O1xuIFxuIGludCB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIodm9pZCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODoyMjowNy44NTczMjEyNzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTMwNDk1MjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEFNRDY0KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBtb2RpZmljYXRpb25zIGFuZCB0aGVpciBpbXBhY3QsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQuIEkgc2VlIHRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byBgZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jYCBhbmQgYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmhgLiBTaW5jZSB0aGVzZSBhcmUgaW4gdGhlIHMzOTAgZGlyZWN0b3J5LCBJJ2xsIG5lZWQgdG8gaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgdGhlIGNyb3NzLWFyY2hpdGVjdHVyZSBpbXBsaWNhdGlvbnMgYW5kIHdoZXRoZXIgdGhlIGNvZGUgdXRpbGl6ZXMgYW55IG9mIHRoZSBmZWF0dXJlcyB0aGF0IG1ha2UgczM5MCBkaXN0aW5jdCBmcm9tIGFtZDY0LiBUaGVyZWZvcmUsIEkgbmVlZCB0byB2ZXJpZnkgS2NvbmZpZyBhbmQgYXJjaGl0ZWN0dXJlIGRlcGVuZGVuY2llcyBmb3IgdGhlIHNvdXJjZSBmaWxlLiBUaGlzIGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nIGhvdyB0aGlzIHBhdGNoIGludGVncmF0ZXMgYW5kIGFueSBwb3RlbnRpYWwgYXJjaGl0ZWN0dXJhbCBjb25zdHJhaW50cy4gVGhpcyBmaWxlIGlzIHByb2JhYmx5IGludGVyYWN0aW5nIHdpdGggVkZJTyBhbmQgQVAsIHRoZXJlZm9yZSBmdXJ0aGVyIHJlc2VhcmNoIGludG8gdGhvc2Ugc3BlY2lmaWMgc3Vic3lzdGVtcyBtYXkgYmUgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA0NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6MjI6MDkuOTg3ODE5NDY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwOTQ1MjQ2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT19BUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjIyOjEwLjAzODc3MzU3NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NzY5NTIwMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB5b3VyIHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipOYXZpZ2F0aW5nIHRoZSBTMzkwIENyeXB0byBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IG15IGJlYXJpbmdzIGFuZCBsb2NhdGUgdGhlIEtjb25maWcgZmlsZSB3aXRoaW4gdGhlIHMzOTAgY3J5cHRvIGRyaXZlciBzdHJ1Y3R1cmUuIEdpdmVuIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbmF0dXJlLCBJJ2xsIHN0YXJ0IGJ5IGRyaWxsaW5nIGRvd24gaW50byB0aGUgYGRyaXZlcnMvczM5MGAgZGlyZWN0b3J5LiBNeSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSBjcnlwdG8tcmVsYXRlZCBjb25maWd1cmF0aW9uIHdpbGwgYmUgb3JnYW5pemVkIGJlbmVhdGggdGhhdC4gSSdtIHJlYXNvbmFibHkgY29uZmlkZW50LCBiYXNlZCBvbiBwcmV2aW91cyBleHBlcmllbmNlLCB0aGF0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBiZSBtYW5hZ2VkIHZpYSBLY29uZmlnLiBJdCdzIHRoZSBzdGFuZGFyZCBmb3IgdGhlIGtlcm5lbCwgYW5kIHRoZSBjcnlwdG8gc3Vic3lzdGVtIGlzIGZhaXJseSB3ZWxsLWVzdGFibGlzaGVkLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0IHdlIGZpbmQgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG9gLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gdHJhY2UgZGVwZW5kZW5jaWVzIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgY3J5cHRvIGZlYXR1cmVzIGFyZSBiZWluZyBjb25maWd1cmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM3MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjIyOjExLjkxNTcyODc1NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTk0MDkwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJWRklPX0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvczM5MFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL01ha2VmaWxlPTM3PXZmaW9fYXAtb2JqcyA6PSB2ZmlvX2FwX2Rydi5vIHZmaW9fYXBfb3BzLm9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19WRklPX0FQKSArPSB2ZmlvX2FwLm9cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTYtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmg6NzojaWZuZGVmIFZGSU9fQVBfREVCVUdfSFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oOjg6I2RlZmluZSBWRklPX0FQX0RFQlVHX0hcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC05LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmgtMTgtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmg6MTk6I2RlZmluZSBWRklPX0FQX0RCRiguLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTIwLVxcdGRlYnVnX3NwcmludGZfZXZlbnQodmZpb19hcF9kYmZfaW5mbywgIyNfX1ZBX0FSR1NfXylcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaDoyMTojZGVmaW5lIFZGSU9fQVBfREJGX0VSUiguLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTIyLVxcdGRlYnVnX3NwcmludGZfZXZlbnQodmZpb19hcF9kYmZfaW5mbywgREJGX0VSUiwgIyNfX1ZBX0FSR1NfXylcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaDoyMzojZGVmaW5lIFZGSU9fQVBfREJGX1dBUk4oLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC0yNC1cXHRkZWJ1Z19zcHJpbnRmX2V2ZW50KHZmaW9fYXBfZGJmX2luZm8sIERCRl9XQVJOLCAjI19fVkFfQVJHU19fKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oOjI1OiNkZWZpbmUgVkZJT19BUF9EQkZfSU5GTyguLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTI2LVxcdGRlYnVnX3NwcmludGZfZXZlbnQodmZpb19hcF9kYmZfaW5mbywgREJGX0lORk8sICMjX19WQV9BUkdTX18pXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmg6Mjc6I2RlZmluZSBWRklPX0FQX0RCRl9EQkcoLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC0yOC1cXHRkZWJ1Z19zcHJpbnRmX2V2ZW50KHZmaW9fYXBfZGJmX2luZm8sIERCRl9ERUJVRywgIyNfX1ZBX0FSR1NfXylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oPTMwPWV4dGVybiBkZWJ1Z19pbmZvX3QgKnZmaW9fYXBfZGJmX2luZm87XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmgtMzEtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmg6MzI6I2VuZGlmIC8qIFZGSU9fQVBfREVCVUdfSCAqL1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE4LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxOTojZGVmaW5lIFZGSU9fQVBfUk9PVF9OQU1FIFxcXCJ2ZmlvX2FwXFxcIlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoyMDojZGVmaW5lIFZGSU9fQVBfREVWX05BTUUgXFxcIm1hdHJpeFxcXCJcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMjEtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9ODY9c3RhdGljIGludCB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtOTAtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjkxOlxcdHJvb3RfZGV2aWNlID0gcm9vdF9kZXZpY2VfcmVnaXN0ZXIoVkZJT19BUF9ST09UX05BTUUpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy05Mi1cXHRpZiAoSVNfRVJSKHJvb3RfZGV2aWNlKSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMTUtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjExNjpcXHRkZXZfc2V0X25hbWUoXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWRldmljZSwgXFxcIiVzXFxcIiwgVkZJT19BUF9ERVZfTkFNRSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTExNy1cXHRtYXRyaXhfZGV2LVxcdTAwM2VkZXZpY2UucGFyZW50ID0gcm9vdF9kZXZpY2U7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9MTY3PXN0YXRpYyBpbnQgX19pbml0IHZmaW9fYXBfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE4Mi1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTgzOlxcdHJldCA9IGFwX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2dmZpb19hcF9kcnYsIFRISVNfTU9EVUxFLCBWRklPX0FQX0RSVl9OQU1FKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTg0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjY6I2RlZmluZSBWRklPX0FQX01ERVZfVFlQRV9IV1ZJUlQgXFxcInBhc3N0aHJvdWdoXFxcIlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNzojZGVmaW5lIFZGSU9fQVBfTURFVl9OQU1FX0hXVklSVCBcXFwiVkZJTyBBUCBQYXNzdGhyb3VnaCBEZXZpY2VcXFwiXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI5MT1zdGF0aWMgdm9pZCB2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjk0LVxcdFxcdHJldHVybjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Mjk1OlxcdGlmIChxLVxcdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRCBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yOTYtXFx0ICAgICFXQVJOX09OKCEocS1cXHUwMDNlbWF0cml4X21kZXYgXFx1MDAyNlxcdTAwMjYgcS1cXHUwMDNlbWF0cml4X21kZXYtXFx1MDAzZWt2bSkpKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI5Ny1cXHRcXHRrdm1fczM5MF9naXNjX3VucmVnaXN0ZXIocS1cXHUwMDNlbWF0cml4X21kZXYtXFx1MDAzZWt2bSwgcS1cXHUwMDNlc2F2ZWRfaXNjKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Mjk4OlxcdFxcdHEtXFx1MDAzZXNhdmVkX2lzYyA9IFZGSU9fQVBfSVNDX0lOVkFMSUQ7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI5OS1cXHR9XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9NTA1PXN0YXRpYyBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHZmaW9fYXBfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy01MTktXFx0aWYgKHZmaW9fYXBfdmFsaWRhdGVfbmliKHZjcHUsIFxcdTAwMjZuaWIpKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjUyMDpcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogaW52YWxpZCBOSUIgYWRkcmVzczogbmliPSVwYWQsIGFwcW49JSMwNHhcXFxcblxcXCIsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTUyMS1cXHRcXHRcXHRcXHQgX19mdW5jX18sIFxcdTAwMjZuaWIsIHEtXFx1MDAzZWFwcW4pO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTUzMy1cXHRkZWZhdWx0OlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo1MzQ6XFx0XFx0VkZJT19BUF9EQkZfV0FSTihcXFwiJXM6IHZmaW9fcGluX3BhZ2VzIGZhaWxlZDogcmM9JWQsXFxcIlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy01MzUtXFx0XFx0XFx0XFx0IFxcXCJuaWI9JXBhZCwgYXBxbj0lIzA0eFxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy01NTctXFx0aWYgKG5pc2MgXFx1MDAzYyAwKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjU1ODpcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogZ2lzYyByZWdpc3RyYXRpb24gZmFpbGVkOiBuaXNjPSVkLCBpc2M9JWQsIGFwcW49JSMwNHhcXFxcblxcXCIsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTU1OS1cXHRcXHRcXHRcXHQgX19mdW5jX18sIG5pc2MsIGlzYywgcS1cXHUwMDNlYXBxbik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNTk1LVxcdFxcdGlmIChyZXQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjU5NjpcXHRcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczoga3ZtX3MzOTBfZ2lzY191bnJlZ2lzdGVyOiByYz0lZCBpc2M9JWQsIGFwcW49JSMwNHhcXFxcblxcXCIsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTU5Ny1cXHRcXHRcXHRcXHRcXHQgX19mdW5jX18sIHJldCwgaXNjLCBxLVxcdTAwM2VhcHFuKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02MDItXFx0aWYgKHN0YXR1cy5yZXNwb25zZV9jb2RlICE9IEFQX1JFU1BPTlNFX05PUk1BTCkge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo2MDM6XFx0XFx0VkZJT19BUF9EQkZfV0FSTihcXFwiJXM6IFBRQVAoQVFJQykgZmFpbGVkIHdpdGggc3RhdHVzPSUjMDJ4OiBcXFwiXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTYwNC1cXHRcXHRcXHRcXHQgXFxcInpvbmU9JSN4LCBpcj0lI3gsIGdpc2M9JSN4LCBmPSUjeCxcXFwiXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9Njc4PXN0YXRpYyBpbnQgaGFuZGxlX3BxYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTY5MS1cXHRpZiAoISh2Y3B1LVxcdTAwM2VhcmNoLnNpZV9ibG9jay1cXHUwMDNlZWNhIFxcdTAwMjYgRUNBX0FJVikpIHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NjkyOlxcdFxcdFZGSU9fQVBfREJGX1dBUk4oXFxcIiVzOiBBSVYgZmFjaWxpdHkgbm90IGluc3RhbGxlZDogYXBxbj0weCUwNHgsIGVjYT0weCUwNHhcXFxcblxcXCIsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTY5My1cXHRcXHRcXHRcXHQgX19mdW5jX18sIGFwcW4sIHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VlY2EpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTcwMC1cXHRpZiAoIXZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjcwMTpcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogUFFBUChBUUlDKSBob29rIG5vdCByZWdpc3RlcmVkIHdpdGggdGhlIHZmaW9fYXAgZHJpdmVyOiBhcHFuPTB4JTA0eFxcXFxuXFxcIixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzAyLVxcdFxcdFxcdFxcdCBfX2Z1bmNfXywgYXBxbik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzEyLVxcdFxcdHZmaW9fYXBfbGVfZ3VpZF90b19iZV91dWlkKFxcdTAwMjZtYXRyaXhfbWRldi1cXHUwMDNlbWRldi1cXHUwMDNldXVpZCwgdXVpZCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjcxMzpcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogbWRldiAlMDhseC0lMDRseC0lMDRseC0lMDRseC0lMDRseCUwOGx4IG5vdCBpbiB1c2U6IGFwcW49MHglMDR4XFxcXG5cXFwiLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03MTQtXFx0XFx0XFx0XFx0IF9fZnVuY19fLCB1dWlkWzBdLCAgdXVpZFsxXSwgdXVpZFsyXSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03MjAtXFx0aWYgKCFxKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjcyMTpcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogUXVldWUgJTAyeC4lMDR4IG5vdCBib3VuZCB0byB0aGUgdmZpb19hcCBkcml2ZXJcXFxcblxcXCIsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTcyMi1cXHRcXHRcXHRcXHQgX19mdW5jX18sIEFQX1FJRF9DQVJEKGFwcW4pLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIwNzI9c3RhdGljIHZvaWQgcmVwb3J0X2FxaWNfcmVzb3VyY2VfbGVhayhzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjA3My17XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIwNzQ6XFx0aWYgKHEtXFx1MDAzZXNhdmVkX2lzYyAhPSBWRklPX0FQX0lTQ19JTlZBTElEIHx8IHEtXFx1MDAzZXNhdmVkX2lvdmEpIHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjA3NS1cXHRcXHRpZiAocS1cXHUwMDNlbWF0cml4X21kZXYpIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMTAxPXN0YXRpYyB2b2lkIGFwcV9yZXNldF9jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnJlc2V0X3dvcmspXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjE4NC1kb25lOlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMTg1OlxcdGlmIChxLVxcdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRClcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjE4Ni1cXHRcXHR2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjMxOT1zdGF0aWMgaW50IHZmaW9fYXBfbWRldl9nZXRfZGV2aWNlX2luZm8odW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjMzMy1cXHRpbmZvLm51bV9yZWdpb25zID0gMDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjMzNDpcXHRpbmZvLm51bV9pcnFzID0gVkZJT19BUF9OVU1fSVJRUztcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjMzNS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMzM5PXN0YXRpYyBzc2l6ZV90IHZmaW9fYXBfZ2V0X2lycV9pbmZvKHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzNDgtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIzNDk6XFx0aWYgKGluZm8uYXJnc3ogXFx1MDAzYyBtaW5zeiB8fCBpbmZvLmluZGV4IFxcdTAwM2U9IFZGSU9fQVBfTlVNX0lSUVMpXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzNTAtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM1Mi1cXHRzd2l0Y2ggKGluZm8uaW5kZXgpIHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjM1MzpcXHRjYXNlIFZGSU9fQVBfUkVRX0lSUV9JTkRFWDpcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM1NC1cXHRcXHRpbmZvLmNvdW50ID0gMTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMzU2LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyMzU3OlxcdGNhc2UgVkZJT19BUF9DRkdfQ0hHX0lSUV9JTkRFWDpcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM1OC1cXHRcXHRpbmZvLmNvdW50ID0gMTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMzY4PXN0YXRpYyBpbnQgdmZpb19hcF9pcnFfc2V0X2luaXQoc3RydWN0IHZmaW9faXJxX3NldCAqaXJxX3NldCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjM3OC1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjM3OTpcXHRyZXQgPSB2ZmlvX3NldF9pcnFzX3ZhbGlkYXRlX2FuZF9wcmVwYXJlKGlycV9zZXQsIDEsIFZGSU9fQVBfTlVNX0lSUVMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIzODAtXFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZkYXRhX3NpemUpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI0NTc9c3RhdGljIGludCB2ZmlvX2FwX3NldF9pcnFzKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjQ2OS1cXHRcXHRzd2l0Y2ggKGlycV9zZXQuaW5kZXgpIHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjQ3MDpcXHRcXHRjYXNlIFZGSU9fQVBfUkVRX0lSUV9JTkRFWDpcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjQ3MS1cXHRcXHRcXHRyZXR1cm4gdmZpb19hcF9zZXRfcmVxdWVzdF9pcnEobWF0cml4X21kZXYsIGFyZyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI0NzI6XFx0XFx0Y2FzZSBWRklPX0FQX0NGR19DSEdfSVJRX0lOREVYOlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDczLVxcdFxcdFxcdHJldHVybiB2ZmlvX2FwX3NldF9jZmdfY2hhbmdlX2lycShtYXRyaXhfbWRldiwgYXJnKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNjI3PWludCB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNjM0LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNjM1OlxcdG1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfdHlwZS5zeXNmc19uYW1lID0gVkZJT19BUF9NREVWX1RZUEVfSFdWSVJUO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNjM2OlxcdG1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfdHlwZS5wcmV0dHlfbmFtZSA9IFZGSU9fQVBfTURFVl9OQU1FX0hXVklSVDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjYzNy1cXHRtYXRyaXhfZGV2LVxcdTAwM2VtZGV2X3R5cGVzID0gXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfdHlwZTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNjU2PWludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjY3Ni1cXHRxLVxcdTAwM2VhcHFuID0gYXBxbjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjY3NzpcXHRxLVxcdTAwM2VzYXZlZF9pc2MgPSBWRklPX0FQX0lTQ19JTlZBTElEO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNjc4LVxcdHEtXFx1MDAzZXJlc2V0X21heF93YWl0ID0gQVBfUkVTRVRfTUFYX1dBSVQ7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTExLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6MTI6I2lmbmRlZiBfVkZJT19BUF9QUklWQVRFX0hfXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoxMzojZGVmaW5lIF9WRklPX0FQX1BSSVZBVEVfSF9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE0LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0yNS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjI2OiNkZWZpbmUgVkZJT19BUF9NT0RVTEVfTkFNRSBcXFwidmZpb19hcFxcXCJcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjI3OiNkZWZpbmUgVkZJT19BUF9EUlZfTkFNRSBcXFwidmZpb19hcFxcXCJcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTI4LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaD0xNDU9c3RydWN0IHZmaW9fYXBfcXVldWUge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNDgtXFx0aW50XFx0YXBxbjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE0OTojZGVmaW5lIFZGSU9fQVBfSVNDX0lOVkFMSUQgMHhmZlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtMTUwLVxcdHVuc2lnbmVkIGNoYXIgc2F2ZWRfaXNjO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaD0xNjg9dm9pZCB2ZmlvX2FwX29uX3NjYW5fY29tcGxldGUoc3RydWN0IGFwX2NvbmZpZ19pbmZvICpuZXdfY29uZmlnX2luZm8sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE3MC1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE3MTojZW5kaWYgLyogX1ZGSU9fQVBfUFJJVkFURV9IXyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODoyMjoxMS45Njc2NzcxMTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTQ3MTg0OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcGlucG9pbnQgd2hlcmUgdGhlIGRlcGVuZGVuY3kgb2YgYFZGSU9fQVBgIGxpZXMgaW4gcmVsYXRpb24gdG8gdGhlIFMzOTAgYXJjaGl0ZWN0dXJlLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHdvdWxkIGJlIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgcmVsYXRlZCB0byB0aGUgUzM5MCBhcmNoaXRlY3R1cmUsIGFuZCB0aGUgY3J5cHRvIHNlY3Rpb24gZmVlbHMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQuIFNwZWNpZmljYWxseSwgSSdsbCBleGFtaW5lIGBkcml2ZXJzL3MzOTAvS2NvbmZpZ2AgYW5kIGBkcml2ZXJzL3MzOTAvY3J5cHRvL0tjb25maWdgLiBUaGlzIHNob3VsZCByZXZlYWwgd2hldGhlciBgVkZJT19BUGAgaXMgZGlyZWN0bHkgY29udGluZ2VudCBvbiB0aGUgUzM5MCBwbGF0Zm9ybSBvciBzb21lIHJlbGF0ZWQgY3J5cHRvIGZlYXR1cmVzIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjY0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6MjI6MTMuOTE0ODY0Njg3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNTU4NTE2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT19BUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODoyMjoxMy45Njg0Mjk3MDNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDA1MjAxODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBLY29uZmlnIGh1bnQuXG5cbioqSHVudGluZyBmb3IgVkZJT19BUCBpbiB0aGUgS2NvbmZpZyBGaWxlcyoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBldmVyeSBpbnN0YW5jZSB3aGVyZSBgVkZJT19BUGAgaXMgYWN0dWFsbHkgZGVmaW5lZCB3aXRoaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCB0aG91Z2ggcG90ZW50aWFsbHkgdGVkaW91cywgdGFzay4gSSdtIGFzc3VtaW5nIHRoZXJlJ3MgYSBnb29kIHJlYXNvbiBmb3IgdGhpcyBzZWFyY2gg4oCTIG1heWJlIEknbSB0cmFja2luZyBhIGRlcGVuZGVuY3ksIGRlYnVnZ2luZyBhIGJ1aWxkIGlzc3VlLCBvciBwZXJoYXBzIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlIGFyb3VuZCBBY2NlbGVyYXRlZCBQcm9jZXNzaW5nIHN1cHBvcnQgaW4gVkZJTy4gV2hhdGV2ZXIgdGhlIHJlYXNvbiwgbXkgaW1tZWRpYXRlIGdvYWwgaXMgY2xlYXI6IGZpbmQgYWxsIHRob3NlIGRlY2xhcmF0aW9ucy4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyBmb3IgdGhpcyAtIHByb2JhYmx5IGEgY29tYmluYXRpb24gb2YgYGZpbmRgIGFuZCBgZ3JlcGAsIG9yIHBlcmhhcHMgYSBtb3JlIHNvcGhpc3RpY2F0ZWQgdG9vbCBpZiB0aGUgY29kZWJhc2UgaXMgcGFydGljdWxhcmx5IGNvbXBsZXguIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODk3LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6MjI6MTYuMzczNjM1NDc0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTYyMjQ3OTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRklPX0FQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9LY29uZmlnPTgzNT1jb25maWcgVkZJT19DQ1dcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTg0NS1cXG5hcmNoL3MzOTAvS2NvbmZpZzo4NDY6Y29uZmlnIFZGSU9fQVBcXG5hcmNoL3MzOTAvS2NvbmZpZy04NDctXFx0ZGVmX3RyaXN0YXRlIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6MjI6MTguMzM1ODkyODI4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjU5MDAzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIHMzOTAgQXJjaGl0ZWN0dXJlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBJIHJlbWVtYmVyIGBLY29uZmlnYCBmaWxlcyBhcmUgdGhlIHBsYWNlIHRvIGJlLiBMZXQncyBzZWUuLi4gSSdtIHRoaW5raW5nIHRoZSByZWxldmFudCBzZWN0aW9uIGlzIHByb2JhYmx5IGFyb3VuZCBsaW5lIDg0NiBvZiBgYXJjaC9zMzkwL0tjb25maWdgLiBUaGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIHNldHRpbmdzIHJlbGF0ZWQgdG8gd2hhdGV2ZXIgSSdtIGludmVzdGlnYXRpbmcgYXJlIGRlZmluZWQuIExldCdzIGdldCB0byBpdC4gVGltZSB0byBzdGFydCB0aGUgZGVlcCBkaXZlIGludG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTkwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6MjI6MjAuNDAxNzk2MjY1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvczM5MC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg0MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg0MDpcXHRcXHRoZWxwXFxuIDg0MTpcXHRcXHQgIFRoaXMgZHJpdmVyIGFsbG93cyB1c2FnZSBvZiBJL08gc3ViY2hhbm5lbHMgdmlhIFZGSU8tQ0NXLlxcbiA4NDI6XFx0XFxuIDg0MzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA4NDQ6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdmZpb19jY3cuXFxuIDg0NTpcXHRcXG4gODQ2OlxcdGNvbmZpZyBWRklPX0FQXFxuIDg0NzpcXHRcXHRkZWZfdHJpc3RhdGUgblxcbiA4NDg6XFx0XFx0cHJvbXB0IFxcXCJWRklPIHN1cHBvcnQgZm9yIEFQIGRldmljZXNcXFwiXFxuIDg0OTpcXHRcXHRkZXBlbmRzIG9uIEtWTVxcbiA4NTA6XFx0XFx0ZGVwZW5kcyBvbiBWRklPXFxuIDg1MTpcXHRcXHRkZXBlbmRzIG9uIEFQXFxuIDg1MjpcXHRcXHRzZWxlY3QgVkZJT19NREVWXFxuIDg1MzpcXHRcXHRoZWxwXFxuIDg1NDpcXHRcXHQgIFRoaXMgZHJpdmVyIGdyYW50cyBhY2Nlc3MgdG8gQWRqdW5jdCBQcm9jZXNzb3IgKEFQKSBkZXZpY2VzXFxuIDg1NTpcXHRcXHQgIHZpYSB0aGUgVkZJTyBtZWRpYXRlZCBkZXZpY2UgaW50ZXJmYWNlLlxcbiA4NTY6XFx0XFxuIDg1NzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gODU4OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgdmZpb19hcC5cXG4gODU5OlxcdFxcbiA4NjA6XFx0ZW5kbWVudVxcbiA4NjE6XFx0XFxuIDg2MjpcXHRjb25maWcgQ0NXXFxuIDg2MzpcXHRcXHRkZWZfYm9vbCB5XFxuIDg2NDpcXHRcXG4gODY1OlxcdGNvbmZpZyBIQVZFX1BORVRJRFxcbiA4NjY6XFx0XFx0dHJpc3RhdGVcXG4gODY3OlxcdFxcdGRlZmF1bHQgKFNNQyB8fCBDQ1dHUk9VUClcXG4gODY4OlxcdFxcbiA4Njk6XFx0bWVudSBcXFwiVmlydHVhbGl6YXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjIyOjIwLjQwMTg5Mzc4NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjA1MTk2Mzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlZGSU9fQVAgUGF0Y2ggQXNzZXNzbWVudCBmb3IgYW1kNjQgQXJjaGl0ZWN0dXJlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBwcm9iYWJseSAqbm90KiBmdXp6YWJsZSBmb3IgbXkgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgYW1kNjQuIExldCdzIHNlZS4uLiB0aGUgYFZGSU9fQVBgIHN5bWJvbCBpcyBkZWZpbmVkIHdpdGhpbiBgYXJjaC9zMzkwL0tjb25maWdgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBzMzkwLXNwZWNpZmljLiBUaGUgd2hvbGUgdGhpbmcgaXMgd2l0aGluIHRoZSBcIkkvTyBzdWJzeXN0ZW1cIiBtZW51IGluIGBhcmNoL3MzOTBgLCB0aGF0J3MgYSByZWQgZmxhZy5cblxuTm93LCBJIG5lZWQgdG8gYXBwbHkgdGhlIHJ1bGVzLiBTcGVjaWZpY2FsbHksIHRoZSBcIk5FR0FUSVZFIENSSVRFUklBXCIgc2VjdGlvbi4gVGhlIHJ1bGUgSSBuZWVkIHRvIGZvY3VzIG9uIGhlcmUgaXMgXCJVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6ICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlwiIFBlcmZlY3QuXG5cbkxldCdzIHNlZSB3aGF0IGZpbGVzIGFyZSBjaGFuZ2VkLiBBaCwgaXQgbG9va3MgbGlrZSBgZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jYCBhbmQgYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmhgLiBCb3RoIHJpZ2h0IGluIGBkcml2ZXJzL3MzOTAvYCwgZXhhY3RseSB3aGVyZSBJIHdvdWxkIGV4cGVjdC4gVGhleSdyZSBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19WRklPX0FQYCBpcyBzZXQsIHdoaWNoIHdlIGtub3cgaXMgZGVmaW5lZCBpbiBgYXJjaC9zMzkwL0tjb25maWdgIGFuZCBkZXBlbmRzIG9uIHMzOTAgYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIGFsbCBzY3JlYW1pbmcgczM5MC4gSSdtIG9uIGFtZDY0LiBcblxuVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSAqaXMqIGV4Y2x1c2l2ZSB0byBzMzkwIGFuZCBkZWZpbml0ZWx5IHVucmVhY2hhYmxlIG9uIGFtZDY0LiBObyBpZnMsIGFuZHMsIG9yIGJ1dHMuXG5cblRpbWUgZm9yIHRoZSBgc2V0LXJlc3VsdHNgIHNhbml0eSBjaGVjay4gTGV0J3Mgc2VlLi4uXG5cbi0gICBgV29ydGhGdXp6aW5nYDogZmFsc2UgLSBZZXAsIGNoZWNrLlxuLSAgIGBSZWFzb25pbmdgOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgczM5MCBWRklPIEFQIChBZGp1bmN0IFByb2Nlc3NvcikgZHJpdmVyIChgZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jYCBhbmQgYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmhgKSwgd2hpY2ggaXMgZXhjbHVzaXZlIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSAoQ09ORklHX1ZGSU9fQVApIGFuZCBub3QgY29tcGlsZWQgb3IgcmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuXCIgLSBTcG90IG9uLCBleHBsYWlucyBpdCBwZXJmZWN0bHkuXG4tICAgYEZvY3VzU3ltYm9sc2A6IFtdIC0gQ29ycmVjdCwgbm90aGluZyB0byBmb2N1cyBvbi5cbi0gICBgRW5hYmxlQ29uZmlnc2A6IFtdIC0gQWxsIGdvb2QuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC4gXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NzY1LCJPdXRwdXRUb2tlbnMiOjkxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6MjI6MjUuMDA3MDkzOTcxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHMzOTAgVkZJTyBBUCAoQWRqdW5jdCBQcm9jZXNzb3IpIGRyaXZlciBpbiBkcml2ZXJzL3MzOTAvY3J5cHRvLywgd2hpY2ggaXMgZXhjbHVzaXZlIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSAoQ09ORklHX1ZGSU9fQVApIGFuZCBpcyBuZWl0aGVyIGNvbXBpbGVkIG5vciByZWFjaGFibGUgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzMzkwIFZGSU8gQVAgKEFkanVuY3QgUHJvY2Vzc29yKSBkcml2ZXIgaW4gZHJpdmVycy9zMzkwL2NyeXB0by8sIHdoaWNoIGlzIGV4Y2x1c2l2ZSB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUgKENPTkZJR19WRklPX0FQKSBhbmQgaXMgbmVpdGhlciBjb21waWxlZCBub3IgcmVhY2hhYmxlIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODoyMjoyNS4wMDcxMjMzMjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowrxgjm[1] Phase: Running StartedAt: 2026-09-05 18:22:36 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrxgjm[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-05 18:22:36 +0000 UTC FinishedAt: 2026-09-05 18:22:41 +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,}