Name: series-workflowf52tw Phase: Failed StartedAt: 2026-06-22 11:17:04 +0000 UTC FinishedAt: 2026-06-22 11:25:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf52tw[0] Phase: Succeeded StartedAt: 2026-06-22 11:17:04 +0000 UTC FinishedAt: 2026-06-22 11:24:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf52tw[0].run-triage Phase: Succeeded StartedAt: 2026-06-22 11:17:04 +0000 UTC FinishedAt: 2026-06-22 11:24:53 +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+CgkJCTx0ZD4yMDI2LzA2LzIyIDExOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IGludHJvZHVjZXMgdHlwZS1zYWZlIG1hY3JvcyAoS0hPU0VSX0NPUFlfVFlQRVNBRkUsIEtIT1NFUl9MT0FEX1BUUiwgZXRjLikgZm9yIHNlcmlhbGl6aW5nIGFuZCBkZXNlcmlhbGl6aW5nIHBvaW50ZXJzIGluIHRoZSBsaXZldXBkYXRlL2tleGVjX2hhbmRvdmVyIHN1YnN5c3RlbS4gSXQgcmVwbGFjZXMgcmF3IHU2NCBmaWVsZHMgd2l0aCBhIHVuaW9uIGFuZCB1cGRhdGVzIHRoZSBhc3NpZ25tZW50cyB0byB1c2UgdGhlIG5ldyBtYWNyb3MuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGxvZ2ljIHRoYXQgd291bGQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxMToyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY4MmQwNzc1ZjY5NmY0MzUxYTZmZjY3Njc4MzdiMWNlYjcxZTdlNzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAxMToyNDowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaCBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9rZXhlY19oYW5kb3Zlci5oXG5pbmRleCA1ZTJlYjg1MTliZGE2ZC4uNjE4NDA4ZmJlOWM5MWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmhcbkBAIC0xMzksNiAmIzQzOzEzOSwxOCBAQFxuIFx0XHQodHlwZW9mKChzKS5wdHIpKSgocykucGh5cyA/IHBoeXNfdG9fdmlydCgocykucGh5cykgOiBOVUxMKTsgXFxcbiBcdH0pXG4gXG4mIzQzOy8qIENvcGllcyBvbmUgc2VyaWFsaXphYmxlIHBvaW50ZXIgdG8gYW5vdGhlciBvZiBzYW1lIHR5cGUuICovXG4mIzQzOyNkZWZpbmUgS0hPU0VSX0NPUFlfVFlQRVNBRkUoZGVzdCwgc3JjKSBcXFxuJiM0MztcdCh7IFxcXG4mIzQzO1x0XHR0eXBlY2hlY2sodHlwZW9mKChkZXN0KS5wdHIpLCAoc3JjKS5wdHIpOyBcXFxuJiM0MztcdFx0KGRlc3QpLnBoeXMgPSAoc3JjKS5waHlzOyBcXFxuJiM0MztcdH0pXG4mIzQzO1xuJiM0MzsvKiBDb3BpZXMgb25lIHNlcmlhbGl6YWJsZSBwb2ludGVyIHRvIGFub3RoZXIuICovXG4mIzQzOyNkZWZpbmUgS0hPU0VSX0NPUFlfVFlQRVVOU0FGRShkZXN0LCBzcmMpIFxcXG4mIzQzO1x0KHsgXFxcbiYjNDM7XHRcdChkZXN0KS5waHlzID0gKHNyYykucGh5czsgXFxcbiYjNDM7XHR9KVxuIC8qXG4gICogVGhpcyBoZWFkZXIgaXMgZW1iZWRkZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGBraG9fdm1hbGxvY19jaHVua2BcbiAgKiBhbmQgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IGNodW5rIGluIHRoZSBsaW5rZWQgbGlzdCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2toby9hYmkvbHVvLmggYi9pbmNsdWRlL2xpbnV4L2toby9hYmkvbHVvLmhcbmluZGV4IDI4ODA3NmRlNmQ0YTA5Li5kNWIzYjFjMGZlYzEyYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva2hvL2FiaS9sdW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9raG8vYWJpL2x1by5oXG5AQCAtNTksNiAmIzQzOzU5LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hbGlnbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2hvL2FiaS9ibG9jay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbGl2ZXVwZGF0ZS5oXHUwMDNlXG4gXG4gLypcbkBAIC04OSwxNCAmIzQzOzkwLDE0IEBAIHN0cnVjdCBsdW9fc2VyIHtcbiAvKipcbiAgKiBzdHJ1Y3QgbHVvX2ZpbGVfc2VyIC0gUmVwcmVzZW50cyB0aGUgc2VyaWFsaXplZCBwcmVzZXJ2ZXMgZmlsZXMuXG4gICogQGNvbXBhdGlibGU6ICBGaWxlIGhhbmRsZXIgY29tcGF0aWJsZSBzdHJpbmcuXG4tICogQGRhdGE6ICAgICAgICBQcml2YXRlIGRhdGFcbiYjNDM7ICogQHNlcmlhbGl6ZWRfZGF0YTogIFRoZSBzZXJpYWxpemVkIHBvaW50ZXIgdW5pb24gZm9yIHRoaXMgZmlsZVxuICAqIEB0b2tlbjogICAgICAgVXNlciBwcm92aWRlZCB0b2tlbiBmb3IgdGhpcyBmaWxlXG4gICpcbiAgKiBJZiB0aGlzIHN0cnVjdHVyZSBpcyBtb2RpZmllZCwgYExVT19BQklfQ09NUEFUSUJMRWAgbXVzdCBiZSB1cGRhdGVkLlxuICAqL1xuIHN0cnVjdCBsdW9fZmlsZV9zZXIge1xuIFx0Y2hhciBjb21wYXRpYmxlW0xJVkVVUERBVEVfSE5ETF9DT01QQVRfTEVOR1RIXTtcbi1cdHU2NCBkYXRhO1xuJiM0MztcdERFQ0xBUkVfS0hPU0VSX1BUUihzZXJpYWxpemVkX2RhdGEsIHZvaWQgKik7XG4gXHR1NjQgdG9rZW47XG4gfSBfX3BhY2tlZDtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oXG5pbmRleCA4ODcyMmU1Y2FmMDIwYi4uNDgwZDYzOGI3ZDE4YzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmhcbkBAIC0zMyw3ICYjNDM7MzMsNyBAQCBzdHJ1Y3QgZmlsZTtcbiAgKiBAZmlsZTogICAgICAgICAgICAgVGhlIGZpbGUgb2JqZWN0LiBGb3IgcmV0cmlldmU6IFtPVVRdIFRoZSBjYWxsYmFjayBzZXRzXG4gICogICAgICAgICAgICAgICAgICAgIHRoaXMgdG8gdGhlIG5ldyBmaWxlLiBGb3Igb3RoZXIgb3BzOiBbSU5dIFRoZSBjYWxsZXIgc2V0c1xuICAqICAgICAgICAgICAgICAgICAgICB0aGlzIHRvIHRoZSBmaWxlIGJlaW5nIG9wZXJhdGVkIG9uLlxuLSAqIEBzZXJpYWxpemVkX2RhdGE6ICBUaGUgb3BhcXVlIHU2NCBoYW5kbGUsIHByZXNlcnZlL3ByZXBhcmUvZnJlZXplIG1heSB1cGRhdGVcbiYjNDM7ICogQHNlcmlhbGl6ZWRfZGF0YTogIFRoZSBzZXJpYWxpemVkIHBvaW50ZXIgdW5pb24sIHByZXNlcnZlL3ByZXBhcmUvZnJlZXplIG1heSB1cGRhdGVcbiAgKiAgICAgICAgICAgICAgICAgICAgdGhpcyBmaWVsZC5cbiAgKiBAcHJpdmF0ZV9kYXRhOiAgICAgUHJpdmF0ZSBkYXRhIGZvciB0aGUgZmlsZSB1c2VkIHRvIGhvbGQgcnVudGltZSBzdGF0ZSB0aGF0XG4gICogICAgICAgICAgICAgICAgICAgIGlzIG5vdCBwcmVzZXJ2ZWQuIFNldCBieSB0aGUgaGFuZGxlciYjMzk7cyAucHJlc2VydmUoKVxuQEAgLTQ3LDcgJiM0Mzs0Nyw3IEBAIHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyB7XG4gXHRzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmhhbmRsZXI7XG4gXHRpbnQgcmV0cmlldmVfc3RhdHVzO1xuIFx0c3RydWN0IGZpbGUgKmZpbGU7XG4tXHR1NjQgc2VyaWFsaXplZF9kYXRhO1xuJiM0MztcdERFQ0xBUkVfS0hPU0VSX1BUUihzZXJpYWxpemVkX2RhdGEsIHZvaWQgKik7XG4gXHR2b2lkICpwcml2YXRlX2RhdGE7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jIGIva2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuY1xuaW5kZXggYzM5Zjk2OTYxYTg1YmUuLjc5Y2ZhNTIwMTg5OTExIDEwMDY0NFxuLS0tIGEva2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuY1xuQEAgLTEyNSw3ICYjNDM7MTI1LDcgQEAgc3RhdGljIERFRklORV9YQVJSQVkobHVvX3ByZXNlcnZlZF9maWxlcyk7XG4gICogQGZpbGU6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGtlcm5lbCYjMzk7cyBcdTAwMjZzdHJ1Y3QgZmlsZSB0aGF0IGlzIGJlaW5nIHByZXNlcnZlZC5cbiAgKiAgICAgICAgICAgICAgICAgVGhpcyBpcyBOVUxMIGluIHRoZSBuZXcga2VybmVsIHVudGlsIHRoZSBmaWxlIGlzIHN1Y2Nlc3NmdWxseVxuICAqICAgICAgICAgICAgICAgICByZXRyaWV2ZWQuXG4tICogQHNlcmlhbGl6ZWRfZGF0YTogVGhlIG9wYXF1ZSB1NjQgaGFuZGxlIHRvIHRoZSBzZXJpYWxpemVkIHN0YXRlIG9mIHRoZSBmaWxlLlxuJiM0MzsgKiBAc2VyaWFsaXplZF9kYXRhOiBUaGUgc2VyaWFsaXplZCBwb2ludGVyIHVuaW9uIHRvIHRoZSBzZXJpYWxpemVkIHN0YXRlIG9mIHRoZSBmaWxlLlxuICAqICAgICAgICAgICAgICAgICBUaGlzIGhhbmRsZSBpcyBwYXNzZWQgYmFjayB0byB0aGUgaGFuZGxlciYjMzk7cyAuZnJlZXplKCksXG4gICogICAgICAgICAgICAgICAgIC5yZXRyaWV2ZSgpLCBhbmQgLmZpbmlzaCgpIGNhbGxiYWNrcywgYWxsb3dpbmcgaXQgdG8gdHJhY2tcbiAgKiAgICAgICAgICAgICAgICAgYW5kIHVwZGF0ZSBpdHMgc2VyaWFsaXplZCBzdGF0ZSBhY3Jvc3MgcGhhc2VzLlxuQEAgLTE2MSw3ICYjNDM7MTYxLDcgQEAgc3RhdGljIERFRklORV9YQVJSQVkobHVvX3ByZXNlcnZlZF9maWxlcyk7XG4gc3RydWN0IGx1b19maWxlIHtcbiBcdHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmg7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbi1cdHU2NCBzZXJpYWxpemVkX2RhdGE7XG4mIzQzO1x0REVDTEFSRV9LSE9TRVJfUFRSKHNlcmlhbGl6ZWRfZGF0YSwgdm9pZCAqKTtcbiBcdHZvaWQgKnByaXZhdGVfZGF0YTtcbiBcdGludCByZXRyaWV2ZV9zdGF0dXM7XG4gXHRzdHJ1Y3QgbXV0ZXggbXV0ZXg7XG5AQCAtMjg5LDcgJiM0MzsyODksNyBAQCBpbnQgbHVvX3ByZXNlcnZlX2ZpbGUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsIHU2NCB0b2tlbiwgaW50IGZkKVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfa2ZyZWU7XG4gXG4tXHRsdW9fZmlsZS1cdTAwM2VzZXJpYWxpemVkX2RhdGEgPSBhcmdzLnNlcmlhbGl6ZWRfZGF0YTtcbiYjNDM7XHRLSE9TRVJfQ09QWV9UWVBFU0FGRShsdW9fZmlsZS1cdTAwM2VzZXJpYWxpemVkX2RhdGEsIGFyZ3Muc2VyaWFsaXplZF9kYXRhKTtcbiBcdGx1b19maWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IGFyZ3MucHJpdmF0ZV9kYXRhO1xuIFx0bGlzdF9hZGRfdGFpbChcdTAwMjZsdW9fZmlsZS1cdTAwM2VsaXN0LCBcdTAwMjZmaWxlX3NldC1cdTAwM2VmaWxlc19saXN0KTtcbiBcdGZpbGVfc2V0LVx1MDAzZWNvdW50JiM0MzsmIzQzOztcbkBAIC0zNDIsNyAmIzQzOzM0Miw3IEBAIHZvaWQgbHVvX2ZpbGVfdW5wcmVzZXJ2ZV9maWxlcyhzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldClcbiBcbiBcdFx0YXJncy5oYW5kbGVyID0gbHVvX2ZpbGUtXHUwMDNlZmg7XG4gXHRcdGFyZ3MuZmlsZSA9IGx1b19maWxlLVx1MDAzZWZpbGU7XG4tXHRcdGFyZ3Muc2VyaWFsaXplZF9kYXRhID0gbHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhO1xuJiM0MztcdFx0S0hPU0VSX0NPUFlfVFlQRVNBRkUoYXJncy5zZXJpYWxpemVkX2RhdGEsIGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XG4gXHRcdGFyZ3MucHJpdmF0ZV9kYXRhID0gbHVvX2ZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0XHRsdW9fZmlsZS1cdTAwM2VmaC1cdTAwM2VvcHMtXHUwMDNldW5wcmVzZXJ2ZShcdTAwMjZhcmdzKTtcbiBcdFx0bHVvX2ZsYl9maWxlX3VucHJlc2VydmUobHVvX2ZpbGUtXHUwMDNlZmgpO1xuQEAgLTM3NSwxMiAmIzQzOzM3NSwxMiBAQCBzdGF0aWMgaW50IGx1b19maWxlX2ZyZWV6ZV9vbmUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsXG4gXG4gXHRcdGFyZ3MuaGFuZGxlciA9IGx1b19maWxlLVx1MDAzZWZoO1xuIFx0XHRhcmdzLmZpbGUgPSBsdW9fZmlsZS1cdTAwM2VmaWxlO1xuLVx0XHRhcmdzLnNlcmlhbGl6ZWRfZGF0YSA9IGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YTtcbiYjNDM7XHRcdEtIT1NFUl9DT1BZX1RZUEVTQUZFKGFyZ3Muc2VyaWFsaXplZF9kYXRhLCBsdW9fZmlsZS1cdTAwM2VzZXJpYWxpemVkX2RhdGEpO1xuIFx0XHRhcmdzLnByaXZhdGVfZGF0YSA9IGx1b19maWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcbiBcdFx0ZXJyID0gbHVvX2ZpbGUtXHUwMDNlZmgtXHUwMDNlb3BzLVx1MDAzZWZyZWV6ZShcdTAwMjZhcmdzKTtcbiBcdFx0aWYgKCFlcnIpXG4tXHRcdFx0bHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhID0gYXJncy5zZXJpYWxpemVkX2RhdGE7XG4mIzQzO1x0XHRcdEtIT1NFUl9DT1BZX1RZUEVTQUZFKGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSwgYXJncy5zZXJpYWxpemVkX2RhdGEpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGVycjtcbkBAIC0zOTYsNyAmIzQzOzM5Niw3IEBAIHN0YXRpYyB2b2lkIGx1b19maWxlX3VuZnJlZXplX29uZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCxcbiBcbiBcdFx0YXJncy5oYW5kbGVyID0gbHVvX2ZpbGUtXHUwMDNlZmg7XG4gXHRcdGFyZ3MuZmlsZSA9IGx1b19maWxlLVx1MDAzZWZpbGU7XG4tXHRcdGFyZ3Muc2VyaWFsaXplZF9kYXRhID0gbHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhO1xuJiM0MztcdFx0S0hPU0VSX0NPUFlfVFlQRVNBRkUoYXJncy5zZXJpYWxpemVkX2RhdGEsIGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XG4gXHRcdGFyZ3MucHJpdmF0ZV9kYXRhID0gbHVvX2ZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFxuIFx0XHRsdW9fZmlsZS1cdTAwM2VmaC1cdTAwM2VvcHMtXHUwMDNldW5mcmVlemUoXHUwMDI2YXJncyk7XG5AQCAtNDgzLDcgJiM0Mzs0ODMsNyBAQCBpbnQgbHVvX2ZpbGVfZnJlZXplKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LFxuIFxuIFx0XHRzdHJzY3B5KGZpbGVfc2VyLVx1MDAzZWNvbXBhdGlibGUsIGx1b19maWxlLVx1MDAzZWZoLVx1MDAzZWNvbXBhdGlibGUsXG4gXHRcdFx0c2l6ZW9mKGZpbGVfc2VyLVx1MDAzZWNvbXBhdGlibGUpKTtcbi1cdFx0ZmlsZV9zZXItXHUwMDNlZGF0YSA9IGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YTtcbiYjNDM7XHRcdEtIT1NFUl9DT1BZX1RZUEVTQUZFKGZpbGVfc2VyLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSwgbHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbiBcdFx0ZmlsZV9zZXItXHUwMDNldG9rZW4gPSBsdW9fZmlsZS1cdTAwM2V0b2tlbjtcbiBcdH1cbiBcbkBAIC01ODcsNyAmIzQzOzU4Nyw3IEBAIGludCBsdW9fcmV0cmlldmVfZmlsZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCwgdTY0IHRva2VuLFxuIFx0fVxuIFxuIFx0YXJncy5oYW5kbGVyID0gbHVvX2ZpbGUtXHUwMDNlZmg7XG4tXHRhcmdzLnNlcmlhbGl6ZWRfZGF0YSA9IGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YTtcbiYjNDM7XHRLSE9TRVJfQ09QWV9UWVBFU0FGRShhcmdzLnNlcmlhbGl6ZWRfZGF0YSwgbHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbiBcdGVyciA9IGx1b19maWxlLVx1MDAzZWZoLVx1MDAzZW9wcy1cdTAwM2VyZXRyaWV2ZShcdTAwMjZhcmdzKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0LyogS2VlcCB0aGUgZXJyb3IgY29kZSBmb3IgbGF0ZXIgdXNlLiAqL1xuQEAgLTYyMSw3ICYjNDM7NjIxLDcgQEAgc3RhdGljIGludCBsdW9fZmlsZV9jYW5fZmluaXNoX29uZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCxcbiBcbiBcdFx0YXJncy5oYW5kbGVyID0gbHVvX2ZpbGUtXHUwMDNlZmg7XG4gXHRcdGFyZ3MuZmlsZSA9IGx1b19maWxlLVx1MDAzZWZpbGU7XG4tXHRcdGFyZ3Muc2VyaWFsaXplZF9kYXRhID0gbHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhO1xuJiM0MztcdFx0S0hPU0VSX0NPUFlfVFlQRVNBRkUoYXJncy5zZXJpYWxpemVkX2RhdGEsIGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XG4gXHRcdGFyZ3MucmV0cmlldmVfc3RhdHVzID0gbHVvX2ZpbGUtXHUwMDNlcmV0cmlldmVfc3RhdHVzO1xuIFx0XHRjYW5fZmluaXNoID0gbHVvX2ZpbGUtXHUwMDNlZmgtXHUwMDNlb3BzLVx1MDAzZWNhbl9maW5pc2goXHUwMDI2YXJncyk7XG4gXHR9XG5AQCAtNjM4LDcgJiM0Mzs2MzgsNyBAQCBzdGF0aWMgdm9pZCBsdW9fZmlsZV9maW5pc2hfb25lKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LFxuIFxuIFx0YXJncy5oYW5kbGVyID0gbHVvX2ZpbGUtXHUwMDNlZmg7XG4gXHRhcmdzLmZpbGUgPSBsdW9fZmlsZS1cdTAwM2VmaWxlO1xuLVx0YXJncy5zZXJpYWxpemVkX2RhdGEgPSBsdW9fZmlsZS1cdTAwM2VzZXJpYWxpemVkX2RhdGE7XG4mIzQzO1x0S0hPU0VSX0NPUFlfVFlQRVNBRkUoYXJncy5zZXJpYWxpemVkX2RhdGEsIGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XG4gXHRhcmdzLnJldHJpZXZlX3N0YXR1cyA9IGx1b19maWxlLVx1MDAzZXJldHJpZXZlX3N0YXR1cztcbiBcbiBcdGx1b19maWxlLVx1MDAzZWZoLVx1MDAzZW9wcy1cdTAwM2VmaW5pc2goXHUwMDI2YXJncyk7XG5AQCAtNzQ4LDcgJiM0Mzs3NDgsNyBAQCBzdGF0aWMgaW50IGx1b19maWxlX2Rlc2VyaWFsaXplX29uZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCxcbiBcbiBcdGx1b19maWxlLVx1MDAzZWZoID0gZmg7XG4gXHRsdW9fZmlsZS1cdTAwM2VmaWxlID0gTlVMTDtcbi1cdGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSA9IHNlci1cdTAwM2VkYXRhO1xuJiM0MztcdEtIT1NFUl9DT1BZX1RZUEVTQUZFKGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSwgc2VyLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XG4gXHRsdW9fZmlsZS1cdTAwM2V0b2tlbiA9IHNlci1cdTAwM2V0b2tlbjtcbiBcdG11dGV4X2luaXQoXHUwMDI2bHVvX2ZpbGUtXHUwMDNlbXV0ZXgpO1xuIFx0bGlzdF9hZGRfdGFpbChcdTAwMjZsdW9fZmlsZS1cdTAwM2VsaXN0LCBcdTAwMjZmaWxlX3NldC1cdTAwM2VmaWxlc19saXN0KTtcbmRpZmYgLS1naXQgYS9tbS9tZW1mZF9sdW8uYyBiL21tL21lbWZkX2x1by5jXG5pbmRleCA1OWRlMjEwYmVlNWY5ZS4uZGFmMmM0YzNkYTM1ZjMgMTAwNjQ0XG4tLS0gYS9tbS9tZW1mZF9sdW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtZmRfbHVvLmNcbkBAIC0yNTcsNiAmIzQzOzI1Nyw3IEBAIHN0YXRpYyB2b2lkIG1lbWZkX2x1b191bnByZXNlcnZlX2ZvbGlvcyhzdHJ1Y3Qga2hvX3ZtYWxsb2MgKmtob192bWFsbG9jLFxuIFxuIHN0YXRpYyBpbnQgbWVtZmRfbHVvX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcbiB7XG4mIzQzO1x0REVDTEFSRV9LSE9TRVJfUFRSKHNkLCBzdHJ1Y3QgbWVtZmRfbHVvX3NlciAqKTtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGFyZ3MtXHUwMDNlZmlsZSk7XG4gXHRzdHJ1Y3QgbWVtZmRfbHVvX2ZvbGlvX3NlciAqZm9saW9zX3NlcjtcbiBcdHN0cnVjdCBtZW1mZF9sdW9fc2VyICpzZXI7XG5AQCAtMzA5LDcgJiM0MzszMTAsOCBAQCBzdGF0aWMgaW50IG1lbWZkX2x1b19wcmVzZXJ2ZShzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3MgKmFyZ3MpXG4gXHRpbm9kZV91bmxvY2soaW5vZGUpO1xuIFxuIFx0YXJncy1cdTAwM2Vwcml2YXRlX2RhdGEgPSBmb2xpb3Nfc2VyO1xuLVx0YXJncy1cdTAwM2VzZXJpYWxpemVkX2RhdGEgPSB2aXJ0X3RvX3BoeXMoc2VyKTtcbiYjNDM7XHRLSE9TRVJfU1RPUkVfUFRSKHNkLCBzZXIpO1xuJiM0MztcdEtIT1NFUl9DT1BZX1RZUEVVTlNBRkUoYXJncy1cdTAwM2VzZXJpYWxpemVkX2RhdGEsIHNkKTtcbiBcbiBcdHJldHVybiAwO1xuIFxuQEAgLTMyNSwxMSAmIzQzOzMyNywxMCBAQCBzdGF0aWMgaW50IG1lbWZkX2x1b19mcmVlemUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxuIHtcbiBcdHN0cnVjdCBtZW1mZF9sdW9fc2VyICpzZXI7XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFhcmdzLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSkpXG4mIzQzO1x0c2VyID0gS0hPU0VSX0xPQURfUFRSKGFyZ3MtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCFzZXIpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHNlciA9IHBoeXNfdG9fdmlydChhcmdzLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XG4tXG4gXHQvKlxuIFx0ICogVGhlIHBvcyBtaWdodCBoYXZlIGNoYW5nZWQgc2luY2UgcHJlcGFyZS4gRXZlcnl0aGluZyBlbHNlIHN0YXlzIHRoZVxuIFx0ICogc2FtZS5cbkBAIC0zNDQsMTQgJiM0MzszNDUsMTMgQEAgc3RhdGljIHZvaWQgbWVtZmRfbHVvX3VucHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoYXJncy1cdTAwM2VmaWxlKTtcbiBcdHN0cnVjdCBtZW1mZF9sdW9fc2VyICpzZXI7XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFhcmdzLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSkpXG4mIzQzO1x0c2VyID0gS0hPU0VSX0xPQURfUFRSKGFyZ3MtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCFzZXIpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpbm9kZV9sb2NrKGlub2RlKTtcbiBcdHNobWVtX2ZyZWV6ZShpbm9kZSwgZmFsc2UpO1xuIFxuLVx0c2VyID0gcGh5c190b192aXJ0KGFyZ3MtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbi1cbiBcdG1lbWZkX2x1b191bnByZXNlcnZlX2ZvbGlvcyhcdTAwMjZzZXItXHUwMDNlZm9saW9zLCBhcmdzLVx1MDAzZXByaXZhdGVfZGF0YSxcbiBcdFx0XHRcdCAgICBzZXItXHUwMDNlbnJfZm9saW9zKTtcbiBcbkBAIC0zOTcsNyAmIzQzOzM5Nyw3IEBAIHN0YXRpYyB2b2lkIG1lbWZkX2x1b19maW5pc2goc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxuIFx0aWYgKGFyZ3MtXHUwMDNlcmV0cmlldmVfc3RhdHVzKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRzZXIgPSBwaHlzX3RvX3ZpcnQoYXJncy1cdTAwM2VzZXJpYWxpemVkX2RhdGEpO1xuJiM0MztcdHNlciA9IEtIT1NFUl9MT0FEX1BUUihhcmdzLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XG4gXHRpZiAoIXNlcilcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTUyMiw3ICYjNDM7NTIyLDcgQEAgc3RhdGljIGludCBtZW1mZF9sdW9fcmV0cmlldmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxuIFx0c3RydWN0IGZpbGUgKmZpbGU7XG4gXHRpbnQgZXJyO1xuIFxuLVx0c2VyID0gcGh5c190b192aXJ0KGFyZ3MtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbiYjNDM7XHRzZXIgPSBLSE9TRVJfTE9BRF9QVFIoYXJncy1cdTAwM2VzZXJpYWxpemVkX2RhdGEpO1xuIFx0aWYgKCFzZXIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDExOjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IGludHJvZHVjZXMgdHlwZS1zYWZlIG1hY3JvcyAoS0hPU0VSX0NPUFlfVFlQRVNBRkUsIEtIT1NFUl9MT0FEX1BUUiwgZXRjLikgZm9yIHNlcmlhbGl6aW5nIGFuZCBkZXNlcmlhbGl6aW5nIHBvaW50ZXJzIGluIHRoZSBsaXZldXBkYXRlL2tleGVjX2hhbmRvdmVyIHN1YnN5c3RlbS4gSXQgcmVwbGFjZXMgcmF3IHU2NCBmaWVsZHMgd2l0aCBhIHVuaW9uIGFuZCB1cGRhdGVzIHRoZSBhc3NpZ25tZW50cyB0byB1c2UgdGhlIG5ldyBtYWNyb3MuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGxvZ2ljIHRoYXQgd291bGQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjgyZDA3NzVmNjk2ZjQzNTFhNmZmNjc2NzgzN2IxY2ViNzFlN2U3OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDIyIDExOjI0OjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmggYi9pbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaAppbmRleCA1ZTJlYjg1MTliZGE2ZC4uNjE4NDA4ZmJlOWM5MWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2hvL2FiaS9rZXhlY19oYW5kb3Zlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9rZXhlY19oYW5kb3Zlci5oCkBAIC0xMzksNiAmIzQzOzEzOSwxOCBAQAogCQkodHlwZW9mKChzKS5wdHIpKSgocykucGh5cyA/IHBoeXNfdG9fdmlydCgocykucGh5cykgOiBOVUxMKTsgXAogCX0pCiAKJiM0MzsvKiBDb3BpZXMgb25lIHNlcmlhbGl6YWJsZSBwb2ludGVyIHRvIGFub3RoZXIgb2Ygc2FtZSB0eXBlLiAqLwomIzQzOyNkZWZpbmUgS0hPU0VSX0NPUFlfVFlQRVNBRkUoZGVzdCwgc3JjKSBcCiYjNDM7CSh7IFwKJiM0MzsJCXR5cGVjaGVjayh0eXBlb2YoKGRlc3QpLnB0ciksIChzcmMpLnB0cik7IFwKJiM0MzsJCShkZXN0KS5waHlzID0gKHNyYykucGh5czsgXAomIzQzOwl9KQomIzQzOwomIzQzOy8qIENvcGllcyBvbmUgc2VyaWFsaXphYmxlIHBvaW50ZXIgdG8gYW5vdGhlci4gKi8KJiM0MzsjZGVmaW5lIEtIT1NFUl9DT1BZX1RZUEVVTlNBRkUoZGVzdCwgc3JjKSBcCiYjNDM7CSh7IFwKJiM0MzsJCShkZXN0KS5waHlzID0gKHNyYykucGh5czsgXAomIzQzOwl9KQogLyoKICAqIFRoaXMgaGVhZGVyIGlzIGVtYmVkZGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBga2hvX3ZtYWxsb2NfY2h1bmtgCiAgKiBhbmQgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IGNodW5rIGluIHRoZSBsaW5rZWQgbGlzdCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2hvL2FiaS9sdW8uaCBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9sdW8uaAppbmRleCAyODgwNzZkZTZkNGEwOS4uZDViM2IxYzBmZWMxMmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2hvL2FiaS9sdW8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2toby9hYmkvbHVvLmgKQEAgLTU5LDYgJiM0Mzs1OSw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9hbGlnbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2toby9hYmkvYmxvY2suaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva2hvL2FiaS9rZXhlY19oYW5kb3Zlci5oJmd0OwogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvbGl2ZXVwZGF0ZS5oJmd0OwogCiAvKgpAQCAtODksMTQgJiM0Mzs5MCwxNCBAQCBzdHJ1Y3QgbHVvX3NlciB7CiAvKioKICAqIHN0cnVjdCBsdW9fZmlsZV9zZXIgLSBSZXByZXNlbnRzIHRoZSBzZXJpYWxpemVkIHByZXNlcnZlcyBmaWxlcy4KICAqIEBjb21wYXRpYmxlOiAgRmlsZSBoYW5kbGVyIGNvbXBhdGlibGUgc3RyaW5nLgotICogQGRhdGE6ICAgICAgICBQcml2YXRlIGRhdGEKJiM0MzsgKiBAc2VyaWFsaXplZF9kYXRhOiAgVGhlIHNlcmlhbGl6ZWQgcG9pbnRlciB1bmlvbiBmb3IgdGhpcyBmaWxlCiAgKiBAdG9rZW46ICAgICAgIFVzZXIgcHJvdmlkZWQgdG9rZW4gZm9yIHRoaXMgZmlsZQogICoKICAqIElmIHRoaXMgc3RydWN0dXJlIGlzIG1vZGlmaWVkLCBgTFVPX0FCSV9DT01QQVRJQkxFYCBtdXN0IGJlIHVwZGF0ZWQuCiAgKi8KIHN0cnVjdCBsdW9fZmlsZV9zZXIgewogCWNoYXIgY29tcGF0aWJsZVtMSVZFVVBEQVRFX0hORExfQ09NUEFUX0xFTkdUSF07Ci0JdTY0IGRhdGE7CiYjNDM7CURFQ0xBUkVfS0hPU0VSX1BUUihzZXJpYWxpemVkX2RhdGEsIHZvaWQgKik7CiAJdTY0IHRva2VuOwogfSBfX3BhY2tlZDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmggYi9pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaAppbmRleCA4ODcyMmU1Y2FmMDIwYi4uNDgwZDYzOGI3ZDE4YzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oCkBAIC0zMyw3ICYjNDM7MzMsNyBAQCBzdHJ1Y3QgZmlsZTsKICAqIEBmaWxlOiAgICAgICAgICAgICBUaGUgZmlsZSBvYmplY3QuIEZvciByZXRyaWV2ZTogW09VVF0gVGhlIGNhbGxiYWNrIHNldHMKICAqICAgICAgICAgICAgICAgICAgICB0aGlzIHRvIHRoZSBuZXcgZmlsZS4gRm9yIG90aGVyIG9wczogW0lOXSBUaGUgY2FsbGVyIHNldHMKICAqICAgICAgICAgICAgICAgICAgICB0aGlzIHRvIHRoZSBmaWxlIGJlaW5nIG9wZXJhdGVkIG9uLgotICogQHNlcmlhbGl6ZWRfZGF0YTogIFRoZSBvcGFxdWUgdTY0IGhhbmRsZSwgcHJlc2VydmUvcHJlcGFyZS9mcmVlemUgbWF5IHVwZGF0ZQomIzQzOyAqIEBzZXJpYWxpemVkX2RhdGE6ICBUaGUgc2VyaWFsaXplZCBwb2ludGVyIHVuaW9uLCBwcmVzZXJ2ZS9wcmVwYXJlL2ZyZWV6ZSBtYXkgdXBkYXRlCiAgKiAgICAgICAgICAgICAgICAgICAgdGhpcyBmaWVsZC4KICAqIEBwcml2YXRlX2RhdGE6ICAgICBQcml2YXRlIGRhdGEgZm9yIHRoZSBmaWxlIHVzZWQgdG8gaG9sZCBydW50aW1lIHN0YXRlIHRoYXQKICAqICAgICAgICAgICAgICAgICAgICBpcyBub3QgcHJlc2VydmVkLiBTZXQgYnkgdGhlIGhhbmRsZXImIzM5O3MgLnByZXNlcnZlKCkKQEAgLTQ3LDcgJiM0Mzs0Nyw3IEBAIHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyB7CiAJc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpoYW5kbGVyOwogCWludCByZXRyaWV2ZV9zdGF0dXM7CiAJc3RydWN0IGZpbGUgKmZpbGU7Ci0JdTY0IHNlcmlhbGl6ZWRfZGF0YTsKJiM0MzsJREVDTEFSRV9LSE9TRVJfUFRSKHNlcmlhbGl6ZWRfZGF0YSwgdm9pZCAqKTsKIAl2b2lkICpwcml2YXRlX2RhdGE7CiB9OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jIGIva2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYwppbmRleCBjMzlmOTY5NjFhODViZS4uNzljZmE1MjAxODk5MTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYwpAQCAtMTI1LDcgJiM0MzsxMjUsNyBAQCBzdGF0aWMgREVGSU5FX1hBUlJBWShsdW9fcHJlc2VydmVkX2ZpbGVzKTsKICAqIEBmaWxlOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBrZXJuZWwmIzM5O3MgJmFtcDtzdHJ1Y3QgZmlsZSB0aGF0IGlzIGJlaW5nIHByZXNlcnZlZC4KICAqICAgICAgICAgICAgICAgICBUaGlzIGlzIE5VTEwgaW4gdGhlIG5ldyBrZXJuZWwgdW50aWwgdGhlIGZpbGUgaXMgc3VjY2Vzc2Z1bGx5CiAgKiAgICAgICAgICAgICAgICAgcmV0cmlldmVkLgotICogQHNlcmlhbGl6ZWRfZGF0YTogVGhlIG9wYXF1ZSB1NjQgaGFuZGxlIHRvIHRoZSBzZXJpYWxpemVkIHN0YXRlIG9mIHRoZSBmaWxlLgomIzQzOyAqIEBzZXJpYWxpemVkX2RhdGE6IFRoZSBzZXJpYWxpemVkIHBvaW50ZXIgdW5pb24gdG8gdGhlIHNlcmlhbGl6ZWQgc3RhdGUgb2YgdGhlIGZpbGUuCiAgKiAgICAgICAgICAgICAgICAgVGhpcyBoYW5kbGUgaXMgcGFzc2VkIGJhY2sgdG8gdGhlIGhhbmRsZXImIzM5O3MgLmZyZWV6ZSgpLAogICogICAgICAgICAgICAgICAgIC5yZXRyaWV2ZSgpLCBhbmQgLmZpbmlzaCgpIGNhbGxiYWNrcywgYWxsb3dpbmcgaXQgdG8gdHJhY2sKICAqICAgICAgICAgICAgICAgICBhbmQgdXBkYXRlIGl0cyBzZXJpYWxpemVkIHN0YXRlIGFjcm9zcyBwaGFzZXMuCkBAIC0xNjEsNyAmIzQzOzE2MSw3IEBAIHN0YXRpYyBERUZJTkVfWEFSUkFZKGx1b19wcmVzZXJ2ZWRfZmlsZXMpOwogc3RydWN0IGx1b19maWxlIHsKIAlzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoOwogCXN0cnVjdCBmaWxlICpmaWxlOwotCXU2NCBzZXJpYWxpemVkX2RhdGE7CiYjNDM7CURFQ0xBUkVfS0hPU0VSX1BUUihzZXJpYWxpemVkX2RhdGEsIHZvaWQgKik7CiAJdm9pZCAqcHJpdmF0ZV9kYXRhOwogCWludCByZXRyaWV2ZV9zdGF0dXM7CiAJc3RydWN0IG11dGV4IG11dGV4OwpAQCAtMjg5LDcgJiM0MzsyODksNyBAQCBpbnQgbHVvX3ByZXNlcnZlX2ZpbGUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsIHU2NCB0b2tlbiwgaW50IGZkKQogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2tmcmVlOwogCi0JbHVvX2ZpbGUtJmd0O3NlcmlhbGl6ZWRfZGF0YSA9IGFyZ3Muc2VyaWFsaXplZF9kYXRhOwomIzQzOwlLSE9TRVJfQ09QWV9UWVBFU0FGRShsdW9fZmlsZS0mZ3Q7c2VyaWFsaXplZF9kYXRhLCBhcmdzLnNlcmlhbGl6ZWRfZGF0YSk7CiAJbHVvX2ZpbGUtJmd0O3ByaXZhdGVfZGF0YSA9IGFyZ3MucHJpdmF0ZV9kYXRhOwogCWxpc3RfYWRkX3RhaWwoJmFtcDtsdW9fZmlsZS0mZ3Q7bGlzdCwgJmFtcDtmaWxlX3NldC0mZ3Q7ZmlsZXNfbGlzdCk7CiAJZmlsZV9zZXQtJmd0O2NvdW50JiM0MzsmIzQzOzsKQEAgLTM0Miw3ICYjNDM7MzQyLDcgQEAgdm9pZCBsdW9fZmlsZV91bnByZXNlcnZlX2ZpbGVzKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0KQogCiAJCWFyZ3MuaGFuZGxlciA9IGx1b19maWxlLSZndDtmaDsKIAkJYXJncy5maWxlID0gbHVvX2ZpbGUtJmd0O2ZpbGU7Ci0JCWFyZ3Muc2VyaWFsaXplZF9kYXRhID0gbHVvX2ZpbGUtJmd0O3NlcmlhbGl6ZWRfZGF0YTsKJiM0MzsJCUtIT1NFUl9DT1BZX1RZUEVTQUZFKGFyZ3Muc2VyaWFsaXplZF9kYXRhLCBsdW9fZmlsZS0mZ3Q7c2VyaWFsaXplZF9kYXRhKTsKIAkJYXJncy5wcml2YXRlX2RhdGEgPSBsdW9fZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwogCQlsdW9fZmlsZS0mZ3Q7ZmgtJmd0O29wcy0mZ3Q7dW5wcmVzZXJ2ZSgmYW1wO2FyZ3MpOwogCQlsdW9fZmxiX2ZpbGVfdW5wcmVzZXJ2ZShsdW9fZmlsZS0mZ3Q7ZmgpOwpAQCAtMzc1LDEyICYjNDM7Mzc1LDEyIEBAIHN0YXRpYyBpbnQgbHVvX2ZpbGVfZnJlZXplX29uZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCwKIAogCQlhcmdzLmhhbmRsZXIgPSBsdW9fZmlsZS0mZ3Q7Zmg7CiAJCWFyZ3MuZmlsZSA9IGx1b19maWxlLSZndDtmaWxlOwotCQlhcmdzLnNlcmlhbGl6ZWRfZGF0YSA9IGx1b19maWxlLSZndDtzZXJpYWxpemVkX2RhdGE7CiYjNDM7CQlLSE9TRVJfQ09QWV9UWVBFU0FGRShhcmdzLnNlcmlhbGl6ZWRfZGF0YSwgbHVvX2ZpbGUtJmd0O3NlcmlhbGl6ZWRfZGF0YSk7CiAJCWFyZ3MucHJpdmF0ZV9kYXRhID0gbHVvX2ZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKIAogCQllcnIgPSBsdW9fZmlsZS0mZ3Q7ZmgtJmd0O29wcy0mZ3Q7ZnJlZXplKCZhbXA7YXJncyk7CiAJCWlmICghZXJyKQotCQkJbHVvX2ZpbGUtJmd0O3NlcmlhbGl6ZWRfZGF0YSA9IGFyZ3Muc2VyaWFsaXplZF9kYXRhOwomIzQzOwkJCUtIT1NFUl9DT1BZX1RZUEVTQUZFKGx1b19maWxlLSZndDtzZXJpYWxpemVkX2RhdGEsIGFyZ3Muc2VyaWFsaXplZF9kYXRhKTsKIAl9CiAKIAlyZXR1cm4gZXJyOwpAQCAtMzk2LDcgJiM0MzszOTYsNyBAQCBzdGF0aWMgdm9pZCBsdW9fZmlsZV91bmZyZWV6ZV9vbmUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsCiAKIAkJYXJncy5oYW5kbGVyID0gbHVvX2ZpbGUtJmd0O2ZoOwogCQlhcmdzLmZpbGUgPSBsdW9fZmlsZS0mZ3Q7ZmlsZTsKLQkJYXJncy5zZXJpYWxpemVkX2RhdGEgPSBsdW9fZmlsZS0mZ3Q7c2VyaWFsaXplZF9kYXRhOwomIzQzOwkJS0hPU0VSX0NPUFlfVFlQRVNBRkUoYXJncy5zZXJpYWxpemVkX2RhdGEsIGx1b19maWxlLSZndDtzZXJpYWxpemVkX2RhdGEpOwogCQlhcmdzLnByaXZhdGVfZGF0YSA9IGx1b19maWxlLSZndDtwcml2YXRlX2RhdGE7CiAKIAkJbHVvX2ZpbGUtJmd0O2ZoLSZndDtvcHMtJmd0O3VuZnJlZXplKCZhbXA7YXJncyk7CkBAIC00ODMsNyAmIzQzOzQ4Myw3IEBAIGludCBsdW9fZmlsZV9mcmVlemUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsCiAKIAkJc3Ryc2NweShmaWxlX3Nlci0mZ3Q7Y29tcGF0aWJsZSwgbHVvX2ZpbGUtJmd0O2ZoLSZndDtjb21wYXRpYmxlLAogCQkJc2l6ZW9mKGZpbGVfc2VyLSZndDtjb21wYXRpYmxlKSk7Ci0JCWZpbGVfc2VyLSZndDtkYXRhID0gbHVvX2ZpbGUtJmd0O3NlcmlhbGl6ZWRfZGF0YTsKJiM0MzsJCUtIT1NFUl9DT1BZX1RZUEVTQUZFKGZpbGVfc2VyLSZndDtzZXJpYWxpemVkX2RhdGEsIGx1b19maWxlLSZndDtzZXJpYWxpemVkX2RhdGEpOwogCQlmaWxlX3Nlci0mZ3Q7dG9rZW4gPSBsdW9fZmlsZS0mZ3Q7dG9rZW47CiAJfQogCkBAIC01ODcsNyAmIzQzOzU4Nyw3IEBAIGludCBsdW9fcmV0cmlldmVfZmlsZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCwgdTY0IHRva2VuLAogCX0KIAogCWFyZ3MuaGFuZGxlciA9IGx1b19maWxlLSZndDtmaDsKLQlhcmdzLnNlcmlhbGl6ZWRfZGF0YSA9IGx1b19maWxlLSZndDtzZXJpYWxpemVkX2RhdGE7CiYjNDM7CUtIT1NFUl9DT1BZX1RZUEVTQUZFKGFyZ3Muc2VyaWFsaXplZF9kYXRhLCBsdW9fZmlsZS0mZ3Q7c2VyaWFsaXplZF9kYXRhKTsKIAllcnIgPSBsdW9fZmlsZS0mZ3Q7ZmgtJmd0O29wcy0mZ3Q7cmV0cmlldmUoJmFtcDthcmdzKTsKIAlpZiAoZXJyKSB7CiAJCS8qIEtlZXAgdGhlIGVycm9yIGNvZGUgZm9yIGxhdGVyIHVzZS4gKi8KQEAgLTYyMSw3ICYjNDM7NjIxLDcgQEAgc3RhdGljIGludCBsdW9fZmlsZV9jYW5fZmluaXNoX29uZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCwKIAogCQlhcmdzLmhhbmRsZXIgPSBsdW9fZmlsZS0mZ3Q7Zmg7CiAJCWFyZ3MuZmlsZSA9IGx1b19maWxlLSZndDtmaWxlOwotCQlhcmdzLnNlcmlhbGl6ZWRfZGF0YSA9IGx1b19maWxlLSZndDtzZXJpYWxpemVkX2RhdGE7CiYjNDM7CQlLSE9TRVJfQ09QWV9UWVBFU0FGRShhcmdzLnNlcmlhbGl6ZWRfZGF0YSwgbHVvX2ZpbGUtJmd0O3NlcmlhbGl6ZWRfZGF0YSk7CiAJCWFyZ3MucmV0cmlldmVfc3RhdHVzID0gbHVvX2ZpbGUtJmd0O3JldHJpZXZlX3N0YXR1czsKIAkJY2FuX2ZpbmlzaCA9IGx1b19maWxlLSZndDtmaC0mZ3Q7b3BzLSZndDtjYW5fZmluaXNoKCZhbXA7YXJncyk7CiAJfQpAQCAtNjM4LDcgJiM0Mzs2MzgsNyBAQCBzdGF0aWMgdm9pZCBsdW9fZmlsZV9maW5pc2hfb25lKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LAogCiAJYXJncy5oYW5kbGVyID0gbHVvX2ZpbGUtJmd0O2ZoOwogCWFyZ3MuZmlsZSA9IGx1b19maWxlLSZndDtmaWxlOwotCWFyZ3Muc2VyaWFsaXplZF9kYXRhID0gbHVvX2ZpbGUtJmd0O3NlcmlhbGl6ZWRfZGF0YTsKJiM0MzsJS0hPU0VSX0NPUFlfVFlQRVNBRkUoYXJncy5zZXJpYWxpemVkX2RhdGEsIGx1b19maWxlLSZndDtzZXJpYWxpemVkX2RhdGEpOwogCWFyZ3MucmV0cmlldmVfc3RhdHVzID0gbHVvX2ZpbGUtJmd0O3JldHJpZXZlX3N0YXR1czsKIAogCWx1b19maWxlLSZndDtmaC0mZ3Q7b3BzLSZndDtmaW5pc2goJmFtcDthcmdzKTsKQEAgLTc0OCw3ICYjNDM7NzQ4LDcgQEAgc3RhdGljIGludCBsdW9fZmlsZV9kZXNlcmlhbGl6ZV9vbmUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsCiAKIAlsdW9fZmlsZS0mZ3Q7ZmggPSBmaDsKIAlsdW9fZmlsZS0mZ3Q7ZmlsZSA9IE5VTEw7Ci0JbHVvX2ZpbGUtJmd0O3NlcmlhbGl6ZWRfZGF0YSA9IHNlci0mZ3Q7ZGF0YTsKJiM0MzsJS0hPU0VSX0NPUFlfVFlQRVNBRkUobHVvX2ZpbGUtJmd0O3NlcmlhbGl6ZWRfZGF0YSwgc2VyLSZndDtzZXJpYWxpemVkX2RhdGEpOwogCWx1b19maWxlLSZndDt0b2tlbiA9IHNlci0mZ3Q7dG9rZW47CiAJbXV0ZXhfaW5pdCgmYW1wO2x1b19maWxlLSZndDttdXRleCk7CiAJbGlzdF9hZGRfdGFpbCgmYW1wO2x1b19maWxlLSZndDtsaXN0LCAmYW1wO2ZpbGVfc2V0LSZndDtmaWxlc19saXN0KTsKZGlmZiAtLWdpdCBhL21tL21lbWZkX2x1by5jIGIvbW0vbWVtZmRfbHVvLmMKaW5kZXggNTlkZTIxMGJlZTVmOWUuLmRhZjJjNGMzZGEzNWYzIDEwMDY0NAotLS0gYS9tbS9tZW1mZF9sdW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1mZF9sdW8uYwpAQCAtMjU3LDYgJiM0MzsyNTcsNyBAQCBzdGF0aWMgdm9pZCBtZW1mZF9sdW9fdW5wcmVzZXJ2ZV9mb2xpb3Moc3RydWN0IGtob192bWFsbG9jICpraG9fdm1hbGxvYywKIAogc3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKQogewomIzQzOwlERUNMQVJFX0tIT1NFUl9QVFIoc2QsIHN0cnVjdCBtZW1mZF9sdW9fc2VyICopOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGFyZ3MtJmd0O2ZpbGUpOwogCXN0cnVjdCBtZW1mZF9sdW9fZm9saW9fc2VyICpmb2xpb3Nfc2VyOwogCXN0cnVjdCBtZW1mZF9sdW9fc2VyICpzZXI7CkBAIC0zMDksNyAmIzQzOzMxMCw4IEBAIHN0YXRpYyBpbnQgbWVtZmRfbHVvX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncykKIAlpbm9kZV91bmxvY2soaW5vZGUpOwogCiAJYXJncy0mZ3Q7cHJpdmF0ZV9kYXRhID0gZm9saW9zX3NlcjsKLQlhcmdzLSZndDtzZXJpYWxpemVkX2RhdGEgPSB2aXJ0X3RvX3BoeXMoc2VyKTsKJiM0MzsJS0hPU0VSX1NUT1JFX1BUUihzZCwgc2VyKTsKJiM0MzsJS0hPU0VSX0NPUFlfVFlQRVVOU0FGRShhcmdzLSZndDtzZXJpYWxpemVkX2RhdGEsIHNkKTsKIAogCXJldHVybiAwOwogCkBAIC0zMjUsMTEgJiM0MzszMjcsMTAgQEAgc3RhdGljIGludCBtZW1mZF9sdW9fZnJlZXplKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncykKIHsKIAlzdHJ1Y3QgbWVtZmRfbHVvX3NlciAqc2VyOwogCi0JaWYgKFdBUk5fT05fT05DRSghYXJncy0mZ3Q7c2VyaWFsaXplZF9kYXRhKSkKJiM0MzsJc2VyID0gS0hPU0VSX0xPQURfUFRSKGFyZ3MtJmd0O3NlcmlhbGl6ZWRfZGF0YSk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIXNlcikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc2VyID0gcGh5c190b192aXJ0KGFyZ3MtJmd0O3NlcmlhbGl6ZWRfZGF0YSk7Ci0KIAkvKgogCSAqIFRoZSBwb3MgbWlnaHQgaGF2ZSBjaGFuZ2VkIHNpbmNlIHByZXBhcmUuIEV2ZXJ5dGhpbmcgZWxzZSBzdGF5cyB0aGUKIAkgKiBzYW1lLgpAQCAtMzQ0LDE0ICYjNDM7MzQ1LDEzIEBAIHN0YXRpYyB2b2lkIG1lbWZkX2x1b191bnByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncykKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShhcmdzLSZndDtmaWxlKTsKIAlzdHJ1Y3QgbWVtZmRfbHVvX3NlciAqc2VyOwogCi0JaWYgKFdBUk5fT05fT05DRSghYXJncy0mZ3Q7c2VyaWFsaXplZF9kYXRhKSkKJiM0MzsJc2VyID0gS0hPU0VSX0xPQURfUFRSKGFyZ3MtJmd0O3NlcmlhbGl6ZWRfZGF0YSk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIXNlcikpCiAJCXJldHVybjsKIAogCWlub2RlX2xvY2soaW5vZGUpOwogCXNobWVtX2ZyZWV6ZShpbm9kZSwgZmFsc2UpOwogCi0Jc2VyID0gcGh5c190b192aXJ0KGFyZ3MtJmd0O3NlcmlhbGl6ZWRfZGF0YSk7Ci0KIAltZW1mZF9sdW9fdW5wcmVzZXJ2ZV9mb2xpb3MoJmFtcDtzZXItJmd0O2ZvbGlvcywgYXJncy0mZ3Q7cHJpdmF0ZV9kYXRhLAogCQkJCSAgICBzZXItJmd0O25yX2ZvbGlvcyk7CiAKQEAgLTM5Nyw3ICYjNDM7Mzk3LDcgQEAgc3RhdGljIHZvaWQgbWVtZmRfbHVvX2ZpbmlzaChzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3MgKmFyZ3MpCiAJaWYgKGFyZ3MtJmd0O3JldHJpZXZlX3N0YXR1cykKIAkJcmV0dXJuOwogCi0Jc2VyID0gcGh5c190b192aXJ0KGFyZ3MtJmd0O3NlcmlhbGl6ZWRfZGF0YSk7CiYjNDM7CXNlciA9IEtIT1NFUl9MT0FEX1BUUihhcmdzLSZndDtzZXJpYWxpemVkX2RhdGEpOwogCWlmICghc2VyKQogCQlyZXR1cm47CiAKQEAgLTUyMiw3ICYjNDM7NTIyLDcgQEAgc3RhdGljIGludCBtZW1mZF9sdW9fcmV0cmlldmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKQogCXN0cnVjdCBmaWxlICpmaWxlOwogCWludCBlcnI7CiAKLQlzZXIgPSBwaHlzX3RvX3ZpcnQoYXJncy0mZ3Q7c2VyaWFsaXplZF9kYXRhKTsKJiM0MzsJc2VyID0gS0hPU0VSX0xPQURfUFRSKGFyZ3MtJmd0O3NlcmlhbGl6ZWRfZGF0YSk7CiAJaWYgKCFzZXIpCiAJCXJldHVybiAtRUlOVkFMOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDExOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MDEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgU2VyaWFsaXphdGlvbi9EZXNlcmlhbGl6YXRpb24gaW4gdGhlIEtITyBTdWJzeXN0ZW0qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgYSByZWZhY3RvcmluZyBlZmZvcnQgd2l0aGluIHRoZSBsaXZldXBkYXRlL2tleGVjX2hhbmRvdmVyIChLSE8pIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIGEgbW92ZSBhd2F5IGZyb20gdXNpbmcgcmF3IGB1NjRgIGZvciBzZXJpYWxpemVkIHBvaW50ZXJzIGFuZCB0b3dhcmRzIGEgbW9yZSBzdHJ1Y3R1cmVkIGFwcHJvYWNoIGxldmVyYWdpbmcgYERFQ0xBUkVfS0hPU0VSX1BUUmAgYW5kIGFzc29jaWF0ZWQgbWFjcm9zLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIGBpbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaGAuIEl0IGludHJvZHVjZXMgdHdvIG5ldyBtYWNyb3M6IGBLSE9TRVJfQ09QWV9UWVBFU0FGRWAgYW5kIGBLSE9TRVJfQ09QWV9UWVBFVU5TQUZFYC4gSXQgbG9va3MgbGlrZSBgS0hPU0VSX0NPUFlfVFlQRVNBRkVgIHBlcmZvcm1zIGEgYHR5cGVjaGVja2AgYmVmb3JlIGNvcHlpbmcgdGhlIHBoeXNpY2FsIGFkZHJlc3MsIHdoaWxlIGBLSE9TRVJfQ09QWV9UWVBFVU5TQUZFYCBjb3BpZXMgdGhlIHBoeXNpY2FsIGFkZHJlc3MgZGlyZWN0bHkuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGFjdHVhbCBkZWZpbml0aW9uIG9mIGBERUNMQVJFX0tIT1NFUl9QVFJgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gVGhlIHBhdGNoIGFsc28gdXBkYXRlcyBzZXZlcmFsIGtleSBkYXRhIHN0cnVjdHVyZXMsIG5hbWVseSBgc3RydWN0IGx1b19maWxlX3NlcmAgYW5kIGBzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3NgIHRvIHVzZSB0aGVzZSBuZXcgbWFjcm9zIGFuZCB0aGUgYERFQ0xBUkVfS0hPU0VSX1BUUmAgZGF0YSBzdHJ1Y3R1cmUuCgpUaGUgY2hhbmdlIHRvdWNoZXMgYGtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmNgIGFuZCBgbW0vbWVtZmRfbHVvLmNgLCBzbyBpdCYjMzk7cyBjbGVhcmx5IGltcGFjdGluZyB0aGUgaW1wbGVtZW50YXRpb24gc2lkZSwgdG9vLiBHaXZlbiB0aGUgZmlsZSBsb2NhdGlvbnMgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMsIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgaW1wcm92aW5nIHRoZSB3YXkgcG9pbnRlcnMgYXJlIGhhbmRsZWQgZHVyaW5nIGxpdmUgdXBkYXRlcyBhbmQga2V4ZWMgaGFuZG92ZXJzIOKAkyB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhlIG1haW4gaW1wYWN0IGlzIHJlcGxhY2luZyBhc3NpZ25tZW50cyBhbmQgcG9pbnRlciBjb252ZXJzaW9ucywgbGlrZSBgdmlydF90b19waHlzYC9gcGh5c190b192aXJ0YCwgd2l0aCB0aGUgbWFjcm9zIGBLSE9TRVJfQ09QWV9UWVBFU0FGRWAsIGBLSE9TRVJfU1RPUkVfUFRSYCwgYEtIT1NFUl9MT0FEX1BUUmAuCgpOb3csIEkmIzM5O20gdHJ5aW5nIHRvIGFzY2VydGFpbiBpZiB0aGlzIGlzIHB1cmVseSBhIHJlZmFjdG9yaW5nIGZvciB0eXBlIHNhZmV0eSwgb3IgaWYgdGhlcmUmIzM5O3MgYSBmdW5jdGlvbmFsIGFzcGVjdCB0byBpdC4gTG9va2luZyBhdCB0aGUgbWFjcm8gZGVmaW5pdGlvbnMsIGBLSE9TRVJfQ09QWV9UWVBFU0FGRWAgdXNlcyBgdHlwZWNoZWNrYCwgYnV0IGJvdGggbWFjcm9zIHVsdGltYXRlbHkganVzdCBjb3B5IHRoZSBgLnBoeXNgIG1lbWJlci4gVGh1cywgdGhlIG1hY3JvcyBhbG9uZSBkb24mIzM5O3QgYXBwZWFyIHRvIGJlIGludHJvZHVjaW5nIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSBrZXkgbXVzdCBsaWUgaW4gaG93IGBERUNMQVJFX0tIT1NFUl9QVFJgIGRlZmluZXMgdGhlIGludGVybmFsIHN0cnVjdHVyZSBmb3IgdGhlc2Ugc2VyaWFsaXplZCBwb2ludGVycywgYW5kIGhvdyB0aGUgdmFyaW91cyBjb3B5IGFuZCBsb2FkIG9wZXJhdGlvbnMgYXJlIGFjdHVhbGx5IGltcGxlbWVudGVkLiBJIG5lZWQgdG8gcmV2aWV3IGBpbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaGAgdG8gc2VlIGhvdyB0aG9zZSBhcmUgc2V0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDExOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RFQ0xBUkVfS0hPU0VSX1BUUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaC0xMjAtLyogSGVscGVyIG1hY3JvIHRvIGRlZmluZSBhIHVuaW9uIGZvciBhIHNlcmlhbGl6YWJsZSBwb2ludGVyLiAqL1xuaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmg6MTIxOiNkZWZpbmUgREVDTEFSRV9LSE9TRVJfUFRSKG5hbWUsIHR5cGUpXHRcXFxuaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmgtMTIyLVx0dW5pb24geyAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4tLVxuaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmg9MTU5PXN0cnVjdCBraG9fdm1hbGxvY19oZHIge1xuaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmg6MTYwOlx0REVDTEFSRV9LSE9TRVJfUFRSKG5leHQsIHN0cnVjdCBraG9fdm1hbGxvY19jaHVuayAqKTtcbmluY2x1ZGUvbGludXgva2hvL2FiaS9rZXhlY19oYW5kb3Zlci5oLTE2MS19O1xuLS1cbmluY2x1ZGUvbGludXgva2hvL2FiaS9rZXhlY19oYW5kb3Zlci5oPTE4NT1zdHJ1Y3Qga2hvX3ZtYWxsb2Mge1xuaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmg6MTg2Olx0REVDTEFSRV9LSE9TRVJfUFRSKGZpcnN0LCBzdHJ1Y3Qga2hvX3ZtYWxsb2NfY2h1bmsgKik7XG5pbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaC0xODctXHR1bnNpZ25lZCBpbnQgdG90YWxfcGFnZXM7XG4tLVxuaW5jbHVkZS9saW51eC9raG8vYWJpL2x1by5oPTk4PXN0cnVjdCBsdW9fZmlsZV9zZXIge1xuaW5jbHVkZS9saW51eC9raG8vYWJpL2x1by5oLTk5LVx0Y2hhciBjb21wYXRpYmxlW0xJVkVVUERBVEVfSE5ETF9DT01QQVRfTEVOR1RIXTtcbmluY2x1ZGUvbGludXgva2hvL2FiaS9sdW8uaDoxMDA6XHRERUNMQVJFX0tIT1NFUl9QVFIoc2VyaWFsaXplZF9kYXRhLCB2b2lkICopO1xuaW5jbHVkZS9saW51eC9raG8vYWJpL2x1by5oLTEwMS1cdHU2NCB0b2tlbjtcbi0tXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaD00Nj1zdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3Mge1xuLS1cbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTQ5LVx0c3RydWN0IGZpbGUgKmZpbGU7XG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaDo1MDpcdERFQ0xBUkVfS0hPU0VSX1BUUihzZXJpYWxpemVkX2RhdGEsIHZvaWQgKik7XG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC01MS1cdHZvaWQgKnByaXZhdGVfZGF0YTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jPTE2MT1zdHJ1Y3QgbHVvX2ZpbGUge1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtMTYzLVx0c3RydWN0IGZpbGUgKmZpbGU7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jOjE2NDpcdERFQ0xBUkVfS0hPU0VSX1BUUihzZXJpYWxpemVkX2RhdGEsIHZvaWQgKik7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTE2NS1cdHZvaWQgKnByaXZhdGVfZGF0YTtcbi0tXG5tbS9tZW1mZF9sdW8uYz0yNTg9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxubW0vbWVtZmRfbHVvLmMtMjU5LXtcbm1tL21lbWZkX2x1by5jOjI2MDpcdERFQ0xBUkVfS0hPU0VSX1BUUihzZCwgc3RydWN0IG1lbWZkX2x1b19zZXIgKik7XG5tbS9tZW1mZF9sdW8uYy0yNjEtXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShhcmdzLVx1MDAzZWZpbGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDExOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMjEKCQkJCQkJCW91dHB1dDogMTIxCgkJCQkJCQl0aG91Z2h0czogMTUzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUG9pbnRlciBTZXJpYWxpemF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgaG93IHBvaW50ZXJzIGFyZSBzZXJpYWxpemVkIGFuZCBkZXNlcmlhbGl6ZWQgd2l0aGluIHRoaXMgc3lzdGVtLiBJdCByZXBsYWNlcyBhIHN0cmFpZ2h0Zm9yd2FyZCBgdTY0YCBmb3Igc3RvcmluZyBwaHlzaWNhbCBhZGRyZXNzZXMgd2l0aCBhIGB1bmlvbmAgY29udGFpbmluZyBib3RoIGEgcG9pbnRlciAoYHB0cmApIGFuZCBhIHBoeXNpY2FsIGFkZHJlc3MgKGBwaHlzYCkg4oCTIGVzc2VudGlhbGx5LCBhIHR5cGVkIHdyYXBwZXIgYXJvdW5kIHRoZSBleGlzdGluZyBwaHlzaWNhbCBhZGRyZXNzIHJlcHJlc2VudGF0aW9uLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzY2VydGFpbiBpZiB0aGlzIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0cywgdGhlICphY3R1YWwqIG1lY2hhbmljcyByZW1haW4gY29uc2lzdGVudC4gVGhlIG9sZCBtZXRob2Qgc3RvcmVkIHRoZSByZXN1bHQgb2YgYHZpcnRfdG9fcGh5cyhzZXIpYCBkaXJlY3RseSBpbnRvIGEgYHU2NGAuIFRoZSBuZXcgbWV0aG9kIHVzZXMgbWFjcm9zLCBgS0hPU0VSX1NUT1JFX1BUUmAgYW5kIGBLSE9TRVJfTE9BRF9QVFJgLCBidXQgZXNzZW50aWFsbHkgZG9lcyB0aGUgKnNhbWUqIHRoaW5nOiBzdG9yZXMgYHZpcnRfdG9fcGh5cyhwKWAgKG9yIHplcm8gaWYgdGhlIHBvaW50ZXIgaXMgbnVsbCkgaW50byB0aGUgYC5waHlzYCBtZW1iZXIsIGFuZCBsb2FkcyBpdCBiYWNrIHVzaW5nIGBwaHlzX3RvX3ZpcnRgLiBUaGUga2V5IGRpZmZlcmVuY2VzIEkgc2VlIGFyZSB0eXBlIHNhZmV0eSBhbmQgcmVhZGFiaWxpdHksIHdoaWNoIGlzIGdvb2QuCgpUaGUgZmFjdCB0aGF0IGBsdW9fZmlsZV9zZXJgIGlzIHBhcnQgb2YgdGhlIEFCSSByYWlzZXMgYSBjb25jZXJuLiBUaGlzIGlzIGFuIGFyZWEgd2hlcmUgY2hhbmdlcyBuZWVkIHRvIGJlIGVzcGVjaWFsbHkgd2VsbCBzY3J1dGluaXplZC4gSG93ZXZlciwgdGhlIGBERUNMQVJFX0tIT1NFUl9QVFJgIG1hY3JvIGVuc3VyZXMgdGhlIHNpemUgYW5kIGxheW91dCBvZiB0aGUgYGx1b19maWxlX3NlcmAgc3RydWN0IHJlbWFpbnMgaWRlbnRpY2FsIGJlY2F1c2UgYm90aCB0aGUgcG9pbnRlciBhbmQgdGhlIGB1NjRgIGFyZSA4IGJ5dGVzIGVhY2gsIHRoZSBzaXplIG9mIHRoZSB1bmlvbi4gVGhlIHN0cnVjdHVyZSYjMzk7cyBzaXplIGlzbiYjMzk7dCBpbXBhY3RlZCBieSB0aGlzIGNoYW5nZS4gSXQmIzM5O3MgYSByZWZhY3RvcmluZyB0byBpbXByb3ZlIGNsYXJpdHkuCgpEaWdnaW5nIGRlZXBlciwgSSBzZWUgYSBjaGVjazogYGlmIChXQVJOX09OX09OQ0UoIWFyZ3MtJmd0O3NlcmlhbGl6ZWRfZGF0YSkpYC4gVGhpcyBoYXMgYmVlbiB1cGRhdGVkIHRvIHVzZSB0aGUgbWFjcm86IGBzZXIgPSBLSE9TRVJfTE9BRF9QVFIoYXJncy0mZ3Q7c2VyaWFsaXplZF9kYXRhKTsgaWYgKFdBUk5fT05fT05DRSghc2VyKSlgLiBQcmV2aW91c2x5LCBpdCBjaGVja2VkIGEgYHU2NGAgZGlyZWN0bHk7IG5vdyBpdCBjaGVja3MgdGhlIGRlcmVmZXJlbmNlZCBwb2ludGVyIGZyb20gdGhhdCBgdTY0YC4gYEtIT1NFUl9MT0FEX1BUUmAgaGFuZGxlcyB0aGUgdHJhbnNsYXRpb24sIGFuZCBjb3JyZWN0bHkgcmV0dXJucyBgTlVMTGAgaWYgdGhlIGAucGh5c2AgbWVtYmVyIGlzIHplcm8uIFRoaXMsIG9uIGl0cyBmYWNlLCBhcHBlYXJzIGZ1bmN0aW9uYWxseSBpZGVudGljYWwuIElmIGBwaHlzYCBpcyB6ZXJvLCBpdCBjb3JyZWN0bHkgcmV0dXJucyBgTlVMTGAsIGFuZCB0aGUgd2FybmluZyBmaXJlcyBhcyBpdCBzaG91bGQuCgpOb3csIGhlcmUmIzM5O3MgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBwb2ludC4gSW4gdGhlIG9sZGVyIHZlcnNpb24sIGBwaHlzX3RvX3ZpcnQoMClgICptaWdodCogbm90IG5lY2Vzc2FyaWx5IHJldHVybiBgTlVMTGAgb24gYWxsIGFyY2hpdGVjdHVyZXMuIE9uIHg4NiwgZm9yIGluc3RhbmNlLCBgcGh5c190b192aXJ0KDApYCB3b3VsZCByZXR1cm4gYFBBR0VfT0ZGU0VUYCwgd2hpY2ggaXMgKm5vdCogemVyby4gVGhpcyBjb3VsZCBjcmVhdGUgYSBkaXZlcmdlbmNlLiBIb3dldmVyLCB0aGUgY29kZSYjMzk7cyBiZWhhdmlvciAqc2hvdWxkbiYjMzk7dCogZGVwZW5kIG9uIGBwaHlzX3RvX3ZpcnQoMClgIHlpZWxkaW5nIGBOVUxMYCwgYnV0IG9uIHRoZSB2YWx1ZSBiZWluZyB1bmluaXRpYWxpemVkLiBJdCBzZWVtcyBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlIGRpZCBub3QgYWNjb3VudCBmb3IgdGhhdCBlZGdlIGNhc2UsIGFuZCBoYXMgbm93IGJlZW4gY29ycmVjdGVkIChpbiBhIG1pbm9yIHdheSwgaXQgc2VlbXMpIGJlY2F1c2UgYEtIT1NFUl9MT0FEX1BUUmAgKmFsd2F5cyogcmV0dXJucyBgTlVMTGAgd2hlbiBgLnBoeXNgIGlzIDAuCgpMb29raW5nIGF0IHdoZXJlIHRoZSBgc2VyaWFsaXplZF9kYXRhYCBpcyBpbml0aWFsaXplZCwgaXQgaXMgc2V0IHdpdGggYHZpcnRfdG9fcGh5cyhzZXIpYCB3aGVyZSBgc2VyYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AuIFNvLCBgdmlydF90b19waHlzKHNlcilgIGlzIG5vdCB6ZXJvLCBhbmQgYGFyZ3MtJmd0O3NlcmlhbGl6ZWRfZGF0YWAgd291bGQgbm90IGJlIHplcm8uIEl0JiMzOTtzIHNhZmUgdG8gYXNzdW1lIHRoYXQgYGFyZ3MtJmd0O3NlcmlhbGl6ZWRfZGF0YWAgc2hvdWxkIG5ldmVyIGJlIDAgaW4gcHJhY3RpY2UgYW5kIGl0IGlzIGEgYnVnIGlmIGl0IGlzLiBTbywgZnVuY3Rpb25hbGx5LCB0aGUgY2hhbmdlIG1ha2VzIGEgc21hbGwgY29ycmVjdGlvbiBpbiB0aGUgcmFyZSBldmVudCBvZiBgYXJncy0mZ3Q7c2VyaWFsaXplZF9kYXRhYCBiZWluZyB1bmluaXRpYWxpemVkLCBhbmQgZG9lcyBub3QgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWwgbG9naWMuCgpJbiBjb25jbHVzaW9uLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgaXMgYSBwdXJlbHkgcmVmYWN0b3JpbmcgcGF0Y2gsIGFpbWVkIGF0IGltcHJvdmluZyB0eXBlIHNhZmV0eSBhbmQgcG90ZW50aWFsbHkgZml4aW5nIGEgbWlub3IgdGhlb3JldGljYWwgYnVnIHJlbGF0ZWQgdG8gaG93IGBwaHlzX3RvX3ZpcnQoMClgIGlzIGhhbmRsZWQuIFNpbmNlIGl0JiMzOTtzIGEgcmVmYWN0b3JpbmcgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGxvZ2ljIG9yIGV4cG9zZSBuZXcgYXR0YWNrIHN1cmZhY2VzLCBJIHdvdWxkIGNsYXNzaWZ5IHRoaXMgYXMgV29ydGhGdXp6aW5nPWZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDExOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIHRoYXQgaW50cm9kdWNlcyB0eXBlLXNhZmUgbWFjcm9zIChLSE9TRVJfQ09QWV9UWVBFU0FGRSwgS0hPU0VSX0xPQURfUFRSLCBldGMuKSBmb3Igc2VyaWFsaXppbmcgYW5kIGRlc2VyaWFsaXppbmcgcG9pbnRlcnMgaW4gdGhlIGxpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIgc3Vic3lzdGVtLiBJdCByZXBsYWNlcyByYXcgdTY0IGZpZWxkcyB3aXRoIGEgdW5pb24gYW5kIHVwZGF0ZXMgdGhlIGFzc2lnbm1lbnRzIHRvIHVzZSB0aGUgbmV3IG1hY3Jvcy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZXhlY3V0aW9uIGZsb3cgb3IgbG9naWMgdGhhdCB3b3VsZCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCBpbnRyb2R1Y2VzIHR5cGUtc2FmZSBtYWNyb3MgKEtIT1NFUl9DT1BZX1RZUEVTQUZFLCBLSE9TRVJfTE9BRF9QVFIsIGV0Yy4pIGZvciBzZXJpYWxpemluZyBhbmQgZGVzZXJpYWxpemluZyBwb2ludGVycyBpbiB0aGUgbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3ZlciBzdWJzeXN0ZW0uIEl0IHJlcGxhY2VzIHJhdyB1NjQgZmllbGRzIHdpdGggYSB1bmlvbiBhbmQgdXBkYXRlcyB0aGUgYXNzaWdubWVudHMgdG8gdXNlIHRoZSBuZXcgbWFjcm9zLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBleGVjdXRpb24gZmxvdyBvciBsb2dpYyB0aGF0IHdvdWxkIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxMToyNDoxMC41MjY3NjI4NThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTQ2NzE2MTkyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIHRoYXQgaW50cm9kdWNlcyB0eXBlLXNhZmUgbWFjcm9zIChLSE9TRVJfQ09QWV9UWVBFU0FGRSwgS0hPU0VSX0xPQURfUFRSLCBldGMuKSBmb3Igc2VyaWFsaXppbmcgYW5kIGRlc2VyaWFsaXppbmcgcG9pbnRlcnMgaW4gdGhlIGxpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIgc3Vic3lzdGVtLiBJdCByZXBsYWNlcyByYXcgdTY0IGZpZWxkcyB3aXRoIGEgdW5pb24gYW5kIHVwZGF0ZXMgdGhlIGFzc2lnbm1lbnRzIHRvIHVzZSB0aGUgbmV3IG1hY3Jvcy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZXhlY3V0aW9uIGZsb3cgb3IgbG9naWMgdGhhdCB3b3VsZCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxMToyNDoxMC41MjY3Njc5MzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MjIwNzc2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY4MmQwNzc1ZjY5NmY0MzUxYTZmZjY3Njc4MzdiMWNlYjcxZTdlNzlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjIgMTE6MjQ6MDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmggYi9pbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaFxcbmluZGV4IDVlMmViODUxOWJkYTZkLi42MTg0MDhmYmU5YzkxZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9rZXhlY19oYW5kb3Zlci5oXFxuQEAgLTEzOSw2ICsxMzksMTggQEBcXG4gXFx0XFx0KHR5cGVvZigocykucHRyKSkoKHMpLnBoeXMgPyBwaHlzX3RvX3ZpcnQoKHMpLnBoeXMpIDogTlVMTCk7IFxcXFxcXG4gXFx0fSlcXG4gXFxuKy8qIENvcGllcyBvbmUgc2VyaWFsaXphYmxlIHBvaW50ZXIgdG8gYW5vdGhlciBvZiBzYW1lIHR5cGUuICovXFxuKyNkZWZpbmUgS0hPU0VSX0NPUFlfVFlQRVNBRkUoZGVzdCwgc3JjKSBcXFxcXFxuK1xcdCh7IFxcXFxcXG4rXFx0XFx0dHlwZWNoZWNrKHR5cGVvZigoZGVzdCkucHRyKSwgKHNyYykucHRyKTsgXFxcXFxcbitcXHRcXHQoZGVzdCkucGh5cyA9IChzcmMpLnBoeXM7IFxcXFxcXG4rXFx0fSlcXG4rXFxuKy8qIENvcGllcyBvbmUgc2VyaWFsaXphYmxlIHBvaW50ZXIgdG8gYW5vdGhlci4gKi9cXG4rI2RlZmluZSBLSE9TRVJfQ09QWV9UWVBFVU5TQUZFKGRlc3QsIHNyYykgXFxcXFxcbitcXHQoeyBcXFxcXFxuK1xcdFxcdChkZXN0KS5waHlzID0gKHNyYykucGh5czsgXFxcXFxcbitcXHR9KVxcbiAvKlxcbiAgKiBUaGlzIGhlYWRlciBpcyBlbWJlZGRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggYGtob192bWFsbG9jX2NodW5rYFxcbiAgKiBhbmQgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IGNodW5rIGluIHRoZSBsaW5rZWQgbGlzdCxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9raG8vYWJpL2x1by5oIGIvaW5jbHVkZS9saW51eC9raG8vYWJpL2x1by5oXFxuaW5kZXggMjg4MDc2ZGU2ZDRhMDkuLmQ1YjNiMWMwZmVjMTJjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgva2hvL2FiaS9sdW8uaFxcbisrKyBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9sdW8uaFxcbkBAIC01OSw2ICs1OSw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYWxpZ24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2toby9hYmkvYmxvY2suaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvbGl2ZXVwZGF0ZS5oXFx1MDAzZVxcbiBcXG4gLypcXG5AQCAtODksMTQgKzkwLDE0IEBAIHN0cnVjdCBsdW9fc2VyIHtcXG4gLyoqXFxuICAqIHN0cnVjdCBsdW9fZmlsZV9zZXIgLSBSZXByZXNlbnRzIHRoZSBzZXJpYWxpemVkIHByZXNlcnZlcyBmaWxlcy5cXG4gICogQGNvbXBhdGlibGU6ICBGaWxlIGhhbmRsZXIgY29tcGF0aWJsZSBzdHJpbmcuXFxuLSAqIEBkYXRhOiAgICAgICAgUHJpdmF0ZSBkYXRhXFxuKyAqIEBzZXJpYWxpemVkX2RhdGE6ICBUaGUgc2VyaWFsaXplZCBwb2ludGVyIHVuaW9uIGZvciB0aGlzIGZpbGVcXG4gICogQHRva2VuOiAgICAgICBVc2VyIHByb3ZpZGVkIHRva2VuIGZvciB0aGlzIGZpbGVcXG4gICpcXG4gICogSWYgdGhpcyBzdHJ1Y3R1cmUgaXMgbW9kaWZpZWQsIGBMVU9fQUJJX0NPTVBBVElCTEVgIG11c3QgYmUgdXBkYXRlZC5cXG4gICovXFxuIHN0cnVjdCBsdW9fZmlsZV9zZXIge1xcbiBcXHRjaGFyIGNvbXBhdGlibGVbTElWRVVQREFURV9ITkRMX0NPTVBBVF9MRU5HVEhdO1xcbi1cXHR1NjQgZGF0YTtcXG4rXFx0REVDTEFSRV9LSE9TRVJfUFRSKHNlcmlhbGl6ZWRfZGF0YSwgdm9pZCAqKTtcXG4gXFx0dTY0IHRva2VuO1xcbiB9IF9fcGFja2VkO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmggYi9pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaFxcbmluZGV4IDg4NzIyZTVjYWYwMjBiLi40ODBkNjM4YjdkMThjNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oXFxuQEAgLTMzLDcgKzMzLDcgQEAgc3RydWN0IGZpbGU7XFxuICAqIEBmaWxlOiAgICAgICAgICAgICBUaGUgZmlsZSBvYmplY3QuIEZvciByZXRyaWV2ZTogW09VVF0gVGhlIGNhbGxiYWNrIHNldHNcXG4gICogICAgICAgICAgICAgICAgICAgIHRoaXMgdG8gdGhlIG5ldyBmaWxlLiBGb3Igb3RoZXIgb3BzOiBbSU5dIFRoZSBjYWxsZXIgc2V0c1xcbiAgKiAgICAgICAgICAgICAgICAgICAgdGhpcyB0byB0aGUgZmlsZSBiZWluZyBvcGVyYXRlZCBvbi5cXG4tICogQHNlcmlhbGl6ZWRfZGF0YTogIFRoZSBvcGFxdWUgdTY0IGhhbmRsZSwgcHJlc2VydmUvcHJlcGFyZS9mcmVlemUgbWF5IHVwZGF0ZVxcbisgKiBAc2VyaWFsaXplZF9kYXRhOiAgVGhlIHNlcmlhbGl6ZWQgcG9pbnRlciB1bmlvbiwgcHJlc2VydmUvcHJlcGFyZS9mcmVlemUgbWF5IHVwZGF0ZVxcbiAgKiAgICAgICAgICAgICAgICAgICAgdGhpcyBmaWVsZC5cXG4gICogQHByaXZhdGVfZGF0YTogICAgIFByaXZhdGUgZGF0YSBmb3IgdGhlIGZpbGUgdXNlZCB0byBob2xkIHJ1bnRpbWUgc3RhdGUgdGhhdFxcbiAgKiAgICAgICAgICAgICAgICAgICAgaXMgbm90IHByZXNlcnZlZC4gU2V0IGJ5IHRoZSBoYW5kbGVyJ3MgLnByZXNlcnZlKClcXG5AQCAtNDcsNyArNDcsNyBAQCBzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3Mge1xcbiBcXHRzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmhhbmRsZXI7XFxuIFxcdGludCByZXRyaWV2ZV9zdGF0dXM7XFxuIFxcdHN0cnVjdCBmaWxlICpmaWxlO1xcbi1cXHR1NjQgc2VyaWFsaXplZF9kYXRhO1xcbitcXHRERUNMQVJFX0tIT1NFUl9QVFIoc2VyaWFsaXplZF9kYXRhLCB2b2lkICopO1xcbiBcXHR2b2lkICpwcml2YXRlX2RhdGE7XFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jIGIva2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuY1xcbmluZGV4IGMzOWY5Njk2MWE4NWJlLi43OWNmYTUyMDE4OTkxMSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jXFxuKysrIGIva2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuY1xcbkBAIC0xMjUsNyArMTI1LDcgQEAgc3RhdGljIERFRklORV9YQVJSQVkobHVvX3ByZXNlcnZlZF9maWxlcyk7XFxuICAqIEBmaWxlOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBrZXJuZWwncyBcXHUwMDI2c3RydWN0IGZpbGUgdGhhdCBpcyBiZWluZyBwcmVzZXJ2ZWQuXFxuICAqICAgICAgICAgICAgICAgICBUaGlzIGlzIE5VTEwgaW4gdGhlIG5ldyBrZXJuZWwgdW50aWwgdGhlIGZpbGUgaXMgc3VjY2Vzc2Z1bGx5XFxuICAqICAgICAgICAgICAgICAgICByZXRyaWV2ZWQuXFxuLSAqIEBzZXJpYWxpemVkX2RhdGE6IFRoZSBvcGFxdWUgdTY0IGhhbmRsZSB0byB0aGUgc2VyaWFsaXplZCBzdGF0ZSBvZiB0aGUgZmlsZS5cXG4rICogQHNlcmlhbGl6ZWRfZGF0YTogVGhlIHNlcmlhbGl6ZWQgcG9pbnRlciB1bmlvbiB0byB0aGUgc2VyaWFsaXplZCBzdGF0ZSBvZiB0aGUgZmlsZS5cXG4gICogICAgICAgICAgICAgICAgIFRoaXMgaGFuZGxlIGlzIHBhc3NlZCBiYWNrIHRvIHRoZSBoYW5kbGVyJ3MgLmZyZWV6ZSgpLFxcbiAgKiAgICAgICAgICAgICAgICAgLnJldHJpZXZlKCksIGFuZCAuZmluaXNoKCkgY2FsbGJhY2tzLCBhbGxvd2luZyBpdCB0byB0cmFja1xcbiAgKiAgICAgICAgICAgICAgICAgYW5kIHVwZGF0ZSBpdHMgc2VyaWFsaXplZCBzdGF0ZSBhY3Jvc3MgcGhhc2VzLlxcbkBAIC0xNjEsNyArMTYxLDcgQEAgc3RhdGljIERFRklORV9YQVJSQVkobHVvX3ByZXNlcnZlZF9maWxlcyk7XFxuIHN0cnVjdCBsdW9fZmlsZSB7XFxuIFxcdHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmg7XFxuIFxcdHN0cnVjdCBmaWxlICpmaWxlO1xcbi1cXHR1NjQgc2VyaWFsaXplZF9kYXRhO1xcbitcXHRERUNMQVJFX0tIT1NFUl9QVFIoc2VyaWFsaXplZF9kYXRhLCB2b2lkICopO1xcbiBcXHR2b2lkICpwcml2YXRlX2RhdGE7XFxuIFxcdGludCByZXRyaWV2ZV9zdGF0dXM7XFxuIFxcdHN0cnVjdCBtdXRleCBtdXRleDtcXG5AQCAtMjg5LDcgKzI4OSw3IEBAIGludCBsdW9fcHJlc2VydmVfZmlsZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCwgdTY0IHRva2VuLCBpbnQgZmQpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyX2tmcmVlO1xcbiBcXG4tXFx0bHVvX2ZpbGUtXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YSA9IGFyZ3Muc2VyaWFsaXplZF9kYXRhO1xcbitcXHRLSE9TRVJfQ09QWV9UWVBFU0FGRShsdW9fZmlsZS1cXHUwMDNlc2VyaWFsaXplZF9kYXRhLCBhcmdzLnNlcmlhbGl6ZWRfZGF0YSk7XFxuIFxcdGx1b19maWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEgPSBhcmdzLnByaXZhdGVfZGF0YTtcXG4gXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2bHVvX2ZpbGUtXFx1MDAzZWxpc3QsIFxcdTAwMjZmaWxlX3NldC1cXHUwMDNlZmlsZXNfbGlzdCk7XFxuIFxcdGZpbGVfc2V0LVxcdTAwM2Vjb3VudCsrO1xcbkBAIC0zNDIsNyArMzQyLDcgQEAgdm9pZCBsdW9fZmlsZV91bnByZXNlcnZlX2ZpbGVzKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0KVxcbiBcXG4gXFx0XFx0YXJncy5oYW5kbGVyID0gbHVvX2ZpbGUtXFx1MDAzZWZoO1xcbiBcXHRcXHRhcmdzLmZpbGUgPSBsdW9fZmlsZS1cXHUwMDNlZmlsZTtcXG4tXFx0XFx0YXJncy5zZXJpYWxpemVkX2RhdGEgPSBsdW9fZmlsZS1cXHUwMDNlc2VyaWFsaXplZF9kYXRhO1xcbitcXHRcXHRLSE9TRVJfQ09QWV9UWVBFU0FGRShhcmdzLnNlcmlhbGl6ZWRfZGF0YSwgbHVvX2ZpbGUtXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XFxuIFxcdFxcdGFyZ3MucHJpdmF0ZV9kYXRhID0gbHVvX2ZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gXFx0XFx0bHVvX2ZpbGUtXFx1MDAzZWZoLVxcdTAwM2VvcHMtXFx1MDAzZXVucHJlc2VydmUoXFx1MDAyNmFyZ3MpO1xcbiBcXHRcXHRsdW9fZmxiX2ZpbGVfdW5wcmVzZXJ2ZShsdW9fZmlsZS1cXHUwMDNlZmgpO1xcbkBAIC0zNzUsMTIgKzM3NSwxMiBAQCBzdGF0aWMgaW50IGx1b19maWxlX2ZyZWV6ZV9vbmUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsXFxuIFxcbiBcXHRcXHRhcmdzLmhhbmRsZXIgPSBsdW9fZmlsZS1cXHUwMDNlZmg7XFxuIFxcdFxcdGFyZ3MuZmlsZSA9IGx1b19maWxlLVxcdTAwM2VmaWxlO1xcbi1cXHRcXHRhcmdzLnNlcmlhbGl6ZWRfZGF0YSA9IGx1b19maWxlLVxcdTAwM2VzZXJpYWxpemVkX2RhdGE7XFxuK1xcdFxcdEtIT1NFUl9DT1BZX1RZUEVTQUZFKGFyZ3Muc2VyaWFsaXplZF9kYXRhLCBsdW9fZmlsZS1cXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcXG4gXFx0XFx0YXJncy5wcml2YXRlX2RhdGEgPSBsdW9fZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiBcXG4gXFx0XFx0ZXJyID0gbHVvX2ZpbGUtXFx1MDAzZWZoLVxcdTAwM2VvcHMtXFx1MDAzZWZyZWV6ZShcXHUwMDI2YXJncyk7XFxuIFxcdFxcdGlmICghZXJyKVxcbi1cXHRcXHRcXHRsdW9fZmlsZS1cXHUwMDNlc2VyaWFsaXplZF9kYXRhID0gYXJncy5zZXJpYWxpemVkX2RhdGE7XFxuK1xcdFxcdFxcdEtIT1NFUl9DT1BZX1RZUEVTQUZFKGx1b19maWxlLVxcdTAwM2VzZXJpYWxpemVkX2RhdGEsIGFyZ3Muc2VyaWFsaXplZF9kYXRhKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIGVycjtcXG5AQCAtMzk2LDcgKzM5Niw3IEBAIHN0YXRpYyB2b2lkIGx1b19maWxlX3VuZnJlZXplX29uZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCxcXG4gXFxuIFxcdFxcdGFyZ3MuaGFuZGxlciA9IGx1b19maWxlLVxcdTAwM2VmaDtcXG4gXFx0XFx0YXJncy5maWxlID0gbHVvX2ZpbGUtXFx1MDAzZWZpbGU7XFxuLVxcdFxcdGFyZ3Muc2VyaWFsaXplZF9kYXRhID0gbHVvX2ZpbGUtXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YTtcXG4rXFx0XFx0S0hPU0VSX0NPUFlfVFlQRVNBRkUoYXJncy5zZXJpYWxpemVkX2RhdGEsIGx1b19maWxlLVxcdTAwM2VzZXJpYWxpemVkX2RhdGEpO1xcbiBcXHRcXHRhcmdzLnByaXZhdGVfZGF0YSA9IGx1b19maWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcbiBcXHRcXHRsdW9fZmlsZS1cXHUwMDNlZmgtXFx1MDAzZW9wcy1cXHUwMDNldW5mcmVlemUoXFx1MDAyNmFyZ3MpO1xcbkBAIC00ODMsNyArNDgzLDcgQEAgaW50IGx1b19maWxlX2ZyZWV6ZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCxcXG4gXFxuIFxcdFxcdHN0cnNjcHkoZmlsZV9zZXItXFx1MDAzZWNvbXBhdGlibGUsIGx1b19maWxlLVxcdTAwM2VmaC1cXHUwMDNlY29tcGF0aWJsZSxcXG4gXFx0XFx0XFx0c2l6ZW9mKGZpbGVfc2VyLVxcdTAwM2Vjb21wYXRpYmxlKSk7XFxuLVxcdFxcdGZpbGVfc2VyLVxcdTAwM2VkYXRhID0gbHVvX2ZpbGUtXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YTtcXG4rXFx0XFx0S0hPU0VSX0NPUFlfVFlQRVNBRkUoZmlsZV9zZXItXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YSwgbHVvX2ZpbGUtXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XFxuIFxcdFxcdGZpbGVfc2VyLVxcdTAwM2V0b2tlbiA9IGx1b19maWxlLVxcdTAwM2V0b2tlbjtcXG4gXFx0fVxcbiBcXG5AQCAtNTg3LDcgKzU4Nyw3IEBAIGludCBsdW9fcmV0cmlldmVfZmlsZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCwgdTY0IHRva2VuLFxcbiBcXHR9XFxuIFxcbiBcXHRhcmdzLmhhbmRsZXIgPSBsdW9fZmlsZS1cXHUwMDNlZmg7XFxuLVxcdGFyZ3Muc2VyaWFsaXplZF9kYXRhID0gbHVvX2ZpbGUtXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YTtcXG4rXFx0S0hPU0VSX0NPUFlfVFlQRVNBRkUoYXJncy5zZXJpYWxpemVkX2RhdGEsIGx1b19maWxlLVxcdTAwM2VzZXJpYWxpemVkX2RhdGEpO1xcbiBcXHRlcnIgPSBsdW9fZmlsZS1cXHUwMDNlZmgtXFx1MDAzZW9wcy1cXHUwMDNlcmV0cmlldmUoXFx1MDAyNmFyZ3MpO1xcbiBcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdC8qIEtlZXAgdGhlIGVycm9yIGNvZGUgZm9yIGxhdGVyIHVzZS4gKi9cXG5AQCAtNjIxLDcgKzYyMSw3IEBAIHN0YXRpYyBpbnQgbHVvX2ZpbGVfY2FuX2ZpbmlzaF9vbmUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsXFxuIFxcbiBcXHRcXHRhcmdzLmhhbmRsZXIgPSBsdW9fZmlsZS1cXHUwMDNlZmg7XFxuIFxcdFxcdGFyZ3MuZmlsZSA9IGx1b19maWxlLVxcdTAwM2VmaWxlO1xcbi1cXHRcXHRhcmdzLnNlcmlhbGl6ZWRfZGF0YSA9IGx1b19maWxlLVxcdTAwM2VzZXJpYWxpemVkX2RhdGE7XFxuK1xcdFxcdEtIT1NFUl9DT1BZX1RZUEVTQUZFKGFyZ3Muc2VyaWFsaXplZF9kYXRhLCBsdW9fZmlsZS1cXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcXG4gXFx0XFx0YXJncy5yZXRyaWV2ZV9zdGF0dXMgPSBsdW9fZmlsZS1cXHUwMDNlcmV0cmlldmVfc3RhdHVzO1xcbiBcXHRcXHRjYW5fZmluaXNoID0gbHVvX2ZpbGUtXFx1MDAzZWZoLVxcdTAwM2VvcHMtXFx1MDAzZWNhbl9maW5pc2goXFx1MDAyNmFyZ3MpO1xcbiBcXHR9XFxuQEAgLTYzOCw3ICs2MzgsNyBAQCBzdGF0aWMgdm9pZCBsdW9fZmlsZV9maW5pc2hfb25lKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LFxcbiBcXG4gXFx0YXJncy5oYW5kbGVyID0gbHVvX2ZpbGUtXFx1MDAzZWZoO1xcbiBcXHRhcmdzLmZpbGUgPSBsdW9fZmlsZS1cXHUwMDNlZmlsZTtcXG4tXFx0YXJncy5zZXJpYWxpemVkX2RhdGEgPSBsdW9fZmlsZS1cXHUwMDNlc2VyaWFsaXplZF9kYXRhO1xcbitcXHRLSE9TRVJfQ09QWV9UWVBFU0FGRShhcmdzLnNlcmlhbGl6ZWRfZGF0YSwgbHVvX2ZpbGUtXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XFxuIFxcdGFyZ3MucmV0cmlldmVfc3RhdHVzID0gbHVvX2ZpbGUtXFx1MDAzZXJldHJpZXZlX3N0YXR1cztcXG4gXFxuIFxcdGx1b19maWxlLVxcdTAwM2VmaC1cXHUwMDNlb3BzLVxcdTAwM2VmaW5pc2goXFx1MDAyNmFyZ3MpO1xcbkBAIC03NDgsNyArNzQ4LDcgQEAgc3RhdGljIGludCBsdW9fZmlsZV9kZXNlcmlhbGl6ZV9vbmUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsXFxuIFxcbiBcXHRsdW9fZmlsZS1cXHUwMDNlZmggPSBmaDtcXG4gXFx0bHVvX2ZpbGUtXFx1MDAzZWZpbGUgPSBOVUxMO1xcbi1cXHRsdW9fZmlsZS1cXHUwMDNlc2VyaWFsaXplZF9kYXRhID0gc2VyLVxcdTAwM2VkYXRhO1xcbitcXHRLSE9TRVJfQ09QWV9UWVBFU0FGRShsdW9fZmlsZS1cXHUwMDNlc2VyaWFsaXplZF9kYXRhLCBzZXItXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XFxuIFxcdGx1b19maWxlLVxcdTAwM2V0b2tlbiA9IHNlci1cXHUwMDNldG9rZW47XFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNmx1b19maWxlLVxcdTAwM2VtdXRleCk7XFxuIFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmx1b19maWxlLVxcdTAwM2VsaXN0LCBcXHUwMDI2ZmlsZV9zZXQtXFx1MDAzZWZpbGVzX2xpc3QpO1xcbmRpZmYgLS1naXQgYS9tbS9tZW1mZF9sdW8uYyBiL21tL21lbWZkX2x1by5jXFxuaW5kZXggNTlkZTIxMGJlZTVmOWUuLmRhZjJjNGMzZGEzNWYzIDEwMDY0NFxcbi0tLSBhL21tL21lbWZkX2x1by5jXFxuKysrIGIvbW0vbWVtZmRfbHVvLmNcXG5AQCAtMjU3LDYgKzI1Nyw3IEBAIHN0YXRpYyB2b2lkIG1lbWZkX2x1b191bnByZXNlcnZlX2ZvbGlvcyhzdHJ1Y3Qga2hvX3ZtYWxsb2MgKmtob192bWFsbG9jLFxcbiBcXG4gc3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxcbiB7XFxuK1xcdERFQ0xBUkVfS0hPU0VSX1BUUihzZCwgc3RydWN0IG1lbWZkX2x1b19zZXIgKik7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGFyZ3MtXFx1MDAzZWZpbGUpO1xcbiBcXHRzdHJ1Y3QgbWVtZmRfbHVvX2ZvbGlvX3NlciAqZm9saW9zX3NlcjtcXG4gXFx0c3RydWN0IG1lbWZkX2x1b19zZXIgKnNlcjtcXG5AQCAtMzA5LDcgKzMxMCw4IEBAIHN0YXRpYyBpbnQgbWVtZmRfbHVvX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG4gXFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcXG4gXFxuIFxcdGFyZ3MtXFx1MDAzZXByaXZhdGVfZGF0YSA9IGZvbGlvc19zZXI7XFxuLVxcdGFyZ3MtXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YSA9IHZpcnRfdG9fcGh5cyhzZXIpO1xcbitcXHRLSE9TRVJfU1RPUkVfUFRSKHNkLCBzZXIpO1xcbitcXHRLSE9TRVJfQ09QWV9UWVBFVU5TQUZFKGFyZ3MtXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YSwgc2QpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0zMjUsMTEgKzMyNywxMCBAQCBzdGF0aWMgaW50IG1lbWZkX2x1b19mcmVlemUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxcbiB7XFxuIFxcdHN0cnVjdCBtZW1mZF9sdW9fc2VyICpzZXI7XFxuIFxcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKCFhcmdzLVxcdTAwM2VzZXJpYWxpemVkX2RhdGEpKVxcbitcXHRzZXIgPSBLSE9TRVJfTE9BRF9QVFIoYXJncy1cXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghc2VyKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRzZXIgPSBwaHlzX3RvX3ZpcnQoYXJncy1cXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcXG4tXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBwb3MgbWlnaHQgaGF2ZSBjaGFuZ2VkIHNpbmNlIHByZXBhcmUuIEV2ZXJ5dGhpbmcgZWxzZSBzdGF5cyB0aGVcXG4gXFx0ICogc2FtZS5cXG5AQCAtMzQ0LDE0ICszNDUsMTMgQEAgc3RhdGljIHZvaWQgbWVtZmRfbHVvX3VucHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShhcmdzLVxcdTAwM2VmaWxlKTtcXG4gXFx0c3RydWN0IG1lbWZkX2x1b19zZXIgKnNlcjtcXG4gXFxuLVxcdGlmIChXQVJOX09OX09OQ0UoIWFyZ3MtXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YSkpXFxuK1xcdHNlciA9IEtIT1NFUl9MT0FEX1BUUihhcmdzLVxcdTAwM2VzZXJpYWxpemVkX2RhdGEpO1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCFzZXIpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRpbm9kZV9sb2NrKGlub2RlKTtcXG4gXFx0c2htZW1fZnJlZXplKGlub2RlLCBmYWxzZSk7XFxuIFxcbi1cXHRzZXIgPSBwaHlzX3RvX3ZpcnQoYXJncy1cXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcXG4tXFxuIFxcdG1lbWZkX2x1b191bnByZXNlcnZlX2ZvbGlvcyhcXHUwMDI2c2VyLVxcdTAwM2Vmb2xpb3MsIGFyZ3MtXFx1MDAzZXByaXZhdGVfZGF0YSxcXG4gXFx0XFx0XFx0XFx0ICAgIHNlci1cXHUwMDNlbnJfZm9saW9zKTtcXG4gXFxuQEAgLTM5Nyw3ICszOTcsNyBAQCBzdGF0aWMgdm9pZCBtZW1mZF9sdW9fZmluaXNoKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG4gXFx0aWYgKGFyZ3MtXFx1MDAzZXJldHJpZXZlX3N0YXR1cylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0c2VyID0gcGh5c190b192aXJ0KGFyZ3MtXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XFxuK1xcdHNlciA9IEtIT1NFUl9MT0FEX1BUUihhcmdzLVxcdTAwM2VzZXJpYWxpemVkX2RhdGEpO1xcbiBcXHRpZiAoIXNlcilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG5AQCAtNTIyLDcgKzUyMiw3IEBAIHN0YXRpYyBpbnQgbWVtZmRfbHVvX3JldHJpZXZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG4gXFx0c3RydWN0IGZpbGUgKmZpbGU7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRzZXIgPSBwaHlzX3RvX3ZpcnQoYXJncy1cXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcXG4rXFx0c2VyID0gS0hPU0VSX0xPQURfUFRSKGFyZ3MtXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XFxuIFxcdGlmICghc2VyKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDExOjI0OjExLjAwOTcxNDYxOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5ODQyMDQ2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IGludHJvZHVjZXMgdHlwZS1zYWZlIG1hY3JvcyAoS0hPU0VSX0NPUFlfVFlQRVNBRkUsIEtIT1NFUl9MT0FEX1BUUiwgZXRjLikgZm9yIHNlcmlhbGl6aW5nIGFuZCBkZXNlcmlhbGl6aW5nIHBvaW50ZXJzIGluIHRoZSBsaXZldXBkYXRlL2tleGVjX2hhbmRvdmVyIHN1YnN5c3RlbS4gSXQgcmVwbGFjZXMgcmF3IHU2NCBmaWVsZHMgd2l0aCBhIHVuaW9uIGFuZCB1cGRhdGVzIHRoZSBhc3NpZ25tZW50cyB0byB1c2UgdGhlIG5ldyBtYWNyb3MuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGxvZ2ljIHRoYXQgd291bGQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ODJkMDc3NWY2OTZmNDM1MWE2ZmY2NzY3ODM3YjFjZWI3MWU3ZTc5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjIgMTE6MjQ6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaCBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9rZXhlY19oYW5kb3Zlci5oXG5pbmRleCA1ZTJlYjg1MTliZGE2ZC4uNjE4NDA4ZmJlOWM5MWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmhcbkBAIC0xMzksNiArMTM5LDE4IEBAXG4gXHRcdCh0eXBlb2YoKHMpLnB0cikpKChzKS5waHlzID8gcGh5c190b192aXJ0KChzKS5waHlzKSA6IE5VTEwpOyBcXFxuIFx0fSlcbiBcbisvKiBDb3BpZXMgb25lIHNlcmlhbGl6YWJsZSBwb2ludGVyIHRvIGFub3RoZXIgb2Ygc2FtZSB0eXBlLiAqL1xuKyNkZWZpbmUgS0hPU0VSX0NPUFlfVFlQRVNBRkUoZGVzdCwgc3JjKSBcXFxuK1x0KHsgXFxcbitcdFx0dHlwZWNoZWNrKHR5cGVvZigoZGVzdCkucHRyKSwgKHNyYykucHRyKTsgXFxcbitcdFx0KGRlc3QpLnBoeXMgPSAoc3JjKS5waHlzOyBcXFxuK1x0fSlcbitcbisvKiBDb3BpZXMgb25lIHNlcmlhbGl6YWJsZSBwb2ludGVyIHRvIGFub3RoZXIuICovXG4rI2RlZmluZSBLSE9TRVJfQ09QWV9UWVBFVU5TQUZFKGRlc3QsIHNyYykgXFxcbitcdCh7IFxcXG4rXHRcdChkZXN0KS5waHlzID0gKHNyYykucGh5czsgXFxcbitcdH0pXG4gLypcbiAgKiBUaGlzIGhlYWRlciBpcyBlbWJlZGRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggYGtob192bWFsbG9jX2NodW5rYFxuICAqIGFuZCBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIG5leHQgY2h1bmsgaW4gdGhlIGxpbmtlZCBsaXN0LFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2hvL2FiaS9sdW8uaCBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9sdW8uaFxuaW5kZXggMjg4MDc2ZGU2ZDRhMDkuLmQ1YjNiMWMwZmVjMTJjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9raG8vYWJpL2x1by5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2toby9hYmkvbHVvLmhcbkBAIC01OSw2ICs1OSw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYWxpZ24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2toby9hYmkvYmxvY2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbGl2ZXVwZGF0ZS5oXHUwMDNlXG4gXG4gLypcbkBAIC04OSwxNCArOTAsMTQgQEAgc3RydWN0IGx1b19zZXIge1xuIC8qKlxuICAqIHN0cnVjdCBsdW9fZmlsZV9zZXIgLSBSZXByZXNlbnRzIHRoZSBzZXJpYWxpemVkIHByZXNlcnZlcyBmaWxlcy5cbiAgKiBAY29tcGF0aWJsZTogIEZpbGUgaGFuZGxlciBjb21wYXRpYmxlIHN0cmluZy5cbi0gKiBAZGF0YTogICAgICAgIFByaXZhdGUgZGF0YVxuKyAqIEBzZXJpYWxpemVkX2RhdGE6ICBUaGUgc2VyaWFsaXplZCBwb2ludGVyIHVuaW9uIGZvciB0aGlzIGZpbGVcbiAgKiBAdG9rZW46ICAgICAgIFVzZXIgcHJvdmlkZWQgdG9rZW4gZm9yIHRoaXMgZmlsZVxuICAqXG4gICogSWYgdGhpcyBzdHJ1Y3R1cmUgaXMgbW9kaWZpZWQsIGBMVU9fQUJJX0NPTVBBVElCTEVgIG11c3QgYmUgdXBkYXRlZC5cbiAgKi9cbiBzdHJ1Y3QgbHVvX2ZpbGVfc2VyIHtcbiBcdGNoYXIgY29tcGF0aWJsZVtMSVZFVVBEQVRFX0hORExfQ09NUEFUX0xFTkdUSF07XG4tXHR1NjQgZGF0YTtcbitcdERFQ0xBUkVfS0hPU0VSX1BUUihzZXJpYWxpemVkX2RhdGEsIHZvaWQgKik7XG4gXHR1NjQgdG9rZW47XG4gfSBfX3BhY2tlZDtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oXG5pbmRleCA4ODcyMmU1Y2FmMDIwYi4uNDgwZDYzOGI3ZDE4YzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmhcbkBAIC0zMyw3ICszMyw3IEBAIHN0cnVjdCBmaWxlO1xuICAqIEBmaWxlOiAgICAgICAgICAgICBUaGUgZmlsZSBvYmplY3QuIEZvciByZXRyaWV2ZTogW09VVF0gVGhlIGNhbGxiYWNrIHNldHNcbiAgKiAgICAgICAgICAgICAgICAgICAgdGhpcyB0byB0aGUgbmV3IGZpbGUuIEZvciBvdGhlciBvcHM6IFtJTl0gVGhlIGNhbGxlciBzZXRzXG4gICogICAgICAgICAgICAgICAgICAgIHRoaXMgdG8gdGhlIGZpbGUgYmVpbmcgb3BlcmF0ZWQgb24uXG4tICogQHNlcmlhbGl6ZWRfZGF0YTogIFRoZSBvcGFxdWUgdTY0IGhhbmRsZSwgcHJlc2VydmUvcHJlcGFyZS9mcmVlemUgbWF5IHVwZGF0ZVxuKyAqIEBzZXJpYWxpemVkX2RhdGE6ICBUaGUgc2VyaWFsaXplZCBwb2ludGVyIHVuaW9uLCBwcmVzZXJ2ZS9wcmVwYXJlL2ZyZWV6ZSBtYXkgdXBkYXRlXG4gICogICAgICAgICAgICAgICAgICAgIHRoaXMgZmllbGQuXG4gICogQHByaXZhdGVfZGF0YTogICAgIFByaXZhdGUgZGF0YSBmb3IgdGhlIGZpbGUgdXNlZCB0byBob2xkIHJ1bnRpbWUgc3RhdGUgdGhhdFxuICAqICAgICAgICAgICAgICAgICAgICBpcyBub3QgcHJlc2VydmVkLiBTZXQgYnkgdGhlIGhhbmRsZXIncyAucHJlc2VydmUoKVxuQEAgLTQ3LDcgKzQ3LDcgQEAgc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzIHtcbiBcdHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqaGFuZGxlcjtcbiBcdGludCByZXRyaWV2ZV9zdGF0dXM7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbi1cdHU2NCBzZXJpYWxpemVkX2RhdGE7XG4rXHRERUNMQVJFX0tIT1NFUl9QVFIoc2VyaWFsaXplZF9kYXRhLCB2b2lkICopO1xuIFx0dm9pZCAqcHJpdmF0ZV9kYXRhO1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYyBiL2tlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmNcbmluZGV4IGMzOWY5Njk2MWE4NWJlLi43OWNmYTUyMDE4OTkxMSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmNcbisrKyBiL2tlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmNcbkBAIC0xMjUsNyArMTI1LDcgQEAgc3RhdGljIERFRklORV9YQVJSQVkobHVvX3ByZXNlcnZlZF9maWxlcyk7XG4gICogQGZpbGU6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGtlcm5lbCdzIFx1MDAyNnN0cnVjdCBmaWxlIHRoYXQgaXMgYmVpbmcgcHJlc2VydmVkLlxuICAqICAgICAgICAgICAgICAgICBUaGlzIGlzIE5VTEwgaW4gdGhlIG5ldyBrZXJuZWwgdW50aWwgdGhlIGZpbGUgaXMgc3VjY2Vzc2Z1bGx5XG4gICogICAgICAgICAgICAgICAgIHJldHJpZXZlZC5cbi0gKiBAc2VyaWFsaXplZF9kYXRhOiBUaGUgb3BhcXVlIHU2NCBoYW5kbGUgdG8gdGhlIHNlcmlhbGl6ZWQgc3RhdGUgb2YgdGhlIGZpbGUuXG4rICogQHNlcmlhbGl6ZWRfZGF0YTogVGhlIHNlcmlhbGl6ZWQgcG9pbnRlciB1bmlvbiB0byB0aGUgc2VyaWFsaXplZCBzdGF0ZSBvZiB0aGUgZmlsZS5cbiAgKiAgICAgICAgICAgICAgICAgVGhpcyBoYW5kbGUgaXMgcGFzc2VkIGJhY2sgdG8gdGhlIGhhbmRsZXIncyAuZnJlZXplKCksXG4gICogICAgICAgICAgICAgICAgIC5yZXRyaWV2ZSgpLCBhbmQgLmZpbmlzaCgpIGNhbGxiYWNrcywgYWxsb3dpbmcgaXQgdG8gdHJhY2tcbiAgKiAgICAgICAgICAgICAgICAgYW5kIHVwZGF0ZSBpdHMgc2VyaWFsaXplZCBzdGF0ZSBhY3Jvc3MgcGhhc2VzLlxuQEAgLTE2MSw3ICsxNjEsNyBAQCBzdGF0aWMgREVGSU5FX1hBUlJBWShsdW9fcHJlc2VydmVkX2ZpbGVzKTtcbiBzdHJ1Y3QgbHVvX2ZpbGUge1xuIFx0c3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaDtcbiBcdHN0cnVjdCBmaWxlICpmaWxlO1xuLVx0dTY0IHNlcmlhbGl6ZWRfZGF0YTtcbitcdERFQ0xBUkVfS0hPU0VSX1BUUihzZXJpYWxpemVkX2RhdGEsIHZvaWQgKik7XG4gXHR2b2lkICpwcml2YXRlX2RhdGE7XG4gXHRpbnQgcmV0cmlldmVfc3RhdHVzO1xuIFx0c3RydWN0IG11dGV4IG11dGV4O1xuQEAgLTI4OSw3ICsyODksNyBAQCBpbnQgbHVvX3ByZXNlcnZlX2ZpbGUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsIHU2NCB0b2tlbiwgaW50IGZkKVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfa2ZyZWU7XG4gXG4tXHRsdW9fZmlsZS1cdTAwM2VzZXJpYWxpemVkX2RhdGEgPSBhcmdzLnNlcmlhbGl6ZWRfZGF0YTtcbitcdEtIT1NFUl9DT1BZX1RZUEVTQUZFKGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSwgYXJncy5zZXJpYWxpemVkX2RhdGEpO1xuIFx0bHVvX2ZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gYXJncy5wcml2YXRlX2RhdGE7XG4gXHRsaXN0X2FkZF90YWlsKFx1MDAyNmx1b19maWxlLVx1MDAzZWxpc3QsIFx1MDAyNmZpbGVfc2V0LVx1MDAzZWZpbGVzX2xpc3QpO1xuIFx0ZmlsZV9zZXQtXHUwMDNlY291bnQrKztcbkBAIC0zNDIsNyArMzQyLDcgQEAgdm9pZCBsdW9fZmlsZV91bnByZXNlcnZlX2ZpbGVzKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0KVxuIFxuIFx0XHRhcmdzLmhhbmRsZXIgPSBsdW9fZmlsZS1cdTAwM2VmaDtcbiBcdFx0YXJncy5maWxlID0gbHVvX2ZpbGUtXHUwMDNlZmlsZTtcbi1cdFx0YXJncy5zZXJpYWxpemVkX2RhdGEgPSBsdW9fZmlsZS1cdTAwM2VzZXJpYWxpemVkX2RhdGE7XG4rXHRcdEtIT1NFUl9DT1BZX1RZUEVTQUZFKGFyZ3Muc2VyaWFsaXplZF9kYXRhLCBsdW9fZmlsZS1cdTAwM2VzZXJpYWxpemVkX2RhdGEpO1xuIFx0XHRhcmdzLnByaXZhdGVfZGF0YSA9IGx1b19maWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdFx0bHVvX2ZpbGUtXHUwMDNlZmgtXHUwMDNlb3BzLVx1MDAzZXVucHJlc2VydmUoXHUwMDI2YXJncyk7XG4gXHRcdGx1b19mbGJfZmlsZV91bnByZXNlcnZlKGx1b19maWxlLVx1MDAzZWZoKTtcbkBAIC0zNzUsMTIgKzM3NSwxMiBAQCBzdGF0aWMgaW50IGx1b19maWxlX2ZyZWV6ZV9vbmUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsXG4gXG4gXHRcdGFyZ3MuaGFuZGxlciA9IGx1b19maWxlLVx1MDAzZWZoO1xuIFx0XHRhcmdzLmZpbGUgPSBsdW9fZmlsZS1cdTAwM2VmaWxlO1xuLVx0XHRhcmdzLnNlcmlhbGl6ZWRfZGF0YSA9IGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YTtcbitcdFx0S0hPU0VSX0NPUFlfVFlQRVNBRkUoYXJncy5zZXJpYWxpemVkX2RhdGEsIGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XG4gXHRcdGFyZ3MucHJpdmF0ZV9kYXRhID0gbHVvX2ZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFxuIFx0XHRlcnIgPSBsdW9fZmlsZS1cdTAwM2VmaC1cdTAwM2VvcHMtXHUwMDNlZnJlZXplKFx1MDAyNmFyZ3MpO1xuIFx0XHRpZiAoIWVycilcbi1cdFx0XHRsdW9fZmlsZS1cdTAwM2VzZXJpYWxpemVkX2RhdGEgPSBhcmdzLnNlcmlhbGl6ZWRfZGF0YTtcbitcdFx0XHRLSE9TRVJfQ09QWV9UWVBFU0FGRShsdW9fZmlsZS1cdTAwM2VzZXJpYWxpemVkX2RhdGEsIGFyZ3Muc2VyaWFsaXplZF9kYXRhKTtcbiBcdH1cbiBcbiBcdHJldHVybiBlcnI7XG5AQCAtMzk2LDcgKzM5Niw3IEBAIHN0YXRpYyB2b2lkIGx1b19maWxlX3VuZnJlZXplX29uZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCxcbiBcbiBcdFx0YXJncy5oYW5kbGVyID0gbHVvX2ZpbGUtXHUwMDNlZmg7XG4gXHRcdGFyZ3MuZmlsZSA9IGx1b19maWxlLVx1MDAzZWZpbGU7XG4tXHRcdGFyZ3Muc2VyaWFsaXplZF9kYXRhID0gbHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhO1xuK1x0XHRLSE9TRVJfQ09QWV9UWVBFU0FGRShhcmdzLnNlcmlhbGl6ZWRfZGF0YSwgbHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbiBcdFx0YXJncy5wcml2YXRlX2RhdGEgPSBsdW9fZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXG4gXHRcdGx1b19maWxlLVx1MDAzZWZoLVx1MDAzZW9wcy1cdTAwM2V1bmZyZWV6ZShcdTAwMjZhcmdzKTtcbkBAIC00ODMsNyArNDgzLDcgQEAgaW50IGx1b19maWxlX2ZyZWV6ZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCxcbiBcbiBcdFx0c3Ryc2NweShmaWxlX3Nlci1cdTAwM2Vjb21wYXRpYmxlLCBsdW9fZmlsZS1cdTAwM2VmaC1cdTAwM2Vjb21wYXRpYmxlLFxuIFx0XHRcdHNpemVvZihmaWxlX3Nlci1cdTAwM2Vjb21wYXRpYmxlKSk7XG4tXHRcdGZpbGVfc2VyLVx1MDAzZWRhdGEgPSBsdW9fZmlsZS1cdTAwM2VzZXJpYWxpemVkX2RhdGE7XG4rXHRcdEtIT1NFUl9DT1BZX1RZUEVTQUZFKGZpbGVfc2VyLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSwgbHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbiBcdFx0ZmlsZV9zZXItXHUwMDNldG9rZW4gPSBsdW9fZmlsZS1cdTAwM2V0b2tlbjtcbiBcdH1cbiBcbkBAIC01ODcsNyArNTg3LDcgQEAgaW50IGx1b19yZXRyaWV2ZV9maWxlKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LCB1NjQgdG9rZW4sXG4gXHR9XG4gXG4gXHRhcmdzLmhhbmRsZXIgPSBsdW9fZmlsZS1cdTAwM2VmaDtcbi1cdGFyZ3Muc2VyaWFsaXplZF9kYXRhID0gbHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhO1xuK1x0S0hPU0VSX0NPUFlfVFlQRVNBRkUoYXJncy5zZXJpYWxpemVkX2RhdGEsIGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XG4gXHRlcnIgPSBsdW9fZmlsZS1cdTAwM2VmaC1cdTAwM2VvcHMtXHUwMDNlcmV0cmlldmUoXHUwMDI2YXJncyk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdC8qIEtlZXAgdGhlIGVycm9yIGNvZGUgZm9yIGxhdGVyIHVzZS4gKi9cbkBAIC02MjEsNyArNjIxLDcgQEAgc3RhdGljIGludCBsdW9fZmlsZV9jYW5fZmluaXNoX29uZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCxcbiBcbiBcdFx0YXJncy5oYW5kbGVyID0gbHVvX2ZpbGUtXHUwMDNlZmg7XG4gXHRcdGFyZ3MuZmlsZSA9IGx1b19maWxlLVx1MDAzZWZpbGU7XG4tXHRcdGFyZ3Muc2VyaWFsaXplZF9kYXRhID0gbHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhO1xuK1x0XHRLSE9TRVJfQ09QWV9UWVBFU0FGRShhcmdzLnNlcmlhbGl6ZWRfZGF0YSwgbHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbiBcdFx0YXJncy5yZXRyaWV2ZV9zdGF0dXMgPSBsdW9fZmlsZS1cdTAwM2VyZXRyaWV2ZV9zdGF0dXM7XG4gXHRcdGNhbl9maW5pc2ggPSBsdW9fZmlsZS1cdTAwM2VmaC1cdTAwM2VvcHMtXHUwMDNlY2FuX2ZpbmlzaChcdTAwMjZhcmdzKTtcbiBcdH1cbkBAIC02MzgsNyArNjM4LDcgQEAgc3RhdGljIHZvaWQgbHVvX2ZpbGVfZmluaXNoX29uZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCxcbiBcbiBcdGFyZ3MuaGFuZGxlciA9IGx1b19maWxlLVx1MDAzZWZoO1xuIFx0YXJncy5maWxlID0gbHVvX2ZpbGUtXHUwMDNlZmlsZTtcbi1cdGFyZ3Muc2VyaWFsaXplZF9kYXRhID0gbHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhO1xuK1x0S0hPU0VSX0NPUFlfVFlQRVNBRkUoYXJncy5zZXJpYWxpemVkX2RhdGEsIGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XG4gXHRhcmdzLnJldHJpZXZlX3N0YXR1cyA9IGx1b19maWxlLVx1MDAzZXJldHJpZXZlX3N0YXR1cztcbiBcbiBcdGx1b19maWxlLVx1MDAzZWZoLVx1MDAzZW9wcy1cdTAwM2VmaW5pc2goXHUwMDI2YXJncyk7XG5AQCAtNzQ4LDcgKzc0OCw3IEBAIHN0YXRpYyBpbnQgbHVvX2ZpbGVfZGVzZXJpYWxpemVfb25lKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LFxuIFxuIFx0bHVvX2ZpbGUtXHUwMDNlZmggPSBmaDtcbiBcdGx1b19maWxlLVx1MDAzZWZpbGUgPSBOVUxMO1xuLVx0bHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhID0gc2VyLVx1MDAzZWRhdGE7XG4rXHRLSE9TRVJfQ09QWV9UWVBFU0FGRShsdW9fZmlsZS1cdTAwM2VzZXJpYWxpemVkX2RhdGEsIHNlci1cdTAwM2VzZXJpYWxpemVkX2RhdGEpO1xuIFx0bHVvX2ZpbGUtXHUwMDNldG9rZW4gPSBzZXItXHUwMDNldG9rZW47XG4gXHRtdXRleF9pbml0KFx1MDAyNmx1b19maWxlLVx1MDAzZW11dGV4KTtcbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bHVvX2ZpbGUtXHUwMDNlbGlzdCwgXHUwMDI2ZmlsZV9zZXQtXHUwMDNlZmlsZXNfbGlzdCk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtZmRfbHVvLmMgYi9tbS9tZW1mZF9sdW8uY1xuaW5kZXggNTlkZTIxMGJlZTVmOWUuLmRhZjJjNGMzZGEzNWYzIDEwMDY0NFxuLS0tIGEvbW0vbWVtZmRfbHVvLmNcbisrKyBiL21tL21lbWZkX2x1by5jXG5AQCAtMjU3LDYgKzI1Nyw3IEBAIHN0YXRpYyB2b2lkIG1lbWZkX2x1b191bnByZXNlcnZlX2ZvbGlvcyhzdHJ1Y3Qga2hvX3ZtYWxsb2MgKmtob192bWFsbG9jLFxuIFxuIHN0YXRpYyBpbnQgbWVtZmRfbHVvX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcbiB7XG4rXHRERUNMQVJFX0tIT1NFUl9QVFIoc2QsIHN0cnVjdCBtZW1mZF9sdW9fc2VyICopO1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoYXJncy1cdTAwM2VmaWxlKTtcbiBcdHN0cnVjdCBtZW1mZF9sdW9fZm9saW9fc2VyICpmb2xpb3Nfc2VyO1xuIFx0c3RydWN0IG1lbWZkX2x1b19zZXIgKnNlcjtcbkBAIC0zMDksNyArMzEwLDggQEAgc3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxuIFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcbiBcbiBcdGFyZ3MtXHUwMDNlcHJpdmF0ZV9kYXRhID0gZm9saW9zX3Nlcjtcbi1cdGFyZ3MtXHUwMDNlc2VyaWFsaXplZF9kYXRhID0gdmlydF90b19waHlzKHNlcik7XG4rXHRLSE9TRVJfU1RPUkVfUFRSKHNkLCBzZXIpO1xuK1x0S0hPU0VSX0NPUFlfVFlQRVVOU0FGRShhcmdzLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSwgc2QpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMzI1LDExICszMjcsMTAgQEAgc3RhdGljIGludCBtZW1mZF9sdW9fZnJlZXplKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcbiB7XG4gXHRzdHJ1Y3QgbWVtZmRfbHVvX3NlciAqc2VyO1xuIFxuLVx0aWYgKFdBUk5fT05fT05DRSghYXJncy1cdTAwM2VzZXJpYWxpemVkX2RhdGEpKVxuK1x0c2VyID0gS0hPU0VSX0xPQURfUFRSKGFyZ3MtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbitcdGlmIChXQVJOX09OX09OQ0UoIXNlcikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0c2VyID0gcGh5c190b192aXJ0KGFyZ3MtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbi1cbiBcdC8qXG4gXHQgKiBUaGUgcG9zIG1pZ2h0IGhhdmUgY2hhbmdlZCBzaW5jZSBwcmVwYXJlLiBFdmVyeXRoaW5nIGVsc2Ugc3RheXMgdGhlXG4gXHQgKiBzYW1lLlxuQEAgLTM0NCwxNCArMzQ1LDEzIEBAIHN0YXRpYyB2b2lkIG1lbWZkX2x1b191bnByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGFyZ3MtXHUwMDNlZmlsZSk7XG4gXHRzdHJ1Y3QgbWVtZmRfbHVvX3NlciAqc2VyO1xuIFxuLVx0aWYgKFdBUk5fT05fT05DRSghYXJncy1cdTAwM2VzZXJpYWxpemVkX2RhdGEpKVxuK1x0c2VyID0gS0hPU0VSX0xPQURfUFRSKGFyZ3MtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbitcdGlmIChXQVJOX09OX09OQ0UoIXNlcikpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlub2RlX2xvY2soaW5vZGUpO1xuIFx0c2htZW1fZnJlZXplKGlub2RlLCBmYWxzZSk7XG4gXG4tXHRzZXIgPSBwaHlzX3RvX3ZpcnQoYXJncy1cdTAwM2VzZXJpYWxpemVkX2RhdGEpO1xuLVxuIFx0bWVtZmRfbHVvX3VucHJlc2VydmVfZm9saW9zKFx1MDAyNnNlci1cdTAwM2Vmb2xpb3MsIGFyZ3MtXHUwMDNlcHJpdmF0ZV9kYXRhLFxuIFx0XHRcdFx0ICAgIHNlci1cdTAwM2Vucl9mb2xpb3MpO1xuIFxuQEAgLTM5Nyw3ICszOTcsNyBAQCBzdGF0aWMgdm9pZCBtZW1mZF9sdW9fZmluaXNoKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcbiBcdGlmIChhcmdzLVx1MDAzZXJldHJpZXZlX3N0YXR1cylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0c2VyID0gcGh5c190b192aXJ0KGFyZ3MtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbitcdHNlciA9IEtIT1NFUl9MT0FEX1BUUihhcmdzLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XG4gXHRpZiAoIXNlcilcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTUyMiw3ICs1MjIsNyBAQCBzdGF0aWMgaW50IG1lbWZkX2x1b19yZXRyaWV2ZShzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3MgKmFyZ3MpXG4gXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbiBcdGludCBlcnI7XG4gXG4tXHRzZXIgPSBwaHlzX3RvX3ZpcnQoYXJncy1cdTAwM2VzZXJpYWxpemVkX2RhdGEpO1xuK1x0c2VyID0gS0hPU0VSX0xPQURfUFRSKGFyZ3MtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbiBcdGlmICghc2VyKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDExOjI0OjExLjAwOTcxNjE1OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MTcyMjM1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgU2VyaWFsaXphdGlvbi9EZXNlcmlhbGl6YXRpb24gaW4gdGhlIEtITyBTdWJzeXN0ZW0qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0J3MgYSByZWZhY3RvcmluZyBlZmZvcnQgd2l0aGluIHRoZSBsaXZldXBkYXRlL2tleGVjX2hhbmRvdmVyIChLSE8pIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIGEgbW92ZSBhd2F5IGZyb20gdXNpbmcgcmF3IGB1NjRgIGZvciBzZXJpYWxpemVkIHBvaW50ZXJzIGFuZCB0b3dhcmRzIGEgbW9yZSBzdHJ1Y3R1cmVkIGFwcHJvYWNoIGxldmVyYWdpbmcgYERFQ0xBUkVfS0hPU0VSX1BUUmAgYW5kIGFzc29jaWF0ZWQgbWFjcm9zLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gYGluY2x1ZGUvbGludXgva2hvL2FiaS9rZXhlY19oYW5kb3Zlci5oYC4gSXQgaW50cm9kdWNlcyB0d28gbmV3IG1hY3JvczogYEtIT1NFUl9DT1BZX1RZUEVTQUZFYCBhbmQgYEtIT1NFUl9DT1BZX1RZUEVVTlNBRkVgLiBJdCBsb29rcyBsaWtlIGBLSE9TRVJfQ09QWV9UWVBFU0FGRWAgcGVyZm9ybXMgYSBgdHlwZWNoZWNrYCBiZWZvcmUgY29weWluZyB0aGUgcGh5c2ljYWwgYWRkcmVzcywgd2hpbGUgYEtIT1NFUl9DT1BZX1RZUEVVTlNBRkVgIGNvcGllcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBkaXJlY3RseS4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGRlZmluaXRpb24gb2YgYERFQ0xBUkVfS0hPU0VSX1BUUmAgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBUaGUgcGF0Y2ggYWxzbyB1cGRhdGVzIHNldmVyYWwga2V5IGRhdGEgc3RydWN0dXJlcywgbmFtZWx5IGBzdHJ1Y3QgbHVvX2ZpbGVfc2VyYCBhbmQgYHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJnc2AgdG8gdXNlIHRoZXNlIG5ldyBtYWNyb3MgYW5kIHRoZSBgREVDTEFSRV9LSE9TRVJfUFRSYCBkYXRhIHN0cnVjdHVyZS5cblxuVGhlIGNoYW5nZSB0b3VjaGVzIGBrZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jYCBhbmQgYG1tL21lbWZkX2x1by5jYCwgc28gaXQncyBjbGVhcmx5IGltcGFjdGluZyB0aGUgaW1wbGVtZW50YXRpb24gc2lkZSwgdG9vLiBHaXZlbiB0aGUgZmlsZSBsb2NhdGlvbnMgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMsIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgaW1wcm92aW5nIHRoZSB3YXkgcG9pbnRlcnMgYXJlIGhhbmRsZWQgZHVyaW5nIGxpdmUgdXBkYXRlcyBhbmQga2V4ZWMgaGFuZG92ZXJzIOKAkyB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhlIG1haW4gaW1wYWN0IGlzIHJlcGxhY2luZyBhc3NpZ25tZW50cyBhbmQgcG9pbnRlciBjb252ZXJzaW9ucywgbGlrZSBgdmlydF90b19waHlzYC9gcGh5c190b192aXJ0YCwgd2l0aCB0aGUgbWFjcm9zIGBLSE9TRVJfQ09QWV9UWVBFU0FGRWAsIGBLSE9TRVJfU1RPUkVfUFRSYCwgYEtIT1NFUl9MT0FEX1BUUmAuXG5cbk5vdywgSSdtIHRyeWluZyB0byBhc2NlcnRhaW4gaWYgdGhpcyBpcyBwdXJlbHkgYSByZWZhY3RvcmluZyBmb3IgdHlwZSBzYWZldHksIG9yIGlmIHRoZXJlJ3MgYSBmdW5jdGlvbmFsIGFzcGVjdCB0byBpdC4gTG9va2luZyBhdCB0aGUgbWFjcm8gZGVmaW5pdGlvbnMsIGBLSE9TRVJfQ09QWV9UWVBFU0FGRWAgdXNlcyBgdHlwZWNoZWNrYCwgYnV0IGJvdGggbWFjcm9zIHVsdGltYXRlbHkganVzdCBjb3B5IHRoZSBgLnBoeXNgIG1lbWJlci4gVGh1cywgdGhlIG1hY3JvcyBhbG9uZSBkb24ndCBhcHBlYXIgdG8gYmUgaW50cm9kdWNpbmcgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlIGtleSBtdXN0IGxpZSBpbiBob3cgYERFQ0xBUkVfS0hPU0VSX1BUUmAgZGVmaW5lcyB0aGUgaW50ZXJuYWwgc3RydWN0dXJlIGZvciB0aGVzZSBzZXJpYWxpemVkIHBvaW50ZXJzLCBhbmQgaG93IHRoZSB2YXJpb3VzIGNvcHkgYW5kIGxvYWQgb3BlcmF0aW9ucyBhcmUgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byByZXZpZXcgYGluY2x1ZGUvbGludXgva2hvL2FiaS9rZXhlY19oYW5kb3Zlci5oYCB0byBzZWUgaG93IHRob3NlIGFyZSBzZXQgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MDEsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxMToyNDoyMC44MjY5NDIxMjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwNzg4ODY1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJERUNMQVJFX0tIT1NFUl9QVFJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmgtMTIwLS8qIEhlbHBlciBtYWNybyB0byBkZWZpbmUgYSB1bmlvbiBmb3IgYSBzZXJpYWxpemFibGUgcG9pbnRlci4gKi9cXG5pbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaDoxMjE6I2RlZmluZSBERUNMQVJFX0tIT1NFUl9QVFIobmFtZSwgdHlwZSlcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmgtMTIyLVxcdHVuaW9uIHsgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaD0xNTk9c3RydWN0IGtob192bWFsbG9jX2hkciB7XFxuaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmg6MTYwOlxcdERFQ0xBUkVfS0hPU0VSX1BUUihuZXh0LCBzdHJ1Y3Qga2hvX3ZtYWxsb2NfY2h1bmsgKik7XFxuaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmgtMTYxLX07XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaD0xODU9c3RydWN0IGtob192bWFsbG9jIHtcXG5pbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaDoxODY6XFx0REVDTEFSRV9LSE9TRVJfUFRSKGZpcnN0LCBzdHJ1Y3Qga2hvX3ZtYWxsb2NfY2h1bmsgKik7XFxuaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmgtMTg3LVxcdHVuc2lnbmVkIGludCB0b3RhbF9wYWdlcztcXG4tLVxcbmluY2x1ZGUvbGludXgva2hvL2FiaS9sdW8uaD05OD1zdHJ1Y3QgbHVvX2ZpbGVfc2VyIHtcXG5pbmNsdWRlL2xpbnV4L2toby9hYmkvbHVvLmgtOTktXFx0Y2hhciBjb21wYXRpYmxlW0xJVkVVUERBVEVfSE5ETF9DT01QQVRfTEVOR1RIXTtcXG5pbmNsdWRlL2xpbnV4L2toby9hYmkvbHVvLmg6MTAwOlxcdERFQ0xBUkVfS0hPU0VSX1BUUihzZXJpYWxpemVkX2RhdGEsIHZvaWQgKik7XFxuaW5jbHVkZS9saW51eC9raG8vYWJpL2x1by5oLTEwMS1cXHR1NjQgdG9rZW47XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaD00Nj1zdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3Mge1xcbi0tXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtNDktXFx0c3RydWN0IGZpbGUgKmZpbGU7XFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6NTA6XFx0REVDTEFSRV9LSE9TRVJfUFRSKHNlcmlhbGl6ZWRfZGF0YSwgdm9pZCAqKTtcXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC01MS1cXHR2b2lkICpwcml2YXRlX2RhdGE7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jPTE2MT1zdHJ1Y3QgbHVvX2ZpbGUge1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy0xNjMtXFx0c3RydWN0IGZpbGUgKmZpbGU7XFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzoxNjQ6XFx0REVDTEFSRV9LSE9TRVJfUFRSKHNlcmlhbGl6ZWRfZGF0YSwgdm9pZCAqKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTE2NS1cXHR2b2lkICpwcml2YXRlX2RhdGE7XFxuLS1cXG5tbS9tZW1mZF9sdW8uYz0yNTg9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxcbm1tL21lbWZkX2x1by5jLTI1OS17XFxubW0vbWVtZmRfbHVvLmM6MjYwOlxcdERFQ0xBUkVfS0hPU0VSX1BUUihzZCwgc3RydWN0IG1lbWZkX2x1b19zZXIgKik7XFxubW0vbWVtZmRfbHVvLmMtMjYxLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGFyZ3MtXFx1MDAzZWZpbGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxMToyNDoyMy4xMzQ4MzU5NzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODg1OTA1NzIyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUG9pbnRlciBTZXJpYWxpemF0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFib3V0IGhvdyBwb2ludGVycyBhcmUgc2VyaWFsaXplZCBhbmQgZGVzZXJpYWxpemVkIHdpdGhpbiB0aGlzIHN5c3RlbS4gSXQgcmVwbGFjZXMgYSBzdHJhaWdodGZvcndhcmQgYHU2NGAgZm9yIHN0b3JpbmcgcGh5c2ljYWwgYWRkcmVzc2VzIHdpdGggYSBgdW5pb25gIGNvbnRhaW5pbmcgYm90aCBhIHBvaW50ZXIgKGBwdHJgKSBhbmQgYSBwaHlzaWNhbCBhZGRyZXNzIChgcGh5c2ApIOKAkyBlc3NlbnRpYWxseSwgYSB0eXBlZCB3cmFwcGVyIGFyb3VuZCB0aGUgZXhpc3RpbmcgcGh5c2ljYWwgYWRkcmVzcyByZXByZXNlbnRhdGlvbi5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzY2VydGFpbiBpZiB0aGlzIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0cywgdGhlICphY3R1YWwqIG1lY2hhbmljcyByZW1haW4gY29uc2lzdGVudC4gVGhlIG9sZCBtZXRob2Qgc3RvcmVkIHRoZSByZXN1bHQgb2YgYHZpcnRfdG9fcGh5cyhzZXIpYCBkaXJlY3RseSBpbnRvIGEgYHU2NGAuIFRoZSBuZXcgbWV0aG9kIHVzZXMgbWFjcm9zLCBgS0hPU0VSX1NUT1JFX1BUUmAgYW5kIGBLSE9TRVJfTE9BRF9QVFJgLCBidXQgZXNzZW50aWFsbHkgZG9lcyB0aGUgKnNhbWUqIHRoaW5nOiBzdG9yZXMgYHZpcnRfdG9fcGh5cyhwKWAgKG9yIHplcm8gaWYgdGhlIHBvaW50ZXIgaXMgbnVsbCkgaW50byB0aGUgYC5waHlzYCBtZW1iZXIsIGFuZCBsb2FkcyBpdCBiYWNrIHVzaW5nIGBwaHlzX3RvX3ZpcnRgLiBUaGUga2V5IGRpZmZlcmVuY2VzIEkgc2VlIGFyZSB0eXBlIHNhZmV0eSBhbmQgcmVhZGFiaWxpdHksIHdoaWNoIGlzIGdvb2QuXG5cblRoZSBmYWN0IHRoYXQgYGx1b19maWxlX3NlcmAgaXMgcGFydCBvZiB0aGUgQUJJIHJhaXNlcyBhIGNvbmNlcm4uIFRoaXMgaXMgYW4gYXJlYSB3aGVyZSBjaGFuZ2VzIG5lZWQgdG8gYmUgZXNwZWNpYWxseSB3ZWxsIHNjcnV0aW5pemVkLiBIb3dldmVyLCB0aGUgYERFQ0xBUkVfS0hPU0VSX1BUUmAgbWFjcm8gZW5zdXJlcyB0aGUgc2l6ZSBhbmQgbGF5b3V0IG9mIHRoZSBgbHVvX2ZpbGVfc2VyYCBzdHJ1Y3QgcmVtYWlucyBpZGVudGljYWwgYmVjYXVzZSBib3RoIHRoZSBwb2ludGVyIGFuZCB0aGUgYHU2NGAgYXJlIDggYnl0ZXMgZWFjaCwgdGhlIHNpemUgb2YgdGhlIHVuaW9uLiBUaGUgc3RydWN0dXJlJ3Mgc2l6ZSBpc24ndCBpbXBhY3RlZCBieSB0aGlzIGNoYW5nZS4gSXQncyBhIHJlZmFjdG9yaW5nIHRvIGltcHJvdmUgY2xhcml0eS5cblxuRGlnZ2luZyBkZWVwZXIsIEkgc2VlIGEgY2hlY2s6IGBpZiAoV0FSTl9PTl9PTkNFKCFhcmdzLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSkpYC4gVGhpcyBoYXMgYmVlbiB1cGRhdGVkIHRvIHVzZSB0aGUgbWFjcm86IGBzZXIgPSBLSE9TRVJfTE9BRF9QVFIoYXJncy1cdTAwM2VzZXJpYWxpemVkX2RhdGEpOyBpZiAoV0FSTl9PTl9PTkNFKCFzZXIpKWAuIFByZXZpb3VzbHksIGl0IGNoZWNrZWQgYSBgdTY0YCBkaXJlY3RseTsgbm93IGl0IGNoZWNrcyB0aGUgZGVyZWZlcmVuY2VkIHBvaW50ZXIgZnJvbSB0aGF0IGB1NjRgLiBgS0hPU0VSX0xPQURfUFRSYCBoYW5kbGVzIHRoZSB0cmFuc2xhdGlvbiwgYW5kIGNvcnJlY3RseSByZXR1cm5zIGBOVUxMYCBpZiB0aGUgYC5waHlzYCBtZW1iZXIgaXMgemVyby4gVGhpcywgb24gaXRzIGZhY2UsIGFwcGVhcnMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbC4gSWYgYHBoeXNgIGlzIHplcm8sIGl0IGNvcnJlY3RseSByZXR1cm5zIGBOVUxMYCwgYW5kIHRoZSB3YXJuaW5nIGZpcmVzIGFzIGl0IHNob3VsZC5cblxuTm93LCBoZXJlJ3MgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBwb2ludC4gSW4gdGhlIG9sZGVyIHZlcnNpb24sIGBwaHlzX3RvX3ZpcnQoMClgICptaWdodCogbm90IG5lY2Vzc2FyaWx5IHJldHVybiBgTlVMTGAgb24gYWxsIGFyY2hpdGVjdHVyZXMuIE9uIHg4NiwgZm9yIGluc3RhbmNlLCBgcGh5c190b192aXJ0KDApYCB3b3VsZCByZXR1cm4gYFBBR0VfT0ZGU0VUYCwgd2hpY2ggaXMgKm5vdCogemVyby4gVGhpcyBjb3VsZCBjcmVhdGUgYSBkaXZlcmdlbmNlLiBIb3dldmVyLCB0aGUgY29kZSdzIGJlaGF2aW9yICpzaG91bGRuJ3QqIGRlcGVuZCBvbiBgcGh5c190b192aXJ0KDApYCB5aWVsZGluZyBgTlVMTGAsIGJ1dCBvbiB0aGUgdmFsdWUgYmVpbmcgdW5pbml0aWFsaXplZC4gSXQgc2VlbXMgbGlrZSB0aGUgb3JpZ2luYWwgY29kZSBkaWQgbm90IGFjY291bnQgZm9yIHRoYXQgZWRnZSBjYXNlLCBhbmQgaGFzIG5vdyBiZWVuIGNvcnJlY3RlZCAoaW4gYSBtaW5vciB3YXksIGl0IHNlZW1zKSBiZWNhdXNlIGBLSE9TRVJfTE9BRF9QVFJgICphbHdheXMqIHJldHVybnMgYE5VTExgIHdoZW4gYC5waHlzYCBpcyAwLlxuXG5Mb29raW5nIGF0IHdoZXJlIHRoZSBgc2VyaWFsaXplZF9kYXRhYCBpcyBpbml0aWFsaXplZCwgaXQgaXMgc2V0IHdpdGggYHZpcnRfdG9fcGh5cyhzZXIpYCB3aGVyZSBgc2VyYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AuIFNvLCBgdmlydF90b19waHlzKHNlcilgIGlzIG5vdCB6ZXJvLCBhbmQgYGFyZ3MtXHUwMDNlc2VyaWFsaXplZF9kYXRhYCB3b3VsZCBub3QgYmUgemVyby4gSXQncyBzYWZlIHRvIGFzc3VtZSB0aGF0IGBhcmdzLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YWAgc2hvdWxkIG5ldmVyIGJlIDAgaW4gcHJhY3RpY2UgYW5kIGl0IGlzIGEgYnVnIGlmIGl0IGlzLiBTbywgZnVuY3Rpb25hbGx5LCB0aGUgY2hhbmdlIG1ha2VzIGEgc21hbGwgY29ycmVjdGlvbiBpbiB0aGUgcmFyZSBldmVudCBvZiBgYXJncy1cdTAwM2VzZXJpYWxpemVkX2RhdGFgIGJlaW5nIHVuaW5pdGlhbGl6ZWQsIGFuZCBkb2VzIG5vdCBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb3IgaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbCBsb2dpYy5cblxuSW4gY29uY2x1c2lvbiwgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgaXMgYSBwdXJlbHkgcmVmYWN0b3JpbmcgcGF0Y2gsIGFpbWVkIGF0IGltcHJvdmluZyB0eXBlIHNhZmV0eSBhbmQgcG90ZW50aWFsbHkgZml4aW5nIGEgbWlub3IgdGhlb3JldGljYWwgYnVnIHJlbGF0ZWQgdG8gaG93IGBwaHlzX3RvX3ZpcnQoMClgIGlzIGhhbmRsZWQuIFNpbmNlIGl0J3MgYSByZWZhY3RvcmluZyBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBsb2dpYyBvciBleHBvc2UgbmV3IGF0dGFjayBzdXJmYWNlcywgSSB3b3VsZCBjbGFzc2lmeSB0aGlzIGFzIFdvcnRoRnV6emluZz1mYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIyMSwiT3V0cHV0VG9rZW5zIjoxMjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDExOjI0OjQxLjk5Mzg5NTEwNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIHRoYXQgaW50cm9kdWNlcyB0eXBlLXNhZmUgbWFjcm9zIChLSE9TRVJfQ09QWV9UWVBFU0FGRSwgS0hPU0VSX0xPQURfUFRSLCBldGMuKSBmb3Igc2VyaWFsaXppbmcgYW5kIGRlc2VyaWFsaXppbmcgcG9pbnRlcnMgaW4gdGhlIGxpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIgc3Vic3lzdGVtLiBJdCByZXBsYWNlcyByYXcgdTY0IGZpZWxkcyB3aXRoIGEgdW5pb24gYW5kIHVwZGF0ZXMgdGhlIGFzc2lnbm1lbnRzIHRvIHVzZSB0aGUgbmV3IG1hY3Jvcy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZXhlY3V0aW9uIGZsb3cgb3IgbG9naWMgdGhhdCB3b3VsZCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCBpbnRyb2R1Y2VzIHR5cGUtc2FmZSBtYWNyb3MgKEtIT1NFUl9DT1BZX1RZUEVTQUZFLCBLSE9TRVJfTE9BRF9QVFIsIGV0Yy4pIGZvciBzZXJpYWxpemluZyBhbmQgZGVzZXJpYWxpemluZyBwb2ludGVycyBpbiB0aGUgbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3ZlciBzdWJzeXN0ZW0uIEl0IHJlcGxhY2VzIHJhdyB1NjQgZmllbGRzIHdpdGggYSB1bmlvbiBhbmQgdXBkYXRlcyB0aGUgYXNzaWdubWVudHMgdG8gdXNlIHRoZSBuZXcgbWFjcm9zLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBleGVjdXRpb24gZmxvdyBvciBsb2dpYyB0aGF0IHdvdWxkIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowf52tw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-22 11:17:04 +0000 UTC FinishedAt: 2026-06-22 11:24:43 +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+CgkJCTx0ZD4yMDI2LzA2LzIyIDExOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IGludHJvZHVjZXMgdHlwZS1zYWZlIG1hY3JvcyAoS0hPU0VSX0NPUFlfVFlQRVNBRkUsIEtIT1NFUl9MT0FEX1BUUiwgZXRjLikgZm9yIHNlcmlhbGl6aW5nIGFuZCBkZXNlcmlhbGl6aW5nIHBvaW50ZXJzIGluIHRoZSBsaXZldXBkYXRlL2tleGVjX2hhbmRvdmVyIHN1YnN5c3RlbS4gSXQgcmVwbGFjZXMgcmF3IHU2NCBmaWVsZHMgd2l0aCBhIHVuaW9uIGFuZCB1cGRhdGVzIHRoZSBhc3NpZ25tZW50cyB0byB1c2UgdGhlIG5ldyBtYWNyb3MuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGxvZ2ljIHRoYXQgd291bGQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAxMToyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY4MmQwNzc1ZjY5NmY0MzUxYTZmZjY3Njc4MzdiMWNlYjcxZTdlNzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyMiAxMToyNDowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaCBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9rZXhlY19oYW5kb3Zlci5oXG5pbmRleCA1ZTJlYjg1MTliZGE2ZC4uNjE4NDA4ZmJlOWM5MWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmhcbkBAIC0xMzksNiAmIzQzOzEzOSwxOCBAQFxuIFx0XHQodHlwZW9mKChzKS5wdHIpKSgocykucGh5cyA/IHBoeXNfdG9fdmlydCgocykucGh5cykgOiBOVUxMKTsgXFxcbiBcdH0pXG4gXG4mIzQzOy8qIENvcGllcyBvbmUgc2VyaWFsaXphYmxlIHBvaW50ZXIgdG8gYW5vdGhlciBvZiBzYW1lIHR5cGUuICovXG4mIzQzOyNkZWZpbmUgS0hPU0VSX0NPUFlfVFlQRVNBRkUoZGVzdCwgc3JjKSBcXFxuJiM0MztcdCh7IFxcXG4mIzQzO1x0XHR0eXBlY2hlY2sodHlwZW9mKChkZXN0KS5wdHIpLCAoc3JjKS5wdHIpOyBcXFxuJiM0MztcdFx0KGRlc3QpLnBoeXMgPSAoc3JjKS5waHlzOyBcXFxuJiM0MztcdH0pXG4mIzQzO1xuJiM0MzsvKiBDb3BpZXMgb25lIHNlcmlhbGl6YWJsZSBwb2ludGVyIHRvIGFub3RoZXIuICovXG4mIzQzOyNkZWZpbmUgS0hPU0VSX0NPUFlfVFlQRVVOU0FGRShkZXN0LCBzcmMpIFxcXG4mIzQzO1x0KHsgXFxcbiYjNDM7XHRcdChkZXN0KS5waHlzID0gKHNyYykucGh5czsgXFxcbiYjNDM7XHR9KVxuIC8qXG4gICogVGhpcyBoZWFkZXIgaXMgZW1iZWRkZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGBraG9fdm1hbGxvY19jaHVua2BcbiAgKiBhbmQgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IGNodW5rIGluIHRoZSBsaW5rZWQgbGlzdCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2toby9hYmkvbHVvLmggYi9pbmNsdWRlL2xpbnV4L2toby9hYmkvbHVvLmhcbmluZGV4IDI4ODA3NmRlNmQ0YTA5Li5kNWIzYjFjMGZlYzEyYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva2hvL2FiaS9sdW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9raG8vYWJpL2x1by5oXG5AQCAtNTksNiAmIzQzOzU5LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hbGlnbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2hvL2FiaS9ibG9jay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbGl2ZXVwZGF0ZS5oXHUwMDNlXG4gXG4gLypcbkBAIC04OSwxNCAmIzQzOzkwLDE0IEBAIHN0cnVjdCBsdW9fc2VyIHtcbiAvKipcbiAgKiBzdHJ1Y3QgbHVvX2ZpbGVfc2VyIC0gUmVwcmVzZW50cyB0aGUgc2VyaWFsaXplZCBwcmVzZXJ2ZXMgZmlsZXMuXG4gICogQGNvbXBhdGlibGU6ICBGaWxlIGhhbmRsZXIgY29tcGF0aWJsZSBzdHJpbmcuXG4tICogQGRhdGE6ICAgICAgICBQcml2YXRlIGRhdGFcbiYjNDM7ICogQHNlcmlhbGl6ZWRfZGF0YTogIFRoZSBzZXJpYWxpemVkIHBvaW50ZXIgdW5pb24gZm9yIHRoaXMgZmlsZVxuICAqIEB0b2tlbjogICAgICAgVXNlciBwcm92aWRlZCB0b2tlbiBmb3IgdGhpcyBmaWxlXG4gICpcbiAgKiBJZiB0aGlzIHN0cnVjdHVyZSBpcyBtb2RpZmllZCwgYExVT19BQklfQ09NUEFUSUJMRWAgbXVzdCBiZSB1cGRhdGVkLlxuICAqL1xuIHN0cnVjdCBsdW9fZmlsZV9zZXIge1xuIFx0Y2hhciBjb21wYXRpYmxlW0xJVkVVUERBVEVfSE5ETF9DT01QQVRfTEVOR1RIXTtcbi1cdHU2NCBkYXRhO1xuJiM0MztcdERFQ0xBUkVfS0hPU0VSX1BUUihzZXJpYWxpemVkX2RhdGEsIHZvaWQgKik7XG4gXHR1NjQgdG9rZW47XG4gfSBfX3BhY2tlZDtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oXG5pbmRleCA4ODcyMmU1Y2FmMDIwYi4uNDgwZDYzOGI3ZDE4YzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmhcbkBAIC0zMyw3ICYjNDM7MzMsNyBAQCBzdHJ1Y3QgZmlsZTtcbiAgKiBAZmlsZTogICAgICAgICAgICAgVGhlIGZpbGUgb2JqZWN0LiBGb3IgcmV0cmlldmU6IFtPVVRdIFRoZSBjYWxsYmFjayBzZXRzXG4gICogICAgICAgICAgICAgICAgICAgIHRoaXMgdG8gdGhlIG5ldyBmaWxlLiBGb3Igb3RoZXIgb3BzOiBbSU5dIFRoZSBjYWxsZXIgc2V0c1xuICAqICAgICAgICAgICAgICAgICAgICB0aGlzIHRvIHRoZSBmaWxlIGJlaW5nIG9wZXJhdGVkIG9uLlxuLSAqIEBzZXJpYWxpemVkX2RhdGE6ICBUaGUgb3BhcXVlIHU2NCBoYW5kbGUsIHByZXNlcnZlL3ByZXBhcmUvZnJlZXplIG1heSB1cGRhdGVcbiYjNDM7ICogQHNlcmlhbGl6ZWRfZGF0YTogIFRoZSBzZXJpYWxpemVkIHBvaW50ZXIgdW5pb24sIHByZXNlcnZlL3ByZXBhcmUvZnJlZXplIG1heSB1cGRhdGVcbiAgKiAgICAgICAgICAgICAgICAgICAgdGhpcyBmaWVsZC5cbiAgKiBAcHJpdmF0ZV9kYXRhOiAgICAgUHJpdmF0ZSBkYXRhIGZvciB0aGUgZmlsZSB1c2VkIHRvIGhvbGQgcnVudGltZSBzdGF0ZSB0aGF0XG4gICogICAgICAgICAgICAgICAgICAgIGlzIG5vdCBwcmVzZXJ2ZWQuIFNldCBieSB0aGUgaGFuZGxlciYjMzk7cyAucHJlc2VydmUoKVxuQEAgLTQ3LDcgJiM0Mzs0Nyw3IEBAIHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyB7XG4gXHRzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmhhbmRsZXI7XG4gXHRpbnQgcmV0cmlldmVfc3RhdHVzO1xuIFx0c3RydWN0IGZpbGUgKmZpbGU7XG4tXHR1NjQgc2VyaWFsaXplZF9kYXRhO1xuJiM0MztcdERFQ0xBUkVfS0hPU0VSX1BUUihzZXJpYWxpemVkX2RhdGEsIHZvaWQgKik7XG4gXHR2b2lkICpwcml2YXRlX2RhdGE7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jIGIva2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuY1xuaW5kZXggYzM5Zjk2OTYxYTg1YmUuLjc5Y2ZhNTIwMTg5OTExIDEwMDY0NFxuLS0tIGEva2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuY1xuQEAgLTEyNSw3ICYjNDM7MTI1LDcgQEAgc3RhdGljIERFRklORV9YQVJSQVkobHVvX3ByZXNlcnZlZF9maWxlcyk7XG4gICogQGZpbGU6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGtlcm5lbCYjMzk7cyBcdTAwMjZzdHJ1Y3QgZmlsZSB0aGF0IGlzIGJlaW5nIHByZXNlcnZlZC5cbiAgKiAgICAgICAgICAgICAgICAgVGhpcyBpcyBOVUxMIGluIHRoZSBuZXcga2VybmVsIHVudGlsIHRoZSBmaWxlIGlzIHN1Y2Nlc3NmdWxseVxuICAqICAgICAgICAgICAgICAgICByZXRyaWV2ZWQuXG4tICogQHNlcmlhbGl6ZWRfZGF0YTogVGhlIG9wYXF1ZSB1NjQgaGFuZGxlIHRvIHRoZSBzZXJpYWxpemVkIHN0YXRlIG9mIHRoZSBmaWxlLlxuJiM0MzsgKiBAc2VyaWFsaXplZF9kYXRhOiBUaGUgc2VyaWFsaXplZCBwb2ludGVyIHVuaW9uIHRvIHRoZSBzZXJpYWxpemVkIHN0YXRlIG9mIHRoZSBmaWxlLlxuICAqICAgICAgICAgICAgICAgICBUaGlzIGhhbmRsZSBpcyBwYXNzZWQgYmFjayB0byB0aGUgaGFuZGxlciYjMzk7cyAuZnJlZXplKCksXG4gICogICAgICAgICAgICAgICAgIC5yZXRyaWV2ZSgpLCBhbmQgLmZpbmlzaCgpIGNhbGxiYWNrcywgYWxsb3dpbmcgaXQgdG8gdHJhY2tcbiAgKiAgICAgICAgICAgICAgICAgYW5kIHVwZGF0ZSBpdHMgc2VyaWFsaXplZCBzdGF0ZSBhY3Jvc3MgcGhhc2VzLlxuQEAgLTE2MSw3ICYjNDM7MTYxLDcgQEAgc3RhdGljIERFRklORV9YQVJSQVkobHVvX3ByZXNlcnZlZF9maWxlcyk7XG4gc3RydWN0IGx1b19maWxlIHtcbiBcdHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmg7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbi1cdHU2NCBzZXJpYWxpemVkX2RhdGE7XG4mIzQzO1x0REVDTEFSRV9LSE9TRVJfUFRSKHNlcmlhbGl6ZWRfZGF0YSwgdm9pZCAqKTtcbiBcdHZvaWQgKnByaXZhdGVfZGF0YTtcbiBcdGludCByZXRyaWV2ZV9zdGF0dXM7XG4gXHRzdHJ1Y3QgbXV0ZXggbXV0ZXg7XG5AQCAtMjg5LDcgJiM0MzsyODksNyBAQCBpbnQgbHVvX3ByZXNlcnZlX2ZpbGUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsIHU2NCB0b2tlbiwgaW50IGZkKVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfa2ZyZWU7XG4gXG4tXHRsdW9fZmlsZS1cdTAwM2VzZXJpYWxpemVkX2RhdGEgPSBhcmdzLnNlcmlhbGl6ZWRfZGF0YTtcbiYjNDM7XHRLSE9TRVJfQ09QWV9UWVBFU0FGRShsdW9fZmlsZS1cdTAwM2VzZXJpYWxpemVkX2RhdGEsIGFyZ3Muc2VyaWFsaXplZF9kYXRhKTtcbiBcdGx1b19maWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IGFyZ3MucHJpdmF0ZV9kYXRhO1xuIFx0bGlzdF9hZGRfdGFpbChcdTAwMjZsdW9fZmlsZS1cdTAwM2VsaXN0LCBcdTAwMjZmaWxlX3NldC1cdTAwM2VmaWxlc19saXN0KTtcbiBcdGZpbGVfc2V0LVx1MDAzZWNvdW50JiM0MzsmIzQzOztcbkBAIC0zNDIsNyAmIzQzOzM0Miw3IEBAIHZvaWQgbHVvX2ZpbGVfdW5wcmVzZXJ2ZV9maWxlcyhzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldClcbiBcbiBcdFx0YXJncy5oYW5kbGVyID0gbHVvX2ZpbGUtXHUwMDNlZmg7XG4gXHRcdGFyZ3MuZmlsZSA9IGx1b19maWxlLVx1MDAzZWZpbGU7XG4tXHRcdGFyZ3Muc2VyaWFsaXplZF9kYXRhID0gbHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhO1xuJiM0MztcdFx0S0hPU0VSX0NPUFlfVFlQRVNBRkUoYXJncy5zZXJpYWxpemVkX2RhdGEsIGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XG4gXHRcdGFyZ3MucHJpdmF0ZV9kYXRhID0gbHVvX2ZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0XHRsdW9fZmlsZS1cdTAwM2VmaC1cdTAwM2VvcHMtXHUwMDNldW5wcmVzZXJ2ZShcdTAwMjZhcmdzKTtcbiBcdFx0bHVvX2ZsYl9maWxlX3VucHJlc2VydmUobHVvX2ZpbGUtXHUwMDNlZmgpO1xuQEAgLTM3NSwxMiAmIzQzOzM3NSwxMiBAQCBzdGF0aWMgaW50IGx1b19maWxlX2ZyZWV6ZV9vbmUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsXG4gXG4gXHRcdGFyZ3MuaGFuZGxlciA9IGx1b19maWxlLVx1MDAzZWZoO1xuIFx0XHRhcmdzLmZpbGUgPSBsdW9fZmlsZS1cdTAwM2VmaWxlO1xuLVx0XHRhcmdzLnNlcmlhbGl6ZWRfZGF0YSA9IGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YTtcbiYjNDM7XHRcdEtIT1NFUl9DT1BZX1RZUEVTQUZFKGFyZ3Muc2VyaWFsaXplZF9kYXRhLCBsdW9fZmlsZS1cdTAwM2VzZXJpYWxpemVkX2RhdGEpO1xuIFx0XHRhcmdzLnByaXZhdGVfZGF0YSA9IGx1b19maWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcbiBcdFx0ZXJyID0gbHVvX2ZpbGUtXHUwMDNlZmgtXHUwMDNlb3BzLVx1MDAzZWZyZWV6ZShcdTAwMjZhcmdzKTtcbiBcdFx0aWYgKCFlcnIpXG4tXHRcdFx0bHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhID0gYXJncy5zZXJpYWxpemVkX2RhdGE7XG4mIzQzO1x0XHRcdEtIT1NFUl9DT1BZX1RZUEVTQUZFKGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSwgYXJncy5zZXJpYWxpemVkX2RhdGEpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGVycjtcbkBAIC0zOTYsNyAmIzQzOzM5Niw3IEBAIHN0YXRpYyB2b2lkIGx1b19maWxlX3VuZnJlZXplX29uZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCxcbiBcbiBcdFx0YXJncy5oYW5kbGVyID0gbHVvX2ZpbGUtXHUwMDNlZmg7XG4gXHRcdGFyZ3MuZmlsZSA9IGx1b19maWxlLVx1MDAzZWZpbGU7XG4tXHRcdGFyZ3Muc2VyaWFsaXplZF9kYXRhID0gbHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhO1xuJiM0MztcdFx0S0hPU0VSX0NPUFlfVFlQRVNBRkUoYXJncy5zZXJpYWxpemVkX2RhdGEsIGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XG4gXHRcdGFyZ3MucHJpdmF0ZV9kYXRhID0gbHVvX2ZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFxuIFx0XHRsdW9fZmlsZS1cdTAwM2VmaC1cdTAwM2VvcHMtXHUwMDNldW5mcmVlemUoXHUwMDI2YXJncyk7XG5AQCAtNDgzLDcgJiM0Mzs0ODMsNyBAQCBpbnQgbHVvX2ZpbGVfZnJlZXplKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LFxuIFxuIFx0XHRzdHJzY3B5KGZpbGVfc2VyLVx1MDAzZWNvbXBhdGlibGUsIGx1b19maWxlLVx1MDAzZWZoLVx1MDAzZWNvbXBhdGlibGUsXG4gXHRcdFx0c2l6ZW9mKGZpbGVfc2VyLVx1MDAzZWNvbXBhdGlibGUpKTtcbi1cdFx0ZmlsZV9zZXItXHUwMDNlZGF0YSA9IGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YTtcbiYjNDM7XHRcdEtIT1NFUl9DT1BZX1RZUEVTQUZFKGZpbGVfc2VyLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSwgbHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbiBcdFx0ZmlsZV9zZXItXHUwMDNldG9rZW4gPSBsdW9fZmlsZS1cdTAwM2V0b2tlbjtcbiBcdH1cbiBcbkBAIC01ODcsNyAmIzQzOzU4Nyw3IEBAIGludCBsdW9fcmV0cmlldmVfZmlsZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCwgdTY0IHRva2VuLFxuIFx0fVxuIFxuIFx0YXJncy5oYW5kbGVyID0gbHVvX2ZpbGUtXHUwMDNlZmg7XG4tXHRhcmdzLnNlcmlhbGl6ZWRfZGF0YSA9IGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YTtcbiYjNDM7XHRLSE9TRVJfQ09QWV9UWVBFU0FGRShhcmdzLnNlcmlhbGl6ZWRfZGF0YSwgbHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbiBcdGVyciA9IGx1b19maWxlLVx1MDAzZWZoLVx1MDAzZW9wcy1cdTAwM2VyZXRyaWV2ZShcdTAwMjZhcmdzKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0LyogS2VlcCB0aGUgZXJyb3IgY29kZSBmb3IgbGF0ZXIgdXNlLiAqL1xuQEAgLTYyMSw3ICYjNDM7NjIxLDcgQEAgc3RhdGljIGludCBsdW9fZmlsZV9jYW5fZmluaXNoX29uZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCxcbiBcbiBcdFx0YXJncy5oYW5kbGVyID0gbHVvX2ZpbGUtXHUwMDNlZmg7XG4gXHRcdGFyZ3MuZmlsZSA9IGx1b19maWxlLVx1MDAzZWZpbGU7XG4tXHRcdGFyZ3Muc2VyaWFsaXplZF9kYXRhID0gbHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhO1xuJiM0MztcdFx0S0hPU0VSX0NPUFlfVFlQRVNBRkUoYXJncy5zZXJpYWxpemVkX2RhdGEsIGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XG4gXHRcdGFyZ3MucmV0cmlldmVfc3RhdHVzID0gbHVvX2ZpbGUtXHUwMDNlcmV0cmlldmVfc3RhdHVzO1xuIFx0XHRjYW5fZmluaXNoID0gbHVvX2ZpbGUtXHUwMDNlZmgtXHUwMDNlb3BzLVx1MDAzZWNhbl9maW5pc2goXHUwMDI2YXJncyk7XG4gXHR9XG5AQCAtNjM4LDcgJiM0Mzs2MzgsNyBAQCBzdGF0aWMgdm9pZCBsdW9fZmlsZV9maW5pc2hfb25lKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LFxuIFxuIFx0YXJncy5oYW5kbGVyID0gbHVvX2ZpbGUtXHUwMDNlZmg7XG4gXHRhcmdzLmZpbGUgPSBsdW9fZmlsZS1cdTAwM2VmaWxlO1xuLVx0YXJncy5zZXJpYWxpemVkX2RhdGEgPSBsdW9fZmlsZS1cdTAwM2VzZXJpYWxpemVkX2RhdGE7XG4mIzQzO1x0S0hPU0VSX0NPUFlfVFlQRVNBRkUoYXJncy5zZXJpYWxpemVkX2RhdGEsIGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XG4gXHRhcmdzLnJldHJpZXZlX3N0YXR1cyA9IGx1b19maWxlLVx1MDAzZXJldHJpZXZlX3N0YXR1cztcbiBcbiBcdGx1b19maWxlLVx1MDAzZWZoLVx1MDAzZW9wcy1cdTAwM2VmaW5pc2goXHUwMDI2YXJncyk7XG5AQCAtNzQ4LDcgJiM0Mzs3NDgsNyBAQCBzdGF0aWMgaW50IGx1b19maWxlX2Rlc2VyaWFsaXplX29uZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCxcbiBcbiBcdGx1b19maWxlLVx1MDAzZWZoID0gZmg7XG4gXHRsdW9fZmlsZS1cdTAwM2VmaWxlID0gTlVMTDtcbi1cdGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSA9IHNlci1cdTAwM2VkYXRhO1xuJiM0MztcdEtIT1NFUl9DT1BZX1RZUEVTQUZFKGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSwgc2VyLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XG4gXHRsdW9fZmlsZS1cdTAwM2V0b2tlbiA9IHNlci1cdTAwM2V0b2tlbjtcbiBcdG11dGV4X2luaXQoXHUwMDI2bHVvX2ZpbGUtXHUwMDNlbXV0ZXgpO1xuIFx0bGlzdF9hZGRfdGFpbChcdTAwMjZsdW9fZmlsZS1cdTAwM2VsaXN0LCBcdTAwMjZmaWxlX3NldC1cdTAwM2VmaWxlc19saXN0KTtcbmRpZmYgLS1naXQgYS9tbS9tZW1mZF9sdW8uYyBiL21tL21lbWZkX2x1by5jXG5pbmRleCA1OWRlMjEwYmVlNWY5ZS4uZGFmMmM0YzNkYTM1ZjMgMTAwNjQ0XG4tLS0gYS9tbS9tZW1mZF9sdW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtZmRfbHVvLmNcbkBAIC0yNTcsNiAmIzQzOzI1Nyw3IEBAIHN0YXRpYyB2b2lkIG1lbWZkX2x1b191bnByZXNlcnZlX2ZvbGlvcyhzdHJ1Y3Qga2hvX3ZtYWxsb2MgKmtob192bWFsbG9jLFxuIFxuIHN0YXRpYyBpbnQgbWVtZmRfbHVvX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcbiB7XG4mIzQzO1x0REVDTEFSRV9LSE9TRVJfUFRSKHNkLCBzdHJ1Y3QgbWVtZmRfbHVvX3NlciAqKTtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGFyZ3MtXHUwMDNlZmlsZSk7XG4gXHRzdHJ1Y3QgbWVtZmRfbHVvX2ZvbGlvX3NlciAqZm9saW9zX3NlcjtcbiBcdHN0cnVjdCBtZW1mZF9sdW9fc2VyICpzZXI7XG5AQCAtMzA5LDcgJiM0MzszMTAsOCBAQCBzdGF0aWMgaW50IG1lbWZkX2x1b19wcmVzZXJ2ZShzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3MgKmFyZ3MpXG4gXHRpbm9kZV91bmxvY2soaW5vZGUpO1xuIFxuIFx0YXJncy1cdTAwM2Vwcml2YXRlX2RhdGEgPSBmb2xpb3Nfc2VyO1xuLVx0YXJncy1cdTAwM2VzZXJpYWxpemVkX2RhdGEgPSB2aXJ0X3RvX3BoeXMoc2VyKTtcbiYjNDM7XHRLSE9TRVJfU1RPUkVfUFRSKHNkLCBzZXIpO1xuJiM0MztcdEtIT1NFUl9DT1BZX1RZUEVVTlNBRkUoYXJncy1cdTAwM2VzZXJpYWxpemVkX2RhdGEsIHNkKTtcbiBcbiBcdHJldHVybiAwO1xuIFxuQEAgLTMyNSwxMSAmIzQzOzMyNywxMCBAQCBzdGF0aWMgaW50IG1lbWZkX2x1b19mcmVlemUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxuIHtcbiBcdHN0cnVjdCBtZW1mZF9sdW9fc2VyICpzZXI7XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFhcmdzLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSkpXG4mIzQzO1x0c2VyID0gS0hPU0VSX0xPQURfUFRSKGFyZ3MtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCFzZXIpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHNlciA9IHBoeXNfdG9fdmlydChhcmdzLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XG4tXG4gXHQvKlxuIFx0ICogVGhlIHBvcyBtaWdodCBoYXZlIGNoYW5nZWQgc2luY2UgcHJlcGFyZS4gRXZlcnl0aGluZyBlbHNlIHN0YXlzIHRoZVxuIFx0ICogc2FtZS5cbkBAIC0zNDQsMTQgJiM0MzszNDUsMTMgQEAgc3RhdGljIHZvaWQgbWVtZmRfbHVvX3VucHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoYXJncy1cdTAwM2VmaWxlKTtcbiBcdHN0cnVjdCBtZW1mZF9sdW9fc2VyICpzZXI7XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFhcmdzLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSkpXG4mIzQzO1x0c2VyID0gS0hPU0VSX0xPQURfUFRSKGFyZ3MtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCFzZXIpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpbm9kZV9sb2NrKGlub2RlKTtcbiBcdHNobWVtX2ZyZWV6ZShpbm9kZSwgZmFsc2UpO1xuIFxuLVx0c2VyID0gcGh5c190b192aXJ0KGFyZ3MtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbi1cbiBcdG1lbWZkX2x1b191bnByZXNlcnZlX2ZvbGlvcyhcdTAwMjZzZXItXHUwMDNlZm9saW9zLCBhcmdzLVx1MDAzZXByaXZhdGVfZGF0YSxcbiBcdFx0XHRcdCAgICBzZXItXHUwMDNlbnJfZm9saW9zKTtcbiBcbkBAIC0zOTcsNyAmIzQzOzM5Nyw3IEBAIHN0YXRpYyB2b2lkIG1lbWZkX2x1b19maW5pc2goc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxuIFx0aWYgKGFyZ3MtXHUwMDNlcmV0cmlldmVfc3RhdHVzKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRzZXIgPSBwaHlzX3RvX3ZpcnQoYXJncy1cdTAwM2VzZXJpYWxpemVkX2RhdGEpO1xuJiM0MztcdHNlciA9IEtIT1NFUl9MT0FEX1BUUihhcmdzLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XG4gXHRpZiAoIXNlcilcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTUyMiw3ICYjNDM7NTIyLDcgQEAgc3RhdGljIGludCBtZW1mZF9sdW9fcmV0cmlldmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxuIFx0c3RydWN0IGZpbGUgKmZpbGU7XG4gXHRpbnQgZXJyO1xuIFxuLVx0c2VyID0gcGh5c190b192aXJ0KGFyZ3MtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbiYjNDM7XHRzZXIgPSBLSE9TRVJfTE9BRF9QVFIoYXJncy1cdTAwM2VzZXJpYWxpemVkX2RhdGEpO1xuIFx0aWYgKCFzZXIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDExOjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IGludHJvZHVjZXMgdHlwZS1zYWZlIG1hY3JvcyAoS0hPU0VSX0NPUFlfVFlQRVNBRkUsIEtIT1NFUl9MT0FEX1BUUiwgZXRjLikgZm9yIHNlcmlhbGl6aW5nIGFuZCBkZXNlcmlhbGl6aW5nIHBvaW50ZXJzIGluIHRoZSBsaXZldXBkYXRlL2tleGVjX2hhbmRvdmVyIHN1YnN5c3RlbS4gSXQgcmVwbGFjZXMgcmF3IHU2NCBmaWVsZHMgd2l0aCBhIHVuaW9uIGFuZCB1cGRhdGVzIHRoZSBhc3NpZ25tZW50cyB0byB1c2UgdGhlIG5ldyBtYWNyb3MuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGxvZ2ljIHRoYXQgd291bGQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjgyZDA3NzVmNjk2ZjQzNTFhNmZmNjc2NzgzN2IxY2ViNzFlN2U3OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDIyIDExOjI0OjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmggYi9pbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaAppbmRleCA1ZTJlYjg1MTliZGE2ZC4uNjE4NDA4ZmJlOWM5MWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2hvL2FiaS9rZXhlY19oYW5kb3Zlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9rZXhlY19oYW5kb3Zlci5oCkBAIC0xMzksNiAmIzQzOzEzOSwxOCBAQAogCQkodHlwZW9mKChzKS5wdHIpKSgocykucGh5cyA/IHBoeXNfdG9fdmlydCgocykucGh5cykgOiBOVUxMKTsgXAogCX0pCiAKJiM0MzsvKiBDb3BpZXMgb25lIHNlcmlhbGl6YWJsZSBwb2ludGVyIHRvIGFub3RoZXIgb2Ygc2FtZSB0eXBlLiAqLwomIzQzOyNkZWZpbmUgS0hPU0VSX0NPUFlfVFlQRVNBRkUoZGVzdCwgc3JjKSBcCiYjNDM7CSh7IFwKJiM0MzsJCXR5cGVjaGVjayh0eXBlb2YoKGRlc3QpLnB0ciksIChzcmMpLnB0cik7IFwKJiM0MzsJCShkZXN0KS5waHlzID0gKHNyYykucGh5czsgXAomIzQzOwl9KQomIzQzOwomIzQzOy8qIENvcGllcyBvbmUgc2VyaWFsaXphYmxlIHBvaW50ZXIgdG8gYW5vdGhlci4gKi8KJiM0MzsjZGVmaW5lIEtIT1NFUl9DT1BZX1RZUEVVTlNBRkUoZGVzdCwgc3JjKSBcCiYjNDM7CSh7IFwKJiM0MzsJCShkZXN0KS5waHlzID0gKHNyYykucGh5czsgXAomIzQzOwl9KQogLyoKICAqIFRoaXMgaGVhZGVyIGlzIGVtYmVkZGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBga2hvX3ZtYWxsb2NfY2h1bmtgCiAgKiBhbmQgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IGNodW5rIGluIHRoZSBsaW5rZWQgbGlzdCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2hvL2FiaS9sdW8uaCBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9sdW8uaAppbmRleCAyODgwNzZkZTZkNGEwOS4uZDViM2IxYzBmZWMxMmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2hvL2FiaS9sdW8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2toby9hYmkvbHVvLmgKQEAgLTU5LDYgJiM0Mzs1OSw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9hbGlnbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2toby9hYmkvYmxvY2suaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva2hvL2FiaS9rZXhlY19oYW5kb3Zlci5oJmd0OwogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvbGl2ZXVwZGF0ZS5oJmd0OwogCiAvKgpAQCAtODksMTQgJiM0Mzs5MCwxNCBAQCBzdHJ1Y3QgbHVvX3NlciB7CiAvKioKICAqIHN0cnVjdCBsdW9fZmlsZV9zZXIgLSBSZXByZXNlbnRzIHRoZSBzZXJpYWxpemVkIHByZXNlcnZlcyBmaWxlcy4KICAqIEBjb21wYXRpYmxlOiAgRmlsZSBoYW5kbGVyIGNvbXBhdGlibGUgc3RyaW5nLgotICogQGRhdGE6ICAgICAgICBQcml2YXRlIGRhdGEKJiM0MzsgKiBAc2VyaWFsaXplZF9kYXRhOiAgVGhlIHNlcmlhbGl6ZWQgcG9pbnRlciB1bmlvbiBmb3IgdGhpcyBmaWxlCiAgKiBAdG9rZW46ICAgICAgIFVzZXIgcHJvdmlkZWQgdG9rZW4gZm9yIHRoaXMgZmlsZQogICoKICAqIElmIHRoaXMgc3RydWN0dXJlIGlzIG1vZGlmaWVkLCBgTFVPX0FCSV9DT01QQVRJQkxFYCBtdXN0IGJlIHVwZGF0ZWQuCiAgKi8KIHN0cnVjdCBsdW9fZmlsZV9zZXIgewogCWNoYXIgY29tcGF0aWJsZVtMSVZFVVBEQVRFX0hORExfQ09NUEFUX0xFTkdUSF07Ci0JdTY0IGRhdGE7CiYjNDM7CURFQ0xBUkVfS0hPU0VSX1BUUihzZXJpYWxpemVkX2RhdGEsIHZvaWQgKik7CiAJdTY0IHRva2VuOwogfSBfX3BhY2tlZDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmggYi9pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaAppbmRleCA4ODcyMmU1Y2FmMDIwYi4uNDgwZDYzOGI3ZDE4YzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oCkBAIC0zMyw3ICYjNDM7MzMsNyBAQCBzdHJ1Y3QgZmlsZTsKICAqIEBmaWxlOiAgICAgICAgICAgICBUaGUgZmlsZSBvYmplY3QuIEZvciByZXRyaWV2ZTogW09VVF0gVGhlIGNhbGxiYWNrIHNldHMKICAqICAgICAgICAgICAgICAgICAgICB0aGlzIHRvIHRoZSBuZXcgZmlsZS4gRm9yIG90aGVyIG9wczogW0lOXSBUaGUgY2FsbGVyIHNldHMKICAqICAgICAgICAgICAgICAgICAgICB0aGlzIHRvIHRoZSBmaWxlIGJlaW5nIG9wZXJhdGVkIG9uLgotICogQHNlcmlhbGl6ZWRfZGF0YTogIFRoZSBvcGFxdWUgdTY0IGhhbmRsZSwgcHJlc2VydmUvcHJlcGFyZS9mcmVlemUgbWF5IHVwZGF0ZQomIzQzOyAqIEBzZXJpYWxpemVkX2RhdGE6ICBUaGUgc2VyaWFsaXplZCBwb2ludGVyIHVuaW9uLCBwcmVzZXJ2ZS9wcmVwYXJlL2ZyZWV6ZSBtYXkgdXBkYXRlCiAgKiAgICAgICAgICAgICAgICAgICAgdGhpcyBmaWVsZC4KICAqIEBwcml2YXRlX2RhdGE6ICAgICBQcml2YXRlIGRhdGEgZm9yIHRoZSBmaWxlIHVzZWQgdG8gaG9sZCBydW50aW1lIHN0YXRlIHRoYXQKICAqICAgICAgICAgICAgICAgICAgICBpcyBub3QgcHJlc2VydmVkLiBTZXQgYnkgdGhlIGhhbmRsZXImIzM5O3MgLnByZXNlcnZlKCkKQEAgLTQ3LDcgJiM0Mzs0Nyw3IEBAIHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyB7CiAJc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpoYW5kbGVyOwogCWludCByZXRyaWV2ZV9zdGF0dXM7CiAJc3RydWN0IGZpbGUgKmZpbGU7Ci0JdTY0IHNlcmlhbGl6ZWRfZGF0YTsKJiM0MzsJREVDTEFSRV9LSE9TRVJfUFRSKHNlcmlhbGl6ZWRfZGF0YSwgdm9pZCAqKTsKIAl2b2lkICpwcml2YXRlX2RhdGE7CiB9OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jIGIva2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYwppbmRleCBjMzlmOTY5NjFhODViZS4uNzljZmE1MjAxODk5MTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYwpAQCAtMTI1LDcgJiM0MzsxMjUsNyBAQCBzdGF0aWMgREVGSU5FX1hBUlJBWShsdW9fcHJlc2VydmVkX2ZpbGVzKTsKICAqIEBmaWxlOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBrZXJuZWwmIzM5O3MgJmFtcDtzdHJ1Y3QgZmlsZSB0aGF0IGlzIGJlaW5nIHByZXNlcnZlZC4KICAqICAgICAgICAgICAgICAgICBUaGlzIGlzIE5VTEwgaW4gdGhlIG5ldyBrZXJuZWwgdW50aWwgdGhlIGZpbGUgaXMgc3VjY2Vzc2Z1bGx5CiAgKiAgICAgICAgICAgICAgICAgcmV0cmlldmVkLgotICogQHNlcmlhbGl6ZWRfZGF0YTogVGhlIG9wYXF1ZSB1NjQgaGFuZGxlIHRvIHRoZSBzZXJpYWxpemVkIHN0YXRlIG9mIHRoZSBmaWxlLgomIzQzOyAqIEBzZXJpYWxpemVkX2RhdGE6IFRoZSBzZXJpYWxpemVkIHBvaW50ZXIgdW5pb24gdG8gdGhlIHNlcmlhbGl6ZWQgc3RhdGUgb2YgdGhlIGZpbGUuCiAgKiAgICAgICAgICAgICAgICAgVGhpcyBoYW5kbGUgaXMgcGFzc2VkIGJhY2sgdG8gdGhlIGhhbmRsZXImIzM5O3MgLmZyZWV6ZSgpLAogICogICAgICAgICAgICAgICAgIC5yZXRyaWV2ZSgpLCBhbmQgLmZpbmlzaCgpIGNhbGxiYWNrcywgYWxsb3dpbmcgaXQgdG8gdHJhY2sKICAqICAgICAgICAgICAgICAgICBhbmQgdXBkYXRlIGl0cyBzZXJpYWxpemVkIHN0YXRlIGFjcm9zcyBwaGFzZXMuCkBAIC0xNjEsNyAmIzQzOzE2MSw3IEBAIHN0YXRpYyBERUZJTkVfWEFSUkFZKGx1b19wcmVzZXJ2ZWRfZmlsZXMpOwogc3RydWN0IGx1b19maWxlIHsKIAlzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoOwogCXN0cnVjdCBmaWxlICpmaWxlOwotCXU2NCBzZXJpYWxpemVkX2RhdGE7CiYjNDM7CURFQ0xBUkVfS0hPU0VSX1BUUihzZXJpYWxpemVkX2RhdGEsIHZvaWQgKik7CiAJdm9pZCAqcHJpdmF0ZV9kYXRhOwogCWludCByZXRyaWV2ZV9zdGF0dXM7CiAJc3RydWN0IG11dGV4IG11dGV4OwpAQCAtMjg5LDcgJiM0MzsyODksNyBAQCBpbnQgbHVvX3ByZXNlcnZlX2ZpbGUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsIHU2NCB0b2tlbiwgaW50IGZkKQogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2tmcmVlOwogCi0JbHVvX2ZpbGUtJmd0O3NlcmlhbGl6ZWRfZGF0YSA9IGFyZ3Muc2VyaWFsaXplZF9kYXRhOwomIzQzOwlLSE9TRVJfQ09QWV9UWVBFU0FGRShsdW9fZmlsZS0mZ3Q7c2VyaWFsaXplZF9kYXRhLCBhcmdzLnNlcmlhbGl6ZWRfZGF0YSk7CiAJbHVvX2ZpbGUtJmd0O3ByaXZhdGVfZGF0YSA9IGFyZ3MucHJpdmF0ZV9kYXRhOwogCWxpc3RfYWRkX3RhaWwoJmFtcDtsdW9fZmlsZS0mZ3Q7bGlzdCwgJmFtcDtmaWxlX3NldC0mZ3Q7ZmlsZXNfbGlzdCk7CiAJZmlsZV9zZXQtJmd0O2NvdW50JiM0MzsmIzQzOzsKQEAgLTM0Miw3ICYjNDM7MzQyLDcgQEAgdm9pZCBsdW9fZmlsZV91bnByZXNlcnZlX2ZpbGVzKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0KQogCiAJCWFyZ3MuaGFuZGxlciA9IGx1b19maWxlLSZndDtmaDsKIAkJYXJncy5maWxlID0gbHVvX2ZpbGUtJmd0O2ZpbGU7Ci0JCWFyZ3Muc2VyaWFsaXplZF9kYXRhID0gbHVvX2ZpbGUtJmd0O3NlcmlhbGl6ZWRfZGF0YTsKJiM0MzsJCUtIT1NFUl9DT1BZX1RZUEVTQUZFKGFyZ3Muc2VyaWFsaXplZF9kYXRhLCBsdW9fZmlsZS0mZ3Q7c2VyaWFsaXplZF9kYXRhKTsKIAkJYXJncy5wcml2YXRlX2RhdGEgPSBsdW9fZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwogCQlsdW9fZmlsZS0mZ3Q7ZmgtJmd0O29wcy0mZ3Q7dW5wcmVzZXJ2ZSgmYW1wO2FyZ3MpOwogCQlsdW9fZmxiX2ZpbGVfdW5wcmVzZXJ2ZShsdW9fZmlsZS0mZ3Q7ZmgpOwpAQCAtMzc1LDEyICYjNDM7Mzc1LDEyIEBAIHN0YXRpYyBpbnQgbHVvX2ZpbGVfZnJlZXplX29uZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCwKIAogCQlhcmdzLmhhbmRsZXIgPSBsdW9fZmlsZS0mZ3Q7Zmg7CiAJCWFyZ3MuZmlsZSA9IGx1b19maWxlLSZndDtmaWxlOwotCQlhcmdzLnNlcmlhbGl6ZWRfZGF0YSA9IGx1b19maWxlLSZndDtzZXJpYWxpemVkX2RhdGE7CiYjNDM7CQlLSE9TRVJfQ09QWV9UWVBFU0FGRShhcmdzLnNlcmlhbGl6ZWRfZGF0YSwgbHVvX2ZpbGUtJmd0O3NlcmlhbGl6ZWRfZGF0YSk7CiAJCWFyZ3MucHJpdmF0ZV9kYXRhID0gbHVvX2ZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKIAogCQllcnIgPSBsdW9fZmlsZS0mZ3Q7ZmgtJmd0O29wcy0mZ3Q7ZnJlZXplKCZhbXA7YXJncyk7CiAJCWlmICghZXJyKQotCQkJbHVvX2ZpbGUtJmd0O3NlcmlhbGl6ZWRfZGF0YSA9IGFyZ3Muc2VyaWFsaXplZF9kYXRhOwomIzQzOwkJCUtIT1NFUl9DT1BZX1RZUEVTQUZFKGx1b19maWxlLSZndDtzZXJpYWxpemVkX2RhdGEsIGFyZ3Muc2VyaWFsaXplZF9kYXRhKTsKIAl9CiAKIAlyZXR1cm4gZXJyOwpAQCAtMzk2LDcgJiM0MzszOTYsNyBAQCBzdGF0aWMgdm9pZCBsdW9fZmlsZV91bmZyZWV6ZV9vbmUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsCiAKIAkJYXJncy5oYW5kbGVyID0gbHVvX2ZpbGUtJmd0O2ZoOwogCQlhcmdzLmZpbGUgPSBsdW9fZmlsZS0mZ3Q7ZmlsZTsKLQkJYXJncy5zZXJpYWxpemVkX2RhdGEgPSBsdW9fZmlsZS0mZ3Q7c2VyaWFsaXplZF9kYXRhOwomIzQzOwkJS0hPU0VSX0NPUFlfVFlQRVNBRkUoYXJncy5zZXJpYWxpemVkX2RhdGEsIGx1b19maWxlLSZndDtzZXJpYWxpemVkX2RhdGEpOwogCQlhcmdzLnByaXZhdGVfZGF0YSA9IGx1b19maWxlLSZndDtwcml2YXRlX2RhdGE7CiAKIAkJbHVvX2ZpbGUtJmd0O2ZoLSZndDtvcHMtJmd0O3VuZnJlZXplKCZhbXA7YXJncyk7CkBAIC00ODMsNyAmIzQzOzQ4Myw3IEBAIGludCBsdW9fZmlsZV9mcmVlemUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsCiAKIAkJc3Ryc2NweShmaWxlX3Nlci0mZ3Q7Y29tcGF0aWJsZSwgbHVvX2ZpbGUtJmd0O2ZoLSZndDtjb21wYXRpYmxlLAogCQkJc2l6ZW9mKGZpbGVfc2VyLSZndDtjb21wYXRpYmxlKSk7Ci0JCWZpbGVfc2VyLSZndDtkYXRhID0gbHVvX2ZpbGUtJmd0O3NlcmlhbGl6ZWRfZGF0YTsKJiM0MzsJCUtIT1NFUl9DT1BZX1RZUEVTQUZFKGZpbGVfc2VyLSZndDtzZXJpYWxpemVkX2RhdGEsIGx1b19maWxlLSZndDtzZXJpYWxpemVkX2RhdGEpOwogCQlmaWxlX3Nlci0mZ3Q7dG9rZW4gPSBsdW9fZmlsZS0mZ3Q7dG9rZW47CiAJfQogCkBAIC01ODcsNyAmIzQzOzU4Nyw3IEBAIGludCBsdW9fcmV0cmlldmVfZmlsZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCwgdTY0IHRva2VuLAogCX0KIAogCWFyZ3MuaGFuZGxlciA9IGx1b19maWxlLSZndDtmaDsKLQlhcmdzLnNlcmlhbGl6ZWRfZGF0YSA9IGx1b19maWxlLSZndDtzZXJpYWxpemVkX2RhdGE7CiYjNDM7CUtIT1NFUl9DT1BZX1RZUEVTQUZFKGFyZ3Muc2VyaWFsaXplZF9kYXRhLCBsdW9fZmlsZS0mZ3Q7c2VyaWFsaXplZF9kYXRhKTsKIAllcnIgPSBsdW9fZmlsZS0mZ3Q7ZmgtJmd0O29wcy0mZ3Q7cmV0cmlldmUoJmFtcDthcmdzKTsKIAlpZiAoZXJyKSB7CiAJCS8qIEtlZXAgdGhlIGVycm9yIGNvZGUgZm9yIGxhdGVyIHVzZS4gKi8KQEAgLTYyMSw3ICYjNDM7NjIxLDcgQEAgc3RhdGljIGludCBsdW9fZmlsZV9jYW5fZmluaXNoX29uZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCwKIAogCQlhcmdzLmhhbmRsZXIgPSBsdW9fZmlsZS0mZ3Q7Zmg7CiAJCWFyZ3MuZmlsZSA9IGx1b19maWxlLSZndDtmaWxlOwotCQlhcmdzLnNlcmlhbGl6ZWRfZGF0YSA9IGx1b19maWxlLSZndDtzZXJpYWxpemVkX2RhdGE7CiYjNDM7CQlLSE9TRVJfQ09QWV9UWVBFU0FGRShhcmdzLnNlcmlhbGl6ZWRfZGF0YSwgbHVvX2ZpbGUtJmd0O3NlcmlhbGl6ZWRfZGF0YSk7CiAJCWFyZ3MucmV0cmlldmVfc3RhdHVzID0gbHVvX2ZpbGUtJmd0O3JldHJpZXZlX3N0YXR1czsKIAkJY2FuX2ZpbmlzaCA9IGx1b19maWxlLSZndDtmaC0mZ3Q7b3BzLSZndDtjYW5fZmluaXNoKCZhbXA7YXJncyk7CiAJfQpAQCAtNjM4LDcgJiM0Mzs2MzgsNyBAQCBzdGF0aWMgdm9pZCBsdW9fZmlsZV9maW5pc2hfb25lKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LAogCiAJYXJncy5oYW5kbGVyID0gbHVvX2ZpbGUtJmd0O2ZoOwogCWFyZ3MuZmlsZSA9IGx1b19maWxlLSZndDtmaWxlOwotCWFyZ3Muc2VyaWFsaXplZF9kYXRhID0gbHVvX2ZpbGUtJmd0O3NlcmlhbGl6ZWRfZGF0YTsKJiM0MzsJS0hPU0VSX0NPUFlfVFlQRVNBRkUoYXJncy5zZXJpYWxpemVkX2RhdGEsIGx1b19maWxlLSZndDtzZXJpYWxpemVkX2RhdGEpOwogCWFyZ3MucmV0cmlldmVfc3RhdHVzID0gbHVvX2ZpbGUtJmd0O3JldHJpZXZlX3N0YXR1czsKIAogCWx1b19maWxlLSZndDtmaC0mZ3Q7b3BzLSZndDtmaW5pc2goJmFtcDthcmdzKTsKQEAgLTc0OCw3ICYjNDM7NzQ4LDcgQEAgc3RhdGljIGludCBsdW9fZmlsZV9kZXNlcmlhbGl6ZV9vbmUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsCiAKIAlsdW9fZmlsZS0mZ3Q7ZmggPSBmaDsKIAlsdW9fZmlsZS0mZ3Q7ZmlsZSA9IE5VTEw7Ci0JbHVvX2ZpbGUtJmd0O3NlcmlhbGl6ZWRfZGF0YSA9IHNlci0mZ3Q7ZGF0YTsKJiM0MzsJS0hPU0VSX0NPUFlfVFlQRVNBRkUobHVvX2ZpbGUtJmd0O3NlcmlhbGl6ZWRfZGF0YSwgc2VyLSZndDtzZXJpYWxpemVkX2RhdGEpOwogCWx1b19maWxlLSZndDt0b2tlbiA9IHNlci0mZ3Q7dG9rZW47CiAJbXV0ZXhfaW5pdCgmYW1wO2x1b19maWxlLSZndDttdXRleCk7CiAJbGlzdF9hZGRfdGFpbCgmYW1wO2x1b19maWxlLSZndDtsaXN0LCAmYW1wO2ZpbGVfc2V0LSZndDtmaWxlc19saXN0KTsKZGlmZiAtLWdpdCBhL21tL21lbWZkX2x1by5jIGIvbW0vbWVtZmRfbHVvLmMKaW5kZXggNTlkZTIxMGJlZTVmOWUuLmRhZjJjNGMzZGEzNWYzIDEwMDY0NAotLS0gYS9tbS9tZW1mZF9sdW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1mZF9sdW8uYwpAQCAtMjU3LDYgJiM0MzsyNTcsNyBAQCBzdGF0aWMgdm9pZCBtZW1mZF9sdW9fdW5wcmVzZXJ2ZV9mb2xpb3Moc3RydWN0IGtob192bWFsbG9jICpraG9fdm1hbGxvYywKIAogc3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKQogewomIzQzOwlERUNMQVJFX0tIT1NFUl9QVFIoc2QsIHN0cnVjdCBtZW1mZF9sdW9fc2VyICopOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGFyZ3MtJmd0O2ZpbGUpOwogCXN0cnVjdCBtZW1mZF9sdW9fZm9saW9fc2VyICpmb2xpb3Nfc2VyOwogCXN0cnVjdCBtZW1mZF9sdW9fc2VyICpzZXI7CkBAIC0zMDksNyAmIzQzOzMxMCw4IEBAIHN0YXRpYyBpbnQgbWVtZmRfbHVvX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncykKIAlpbm9kZV91bmxvY2soaW5vZGUpOwogCiAJYXJncy0mZ3Q7cHJpdmF0ZV9kYXRhID0gZm9saW9zX3NlcjsKLQlhcmdzLSZndDtzZXJpYWxpemVkX2RhdGEgPSB2aXJ0X3RvX3BoeXMoc2VyKTsKJiM0MzsJS0hPU0VSX1NUT1JFX1BUUihzZCwgc2VyKTsKJiM0MzsJS0hPU0VSX0NPUFlfVFlQRVVOU0FGRShhcmdzLSZndDtzZXJpYWxpemVkX2RhdGEsIHNkKTsKIAogCXJldHVybiAwOwogCkBAIC0zMjUsMTEgJiM0MzszMjcsMTAgQEAgc3RhdGljIGludCBtZW1mZF9sdW9fZnJlZXplKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncykKIHsKIAlzdHJ1Y3QgbWVtZmRfbHVvX3NlciAqc2VyOwogCi0JaWYgKFdBUk5fT05fT05DRSghYXJncy0mZ3Q7c2VyaWFsaXplZF9kYXRhKSkKJiM0MzsJc2VyID0gS0hPU0VSX0xPQURfUFRSKGFyZ3MtJmd0O3NlcmlhbGl6ZWRfZGF0YSk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIXNlcikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc2VyID0gcGh5c190b192aXJ0KGFyZ3MtJmd0O3NlcmlhbGl6ZWRfZGF0YSk7Ci0KIAkvKgogCSAqIFRoZSBwb3MgbWlnaHQgaGF2ZSBjaGFuZ2VkIHNpbmNlIHByZXBhcmUuIEV2ZXJ5dGhpbmcgZWxzZSBzdGF5cyB0aGUKIAkgKiBzYW1lLgpAQCAtMzQ0LDE0ICYjNDM7MzQ1LDEzIEBAIHN0YXRpYyB2b2lkIG1lbWZkX2x1b191bnByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncykKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShhcmdzLSZndDtmaWxlKTsKIAlzdHJ1Y3QgbWVtZmRfbHVvX3NlciAqc2VyOwogCi0JaWYgKFdBUk5fT05fT05DRSghYXJncy0mZ3Q7c2VyaWFsaXplZF9kYXRhKSkKJiM0MzsJc2VyID0gS0hPU0VSX0xPQURfUFRSKGFyZ3MtJmd0O3NlcmlhbGl6ZWRfZGF0YSk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIXNlcikpCiAJCXJldHVybjsKIAogCWlub2RlX2xvY2soaW5vZGUpOwogCXNobWVtX2ZyZWV6ZShpbm9kZSwgZmFsc2UpOwogCi0Jc2VyID0gcGh5c190b192aXJ0KGFyZ3MtJmd0O3NlcmlhbGl6ZWRfZGF0YSk7Ci0KIAltZW1mZF9sdW9fdW5wcmVzZXJ2ZV9mb2xpb3MoJmFtcDtzZXItJmd0O2ZvbGlvcywgYXJncy0mZ3Q7cHJpdmF0ZV9kYXRhLAogCQkJCSAgICBzZXItJmd0O25yX2ZvbGlvcyk7CiAKQEAgLTM5Nyw3ICYjNDM7Mzk3LDcgQEAgc3RhdGljIHZvaWQgbWVtZmRfbHVvX2ZpbmlzaChzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3MgKmFyZ3MpCiAJaWYgKGFyZ3MtJmd0O3JldHJpZXZlX3N0YXR1cykKIAkJcmV0dXJuOwogCi0Jc2VyID0gcGh5c190b192aXJ0KGFyZ3MtJmd0O3NlcmlhbGl6ZWRfZGF0YSk7CiYjNDM7CXNlciA9IEtIT1NFUl9MT0FEX1BUUihhcmdzLSZndDtzZXJpYWxpemVkX2RhdGEpOwogCWlmICghc2VyKQogCQlyZXR1cm47CiAKQEAgLTUyMiw3ICYjNDM7NTIyLDcgQEAgc3RhdGljIGludCBtZW1mZF9sdW9fcmV0cmlldmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKQogCXN0cnVjdCBmaWxlICpmaWxlOwogCWludCBlcnI7CiAKLQlzZXIgPSBwaHlzX3RvX3ZpcnQoYXJncy0mZ3Q7c2VyaWFsaXplZF9kYXRhKTsKJiM0MzsJc2VyID0gS0hPU0VSX0xPQURfUFRSKGFyZ3MtJmd0O3NlcmlhbGl6ZWRfZGF0YSk7CiAJaWYgKCFzZXIpCiAJCXJldHVybiAtRUlOVkFMOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDExOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MDEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgU2VyaWFsaXphdGlvbi9EZXNlcmlhbGl6YXRpb24gaW4gdGhlIEtITyBTdWJzeXN0ZW0qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgYSByZWZhY3RvcmluZyBlZmZvcnQgd2l0aGluIHRoZSBsaXZldXBkYXRlL2tleGVjX2hhbmRvdmVyIChLSE8pIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIGEgbW92ZSBhd2F5IGZyb20gdXNpbmcgcmF3IGB1NjRgIGZvciBzZXJpYWxpemVkIHBvaW50ZXJzIGFuZCB0b3dhcmRzIGEgbW9yZSBzdHJ1Y3R1cmVkIGFwcHJvYWNoIGxldmVyYWdpbmcgYERFQ0xBUkVfS0hPU0VSX1BUUmAgYW5kIGFzc29jaWF0ZWQgbWFjcm9zLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIGBpbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaGAuIEl0IGludHJvZHVjZXMgdHdvIG5ldyBtYWNyb3M6IGBLSE9TRVJfQ09QWV9UWVBFU0FGRWAgYW5kIGBLSE9TRVJfQ09QWV9UWVBFVU5TQUZFYC4gSXQgbG9va3MgbGlrZSBgS0hPU0VSX0NPUFlfVFlQRVNBRkVgIHBlcmZvcm1zIGEgYHR5cGVjaGVja2AgYmVmb3JlIGNvcHlpbmcgdGhlIHBoeXNpY2FsIGFkZHJlc3MsIHdoaWxlIGBLSE9TRVJfQ09QWV9UWVBFVU5TQUZFYCBjb3BpZXMgdGhlIHBoeXNpY2FsIGFkZHJlc3MgZGlyZWN0bHkuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGFjdHVhbCBkZWZpbml0aW9uIG9mIGBERUNMQVJFX0tIT1NFUl9QVFJgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gVGhlIHBhdGNoIGFsc28gdXBkYXRlcyBzZXZlcmFsIGtleSBkYXRhIHN0cnVjdHVyZXMsIG5hbWVseSBgc3RydWN0IGx1b19maWxlX3NlcmAgYW5kIGBzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3NgIHRvIHVzZSB0aGVzZSBuZXcgbWFjcm9zIGFuZCB0aGUgYERFQ0xBUkVfS0hPU0VSX1BUUmAgZGF0YSBzdHJ1Y3R1cmUuCgpUaGUgY2hhbmdlIHRvdWNoZXMgYGtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmNgIGFuZCBgbW0vbWVtZmRfbHVvLmNgLCBzbyBpdCYjMzk7cyBjbGVhcmx5IGltcGFjdGluZyB0aGUgaW1wbGVtZW50YXRpb24gc2lkZSwgdG9vLiBHaXZlbiB0aGUgZmlsZSBsb2NhdGlvbnMgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMsIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgaW1wcm92aW5nIHRoZSB3YXkgcG9pbnRlcnMgYXJlIGhhbmRsZWQgZHVyaW5nIGxpdmUgdXBkYXRlcyBhbmQga2V4ZWMgaGFuZG92ZXJzIOKAkyB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhlIG1haW4gaW1wYWN0IGlzIHJlcGxhY2luZyBhc3NpZ25tZW50cyBhbmQgcG9pbnRlciBjb252ZXJzaW9ucywgbGlrZSBgdmlydF90b19waHlzYC9gcGh5c190b192aXJ0YCwgd2l0aCB0aGUgbWFjcm9zIGBLSE9TRVJfQ09QWV9UWVBFU0FGRWAsIGBLSE9TRVJfU1RPUkVfUFRSYCwgYEtIT1NFUl9MT0FEX1BUUmAuCgpOb3csIEkmIzM5O20gdHJ5aW5nIHRvIGFzY2VydGFpbiBpZiB0aGlzIGlzIHB1cmVseSBhIHJlZmFjdG9yaW5nIGZvciB0eXBlIHNhZmV0eSwgb3IgaWYgdGhlcmUmIzM5O3MgYSBmdW5jdGlvbmFsIGFzcGVjdCB0byBpdC4gTG9va2luZyBhdCB0aGUgbWFjcm8gZGVmaW5pdGlvbnMsIGBLSE9TRVJfQ09QWV9UWVBFU0FGRWAgdXNlcyBgdHlwZWNoZWNrYCwgYnV0IGJvdGggbWFjcm9zIHVsdGltYXRlbHkganVzdCBjb3B5IHRoZSBgLnBoeXNgIG1lbWJlci4gVGh1cywgdGhlIG1hY3JvcyBhbG9uZSBkb24mIzM5O3QgYXBwZWFyIHRvIGJlIGludHJvZHVjaW5nIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSBrZXkgbXVzdCBsaWUgaW4gaG93IGBERUNMQVJFX0tIT1NFUl9QVFJgIGRlZmluZXMgdGhlIGludGVybmFsIHN0cnVjdHVyZSBmb3IgdGhlc2Ugc2VyaWFsaXplZCBwb2ludGVycywgYW5kIGhvdyB0aGUgdmFyaW91cyBjb3B5IGFuZCBsb2FkIG9wZXJhdGlvbnMgYXJlIGFjdHVhbGx5IGltcGxlbWVudGVkLiBJIG5lZWQgdG8gcmV2aWV3IGBpbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaGAgdG8gc2VlIGhvdyB0aG9zZSBhcmUgc2V0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDExOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RFQ0xBUkVfS0hPU0VSX1BUUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaC0xMjAtLyogSGVscGVyIG1hY3JvIHRvIGRlZmluZSBhIHVuaW9uIGZvciBhIHNlcmlhbGl6YWJsZSBwb2ludGVyLiAqL1xuaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmg6MTIxOiNkZWZpbmUgREVDTEFSRV9LSE9TRVJfUFRSKG5hbWUsIHR5cGUpXHRcXFxuaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmgtMTIyLVx0dW5pb24geyAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4tLVxuaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmg9MTU5PXN0cnVjdCBraG9fdm1hbGxvY19oZHIge1xuaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmg6MTYwOlx0REVDTEFSRV9LSE9TRVJfUFRSKG5leHQsIHN0cnVjdCBraG9fdm1hbGxvY19jaHVuayAqKTtcbmluY2x1ZGUvbGludXgva2hvL2FiaS9rZXhlY19oYW5kb3Zlci5oLTE2MS19O1xuLS1cbmluY2x1ZGUvbGludXgva2hvL2FiaS9rZXhlY19oYW5kb3Zlci5oPTE4NT1zdHJ1Y3Qga2hvX3ZtYWxsb2Mge1xuaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmg6MTg2Olx0REVDTEFSRV9LSE9TRVJfUFRSKGZpcnN0LCBzdHJ1Y3Qga2hvX3ZtYWxsb2NfY2h1bmsgKik7XG5pbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaC0xODctXHR1bnNpZ25lZCBpbnQgdG90YWxfcGFnZXM7XG4tLVxuaW5jbHVkZS9saW51eC9raG8vYWJpL2x1by5oPTk4PXN0cnVjdCBsdW9fZmlsZV9zZXIge1xuaW5jbHVkZS9saW51eC9raG8vYWJpL2x1by5oLTk5LVx0Y2hhciBjb21wYXRpYmxlW0xJVkVVUERBVEVfSE5ETF9DT01QQVRfTEVOR1RIXTtcbmluY2x1ZGUvbGludXgva2hvL2FiaS9sdW8uaDoxMDA6XHRERUNMQVJFX0tIT1NFUl9QVFIoc2VyaWFsaXplZF9kYXRhLCB2b2lkICopO1xuaW5jbHVkZS9saW51eC9raG8vYWJpL2x1by5oLTEwMS1cdHU2NCB0b2tlbjtcbi0tXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaD00Nj1zdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3Mge1xuLS1cbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTQ5LVx0c3RydWN0IGZpbGUgKmZpbGU7XG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaDo1MDpcdERFQ0xBUkVfS0hPU0VSX1BUUihzZXJpYWxpemVkX2RhdGEsIHZvaWQgKik7XG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC01MS1cdHZvaWQgKnByaXZhdGVfZGF0YTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jPTE2MT1zdHJ1Y3QgbHVvX2ZpbGUge1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtMTYzLVx0c3RydWN0IGZpbGUgKmZpbGU7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jOjE2NDpcdERFQ0xBUkVfS0hPU0VSX1BUUihzZXJpYWxpemVkX2RhdGEsIHZvaWQgKik7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTE2NS1cdHZvaWQgKnByaXZhdGVfZGF0YTtcbi0tXG5tbS9tZW1mZF9sdW8uYz0yNTg9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxubW0vbWVtZmRfbHVvLmMtMjU5LXtcbm1tL21lbWZkX2x1by5jOjI2MDpcdERFQ0xBUkVfS0hPU0VSX1BUUihzZCwgc3RydWN0IG1lbWZkX2x1b19zZXIgKik7XG5tbS9tZW1mZF9sdW8uYy0yNjEtXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShhcmdzLVx1MDAzZWZpbGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDExOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMjEKCQkJCQkJCW91dHB1dDogMTIxCgkJCQkJCQl0aG91Z2h0czogMTUzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUG9pbnRlciBTZXJpYWxpemF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgaG93IHBvaW50ZXJzIGFyZSBzZXJpYWxpemVkIGFuZCBkZXNlcmlhbGl6ZWQgd2l0aGluIHRoaXMgc3lzdGVtLiBJdCByZXBsYWNlcyBhIHN0cmFpZ2h0Zm9yd2FyZCBgdTY0YCBmb3Igc3RvcmluZyBwaHlzaWNhbCBhZGRyZXNzZXMgd2l0aCBhIGB1bmlvbmAgY29udGFpbmluZyBib3RoIGEgcG9pbnRlciAoYHB0cmApIGFuZCBhIHBoeXNpY2FsIGFkZHJlc3MgKGBwaHlzYCkg4oCTIGVzc2VudGlhbGx5LCBhIHR5cGVkIHdyYXBwZXIgYXJvdW5kIHRoZSBleGlzdGluZyBwaHlzaWNhbCBhZGRyZXNzIHJlcHJlc2VudGF0aW9uLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzY2VydGFpbiBpZiB0aGlzIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0cywgdGhlICphY3R1YWwqIG1lY2hhbmljcyByZW1haW4gY29uc2lzdGVudC4gVGhlIG9sZCBtZXRob2Qgc3RvcmVkIHRoZSByZXN1bHQgb2YgYHZpcnRfdG9fcGh5cyhzZXIpYCBkaXJlY3RseSBpbnRvIGEgYHU2NGAuIFRoZSBuZXcgbWV0aG9kIHVzZXMgbWFjcm9zLCBgS0hPU0VSX1NUT1JFX1BUUmAgYW5kIGBLSE9TRVJfTE9BRF9QVFJgLCBidXQgZXNzZW50aWFsbHkgZG9lcyB0aGUgKnNhbWUqIHRoaW5nOiBzdG9yZXMgYHZpcnRfdG9fcGh5cyhwKWAgKG9yIHplcm8gaWYgdGhlIHBvaW50ZXIgaXMgbnVsbCkgaW50byB0aGUgYC5waHlzYCBtZW1iZXIsIGFuZCBsb2FkcyBpdCBiYWNrIHVzaW5nIGBwaHlzX3RvX3ZpcnRgLiBUaGUga2V5IGRpZmZlcmVuY2VzIEkgc2VlIGFyZSB0eXBlIHNhZmV0eSBhbmQgcmVhZGFiaWxpdHksIHdoaWNoIGlzIGdvb2QuCgpUaGUgZmFjdCB0aGF0IGBsdW9fZmlsZV9zZXJgIGlzIHBhcnQgb2YgdGhlIEFCSSByYWlzZXMgYSBjb25jZXJuLiBUaGlzIGlzIGFuIGFyZWEgd2hlcmUgY2hhbmdlcyBuZWVkIHRvIGJlIGVzcGVjaWFsbHkgd2VsbCBzY3J1dGluaXplZC4gSG93ZXZlciwgdGhlIGBERUNMQVJFX0tIT1NFUl9QVFJgIG1hY3JvIGVuc3VyZXMgdGhlIHNpemUgYW5kIGxheW91dCBvZiB0aGUgYGx1b19maWxlX3NlcmAgc3RydWN0IHJlbWFpbnMgaWRlbnRpY2FsIGJlY2F1c2UgYm90aCB0aGUgcG9pbnRlciBhbmQgdGhlIGB1NjRgIGFyZSA4IGJ5dGVzIGVhY2gsIHRoZSBzaXplIG9mIHRoZSB1bmlvbi4gVGhlIHN0cnVjdHVyZSYjMzk7cyBzaXplIGlzbiYjMzk7dCBpbXBhY3RlZCBieSB0aGlzIGNoYW5nZS4gSXQmIzM5O3MgYSByZWZhY3RvcmluZyB0byBpbXByb3ZlIGNsYXJpdHkuCgpEaWdnaW5nIGRlZXBlciwgSSBzZWUgYSBjaGVjazogYGlmIChXQVJOX09OX09OQ0UoIWFyZ3MtJmd0O3NlcmlhbGl6ZWRfZGF0YSkpYC4gVGhpcyBoYXMgYmVlbiB1cGRhdGVkIHRvIHVzZSB0aGUgbWFjcm86IGBzZXIgPSBLSE9TRVJfTE9BRF9QVFIoYXJncy0mZ3Q7c2VyaWFsaXplZF9kYXRhKTsgaWYgKFdBUk5fT05fT05DRSghc2VyKSlgLiBQcmV2aW91c2x5LCBpdCBjaGVja2VkIGEgYHU2NGAgZGlyZWN0bHk7IG5vdyBpdCBjaGVja3MgdGhlIGRlcmVmZXJlbmNlZCBwb2ludGVyIGZyb20gdGhhdCBgdTY0YC4gYEtIT1NFUl9MT0FEX1BUUmAgaGFuZGxlcyB0aGUgdHJhbnNsYXRpb24sIGFuZCBjb3JyZWN0bHkgcmV0dXJucyBgTlVMTGAgaWYgdGhlIGAucGh5c2AgbWVtYmVyIGlzIHplcm8uIFRoaXMsIG9uIGl0cyBmYWNlLCBhcHBlYXJzIGZ1bmN0aW9uYWxseSBpZGVudGljYWwuIElmIGBwaHlzYCBpcyB6ZXJvLCBpdCBjb3JyZWN0bHkgcmV0dXJucyBgTlVMTGAsIGFuZCB0aGUgd2FybmluZyBmaXJlcyBhcyBpdCBzaG91bGQuCgpOb3csIGhlcmUmIzM5O3MgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBwb2ludC4gSW4gdGhlIG9sZGVyIHZlcnNpb24sIGBwaHlzX3RvX3ZpcnQoMClgICptaWdodCogbm90IG5lY2Vzc2FyaWx5IHJldHVybiBgTlVMTGAgb24gYWxsIGFyY2hpdGVjdHVyZXMuIE9uIHg4NiwgZm9yIGluc3RhbmNlLCBgcGh5c190b192aXJ0KDApYCB3b3VsZCByZXR1cm4gYFBBR0VfT0ZGU0VUYCwgd2hpY2ggaXMgKm5vdCogemVyby4gVGhpcyBjb3VsZCBjcmVhdGUgYSBkaXZlcmdlbmNlLiBIb3dldmVyLCB0aGUgY29kZSYjMzk7cyBiZWhhdmlvciAqc2hvdWxkbiYjMzk7dCogZGVwZW5kIG9uIGBwaHlzX3RvX3ZpcnQoMClgIHlpZWxkaW5nIGBOVUxMYCwgYnV0IG9uIHRoZSB2YWx1ZSBiZWluZyB1bmluaXRpYWxpemVkLiBJdCBzZWVtcyBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlIGRpZCBub3QgYWNjb3VudCBmb3IgdGhhdCBlZGdlIGNhc2UsIGFuZCBoYXMgbm93IGJlZW4gY29ycmVjdGVkIChpbiBhIG1pbm9yIHdheSwgaXQgc2VlbXMpIGJlY2F1c2UgYEtIT1NFUl9MT0FEX1BUUmAgKmFsd2F5cyogcmV0dXJucyBgTlVMTGAgd2hlbiBgLnBoeXNgIGlzIDAuCgpMb29raW5nIGF0IHdoZXJlIHRoZSBgc2VyaWFsaXplZF9kYXRhYCBpcyBpbml0aWFsaXplZCwgaXQgaXMgc2V0IHdpdGggYHZpcnRfdG9fcGh5cyhzZXIpYCB3aGVyZSBgc2VyYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AuIFNvLCBgdmlydF90b19waHlzKHNlcilgIGlzIG5vdCB6ZXJvLCBhbmQgYGFyZ3MtJmd0O3NlcmlhbGl6ZWRfZGF0YWAgd291bGQgbm90IGJlIHplcm8uIEl0JiMzOTtzIHNhZmUgdG8gYXNzdW1lIHRoYXQgYGFyZ3MtJmd0O3NlcmlhbGl6ZWRfZGF0YWAgc2hvdWxkIG5ldmVyIGJlIDAgaW4gcHJhY3RpY2UgYW5kIGl0IGlzIGEgYnVnIGlmIGl0IGlzLiBTbywgZnVuY3Rpb25hbGx5LCB0aGUgY2hhbmdlIG1ha2VzIGEgc21hbGwgY29ycmVjdGlvbiBpbiB0aGUgcmFyZSBldmVudCBvZiBgYXJncy0mZ3Q7c2VyaWFsaXplZF9kYXRhYCBiZWluZyB1bmluaXRpYWxpemVkLCBhbmQgZG9lcyBub3QgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWwgbG9naWMuCgpJbiBjb25jbHVzaW9uLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgaXMgYSBwdXJlbHkgcmVmYWN0b3JpbmcgcGF0Y2gsIGFpbWVkIGF0IGltcHJvdmluZyB0eXBlIHNhZmV0eSBhbmQgcG90ZW50aWFsbHkgZml4aW5nIGEgbWlub3IgdGhlb3JldGljYWwgYnVnIHJlbGF0ZWQgdG8gaG93IGBwaHlzX3RvX3ZpcnQoMClgIGlzIGhhbmRsZWQuIFNpbmNlIGl0JiMzOTtzIGEgcmVmYWN0b3JpbmcgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGxvZ2ljIG9yIGV4cG9zZSBuZXcgYXR0YWNrIHN1cmZhY2VzLCBJIHdvdWxkIGNsYXNzaWZ5IHRoaXMgYXMgV29ydGhGdXp6aW5nPWZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDExOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIHRoYXQgaW50cm9kdWNlcyB0eXBlLXNhZmUgbWFjcm9zIChLSE9TRVJfQ09QWV9UWVBFU0FGRSwgS0hPU0VSX0xPQURfUFRSLCBldGMuKSBmb3Igc2VyaWFsaXppbmcgYW5kIGRlc2VyaWFsaXppbmcgcG9pbnRlcnMgaW4gdGhlIGxpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIgc3Vic3lzdGVtLiBJdCByZXBsYWNlcyByYXcgdTY0IGZpZWxkcyB3aXRoIGEgdW5pb24gYW5kIHVwZGF0ZXMgdGhlIGFzc2lnbm1lbnRzIHRvIHVzZSB0aGUgbmV3IG1hY3Jvcy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZXhlY3V0aW9uIGZsb3cgb3IgbG9naWMgdGhhdCB3b3VsZCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCBpbnRyb2R1Y2VzIHR5cGUtc2FmZSBtYWNyb3MgKEtIT1NFUl9DT1BZX1RZUEVTQUZFLCBLSE9TRVJfTE9BRF9QVFIsIGV0Yy4pIGZvciBzZXJpYWxpemluZyBhbmQgZGVzZXJpYWxpemluZyBwb2ludGVycyBpbiB0aGUgbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3ZlciBzdWJzeXN0ZW0uIEl0IHJlcGxhY2VzIHJhdyB1NjQgZmllbGRzIHdpdGggYSB1bmlvbiBhbmQgdXBkYXRlcyB0aGUgYXNzaWdubWVudHMgdG8gdXNlIHRoZSBuZXcgbWFjcm9zLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBleGVjdXRpb24gZmxvdyBvciBsb2dpYyB0aGF0IHdvdWxkIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxMToyNDoxMC41MjY3NjI4NThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTQ2NzE2MTkyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIHRoYXQgaW50cm9kdWNlcyB0eXBlLXNhZmUgbWFjcm9zIChLSE9TRVJfQ09QWV9UWVBFU0FGRSwgS0hPU0VSX0xPQURfUFRSLCBldGMuKSBmb3Igc2VyaWFsaXppbmcgYW5kIGRlc2VyaWFsaXppbmcgcG9pbnRlcnMgaW4gdGhlIGxpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIgc3Vic3lzdGVtLiBJdCByZXBsYWNlcyByYXcgdTY0IGZpZWxkcyB3aXRoIGEgdW5pb24gYW5kIHVwZGF0ZXMgdGhlIGFzc2lnbm1lbnRzIHRvIHVzZSB0aGUgbmV3IG1hY3Jvcy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZXhlY3V0aW9uIGZsb3cgb3IgbG9naWMgdGhhdCB3b3VsZCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxMToyNDoxMC41MjY3Njc5MzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MjIwNzc2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY4MmQwNzc1ZjY5NmY0MzUxYTZmZjY3Njc4MzdiMWNlYjcxZTdlNzlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjIgMTE6MjQ6MDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmggYi9pbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaFxcbmluZGV4IDVlMmViODUxOWJkYTZkLi42MTg0MDhmYmU5YzkxZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9rZXhlY19oYW5kb3Zlci5oXFxuQEAgLTEzOSw2ICsxMzksMTggQEBcXG4gXFx0XFx0KHR5cGVvZigocykucHRyKSkoKHMpLnBoeXMgPyBwaHlzX3RvX3ZpcnQoKHMpLnBoeXMpIDogTlVMTCk7IFxcXFxcXG4gXFx0fSlcXG4gXFxuKy8qIENvcGllcyBvbmUgc2VyaWFsaXphYmxlIHBvaW50ZXIgdG8gYW5vdGhlciBvZiBzYW1lIHR5cGUuICovXFxuKyNkZWZpbmUgS0hPU0VSX0NPUFlfVFlQRVNBRkUoZGVzdCwgc3JjKSBcXFxcXFxuK1xcdCh7IFxcXFxcXG4rXFx0XFx0dHlwZWNoZWNrKHR5cGVvZigoZGVzdCkucHRyKSwgKHNyYykucHRyKTsgXFxcXFxcbitcXHRcXHQoZGVzdCkucGh5cyA9IChzcmMpLnBoeXM7IFxcXFxcXG4rXFx0fSlcXG4rXFxuKy8qIENvcGllcyBvbmUgc2VyaWFsaXphYmxlIHBvaW50ZXIgdG8gYW5vdGhlci4gKi9cXG4rI2RlZmluZSBLSE9TRVJfQ09QWV9UWVBFVU5TQUZFKGRlc3QsIHNyYykgXFxcXFxcbitcXHQoeyBcXFxcXFxuK1xcdFxcdChkZXN0KS5waHlzID0gKHNyYykucGh5czsgXFxcXFxcbitcXHR9KVxcbiAvKlxcbiAgKiBUaGlzIGhlYWRlciBpcyBlbWJlZGRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggYGtob192bWFsbG9jX2NodW5rYFxcbiAgKiBhbmQgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IGNodW5rIGluIHRoZSBsaW5rZWQgbGlzdCxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9raG8vYWJpL2x1by5oIGIvaW5jbHVkZS9saW51eC9raG8vYWJpL2x1by5oXFxuaW5kZXggMjg4MDc2ZGU2ZDRhMDkuLmQ1YjNiMWMwZmVjMTJjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgva2hvL2FiaS9sdW8uaFxcbisrKyBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9sdW8uaFxcbkBAIC01OSw2ICs1OSw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYWxpZ24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2toby9hYmkvYmxvY2suaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvbGl2ZXVwZGF0ZS5oXFx1MDAzZVxcbiBcXG4gLypcXG5AQCAtODksMTQgKzkwLDE0IEBAIHN0cnVjdCBsdW9fc2VyIHtcXG4gLyoqXFxuICAqIHN0cnVjdCBsdW9fZmlsZV9zZXIgLSBSZXByZXNlbnRzIHRoZSBzZXJpYWxpemVkIHByZXNlcnZlcyBmaWxlcy5cXG4gICogQGNvbXBhdGlibGU6ICBGaWxlIGhhbmRsZXIgY29tcGF0aWJsZSBzdHJpbmcuXFxuLSAqIEBkYXRhOiAgICAgICAgUHJpdmF0ZSBkYXRhXFxuKyAqIEBzZXJpYWxpemVkX2RhdGE6ICBUaGUgc2VyaWFsaXplZCBwb2ludGVyIHVuaW9uIGZvciB0aGlzIGZpbGVcXG4gICogQHRva2VuOiAgICAgICBVc2VyIHByb3ZpZGVkIHRva2VuIGZvciB0aGlzIGZpbGVcXG4gICpcXG4gICogSWYgdGhpcyBzdHJ1Y3R1cmUgaXMgbW9kaWZpZWQsIGBMVU9fQUJJX0NPTVBBVElCTEVgIG11c3QgYmUgdXBkYXRlZC5cXG4gICovXFxuIHN0cnVjdCBsdW9fZmlsZV9zZXIge1xcbiBcXHRjaGFyIGNvbXBhdGlibGVbTElWRVVQREFURV9ITkRMX0NPTVBBVF9MRU5HVEhdO1xcbi1cXHR1NjQgZGF0YTtcXG4rXFx0REVDTEFSRV9LSE9TRVJfUFRSKHNlcmlhbGl6ZWRfZGF0YSwgdm9pZCAqKTtcXG4gXFx0dTY0IHRva2VuO1xcbiB9IF9fcGFja2VkO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmggYi9pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaFxcbmluZGV4IDg4NzIyZTVjYWYwMjBiLi40ODBkNjM4YjdkMThjNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oXFxuQEAgLTMzLDcgKzMzLDcgQEAgc3RydWN0IGZpbGU7XFxuICAqIEBmaWxlOiAgICAgICAgICAgICBUaGUgZmlsZSBvYmplY3QuIEZvciByZXRyaWV2ZTogW09VVF0gVGhlIGNhbGxiYWNrIHNldHNcXG4gICogICAgICAgICAgICAgICAgICAgIHRoaXMgdG8gdGhlIG5ldyBmaWxlLiBGb3Igb3RoZXIgb3BzOiBbSU5dIFRoZSBjYWxsZXIgc2V0c1xcbiAgKiAgICAgICAgICAgICAgICAgICAgdGhpcyB0byB0aGUgZmlsZSBiZWluZyBvcGVyYXRlZCBvbi5cXG4tICogQHNlcmlhbGl6ZWRfZGF0YTogIFRoZSBvcGFxdWUgdTY0IGhhbmRsZSwgcHJlc2VydmUvcHJlcGFyZS9mcmVlemUgbWF5IHVwZGF0ZVxcbisgKiBAc2VyaWFsaXplZF9kYXRhOiAgVGhlIHNlcmlhbGl6ZWQgcG9pbnRlciB1bmlvbiwgcHJlc2VydmUvcHJlcGFyZS9mcmVlemUgbWF5IHVwZGF0ZVxcbiAgKiAgICAgICAgICAgICAgICAgICAgdGhpcyBmaWVsZC5cXG4gICogQHByaXZhdGVfZGF0YTogICAgIFByaXZhdGUgZGF0YSBmb3IgdGhlIGZpbGUgdXNlZCB0byBob2xkIHJ1bnRpbWUgc3RhdGUgdGhhdFxcbiAgKiAgICAgICAgICAgICAgICAgICAgaXMgbm90IHByZXNlcnZlZC4gU2V0IGJ5IHRoZSBoYW5kbGVyJ3MgLnByZXNlcnZlKClcXG5AQCAtNDcsNyArNDcsNyBAQCBzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3Mge1xcbiBcXHRzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmhhbmRsZXI7XFxuIFxcdGludCByZXRyaWV2ZV9zdGF0dXM7XFxuIFxcdHN0cnVjdCBmaWxlICpmaWxlO1xcbi1cXHR1NjQgc2VyaWFsaXplZF9kYXRhO1xcbitcXHRERUNMQVJFX0tIT1NFUl9QVFIoc2VyaWFsaXplZF9kYXRhLCB2b2lkICopO1xcbiBcXHR2b2lkICpwcml2YXRlX2RhdGE7XFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jIGIva2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuY1xcbmluZGV4IGMzOWY5Njk2MWE4NWJlLi43OWNmYTUyMDE4OTkxMSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jXFxuKysrIGIva2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuY1xcbkBAIC0xMjUsNyArMTI1LDcgQEAgc3RhdGljIERFRklORV9YQVJSQVkobHVvX3ByZXNlcnZlZF9maWxlcyk7XFxuICAqIEBmaWxlOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBrZXJuZWwncyBcXHUwMDI2c3RydWN0IGZpbGUgdGhhdCBpcyBiZWluZyBwcmVzZXJ2ZWQuXFxuICAqICAgICAgICAgICAgICAgICBUaGlzIGlzIE5VTEwgaW4gdGhlIG5ldyBrZXJuZWwgdW50aWwgdGhlIGZpbGUgaXMgc3VjY2Vzc2Z1bGx5XFxuICAqICAgICAgICAgICAgICAgICByZXRyaWV2ZWQuXFxuLSAqIEBzZXJpYWxpemVkX2RhdGE6IFRoZSBvcGFxdWUgdTY0IGhhbmRsZSB0byB0aGUgc2VyaWFsaXplZCBzdGF0ZSBvZiB0aGUgZmlsZS5cXG4rICogQHNlcmlhbGl6ZWRfZGF0YTogVGhlIHNlcmlhbGl6ZWQgcG9pbnRlciB1bmlvbiB0byB0aGUgc2VyaWFsaXplZCBzdGF0ZSBvZiB0aGUgZmlsZS5cXG4gICogICAgICAgICAgICAgICAgIFRoaXMgaGFuZGxlIGlzIHBhc3NlZCBiYWNrIHRvIHRoZSBoYW5kbGVyJ3MgLmZyZWV6ZSgpLFxcbiAgKiAgICAgICAgICAgICAgICAgLnJldHJpZXZlKCksIGFuZCAuZmluaXNoKCkgY2FsbGJhY2tzLCBhbGxvd2luZyBpdCB0byB0cmFja1xcbiAgKiAgICAgICAgICAgICAgICAgYW5kIHVwZGF0ZSBpdHMgc2VyaWFsaXplZCBzdGF0ZSBhY3Jvc3MgcGhhc2VzLlxcbkBAIC0xNjEsNyArMTYxLDcgQEAgc3RhdGljIERFRklORV9YQVJSQVkobHVvX3ByZXNlcnZlZF9maWxlcyk7XFxuIHN0cnVjdCBsdW9fZmlsZSB7XFxuIFxcdHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmg7XFxuIFxcdHN0cnVjdCBmaWxlICpmaWxlO1xcbi1cXHR1NjQgc2VyaWFsaXplZF9kYXRhO1xcbitcXHRERUNMQVJFX0tIT1NFUl9QVFIoc2VyaWFsaXplZF9kYXRhLCB2b2lkICopO1xcbiBcXHR2b2lkICpwcml2YXRlX2RhdGE7XFxuIFxcdGludCByZXRyaWV2ZV9zdGF0dXM7XFxuIFxcdHN0cnVjdCBtdXRleCBtdXRleDtcXG5AQCAtMjg5LDcgKzI4OSw3IEBAIGludCBsdW9fcHJlc2VydmVfZmlsZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCwgdTY0IHRva2VuLCBpbnQgZmQpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyX2tmcmVlO1xcbiBcXG4tXFx0bHVvX2ZpbGUtXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YSA9IGFyZ3Muc2VyaWFsaXplZF9kYXRhO1xcbitcXHRLSE9TRVJfQ09QWV9UWVBFU0FGRShsdW9fZmlsZS1cXHUwMDNlc2VyaWFsaXplZF9kYXRhLCBhcmdzLnNlcmlhbGl6ZWRfZGF0YSk7XFxuIFxcdGx1b19maWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEgPSBhcmdzLnByaXZhdGVfZGF0YTtcXG4gXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2bHVvX2ZpbGUtXFx1MDAzZWxpc3QsIFxcdTAwMjZmaWxlX3NldC1cXHUwMDNlZmlsZXNfbGlzdCk7XFxuIFxcdGZpbGVfc2V0LVxcdTAwM2Vjb3VudCsrO1xcbkBAIC0zNDIsNyArMzQyLDcgQEAgdm9pZCBsdW9fZmlsZV91bnByZXNlcnZlX2ZpbGVzKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0KVxcbiBcXG4gXFx0XFx0YXJncy5oYW5kbGVyID0gbHVvX2ZpbGUtXFx1MDAzZWZoO1xcbiBcXHRcXHRhcmdzLmZpbGUgPSBsdW9fZmlsZS1cXHUwMDNlZmlsZTtcXG4tXFx0XFx0YXJncy5zZXJpYWxpemVkX2RhdGEgPSBsdW9fZmlsZS1cXHUwMDNlc2VyaWFsaXplZF9kYXRhO1xcbitcXHRcXHRLSE9TRVJfQ09QWV9UWVBFU0FGRShhcmdzLnNlcmlhbGl6ZWRfZGF0YSwgbHVvX2ZpbGUtXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XFxuIFxcdFxcdGFyZ3MucHJpdmF0ZV9kYXRhID0gbHVvX2ZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gXFx0XFx0bHVvX2ZpbGUtXFx1MDAzZWZoLVxcdTAwM2VvcHMtXFx1MDAzZXVucHJlc2VydmUoXFx1MDAyNmFyZ3MpO1xcbiBcXHRcXHRsdW9fZmxiX2ZpbGVfdW5wcmVzZXJ2ZShsdW9fZmlsZS1cXHUwMDNlZmgpO1xcbkBAIC0zNzUsMTIgKzM3NSwxMiBAQCBzdGF0aWMgaW50IGx1b19maWxlX2ZyZWV6ZV9vbmUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsXFxuIFxcbiBcXHRcXHRhcmdzLmhhbmRsZXIgPSBsdW9fZmlsZS1cXHUwMDNlZmg7XFxuIFxcdFxcdGFyZ3MuZmlsZSA9IGx1b19maWxlLVxcdTAwM2VmaWxlO1xcbi1cXHRcXHRhcmdzLnNlcmlhbGl6ZWRfZGF0YSA9IGx1b19maWxlLVxcdTAwM2VzZXJpYWxpemVkX2RhdGE7XFxuK1xcdFxcdEtIT1NFUl9DT1BZX1RZUEVTQUZFKGFyZ3Muc2VyaWFsaXplZF9kYXRhLCBsdW9fZmlsZS1cXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcXG4gXFx0XFx0YXJncy5wcml2YXRlX2RhdGEgPSBsdW9fZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiBcXG4gXFx0XFx0ZXJyID0gbHVvX2ZpbGUtXFx1MDAzZWZoLVxcdTAwM2VvcHMtXFx1MDAzZWZyZWV6ZShcXHUwMDI2YXJncyk7XFxuIFxcdFxcdGlmICghZXJyKVxcbi1cXHRcXHRcXHRsdW9fZmlsZS1cXHUwMDNlc2VyaWFsaXplZF9kYXRhID0gYXJncy5zZXJpYWxpemVkX2RhdGE7XFxuK1xcdFxcdFxcdEtIT1NFUl9DT1BZX1RZUEVTQUZFKGx1b19maWxlLVxcdTAwM2VzZXJpYWxpemVkX2RhdGEsIGFyZ3Muc2VyaWFsaXplZF9kYXRhKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIGVycjtcXG5AQCAtMzk2LDcgKzM5Niw3IEBAIHN0YXRpYyB2b2lkIGx1b19maWxlX3VuZnJlZXplX29uZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCxcXG4gXFxuIFxcdFxcdGFyZ3MuaGFuZGxlciA9IGx1b19maWxlLVxcdTAwM2VmaDtcXG4gXFx0XFx0YXJncy5maWxlID0gbHVvX2ZpbGUtXFx1MDAzZWZpbGU7XFxuLVxcdFxcdGFyZ3Muc2VyaWFsaXplZF9kYXRhID0gbHVvX2ZpbGUtXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YTtcXG4rXFx0XFx0S0hPU0VSX0NPUFlfVFlQRVNBRkUoYXJncy5zZXJpYWxpemVkX2RhdGEsIGx1b19maWxlLVxcdTAwM2VzZXJpYWxpemVkX2RhdGEpO1xcbiBcXHRcXHRhcmdzLnByaXZhdGVfZGF0YSA9IGx1b19maWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcbiBcXHRcXHRsdW9fZmlsZS1cXHUwMDNlZmgtXFx1MDAzZW9wcy1cXHUwMDNldW5mcmVlemUoXFx1MDAyNmFyZ3MpO1xcbkBAIC00ODMsNyArNDgzLDcgQEAgaW50IGx1b19maWxlX2ZyZWV6ZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCxcXG4gXFxuIFxcdFxcdHN0cnNjcHkoZmlsZV9zZXItXFx1MDAzZWNvbXBhdGlibGUsIGx1b19maWxlLVxcdTAwM2VmaC1cXHUwMDNlY29tcGF0aWJsZSxcXG4gXFx0XFx0XFx0c2l6ZW9mKGZpbGVfc2VyLVxcdTAwM2Vjb21wYXRpYmxlKSk7XFxuLVxcdFxcdGZpbGVfc2VyLVxcdTAwM2VkYXRhID0gbHVvX2ZpbGUtXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YTtcXG4rXFx0XFx0S0hPU0VSX0NPUFlfVFlQRVNBRkUoZmlsZV9zZXItXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YSwgbHVvX2ZpbGUtXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XFxuIFxcdFxcdGZpbGVfc2VyLVxcdTAwM2V0b2tlbiA9IGx1b19maWxlLVxcdTAwM2V0b2tlbjtcXG4gXFx0fVxcbiBcXG5AQCAtNTg3LDcgKzU4Nyw3IEBAIGludCBsdW9fcmV0cmlldmVfZmlsZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCwgdTY0IHRva2VuLFxcbiBcXHR9XFxuIFxcbiBcXHRhcmdzLmhhbmRsZXIgPSBsdW9fZmlsZS1cXHUwMDNlZmg7XFxuLVxcdGFyZ3Muc2VyaWFsaXplZF9kYXRhID0gbHVvX2ZpbGUtXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YTtcXG4rXFx0S0hPU0VSX0NPUFlfVFlQRVNBRkUoYXJncy5zZXJpYWxpemVkX2RhdGEsIGx1b19maWxlLVxcdTAwM2VzZXJpYWxpemVkX2RhdGEpO1xcbiBcXHRlcnIgPSBsdW9fZmlsZS1cXHUwMDNlZmgtXFx1MDAzZW9wcy1cXHUwMDNlcmV0cmlldmUoXFx1MDAyNmFyZ3MpO1xcbiBcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdC8qIEtlZXAgdGhlIGVycm9yIGNvZGUgZm9yIGxhdGVyIHVzZS4gKi9cXG5AQCAtNjIxLDcgKzYyMSw3IEBAIHN0YXRpYyBpbnQgbHVvX2ZpbGVfY2FuX2ZpbmlzaF9vbmUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsXFxuIFxcbiBcXHRcXHRhcmdzLmhhbmRsZXIgPSBsdW9fZmlsZS1cXHUwMDNlZmg7XFxuIFxcdFxcdGFyZ3MuZmlsZSA9IGx1b19maWxlLVxcdTAwM2VmaWxlO1xcbi1cXHRcXHRhcmdzLnNlcmlhbGl6ZWRfZGF0YSA9IGx1b19maWxlLVxcdTAwM2VzZXJpYWxpemVkX2RhdGE7XFxuK1xcdFxcdEtIT1NFUl9DT1BZX1RZUEVTQUZFKGFyZ3Muc2VyaWFsaXplZF9kYXRhLCBsdW9fZmlsZS1cXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcXG4gXFx0XFx0YXJncy5yZXRyaWV2ZV9zdGF0dXMgPSBsdW9fZmlsZS1cXHUwMDNlcmV0cmlldmVfc3RhdHVzO1xcbiBcXHRcXHRjYW5fZmluaXNoID0gbHVvX2ZpbGUtXFx1MDAzZWZoLVxcdTAwM2VvcHMtXFx1MDAzZWNhbl9maW5pc2goXFx1MDAyNmFyZ3MpO1xcbiBcXHR9XFxuQEAgLTYzOCw3ICs2MzgsNyBAQCBzdGF0aWMgdm9pZCBsdW9fZmlsZV9maW5pc2hfb25lKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LFxcbiBcXG4gXFx0YXJncy5oYW5kbGVyID0gbHVvX2ZpbGUtXFx1MDAzZWZoO1xcbiBcXHRhcmdzLmZpbGUgPSBsdW9fZmlsZS1cXHUwMDNlZmlsZTtcXG4tXFx0YXJncy5zZXJpYWxpemVkX2RhdGEgPSBsdW9fZmlsZS1cXHUwMDNlc2VyaWFsaXplZF9kYXRhO1xcbitcXHRLSE9TRVJfQ09QWV9UWVBFU0FGRShhcmdzLnNlcmlhbGl6ZWRfZGF0YSwgbHVvX2ZpbGUtXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XFxuIFxcdGFyZ3MucmV0cmlldmVfc3RhdHVzID0gbHVvX2ZpbGUtXFx1MDAzZXJldHJpZXZlX3N0YXR1cztcXG4gXFxuIFxcdGx1b19maWxlLVxcdTAwM2VmaC1cXHUwMDNlb3BzLVxcdTAwM2VmaW5pc2goXFx1MDAyNmFyZ3MpO1xcbkBAIC03NDgsNyArNzQ4LDcgQEAgc3RhdGljIGludCBsdW9fZmlsZV9kZXNlcmlhbGl6ZV9vbmUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsXFxuIFxcbiBcXHRsdW9fZmlsZS1cXHUwMDNlZmggPSBmaDtcXG4gXFx0bHVvX2ZpbGUtXFx1MDAzZWZpbGUgPSBOVUxMO1xcbi1cXHRsdW9fZmlsZS1cXHUwMDNlc2VyaWFsaXplZF9kYXRhID0gc2VyLVxcdTAwM2VkYXRhO1xcbitcXHRLSE9TRVJfQ09QWV9UWVBFU0FGRShsdW9fZmlsZS1cXHUwMDNlc2VyaWFsaXplZF9kYXRhLCBzZXItXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XFxuIFxcdGx1b19maWxlLVxcdTAwM2V0b2tlbiA9IHNlci1cXHUwMDNldG9rZW47XFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNmx1b19maWxlLVxcdTAwM2VtdXRleCk7XFxuIFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmx1b19maWxlLVxcdTAwM2VsaXN0LCBcXHUwMDI2ZmlsZV9zZXQtXFx1MDAzZWZpbGVzX2xpc3QpO1xcbmRpZmYgLS1naXQgYS9tbS9tZW1mZF9sdW8uYyBiL21tL21lbWZkX2x1by5jXFxuaW5kZXggNTlkZTIxMGJlZTVmOWUuLmRhZjJjNGMzZGEzNWYzIDEwMDY0NFxcbi0tLSBhL21tL21lbWZkX2x1by5jXFxuKysrIGIvbW0vbWVtZmRfbHVvLmNcXG5AQCAtMjU3LDYgKzI1Nyw3IEBAIHN0YXRpYyB2b2lkIG1lbWZkX2x1b191bnByZXNlcnZlX2ZvbGlvcyhzdHJ1Y3Qga2hvX3ZtYWxsb2MgKmtob192bWFsbG9jLFxcbiBcXG4gc3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxcbiB7XFxuK1xcdERFQ0xBUkVfS0hPU0VSX1BUUihzZCwgc3RydWN0IG1lbWZkX2x1b19zZXIgKik7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGFyZ3MtXFx1MDAzZWZpbGUpO1xcbiBcXHRzdHJ1Y3QgbWVtZmRfbHVvX2ZvbGlvX3NlciAqZm9saW9zX3NlcjtcXG4gXFx0c3RydWN0IG1lbWZkX2x1b19zZXIgKnNlcjtcXG5AQCAtMzA5LDcgKzMxMCw4IEBAIHN0YXRpYyBpbnQgbWVtZmRfbHVvX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG4gXFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcXG4gXFxuIFxcdGFyZ3MtXFx1MDAzZXByaXZhdGVfZGF0YSA9IGZvbGlvc19zZXI7XFxuLVxcdGFyZ3MtXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YSA9IHZpcnRfdG9fcGh5cyhzZXIpO1xcbitcXHRLSE9TRVJfU1RPUkVfUFRSKHNkLCBzZXIpO1xcbitcXHRLSE9TRVJfQ09QWV9UWVBFVU5TQUZFKGFyZ3MtXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YSwgc2QpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0zMjUsMTEgKzMyNywxMCBAQCBzdGF0aWMgaW50IG1lbWZkX2x1b19mcmVlemUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxcbiB7XFxuIFxcdHN0cnVjdCBtZW1mZF9sdW9fc2VyICpzZXI7XFxuIFxcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKCFhcmdzLVxcdTAwM2VzZXJpYWxpemVkX2RhdGEpKVxcbitcXHRzZXIgPSBLSE9TRVJfTE9BRF9QVFIoYXJncy1cXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghc2VyKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRzZXIgPSBwaHlzX3RvX3ZpcnQoYXJncy1cXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcXG4tXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBwb3MgbWlnaHQgaGF2ZSBjaGFuZ2VkIHNpbmNlIHByZXBhcmUuIEV2ZXJ5dGhpbmcgZWxzZSBzdGF5cyB0aGVcXG4gXFx0ICogc2FtZS5cXG5AQCAtMzQ0LDE0ICszNDUsMTMgQEAgc3RhdGljIHZvaWQgbWVtZmRfbHVvX3VucHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShhcmdzLVxcdTAwM2VmaWxlKTtcXG4gXFx0c3RydWN0IG1lbWZkX2x1b19zZXIgKnNlcjtcXG4gXFxuLVxcdGlmIChXQVJOX09OX09OQ0UoIWFyZ3MtXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YSkpXFxuK1xcdHNlciA9IEtIT1NFUl9MT0FEX1BUUihhcmdzLVxcdTAwM2VzZXJpYWxpemVkX2RhdGEpO1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCFzZXIpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRpbm9kZV9sb2NrKGlub2RlKTtcXG4gXFx0c2htZW1fZnJlZXplKGlub2RlLCBmYWxzZSk7XFxuIFxcbi1cXHRzZXIgPSBwaHlzX3RvX3ZpcnQoYXJncy1cXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcXG4tXFxuIFxcdG1lbWZkX2x1b191bnByZXNlcnZlX2ZvbGlvcyhcXHUwMDI2c2VyLVxcdTAwM2Vmb2xpb3MsIGFyZ3MtXFx1MDAzZXByaXZhdGVfZGF0YSxcXG4gXFx0XFx0XFx0XFx0ICAgIHNlci1cXHUwMDNlbnJfZm9saW9zKTtcXG4gXFxuQEAgLTM5Nyw3ICszOTcsNyBAQCBzdGF0aWMgdm9pZCBtZW1mZF9sdW9fZmluaXNoKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG4gXFx0aWYgKGFyZ3MtXFx1MDAzZXJldHJpZXZlX3N0YXR1cylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0c2VyID0gcGh5c190b192aXJ0KGFyZ3MtXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XFxuK1xcdHNlciA9IEtIT1NFUl9MT0FEX1BUUihhcmdzLVxcdTAwM2VzZXJpYWxpemVkX2RhdGEpO1xcbiBcXHRpZiAoIXNlcilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG5AQCAtNTIyLDcgKzUyMiw3IEBAIHN0YXRpYyBpbnQgbWVtZmRfbHVvX3JldHJpZXZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG4gXFx0c3RydWN0IGZpbGUgKmZpbGU7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRzZXIgPSBwaHlzX3RvX3ZpcnQoYXJncy1cXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcXG4rXFx0c2VyID0gS0hPU0VSX0xPQURfUFRSKGFyZ3MtXFx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XFxuIFxcdGlmICghc2VyKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDExOjI0OjExLjAwOTcxNDYxOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5ODQyMDQ2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IGludHJvZHVjZXMgdHlwZS1zYWZlIG1hY3JvcyAoS0hPU0VSX0NPUFlfVFlQRVNBRkUsIEtIT1NFUl9MT0FEX1BUUiwgZXRjLikgZm9yIHNlcmlhbGl6aW5nIGFuZCBkZXNlcmlhbGl6aW5nIHBvaW50ZXJzIGluIHRoZSBsaXZldXBkYXRlL2tleGVjX2hhbmRvdmVyIHN1YnN5c3RlbS4gSXQgcmVwbGFjZXMgcmF3IHU2NCBmaWVsZHMgd2l0aCBhIHVuaW9uIGFuZCB1cGRhdGVzIHRoZSBhc3NpZ25tZW50cyB0byB1c2UgdGhlIG5ldyBtYWNyb3MuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGxvZ2ljIHRoYXQgd291bGQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ODJkMDc3NWY2OTZmNDM1MWE2ZmY2NzY3ODM3YjFjZWI3MWU3ZTc5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjIgMTE6MjQ6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaCBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9rZXhlY19oYW5kb3Zlci5oXG5pbmRleCA1ZTJlYjg1MTliZGE2ZC4uNjE4NDA4ZmJlOWM5MWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmhcbkBAIC0xMzksNiArMTM5LDE4IEBAXG4gXHRcdCh0eXBlb2YoKHMpLnB0cikpKChzKS5waHlzID8gcGh5c190b192aXJ0KChzKS5waHlzKSA6IE5VTEwpOyBcXFxuIFx0fSlcbiBcbisvKiBDb3BpZXMgb25lIHNlcmlhbGl6YWJsZSBwb2ludGVyIHRvIGFub3RoZXIgb2Ygc2FtZSB0eXBlLiAqL1xuKyNkZWZpbmUgS0hPU0VSX0NPUFlfVFlQRVNBRkUoZGVzdCwgc3JjKSBcXFxuK1x0KHsgXFxcbitcdFx0dHlwZWNoZWNrKHR5cGVvZigoZGVzdCkucHRyKSwgKHNyYykucHRyKTsgXFxcbitcdFx0KGRlc3QpLnBoeXMgPSAoc3JjKS5waHlzOyBcXFxuK1x0fSlcbitcbisvKiBDb3BpZXMgb25lIHNlcmlhbGl6YWJsZSBwb2ludGVyIHRvIGFub3RoZXIuICovXG4rI2RlZmluZSBLSE9TRVJfQ09QWV9UWVBFVU5TQUZFKGRlc3QsIHNyYykgXFxcbitcdCh7IFxcXG4rXHRcdChkZXN0KS5waHlzID0gKHNyYykucGh5czsgXFxcbitcdH0pXG4gLypcbiAgKiBUaGlzIGhlYWRlciBpcyBlbWJlZGRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggYGtob192bWFsbG9jX2NodW5rYFxuICAqIGFuZCBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIG5leHQgY2h1bmsgaW4gdGhlIGxpbmtlZCBsaXN0LFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2hvL2FiaS9sdW8uaCBiL2luY2x1ZGUvbGludXgva2hvL2FiaS9sdW8uaFxuaW5kZXggMjg4MDc2ZGU2ZDRhMDkuLmQ1YjNiMWMwZmVjMTJjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9raG8vYWJpL2x1by5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2toby9hYmkvbHVvLmhcbkBAIC01OSw2ICs1OSw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYWxpZ24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2toby9hYmkvYmxvY2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbGl2ZXVwZGF0ZS5oXHUwMDNlXG4gXG4gLypcbkBAIC04OSwxNCArOTAsMTQgQEAgc3RydWN0IGx1b19zZXIge1xuIC8qKlxuICAqIHN0cnVjdCBsdW9fZmlsZV9zZXIgLSBSZXByZXNlbnRzIHRoZSBzZXJpYWxpemVkIHByZXNlcnZlcyBmaWxlcy5cbiAgKiBAY29tcGF0aWJsZTogIEZpbGUgaGFuZGxlciBjb21wYXRpYmxlIHN0cmluZy5cbi0gKiBAZGF0YTogICAgICAgIFByaXZhdGUgZGF0YVxuKyAqIEBzZXJpYWxpemVkX2RhdGE6ICBUaGUgc2VyaWFsaXplZCBwb2ludGVyIHVuaW9uIGZvciB0aGlzIGZpbGVcbiAgKiBAdG9rZW46ICAgICAgIFVzZXIgcHJvdmlkZWQgdG9rZW4gZm9yIHRoaXMgZmlsZVxuICAqXG4gICogSWYgdGhpcyBzdHJ1Y3R1cmUgaXMgbW9kaWZpZWQsIGBMVU9fQUJJX0NPTVBBVElCTEVgIG11c3QgYmUgdXBkYXRlZC5cbiAgKi9cbiBzdHJ1Y3QgbHVvX2ZpbGVfc2VyIHtcbiBcdGNoYXIgY29tcGF0aWJsZVtMSVZFVVBEQVRFX0hORExfQ09NUEFUX0xFTkdUSF07XG4tXHR1NjQgZGF0YTtcbitcdERFQ0xBUkVfS0hPU0VSX1BUUihzZXJpYWxpemVkX2RhdGEsIHZvaWQgKik7XG4gXHR1NjQgdG9rZW47XG4gfSBfX3BhY2tlZDtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oXG5pbmRleCA4ODcyMmU1Y2FmMDIwYi4uNDgwZDYzOGI3ZDE4YzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmhcbkBAIC0zMyw3ICszMyw3IEBAIHN0cnVjdCBmaWxlO1xuICAqIEBmaWxlOiAgICAgICAgICAgICBUaGUgZmlsZSBvYmplY3QuIEZvciByZXRyaWV2ZTogW09VVF0gVGhlIGNhbGxiYWNrIHNldHNcbiAgKiAgICAgICAgICAgICAgICAgICAgdGhpcyB0byB0aGUgbmV3IGZpbGUuIEZvciBvdGhlciBvcHM6IFtJTl0gVGhlIGNhbGxlciBzZXRzXG4gICogICAgICAgICAgICAgICAgICAgIHRoaXMgdG8gdGhlIGZpbGUgYmVpbmcgb3BlcmF0ZWQgb24uXG4tICogQHNlcmlhbGl6ZWRfZGF0YTogIFRoZSBvcGFxdWUgdTY0IGhhbmRsZSwgcHJlc2VydmUvcHJlcGFyZS9mcmVlemUgbWF5IHVwZGF0ZVxuKyAqIEBzZXJpYWxpemVkX2RhdGE6ICBUaGUgc2VyaWFsaXplZCBwb2ludGVyIHVuaW9uLCBwcmVzZXJ2ZS9wcmVwYXJlL2ZyZWV6ZSBtYXkgdXBkYXRlXG4gICogICAgICAgICAgICAgICAgICAgIHRoaXMgZmllbGQuXG4gICogQHByaXZhdGVfZGF0YTogICAgIFByaXZhdGUgZGF0YSBmb3IgdGhlIGZpbGUgdXNlZCB0byBob2xkIHJ1bnRpbWUgc3RhdGUgdGhhdFxuICAqICAgICAgICAgICAgICAgICAgICBpcyBub3QgcHJlc2VydmVkLiBTZXQgYnkgdGhlIGhhbmRsZXIncyAucHJlc2VydmUoKVxuQEAgLTQ3LDcgKzQ3LDcgQEAgc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzIHtcbiBcdHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqaGFuZGxlcjtcbiBcdGludCByZXRyaWV2ZV9zdGF0dXM7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbi1cdHU2NCBzZXJpYWxpemVkX2RhdGE7XG4rXHRERUNMQVJFX0tIT1NFUl9QVFIoc2VyaWFsaXplZF9kYXRhLCB2b2lkICopO1xuIFx0dm9pZCAqcHJpdmF0ZV9kYXRhO1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYyBiL2tlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmNcbmluZGV4IGMzOWY5Njk2MWE4NWJlLi43OWNmYTUyMDE4OTkxMSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmNcbisrKyBiL2tlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmNcbkBAIC0xMjUsNyArMTI1LDcgQEAgc3RhdGljIERFRklORV9YQVJSQVkobHVvX3ByZXNlcnZlZF9maWxlcyk7XG4gICogQGZpbGU6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGtlcm5lbCdzIFx1MDAyNnN0cnVjdCBmaWxlIHRoYXQgaXMgYmVpbmcgcHJlc2VydmVkLlxuICAqICAgICAgICAgICAgICAgICBUaGlzIGlzIE5VTEwgaW4gdGhlIG5ldyBrZXJuZWwgdW50aWwgdGhlIGZpbGUgaXMgc3VjY2Vzc2Z1bGx5XG4gICogICAgICAgICAgICAgICAgIHJldHJpZXZlZC5cbi0gKiBAc2VyaWFsaXplZF9kYXRhOiBUaGUgb3BhcXVlIHU2NCBoYW5kbGUgdG8gdGhlIHNlcmlhbGl6ZWQgc3RhdGUgb2YgdGhlIGZpbGUuXG4rICogQHNlcmlhbGl6ZWRfZGF0YTogVGhlIHNlcmlhbGl6ZWQgcG9pbnRlciB1bmlvbiB0byB0aGUgc2VyaWFsaXplZCBzdGF0ZSBvZiB0aGUgZmlsZS5cbiAgKiAgICAgICAgICAgICAgICAgVGhpcyBoYW5kbGUgaXMgcGFzc2VkIGJhY2sgdG8gdGhlIGhhbmRsZXIncyAuZnJlZXplKCksXG4gICogICAgICAgICAgICAgICAgIC5yZXRyaWV2ZSgpLCBhbmQgLmZpbmlzaCgpIGNhbGxiYWNrcywgYWxsb3dpbmcgaXQgdG8gdHJhY2tcbiAgKiAgICAgICAgICAgICAgICAgYW5kIHVwZGF0ZSBpdHMgc2VyaWFsaXplZCBzdGF0ZSBhY3Jvc3MgcGhhc2VzLlxuQEAgLTE2MSw3ICsxNjEsNyBAQCBzdGF0aWMgREVGSU5FX1hBUlJBWShsdW9fcHJlc2VydmVkX2ZpbGVzKTtcbiBzdHJ1Y3QgbHVvX2ZpbGUge1xuIFx0c3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaDtcbiBcdHN0cnVjdCBmaWxlICpmaWxlO1xuLVx0dTY0IHNlcmlhbGl6ZWRfZGF0YTtcbitcdERFQ0xBUkVfS0hPU0VSX1BUUihzZXJpYWxpemVkX2RhdGEsIHZvaWQgKik7XG4gXHR2b2lkICpwcml2YXRlX2RhdGE7XG4gXHRpbnQgcmV0cmlldmVfc3RhdHVzO1xuIFx0c3RydWN0IG11dGV4IG11dGV4O1xuQEAgLTI4OSw3ICsyODksNyBAQCBpbnQgbHVvX3ByZXNlcnZlX2ZpbGUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsIHU2NCB0b2tlbiwgaW50IGZkKVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfa2ZyZWU7XG4gXG4tXHRsdW9fZmlsZS1cdTAwM2VzZXJpYWxpemVkX2RhdGEgPSBhcmdzLnNlcmlhbGl6ZWRfZGF0YTtcbitcdEtIT1NFUl9DT1BZX1RZUEVTQUZFKGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSwgYXJncy5zZXJpYWxpemVkX2RhdGEpO1xuIFx0bHVvX2ZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gYXJncy5wcml2YXRlX2RhdGE7XG4gXHRsaXN0X2FkZF90YWlsKFx1MDAyNmx1b19maWxlLVx1MDAzZWxpc3QsIFx1MDAyNmZpbGVfc2V0LVx1MDAzZWZpbGVzX2xpc3QpO1xuIFx0ZmlsZV9zZXQtXHUwMDNlY291bnQrKztcbkBAIC0zNDIsNyArMzQyLDcgQEAgdm9pZCBsdW9fZmlsZV91bnByZXNlcnZlX2ZpbGVzKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0KVxuIFxuIFx0XHRhcmdzLmhhbmRsZXIgPSBsdW9fZmlsZS1cdTAwM2VmaDtcbiBcdFx0YXJncy5maWxlID0gbHVvX2ZpbGUtXHUwMDNlZmlsZTtcbi1cdFx0YXJncy5zZXJpYWxpemVkX2RhdGEgPSBsdW9fZmlsZS1cdTAwM2VzZXJpYWxpemVkX2RhdGE7XG4rXHRcdEtIT1NFUl9DT1BZX1RZUEVTQUZFKGFyZ3Muc2VyaWFsaXplZF9kYXRhLCBsdW9fZmlsZS1cdTAwM2VzZXJpYWxpemVkX2RhdGEpO1xuIFx0XHRhcmdzLnByaXZhdGVfZGF0YSA9IGx1b19maWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdFx0bHVvX2ZpbGUtXHUwMDNlZmgtXHUwMDNlb3BzLVx1MDAzZXVucHJlc2VydmUoXHUwMDI2YXJncyk7XG4gXHRcdGx1b19mbGJfZmlsZV91bnByZXNlcnZlKGx1b19maWxlLVx1MDAzZWZoKTtcbkBAIC0zNzUsMTIgKzM3NSwxMiBAQCBzdGF0aWMgaW50IGx1b19maWxlX2ZyZWV6ZV9vbmUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsXG4gXG4gXHRcdGFyZ3MuaGFuZGxlciA9IGx1b19maWxlLVx1MDAzZWZoO1xuIFx0XHRhcmdzLmZpbGUgPSBsdW9fZmlsZS1cdTAwM2VmaWxlO1xuLVx0XHRhcmdzLnNlcmlhbGl6ZWRfZGF0YSA9IGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YTtcbitcdFx0S0hPU0VSX0NPUFlfVFlQRVNBRkUoYXJncy5zZXJpYWxpemVkX2RhdGEsIGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XG4gXHRcdGFyZ3MucHJpdmF0ZV9kYXRhID0gbHVvX2ZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFxuIFx0XHRlcnIgPSBsdW9fZmlsZS1cdTAwM2VmaC1cdTAwM2VvcHMtXHUwMDNlZnJlZXplKFx1MDAyNmFyZ3MpO1xuIFx0XHRpZiAoIWVycilcbi1cdFx0XHRsdW9fZmlsZS1cdTAwM2VzZXJpYWxpemVkX2RhdGEgPSBhcmdzLnNlcmlhbGl6ZWRfZGF0YTtcbitcdFx0XHRLSE9TRVJfQ09QWV9UWVBFU0FGRShsdW9fZmlsZS1cdTAwM2VzZXJpYWxpemVkX2RhdGEsIGFyZ3Muc2VyaWFsaXplZF9kYXRhKTtcbiBcdH1cbiBcbiBcdHJldHVybiBlcnI7XG5AQCAtMzk2LDcgKzM5Niw3IEBAIHN0YXRpYyB2b2lkIGx1b19maWxlX3VuZnJlZXplX29uZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCxcbiBcbiBcdFx0YXJncy5oYW5kbGVyID0gbHVvX2ZpbGUtXHUwMDNlZmg7XG4gXHRcdGFyZ3MuZmlsZSA9IGx1b19maWxlLVx1MDAzZWZpbGU7XG4tXHRcdGFyZ3Muc2VyaWFsaXplZF9kYXRhID0gbHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhO1xuK1x0XHRLSE9TRVJfQ09QWV9UWVBFU0FGRShhcmdzLnNlcmlhbGl6ZWRfZGF0YSwgbHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbiBcdFx0YXJncy5wcml2YXRlX2RhdGEgPSBsdW9fZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXG4gXHRcdGx1b19maWxlLVx1MDAzZWZoLVx1MDAzZW9wcy1cdTAwM2V1bmZyZWV6ZShcdTAwMjZhcmdzKTtcbkBAIC00ODMsNyArNDgzLDcgQEAgaW50IGx1b19maWxlX2ZyZWV6ZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCxcbiBcbiBcdFx0c3Ryc2NweShmaWxlX3Nlci1cdTAwM2Vjb21wYXRpYmxlLCBsdW9fZmlsZS1cdTAwM2VmaC1cdTAwM2Vjb21wYXRpYmxlLFxuIFx0XHRcdHNpemVvZihmaWxlX3Nlci1cdTAwM2Vjb21wYXRpYmxlKSk7XG4tXHRcdGZpbGVfc2VyLVx1MDAzZWRhdGEgPSBsdW9fZmlsZS1cdTAwM2VzZXJpYWxpemVkX2RhdGE7XG4rXHRcdEtIT1NFUl9DT1BZX1RZUEVTQUZFKGZpbGVfc2VyLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSwgbHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbiBcdFx0ZmlsZV9zZXItXHUwMDNldG9rZW4gPSBsdW9fZmlsZS1cdTAwM2V0b2tlbjtcbiBcdH1cbiBcbkBAIC01ODcsNyArNTg3LDcgQEAgaW50IGx1b19yZXRyaWV2ZV9maWxlKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LCB1NjQgdG9rZW4sXG4gXHR9XG4gXG4gXHRhcmdzLmhhbmRsZXIgPSBsdW9fZmlsZS1cdTAwM2VmaDtcbi1cdGFyZ3Muc2VyaWFsaXplZF9kYXRhID0gbHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhO1xuK1x0S0hPU0VSX0NPUFlfVFlQRVNBRkUoYXJncy5zZXJpYWxpemVkX2RhdGEsIGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XG4gXHRlcnIgPSBsdW9fZmlsZS1cdTAwM2VmaC1cdTAwM2VvcHMtXHUwMDNlcmV0cmlldmUoXHUwMDI2YXJncyk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdC8qIEtlZXAgdGhlIGVycm9yIGNvZGUgZm9yIGxhdGVyIHVzZS4gKi9cbkBAIC02MjEsNyArNjIxLDcgQEAgc3RhdGljIGludCBsdW9fZmlsZV9jYW5fZmluaXNoX29uZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCxcbiBcbiBcdFx0YXJncy5oYW5kbGVyID0gbHVvX2ZpbGUtXHUwMDNlZmg7XG4gXHRcdGFyZ3MuZmlsZSA9IGx1b19maWxlLVx1MDAzZWZpbGU7XG4tXHRcdGFyZ3Muc2VyaWFsaXplZF9kYXRhID0gbHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhO1xuK1x0XHRLSE9TRVJfQ09QWV9UWVBFU0FGRShhcmdzLnNlcmlhbGl6ZWRfZGF0YSwgbHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbiBcdFx0YXJncy5yZXRyaWV2ZV9zdGF0dXMgPSBsdW9fZmlsZS1cdTAwM2VyZXRyaWV2ZV9zdGF0dXM7XG4gXHRcdGNhbl9maW5pc2ggPSBsdW9fZmlsZS1cdTAwM2VmaC1cdTAwM2VvcHMtXHUwMDNlY2FuX2ZpbmlzaChcdTAwMjZhcmdzKTtcbiBcdH1cbkBAIC02MzgsNyArNjM4LDcgQEAgc3RhdGljIHZvaWQgbHVvX2ZpbGVfZmluaXNoX29uZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCxcbiBcbiBcdGFyZ3MuaGFuZGxlciA9IGx1b19maWxlLVx1MDAzZWZoO1xuIFx0YXJncy5maWxlID0gbHVvX2ZpbGUtXHUwMDNlZmlsZTtcbi1cdGFyZ3Muc2VyaWFsaXplZF9kYXRhID0gbHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhO1xuK1x0S0hPU0VSX0NPUFlfVFlQRVNBRkUoYXJncy5zZXJpYWxpemVkX2RhdGEsIGx1b19maWxlLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XG4gXHRhcmdzLnJldHJpZXZlX3N0YXR1cyA9IGx1b19maWxlLVx1MDAzZXJldHJpZXZlX3N0YXR1cztcbiBcbiBcdGx1b19maWxlLVx1MDAzZWZoLVx1MDAzZW9wcy1cdTAwM2VmaW5pc2goXHUwMDI2YXJncyk7XG5AQCAtNzQ4LDcgKzc0OCw3IEBAIHN0YXRpYyBpbnQgbHVvX2ZpbGVfZGVzZXJpYWxpemVfb25lKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LFxuIFxuIFx0bHVvX2ZpbGUtXHUwMDNlZmggPSBmaDtcbiBcdGx1b19maWxlLVx1MDAzZWZpbGUgPSBOVUxMO1xuLVx0bHVvX2ZpbGUtXHUwMDNlc2VyaWFsaXplZF9kYXRhID0gc2VyLVx1MDAzZWRhdGE7XG4rXHRLSE9TRVJfQ09QWV9UWVBFU0FGRShsdW9fZmlsZS1cdTAwM2VzZXJpYWxpemVkX2RhdGEsIHNlci1cdTAwM2VzZXJpYWxpemVkX2RhdGEpO1xuIFx0bHVvX2ZpbGUtXHUwMDNldG9rZW4gPSBzZXItXHUwMDNldG9rZW47XG4gXHRtdXRleF9pbml0KFx1MDAyNmx1b19maWxlLVx1MDAzZW11dGV4KTtcbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bHVvX2ZpbGUtXHUwMDNlbGlzdCwgXHUwMDI2ZmlsZV9zZXQtXHUwMDNlZmlsZXNfbGlzdCk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtZmRfbHVvLmMgYi9tbS9tZW1mZF9sdW8uY1xuaW5kZXggNTlkZTIxMGJlZTVmOWUuLmRhZjJjNGMzZGEzNWYzIDEwMDY0NFxuLS0tIGEvbW0vbWVtZmRfbHVvLmNcbisrKyBiL21tL21lbWZkX2x1by5jXG5AQCAtMjU3LDYgKzI1Nyw3IEBAIHN0YXRpYyB2b2lkIG1lbWZkX2x1b191bnByZXNlcnZlX2ZvbGlvcyhzdHJ1Y3Qga2hvX3ZtYWxsb2MgKmtob192bWFsbG9jLFxuIFxuIHN0YXRpYyBpbnQgbWVtZmRfbHVvX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcbiB7XG4rXHRERUNMQVJFX0tIT1NFUl9QVFIoc2QsIHN0cnVjdCBtZW1mZF9sdW9fc2VyICopO1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoYXJncy1cdTAwM2VmaWxlKTtcbiBcdHN0cnVjdCBtZW1mZF9sdW9fZm9saW9fc2VyICpmb2xpb3Nfc2VyO1xuIFx0c3RydWN0IG1lbWZkX2x1b19zZXIgKnNlcjtcbkBAIC0zMDksNyArMzEwLDggQEAgc3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxuIFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcbiBcbiBcdGFyZ3MtXHUwMDNlcHJpdmF0ZV9kYXRhID0gZm9saW9zX3Nlcjtcbi1cdGFyZ3MtXHUwMDNlc2VyaWFsaXplZF9kYXRhID0gdmlydF90b19waHlzKHNlcik7XG4rXHRLSE9TRVJfU1RPUkVfUFRSKHNkLCBzZXIpO1xuK1x0S0hPU0VSX0NPUFlfVFlQRVVOU0FGRShhcmdzLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSwgc2QpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMzI1LDExICszMjcsMTAgQEAgc3RhdGljIGludCBtZW1mZF9sdW9fZnJlZXplKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcbiB7XG4gXHRzdHJ1Y3QgbWVtZmRfbHVvX3NlciAqc2VyO1xuIFxuLVx0aWYgKFdBUk5fT05fT05DRSghYXJncy1cdTAwM2VzZXJpYWxpemVkX2RhdGEpKVxuK1x0c2VyID0gS0hPU0VSX0xPQURfUFRSKGFyZ3MtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbitcdGlmIChXQVJOX09OX09OQ0UoIXNlcikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0c2VyID0gcGh5c190b192aXJ0KGFyZ3MtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbi1cbiBcdC8qXG4gXHQgKiBUaGUgcG9zIG1pZ2h0IGhhdmUgY2hhbmdlZCBzaW5jZSBwcmVwYXJlLiBFdmVyeXRoaW5nIGVsc2Ugc3RheXMgdGhlXG4gXHQgKiBzYW1lLlxuQEAgLTM0NCwxNCArMzQ1LDEzIEBAIHN0YXRpYyB2b2lkIG1lbWZkX2x1b191bnByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGFyZ3MtXHUwMDNlZmlsZSk7XG4gXHRzdHJ1Y3QgbWVtZmRfbHVvX3NlciAqc2VyO1xuIFxuLVx0aWYgKFdBUk5fT05fT05DRSghYXJncy1cdTAwM2VzZXJpYWxpemVkX2RhdGEpKVxuK1x0c2VyID0gS0hPU0VSX0xPQURfUFRSKGFyZ3MtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbitcdGlmIChXQVJOX09OX09OQ0UoIXNlcikpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlub2RlX2xvY2soaW5vZGUpO1xuIFx0c2htZW1fZnJlZXplKGlub2RlLCBmYWxzZSk7XG4gXG4tXHRzZXIgPSBwaHlzX3RvX3ZpcnQoYXJncy1cdTAwM2VzZXJpYWxpemVkX2RhdGEpO1xuLVxuIFx0bWVtZmRfbHVvX3VucHJlc2VydmVfZm9saW9zKFx1MDAyNnNlci1cdTAwM2Vmb2xpb3MsIGFyZ3MtXHUwMDNlcHJpdmF0ZV9kYXRhLFxuIFx0XHRcdFx0ICAgIHNlci1cdTAwM2Vucl9mb2xpb3MpO1xuIFxuQEAgLTM5Nyw3ICszOTcsNyBAQCBzdGF0aWMgdm9pZCBtZW1mZF9sdW9fZmluaXNoKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcbiBcdGlmIChhcmdzLVx1MDAzZXJldHJpZXZlX3N0YXR1cylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0c2VyID0gcGh5c190b192aXJ0KGFyZ3MtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbitcdHNlciA9IEtIT1NFUl9MT0FEX1BUUihhcmdzLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSk7XG4gXHRpZiAoIXNlcilcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTUyMiw3ICs1MjIsNyBAQCBzdGF0aWMgaW50IG1lbWZkX2x1b19yZXRyaWV2ZShzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3MgKmFyZ3MpXG4gXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbiBcdGludCBlcnI7XG4gXG4tXHRzZXIgPSBwaHlzX3RvX3ZpcnQoYXJncy1cdTAwM2VzZXJpYWxpemVkX2RhdGEpO1xuK1x0c2VyID0gS0hPU0VSX0xPQURfUFRSKGFyZ3MtXHUwMDNlc2VyaWFsaXplZF9kYXRhKTtcbiBcdGlmICghc2VyKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDExOjI0OjExLjAwOTcxNjE1OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MTcyMjM1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgU2VyaWFsaXphdGlvbi9EZXNlcmlhbGl6YXRpb24gaW4gdGhlIEtITyBTdWJzeXN0ZW0qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0J3MgYSByZWZhY3RvcmluZyBlZmZvcnQgd2l0aGluIHRoZSBsaXZldXBkYXRlL2tleGVjX2hhbmRvdmVyIChLSE8pIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIGEgbW92ZSBhd2F5IGZyb20gdXNpbmcgcmF3IGB1NjRgIGZvciBzZXJpYWxpemVkIHBvaW50ZXJzIGFuZCB0b3dhcmRzIGEgbW9yZSBzdHJ1Y3R1cmVkIGFwcHJvYWNoIGxldmVyYWdpbmcgYERFQ0xBUkVfS0hPU0VSX1BUUmAgYW5kIGFzc29jaWF0ZWQgbWFjcm9zLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gYGluY2x1ZGUvbGludXgva2hvL2FiaS9rZXhlY19oYW5kb3Zlci5oYC4gSXQgaW50cm9kdWNlcyB0d28gbmV3IG1hY3JvczogYEtIT1NFUl9DT1BZX1RZUEVTQUZFYCBhbmQgYEtIT1NFUl9DT1BZX1RZUEVVTlNBRkVgLiBJdCBsb29rcyBsaWtlIGBLSE9TRVJfQ09QWV9UWVBFU0FGRWAgcGVyZm9ybXMgYSBgdHlwZWNoZWNrYCBiZWZvcmUgY29weWluZyB0aGUgcGh5c2ljYWwgYWRkcmVzcywgd2hpbGUgYEtIT1NFUl9DT1BZX1RZUEVVTlNBRkVgIGNvcGllcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBkaXJlY3RseS4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGRlZmluaXRpb24gb2YgYERFQ0xBUkVfS0hPU0VSX1BUUmAgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBUaGUgcGF0Y2ggYWxzbyB1cGRhdGVzIHNldmVyYWwga2V5IGRhdGEgc3RydWN0dXJlcywgbmFtZWx5IGBzdHJ1Y3QgbHVvX2ZpbGVfc2VyYCBhbmQgYHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJnc2AgdG8gdXNlIHRoZXNlIG5ldyBtYWNyb3MgYW5kIHRoZSBgREVDTEFSRV9LSE9TRVJfUFRSYCBkYXRhIHN0cnVjdHVyZS5cblxuVGhlIGNoYW5nZSB0b3VjaGVzIGBrZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jYCBhbmQgYG1tL21lbWZkX2x1by5jYCwgc28gaXQncyBjbGVhcmx5IGltcGFjdGluZyB0aGUgaW1wbGVtZW50YXRpb24gc2lkZSwgdG9vLiBHaXZlbiB0aGUgZmlsZSBsb2NhdGlvbnMgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMsIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgaW1wcm92aW5nIHRoZSB3YXkgcG9pbnRlcnMgYXJlIGhhbmRsZWQgZHVyaW5nIGxpdmUgdXBkYXRlcyBhbmQga2V4ZWMgaGFuZG92ZXJzIOKAkyB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhlIG1haW4gaW1wYWN0IGlzIHJlcGxhY2luZyBhc3NpZ25tZW50cyBhbmQgcG9pbnRlciBjb252ZXJzaW9ucywgbGlrZSBgdmlydF90b19waHlzYC9gcGh5c190b192aXJ0YCwgd2l0aCB0aGUgbWFjcm9zIGBLSE9TRVJfQ09QWV9UWVBFU0FGRWAsIGBLSE9TRVJfU1RPUkVfUFRSYCwgYEtIT1NFUl9MT0FEX1BUUmAuXG5cbk5vdywgSSdtIHRyeWluZyB0byBhc2NlcnRhaW4gaWYgdGhpcyBpcyBwdXJlbHkgYSByZWZhY3RvcmluZyBmb3IgdHlwZSBzYWZldHksIG9yIGlmIHRoZXJlJ3MgYSBmdW5jdGlvbmFsIGFzcGVjdCB0byBpdC4gTG9va2luZyBhdCB0aGUgbWFjcm8gZGVmaW5pdGlvbnMsIGBLSE9TRVJfQ09QWV9UWVBFU0FGRWAgdXNlcyBgdHlwZWNoZWNrYCwgYnV0IGJvdGggbWFjcm9zIHVsdGltYXRlbHkganVzdCBjb3B5IHRoZSBgLnBoeXNgIG1lbWJlci4gVGh1cywgdGhlIG1hY3JvcyBhbG9uZSBkb24ndCBhcHBlYXIgdG8gYmUgaW50cm9kdWNpbmcgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlIGtleSBtdXN0IGxpZSBpbiBob3cgYERFQ0xBUkVfS0hPU0VSX1BUUmAgZGVmaW5lcyB0aGUgaW50ZXJuYWwgc3RydWN0dXJlIGZvciB0aGVzZSBzZXJpYWxpemVkIHBvaW50ZXJzLCBhbmQgaG93IHRoZSB2YXJpb3VzIGNvcHkgYW5kIGxvYWQgb3BlcmF0aW9ucyBhcmUgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byByZXZpZXcgYGluY2x1ZGUvbGludXgva2hvL2FiaS9rZXhlY19oYW5kb3Zlci5oYCB0byBzZWUgaG93IHRob3NlIGFyZSBzZXQgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MDEsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxMToyNDoyMC44MjY5NDIxMjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwNzg4ODY1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJERUNMQVJFX0tIT1NFUl9QVFJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmgtMTIwLS8qIEhlbHBlciBtYWNybyB0byBkZWZpbmUgYSB1bmlvbiBmb3IgYSBzZXJpYWxpemFibGUgcG9pbnRlci4gKi9cXG5pbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaDoxMjE6I2RlZmluZSBERUNMQVJFX0tIT1NFUl9QVFIobmFtZSwgdHlwZSlcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmgtMTIyLVxcdHVuaW9uIHsgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaD0xNTk9c3RydWN0IGtob192bWFsbG9jX2hkciB7XFxuaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmg6MTYwOlxcdERFQ0xBUkVfS0hPU0VSX1BUUihuZXh0LCBzdHJ1Y3Qga2hvX3ZtYWxsb2NfY2h1bmsgKik7XFxuaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmgtMTYxLX07XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaD0xODU9c3RydWN0IGtob192bWFsbG9jIHtcXG5pbmNsdWRlL2xpbnV4L2toby9hYmkva2V4ZWNfaGFuZG92ZXIuaDoxODY6XFx0REVDTEFSRV9LSE9TRVJfUFRSKGZpcnN0LCBzdHJ1Y3Qga2hvX3ZtYWxsb2NfY2h1bmsgKik7XFxuaW5jbHVkZS9saW51eC9raG8vYWJpL2tleGVjX2hhbmRvdmVyLmgtMTg3LVxcdHVuc2lnbmVkIGludCB0b3RhbF9wYWdlcztcXG4tLVxcbmluY2x1ZGUvbGludXgva2hvL2FiaS9sdW8uaD05OD1zdHJ1Y3QgbHVvX2ZpbGVfc2VyIHtcXG5pbmNsdWRlL2xpbnV4L2toby9hYmkvbHVvLmgtOTktXFx0Y2hhciBjb21wYXRpYmxlW0xJVkVVUERBVEVfSE5ETF9DT01QQVRfTEVOR1RIXTtcXG5pbmNsdWRlL2xpbnV4L2toby9hYmkvbHVvLmg6MTAwOlxcdERFQ0xBUkVfS0hPU0VSX1BUUihzZXJpYWxpemVkX2RhdGEsIHZvaWQgKik7XFxuaW5jbHVkZS9saW51eC9raG8vYWJpL2x1by5oLTEwMS1cXHR1NjQgdG9rZW47XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaD00Nj1zdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3Mge1xcbi0tXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtNDktXFx0c3RydWN0IGZpbGUgKmZpbGU7XFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6NTA6XFx0REVDTEFSRV9LSE9TRVJfUFRSKHNlcmlhbGl6ZWRfZGF0YSwgdm9pZCAqKTtcXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC01MS1cXHR2b2lkICpwcml2YXRlX2RhdGE7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jPTE2MT1zdHJ1Y3QgbHVvX2ZpbGUge1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy0xNjMtXFx0c3RydWN0IGZpbGUgKmZpbGU7XFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzoxNjQ6XFx0REVDTEFSRV9LSE9TRVJfUFRSKHNlcmlhbGl6ZWRfZGF0YSwgdm9pZCAqKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTE2NS1cXHR2b2lkICpwcml2YXRlX2RhdGE7XFxuLS1cXG5tbS9tZW1mZF9sdW8uYz0yNTg9c3RhdGljIGludCBtZW1mZF9sdW9fcHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxcbm1tL21lbWZkX2x1by5jLTI1OS17XFxubW0vbWVtZmRfbHVvLmM6MjYwOlxcdERFQ0xBUkVfS0hPU0VSX1BUUihzZCwgc3RydWN0IG1lbWZkX2x1b19zZXIgKik7XFxubW0vbWVtZmRfbHVvLmMtMjYxLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGFyZ3MtXFx1MDAzZWZpbGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQxMToyNDoyMy4xMzQ4MzU5NzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODg1OTA1NzIyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUG9pbnRlciBTZXJpYWxpemF0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFib3V0IGhvdyBwb2ludGVycyBhcmUgc2VyaWFsaXplZCBhbmQgZGVzZXJpYWxpemVkIHdpdGhpbiB0aGlzIHN5c3RlbS4gSXQgcmVwbGFjZXMgYSBzdHJhaWdodGZvcndhcmQgYHU2NGAgZm9yIHN0b3JpbmcgcGh5c2ljYWwgYWRkcmVzc2VzIHdpdGggYSBgdW5pb25gIGNvbnRhaW5pbmcgYm90aCBhIHBvaW50ZXIgKGBwdHJgKSBhbmQgYSBwaHlzaWNhbCBhZGRyZXNzIChgcGh5c2ApIOKAkyBlc3NlbnRpYWxseSwgYSB0eXBlZCB3cmFwcGVyIGFyb3VuZCB0aGUgZXhpc3RpbmcgcGh5c2ljYWwgYWRkcmVzcyByZXByZXNlbnRhdGlvbi5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzY2VydGFpbiBpZiB0aGlzIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0cywgdGhlICphY3R1YWwqIG1lY2hhbmljcyByZW1haW4gY29uc2lzdGVudC4gVGhlIG9sZCBtZXRob2Qgc3RvcmVkIHRoZSByZXN1bHQgb2YgYHZpcnRfdG9fcGh5cyhzZXIpYCBkaXJlY3RseSBpbnRvIGEgYHU2NGAuIFRoZSBuZXcgbWV0aG9kIHVzZXMgbWFjcm9zLCBgS0hPU0VSX1NUT1JFX1BUUmAgYW5kIGBLSE9TRVJfTE9BRF9QVFJgLCBidXQgZXNzZW50aWFsbHkgZG9lcyB0aGUgKnNhbWUqIHRoaW5nOiBzdG9yZXMgYHZpcnRfdG9fcGh5cyhwKWAgKG9yIHplcm8gaWYgdGhlIHBvaW50ZXIgaXMgbnVsbCkgaW50byB0aGUgYC5waHlzYCBtZW1iZXIsIGFuZCBsb2FkcyBpdCBiYWNrIHVzaW5nIGBwaHlzX3RvX3ZpcnRgLiBUaGUga2V5IGRpZmZlcmVuY2VzIEkgc2VlIGFyZSB0eXBlIHNhZmV0eSBhbmQgcmVhZGFiaWxpdHksIHdoaWNoIGlzIGdvb2QuXG5cblRoZSBmYWN0IHRoYXQgYGx1b19maWxlX3NlcmAgaXMgcGFydCBvZiB0aGUgQUJJIHJhaXNlcyBhIGNvbmNlcm4uIFRoaXMgaXMgYW4gYXJlYSB3aGVyZSBjaGFuZ2VzIG5lZWQgdG8gYmUgZXNwZWNpYWxseSB3ZWxsIHNjcnV0aW5pemVkLiBIb3dldmVyLCB0aGUgYERFQ0xBUkVfS0hPU0VSX1BUUmAgbWFjcm8gZW5zdXJlcyB0aGUgc2l6ZSBhbmQgbGF5b3V0IG9mIHRoZSBgbHVvX2ZpbGVfc2VyYCBzdHJ1Y3QgcmVtYWlucyBpZGVudGljYWwgYmVjYXVzZSBib3RoIHRoZSBwb2ludGVyIGFuZCB0aGUgYHU2NGAgYXJlIDggYnl0ZXMgZWFjaCwgdGhlIHNpemUgb2YgdGhlIHVuaW9uLiBUaGUgc3RydWN0dXJlJ3Mgc2l6ZSBpc24ndCBpbXBhY3RlZCBieSB0aGlzIGNoYW5nZS4gSXQncyBhIHJlZmFjdG9yaW5nIHRvIGltcHJvdmUgY2xhcml0eS5cblxuRGlnZ2luZyBkZWVwZXIsIEkgc2VlIGEgY2hlY2s6IGBpZiAoV0FSTl9PTl9PTkNFKCFhcmdzLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YSkpYC4gVGhpcyBoYXMgYmVlbiB1cGRhdGVkIHRvIHVzZSB0aGUgbWFjcm86IGBzZXIgPSBLSE9TRVJfTE9BRF9QVFIoYXJncy1cdTAwM2VzZXJpYWxpemVkX2RhdGEpOyBpZiAoV0FSTl9PTl9PTkNFKCFzZXIpKWAuIFByZXZpb3VzbHksIGl0IGNoZWNrZWQgYSBgdTY0YCBkaXJlY3RseTsgbm93IGl0IGNoZWNrcyB0aGUgZGVyZWZlcmVuY2VkIHBvaW50ZXIgZnJvbSB0aGF0IGB1NjRgLiBgS0hPU0VSX0xPQURfUFRSYCBoYW5kbGVzIHRoZSB0cmFuc2xhdGlvbiwgYW5kIGNvcnJlY3RseSByZXR1cm5zIGBOVUxMYCBpZiB0aGUgYC5waHlzYCBtZW1iZXIgaXMgemVyby4gVGhpcywgb24gaXRzIGZhY2UsIGFwcGVhcnMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbC4gSWYgYHBoeXNgIGlzIHplcm8sIGl0IGNvcnJlY3RseSByZXR1cm5zIGBOVUxMYCwgYW5kIHRoZSB3YXJuaW5nIGZpcmVzIGFzIGl0IHNob3VsZC5cblxuTm93LCBoZXJlJ3MgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBwb2ludC4gSW4gdGhlIG9sZGVyIHZlcnNpb24sIGBwaHlzX3RvX3ZpcnQoMClgICptaWdodCogbm90IG5lY2Vzc2FyaWx5IHJldHVybiBgTlVMTGAgb24gYWxsIGFyY2hpdGVjdHVyZXMuIE9uIHg4NiwgZm9yIGluc3RhbmNlLCBgcGh5c190b192aXJ0KDApYCB3b3VsZCByZXR1cm4gYFBBR0VfT0ZGU0VUYCwgd2hpY2ggaXMgKm5vdCogemVyby4gVGhpcyBjb3VsZCBjcmVhdGUgYSBkaXZlcmdlbmNlLiBIb3dldmVyLCB0aGUgY29kZSdzIGJlaGF2aW9yICpzaG91bGRuJ3QqIGRlcGVuZCBvbiBgcGh5c190b192aXJ0KDApYCB5aWVsZGluZyBgTlVMTGAsIGJ1dCBvbiB0aGUgdmFsdWUgYmVpbmcgdW5pbml0aWFsaXplZC4gSXQgc2VlbXMgbGlrZSB0aGUgb3JpZ2luYWwgY29kZSBkaWQgbm90IGFjY291bnQgZm9yIHRoYXQgZWRnZSBjYXNlLCBhbmQgaGFzIG5vdyBiZWVuIGNvcnJlY3RlZCAoaW4gYSBtaW5vciB3YXksIGl0IHNlZW1zKSBiZWNhdXNlIGBLSE9TRVJfTE9BRF9QVFJgICphbHdheXMqIHJldHVybnMgYE5VTExgIHdoZW4gYC5waHlzYCBpcyAwLlxuXG5Mb29raW5nIGF0IHdoZXJlIHRoZSBgc2VyaWFsaXplZF9kYXRhYCBpcyBpbml0aWFsaXplZCwgaXQgaXMgc2V0IHdpdGggYHZpcnRfdG9fcGh5cyhzZXIpYCB3aGVyZSBgc2VyYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AuIFNvLCBgdmlydF90b19waHlzKHNlcilgIGlzIG5vdCB6ZXJvLCBhbmQgYGFyZ3MtXHUwMDNlc2VyaWFsaXplZF9kYXRhYCB3b3VsZCBub3QgYmUgemVyby4gSXQncyBzYWZlIHRvIGFzc3VtZSB0aGF0IGBhcmdzLVx1MDAzZXNlcmlhbGl6ZWRfZGF0YWAgc2hvdWxkIG5ldmVyIGJlIDAgaW4gcHJhY3RpY2UgYW5kIGl0IGlzIGEgYnVnIGlmIGl0IGlzLiBTbywgZnVuY3Rpb25hbGx5LCB0aGUgY2hhbmdlIG1ha2VzIGEgc21hbGwgY29ycmVjdGlvbiBpbiB0aGUgcmFyZSBldmVudCBvZiBgYXJncy1cdTAwM2VzZXJpYWxpemVkX2RhdGFgIGJlaW5nIHVuaW5pdGlhbGl6ZWQsIGFuZCBkb2VzIG5vdCBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb3IgaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbCBsb2dpYy5cblxuSW4gY29uY2x1c2lvbiwgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgaXMgYSBwdXJlbHkgcmVmYWN0b3JpbmcgcGF0Y2gsIGFpbWVkIGF0IGltcHJvdmluZyB0eXBlIHNhZmV0eSBhbmQgcG90ZW50aWFsbHkgZml4aW5nIGEgbWlub3IgdGhlb3JldGljYWwgYnVnIHJlbGF0ZWQgdG8gaG93IGBwaHlzX3RvX3ZpcnQoMClgIGlzIGhhbmRsZWQuIFNpbmNlIGl0J3MgYSByZWZhY3RvcmluZyBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBsb2dpYyBvciBleHBvc2UgbmV3IGF0dGFjayBzdXJmYWNlcywgSSB3b3VsZCBjbGFzc2lmeSB0aGlzIGFzIFdvcnRoRnV6emluZz1mYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIyMSwiT3V0cHV0VG9rZW5zIjoxMjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDExOjI0OjQxLjk5Mzg5NTEwNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIHRoYXQgaW50cm9kdWNlcyB0eXBlLXNhZmUgbWFjcm9zIChLSE9TRVJfQ09QWV9UWVBFU0FGRSwgS0hPU0VSX0xPQURfUFRSLCBldGMuKSBmb3Igc2VyaWFsaXppbmcgYW5kIGRlc2VyaWFsaXppbmcgcG9pbnRlcnMgaW4gdGhlIGxpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIgc3Vic3lzdGVtLiBJdCByZXBsYWNlcyByYXcgdTY0IGZpZWxkcyB3aXRoIGEgdW5pb24gYW5kIHVwZGF0ZXMgdGhlIGFzc2lnbm1lbnRzIHRvIHVzZSB0aGUgbmV3IG1hY3Jvcy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZXhlY3V0aW9uIGZsb3cgb3IgbG9naWMgdGhhdCB3b3VsZCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCBpbnRyb2R1Y2VzIHR5cGUtc2FmZSBtYWNyb3MgKEtIT1NFUl9DT1BZX1RZUEVTQUZFLCBLSE9TRVJfTE9BRF9QVFIsIGV0Yy4pIGZvciBzZXJpYWxpemluZyBhbmQgZGVzZXJpYWxpemluZyBwb2ludGVycyBpbiB0aGUgbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3ZlciBzdWJzeXN0ZW0uIEl0IHJlcGxhY2VzIHJhdyB1NjQgZmllbGRzIHdpdGggYSB1bmlvbiBhbmQgdXBkYXRlcyB0aGUgYXNzaWdubWVudHMgdG8gdXNlIHRoZSBuZXcgbWFjcm9zLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBleGVjdXRpb24gZmxvdyBvciBsb2dpYyB0aGF0IHdvdWxkIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowf52tw[1] Phase: Running StartedAt: 2026-06-22 11:24:53 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf52tw[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-22 11:24:53 +0000 UTC FinishedAt: 2026-06-22 11:24:57 +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,}