Name: series-workflowkvr4x Phase: Failed StartedAt: 2026-08-19 07:44:13 +0000 UTC FinishedAt: 2026-08-19 07:59:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvr4x[0] Phase: Succeeded StartedAt: 2026-08-19 07:44:13 +0000 UTC FinishedAt: 2026-08-19 07:59:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvr4x[0].run-triage Phase: Succeeded StartedAt: 2026-08-19 07:44:13 +0000 UTC FinishedAt: 2026-08-19 07:59:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA3OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJlYWx0ZWsgcnR3ODggV2ktRmkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYWRkaW5nIHN1cHBvcnQgYW5kIGZpeGluZyBsb2dpYyBmb3IgdGhlIFJUTDg3MjNCUyBTRElPIG1vZHVsZS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBhIHBoeXNpY2FsIFNESU8gV2ktRmkgY2hpcCB0byBiZSBwcmVzZW50LiBTaW5jZSBTRElPIGhhcmR3YXJlIGFuZCB0aGlzIHNwZWNpZmljIFJlYWx0ZWsgY2hpcCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cywgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRiNmRhYjE0MDI2YmVlOTA3Zjc4OGFhNWU1YWQ4OGM2ZDYyYjVmZWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwNzo1ODo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG5pbmRleCBjNmU5ODFiYTc5ODY4Li44Zjg2ZjdjMTJkZTVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG5AQCAtMTk0LDYgJiM0MzsxOTQsNyBAQCBlbnVtIHJ0d19jaGlwX3R5cGUge1xuIFx0UlRXX0NISVBfVFlQRV84NzIzRCxcbiBcdFJUV19DSElQX1RZUEVfODgyMUMsXG4gXHRSVFdfQ0hJUF9UWVBFXzg3MDNCLFxuJiM0MztcdFJUV19DSElQX1RZUEVfODcyM0IsXG4gXHRSVFdfQ0hJUF9UWVBFXzg4MjFBLFxuIFx0UlRXX0NISVBfVFlQRV84ODEyQSxcbiBcdFJUV19DSElQX1RZUEVfODgxNEEsXG5AQCAtMjE5NCw2ICYjNDM7MjE5NSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2NoaXBfaGFzX3R4X3N0YmMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHJldHVybiBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2V0eF9zdGJjO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHJ0d19pc184NzIzYnMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MjNCIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU87XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1OCBydHdfYWNxdWlyZV9tYWNpZChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbWFjX2lkO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuaW5kZXggMDFmZDI5OWFiYjdmZS4uZmRlMjFjODQwYWMwMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXG5AQCAtMjUzLDEwICYjNDM7MjUzLDEyIEBAIHN0YXRpYyB2b2lkIHJ0d19yeF9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFxuIFx0cnR3X3J4X2FkZHJfbWF0Y2gocnR3ZGV2LCBwa3Rfc3RhdCwgaGRyKTtcbiBcbi1cdC8qIFJ0bDg3MjNjcyBkcml2ZXIgY2hlY2tzIGZvciBzaXplIFx1MDAzYyAxNCBvciBzaXplIFx1MDAzZSA4MTkyIGFuZFxuLVx0ICogc2ltcGx5IGRyb3BzIHRoZSBwYWNrZXQuXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSdGw4NzIzY3MgYW5kIHJ0bDg3MjNicyBkcml2ZXJzIGNoZWNrIGZvciBzaXplIFx1MDAzYyAxNCBvciBzaXplIFx1MDAzZSA4MTkyXG4mIzQzO1x0ICogYW5kIHNpbXBseSBkcm9wIHRoZSBwYWNrZXQuXG4gXHQgKi9cbi1cdGlmIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIFx1MDAyNlx1MDAyNiBwa3Rfc3RhdC1cdTAwM2Vwa3RfbGVuID09IDApIHtcbiYjNDM7XHRpZiAocGt0X3N0YXQtXHUwMDNlcGt0X2xlbiA9PSAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzAzQiB8fCBydHdfaXNfODcyM2JzKHJ0d2RldikpKSB7XG4gXHRcdHJ4X3N0YXR1cy1cdTAwM2VmbGFnIHw9IFJYX0ZMQUdfTk9fUFNEVTtcbiBcdFx0cnR3X2RiZyhydHdkZXYsIFJUV19EQkdfUlgsIFwmIzM0O3plcm8gbGVuZ3RoIHBhY2tldFwmIzM0Oyk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xuaW5kZXggNWI0MGQ3NGIxNmVlMC4uZTViZjljYmEwNzFlYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xuQEAgLTIwLDYgJiM0MzsyMCwxNyBAQFxuICNpbmNsdWRlIFwmIzM0O3R4LmhcJiMzNDtcbiBcbiAjZGVmaW5lIFJUV19TRElPX0lORElSRUNUX1JXX1JFVFJJRVNcdFx0XHQ1MFxuJiM0MzsjZGVmaW5lIFJUV19TRElPX09RVF9USU1FT1VUX01TXHRcdFx0XHQxMDAwXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiA4NzIzQlMgU0RJTyBUWCBGSUZPIGJhY2stcHJlc3N1cmUgd2F0ZXJtYXJrczogc3RvcCB0aGUgbWFjODAyMTEgcXVldWUgb25jZVxuJiM0MzsgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlXG4mIzQzOyAqIFRYIGRyYWluIHBhdGggb25jZSBpdCBmYWxscyBiYWNrIHRvIHRoZSBsb3cgb25lLiBCb3VuZHMgdGhlIHF1ZXVlaW5nIGxhdGVuY3lcbiYjNDM7ICogdGhhdCBvdGhlcndpc2UgY2F1c2VzIHVwbGluayBidWZmZXJibG9hdCAvIGNvbmdlc3Rpb24gY29sbGFwc2UuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fSElXQVRFUlx0XHRcdDE2XG4mIzQzOyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSXHRcdFx0OFxuJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZXHRcdFx0bXNlY3NfdG9famlmZmllcygxKVxuIFxuIHN0YXRpYyBib29sIHJ0d19zZGlvX2lzX2J1c19hZGRyKHUzMiBhZGRyKVxuIHtcbkBAIC01NDgsMTIgJiM0Mzs1NTksMTU3IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fcmVhZF9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4ICpidWYsIHNpemVfdCBjb3VudClcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgY2FjaGVkIGZyZWUgcGFnZSBjb3VudGVycyBhcmUgYSBmYXN0IHBhdGggaGludCBvbmx5LiBUaGV5IGFyZSB3cml0dGVuXG4mIzQzOyAqIGZyb20gdGhlIHNpbmdsZSB0aHJlYWRlZCBUWCB3b3JrIGFuZCwgZm9yIEgyQyBhbmQgcmVzZXJ2ZWQgcGFnZSB3cml0ZXMsXG4mIzQzOyAqIGZyb20gcHJvY2VzcyBjb250ZXh0LCBzbyB0aGV5IGFyZSBhdG9taWNfdDsgd2hlbmV2ZXIgdGhleSBjbGFpbSB0aGVyZSBpc1xuJiM0MzsgKiBub3QgZW5vdWdoIHJvb20gdGhleSBhcmUgcmVzeW5jaHJvbmlzZWQgZnJvbSB0aGUgY2hpcCBiZWZvcmUgdGhlIGNhbGxlclxuJiM0MzsgKiBnaXZlcyB1cCwgd2hpY2ggYWxzbyBhYnNvcmJzIGEgbG9zdCB1cGRhdGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3RvcmVfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgdTMyIGZyZWVfdHhwZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaCxcbiYjNDM7XHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfSElHSCkpO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbCxcbiYjNDM7XHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfTk9STUFMKSk7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93LFxuJiM0MztcdFx0ICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19MT1cpKTtcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIsXG4mIzQzO1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX1BVQikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZWZyZXNoIHRoZSBjYWNoZWQgY291bnRlcnMgZnJvbSB0aGUgY2hpcC4gUmV0dXJucyBmYWxzZSB3aGVuIHRoZSBjaGlwXG4mIzQzOyAqIHJlcG9ydHMgbm8gZnJlZSBwYWdlcyBhdCBhbGwsIHdoaWNoIG1lYW5zIHRoZSBjb3VudHMgY2Fubm90IGJlIHRydXN0ZWRcbiYjNDM7ICogYW5kIHRoZSBjYWxsZXIgaGFzIHRvIGRlY2lkZSB3aGF0IHRvIGRvIGluc3RlYWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBydHdfc2Rpb184NzIzYnNfc3luY19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHUzMiBmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFmcmVlX3R4cGcpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcocnR3ZGV2LCBmcmVlX3R4cGcpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogU2l6ZSBvZiB0aGUgcHVibGljIHBhZ2UgcG9vbDogd2hhdGV2ZXIgdGhlIHRyYW5zbWl0IHBhZ2UgYWxsb2NhdGlvbiBoYXNcbiYjNDM7ICogbGVmdCBvbmNlIHRoZSBwZXIgcXVldWUgcG9vbHMgYXJlIHRha2VuIG91dC4gRmFpbHMgaWYgdGhlIGFsbG9jYXRpb25cbiYjNDM7ICogY2Fubm90IGNvdmVyIHRoZSByZXNlcnZlZCBxdWV1ZXMsIHNpbmNlIHRoZSByZW1haW5kZXIgd291bGQgdW5kZXJmbG93IGFuZFxuJiM0MzsgKiB0aGVyZSB3b3VsZCBiZSBubyBzZW5zaWJsZSBwb29sIHRvIGhhbmQgb3V0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBydHdfc2Rpb184NzIzYnNfcHVicV9udW0oc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTE2ICpwdWJxX251bSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsID0gXHUwMDI2cnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlcGFnZV90YWJsZVswXTtcbiYjNDM7XHR1MTYgYWNxX3BnX251bSA9IHJ0d2Rldi1cdTAwM2VmaWZvLmFjcV9wZ19udW07XG4mIzQzO1x0dTE2IHJlc2VydmVkX251bTtcbiYjNDM7XG4mIzQzO1x0cmVzZXJ2ZWRfbnVtID0gcGdfdGJsLVx1MDAzZWhxX251bSAmIzQzOyBwZ190YmwtXHUwMDNlbHFfbnVtICYjNDM7IHBnX3RibC1cdTAwM2VucV9udW0gJiM0MztcbiYjNDM7XHRcdCAgICAgICBwZ190YmwtXHUwMDNlZXhxX251bSAmIzQzOyBwZ190YmwtXHUwMDNlZ2FwcV9udW07XG4mIzQzO1x0aWYgKGFjcV9wZ19udW0gXHUwMDNjPSByZXNlcnZlZF9udW0pIHtcbiYjNDM7XHRcdHJ0d19lcnIocnR3ZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtubyB0cmFuc21pdCBwYWdlcyBsZWZ0IGZvciB0aGUgcHVibGljIHF1ZXVlOiAldSBvZiAldSByZXNlcnZlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cmVzZXJ2ZWRfbnVtLCBhY3FfcGdfbnVtKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0KnB1YnFfbnVtID0gYWNxX3BnX251bSAtIHJlc2VydmVkX251bTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX2luaXRfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190Ymw7XG4mIzQzO1x0dTE2IHB1YnFfbnVtO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIFNlZWQgZnJvbSB0aGUgcGFnZSB0YWJsZSB3aGVuIHRoZSBjaGlwIGhhcyBub3RoaW5nIHRvIHJlcG9ydCB5ZXQuICovXG4mIzQzO1x0aWYgKCFydHdfc2Rpb184NzIzYnNfc3luY19mcmVlX3R4cGcocnR3ZGV2KSkge1xuJiM0MztcdFx0cmV0ID0gcnR3X3NkaW9fODcyM2JzX3B1YnFfbnVtKHJ0d2RldiwgXHUwMDI2cHVicV9udW0pO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRwZ190YmwgPSBcdTAwMjZydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3RhYmxlWzBdO1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaCwgcGdfdGJsLVx1MDAzZWhxX251bSk7XG4mIzQzO1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19ub3JtYWwsIHBnX3RibC1cdTAwM2VucV9udW0pO1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93LCBwZ190YmwtXHUwMDNlbHFfbnVtKTtcbiYjNDM7XHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1YiwgcHVicV9udW0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLFxuJiM0MztcdFx0ICAgcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFN1bSBvZiB0aGUgcXVldWUmIzM5O3MgZGVkaWNhdGVkIGNvdW50ZXIgYW5kIHRoZSBwdWJsaWMgcG9vbCwgY2xhbXBlZCBhdCB6ZXJvOlxuJiM0MzsgKiBhIGxvc3QgdXBkYXRlIGJldHdlZW4gdGhlIGNoZWNrIGJlbG93IGFuZCBydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKClcbiYjNDM7ICogY2FuIGJyaWVmbHkgZHJpdmUgYSBjb3VudGVyIG5lZ2F0aXZlLCBhbmQgbGV0dGluZyB0aGF0IHdyYXAgd291bGQgaGlkZSB0aGVcbiYjNDM7ICogc2hvcnRhZ2UgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIGEgcmVzeW5jIGZyb20gdGhlIGNoaXAuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgYXRvbWljX3QgKmRlZGljYXRlZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgZnJlZTtcbiYjNDM7XG4mIzQzO1x0ZnJlZSA9IGF0b21pY19yZWFkKGRlZGljYXRlZCkgJiM0MzsgYXRvbWljX3JlYWQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1Yik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmcmVlIFx1MDAzZSAwID8gZnJlZSA6IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBhdG9taWNfdCAqcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChxdWV1ZSkge1xuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX1ZJOlxuJiM0MztcdFx0cmV0dXJuIFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19ub3JtYWw7XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfQkU6XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfQks6XG4mIzQzO1x0XHRyZXR1cm4gXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2xvdztcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9CQ046XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfSDJDOlxuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX0hJMDpcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9NR01UOlxuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX1ZPOlxuJiM0MztcdFx0cmV0dXJuIFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19oaWdoO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXG4gXHRcdFx0XHQgICAgc2l6ZV90IGNvdW50KVxuIHtcbiBcdHVuc2lnbmVkIGludCBwYWdlc19mcmVlLCBwYWdlc19uZWVkZWQ7XG4gXG4tXHRpZiAocnR3X2NoaXBfd2NwdV84MDUxKHJ0d2RldikpIHtcbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XG4mIzQzO1x0XHRhdG9taWNfdCAqZGVkaWNhdGVkO1xuJiM0MztcbiYjNDM7XHRcdGRlZGljYXRlZCA9IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSk7XG4mIzQzO1x0XHRpZiAoIWRlZGljYXRlZCkge1xuJiM0MztcdFx0XHRydHdfd2FybihydHdkZXYsIFwmIzM0O1Vua25vd24gbWFwcGluZyBmb3IgcXVldWUgJXVcXG5cJiMzNDssIHF1ZXVlKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cGFnZXNfZnJlZSA9IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHJ0d2RldiwgZGVkaWNhdGVkKTtcbiYjNDM7XHRcdHBhZ2VzX25lZWRlZCA9IERJVl9ST1VORF9VUChjb3VudCwgcnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlcGFnZV9zaXplKTtcbiYjNDM7XHRcdGlmIChwYWdlc19uZWVkZWQgXHUwMDNjPSBwYWdlc19mcmVlKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0XHRydHdfc2Rpb184NzIzYnNfc3luY19mcmVlX3R4cGcocnR3ZGV2KTtcbiYjNDM7XHRcdHBhZ2VzX2ZyZWUgPSBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShydHdkZXYsIGRlZGljYXRlZCk7XG4mIzQzO1x0fSBlbHNlIGlmIChydHdfY2hpcF93Y3B1XzgwNTEocnR3ZGV2KSkge1xuIFx0XHR1MzIgZnJlZV90eHBnO1xuIFxuIFx0XHRmcmVlX3R4cGcgPSBydHdfc2Rpb19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xuQEAgLTYzMiw0NCAmIzQzOzc4OCwxMjQgQEAgc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBkZWFkbGluZTtcbiYjNDM7XHR1OCBmcmVlO1xuJiM0MztcbiYjNDM7XHRpZiAoYXRvbWljX2FkZF91bmxlc3MoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9vcXRfZnJlZSwgLTEsIDApKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGRlYWRsaW5lID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKFJUV19TRElPX09RVF9USU1FT1VUX01TKTtcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRmcmVlID0gcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpO1xuJiM0MztcdFx0aWYgKGZyZWUpIHtcbiYjNDM7XHRcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCBmcmVlIC0gMSk7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuJiM0MztcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlYWRsaW5lKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRUJVU1k7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXG4mIzQzO1x0XHRcdFx0XHQgdW5zaWduZWQgaW50IHBhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdGF0b21pY190ICpkZWRpY2F0ZWQ7XG4mIzQzO1x0dW5zaWduZWQgaW50IHRha2VuO1xuJiM0MztcdGludCBmcmVlO1xuJiM0MztcbiYjNDM7XHRkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xuJiM0MztcdGlmICghZGVkaWNhdGVkKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKTtcbiYjNDM7XHR0YWtlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgcGFnZXMsIGZyZWUgXHUwMDNlIDAgPyBmcmVlIDogMCk7XG4mIzQzO1x0YXRvbWljX3N1Yih0YWtlbiwgZGVkaWNhdGVkKTtcbiYjNDM7XG4mIzQzO1x0cGFnZXMgLT0gdGFrZW47XG4mIzQzO1x0aWYgKHBhZ2VzIFx1MDAyNlx1MDAyNiBhdG9taWNfc3ViX3JldHVybihwYWdlcywgXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1YikgXHUwMDNjIDApXG4mIzQzO1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIsIDApO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgcnR3X3NkaW9fd3JpdGVfcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRib29sIHJ0bDg3MjNicyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb3JpZ19sZW4gPSBza2ItXHUwMDNlbGVuO1xuJiM0MztcdHVuc2lnbmVkIGludCBwYWdlcztcbiYjNDM7XHRzaXplX3Qgd3JpdGVfc2l6ZTtcbiBcdGJvb2wgYnVzX2NsYWltO1xuIFx0c2l6ZV90IHR4c2l6ZTtcbiBcdHUzMiB0eGFkZHI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0dHhhZGRyID0gcnR3X3NkaW9fZ2V0X3R4X2FkZHIocnR3ZGV2LCBza2ItXHUwMDNlbGVuLCBxdWV1ZSk7XG4tXHRpZiAoIXR4YWRkcilcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKHJ0bDg3MjNicykge1xuJiM0MztcdFx0dHhzaXplID0gcm91bmRfdXAob3JpZ19sZW4sIDQpO1xuJiM0MztcdFx0d3JpdGVfc2l6ZSA9IHR4c2l6ZSBcdTAwM2UgUlRXX1NESU9fQkxPQ0tfU0laRSA/XG4mIzQzO1x0XHRcdCAgICAgcm91bmRfdXAodHhzaXplLCBSVFdfU0RJT19CTE9DS19TSVpFKSA6IHR4c2l6ZTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0dHhzaXplID0gc2Rpb19hbGlnbl9zaXplKHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jLCBvcmlnX2xlbik7XG4mIzQzO1x0XHR3cml0ZV9zaXplID0gdHhzaXplO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHdyaXRlX3NpemUgXHUwMDNlIG9yaWdfbGVuKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgcGFkZGluZyA9IHdyaXRlX3NpemUgLSBvcmlnX2xlbjtcbiBcbi1cdHR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgc2tiLVx1MDAzZWxlbik7XG4mIzQzO1x0XHRpZiAoc2tiX3RhaWxyb29tKHNrYikgXHUwMDNjIHBhZGRpbmcpIHtcbiYjNDM7XHRcdFx0cmV0ID0gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgcGFkZGluZyAtIHNrYl90YWlscm9vbShza2IpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRza2JfcHV0X3plcm8oc2tiLCBwYWRkaW5nKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHR4YWRkciA9IHJ0d19zZGlvX2dldF90eF9hZGRyKHJ0d2RldiwgdHhzaXplLCBxdWV1ZSk7XG4mIzQzO1x0aWYgKCF0eGFkZHIpIHtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIG91dF90cmltO1xuJiM0MztcdH1cbiBcbiBcdHJldCA9IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlLCB0eHNpemUpO1xuIFx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGdvdG8gb3V0X3RyaW07XG4mIzQzO1xuJiM0MztcdGlmIChydGw4NzIzYnMpIHtcbiYjNDM7XHRcdHJldCA9IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChydHdkZXYpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byBvdXRfdHJpbTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpc2tiLVx1MDAzZWRhdGEsIFJUV19TRElPX0RBVEFfUFRSX0FMSUdOKSlcbiBcdFx0cnR3X3dhcm4ocnR3ZGV2LCBcJiMzNDtHb3QgdW5hbGlnbmVkIFNLQiBpbiAlcygpIGZvciBxdWV1ZSAldVxcblwmIzM0OyxcbiBcdFx0XHQgX19mdW5jX18sIHF1ZXVlKTtcbiBcbiBcdGJ1c19jbGFpbSA9IHJ0d19zZGlvX2J1c19jbGFpbV9uZWVkZWQocnR3c2Rpbyk7XG4tXG4gXHRpZiAoYnVzX2NsYWltKVxuIFx0XHRzZGlvX2NsYWltX2hvc3QocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMpO1xuLVxuLVx0cmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgdHhhZGRyLCBza2ItXHUwMDNlZGF0YSwgdHhzaXplKTtcbi1cbiYjNDM7XHRyZXQgPSBzZGlvX21lbWNweV90b2lvKHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cdTAwM2VkYXRhLFxuJiM0MztcdFx0XHQgICAgICAgd3JpdGVfc2l6ZSk7XG4gXHRpZiAoYnVzX2NsYWltKVxuIFx0XHRzZGlvX3JlbGVhc2VfaG9zdChydHdzZGlvLVx1MDAzZXNkaW9fZnVuYyk7XG4gXG4tXHRpZiAocmV0KVxuJiM0MztcdGlmIChyZXQpIHtcbiBcdFx0cnR3X3dhcm4ocnR3ZGV2LFxuIFx0XHRcdCBcJiMzNDtGYWlsZWQgdG8gd3JpdGUgJXp1IGJ5dGUocykgdG8gU0RJTyBwb3J0IDB4JTA4eFwmIzM0Oyxcbi1cdFx0XHQgdHhzaXplLCB0eGFkZHIpO1xuJiM0MztcdFx0XHQgd3JpdGVfc2l6ZSwgdHhhZGRyKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHJ0bDg3MjNicykge1xuJiM0MztcdFx0cGFnZXMgPSBESVZfUk9VTkRfVVAodHhzaXplLCBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3NpemUpO1xuJiM0MztcdFx0cnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhydHdkZXYsIHF1ZXVlLCBwYWdlcyk7XG4mIzQzO1x0fVxuIFxuJiM0MztvdXRfdHJpbTpcbiYjNDM7XHRpZiAod3JpdGVfc2l6ZSBcdTAwM2Ugb3JpZ19sZW4pXG4mIzQzO1x0XHRza2JfdHJpbShza2IsIG9yaWdfbGVuKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTY3Nyw3ICYjNDM7OTEzLDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luaXQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXG4tXHRydHdzZGlvLVx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUIHwgUkVHX1NESU9fSElNUl9DUFdNMTtcbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxuJiM0MztcdFx0cnR3c2Rpby1cdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUIHxcbiYjNDM7XHRcdFx0XHQgICAgUkVHX1NESU9fSElNUl9DUFdNMTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG5AQCAtNjg1LDYgJiM0Mzs5MjUsNyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHU4IHNpemUsIHRpbWVvdXQ7XG4gXG4gXHRzd2l0Y2ggKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkKSB7XG4mIzQzO1x0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg3MjNCOlxuIFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg3MDNCOlxuIFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg4MjFBOlxuIFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg4MTJBOlxuQEAgLTcxMiw2ICYjNDM7OTUzLDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRcdCAgICBGSUVMRF9QUkVQKEJJVF9ETUFfQUdHX1RPX1YxLCB0aW1lb3V0KSk7XG4gXG4gXHRydHdfd3JpdGU4X3NldChydHdkZXYsIFJFR19SWERNQV9NT0RFLCBCSVRfRE1BX01PREUpO1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4mIzQzO1x0XHRydHdfd3JpdGU4X21hc2socnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgQklUX0RNQV9CVVJTVF9DTlQsIDB4Myk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbkBAIC03NDksOSAmIzQzOzk5Miw2MSBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3NldHVwKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJlcHJvZ3JhbSB0aGUgcXVldWUgcGFnZSBhbGxvY2F0aW9uIGlmIHRoZSBjaGlwIGNhbWUgdXAgd2l0aCBub25lLiBUaGlzIGlzXG4mIzQzOyAqIGEgcmVwYWlyIHBhdGgsIG5vdCBwYXJ0IG9mIHRoZSBub3JtYWwgc3RhcnQgc2VxdWVuY2U6IGEgbm9uLXplcm8gZnJlZSBwYWdlXG4mIzQzOyAqIGNvdW50IG1lYW5zIHRoZSBhbGxvY2F0aW9uIGxhdGNoZWQgZHVyaW5nIHBvd2VyIG9uIGFuZCBtdXN0IGJlIGxlZnQgYWxvbmUsXG4mIzQzOyAqIGFuZCB3aXRob3V0IGEgdHJhbnNtaXQgcGFnZSBwb29sIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGl2aWRlIHVwIGVpdGhlci5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHdfY2hpcF9pbmZvICpjaGlwID0gcnR3ZGV2LVx1MDAzZWNoaXA7XG4mIzQzO1x0c3RydWN0IHJ0d19maWZvX2NvbmYgKmZpZm8gPSBcdTAwMjZydHdkZXYtXHUwMDNlZmlmbztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcbiYjNDM7XHR1MzIgZnJlZV90eHBnO1xuJiM0MztcdHUxNiBwdWJxX251bTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbiYjNDM7XHRpZiAoZnJlZV90eHBnIHx8ICFmaWZvLVx1MDAzZWFjcV9wZ19udW0pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnR3X3NkaW9fODcyM2JzX3B1YnFfbnVtKHJ0d2RldiwgXHUwMDI2cHVicV9udW0pO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRwZ190YmwgPSBcdTAwMjZjaGlwLVx1MDAzZXBhZ2VfdGFibGVbMF07XG4mIzQzO1x0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUlFQTl9OUFEsXG4mIzQzO1x0XHQgICAgQklUX1JRUE5fTkUocGdfdGJsLVx1MDAzZW5xX251bSwgcGdfdGJsLVx1MDAzZWV4cV9udW0pKTtcbiYjNDM7XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOLFxuJiM0MztcdFx0ICAgIEJJVF9SUVBOX0hMUChwZ190YmwtXHUwMDNlaHFfbnVtLCBwZ190YmwtXHUwMDNlbHFfbnVtLCBwdWJxX251bSkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3N0YXJ0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuJiM0MztcdHUzMiBjbGVhcjtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xuJiM0MztcdFx0aW50IHJldCA9IHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHJ0d2Rldik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcocnR3ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihydHdkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XG4mIzQzO1x0XHRjbGVhciA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSKSBcdTAwMjYgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xuJiM0MztcdFx0aWYgKGNsZWFyKVxuJiM0MztcdFx0XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGNsZWFyKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChydHdkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtODE1LDcgJiM0MzsxMTEwLDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2tpY2tfb2ZmKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFxuLVx0cXVldWVfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsIFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmspO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSByZXRyeSBtYXkgYWxyZWFkeSBiZSBwZW5kaW5nIHdpdGggYSBkZWxheTsgcmUtYXJtIGl0IHNvIGEgbmV3bHlcbiYjNDM7XHQgKiBxdWV1ZWQgZnJhbWUgaXMgbm90IGhlbGQgYmFjayBieSBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtb2RfZGVsYXllZF93b3JrKHJ0d3NkaW8tXHUwMDNldHh3cSwgXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNld29yaywgMCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2xpbmtfcHMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgYm9vbCBlbnRlcilcbkBAIC04MzEsNiAmIzQzOzExMzAsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbnRlcmZhY2VfY2ZnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXG4gXHR2YWwgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fVFhfQ1RSTCk7XG4gXHR2YWwgXHUwMDI2PSAweGZmZjg7XG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiYjNDM7XHRcdHZhbCB8PSBCSVRfU0RJT19UWF9DVFJMX0FMV0FZU19SRUNPR05JWkU7XG4gXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwsIHZhbCk7XG4gfVxuIFxuQEAgLTkyMiw2ICYjNDM7MTIyMyw1MCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3dyaXRlX2RhdGFfaDJjKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4ICpidWYsIHUzMiBzaXplKVxuIFx0cmV0dXJuIHJ0d19zZGlvX3dyaXRlX2RhdGEocnR3ZGV2LCBcdTAwMjZwa3RfaW5mbywgc2tiLCBSVFdfVFhfUVVFVUVfSDJDKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEJhY2stcHJlc3N1cmUgb24gdGhlIGRhdGEgQUNzIChCSy9CRS9WSS9WTyk6IG9uY2UgdGhlIHNvZnR3YXJlIEZJRk8gZmlsbHNcbiYjNDM7ICogcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIHN0b3AgdGhlIGNvcnJlc3BvbmRpbmcgbWFjODAyMTEgcXVldWUgc28gaXQgc3RvcHNcbiYjNDM7ICogaGFuZGluZyBmcmFtZXMgZG93biwgd2hpY2ggYm91bmRzIHRoZSBxdWV1ZWluZyBsYXRlbmN5LiBUaGUgcXVldWUgaXMgd29rZW5cbiYjNDM7ICogYWdhaW4gZnJvbSB0aGUgVFggZHJhaW4gcGF0aCBvbmNlIHRoZSBGSUZPIGZhbGxzIGJhY2sgdG8gdGhlIGxvdyB3YXRlcm1hcmsuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3RvcF90eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlLFxuJiM0MztcdFx0XHRcdFx0ICB1MTYgcV9tYXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpIHx8IHF1ZXVlIFx1MDAzZT0gUlRXX1RYX1FVRVVFX0JDTilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ0d3NkaW8tXHUwMDNldHhfcXVldWVfc3RvcHBlZFtxdWV1ZV0pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChza2JfcXVldWVfbGVuKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdKSBcdTAwM2MgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRydHdzZGlvLVx1MDAzZXR4X3F1ZXVlX3N0b3BwZWRbcXVldWVdID0gdHJ1ZTtcbiYjNDM7XHRpZWVlODAyMTFfc3RvcF9xdWV1ZShydHdkZXYtXHUwMDNlaHcsIHFfbWFwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3dha2VfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSxcbiYjNDM7XHRcdFx0XHRcdCAgdTE2IHFfbWFwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fCBxdWV1ZSBcdTAwM2U9IFJUV19UWF9RVUVVRV9CQ04pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICghcnR3c2Rpby1cdTAwM2V0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzZSBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVIpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJ0d3NkaW8tXHUwMDNldHhfcXVldWVfc3RvcHBlZFtxdWV1ZV0gPSBmYWxzZTtcbiYjNDM7XHRpZWVlODAyMTFfd2FrZV9xdWV1ZShydHdkZXYtXHUwMDNlaHcsIHFfbWFwKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3R4X3dyaXRlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgcnR3X3R4X3BrdF9pbmZvICpwa3RfaW5mbyxcbiBcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXG5AQCAtOTM3LDYgJiM0MzsxMjgyLDggQEAgc3RhdGljIGludCBydHdfc2Rpb190eF93cml0ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFxuIFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4gXG4mIzQzO1x0cnR3X3NkaW9fODcyM2JzX3N0b3BfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xMDk1LDYgJiM0MzsxNDQyLDE0IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHNkaW9fZnVuYyAqc2Rpb19mdW5jKVxuIFx0XHRydHdfc2Rpb19yeF9pc3IocnR3ZGV2KTtcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJUTDg3MjNCUyBrZWVwcyByYWlzaW5nIHRoZSBpbnRlcnJ1cHQgYWZ0ZXIgcmVzdW1lIGlmIHVuZGVmaW5lZFxuJiM0MztcdCAqIHN0YXR1cyBiaXRzIGFyZSB3cml0dGVuIGJhY2ssIHNvIGFja25vd2xlZGdlIG9ubHkgdGhlIGJpdHMgdGhpc1xuJiM0MztcdCAqIGRyaXZlciBkZWZpbmVzLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiYjNDM7XHRcdGhpc3IgXHUwMDI2PSBSVFdfU0RJT19ISVNSX0NMRUFSX01BU0s7XG4mIzQzO1xuIFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBoaXNyKTtcbiBcbiBcdHJ0d3NkaW8tXHUwMDNlaXJxX3RocmVhZCA9IE5VTEw7XG5AQCAtMTIzMSwzMyAmIzQzOzE1ODYsODEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5kaWNhdGVfdHhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4gXHRpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldixcbi1cdFx0XHRcdCAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpXG4mIzQzOy8qXG4mIzQzOyAqIFNlbmQgb25lIGZyYW1lIGZyb20gQHF1ZXVlLiBSZXR1cm5zIDAgd2hlbiBhIGZyYW1lIHdhcyB3cml0dGVuLCAxIHdoZW4gdGhlXG4mIzQzOyAqIHF1ZXVlIHdhcyBlbXB0eSBhbmQgYSBuZWdhdGl2ZSBlcnJubyB3aGVuIHRoZSB3cml0ZSBmYWlsZWQsIGluIHdoaWNoIGNhc2VcbiYjNDM7ICogdGhlIGZyYW1lIGlzIHB1dCBiYWNrIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdHUxNiBxX21hcDtcbiBcdGludCByZXQ7XG4gXG4gXHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSk7XG4gXHRpZiAoIXNrYilcbi1cdFx0cmV0dXJuO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4gXG4mIzQzO1x0cV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiBcdHJldCA9IHJ0d19zZGlvX3dyaXRlX3BvcnQocnR3ZGV2LCBza2IsIHF1ZXVlKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0c2tiX3F1ZXVlX2hlYWQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4gXHRydHdfc2Rpb19pbmRpY2F0ZV90eF9zdGF0dXMocnR3ZGV2LCBza2IpO1xuJiM0MztcbiYjNDM7XHRydHdfc2Rpb184NzIzYnNfd2FrZV90eF9xdWV1ZShydHdkZXYsIHF1ZXVlLCBxX21hcCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEZWNpZGUgd2hldGhlciB0aGUgUlRMODcyM0JTIHdhbnRzIHRoZSBUWCB3b3JrIHRvIHJ1biBhZ2FpbiwgYW5kIGlmIHNvXG4mIzQzOyAqIGFycmFuZ2UgaXQgYW5kIHRlbGwgdGhlIGNhbGxlciB0byBzdG9wIGRyYWluaW5nLiBUd28gY2FzZXMgbmVlZCBpdC5cbiYjNDM7ICpcbiYjNDM7ICogQSB0cmFuc21pdCBwYWdlIG9yIG91dHB1dCBxdWV1ZSBzaG9ydGFnZSBhbmQgYSBmYWlsZWQgc2tiIGV4cGFuc2lvbiBhcmVcbiYjNDM7ICogdHJhbnNpZW50IGFuZCBsZWF2ZSB0aGUgZnJhbWUgcXVldWVkLCBzbyBjb21lIGJhY2sgZm9yIGl0IHNob3J0bHkuIFRoYXRcbiYjNDM7ICogbWF0dGVycyBvbmNlIHRoZSBtYWM4MDIxMSBxdWV1ZSBjYW4gYmUgc3RvcHBlZDogYSBzdG9wcGVkIHF1ZXVlIGlzIGhhbmRlZFxuJiM0MzsgKiBubyBmdXJ0aGVyIGZyYW1lcywgc28gbm90aGluZyBlbHNlIHdvdWxkIGtpY2sgdGhpcyB3b3JrIGl0ZW0gYW5kIHRoZSBhY2Nlc3NcbiYjNDM7ICogY2F0ZWdvcnkgd291bGQgc3RheSBzdG9wcGVkIGZvciBnb29kLiBUaGUgcmVtYWluaW5nIGVycm9ycyBhcmUgbG9nZ2VkIHdoZXJlXG4mIzQzOyAqIHRoZXkgaGFwcGVuIGFuZCBhcmUgbm90IHJldHJpZWQuXG4mIzQzOyAqXG4mIzQzOyAqIEFmdGVyIGEgbWFuYWdlbWVudCBmcmFtZSwgcmVzdGFydCBmcm9tIHRoZSBoaWdoZXN0IHByaW9yaXR5IHF1ZXVlIHNvIHRoZVxuJiM0MzsgKiBqb2luIHNlcXVlbmNlIGlzIG5vdCBoZWxkIHVwIGJlaGluZCBhIGRhdGEgYmFja2xvZy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIHJ0d19zZGlvXzg3MjNic19yZXNjaGVkdWxlX3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKndvcmtfZGF0YSxcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSwgaW50IHJldClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGRlbGF5O1xuJiM0MztcbiYjNDM7XHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldCA9PSAtRUJVU1kgfHwgcmV0ID09IC1FTk9NRU0pXG4mIzQzO1x0XHRkZWxheSA9IFJUV19TRElPX1RYX1JFVFJZX0RFTEFZO1xuJiM0MztcdGVsc2UgaWYgKHJldCA9PSAwIFx1MDAyNlx1MDAyNiBxdWV1ZSA9PSBSVFdfVFhfUVVFVUVfTUdNVClcbiYjNDM7XHRcdGRlbGF5ID0gMDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHF1ZXVlX2RlbGF5ZWRfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsIFx1MDAyNndvcmtfZGF0YS1cdTAwM2V3b3JrLCBkZWxheSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp3b3JrX2RhdGEgPVxuLVx0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSwgd29yayk7XG4mIzQzO1x0XHRjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLFxuJiM0MztcdFx0XHQgICAgIHdvcmspO1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvO1xuIFx0c3RydWN0IHJ0d19kZXYgKnJ0d2Rldjtcbi1cdGludCBsaW1pdCwgcXVldWU7XG4mIzQzO1x0aW50IGxpbWl0LCBxdWV1ZSwgcmV0O1xuIFxuIFx0cnR3ZGV2ID0gd29ya19kYXRhLVx1MDAzZXJ0d2RldjtcbiBcdHJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG5AQCAtMTI2Nyw3ICYjNDM7MTY3MCwxMyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcbiBcdGZvciAocXVldWUgPSBSVEtfTUFYX1RYX1FVRVVFX05VTSAtIDE7IHF1ZXVlIFx1MDAzZT0gMDsgcXVldWUtLSkge1xuIFx0XHRmb3IgKGxpbWl0ID0gMDsgbGltaXQgXHUwMDNjIDEwMDA7IGxpbWl0JiM0MzsmIzQzOykge1xuLVx0XHRcdHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XG4mIzQzO1x0XHRcdHJldCA9IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNlIDApXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAocnR3X3NkaW9fODcyM2JzX3Jlc2NoZWR1bGVfdHgocnR3ZGV2LCB3b3JrX2RhdGEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBxdWV1ZSwgcmV0KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4gXG4gXHRcdFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkpXG4gXHRcdFx0XHRicmVhaztcbkBAIC0xMjk0LDE0ICYjNDM7MTcwMywxNiBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2luaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtpXSk7XG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZXR4X3F1ZXVlX3N0b3BwZWRbaV0gPSBmYWxzZTtcbiYjNDM7XHR9XG4gXHRydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSA9IGttYWxsb2Nfb2JqKCpydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSk7XG4gXHRpZiAoIXJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKVxuIFx0XHRnb3RvIGVycl9kZXN0cm95X3dxO1xuIFxuIFx0cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNlcnR3ZGV2ID0gcnR3ZGV2O1xuLVx0SU5JVF9XT1JLKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xuJiM0MztcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMTMxNSw2ICYjNDM7MTcyNiw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2RlaW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmspO1xuIFx0ZGVzdHJveV93b3JrcXVldWUocnR3c2Rpby1cdTAwM2V0eHdxKTtcbiBcdGtmcmVlKHJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG5pbmRleCA0NTdlOGIwMjM4MGU1Li5jZWMzZGQxYzRiMmU2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG5AQCAtMjIsNiAmIzQzOzIyLDcgQEBcbiBcbiAvKiBTRElPIFR4IENvbnRyb2wgKi9cbiAjZGVmaW5lIFJFR19TRElPX1RYX0NUUkxcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDAwKVxuJiM0MzsjZGVmaW5lIEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRVx0QklUKDQpXG4gXG4gLypTRElPIHN0YXR1cyB0aW1lb3V0Ki9cbiAjZGVmaW5lIFJFR19TRElPX1RJTUVPVVRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDAyKVxuQEAgLTc3LDYgJiM0Mzs3OCwxNCBAQFxuIC8qIHRoZSBmb2xsb3dpbmcgdHdvIGFyZSBSVEw4MTg4IFNESU8gU3BlY2lmaWMgKi9cbiAjZGVmaW5lIFJFR19TRElPX0hJU1JfTUNVX0VSUlx0XHRcdEJJVCgyOClcbiAjZGVmaW5lIFJFR19TRElPX0hJU1JfVFNGX0JJVDMyX1RPR0dMRVx0XHRCSVQoMjkpXG4mIzQzOyNkZWZpbmUgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLXHRcdFxcXG4mIzQzO1x0KFJFR19TRElPX0hJU1JfVFhFUlIgfCBSRUdfU0RJT19ISVNSX1JYRVJSIHwgXFxcbiYjNDM7XHQgUkVHX1NESU9fSElTUl9UWEZPVlcgfCBSRUdfU0RJT19ISVNSX1JYRk9WVyB8IFxcXG4mIzQzO1x0IFJFR19TRElPX0hJU1JfVFhCQ05PSyB8IFJFR19TRElPX0hJU1JfVFhCQ05FUlIgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX0MySENNRCB8IFJFR19TRElPX0hJU1JfQ1BXTTEgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX0NQV00yIHwgUkVHX1NESU9fSElTUl9IU0lTUl9JTkQgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX0dUSU5UM19JTkQgfCBSRUdfU0RJT19ISVNSX0dUSU5UNF9JTkQgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX1BTVElNRU9VVCB8IFJFR19TRElPX0hJU1JfT0NQSU5UKVxuIFxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgKi9cbiAjZGVmaW5lIFJFR19TRElPX0hDUFdNXHRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDE5KVxuQEAgLTg2LDYgJiM0Mzs5NSwxMCBAQFxuICNkZWZpbmUgUkVHX1NESU9fT1FUX0ZSRUVfUEdcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDFFKVxuIC8qIEZyZWUgVHggQnVmZmVyIFBhZ2UgKi9cbiAjZGVmaW5lIFJFR19TRElPX0ZSRUVfVFhQR1x0XHRcdChTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMjApXG4mIzQzOyNkZWZpbmUgQklUX0ZSRUVfVFhQR19ISUdIXHRcdFx0R0VOTUFTSyg3LCAwKVxuJiM0MzsjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTk9STUFMXHRcdFx0R0VOTUFTSygxNSwgOClcbiYjNDM7I2RlZmluZSBCSVRfRlJFRV9UWFBHX0xPV1x0XHRcdEdFTk1BU0soMjMsIDE2KVxuJiM0MzsjZGVmaW5lIEJJVF9GUkVFX1RYUEdfUFVCXHRcdFx0R0VOTUFTSygzMSwgMjQpXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAxICovXG4gI2RlZmluZSBSRUdfU0RJT19IQ1BXTTFcdFx0XHRcdChTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMjQpXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAyICovXG5AQCAtMTQzLDcgJiM0MzsxNTYsNyBAQCBzdHJ1Y3QgcnR3X3NkaW9fdHhfZGF0YSB7XG4gfTtcbiBcbiBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhIHtcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuJiM0MztcdHN0cnVjdCBkZWxheWVkX3dvcmsgd29yaztcbiBcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XG4gfTtcbiBcbkBAIC0xNTksNiAmIzQzOzE3MiwxMyBAQCBzdHJ1Y3QgcnR3X3NkaW8ge1xuIFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnR4d3E7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp0eF9oYW5kbGVyX2RhdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcbiYjNDM7XHRib29sIHR4X3F1ZXVlX3N0b3BwZWRbUlRLX01BWF9UWF9RVUVVRV9OVU1dO1xuJiM0MztcbiYjNDM7XHRhdG9taWNfdCBmcmVlX3BnX2hpZ2g7XG4mIzQzO1x0YXRvbWljX3QgZnJlZV9wZ19ub3JtYWw7XG4mIzQzO1x0YXRvbWljX3QgZnJlZV9wZ19sb3c7XG4mIzQzO1x0YXRvbWljX3QgZnJlZV9wZ19wdWI7XG4mIzQzO1x0YXRvbWljX3QgdHhfb3F0X2ZyZWU7XG4gfTtcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcnR3X3NkaW9fcG1fb3BzO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguY1xuaW5kZXggODc4NmJiYjQyMWMyYi4uNGUxMTBhNDU3ZTcxZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jXG5AQCAtMjA4LDggJiM0MzsyMDgsOSBAQCB2b2lkIHJ0d190eF9yZXBvcnRfZW5xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBzbilcbiBcdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2dHhfcmVwb3J0LVx1MDAzZXF1ZXVlLCBza2IpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eF9yZXBvcnQtXHUwMDNlcV9sb2NrLCBmbGFncyk7XG4gXG4tXHRpZiAocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzRCBcdTAwMjZcdTAwMjZcbi1cdCAgICBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQilcbiYjNDM7XHRpZiAoKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0QgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQikgfHxcbiYjNDM7XHQgICAgcnR3X2lzXzg3MjNicyhydHdkZXYpKVxuIFx0XHR0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcygyNTAwKTtcbiBcbiBcdG1vZF90aW1lcihcdTAwMjZ0eF9yZXBvcnQtXHUwMDNlcHVyZ2VfdGltZXIsIGppZmZpZXMgJiM0MzsgdGltZW91dCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIHJ0dzg4IFdpLUZpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFkZGluZyBzdXBwb3J0IGFuZCBmaXhpbmcgbG9naWMgZm9yIHRoZSBSVEw4NzIzQlMgU0RJTyBtb2R1bGUuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgcmVxdWlyZXMgYSBwaHlzaWNhbCBTRElPIFdpLUZpIGNoaXAgdG8gYmUgcHJlc2VudC4gU2luY2UgU0RJTyBoYXJkd2FyZSBhbmQgdGhpcyBzcGVjaWZpYyBSZWFsdGVrIGNoaXAgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkYjZkYWIxNDAyNmJlZTkwN2Y3ODhhYTVlNWFkODhjNmQ2MmI1ZmVkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTkgMDc6NTg6NDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oCmluZGV4IGM2ZTk4MWJhNzk4NjguLjhmODZmN2MxMmRlNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oCkBAIC0xOTQsNiAmIzQzOzE5NCw3IEBAIGVudW0gcnR3X2NoaXBfdHlwZSB7CiAJUlRXX0NISVBfVFlQRV84NzIzRCwKIAlSVFdfQ0hJUF9UWVBFXzg4MjFDLAogCVJUV19DSElQX1RZUEVfODcwM0IsCiYjNDM7CVJUV19DSElQX1RZUEVfODcyM0IsCiAJUlRXX0NISVBfVFlQRV84ODIxQSwKIAlSVFdfQ0hJUF9UWVBFXzg4MTJBLAogCVJUV19DSElQX1RZUEVfODgxNEEsCkBAIC0yMTk0LDYgJiM0MzsyMTk1LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBydHdfY2hpcF9oYXNfdHhfc3RiYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogCXJldHVybiBydHdkZXYtJmd0O2NoaXAtJmd0O3R4X3N0YmM7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2lzXzg3MjNicyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7aWQgPT0gUlRXX0NISVBfVFlQRV84NzIzQiAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBydHdkZXYtJmd0O2hjaS50eXBlID09IFJUV19IQ0lfVFlQRV9TRElPOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdTggcnR3X2FjcXVpcmVfbWFjaWQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIHsKIAl1bnNpZ25lZCBsb25nIG1hY19pZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYwppbmRleCAwMWZkMjk5YWJiN2ZlLi5mZGUyMWM4NDBhYzAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jCkBAIC0yNTMsMTAgJiM0MzsyNTMsMTIgQEAgc3RhdGljIHZvaWQgcnR3X3J4X2ZpbGxfcnhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiAKIAlydHdfcnhfYWRkcl9tYXRjaChydHdkZXYsIHBrdF9zdGF0LCBoZHIpOwogCi0JLyogUnRsODcyM2NzIGRyaXZlciBjaGVja3MgZm9yIHNpemUgJmx0OyAxNCBvciBzaXplICZndDsgODE5MiBhbmQKLQkgKiBzaW1wbHkgZHJvcHMgdGhlIHBhY2tldC4KJiM0MzsJLyoKJiM0MzsJICogUnRsODcyM2NzIGFuZCBydGw4NzIzYnMgZHJpdmVycyBjaGVjayBmb3Igc2l6ZSAmbHQ7IDE0IG9yIHNpemUgJmd0OyA4MTkyCiYjNDM7CSAqIGFuZCBzaW1wbHkgZHJvcCB0aGUgcGFja2V0LgogCSAqLwotCWlmIChydHdkZXYtJmd0O2NoaXAtJmd0O2lkID09IFJUV19DSElQX1RZUEVfODcwM0IgJmFtcDsmYW1wOyBwa3Rfc3RhdC0mZ3Q7cGt0X2xlbiA9PSAwKSB7CiYjNDM7CWlmIChwa3Rfc3RhdC0mZ3Q7cGt0X2xlbiA9PSAwICZhbXA7JmFtcDsKJiM0MzsJICAgIChydHdkZXYtJmd0O2NoaXAtJmd0O2lkID09IFJUV19DSElQX1RZUEVfODcwM0IgfHwgcnR3X2lzXzg3MjNicyhydHdkZXYpKSkgewogCQlyeF9zdGF0dXMtJmd0O2ZsYWcgfD0gUlhfRkxBR19OT19QU0RVOwogCQlydHdfZGJnKHJ0d2RldiwgUlRXX0RCR19SWCwgJiMzNDt6ZXJvIGxlbmd0aCBwYWNrZXQmIzM0Oyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYwppbmRleCA1YjQwZDc0YjE2ZWUwLi5lNWJmOWNiYTA3MWVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYwpAQCAtMjAsNiAmIzQzOzIwLDE3IEBACiAjaW5jbHVkZSAmIzM0O3R4LmgmIzM0OwogCiAjZGVmaW5lIFJUV19TRElPX0lORElSRUNUX1JXX1JFVFJJRVMJCQk1MAomIzQzOyNkZWZpbmUgUlRXX1NESU9fT1FUX1RJTUVPVVRfTVMJCQkJMTAwMAomIzQzOwomIzQzOy8qCiYjNDM7ICogODcyM0JTIFNESU8gVFggRklGTyBiYWNrLXByZXNzdXJlIHdhdGVybWFya3M6IHN0b3AgdGhlIG1hYzgwMjExIHF1ZXVlIG9uY2UKJiM0MzsgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlCiYjNDM7ICogVFggZHJhaW4gcGF0aCBvbmNlIGl0IGZhbGxzIGJhY2sgdG8gdGhlIGxvdyBvbmUuIEJvdW5kcyB0aGUgcXVldWVpbmcgbGF0ZW5jeQomIzQzOyAqIHRoYXQgb3RoZXJ3aXNlIGNhdXNlcyB1cGxpbmsgYnVmZmVyYmxvYXQgLyBjb25nZXN0aW9uIGNvbGxhcHNlLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSCQkJMTYKJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUgkJCTgKJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZCQkJbXNlY3NfdG9famlmZmllcygxKQogCiBzdGF0aWMgYm9vbCBydHdfc2Rpb19pc19idXNfYWRkcih1MzIgYWRkcikKIHsKQEAgLTU0OCwxMiAmIzQzOzU1OSwxNTcgQEAgc3RhdGljIGludCBydHdfc2Rpb19yZWFkX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KQogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFRoZSBjYWNoZWQgZnJlZSBwYWdlIGNvdW50ZXJzIGFyZSBhIGZhc3QgcGF0aCBoaW50IG9ubHkuIFRoZXkgYXJlIHdyaXR0ZW4KJiM0MzsgKiBmcm9tIHRoZSBzaW5nbGUgdGhyZWFkZWQgVFggd29yayBhbmQsIGZvciBIMkMgYW5kIHJlc2VydmVkIHBhZ2Ugd3JpdGVzLAomIzQzOyAqIGZyb20gcHJvY2VzcyBjb250ZXh0LCBzbyB0aGV5IGFyZSBhdG9taWNfdDsgd2hlbmV2ZXIgdGhleSBjbGFpbSB0aGVyZSBpcwomIzQzOyAqIG5vdCBlbm91Z2ggcm9vbSB0aGV5IGFyZSByZXN5bmNocm9uaXNlZCBmcm9tIHRoZSBjaGlwIGJlZm9yZSB0aGUgY2FsbGVyCiYjNDM7ICogZ2l2ZXMgdXAsIHdoaWNoIGFsc28gYWJzb3JicyBhIGxvc3QgdXBkYXRlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKJiM0MzsJCQkJCSAgICB1MzIgZnJlZV90eHBnKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfaGlnaCwKJiM0MzsJCSAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfSElHSCkpOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19ub3JtYWwsCiYjNDM7CQkgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX05PUk1BTCkpOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19sb3csCiYjNDM7CQkgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0xPVykpOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19wdWIsCiYjNDM7CQkgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX1BVQikpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlZnJlc2ggdGhlIGNhY2hlZCBjb3VudGVycyBmcm9tIHRoZSBjaGlwLiBSZXR1cm5zIGZhbHNlIHdoZW4gdGhlIGNoaXAKJiM0MzsgKiByZXBvcnRzIG5vIGZyZWUgcGFnZXMgYXQgYWxsLCB3aGljaCBtZWFucyB0aGUgY291bnRzIGNhbm5vdCBiZSB0cnVzdGVkCiYjNDM7ICogYW5kIHRoZSBjYWxsZXIgaGFzIHRvIGRlY2lkZSB3aGF0IHRvIGRvIGluc3RlYWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgcnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwl1MzIgZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7CiYjNDM7CiYjNDM7CWlmICghZnJlZV90eHBnKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlydHdfc2Rpb184NzIzYnNfc3RvcmVfZnJlZV90eHBnKHJ0d2RldiwgZnJlZV90eHBnKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogU2l6ZSBvZiB0aGUgcHVibGljIHBhZ2UgcG9vbDogd2hhdGV2ZXIgdGhlIHRyYW5zbWl0IHBhZ2UgYWxsb2NhdGlvbiBoYXMKJiM0MzsgKiBsZWZ0IG9uY2UgdGhlIHBlciBxdWV1ZSBwb29scyBhcmUgdGFrZW4gb3V0LiBGYWlscyBpZiB0aGUgYWxsb2NhdGlvbgomIzQzOyAqIGNhbm5vdCBjb3ZlciB0aGUgcmVzZXJ2ZWQgcXVldWVzLCBzaW5jZSB0aGUgcmVtYWluZGVyIHdvdWxkIHVuZGVyZmxvdyBhbmQKJiM0MzsgKiB0aGVyZSB3b3VsZCBiZSBubyBzZW5zaWJsZSBwb29sIHRvIGhhbmQgb3V0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX3B1YnFfbnVtKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUxNiAqcHVicV9udW0pCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibCA9ICZhbXA7cnR3ZGV2LSZndDtjaGlwLSZndDtwYWdlX3RhYmxlWzBdOwomIzQzOwl1MTYgYWNxX3BnX251bSA9IHJ0d2Rldi0mZ3Q7Zmlmby5hY3FfcGdfbnVtOwomIzQzOwl1MTYgcmVzZXJ2ZWRfbnVtOwomIzQzOwomIzQzOwlyZXNlcnZlZF9udW0gPSBwZ190YmwtJmd0O2hxX251bSAmIzQzOyBwZ190YmwtJmd0O2xxX251bSAmIzQzOyBwZ190YmwtJmd0O25xX251bSAmIzQzOwomIzQzOwkJICAgICAgIHBnX3RibC0mZ3Q7ZXhxX251bSAmIzQzOyBwZ190YmwtJmd0O2dhcHFfbnVtOwomIzQzOwlpZiAoYWNxX3BnX251bSAmbHQ7PSByZXNlcnZlZF9udW0pIHsKJiM0MzsJCXJ0d19lcnIocnR3ZGV2LAomIzQzOwkJCSYjMzQ7bm8gdHJhbnNtaXQgcGFnZXMgbGVmdCBmb3IgdGhlIHB1YmxpYyBxdWV1ZTogJXUgb2YgJXUgcmVzZXJ2ZWRcbiYjMzQ7LAomIzQzOwkJCXJlc2VydmVkX251bSwgYWNxX3BnX251bSk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwkqcHVicV9udW0gPSBhY3FfcGdfbnVtIC0gcmVzZXJ2ZWRfbnVtOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsOwomIzQzOwl1MTYgcHVicV9udW07CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIFNlZWQgZnJvbSB0aGUgcGFnZSB0YWJsZSB3aGVuIHRoZSBjaGlwIGhhcyBub3RoaW5nIHRvIHJlcG9ydCB5ZXQuICovCiYjNDM7CWlmICghcnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHJ0d2RldikpIHsKJiM0MzsJCXJldCA9IHJ0d19zZGlvXzg3MjNic19wdWJxX251bShydHdkZXYsICZhbXA7cHVicV9udW0pOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJcGdfdGJsID0gJmFtcDtydHdkZXYtJmd0O2NoaXAtJmd0O3BhZ2VfdGFibGVbMF07CiYjNDM7CQlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19oaWdoLCBwZ190YmwtJmd0O2hxX251bSk7CiYjNDM7CQlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19ub3JtYWwsIHBnX3RibC0mZ3Q7bnFfbnVtKTsKJiM0MzsJCWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX2xvdywgcGdfdGJsLSZndDtscV9udW0pOwomIzQzOwkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfcHViLCBwdWJxX251bSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O3R4X29xdF9mcmVlLAomIzQzOwkJICAgcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogU3VtIG9mIHRoZSBxdWV1ZSYjMzk7cyBkZWRpY2F0ZWQgY291bnRlciBhbmQgdGhlIHB1YmxpYyBwb29sLCBjbGFtcGVkIGF0IHplcm86CiYjNDM7ICogYSBsb3N0IHVwZGF0ZSBiZXR3ZWVuIHRoZSBjaGVjayBiZWxvdyBhbmQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZygpCiYjNDM7ICogY2FuIGJyaWVmbHkgZHJpdmUgYSBjb3VudGVyIG5lZ2F0aXZlLCBhbmQgbGV0dGluZyB0aGF0IHdyYXAgd291bGQgaGlkZSB0aGUKJiM0MzsgKiBzaG9ydGFnZSBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSByZXN5bmMgZnJvbSB0aGUgY2hpcC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiYjNDM7CQkJCQkgICAgICAgYXRvbWljX3QgKmRlZGljYXRlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CWludCBmcmVlOwomIzQzOwomIzQzOwlmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKSAmIzQzOyBhdG9taWNfcmVhZCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfcHViKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZyZWUgJmd0OyAwID8gZnJlZSA6IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBhdG9taWNfdCAqcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CXN3aXRjaCAocXVldWUpIHsKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfVkk6CiYjNDM7CQlyZXR1cm4gJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX25vcm1hbDsKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfQkU6CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX0JLOgomIzQzOwkJcmV0dXJuICZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19sb3c7CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX0JDTjoKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfSDJDOgomIzQzOwljYXNlIFJUV19UWF9RVUVVRV9ISTA6CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX01HTVQ6CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX1ZPOgomIzQzOwkJcmV0dXJuICZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19oaWdoOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSwKIAkJCQkgICAgc2l6ZV90IGNvdW50KQogewogCXVuc2lnbmVkIGludCBwYWdlc19mcmVlLCBwYWdlc19uZWVkZWQ7CiAKLQlpZiAocnR3X2NoaXBfd2NwdV84MDUxKHJ0d2RldikpIHsKJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkgewomIzQzOwkJYXRvbWljX3QgKmRlZGljYXRlZDsKJiM0MzsKJiM0MzsJCWRlZGljYXRlZCA9IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSk7CiYjNDM7CQlpZiAoIWRlZGljYXRlZCkgewomIzQzOwkJCXJ0d193YXJuKHJ0d2RldiwgJiMzNDtVbmtub3duIG1hcHBpbmcgZm9yIHF1ZXVlICV1XG4mIzM0OywgcXVldWUpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcGFnZXNfZnJlZSA9IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHJ0d2RldiwgZGVkaWNhdGVkKTsKJiM0MzsJCXBhZ2VzX25lZWRlZCA9IERJVl9ST1VORF9VUChjb3VudCwgcnR3ZGV2LSZndDtjaGlwLSZndDtwYWdlX3NpemUpOwomIzQzOwkJaWYgKHBhZ2VzX25lZWRlZCAmbHQ7PSBwYWdlc19mcmVlKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJcnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHJ0d2Rldik7CiYjNDM7CQlwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpOwomIzQzOwl9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7CiAJCXUzMiBmcmVlX3R4cGc7CiAKIAkJZnJlZV90eHBnID0gcnR3X3NkaW9fcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTsKQEAgLTYzMiw0NCAmIzQzOzc4OCwxMjQgQEAgc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsJdW5zaWduZWQgbG9uZyBkZWFkbGluZTsKJiM0MzsJdTggZnJlZTsKJiM0MzsKJiM0MzsJaWYgKGF0b21pY19hZGRfdW5sZXNzKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfb3F0X2ZyZWUsIC0xLCAwKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlkZWFkbGluZSA9IGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhSVFdfU0RJT19PUVRfVElNRU9VVF9NUyk7CiYjNDM7CWRvIHsKJiM0MzsJCWZyZWUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRyk7CiYjNDM7CQlpZiAoZnJlZSkgewomIzQzOwkJCWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDt0eF9vcXRfZnJlZSwgZnJlZSAtIDEpOwomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJfQomIzQzOwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwomIzQzOwl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkZWFkbGluZSkpOwomIzQzOwomIzQzOwlyZXR1cm4gLUVCVVNZOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLAomIzQzOwkJCQkJIHVuc2lnbmVkIGludCBwYWdlcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CWF0b21pY190ICpkZWRpY2F0ZWQ7CiYjNDM7CXVuc2lnbmVkIGludCB0YWtlbjsKJiM0MzsJaW50IGZyZWU7CiYjNDM7CiYjNDM7CWRlZGljYXRlZCA9IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSk7CiYjNDM7CWlmICghZGVkaWNhdGVkKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKTsKJiM0MzsJdGFrZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHBhZ2VzLCBmcmVlICZndDsgMCA/IGZyZWUgOiAwKTsKJiM0MzsJYXRvbWljX3N1Yih0YWtlbiwgZGVkaWNhdGVkKTsKJiM0MzsKJiM0MzsJcGFnZXMgLT0gdGFrZW47CiYjNDM7CWlmIChwYWdlcyAmYW1wOyZhbXA7IGF0b21pY19zdWJfcmV0dXJuKHBhZ2VzLCAmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfcHViKSAmbHQ7IDApCiYjNDM7CQlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19wdWIsIDApOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcnR3X3NkaW9fd3JpdGVfcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpCiB7CiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsJYm9vbCBydGw4NzIzYnMgPSBydHdfaXNfODcyM2JzKHJ0d2Rldik7CiYjNDM7CXVuc2lnbmVkIGludCBvcmlnX2xlbiA9IHNrYi0mZ3Q7bGVuOwomIzQzOwl1bnNpZ25lZCBpbnQgcGFnZXM7CiYjNDM7CXNpemVfdCB3cml0ZV9zaXplOwogCWJvb2wgYnVzX2NsYWltOwogCXNpemVfdCB0eHNpemU7CiAJdTMyIHR4YWRkcjsKIAlpbnQgcmV0OwogCi0JdHhhZGRyID0gcnR3X3NkaW9fZ2V0X3R4X2FkZHIocnR3ZGV2LCBza2ItJmd0O2xlbiwgcXVldWUpOwotCWlmICghdHhhZGRyKQotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKHJ0bDg3MjNicykgewomIzQzOwkJdHhzaXplID0gcm91bmRfdXAob3JpZ19sZW4sIDQpOwomIzQzOwkJd3JpdGVfc2l6ZSA9IHR4c2l6ZSAmZ3Q7IFJUV19TRElPX0JMT0NLX1NJWkUgPwomIzQzOwkJCSAgICAgcm91bmRfdXAodHhzaXplLCBSVFdfU0RJT19CTE9DS19TSVpFKSA6IHR4c2l6ZTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLSZndDtzZGlvX2Z1bmMsIG9yaWdfbGVuKTsKJiM0MzsJCXdyaXRlX3NpemUgPSB0eHNpemU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHdyaXRlX3NpemUgJmd0OyBvcmlnX2xlbikgewomIzQzOwkJdW5zaWduZWQgaW50IHBhZGRpbmcgPSB3cml0ZV9zaXplIC0gb3JpZ19sZW47CiAKLQl0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby0mZ3Q7c2Rpb19mdW5jLCBza2ItJmd0O2xlbik7CiYjNDM7CQlpZiAoc2tiX3RhaWxyb29tKHNrYikgJmx0OyBwYWRkaW5nKSB7CiYjNDM7CQkJcmV0ID0gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsCiYjNDM7CQkJCQkgICAgICAgcGFkZGluZyAtIHNrYl90YWlscm9vbShza2IpLAomIzQzOwkJCQkJICAgICAgIEdGUF9LRVJORUwpOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CQlza2JfcHV0X3plcm8oc2tiLCBwYWRkaW5nKTsKJiM0MzsJfQomIzQzOwomIzQzOwl0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHR4c2l6ZSwgcXVldWUpOwomIzQzOwlpZiAoIXR4YWRkcikgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gb3V0X3RyaW07CiYjNDM7CX0KIAogCXJldCA9IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlLCB0eHNpemUpOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CiYjNDM7CQlnb3RvIG91dF90cmltOwomIzQzOwomIzQzOwlpZiAocnRsODcyM2JzKSB7CiYjNDM7CQlyZXQgPSBydHdfc2Rpb184NzIzYnNfd2FpdF90eF9vcXQocnR3ZGV2KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXRfdHJpbTsKJiM0MzsJfQogCiAJaWYgKCFJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKXNrYi0mZ3Q7ZGF0YSwgUlRXX1NESU9fREFUQV9QVFJfQUxJR04pKQogCQlydHdfd2FybihydHdkZXYsICYjMzQ7R290IHVuYWxpZ25lZCBTS0IgaW4gJXMoKSBmb3IgcXVldWUgJXVcbiYjMzQ7LAogCQkJIF9fZnVuY19fLCBxdWV1ZSk7CiAKIAlidXNfY2xhaW0gPSBydHdfc2Rpb19idXNfY2xhaW1fbmVlZGVkKHJ0d3NkaW8pOwotCiAJaWYgKGJ1c19jbGFpbSkKIAkJc2Rpb19jbGFpbV9ob3N0KHJ0d3NkaW8tJmd0O3NkaW9fZnVuYyk7Ci0KLQlyZXQgPSBzZGlvX21lbWNweV90b2lvKHJ0d3NkaW8tJmd0O3NkaW9fZnVuYywgdHhhZGRyLCBza2ItJmd0O2RhdGEsIHR4c2l6ZSk7Ci0KJiM0MzsJcmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLSZndDtzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLSZndDtkYXRhLAomIzQzOwkJCSAgICAgICB3cml0ZV9zaXplKTsKIAlpZiAoYnVzX2NsYWltKQogCQlzZGlvX3JlbGVhc2VfaG9zdChydHdzZGlvLSZndDtzZGlvX2Z1bmMpOwogCi0JaWYgKHJldCkKJiM0MzsJaWYgKHJldCkgewogCQlydHdfd2FybihydHdkZXYsCiAJCQkgJiMzNDtGYWlsZWQgdG8gd3JpdGUgJXp1IGJ5dGUocykgdG8gU0RJTyBwb3J0IDB4JTA4eCYjMzQ7LAotCQkJIHR4c2l6ZSwgdHhhZGRyKTsKJiM0MzsJCQkgd3JpdGVfc2l6ZSwgdHhhZGRyKTsKJiM0MzsJfSBlbHNlIGlmIChydGw4NzIzYnMpIHsKJiM0MzsJCXBhZ2VzID0gRElWX1JPVU5EX1VQKHR4c2l6ZSwgcnR3ZGV2LSZndDtjaGlwLSZndDtwYWdlX3NpemUpOwomIzQzOwkJcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhydHdkZXYsIHF1ZXVlLCBwYWdlcyk7CiYjNDM7CX0KIAomIzQzO291dF90cmltOgomIzQzOwlpZiAod3JpdGVfc2l6ZSAmZ3Q7IG9yaWdfbGVuKQomIzQzOwkJc2tiX3RyaW0oc2tiLCBvcmlnX2xlbik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjc3LDcgJiM0Mzs5MTMsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5pdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogewogCXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiAKLQlydHdzZGlvLSZndDtpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVCB8IFJFR19TRElPX0hJTVJfQ1BXTTE7CiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpCiYjNDM7CQlydHdzZGlvLSZndDtpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVDsKJiM0MzsJZWxzZQomIzQzOwkJcnR3c2Rpby0mZ3Q7aXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfAomIzQzOwkJCQkgICAgUkVHX1NESU9fSElNUl9DUFdNMTsKIH0KIAogc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCkBAIC02ODUsNiAmIzQzOzkyNSw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogCXU4IHNpemUsIHRpbWVvdXQ7CiAKIAlzd2l0Y2ggKHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7aWQpIHsKJiM0MzsJY2FzZSBSVFdfQ0hJUF9UWVBFXzg3MjNCOgogCWNhc2UgUlRXX0NISVBfVFlQRV84NzAzQjoKIAljYXNlIFJUV19DSElQX1RZUEVfODgyMUE6CiAJY2FzZSBSVFdfQ0hJUF9UWVBFXzg4MTJBOgpAQCAtNzEyLDYgJiM0Mzs5NTMsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIAkJICAgIEZJRUxEX1BSRVAoQklUX0RNQV9BR0dfVE9fVjEsIHRpbWVvdXQpKTsKIAogCXJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfTU9ERSk7CiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpCiYjNDM7CQlydHdfd3JpdGU4X21hc2socnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgQklUX0RNQV9CVVJTVF9DTlQsIDB4Myk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKQEAgLTc0OSw5ICYjNDM7OTkyLDYxIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fc2V0dXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qCiYjNDM7ICogUmVwcm9ncmFtIHRoZSBxdWV1ZSBwYWdlIGFsbG9jYXRpb24gaWYgdGhlIGNoaXAgY2FtZSB1cCB3aXRoIG5vbmUuIFRoaXMgaXMKJiM0MzsgKiBhIHJlcGFpciBwYXRoLCBub3QgcGFydCBvZiB0aGUgbm9ybWFsIHN0YXJ0IHNlcXVlbmNlOiBhIG5vbi16ZXJvIGZyZWUgcGFnZQomIzQzOyAqIGNvdW50IG1lYW5zIHRoZSBhbGxvY2F0aW9uIGxhdGNoZWQgZHVyaW5nIHBvd2VyIG9uIGFuZCBtdXN0IGJlIGxlZnQgYWxvbmUsCiYjNDM7ICogYW5kIHdpdGhvdXQgYSB0cmFuc21pdCBwYWdlIHBvb2wgdGhlcmUgaXMgbm90aGluZyB0byBkaXZpZGUgdXAgZWl0aGVyLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4oc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHdfY2hpcF9pbmZvICpjaGlwID0gcnR3ZGV2LSZndDtjaGlwOwomIzQzOwlzdHJ1Y3QgcnR3X2ZpZm9fY29uZiAqZmlmbyA9ICZhbXA7cnR3ZGV2LSZndDtmaWZvOwomIzQzOwljb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDsKJiM0MzsJdTMyIGZyZWVfdHhwZzsKJiM0MzsJdTE2IHB1YnFfbnVtOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTsKJiM0MzsJaWYgKGZyZWVfdHhwZyB8fCAhZmlmby0mZ3Q7YWNxX3BnX251bSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXQgPSBydHdfc2Rpb184NzIzYnNfcHVicV9udW0ocnR3ZGV2LCAmYW1wO3B1YnFfbnVtKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXBnX3RibCA9ICZhbXA7Y2hpcC0mZ3Q7cGFnZV90YWJsZVswXTsKJiM0MzsJcnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUlFQTl9OUFEsCiYjNDM7CQkgICAgQklUX1JRUE5fTkUocGdfdGJsLSZndDtucV9udW0sIHBnX3RibC0mZ3Q7ZXhxX251bSkpOwomIzQzOwlydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOLAomIzQzOwkJICAgIEJJVF9SUVBOX0hMUChwZ190YmwtJmd0O2hxX251bSwgcGdfdGJsLSZndDtscV9udW0sIHB1YnFfbnVtKSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcnR3X3NkaW9fc3RhcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIHsKJiM0MzsJdTMyIGNsZWFyOwomIzQzOwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7CiYjNDM7CQlpbnQgcmV0ID0gcnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4ocnR3ZGV2KTsKJiM0MzsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXJldCA9IHJ0d19zZGlvXzg3MjNic19pbml0X2ZyZWVfdHhwZyhydHdkZXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiAJcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHJ0d2Rldik7CiYjNDM7CiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHsKJiM0MzsJCWNsZWFyID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0hJU1IpICZhbXA7IFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTSzsKJiM0MzsJCWlmIChjbGVhcikKJiM0MzsJCQlydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGNsZWFyKTsKJiM0MzsJfQomIzQzOwogCXJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQocnR3ZGV2KTsKIAogCXJldHVybiAwOwpAQCAtODE1LDcgJiM0MzsxMTEwLDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2tpY2tfb2ZmKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiB7CiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKIAotCXF1ZXVlX3dvcmsocnR3c2Rpby0mZ3Q7dHh3cSwgJmFtcDtydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEtJmd0O3dvcmspOwomIzQzOwkvKgomIzQzOwkgKiBBIHJldHJ5IG1heSBhbHJlYWR5IGJlIHBlbmRpbmcgd2l0aCBhIGRlbGF5OyByZS1hcm0gaXQgc28gYSBuZXdseQomIzQzOwkgKiBxdWV1ZWQgZnJhbWUgaXMgbm90IGhlbGQgYmFjayBieSBpdC4KJiM0MzsJICovCiYjNDM7CW1vZF9kZWxheWVkX3dvcmsocnR3c2Rpby0mZ3Q7dHh3cSwgJmFtcDtydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEtJmd0O3dvcmssIDApOwogfQogCiBzdGF0aWMgdm9pZCBydHdfc2Rpb19saW5rX3BzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgZW50ZXIpCkBAIC04MzEsNiAmIzQzOzExMzAsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbnRlcmZhY2VfY2ZnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAKIAl2YWwgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fVFhfQ1RSTCk7CiAJdmFsICZhbXA7PSAweGZmZjg7CiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpCiYjNDM7CQl2YWwgfD0gQklUX1NESU9fVFhfQ1RSTF9BTFdBWVNfUkVDT0dOSVpFOwogCXJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fVFhfQ1RSTCwgdmFsKTsKIH0KIApAQCAtOTIyLDYgJiM0MzsxMjIzLDUwIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fd3JpdGVfZGF0YV9oMmMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggKmJ1ZiwgdTMyIHNpemUpCiAJcmV0dXJuIHJ0d19zZGlvX3dyaXRlX2RhdGEocnR3ZGV2LCAmYW1wO3BrdF9pbmZvLCBza2IsIFJUV19UWF9RVUVVRV9IMkMpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBCYWNrLXByZXNzdXJlIG9uIHRoZSBkYXRhIEFDcyAoQksvQkUvVkkvVk8pOiBvbmNlIHRoZSBzb2Z0d2FyZSBGSUZPIGZpbGxzCiYjNDM7ICogcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIHN0b3AgdGhlIGNvcnJlc3BvbmRpbmcgbWFjODAyMTEgcXVldWUgc28gaXQgc3RvcHMKJiM0MzsgKiBoYW5kaW5nIGZyYW1lcyBkb3duLCB3aGljaCBib3VuZHMgdGhlIHF1ZXVlaW5nIGxhdGVuY3kuIFRoZSBxdWV1ZSBpcyB3b2tlbgomIzQzOyAqIGFnYWluIGZyb20gdGhlIFRYIGRyYWluIHBhdGggb25jZSB0aGUgRklGTyBmYWxscyBiYWNrIHRvIHRoZSBsb3cgd2F0ZXJtYXJrLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19zdG9wX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiYjNDM7CQkJCQkgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUsCiYjNDM7CQkJCQkgIHUxNiBxX21hcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpIHx8IHF1ZXVlICZndDs9IFJUV19UWF9RVUVVRV9CQ04pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChydHdzZGlvLSZndDt0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKHNrYl9xdWV1ZV9sZW4oJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0pICZsdDsgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlydHdzZGlvLSZndDt0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSA9IHRydWU7CiYjNDM7CWllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0d2Rldi0mZ3Q7aHcsIHFfbWFwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3dha2VfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKJiM0MzsJCQkJCSAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSwKJiM0MzsJCQkJCSAgdTE2IHFfbWFwKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikgfHwgcXVldWUgJmd0Oz0gUlRXX1RYX1FVRVVFX0JDTikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKCFydHdzZGlvLSZndDt0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKHNrYl9xdWV1ZV9sZW4oJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0pICZndDsgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlydHdzZGlvLSZndDt0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSA9IGZhbHNlOwomIzQzOwlpZWVlODAyMTFfd2FrZV9xdWV1ZShydHdkZXYtJmd0O2h3LCBxX21hcCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBydHdfc2Rpb190eF93cml0ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAogCQkJICAgICBzdHJ1Y3QgcnR3X3R4X3BrdF9pbmZvICpwa3RfaW5mbywKIAkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTkzNyw2ICYjNDM7MTI4Miw4IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fdHhfd3JpdGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKIAogCXNrYl9xdWV1ZV90YWlsKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfcXVldWVbcXVldWVdLCBza2IpOwogCiYjNDM7CXJ0d19zZGlvXzg3MjNic19zdG9wX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA5NSw2ICYjNDM7MTQ0MiwxNCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYykKIAkJcnR3X3NkaW9fcnhfaXNyKHJ0d2Rldik7CiAJfQogCiYjNDM7CS8qCiYjNDM7CSAqIFJUTDg3MjNCUyBrZWVwcyByYWlzaW5nIHRoZSBpbnRlcnJ1cHQgYWZ0ZXIgcmVzdW1lIGlmIHVuZGVmaW5lZAomIzQzOwkgKiBzdGF0dXMgYml0cyBhcmUgd3JpdHRlbiBiYWNrLCBzbyBhY2tub3dsZWRnZSBvbmx5IHRoZSBiaXRzIHRoaXMKJiM0MzsJICogZHJpdmVyIGRlZmluZXMuIE90aGVyIGNoaXBzIGtlZXAgdGhlIGV4aXN0aW5nIGJlaGF2aW91ci4KJiM0MzsJICovCiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpCiYjNDM7CQloaXNyICZhbXA7PSBSVFdfU0RJT19ISVNSX0NMRUFSX01BU0s7CiYjNDM7CiAJcnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBoaXNyKTsKIAogCXJ0d3NkaW8tJmd0O2lycV90aHJlYWQgPSBOVUxMOwpAQCAtMTIzMSwzMyAmIzQzOzE1ODYsODEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5kaWNhdGVfdHhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiAJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpOwogfQogCi1zdGF0aWMgdm9pZCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCi0JCQkJICAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSkKJiM0MzsvKgomIzQzOyAqIFNlbmQgb25lIGZyYW1lIGZyb20gQHF1ZXVlLiBSZXR1cm5zIDAgd2hlbiBhIGZyYW1lIHdhcyB3cml0dGVuLCAxIHdoZW4gdGhlCiYjNDM7ICogcXVldWUgd2FzIGVtcHR5IGFuZCBhIG5lZ2F0aXZlIGVycm5vIHdoZW4gdGhlIHdyaXRlIGZhaWxlZCwgaW4gd2hpY2ggY2FzZQomIzQzOyAqIHRoZSBmcmFtZSBpcyBwdXQgYmFjayBhdCB0aGUgaGVhZCBvZiB0aGUgcXVldWUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiYjNDM7CQkJCSAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSkKIHsKIAlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwogCXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CXUxNiBxX21hcDsKIAlpbnQgcmV0OwogCiAJc2tiID0gc2tiX2RlcXVldWUoJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0pOwogCWlmICghc2tiKQotCQlyZXR1cm47CiYjNDM7CQlyZXR1cm4gMTsKIAomIzQzOwlxX21hcCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwogCXJldCA9IHJ0d19zZGlvX3dyaXRlX3BvcnQocnR3ZGV2LCBza2IsIHF1ZXVlKTsKIAlpZiAocmV0KSB7CiAJCXNrYl9xdWV1ZV9oZWFkKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfcXVldWVbcXVldWVdLCBza2IpOwotCQlyZXR1cm47CiYjNDM7CQlyZXR1cm4gcmV0OwogCX0KIAogCXJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhydHdkZXYsIHNrYik7CiYjNDM7CiYjNDM7CXJ0d19zZGlvXzg3MjNic193YWtlX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUsIHFfbWFwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogRGVjaWRlIHdoZXRoZXIgdGhlIFJUTDg3MjNCUyB3YW50cyB0aGUgVFggd29yayB0byBydW4gYWdhaW4sIGFuZCBpZiBzbwomIzQzOyAqIGFycmFuZ2UgaXQgYW5kIHRlbGwgdGhlIGNhbGxlciB0byBzdG9wIGRyYWluaW5nLiBUd28gY2FzZXMgbmVlZCBpdC4KJiM0MzsgKgomIzQzOyAqIEEgdHJhbnNtaXQgcGFnZSBvciBvdXRwdXQgcXVldWUgc2hvcnRhZ2UgYW5kIGEgZmFpbGVkIHNrYiBleHBhbnNpb24gYXJlCiYjNDM7ICogdHJhbnNpZW50IGFuZCBsZWF2ZSB0aGUgZnJhbWUgcXVldWVkLCBzbyBjb21lIGJhY2sgZm9yIGl0IHNob3J0bHkuIFRoYXQKJiM0MzsgKiBtYXR0ZXJzIG9uY2UgdGhlIG1hYzgwMjExIHF1ZXVlIGNhbiBiZSBzdG9wcGVkOiBhIHN0b3BwZWQgcXVldWUgaXMgaGFuZGVkCiYjNDM7ICogbm8gZnVydGhlciBmcmFtZXMsIHNvIG5vdGhpbmcgZWxzZSB3b3VsZCBraWNrIHRoaXMgd29yayBpdGVtIGFuZCB0aGUgYWNjZXNzCiYjNDM7ICogY2F0ZWdvcnkgd291bGQgc3RheSBzdG9wcGVkIGZvciBnb29kLiBUaGUgcmVtYWluaW5nIGVycm9ycyBhcmUgbG9nZ2VkIHdoZXJlCiYjNDM7ICogdGhleSBoYXBwZW4gYW5kIGFyZSBub3QgcmV0cmllZC4KJiM0MzsgKgomIzQzOyAqIEFmdGVyIGEgbWFuYWdlbWVudCBmcmFtZSwgcmVzdGFydCBmcm9tIHRoZSBoaWdoZXN0IHByaW9yaXR5IHF1ZXVlIHNvIHRoZQomIzQzOyAqIGpvaW4gc2VxdWVuY2UgaXMgbm90IGhlbGQgdXAgYmVoaW5kIGEgZGF0YSBiYWNrbG9nLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIHJ0d19zZGlvXzg3MjNic19yZXNjaGVkdWxlX3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiYjNDM7CQkJCQkgIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKndvcmtfZGF0YSwKJiM0MzsJCQkJCSAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZGVsYXk7CiYjNDM7CiYjNDM7CWlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAocmV0ID09IC1FQlVTWSB8fCByZXQgPT0gLUVOT01FTSkKJiM0MzsJCWRlbGF5ID0gUlRXX1NESU9fVFhfUkVUUllfREVMQVk7CiYjNDM7CWVsc2UgaWYgKHJldCA9PSAwICZhbXA7JmFtcDsgcXVldWUgPT0gUlRXX1RYX1FVRVVFX01HTVQpCiYjNDM7CQlkZWxheSA9IDA7CiYjNDM7CWVsc2UKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcXVldWVfZGVsYXllZF93b3JrKHJ0d3NkaW8tJmd0O3R4d3EsICZhbXA7d29ya19kYXRhLSZndDt3b3JrLCBkZWxheSk7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp3b3JrX2RhdGEgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSwgd29yayk7CiYjNDM7CQljb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLAomIzQzOwkJCSAgICAgd29yayk7CiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvOwogCXN0cnVjdCBydHdfZGV2ICpydHdkZXY7Ci0JaW50IGxpbWl0LCBxdWV1ZTsKJiM0MzsJaW50IGxpbWl0LCBxdWV1ZSwgcmV0OwogCiAJcnR3ZGV2ID0gd29ya19kYXRhLSZndDtydHdkZXY7CiAJcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CkBAIC0xMjY3LDcgJiM0MzsxNjcwLDEzIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCiAJZm9yIChxdWV1ZSA9IFJUS19NQVhfVFhfUVVFVUVfTlVNIC0gMTsgcXVldWUgJmd0Oz0gMDsgcXVldWUtLSkgewogCQlmb3IgKGxpbWl0ID0gMDsgbGltaXQgJmx0OyAxMDAwOyBsaW1pdCYjNDM7JiM0MzspIHsKLQkJCXJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7CiYjNDM7CQkJcmV0ID0gcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShydHdkZXYsIHF1ZXVlKTsKJiM0MzsJCQlpZiAocmV0ICZndDsgMCkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkJaWYgKHJ0d19zZGlvXzg3MjNic19yZXNjaGVkdWxlX3R4KHJ0d2Rldiwgd29ya19kYXRhLAomIzQzOwkJCQkJCQkgIHF1ZXVlLCByZXQpKQomIzQzOwkJCQlyZXR1cm47CiAKIAkJCWlmIChza2JfcXVldWVfZW1wdHkoJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0pKQogCQkJCWJyZWFrOwpAQCAtMTI5NCwxNCAmIzQzOzE3MDMsMTYgQEAgc3RhdGljIGludCBydHdfc2Rpb19pbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWZvciAoaSA9IDA7IGkgJmx0OyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSYjNDM7JiM0MzspCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSYjNDM7JiM0MzspIHsKIAkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO3J0d3NkaW8tJmd0O3R4X3F1ZXVlW2ldKTsKJiM0MzsJCXJ0d3NkaW8tJmd0O3R4X3F1ZXVlX3N0b3BwZWRbaV0gPSBmYWxzZTsKJiM0MzsJfQogCXJ0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YSA9IGttYWxsb2Nfb2JqKCpydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEpOwogCWlmICghcnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhKQogCQlnb3RvIGVycl9kZXN0cm95X3dxOwogCiAJcnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhLSZndDtydHdkZXYgPSBydHdkZXY7Ci0JSU5JVF9XT1JLKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhLSZndDt3b3JrLCBydHdfc2Rpb190eF9oYW5kbGVyKTsKJiM0MzsJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDtydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEtJmd0O3dvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTEzMTUsNiAmIzQzOzE3MjYsNyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19kZWluaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIAlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwogCWludCBpOwogCiYjNDM7CWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYW1wO3J0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YS0mZ3Q7d29yayk7CiAJZGVzdHJveV93b3JrcXVldWUocnR3c2Rpby0mZ3Q7dHh3cSk7CiAJa2ZyZWUocnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaAppbmRleCA0NTdlOGIwMjM4MGU1Li5jZWMzZGQxYzRiMmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaApAQCAtMjIsNiAmIzQzOzIyLDcgQEAKIAogLyogU0RJTyBUeCBDb250cm9sICovCiAjZGVmaW5lIFJFR19TRElPX1RYX0NUUkwJCQkoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDAwKQomIzQzOyNkZWZpbmUgQklUX1NESU9fVFhfQ1RSTF9BTFdBWVNfUkVDT0dOSVpFCUJJVCg0KQogCiAvKlNESU8gc3RhdHVzIHRpbWVvdXQqLwogI2RlZmluZSBSRUdfU0RJT19USU1FT1VUCQkJKFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAwMikKQEAgLTc3LDYgJiM0Mzs3OCwxNCBAQAogLyogdGhlIGZvbGxvd2luZyB0d28gYXJlIFJUTDgxODggU0RJTyBTcGVjaWZpYyAqLwogI2RlZmluZSBSRUdfU0RJT19ISVNSX01DVV9FUlIJCQlCSVQoMjgpCiAjZGVmaW5lIFJFR19TRElPX0hJU1JfVFNGX0JJVDMyX1RPR0dMRQkJQklUKDI5KQomIzQzOyNkZWZpbmUgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLCQlcCiYjNDM7CShSRUdfU0RJT19ISVNSX1RYRVJSIHwgUkVHX1NESU9fSElTUl9SWEVSUiB8IFwKJiM0MzsJIFJFR19TRElPX0hJU1JfVFhGT1ZXIHwgUkVHX1NESU9fSElTUl9SWEZPVlcgfCBcCiYjNDM7CSBSRUdfU0RJT19ISVNSX1RYQkNOT0sgfCBSRUdfU0RJT19ISVNSX1RYQkNORVJSIHwgXAomIzQzOwkgUkVHX1NESU9fSElTUl9DMkhDTUQgfCBSRUdfU0RJT19ISVNSX0NQV00xIHwgXAomIzQzOwkgUkVHX1NESU9fSElTUl9DUFdNMiB8IFJFR19TRElPX0hJU1JfSFNJU1JfSU5EIHwgXAomIzQzOwkgUkVHX1NESU9fSElTUl9HVElOVDNfSU5EIHwgUkVHX1NESU9fSElTUl9HVElOVDRfSU5EIHwgXAomIzQzOwkgUkVHX1NESU9fSElTUl9QU1RJTUVPVVQgfCBSRUdfU0RJT19ISVNSX09DUElOVCkKIAogLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAqLwogI2RlZmluZSBSRUdfU0RJT19IQ1BXTQkJCQkoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDE5KQpAQCAtODYsNiAmIzQzOzk1LDEwIEBACiAjZGVmaW5lIFJFR19TRElPX09RVF9GUkVFX1BHCQkJKFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAxRSkKIC8qIEZyZWUgVHggQnVmZmVyIFBhZ2UgKi8KICNkZWZpbmUgUkVHX1NESU9fRlJFRV9UWFBHCQkJKFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAyMCkKJiM0MzsjZGVmaW5lIEJJVF9GUkVFX1RYUEdfSElHSAkJCUdFTk1BU0soNywgMCkKJiM0MzsjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTk9STUFMCQkJR0VOTUFTSygxNSwgOCkKJiM0MzsjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTE9XCQkJR0VOTUFTSygyMywgMTYpCiYjNDM7I2RlZmluZSBCSVRfRlJFRV9UWFBHX1BVQgkJCUdFTk1BU0soMzEsIDI0KQogLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAxICovCiAjZGVmaW5lIFJFR19TRElPX0hDUFdNMQkJCQkoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDI0KQogLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAyICovCkBAIC0xNDMsNyAmIzQzOzE1Niw3IEBAIHN0cnVjdCBydHdfc2Rpb190eF9kYXRhIHsKIH07CiAKIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgewotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwomIzQzOwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CiAJc3RydWN0IHJ0d19kZXYgKnJ0d2RldjsKIH07CiAKQEAgLTE1OSw2ICYjNDM7MTcyLDEzIEBAIHN0cnVjdCBydHdfc2RpbyB7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnR4d3E7CiAJc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSAqdHhfaGFuZGxlcl9kYXRhOwogCXN0cnVjdCBza19idWZmX2hlYWQgdHhfcXVldWVbUlRLX01BWF9UWF9RVUVVRV9OVU1dOwomIzQzOwlib29sIHR4X3F1ZXVlX3N0b3BwZWRbUlRLX01BWF9UWF9RVUVVRV9OVU1dOwomIzQzOwomIzQzOwlhdG9taWNfdCBmcmVlX3BnX2hpZ2g7CiYjNDM7CWF0b21pY190IGZyZWVfcGdfbm9ybWFsOwomIzQzOwlhdG9taWNfdCBmcmVlX3BnX2xvdzsKJiM0MzsJYXRvbWljX3QgZnJlZV9wZ19wdWI7CiYjNDM7CWF0b21pY190IHR4X29xdF9mcmVlOwogfTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJ0d19zZGlvX3BtX29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguYwppbmRleCA4Nzg2YmJiNDIxYzJiLi40ZTExMGE0NTdlNzFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jCkBAIC0yMDgsOCAmIzQzOzIwOCw5IEBAIHZvaWQgcnR3X3R4X3JlcG9ydF9lbnF1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IsIHU4IHNuKQogCV9fc2tiX3F1ZXVlX3RhaWwoJmFtcDt0eF9yZXBvcnQtJmd0O3F1ZXVlLCBza2IpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0eF9yZXBvcnQtJmd0O3FfbG9jaywgZmxhZ3MpOwogCi0JaWYgKHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7aWQgPT0gUlRXX0NISVBfVFlQRV84NzIzRCAmYW1wOyZhbXA7Ci0JICAgIHJ0d2Rldi0mZ3Q7aGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQikKJiM0MzsJaWYgKChydHdkZXYtJmd0O2NoaXAtJmd0O2lkID09IFJUV19DSElQX1RZUEVfODcyM0QgJmFtcDsmYW1wOwomIzQzOwkgICAgIHJ0d2Rldi0mZ3Q7aGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQikgfHwKJiM0MzsJICAgIHJ0d19pc184NzIzYnMocnR3ZGV2KSkKIAkJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwMCk7CiAKIAltb2RfdGltZXIoJmFtcDt0eF9yZXBvcnQtJmd0O3B1cmdlX3RpbWVyLCBqaWZmaWVzICYjNDM7IHRpbWVvdXQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY0MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEwNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgVGhpcyBydHc4OCBQYXRjaCBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgYHJ0dzg4YCBkcml2ZXIsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIFNESU8gaW50ZXJmYWNlIGFuZCBhZGRpbmcgc3VwcG9ydC9maXhpbmcgbG9naWMgZm9yIGBSVFdfQ0hJUF9UWVBFXzg3MjNCYCBhbmQgYFJUV19DSElQX1RZUEVfODcyM0JTYC4gSXQgc2VlbXMgcHJldHR5IGV4dGVuc2l2ZSDigJMgdGhlcmUgYXJlIG5ldyBoZWxwZXIgZnVuY3Rpb25zIGxpa2UgYHJ0d19pc184NzIzYnNgLCBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGZ1bmN0aW9ucyBsaWtlIGBydHdfcnhfZmlsbF9yeF9zdGF0dXNgLCBhbmQgYSB3aG9sZSBzbGV3IG9mIG5ldyBTRElPLXNwZWNpZmljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIFRYIHBhZ2UgbWFuYWdlbWVudCBhbmQgcXVldWUgaGFuZGxpbmcuIE1hbnkgZXhpc3RpbmcgZnVuY3Rpb25zIGFyZSBhbHNvIGJlaW5nIHVwZGF0ZWQuIFRoZSBjaGFuZ2VzIHRvdWNoIHVwb24gY29yZSBTRElPIG9wZXJhdGlvbnMg4oCTIHJlYWRpbmcvd3JpdGluZyBwb3J0cywgaW5pdGlhbGl6aW5nLCBlbmFibGluZyBSWCBhZ2dyZWdhdGlvbiwgVFggaGFuZGxpbmcsIGFuZCBpbnRlcnJ1cHQgcHJvY2Vzc2luZy4KClRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIgaXMgd2hldGhlciB0aGlzIGNvZGUgaXMgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdGhhdCBTeXprYWxsZXIgY2FuIGVhc2lseSBmdXp6LiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IGBydHc4OGAgaXMgYSBSZWFsdGVrIFdpLUZpIGRyaXZlciwgYW5kIHRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGRlYWxzIHdpdGggdGhlIFNESU8gaW50ZXJmYWNlLiBTRElPIGRldmljZXMgYXJlIG5vdG9yaW91c2x5IGRpZmZpY3VsdCB0byBlbXVsYXRlIHdlbGwgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0Ugc2V0dXBzLCBlc3BlY2lhbGx5IHdoZW4geW91JiMzOTtyZSB0YWxraW5nIGFib3V0IHNwZWNpZmljIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZS4gV2hpbGUgUUVNVSAqZG9lcyogaGF2ZSBTREhDSSBlbXVsYXRpb24sIHRoYXQgZG9lc24mIzM5O3QgYXV0b21hdGljYWxseSBtZWFuIHdlIGhhdmUgYSB2aXJ0dWFsIFNESU8gKmNhcmQqIHRoYXQgdGhpcyBSZWFsdGVrIGRyaXZlciBjYW4gaW50ZXJhY3Qgd2l0aC4gYG1hYzgwMjExX2h3c2ltYCBpcyBhbiBpbnRlcmVzdGluZyBleGFtcGxlIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiwgYnV0IGl0JiMzOTtzIGEgdmlydHVhbCBkcml2ZXIsIG5vdCBhbiBlbXVsYXRvciBmb3IgcmVhbHRlayBoYXJkd2FyZS4KClRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBldmVuIHdoZW4gdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIEl0IGNhbGxzIG91dCB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyB0aGF0IG5lZWQgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSwgd2hpY2ggcHJldHR5IG11Y2ggZGVzY3JpYmVzIHRoZSBzaXR1YXRpb24gd2l0aCBTRElPIFdpLUZpIGNoaXBzLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgcnR3ODhgIFNESU8gY2FuJiMzOTt0IGJlIHByb2JlZCB3aXRob3V0IHJlYWwgaGFyZHdhcmUuIFN5emthbGxlciBoYXMgVVNCIGFuZCBQQ0kgZnV6emluZywgYnV0IFNESU8/IEkgZG9uJiMzOTt0IHJlY2FsbCBzZWVpbmcgYW55IFNESU8gZnV6emluZyBzdXBwb3J0IGRpcmVjdGx5LiBUaGUgaW5zdHJ1Y3Rpb25zIHN1Z2dlc3QgdGhlIGNvZGUgaXMgKnVucmVhY2hhYmxlKi4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZnVuY3Rpb24gY2FsbCBjaGFpbjogYHJ0d19zZGlvX3dyaXRlX3BvcnRgIGlzIGNhbGxlZCBmcm9tIGBydHdfc2Rpb190eF93cml0ZWAsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgdGhlIFNESU8gZHJpdmVyLgoKU28sIHJlYWxpc3RpY2FsbHksIGlmIHRoZXJlJiMzOTtzIG5vIFNESU8gZnV6emVyIGluIFN5emthbGxlciBhbmQgbm8gdmlydHVhbCBTRElPIGhhcmR3YXJlIHRoYXQgY2FuIGJlIG1lYW5pbmdmdWxseSB1c2VkIGJ5IHRoZSBgcnR3ODhgIGRyaXZlciwgdGhlbiB0aGlzIGNvZGUgaXMgZGVhZCBvbiBhcnJpdmFsIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUgcGF0Y2ggaXMgcHJvYmFibHkgbm90IHdvcnRoIGZ1enppbmcuIEkgY291bGQgdHJ5IHRvIHNlYXJjaCBmb3IgJiMzNDtzZGlvJiMzNDsgaW4gdGhlIGtlcm5lbCBvciBzeXprYWxsZXIsIG9yIGZvciBhbnkgU0RJTyBmdXp6aW5nIGRyaXZlcnMsIGJ1dCBJIGFtIGFsbW9zdCBjZXJ0YWluIEkgd291bGQgZmluZCBub3RoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA3OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2Rpby4qZnV6eiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzMzIKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFNESU8gSG9zdCBTb2Z0d2FyZSBJbXBsZW1lbnRhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHNvZnR3YXJlIFNESU8gaG9zdCBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgbGlrZWx5IHRoZSBgZHJpdmVycy9tbWMvY29yZS9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB0aGUgY29tbW9uIGdyb3VuZCBmb3IgTU1DIGFuZCBTRC1yZWxhdGVkIGNvZGUsIHNvIGl0JiMzOTtzIHRoZSBuYXR1cmFsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSBjb3JlIFNESU8gaG9zdCBkcml2ZXJzLiBJJiMzOTtsbCBpbml0aWF0ZSBhIHNlYXJjaCBmb3IgYHNkaW9gIHdpdGhpbiB0aGF0IGRpcmVjdG9yeSwgdXNpbmcgbXkgcHJlZmVycmVkIHNlYXJjaCB0b29scywgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcy4gVGhpcyBzaG91bGQgcXVpY2tseSByZXZlYWwgaWYgYW5kIHdoZXJlIHRoZSBrZXJuZWwgaGFuZGxlcyBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIFNESU8gaG9zdC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gdW5jb3ZlciByZWxldmFudCBkcml2ZXJzLCBwcm9iYWJseSB3aXRoIG5hbWVzIHRoYXQgZ2l2ZSBjbHVlcyBhYm91dCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBvciBidXMgaW50ZXJmYWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZGlvLipkdW1teSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9ODI9c3RhdGljIHZvaWQgYnJjbWZfc2Rpb2RfaWJfaXJxaGFuZGxlcihzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy05Mi0vKiBkdW1teSBoYW5kbGVyIGZvciBTRElPIGZ1bmN0aW9uIDIgaW50ZXJydXB0ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6OTM6c3RhdGljIHZvaWQgYnJjbWZfc2Rpb2RfZHVtbXlfaXJxaGFuZGxlcihzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTk0LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9OTc9aW50IGJyY21mX3NkaW9kX2ludHJfcmVnaXN0ZXIoc3RydWN0IGJyY21mX3NkaW9fZGV2ICpzZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy0xNTktXHRcdHNkaW9fY2xhaW1faXJxKHNkaW9kZXYtXHUwMDNlZnVuYzEsIGJyY21mX3NkaW9kX2liX2lycWhhbmRsZXIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjE2MDpcdFx0c2Rpb19jbGFpbV9pcnEoc2Rpb2Rldi1cdTAwM2VmdW5jMiwgYnJjbWZfc2Rpb2RfZHVtbXlfaXJxaGFuZGxlcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtMTYxLVx0XHRzZGlvX3JlbGVhc2VfaG9zdChzZGlvZGV2LVx1MDAzZWZ1bmMxKTtcbi0tXG5kcml2ZXJzL3BpbmN0cmwvbWVzb24vcGluY3RybC1tZXNvbi1nMTJhLmM9MTAwMT1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNkaW9fZ3JvdXBzW10gPSB7XG5kcml2ZXJzL3BpbmN0cmwvbWVzb24vcGluY3RybC1tZXNvbi1nMTJhLmMtMTAwMi1cdFwmIzM0O3NkaW9fZDBcJiMzNDssIFwmIzM0O3NkaW9fZDFcJiMzNDssIFwmIzM0O3NkaW9fZDJcJiMzNDssIFwmIzM0O3NkaW9fZDNcJiMzNDssXG5kcml2ZXJzL3BpbmN0cmwvbWVzb24vcGluY3RybC1tZXNvbi1nMTJhLmM6MTAwMzpcdFwmIzM0O3NkaW9fY21kXCYjMzQ7LCBcJiMzNDtzZGlvX2Nsa1wmIzM0OywgXCYjMzQ7c2Rpb19kdW1teVwmIzM0OyxcbmRyaXZlcnMvcGluY3RybC9tZXNvbi9waW5jdHJsLW1lc29uLWcxMmEuYy0xMDA0LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNjQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogVGhpcyBQYXRjaCBpcyBVbmZ1enphYmxlIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB3ZSBoYXZlIGEgcHJvYmxlbS4gVGhlcmUgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGJlIGEgdmlydHVhbCBTRElPIGhvc3QgY29udHJvbGxlciBhdmFpbGFibGUgZm9yIGZ1enppbmcsIHdoaWNoIGlzIHRoZSBmaXJzdCBodXJkbGUuIEJ1dCBldmVuIGlmIHdlIGNvdWxkIHNvbWVob3cgY29uanVyZSBvbmUgdXAsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIFJlYWx0ZWsgYHJ0dzg4YCBXaS1GaSBkcml2ZXIgaGVyZS4gSXQmIzM5O3MgZGVzaWduZWQgdG8gd29yayB3aXRoICpzcGVjaWZpYyogUmVhbHRlayBoYXJkd2FyZSBvbiB0aGUgU0RJTyBidXMuIFRoYXQgbWVhbnMgdGhlIGRyaXZlciYjMzk7cyBgcHJvYmVgIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkIHdpdGhvdXQgdGhhdCBoYXJkd2FyZSBwcmVzZW50LiBUaGVyZWZvcmUsIG5vbmUgb2YgdGhpcyBjb2RlIHdpbGwgZXZlbiBleGVjdXRlIGluIG91ciB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50LgoKQW5kIGV2ZW4gaWYgd2UgY291bGQgaW5qZWN0ICpzb21lKiBTRElPIGRldmljZXMsIHdlJiMzOTtyZSBzdGlsbCBzdHVjayB3aXRoIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlci4gVGhhdCBwcm9tcHRzIHRoaXMgcGFydGljdWxhciBxdWVzdGlvbjogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgdGhhdCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywmIzM0OyB3aGljaCwgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uLCBleHBsaWNpdGx5IGluY2x1ZGVzIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIHRoYXQgcmVseSBvbiBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0JiMzOTtzIG5vdCBlbXVsYXRlZC4KClNvLCByZWFsaXN0aWNhbGx5LCB3ZSYjMzk7cmUgbm90IGdvaW5nIHRvIGJlIGFibGUgdG8gbWFrZSB1c2Ugb2YgdGhpcyBjb2RlIHRvIGZ1enouIEJlZm9yZSBJIHdyaXRlIHRoaXMgb2ZmIGNvbXBsZXRlbHkgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRvIGJlIHN1cmUgdGhhdCBgcnR3ODhgIGhhcyBhIHNvZnR3YXJlIGVtdWxhdGlvbiBtb2RlLiBJZiBpdCBkb2VzLCB0aGVyZSYjMzk7cyBhIGNoYW5jZS4gSWYgbm90LCB0aGlzIGlzIGRlZmluaXRlbHkgYSBkZWFkIGVuZCBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0dzg4LiplbXVsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTcyOQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIHJ0dzg4IFNESU8gUHJvYmUgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgcHJvYmUgZnVuY3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgU0RJTyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBmb3IgdGhlIHJ0dzg4IHNlcmllcy4gTXkgbWFpbiBhcmVhcyBvZiBpbnRlcmVzdCBhcmUsIG9mIGNvdXJzZSwgdGhlIHJlc291cmNlIGFsbG9jYXRpb24sIHRoZSBwbGF0Zm9ybSBkcml2ZXIgc2V0dXAsIGFuZCB0aGUgc3Vic2VxdWVudCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgU0RJTyBidXMuIEkgd2FudCB0byBzZWUgaG93IHRoZXkgaGFuZGxlIHRoZSBjYXJkIGRldGVjdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uIFRoaW5ncyBsaWtlIHBvd2VyIG1hbmFnZW1lbnQgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0aGUgaW5pdGlhbCBicmluZy11cCBhbHdheXMgY2F0Y2ggbXkgZXllLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZXkmIzM5O3JlIGhhbmRsaW5nIGludGVycnVwdHMgY29ycmVjdGx5IGFuZCwgaWYgYXBwbGljYWJsZSwgdGhlIGFzc29jaWF0ZWQgaW50ZXJydXB0IG1hc2tpbmcvdW5tYXNraW5nLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGRlYWwgd2l0aCBhbnkgU0RJTyBzcGVjaWZpYyBxdWlya3Mg4oCTIFJlYWx0ZWsgYWx3YXlzIHNlZW1zIHRvIGhhdmUgYSBmZXcgb2YgdGhvc2UuIFRpbWUgdG8gYW5hbHl6ZSB0aGUgY29kZSBjYXJlZnVsbHkgYW5kIGNvbmZpcm0gaXQgYWxpZ25zIHdpdGggdGhlIGRlc2lnbiBJIHJlbWVtYmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydHdfc2Rpb19wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNjcy5jPTIxPXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnR3Xzg3MjNjc19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzY3MuYy0yMy1cdC5pZF90YWJsZSA9IHJ0d184NzIzY3NfaWRfdGFibGUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNjcy5jOjI0Olx0LnByb2JlID0gcnR3X3NkaW9fcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNjcy5jLTI1LVx0LnJlbW92ZSA9IHJ0d19zZGlvX3JlbW92ZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNkcy5jPTI3PXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnR3Xzg3MjNkc19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNkcy5jLTI4LVx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODcyM2RzLmM6Mjk6XHQucHJvYmUgPSBydHdfc2Rpb19wcm9iZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODcyM2RzLmMtMzAtXHQucmVtb3ZlID0gcnR3X3NkaW9fcmVtb3ZlLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMWNzLmM9MjI9c3RhdGljIHN0cnVjdCBzZGlvX2RyaXZlciBydHdfODgyMWNzX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMWNzLmMtMjMtXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIxY3MuYzoyNDpcdC5wcm9iZSA9IHJ0d19zZGlvX3Byb2JlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIxY3MuYy0yNS1cdC5yZW1vdmUgPSBydHdfc2Rpb19yZW1vdmUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyYnMuYz0yMj1zdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHJ0d184ODIyYnNfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyYnMuYy0yMy1cdC5uYW1lID0gS0JVSUxEX01PRE5BTUUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJicy5jOjI0Olx0LnByb2JlID0gcnR3X3NkaW9fcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJicy5jLTI1LVx0LnJlbW92ZSA9IHJ0d19zZGlvX3JlbW92ZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJjcy5jPTIyPXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnR3Xzg4MjJjc19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJjcy5jLTIzLVx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmNzLmM6MjQ6XHQucHJvYmUgPSBydHdfc2Rpb19wcm9iZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmNzLmMtMjUtXHQucmVtb3ZlID0gcnR3X3NkaW9fcmVtb3ZlLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jPTE3MjQ9c3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtMTczNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jOjE3Mzc6aW50IHJ0d19zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jLTE3MzgtXHRcdCAgIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtMTgxMS19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYzoxODEyOkVYUE9SVF9TWU1CT0wocnR3X3NkaW9fcHJvYmUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtMTgxMy1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaD0xODQ9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJ0d19zZGlvX3BtX29wcztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oLTE4NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oOjE4NjppbnQgcnR3X3NkaW9fcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqc2Rpb19mdW5jLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmgtMTg3LVx0XHQgICBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgKmlkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNTcKCQkJCQkJCW91dHB1dDogMTI1CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU0RJTyBXaS1GaSBEcml2ZXIgUGF0Y2gqKgoKQWxyaWdodCwgbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgU0RJTyBXaS1GaSBkcml2ZXIsIEkmIzM5O3ZlIGNvbWUgdG8gYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNvbmNsdXNpb24uIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBSZWFsdGVrIDg3MjNCUyBTRElPIG1vZHVsZS4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhhcmR3YXJlIGRlcGVuZGVuY2llcy4gQW5kLCBjcml0aWNhbGx5LCB0aGUgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCwgb3IgZXZlbiBzb21ldGhpbmcgbGlrZSBHQ0UsIGlzbiYjMzk7dCBnb2luZyB0byBlbXVsYXRlIHRoYXQgc3BlY2lmaWMgaGFyZHdhcmUuCgpTbywgcmVhbGlzdGljYWxseSwgYW55IGNvZGUgcGF0aHMgdGhpcyBwYXRjaCB0b3VjaGVzIGFyZSAqY29tcGxldGVseSogdW5yZWFjaGFibGUgaW4gYW55IHZpcnR1YWxpemVkIHNldHVwLiBZb3UgY2FuJiMzOTt0IGV4ZWN1dGUgdGhpcyBjb2RlIHdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIHByZXNlbnQuIFRoZXJlZm9yZSwgY29uc2lkZXJpbmcgdGhlIGxpbWl0YXRpb25zIG9mIG91ciBmdXp6aW5nIGVudmlyb25tZW50LCBJJiMzOTttIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQmIzM5O3MgYSB3YXN0ZSBvZiByZXNvdXJjZXMgdG8gZGVkaWNhdGUgdGltZSB0byB0aGlzIHBhdGNoIHJpZ2h0IG5vdy4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGFjdHVhbGx5ICpyZWFjaCogdGhlIG1vZGlmaWVkIGNvZGUgdG8gbWFrZSBmdXp6aW5nIGVmZmVjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUmVhbHRlayBydHc4OCBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBhbmQgZml4aW5nIGxvZ2ljIGZvciB0aGUgUlRMODcyM0JTIFNESU8gbW9kdWxlLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciB0aGF0IHJlcXVpcmVzIGEgcGh5c2ljYWwgU0RJTyBXaS1GaSBjaGlwIHRvIGJlIHByZXNlbnQuIFNpbmNlIFNESU8gaGFyZHdhcmUgYW5kIHRoaXMgc3BlY2lmaWMgUmVhbHRlayBjaGlwIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6eiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUmVhbHRlayBydHc4OCBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBhbmQgZml4aW5nIGxvZ2ljIGZvciB0aGUgUlRMODcyM0JTIFNESU8gbW9kdWxlLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciB0aGF0IHJlcXVpcmVzIGEgcGh5c2ljYWwgU0RJTyBXaS1GaSBjaGlwIHRvIGJlIHByZXNlbnQuIFNpbmNlIFNESU8gaGFyZHdhcmUgYW5kIHRoaXMgc3BlY2lmaWMgUmVhbHRlayBjaGlwIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6eiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6NTg6NDEuMzczNDIzODkzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4MDg1MDA1NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUmVhbHRlayBydHc4OCBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBhbmQgZml4aW5nIGxvZ2ljIGZvciB0aGUgUlRMODcyM0JTIFNESU8gbW9kdWxlLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciB0aGF0IHJlcXVpcmVzIGEgcGh5c2ljYWwgU0RJTyBXaS1GaSBjaGlwIHRvIGJlIHByZXNlbnQuIFNpbmNlIFNESU8gaGFyZHdhcmUgYW5kIHRoaXMgc3BlY2lmaWMgUmVhbHRlayBjaGlwIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6eiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzo1ODo0MS4zNzM0MzAyODNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5OTgxNTkyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRiNmRhYjE0MDI2YmVlOTA3Zjc4OGFhNWU1YWQ4OGM2ZDYyYjVmZWRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDc6NTg6NDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxcbmluZGV4IGM2ZTk4MWJhNzk4NjguLjhmODZmN2MxMmRlNWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxcbkBAIC0xOTQsNiArMTk0LDcgQEAgZW51bSBydHdfY2hpcF90eXBlIHtcXG4gXFx0UlRXX0NISVBfVFlQRV84NzIzRCxcXG4gXFx0UlRXX0NISVBfVFlQRV84ODIxQyxcXG4gXFx0UlRXX0NISVBfVFlQRV84NzAzQixcXG4rXFx0UlRXX0NISVBfVFlQRV84NzIzQixcXG4gXFx0UlRXX0NISVBfVFlQRV84ODIxQSxcXG4gXFx0UlRXX0NISVBfVFlQRV84ODEyQSxcXG4gXFx0UlRXX0NISVBfVFlQRV84ODE0QSxcXG5AQCAtMjE5NCw2ICsyMTk1LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBydHdfY2hpcF9oYXNfdHhfc3RiYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiBcXHRyZXR1cm4gcnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2V0eF9zdGJjO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2lzXzg3MjNicyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdHJldHVybiBydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0IgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHJ0d2Rldi1cXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU87XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdTggcnR3X2FjcXVpcmVfbWFjaWQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG1hY19pZDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXFxuaW5kZXggMDFmZDI5OWFiYjdmZS4uZmRlMjFjODQwYWMwMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcXG5AQCAtMjUzLDEwICsyNTMsMTIgQEAgc3RhdGljIHZvaWQgcnR3X3J4X2ZpbGxfcnhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuIFxcbiBcXHRydHdfcnhfYWRkcl9tYXRjaChydHdkZXYsIHBrdF9zdGF0LCBoZHIpO1xcbiBcXG4tXFx0LyogUnRsODcyM2NzIGRyaXZlciBjaGVja3MgZm9yIHNpemUgXFx1MDAzYyAxNCBvciBzaXplIFxcdTAwM2UgODE5MiBhbmRcXG4tXFx0ICogc2ltcGx5IGRyb3BzIHRoZSBwYWNrZXQuXFxuK1xcdC8qXFxuK1xcdCAqIFJ0bDg3MjNjcyBhbmQgcnRsODcyM2JzIGRyaXZlcnMgY2hlY2sgZm9yIHNpemUgXFx1MDAzYyAxNCBvciBzaXplIFxcdTAwM2UgODE5MlxcbitcXHQgKiBhbmQgc2ltcGx5IGRyb3AgdGhlIHBhY2tldC5cXG4gXFx0ICovXFxuLVxcdGlmIChydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcwM0IgXFx1MDAyNlxcdTAwMjYgcGt0X3N0YXQtXFx1MDAzZXBrdF9sZW4gPT0gMCkge1xcbitcXHRpZiAocGt0X3N0YXQtXFx1MDAzZXBrdF9sZW4gPT0gMCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzAzQiB8fCBydHdfaXNfODcyM2JzKHJ0d2RldikpKSB7XFxuIFxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlZmxhZyB8PSBSWF9GTEFHX05PX1BTRFU7XFxuIFxcdFxcdHJ0d19kYmcocnR3ZGV2LCBSVFdfREJHX1JYLCBcXFwiemVybyBsZW5ndGggcGFja2V0XFxcIik7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xcbmluZGV4IDViNDBkNzRiMTZlZTAuLmU1YmY5Y2JhMDcxZWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xcbkBAIC0yMCw2ICsyMCwxNyBAQFxcbiAjaW5jbHVkZSBcXFwidHguaFxcXCJcXG4gXFxuICNkZWZpbmUgUlRXX1NESU9fSU5ESVJFQ1RfUldfUkVUUklFU1xcdFxcdFxcdDUwXFxuKyNkZWZpbmUgUlRXX1NESU9fT1FUX1RJTUVPVVRfTVNcXHRcXHRcXHRcXHQxMDAwXFxuK1xcbisvKlxcbisgKiA4NzIzQlMgU0RJTyBUWCBGSUZPIGJhY2stcHJlc3N1cmUgd2F0ZXJtYXJrczogc3RvcCB0aGUgbWFjODAyMTEgcXVldWUgb25jZVxcbisgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlXFxuKyAqIFRYIGRyYWluIHBhdGggb25jZSBpdCBmYWxscyBiYWNrIHRvIHRoZSBsb3cgb25lLiBCb3VuZHMgdGhlIHF1ZXVlaW5nIGxhdGVuY3lcXG4rICogdGhhdCBvdGhlcndpc2UgY2F1c2VzIHVwbGluayBidWZmZXJibG9hdCAvIGNvbmdlc3Rpb24gY29sbGFwc2UuXFxuKyAqL1xcbisjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fSElXQVRFUlxcdFxcdFxcdDE2XFxuKyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSXFx0XFx0XFx0OFxcbisjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZXFx0XFx0XFx0bXNlY3NfdG9famlmZmllcygxKVxcbiBcXG4gc3RhdGljIGJvb2wgcnR3X3NkaW9faXNfYnVzX2FkZHIodTMyIGFkZHIpXFxuIHtcXG5AQCAtNTQ4LDEyICs1NTksMTU3IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fcmVhZF9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4ICpidWYsIHNpemVfdCBjb3VudClcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLypcXG4rICogVGhlIGNhY2hlZCBmcmVlIHBhZ2UgY291bnRlcnMgYXJlIGEgZmFzdCBwYXRoIGhpbnQgb25seS4gVGhleSBhcmUgd3JpdHRlblxcbisgKiBmcm9tIHRoZSBzaW5nbGUgdGhyZWFkZWQgVFggd29yayBhbmQsIGZvciBIMkMgYW5kIHJlc2VydmVkIHBhZ2Ugd3JpdGVzLFxcbisgKiBmcm9tIHByb2Nlc3MgY29udGV4dCwgc28gdGhleSBhcmUgYXRvbWljX3Q7IHdoZW5ldmVyIHRoZXkgY2xhaW0gdGhlcmUgaXNcXG4rICogbm90IGVub3VnaCByb29tIHRoZXkgYXJlIHJlc3luY2hyb25pc2VkIGZyb20gdGhlIGNoaXAgYmVmb3JlIHRoZSBjYWxsZXJcXG4rICogZ2l2ZXMgdXAsIHdoaWNoIGFsc28gYWJzb3JicyBhIGxvc3QgdXBkYXRlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgdTMyIGZyZWVfdHhwZylcXG4re1xcbitcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19oaWdoLFxcbitcXHRcXHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0hJR0gpKTtcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19ub3JtYWwsXFxuK1xcdFxcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfTk9STUFMKSk7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbG93LFxcbitcXHRcXHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0xPVykpO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX3B1YixcXG4rXFx0XFx0ICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19QVUIpKTtcXG4rfVxcbitcXG4rLypcXG4rICogUmVmcmVzaCB0aGUgY2FjaGVkIGNvdW50ZXJzIGZyb20gdGhlIGNoaXAuIFJldHVybnMgZmFsc2Ugd2hlbiB0aGUgY2hpcFxcbisgKiByZXBvcnRzIG5vIGZyZWUgcGFnZXMgYXQgYWxsLCB3aGljaCBtZWFucyB0aGUgY291bnRzIGNhbm5vdCBiZSB0cnVzdGVkXFxuKyAqIGFuZCB0aGUgY2FsbGVyIGhhcyB0byBkZWNpZGUgd2hhdCB0byBkbyBpbnN0ZWFkLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgcnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0dTMyIGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xcbitcXG4rXFx0aWYgKCFmcmVlX3R4cGcpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcocnR3ZGV2LCBmcmVlX3R4cGcpO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFNpemUgb2YgdGhlIHB1YmxpYyBwYWdlIHBvb2w6IHdoYXRldmVyIHRoZSB0cmFuc21pdCBwYWdlIGFsbG9jYXRpb24gaGFzXFxuKyAqIGxlZnQgb25jZSB0aGUgcGVyIHF1ZXVlIHBvb2xzIGFyZSB0YWtlbiBvdXQuIEZhaWxzIGlmIHRoZSBhbGxvY2F0aW9uXFxuKyAqIGNhbm5vdCBjb3ZlciB0aGUgcmVzZXJ2ZWQgcXVldWVzLCBzaW5jZSB0aGUgcmVtYWluZGVyIHdvdWxkIHVuZGVyZmxvdyBhbmRcXG4rICogdGhlcmUgd291bGQgYmUgbm8gc2Vuc2libGUgcG9vbCB0byBoYW5kIG91dC5cXG4rICovXFxuK3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX3B1YnFfbnVtKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUxNiAqcHVicV9udW0pXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190YmwgPSBcXHUwMDI2cnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VwYWdlX3RhYmxlWzBdO1xcbitcXHR1MTYgYWNxX3BnX251bSA9IHJ0d2Rldi1cXHUwMDNlZmlmby5hY3FfcGdfbnVtO1xcbitcXHR1MTYgcmVzZXJ2ZWRfbnVtO1xcbitcXG4rXFx0cmVzZXJ2ZWRfbnVtID0gcGdfdGJsLVxcdTAwM2VocV9udW0gKyBwZ190YmwtXFx1MDAzZWxxX251bSArIHBnX3RibC1cXHUwMDNlbnFfbnVtICtcXG4rXFx0XFx0ICAgICAgIHBnX3RibC1cXHUwMDNlZXhxX251bSArIHBnX3RibC1cXHUwMDNlZ2FwcV9udW07XFxuK1xcdGlmIChhY3FfcGdfbnVtIFxcdTAwM2M9IHJlc2VydmVkX251bSkge1xcbitcXHRcXHRydHdfZXJyKHJ0d2RldixcXG4rXFx0XFx0XFx0XFxcIm5vIHRyYW5zbWl0IHBhZ2VzIGxlZnQgZm9yIHRoZSBwdWJsaWMgcXVldWU6ICV1IG9mICV1IHJlc2VydmVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRyZXNlcnZlZF9udW0sIGFjcV9wZ19udW0pO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0KnB1YnFfbnVtID0gYWNxX3BnX251bSAtIHJlc2VydmVkX251bTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic19pbml0X2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsO1xcbitcXHR1MTYgcHVicV9udW07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBTZWVkIGZyb20gdGhlIHBhZ2UgdGFibGUgd2hlbiB0aGUgY2hpcCBoYXMgbm90aGluZyB0byByZXBvcnQgeWV0LiAqL1xcbitcXHRpZiAoIXJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhydHdkZXYpKSB7XFxuK1xcdFxcdHJldCA9IHJ0d19zZGlvXzg3MjNic19wdWJxX251bShydHdkZXYsIFxcdTAwMjZwdWJxX251bSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRwZ190YmwgPSBcXHUwMDI2cnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VwYWdlX3RhYmxlWzBdO1xcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX2hpZ2gsIHBnX3RibC1cXHUwMDNlaHFfbnVtKTtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19ub3JtYWwsIHBnX3RibC1cXHUwMDNlbnFfbnVtKTtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19sb3csIHBnX3RibC1cXHUwMDNlbHFfbnVtKTtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19wdWIsIHB1YnFfbnVtKTtcXG4rXFx0fVxcbitcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfb3F0X2ZyZWUsXFxuK1xcdFxcdCAgIHJ0d19yZWFkOChydHdkZXYsIFJFR19TRElPX09RVF9GUkVFX1BHKSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogU3VtIG9mIHRoZSBxdWV1ZSdzIGRlZGljYXRlZCBjb3VudGVyIGFuZCB0aGUgcHVibGljIHBvb2wsIGNsYW1wZWQgYXQgemVybzpcXG4rICogYSBsb3N0IHVwZGF0ZSBiZXR3ZWVuIHRoZSBjaGVjayBiZWxvdyBhbmQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZygpXFxuKyAqIGNhbiBicmllZmx5IGRyaXZlIGEgY291bnRlciBuZWdhdGl2ZSwgYW5kIGxldHRpbmcgdGhhdCB3cmFwIHdvdWxkIGhpZGUgdGhlXFxuKyAqIHNob3J0YWdlIGluc3RlYWQgb2YgdHJpZ2dlcmluZyBhIHJlc3luYyBmcm9tIHRoZSBjaGlwLlxcbisgKi9cXG4rc3RhdGljIHVuc2lnbmVkIGludCBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgYXRvbWljX3QgKmRlZGljYXRlZClcXG4re1xcbitcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgZnJlZTtcXG4rXFxuK1xcdGZyZWUgPSBhdG9taWNfcmVhZChkZWRpY2F0ZWQpICsgYXRvbWljX3JlYWQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfcHViKTtcXG4rXFxuK1xcdHJldHVybiBmcmVlIFxcdTAwM2UgMCA/IGZyZWUgOiAwO1xcbit9XFxuK1xcbitzdGF0aWMgYXRvbWljX3QgKnJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdHN3aXRjaCAocXVldWUpIHtcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfVkk6XFxuK1xcdFxcdHJldHVybiBcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19ub3JtYWw7XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX0JFOlxcbitcXHRjYXNlIFJUV19UWF9RVUVVRV9CSzpcXG4rXFx0XFx0cmV0dXJuIFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX2xvdztcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfQkNOOlxcbitcXHRjYXNlIFJUV19UWF9RVUVVRV9IMkM6XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX0hJMDpcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfTUdNVDpcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfVk86XFxuK1xcdFxcdHJldHVybiBcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19oaWdoO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgaW50IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcXG4gXFx0XFx0XFx0XFx0ICAgIHNpemVfdCBjb3VudClcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgcGFnZXNfZnJlZSwgcGFnZXNfbmVlZGVkO1xcbiBcXG4tXFx0aWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7XFxuK1xcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcXG4rXFx0XFx0YXRvbWljX3QgKmRlZGljYXRlZDtcXG4rXFxuK1xcdFxcdGRlZGljYXRlZCA9IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSk7XFxuK1xcdFxcdGlmICghZGVkaWNhdGVkKSB7XFxuK1xcdFxcdFxcdHJ0d193YXJuKHJ0d2RldiwgXFxcIlVua25vd24gbWFwcGluZyBmb3IgcXVldWUgJXVcXFxcblxcXCIsIHF1ZXVlKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHBhZ2VzX2ZyZWUgPSBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShydHdkZXYsIGRlZGljYXRlZCk7XFxuK1xcdFxcdHBhZ2VzX25lZWRlZCA9IERJVl9ST1VORF9VUChjb3VudCwgcnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VwYWdlX3NpemUpO1xcbitcXHRcXHRpZiAocGFnZXNfbmVlZGVkIFxcdTAwM2M9IHBhZ2VzX2ZyZWUpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0XFx0cnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHJ0d2Rldik7XFxuK1xcdFxcdHBhZ2VzX2ZyZWUgPSBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShydHdkZXYsIGRlZGljYXRlZCk7XFxuK1xcdH0gZWxzZSBpZiAocnR3X2NoaXBfd2NwdV84MDUxKHJ0d2RldikpIHtcXG4gXFx0XFx0dTMyIGZyZWVfdHhwZztcXG4gXFxuIFxcdFxcdGZyZWVfdHhwZyA9IHJ0d19zZGlvX3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XFxuQEAgLTYzMiw0NCArNzg4LDEyNCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0dW5zaWduZWQgbG9uZyBkZWFkbGluZTtcXG4rXFx0dTggZnJlZTtcXG4rXFxuK1xcdGlmIChhdG9taWNfYWRkX3VubGVzcyhcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfb3F0X2ZyZWUsIC0xLCAwKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRkZWFkbGluZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFJUV19TRElPX09RVF9USU1FT1VUX01TKTtcXG4rXFx0ZG8ge1xcbitcXHRcXHRmcmVlID0gcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpO1xcbitcXHRcXHRpZiAoZnJlZSkge1xcbitcXHRcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9vcXRfZnJlZSwgZnJlZSAtIDEpO1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbitcXHRcXHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XFxuK1xcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlYWRsaW5lKSk7XFxuK1xcbitcXHRyZXR1cm4gLUVCVVNZO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLFxcbitcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IHBhZ2VzKVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGF0b21pY190ICpkZWRpY2F0ZWQ7XFxuK1xcdHVuc2lnbmVkIGludCB0YWtlbjtcXG4rXFx0aW50IGZyZWU7XFxuK1xcbitcXHRkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xcbitcXHRpZiAoIWRlZGljYXRlZClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZnJlZSA9IGF0b21pY19yZWFkKGRlZGljYXRlZCk7XFxuK1xcdHRha2VuID0gbWluX3QodW5zaWduZWQgaW50LCBwYWdlcywgZnJlZSBcXHUwMDNlIDAgPyBmcmVlIDogMCk7XFxuK1xcdGF0b21pY19zdWIodGFrZW4sIGRlZGljYXRlZCk7XFxuK1xcbitcXHRwYWdlcyAtPSB0YWtlbjtcXG4rXFx0aWYgKHBhZ2VzIFxcdTAwMjZcXHUwMDI2IGF0b21pY19zdWJfcmV0dXJuKHBhZ2VzLCBcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19wdWIpIFxcdTAwM2MgMClcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19wdWIsIDApO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3dyaXRlX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0ICAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0Ym9vbCBydGw4NzIzYnMgPSBydHdfaXNfODcyM2JzKHJ0d2Rldik7XFxuK1xcdHVuc2lnbmVkIGludCBvcmlnX2xlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbitcXHR1bnNpZ25lZCBpbnQgcGFnZXM7XFxuK1xcdHNpemVfdCB3cml0ZV9zaXplO1xcbiBcXHRib29sIGJ1c19jbGFpbTtcXG4gXFx0c2l6ZV90IHR4c2l6ZTtcXG4gXFx0dTMyIHR4YWRkcjtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHR4YWRkciA9IHJ0d19zZGlvX2dldF90eF9hZGRyKHJ0d2Rldiwgc2tiLVxcdTAwM2VsZW4sIHF1ZXVlKTtcXG4tXFx0aWYgKCF0eGFkZHIpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAocnRsODcyM2JzKSB7XFxuK1xcdFxcdHR4c2l6ZSA9IHJvdW5kX3VwKG9yaWdfbGVuLCA0KTtcXG4rXFx0XFx0d3JpdGVfc2l6ZSA9IHR4c2l6ZSBcXHUwMDNlIFJUV19TRElPX0JMT0NLX1NJWkUgP1xcbitcXHRcXHRcXHQgICAgIHJvdW5kX3VwKHR4c2l6ZSwgUlRXX1NESU9fQkxPQ0tfU0laRSkgOiB0eHNpemU7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLVxcdTAwM2VzZGlvX2Z1bmMsIG9yaWdfbGVuKTtcXG4rXFx0XFx0d3JpdGVfc2l6ZSA9IHR4c2l6ZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHdyaXRlX3NpemUgXFx1MDAzZSBvcmlnX2xlbikge1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgcGFkZGluZyA9IHdyaXRlX3NpemUgLSBvcmlnX2xlbjtcXG4gXFxuLVxcdHR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLVxcdTAwM2VzZGlvX2Z1bmMsIHNrYi1cXHUwMDNlbGVuKTtcXG4rXFx0XFx0aWYgKHNrYl90YWlscm9vbShza2IpIFxcdTAwM2MgcGFkZGluZykge1xcbitcXHRcXHRcXHRyZXQgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHBhZGRpbmcgLSBza2JfdGFpbHJvb20oc2tiKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIEdGUF9LRVJORUwpO1xcbitcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuK1xcdFxcdHNrYl9wdXRfemVybyhza2IsIHBhZGRpbmcpO1xcbitcXHR9XFxuK1xcbitcXHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHR4c2l6ZSwgcXVldWUpO1xcbitcXHRpZiAoIXR4YWRkcikge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dF90cmltO1xcbitcXHR9XFxuIFxcbiBcXHRyZXQgPSBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSwgdHhzaXplKTtcXG4gXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0Z290byBvdXRfdHJpbTtcXG4rXFxuK1xcdGlmIChydGw4NzIzYnMpIHtcXG4rXFx0XFx0cmV0ID0gcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHJ0d2Rldik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gb3V0X3RyaW07XFxuK1xcdH1cXG4gXFxuIFxcdGlmICghSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylza2ItXFx1MDAzZWRhdGEsIFJUV19TRElPX0RBVEFfUFRSX0FMSUdOKSlcXG4gXFx0XFx0cnR3X3dhcm4ocnR3ZGV2LCBcXFwiR290IHVuYWxpZ25lZCBTS0IgaW4gJXMoKSBmb3IgcXVldWUgJXVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCBfX2Z1bmNfXywgcXVldWUpO1xcbiBcXG4gXFx0YnVzX2NsYWltID0gcnR3X3NkaW9fYnVzX2NsYWltX25lZWRlZChydHdzZGlvKTtcXG4tXFxuIFxcdGlmIChidXNfY2xhaW0pXFxuIFxcdFxcdHNkaW9fY2xhaW1faG9zdChydHdzZGlvLVxcdTAwM2VzZGlvX2Z1bmMpO1xcbi1cXG4tXFx0cmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLVxcdTAwM2VzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLVxcdTAwM2VkYXRhLCB0eHNpemUpO1xcbi1cXG4rXFx0cmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLVxcdTAwM2VzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLVxcdTAwM2VkYXRhLFxcbitcXHRcXHRcXHQgICAgICAgd3JpdGVfc2l6ZSk7XFxuIFxcdGlmIChidXNfY2xhaW0pXFxuIFxcdFxcdHNkaW9fcmVsZWFzZV9ob3N0KHJ0d3NkaW8tXFx1MDAzZXNkaW9fZnVuYyk7XFxuIFxcbi1cXHRpZiAocmV0KVxcbitcXHRpZiAocmV0KSB7XFxuIFxcdFxcdHJ0d193YXJuKHJ0d2RldixcXG4gXFx0XFx0XFx0IFxcXCJGYWlsZWQgdG8gd3JpdGUgJXp1IGJ5dGUocykgdG8gU0RJTyBwb3J0IDB4JTA4eFxcXCIsXFxuLVxcdFxcdFxcdCB0eHNpemUsIHR4YWRkcik7XFxuK1xcdFxcdFxcdCB3cml0ZV9zaXplLCB0eGFkZHIpO1xcbitcXHR9IGVsc2UgaWYgKHJ0bDg3MjNicykge1xcbitcXHRcXHRwYWdlcyA9IERJVl9ST1VORF9VUCh0eHNpemUsIHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlcGFnZV9zaXplKTtcXG4rXFx0XFx0cnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhydHdkZXYsIHF1ZXVlLCBwYWdlcyk7XFxuK1xcdH1cXG4gXFxuK291dF90cmltOlxcbitcXHRpZiAod3JpdGVfc2l6ZSBcXHUwMDNlIG9yaWdfbGVuKVxcbitcXHRcXHRza2JfdHJpbShza2IsIG9yaWdfbGVuKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtNjc3LDcgKzkxMywxMSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbml0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4gXFxuLVxcdHJ0d3NkaW8tXFx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUIHwgUkVHX1NESU9fSElNUl9DUFdNMTtcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcXG4rXFx0XFx0cnR3c2Rpby1cXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1Q7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cnR3c2Rpby1cXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfFxcbitcXHRcXHRcXHRcXHQgICAgUkVHX1NESU9fSElNUl9DUFdNMTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuQEAgLTY4NSw2ICs5MjUsNyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFx0dTggc2l6ZSwgdGltZW91dDtcXG4gXFxuIFxcdHN3aXRjaCAocnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VpZCkge1xcbitcXHRjYXNlIFJUV19DSElQX1RZUEVfODcyM0I6XFxuIFxcdGNhc2UgUlRXX0NISVBfVFlQRV84NzAzQjpcXG4gXFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg4MjFBOlxcbiBcXHRjYXNlIFJUV19DSElQX1RZUEVfODgxMkE6XFxuQEAgLTcxMiw2ICs5NTMsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFx0XFx0ICAgIEZJRUxEX1BSRVAoQklUX0RNQV9BR0dfVE9fVjEsIHRpbWVvdXQpKTtcXG4gXFxuIFxcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfTU9ERSk7XFxuK1xcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXFxuK1xcdFxcdHJ0d193cml0ZThfbWFzayhydHdkZXYsIFJFR19SWERNQV9NT0RFLCBCSVRfRE1BX0JVUlNUX0NOVCwgMHgzKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbkBAIC03NDksOSArOTkyLDYxIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fc2V0dXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFJlcHJvZ3JhbSB0aGUgcXVldWUgcGFnZSBhbGxvY2F0aW9uIGlmIHRoZSBjaGlwIGNhbWUgdXAgd2l0aCBub25lLiBUaGlzIGlzXFxuKyAqIGEgcmVwYWlyIHBhdGgsIG5vdCBwYXJ0IG9mIHRoZSBub3JtYWwgc3RhcnQgc2VxdWVuY2U6IGEgbm9uLXplcm8gZnJlZSBwYWdlXFxuKyAqIGNvdW50IG1lYW5zIHRoZSBhbGxvY2F0aW9uIGxhdGNoZWQgZHVyaW5nIHBvd2VyIG9uIGFuZCBtdXN0IGJlIGxlZnQgYWxvbmUsXFxuKyAqIGFuZCB3aXRob3V0IGEgdHJhbnNtaXQgcGFnZSBwb29sIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGl2aWRlIHVwIGVpdGhlci5cXG4rICovXFxuK3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcnR3X2NoaXBfaW5mbyAqY2hpcCA9IHJ0d2Rldi1cXHUwMDNlY2hpcDtcXG4rXFx0c3RydWN0IHJ0d19maWZvX2NvbmYgKmZpZm8gPSBcXHUwMDI2cnR3ZGV2LVxcdTAwM2VmaWZvO1xcbitcXHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcXG4rXFx0dTMyIGZyZWVfdHhwZztcXG4rXFx0dTE2IHB1YnFfbnVtO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0ZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XFxuK1xcdGlmIChmcmVlX3R4cGcgfHwgIWZpZm8tXFx1MDAzZWFjcV9wZ19udW0pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0ID0gcnR3X3NkaW9fODcyM2JzX3B1YnFfbnVtKHJ0d2RldiwgXFx1MDAyNnB1YnFfbnVtKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHBnX3RibCA9IFxcdTAwMjZjaGlwLVxcdTAwM2VwYWdlX3RhYmxlWzBdO1xcbitcXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOX05QUSxcXG4rXFx0XFx0ICAgIEJJVF9SUVBOX05FKHBnX3RibC1cXHUwMDNlbnFfbnVtLCBwZ190YmwtXFx1MDAzZWV4cV9udW0pKTtcXG4rXFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUlFQTixcXG4rXFx0XFx0ICAgIEJJVF9SUVBOX0hMUChwZ190YmwtXFx1MDAzZWhxX251bSwgcGdfdGJsLVxcdTAwM2VscV9udW0sIHB1YnFfbnVtKSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBydHdfc2Rpb19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiB7XFxuK1xcdHUzMiBjbGVhcjtcXG4rXFxuK1xcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcXG4rXFx0XFx0aW50IHJldCA9IHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHJ0d2Rldik7XFxuK1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0cmV0ID0gcnR3X3NkaW9fODcyM2JzX2luaXRfZnJlZV90eHBnKHJ0d2Rldik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuIFxcdHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihydHdkZXYpO1xcbitcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xcbitcXHRcXHRjbGVhciA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSKSBcXHUwMDI2IFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTSztcXG4rXFx0XFx0aWYgKGNsZWFyKVxcbitcXHRcXHRcXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGNsZWFyKTtcXG4rXFx0fVxcbitcXG4gXFx0cnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChydHdkZXYpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTgxNSw3ICsxMTEwLDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2tpY2tfb2ZmKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4gXFxuLVxcdHF1ZXVlX3dvcmsocnR3c2Rpby1cXHUwMDNldHh3cSwgXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cXHUwMDNld29yayk7XFxuK1xcdC8qXFxuK1xcdCAqIEEgcmV0cnkgbWF5IGFscmVhZHkgYmUgcGVuZGluZyB3aXRoIGEgZGVsYXk7IHJlLWFybSBpdCBzbyBhIG5ld2x5XFxuK1xcdCAqIHF1ZXVlZCBmcmFtZSBpcyBub3QgaGVsZCBiYWNrIGJ5IGl0LlxcbitcXHQgKi9cXG4rXFx0bW9kX2RlbGF5ZWRfd29yayhydHdzZGlvLVxcdTAwM2V0eHdxLCBcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhLVxcdTAwM2V3b3JrLCAwKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fbGlua19wcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVudGVyKVxcbkBAIC04MzEsNiArMTEzMCw4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2ludGVyZmFjZV9jZmcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFxuIFxcdHZhbCA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMKTtcXG4gXFx0dmFsIFxcdTAwMjY9IDB4ZmZmODtcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcXG4rXFx0XFx0dmFsIHw9IEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRTtcXG4gXFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMLCB2YWwpO1xcbiB9XFxuIFxcbkBAIC05MjIsNiArMTIyMyw1MCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3dyaXRlX2RhdGFfaDJjKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4ICpidWYsIHUzMiBzaXplKVxcbiBcXHRyZXR1cm4gcnR3X3NkaW9fd3JpdGVfZGF0YShydHdkZXYsIFxcdTAwMjZwa3RfaW5mbywgc2tiLCBSVFdfVFhfUVVFVUVfSDJDKTtcXG4gfVxcbiBcXG4rLypcXG4rICogQmFjay1wcmVzc3VyZSBvbiB0aGUgZGF0YSBBQ3MgKEJLL0JFL1ZJL1ZPKTogb25jZSB0aGUgc29mdHdhcmUgRklGTyBmaWxsc1xcbisgKiBwYXN0IHRoZSBoaWdoIHdhdGVybWFyaywgc3RvcCB0aGUgY29ycmVzcG9uZGluZyBtYWM4MDIxMSBxdWV1ZSBzbyBpdCBzdG9wc1xcbisgKiBoYW5kaW5nIGZyYW1lcyBkb3duLCB3aGljaCBib3VuZHMgdGhlIHF1ZXVlaW5nIGxhdGVuY3kuIFRoZSBxdWV1ZSBpcyB3b2tlblxcbisgKiBhZ2FpbiBmcm9tIHRoZSBUWCBkcmFpbiBwYXRoIG9uY2UgdGhlIEZJRk8gZmFsbHMgYmFjayB0byB0aGUgbG93IHdhdGVybWFyay5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19zdG9wX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICB1MTYgcV9tYXApXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpIHx8IHF1ZXVlIFxcdTAwM2U9IFJUV19UWF9RVUVVRV9CQ04pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmIChydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHNrYl9xdWV1ZV9sZW4oXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkgXFx1MDAzYyBSVFdfU0RJT19UWF9GSUZPX0hJV0FURVIpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlX3N0b3BwZWRbcXVldWVdID0gdHJ1ZTtcXG4rXFx0aWVlZTgwMjExX3N0b3BfcXVldWUocnR3ZGV2LVxcdTAwM2VodywgcV9tYXApO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfd2FrZV90eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTE2IHFfbWFwKVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fCBxdWV1ZSBcXHUwMDNlPSBSVFdfVFhfUVVFVUVfQkNOKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoIXJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlX3N0b3BwZWRbcXVldWVdKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoc2tiX3F1ZXVlX2xlbihcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfcXVldWVbcXVldWVdKSBcXHUwMDNlIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cnR3c2Rpby1cXHUwMDNldHhfcXVldWVfc3RvcHBlZFtxdWV1ZV0gPSBmYWxzZTtcXG4rXFx0aWVlZTgwMjExX3dha2VfcXVldWUocnR3ZGV2LVxcdTAwM2VodywgcV9tYXApO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3R4X3dyaXRlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IHJ0d190eF9wa3RfaW5mbyAqcGt0X2luZm8sXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5AQCAtOTM3LDYgKzEyODIsOCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3R4X3dyaXRlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuIFxcbiBcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfcXVldWVbcXVldWVdLCBza2IpO1xcbiBcXG4rXFx0cnR3X3NkaW9fODcyM2JzX3N0b3BfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTEwOTUsNiArMTQ0MiwxNCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYylcXG4gXFx0XFx0cnR3X3NkaW9fcnhfaXNyKHJ0d2Rldik7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFJUTDg3MjNCUyBrZWVwcyByYWlzaW5nIHRoZSBpbnRlcnJ1cHQgYWZ0ZXIgcmVzdW1lIGlmIHVuZGVmaW5lZFxcbitcXHQgKiBzdGF0dXMgYml0cyBhcmUgd3JpdHRlbiBiYWNrLCBzbyBhY2tub3dsZWRnZSBvbmx5IHRoZSBiaXRzIHRoaXNcXG4rXFx0ICogZHJpdmVyIGRlZmluZXMuIE90aGVyIGNoaXBzIGtlZXAgdGhlIGV4aXN0aW5nIGJlaGF2aW91ci5cXG4rXFx0ICovXFxuK1xcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXFxuK1xcdFxcdGhpc3IgXFx1MDAyNj0gUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xcbitcXG4gXFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBoaXNyKTtcXG4gXFxuIFxcdHJ0d3NkaW8tXFx1MDAzZWlycV90aHJlYWQgPSBOVUxMO1xcbkBAIC0xMjMxLDMzICsxNTg2LDgxIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbiBcXHRpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4tXFx0XFx0XFx0XFx0ICAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcXG4rLypcXG4rICogU2VuZCBvbmUgZnJhbWUgZnJvbSBAcXVldWUuIFJldHVybnMgMCB3aGVuIGEgZnJhbWUgd2FzIHdyaXR0ZW4sIDEgd2hlbiB0aGVcXG4rICogcXVldWUgd2FzIGVtcHR5IGFuZCBhIG5lZ2F0aXZlIGVycm5vIHdoZW4gdGhlIHdyaXRlIGZhaWxlZCwgaW4gd2hpY2ggY2FzZVxcbisgKiB0aGUgZnJhbWUgaXMgcHV0IGJhY2sgYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLlxcbisgKi9cXG4rc3RhdGljIGludCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHR1MTYgcV9tYXA7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfcXVldWVbcXVldWVdKTtcXG4gXFx0aWYgKCFza2IpXFxuLVxcdFxcdHJldHVybjtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuIFxcbitcXHRxX21hcCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xcbiBcXHRyZXQgPSBydHdfc2Rpb193cml0ZV9wb3J0KHJ0d2Rldiwgc2tiLCBxdWV1ZSk7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0c2tiX3F1ZXVlX2hlYWQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSwgc2tiKTtcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbiBcXHRydHdfc2Rpb19pbmRpY2F0ZV90eF9zdGF0dXMocnR3ZGV2LCBza2IpO1xcbitcXG4rXFx0cnR3X3NkaW9fODcyM2JzX3dha2VfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSwgcV9tYXApO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIERlY2lkZSB3aGV0aGVyIHRoZSBSVEw4NzIzQlMgd2FudHMgdGhlIFRYIHdvcmsgdG8gcnVuIGFnYWluLCBhbmQgaWYgc29cXG4rICogYXJyYW5nZSBpdCBhbmQgdGVsbCB0aGUgY2FsbGVyIHRvIHN0b3AgZHJhaW5pbmcuIFR3byBjYXNlcyBuZWVkIGl0LlxcbisgKlxcbisgKiBBIHRyYW5zbWl0IHBhZ2Ugb3Igb3V0cHV0IHF1ZXVlIHNob3J0YWdlIGFuZCBhIGZhaWxlZCBza2IgZXhwYW5zaW9uIGFyZVxcbisgKiB0cmFuc2llbnQgYW5kIGxlYXZlIHRoZSBmcmFtZSBxdWV1ZWQsIHNvIGNvbWUgYmFjayBmb3IgaXQgc2hvcnRseS4gVGhhdFxcbisgKiBtYXR0ZXJzIG9uY2UgdGhlIG1hYzgwMjExIHF1ZXVlIGNhbiBiZSBzdG9wcGVkOiBhIHN0b3BwZWQgcXVldWUgaXMgaGFuZGVkXFxuKyAqIG5vIGZ1cnRoZXIgZnJhbWVzLCBzbyBub3RoaW5nIGVsc2Ugd291bGQga2ljayB0aGlzIHdvcmsgaXRlbSBhbmQgdGhlIGFjY2Vzc1xcbisgKiBjYXRlZ29yeSB3b3VsZCBzdGF5IHN0b3BwZWQgZm9yIGdvb2QuIFRoZSByZW1haW5pbmcgZXJyb3JzIGFyZSBsb2dnZWQgd2hlcmVcXG4rICogdGhleSBoYXBwZW4gYW5kIGFyZSBub3QgcmV0cmllZC5cXG4rICpcXG4rICogQWZ0ZXIgYSBtYW5hZ2VtZW50IGZyYW1lLCByZXN0YXJ0IGZyb20gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcXVldWUgc28gdGhlXFxuKyAqIGpvaW4gc2VxdWVuY2UgaXMgbm90IGhlbGQgdXAgYmVoaW5kIGEgZGF0YSBiYWNrbG9nLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgcnR3X3NkaW9fODcyM2JzX3Jlc2NoZWR1bGVfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp3b3JrX2RhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSwgaW50IHJldClcXG4re1xcbitcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHR1bnNpZ25lZCBsb25nIGRlbGF5O1xcbitcXG4rXFx0aWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChyZXQgPT0gLUVCVVNZIHx8IHJldCA9PSAtRU5PTUVNKVxcbitcXHRcXHRkZWxheSA9IFJUV19TRElPX1RYX1JFVFJZX0RFTEFZO1xcbitcXHRlbHNlIGlmIChyZXQgPT0gMCBcXHUwMDI2XFx1MDAyNiBxdWV1ZSA9PSBSVFdfVFhfUVVFVUVfTUdNVClcXG4rXFx0XFx0ZGVsYXkgPSAwO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHF1ZXVlX2RlbGF5ZWRfd29yayhydHdzZGlvLVxcdTAwM2V0eHdxLCBcXHUwMDI2d29ya19kYXRhLVxcdTAwM2V3b3JrLCBkZWxheSk7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSAqd29ya19kYXRhID1cXG4tXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsIHdvcmspO1xcbitcXHRcXHRjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLFxcbitcXHRcXHRcXHQgICAgIHdvcmspO1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW87XFxuIFxcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XFxuLVxcdGludCBsaW1pdCwgcXVldWU7XFxuK1xcdGludCBsaW1pdCwgcXVldWUsIHJldDtcXG4gXFxuIFxcdHJ0d2RldiA9IHdvcmtfZGF0YS1cXHUwMDNlcnR3ZGV2O1xcbiBcXHRydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG5AQCAtMTI2Nyw3ICsxNjcwLDEzIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXG4gXFx0Zm9yIChxdWV1ZSA9IFJUS19NQVhfVFhfUVVFVUVfTlVNIC0gMTsgcXVldWUgXFx1MDAzZT0gMDsgcXVldWUtLSkge1xcbiBcXHRcXHRmb3IgKGxpbWl0ID0gMDsgbGltaXQgXFx1MDAzYyAxMDAwOyBsaW1pdCsrKSB7XFxuLVxcdFxcdFxcdHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XFxuK1xcdFxcdFxcdHJldCA9IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdFxcdGlmIChydHdfc2Rpb184NzIzYnNfcmVzY2hlZHVsZV90eChydHdkZXYsIHdvcmtfZGF0YSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBxdWV1ZSwgcmV0KSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0XFx0XFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfcXVldWVbcXVldWVdKSlcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuQEAgLTEyOTQsMTQgKzE3MDMsMTYgQEAgc3RhdGljIGludCBydHdfc2Rpb19pbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHR9XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkrKylcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJUS19NQVhfVFhfUVVFVUVfTlVNOyBpKyspIHtcXG4gXFx0XFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfcXVldWVbaV0pO1xcbitcXHRcXHRydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZV9zdG9wcGVkW2ldID0gZmFsc2U7XFxuK1xcdH1cXG4gXFx0cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhID0ga21hbGxvY19vYmooKnJ0d3NkaW8tXFx1MDAzZXR4X2hhbmRsZXJfZGF0YSk7XFxuIFxcdGlmICghcnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhKVxcbiBcXHRcXHRnb3RvIGVycl9kZXN0cm95X3dxO1xcbiBcXG4gXFx0cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhLVxcdTAwM2VydHdkZXYgPSBydHdkZXY7XFxuLVxcdElOSVRfV09SSyhcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhLVxcdTAwM2V3b3JrLCBydHdfc2Rpb190eF9oYW5kbGVyKTtcXG4rXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cXHUwMDNld29yaywgcnR3X3NkaW9fdHhfaGFuZGxlcik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTEzMTUsNiArMTcyNiw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2RlaW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiBcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbiBcXHRpbnQgaTtcXG4gXFxuK1xcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhLVxcdTAwM2V3b3JrKTtcXG4gXFx0ZGVzdHJveV93b3JrcXVldWUocnR3c2Rpby1cXHUwMDNldHh3cSk7XFxuIFxcdGtmcmVlKHJ0d3NkaW8tXFx1MDAzZXR4X2hhbmRsZXJfZGF0YSk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXFxuaW5kZXggNDU3ZThiMDIzODBlNS4uY2VjM2RkMWM0YjJlNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXFxuQEAgLTIyLDYgKzIyLDcgQEBcXG4gXFxuIC8qIFNESU8gVHggQ29udHJvbCAqL1xcbiAjZGVmaW5lIFJFR19TRElPX1RYX0NUUkxcXHRcXHRcXHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMDApXFxuKyNkZWZpbmUgQklUX1NESU9fVFhfQ1RSTF9BTFdBWVNfUkVDT0dOSVpFXFx0QklUKDQpXFxuIFxcbiAvKlNESU8gc3RhdHVzIHRpbWVvdXQqL1xcbiAjZGVmaW5lIFJFR19TRElPX1RJTUVPVVRcXHRcXHRcXHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMDIpXFxuQEAgLTc3LDYgKzc4LDE0IEBAXFxuIC8qIHRoZSBmb2xsb3dpbmcgdHdvIGFyZSBSVEw4MTg4IFNESU8gU3BlY2lmaWMgKi9cXG4gI2RlZmluZSBSRUdfU0RJT19ISVNSX01DVV9FUlJcXHRcXHRcXHRCSVQoMjgpXFxuICNkZWZpbmUgUkVHX1NESU9fSElTUl9UU0ZfQklUMzJfVE9HR0xFXFx0XFx0QklUKDI5KVxcbisjZGVmaW5lIFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTS1xcdFxcdFxcXFxcXG4rXFx0KFJFR19TRElPX0hJU1JfVFhFUlIgfCBSRUdfU0RJT19ISVNSX1JYRVJSIHwgXFxcXFxcbitcXHQgUkVHX1NESU9fSElTUl9UWEZPVlcgfCBSRUdfU0RJT19ISVNSX1JYRk9WVyB8IFxcXFxcXG4rXFx0IFJFR19TRElPX0hJU1JfVFhCQ05PSyB8IFJFR19TRElPX0hJU1JfVFhCQ05FUlIgfCBcXFxcXFxuK1xcdCBSRUdfU0RJT19ISVNSX0MySENNRCB8IFJFR19TRElPX0hJU1JfQ1BXTTEgfCBcXFxcXFxuK1xcdCBSRUdfU0RJT19ISVNSX0NQV00yIHwgUkVHX1NESU9fSElTUl9IU0lTUl9JTkQgfCBcXFxcXFxuK1xcdCBSRUdfU0RJT19ISVNSX0dUSU5UM19JTkQgfCBSRUdfU0RJT19ISVNSX0dUSU5UNF9JTkQgfCBcXFxcXFxuK1xcdCBSRUdfU0RJT19ISVNSX1BTVElNRU9VVCB8IFJFR19TRElPX0hJU1JfT0NQSU5UKVxcbiBcXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAqL1xcbiAjZGVmaW5lIFJFR19TRElPX0hDUFdNXFx0XFx0XFx0XFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDE5KVxcbkBAIC04Niw2ICs5NSwxMCBAQFxcbiAjZGVmaW5lIFJFR19TRElPX09RVF9GUkVFX1BHXFx0XFx0XFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDFFKVxcbiAvKiBGcmVlIFR4IEJ1ZmZlciBQYWdlICovXFxuICNkZWZpbmUgUkVHX1NESU9fRlJFRV9UWFBHXFx0XFx0XFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDIwKVxcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfSElHSFxcdFxcdFxcdEdFTk1BU0soNywgMClcXG4rI2RlZmluZSBCSVRfRlJFRV9UWFBHX05PUk1BTFxcdFxcdFxcdEdFTk1BU0soMTUsIDgpXFxuKyNkZWZpbmUgQklUX0ZSRUVfVFhQR19MT1dcXHRcXHRcXHRHRU5NQVNLKDIzLCAxNilcXG4rI2RlZmluZSBCSVRfRlJFRV9UWFBHX1BVQlxcdFxcdFxcdEdFTk1BU0soMzEsIDI0KVxcbiAvKiBIQ0kgQ3VycmVudCBQb3dlciBNb2RlIDEgKi9cXG4gI2RlZmluZSBSRUdfU0RJT19IQ1BXTTFcXHRcXHRcXHRcXHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMjQpXFxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgMiAqL1xcbkBAIC0xNDMsNyArMTU2LDcgQEAgc3RydWN0IHJ0d19zZGlvX3R4X2RhdGEge1xcbiB9O1xcbiBcXG4gc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSB7XFxuLVxcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xcbitcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7XFxuIFxcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XFxuIH07XFxuIFxcbkBAIC0xNTksNiArMTcyLDEzIEBAIHN0cnVjdCBydHdfc2RpbyB7XFxuIFxcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp0eHdxO1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp0eF9oYW5kbGVyX2RhdGE7XFxuIFxcdHN0cnVjdCBza19idWZmX2hlYWQgdHhfcXVldWVbUlRLX01BWF9UWF9RVUVVRV9OVU1dO1xcbitcXHRib29sIHR4X3F1ZXVlX3N0b3BwZWRbUlRLX01BWF9UWF9RVUVVRV9OVU1dO1xcbitcXG4rXFx0YXRvbWljX3QgZnJlZV9wZ19oaWdoO1xcbitcXHRhdG9taWNfdCBmcmVlX3BnX25vcm1hbDtcXG4rXFx0YXRvbWljX3QgZnJlZV9wZ19sb3c7XFxuK1xcdGF0b21pY190IGZyZWVfcGdfcHViO1xcbitcXHRhdG9taWNfdCB0eF9vcXRfZnJlZTtcXG4gfTtcXG4gXFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBydHdfc2Rpb19wbV9vcHM7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguY1xcbmluZGV4IDg3ODZiYmI0MjFjMmIuLjRlMTEwYTQ1N2U3MWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jXFxuQEAgLTIwOCw4ICsyMDgsOSBAQCB2b2lkIHJ0d190eF9yZXBvcnRfZW5xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBzbilcXG4gXFx0X19za2JfcXVldWVfdGFpbChcXHUwMDI2dHhfcmVwb3J0LVxcdTAwM2VxdWV1ZSwgc2tiKTtcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dHhfcmVwb3J0LVxcdTAwM2VxX2xvY2ssIGZsYWdzKTtcXG4gXFxuLVxcdGlmIChydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0QgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHJ0d2Rldi1cXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQilcXG4rXFx0aWYgKChydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0QgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICBydHdkZXYtXFx1MDAzZWhjaS50eXBlID09IFJUV19IQ0lfVFlQRV9VU0IpIHx8XFxuK1xcdCAgICBydHdfaXNfODcyM2JzKHJ0d2RldikpXFxuIFxcdFxcdHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDI1MDApO1xcbiBcXG4gXFx0bW9kX3RpbWVyKFxcdTAwMjZ0eF9yZXBvcnQtXFx1MDAzZXB1cmdlX3RpbWVyLCBqaWZmaWVzICsgdGltZW91dCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA3OjU4OjQxLjg3NDAxNDMzN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUxMzA3ODg3ODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUmVhbHRlayBydHc4OCBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBhbmQgZml4aW5nIGxvZ2ljIGZvciB0aGUgUlRMODcyM0JTIFNESU8gbW9kdWxlLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciB0aGF0IHJlcXVpcmVzIGEgcGh5c2ljYWwgU0RJTyBXaS1GaSBjaGlwIHRvIGJlIHByZXNlbnQuIFNpbmNlIFNESU8gaGFyZHdhcmUgYW5kIHRoaXMgc3BlY2lmaWMgUmVhbHRlayBjaGlwIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6eiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYjZkYWIxNDAyNmJlZTkwN2Y3ODhhYTVlNWFkODhjNmQ2MmI1ZmVkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDc6NTg6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG5pbmRleCBjNmU5ODFiYTc5ODY4Li44Zjg2ZjdjMTJkZTVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG5AQCAtMTk0LDYgKzE5NCw3IEBAIGVudW0gcnR3X2NoaXBfdHlwZSB7XG4gXHRSVFdfQ0hJUF9UWVBFXzg3MjNELFxuIFx0UlRXX0NISVBfVFlQRV84ODIxQyxcbiBcdFJUV19DSElQX1RZUEVfODcwM0IsXG4rXHRSVFdfQ0hJUF9UWVBFXzg3MjNCLFxuIFx0UlRXX0NISVBfVFlQRV84ODIxQSxcbiBcdFJUV19DSElQX1RZUEVfODgxMkEsXG4gXHRSVFdfQ0hJUF9UWVBFXzg4MTRBLFxuQEAgLTIxOTQsNiArMjE5NSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2NoaXBfaGFzX3R4X3N0YmMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHJldHVybiBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2V0eF9zdGJjO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2lzXzg3MjNicyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuK3tcbitcdHJldHVybiBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MjNCIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHJ0d2Rldi1cdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfU0RJTztcbit9XG4rXG4gc3RhdGljIGlubGluZSB1OCBydHdfYWNxdWlyZV9tYWNpZChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbWFjX2lkO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuaW5kZXggMDFmZDI5OWFiYjdmZS4uZmRlMjFjODQwYWMwMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXG5AQCAtMjUzLDEwICsyNTMsMTIgQEAgc3RhdGljIHZvaWQgcnR3X3J4X2ZpbGxfcnhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4gXG4gXHRydHdfcnhfYWRkcl9tYXRjaChydHdkZXYsIHBrdF9zdGF0LCBoZHIpO1xuIFxuLVx0LyogUnRsODcyM2NzIGRyaXZlciBjaGVja3MgZm9yIHNpemUgXHUwMDNjIDE0IG9yIHNpemUgXHUwMDNlIDgxOTIgYW5kXG4tXHQgKiBzaW1wbHkgZHJvcHMgdGhlIHBhY2tldC5cbitcdC8qXG4rXHQgKiBSdGw4NzIzY3MgYW5kIHJ0bDg3MjNicyBkcml2ZXJzIGNoZWNrIGZvciBzaXplIFx1MDAzYyAxNCBvciBzaXplIFx1MDAzZSA4MTkyXG4rXHQgKiBhbmQgc2ltcGx5IGRyb3AgdGhlIHBhY2tldC5cbiBcdCAqL1xuLVx0aWYgKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcwM0IgXHUwMDI2XHUwMDI2IHBrdF9zdGF0LVx1MDAzZXBrdF9sZW4gPT0gMCkge1xuK1x0aWYgKHBrdF9zdGF0LVx1MDAzZXBrdF9sZW4gPT0gMCBcdTAwMjZcdTAwMjZcbitcdCAgICAocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzAzQiB8fCBydHdfaXNfODcyM2JzKHJ0d2RldikpKSB7XG4gXHRcdHJ4X3N0YXR1cy1cdTAwM2VmbGFnIHw9IFJYX0ZMQUdfTk9fUFNEVTtcbiBcdFx0cnR3X2RiZyhydHdkZXYsIFJUV19EQkdfUlgsIFwiemVybyBsZW5ndGggcGFja2V0XCIpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcbmluZGV4IDViNDBkNzRiMTZlZTAuLmU1YmY5Y2JhMDcxZWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcbkBAIC0yMCw2ICsyMCwxNyBAQFxuICNpbmNsdWRlIFwidHguaFwiXG4gXG4gI2RlZmluZSBSVFdfU0RJT19JTkRJUkVDVF9SV19SRVRSSUVTXHRcdFx0NTBcbisjZGVmaW5lIFJUV19TRElPX09RVF9USU1FT1VUX01TXHRcdFx0XHQxMDAwXG4rXG4rLypcbisgKiA4NzIzQlMgU0RJTyBUWCBGSUZPIGJhY2stcHJlc3N1cmUgd2F0ZXJtYXJrczogc3RvcCB0aGUgbWFjODAyMTEgcXVldWUgb25jZVxuKyAqIHRoZSBwZXItQUMgc29mdHdhcmUgRklGTyBmaWxscyBwYXN0IHRoZSBoaWdoIHdhdGVybWFyaywgYW5kIHdha2UgaXQgZnJvbSB0aGVcbisgKiBUWCBkcmFpbiBwYXRoIG9uY2UgaXQgZmFsbHMgYmFjayB0byB0aGUgbG93IG9uZS4gQm91bmRzIHRoZSBxdWV1ZWluZyBsYXRlbmN5XG4rICogdGhhdCBvdGhlcndpc2UgY2F1c2VzIHVwbGluayBidWZmZXJibG9hdCAvIGNvbmdlc3Rpb24gY29sbGFwc2UuXG4rICovXG4rI2RlZmluZSBSVFdfU0RJT19UWF9GSUZPX0hJV0FURVJcdFx0XHQxNlxuKyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSXHRcdFx0OFxuKyNkZWZpbmUgUlRXX1NESU9fVFhfUkVUUllfREVMQVlcdFx0XHRtc2Vjc190b19qaWZmaWVzKDEpXG4gXG4gc3RhdGljIGJvb2wgcnR3X3NkaW9faXNfYnVzX2FkZHIodTMyIGFkZHIpXG4ge1xuQEAgLTU0OCwxMiArNTU5LDE1NyBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3JlYWRfcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCAqYnVmLCBzaXplX3QgY291bnQpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKlxuKyAqIFRoZSBjYWNoZWQgZnJlZSBwYWdlIGNvdW50ZXJzIGFyZSBhIGZhc3QgcGF0aCBoaW50IG9ubHkuIFRoZXkgYXJlIHdyaXR0ZW5cbisgKiBmcm9tIHRoZSBzaW5nbGUgdGhyZWFkZWQgVFggd29yayBhbmQsIGZvciBIMkMgYW5kIHJlc2VydmVkIHBhZ2Ugd3JpdGVzLFxuKyAqIGZyb20gcHJvY2VzcyBjb250ZXh0LCBzbyB0aGV5IGFyZSBhdG9taWNfdDsgd2hlbmV2ZXIgdGhleSBjbGFpbSB0aGVyZSBpc1xuKyAqIG5vdCBlbm91Z2ggcm9vbSB0aGV5IGFyZSByZXN5bmNocm9uaXNlZCBmcm9tIHRoZSBjaGlwIGJlZm9yZSB0aGUgY2FsbGVyXG4rICogZ2l2ZXMgdXAsIHdoaWNoIGFsc28gYWJzb3JicyBhIGxvc3QgdXBkYXRlLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbitcdFx0XHRcdFx0ICAgIHUzMiBmcmVlX3R4cGcpXG4re1xuK1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuK1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaCxcbitcdFx0ICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19ISUdIKSk7XG4rXHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19ub3JtYWwsXG4rXHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfTk9STUFMKSk7XG4rXHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3csXG4rXHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfTE9XKSk7XG4rXHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIsXG4rXHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfUFVCKSk7XG4rfVxuK1xuKy8qXG4rICogUmVmcmVzaCB0aGUgY2FjaGVkIGNvdW50ZXJzIGZyb20gdGhlIGNoaXAuIFJldHVybnMgZmFsc2Ugd2hlbiB0aGUgY2hpcFxuKyAqIHJlcG9ydHMgbm8gZnJlZSBwYWdlcyBhdCBhbGwsIHdoaWNoIG1lYW5zIHRoZSBjb3VudHMgY2Fubm90IGJlIHRydXN0ZWRcbisgKiBhbmQgdGhlIGNhbGxlciBoYXMgdG8gZGVjaWRlIHdoYXQgdG8gZG8gaW5zdGVhZC5cbisgKi9cbitzdGF0aWMgYm9vbCBydHdfc2Rpb184NzIzYnNfc3luY19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHR1MzIgZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XG4rXG4rXHRpZiAoIWZyZWVfdHhwZylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rLypcbisgKiBTaXplIG9mIHRoZSBwdWJsaWMgcGFnZSBwb29sOiB3aGF0ZXZlciB0aGUgdHJhbnNtaXQgcGFnZSBhbGxvY2F0aW9uIGhhc1xuKyAqIGxlZnQgb25jZSB0aGUgcGVyIHF1ZXVlIHBvb2xzIGFyZSB0YWtlbiBvdXQuIEZhaWxzIGlmIHRoZSBhbGxvY2F0aW9uXG4rICogY2Fubm90IGNvdmVyIHRoZSByZXNlcnZlZCBxdWV1ZXMsIHNpbmNlIHRoZSByZW1haW5kZXIgd291bGQgdW5kZXJmbG93IGFuZFxuKyAqIHRoZXJlIHdvdWxkIGJlIG5vIHNlbnNpYmxlIHBvb2wgdG8gaGFuZCBvdXQuXG4rICovXG4rc3RhdGljIGludCBydHdfc2Rpb184NzIzYnNfcHVicV9udW0oc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTE2ICpwdWJxX251bSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibCA9IFx1MDAyNnJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXBhZ2VfdGFibGVbMF07XG4rXHR1MTYgYWNxX3BnX251bSA9IHJ0d2Rldi1cdTAwM2VmaWZvLmFjcV9wZ19udW07XG4rXHR1MTYgcmVzZXJ2ZWRfbnVtO1xuK1xuK1x0cmVzZXJ2ZWRfbnVtID0gcGdfdGJsLVx1MDAzZWhxX251bSArIHBnX3RibC1cdTAwM2VscV9udW0gKyBwZ190YmwtXHUwMDNlbnFfbnVtICtcbitcdFx0ICAgICAgIHBnX3RibC1cdTAwM2VleHFfbnVtICsgcGdfdGJsLVx1MDAzZWdhcHFfbnVtO1xuK1x0aWYgKGFjcV9wZ19udW0gXHUwMDNjPSByZXNlcnZlZF9udW0pIHtcbitcdFx0cnR3X2VycihydHdkZXYsXG4rXHRcdFx0XCJubyB0cmFuc21pdCBwYWdlcyBsZWZ0IGZvciB0aGUgcHVibGljIHF1ZXVlOiAldSBvZiAldSByZXNlcnZlZFxcblwiLFxuK1x0XHRcdHJlc2VydmVkX251bSwgYWNxX3BnX251bSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0KnB1YnFfbnVtID0gYWNxX3BnX251bSAtIHJlc2VydmVkX251bTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic19pbml0X2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuK3tcbitcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcdGNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsO1xuK1x0dTE2IHB1YnFfbnVtO1xuK1x0aW50IHJldDtcbitcbitcdC8qIFNlZWQgZnJvbSB0aGUgcGFnZSB0YWJsZSB3aGVuIHRoZSBjaGlwIGhhcyBub3RoaW5nIHRvIHJlcG9ydCB5ZXQuICovXG4rXHRpZiAoIXJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhydHdkZXYpKSB7XG4rXHRcdHJldCA9IHJ0d19zZGlvXzg3MjNic19wdWJxX251bShydHdkZXYsIFx1MDAyNnB1YnFfbnVtKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRwZ190YmwgPSBcdTAwMjZydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3RhYmxlWzBdO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19oaWdoLCBwZ190YmwtXHUwMDNlaHFfbnVtKTtcbitcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbm9ybWFsLCBwZ190YmwtXHUwMDNlbnFfbnVtKTtcbitcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93LCBwZ190YmwtXHUwMDNlbHFfbnVtKTtcbitcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViLCBwdWJxX251bSk7XG4rXHR9XG4rXG4rXHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfb3F0X2ZyZWUsXG4rXHRcdCAgIHJ0d19yZWFkOChydHdkZXYsIFJFR19TRElPX09RVF9GUkVFX1BHKSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBTdW0gb2YgdGhlIHF1ZXVlJ3MgZGVkaWNhdGVkIGNvdW50ZXIgYW5kIHRoZSBwdWJsaWMgcG9vbCwgY2xhbXBlZCBhdCB6ZXJvOlxuKyAqIGEgbG9zdCB1cGRhdGUgYmV0d2VlbiB0aGUgY2hlY2sgYmVsb3cgYW5kIHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcoKVxuKyAqIGNhbiBicmllZmx5IGRyaXZlIGEgY291bnRlciBuZWdhdGl2ZSwgYW5kIGxldHRpbmcgdGhhdCB3cmFwIHdvdWxkIGhpZGUgdGhlXG4rICogc2hvcnRhZ2UgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIGEgcmVzeW5jIGZyb20gdGhlIGNoaXAuXG4rICovXG4rc3RhdGljIHVuc2lnbmVkIGludCBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuK1x0XHRcdFx0XHQgICAgICAgYXRvbWljX3QgKmRlZGljYXRlZClcbit7XG4rXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHRpbnQgZnJlZTtcbitcbitcdGZyZWUgPSBhdG9taWNfcmVhZChkZWRpY2F0ZWQpICsgYXRvbWljX3JlYWQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1Yik7XG4rXG4rXHRyZXR1cm4gZnJlZSBcdTAwM2UgMCA/IGZyZWUgOiAwO1xuK31cbitcbitzdGF0aWMgYXRvbWljX3QgKnJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUpXG4re1xuK1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuK1xuK1x0c3dpdGNoIChxdWV1ZSkge1xuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfVkk6XG4rXHRcdHJldHVybiBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbm9ybWFsO1xuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfQkU6XG4rXHRjYXNlIFJUV19UWF9RVUVVRV9CSzpcbitcdFx0cmV0dXJuIFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3c7XG4rXHRjYXNlIFJUV19UWF9RVUVVRV9CQ046XG4rXHRjYXNlIFJUV19UWF9RVUVVRV9IMkM6XG4rXHRjYXNlIFJUV19UWF9RVUVVRV9ISTA6XG4rXHRjYXNlIFJUV19UWF9RVUVVRV9NR01UOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfVk86XG4rXHRcdHJldHVybiBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaDtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgaW50IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcbiBcdFx0XHRcdCAgICBzaXplX3QgY291bnQpXG4ge1xuIFx0dW5zaWduZWQgaW50IHBhZ2VzX2ZyZWUsIHBhZ2VzX25lZWRlZDtcbiBcbi1cdGlmIChydHdfY2hpcF93Y3B1XzgwNTEocnR3ZGV2KSkge1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xuK1x0XHRhdG9taWNfdCAqZGVkaWNhdGVkO1xuK1xuK1x0XHRkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xuK1x0XHRpZiAoIWRlZGljYXRlZCkge1xuK1x0XHRcdHJ0d193YXJuKHJ0d2RldiwgXCJVbmtub3duIG1hcHBpbmcgZm9yIHF1ZXVlICV1XFxuXCIsIHF1ZXVlKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1xuK1x0XHRwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpO1xuK1x0XHRwYWdlc19uZWVkZWQgPSBESVZfUk9VTkRfVVAoY291bnQsIHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4rXHRcdGlmIChwYWdlc19uZWVkZWQgXHUwMDNjPSBwYWdlc19mcmVlKVxuK1x0XHRcdHJldHVybiAwO1xuK1xuK1x0XHRydHdfc2Rpb184NzIzYnNfc3luY19mcmVlX3R4cGcocnR3ZGV2KTtcbitcdFx0cGFnZXNfZnJlZSA9IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHJ0d2RldiwgZGVkaWNhdGVkKTtcbitcdH0gZWxzZSBpZiAocnR3X2NoaXBfd2NwdV84MDUxKHJ0d2RldikpIHtcbiBcdFx0dTMyIGZyZWVfdHhwZztcbiBcbiBcdFx0ZnJlZV90eHBnID0gcnR3X3NkaW9fcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbkBAIC02MzIsNDQgKzc4OCwxMjQgQEAgc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBydHdfc2Rpb184NzIzYnNfd2FpdF90eF9vcXQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHR1bnNpZ25lZCBsb25nIGRlYWRsaW5lO1xuK1x0dTggZnJlZTtcbitcbitcdGlmIChhdG9taWNfYWRkX3VubGVzcyhcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCAtMSwgMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0ZGVhZGxpbmUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhSVFdfU0RJT19PUVRfVElNRU9VVF9NUyk7XG4rXHRkbyB7XG4rXHRcdGZyZWUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRyk7XG4rXHRcdGlmIChmcmVlKSB7XG4rXHRcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCBmcmVlIC0gMSk7XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuK1x0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVhZGxpbmUpKTtcbitcbitcdHJldHVybiAtRUJVU1k7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXG4rXHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgcGFnZXMpXG4re1xuK1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuK1x0YXRvbWljX3QgKmRlZGljYXRlZDtcbitcdHVuc2lnbmVkIGludCB0YWtlbjtcbitcdGludCBmcmVlO1xuK1xuK1x0ZGVkaWNhdGVkID0gcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlKTtcbitcdGlmICghZGVkaWNhdGVkKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKTtcbitcdHRha2VuID0gbWluX3QodW5zaWduZWQgaW50LCBwYWdlcywgZnJlZSBcdTAwM2UgMCA/IGZyZWUgOiAwKTtcbitcdGF0b21pY19zdWIodGFrZW4sIGRlZGljYXRlZCk7XG4rXG4rXHRwYWdlcyAtPSB0YWtlbjtcbitcdGlmIChwYWdlcyBcdTAwMjZcdTAwMjYgYXRvbWljX3N1Yl9yZXR1cm4ocGFnZXMsIFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIpIFx1MDAzYyAwKVxuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIsIDApO1xuK31cbitcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3dyaXRlX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgICAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHRib29sIHJ0bDg3MjNicyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTtcbitcdHVuc2lnbmVkIGludCBvcmlnX2xlbiA9IHNrYi1cdTAwM2VsZW47XG4rXHR1bnNpZ25lZCBpbnQgcGFnZXM7XG4rXHRzaXplX3Qgd3JpdGVfc2l6ZTtcbiBcdGJvb2wgYnVzX2NsYWltO1xuIFx0c2l6ZV90IHR4c2l6ZTtcbiBcdHUzMiB0eGFkZHI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0dHhhZGRyID0gcnR3X3NkaW9fZ2V0X3R4X2FkZHIocnR3ZGV2LCBza2ItXHUwMDNlbGVuLCBxdWV1ZSk7XG4tXHRpZiAoIXR4YWRkcilcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAocnRsODcyM2JzKSB7XG4rXHRcdHR4c2l6ZSA9IHJvdW5kX3VwKG9yaWdfbGVuLCA0KTtcbitcdFx0d3JpdGVfc2l6ZSA9IHR4c2l6ZSBcdTAwM2UgUlRXX1NESU9fQkxPQ0tfU0laRSA/XG4rXHRcdFx0ICAgICByb3VuZF91cCh0eHNpemUsIFJUV19TRElPX0JMT0NLX1NJWkUpIDogdHhzaXplO1xuK1x0fSBlbHNlIHtcbitcdFx0dHhzaXplID0gc2Rpb19hbGlnbl9zaXplKHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jLCBvcmlnX2xlbik7XG4rXHRcdHdyaXRlX3NpemUgPSB0eHNpemU7XG4rXHR9XG4rXG4rXHRpZiAod3JpdGVfc2l6ZSBcdTAwM2Ugb3JpZ19sZW4pIHtcbitcdFx0dW5zaWduZWQgaW50IHBhZGRpbmcgPSB3cml0ZV9zaXplIC0gb3JpZ19sZW47XG4gXG4tXHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIHNrYi1cdTAwM2VsZW4pO1xuK1x0XHRpZiAoc2tiX3RhaWxyb29tKHNrYikgXHUwMDNjIHBhZGRpbmcpIHtcbitcdFx0XHRyZXQgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCxcbitcdFx0XHRcdFx0ICAgICAgIHBhZGRpbmcgLSBza2JfdGFpbHJvb20oc2tiKSxcbitcdFx0XHRcdFx0ICAgICAgIEdGUF9LRVJORUwpO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4rXHRcdHNrYl9wdXRfemVybyhza2IsIHBhZGRpbmcpO1xuK1x0fVxuK1xuK1x0dHhhZGRyID0gcnR3X3NkaW9fZ2V0X3R4X2FkZHIocnR3ZGV2LCB0eHNpemUsIHF1ZXVlKTtcbitcdGlmICghdHhhZGRyKSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gb3V0X3RyaW07XG4rXHR9XG4gXG4gXHRyZXQgPSBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSwgdHhzaXplKTtcbiBcdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4rXHRcdGdvdG8gb3V0X3RyaW07XG4rXG4rXHRpZiAocnRsODcyM2JzKSB7XG4rXHRcdHJldCA9IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChydHdkZXYpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gb3V0X3RyaW07XG4rXHR9XG4gXG4gXHRpZiAoIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpc2tiLVx1MDAzZWRhdGEsIFJUV19TRElPX0RBVEFfUFRSX0FMSUdOKSlcbiBcdFx0cnR3X3dhcm4ocnR3ZGV2LCBcIkdvdCB1bmFsaWduZWQgU0tCIGluICVzKCkgZm9yIHF1ZXVlICV1XFxuXCIsXG4gXHRcdFx0IF9fZnVuY19fLCBxdWV1ZSk7XG4gXG4gXHRidXNfY2xhaW0gPSBydHdfc2Rpb19idXNfY2xhaW1fbmVlZGVkKHJ0d3NkaW8pO1xuLVxuIFx0aWYgKGJ1c19jbGFpbSlcbiBcdFx0c2Rpb19jbGFpbV9ob3N0KHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jKTtcbi1cbi1cdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLVx1MDAzZWRhdGEsIHR4c2l6ZSk7XG4tXG4rXHRyZXQgPSBzZGlvX21lbWNweV90b2lvKHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cdTAwM2VkYXRhLFxuK1x0XHRcdCAgICAgICB3cml0ZV9zaXplKTtcbiBcdGlmIChidXNfY2xhaW0pXG4gXHRcdHNkaW9fcmVsZWFzZV9ob3N0KHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jKTtcbiBcbi1cdGlmIChyZXQpXG4rXHRpZiAocmV0KSB7XG4gXHRcdHJ0d193YXJuKHJ0d2RldixcbiBcdFx0XHQgXCJGYWlsZWQgdG8gd3JpdGUgJXp1IGJ5dGUocykgdG8gU0RJTyBwb3J0IDB4JTA4eFwiLFxuLVx0XHRcdCB0eHNpemUsIHR4YWRkcik7XG4rXHRcdFx0IHdyaXRlX3NpemUsIHR4YWRkcik7XG4rXHR9IGVsc2UgaWYgKHJ0bDg3MjNicykge1xuK1x0XHRwYWdlcyA9IERJVl9ST1VORF9VUCh0eHNpemUsIHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4rXHRcdHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcocnR3ZGV2LCBxdWV1ZSwgcGFnZXMpO1xuK1x0fVxuIFxuK291dF90cmltOlxuK1x0aWYgKHdyaXRlX3NpemUgXHUwMDNlIG9yaWdfbGVuKVxuK1x0XHRza2JfdHJpbShza2IsIG9yaWdfbGVuKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTY3Nyw3ICs5MTMsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5pdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiBcbi1cdHJ0d3NkaW8tXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfCBSRUdfU0RJT19ISU1SX0NQV00xO1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbitcdFx0cnR3c2Rpby1cdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVDtcbitcdGVsc2VcbitcdFx0cnR3c2Rpby1cdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVCB8XG4rXHRcdFx0XHQgICAgUkVHX1NESU9fSElNUl9DUFdNMTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG5AQCAtNjg1LDYgKzkyNSw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0dTggc2l6ZSwgdGltZW91dDtcbiBcbiBcdHN3aXRjaCAocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQpIHtcbitcdGNhc2UgUlRXX0NISVBfVFlQRV84NzIzQjpcbiBcdGNhc2UgUlRXX0NISVBfVFlQRV84NzAzQjpcbiBcdGNhc2UgUlRXX0NISVBfVFlQRV84ODIxQTpcbiBcdGNhc2UgUlRXX0NISVBfVFlQRV84ODEyQTpcbkBAIC03MTIsNiArOTUzLDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRcdCAgICBGSUVMRF9QUkVQKEJJVF9ETUFfQUdHX1RPX1YxLCB0aW1lb3V0KSk7XG4gXG4gXHRydHdfd3JpdGU4X3NldChydHdkZXYsIFJFR19SWERNQV9NT0RFLCBCSVRfRE1BX01PREUpO1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbitcdFx0cnR3X3dyaXRlOF9tYXNrKHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfQlVSU1RfQ05ULCAweDMpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG5AQCAtNzQ5LDkgKzk5Miw2MSBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3NldHVwKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLypcbisgKiBSZXByb2dyYW0gdGhlIHF1ZXVlIHBhZ2UgYWxsb2NhdGlvbiBpZiB0aGUgY2hpcCBjYW1lIHVwIHdpdGggbm9uZS4gVGhpcyBpc1xuKyAqIGEgcmVwYWlyIHBhdGgsIG5vdCBwYXJ0IG9mIHRoZSBub3JtYWwgc3RhcnQgc2VxdWVuY2U6IGEgbm9uLXplcm8gZnJlZSBwYWdlXG4rICogY291bnQgbWVhbnMgdGhlIGFsbG9jYXRpb24gbGF0Y2hlZCBkdXJpbmcgcG93ZXIgb24gYW5kIG11c3QgYmUgbGVmdCBhbG9uZSxcbisgKiBhbmQgd2l0aG91dCBhIHRyYW5zbWl0IHBhZ2UgcG9vbCB0aGVyZSBpcyBub3RoaW5nIHRvIGRpdmlkZSB1cCBlaXRoZXIuXG4rICovXG4rc3RhdGljIGludCBydHdfc2Rpb184NzIzYnNfY2hlY2tfcnFwbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydHdfY2hpcF9pbmZvICpjaGlwID0gcnR3ZGV2LVx1MDAzZWNoaXA7XG4rXHRzdHJ1Y3QgcnR3X2ZpZm9fY29uZiAqZmlmbyA9IFx1MDAyNnJ0d2Rldi1cdTAwM2VmaWZvO1xuK1x0Y29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190Ymw7XG4rXHR1MzIgZnJlZV90eHBnO1xuK1x0dTE2IHB1YnFfbnVtO1xuK1x0aW50IHJldDtcbitcbitcdGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xuK1x0aWYgKGZyZWVfdHhwZyB8fCAhZmlmby1cdTAwM2VhY3FfcGdfbnVtKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldCA9IHJ0d19zZGlvXzg3MjNic19wdWJxX251bShydHdkZXYsIFx1MDAyNnB1YnFfbnVtKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRwZ190YmwgPSBcdTAwMjZjaGlwLVx1MDAzZXBhZ2VfdGFibGVbMF07XG4rXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOX05QUSxcbitcdFx0ICAgIEJJVF9SUVBOX05FKHBnX3RibC1cdTAwM2VucV9udW0sIHBnX3RibC1cdTAwM2VleHFfbnVtKSk7XG4rXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOLFxuK1x0XHQgICAgQklUX1JRUE5fSExQKHBnX3RibC1cdTAwM2VocV9udW0sIHBnX3RibC1cdTAwM2VscV9udW0sIHB1YnFfbnVtKSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBydHdfc2Rpb19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbitcdHUzMiBjbGVhcjtcbitcbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbitcdFx0aW50IHJldCA9IHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHJ0d2Rldik7XG4rXG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0cmV0ID0gcnR3X3NkaW9fODcyM2JzX2luaXRfZnJlZV90eHBnKHJ0d2Rldik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbiBcdHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihydHdkZXYpO1xuK1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xuK1x0XHRjbGVhciA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSKSBcdTAwMjYgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xuK1x0XHRpZiAoY2xlYXIpXG4rXHRcdFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBjbGVhcik7XG4rXHR9XG4rXG4gXHRydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHJ0d2Rldik7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC04MTUsNyArMTExMCwxMSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9raWNrX29mZihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiBcbi1cdHF1ZXVlX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLCBcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrKTtcbitcdC8qXG4rXHQgKiBBIHJldHJ5IG1heSBhbHJlYWR5IGJlIHBlbmRpbmcgd2l0aCBhIGRlbGF5OyByZS1hcm0gaXQgc28gYSBuZXdseVxuK1x0ICogcXVldWVkIGZyYW1lIGlzIG5vdCBoZWxkIGJhY2sgYnkgaXQuXG4rXHQgKi9cbitcdG1vZF9kZWxheWVkX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLCBcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrLCAwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fbGlua19wcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVudGVyKVxuQEAgLTgzMSw2ICsxMTMwLDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW50ZXJmYWNlX2NmZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFxuIFx0dmFsID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwpO1xuIFx0dmFsIFx1MDAyNj0gMHhmZmY4O1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbitcdFx0dmFsIHw9IEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRTtcbiBcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fVFhfQ1RSTCwgdmFsKTtcbiB9XG4gXG5AQCAtOTIyLDYgKzEyMjMsNTAgQEAgc3RhdGljIGludCBydHdfc2Rpb193cml0ZV9kYXRhX2gyYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCAqYnVmLCB1MzIgc2l6ZSlcbiBcdHJldHVybiBydHdfc2Rpb193cml0ZV9kYXRhKHJ0d2RldiwgXHUwMDI2cGt0X2luZm8sIHNrYiwgUlRXX1RYX1FVRVVFX0gyQyk7XG4gfVxuIFxuKy8qXG4rICogQmFjay1wcmVzc3VyZSBvbiB0aGUgZGF0YSBBQ3MgKEJLL0JFL1ZJL1ZPKTogb25jZSB0aGUgc29mdHdhcmUgRklGTyBmaWxsc1xuKyAqIHBhc3QgdGhlIGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHRoZSBjb3JyZXNwb25kaW5nIG1hYzgwMjExIHF1ZXVlIHNvIGl0IHN0b3BzXG4rICogaGFuZGluZyBmcmFtZXMgZG93biwgd2hpY2ggYm91bmRzIHRoZSBxdWV1ZWluZyBsYXRlbmN5LiBUaGUgcXVldWUgaXMgd29rZW5cbisgKiBhZ2FpbiBmcm9tIHRoZSBUWCBkcmFpbiBwYXRoIG9uY2UgdGhlIEZJRk8gZmFsbHMgYmFjayB0byB0aGUgbG93IHdhdGVybWFyay5cbisgKi9cbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3RvcF90eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuK1x0XHRcdFx0XHQgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUsXG4rXHRcdFx0XHRcdCAgdTE2IHFfbWFwKVxuK3tcbitcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcbitcdGlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpIHx8IHF1ZXVlIFx1MDAzZT0gUlRXX1RYX1FVRVVFX0JDTilcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKHJ0d3NkaW8tXHUwMDNldHhfcXVldWVfc3RvcHBlZFtxdWV1ZV0pXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChza2JfcXVldWVfbGVuKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdKSBcdTAwM2MgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRydHdzZGlvLVx1MDAzZXR4X3F1ZXVlX3N0b3BwZWRbcXVldWVdID0gdHJ1ZTtcbitcdGllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0d2Rldi1cdTAwM2VodywgcV9tYXApO1xuK31cbitcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfd2FrZV90eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuK1x0XHRcdFx0XHQgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUsXG4rXHRcdFx0XHRcdCAgdTE2IHFfbWFwKVxuK3tcbitcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcbitcdGlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpIHx8IHF1ZXVlIFx1MDAzZT0gUlRXX1RYX1FVRVVFX0JDTilcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKCFydHdzZGlvLVx1MDAzZXR4X3F1ZXVlX3N0b3BwZWRbcXVldWVdKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkgXHUwMDNlIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUilcbitcdFx0cmV0dXJuO1xuK1xuK1x0cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSA9IGZhbHNlO1xuK1x0aWVlZTgwMjExX3dha2VfcXVldWUocnR3ZGV2LVx1MDAzZWh3LCBxX21hcCk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgcnR3X3NkaW9fdHhfd3JpdGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiBcdFx0XHQgICAgIHN0cnVjdCBydHdfdHhfcGt0X2luZm8gKnBrdF9pbmZvLFxuIFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbkBAIC05MzcsNiArMTI4Miw4IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fdHhfd3JpdGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiBcbiBcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdLCBza2IpO1xuIFxuK1x0cnR3X3NkaW9fODcyM2JzX3N0b3BfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEwOTUsNiArMTQ0MiwxNCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYylcbiBcdFx0cnR3X3NkaW9fcnhfaXNyKHJ0d2Rldik7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogUlRMODcyM0JTIGtlZXBzIHJhaXNpbmcgdGhlIGludGVycnVwdCBhZnRlciByZXN1bWUgaWYgdW5kZWZpbmVkXG4rXHQgKiBzdGF0dXMgYml0cyBhcmUgd3JpdHRlbiBiYWNrLCBzbyBhY2tub3dsZWRnZSBvbmx5IHRoZSBiaXRzIHRoaXNcbitcdCAqIGRyaXZlciBkZWZpbmVzLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuXG4rXHQgKi9cbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4rXHRcdGhpc3IgXHUwMDI2PSBSVFdfU0RJT19ISVNSX0NMRUFSX01BU0s7XG4rXG4gXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGhpc3IpO1xuIFxuIFx0cnR3c2Rpby1cdTAwM2VpcnFfdGhyZWFkID0gTlVMTDtcbkBAIC0xMjMxLDMzICsxNTg2LDgxIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFx0aWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4tXHRcdFx0XHQgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxuKy8qXG4rICogU2VuZCBvbmUgZnJhbWUgZnJvbSBAcXVldWUuIFJldHVybnMgMCB3aGVuIGEgZnJhbWUgd2FzIHdyaXR0ZW4sIDEgd2hlbiB0aGVcbisgKiBxdWV1ZSB3YXMgZW1wdHkgYW5kIGEgbmVnYXRpdmUgZXJybm8gd2hlbiB0aGUgd3JpdGUgZmFpbGVkLCBpbiB3aGljaCBjYXNlXG4rICogdGhlIGZyYW1lIGlzIHB1dCBiYWNrIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZS5cbisgKi9cbitzdGF0aWMgaW50IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbitcdFx0XHRcdCAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0dTE2IHFfbWFwO1xuIFx0aW50IHJldDtcbiBcbiBcdHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdKTtcbiBcdGlmICghc2tiKVxuLVx0XHRyZXR1cm47XG4rXHRcdHJldHVybiAxO1xuIFxuK1x0cV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiBcdHJldCA9IHJ0d19zZGlvX3dyaXRlX3BvcnQocnR3ZGV2LCBza2IsIHF1ZXVlKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0c2tiX3F1ZXVlX2hlYWQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4tXHRcdHJldHVybjtcbitcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiBcdHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhydHdkZXYsIHNrYik7XG4rXG4rXHRydHdfc2Rpb184NzIzYnNfd2FrZV90eF9xdWV1ZShydHdkZXYsIHF1ZXVlLCBxX21hcCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBEZWNpZGUgd2hldGhlciB0aGUgUlRMODcyM0JTIHdhbnRzIHRoZSBUWCB3b3JrIHRvIHJ1biBhZ2FpbiwgYW5kIGlmIHNvXG4rICogYXJyYW5nZSBpdCBhbmQgdGVsbCB0aGUgY2FsbGVyIHRvIHN0b3AgZHJhaW5pbmcuIFR3byBjYXNlcyBuZWVkIGl0LlxuKyAqXG4rICogQSB0cmFuc21pdCBwYWdlIG9yIG91dHB1dCBxdWV1ZSBzaG9ydGFnZSBhbmQgYSBmYWlsZWQgc2tiIGV4cGFuc2lvbiBhcmVcbisgKiB0cmFuc2llbnQgYW5kIGxlYXZlIHRoZSBmcmFtZSBxdWV1ZWQsIHNvIGNvbWUgYmFjayBmb3IgaXQgc2hvcnRseS4gVGhhdFxuKyAqIG1hdHRlcnMgb25jZSB0aGUgbWFjODAyMTEgcXVldWUgY2FuIGJlIHN0b3BwZWQ6IGEgc3RvcHBlZCBxdWV1ZSBpcyBoYW5kZWRcbisgKiBubyBmdXJ0aGVyIGZyYW1lcywgc28gbm90aGluZyBlbHNlIHdvdWxkIGtpY2sgdGhpcyB3b3JrIGl0ZW0gYW5kIHRoZSBhY2Nlc3NcbisgKiBjYXRlZ29yeSB3b3VsZCBzdGF5IHN0b3BwZWQgZm9yIGdvb2QuIFRoZSByZW1haW5pbmcgZXJyb3JzIGFyZSBsb2dnZWQgd2hlcmVcbisgKiB0aGV5IGhhcHBlbiBhbmQgYXJlIG5vdCByZXRyaWVkLlxuKyAqXG4rICogQWZ0ZXIgYSBtYW5hZ2VtZW50IGZyYW1lLCByZXN0YXJ0IGZyb20gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcXVldWUgc28gdGhlXG4rICogam9pbiBzZXF1ZW5jZSBpcyBub3QgaGVsZCB1cCBiZWhpbmQgYSBkYXRhIGJhY2tsb2cuXG4rICovXG4rc3RhdGljIGJvb2wgcnR3X3NkaW9fODcyM2JzX3Jlc2NoZWR1bGVfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp3b3JrX2RhdGEsXG4rXHRcdFx0XHRcdCAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSwgaW50IHJldClcbit7XG4rXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHR1bnNpZ25lZCBsb25nIGRlbGF5O1xuK1xuK1x0aWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChyZXQgPT0gLUVCVVNZIHx8IHJldCA9PSAtRU5PTUVNKVxuK1x0XHRkZWxheSA9IFJUV19TRElPX1RYX1JFVFJZX0RFTEFZO1xuK1x0ZWxzZSBpZiAocmV0ID09IDAgXHUwMDI2XHUwMDI2IHF1ZXVlID09IFJUV19UWF9RVUVVRV9NR01UKVxuK1x0XHRkZWxheSA9IDA7XG4rXHRlbHNlXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHF1ZXVlX2RlbGF5ZWRfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsIFx1MDAyNndvcmtfZGF0YS1cdTAwM2V3b3JrLCBkZWxheSk7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSAqd29ya19kYXRhID1cbi1cdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsIHdvcmspO1xuK1x0XHRjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLFxuK1x0XHRcdCAgICAgd29yayk7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW87XG4gXHRzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2O1xuLVx0aW50IGxpbWl0LCBxdWV1ZTtcbitcdGludCBsaW1pdCwgcXVldWUsIHJldDtcbiBcbiBcdHJ0d2RldiA9IHdvcmtfZGF0YS1cdTAwM2VydHdkZXY7XG4gXHRydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuQEAgLTEyNjcsNyArMTY3MCwxMyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcbiBcdGZvciAocXVldWUgPSBSVEtfTUFYX1RYX1FVRVVFX05VTSAtIDE7IHF1ZXVlIFx1MDAzZT0gMDsgcXVldWUtLSkge1xuIFx0XHRmb3IgKGxpbWl0ID0gMDsgbGltaXQgXHUwMDNjIDEwMDA7IGxpbWl0KyspIHtcbi1cdFx0XHRydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpO1xuK1x0XHRcdHJldCA9IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2UgMClcbitcdFx0XHRcdGJyZWFrO1xuK1xuK1x0XHRcdGlmIChydHdfc2Rpb184NzIzYnNfcmVzY2hlZHVsZV90eChydHdkZXYsIHdvcmtfZGF0YSxcbitcdFx0XHRcdFx0XHRcdCAgcXVldWUsIHJldCkpXG4rXHRcdFx0XHRyZXR1cm47XG4gXG4gXHRcdFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkpXG4gXHRcdFx0XHRicmVhaztcbkBAIC0xMjk0LDE0ICsxNzAzLDE2IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9faW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIFJUS19NQVhfVFhfUVVFVUVfTlVNOyBpKyspXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSsrKSB7XG4gXHRcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtpXSk7XG4rXHRcdHJ0d3NkaW8tXHUwMDNldHhfcXVldWVfc3RvcHBlZFtpXSA9IGZhbHNlO1xuK1x0fVxuIFx0cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEgPSBrbWFsbG9jX29iaigqcnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEpO1xuIFx0aWYgKCFydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSlcbiBcdFx0Z290byBlcnJfZGVzdHJveV93cTtcbiBcbiBcdHJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXJ0d2RldiA9IHJ0d2Rldjtcbi1cdElOSVRfV09SSyhcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrLCBydHdfc2Rpb190eF9oYW5kbGVyKTtcbitcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMTMxNSw2ICsxNzI2LDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXHRpbnQgaTtcbiBcbitcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrKTtcbiBcdGRlc3Ryb3lfd29ya3F1ZXVlKHJ0d3NkaW8tXHUwMDNldHh3cSk7XG4gXHRrZnJlZShydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaFxuaW5kZXggNDU3ZThiMDIzODBlNS4uY2VjM2RkMWM0YjJlNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaFxuQEAgLTIyLDYgKzIyLDcgQEBcbiBcbiAvKiBTRElPIFR4IENvbnRyb2wgKi9cbiAjZGVmaW5lIFJFR19TRElPX1RYX0NUUkxcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMDApXG4rI2RlZmluZSBCSVRfU0RJT19UWF9DVFJMX0FMV0FZU19SRUNPR05JWkVcdEJJVCg0KVxuIFxuIC8qU0RJTyBzdGF0dXMgdGltZW91dCovXG4gI2RlZmluZSBSRUdfU0RJT19USU1FT1VUXHRcdFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDAyKVxuQEAgLTc3LDYgKzc4LDE0IEBAXG4gLyogdGhlIGZvbGxvd2luZyB0d28gYXJlIFJUTDgxODggU0RJTyBTcGVjaWZpYyAqL1xuICNkZWZpbmUgUkVHX1NESU9fSElTUl9NQ1VfRVJSXHRcdFx0QklUKDI4KVxuICNkZWZpbmUgUkVHX1NESU9fSElTUl9UU0ZfQklUMzJfVE9HR0xFXHRcdEJJVCgyOSlcbisjZGVmaW5lIFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTS1x0XHRcXFxuK1x0KFJFR19TRElPX0hJU1JfVFhFUlIgfCBSRUdfU0RJT19ISVNSX1JYRVJSIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX1RYRk9WVyB8IFJFR19TRElPX0hJU1JfUlhGT1ZXIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX1RYQkNOT0sgfCBSRUdfU0RJT19ISVNSX1RYQkNORVJSIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX0MySENNRCB8IFJFR19TRElPX0hJU1JfQ1BXTTEgfCBcXFxuK1x0IFJFR19TRElPX0hJU1JfQ1BXTTIgfCBSRUdfU0RJT19ISVNSX0hTSVNSX0lORCB8IFxcXG4rXHQgUkVHX1NESU9fSElTUl9HVElOVDNfSU5EIHwgUkVHX1NESU9fSElTUl9HVElOVDRfSU5EIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX1BTVElNRU9VVCB8IFJFR19TRElPX0hJU1JfT0NQSU5UKVxuIFxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgKi9cbiAjZGVmaW5lIFJFR19TRElPX0hDUFdNXHRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMTkpXG5AQCAtODYsNiArOTUsMTAgQEBcbiAjZGVmaW5lIFJFR19TRElPX09RVF9GUkVFX1BHXHRcdFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDFFKVxuIC8qIEZyZWUgVHggQnVmZmVyIFBhZ2UgKi9cbiAjZGVmaW5lIFJFR19TRElPX0ZSRUVfVFhQR1x0XHRcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAyMClcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfSElHSFx0XHRcdEdFTk1BU0soNywgMClcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTk9STUFMXHRcdFx0R0VOTUFTSygxNSwgOClcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTE9XXHRcdFx0R0VOTUFTSygyMywgMTYpXG4rI2RlZmluZSBCSVRfRlJFRV9UWFBHX1BVQlx0XHRcdEdFTk1BU0soMzEsIDI0KVxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgMSAqL1xuICNkZWZpbmUgUkVHX1NESU9fSENQV00xXHRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMjQpXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAyICovXG5AQCAtMTQzLDcgKzE1Niw3IEBAIHN0cnVjdCBydHdfc2Rpb190eF9kYXRhIHtcbiB9O1xuIFxuIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEge1xuLVx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XG4rXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7XG4gXHRzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2O1xuIH07XG4gXG5AQCAtMTU5LDYgKzE3MiwxMyBAQCBzdHJ1Y3QgcnR3X3NkaW8ge1xuIFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnR4d3E7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp0eF9oYW5kbGVyX2RhdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcbitcdGJvb2wgdHhfcXVldWVfc3RvcHBlZFtSVEtfTUFYX1RYX1FVRVVFX05VTV07XG4rXG4rXHRhdG9taWNfdCBmcmVlX3BnX2hpZ2g7XG4rXHRhdG9taWNfdCBmcmVlX3BnX25vcm1hbDtcbitcdGF0b21pY190IGZyZWVfcGdfbG93O1xuK1x0YXRvbWljX3QgZnJlZV9wZ19wdWI7XG4rXHRhdG9taWNfdCB0eF9vcXRfZnJlZTtcbiB9O1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBydHdfc2Rpb19wbV9vcHM7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jXG5pbmRleCA4Nzg2YmJiNDIxYzJiLi40ZTExMGE0NTdlNzFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmNcbkBAIC0yMDgsOCArMjA4LDkgQEAgdm9pZCBydHdfdHhfcmVwb3J0X2VucXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggc24pXG4gXHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNnR4X3JlcG9ydC1cdTAwM2VxdWV1ZSwgc2tiKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHhfcmVwb3J0LVx1MDAzZXFfbG9jaywgZmxhZ3MpO1xuIFxuLVx0aWYgKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0QgXHUwMDI2XHUwMDI2XG4tXHQgICAgcnR3ZGV2LVx1MDAzZWhjaS50eXBlID09IFJUV19IQ0lfVFlQRV9VU0IpXG4rXHRpZiAoKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0QgXHUwMDI2XHUwMDI2XG4rXHQgICAgIHJ0d2Rldi1cdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfVVNCKSB8fFxuK1x0ICAgIHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiBcdFx0dGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwMCk7XG4gXG4gXHRtb2RfdGltZXIoXHUwMDI2dHhfcmVwb3J0LVx1MDAzZXB1cmdlX3RpbWVyLCBqaWZmaWVzICsgdGltZW91dCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzo1ODo0MS44NzQwMTYwNzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODg0OTIyNzI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBUaGlzIHJ0dzg4IFBhdGNoIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgYHJ0dzg4YCBkcml2ZXIsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIFNESU8gaW50ZXJmYWNlIGFuZCBhZGRpbmcgc3VwcG9ydC9maXhpbmcgbG9naWMgZm9yIGBSVFdfQ0hJUF9UWVBFXzg3MjNCYCBhbmQgYFJUV19DSElQX1RZUEVfODcyM0JTYC4gSXQgc2VlbXMgcHJldHR5IGV4dGVuc2l2ZSDigJMgdGhlcmUgYXJlIG5ldyBoZWxwZXIgZnVuY3Rpb25zIGxpa2UgYHJ0d19pc184NzIzYnNgLCBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGZ1bmN0aW9ucyBsaWtlIGBydHdfcnhfZmlsbF9yeF9zdGF0dXNgLCBhbmQgYSB3aG9sZSBzbGV3IG9mIG5ldyBTRElPLXNwZWNpZmljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIFRYIHBhZ2UgbWFuYWdlbWVudCBhbmQgcXVldWUgaGFuZGxpbmcuIE1hbnkgZXhpc3RpbmcgZnVuY3Rpb25zIGFyZSBhbHNvIGJlaW5nIHVwZGF0ZWQuIFRoZSBjaGFuZ2VzIHRvdWNoIHVwb24gY29yZSBTRElPIG9wZXJhdGlvbnMg4oCTIHJlYWRpbmcvd3JpdGluZyBwb3J0cywgaW5pdGlhbGl6aW5nLCBlbmFibGluZyBSWCBhZ2dyZWdhdGlvbiwgVFggaGFuZGxpbmcsIGFuZCBpbnRlcnJ1cHQgcHJvY2Vzc2luZy5cblxuVGhlIGNydXggb2YgdGhlIG1hdHRlciBpcyB3aGV0aGVyIHRoaXMgY29kZSBpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB0aGF0IFN5emthbGxlciBjYW4gZWFzaWx5IGZ1enouIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoYXQgYHJ0dzg4YCBpcyBhIFJlYWx0ZWsgV2ktRmkgZHJpdmVyLCBhbmQgdGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgZGVhbHMgd2l0aCB0aGUgU0RJTyBpbnRlcmZhY2UuIFNESU8gZGV2aWNlcyBhcmUgbm90b3Jpb3VzbHkgZGlmZmljdWx0IHRvIGVtdWxhdGUgd2VsbCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBzZXR1cHMsIGVzcGVjaWFsbHkgd2hlbiB5b3UncmUgdGFsa2luZyBhYm91dCBzcGVjaWZpYyB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUuIFdoaWxlIFFFTVUgKmRvZXMqIGhhdmUgU0RIQ0kgZW11bGF0aW9uLCB0aGF0IGRvZXNuJ3QgYXV0b21hdGljYWxseSBtZWFuIHdlIGhhdmUgYSB2aXJ0dWFsIFNESU8gKmNhcmQqIHRoYXQgdGhpcyBSZWFsdGVrIGRyaXZlciBjYW4gaW50ZXJhY3Qgd2l0aC4gYG1hYzgwMjExX2h3c2ltYCBpcyBhbiBpbnRlcmVzdGluZyBleGFtcGxlIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiwgYnV0IGl0J3MgYSB2aXJ0dWFsIGRyaXZlciwgbm90IGFuIGVtdWxhdG9yIGZvciByZWFsdGVrIGhhcmR3YXJlLlxuXG5UaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgZXZlbiB3aGVuIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBJdCBjYWxscyBvdXQgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgdGhhdCBuZWVkIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUsIHdoaWNoIHByZXR0eSBtdWNoIGRlc2NyaWJlcyB0aGUgc2l0dWF0aW9uIHdpdGggU0RJTyBXaS1GaSBjaGlwcy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgcnR3ODhgIFNESU8gY2FuJ3QgYmUgcHJvYmVkIHdpdGhvdXQgcmVhbCBoYXJkd2FyZS4gU3l6a2FsbGVyIGhhcyBVU0IgYW5kIFBDSSBmdXp6aW5nLCBidXQgU0RJTz8gSSBkb24ndCByZWNhbGwgc2VlaW5nIGFueSBTRElPIGZ1enppbmcgc3VwcG9ydCBkaXJlY3RseS4gVGhlIGluc3RydWN0aW9ucyBzdWdnZXN0IHRoZSBjb2RlIGlzICp1bnJlYWNoYWJsZSouIEknbSB0aGlua2luZyBhYm91dCB0aGUgZnVuY3Rpb24gY2FsbCBjaGFpbjogYHJ0d19zZGlvX3dyaXRlX3BvcnRgIGlzIGNhbGxlZCBmcm9tIGBydHdfc2Rpb190eF93cml0ZWAsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgdGhlIFNESU8gZHJpdmVyLlxuXG5TbywgcmVhbGlzdGljYWxseSwgaWYgdGhlcmUncyBubyBTRElPIGZ1enplciBpbiBTeXprYWxsZXIgYW5kIG5vIHZpcnR1YWwgU0RJTyBoYXJkd2FyZSB0aGF0IGNhbiBiZSBtZWFuaW5nZnVsbHkgdXNlZCBieSB0aGUgYHJ0dzg4YCBkcml2ZXIsIHRoZW4gdGhpcyBjb2RlIGlzIGRlYWQgb24gYXJyaXZhbCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhlIHBhdGNoIGlzIHByb2JhYmx5IG5vdCB3b3J0aCBmdXp6aW5nLiBJIGNvdWxkIHRyeSB0byBzZWFyY2ggZm9yIFwic2Rpb1wiIGluIHRoZSBrZXJuZWwgb3Igc3l6a2FsbGVyLCBvciBmb3IgYW55IFNESU8gZnV6emluZyBkcml2ZXJzLCBidXQgSSBhbSBhbG1vc3QgY2VydGFpbiBJIHdvdWxkIGZpbmQgbm90aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NDAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6NTk6MDAuNzIzMjQ1NzUxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjA3ODY5MzcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNkaW8uKmZ1enpcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA3OjU5OjAzLjM0NDA0MjczOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NjM5ODk1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgU0RJTyBIb3N0IFNvZnR3YXJlIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHNvZnR3YXJlIFNESU8gaG9zdCBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgbGlrZWx5IHRoZSBgZHJpdmVycy9tbWMvY29yZS9gIGRpcmVjdG9yeS4gVGhhdCdzIHRoZSBjb21tb24gZ3JvdW5kIGZvciBNTUMgYW5kIFNELXJlbGF0ZWQgY29kZSwgc28gaXQncyB0aGUgbmF0dXJhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgY29yZSBTRElPIGhvc3QgZHJpdmVycy4gSSdsbCBpbml0aWF0ZSBhIHNlYXJjaCBmb3IgYHNkaW9gIHdpdGhpbiB0aGF0IGRpcmVjdG9yeSwgdXNpbmcgbXkgcHJlZmVycmVkIHNlYXJjaCB0b29scywgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcy4gVGhpcyBzaG91bGQgcXVpY2tseSByZXZlYWwgaWYgYW5kIHdoZXJlIHRoZSBrZXJuZWwgaGFuZGxlcyBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIFNESU8gaG9zdC4gSSdtIGV4cGVjdGluZyB0byB1bmNvdmVyIHJlbGV2YW50IGRyaXZlcnMsIHByb2JhYmx5IHdpdGggbmFtZXMgdGhhdCBnaXZlIGNsdWVzIGFib3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIG9yIGJ1cyBpbnRlcmZhY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDMzMiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA3OjU5OjA3LjMwODAzNDY0MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzMyNzgzNDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNkaW8uKmR1bW15XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYz04Mj1zdGF0aWMgdm9pZCBicmNtZl9zZGlvZF9pYl9pcnFoYW5kbGVyKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtOTItLyogZHVtbXkgaGFuZGxlciBmb3IgU0RJTyBmdW5jdGlvbiAyIGludGVycnVwdCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo5MzpzdGF0aWMgdm9pZCBicmNtZl9zZGlvZF9kdW1teV9pcnFoYW5kbGVyKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTk0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYz05Nz1pbnQgYnJjbWZfc2Rpb2RfaW50cl9yZWdpc3RlcihzdHJ1Y3QgYnJjbWZfc2Rpb19kZXYgKnNkaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtMTU5LVxcdFxcdHNkaW9fY2xhaW1faXJxKHNkaW9kZXYtXFx1MDAzZWZ1bmMxLCBicmNtZl9zZGlvZF9pYl9pcnFoYW5kbGVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6MTYwOlxcdFxcdHNkaW9fY2xhaW1faXJxKHNkaW9kZXYtXFx1MDAzZWZ1bmMyLCBicmNtZl9zZGlvZF9kdW1teV9pcnFoYW5kbGVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtMTYxLVxcdFxcdHNkaW9fcmVsZWFzZV9ob3N0KHNkaW9kZXYtXFx1MDAzZWZ1bmMxKTtcXG4tLVxcbmRyaXZlcnMvcGluY3RybC9tZXNvbi9waW5jdHJsLW1lc29uLWcxMmEuYz0xMDAxPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2Rpb19ncm91cHNbXSA9IHtcXG5kcml2ZXJzL3BpbmN0cmwvbWVzb24vcGluY3RybC1tZXNvbi1nMTJhLmMtMTAwMi1cXHRcXFwic2Rpb19kMFxcXCIsIFxcXCJzZGlvX2QxXFxcIiwgXFxcInNkaW9fZDJcXFwiLCBcXFwic2Rpb19kM1xcXCIsXFxuZHJpdmVycy9waW5jdHJsL21lc29uL3BpbmN0cmwtbWVzb24tZzEyYS5jOjEwMDM6XFx0XFxcInNkaW9fY21kXFxcIiwgXFxcInNkaW9fY2xrXFxcIiwgXFxcInNkaW9fZHVtbXlcXFwiLFxcbmRyaXZlcnMvcGluY3RybC9tZXNvbi9waW5jdHJsLW1lc29uLWcxMmEuYy0xMDA0LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA3OjU5OjA5LjY0MDg0OTE0OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyOTE2ODYzNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogVGhpcyBQYXRjaCBpcyBVbmZ1enphYmxlIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgaXQncyBwcmV0dHkgY2xlYXIgd2UgaGF2ZSBhIHByb2JsZW0uIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgdmlydHVhbCBTRElPIGhvc3QgY29udHJvbGxlciBhdmFpbGFibGUgZm9yIGZ1enppbmcsIHdoaWNoIGlzIHRoZSBmaXJzdCBodXJkbGUuIEJ1dCBldmVuIGlmIHdlIGNvdWxkIHNvbWVob3cgY29uanVyZSBvbmUgdXAsIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgUmVhbHRlayBgcnR3ODhgIFdpLUZpIGRyaXZlciBoZXJlLiBJdCdzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCAqc3BlY2lmaWMqIFJlYWx0ZWsgaGFyZHdhcmUgb24gdGhlIFNESU8gYnVzLiBUaGF0IG1lYW5zIHRoZSBkcml2ZXIncyBgcHJvYmVgIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkIHdpdGhvdXQgdGhhdCBoYXJkd2FyZSBwcmVzZW50LiBUaGVyZWZvcmUsIG5vbmUgb2YgdGhpcyBjb2RlIHdpbGwgZXZlbiBleGVjdXRlIGluIG91ciB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50LlxuXG5BbmQgZXZlbiBpZiB3ZSBjb3VsZCBpbmplY3QgKnNvbWUqIFNESU8gZGV2aWNlcywgd2UncmUgc3RpbGwgc3R1Y2sgd2l0aCBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIuIFRoYXQgcHJvbXB0cyB0aGlzIHBhcnRpY3VsYXIgcXVlc3Rpb246IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHRoYXQgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsXCIgd2hpY2gsIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbiwgZXhwbGljaXRseSBpbmNsdWRlcyB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyB0aGF0IHJlbHkgb24gcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCdzIG5vdCBlbXVsYXRlZC5cblxuU28sIHJlYWxpc3RpY2FsbHksIHdlJ3JlIG5vdCBnb2luZyB0byBiZSBhYmxlIHRvIG1ha2UgdXNlIG9mIHRoaXMgY29kZSB0byBmdXp6LiBCZWZvcmUgSSB3cml0ZSB0aGlzIG9mZiBjb21wbGV0ZWx5IEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0byBiZSBzdXJlIHRoYXQgYHJ0dzg4YCBoYXMgYSBzb2Z0d2FyZSBlbXVsYXRpb24gbW9kZS4gSWYgaXQgZG9lcywgdGhlcmUncyBhIGNoYW5jZS4gSWYgbm90LCB0aGlzIGlzIGRlZmluaXRlbHkgYSBkZWFkIGVuZCBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNjQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6NTk6MTUuOTMyNTM4OTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4OTY5NzUzNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnR3ODguKmVtdWxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA3OjU5OjE4LjIyMjI0NjkwN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NzIyNTAyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIHJ0dzg4IFNESU8gUHJvYmUgRnVuY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgcHJvYmUgZnVuY3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgU0RJTyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBmb3IgdGhlIHJ0dzg4IHNlcmllcy4gTXkgbWFpbiBhcmVhcyBvZiBpbnRlcmVzdCBhcmUsIG9mIGNvdXJzZSwgdGhlIHJlc291cmNlIGFsbG9jYXRpb24sIHRoZSBwbGF0Zm9ybSBkcml2ZXIgc2V0dXAsIGFuZCB0aGUgc3Vic2VxdWVudCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgU0RJTyBidXMuIEkgd2FudCB0byBzZWUgaG93IHRoZXkgaGFuZGxlIHRoZSBjYXJkIGRldGVjdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uIFRoaW5ncyBsaWtlIHBvd2VyIG1hbmFnZW1lbnQgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0aGUgaW5pdGlhbCBicmluZy11cCBhbHdheXMgY2F0Y2ggbXkgZXllLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZXkncmUgaGFuZGxpbmcgaW50ZXJydXB0cyBjb3JyZWN0bHkgYW5kLCBpZiBhcHBsaWNhYmxlLCB0aGUgYXNzb2NpYXRlZCBpbnRlcnJ1cHQgbWFza2luZy91bm1hc2tpbmcuIExldCdzIHNlZSBob3cgdGhleSBkZWFsIHdpdGggYW55IFNESU8gc3BlY2lmaWMgcXVpcmtzIOKAkyBSZWFsdGVrIGFsd2F5cyBzZWVtcyB0byBoYXZlIGEgZmV3IG9mIHRob3NlLiBUaW1lIHRvIGFuYWx5emUgdGhlIGNvZGUgY2FyZWZ1bGx5IGFuZCBjb25maXJtIGl0IGFsaWducyB3aXRoIHRoZSBkZXNpZ24gSSByZW1lbWJlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3MjksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzo1OToyMy4wOTQ0OTk0NjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjQ0NDU4OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnR3X3NkaW9fcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzY3MuYz0yMT1zdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHJ0d184NzIzY3NfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzY3MuYy0yMy1cXHQuaWRfdGFibGUgPSBydHdfODcyM2NzX2lkX3RhYmxlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODcyM2NzLmM6MjQ6XFx0LnByb2JlID0gcnR3X3NkaW9fcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzY3MuYy0yNS1cXHQucmVtb3ZlID0gcnR3X3NkaW9fcmVtb3ZlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzZHMuYz0yNz1zdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHJ0d184NzIzZHNfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODcyM2RzLmMtMjgtXFx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNkcy5jOjI5OlxcdC5wcm9iZSA9IHJ0d19zZGlvX3Byb2JlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODcyM2RzLmMtMzAtXFx0LnJlbW92ZSA9IHJ0d19zZGlvX3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMWNzLmM9MjI9c3RhdGljIHN0cnVjdCBzZGlvX2RyaXZlciBydHdfODgyMWNzX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjFjcy5jLTIzLVxcdC5uYW1lID0gS0JVSUxEX01PRE5BTUUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIxY3MuYzoyNDpcXHQucHJvYmUgPSBydHdfc2Rpb19wcm9iZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjFjcy5jLTI1LVxcdC5yZW1vdmUgPSBydHdfc2Rpb19yZW1vdmUsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJicy5jPTIyPXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnR3Xzg4MjJic19kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyYnMuYy0yMy1cXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmJzLmM6MjQ6XFx0LnByb2JlID0gcnR3X3NkaW9fcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyYnMuYy0yNS1cXHQucmVtb3ZlID0gcnR3X3NkaW9fcmVtb3ZlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyY3MuYz0yMj1zdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHJ0d184ODIyY3NfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmNzLmMtMjMtXFx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJjcy5jOjI0OlxcdC5wcm9iZSA9IHJ0d19zZGlvX3Byb2JlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmNzLmMtMjUtXFx0LnJlbW92ZSA9IHJ0d19zZGlvX3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jPTE3MjQ9c3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYy0xNzM2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jOjE3Mzc6aW50IHJ0d19zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYy0xNzM4LVxcdFxcdCAgIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYy0xODExLX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYzoxODEyOkVYUE9SVF9TWU1CT0wocnR3X3NkaW9fcHJvYmUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jLTE4MTMtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaD0xODQ9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJ0d19zZGlvX3BtX29wcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaC0xODUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmg6MTg2OmludCBydHdfc2Rpb19wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2Z1bmMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmgtMTg3LVxcdFxcdCAgIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCAqaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzo1OToyNC42NTg5NTE5MThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODUyMjkxNjczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTRElPIFdpLUZpIERyaXZlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIFNESU8gV2ktRmkgZHJpdmVyLCBJJ3ZlIGNvbWUgdG8gYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNvbmNsdXNpb24uIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBSZWFsdGVrIDg3MjNCUyBTRElPIG1vZHVsZS4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUgZGVwZW5kZW5jaWVzLiBBbmQsIGNyaXRpY2FsbHksIHRoZSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LCBvciBldmVuIHNvbWV0aGluZyBsaWtlIEdDRSwgaXNuJ3QgZ29pbmcgdG8gZW11bGF0ZSB0aGF0IHNwZWNpZmljIGhhcmR3YXJlLlxuXG5TbywgcmVhbGlzdGljYWxseSwgYW55IGNvZGUgcGF0aHMgdGhpcyBwYXRjaCB0b3VjaGVzIGFyZSAqY29tcGxldGVseSogdW5yZWFjaGFibGUgaW4gYW55IHZpcnR1YWxpemVkIHNldHVwLiBZb3UgY2FuJ3QgZXhlY3V0ZSB0aGlzIGNvZGUgd2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgcHJlc2VudC4gVGhlcmVmb3JlLCBjb25zaWRlcmluZyB0aGUgbGltaXRhdGlvbnMgb2Ygb3VyIGZ1enppbmcgZW52aXJvbm1lbnQsIEknbSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuIEl0J3MgYSB3YXN0ZSBvZiByZXNvdXJjZXMgdG8gZGVkaWNhdGUgdGltZSB0byB0aGlzIHBhdGNoIHJpZ2h0IG5vdy4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGFjdHVhbGx5ICpyZWFjaCogdGhlIG1vZGlmaWVkIGNvZGUgdG8gbWFrZSBmdXp6aW5nIGVmZmVjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyNTcsIk91dHB1dFRva2VucyI6MTI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6NTk6MzMuMTgxODcxMzg0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJlYWx0ZWsgcnR3ODggV2ktRmkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYWRkaW5nIHN1cHBvcnQgYW5kIGZpeGluZyBsb2dpYyBmb3IgdGhlIFJUTDg3MjNCUyBTRElPIG1vZHVsZS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBhIHBoeXNpY2FsIFNESU8gV2ktRmkgY2hpcCB0byBiZSBwcmVzZW50LiBTaW5jZSBTRElPIGhhcmR3YXJlIGFuZCB0aGlzIHNwZWNpZmljIFJlYWx0ZWsgY2hpcCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cywgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJlYWx0ZWsgcnR3ODggV2ktRmkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYWRkaW5nIHN1cHBvcnQgYW5kIGZpeGluZyBsb2dpYyBmb3IgdGhlIFJUTDg3MjNCUyBTRElPIG1vZHVsZS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBhIHBoeXNpY2FsIFNESU8gV2ktRmkgY2hpcCB0byBiZSBwcmVzZW50LiBTaW5jZSBTRElPIGhhcmR3YXJlIGFuZCB0aGlzIHNwZWNpZmljIFJlYWx0ZWsgY2hpcCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cywgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6NTk6MzMuMTgxOTEwMDc0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowkvr4x[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-19 07:44:13 +0000 UTC FinishedAt: 2026-08-19 07:59:34 +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+CgkJCTx0ZD4yMDI2LzA4LzE5IDA3OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJlYWx0ZWsgcnR3ODggV2ktRmkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYWRkaW5nIHN1cHBvcnQgYW5kIGZpeGluZyBsb2dpYyBmb3IgdGhlIFJUTDg3MjNCUyBTRElPIG1vZHVsZS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBhIHBoeXNpY2FsIFNESU8gV2ktRmkgY2hpcCB0byBiZSBwcmVzZW50LiBTaW5jZSBTRElPIGhhcmR3YXJlIGFuZCB0aGlzIHNwZWNpZmljIFJlYWx0ZWsgY2hpcCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cywgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRiNmRhYjE0MDI2YmVlOTA3Zjc4OGFhNWU1YWQ4OGM2ZDYyYjVmZWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwNzo1ODo0MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG5pbmRleCBjNmU5ODFiYTc5ODY4Li44Zjg2ZjdjMTJkZTVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG5AQCAtMTk0LDYgJiM0MzsxOTQsNyBAQCBlbnVtIHJ0d19jaGlwX3R5cGUge1xuIFx0UlRXX0NISVBfVFlQRV84NzIzRCxcbiBcdFJUV19DSElQX1RZUEVfODgyMUMsXG4gXHRSVFdfQ0hJUF9UWVBFXzg3MDNCLFxuJiM0MztcdFJUV19DSElQX1RZUEVfODcyM0IsXG4gXHRSVFdfQ0hJUF9UWVBFXzg4MjFBLFxuIFx0UlRXX0NISVBfVFlQRV84ODEyQSxcbiBcdFJUV19DSElQX1RZUEVfODgxNEEsXG5AQCAtMjE5NCw2ICYjNDM7MjE5NSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2NoaXBfaGFzX3R4X3N0YmMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHJldHVybiBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2V0eF9zdGJjO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHJ0d19pc184NzIzYnMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MjNCIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU87XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1OCBydHdfYWNxdWlyZV9tYWNpZChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbWFjX2lkO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuaW5kZXggMDFmZDI5OWFiYjdmZS4uZmRlMjFjODQwYWMwMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXG5AQCAtMjUzLDEwICYjNDM7MjUzLDEyIEBAIHN0YXRpYyB2b2lkIHJ0d19yeF9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFxuIFx0cnR3X3J4X2FkZHJfbWF0Y2gocnR3ZGV2LCBwa3Rfc3RhdCwgaGRyKTtcbiBcbi1cdC8qIFJ0bDg3MjNjcyBkcml2ZXIgY2hlY2tzIGZvciBzaXplIFx1MDAzYyAxNCBvciBzaXplIFx1MDAzZSA4MTkyIGFuZFxuLVx0ICogc2ltcGx5IGRyb3BzIHRoZSBwYWNrZXQuXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSdGw4NzIzY3MgYW5kIHJ0bDg3MjNicyBkcml2ZXJzIGNoZWNrIGZvciBzaXplIFx1MDAzYyAxNCBvciBzaXplIFx1MDAzZSA4MTkyXG4mIzQzO1x0ICogYW5kIHNpbXBseSBkcm9wIHRoZSBwYWNrZXQuXG4gXHQgKi9cbi1cdGlmIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIFx1MDAyNlx1MDAyNiBwa3Rfc3RhdC1cdTAwM2Vwa3RfbGVuID09IDApIHtcbiYjNDM7XHRpZiAocGt0X3N0YXQtXHUwMDNlcGt0X2xlbiA9PSAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzAzQiB8fCBydHdfaXNfODcyM2JzKHJ0d2RldikpKSB7XG4gXHRcdHJ4X3N0YXR1cy1cdTAwM2VmbGFnIHw9IFJYX0ZMQUdfTk9fUFNEVTtcbiBcdFx0cnR3X2RiZyhydHdkZXYsIFJUV19EQkdfUlgsIFwmIzM0O3plcm8gbGVuZ3RoIHBhY2tldFwmIzM0Oyk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xuaW5kZXggNWI0MGQ3NGIxNmVlMC4uZTViZjljYmEwNzFlYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xuQEAgLTIwLDYgJiM0MzsyMCwxNyBAQFxuICNpbmNsdWRlIFwmIzM0O3R4LmhcJiMzNDtcbiBcbiAjZGVmaW5lIFJUV19TRElPX0lORElSRUNUX1JXX1JFVFJJRVNcdFx0XHQ1MFxuJiM0MzsjZGVmaW5lIFJUV19TRElPX09RVF9USU1FT1VUX01TXHRcdFx0XHQxMDAwXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiA4NzIzQlMgU0RJTyBUWCBGSUZPIGJhY2stcHJlc3N1cmUgd2F0ZXJtYXJrczogc3RvcCB0aGUgbWFjODAyMTEgcXVldWUgb25jZVxuJiM0MzsgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlXG4mIzQzOyAqIFRYIGRyYWluIHBhdGggb25jZSBpdCBmYWxscyBiYWNrIHRvIHRoZSBsb3cgb25lLiBCb3VuZHMgdGhlIHF1ZXVlaW5nIGxhdGVuY3lcbiYjNDM7ICogdGhhdCBvdGhlcndpc2UgY2F1c2VzIHVwbGluayBidWZmZXJibG9hdCAvIGNvbmdlc3Rpb24gY29sbGFwc2UuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fSElXQVRFUlx0XHRcdDE2XG4mIzQzOyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSXHRcdFx0OFxuJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZXHRcdFx0bXNlY3NfdG9famlmZmllcygxKVxuIFxuIHN0YXRpYyBib29sIHJ0d19zZGlvX2lzX2J1c19hZGRyKHUzMiBhZGRyKVxuIHtcbkBAIC01NDgsMTIgJiM0Mzs1NTksMTU3IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fcmVhZF9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4ICpidWYsIHNpemVfdCBjb3VudClcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgY2FjaGVkIGZyZWUgcGFnZSBjb3VudGVycyBhcmUgYSBmYXN0IHBhdGggaGludCBvbmx5LiBUaGV5IGFyZSB3cml0dGVuXG4mIzQzOyAqIGZyb20gdGhlIHNpbmdsZSB0aHJlYWRlZCBUWCB3b3JrIGFuZCwgZm9yIEgyQyBhbmQgcmVzZXJ2ZWQgcGFnZSB3cml0ZXMsXG4mIzQzOyAqIGZyb20gcHJvY2VzcyBjb250ZXh0LCBzbyB0aGV5IGFyZSBhdG9taWNfdDsgd2hlbmV2ZXIgdGhleSBjbGFpbSB0aGVyZSBpc1xuJiM0MzsgKiBub3QgZW5vdWdoIHJvb20gdGhleSBhcmUgcmVzeW5jaHJvbmlzZWQgZnJvbSB0aGUgY2hpcCBiZWZvcmUgdGhlIGNhbGxlclxuJiM0MzsgKiBnaXZlcyB1cCwgd2hpY2ggYWxzbyBhYnNvcmJzIGEgbG9zdCB1cGRhdGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3RvcmVfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgdTMyIGZyZWVfdHhwZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaCxcbiYjNDM7XHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfSElHSCkpO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbCxcbiYjNDM7XHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfTk9STUFMKSk7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93LFxuJiM0MztcdFx0ICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19MT1cpKTtcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIsXG4mIzQzO1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX1BVQikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZWZyZXNoIHRoZSBjYWNoZWQgY291bnRlcnMgZnJvbSB0aGUgY2hpcC4gUmV0dXJucyBmYWxzZSB3aGVuIHRoZSBjaGlwXG4mIzQzOyAqIHJlcG9ydHMgbm8gZnJlZSBwYWdlcyBhdCBhbGwsIHdoaWNoIG1lYW5zIHRoZSBjb3VudHMgY2Fubm90IGJlIHRydXN0ZWRcbiYjNDM7ICogYW5kIHRoZSBjYWxsZXIgaGFzIHRvIGRlY2lkZSB3aGF0IHRvIGRvIGluc3RlYWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBydHdfc2Rpb184NzIzYnNfc3luY19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHUzMiBmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFmcmVlX3R4cGcpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcocnR3ZGV2LCBmcmVlX3R4cGcpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogU2l6ZSBvZiB0aGUgcHVibGljIHBhZ2UgcG9vbDogd2hhdGV2ZXIgdGhlIHRyYW5zbWl0IHBhZ2UgYWxsb2NhdGlvbiBoYXNcbiYjNDM7ICogbGVmdCBvbmNlIHRoZSBwZXIgcXVldWUgcG9vbHMgYXJlIHRha2VuIG91dC4gRmFpbHMgaWYgdGhlIGFsbG9jYXRpb25cbiYjNDM7ICogY2Fubm90IGNvdmVyIHRoZSByZXNlcnZlZCBxdWV1ZXMsIHNpbmNlIHRoZSByZW1haW5kZXIgd291bGQgdW5kZXJmbG93IGFuZFxuJiM0MzsgKiB0aGVyZSB3b3VsZCBiZSBubyBzZW5zaWJsZSBwb29sIHRvIGhhbmQgb3V0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBydHdfc2Rpb184NzIzYnNfcHVicV9udW0oc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTE2ICpwdWJxX251bSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsID0gXHUwMDI2cnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlcGFnZV90YWJsZVswXTtcbiYjNDM7XHR1MTYgYWNxX3BnX251bSA9IHJ0d2Rldi1cdTAwM2VmaWZvLmFjcV9wZ19udW07XG4mIzQzO1x0dTE2IHJlc2VydmVkX251bTtcbiYjNDM7XG4mIzQzO1x0cmVzZXJ2ZWRfbnVtID0gcGdfdGJsLVx1MDAzZWhxX251bSAmIzQzOyBwZ190YmwtXHUwMDNlbHFfbnVtICYjNDM7IHBnX3RibC1cdTAwM2VucV9udW0gJiM0MztcbiYjNDM7XHRcdCAgICAgICBwZ190YmwtXHUwMDNlZXhxX251bSAmIzQzOyBwZ190YmwtXHUwMDNlZ2FwcV9udW07XG4mIzQzO1x0aWYgKGFjcV9wZ19udW0gXHUwMDNjPSByZXNlcnZlZF9udW0pIHtcbiYjNDM7XHRcdHJ0d19lcnIocnR3ZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtubyB0cmFuc21pdCBwYWdlcyBsZWZ0IGZvciB0aGUgcHVibGljIHF1ZXVlOiAldSBvZiAldSByZXNlcnZlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cmVzZXJ2ZWRfbnVtLCBhY3FfcGdfbnVtKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0KnB1YnFfbnVtID0gYWNxX3BnX251bSAtIHJlc2VydmVkX251bTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX2luaXRfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190Ymw7XG4mIzQzO1x0dTE2IHB1YnFfbnVtO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIFNlZWQgZnJvbSB0aGUgcGFnZSB0YWJsZSB3aGVuIHRoZSBjaGlwIGhhcyBub3RoaW5nIHRvIHJlcG9ydCB5ZXQuICovXG4mIzQzO1x0aWYgKCFydHdfc2Rpb184NzIzYnNfc3luY19mcmVlX3R4cGcocnR3ZGV2KSkge1xuJiM0MztcdFx0cmV0ID0gcnR3X3NkaW9fODcyM2JzX3B1YnFfbnVtKHJ0d2RldiwgXHUwMDI2cHVicV9udW0pO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRwZ190YmwgPSBcdTAwMjZydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3RhYmxlWzBdO1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaCwgcGdfdGJsLVx1MDAzZWhxX251bSk7XG4mIzQzO1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19ub3JtYWwsIHBnX3RibC1cdTAwM2VucV9udW0pO1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93LCBwZ190YmwtXHUwMDNlbHFfbnVtKTtcbiYjNDM7XHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1YiwgcHVicV9udW0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLFxuJiM0MztcdFx0ICAgcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFN1bSBvZiB0aGUgcXVldWUmIzM5O3MgZGVkaWNhdGVkIGNvdW50ZXIgYW5kIHRoZSBwdWJsaWMgcG9vbCwgY2xhbXBlZCBhdCB6ZXJvOlxuJiM0MzsgKiBhIGxvc3QgdXBkYXRlIGJldHdlZW4gdGhlIGNoZWNrIGJlbG93IGFuZCBydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKClcbiYjNDM7ICogY2FuIGJyaWVmbHkgZHJpdmUgYSBjb3VudGVyIG5lZ2F0aXZlLCBhbmQgbGV0dGluZyB0aGF0IHdyYXAgd291bGQgaGlkZSB0aGVcbiYjNDM7ICogc2hvcnRhZ2UgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIGEgcmVzeW5jIGZyb20gdGhlIGNoaXAuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgYXRvbWljX3QgKmRlZGljYXRlZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgZnJlZTtcbiYjNDM7XG4mIzQzO1x0ZnJlZSA9IGF0b21pY19yZWFkKGRlZGljYXRlZCkgJiM0MzsgYXRvbWljX3JlYWQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1Yik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmcmVlIFx1MDAzZSAwID8gZnJlZSA6IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBhdG9taWNfdCAqcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChxdWV1ZSkge1xuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX1ZJOlxuJiM0MztcdFx0cmV0dXJuIFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19ub3JtYWw7XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfQkU6XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfQks6XG4mIzQzO1x0XHRyZXR1cm4gXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2xvdztcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9CQ046XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfSDJDOlxuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX0hJMDpcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9NR01UOlxuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX1ZPOlxuJiM0MztcdFx0cmV0dXJuIFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19oaWdoO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXG4gXHRcdFx0XHQgICAgc2l6ZV90IGNvdW50KVxuIHtcbiBcdHVuc2lnbmVkIGludCBwYWdlc19mcmVlLCBwYWdlc19uZWVkZWQ7XG4gXG4tXHRpZiAocnR3X2NoaXBfd2NwdV84MDUxKHJ0d2RldikpIHtcbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XG4mIzQzO1x0XHRhdG9taWNfdCAqZGVkaWNhdGVkO1xuJiM0MztcbiYjNDM7XHRcdGRlZGljYXRlZCA9IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSk7XG4mIzQzO1x0XHRpZiAoIWRlZGljYXRlZCkge1xuJiM0MztcdFx0XHRydHdfd2FybihydHdkZXYsIFwmIzM0O1Vua25vd24gbWFwcGluZyBmb3IgcXVldWUgJXVcXG5cJiMzNDssIHF1ZXVlKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cGFnZXNfZnJlZSA9IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHJ0d2RldiwgZGVkaWNhdGVkKTtcbiYjNDM7XHRcdHBhZ2VzX25lZWRlZCA9IERJVl9ST1VORF9VUChjb3VudCwgcnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlcGFnZV9zaXplKTtcbiYjNDM7XHRcdGlmIChwYWdlc19uZWVkZWQgXHUwMDNjPSBwYWdlc19mcmVlKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0XHRydHdfc2Rpb184NzIzYnNfc3luY19mcmVlX3R4cGcocnR3ZGV2KTtcbiYjNDM7XHRcdHBhZ2VzX2ZyZWUgPSBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShydHdkZXYsIGRlZGljYXRlZCk7XG4mIzQzO1x0fSBlbHNlIGlmIChydHdfY2hpcF93Y3B1XzgwNTEocnR3ZGV2KSkge1xuIFx0XHR1MzIgZnJlZV90eHBnO1xuIFxuIFx0XHRmcmVlX3R4cGcgPSBydHdfc2Rpb19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xuQEAgLTYzMiw0NCAmIzQzOzc4OCwxMjQgQEAgc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBkZWFkbGluZTtcbiYjNDM7XHR1OCBmcmVlO1xuJiM0MztcbiYjNDM7XHRpZiAoYXRvbWljX2FkZF91bmxlc3MoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9vcXRfZnJlZSwgLTEsIDApKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGRlYWRsaW5lID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKFJUV19TRElPX09RVF9USU1FT1VUX01TKTtcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRmcmVlID0gcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpO1xuJiM0MztcdFx0aWYgKGZyZWUpIHtcbiYjNDM7XHRcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCBmcmVlIC0gMSk7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuJiM0MztcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlYWRsaW5lKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRUJVU1k7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXG4mIzQzO1x0XHRcdFx0XHQgdW5zaWduZWQgaW50IHBhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdGF0b21pY190ICpkZWRpY2F0ZWQ7XG4mIzQzO1x0dW5zaWduZWQgaW50IHRha2VuO1xuJiM0MztcdGludCBmcmVlO1xuJiM0MztcbiYjNDM7XHRkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xuJiM0MztcdGlmICghZGVkaWNhdGVkKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKTtcbiYjNDM7XHR0YWtlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgcGFnZXMsIGZyZWUgXHUwMDNlIDAgPyBmcmVlIDogMCk7XG4mIzQzO1x0YXRvbWljX3N1Yih0YWtlbiwgZGVkaWNhdGVkKTtcbiYjNDM7XG4mIzQzO1x0cGFnZXMgLT0gdGFrZW47XG4mIzQzO1x0aWYgKHBhZ2VzIFx1MDAyNlx1MDAyNiBhdG9taWNfc3ViX3JldHVybihwYWdlcywgXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1YikgXHUwMDNjIDApXG4mIzQzO1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIsIDApO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgcnR3X3NkaW9fd3JpdGVfcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRib29sIHJ0bDg3MjNicyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb3JpZ19sZW4gPSBza2ItXHUwMDNlbGVuO1xuJiM0MztcdHVuc2lnbmVkIGludCBwYWdlcztcbiYjNDM7XHRzaXplX3Qgd3JpdGVfc2l6ZTtcbiBcdGJvb2wgYnVzX2NsYWltO1xuIFx0c2l6ZV90IHR4c2l6ZTtcbiBcdHUzMiB0eGFkZHI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0dHhhZGRyID0gcnR3X3NkaW9fZ2V0X3R4X2FkZHIocnR3ZGV2LCBza2ItXHUwMDNlbGVuLCBxdWV1ZSk7XG4tXHRpZiAoIXR4YWRkcilcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKHJ0bDg3MjNicykge1xuJiM0MztcdFx0dHhzaXplID0gcm91bmRfdXAob3JpZ19sZW4sIDQpO1xuJiM0MztcdFx0d3JpdGVfc2l6ZSA9IHR4c2l6ZSBcdTAwM2UgUlRXX1NESU9fQkxPQ0tfU0laRSA/XG4mIzQzO1x0XHRcdCAgICAgcm91bmRfdXAodHhzaXplLCBSVFdfU0RJT19CTE9DS19TSVpFKSA6IHR4c2l6ZTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0dHhzaXplID0gc2Rpb19hbGlnbl9zaXplKHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jLCBvcmlnX2xlbik7XG4mIzQzO1x0XHR3cml0ZV9zaXplID0gdHhzaXplO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHdyaXRlX3NpemUgXHUwMDNlIG9yaWdfbGVuKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgcGFkZGluZyA9IHdyaXRlX3NpemUgLSBvcmlnX2xlbjtcbiBcbi1cdHR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgc2tiLVx1MDAzZWxlbik7XG4mIzQzO1x0XHRpZiAoc2tiX3RhaWxyb29tKHNrYikgXHUwMDNjIHBhZGRpbmcpIHtcbiYjNDM7XHRcdFx0cmV0ID0gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgcGFkZGluZyAtIHNrYl90YWlscm9vbShza2IpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRza2JfcHV0X3plcm8oc2tiLCBwYWRkaW5nKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHR4YWRkciA9IHJ0d19zZGlvX2dldF90eF9hZGRyKHJ0d2RldiwgdHhzaXplLCBxdWV1ZSk7XG4mIzQzO1x0aWYgKCF0eGFkZHIpIHtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIG91dF90cmltO1xuJiM0MztcdH1cbiBcbiBcdHJldCA9IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlLCB0eHNpemUpO1xuIFx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGdvdG8gb3V0X3RyaW07XG4mIzQzO1xuJiM0MztcdGlmIChydGw4NzIzYnMpIHtcbiYjNDM7XHRcdHJldCA9IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChydHdkZXYpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byBvdXRfdHJpbTtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpc2tiLVx1MDAzZWRhdGEsIFJUV19TRElPX0RBVEFfUFRSX0FMSUdOKSlcbiBcdFx0cnR3X3dhcm4ocnR3ZGV2LCBcJiMzNDtHb3QgdW5hbGlnbmVkIFNLQiBpbiAlcygpIGZvciBxdWV1ZSAldVxcblwmIzM0OyxcbiBcdFx0XHQgX19mdW5jX18sIHF1ZXVlKTtcbiBcbiBcdGJ1c19jbGFpbSA9IHJ0d19zZGlvX2J1c19jbGFpbV9uZWVkZWQocnR3c2Rpbyk7XG4tXG4gXHRpZiAoYnVzX2NsYWltKVxuIFx0XHRzZGlvX2NsYWltX2hvc3QocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMpO1xuLVxuLVx0cmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgdHhhZGRyLCBza2ItXHUwMDNlZGF0YSwgdHhzaXplKTtcbi1cbiYjNDM7XHRyZXQgPSBzZGlvX21lbWNweV90b2lvKHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cdTAwM2VkYXRhLFxuJiM0MztcdFx0XHQgICAgICAgd3JpdGVfc2l6ZSk7XG4gXHRpZiAoYnVzX2NsYWltKVxuIFx0XHRzZGlvX3JlbGVhc2VfaG9zdChydHdzZGlvLVx1MDAzZXNkaW9fZnVuYyk7XG4gXG4tXHRpZiAocmV0KVxuJiM0MztcdGlmIChyZXQpIHtcbiBcdFx0cnR3X3dhcm4ocnR3ZGV2LFxuIFx0XHRcdCBcJiMzNDtGYWlsZWQgdG8gd3JpdGUgJXp1IGJ5dGUocykgdG8gU0RJTyBwb3J0IDB4JTA4eFwmIzM0Oyxcbi1cdFx0XHQgdHhzaXplLCB0eGFkZHIpO1xuJiM0MztcdFx0XHQgd3JpdGVfc2l6ZSwgdHhhZGRyKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHJ0bDg3MjNicykge1xuJiM0MztcdFx0cGFnZXMgPSBESVZfUk9VTkRfVVAodHhzaXplLCBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3NpemUpO1xuJiM0MztcdFx0cnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhydHdkZXYsIHF1ZXVlLCBwYWdlcyk7XG4mIzQzO1x0fVxuIFxuJiM0MztvdXRfdHJpbTpcbiYjNDM7XHRpZiAod3JpdGVfc2l6ZSBcdTAwM2Ugb3JpZ19sZW4pXG4mIzQzO1x0XHRza2JfdHJpbShza2IsIG9yaWdfbGVuKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTY3Nyw3ICYjNDM7OTEzLDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luaXQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXG4tXHRydHdzZGlvLVx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUIHwgUkVHX1NESU9fSElNUl9DUFdNMTtcbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxuJiM0MztcdFx0cnR3c2Rpby1cdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUIHxcbiYjNDM7XHRcdFx0XHQgICAgUkVHX1NESU9fSElNUl9DUFdNMTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG5AQCAtNjg1LDYgJiM0Mzs5MjUsNyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHU4IHNpemUsIHRpbWVvdXQ7XG4gXG4gXHRzd2l0Y2ggKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkKSB7XG4mIzQzO1x0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg3MjNCOlxuIFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg3MDNCOlxuIFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg4MjFBOlxuIFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg4MTJBOlxuQEAgLTcxMiw2ICYjNDM7OTUzLDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRcdCAgICBGSUVMRF9QUkVQKEJJVF9ETUFfQUdHX1RPX1YxLCB0aW1lb3V0KSk7XG4gXG4gXHRydHdfd3JpdGU4X3NldChydHdkZXYsIFJFR19SWERNQV9NT0RFLCBCSVRfRE1BX01PREUpO1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4mIzQzO1x0XHRydHdfd3JpdGU4X21hc2socnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgQklUX0RNQV9CVVJTVF9DTlQsIDB4Myk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbkBAIC03NDksOSAmIzQzOzk5Miw2MSBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3NldHVwKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJlcHJvZ3JhbSB0aGUgcXVldWUgcGFnZSBhbGxvY2F0aW9uIGlmIHRoZSBjaGlwIGNhbWUgdXAgd2l0aCBub25lLiBUaGlzIGlzXG4mIzQzOyAqIGEgcmVwYWlyIHBhdGgsIG5vdCBwYXJ0IG9mIHRoZSBub3JtYWwgc3RhcnQgc2VxdWVuY2U6IGEgbm9uLXplcm8gZnJlZSBwYWdlXG4mIzQzOyAqIGNvdW50IG1lYW5zIHRoZSBhbGxvY2F0aW9uIGxhdGNoZWQgZHVyaW5nIHBvd2VyIG9uIGFuZCBtdXN0IGJlIGxlZnQgYWxvbmUsXG4mIzQzOyAqIGFuZCB3aXRob3V0IGEgdHJhbnNtaXQgcGFnZSBwb29sIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGl2aWRlIHVwIGVpdGhlci5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHdfY2hpcF9pbmZvICpjaGlwID0gcnR3ZGV2LVx1MDAzZWNoaXA7XG4mIzQzO1x0c3RydWN0IHJ0d19maWZvX2NvbmYgKmZpZm8gPSBcdTAwMjZydHdkZXYtXHUwMDNlZmlmbztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcbiYjNDM7XHR1MzIgZnJlZV90eHBnO1xuJiM0MztcdHUxNiBwdWJxX251bTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbiYjNDM7XHRpZiAoZnJlZV90eHBnIHx8ICFmaWZvLVx1MDAzZWFjcV9wZ19udW0pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnR3X3NkaW9fODcyM2JzX3B1YnFfbnVtKHJ0d2RldiwgXHUwMDI2cHVicV9udW0pO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRwZ190YmwgPSBcdTAwMjZjaGlwLVx1MDAzZXBhZ2VfdGFibGVbMF07XG4mIzQzO1x0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUlFQTl9OUFEsXG4mIzQzO1x0XHQgICAgQklUX1JRUE5fTkUocGdfdGJsLVx1MDAzZW5xX251bSwgcGdfdGJsLVx1MDAzZWV4cV9udW0pKTtcbiYjNDM7XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOLFxuJiM0MztcdFx0ICAgIEJJVF9SUVBOX0hMUChwZ190YmwtXHUwMDNlaHFfbnVtLCBwZ190YmwtXHUwMDNlbHFfbnVtLCBwdWJxX251bSkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3N0YXJ0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuJiM0MztcdHUzMiBjbGVhcjtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xuJiM0MztcdFx0aW50IHJldCA9IHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHJ0d2Rldik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcocnR3ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihydHdkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XG4mIzQzO1x0XHRjbGVhciA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSKSBcdTAwMjYgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xuJiM0MztcdFx0aWYgKGNsZWFyKVxuJiM0MztcdFx0XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGNsZWFyKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChydHdkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtODE1LDcgJiM0MzsxMTEwLDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2tpY2tfb2ZmKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFxuLVx0cXVldWVfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsIFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmspO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSByZXRyeSBtYXkgYWxyZWFkeSBiZSBwZW5kaW5nIHdpdGggYSBkZWxheTsgcmUtYXJtIGl0IHNvIGEgbmV3bHlcbiYjNDM7XHQgKiBxdWV1ZWQgZnJhbWUgaXMgbm90IGhlbGQgYmFjayBieSBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtb2RfZGVsYXllZF93b3JrKHJ0d3NkaW8tXHUwMDNldHh3cSwgXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNld29yaywgMCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2xpbmtfcHMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgYm9vbCBlbnRlcilcbkBAIC04MzEsNiAmIzQzOzExMzAsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbnRlcmZhY2VfY2ZnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXG4gXHR2YWwgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fVFhfQ1RSTCk7XG4gXHR2YWwgXHUwMDI2PSAweGZmZjg7XG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiYjNDM7XHRcdHZhbCB8PSBCSVRfU0RJT19UWF9DVFJMX0FMV0FZU19SRUNPR05JWkU7XG4gXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwsIHZhbCk7XG4gfVxuIFxuQEAgLTkyMiw2ICYjNDM7MTIyMyw1MCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3dyaXRlX2RhdGFfaDJjKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4ICpidWYsIHUzMiBzaXplKVxuIFx0cmV0dXJuIHJ0d19zZGlvX3dyaXRlX2RhdGEocnR3ZGV2LCBcdTAwMjZwa3RfaW5mbywgc2tiLCBSVFdfVFhfUVVFVUVfSDJDKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEJhY2stcHJlc3N1cmUgb24gdGhlIGRhdGEgQUNzIChCSy9CRS9WSS9WTyk6IG9uY2UgdGhlIHNvZnR3YXJlIEZJRk8gZmlsbHNcbiYjNDM7ICogcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIHN0b3AgdGhlIGNvcnJlc3BvbmRpbmcgbWFjODAyMTEgcXVldWUgc28gaXQgc3RvcHNcbiYjNDM7ICogaGFuZGluZyBmcmFtZXMgZG93biwgd2hpY2ggYm91bmRzIHRoZSBxdWV1ZWluZyBsYXRlbmN5LiBUaGUgcXVldWUgaXMgd29rZW5cbiYjNDM7ICogYWdhaW4gZnJvbSB0aGUgVFggZHJhaW4gcGF0aCBvbmNlIHRoZSBGSUZPIGZhbGxzIGJhY2sgdG8gdGhlIGxvdyB3YXRlcm1hcmsuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3RvcF90eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlLFxuJiM0MztcdFx0XHRcdFx0ICB1MTYgcV9tYXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpIHx8IHF1ZXVlIFx1MDAzZT0gUlRXX1RYX1FVRVVFX0JDTilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ0d3NkaW8tXHUwMDNldHhfcXVldWVfc3RvcHBlZFtxdWV1ZV0pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChza2JfcXVldWVfbGVuKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdKSBcdTAwM2MgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRydHdzZGlvLVx1MDAzZXR4X3F1ZXVlX3N0b3BwZWRbcXVldWVdID0gdHJ1ZTtcbiYjNDM7XHRpZWVlODAyMTFfc3RvcF9xdWV1ZShydHdkZXYtXHUwMDNlaHcsIHFfbWFwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3dha2VfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSxcbiYjNDM7XHRcdFx0XHRcdCAgdTE2IHFfbWFwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fCBxdWV1ZSBcdTAwM2U9IFJUV19UWF9RVUVVRV9CQ04pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICghcnR3c2Rpby1cdTAwM2V0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzZSBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVIpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJ0d3NkaW8tXHUwMDNldHhfcXVldWVfc3RvcHBlZFtxdWV1ZV0gPSBmYWxzZTtcbiYjNDM7XHRpZWVlODAyMTFfd2FrZV9xdWV1ZShydHdkZXYtXHUwMDNlaHcsIHFfbWFwKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3R4X3dyaXRlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgcnR3X3R4X3BrdF9pbmZvICpwa3RfaW5mbyxcbiBcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXG5AQCAtOTM3LDYgJiM0MzsxMjgyLDggQEAgc3RhdGljIGludCBydHdfc2Rpb190eF93cml0ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFxuIFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4gXG4mIzQzO1x0cnR3X3NkaW9fODcyM2JzX3N0b3BfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xMDk1LDYgJiM0MzsxNDQyLDE0IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHNkaW9fZnVuYyAqc2Rpb19mdW5jKVxuIFx0XHRydHdfc2Rpb19yeF9pc3IocnR3ZGV2KTtcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJUTDg3MjNCUyBrZWVwcyByYWlzaW5nIHRoZSBpbnRlcnJ1cHQgYWZ0ZXIgcmVzdW1lIGlmIHVuZGVmaW5lZFxuJiM0MztcdCAqIHN0YXR1cyBiaXRzIGFyZSB3cml0dGVuIGJhY2ssIHNvIGFja25vd2xlZGdlIG9ubHkgdGhlIGJpdHMgdGhpc1xuJiM0MztcdCAqIGRyaXZlciBkZWZpbmVzLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiYjNDM7XHRcdGhpc3IgXHUwMDI2PSBSVFdfU0RJT19ISVNSX0NMRUFSX01BU0s7XG4mIzQzO1xuIFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBoaXNyKTtcbiBcbiBcdHJ0d3NkaW8tXHUwMDNlaXJxX3RocmVhZCA9IE5VTEw7XG5AQCAtMTIzMSwzMyAmIzQzOzE1ODYsODEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5kaWNhdGVfdHhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4gXHRpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldixcbi1cdFx0XHRcdCAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpXG4mIzQzOy8qXG4mIzQzOyAqIFNlbmQgb25lIGZyYW1lIGZyb20gQHF1ZXVlLiBSZXR1cm5zIDAgd2hlbiBhIGZyYW1lIHdhcyB3cml0dGVuLCAxIHdoZW4gdGhlXG4mIzQzOyAqIHF1ZXVlIHdhcyBlbXB0eSBhbmQgYSBuZWdhdGl2ZSBlcnJubyB3aGVuIHRoZSB3cml0ZSBmYWlsZWQsIGluIHdoaWNoIGNhc2VcbiYjNDM7ICogdGhlIGZyYW1lIGlzIHB1dCBiYWNrIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdHUxNiBxX21hcDtcbiBcdGludCByZXQ7XG4gXG4gXHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSk7XG4gXHRpZiAoIXNrYilcbi1cdFx0cmV0dXJuO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4gXG4mIzQzO1x0cV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiBcdHJldCA9IHJ0d19zZGlvX3dyaXRlX3BvcnQocnR3ZGV2LCBza2IsIHF1ZXVlKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0c2tiX3F1ZXVlX2hlYWQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4gXHRydHdfc2Rpb19pbmRpY2F0ZV90eF9zdGF0dXMocnR3ZGV2LCBza2IpO1xuJiM0MztcbiYjNDM7XHRydHdfc2Rpb184NzIzYnNfd2FrZV90eF9xdWV1ZShydHdkZXYsIHF1ZXVlLCBxX21hcCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEZWNpZGUgd2hldGhlciB0aGUgUlRMODcyM0JTIHdhbnRzIHRoZSBUWCB3b3JrIHRvIHJ1biBhZ2FpbiwgYW5kIGlmIHNvXG4mIzQzOyAqIGFycmFuZ2UgaXQgYW5kIHRlbGwgdGhlIGNhbGxlciB0byBzdG9wIGRyYWluaW5nLiBUd28gY2FzZXMgbmVlZCBpdC5cbiYjNDM7ICpcbiYjNDM7ICogQSB0cmFuc21pdCBwYWdlIG9yIG91dHB1dCBxdWV1ZSBzaG9ydGFnZSBhbmQgYSBmYWlsZWQgc2tiIGV4cGFuc2lvbiBhcmVcbiYjNDM7ICogdHJhbnNpZW50IGFuZCBsZWF2ZSB0aGUgZnJhbWUgcXVldWVkLCBzbyBjb21lIGJhY2sgZm9yIGl0IHNob3J0bHkuIFRoYXRcbiYjNDM7ICogbWF0dGVycyBvbmNlIHRoZSBtYWM4MDIxMSBxdWV1ZSBjYW4gYmUgc3RvcHBlZDogYSBzdG9wcGVkIHF1ZXVlIGlzIGhhbmRlZFxuJiM0MzsgKiBubyBmdXJ0aGVyIGZyYW1lcywgc28gbm90aGluZyBlbHNlIHdvdWxkIGtpY2sgdGhpcyB3b3JrIGl0ZW0gYW5kIHRoZSBhY2Nlc3NcbiYjNDM7ICogY2F0ZWdvcnkgd291bGQgc3RheSBzdG9wcGVkIGZvciBnb29kLiBUaGUgcmVtYWluaW5nIGVycm9ycyBhcmUgbG9nZ2VkIHdoZXJlXG4mIzQzOyAqIHRoZXkgaGFwcGVuIGFuZCBhcmUgbm90IHJldHJpZWQuXG4mIzQzOyAqXG4mIzQzOyAqIEFmdGVyIGEgbWFuYWdlbWVudCBmcmFtZSwgcmVzdGFydCBmcm9tIHRoZSBoaWdoZXN0IHByaW9yaXR5IHF1ZXVlIHNvIHRoZVxuJiM0MzsgKiBqb2luIHNlcXVlbmNlIGlzIG5vdCBoZWxkIHVwIGJlaGluZCBhIGRhdGEgYmFja2xvZy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIHJ0d19zZGlvXzg3MjNic19yZXNjaGVkdWxlX3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKndvcmtfZGF0YSxcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSwgaW50IHJldClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGRlbGF5O1xuJiM0MztcbiYjNDM7XHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldCA9PSAtRUJVU1kgfHwgcmV0ID09IC1FTk9NRU0pXG4mIzQzO1x0XHRkZWxheSA9IFJUV19TRElPX1RYX1JFVFJZX0RFTEFZO1xuJiM0MztcdGVsc2UgaWYgKHJldCA9PSAwIFx1MDAyNlx1MDAyNiBxdWV1ZSA9PSBSVFdfVFhfUVVFVUVfTUdNVClcbiYjNDM7XHRcdGRlbGF5ID0gMDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHF1ZXVlX2RlbGF5ZWRfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsIFx1MDAyNndvcmtfZGF0YS1cdTAwM2V3b3JrLCBkZWxheSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp3b3JrX2RhdGEgPVxuLVx0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSwgd29yayk7XG4mIzQzO1x0XHRjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLFxuJiM0MztcdFx0XHQgICAgIHdvcmspO1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvO1xuIFx0c3RydWN0IHJ0d19kZXYgKnJ0d2Rldjtcbi1cdGludCBsaW1pdCwgcXVldWU7XG4mIzQzO1x0aW50IGxpbWl0LCBxdWV1ZSwgcmV0O1xuIFxuIFx0cnR3ZGV2ID0gd29ya19kYXRhLVx1MDAzZXJ0d2RldjtcbiBcdHJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG5AQCAtMTI2Nyw3ICYjNDM7MTY3MCwxMyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcbiBcdGZvciAocXVldWUgPSBSVEtfTUFYX1RYX1FVRVVFX05VTSAtIDE7IHF1ZXVlIFx1MDAzZT0gMDsgcXVldWUtLSkge1xuIFx0XHRmb3IgKGxpbWl0ID0gMDsgbGltaXQgXHUwMDNjIDEwMDA7IGxpbWl0JiM0MzsmIzQzOykge1xuLVx0XHRcdHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XG4mIzQzO1x0XHRcdHJldCA9IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNlIDApXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAocnR3X3NkaW9fODcyM2JzX3Jlc2NoZWR1bGVfdHgocnR3ZGV2LCB3b3JrX2RhdGEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBxdWV1ZSwgcmV0KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4gXG4gXHRcdFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkpXG4gXHRcdFx0XHRicmVhaztcbkBAIC0xMjk0LDE0ICYjNDM7MTcwMywxNiBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2luaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtpXSk7XG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZXR4X3F1ZXVlX3N0b3BwZWRbaV0gPSBmYWxzZTtcbiYjNDM7XHR9XG4gXHRydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSA9IGttYWxsb2Nfb2JqKCpydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSk7XG4gXHRpZiAoIXJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKVxuIFx0XHRnb3RvIGVycl9kZXN0cm95X3dxO1xuIFxuIFx0cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNlcnR3ZGV2ID0gcnR3ZGV2O1xuLVx0SU5JVF9XT1JLKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xuJiM0MztcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMTMxNSw2ICYjNDM7MTcyNiw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2RlaW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmspO1xuIFx0ZGVzdHJveV93b3JrcXVldWUocnR3c2Rpby1cdTAwM2V0eHdxKTtcbiBcdGtmcmVlKHJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG5pbmRleCA0NTdlOGIwMjM4MGU1Li5jZWMzZGQxYzRiMmU2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG5AQCAtMjIsNiAmIzQzOzIyLDcgQEBcbiBcbiAvKiBTRElPIFR4IENvbnRyb2wgKi9cbiAjZGVmaW5lIFJFR19TRElPX1RYX0NUUkxcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDAwKVxuJiM0MzsjZGVmaW5lIEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRVx0QklUKDQpXG4gXG4gLypTRElPIHN0YXR1cyB0aW1lb3V0Ki9cbiAjZGVmaW5lIFJFR19TRElPX1RJTUVPVVRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDAyKVxuQEAgLTc3LDYgJiM0Mzs3OCwxNCBAQFxuIC8qIHRoZSBmb2xsb3dpbmcgdHdvIGFyZSBSVEw4MTg4IFNESU8gU3BlY2lmaWMgKi9cbiAjZGVmaW5lIFJFR19TRElPX0hJU1JfTUNVX0VSUlx0XHRcdEJJVCgyOClcbiAjZGVmaW5lIFJFR19TRElPX0hJU1JfVFNGX0JJVDMyX1RPR0dMRVx0XHRCSVQoMjkpXG4mIzQzOyNkZWZpbmUgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLXHRcdFxcXG4mIzQzO1x0KFJFR19TRElPX0hJU1JfVFhFUlIgfCBSRUdfU0RJT19ISVNSX1JYRVJSIHwgXFxcbiYjNDM7XHQgUkVHX1NESU9fSElTUl9UWEZPVlcgfCBSRUdfU0RJT19ISVNSX1JYRk9WVyB8IFxcXG4mIzQzO1x0IFJFR19TRElPX0hJU1JfVFhCQ05PSyB8IFJFR19TRElPX0hJU1JfVFhCQ05FUlIgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX0MySENNRCB8IFJFR19TRElPX0hJU1JfQ1BXTTEgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX0NQV00yIHwgUkVHX1NESU9fSElTUl9IU0lTUl9JTkQgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX0dUSU5UM19JTkQgfCBSRUdfU0RJT19ISVNSX0dUSU5UNF9JTkQgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX1BTVElNRU9VVCB8IFJFR19TRElPX0hJU1JfT0NQSU5UKVxuIFxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgKi9cbiAjZGVmaW5lIFJFR19TRElPX0hDUFdNXHRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDE5KVxuQEAgLTg2LDYgJiM0Mzs5NSwxMCBAQFxuICNkZWZpbmUgUkVHX1NESU9fT1FUX0ZSRUVfUEdcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDFFKVxuIC8qIEZyZWUgVHggQnVmZmVyIFBhZ2UgKi9cbiAjZGVmaW5lIFJFR19TRElPX0ZSRUVfVFhQR1x0XHRcdChTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMjApXG4mIzQzOyNkZWZpbmUgQklUX0ZSRUVfVFhQR19ISUdIXHRcdFx0R0VOTUFTSyg3LCAwKVxuJiM0MzsjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTk9STUFMXHRcdFx0R0VOTUFTSygxNSwgOClcbiYjNDM7I2RlZmluZSBCSVRfRlJFRV9UWFBHX0xPV1x0XHRcdEdFTk1BU0soMjMsIDE2KVxuJiM0MzsjZGVmaW5lIEJJVF9GUkVFX1RYUEdfUFVCXHRcdFx0R0VOTUFTSygzMSwgMjQpXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAxICovXG4gI2RlZmluZSBSRUdfU0RJT19IQ1BXTTFcdFx0XHRcdChTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMjQpXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAyICovXG5AQCAtMTQzLDcgJiM0MzsxNTYsNyBAQCBzdHJ1Y3QgcnR3X3NkaW9fdHhfZGF0YSB7XG4gfTtcbiBcbiBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhIHtcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuJiM0MztcdHN0cnVjdCBkZWxheWVkX3dvcmsgd29yaztcbiBcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XG4gfTtcbiBcbkBAIC0xNTksNiAmIzQzOzE3MiwxMyBAQCBzdHJ1Y3QgcnR3X3NkaW8ge1xuIFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnR4d3E7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp0eF9oYW5kbGVyX2RhdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcbiYjNDM7XHRib29sIHR4X3F1ZXVlX3N0b3BwZWRbUlRLX01BWF9UWF9RVUVVRV9OVU1dO1xuJiM0MztcbiYjNDM7XHRhdG9taWNfdCBmcmVlX3BnX2hpZ2g7XG4mIzQzO1x0YXRvbWljX3QgZnJlZV9wZ19ub3JtYWw7XG4mIzQzO1x0YXRvbWljX3QgZnJlZV9wZ19sb3c7XG4mIzQzO1x0YXRvbWljX3QgZnJlZV9wZ19wdWI7XG4mIzQzO1x0YXRvbWljX3QgdHhfb3F0X2ZyZWU7XG4gfTtcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcnR3X3NkaW9fcG1fb3BzO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguY1xuaW5kZXggODc4NmJiYjQyMWMyYi4uNGUxMTBhNDU3ZTcxZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jXG5AQCAtMjA4LDggJiM0MzsyMDgsOSBAQCB2b2lkIHJ0d190eF9yZXBvcnRfZW5xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBzbilcbiBcdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2dHhfcmVwb3J0LVx1MDAzZXF1ZXVlLCBza2IpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eF9yZXBvcnQtXHUwMDNlcV9sb2NrLCBmbGFncyk7XG4gXG4tXHRpZiAocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzRCBcdTAwMjZcdTAwMjZcbi1cdCAgICBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQilcbiYjNDM7XHRpZiAoKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0QgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQikgfHxcbiYjNDM7XHQgICAgcnR3X2lzXzg3MjNicyhydHdkZXYpKVxuIFx0XHR0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcygyNTAwKTtcbiBcbiBcdG1vZF90aW1lcihcdTAwMjZ0eF9yZXBvcnQtXHUwMDNlcHVyZ2VfdGltZXIsIGppZmZpZXMgJiM0MzsgdGltZW91dCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIHJ0dzg4IFdpLUZpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFkZGluZyBzdXBwb3J0IGFuZCBmaXhpbmcgbG9naWMgZm9yIHRoZSBSVEw4NzIzQlMgU0RJTyBtb2R1bGUuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgcmVxdWlyZXMgYSBwaHlzaWNhbCBTRElPIFdpLUZpIGNoaXAgdG8gYmUgcHJlc2VudC4gU2luY2UgU0RJTyBoYXJkd2FyZSBhbmQgdGhpcyBzcGVjaWZpYyBSZWFsdGVrIGNoaXAgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCBmdXp6IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkYjZkYWIxNDAyNmJlZTkwN2Y3ODhhYTVlNWFkODhjNmQ2MmI1ZmVkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTkgMDc6NTg6NDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oCmluZGV4IGM2ZTk4MWJhNzk4NjguLjhmODZmN2MxMmRlNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oCkBAIC0xOTQsNiAmIzQzOzE5NCw3IEBAIGVudW0gcnR3X2NoaXBfdHlwZSB7CiAJUlRXX0NISVBfVFlQRV84NzIzRCwKIAlSVFdfQ0hJUF9UWVBFXzg4MjFDLAogCVJUV19DSElQX1RZUEVfODcwM0IsCiYjNDM7CVJUV19DSElQX1RZUEVfODcyM0IsCiAJUlRXX0NISVBfVFlQRV84ODIxQSwKIAlSVFdfQ0hJUF9UWVBFXzg4MTJBLAogCVJUV19DSElQX1RZUEVfODgxNEEsCkBAIC0yMTk0LDYgJiM0MzsyMTk1LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBydHdfY2hpcF9oYXNfdHhfc3RiYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogCXJldHVybiBydHdkZXYtJmd0O2NoaXAtJmd0O3R4X3N0YmM7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2lzXzg3MjNicyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7aWQgPT0gUlRXX0NISVBfVFlQRV84NzIzQiAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBydHdkZXYtJmd0O2hjaS50eXBlID09IFJUV19IQ0lfVFlQRV9TRElPOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdTggcnR3X2FjcXVpcmVfbWFjaWQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIHsKIAl1bnNpZ25lZCBsb25nIG1hY19pZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYwppbmRleCAwMWZkMjk5YWJiN2ZlLi5mZGUyMWM4NDBhYzAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jCkBAIC0yNTMsMTAgJiM0MzsyNTMsMTIgQEAgc3RhdGljIHZvaWQgcnR3X3J4X2ZpbGxfcnhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiAKIAlydHdfcnhfYWRkcl9tYXRjaChydHdkZXYsIHBrdF9zdGF0LCBoZHIpOwogCi0JLyogUnRsODcyM2NzIGRyaXZlciBjaGVja3MgZm9yIHNpemUgJmx0OyAxNCBvciBzaXplICZndDsgODE5MiBhbmQKLQkgKiBzaW1wbHkgZHJvcHMgdGhlIHBhY2tldC4KJiM0MzsJLyoKJiM0MzsJICogUnRsODcyM2NzIGFuZCBydGw4NzIzYnMgZHJpdmVycyBjaGVjayBmb3Igc2l6ZSAmbHQ7IDE0IG9yIHNpemUgJmd0OyA4MTkyCiYjNDM7CSAqIGFuZCBzaW1wbHkgZHJvcCB0aGUgcGFja2V0LgogCSAqLwotCWlmIChydHdkZXYtJmd0O2NoaXAtJmd0O2lkID09IFJUV19DSElQX1RZUEVfODcwM0IgJmFtcDsmYW1wOyBwa3Rfc3RhdC0mZ3Q7cGt0X2xlbiA9PSAwKSB7CiYjNDM7CWlmIChwa3Rfc3RhdC0mZ3Q7cGt0X2xlbiA9PSAwICZhbXA7JmFtcDsKJiM0MzsJICAgIChydHdkZXYtJmd0O2NoaXAtJmd0O2lkID09IFJUV19DSElQX1RZUEVfODcwM0IgfHwgcnR3X2lzXzg3MjNicyhydHdkZXYpKSkgewogCQlyeF9zdGF0dXMtJmd0O2ZsYWcgfD0gUlhfRkxBR19OT19QU0RVOwogCQlydHdfZGJnKHJ0d2RldiwgUlRXX0RCR19SWCwgJiMzNDt6ZXJvIGxlbmd0aCBwYWNrZXQmIzM0Oyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYwppbmRleCA1YjQwZDc0YjE2ZWUwLi5lNWJmOWNiYTA3MWVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYwpAQCAtMjAsNiAmIzQzOzIwLDE3IEBACiAjaW5jbHVkZSAmIzM0O3R4LmgmIzM0OwogCiAjZGVmaW5lIFJUV19TRElPX0lORElSRUNUX1JXX1JFVFJJRVMJCQk1MAomIzQzOyNkZWZpbmUgUlRXX1NESU9fT1FUX1RJTUVPVVRfTVMJCQkJMTAwMAomIzQzOwomIzQzOy8qCiYjNDM7ICogODcyM0JTIFNESU8gVFggRklGTyBiYWNrLXByZXNzdXJlIHdhdGVybWFya3M6IHN0b3AgdGhlIG1hYzgwMjExIHF1ZXVlIG9uY2UKJiM0MzsgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlCiYjNDM7ICogVFggZHJhaW4gcGF0aCBvbmNlIGl0IGZhbGxzIGJhY2sgdG8gdGhlIGxvdyBvbmUuIEJvdW5kcyB0aGUgcXVldWVpbmcgbGF0ZW5jeQomIzQzOyAqIHRoYXQgb3RoZXJ3aXNlIGNhdXNlcyB1cGxpbmsgYnVmZmVyYmxvYXQgLyBjb25nZXN0aW9uIGNvbGxhcHNlLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSCQkJMTYKJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUgkJCTgKJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZCQkJbXNlY3NfdG9famlmZmllcygxKQogCiBzdGF0aWMgYm9vbCBydHdfc2Rpb19pc19idXNfYWRkcih1MzIgYWRkcikKIHsKQEAgLTU0OCwxMiAmIzQzOzU1OSwxNTcgQEAgc3RhdGljIGludCBydHdfc2Rpb19yZWFkX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KQogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFRoZSBjYWNoZWQgZnJlZSBwYWdlIGNvdW50ZXJzIGFyZSBhIGZhc3QgcGF0aCBoaW50IG9ubHkuIFRoZXkgYXJlIHdyaXR0ZW4KJiM0MzsgKiBmcm9tIHRoZSBzaW5nbGUgdGhyZWFkZWQgVFggd29yayBhbmQsIGZvciBIMkMgYW5kIHJlc2VydmVkIHBhZ2Ugd3JpdGVzLAomIzQzOyAqIGZyb20gcHJvY2VzcyBjb250ZXh0LCBzbyB0aGV5IGFyZSBhdG9taWNfdDsgd2hlbmV2ZXIgdGhleSBjbGFpbSB0aGVyZSBpcwomIzQzOyAqIG5vdCBlbm91Z2ggcm9vbSB0aGV5IGFyZSByZXN5bmNocm9uaXNlZCBmcm9tIHRoZSBjaGlwIGJlZm9yZSB0aGUgY2FsbGVyCiYjNDM7ICogZ2l2ZXMgdXAsIHdoaWNoIGFsc28gYWJzb3JicyBhIGxvc3QgdXBkYXRlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKJiM0MzsJCQkJCSAgICB1MzIgZnJlZV90eHBnKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfaGlnaCwKJiM0MzsJCSAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfSElHSCkpOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19ub3JtYWwsCiYjNDM7CQkgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX05PUk1BTCkpOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19sb3csCiYjNDM7CQkgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0xPVykpOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19wdWIsCiYjNDM7CQkgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX1BVQikpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlZnJlc2ggdGhlIGNhY2hlZCBjb3VudGVycyBmcm9tIHRoZSBjaGlwLiBSZXR1cm5zIGZhbHNlIHdoZW4gdGhlIGNoaXAKJiM0MzsgKiByZXBvcnRzIG5vIGZyZWUgcGFnZXMgYXQgYWxsLCB3aGljaCBtZWFucyB0aGUgY291bnRzIGNhbm5vdCBiZSB0cnVzdGVkCiYjNDM7ICogYW5kIHRoZSBjYWxsZXIgaGFzIHRvIGRlY2lkZSB3aGF0IHRvIGRvIGluc3RlYWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgcnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwl1MzIgZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7CiYjNDM7CiYjNDM7CWlmICghZnJlZV90eHBnKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlydHdfc2Rpb184NzIzYnNfc3RvcmVfZnJlZV90eHBnKHJ0d2RldiwgZnJlZV90eHBnKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogU2l6ZSBvZiB0aGUgcHVibGljIHBhZ2UgcG9vbDogd2hhdGV2ZXIgdGhlIHRyYW5zbWl0IHBhZ2UgYWxsb2NhdGlvbiBoYXMKJiM0MzsgKiBsZWZ0IG9uY2UgdGhlIHBlciBxdWV1ZSBwb29scyBhcmUgdGFrZW4gb3V0LiBGYWlscyBpZiB0aGUgYWxsb2NhdGlvbgomIzQzOyAqIGNhbm5vdCBjb3ZlciB0aGUgcmVzZXJ2ZWQgcXVldWVzLCBzaW5jZSB0aGUgcmVtYWluZGVyIHdvdWxkIHVuZGVyZmxvdyBhbmQKJiM0MzsgKiB0aGVyZSB3b3VsZCBiZSBubyBzZW5zaWJsZSBwb29sIHRvIGhhbmQgb3V0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX3B1YnFfbnVtKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUxNiAqcHVicV9udW0pCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibCA9ICZhbXA7cnR3ZGV2LSZndDtjaGlwLSZndDtwYWdlX3RhYmxlWzBdOwomIzQzOwl1MTYgYWNxX3BnX251bSA9IHJ0d2Rldi0mZ3Q7Zmlmby5hY3FfcGdfbnVtOwomIzQzOwl1MTYgcmVzZXJ2ZWRfbnVtOwomIzQzOwomIzQzOwlyZXNlcnZlZF9udW0gPSBwZ190YmwtJmd0O2hxX251bSAmIzQzOyBwZ190YmwtJmd0O2xxX251bSAmIzQzOyBwZ190YmwtJmd0O25xX251bSAmIzQzOwomIzQzOwkJICAgICAgIHBnX3RibC0mZ3Q7ZXhxX251bSAmIzQzOyBwZ190YmwtJmd0O2dhcHFfbnVtOwomIzQzOwlpZiAoYWNxX3BnX251bSAmbHQ7PSByZXNlcnZlZF9udW0pIHsKJiM0MzsJCXJ0d19lcnIocnR3ZGV2LAomIzQzOwkJCSYjMzQ7bm8gdHJhbnNtaXQgcGFnZXMgbGVmdCBmb3IgdGhlIHB1YmxpYyBxdWV1ZTogJXUgb2YgJXUgcmVzZXJ2ZWRcbiYjMzQ7LAomIzQzOwkJCXJlc2VydmVkX251bSwgYWNxX3BnX251bSk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwkqcHVicV9udW0gPSBhY3FfcGdfbnVtIC0gcmVzZXJ2ZWRfbnVtOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsOwomIzQzOwl1MTYgcHVicV9udW07CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIFNlZWQgZnJvbSB0aGUgcGFnZSB0YWJsZSB3aGVuIHRoZSBjaGlwIGhhcyBub3RoaW5nIHRvIHJlcG9ydCB5ZXQuICovCiYjNDM7CWlmICghcnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHJ0d2RldikpIHsKJiM0MzsJCXJldCA9IHJ0d19zZGlvXzg3MjNic19wdWJxX251bShydHdkZXYsICZhbXA7cHVicV9udW0pOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJcGdfdGJsID0gJmFtcDtydHdkZXYtJmd0O2NoaXAtJmd0O3BhZ2VfdGFibGVbMF07CiYjNDM7CQlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19oaWdoLCBwZ190YmwtJmd0O2hxX251bSk7CiYjNDM7CQlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19ub3JtYWwsIHBnX3RibC0mZ3Q7bnFfbnVtKTsKJiM0MzsJCWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX2xvdywgcGdfdGJsLSZndDtscV9udW0pOwomIzQzOwkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfcHViLCBwdWJxX251bSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O3R4X29xdF9mcmVlLAomIzQzOwkJICAgcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogU3VtIG9mIHRoZSBxdWV1ZSYjMzk7cyBkZWRpY2F0ZWQgY291bnRlciBhbmQgdGhlIHB1YmxpYyBwb29sLCBjbGFtcGVkIGF0IHplcm86CiYjNDM7ICogYSBsb3N0IHVwZGF0ZSBiZXR3ZWVuIHRoZSBjaGVjayBiZWxvdyBhbmQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZygpCiYjNDM7ICogY2FuIGJyaWVmbHkgZHJpdmUgYSBjb3VudGVyIG5lZ2F0aXZlLCBhbmQgbGV0dGluZyB0aGF0IHdyYXAgd291bGQgaGlkZSB0aGUKJiM0MzsgKiBzaG9ydGFnZSBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSByZXN5bmMgZnJvbSB0aGUgY2hpcC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiYjNDM7CQkJCQkgICAgICAgYXRvbWljX3QgKmRlZGljYXRlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CWludCBmcmVlOwomIzQzOwomIzQzOwlmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKSAmIzQzOyBhdG9taWNfcmVhZCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfcHViKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZyZWUgJmd0OyAwID8gZnJlZSA6IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBhdG9taWNfdCAqcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CXN3aXRjaCAocXVldWUpIHsKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfVkk6CiYjNDM7CQlyZXR1cm4gJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX25vcm1hbDsKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfQkU6CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX0JLOgomIzQzOwkJcmV0dXJuICZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19sb3c7CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX0JDTjoKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfSDJDOgomIzQzOwljYXNlIFJUV19UWF9RVUVVRV9ISTA6CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX01HTVQ6CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX1ZPOgomIzQzOwkJcmV0dXJuICZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19oaWdoOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSwKIAkJCQkgICAgc2l6ZV90IGNvdW50KQogewogCXVuc2lnbmVkIGludCBwYWdlc19mcmVlLCBwYWdlc19uZWVkZWQ7CiAKLQlpZiAocnR3X2NoaXBfd2NwdV84MDUxKHJ0d2RldikpIHsKJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkgewomIzQzOwkJYXRvbWljX3QgKmRlZGljYXRlZDsKJiM0MzsKJiM0MzsJCWRlZGljYXRlZCA9IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSk7CiYjNDM7CQlpZiAoIWRlZGljYXRlZCkgewomIzQzOwkJCXJ0d193YXJuKHJ0d2RldiwgJiMzNDtVbmtub3duIG1hcHBpbmcgZm9yIHF1ZXVlICV1XG4mIzM0OywgcXVldWUpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcGFnZXNfZnJlZSA9IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHJ0d2RldiwgZGVkaWNhdGVkKTsKJiM0MzsJCXBhZ2VzX25lZWRlZCA9IERJVl9ST1VORF9VUChjb3VudCwgcnR3ZGV2LSZndDtjaGlwLSZndDtwYWdlX3NpemUpOwomIzQzOwkJaWYgKHBhZ2VzX25lZWRlZCAmbHQ7PSBwYWdlc19mcmVlKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJcnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHJ0d2Rldik7CiYjNDM7CQlwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpOwomIzQzOwl9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7CiAJCXUzMiBmcmVlX3R4cGc7CiAKIAkJZnJlZV90eHBnID0gcnR3X3NkaW9fcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTsKQEAgLTYzMiw0NCAmIzQzOzc4OCwxMjQgQEAgc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsJdW5zaWduZWQgbG9uZyBkZWFkbGluZTsKJiM0MzsJdTggZnJlZTsKJiM0MzsKJiM0MzsJaWYgKGF0b21pY19hZGRfdW5sZXNzKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfb3F0X2ZyZWUsIC0xLCAwKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlkZWFkbGluZSA9IGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhSVFdfU0RJT19PUVRfVElNRU9VVF9NUyk7CiYjNDM7CWRvIHsKJiM0MzsJCWZyZWUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRyk7CiYjNDM7CQlpZiAoZnJlZSkgewomIzQzOwkJCWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDt0eF9vcXRfZnJlZSwgZnJlZSAtIDEpOwomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJfQomIzQzOwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwomIzQzOwl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkZWFkbGluZSkpOwomIzQzOwomIzQzOwlyZXR1cm4gLUVCVVNZOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLAomIzQzOwkJCQkJIHVuc2lnbmVkIGludCBwYWdlcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CWF0b21pY190ICpkZWRpY2F0ZWQ7CiYjNDM7CXVuc2lnbmVkIGludCB0YWtlbjsKJiM0MzsJaW50IGZyZWU7CiYjNDM7CiYjNDM7CWRlZGljYXRlZCA9IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSk7CiYjNDM7CWlmICghZGVkaWNhdGVkKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKTsKJiM0MzsJdGFrZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHBhZ2VzLCBmcmVlICZndDsgMCA/IGZyZWUgOiAwKTsKJiM0MzsJYXRvbWljX3N1Yih0YWtlbiwgZGVkaWNhdGVkKTsKJiM0MzsKJiM0MzsJcGFnZXMgLT0gdGFrZW47CiYjNDM7CWlmIChwYWdlcyAmYW1wOyZhbXA7IGF0b21pY19zdWJfcmV0dXJuKHBhZ2VzLCAmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfcHViKSAmbHQ7IDApCiYjNDM7CQlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19wdWIsIDApOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcnR3X3NkaW9fd3JpdGVfcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpCiB7CiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsJYm9vbCBydGw4NzIzYnMgPSBydHdfaXNfODcyM2JzKHJ0d2Rldik7CiYjNDM7CXVuc2lnbmVkIGludCBvcmlnX2xlbiA9IHNrYi0mZ3Q7bGVuOwomIzQzOwl1bnNpZ25lZCBpbnQgcGFnZXM7CiYjNDM7CXNpemVfdCB3cml0ZV9zaXplOwogCWJvb2wgYnVzX2NsYWltOwogCXNpemVfdCB0eHNpemU7CiAJdTMyIHR4YWRkcjsKIAlpbnQgcmV0OwogCi0JdHhhZGRyID0gcnR3X3NkaW9fZ2V0X3R4X2FkZHIocnR3ZGV2LCBza2ItJmd0O2xlbiwgcXVldWUpOwotCWlmICghdHhhZGRyKQotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKHJ0bDg3MjNicykgewomIzQzOwkJdHhzaXplID0gcm91bmRfdXAob3JpZ19sZW4sIDQpOwomIzQzOwkJd3JpdGVfc2l6ZSA9IHR4c2l6ZSAmZ3Q7IFJUV19TRElPX0JMT0NLX1NJWkUgPwomIzQzOwkJCSAgICAgcm91bmRfdXAodHhzaXplLCBSVFdfU0RJT19CTE9DS19TSVpFKSA6IHR4c2l6ZTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLSZndDtzZGlvX2Z1bmMsIG9yaWdfbGVuKTsKJiM0MzsJCXdyaXRlX3NpemUgPSB0eHNpemU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHdyaXRlX3NpemUgJmd0OyBvcmlnX2xlbikgewomIzQzOwkJdW5zaWduZWQgaW50IHBhZGRpbmcgPSB3cml0ZV9zaXplIC0gb3JpZ19sZW47CiAKLQl0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby0mZ3Q7c2Rpb19mdW5jLCBza2ItJmd0O2xlbik7CiYjNDM7CQlpZiAoc2tiX3RhaWxyb29tKHNrYikgJmx0OyBwYWRkaW5nKSB7CiYjNDM7CQkJcmV0ID0gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsCiYjNDM7CQkJCQkgICAgICAgcGFkZGluZyAtIHNrYl90YWlscm9vbShza2IpLAomIzQzOwkJCQkJICAgICAgIEdGUF9LRVJORUwpOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CQlza2JfcHV0X3plcm8oc2tiLCBwYWRkaW5nKTsKJiM0MzsJfQomIzQzOwomIzQzOwl0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHR4c2l6ZSwgcXVldWUpOwomIzQzOwlpZiAoIXR4YWRkcikgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gb3V0X3RyaW07CiYjNDM7CX0KIAogCXJldCA9IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlLCB0eHNpemUpOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CiYjNDM7CQlnb3RvIG91dF90cmltOwomIzQzOwomIzQzOwlpZiAocnRsODcyM2JzKSB7CiYjNDM7CQlyZXQgPSBydHdfc2Rpb184NzIzYnNfd2FpdF90eF9vcXQocnR3ZGV2KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXRfdHJpbTsKJiM0MzsJfQogCiAJaWYgKCFJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKXNrYi0mZ3Q7ZGF0YSwgUlRXX1NESU9fREFUQV9QVFJfQUxJR04pKQogCQlydHdfd2FybihydHdkZXYsICYjMzQ7R290IHVuYWxpZ25lZCBTS0IgaW4gJXMoKSBmb3IgcXVldWUgJXVcbiYjMzQ7LAogCQkJIF9fZnVuY19fLCBxdWV1ZSk7CiAKIAlidXNfY2xhaW0gPSBydHdfc2Rpb19idXNfY2xhaW1fbmVlZGVkKHJ0d3NkaW8pOwotCiAJaWYgKGJ1c19jbGFpbSkKIAkJc2Rpb19jbGFpbV9ob3N0KHJ0d3NkaW8tJmd0O3NkaW9fZnVuYyk7Ci0KLQlyZXQgPSBzZGlvX21lbWNweV90b2lvKHJ0d3NkaW8tJmd0O3NkaW9fZnVuYywgdHhhZGRyLCBza2ItJmd0O2RhdGEsIHR4c2l6ZSk7Ci0KJiM0MzsJcmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLSZndDtzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLSZndDtkYXRhLAomIzQzOwkJCSAgICAgICB3cml0ZV9zaXplKTsKIAlpZiAoYnVzX2NsYWltKQogCQlzZGlvX3JlbGVhc2VfaG9zdChydHdzZGlvLSZndDtzZGlvX2Z1bmMpOwogCi0JaWYgKHJldCkKJiM0MzsJaWYgKHJldCkgewogCQlydHdfd2FybihydHdkZXYsCiAJCQkgJiMzNDtGYWlsZWQgdG8gd3JpdGUgJXp1IGJ5dGUocykgdG8gU0RJTyBwb3J0IDB4JTA4eCYjMzQ7LAotCQkJIHR4c2l6ZSwgdHhhZGRyKTsKJiM0MzsJCQkgd3JpdGVfc2l6ZSwgdHhhZGRyKTsKJiM0MzsJfSBlbHNlIGlmIChydGw4NzIzYnMpIHsKJiM0MzsJCXBhZ2VzID0gRElWX1JPVU5EX1VQKHR4c2l6ZSwgcnR3ZGV2LSZndDtjaGlwLSZndDtwYWdlX3NpemUpOwomIzQzOwkJcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhydHdkZXYsIHF1ZXVlLCBwYWdlcyk7CiYjNDM7CX0KIAomIzQzO291dF90cmltOgomIzQzOwlpZiAod3JpdGVfc2l6ZSAmZ3Q7IG9yaWdfbGVuKQomIzQzOwkJc2tiX3RyaW0oc2tiLCBvcmlnX2xlbik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjc3LDcgJiM0Mzs5MTMsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5pdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogewogCXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiAKLQlydHdzZGlvLSZndDtpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVCB8IFJFR19TRElPX0hJTVJfQ1BXTTE7CiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpCiYjNDM7CQlydHdzZGlvLSZndDtpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVDsKJiM0MzsJZWxzZQomIzQzOwkJcnR3c2Rpby0mZ3Q7aXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfAomIzQzOwkJCQkgICAgUkVHX1NESU9fSElNUl9DUFdNMTsKIH0KIAogc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCkBAIC02ODUsNiAmIzQzOzkyNSw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogCXU4IHNpemUsIHRpbWVvdXQ7CiAKIAlzd2l0Y2ggKHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7aWQpIHsKJiM0MzsJY2FzZSBSVFdfQ0hJUF9UWVBFXzg3MjNCOgogCWNhc2UgUlRXX0NISVBfVFlQRV84NzAzQjoKIAljYXNlIFJUV19DSElQX1RZUEVfODgyMUE6CiAJY2FzZSBSVFdfQ0hJUF9UWVBFXzg4MTJBOgpAQCAtNzEyLDYgJiM0Mzs5NTMsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIAkJICAgIEZJRUxEX1BSRVAoQklUX0RNQV9BR0dfVE9fVjEsIHRpbWVvdXQpKTsKIAogCXJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfTU9ERSk7CiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpCiYjNDM7CQlydHdfd3JpdGU4X21hc2socnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgQklUX0RNQV9CVVJTVF9DTlQsIDB4Myk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKQEAgLTc0OSw5ICYjNDM7OTkyLDYxIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fc2V0dXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qCiYjNDM7ICogUmVwcm9ncmFtIHRoZSBxdWV1ZSBwYWdlIGFsbG9jYXRpb24gaWYgdGhlIGNoaXAgY2FtZSB1cCB3aXRoIG5vbmUuIFRoaXMgaXMKJiM0MzsgKiBhIHJlcGFpciBwYXRoLCBub3QgcGFydCBvZiB0aGUgbm9ybWFsIHN0YXJ0IHNlcXVlbmNlOiBhIG5vbi16ZXJvIGZyZWUgcGFnZQomIzQzOyAqIGNvdW50IG1lYW5zIHRoZSBhbGxvY2F0aW9uIGxhdGNoZWQgZHVyaW5nIHBvd2VyIG9uIGFuZCBtdXN0IGJlIGxlZnQgYWxvbmUsCiYjNDM7ICogYW5kIHdpdGhvdXQgYSB0cmFuc21pdCBwYWdlIHBvb2wgdGhlcmUgaXMgbm90aGluZyB0byBkaXZpZGUgdXAgZWl0aGVyLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4oc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBydHdfY2hpcF9pbmZvICpjaGlwID0gcnR3ZGV2LSZndDtjaGlwOwomIzQzOwlzdHJ1Y3QgcnR3X2ZpZm9fY29uZiAqZmlmbyA9ICZhbXA7cnR3ZGV2LSZndDtmaWZvOwomIzQzOwljb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDsKJiM0MzsJdTMyIGZyZWVfdHhwZzsKJiM0MzsJdTE2IHB1YnFfbnVtOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTsKJiM0MzsJaWYgKGZyZWVfdHhwZyB8fCAhZmlmby0mZ3Q7YWNxX3BnX251bSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXQgPSBydHdfc2Rpb184NzIzYnNfcHVicV9udW0ocnR3ZGV2LCAmYW1wO3B1YnFfbnVtKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXBnX3RibCA9ICZhbXA7Y2hpcC0mZ3Q7cGFnZV90YWJsZVswXTsKJiM0MzsJcnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUlFQTl9OUFEsCiYjNDM7CQkgICAgQklUX1JRUE5fTkUocGdfdGJsLSZndDtucV9udW0sIHBnX3RibC0mZ3Q7ZXhxX251bSkpOwomIzQzOwlydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOLAomIzQzOwkJICAgIEJJVF9SUVBOX0hMUChwZ190YmwtJmd0O2hxX251bSwgcGdfdGJsLSZndDtscV9udW0sIHB1YnFfbnVtKSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcnR3X3NkaW9fc3RhcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIHsKJiM0MzsJdTMyIGNsZWFyOwomIzQzOwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7CiYjNDM7CQlpbnQgcmV0ID0gcnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4ocnR3ZGV2KTsKJiM0MzsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXJldCA9IHJ0d19zZGlvXzg3MjNic19pbml0X2ZyZWVfdHhwZyhydHdkZXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiAJcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHJ0d2Rldik7CiYjNDM7CiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHsKJiM0MzsJCWNsZWFyID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0hJU1IpICZhbXA7IFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTSzsKJiM0MzsJCWlmIChjbGVhcikKJiM0MzsJCQlydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGNsZWFyKTsKJiM0MzsJfQomIzQzOwogCXJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQocnR3ZGV2KTsKIAogCXJldHVybiAwOwpAQCAtODE1LDcgJiM0MzsxMTEwLDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2tpY2tfb2ZmKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiB7CiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKIAotCXF1ZXVlX3dvcmsocnR3c2Rpby0mZ3Q7dHh3cSwgJmFtcDtydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEtJmd0O3dvcmspOwomIzQzOwkvKgomIzQzOwkgKiBBIHJldHJ5IG1heSBhbHJlYWR5IGJlIHBlbmRpbmcgd2l0aCBhIGRlbGF5OyByZS1hcm0gaXQgc28gYSBuZXdseQomIzQzOwkgKiBxdWV1ZWQgZnJhbWUgaXMgbm90IGhlbGQgYmFjayBieSBpdC4KJiM0MzsJICovCiYjNDM7CW1vZF9kZWxheWVkX3dvcmsocnR3c2Rpby0mZ3Q7dHh3cSwgJmFtcDtydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEtJmd0O3dvcmssIDApOwogfQogCiBzdGF0aWMgdm9pZCBydHdfc2Rpb19saW5rX3BzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgZW50ZXIpCkBAIC04MzEsNiAmIzQzOzExMzAsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbnRlcmZhY2VfY2ZnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAKIAl2YWwgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fVFhfQ1RSTCk7CiAJdmFsICZhbXA7PSAweGZmZjg7CiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpCiYjNDM7CQl2YWwgfD0gQklUX1NESU9fVFhfQ1RSTF9BTFdBWVNfUkVDT0dOSVpFOwogCXJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fVFhfQ1RSTCwgdmFsKTsKIH0KIApAQCAtOTIyLDYgJiM0MzsxMjIzLDUwIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fd3JpdGVfZGF0YV9oMmMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggKmJ1ZiwgdTMyIHNpemUpCiAJcmV0dXJuIHJ0d19zZGlvX3dyaXRlX2RhdGEocnR3ZGV2LCAmYW1wO3BrdF9pbmZvLCBza2IsIFJUV19UWF9RVUVVRV9IMkMpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBCYWNrLXByZXNzdXJlIG9uIHRoZSBkYXRhIEFDcyAoQksvQkUvVkkvVk8pOiBvbmNlIHRoZSBzb2Z0d2FyZSBGSUZPIGZpbGxzCiYjNDM7ICogcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIHN0b3AgdGhlIGNvcnJlc3BvbmRpbmcgbWFjODAyMTEgcXVldWUgc28gaXQgc3RvcHMKJiM0MzsgKiBoYW5kaW5nIGZyYW1lcyBkb3duLCB3aGljaCBib3VuZHMgdGhlIHF1ZXVlaW5nIGxhdGVuY3kuIFRoZSBxdWV1ZSBpcyB3b2tlbgomIzQzOyAqIGFnYWluIGZyb20gdGhlIFRYIGRyYWluIHBhdGggb25jZSB0aGUgRklGTyBmYWxscyBiYWNrIHRvIHRoZSBsb3cgd2F0ZXJtYXJrLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19zdG9wX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiYjNDM7CQkJCQkgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUsCiYjNDM7CQkJCQkgIHUxNiBxX21hcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpIHx8IHF1ZXVlICZndDs9IFJUV19UWF9RVUVVRV9CQ04pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChydHdzZGlvLSZndDt0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKHNrYl9xdWV1ZV9sZW4oJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0pICZsdDsgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlydHdzZGlvLSZndDt0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSA9IHRydWU7CiYjNDM7CWllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0d2Rldi0mZ3Q7aHcsIHFfbWFwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3dha2VfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKJiM0MzsJCQkJCSAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSwKJiM0MzsJCQkJCSAgdTE2IHFfbWFwKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikgfHwgcXVldWUgJmd0Oz0gUlRXX1RYX1FVRVVFX0JDTikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKCFydHdzZGlvLSZndDt0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKHNrYl9xdWV1ZV9sZW4oJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0pICZndDsgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlydHdzZGlvLSZndDt0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSA9IGZhbHNlOwomIzQzOwlpZWVlODAyMTFfd2FrZV9xdWV1ZShydHdkZXYtJmd0O2h3LCBxX21hcCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBydHdfc2Rpb190eF93cml0ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAogCQkJICAgICBzdHJ1Y3QgcnR3X3R4X3BrdF9pbmZvICpwa3RfaW5mbywKIAkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTkzNyw2ICYjNDM7MTI4Miw4IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fdHhfd3JpdGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKIAogCXNrYl9xdWV1ZV90YWlsKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfcXVldWVbcXVldWVdLCBza2IpOwogCiYjNDM7CXJ0d19zZGlvXzg3MjNic19zdG9wX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA5NSw2ICYjNDM7MTQ0MiwxNCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYykKIAkJcnR3X3NkaW9fcnhfaXNyKHJ0d2Rldik7CiAJfQogCiYjNDM7CS8qCiYjNDM7CSAqIFJUTDg3MjNCUyBrZWVwcyByYWlzaW5nIHRoZSBpbnRlcnJ1cHQgYWZ0ZXIgcmVzdW1lIGlmIHVuZGVmaW5lZAomIzQzOwkgKiBzdGF0dXMgYml0cyBhcmUgd3JpdHRlbiBiYWNrLCBzbyBhY2tub3dsZWRnZSBvbmx5IHRoZSBiaXRzIHRoaXMKJiM0MzsJICogZHJpdmVyIGRlZmluZXMuIE90aGVyIGNoaXBzIGtlZXAgdGhlIGV4aXN0aW5nIGJlaGF2aW91ci4KJiM0MzsJICovCiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpCiYjNDM7CQloaXNyICZhbXA7PSBSVFdfU0RJT19ISVNSX0NMRUFSX01BU0s7CiYjNDM7CiAJcnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBoaXNyKTsKIAogCXJ0d3NkaW8tJmd0O2lycV90aHJlYWQgPSBOVUxMOwpAQCAtMTIzMSwzMyAmIzQzOzE1ODYsODEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5kaWNhdGVfdHhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiAJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpOwogfQogCi1zdGF0aWMgdm9pZCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCi0JCQkJICAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSkKJiM0MzsvKgomIzQzOyAqIFNlbmQgb25lIGZyYW1lIGZyb20gQHF1ZXVlLiBSZXR1cm5zIDAgd2hlbiBhIGZyYW1lIHdhcyB3cml0dGVuLCAxIHdoZW4gdGhlCiYjNDM7ICogcXVldWUgd2FzIGVtcHR5IGFuZCBhIG5lZ2F0aXZlIGVycm5vIHdoZW4gdGhlIHdyaXRlIGZhaWxlZCwgaW4gd2hpY2ggY2FzZQomIzQzOyAqIHRoZSBmcmFtZSBpcyBwdXQgYmFjayBhdCB0aGUgaGVhZCBvZiB0aGUgcXVldWUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiYjNDM7CQkJCSAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSkKIHsKIAlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwogCXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CXUxNiBxX21hcDsKIAlpbnQgcmV0OwogCiAJc2tiID0gc2tiX2RlcXVldWUoJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0pOwogCWlmICghc2tiKQotCQlyZXR1cm47CiYjNDM7CQlyZXR1cm4gMTsKIAomIzQzOwlxX21hcCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwogCXJldCA9IHJ0d19zZGlvX3dyaXRlX3BvcnQocnR3ZGV2LCBza2IsIHF1ZXVlKTsKIAlpZiAocmV0KSB7CiAJCXNrYl9xdWV1ZV9oZWFkKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfcXVldWVbcXVldWVdLCBza2IpOwotCQlyZXR1cm47CiYjNDM7CQlyZXR1cm4gcmV0OwogCX0KIAogCXJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhydHdkZXYsIHNrYik7CiYjNDM7CiYjNDM7CXJ0d19zZGlvXzg3MjNic193YWtlX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUsIHFfbWFwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogRGVjaWRlIHdoZXRoZXIgdGhlIFJUTDg3MjNCUyB3YW50cyB0aGUgVFggd29yayB0byBydW4gYWdhaW4sIGFuZCBpZiBzbwomIzQzOyAqIGFycmFuZ2UgaXQgYW5kIHRlbGwgdGhlIGNhbGxlciB0byBzdG9wIGRyYWluaW5nLiBUd28gY2FzZXMgbmVlZCBpdC4KJiM0MzsgKgomIzQzOyAqIEEgdHJhbnNtaXQgcGFnZSBvciBvdXRwdXQgcXVldWUgc2hvcnRhZ2UgYW5kIGEgZmFpbGVkIHNrYiBleHBhbnNpb24gYXJlCiYjNDM7ICogdHJhbnNpZW50IGFuZCBsZWF2ZSB0aGUgZnJhbWUgcXVldWVkLCBzbyBjb21lIGJhY2sgZm9yIGl0IHNob3J0bHkuIFRoYXQKJiM0MzsgKiBtYXR0ZXJzIG9uY2UgdGhlIG1hYzgwMjExIHF1ZXVlIGNhbiBiZSBzdG9wcGVkOiBhIHN0b3BwZWQgcXVldWUgaXMgaGFuZGVkCiYjNDM7ICogbm8gZnVydGhlciBmcmFtZXMsIHNvIG5vdGhpbmcgZWxzZSB3b3VsZCBraWNrIHRoaXMgd29yayBpdGVtIGFuZCB0aGUgYWNjZXNzCiYjNDM7ICogY2F0ZWdvcnkgd291bGQgc3RheSBzdG9wcGVkIGZvciBnb29kLiBUaGUgcmVtYWluaW5nIGVycm9ycyBhcmUgbG9nZ2VkIHdoZXJlCiYjNDM7ICogdGhleSBoYXBwZW4gYW5kIGFyZSBub3QgcmV0cmllZC4KJiM0MzsgKgomIzQzOyAqIEFmdGVyIGEgbWFuYWdlbWVudCBmcmFtZSwgcmVzdGFydCBmcm9tIHRoZSBoaWdoZXN0IHByaW9yaXR5IHF1ZXVlIHNvIHRoZQomIzQzOyAqIGpvaW4gc2VxdWVuY2UgaXMgbm90IGhlbGQgdXAgYmVoaW5kIGEgZGF0YSBiYWNrbG9nLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIHJ0d19zZGlvXzg3MjNic19yZXNjaGVkdWxlX3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiYjNDM7CQkJCQkgIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKndvcmtfZGF0YSwKJiM0MzsJCQkJCSAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZGVsYXk7CiYjNDM7CiYjNDM7CWlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAocmV0ID09IC1FQlVTWSB8fCByZXQgPT0gLUVOT01FTSkKJiM0MzsJCWRlbGF5ID0gUlRXX1NESU9fVFhfUkVUUllfREVMQVk7CiYjNDM7CWVsc2UgaWYgKHJldCA9PSAwICZhbXA7JmFtcDsgcXVldWUgPT0gUlRXX1RYX1FVRVVFX01HTVQpCiYjNDM7CQlkZWxheSA9IDA7CiYjNDM7CWVsc2UKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcXVldWVfZGVsYXllZF93b3JrKHJ0d3NkaW8tJmd0O3R4d3EsICZhbXA7d29ya19kYXRhLSZndDt3b3JrLCBkZWxheSk7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp3b3JrX2RhdGEgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSwgd29yayk7CiYjNDM7CQljb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLAomIzQzOwkJCSAgICAgd29yayk7CiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvOwogCXN0cnVjdCBydHdfZGV2ICpydHdkZXY7Ci0JaW50IGxpbWl0LCBxdWV1ZTsKJiM0MzsJaW50IGxpbWl0LCBxdWV1ZSwgcmV0OwogCiAJcnR3ZGV2ID0gd29ya19kYXRhLSZndDtydHdkZXY7CiAJcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CkBAIC0xMjY3LDcgJiM0MzsxNjcwLDEzIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCiAJZm9yIChxdWV1ZSA9IFJUS19NQVhfVFhfUVVFVUVfTlVNIC0gMTsgcXVldWUgJmd0Oz0gMDsgcXVldWUtLSkgewogCQlmb3IgKGxpbWl0ID0gMDsgbGltaXQgJmx0OyAxMDAwOyBsaW1pdCYjNDM7JiM0MzspIHsKLQkJCXJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7CiYjNDM7CQkJcmV0ID0gcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShydHdkZXYsIHF1ZXVlKTsKJiM0MzsJCQlpZiAocmV0ICZndDsgMCkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkJaWYgKHJ0d19zZGlvXzg3MjNic19yZXNjaGVkdWxlX3R4KHJ0d2Rldiwgd29ya19kYXRhLAomIzQzOwkJCQkJCQkgIHF1ZXVlLCByZXQpKQomIzQzOwkJCQlyZXR1cm47CiAKIAkJCWlmIChza2JfcXVldWVfZW1wdHkoJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0pKQogCQkJCWJyZWFrOwpAQCAtMTI5NCwxNCAmIzQzOzE3MDMsMTYgQEAgc3RhdGljIGludCBydHdfc2Rpb19pbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWZvciAoaSA9IDA7IGkgJmx0OyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSYjNDM7JiM0MzspCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSYjNDM7JiM0MzspIHsKIAkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO3J0d3NkaW8tJmd0O3R4X3F1ZXVlW2ldKTsKJiM0MzsJCXJ0d3NkaW8tJmd0O3R4X3F1ZXVlX3N0b3BwZWRbaV0gPSBmYWxzZTsKJiM0MzsJfQogCXJ0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YSA9IGttYWxsb2Nfb2JqKCpydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEpOwogCWlmICghcnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhKQogCQlnb3RvIGVycl9kZXN0cm95X3dxOwogCiAJcnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhLSZndDtydHdkZXYgPSBydHdkZXY7Ci0JSU5JVF9XT1JLKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhLSZndDt3b3JrLCBydHdfc2Rpb190eF9oYW5kbGVyKTsKJiM0MzsJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDtydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEtJmd0O3dvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTEzMTUsNiAmIzQzOzE3MjYsNyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19kZWluaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIAlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwogCWludCBpOwogCiYjNDM7CWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYW1wO3J0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YS0mZ3Q7d29yayk7CiAJZGVzdHJveV93b3JrcXVldWUocnR3c2Rpby0mZ3Q7dHh3cSk7CiAJa2ZyZWUocnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaAppbmRleCA0NTdlOGIwMjM4MGU1Li5jZWMzZGQxYzRiMmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaApAQCAtMjIsNiAmIzQzOzIyLDcgQEAKIAogLyogU0RJTyBUeCBDb250cm9sICovCiAjZGVmaW5lIFJFR19TRElPX1RYX0NUUkwJCQkoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDAwKQomIzQzOyNkZWZpbmUgQklUX1NESU9fVFhfQ1RSTF9BTFdBWVNfUkVDT0dOSVpFCUJJVCg0KQogCiAvKlNESU8gc3RhdHVzIHRpbWVvdXQqLwogI2RlZmluZSBSRUdfU0RJT19USU1FT1VUCQkJKFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAwMikKQEAgLTc3LDYgJiM0Mzs3OCwxNCBAQAogLyogdGhlIGZvbGxvd2luZyB0d28gYXJlIFJUTDgxODggU0RJTyBTcGVjaWZpYyAqLwogI2RlZmluZSBSRUdfU0RJT19ISVNSX01DVV9FUlIJCQlCSVQoMjgpCiAjZGVmaW5lIFJFR19TRElPX0hJU1JfVFNGX0JJVDMyX1RPR0dMRQkJQklUKDI5KQomIzQzOyNkZWZpbmUgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLCQlcCiYjNDM7CShSRUdfU0RJT19ISVNSX1RYRVJSIHwgUkVHX1NESU9fSElTUl9SWEVSUiB8IFwKJiM0MzsJIFJFR19TRElPX0hJU1JfVFhGT1ZXIHwgUkVHX1NESU9fSElTUl9SWEZPVlcgfCBcCiYjNDM7CSBSRUdfU0RJT19ISVNSX1RYQkNOT0sgfCBSRUdfU0RJT19ISVNSX1RYQkNORVJSIHwgXAomIzQzOwkgUkVHX1NESU9fSElTUl9DMkhDTUQgfCBSRUdfU0RJT19ISVNSX0NQV00xIHwgXAomIzQzOwkgUkVHX1NESU9fSElTUl9DUFdNMiB8IFJFR19TRElPX0hJU1JfSFNJU1JfSU5EIHwgXAomIzQzOwkgUkVHX1NESU9fSElTUl9HVElOVDNfSU5EIHwgUkVHX1NESU9fSElTUl9HVElOVDRfSU5EIHwgXAomIzQzOwkgUkVHX1NESU9fSElTUl9QU1RJTUVPVVQgfCBSRUdfU0RJT19ISVNSX09DUElOVCkKIAogLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAqLwogI2RlZmluZSBSRUdfU0RJT19IQ1BXTQkJCQkoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDE5KQpAQCAtODYsNiAmIzQzOzk1LDEwIEBACiAjZGVmaW5lIFJFR19TRElPX09RVF9GUkVFX1BHCQkJKFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAxRSkKIC8qIEZyZWUgVHggQnVmZmVyIFBhZ2UgKi8KICNkZWZpbmUgUkVHX1NESU9fRlJFRV9UWFBHCQkJKFNESU9fTE9DQUxfT0ZGU0VUICYjNDM7IDB4MDAyMCkKJiM0MzsjZGVmaW5lIEJJVF9GUkVFX1RYUEdfSElHSAkJCUdFTk1BU0soNywgMCkKJiM0MzsjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTk9STUFMCQkJR0VOTUFTSygxNSwgOCkKJiM0MzsjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTE9XCQkJR0VOTUFTSygyMywgMTYpCiYjNDM7I2RlZmluZSBCSVRfRlJFRV9UWFBHX1BVQgkJCUdFTk1BU0soMzEsIDI0KQogLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAxICovCiAjZGVmaW5lIFJFR19TRElPX0hDUFdNMQkJCQkoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDI0KQogLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAyICovCkBAIC0xNDMsNyAmIzQzOzE1Niw3IEBAIHN0cnVjdCBydHdfc2Rpb190eF9kYXRhIHsKIH07CiAKIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgewotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwomIzQzOwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CiAJc3RydWN0IHJ0d19kZXYgKnJ0d2RldjsKIH07CiAKQEAgLTE1OSw2ICYjNDM7MTcyLDEzIEBAIHN0cnVjdCBydHdfc2RpbyB7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnR4d3E7CiAJc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSAqdHhfaGFuZGxlcl9kYXRhOwogCXN0cnVjdCBza19idWZmX2hlYWQgdHhfcXVldWVbUlRLX01BWF9UWF9RVUVVRV9OVU1dOwomIzQzOwlib29sIHR4X3F1ZXVlX3N0b3BwZWRbUlRLX01BWF9UWF9RVUVVRV9OVU1dOwomIzQzOwomIzQzOwlhdG9taWNfdCBmcmVlX3BnX2hpZ2g7CiYjNDM7CWF0b21pY190IGZyZWVfcGdfbm9ybWFsOwomIzQzOwlhdG9taWNfdCBmcmVlX3BnX2xvdzsKJiM0MzsJYXRvbWljX3QgZnJlZV9wZ19wdWI7CiYjNDM7CWF0b21pY190IHR4X29xdF9mcmVlOwogfTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJ0d19zZGlvX3BtX29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguYwppbmRleCA4Nzg2YmJiNDIxYzJiLi40ZTExMGE0NTdlNzFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jCkBAIC0yMDgsOCAmIzQzOzIwOCw5IEBAIHZvaWQgcnR3X3R4X3JlcG9ydF9lbnF1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IsIHU4IHNuKQogCV9fc2tiX3F1ZXVlX3RhaWwoJmFtcDt0eF9yZXBvcnQtJmd0O3F1ZXVlLCBza2IpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0eF9yZXBvcnQtJmd0O3FfbG9jaywgZmxhZ3MpOwogCi0JaWYgKHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7aWQgPT0gUlRXX0NISVBfVFlQRV84NzIzRCAmYW1wOyZhbXA7Ci0JICAgIHJ0d2Rldi0mZ3Q7aGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQikKJiM0MzsJaWYgKChydHdkZXYtJmd0O2NoaXAtJmd0O2lkID09IFJUV19DSElQX1RZUEVfODcyM0QgJmFtcDsmYW1wOwomIzQzOwkgICAgIHJ0d2Rldi0mZ3Q7aGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQikgfHwKJiM0MzsJICAgIHJ0d19pc184NzIzYnMocnR3ZGV2KSkKIAkJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwMCk7CiAKIAltb2RfdGltZXIoJmFtcDt0eF9yZXBvcnQtJmd0O3B1cmdlX3RpbWVyLCBqaWZmaWVzICYjNDM7IHRpbWVvdXQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY0MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEwNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgVGhpcyBydHc4OCBQYXRjaCBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgYHJ0dzg4YCBkcml2ZXIsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIFNESU8gaW50ZXJmYWNlIGFuZCBhZGRpbmcgc3VwcG9ydC9maXhpbmcgbG9naWMgZm9yIGBSVFdfQ0hJUF9UWVBFXzg3MjNCYCBhbmQgYFJUV19DSElQX1RZUEVfODcyM0JTYC4gSXQgc2VlbXMgcHJldHR5IGV4dGVuc2l2ZSDigJMgdGhlcmUgYXJlIG5ldyBoZWxwZXIgZnVuY3Rpb25zIGxpa2UgYHJ0d19pc184NzIzYnNgLCBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGZ1bmN0aW9ucyBsaWtlIGBydHdfcnhfZmlsbF9yeF9zdGF0dXNgLCBhbmQgYSB3aG9sZSBzbGV3IG9mIG5ldyBTRElPLXNwZWNpZmljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIFRYIHBhZ2UgbWFuYWdlbWVudCBhbmQgcXVldWUgaGFuZGxpbmcuIE1hbnkgZXhpc3RpbmcgZnVuY3Rpb25zIGFyZSBhbHNvIGJlaW5nIHVwZGF0ZWQuIFRoZSBjaGFuZ2VzIHRvdWNoIHVwb24gY29yZSBTRElPIG9wZXJhdGlvbnMg4oCTIHJlYWRpbmcvd3JpdGluZyBwb3J0cywgaW5pdGlhbGl6aW5nLCBlbmFibGluZyBSWCBhZ2dyZWdhdGlvbiwgVFggaGFuZGxpbmcsIGFuZCBpbnRlcnJ1cHQgcHJvY2Vzc2luZy4KClRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIgaXMgd2hldGhlciB0aGlzIGNvZGUgaXMgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdGhhdCBTeXprYWxsZXIgY2FuIGVhc2lseSBmdXp6LiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IGBydHc4OGAgaXMgYSBSZWFsdGVrIFdpLUZpIGRyaXZlciwgYW5kIHRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGRlYWxzIHdpdGggdGhlIFNESU8gaW50ZXJmYWNlLiBTRElPIGRldmljZXMgYXJlIG5vdG9yaW91c2x5IGRpZmZpY3VsdCB0byBlbXVsYXRlIHdlbGwgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0Ugc2V0dXBzLCBlc3BlY2lhbGx5IHdoZW4geW91JiMzOTtyZSB0YWxraW5nIGFib3V0IHNwZWNpZmljIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZS4gV2hpbGUgUUVNVSAqZG9lcyogaGF2ZSBTREhDSSBlbXVsYXRpb24sIHRoYXQgZG9lc24mIzM5O3QgYXV0b21hdGljYWxseSBtZWFuIHdlIGhhdmUgYSB2aXJ0dWFsIFNESU8gKmNhcmQqIHRoYXQgdGhpcyBSZWFsdGVrIGRyaXZlciBjYW4gaW50ZXJhY3Qgd2l0aC4gYG1hYzgwMjExX2h3c2ltYCBpcyBhbiBpbnRlcmVzdGluZyBleGFtcGxlIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiwgYnV0IGl0JiMzOTtzIGEgdmlydHVhbCBkcml2ZXIsIG5vdCBhbiBlbXVsYXRvciBmb3IgcmVhbHRlayBoYXJkd2FyZS4KClRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBldmVuIHdoZW4gdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIEl0IGNhbGxzIG91dCB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyB0aGF0IG5lZWQgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSwgd2hpY2ggcHJldHR5IG11Y2ggZGVzY3JpYmVzIHRoZSBzaXR1YXRpb24gd2l0aCBTRElPIFdpLUZpIGNoaXBzLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgcnR3ODhgIFNESU8gY2FuJiMzOTt0IGJlIHByb2JlZCB3aXRob3V0IHJlYWwgaGFyZHdhcmUuIFN5emthbGxlciBoYXMgVVNCIGFuZCBQQ0kgZnV6emluZywgYnV0IFNESU8/IEkgZG9uJiMzOTt0IHJlY2FsbCBzZWVpbmcgYW55IFNESU8gZnV6emluZyBzdXBwb3J0IGRpcmVjdGx5LiBUaGUgaW5zdHJ1Y3Rpb25zIHN1Z2dlc3QgdGhlIGNvZGUgaXMgKnVucmVhY2hhYmxlKi4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZnVuY3Rpb24gY2FsbCBjaGFpbjogYHJ0d19zZGlvX3dyaXRlX3BvcnRgIGlzIGNhbGxlZCBmcm9tIGBydHdfc2Rpb190eF93cml0ZWAsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgdGhlIFNESU8gZHJpdmVyLgoKU28sIHJlYWxpc3RpY2FsbHksIGlmIHRoZXJlJiMzOTtzIG5vIFNESU8gZnV6emVyIGluIFN5emthbGxlciBhbmQgbm8gdmlydHVhbCBTRElPIGhhcmR3YXJlIHRoYXQgY2FuIGJlIG1lYW5pbmdmdWxseSB1c2VkIGJ5IHRoZSBgcnR3ODhgIGRyaXZlciwgdGhlbiB0aGlzIGNvZGUgaXMgZGVhZCBvbiBhcnJpdmFsIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUgcGF0Y2ggaXMgcHJvYmFibHkgbm90IHdvcnRoIGZ1enppbmcuIEkgY291bGQgdHJ5IHRvIHNlYXJjaCBmb3IgJiMzNDtzZGlvJiMzNDsgaW4gdGhlIGtlcm5lbCBvciBzeXprYWxsZXIsIG9yIGZvciBhbnkgU0RJTyBmdXp6aW5nIGRyaXZlcnMsIGJ1dCBJIGFtIGFsbW9zdCBjZXJ0YWluIEkgd291bGQgZmluZCBub3RoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDA3OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2Rpby4qZnV6eiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzMzIKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFNESU8gSG9zdCBTb2Z0d2FyZSBJbXBsZW1lbnRhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHNvZnR3YXJlIFNESU8gaG9zdCBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgbGlrZWx5IHRoZSBgZHJpdmVycy9tbWMvY29yZS9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB0aGUgY29tbW9uIGdyb3VuZCBmb3IgTU1DIGFuZCBTRC1yZWxhdGVkIGNvZGUsIHNvIGl0JiMzOTtzIHRoZSBuYXR1cmFsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSBjb3JlIFNESU8gaG9zdCBkcml2ZXJzLiBJJiMzOTtsbCBpbml0aWF0ZSBhIHNlYXJjaCBmb3IgYHNkaW9gIHdpdGhpbiB0aGF0IGRpcmVjdG9yeSwgdXNpbmcgbXkgcHJlZmVycmVkIHNlYXJjaCB0b29scywgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcy4gVGhpcyBzaG91bGQgcXVpY2tseSByZXZlYWwgaWYgYW5kIHdoZXJlIHRoZSBrZXJuZWwgaGFuZGxlcyBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIFNESU8gaG9zdC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gdW5jb3ZlciByZWxldmFudCBkcml2ZXJzLCBwcm9iYWJseSB3aXRoIG5hbWVzIHRoYXQgZ2l2ZSBjbHVlcyBhYm91dCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBvciBidXMgaW50ZXJmYWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZGlvLipkdW1teSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9ODI9c3RhdGljIHZvaWQgYnJjbWZfc2Rpb2RfaWJfaXJxaGFuZGxlcihzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy05Mi0vKiBkdW1teSBoYW5kbGVyIGZvciBTRElPIGZ1bmN0aW9uIDIgaW50ZXJydXB0ICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6OTM6c3RhdGljIHZvaWQgYnJjbWZfc2Rpb2RfZHVtbXlfaXJxaGFuZGxlcihzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTk0LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9OTc9aW50IGJyY21mX3NkaW9kX2ludHJfcmVnaXN0ZXIoc3RydWN0IGJyY21mX3NkaW9fZGV2ICpzZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy0xNTktXHRcdHNkaW9fY2xhaW1faXJxKHNkaW9kZXYtXHUwMDNlZnVuYzEsIGJyY21mX3NkaW9kX2liX2lycWhhbmRsZXIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjE2MDpcdFx0c2Rpb19jbGFpbV9pcnEoc2Rpb2Rldi1cdTAwM2VmdW5jMiwgYnJjbWZfc2Rpb2RfZHVtbXlfaXJxaGFuZGxlcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtMTYxLVx0XHRzZGlvX3JlbGVhc2VfaG9zdChzZGlvZGV2LVx1MDAzZWZ1bmMxKTtcbi0tXG5kcml2ZXJzL3BpbmN0cmwvbWVzb24vcGluY3RybC1tZXNvbi1nMTJhLmM9MTAwMT1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNkaW9fZ3JvdXBzW10gPSB7XG5kcml2ZXJzL3BpbmN0cmwvbWVzb24vcGluY3RybC1tZXNvbi1nMTJhLmMtMTAwMi1cdFwmIzM0O3NkaW9fZDBcJiMzNDssIFwmIzM0O3NkaW9fZDFcJiMzNDssIFwmIzM0O3NkaW9fZDJcJiMzNDssIFwmIzM0O3NkaW9fZDNcJiMzNDssXG5kcml2ZXJzL3BpbmN0cmwvbWVzb24vcGluY3RybC1tZXNvbi1nMTJhLmM6MTAwMzpcdFwmIzM0O3NkaW9fY21kXCYjMzQ7LCBcJiMzNDtzZGlvX2Nsa1wmIzM0OywgXCYjMzQ7c2Rpb19kdW1teVwmIzM0OyxcbmRyaXZlcnMvcGluY3RybC9tZXNvbi9waW5jdHJsLW1lc29uLWcxMmEuYy0xMDA0LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNjQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogVGhpcyBQYXRjaCBpcyBVbmZ1enphYmxlIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB3ZSBoYXZlIGEgcHJvYmxlbS4gVGhlcmUgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGJlIGEgdmlydHVhbCBTRElPIGhvc3QgY29udHJvbGxlciBhdmFpbGFibGUgZm9yIGZ1enppbmcsIHdoaWNoIGlzIHRoZSBmaXJzdCBodXJkbGUuIEJ1dCBldmVuIGlmIHdlIGNvdWxkIHNvbWVob3cgY29uanVyZSBvbmUgdXAsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIFJlYWx0ZWsgYHJ0dzg4YCBXaS1GaSBkcml2ZXIgaGVyZS4gSXQmIzM5O3MgZGVzaWduZWQgdG8gd29yayB3aXRoICpzcGVjaWZpYyogUmVhbHRlayBoYXJkd2FyZSBvbiB0aGUgU0RJTyBidXMuIFRoYXQgbWVhbnMgdGhlIGRyaXZlciYjMzk7cyBgcHJvYmVgIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkIHdpdGhvdXQgdGhhdCBoYXJkd2FyZSBwcmVzZW50LiBUaGVyZWZvcmUsIG5vbmUgb2YgdGhpcyBjb2RlIHdpbGwgZXZlbiBleGVjdXRlIGluIG91ciB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50LgoKQW5kIGV2ZW4gaWYgd2UgY291bGQgaW5qZWN0ICpzb21lKiBTRElPIGRldmljZXMsIHdlJiMzOTtyZSBzdGlsbCBzdHVjayB3aXRoIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlci4gVGhhdCBwcm9tcHRzIHRoaXMgcGFydGljdWxhciBxdWVzdGlvbjogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgdGhhdCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywmIzM0OyB3aGljaCwgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uLCBleHBsaWNpdGx5IGluY2x1ZGVzIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIHRoYXQgcmVseSBvbiBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0JiMzOTtzIG5vdCBlbXVsYXRlZC4KClNvLCByZWFsaXN0aWNhbGx5LCB3ZSYjMzk7cmUgbm90IGdvaW5nIHRvIGJlIGFibGUgdG8gbWFrZSB1c2Ugb2YgdGhpcyBjb2RlIHRvIGZ1enouIEJlZm9yZSBJIHdyaXRlIHRoaXMgb2ZmIGNvbXBsZXRlbHkgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRvIGJlIHN1cmUgdGhhdCBgcnR3ODhgIGhhcyBhIHNvZnR3YXJlIGVtdWxhdGlvbiBtb2RlLiBJZiBpdCBkb2VzLCB0aGVyZSYjMzk7cyBhIGNoYW5jZS4gSWYgbm90LCB0aGlzIGlzIGRlZmluaXRlbHkgYSBkZWFkIGVuZCBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0dzg4LiplbXVsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTcyOQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIHJ0dzg4IFNESU8gUHJvYmUgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgcHJvYmUgZnVuY3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgU0RJTyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBmb3IgdGhlIHJ0dzg4IHNlcmllcy4gTXkgbWFpbiBhcmVhcyBvZiBpbnRlcmVzdCBhcmUsIG9mIGNvdXJzZSwgdGhlIHJlc291cmNlIGFsbG9jYXRpb24sIHRoZSBwbGF0Zm9ybSBkcml2ZXIgc2V0dXAsIGFuZCB0aGUgc3Vic2VxdWVudCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgU0RJTyBidXMuIEkgd2FudCB0byBzZWUgaG93IHRoZXkgaGFuZGxlIHRoZSBjYXJkIGRldGVjdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uIFRoaW5ncyBsaWtlIHBvd2VyIG1hbmFnZW1lbnQgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0aGUgaW5pdGlhbCBicmluZy11cCBhbHdheXMgY2F0Y2ggbXkgZXllLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZXkmIzM5O3JlIGhhbmRsaW5nIGludGVycnVwdHMgY29ycmVjdGx5IGFuZCwgaWYgYXBwbGljYWJsZSwgdGhlIGFzc29jaWF0ZWQgaW50ZXJydXB0IG1hc2tpbmcvdW5tYXNraW5nLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGRlYWwgd2l0aCBhbnkgU0RJTyBzcGVjaWZpYyBxdWlya3Mg4oCTIFJlYWx0ZWsgYWx3YXlzIHNlZW1zIHRvIGhhdmUgYSBmZXcgb2YgdGhvc2UuIFRpbWUgdG8gYW5hbHl6ZSB0aGUgY29kZSBjYXJlZnVsbHkgYW5kIGNvbmZpcm0gaXQgYWxpZ25zIHdpdGggdGhlIGRlc2lnbiBJIHJlbWVtYmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydHdfc2Rpb19wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNjcy5jPTIxPXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnR3Xzg3MjNjc19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzY3MuYy0yMy1cdC5pZF90YWJsZSA9IHJ0d184NzIzY3NfaWRfdGFibGUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNjcy5jOjI0Olx0LnByb2JlID0gcnR3X3NkaW9fcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNjcy5jLTI1LVx0LnJlbW92ZSA9IHJ0d19zZGlvX3JlbW92ZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNkcy5jPTI3PXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnR3Xzg3MjNkc19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNkcy5jLTI4LVx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODcyM2RzLmM6Mjk6XHQucHJvYmUgPSBydHdfc2Rpb19wcm9iZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODcyM2RzLmMtMzAtXHQucmVtb3ZlID0gcnR3X3NkaW9fcmVtb3ZlLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMWNzLmM9MjI9c3RhdGljIHN0cnVjdCBzZGlvX2RyaXZlciBydHdfODgyMWNzX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMWNzLmMtMjMtXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIxY3MuYzoyNDpcdC5wcm9iZSA9IHJ0d19zZGlvX3Byb2JlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIxY3MuYy0yNS1cdC5yZW1vdmUgPSBydHdfc2Rpb19yZW1vdmUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyYnMuYz0yMj1zdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHJ0d184ODIyYnNfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyYnMuYy0yMy1cdC5uYW1lID0gS0JVSUxEX01PRE5BTUUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJicy5jOjI0Olx0LnByb2JlID0gcnR3X3NkaW9fcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJicy5jLTI1LVx0LnJlbW92ZSA9IHJ0d19zZGlvX3JlbW92ZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJjcy5jPTIyPXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnR3Xzg4MjJjc19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJjcy5jLTIzLVx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmNzLmM6MjQ6XHQucHJvYmUgPSBydHdfc2Rpb19wcm9iZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmNzLmMtMjUtXHQucmVtb3ZlID0gcnR3X3NkaW9fcmVtb3ZlLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jPTE3MjQ9c3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtMTczNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jOjE3Mzc6aW50IHJ0d19zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jLTE3MzgtXHRcdCAgIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtMTgxMS19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYzoxODEyOkVYUE9SVF9TWU1CT0wocnR3X3NkaW9fcHJvYmUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtMTgxMy1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaD0xODQ9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJ0d19zZGlvX3BtX29wcztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oLTE4NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oOjE4NjppbnQgcnR3X3NkaW9fcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqc2Rpb19mdW5jLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmgtMTg3LVx0XHQgICBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgKmlkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNTcKCQkJCQkJCW91dHB1dDogMTI1CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU0RJTyBXaS1GaSBEcml2ZXIgUGF0Y2gqKgoKQWxyaWdodCwgbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgU0RJTyBXaS1GaSBkcml2ZXIsIEkmIzM5O3ZlIGNvbWUgdG8gYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNvbmNsdXNpb24uIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBSZWFsdGVrIDg3MjNCUyBTRElPIG1vZHVsZS4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhhcmR3YXJlIGRlcGVuZGVuY2llcy4gQW5kLCBjcml0aWNhbGx5LCB0aGUgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCwgb3IgZXZlbiBzb21ldGhpbmcgbGlrZSBHQ0UsIGlzbiYjMzk7dCBnb2luZyB0byBlbXVsYXRlIHRoYXQgc3BlY2lmaWMgaGFyZHdhcmUuCgpTbywgcmVhbGlzdGljYWxseSwgYW55IGNvZGUgcGF0aHMgdGhpcyBwYXRjaCB0b3VjaGVzIGFyZSAqY29tcGxldGVseSogdW5yZWFjaGFibGUgaW4gYW55IHZpcnR1YWxpemVkIHNldHVwLiBZb3UgY2FuJiMzOTt0IGV4ZWN1dGUgdGhpcyBjb2RlIHdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIHByZXNlbnQuIFRoZXJlZm9yZSwgY29uc2lkZXJpbmcgdGhlIGxpbWl0YXRpb25zIG9mIG91ciBmdXp6aW5nIGVudmlyb25tZW50LCBJJiMzOTttIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQmIzM5O3MgYSB3YXN0ZSBvZiByZXNvdXJjZXMgdG8gZGVkaWNhdGUgdGltZSB0byB0aGlzIHBhdGNoIHJpZ2h0IG5vdy4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGFjdHVhbGx5ICpyZWFjaCogdGhlIG1vZGlmaWVkIGNvZGUgdG8gbWFrZSBmdXp6aW5nIGVmZmVjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDc6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUmVhbHRlayBydHc4OCBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBhbmQgZml4aW5nIGxvZ2ljIGZvciB0aGUgUlRMODcyM0JTIFNESU8gbW9kdWxlLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciB0aGF0IHJlcXVpcmVzIGEgcGh5c2ljYWwgU0RJTyBXaS1GaSBjaGlwIHRvIGJlIHByZXNlbnQuIFNpbmNlIFNESU8gaGFyZHdhcmUgYW5kIHRoaXMgc3BlY2lmaWMgUmVhbHRlayBjaGlwIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6eiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUmVhbHRlayBydHc4OCBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBhbmQgZml4aW5nIGxvZ2ljIGZvciB0aGUgUlRMODcyM0JTIFNESU8gbW9kdWxlLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciB0aGF0IHJlcXVpcmVzIGEgcGh5c2ljYWwgU0RJTyBXaS1GaSBjaGlwIHRvIGJlIHByZXNlbnQuIFNpbmNlIFNESU8gaGFyZHdhcmUgYW5kIHRoaXMgc3BlY2lmaWMgUmVhbHRlayBjaGlwIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6eiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwNzo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6NTg6NDEuMzczNDIzODkzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4MDg1MDA1NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUmVhbHRlayBydHc4OCBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBhbmQgZml4aW5nIGxvZ2ljIGZvciB0aGUgUlRMODcyM0JTIFNESU8gbW9kdWxlLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciB0aGF0IHJlcXVpcmVzIGEgcGh5c2ljYWwgU0RJTyBXaS1GaSBjaGlwIHRvIGJlIHByZXNlbnQuIFNpbmNlIFNESU8gaGFyZHdhcmUgYW5kIHRoaXMgc3BlY2lmaWMgUmVhbHRlayBjaGlwIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6eiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzo1ODo0MS4zNzM0MzAyODNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5OTgxNTkyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRiNmRhYjE0MDI2YmVlOTA3Zjc4OGFhNWU1YWQ4OGM2ZDYyYjVmZWRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDc6NTg6NDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxcbmluZGV4IGM2ZTk4MWJhNzk4NjguLjhmODZmN2MxMmRlNWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxcbkBAIC0xOTQsNiArMTk0LDcgQEAgZW51bSBydHdfY2hpcF90eXBlIHtcXG4gXFx0UlRXX0NISVBfVFlQRV84NzIzRCxcXG4gXFx0UlRXX0NISVBfVFlQRV84ODIxQyxcXG4gXFx0UlRXX0NISVBfVFlQRV84NzAzQixcXG4rXFx0UlRXX0NISVBfVFlQRV84NzIzQixcXG4gXFx0UlRXX0NISVBfVFlQRV84ODIxQSxcXG4gXFx0UlRXX0NISVBfVFlQRV84ODEyQSxcXG4gXFx0UlRXX0NISVBfVFlQRV84ODE0QSxcXG5AQCAtMjE5NCw2ICsyMTk1LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBydHdfY2hpcF9oYXNfdHhfc3RiYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiBcXHRyZXR1cm4gcnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2V0eF9zdGJjO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2lzXzg3MjNicyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdHJldHVybiBydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0IgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHJ0d2Rldi1cXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU87XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdTggcnR3X2FjcXVpcmVfbWFjaWQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG1hY19pZDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXFxuaW5kZXggMDFmZDI5OWFiYjdmZS4uZmRlMjFjODQwYWMwMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcXG5AQCAtMjUzLDEwICsyNTMsMTIgQEAgc3RhdGljIHZvaWQgcnR3X3J4X2ZpbGxfcnhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuIFxcbiBcXHRydHdfcnhfYWRkcl9tYXRjaChydHdkZXYsIHBrdF9zdGF0LCBoZHIpO1xcbiBcXG4tXFx0LyogUnRsODcyM2NzIGRyaXZlciBjaGVja3MgZm9yIHNpemUgXFx1MDAzYyAxNCBvciBzaXplIFxcdTAwM2UgODE5MiBhbmRcXG4tXFx0ICogc2ltcGx5IGRyb3BzIHRoZSBwYWNrZXQuXFxuK1xcdC8qXFxuK1xcdCAqIFJ0bDg3MjNjcyBhbmQgcnRsODcyM2JzIGRyaXZlcnMgY2hlY2sgZm9yIHNpemUgXFx1MDAzYyAxNCBvciBzaXplIFxcdTAwM2UgODE5MlxcbitcXHQgKiBhbmQgc2ltcGx5IGRyb3AgdGhlIHBhY2tldC5cXG4gXFx0ICovXFxuLVxcdGlmIChydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcwM0IgXFx1MDAyNlxcdTAwMjYgcGt0X3N0YXQtXFx1MDAzZXBrdF9sZW4gPT0gMCkge1xcbitcXHRpZiAocGt0X3N0YXQtXFx1MDAzZXBrdF9sZW4gPT0gMCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzAzQiB8fCBydHdfaXNfODcyM2JzKHJ0d2RldikpKSB7XFxuIFxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlZmxhZyB8PSBSWF9GTEFHX05PX1BTRFU7XFxuIFxcdFxcdHJ0d19kYmcocnR3ZGV2LCBSVFdfREJHX1JYLCBcXFwiemVybyBsZW5ndGggcGFja2V0XFxcIik7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xcbmluZGV4IDViNDBkNzRiMTZlZTAuLmU1YmY5Y2JhMDcxZWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xcbkBAIC0yMCw2ICsyMCwxNyBAQFxcbiAjaW5jbHVkZSBcXFwidHguaFxcXCJcXG4gXFxuICNkZWZpbmUgUlRXX1NESU9fSU5ESVJFQ1RfUldfUkVUUklFU1xcdFxcdFxcdDUwXFxuKyNkZWZpbmUgUlRXX1NESU9fT1FUX1RJTUVPVVRfTVNcXHRcXHRcXHRcXHQxMDAwXFxuK1xcbisvKlxcbisgKiA4NzIzQlMgU0RJTyBUWCBGSUZPIGJhY2stcHJlc3N1cmUgd2F0ZXJtYXJrczogc3RvcCB0aGUgbWFjODAyMTEgcXVldWUgb25jZVxcbisgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlXFxuKyAqIFRYIGRyYWluIHBhdGggb25jZSBpdCBmYWxscyBiYWNrIHRvIHRoZSBsb3cgb25lLiBCb3VuZHMgdGhlIHF1ZXVlaW5nIGxhdGVuY3lcXG4rICogdGhhdCBvdGhlcndpc2UgY2F1c2VzIHVwbGluayBidWZmZXJibG9hdCAvIGNvbmdlc3Rpb24gY29sbGFwc2UuXFxuKyAqL1xcbisjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fSElXQVRFUlxcdFxcdFxcdDE2XFxuKyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSXFx0XFx0XFx0OFxcbisjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZXFx0XFx0XFx0bXNlY3NfdG9famlmZmllcygxKVxcbiBcXG4gc3RhdGljIGJvb2wgcnR3X3NkaW9faXNfYnVzX2FkZHIodTMyIGFkZHIpXFxuIHtcXG5AQCAtNTQ4LDEyICs1NTksMTU3IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fcmVhZF9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4ICpidWYsIHNpemVfdCBjb3VudClcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLypcXG4rICogVGhlIGNhY2hlZCBmcmVlIHBhZ2UgY291bnRlcnMgYXJlIGEgZmFzdCBwYXRoIGhpbnQgb25seS4gVGhleSBhcmUgd3JpdHRlblxcbisgKiBmcm9tIHRoZSBzaW5nbGUgdGhyZWFkZWQgVFggd29yayBhbmQsIGZvciBIMkMgYW5kIHJlc2VydmVkIHBhZ2Ugd3JpdGVzLFxcbisgKiBmcm9tIHByb2Nlc3MgY29udGV4dCwgc28gdGhleSBhcmUgYXRvbWljX3Q7IHdoZW5ldmVyIHRoZXkgY2xhaW0gdGhlcmUgaXNcXG4rICogbm90IGVub3VnaCByb29tIHRoZXkgYXJlIHJlc3luY2hyb25pc2VkIGZyb20gdGhlIGNoaXAgYmVmb3JlIHRoZSBjYWxsZXJcXG4rICogZ2l2ZXMgdXAsIHdoaWNoIGFsc28gYWJzb3JicyBhIGxvc3QgdXBkYXRlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgdTMyIGZyZWVfdHhwZylcXG4re1xcbitcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19oaWdoLFxcbitcXHRcXHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0hJR0gpKTtcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19ub3JtYWwsXFxuK1xcdFxcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfTk9STUFMKSk7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbG93LFxcbitcXHRcXHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0xPVykpO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX3B1YixcXG4rXFx0XFx0ICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19QVUIpKTtcXG4rfVxcbitcXG4rLypcXG4rICogUmVmcmVzaCB0aGUgY2FjaGVkIGNvdW50ZXJzIGZyb20gdGhlIGNoaXAuIFJldHVybnMgZmFsc2Ugd2hlbiB0aGUgY2hpcFxcbisgKiByZXBvcnRzIG5vIGZyZWUgcGFnZXMgYXQgYWxsLCB3aGljaCBtZWFucyB0aGUgY291bnRzIGNhbm5vdCBiZSB0cnVzdGVkXFxuKyAqIGFuZCB0aGUgY2FsbGVyIGhhcyB0byBkZWNpZGUgd2hhdCB0byBkbyBpbnN0ZWFkLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgcnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0dTMyIGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xcbitcXG4rXFx0aWYgKCFmcmVlX3R4cGcpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcocnR3ZGV2LCBmcmVlX3R4cGcpO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFNpemUgb2YgdGhlIHB1YmxpYyBwYWdlIHBvb2w6IHdoYXRldmVyIHRoZSB0cmFuc21pdCBwYWdlIGFsbG9jYXRpb24gaGFzXFxuKyAqIGxlZnQgb25jZSB0aGUgcGVyIHF1ZXVlIHBvb2xzIGFyZSB0YWtlbiBvdXQuIEZhaWxzIGlmIHRoZSBhbGxvY2F0aW9uXFxuKyAqIGNhbm5vdCBjb3ZlciB0aGUgcmVzZXJ2ZWQgcXVldWVzLCBzaW5jZSB0aGUgcmVtYWluZGVyIHdvdWxkIHVuZGVyZmxvdyBhbmRcXG4rICogdGhlcmUgd291bGQgYmUgbm8gc2Vuc2libGUgcG9vbCB0byBoYW5kIG91dC5cXG4rICovXFxuK3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX3B1YnFfbnVtKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUxNiAqcHVicV9udW0pXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190YmwgPSBcXHUwMDI2cnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VwYWdlX3RhYmxlWzBdO1xcbitcXHR1MTYgYWNxX3BnX251bSA9IHJ0d2Rldi1cXHUwMDNlZmlmby5hY3FfcGdfbnVtO1xcbitcXHR1MTYgcmVzZXJ2ZWRfbnVtO1xcbitcXG4rXFx0cmVzZXJ2ZWRfbnVtID0gcGdfdGJsLVxcdTAwM2VocV9udW0gKyBwZ190YmwtXFx1MDAzZWxxX251bSArIHBnX3RibC1cXHUwMDNlbnFfbnVtICtcXG4rXFx0XFx0ICAgICAgIHBnX3RibC1cXHUwMDNlZXhxX251bSArIHBnX3RibC1cXHUwMDNlZ2FwcV9udW07XFxuK1xcdGlmIChhY3FfcGdfbnVtIFxcdTAwM2M9IHJlc2VydmVkX251bSkge1xcbitcXHRcXHRydHdfZXJyKHJ0d2RldixcXG4rXFx0XFx0XFx0XFxcIm5vIHRyYW5zbWl0IHBhZ2VzIGxlZnQgZm9yIHRoZSBwdWJsaWMgcXVldWU6ICV1IG9mICV1IHJlc2VydmVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRyZXNlcnZlZF9udW0sIGFjcV9wZ19udW0pO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0KnB1YnFfbnVtID0gYWNxX3BnX251bSAtIHJlc2VydmVkX251bTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic19pbml0X2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsO1xcbitcXHR1MTYgcHVicV9udW07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBTZWVkIGZyb20gdGhlIHBhZ2UgdGFibGUgd2hlbiB0aGUgY2hpcCBoYXMgbm90aGluZyB0byByZXBvcnQgeWV0LiAqL1xcbitcXHRpZiAoIXJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhydHdkZXYpKSB7XFxuK1xcdFxcdHJldCA9IHJ0d19zZGlvXzg3MjNic19wdWJxX251bShydHdkZXYsIFxcdTAwMjZwdWJxX251bSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRwZ190YmwgPSBcXHUwMDI2cnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VwYWdlX3RhYmxlWzBdO1xcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX2hpZ2gsIHBnX3RibC1cXHUwMDNlaHFfbnVtKTtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19ub3JtYWwsIHBnX3RibC1cXHUwMDNlbnFfbnVtKTtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19sb3csIHBnX3RibC1cXHUwMDNlbHFfbnVtKTtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19wdWIsIHB1YnFfbnVtKTtcXG4rXFx0fVxcbitcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfb3F0X2ZyZWUsXFxuK1xcdFxcdCAgIHJ0d19yZWFkOChydHdkZXYsIFJFR19TRElPX09RVF9GUkVFX1BHKSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogU3VtIG9mIHRoZSBxdWV1ZSdzIGRlZGljYXRlZCBjb3VudGVyIGFuZCB0aGUgcHVibGljIHBvb2wsIGNsYW1wZWQgYXQgemVybzpcXG4rICogYSBsb3N0IHVwZGF0ZSBiZXR3ZWVuIHRoZSBjaGVjayBiZWxvdyBhbmQgcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZygpXFxuKyAqIGNhbiBicmllZmx5IGRyaXZlIGEgY291bnRlciBuZWdhdGl2ZSwgYW5kIGxldHRpbmcgdGhhdCB3cmFwIHdvdWxkIGhpZGUgdGhlXFxuKyAqIHNob3J0YWdlIGluc3RlYWQgb2YgdHJpZ2dlcmluZyBhIHJlc3luYyBmcm9tIHRoZSBjaGlwLlxcbisgKi9cXG4rc3RhdGljIHVuc2lnbmVkIGludCBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgYXRvbWljX3QgKmRlZGljYXRlZClcXG4re1xcbitcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgZnJlZTtcXG4rXFxuK1xcdGZyZWUgPSBhdG9taWNfcmVhZChkZWRpY2F0ZWQpICsgYXRvbWljX3JlYWQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfcHViKTtcXG4rXFxuK1xcdHJldHVybiBmcmVlIFxcdTAwM2UgMCA/IGZyZWUgOiAwO1xcbit9XFxuK1xcbitzdGF0aWMgYXRvbWljX3QgKnJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdHN3aXRjaCAocXVldWUpIHtcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfVkk6XFxuK1xcdFxcdHJldHVybiBcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19ub3JtYWw7XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX0JFOlxcbitcXHRjYXNlIFJUV19UWF9RVUVVRV9CSzpcXG4rXFx0XFx0cmV0dXJuIFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX2xvdztcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfQkNOOlxcbitcXHRjYXNlIFJUV19UWF9RVUVVRV9IMkM6XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX0hJMDpcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfTUdNVDpcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfVk86XFxuK1xcdFxcdHJldHVybiBcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19oaWdoO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgaW50IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcXG4gXFx0XFx0XFx0XFx0ICAgIHNpemVfdCBjb3VudClcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgcGFnZXNfZnJlZSwgcGFnZXNfbmVlZGVkO1xcbiBcXG4tXFx0aWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7XFxuK1xcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcXG4rXFx0XFx0YXRvbWljX3QgKmRlZGljYXRlZDtcXG4rXFxuK1xcdFxcdGRlZGljYXRlZCA9IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSk7XFxuK1xcdFxcdGlmICghZGVkaWNhdGVkKSB7XFxuK1xcdFxcdFxcdHJ0d193YXJuKHJ0d2RldiwgXFxcIlVua25vd24gbWFwcGluZyBmb3IgcXVldWUgJXVcXFxcblxcXCIsIHF1ZXVlKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHBhZ2VzX2ZyZWUgPSBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShydHdkZXYsIGRlZGljYXRlZCk7XFxuK1xcdFxcdHBhZ2VzX25lZWRlZCA9IERJVl9ST1VORF9VUChjb3VudCwgcnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VwYWdlX3NpemUpO1xcbitcXHRcXHRpZiAocGFnZXNfbmVlZGVkIFxcdTAwM2M9IHBhZ2VzX2ZyZWUpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0XFx0cnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHJ0d2Rldik7XFxuK1xcdFxcdHBhZ2VzX2ZyZWUgPSBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShydHdkZXYsIGRlZGljYXRlZCk7XFxuK1xcdH0gZWxzZSBpZiAocnR3X2NoaXBfd2NwdV84MDUxKHJ0d2RldikpIHtcXG4gXFx0XFx0dTMyIGZyZWVfdHhwZztcXG4gXFxuIFxcdFxcdGZyZWVfdHhwZyA9IHJ0d19zZGlvX3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XFxuQEAgLTYzMiw0NCArNzg4LDEyNCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0dW5zaWduZWQgbG9uZyBkZWFkbGluZTtcXG4rXFx0dTggZnJlZTtcXG4rXFxuK1xcdGlmIChhdG9taWNfYWRkX3VubGVzcyhcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfb3F0X2ZyZWUsIC0xLCAwKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRkZWFkbGluZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFJUV19TRElPX09RVF9USU1FT1VUX01TKTtcXG4rXFx0ZG8ge1xcbitcXHRcXHRmcmVlID0gcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpO1xcbitcXHRcXHRpZiAoZnJlZSkge1xcbitcXHRcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9vcXRfZnJlZSwgZnJlZSAtIDEpO1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbitcXHRcXHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XFxuK1xcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlYWRsaW5lKSk7XFxuK1xcbitcXHRyZXR1cm4gLUVCVVNZO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLFxcbitcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IHBhZ2VzKVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGF0b21pY190ICpkZWRpY2F0ZWQ7XFxuK1xcdHVuc2lnbmVkIGludCB0YWtlbjtcXG4rXFx0aW50IGZyZWU7XFxuK1xcbitcXHRkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xcbitcXHRpZiAoIWRlZGljYXRlZClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZnJlZSA9IGF0b21pY19yZWFkKGRlZGljYXRlZCk7XFxuK1xcdHRha2VuID0gbWluX3QodW5zaWduZWQgaW50LCBwYWdlcywgZnJlZSBcXHUwMDNlIDAgPyBmcmVlIDogMCk7XFxuK1xcdGF0b21pY19zdWIodGFrZW4sIGRlZGljYXRlZCk7XFxuK1xcbitcXHRwYWdlcyAtPSB0YWtlbjtcXG4rXFx0aWYgKHBhZ2VzIFxcdTAwMjZcXHUwMDI2IGF0b21pY19zdWJfcmV0dXJuKHBhZ2VzLCBcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19wdWIpIFxcdTAwM2MgMClcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19wdWIsIDApO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3dyaXRlX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0ICAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0Ym9vbCBydGw4NzIzYnMgPSBydHdfaXNfODcyM2JzKHJ0d2Rldik7XFxuK1xcdHVuc2lnbmVkIGludCBvcmlnX2xlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbitcXHR1bnNpZ25lZCBpbnQgcGFnZXM7XFxuK1xcdHNpemVfdCB3cml0ZV9zaXplO1xcbiBcXHRib29sIGJ1c19jbGFpbTtcXG4gXFx0c2l6ZV90IHR4c2l6ZTtcXG4gXFx0dTMyIHR4YWRkcjtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHR4YWRkciA9IHJ0d19zZGlvX2dldF90eF9hZGRyKHJ0d2Rldiwgc2tiLVxcdTAwM2VsZW4sIHF1ZXVlKTtcXG4tXFx0aWYgKCF0eGFkZHIpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAocnRsODcyM2JzKSB7XFxuK1xcdFxcdHR4c2l6ZSA9IHJvdW5kX3VwKG9yaWdfbGVuLCA0KTtcXG4rXFx0XFx0d3JpdGVfc2l6ZSA9IHR4c2l6ZSBcXHUwMDNlIFJUV19TRElPX0JMT0NLX1NJWkUgP1xcbitcXHRcXHRcXHQgICAgIHJvdW5kX3VwKHR4c2l6ZSwgUlRXX1NESU9fQkxPQ0tfU0laRSkgOiB0eHNpemU7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLVxcdTAwM2VzZGlvX2Z1bmMsIG9yaWdfbGVuKTtcXG4rXFx0XFx0d3JpdGVfc2l6ZSA9IHR4c2l6ZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHdyaXRlX3NpemUgXFx1MDAzZSBvcmlnX2xlbikge1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgcGFkZGluZyA9IHdyaXRlX3NpemUgLSBvcmlnX2xlbjtcXG4gXFxuLVxcdHR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLVxcdTAwM2VzZGlvX2Z1bmMsIHNrYi1cXHUwMDNlbGVuKTtcXG4rXFx0XFx0aWYgKHNrYl90YWlscm9vbShza2IpIFxcdTAwM2MgcGFkZGluZykge1xcbitcXHRcXHRcXHRyZXQgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHBhZGRpbmcgLSBza2JfdGFpbHJvb20oc2tiKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIEdGUF9LRVJORUwpO1xcbitcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuK1xcdFxcdHNrYl9wdXRfemVybyhza2IsIHBhZGRpbmcpO1xcbitcXHR9XFxuK1xcbitcXHR0eGFkZHIgPSBydHdfc2Rpb19nZXRfdHhfYWRkcihydHdkZXYsIHR4c2l6ZSwgcXVldWUpO1xcbitcXHRpZiAoIXR4YWRkcikge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dF90cmltO1xcbitcXHR9XFxuIFxcbiBcXHRyZXQgPSBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSwgdHhzaXplKTtcXG4gXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0Z290byBvdXRfdHJpbTtcXG4rXFxuK1xcdGlmIChydGw4NzIzYnMpIHtcXG4rXFx0XFx0cmV0ID0gcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHJ0d2Rldik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gb3V0X3RyaW07XFxuK1xcdH1cXG4gXFxuIFxcdGlmICghSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylza2ItXFx1MDAzZWRhdGEsIFJUV19TRElPX0RBVEFfUFRSX0FMSUdOKSlcXG4gXFx0XFx0cnR3X3dhcm4ocnR3ZGV2LCBcXFwiR290IHVuYWxpZ25lZCBTS0IgaW4gJXMoKSBmb3IgcXVldWUgJXVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCBfX2Z1bmNfXywgcXVldWUpO1xcbiBcXG4gXFx0YnVzX2NsYWltID0gcnR3X3NkaW9fYnVzX2NsYWltX25lZWRlZChydHdzZGlvKTtcXG4tXFxuIFxcdGlmIChidXNfY2xhaW0pXFxuIFxcdFxcdHNkaW9fY2xhaW1faG9zdChydHdzZGlvLVxcdTAwM2VzZGlvX2Z1bmMpO1xcbi1cXG4tXFx0cmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLVxcdTAwM2VzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLVxcdTAwM2VkYXRhLCB0eHNpemUpO1xcbi1cXG4rXFx0cmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLVxcdTAwM2VzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLVxcdTAwM2VkYXRhLFxcbitcXHRcXHRcXHQgICAgICAgd3JpdGVfc2l6ZSk7XFxuIFxcdGlmIChidXNfY2xhaW0pXFxuIFxcdFxcdHNkaW9fcmVsZWFzZV9ob3N0KHJ0d3NkaW8tXFx1MDAzZXNkaW9fZnVuYyk7XFxuIFxcbi1cXHRpZiAocmV0KVxcbitcXHRpZiAocmV0KSB7XFxuIFxcdFxcdHJ0d193YXJuKHJ0d2RldixcXG4gXFx0XFx0XFx0IFxcXCJGYWlsZWQgdG8gd3JpdGUgJXp1IGJ5dGUocykgdG8gU0RJTyBwb3J0IDB4JTA4eFxcXCIsXFxuLVxcdFxcdFxcdCB0eHNpemUsIHR4YWRkcik7XFxuK1xcdFxcdFxcdCB3cml0ZV9zaXplLCB0eGFkZHIpO1xcbitcXHR9IGVsc2UgaWYgKHJ0bDg3MjNicykge1xcbitcXHRcXHRwYWdlcyA9IERJVl9ST1VORF9VUCh0eHNpemUsIHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlcGFnZV9zaXplKTtcXG4rXFx0XFx0cnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhydHdkZXYsIHF1ZXVlLCBwYWdlcyk7XFxuK1xcdH1cXG4gXFxuK291dF90cmltOlxcbitcXHRpZiAod3JpdGVfc2l6ZSBcXHUwMDNlIG9yaWdfbGVuKVxcbitcXHRcXHRza2JfdHJpbShza2IsIG9yaWdfbGVuKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtNjc3LDcgKzkxMywxMSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbml0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4gXFxuLVxcdHJ0d3NkaW8tXFx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUIHwgUkVHX1NESU9fSElNUl9DUFdNMTtcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcXG4rXFx0XFx0cnR3c2Rpby1cXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1Q7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cnR3c2Rpby1cXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfFxcbitcXHRcXHRcXHRcXHQgICAgUkVHX1NESU9fSElNUl9DUFdNMTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuQEAgLTY4NSw2ICs5MjUsNyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFx0dTggc2l6ZSwgdGltZW91dDtcXG4gXFxuIFxcdHN3aXRjaCAocnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VpZCkge1xcbitcXHRjYXNlIFJUV19DSElQX1RZUEVfODcyM0I6XFxuIFxcdGNhc2UgUlRXX0NISVBfVFlQRV84NzAzQjpcXG4gXFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg4MjFBOlxcbiBcXHRjYXNlIFJUV19DSElQX1RZUEVfODgxMkE6XFxuQEAgLTcxMiw2ICs5NTMsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFx0XFx0ICAgIEZJRUxEX1BSRVAoQklUX0RNQV9BR0dfVE9fVjEsIHRpbWVvdXQpKTtcXG4gXFxuIFxcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfTU9ERSk7XFxuK1xcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXFxuK1xcdFxcdHJ0d193cml0ZThfbWFzayhydHdkZXYsIFJFR19SWERNQV9NT0RFLCBCSVRfRE1BX0JVUlNUX0NOVCwgMHgzKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbkBAIC03NDksOSArOTkyLDYxIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fc2V0dXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFJlcHJvZ3JhbSB0aGUgcXVldWUgcGFnZSBhbGxvY2F0aW9uIGlmIHRoZSBjaGlwIGNhbWUgdXAgd2l0aCBub25lLiBUaGlzIGlzXFxuKyAqIGEgcmVwYWlyIHBhdGgsIG5vdCBwYXJ0IG9mIHRoZSBub3JtYWwgc3RhcnQgc2VxdWVuY2U6IGEgbm9uLXplcm8gZnJlZSBwYWdlXFxuKyAqIGNvdW50IG1lYW5zIHRoZSBhbGxvY2F0aW9uIGxhdGNoZWQgZHVyaW5nIHBvd2VyIG9uIGFuZCBtdXN0IGJlIGxlZnQgYWxvbmUsXFxuKyAqIGFuZCB3aXRob3V0IGEgdHJhbnNtaXQgcGFnZSBwb29sIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGl2aWRlIHVwIGVpdGhlci5cXG4rICovXFxuK3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcnR3X2NoaXBfaW5mbyAqY2hpcCA9IHJ0d2Rldi1cXHUwMDNlY2hpcDtcXG4rXFx0c3RydWN0IHJ0d19maWZvX2NvbmYgKmZpZm8gPSBcXHUwMDI2cnR3ZGV2LVxcdTAwM2VmaWZvO1xcbitcXHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcXG4rXFx0dTMyIGZyZWVfdHhwZztcXG4rXFx0dTE2IHB1YnFfbnVtO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0ZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XFxuK1xcdGlmIChmcmVlX3R4cGcgfHwgIWZpZm8tXFx1MDAzZWFjcV9wZ19udW0pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0ID0gcnR3X3NkaW9fODcyM2JzX3B1YnFfbnVtKHJ0d2RldiwgXFx1MDAyNnB1YnFfbnVtKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHBnX3RibCA9IFxcdTAwMjZjaGlwLVxcdTAwM2VwYWdlX3RhYmxlWzBdO1xcbitcXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOX05QUSxcXG4rXFx0XFx0ICAgIEJJVF9SUVBOX05FKHBnX3RibC1cXHUwMDNlbnFfbnVtLCBwZ190YmwtXFx1MDAzZWV4cV9udW0pKTtcXG4rXFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUlFQTixcXG4rXFx0XFx0ICAgIEJJVF9SUVBOX0hMUChwZ190YmwtXFx1MDAzZWhxX251bSwgcGdfdGJsLVxcdTAwM2VscV9udW0sIHB1YnFfbnVtKSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBydHdfc2Rpb19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiB7XFxuK1xcdHUzMiBjbGVhcjtcXG4rXFxuK1xcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcXG4rXFx0XFx0aW50IHJldCA9IHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHJ0d2Rldik7XFxuK1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0cmV0ID0gcnR3X3NkaW9fODcyM2JzX2luaXRfZnJlZV90eHBnKHJ0d2Rldik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuIFxcdHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihydHdkZXYpO1xcbitcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xcbitcXHRcXHRjbGVhciA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSKSBcXHUwMDI2IFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTSztcXG4rXFx0XFx0aWYgKGNsZWFyKVxcbitcXHRcXHRcXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGNsZWFyKTtcXG4rXFx0fVxcbitcXG4gXFx0cnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChydHdkZXYpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTgxNSw3ICsxMTEwLDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2tpY2tfb2ZmKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4gXFxuLVxcdHF1ZXVlX3dvcmsocnR3c2Rpby1cXHUwMDNldHh3cSwgXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cXHUwMDNld29yayk7XFxuK1xcdC8qXFxuK1xcdCAqIEEgcmV0cnkgbWF5IGFscmVhZHkgYmUgcGVuZGluZyB3aXRoIGEgZGVsYXk7IHJlLWFybSBpdCBzbyBhIG5ld2x5XFxuK1xcdCAqIHF1ZXVlZCBmcmFtZSBpcyBub3QgaGVsZCBiYWNrIGJ5IGl0LlxcbitcXHQgKi9cXG4rXFx0bW9kX2RlbGF5ZWRfd29yayhydHdzZGlvLVxcdTAwM2V0eHdxLCBcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhLVxcdTAwM2V3b3JrLCAwKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fbGlua19wcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVudGVyKVxcbkBAIC04MzEsNiArMTEzMCw4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2ludGVyZmFjZV9jZmcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFxuIFxcdHZhbCA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMKTtcXG4gXFx0dmFsIFxcdTAwMjY9IDB4ZmZmODtcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcXG4rXFx0XFx0dmFsIHw9IEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRTtcXG4gXFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMLCB2YWwpO1xcbiB9XFxuIFxcbkBAIC05MjIsNiArMTIyMyw1MCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3dyaXRlX2RhdGFfaDJjKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4ICpidWYsIHUzMiBzaXplKVxcbiBcXHRyZXR1cm4gcnR3X3NkaW9fd3JpdGVfZGF0YShydHdkZXYsIFxcdTAwMjZwa3RfaW5mbywgc2tiLCBSVFdfVFhfUVVFVUVfSDJDKTtcXG4gfVxcbiBcXG4rLypcXG4rICogQmFjay1wcmVzc3VyZSBvbiB0aGUgZGF0YSBBQ3MgKEJLL0JFL1ZJL1ZPKTogb25jZSB0aGUgc29mdHdhcmUgRklGTyBmaWxsc1xcbisgKiBwYXN0IHRoZSBoaWdoIHdhdGVybWFyaywgc3RvcCB0aGUgY29ycmVzcG9uZGluZyBtYWM4MDIxMSBxdWV1ZSBzbyBpdCBzdG9wc1xcbisgKiBoYW5kaW5nIGZyYW1lcyBkb3duLCB3aGljaCBib3VuZHMgdGhlIHF1ZXVlaW5nIGxhdGVuY3kuIFRoZSBxdWV1ZSBpcyB3b2tlblxcbisgKiBhZ2FpbiBmcm9tIHRoZSBUWCBkcmFpbiBwYXRoIG9uY2UgdGhlIEZJRk8gZmFsbHMgYmFjayB0byB0aGUgbG93IHdhdGVybWFyay5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19zdG9wX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICB1MTYgcV9tYXApXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpIHx8IHF1ZXVlIFxcdTAwM2U9IFJUV19UWF9RVUVVRV9CQ04pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmIChydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHNrYl9xdWV1ZV9sZW4oXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkgXFx1MDAzYyBSVFdfU0RJT19UWF9GSUZPX0hJV0FURVIpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlX3N0b3BwZWRbcXVldWVdID0gdHJ1ZTtcXG4rXFx0aWVlZTgwMjExX3N0b3BfcXVldWUocnR3ZGV2LVxcdTAwM2VodywgcV9tYXApO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfd2FrZV90eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTE2IHFfbWFwKVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fCBxdWV1ZSBcXHUwMDNlPSBSVFdfVFhfUVVFVUVfQkNOKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoIXJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlX3N0b3BwZWRbcXVldWVdKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoc2tiX3F1ZXVlX2xlbihcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfcXVldWVbcXVldWVdKSBcXHUwMDNlIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cnR3c2Rpby1cXHUwMDNldHhfcXVldWVfc3RvcHBlZFtxdWV1ZV0gPSBmYWxzZTtcXG4rXFx0aWVlZTgwMjExX3dha2VfcXVldWUocnR3ZGV2LVxcdTAwM2VodywgcV9tYXApO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3R4X3dyaXRlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IHJ0d190eF9wa3RfaW5mbyAqcGt0X2luZm8sXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5AQCAtOTM3LDYgKzEyODIsOCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3R4X3dyaXRlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuIFxcbiBcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfcXVldWVbcXVldWVdLCBza2IpO1xcbiBcXG4rXFx0cnR3X3NkaW9fODcyM2JzX3N0b3BfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTEwOTUsNiArMTQ0MiwxNCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYylcXG4gXFx0XFx0cnR3X3NkaW9fcnhfaXNyKHJ0d2Rldik7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFJUTDg3MjNCUyBrZWVwcyByYWlzaW5nIHRoZSBpbnRlcnJ1cHQgYWZ0ZXIgcmVzdW1lIGlmIHVuZGVmaW5lZFxcbitcXHQgKiBzdGF0dXMgYml0cyBhcmUgd3JpdHRlbiBiYWNrLCBzbyBhY2tub3dsZWRnZSBvbmx5IHRoZSBiaXRzIHRoaXNcXG4rXFx0ICogZHJpdmVyIGRlZmluZXMuIE90aGVyIGNoaXBzIGtlZXAgdGhlIGV4aXN0aW5nIGJlaGF2aW91ci5cXG4rXFx0ICovXFxuK1xcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXFxuK1xcdFxcdGhpc3IgXFx1MDAyNj0gUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xcbitcXG4gXFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBoaXNyKTtcXG4gXFxuIFxcdHJ0d3NkaW8tXFx1MDAzZWlycV90aHJlYWQgPSBOVUxMO1xcbkBAIC0xMjMxLDMzICsxNTg2LDgxIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbiBcXHRpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4tXFx0XFx0XFx0XFx0ICAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcXG4rLypcXG4rICogU2VuZCBvbmUgZnJhbWUgZnJvbSBAcXVldWUuIFJldHVybnMgMCB3aGVuIGEgZnJhbWUgd2FzIHdyaXR0ZW4sIDEgd2hlbiB0aGVcXG4rICogcXVldWUgd2FzIGVtcHR5IGFuZCBhIG5lZ2F0aXZlIGVycm5vIHdoZW4gdGhlIHdyaXRlIGZhaWxlZCwgaW4gd2hpY2ggY2FzZVxcbisgKiB0aGUgZnJhbWUgaXMgcHV0IGJhY2sgYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLlxcbisgKi9cXG4rc3RhdGljIGludCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHR1MTYgcV9tYXA7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfcXVldWVbcXVldWVdKTtcXG4gXFx0aWYgKCFza2IpXFxuLVxcdFxcdHJldHVybjtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuIFxcbitcXHRxX21hcCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xcbiBcXHRyZXQgPSBydHdfc2Rpb193cml0ZV9wb3J0KHJ0d2Rldiwgc2tiLCBxdWV1ZSk7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0c2tiX3F1ZXVlX2hlYWQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSwgc2tiKTtcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbiBcXHRydHdfc2Rpb19pbmRpY2F0ZV90eF9zdGF0dXMocnR3ZGV2LCBza2IpO1xcbitcXG4rXFx0cnR3X3NkaW9fODcyM2JzX3dha2VfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSwgcV9tYXApO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIERlY2lkZSB3aGV0aGVyIHRoZSBSVEw4NzIzQlMgd2FudHMgdGhlIFRYIHdvcmsgdG8gcnVuIGFnYWluLCBhbmQgaWYgc29cXG4rICogYXJyYW5nZSBpdCBhbmQgdGVsbCB0aGUgY2FsbGVyIHRvIHN0b3AgZHJhaW5pbmcuIFR3byBjYXNlcyBuZWVkIGl0LlxcbisgKlxcbisgKiBBIHRyYW5zbWl0IHBhZ2Ugb3Igb3V0cHV0IHF1ZXVlIHNob3J0YWdlIGFuZCBhIGZhaWxlZCBza2IgZXhwYW5zaW9uIGFyZVxcbisgKiB0cmFuc2llbnQgYW5kIGxlYXZlIHRoZSBmcmFtZSBxdWV1ZWQsIHNvIGNvbWUgYmFjayBmb3IgaXQgc2hvcnRseS4gVGhhdFxcbisgKiBtYXR0ZXJzIG9uY2UgdGhlIG1hYzgwMjExIHF1ZXVlIGNhbiBiZSBzdG9wcGVkOiBhIHN0b3BwZWQgcXVldWUgaXMgaGFuZGVkXFxuKyAqIG5vIGZ1cnRoZXIgZnJhbWVzLCBzbyBub3RoaW5nIGVsc2Ugd291bGQga2ljayB0aGlzIHdvcmsgaXRlbSBhbmQgdGhlIGFjY2Vzc1xcbisgKiBjYXRlZ29yeSB3b3VsZCBzdGF5IHN0b3BwZWQgZm9yIGdvb2QuIFRoZSByZW1haW5pbmcgZXJyb3JzIGFyZSBsb2dnZWQgd2hlcmVcXG4rICogdGhleSBoYXBwZW4gYW5kIGFyZSBub3QgcmV0cmllZC5cXG4rICpcXG4rICogQWZ0ZXIgYSBtYW5hZ2VtZW50IGZyYW1lLCByZXN0YXJ0IGZyb20gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcXVldWUgc28gdGhlXFxuKyAqIGpvaW4gc2VxdWVuY2UgaXMgbm90IGhlbGQgdXAgYmVoaW5kIGEgZGF0YSBiYWNrbG9nLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgcnR3X3NkaW9fODcyM2JzX3Jlc2NoZWR1bGVfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp3b3JrX2RhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSwgaW50IHJldClcXG4re1xcbitcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHR1bnNpZ25lZCBsb25nIGRlbGF5O1xcbitcXG4rXFx0aWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChyZXQgPT0gLUVCVVNZIHx8IHJldCA9PSAtRU5PTUVNKVxcbitcXHRcXHRkZWxheSA9IFJUV19TRElPX1RYX1JFVFJZX0RFTEFZO1xcbitcXHRlbHNlIGlmIChyZXQgPT0gMCBcXHUwMDI2XFx1MDAyNiBxdWV1ZSA9PSBSVFdfVFhfUVVFVUVfTUdNVClcXG4rXFx0XFx0ZGVsYXkgPSAwO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHF1ZXVlX2RlbGF5ZWRfd29yayhydHdzZGlvLVxcdTAwM2V0eHdxLCBcXHUwMDI2d29ya19kYXRhLVxcdTAwM2V3b3JrLCBkZWxheSk7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSAqd29ya19kYXRhID1cXG4tXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsIHdvcmspO1xcbitcXHRcXHRjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLFxcbitcXHRcXHRcXHQgICAgIHdvcmspO1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW87XFxuIFxcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XFxuLVxcdGludCBsaW1pdCwgcXVldWU7XFxuK1xcdGludCBsaW1pdCwgcXVldWUsIHJldDtcXG4gXFxuIFxcdHJ0d2RldiA9IHdvcmtfZGF0YS1cXHUwMDNlcnR3ZGV2O1xcbiBcXHRydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG5AQCAtMTI2Nyw3ICsxNjcwLDEzIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXG4gXFx0Zm9yIChxdWV1ZSA9IFJUS19NQVhfVFhfUVVFVUVfTlVNIC0gMTsgcXVldWUgXFx1MDAzZT0gMDsgcXVldWUtLSkge1xcbiBcXHRcXHRmb3IgKGxpbWl0ID0gMDsgbGltaXQgXFx1MDAzYyAxMDAwOyBsaW1pdCsrKSB7XFxuLVxcdFxcdFxcdHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XFxuK1xcdFxcdFxcdHJldCA9IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdFxcdGlmIChydHdfc2Rpb184NzIzYnNfcmVzY2hlZHVsZV90eChydHdkZXYsIHdvcmtfZGF0YSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBxdWV1ZSwgcmV0KSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0XFx0XFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfcXVldWVbcXVldWVdKSlcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuQEAgLTEyOTQsMTQgKzE3MDMsMTYgQEAgc3RhdGljIGludCBydHdfc2Rpb19pbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHR9XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkrKylcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJUS19NQVhfVFhfUVVFVUVfTlVNOyBpKyspIHtcXG4gXFx0XFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfcXVldWVbaV0pO1xcbitcXHRcXHRydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZV9zdG9wcGVkW2ldID0gZmFsc2U7XFxuK1xcdH1cXG4gXFx0cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhID0ga21hbGxvY19vYmooKnJ0d3NkaW8tXFx1MDAzZXR4X2hhbmRsZXJfZGF0YSk7XFxuIFxcdGlmICghcnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhKVxcbiBcXHRcXHRnb3RvIGVycl9kZXN0cm95X3dxO1xcbiBcXG4gXFx0cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhLVxcdTAwM2VydHdkZXYgPSBydHdkZXY7XFxuLVxcdElOSVRfV09SSyhcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhLVxcdTAwM2V3b3JrLCBydHdfc2Rpb190eF9oYW5kbGVyKTtcXG4rXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cXHUwMDNld29yaywgcnR3X3NkaW9fdHhfaGFuZGxlcik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTEzMTUsNiArMTcyNiw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2RlaW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiBcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbiBcXHRpbnQgaTtcXG4gXFxuK1xcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhLVxcdTAwM2V3b3JrKTtcXG4gXFx0ZGVzdHJveV93b3JrcXVldWUocnR3c2Rpby1cXHUwMDNldHh3cSk7XFxuIFxcdGtmcmVlKHJ0d3NkaW8tXFx1MDAzZXR4X2hhbmRsZXJfZGF0YSk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXFxuaW5kZXggNDU3ZThiMDIzODBlNS4uY2VjM2RkMWM0YjJlNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXFxuQEAgLTIyLDYgKzIyLDcgQEBcXG4gXFxuIC8qIFNESU8gVHggQ29udHJvbCAqL1xcbiAjZGVmaW5lIFJFR19TRElPX1RYX0NUUkxcXHRcXHRcXHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMDApXFxuKyNkZWZpbmUgQklUX1NESU9fVFhfQ1RSTF9BTFdBWVNfUkVDT0dOSVpFXFx0QklUKDQpXFxuIFxcbiAvKlNESU8gc3RhdHVzIHRpbWVvdXQqL1xcbiAjZGVmaW5lIFJFR19TRElPX1RJTUVPVVRcXHRcXHRcXHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMDIpXFxuQEAgLTc3LDYgKzc4LDE0IEBAXFxuIC8qIHRoZSBmb2xsb3dpbmcgdHdvIGFyZSBSVEw4MTg4IFNESU8gU3BlY2lmaWMgKi9cXG4gI2RlZmluZSBSRUdfU0RJT19ISVNSX01DVV9FUlJcXHRcXHRcXHRCSVQoMjgpXFxuICNkZWZpbmUgUkVHX1NESU9fSElTUl9UU0ZfQklUMzJfVE9HR0xFXFx0XFx0QklUKDI5KVxcbisjZGVmaW5lIFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTS1xcdFxcdFxcXFxcXG4rXFx0KFJFR19TRElPX0hJU1JfVFhFUlIgfCBSRUdfU0RJT19ISVNSX1JYRVJSIHwgXFxcXFxcbitcXHQgUkVHX1NESU9fSElTUl9UWEZPVlcgfCBSRUdfU0RJT19ISVNSX1JYRk9WVyB8IFxcXFxcXG4rXFx0IFJFR19TRElPX0hJU1JfVFhCQ05PSyB8IFJFR19TRElPX0hJU1JfVFhCQ05FUlIgfCBcXFxcXFxuK1xcdCBSRUdfU0RJT19ISVNSX0MySENNRCB8IFJFR19TRElPX0hJU1JfQ1BXTTEgfCBcXFxcXFxuK1xcdCBSRUdfU0RJT19ISVNSX0NQV00yIHwgUkVHX1NESU9fSElTUl9IU0lTUl9JTkQgfCBcXFxcXFxuK1xcdCBSRUdfU0RJT19ISVNSX0dUSU5UM19JTkQgfCBSRUdfU0RJT19ISVNSX0dUSU5UNF9JTkQgfCBcXFxcXFxuK1xcdCBSRUdfU0RJT19ISVNSX1BTVElNRU9VVCB8IFJFR19TRElPX0hJU1JfT0NQSU5UKVxcbiBcXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAqL1xcbiAjZGVmaW5lIFJFR19TRElPX0hDUFdNXFx0XFx0XFx0XFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDE5KVxcbkBAIC04Niw2ICs5NSwxMCBAQFxcbiAjZGVmaW5lIFJFR19TRElPX09RVF9GUkVFX1BHXFx0XFx0XFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDFFKVxcbiAvKiBGcmVlIFR4IEJ1ZmZlciBQYWdlICovXFxuICNkZWZpbmUgUkVHX1NESU9fRlJFRV9UWFBHXFx0XFx0XFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDIwKVxcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfSElHSFxcdFxcdFxcdEdFTk1BU0soNywgMClcXG4rI2RlZmluZSBCSVRfRlJFRV9UWFBHX05PUk1BTFxcdFxcdFxcdEdFTk1BU0soMTUsIDgpXFxuKyNkZWZpbmUgQklUX0ZSRUVfVFhQR19MT1dcXHRcXHRcXHRHRU5NQVNLKDIzLCAxNilcXG4rI2RlZmluZSBCSVRfRlJFRV9UWFBHX1BVQlxcdFxcdFxcdEdFTk1BU0soMzEsIDI0KVxcbiAvKiBIQ0kgQ3VycmVudCBQb3dlciBNb2RlIDEgKi9cXG4gI2RlZmluZSBSRUdfU0RJT19IQ1BXTTFcXHRcXHRcXHRcXHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMjQpXFxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgMiAqL1xcbkBAIC0xNDMsNyArMTU2LDcgQEAgc3RydWN0IHJ0d19zZGlvX3R4X2RhdGEge1xcbiB9O1xcbiBcXG4gc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSB7XFxuLVxcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xcbitcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7XFxuIFxcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XFxuIH07XFxuIFxcbkBAIC0xNTksNiArMTcyLDEzIEBAIHN0cnVjdCBydHdfc2RpbyB7XFxuIFxcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp0eHdxO1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp0eF9oYW5kbGVyX2RhdGE7XFxuIFxcdHN0cnVjdCBza19idWZmX2hlYWQgdHhfcXVldWVbUlRLX01BWF9UWF9RVUVVRV9OVU1dO1xcbitcXHRib29sIHR4X3F1ZXVlX3N0b3BwZWRbUlRLX01BWF9UWF9RVUVVRV9OVU1dO1xcbitcXG4rXFx0YXRvbWljX3QgZnJlZV9wZ19oaWdoO1xcbitcXHRhdG9taWNfdCBmcmVlX3BnX25vcm1hbDtcXG4rXFx0YXRvbWljX3QgZnJlZV9wZ19sb3c7XFxuK1xcdGF0b21pY190IGZyZWVfcGdfcHViO1xcbitcXHRhdG9taWNfdCB0eF9vcXRfZnJlZTtcXG4gfTtcXG4gXFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBydHdfc2Rpb19wbV9vcHM7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguY1xcbmluZGV4IDg3ODZiYmI0MjFjMmIuLjRlMTEwYTQ1N2U3MWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jXFxuQEAgLTIwOCw4ICsyMDgsOSBAQCB2b2lkIHJ0d190eF9yZXBvcnRfZW5xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBzbilcXG4gXFx0X19za2JfcXVldWVfdGFpbChcXHUwMDI2dHhfcmVwb3J0LVxcdTAwM2VxdWV1ZSwgc2tiKTtcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dHhfcmVwb3J0LVxcdTAwM2VxX2xvY2ssIGZsYWdzKTtcXG4gXFxuLVxcdGlmIChydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0QgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHJ0d2Rldi1cXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQilcXG4rXFx0aWYgKChydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0QgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICBydHdkZXYtXFx1MDAzZWhjaS50eXBlID09IFJUV19IQ0lfVFlQRV9VU0IpIHx8XFxuK1xcdCAgICBydHdfaXNfODcyM2JzKHJ0d2RldikpXFxuIFxcdFxcdHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDI1MDApO1xcbiBcXG4gXFx0bW9kX3RpbWVyKFxcdTAwMjZ0eF9yZXBvcnQtXFx1MDAzZXB1cmdlX3RpbWVyLCBqaWZmaWVzICsgdGltZW91dCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA3OjU4OjQxLjg3NDAxNDMzN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUxMzA3ODg3ODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUmVhbHRlayBydHc4OCBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgc3VwcG9ydCBhbmQgZml4aW5nIGxvZ2ljIGZvciB0aGUgUlRMODcyM0JTIFNESU8gbW9kdWxlLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciB0aGF0IHJlcXVpcmVzIGEgcGh5c2ljYWwgU0RJTyBXaS1GaSBjaGlwIHRvIGJlIHByZXNlbnQuIFNpbmNlIFNESU8gaGFyZHdhcmUgYW5kIHRoaXMgc3BlY2lmaWMgUmVhbHRlayBjaGlwIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgZnV6eiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYjZkYWIxNDAyNmJlZTkwN2Y3ODhhYTVlNWFkODhjNmQ2MmI1ZmVkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDc6NTg6NDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG5pbmRleCBjNmU5ODFiYTc5ODY4Li44Zjg2ZjdjMTJkZTVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG5AQCAtMTk0LDYgKzE5NCw3IEBAIGVudW0gcnR3X2NoaXBfdHlwZSB7XG4gXHRSVFdfQ0hJUF9UWVBFXzg3MjNELFxuIFx0UlRXX0NISVBfVFlQRV84ODIxQyxcbiBcdFJUV19DSElQX1RZUEVfODcwM0IsXG4rXHRSVFdfQ0hJUF9UWVBFXzg3MjNCLFxuIFx0UlRXX0NISVBfVFlQRV84ODIxQSxcbiBcdFJUV19DSElQX1RZUEVfODgxMkEsXG4gXHRSVFdfQ0hJUF9UWVBFXzg4MTRBLFxuQEAgLTIxOTQsNiArMjE5NSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2NoaXBfaGFzX3R4X3N0YmMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHJldHVybiBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2V0eF9zdGJjO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2lzXzg3MjNicyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuK3tcbitcdHJldHVybiBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MjNCIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHJ0d2Rldi1cdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfU0RJTztcbit9XG4rXG4gc3RhdGljIGlubGluZSB1OCBydHdfYWNxdWlyZV9tYWNpZChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbWFjX2lkO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuaW5kZXggMDFmZDI5OWFiYjdmZS4uZmRlMjFjODQwYWMwMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXG5AQCAtMjUzLDEwICsyNTMsMTIgQEAgc3RhdGljIHZvaWQgcnR3X3J4X2ZpbGxfcnhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4gXG4gXHRydHdfcnhfYWRkcl9tYXRjaChydHdkZXYsIHBrdF9zdGF0LCBoZHIpO1xuIFxuLVx0LyogUnRsODcyM2NzIGRyaXZlciBjaGVja3MgZm9yIHNpemUgXHUwMDNjIDE0IG9yIHNpemUgXHUwMDNlIDgxOTIgYW5kXG4tXHQgKiBzaW1wbHkgZHJvcHMgdGhlIHBhY2tldC5cbitcdC8qXG4rXHQgKiBSdGw4NzIzY3MgYW5kIHJ0bDg3MjNicyBkcml2ZXJzIGNoZWNrIGZvciBzaXplIFx1MDAzYyAxNCBvciBzaXplIFx1MDAzZSA4MTkyXG4rXHQgKiBhbmQgc2ltcGx5IGRyb3AgdGhlIHBhY2tldC5cbiBcdCAqL1xuLVx0aWYgKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcwM0IgXHUwMDI2XHUwMDI2IHBrdF9zdGF0LVx1MDAzZXBrdF9sZW4gPT0gMCkge1xuK1x0aWYgKHBrdF9zdGF0LVx1MDAzZXBrdF9sZW4gPT0gMCBcdTAwMjZcdTAwMjZcbitcdCAgICAocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzAzQiB8fCBydHdfaXNfODcyM2JzKHJ0d2RldikpKSB7XG4gXHRcdHJ4X3N0YXR1cy1cdTAwM2VmbGFnIHw9IFJYX0ZMQUdfTk9fUFNEVTtcbiBcdFx0cnR3X2RiZyhydHdkZXYsIFJUV19EQkdfUlgsIFwiemVybyBsZW5ndGggcGFja2V0XCIpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcbmluZGV4IDViNDBkNzRiMTZlZTAuLmU1YmY5Y2JhMDcxZWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcbkBAIC0yMCw2ICsyMCwxNyBAQFxuICNpbmNsdWRlIFwidHguaFwiXG4gXG4gI2RlZmluZSBSVFdfU0RJT19JTkRJUkVDVF9SV19SRVRSSUVTXHRcdFx0NTBcbisjZGVmaW5lIFJUV19TRElPX09RVF9USU1FT1VUX01TXHRcdFx0XHQxMDAwXG4rXG4rLypcbisgKiA4NzIzQlMgU0RJTyBUWCBGSUZPIGJhY2stcHJlc3N1cmUgd2F0ZXJtYXJrczogc3RvcCB0aGUgbWFjODAyMTEgcXVldWUgb25jZVxuKyAqIHRoZSBwZXItQUMgc29mdHdhcmUgRklGTyBmaWxscyBwYXN0IHRoZSBoaWdoIHdhdGVybWFyaywgYW5kIHdha2UgaXQgZnJvbSB0aGVcbisgKiBUWCBkcmFpbiBwYXRoIG9uY2UgaXQgZmFsbHMgYmFjayB0byB0aGUgbG93IG9uZS4gQm91bmRzIHRoZSBxdWV1ZWluZyBsYXRlbmN5XG4rICogdGhhdCBvdGhlcndpc2UgY2F1c2VzIHVwbGluayBidWZmZXJibG9hdCAvIGNvbmdlc3Rpb24gY29sbGFwc2UuXG4rICovXG4rI2RlZmluZSBSVFdfU0RJT19UWF9GSUZPX0hJV0FURVJcdFx0XHQxNlxuKyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSXHRcdFx0OFxuKyNkZWZpbmUgUlRXX1NESU9fVFhfUkVUUllfREVMQVlcdFx0XHRtc2Vjc190b19qaWZmaWVzKDEpXG4gXG4gc3RhdGljIGJvb2wgcnR3X3NkaW9faXNfYnVzX2FkZHIodTMyIGFkZHIpXG4ge1xuQEAgLTU0OCwxMiArNTU5LDE1NyBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3JlYWRfcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCAqYnVmLCBzaXplX3QgY291bnQpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKlxuKyAqIFRoZSBjYWNoZWQgZnJlZSBwYWdlIGNvdW50ZXJzIGFyZSBhIGZhc3QgcGF0aCBoaW50IG9ubHkuIFRoZXkgYXJlIHdyaXR0ZW5cbisgKiBmcm9tIHRoZSBzaW5nbGUgdGhyZWFkZWQgVFggd29yayBhbmQsIGZvciBIMkMgYW5kIHJlc2VydmVkIHBhZ2Ugd3JpdGVzLFxuKyAqIGZyb20gcHJvY2VzcyBjb250ZXh0LCBzbyB0aGV5IGFyZSBhdG9taWNfdDsgd2hlbmV2ZXIgdGhleSBjbGFpbSB0aGVyZSBpc1xuKyAqIG5vdCBlbm91Z2ggcm9vbSB0aGV5IGFyZSByZXN5bmNocm9uaXNlZCBmcm9tIHRoZSBjaGlwIGJlZm9yZSB0aGUgY2FsbGVyXG4rICogZ2l2ZXMgdXAsIHdoaWNoIGFsc28gYWJzb3JicyBhIGxvc3QgdXBkYXRlLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbitcdFx0XHRcdFx0ICAgIHUzMiBmcmVlX3R4cGcpXG4re1xuK1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuK1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaCxcbitcdFx0ICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19ISUdIKSk7XG4rXHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19ub3JtYWwsXG4rXHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfTk9STUFMKSk7XG4rXHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3csXG4rXHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfTE9XKSk7XG4rXHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIsXG4rXHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfUFVCKSk7XG4rfVxuK1xuKy8qXG4rICogUmVmcmVzaCB0aGUgY2FjaGVkIGNvdW50ZXJzIGZyb20gdGhlIGNoaXAuIFJldHVybnMgZmFsc2Ugd2hlbiB0aGUgY2hpcFxuKyAqIHJlcG9ydHMgbm8gZnJlZSBwYWdlcyBhdCBhbGwsIHdoaWNoIG1lYW5zIHRoZSBjb3VudHMgY2Fubm90IGJlIHRydXN0ZWRcbisgKiBhbmQgdGhlIGNhbGxlciBoYXMgdG8gZGVjaWRlIHdoYXQgdG8gZG8gaW5zdGVhZC5cbisgKi9cbitzdGF0aWMgYm9vbCBydHdfc2Rpb184NzIzYnNfc3luY19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHR1MzIgZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XG4rXG4rXHRpZiAoIWZyZWVfdHhwZylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rLypcbisgKiBTaXplIG9mIHRoZSBwdWJsaWMgcGFnZSBwb29sOiB3aGF0ZXZlciB0aGUgdHJhbnNtaXQgcGFnZSBhbGxvY2F0aW9uIGhhc1xuKyAqIGxlZnQgb25jZSB0aGUgcGVyIHF1ZXVlIHBvb2xzIGFyZSB0YWtlbiBvdXQuIEZhaWxzIGlmIHRoZSBhbGxvY2F0aW9uXG4rICogY2Fubm90IGNvdmVyIHRoZSByZXNlcnZlZCBxdWV1ZXMsIHNpbmNlIHRoZSByZW1haW5kZXIgd291bGQgdW5kZXJmbG93IGFuZFxuKyAqIHRoZXJlIHdvdWxkIGJlIG5vIHNlbnNpYmxlIHBvb2wgdG8gaGFuZCBvdXQuXG4rICovXG4rc3RhdGljIGludCBydHdfc2Rpb184NzIzYnNfcHVicV9udW0oc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTE2ICpwdWJxX251bSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibCA9IFx1MDAyNnJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXBhZ2VfdGFibGVbMF07XG4rXHR1MTYgYWNxX3BnX251bSA9IHJ0d2Rldi1cdTAwM2VmaWZvLmFjcV9wZ19udW07XG4rXHR1MTYgcmVzZXJ2ZWRfbnVtO1xuK1xuK1x0cmVzZXJ2ZWRfbnVtID0gcGdfdGJsLVx1MDAzZWhxX251bSArIHBnX3RibC1cdTAwM2VscV9udW0gKyBwZ190YmwtXHUwMDNlbnFfbnVtICtcbitcdFx0ICAgICAgIHBnX3RibC1cdTAwM2VleHFfbnVtICsgcGdfdGJsLVx1MDAzZWdhcHFfbnVtO1xuK1x0aWYgKGFjcV9wZ19udW0gXHUwMDNjPSByZXNlcnZlZF9udW0pIHtcbitcdFx0cnR3X2VycihydHdkZXYsXG4rXHRcdFx0XCJubyB0cmFuc21pdCBwYWdlcyBsZWZ0IGZvciB0aGUgcHVibGljIHF1ZXVlOiAldSBvZiAldSByZXNlcnZlZFxcblwiLFxuK1x0XHRcdHJlc2VydmVkX251bSwgYWNxX3BnX251bSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0KnB1YnFfbnVtID0gYWNxX3BnX251bSAtIHJlc2VydmVkX251bTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic19pbml0X2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuK3tcbitcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcdGNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsO1xuK1x0dTE2IHB1YnFfbnVtO1xuK1x0aW50IHJldDtcbitcbitcdC8qIFNlZWQgZnJvbSB0aGUgcGFnZSB0YWJsZSB3aGVuIHRoZSBjaGlwIGhhcyBub3RoaW5nIHRvIHJlcG9ydCB5ZXQuICovXG4rXHRpZiAoIXJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhydHdkZXYpKSB7XG4rXHRcdHJldCA9IHJ0d19zZGlvXzg3MjNic19wdWJxX251bShydHdkZXYsIFx1MDAyNnB1YnFfbnVtKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRwZ190YmwgPSBcdTAwMjZydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3RhYmxlWzBdO1xuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19oaWdoLCBwZ190YmwtXHUwMDNlaHFfbnVtKTtcbitcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbm9ybWFsLCBwZ190YmwtXHUwMDNlbnFfbnVtKTtcbitcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93LCBwZ190YmwtXHUwMDNlbHFfbnVtKTtcbitcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViLCBwdWJxX251bSk7XG4rXHR9XG4rXG4rXHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfb3F0X2ZyZWUsXG4rXHRcdCAgIHJ0d19yZWFkOChydHdkZXYsIFJFR19TRElPX09RVF9GUkVFX1BHKSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBTdW0gb2YgdGhlIHF1ZXVlJ3MgZGVkaWNhdGVkIGNvdW50ZXIgYW5kIHRoZSBwdWJsaWMgcG9vbCwgY2xhbXBlZCBhdCB6ZXJvOlxuKyAqIGEgbG9zdCB1cGRhdGUgYmV0d2VlbiB0aGUgY2hlY2sgYmVsb3cgYW5kIHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcoKVxuKyAqIGNhbiBicmllZmx5IGRyaXZlIGEgY291bnRlciBuZWdhdGl2ZSwgYW5kIGxldHRpbmcgdGhhdCB3cmFwIHdvdWxkIGhpZGUgdGhlXG4rICogc2hvcnRhZ2UgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIGEgcmVzeW5jIGZyb20gdGhlIGNoaXAuXG4rICovXG4rc3RhdGljIHVuc2lnbmVkIGludCBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuK1x0XHRcdFx0XHQgICAgICAgYXRvbWljX3QgKmRlZGljYXRlZClcbit7XG4rXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHRpbnQgZnJlZTtcbitcbitcdGZyZWUgPSBhdG9taWNfcmVhZChkZWRpY2F0ZWQpICsgYXRvbWljX3JlYWQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1Yik7XG4rXG4rXHRyZXR1cm4gZnJlZSBcdTAwM2UgMCA/IGZyZWUgOiAwO1xuK31cbitcbitzdGF0aWMgYXRvbWljX3QgKnJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUpXG4re1xuK1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuK1xuK1x0c3dpdGNoIChxdWV1ZSkge1xuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfVkk6XG4rXHRcdHJldHVybiBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbm9ybWFsO1xuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfQkU6XG4rXHRjYXNlIFJUV19UWF9RVUVVRV9CSzpcbitcdFx0cmV0dXJuIFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3c7XG4rXHRjYXNlIFJUV19UWF9RVUVVRV9CQ046XG4rXHRjYXNlIFJUV19UWF9RVUVVRV9IMkM6XG4rXHRjYXNlIFJUV19UWF9RVUVVRV9ISTA6XG4rXHRjYXNlIFJUV19UWF9RVUVVRV9NR01UOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfVk86XG4rXHRcdHJldHVybiBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaDtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgaW50IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcbiBcdFx0XHRcdCAgICBzaXplX3QgY291bnQpXG4ge1xuIFx0dW5zaWduZWQgaW50IHBhZ2VzX2ZyZWUsIHBhZ2VzX25lZWRlZDtcbiBcbi1cdGlmIChydHdfY2hpcF93Y3B1XzgwNTEocnR3ZGV2KSkge1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xuK1x0XHRhdG9taWNfdCAqZGVkaWNhdGVkO1xuK1xuK1x0XHRkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xuK1x0XHRpZiAoIWRlZGljYXRlZCkge1xuK1x0XHRcdHJ0d193YXJuKHJ0d2RldiwgXCJVbmtub3duIG1hcHBpbmcgZm9yIHF1ZXVlICV1XFxuXCIsIHF1ZXVlKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1xuK1x0XHRwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpO1xuK1x0XHRwYWdlc19uZWVkZWQgPSBESVZfUk9VTkRfVVAoY291bnQsIHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4rXHRcdGlmIChwYWdlc19uZWVkZWQgXHUwMDNjPSBwYWdlc19mcmVlKVxuK1x0XHRcdHJldHVybiAwO1xuK1xuK1x0XHRydHdfc2Rpb184NzIzYnNfc3luY19mcmVlX3R4cGcocnR3ZGV2KTtcbitcdFx0cGFnZXNfZnJlZSA9IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHJ0d2RldiwgZGVkaWNhdGVkKTtcbitcdH0gZWxzZSBpZiAocnR3X2NoaXBfd2NwdV84MDUxKHJ0d2RldikpIHtcbiBcdFx0dTMyIGZyZWVfdHhwZztcbiBcbiBcdFx0ZnJlZV90eHBnID0gcnR3X3NkaW9fcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbkBAIC02MzIsNDQgKzc4OCwxMjQgQEAgc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBydHdfc2Rpb184NzIzYnNfd2FpdF90eF9vcXQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHR1bnNpZ25lZCBsb25nIGRlYWRsaW5lO1xuK1x0dTggZnJlZTtcbitcbitcdGlmIChhdG9taWNfYWRkX3VubGVzcyhcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCAtMSwgMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0ZGVhZGxpbmUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhSVFdfU0RJT19PUVRfVElNRU9VVF9NUyk7XG4rXHRkbyB7XG4rXHRcdGZyZWUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRyk7XG4rXHRcdGlmIChmcmVlKSB7XG4rXHRcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCBmcmVlIC0gMSk7XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuK1x0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVhZGxpbmUpKTtcbitcbitcdHJldHVybiAtRUJVU1k7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXG4rXHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgcGFnZXMpXG4re1xuK1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuK1x0YXRvbWljX3QgKmRlZGljYXRlZDtcbitcdHVuc2lnbmVkIGludCB0YWtlbjtcbitcdGludCBmcmVlO1xuK1xuK1x0ZGVkaWNhdGVkID0gcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlKTtcbitcdGlmICghZGVkaWNhdGVkKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKTtcbitcdHRha2VuID0gbWluX3QodW5zaWduZWQgaW50LCBwYWdlcywgZnJlZSBcdTAwM2UgMCA/IGZyZWUgOiAwKTtcbitcdGF0b21pY19zdWIodGFrZW4sIGRlZGljYXRlZCk7XG4rXG4rXHRwYWdlcyAtPSB0YWtlbjtcbitcdGlmIChwYWdlcyBcdTAwMjZcdTAwMjYgYXRvbWljX3N1Yl9yZXR1cm4ocGFnZXMsIFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIpIFx1MDAzYyAwKVxuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIsIDApO1xuK31cbitcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3dyaXRlX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgICAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHRib29sIHJ0bDg3MjNicyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTtcbitcdHVuc2lnbmVkIGludCBvcmlnX2xlbiA9IHNrYi1cdTAwM2VsZW47XG4rXHR1bnNpZ25lZCBpbnQgcGFnZXM7XG4rXHRzaXplX3Qgd3JpdGVfc2l6ZTtcbiBcdGJvb2wgYnVzX2NsYWltO1xuIFx0c2l6ZV90IHR4c2l6ZTtcbiBcdHUzMiB0eGFkZHI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0dHhhZGRyID0gcnR3X3NkaW9fZ2V0X3R4X2FkZHIocnR3ZGV2LCBza2ItXHUwMDNlbGVuLCBxdWV1ZSk7XG4tXHRpZiAoIXR4YWRkcilcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAocnRsODcyM2JzKSB7XG4rXHRcdHR4c2l6ZSA9IHJvdW5kX3VwKG9yaWdfbGVuLCA0KTtcbitcdFx0d3JpdGVfc2l6ZSA9IHR4c2l6ZSBcdTAwM2UgUlRXX1NESU9fQkxPQ0tfU0laRSA/XG4rXHRcdFx0ICAgICByb3VuZF91cCh0eHNpemUsIFJUV19TRElPX0JMT0NLX1NJWkUpIDogdHhzaXplO1xuK1x0fSBlbHNlIHtcbitcdFx0dHhzaXplID0gc2Rpb19hbGlnbl9zaXplKHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jLCBvcmlnX2xlbik7XG4rXHRcdHdyaXRlX3NpemUgPSB0eHNpemU7XG4rXHR9XG4rXG4rXHRpZiAod3JpdGVfc2l6ZSBcdTAwM2Ugb3JpZ19sZW4pIHtcbitcdFx0dW5zaWduZWQgaW50IHBhZGRpbmcgPSB3cml0ZV9zaXplIC0gb3JpZ19sZW47XG4gXG4tXHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIHNrYi1cdTAwM2VsZW4pO1xuK1x0XHRpZiAoc2tiX3RhaWxyb29tKHNrYikgXHUwMDNjIHBhZGRpbmcpIHtcbitcdFx0XHRyZXQgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCxcbitcdFx0XHRcdFx0ICAgICAgIHBhZGRpbmcgLSBza2JfdGFpbHJvb20oc2tiKSxcbitcdFx0XHRcdFx0ICAgICAgIEdGUF9LRVJORUwpO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4rXHRcdHNrYl9wdXRfemVybyhza2IsIHBhZGRpbmcpO1xuK1x0fVxuK1xuK1x0dHhhZGRyID0gcnR3X3NkaW9fZ2V0X3R4X2FkZHIocnR3ZGV2LCB0eHNpemUsIHF1ZXVlKTtcbitcdGlmICghdHhhZGRyKSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gb3V0X3RyaW07XG4rXHR9XG4gXG4gXHRyZXQgPSBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSwgdHhzaXplKTtcbiBcdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4rXHRcdGdvdG8gb3V0X3RyaW07XG4rXG4rXHRpZiAocnRsODcyM2JzKSB7XG4rXHRcdHJldCA9IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChydHdkZXYpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gb3V0X3RyaW07XG4rXHR9XG4gXG4gXHRpZiAoIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpc2tiLVx1MDAzZWRhdGEsIFJUV19TRElPX0RBVEFfUFRSX0FMSUdOKSlcbiBcdFx0cnR3X3dhcm4ocnR3ZGV2LCBcIkdvdCB1bmFsaWduZWQgU0tCIGluICVzKCkgZm9yIHF1ZXVlICV1XFxuXCIsXG4gXHRcdFx0IF9fZnVuY19fLCBxdWV1ZSk7XG4gXG4gXHRidXNfY2xhaW0gPSBydHdfc2Rpb19idXNfY2xhaW1fbmVlZGVkKHJ0d3NkaW8pO1xuLVxuIFx0aWYgKGJ1c19jbGFpbSlcbiBcdFx0c2Rpb19jbGFpbV9ob3N0KHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jKTtcbi1cbi1cdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLVx1MDAzZWRhdGEsIHR4c2l6ZSk7XG4tXG4rXHRyZXQgPSBzZGlvX21lbWNweV90b2lvKHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cdTAwM2VkYXRhLFxuK1x0XHRcdCAgICAgICB3cml0ZV9zaXplKTtcbiBcdGlmIChidXNfY2xhaW0pXG4gXHRcdHNkaW9fcmVsZWFzZV9ob3N0KHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jKTtcbiBcbi1cdGlmIChyZXQpXG4rXHRpZiAocmV0KSB7XG4gXHRcdHJ0d193YXJuKHJ0d2RldixcbiBcdFx0XHQgXCJGYWlsZWQgdG8gd3JpdGUgJXp1IGJ5dGUocykgdG8gU0RJTyBwb3J0IDB4JTA4eFwiLFxuLVx0XHRcdCB0eHNpemUsIHR4YWRkcik7XG4rXHRcdFx0IHdyaXRlX3NpemUsIHR4YWRkcik7XG4rXHR9IGVsc2UgaWYgKHJ0bDg3MjNicykge1xuK1x0XHRwYWdlcyA9IERJVl9ST1VORF9VUCh0eHNpemUsIHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4rXHRcdHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcocnR3ZGV2LCBxdWV1ZSwgcGFnZXMpO1xuK1x0fVxuIFxuK291dF90cmltOlxuK1x0aWYgKHdyaXRlX3NpemUgXHUwMDNlIG9yaWdfbGVuKVxuK1x0XHRza2JfdHJpbShza2IsIG9yaWdfbGVuKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTY3Nyw3ICs5MTMsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5pdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiBcbi1cdHJ0d3NkaW8tXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfCBSRUdfU0RJT19ISU1SX0NQV00xO1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbitcdFx0cnR3c2Rpby1cdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVDtcbitcdGVsc2VcbitcdFx0cnR3c2Rpby1cdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVCB8XG4rXHRcdFx0XHQgICAgUkVHX1NESU9fSElNUl9DUFdNMTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG5AQCAtNjg1LDYgKzkyNSw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0dTggc2l6ZSwgdGltZW91dDtcbiBcbiBcdHN3aXRjaCAocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQpIHtcbitcdGNhc2UgUlRXX0NISVBfVFlQRV84NzIzQjpcbiBcdGNhc2UgUlRXX0NISVBfVFlQRV84NzAzQjpcbiBcdGNhc2UgUlRXX0NISVBfVFlQRV84ODIxQTpcbiBcdGNhc2UgUlRXX0NISVBfVFlQRV84ODEyQTpcbkBAIC03MTIsNiArOTUzLDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRcdCAgICBGSUVMRF9QUkVQKEJJVF9ETUFfQUdHX1RPX1YxLCB0aW1lb3V0KSk7XG4gXG4gXHRydHdfd3JpdGU4X3NldChydHdkZXYsIFJFR19SWERNQV9NT0RFLCBCSVRfRE1BX01PREUpO1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbitcdFx0cnR3X3dyaXRlOF9tYXNrKHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfQlVSU1RfQ05ULCAweDMpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG5AQCAtNzQ5LDkgKzk5Miw2MSBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3NldHVwKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLypcbisgKiBSZXByb2dyYW0gdGhlIHF1ZXVlIHBhZ2UgYWxsb2NhdGlvbiBpZiB0aGUgY2hpcCBjYW1lIHVwIHdpdGggbm9uZS4gVGhpcyBpc1xuKyAqIGEgcmVwYWlyIHBhdGgsIG5vdCBwYXJ0IG9mIHRoZSBub3JtYWwgc3RhcnQgc2VxdWVuY2U6IGEgbm9uLXplcm8gZnJlZSBwYWdlXG4rICogY291bnQgbWVhbnMgdGhlIGFsbG9jYXRpb24gbGF0Y2hlZCBkdXJpbmcgcG93ZXIgb24gYW5kIG11c3QgYmUgbGVmdCBhbG9uZSxcbisgKiBhbmQgd2l0aG91dCBhIHRyYW5zbWl0IHBhZ2UgcG9vbCB0aGVyZSBpcyBub3RoaW5nIHRvIGRpdmlkZSB1cCBlaXRoZXIuXG4rICovXG4rc3RhdGljIGludCBydHdfc2Rpb184NzIzYnNfY2hlY2tfcnFwbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydHdfY2hpcF9pbmZvICpjaGlwID0gcnR3ZGV2LVx1MDAzZWNoaXA7XG4rXHRzdHJ1Y3QgcnR3X2ZpZm9fY29uZiAqZmlmbyA9IFx1MDAyNnJ0d2Rldi1cdTAwM2VmaWZvO1xuK1x0Y29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190Ymw7XG4rXHR1MzIgZnJlZV90eHBnO1xuK1x0dTE2IHB1YnFfbnVtO1xuK1x0aW50IHJldDtcbitcbitcdGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xuK1x0aWYgKGZyZWVfdHhwZyB8fCAhZmlmby1cdTAwM2VhY3FfcGdfbnVtKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldCA9IHJ0d19zZGlvXzg3MjNic19wdWJxX251bShydHdkZXYsIFx1MDAyNnB1YnFfbnVtKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRwZ190YmwgPSBcdTAwMjZjaGlwLVx1MDAzZXBhZ2VfdGFibGVbMF07XG4rXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOX05QUSxcbitcdFx0ICAgIEJJVF9SUVBOX05FKHBnX3RibC1cdTAwM2VucV9udW0sIHBnX3RibC1cdTAwM2VleHFfbnVtKSk7XG4rXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOLFxuK1x0XHQgICAgQklUX1JRUE5fSExQKHBnX3RibC1cdTAwM2VocV9udW0sIHBnX3RibC1cdTAwM2VscV9udW0sIHB1YnFfbnVtKSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBydHdfc2Rpb19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbitcdHUzMiBjbGVhcjtcbitcbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbitcdFx0aW50IHJldCA9IHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHJ0d2Rldik7XG4rXG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0cmV0ID0gcnR3X3NkaW9fODcyM2JzX2luaXRfZnJlZV90eHBnKHJ0d2Rldik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbiBcdHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihydHdkZXYpO1xuK1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xuK1x0XHRjbGVhciA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSKSBcdTAwMjYgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xuK1x0XHRpZiAoY2xlYXIpXG4rXHRcdFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBjbGVhcik7XG4rXHR9XG4rXG4gXHRydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHJ0d2Rldik7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC04MTUsNyArMTExMCwxMSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9raWNrX29mZihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiBcbi1cdHF1ZXVlX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLCBcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrKTtcbitcdC8qXG4rXHQgKiBBIHJldHJ5IG1heSBhbHJlYWR5IGJlIHBlbmRpbmcgd2l0aCBhIGRlbGF5OyByZS1hcm0gaXQgc28gYSBuZXdseVxuK1x0ICogcXVldWVkIGZyYW1lIGlzIG5vdCBoZWxkIGJhY2sgYnkgaXQuXG4rXHQgKi9cbitcdG1vZF9kZWxheWVkX3dvcmsocnR3c2Rpby1cdTAwM2V0eHdxLCBcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrLCAwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fbGlua19wcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVudGVyKVxuQEAgLTgzMSw2ICsxMTMwLDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW50ZXJmYWNlX2NmZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFxuIFx0dmFsID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwpO1xuIFx0dmFsIFx1MDAyNj0gMHhmZmY4O1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbitcdFx0dmFsIHw9IEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRTtcbiBcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fVFhfQ1RSTCwgdmFsKTtcbiB9XG4gXG5AQCAtOTIyLDYgKzEyMjMsNTAgQEAgc3RhdGljIGludCBydHdfc2Rpb193cml0ZV9kYXRhX2gyYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCAqYnVmLCB1MzIgc2l6ZSlcbiBcdHJldHVybiBydHdfc2Rpb193cml0ZV9kYXRhKHJ0d2RldiwgXHUwMDI2cGt0X2luZm8sIHNrYiwgUlRXX1RYX1FVRVVFX0gyQyk7XG4gfVxuIFxuKy8qXG4rICogQmFjay1wcmVzc3VyZSBvbiB0aGUgZGF0YSBBQ3MgKEJLL0JFL1ZJL1ZPKTogb25jZSB0aGUgc29mdHdhcmUgRklGTyBmaWxsc1xuKyAqIHBhc3QgdGhlIGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHRoZSBjb3JyZXNwb25kaW5nIG1hYzgwMjExIHF1ZXVlIHNvIGl0IHN0b3BzXG4rICogaGFuZGluZyBmcmFtZXMgZG93biwgd2hpY2ggYm91bmRzIHRoZSBxdWV1ZWluZyBsYXRlbmN5LiBUaGUgcXVldWUgaXMgd29rZW5cbisgKiBhZ2FpbiBmcm9tIHRoZSBUWCBkcmFpbiBwYXRoIG9uY2UgdGhlIEZJRk8gZmFsbHMgYmFjayB0byB0aGUgbG93IHdhdGVybWFyay5cbisgKi9cbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3RvcF90eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuK1x0XHRcdFx0XHQgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUsXG4rXHRcdFx0XHRcdCAgdTE2IHFfbWFwKVxuK3tcbitcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcbitcdGlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpIHx8IHF1ZXVlIFx1MDAzZT0gUlRXX1RYX1FVRVVFX0JDTilcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKHJ0d3NkaW8tXHUwMDNldHhfcXVldWVfc3RvcHBlZFtxdWV1ZV0pXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChza2JfcXVldWVfbGVuKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdKSBcdTAwM2MgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRydHdzZGlvLVx1MDAzZXR4X3F1ZXVlX3N0b3BwZWRbcXVldWVdID0gdHJ1ZTtcbitcdGllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0d2Rldi1cdTAwM2VodywgcV9tYXApO1xuK31cbitcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfd2FrZV90eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuK1x0XHRcdFx0XHQgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUsXG4rXHRcdFx0XHRcdCAgdTE2IHFfbWFwKVxuK3tcbitcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcbitcdGlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpIHx8IHF1ZXVlIFx1MDAzZT0gUlRXX1RYX1FVRVVFX0JDTilcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKCFydHdzZGlvLVx1MDAzZXR4X3F1ZXVlX3N0b3BwZWRbcXVldWVdKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkgXHUwMDNlIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUilcbitcdFx0cmV0dXJuO1xuK1xuK1x0cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSA9IGZhbHNlO1xuK1x0aWVlZTgwMjExX3dha2VfcXVldWUocnR3ZGV2LVx1MDAzZWh3LCBxX21hcCk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgcnR3X3NkaW9fdHhfd3JpdGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiBcdFx0XHQgICAgIHN0cnVjdCBydHdfdHhfcGt0X2luZm8gKnBrdF9pbmZvLFxuIFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbkBAIC05MzcsNiArMTI4Miw4IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fdHhfd3JpdGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiBcbiBcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdLCBza2IpO1xuIFxuK1x0cnR3X3NkaW9fODcyM2JzX3N0b3BfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEwOTUsNiArMTQ0MiwxNCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYylcbiBcdFx0cnR3X3NkaW9fcnhfaXNyKHJ0d2Rldik7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogUlRMODcyM0JTIGtlZXBzIHJhaXNpbmcgdGhlIGludGVycnVwdCBhZnRlciByZXN1bWUgaWYgdW5kZWZpbmVkXG4rXHQgKiBzdGF0dXMgYml0cyBhcmUgd3JpdHRlbiBiYWNrLCBzbyBhY2tub3dsZWRnZSBvbmx5IHRoZSBiaXRzIHRoaXNcbitcdCAqIGRyaXZlciBkZWZpbmVzLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuXG4rXHQgKi9cbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4rXHRcdGhpc3IgXHUwMDI2PSBSVFdfU0RJT19ISVNSX0NMRUFSX01BU0s7XG4rXG4gXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGhpc3IpO1xuIFxuIFx0cnR3c2Rpby1cdTAwM2VpcnFfdGhyZWFkID0gTlVMTDtcbkBAIC0xMjMxLDMzICsxNTg2LDgxIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFx0aWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4tXHRcdFx0XHQgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxuKy8qXG4rICogU2VuZCBvbmUgZnJhbWUgZnJvbSBAcXVldWUuIFJldHVybnMgMCB3aGVuIGEgZnJhbWUgd2FzIHdyaXR0ZW4sIDEgd2hlbiB0aGVcbisgKiBxdWV1ZSB3YXMgZW1wdHkgYW5kIGEgbmVnYXRpdmUgZXJybm8gd2hlbiB0aGUgd3JpdGUgZmFpbGVkLCBpbiB3aGljaCBjYXNlXG4rICogdGhlIGZyYW1lIGlzIHB1dCBiYWNrIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZS5cbisgKi9cbitzdGF0aWMgaW50IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbitcdFx0XHRcdCAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0dTE2IHFfbWFwO1xuIFx0aW50IHJldDtcbiBcbiBcdHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdKTtcbiBcdGlmICghc2tiKVxuLVx0XHRyZXR1cm47XG4rXHRcdHJldHVybiAxO1xuIFxuK1x0cV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiBcdHJldCA9IHJ0d19zZGlvX3dyaXRlX3BvcnQocnR3ZGV2LCBza2IsIHF1ZXVlKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0c2tiX3F1ZXVlX2hlYWQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4tXHRcdHJldHVybjtcbitcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiBcdHJ0d19zZGlvX2luZGljYXRlX3R4X3N0YXR1cyhydHdkZXYsIHNrYik7XG4rXG4rXHRydHdfc2Rpb184NzIzYnNfd2FrZV90eF9xdWV1ZShydHdkZXYsIHF1ZXVlLCBxX21hcCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBEZWNpZGUgd2hldGhlciB0aGUgUlRMODcyM0JTIHdhbnRzIHRoZSBUWCB3b3JrIHRvIHJ1biBhZ2FpbiwgYW5kIGlmIHNvXG4rICogYXJyYW5nZSBpdCBhbmQgdGVsbCB0aGUgY2FsbGVyIHRvIHN0b3AgZHJhaW5pbmcuIFR3byBjYXNlcyBuZWVkIGl0LlxuKyAqXG4rICogQSB0cmFuc21pdCBwYWdlIG9yIG91dHB1dCBxdWV1ZSBzaG9ydGFnZSBhbmQgYSBmYWlsZWQgc2tiIGV4cGFuc2lvbiBhcmVcbisgKiB0cmFuc2llbnQgYW5kIGxlYXZlIHRoZSBmcmFtZSBxdWV1ZWQsIHNvIGNvbWUgYmFjayBmb3IgaXQgc2hvcnRseS4gVGhhdFxuKyAqIG1hdHRlcnMgb25jZSB0aGUgbWFjODAyMTEgcXVldWUgY2FuIGJlIHN0b3BwZWQ6IGEgc3RvcHBlZCBxdWV1ZSBpcyBoYW5kZWRcbisgKiBubyBmdXJ0aGVyIGZyYW1lcywgc28gbm90aGluZyBlbHNlIHdvdWxkIGtpY2sgdGhpcyB3b3JrIGl0ZW0gYW5kIHRoZSBhY2Nlc3NcbisgKiBjYXRlZ29yeSB3b3VsZCBzdGF5IHN0b3BwZWQgZm9yIGdvb2QuIFRoZSByZW1haW5pbmcgZXJyb3JzIGFyZSBsb2dnZWQgd2hlcmVcbisgKiB0aGV5IGhhcHBlbiBhbmQgYXJlIG5vdCByZXRyaWVkLlxuKyAqXG4rICogQWZ0ZXIgYSBtYW5hZ2VtZW50IGZyYW1lLCByZXN0YXJ0IGZyb20gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcXVldWUgc28gdGhlXG4rICogam9pbiBzZXF1ZW5jZSBpcyBub3QgaGVsZCB1cCBiZWhpbmQgYSBkYXRhIGJhY2tsb2cuXG4rICovXG4rc3RhdGljIGJvb2wgcnR3X3NkaW9fODcyM2JzX3Jlc2NoZWR1bGVfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp3b3JrX2RhdGEsXG4rXHRcdFx0XHRcdCAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSwgaW50IHJldClcbit7XG4rXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHR1bnNpZ25lZCBsb25nIGRlbGF5O1xuK1xuK1x0aWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChyZXQgPT0gLUVCVVNZIHx8IHJldCA9PSAtRU5PTUVNKVxuK1x0XHRkZWxheSA9IFJUV19TRElPX1RYX1JFVFJZX0RFTEFZO1xuK1x0ZWxzZSBpZiAocmV0ID09IDAgXHUwMDI2XHUwMDI2IHF1ZXVlID09IFJUV19UWF9RVUVVRV9NR01UKVxuK1x0XHRkZWxheSA9IDA7XG4rXHRlbHNlXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHF1ZXVlX2RlbGF5ZWRfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsIFx1MDAyNndvcmtfZGF0YS1cdTAwM2V3b3JrLCBkZWxheSk7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSAqd29ya19kYXRhID1cbi1cdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsIHdvcmspO1xuK1x0XHRjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLFxuK1x0XHRcdCAgICAgd29yayk7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW87XG4gXHRzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2O1xuLVx0aW50IGxpbWl0LCBxdWV1ZTtcbitcdGludCBsaW1pdCwgcXVldWUsIHJldDtcbiBcbiBcdHJ0d2RldiA9IHdvcmtfZGF0YS1cdTAwM2VydHdkZXY7XG4gXHRydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuQEAgLTEyNjcsNyArMTY3MCwxMyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcbiBcdGZvciAocXVldWUgPSBSVEtfTUFYX1RYX1FVRVVFX05VTSAtIDE7IHF1ZXVlIFx1MDAzZT0gMDsgcXVldWUtLSkge1xuIFx0XHRmb3IgKGxpbWl0ID0gMDsgbGltaXQgXHUwMDNjIDEwMDA7IGxpbWl0KyspIHtcbi1cdFx0XHRydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpO1xuK1x0XHRcdHJldCA9IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2UgMClcbitcdFx0XHRcdGJyZWFrO1xuK1xuK1x0XHRcdGlmIChydHdfc2Rpb184NzIzYnNfcmVzY2hlZHVsZV90eChydHdkZXYsIHdvcmtfZGF0YSxcbitcdFx0XHRcdFx0XHRcdCAgcXVldWUsIHJldCkpXG4rXHRcdFx0XHRyZXR1cm47XG4gXG4gXHRcdFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkpXG4gXHRcdFx0XHRicmVhaztcbkBAIC0xMjk0LDE0ICsxNzAzLDE2IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9faW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIFJUS19NQVhfVFhfUVVFVUVfTlVNOyBpKyspXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSsrKSB7XG4gXHRcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtpXSk7XG4rXHRcdHJ0d3NkaW8tXHUwMDNldHhfcXVldWVfc3RvcHBlZFtpXSA9IGZhbHNlO1xuK1x0fVxuIFx0cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEgPSBrbWFsbG9jX29iaigqcnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEpO1xuIFx0aWYgKCFydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSlcbiBcdFx0Z290byBlcnJfZGVzdHJveV93cTtcbiBcbiBcdHJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXJ0d2RldiA9IHJ0d2Rldjtcbi1cdElOSVRfV09SSyhcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrLCBydHdfc2Rpb190eF9oYW5kbGVyKTtcbitcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMTMxNSw2ICsxNzI2LDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXHRpbnQgaTtcbiBcbitcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrKTtcbiBcdGRlc3Ryb3lfd29ya3F1ZXVlKHJ0d3NkaW8tXHUwMDNldHh3cSk7XG4gXHRrZnJlZShydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaFxuaW5kZXggNDU3ZThiMDIzODBlNS4uY2VjM2RkMWM0YjJlNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaFxuQEAgLTIyLDYgKzIyLDcgQEBcbiBcbiAvKiBTRElPIFR4IENvbnRyb2wgKi9cbiAjZGVmaW5lIFJFR19TRElPX1RYX0NUUkxcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMDApXG4rI2RlZmluZSBCSVRfU0RJT19UWF9DVFJMX0FMV0FZU19SRUNPR05JWkVcdEJJVCg0KVxuIFxuIC8qU0RJTyBzdGF0dXMgdGltZW91dCovXG4gI2RlZmluZSBSRUdfU0RJT19USU1FT1VUXHRcdFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDAyKVxuQEAgLTc3LDYgKzc4LDE0IEBAXG4gLyogdGhlIGZvbGxvd2luZyB0d28gYXJlIFJUTDgxODggU0RJTyBTcGVjaWZpYyAqL1xuICNkZWZpbmUgUkVHX1NESU9fSElTUl9NQ1VfRVJSXHRcdFx0QklUKDI4KVxuICNkZWZpbmUgUkVHX1NESU9fSElTUl9UU0ZfQklUMzJfVE9HR0xFXHRcdEJJVCgyOSlcbisjZGVmaW5lIFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTS1x0XHRcXFxuK1x0KFJFR19TRElPX0hJU1JfVFhFUlIgfCBSRUdfU0RJT19ISVNSX1JYRVJSIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX1RYRk9WVyB8IFJFR19TRElPX0hJU1JfUlhGT1ZXIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX1RYQkNOT0sgfCBSRUdfU0RJT19ISVNSX1RYQkNORVJSIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX0MySENNRCB8IFJFR19TRElPX0hJU1JfQ1BXTTEgfCBcXFxuK1x0IFJFR19TRElPX0hJU1JfQ1BXTTIgfCBSRUdfU0RJT19ISVNSX0hTSVNSX0lORCB8IFxcXG4rXHQgUkVHX1NESU9fSElTUl9HVElOVDNfSU5EIHwgUkVHX1NESU9fSElTUl9HVElOVDRfSU5EIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX1BTVElNRU9VVCB8IFJFR19TRElPX0hJU1JfT0NQSU5UKVxuIFxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgKi9cbiAjZGVmaW5lIFJFR19TRElPX0hDUFdNXHRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMTkpXG5AQCAtODYsNiArOTUsMTAgQEBcbiAjZGVmaW5lIFJFR19TRElPX09RVF9GUkVFX1BHXHRcdFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDFFKVxuIC8qIEZyZWUgVHggQnVmZmVyIFBhZ2UgKi9cbiAjZGVmaW5lIFJFR19TRElPX0ZSRUVfVFhQR1x0XHRcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAyMClcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfSElHSFx0XHRcdEdFTk1BU0soNywgMClcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTk9STUFMXHRcdFx0R0VOTUFTSygxNSwgOClcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTE9XXHRcdFx0R0VOTUFTSygyMywgMTYpXG4rI2RlZmluZSBCSVRfRlJFRV9UWFBHX1BVQlx0XHRcdEdFTk1BU0soMzEsIDI0KVxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgMSAqL1xuICNkZWZpbmUgUkVHX1NESU9fSENQV00xXHRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMjQpXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAyICovXG5AQCAtMTQzLDcgKzE1Niw3IEBAIHN0cnVjdCBydHdfc2Rpb190eF9kYXRhIHtcbiB9O1xuIFxuIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEge1xuLVx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XG4rXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7XG4gXHRzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2O1xuIH07XG4gXG5AQCAtMTU5LDYgKzE3MiwxMyBAQCBzdHJ1Y3QgcnR3X3NkaW8ge1xuIFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnR4d3E7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp0eF9oYW5kbGVyX2RhdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcbitcdGJvb2wgdHhfcXVldWVfc3RvcHBlZFtSVEtfTUFYX1RYX1FVRVVFX05VTV07XG4rXG4rXHRhdG9taWNfdCBmcmVlX3BnX2hpZ2g7XG4rXHRhdG9taWNfdCBmcmVlX3BnX25vcm1hbDtcbitcdGF0b21pY190IGZyZWVfcGdfbG93O1xuK1x0YXRvbWljX3QgZnJlZV9wZ19wdWI7XG4rXHRhdG9taWNfdCB0eF9vcXRfZnJlZTtcbiB9O1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBydHdfc2Rpb19wbV9vcHM7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jXG5pbmRleCA4Nzg2YmJiNDIxYzJiLi40ZTExMGE0NTdlNzFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmNcbkBAIC0yMDgsOCArMjA4LDkgQEAgdm9pZCBydHdfdHhfcmVwb3J0X2VucXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggc24pXG4gXHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNnR4X3JlcG9ydC1cdTAwM2VxdWV1ZSwgc2tiKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHhfcmVwb3J0LVx1MDAzZXFfbG9jaywgZmxhZ3MpO1xuIFxuLVx0aWYgKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0QgXHUwMDI2XHUwMDI2XG4tXHQgICAgcnR3ZGV2LVx1MDAzZWhjaS50eXBlID09IFJUV19IQ0lfVFlQRV9VU0IpXG4rXHRpZiAoKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0QgXHUwMDI2XHUwMDI2XG4rXHQgICAgIHJ0d2Rldi1cdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfVVNCKSB8fFxuK1x0ICAgIHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiBcdFx0dGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwMCk7XG4gXG4gXHRtb2RfdGltZXIoXHUwMDI2dHhfcmVwb3J0LVx1MDAzZXB1cmdlX3RpbWVyLCBqaWZmaWVzICsgdGltZW91dCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzo1ODo0MS44NzQwMTYwNzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODg0OTIyNzI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBUaGlzIHJ0dzg4IFBhdGNoIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgYHJ0dzg4YCBkcml2ZXIsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIFNESU8gaW50ZXJmYWNlIGFuZCBhZGRpbmcgc3VwcG9ydC9maXhpbmcgbG9naWMgZm9yIGBSVFdfQ0hJUF9UWVBFXzg3MjNCYCBhbmQgYFJUV19DSElQX1RZUEVfODcyM0JTYC4gSXQgc2VlbXMgcHJldHR5IGV4dGVuc2l2ZSDigJMgdGhlcmUgYXJlIG5ldyBoZWxwZXIgZnVuY3Rpb25zIGxpa2UgYHJ0d19pc184NzIzYnNgLCBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGZ1bmN0aW9ucyBsaWtlIGBydHdfcnhfZmlsbF9yeF9zdGF0dXNgLCBhbmQgYSB3aG9sZSBzbGV3IG9mIG5ldyBTRElPLXNwZWNpZmljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIFRYIHBhZ2UgbWFuYWdlbWVudCBhbmQgcXVldWUgaGFuZGxpbmcuIE1hbnkgZXhpc3RpbmcgZnVuY3Rpb25zIGFyZSBhbHNvIGJlaW5nIHVwZGF0ZWQuIFRoZSBjaGFuZ2VzIHRvdWNoIHVwb24gY29yZSBTRElPIG9wZXJhdGlvbnMg4oCTIHJlYWRpbmcvd3JpdGluZyBwb3J0cywgaW5pdGlhbGl6aW5nLCBlbmFibGluZyBSWCBhZ2dyZWdhdGlvbiwgVFggaGFuZGxpbmcsIGFuZCBpbnRlcnJ1cHQgcHJvY2Vzc2luZy5cblxuVGhlIGNydXggb2YgdGhlIG1hdHRlciBpcyB3aGV0aGVyIHRoaXMgY29kZSBpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB0aGF0IFN5emthbGxlciBjYW4gZWFzaWx5IGZ1enouIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoYXQgYHJ0dzg4YCBpcyBhIFJlYWx0ZWsgV2ktRmkgZHJpdmVyLCBhbmQgdGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgZGVhbHMgd2l0aCB0aGUgU0RJTyBpbnRlcmZhY2UuIFNESU8gZGV2aWNlcyBhcmUgbm90b3Jpb3VzbHkgZGlmZmljdWx0IHRvIGVtdWxhdGUgd2VsbCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBzZXR1cHMsIGVzcGVjaWFsbHkgd2hlbiB5b3UncmUgdGFsa2luZyBhYm91dCBzcGVjaWZpYyB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUuIFdoaWxlIFFFTVUgKmRvZXMqIGhhdmUgU0RIQ0kgZW11bGF0aW9uLCB0aGF0IGRvZXNuJ3QgYXV0b21hdGljYWxseSBtZWFuIHdlIGhhdmUgYSB2aXJ0dWFsIFNESU8gKmNhcmQqIHRoYXQgdGhpcyBSZWFsdGVrIGRyaXZlciBjYW4gaW50ZXJhY3Qgd2l0aC4gYG1hYzgwMjExX2h3c2ltYCBpcyBhbiBpbnRlcmVzdGluZyBleGFtcGxlIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiwgYnV0IGl0J3MgYSB2aXJ0dWFsIGRyaXZlciwgbm90IGFuIGVtdWxhdG9yIGZvciByZWFsdGVrIGhhcmR3YXJlLlxuXG5UaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgZXZlbiB3aGVuIHVzaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBJdCBjYWxscyBvdXQgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgdGhhdCBuZWVkIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUsIHdoaWNoIHByZXR0eSBtdWNoIGRlc2NyaWJlcyB0aGUgc2l0dWF0aW9uIHdpdGggU0RJTyBXaS1GaSBjaGlwcy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgcnR3ODhgIFNESU8gY2FuJ3QgYmUgcHJvYmVkIHdpdGhvdXQgcmVhbCBoYXJkd2FyZS4gU3l6a2FsbGVyIGhhcyBVU0IgYW5kIFBDSSBmdXp6aW5nLCBidXQgU0RJTz8gSSBkb24ndCByZWNhbGwgc2VlaW5nIGFueSBTRElPIGZ1enppbmcgc3VwcG9ydCBkaXJlY3RseS4gVGhlIGluc3RydWN0aW9ucyBzdWdnZXN0IHRoZSBjb2RlIGlzICp1bnJlYWNoYWJsZSouIEknbSB0aGlua2luZyBhYm91dCB0aGUgZnVuY3Rpb24gY2FsbCBjaGFpbjogYHJ0d19zZGlvX3dyaXRlX3BvcnRgIGlzIGNhbGxlZCBmcm9tIGBydHdfc2Rpb190eF93cml0ZWAsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgdGhlIFNESU8gZHJpdmVyLlxuXG5TbywgcmVhbGlzdGljYWxseSwgaWYgdGhlcmUncyBubyBTRElPIGZ1enplciBpbiBTeXprYWxsZXIgYW5kIG5vIHZpcnR1YWwgU0RJTyBoYXJkd2FyZSB0aGF0IGNhbiBiZSBtZWFuaW5nZnVsbHkgdXNlZCBieSB0aGUgYHJ0dzg4YCBkcml2ZXIsIHRoZW4gdGhpcyBjb2RlIGlzIGRlYWQgb24gYXJyaXZhbCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhlIHBhdGNoIGlzIHByb2JhYmx5IG5vdCB3b3J0aCBmdXp6aW5nLiBJIGNvdWxkIHRyeSB0byBzZWFyY2ggZm9yIFwic2Rpb1wiIGluIHRoZSBrZXJuZWwgb3Igc3l6a2FsbGVyLCBvciBmb3IgYW55IFNESU8gZnV6emluZyBkcml2ZXJzLCBidXQgSSBhbSBhbG1vc3QgY2VydGFpbiBJIHdvdWxkIGZpbmQgbm90aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NDAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6NTk6MDAuNzIzMjQ1NzUxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjA3ODY5MzcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNkaW8uKmZ1enpcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA3OjU5OjAzLjM0NDA0MjczOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NjM5ODk1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgU0RJTyBIb3N0IFNvZnR3YXJlIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHNvZnR3YXJlIFNESU8gaG9zdCBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgbGlrZWx5IHRoZSBgZHJpdmVycy9tbWMvY29yZS9gIGRpcmVjdG9yeS4gVGhhdCdzIHRoZSBjb21tb24gZ3JvdW5kIGZvciBNTUMgYW5kIFNELXJlbGF0ZWQgY29kZSwgc28gaXQncyB0aGUgbmF0dXJhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgY29yZSBTRElPIGhvc3QgZHJpdmVycy4gSSdsbCBpbml0aWF0ZSBhIHNlYXJjaCBmb3IgYHNkaW9gIHdpdGhpbiB0aGF0IGRpcmVjdG9yeSwgdXNpbmcgbXkgcHJlZmVycmVkIHNlYXJjaCB0b29scywgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcy4gVGhpcyBzaG91bGQgcXVpY2tseSByZXZlYWwgaWYgYW5kIHdoZXJlIHRoZSBrZXJuZWwgaGFuZGxlcyBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIFNESU8gaG9zdC4gSSdtIGV4cGVjdGluZyB0byB1bmNvdmVyIHJlbGV2YW50IGRyaXZlcnMsIHByb2JhYmx5IHdpdGggbmFtZXMgdGhhdCBnaXZlIGNsdWVzIGFib3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIG9yIGJ1cyBpbnRlcmZhY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDMzMiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA3OjU5OjA3LjMwODAzNDY0MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzMyNzgzNDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNkaW8uKmR1bW15XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYz04Mj1zdGF0aWMgdm9pZCBicmNtZl9zZGlvZF9pYl9pcnFoYW5kbGVyKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtOTItLyogZHVtbXkgaGFuZGxlciBmb3IgU0RJTyBmdW5jdGlvbiAyIGludGVycnVwdCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzo5MzpzdGF0aWMgdm9pZCBicmNtZl9zZGlvZF9kdW1teV9pcnFoYW5kbGVyKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTk0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYz05Nz1pbnQgYnJjbWZfc2Rpb2RfaW50cl9yZWdpc3RlcihzdHJ1Y3QgYnJjbWZfc2Rpb19kZXYgKnNkaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtMTU5LVxcdFxcdHNkaW9fY2xhaW1faXJxKHNkaW9kZXYtXFx1MDAzZWZ1bmMxLCBicmNtZl9zZGlvZF9pYl9pcnFoYW5kbGVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6MTYwOlxcdFxcdHNkaW9fY2xhaW1faXJxKHNkaW9kZXYtXFx1MDAzZWZ1bmMyLCBicmNtZl9zZGlvZF9kdW1teV9pcnFoYW5kbGVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtMTYxLVxcdFxcdHNkaW9fcmVsZWFzZV9ob3N0KHNkaW9kZXYtXFx1MDAzZWZ1bmMxKTtcXG4tLVxcbmRyaXZlcnMvcGluY3RybC9tZXNvbi9waW5jdHJsLW1lc29uLWcxMmEuYz0xMDAxPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2Rpb19ncm91cHNbXSA9IHtcXG5kcml2ZXJzL3BpbmN0cmwvbWVzb24vcGluY3RybC1tZXNvbi1nMTJhLmMtMTAwMi1cXHRcXFwic2Rpb19kMFxcXCIsIFxcXCJzZGlvX2QxXFxcIiwgXFxcInNkaW9fZDJcXFwiLCBcXFwic2Rpb19kM1xcXCIsXFxuZHJpdmVycy9waW5jdHJsL21lc29uL3BpbmN0cmwtbWVzb24tZzEyYS5jOjEwMDM6XFx0XFxcInNkaW9fY21kXFxcIiwgXFxcInNkaW9fY2xrXFxcIiwgXFxcInNkaW9fZHVtbXlcXFwiLFxcbmRyaXZlcnMvcGluY3RybC9tZXNvbi9waW5jdHJsLW1lc29uLWcxMmEuYy0xMDA0LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA3OjU5OjA5LjY0MDg0OTE0OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyOTE2ODYzNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogVGhpcyBQYXRjaCBpcyBVbmZ1enphYmxlIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgaXQncyBwcmV0dHkgY2xlYXIgd2UgaGF2ZSBhIHByb2JsZW0uIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgdmlydHVhbCBTRElPIGhvc3QgY29udHJvbGxlciBhdmFpbGFibGUgZm9yIGZ1enppbmcsIHdoaWNoIGlzIHRoZSBmaXJzdCBodXJkbGUuIEJ1dCBldmVuIGlmIHdlIGNvdWxkIHNvbWVob3cgY29uanVyZSBvbmUgdXAsIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgUmVhbHRlayBgcnR3ODhgIFdpLUZpIGRyaXZlciBoZXJlLiBJdCdzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCAqc3BlY2lmaWMqIFJlYWx0ZWsgaGFyZHdhcmUgb24gdGhlIFNESU8gYnVzLiBUaGF0IG1lYW5zIHRoZSBkcml2ZXIncyBgcHJvYmVgIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkIHdpdGhvdXQgdGhhdCBoYXJkd2FyZSBwcmVzZW50LiBUaGVyZWZvcmUsIG5vbmUgb2YgdGhpcyBjb2RlIHdpbGwgZXZlbiBleGVjdXRlIGluIG91ciB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50LlxuXG5BbmQgZXZlbiBpZiB3ZSBjb3VsZCBpbmplY3QgKnNvbWUqIFNESU8gZGV2aWNlcywgd2UncmUgc3RpbGwgc3R1Y2sgd2l0aCBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIuIFRoYXQgcHJvbXB0cyB0aGlzIHBhcnRpY3VsYXIgcXVlc3Rpb246IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHRoYXQgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsXCIgd2hpY2gsIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbiwgZXhwbGljaXRseSBpbmNsdWRlcyB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyB0aGF0IHJlbHkgb24gcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCdzIG5vdCBlbXVsYXRlZC5cblxuU28sIHJlYWxpc3RpY2FsbHksIHdlJ3JlIG5vdCBnb2luZyB0byBiZSBhYmxlIHRvIG1ha2UgdXNlIG9mIHRoaXMgY29kZSB0byBmdXp6LiBCZWZvcmUgSSB3cml0ZSB0aGlzIG9mZiBjb21wbGV0ZWx5IEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0byBiZSBzdXJlIHRoYXQgYHJ0dzg4YCBoYXMgYSBzb2Z0d2FyZSBlbXVsYXRpb24gbW9kZS4gSWYgaXQgZG9lcywgdGhlcmUncyBhIGNoYW5jZS4gSWYgbm90LCB0aGlzIGlzIGRlZmluaXRlbHkgYSBkZWFkIGVuZCBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNjQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6NTk6MTUuOTMyNTM4OTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4OTY5NzUzNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnR3ODguKmVtdWxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDA3OjU5OjE4LjIyMjI0NjkwN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NzIyNTAyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIHJ0dzg4IFNESU8gUHJvYmUgRnVuY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgcHJvYmUgZnVuY3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgU0RJTyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBmb3IgdGhlIHJ0dzg4IHNlcmllcy4gTXkgbWFpbiBhcmVhcyBvZiBpbnRlcmVzdCBhcmUsIG9mIGNvdXJzZSwgdGhlIHJlc291cmNlIGFsbG9jYXRpb24sIHRoZSBwbGF0Zm9ybSBkcml2ZXIgc2V0dXAsIGFuZCB0aGUgc3Vic2VxdWVudCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgU0RJTyBidXMuIEkgd2FudCB0byBzZWUgaG93IHRoZXkgaGFuZGxlIHRoZSBjYXJkIGRldGVjdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uIFRoaW5ncyBsaWtlIHBvd2VyIG1hbmFnZW1lbnQgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0aGUgaW5pdGlhbCBicmluZy11cCBhbHdheXMgY2F0Y2ggbXkgZXllLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZXkncmUgaGFuZGxpbmcgaW50ZXJydXB0cyBjb3JyZWN0bHkgYW5kLCBpZiBhcHBsaWNhYmxlLCB0aGUgYXNzb2NpYXRlZCBpbnRlcnJ1cHQgbWFza2luZy91bm1hc2tpbmcuIExldCdzIHNlZSBob3cgdGhleSBkZWFsIHdpdGggYW55IFNESU8gc3BlY2lmaWMgcXVpcmtzIOKAkyBSZWFsdGVrIGFsd2F5cyBzZWVtcyB0byBoYXZlIGEgZmV3IG9mIHRob3NlLiBUaW1lIHRvIGFuYWx5emUgdGhlIGNvZGUgY2FyZWZ1bGx5IGFuZCBjb25maXJtIGl0IGFsaWducyB3aXRoIHRoZSBkZXNpZ24gSSByZW1lbWJlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3MjksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzo1OToyMy4wOTQ0OTk0NjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjQ0NDU4OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnR3X3NkaW9fcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzY3MuYz0yMT1zdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHJ0d184NzIzY3NfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzY3MuYy0yMy1cXHQuaWRfdGFibGUgPSBydHdfODcyM2NzX2lkX3RhYmxlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODcyM2NzLmM6MjQ6XFx0LnByb2JlID0gcnR3X3NkaW9fcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzY3MuYy0yNS1cXHQucmVtb3ZlID0gcnR3X3NkaW9fcmVtb3ZlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzZHMuYz0yNz1zdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHJ0d184NzIzZHNfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODcyM2RzLmMtMjgtXFx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNkcy5jOjI5OlxcdC5wcm9iZSA9IHJ0d19zZGlvX3Byb2JlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODcyM2RzLmMtMzAtXFx0LnJlbW92ZSA9IHJ0d19zZGlvX3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMWNzLmM9MjI9c3RhdGljIHN0cnVjdCBzZGlvX2RyaXZlciBydHdfODgyMWNzX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjFjcy5jLTIzLVxcdC5uYW1lID0gS0JVSUxEX01PRE5BTUUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIxY3MuYzoyNDpcXHQucHJvYmUgPSBydHdfc2Rpb19wcm9iZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjFjcy5jLTI1LVxcdC5yZW1vdmUgPSBydHdfc2Rpb19yZW1vdmUsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJicy5jPTIyPXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnR3Xzg4MjJic19kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyYnMuYy0yMy1cXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmJzLmM6MjQ6XFx0LnByb2JlID0gcnR3X3NkaW9fcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyYnMuYy0yNS1cXHQucmVtb3ZlID0gcnR3X3NkaW9fcmVtb3ZlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyY3MuYz0yMj1zdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHJ0d184ODIyY3NfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmNzLmMtMjMtXFx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJjcy5jOjI0OlxcdC5wcm9iZSA9IHJ0d19zZGlvX3Byb2JlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmNzLmMtMjUtXFx0LnJlbW92ZSA9IHJ0d19zZGlvX3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jPTE3MjQ9c3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYy0xNzM2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jOjE3Mzc6aW50IHJ0d19zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYy0xNzM4LVxcdFxcdCAgIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYy0xODExLX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYzoxODEyOkVYUE9SVF9TWU1CT0wocnR3X3NkaW9fcHJvYmUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jLTE4MTMtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaD0xODQ9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJ0d19zZGlvX3BtX29wcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaC0xODUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmg6MTg2OmludCBydHdfc2Rpb19wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2Z1bmMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmgtMTg3LVxcdFxcdCAgIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCAqaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwNzo1OToyNC42NTg5NTE5MThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODUyMjkxNjczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTRElPIFdpLUZpIERyaXZlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIFNESU8gV2ktRmkgZHJpdmVyLCBJJ3ZlIGNvbWUgdG8gYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNvbmNsdXNpb24uIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBSZWFsdGVrIDg3MjNCUyBTRElPIG1vZHVsZS4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUgZGVwZW5kZW5jaWVzLiBBbmQsIGNyaXRpY2FsbHksIHRoZSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LCBvciBldmVuIHNvbWV0aGluZyBsaWtlIEdDRSwgaXNuJ3QgZ29pbmcgdG8gZW11bGF0ZSB0aGF0IHNwZWNpZmljIGhhcmR3YXJlLlxuXG5TbywgcmVhbGlzdGljYWxseSwgYW55IGNvZGUgcGF0aHMgdGhpcyBwYXRjaCB0b3VjaGVzIGFyZSAqY29tcGxldGVseSogdW5yZWFjaGFibGUgaW4gYW55IHZpcnR1YWxpemVkIHNldHVwLiBZb3UgY2FuJ3QgZXhlY3V0ZSB0aGlzIGNvZGUgd2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgcHJlc2VudC4gVGhlcmVmb3JlLCBjb25zaWRlcmluZyB0aGUgbGltaXRhdGlvbnMgb2Ygb3VyIGZ1enppbmcgZW52aXJvbm1lbnQsIEknbSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuIEl0J3MgYSB3YXN0ZSBvZiByZXNvdXJjZXMgdG8gZGVkaWNhdGUgdGltZSB0byB0aGlzIHBhdGNoIHJpZ2h0IG5vdy4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGFjdHVhbGx5ICpyZWFjaCogdGhlIG1vZGlmaWVkIGNvZGUgdG8gbWFrZSBmdXp6aW5nIGVmZmVjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyNTcsIk91dHB1dFRva2VucyI6MTI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6NTk6MzMuMTgxODcxMzg0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJlYWx0ZWsgcnR3ODggV2ktRmkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYWRkaW5nIHN1cHBvcnQgYW5kIGZpeGluZyBsb2dpYyBmb3IgdGhlIFJUTDg3MjNCUyBTRElPIG1vZHVsZS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBhIHBoeXNpY2FsIFNESU8gV2ktRmkgY2hpcCB0byBiZSBwcmVzZW50LiBTaW5jZSBTRElPIGhhcmR3YXJlIGFuZCB0aGlzIHNwZWNpZmljIFJlYWx0ZWsgY2hpcCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cywgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJlYWx0ZWsgcnR3ODggV2ktRmkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYWRkaW5nIHN1cHBvcnQgYW5kIGZpeGluZyBsb2dpYyBmb3IgdGhlIFJUTDg3MjNCUyBTRElPIG1vZHVsZS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBhIHBoeXNpY2FsIFNESU8gV2ktRmkgY2hpcCB0byBiZSBwcmVzZW50LiBTaW5jZSBTRElPIGhhcmR3YXJlIGFuZCB0aGlzIHNwZWNpZmljIFJlYWx0ZWsgY2hpcCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cywgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIGZ1enogaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDc6NTk6MzMuMTgxOTEwMDc0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowkvr4x[1] Phase: Running StartedAt: 2026-08-19 07:59:44 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkvr4x[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-19 07:59:44 +0000 UTC FinishedAt: 2026-08-19 07:59:48 +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,}