Name: series-workflow2wk2f Phase: Failed StartedAt: 2026-07-09 09:02:27 +0000 UTC FinishedAt: 2026-07-09 09:29:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wk2f[0] Phase: Succeeded StartedAt: 2026-07-09 09:02:27 +0000 UTC FinishedAt: 2026-07-09 09:29:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wk2f[0].run-triage Phase: Succeeded StartedAt: 2026-07-09 09:02:27 +0000 UTC FinishedAt: 2026-07-09 09:29:20 +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+CgkJCTx0ZD4yMDI2LzA3LzA5IDA5OjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBJRFBGIChJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24pIGRyaXZlci4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBuZXR3b3JrIGRyaXZlciBmb3IgSW50ZWwgSVBVcy4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUgb3IgR0NFKSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwOToyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDViMzljY2JkMzQ2OWQwM2ZkMzBlZmQ2MGNkMWI3ZmM3NzBhNzQ4NzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCA5IDA5OjI4OjI4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmhcbmluZGV4IGVjMWI3NWYwMzliYjI1Li41NDE0YmJiZWUwN2FkZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaFxuQEAgLTM4NCw2ICYjNDM7Mzg0LDcgQEAgc3RydWN0IGlkcGZfdnBvcnQge1xuIFx0c3RydWN0IGlkcGZfdHhfcXVldWUgKip0eHFzO1xuIFx0dTE2IG51bV90eHE7XG4gXHR1MTYgbnVtX3hkcF90eHE7XG4mIzQzO1x0Ym9vbCB4ZHBzcV9mYjtcbiBcdGJvb2wgeGRwc3Ffc2hhcmU7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXG5pbmRleCA3ZjkwNTY0MDRmNjRmYy4uNjQ3MmJmZjljZWIzN2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXG5AQCAtMjI3LDcgJiM0MzsyMjcsNyBAQCBzdGF0aWMgaW50IGlkcGZfdHhfZGVzY19hbGxvYyhjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQsXG4gXG4gXHRpZHBmX3hza19zZXR1cF9xdWV1ZSh2cG9ydCwgdHhfcSwgVklSVENITkwyX1FVRVVFX1RZUEVfVFgpO1xuIFxuLVx0aWYgKCFpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhfcSkpXG4mIzQzO1x0aWYgKCFpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhfcSkgfHwgaWRwZl9xdWV1ZV9oYXMoWERQLCB0eF9xKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRyZWZpbGxxID0gdHhfcS1cdTAwM2VyZWZpbGxxO1xuQEAgLTEwNTUsNiAmIzQzOzEwNTUsMTEgQEAgc3RhdGljIHZvaWQgaWRwZl9jbGVhbl9xdWV1ZV9zZXQoY29uc3Qgc3RydWN0IGlkcGZfcXVldWVfc2V0ICpxcylcbiBcdFx0XHRpZiAoaWRwZl9xdWV1ZV9oYXMoWERQLCBxLVx1MDAzZXR4cSkpIHtcbiBcdFx0XHRcdHEtXHUwMDNldHhxLVx1MDAzZXBlbmRpbmcgPSAwO1xuIFx0XHRcdFx0cS1cdTAwM2V0eHEtXHUwMDNleGRwX3R4ID0gMDtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2aWRwZl94ZHBfZmIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdCAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgcS1cdTAwM2V0eHEpKVxuJiM0MztcdFx0XHRcdFx0Yml0bWFwX3plcm8ocS1cdTAwM2V0eHEtXHUwMDNlcGVuZGluZ19tYXNrLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgcS1cdTAwM2V0eHEtXHUwMDNlZGVzY19jb3VudCk7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdHEtXHUwMDNldHhxLVx1MDAzZXR4cV9ncnAtXHUwMDNlbnVtX2NvbXBsZXRpb25zX3BlbmRpbmcgPSAwO1xuIFx0XHRcdH1cbkBAIC0xMzE3LDcgJiM0MzsxMzIyLDggQEAgc3RhdGljIHZvaWQgaWRwZl90eHFfZ3JvdXBfcmVsKHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMpXG4gXHRcdFx0aWYgKCF0eHFfZ3JwLVx1MDAzZXR4cXNbal0pXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRpZiAoaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHR4cV9ncnAtXHUwMDNldHhxc1tqXSkpIHtcbiYjNDM7XHRcdFx0aWYgKGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB0eHFfZ3JwLVx1MDAzZXR4cXNbal0pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgIWlkcGZfcXVldWVfaGFzKFhEUCwgdHhxX2dycC1cdTAwM2V0eHFzW2pdKSkge1xuIFx0XHRcdFx0a2ZyZWUodHhxX2dycC1cdTAwM2V0eHFzW2pdLVx1MDAzZXJlZmlsbHEpO1xuIFx0XHRcdFx0dHhxX2dycC1cdTAwM2V0eHFzW2pdLVx1MDAzZXJlZmlsbHEgPSBOVUxMO1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxuaW5kZXggNGJlNWIzYjZkM2VkMmIuLjdlYmU1OWQ4MWUxNzA3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxuQEAgLTYyNSwxMSAmIzQzOzYyNSwxMiBAQCBsaWJldGhfY2FjaGVsaW5lX3NldF9hc3NlcnQoc3RydWN0IGlkcGZfcnhfcXVldWUsXG4gICogQGNsZWFuX2J1ZGdldDogc2luZ2xlcSBvbmx5LCBxdWV1ZSBjbGVhbmluZyBidWRnZXRcbiAgKiBAY2xlYW5lZF9wa3RzOiBOdW1iZXIgb2YgcGFja2V0cyBjbGVhbmVkIGZvciB0aGUgYWJvdmUgc2FpZCBjYXNlXG4gICogQHJlZmlsbHE6IFBvaW50ZXIgdG8gcmVmaWxsIHF1ZXVlXG4mIzQzOyAqIEBjYWNoZWRfdHN0YW1wX2NhcHM6IFR4IHRpbWVzdGFtcCBjYXBhYmlsaXRpZXMgbmVnb3RpYXRlZCB3aXRoIHRoZSBDUFxuICAqIEBwZW5kaW5nOiBudW1iZXIgb2YgcGVuZGluZyBkZXNjcmlwdG9ycyB0byBzZW5kIGluIFFCXG4gICogQHhkcF90eDogbnVtYmVyIG9mIHBlbmRpbmcgXHUwMDI2eGRwX2J1ZmYgb3IgXHUwMDI2eGRwX2ZyYW1lIGJ1ZmZlcnNcbiAgKiBAdGltZXI6IHRpbWVyIGZvciBYRFAgVHggcXVldWUgY2xlYW51cFxuICAqIEB4ZHBfbG9jazogbG9jayBmb3IgWERQIFR4IHF1ZXVlcyBzaGFyaW5nXG4tICogQGNhY2hlZF90c3RhbXBfY2FwczogVHggdGltZXN0YW1wIGNhcGFiaWxpdGllcyBuZWdvdGlhdGVkIHdpdGggdGhlIENQXG4mIzQzOyAqIEBwZW5kaW5nX21hc2s6IG1hc2sgb2YgYnVmZmVycyB3YWl0aW5nIGZvciBjb21wbGV0aW9uIGluIHRoZSBGQiBYRFAgbW9kZVxuICAqIEB0c3RhbXBfdGFzazogV29yayB0aGF0IGhhbmRsZXMgVHggdGltZXN0YW1wIHJlYWRcbiAgKiBAc3RhdHNfc3luYzogU2VlIHN0cnVjdCB1NjRfc3RhdHNfc3luY1xuICAqIEBxX3N0YXRzOiBTZWUgdW5pb24gaWRwZl90eF9xdWV1ZV9zdGF0c1xuQEAgLTY4OSw2ICYjNDM7NjkwLDggQEAgc3RydWN0IGlkcGZfdHhfcXVldWUge1xuIFx0XHRcdHUxNiBjbGVhbmVkX3BrdHM7XG4gXG4gXHRcdFx0c3RydWN0IGlkcGZfc3dfcXVldWUgKnJlZmlsbHE7XG4mIzQzO1xuJiM0MztcdFx0XHRzdHJ1Y3QgaWRwZl9wdHBfdnBvcnRfdHhfdHN0YW1wX2NhcHMgKmNhY2hlZF90c3RhbXBfY2FwcztcbiBcdFx0fTtcbiBcdFx0c3RydWN0IHtcbiBcdFx0XHR1MzIgcGVuZGluZztcbkBAIC02OTYsMTAgJiM0Mzs2OTksMTEgQEAgc3RydWN0IGlkcGZfdHhfcXVldWUge1xuIFxuIFx0XHRcdHN0cnVjdCBsaWJldGhfeGRwc3FfdGltZXIgKnRpbWVyO1xuIFx0XHRcdHN0cnVjdCBsaWJldGhfeGRwc3FfbG9jayB4ZHBfbG9jaztcbiYjNDM7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGxvbmcgKnBlbmRpbmdfbWFzaztcbiBcdFx0fTtcbiBcdH07XG4gXG4tXHRzdHJ1Y3QgaWRwZl9wdHBfdnBvcnRfdHhfdHN0YW1wX2NhcHMgKmNhY2hlZF90c3RhbXBfY2FwcztcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCAqdHN0YW1wX3Rhc2s7XG4gXG4gXHRzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgc3RhdHNfc3luYztcbkBAIC03MTgsOCAmIzQzOzcyMiw3IEBAIHN0cnVjdCBpZHBmX3R4X3F1ZXVlIHtcbiBcdF9fY2FjaGVsaW5lX2dyb3VwX2VuZF9hbGlnbmVkKGNvbGQpO1xuIH07XG4gbGliZXRoX2NhY2hlbGluZV9zZXRfYXNzZXJ0KHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCA2NCxcbi1cdFx0XHQgICAgMTA0ICYjNDM7XG4tXHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCBjYWNoZWRfdHN0YW1wX2NhcHMpIC1cbiYjNDM7XHRcdFx0ICAgIDk2ICYjNDM7IG9mZnNldG9mKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCB0c3RhbXBfdGFzaykgLVxuIFx0XHRcdCAgICBvZmZzZXRvZmVuZChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgdGltZXIpICYjNDM7XG4gXHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCBxX3N0YXRzKSAtXG4gXHRcdFx0ICAgIG9mZnNldG9mZW5kKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCB0c3RhbXBfdGFzayksXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmNcbmluZGV4IGNiY2NkNDU0Njc2ODE2Li44YTRlMGExMzM2NGRmYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmNcbkBAIC03LDYgJiM0Mzs3LDggQEBcbiAjaW5jbHVkZSBcJiMzNDt4ZHAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hzay5oXCYjMzQ7XG4gXG4mIzQzO0RFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGlkcGZfeGRwX2ZiKTtcbiYjNDM7XG4gc3RhdGljIGludCBpZHBmX3J4cV9mb3JfZWFjaChjb25zdCBzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjICpyc3JjLFxuIFx0XHRcdCAgICAgaW50ICgqZm4pKHN0cnVjdCBpZHBmX3J4X3F1ZXVlICpyeHEsIHZvaWQgKmFyZyksXG4gXHRcdFx0ICAgICB2b2lkICphcmcpXG5AQCAtMTgzLDggJiM0MzsxODUsOCBAQCBpbnQgaWRwZl94ZHBzcXNfZ2V0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydClcbiBcdFx0a2ZyZWUoeGRwc3EtXHUwMDNlcmVmaWxscSk7XG4gXHRcdHhkcHNxLVx1MDAzZXJlZmlsbHEgPSBOVUxMO1xuIFxuLVx0XHRpZHBmX3F1ZXVlX2NsZWFyKEZMT1dfU0NIX0VOLCB4ZHBzcSk7XG4tXHRcdGlkcGZfcXVldWVfY2xlYXIoRkxPV19TQ0hfRU4sIHhkcHNxLVx1MDAzZWNvbXBscSk7XG4mIzQzO1x0XHRpZHBmX3F1ZXVlX2Fzc2lnbihGTE9XX1NDSF9FTiwgeGRwc3EsIHZwb3J0LVx1MDAzZXhkcHNxX2ZiKTtcbiYjNDM7XHRcdGlkcGZfcXVldWVfYXNzaWduKEZMT1dfU0NIX0VOLCB4ZHBzcS1cdTAwM2Vjb21wbHEsIHZwb3J0LVx1MDAzZXhkcHNxX2ZiKTtcbiBcdFx0aWRwZl9xdWV1ZV9zZXQoTk9JUlEsIHhkcHNxKTtcbiBcdFx0aWRwZl9xdWV1ZV9zZXQoWERQLCB4ZHBzcSk7XG4gXHRcdGlkcGZfcXVldWVfc2V0KFhEUCwgeGRwc3EtXHUwMDNlY29tcGxxKTtcbkBAIC0xOTcsNiAmIzQzOzE5OSwyOCBAQCBpbnQgaWRwZl94ZHBzcXNfZ2V0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydClcbiBcdFx0eGRwc3EtXHUwMDNlcGVuZGluZyA9IDA7XG4gXHRcdHhkcHNxLVx1MDAzZXhkcF90eCA9IDA7XG4gXHRcdHhkcHNxLVx1MDAzZXRocmVzaCA9IGxpYmV0aF94ZHBfcXVldWVfdGhyZXNob2xkKHhkcHNxLVx1MDAzZWRlc2NfY291bnQpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmlkcGZfeGRwX2ZiKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgeGRwc3EpKSB7XG4mIzQzO1x0XHRcdHhkcHNxLVx1MDAzZXBlbmRpbmdfbWFzayA9XG4mIzQzO1x0XHRcdFx0Yml0bWFwX3phbGxvY19ub2RlKHhkcHNxLVx1MDAzZWRlc2NfY291bnQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIEdGUF9LRVJORUwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIGNwdV90b19tZW0oaSAtIHNxcykpO1xuJiM0MztcdFx0XHRpZiAoeGRwc3EtXHUwMDNlcGVuZGluZ19tYXNrKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0Zm9yIChpbnQgaiA9IGkgLSAxOyBqIFx1MDAzZT0gc3FzOyBqLS0pIHtcbiYjNDM7XHRcdFx0XHR4ZHBzcSA9IHZwb3J0LVx1MDAzZXR4cXNbal07XG4mIzQzO1xuJiM0MztcdFx0XHRcdGlmIChpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgeGRwc3EpKVxuJiM0MztcdFx0XHRcdFx0Yml0bWFwX2ZyZWUoeGRwc3EtXHUwMDNlcGVuZGluZ19tYXNrKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0Zm9yICh1MzIgaiA9IDA7IGogXHUwMDNjIHZwb3J0LVx1MDAzZW51bV94ZHBfdHhxOyBqJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0XHRrZnJlZSh0aW1lcnNbal0pO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0yMjIsNiAmIzQzOzI0NiwxMiBAQCB2b2lkIGlkcGZfeGRwc3FzX3B1dChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXG4gXHRcdGxpYmV0aF94ZHBzcV9kZWluaXRfdGltZXIoeGRwc3EtXHUwMDNldGltZXIpO1xuIFx0XHRsaWJldGhfeGRwc3FfcHV0KFx1MDAyNnhkcHNxLVx1MDAzZXhkcF9sb2NrLCBkZXYpO1xuIFxuJiM0MztcdFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2aWRwZl94ZHBfZmIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB4ZHBzcSkpIHtcbiYjNDM7XHRcdFx0Yml0bWFwX2ZyZWUoeGRwc3EtXHUwMDNlcGVuZGluZ19tYXNrKTtcbiYjNDM7XHRcdFx0eGRwc3EtXHUwMDNlcGVuZGluZ19tYXNrID0gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGtmcmVlKHhkcHNxLVx1MDAzZXRpbWVyKTtcbiBcdFx0eGRwc3EtXHUwMDNlcmVmaWxscSA9IE5VTEw7XG4gXHRcdGlkcGZfcXVldWVfY2xlYXIoTk9JUlEsIHhkcHNxKTtcbkBAIC0yNTAsNiAmIzQzOzI4MCw2NSBAQCBzdGF0aWMgaW50IGlkcGZfeGRwX3BhcnNlX2NxZShjb25zdCBzdHJ1Y3QgaWRwZl9zcGxpdHFfNGJfdHhfY29tcGxfZGVzYyAqZGVzYyxcbiBcdHJldHVybiB1cHBlcl8xNl9iaXRzKHZhbCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdTMyIGlkcGZfeGRwc3FfcG9sbF9mYihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWRwZl9jb21wbF9xdWV1ZSAqY3EgPSB4ZHBzcS1cdTAwM2Vjb21wbHE7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyAqbWFzayA9IHhkcHNxLVx1MDAzZXBlbmRpbmdfbWFzaztcbiYjNDM7XHR1MzIgZG9uZV9mcmFtZXMsIHR4X2NudCwgbmV3X250YztcbiYjNDM7XHR1MzIgbnRjID0gY3EtXHUwMDNlbmV4dF90b19jbGVhbjtcbiYjNDM7XHR1MzIgY250ID0gY3EtXHUwMDNlZGVzY19jb3VudDtcbiYjNDM7XHRib29sIGdlbjtcbiYjNDM7XG4mIzQzO1x0Z2VuID0gaWRwZl9xdWV1ZV9oYXMoR0VOX0NISywgY3EpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGRvbmVfZnJhbWVzID0gMDsgZG9uZV9mcmFtZXMgXHUwMDNjIGJ1ZGdldDsgKSB7XG4mIzQzO1x0XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGlkcGZfeGRwX3BhcnNlX2NxZShcdTAwMjZjcS1cdTAwM2Vjb21wW250Y10uY29tbW9uLCBnZW4pO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2U9IDApIHtcbiYjNDM7XHRcdFx0X19jbGVhcl9iaXQocmV0LCBtYXNrKTtcbiYjNDM7XHRcdFx0ZG9uZV9mcmFtZXMmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdFx0Z290byBuZXh0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHN3aXRjaCAocmV0KSB7XG4mIzQzO1x0XHRjYXNlIC1FTk9EQVRBOlxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdGNhc2UgLUVJTlZBTDpcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztuZXh0OlxuJiM0MztcdFx0aWYgKHVubGlrZWx5KCYjNDM7JiM0MztudGMgPT0gY250KSkge1xuJiM0MztcdFx0XHRudGMgPSAwO1xuJiM0MztcdFx0XHRnZW4gPSAhZ2VuO1xuJiM0MztcdFx0XHRpZHBmX3F1ZXVlX2NoYW5nZShHRU5fQ0hLLCBjcSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGNxLVx1MDAzZW5leHRfdG9fY2xlYW4gPSBudGM7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSghZG9uZV9mcmFtZXMpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHR4X2NudCA9IHhkcHNxLVx1MDAzZWRlc2NfY291bnQ7XG4mIzQzO1xuJiM0MztcdC8qIERvbiYjMzk7dCBnbyBwYXN0IG5leHRfdG9fdXNlICovXG4mIzQzO1x0X19zZXRfYml0KHhkcHNxLVx1MDAzZW5leHRfdG9fdXNlLCBtYXNrKTtcbiYjNDM7XG4mIzQzO1x0bmV3X250YyA9IGZpbmRfbmV4dF9iaXQobWFzaywgdHhfY250LCB4ZHBzcS1cdTAwM2VuZXh0X3RvX2NsZWFuKTtcbiYjNDM7XHRkb25lX2ZyYW1lcyA9IG5ld19udGMgLSB4ZHBzcS1cdTAwM2VuZXh0X3RvX2NsZWFuO1xuJiM0MztcbiYjNDM7XHRpZiAobmV3X250YyA9PSB0eF9jbnQpXG4mIzQzO1x0XHRkb25lX2ZyYW1lcyAmIzQzOz0gZmluZF9maXJzdF9iaXQobWFzaywgdHhfY250KTtcbiYjNDM7XG4mIzQzO1x0X19jbGVhcl9iaXQoeGRwc3EtXHUwMDNlbmV4dF90b191c2UsIG1hc2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZG9uZV9mcmFtZXM7XG4mIzQzO31cbiYjNDM7XG4gdTMyIGlkcGZfeGRwc3FfcG9sbChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpXG4ge1xuIFx0c3RydWN0IGlkcGZfY29tcGxfcXVldWUgKmNxID0geGRwc3EtXHUwMDNlY29tcGxxO1xuQEAgLTI2MCw2ICYjNDM7MzQ5LDEwIEBAIHUzMiBpZHBmX3hkcHNxX3BvbGwoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxLCB1MzIgYnVkZ2V0KVxuIFx0dTMyIGRvbmVfZnJhbWVzO1xuIFx0Ym9vbCBnZW47XG4gXG4mIzQzO1x0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2aWRwZl94ZHBfZmIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgeGRwc3EpKVxuJiM0MztcdFx0cmV0dXJuIGlkcGZfeGRwc3FfcG9sbF9mYih4ZHBzcSwgYnVkZ2V0KTtcbiYjNDM7XG4gXHRnZW4gPSBpZHBmX3F1ZXVlX2hhcyhHRU5fQ0hLLCBjcSk7XG4gXG4gXHRmb3IgKGRvbmVfZnJhbWVzID0gMDsgZG9uZV9mcmFtZXMgXHUwMDNjIGJ1ZGdldDsgKSB7XG5AQCAtNDc5LDYgJiM0Mzs1NzIsMjQgQEAgc3RhdGljIGludCBpZHBmX3hkcF9zZXR1cF9wcm9nKHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCxcbiBcdFx0cmV0dXJuIC1FTk9TUEM7XG4gXHR9XG4gXG4mIzQzO1x0dnBvcnQtXHUwMDNleGRwc3FfZmIgPSAhaWRwZl9pc19jYXBfZW5hKHZwb3J0LVx1MDAzZWFkYXB0ZXIsIElEUEZfT1RIRVJfQ0FQUyxcbiYjNDM7XHRcdFx0XHRcdCAgIFZJUlRDSE5MMl9DQVBfU1BMSVRRX1FTQ0hFRCk7XG4mIzQzO1x0aWYgKCF2cG9ydC1cdTAwM2V4ZHBzcV9mYilcbiYjNDM7XHRcdGdvdG8gcmVzZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwcm9nKSB7XG4mIzQzO1x0XHRib29sIHdhcm4gPSAhc3RhdGljX2tleV9lbmFibGVkKFx1MDAyNmlkcGZfeGRwX2ZiKTtcbiYjNDM7XG4mIzQzO1x0XHRzdGF0aWNfYnJhbmNoX2luYyhcdTAwMjZpZHBmX3hkcF9mYik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHdhcm4gXHUwMDI2XHUwMDI2IG5ldF9yYXRlbGltaXQoKSlcbiYjNDM7XHRcdFx0bmV0ZGV2X3dhcm4odnBvcnQtXHUwMDNlbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtUaGUgRlcgZG9lc24mIzM5O3Qgc3VwcG9ydCBUeCBpbiBGSUZPIG1vZGUsIFhEUCBUeCBwZXJmb3JtYW5jZSBtaWdodCBiZSBzdWJvcHRpbWFsXFxuXCYjMzQ7KTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c3RhdGljX2JyYW5jaF9kZWMoXHUwMDI2aWRwZl94ZHBfZmIpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO3Jlc2V0OlxuIFx0b2xkID0gY2ZnLVx1MDAzZXVzZXJfY29uZmlnLnhkcF9wcm9nO1xuIFx0Y2ZnLVx1MDAzZXVzZXJfY29uZmlnLnhkcF9wcm9nID0gcHJvZztcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaFxuaW5kZXggNjNlNTZmN2Q0M2UwMDIuLjNkMDFjNTM1YmQ0YzYwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaFxuQEAgLTgsNiAmIzQzOzgsMTAgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtpZHBmX3R4cnguaFwmIzM0O1xuIFxuJiM0MztzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjO1xuJiM0MztcbiYjNDM7REVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGlkcGZfeGRwX2ZiKTtcbiYjNDM7XG4gaW50IGlkcGZfeGRwX3J4cV9pbmZvX2luaXQoc3RydWN0IGlkcGZfcnhfcXVldWUgKnJ4cSk7XG4gaW50IGlkcGZfeGRwX3J4cV9pbmZvX2luaXRfYWxsKGNvbnN0IHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMpO1xuIHZvaWQgaWRwZl94ZHBfcnhxX2luZm9fZGVpbml0KHN0cnVjdCBpZHBmX3J4X3F1ZXVlICpyeHEsIHUzMiBtb2RlbCk7XG5AQCAtMjEsNiAmIzQzOzI1LDM0IEBAIHZvaWQgaWRwZl94ZHBzcXNfcHV0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCk7XG4gdTMyIGlkcGZfeGRwc3FfcG9sbChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpO1xuIGJvb2wgaWRwZl94ZHBfdHhfZmx1c2hfYnVsayhzdHJ1Y3QgbGliZXRoX3hkcF90eF9idWxrICpicSwgdTMyIGZsYWdzKTtcbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X3htaXRfZmIoc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyBkZXNjLCB1MzIgaSxcbiYjNDM7XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGxpYmV0aF94ZHBzcSAqc3EsIHU2NCBwcml2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlkcGZfZmxleF90eF9zY2hlZF9kZXNjICp0eF9kZXNjID0gc3EtXHUwMDNlZGVzY3M7XG4mIzQzO1x0dTMyIGNtZDtcbiYjNDM7XG4mIzQzO1x0Y21kID0gRklFTERfUFJFUChJRFBGX1RYRF9GTEVYX0ZMT1dfRFRZUEVfTSxcbiYjNDM7XHRcdFx0IElEUEZfVFhfREVTQ19EVFlQRV9GTEVYX0ZMT1dfU0NIRSk7XG4mIzQzO1x0aWYgKGRlc2MuZmxhZ3MgXHUwMDI2IExJQkVUSF9YRFBfVFhfTEFTVClcbiYjNDM7XHRcdGNtZCB8PSBJRFBGX1RYRF9GTEVYX0ZMT1dfQ01EX0VPUDtcbiYjNDM7XHRpZiAocHJpdiBcdTAwMjZcdTAwMjYgKGRlc2MuZmxhZ3MgXHUwMDI2IExJQkVUSF9YRFBfVFhfQ1NVTSkpXG4mIzQzO1x0XHRjbWQgfD0gSURQRl9UWERfRkxFWF9GTE9XX0NNRF9DU19FTjtcbiYjNDM7XG4mIzQzO1x0dHhfZGVzYyA9IFx1MDAyNnR4X2Rlc2NbaV07XG4mIzQzO1x0dHhfZGVzYy1cdTAwM2VidWZfYWRkciA9IGNwdV90b19sZTY0KGRlc2MuYWRkcik7XG4mIzQzO1xuJiM0MzsjaWZkZWYgX19MSUJFVEhfV09SRF9BQ0NFU1NcbiYjNDM7XHQqKHU2NCAqKVx1MDAyNnR4X2Rlc2MtXHUwMDNlcXcxID0gKCh1NjQpZGVzYy5sZW4gXHUwMDNjXHUwMDNjIDQ4KSB8ICgodTY0KWkgXHUwMDNjXHUwMDNjIDMyKSB8IGNtZDtcbiYjNDM7I2Vsc2VcbiYjNDM7XHR0eF9kZXNjLVx1MDAzZXF3MS5yeHJfYnVmc2l6ZSA9IGNwdV90b19sZTE2KGRlc2MubGVuKTtcbiYjNDM7XHR0eF9kZXNjLVx1MDAzZXF3MS5jb21wbF90YWcgPSBjcHVfdG9fbGUxNihpKTtcbiYjNDM7XHR0eF9kZXNjLVx1MDAzZXF3MS50c1swXSA9IDA7XG4mIzQzO1x0dHhfZGVzYy1cdTAwM2VxdzEudHNbMV0gPSAwO1xuJiM0MztcdHR4X2Rlc2MtXHUwMDNlcXcxLnRzWzJdID0gMDtcbiYjNDM7XHR0eF9kZXNjLVx1MDAzZXF3MS5jbWRfZHR5cGUgPSBjbWQ7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGlkcGZfeGRwX3R4X3htaXQgLSBwcm9kdWNlIGEgc2luZ2xlIEhXIFR4IGRlc2NyaXB0b3Igb3V0IG9mIFhEUCBkZXNjXG4gICogQGRlc2M6IFhEUCBkZXNjcmlwdG9yIHRvIHB1bGwgdGhlIERNQSBhZGRyZXNzIGFuZCBsZW5ndGggZnJvbVxuQEAgLTM0LDYgJiM0Mzs2NiwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBfdHhfeG1pdChzdHJ1Y3QgbGliZXRoX3hkcF90eF9kZXNjIGRlc2MsIHUzMiBpLFxuIFx0c3RydWN0IGlkcGZfZmxleF90eF9kZXNjICp0eF9kZXNjID0gc3EtXHUwMDNlZGVzY3M7XG4gXHR1MzIgY21kO1xuIFxuJiM0MztcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmlkcGZfeGRwX2ZiKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sXG4mIzQzO1x0XHRcdCAgIGxpYmV0aF94ZHBzcV90b19zcShzcSwgc3RydWN0IGlkcGZfdHhfcXVldWUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBuZXh0X3RvX3VzZSkpKSB7XG4mIzQzO1x0XHRpZHBmX3hkcF90eF94bWl0X2ZiKGRlc2MsIGksIHNxLCBwcml2KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0Y21kID0gRklFTERfUFJFUChJRFBGX0ZMRVhfVFhEX1FXMV9EVFlQRV9NLFxuIFx0XHRcdCBJRFBGX1RYX0RFU0NfRFRZUEVfRkxFWF9MMlRBRzFfTDJUQUcyKTtcbiBcdGlmIChkZXNjLmZsYWdzIFx1MDAyNiBMSUJFVEhfWERQX1RYX0xBU1QpXG5AQCAtNTMsMTAgJiM0Mzs5MywyNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBfdHhfeG1pdChzdHJ1Y3QgbGliZXRoX3hkcF90eF9kZXNjIGRlc2MsIHUzMiBpLFxuICNlbmRpZlxuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwc3Ffc2V0X3JzX2ZiKGNvbnN0IHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSlcbiYjNDM7e1xuJiM0MztcdHUzMiBuID0gbWluKHhkcHNxLVx1MDAzZXBlbmRpbmcsIHhkcHNxLVx1MDAzZWRlc2NfY291bnQgLSB4ZHBzcS1cdTAwM2VuZXh0X3RvX2NsZWFuKTtcbiYjNDM7XG4mIzQzO1x0Yml0bWFwX3NldCh4ZHBzcS1cdTAwM2VwZW5kaW5nX21hc2ssIHhkcHNxLVx1MDAzZW5leHRfdG9fY2xlYW4sIG4pO1xuJiM0MztcbiYjNDM7XHRuID0geGRwc3EtXHUwMDNlcGVuZGluZyAtIG47XG4mIzQzO1x0aWYgKG4pXG4mIzQzO1x0XHRiaXRtYXBfc2V0KHhkcHNxLVx1MDAzZXBlbmRpbmdfbWFzaywgMCwgbik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwc3Ffc2V0X3JzKGNvbnN0IHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSlcbiB7XG4gXHR1MzIgbnR1LCBjbWQ7XG4gXG4mIzQzO1x0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2aWRwZl94ZHBfZmIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgeGRwc3EpKSB7XG4mIzQzO1x0XHRpZHBmX3hkcHNxX3NldF9yc19mYih4ZHBzcSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiBcdG50dSA9IHhkcHNxLVx1MDAzZW5leHRfdG9fdXNlO1xuIFx0aWYgKHVubGlrZWx5KCFudHUpKVxuIFx0XHRudHUgPSB4ZHBzcS1cdTAwM2VkZXNjX2NvdW50O1xuQEAgLTg0LDcgJiM0MzsxNDEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBzcV91cGRhdGVfdGFpbChjb25zdCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EpXG4gICogU2V0IHRoZSBSUyBiaXQgKFwmIzM0O2VuZCBvZiBiYXRjaFwmIzM0OyksIGJ1bXAgdGhlIHRhaWwsIGFuZCBxdWV1ZSB0aGUgY2xlYW51cCB0aW1lci5cbiAgKiBUbyBiZSBjYWxsZWQgYWZ0ZXIgYSBOQVBJIHBvbGxpbmcgbG9vcCwgYXQgdGhlIGVuZCBvZiAubmRvX3hkcF94bWl0KCkgZXRjLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcF90eF9maW5hbGl6ZSh2b2lkICpfeGRwc3EsIGJvb2wgc2VudCwgYm9vbCBmbHVzaClcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGlkcGZfeGRwX3R4X2ZpbmFsaXplKHZvaWQgKl94ZHBzcSwgYm9vbCBzZW50LFxuJiM0MztcdFx0XHRcdFx0XHQgYm9vbCBmbHVzaClcbiB7XG4gXHRzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EgPSBfeGRwc3E7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oIGIvaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oXG5pbmRleCA4OTg3MjNhYjYyZTgxMi4uZWQ2MWQ4M2JkYTJkNzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9saWJldGgveGRwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2xpYmV0aC94ZHAuaFxuQEAgLTQzMCw2ICYjNDM7NDMwLDE5IEBAIHN0cnVjdCBsaWJldGhfeGRwc3Ege1xuIFx0c3RydWN0IGxpYmV0aF94ZHBzcV9sb2NrXHQqbG9jaztcbiB9O1xuIFxuJiM0MzsvKipcbiYjNDM7ICogbGliZXRoX3hkcHNxX3RvX3NxIC0gZ2V0IFNRIHBvaW50ZXIgZnJvbSBhbiBYRFBTUSBwb2ludGVyXG4mIzQzOyAqIEB4ZHBzcTogXHUwMDI2bGliZXRoX3hkcHNxIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHF1ZXVlXG4mIzQzOyAqIEB0eXBlOiB0eXBlb2YoKSBvZiB0aGUgZHJpdmVyIFR4IHF1ZXVlIHN0cnVjdHVyZVxuJiM0MzsgKiBAbWVtYmVyOiBuYW1lIG9mIHRoZSBOVFUgZmllbGQgaW5zaWRlIEB0eXBlXG4mIzQzOyAqXG4mIzQzOyAqIFNvbWUgb2YgdGhlIHNlbmRpbmcgY2FsbGJhY2tzIHRha2Ugb25seSBcdTAwMjZsaWJldGhfeGRwc3EgcG9pbnRlciBhbmQgbm8gcG9pbnRlclxuJiM0MzsgKiB0byB0aGUgYWN0dWFsIGRyaXZlciBUeCBxdWV1ZSBzdHJ1Y3R1cmUuIFVzZSB0aGlzIGhlbHBlciB0byBxdWlja2x5IGp1bXAgdG9cbiYjNDM7ICogdGhlIGxhdHRlciB3aGVuIG5lZWRlZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgbGliZXRoX3hkcHNxX3RvX3NxKHhkcHNxLCB0eXBlLCBtZW1iZXIpXHRcdFx0XHQgICAgICBcXFxuJiM0MztcdGNvbnRhaW5lcl9vZl9jb25zdCgoeGRwc3EpLVx1MDAzZW50dSwgdHlwZSwgbWVtYmVyKVxuJiM0MztcbiAvKipcbiAgKiBzdHJ1Y3QgbGliZXRoX3hkcF90eF9kZXNjIC0gYWJzdHJhY3Rpb24gZm9yIGFuIFhEUCBUeCBkZXNjcmlwdG9yXG4gICogQGFkZHI6IERNQSBhZGRyZXNzIG9mIHRoZSBmcmFtZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA5OjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBJRFBGIChJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24pIGRyaXZlci4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBuZXR3b3JrIGRyaXZlciBmb3IgSW50ZWwgSVBVcy4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUgb3IgR0NFKSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWIzOWNjYmQzNDY5ZDAzZmQzMGVmZDYwY2QxYjdmYzc3MGE3NDg3MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDkgMDk6Mjg6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oCmluZGV4IGVjMWI3NWYwMzliYjI1Li41NDE0YmJiZWUwN2FkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmgKQEAgLTM4NCw2ICYjNDM7Mzg0LDcgQEAgc3RydWN0IGlkcGZfdnBvcnQgewogCXN0cnVjdCBpZHBmX3R4X3F1ZXVlICoqdHhxczsKIAl1MTYgbnVtX3R4cTsKIAl1MTYgbnVtX3hkcF90eHE7CiYjNDM7CWJvb2wgeGRwc3FfZmI7CiAJYm9vbCB4ZHBzcV9zaGFyZTsKIAlzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYwppbmRleCA3ZjkwNTY0MDRmNjRmYy4uNjQ3MmJmZjljZWIzN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYwpAQCAtMjI3LDcgJiM0MzsyMjcsNyBAQCBzdGF0aWMgaW50IGlkcGZfdHhfZGVzY19hbGxvYyhjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQsCiAKIAlpZHBmX3hza19zZXR1cF9xdWV1ZSh2cG9ydCwgdHhfcSwgVklSVENITkwyX1FVRVVFX1RZUEVfVFgpOwogCi0JaWYgKCFpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhfcSkpCiYjNDM7CWlmICghaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHR4X3EpIHx8IGlkcGZfcXVldWVfaGFzKFhEUCwgdHhfcSkpCiAJCXJldHVybiAwOwogCiAJcmVmaWxscSA9IHR4X3EtJmd0O3JlZmlsbHE7CkBAIC0xMDU1LDYgJiM0MzsxMDU1LDExIEBAIHN0YXRpYyB2b2lkIGlkcGZfY2xlYW5fcXVldWVfc2V0KGNvbnN0IHN0cnVjdCBpZHBmX3F1ZXVlX3NldCAqcXMpCiAJCQlpZiAoaWRwZl9xdWV1ZV9oYXMoWERQLCBxLSZndDt0eHEpKSB7CiAJCQkJcS0mZ3Q7dHhxLSZndDtwZW5kaW5nID0gMDsKIAkJCQlxLSZndDt0eHEtJmd0O3hkcF90eCA9IDA7CiYjNDM7CiYjNDM7CQkJCWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7aWRwZl94ZHBfZmIpICZhbXA7JmFtcDsKJiM0MzsJCQkJICAgIGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCBxLSZndDt0eHEpKQomIzQzOwkJCQkJYml0bWFwX3plcm8ocS0mZ3Q7dHhxLSZndDtwZW5kaW5nX21hc2ssCiYjNDM7CQkJCQkJICAgIHEtJmd0O3R4cS0mZ3Q7ZGVzY19jb3VudCk7CiAJCQl9IGVsc2UgewogCQkJCXEtJmd0O3R4cS0mZ3Q7dHhxX2dycC0mZ3Q7bnVtX2NvbXBsZXRpb25zX3BlbmRpbmcgPSAwOwogCQkJfQpAQCAtMTMxNyw3ICYjNDM7MTMyMiw4IEBAIHN0YXRpYyB2b2lkIGlkcGZfdHhxX2dyb3VwX3JlbChzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjICpyc3JjKQogCQkJaWYgKCF0eHFfZ3JwLSZndDt0eHFzW2pdKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHR4cV9ncnAtJmd0O3R4cXNbal0pKSB7CiYjNDM7CQkJaWYgKGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB0eHFfZ3JwLSZndDt0eHFzW2pdKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICFpZHBmX3F1ZXVlX2hhcyhYRFAsIHR4cV9ncnAtJmd0O3R4cXNbal0pKSB7CiAJCQkJa2ZyZWUodHhxX2dycC0mZ3Q7dHhxc1tqXS0mZ3Q7cmVmaWxscSk7CiAJCQkJdHhxX2dycC0mZ3Q7dHhxc1tqXS0mZ3Q7cmVmaWxscSA9IE5VTEw7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaAppbmRleCA0YmU1YjNiNmQzZWQyYi4uN2ViZTU5ZDgxZTE3MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaApAQCAtNjI1LDExICYjNDM7NjI1LDEyIEBAIGxpYmV0aF9jYWNoZWxpbmVfc2V0X2Fzc2VydChzdHJ1Y3QgaWRwZl9yeF9xdWV1ZSwKICAqIEBjbGVhbl9idWRnZXQ6IHNpbmdsZXEgb25seSwgcXVldWUgY2xlYW5pbmcgYnVkZ2V0CiAgKiBAY2xlYW5lZF9wa3RzOiBOdW1iZXIgb2YgcGFja2V0cyBjbGVhbmVkIGZvciB0aGUgYWJvdmUgc2FpZCBjYXNlCiAgKiBAcmVmaWxscTogUG9pbnRlciB0byByZWZpbGwgcXVldWUKJiM0MzsgKiBAY2FjaGVkX3RzdGFtcF9jYXBzOiBUeCB0aW1lc3RhbXAgY2FwYWJpbGl0aWVzIG5lZ290aWF0ZWQgd2l0aCB0aGUgQ1AKICAqIEBwZW5kaW5nOiBudW1iZXIgb2YgcGVuZGluZyBkZXNjcmlwdG9ycyB0byBzZW5kIGluIFFCCiAgKiBAeGRwX3R4OiBudW1iZXIgb2YgcGVuZGluZyAmYW1wO3hkcF9idWZmIG9yICZhbXA7eGRwX2ZyYW1lIGJ1ZmZlcnMKICAqIEB0aW1lcjogdGltZXIgZm9yIFhEUCBUeCBxdWV1ZSBjbGVhbnVwCiAgKiBAeGRwX2xvY2s6IGxvY2sgZm9yIFhEUCBUeCBxdWV1ZXMgc2hhcmluZwotICogQGNhY2hlZF90c3RhbXBfY2FwczogVHggdGltZXN0YW1wIGNhcGFiaWxpdGllcyBuZWdvdGlhdGVkIHdpdGggdGhlIENQCiYjNDM7ICogQHBlbmRpbmdfbWFzazogbWFzayBvZiBidWZmZXJzIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24gaW4gdGhlIEZCIFhEUCBtb2RlCiAgKiBAdHN0YW1wX3Rhc2s6IFdvcmsgdGhhdCBoYW5kbGVzIFR4IHRpbWVzdGFtcCByZWFkCiAgKiBAc3RhdHNfc3luYzogU2VlIHN0cnVjdCB1NjRfc3RhdHNfc3luYwogICogQHFfc3RhdHM6IFNlZSB1bmlvbiBpZHBmX3R4X3F1ZXVlX3N0YXRzCkBAIC02ODksNiAmIzQzOzY5MCw4IEBAIHN0cnVjdCBpZHBmX3R4X3F1ZXVlIHsKIAkJCXUxNiBjbGVhbmVkX3BrdHM7CiAKIAkJCXN0cnVjdCBpZHBmX3N3X3F1ZXVlICpyZWZpbGxxOwomIzQzOwomIzQzOwkJCXN0cnVjdCBpZHBmX3B0cF92cG9ydF90eF90c3RhbXBfY2FwcyAqY2FjaGVkX3RzdGFtcF9jYXBzOwogCQl9OwogCQlzdHJ1Y3QgewogCQkJdTMyIHBlbmRpbmc7CkBAIC02OTYsMTAgJiM0Mzs2OTksMTEgQEAgc3RydWN0IGlkcGZfdHhfcXVldWUgewogCiAJCQlzdHJ1Y3QgbGliZXRoX3hkcHNxX3RpbWVyICp0aW1lcjsKIAkJCXN0cnVjdCBsaWJldGhfeGRwc3FfbG9jayB4ZHBfbG9jazsKJiM0MzsKJiM0MzsJCQl1bnNpZ25lZCBsb25nICpwZW5kaW5nX21hc2s7CiAJCX07CiAJfTsKIAotCXN0cnVjdCBpZHBmX3B0cF92cG9ydF90eF90c3RhbXBfY2FwcyAqY2FjaGVkX3RzdGFtcF9jYXBzOwogCXN0cnVjdCB3b3JrX3N0cnVjdCAqdHN0YW1wX3Rhc2s7CiAKIAlzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgc3RhdHNfc3luYzsKQEAgLTcxOCw4ICYjNDM7NzIyLDcgQEAgc3RydWN0IGlkcGZfdHhfcXVldWUgewogCV9fY2FjaGVsaW5lX2dyb3VwX2VuZF9hbGlnbmVkKGNvbGQpOwogfTsKIGxpYmV0aF9jYWNoZWxpbmVfc2V0X2Fzc2VydChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgNjQsCi0JCQkgICAgMTA0ICYjNDM7Ci0JCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGlkcGZfdHhfcXVldWUsIGNhY2hlZF90c3RhbXBfY2FwcykgLQomIzQzOwkJCSAgICA5NiAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgdHN0YW1wX3Rhc2spIC0KIAkJCSAgICBvZmZzZXRvZmVuZChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgdGltZXIpICYjNDM7CiAJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGlkcGZfdHhfcXVldWUsIHFfc3RhdHMpIC0KIAkJCSAgICBvZmZzZXRvZmVuZChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgdHN0YW1wX3Rhc2spLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmMKaW5kZXggY2JjY2Q0NTQ2NzY4MTYuLjhhNGUwYTEzMzY0ZGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmMKQEAgLTcsNiAmIzQzOzcsOCBAQAogI2luY2x1ZGUgJiMzNDt4ZHAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3hzay5oJiMzNDsKIAomIzQzO0RFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGlkcGZfeGRwX2ZiKTsKJiM0MzsKIHN0YXRpYyBpbnQgaWRwZl9yeHFfZm9yX2VhY2goY29uc3Qgc3RydWN0IGlkcGZfcV92ZWNfcnNyYyAqcnNyYywKIAkJCSAgICAgaW50ICgqZm4pKHN0cnVjdCBpZHBmX3J4X3F1ZXVlICpyeHEsIHZvaWQgKmFyZyksCiAJCQkgICAgIHZvaWQgKmFyZykKQEAgLTE4Myw4ICYjNDM7MTg1LDggQEAgaW50IGlkcGZfeGRwc3FzX2dldChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpCiAJCWtmcmVlKHhkcHNxLSZndDtyZWZpbGxxKTsKIAkJeGRwc3EtJmd0O3JlZmlsbHEgPSBOVUxMOwogCi0JCWlkcGZfcXVldWVfY2xlYXIoRkxPV19TQ0hfRU4sIHhkcHNxKTsKLQkJaWRwZl9xdWV1ZV9jbGVhcihGTE9XX1NDSF9FTiwgeGRwc3EtJmd0O2NvbXBscSk7CiYjNDM7CQlpZHBmX3F1ZXVlX2Fzc2lnbihGTE9XX1NDSF9FTiwgeGRwc3EsIHZwb3J0LSZndDt4ZHBzcV9mYik7CiYjNDM7CQlpZHBmX3F1ZXVlX2Fzc2lnbihGTE9XX1NDSF9FTiwgeGRwc3EtJmd0O2NvbXBscSwgdnBvcnQtJmd0O3hkcHNxX2ZiKTsKIAkJaWRwZl9xdWV1ZV9zZXQoTk9JUlEsIHhkcHNxKTsKIAkJaWRwZl9xdWV1ZV9zZXQoWERQLCB4ZHBzcSk7CiAJCWlkcGZfcXVldWVfc2V0KFhEUCwgeGRwc3EtJmd0O2NvbXBscSk7CkBAIC0xOTcsNiAmIzQzOzE5OSwyOCBAQCBpbnQgaWRwZl94ZHBzcXNfZ2V0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCkKIAkJeGRwc3EtJmd0O3BlbmRpbmcgPSAwOwogCQl4ZHBzcS0mZ3Q7eGRwX3R4ID0gMDsKIAkJeGRwc3EtJmd0O3RocmVzaCA9IGxpYmV0aF94ZHBfcXVldWVfdGhyZXNob2xkKHhkcHNxLSZndDtkZXNjX2NvdW50KTsKJiM0MzsKJiM0MzsJCWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7aWRwZl94ZHBfZmIpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgeGRwc3EpKSB7CiYjNDM7CQkJeGRwc3EtJmd0O3BlbmRpbmdfbWFzayA9CiYjNDM7CQkJCWJpdG1hcF96YWxsb2Nfbm9kZSh4ZHBzcS0mZ3Q7ZGVzY19jb3VudCwKJiM0MzsJCQkJCQkgICBHRlBfS0VSTkVMLAomIzQzOwkJCQkJCSAgIGNwdV90b19tZW0oaSAtIHNxcykpOwomIzQzOwkJCWlmICh4ZHBzcS0mZ3Q7cGVuZGluZ19tYXNrKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlmb3IgKGludCBqID0gaSAtIDE7IGogJmd0Oz0gc3FzOyBqLS0pIHsKJiM0MzsJCQkJeGRwc3EgPSB2cG9ydC0mZ3Q7dHhxc1tqXTsKJiM0MzsKJiM0MzsJCQkJaWYgKGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB4ZHBzcSkpCiYjNDM7CQkJCQliaXRtYXBfZnJlZSh4ZHBzcS0mZ3Q7cGVuZGluZ19tYXNrKTsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJZm9yICh1MzIgaiA9IDA7IGogJmx0OyB2cG9ydC0mZ3Q7bnVtX3hkcF90eHE7IGomIzQzOyYjNDM7KQomIzQzOwkJCQlrZnJlZSh0aW1lcnNbal0pOwomIzQzOwomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtMjIyLDYgJiM0MzsyNDYsMTIgQEAgdm9pZCBpZHBmX3hkcHNxc19wdXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KQogCQlsaWJldGhfeGRwc3FfZGVpbml0X3RpbWVyKHhkcHNxLSZndDt0aW1lcik7CiAJCWxpYmV0aF94ZHBzcV9wdXQoJmFtcDt4ZHBzcS0mZ3Q7eGRwX2xvY2ssIGRldik7CiAKJiM0MzsJCWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7aWRwZl94ZHBfZmIpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgeGRwc3EpKSB7CiYjNDM7CQkJYml0bWFwX2ZyZWUoeGRwc3EtJmd0O3BlbmRpbmdfbWFzayk7CiYjNDM7CQkJeGRwc3EtJmd0O3BlbmRpbmdfbWFzayA9IE5VTEw7CiYjNDM7CQl9CiYjNDM7CiAJCWtmcmVlKHhkcHNxLSZndDt0aW1lcik7CiAJCXhkcHNxLSZndDtyZWZpbGxxID0gTlVMTDsKIAkJaWRwZl9xdWV1ZV9jbGVhcihOT0lSUSwgeGRwc3EpOwpAQCAtMjUwLDYgJiM0MzsyODAsNjUgQEAgc3RhdGljIGludCBpZHBmX3hkcF9wYXJzZV9jcWUoY29uc3Qgc3RydWN0IGlkcGZfc3BsaXRxXzRiX3R4X2NvbXBsX2Rlc2MgKmRlc2MsCiAJcmV0dXJuIHVwcGVyXzE2X2JpdHModmFsKTsKIH0KIAomIzQzO3N0YXRpYyB1MzIgaWRwZl94ZHBzcV9wb2xsX2ZiKHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSwgdTMyIGJ1ZGdldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZHBmX2NvbXBsX3F1ZXVlICpjcSA9IHhkcHNxLSZndDtjb21wbHE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgKm1hc2sgPSB4ZHBzcS0mZ3Q7cGVuZGluZ19tYXNrOwomIzQzOwl1MzIgZG9uZV9mcmFtZXMsIHR4X2NudCwgbmV3X250YzsKJiM0MzsJdTMyIG50YyA9IGNxLSZndDtuZXh0X3RvX2NsZWFuOwomIzQzOwl1MzIgY250ID0gY3EtJmd0O2Rlc2NfY291bnQ7CiYjNDM7CWJvb2wgZ2VuOwomIzQzOwomIzQzOwlnZW4gPSBpZHBmX3F1ZXVlX2hhcyhHRU5fQ0hLLCBjcSk7CiYjNDM7CiYjNDM7CWZvciAoZG9uZV9mcmFtZXMgPSAwOyBkb25lX2ZyYW1lcyAmbHQ7IGJ1ZGdldDsgKSB7CiYjNDM7CQlpbnQgcmV0OwomIzQzOwomIzQzOwkJcmV0ID0gaWRwZl94ZHBfcGFyc2VfY3FlKCZhbXA7Y3EtJmd0O2NvbXBbbnRjXS5jb21tb24sIGdlbik7CiYjNDM7CQlpZiAocmV0ICZndDs9IDApIHsKJiM0MzsJCQlfX2NsZWFyX2JpdChyZXQsIG1hc2spOwomIzQzOwkJCWRvbmVfZnJhbWVzJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCQlnb3RvIG5leHQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlzd2l0Y2ggKHJldCkgewomIzQzOwkJY2FzZSAtRU5PREFUQToKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCWNhc2UgLUVJTlZBTDoKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MztuZXh0OgomIzQzOwkJaWYgKHVubGlrZWx5KCYjNDM7JiM0MztudGMgPT0gY250KSkgewomIzQzOwkJCW50YyA9IDA7CiYjNDM7CQkJZ2VuID0gIWdlbjsKJiM0MzsJCQlpZHBmX3F1ZXVlX2NoYW5nZShHRU5fQ0hLLCBjcSk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWNxLSZndDtuZXh0X3RvX2NsZWFuID0gbnRjOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoIWRvbmVfZnJhbWVzKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl0eF9jbnQgPSB4ZHBzcS0mZ3Q7ZGVzY19jb3VudDsKJiM0MzsKJiM0MzsJLyogRG9uJiMzOTt0IGdvIHBhc3QgbmV4dF90b191c2UgKi8KJiM0MzsJX19zZXRfYml0KHhkcHNxLSZndDtuZXh0X3RvX3VzZSwgbWFzayk7CiYjNDM7CiYjNDM7CW5ld19udGMgPSBmaW5kX25leHRfYml0KG1hc2ssIHR4X2NudCwgeGRwc3EtJmd0O25leHRfdG9fY2xlYW4pOwomIzQzOwlkb25lX2ZyYW1lcyA9IG5ld19udGMgLSB4ZHBzcS0mZ3Q7bmV4dF90b19jbGVhbjsKJiM0MzsKJiM0MzsJaWYgKG5ld19udGMgPT0gdHhfY250KQomIzQzOwkJZG9uZV9mcmFtZXMgJiM0Mzs9IGZpbmRfZmlyc3RfYml0KG1hc2ssIHR4X2NudCk7CiYjNDM7CiYjNDM7CV9fY2xlYXJfYml0KHhkcHNxLSZndDtuZXh0X3RvX3VzZSwgbWFzayk7CiYjNDM7CiYjNDM7CXJldHVybiBkb25lX2ZyYW1lczsKJiM0Mzt9CiYjNDM7CiB1MzIgaWRwZl94ZHBzcV9wb2xsKHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSwgdTMyIGJ1ZGdldCkKIHsKIAlzdHJ1Y3QgaWRwZl9jb21wbF9xdWV1ZSAqY3EgPSB4ZHBzcS0mZ3Q7Y29tcGxxOwpAQCAtMjYwLDYgJiM0MzszNDksMTAgQEAgdTMyIGlkcGZfeGRwc3FfcG9sbChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpCiAJdTMyIGRvbmVfZnJhbWVzOwogCWJvb2wgZ2VuOwogCiYjNDM7CWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7aWRwZl94ZHBfZmIpICZhbXA7JmFtcDsKJiM0MzsJICAgIGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB4ZHBzcSkpCiYjNDM7CQlyZXR1cm4gaWRwZl94ZHBzcV9wb2xsX2ZiKHhkcHNxLCBidWRnZXQpOwomIzQzOwogCWdlbiA9IGlkcGZfcXVldWVfaGFzKEdFTl9DSEssIGNxKTsKIAogCWZvciAoZG9uZV9mcmFtZXMgPSAwOyBkb25lX2ZyYW1lcyAmbHQ7IGJ1ZGdldDsgKSB7CkBAIC00NzksNiAmIzQzOzU3MiwyNCBAQCBzdGF0aWMgaW50IGlkcGZfeGRwX3NldHVwX3Byb2coc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0LAogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAKJiM0MzsJdnBvcnQtJmd0O3hkcHNxX2ZiID0gIWlkcGZfaXNfY2FwX2VuYSh2cG9ydC0mZ3Q7YWRhcHRlciwgSURQRl9PVEhFUl9DQVBTLAomIzQzOwkJCQkJICAgVklSVENITkwyX0NBUF9TUExJVFFfUVNDSEVEKTsKJiM0MzsJaWYgKCF2cG9ydC0mZ3Q7eGRwc3FfZmIpCiYjNDM7CQlnb3RvIHJlc2V0OwomIzQzOwomIzQzOwlpZiAocHJvZykgewomIzQzOwkJYm9vbCB3YXJuID0gIXN0YXRpY19rZXlfZW5hYmxlZCgmYW1wO2lkcGZfeGRwX2ZiKTsKJiM0MzsKJiM0MzsJCXN0YXRpY19icmFuY2hfaW5jKCZhbXA7aWRwZl94ZHBfZmIpOwomIzQzOwomIzQzOwkJaWYgKHdhcm4gJmFtcDsmYW1wOyBuZXRfcmF0ZWxpbWl0KCkpCiYjNDM7CQkJbmV0ZGV2X3dhcm4odnBvcnQtJmd0O25ldGRldiwKJiM0MzsJCQkJICAgICYjMzQ7VGhlIEZXIGRvZXNuJiMzOTt0IHN1cHBvcnQgVHggaW4gRklGTyBtb2RlLCBYRFAgVHggcGVyZm9ybWFuY2UgbWlnaHQgYmUgc3Vib3B0aW1hbFxuJiMzNDspOwomIzQzOwl9IGVsc2UgewomIzQzOwkJc3RhdGljX2JyYW5jaF9kZWMoJmFtcDtpZHBmX3hkcF9mYik7CiYjNDM7CX0KJiM0MzsKJiM0MztyZXNldDoKIAlvbGQgPSBjZmctJmd0O3VzZXJfY29uZmlnLnhkcF9wcm9nOwogCWNmZy0mZ3Q7dXNlcl9jb25maWcueGRwX3Byb2cgPSBwcm9nOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaAppbmRleCA2M2U1NmY3ZDQzZTAwMi4uM2QwMWM1MzViZDRjNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaApAQCAtOCw2ICYjNDM7OCwxMCBAQAogCiAjaW5jbHVkZSAmIzM0O2lkcGZfdHhyeC5oJiMzNDsKIAomIzQzO3N0cnVjdCBpZHBmX3FfdmVjX3JzcmM7CiYjNDM7CiYjNDM7REVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGlkcGZfeGRwX2ZiKTsKJiM0MzsKIGludCBpZHBmX3hkcF9yeHFfaW5mb19pbml0KHN0cnVjdCBpZHBmX3J4X3F1ZXVlICpyeHEpOwogaW50IGlkcGZfeGRwX3J4cV9pbmZvX2luaXRfYWxsKGNvbnN0IHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMpOwogdm9pZCBpZHBmX3hkcF9yeHFfaW5mb19kZWluaXQoc3RydWN0IGlkcGZfcnhfcXVldWUgKnJ4cSwgdTMyIG1vZGVsKTsKQEAgLTIxLDYgJiM0MzsyNSwzNCBAQCB2b2lkIGlkcGZfeGRwc3FzX3B1dChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpOwogdTMyIGlkcGZfeGRwc3FfcG9sbChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpOwogYm9vbCBpZHBmX3hkcF90eF9mbHVzaF9idWxrKHN0cnVjdCBsaWJldGhfeGRwX3R4X2J1bGsgKmJxLCB1MzIgZmxhZ3MpOwogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X3htaXRfZmIoc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyBkZXNjLCB1MzIgaSwKJiM0MzsJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBsaWJldGhfeGRwc3EgKnNxLCB1NjQgcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZHBmX2ZsZXhfdHhfc2NoZWRfZGVzYyAqdHhfZGVzYyA9IHNxLSZndDtkZXNjczsKJiM0MzsJdTMyIGNtZDsKJiM0MzsKJiM0MzsJY21kID0gRklFTERfUFJFUChJRFBGX1RYRF9GTEVYX0ZMT1dfRFRZUEVfTSwKJiM0MzsJCQkgSURQRl9UWF9ERVNDX0RUWVBFX0ZMRVhfRkxPV19TQ0hFKTsKJiM0MzsJaWYgKGRlc2MuZmxhZ3MgJmFtcDsgTElCRVRIX1hEUF9UWF9MQVNUKQomIzQzOwkJY21kIHw9IElEUEZfVFhEX0ZMRVhfRkxPV19DTURfRU9QOwomIzQzOwlpZiAocHJpdiAmYW1wOyZhbXA7IChkZXNjLmZsYWdzICZhbXA7IExJQkVUSF9YRFBfVFhfQ1NVTSkpCiYjNDM7CQljbWQgfD0gSURQRl9UWERfRkxFWF9GTE9XX0NNRF9DU19FTjsKJiM0MzsKJiM0MzsJdHhfZGVzYyA9ICZhbXA7dHhfZGVzY1tpXTsKJiM0MzsJdHhfZGVzYy0mZ3Q7YnVmX2FkZHIgPSBjcHVfdG9fbGU2NChkZXNjLmFkZHIpOwomIzQzOwomIzQzOyNpZmRlZiBfX0xJQkVUSF9XT1JEX0FDQ0VTUwomIzQzOwkqKHU2NCAqKSZhbXA7dHhfZGVzYy0mZ3Q7cXcxID0gKCh1NjQpZGVzYy5sZW4gJmx0OyZsdDsgNDgpIHwgKCh1NjQpaSAmbHQ7Jmx0OyAzMikgfCBjbWQ7CiYjNDM7I2Vsc2UKJiM0MzsJdHhfZGVzYy0mZ3Q7cXcxLnJ4cl9idWZzaXplID0gY3B1X3RvX2xlMTYoZGVzYy5sZW4pOwomIzQzOwl0eF9kZXNjLSZndDtxdzEuY29tcGxfdGFnID0gY3B1X3RvX2xlMTYoaSk7CiYjNDM7CXR4X2Rlc2MtJmd0O3F3MS50c1swXSA9IDA7CiYjNDM7CXR4X2Rlc2MtJmd0O3F3MS50c1sxXSA9IDA7CiYjNDM7CXR4X2Rlc2MtJmd0O3F3MS50c1syXSA9IDA7CiYjNDM7CXR4X2Rlc2MtJmd0O3F3MS5jbWRfZHR5cGUgPSBjbWQ7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwogLyoqCiAgKiBpZHBmX3hkcF90eF94bWl0IC0gcHJvZHVjZSBhIHNpbmdsZSBIVyBUeCBkZXNjcmlwdG9yIG91dCBvZiBYRFAgZGVzYwogICogQGRlc2M6IFhEUCBkZXNjcmlwdG9yIHRvIHB1bGwgdGhlIERNQSBhZGRyZXNzIGFuZCBsZW5ndGggZnJvbQpAQCAtMzQsNiAmIzQzOzY2LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcF90eF94bWl0KHN0cnVjdCBsaWJldGhfeGRwX3R4X2Rlc2MgZGVzYywgdTMyIGksCiAJc3RydWN0IGlkcGZfZmxleF90eF9kZXNjICp0eF9kZXNjID0gc3EtJmd0O2Rlc2NzOwogCXUzMiBjbWQ7CiAKJiM0MzsJaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDtpZHBmX3hkcF9mYikgJmFtcDsmYW1wOwomIzQzOwkgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sCiYjNDM7CQkJICAgbGliZXRoX3hkcHNxX3RvX3NxKHNxLCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwKJiM0MzsJCQkJCSAgICAgIG5leHRfdG9fdXNlKSkpIHsKJiM0MzsJCWlkcGZfeGRwX3R4X3htaXRfZmIoZGVzYywgaSwgc3EsIHByaXYpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJY21kID0gRklFTERfUFJFUChJRFBGX0ZMRVhfVFhEX1FXMV9EVFlQRV9NLAogCQkJIElEUEZfVFhfREVTQ19EVFlQRV9GTEVYX0wyVEFHMV9MMlRBRzIpOwogCWlmIChkZXNjLmZsYWdzICZhbXA7IExJQkVUSF9YRFBfVFhfTEFTVCkKQEAgLTUzLDEwICYjNDM7OTMsMjcgQEAgc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X3htaXQoc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyBkZXNjLCB1MzIgaSwKICNlbmRpZgogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwc3Ffc2V0X3JzX2ZiKGNvbnN0IHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSkKJiM0Mzt7CiYjNDM7CXUzMiBuID0gbWluKHhkcHNxLSZndDtwZW5kaW5nLCB4ZHBzcS0mZ3Q7ZGVzY19jb3VudCAtIHhkcHNxLSZndDtuZXh0X3RvX2NsZWFuKTsKJiM0MzsKJiM0MzsJYml0bWFwX3NldCh4ZHBzcS0mZ3Q7cGVuZGluZ19tYXNrLCB4ZHBzcS0mZ3Q7bmV4dF90b19jbGVhbiwgbik7CiYjNDM7CiYjNDM7CW4gPSB4ZHBzcS0mZ3Q7cGVuZGluZyAtIG47CiYjNDM7CWlmIChuKQomIzQzOwkJYml0bWFwX3NldCh4ZHBzcS0mZ3Q7cGVuZGluZ19tYXNrLCAwLCBuKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBzcV9zZXRfcnMoY29uc3Qgc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxKQogewogCXUzMiBudHUsIGNtZDsKIAomIzQzOwlpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseSgmYW1wO2lkcGZfeGRwX2ZiKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgeGRwc3EpKSB7CiYjNDM7CQlpZHBmX3hkcHNxX3NldF9yc19mYih4ZHBzcSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKIAludHUgPSB4ZHBzcS0mZ3Q7bmV4dF90b191c2U7CiAJaWYgKHVubGlrZWx5KCFudHUpKQogCQludHUgPSB4ZHBzcS0mZ3Q7ZGVzY19jb3VudDsKQEAgLTg0LDcgJiM0MzsxNDEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBzcV91cGRhdGVfdGFpbChjb25zdCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EpCiAgKiBTZXQgdGhlIFJTIGJpdCAoJiMzNDtlbmQgb2YgYmF0Y2gmIzM0OyksIGJ1bXAgdGhlIHRhaWwsIGFuZCBxdWV1ZSB0aGUgY2xlYW51cCB0aW1lci4KICAqIFRvIGJlIGNhbGxlZCBhZnRlciBhIE5BUEkgcG9sbGluZyBsb29wLCBhdCB0aGUgZW5kIG9mIC5uZG9feGRwX3htaXQoKSBldGMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcF90eF9maW5hbGl6ZSh2b2lkICpfeGRwc3EsIGJvb2wgc2VudCwgYm9vbCBmbHVzaCkKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgaWRwZl94ZHBfdHhfZmluYWxpemUodm9pZCAqX3hkcHNxLCBib29sIHNlbnQsCiYjNDM7CQkJCQkJIGJvb2wgZmx1c2gpCiB7CiAJc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxID0gX3hkcHNxOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9saWJldGgveGRwLmggYi9pbmNsdWRlL25ldC9saWJldGgveGRwLmgKaW5kZXggODk4NzIzYWI2MmU4MTIuLmVkNjFkODNiZGEyZDc3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9saWJldGgveGRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oCkBAIC00MzAsNiAmIzQzOzQzMCwxOSBAQCBzdHJ1Y3QgbGliZXRoX3hkcHNxIHsKIAlzdHJ1Y3QgbGliZXRoX3hkcHNxX2xvY2sJKmxvY2s7CiB9OwogCiYjNDM7LyoqCiYjNDM7ICogbGliZXRoX3hkcHNxX3RvX3NxIC0gZ2V0IFNRIHBvaW50ZXIgZnJvbSBhbiBYRFBTUSBwb2ludGVyCiYjNDM7ICogQHhkcHNxOiAmYW1wO2xpYmV0aF94ZHBzcSBjb3JyZXNwb25kaW5nIHRvIHRoZSBxdWV1ZQomIzQzOyAqIEB0eXBlOiB0eXBlb2YoKSBvZiB0aGUgZHJpdmVyIFR4IHF1ZXVlIHN0cnVjdHVyZQomIzQzOyAqIEBtZW1iZXI6IG5hbWUgb2YgdGhlIE5UVSBmaWVsZCBpbnNpZGUgQHR5cGUKJiM0MzsgKgomIzQzOyAqIFNvbWUgb2YgdGhlIHNlbmRpbmcgY2FsbGJhY2tzIHRha2Ugb25seSAmYW1wO2xpYmV0aF94ZHBzcSBwb2ludGVyIGFuZCBubyBwb2ludGVyCiYjNDM7ICogdG8gdGhlIGFjdHVhbCBkcml2ZXIgVHggcXVldWUgc3RydWN0dXJlLiBVc2UgdGhpcyBoZWxwZXIgdG8gcXVpY2tseSBqdW1wIHRvCiYjNDM7ICogdGhlIGxhdHRlciB3aGVuIG5lZWRlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIGxpYmV0aF94ZHBzcV90b19zcSh4ZHBzcSwgdHlwZSwgbWVtYmVyKQkJCQkgICAgICBcCiYjNDM7CWNvbnRhaW5lcl9vZl9jb25zdCgoeGRwc3EpLSZndDtudHUsIHR5cGUsIG1lbWJlcikKJiM0MzsKIC8qKgogICogc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyAtIGFic3RyYWN0aW9uIGZvciBhbiBYRFAgVHggZGVzY3JpcHRvcgogICogQGFkZHI6IERNQSBhZGRyZXNzIG9mIHRoZSBmcmFtZQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDc5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSURQRiBYRFAgRmFsbGJhY2sgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2gg4oCTIHNlZW1zIGxpa2UgaXQgaW50cm9kdWNlcyBhIGZhbGxiYWNrIG1vZGUgZm9yIFhEUCBUeCBpbiB0aGUgSW50ZWwgSURQRiBkcml2ZXIsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJdCYjMzk7cyB0b3VjaGluZyBgaWRwZl90eHJ4LmNgLCBgaWRwZl90eHJ4LmhgLCBgeGRwLmNgLCBgeGRwLmhgLCBhbmQgYGluY2x1ZGUvbmV0L2xpYmV0aC94ZHAuaGAsIHNvIGl0JiMzOTtzIGRlZmluaXRlbHkgZGlnZ2luZyBpbnRvIHRoZSBjb3JlIFhEUCBUeCBwYXRoIGZvciB0aGlzIGRyaXZlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSBhY3R1YWxseSAqcmVhY2gqIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gSURQRiwgaWYgSSByZW1lbWJlciBjb3JyZWN0bHksIGlzIHRoZSAmIzM0O0ludGVsIENvcmUgTklDIEZhbWlseSYjMzQ7IGRyaXZlciDigJMgYSBQQ0kgZGV2aWNlIGRyaXZlci4KClRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gd2UgcmVhbGlzdGljYWxseSBlbXVsYXRlIG9yIGZ1enogdGhpcz8gU3RhbmRhcmQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgdHlwaWNhbGx5IGRvbiYjMzk7dCBleHBvc2UgUENJIGRldmljZXMgdW5sZXNzIHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgZW11bGF0ZWQuIFN5emthbGxlciAqZG9lcyogaGF2ZSBzb21lIHN1cHBvcnQgZm9yIGZ1enppbmcgUENJIGRldmljZXMgdmlhIHZQQ0kgb3Igc2ltaWxhciwgYnV0IHRoZSByZWFsIGJlbmVmaXQgaXMgaW4gZHJpdmVycyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdGhyb3VnaCBzb2Z0d2FyZSBpbnRlcmZhY2VzIG9yIGhhdmUgYW4gZW11bGF0b3IuIEZvciB0aGlzIGNhc2UsIEkmIzM5O2QgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGlzIGEgd2F5IHRvIGluc3RhbnRpYXRlIG9uZSwgc2luY2UgSURQRiBpcyB0eXBpY2FsbHkgYSBwaHlzaWNhbCBOSUMgZHJpdmVyLgoKSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGFuIElEUEYgZW11bGF0b3IgaXMgYXZhaWxhYmxlIG9yIGlmIGl0JiMzOTtzIHB1cmVseSBoYXJkd2FyZS4gV2FpdCwgbGV0IG1lIGNoZWNrIOKAkyBpcyBJRFBGIGV2ZW4gYSB2aXJ0dWFsIGRldmljZT8gJiMzNDtJbnRlbCBJbmZyYXN0cnVjdHVyZSBEYXRhIFBsYW5lIEZ1bmN0aW9uLCYjMzQ7IHRoYXQgY291bGQgYmUgZWl0aGVyLiBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSURQRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZy0zLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnOjQ6Y29uZmlnIElEUEZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZy01LVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwoUikgSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQYXRoIEZ1bmN0aW9uIFN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWc9MTc9aWYgSURQRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnLTE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnOjE5OmNvbmZpZyBJRFBGX1NJTkdMRVFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZy0yMC1cdGJvb2wgXCYjMzQ7aWRwZiBzaW5nbGVxIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzU2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBJRFBGIEtjb25maWcqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgY3JhY2sgb3BlbiB0aGUgS2NvbmZpZyBmb3IgSURQRiBhbmQgc2VlIHdoYXQgZ29vZGllcyBhcmUgaGlkZGVuIHdpdGhpbi4mIzM0OyBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGltcGxpZWQgZ29hbHMgaGVyZTogaXMgdGhpcyBhIHNwZWNpZmljIG1vZHVsZT8gT3IgYW4gb3ZlcmFyY2hpbmcgY29uZmlndXJhdGlvbiBzY2hlbWU/IEdpdmVuIG15IGJhY2tncm91bmQsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNvcmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGEgcGFydGljdWxhciBJbnRlZ3JhdGVkIERldmVsb3BtZW50IFBsYXRmb3JtIEZyYW1ld29yayAoSURQRiksIG9yIGEgc2ltaWxhciBzeXN0ZW0uIEkgd2FudCB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGV4cG9zZWQgb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHBvdGVudGlhbCBmZWF0dXJlIGZsYWdzIHRoYXQgYXJlIHJlbGV2YW50IHRvIG15IGN1cnJlbnQgcHJvamVjdC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBzdXBwb3J0ZWQgaGFyZHdhcmUgdGFyZ2V0cywgdGhlIGF2YWlsYWJsZSBzZWN1cml0eSBmZWF0dXJlcywgYW5kIGhvdyBtb2R1bGFyIHRoZSBJRFBGIGlzLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgS2NvbmZpZyBmaWxlIGlzIGdvaW5nIHRvIGJlIHBhcmFtb3VudCB0byBhbnkga2luZCBvZiBlZmZlY3RpdmUgaW1wbGVtZW50YXRpb24gb3IgY3VzdG9taXphdGlvbiwgc28gbGV0JiMzOTtzIGdldCB0byB3b3JrIGFuZCB1bmRlcnN0YW5kIHRoZSBvcHRpb25zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA5OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0IyBDb3B5cmlnaHQgKEMpIDIwMjQgSW50ZWwgQ29ycG9yYXRpb25cbiAgIDM6XHRcbiAgIDQ6XHRjb25maWcgSURQRlxuICAgNTpcdFx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwoUikgSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQYXRoIEZ1bmN0aW9uIFN1cHBvcnRcJiMzNDtcbiAgIDY6XHRcdGRlcGVuZHMgb24gUENJX01TSVxuICAgNzpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICAgODpcdFx0c2VsZWN0IERJTUxJQlxuICAgOTpcdFx0c2VsZWN0IExJQkVUSF9YRFBcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgSW50ZWwoUikgSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQYXRoIEZ1bmN0aW9uXG4gIDEyOlx0XHQgIGRldmljZXMuXG4gIDEzOlx0XG4gIDE0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbiAgMTU6XHRcdCAgd2lsbCBiZSBjYWxsZWQgaWRwZi5cbiAgMTY6XHRcbiAgMTc6XHRpZiBJRFBGXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnIElEUEZfU0lOR0xFUVxuICAyMDpcdFx0Ym9vbCBcJiMzNDtpZHBmIHNpbmdsZXEgc3VwcG9ydFwmIzM0O1xuICAyMTpcdFx0aGVscFxuICAyMjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGxlZ2FjeSBzaW5nbGUgUngvVHggcXVldWVzIHcvbm9cbiAgMjM6XHRcdCAgY29tcGxldGlvbiBhbmQgZmlsbCBxdWV1ZXMuIE9ubHkgZW5hYmxlIGlmIHlvdSBoYXZlIGhhcmR3YXJlIHdoaWNoXG4gIDI0Olx0XHQgIHdhbnRzIHRvIHdvcmsgaW4gdGhpcyBtb2RlIGFzIGl0IGluY3JlYXNlcyB0aGUgZHJpdmVyIHNpemUgYW5kIGFkZHNcbiAgMjU6XHRcdCAgcnVudG1lIGNoZWNrcyBvbiBob3RwYXRoLlxuICAyNjpcdFxuICAyNzpcdGVuZGlmICMgSURQRlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA5OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NjMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBhIFBDSSBEZXZpY2UgRHJpdmVyOiBJbml0aWFsIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgUENJIGRldmljZSBkcml2ZXIuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaW4gbXkgbWluZCwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGNhbiBiZSBlZmZlY3RpdmVseSBmdXp6ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gV2l0aCBteSBleHBlcmllbmNlLCBJIGtub3cgdGhhdCB0aGVzZSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLCB0aG9zZSB0aGF0ICpkZW1hbmQqIGEgcmVhbCBQQ0kgZGV2aWNlIGFuZCBkb24mIzM5O3QgaGF2ZSBhIHJlbGlhYmxlIGVtdWxhdG9yIHdpdGhpbiBRRU1VIG9yIHN5emthbGxlciwgYXJlIHR5cGljYWxseSBhIHBhaW4uIFRoZSBgcHJvYmVgIGZ1bmN0aW9uIGp1c3Qgd29uJiMzOTt0IHN1Y2NlZWQsIGFuZCwgY29uc2VxdWVudGx5LCB0aGUgbmV0d29yayBkZXZpY2UgKG5ldGRldikgaXQmIzM5O3MgdHJ5aW5nIHRvIHJlZ2lzdGVyIHdpbGwgbmV2ZXIgYXBwZWFyLiBJdCYjMzk7cyBhIGRlYWQgZW5kLCBnZW5lcmFsbHkuCgpTbywgdGhlIG5leHQgb2J2aW91cyBjaGVjayBpcyB3aGV0aGVyIHRoZXJlJiMzOTtzIGFuIGVtdWxhdG9yIGZvciB0aGlzIHNwZWNpZmljIHR5cGUgb2YgZGV2aWNlIOKAkyBhbiBJRFBGIGVtdWxhdG9yIOKAkyB3aXRoaW4gUUVNVS4gSSAqdGhpbmsqIEkgcmVjYWxsIGxvb2tpbmcgZm9yIHNvbWV0aGluZyBsaWtlIHRoYXQgYmVmb3JlLCBhbmQgSSBkb24mIzM5O3QgcmVjYWxsIGl0IGV4aXN0aW5nLiBCdXQgaXQmIzM5O3Mgd29ydGggZG91YmxlLWNoZWNraW5nLiBJZiBRRU1VIGlzIGEgZGVhZCBlbmQsIHRoZSBuZXh0IHBsYWNlIHRvIGxvb2sgaXMgc3l6a2FsbGVyLiBEb2VzIHN5emthbGxlciBvZmZlciBhbnkgc3BlY2lhbGl6ZWQgc3VwcG9ydCBmb3IgSURQRiB0aGF0IEkmIzM5O20gb3Zlcmxvb2tpbmc/IFRoYXQgd291bGQgYmUgYSBodWdlIHRpbWUgc2F2ZXIuIEl04oCZcyB0aGUgb2J2aW91cyByb3V0ZSB0byBzdWNjZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA5OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWRwZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDk6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM3NQoJCQkJCQkJb3V0cHV0OiA5MwoJCQkJCQkJdGhvdWdodHM6IDU2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyB0aGUgSURQRiBEcml2ZXI6IEEgRnV6emluZyBQZXJzcGVjdGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIGhvdyB3ZSBjYW4gZ2V0IHRvIHRoaXMgY29kZS4gSXQmIzM5O3MgYnVyaWVkIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2AuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBpdCYjMzk7cyBldmVuICpyZWFjaGFibGUqIGluIGEgc3RhbmRhcmQgZnV6emluZyBzZXR1cC4gSWYgdGhlcmUmIzM5O3Mgbm8gaGFyZHdhcmUgcHJlc2VudCwgdGhlIGRyaXZlciB3aWxsIHNpbXBseSBzaXQgdGhlcmUsIGluZXJ0LgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBzZWUgaWYgc3l6a2FsbGVyIGhhcyBzb21lIGtpbmQgb2YgaG9vaywgbWF5YmUgc29tZXRoaW5nIGxpa2UgYHN5el9wY2lfZGV2aWNlYCB0byB0cmlnZ2VyIGl0LiBJIHJlbWVtYmVyIGl0IGhhcyBhIGJ1bmNoIG9mIGhvb2tzIGZvciBkaWZmZXJlbnQgc3Vic3lzdGVtcyBsaWtlIFVTQiAoYHN5el91c2JfY29ubmVjdGApLCA4MDIuMTEgKGBzeXpfODAyMTFfaW5qZWN0X2ZyYW1lYCksIGdlbmV0bGluayAoYHN5el9nZW5ldGxpbmtfZ2V0X2ZhbWlseWApLCBhbmQgbW91bnRpbmcgaW1hZ2VzIChgc3l6X21vdW50X2ltYWdlYCkuIEJ1dCwgZG9lcyBzeXprYWxsZXIgaGF2ZSBhbiBleHBsaWNpdCBwcmltaXRpdmUgZm9yIFBDSSBkZXZpY2VzPyBXYWl0LCAqZG9lcyogc3l6a2FsbGVyIGhhdmUgYHN5el9wY2lfZGV2aWNlYD8gTm8sIHRoYXQmIzM5O3Mgbm90IHJpZ2h0LiBgc3l6X2t2bV9zZXR1cF9jcHVgIGlzIGFzIGNsb3NlIGFzIGl0IGdldHMuIE9rYXksIHdhaXQsICpkb2VzKiBzeXprYWxsZXIgaGF2ZSBgc3l6X3BjaV9kZXZpY2VgPyBObywgaXQgZG9lc24mIzM5O3QuCgpJdCAqZG9lcyogZnV6eiBzb21lIFBDSSBkcml2ZXJzIGlmIHRoZXkgYXJlIGV4cG9zZWQgdGhyb3VnaCBzb21lIHZpcnR1YWwgYnVzLCBidXQgdGhhdCYjMzk7cyB1c3VhbGx5IG5vdCB0aGUgY2FzZS4gTGV0IG1lIGRvdWJsZS1jaGVjayAtIGRvZXMgc3l6a2FsbGVyIGhhdmUgYSBgc3l6X3BjaV9kZXZpY2VgPyBOb3BlLCBub3RoaW5nLgoKQWgsIHJpZ2h0LCB0aGUgcHJvbXB0LiBJIGhhdmUgdG8gY29uc2lkZXIgdGhpczogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4mIzM0OwoKVGhlIElEUEYgaXMgYW4gKmFjdHVhbCogSW50ZWwgTklDOyBpdCYjMzk7cyBhIHBoeXNpY2FsIGRldmljZS4gQW5kIFFFTVUsIGluIGEgc3RhbmRhcmQgc2V0dXAgKG9yIEdDRSBmb3IgdGhhdCBtYXR0ZXIpIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlIElEUEYuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgaGFyZHdhcmUgZGV2aWNlIGxpa2UgSW50ZWwmIzM5O3MgSVBVIChJbmZyYXN0cnVjdHVyZSBQcm9jZXNzaW5nIFVuaXQpICYjMzQ7TW91bnQgRXZhbnMuJiMzNDsgVGhpcyBpc24mIzM5O3QgbGlrZSBhbiBlMTAwMCBvciB2aXJ0aW8tbmV0LCBvciBldmVuIGEgc29mdHdhcmUtZW11bGF0ZWQgVVNCIGdhZGdldC4gUUVNVSBkb2VzIGVtdWxhdGUgc29tZSBOSUNzLCBidXQgbm90IElEUEY7IGl0IGVtdWxhdGVzIHRoaW5ncyBsaWtlIGUxMDAwLCBlMTAwMGUsIGlnYiwgcnRsODEzOSwgcGNuZXQsIG5lMmtfcGNpLCB2bXhuZXQzLCB2aXJ0aW8tbmV0LCB0dWxpcC4gU28sIGFueSBjb2RlIHNwZWNpZmljIHRvIElEUEYgaXMgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgaW4gdGhvc2UgZW52aXJvbm1lbnRzLiBJcyB0aGVyZSBhIHZpcnR1YWwgYnVzPyBObywgSURQRiBpcyBoYXJkd2FyZSBzcGVjaWZpYy4KClRoZXJlZm9yZSwgSSYjMzk7bSBjb25jbHVkaW5nIHRoYXQgdGhpcyBwYXRjaCBpc24mIzM5O3QgV29ydGhGdXp6aW5nLiBUaGUgY29kZSBwYXRocyBhcmUgKmltcG9zc2libGUqIHRvIGhpdCBpbiBhIFFFTVUgb3IgR0NFIGVudmlyb25tZW50IGJlY2F1c2UgdGhlIElEUEYgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCBpc24mIzM5O3QgZW11bGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIElEUEYgKEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbikgZHJpdmVyLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIG5ldHdvcmsgZHJpdmVyIGZvciBJbnRlbCBJUFVzLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBoYXJkd2FyZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSBvciBHQ0UpLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgSURQRiAoSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQYXRoIEZ1bmN0aW9uKSBkcml2ZXIuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgbmV0d29yayBkcml2ZXIgZm9yIEludGVsIElQVXMuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIGhhcmR3YXJlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VIG9yIEdDRSksIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwOToyODoyOS43MTk0MTI3NjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTI0OTAzNjk4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIElEUEYgKEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbikgZHJpdmVyLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIG5ldHdvcmsgZHJpdmVyIGZvciBJbnRlbCBJUFVzLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBoYXJkd2FyZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSBvciBHQ0UpLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwOToyODoyOS43MTk0MjA1OTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNTQ4MTA0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDViMzljY2JkMzQ2OWQwM2ZkMzBlZmQ2MGNkMWI3ZmM3NzBhNzQ4NzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgOSAwOToyODoyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oXFxuaW5kZXggZWMxYjc1ZjAzOWJiMjUuLjU0MTRiYmJlZTA3YWRkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmhcXG5AQCAtMzg0LDYgKzM4NCw3IEBAIHN0cnVjdCBpZHBmX3Zwb3J0IHtcXG4gXFx0c3RydWN0IGlkcGZfdHhfcXVldWUgKip0eHFzO1xcbiBcXHR1MTYgbnVtX3R4cTtcXG4gXFx0dTE2IG51bV94ZHBfdHhxO1xcbitcXHRib29sIHhkcHNxX2ZiO1xcbiBcXHRib29sIHhkcHNxX3NoYXJlO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcXG5pbmRleCA3ZjkwNTY0MDRmNjRmYy4uNjQ3MmJmZjljZWIzN2EgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcXG5AQCAtMjI3LDcgKzIyNyw3IEBAIHN0YXRpYyBpbnQgaWRwZl90eF9kZXNjX2FsbG9jKGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCxcXG4gXFxuIFxcdGlkcGZfeHNrX3NldHVwX3F1ZXVlKHZwb3J0LCB0eF9xLCBWSVJUQ0hOTDJfUVVFVUVfVFlQRV9UWCk7XFxuIFxcbi1cXHRpZiAoIWlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB0eF9xKSlcXG4rXFx0aWYgKCFpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhfcSkgfHwgaWRwZl9xdWV1ZV9oYXMoWERQLCB0eF9xKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRyZWZpbGxxID0gdHhfcS1cXHUwMDNlcmVmaWxscTtcXG5AQCAtMTA1NSw2ICsxMDU1LDExIEBAIHN0YXRpYyB2b2lkIGlkcGZfY2xlYW5fcXVldWVfc2V0KGNvbnN0IHN0cnVjdCBpZHBmX3F1ZXVlX3NldCAqcXMpXFxuIFxcdFxcdFxcdGlmIChpZHBmX3F1ZXVlX2hhcyhYRFAsIHEtXFx1MDAzZXR4cSkpIHtcXG4gXFx0XFx0XFx0XFx0cS1cXHUwMDNldHhxLVxcdTAwM2VwZW5kaW5nID0gMDtcXG4gXFx0XFx0XFx0XFx0cS1cXHUwMDNldHhxLVxcdTAwM2V4ZHBfdHggPSAwO1xcbitcXG4rXFx0XFx0XFx0XFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNmlkcGZfeGRwX2ZiKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHEtXFx1MDAzZXR4cSkpXFxuK1xcdFxcdFxcdFxcdFxcdGJpdG1hcF96ZXJvKHEtXFx1MDAzZXR4cS1cXHUwMDNlcGVuZGluZ19tYXNrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgcS1cXHUwMDNldHhxLVxcdTAwM2VkZXNjX2NvdW50KTtcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0cS1cXHUwMDNldHhxLVxcdTAwM2V0eHFfZ3JwLVxcdTAwM2VudW1fY29tcGxldGlvbnNfcGVuZGluZyA9IDA7XFxuIFxcdFxcdFxcdH1cXG5AQCAtMTMxNyw3ICsxMzIyLDggQEAgc3RhdGljIHZvaWQgaWRwZl90eHFfZ3JvdXBfcmVsKHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMpXFxuIFxcdFxcdFxcdGlmICghdHhxX2dycC1cXHUwMDNldHhxc1tqXSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRcXHRpZiAoaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHR4cV9ncnAtXFx1MDAzZXR4cXNbal0pKSB7XFxuK1xcdFxcdFxcdGlmIChpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhxX2dycC1cXHUwMDNldHhxc1tqXSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICFpZHBmX3F1ZXVlX2hhcyhYRFAsIHR4cV9ncnAtXFx1MDAzZXR4cXNbal0pKSB7XFxuIFxcdFxcdFxcdFxcdGtmcmVlKHR4cV9ncnAtXFx1MDAzZXR4cXNbal0tXFx1MDAzZXJlZmlsbHEpO1xcbiBcXHRcXHRcXHRcXHR0eHFfZ3JwLVxcdTAwM2V0eHFzW2pdLVxcdTAwM2VyZWZpbGxxID0gTlVMTDtcXG4gXFx0XFx0XFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxcbmluZGV4IDRiZTViM2I2ZDNlZDJiLi43ZWJlNTlkODFlMTcwNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxcbkBAIC02MjUsMTEgKzYyNSwxMiBAQCBsaWJldGhfY2FjaGVsaW5lX3NldF9hc3NlcnQoc3RydWN0IGlkcGZfcnhfcXVldWUsXFxuICAqIEBjbGVhbl9idWRnZXQ6IHNpbmdsZXEgb25seSwgcXVldWUgY2xlYW5pbmcgYnVkZ2V0XFxuICAqIEBjbGVhbmVkX3BrdHM6IE51bWJlciBvZiBwYWNrZXRzIGNsZWFuZWQgZm9yIHRoZSBhYm92ZSBzYWlkIGNhc2VcXG4gICogQHJlZmlsbHE6IFBvaW50ZXIgdG8gcmVmaWxsIHF1ZXVlXFxuKyAqIEBjYWNoZWRfdHN0YW1wX2NhcHM6IFR4IHRpbWVzdGFtcCBjYXBhYmlsaXRpZXMgbmVnb3RpYXRlZCB3aXRoIHRoZSBDUFxcbiAgKiBAcGVuZGluZzogbnVtYmVyIG9mIHBlbmRpbmcgZGVzY3JpcHRvcnMgdG8gc2VuZCBpbiBRQlxcbiAgKiBAeGRwX3R4OiBudW1iZXIgb2YgcGVuZGluZyBcXHUwMDI2eGRwX2J1ZmYgb3IgXFx1MDAyNnhkcF9mcmFtZSBidWZmZXJzXFxuICAqIEB0aW1lcjogdGltZXIgZm9yIFhEUCBUeCBxdWV1ZSBjbGVhbnVwXFxuICAqIEB4ZHBfbG9jazogbG9jayBmb3IgWERQIFR4IHF1ZXVlcyBzaGFyaW5nXFxuLSAqIEBjYWNoZWRfdHN0YW1wX2NhcHM6IFR4IHRpbWVzdGFtcCBjYXBhYmlsaXRpZXMgbmVnb3RpYXRlZCB3aXRoIHRoZSBDUFxcbisgKiBAcGVuZGluZ19tYXNrOiBtYXNrIG9mIGJ1ZmZlcnMgd2FpdGluZyBmb3IgY29tcGxldGlvbiBpbiB0aGUgRkIgWERQIG1vZGVcXG4gICogQHRzdGFtcF90YXNrOiBXb3JrIHRoYXQgaGFuZGxlcyBUeCB0aW1lc3RhbXAgcmVhZFxcbiAgKiBAc3RhdHNfc3luYzogU2VlIHN0cnVjdCB1NjRfc3RhdHNfc3luY1xcbiAgKiBAcV9zdGF0czogU2VlIHVuaW9uIGlkcGZfdHhfcXVldWVfc3RhdHNcXG5AQCAtNjg5LDYgKzY5MCw4IEBAIHN0cnVjdCBpZHBmX3R4X3F1ZXVlIHtcXG4gXFx0XFx0XFx0dTE2IGNsZWFuZWRfcGt0cztcXG4gXFxuIFxcdFxcdFxcdHN0cnVjdCBpZHBmX3N3X3F1ZXVlICpyZWZpbGxxO1xcbitcXG4rXFx0XFx0XFx0c3RydWN0IGlkcGZfcHRwX3Zwb3J0X3R4X3RzdGFtcF9jYXBzICpjYWNoZWRfdHN0YW1wX2NhcHM7XFxuIFxcdFxcdH07XFxuIFxcdFxcdHN0cnVjdCB7XFxuIFxcdFxcdFxcdHUzMiBwZW5kaW5nO1xcbkBAIC02OTYsMTAgKzY5OSwxMSBAQCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSB7XFxuIFxcbiBcXHRcXHRcXHRzdHJ1Y3QgbGliZXRoX3hkcHNxX3RpbWVyICp0aW1lcjtcXG4gXFx0XFx0XFx0c3RydWN0IGxpYmV0aF94ZHBzcV9sb2NrIHhkcF9sb2NrO1xcbitcXG4rXFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqcGVuZGluZ19tYXNrO1xcbiBcXHRcXHR9O1xcbiBcXHR9O1xcbiBcXG4tXFx0c3RydWN0IGlkcGZfcHRwX3Zwb3J0X3R4X3RzdGFtcF9jYXBzICpjYWNoZWRfdHN0YW1wX2NhcHM7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCAqdHN0YW1wX3Rhc2s7XFxuIFxcbiBcXHRzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgc3RhdHNfc3luYztcXG5AQCAtNzE4LDggKzcyMiw3IEBAIHN0cnVjdCBpZHBmX3R4X3F1ZXVlIHtcXG4gXFx0X19jYWNoZWxpbmVfZ3JvdXBfZW5kX2FsaWduZWQoY29sZCk7XFxuIH07XFxuIGxpYmV0aF9jYWNoZWxpbmVfc2V0X2Fzc2VydChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgNjQsXFxuLVxcdFxcdFxcdCAgICAxMDQgK1xcbi1cXHRcXHRcXHQgICAgb2Zmc2V0b2Yoc3RydWN0IGlkcGZfdHhfcXVldWUsIGNhY2hlZF90c3RhbXBfY2FwcykgLVxcbitcXHRcXHRcXHQgICAgOTYgKyBvZmZzZXRvZihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgdHN0YW1wX3Rhc2spIC1cXG4gXFx0XFx0XFx0ICAgIG9mZnNldG9mZW5kKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCB0aW1lcikgK1xcbiBcXHRcXHRcXHQgICAgb2Zmc2V0b2Yoc3RydWN0IGlkcGZfdHhfcXVldWUsIHFfc3RhdHMpIC1cXG4gXFx0XFx0XFx0ICAgIG9mZnNldG9mZW5kKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCB0c3RhbXBfdGFzayksXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5jXFxuaW5kZXggY2JjY2Q0NTQ2NzY4MTYuLjhhNGUwYTEzMzY0ZGZjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5jXFxuQEAgLTcsNiArNyw4IEBAXFxuICNpbmNsdWRlIFxcXCJ4ZHAuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhzay5oXFxcIlxcbiBcXG4rREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoaWRwZl94ZHBfZmIpO1xcbitcXG4gc3RhdGljIGludCBpZHBmX3J4cV9mb3JfZWFjaChjb25zdCBzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjICpyc3JjLFxcbiBcXHRcXHRcXHQgICAgIGludCAoKmZuKShzdHJ1Y3QgaWRwZl9yeF9xdWV1ZSAqcnhxLCB2b2lkICphcmcpLFxcbiBcXHRcXHRcXHQgICAgIHZvaWQgKmFyZylcXG5AQCAtMTgzLDggKzE4NSw4IEBAIGludCBpZHBmX3hkcHNxc19nZXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxcbiBcXHRcXHRrZnJlZSh4ZHBzcS1cXHUwMDNlcmVmaWxscSk7XFxuIFxcdFxcdHhkcHNxLVxcdTAwM2VyZWZpbGxxID0gTlVMTDtcXG4gXFxuLVxcdFxcdGlkcGZfcXVldWVfY2xlYXIoRkxPV19TQ0hfRU4sIHhkcHNxKTtcXG4tXFx0XFx0aWRwZl9xdWV1ZV9jbGVhcihGTE9XX1NDSF9FTiwgeGRwc3EtXFx1MDAzZWNvbXBscSk7XFxuK1xcdFxcdGlkcGZfcXVldWVfYXNzaWduKEZMT1dfU0NIX0VOLCB4ZHBzcSwgdnBvcnQtXFx1MDAzZXhkcHNxX2ZiKTtcXG4rXFx0XFx0aWRwZl9xdWV1ZV9hc3NpZ24oRkxPV19TQ0hfRU4sIHhkcHNxLVxcdTAwM2Vjb21wbHEsIHZwb3J0LVxcdTAwM2V4ZHBzcV9mYik7XFxuIFxcdFxcdGlkcGZfcXVldWVfc2V0KE5PSVJRLCB4ZHBzcSk7XFxuIFxcdFxcdGlkcGZfcXVldWVfc2V0KFhEUCwgeGRwc3EpO1xcbiBcXHRcXHRpZHBmX3F1ZXVlX3NldChYRFAsIHhkcHNxLVxcdTAwM2Vjb21wbHEpO1xcbkBAIC0xOTcsNiArMTk5LDI4IEBAIGludCBpZHBmX3hkcHNxc19nZXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxcbiBcXHRcXHR4ZHBzcS1cXHUwMDNlcGVuZGluZyA9IDA7XFxuIFxcdFxcdHhkcHNxLVxcdTAwM2V4ZHBfdHggPSAwO1xcbiBcXHRcXHR4ZHBzcS1cXHUwMDNldGhyZXNoID0gbGliZXRoX3hkcF9xdWV1ZV90aHJlc2hvbGQoeGRwc3EtXFx1MDAzZWRlc2NfY291bnQpO1xcbitcXG4rXFx0XFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNmlkcGZfeGRwX2ZiKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHhkcHNxKSkge1xcbitcXHRcXHRcXHR4ZHBzcS1cXHUwMDNlcGVuZGluZ19tYXNrID1cXG4rXFx0XFx0XFx0XFx0Yml0bWFwX3phbGxvY19ub2RlKHhkcHNxLVxcdTAwM2VkZXNjX2NvdW50LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBjcHVfdG9fbWVtKGkgLSBzcXMpKTtcXG4rXFx0XFx0XFx0aWYgKHhkcHNxLVxcdTAwM2VwZW5kaW5nX21hc2spXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0Zm9yIChpbnQgaiA9IGkgLSAxOyBqIFxcdTAwM2U9IHNxczsgai0tKSB7XFxuK1xcdFxcdFxcdFxcdHhkcHNxID0gdnBvcnQtXFx1MDAzZXR4cXNbal07XFxuK1xcbitcXHRcXHRcXHRcXHRpZiAoaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHhkcHNxKSlcXG4rXFx0XFx0XFx0XFx0XFx0Yml0bWFwX2ZyZWUoeGRwc3EtXFx1MDAzZXBlbmRpbmdfbWFzayk7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdGZvciAodTMyIGogPSAwOyBqIFxcdTAwM2MgdnBvcnQtXFx1MDAzZW51bV94ZHBfdHhxOyBqKyspXFxuK1xcdFxcdFxcdFxcdGtmcmVlKHRpbWVyc1tqXSk7XFxuK1xcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMjIyLDYgKzI0NiwxMiBAQCB2b2lkIGlkcGZfeGRwc3FzX3B1dChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXFxuIFxcdFxcdGxpYmV0aF94ZHBzcV9kZWluaXRfdGltZXIoeGRwc3EtXFx1MDAzZXRpbWVyKTtcXG4gXFx0XFx0bGliZXRoX3hkcHNxX3B1dChcXHUwMDI2eGRwc3EtXFx1MDAzZXhkcF9sb2NrLCBkZXYpO1xcbiBcXG4rXFx0XFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNmlkcGZfeGRwX2ZiKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHhkcHNxKSkge1xcbitcXHRcXHRcXHRiaXRtYXBfZnJlZSh4ZHBzcS1cXHUwMDNlcGVuZGluZ19tYXNrKTtcXG4rXFx0XFx0XFx0eGRwc3EtXFx1MDAzZXBlbmRpbmdfbWFzayA9IE5VTEw7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdGtmcmVlKHhkcHNxLVxcdTAwM2V0aW1lcik7XFxuIFxcdFxcdHhkcHNxLVxcdTAwM2VyZWZpbGxxID0gTlVMTDtcXG4gXFx0XFx0aWRwZl9xdWV1ZV9jbGVhcihOT0lSUSwgeGRwc3EpO1xcbkBAIC0yNTAsNiArMjgwLDY1IEBAIHN0YXRpYyBpbnQgaWRwZl94ZHBfcGFyc2VfY3FlKGNvbnN0IHN0cnVjdCBpZHBmX3NwbGl0cV80Yl90eF9jb21wbF9kZXNjICpkZXNjLFxcbiBcXHRyZXR1cm4gdXBwZXJfMTZfYml0cyh2YWwpO1xcbiB9XFxuIFxcbitzdGF0aWMgdTMyIGlkcGZfeGRwc3FfcG9sbF9mYihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpXFxuK3tcXG4rXFx0c3RydWN0IGlkcGZfY29tcGxfcXVldWUgKmNxID0geGRwc3EtXFx1MDAzZWNvbXBscTtcXG4rXFx0dW5zaWduZWQgbG9uZyAqbWFzayA9IHhkcHNxLVxcdTAwM2VwZW5kaW5nX21hc2s7XFxuK1xcdHUzMiBkb25lX2ZyYW1lcywgdHhfY250LCBuZXdfbnRjO1xcbitcXHR1MzIgbnRjID0gY3EtXFx1MDAzZW5leHRfdG9fY2xlYW47XFxuK1xcdHUzMiBjbnQgPSBjcS1cXHUwMDNlZGVzY19jb3VudDtcXG4rXFx0Ym9vbCBnZW47XFxuK1xcbitcXHRnZW4gPSBpZHBmX3F1ZXVlX2hhcyhHRU5fQ0hLLCBjcSk7XFxuK1xcbitcXHRmb3IgKGRvbmVfZnJhbWVzID0gMDsgZG9uZV9mcmFtZXMgXFx1MDAzYyBidWRnZXQ7ICkge1xcbitcXHRcXHRpbnQgcmV0O1xcbitcXG4rXFx0XFx0cmV0ID0gaWRwZl94ZHBfcGFyc2VfY3FlKFxcdTAwMjZjcS1cXHUwMDNlY29tcFtudGNdLmNvbW1vbiwgZ2VuKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNlPSAwKSB7XFxuK1xcdFxcdFxcdF9fY2xlYXJfYml0KHJldCwgbWFzayk7XFxuK1xcdFxcdFxcdGRvbmVfZnJhbWVzKys7XFxuK1xcbitcXHRcXHRcXHRnb3RvIG5leHQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHN3aXRjaCAocmV0KSB7XFxuK1xcdFxcdGNhc2UgLUVOT0RBVEE6XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRjYXNlIC1FSU5WQUw6XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbituZXh0OlxcbitcXHRcXHRpZiAodW5saWtlbHkoKytudGMgPT0gY250KSkge1xcbitcXHRcXHRcXHRudGMgPSAwO1xcbitcXHRcXHRcXHRnZW4gPSAhZ2VuO1xcbitcXHRcXHRcXHRpZHBmX3F1ZXVlX2NoYW5nZShHRU5fQ0hLLCBjcSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rb3V0OlxcbitcXHRjcS1cXHUwMDNlbmV4dF90b19jbGVhbiA9IG50YztcXG4rXFxuK1xcdGlmICh1bmxpa2VseSghZG9uZV9mcmFtZXMpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHR4X2NudCA9IHhkcHNxLVxcdTAwM2VkZXNjX2NvdW50O1xcbitcXG4rXFx0LyogRG9uJ3QgZ28gcGFzdCBuZXh0X3RvX3VzZSAqL1xcbitcXHRfX3NldF9iaXQoeGRwc3EtXFx1MDAzZW5leHRfdG9fdXNlLCBtYXNrKTtcXG4rXFxuK1xcdG5ld19udGMgPSBmaW5kX25leHRfYml0KG1hc2ssIHR4X2NudCwgeGRwc3EtXFx1MDAzZW5leHRfdG9fY2xlYW4pO1xcbitcXHRkb25lX2ZyYW1lcyA9IG5ld19udGMgLSB4ZHBzcS1cXHUwMDNlbmV4dF90b19jbGVhbjtcXG4rXFxuK1xcdGlmIChuZXdfbnRjID09IHR4X2NudClcXG4rXFx0XFx0ZG9uZV9mcmFtZXMgKz0gZmluZF9maXJzdF9iaXQobWFzaywgdHhfY250KTtcXG4rXFxuK1xcdF9fY2xlYXJfYml0KHhkcHNxLVxcdTAwM2VuZXh0X3RvX3VzZSwgbWFzayk7XFxuK1xcbitcXHRyZXR1cm4gZG9uZV9mcmFtZXM7XFxuK31cXG4rXFxuIHUzMiBpZHBmX3hkcHNxX3BvbGwoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxLCB1MzIgYnVkZ2V0KVxcbiB7XFxuIFxcdHN0cnVjdCBpZHBmX2NvbXBsX3F1ZXVlICpjcSA9IHhkcHNxLVxcdTAwM2Vjb21wbHE7XFxuQEAgLTI2MCw2ICszNDksMTAgQEAgdTMyIGlkcGZfeGRwc3FfcG9sbChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpXFxuIFxcdHUzMiBkb25lX2ZyYW1lcztcXG4gXFx0Ym9vbCBnZW47XFxuIFxcbitcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2aWRwZl94ZHBfZmIpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgeGRwc3EpKVxcbitcXHRcXHRyZXR1cm4gaWRwZl94ZHBzcV9wb2xsX2ZiKHhkcHNxLCBidWRnZXQpO1xcbitcXG4gXFx0Z2VuID0gaWRwZl9xdWV1ZV9oYXMoR0VOX0NISywgY3EpO1xcbiBcXG4gXFx0Zm9yIChkb25lX2ZyYW1lcyA9IDA7IGRvbmVfZnJhbWVzIFxcdTAwM2MgYnVkZ2V0OyApIHtcXG5AQCAtNDc5LDYgKzU3MiwyNCBAQCBzdGF0aWMgaW50IGlkcGZfeGRwX3NldHVwX3Byb2coc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0LFxcbiBcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4gXFx0fVxcbiBcXG4rXFx0dnBvcnQtXFx1MDAzZXhkcHNxX2ZiID0gIWlkcGZfaXNfY2FwX2VuYSh2cG9ydC1cXHUwMDNlYWRhcHRlciwgSURQRl9PVEhFUl9DQVBTLFxcbitcXHRcXHRcXHRcXHRcXHQgICBWSVJUQ0hOTDJfQ0FQX1NQTElUUV9RU0NIRUQpO1xcbitcXHRpZiAoIXZwb3J0LVxcdTAwM2V4ZHBzcV9mYilcXG4rXFx0XFx0Z290byByZXNldDtcXG4rXFxuK1xcdGlmIChwcm9nKSB7XFxuK1xcdFxcdGJvb2wgd2FybiA9ICFzdGF0aWNfa2V5X2VuYWJsZWQoXFx1MDAyNmlkcGZfeGRwX2ZiKTtcXG4rXFxuK1xcdFxcdHN0YXRpY19icmFuY2hfaW5jKFxcdTAwMjZpZHBmX3hkcF9mYik7XFxuK1xcbitcXHRcXHRpZiAod2FybiBcXHUwMDI2XFx1MDAyNiBuZXRfcmF0ZWxpbWl0KCkpXFxuK1xcdFxcdFxcdG5ldGRldl93YXJuKHZwb3J0LVxcdTAwM2VuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiVGhlIEZXIGRvZXNuJ3Qgc3VwcG9ydCBUeCBpbiBGSUZPIG1vZGUsIFhEUCBUeCBwZXJmb3JtYW5jZSBtaWdodCBiZSBzdWJvcHRpbWFsXFxcXG5cXFwiKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c3RhdGljX2JyYW5jaF9kZWMoXFx1MDAyNmlkcGZfeGRwX2ZiKTtcXG4rXFx0fVxcbitcXG4rcmVzZXQ6XFxuIFxcdG9sZCA9IGNmZy1cXHUwMDNldXNlcl9jb25maWcueGRwX3Byb2c7XFxuIFxcdGNmZy1cXHUwMDNldXNlcl9jb25maWcueGRwX3Byb2cgPSBwcm9nO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmhcXG5pbmRleCA2M2U1NmY3ZDQzZTAwMi4uM2QwMWM1MzViZDRjNjAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmhcXG5AQCAtOCw2ICs4LDEwIEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwiaWRwZl90eHJ4LmhcXFwiXFxuIFxcbitzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjO1xcbitcXG4rREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGlkcGZfeGRwX2ZiKTtcXG4rXFxuIGludCBpZHBmX3hkcF9yeHFfaW5mb19pbml0KHN0cnVjdCBpZHBmX3J4X3F1ZXVlICpyeHEpO1xcbiBpbnQgaWRwZl94ZHBfcnhxX2luZm9faW5pdF9hbGwoY29uc3Qgc3RydWN0IGlkcGZfcV92ZWNfcnNyYyAqcnNyYyk7XFxuIHZvaWQgaWRwZl94ZHBfcnhxX2luZm9fZGVpbml0KHN0cnVjdCBpZHBmX3J4X3F1ZXVlICpyeHEsIHUzMiBtb2RlbCk7XFxuQEAgLTIxLDYgKzI1LDM0IEBAIHZvaWQgaWRwZl94ZHBzcXNfcHV0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCk7XFxuIHUzMiBpZHBmX3hkcHNxX3BvbGwoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxLCB1MzIgYnVkZ2V0KTtcXG4gYm9vbCBpZHBmX3hkcF90eF9mbHVzaF9idWxrKHN0cnVjdCBsaWJldGhfeGRwX3R4X2J1bGsgKmJxLCB1MzIgZmxhZ3MpO1xcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X3htaXRfZmIoc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyBkZXNjLCB1MzIgaSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBsaWJldGhfeGRwc3EgKnNxLCB1NjQgcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgaWRwZl9mbGV4X3R4X3NjaGVkX2Rlc2MgKnR4X2Rlc2MgPSBzcS1cXHUwMDNlZGVzY3M7XFxuK1xcdHUzMiBjbWQ7XFxuK1xcbitcXHRjbWQgPSBGSUVMRF9QUkVQKElEUEZfVFhEX0ZMRVhfRkxPV19EVFlQRV9NLFxcbitcXHRcXHRcXHQgSURQRl9UWF9ERVNDX0RUWVBFX0ZMRVhfRkxPV19TQ0hFKTtcXG4rXFx0aWYgKGRlc2MuZmxhZ3MgXFx1MDAyNiBMSUJFVEhfWERQX1RYX0xBU1QpXFxuK1xcdFxcdGNtZCB8PSBJRFBGX1RYRF9GTEVYX0ZMT1dfQ01EX0VPUDtcXG4rXFx0aWYgKHByaXYgXFx1MDAyNlxcdTAwMjYgKGRlc2MuZmxhZ3MgXFx1MDAyNiBMSUJFVEhfWERQX1RYX0NTVU0pKVxcbitcXHRcXHRjbWQgfD0gSURQRl9UWERfRkxFWF9GTE9XX0NNRF9DU19FTjtcXG4rXFxuK1xcdHR4X2Rlc2MgPSBcXHUwMDI2dHhfZGVzY1tpXTtcXG4rXFx0dHhfZGVzYy1cXHUwMDNlYnVmX2FkZHIgPSBjcHVfdG9fbGU2NChkZXNjLmFkZHIpO1xcbitcXG4rI2lmZGVmIF9fTElCRVRIX1dPUkRfQUNDRVNTXFxuK1xcdCoodTY0ICopXFx1MDAyNnR4X2Rlc2MtXFx1MDAzZXF3MSA9ICgodTY0KWRlc2MubGVuIFxcdTAwM2NcXHUwMDNjIDQ4KSB8ICgodTY0KWkgXFx1MDAzY1xcdTAwM2MgMzIpIHwgY21kO1xcbisjZWxzZVxcbitcXHR0eF9kZXNjLVxcdTAwM2VxdzEucnhyX2J1ZnNpemUgPSBjcHVfdG9fbGUxNihkZXNjLmxlbik7XFxuK1xcdHR4X2Rlc2MtXFx1MDAzZXF3MS5jb21wbF90YWcgPSBjcHVfdG9fbGUxNihpKTtcXG4rXFx0dHhfZGVzYy1cXHUwMDNlcXcxLnRzWzBdID0gMDtcXG4rXFx0dHhfZGVzYy1cXHUwMDNlcXcxLnRzWzFdID0gMDtcXG4rXFx0dHhfZGVzYy1cXHUwMDNlcXcxLnRzWzJdID0gMDtcXG4rXFx0dHhfZGVzYy1cXHUwMDNlcXcxLmNtZF9kdHlwZSA9IGNtZDtcXG4rI2VuZGlmXFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpZHBmX3hkcF90eF94bWl0IC0gcHJvZHVjZSBhIHNpbmdsZSBIVyBUeCBkZXNjcmlwdG9yIG91dCBvZiBYRFAgZGVzY1xcbiAgKiBAZGVzYzogWERQIGRlc2NyaXB0b3IgdG8gcHVsbCB0aGUgRE1BIGFkZHJlc3MgYW5kIGxlbmd0aCBmcm9tXFxuQEAgLTM0LDYgKzY2LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcF90eF94bWl0KHN0cnVjdCBsaWJldGhfeGRwX3R4X2Rlc2MgZGVzYywgdTMyIGksXFxuIFxcdHN0cnVjdCBpZHBmX2ZsZXhfdHhfZGVzYyAqdHhfZGVzYyA9IHNxLVxcdTAwM2VkZXNjcztcXG4gXFx0dTMyIGNtZDtcXG4gXFxuK1xcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZpZHBmX3hkcF9mYikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLFxcbitcXHRcXHRcXHQgICBsaWJldGhfeGRwc3FfdG9fc3Eoc3EsIHN0cnVjdCBpZHBmX3R4X3F1ZXVlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBuZXh0X3RvX3VzZSkpKSB7XFxuK1xcdFxcdGlkcGZfeGRwX3R4X3htaXRfZmIoZGVzYywgaSwgc3EsIHByaXYpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuIFxcdGNtZCA9IEZJRUxEX1BSRVAoSURQRl9GTEVYX1RYRF9RVzFfRFRZUEVfTSxcXG4gXFx0XFx0XFx0IElEUEZfVFhfREVTQ19EVFlQRV9GTEVYX0wyVEFHMV9MMlRBRzIpO1xcbiBcXHRpZiAoZGVzYy5mbGFncyBcXHUwMDI2IExJQkVUSF9YRFBfVFhfTEFTVClcXG5AQCAtNTMsMTAgKzkzLDI3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcF90eF94bWl0KHN0cnVjdCBsaWJldGhfeGRwX3R4X2Rlc2MgZGVzYywgdTMyIGksXFxuICNlbmRpZlxcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBzcV9zZXRfcnNfZmIoY29uc3Qgc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxKVxcbit7XFxuK1xcdHUzMiBuID0gbWluKHhkcHNxLVxcdTAwM2VwZW5kaW5nLCB4ZHBzcS1cXHUwMDNlZGVzY19jb3VudCAtIHhkcHNxLVxcdTAwM2VuZXh0X3RvX2NsZWFuKTtcXG4rXFxuK1xcdGJpdG1hcF9zZXQoeGRwc3EtXFx1MDAzZXBlbmRpbmdfbWFzaywgeGRwc3EtXFx1MDAzZW5leHRfdG9fY2xlYW4sIG4pO1xcbitcXG4rXFx0biA9IHhkcHNxLVxcdTAwM2VwZW5kaW5nIC0gbjtcXG4rXFx0aWYgKG4pXFxuK1xcdFxcdGJpdG1hcF9zZXQoeGRwc3EtXFx1MDAzZXBlbmRpbmdfbWFzaywgMCwgbik7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcHNxX3NldF9ycyhjb25zdCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EpXFxuIHtcXG4gXFx0dTMyIG50dSwgY21kO1xcbiBcXG4rXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNmlkcGZfeGRwX2ZiKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHhkcHNxKSkge1xcbitcXHRcXHRpZHBmX3hkcHNxX3NldF9yc19mYih4ZHBzcSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4gXFx0bnR1ID0geGRwc3EtXFx1MDAzZW5leHRfdG9fdXNlO1xcbiBcXHRpZiAodW5saWtlbHkoIW50dSkpXFxuIFxcdFxcdG50dSA9IHhkcHNxLVxcdTAwM2VkZXNjX2NvdW50O1xcbkBAIC04NCw3ICsxNDEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBzcV91cGRhdGVfdGFpbChjb25zdCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EpXFxuICAqIFNldCB0aGUgUlMgYml0IChcXFwiZW5kIG9mIGJhdGNoXFxcIiksIGJ1bXAgdGhlIHRhaWwsIGFuZCBxdWV1ZSB0aGUgY2xlYW51cCB0aW1lci5cXG4gICogVG8gYmUgY2FsbGVkIGFmdGVyIGEgTkFQSSBwb2xsaW5nIGxvb3AsIGF0IHRoZSBlbmQgb2YgLm5kb194ZHBfeG1pdCgpIGV0Yy5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcF90eF9maW5hbGl6ZSh2b2lkICpfeGRwc3EsIGJvb2wgc2VudCwgYm9vbCBmbHVzaClcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGlkcGZfeGRwX3R4X2ZpbmFsaXplKHZvaWQgKl94ZHBzcSwgYm9vbCBzZW50LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgYm9vbCBmbHVzaClcXG4ge1xcbiBcXHRzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EgPSBfeGRwc3E7XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9saWJldGgveGRwLmggYi9pbmNsdWRlL25ldC9saWJldGgveGRwLmhcXG5pbmRleCA4OTg3MjNhYjYyZTgxMi4uZWQ2MWQ4M2JkYTJkNzcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oXFxuQEAgLTQzMCw2ICs0MzAsMTkgQEAgc3RydWN0IGxpYmV0aF94ZHBzcSB7XFxuIFxcdHN0cnVjdCBsaWJldGhfeGRwc3FfbG9ja1xcdCpsb2NrO1xcbiB9O1xcbiBcXG4rLyoqXFxuKyAqIGxpYmV0aF94ZHBzcV90b19zcSAtIGdldCBTUSBwb2ludGVyIGZyb20gYW4gWERQU1EgcG9pbnRlclxcbisgKiBAeGRwc3E6IFxcdTAwMjZsaWJldGhfeGRwc3EgY29ycmVzcG9uZGluZyB0byB0aGUgcXVldWVcXG4rICogQHR5cGU6IHR5cGVvZigpIG9mIHRoZSBkcml2ZXIgVHggcXVldWUgc3RydWN0dXJlXFxuKyAqIEBtZW1iZXI6IG5hbWUgb2YgdGhlIE5UVSBmaWVsZCBpbnNpZGUgQHR5cGVcXG4rICpcXG4rICogU29tZSBvZiB0aGUgc2VuZGluZyBjYWxsYmFja3MgdGFrZSBvbmx5IFxcdTAwMjZsaWJldGhfeGRwc3EgcG9pbnRlciBhbmQgbm8gcG9pbnRlclxcbisgKiB0byB0aGUgYWN0dWFsIGRyaXZlciBUeCBxdWV1ZSBzdHJ1Y3R1cmUuIFVzZSB0aGlzIGhlbHBlciB0byBxdWlja2x5IGp1bXAgdG9cXG4rICogdGhlIGxhdHRlciB3aGVuIG5lZWRlZC5cXG4rICovXFxuKyNkZWZpbmUgbGliZXRoX3hkcHNxX3RvX3NxKHhkcHNxLCB0eXBlLCBtZW1iZXIpXFx0XFx0XFx0XFx0ICAgICAgXFxcXFxcbitcXHRjb250YWluZXJfb2ZfY29uc3QoKHhkcHNxKS1cXHUwMDNlbnR1LCB0eXBlLCBtZW1iZXIpXFxuK1xcbiAvKipcXG4gICogc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyAtIGFic3RyYWN0aW9uIGZvciBhbiBYRFAgVHggZGVzY3JpcHRvclxcbiAgKiBAYWRkcjogRE1BIGFkZHJlc3Mgb2YgdGhlIGZyYW1lXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA5OjI4OjMwLjQyNTk0MTg0MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1NDI0OTczNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBJRFBGIChJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24pIGRyaXZlci4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBuZXR3b3JrIGRyaXZlciBmb3IgSW50ZWwgSVBVcy4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUgb3IgR0NFKSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YjM5Y2NiZDM0NjlkMDNmZDMwZWZkNjBjZDFiN2ZjNzcwYTc0ODcxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAwOToyODoyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmhcbmluZGV4IGVjMWI3NWYwMzliYjI1Li41NDE0YmJiZWUwN2FkZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaFxuQEAgLTM4NCw2ICszODQsNyBAQCBzdHJ1Y3QgaWRwZl92cG9ydCB7XG4gXHRzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqKnR4cXM7XG4gXHR1MTYgbnVtX3R4cTtcbiBcdHUxNiBudW1feGRwX3R4cTtcbitcdGJvb2wgeGRwc3FfZmI7XG4gXHRib29sIHhkcHNxX3NoYXJlO1xuIFx0c3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZztcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuaW5kZXggN2Y5MDU2NDA0ZjY0ZmMuLjY0NzJiZmY5Y2ViMzdhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuQEAgLTIyNyw3ICsyMjcsNyBAQCBzdGF0aWMgaW50IGlkcGZfdHhfZGVzY19hbGxvYyhjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQsXG4gXG4gXHRpZHBmX3hza19zZXR1cF9xdWV1ZSh2cG9ydCwgdHhfcSwgVklSVENITkwyX1FVRVVFX1RZUEVfVFgpO1xuIFxuLVx0aWYgKCFpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhfcSkpXG4rXHRpZiAoIWlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB0eF9xKSB8fCBpZHBmX3F1ZXVlX2hhcyhYRFAsIHR4X3EpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHJlZmlsbHEgPSB0eF9xLVx1MDAzZXJlZmlsbHE7XG5AQCAtMTA1NSw2ICsxMDU1LDExIEBAIHN0YXRpYyB2b2lkIGlkcGZfY2xlYW5fcXVldWVfc2V0KGNvbnN0IHN0cnVjdCBpZHBmX3F1ZXVlX3NldCAqcXMpXG4gXHRcdFx0aWYgKGlkcGZfcXVldWVfaGFzKFhEUCwgcS1cdTAwM2V0eHEpKSB7XG4gXHRcdFx0XHRxLVx1MDAzZXR4cS1cdTAwM2VwZW5kaW5nID0gMDtcbiBcdFx0XHRcdHEtXHUwMDNldHhxLVx1MDAzZXhkcF90eCA9IDA7XG4rXG4rXHRcdFx0XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZpZHBmX3hkcF9mYikgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHEtXHUwMDNldHhxKSlcbitcdFx0XHRcdFx0Yml0bWFwX3plcm8ocS1cdTAwM2V0eHEtXHUwMDNlcGVuZGluZ19tYXNrLFxuK1x0XHRcdFx0XHRcdCAgICBxLVx1MDAzZXR4cS1cdTAwM2VkZXNjX2NvdW50KTtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0cS1cdTAwM2V0eHEtXHUwMDNldHhxX2dycC1cdTAwM2VudW1fY29tcGxldGlvbnNfcGVuZGluZyA9IDA7XG4gXHRcdFx0fVxuQEAgLTEzMTcsNyArMTMyMiw4IEBAIHN0YXRpYyB2b2lkIGlkcGZfdHhxX2dyb3VwX3JlbChzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjICpyc3JjKVxuIFx0XHRcdGlmICghdHhxX2dycC1cdTAwM2V0eHFzW2pdKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0aWYgKGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB0eHFfZ3JwLVx1MDAzZXR4cXNbal0pKSB7XG4rXHRcdFx0aWYgKGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB0eHFfZ3JwLVx1MDAzZXR4cXNbal0pIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAhaWRwZl9xdWV1ZV9oYXMoWERQLCB0eHFfZ3JwLVx1MDAzZXR4cXNbal0pKSB7XG4gXHRcdFx0XHRrZnJlZSh0eHFfZ3JwLVx1MDAzZXR4cXNbal0tXHUwMDNlcmVmaWxscSk7XG4gXHRcdFx0XHR0eHFfZ3JwLVx1MDAzZXR4cXNbal0tXHUwMDNlcmVmaWxscSA9IE5VTEw7XG4gXHRcdFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oXG5pbmRleCA0YmU1YjNiNmQzZWQyYi4uN2ViZTU5ZDgxZTE3MDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oXG5AQCAtNjI1LDExICs2MjUsMTIgQEAgbGliZXRoX2NhY2hlbGluZV9zZXRfYXNzZXJ0KHN0cnVjdCBpZHBmX3J4X3F1ZXVlLFxuICAqIEBjbGVhbl9idWRnZXQ6IHNpbmdsZXEgb25seSwgcXVldWUgY2xlYW5pbmcgYnVkZ2V0XG4gICogQGNsZWFuZWRfcGt0czogTnVtYmVyIG9mIHBhY2tldHMgY2xlYW5lZCBmb3IgdGhlIGFib3ZlIHNhaWQgY2FzZVxuICAqIEByZWZpbGxxOiBQb2ludGVyIHRvIHJlZmlsbCBxdWV1ZVxuKyAqIEBjYWNoZWRfdHN0YW1wX2NhcHM6IFR4IHRpbWVzdGFtcCBjYXBhYmlsaXRpZXMgbmVnb3RpYXRlZCB3aXRoIHRoZSBDUFxuICAqIEBwZW5kaW5nOiBudW1iZXIgb2YgcGVuZGluZyBkZXNjcmlwdG9ycyB0byBzZW5kIGluIFFCXG4gICogQHhkcF90eDogbnVtYmVyIG9mIHBlbmRpbmcgXHUwMDI2eGRwX2J1ZmYgb3IgXHUwMDI2eGRwX2ZyYW1lIGJ1ZmZlcnNcbiAgKiBAdGltZXI6IHRpbWVyIGZvciBYRFAgVHggcXVldWUgY2xlYW51cFxuICAqIEB4ZHBfbG9jazogbG9jayBmb3IgWERQIFR4IHF1ZXVlcyBzaGFyaW5nXG4tICogQGNhY2hlZF90c3RhbXBfY2FwczogVHggdGltZXN0YW1wIGNhcGFiaWxpdGllcyBuZWdvdGlhdGVkIHdpdGggdGhlIENQXG4rICogQHBlbmRpbmdfbWFzazogbWFzayBvZiBidWZmZXJzIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24gaW4gdGhlIEZCIFhEUCBtb2RlXG4gICogQHRzdGFtcF90YXNrOiBXb3JrIHRoYXQgaGFuZGxlcyBUeCB0aW1lc3RhbXAgcmVhZFxuICAqIEBzdGF0c19zeW5jOiBTZWUgc3RydWN0IHU2NF9zdGF0c19zeW5jXG4gICogQHFfc3RhdHM6IFNlZSB1bmlvbiBpZHBmX3R4X3F1ZXVlX3N0YXRzXG5AQCAtNjg5LDYgKzY5MCw4IEBAIHN0cnVjdCBpZHBmX3R4X3F1ZXVlIHtcbiBcdFx0XHR1MTYgY2xlYW5lZF9wa3RzO1xuIFxuIFx0XHRcdHN0cnVjdCBpZHBmX3N3X3F1ZXVlICpyZWZpbGxxO1xuK1xuK1x0XHRcdHN0cnVjdCBpZHBmX3B0cF92cG9ydF90eF90c3RhbXBfY2FwcyAqY2FjaGVkX3RzdGFtcF9jYXBzO1xuIFx0XHR9O1xuIFx0XHRzdHJ1Y3Qge1xuIFx0XHRcdHUzMiBwZW5kaW5nO1xuQEAgLTY5NiwxMCArNjk5LDExIEBAIHN0cnVjdCBpZHBmX3R4X3F1ZXVlIHtcbiBcbiBcdFx0XHRzdHJ1Y3QgbGliZXRoX3hkcHNxX3RpbWVyICp0aW1lcjtcbiBcdFx0XHRzdHJ1Y3QgbGliZXRoX3hkcHNxX2xvY2sgeGRwX2xvY2s7XG4rXG4rXHRcdFx0dW5zaWduZWQgbG9uZyAqcGVuZGluZ19tYXNrO1xuIFx0XHR9O1xuIFx0fTtcbiBcbi1cdHN0cnVjdCBpZHBmX3B0cF92cG9ydF90eF90c3RhbXBfY2FwcyAqY2FjaGVkX3RzdGFtcF9jYXBzO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0ICp0c3RhbXBfdGFzaztcbiBcbiBcdHN0cnVjdCB1NjRfc3RhdHNfc3luYyBzdGF0c19zeW5jO1xuQEAgLTcxOCw4ICs3MjIsNyBAQCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSB7XG4gXHRfX2NhY2hlbGluZV9ncm91cF9lbmRfYWxpZ25lZChjb2xkKTtcbiB9O1xuIGxpYmV0aF9jYWNoZWxpbmVfc2V0X2Fzc2VydChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgNjQsXG4tXHRcdFx0ICAgIDEwNCArXG4tXHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCBjYWNoZWRfdHN0YW1wX2NhcHMpIC1cbitcdFx0XHQgICAgOTYgKyBvZmZzZXRvZihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgdHN0YW1wX3Rhc2spIC1cbiBcdFx0XHQgICAgb2Zmc2V0b2ZlbmQoc3RydWN0IGlkcGZfdHhfcXVldWUsIHRpbWVyKSArXG4gXHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCBxX3N0YXRzKSAtXG4gXHRcdFx0ICAgIG9mZnNldG9mZW5kKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCB0c3RhbXBfdGFzayksXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmNcbmluZGV4IGNiY2NkNDU0Njc2ODE2Li44YTRlMGExMzM2NGRmYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmNcbkBAIC03LDYgKzcsOCBAQFxuICNpbmNsdWRlIFwieGRwLmhcIlxuICNpbmNsdWRlIFwieHNrLmhcIlxuIFxuK0RFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGlkcGZfeGRwX2ZiKTtcbitcbiBzdGF0aWMgaW50IGlkcGZfcnhxX2Zvcl9lYWNoKGNvbnN0IHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMsXG4gXHRcdFx0ICAgICBpbnQgKCpmbikoc3RydWN0IGlkcGZfcnhfcXVldWUgKnJ4cSwgdm9pZCAqYXJnKSxcbiBcdFx0XHQgICAgIHZvaWQgKmFyZylcbkBAIC0xODMsOCArMTg1LDggQEAgaW50IGlkcGZfeGRwc3FzX2dldChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXG4gXHRcdGtmcmVlKHhkcHNxLVx1MDAzZXJlZmlsbHEpO1xuIFx0XHR4ZHBzcS1cdTAwM2VyZWZpbGxxID0gTlVMTDtcbiBcbi1cdFx0aWRwZl9xdWV1ZV9jbGVhcihGTE9XX1NDSF9FTiwgeGRwc3EpO1xuLVx0XHRpZHBmX3F1ZXVlX2NsZWFyKEZMT1dfU0NIX0VOLCB4ZHBzcS1cdTAwM2Vjb21wbHEpO1xuK1x0XHRpZHBmX3F1ZXVlX2Fzc2lnbihGTE9XX1NDSF9FTiwgeGRwc3EsIHZwb3J0LVx1MDAzZXhkcHNxX2ZiKTtcbitcdFx0aWRwZl9xdWV1ZV9hc3NpZ24oRkxPV19TQ0hfRU4sIHhkcHNxLVx1MDAzZWNvbXBscSwgdnBvcnQtXHUwMDNleGRwc3FfZmIpO1xuIFx0XHRpZHBmX3F1ZXVlX3NldChOT0lSUSwgeGRwc3EpO1xuIFx0XHRpZHBmX3F1ZXVlX3NldChYRFAsIHhkcHNxKTtcbiBcdFx0aWRwZl9xdWV1ZV9zZXQoWERQLCB4ZHBzcS1cdTAwM2Vjb21wbHEpO1xuQEAgLTE5Nyw2ICsxOTksMjggQEAgaW50IGlkcGZfeGRwc3FzX2dldChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXG4gXHRcdHhkcHNxLVx1MDAzZXBlbmRpbmcgPSAwO1xuIFx0XHR4ZHBzcS1cdTAwM2V4ZHBfdHggPSAwO1xuIFx0XHR4ZHBzcS1cdTAwM2V0aHJlc2ggPSBsaWJldGhfeGRwX3F1ZXVlX3RocmVzaG9sZCh4ZHBzcS1cdTAwM2VkZXNjX2NvdW50KTtcbitcbitcdFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2aWRwZl94ZHBfZmIpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHhkcHNxKSkge1xuK1x0XHRcdHhkcHNxLVx1MDAzZXBlbmRpbmdfbWFzayA9XG4rXHRcdFx0XHRiaXRtYXBfemFsbG9jX25vZGUoeGRwc3EtXHUwMDNlZGVzY19jb3VudCxcbitcdFx0XHRcdFx0XHQgICBHRlBfS0VSTkVMLFxuK1x0XHRcdFx0XHRcdCAgIGNwdV90b19tZW0oaSAtIHNxcykpO1xuK1x0XHRcdGlmICh4ZHBzcS1cdTAwM2VwZW5kaW5nX21hc2spXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRmb3IgKGludCBqID0gaSAtIDE7IGogXHUwMDNlPSBzcXM7IGotLSkge1xuK1x0XHRcdFx0eGRwc3EgPSB2cG9ydC1cdTAwM2V0eHFzW2pdO1xuK1xuK1x0XHRcdFx0aWYgKGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB4ZHBzcSkpXG4rXHRcdFx0XHRcdGJpdG1hcF9mcmVlKHhkcHNxLVx1MDAzZXBlbmRpbmdfbWFzayk7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdGZvciAodTMyIGogPSAwOyBqIFx1MDAzYyB2cG9ydC1cdTAwM2VudW1feGRwX3R4cTsgaisrKVxuK1x0XHRcdFx0a2ZyZWUodGltZXJzW2pdKTtcbitcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMjIyLDYgKzI0NiwxMiBAQCB2b2lkIGlkcGZfeGRwc3FzX3B1dChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXG4gXHRcdGxpYmV0aF94ZHBzcV9kZWluaXRfdGltZXIoeGRwc3EtXHUwMDNldGltZXIpO1xuIFx0XHRsaWJldGhfeGRwc3FfcHV0KFx1MDAyNnhkcHNxLVx1MDAzZXhkcF9sb2NrLCBkZXYpO1xuIFxuK1x0XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZpZHBmX3hkcF9mYikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgeGRwc3EpKSB7XG4rXHRcdFx0Yml0bWFwX2ZyZWUoeGRwc3EtXHUwMDNlcGVuZGluZ19tYXNrKTtcbitcdFx0XHR4ZHBzcS1cdTAwM2VwZW5kaW5nX21hc2sgPSBOVUxMO1xuK1x0XHR9XG4rXG4gXHRcdGtmcmVlKHhkcHNxLVx1MDAzZXRpbWVyKTtcbiBcdFx0eGRwc3EtXHUwMDNlcmVmaWxscSA9IE5VTEw7XG4gXHRcdGlkcGZfcXVldWVfY2xlYXIoTk9JUlEsIHhkcHNxKTtcbkBAIC0yNTAsNiArMjgwLDY1IEBAIHN0YXRpYyBpbnQgaWRwZl94ZHBfcGFyc2VfY3FlKGNvbnN0IHN0cnVjdCBpZHBmX3NwbGl0cV80Yl90eF9jb21wbF9kZXNjICpkZXNjLFxuIFx0cmV0dXJuIHVwcGVyXzE2X2JpdHModmFsKTtcbiB9XG4gXG4rc3RhdGljIHUzMiBpZHBmX3hkcHNxX3BvbGxfZmIoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxLCB1MzIgYnVkZ2V0KVxuK3tcbitcdHN0cnVjdCBpZHBmX2NvbXBsX3F1ZXVlICpjcSA9IHhkcHNxLVx1MDAzZWNvbXBscTtcbitcdHVuc2lnbmVkIGxvbmcgKm1hc2sgPSB4ZHBzcS1cdTAwM2VwZW5kaW5nX21hc2s7XG4rXHR1MzIgZG9uZV9mcmFtZXMsIHR4X2NudCwgbmV3X250YztcbitcdHUzMiBudGMgPSBjcS1cdTAwM2VuZXh0X3RvX2NsZWFuO1xuK1x0dTMyIGNudCA9IGNxLVx1MDAzZWRlc2NfY291bnQ7XG4rXHRib29sIGdlbjtcbitcbitcdGdlbiA9IGlkcGZfcXVldWVfaGFzKEdFTl9DSEssIGNxKTtcbitcbitcdGZvciAoZG9uZV9mcmFtZXMgPSAwOyBkb25lX2ZyYW1lcyBcdTAwM2MgYnVkZ2V0OyApIHtcbitcdFx0aW50IHJldDtcbitcbitcdFx0cmV0ID0gaWRwZl94ZHBfcGFyc2VfY3FlKFx1MDAyNmNxLVx1MDAzZWNvbXBbbnRjXS5jb21tb24sIGdlbik7XG4rXHRcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4rXHRcdFx0X19jbGVhcl9iaXQocmV0LCBtYXNrKTtcbitcdFx0XHRkb25lX2ZyYW1lcysrO1xuK1xuK1x0XHRcdGdvdG8gbmV4dDtcbitcdFx0fVxuK1xuK1x0XHRzd2l0Y2ggKHJldCkge1xuK1x0XHRjYXNlIC1FTk9EQVRBOlxuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHRjYXNlIC1FSU5WQUw6XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbituZXh0OlxuK1x0XHRpZiAodW5saWtlbHkoKytudGMgPT0gY250KSkge1xuK1x0XHRcdG50YyA9IDA7XG4rXHRcdFx0Z2VuID0gIWdlbjtcbitcdFx0XHRpZHBmX3F1ZXVlX2NoYW5nZShHRU5fQ0hLLCBjcSk7XG4rXHRcdH1cbitcdH1cbitcbitvdXQ6XG4rXHRjcS1cdTAwM2VuZXh0X3RvX2NsZWFuID0gbnRjO1xuK1xuK1x0aWYgKHVubGlrZWx5KCFkb25lX2ZyYW1lcykpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dHhfY250ID0geGRwc3EtXHUwMDNlZGVzY19jb3VudDtcbitcbitcdC8qIERvbid0IGdvIHBhc3QgbmV4dF90b191c2UgKi9cbitcdF9fc2V0X2JpdCh4ZHBzcS1cdTAwM2VuZXh0X3RvX3VzZSwgbWFzayk7XG4rXG4rXHRuZXdfbnRjID0gZmluZF9uZXh0X2JpdChtYXNrLCB0eF9jbnQsIHhkcHNxLVx1MDAzZW5leHRfdG9fY2xlYW4pO1xuK1x0ZG9uZV9mcmFtZXMgPSBuZXdfbnRjIC0geGRwc3EtXHUwMDNlbmV4dF90b19jbGVhbjtcbitcbitcdGlmIChuZXdfbnRjID09IHR4X2NudClcbitcdFx0ZG9uZV9mcmFtZXMgKz0gZmluZF9maXJzdF9iaXQobWFzaywgdHhfY250KTtcbitcbitcdF9fY2xlYXJfYml0KHhkcHNxLVx1MDAzZW5leHRfdG9fdXNlLCBtYXNrKTtcbitcbitcdHJldHVybiBkb25lX2ZyYW1lcztcbit9XG4rXG4gdTMyIGlkcGZfeGRwc3FfcG9sbChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpXG4ge1xuIFx0c3RydWN0IGlkcGZfY29tcGxfcXVldWUgKmNxID0geGRwc3EtXHUwMDNlY29tcGxxO1xuQEAgLTI2MCw2ICszNDksMTAgQEAgdTMyIGlkcGZfeGRwc3FfcG9sbChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpXG4gXHR1MzIgZG9uZV9mcmFtZXM7XG4gXHRib29sIGdlbjtcbiBcbitcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmlkcGZfeGRwX2ZiKSBcdTAwMjZcdTAwMjZcbitcdCAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgeGRwc3EpKVxuK1x0XHRyZXR1cm4gaWRwZl94ZHBzcV9wb2xsX2ZiKHhkcHNxLCBidWRnZXQpO1xuK1xuIFx0Z2VuID0gaWRwZl9xdWV1ZV9oYXMoR0VOX0NISywgY3EpO1xuIFxuIFx0Zm9yIChkb25lX2ZyYW1lcyA9IDA7IGRvbmVfZnJhbWVzIFx1MDAzYyBidWRnZXQ7ICkge1xuQEAgLTQ3OSw2ICs1NzIsMjQgQEAgc3RhdGljIGludCBpZHBmX3hkcF9zZXR1cF9wcm9nKHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCxcbiBcdFx0cmV0dXJuIC1FTk9TUEM7XG4gXHR9XG4gXG4rXHR2cG9ydC1cdTAwM2V4ZHBzcV9mYiA9ICFpZHBmX2lzX2NhcF9lbmEodnBvcnQtXHUwMDNlYWRhcHRlciwgSURQRl9PVEhFUl9DQVBTLFxuK1x0XHRcdFx0XHQgICBWSVJUQ0hOTDJfQ0FQX1NQTElUUV9RU0NIRUQpO1xuK1x0aWYgKCF2cG9ydC1cdTAwM2V4ZHBzcV9mYilcbitcdFx0Z290byByZXNldDtcbitcbitcdGlmIChwcm9nKSB7XG4rXHRcdGJvb2wgd2FybiA9ICFzdGF0aWNfa2V5X2VuYWJsZWQoXHUwMDI2aWRwZl94ZHBfZmIpO1xuK1xuK1x0XHRzdGF0aWNfYnJhbmNoX2luYyhcdTAwMjZpZHBmX3hkcF9mYik7XG4rXG4rXHRcdGlmICh3YXJuIFx1MDAyNlx1MDAyNiBuZXRfcmF0ZWxpbWl0KCkpXG4rXHRcdFx0bmV0ZGV2X3dhcm4odnBvcnQtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdFx0ICAgIFwiVGhlIEZXIGRvZXNuJ3Qgc3VwcG9ydCBUeCBpbiBGSUZPIG1vZGUsIFhEUCBUeCBwZXJmb3JtYW5jZSBtaWdodCBiZSBzdWJvcHRpbWFsXFxuXCIpO1xuK1x0fSBlbHNlIHtcbitcdFx0c3RhdGljX2JyYW5jaF9kZWMoXHUwMDI2aWRwZl94ZHBfZmIpO1xuK1x0fVxuK1xuK3Jlc2V0OlxuIFx0b2xkID0gY2ZnLVx1MDAzZXVzZXJfY29uZmlnLnhkcF9wcm9nO1xuIFx0Y2ZnLVx1MDAzZXVzZXJfY29uZmlnLnhkcF9wcm9nID0gcHJvZztcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaFxuaW5kZXggNjNlNTZmN2Q0M2UwMDIuLjNkMDFjNTM1YmQ0YzYwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaFxuQEAgLTgsNiArOCwxMCBAQFxuIFxuICNpbmNsdWRlIFwiaWRwZl90eHJ4LmhcIlxuIFxuK3N0cnVjdCBpZHBmX3FfdmVjX3JzcmM7XG4rXG4rREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGlkcGZfeGRwX2ZiKTtcbitcbiBpbnQgaWRwZl94ZHBfcnhxX2luZm9faW5pdChzdHJ1Y3QgaWRwZl9yeF9xdWV1ZSAqcnhxKTtcbiBpbnQgaWRwZl94ZHBfcnhxX2luZm9faW5pdF9hbGwoY29uc3Qgc3RydWN0IGlkcGZfcV92ZWNfcnNyYyAqcnNyYyk7XG4gdm9pZCBpZHBmX3hkcF9yeHFfaW5mb19kZWluaXQoc3RydWN0IGlkcGZfcnhfcXVldWUgKnJ4cSwgdTMyIG1vZGVsKTtcbkBAIC0yMSw2ICsyNSwzNCBAQCB2b2lkIGlkcGZfeGRwc3FzX3B1dChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpO1xuIHUzMiBpZHBmX3hkcHNxX3BvbGwoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxLCB1MzIgYnVkZ2V0KTtcbiBib29sIGlkcGZfeGRwX3R4X2ZsdXNoX2J1bGsoc3RydWN0IGxpYmV0aF94ZHBfdHhfYnVsayAqYnEsIHUzMiBmbGFncyk7XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X3htaXRfZmIoc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyBkZXNjLCB1MzIgaSxcbitcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbGliZXRoX3hkcHNxICpzcSwgdTY0IHByaXYpXG4re1xuK1x0c3RydWN0IGlkcGZfZmxleF90eF9zY2hlZF9kZXNjICp0eF9kZXNjID0gc3EtXHUwMDNlZGVzY3M7XG4rXHR1MzIgY21kO1xuK1xuK1x0Y21kID0gRklFTERfUFJFUChJRFBGX1RYRF9GTEVYX0ZMT1dfRFRZUEVfTSxcbitcdFx0XHQgSURQRl9UWF9ERVNDX0RUWVBFX0ZMRVhfRkxPV19TQ0hFKTtcbitcdGlmIChkZXNjLmZsYWdzIFx1MDAyNiBMSUJFVEhfWERQX1RYX0xBU1QpXG4rXHRcdGNtZCB8PSBJRFBGX1RYRF9GTEVYX0ZMT1dfQ01EX0VPUDtcbitcdGlmIChwcml2IFx1MDAyNlx1MDAyNiAoZGVzYy5mbGFncyBcdTAwMjYgTElCRVRIX1hEUF9UWF9DU1VNKSlcbitcdFx0Y21kIHw9IElEUEZfVFhEX0ZMRVhfRkxPV19DTURfQ1NfRU47XG4rXG4rXHR0eF9kZXNjID0gXHUwMDI2dHhfZGVzY1tpXTtcbitcdHR4X2Rlc2MtXHUwMDNlYnVmX2FkZHIgPSBjcHVfdG9fbGU2NChkZXNjLmFkZHIpO1xuK1xuKyNpZmRlZiBfX0xJQkVUSF9XT1JEX0FDQ0VTU1xuK1x0Kih1NjQgKilcdTAwMjZ0eF9kZXNjLVx1MDAzZXF3MSA9ICgodTY0KWRlc2MubGVuIFx1MDAzY1x1MDAzYyA0OCkgfCAoKHU2NClpIFx1MDAzY1x1MDAzYyAzMikgfCBjbWQ7XG4rI2Vsc2VcbitcdHR4X2Rlc2MtXHUwMDNlcXcxLnJ4cl9idWZzaXplID0gY3B1X3RvX2xlMTYoZGVzYy5sZW4pO1xuK1x0dHhfZGVzYy1cdTAwM2VxdzEuY29tcGxfdGFnID0gY3B1X3RvX2xlMTYoaSk7XG4rXHR0eF9kZXNjLVx1MDAzZXF3MS50c1swXSA9IDA7XG4rXHR0eF9kZXNjLVx1MDAzZXF3MS50c1sxXSA9IDA7XG4rXHR0eF9kZXNjLVx1MDAzZXF3MS50c1syXSA9IDA7XG4rXHR0eF9kZXNjLVx1MDAzZXF3MS5jbWRfZHR5cGUgPSBjbWQ7XG4rI2VuZGlmXG4rfVxuK1xuIC8qKlxuICAqIGlkcGZfeGRwX3R4X3htaXQgLSBwcm9kdWNlIGEgc2luZ2xlIEhXIFR4IGRlc2NyaXB0b3Igb3V0IG9mIFhEUCBkZXNjXG4gICogQGRlc2M6IFhEUCBkZXNjcmlwdG9yIHRvIHB1bGwgdGhlIERNQSBhZGRyZXNzIGFuZCBsZW5ndGggZnJvbVxuQEAgLTM0LDYgKzY2LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcF90eF94bWl0KHN0cnVjdCBsaWJldGhfeGRwX3R4X2Rlc2MgZGVzYywgdTMyIGksXG4gXHRzdHJ1Y3QgaWRwZl9mbGV4X3R4X2Rlc2MgKnR4X2Rlc2MgPSBzcS1cdTAwM2VkZXNjcztcbiBcdHUzMiBjbWQ7XG4gXG4rXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZpZHBmX3hkcF9mYikgXHUwMDI2XHUwMDI2XG4rXHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sXG4rXHRcdFx0ICAgbGliZXRoX3hkcHNxX3RvX3NxKHNxLCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSxcbitcdFx0XHRcdFx0ICAgICAgbmV4dF90b191c2UpKSkge1xuK1x0XHRpZHBmX3hkcF90eF94bWl0X2ZiKGRlc2MsIGksIHNxLCBwcml2KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0Y21kID0gRklFTERfUFJFUChJRFBGX0ZMRVhfVFhEX1FXMV9EVFlQRV9NLFxuIFx0XHRcdCBJRFBGX1RYX0RFU0NfRFRZUEVfRkxFWF9MMlRBRzFfTDJUQUcyKTtcbiBcdGlmIChkZXNjLmZsYWdzIFx1MDAyNiBMSUJFVEhfWERQX1RYX0xBU1QpXG5AQCAtNTMsMTAgKzkzLDI3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcF90eF94bWl0KHN0cnVjdCBsaWJldGhfeGRwX3R4X2Rlc2MgZGVzYywgdTMyIGksXG4gI2VuZGlmXG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcHNxX3NldF9yc19mYihjb25zdCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EpXG4re1xuK1x0dTMyIG4gPSBtaW4oeGRwc3EtXHUwMDNlcGVuZGluZywgeGRwc3EtXHUwMDNlZGVzY19jb3VudCAtIHhkcHNxLVx1MDAzZW5leHRfdG9fY2xlYW4pO1xuK1xuK1x0Yml0bWFwX3NldCh4ZHBzcS1cdTAwM2VwZW5kaW5nX21hc2ssIHhkcHNxLVx1MDAzZW5leHRfdG9fY2xlYW4sIG4pO1xuK1xuK1x0biA9IHhkcHNxLVx1MDAzZXBlbmRpbmcgLSBuO1xuK1x0aWYgKG4pXG4rXHRcdGJpdG1hcF9zZXQoeGRwc3EtXHUwMDNlcGVuZGluZ19tYXNrLCAwLCBuKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwc3Ffc2V0X3JzKGNvbnN0IHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSlcbiB7XG4gXHR1MzIgbnR1LCBjbWQ7XG4gXG4rXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZpZHBmX3hkcF9mYikgXHUwMDI2XHUwMDI2XG4rXHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHhkcHNxKSkge1xuK1x0XHRpZHBmX3hkcHNxX3NldF9yc19mYih4ZHBzcSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbiBcdG50dSA9IHhkcHNxLVx1MDAzZW5leHRfdG9fdXNlO1xuIFx0aWYgKHVubGlrZWx5KCFudHUpKVxuIFx0XHRudHUgPSB4ZHBzcS1cdTAwM2VkZXNjX2NvdW50O1xuQEAgLTg0LDcgKzE0MSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcHNxX3VwZGF0ZV90YWlsKGNvbnN0IHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSlcbiAgKiBTZXQgdGhlIFJTIGJpdCAoXCJlbmQgb2YgYmF0Y2hcIiksIGJ1bXAgdGhlIHRhaWwsIGFuZCBxdWV1ZSB0aGUgY2xlYW51cCB0aW1lci5cbiAgKiBUbyBiZSBjYWxsZWQgYWZ0ZXIgYSBOQVBJIHBvbGxpbmcgbG9vcCwgYXQgdGhlIGVuZCBvZiAubmRvX3hkcF94bWl0KCkgZXRjLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcF90eF9maW5hbGl6ZSh2b2lkICpfeGRwc3EsIGJvb2wgc2VudCwgYm9vbCBmbHVzaClcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgaWRwZl94ZHBfdHhfZmluYWxpemUodm9pZCAqX3hkcHNxLCBib29sIHNlbnQsXG4rXHRcdFx0XHRcdFx0IGJvb2wgZmx1c2gpXG4ge1xuIFx0c3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxID0gX3hkcHNxO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xpYmV0aC94ZHAuaCBiL2luY2x1ZGUvbmV0L2xpYmV0aC94ZHAuaFxuaW5kZXggODk4NzIzYWI2MmU4MTIuLmVkNjFkODNiZGEyZDc3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oXG4rKysgYi9pbmNsdWRlL25ldC9saWJldGgveGRwLmhcbkBAIC00MzAsNiArNDMwLDE5IEBAIHN0cnVjdCBsaWJldGhfeGRwc3Ege1xuIFx0c3RydWN0IGxpYmV0aF94ZHBzcV9sb2NrXHQqbG9jaztcbiB9O1xuIFxuKy8qKlxuKyAqIGxpYmV0aF94ZHBzcV90b19zcSAtIGdldCBTUSBwb2ludGVyIGZyb20gYW4gWERQU1EgcG9pbnRlclxuKyAqIEB4ZHBzcTogXHUwMDI2bGliZXRoX3hkcHNxIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHF1ZXVlXG4rICogQHR5cGU6IHR5cGVvZigpIG9mIHRoZSBkcml2ZXIgVHggcXVldWUgc3RydWN0dXJlXG4rICogQG1lbWJlcjogbmFtZSBvZiB0aGUgTlRVIGZpZWxkIGluc2lkZSBAdHlwZVxuKyAqXG4rICogU29tZSBvZiB0aGUgc2VuZGluZyBjYWxsYmFja3MgdGFrZSBvbmx5IFx1MDAyNmxpYmV0aF94ZHBzcSBwb2ludGVyIGFuZCBubyBwb2ludGVyXG4rICogdG8gdGhlIGFjdHVhbCBkcml2ZXIgVHggcXVldWUgc3RydWN0dXJlLiBVc2UgdGhpcyBoZWxwZXIgdG8gcXVpY2tseSBqdW1wIHRvXG4rICogdGhlIGxhdHRlciB3aGVuIG5lZWRlZC5cbisgKi9cbisjZGVmaW5lIGxpYmV0aF94ZHBzcV90b19zcSh4ZHBzcSwgdHlwZSwgbWVtYmVyKVx0XHRcdFx0ICAgICAgXFxcbitcdGNvbnRhaW5lcl9vZl9jb25zdCgoeGRwc3EpLVx1MDAzZW50dSwgdHlwZSwgbWVtYmVyKVxuK1xuIC8qKlxuICAqIHN0cnVjdCBsaWJldGhfeGRwX3R4X2Rlc2MgLSBhYnN0cmFjdGlvbiBmb3IgYW4gWERQIFR4IGRlc2NyaXB0b3JcbiAgKiBAYWRkcjogRE1BIGFkZHJlc3Mgb2YgdGhlIGZyYW1lXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwOToyODozMC40MjU5NDM3MjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjEzODc1MDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSURQRiBYRFAgRmFsbGJhY2sgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBzZWVtcyBsaWtlIGl0IGludHJvZHVjZXMgYSBmYWxsYmFjayBtb2RlIGZvciBYRFAgVHggaW4gdGhlIEludGVsIElEUEYgZHJpdmVyLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQncyB0b3VjaGluZyBgaWRwZl90eHJ4LmNgLCBgaWRwZl90eHJ4LmhgLCBgeGRwLmNgLCBgeGRwLmhgLCBhbmQgYGluY2x1ZGUvbmV0L2xpYmV0aC94ZHAuaGAsIHNvIGl0J3MgZGVmaW5pdGVseSBkaWdnaW5nIGludG8gdGhlIGNvcmUgWERQIFR4IHBhdGggZm9yIHRoaXMgZHJpdmVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHdlIGFjdHVhbGx5ICpyZWFjaCogdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJRFBGLCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgaXMgdGhlIFwiSW50ZWwgQ29yZSBOSUMgRmFtaWx5XCIgZHJpdmVyIOKAkyBhIFBDSSBkZXZpY2UgZHJpdmVyLlxuXG5UaGUgcmVhbCBxdWVzdGlvbiBpcywgY2FuIHdlIHJlYWxpc3RpY2FsbHkgZW11bGF0ZSBvciBmdXp6IHRoaXM/IFN0YW5kYXJkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIHR5cGljYWxseSBkb24ndCBleHBvc2UgUENJIGRldmljZXMgdW5sZXNzIHRoZXkncmUgZXhwbGljaXRseSBlbXVsYXRlZC4gU3l6a2FsbGVyICpkb2VzKiBoYXZlIHNvbWUgc3VwcG9ydCBmb3IgZnV6emluZyBQQ0kgZGV2aWNlcyB2aWEgdlBDSSBvciBzaW1pbGFyLCBidXQgdGhlIHJlYWwgYmVuZWZpdCBpcyBpbiBkcml2ZXJzIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCB0aHJvdWdoIHNvZnR3YXJlIGludGVyZmFjZXMgb3IgaGF2ZSBhbiBlbXVsYXRvci4gRm9yIHRoaXMgY2FzZSwgSSdkIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBpcyBhIHdheSB0byBpbnN0YW50aWF0ZSBvbmUsIHNpbmNlIElEUEYgaXMgdHlwaWNhbGx5IGEgcGh5c2ljYWwgTklDIGRyaXZlci5cblxuSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGFuIElEUEYgZW11bGF0b3IgaXMgYXZhaWxhYmxlIG9yIGlmIGl0J3MgcHVyZWx5IGhhcmR3YXJlLiBXYWl0LCBsZXQgbWUgY2hlY2sg4oCTIGlzIElEUEYgZXZlbiBhIHZpcnR1YWwgZGV2aWNlPyBcIkludGVsIEluZnJhc3RydWN0dXJlIERhdGEgUGxhbmUgRnVuY3Rpb24sXCIgdGhhdCBjb3VsZCBiZSBlaXRoZXIuIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDc5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDk6Mjg6MzcuNjM5ODIxMTk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDcyMjY0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSURQRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWc6NDpjb25maWcgSURQRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZy01LVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24gU3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZz0xNz1pZiBJRFBGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnLTE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZzoxOTpjb25maWcgSURQRl9TSU5HTEVRXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnLTIwLVxcdGJvb2wgXFxcImlkcGYgc2luZ2xlcSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwOToyODozNy43NzQ1NTEwODRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTg1MTU4Mjc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBJRFBGIEtjb25maWcqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgY3JhY2sgb3BlbiB0aGUgS2NvbmZpZyBmb3IgSURQRiBhbmQgc2VlIHdoYXQgZ29vZGllcyBhcmUgaGlkZGVuIHdpdGhpbi5cIiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgaW1wbGllZCBnb2FscyBoZXJlOiBpcyB0aGlzIGEgc3BlY2lmaWMgbW9kdWxlPyBPciBhbiBvdmVyYXJjaGluZyBjb25maWd1cmF0aW9uIHNjaGVtZT8gR2l2ZW4gbXkgYmFja2dyb3VuZCwgSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjb3JlIG9mIHRoZSBjb25maWd1cmF0aW9uIGZvciBhIHBhcnRpY3VsYXIgSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBQbGF0Zm9ybSBGcmFtZXdvcmsgKElEUEYpLCBvciBhIHNpbWlsYXIgc3lzdGVtLiBJIHdhbnQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBleHBvc2VkIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBwb3RlbnRpYWwgZmVhdHVyZSBmbGFncyB0aGF0IGFyZSByZWxldmFudCB0byBteSBjdXJyZW50IHByb2plY3QuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBzdXBwb3J0ZWQgaGFyZHdhcmUgdGFyZ2V0cywgdGhlIGF2YWlsYWJsZSBzZWN1cml0eSBmZWF0dXJlcywgYW5kIGhvdyBtb2R1bGFyIHRoZSBJRFBGIGlzLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgS2NvbmZpZyBmaWxlIGlzIGdvaW5nIHRvIGJlIHBhcmFtb3VudCB0byBhbnkga2luZCBvZiBlZmZlY3RpdmUgaW1wbGVtZW50YXRpb24gb3IgY3VzdG9taXphdGlvbiwgc28gbGV0J3MgZ2V0IHRvIHdvcmsgYW5kIHVuZGVyc3RhbmQgdGhlIG9wdGlvbnMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNTYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwOToyODo0OS42MjYxMzY0MTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCMgQ29weXJpZ2h0IChDKSAyMDI0IEludGVsIENvcnBvcmF0aW9uXFxuICAgMzpcXHRcXG4gICA0OlxcdGNvbmZpZyBJRFBGXFxuICAgNTpcXHRcXHR0cmlzdGF0ZSBcXFwiSW50ZWwoUikgSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQYXRoIEZ1bmN0aW9uIFN1cHBvcnRcXFwiXFxuICAgNjpcXHRcXHRkZXBlbmRzIG9uIFBDSV9NU0lcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gICA4OlxcdFxcdHNlbGVjdCBESU1MSUJcXG4gICA5OlxcdFxcdHNlbGVjdCBMSUJFVEhfWERQXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEludGVsKFIpIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvblxcbiAgMTI6XFx0XFx0ICBkZXZpY2VzLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcXG4gIDE1OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgaWRwZi5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0aWYgSURQRlxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgSURQRl9TSU5HTEVRXFxuICAyMDpcXHRcXHRib29sIFxcXCJpZHBmIHNpbmdsZXEgc3VwcG9ydFxcXCJcXG4gIDIxOlxcdFxcdGhlbHBcXG4gIDIyOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsZWdhY3kgc2luZ2xlIFJ4L1R4IHF1ZXVlcyB3L25vXFxuICAyMzpcXHRcXHQgIGNvbXBsZXRpb24gYW5kIGZpbGwgcXVldWVzLiBPbmx5IGVuYWJsZSBpZiB5b3UgaGF2ZSBoYXJkd2FyZSB3aGljaFxcbiAgMjQ6XFx0XFx0ICB3YW50cyB0byB3b3JrIGluIHRoaXMgbW9kZSBhcyBpdCBpbmNyZWFzZXMgdGhlIGRyaXZlciBzaXplIGFuZCBhZGRzXFxuICAyNTpcXHRcXHQgIHJ1bnRtZSBjaGVja3Mgb24gaG90cGF0aC5cXG4gIDI2OlxcdFxcbiAgMjc6XFx0ZW5kaWYgIyBJRFBGXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA5OjI4OjQ5LjYyNjIzMDc4MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNjI0MjAyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBhIFBDSSBEZXZpY2UgRHJpdmVyOiBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIFBDSSBkZXZpY2UgZHJpdmVyLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGluIG15IG1pbmQsIGFzIGFsd2F5cywgaXMgd2hldGhlciBvciBub3QgdGhpcyBjYW4gYmUgZWZmZWN0aXZlbHkgZnV6emVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFdpdGggbXkgZXhwZXJpZW5jZSwgSSBrbm93IHRoYXQgdGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycywgdGhvc2UgdGhhdCAqZGVtYW5kKiBhIHJlYWwgUENJIGRldmljZSBhbmQgZG9uJ3QgaGF2ZSBhIHJlbGlhYmxlIGVtdWxhdG9yIHdpdGhpbiBRRU1VIG9yIHN5emthbGxlciwgYXJlIHR5cGljYWxseSBhIHBhaW4uIFRoZSBgcHJvYmVgIGZ1bmN0aW9uIGp1c3Qgd29uJ3Qgc3VjY2VlZCwgYW5kLCBjb25zZXF1ZW50bHksIHRoZSBuZXR3b3JrIGRldmljZSAobmV0ZGV2KSBpdCdzIHRyeWluZyB0byByZWdpc3RlciB3aWxsIG5ldmVyIGFwcGVhci4gSXQncyBhIGRlYWQgZW5kLCBnZW5lcmFsbHkuXG5cblNvLCB0aGUgbmV4dCBvYnZpb3VzIGNoZWNrIGlzIHdoZXRoZXIgdGhlcmUncyBhbiBlbXVsYXRvciBmb3IgdGhpcyBzcGVjaWZpYyB0eXBlIG9mIGRldmljZSDigJMgYW4gSURQRiBlbXVsYXRvciDigJMgd2l0aGluIFFFTVUuIEkgKnRoaW5rKiBJIHJlY2FsbCBsb29raW5nIGZvciBzb21ldGhpbmcgbGlrZSB0aGF0IGJlZm9yZSwgYW5kIEkgZG9uJ3QgcmVjYWxsIGl0IGV4aXN0aW5nLiBCdXQgaXQncyB3b3J0aCBkb3VibGUtY2hlY2tpbmcuIElmIFFFTVUgaXMgYSBkZWFkIGVuZCwgdGhlIG5leHQgcGxhY2UgdG8gbG9vayBpcyBzeXprYWxsZXIuIERvZXMgc3l6a2FsbGVyIG9mZmVyIGFueSBzcGVjaWFsaXplZCBzdXBwb3J0IGZvciBJRFBGIHRoYXQgSSdtIG92ZXJsb29raW5nPyBUaGF0IHdvdWxkIGJlIGEgaHVnZSB0aW1lIHNhdmVyLiBJdOKAmXMgdGhlIG9idmlvdXMgcm91dGUgdG8gc3VjY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk2MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA5OjI4OjU2Ljk4ODY1MzAxNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDgwOTQzODkwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZHBmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDk6Mjg6NTkuMDY5NjE2MDQzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg5ODc5ODQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyB0aGUgSURQRiBEcml2ZXI6IEEgRnV6emluZyBQZXJzcGVjdGl2ZSoqXG5cbk9rYXksIGxldCdzIHNlZSBob3cgd2UgY2FuIGdldCB0byB0aGlzIGNvZGUuIEl0J3MgYnVyaWVkIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2AuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBpdCdzIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSBzdGFuZGFyZCBmdXp6aW5nIHNldHVwLiBJZiB0aGVyZSdzIG5vIGhhcmR3YXJlIHByZXNlbnQsIHRoZSBkcml2ZXIgd2lsbCBzaW1wbHkgc2l0IHRoZXJlLCBpbmVydC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBzZWUgaWYgc3l6a2FsbGVyIGhhcyBzb21lIGtpbmQgb2YgaG9vaywgbWF5YmUgc29tZXRoaW5nIGxpa2UgYHN5el9wY2lfZGV2aWNlYCB0byB0cmlnZ2VyIGl0LiBJIHJlbWVtYmVyIGl0IGhhcyBhIGJ1bmNoIG9mIGhvb2tzIGZvciBkaWZmZXJlbnQgc3Vic3lzdGVtcyBsaWtlIFVTQiAoYHN5el91c2JfY29ubmVjdGApLCA4MDIuMTEgKGBzeXpfODAyMTFfaW5qZWN0X2ZyYW1lYCksIGdlbmV0bGluayAoYHN5el9nZW5ldGxpbmtfZ2V0X2ZhbWlseWApLCBhbmQgbW91bnRpbmcgaW1hZ2VzIChgc3l6X21vdW50X2ltYWdlYCkuIEJ1dCwgZG9lcyBzeXprYWxsZXIgaGF2ZSBhbiBleHBsaWNpdCBwcmltaXRpdmUgZm9yIFBDSSBkZXZpY2VzPyBXYWl0LCAqZG9lcyogc3l6a2FsbGVyIGhhdmUgYHN5el9wY2lfZGV2aWNlYD8gTm8sIHRoYXQncyBub3QgcmlnaHQuIGBzeXpfa3ZtX3NldHVwX2NwdWAgaXMgYXMgY2xvc2UgYXMgaXQgZ2V0cy4gT2theSwgd2FpdCwgKmRvZXMqIHN5emthbGxlciBoYXZlIGBzeXpfcGNpX2RldmljZWA/IE5vLCBpdCBkb2Vzbid0LlxuXG5JdCAqZG9lcyogZnV6eiBzb21lIFBDSSBkcml2ZXJzIGlmIHRoZXkgYXJlIGV4cG9zZWQgdGhyb3VnaCBzb21lIHZpcnR1YWwgYnVzLCBidXQgdGhhdCdzIHVzdWFsbHkgbm90IHRoZSBjYXNlLiBMZXQgbWUgZG91YmxlLWNoZWNrIC0gZG9lcyBzeXprYWxsZXIgaGF2ZSBhIGBzeXpfcGNpX2RldmljZWA/IE5vcGUsIG5vdGhpbmcuXG5cbkFoLCByaWdodCwgdGhlIHByb21wdC4gSSBoYXZlIHRvIGNvbnNpZGVyIHRoaXM6IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczogLi4uIC0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXCJcblxuVGhlIElEUEYgaXMgYW4gKmFjdHVhbCogSW50ZWwgTklDOyBpdCdzIGEgcGh5c2ljYWwgZGV2aWNlLiBBbmQgUUVNVSwgaW4gYSBzdGFuZGFyZCBzZXR1cCAob3IgR0NFIGZvciB0aGF0IG1hdHRlcikgZG9lc24ndCBlbXVsYXRlIHRoZSBJRFBGLiBXZSdyZSB0YWxraW5nIGFib3V0IGEgaGFyZHdhcmUgZGV2aWNlIGxpa2UgSW50ZWwncyBJUFUgKEluZnJhc3RydWN0dXJlIFByb2Nlc3NpbmcgVW5pdCkgXCJNb3VudCBFdmFucy5cIiBUaGlzIGlzbid0IGxpa2UgYW4gZTEwMDAgb3IgdmlydGlvLW5ldCwgb3IgZXZlbiBhIHNvZnR3YXJlLWVtdWxhdGVkIFVTQiBnYWRnZXQuIFFFTVUgZG9lcyBlbXVsYXRlIHNvbWUgTklDcywgYnV0IG5vdCBJRFBGOyBpdCBlbXVsYXRlcyB0aGluZ3MgbGlrZSBlMTAwMCwgZTEwMDBlLCBpZ2IsIHJ0bDgxMzksIHBjbmV0LCBuZTJrX3BjaSwgdm14bmV0MywgdmlydGlvLW5ldCwgdHVsaXAuIFNvLCBhbnkgY29kZSBzcGVjaWZpYyB0byBJRFBGIGlzIGVmZmVjdGl2ZWx5IHVucmVhY2hhYmxlIGluIHRob3NlIGVudmlyb25tZW50cy4gSXMgdGhlcmUgYSB2aXJ0dWFsIGJ1cz8gTm8sIElEUEYgaXMgaGFyZHdhcmUgc3BlY2lmaWMuXG5cblRoZXJlZm9yZSwgSSdtIGNvbmNsdWRpbmcgdGhhdCB0aGlzIHBhdGNoIGlzbid0IFdvcnRoRnV6emluZy4gVGhlIGNvZGUgcGF0aHMgYXJlICppbXBvc3NpYmxlKiB0byBoaXQgaW4gYSBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudCBiZWNhdXNlIHRoZSBJRFBGIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHRoYXQgaXNuJ3QgZW11bGF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNzUsIk91dHB1dFRva2VucyI6OTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDk6Mjk6MDguOTY4NDE2NDM5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIElEUEYgKEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbikgZHJpdmVyLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIG5ldHdvcmsgZHJpdmVyIGZvciBJbnRlbCBJUFVzLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBoYXJkd2FyZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSBvciBHQ0UpLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgSURQRiAoSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQYXRoIEZ1bmN0aW9uKSBkcml2ZXIuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgbmV0d29yayBkcml2ZXIgZm9yIEludGVsIElQVXMuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIGhhcmR3YXJlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VIG9yIEdDRSksIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow2wk2f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-09 09:02:27 +0000 UTC FinishedAt: 2026-07-09 09:29:10 +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+CgkJCTx0ZD4yMDI2LzA3LzA5IDA5OjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBJRFBGIChJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24pIGRyaXZlci4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBuZXR3b3JrIGRyaXZlciBmb3IgSW50ZWwgSVBVcy4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUgb3IgR0NFKSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwOToyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDViMzljY2JkMzQ2OWQwM2ZkMzBlZmQ2MGNkMWI3ZmM3NzBhNzQ4NzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCA5IDA5OjI4OjI4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmhcbmluZGV4IGVjMWI3NWYwMzliYjI1Li41NDE0YmJiZWUwN2FkZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaFxuQEAgLTM4NCw2ICYjNDM7Mzg0LDcgQEAgc3RydWN0IGlkcGZfdnBvcnQge1xuIFx0c3RydWN0IGlkcGZfdHhfcXVldWUgKip0eHFzO1xuIFx0dTE2IG51bV90eHE7XG4gXHR1MTYgbnVtX3hkcF90eHE7XG4mIzQzO1x0Ym9vbCB4ZHBzcV9mYjtcbiBcdGJvb2wgeGRwc3Ffc2hhcmU7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXG5pbmRleCA3ZjkwNTY0MDRmNjRmYy4uNjQ3MmJmZjljZWIzN2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXG5AQCAtMjI3LDcgJiM0MzsyMjcsNyBAQCBzdGF0aWMgaW50IGlkcGZfdHhfZGVzY19hbGxvYyhjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQsXG4gXG4gXHRpZHBmX3hza19zZXR1cF9xdWV1ZSh2cG9ydCwgdHhfcSwgVklSVENITkwyX1FVRVVFX1RZUEVfVFgpO1xuIFxuLVx0aWYgKCFpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhfcSkpXG4mIzQzO1x0aWYgKCFpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhfcSkgfHwgaWRwZl9xdWV1ZV9oYXMoWERQLCB0eF9xKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRyZWZpbGxxID0gdHhfcS1cdTAwM2VyZWZpbGxxO1xuQEAgLTEwNTUsNiAmIzQzOzEwNTUsMTEgQEAgc3RhdGljIHZvaWQgaWRwZl9jbGVhbl9xdWV1ZV9zZXQoY29uc3Qgc3RydWN0IGlkcGZfcXVldWVfc2V0ICpxcylcbiBcdFx0XHRpZiAoaWRwZl9xdWV1ZV9oYXMoWERQLCBxLVx1MDAzZXR4cSkpIHtcbiBcdFx0XHRcdHEtXHUwMDNldHhxLVx1MDAzZXBlbmRpbmcgPSAwO1xuIFx0XHRcdFx0cS1cdTAwM2V0eHEtXHUwMDNleGRwX3R4ID0gMDtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2aWRwZl94ZHBfZmIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdCAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgcS1cdTAwM2V0eHEpKVxuJiM0MztcdFx0XHRcdFx0Yml0bWFwX3plcm8ocS1cdTAwM2V0eHEtXHUwMDNlcGVuZGluZ19tYXNrLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgcS1cdTAwM2V0eHEtXHUwMDNlZGVzY19jb3VudCk7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdHEtXHUwMDNldHhxLVx1MDAzZXR4cV9ncnAtXHUwMDNlbnVtX2NvbXBsZXRpb25zX3BlbmRpbmcgPSAwO1xuIFx0XHRcdH1cbkBAIC0xMzE3LDcgJiM0MzsxMzIyLDggQEAgc3RhdGljIHZvaWQgaWRwZl90eHFfZ3JvdXBfcmVsKHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMpXG4gXHRcdFx0aWYgKCF0eHFfZ3JwLVx1MDAzZXR4cXNbal0pXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRpZiAoaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHR4cV9ncnAtXHUwMDNldHhxc1tqXSkpIHtcbiYjNDM7XHRcdFx0aWYgKGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB0eHFfZ3JwLVx1MDAzZXR4cXNbal0pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgIWlkcGZfcXVldWVfaGFzKFhEUCwgdHhxX2dycC1cdTAwM2V0eHFzW2pdKSkge1xuIFx0XHRcdFx0a2ZyZWUodHhxX2dycC1cdTAwM2V0eHFzW2pdLVx1MDAzZXJlZmlsbHEpO1xuIFx0XHRcdFx0dHhxX2dycC1cdTAwM2V0eHFzW2pdLVx1MDAzZXJlZmlsbHEgPSBOVUxMO1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxuaW5kZXggNGJlNWIzYjZkM2VkMmIuLjdlYmU1OWQ4MWUxNzA3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxuQEAgLTYyNSwxMSAmIzQzOzYyNSwxMiBAQCBsaWJldGhfY2FjaGVsaW5lX3NldF9hc3NlcnQoc3RydWN0IGlkcGZfcnhfcXVldWUsXG4gICogQGNsZWFuX2J1ZGdldDogc2luZ2xlcSBvbmx5LCBxdWV1ZSBjbGVhbmluZyBidWRnZXRcbiAgKiBAY2xlYW5lZF9wa3RzOiBOdW1iZXIgb2YgcGFja2V0cyBjbGVhbmVkIGZvciB0aGUgYWJvdmUgc2FpZCBjYXNlXG4gICogQHJlZmlsbHE6IFBvaW50ZXIgdG8gcmVmaWxsIHF1ZXVlXG4mIzQzOyAqIEBjYWNoZWRfdHN0YW1wX2NhcHM6IFR4IHRpbWVzdGFtcCBjYXBhYmlsaXRpZXMgbmVnb3RpYXRlZCB3aXRoIHRoZSBDUFxuICAqIEBwZW5kaW5nOiBudW1iZXIgb2YgcGVuZGluZyBkZXNjcmlwdG9ycyB0byBzZW5kIGluIFFCXG4gICogQHhkcF90eDogbnVtYmVyIG9mIHBlbmRpbmcgXHUwMDI2eGRwX2J1ZmYgb3IgXHUwMDI2eGRwX2ZyYW1lIGJ1ZmZlcnNcbiAgKiBAdGltZXI6IHRpbWVyIGZvciBYRFAgVHggcXVldWUgY2xlYW51cFxuICAqIEB4ZHBfbG9jazogbG9jayBmb3IgWERQIFR4IHF1ZXVlcyBzaGFyaW5nXG4tICogQGNhY2hlZF90c3RhbXBfY2FwczogVHggdGltZXN0YW1wIGNhcGFiaWxpdGllcyBuZWdvdGlhdGVkIHdpdGggdGhlIENQXG4mIzQzOyAqIEBwZW5kaW5nX21hc2s6IG1hc2sgb2YgYnVmZmVycyB3YWl0aW5nIGZvciBjb21wbGV0aW9uIGluIHRoZSBGQiBYRFAgbW9kZVxuICAqIEB0c3RhbXBfdGFzazogV29yayB0aGF0IGhhbmRsZXMgVHggdGltZXN0YW1wIHJlYWRcbiAgKiBAc3RhdHNfc3luYzogU2VlIHN0cnVjdCB1NjRfc3RhdHNfc3luY1xuICAqIEBxX3N0YXRzOiBTZWUgdW5pb24gaWRwZl90eF9xdWV1ZV9zdGF0c1xuQEAgLTY4OSw2ICYjNDM7NjkwLDggQEAgc3RydWN0IGlkcGZfdHhfcXVldWUge1xuIFx0XHRcdHUxNiBjbGVhbmVkX3BrdHM7XG4gXG4gXHRcdFx0c3RydWN0IGlkcGZfc3dfcXVldWUgKnJlZmlsbHE7XG4mIzQzO1xuJiM0MztcdFx0XHRzdHJ1Y3QgaWRwZl9wdHBfdnBvcnRfdHhfdHN0YW1wX2NhcHMgKmNhY2hlZF90c3RhbXBfY2FwcztcbiBcdFx0fTtcbiBcdFx0c3RydWN0IHtcbiBcdFx0XHR1MzIgcGVuZGluZztcbkBAIC02OTYsMTAgJiM0Mzs2OTksMTEgQEAgc3RydWN0IGlkcGZfdHhfcXVldWUge1xuIFxuIFx0XHRcdHN0cnVjdCBsaWJldGhfeGRwc3FfdGltZXIgKnRpbWVyO1xuIFx0XHRcdHN0cnVjdCBsaWJldGhfeGRwc3FfbG9jayB4ZHBfbG9jaztcbiYjNDM7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGxvbmcgKnBlbmRpbmdfbWFzaztcbiBcdFx0fTtcbiBcdH07XG4gXG4tXHRzdHJ1Y3QgaWRwZl9wdHBfdnBvcnRfdHhfdHN0YW1wX2NhcHMgKmNhY2hlZF90c3RhbXBfY2FwcztcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCAqdHN0YW1wX3Rhc2s7XG4gXG4gXHRzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgc3RhdHNfc3luYztcbkBAIC03MTgsOCAmIzQzOzcyMiw3IEBAIHN0cnVjdCBpZHBmX3R4X3F1ZXVlIHtcbiBcdF9fY2FjaGVsaW5lX2dyb3VwX2VuZF9hbGlnbmVkKGNvbGQpO1xuIH07XG4gbGliZXRoX2NhY2hlbGluZV9zZXRfYXNzZXJ0KHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCA2NCxcbi1cdFx0XHQgICAgMTA0ICYjNDM7XG4tXHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCBjYWNoZWRfdHN0YW1wX2NhcHMpIC1cbiYjNDM7XHRcdFx0ICAgIDk2ICYjNDM7IG9mZnNldG9mKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCB0c3RhbXBfdGFzaykgLVxuIFx0XHRcdCAgICBvZmZzZXRvZmVuZChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgdGltZXIpICYjNDM7XG4gXHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCBxX3N0YXRzKSAtXG4gXHRcdFx0ICAgIG9mZnNldG9mZW5kKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCB0c3RhbXBfdGFzayksXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmNcbmluZGV4IGNiY2NkNDU0Njc2ODE2Li44YTRlMGExMzM2NGRmYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmNcbkBAIC03LDYgJiM0Mzs3LDggQEBcbiAjaW5jbHVkZSBcJiMzNDt4ZHAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hzay5oXCYjMzQ7XG4gXG4mIzQzO0RFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGlkcGZfeGRwX2ZiKTtcbiYjNDM7XG4gc3RhdGljIGludCBpZHBmX3J4cV9mb3JfZWFjaChjb25zdCBzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjICpyc3JjLFxuIFx0XHRcdCAgICAgaW50ICgqZm4pKHN0cnVjdCBpZHBmX3J4X3F1ZXVlICpyeHEsIHZvaWQgKmFyZyksXG4gXHRcdFx0ICAgICB2b2lkICphcmcpXG5AQCAtMTgzLDggJiM0MzsxODUsOCBAQCBpbnQgaWRwZl94ZHBzcXNfZ2V0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydClcbiBcdFx0a2ZyZWUoeGRwc3EtXHUwMDNlcmVmaWxscSk7XG4gXHRcdHhkcHNxLVx1MDAzZXJlZmlsbHEgPSBOVUxMO1xuIFxuLVx0XHRpZHBmX3F1ZXVlX2NsZWFyKEZMT1dfU0NIX0VOLCB4ZHBzcSk7XG4tXHRcdGlkcGZfcXVldWVfY2xlYXIoRkxPV19TQ0hfRU4sIHhkcHNxLVx1MDAzZWNvbXBscSk7XG4mIzQzO1x0XHRpZHBmX3F1ZXVlX2Fzc2lnbihGTE9XX1NDSF9FTiwgeGRwc3EsIHZwb3J0LVx1MDAzZXhkcHNxX2ZiKTtcbiYjNDM7XHRcdGlkcGZfcXVldWVfYXNzaWduKEZMT1dfU0NIX0VOLCB4ZHBzcS1cdTAwM2Vjb21wbHEsIHZwb3J0LVx1MDAzZXhkcHNxX2ZiKTtcbiBcdFx0aWRwZl9xdWV1ZV9zZXQoTk9JUlEsIHhkcHNxKTtcbiBcdFx0aWRwZl9xdWV1ZV9zZXQoWERQLCB4ZHBzcSk7XG4gXHRcdGlkcGZfcXVldWVfc2V0KFhEUCwgeGRwc3EtXHUwMDNlY29tcGxxKTtcbkBAIC0xOTcsNiAmIzQzOzE5OSwyOCBAQCBpbnQgaWRwZl94ZHBzcXNfZ2V0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydClcbiBcdFx0eGRwc3EtXHUwMDNlcGVuZGluZyA9IDA7XG4gXHRcdHhkcHNxLVx1MDAzZXhkcF90eCA9IDA7XG4gXHRcdHhkcHNxLVx1MDAzZXRocmVzaCA9IGxpYmV0aF94ZHBfcXVldWVfdGhyZXNob2xkKHhkcHNxLVx1MDAzZWRlc2NfY291bnQpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmlkcGZfeGRwX2ZiKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgeGRwc3EpKSB7XG4mIzQzO1x0XHRcdHhkcHNxLVx1MDAzZXBlbmRpbmdfbWFzayA9XG4mIzQzO1x0XHRcdFx0Yml0bWFwX3phbGxvY19ub2RlKHhkcHNxLVx1MDAzZWRlc2NfY291bnQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIEdGUF9LRVJORUwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIGNwdV90b19tZW0oaSAtIHNxcykpO1xuJiM0MztcdFx0XHRpZiAoeGRwc3EtXHUwMDNlcGVuZGluZ19tYXNrKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0Zm9yIChpbnQgaiA9IGkgLSAxOyBqIFx1MDAzZT0gc3FzOyBqLS0pIHtcbiYjNDM7XHRcdFx0XHR4ZHBzcSA9IHZwb3J0LVx1MDAzZXR4cXNbal07XG4mIzQzO1xuJiM0MztcdFx0XHRcdGlmIChpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgeGRwc3EpKVxuJiM0MztcdFx0XHRcdFx0Yml0bWFwX2ZyZWUoeGRwc3EtXHUwMDNlcGVuZGluZ19tYXNrKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0Zm9yICh1MzIgaiA9IDA7IGogXHUwMDNjIHZwb3J0LVx1MDAzZW51bV94ZHBfdHhxOyBqJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0XHRrZnJlZSh0aW1lcnNbal0pO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0yMjIsNiAmIzQzOzI0NiwxMiBAQCB2b2lkIGlkcGZfeGRwc3FzX3B1dChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXG4gXHRcdGxpYmV0aF94ZHBzcV9kZWluaXRfdGltZXIoeGRwc3EtXHUwMDNldGltZXIpO1xuIFx0XHRsaWJldGhfeGRwc3FfcHV0KFx1MDAyNnhkcHNxLVx1MDAzZXhkcF9sb2NrLCBkZXYpO1xuIFxuJiM0MztcdFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2aWRwZl94ZHBfZmIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB4ZHBzcSkpIHtcbiYjNDM7XHRcdFx0Yml0bWFwX2ZyZWUoeGRwc3EtXHUwMDNlcGVuZGluZ19tYXNrKTtcbiYjNDM7XHRcdFx0eGRwc3EtXHUwMDNlcGVuZGluZ19tYXNrID0gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGtmcmVlKHhkcHNxLVx1MDAzZXRpbWVyKTtcbiBcdFx0eGRwc3EtXHUwMDNlcmVmaWxscSA9IE5VTEw7XG4gXHRcdGlkcGZfcXVldWVfY2xlYXIoTk9JUlEsIHhkcHNxKTtcbkBAIC0yNTAsNiAmIzQzOzI4MCw2NSBAQCBzdGF0aWMgaW50IGlkcGZfeGRwX3BhcnNlX2NxZShjb25zdCBzdHJ1Y3QgaWRwZl9zcGxpdHFfNGJfdHhfY29tcGxfZGVzYyAqZGVzYyxcbiBcdHJldHVybiB1cHBlcl8xNl9iaXRzKHZhbCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdTMyIGlkcGZfeGRwc3FfcG9sbF9mYihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWRwZl9jb21wbF9xdWV1ZSAqY3EgPSB4ZHBzcS1cdTAwM2Vjb21wbHE7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyAqbWFzayA9IHhkcHNxLVx1MDAzZXBlbmRpbmdfbWFzaztcbiYjNDM7XHR1MzIgZG9uZV9mcmFtZXMsIHR4X2NudCwgbmV3X250YztcbiYjNDM7XHR1MzIgbnRjID0gY3EtXHUwMDNlbmV4dF90b19jbGVhbjtcbiYjNDM7XHR1MzIgY250ID0gY3EtXHUwMDNlZGVzY19jb3VudDtcbiYjNDM7XHRib29sIGdlbjtcbiYjNDM7XG4mIzQzO1x0Z2VuID0gaWRwZl9xdWV1ZV9oYXMoR0VOX0NISywgY3EpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGRvbmVfZnJhbWVzID0gMDsgZG9uZV9mcmFtZXMgXHUwMDNjIGJ1ZGdldDsgKSB7XG4mIzQzO1x0XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGlkcGZfeGRwX3BhcnNlX2NxZShcdTAwMjZjcS1cdTAwM2Vjb21wW250Y10uY29tbW9uLCBnZW4pO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2U9IDApIHtcbiYjNDM7XHRcdFx0X19jbGVhcl9iaXQocmV0LCBtYXNrKTtcbiYjNDM7XHRcdFx0ZG9uZV9mcmFtZXMmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdFx0Z290byBuZXh0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHN3aXRjaCAocmV0KSB7XG4mIzQzO1x0XHRjYXNlIC1FTk9EQVRBOlxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdGNhc2UgLUVJTlZBTDpcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztuZXh0OlxuJiM0MztcdFx0aWYgKHVubGlrZWx5KCYjNDM7JiM0MztudGMgPT0gY250KSkge1xuJiM0MztcdFx0XHRudGMgPSAwO1xuJiM0MztcdFx0XHRnZW4gPSAhZ2VuO1xuJiM0MztcdFx0XHRpZHBmX3F1ZXVlX2NoYW5nZShHRU5fQ0hLLCBjcSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGNxLVx1MDAzZW5leHRfdG9fY2xlYW4gPSBudGM7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSghZG9uZV9mcmFtZXMpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHR4X2NudCA9IHhkcHNxLVx1MDAzZWRlc2NfY291bnQ7XG4mIzQzO1xuJiM0MztcdC8qIERvbiYjMzk7dCBnbyBwYXN0IG5leHRfdG9fdXNlICovXG4mIzQzO1x0X19zZXRfYml0KHhkcHNxLVx1MDAzZW5leHRfdG9fdXNlLCBtYXNrKTtcbiYjNDM7XG4mIzQzO1x0bmV3X250YyA9IGZpbmRfbmV4dF9iaXQobWFzaywgdHhfY250LCB4ZHBzcS1cdTAwM2VuZXh0X3RvX2NsZWFuKTtcbiYjNDM7XHRkb25lX2ZyYW1lcyA9IG5ld19udGMgLSB4ZHBzcS1cdTAwM2VuZXh0X3RvX2NsZWFuO1xuJiM0MztcbiYjNDM7XHRpZiAobmV3X250YyA9PSB0eF9jbnQpXG4mIzQzO1x0XHRkb25lX2ZyYW1lcyAmIzQzOz0gZmluZF9maXJzdF9iaXQobWFzaywgdHhfY250KTtcbiYjNDM7XG4mIzQzO1x0X19jbGVhcl9iaXQoeGRwc3EtXHUwMDNlbmV4dF90b191c2UsIG1hc2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZG9uZV9mcmFtZXM7XG4mIzQzO31cbiYjNDM7XG4gdTMyIGlkcGZfeGRwc3FfcG9sbChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpXG4ge1xuIFx0c3RydWN0IGlkcGZfY29tcGxfcXVldWUgKmNxID0geGRwc3EtXHUwMDNlY29tcGxxO1xuQEAgLTI2MCw2ICYjNDM7MzQ5LDEwIEBAIHUzMiBpZHBmX3hkcHNxX3BvbGwoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxLCB1MzIgYnVkZ2V0KVxuIFx0dTMyIGRvbmVfZnJhbWVzO1xuIFx0Ym9vbCBnZW47XG4gXG4mIzQzO1x0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2aWRwZl94ZHBfZmIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgeGRwc3EpKVxuJiM0MztcdFx0cmV0dXJuIGlkcGZfeGRwc3FfcG9sbF9mYih4ZHBzcSwgYnVkZ2V0KTtcbiYjNDM7XG4gXHRnZW4gPSBpZHBmX3F1ZXVlX2hhcyhHRU5fQ0hLLCBjcSk7XG4gXG4gXHRmb3IgKGRvbmVfZnJhbWVzID0gMDsgZG9uZV9mcmFtZXMgXHUwMDNjIGJ1ZGdldDsgKSB7XG5AQCAtNDc5LDYgJiM0Mzs1NzIsMjQgQEAgc3RhdGljIGludCBpZHBmX3hkcF9zZXR1cF9wcm9nKHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCxcbiBcdFx0cmV0dXJuIC1FTk9TUEM7XG4gXHR9XG4gXG4mIzQzO1x0dnBvcnQtXHUwMDNleGRwc3FfZmIgPSAhaWRwZl9pc19jYXBfZW5hKHZwb3J0LVx1MDAzZWFkYXB0ZXIsIElEUEZfT1RIRVJfQ0FQUyxcbiYjNDM7XHRcdFx0XHRcdCAgIFZJUlRDSE5MMl9DQVBfU1BMSVRRX1FTQ0hFRCk7XG4mIzQzO1x0aWYgKCF2cG9ydC1cdTAwM2V4ZHBzcV9mYilcbiYjNDM7XHRcdGdvdG8gcmVzZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwcm9nKSB7XG4mIzQzO1x0XHRib29sIHdhcm4gPSAhc3RhdGljX2tleV9lbmFibGVkKFx1MDAyNmlkcGZfeGRwX2ZiKTtcbiYjNDM7XG4mIzQzO1x0XHRzdGF0aWNfYnJhbmNoX2luYyhcdTAwMjZpZHBmX3hkcF9mYik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHdhcm4gXHUwMDI2XHUwMDI2IG5ldF9yYXRlbGltaXQoKSlcbiYjNDM7XHRcdFx0bmV0ZGV2X3dhcm4odnBvcnQtXHUwMDNlbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtUaGUgRlcgZG9lc24mIzM5O3Qgc3VwcG9ydCBUeCBpbiBGSUZPIG1vZGUsIFhEUCBUeCBwZXJmb3JtYW5jZSBtaWdodCBiZSBzdWJvcHRpbWFsXFxuXCYjMzQ7KTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c3RhdGljX2JyYW5jaF9kZWMoXHUwMDI2aWRwZl94ZHBfZmIpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO3Jlc2V0OlxuIFx0b2xkID0gY2ZnLVx1MDAzZXVzZXJfY29uZmlnLnhkcF9wcm9nO1xuIFx0Y2ZnLVx1MDAzZXVzZXJfY29uZmlnLnhkcF9wcm9nID0gcHJvZztcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaFxuaW5kZXggNjNlNTZmN2Q0M2UwMDIuLjNkMDFjNTM1YmQ0YzYwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaFxuQEAgLTgsNiAmIzQzOzgsMTAgQEBcbiBcbiAjaW5jbHVkZSBcJiMzNDtpZHBmX3R4cnguaFwmIzM0O1xuIFxuJiM0MztzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjO1xuJiM0MztcbiYjNDM7REVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGlkcGZfeGRwX2ZiKTtcbiYjNDM7XG4gaW50IGlkcGZfeGRwX3J4cV9pbmZvX2luaXQoc3RydWN0IGlkcGZfcnhfcXVldWUgKnJ4cSk7XG4gaW50IGlkcGZfeGRwX3J4cV9pbmZvX2luaXRfYWxsKGNvbnN0IHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMpO1xuIHZvaWQgaWRwZl94ZHBfcnhxX2luZm9fZGVpbml0KHN0cnVjdCBpZHBmX3J4X3F1ZXVlICpyeHEsIHUzMiBtb2RlbCk7XG5AQCAtMjEsNiAmIzQzOzI1LDM0IEBAIHZvaWQgaWRwZl94ZHBzcXNfcHV0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCk7XG4gdTMyIGlkcGZfeGRwc3FfcG9sbChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpO1xuIGJvb2wgaWRwZl94ZHBfdHhfZmx1c2hfYnVsayhzdHJ1Y3QgbGliZXRoX3hkcF90eF9idWxrICpicSwgdTMyIGZsYWdzKTtcbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X3htaXRfZmIoc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyBkZXNjLCB1MzIgaSxcbiYjNDM7XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGxpYmV0aF94ZHBzcSAqc3EsIHU2NCBwcml2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlkcGZfZmxleF90eF9zY2hlZF9kZXNjICp0eF9kZXNjID0gc3EtXHUwMDNlZGVzY3M7XG4mIzQzO1x0dTMyIGNtZDtcbiYjNDM7XG4mIzQzO1x0Y21kID0gRklFTERfUFJFUChJRFBGX1RYRF9GTEVYX0ZMT1dfRFRZUEVfTSxcbiYjNDM7XHRcdFx0IElEUEZfVFhfREVTQ19EVFlQRV9GTEVYX0ZMT1dfU0NIRSk7XG4mIzQzO1x0aWYgKGRlc2MuZmxhZ3MgXHUwMDI2IExJQkVUSF9YRFBfVFhfTEFTVClcbiYjNDM7XHRcdGNtZCB8PSBJRFBGX1RYRF9GTEVYX0ZMT1dfQ01EX0VPUDtcbiYjNDM7XHRpZiAocHJpdiBcdTAwMjZcdTAwMjYgKGRlc2MuZmxhZ3MgXHUwMDI2IExJQkVUSF9YRFBfVFhfQ1NVTSkpXG4mIzQzO1x0XHRjbWQgfD0gSURQRl9UWERfRkxFWF9GTE9XX0NNRF9DU19FTjtcbiYjNDM7XG4mIzQzO1x0dHhfZGVzYyA9IFx1MDAyNnR4X2Rlc2NbaV07XG4mIzQzO1x0dHhfZGVzYy1cdTAwM2VidWZfYWRkciA9IGNwdV90b19sZTY0KGRlc2MuYWRkcik7XG4mIzQzO1xuJiM0MzsjaWZkZWYgX19MSUJFVEhfV09SRF9BQ0NFU1NcbiYjNDM7XHQqKHU2NCAqKVx1MDAyNnR4X2Rlc2MtXHUwMDNlcXcxID0gKCh1NjQpZGVzYy5sZW4gXHUwMDNjXHUwMDNjIDQ4KSB8ICgodTY0KWkgXHUwMDNjXHUwMDNjIDMyKSB8IGNtZDtcbiYjNDM7I2Vsc2VcbiYjNDM7XHR0eF9kZXNjLVx1MDAzZXF3MS5yeHJfYnVmc2l6ZSA9IGNwdV90b19sZTE2KGRlc2MubGVuKTtcbiYjNDM7XHR0eF9kZXNjLVx1MDAzZXF3MS5jb21wbF90YWcgPSBjcHVfdG9fbGUxNihpKTtcbiYjNDM7XHR0eF9kZXNjLVx1MDAzZXF3MS50c1swXSA9IDA7XG4mIzQzO1x0dHhfZGVzYy1cdTAwM2VxdzEudHNbMV0gPSAwO1xuJiM0MztcdHR4X2Rlc2MtXHUwMDNlcXcxLnRzWzJdID0gMDtcbiYjNDM7XHR0eF9kZXNjLVx1MDAzZXF3MS5jbWRfZHR5cGUgPSBjbWQ7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGlkcGZfeGRwX3R4X3htaXQgLSBwcm9kdWNlIGEgc2luZ2xlIEhXIFR4IGRlc2NyaXB0b3Igb3V0IG9mIFhEUCBkZXNjXG4gICogQGRlc2M6IFhEUCBkZXNjcmlwdG9yIHRvIHB1bGwgdGhlIERNQSBhZGRyZXNzIGFuZCBsZW5ndGggZnJvbVxuQEAgLTM0LDYgJiM0Mzs2NiwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBfdHhfeG1pdChzdHJ1Y3QgbGliZXRoX3hkcF90eF9kZXNjIGRlc2MsIHUzMiBpLFxuIFx0c3RydWN0IGlkcGZfZmxleF90eF9kZXNjICp0eF9kZXNjID0gc3EtXHUwMDNlZGVzY3M7XG4gXHR1MzIgY21kO1xuIFxuJiM0MztcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmlkcGZfeGRwX2ZiKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sXG4mIzQzO1x0XHRcdCAgIGxpYmV0aF94ZHBzcV90b19zcShzcSwgc3RydWN0IGlkcGZfdHhfcXVldWUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBuZXh0X3RvX3VzZSkpKSB7XG4mIzQzO1x0XHRpZHBmX3hkcF90eF94bWl0X2ZiKGRlc2MsIGksIHNxLCBwcml2KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0Y21kID0gRklFTERfUFJFUChJRFBGX0ZMRVhfVFhEX1FXMV9EVFlQRV9NLFxuIFx0XHRcdCBJRFBGX1RYX0RFU0NfRFRZUEVfRkxFWF9MMlRBRzFfTDJUQUcyKTtcbiBcdGlmIChkZXNjLmZsYWdzIFx1MDAyNiBMSUJFVEhfWERQX1RYX0xBU1QpXG5AQCAtNTMsMTAgJiM0Mzs5MywyNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBfdHhfeG1pdChzdHJ1Y3QgbGliZXRoX3hkcF90eF9kZXNjIGRlc2MsIHUzMiBpLFxuICNlbmRpZlxuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwc3Ffc2V0X3JzX2ZiKGNvbnN0IHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSlcbiYjNDM7e1xuJiM0MztcdHUzMiBuID0gbWluKHhkcHNxLVx1MDAzZXBlbmRpbmcsIHhkcHNxLVx1MDAzZWRlc2NfY291bnQgLSB4ZHBzcS1cdTAwM2VuZXh0X3RvX2NsZWFuKTtcbiYjNDM7XG4mIzQzO1x0Yml0bWFwX3NldCh4ZHBzcS1cdTAwM2VwZW5kaW5nX21hc2ssIHhkcHNxLVx1MDAzZW5leHRfdG9fY2xlYW4sIG4pO1xuJiM0MztcbiYjNDM7XHRuID0geGRwc3EtXHUwMDNlcGVuZGluZyAtIG47XG4mIzQzO1x0aWYgKG4pXG4mIzQzO1x0XHRiaXRtYXBfc2V0KHhkcHNxLVx1MDAzZXBlbmRpbmdfbWFzaywgMCwgbik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwc3Ffc2V0X3JzKGNvbnN0IHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSlcbiB7XG4gXHR1MzIgbnR1LCBjbWQ7XG4gXG4mIzQzO1x0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2aWRwZl94ZHBfZmIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgeGRwc3EpKSB7XG4mIzQzO1x0XHRpZHBmX3hkcHNxX3NldF9yc19mYih4ZHBzcSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiBcdG50dSA9IHhkcHNxLVx1MDAzZW5leHRfdG9fdXNlO1xuIFx0aWYgKHVubGlrZWx5KCFudHUpKVxuIFx0XHRudHUgPSB4ZHBzcS1cdTAwM2VkZXNjX2NvdW50O1xuQEAgLTg0LDcgJiM0MzsxNDEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBzcV91cGRhdGVfdGFpbChjb25zdCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EpXG4gICogU2V0IHRoZSBSUyBiaXQgKFwmIzM0O2VuZCBvZiBiYXRjaFwmIzM0OyksIGJ1bXAgdGhlIHRhaWwsIGFuZCBxdWV1ZSB0aGUgY2xlYW51cCB0aW1lci5cbiAgKiBUbyBiZSBjYWxsZWQgYWZ0ZXIgYSBOQVBJIHBvbGxpbmcgbG9vcCwgYXQgdGhlIGVuZCBvZiAubmRvX3hkcF94bWl0KCkgZXRjLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcF90eF9maW5hbGl6ZSh2b2lkICpfeGRwc3EsIGJvb2wgc2VudCwgYm9vbCBmbHVzaClcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGlkcGZfeGRwX3R4X2ZpbmFsaXplKHZvaWQgKl94ZHBzcSwgYm9vbCBzZW50LFxuJiM0MztcdFx0XHRcdFx0XHQgYm9vbCBmbHVzaClcbiB7XG4gXHRzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EgPSBfeGRwc3E7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oIGIvaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oXG5pbmRleCA4OTg3MjNhYjYyZTgxMi4uZWQ2MWQ4M2JkYTJkNzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9saWJldGgveGRwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2xpYmV0aC94ZHAuaFxuQEAgLTQzMCw2ICYjNDM7NDMwLDE5IEBAIHN0cnVjdCBsaWJldGhfeGRwc3Ege1xuIFx0c3RydWN0IGxpYmV0aF94ZHBzcV9sb2NrXHQqbG9jaztcbiB9O1xuIFxuJiM0MzsvKipcbiYjNDM7ICogbGliZXRoX3hkcHNxX3RvX3NxIC0gZ2V0IFNRIHBvaW50ZXIgZnJvbSBhbiBYRFBTUSBwb2ludGVyXG4mIzQzOyAqIEB4ZHBzcTogXHUwMDI2bGliZXRoX3hkcHNxIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHF1ZXVlXG4mIzQzOyAqIEB0eXBlOiB0eXBlb2YoKSBvZiB0aGUgZHJpdmVyIFR4IHF1ZXVlIHN0cnVjdHVyZVxuJiM0MzsgKiBAbWVtYmVyOiBuYW1lIG9mIHRoZSBOVFUgZmllbGQgaW5zaWRlIEB0eXBlXG4mIzQzOyAqXG4mIzQzOyAqIFNvbWUgb2YgdGhlIHNlbmRpbmcgY2FsbGJhY2tzIHRha2Ugb25seSBcdTAwMjZsaWJldGhfeGRwc3EgcG9pbnRlciBhbmQgbm8gcG9pbnRlclxuJiM0MzsgKiB0byB0aGUgYWN0dWFsIGRyaXZlciBUeCBxdWV1ZSBzdHJ1Y3R1cmUuIFVzZSB0aGlzIGhlbHBlciB0byBxdWlja2x5IGp1bXAgdG9cbiYjNDM7ICogdGhlIGxhdHRlciB3aGVuIG5lZWRlZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgbGliZXRoX3hkcHNxX3RvX3NxKHhkcHNxLCB0eXBlLCBtZW1iZXIpXHRcdFx0XHQgICAgICBcXFxuJiM0MztcdGNvbnRhaW5lcl9vZl9jb25zdCgoeGRwc3EpLVx1MDAzZW50dSwgdHlwZSwgbWVtYmVyKVxuJiM0MztcbiAvKipcbiAgKiBzdHJ1Y3QgbGliZXRoX3hkcF90eF9kZXNjIC0gYWJzdHJhY3Rpb24gZm9yIGFuIFhEUCBUeCBkZXNjcmlwdG9yXG4gICogQGFkZHI6IERNQSBhZGRyZXNzIG9mIHRoZSBmcmFtZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA5OjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBJRFBGIChJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24pIGRyaXZlci4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBuZXR3b3JrIGRyaXZlciBmb3IgSW50ZWwgSVBVcy4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUgb3IgR0NFKSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWIzOWNjYmQzNDY5ZDAzZmQzMGVmZDYwY2QxYjdmYzc3MGE3NDg3MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDkgMDk6Mjg6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oCmluZGV4IGVjMWI3NWYwMzliYjI1Li41NDE0YmJiZWUwN2FkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmgKQEAgLTM4NCw2ICYjNDM7Mzg0LDcgQEAgc3RydWN0IGlkcGZfdnBvcnQgewogCXN0cnVjdCBpZHBmX3R4X3F1ZXVlICoqdHhxczsKIAl1MTYgbnVtX3R4cTsKIAl1MTYgbnVtX3hkcF90eHE7CiYjNDM7CWJvb2wgeGRwc3FfZmI7CiAJYm9vbCB4ZHBzcV9zaGFyZTsKIAlzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYwppbmRleCA3ZjkwNTY0MDRmNjRmYy4uNjQ3MmJmZjljZWIzN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYwpAQCAtMjI3LDcgJiM0MzsyMjcsNyBAQCBzdGF0aWMgaW50IGlkcGZfdHhfZGVzY19hbGxvYyhjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQsCiAKIAlpZHBmX3hza19zZXR1cF9xdWV1ZSh2cG9ydCwgdHhfcSwgVklSVENITkwyX1FVRVVFX1RZUEVfVFgpOwogCi0JaWYgKCFpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhfcSkpCiYjNDM7CWlmICghaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHR4X3EpIHx8IGlkcGZfcXVldWVfaGFzKFhEUCwgdHhfcSkpCiAJCXJldHVybiAwOwogCiAJcmVmaWxscSA9IHR4X3EtJmd0O3JlZmlsbHE7CkBAIC0xMDU1LDYgJiM0MzsxMDU1LDExIEBAIHN0YXRpYyB2b2lkIGlkcGZfY2xlYW5fcXVldWVfc2V0KGNvbnN0IHN0cnVjdCBpZHBmX3F1ZXVlX3NldCAqcXMpCiAJCQlpZiAoaWRwZl9xdWV1ZV9oYXMoWERQLCBxLSZndDt0eHEpKSB7CiAJCQkJcS0mZ3Q7dHhxLSZndDtwZW5kaW5nID0gMDsKIAkJCQlxLSZndDt0eHEtJmd0O3hkcF90eCA9IDA7CiYjNDM7CiYjNDM7CQkJCWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7aWRwZl94ZHBfZmIpICZhbXA7JmFtcDsKJiM0MzsJCQkJICAgIGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCBxLSZndDt0eHEpKQomIzQzOwkJCQkJYml0bWFwX3plcm8ocS0mZ3Q7dHhxLSZndDtwZW5kaW5nX21hc2ssCiYjNDM7CQkJCQkJICAgIHEtJmd0O3R4cS0mZ3Q7ZGVzY19jb3VudCk7CiAJCQl9IGVsc2UgewogCQkJCXEtJmd0O3R4cS0mZ3Q7dHhxX2dycC0mZ3Q7bnVtX2NvbXBsZXRpb25zX3BlbmRpbmcgPSAwOwogCQkJfQpAQCAtMTMxNyw3ICYjNDM7MTMyMiw4IEBAIHN0YXRpYyB2b2lkIGlkcGZfdHhxX2dyb3VwX3JlbChzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjICpyc3JjKQogCQkJaWYgKCF0eHFfZ3JwLSZndDt0eHFzW2pdKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHR4cV9ncnAtJmd0O3R4cXNbal0pKSB7CiYjNDM7CQkJaWYgKGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB0eHFfZ3JwLSZndDt0eHFzW2pdKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICFpZHBmX3F1ZXVlX2hhcyhYRFAsIHR4cV9ncnAtJmd0O3R4cXNbal0pKSB7CiAJCQkJa2ZyZWUodHhxX2dycC0mZ3Q7dHhxc1tqXS0mZ3Q7cmVmaWxscSk7CiAJCQkJdHhxX2dycC0mZ3Q7dHhxc1tqXS0mZ3Q7cmVmaWxscSA9IE5VTEw7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaAppbmRleCA0YmU1YjNiNmQzZWQyYi4uN2ViZTU5ZDgxZTE3MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaApAQCAtNjI1LDExICYjNDM7NjI1LDEyIEBAIGxpYmV0aF9jYWNoZWxpbmVfc2V0X2Fzc2VydChzdHJ1Y3QgaWRwZl9yeF9xdWV1ZSwKICAqIEBjbGVhbl9idWRnZXQ6IHNpbmdsZXEgb25seSwgcXVldWUgY2xlYW5pbmcgYnVkZ2V0CiAgKiBAY2xlYW5lZF9wa3RzOiBOdW1iZXIgb2YgcGFja2V0cyBjbGVhbmVkIGZvciB0aGUgYWJvdmUgc2FpZCBjYXNlCiAgKiBAcmVmaWxscTogUG9pbnRlciB0byByZWZpbGwgcXVldWUKJiM0MzsgKiBAY2FjaGVkX3RzdGFtcF9jYXBzOiBUeCB0aW1lc3RhbXAgY2FwYWJpbGl0aWVzIG5lZ290aWF0ZWQgd2l0aCB0aGUgQ1AKICAqIEBwZW5kaW5nOiBudW1iZXIgb2YgcGVuZGluZyBkZXNjcmlwdG9ycyB0byBzZW5kIGluIFFCCiAgKiBAeGRwX3R4OiBudW1iZXIgb2YgcGVuZGluZyAmYW1wO3hkcF9idWZmIG9yICZhbXA7eGRwX2ZyYW1lIGJ1ZmZlcnMKICAqIEB0aW1lcjogdGltZXIgZm9yIFhEUCBUeCBxdWV1ZSBjbGVhbnVwCiAgKiBAeGRwX2xvY2s6IGxvY2sgZm9yIFhEUCBUeCBxdWV1ZXMgc2hhcmluZwotICogQGNhY2hlZF90c3RhbXBfY2FwczogVHggdGltZXN0YW1wIGNhcGFiaWxpdGllcyBuZWdvdGlhdGVkIHdpdGggdGhlIENQCiYjNDM7ICogQHBlbmRpbmdfbWFzazogbWFzayBvZiBidWZmZXJzIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24gaW4gdGhlIEZCIFhEUCBtb2RlCiAgKiBAdHN0YW1wX3Rhc2s6IFdvcmsgdGhhdCBoYW5kbGVzIFR4IHRpbWVzdGFtcCByZWFkCiAgKiBAc3RhdHNfc3luYzogU2VlIHN0cnVjdCB1NjRfc3RhdHNfc3luYwogICogQHFfc3RhdHM6IFNlZSB1bmlvbiBpZHBmX3R4X3F1ZXVlX3N0YXRzCkBAIC02ODksNiAmIzQzOzY5MCw4IEBAIHN0cnVjdCBpZHBmX3R4X3F1ZXVlIHsKIAkJCXUxNiBjbGVhbmVkX3BrdHM7CiAKIAkJCXN0cnVjdCBpZHBmX3N3X3F1ZXVlICpyZWZpbGxxOwomIzQzOwomIzQzOwkJCXN0cnVjdCBpZHBmX3B0cF92cG9ydF90eF90c3RhbXBfY2FwcyAqY2FjaGVkX3RzdGFtcF9jYXBzOwogCQl9OwogCQlzdHJ1Y3QgewogCQkJdTMyIHBlbmRpbmc7CkBAIC02OTYsMTAgJiM0Mzs2OTksMTEgQEAgc3RydWN0IGlkcGZfdHhfcXVldWUgewogCiAJCQlzdHJ1Y3QgbGliZXRoX3hkcHNxX3RpbWVyICp0aW1lcjsKIAkJCXN0cnVjdCBsaWJldGhfeGRwc3FfbG9jayB4ZHBfbG9jazsKJiM0MzsKJiM0MzsJCQl1bnNpZ25lZCBsb25nICpwZW5kaW5nX21hc2s7CiAJCX07CiAJfTsKIAotCXN0cnVjdCBpZHBmX3B0cF92cG9ydF90eF90c3RhbXBfY2FwcyAqY2FjaGVkX3RzdGFtcF9jYXBzOwogCXN0cnVjdCB3b3JrX3N0cnVjdCAqdHN0YW1wX3Rhc2s7CiAKIAlzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgc3RhdHNfc3luYzsKQEAgLTcxOCw4ICYjNDM7NzIyLDcgQEAgc3RydWN0IGlkcGZfdHhfcXVldWUgewogCV9fY2FjaGVsaW5lX2dyb3VwX2VuZF9hbGlnbmVkKGNvbGQpOwogfTsKIGxpYmV0aF9jYWNoZWxpbmVfc2V0X2Fzc2VydChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgNjQsCi0JCQkgICAgMTA0ICYjNDM7Ci0JCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGlkcGZfdHhfcXVldWUsIGNhY2hlZF90c3RhbXBfY2FwcykgLQomIzQzOwkJCSAgICA5NiAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgdHN0YW1wX3Rhc2spIC0KIAkJCSAgICBvZmZzZXRvZmVuZChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgdGltZXIpICYjNDM7CiAJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGlkcGZfdHhfcXVldWUsIHFfc3RhdHMpIC0KIAkJCSAgICBvZmZzZXRvZmVuZChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgdHN0YW1wX3Rhc2spLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmMKaW5kZXggY2JjY2Q0NTQ2NzY4MTYuLjhhNGUwYTEzMzY0ZGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmMKQEAgLTcsNiAmIzQzOzcsOCBAQAogI2luY2x1ZGUgJiMzNDt4ZHAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3hzay5oJiMzNDsKIAomIzQzO0RFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGlkcGZfeGRwX2ZiKTsKJiM0MzsKIHN0YXRpYyBpbnQgaWRwZl9yeHFfZm9yX2VhY2goY29uc3Qgc3RydWN0IGlkcGZfcV92ZWNfcnNyYyAqcnNyYywKIAkJCSAgICAgaW50ICgqZm4pKHN0cnVjdCBpZHBmX3J4X3F1ZXVlICpyeHEsIHZvaWQgKmFyZyksCiAJCQkgICAgIHZvaWQgKmFyZykKQEAgLTE4Myw4ICYjNDM7MTg1LDggQEAgaW50IGlkcGZfeGRwc3FzX2dldChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpCiAJCWtmcmVlKHhkcHNxLSZndDtyZWZpbGxxKTsKIAkJeGRwc3EtJmd0O3JlZmlsbHEgPSBOVUxMOwogCi0JCWlkcGZfcXVldWVfY2xlYXIoRkxPV19TQ0hfRU4sIHhkcHNxKTsKLQkJaWRwZl9xdWV1ZV9jbGVhcihGTE9XX1NDSF9FTiwgeGRwc3EtJmd0O2NvbXBscSk7CiYjNDM7CQlpZHBmX3F1ZXVlX2Fzc2lnbihGTE9XX1NDSF9FTiwgeGRwc3EsIHZwb3J0LSZndDt4ZHBzcV9mYik7CiYjNDM7CQlpZHBmX3F1ZXVlX2Fzc2lnbihGTE9XX1NDSF9FTiwgeGRwc3EtJmd0O2NvbXBscSwgdnBvcnQtJmd0O3hkcHNxX2ZiKTsKIAkJaWRwZl9xdWV1ZV9zZXQoTk9JUlEsIHhkcHNxKTsKIAkJaWRwZl9xdWV1ZV9zZXQoWERQLCB4ZHBzcSk7CiAJCWlkcGZfcXVldWVfc2V0KFhEUCwgeGRwc3EtJmd0O2NvbXBscSk7CkBAIC0xOTcsNiAmIzQzOzE5OSwyOCBAQCBpbnQgaWRwZl94ZHBzcXNfZ2V0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCkKIAkJeGRwc3EtJmd0O3BlbmRpbmcgPSAwOwogCQl4ZHBzcS0mZ3Q7eGRwX3R4ID0gMDsKIAkJeGRwc3EtJmd0O3RocmVzaCA9IGxpYmV0aF94ZHBfcXVldWVfdGhyZXNob2xkKHhkcHNxLSZndDtkZXNjX2NvdW50KTsKJiM0MzsKJiM0MzsJCWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7aWRwZl94ZHBfZmIpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgeGRwc3EpKSB7CiYjNDM7CQkJeGRwc3EtJmd0O3BlbmRpbmdfbWFzayA9CiYjNDM7CQkJCWJpdG1hcF96YWxsb2Nfbm9kZSh4ZHBzcS0mZ3Q7ZGVzY19jb3VudCwKJiM0MzsJCQkJCQkgICBHRlBfS0VSTkVMLAomIzQzOwkJCQkJCSAgIGNwdV90b19tZW0oaSAtIHNxcykpOwomIzQzOwkJCWlmICh4ZHBzcS0mZ3Q7cGVuZGluZ19tYXNrKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlmb3IgKGludCBqID0gaSAtIDE7IGogJmd0Oz0gc3FzOyBqLS0pIHsKJiM0MzsJCQkJeGRwc3EgPSB2cG9ydC0mZ3Q7dHhxc1tqXTsKJiM0MzsKJiM0MzsJCQkJaWYgKGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB4ZHBzcSkpCiYjNDM7CQkJCQliaXRtYXBfZnJlZSh4ZHBzcS0mZ3Q7cGVuZGluZ19tYXNrKTsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJZm9yICh1MzIgaiA9IDA7IGogJmx0OyB2cG9ydC0mZ3Q7bnVtX3hkcF90eHE7IGomIzQzOyYjNDM7KQomIzQzOwkJCQlrZnJlZSh0aW1lcnNbal0pOwomIzQzOwomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtMjIyLDYgJiM0MzsyNDYsMTIgQEAgdm9pZCBpZHBmX3hkcHNxc19wdXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KQogCQlsaWJldGhfeGRwc3FfZGVpbml0X3RpbWVyKHhkcHNxLSZndDt0aW1lcik7CiAJCWxpYmV0aF94ZHBzcV9wdXQoJmFtcDt4ZHBzcS0mZ3Q7eGRwX2xvY2ssIGRldik7CiAKJiM0MzsJCWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7aWRwZl94ZHBfZmIpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgeGRwc3EpKSB7CiYjNDM7CQkJYml0bWFwX2ZyZWUoeGRwc3EtJmd0O3BlbmRpbmdfbWFzayk7CiYjNDM7CQkJeGRwc3EtJmd0O3BlbmRpbmdfbWFzayA9IE5VTEw7CiYjNDM7CQl9CiYjNDM7CiAJCWtmcmVlKHhkcHNxLSZndDt0aW1lcik7CiAJCXhkcHNxLSZndDtyZWZpbGxxID0gTlVMTDsKIAkJaWRwZl9xdWV1ZV9jbGVhcihOT0lSUSwgeGRwc3EpOwpAQCAtMjUwLDYgJiM0MzsyODAsNjUgQEAgc3RhdGljIGludCBpZHBmX3hkcF9wYXJzZV9jcWUoY29uc3Qgc3RydWN0IGlkcGZfc3BsaXRxXzRiX3R4X2NvbXBsX2Rlc2MgKmRlc2MsCiAJcmV0dXJuIHVwcGVyXzE2X2JpdHModmFsKTsKIH0KIAomIzQzO3N0YXRpYyB1MzIgaWRwZl94ZHBzcV9wb2xsX2ZiKHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSwgdTMyIGJ1ZGdldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZHBmX2NvbXBsX3F1ZXVlICpjcSA9IHhkcHNxLSZndDtjb21wbHE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgKm1hc2sgPSB4ZHBzcS0mZ3Q7cGVuZGluZ19tYXNrOwomIzQzOwl1MzIgZG9uZV9mcmFtZXMsIHR4X2NudCwgbmV3X250YzsKJiM0MzsJdTMyIG50YyA9IGNxLSZndDtuZXh0X3RvX2NsZWFuOwomIzQzOwl1MzIgY250ID0gY3EtJmd0O2Rlc2NfY291bnQ7CiYjNDM7CWJvb2wgZ2VuOwomIzQzOwomIzQzOwlnZW4gPSBpZHBmX3F1ZXVlX2hhcyhHRU5fQ0hLLCBjcSk7CiYjNDM7CiYjNDM7CWZvciAoZG9uZV9mcmFtZXMgPSAwOyBkb25lX2ZyYW1lcyAmbHQ7IGJ1ZGdldDsgKSB7CiYjNDM7CQlpbnQgcmV0OwomIzQzOwomIzQzOwkJcmV0ID0gaWRwZl94ZHBfcGFyc2VfY3FlKCZhbXA7Y3EtJmd0O2NvbXBbbnRjXS5jb21tb24sIGdlbik7CiYjNDM7CQlpZiAocmV0ICZndDs9IDApIHsKJiM0MzsJCQlfX2NsZWFyX2JpdChyZXQsIG1hc2spOwomIzQzOwkJCWRvbmVfZnJhbWVzJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCQlnb3RvIG5leHQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlzd2l0Y2ggKHJldCkgewomIzQzOwkJY2FzZSAtRU5PREFUQToKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCWNhc2UgLUVJTlZBTDoKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MztuZXh0OgomIzQzOwkJaWYgKHVubGlrZWx5KCYjNDM7JiM0MztudGMgPT0gY250KSkgewomIzQzOwkJCW50YyA9IDA7CiYjNDM7CQkJZ2VuID0gIWdlbjsKJiM0MzsJCQlpZHBmX3F1ZXVlX2NoYW5nZShHRU5fQ0hLLCBjcSk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWNxLSZndDtuZXh0X3RvX2NsZWFuID0gbnRjOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoIWRvbmVfZnJhbWVzKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl0eF9jbnQgPSB4ZHBzcS0mZ3Q7ZGVzY19jb3VudDsKJiM0MzsKJiM0MzsJLyogRG9uJiMzOTt0IGdvIHBhc3QgbmV4dF90b191c2UgKi8KJiM0MzsJX19zZXRfYml0KHhkcHNxLSZndDtuZXh0X3RvX3VzZSwgbWFzayk7CiYjNDM7CiYjNDM7CW5ld19udGMgPSBmaW5kX25leHRfYml0KG1hc2ssIHR4X2NudCwgeGRwc3EtJmd0O25leHRfdG9fY2xlYW4pOwomIzQzOwlkb25lX2ZyYW1lcyA9IG5ld19udGMgLSB4ZHBzcS0mZ3Q7bmV4dF90b19jbGVhbjsKJiM0MzsKJiM0MzsJaWYgKG5ld19udGMgPT0gdHhfY250KQomIzQzOwkJZG9uZV9mcmFtZXMgJiM0Mzs9IGZpbmRfZmlyc3RfYml0KG1hc2ssIHR4X2NudCk7CiYjNDM7CiYjNDM7CV9fY2xlYXJfYml0KHhkcHNxLSZndDtuZXh0X3RvX3VzZSwgbWFzayk7CiYjNDM7CiYjNDM7CXJldHVybiBkb25lX2ZyYW1lczsKJiM0Mzt9CiYjNDM7CiB1MzIgaWRwZl94ZHBzcV9wb2xsKHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSwgdTMyIGJ1ZGdldCkKIHsKIAlzdHJ1Y3QgaWRwZl9jb21wbF9xdWV1ZSAqY3EgPSB4ZHBzcS0mZ3Q7Y29tcGxxOwpAQCAtMjYwLDYgJiM0MzszNDksMTAgQEAgdTMyIGlkcGZfeGRwc3FfcG9sbChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpCiAJdTMyIGRvbmVfZnJhbWVzOwogCWJvb2wgZ2VuOwogCiYjNDM7CWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7aWRwZl94ZHBfZmIpICZhbXA7JmFtcDsKJiM0MzsJICAgIGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB4ZHBzcSkpCiYjNDM7CQlyZXR1cm4gaWRwZl94ZHBzcV9wb2xsX2ZiKHhkcHNxLCBidWRnZXQpOwomIzQzOwogCWdlbiA9IGlkcGZfcXVldWVfaGFzKEdFTl9DSEssIGNxKTsKIAogCWZvciAoZG9uZV9mcmFtZXMgPSAwOyBkb25lX2ZyYW1lcyAmbHQ7IGJ1ZGdldDsgKSB7CkBAIC00NzksNiAmIzQzOzU3MiwyNCBAQCBzdGF0aWMgaW50IGlkcGZfeGRwX3NldHVwX3Byb2coc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0LAogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAKJiM0MzsJdnBvcnQtJmd0O3hkcHNxX2ZiID0gIWlkcGZfaXNfY2FwX2VuYSh2cG9ydC0mZ3Q7YWRhcHRlciwgSURQRl9PVEhFUl9DQVBTLAomIzQzOwkJCQkJICAgVklSVENITkwyX0NBUF9TUExJVFFfUVNDSEVEKTsKJiM0MzsJaWYgKCF2cG9ydC0mZ3Q7eGRwc3FfZmIpCiYjNDM7CQlnb3RvIHJlc2V0OwomIzQzOwomIzQzOwlpZiAocHJvZykgewomIzQzOwkJYm9vbCB3YXJuID0gIXN0YXRpY19rZXlfZW5hYmxlZCgmYW1wO2lkcGZfeGRwX2ZiKTsKJiM0MzsKJiM0MzsJCXN0YXRpY19icmFuY2hfaW5jKCZhbXA7aWRwZl94ZHBfZmIpOwomIzQzOwomIzQzOwkJaWYgKHdhcm4gJmFtcDsmYW1wOyBuZXRfcmF0ZWxpbWl0KCkpCiYjNDM7CQkJbmV0ZGV2X3dhcm4odnBvcnQtJmd0O25ldGRldiwKJiM0MzsJCQkJICAgICYjMzQ7VGhlIEZXIGRvZXNuJiMzOTt0IHN1cHBvcnQgVHggaW4gRklGTyBtb2RlLCBYRFAgVHggcGVyZm9ybWFuY2UgbWlnaHQgYmUgc3Vib3B0aW1hbFxuJiMzNDspOwomIzQzOwl9IGVsc2UgewomIzQzOwkJc3RhdGljX2JyYW5jaF9kZWMoJmFtcDtpZHBmX3hkcF9mYik7CiYjNDM7CX0KJiM0MzsKJiM0MztyZXNldDoKIAlvbGQgPSBjZmctJmd0O3VzZXJfY29uZmlnLnhkcF9wcm9nOwogCWNmZy0mZ3Q7dXNlcl9jb25maWcueGRwX3Byb2cgPSBwcm9nOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaAppbmRleCA2M2U1NmY3ZDQzZTAwMi4uM2QwMWM1MzViZDRjNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaApAQCAtOCw2ICYjNDM7OCwxMCBAQAogCiAjaW5jbHVkZSAmIzM0O2lkcGZfdHhyeC5oJiMzNDsKIAomIzQzO3N0cnVjdCBpZHBmX3FfdmVjX3JzcmM7CiYjNDM7CiYjNDM7REVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGlkcGZfeGRwX2ZiKTsKJiM0MzsKIGludCBpZHBmX3hkcF9yeHFfaW5mb19pbml0KHN0cnVjdCBpZHBmX3J4X3F1ZXVlICpyeHEpOwogaW50IGlkcGZfeGRwX3J4cV9pbmZvX2luaXRfYWxsKGNvbnN0IHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMpOwogdm9pZCBpZHBmX3hkcF9yeHFfaW5mb19kZWluaXQoc3RydWN0IGlkcGZfcnhfcXVldWUgKnJ4cSwgdTMyIG1vZGVsKTsKQEAgLTIxLDYgJiM0MzsyNSwzNCBAQCB2b2lkIGlkcGZfeGRwc3FzX3B1dChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpOwogdTMyIGlkcGZfeGRwc3FfcG9sbChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpOwogYm9vbCBpZHBmX3hkcF90eF9mbHVzaF9idWxrKHN0cnVjdCBsaWJldGhfeGRwX3R4X2J1bGsgKmJxLCB1MzIgZmxhZ3MpOwogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X3htaXRfZmIoc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyBkZXNjLCB1MzIgaSwKJiM0MzsJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBsaWJldGhfeGRwc3EgKnNxLCB1NjQgcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZHBmX2ZsZXhfdHhfc2NoZWRfZGVzYyAqdHhfZGVzYyA9IHNxLSZndDtkZXNjczsKJiM0MzsJdTMyIGNtZDsKJiM0MzsKJiM0MzsJY21kID0gRklFTERfUFJFUChJRFBGX1RYRF9GTEVYX0ZMT1dfRFRZUEVfTSwKJiM0MzsJCQkgSURQRl9UWF9ERVNDX0RUWVBFX0ZMRVhfRkxPV19TQ0hFKTsKJiM0MzsJaWYgKGRlc2MuZmxhZ3MgJmFtcDsgTElCRVRIX1hEUF9UWF9MQVNUKQomIzQzOwkJY21kIHw9IElEUEZfVFhEX0ZMRVhfRkxPV19DTURfRU9QOwomIzQzOwlpZiAocHJpdiAmYW1wOyZhbXA7IChkZXNjLmZsYWdzICZhbXA7IExJQkVUSF9YRFBfVFhfQ1NVTSkpCiYjNDM7CQljbWQgfD0gSURQRl9UWERfRkxFWF9GTE9XX0NNRF9DU19FTjsKJiM0MzsKJiM0MzsJdHhfZGVzYyA9ICZhbXA7dHhfZGVzY1tpXTsKJiM0MzsJdHhfZGVzYy0mZ3Q7YnVmX2FkZHIgPSBjcHVfdG9fbGU2NChkZXNjLmFkZHIpOwomIzQzOwomIzQzOyNpZmRlZiBfX0xJQkVUSF9XT1JEX0FDQ0VTUwomIzQzOwkqKHU2NCAqKSZhbXA7dHhfZGVzYy0mZ3Q7cXcxID0gKCh1NjQpZGVzYy5sZW4gJmx0OyZsdDsgNDgpIHwgKCh1NjQpaSAmbHQ7Jmx0OyAzMikgfCBjbWQ7CiYjNDM7I2Vsc2UKJiM0MzsJdHhfZGVzYy0mZ3Q7cXcxLnJ4cl9idWZzaXplID0gY3B1X3RvX2xlMTYoZGVzYy5sZW4pOwomIzQzOwl0eF9kZXNjLSZndDtxdzEuY29tcGxfdGFnID0gY3B1X3RvX2xlMTYoaSk7CiYjNDM7CXR4X2Rlc2MtJmd0O3F3MS50c1swXSA9IDA7CiYjNDM7CXR4X2Rlc2MtJmd0O3F3MS50c1sxXSA9IDA7CiYjNDM7CXR4X2Rlc2MtJmd0O3F3MS50c1syXSA9IDA7CiYjNDM7CXR4X2Rlc2MtJmd0O3F3MS5jbWRfZHR5cGUgPSBjbWQ7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwogLyoqCiAgKiBpZHBmX3hkcF90eF94bWl0IC0gcHJvZHVjZSBhIHNpbmdsZSBIVyBUeCBkZXNjcmlwdG9yIG91dCBvZiBYRFAgZGVzYwogICogQGRlc2M6IFhEUCBkZXNjcmlwdG9yIHRvIHB1bGwgdGhlIERNQSBhZGRyZXNzIGFuZCBsZW5ndGggZnJvbQpAQCAtMzQsNiAmIzQzOzY2LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcF90eF94bWl0KHN0cnVjdCBsaWJldGhfeGRwX3R4X2Rlc2MgZGVzYywgdTMyIGksCiAJc3RydWN0IGlkcGZfZmxleF90eF9kZXNjICp0eF9kZXNjID0gc3EtJmd0O2Rlc2NzOwogCXUzMiBjbWQ7CiAKJiM0MzsJaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDtpZHBmX3hkcF9mYikgJmFtcDsmYW1wOwomIzQzOwkgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sCiYjNDM7CQkJICAgbGliZXRoX3hkcHNxX3RvX3NxKHNxLCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwKJiM0MzsJCQkJCSAgICAgIG5leHRfdG9fdXNlKSkpIHsKJiM0MzsJCWlkcGZfeGRwX3R4X3htaXRfZmIoZGVzYywgaSwgc3EsIHByaXYpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJY21kID0gRklFTERfUFJFUChJRFBGX0ZMRVhfVFhEX1FXMV9EVFlQRV9NLAogCQkJIElEUEZfVFhfREVTQ19EVFlQRV9GTEVYX0wyVEFHMV9MMlRBRzIpOwogCWlmIChkZXNjLmZsYWdzICZhbXA7IExJQkVUSF9YRFBfVFhfTEFTVCkKQEAgLTUzLDEwICYjNDM7OTMsMjcgQEAgc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X3htaXQoc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyBkZXNjLCB1MzIgaSwKICNlbmRpZgogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwc3Ffc2V0X3JzX2ZiKGNvbnN0IHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSkKJiM0Mzt7CiYjNDM7CXUzMiBuID0gbWluKHhkcHNxLSZndDtwZW5kaW5nLCB4ZHBzcS0mZ3Q7ZGVzY19jb3VudCAtIHhkcHNxLSZndDtuZXh0X3RvX2NsZWFuKTsKJiM0MzsKJiM0MzsJYml0bWFwX3NldCh4ZHBzcS0mZ3Q7cGVuZGluZ19tYXNrLCB4ZHBzcS0mZ3Q7bmV4dF90b19jbGVhbiwgbik7CiYjNDM7CiYjNDM7CW4gPSB4ZHBzcS0mZ3Q7cGVuZGluZyAtIG47CiYjNDM7CWlmIChuKQomIzQzOwkJYml0bWFwX3NldCh4ZHBzcS0mZ3Q7cGVuZGluZ19tYXNrLCAwLCBuKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBzcV9zZXRfcnMoY29uc3Qgc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxKQogewogCXUzMiBudHUsIGNtZDsKIAomIzQzOwlpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseSgmYW1wO2lkcGZfeGRwX2ZiKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgeGRwc3EpKSB7CiYjNDM7CQlpZHBmX3hkcHNxX3NldF9yc19mYih4ZHBzcSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKIAludHUgPSB4ZHBzcS0mZ3Q7bmV4dF90b191c2U7CiAJaWYgKHVubGlrZWx5KCFudHUpKQogCQludHUgPSB4ZHBzcS0mZ3Q7ZGVzY19jb3VudDsKQEAgLTg0LDcgJiM0MzsxNDEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBzcV91cGRhdGVfdGFpbChjb25zdCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EpCiAgKiBTZXQgdGhlIFJTIGJpdCAoJiMzNDtlbmQgb2YgYmF0Y2gmIzM0OyksIGJ1bXAgdGhlIHRhaWwsIGFuZCBxdWV1ZSB0aGUgY2xlYW51cCB0aW1lci4KICAqIFRvIGJlIGNhbGxlZCBhZnRlciBhIE5BUEkgcG9sbGluZyBsb29wLCBhdCB0aGUgZW5kIG9mIC5uZG9feGRwX3htaXQoKSBldGMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcF90eF9maW5hbGl6ZSh2b2lkICpfeGRwc3EsIGJvb2wgc2VudCwgYm9vbCBmbHVzaCkKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgaWRwZl94ZHBfdHhfZmluYWxpemUodm9pZCAqX3hkcHNxLCBib29sIHNlbnQsCiYjNDM7CQkJCQkJIGJvb2wgZmx1c2gpCiB7CiAJc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxID0gX3hkcHNxOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9saWJldGgveGRwLmggYi9pbmNsdWRlL25ldC9saWJldGgveGRwLmgKaW5kZXggODk4NzIzYWI2MmU4MTIuLmVkNjFkODNiZGEyZDc3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9saWJldGgveGRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oCkBAIC00MzAsNiAmIzQzOzQzMCwxOSBAQCBzdHJ1Y3QgbGliZXRoX3hkcHNxIHsKIAlzdHJ1Y3QgbGliZXRoX3hkcHNxX2xvY2sJKmxvY2s7CiB9OwogCiYjNDM7LyoqCiYjNDM7ICogbGliZXRoX3hkcHNxX3RvX3NxIC0gZ2V0IFNRIHBvaW50ZXIgZnJvbSBhbiBYRFBTUSBwb2ludGVyCiYjNDM7ICogQHhkcHNxOiAmYW1wO2xpYmV0aF94ZHBzcSBjb3JyZXNwb25kaW5nIHRvIHRoZSBxdWV1ZQomIzQzOyAqIEB0eXBlOiB0eXBlb2YoKSBvZiB0aGUgZHJpdmVyIFR4IHF1ZXVlIHN0cnVjdHVyZQomIzQzOyAqIEBtZW1iZXI6IG5hbWUgb2YgdGhlIE5UVSBmaWVsZCBpbnNpZGUgQHR5cGUKJiM0MzsgKgomIzQzOyAqIFNvbWUgb2YgdGhlIHNlbmRpbmcgY2FsbGJhY2tzIHRha2Ugb25seSAmYW1wO2xpYmV0aF94ZHBzcSBwb2ludGVyIGFuZCBubyBwb2ludGVyCiYjNDM7ICogdG8gdGhlIGFjdHVhbCBkcml2ZXIgVHggcXVldWUgc3RydWN0dXJlLiBVc2UgdGhpcyBoZWxwZXIgdG8gcXVpY2tseSBqdW1wIHRvCiYjNDM7ICogdGhlIGxhdHRlciB3aGVuIG5lZWRlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIGxpYmV0aF94ZHBzcV90b19zcSh4ZHBzcSwgdHlwZSwgbWVtYmVyKQkJCQkgICAgICBcCiYjNDM7CWNvbnRhaW5lcl9vZl9jb25zdCgoeGRwc3EpLSZndDtudHUsIHR5cGUsIG1lbWJlcikKJiM0MzsKIC8qKgogICogc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyAtIGFic3RyYWN0aW9uIGZvciBhbiBYRFAgVHggZGVzY3JpcHRvcgogICogQGFkZHI6IERNQSBhZGRyZXNzIG9mIHRoZSBmcmFtZQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDc5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSURQRiBYRFAgRmFsbGJhY2sgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2gg4oCTIHNlZW1zIGxpa2UgaXQgaW50cm9kdWNlcyBhIGZhbGxiYWNrIG1vZGUgZm9yIFhEUCBUeCBpbiB0aGUgSW50ZWwgSURQRiBkcml2ZXIsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJdCYjMzk7cyB0b3VjaGluZyBgaWRwZl90eHJ4LmNgLCBgaWRwZl90eHJ4LmhgLCBgeGRwLmNgLCBgeGRwLmhgLCBhbmQgYGluY2x1ZGUvbmV0L2xpYmV0aC94ZHAuaGAsIHNvIGl0JiMzOTtzIGRlZmluaXRlbHkgZGlnZ2luZyBpbnRvIHRoZSBjb3JlIFhEUCBUeCBwYXRoIGZvciB0aGlzIGRyaXZlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB3ZSBhY3R1YWxseSAqcmVhY2gqIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gSURQRiwgaWYgSSByZW1lbWJlciBjb3JyZWN0bHksIGlzIHRoZSAmIzM0O0ludGVsIENvcmUgTklDIEZhbWlseSYjMzQ7IGRyaXZlciDigJMgYSBQQ0kgZGV2aWNlIGRyaXZlci4KClRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjYW4gd2UgcmVhbGlzdGljYWxseSBlbXVsYXRlIG9yIGZ1enogdGhpcz8gU3RhbmRhcmQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgdHlwaWNhbGx5IGRvbiYjMzk7dCBleHBvc2UgUENJIGRldmljZXMgdW5sZXNzIHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgZW11bGF0ZWQuIFN5emthbGxlciAqZG9lcyogaGF2ZSBzb21lIHN1cHBvcnQgZm9yIGZ1enppbmcgUENJIGRldmljZXMgdmlhIHZQQ0kgb3Igc2ltaWxhciwgYnV0IHRoZSByZWFsIGJlbmVmaXQgaXMgaW4gZHJpdmVycyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdGhyb3VnaCBzb2Z0d2FyZSBpbnRlcmZhY2VzIG9yIGhhdmUgYW4gZW11bGF0b3IuIEZvciB0aGlzIGNhc2UsIEkmIzM5O2QgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGlzIGEgd2F5IHRvIGluc3RhbnRpYXRlIG9uZSwgc2luY2UgSURQRiBpcyB0eXBpY2FsbHkgYSBwaHlzaWNhbCBOSUMgZHJpdmVyLgoKSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGFuIElEUEYgZW11bGF0b3IgaXMgYXZhaWxhYmxlIG9yIGlmIGl0JiMzOTtzIHB1cmVseSBoYXJkd2FyZS4gV2FpdCwgbGV0IG1lIGNoZWNrIOKAkyBpcyBJRFBGIGV2ZW4gYSB2aXJ0dWFsIGRldmljZT8gJiMzNDtJbnRlbCBJbmZyYXN0cnVjdHVyZSBEYXRhIFBsYW5lIEZ1bmN0aW9uLCYjMzQ7IHRoYXQgY291bGQgYmUgZWl0aGVyLiBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSURQRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZy0zLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnOjQ6Y29uZmlnIElEUEZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZy01LVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwoUikgSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQYXRoIEZ1bmN0aW9uIFN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWc9MTc9aWYgSURQRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnLTE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnOjE5OmNvbmZpZyBJRFBGX1NJTkdMRVFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZy0yMC1cdGJvb2wgXCYjMzQ7aWRwZiBzaW5nbGVxIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAwOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzU2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBJRFBGIEtjb25maWcqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgY3JhY2sgb3BlbiB0aGUgS2NvbmZpZyBmb3IgSURQRiBhbmQgc2VlIHdoYXQgZ29vZGllcyBhcmUgaGlkZGVuIHdpdGhpbi4mIzM0OyBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGltcGxpZWQgZ29hbHMgaGVyZTogaXMgdGhpcyBhIHNwZWNpZmljIG1vZHVsZT8gT3IgYW4gb3ZlcmFyY2hpbmcgY29uZmlndXJhdGlvbiBzY2hlbWU/IEdpdmVuIG15IGJhY2tncm91bmQsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgdGhlIGNvcmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGEgcGFydGljdWxhciBJbnRlZ3JhdGVkIERldmVsb3BtZW50IFBsYXRmb3JtIEZyYW1ld29yayAoSURQRiksIG9yIGEgc2ltaWxhciBzeXN0ZW0uIEkgd2FudCB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGV4cG9zZWQgb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHBvdGVudGlhbCBmZWF0dXJlIGZsYWdzIHRoYXQgYXJlIHJlbGV2YW50IHRvIG15IGN1cnJlbnQgcHJvamVjdC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBzdXBwb3J0ZWQgaGFyZHdhcmUgdGFyZ2V0cywgdGhlIGF2YWlsYWJsZSBzZWN1cml0eSBmZWF0dXJlcywgYW5kIGhvdyBtb2R1bGFyIHRoZSBJRFBGIGlzLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgS2NvbmZpZyBmaWxlIGlzIGdvaW5nIHRvIGJlIHBhcmFtb3VudCB0byBhbnkga2luZCBvZiBlZmZlY3RpdmUgaW1wbGVtZW50YXRpb24gb3IgY3VzdG9taXphdGlvbiwgc28gbGV0JiMzOTtzIGdldCB0byB3b3JrIGFuZCB1bmRlcnN0YW5kIHRoZSBvcHRpb25zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA5OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0IyBDb3B5cmlnaHQgKEMpIDIwMjQgSW50ZWwgQ29ycG9yYXRpb25cbiAgIDM6XHRcbiAgIDQ6XHRjb25maWcgSURQRlxuICAgNTpcdFx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwoUikgSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQYXRoIEZ1bmN0aW9uIFN1cHBvcnRcJiMzNDtcbiAgIDY6XHRcdGRlcGVuZHMgb24gUENJX01TSVxuICAgNzpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICAgODpcdFx0c2VsZWN0IERJTUxJQlxuICAgOTpcdFx0c2VsZWN0IExJQkVUSF9YRFBcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgSW50ZWwoUikgSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQYXRoIEZ1bmN0aW9uXG4gIDEyOlx0XHQgIGRldmljZXMuXG4gIDEzOlx0XG4gIDE0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbiAgMTU6XHRcdCAgd2lsbCBiZSBjYWxsZWQgaWRwZi5cbiAgMTY6XHRcbiAgMTc6XHRpZiBJRFBGXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnIElEUEZfU0lOR0xFUVxuICAyMDpcdFx0Ym9vbCBcJiMzNDtpZHBmIHNpbmdsZXEgc3VwcG9ydFwmIzM0O1xuICAyMTpcdFx0aGVscFxuICAyMjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGxlZ2FjeSBzaW5nbGUgUngvVHggcXVldWVzIHcvbm9cbiAgMjM6XHRcdCAgY29tcGxldGlvbiBhbmQgZmlsbCBxdWV1ZXMuIE9ubHkgZW5hYmxlIGlmIHlvdSBoYXZlIGhhcmR3YXJlIHdoaWNoXG4gIDI0Olx0XHQgIHdhbnRzIHRvIHdvcmsgaW4gdGhpcyBtb2RlIGFzIGl0IGluY3JlYXNlcyB0aGUgZHJpdmVyIHNpemUgYW5kIGFkZHNcbiAgMjU6XHRcdCAgcnVudG1lIGNoZWNrcyBvbiBob3RwYXRoLlxuICAyNjpcdFxuICAyNzpcdGVuZGlmICMgSURQRlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA5OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NjMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBhIFBDSSBEZXZpY2UgRHJpdmVyOiBJbml0aWFsIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgUENJIGRldmljZSBkcml2ZXIuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaW4gbXkgbWluZCwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGNhbiBiZSBlZmZlY3RpdmVseSBmdXp6ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gV2l0aCBteSBleHBlcmllbmNlLCBJIGtub3cgdGhhdCB0aGVzZSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLCB0aG9zZSB0aGF0ICpkZW1hbmQqIGEgcmVhbCBQQ0kgZGV2aWNlIGFuZCBkb24mIzM5O3QgaGF2ZSBhIHJlbGlhYmxlIGVtdWxhdG9yIHdpdGhpbiBRRU1VIG9yIHN5emthbGxlciwgYXJlIHR5cGljYWxseSBhIHBhaW4uIFRoZSBgcHJvYmVgIGZ1bmN0aW9uIGp1c3Qgd29uJiMzOTt0IHN1Y2NlZWQsIGFuZCwgY29uc2VxdWVudGx5LCB0aGUgbmV0d29yayBkZXZpY2UgKG5ldGRldikgaXQmIzM5O3MgdHJ5aW5nIHRvIHJlZ2lzdGVyIHdpbGwgbmV2ZXIgYXBwZWFyLiBJdCYjMzk7cyBhIGRlYWQgZW5kLCBnZW5lcmFsbHkuCgpTbywgdGhlIG5leHQgb2J2aW91cyBjaGVjayBpcyB3aGV0aGVyIHRoZXJlJiMzOTtzIGFuIGVtdWxhdG9yIGZvciB0aGlzIHNwZWNpZmljIHR5cGUgb2YgZGV2aWNlIOKAkyBhbiBJRFBGIGVtdWxhdG9yIOKAkyB3aXRoaW4gUUVNVS4gSSAqdGhpbmsqIEkgcmVjYWxsIGxvb2tpbmcgZm9yIHNvbWV0aGluZyBsaWtlIHRoYXQgYmVmb3JlLCBhbmQgSSBkb24mIzM5O3QgcmVjYWxsIGl0IGV4aXN0aW5nLiBCdXQgaXQmIzM5O3Mgd29ydGggZG91YmxlLWNoZWNraW5nLiBJZiBRRU1VIGlzIGEgZGVhZCBlbmQsIHRoZSBuZXh0IHBsYWNlIHRvIGxvb2sgaXMgc3l6a2FsbGVyLiBEb2VzIHN5emthbGxlciBvZmZlciBhbnkgc3BlY2lhbGl6ZWQgc3VwcG9ydCBmb3IgSURQRiB0aGF0IEkmIzM5O20gb3Zlcmxvb2tpbmc/IFRoYXQgd291bGQgYmUgYSBodWdlIHRpbWUgc2F2ZXIuIEl04oCZcyB0aGUgb2J2aW91cyByb3V0ZSB0byBzdWNjZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA5OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWRwZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMDk6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM3NQoJCQkJCQkJb3V0cHV0OiA5MwoJCQkJCQkJdGhvdWdodHM6IDU2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyB0aGUgSURQRiBEcml2ZXI6IEEgRnV6emluZyBQZXJzcGVjdGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIGhvdyB3ZSBjYW4gZ2V0IHRvIHRoaXMgY29kZS4gSXQmIzM5O3MgYnVyaWVkIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2AuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBpdCYjMzk7cyBldmVuICpyZWFjaGFibGUqIGluIGEgc3RhbmRhcmQgZnV6emluZyBzZXR1cC4gSWYgdGhlcmUmIzM5O3Mgbm8gaGFyZHdhcmUgcHJlc2VudCwgdGhlIGRyaXZlciB3aWxsIHNpbXBseSBzaXQgdGhlcmUsIGluZXJ0LgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBzZWUgaWYgc3l6a2FsbGVyIGhhcyBzb21lIGtpbmQgb2YgaG9vaywgbWF5YmUgc29tZXRoaW5nIGxpa2UgYHN5el9wY2lfZGV2aWNlYCB0byB0cmlnZ2VyIGl0LiBJIHJlbWVtYmVyIGl0IGhhcyBhIGJ1bmNoIG9mIGhvb2tzIGZvciBkaWZmZXJlbnQgc3Vic3lzdGVtcyBsaWtlIFVTQiAoYHN5el91c2JfY29ubmVjdGApLCA4MDIuMTEgKGBzeXpfODAyMTFfaW5qZWN0X2ZyYW1lYCksIGdlbmV0bGluayAoYHN5el9nZW5ldGxpbmtfZ2V0X2ZhbWlseWApLCBhbmQgbW91bnRpbmcgaW1hZ2VzIChgc3l6X21vdW50X2ltYWdlYCkuIEJ1dCwgZG9lcyBzeXprYWxsZXIgaGF2ZSBhbiBleHBsaWNpdCBwcmltaXRpdmUgZm9yIFBDSSBkZXZpY2VzPyBXYWl0LCAqZG9lcyogc3l6a2FsbGVyIGhhdmUgYHN5el9wY2lfZGV2aWNlYD8gTm8sIHRoYXQmIzM5O3Mgbm90IHJpZ2h0LiBgc3l6X2t2bV9zZXR1cF9jcHVgIGlzIGFzIGNsb3NlIGFzIGl0IGdldHMuIE9rYXksIHdhaXQsICpkb2VzKiBzeXprYWxsZXIgaGF2ZSBgc3l6X3BjaV9kZXZpY2VgPyBObywgaXQgZG9lc24mIzM5O3QuCgpJdCAqZG9lcyogZnV6eiBzb21lIFBDSSBkcml2ZXJzIGlmIHRoZXkgYXJlIGV4cG9zZWQgdGhyb3VnaCBzb21lIHZpcnR1YWwgYnVzLCBidXQgdGhhdCYjMzk7cyB1c3VhbGx5IG5vdCB0aGUgY2FzZS4gTGV0IG1lIGRvdWJsZS1jaGVjayAtIGRvZXMgc3l6a2FsbGVyIGhhdmUgYSBgc3l6X3BjaV9kZXZpY2VgPyBOb3BlLCBub3RoaW5nLgoKQWgsIHJpZ2h0LCB0aGUgcHJvbXB0LiBJIGhhdmUgdG8gY29uc2lkZXIgdGhpczogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4mIzM0OwoKVGhlIElEUEYgaXMgYW4gKmFjdHVhbCogSW50ZWwgTklDOyBpdCYjMzk7cyBhIHBoeXNpY2FsIGRldmljZS4gQW5kIFFFTVUsIGluIGEgc3RhbmRhcmQgc2V0dXAgKG9yIEdDRSBmb3IgdGhhdCBtYXR0ZXIpIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlIElEUEYuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgaGFyZHdhcmUgZGV2aWNlIGxpa2UgSW50ZWwmIzM5O3MgSVBVIChJbmZyYXN0cnVjdHVyZSBQcm9jZXNzaW5nIFVuaXQpICYjMzQ7TW91bnQgRXZhbnMuJiMzNDsgVGhpcyBpc24mIzM5O3QgbGlrZSBhbiBlMTAwMCBvciB2aXJ0aW8tbmV0LCBvciBldmVuIGEgc29mdHdhcmUtZW11bGF0ZWQgVVNCIGdhZGdldC4gUUVNVSBkb2VzIGVtdWxhdGUgc29tZSBOSUNzLCBidXQgbm90IElEUEY7IGl0IGVtdWxhdGVzIHRoaW5ncyBsaWtlIGUxMDAwLCBlMTAwMGUsIGlnYiwgcnRsODEzOSwgcGNuZXQsIG5lMmtfcGNpLCB2bXhuZXQzLCB2aXJ0aW8tbmV0LCB0dWxpcC4gU28sIGFueSBjb2RlIHNwZWNpZmljIHRvIElEUEYgaXMgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgaW4gdGhvc2UgZW52aXJvbm1lbnRzLiBJcyB0aGVyZSBhIHZpcnR1YWwgYnVzPyBObywgSURQRiBpcyBoYXJkd2FyZSBzcGVjaWZpYy4KClRoZXJlZm9yZSwgSSYjMzk7bSBjb25jbHVkaW5nIHRoYXQgdGhpcyBwYXRjaCBpc24mIzM5O3QgV29ydGhGdXp6aW5nLiBUaGUgY29kZSBwYXRocyBhcmUgKmltcG9zc2libGUqIHRvIGhpdCBpbiBhIFFFTVUgb3IgR0NFIGVudmlyb25tZW50IGJlY2F1c2UgdGhlIElEUEYgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCBpc24mIzM5O3QgZW11bGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDA5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIElEUEYgKEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbikgZHJpdmVyLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIG5ldHdvcmsgZHJpdmVyIGZvciBJbnRlbCBJUFVzLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBoYXJkd2FyZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSBvciBHQ0UpLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgSURQRiAoSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQYXRoIEZ1bmN0aW9uKSBkcml2ZXIuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgbmV0d29yayBkcml2ZXIgZm9yIEludGVsIElQVXMuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIGhhcmR3YXJlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VIG9yIEdDRSksIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwOToyODoyOS43MTk0MTI3NjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTI0OTAzNjk4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIElEUEYgKEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbikgZHJpdmVyLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIG5ldHdvcmsgZHJpdmVyIGZvciBJbnRlbCBJUFVzLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBoYXJkd2FyZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSBvciBHQ0UpLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwOToyODoyOS43MTk0MjA1OTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNTQ4MTA0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDViMzljY2JkMzQ2OWQwM2ZkMzBlZmQ2MGNkMWI3ZmM3NzBhNzQ4NzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgOSAwOToyODoyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oXFxuaW5kZXggZWMxYjc1ZjAzOWJiMjUuLjU0MTRiYmJlZTA3YWRkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmhcXG5AQCAtMzg0LDYgKzM4NCw3IEBAIHN0cnVjdCBpZHBmX3Zwb3J0IHtcXG4gXFx0c3RydWN0IGlkcGZfdHhfcXVldWUgKip0eHFzO1xcbiBcXHR1MTYgbnVtX3R4cTtcXG4gXFx0dTE2IG51bV94ZHBfdHhxO1xcbitcXHRib29sIHhkcHNxX2ZiO1xcbiBcXHRib29sIHhkcHNxX3NoYXJlO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKnhkcF9wcm9nO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcXG5pbmRleCA3ZjkwNTY0MDRmNjRmYy4uNjQ3MmJmZjljZWIzN2EgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcXG5AQCAtMjI3LDcgKzIyNyw3IEBAIHN0YXRpYyBpbnQgaWRwZl90eF9kZXNjX2FsbG9jKGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCxcXG4gXFxuIFxcdGlkcGZfeHNrX3NldHVwX3F1ZXVlKHZwb3J0LCB0eF9xLCBWSVJUQ0hOTDJfUVVFVUVfVFlQRV9UWCk7XFxuIFxcbi1cXHRpZiAoIWlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB0eF9xKSlcXG4rXFx0aWYgKCFpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhfcSkgfHwgaWRwZl9xdWV1ZV9oYXMoWERQLCB0eF9xKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRyZWZpbGxxID0gdHhfcS1cXHUwMDNlcmVmaWxscTtcXG5AQCAtMTA1NSw2ICsxMDU1LDExIEBAIHN0YXRpYyB2b2lkIGlkcGZfY2xlYW5fcXVldWVfc2V0KGNvbnN0IHN0cnVjdCBpZHBmX3F1ZXVlX3NldCAqcXMpXFxuIFxcdFxcdFxcdGlmIChpZHBmX3F1ZXVlX2hhcyhYRFAsIHEtXFx1MDAzZXR4cSkpIHtcXG4gXFx0XFx0XFx0XFx0cS1cXHUwMDNldHhxLVxcdTAwM2VwZW5kaW5nID0gMDtcXG4gXFx0XFx0XFx0XFx0cS1cXHUwMDNldHhxLVxcdTAwM2V4ZHBfdHggPSAwO1xcbitcXG4rXFx0XFx0XFx0XFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNmlkcGZfeGRwX2ZiKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHEtXFx1MDAzZXR4cSkpXFxuK1xcdFxcdFxcdFxcdFxcdGJpdG1hcF96ZXJvKHEtXFx1MDAzZXR4cS1cXHUwMDNlcGVuZGluZ19tYXNrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgcS1cXHUwMDNldHhxLVxcdTAwM2VkZXNjX2NvdW50KTtcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0cS1cXHUwMDNldHhxLVxcdTAwM2V0eHFfZ3JwLVxcdTAwM2VudW1fY29tcGxldGlvbnNfcGVuZGluZyA9IDA7XFxuIFxcdFxcdFxcdH1cXG5AQCAtMTMxNyw3ICsxMzIyLDggQEAgc3RhdGljIHZvaWQgaWRwZl90eHFfZ3JvdXBfcmVsKHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMpXFxuIFxcdFxcdFxcdGlmICghdHhxX2dycC1cXHUwMDNldHhxc1tqXSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRcXHRpZiAoaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHR4cV9ncnAtXFx1MDAzZXR4cXNbal0pKSB7XFxuK1xcdFxcdFxcdGlmIChpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhxX2dycC1cXHUwMDNldHhxc1tqXSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICFpZHBmX3F1ZXVlX2hhcyhYRFAsIHR4cV9ncnAtXFx1MDAzZXR4cXNbal0pKSB7XFxuIFxcdFxcdFxcdFxcdGtmcmVlKHR4cV9ncnAtXFx1MDAzZXR4cXNbal0tXFx1MDAzZXJlZmlsbHEpO1xcbiBcXHRcXHRcXHRcXHR0eHFfZ3JwLVxcdTAwM2V0eHFzW2pdLVxcdTAwM2VyZWZpbGxxID0gTlVMTDtcXG4gXFx0XFx0XFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxcbmluZGV4IDRiZTViM2I2ZDNlZDJiLi43ZWJlNTlkODFlMTcwNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguaFxcbkBAIC02MjUsMTEgKzYyNSwxMiBAQCBsaWJldGhfY2FjaGVsaW5lX3NldF9hc3NlcnQoc3RydWN0IGlkcGZfcnhfcXVldWUsXFxuICAqIEBjbGVhbl9idWRnZXQ6IHNpbmdsZXEgb25seSwgcXVldWUgY2xlYW5pbmcgYnVkZ2V0XFxuICAqIEBjbGVhbmVkX3BrdHM6IE51bWJlciBvZiBwYWNrZXRzIGNsZWFuZWQgZm9yIHRoZSBhYm92ZSBzYWlkIGNhc2VcXG4gICogQHJlZmlsbHE6IFBvaW50ZXIgdG8gcmVmaWxsIHF1ZXVlXFxuKyAqIEBjYWNoZWRfdHN0YW1wX2NhcHM6IFR4IHRpbWVzdGFtcCBjYXBhYmlsaXRpZXMgbmVnb3RpYXRlZCB3aXRoIHRoZSBDUFxcbiAgKiBAcGVuZGluZzogbnVtYmVyIG9mIHBlbmRpbmcgZGVzY3JpcHRvcnMgdG8gc2VuZCBpbiBRQlxcbiAgKiBAeGRwX3R4OiBudW1iZXIgb2YgcGVuZGluZyBcXHUwMDI2eGRwX2J1ZmYgb3IgXFx1MDAyNnhkcF9mcmFtZSBidWZmZXJzXFxuICAqIEB0aW1lcjogdGltZXIgZm9yIFhEUCBUeCBxdWV1ZSBjbGVhbnVwXFxuICAqIEB4ZHBfbG9jazogbG9jayBmb3IgWERQIFR4IHF1ZXVlcyBzaGFyaW5nXFxuLSAqIEBjYWNoZWRfdHN0YW1wX2NhcHM6IFR4IHRpbWVzdGFtcCBjYXBhYmlsaXRpZXMgbmVnb3RpYXRlZCB3aXRoIHRoZSBDUFxcbisgKiBAcGVuZGluZ19tYXNrOiBtYXNrIG9mIGJ1ZmZlcnMgd2FpdGluZyBmb3IgY29tcGxldGlvbiBpbiB0aGUgRkIgWERQIG1vZGVcXG4gICogQHRzdGFtcF90YXNrOiBXb3JrIHRoYXQgaGFuZGxlcyBUeCB0aW1lc3RhbXAgcmVhZFxcbiAgKiBAc3RhdHNfc3luYzogU2VlIHN0cnVjdCB1NjRfc3RhdHNfc3luY1xcbiAgKiBAcV9zdGF0czogU2VlIHVuaW9uIGlkcGZfdHhfcXVldWVfc3RhdHNcXG5AQCAtNjg5LDYgKzY5MCw4IEBAIHN0cnVjdCBpZHBmX3R4X3F1ZXVlIHtcXG4gXFx0XFx0XFx0dTE2IGNsZWFuZWRfcGt0cztcXG4gXFxuIFxcdFxcdFxcdHN0cnVjdCBpZHBmX3N3X3F1ZXVlICpyZWZpbGxxO1xcbitcXG4rXFx0XFx0XFx0c3RydWN0IGlkcGZfcHRwX3Zwb3J0X3R4X3RzdGFtcF9jYXBzICpjYWNoZWRfdHN0YW1wX2NhcHM7XFxuIFxcdFxcdH07XFxuIFxcdFxcdHN0cnVjdCB7XFxuIFxcdFxcdFxcdHUzMiBwZW5kaW5nO1xcbkBAIC02OTYsMTAgKzY5OSwxMSBAQCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSB7XFxuIFxcbiBcXHRcXHRcXHRzdHJ1Y3QgbGliZXRoX3hkcHNxX3RpbWVyICp0aW1lcjtcXG4gXFx0XFx0XFx0c3RydWN0IGxpYmV0aF94ZHBzcV9sb2NrIHhkcF9sb2NrO1xcbitcXG4rXFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqcGVuZGluZ19tYXNrO1xcbiBcXHRcXHR9O1xcbiBcXHR9O1xcbiBcXG4tXFx0c3RydWN0IGlkcGZfcHRwX3Zwb3J0X3R4X3RzdGFtcF9jYXBzICpjYWNoZWRfdHN0YW1wX2NhcHM7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCAqdHN0YW1wX3Rhc2s7XFxuIFxcbiBcXHRzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgc3RhdHNfc3luYztcXG5AQCAtNzE4LDggKzcyMiw3IEBAIHN0cnVjdCBpZHBmX3R4X3F1ZXVlIHtcXG4gXFx0X19jYWNoZWxpbmVfZ3JvdXBfZW5kX2FsaWduZWQoY29sZCk7XFxuIH07XFxuIGxpYmV0aF9jYWNoZWxpbmVfc2V0X2Fzc2VydChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgNjQsXFxuLVxcdFxcdFxcdCAgICAxMDQgK1xcbi1cXHRcXHRcXHQgICAgb2Zmc2V0b2Yoc3RydWN0IGlkcGZfdHhfcXVldWUsIGNhY2hlZF90c3RhbXBfY2FwcykgLVxcbitcXHRcXHRcXHQgICAgOTYgKyBvZmZzZXRvZihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgdHN0YW1wX3Rhc2spIC1cXG4gXFx0XFx0XFx0ICAgIG9mZnNldG9mZW5kKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCB0aW1lcikgK1xcbiBcXHRcXHRcXHQgICAgb2Zmc2V0b2Yoc3RydWN0IGlkcGZfdHhfcXVldWUsIHFfc3RhdHMpIC1cXG4gXFx0XFx0XFx0ICAgIG9mZnNldG9mZW5kKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCB0c3RhbXBfdGFzayksXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5jXFxuaW5kZXggY2JjY2Q0NTQ2NzY4MTYuLjhhNGUwYTEzMzY0ZGZjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5jXFxuQEAgLTcsNiArNyw4IEBAXFxuICNpbmNsdWRlIFxcXCJ4ZHAuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhzay5oXFxcIlxcbiBcXG4rREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoaWRwZl94ZHBfZmIpO1xcbitcXG4gc3RhdGljIGludCBpZHBmX3J4cV9mb3JfZWFjaChjb25zdCBzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjICpyc3JjLFxcbiBcXHRcXHRcXHQgICAgIGludCAoKmZuKShzdHJ1Y3QgaWRwZl9yeF9xdWV1ZSAqcnhxLCB2b2lkICphcmcpLFxcbiBcXHRcXHRcXHQgICAgIHZvaWQgKmFyZylcXG5AQCAtMTgzLDggKzE4NSw4IEBAIGludCBpZHBmX3hkcHNxc19nZXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxcbiBcXHRcXHRrZnJlZSh4ZHBzcS1cXHUwMDNlcmVmaWxscSk7XFxuIFxcdFxcdHhkcHNxLVxcdTAwM2VyZWZpbGxxID0gTlVMTDtcXG4gXFxuLVxcdFxcdGlkcGZfcXVldWVfY2xlYXIoRkxPV19TQ0hfRU4sIHhkcHNxKTtcXG4tXFx0XFx0aWRwZl9xdWV1ZV9jbGVhcihGTE9XX1NDSF9FTiwgeGRwc3EtXFx1MDAzZWNvbXBscSk7XFxuK1xcdFxcdGlkcGZfcXVldWVfYXNzaWduKEZMT1dfU0NIX0VOLCB4ZHBzcSwgdnBvcnQtXFx1MDAzZXhkcHNxX2ZiKTtcXG4rXFx0XFx0aWRwZl9xdWV1ZV9hc3NpZ24oRkxPV19TQ0hfRU4sIHhkcHNxLVxcdTAwM2Vjb21wbHEsIHZwb3J0LVxcdTAwM2V4ZHBzcV9mYik7XFxuIFxcdFxcdGlkcGZfcXVldWVfc2V0KE5PSVJRLCB4ZHBzcSk7XFxuIFxcdFxcdGlkcGZfcXVldWVfc2V0KFhEUCwgeGRwc3EpO1xcbiBcXHRcXHRpZHBmX3F1ZXVlX3NldChYRFAsIHhkcHNxLVxcdTAwM2Vjb21wbHEpO1xcbkBAIC0xOTcsNiArMTk5LDI4IEBAIGludCBpZHBmX3hkcHNxc19nZXQoY29uc3Qgc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0KVxcbiBcXHRcXHR4ZHBzcS1cXHUwMDNlcGVuZGluZyA9IDA7XFxuIFxcdFxcdHhkcHNxLVxcdTAwM2V4ZHBfdHggPSAwO1xcbiBcXHRcXHR4ZHBzcS1cXHUwMDNldGhyZXNoID0gbGliZXRoX3hkcF9xdWV1ZV90aHJlc2hvbGQoeGRwc3EtXFx1MDAzZWRlc2NfY291bnQpO1xcbitcXG4rXFx0XFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNmlkcGZfeGRwX2ZiKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHhkcHNxKSkge1xcbitcXHRcXHRcXHR4ZHBzcS1cXHUwMDNlcGVuZGluZ19tYXNrID1cXG4rXFx0XFx0XFx0XFx0Yml0bWFwX3phbGxvY19ub2RlKHhkcHNxLVxcdTAwM2VkZXNjX2NvdW50LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBjcHVfdG9fbWVtKGkgLSBzcXMpKTtcXG4rXFx0XFx0XFx0aWYgKHhkcHNxLVxcdTAwM2VwZW5kaW5nX21hc2spXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0Zm9yIChpbnQgaiA9IGkgLSAxOyBqIFxcdTAwM2U9IHNxczsgai0tKSB7XFxuK1xcdFxcdFxcdFxcdHhkcHNxID0gdnBvcnQtXFx1MDAzZXR4cXNbal07XFxuK1xcbitcXHRcXHRcXHRcXHRpZiAoaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHhkcHNxKSlcXG4rXFx0XFx0XFx0XFx0XFx0Yml0bWFwX2ZyZWUoeGRwc3EtXFx1MDAzZXBlbmRpbmdfbWFzayk7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdGZvciAodTMyIGogPSAwOyBqIFxcdTAwM2MgdnBvcnQtXFx1MDAzZW51bV94ZHBfdHhxOyBqKyspXFxuK1xcdFxcdFxcdFxcdGtmcmVlKHRpbWVyc1tqXSk7XFxuK1xcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMjIyLDYgKzI0NiwxMiBAQCB2b2lkIGlkcGZfeGRwc3FzX3B1dChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXFxuIFxcdFxcdGxpYmV0aF94ZHBzcV9kZWluaXRfdGltZXIoeGRwc3EtXFx1MDAzZXRpbWVyKTtcXG4gXFx0XFx0bGliZXRoX3hkcHNxX3B1dChcXHUwMDI2eGRwc3EtXFx1MDAzZXhkcF9sb2NrLCBkZXYpO1xcbiBcXG4rXFx0XFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNmlkcGZfeGRwX2ZiKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHhkcHNxKSkge1xcbitcXHRcXHRcXHRiaXRtYXBfZnJlZSh4ZHBzcS1cXHUwMDNlcGVuZGluZ19tYXNrKTtcXG4rXFx0XFx0XFx0eGRwc3EtXFx1MDAzZXBlbmRpbmdfbWFzayA9IE5VTEw7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdGtmcmVlKHhkcHNxLVxcdTAwM2V0aW1lcik7XFxuIFxcdFxcdHhkcHNxLVxcdTAwM2VyZWZpbGxxID0gTlVMTDtcXG4gXFx0XFx0aWRwZl9xdWV1ZV9jbGVhcihOT0lSUSwgeGRwc3EpO1xcbkBAIC0yNTAsNiArMjgwLDY1IEBAIHN0YXRpYyBpbnQgaWRwZl94ZHBfcGFyc2VfY3FlKGNvbnN0IHN0cnVjdCBpZHBmX3NwbGl0cV80Yl90eF9jb21wbF9kZXNjICpkZXNjLFxcbiBcXHRyZXR1cm4gdXBwZXJfMTZfYml0cyh2YWwpO1xcbiB9XFxuIFxcbitzdGF0aWMgdTMyIGlkcGZfeGRwc3FfcG9sbF9mYihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpXFxuK3tcXG4rXFx0c3RydWN0IGlkcGZfY29tcGxfcXVldWUgKmNxID0geGRwc3EtXFx1MDAzZWNvbXBscTtcXG4rXFx0dW5zaWduZWQgbG9uZyAqbWFzayA9IHhkcHNxLVxcdTAwM2VwZW5kaW5nX21hc2s7XFxuK1xcdHUzMiBkb25lX2ZyYW1lcywgdHhfY250LCBuZXdfbnRjO1xcbitcXHR1MzIgbnRjID0gY3EtXFx1MDAzZW5leHRfdG9fY2xlYW47XFxuK1xcdHUzMiBjbnQgPSBjcS1cXHUwMDNlZGVzY19jb3VudDtcXG4rXFx0Ym9vbCBnZW47XFxuK1xcbitcXHRnZW4gPSBpZHBmX3F1ZXVlX2hhcyhHRU5fQ0hLLCBjcSk7XFxuK1xcbitcXHRmb3IgKGRvbmVfZnJhbWVzID0gMDsgZG9uZV9mcmFtZXMgXFx1MDAzYyBidWRnZXQ7ICkge1xcbitcXHRcXHRpbnQgcmV0O1xcbitcXG4rXFx0XFx0cmV0ID0gaWRwZl94ZHBfcGFyc2VfY3FlKFxcdTAwMjZjcS1cXHUwMDNlY29tcFtudGNdLmNvbW1vbiwgZ2VuKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNlPSAwKSB7XFxuK1xcdFxcdFxcdF9fY2xlYXJfYml0KHJldCwgbWFzayk7XFxuK1xcdFxcdFxcdGRvbmVfZnJhbWVzKys7XFxuK1xcbitcXHRcXHRcXHRnb3RvIG5leHQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHN3aXRjaCAocmV0KSB7XFxuK1xcdFxcdGNhc2UgLUVOT0RBVEE6XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRjYXNlIC1FSU5WQUw6XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbituZXh0OlxcbitcXHRcXHRpZiAodW5saWtlbHkoKytudGMgPT0gY250KSkge1xcbitcXHRcXHRcXHRudGMgPSAwO1xcbitcXHRcXHRcXHRnZW4gPSAhZ2VuO1xcbitcXHRcXHRcXHRpZHBmX3F1ZXVlX2NoYW5nZShHRU5fQ0hLLCBjcSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rb3V0OlxcbitcXHRjcS1cXHUwMDNlbmV4dF90b19jbGVhbiA9IG50YztcXG4rXFxuK1xcdGlmICh1bmxpa2VseSghZG9uZV9mcmFtZXMpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHR4X2NudCA9IHhkcHNxLVxcdTAwM2VkZXNjX2NvdW50O1xcbitcXG4rXFx0LyogRG9uJ3QgZ28gcGFzdCBuZXh0X3RvX3VzZSAqL1xcbitcXHRfX3NldF9iaXQoeGRwc3EtXFx1MDAzZW5leHRfdG9fdXNlLCBtYXNrKTtcXG4rXFxuK1xcdG5ld19udGMgPSBmaW5kX25leHRfYml0KG1hc2ssIHR4X2NudCwgeGRwc3EtXFx1MDAzZW5leHRfdG9fY2xlYW4pO1xcbitcXHRkb25lX2ZyYW1lcyA9IG5ld19udGMgLSB4ZHBzcS1cXHUwMDNlbmV4dF90b19jbGVhbjtcXG4rXFxuK1xcdGlmIChuZXdfbnRjID09IHR4X2NudClcXG4rXFx0XFx0ZG9uZV9mcmFtZXMgKz0gZmluZF9maXJzdF9iaXQobWFzaywgdHhfY250KTtcXG4rXFxuK1xcdF9fY2xlYXJfYml0KHhkcHNxLVxcdTAwM2VuZXh0X3RvX3VzZSwgbWFzayk7XFxuK1xcbitcXHRyZXR1cm4gZG9uZV9mcmFtZXM7XFxuK31cXG4rXFxuIHUzMiBpZHBmX3hkcHNxX3BvbGwoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxLCB1MzIgYnVkZ2V0KVxcbiB7XFxuIFxcdHN0cnVjdCBpZHBmX2NvbXBsX3F1ZXVlICpjcSA9IHhkcHNxLVxcdTAwM2Vjb21wbHE7XFxuQEAgLTI2MCw2ICszNDksMTAgQEAgdTMyIGlkcGZfeGRwc3FfcG9sbChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpXFxuIFxcdHUzMiBkb25lX2ZyYW1lcztcXG4gXFx0Ym9vbCBnZW47XFxuIFxcbitcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2aWRwZl94ZHBfZmIpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgeGRwc3EpKVxcbitcXHRcXHRyZXR1cm4gaWRwZl94ZHBzcV9wb2xsX2ZiKHhkcHNxLCBidWRnZXQpO1xcbitcXG4gXFx0Z2VuID0gaWRwZl9xdWV1ZV9oYXMoR0VOX0NISywgY3EpO1xcbiBcXG4gXFx0Zm9yIChkb25lX2ZyYW1lcyA9IDA7IGRvbmVfZnJhbWVzIFxcdTAwM2MgYnVkZ2V0OyApIHtcXG5AQCAtNDc5LDYgKzU3MiwyNCBAQCBzdGF0aWMgaW50IGlkcGZfeGRwX3NldHVwX3Byb2coc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0LFxcbiBcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4gXFx0fVxcbiBcXG4rXFx0dnBvcnQtXFx1MDAzZXhkcHNxX2ZiID0gIWlkcGZfaXNfY2FwX2VuYSh2cG9ydC1cXHUwMDNlYWRhcHRlciwgSURQRl9PVEhFUl9DQVBTLFxcbitcXHRcXHRcXHRcXHRcXHQgICBWSVJUQ0hOTDJfQ0FQX1NQTElUUV9RU0NIRUQpO1xcbitcXHRpZiAoIXZwb3J0LVxcdTAwM2V4ZHBzcV9mYilcXG4rXFx0XFx0Z290byByZXNldDtcXG4rXFxuK1xcdGlmIChwcm9nKSB7XFxuK1xcdFxcdGJvb2wgd2FybiA9ICFzdGF0aWNfa2V5X2VuYWJsZWQoXFx1MDAyNmlkcGZfeGRwX2ZiKTtcXG4rXFxuK1xcdFxcdHN0YXRpY19icmFuY2hfaW5jKFxcdTAwMjZpZHBmX3hkcF9mYik7XFxuK1xcbitcXHRcXHRpZiAod2FybiBcXHUwMDI2XFx1MDAyNiBuZXRfcmF0ZWxpbWl0KCkpXFxuK1xcdFxcdFxcdG5ldGRldl93YXJuKHZwb3J0LVxcdTAwM2VuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiVGhlIEZXIGRvZXNuJ3Qgc3VwcG9ydCBUeCBpbiBGSUZPIG1vZGUsIFhEUCBUeCBwZXJmb3JtYW5jZSBtaWdodCBiZSBzdWJvcHRpbWFsXFxcXG5cXFwiKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c3RhdGljX2JyYW5jaF9kZWMoXFx1MDAyNmlkcGZfeGRwX2ZiKTtcXG4rXFx0fVxcbitcXG4rcmVzZXQ6XFxuIFxcdG9sZCA9IGNmZy1cXHUwMDNldXNlcl9jb25maWcueGRwX3Byb2c7XFxuIFxcdGNmZy1cXHUwMDNldXNlcl9jb25maWcueGRwX3Byb2cgPSBwcm9nO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmhcXG5pbmRleCA2M2U1NmY3ZDQzZTAwMi4uM2QwMWM1MzViZDRjNjAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmhcXG5AQCAtOCw2ICs4LDEwIEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwiaWRwZl90eHJ4LmhcXFwiXFxuIFxcbitzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjO1xcbitcXG4rREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGlkcGZfeGRwX2ZiKTtcXG4rXFxuIGludCBpZHBmX3hkcF9yeHFfaW5mb19pbml0KHN0cnVjdCBpZHBmX3J4X3F1ZXVlICpyeHEpO1xcbiBpbnQgaWRwZl94ZHBfcnhxX2luZm9faW5pdF9hbGwoY29uc3Qgc3RydWN0IGlkcGZfcV92ZWNfcnNyYyAqcnNyYyk7XFxuIHZvaWQgaWRwZl94ZHBfcnhxX2luZm9fZGVpbml0KHN0cnVjdCBpZHBmX3J4X3F1ZXVlICpyeHEsIHUzMiBtb2RlbCk7XFxuQEAgLTIxLDYgKzI1LDM0IEBAIHZvaWQgaWRwZl94ZHBzcXNfcHV0KGNvbnN0IHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCk7XFxuIHUzMiBpZHBmX3hkcHNxX3BvbGwoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxLCB1MzIgYnVkZ2V0KTtcXG4gYm9vbCBpZHBmX3hkcF90eF9mbHVzaF9idWxrKHN0cnVjdCBsaWJldGhfeGRwX3R4X2J1bGsgKmJxLCB1MzIgZmxhZ3MpO1xcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X3htaXRfZmIoc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyBkZXNjLCB1MzIgaSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBsaWJldGhfeGRwc3EgKnNxLCB1NjQgcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgaWRwZl9mbGV4X3R4X3NjaGVkX2Rlc2MgKnR4X2Rlc2MgPSBzcS1cXHUwMDNlZGVzY3M7XFxuK1xcdHUzMiBjbWQ7XFxuK1xcbitcXHRjbWQgPSBGSUVMRF9QUkVQKElEUEZfVFhEX0ZMRVhfRkxPV19EVFlQRV9NLFxcbitcXHRcXHRcXHQgSURQRl9UWF9ERVNDX0RUWVBFX0ZMRVhfRkxPV19TQ0hFKTtcXG4rXFx0aWYgKGRlc2MuZmxhZ3MgXFx1MDAyNiBMSUJFVEhfWERQX1RYX0xBU1QpXFxuK1xcdFxcdGNtZCB8PSBJRFBGX1RYRF9GTEVYX0ZMT1dfQ01EX0VPUDtcXG4rXFx0aWYgKHByaXYgXFx1MDAyNlxcdTAwMjYgKGRlc2MuZmxhZ3MgXFx1MDAyNiBMSUJFVEhfWERQX1RYX0NTVU0pKVxcbitcXHRcXHRjbWQgfD0gSURQRl9UWERfRkxFWF9GTE9XX0NNRF9DU19FTjtcXG4rXFxuK1xcdHR4X2Rlc2MgPSBcXHUwMDI2dHhfZGVzY1tpXTtcXG4rXFx0dHhfZGVzYy1cXHUwMDNlYnVmX2FkZHIgPSBjcHVfdG9fbGU2NChkZXNjLmFkZHIpO1xcbitcXG4rI2lmZGVmIF9fTElCRVRIX1dPUkRfQUNDRVNTXFxuK1xcdCoodTY0ICopXFx1MDAyNnR4X2Rlc2MtXFx1MDAzZXF3MSA9ICgodTY0KWRlc2MubGVuIFxcdTAwM2NcXHUwMDNjIDQ4KSB8ICgodTY0KWkgXFx1MDAzY1xcdTAwM2MgMzIpIHwgY21kO1xcbisjZWxzZVxcbitcXHR0eF9kZXNjLVxcdTAwM2VxdzEucnhyX2J1ZnNpemUgPSBjcHVfdG9fbGUxNihkZXNjLmxlbik7XFxuK1xcdHR4X2Rlc2MtXFx1MDAzZXF3MS5jb21wbF90YWcgPSBjcHVfdG9fbGUxNihpKTtcXG4rXFx0dHhfZGVzYy1cXHUwMDNlcXcxLnRzWzBdID0gMDtcXG4rXFx0dHhfZGVzYy1cXHUwMDNlcXcxLnRzWzFdID0gMDtcXG4rXFx0dHhfZGVzYy1cXHUwMDNlcXcxLnRzWzJdID0gMDtcXG4rXFx0dHhfZGVzYy1cXHUwMDNlcXcxLmNtZF9kdHlwZSA9IGNtZDtcXG4rI2VuZGlmXFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpZHBmX3hkcF90eF94bWl0IC0gcHJvZHVjZSBhIHNpbmdsZSBIVyBUeCBkZXNjcmlwdG9yIG91dCBvZiBYRFAgZGVzY1xcbiAgKiBAZGVzYzogWERQIGRlc2NyaXB0b3IgdG8gcHVsbCB0aGUgRE1BIGFkZHJlc3MgYW5kIGxlbmd0aCBmcm9tXFxuQEAgLTM0LDYgKzY2LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcF90eF94bWl0KHN0cnVjdCBsaWJldGhfeGRwX3R4X2Rlc2MgZGVzYywgdTMyIGksXFxuIFxcdHN0cnVjdCBpZHBmX2ZsZXhfdHhfZGVzYyAqdHhfZGVzYyA9IHNxLVxcdTAwM2VkZXNjcztcXG4gXFx0dTMyIGNtZDtcXG4gXFxuK1xcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZpZHBmX3hkcF9mYikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLFxcbitcXHRcXHRcXHQgICBsaWJldGhfeGRwc3FfdG9fc3Eoc3EsIHN0cnVjdCBpZHBmX3R4X3F1ZXVlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBuZXh0X3RvX3VzZSkpKSB7XFxuK1xcdFxcdGlkcGZfeGRwX3R4X3htaXRfZmIoZGVzYywgaSwgc3EsIHByaXYpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuIFxcdGNtZCA9IEZJRUxEX1BSRVAoSURQRl9GTEVYX1RYRF9RVzFfRFRZUEVfTSxcXG4gXFx0XFx0XFx0IElEUEZfVFhfREVTQ19EVFlQRV9GTEVYX0wyVEFHMV9MMlRBRzIpO1xcbiBcXHRpZiAoZGVzYy5mbGFncyBcXHUwMDI2IExJQkVUSF9YRFBfVFhfTEFTVClcXG5AQCAtNTMsMTAgKzkzLDI3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcF90eF94bWl0KHN0cnVjdCBsaWJldGhfeGRwX3R4X2Rlc2MgZGVzYywgdTMyIGksXFxuICNlbmRpZlxcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBzcV9zZXRfcnNfZmIoY29uc3Qgc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxKVxcbit7XFxuK1xcdHUzMiBuID0gbWluKHhkcHNxLVxcdTAwM2VwZW5kaW5nLCB4ZHBzcS1cXHUwMDNlZGVzY19jb3VudCAtIHhkcHNxLVxcdTAwM2VuZXh0X3RvX2NsZWFuKTtcXG4rXFxuK1xcdGJpdG1hcF9zZXQoeGRwc3EtXFx1MDAzZXBlbmRpbmdfbWFzaywgeGRwc3EtXFx1MDAzZW5leHRfdG9fY2xlYW4sIG4pO1xcbitcXG4rXFx0biA9IHhkcHNxLVxcdTAwM2VwZW5kaW5nIC0gbjtcXG4rXFx0aWYgKG4pXFxuK1xcdFxcdGJpdG1hcF9zZXQoeGRwc3EtXFx1MDAzZXBlbmRpbmdfbWFzaywgMCwgbik7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcHNxX3NldF9ycyhjb25zdCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EpXFxuIHtcXG4gXFx0dTMyIG50dSwgY21kO1xcbiBcXG4rXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNmlkcGZfeGRwX2ZiKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHhkcHNxKSkge1xcbitcXHRcXHRpZHBmX3hkcHNxX3NldF9yc19mYih4ZHBzcSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4gXFx0bnR1ID0geGRwc3EtXFx1MDAzZW5leHRfdG9fdXNlO1xcbiBcXHRpZiAodW5saWtlbHkoIW50dSkpXFxuIFxcdFxcdG50dSA9IHhkcHNxLVxcdTAwM2VkZXNjX2NvdW50O1xcbkBAIC04NCw3ICsxNDEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaWRwZl94ZHBzcV91cGRhdGVfdGFpbChjb25zdCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EpXFxuICAqIFNldCB0aGUgUlMgYml0IChcXFwiZW5kIG9mIGJhdGNoXFxcIiksIGJ1bXAgdGhlIHRhaWwsIGFuZCBxdWV1ZSB0aGUgY2xlYW51cCB0aW1lci5cXG4gICogVG8gYmUgY2FsbGVkIGFmdGVyIGEgTkFQSSBwb2xsaW5nIGxvb3AsIGF0IHRoZSBlbmQgb2YgLm5kb194ZHBfeG1pdCgpIGV0Yy5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcF90eF9maW5hbGl6ZSh2b2lkICpfeGRwc3EsIGJvb2wgc2VudCwgYm9vbCBmbHVzaClcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGlkcGZfeGRwX3R4X2ZpbmFsaXplKHZvaWQgKl94ZHBzcSwgYm9vbCBzZW50LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgYm9vbCBmbHVzaClcXG4ge1xcbiBcXHRzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EgPSBfeGRwc3E7XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9saWJldGgveGRwLmggYi9pbmNsdWRlL25ldC9saWJldGgveGRwLmhcXG5pbmRleCA4OTg3MjNhYjYyZTgxMi4uZWQ2MWQ4M2JkYTJkNzcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oXFxuQEAgLTQzMCw2ICs0MzAsMTkgQEAgc3RydWN0IGxpYmV0aF94ZHBzcSB7XFxuIFxcdHN0cnVjdCBsaWJldGhfeGRwc3FfbG9ja1xcdCpsb2NrO1xcbiB9O1xcbiBcXG4rLyoqXFxuKyAqIGxpYmV0aF94ZHBzcV90b19zcSAtIGdldCBTUSBwb2ludGVyIGZyb20gYW4gWERQU1EgcG9pbnRlclxcbisgKiBAeGRwc3E6IFxcdTAwMjZsaWJldGhfeGRwc3EgY29ycmVzcG9uZGluZyB0byB0aGUgcXVldWVcXG4rICogQHR5cGU6IHR5cGVvZigpIG9mIHRoZSBkcml2ZXIgVHggcXVldWUgc3RydWN0dXJlXFxuKyAqIEBtZW1iZXI6IG5hbWUgb2YgdGhlIE5UVSBmaWVsZCBpbnNpZGUgQHR5cGVcXG4rICpcXG4rICogU29tZSBvZiB0aGUgc2VuZGluZyBjYWxsYmFja3MgdGFrZSBvbmx5IFxcdTAwMjZsaWJldGhfeGRwc3EgcG9pbnRlciBhbmQgbm8gcG9pbnRlclxcbisgKiB0byB0aGUgYWN0dWFsIGRyaXZlciBUeCBxdWV1ZSBzdHJ1Y3R1cmUuIFVzZSB0aGlzIGhlbHBlciB0byBxdWlja2x5IGp1bXAgdG9cXG4rICogdGhlIGxhdHRlciB3aGVuIG5lZWRlZC5cXG4rICovXFxuKyNkZWZpbmUgbGliZXRoX3hkcHNxX3RvX3NxKHhkcHNxLCB0eXBlLCBtZW1iZXIpXFx0XFx0XFx0XFx0ICAgICAgXFxcXFxcbitcXHRjb250YWluZXJfb2ZfY29uc3QoKHhkcHNxKS1cXHUwMDNlbnR1LCB0eXBlLCBtZW1iZXIpXFxuK1xcbiAvKipcXG4gICogc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyAtIGFic3RyYWN0aW9uIGZvciBhbiBYRFAgVHggZGVzY3JpcHRvclxcbiAgKiBAYWRkcjogRE1BIGFkZHJlc3Mgb2YgdGhlIGZyYW1lXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA5OjI4OjMwLjQyNTk0MTg0MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1NDI0OTczNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBJRFBGIChJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24pIGRyaXZlci4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBuZXR3b3JrIGRyaXZlciBmb3IgSW50ZWwgSVBVcy4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUgb3IgR0NFKSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YjM5Y2NiZDM0NjlkMDNmZDMwZWZkNjBjZDFiN2ZjNzcwYTc0ODcxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAwOToyODoyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmLmhcbmluZGV4IGVjMWI3NWYwMzliYjI1Li41NDE0YmJiZWUwN2FkZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGYuaFxuQEAgLTM4NCw2ICszODQsNyBAQCBzdHJ1Y3QgaWRwZl92cG9ydCB7XG4gXHRzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqKnR4cXM7XG4gXHR1MTYgbnVtX3R4cTtcbiBcdHUxNiBudW1feGRwX3R4cTtcbitcdGJvb2wgeGRwc3FfZmI7XG4gXHRib29sIHhkcHNxX3NoYXJlO1xuIFx0c3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZztcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuaW5kZXggN2Y5MDU2NDA0ZjY0ZmMuLjY0NzJiZmY5Y2ViMzdhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuQEAgLTIyNyw3ICsyMjcsNyBAQCBzdGF0aWMgaW50IGlkcGZfdHhfZGVzY19hbGxvYyhjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQsXG4gXG4gXHRpZHBmX3hza19zZXR1cF9xdWV1ZSh2cG9ydCwgdHhfcSwgVklSVENITkwyX1FVRVVFX1RZUEVfVFgpO1xuIFxuLVx0aWYgKCFpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgdHhfcSkpXG4rXHRpZiAoIWlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB0eF9xKSB8fCBpZHBmX3F1ZXVlX2hhcyhYRFAsIHR4X3EpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHJlZmlsbHEgPSB0eF9xLVx1MDAzZXJlZmlsbHE7XG5AQCAtMTA1NSw2ICsxMDU1LDExIEBAIHN0YXRpYyB2b2lkIGlkcGZfY2xlYW5fcXVldWVfc2V0KGNvbnN0IHN0cnVjdCBpZHBmX3F1ZXVlX3NldCAqcXMpXG4gXHRcdFx0aWYgKGlkcGZfcXVldWVfaGFzKFhEUCwgcS1cdTAwM2V0eHEpKSB7XG4gXHRcdFx0XHRxLVx1MDAzZXR4cS1cdTAwM2VwZW5kaW5nID0gMDtcbiBcdFx0XHRcdHEtXHUwMDNldHhxLVx1MDAzZXhkcF90eCA9IDA7XG4rXG4rXHRcdFx0XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZpZHBmX3hkcF9mYikgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHEtXHUwMDNldHhxKSlcbitcdFx0XHRcdFx0Yml0bWFwX3plcm8ocS1cdTAwM2V0eHEtXHUwMDNlcGVuZGluZ19tYXNrLFxuK1x0XHRcdFx0XHRcdCAgICBxLVx1MDAzZXR4cS1cdTAwM2VkZXNjX2NvdW50KTtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0cS1cdTAwM2V0eHEtXHUwMDNldHhxX2dycC1cdTAwM2VudW1fY29tcGxldGlvbnNfcGVuZGluZyA9IDA7XG4gXHRcdFx0fVxuQEAgLTEzMTcsNyArMTMyMiw4IEBAIHN0YXRpYyB2b2lkIGlkcGZfdHhxX2dyb3VwX3JlbChzdHJ1Y3QgaWRwZl9xX3ZlY19yc3JjICpyc3JjKVxuIFx0XHRcdGlmICghdHhxX2dycC1cdTAwM2V0eHFzW2pdKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0aWYgKGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB0eHFfZ3JwLVx1MDAzZXR4cXNbal0pKSB7XG4rXHRcdFx0aWYgKGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB0eHFfZ3JwLVx1MDAzZXR4cXNbal0pIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAhaWRwZl9xdWV1ZV9oYXMoWERQLCB0eHFfZ3JwLVx1MDAzZXR4cXNbal0pKSB7XG4gXHRcdFx0XHRrZnJlZSh0eHFfZ3JwLVx1MDAzZXR4cXNbal0tXHUwMDNlcmVmaWxscSk7XG4gXHRcdFx0XHR0eHFfZ3JwLVx1MDAzZXR4cXNbal0tXHUwMDNlcmVmaWxscSA9IE5VTEw7XG4gXHRcdFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oXG5pbmRleCA0YmU1YjNiNmQzZWQyYi4uN2ViZTU5ZDgxZTE3MDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5oXG5AQCAtNjI1LDExICs2MjUsMTIgQEAgbGliZXRoX2NhY2hlbGluZV9zZXRfYXNzZXJ0KHN0cnVjdCBpZHBmX3J4X3F1ZXVlLFxuICAqIEBjbGVhbl9idWRnZXQ6IHNpbmdsZXEgb25seSwgcXVldWUgY2xlYW5pbmcgYnVkZ2V0XG4gICogQGNsZWFuZWRfcGt0czogTnVtYmVyIG9mIHBhY2tldHMgY2xlYW5lZCBmb3IgdGhlIGFib3ZlIHNhaWQgY2FzZVxuICAqIEByZWZpbGxxOiBQb2ludGVyIHRvIHJlZmlsbCBxdWV1ZVxuKyAqIEBjYWNoZWRfdHN0YW1wX2NhcHM6IFR4IHRpbWVzdGFtcCBjYXBhYmlsaXRpZXMgbmVnb3RpYXRlZCB3aXRoIHRoZSBDUFxuICAqIEBwZW5kaW5nOiBudW1iZXIgb2YgcGVuZGluZyBkZXNjcmlwdG9ycyB0byBzZW5kIGluIFFCXG4gICogQHhkcF90eDogbnVtYmVyIG9mIHBlbmRpbmcgXHUwMDI2eGRwX2J1ZmYgb3IgXHUwMDI2eGRwX2ZyYW1lIGJ1ZmZlcnNcbiAgKiBAdGltZXI6IHRpbWVyIGZvciBYRFAgVHggcXVldWUgY2xlYW51cFxuICAqIEB4ZHBfbG9jazogbG9jayBmb3IgWERQIFR4IHF1ZXVlcyBzaGFyaW5nXG4tICogQGNhY2hlZF90c3RhbXBfY2FwczogVHggdGltZXN0YW1wIGNhcGFiaWxpdGllcyBuZWdvdGlhdGVkIHdpdGggdGhlIENQXG4rICogQHBlbmRpbmdfbWFzazogbWFzayBvZiBidWZmZXJzIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24gaW4gdGhlIEZCIFhEUCBtb2RlXG4gICogQHRzdGFtcF90YXNrOiBXb3JrIHRoYXQgaGFuZGxlcyBUeCB0aW1lc3RhbXAgcmVhZFxuICAqIEBzdGF0c19zeW5jOiBTZWUgc3RydWN0IHU2NF9zdGF0c19zeW5jXG4gICogQHFfc3RhdHM6IFNlZSB1bmlvbiBpZHBmX3R4X3F1ZXVlX3N0YXRzXG5AQCAtNjg5LDYgKzY5MCw4IEBAIHN0cnVjdCBpZHBmX3R4X3F1ZXVlIHtcbiBcdFx0XHR1MTYgY2xlYW5lZF9wa3RzO1xuIFxuIFx0XHRcdHN0cnVjdCBpZHBmX3N3X3F1ZXVlICpyZWZpbGxxO1xuK1xuK1x0XHRcdHN0cnVjdCBpZHBmX3B0cF92cG9ydF90eF90c3RhbXBfY2FwcyAqY2FjaGVkX3RzdGFtcF9jYXBzO1xuIFx0XHR9O1xuIFx0XHRzdHJ1Y3Qge1xuIFx0XHRcdHUzMiBwZW5kaW5nO1xuQEAgLTY5NiwxMCArNjk5LDExIEBAIHN0cnVjdCBpZHBmX3R4X3F1ZXVlIHtcbiBcbiBcdFx0XHRzdHJ1Y3QgbGliZXRoX3hkcHNxX3RpbWVyICp0aW1lcjtcbiBcdFx0XHRzdHJ1Y3QgbGliZXRoX3hkcHNxX2xvY2sgeGRwX2xvY2s7XG4rXG4rXHRcdFx0dW5zaWduZWQgbG9uZyAqcGVuZGluZ19tYXNrO1xuIFx0XHR9O1xuIFx0fTtcbiBcbi1cdHN0cnVjdCBpZHBmX3B0cF92cG9ydF90eF90c3RhbXBfY2FwcyAqY2FjaGVkX3RzdGFtcF9jYXBzO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0ICp0c3RhbXBfdGFzaztcbiBcbiBcdHN0cnVjdCB1NjRfc3RhdHNfc3luYyBzdGF0c19zeW5jO1xuQEAgLTcxOCw4ICs3MjIsNyBAQCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSB7XG4gXHRfX2NhY2hlbGluZV9ncm91cF9lbmRfYWxpZ25lZChjb2xkKTtcbiB9O1xuIGxpYmV0aF9jYWNoZWxpbmVfc2V0X2Fzc2VydChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgNjQsXG4tXHRcdFx0ICAgIDEwNCArXG4tXHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCBjYWNoZWRfdHN0YW1wX2NhcHMpIC1cbitcdFx0XHQgICAgOTYgKyBvZmZzZXRvZihzdHJ1Y3QgaWRwZl90eF9xdWV1ZSwgdHN0YW1wX3Rhc2spIC1cbiBcdFx0XHQgICAgb2Zmc2V0b2ZlbmQoc3RydWN0IGlkcGZfdHhfcXVldWUsIHRpbWVyKSArXG4gXHRcdFx0ICAgIG9mZnNldG9mKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCBxX3N0YXRzKSAtXG4gXHRcdFx0ICAgIG9mZnNldG9mZW5kKHN0cnVjdCBpZHBmX3R4X3F1ZXVlLCB0c3RhbXBfdGFzayksXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmNcbmluZGV4IGNiY2NkNDU0Njc2ODE2Li44YTRlMGExMzM2NGRmYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYveGRwLmNcbkBAIC03LDYgKzcsOCBAQFxuICNpbmNsdWRlIFwieGRwLmhcIlxuICNpbmNsdWRlIFwieHNrLmhcIlxuIFxuK0RFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGlkcGZfeGRwX2ZiKTtcbitcbiBzdGF0aWMgaW50IGlkcGZfcnhxX2Zvcl9lYWNoKGNvbnN0IHN0cnVjdCBpZHBmX3FfdmVjX3JzcmMgKnJzcmMsXG4gXHRcdFx0ICAgICBpbnQgKCpmbikoc3RydWN0IGlkcGZfcnhfcXVldWUgKnJ4cSwgdm9pZCAqYXJnKSxcbiBcdFx0XHQgICAgIHZvaWQgKmFyZylcbkBAIC0xODMsOCArMTg1LDggQEAgaW50IGlkcGZfeGRwc3FzX2dldChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXG4gXHRcdGtmcmVlKHhkcHNxLVx1MDAzZXJlZmlsbHEpO1xuIFx0XHR4ZHBzcS1cdTAwM2VyZWZpbGxxID0gTlVMTDtcbiBcbi1cdFx0aWRwZl9xdWV1ZV9jbGVhcihGTE9XX1NDSF9FTiwgeGRwc3EpO1xuLVx0XHRpZHBmX3F1ZXVlX2NsZWFyKEZMT1dfU0NIX0VOLCB4ZHBzcS1cdTAwM2Vjb21wbHEpO1xuK1x0XHRpZHBmX3F1ZXVlX2Fzc2lnbihGTE9XX1NDSF9FTiwgeGRwc3EsIHZwb3J0LVx1MDAzZXhkcHNxX2ZiKTtcbitcdFx0aWRwZl9xdWV1ZV9hc3NpZ24oRkxPV19TQ0hfRU4sIHhkcHNxLVx1MDAzZWNvbXBscSwgdnBvcnQtXHUwMDNleGRwc3FfZmIpO1xuIFx0XHRpZHBmX3F1ZXVlX3NldChOT0lSUSwgeGRwc3EpO1xuIFx0XHRpZHBmX3F1ZXVlX3NldChYRFAsIHhkcHNxKTtcbiBcdFx0aWRwZl9xdWV1ZV9zZXQoWERQLCB4ZHBzcS1cdTAwM2Vjb21wbHEpO1xuQEAgLTE5Nyw2ICsxOTksMjggQEAgaW50IGlkcGZfeGRwc3FzX2dldChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXG4gXHRcdHhkcHNxLVx1MDAzZXBlbmRpbmcgPSAwO1xuIFx0XHR4ZHBzcS1cdTAwM2V4ZHBfdHggPSAwO1xuIFx0XHR4ZHBzcS1cdTAwM2V0aHJlc2ggPSBsaWJldGhfeGRwX3F1ZXVlX3RocmVzaG9sZCh4ZHBzcS1cdTAwM2VkZXNjX2NvdW50KTtcbitcbitcdFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2aWRwZl94ZHBfZmIpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHhkcHNxKSkge1xuK1x0XHRcdHhkcHNxLVx1MDAzZXBlbmRpbmdfbWFzayA9XG4rXHRcdFx0XHRiaXRtYXBfemFsbG9jX25vZGUoeGRwc3EtXHUwMDNlZGVzY19jb3VudCxcbitcdFx0XHRcdFx0XHQgICBHRlBfS0VSTkVMLFxuK1x0XHRcdFx0XHRcdCAgIGNwdV90b19tZW0oaSAtIHNxcykpO1xuK1x0XHRcdGlmICh4ZHBzcS1cdTAwM2VwZW5kaW5nX21hc2spXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRmb3IgKGludCBqID0gaSAtIDE7IGogXHUwMDNlPSBzcXM7IGotLSkge1xuK1x0XHRcdFx0eGRwc3EgPSB2cG9ydC1cdTAwM2V0eHFzW2pdO1xuK1xuK1x0XHRcdFx0aWYgKGlkcGZfcXVldWVfaGFzKEZMT1dfU0NIX0VOLCB4ZHBzcSkpXG4rXHRcdFx0XHRcdGJpdG1hcF9mcmVlKHhkcHNxLVx1MDAzZXBlbmRpbmdfbWFzayk7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdGZvciAodTMyIGogPSAwOyBqIFx1MDAzYyB2cG9ydC1cdTAwM2VudW1feGRwX3R4cTsgaisrKVxuK1x0XHRcdFx0a2ZyZWUodGltZXJzW2pdKTtcbitcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMjIyLDYgKzI0NiwxMiBAQCB2b2lkIGlkcGZfeGRwc3FzX3B1dChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpXG4gXHRcdGxpYmV0aF94ZHBzcV9kZWluaXRfdGltZXIoeGRwc3EtXHUwMDNldGltZXIpO1xuIFx0XHRsaWJldGhfeGRwc3FfcHV0KFx1MDAyNnhkcHNxLVx1MDAzZXhkcF9sb2NrLCBkZXYpO1xuIFxuK1x0XHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZpZHBmX3hkcF9mYikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgeGRwc3EpKSB7XG4rXHRcdFx0Yml0bWFwX2ZyZWUoeGRwc3EtXHUwMDNlcGVuZGluZ19tYXNrKTtcbitcdFx0XHR4ZHBzcS1cdTAwM2VwZW5kaW5nX21hc2sgPSBOVUxMO1xuK1x0XHR9XG4rXG4gXHRcdGtmcmVlKHhkcHNxLVx1MDAzZXRpbWVyKTtcbiBcdFx0eGRwc3EtXHUwMDNlcmVmaWxscSA9IE5VTEw7XG4gXHRcdGlkcGZfcXVldWVfY2xlYXIoTk9JUlEsIHhkcHNxKTtcbkBAIC0yNTAsNiArMjgwLDY1IEBAIHN0YXRpYyBpbnQgaWRwZl94ZHBfcGFyc2VfY3FlKGNvbnN0IHN0cnVjdCBpZHBmX3NwbGl0cV80Yl90eF9jb21wbF9kZXNjICpkZXNjLFxuIFx0cmV0dXJuIHVwcGVyXzE2X2JpdHModmFsKTtcbiB9XG4gXG4rc3RhdGljIHUzMiBpZHBmX3hkcHNxX3BvbGxfZmIoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxLCB1MzIgYnVkZ2V0KVxuK3tcbitcdHN0cnVjdCBpZHBmX2NvbXBsX3F1ZXVlICpjcSA9IHhkcHNxLVx1MDAzZWNvbXBscTtcbitcdHVuc2lnbmVkIGxvbmcgKm1hc2sgPSB4ZHBzcS1cdTAwM2VwZW5kaW5nX21hc2s7XG4rXHR1MzIgZG9uZV9mcmFtZXMsIHR4X2NudCwgbmV3X250YztcbitcdHUzMiBudGMgPSBjcS1cdTAwM2VuZXh0X3RvX2NsZWFuO1xuK1x0dTMyIGNudCA9IGNxLVx1MDAzZWRlc2NfY291bnQ7XG4rXHRib29sIGdlbjtcbitcbitcdGdlbiA9IGlkcGZfcXVldWVfaGFzKEdFTl9DSEssIGNxKTtcbitcbitcdGZvciAoZG9uZV9mcmFtZXMgPSAwOyBkb25lX2ZyYW1lcyBcdTAwM2MgYnVkZ2V0OyApIHtcbitcdFx0aW50IHJldDtcbitcbitcdFx0cmV0ID0gaWRwZl94ZHBfcGFyc2VfY3FlKFx1MDAyNmNxLVx1MDAzZWNvbXBbbnRjXS5jb21tb24sIGdlbik7XG4rXHRcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4rXHRcdFx0X19jbGVhcl9iaXQocmV0LCBtYXNrKTtcbitcdFx0XHRkb25lX2ZyYW1lcysrO1xuK1xuK1x0XHRcdGdvdG8gbmV4dDtcbitcdFx0fVxuK1xuK1x0XHRzd2l0Y2ggKHJldCkge1xuK1x0XHRjYXNlIC1FTk9EQVRBOlxuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHRjYXNlIC1FSU5WQUw6XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbituZXh0OlxuK1x0XHRpZiAodW5saWtlbHkoKytudGMgPT0gY250KSkge1xuK1x0XHRcdG50YyA9IDA7XG4rXHRcdFx0Z2VuID0gIWdlbjtcbitcdFx0XHRpZHBmX3F1ZXVlX2NoYW5nZShHRU5fQ0hLLCBjcSk7XG4rXHRcdH1cbitcdH1cbitcbitvdXQ6XG4rXHRjcS1cdTAwM2VuZXh0X3RvX2NsZWFuID0gbnRjO1xuK1xuK1x0aWYgKHVubGlrZWx5KCFkb25lX2ZyYW1lcykpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dHhfY250ID0geGRwc3EtXHUwMDNlZGVzY19jb3VudDtcbitcbitcdC8qIERvbid0IGdvIHBhc3QgbmV4dF90b191c2UgKi9cbitcdF9fc2V0X2JpdCh4ZHBzcS1cdTAwM2VuZXh0X3RvX3VzZSwgbWFzayk7XG4rXG4rXHRuZXdfbnRjID0gZmluZF9uZXh0X2JpdChtYXNrLCB0eF9jbnQsIHhkcHNxLVx1MDAzZW5leHRfdG9fY2xlYW4pO1xuK1x0ZG9uZV9mcmFtZXMgPSBuZXdfbnRjIC0geGRwc3EtXHUwMDNlbmV4dF90b19jbGVhbjtcbitcbitcdGlmIChuZXdfbnRjID09IHR4X2NudClcbitcdFx0ZG9uZV9mcmFtZXMgKz0gZmluZF9maXJzdF9iaXQobWFzaywgdHhfY250KTtcbitcbitcdF9fY2xlYXJfYml0KHhkcHNxLVx1MDAzZW5leHRfdG9fdXNlLCBtYXNrKTtcbitcbitcdHJldHVybiBkb25lX2ZyYW1lcztcbit9XG4rXG4gdTMyIGlkcGZfeGRwc3FfcG9sbChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpXG4ge1xuIFx0c3RydWN0IGlkcGZfY29tcGxfcXVldWUgKmNxID0geGRwc3EtXHUwMDNlY29tcGxxO1xuQEAgLTI2MCw2ICszNDksMTAgQEAgdTMyIGlkcGZfeGRwc3FfcG9sbChzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EsIHUzMiBidWRnZXQpXG4gXHR1MzIgZG9uZV9mcmFtZXM7XG4gXHRib29sIGdlbjtcbiBcbitcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmlkcGZfeGRwX2ZiKSBcdTAwMjZcdTAwMjZcbitcdCAgICBpZHBmX3F1ZXVlX2hhcyhGTE9XX1NDSF9FTiwgeGRwc3EpKVxuK1x0XHRyZXR1cm4gaWRwZl94ZHBzcV9wb2xsX2ZiKHhkcHNxLCBidWRnZXQpO1xuK1xuIFx0Z2VuID0gaWRwZl9xdWV1ZV9oYXMoR0VOX0NISywgY3EpO1xuIFxuIFx0Zm9yIChkb25lX2ZyYW1lcyA9IDA7IGRvbmVfZnJhbWVzIFx1MDAzYyBidWRnZXQ7ICkge1xuQEAgLTQ3OSw2ICs1NzIsMjQgQEAgc3RhdGljIGludCBpZHBmX3hkcF9zZXR1cF9wcm9nKHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCxcbiBcdFx0cmV0dXJuIC1FTk9TUEM7XG4gXHR9XG4gXG4rXHR2cG9ydC1cdTAwM2V4ZHBzcV9mYiA9ICFpZHBmX2lzX2NhcF9lbmEodnBvcnQtXHUwMDNlYWRhcHRlciwgSURQRl9PVEhFUl9DQVBTLFxuK1x0XHRcdFx0XHQgICBWSVJUQ0hOTDJfQ0FQX1NQTElUUV9RU0NIRUQpO1xuK1x0aWYgKCF2cG9ydC1cdTAwM2V4ZHBzcV9mYilcbitcdFx0Z290byByZXNldDtcbitcbitcdGlmIChwcm9nKSB7XG4rXHRcdGJvb2wgd2FybiA9ICFzdGF0aWNfa2V5X2VuYWJsZWQoXHUwMDI2aWRwZl94ZHBfZmIpO1xuK1xuK1x0XHRzdGF0aWNfYnJhbmNoX2luYyhcdTAwMjZpZHBmX3hkcF9mYik7XG4rXG4rXHRcdGlmICh3YXJuIFx1MDAyNlx1MDAyNiBuZXRfcmF0ZWxpbWl0KCkpXG4rXHRcdFx0bmV0ZGV2X3dhcm4odnBvcnQtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdFx0ICAgIFwiVGhlIEZXIGRvZXNuJ3Qgc3VwcG9ydCBUeCBpbiBGSUZPIG1vZGUsIFhEUCBUeCBwZXJmb3JtYW5jZSBtaWdodCBiZSBzdWJvcHRpbWFsXFxuXCIpO1xuK1x0fSBlbHNlIHtcbitcdFx0c3RhdGljX2JyYW5jaF9kZWMoXHUwMDI2aWRwZl94ZHBfZmIpO1xuK1x0fVxuK1xuK3Jlc2V0OlxuIFx0b2xkID0gY2ZnLVx1MDAzZXVzZXJfY29uZmlnLnhkcF9wcm9nO1xuIFx0Y2ZnLVx1MDAzZXVzZXJfY29uZmlnLnhkcF9wcm9nID0gcHJvZztcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL3hkcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaFxuaW5kZXggNjNlNTZmN2Q0M2UwMDIuLjNkMDFjNTM1YmQ0YzYwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi94ZHAuaFxuQEAgLTgsNiArOCwxMCBAQFxuIFxuICNpbmNsdWRlIFwiaWRwZl90eHJ4LmhcIlxuIFxuK3N0cnVjdCBpZHBmX3FfdmVjX3JzcmM7XG4rXG4rREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGlkcGZfeGRwX2ZiKTtcbitcbiBpbnQgaWRwZl94ZHBfcnhxX2luZm9faW5pdChzdHJ1Y3QgaWRwZl9yeF9xdWV1ZSAqcnhxKTtcbiBpbnQgaWRwZl94ZHBfcnhxX2luZm9faW5pdF9hbGwoY29uc3Qgc3RydWN0IGlkcGZfcV92ZWNfcnNyYyAqcnNyYyk7XG4gdm9pZCBpZHBmX3hkcF9yeHFfaW5mb19kZWluaXQoc3RydWN0IGlkcGZfcnhfcXVldWUgKnJ4cSwgdTMyIG1vZGVsKTtcbkBAIC0yMSw2ICsyNSwzNCBAQCB2b2lkIGlkcGZfeGRwc3FzX3B1dChjb25zdCBzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQpO1xuIHUzMiBpZHBmX3hkcHNxX3BvbGwoc3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxLCB1MzIgYnVkZ2V0KTtcbiBib29sIGlkcGZfeGRwX3R4X2ZsdXNoX2J1bGsoc3RydWN0IGxpYmV0aF94ZHBfdHhfYnVsayAqYnEsIHUzMiBmbGFncyk7XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwX3R4X3htaXRfZmIoc3RydWN0IGxpYmV0aF94ZHBfdHhfZGVzYyBkZXNjLCB1MzIgaSxcbitcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbGliZXRoX3hkcHNxICpzcSwgdTY0IHByaXYpXG4re1xuK1x0c3RydWN0IGlkcGZfZmxleF90eF9zY2hlZF9kZXNjICp0eF9kZXNjID0gc3EtXHUwMDNlZGVzY3M7XG4rXHR1MzIgY21kO1xuK1xuK1x0Y21kID0gRklFTERfUFJFUChJRFBGX1RYRF9GTEVYX0ZMT1dfRFRZUEVfTSxcbitcdFx0XHQgSURQRl9UWF9ERVNDX0RUWVBFX0ZMRVhfRkxPV19TQ0hFKTtcbitcdGlmIChkZXNjLmZsYWdzIFx1MDAyNiBMSUJFVEhfWERQX1RYX0xBU1QpXG4rXHRcdGNtZCB8PSBJRFBGX1RYRF9GTEVYX0ZMT1dfQ01EX0VPUDtcbitcdGlmIChwcml2IFx1MDAyNlx1MDAyNiAoZGVzYy5mbGFncyBcdTAwMjYgTElCRVRIX1hEUF9UWF9DU1VNKSlcbitcdFx0Y21kIHw9IElEUEZfVFhEX0ZMRVhfRkxPV19DTURfQ1NfRU47XG4rXG4rXHR0eF9kZXNjID0gXHUwMDI2dHhfZGVzY1tpXTtcbitcdHR4X2Rlc2MtXHUwMDNlYnVmX2FkZHIgPSBjcHVfdG9fbGU2NChkZXNjLmFkZHIpO1xuK1xuKyNpZmRlZiBfX0xJQkVUSF9XT1JEX0FDQ0VTU1xuK1x0Kih1NjQgKilcdTAwMjZ0eF9kZXNjLVx1MDAzZXF3MSA9ICgodTY0KWRlc2MubGVuIFx1MDAzY1x1MDAzYyA0OCkgfCAoKHU2NClpIFx1MDAzY1x1MDAzYyAzMikgfCBjbWQ7XG4rI2Vsc2VcbitcdHR4X2Rlc2MtXHUwMDNlcXcxLnJ4cl9idWZzaXplID0gY3B1X3RvX2xlMTYoZGVzYy5sZW4pO1xuK1x0dHhfZGVzYy1cdTAwM2VxdzEuY29tcGxfdGFnID0gY3B1X3RvX2xlMTYoaSk7XG4rXHR0eF9kZXNjLVx1MDAzZXF3MS50c1swXSA9IDA7XG4rXHR0eF9kZXNjLVx1MDAzZXF3MS50c1sxXSA9IDA7XG4rXHR0eF9kZXNjLVx1MDAzZXF3MS50c1syXSA9IDA7XG4rXHR0eF9kZXNjLVx1MDAzZXF3MS5jbWRfZHR5cGUgPSBjbWQ7XG4rI2VuZGlmXG4rfVxuK1xuIC8qKlxuICAqIGlkcGZfeGRwX3R4X3htaXQgLSBwcm9kdWNlIGEgc2luZ2xlIEhXIFR4IGRlc2NyaXB0b3Igb3V0IG9mIFhEUCBkZXNjXG4gICogQGRlc2M6IFhEUCBkZXNjcmlwdG9yIHRvIHB1bGwgdGhlIERNQSBhZGRyZXNzIGFuZCBsZW5ndGggZnJvbVxuQEAgLTM0LDYgKzY2LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcF90eF94bWl0KHN0cnVjdCBsaWJldGhfeGRwX3R4X2Rlc2MgZGVzYywgdTMyIGksXG4gXHRzdHJ1Y3QgaWRwZl9mbGV4X3R4X2Rlc2MgKnR4X2Rlc2MgPSBzcS1cdTAwM2VkZXNjcztcbiBcdHUzMiBjbWQ7XG4gXG4rXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZpZHBmX3hkcF9mYikgXHUwMDI2XHUwMDI2XG4rXHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sXG4rXHRcdFx0ICAgbGliZXRoX3hkcHNxX3RvX3NxKHNxLCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSxcbitcdFx0XHRcdFx0ICAgICAgbmV4dF90b191c2UpKSkge1xuK1x0XHRpZHBmX3hkcF90eF94bWl0X2ZiKGRlc2MsIGksIHNxLCBwcml2KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0Y21kID0gRklFTERfUFJFUChJRFBGX0ZMRVhfVFhEX1FXMV9EVFlQRV9NLFxuIFx0XHRcdCBJRFBGX1RYX0RFU0NfRFRZUEVfRkxFWF9MMlRBRzFfTDJUQUcyKTtcbiBcdGlmIChkZXNjLmZsYWdzIFx1MDAyNiBMSUJFVEhfWERQX1RYX0xBU1QpXG5AQCAtNTMsMTAgKzkzLDI3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcF90eF94bWl0KHN0cnVjdCBsaWJldGhfeGRwX3R4X2Rlc2MgZGVzYywgdTMyIGksXG4gI2VuZGlmXG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcHNxX3NldF9yc19mYihjb25zdCBzdHJ1Y3QgaWRwZl90eF9xdWV1ZSAqeGRwc3EpXG4re1xuK1x0dTMyIG4gPSBtaW4oeGRwc3EtXHUwMDNlcGVuZGluZywgeGRwc3EtXHUwMDNlZGVzY19jb3VudCAtIHhkcHNxLVx1MDAzZW5leHRfdG9fY2xlYW4pO1xuK1xuK1x0Yml0bWFwX3NldCh4ZHBzcS1cdTAwM2VwZW5kaW5nX21hc2ssIHhkcHNxLVx1MDAzZW5leHRfdG9fY2xlYW4sIG4pO1xuK1xuK1x0biA9IHhkcHNxLVx1MDAzZXBlbmRpbmcgLSBuO1xuK1x0aWYgKG4pXG4rXHRcdGJpdG1hcF9zZXQoeGRwc3EtXHUwMDNlcGVuZGluZ19tYXNrLCAwLCBuKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSB2b2lkIGlkcGZfeGRwc3Ffc2V0X3JzKGNvbnN0IHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSlcbiB7XG4gXHR1MzIgbnR1LCBjbWQ7XG4gXG4rXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZpZHBmX3hkcF9mYikgXHUwMDI2XHUwMDI2XG4rXHQgICAgaWRwZl9xdWV1ZV9oYXMoRkxPV19TQ0hfRU4sIHhkcHNxKSkge1xuK1x0XHRpZHBmX3hkcHNxX3NldF9yc19mYih4ZHBzcSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbiBcdG50dSA9IHhkcHNxLVx1MDAzZW5leHRfdG9fdXNlO1xuIFx0aWYgKHVubGlrZWx5KCFudHUpKVxuIFx0XHRudHUgPSB4ZHBzcS1cdTAwM2VkZXNjX2NvdW50O1xuQEAgLTg0LDcgKzE0MSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcHNxX3VwZGF0ZV90YWlsKGNvbnN0IHN0cnVjdCBpZHBmX3R4X3F1ZXVlICp4ZHBzcSlcbiAgKiBTZXQgdGhlIFJTIGJpdCAoXCJlbmQgb2YgYmF0Y2hcIiksIGJ1bXAgdGhlIHRhaWwsIGFuZCBxdWV1ZSB0aGUgY2xlYW51cCB0aW1lci5cbiAgKiBUbyBiZSBjYWxsZWQgYWZ0ZXIgYSBOQVBJIHBvbGxpbmcgbG9vcCwgYXQgdGhlIGVuZCBvZiAubmRvX3hkcF94bWl0KCkgZXRjLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgdm9pZCBpZHBmX3hkcF90eF9maW5hbGl6ZSh2b2lkICpfeGRwc3EsIGJvb2wgc2VudCwgYm9vbCBmbHVzaClcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgaWRwZl94ZHBfdHhfZmluYWxpemUodm9pZCAqX3hkcHNxLCBib29sIHNlbnQsXG4rXHRcdFx0XHRcdFx0IGJvb2wgZmx1c2gpXG4ge1xuIFx0c3RydWN0IGlkcGZfdHhfcXVldWUgKnhkcHNxID0gX3hkcHNxO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xpYmV0aC94ZHAuaCBiL2luY2x1ZGUvbmV0L2xpYmV0aC94ZHAuaFxuaW5kZXggODk4NzIzYWI2MmU4MTIuLmVkNjFkODNiZGEyZDc3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbGliZXRoL3hkcC5oXG4rKysgYi9pbmNsdWRlL25ldC9saWJldGgveGRwLmhcbkBAIC00MzAsNiArNDMwLDE5IEBAIHN0cnVjdCBsaWJldGhfeGRwc3Ege1xuIFx0c3RydWN0IGxpYmV0aF94ZHBzcV9sb2NrXHQqbG9jaztcbiB9O1xuIFxuKy8qKlxuKyAqIGxpYmV0aF94ZHBzcV90b19zcSAtIGdldCBTUSBwb2ludGVyIGZyb20gYW4gWERQU1EgcG9pbnRlclxuKyAqIEB4ZHBzcTogXHUwMDI2bGliZXRoX3hkcHNxIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHF1ZXVlXG4rICogQHR5cGU6IHR5cGVvZigpIG9mIHRoZSBkcml2ZXIgVHggcXVldWUgc3RydWN0dXJlXG4rICogQG1lbWJlcjogbmFtZSBvZiB0aGUgTlRVIGZpZWxkIGluc2lkZSBAdHlwZVxuKyAqXG4rICogU29tZSBvZiB0aGUgc2VuZGluZyBjYWxsYmFja3MgdGFrZSBvbmx5IFx1MDAyNmxpYmV0aF94ZHBzcSBwb2ludGVyIGFuZCBubyBwb2ludGVyXG4rICogdG8gdGhlIGFjdHVhbCBkcml2ZXIgVHggcXVldWUgc3RydWN0dXJlLiBVc2UgdGhpcyBoZWxwZXIgdG8gcXVpY2tseSBqdW1wIHRvXG4rICogdGhlIGxhdHRlciB3aGVuIG5lZWRlZC5cbisgKi9cbisjZGVmaW5lIGxpYmV0aF94ZHBzcV90b19zcSh4ZHBzcSwgdHlwZSwgbWVtYmVyKVx0XHRcdFx0ICAgICAgXFxcbitcdGNvbnRhaW5lcl9vZl9jb25zdCgoeGRwc3EpLVx1MDAzZW50dSwgdHlwZSwgbWVtYmVyKVxuK1xuIC8qKlxuICAqIHN0cnVjdCBsaWJldGhfeGRwX3R4X2Rlc2MgLSBhYnN0cmFjdGlvbiBmb3IgYW4gWERQIFR4IGRlc2NyaXB0b3JcbiAgKiBAYWRkcjogRE1BIGFkZHJlc3Mgb2YgdGhlIGZyYW1lXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwOToyODozMC40MjU5NDM3MjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjEzODc1MDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSURQRiBYRFAgRmFsbGJhY2sgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBzZWVtcyBsaWtlIGl0IGludHJvZHVjZXMgYSBmYWxsYmFjayBtb2RlIGZvciBYRFAgVHggaW4gdGhlIEludGVsIElEUEYgZHJpdmVyLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQncyB0b3VjaGluZyBgaWRwZl90eHJ4LmNgLCBgaWRwZl90eHJ4LmhgLCBgeGRwLmNgLCBgeGRwLmhgLCBhbmQgYGluY2x1ZGUvbmV0L2xpYmV0aC94ZHAuaGAsIHNvIGl0J3MgZGVmaW5pdGVseSBkaWdnaW5nIGludG8gdGhlIGNvcmUgWERQIFR4IHBhdGggZm9yIHRoaXMgZHJpdmVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHdlIGFjdHVhbGx5ICpyZWFjaCogdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJRFBGLCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgaXMgdGhlIFwiSW50ZWwgQ29yZSBOSUMgRmFtaWx5XCIgZHJpdmVyIOKAkyBhIFBDSSBkZXZpY2UgZHJpdmVyLlxuXG5UaGUgcmVhbCBxdWVzdGlvbiBpcywgY2FuIHdlIHJlYWxpc3RpY2FsbHkgZW11bGF0ZSBvciBmdXp6IHRoaXM/IFN0YW5kYXJkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIHR5cGljYWxseSBkb24ndCBleHBvc2UgUENJIGRldmljZXMgdW5sZXNzIHRoZXkncmUgZXhwbGljaXRseSBlbXVsYXRlZC4gU3l6a2FsbGVyICpkb2VzKiBoYXZlIHNvbWUgc3VwcG9ydCBmb3IgZnV6emluZyBQQ0kgZGV2aWNlcyB2aWEgdlBDSSBvciBzaW1pbGFyLCBidXQgdGhlIHJlYWwgYmVuZWZpdCBpcyBpbiBkcml2ZXJzIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCB0aHJvdWdoIHNvZnR3YXJlIGludGVyZmFjZXMgb3IgaGF2ZSBhbiBlbXVsYXRvci4gRm9yIHRoaXMgY2FzZSwgSSdkIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBpcyBhIHdheSB0byBpbnN0YW50aWF0ZSBvbmUsIHNpbmNlIElEUEYgaXMgdHlwaWNhbGx5IGEgcGh5c2ljYWwgTklDIGRyaXZlci5cblxuSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGFuIElEUEYgZW11bGF0b3IgaXMgYXZhaWxhYmxlIG9yIGlmIGl0J3MgcHVyZWx5IGhhcmR3YXJlLiBXYWl0LCBsZXQgbWUgY2hlY2sg4oCTIGlzIElEUEYgZXZlbiBhIHZpcnR1YWwgZGV2aWNlPyBcIkludGVsIEluZnJhc3RydWN0dXJlIERhdGEgUGxhbmUgRnVuY3Rpb24sXCIgdGhhdCBjb3VsZCBiZSBlaXRoZXIuIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDc5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDk6Mjg6MzcuNjM5ODIxMTk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDcyMjY0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSURQRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWctMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWc6NDpjb25maWcgSURQRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZy01LVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBJbmZyYXN0cnVjdHVyZSBEYXRhIFBhdGggRnVuY3Rpb24gU3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZz0xNz1pZiBJRFBGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnLTE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvS2NvbmZpZzoxOTpjb25maWcgSURQRl9TSU5HTEVRXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9LY29uZmlnLTIwLVxcdGJvb2wgXFxcImlkcGYgc2luZ2xlcSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwOToyODozNy43NzQ1NTEwODRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTg1MTU4Mjc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBJRFBGIEtjb25maWcqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgY3JhY2sgb3BlbiB0aGUgS2NvbmZpZyBmb3IgSURQRiBhbmQgc2VlIHdoYXQgZ29vZGllcyBhcmUgaGlkZGVuIHdpdGhpbi5cIiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgaW1wbGllZCBnb2FscyBoZXJlOiBpcyB0aGlzIGEgc3BlY2lmaWMgbW9kdWxlPyBPciBhbiBvdmVyYXJjaGluZyBjb25maWd1cmF0aW9uIHNjaGVtZT8gR2l2ZW4gbXkgYmFja2dyb3VuZCwgSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjb3JlIG9mIHRoZSBjb25maWd1cmF0aW9uIGZvciBhIHBhcnRpY3VsYXIgSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBQbGF0Zm9ybSBGcmFtZXdvcmsgKElEUEYpLCBvciBhIHNpbWlsYXIgc3lzdGVtLiBJIHdhbnQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBleHBvc2VkIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBwb3RlbnRpYWwgZmVhdHVyZSBmbGFncyB0aGF0IGFyZSByZWxldmFudCB0byBteSBjdXJyZW50IHByb2plY3QuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBzdXBwb3J0ZWQgaGFyZHdhcmUgdGFyZ2V0cywgdGhlIGF2YWlsYWJsZSBzZWN1cml0eSBmZWF0dXJlcywgYW5kIGhvdyBtb2R1bGFyIHRoZSBJRFBGIGlzLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgS2NvbmZpZyBmaWxlIGlzIGdvaW5nIHRvIGJlIHBhcmFtb3VudCB0byBhbnkga2luZCBvZiBlZmZlY3RpdmUgaW1wbGVtZW50YXRpb24gb3IgY3VzdG9taXphdGlvbiwgc28gbGV0J3MgZ2V0IHRvIHdvcmsgYW5kIHVuZGVyc3RhbmQgdGhlIG9wdGlvbnMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNTYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQwOToyODo0OS42MjYxMzY0MTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCMgQ29weXJpZ2h0IChDKSAyMDI0IEludGVsIENvcnBvcmF0aW9uXFxuICAgMzpcXHRcXG4gICA0OlxcdGNvbmZpZyBJRFBGXFxuICAgNTpcXHRcXHR0cmlzdGF0ZSBcXFwiSW50ZWwoUikgSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQYXRoIEZ1bmN0aW9uIFN1cHBvcnRcXFwiXFxuICAgNjpcXHRcXHRkZXBlbmRzIG9uIFBDSV9NU0lcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG4gICA4OlxcdFxcdHNlbGVjdCBESU1MSUJcXG4gICA5OlxcdFxcdHNlbGVjdCBMSUJFVEhfWERQXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEludGVsKFIpIEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvblxcbiAgMTI6XFx0XFx0ICBkZXZpY2VzLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcXG4gIDE1OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgaWRwZi5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0aWYgSURQRlxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgSURQRl9TSU5HTEVRXFxuICAyMDpcXHRcXHRib29sIFxcXCJpZHBmIHNpbmdsZXEgc3VwcG9ydFxcXCJcXG4gIDIxOlxcdFxcdGhlbHBcXG4gIDIyOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsZWdhY3kgc2luZ2xlIFJ4L1R4IHF1ZXVlcyB3L25vXFxuICAyMzpcXHRcXHQgIGNvbXBsZXRpb24gYW5kIGZpbGwgcXVldWVzLiBPbmx5IGVuYWJsZSBpZiB5b3UgaGF2ZSBoYXJkd2FyZSB3aGljaFxcbiAgMjQ6XFx0XFx0ICB3YW50cyB0byB3b3JrIGluIHRoaXMgbW9kZSBhcyBpdCBpbmNyZWFzZXMgdGhlIGRyaXZlciBzaXplIGFuZCBhZGRzXFxuICAyNTpcXHRcXHQgIHJ1bnRtZSBjaGVja3Mgb24gaG90cGF0aC5cXG4gIDI2OlxcdFxcbiAgMjc6XFx0ZW5kaWYgIyBJRFBGXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA5OjI4OjQ5LjYyNjIzMDc4MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNjI0MjAyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBhIFBDSSBEZXZpY2UgRHJpdmVyOiBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIFBDSSBkZXZpY2UgZHJpdmVyLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGluIG15IG1pbmQsIGFzIGFsd2F5cywgaXMgd2hldGhlciBvciBub3QgdGhpcyBjYW4gYmUgZWZmZWN0aXZlbHkgZnV6emVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFdpdGggbXkgZXhwZXJpZW5jZSwgSSBrbm93IHRoYXQgdGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycywgdGhvc2UgdGhhdCAqZGVtYW5kKiBhIHJlYWwgUENJIGRldmljZSBhbmQgZG9uJ3QgaGF2ZSBhIHJlbGlhYmxlIGVtdWxhdG9yIHdpdGhpbiBRRU1VIG9yIHN5emthbGxlciwgYXJlIHR5cGljYWxseSBhIHBhaW4uIFRoZSBgcHJvYmVgIGZ1bmN0aW9uIGp1c3Qgd29uJ3Qgc3VjY2VlZCwgYW5kLCBjb25zZXF1ZW50bHksIHRoZSBuZXR3b3JrIGRldmljZSAobmV0ZGV2KSBpdCdzIHRyeWluZyB0byByZWdpc3RlciB3aWxsIG5ldmVyIGFwcGVhci4gSXQncyBhIGRlYWQgZW5kLCBnZW5lcmFsbHkuXG5cblNvLCB0aGUgbmV4dCBvYnZpb3VzIGNoZWNrIGlzIHdoZXRoZXIgdGhlcmUncyBhbiBlbXVsYXRvciBmb3IgdGhpcyBzcGVjaWZpYyB0eXBlIG9mIGRldmljZSDigJMgYW4gSURQRiBlbXVsYXRvciDigJMgd2l0aGluIFFFTVUuIEkgKnRoaW5rKiBJIHJlY2FsbCBsb29raW5nIGZvciBzb21ldGhpbmcgbGlrZSB0aGF0IGJlZm9yZSwgYW5kIEkgZG9uJ3QgcmVjYWxsIGl0IGV4aXN0aW5nLiBCdXQgaXQncyB3b3J0aCBkb3VibGUtY2hlY2tpbmcuIElmIFFFTVUgaXMgYSBkZWFkIGVuZCwgdGhlIG5leHQgcGxhY2UgdG8gbG9vayBpcyBzeXprYWxsZXIuIERvZXMgc3l6a2FsbGVyIG9mZmVyIGFueSBzcGVjaWFsaXplZCBzdXBwb3J0IGZvciBJRFBGIHRoYXQgSSdtIG92ZXJsb29raW5nPyBUaGF0IHdvdWxkIGJlIGEgaHVnZSB0aW1lIHNhdmVyLiBJdOKAmXMgdGhlIG9idmlvdXMgcm91dGUgdG8gc3VjY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk2MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDA5OjI4OjU2Ljk4ODY1MzAxNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDgwOTQzODkwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZHBmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDk6Mjg6NTkuMDY5NjE2MDQzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg5ODc5ODQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyB0aGUgSURQRiBEcml2ZXI6IEEgRnV6emluZyBQZXJzcGVjdGl2ZSoqXG5cbk9rYXksIGxldCdzIHNlZSBob3cgd2UgY2FuIGdldCB0byB0aGlzIGNvZGUuIEl0J3MgYnVyaWVkIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2AuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBpdCdzIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSBzdGFuZGFyZCBmdXp6aW5nIHNldHVwLiBJZiB0aGVyZSdzIG5vIGhhcmR3YXJlIHByZXNlbnQsIHRoZSBkcml2ZXIgd2lsbCBzaW1wbHkgc2l0IHRoZXJlLCBpbmVydC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBzZWUgaWYgc3l6a2FsbGVyIGhhcyBzb21lIGtpbmQgb2YgaG9vaywgbWF5YmUgc29tZXRoaW5nIGxpa2UgYHN5el9wY2lfZGV2aWNlYCB0byB0cmlnZ2VyIGl0LiBJIHJlbWVtYmVyIGl0IGhhcyBhIGJ1bmNoIG9mIGhvb2tzIGZvciBkaWZmZXJlbnQgc3Vic3lzdGVtcyBsaWtlIFVTQiAoYHN5el91c2JfY29ubmVjdGApLCA4MDIuMTEgKGBzeXpfODAyMTFfaW5qZWN0X2ZyYW1lYCksIGdlbmV0bGluayAoYHN5el9nZW5ldGxpbmtfZ2V0X2ZhbWlseWApLCBhbmQgbW91bnRpbmcgaW1hZ2VzIChgc3l6X21vdW50X2ltYWdlYCkuIEJ1dCwgZG9lcyBzeXprYWxsZXIgaGF2ZSBhbiBleHBsaWNpdCBwcmltaXRpdmUgZm9yIFBDSSBkZXZpY2VzPyBXYWl0LCAqZG9lcyogc3l6a2FsbGVyIGhhdmUgYHN5el9wY2lfZGV2aWNlYD8gTm8sIHRoYXQncyBub3QgcmlnaHQuIGBzeXpfa3ZtX3NldHVwX2NwdWAgaXMgYXMgY2xvc2UgYXMgaXQgZ2V0cy4gT2theSwgd2FpdCwgKmRvZXMqIHN5emthbGxlciBoYXZlIGBzeXpfcGNpX2RldmljZWA/IE5vLCBpdCBkb2Vzbid0LlxuXG5JdCAqZG9lcyogZnV6eiBzb21lIFBDSSBkcml2ZXJzIGlmIHRoZXkgYXJlIGV4cG9zZWQgdGhyb3VnaCBzb21lIHZpcnR1YWwgYnVzLCBidXQgdGhhdCdzIHVzdWFsbHkgbm90IHRoZSBjYXNlLiBMZXQgbWUgZG91YmxlLWNoZWNrIC0gZG9lcyBzeXprYWxsZXIgaGF2ZSBhIGBzeXpfcGNpX2RldmljZWA/IE5vcGUsIG5vdGhpbmcuXG5cbkFoLCByaWdodCwgdGhlIHByb21wdC4gSSBoYXZlIHRvIGNvbnNpZGVyIHRoaXM6IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczogLi4uIC0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXCJcblxuVGhlIElEUEYgaXMgYW4gKmFjdHVhbCogSW50ZWwgTklDOyBpdCdzIGEgcGh5c2ljYWwgZGV2aWNlLiBBbmQgUUVNVSwgaW4gYSBzdGFuZGFyZCBzZXR1cCAob3IgR0NFIGZvciB0aGF0IG1hdHRlcikgZG9lc24ndCBlbXVsYXRlIHRoZSBJRFBGLiBXZSdyZSB0YWxraW5nIGFib3V0IGEgaGFyZHdhcmUgZGV2aWNlIGxpa2UgSW50ZWwncyBJUFUgKEluZnJhc3RydWN0dXJlIFByb2Nlc3NpbmcgVW5pdCkgXCJNb3VudCBFdmFucy5cIiBUaGlzIGlzbid0IGxpa2UgYW4gZTEwMDAgb3IgdmlydGlvLW5ldCwgb3IgZXZlbiBhIHNvZnR3YXJlLWVtdWxhdGVkIFVTQiBnYWRnZXQuIFFFTVUgZG9lcyBlbXVsYXRlIHNvbWUgTklDcywgYnV0IG5vdCBJRFBGOyBpdCBlbXVsYXRlcyB0aGluZ3MgbGlrZSBlMTAwMCwgZTEwMDBlLCBpZ2IsIHJ0bDgxMzksIHBjbmV0LCBuZTJrX3BjaSwgdm14bmV0MywgdmlydGlvLW5ldCwgdHVsaXAuIFNvLCBhbnkgY29kZSBzcGVjaWZpYyB0byBJRFBGIGlzIGVmZmVjdGl2ZWx5IHVucmVhY2hhYmxlIGluIHRob3NlIGVudmlyb25tZW50cy4gSXMgdGhlcmUgYSB2aXJ0dWFsIGJ1cz8gTm8sIElEUEYgaXMgaGFyZHdhcmUgc3BlY2lmaWMuXG5cblRoZXJlZm9yZSwgSSdtIGNvbmNsdWRpbmcgdGhhdCB0aGlzIHBhdGNoIGlzbid0IFdvcnRoRnV6emluZy4gVGhlIGNvZGUgcGF0aHMgYXJlICppbXBvc3NpYmxlKiB0byBoaXQgaW4gYSBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudCBiZWNhdXNlIHRoZSBJRFBGIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHRoYXQgaXNuJ3QgZW11bGF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNzUsIk91dHB1dFRva2VucyI6OTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMDk6Mjk6MDguOTY4NDE2NDM5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIElEUEYgKEluZnJhc3RydWN0dXJlIERhdGEgUGF0aCBGdW5jdGlvbikgZHJpdmVyLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIG5ldHdvcmsgZHJpdmVyIGZvciBJbnRlbCBJUFVzLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBoYXJkd2FyZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSBvciBHQ0UpLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgSURQRiAoSW5mcmFzdHJ1Y3R1cmUgRGF0YSBQYXRoIEZ1bmN0aW9uKSBkcml2ZXIuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgbmV0d29yayBkcml2ZXIgZm9yIEludGVsIElQVXMuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIGhhcmR3YXJlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VIG9yIEdDRSksIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow2wk2f[1] Phase: Running StartedAt: 2026-07-09 09:29:20 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2wk2f[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-09 09:29:21 +0000 UTC FinishedAt: 2026-07-09 09:29:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}